ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGZkZWJmZDguLjI1MjBiYTYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNDk1LDYgKzQ5NSwxMSBAQAogUzogNDExIDEzICBHb3RlYm9yZwogUzogU3dlZGVuCiAKK046IFBhdWwgQnJpc3RvdworRTogcGF1bEBwYXVsYnJpc3Rvdy5uZXQKK1c6IGh0dHA6Ly9wYXVsYnJpc3Rvdy5uZXQvbGludXgvaWRlZmxvcHB5Lmh0bWwKK0Q6IE1haW50YWluZXIgb2YgSURFL0FUQVBJIGZsb3BweSBkcml2ZXIKKwogTjogRG9taW5payBCcm9kb3dza2kKIEU6IGxpbnV4QGJyb2RvLmRlCiBXOiBodHRwOi8vd3d3LmJyb2RvLmRlLwpAQCAtMjY0Miw2ICsyNjQ3LDEwIEBACiBTOiBWYWxsYWRvbGlkIDQ3MDA5CiBTOiBTcGFpbgogCitOOiBHYWRpIE94bWFuCitFOiBnYWRpb0BuZXR2aXNpb24ubmV0LmlsCitEOiBPcmlnaW5hbCBhdXRob3IgYW5kIG1haW50YWluZXIgb2YgSURFL0FUQVBJIGZsb3BweS90YXBlIGRyaXZlcnMKKwogTjogR3JlZyBQYWdlCiBFOiBncGFnZUBzb3ZlcmVpZ24ub3JnCiBEOiBJUFggZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQppbmRleCBlNjM4ZTE1Li45N2FkMTkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCkBAIC00MSw2ICs0MSw0OSBAQAogCQlmb3IgdGhlIGRldmljZSBhbmQgYXR0ZW1wdCB0byBiaW5kIHRvIGl0LiAgRm9yIGV4YW1wbGU6CiAJCSMgZWNobyAiODA4NiAxMGY1IiA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzL2Zvby9uZXdfaWQKIAorV2hhdDoJCS9zeXMvYnVzL3BjaS9kcml2ZXJzLy4uLi9yZW1vdmVfaWQKK0RhdGU6CQlGZWJydWFyeSAyMDA5CitDb250YWN0OglDaHJpcyBXcmlnaHQgPGNocmlzd0Bzb3VzLXNvbC5vcmc+CitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIGRldmljZSBJRCB0byB0aGlzIGZpbGUgd2lsbCByZW1vdmUgYW4gSUQKKwkJdGhhdCB3YXMgZHluYW1pY2FsbHkgYWRkZWQgdmlhIHRoZSBuZXdfaWQgc3lzZnMgZW50cnkuCisJCVRoZSBmb3JtYXQgZm9yIHRoZSBkZXZpY2UgSUQgaXM6CisJCVZWVlYgRERERCBTVlZWIFNEREQgQ0NDQyBNTU1NLglUaGF0IGlzIFZlbmRvciBJRCwgRGV2aWNlCisJCUlELCBTdWJzeXN0ZW0gVmVuZG9yIElELCBTdWJzeXN0ZW0gRGV2aWNlIElELCBDbGFzcywKKwkJYW5kIENsYXNzIE1hc2suICBUaGUgVmVuZG9yIElEIGFuZCBEZXZpY2UgSUQgZmllbGRzIGFyZQorCQlyZXF1aXJlZCwgdGhlIHJlc3QgYXJlIG9wdGlvbmFsLiAgQWZ0ZXIgc3VjY2Vzc2Z1bGx5CisJCXJlbW92aW5nIGFuIElELCB0aGUgZHJpdmVyIHdpbGwgbm8gbG9uZ2VyIHN1cHBvcnQgdGhlCisJCWRldmljZS4gIFRoaXMgaXMgdXNlZnVsIHRvIGVuc3VyZSBhdXRvIHByb2Jpbmcgd29uJ3QKKwkJbWF0Y2ggdGhlIGRyaXZlciB0byB0aGUgZGV2aWNlLiAgRm9yIGV4YW1wbGU6CisJCSMgZWNobyAiODA4NiAxMGY1IiA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzL2Zvby9yZW1vdmVfaWQKKworV2hhdDoJCS9zeXMvYnVzL3BjaS9yZXNjYW4KK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CUxpbnV4IFBDSSBkZXZlbG9wZXJzIDxsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCVdyaXRpbmcgYSBub24temVybyB2YWx1ZSB0byB0aGlzIGF0dHJpYnV0ZSB3aWxsCisJCWZvcmNlIGEgcmVzY2FuIG9mIGFsbCBQQ0kgYnVzZXMgaW4gdGhlIHN5c3RlbSwgYW5kCisJCXJlLWRpc2NvdmVyIHByZXZpb3VzbHkgcmVtb3ZlZCBkZXZpY2VzLgorCQlEZXBlbmRzIG9uIENPTkZJR19IT1RQTFVHLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3JlbW92ZQorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJTGludXggUENJIGRldmVsb3BlcnMgPGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIHRvIHRoaXMgYXR0cmlidXRlIHdpbGwKKwkJaG90LXJlbW92ZSB0aGUgUENJIGRldmljZSBhbmQgYW55IG9mIGl0cyBjaGlsZHJlbi4KKwkJRGVwZW5kcyBvbiBDT05GSUdfSE9UUExVRy4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9yZXNjYW4KK0RhdGU6CQlKYW51YXJ5IDIwMDkKK0NvbnRhY3Q6CUxpbnV4IFBDSSBkZXZlbG9wZXJzIDxsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCVdyaXRpbmcgYSBub24temVybyB2YWx1ZSB0byB0aGlzIGF0dHJpYnV0ZSB3aWxsCisJCWZvcmNlIGEgcmVzY2FuIG9mIHRoZSBkZXZpY2UncyBwYXJlbnQgYnVzIGFuZCBhbGwKKwkJY2hpbGQgYnVzZXMsIGFuZCByZS1kaXNjb3ZlciBkZXZpY2VzIHJlbW92ZWQgZWFybGllcgorCQlmcm9tIHRoaXMgcGFydCBvZiB0aGUgZGV2aWNlIHRyZWUuCisJCURlcGVuZHMgb24gQ09ORklHX0hPVFBMVUcuCisKIFdoYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vdnBkCiBEYXRlOgkJRmVicnVhcnkgMjAwOAogQ29udGFjdDoJQmVuIEh1dGNoaW5ncyA8Ymh1dGNoaW5nc0Bzb2xhcmZsYXJlLmNvbT4KQEAgLTUyLDMgKzk1LDMwIEBACiAJCXRoYXQgc29tZSBkZXZpY2VzIG1heSBoYXZlIG1hbGZvcm1hdHRlZCBkYXRhLiAgSWYgdGhlCiAJCXVuZGVybHlpbmcgVlBEIGhhcyBhIHdyaXRhYmxlIHNlY3Rpb24gdGhlbiB0aGUKIAkJY29ycmVzcG9uZGluZyBzZWN0aW9uIG9mIHRoaXMgZmlsZSB3aWxsIGJlIHdyaXRhYmxlLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3ZpcnRmbk4KK0RhdGU6CQlNYXJjaCAyMDA5CitDb250YWN0OglZdSBaaGFvIDx5dS56aGFvQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIHN5bWJvbGljIGxpbmsgYXBwZWFycyB3aGVuIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBTUi1JT1YKKwkJY2FwYWJpbGl0eSBhbmQgdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlciBoYXMgZW5hYmxlZCBpdC4KKwkJVGhlIHN5bWJvbGljIGxpbmsgcG9pbnRzIHRvIHRoZSBQQ0kgZGV2aWNlIHN5c2ZzIGVudHJ5IG9mIHRoZQorCQlWaXJ0dWFsIEZ1bmN0aW9uIHdob3NlIGluZGV4IGlzIE4gKDAuLi5NYXhWRnMtMSkuCisKK1doYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vZGVwX2xpbmsKK0RhdGU6CQlNYXJjaCAyMDA5CitDb250YWN0OglZdSBaaGFvIDx5dS56aGFvQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIHN5bWJvbGljIGxpbmsgYXBwZWFycyB3aGVuIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBTUi1JT1YKKwkJY2FwYWJpbGl0eSBhbmQgdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlciBoYXMgZW5hYmxlZCBpdCwKKwkJYW5kIHRoaXMgZGV2aWNlIGhhcyB2ZW5kb3Igc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXJzLgorCQlUaGUgc3ltYm9saWMgbGluayBwb2ludHMgdG8gdGhlIFBDSSBkZXZpY2Ugc3lzZnMgZW50cnkgb2YKKwkJUGh5c2ljYWwgRnVuY3Rpb24gdGhpcyBkZXZpY2UgZGVwZW5kcyBvbi4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9waHlzZm4KK0RhdGU6CQlNYXJjaCAyMDA5CitDb250YWN0OglZdSBaaGFvIDx5dS56aGFvQGludGVsLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIHN5bWJvbGljIGxpbmsgYXBwZWFycyB3aGVuIGEgZGV2aWNlIGlzIGEgVmlydHVhbCBGdW5jdGlvbi4KKwkJVGhlIHN5bWJvbGljIGxpbmsgcG9pbnRzIHRvIHRoZSBQQ0kgZGV2aWNlIHN5c2ZzIGVudHJ5IG9mIHRoZQorCQlQaHlzaWNhbCBGdW5jdGlvbiB0aGlzIGRldmljZSBhc3NvY2lhdGVzIHdpdGguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXJlZ3VsYXRvciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCmluZGV4IDg3M2VmMWYuLmUwOTFmYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yCkBAIC00LDggKzQsOCBAQAogQ29udGFjdDoJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KIERlc2NyaXB0aW9uOgogCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKLQkJc3RhdGUuIFRoaXMgcmVwb3J0cyB0aGUgcmVndWxhdG9yIGVuYWJsZSBzdGF0dXMsIGZvcgotCQlyZWd1bGF0b3JzIHdoaWNoIGNhbiByZXBvcnQgdGhhdCB2YWx1ZS4KKwkJc3RhdGUuIFRoaXMgcmVwb3J0cyB0aGUgcmVndWxhdG9yIGVuYWJsZSBjb250cm9sLCBmb3IKKwkJcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IHRoYXQgaW5wdXQgdmFsdWUuCiAKIAkJVGhpcyB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6CiAKQEAgLTE0LDE2ICsxNCw1NCBAQAogCQkndW5rbm93bicKIAogCQknZW5hYmxlZCcgbWVhbnMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgaXMgT04gYW5kIGlzIHN1cHBseWluZwotCQlwb3dlciB0byB0aGUgc3lzdGVtLgorCQlwb3dlciB0byB0aGUgc3lzdGVtIChhc3N1bWluZyBubyBlcnJvciBwcmV2ZW50cyBpdCkuCiAKIAkJJ2Rpc2FibGVkJyBtZWFucyB0aGUgcmVndWxhdG9yIG91dHB1dCBpcyBPRkYgYW5kIGlzIG5vdAotCQlzdXBwbHlpbmcgcG93ZXIgdG8gdGhlIHN5c3RlbS4uCisJCXN1cHBseWluZyBwb3dlciB0byB0aGUgc3lzdGVtICh1bmxlc3Mgc29tZSBub24tTGludXgKKwkJY29udHJvbCBoYXMgZW5hYmxlZCBpdCkuCiAKIAkJJ3Vua25vd24nIG1lYW5zIHNvZnR3YXJlIGNhbm5vdCBkZXRlcm1pbmUgdGhlIHN0YXRlLCBvcgogCQl0aGUgcmVwb3J0ZWQgc3RhdGUgaXMgaW52YWxpZC4KIAogCQlOT1RFOiB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbWljcm92b2x0cwotCQlhbmQgbWljcm9hbXBzIHRvIGRldGVybWluZSByZWd1bGF0b3Igb3V0cHV0IGxldmVscy4KKwkJb3IgbWljcm9hbXBzIHRvIGRldGVybWluZSBjb25maWd1cmVkIHJlZ3VsYXRvciBvdXRwdXQgbGV2ZWxzLgorCisKK1doYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vc3RhdHVzCitEZXNjcmlwdGlvbjoKKwkJU29tZSByZWd1bGF0b3IgZGlyZWN0b3JpZXMgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCisJCSJzdGF0dXMiLiBUaGlzIHJlcG9ydHMgdGhlIGN1cnJlbnQgcmVndWxhdG9yIHN0YXR1cywgZm9yCisJCXJlZ3VsYXRvcnMgd2hpY2ggY2FuIHJlcG9ydCB0aGF0IG91dHB1dCB2YWx1ZS4KKworCQlUaGlzIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKKworCQkJb2ZmCisJCQlvbgorCQkJZXJyb3IKKwkJCWZhc3QKKwkJCW5vcm1hbAorCQkJaWRsZQorCQkJc3RhbmRieQorCisJCSJvZmYiIG1lYW5zIHRoZSByZWd1bGF0b3IgaXMgbm90IHN1cHBseWluZyBwb3dlciB0byB0aGUKKwkJc3lzdGVtLgorCisJCSJvbiIgbWVhbnMgdGhlIHJlZ3VsYXRvciBpcyBzdXBwbHlpbmcgcG93ZXIgdG8gdGhlIHN5c3RlbSwKKwkJYW5kIHRoZSByZWd1bGF0b3IgY2FuJ3QgcmVwb3J0IGEgZGV0YWlsZWQgb3BlcmF0aW9uIG1vZGUuCisKKwkJImVycm9yIiBpbmRpY2F0ZXMgYW4gb3V0LW9mLXJlZ3VsYXRpb24gc3RhdHVzIHN1Y2ggYXMgYmVpbmcKKwkJZGlzYWJsZWQgZHVlIHRvIHRoZXJtYWwgc2h1dGRvd24sIG9yIHZvbHRhZ2UgYmVpbmcgdW5zdGFibGUKKwkJYmVjYXVzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBpbnB1dCBwb3dlciBzdXBwbHkuCisKKwkJImZhc3QiLCAibm9ybWFsIiwgImlkbGUiLCBhbmQgInN0YW5kYnkiIGFyZSBhbGwgZGV0YWlsZWQKKwkJcmVndWxhdG9yIG9wZXJhdGlvbiBtb2RlcyAoZGVzY3JpYmVkIGVsc2V3aGVyZSkuICBUaGV5CisJCWltcGx5ICJvbiIsIGJ1dCBwcm92aWRlIG1vcmUgZGV0YWlsLgorCisJCU5vdGUgdGhhdCByZWd1bGF0b3Igc3RhdHVzIGlzIGEgZnVuY3Rpb24gb2YgbWFueSBpbnB1dHMsCisJCW5vdCBsaW1pdGVkIHRvIGNvbnRyb2wgaW5wdXRzIGZyb20gTGludXguICBGb3IgZXhhbXBsZSwKKwkJdGhlIGFjdHVhbCBsb2FkIHByZXNlbnRlZCBtYXkgdHJpZ2dlciAiZXJyb3IiIHN0YXR1czsgb3IKKwkJYSByZWd1bGF0b3IgbWF5IGJlIGVuYWJsZWQgYnkgYW5vdGhlciB1c2VyLCBldmVuIHRob3VnaAorCQlMaW51eCBkaWQgbm90IGVuYWJsZSBpdC4KIAogCiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL3R5cGUKQEAgLTU4LDcgKzk2LDcgQEAKIAkJU29tZSByZWd1bGF0b3IgZGlyZWN0b3JpZXMgd2lsbCBjb250YWluIGEgZmllbGQgY2FsbGVkCiAJCW1pY3Jvdm9sdHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZSBzZXR0aW5nCiAJCW1lYXN1cmVkIGluIG1pY3Jvdm9sdHMgKGkuZS4gRS02IFZvbHRzKSwgZm9yIHJlZ3VsYXRvcnMKLQkJd2hpY2ggY2FuIHJlcG9ydCB0aGF0IHZvbHRhZ2UuCisJCXdoaWNoIGNhbiByZXBvcnQgdGhlIGNvbnRyb2wgaW5wdXQgZm9yIHZvbHRhZ2UuCiAKIAkJTk9URTogVGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWd1bGF0b3IKIAkJb3V0cHV0IHZvbHRhZ2UgbGV2ZWwgYXMgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mCkBAIC03Myw3ICsxMTEsNyBAQAogCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWljcm9hbXBzLiBUaGlzIGhvbGRzIHRoZSByZWd1bGF0b3Igb3V0cHV0IGN1cnJlbnQgbGltaXQKIAkJc2V0dGluZyBtZWFzdXJlZCBpbiBtaWNyb2FtcHMgKGkuZS4gRS02IEFtcHMpLCBmb3IgcmVndWxhdG9ycwotCQl3aGljaCBjYW4gcmVwb3J0IHRoYXQgY3VycmVudC4KKwkJd2hpY2ggY2FuIHJlcG9ydCB0aGUgY29udHJvbCBpbnB1dCBmb3IgYSBjdXJyZW50IGxpbWl0LgogCiAJCU5PVEU6IFRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVndWxhdG9yCiAJCW91dHB1dCBjdXJyZW50IGxldmVsIGFzIHRoaXMgdmFsdWUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZgpAQCAtODcsNyArMTI1LDcgQEAKIERlc2NyaXB0aW9uOgogCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJb3Btb2RlLiBUaGlzIGhvbGRzIHRoZSBjdXJyZW50IHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZSwKLQkJZm9yIHJlZ3VsYXRvcnMgd2hpY2ggY2FuIHJlcG9ydCBpdC4KKwkJZm9yIHJlZ3VsYXRvcnMgd2hpY2ggY2FuIHJlcG9ydCB0aGF0IGNvbnRyb2wgaW5wdXQgdmFsdWUuCiAKIAkJVGhlIG9wbW9kZSB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKIApAQCAtMTAxLDcgKzEzOSw4IEBACiAKIAkJTk9URTogVGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWd1bGF0b3IKIAkJb3V0cHV0IG9wZXJhdGluZyBtb2RlIGFzIHRoaXMgdmFsdWUgaXMgdGhlIHNhbWUgcmVnYXJkbGVzcyBvZgotCQl3aGV0aGVyIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KKwkJd2hldGhlciB0aGUgcmVndWxhdG9yIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuICBBICJzdGF0dXMiCisJCWF0dHJpYnV0ZSBtYXkgYmUgYXZhaWxhYmxlIHRvIGRldGVybWluZSB0aGUgYWN0dWFsIG1vZGUuCiAKIAogV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9taW5fbWljcm92b2x0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1mcy1leHQ0IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1mcy1leHQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWV4dDQKQEAgLTAsMCArMSw4MSBAQAorV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vbWJfc3RhdHMKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJIENvbnRyb2xzIHdoZXRoZXIgdGhlIG11bHRpYmxvY2sgYWxsb2NhdG9yIHNob3VsZAorCQkgY29sbGVjdCBzdGF0aXN0aWNzLCB3aGljaCBhcmUgc2hvd24gZHVyaW5nIHRoZSB1bm1vdW50LgorCQkgMSBtZWFucyB0byBjb2xsZWN0IHN0YXRpc3RpY3MsIDAgbWVhbnMgbm90IHRvIGNvbGxlY3QKKwkJIHN0YXRpc3RpY3MKKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vbWJfZ3JvdXBfcHJlYWxsb2MKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJVGhlIG11bHRpYmxvY2sgYWxsb2NhdG9yIHdpbGwgcm91bmQgdXAgYWxsb2NhdGlvbgorCQlyZXF1ZXN0cyB0byBhIG11bHRpcGxlIG9mIHRoaXMgdHVuaW5nIHBhcmFtZXRlciBpZiB0aGUKKwkJc3RyaXBlIHNpemUgaXMgbm90IHNldCBpbiB0aGUgZXh0NCBzdXBlcmJsb2NrCisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L21iX21heF90b19zY2FuCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVRoZSBtYXhpbXVtIG51bWJlciBvZiBleHRlbnRzIHRoZSBtdWx0aWJsb2NrIGFsbG9jYXRvcgorCQl3aWxsIHNlYXJjaCB0byBmaW5kIHRoZSBiZXN0IGV4dGVudAorCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9tYl9taW5fdG9fc2NhbgorRGF0ZToJCU1hcmNoIDIwMDgKK0NvbnRhY3Q6CSJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgbWluaW11bSBudW1iZXIgb2YgZXh0ZW50cyB0aGUgbXVsdGlibG9jayBhbGxvY2F0b3IKKwkJd2lsbCBzZWFyY2ggdG8gZmluZCB0aGUgYmVzdCBleHRlbnQKKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vbWJfb3JkZXIyX3JlcQorRGF0ZToJCU1hcmNoIDIwMDgKK0NvbnRhY3Q6CSJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KK0Rlc2NyaXB0aW9uOgorCQlUdW5pbmcgcGFyYW1ldGVyIHdoaWNoIGNvbnRyb2xzIHRoZSBtaW5pbXVtIHNpemUgZm9yIAorCQlyZXF1ZXN0cyAoYXMgYSBwb3dlciBvZiAyKSB3aGVyZSB0aGUgYnVkZHkgY2FjaGUgaXMKKwkJdXNlZAorCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9tYl9zdHJlYW1fcmVxCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCUZpbGVzIHdoaWNoIGhhdmUgZmV3ZXIgYmxvY2tzIHRoYW4gdGhpcyB0dW5hYmxlCisJCXBhcmFtZXRlciB3aWxsIGhhdmUgdGhlaXIgYmxvY2tzIGFsbG9jYXRlZCBvdXQgb2YgYQorCQlibG9jayBncm91cCBzcGVjaWZpYyBwcmVhbGxvY2F0aW9uIHBvb2wsIHNvIHRoYXQgc21hbGwKKwkJZmlsZXMgYXJlIHBhY2tlZCBjbG9zZWx5IHRvZ2V0aGVyLiAgRWFjaCBsYXJnZSBmaWxlCisJCSB3aWxsIGhhdmUgaXRzIGJsb2NrcyBhbGxvY2F0ZWQgb3V0IG9mIGl0cyBvd24gdW5pcXVlCisJCSBwcmVhbGxvY2F0aW9uIHBvb2wuCisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L2lub2RlX3JlYWRhaGVhZAorRGF0ZToJCU1hcmNoIDIwMDgKK0NvbnRhY3Q6CSJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KK0Rlc2NyaXB0aW9uOgorCQlUdW5pbmcgcGFyYW1ldGVyIHdoaWNoIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZgorCQlpbm9kZSB0YWJsZSBibG9ja3MgdGhhdCBleHQ0J3MgaW5vZGUgdGFibGUgcmVhZGFoZWFkCisJCWFsZ29yaXRobSB3aWxsIHByZS1yZWFkIGludG8gdGhlIGJ1ZmZlciBjYWNoZQorCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9kZWxheWVkX2FsbG9jYXRpb25fYmxvY2tzCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNob3dzIHRoZSBudW1iZXIgb2YgYmxvY2tzCisJCXRoYXQgYXJlIGRpcnR5IGluIHRoZSBwYWdlIGNhY2hlLCBidXQgd2hpY2ggZG8gbm90CisJCWhhdmUgdGhlaXIgbG9jYXRpb24gaW4gdGhlIGZpbGVzeXN0ZW0gYWxsb2NhdGVkIHlldC4KKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vbGlmZXRpbWVfd3JpdGVfa2J5dGVzCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNob3dzIHRoZSBudW1iZXIgb2Yga2lsb2J5dGVzCisJCW9mIGRhdGEgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGlzIGZpbGVzeXN0ZW0gc2luY2UgaXQgd2FzCisJCWNyZWF0ZWQuCisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L3Nlc3Npb25fd3JpdGVfa2J5dGVzCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVRoaXMgZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNob3dzIHRoZSBudW1iZXIgb2YKKwkJa2lsb2J5dGVzIG9mIGRhdGEgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiB0byB0aGlzCisJCWZpbGVzeXN0ZW0gc2luY2UgaXQgd2FzIG1vdW50ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dAppbmRleCAyYTNmY2M1NS4uZDlhYTQzZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CkBAIC02MDksMyArNjA5LDEwOSBAQAogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGVpdGhlciBhIHBvaW50ZXIgdG8gdGhlIHByb2Nlc3NvciB2aXJ0dWFsCiBhZGRyZXNzIG9mIHRoZSBtZW1vcnksIG9yIGFuIGVycm9yICh2aWEgUFRSX0VSUigpKSBpZiBhbnkgcGFydCBvZiB0aGUKIHJlZ2lvbiBpcyBvY2N1cGllZC4KKworUGFydCBJSUkgLSBEZWJ1ZyBkcml2ZXJzIHVzZSBvZiB0aGUgRE1BLUFQSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgRE1BLUFQSSBhcyBkZXNjcmliZWQgYWJvdmUgYXMgc29tZSBjb25zdHJhaW50cy4gRE1BIGFkZHJlc3NlcyBtdXN0IGJlCityZWxlYXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2l6ZSBmb3IgZXhhbXBsZS4gV2l0aAordGhlIGFkdmVudCBvZiBoYXJkd2FyZSBJT01NVXMgaXQgYmVjb21lcyBtb3JlIGFuZCBtb3JlIGltcG9ydGFudCB0aGF0IGRyaXZlcnMKK2RvIG5vdCB2aW9sYXRlIHRob3NlIGNvbnN0cmFpbnRzLiBJbiB0aGUgd29yc3QgY2FzZSBzdWNoIGEgdmlvbGF0aW9uIGNhbgorcmVzdWx0IGluIGRhdGEgY29ycnVwdGlvbiB1cCB0byBkZXN0cm95ZWQgZmlsZXN5c3RlbXMuCisKK1RvIGRlYnVnIGRyaXZlcnMgYW5kIGZpbmQgYnVncyBpbiB0aGUgdXNhZ2Ugb2YgdGhlIERNQS1BUEkgY2hlY2tpbmcgY29kZSBjYW4KK2JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aGljaCB3aWxsIHRlbGwgdGhlIGRldmVsb3BlciBhYm91dCB0aG9zZQordmlvbGF0aW9ucy4gSWYgeW91ciBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgaXQgeW91IGNhbiBzZWxlY3QgdGhlICJFbmFibGUKK2RlYnVnZ2luZyBvZiBETUEtQVBJIHVzYWdlIiBvcHRpb24gaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbi4gRW5hYmxpbmcgdGhpcworb3B0aW9uIGhhcyBhIHBlcmZvcm1hbmNlIGltcGFjdC4gRG8gbm90IGVuYWJsZSBpdCBpbiBwcm9kdWN0aW9uIGtlcm5lbHMuCisKK0lmIHlvdSBib290IHRoZSByZXN1bHRpbmcga2VybmVsIHdpbGwgY29udGFpbiBjb2RlIHdoaWNoIGRvZXMgc29tZSBib29ra2VlcGluZworYWJvdXQgd2hhdCBETUEgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgZm9yIHdoaWNoIGRldmljZS4gSWYgdGhpcyBjb2RlIGRldGVjdHMgYW4KK2Vycm9yIGl0IHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIHNvbWUgZGV0YWlscyBpbnRvIHlvdXIga2VybmVsIGxvZy4gQW4KK2V4YW1wbGUgd2FybmluZyBtZXNzYWdlIG1heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tCitXQVJOSU5HOiBhdCAvZGF0YTIvcmVwb3MvbGludXgtMi42LWlvbW11L2xpYi9kbWEtZGVidWcuYzo0NDgKKwljaGVja191bm1hcCsweDIwMy8weDQ5MCgpCitIYXJkd2FyZSBuYW1lOgorZm9yY2VkZXRoIDAwMDA6MDA6MDguMDogRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyBETUEgbWVtb3J5IHdpdGggd3JvbmcKKwlmdW5jdGlvbiBbZGV2aWNlIGFkZHJlc3M9MHgwMDAwMDAwMDY0MDQ0NGJlXSBbc2l6ZT02NiBieXRlc10gW21hcHBlZCBhcworc2luZ2xlXSBbdW5tYXBwZWQgYXMgcGFnZV0KK01vZHVsZXMgbGlua2VkIGluOiBuZnNkIGV4cG9ydGZzIGJyaWRnZSBzdHAgbGxjIHI4MTY5CitQaWQ6IDAsIGNvbW06IHN3YXBwZXIgVGFpbnRlZDogRyAgICAgICAgVyAgMi42LjI4LWRtYXRlc3QtMDkyODktZzhiYjk5YzAgIzEKK0NhbGwgVHJhY2U6CisgPElSUT4gIFs8ZmZmZmZmZmY4MDI0MGIyMj5dIHdhcm5fc2xvd3BhdGgrMHhmMi8weDEzMAorIFs8ZmZmZmZmZmY4MDY0N2I3MD5dIF9zcGluX3VubG9jaysweDEwLzB4MzAKKyBbPGZmZmZmZmZmODA1MzdlNzU+XSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKzB4NzUvMHhjMAorIFs8ZmZmZmZmZmY4MDY0N2MyMj5dIF9zcGluX3VubG9ja19pcnFyZXN0b3JlKzB4MTIvMHg0MAorIFs8ZmZmZmZmZmY4MDU1MzQ3Zj5dIG9oY2lfdXJiX2VucXVldWUrMHgxOWYvMHg3YzAKKyBbPGZmZmZmZmZmODAyNTJmOTY+XSBxdWV1ZV93b3JrKzB4NTYvMHg2MAorIFs8ZmZmZmZmZmY4MDIzN2UxMD5dIGVucXVldWVfdGFza19mYWlyKzB4MjAvMHg1MAorIFs8ZmZmZmZmZmY4MDUzOTI3OT5dIHVzYl9oY2Rfc3VibWl0X3VyYisweDM3OS8weGJjMAorIFs8ZmZmZmZmZmY4MDNiNzhjMz5dIGNwdW1hc2tfbmV4dF9hbmQrMHgyMy8weDQwCisgWzxmZmZmZmZmZjgwMjM1MTc3Pl0gZmluZF9idXNpZXN0X2dyb3VwKzB4MjA3LzB4OGEwCisgWzxmZmZmZmZmZjgwNjQ3ODRmPl0gX3NwaW5fbG9ja19pcnFzYXZlKzB4MWYvMHg1MAorIFs8ZmZmZmZmZmY4MDNjN2VhMz5dIGNoZWNrX3VubWFwKzB4MjAzLzB4NDkwCisgWzxmZmZmZmZmZjgwM2M4MjU5Pl0gZGVidWdfZG1hX3VubWFwX3BhZ2UrMHg0OS8weDUwCisgWzxmZmZmZmZmZjgwNDg1ZjI2Pl0gbnZfdHhfZG9uZV9vcHRpbWl6ZWQrMHhjNi8weDJjMAorIFs8ZmZmZmZmZmY4MDQ4NmMxMz5dIG52X25pY19pcnFfb3B0aW1pemVkKzB4NzMvMHgyYjAKKyBbPGZmZmZmZmZmODAyNmRmODQ+XSBoYW5kbGVfSVJRX2V2ZW50KzB4MzQvMHg3MAorIFs8ZmZmZmZmZmY4MDI2ZmZlOT5dIGhhbmRsZV9lZGdlX2lycSsweGM5LzB4MTUwCisgWzxmZmZmZmZmZjgwMjBlM2FiPl0gZG9fSVJRKzB4Y2IvMHgxYzAKKyBbPGZmZmZmZmZmODAyMGMwOTM+XSByZXRfZnJvbV9pbnRyKzB4MC8weGEKKyA8RU9JPiA8ND4tLS1bIGVuZCB0cmFjZSBmNjQzNWE5OGUyYTM4YzBlIF0tLS0KKworVGhlIGRyaXZlciBkZXZlbG9wZXIgY2FuIGZpbmQgdGhlIGRyaXZlciBhbmQgdGhlIGRldmljZSBpbmNsdWRpbmcgYSBzdGFja3RyYWNlCitvZiB0aGUgRE1BLUFQSSBjYWxsIHdoaWNoIGNhdXNlZCB0aGlzIHdhcm5pbmcuCisKK1BlciBkZWZhdWx0IG9ubHkgdGhlIGZpcnN0IGVycm9yIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZyBtZXNzYWdlLiBBbGwgb3RoZXIKK2Vycm9ycyB3aWxsIG9ubHkgc2lsZW50bHkgY291bnRlZC4gVGhpcyBsaW1pdGF0aW9uIGV4aXN0IHRvIHByZXZlbnQgdGhlIGNvZGUKK2Zyb20gZmxvb2RpbmcgeW91ciBrZXJuZWwgbG9nLiBUbyBzdXBwb3J0IGRlYnVnZ2luZyBhIGRldmljZSBkcml2ZXIgdGhpcyBjYW4KK2JlIGRpc2FibGVkIHZpYSBkZWJ1Z2ZzLiBTZWUgdGhlIGRlYnVnZnMgaW50ZXJmYWNlIGRvY3VtZW50YXRpb24gYmVsb3cgZm9yCitkZXRhaWxzLgorCitUaGUgZGVidWdmcyBkaXJlY3RvcnkgZm9yIHRoZSBETUEtQVBJIGRlYnVnZ2luZyBjb2RlIGlzIGNhbGxlZCBkbWEtYXBpLy4gSW4KK3RoaXMgZGlyZWN0b3J5IHRoZSBmb2xsb3dpbmcgZmlsZXMgY2FuIGN1cnJlbnRseSBiZSBmb3VuZDoKKworCWRtYS1hcGkvYWxsX2Vycm9ycwlUaGlzIGZpbGUgY29udGFpbnMgYSBudW1lcmljIHZhbHVlLiBJZiB0aGlzCisJCQkJdmFsdWUgaXMgbm90IGVxdWFsIHRvIHplcm8gdGhlIGRlYnVnZ2luZyBjb2RlCisJCQkJd2lsbCBwcmludCBhIHdhcm5pbmcgZm9yIGV2ZXJ5IGVycm9yIGl0IGZpbmRzCisJCQkJaW50byB0aGUga2VybmVsIGxvZy4gQmUgY2FyZWZ1bGwgd2l0aCB0aGlzCisJCQkJb3B0aW9uLiBJdCBjYW4gZWFzaWx5IGZsb29kIHlvdXIgbG9ncy4KKworCWRtYS1hcGkvZGlzYWJsZWQJVGhpcyByZWFkLW9ubHkgZmlsZSBjb250YWlucyB0aGUgY2hhcmFjdGVyICdZJworCQkJCWlmIHRoZSBkZWJ1Z2dpbmcgY29kZSBpcyBkaXNhYmxlZC4gVGhpcyBjYW4KKwkJCQloYXBwZW4gd2hlbiBpdCBydW5zIG91dCBvZiBtZW1vcnkgb3IgaWYgaXQgd2FzCisJCQkJZGlzYWJsZWQgYXQgYm9vdCB0aW1lCisKKwlkbWEtYXBpL2Vycm9yX2NvdW50CVRoaXMgZmlsZSBpcyByZWFkLW9ubHkgYW5kIHNob3dzIHRoZSB0b3RhbAorCQkJCW51bWJlcnMgb2YgZXJyb3JzIGZvdW5kLgorCisJZG1hLWFwaS9udW1fZXJyb3JzCVRoZSBudW1iZXIgaW4gdGhpcyBmaWxlIHNob3dzIGhvdyBtYW55CisJCQkJd2FybmluZ3Mgd2lsbCBiZSBwcmludGVkIHRvIHRoZSBrZXJuZWwgbG9nCisJCQkJYmVmb3JlIGl0IHN0b3BzLiBUaGlzIG51bWJlciBpcyBpbml0aWFsaXplZCB0bworCQkJCW9uZSBhdCBzeXN0ZW0gYm9vdCBhbmQgYmUgc2V0IGJ5IHdyaXRpbmcgaW50bworCQkJCXRoaXMgZmlsZQorCisJZG1hLWFwaS9taW5fZnJlZV9lbnRyaWVzCisJCQkJVGhpcyByZWFkLW9ubHkgZmlsZSBjYW4gYmUgcmVhZCB0byBnZXQgdGhlCisJCQkJbWluaW11bSBudW1iZXIgb2YgZnJlZSBkbWFfZGVidWdfZW50cmllcyB0aGUKKwkJCQlhbGxvY2F0b3IgaGFzIGV2ZXIgc2Vlbi4gSWYgdGhpcyB2YWx1ZSBnb2VzCisJCQkJZG93biB0byB6ZXJvIHRoZSBjb2RlIHdpbGwgZGlzYWJsZSBpdHNlbGYKKwkJCQliZWNhdXNlIGl0IGlzIG5vdCBsb25nZXIgcmVsaWFibGUuCisKKwlkbWEtYXBpL251bV9mcmVlX2VudHJpZXMKKwkJCQlUaGUgY3VycmVudCBudW1iZXIgb2YgZnJlZSBkbWFfZGVidWdfZW50cmllcworCQkJCWluIHRoZSBhbGxvY2F0b3IuCisKK0lmIHlvdSBoYXZlIHRoaXMgY29kZSBjb21waWxlZCBpbnRvIHlvdXIga2VybmVsIGl0IHdpbGwgYmUgZW5hYmxlZCBieSBkZWZhdWx0LgorSWYgeW91IHdhbnQgdG8gYm9vdCB3aXRob3V0IHRoZSBib29ra2VlcGluZyBhbnl3YXkgeW91IGNhbiBwcm92aWRlCisnZG1hX2RlYnVnPW9mZicgYXMgYSBib290IHBhcmFtZXRlci4gVGhpcyB3aWxsIGRpc2FibGUgRE1BLUFQSSBkZWJ1Z2dpbmcuCitOb3RpY2UgdGhhdCB5b3UgY2FuIG5vdCBlbmFibGUgaXQgYWdhaW4gYXQgcnVudGltZS4gWW91IGhhdmUgdG8gcmVib290IHRvIGRvCitzby4KKworV2hlbiB0aGUgY29kZSBkaXNhYmxlcyBpdHNlbGYgYXQgcnVudGltZSB0aGlzIGlzIG1vc3QgbGlrZWx5IGJlY2F1c2UgaXQgcmFuCitvdXQgb2YgZG1hX2RlYnVnX2VudHJpZXMuIFRoZXNlIGVudHJpZXMgYXJlIHByZWFsbG9jYXRlZCBhdCBib290LiBUaGUgbnVtYmVyCitvZiBwcmVhbGxvY2F0ZWQgZW50cmllcyBpcyBkZWZpbmVkIHBlciBhcmNoaXRlY3R1cmUuIElmIGl0IGlzIHRvbyBsb3cgZm9yIHlvdQorYm9vdCB3aXRoICdkbWFfZGVidWdfZW50cmllcz08eW91cl9kZXNpcmVkX251bWJlcj4nIHRvIG92ZXJ3cml0ZSB0aGUKK2FyY2hpdGVjdHVyYWwgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKaW5kZXggYzEwMmMwMi4uYzZkZWYzNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKQEAgLTQsMyArNCw3IEBACiAqLmh0bWwKICouOS5negogKi45CisqLmF1eAorKi5kdmkKKyoubG9nCisqLm91dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggYmM5NjJjZC4uNThjMTk0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC0xOTksNiArMTk5LDcgQEAKIC0tPgogIUVkcml2ZXJzL3BjaS9wcm9iZS5jCiAhRWRyaXZlcnMvcGNpL3JvbS5jCishRWRyaXZlcnMvcGNpL2lvdi5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+UENJIEhvdHBsdWcgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KICFFZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9wcm9jZnNfZXhhbXBsZS5jIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKaW5kZXggOGM2Mzk2ZS4uYTViMTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMKQEAgLTExNyw5ICsxMTcsNiBAQAogCQlydiA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQkKLQlleGFtcGxlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkKIAkvKiBjcmVhdGUgamlmZmllcyB1c2luZyBjb252ZW5pZW5jZSBmdW5jdGlvbiAqLwogCWppZmZpZXNfZmlsZSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImppZmZpZXMiLCAKIAkJCQkJICAgICAgMDQ0NCwgZXhhbXBsZV9kaXIsIApAQCAtMTMwLDggKzEyNyw2IEBACiAJCWdvdG8gbm9famlmZmllczsKIAl9CiAKLQlqaWZmaWVzX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiBjcmVhdGUgZm9vIGFuZCBiYXIgZmlsZXMgdXNpbmcgc2FtZSBjYWxsYmFjawogCSAqIGZ1bmN0aW9ucyAKIAkgKi8KQEAgLTE0Niw3ICsxNDEsNiBAQAogCWZvb19maWxlLT5kYXRhID0gJmZvb19kYXRhOwogCWZvb19maWxlLT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfZm9vYmFyOwogCWZvb19maWxlLT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9mb29iYXI7Ci0JZm9vX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQogCWJhcl9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoImJhciIsIDA2NDQsIGV4YW1wbGVfZGlyKTsKIAlpZihiYXJfZmlsZSA9PSBOVUxMKSB7CkBAIC0xNTksNyArMTUzLDYgQEAKIAliYXJfZmlsZS0+ZGF0YSA9ICZiYXJfZGF0YTsKIAliYXJfZmlsZS0+cmVhZF9wcm9jID0gcHJvY19yZWFkX2Zvb2JhcjsKIAliYXJfZmlsZS0+d3JpdGVfcHJvYyA9IHByb2Nfd3JpdGVfZm9vYmFyOwotCWJhcl9maWxlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkKIAkvKiBjcmVhdGUgc3ltbGluayAqLwogCXN5bWxpbmsgPSBwcm9jX3N5bWxpbmsoImppZmZpZXNfdG9vIiwgZXhhbXBsZV9kaXIsIApAQCAtMTY5LDggKzE2Miw2IEBACiAJCWdvdG8gbm9fc3ltbGluazsKIAl9CiAKLQlzeW1saW5rLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJLyogZXZlcnl0aGluZyBPSyAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzICVzIGluaXRpYWxpc2VkXG4iLAogCSAgICAgICBNT0RVTEVfTkFNRSwgTU9EVUxFX1ZFUlMpOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKaW5kZXggMjU2ZGVmZDcuLmRjZjdhY2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvTVNJLUhPV1RPLnR4dApAQCAtNCw1MDYgKzQsMzU2IEBACiAJUmV2aXNlZCBGZWIgMTIsIDIwMDQgYnkgTWFydGluZSBTaWxiZXJtYW5uCiAJCWVtYWlsOiBNYXJ0aW5lLlNpbGJlcm1hbm5AaHAuY29tCiAJUmV2aXNlZCBKdW4gMjUsIDIwMDQgYnkgVG9tIEwgTmd1eWVuCisJUmV2aXNlZCBKdWwgIDksIDIwMDggYnkgTWF0dGhldyBXaWxjb3ggPHdpbGx5QGxpbnV4LmludGVsLmNvbT4KKwkJQ29weXJpZ2h0IDIwMDMsIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KIAogMS4gQWJvdXQgdGhpcyBndWlkZQogCi1UaGlzIGd1aWRlIGRlc2NyaWJlcyB0aGUgYmFzaWNzIG9mIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cyAoTVNJKSwKLXRoZSBhZHZhbnRhZ2VzIG9mIHVzaW5nIE1TSSBvdmVyIHRyYWRpdGlvbmFsIGludGVycnVwdCBtZWNoYW5pc21zLAotYW5kIGhvdyB0byBlbmFibGUgeW91ciBkcml2ZXIgdG8gdXNlIE1TSSBvciBNU0ktWC4gQWxzbyBpbmNsdWRlZCBpcwotYSBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyAoRkFRKSBzZWN0aW9uLgorVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSXMpLAordGhlIGFkdmFudGFnZXMgb2YgdXNpbmcgTVNJIG92ZXIgdHJhZGl0aW9uYWwgaW50ZXJydXB0IG1lY2hhbmlzbXMsIGhvdwordG8gY2hhbmdlIHlvdXIgZHJpdmVyIHRvIHVzZSBNU0kgb3IgTVNJLVggYW5kIHNvbWUgYmFzaWMgZGlhZ25vc3RpY3MgdG8KK3RyeSBpZiBhIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgTVNJcy4KIAotMS4xIFRlcm1pbm9sb2d5CiAKLVBDSSBkZXZpY2VzIGNhbiBiZSBzaW5nbGUtZnVuY3Rpb24gb3IgbXVsdGktZnVuY3Rpb24uICBJbiBlaXRoZXIgY2FzZSwKLXdoZW4gdGhpcyB0ZXh0IHRhbGtzIGFib3V0IGVuYWJsaW5nIG9yIGRpc2FibGluZyBNU0kgb24gYSAiZGV2aWNlCi1mdW5jdGlvbiwiIGl0IGlzIHJlZmVycmluZyB0byBvbmUgc3BlY2lmaWMgUENJIGRldmljZSBhbmQgZnVuY3Rpb24gYW5kCi1ub3QgdG8gYWxsIGZ1bmN0aW9ucyBvbiBhIFBDSSBkZXZpY2UgKHVubGVzcyB0aGUgUENJIGRldmljZSBoYXMgb25seQotb25lIGZ1bmN0aW9uKS4KKzIuIFdoYXQgYXJlIE1TSXM/CiAKLTIuIENvcHlyaWdodCAyMDAzIEludGVsIENvcnBvcmF0aW9uCitBIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IGlzIGEgd3JpdGUgZnJvbSB0aGUgZGV2aWNlIHRvIGEgc3BlY2lhbAorYWRkcmVzcyB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0IHRvIGJlIHJlY2VpdmVkIGJ5IHRoZSBDUFUuCiAKLTMuIFdoYXQgaXMgTVNJL01TSS1YPworVGhlIE1TSSBjYXBhYmlsaXR5IHdhcyBmaXJzdCBzcGVjaWZpZWQgaW4gUENJIDIuMiBhbmQgd2FzIGxhdGVyIGVuaGFuY2VkCitpbiBQQ0kgMy4wIHRvIGFsbG93IGVhY2ggaW50ZXJydXB0IHRvIGJlIG1hc2tlZCBpbmRpdmlkdWFsbHkuICBUaGUgTVNJLVgKK2NhcGFiaWxpdHkgd2FzIGFsc28gaW50cm9kdWNlZCB3aXRoIFBDSSAzLjAuICBJdCBzdXBwb3J0cyBtb3JlIGludGVycnVwdHMKK3BlciBkZXZpY2UgdGhhbiBNU0kgYW5kIGFsbG93cyBpbnRlcnJ1cHRzIHRvIGJlIGluZGVwZW5kZW50bHkgY29uZmlndXJlZC4KIAotTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHQgKE1TSSksIGFzIGRlc2NyaWJlZCBpbiB0aGUgUENJIExvY2FsIEJ1cwotU3BlY2lmaWNhdGlvbiBSZXZpc2lvbiAyLjMgb3IgbGF0ZXIsIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUsIGFuZCBhCi1yZXF1aXJlZCBmZWF0dXJlIGZvciBQQ0kgRXhwcmVzcyBkZXZpY2VzLiBNU0kgZW5hYmxlcyBhIGRldmljZSBmdW5jdGlvbgotdG8gcmVxdWVzdCBzZXJ2aWNlIGJ5IHNlbmRpbmcgYW4gSW5ib3VuZCBNZW1vcnkgV3JpdGUgb24gaXRzIFBDSSBidXMgdG8KLXRoZSBGU0IgYXMgYSBNZXNzYWdlIFNpZ25hbCBJbnRlcnJ1cHQgdHJhbnNhY3Rpb24uIEJlY2F1c2UgTVNJIGlzCi1nZW5lcmF0ZWQgaW4gdGhlIGZvcm0gb2YgYSBNZW1vcnkgV3JpdGUsIGFsbCB0cmFuc2FjdGlvbiBjb25kaXRpb25zLAotc3VjaCBhcyBhIFJldHJ5LCBNYXN0ZXItQWJvcnQsIFRhcmdldC1BYm9ydCBvciBub3JtYWwgY29tcGxldGlvbiwgYXJlCi1zdXBwb3J0ZWQuCitEZXZpY2VzIG1heSBzdXBwb3J0IGJvdGggTVNJIGFuZCBNU0ktWCwgYnV0IG9ubHkgb25lIGNhbiBiZSBlbmFibGVkIGF0CithIHRpbWUuCiAKLUEgUENJIGRldmljZSB0aGF0IHN1cHBvcnRzIE1TSSBtdXN0IGFsc28gc3VwcG9ydCBwaW4gSVJRIGFzc2VydGlvbgotaW50ZXJydXB0IG1lY2hhbmlzbSB0byBwcm92aWRlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHN5c3RlbXMgdGhhdAotZG8gbm90IHN1cHBvcnQgTVNJLiBJbiBzeXN0ZW1zIHdoaWNoIHN1cHBvcnQgTVNJLCB0aGUgYnVzIGRyaXZlciBpcwotcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgbWVzc2FnZSBhZGRyZXNzIGFuZCBtZXNzYWdlIGRhdGEgb2YKLXRoZSBkZXZpY2UgZnVuY3Rpb24ncyBNU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgZHVyaW5nIGRldmljZQotaW5pdGlhbCBjb25maWd1cmF0aW9uLgogCi1BbiBNU0kgY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb24gaW5kaWNhdGVzIE1TSSBzdXBwb3J0IGJ5IGltcGxlbWVudGluZwotdGhlIE1TSS9NU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBpbiBpdHMgUENJIGNhcGFiaWxpdHkgbGlzdC4gVGhlCi1kZXZpY2UgZnVuY3Rpb24gbWF5IGltcGxlbWVudCBib3RoIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgYW5kCi10aGUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmU7IGhvd2V2ZXIsIHRoZSBidXMgZHJpdmVyIHNob3VsZCBub3QKLWVuYWJsZSBib3RoLgorMy4gV2h5IHVzZSBNU0lzPwogCi1UaGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIGNvbnRhaW5zIE1lc3NhZ2UgQ29udHJvbCByZWdpc3RlciwKLU1lc3NhZ2UgQWRkcmVzcyByZWdpc3RlciBhbmQgTWVzc2FnZSBEYXRhIHJlZ2lzdGVyLiBUaGVzZSByZWdpc3RlcnMKLXByb3ZpZGUgdGhlIGJ1cyBkcml2ZXIgY29udHJvbCBvdmVyIE1TSS4gVGhlIE1lc3NhZ2UgQ29udHJvbCByZWdpc3RlcgotaW5kaWNhdGVzIHRoZSBNU0kgY2FwYWJpbGl0eSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZS4gVGhlIE1lc3NhZ2UKLUFkZHJlc3MgcmVnaXN0ZXIgc3BlY2lmaWVzIHRoZSB0YXJnZXQgYWRkcmVzcyBhbmQgdGhlIE1lc3NhZ2UgRGF0YQotcmVnaXN0ZXIgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIG1lc3NhZ2UuIFRvIHJlcXVlc3QKLXNlcnZpY2UsIHRoZSBkZXZpY2UgZnVuY3Rpb24gd3JpdGVzIHRoZSBjb250ZW50IG9mIHRoZSBNZXNzYWdlIERhdGEKLXJlZ2lzdGVyIHRvIHRoZSB0YXJnZXQgYWRkcmVzcy4gVGhlIGRldmljZSBhbmQgaXRzIHNvZnR3YXJlIGRyaXZlcgotYXJlIHByb2hpYml0ZWQgZnJvbSB3cml0aW5nIHRvIHRoZXNlIHJlZ2lzdGVycy4KK1RoZXJlIGFyZSB0aHJlZSByZWFzb25zIHdoeSB1c2luZyBNU0lzIGNhbiBnaXZlIGFuIGFkdmFudGFnZSBvdmVyCit0cmFkaXRpb25hbCBwaW4tYmFzZWQgaW50ZXJydXB0cy4KIAotVGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byBNU0kuIEl0Ci11c2VzIGFuIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSBjYXBhYmlsaXR5IHN0cnVjdHVyZS4gVGhlcmUgYXJlCi1zb21lIGtleSBhZHZhbnRhZ2VzIHRvIGltcGxlbWVudGluZyB0aGUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKLW92ZXIgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBhcyBkZXNjcmliZWQgYmVsb3cuCitQaW4tYmFzZWQgUENJIGludGVycnVwdHMgYXJlIG9mdGVuIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgZGV2aWNlcy4KK1RvIHN1cHBvcnQgdGhpcywgdGhlIGtlcm5lbCBtdXN0IGNhbGwgZWFjaCBpbnRlcnJ1cHQgaGFuZGxlciBhc3NvY2lhdGVkCit3aXRoIGFuIGludGVycnVwdCwgd2hpY2ggbGVhZHMgdG8gcmVkdWNlZCBwZXJmb3JtYW5jZSBmb3IgdGhlIHN5c3RlbSBhcworYSB3aG9sZS4gIE1TSXMgYXJlIG5ldmVyIHNoYXJlZCwgc28gdGhpcyBwcm9ibGVtIGNhbm5vdCBhcmlzZS4KIAotCS0gU3VwcG9ydCBhIGxhcmdlciBtYXhpbXVtIG51bWJlciBvZiB2ZWN0b3JzIHBlciBmdW5jdGlvbi4KK1doZW4gYSBkZXZpY2Ugd3JpdGVzIGRhdGEgdG8gbWVtb3J5LCB0aGVuIHJhaXNlcyBhIHBpbi1iYXNlZCBpbnRlcnJ1cHQsCitpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpbnRlcnJ1cHQgbWF5IGFycml2ZSBiZWZvcmUgYWxsIHRoZSBkYXRhIGhhcworYXJyaXZlZCBpbiBtZW1vcnkgKHRoaXMgYmVjb21lcyBtb3JlIGxpa2VseSB3aXRoIGRldmljZXMgYmVoaW5kIFBDSS1QQ0kKK2JyaWRnZXMpLiAgSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBkYXRhIGhhcyBhcnJpdmVkIGluIG1lbW9yeSwKK3RoZSBpbnRlcnJ1cHQgaGFuZGxlciBtdXN0IHJlYWQgYSByZWdpc3RlciBvbiB0aGUgZGV2aWNlIHdoaWNoIHJhaXNlZAordGhlIGludGVycnVwdC4gIFBDSSB0cmFuc2FjdGlvbiBvcmRlcmluZyBydWxlcyByZXF1aXJlIHRoYXQgYWxsIHRoZSBkYXRhCithcnJpdmVzIGluIG1lbW9yeSBiZWZvcmUgdGhlIHZhbHVlIGNhbiBiZSByZXR1cm5lZCBmcm9tIHRoZSByZWdpc3Rlci4KK1VzaW5nIE1TSXMgYXZvaWRzIHRoaXMgcHJvYmxlbSBhcyB0aGUgaW50ZXJydXB0LWdlbmVyYXRpbmcgd3JpdGUgY2Fubm90CitwYXNzIHRoZSBkYXRhIHdyaXRlcywgc28gYnkgdGhlIHRpbWUgdGhlIGludGVycnVwdCBpcyByYWlzZWQsIHRoZSBkcml2ZXIKK2tub3dzIHRoYXQgYWxsIHRoZSBkYXRhIGhhcyBhcnJpdmVkIGluIG1lbW9yeS4KIAotCS0gUHJvdmlkZSB0aGUgYWJpbGl0eSBmb3Igc3lzdGVtIHNvZnR3YXJlIHRvIGNvbmZpZ3VyZQotCWVhY2ggdmVjdG9yIHdpdGggYW4gaW5kZXBlbmRlbnQgbWVzc2FnZSBhZGRyZXNzIGFuZCBtZXNzYWdlCi0JZGF0YSwgc3BlY2lmaWVkIGJ5IGEgdGFibGUgdGhhdCByZXNpZGVzIGluIE1lbW9yeSBTcGFjZS4KK1BDSSBkZXZpY2VzIGNhbiBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGluLWJhc2VkIGludGVycnVwdCBwZXIgZnVuY3Rpb24uCitPZnRlbiBkcml2ZXJzIGhhdmUgdG8gcXVlcnkgdGhlIGRldmljZSB0byBmaW5kIG91dCB3aGF0IGV2ZW50IGhhcworb2NjdXJyZWQsIHNsb3dpbmcgZG93biBpbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIHRoZSBjb21tb24gY2FzZS4gIFdpdGgKK01TSXMsIGEgZGV2aWNlIGNhbiBzdXBwb3J0IG1vcmUgaW50ZXJydXB0cywgYWxsb3dpbmcgZWFjaCBpbnRlcnJ1cHQKK3RvIGJlIHNwZWNpYWxpc2VkIHRvIGEgZGlmZmVyZW50IHB1cnBvc2UuICBPbmUgcG9zc2libGUgZGVzaWduIGdpdmVzCitpbmZyZXF1ZW50IGNvbmRpdGlvbnMgKHN1Y2ggYXMgZXJyb3JzKSB0aGVpciBvd24gaW50ZXJydXB0IHdoaWNoIGFsbG93cwordGhlIGRyaXZlciB0byBoYW5kbGUgdGhlIG5vcm1hbCBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCBtb3JlIGVmZmljaWVudGx5LgorT3RoZXIgcG9zc2libGUgZGVzaWducyBpbmNsdWRlIGdpdmluZyBvbmUgaW50ZXJydXB0IHRvIGVhY2ggcGFja2V0IHF1ZXVlCitpbiBhIG5ldHdvcmsgY2FyZCBvciBlYWNoIHBvcnQgaW4gYSBzdG9yYWdlIGNvbnRyb2xsZXIuCiAKLSAgICAgICAgLSBNU0kgYW5kIE1TSS1YIGJvdGggc3VwcG9ydCBwZXItdmVjdG9yIG1hc2tpbmcuIFBlci12ZWN0b3IKLQltYXNraW5nIGlzIGFuIG9wdGlvbmFsIGV4dGVuc2lvbiBvZiBNU0kgYnV0IGEgcmVxdWlyZWQKLQlmZWF0dXJlIGZvciBNU0ktWC4gUGVyLXZlY3RvciBtYXNraW5nIHByb3ZpZGVzIHRoZSBrZXJuZWwgdGhlCi0JYWJpbGl0eSB0byBtYXNrL3VubWFzayBhIHNpbmdsZSBNU0kgd2hpbGUgcnVubmluZyBpdHMKLQlpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLiBJZiBwZXItdmVjdG9yIG1hc2tpbmcgaXMKLQlub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBwcm92aWRlIHRoZQotCWhhcmR3YXJlL3NvZnR3YXJlIHN5bmNocm9uaXphdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgZGV2aWNlCi0JZ2VuZXJhdGVzIE1TSSB3aGVuIHRoZSBkcml2ZXIgd2FudHMgaXQgdG8gZG8gc28uCiAKLTQuIFdoeSB1c2UgTVNJPworNC4gSG93IHRvIHVzZSBNU0lzCiAKLUFzIGEgYmVuZWZpdCB0byB0aGUgc2ltcGxpZmljYXRpb24gb2YgYm9hcmQgZGVzaWduLCBNU0kgYWxsb3dzIGJvYXJkCi1kZXNpZ25lcnMgdG8gcmVtb3ZlIG91dC1vZi1iYW5kIGludGVycnVwdCByb3V0aW5nLiBNU0kgaXMgYW5vdGhlcgotc3RlcCB0b3dhcmRzIGEgbGVnYWN5LWZyZWUgZW52aXJvbm1lbnQuCitQQ0kgZGV2aWNlcyBhcmUgaW5pdGlhbGlzZWQgdG8gdXNlIHBpbi1iYXNlZCBpbnRlcnJ1cHRzLiAgVGhlIGRldmljZQorZHJpdmVyIGhhcyB0byBzZXQgdXAgdGhlIGRldmljZSB0byB1c2UgTVNJIG9yIE1TSS1YLiAgTm90IGFsbCBtYWNoaW5lcworc3VwcG9ydCBNU0lzIGNvcnJlY3RseSwgYW5kIGZvciB0aG9zZSBtYWNoaW5lcywgdGhlIEFQSXMgZGVzY3JpYmVkIGJlbG93Cit3aWxsIHNpbXBseSBmYWlsIGFuZCB0aGUgZGV2aWNlIHdpbGwgY29udGludWUgdG8gdXNlIHBpbi1iYXNlZCBpbnRlcnJ1cHRzLgogCi1EdWUgdG8gaW5jcmVhc2luZyBwcmVzc3VyZSBvbiBjaGlwc2V0IGFuZCBwcm9jZXNzb3IgcGFja2FnZXMgdG8KLXJlZHVjZSBwaW4gY291bnQsIHRoZSBuZWVkIGZvciBpbnRlcnJ1cHQgcGlucyBpcyBleHBlY3RlZCB0bwotZGltaW5pc2ggb3ZlciB0aW1lLiBEZXZpY2VzLCBkdWUgdG8gcGluIGNvbnN0cmFpbnRzLCBtYXkgaW1wbGVtZW50Ci1tZXNzYWdlcyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4KKzQuMSBJbmNsdWRlIGtlcm5lbCBzdXBwb3J0IGZvciBNU0lzCiAKLVBDSSBFeHByZXNzIGVuZHBvaW50cyB1c2VzIElOVHggZW11bGF0aW9uIChpbi1iYW5kIG1lc3NhZ2VzKSBpbnN0ZWFkCi1vZiBJUlEgcGluIGFzc2VydGlvbi4gVXNpbmcgSU5UeCBlbXVsYXRpb24gcmVxdWlyZXMgaW50ZXJydXB0Ci1zaGFyaW5nIGFtb25nIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIG5vZGUgKFBDSSBicmlkZ2UpIHdoaWxlCi1NU0kgaXMgdW5pcXVlIChub24tc2hhcmVkKSBhbmQgZG9lcyBub3QgcmVxdWlyZSBCSU9TIGNvbmZpZ3VyYXRpb24KLXN1cHBvcnQuIEFzIGEgcmVzdWx0LCB0aGUgUENJIEV4cHJlc3MgdGVjaG5vbG9neSByZXF1aXJlcyBNU0kKLXN1cHBvcnQgZm9yIGJldHRlciBpbnRlcnJ1cHQgcGVyZm9ybWFuY2UuCitUbyBzdXBwb3J0IE1TSSBvciBNU0ktWCwgdGhlIGtlcm5lbCBtdXN0IGJlIGJ1aWx0IHdpdGggdGhlIENPTkZJR19QQ0lfTVNJCitvcHRpb24gZW5hYmxlZC4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcywKK2FuZCBpdCBtYXkgZGVwZW5kIG9uIHNvbWUgb3RoZXIgb3B0aW9ucyBhbHNvIGJlaW5nIHNldC4gIEZvciBleGFtcGxlLAorb24geDg2LCB5b3UgbXVzdCBhbHNvIGVuYWJsZSBYODZfVVBfQVBJQyBvciBTTVAgaW4gb3JkZXIgdG8gc2VlIHRoZQorQ09ORklHX1BDSV9NU0kgb3B0aW9uLgogCi1Vc2luZyBNU0kgZW5hYmxlcyB0aGUgZGV2aWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHR3byBvciBtb3JlCi12ZWN0b3JzLCB3aGljaCBjYW4gYmUgY29uZmlndXJlZCB0byB0YXJnZXQgZGlmZmVyZW50IENQVXMgdG8KLWluY3JlYXNlIHNjYWxhYmlsaXR5LgorNC4yIFVzaW5nIE1TSQogCi01LiBDb25maWd1cmluZyBhIGRyaXZlciB0byB1c2UgTVNJL01TSS1YCitNb3N0IG9mIHRoZSBoYXJkIHdvcmsgaXMgZG9uZSBmb3IgdGhlIGRyaXZlciBpbiB0aGUgUENJIGxheWVyLiAgSXQgc2ltcGx5CitoYXMgdG8gcmVxdWVzdCB0aGF0IHRoZSBQQ0kgbGF5ZXIgc2V0IHVwIHRoZSBNU0kgY2FwYWJpbGl0eSBmb3IgdGhpcworZGV2aWNlLgogCi1CeSBkZWZhdWx0LCB0aGUga2VybmVsIHdpbGwgbm90IGVuYWJsZSBNU0kvTVNJLVggb24gYWxsIGRldmljZXMgdGhhdAotc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHkuIFRoZSBDT05GSUdfUENJX01TSSBrZXJuZWwgb3B0aW9uCi1tdXN0IGJlIHNlbGVjdGVkIHRvIGVuYWJsZSBNU0kvTVNJLVggc3VwcG9ydC4KLQotNS4xIEluY2x1ZGluZyBNU0kvTVNJLVggc3VwcG9ydCBpbnRvIHRoZSBrZXJuZWwKLQotVG8gYWxsb3cgTVNJL01TSS1YIGNhcGFibGUgZGV2aWNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgZW5hYmxlCi1NU0kvTVNJLVggKHVzaW5nIHBjaV9lbmFibGVfbXNpKCkvcGNpX2VuYWJsZV9tc2l4KCkgYXMgZGVzY3JpYmVkCi1iZWxvdyksIHRoZSBWRUNUT1IgYmFzZWQgc2NoZW1lIG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgc2V0dGluZwotQ09ORklHX1BDSV9NU0kgZHVyaW5nIGtlcm5lbCBjb25maWcuCi0KLVNpbmNlIHRoZSB0YXJnZXQgb2YgdGhlIGluYm91bmQgbWVzc2FnZSBpcyB0aGUgbG9jYWwgQVBJQywgcHJvdmlkaW5nCi1DT05GSUdfWDg2X0xPQ0FMX0FQSUMgbXVzdCBiZSBlbmFibGVkIGFzIHdlbGwgYXMgQ09ORklHX1BDSV9NU0kuCi0KLTUuMiBDb25maWd1cmluZyBmb3IgTVNJIHN1cHBvcnQKLQotRHVlIHRvIHRoZSBub24tY29udGlndW91cyBmYXNoaW9uIGluIHZlY3RvciBhc3NpZ25tZW50IG9mIHRoZQotZXhpc3RpbmcgTGludXgga2VybmVsLCB0aGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZQotbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiBhIGRldmljZSBmdW5jdGlvbiBpcyBjYXBhYmxlIG9mIHN1cHBvcnRpbmcKLW1vcmUgdGhhbiBvbmUgdmVjdG9yLiBUbyBlbmFibGUgTVNJIG9uIGEgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJCi1jYXBhYmlsaXR5IHN0cnVjdHVyZSByZXF1aXJlcyBhIGRldmljZSBkcml2ZXIgdG8gY2FsbCB0aGUgZnVuY3Rpb24KLXBjaV9lbmFibGVfbXNpKCkgZXhwbGljaXRseS4KLQotNS4yLjEgQVBJIHBjaV9lbmFibGVfbXNpCis0LjIuMSBwY2lfZW5hYmxlX21zaQogCiBpbnQgcGNpX2VuYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldikKIAotV2l0aCB0aGlzIG5ldyBBUEksIGEgZGV2aWNlIGRyaXZlciB0aGF0IHdhbnRzIHRvIGhhdmUgTVNJCi1lbmFibGVkIG9uIGl0cyBkZXZpY2UgZnVuY3Rpb24gbXVzdCBjYWxsIHRoaXMgQVBJIHRvIGVuYWJsZSBNU0kuCi1BIHN1Y2Nlc3NmdWwgY2FsbCB3aWxsIGluaXRpYWxpemUgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZQotd2l0aCBPTkUgdmVjdG9yLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBkZXZpY2UgZnVuY3Rpb24gaXMKLWNhcGFibGUgb2Ygc3VwcG9ydGluZyBtdWx0aXBsZSBtZXNzYWdlcy4gVGhpcyB2ZWN0b3IgcmVwbGFjZXMgdGhlCi1wcmUtYXNzaWduZWQgZGV2LT5pcnEgd2l0aCBhIG5ldyBNU0kgdmVjdG9yLiBUbyBhdm9pZCBhIGNvbmZsaWN0Ci1vZiB0aGUgbmV3IGFzc2lnbmVkIHZlY3RvciB3aXRoIGV4aXN0aW5nIHByZS1hc3NpZ25lZCB2ZWN0b3IgcmVxdWlyZXMKLWEgZGV2aWNlIGRyaXZlciB0byBjYWxsIHRoaXMgQVBJIGJlZm9yZSBjYWxsaW5nIHJlcXVlc3RfaXJxKCkuCitBIHN1Y2Nlc3NmdWwgY2FsbCB3aWxsIGFsbG9jYXRlIE9ORSBpbnRlcnJ1cHQgdG8gdGhlIGRldmljZSwgcmVnYXJkbGVzcworb2YgaG93IG1hbnkgTVNJcyB0aGUgZGV2aWNlIHN1cHBvcnRzLiAgVGhlIGRldmljZSB3aWxsIGJlIHN3aXRjaGVkIGZyb20KK3Bpbi1iYXNlZCBpbnRlcnJ1cHQgbW9kZSB0byBNU0kgbW9kZS4gIFRoZSBkZXYtPmlycSBudW1iZXIgaXMgY2hhbmdlZAordG8gYSBuZXcgbnVtYmVyIHdoaWNoIHJlcHJlc2VudHMgdGhlIG1lc3NhZ2Ugc2lnbmFsZWQgaW50ZXJydXB0LgorVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZHJpdmVyIGNhbGxzIHJlcXVlc3RfaXJxKCkKK3NpbmNlIGVuYWJsaW5nIE1TSXMgZGlzYWJsZXMgdGhlIHBpbi1iYXNlZCBJUlEgYW5kIHRoZSBkcml2ZXIgd2lsbCBub3QKK3JlY2VpdmUgaW50ZXJydXB0cyBvbiB0aGUgb2xkIGludGVycnVwdC4KIAotNS4yLjIgQVBJIHBjaV9kaXNhYmxlX21zaQorNC4yLjIgcGNpX2VuYWJsZV9tc2lfYmxvY2sKKworaW50IHBjaV9lbmFibGVfbXNpX2Jsb2NrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjb3VudCkKKworVGhpcyB2YXJpYXRpb24gb24gdGhlIGFib3ZlIGNhbGwgYWxsb3dzIGEgZGV2aWNlIGRyaXZlciB0byByZXF1ZXN0IG11bHRpcGxlCitNU0lzLiAgVGhlIE1TSSBzcGVjaWZpY2F0aW9uIG9ubHkgYWxsb3dzIGludGVycnVwdHMgdG8gYmUgYWxsb2NhdGVkIGluCitwb3dlcnMgb2YgdHdvLCB1cCB0byBhIG1heGltdW0gb2YgMl41ICgzMikuCisKK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAwLCBpdCBoYXMgc3VjY2VlZGVkIGluIGFsbG9jYXRpbmcgYXQgbGVhc3QgYXMgbWFueQoraW50ZXJydXB0cyBhcyB0aGUgZHJpdmVyIHJlcXVlc3RlZCAoaXQgbWF5IGhhdmUgYWxsb2NhdGVkIG1vcmUgaW4gb3JkZXIKK3RvIHNhdGlzZnkgdGhlIHBvd2VyLW9mLXR3byByZXF1aXJlbWVudCkuICBJbiB0aGlzIGNhc2UsIHRoZSBmdW5jdGlvbgorZW5hYmxlcyBNU0kgb24gdGhpcyBkZXZpY2UgYW5kIHVwZGF0ZXMgZGV2LT5pcnEgdG8gYmUgdGhlIGxvd2VzdCBvZgordGhlIG5ldyBpbnRlcnJ1cHRzIGFzc2lnbmVkIHRvIGl0LiAgVGhlIG90aGVyIGludGVycnVwdHMgYXNzaWduZWQgdG8KK3RoZSBkZXZpY2UgYXJlIGluIHRoZSByYW5nZSBkZXYtPmlycSB0byBkZXYtPmlycSArIGNvdW50IC0gMS4KKworSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBpdCBpbmRpY2F0ZXMgYW4gZXJyb3IgYW5kCit0aGUgZHJpdmVyIHNob3VsZCBub3QgYXR0ZW1wdCB0byByZXF1ZXN0IGFueSBtb3JlIE1TSSBpbnRlcnJ1cHRzIGZvcgordGhpcyBkZXZpY2UuICBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb3NpdGl2ZSBudW1iZXIsIGl0IHdpbGwgYmUKK2xlc3MgdGhhbiAnY291bnQnIGFuZCBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgdGhhdCBjb3VsZCBoYXZlCitiZWVuIGFsbG9jYXRlZC4gIEluIG5laXRoZXIgY2FzZSB3aWxsIHRoZSBpcnEgdmFsdWUgaGF2ZSBiZWVuCit1cGRhdGVkLCBub3Igd2lsbCB0aGUgZGV2aWNlIGhhdmUgYmVlbiBzd2l0Y2hlZCBpbnRvIE1TSSBtb2RlLgorCitUaGUgZGV2aWNlIGRyaXZlciBtdXN0IGRlY2lkZSB3aGF0IGFjdGlvbiB0byB0YWtlIGlmCitwY2lfZW5hYmxlX21zaV9ibG9jaygpIHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gdGhlIG51bWJlciBhc2tlZCBmb3IuCitTb21lIGRldmljZXMgY2FuIG1ha2UgdXNlIG9mIGZld2VyIGludGVycnVwdHMgdGhhbiB0aGUgbWF4aW11bSB0aGV5CityZXF1ZXN0OyBpbiB0aGlzIGNhc2UgdGhlIGRyaXZlciBzaG91bGQgY2FsbCBwY2lfZW5hYmxlX21zaV9ibG9jaygpCithZ2Fpbi4gIE5vdGUgdGhhdCBpdCBpcyBub3QgZ3VhcmFudGVlZCB0byBzdWNjZWVkLCBldmVuIHdoZW4gdGhlCisnY291bnQnIGhhcyBiZWVuIHJlZHVjZWQgdG8gdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYSBwcmV2aW91cyBjYWxsIHRvCitwY2lfZW5hYmxlX21zaV9ibG9jaygpLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25zdHJhaW50cworb24gdGhlIG51bWJlciBvZiB2ZWN0b3JzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZDsgcGNpX2VuYWJsZV9tc2lfYmxvY2soKQord2lsbCByZXR1cm4gYXMgc29vbiBhcyBpdCBmaW5kcyBhbnkgY29uc3RyYWludCB0aGF0IGRvZXNuJ3QgYWxsb3cgdGhlCitjYWxsIHRvIHN1Y2NlZWQuCisKKzQuMi4zIHBjaV9kaXNhYmxlX21zaQogCiB2b2lkIHBjaV9kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCi1UaGlzIEFQSSBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpKCkKLXdoZW4gYSBkZXZpY2UgZHJpdmVyIGlzIHVubG9hZGluZy4gVGhpcyBBUEkgcmVzdG9yZXMgZGV2LT5pcnEgd2l0aAotdGhlIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yIGFuZCBzd2l0Y2hlcyBhIGRldmljZSdzIGludGVycnVwdAotbW9kZSB0byBQQ0kgcGluLWlycSBhc3NlcnRpb24vSU5UeCBlbXVsYXRpb24gbW9kZS4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpKCkgb3IKK3BjaV9lbmFibGVfbXNpX2Jsb2NrKCkuICBDYWxsaW5nIGl0IHJlc3RvcmVzIGRldi0+aXJxIHRvIHRoZSBwaW4tYmFzZWQKK2ludGVycnVwdCBudW1iZXIgYW5kIGZyZWVzIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZXNzYWdlIHNpZ25hbGVkCitpbnRlcnJ1cHQocykuICBUaGUgaW50ZXJydXB0IG1heSBzdWJzZXF1ZW50bHkgYmUgYXNzaWduZWQgdG8gYW5vdGhlcgorZGV2aWNlLCBzbyBkcml2ZXJzIHNob3VsZCBub3QgY2FjaGUgdGhlIHZhbHVlIG9mIGRldi0+aXJxLgogCi1Ob3RlIHRoYXQgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIHRoZSBNU0kgdmVjdG9yCi10aGF0IGl0IGhhcyBkb25lIHJlcXVlc3RfaXJxKCkgb24gYmVmb3JlIGNhbGxpbmcgdGhpcyBBUEkuIEZhaWx1cmUgdG8gZG8KLXNvIHJlc3VsdHMgaW4gYSBCVUdfT04oKSBhbmQgYSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGggTVNJIGVuYWJsZWQgYW5kCi1sZWFrcyBpdHMgdmVjdG9yLgorQSBkZXZpY2UgZHJpdmVyIG11c3QgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiB0aGUgaW50ZXJydXB0KHMpCitmb3Igd2hpY2ggaXQgaGFzIGNhbGxlZCByZXF1ZXN0X2lycSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCitGYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGEgQlVHX09OKCksIHRoZSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGgKK01TSSBlbmFibGVkIGFuZCB3aWxsIGxlYWsgaXRzIHZlY3Rvci4KIAotNS4yLjMgTVNJIG1vZGUgdnMuIGxlZ2FjeSBtb2RlIGRpYWdyYW0KKzQuMyBVc2luZyBNU0ktWAogCi1UaGUgYmVsb3cgZGlhZ3JhbSBzaG93cyB0aGUgZXZlbnRzIHdoaWNoIHN3aXRjaCB0aGUgaW50ZXJydXB0Ci1tb2RlIG9uIHRoZSBNU0ktY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb24gYmV0d2VlbiBNU0kgbW9kZSBhbmQKLVBJTi1JUlEgYXNzZXJ0aW9uIG1vZGUuCi0KLQkgLS0tLS0tLS0tLS0tICAgcGNpX2VuYWJsZV9tc2kgCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl8CSAgICAgfCA8PT09PT09PT09PT09PT09CXwgCQkJIHwKLQl8IE1TSSBNT0RFICAgfAkgIAkgICAgIAl8IFBJTi1JUlEgQVNTRVJUSU9OIE1PREUgfAotCXwgCSAgICAgfCA9PT09PT09PT09PT09PT0+CXwJCQkgfAotIAkgLS0tLS0tLS0tLS0tCXBjaV9kaXNhYmxlX21zaSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotRmlndXJlIDEuIE1TSSBNb2RlIHZzLiBMZWdhY3kgTW9kZQotCi1JbiBGaWd1cmUgMSwgYSBkZXZpY2Ugb3BlcmF0ZXMgYnkgZGVmYXVsdCBpbiBsZWdhY3kgbW9kZS4gTGVnYWN5Ci1pbiB0aGlzIGNvbnRleHQgbWVhbnMgUENJIHBpbi1pcnEgYXNzZXJ0aW9uIG9yIFBDSS1FeHByZXNzIElOVHgKLWVtdWxhdGlvbi4gQSBzdWNjZXNzZnVsIE1TSSByZXF1ZXN0ICh1c2luZyBwY2lfZW5hYmxlX21zaSgpKSBzd2l0Y2hlcwotYSBkZXZpY2UncyBpbnRlcnJ1cHQgbW9kZSB0byBNU0kgbW9kZS4gQSBwcmUtYXNzaWduZWQgSU9BUElDIHZlY3Rvcgotc3RvcmVkIGluIGRldi0+aXJxIHdpbGwgYmUgc2F2ZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGEgbmV3Ci1hc3NpZ25lZCBNU0kgdmVjdG9yIHdpbGwgcmVwbGFjZSBkZXYtPmlycS4KLQotVG8gcmV0dXJuIGJhY2sgdG8gaXRzIGRlZmF1bHQgbW9kZSwgYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbAotcGNpX2Rpc2FibGVfbXNpKCkgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpKCkuIE5vdGUgdGhhdCBhCi1kZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIHRoZSBNU0kgdmVjdG9yIGl0IGhhcwotZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaSgpLiBGYWlsdXJlIHRvIGRvCi1zbyByZXN1bHRzIGluIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSSBlbmFibGVkIGFuZAotbGVha3MgaXRzIHZlY3Rvci4gT3RoZXJ3aXNlLCB0aGUgUENJIHN1YnN5c3RlbSByZXN0b3JlcyBhIGRldmljZSdzCi1kZXYtPmlycSB3aXRoIGEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IgYW5kIG1hcmtzIHRoZSByZWxlYXNlZAotTVNJIHZlY3RvciBhcyB1bnVzZWQuCi0KLU9uY2UgYmVpbmcgbWFya2VkIGFzIHVudXNlZCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIFBDSQotc3Vic3lzdGVtIHdpbGwgcmVzZXJ2ZSB0aGlzIE1TSSB2ZWN0b3IgZm9yIGEgZGV2aWNlLiBEZXBlbmRpbmcgb24KLXRoZSBhdmFpbGFiaWxpdHkgb2YgY3VycmVudCBQQ0kgdmVjdG9yIHJlc291cmNlcyBhbmQgdGhlIG51bWJlciBvZgotTVNJL01TSS1YIHJlcXVlc3RzIGZyb20gb3RoZXIgZHJpdmVycywgdGhpcyBNU0kgbWF5IGJlIHJlLWFzc2lnbmVkLgotCi1Gb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIFBDSSBzdWJzeXN0ZW0gcmUtYXNzaWducyB0aGlzIE1TSSB2ZWN0b3IgdG8KLWFub3RoZXIgZHJpdmVyLCBhIHJlcXVlc3QgdG8gc3dpdGNoIGJhY2sgdG8gTVNJIG1vZGUgbWF5IHJlc3VsdAotaW4gYmVpbmcgYXNzaWduZWQgYSBkaWZmZXJlbnQgTVNJIHZlY3RvciBvciBhIGZhaWx1cmUgaWYgbm8gbW9yZQotdmVjdG9ycyBhcmUgYXZhaWxhYmxlLgotCi01LjMgQ29uZmlndXJpbmcgZm9yIE1TSS1YIHN1cHBvcnQKLQotRHVlIHRvIHRoZSBhYmlsaXR5IG9mIHRoZSBzeXN0ZW0gc29mdHdhcmUgdG8gY29uZmlndXJlIGVhY2ggdmVjdG9yIG9mCi10aGUgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aCBhbiBpbmRlcGVuZGVudCBtZXNzYWdlIGFkZHJlc3MKLWFuZCBtZXNzYWdlIGRhdGEsIHRoZSBub24tY29udGlndW91cyBmYXNoaW9uIGluIHZlY3RvciBhc3NpZ25tZW50IG9mCi10aGUgZXhpc3RpbmcgTGludXgga2VybmVsIGhhcyBubyBpbXBhY3Qgb24gc3VwcG9ydGluZyBtdWx0aXBsZQotbWVzc2FnZXMgb24gYW4gTVNJLVggY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb25zLiBUbyBlbmFibGUgTVNJLVggb24KLWEgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgcmVxdWlyZXMgaXRzIGRldmljZQotZHJpdmVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHBjaV9lbmFibGVfbXNpeCgpIGV4cGxpY2l0bHkuCi0KLVRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSwgb25jZSBpbnZva2VkLCBlbmFibGVzIGVpdGhlcgotYWxsIG9yIG5vdGhpbmcsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhdmFpbGFiaWxpdHkgb2YgUENJIHZlY3RvcgotcmVzb3VyY2VzLiBJZiB0aGUgUENJIHZlY3RvciByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIG51bWJlcgotb2YgdmVjdG9ycyByZXF1ZXN0ZWQgYnkgYSBkZXZpY2UgZHJpdmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlCi10aGUgTVNJLVggdGFibGUgb2YgdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIG9mIGEgZGV2aWNlIHdpdGgKLXJlcXVlc3RlZCBtZXNzYWdlcy4gVG8gZW1waGFzaXplIHRoaXMgcmVhc29uLCBmb3IgZXhhbXBsZSwgYSBkZXZpY2UKLW1heSBiZSBjYXBhYmxlIGZvciBzdXBwb3J0aW5nIHRoZSBtYXhpbXVtIG9mIDMyIHZlY3RvcnMgd2hpbGUgaXRzCi1zb2Z0d2FyZSBkcml2ZXIgdXN1YWxseSBtYXkgcmVxdWVzdCA0IHZlY3RvcnMuIEl0IGlzIHJlY29tbWVuZGVkCi10aGF0IHRoZSBkZXZpY2UgZHJpdmVyIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBkdXJpbmcgdGhlCi1pbml0aWFsaXphdGlvbiBwaGFzZSBvZiB0aGUgZGV2aWNlIGRyaXZlci4KLQotVW5saWtlIHRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaSgpLCB0aGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCkKLWRvZXMgbm90IHJlcGxhY2UgdGhlIHByZS1hc3NpZ25lZCBJT0FQSUMgZGV2LT5pcnEgd2l0aCBhIG5ldyBNU0kKLXZlY3RvciBiZWNhdXNlIHRoZSBQQ0kgc3Vic3lzdGVtIHdyaXRlcyB0aGUgMToxIHZlY3Rvci10by1lbnRyeSBtYXBwaW5nCi1pbnRvIHRoZSBmaWVsZCB2ZWN0b3Igb2YgZWFjaCBlbGVtZW50IGNvbnRhaW5lZCBpbiBhIHNlY29uZCBhcmd1bWVudC4KLU5vdGUgdGhhdCB0aGUgcHJlLWFzc2lnbmVkIElPQVBJQyBkZXYtPmlycSBpcyB2YWxpZCBvbmx5IGlmIHRoZSBkZXZpY2UKLW9wZXJhdGVzIGluIFBJTi1JUlEgYXNzZXJ0aW9uIG1vZGUuIEluIE1TSS1YIG1vZGUsIGFueSBhdHRlbXB0IGF0Ci11c2luZyBkZXYtPmlycSBieSB0aGUgZGV2aWNlIGRyaXZlciB0byByZXF1ZXN0IGZvciBpbnRlcnJ1cHQgc2VydmljZQotbWF5IHJlc3VsdCBpbiB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLgotCi1Gb3IgZWFjaCBNU0ktWCB2ZWN0b3IgZ3JhbnRlZCwgYSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCi1vdGhlciBmdW5jdGlvbnMgbGlrZSByZXF1ZXN0X2lycSgpLCBlbmFibGVfaXJxKCksIGV0Yy4gdG8gZW5hYmxlCi10aGlzIHZlY3RvciB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIGludGVycnVwdCBzZXJ2aWNlIGhhbmRsZXIuIEl0IGlzCi1hIGRldmljZSBkcml2ZXIncyBjaG9pY2UgdG8gYXNzaWduIGFsbCB2ZWN0b3JzIHdpdGggdGhlIHNhbWUKLWludGVycnVwdCBzZXJ2aWNlIGhhbmRsZXIgb3IgZWFjaCB2ZWN0b3Igd2l0aCBhIHVuaXF1ZSBpbnRlcnJ1cHQKLXNlcnZpY2UgaGFuZGxlci4KLQotNS4zLjEgSGFuZGxpbmcgTU1JTyBhZGRyZXNzIHNwYWNlIG9mIE1TSS1YIFRhYmxlCi0KLVRoZSBQQ0kgMy4wIHNwZWNpZmljYXRpb24gaGFzIGltcGxlbWVudGF0aW9uIG5vdGVzIHRoYXQgTU1JTyBhZGRyZXNzCi1zcGFjZSBmb3IgYSBkZXZpY2UncyBNU0ktWCBzdHJ1Y3R1cmUgc2hvdWxkIGJlIGlzb2xhdGVkIHNvIHRoYXQgdGhlCi1zb2Z0d2FyZSBzeXN0ZW0gY2FuIHNldCBkaWZmZXJlbnQgcGFnZXMgZm9yIGNvbnRyb2xsaW5nIGFjY2Vzc2VzIHRvIHRoZQotTVNJLVggc3RydWN0dXJlLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgTVNJIHN1cHBvcnQgcmVxdWlyZXMgdGhlIFBDSQotc3Vic3lzdGVtLCBub3QgYSBkZXZpY2UgZHJpdmVyLCB0byBtYWludGFpbiBmdWxsIGNvbnRyb2wgb2YgdGhlIE1TSS1YCi10YWJsZS9NU0ktWCBQQkEgKFBlbmRpbmcgQml0IEFycmF5KSBhbmQgTU1JTyBhZGRyZXNzIHNwYWNlIG9mIHRoZSBNU0ktWAotdGFibGUvTVNJLVggUEJBLiAgQSBkZXZpY2UgZHJpdmVyIHNob3VsZCBub3QgYWNjZXNzIHRoZSBNTUlPIGFkZHJlc3MKLXNwYWNlIG9mIHRoZSBNU0ktWCB0YWJsZS9NU0ktWCBQQkEuCi0KLTUuMy4yIEFQSSBwY2lfZW5hYmxlX21zaXgKLQotaW50IHBjaV9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCi0KLVRoaXMgQVBJIGVuYWJsZXMgYSBkZXZpY2UgZHJpdmVyIHRvIHJlcXVlc3QgdGhlIFBDSSBzdWJzeXN0ZW0KLXRvIGVuYWJsZSBNU0ktWCBtZXNzYWdlcyBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlLiBEZXBlbmRpbmcgb24KLXRoZSBhdmFpbGFiaWxpdHkgb2YgUENJIHZlY3RvcnMgcmVzb3VyY2VzLCB0aGUgUENJIHN1YnN5c3RlbSBlbmFibGVzCi1laXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlIHJlcXVlc3RlZCB2ZWN0b3JzLgotCi1Bcmd1bWVudCAnZGV2JyBwb2ludHMgdG8gdGhlIGRldmljZSAocGNpX2Rldikgc3RydWN0dXJlLgotCi1Bcmd1bWVudCAnZW50cmllcycgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIG1zaXhfZW50cnkgc3RydWN0cy4KLVRoZSBudW1iZXIgb2YgZW50cmllcyBpcyBpbmRpY2F0ZWQgaW4gYXJndW1lbnQgJ252ZWMnLgotc3RydWN0IG1zaXhfZW50cnkgaXMgZGVmaW5lZCBpbiAvZHJpdmVyL3BjaS9tc2kuaDoKK1RoZSBNU0ktWCBjYXBhYmlsaXR5IGlzIG11Y2ggbW9yZSBmbGV4aWJsZSB0aGFuIHRoZSBNU0kgY2FwYWJpbGl0eS4KK0l0IHN1cHBvcnRzIHVwIHRvIDIwNDggaW50ZXJydXB0cywgZWFjaCBvZiB3aGljaCBjYW4gYmUgY29udHJvbGxlZAoraW5kZXBlbmRlbnRseS4gIFRvIHN1cHBvcnQgdGhpcyBmbGV4aWJpbGl0eSwgZHJpdmVycyBtdXN0IHVzZSBhbiBhcnJheSBvZgorYHN0cnVjdCBtc2l4X2VudHJ5JzoKIAogc3RydWN0IG1zaXhfZW50cnkgewogCXUxNiAJdmVjdG9yOyAvKiBrZXJuZWwgdXNlcyB0byB3cml0ZSBhbGxvYyB2ZWN0b3IgKi8KIAl1MTYJZW50cnk7IC8qIGRyaXZlciB1c2VzIHRvIHNwZWNpZnkgZW50cnkgKi8KIH07CiAKLUEgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZCAnZW50cnknIG9mCi1lYWNoIGVsZW1lbnQgd2l0aCBhIHVuaXF1ZSBlbnRyeSBzdXBwb3J0ZWQgYnkgTVNJLVggdGFibGUuIE90aGVyd2lzZSwKLS1FSU5WQUwgd2lsbCBiZSByZXR1cm5lZCBhcyBhIHJlc3VsdC4gQSBzdWNjZXNzZnVsIHJldHVybiBvZiB6ZXJvCi1pbmRpY2F0ZXMgdGhlIFBDSSBzdWJzeXN0ZW0gY29tcGxldGVkIGluaXRpYWxpemluZyBlYWNoIG9mIHRoZSByZXF1ZXN0ZWQKLWVudHJpZXMgb2YgdGhlIE1TSS1YIHRhYmxlIHdpdGggbWVzc2FnZSBhZGRyZXNzIGFuZCBtZXNzYWdlIGRhdGEuCi1MYXN0IGJ1dCBub3QgbGVhc3QsIHRoZSBQQ0kgc3Vic3lzdGVtIHdpbGwgd3JpdGUgdGhlIDE6MQotdmVjdG9yLXRvLWVudHJ5IG1hcHBpbmcgaW50byB0aGUgZmllbGQgJ3ZlY3Rvcicgb2YgZWFjaCBlbGVtZW50LiBBCi1kZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRyYWNrIG9mIGFsbG9jYXRlZCBNU0ktWAotdmVjdG9ycyBpbiBpdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuCitUaGlzIGFsbG93cyBmb3IgdGhlIGRldmljZSB0byB1c2UgdGhlc2UgaW50ZXJydXB0cyBpbiBhIHNwYXJzZSBmYXNoaW9uOworZm9yIGV4YW1wbGUgaXQgY291bGQgdXNlIGludGVycnVwdHMgMyBhbmQgMTAyNyBhbmQgYWxsb2NhdGUgb25seSBhCit0d28tZWxlbWVudCBhcnJheS4gIFRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gZmlsbCBpbiB0aGUgJ2VudHJ5JyB2YWx1ZQoraW4gZWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSB0byBpbmRpY2F0ZSB3aGljaCBlbnRyaWVzIGl0IHdhbnRzIHRoZSBrZXJuZWwKK3RvIGFzc2lnbiBpbnRlcnJ1cHRzIGZvci4gIEl0IGlzIGludmFsaWQgdG8gZmlsbCBpbiB0d28gZW50cmllcyB3aXRoIHRoZQorc2FtZSBudW1iZXIuCiAKLUEgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoYXQgdGhlIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIHdhcwotc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4gQSByZXR1cm4gb2YgZ3JlYXRlciB0aGFuIHplcm8gaW5kaWNhdGVzCi1NU0ktWCB2ZWN0b3Igc2hvcnRhZ2UuIE9yIGEgcmV0dXJuIG9mIGxlc3MgdGhhbiB6ZXJvIGluZGljYXRlcwotYSBmYWlsdXJlLiBUaGlzIGZhaWx1cmUgbWF5IGJlIGEgcmVzdWx0IG9mIGR1cGxpY2F0ZSBlbnRyaWVzCi1zcGVjaWZpZWQgaW4gc2Vjb25kIGFyZ3VtZW50LCBvciBhIHJlc3VsdCBvZiBubyBhdmFpbGFibGUgdmVjdG9yLAotb3IgYSByZXN1bHQgb2YgZmFpbGluZyB0byBpbml0aWFsaXplIE1TSS1YIHRhYmxlIGVudHJpZXMuCis0LjMuMSBwY2lfZW5hYmxlX21zaXgKIAotNS4zLjMgQVBJIHBjaV9kaXNhYmxlX21zaXgKK2ludCBwY2lfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXMsIGludCBudmVjKQorCitDYWxsaW5nIHRoaXMgZnVuY3Rpb24gYXNrcyB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGxvY2F0ZSAnbnZlYycgTVNJcy4KK1RoZSAnZW50cmllcycgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIG1zaXhfZW50cnkgc3RydWN0cword2hpY2ggc2hvdWxkIGJlIGF0IGxlYXN0ICdudmVjJyBlbnRyaWVzIGluIHNpemUuICBPbiBzdWNjZXNzLCB0aGUKK2Z1bmN0aW9uIHdpbGwgcmV0dXJuIDAgYW5kIHRoZSBkZXZpY2Ugd2lsbCBoYXZlIGJlZW4gc3dpdGNoZWQgaW50bworTVNJLVggaW50ZXJydXB0IG1vZGUuICBUaGUgJ3ZlY3RvcicgZWxlbWVudHMgaW4gZWFjaCBlbnRyeSB3aWxsIGhhdmUKK2JlZW4gZmlsbGVkIGluIHdpdGggdGhlIGludGVycnVwdCBudW1iZXIuICBUaGUgZHJpdmVyIHNob3VsZCB0aGVuIGNhbGwKK3JlcXVlc3RfaXJxKCkgZm9yIGVhY2ggJ3ZlY3RvcicgdGhhdCBpdCBkZWNpZGVzIHRvIHVzZS4KKworSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyLCBpdCBpbmRpY2F0ZXMgYW4gZXJyb3IgYW5kCit0aGUgZHJpdmVyIHNob3VsZCBub3QgYXR0ZW1wdCB0byBhbGxvY2F0ZSBhbnkgbW9yZSBNU0ktWCBpbnRlcnJ1cHRzIGZvcgordGhpcyBkZXZpY2UuICBJZiBpdCByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCBpbmRpY2F0ZXMgdGhlIG1heGltdW0KK251bWJlciBvZiBpbnRlcnJ1cHQgdmVjdG9ycyB0aGF0IGNvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQuIFNlZSBleGFtcGxlCitiZWxvdy4KKworVGhpcyBmdW5jdGlvbiwgaW4gY29udHJhc3Qgd2l0aCBwY2lfZW5hYmxlX21zaSgpLCBkb2VzIG5vdCBhZGp1c3QKK2Rldi0+aXJxLiAgVGhlIGRldmljZSB3aWxsIG5vdCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGZvciB0aGlzIGludGVycnVwdAorbnVtYmVyIG9uY2UgTVNJLVggaXMgZW5hYmxlZC4gIFRoZSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvcgora2VlcGluZyB0cmFjayBvZiB0aGUgaW50ZXJydXB0cyBhc3NpZ25lZCB0byB0aGUgTVNJLVggdmVjdG9ycyBzbyBpdCBjYW4KK2ZyZWUgdGhlbSBhZ2FpbiBsYXRlci4KKworRGV2aWNlIGRyaXZlcnMgc2hvdWxkIG5vcm1hbGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBvbmNlIHBlciBkZXZpY2UKK2R1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UuCisKK0l0IGlzIGlkZWFsIGlmIGRyaXZlcnMgY2FuIGNvcGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBNU0ktWCBpbnRlcnJ1cHRzLAordGhlcmUgYXJlIG1hbnkgcmVhc29ucyB3aHkgdGhlIHBsYXRmb3JtIG1heSBub3QgYmUgYWJsZSB0byBwcm92aWRlIHRoZQorZXhhY3QgbnVtYmVyIGEgZHJpdmVyIGFza3MgZm9yLgorCitBIHJlcXVlc3QgbG9vcCB0byBhY2hpZXZlIHRoYXQgbWlnaHQgbG9vayBsaWtlOgorCitzdGF0aWMgaW50IGZvb19kcml2ZXJfZW5hYmxlX21zaXgoc3RydWN0IGZvb19hZGFwdGVyICphZGFwdGVyLCBpbnQgbnZlYykKK3sKKwl3aGlsZSAobnZlYyA+PSBGT09fRFJJVkVSX01JTklNVU1fTlZFQykgeworCQlyYyA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LAorCQkJCSAgICAgYWRhcHRlci0+bXNpeF9lbnRyaWVzLCBudmVjKTsKKwkJaWYgKHJjID4gMCkKKwkJCW52ZWMgPSByYzsKKwkJZWxzZQorCQkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiAtRU5PU1BDOworfQorCis0LjMuMiBwY2lfZGlzYWJsZV9tc2l4CiAKIHZvaWQgcGNpX2Rpc2FibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogCi1UaGlzIEFQSSBzaG91bGQgYWx3YXlzIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpCi13aGVuIGEgZGV2aWNlIGRyaXZlciBpcyB1bmxvYWRpbmcuIE5vdGUgdGhhdCBhIGRldmljZSBkcml2ZXIgc2hvdWxkCi1hbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIGFsbCBNU0ktWCB2ZWN0b3JzIGl0IGhhcyBkb25lIHJlcXVlc3RfaXJxKCkKLW9uIGJlZm9yZSBjYWxsaW5nIHRoaXMgQVBJLiBGYWlsdXJlIHRvIGRvIHNvIHJlc3VsdHMgaW4gYSBCVUdfT04oKSBhbmQKLWEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSS1YIGVuYWJsZWQgYW5kIGxlYWtzIGl0cyB2ZWN0b3JzLgorVGhpcyBBUEkgc2hvdWxkIGJlIHVzZWQgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpLiAgSXQgZnJlZXMKK3RoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZXNzYWdlIHNpZ25hbGVkIGludGVycnVwdHMuICBUaGUgaW50ZXJydXB0cyBtYXkKK3N1YnNlcXVlbnRseSBiZSBhc3NpZ25lZCB0byBhbm90aGVyIGRldmljZSwgc28gZHJpdmVycyBzaG91bGQgbm90IGNhY2hlCit0aGUgdmFsdWUgb2YgdGhlICd2ZWN0b3InIGVsZW1lbnRzIG92ZXIgYSBjYWxsIHRvIHBjaV9kaXNhYmxlX21zaXgoKS4KIAotNS4zLjQgTVNJLVggbW9kZSB2cy4gbGVnYWN5IG1vZGUgZGlhZ3JhbQorQSBkZXZpY2UgZHJpdmVyIG11c3QgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiB0aGUgaW50ZXJydXB0KHMpCitmb3Igd2hpY2ggaXQgaGFzIGNhbGxlZCByZXF1ZXN0X2lycSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCitGYWlsdXJlIHRvIGRvIHNvIHdpbGwgcmVzdWx0IGluIGEgQlVHX09OKCksIHRoZSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGgKK01TSSBlbmFibGVkIGFuZCB3aWxsIGxlYWsgaXRzIHZlY3Rvci4KIAotVGhlIGJlbG93IGRpYWdyYW0gc2hvd3MgdGhlIGV2ZW50cyB3aGljaCBzd2l0Y2ggdGhlIGludGVycnVwdAotbW9kZSBvbiB0aGUgTVNJLVggY2FwYWJsZSBkZXZpY2UgZnVuY3Rpb24gYmV0d2VlbiBNU0ktWCBtb2RlIGFuZAotUElOLUlSUSBhc3NlcnRpb24gbW9kZSAobGVnYWN5KS4KKzQuMy4zIFRoZSBNU0ktWCBUYWJsZQogCi0JIC0tLS0tLS0tLS0tLSAgIHBjaV9lbmFibGVfbXNpeCgsLG4pIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXwJICAgICB8IDw9PT09PT09PT09PT09PT0JICAgIHwgCQkJICAgICB8Ci0JfCBNU0ktWCBNT0RFIHwJICAJICAgICAJICAgIHwgUElOLUlSUSBBU1NFUlRJT04gTU9ERSB8Ci0JfCAJICAgICB8ID09PT09PT09PT09PT09PT4JICAgIHwJCQkgICAgIHwKLSAJIC0tLS0tLS0tLS0tLQlwY2lfZGlzYWJsZV9tc2l4ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBNU0ktWCBjYXBhYmlsaXR5IHNwZWNpZmllcyBhIEJBUiBhbmQgb2Zmc2V0IHdpdGhpbiB0aGF0IEJBUiBmb3IgdGhlCitNU0ktWCBUYWJsZS4gIFRoaXMgYWRkcmVzcyBpcyBtYXBwZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0sIGFuZCBzaG91bGQgbm90CitiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSB0aGUgZGV2aWNlIGRyaXZlci4gIElmIHRoZSBkcml2ZXIgd2lzaGVzIHRvCittYXNrIG9yIHVubWFzayBhbiBpbnRlcnJ1cHQsIGl0IHNob3VsZCBjYWxsIGRpc2FibGVfaXJxKCkgLyBlbmFibGVfaXJxKCkuCiAKLUZpZ3VyZSAyLiBNU0ktWCBNb2RlIHZzLiBMZWdhY3kgTW9kZQorNC40IEhhbmRsaW5nIGRldmljZXMgaW1wbGVtZW50aW5nIGJvdGggTVNJIGFuZCBNU0ktWCBjYXBhYmlsaXRpZXMKIAotSW4gRmlndXJlIDIsIGEgZGV2aWNlIG9wZXJhdGVzIGJ5IGRlZmF1bHQgaW4gbGVnYWN5IG1vZGUuIEEKLXN1Y2Nlc3NmdWwgTVNJLVggcmVxdWVzdCAodXNpbmcgcGNpX2VuYWJsZV9tc2l4KCkpIHN3aXRjaGVzIGEKLWRldmljZSdzIGludGVycnVwdCBtb2RlIHRvIE1TSS1YIG1vZGUuIEEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IKLXN0b3JlZCBpbiBkZXYtPmlycSB3aWxsIGJlIHNhdmVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtOyBob3dldmVyLAotdW5saWtlIE1TSSBtb2RlLCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIG5vdCByZXBsYWNlIGRldi0+aXJxIHdpdGgKLWFzc2lnbmVkIE1TSS1YIHZlY3RvciBiZWNhdXNlIHRoZSBQQ0kgc3Vic3lzdGVtIGFscmVhZHkgd3JpdGVzIHRoZSAxOjEKLXZlY3Rvci10by1lbnRyeSBtYXBwaW5nIGludG8gdGhlIGZpZWxkICd2ZWN0b3InIG9mIGVhY2ggZWxlbWVudAotc3BlY2lmaWVkIGluIHNlY29uZCBhcmd1bWVudC4KK0lmIGEgZGV2aWNlIGltcGxlbWVudHMgYm90aCBNU0kgYW5kIE1TSS1YIGNhcGFiaWxpdGllcywgaXQgY2FuCitydW4gaW4gZWl0aGVyIE1TSSBtb2RlIG9yIE1TSS1YIG1vZGUgYnV0IG5vdCBib3RoIHNpbXVsdGFuZW91c2x5LgorVGhpcyBpcyBhIHJlcXVpcmVtZW50IG9mIHRoZSBQQ0kgc3BlYywgYW5kIGl0IGlzIGVuZm9yY2VkIGJ5IHRoZQorUENJIGxheWVyLiAgQ2FsbGluZyBwY2lfZW5hYmxlX21zaSgpIHdoZW4gTVNJLVggaXMgYWxyZWFkeSBlbmFibGVkIG9yCitwY2lfZW5hYmxlX21zaXgoKSB3aGVuIE1TSSBpcyBhbHJlYWR5IGVuYWJsZWQgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IuCitJZiBhIGRldmljZSBkcml2ZXIgd2lzaGVzIHRvIHN3aXRjaCBiZXR3ZWVuIE1TSSBhbmQgTVNJLVggYXQgcnVudGltZSwKK2l0IG11c3QgZmlyc3QgcXVpZXNjZSB0aGUgZGV2aWNlLCB0aGVuIHN3aXRjaCBpdCBiYWNrIHRvIHBpbi1pbnRlcnJ1cHQKK21vZGUsIGJlZm9yZSBjYWxsaW5nIHBjaV9lbmFibGVfbXNpKCkgb3IgcGNpX2VuYWJsZV9tc2l4KCkgYW5kIHJlc3VtaW5nCitvcGVyYXRpb24uICBUaGlzIGlzIG5vdCBleHBlY3RlZCB0byBiZSBhIGNvbW1vbiBvcGVyYXRpb24gYnV0IG1heSBiZQordXNlZnVsIGZvciBkZWJ1Z2dpbmcgb3IgdGVzdGluZyBkdXJpbmcgZGV2ZWxvcG1lbnQuCiAKLVRvIHJldHVybiBiYWNrIHRvIGl0cyBkZWZhdWx0IG1vZGUsIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwKLXBjaV9kaXNhYmxlX21zaXgoKSB0byB1bmRvIHRoZSBlZmZlY3Qgb2YgcGNpX2VuYWJsZV9tc2l4KCkuIE5vdGUgdGhhdAotYSBkZXZpY2UgZHJpdmVyIHNob3VsZCBhbHdheXMgY2FsbCBmcmVlX2lycSgpIG9uIGFsbCBNU0ktWCB2ZWN0b3JzIGl0Ci1oYXMgZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaXgoKS4gRmFpbHVyZQotdG8gZG8gc28gcmVzdWx0cyBpbiBhIEJVR19PTigpIGFuZCBhIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0ktWAotZW5hYmxlZCBhbmQgbGVha3MgaXRzIHZlY3RvcnMuIE90aGVyd2lzZSwgdGhlIFBDSSBzdWJzeXN0ZW0gc3dpdGNoZXMgYQotZGV2aWNlIGZ1bmN0aW9uJ3MgaW50ZXJydXB0IG1vZGUgZnJvbSBNU0ktWCBtb2RlIHRvIGxlZ2FjeSBtb2RlIGFuZAotbWFya3MgYWxsIGFsbG9jYXRlZCBNU0ktWCB2ZWN0b3JzIGFzIHVudXNlZC4KKzQuNSBDb25zaWRlcmF0aW9ucyB3aGVuIHVzaW5nIE1TSXMKIAotT25jZSBiZWluZyBtYXJrZWQgYXMgdW51c2VkLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgUENJCi1zdWJzeXN0ZW0gd2lsbCByZXNlcnZlIHRoZXNlIE1TSS1YIHZlY3RvcnMgZm9yIGEgZGV2aWNlLiBEZXBlbmRpbmcgb24KLXRoZSBhdmFpbGFiaWxpdHkgb2YgY3VycmVudCBQQ0kgdmVjdG9yIHJlc291cmNlcyBhbmQgdGhlIG51bWJlciBvZgotTVNJL01TSS1YIHJlcXVlc3RzIGZyb20gb3RoZXIgZHJpdmVycywgdGhlc2UgTVNJLVggdmVjdG9ycyBtYXkgYmUKLXJlLWFzc2lnbmVkLgorNC41LjEgQ2hvb3NpbmcgYmV0d2VlbiBNU0ktWCBhbmQgTVNJCiAKLUZvciB0aGUgY2FzZSB3aGVyZSB0aGUgUENJIHN1YnN5c3RlbSByZS1hc3NpZ25lZCB0aGVzZSBNU0ktWCB2ZWN0b3JzCi10byBvdGhlciBkcml2ZXJzLCBhIHJlcXVlc3QgdG8gc3dpdGNoIGJhY2sgdG8gTVNJLVggbW9kZSBtYXkgcmVzdWx0Ci1iZWluZyBhc3NpZ25lZCB3aXRoIGFub3RoZXIgc2V0IG9mIE1TSS1YIHZlY3RvcnMgb3IgYSBmYWlsdXJlIGlmIG5vCi1tb3JlIHZlY3RvcnMgYXJlIGF2YWlsYWJsZS4KK0lmIHlvdXIgZGV2aWNlIHN1cHBvcnRzIGJvdGggTVNJLVggYW5kIE1TSSBjYXBhYmlsaXRpZXMsIHlvdSBzaG91bGQgdXNlCit0aGUgTVNJLVggZmFjaWxpdGllcyBpbiBwcmVmZXJlbmNlIHRvIHRoZSBNU0kgZmFjaWxpdGllcy4gIEFzIG1lbnRpb25lZAorYWJvdmUsIE1TSS1YIHN1cHBvcnRzIGFueSBudW1iZXIgb2YgaW50ZXJydXB0cyBiZXR3ZWVuIDEgYW5kIDIwNDguCitJbiBjb25zdHJhc3QsIE1TSSBpcyByZXN0cmljdGVkIHRvIGEgbWF4aW11bSBvZiAzMiBpbnRlcnJ1cHRzIChhbmQKK211c3QgYmUgYSBwb3dlciBvZiB0d28pLiAgSW4gYWRkaXRpb24sIHRoZSBNU0kgaW50ZXJydXB0IHZlY3RvcnMgbXVzdAorYmUgYWxsb2NhdGVkIGNvbnNlY3V0aXZlbHksIHNvIHRoZSBzeXN0ZW0gbWF5IG5vdCBiZSBhYmxlIHRvIGFsbG9jYXRlCithcyBtYW55IHZlY3RvcnMgZm9yIE1TSSBhcyBpdCBjb3VsZCBmb3IgTVNJLVguICBPbiBzb21lIHBsYXRmb3JtcywgTVNJCitpbnRlcnJ1cHRzIG11c3QgYWxsIGJlIHRhcmdldHRlZCBhdCB0aGUgc2FtZSBzZXQgb2YgQ1BVcyB3aGVyZWFzIE1TSS1YCitpbnRlcnJ1cHRzIGNhbiBhbGwgYmUgdGFyZ2V0dGVkIGF0IGRpZmZlcmVudCBDUFVzLgogCi01LjQgSGFuZGxpbmcgZnVuY3Rpb24gaW1wbGVtZW50aW5nIGJvdGggTVNJIGFuZCBNU0ktWCBjYXBhYmlsaXRpZXMKKzQuNS4yIFNwaW5sb2NrcwogCi1Gb3IgdGhlIGNhc2Ugd2hlcmUgYSBmdW5jdGlvbiBpbXBsZW1lbnRzIGJvdGggTVNJIGFuZCBNU0ktWAotY2FwYWJpbGl0aWVzLCB0aGUgUENJIHN1YnN5c3RlbSBlbmFibGVzIGEgZGV2aWNlIHRvIHJ1biBlaXRoZXIgaW4gTVNJCi1tb2RlIG9yIE1TSS1YIG1vZGUgYnV0IG5vdCBib3RoLiBBIGRldmljZSBkcml2ZXIgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0Ci13YW50cyBNU0kgb3IgTVNJLVggZW5hYmxlZCBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlLiBPbmNlIGEgZGV2aWNlCi1kcml2ZXIgcmVxdWVzdHMgZm9yIE1TSSwgZm9yIGV4YW1wbGUsIGl0IGlzIHByb2hpYml0ZWQgZnJvbSByZXF1ZXN0aW5nCi1NU0ktWDsgaW4gb3RoZXIgd29yZHMsIGEgZGV2aWNlIGRyaXZlciBpcyBub3QgcGVybWl0dGVkIHRvIHBpbmctcG9uZwotYmV0d2VlbiBNU0kgbW9kIE1TSS1YIG1vZGUgZHVyaW5nIGEgcnVuLXRpbWUuCitNb3N0IGRldmljZSBkcml2ZXJzIGhhdmUgYSBwZXItZGV2aWNlIHNwaW5sb2NrIHdoaWNoIGlzIHRha2VuIGluIHRoZQoraW50ZXJydXB0IGhhbmRsZXIuICBXaXRoIHBpbi1iYXNlZCBpbnRlcnJ1cHRzIG9yIGEgc2luZ2xlIE1TSSwgaXQgaXMgbm90CituZWNlc3NhcnkgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzIChMaW51eCBndWFyYW50ZWVzIHRoZSBzYW1lIGludGVycnVwdCB3aWxsCitub3QgYmUgcmUtZW50ZXJlZCkuICBJZiBhIGRldmljZSB1c2VzIG11bHRpcGxlIGludGVycnVwdHMsIHRoZSBkcml2ZXIKK211c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWxlIHRoZSBsb2NrIGlzIGhlbGQuICBJZiB0aGUgZGV2aWNlIHNlbmRzCithIGRpZmZlcmVudCBpbnRlcnJ1cHQsIHRoZSBkcml2ZXIgd2lsbCBkZWFkbG9jayB0cnlpbmcgdG8gcmVjdXJzaXZlbHkKK2FjcXVpcmUgdGhlIHNwaW5sb2NrLgogCi01LjUgSGFyZHdhcmUgcmVxdWlyZW1lbnRzIGZvciBNU0kvTVNJLVggc3VwcG9ydAorVGhlcmUgYXJlIHR3byBzb2x1dGlvbnMuICBUaGUgZmlyc3QgaXMgdG8gdGFrZSB0aGUgbG9jayB3aXRoCitzcGluX2xvY2tfaXJxc2F2ZSgpIG9yIHNwaW5fbG9ja19pcnEoKSAoc2VlCitEb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWxvY2tpbmcpLiAgVGhlIHNlY29uZCBpcyB0byBzcGVjaWZ5CitJUlFGX0RJU0FCTEVEIHRvIHJlcXVlc3RfaXJxKCkgc28gdGhhdCB0aGUga2VybmVsIHJ1bnMgdGhlIGVudGlyZQoraW50ZXJydXB0IHJvdXRpbmUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgogCi1NU0kvTVNJLVggc3VwcG9ydCByZXF1aXJlcyBzdXBwb3J0IGZyb20gYm90aCBzeXN0ZW0gaGFyZHdhcmUgYW5kCi1pbmRpdmlkdWFsIGhhcmR3YXJlIGRldmljZSBmdW5jdGlvbnMuCitJZiB5b3VyIE1TSSBpbnRlcnJ1cHQgcm91dGluZSBkb2VzIG5vdCBob2xkIHRoZSBsb2NrIGZvciB0aGUgd2hvbGUgdGltZQoraXQgaXMgcnVubmluZywgdGhlIGZpcnN0IHNvbHV0aW9uIG1heSBiZSBiZXN0LiAgVGhlIHNlY29uZCBzb2x1dGlvbiBpcworbm9ybWFsbHkgcHJlZmVycmVkIGFzIGl0IGF2b2lkcyBtYWtpbmcgdHdvIHRyYW5zaXRpb25zIGZyb20gaW50ZXJydXB0CitkaXNhYmxlZCB0byBlbmFibGVkIGFuZCBiYWNrIGFnYWluLgogCi01LjUuMSBSZXF1aXJlZCB4ODYgaGFyZHdhcmUgc3VwcG9ydAorNC42IEhvdyB0byB0ZWxsIHdoZXRoZXIgTVNJL01TSS1YIGlzIGVuYWJsZWQgb24gYSBkZXZpY2UKIAotU2luY2UgdGhlIHRhcmdldCBvZiBNU0kgYWRkcmVzcyBpcyB0aGUgbG9jYWwgQVBJQyBDUFUsIGVuYWJsaW5nCi1NU0kvTVNJLVggc3VwcG9ydCBpbiB0aGUgTGludXgga2VybmVsIGlzIGRlcGVuZGVudCBvbiB3aGV0aGVyIGV4aXN0aW5nCi1zeXN0ZW0gaGFyZHdhcmUgc3VwcG9ydHMgbG9jYWwgQVBJQy4gVXNlcnMgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZWlyCi1zeXN0ZW0gc3VwcG9ydHMgbG9jYWwgQVBJQyBvcGVyYXRpb24gYnkgdGVzdGluZyB0aGF0IGl0IHJ1bnMgd2hlbgotQ09ORklHX1g4Nl9MT0NBTF9BUElDPXkuCitVc2luZyAnbHNwY2kgLXYnIChhcyByb290KSBtYXkgc2hvdyBzb21lIGRldmljZXMgd2l0aCAiTVNJIiwgIk1lc3NhZ2UKK1NpZ25hbGxlZCBJbnRlcnJ1cHRzIiBvciAiTVNJLVgiIGNhcGFiaWxpdGllcy4gIEVhY2ggb2YgdGhlc2UgY2FwYWJpbGl0aWVzCitoYXMgYW4gJ0VuYWJsZScgZmxhZyB3aGljaCB3aWxsIGJlIGZvbGxvd2VkIHdpdGggZWl0aGVyICIrIiAoZW5hYmxlZCkKK29yICItIiAoZGlzYWJsZWQpLgogCi1JbiBTTVAgZW52aXJvbm1lbnQsIENPTkZJR19YODZfTE9DQUxfQVBJQyBpcyBhdXRvbWF0aWNhbGx5IHNldDsKLWhvd2V2ZXIsIGluIFVQIGVudmlyb25tZW50LCB1c2VycyBtdXN0IG1hbnVhbGx5IHNldAotQ09ORklHX1g4Nl9MT0NBTF9BUElDLiBPbmNlIENPTkZJR19YODZfTE9DQUxfQVBJQz15LCBzZXR0aW5nCi1DT05GSUdfUENJX01TSSBlbmFibGVzIHRoZSBWRUNUT1IgYmFzZWQgc2NoZW1lIGFuZCB0aGUgb3B0aW9uIGZvcgotTVNJLWNhcGFibGUgZGV2aWNlIGRyaXZlcnMgdG8gc2VsZWN0aXZlbHkgZW5hYmxlIE1TSS9NU0ktWC4KIAotTm90ZSB0aGF0IENPTkZJR19YODZfSU9fQVBJQyBzZXR0aW5nIGlzIGlycmVsZXZhbnQgYmVjYXVzZSBNU0kvTVNJLVgKLXZlY3RvciBpcyBhbGxvY2F0ZWQgbmV3IGR1cmluZyBydW50aW1lIGFuZCBNU0kvTVNJLVggc3VwcG9ydCBkb2VzIG5vdAotZGVwZW5kIG9uIEJJT1Mgc3VwcG9ydC4gVGhpcyBrZXkgaW5kZXBlbmRlbmN5IGVuYWJsZXMgTVNJL01TSS1YCi1zdXBwb3J0IG9uIGZ1dHVyZSBJT3hBUElDIGZyZWUgcGxhdGZvcm1zLgorNS4gTVNJIHF1aXJrcwogCi01LjUuMiBEZXZpY2UgaGFyZHdhcmUgc3VwcG9ydAorU2V2ZXJhbCBQQ0kgY2hpcHNldHMgb3IgZGV2aWNlcyBhcmUga25vd24gbm90IHRvIHN1cHBvcnQgTVNJcy4KK1RoZSBQQ0kgc3RhY2sgcHJvdmlkZXMgdGhyZWUgd2F5cyB0byBkaXNhYmxlIE1TSXM6CiAKLVRoZSBoYXJkd2FyZSBkZXZpY2UgZnVuY3Rpb24gc3VwcG9ydHMgTVNJIGJ5IGluZGljYXRpbmcgdGhlCi1NU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb24gaXRzIFBDSSBjYXBhYmlsaXR5IGxpc3QuIEJ5Ci1kZWZhdWx0LCB0aGlzIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIGJ5Ci10aGUga2VybmVsIHRvIGVuYWJsZSBNU0kgZHVyaW5nIHRoZSBzeXN0ZW0gYm9vdC4gSW4gb3RoZXIgd29yZHMsCi10aGUgZGV2aWNlIGZ1bmN0aW9uIGlzIHJ1bm5pbmcgb24gaXRzIGRlZmF1bHQgcGluIGFzc2VydGlvbiBtb2RlLgotTm90ZSB0aGF0IGluIG1hbnkgY2FzZXMgdGhlIGhhcmR3YXJlIHN1cHBvcnRpbmcgTVNJIGhhdmUgYnVncywKLXdoaWNoIG1heSByZXN1bHQgaW4gc3lzdGVtIGhhbmdzLiBUaGUgc29mdHdhcmUgZHJpdmVyIG9mIHNwZWNpZmljCi1NU0ktY2FwYWJsZSBoYXJkd2FyZSBpcyByZXNwb25zaWJsZSBmb3IgZGVjaWRpbmcgd2hldGhlciB0byBjYWxsCi1wY2lfZW5hYmxlX21zaSBvciBub3QuIEEgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoZSBrZXJuZWwKLXN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCB0aGUgTVNJL01TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIG9mIHRoZQotZGV2aWNlIGZ1bmN0aW9uLiBUaGUgZGV2aWNlIGZ1bmN0aW9uIGlzIG5vdyBydW5uaW5nIG9uIE1TSS9NU0ktWCBtb2RlLgorMS4gZ2xvYmFsbHkKKzIuIG9uIGFsbCBkZXZpY2VzIGJlaGluZCBhIHNwZWNpZmljIGJyaWRnZQorMy4gb24gYSBzaW5nbGUgZGV2aWNlCiAKLTUuNiBIb3cgdG8gdGVsbCB3aGV0aGVyIE1TSS9NU0ktWCBpcyBlbmFibGVkIG9uIGRldmljZSBmdW5jdGlvbgorNS4xLiBEaXNhYmxpbmcgTVNJcyBnbG9iYWxseQogCi1BdCB0aGUgZHJpdmVyIGxldmVsLCBhIHJldHVybiBvZiB6ZXJvIGZyb20gdGhlIGZ1bmN0aW9uIGNhbGwgb2YKLXBjaV9lbmFibGVfbXNpKCkvcGNpX2VuYWJsZV9tc2l4KCkgaW5kaWNhdGVzIHRvIGEgZGV2aWNlIGRyaXZlciB0aGF0Ci1pdHMgZGV2aWNlIGZ1bmN0aW9uIGlzIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSBhbmQgcmVhZHkgdG8gcnVuIGluCi1NU0kvTVNJLVggbW9kZS4KK1NvbWUgaG9zdCBjaGlwc2V0cyBzaW1wbHkgZG9uJ3Qgc3VwcG9ydCBNU0lzIHByb3Blcmx5LiAgSWYgd2UncmUKK2x1Y2t5LCB0aGUgbWFudWZhY3R1cmVyIGtub3dzIHRoaXMgYW5kIGhhcyBpbmRpY2F0ZWQgaXQgaW4gdGhlIEFDUEkKK0ZBRFQgdGFibGUuICBJbiB0aGlzIGNhc2UsIExpbnV4IHdpbGwgYXV0b21hdGljYWxseSBkaXNhYmxlIE1TSXMuCitTb21lIGJvYXJkcyBkb24ndCBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIHRhYmxlIGFuZCBzbyB3ZSBoYXZlCit0byBkZXRlY3QgdGhlbSBvdXJzZWx2ZXMuICBUaGUgY29tcGxldGUgbGlzdCBvZiB0aGVzZSBpcyBmb3VuZCBuZWFyIHRoZQorcXVpcmtfZGlzYWJsZV9hbGxfbXNpKCkgZnVuY3Rpb24gaW4gZHJpdmVycy9wY2kvcXVpcmtzLmMuCiAKLUF0IHRoZSB1c2VyIGxldmVsLCB1c2VycyBjYW4gdXNlIHRoZSBjb21tYW5kICdjYXQgL3Byb2MvaW50ZXJydXB0cycKLXRvIGRpc3BsYXkgdGhlIHZlY3RvcnMgYWxsb2NhdGVkIGZvciBkZXZpY2VzIGFuZCB0aGVpciBpbnRlcnJ1cHQKLU1TSS9NU0ktWCBtb2RlcyAoIlBDSS1NU0kiLyJQQ0ktTVNJLVgiKS4gQmVsb3cgc2hvd3MgTVNJIG1vZGUgaXMKLWVuYWJsZWQgb24gYSBTQ1NJIEFkYXB0ZWMgMzkzMjBEIFVsdHJhMzIwIGNvbnRyb2xsZXIuCitJZiB5b3UgaGF2ZSBhIGJvYXJkIHdoaWNoIGhhcyBwcm9ibGVtcyB3aXRoIE1TSXMsIHlvdSBjYW4gcGFzcyBwY2k9bm9tc2kKK29uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRvIGRpc2FibGUgTVNJcyBvbiBhbGwgZGV2aWNlcy4gIEl0IHdvdWxkIGJlCitpbiB5b3VyIGJlc3QgaW50ZXJlc3RzIHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitpbmNsdWRpbmcgYSBmdWxsICdsc3BjaSAtdicgc28gd2UgY2FuIGFkZCB0aGUgcXVpcmtzIHRvIHRoZSBrZXJuZWwuCiAKLSAgICAgICAgICAgQ1BVMCAgICAgICBDUFUxCi0gIDA6ICAgICAzMjQ2MzkgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIHRpbWVyCi0gIDE6ICAgICAgIDExODYgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIGk4MDQyCi0gIDI6ICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICBYVC1QSUMgIGNhc2NhZGUKLSAxMjogICAgICAgMjc5NyAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaTgwNDIKLSAxNDogICAgICAgNjU0MyAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaWRlMAotIDE1OiAgICAgICAgICAxICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBpZGUxCi0xNjk6ICAgICAgICAgIDAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIHVoY2ktaGNkCi0xODU6ICAgICAgICAgIDAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIHVoY2ktaGNkCi0xOTM6ICAgICAgICAxMzggICAgICAgICAxMCAgICAgICAgIFBDSS1NU0kgIGFpYzc5eHgKLTIwMTogICAgICAgICAzMCAgICAgICAgICAwICAgICAgICAgUENJLU1TSSAgYWljNzl4eAotMjI1OiAgICAgICAgIDMwICAgICAgICAgIDAgICBJTy1BUElDLWxldmVsICBhaWM3eHh4Ci0yMzM6ICAgICAgICAgMzAgICAgICAgICAgMCAgIElPLUFQSUMtbGV2ZWwgIGFpYzd4eHgKLU5NSTogICAgICAgICAgMCAgICAgICAgICAwCi1MT0M6ICAgICAzMjQ1NTMgICAgIDMyNTA2OAotRVJSOiAgICAgICAgICAwCi1NSVM6ICAgICAgICAgIDAKKzUuMi4gRGlzYWJsaW5nIE1TSXMgYmVsb3cgYSBicmlkZ2UKIAotNi4gTVNJIHF1aXJrcworU29tZSBQQ0kgYnJpZGdlcyBhcmUgbm90IGFibGUgdG8gcm91dGUgTVNJcyBiZXR3ZWVuIGJ1c3NlcyBwcm9wZXJseS4KK0luIHRoaXMgY2FzZSwgTVNJcyBtdXN0IGJlIGRpc2FibGVkIG9uIGFsbCBkZXZpY2VzIGJlaGluZCB0aGUgYnJpZGdlLgogCi1TZXZlcmFsIFBDSSBjaGlwc2V0cyBvciBkZXZpY2VzIGFyZSBrbm93biB0byBub3Qgc3VwcG9ydCBNU0kuCi1UaGUgUENJIHN0YWNrIHByb3ZpZGVzIDMgcG9zc2libGUgbGV2ZWxzIG9mIE1TSSBkaXNhYmxpbmc6Ci0qIG9uIGEgc2luZ2xlIGRldmljZQotKiBvbiBhbGwgZGV2aWNlcyBiZWhpbmQgYSBzcGVjaWZpYyBicmlkZ2UKLSogZ2xvYmFsbHkKK1NvbWUgYnJpZGdlcyBhbGxvdyB5b3UgdG8gZW5hYmxlIE1TSXMgYnkgY2hhbmdpbmcgc29tZSBiaXRzIGluIHRoZWlyCitQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAoZXNwZWNpYWxseSB0aGUgSHlwZXJ0cmFuc3BvcnQgY2hpcHNldHMgc3VjaAorYXMgdGhlIG5WaWRpYSBuRm9yY2UgYW5kIFNlcnZlcndvcmtzIEhUMjAwMCkuICBBcyB3aXRoIGhvc3QgY2hpcHNldHMsCitMaW51eCBtb3N0bHkga25vd3MgYWJvdXQgdGhlbSBhbmQgYXV0b21hdGljYWxseSBlbmFibGVzIE1TSXMgaWYgaXQgY2FuLgorSWYgeW91IGhhdmUgYSBicmlkZ2Ugd2hpY2ggTGludXggZG9lc24ndCB5ZXQga25vdyBhYm91dCwgeW91IGNhbiBlbmFibGUKK01TSXMgaW4gY29uZmlndXJhdGlvbiBzcGFjZSB1c2luZyB3aGF0ZXZlciBtZXRob2QgeW91IGtub3cgd29ya3MsIHRoZW4KK2VuYWJsZSBNU0lzIG9uIHRoYXQgYnJpZGdlIGJ5IGRvaW5nOgogCi02LjEuIERpc2FibGluZyBNU0kgb24gYSBzaW5nbGUgZGV2aWNlCisgICAgICAgZWNobyAxID4gL3N5cy9idXMvcGNpL2RldmljZXMvJGJyaWRnZS9tc2lfYnVzCiAKLVVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBpdCBtaWdodCBiZSByZXF1aXJlZCB0byBkaXNhYmxlIE1TSSBvbiBhCi1zaW5nbGUgZGV2aWNlLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkgZWl0aGVyIG5vdCBjYWxsaW5nIHBjaV9lbmFibGVfbXNpKCkKLW9yIGFsbCwgb3Igc2V0dGluZyB0aGUgcGNpX2Rldi0+bm9fbXNpIGZsYWcgYmVmb3JlIChtb3N0IG9mIHRoZSB0aW1lCi1pbiBhIHF1aXJrKS4KK3doZXJlICRicmlkZ2UgaXMgdGhlIFBDSSBhZGRyZXNzIG9mIHRoZSBicmlkZ2UgeW91J3ZlIGVuYWJsZWQgKGVnCiswMDAwOjAwOjBlLjApLgogCi02LjIuIERpc2FibGluZyBNU0kgYmVsb3cgYSBicmlkZ2UKK1RvIGRpc2FibGUgTVNJcywgZWNobyAwIGluc3RlYWQgb2YgMS4gIENoYW5naW5nIHRoaXMgdmFsdWUgc2hvdWxkIGJlCitkb25lIHdpdGggY2F1dGlvbiBhcyBpdCBjYW4gYnJlYWsgaW50ZXJydXB0IGhhbmRsaW5nIGZvciBhbGwgZGV2aWNlcworYmVsb3cgdGhpcyBicmlkZ2UuCiAKLVRoZSB2YXN0IG1ham9yaXR5IG9mIE1TSSBxdWlya3MgYXJlIHJlcXVpcmVkIGJ5IFBDSSBicmlkZ2VzIG5vdAotYmVpbmcgYWJsZSB0byByb3V0ZSBNU0kgYmV0d2VlbiBidXNzZXMuIEluIHRoaXMgY2FzZSwgTVNJIGhhdmUgdG8gYmUKLWRpc2FibGVkIG9uIGFsbCBkZXZpY2VzIGJlaGluZCB0aGlzIGJyaWRnZS4gSXQgaXMgYWNoaWV2ZXMgYnkgc2V0dGluZwotdGhlIFBDSV9CVVNfRkxBR1NfTk9fTVNJIGZsYWcgaW4gdGhlIHBjaV9idXMtPmJ1c19mbGFncyBvZiB0aGUgYnJpZGdlCi1zdWJvcmRpbmF0ZSBidXMuIFRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoZSBzYW1lIGZsYWcgb24gYnJpZGdlcyB0aGF0Ci1hcmUgYmVsb3cgdGhlIGJyb2tlbiBicmlkZ2UuIFdoZW4gcGNpX2VuYWJsZV9tc2koKSBpcyBjYWxsZWQgdG8gZW5hYmxlCi1NU0kgb24gYSBkZXZpY2UsIHBjaV9tc2lfc3VwcG9ydGVkKCkgdGFrZXMgY2FyZSBvZiBjaGVja2luZyB0aGUgTk9fTVNJCi1mbGFnIGluIGFsbCBwYXJlbnQgYnVzc2VzIG9mIHRoZSBkZXZpY2UuCitBZ2FpbiwgcGxlYXNlIG5vdGlmeSBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnIG9mIGFueSBicmlkZ2VzIHRoYXQgbmVlZAorc3BlY2lhbCBoYW5kbGluZy4KIAotU29tZSBicmlkZ2VzIGFjdHVhbGx5IHN1cHBvcnQgZHluYW1pYyBNU0kgc3VwcG9ydCBlbmFibGluZy9kaXNhYmxpbmcKLWJ5IGNoYW5naW5nIHNvbWUgYml0cyBpbiB0aGVpciBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAoZXNwZWNpYWxseQotdGhlIEh5cGVydHJhbnNwb3J0IGNoaXBzZXRzIHN1Y2ggYXMgdGhlIG5WaWRpYSBuRm9yY2UgYW5kIFNlcnZlcndvcmtzCi1IVDIwMDApLiBJdCBtYXkgdGhlbiBiZSByZXF1aXJlZCB0byB1cGRhdGUgdGhlIE5PX01TSSBmbGFnIG9uIHRoZQotY29ycmVzcG9uZGluZyBkZXZpY2VzIGluIHRoZSBzeXNmcyBoaWVyYXJjaHkuIFRvIGVuYWJsZSBNU0kgc3VwcG9ydAotb24gZGV2aWNlICIwMDAwOjAwOjBlIiwgZG86Cis1LjMuIERpc2FibGluZyBNU0lzIG9uIGEgc2luZ2xlIGRldmljZQogCi0JZWNobyAxID4gL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMDowZS9tc2lfYnVzCitTb21lIGRldmljZXMgYXJlIGtub3duIHRvIGhhdmUgZmF1bHR5IE1TSSBpbXBsZW1lbnRhdGlvbnMuICBVc3VhbGx5IHRoaXMKK2lzIGhhbmRsZWQgaW4gdGhlIGluZGl2aWR1YWwgZGV2aWNlIGRyaXZlciBidXQgb2NjYXNpb25hbGx5IGl0J3MgbmVjZXNzYXJ5Cit0byBoYW5kbGUgdGhpcyB3aXRoIGEgcXVpcmsuICBTb21lIGRyaXZlcnMgaGF2ZSBhbiBvcHRpb24gdG8gZGlzYWJsZSB1c2UKK29mIE1TSS4gIFdoaWxlIHRoaXMgaXMgYSBjb252ZW5pZW50IHdvcmthcm91bmQgZm9yIHRoZSBkcml2ZXIgYXV0aG9yLAoraXQgaXMgbm90IGdvb2QgcHJhY3Rpc2UsIGFuZCBzaG91bGQgbm90IGJlIGVtdWxhdGVkLgogCi1UbyBkaXNhYmxlIE1TSSBzdXBwb3J0LCBlY2hvIDAgaW5zdGVhZCBvZiAxLiBOb3RlIHRoYXQgaXQgc2hvdWxkIGJlCi11c2VkIHdpdGggY2F1dGlvbiBzaW5jZSBjaGFuZ2luZyB0aGlzIHZhbHVlIG1pZ2h0IGJyZWFrIGludGVycnVwdHMuCis1LjQuIEZpbmRpbmcgd2h5IE1TSXMgYXJlIGRpc2FibGVkIG9uIGEgZGV2aWNlCiAKLTYuMy4gRGlzYWJsaW5nIE1TSSBnbG9iYWxseQorRnJvbSB0aGUgYWJvdmUgdGhyZWUgc2VjdGlvbnMsIHlvdSBjYW4gc2VlIHRoYXQgdGhlcmUgYXJlIG1hbnkgcmVhc29ucword2h5IE1TSXMgbWF5IG5vdCBiZSBlbmFibGVkIGZvciBhIGdpdmVuIGRldmljZS4gIFlvdXIgZmlyc3Qgc3RlcCBzaG91bGQKK2JlIHRvIGV4YW1pbmUgeW91ciBkbWVzZyBjYXJlZnVsbHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgTVNJcyBhcmUgZW5hYmxlZAorZm9yIHlvdXIgbWFjaGluZS4gIFlvdSBzaG91bGQgYWxzbyBjaGVjayB5b3VyIC5jb25maWcgdG8gYmUgc3VyZSB5b3UKK2hhdmUgZW5hYmxlZCBDT05GSUdfUENJX01TSS4KIAotU29tZSBleHRyZW1lIGNhc2VzIG1heSByZXF1aXJlIHRvIGRpc2FibGUgTVNJIGdsb2JhbGx5IG9uIHRoZSBzeXN0ZW0uCi1Gb3Igbm93LCB0aGUgb25seSBrbm93biBjYXNlIGlzIGEgU2VydmVyd29ya3MgUENJLVggY2hpcHNldHMgKE1TSSBhcmUKLW5vdCBzdXBwb3J0ZWQgb24gc2V2ZXJhbCBidXNzZXMgdGhhdCBhcmUgbm90IGFsbCBjb25uZWN0ZWQgdG8gdGhlCi1jaGlwc2V0IGluIHRoZSBMaW51eCBQQ0kgaGllcmFyY2h5KS4gSW4gdGhlIHZhc3QgbWFqb3JpdHkgb2Ygb3RoZXIKLWNhc2VzLCBkaXNhYmxpbmcgb25seSBiZWhpbmQgYSBzcGVjaWZpYyBicmlkZ2UgaXMgZW5vdWdoLgorVGhlbiwgJ2xzcGNpIC10JyBnaXZlcyB0aGUgbGlzdCBvZiBicmlkZ2VzIGFib3ZlIGEgZGV2aWNlLiAgUmVhZGluZworL3N5cy9idXMvcGNpL2RldmljZXMvKi9tc2lfYnVzIHdpbGwgdGVsbCB5b3Ugd2hldGhlciBNU0kgYXJlIGVuYWJsZWQgKDEpCitvciBkaXNhYmxlZCAoMCkuICBJZiAwIGlzIGZvdW5kIGluIGFueSBvZiB0aGUgbXNpX2J1cyBmaWxlcyBiZWxvbmdpbmcKK3RvIGJyaWRnZXMgYmV0d2VlbiB0aGUgUENJIHJvb3QgYW5kIHRoZSBkZXZpY2UsIE1TSXMgYXJlIGRpc2FibGVkLgogCi1Gb3IgZGVidWdnaW5nIHB1cnBvc2UsIHRoZSB1c2VyIG1heSBhbHNvIHBhc3MgcGNpPW5vbXNpIG9uIHRoZSBrZXJuZWwKLWNvbW1hbmQtbGluZSB0byBleHBsaWNpdGx5IGRpc2FibGUgTVNJIGdsb2JhbGx5LiBCdXQsIG9uY2UgdGhlIGFwcHJvLQotcHJpYXRlIHF1aXJrcyBhcmUgYWRkZWQgdG8gdGhlIGtlcm5lbCwgdGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZQotcmVxdWlyZWQgYW55bW9yZS4KLQotNi40LiBGaW5kaW5nIHdoeSBNU0kgY2Fubm90IGJlIGVuYWJsZWQgb24gYSBkZXZpY2UKLQotQXNzdW1pbmcgdGhhdCBNU0kgYXJlIG5vdCBlbmFibGVkIG9uIGEgZGV2aWNlLCB5b3Ugc2hvdWxkIGxvb2sgYXQKLWRtZXNnIHRvIGZpbmQgbWVzc2FnZXMgdGhhdCBxdWlya3MgbWF5IG91dHB1dCB3aGVuIGRpc2FibGluZyBNU0kKLW9uIHNvbWUgZGV2aWNlcywgc29tZSBicmlkZ2VzIG9yIGV2ZW4gZ2xvYmFsbHkuCi1UaGVuLCBsc3BjaSAtdCBnaXZlcyB0aGUgbGlzdCBvZiBicmlkZ2VzIGFib3ZlIGEgZGV2aWNlLiBSZWFkaW5nCi0vc3lzL2J1cy9wY2kvZGV2aWNlcy8wMDAwOjAwOjBlL21zaV9idXMgd2lsbCB0ZWxsIHlvdSB3aGV0aGVyIE1TSQotYXJlIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKS4gSW4gMCBpcyBmb3VuZCBpbiBhIHNpbmdsZSBicmlkZ2UKLW1zaV9idXMgZmlsZSBhYm92ZSB0aGUgZGV2aWNlLCBNU0kgY2Fubm90IGJlIGVuYWJsZWQuCi0KLTcuIEZBUQotCi1RMS4gQXJlIHRoZXJlIGFueSBsaW1pdGF0aW9ucyBvbiB1c2luZyB0aGUgTVNJPwotCi1BMS4gSWYgdGhlIFBDSSBkZXZpY2Ugc3VwcG9ydHMgTVNJIGFuZCBjb25mb3JtcyB0byB0aGUKLXNwZWNpZmljYXRpb24gYW5kIHRoZSBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgQVBJQyBsb2NhbCBidXMsCi10aGVuIHVzaW5nIE1TSSBzaG91bGQgd29yay4KLQotUTIuIFdpbGwgaXQgd29yayBvbiBhbGwgdGhlIFBlbnRpdW0gcHJvY2Vzc29ycyAoUDMsIFA0LCBYZW9uLAotQU1EIHByb2Nlc3NvcnMpPyBJbiBQMyBJUEkncyBhcmUgdHJhbnNtaXR0ZWQgb24gdGhlIEFQSUMgbG9jYWwKLWJ1cyBhbmQgaW4gUDQgYW5kIFhlb24gdGhleSBhcmUgdHJhbnNtaXR0ZWQgb24gdGhlIHN5c3RlbQotYnVzLiBBcmUgdGhlcmUgYW55IGltcGxpY2F0aW9ucyB3aXRoIHRoaXM/Ci0KLUEyLiBNU0kgc3VwcG9ydCBlbmFibGVzIGEgUENJIGRldmljZSBzZW5kaW5nIGFuIGluYm91bmQKLW1lbW9yeSB3cml0ZSAoMHhmZWV4eHh4eCBhcyB0YXJnZXQgYWRkcmVzcykgb24gaXRzIFBDSSBidXMKLWRpcmVjdGx5IHRvIHRoZSBGU0IuIFNpbmNlIHRoZSBtZXNzYWdlIGFkZHJlc3MgaGFzIGEKLXJlZGlyZWN0aW9uIGhpbnQgYml0IGNsZWFyZWQsIGl0IHNob3VsZCB3b3JrLgotCi1RMy4gVGhlIHRhcmdldCBhZGRyZXNzIDB4ZmVleHh4eHggd2lsbCBiZSB0cmFuc2xhdGVkIGJ5IHRoZQotSG9zdCBCcmlkZ2UgaW50byBhbiBpbnRlcnJ1cHQgbWVzc2FnZS4gQXJlIHRoZXJlIGFueQotbGltaXRhdGlvbnMgb24gdGhlIGNoaXBzZXRzIHN1Y2ggYXMgSW50ZWwgOHh4LCBJbnRlbCBlN3h4eCwKLW9yIFZJQT8KLQotQTMuIElmIHRoZXNlIGNoaXBzZXRzIHN1cHBvcnQgYW4gaW5ib3VuZCBtZW1vcnkgd3JpdGUgd2l0aAotdGFyZ2V0IGFkZHJlc3Mgc2V0IGFzIDB4ZmVleHh4eHgsIGFzIGNvbmZvcm1lZCB0byBQQ0kKLXNwZWNpZmljYXRpb24gMi4zIG9yIGxhdGVzdCwgdGhlbiBpdCBzaG91bGQgd29yay4KLQotUTQuIEZyb20gdGhlIGRyaXZlciBwb2ludCBvZiB2aWV3LCBpZiB0aGUgTVNJIGlzIGxvc3QgYmVjYXVzZQotb2YgZXJyb3JzIG9jY3VycmluZyBkdXJpbmcgaW5ib3VuZCBtZW1vcnkgd3JpdGUsIHRoZW4gaXQgbWF5Ci13YWl0IGZvcmV2ZXIuIElzIHRoZXJlIGEgbWVjaGFuaXNtIGZvciBpdCB0byByZWNvdmVyPwotCi1BNC4gU2luY2UgdGhlIHRhcmdldCBvZiB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gaW5ib3VuZCBtZW1vcnkKLXdyaXRlLCBhbGwgdHJhbnNhY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9ucyAoUmV0cnksCi1NYXN0ZXItQWJvcnQsIFRhcmdldC1BYm9ydCwgb3Igbm9ybWFsIGNvbXBsZXRpb24pIGFyZQotc3VwcG9ydGVkLiBBIGRldmljZSBzZW5kaW5nIGFuIE1TSSBtdXN0IGFiaWRlIGJ5IGFsbCB0aGUgUENJCi1ydWxlcyBhbmQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhhdCBpbmJvdW5kIG1lbW9yeSB3cml0ZS4gU28sCi1pZiBhIHJldHJ5IGlzIHNpZ25hbGVkIGl0IG11c3QgcmV0cnksIGV0Yy4uLiBXZSBiZWxpZXZlIHRoYXQKLXRoZSByZWNvbW1lbmRhdGlvbiBmb3IgQWJvcnQgaXMgYWxzbyBhIHJldHJ5IChyZWZlciB0byBQQ0kKLXNwZWNpZmljYXRpb24gMi4zIG9yIGxhdGVzdCkuCitJdCBpcyBhbHNvIHdvcnRoIGNoZWNraW5nIHRoZSBkZXZpY2UgZHJpdmVyIHRvIHNlZSB3aGV0aGVyIGl0IHN1cHBvcnRzIE1TSXMuCitGb3IgZXhhbXBsZSwgaXQgbWF5IGNvbnRhaW4gY2FsbHMgdG8gcGNpX2VuYWJsZV9tc2koKSwgcGNpX2VuYWJsZV9tc2l4KCkgb3IKK3BjaV9lbmFibGVfbXNpX2Jsb2NrKCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1BDSS9wY2ktaW92LWhvd3RvLnR4dCBiL0RvY3VtZW50YXRpb24vUENJL3BjaS1pb3YtaG93dG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzNlZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2ktaW92LWhvd3RvLnR4dApAQCAtMCwwICsxLDk5IEBACisJCVBDSSBFeHByZXNzIEkvTyBWaXJ0dWFsaXphdGlvbiBIb3d0bworCQlDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKwkJICAgIFl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorCisKKzEuIE92ZXJ2aWV3CisKKzEuMSBXaGF0IGlzIFNSLUlPVgorCitTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKFNSLUlPVikgaXMgYSBQQ0kgRXhwcmVzcyBFeHRlbmRlZAorY2FwYWJpbGl0eSB3aGljaCBtYWtlcyBvbmUgcGh5c2ljYWwgZGV2aWNlIGFwcGVhciBhcyBtdWx0aXBsZSB2aXJ0dWFsCitkZXZpY2VzLiBUaGUgcGh5c2ljYWwgZGV2aWNlIGlzIHJlZmVycmVkIHRvIGFzIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikKK3doaWxlIHRoZSB2aXJ0dWFsIGRldmljZXMgYXJlIHJlZmVycmVkIHRvIGFzIFZpcnR1YWwgRnVuY3Rpb25zIChWRikuCitBbGxvY2F0aW9uIG9mIHRoZSBWRiBjYW4gYmUgZHluYW1pY2FsbHkgY29udHJvbGxlZCBieSB0aGUgUEYgdmlhCityZWdpc3RlcnMgZW5jYXBzdWxhdGVkIGluIHRoZSBjYXBhYmlsaXR5LiBCeSBkZWZhdWx0LCB0aGlzIGZlYXR1cmUgaXMKK25vdCBlbmFibGVkIGFuZCB0aGUgUEYgYmVoYXZlcyBhcyB0cmFkaXRpb25hbCBQQ0llIGRldmljZS4gT25jZSBpdCdzCit0dXJuZWQgb24sIGVhY2ggVkYncyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBjYW4gYmUgYWNjZXNzZWQgYnkgaXRzIG93bgorQnVzLCBEZXZpY2UgYW5kIEZ1bmN0aW9uIE51bWJlciAoUm91dGluZyBJRCkuIEFuZCBlYWNoIFZGIGFsc28gaGFzIFBDSQorTWVtb3J5IFNwYWNlLCB3aGljaCBpcyB1c2VkIHRvIG1hcCBpdHMgcmVnaXN0ZXIgc2V0LiBWRiBkZXZpY2UgZHJpdmVyCitvcGVyYXRlcyBvbiB0aGUgcmVnaXN0ZXIgc2V0IHNvIGl0IGNhbiBiZSBmdW5jdGlvbmFsIGFuZCBhcHBlYXIgYXMgYQorcmVhbCBleGlzdGluZyBQQ0kgZGV2aWNlLgorCisyLiBVc2VyIEd1aWRlCisKKzIuMSBIb3cgY2FuIEkgZW5hYmxlIFNSLUlPViBjYXBhYmlsaXR5CisKK1RoZSBkZXZpY2UgZHJpdmVyIChQRiBkcml2ZXIpIHdpbGwgY29udHJvbCB0aGUgZW5hYmxpbmcgYW5kIGRpc2FibGluZworb2YgdGhlIGNhcGFiaWxpdHkgdmlhIEFQSSBwcm92aWRlZCBieSBTUi1JT1YgY29yZS4gSWYgdGhlIGhhcmR3YXJlCitoYXMgU1ItSU9WIGNhcGFiaWxpdHksIGxvYWRpbmcgaXRzIFBGIGRyaXZlciB3b3VsZCBlbmFibGUgaXQgYW5kIGFsbAorVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYuCisKKzIuMiBIb3cgY2FuIEkgdXNlIHRoZSBWaXJ0dWFsIEZ1bmN0aW9ucworCitUaGUgVkYgaXMgdHJlYXRlZCBhcyBob3QtcGx1Z2dlZCBQQ0kgZGV2aWNlcyBpbiB0aGUga2VybmVsLCBzbyB0aGV5CitzaG91bGQgYmUgYWJsZSB0byB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyByZWFsIFBDSSBkZXZpY2VzLiBUaGUgVkYKK3JlcXVpcmVzIGRldmljZSBkcml2ZXIgdGhhdCBpcyBzYW1lIGFzIGEgbm9ybWFsIFBDSSBkZXZpY2Uncy4KKworMy4gRGV2ZWxvcGVyIEd1aWRlCisKKzMuMSBTUi1JT1YgQVBJCisKK1RvIGVuYWJsZSBTUi1JT1YgY2FwYWJpbGl0eToKKwlpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKTsKKwknbnJfdmlydGZuJyBpcyBudW1iZXIgb2YgVkZzIHRvIGJlIGVuYWJsZWQuCisKK1RvIGRpc2FibGUgU1ItSU9WIGNhcGFiaWxpdHk6CisJdm9pZCBwY2lfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworVG8gbm90aWZ5IFNSLUlPViBjb3JlIG9mIFZpcnR1YWwgRnVuY3Rpb24gTWlncmF0aW9uOgorCWlycXJldHVybl90IHBjaV9zcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CisKKzMuMiBVc2FnZSBleGFtcGxlCisKK0ZvbGxvd2luZyBwaWVjZSBvZiBjb2RlIGlsbHVzdHJhdGVzIHRoZSB1c2FnZSBvZiB0aGUgU1ItSU9WIEFQSS4KKworc3RhdGljIGludCBfX2RldmluaXQgZGV2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlwY2lfZW5hYmxlX3NyaW92KGRldiwgTlJfVklSVEZOKTsKKworCS4uLgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkZXZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX2Rpc2FibGVfc3Jpb3YoZGV2KTsKKworCS4uLgorfQorCitzdGF0aWMgaW50IGRldl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkuLi4KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRldl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkuLi4KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXZfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkuLi4KK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRldl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJIlNSLUlPViBQaHlzaWNhbCBGdW5jdGlvbiBkcml2ZXIiLAorCS5pZF90YWJsZSA9CWRldl9pZF90YWJsZSwKKwkucHJvYmUgPQlkZXZfcHJvYmUsCisJLnJlbW92ZSA9CV9fZGV2ZXhpdF9wKGRldl9yZW1vdmUpLAorCS5zdXNwZW5kID0JZGV2X3N1c3BlbmQsCisJLnJlc3VtZSA9CWRldl9yZXN1bWUsCisJLnNodXRkb3duID0JZGV2X3NodXRkb3duLAorfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKaW5kZXggMWZkMTc1My4uNDM0OWMxNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS50eHQKQEAgLTExOCw3ICsxMTgsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKIAkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsICZlLT5ydWxlKSkgewogCQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7Ci0JCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGUpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJCQluZS0+cnVsZS5hY3Rpb24gPSBuZXdhY3Rpb247CiAJCQkJbmUtPnJ1bGUuZmlsZV9jb3VudCA9IG5ld2ZpZWxkX2NvdW50OwogCQkJCWxpc3RfcmVwbGFjZV9yY3UoZSwgbmUpOwotCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjgzLDcgKzI4Myw3IEBACiAJCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKIAkJCQllLT5kZWxldGVkID0gMTsKIAkJCQlzcGluX3VubG9jaygmZS0+bG9jayk7Ci0JCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlLCBlKTsKKwkJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGUpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAppbmRleCA5NTgyMWEyLi43YWEyMDAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKQEAgLTgxLDcgKzgxLDcgQEAKIAlUaGlzIHdvcmsgaXMgbGFyZ2VseSBjb21wbGV0ZWQuICBSZWFsdGltZS1mcmllbmRseSBSQ1UgY2FuIGJlCiAJZW5hYmxlZCB2aWEgdGhlIENPTkZJR19QUkVFTVBUX1JDVSBrZXJuZWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAJSG93ZXZlciwgd29yayBpcyBpbiBwcm9ncmVzcyBmb3IgZW5hYmxpbmcgcHJpb3JpdHkgYm9vc3Rpbmcgb2YKLQlwcmVlbXB0ZWQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy5UaGlzIGlzIG5lZWRlZCBpZiB5b3UKKwlwcmVlbXB0ZWQgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4gIFRoaXMgaXMgbmVlZGVkIGlmIHlvdQogCWhhdmUgQ1BVLWJvdW5kIHJlYWx0aW1lIHRocmVhZHMuCiAKIG8JV2hlcmUgY2FuIEkgZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIFJDVT8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3JjdWxpc3RfbnVsbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKaW5kZXggMjM5ZjU0Mi4uNjM4OWRlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1bGlzdF9udWxscy50eHQKQEAgLTIxLDcgKzIxLDcgQEAKICAgLyoKICAgICogQmVjYXVzZSBhIHdyaXRlciBjb3VsZCBkZWxldGUgb2JqZWN0LCBhbmQgYSB3cml0ZXIgY291bGQKICAgICogcmV1c2UgdGhlc2Ugb2JqZWN0IGJlZm9yZSB0aGUgUkNVIGdyYWNlIHBlcmlvZCwgd2UKLSAgICogbXVzdCBjaGVjayBrZXkgYWZ0ZXIgZ2V0aW5nIHRoZSByZWZlcmVuY2Ugb24gb2JqZWN0CisgICAqIG11c3QgY2hlY2sga2V5IGFmdGVyIGdldHRpbmcgdGhlIHJlZmVyZW5jZSBvbiBvYmplY3QKICAgICovCiAgIGlmIChvYmotPmtleSAhPSBrZXkpIHsgLy8gbm90IHRoZSBvYmplY3Qgd2UgZXhwZWN0ZWQKICAgICAgcHV0X3JlZihvYmopOwpAQCAtMTE3LDcgKzExNyw3IEBACiB0byBhbm90aGVyIGNoYWluKSBjaGVja2luZyB0aGUgZmluYWwgJ251bGxzJyB2YWx1ZSBpZgogdGhlIGxvb2t1cCBtZXQgdGhlIGVuZCBvZiBjaGFpbi4gSWYgZmluYWwgJ251bGxzJyB2YWx1ZQogaXMgbm90IHRoZSBzbG90IG51bWJlciwgdGhlbiB3ZSBtdXN0IHJlc3RhcnQgdGhlIGxvb2t1cCBhdAotdGhlIGJlZ2luaW5nLiBJZiB0aGUgb2JqZWN0IHdhcyBtb3ZlZCB0byBzYW1lIGNoYWluLAordGhlIGJlZ2lubmluZy4gSWYgdGhlIG9iamVjdCB3YXMgbW92ZWQgdG8gdGhlIHNhbWUgY2hhaW4sCiB0aGVuIHRoZSByZWFkZXIgZG9lc250IGNhcmUgOiBJdCBtaWdodCBldmVudHVhbGx5CiBzY2FuIHRoZSBsaXN0IGFnYWluIHdpdGhvdXQgaGFybS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmluZGV4IGY0ZjVlZTkuLjZlYjFhOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKQEAgLTMzMywxMiArMzMzLDIzIEBACiAKIFRvIG1vdW50IGEgY2dyb3VwIGhpZXJhcmNoeSB3aXRoIGp1c3QgdGhlIGNwdXNldCBhbmQgbnVtdGFza3MKIHN1YnN5c3RlbXMsIHR5cGU6Ci0jIG1vdW50IC10IGNncm91cCAtbyBjcHVzZXQsbnVtdGFza3MgaGllcjEgL2Rldi9jZ3JvdXAKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxtZW1vcnkgaGllcjEgL2Rldi9jZ3JvdXAKIAogVG8gY2hhbmdlIHRoZSBzZXQgb2Ygc3Vic3lzdGVtcyBib3VuZCB0byBhIG1vdW50ZWQgaGllcmFyY2h5LCBqdXN0CiByZW1vdW50IHdpdGggZGlmZmVyZW50IG9wdGlvbnM6CisjIG1vdW50IC1vIHJlbW91bnQsY3B1c2V0LG5zIGhpZXIxIC9kZXYvY2dyb3VwCiAKLSMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsbnMgIC9kZXYvY2dyb3VwCitOb3cgbWVtb3J5IGlzIHJlbW92ZWQgZnJvbSB0aGUgaGllcmFyY2h5IGFuZCBucyBpcyBhZGRlZC4KKworTm90ZSB0aGlzIHdpbGwgYWRkIG5zIHRvIHRoZSBoaWVyYXJjaHkgYnV0IHdvbid0IHJlbW92ZSBtZW1vcnkgb3IKK2NwdXNldCwgYmVjYXVzZSB0aGUgbmV3IG9wdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBvbGQgb25lczoKKyMgbW91bnQgLW8gcmVtb3VudCxucyAvZGV2L2Nncm91cAorCitUbyBTcGVjaWZ5IGEgaGllcmFyY2h5J3MgcmVsZWFzZV9hZ2VudDoKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxyZWxlYXNlX2FnZW50PSIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgXAorICB4eHggL2Rldi9jZ3JvdXAKKworTm90ZSB0aGF0IHNwZWNpZnlpbmcgJ3JlbGVhc2VfYWdlbnQnIG1vcmUgdGhhbiBvbmNlIHdpbGwgcmV0dXJuIGZhaWx1cmUuCiAKIE5vdGUgdGhhdCBjaGFuZ2luZyB0aGUgc2V0IG9mIHN1YnN5c3RlbXMgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkCiB3aGVuIHRoZSBoaWVyYXJjaHkgY29uc2lzdHMgb2YgYSBzaW5nbGUgKHJvb3QpIGNncm91cC4gU3VwcG9ydGluZwpAQCAtMzQ5LDYgKzM2MCwxMSBAQAogdHJlZSBvZiB0aGUgY2dyb3VwcyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9kZXYvY2dyb3VwCiBpcyB0aGUgY2dyb3VwIHRoYXQgaG9sZHMgdGhlIHdob2xlIHN5c3RlbS4KIAorSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiByZWxlYXNlX2FnZW50OgorIyBlY2hvICIvc2Jpbi9uZXdfcmVsZWFzZV9hZ2VudCIgPiAvZGV2L2Nncm91cC9yZWxlYXNlX2FnZW50CisKK0l0IGNhbiBhbHNvIGJlIGNoYW5nZWQgdmlhIHJlbW91bnQuCisKIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBjZ3JvdXAgdW5kZXIgL2Rldi9jZ3JvdXA6CiAjIGNkIC9kZXYvY2dyb3VwCiAjIG1rZGlyIG15X2Nncm91cApAQCAtNDc2LDExICs0OTIsMTMgQEAKIG5ld2x5LWNyZWF0ZWQgY2dyb3VwIGlmIGFuIGVycm9yIG9jY3VycyBhZnRlciB0aGlzIHN1YnN5c3RlbSdzCiBjcmVhdGUoKSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUgbmV3IGNncm91cCkuCiAKLXZvaWQgcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKK2ludCBwcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApOwogCiBDYWxsZWQgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb24gZWFjaCBzdWJzeXN0ZW0uIFRoaXMgbWF5CiBiZSB1c2VmdWwgZm9yIHN1YnN5c3RlbXMgd2hpY2ggaGF2ZSBzb21lIGV4dHJhIHJlZmVyZW5jZXMgZXZlbiBpZgotdGhlcmUgYXJlIG5vdCB0YXNrcyBpbiB0aGUgY2dyb3VwLgordGhlcmUgYXJlIG5vdCB0YXNrcyBpbiB0aGUgY2dyb3VwLiBJZiBwcmVfZGVzdHJveSgpIHJldHVybnMgZXJyb3IgY29kZSwKK3JtZGlyKCkgd2lsbCBmYWlsIHdpdGggaXQuIEZyb20gdGhpcyBiZWhhdmlvciwgcHJlX2Rlc3Ryb3koKSBjYW4gYmUKK2NhbGxlZCBtdWx0aXBsZSB0aW1lcyBhZ2FpbnN0IGEgY2dyb3VwLgogCiBpbnQgY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dAppbmRleCBhOTI2MzU5Li43MmRiODllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0CkBAIC0xLDUgKzEsNSBAQAogTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIoTWVtY2cpICBJbXBsZW1lbnRhdGlvbiBNZW1vLgotTGFzdCBVcGRhdGVkOiAyMDA5LzEvMTkKK0xhc3QgVXBkYXRlZDogMjAwOS8xLzIwCiBCYXNlIEtlcm5lbCBWZXJzaW9uOiBiYXNlZCBvbiAyLjYuMjktcmMyLgogCiBCZWNhdXNlIFZNIGlzIGdldHRpbmcgY29tcGxleCAob25lIG9mIHJlYXNvbnMgaXMgbWVtY2cuLi4pLCBtZW1jZydzIGJlaGF2aW9yCkBAIC0zNjAsMyArMzYwLDIxIEBACiAJIyBraWxsIG1hbGxvYyB0YXNrLgogCiAJT2YgY291cnNlLCB0bXBmcyB2LnMuIHN3YXBvZmYgdGVzdCBzaG91bGQgYmUgdGVzdGVkLCB0b28uCisKKyA5LjggT09NLUtpbGxlcgorCU91dC1vZi1tZW1vcnkgY2F1c2VkIGJ5IG1lbWNnJ3MgbGltaXQgd2lsbCBraWxsIHRhc2tzIHVuZGVyCisJdGhlIG1lbWNnLiBXaGVuIGhpZXJhcmNoeSBpcyB1c2VkLCBhIHRhc2sgdW5kZXIgaGllcmFyY2h5CisJd2lsbCBiZSBraWxsZWQgYnkgdGhlIGtlcm5lbC4KKwlJbiB0aGlzIGNhc2UsIHBhbmljX29uX29vbSBzaG91bGRuJ3QgYmUgaW52b2tlZCBhbmQgdGFza3MKKwlpbiBvdGhlciBncm91cHMgc2hvdWxkbid0IGJlIGtpbGxlZC4KKworCUl0J3Mgbm90IGRpZmZpY3VsdCB0byBjYXVzZSBPT00gdW5kZXIgbWVtY2cgYXMgZm9sbG93aW5nLgorCUNhc2UgQSkgd2hlbiB5b3UgY2FuIHN3YXBvZmYKKwkjc3dhcG9mZiAtYQorCSNlY2hvIDUwTSA+IC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKKwlydW4gNTFNIG9mIG1hbGxvYworCisJQ2FzZSBCKSB3aGVuIHlvdSB1c2UgbWVtK3N3YXAgbGltaXRhdGlvbi4KKwkjZWNobyA1ME0gPiBtZW1vcnkubGltaXRfaW5fYnl0ZXMKKwkjZWNobyA1ME0gPiBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMKKwlydW4gNTFNIG9mIG1hbGxvYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZSBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKaW5kZXggZjJlOTA4ZC4uMmYyMWVjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQorKysgYi9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCkBAIC0yNSw3ICsyNSw3IEBACiAJCSJ0ZGExMDA0NmxpZmV2aWV3IiwgImF2NzExMCIsICJkZWMyMDAwdCIsICJkZWMyNTQwdCIsCiAJCSJkZWMzMDAwcyIsICJ2cDcwNDEiLCAiZGlidXNiIiwgIm54dDIwMDIiLCAibnh0MjAwNCIsCiAJCSJvcjUxMjExIiwgIm9yNTExMzJfcWFtIiwgIm9yNTExMzJfdnNiIiwgImJsdWViaXJkIiwKLQkJIm9wZXJhMSIpOworCQkib3BlcmExIiwgImN4MjMxeHgiLCAiY3gxOCIsICJjeDIzODg1IiwgInB2cnVzYjIiICk7CiAKICMgQ2hlY2sgYXJncwogc3ludGF4KCkgaWYgKHNjYWxhcihAQVJHVikgIT0gMSk7CkBAIC0zNyw4ICszNyw4IEBACiAJJG91dGZpbGUgPSBldmFsKCRjaWQpOwogCWRpZSAkQCBpZiAkQDsKIAlwcmludCBTVERFUlIgPDxFT0Y7Ci1GaXJtd2FyZSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgotTm93IGNvcHkgaXQgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQorRmlybXdhcmUocykgJG91dGZpbGUgZXh0cmFjdGVkIHN1Y2Nlc3NmdWxseS4KK05vdyBjb3B5IGl0KHRoZXkpIHRvIGVpdGhlciAvdXNyL2xpYi9ob3RwbHVnL2Zpcm13YXJlIG9yIC9saWIvZmlybXdhcmUKIChkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvZiBmaXJtd2FyZSBob3RwbHVnKS4KIEVPRgogCWV4aXQoMCk7CkBAIC0zNDUsNiArMzQ1LDg1IEBACiAgICAgJGZ3ZmlsZTsKIH0KIAorc3ViIGN4MjMxeHggeworICAgIG15ICRmd2ZpbGUgPSAidjRsLWN4MjMxeHgtYXZjb3JlLTAxLmZ3IjsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvJGZ3ZmlsZSI7CisgICAgbXkgJGhhc2ggPSAiN2QzYmI5NTZkYzlkZjBlYWZkZWQyYjU2YmE1N2NjNDIiOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgd2dldGZpbGUoJGZ3ZmlsZSwgJHVybCk7CisgICAgdmVyaWZ5KCRmd2ZpbGUsICRoYXNoKTsKKworICAgICRmd2ZpbGU7Cit9CisKK3N1YiBjeDE4IHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjM0MTgtYXB1LmZ3JyA9PiAnNTg4ZjA4MWI1NjJmNWM2NTNhM2RiMWFkOGY2NTkzOWEnLAorCSd2NGwtY3gyMzQxOC1jcHUuZncnID0+ICdiNmM3ZWQ2NGJjNDRiMWE2ZTA4NDBhZGFlYWMzOWQ3OScsCisJJ3Y0bC1jeDIzNDE4LWRpZy5mdycgPT4gJzk1YmM2ODhkM2U3NTk5ZmQ1ODAwMTYxZTk5NzFjYzU1JywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKK3N1YiBjeDIzODg1IHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjM4ODUtYXZjb3JlLTAxLmZ3JyA9PiAnYTlmOGY1ZDkwMWE3ZmI0MmY1NTJlMWVlNjM4NGYzYmInLAorCSd2NGwtY3gyMzg4NS1lbmMuZncnICAgICAgID0+ICdhOWY4ZjVkOTAxYTdmYjQyZjU1MmUxZWU2Mzg0ZjNiYicsCisgICAgKTsKKworICAgIGNoZWNrc3RhbmRhcmQoKTsKKworICAgIG15ICRhbGxmaWxlczsKKyAgICBmb3JlYWNoIG15ICRmd2ZpbGUgKGtleXMgJWZpbGVzKSB7CisJd2dldGZpbGUoJGZ3ZmlsZSwgIiR1cmwvJGZ3ZmlsZSIpOworCXZlcmlmeSgkZndmaWxlLCAkZmlsZXN7JGZ3ZmlsZX0pOworCSRhbGxmaWxlcyAuPSAiICRmd2ZpbGUiOworICAgIH0KKworICAgICRhbGxmaWxlcyA9fiBzL15ccy8vOworCisgICAgJGFsbGZpbGVzOworfQorCitzdWIgcHZydXNiMiB7CisgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyI7CisKKyAgICBteSAlZmlsZXMgPSAoCisJJ3Y0bC1jeDI1ODQwLmZ3JyAgICAgICAgICAgPT4gJ2RhZGI3OWU5OTA0ZmM4YWY5NmU4MTExZDljYjU5MzIwJywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKIHN1YiBvcjUxMTMyX3FhbSB7CiAgICAgbXkgJGZ3ZmlsZSA9ICJkdmItZmUtb3I1MTEzMi1xYW0uZnciOwogICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2ZiLzAwLUlOREVYCmluZGV4IGNhYWJiZDMuLmE2MThmZDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmIvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWApAQCAtMTEsOCArMTEsNiBAQAogCS0gaW5mbyBvbiB0aGUgQVRJIFJhZ2UxMjggZnJhbWUgYnVmZmVyIGRyaXZlci4KIGNpcnJ1c2ZiLnR4dAogCS0gaW5mbyBvbiB0aGUgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgY2hpcHNldHMuCi1jeWJsYWZiLwotCS0gZGlyZWN0b3J5IHdpdGggZG9jdW1lbnRhdGlvbiBmaWxlcyByZWxhdGVkIHRvIHRoZSBjeWJsYWZiIGRyaXZlci4KIGRlZmVycmVkX2lvLnR4dAogCS0gYW4gaW50cm9kdWN0aW9uIHRvIGRlZmVycmVkIElPLgogZmJjb24udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvYnVncyBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9idWdzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDQzYTZkLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9idWdzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotQnVncwotPT09PQotCi1JIGN1cnJlbnRseSBkb24ndCBrbm93IG9mIGFueSBidWcuIFBsZWFzZSBkbyBzZW5kIHJlcG9ydHMgdG86Ci0gLSBsaW51eC1mYmRldi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLSAtIEtudXRfUGV0ZXJzZW5AdC1vbmxpbmUuZGUuCi0KLQotVW50ZXN0ZWQgZmVhdHVyZXMKLT09PT09PT09PT09PT09PT09Ci0KLUFsbCBMQ0Qgc3R1ZmYgaXMgdW50ZXN0ZWQuIElmIGl0IHdvcmtlZCBpbiB0cmlkZW50ZmIsIGl0IHNob3VsZCB3b3JrIGluCi1jeWJsYWZiLiBQbGVhc2UgdGVzdCBhbmQgcmVwb3J0IHRoZSByZXN1bHRzIHRvIEtudXRfUGV0ZXJzZW5AdC1vbmxpbmUuZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvY3JlZGl0cyBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9jcmVkaXRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWIzYjQ0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9jcmVkaXRzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1UaGFua3MgdG8KLT09PT09PT09PQotICAgKiAJQWxhbiBIb3VyaWhhbmUsIGZvciB3cml0aW5nIHRoZSBYIHRyaWRlbnQgZHJpdmVyCi0gICAqCUphbmkgTW9ub3NlcywgZm9yIHdyaXRpbmcgdGhlIHRyaWRlbnRmYiBkcml2ZXIKLSAgICoJQW50b25pbm8gQS4gRGFwbGFzLCBmb3IgcmV2aWV3IG9mIHRoZSBmaXJzdCBwdWJsaXNoZWQKLQl2ZXJzaW9uIG9mIGN5YmxhZmIgYW5kIHNvbWUgY29kZQotICAgKglKb2NoZW4gSGVpbiwgZm9yIHRlc3RpbmcgYW5kIGEgaGVscGZ1bGwgYnVnIHJlcG9ydApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2RvY3VtZW50YXRpb24gYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvZG9jdW1lbnRhdGlvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIxYWFjMC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvZG9jdW1lbnRhdGlvbgorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLUF2YWlsYWJsZSBEb2N1bWVudGF0aW9uCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1BcG9sbG8gUExFIDEzMyBDaGlwc2V0IFZUODYwMUEgTm9ydGggQnJpZGdlIERhdGFzaGVldCwgUmV2LiAxLjgyLCBPY3RvYmVyIDIyLAotMjAwMSwgYXZhaWxhYmxlIGZyb20gVklBOgotCi0JaHR0cDovL3d3dy52aWF2cHNkLmNvbS9wcm9kdWN0LzYvMTUvRFM4NjAxQTE4Mi5wZGYKLQotVGhlIGRhdGFzaGVldCBpcyBpbmNvbXBsZXRlLCBzb21lIHJlZ2lzdGVycyB0aGF0IG5lZWQgdG8gYmUgcHJvZ3JhbW1lZCBhcmUgbm90Ci1leHBsYWluZWQgYXQgYWxsIGFuZCBpbXBvcnRhbnQgYml0cyBhcmUgbGlzdGVkIGFzICJyZXNlcnZlZCIuIEJ1dCB5b3UgcmVhbGx5Ci1uZWVkIHRoZSBkYXRhc2hlZXQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZS4gICJwLiB4eHgiIGNvbW1lbnRzIHJlZmVyIHRvIHBhZ2UKLW51bWJlcnMgb2YgdGhpcyBkb2N1bWVudC4KLQotWEZyZWUvWE9yZyBkcml2ZXJzIGFyZSBhdmFpbGFibGUgYW5kIG9mIGdvb2QgcXVhbGl0eSwgbG9va2luZyBhdCB0aGUgY29kZQotdGhlcmUgaXMgYSBnb29kIGlkZWEgaWYgdGhlIGRhdGFzaGVldCBkb2VzIG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbgotb3IgaWYgdGhlIGRhdGFzaGVldCBzZWVtcyB0byBiZSB3cm9uZy4KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2ZiLm1vZGVzIGIvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2ZiLm1vZGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTBlNTIyLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9mYi5tb2RlcworKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0jCi0jICAgU2FtcGxlIGZiLm1vZGVzIGZpbGUKLSMKLSMJUHJvdmlkZXMgYW4gaW5jb21wbGV0ZSBsaXN0IG9mIHdvcmtpbmcgbW9kZXMgZm9yCi0jCXRoZSBjeWJlcmJsYWRlL2kxIGdyYXBoaWNzIGNvcmUuCi0jCi0jCVRoZSB2YWx1ZSA0Mjk0OTY3MjU2IGlzIHVzZWQgaW5zdGVhZCBvZiAtNDAuIE9mIGNvdXJzZSwgLTQwIGlzIG5vdAotIwlhIHJlYWxseSByZWFzb25hYmxlIHZhbHVlLCBidXQgY2hpcCBkZXNpZ24gZG9lcyBub3QgYWx3YXlzIGZvbGxvdwotIwlsb2dpYy4gQmVsaWV2ZSBtZSwgaXQncyBvaywgYW5kIGl0J3MgdGhlIHdheSB0aGUgQklPUyBkb2VzIGl0LgotIwotIwlmYnNldCByZXF1aXJlcyA0Mjk0OTY3MjU2IGluIGZiLm1vZGVzIGFuZCAtNDAgYXMgYW4gYXJndW1lbnQgdG8KLSMJdGhlIC10IHBhcmFtZXRlci4gVGhhdCdzIGFsc28gbm90IHRvbyByZWFzb25hYmxlLCBhbmQgaXQgbWlnaHQgY2hhbmdlCi0jCWluIHRoZSBmdXR1cmUgb3IgbWlnaHQgZXZlbiBiZSBkaWZmZXJ0IGZvciB5b3VyIGN1cnJlbnQgdmVyc2lvbi4KLSMKLQotbW9kZSAiNjQweDQ4MC01MCIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyA0NzYxOSA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC02MCIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAzOTY4MiA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC03MCIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAzNDAxMyA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC03MiIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAzMzA2OCA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC03NSIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAzMTc0NiA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC04MCIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAyOTc2MSA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiNjQweDQ4MC04NSIKLSAgICBnZW9tZXRyeSA2NDAgNDgwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAyODAxMSA0Mjk0OTY3MjU2IDI0IDE3IDAgMjE2IDMKLWVuZG1vZGUKLQotbW9kZSAiODAweDYwMC01MCIKLSAgICBnZW9tZXRyeSA4MDAgNjAwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAzMDMwMyA5NiAyNCAxNCAwIDEzNiAxMQotZW5kbW9kZQotCi1tb2RlICI4MDB4NjAwLTYwIgotICAgIGdlb21ldHJ5IDgwMCA2MDAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDI1MjUyIDk2IDI0IDE0IDAgMTM2IDExCi1lbmRtb2RlCi0KLW1vZGUgIjgwMHg2MDAtNzAiCi0gICAgZ2VvbWV0cnkgODAwIDYwMCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMjE2NDUgOTYgMjQgMTQgMCAxMzYgMTEKLWVuZG1vZGUKLQotbW9kZSAiODAweDYwMC03MiIKLSAgICBnZW9tZXRyeSA4MDAgNjAwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAyMTA0MyA5NiAyNCAxNCAwIDEzNiAxMQotZW5kbW9kZQotCi1tb2RlICI4MDB4NjAwLTc1IgotICAgIGdlb21ldHJ5IDgwMCA2MDAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDIwMjAyIDk2IDI0IDE0IDAgMTM2IDExCi1lbmRtb2RlCi0KLW1vZGUgIjgwMHg2MDAtODAiCi0gICAgZ2VvbWV0cnkgODAwIDYwMCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTg5MzkgOTYgMjQgMTQgMCAxMzYgMTEKLWVuZG1vZGUKLQotbW9kZSAiODAweDYwMC04NSIKLSAgICBnZW9tZXRyeSA4MDAgNjAwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxNzgyNSA5NiAyNCAxNCAwIDEzNiAxMQotZW5kbW9kZQotCi1tb2RlICIxMDI0eDc2OC01MCIKLSAgICBnZW9tZXRyeSAxMDI0IDc2OCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTkwNTQgMTQ0IDI0IDI5IDAgMTIwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTAyNHg3NjgtNjAiCi0gICAgZ2VvbWV0cnkgMTAyNCA3NjggMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDE1ODgwIDE0NCAyNCAyOSAwIDEyMCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEwMjR4NzY4LTcwIgotICAgIGdlb21ldHJ5IDEwMjQgNzY4IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxMzYxMCAxNDQgMjQgMjkgMCAxMjAgMwotZW5kbW9kZQotCi1tb2RlICIxMDI0eDc2OC03MiIKLSAgICBnZW9tZXRyeSAxMDI0IDc2OCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTMyMzIgMTQ0IDI0IDI5IDAgMTIwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTAyNHg3NjgtNzUiCi0gICAgZ2VvbWV0cnkgMTAyNCA3NjggMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDEyNzAzIDE0NCAyNCAyOSAwIDEyMCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEwMjR4NzY4LTgwIgotICAgIGdlb21ldHJ5IDEwMjQgNzY4IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxMTkxMCAxNDQgMjQgMjkgMCAxMjAgMwotZW5kbW9kZQotCi1tb2RlICIxMDI0eDc2OC04NSIKLSAgICBnZW9tZXRyeSAxMDI0IDc2OCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTEyMDkgMTQ0IDI0IDI5IDAgMTIwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTI4MHgxMDI0LTUwIgotICAgIGdlb21ldHJ5IDEyODAgMTAyNCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTExMTQgMjMyIDE2IDM5IDAgMTYwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTI4MHgxMDI0LTYwIgotICAgIGdlb21ldHJ5IDEyODAgMTAyNCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgOTI2MiAyMzIgMTYgMzkgMCAxNjAgMwotZW5kbW9kZQotCi1tb2RlICIxMjgweDEwMjQtNzAiCi0gICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyA3OTM5IDIzMiAxNiAzOSAwIDE2MCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEyODB4MTAyNC03MiIKLSAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDc3MTkgMjMyIDE2IDM5IDAgMTYwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTI4MHgxMDI0LTc1IgotICAgIGdlb21ldHJ5IDEyODAgMTAyNCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgNzQxMCAyMzIgMTYgMzkgMCAxNjAgMwotZW5kbW9kZQotCi1tb2RlICIxMjgweDEwMjQtODAiCi0gICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyA2OTQ2IDIzMiAxNiAzOSAwIDE2MCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEyODB4MTAyNC04NSIKLSAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDY1MzggMjMyIDE2IDM5IDAgMTYwIDMKLWVuZG1vZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9wZXJmb3JtYW5jZSBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9wZXJmb3JtYW5jZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxNWQ1ZC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvcGVyZm9ybWFuY2UKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi1TcGVlZAotPT09PT0KLQotQ3lCbGFGQiBpcyBtdWNoIGZhc3RlciB0aGFuIHRyaWRlbnRmYiBhbmQgdmVzYWZiLiBDb21wYXJlIHRoZSBwZXJmb3JtYW5jZSBkYXRhCi1mb3IgbW9kZSAxMjgweDEwMjQtWzgsMTYsMzJdQDYxIEh6LgotCi1UZXN0IDE6IENhdCBhIGZpbGUgd2l0aCAyMDAwIGxpbmVzIG9mIDAgY2hhcmFjdGVycy4KLVRlc3QgMjogQ2F0IGEgZmlsZSB3aXRoIDIwMDAgbGluZXMgb2YgODAgY2hhcmFjdGVycy4KLVRlc3QgMzogQ2F0IGEgZmlsZSB3aXRoIDIwMDAgbGluZXMgb2YgMTYwIGNoYXJhY3RlcnMuCi0KLUFsbCB2YWx1ZXMgc2hvdyBzeXN0ZW0gdGltZSB1c2UgaW4gc2Vjb25kcywga2VybmVsIDIuNi4xMiB3YXMgdXNlZCBmb3IKLXRoZSBtZWFzdXJlbWVudHMuIDIuNi4xMyBpcyBhIGJpdCBzbG93ZXIsIDIuNi4xNCBob3BlZnVsbHkgd2lsbCBpbmNsdWRlIGEKLXBhdGNoIHRoYXQgc3BlZWRzIHVwIGtlcm5lbCBiaXRibGl0dGluZyBhIGxvdCAoID4gMjAlKS4KLQotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfAkgICAgfAkJCW5vdCBhY2NlbGVyYXRlZCAJCSAgfAotfCBUUklERU5URkIgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotfCBvZiAyLjYuMTIgfAkgICA4IGJwcCAgICAgIHwgICAgIDE2IGJwcAl8ICAgICAzMiBicHAJICB8Ci18CSAgICB8IG5veXBhbiB8CSB5cGFuIHwgbm95cGFuIHwgICB5cGFuIHwgbm95cGFuIHwgICB5cGFuIHwKLSstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKLXwgICAgVGVzdCAxIHwJNC4zMSB8CSA0LjMzIHwgICA2LjA1IHwgIDEyLjgxIHwgIC0tLS0gIHwgIC0tLS0gIHwKLXwgICAgVGVzdCAyIHwgIDY3Ljk0IHwJIDUuNDQgfCAxMjMuMTYgfCAgMTQuNzkgfCAgLS0tLSAgfCAgLS0tLSAgfAotfCAgICBUZXN0IDMgfCAxMzEuMzYgfAkgNi41NSB8IDI0MC4xMiB8ICAxNi43NiB8ICAtLS0tICB8ICAtLS0tICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICBDb21tZW50cyB8CQkgICAgICB8IAkJfCBjb21wbGV0ZWx5IGJyby0gfAotfAkgICAgfAkJICAgICAgfCAJCXwga2VuLCBtb25pdG9yCSAgfAotfAkgICAgfAkJICAgICAgfCAJCXwgc3dpdGNoZXMgb2ZmCSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0KLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwJICAgIHwJCQkgIGFjY2VsZXJhdGVkCQkJICB8Ci18IFRSSURFTlRGQiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi18IG9mIDIuNi4xMiB8CSAgIDggYnBwICAgICAgfCAgICAgMTYgYnBwCXwgICAgIDMyIGJwcAkgIHwKLXwJICAgIHwgbm95cGFuIHwJIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgICBUZXN0IDEgfCAgLS0tLSAgfAktLS0tICB8ICAyMC42MiB8ICAgMS4yMiB8ICAtLS0tICB8ICAtLS0tICB8Ci18ICAgIFRlc3QgMiB8ICAtLS0tICB8CS0tLS0gIHwgIDIyLjYxIHwgICAzLjE5IHwgIC0tLS0gIHwgIC0tLS0gIHwKLXwgICAgVGVzdCAzIHwgIC0tLS0gIHwJLS0tLSAgfCAgMjQuNTkgfCAgIDUuMTYgfCAgLS0tLSAgfCAgLS0tLSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgQ29tbWVudHMgfCBicm9rZW4sIHdyaXRpbmcgfCBicm9rZW4sIG9rIG9ubHkgfCBjb21wbGV0ZWx5IGJyby0gfAotfAkgICAgfCB0byB3cm9uZyBwbGFjZXMgfCBpZiBiZ2NvbG9yIGlzCXwga2VuLCBtb25pdG9yCSAgfAotfAkgICAgfCBvbiBzY3JlZW4gKyBidWcgfCBibGFjaywgYnVnIGluCXwgc3dpdGNoZXMgb2ZmCSAgfAotfAkgICAgfCBpbiBmaWxscmVjdCgpICAgfCBmaWxscmVjdCgpCXwJCSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0KLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwJICAgIHwJCQlub3QgYWNjZWxlcmF0ZWQgCQkgIHwKLXwgICBWRVNBRkIgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLXwgb2YgMi42LjEyIHwJICAgOCBicHAgICAgICB8ICAgICAxNiBicHAJfCAgICAgMzIgYnBwCSAgfAotfAkgICAgfCBub3lwYW4gfAkgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICAgIFRlc3QgMSB8CTQuMjYgfAkgMy43NiB8ICAgNS45OSB8ICAgNy4yMyB8ICAtLS0tICB8ICAtLS0tICB8Ci18ICAgIFRlc3QgMiB8ICA2NS42NSB8CSA0Ljg5IHwgMTIwLjg4IHwgICA5LjA4IHwgIC0tLS0gIHwgIC0tLS0gIHwKLXwgICAgVGVzdCAzIHwgMTI2LjkxIHwJIDUuOTQgfCAyMzUuNzcgfCAgMTEuMDMgfCAgLS0tLSAgfCAgLS0tLSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgQ29tbWVudHMgfCB2Z2E9MHgzMDcgICAgICAgfCB2Z2E9MHgzMWEJfCB2Z2E9MHgzMWIgbm90ICAgfAotfAkgICAgfCBmaD04MGtIegkgICAgICB8IGZoPTgwa0h6CXwgc3VwcG9ydGVkIGJ5CSAgfAotfAkgICAgfCBmdj03NWtIegkgICAgICB8IGZ2PTc1a0h6CXwgdmlkZW8gQklPUyBhbmQgIHwKLXwJICAgIHwJCSAgICAgIHwgCQl8IGhhcmR3YXJlCSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotCi0KLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwJICAgIHwJCQkgIGFjY2VsZXJhdGVkCQkJICB8Ci18ICBDWUJMQUZCICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi18CSAgICB8CSAgIDggYnBwICAgICAgfCAgICAgMTYgYnBwCXwgICAgIDMyIGJwcAkgIHwKLXwJICAgIHwgbm95cGFuIHwJIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgICBUZXN0IDEgfAk4LjAyIHwJIDAuMjMgfCAgMTkuMDQgfCAgIDAuNjEgfCAgNTcuMTIgfCAgIDIuNzQgfAotfCAgICBUZXN0IDIgfAk4LjM4IHwJIDAuNTUgfCAgMTkuMzkgfCAgIDAuOTIgfCAgNTcuNTQgfCAgIDMuMTMgfAotfCAgICBUZXN0IDMgfAk4LjczIHwJIDAuODYgfCAgMTkuNzQgfCAgIDEuMjQgfCAgNTcuOTUgfCAgIDMuNTEgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgQ29tbWVudHMgfAkJICAgICAgfCAJCXwJCSAgfAotfAkgICAgfAkJICAgICAgfCAJCXwJCSAgfAotfAkgICAgfAkJICAgICAgfCAJCXwJCSAgfAotfAkgICAgfAkJICAgICAgfCAJCXwJCSAgfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3RvZG8gYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdG9kbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmNmQwZS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdG9kbworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLVRPRE8gLyBNaXNzaW5nIGZlYXR1cmVzCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1WZXJpZnkgTENEIHN0dWZmCQkic3RyZXRjaCIgYW5kICJjZW50ZXIiIG9wdGlvbnMgYXJlCi0JCQkJY29tcGxldGVseSB1bnRlc3RlZCAuLi4gdGhpcyBjb2RlIG5lZWRzIHRvIGJlCi0JCQkJdmVyaWZpZWQuIEFzIEkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gc3VjaAotCQkJCWhhcmR3YXJlLCBwbGVhc2UgY29udGFjdCBtZSBpZiB5b3UgYXJlCi0JCQkJd2lsbGluZyBydW4gc29tZSB0ZXN0cy4KLQotSW50ZXJsYWNlZCB2aWRlbyBtb2RlcwkJVGhlIHJlYXNvbiB0aGF0IGludGVybGVhdmVkCi0JCQkJbW9kZXMgYXJlIGRpc2FibGVkIGlzIHRoYXQgSSBkbyBub3Qga25vdwotCQkJCXRoZSBtZWFuaW5nIG9mIHRoZSB2ZXJ0aWNhbCBpbnRlcmxhY2UKLQkJCQlwYXJhbWV0ZXIuIEFsc28gdGhlIGRhdGFzaGVldCBtZW50aW9ucyBhCi0JCQkJYml0IGQ4IG9mIGEgaG9yaXpvbnRhbCBpbnRlcmxhY2UgcGFyYW1ldGVyLAotCQkJCWJ1dCBub3doZXJlIHRoZSBsb3dlciA4IGJpdHMuIFBsZWFzZSBoZWxwCi0JCQkJaWYgeW91IGNhbi4KLQotbG93LXJlcyBkb3VibGUgc2NhbiBtb2RlcwlXaG8gbmVlZHMgaXQ/Ci0KLWFjY2VsZXJhdGVkIGNvbG9yIGJsaXR0aW5nCVdobyBuZWVkcyBpdD8gVGhlIGNvbnNvbGUgZHJpdmVyIGRvZXMgdXNlIGNvbG9yCi0JCQkJYmxpdHRpbmcgZm9yIG5vdGhpbmcgYnV0IGRyYXdpbmcgdGhlIHBlbmd1aW5lLAotCQkJCWV2ZXJ5dGhpbmcgZWxzZSBpcyBkb25lIHVzaW5nIGNvbG9yIGV4cGFuZGluZwotCQkJCWJsaXR0aW5nIG9mIDFicHAgY2hhcmFjdGVyIGJpdG1hcHMuCi0KLWlvY3RscwkJCQlXaG8gbmVlZHMgaXQ/Ci0KLVRWLW91dAkJCQlXaWxsIGJlIGRvbmUgbGF0ZXIuIFVzZSAidmdhPSAiIGF0IGJvb3QgdGltZQotCQkJCXRvIHNldCBhIHN1aXRhYmxlIHZpZGVvIG1vZGUuCi0KLT8/PwkJCQlGZWVsIGZyZWUgdG8gY29udGFjdCBtZSBpZiB5b3UgaGF2ZSBhbnkKLQkJCQlmZWF0dXJlIHJlcXVlc3RzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdXNhZ2UgYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdXNhZ2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzOWJiM2QuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3VzYWdlCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLUN5QmxhRkIgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBDeWJlcmJsYWRlL2kxIGdyYXBoaWNzIGNvcmUgaW50ZWdyYXRlZAotaW50byB0aGUgVklBIEFwb2xsbyBQTEUxMzMgKGFrYSB2dDg2MDEpIHNvdXRoIGJyaWRnZS4gSXQgaXMgZGV2ZWxvcGVkIGFuZAotdGVzdGVkIHVzaW5nIGEgVklBIEVQSUEgNTAwMCBib2FyZC4KLQotQ3libGFmYiAtIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBvciBhcyBhIG1vZHVsZT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVlvdSBtaWdodCBjb21waWxlIGN5YmxhZmIgZWl0aGVyIGFzIGEgbW9kdWxlIG9yIGNvbXBpbGUgaXQgcGVybWFuZW50bHkgaW50byB0aGUKLWtlcm5lbC4KLQotVW5sZXNzIHlvdSBoYXZlIGEgcmVhbCByZWFzb24gdG8gZG8gc28geW91IHNob3VsZCBub3QgY29tcGlsZSBib3RoIHZlc2FmYiBhbmQKLWN5YmxhZmIgcGVybWFuZW50bHkgaW50byB0aGUga2VybmVsLiBJdCdzIHBvc3NpYmxlIGFuZCBpdCBoZWxwcyBkdXJpbmcgdGhlCi1kZXZlbG9wZW1lbnQgY3ljbGUsIGJ1dCBpdCdzIHVzZWxlc3MgYW5kIHdpbGwgYXQgbGVhc3QgYmxvY2sgc29tZSBvdGhlcndpc2UKLXVzZWZ1bGwgbWVtb3J5IGZvciBvcmRpbmFyeSB1c2Vycy4KLQotU2VsZWN0aW5nIE1vZGVzCi09PT09PT09PT09PT09PT0KLQotCVN0YXJ0dXAgTW9kZQotCT09PT09PT09PT09PQotCi0JRmlyc3Qgb2YgYWxsLCB5b3UgbWlnaHQgdXNlIHRoZSAidmdhPT8/PyIgYm9vdCBwYXJhbWV0ZXIgYXMgaXQgaXMKLQlkb2N1bWVudGVkIGluIHZlc2FmYi50eHQgYW5kIHN2Z2EudHh0LiBDeWJsYWZiIHdpbGwgZGV0ZWN0IHRoZSB2aWRlbwotCW1vZGUgc2VsZWN0ZWQgYW5kIHdpbGwgdXNlIHRoZSBnZW9tZXRyeSBhbmQgdGltaW5ncyBmb3VuZCBieQotCWluc3BlY3RpbmcgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4KLQotCQl2aWRlbz1jeWJsYWZiIHZnYT0weDMxNwotCi0JQWx0ZXJuYXRpdmVseSB5b3UgbWlnaHQgdXNlIGEgY29tYmluYXRpb24gb2YgdGhlIG1vZGUsIHJlZiBhbmQgYnBwCi0JcGFyYW1ldGVycy4gSWYgeW91IGNvbXBpbGVkIHRoZSBkcml2ZXIgaW50byB0aGUga2VybmVsLCBhZGQgc29tZXRoaW5nCi0JbGlrZSB0aGlzIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lOgotCi0JCXZpZGVvPWN5YmxhZmI6MTI4MHgxMDI0LGJwcD0xNixyZWY9NTAgLi4uCi0KLQlJZiB5b3UgY29tcGlsZWQgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgdGhlIHNhbWUgbW9kZSB3b3VsZCBiZQotCXNlbGVjdGVkIGJ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLQotCQltb2Rwcm9iZSBjeWJsYWZiIG1vZGU9MTI4MHgxMDI0IGJwcD0xNiByZWY9NTAgLi4uCi0KLQlOb25lIG9mIHRoZSBtb2RlcyBwb3NzaWJsZSB0byBzZWxlY3QgYXMgc3RhcnR1cCBtb2RlcyBhcmUgYWZmZWN0ZWQgYnkKLQl0aGUgcHJvYmxlbXMgZGVzY3JpYmVkIGF0IHRoZSBlbmQgb2YgdGhlIG5leHQgc3Vic2VjdGlvbi4KLQotCUZvciBhbGwgc3RhcnR1cCBtb2RlcyBjeWJsYWZiIGNob29zZXMgYSB2aXJ0dWFsIHggcmVzb2x1dGlvbiBvZiAyMDQ4LAotCXRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBtb2RlIDEyODB4MTAyNCBpbiBjb21iaW5hdGlvbiB3aXRoIDMyIGJwcC4gVGhpcwotCWFsbG93cyB5d3JhcCBzY3JvbGxpbmcgZm9yIGFsbCB0aG9zZSBtb2RlcyBpZiByb3RhdGlvbiBpcyAwIG9yIDIsIGFuZAotCWFsc28gZmFzdCBzY3JvbGxpbmcgaWYgcm90YXRpb24gaXMgMSBvciAzLiBUaGUgZGVmYXVsdCB2aXJ0dWFsIHkgcmVzby0KLQlsdXRpb24gaXMgNDA5NiBmb3IgYnBwID09IDgsIDIwNDggZm9yIGJwcD09MTYgYW5kIDEwMjQgZm9yIGJwcCA9PSAzMiwKLQlhZ2FpbiB3aXRoIHRoZSBvbmx5IGV4Y2VwdGlvbiBvZiAxMjgweDEwMjQgYXQgMzIgYnBwLgotCi0JUGxlYXNlIGRvIHNldCB5b3VyIHZpZGVvIG1lbW9yeSBzaXplIHRvIDggTWIgaW4gdGhlIEJpb3Mgc2V0dXAuIE90aGVyCi0JdmFsdWVzIHdpbGwgd29yaywgYnV0IHBlcmZvcm1hY2UgaXMgZGVjcmVhc2VkIGZvciBhIGxvdCBvZiBtb2Rlcy4KLQotCU1vZGUgY2hhbmdlcyB1c2luZyBmYnNldAotCT09PT09PT09PT09PT09PT09PT09PT09PQotCi0JWW91IG1pZ2h0IHVzZSBmYnNldCB0byBjaGFuZ2UgdGhlIHZpZGVvIG1vZGUsIHNlZSAibWFuIGZic2V0Ii4gQ3libGFmYgotCWdlbmVyYWxseSBkb2VzIGFzc3VtZSB0aGF0IHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4gQnV0IGl0IGRvZXMKLQlzb21lIGNoZWNrcywgZXNwZWNpYWxseSB0aG9zZSB0aGF0IGFyZSBuZWVkZWQgdG8gcHJldmVudCB5b3UgZnJvbQotCWRhbWFnaW5nIHlvdXIgaGFyZHdhcmUuCi0KLQkJLSBvbmx5IDgsIDE2LCAyNCBhbmQgMzIgYnBwIHZpZGVvIG1vZGVzIGFyZSBhY2NlcHRlZAotCQktIGludGVybGFjZWQgdmlkZW8gbW9kZXMgYXJlIG5vdCBhY2NlcHRlZAotCQktIGRvdWJsZSBzY2FuIHZpZGVvIG1vZGVzIGFyZSBub3QgYWNjZXB0ZWQKLQkJLSBpZiBhIGZsYXQgcGFuZWwgaXMgZm91bmQsIGN5YmxhZmIgZG9lcyBub3QgYWxsb3cgeW91Ci0JCSAgdG8gcHJvZ3JhbSBhIHJlc29sdXRpb24gaGlnaGVyIHRoYW4gdGhlIHBoeXNpY2FsCi0JCSAgcmVzb2x1dGlvbiBvZiB0aGUgZmxhdCBwYW5lbCBtb25pdG9yCi0JCS0gY3libGFmYiBkb2VzIG5vdCBhbGxvdyB2Y2xrIHRvIGV4Y2VlZCAyMzAgTUh6LiBBcyAzMiBicHAKLQkJICBhbmQgKGN1cnJlbnRseSkgMjQgYml0IG1vZGVzIHVzZSBhIGRvdWJsZWQgdmNsayBpbnRlcm5hbGx5LAotCQkgIHRoZSBkb3RjbG9jayBsaW1pdCBhcyBzZWVuIGJ5IGZic2V0IGlzIDExNSBNSHogZm9yIHRob3NlCi0JCSAgbW9kZXMgYW5kIDIzMCBNSHogZm9yIDggYW5kIDE2IGJwcCBtb2Rlcy4KLQkJLSBjeWJsYWZiIHdpbGwgYWxsb3cgeW91IHRvIHNlbGVjdCB2ZXJ5IGhpZ2ggcmVzb2x1dGlvbnMgYXMKLQkJICBsb25nIGFzIHRoZSBoYXJkd2FyZSBjYW4gYmUgcHJvZ3JhbW1lZCB0byB0aGVzZSBtb2Rlcy4gVGhlCi0JCSAgZG9jdW1lbnRlZCBsaW1pdCAxNjAweDEyMDAgaXMgbm90IGVuZm9yY2VkLCBidXQgZG9uJ3QgZXhwZWN0Ci0JCSAgcGVyZmVjdCBzaWduYWwgcXVhbGl0eS4KLQotCUFueSByZXF1ZXN0IHRoYXQgdmlvbGF0ZXMgdGhlIHJ1bGVzIGdpdmVuIGFib3ZlIHdpbGwgYmUgZWl0aGVyIGNoYW5nZWQKLQl0byBzb21ldGhpbmcgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIG9yIGFuIGVycm9yIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuCi0KLQlJZiB5b3UgcHJvZ3JhbSBhIHZpcnR1YWwgeSByZXNvbHV0aW9uIGhpZ2hlciB0aGFuIHRoZSBoYXJkd2FyZSBsaW1pdCwKLQljeWJsYWZiIHdpbGwgc2lsZW50bHkgZGVjcmVhc2UgdGhhdCB2YWx1ZSB0byB0aGUgaGlnaGVzdCBwb3NzaWJsZQotCXZhbHVlLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBhIHZpcnR1YWwgeCByZXNvbHV0aW9uIHRoYXQgaXMgbm90Ci0Jc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gQ3libGFmYiB0cmllcyB0byBhZGFwdCB2eXJlcyBmaXJzdCBiZWNhdXNlCi0JdnhyZXMgZGVjaWRlcyBpZiB5d3JhcCBzY3JvbGxpbmcgaXMgcG9zc2libGUgb3Igbm90LgotCi0JQXR0ZW1wdHMgdG8gZGlzYWJsZSBhY2NlbGVyYXRpb24gYXJlIGlnbm9yZWQsIEkgYmVsaWV2ZSB0aGF0IHRoaXMgaXMKLQlzYWZlLgotCi0JU29tZSB2aWRlbyBtb2RlcyB0aGF0IHNob3VsZCB3b3JrIGRvIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBJZiB5b3UgdXNlCi0JdGhlIHN0YW5kYXJkIGZiLm1vZGVzLCBmYnNldCA2NDB4NDgwLTYwIHdpbGwgcHJvZ3JhbSB0aGF0IG1vZGUsIGJ1dAotCXlvdSB3aWxsIHNlZSBhIHZlcnRpY2FsIGFyZWEsIGFib3V0IHR3byBjaGFyYWN0ZXJzIHdpZGUsIHdpdGggb25seQotCW11Y2ggZGFya2VyIGNoYXJhY3RlcnMgdGhhbiB0aGUgb3RoZXIgY2hhcmFjdGVycyBvbiB0aGUgc2NyZWVuLgotCUN5YmxhZmIgZG9lcyBhbGxvdyB0aGF0IG1vZGUgdG8gYmUgc2V0LCBhcyBpdCBkb2VzIG5vdCB2aW9sYXRlIHRoZQotCW9mZmljaWFsIHNwZWNpZmljYXRpb25zLiBJdCB3b3VsZCBuZWVkIGEgbG90IG9mIGNvZGUgdG8gcmVsaWFibHkgc29ydAotCW91dCBhbGwgaW52YWxpZCBtb2RlcywgcGxheWluZyBhcm91bmQgd2l0aCB0aGUgbWFyZ2luIHZhbHVlcyB3aWxsCi0JZ2l2ZSBhIHZhbGlkIG1vZGUgcXVpY2tseS4gQW5kIGlmIGN5YmxhZmIgd291bGQgZGV0ZWN0IHN1Y2ggYW4gaW52YWxpZAotCW1vZGUsIHNob3VsZCBpdCBzaWxlbnRseSBhbHRlciB0aGUgcmVxdWVzdGVkIHZhbHVlcyBvciBzaG91bGQgaXQKLQlyZXBvcnQgYW4gZXJyb3I/IEJvdGggb3B0aW9ucyBoYXZlIHNvbWUgcHJvcyBhbmQgY29ucy4gQXMgc3RhdGVkCi0JYWJvdmUsIG5vbmUgb2YgdGhlIHN0YXJ0dXAgbW9kZXMgYXJlIGFmZmVjdGVkLCBhbmQgaWYgeW91IHNldAotCXZlcmJvc2l0eSB0byAxIG9yIGhpZ2hlciwgY3libGFmYiB3aWxsIHByaW50IHRoZSBmYnNldCBjb21tYW5kIHRoYXQKLQl3b3VsZCBiZSBuZWVkZWQgdG8gcHJvZ3JhbSB0aGF0IG1vZGUgdXNpbmcgZmJzZXQuCi0KLQotT3RoZXIgUGFyYW1ldGVycwotPT09PT09PT09PT09PT09PQotCi0KLWNydAkJZG9uJ3QgYXV0b2RldGVjdCwgYXNzdW1lIG1vbml0b3IgY29ubmVjdGVkIHRvCi0JCXN0YW5kYXJkIFZHQSBjb25uZWN0b3IKLQotZnAJCWRvbid0IGF1dG9kZXRlY3QsIGFzc3VtZSBmbGF0IHBhbmVsIGRpc3BsYXkKLQkJY29ubmVjdGVkIHRvIGZsYXQgcGFuZWwgbW9uaXRvciBpbnRlcmZhY2UKLQotbmF0aXZleCAJaW5mb3JtIGRyaXZlciBhYm91dCBuYXRpdmUgeCByZXNvbHV0aW9uIG9mCi0JCWZsYXQgcGFuZWwgbW9uaXRvciBjb25uZWN0ZWQgdG8gc3BlY2lhbAotCQlpbnRlcmZhY2UgKHNob3VsZCBiZSBhdXRvZGV0ZWN0ZWQpCi0KLXN0cmV0Y2ggCXN0cmV0Y2ggaW1hZ2UgdG8gYWRhcHQgbG93IHJlc29sdXRpb24gbW9kZXMgdG8KLQkJaGlnZXIgcmVzb2x1dGlvbnMgb2YgZmxhdCBwYW5lbCBtb25pdG9ycwotCQljb25uZWN0ZWQgdG8gc3BlY2lhbCBpbnRlcmZhY2UKLQotY2VudGVyCQljZW50ZXIgaW1hZ2UgdG8gYWRhcHQgbG93IHJlc29sdXRpb24gbW9kZXMgdG8KLQkJaGlnZXIgcmVzb2x1dGlvbnMgb2YgZmxhdCBwYW5lbCBtb25pdG9ycwotCQljb25uZWN0ZWQgdG8gc3BlY2lhbCBpbnRlcmZhY2UKLQotbWVtc2l6ZSAJdXNlIGlmIGF1dG9kZXRlY3RlZCBtZW1zaXplIGlzIHdyb25nIC4uLgotCQlzaG91bGQgbmV2ZXIgYmUgbmVjZXNzYXJ5Ci0KLW5vcGNpcnIgCWRpc2FibGUgUENJIHJlYWQgcmV0cnkKLW5vcGNpd3IgCWRpc2FibGUgUENJIHdyaXRlIHJldHJ5Ci1ub3BjaXJiIAlkaXNhYmxlIFBDSSByZWFkIGJ1cnN0cwotbm9wY2l3YiAJZGlzYWJsZSBQQ0kgd3JpdGUgYnVyc3RzCi0KLWJwcAkJYnBwIGZvciBzcGVjaWZpZWQgbW9kZXMKLQkJdmFsaWQgdmFsdWVzOiA4IHx8IDE2IHx8IDI0IHx8IDMyCi0KLXJlZgkJcmVmcmVzaCByYXRlIGZvciBzcGVjaWZpZWQgbW9kZQotCQl2YWxpZCB2YWx1ZXM6IDUwIDw9IHJlZiA8PSA4NQotCi1tb2RlCQk2NDB4NDgwIG9yIDgwMHg2MDAgb3IgMTAyNHg3Njggb3IgMTI4MHgxMDI0Ci0JCWlmIG5vdCBzcGVjaWZpZWQsIHRoZSBzdGFydHVwIG1vZGUgd2lsbCBiZSBkZXRlY3RlZAotCQlhbmQgdXNlZCwgc28geW91IG1pZ2h0IGFsc28gdXNlIHRoZSB2Z2E9Pz8/IHBhcmFtZXRlcgotCQlkZXNjcmliZWQgaW4gdmVzYWZiLnR4dC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgbW9kZSwKLQkJYnBwIGFuZCByZWYgcGFyYW1ldGVycyBhcmUgaWdub3JlZC4KLQotdmVyYm9zaXR5CTAgaXMgdGhlIGRlZmF1bHQsIGluY3JlYXNlIHRvIGF0IGxlYXN0IDIgZm9yIGV2ZXJ5Ci0JCWJ1ZyByZXBvcnQhCi0KLURldmVsb3BtZW50IGhpbnRzCi09PT09PT09PT09PT09PT09PQotCi1JdCdzIG11Y2ggZmFzdGVyIGRvIGNvbXBpbGUgYSBtb2R1bGUgYW5kIHRvIGxvYWQgdGhlIG5ldyB2ZXJzaW9uIGFmdGVyCi11bmxvYWRpbmcgdGhlIG9sZCBtb2R1bGUgdGhhbiB0byBjb21waWxlIGEgbmV3IGtlcm5lbCBhbmQgdG8gcmVib290LiBTbyBpZiB5b3UKLXRyeSB0byB3b3JrIG9uIGN5YmxhZmIsIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIHVzZSBjeWJsYWZiIGFzIGEgbW9kdWxlLgotSW4gcmVhbCBsaWZlLCBmYXN0IG9mdGVuIG1lYW5zIGRhbmdlcm91cywgYW5kIHRoYXQncyBhbHNvIHRoZSBjYXNlIGhlcmUuIElmCi15b3UgaW50cm9kdWNlIGEgc2VyaW91cyBidWcgd2hlbiBjeWJsYWZiIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlCi1rZXJuZWwgd2lsbCBsb2NrIG9yIG9vcHMgd2l0aCBhIGhpZ2ggcHJvYmFiaWxpdHkgYmVmb3JlIHRoZSBmaWxlIHN5c3RlbSBpcwotbW91bnRlZCwgYW5kIHRoZSBkYW5nZXIgZm9yIHlvdXIgZGF0YSBpcyBsb3cuIElmIHlvdSBsb2FkIGEgYnJva2VuIG93biB2ZXJzaW9uCi1vZiBjeWJsYWZiIG9uIGEgcnVubmluZyBzeXN0ZW0sIHRoZSBkYW5nZXIgZm9yIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZpbGUKLXN5c3RlbSBpcyBtdWNoIGhpZ2hlciBhcyB5b3UgbWlnaHQgbmVlZCBhIGhhcmQgcmVzZXQgYWZ0ZXJ3YXJkcy4gRGVjaWRlCi15b3Vyc2VsZi4KLQotTW9kdWxlIHVubG9hZGluZywgdGhlIHZmYiBtZXRob2QKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlmIHlvdSB3YW50IHRvIHVubG9hZC9yZWxvYWQgY3libGFmYiB1c2luZyB0aGUgdmlydHVhbCBmcmFtZWJ1ZmZlciwgeW91IG5lZWQKLXRvIGVuYWJsZSB2ZmIgc3VwcG9ydCBpbiB0aGUga2VybmVsIGZpcnN0LiBBZnRlciB0aGF0LCBsb2FkIHRoZSBtb2R1bGVzIGFzCi1zaG93biBiZWxvdzoKLQotCW1vZHByb2JlIHZmYiB2ZmJfZW5hYmxlPTEKLQltb2Rwcm9iZSBmYmNvbgotCW1vZHByb2JlIGN5YmxhZmIKLQlmYnNldCAtZmIgL2Rldi9mYjEgMTI4MHgxMDI0LTYwIC12eXJlcyAyNjYyCi0JY29uMmZiIC9kZXYvZmIxIC9kZXYvdHR5MQotCS4uLgotCi1JZiB5b3Ugbm93IG1hZGUgc29tZSBjaGFuZ2VzIHRvIGN5YmxhZmIgYW5kIHdhbnQgdG8gcmVsb2FkIGl0LCB5b3UgbWlnaHQgZG8gaXQKLWFzIHNob3cgYmVsb3c6Ci0KLQljb24yZmIgL2Rldi9mYjAgL2Rldi90dHkxCi0JLi4uCi0Jcm1tb2QgY3libGFmYgotCW1vZHByb2JlIGN5YmxhZmIKLQljb24yZmIgL2Rldi9mYjEgL2Rldi90dHkxCi0JLi4uCi0KLU9mIGNvdXJzZSwgeW91IG1pZ2h0IGNob29zZSBhbm90aGVyIG1vZGUsIGFuZCBtb3N0IGNlcnRhaW5seSB5b3UgYWxzbyB3YW50IHRvCi1tYXAgc29tZSBvdGhlciAvZGV2L3R0eSogdG8gdGhlIHJlYWwgZnJhbWVidWZmZXIgZGV2aWNlLiBZb3UgbWlnaHQgYWxzbyBjaG9vc2UKLXRvIGNvbXBpbGUgZmJjb24gYXMgYSBrZXJuZWwgbW9kdWxlIG9yIHBsYWNlIGl0IHBlcm1hbmVudGx5IGluIHRoZSBrZXJuZWwuCi0KLUkgZG8gbm90IGtub3cgb2YgYW55IHdheSB0byB1bmxvYWQgZmJjb24sIGFuZCBmYmNvbiB3aWxsIHByZXZlbnQgdGhlCi1mcmFtZWJ1ZmZlciBkZXZpY2UgbG9hZGVkIGZpcnN0IGZyb20gdW5sb2FkaW5nLiBbSWYgdGhlcmUgaXMgYSB3YXksIHRoZW4KLXBsZWFzZSBhZGQgYSBkZXNjcmlwdGlvbiBoZXJlIV0KLQotTW9kdWxlIHVubG9hZGluZywgdGhlIHZlc2FmYiBtZXRob2QKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUNvbmZpZ3VyZSB0aGUga2VybmVsOgotCi0JPCo+IFN1cHBvcnQgZm9yIGZyYW1lIGJ1ZmZlciBkZXZpY2VzCi0JWypdICAgVkVTQSBWR0EgZ3JhcGhpY3Mgc3VwcG9ydAotCTxNPiAgIEN5YmVyYmxhZGUvaTEgc3VwcG9ydAotCi1BZGQgZS5nLiAidmlkZW89dmVzYWZiOnlwYW4gdmdhPTB4MzA3IiB0byB0aGUga2VybmVsIHBhcmFtZXRlcnMuIFRoZSB5cGFuCi1wYXJhbWV0ZXIgaXMgaW1wb3J0YW50LCBjaG9vc2UgYW55IHZnYSBwYXJhbWV0ZXIgeW91IGxpa2UgYXMgbG9uZyBhcyBpdCBpcwotYSBncmFwaGljcyBtb2RlLgotCi1BZnRlciBib290aW5nLCBsb2FkIGN5YmxhZmIgd2l0aG91dCBhbnkgbW9kZSBhbmQgYnBwIHBhcmFtZXRlciBhbmQgYXNzaWduCi1jeWJsYWZiIHRvIGluZGl2aWR1YWwgdHR5cyB1c2luZyBjb24yZmIsIGUuZy46Ci0KLQltb2Rwcm9iZSBjeWJsYWZiCi0JY29uMmZiIC9kZXYvZmIxIC9kZXYvdHR5MQotCi1VbmxvYWRpbmcgY3libGFmYiB3b3JrcyB3aXRob3V0IHByb2JsZW1zIGFmdGVyIHlvdSBhc3NpZ24gdmVzYWZiIHRvIGFsbAotdHR5cyBhZ2FpbiwgZS5nLjoKLQotCWNvbjJmYiAvZGV2L2ZiMCAvZGV2L3R0eTEKLQlybW1vZCBjeWJsYWZiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2hhdHNuZXcgYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2hhdHNuZXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzA3YTIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3doYXRzbmV3CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotMC42MgotPT09PQotCi0gICAgICAtIHRoZSB2ZXNhZmIgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQgYXMgSSBkZWNpZGVkIHRvIGFsbG93IHRoZQotICAgICAgCWZlYXR1cmUgd2l0aG91dCBhbnkgc3BlY2lhbCBwYXJhbWV0ZXIuCi0KLSAgICAgIC0gQ3libGFmYiBkb2VzIG5vdCB1c2UgdGhlIHZnYSBzdHlsZSBvZiBwYW5uaW5nIGFueSBsb25nZXIsIG5vdyB0aGUKLSAgICAgIAkicmlnaHQgdmlldyIgcmVnaXN0ZXIgaW4gdGhlIGdyYXBoaWNzIGVuZ2luZSBJTyBzcGFjZSBpcyB1c2VkLiBXaXRob3V0Ci0JdGhhdCBjaGFuZ2UgaXQgd2FzIGltcG9zc2libGUgdG8gdXNlIGFsbCBhdmFpbGFibGUgbWVtb3J5LCBhbmQgd2l0aG91dAotCWFjY2VzcyB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSBpdCBpcyBpbXBvc3NpYmxlIHRvIHl3cmFwLgotCi0gICAgICAtIFRoZSBpbWFnZWJsaXQgZnVuY3Rpb24gbm93IHVzZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBhbGwgZm9udAotICAgICAgICB3aWR0aHMuIEhhcmR3YXJlIGJsaXR0aW5nIGFjcm9zcyBwaXhlbCBjb2x1bW4gMjA0OCBpcyBicm9rZW4gaW4gdGhlCi0JY3liZXJibGFkZS9pMSBncmFwaGljcyBjb3JlLCBidXQgd2Ugd29yayBhcm91bmQgdGhhdCBoYXJkd2FyZSBidWcuCi0KLSAgICAgIC0gbW9kZXMgd2l0aCB2eHJlcyAhPSB4cmVzIGFyZSBzdXBwb3J0ZWQgbm93LgotCi0gICAgICAtIHl3cmFwIHNjcm9sbGluZyBpcyBzdXBwb3J0ZWQgbm93IGFuZCB0aGUgZGVmYXVsdC4gVGhpcyBpcyBhIGJpZwotICAgICAgICBwZXJmb3JtYW5jZSBnYWluLgotCi0gICAgICAtIGRlZmF1bHQgdmlkZW8gbW9kZXMgdXNlIHZ5cmVzID4geXJlcyBhbmQgdnhyZXMgPiB4cmVzIHRvIGFsbG93Ci0gICAgICAgIGFsbW9zdCBvcHRpbWFsIHNjcm9sbGluZyBzcGVlZCBmb3Igbm9ybWFsIGFuZCByb3RhdGVkIHNjcmVlbnMKLQotICAgICAgLSBzb21lIGZlYXR1cmVzIG1haW5seSB1c2VmdWxsIGZvciBkZWJ1Z2dpbmcgdGhlIHVwcGVyIGxheWVycyBvZiB0aGUKLSAgICAgICAgZnJhbWVidWZmZXIgc3lzdGVtIGhhdmUgYmVlbiBhZGRlZCwgaGF2ZSBhIGxvb2sgYXQgdGhlIGNvZGUKLQotICAgICAgLSBmaXhlZDogT29wcyBhZnRlciB1bmxvYWRpbmcgY3libGFmYiB3aGVuIHJlYWRpbmcgL3Byb2MvaW8qCi0KLSAgICAgIC0gd2Ugd29yayBhcm91bmQgc29tZSBidWdzIG9mIHRoZSBoaWdoZXIgZnJhbWVidWZmZXIgbGF5ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3doeWN5YmxhZmIgYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2h5Y3libGFmYgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyM2JjMS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2h5Y3libGFmYgorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLUkgdHJpZWQgdGhlIGZvbGxvd2luZyBmcmFtZWJ1ZmZlciBkcml2ZXJzOgotCi0JLSBUUklERU5URkIgaXMgZnVsbCBvZiBidWdzLiBBY2NlbGVyYXRpb24gaXMgYnJva2VuIGZvciBCbGFkZTNECi0JICBncmFwaGljcyBjb3JlcyBsaWtlIHRoZSBjeWJlcmJsYWRlL2kxLiBJdCBjbGFpbXMgdG8gc3VwcG9ydCBhIGdyZWF0Ci0JICBudW1iZXIgb2YgZGV2aWNlcywgYnV0IGRvY3VtZW50YXRpb24gZm9yIG1vc3Qgb2YgdGhlc2UgZGV2aWNlcyBpcwotCSAgdW5mb3J0dW5hdGVseSBub3QgYXZhaWxhYmxlLiBUaGVyZSBpcyBfbm9fIHJlYXNvbiB0byB1c2UgdHJpZGVudGZiCi0JICBmb3IgY3liZXJibGFkZS9pMSArIENSVCB1c2Vycy4gVkVTQUZCIGlzIGZhc3RlciwgYW5kIHRoZSBvbmUKLQkgIGFkdmFudGFnZSwgbW9kZSBzd2l0Y2hpbmcsIGlzIGJyb2tlbiBpbiB0cmlkZW50ZmIuCi0KLQktIFZFU0FGQiBpcyB1c2VkIGJ5IG1hbnkgZGlzdHJpYnV0aW9ucyBhcyBhIHN0YW5kYXJkLiBWZXNhZmIgZG9lcwotCSAgbm90IHN1cHBvcnQgbW9kZSBzd2l0Y2hpbmcuIFZFU0FGQiBpcyBhIGJpdCBmYXN0ZXIgdGhhbiB0aGUgd29ya2luZwotCSAgY29uZmlndXJhdGlvbnMgb2YgVFJJREVOVEZCLCBidXQgaXQgaXMgc3RpbGwgdG9vIHNsb3csIGV2ZW4gaWYgeW91Ci0JICB1c2UgeXBhbi4KLQotCS0gRVBJQUZCICh5b3UnbGwgZmluZCBpdCBvbiBzb3VyY2Vmb3JnZSkgc3VwcG9ydHMgdGhlIEN5YmVyYmxhZGUvaTEKLQkgIGdyYXBoaWNzIGNvcmUsIGJ1dCBpdCBzdGlsbCBoYXMgc2VyaW91cyBidWdzIGFuZCBkZXZlbG9wZW1lbnQgc2VlbXMKLQkgIHRvIGhhdmUgc3RvcHBlZC4gVGhpcyBpcyB0aGUgb25lIGRyaXZlciB3aXRoIFRWLW91dCBzdXBwb3J0LiBJZiB5b3UKLQkgIGRvIG5lZWQgdGhpcyBmZWF0dXJlLCB0cnkgZXBpYWZiLgotCi1Ob25lIG9mIHRoZXNlIGRyaXZlcnMgd2FzIGEgcmVhbCBvcHRpb24gZm9yIG1lLgotCi1JIGJlbGlldmUgdGhhdCBpcyB1bnJlYXNvbmFibGUgdG8gY2hhbmdlIGNvZGUgdGhhdCBhbm5vdW5jZXMgdG8gc3VwcG9ydCAyMAotZGV2aWNlcyBpZiBJIG9ubHkgaGF2ZSBtb3JlIG9yIGxlc3Mgc3VmZmljaWVudCBkb2N1bWVudGF0aW9uIGZvciBleGFjdGx5IG9uZQotb2YgdGhlc2UuIFRoZSByaXNrIG9mIGJyZWFraW5nIGRldmljZSBmb28gd2hpbGUgZml4aW5nIGRldmljZSBiYXIgaXMgdG9vIGhpZ2guCi0KLVNvIEkgZGVjaWRlZCB0byBzdGFydCBDeUJsYUZCIGFzIGEgc3RyaXBwZWQgZG93biB0cmlkZW50ZmIuCi0KLUFsbCBjb2RlIHNwZWNpZmljIHRvIG90aGVyIFRyaWRlbnQgY2hpcHMgaGFzIGJlZW4gcmVtb3ZlZC4gQWZ0ZXIgdGhhdCB0aGVyZQotd2VyZSBhIGxvdCBvZiBjb3NtZXRpYyBjaGFuZ2VzIHRvIGluY3JlYXNlIHRoZSByZWFkYWJpbGl0eSBvZiB0aGUgY29kZS4gQWxsCi1yZWdpc3RlciBuYW1lcyB3ZXJlIGNoYW5nZWQgdG8gdGhvc2UgbW5lbW9uaWNzIHVzZWQgaW4gdGhlIGRhdGFzaGVldC4gRnVuY3Rpb24KLWFuZCBtYWNybyBuYW1lcyB3ZXJlIGNoYW5nZWQgaWYgdGhleSBoaW5kZXJlZCBlYXN5IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuCi0KLUFmdGVyIHRoYXQgSSBkZWJ1Z2dlZCB0aGUgY29kZSBhbmQgaW1wbGVtZW50ZWQgc29tZSBuZXcgZmVhdHVyZXMuIEknbGwgdHJ5IHRvCi1naXZlIGEgbGl0dGxlIHN1bW1hcnkgb2YgdGhlIG1haW4gY2hhbmdlczoKLQotCS0gY2FsY3VsYXRpb24gb2YgdmVydGljYWwgYW5kIGhvcml6b250YWwgdGltaW5ncyB3YXMgZml4ZWQKLQotCS0gdmlkZW8gc2lnbmFsIHF1YWxpdHkgaGFzIGJlZW4gaW1wcm92ZWQgZHJhbWF0aWNhbGx5Ci0KLQktIGFjY2VsZXJhdGlvbjoKLQotCQktIGZpbGxyZWN0IGFuZCBjb3B5YXJlYSB3ZXJlIGZpeGVkIGFuZCByZWVuYWJsZWQKLQotCQktIGNvbG9yIGV4cGFuZGluZyBpbWFnZWJsaXQgd2FzIG5ld2x5IGltcGxlbWVudGVkLCBjb2xvcgotCQkgIGltYWdlYmxpdCAob25seSB1c2VkIHRvIGRyYXcgdGhlIHBlbmd1aW5lKSBzdGlsbCB1c2VzIHRoZQotCQkgIGdlbmVyaWMgY29kZS4KLQotCQktIGluaXQgb2YgdGhlIGFjY2VsZXJhdGlvbiBlbmdpbmUgd2FzIGltcHJvdmVkIGFuZCBtb3ZlZCB0byBhCi0JCSAgcGxhY2Ugd2hlcmUgaXQgcmVhbGx5IHdvcmtzIC4uLgotCi0JCS0gc3luYyBmdW5jdGlvbiBoYXMgYSB0aW1lb3V0IG5vdyBhbmQgdHJpZXMgdG8gcmVzZXQgYW5kCi0JCSAgcmVpbml0IHRoZSBhY2NlbCBlbmdpbmUgaWYgbmVjZXNzYXJ5Ci0KLQkJLSBmZXdlciBzbG93IGNvcHlhcmVhIGNhbGxzIHdoZW4gZG9pbmcgeXBhbiBzY3JvbGxpbmcgYnkgdXNpbmcKLQkJICB1bmRvY3VtZW50ZWQgYml0IGQyMSBvZiBzY3JlZW4gc3RhcnQgYWRkcmVzcyBzdG9yZWQgaW4KLQkJICBDUjJCWzVdLiBCSU9TIGRvZXMgdXNlIGl0IGFsc28sIHNvIHRoaXMgc2hvdWxkIGJlIHNhZmUuCi0KLQktIGN5YmxhZmIgcmVqZWN0cyBhbnkgYXR0ZW1wdCB0byBzZXQgbW9kZXMgdGhhdCB3b3VsZCBjYXVzZSB2Y2xrCi0JICB2YWx1ZXMgYWJvdmUgcmVhc29uYWJsZSAyMzAgTUh6LiAzMmJpdCBtb2RlcyB1c2UgYSBjbG9jawotCSAgbXVsdGlwbGljYXRvciBvZiAyLCBzbyBmYnNldCBkb2VzIHNob3cgdGhlIGNvcnJlY3QgdmFsdWVzIGZvcgotCSAgcGl4Y2xvY2sgYnV0IG5vdCBmb3IgdmNsayBpbiB0aGlzIGNhc2UuIFRoZSBmYnNldCBsaW1pdCBpcyAxMTUgTUh6Ci0JICBmb3IgMzIgYnBwIG1vZGVzLgotCi0JLSBjeWJsYWZiIHJlamVjdHMgbW9kZXMga25vd24gdG8gYmUgYnJva2VuIG9yIHVuaW1wbGVtZW50ZWQgKGFsbAotCSAgaW50ZXJsYWNlZCBtb2RlcywgYWxsIGRvdWJsZXNjYW4gbW9kZXMgZm9yIG5vdykKLQotCS0gY3libGFmYiBub3cgd29ya3MgaW5kZXBlbmRhbnQgb2YgdGhlIHZpZGVvIG1vZGUgaW4gZWZmZWN0IGF0IHN0YXJ0dXAKLQkgIHRpbWUgKHRyaWRlbnRmYiBkb2VzIG5vdCBpbml0IGFsbCBuZWVkZWQgcmVnaXN0ZXJzIHRvIHJlYXNvbmFibGUKLQkgIHZhbHVlcykKLQotCS0gc3dpdGNoaW5nIGJldHdlZW4gdmlkZW8gbW9kZXMgZG9lcyB3b3JrIHJlbGlhYmx5IG5vdwotCi0JLSB0aGUgZmlyc3QgdmlkZW8gbW9kZSBub3cgaXMgdGhlIG9uZSBzZWxlY3RlZCBvbiBzdGFydHVwIHVzaW5nIHRoZQotCSAgdmdhPT8/Pz8gbWVjaGFuaXNtIG9yIGFueSBvZgotCQktIDY0MHg0ODAsIDgwMHg2MDAsIDEwMjR4NzY4LCAxMjgweDEwMjQKLQkJLSA4LCAxNiwgMjQgb3IgMzIgYnBwCi0JCS0gcmVmcmVzaCBiZXR3ZWVuIDUwIEh6IGFuZCA4NSBIeiwgMSBIeiBzdGVwcyAoMTI4MHgxMDI0LTMyCi0JCSAgaXMgbGltaXRlZCB0byA2M0h6KQotCi0JLSBwY2kgcmV0cnkgYW5kIHBjaSBidXJzdCBtb2RlIGFyZSBzZXR0YWJsZSAodHJ5IHRvIGRpc2FibGUgaWYgeW91Ci0JICBleHBlcmllbmNlIGxhdGVuY3kgcHJvYmxlbXMpCi0KLQktIGJ1aWx0IGFzIGEgbW9kdWxlIGN5YmxhZmIgbWlnaHQgYmUgdW5sb2FkZWQgYW5kIHJlbG9hZGVkIHVzaW5nCi0JICB0aGUgdmZiIG1vZHVsZSBhbmQgY29uMnZ0IG9yIG1pZ2h0IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB2ZXNhZmIKLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDExMzU5OTYuLmEyMzM2MWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTY0LDEwICs2NCwxMCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgotV2hlbjoJRGVjZW1iZXIgMjAwOAotRmlsZXM6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAotQ2hlY2s6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCBmcm9tIFZpZGVvIGRldmljZXMuCitXaGVuOglKdWx5IDIwMDkKK0ZpbGVzOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKK0NoZWNrOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKIFdoeToJVjRMMSBBUDEgd2FzIHJlcGxhY2VkIGJ5IFY0TDIgQVBJIGR1cmluZyBtaWdyYXRpb24gZnJvbSAyLjQgdG8gMi42CiAJc2VyaWVzLiBUaGUgb2xkIEFQSSBoYXZlIGxvdHMgb2YgZHJhd2JhY2tzIGFuZCBkb24ndCBwcm92aWRlIGVub3VnaAogCW1lYW5zIHRvIHdvcmsgd2l0aCBhbGwgdmlkZW8gYW5kIGF1ZGlvIHN0YW5kYXJkcy4gVGhlIG5ld2VyIEFQSSBpcwpAQCAtMjU1LDYgKzI1NSwxNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJR1BJTyBhdXRvcmVxdWVzdCBvbiBncGlvX2RpcmVjdGlvbl97aW5wdXQsb3V0cHV0fSgpIGluIGdwaW9saWIKK1doZW46CUZlYnJ1YXJ5IDIwMTAKK1doeToJQWxsIGNhbGxlcnMgc2hvdWxkIHVzZSBleHBsaWNpdCBncGlvX3JlcXVlc3QoKS9ncGlvX2ZyZWUoKS4KKwlUaGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGluIGdwaW9saWIgd2FzIHByb3ZpZGVkIG1vc3RseSBhcyBhCisJbWlncmF0aW9uIGFpZCBmb3IgbGVnYWN5IEdQSU8gaW50ZXJmYWNlcyAoZm9yIFNPQyBiYXNlZCBHUElPcykuCisJVGhvc2UgdXNlcnMgaGF2ZSBub3cgbGFyZ2VseSBtaWdyYXRlZC4gIFBsYXRmb3JtcyBpbXBsZW1lbnRpbmcKKwl0aGUgR1BJTyBpbnRlcmZhY2VzIHdpdGhvdXQgdXNpbmcgZ3Bpb2xpYiB3aWxsIHNlZSBubyBjaGFuZ2VzLgorV2hvOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OgliNDMgc3VwcG9ydCBmb3IgZmlybXdhcmUgcmV2aXNpb24gPCA0MTAKIFdoZW46CVRoZSBzY2hlZHVsZSB3YXMgSnVseSAyMDA4LCBidXQgaXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8ga2VlcCB0aGUKICAgICAgICAgY29kZSBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBtYWpvciBtYWludGFuYW5jZSBoZWFkYWNoZXMuCkBAIC0zMTEsNiArMzIxLDE4IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglBYmlsaXR5IGZvciBub24gcm9vdCB1c2VycyB0byBzaG1fZ2V0IGh1Z2V0bGIgcGFnZXMgYmFzZWQgb24gbWxvY2sKKwlyZXNvdXJjZSBsaW1pdHMKK1doZW46CTIuNi4zMQorV2h5OglOb24gcm9vdCB1c2VycyBuZWVkIHRvIGJlIHBhcnQgb2YgL3Byb2Mvc3lzL3ZtL2h1Z2V0bGJfc2htX2dyb3VwIG9yCisJaGF2ZSBDQVBfSVBDX0xPQ0sgdG8gYmUgYWJsZSB0byBhbGxvY2F0ZSBzaG0gc2VnbWVudHMgYmFja2VkIGJ5CisJaHVnZSBwYWdlcy4gIFRoZSBtbG9jayBiYXNlZCBybGltaXQgY2hlY2sgdG8gYWxsb3cgc2htIGh1Z2V0bGIgaXMKKwlpbmNvbnNpc3RlbnQgd2l0aCBtbWFwIGJhc2VkIGFsbG9jYXRpb25zLiAgSGVuY2UgaXQgaXMgYmVpbmcKKwlkZXByZWNhdGVkLgorV2hvOglSYXZpa2lyYW4gVGhpcnVtYWxhaSA8a2lyYW5Ac2NhbGV4ODYub3JnPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJQ09ORklHX1RIRVJNQUxfSFdNT04KIFdoZW46CUphbnVhcnkgMjAwOQogV2h5OglUaGlzIG9wdGlvbiB3YXMgaW50cm9kdWNlZCBqdXN0IHRvIGFsbG93IG9sZGVyIGxtLXNlbnNvcnMgdXNlcnNwYWNlCkBAIC0zODAsMyArNDAyLDM1IEBACiAJaGF2ZSBiZWVuIGtlcHQgYXJvdW5kIGZvciBtaWdyYXRpb24gcmVhc29ucy4gQWZ0ZXIgbW9yZSB0aGFuIHR3byB5ZWFycwogCWl0J3MgdGltZSB0byByZW1vdmUgdGhlbSBmaW5hbGx5CiBXaG86CVRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJZmFrZXBocCBhbmQgYXNzb2NpYXRlZCBzeXNmcyBmaWxlcyBpbiAvc3lzL2J1cy9wY2kvc2xvdHMvCitXaGVuOgkyMDExCitXaHk6CUluIDIuNi4yNywgdGhlIHNlbWFudGljcyBvZiAvc3lzL2J1cy9wY2kvc2xvdHMgd2FzIHJlZGVmaW5lZCB0bworCXJlcHJlc2VudCBhIG1hY2hpbmUncyBwaHlzaWNhbCBQQ0kgc2xvdHMuIFRoZSBjaGFuZ2UgaW4gc2VtYW50aWNzCisJaGFkIHVzZXJzcGFjZSBpbXBsaWNhdGlvbnMsIGFzIHRoZSBob3RwbHVnIGNvcmUgbm8gbG9uZ2VyIGFsbG93ZWQKKwlkcml2ZXJzIHRvIGNyZWF0ZSBtdWx0aXBsZSBzeXNmcyBmaWxlcyBwZXIgcGh5c2ljYWwgc2xvdCAocmVxdWlyZWQKKwlmb3IgbXVsdGktZnVuY3Rpb24gZGV2aWNlcywgZS5nLikuIGZha2VwaHAgd2FzIHNlZW4gYXMgYSBkZXZlbG9wZXIncworCXRvb2wgb25seSwgYW5kIGl0cyBpbnRlcmZhY2UgY2hhbmdlZC4gVG9vIGxhdGUsIHdlIGxlYXJuZWQgdGhhdAorCXRoZXJlIHdlcmUgc29tZSB1c2VycyBvZiB0aGUgZmFrZXBocCBpbnRlcmZhY2UuCisKKwlJbiAyLjYuMzAsIHRoZSBvcmlnaW5hbCBmYWtlcGhwIGludGVyZmFjZSB3YXMgcmVzdG9yZWQuIEF0IHRoZSBzYW1lCisJdGltZSwgdGhlIFBDSSBjb3JlIGdhaW5lZCB0aGUgYWJpbGl0eSB0aGF0IGZha2VwaHAgcHJvdmlkZWQsIG5hbWVseQorCWZ1bmN0aW9uLWxldmVsIGhvdC1yZW1vdmUgYW5kIGhvdC1hZGQuCisKKwlTaW5jZSB0aGUgUENJIGNvcmUgbm93IHByb3ZpZGVzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIGV4cG9zZWQgaW46CisKKwkJL3N5cy9idXMvcGNpL3Jlc2NhbgorCQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVtb3ZlCisJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9yZXNjYW4KKworCXRoZXJlIGlzIG5vIGZ1bmN0aW9uYWwgcmVhc29uIHRvIG1haW50YWluIGZha2VwaHAgYXMgd2VsbC4KKworCVdlIHdpbGwga2VlcCB0aGUgZXhpc3RpbmcgbW9kdWxlIHNvIHRoYXQgJ21vZHByb2JlIGZha2VwaHAnIHdpbGwKKwlwcmVzZW50IHRoZSBvbGQgL3N5cy9idXMvcGNpL3Nsb3RzLy4uLiBpbnRlcmZhY2UgZm9yIGNvbXBhdGliaWxpdHksCisJYnV0IHVzZXJzIGFyZSB1cmdlZCB0byBtaWdyYXRlIHRoZWlyIGFwcGxpY2F0aW9ucyB0byB0aGUgQVBJIGFib3ZlLgorCisJQWZ0ZXIgYSByZWFzb25hYmxlIHRyYW5zaXRpb24gcGVyaW9kLCB3ZSB3aWxsIHJlbW92ZSB0aGUgbGVnYWN5CisJZmFrZXBocCBpbnRlcmZhY2UuCitXaG86CUFsZXggQ2hpYW5nIDxhY2hpYW5nQGhwLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCA0ZTc4Y2U2Li43NmVmZTViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC01MDUsNyArNTA1LDcgQEAKIAl2b2lkICgqb3Blbikoc3RydWN0IHZtX2FyZWFfc3RydWN0Kik7CiAJdm9pZCAoKmNsb3NlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKIAlpbnQgKCpmYXVsdCkoc3RydWN0IHZtX2FyZWFfc3RydWN0Kiwgc3RydWN0IHZtX2ZhdWx0ICopOwotCWludCAoKnBhZ2VfbWt3cml0ZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBwYWdlICopOworCWludCAoKnBhZ2VfbWt3cml0ZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9mYXVsdCAqKTsKIAlpbnQgKCphY2Nlc3MpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB2b2lkKiwgaW50LCBpbnQpOwogCiBsb2NraW5nIHJ1bGVzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyZDUyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQKQEAgLTAsMCArMSw2NTggQEAKKwkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgRlMtQ0FDSEUgQ0FDSEUgQkFDS0VORCBBUEkKKwkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIEZTLUNhY2hlIHN5c3RlbSBwcm92aWRlcyBhbiBBUEkgYnkgd2hpY2ggYWN0dWFsIGNhY2hlcyBjYW4gYmUgc3VwcGxpZWQgdG8KK0ZTLUNhY2hlIGZvciBpdCB0byB0aGVuIHNlcnZlIG91dCB0byBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFuZCBvdGhlciBpbnRlcmVzdGVkCitwYXJ0aWVzLgorCitUaGlzIEFQSSBpcyBkZWNsYXJlZCBpbiA8bGludXgvZnNjYWNoZS1jYWNoZS5oPi4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOSVRJQUxJU0lORyBBTkQgUkVHSVNURVJJTkcgQSBDQUNIRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHN0YXJ0IG9mZiwgYSBjYWNoZSBkZWZpbml0aW9uIG11c3QgYmUgaW5pdGlhbGlzZWQgYW5kIHJlZ2lzdGVyZWQgZm9yIGVhY2gKK2NhY2hlIHRoZSBiYWNrZW5kIHdhbnRzIHRvIG1ha2UgYXZhaWxhYmxlLiAgRm9yIGluc3RhbmNlLCBDYWNoZUZTIGRvZXMgdGhpcyBpbgordGhlIGZpbGxfc3VwZXIoKSBvcGVyYXRpb24gb24gbW91bnRpbmcuCisKK1RoZSBjYWNoZSBkZWZpbml0aW9uIChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSkgc2hvdWxkIGJlIGluaXRpYWxpc2VkIGJ5IGNhbGxpbmc6CisKKwl2b2lkIGZzY2FjaGVfaW5pdF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzICpvcHMsCisJCQkJY29uc3QgY2hhciAqaWRmbXQsCisJCQkJLi4uKTsKKworV2hlcmU6CisKKyAoKikgImNhY2hlIiBpcyBhIHBvaW50ZXIgdG8gdGhlIGNhY2hlIGRlZmluaXRpb247CisKKyAoKikgIm9wcyIgaXMgYSBwb2ludGVyIHRvIHRoZSB0YWJsZSBvZiBvcGVyYXRpb25zIHRoYXQgdGhlIGJhY2tlbmQgc3VwcG9ydHMgb24KKyAgICAgdGhpcyBjYWNoZTsgYW5kCisKKyAoKikgImlkZm10IiBpcyBhIGZvcm1hdCBhbmQgcHJpbnRmLXN0eWxlIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0aW5nIGEgbGFiZWwKKyAgICAgZm9yIHRoZSBjYWNoZS4KKworCitUaGUgY2FjaGUgc2hvdWxkIHRoZW4gYmUgcmVnaXN0ZXJlZCB3aXRoIEZTLUNhY2hlIGJ5IHBhc3NpbmcgYSBwb2ludGVyIHRvIHRoZQorcHJldmlvdXNseSBpbml0aWFsaXNlZCBjYWNoZSBkZWZpbml0aW9uIHRvOgorCisJaW50IGZzY2FjaGVfYWRkX2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqZnNkZWYsCisJCQkgICAgICBjb25zdCBjaGFyICp0YWduYW1lKTsKKworVHdvIGV4dHJhIGFyZ3VtZW50cyBzaG91bGQgYWxzbyBiZSBzdXBwbGllZDoKKworICgqKSAiZnNkZWYiIHdoaWNoIHNob3VsZCBwb2ludCB0byB0aGUgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZvciB0aGUgRlMtQ2FjaGUKKyAgICAgbWFzdGVyIGluZGV4IGluIHRoaXMgY2FjaGUuICBOZXRmcyBwcmltYXJ5IGluZGV4IGVudHJpZXMgd2lsbCBiZSBjcmVhdGVkCisgICAgIGhlcmUuICBGUy1DYWNoZSBrZWVwcyB0aGUgY2FsbGVyJ3MgcmVmZXJlbmNlIHRvIHRoZSBpbmRleCBvYmplY3QgaWYKKyAgICAgc3VjY2Vzc2Z1bCBhbmQgd2lsbCByZWxlYXNlIGl0IHVwb24gd2l0aGRyYXdhbCBvZiB0aGUgY2FjaGUuCisKKyAoKikgInRhZ25hbWUiIHdoaWNoLCBpZiBnaXZlbiwgc2hvdWxkIGJlIGEgdGV4dCBzdHJpbmcgbmFtaW5nIHRoaXMgY2FjaGUuICBJZgorICAgICB0aGlzIGlzIE5VTEwsIHRoZSBpZGVudGlmaWVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiAgRm9yIENhY2hlRlMsIHRoZQorICAgICBpZGVudGlmaWVyIGlzIHNldCB0byBuYW1lIHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSBhbmQgdGhlIHRhZyBjYW4gYmUKKyAgICAgc3VwcGxpZWQgYnkgbW91bnQuCisKK1RoaXMgZnVuY3Rpb24gbWF5IHJldHVybiAtRU5PTUVNIGlmIGl0IHJhbiBvdXQgb2YgbWVtb3J5IG9yIC1FRVhJU1QgaWYgdGhlIHRhZworaXMgYWxyZWFkeSBpbiB1c2UuICAwIHdpbGwgYmUgcmV0dXJuZWQgb24gc3VjY2Vzcy4KKworCis9PT09PT09PT09PT09PT09PT09PT0KK1VOUkVHSVNURVJJTkcgQSBDQUNIRQorPT09PT09PT09PT09PT09PT09PT09CisKK0EgY2FjaGUgY2FuIGJlIHdpdGhkcmF3biBmcm9tIHRoZSBzeXN0ZW0gYnkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYQorcG9pbnRlciB0byB0aGUgY2FjaGUgZGVmaW5pdGlvbjoKKworCXZvaWQgZnNjYWNoZV93aXRoZHJhd19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworCitJbiBDYWNoZUZTJ3MgY2FzZSwgdGhpcyBpcyBjYWxsZWQgYnkgcHV0X3N1cGVyKCkuCisKKworPT09PT09PT0KK1NFQ1VSSVRZCis9PT09PT09PQorCitUaGUgY2FjaGUgbWV0aG9kcyBhcmUgZXhlY3V0ZWQgb25lIG9mIHR3byBjb250ZXh0czoKKworICgxKSB0aGF0IG9mIHRoZSB1c2Vyc3BhY2UgcHJvY2VzcyB0aGF0IGlzc3VlZCB0aGUgbmV0ZnMgb3BlcmF0aW9uIHRoYXQgY2F1c2VkCisgICAgIHRoZSBjYWNoZSBtZXRob2QgdG8gYmUgaW52b2tlZCwgb3IKKworICgyKSB0aGF0IG9mIG9uZSBvZiB0aGUgcHJvY2Vzc2VzIGluIHRoZSBGUy1DYWNoZSB0aHJlYWQgcG9vbC4KKworSW4gZWl0aGVyIGNhc2UsIHRoaXMgbWF5IG5vdCBiZSBhbiBhcHByb3ByaWF0ZSBjb250ZXh0IGluIHdoaWNoIHRvIGFjY2VzcyB0aGUKK2NhY2hlLgorCitUaGUgY2FsbGluZyBwcm9jZXNzJ3MgZnN1aWQsIGZzZ2lkIGFuZCBTRUxpbnV4IHNlY3VyaXR5IGlkZW50aXRpZXMgbWF5IG5lZWQgdG8KK2JlIG1hc3F1ZXJhZGVkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNhY2hlIGRyaXZlcidzIGFjY2VzcyB0byB0aGUgY2FjaGUuCitUaGlzIGlzIGxlZnQgdG8gdGhlIGNhY2hlIHRvIGhhbmRsZTsgRlMtQ2FjaGUgbWFrZXMgbm8gZWZmb3J0IGluIHRoaXMgcmVnYXJkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDT05UUk9MIEFORCBTVEFUSVNUSUNTIFBSRVNFTlRBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNhY2hlIG1heSBwcmVzZW50IGRhdGEgdG8gdGhlIG91dHNpZGUgd29ybGQgdGhyb3VnaCBGUy1DYWNoZSdzIGludGVyZmFjZXMKK2luIHN5c2ZzIGFuZCBwcm9jZnMgLSB0aGUgZm9ybWVyIGZvciBjb250cm9sIGFuZCB0aGUgbGF0dGVyIGZvciBzdGF0aXN0aWNzLgorCitBIHN5c2ZzIGRpcmVjdG9yeSBjYWxsZWQgL3N5cy9mcy9mc2NhY2hlLzxjYWNoZXRhZz4vIGlzIGNyZWF0ZWQgaWYgQ09ORklHX1NZU0ZTCitpcyBlbmFibGVkLiAgVGhpcyBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGtvYmplY3Qgc3RydWN0IGZzY2FjaGVfY2FjaGU6OmtvYmoKK2FuZCBpcyBmb3IgdXNlIGJ5IHRoZSBjYWNoZSBhcyBpdCBzZWVzIGZpdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT0KK1JFTEVWQU5UIERBVEEgU1RSVUNUVVJFUworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAoKikgSW5kZXgvRGF0YSBmaWxlIEZTLUNhY2hlIHJlcHJlc2VudGF0aW9uIGNvb2tpZToKKworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSB7CisJCXN0cnVjdCBmc2NhY2hlX29iamVjdF9kZWYJKmRlZjsKKwkJc3RydWN0IGZzY2FjaGVfbmV0ZnMJCSpuZXRmczsKKwkJdm9pZAkJCQkqbmV0ZnNfZGF0YTsKKwkJLi4uCisJfTsKKworICAgICBUaGUgZmllbGRzIHRoYXQgbWlnaHQgYmUgb2YgdXNlIHRvIHRoZSBiYWNrZW5kIGRlc2NyaWJlIHRoZSBvYmplY3QKKyAgICAgZGVmaW5pdGlvbiwgdGhlIG5ldGZzIGRlZmluaXRpb24gYW5kIHRoZSBuZXRmcydzIGRhdGEgZm9yIHRoaXMgY29va2llLgorICAgICBUaGUgb2JqZWN0IGRlZmluaXRpb24gY29udGFpbiBmdW5jdGlvbnMgc3VwcGxpZWQgYnkgdGhlIG5ldGZzIGZvciBsb2FkaW5nCisgICAgIGFuZCBtYXRjaGluZyBpbmRleCBlbnRyaWVzOyB0aGVzZSBhcmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzb21lIG9mIHRoZQorICAgICBjYWNoZSBvcGVyYXRpb25zLgorCisKKyAoKikgSW4tY2FjaGUgb2JqZWN0IHJlcHJlc2VudGF0aW9uOgorCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0IHsKKwkJaW50CQkJCWRlYnVnX2lkOworCQllbnVtIHsKKwkJCUZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORywKKwkJCS4uLgorCQl9CQkJCXN0YXRlOworCQlzcGlubG9ja190CQkJbG9jaworCQlzdHJ1Y3QgZnNjYWNoZV9jYWNoZQkJKmNhY2hlOworCQlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJCSpjb29raWU7CisJCS4uLgorCX07CisKKyAgICAgU3RydWN0dXJlcyBvZiB0aGlzIHR5cGUgc2hvdWxkIGJlIGFsbG9jYXRlZCBieSB0aGUgY2FjaGUgYmFja2VuZCBhbmQKKyAgICAgcGFzc2VkIHRvIEZTLUNhY2hlIHdoZW4gcmVxdWVzdGVkIGJ5IHRoZSBhcHByb3ByaWF0ZSBjYWNoZSBvcGVyYXRpb24uICBJbgorICAgICB0aGUgY2FzZSBvZiBDYWNoZUZTLCB0aGV5J3JlIGVtYmVkZGVkIGluIENhY2hlRlMncyBpbnRlcm5hbCBvYmplY3QKKyAgICAgc3RydWN0dXJlcy4KKworICAgICBUaGUgZGVidWdfaWQgaXMgYSBzaW1wbGUgaW50ZWdlciB0aGF0IGNhbiBiZSB1c2VkIGluIGRlYnVnZ2luZyBtZXNzYWdlcworICAgICB0aGF0IHJlZmVyIHRvIGEgcGFydGljdWxhciBvYmplY3QuICBJbiBzdWNoIGEgY2FzZSBpdCBzaG91bGQgYmUgcHJpbnRlZAorICAgICB1c2luZyAiT0JKJXgiIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBGUy1DYWNoZS4KKworICAgICBFYWNoIG9iamVjdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIGNvb2tpZSB0aGF0IHJlcHJlc2VudHMgdGhlIG9iamVjdCBpdAorICAgICBpcyBiYWNraW5nLiAgQW4gb2JqZWN0IHNob3VsZCByZXRpcmVkIHdoZW4gcHV0X29iamVjdCgpIGlzIGNhbGxlZCBpZiBpdCBpcworICAgICBpbiBzdGF0ZSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkcuICBUaGUgZnNjYWNoZV9vYmplY3Qgc3RydWN0IHNob3VsZCBiZQorICAgICBpbml0aWFsaXNlZCBieSBjYWxsaW5nIGZzY2FjaGVfb2JqZWN0X2luaXQob2JqZWN0KS4KKworCisgKCopIEZTLUNhY2hlIG9wZXJhdGlvbiByZWNvcmQ6CisKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24geworCQlhdG9taWNfdAkJdXNhZ2U7CisJCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqb2JqZWN0OworCQl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwkjZGVmaW5lIEZTQ0FDSEVfT1BfRVhDTFVTSVZFCisJCXZvaWQgKCpwcm9jZXNzb3IpKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCQl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisJCS4uLgorCX07CisKKyAgICAgRlMtQ2FjaGUgaGFzIGEgcG9vbCBvZiB0aHJlYWRzIHRoYXQgaXQgdXNlcyB0byBnaXZlIENQVSB0aW1lIHRvIHRoZQorICAgICB2YXJpb3VzIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBkb25lIGFzIHBhcnQgb2YgZHJpdmluZworICAgICB0aGUgY2FjaGUuICBUaGVzZSBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlIGFib3ZlIHN0cnVjdHVyZS4gIFRoZSBwcm9jZXNzb3IKKyAgICAgbWV0aG9kIGlzIGNhbGxlZCB0byBnaXZlIHRoZSBvcCBDUFUgdGltZSwgYW5kIHRoZSByZWxlYXNlIG1ldGhvZCB0byBnZXQKKyAgICAgcmlkIG9mIGl0IHdoZW4gaXRzIHVzYWdlIGNvdW50IHJlYWNoZXMgMC4KKworICAgICBBbiBvcGVyYXRpb24gY2FuIGJlIG1hZGUgZXhjbHVzaXZlIHVwb24gYW4gb2JqZWN0IGJ5IHNldHRpbmcgdGhlCisgICAgIGFwcHJvcHJpYXRlIGZsYWcgYmVmb3JlIGVucXVldWluZyBpdCB3aXRoIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oKS4gIElmCisgICAgIGFuIG9wZXJhdGlvbiBuZWVkcyBtb3JlIHByb2Nlc3NpbmcgdGltZSwgaXQgc2hvdWxkIGJlIGVucXVldWVkIGFnYWluLgorCisKKyAoKikgRlMtQ2FjaGUgcmV0cmlldmFsIG9wZXJhdGlvbiByZWNvcmQ6CisKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgeworCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gb3A7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nOworCQlzdHJ1Y3QgbGlzdF9oZWFkCSp0b19kbzsKKwkJLi4uCisJfTsKKworICAgICBBIHN0cnVjdHVyZSBvZiB0aGlzIHR5cGUgaXMgYWxsb2NhdGVkIGJ5IEZTLUNhY2hlIHRvIHJlY29yZCByZXRyaWV2YWwgYW5kCisgICAgIGFsbG9jYXRpb24gcmVxdWVzdHMgbWFkZSBieSB0aGUgbmV0ZnMuICBUaGlzIHN0cnVjdCBpcyB0aGVuIHBhc3NlZCB0byB0aGUKKyAgICAgYmFja2VuZCB0byBkbyB0aGUgb3BlcmF0aW9uLiAgVGhlIGJhY2tlbmQgbWF5IGdldCBleHRyYSByZWZzIHRvIGl0IGJ5CisgICAgIGNhbGxpbmcgZnNjYWNoZV9nZXRfcmV0cmlldmFsKCkgYW5kIHJlZnMgbWF5IGJlIGRpc2NhcmRlZCBieSBjYWxsaW5nCisgICAgIGZzY2FjaGVfcHV0X3JldHJpZXZhbCgpLgorCisgICAgIEEgcmV0cmlldmFsIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCBieSB0aGUgYmFja2VuZCB0byBkbyByZXRyaWV2YWwgd29yay4gIFRvCisgICAgIGRvIHRoaXMsIHRoZSByZXRyaWV2YWwtPm9wLnByb2Nlc3NvciBtZXRob2QgcG9pbnRlciBzaG91bGQgYmUgc2V0CisgICAgIGFwcHJvcHJpYXRlbHkgYnkgdGhlIGJhY2tlbmQgYW5kIGZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwoKSBjYWxsZWQgdG8KKyAgICAgc3VibWl0IGl0IHRvIHRoZSB0aHJlYWQgcG9vbC4gIENhY2hlRmlsZXMsIGZvciBleGFtcGxlLCB1c2VzIHRoaXMgdG8gcXVldWUKKyAgICAgcGFnZSBleGFtaW5hdGlvbiB3aGVuIGl0IGRldGVjdHMgUEdfbG9jayBiZWluZyBjbGVhcmVkLgorCisgICAgIFRoZSB0b19kbyBmaWVsZCBpcyBhbiBlbXB0eSBsaXN0IGF2YWlsYWJsZSBmb3IgdGhlIGNhY2hlIGJhY2tlbmQgdG8gdXNlIGFzCisgICAgIGl0IHNlZXMgZml0LgorCisKKyAoKikgRlMtQ2FjaGUgc3RvcmFnZSBvcGVyYXRpb24gcmVjb3JkOgorCisJc3RydWN0IGZzY2FjaGVfc3RvcmFnZSB7CisJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiBvcDsKKwkJcGdvZmZfdAkJCXN0b3JlX2xpbWl0OworCQkuLi4KKwl9OworCisgICAgIEEgc3RydWN0dXJlIG9mIHRoaXMgdHlwZSBpcyBhbGxvY2F0ZWQgYnkgRlMtQ2FjaGUgdG8gcmVjb3JkIG91dHN0YW5kaW5nCisgICAgIHdyaXRlcyB0byBiZSBtYWRlLiAgRlMtQ2FjaGUgaXRzZWxmIGVucXVldWVzIHRoaXMgb3BlcmF0aW9uIGFuZCBpbnZva2VzCisgICAgIHRoZSB3cml0ZV9wYWdlKCkgbWV0aG9kIG9uIHRoZSBvYmplY3QgYXQgYXBwcm9wcmlhdGUgdGltZXMgdG8gZWZmZWN0CisgICAgIHN0b3JhZ2UuCisKKworPT09PT09PT09PT09PT09PQorQ0FDSEUgT1BFUkFUSU9OUworPT09PT09PT09PT09PT09PQorCitUaGUgY2FjaGUgYmFja2VuZCBwcm92aWRlcyBGUy1DYWNoZSB3aXRoIGEgdGFibGUgb2Ygb3BlcmF0aW9ucyB0aGF0IGNhbiBiZQorcGVyZm9ybWVkIG9uIHRoZSBkZW5pemVucyBvZiB0aGUgY2FjaGUuICBUaGVzZSBhcmUgaGVsZCBpbiBhIHN0cnVjdHVyZSBvZiB0eXBlOgorCisJc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzCisKKyAoKikgTmFtZSBvZiBjYWNoZSBwcm92aWRlciBbbWFuZGF0b3J5XToKKworCWNvbnN0IGNoYXIgKm5hbWUKKworICAgICBUaGlzIGlzbid0IHN0cmljdGx5IGFuIG9wZXJhdGlvbiwgYnV0IHNob3VsZCBiZSBwb2ludGVkIGF0IGEgc3RyaW5nIG5hbWluZworICAgICB0aGUgYmFja2VuZC4KKworCisgKCopIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBbbWFuZGF0b3J5XToKKworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqKCphbGxvY19vYmplY3QpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQorCisgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWxsb2NhdGUgYSBjYWNoZSBvYmplY3QgcmVwcmVzZW50YXRpb24gdG8gYmFjayBhCisgICAgIGNvb2tpZSBpbiBhIHBhcnRpY3VsYXIgY2FjaGUuICBmc2NhY2hlX29iamVjdF9pbml0KCkgc2hvdWxkIGJlIGNhbGxlZCBvbgorICAgICB0aGUgb2JqZWN0IHRvIGluaXRpYWxpc2UgaXQgcHJpb3IgdG8gcmV0dXJuaW5nLgorCisgICAgIFRoaXMgZnVuY3Rpb24gbWF5IGFsc28gYmUgdXNlZCB0byBwYXJzZSB0aGUgaW5kZXgga2V5IHRvIGJlIHVzZWQgZm9yCisgICAgIG11bHRpcGxlIGxvb2t1cCBjYWxscyB0byB0dXJuIGl0IGludG8gYSBtb3JlIGNvbnZlbmllbnQgZm9ybS4gIEZTLUNhY2hlCisgICAgIHdpbGwgY2FsbCB0aGUgbG9va3VwX2NvbXBsZXRlKCkgbWV0aG9kIHRvIGFsbG93IHRoZSBjYWNoZSB0byByZWxlYXNlIHRoZQorICAgICBmb3JtIG9uY2UgbG9va3VwIGlzIGNvbXBsZXRlIG9yIGFib3J0ZWQuCisKKworICgqKSBMb29rIHVwIGFuZCBjcmVhdGUgb2JqZWN0IFttYW5kYXRvcnldOgorCisJdm9pZCAoKmxvb2t1cF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9vayB1cCBhbiBvYmplY3QsIGdpdmVuIHRoYXQgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgIGFsbG9jYXRlZCBhbmQgYXR0YWNoZWQgdG8gdGhlIGNvb2tpZS4gIFRoaXMgc2hvdWxkIGluc3RhbnRpYXRlIHRoYXQgb2JqZWN0CisgICAgIGluIHRoZSBjYWNoZSBpZiBpdCBjYW4uCisKKyAgICAgVGhlIG1ldGhvZCBzaG91bGQgY2FsbCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoKSBhcyBzb29uIGFzCisgICAgIHBvc3NpYmxlIGlmIGl0IGRldGVybWluZXMgdGhlIG9iamVjdCBkb2Vzbid0IGV4aXN0IGluIHRoZSBjYWNoZS4gIElmIHRoZQorICAgICBvYmplY3QgaXMgZm91bmQgdG8gZXhpc3QgYW5kIHRoZSBuZXRmcyBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB2YWxpZCB0aGVuCisgICAgIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCkgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHRoZSBvYmplY3QgaXMgaW4gYQorICAgICBwb3NpdGlvbiB0byBoYXZlIGRhdGEgc3RvcmVkIGluIGl0LiAgU2ltaWxhcmx5LCBmc2NhY2hlX29idGFpbmVkX29iamVjdCgpCisgICAgIHNob3VsZCBhbHNvIGJlIGNhbGxlZCBvbmNlIGEgbm9uLXByZXNlbnQgb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQuCisKKyAgICAgSWYgYSBsb29rdXAgZXJyb3Igb2NjdXJzLCBmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IoKSBzaG91bGQgYmUgY2FsbGVkCisgICAgIHRvIGFib3J0IHRoZSBsb29rdXAgb2YgdGhhdCBvYmplY3QuCisKKworICgqKSBSZWxlYXNlIGxvb2t1cCBkYXRhIFttYW5kYXRvcnldOgorCisJdm9pZCAoKmxvb2t1cF9jb21wbGV0ZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGFzayB0aGUgY2FjaGUgdG8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGl0IHdhcworICAgICB1c2luZyB0byBwZXJmb3JtIGEgbG9va3VwLgorCisKKyAoKikgSW5jcmVtZW50IG9iamVjdCByZWZjb3VudCBbbWFuZGF0b3J5XToKKworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqKCpncmFiX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIGFuIG9iamVjdC4gIEl0CisgICAgIG1heSBmYWlsIChmb3IgaW5zdGFuY2UgaWYgdGhlIGNhY2hlIGlzIGJlaW5nIHdpdGhkcmF3bikgYnkgcmV0dXJuaW5nIE5VTEwuCisgICAgIEl0IHNob3VsZCByZXR1cm4gdGhlIG9iamVjdCBwb2ludGVyIGlmIHN1Y2Nlc3NmdWwuCisKKworICgqKSBMb2NrL1VubG9jayBvYmplY3QgW21hbmRhdG9yeV06CisKKwl2b2lkICgqbG9ja19vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCXZvaWQgKCp1bmxvY2tfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGV4Y2x1c2l2ZWx5IGxvY2sgYW4gb2JqZWN0LiAgSXQgbXVzdCBiZSBwb3NzaWJsZQorICAgICB0byBzY2hlZHVsZSB3aXRoIHRoZSBsb2NrIGhlbGQsIHNvIGEgc3BpbmxvY2sgaXNuJ3Qgc3VmZmljaWVudC4KKworCisgKCopIFBpbi9VbnBpbiBvYmplY3QgW29wdGlvbmFsXToKKworCWludCAoKnBpbl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCXZvaWQgKCp1bnBpbl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gcGluIGFuIG9iamVjdCBpbnRvIHRoZSBjYWNoZS4gIE9uY2UgcGlubmVkIGFuCisgICAgIG9iamVjdCBjYW5ub3QgYmUgcmVjbGFpbWVkIHRvIG1ha2Ugc3BhY2UuICBSZXR1cm4gLUVOT1NQQyBpZiB0aGVyZSdzIG5vdAorICAgICBlbm91Z2ggc3BhY2UgaW4gdGhlIGNhY2hlIHRvIHBlcm1pdCB0aGlzLgorCisKKyAoKikgVXBkYXRlIG9iamVjdCBbbWFuZGF0b3J5XToKKworCWludCAoKnVwZGF0ZV9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgaW5kZXggZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0LiAgVGhlCisgICAgIG5ldyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgaW4gb2JqZWN0LT5jb29raWUtPm5ldGZzX2RhdGEuICBUaGlzIGNhbiBiZQorICAgICBvYnRhaW5lZCBieSBjYWxsaW5nIG9iamVjdC0+Y29va2llLT5kZWYtPmdldF9hdXgoKS9nZXRfYXR0cigpLgorCisKKyAoKikgRGlzY2FyZCBvYmplY3QgW21hbmRhdG9yeV06CisKKwl2b2lkICgqZHJvcF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IGFuIG9iamVjdCBoYXMgYmVlbiB1bmJvdW5kIGZyb20gaXRzCisgICAgIGNvb2tpZSwgYW5kIHRoYXQgdGhlIGNhY2hlIHNob3VsZCByZWxlYXNlIHRoZSBvYmplY3QncyByZXNvdXJjZXMgYW5kCisgICAgIHJldGlyZSBpdCBpZiBpdCdzIGluIHN0YXRlIEZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORy4KKworICAgICBUaGlzIG1ldGhvZCBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVsZWFzZSBhbnkgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZQorICAgICBjYWxsZXIuICBUaGUgY2FsbGVyIHdpbGwgaW52b2tlIHRoZSBwdXRfb2JqZWN0KCkgbWV0aG9kIGFzIGFwcHJvcHJpYXRlLgorCisKKyAoKikgUmVsZWFzZSBvYmplY3QgcmVmZXJlbmNlIFttYW5kYXRvcnldOgorCisJdm9pZCAoKnB1dF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZGlzY2FyZCBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QuICBUaGUgb2JqZWN0IG1heQorICAgICBiZSBmcmVlZCB3aGVuIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBpdCBhcmUgcmVsZWFzZWQuCisKKworICgqKSBTeW5jaHJvbmlzZSBhIGNhY2hlIFttYW5kYXRvcnldOgorCisJdm9pZCAoKnN5bmMpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBhc2sgdGhlIGJhY2tlbmQgdG8gc3luY2hyb25pc2UgYSBjYWNoZSB3aXRoIGl0cyBiYWNraW5nCisgICAgIGRldmljZS4KKworCisgKCopIERpc3NvY2lhdGUgYSBjYWNoZSBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpkaXNzb2NpYXRlX3BhZ2VzKShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gYXNrIGEgY2FjaGUgdG8gcGVyZm9ybSBhbnkgcGFnZSBkaXNzb2NpYXRpb25zIGFzIHBhcnQgb2YKKyAgICAgY2FjaGUgd2l0aGRyYXdhbC4KKworCisgKCopIE5vdGlmaWNhdGlvbiB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9uIGEgbmV0ZnMgZmlsZSBjaGFuZ2VkIFttYW5kYXRvcnldOgorCisJaW50ICgqYXR0cl9jaGFuZ2VkKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdG8gdGhlIGNhY2hlIHRoYXQgY2VydGFpbiBhdHRyaWJ1dGVzIG9uIGEgbmV0ZnMKKyAgICAgZmlsZSBoYXZlIGNoYW5nZWQgKGZvciBleGFtcGxlIHRoZSBtYXhpbXVtIHNpemUgYSBmaWxlIG1heSByZWFjaCkuICBUaGUKKyAgICAgY2FjaGUgY2FuIHJlYWQgdGhlc2UgZnJvbSB0aGUgbmV0ZnMgYnkgY2FsbGluZyB0aGUgY29va2llJ3MgZ2V0X2F0dHIoKQorICAgICBtZXRob2QuCisKKyAgICAgVGhlIGNhY2hlIG1heSB1c2UgdGhlIGZpbGUgc2l6ZSBpbmZvcm1hdGlvbiB0byByZXNlcnZlIHNwYWNlIG9uIHRoZSBjYWNoZS4KKyAgICAgSXQgc2hvdWxkIGFsc28gY2FsbCBmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgpIHRvIGluZGljYXRlIHRvIEZTLUNhY2hlIHRoZQorICAgICBoaWdoZXN0IGJ5dGUgaXQncyB3aWxsaW5nIHRvIHN0b3JlIGZvciBhbiBvYmplY3QuCisKKyAgICAgVGhpcyBtZXRob2QgbWF5IHJldHVybiAtdmUgaWYgYW4gZXJyb3Igb2NjdXJyZWQgb3IgdGhlIGNhY2hlIG9iamVjdCBjYW5ub3QKKyAgICAgYmUgZXhwYW5kZWQuICBJbiBzdWNoIGEgY2FzZSwgdGhlIG9iamVjdCB3aWxsIGJlIHdpdGhkcmF3biBmcm9tIHNlcnZpY2UuCisKKyAgICAgVGhpcyBvcGVyYXRpb24gaXMgcnVuIGFzeW5jaHJvbm91c2x5IGZyb20gRlMtQ2FjaGUncyB0aHJlYWQgcG9vbCwgYW5kCisgICAgIHN0b3JhZ2UgYW5kIHJldHJpZXZhbCBvcGVyYXRpb25zIGZyb20gdGhlIG5ldGZzIGFyZSBleGNsdWRlZCBkdXJpbmcgdGhlCisgICAgIGV4ZWN1dGlvbiBvZiB0aGlzIG9wZXJhdGlvbi4KKworCisgKCopIFJlc2VydmUgY2FjaGUgc3BhY2UgZm9yIGFuIG9iamVjdCdzIGRhdGEgW29wdGlvbmFsXToKKworCWludCAoKnJlc2VydmVfc3BhY2UpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LCBsb2ZmX3Qgc2l6ZSk7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gcmVxdWVzdCB0aGF0IGNhY2hlIHNwYWNlIGJlIHJlc2VydmVkIHRvIGhvbGQgdGhlIGRhdGEKKyAgICAgZm9yIGFuIG9iamVjdCBhbmQgdGhlIG1ldGFkYXRhIHVzZWQgdG8gdHJhY2sgaXQuICBaZXJvIHNpemUgc2hvdWxkIGJlCisgICAgIHRha2VuIGFzIHJlcXVlc3QgdG8gY2FuY2VsIGEgcmVzZXJ2YXRpb24uCisKKyAgICAgVGhpcyBzaG91bGQgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLUVOT1NQQyBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UKKyAgICAgYXZhaWxhYmxlLCBvciAtRU5PTUVNIG9yIC1FSU8gb24gb3RoZXIgZXJyb3JzLgorCisgICAgIFRoZSByZXNlcnZhdGlvbiBtYXkgZXhjZWVkIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG9iamVjdCwgdGh1cyBwZXJtaXR0aW5nCisgICAgIGZ1dHVyZSBleHBhbnNpb24uICBJZiB0aGUgYW1vdW50IG9mIHNwYWNlIGNvbnN1bWVkIGJ5IGFuIG9iamVjdCB3b3VsZAorICAgICBleGNlZWQgdGhlIHJlc2VydmF0aW9uLCBpdCdzIHBlcm1pdHRlZCB0byByZWZ1c2UgcmVxdWVzdHMgdG8gYWxsb2NhdGUKKyAgICAgcGFnZXMsIGJ1dCBub3QgcmVxdWlyZWQuICBBbiBvYmplY3QgbWF5IGJlIHBydW5lZCBkb3duIHRvIGl0cyByZXNlcnZhdGlvbgorICAgICBzaXplIGlmIGxhcmdlciB0aGFuIHRoYXQgYWxyZWFkeS4KKworCisgKCopIFJlcXVlc3QgcGFnZSBiZSByZWFkIGZyb20gY2FjaGUgW21hbmRhdG9yeV06CisKKwlpbnQgKCpyZWFkX29yX2FsbG9jX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgIGdmcF90IGdmcCkKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBhdHRlbXB0IHRvIHJlYWQgYSBuZXRmcyBwYWdlIGZyb20gdGhlIGNhY2hlLCBvciB0bworICAgICByZXNlcnZlIGEgYmFja2luZyBibG9jayBpZiBub3QuICBGUy1DYWNoZSB3aWxsIGhhdmUgZG9uZSBhcyBtdWNoIGNoZWNraW5nCisgICAgIGFzIGl0IGNhbiBiZWZvcmUgY2FsbGluZywgYnV0IG1vc3Qgb2YgdGhlIHdvcmsgYmVsb25ncyB0byB0aGUgYmFja2VuZC4KKworICAgICBJZiB0aGVyZSdzIG5vIHBhZ2UgaW4gdGhlIGNhY2hlLCB0aGVuIC1FTk9EQVRBIHNob3VsZCBiZSByZXR1cm5lZCBpZiB0aGUKKyAgICAgYmFja2VuZCBtYW5hZ2VkIHRvIHJlc2VydmUgYSBiYWNraW5nIGJsb2NrOyAtRU5PQlVGUyBvciAtRU5PTUVNIGlmIGl0CisgICAgIGRpZG4ndC4KKworICAgICBJZiB0aGVyZSBpcyBzdWl0YWJsZSBkYXRhIGluIHRoZSBjYWNoZSwgdGhlbiBhIHJlYWQgb3BlcmF0aW9uIHNob3VsZCBiZQorICAgICBxdWV1ZWQgYW5kIDAgcmV0dXJuZWQuICBXaGVuIHRoZSByZWFkIGZpbmlzaGVzLCBmc2NhY2hlX2VuZF9pbygpIHNob3VsZCBiZQorICAgICBjYWxsZWQuCisKKyAgICAgVGhlIGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQoKSBzaG91bGQgYmUgY2FsbGVkIGZvciB0aGUgcGFnZSBpZiBhbnkgY2FjaGUKKyAgICAgbWV0YWRhdGEgaXMgcmV0YWluZWQuICBUaGlzIHdpbGwgaW5kaWNhdGUgdG8gdGhlIG5ldGZzIHRoYXQgdGhlIHBhZ2UgbmVlZHMKKyAgICAgZXhwbGljaXQgdW5jYWNoaW5nLiAgVGhpcyBvcGVyYXRpb24gdGFrZXMgYSBwYWdldmVjLCB0aHVzIGFsbG93aW5nIHNldmVyYWwKKyAgICAgcGFnZXMgdG8gYmUgbWFya2VkIGF0IG9uY2UuCisKKyAgICAgVGhlIHJldHJpZXZhbCByZWNvcmQgcG9pbnRlZCB0byBieSBvcCBzaG91bGQgYmUgcmV0YWluZWQgZm9yIGVhY2ggcGFnZQorICAgICBxdWV1ZWQgYW5kIHJlbGVhc2VkIHdoZW4gSS9PIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGZvcm1hbGx5IGVuZGVkLgorICAgICBmc2NhY2hlX2dldC9wdXRfcmV0cmlldmFsKCkgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBwdXJwb3NlLgorCisgICAgIFRoZSByZXRyaWV2YWwgcmVjb3JkIG1heSBiZSB1c2VkIHRvIGdldCBDUFUgdGltZSB2aWEgdGhlIEZTLUNhY2hlIHRocmVhZAorICAgICBwb29sLiAgSWYgdGhpcyBpcyBkZXNpcmVkLCB0aGUgb3AtPm9wLnByb2Nlc3NvciBzaG91bGQgYmUgc2V0IHRvIHBvaW50IHRvCisgICAgIHRoZSBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIHJvdXRpbmUsIGFuZCBmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKCkgc2hvdWxkCisgICAgIGJlIGNhbGxlZCBhdCBhbiBhcHByb3ByaWF0ZSBwb2ludCB0byByZXF1ZXN0IENQVSB0aW1lLiAgRm9yIGluc3RhbmNlLCB0aGUKKyAgICAgcmV0cmlldmFsIHJvdXRpbmUgY291bGQgYmUgZW5xdWV1ZWQgdXBvbiB0aGUgY29tcGxldGlvbiBvZiBhIGRpc2sgcmVhZC4KKyAgICAgVGhlIHRvX2RvIGZpZWxkIGluIHRoZSByZXRyaWV2YWwgcmVjb3JkIGlzIHByb3ZpZGVkIHRvIGFpZCBpbiB0aGlzLgorCisgICAgIElmIGFuIEkvTyBlcnJvciBvY2N1cnMsIGZzY2FjaGVfaW9fZXJyb3IoKSBzaG91bGQgYmUgY2FsbGVkIGFuZCAtRU5PQlVGUworICAgICByZXR1cm5lZCBpZiBwb3NzaWJsZSBvciBmc2NhY2hlX2VuZF9pbygpIGNhbGxlZCB3aXRoIGEgc3VpdGFibGUgZXJyb3IKKyAgICAgY29kZS4uCisKKworICgqKSBSZXF1ZXN0IHBhZ2VzIGJlIHJlYWQgZnJvbSBjYWNoZSBbbWFuZGF0b3J5XToKKworCWludCAoKnJlYWRfb3JfYWxsb2NfcGFnZXMpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJCSAgIGdmcF90IGdmcCkKKworICAgICBUaGlzIGlzIGxpa2UgdGhlIHJlYWRfb3JfYWxsb2NfcGFnZSgpIG1ldGhvZCwgZXhjZXB0IGl0IGlzIGhhbmRlZCBhIGxpc3QKKyAgICAgb2YgcGFnZXMgaW5zdGVhZCBvZiBvbmUgcGFnZS4gIEFueSBwYWdlcyBvbiB3aGljaCBhIHJlYWQgb3BlcmF0aW9uIGlzCisgICAgIHN0YXJ0ZWQgbXVzdCBiZSBhZGRlZCB0byB0aGUgcGFnZSBjYWNoZSBmb3IgdGhlIHNwZWNpZmllZCBtYXBwaW5nIGFuZCBhbHNvCisgICAgIHRvIHRoZSBMUlUuICBTdWNoIHBhZ2VzIG11c3QgYWxzbyBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VzIGxpc3QgYW5kCisgICAgICpucl9wYWdlcyBkZWNyZW1lbnRlZCBwZXIgcGFnZS4KKworICAgICBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igc3VjaCBhcyAtRU5PTUVNLCB0aGVuIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkOyBlbHNlCisgICAgIGlmIG9uZSBvciBtb3JlIHBhZ2VzIGNvdWxkbid0IGJlIHJlYWQgb3IgYWxsb2NhdGVkLCB0aGVuIC1FTk9CVUZTIHNob3VsZAorICAgICBiZSByZXR1cm5lZDsgZWxzZSBpZiBvbmUgb3IgbW9yZSBwYWdlcyBjb3VsZG4ndCBiZSByZWFkLCB0aGVuIC1FTk9EQVRBCisgICAgIHNob3VsZCBiZSByZXR1cm5lZC4gIElmIGFsbCB0aGUgcGFnZXMgYXJlIGRpc3BhdGNoZWQgdGhlbiAwIHNob3VsZCBiZQorICAgICByZXR1cm5lZC4KKworCisgKCopIFJlcXVlc3QgcGFnZSBiZSBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlIFttYW5kYXRvcnldOgorCisJaW50ICgqYWxsb2NhdGVfcGFnZSkoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgIGdmcF90IGdmcCkKKworICAgICBUaGlzIGlzIGxpa2UgdGhlIHJlYWRfb3JfYWxsb2NfcGFnZSgpIG1ldGhvZCwgZXhjZXB0IHRoYXQgaXQgc2hvdWxkbid0CisgICAgIHJlYWQgZnJvbSB0aGUgY2FjaGUsIGV2ZW4gaWYgdGhlcmUncyBkYXRhIHRoZXJlIHRoYXQgY291bGQgYmUgcmV0cmlldmVkLgorICAgICBJdCBzaG91bGQsIGhvd2V2ZXIsIHNldCB1cCBhbnkgaW50ZXJuYWwgbWV0YWRhdGEgcmVxdWlyZWQgc3VjaCB0aGF0CisgICAgIHRoZSB3cml0ZV9wYWdlKCkgbWV0aG9kIGNhbiB3cml0ZSB0byB0aGUgY2FjaGUuCisKKyAgICAgSWYgdGhlcmUncyBubyBiYWNraW5nIGJsb2NrIGF2YWlsYWJsZSwgdGhlbiAtRU5PQlVGUyBzaG91bGQgYmUgcmV0dXJuZWQKKyAgICAgKG9yIC1FTk9NRU0gaWYgdGhlcmUgd2VyZSBvdGhlciBwcm9ibGVtcykuICBJZiBhIGJsb2NrIGlzIHN1Y2Nlc3NmdWxseQorICAgICBhbGxvY2F0ZWQsIHRoZW4gdGhlIG5ldGZzIHBhZ2Ugc2hvdWxkIGJlIG1hcmtlZCBhbmQgMCByZXR1cm5lZC4KKworCisgKCopIFJlcXVlc3QgcGFnZXMgYmUgYWxsb2NhdGVkIGluIHRoZSBjYWNoZSBbbWFuZGF0b3J5XToKKworCWludCAoKmFsbG9jYXRlX3BhZ2VzKShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkgICAgICB1bnNpZ25lZCAqbnJfcGFnZXMsCisJCQkgICAgICBnZnBfdCBnZnApCisKKyAgICAgVGhpcyBpcyBhbiBtdWx0aXBsZSBwYWdlIHZlcnNpb24gb2YgdGhlIGFsbG9jYXRlX3BhZ2UoKSBtZXRob2QuICBwYWdlcyBhbmQKKyAgICAgbnJfcGFnZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgZm9yIHRoZSByZWFkX29yX2FsbG9jX3BhZ2VzKCkgbWV0aG9kLgorCisKKyAoKikgUmVxdWVzdCBwYWdlIGJlIHdyaXR0ZW4gdG8gY2FjaGUgW21hbmRhdG9yeV06CisKKwlpbnQgKCp3cml0ZV9wYWdlKShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCwKKwkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHdyaXRlIGZyb20gYSBwYWdlIG9uIHdoaWNoIHRoZXJlIHdhcyBhIHByZXZpb3VzbHkKKyAgICAgc3VjY2Vzc2Z1bCByZWFkX29yX2FsbG9jX3BhZ2UoKSBjYWxsIG9yIHNpbWlsYXIuICBGUy1DYWNoZSBmaWx0ZXJzIG91dAorICAgICBwYWdlcyB0aGF0IGRvbid0IGhhdmUgbWFwcGluZ3MuCisKKyAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIEZTLUNhY2hlIHRocmVhZCBwb29sLiAgSXQgaXMKKyAgICAgbm90IHJlcXVpcmVkIHRvIGFjdHVhbGx5IHN0b3JlIGFueXRoaW5nLCBwcm92aWRlZCAtRU5PREFUQSBpcyB0aGVuCisgICAgIHJldHVybmVkIHRvIHRoZSBuZXh0IHJlYWQgb2YgdGhpcyBwYWdlLgorCisgICAgIElmIGFuIGVycm9yIG9jY3VycmVkLCB0aGVuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBzaG91bGQgYmUgcmV0dXJuZWQsCisgICAgIG90aGVyd2lzZSB6ZXJvIHNob3VsZCBiZSByZXR1cm5lZC4gIEZTLUNhY2hlIHdpbGwgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24KKyAgICAgaW4gcmVzcG9uc2UgdG8gYW4gZXJyb3IsIHN1Y2ggYXMgd2l0aGRyYXdpbmcgdGhpcyBvYmplY3QuCisKKyAgICAgSWYgdGhpcyBtZXRob2QgcmV0dXJucyBzdWNjZXNzIHRoZW4gRlMtQ2FjaGUgd2lsbCBpbmZvcm0gdGhlIG5ldGZzCisgICAgIGFwcHJvcHJpYXRlbHkuCisKKworICgqKSBEaXNjYXJkIHJldGFpbmVkIHBlci1wYWdlIG1ldGFkYXRhIFttYW5kYXRvcnldOgorCisJdm9pZCAoKnVuY2FjaGVfcGFnZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsIHN0cnVjdCBwYWdlICpwYWdlKQorCisgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBuZXRmcyBwYWdlIGlzIGJlaW5nIGV2aWN0ZWQgZnJvbSB0aGUgcGFnZWNhY2hlLiAgVGhlCisgICAgIGNhY2hlIGJhY2tlbmQgc2hvdWxkIHRlYXIgZG93biBhbnkgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb3IgdHJhY2tpbmcgaXQKKyAgICAgbWFpbnRhaW5zIGZvciB0aGlzIHBhZ2UuCisKKworPT09PT09PT09PT09PT09PT09CitGUy1DQUNIRSBVVElMSVRJRVMKKz09PT09PT09PT09PT09PT09PQorCitGUy1DYWNoZSBwcm92aWRlcyBzb21lIHV0aWxpdGllcyB0aGF0IGEgY2FjaGUgYmFja2VuZCBtYXkgbWFrZSB1c2Ugb2Y6CisKKyAoKikgTm90ZSBvY2N1cnJlbmNlIG9mIGFuIEkvTyBlcnJvciBpbiBhIGNhY2hlOgorCisJdm9pZCBmc2NhY2hlX2lvX2Vycm9yKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKKworICAgICBUaGlzIHRlbGxzIEZTLUNhY2hlIHRoYXQgYW4gSS9PIGVycm9yIG9jY3VycmVkIGluIHRoZSBjYWNoZS4gIEFmdGVyIHRoaXMKKyAgICAgaGFzIGJlZW4gY2FsbGVkLCBvbmx5IHJlc291cmNlIGRpc3NvY2lhdGlvbiBvcGVyYXRpb25zIChvYmplY3QgYW5kIHBhZ2UKKyAgICAgcmVsZWFzZSkgd2lsbCBiZSBwYXNzZWQgZnJvbSB0aGUgbmV0ZnMgdG8gdGhlIGNhY2hlIGJhY2tlbmQgZm9yIHRoZQorICAgICBzcGVjaWZpZWQgY2FjaGUuCisKKyAgICAgVGhpcyBkb2VzIG5vdCBhY3R1YWxseSB3aXRoZHJhdyB0aGUgY2FjaGUuICBUaGF0IG11c3QgYmUgZG9uZSBzZXBhcmF0ZWx5LgorCisKKyAoKikgSW52b2tlIHRoZSByZXRyaWV2YWwgSS9PIGNvbXBsZXRpb24gZnVuY3Rpb246CisKKwl2b2lkIGZzY2FjaGVfZW5kX2lvKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIGludCBlcnJvcik7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gbm90ZSB0aGUgZW5kIG9mIGFuIGF0dGVtcHQgdG8gcmV0cmlldmUgYSBwYWdlLiAgVGhlCisgICAgIGVycm9yIHZhbHVlIHNob3VsZCBiZSAwIGlmIHN1Y2Nlc3NmdWwgYW5kIGFuIGVycm9yIG90aGVyd2lzZS4KKworCisgKCopIFNldCBoaWdoZXN0IHN0b3JlIGxpbWl0OgorCisJdm9pZCBmc2NhY2hlX3NldF9zdG9yZV9saW1pdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgIGxvZmZfdCBpX3NpemUpOworCisgICAgIFRoaXMgc2V0cyB0aGUgbGltaXQgRlMtQ2FjaGUgaW1wb3NlcyBvbiB0aGUgaGlnaGVzdCBieXRlIGl0J3Mgd2lsbGluZyB0bworICAgICB0cnkgYW5kIHN0b3JlIGZvciBhIG5ldGZzLiAgQW55IHBhZ2Ugb3ZlciB0aGlzIGxpbWl0IGlzIGF1dG9tYXRpY2FsbHkKKyAgICAgcmVqZWN0ZWQgYnkgZnNjYWNoZV9yZWFkX2FsbG9jX3BhZ2UoKSBhbmQgY28gd2l0aCAtRU5PQlVGUy4KKworCisgKCopIE1hcmsgcGFnZXMgYXMgYmVpbmcgY2FjaGVkOgorCisJdm9pZCBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJICAgICAgIHN0cnVjdCBwYWdldmVjICpwYWdldmVjKTsKKworICAgICBUaGlzIG1hcmtzIGEgc2V0IG9mIHBhZ2VzIGFzIGJlaW5nIGNhY2hlZC4gIEFmdGVyIHRoaXMgaGFzIGJlZW4gY2FsbGVkLAorICAgICB0aGUgbmV0ZnMgbXVzdCBjYWxsIGZzY2FjaGVfdW5jYWNoZV9wYWdlKCkgdG8gdW5tYXJrIHRoZSBwYWdlcy4KKworCisgKCopIFBlcmZvcm0gY29oZXJlbmN5IGNoZWNrIG9uIGFuIG9iamVjdDoKKworCWVudW0gZnNjYWNoZV9jaGVja2F1eCBmc2NhY2hlX2NoZWNrX2F1eChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJCWNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCQl1aW50MTZfdCBkYXRhbGVuKTsKKworICAgICBUaGlzIGFza3MgdGhlIG5ldGZzIHRvIHBlcmZvcm0gYSBjb2hlcmVuY3kgY2hlY2sgb24gYW4gb2JqZWN0IHRoYXQgaGFzCisgICAgIGp1c3QgYmVlbiBsb29rZWQgdXAuICBUaGUgY29va2llIGF0dGFjaGVkIHRvIHRoZSBvYmplY3Qgd2lsbCBkZXRlcm1pbmUgdGhlCisgICAgIG5ldGZzIHRvIHVzZS4gIGRhdGEgYW5kIGRhdGFsZW4gc2hvdWxkIHNwZWNpZnkgd2hlcmUgdGhlIGF1eGlsaWFyeSBkYXRhCisgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBjYWNoZSBjYW4gYmUgZm91bmQuCisKKyAgICAgT25lIG9mIHRocmVlIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkOgorCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWQorCisJICAgIFRoZSBjb2hlcmVuY3kgZGF0YSBpbmRpY2F0ZXMgdGhlIG9iamVjdCBpcyB2YWxpZCBhcyBpcy4KKworCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURQorCisJICAgIFRoZSBjb2hlcmVuY3kgZGF0YSBuZWVkcyB1cGRhdGluZywgYnV0IG90aGVyd2lzZSB0aGUgb2JqZWN0IGlzCisJICAgIHZhbGlkLgorCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEUKKworCSAgICBUaGUgY29oZXJlbmN5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIG9iamVjdCBpcyBvYnNvbGV0ZSBhbmQgc2hvdWxkCisJICAgIGJlIGRpc2NhcmRlZC4KKworCisgKCopIEluaXRpYWxpc2UgYSBmcmVzaGx5IGFsbG9jYXRlZCBvYmplY3Q6CisKKwl2b2lkIGZzY2FjaGVfb2JqZWN0X2luaXQoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisgICAgIFRoaXMgaW5pdGlhbGlzZXMgYWxsIHRoZSBmaWVsZHMgaW4gYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uLgorCisKKyAoKikgSW5kaWNhdGUgdGhlIGRlc3RydWN0aW9uIG9mIGFuIG9iamVjdDoKKworCXZvaWQgZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7CisKKyAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBpbmZvcm0gRlMtQ2FjaGUgdGhhdCBhbiBvYmplY3QgdGhhdCBiZWxvbmdlZCB0byBhCisgICAgIGNhY2hlIGhhcyBiZWVuIGRlc3Ryb3llZCBhbmQgZGVhbGxvY2F0ZWQuICBUaGlzIHdpbGwgYWxsb3cgY29udGludWF0aW9uCisgICAgIG9mIHRoZSBjYWNoZSB3aXRoZHJhd2FsIHByb2Nlc3Mgd2hlbiBpdCBpcyBzdG9wcGVkIHBlbmRpbmcgZGVzdHJ1Y3Rpb24gb2YKKyAgICAgYWxsIHRoZSBvYmplY3RzLgorCisKKyAoKikgSW5kaWNhdGUgbmVnYXRpdmUgbG9va3VwIG9uIGFuIG9iamVjdDoKKworCXZvaWQgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0byBGUy1DYWNoZSB0aGF0IGEgbG9va3VwIHByb2Nlc3MgZm9yIGFuIG9iamVjdAorICAgICBmb3VuZCBhIG5lZ2F0aXZlIHJlc3VsdC4KKworICAgICBUaGlzIGNoYW5nZXMgdGhlIHN0YXRlIG9mIGFuIG9iamVjdCB0byBwZXJtaXQgcmVhZHMgcGVuZGluZyBvbiBsb29rdXAKKyAgICAgY29tcGxldGlvbiB0byBnbyBvZmYgYW5kIHN0YXJ0IGZldGNoaW5nIGRhdGEgZnJvbSB0aGUgbmV0ZnMgc2VydmVyIGFzIGl0J3MKKyAgICAga25vd24gYXQgdGhpcyBwb2ludCB0aGF0IHRoZXJlIGNhbid0IGJlIGFueSBkYXRhIGluIHRoZSBjYWNoZS4KKworICAgICBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgb24gYW4gb2JqZWN0LiAgT25seSB0aGUgZmlyc3QgY2FsbCBpcworICAgICBzaWduaWZpY2FudCAtIGFsbCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBpZ25vcmVkLgorCisKKyAoKikgSW5kaWNhdGUgYW4gb2JqZWN0IGhhcyBiZWVuIG9idGFpbmVkOgorCisJdm9pZCBmc2NhY2hlX29idGFpbmVkX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gaW5kaWNhdGUgdG8gRlMtQ2FjaGUgdGhhdCBhIGxvb2t1cCBwcm9jZXNzIGZvciBhbiBvYmplY3QKKyAgICAgcHJvZHVjZWQgYSBwb3NpdGl2ZSByZXN1bHQsIG9yIHRoYXQgYW4gb2JqZWN0IHdhcyBjcmVhdGVkLiAgVGhpcyBzaG91bGQKKyAgICAgb25seSBiZSBjYWxsZWQgb25jZSBmb3IgYW55IHBhcnRpY3VsYXIgb2JqZWN0LgorCisgICAgIFRoaXMgY2hhbmdlcyB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0IHRvIGluZGljYXRlOgorCisJKDEpIGlmIG5vIGNhbGwgdG8gZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCkgaGFzIGJlZW4gbWFkZSBvbgorCSAgICB0aGlzIG9iamVjdCwgdGhhdCB0aGVyZSBtYXkgYmUgZGF0YSBhdmFpbGFibGUsIGFuZCB0aGF0IHJlYWRzIGNhbgorCSAgICBub3cgZ28gYW5kIGxvb2sgZm9yIGl0OyBhbmQKKworICAgICAgICAoMikgdGhhdCB3cml0ZXMgbWF5IG5vdyBwcm9jZWVkIGFnYWluc3QgdGhpcyBvYmplY3QuCisKKworICgqKSBJbmRpY2F0ZSB0aGF0IG9iamVjdCBsb29rdXAgZmFpbGVkOgorCisJdm9pZCBmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3Ioc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisgICAgIFRoaXMgbWFya3MgYW4gb2JqZWN0IGFzIGhhdmluZyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVycm9yICh1c3VhbGx5IEVJTykKKyAgICAgYW5kIGNhdXNlcyBpdCB0byBtb3ZlIGludG8gYSBzdGF0ZSB3aGVyZWJ5IGl0IHdpbGwgYmUgd2l0aGRyYXduIGFzIHNvb24KKyAgICAgYXMgcG9zc2libGUuCisKKworICgqKSBHZXQgYW5kIHJlbGVhc2UgcmVmZXJlbmNlcyBvbiBhIHJldHJpZXZhbCByZWNvcmQ6CisKKwl2b2lkIGZzY2FjaGVfZ2V0X3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKTsKKwl2b2lkIGZzY2FjaGVfcHV0X3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKTsKKworICAgICBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIHJldGFpbiBhIHJldHJpZXZhbCByZWNvcmQgd2hpbHN0IGRvaW5nCisgICAgIGFzeW5jaHJvbm91cyBkYXRhIHJldHJpZXZhbCBhbmQgYmxvY2sgYWxsb2NhdGlvbi4KKworCisgKCopIEVucXVldWUgYSByZXRyaWV2YWwgcmVjb3JkIGZvciBwcm9jZXNzaW5nLgorCisJdm9pZCBmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApOworCisgICAgIFRoaXMgZW5xdWV1ZXMgYSByZXRyaWV2YWwgcmVjb3JkIGZvciBwcm9jZXNzaW5nIGJ5IHRoZSBGUy1DYWNoZSB0aHJlYWQKKyAgICAgcG9vbC4gIE9uZSBvZiB0aGUgdGhyZWFkcyBpbiB0aGUgcG9vbCB3aWxsIGludm9rZSB0aGUgcmV0cmlldmFsIHJlY29yZCdzCisgICAgIG9wLT5vcC5wcm9jZXNzb3IgY2FsbGJhY2sgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbQorICAgICB3aXRoaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorCisKKyAoKikgTGlzdCBvZiBvYmplY3Qgc3RhdGUgbmFtZXM6CisKKwljb25zdCBjaGFyICpmc2NhY2hlX29iamVjdF9zdGF0ZXNbXTsKKworICAgICBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB0aGlzIG1heSBiZSB1c2VkIHRvIHR1cm4gdGhlIHN0YXRlIHRoYXQgYW4gb2JqZWN0CisgICAgIGlzIGluIGludG8gYSB0ZXh0IHN0cmluZyBmb3IgZGlzcGxheSBwdXJwb3Nlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzhhNDliCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0CkBAIC0wLDAgKzEsNTAxIEBACisJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgICAgIENhY2hlRmlsZXM6IENBQ0hFIE9OIEFMUkVBRFkgTU9VTlRFRCBGSUxFU1lTVEVNCisJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbnRzOgorCisgKCopIE92ZXJ2aWV3LgorCisgKCopIFJlcXVpcmVtZW50cy4KKworICgqKSBDb25maWd1cmF0aW9uLgorCisgKCopIFN0YXJ0aW5nIHRoZSBjYWNoZS4KKworICgqKSBUaGluZ3MgdG8gYXZvaWQuCisKKyAoKikgQ2FjaGUgY3VsbGluZy4KKworICgqKSBDYWNoZSBzdHJ1Y3R1cmUuCisKKyAoKikgU2VjdXJpdHkgbW9kZWwgYW5kIFNFTGludXguCisKKyAoKikgQSBub3RlIG9uIHNlY3VyaXR5LgorCisgKCopIFN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLgorCisgKCopIERlYnVnZ2luZy4KKworCis9PT09PT09PQorT1ZFUlZJRVcKKz09PT09PT09CisKK0NhY2hlRmlsZXMgaXMgYSBjYWNoaW5nIGJhY2tlbmQgdGhhdCdzIG1lYW50IHRvIHVzZSBhcyBhIGNhY2hlIGEgZGlyZWN0b3J5IG9uCithbiBhbHJlYWR5IG1vdW50ZWQgZmlsZXN5c3RlbSBvZiBhIGxvY2FsIHR5cGUgKHN1Y2ggYXMgRXh0MykuCisKK0NhY2hlRmlsZXMgdXNlcyBhIHVzZXJzcGFjZSBkYWVtb24gdG8gZG8gc29tZSBvZiB0aGUgY2FjaGUgbWFuYWdlbWVudCAtIHN1Y2ggYXMKK3JlYXBpbmcgc3RhbGUgbm9kZXMgYW5kIGN1bGxpbmcuICBUaGlzIGlzIGNhbGxlZCBjYWNoZWZpbGVzZCBhbmQgbGl2ZXMgaW4KKy9zYmluLgorCitUaGUgZmlsZXN5c3RlbSBhbmQgZGF0YSBpbnRlZ3JpdHkgb2YgdGhlIGNhY2hlIGFyZSBvbmx5IGFzIGdvb2QgYXMgdGhvc2Ugb2YgdGhlCitmaWxlc3lzdGVtIHByb3ZpZGluZyB0aGUgYmFja2luZyBzZXJ2aWNlcy4gIE5vdGUgdGhhdCBDYWNoZUZpbGVzIGRvZXMgbm90CithdHRlbXB0IHRvIGpvdXJuYWwgYW55dGhpbmcgc2luY2UgdGhlIGpvdXJuYWxsaW5nIGludGVyZmFjZXMgb2YgdGhlIHZhcmlvdXMKK2ZpbGVzeXN0ZW1zIGFyZSB2ZXJ5IHNwZWNpZmljIGluIG5hdHVyZS4KKworQ2FjaGVGaWxlcyBjcmVhdGVzIGEgbWlzYyBjaGFyYWN0ZXIgZGV2aWNlIC0gIi9kZXYvY2FjaGVmaWxlcyIgLSB0aGF0IGlzIHVzZWQKK3RvIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZGFlbW9uLiAgT25seSBvbmUgdGhpbmcgbWF5IGhhdmUgdGhpcyBvcGVuIGF0IG9uY2UsCithbmQgd2hpbHN0IGl0IGlzIG9wZW4sIGEgY2FjaGUgaXMgYXQgbGVhc3QgcGFydGlhbGx5IGluIGV4aXN0ZW5jZS4gIFRoZSBkYWVtb24KK29wZW5zIHRoaXMgYW5kIHNlbmRzIGNvbW1hbmRzIGRvd24gaXQgdG8gY29udHJvbCB0aGUgY2FjaGUuCisKK0NhY2hlRmlsZXMgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gYSBzaW5nbGUgY2FjaGUuCisKK0NhY2hlRmlsZXMgYXR0ZW1wdHMgdG8gbWFpbnRhaW4gYXQgbGVhc3QgYSBjZXJ0YWluIHBlcmNlbnRhZ2Ugb2YgZnJlZSBzcGFjZSBvbgordGhlIGZpbGVzeXN0ZW0sIHNocmlua2luZyB0aGUgY2FjaGUgYnkgY3VsbGluZyB0aGUgb2JqZWN0cyBpdCBjb250YWlucyB0byBtYWtlCitzcGFjZSBpZiBuZWNlc3NhcnkgLSBzZWUgdGhlICJDYWNoZSBDdWxsaW5nIiBzZWN0aW9uLiAgVGhpcyBtZWFucyBpdCBjYW4gYmUKK3BsYWNlZCBvbiB0aGUgc2FtZSBtZWRpdW0gYXMgYSBsaXZlIHNldCBvZiBkYXRhLCBhbmQgd2lsbCBleHBhbmQgdG8gbWFrZSB1c2Ugb2YKK3NwYXJlIHNwYWNlIGFuZCBhdXRvbWF0aWNhbGx5IGNvbnRyYWN0IHdoZW4gdGhlIHNldCBvZiBkYXRhIHJlcXVpcmVzIG1vcmUKK3NwYWNlLgorCisKKz09PT09PT09PT09PQorUkVRVUlSRU1FTlRTCis9PT09PT09PT09PT0KKworVGhlIHVzZSBvZiBDYWNoZUZpbGVzIGFuZCBpdHMgZGFlbW9uIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgdG8gYmUKK2F2YWlsYWJsZSBpbiB0aGUgc3lzdGVtIGFuZCBpbiB0aGUgY2FjaGUgZmlsZXN5c3RlbToKKworCS0gZG5vdGlmeS4KKworCS0gZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKS4KKworCS0gb3BlbmF0KCkgYW5kIGZyaWVuZHMuCisKKwktIGJtYXAoKSBzdXBwb3J0IG9uIGZpbGVzIGluIHRoZSBmaWxlc3lzdGVtIChGSUJNQVAgaW9jdGwpLgorCisJLSBUaGUgdXNlIG9mIGJtYXAoKSB0byBkZXRlY3QgYSBwYXJ0aWFsIHBhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKworSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgImRpcl9pbmRleCIgb3B0aW9uIGlzIGVuYWJsZWQgb24gRXh0MworZmlsZXN5c3RlbXMgYmVpbmcgdXNlZCBhcyBhIGNhY2hlLgorCisKKz09PT09PT09PT09PT0KK0NPTkZJR1VSQVRJT04KKz09PT09PT09PT09PT0KKworVGhlIGNhY2hlIGlzIGNvbmZpZ3VyZWQgYnkgYSBzY3JpcHQgaW4gL2V0Yy9jYWNoZWZpbGVzZC5jb25mLiAgVGhlc2UgY29tbWFuZHMKK3NldCB1cCBjYWNoZSByZWFkeSBmb3IgdXNlLiAgVGhlIGZvbGxvd2luZyBzY3JpcHQgY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKKworICgqKSBicnVuIDxOPiUKKyAoKikgYmN1bGwgPE4+JQorICgqKSBic3RvcCA8Tj4lCisgKCopIGZydW4gPE4+JQorICgqKSBmY3VsbCA8Tj4lCisgKCopIGZzdG9wIDxOPiUKKworCUNvbmZpZ3VyZSB0aGUgY3VsbGluZyBsaW1pdHMuICBPcHRpb25hbC4gIFNlZSB0aGUgc2VjdGlvbiBvbiBjdWxsaW5nCisJVGhlIGRlZmF1bHRzIGFyZSA3JSAocnVuKSwgNSUgKGN1bGwpIGFuZCAxJSAoc3RvcCkgcmVzcGVjdGl2ZWx5LgorCisJVGhlIGNvbW1hbmRzIGJlZ2lubmluZyB3aXRoIGEgJ2InIGFyZSBmaWxlIHNwYWNlIChibG9jaykgbGltaXRzLCB0aG9zZQorCWJlZ2lubmluZyB3aXRoIGFuICdmJyBhcmUgZmlsZSBjb3VudCBsaW1pdHMuCisKKyAoKikgZGlyIDxwYXRoPgorCisJU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlLiAgTWFuZGF0b3J5LgorCisgKCopIHRhZyA8bmFtZT4KKworCVNwZWNpZnkgYSB0YWcgdG8gRlMtQ2FjaGUgdG8gdXNlIGluIGRpc3Rpbmd1aXNoaW5nIG11bHRpcGxlIGNhY2hlcy4KKwlPcHRpb25hbC4gIFRoZSBkZWZhdWx0IGlzICJDYWNoZUZpbGVzIi4KKworICgqKSBkZWJ1ZyA8bWFzaz4KKworCVNwZWNpZnkgYSBudW1lcmljIGJpdG1hc2sgdG8gY29udHJvbCBkZWJ1Z2dpbmcgaW4gdGhlIGtlcm5lbCBtb2R1bGUuCisJT3B0aW9uYWwuICBUaGUgZGVmYXVsdCBpcyB6ZXJvIChhbGwgb2ZmKS4gIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGNhbiBiZQorCU9SJ2QgaW50byB0aGUgbWFzayB0byBjb2xsZWN0IHZhcmlvdXMgaW5mb3JtYXRpb246CisKKwkJMQlUdXJuIG9uIHRyYWNlIG9mIGZ1bmN0aW9uIGVudHJ5IChfZW50ZXIoKSBtYWNyb3MpCisJCTIJVHVybiBvbiB0cmFjZSBvZiBmdW5jdGlvbiBleGl0IChfbGVhdmUoKSBtYWNyb3MpCisJCTQJVHVybiBvbiB0cmFjZSBvZiBpbnRlcm5hbCBkZWJ1ZyBwb2ludHMgKF9kZWJ1ZygpKQorCisJVGhpcyBtYXNrIGNhbiBhbHNvIGJlIHNldCB0aHJvdWdoIHN5c2ZzLCBlZzoKKworCQllY2hvIDUgPi9zeXMvbW9kdWxlcy9jYWNoZWZpbGVzL3BhcmFtZXRlcnMvZGVidWcKKworCis9PT09PT09PT09PT09PT09PT0KK1NUQVJUSU5HIFRIRSBDQUNIRQorPT09PT09PT09PT09PT09PT09CisKK1RoZSBjYWNoZSBpcyBzdGFydGVkIGJ5IHJ1bm5pbmcgdGhlIGRhZW1vbi4gIFRoZSBkYWVtb24gb3BlbnMgdGhlIGNhY2hlIGRldmljZSwKK2NvbmZpZ3VyZXMgdGhlIGNhY2hlIGFuZCB0ZWxscyBpdCB0byBiZWdpbiBjYWNoaW5nLiAgQXQgdGhhdCBwb2ludCB0aGUgY2FjaGUKK2JpbmRzIHRvIGZzY2FjaGUgYW5kIHRoZSBjYWNoZSBiZWNvbWVzIGxpdmUuCisKK1RoZSBkYWVtb24gaXMgcnVuIGFzIGZvbGxvd3M6CisKKwkvc2Jpbi9jYWNoZWZpbGVzZCBbLWRdKiBbLXNdIFstbl0gWy1mIDxjb25maWdmaWxlPl0KKworVGhlIGZsYWdzIGFyZToKKworICgqKSAtZAorCisJSW5jcmVhc2UgdGhlIGRlYnVnZ2luZyBsZXZlbC4gIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyBhbmQKKwlpcyBjdW11bGF0aXZlIHdpdGggaXRzZWxmLgorCisgKCopIC1zCisKKwlTZW5kIG1lc3NhZ2VzIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN5c2xvZy4KKworICgqKSAtbgorCisJRG9uJ3QgZGFlbW9uaXNlIGFuZCBnbyBpbnRvIGJhY2tncm91bmQuCisKKyAoKikgLWYgPGNvbmZpZ2ZpbGU+CisKKwlVc2UgYW4gYWx0ZXJuYXRpdmUgY29uZmlndXJhdGlvbiBmaWxlIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IG9uZS4KKworCis9PT09PT09PT09PT09PT0KK1RISU5HUyBUTyBBVk9JRAorPT09PT09PT09PT09PT09CisKK0RvIG5vdCBtb3VudCBvdGhlciB0aGluZ3Mgd2l0aGluIHRoZSBjYWNoZSBhcyB0aGlzIHdpbGwgY2F1c2UgcHJvYmxlbXMuICBUaGUKK2tlcm5lbCBtb2R1bGUgY29udGFpbnMgaXRzIG93biB2ZXJ5IGN1dC1kb3duIHBhdGggd2Fsa2luZyBmYWNpbGl0eSB0aGF0IGlnbm9yZXMKK21vdW50cG9pbnRzLCBidXQgdGhlIGRhZW1vbiBjYW4ndCBhdm9pZCB0aGVtLgorCitEbyBub3QgY3JlYXRlLCByZW5hbWUgb3IgdW5saW5rIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgY2FjaGUgd2hpbHN0IHRoZQorY2FjaGUgaXMgYWN0aXZlLCBhcyB0aGlzIG1heSBjYXVzZSB0aGUgc3RhdGUgdG8gYmVjb21lIHVuY2VydGFpbi4KKworUmVuYW1pbmcgZmlsZXMgaW4gdGhlIGNhY2hlIG1pZ2h0IG1ha2Ugb2JqZWN0cyBhcHBlYXIgdG8gYmUgb3RoZXIgb2JqZWN0cyAodGhlCitmaWxlbmFtZSBpcyBwYXJ0IG9mIHRoZSBsb29rdXAga2V5KS4KKworRG8gbm90IGNoYW5nZSBvciByZW1vdmUgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gY2FjaGUgZmlsZXMgYnkgdGhlCitjYWNoZSBhcyB0aGlzIHdpbGwgY2F1c2UgdGhlIGNhY2hlIHN0YXRlIG1hbmFnZW1lbnQgdG8gZ2V0IGNvbmZ1c2VkLgorCitEbyBub3QgY3JlYXRlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGluIHRoZSBjYWNoZSwgbGVzdCB0aGUgY2FjaGUgZ2V0IGNvbmZ1c2VkIG9yCitzZXJ2ZSBpbmNvcnJlY3QgZGF0YS4KKworRG8gbm90IGNobW9kIGZpbGVzIGluIHRoZSBjYWNoZS4gIFRoZSBtb2R1bGUgY3JlYXRlcyB0aGluZ3Mgd2l0aCBtaW5pbWFsCitwZXJtaXNzaW9ucyB0byBwcmV2ZW50IHJhbmRvbSB1c2VycyBiZWluZyBhYmxlIHRvIGFjY2VzcyB0aGVtIGRpcmVjdGx5LgorCisKKz09PT09PT09PT09PT0KK0NBQ0hFIENVTExJTkcKKz09PT09PT09PT09PT0KKworVGhlIGNhY2hlIG1heSBuZWVkIGN1bGxpbmcgb2NjYXNpb25hbGx5IHRvIG1ha2Ugc3BhY2UuICBUaGlzIGludm9sdmVzCitkaXNjYXJkaW5nIG9iamVjdHMgZnJvbSB0aGUgY2FjaGUgdGhhdCBoYXZlIGJlZW4gdXNlZCBsZXNzIHJlY2VudGx5IHRoYW4KK2FueXRoaW5nIGVsc2UuICBDdWxsaW5nIGlzIGJhc2VkIG9uIHRoZSBhY2Nlc3MgdGltZSBvZiBkYXRhIG9iamVjdHMuICBFbXB0eQorZGlyZWN0b3JpZXMgYXJlIGN1bGxlZCBpZiBub3QgaW4gdXNlLgorCitDYWNoZSBjdWxsaW5nIGlzIGRvbmUgb24gdGhlIGJhc2lzIG9mIHRoZSBwZXJjZW50YWdlIG9mIGJsb2NrcyBhbmQgdGhlCitwZXJjZW50YWdlIG9mIGZpbGVzIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLiAgVGhlcmUgYXJlIHNpeAorImxpbWl0cyI6CisKKyAoKikgYnJ1bgorICgqKSBmcnVuCisKKyAgICAgSWYgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGFuZCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlcyBpbiB0aGUgY2FjaGUKKyAgICAgcmlzZXMgYWJvdmUgYm90aCB0aGVzZSBsaW1pdHMsIHRoZW4gY3VsbGluZyBpcyB0dXJuZWQgb2ZmLgorCisgKCopIGJjdWxsCisgKCopIGZjdWxsCisKKyAgICAgSWYgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgc3BhY2Ugb3IgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZmlsZXMgaW4gdGhlCisgICAgIGNhY2hlIGZhbGxzIGJlbG93IGVpdGhlciBvZiB0aGVzZSBsaW1pdHMsIHRoZW4gY3VsbGluZyBpcyBzdGFydGVkLgorCisgKCopIGJzdG9wCisgKCopIGZzdG9wCisKKyAgICAgSWYgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgc3BhY2Ugb3IgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgZmlsZXMgaW4gdGhlCisgICAgIGNhY2hlIGZhbGxzIGJlbG93IGVpdGhlciBvZiB0aGVzZSBsaW1pdHMsIHRoZW4gbm8gZnVydGhlciBhbGxvY2F0aW9uIG9mCisgICAgIGRpc2sgc3BhY2Ugb3IgZmlsZXMgaXMgcGVybWl0dGVkIHVudGlsIGN1bGxpbmcgaGFzIHJhaXNlZCB0aGluZ3MgYWJvdmUKKyAgICAgdGhlc2UgbGltaXRzIGFnYWluLgorCitUaGVzZSBtdXN0IGJlIGNvbmZpZ3VyZWQgdGh1c2x5OgorCisJMCA8PSBic3RvcCA8IGJjdWxsIDwgYnJ1biA8IDEwMAorCTAgPD0gZnN0b3AgPCBmY3VsbCA8IGZydW4gPCAxMDAKKworTm90ZSB0aGF0IHRoZXNlIGFyZSBwZXJjZW50YWdlcyBvZiBhdmFpbGFibGUgc3BhY2UgYW5kIGF2YWlsYWJsZSBmaWxlcywgYW5kIGRvCitfbm90XyBhcHBlYXIgYXMgMTAwIG1pbnVzIHRoZSBwZXJjZW50YWdlIGRpc3BsYXllZCBieSB0aGUgImRmIiBwcm9ncmFtLgorCitUaGUgdXNlcnNwYWNlIGRhZW1vbiBzY2FucyB0aGUgY2FjaGUgdG8gYnVpbGQgdXAgYSB0YWJsZSBvZiBjdWxsYWJsZSBvYmplY3RzLgorVGhlc2UgYXJlIHRoZW4gY3VsbGVkIGluIGxlYXN0IHJlY2VudGx5IHVzZWQgb3JkZXIuICBBIG5ldyBzY2FuIG9mIHRoZSBjYWNoZSBpcworc3RhcnRlZCBhcyBzb29uIGFzIHNwYWNlIGlzIG1hZGUgaW4gdGhlIHRhYmxlLiAgT2JqZWN0cyB3aWxsIGJlIHNraXBwZWQgaWYKK3RoZWlyIGF0aW1lcyBoYXZlIGNoYW5nZWQgb3IgaWYgdGhlIGtlcm5lbCBtb2R1bGUgc2F5cyBpdCBpcyBzdGlsbCB1c2luZyB0aGVtLgorCisKKz09PT09PT09PT09PT09PQorQ0FDSEUgU1RSVUNUVVJFCis9PT09PT09PT09PT09PT0KKworVGhlIENhY2hlRmlsZXMgbW9kdWxlIHdpbGwgY3JlYXRlIHR3byBkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5IGl0IHdhcworZ2l2ZW46CisKKyAoKikgY2FjaGUvCisKKyAoKikgZ3JhdmV5YXJkLworCitUaGUgYWN0aXZlIGNhY2hlIG9iamVjdHMgYWxsIHJlc2lkZSBpbiB0aGUgZmlyc3QgZGlyZWN0b3J5LiAgVGhlIENhY2hlRmlsZXMKK2tlcm5lbCBtb2R1bGUgbW92ZXMgYW55IHJldGlyZWQgb3IgY3VsbGVkIG9iamVjdHMgdGhhdCBpdCBjYW4ndCBzaW1wbHkgdW5saW5rCit0byB0aGUgZ3JhdmV5YXJkIGZyb20gd2hpY2ggdGhlIGRhZW1vbiB3aWxsIGFjdHVhbGx5IGRlbGV0ZSB0aGVtLgorCitUaGUgZGFlbW9uIHVzZXMgZG5vdGlmeSB0byBtb25pdG9yIHRoZSBncmF2ZXlhcmQgZGlyZWN0b3J5LCBhbmQgd2lsbCBkZWxldGUKK2FueXRoaW5nIHRoYXQgYXBwZWFycyB0aGVyZWluLgorCisKK1RoZSBtb2R1bGUgcmVwcmVzZW50cyBpbmRleCBvYmplY3RzIGFzIGRpcmVjdG9yaWVzIHdpdGggdGhlIGZpbGVuYW1lICJJLi4uIiBvcgorIkouLi4iLiAgTm90ZSB0aGF0IHRoZSAiY2FjaGUvIiBkaXJlY3RvcnkgaXMgaXRzZWxmIGEgc3BlY2lhbCBpbmRleC4KKworRGF0YSBvYmplY3RzIGFyZSByZXByZXNlbnRlZCBhcyBmaWxlcyBpZiB0aGV5IGhhdmUgbm8gY2hpbGRyZW4sIG9yIGRpcmVjdG9yaWVzCitpZiB0aGV5IGRvLiAgVGhlaXIgZmlsZW5hbWVzIGFsbCBiZWdpbiAiRC4uLiIgb3IgIkUuLi4iLiAgSWYgcmVwcmVzZW50ZWQgYXMgYQorZGlyZWN0b3J5LCBkYXRhIG9iamVjdHMgd2lsbCBoYXZlIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGNhbGxlZCAiZGF0YSIgdGhhdAorYWN0dWFsbHkgaG9sZHMgdGhlIGRhdGEuCisKK1NwZWNpYWwgb2JqZWN0cyBhcmUgc2ltaWxhciB0byBkYXRhIG9iamVjdHMsIGV4Y2VwdCB0aGVpciBmaWxlbmFtZXMgYmVnaW4KKyJTLi4uIiBvciAiVC4uLiIuCisKKworSWYgYW4gb2JqZWN0IGhhcyBjaGlsZHJlbiwgdGhlbiBpdCB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIGEgZGlyZWN0b3J5LgorSW1tZWRpYXRlbHkgaW4gdGhlIHJlcHJlc2VudGF0aXZlIGRpcmVjdG9yeSBhcmUgYSBjb2xsZWN0aW9uIG9mIGRpcmVjdG9yaWVzCituYW1lZCBmb3IgaGFzaCB2YWx1ZXMgb2YgdGhlIGNoaWxkIG9iamVjdCBrZXlzIHdpdGggYW4gJ0AnIHByZXBlbmRlZC4gIEludG8KK3RoaXMgZGlyZWN0b3J5LCBpZiBwb3NzaWJsZSwgd2lsbCBiZSBwbGFjZWQgdGhlIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgY2hpbGQKK29iamVjdHM6CisKKwlJTkRFWCAgICAgSU5ERVggICAgICBJTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQSBGSUxFUworCT09PT09PT09PSA9PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09CisJY2FjaGUvQDRhL0kwM25mcy9AMzAvSmkwMDAwMDAwMDAwMDAwMDAtLWZIZzhoaTg0MDAKKwljYWNoZS9ANGEvSTAzbmZzL0AzMC9KaTAwMDAwMDAwMDAwMDAwMC0tZkhnOGhpODQwMC9ANzUvRXMwZzAwMHcuLi5EQjFyeQorCWNhY2hlL0A0YS9JMDNuZnMvQDMwL0ppMDAwMDAwMDAwMDAwMDAwLS1mSGc4aGk4NDAwL0A3NS9FczBnMDAwdy4uLk4yMnJ5CisJY2FjaGUvQDRhL0kwM25mcy9AMzAvSmkwMDAwMDAwMDAwMDAwMDAtLWZIZzhoaTg0MDAvQDc1L0VzMGcwMDB3Li4uRlAxcnkKKworCitJZiB0aGUga2V5IGlzIHNvIGxvbmcgdGhhdCBpdCBleGNlZWRzIE5BTUVfTUFYIHdpdGggdGhlIGRlY29yYXRpb25zIGFkZGVkIG9uIHRvCitpdCwgdGhlbiBpdCB3aWxsIGJlIGN1dCBpbnRvIHBpZWNlcywgdGhlIGZpcnN0IGZldyBvZiB3aGljaCB3aWxsIGJlIHVzZWQgdG8KK21ha2UgYSBuZXN0IG9mIGRpcmVjdG9yaWVzLCBhbmQgdGhlIGxhc3Qgb25lIG9mIHdoaWNoIHdpbGwgYmUgdGhlIG9iamVjdHMKK2luc2lkZSB0aGUgbGFzdCBkaXJlY3RvcnkuICBUaGUgbmFtZXMgb2YgdGhlIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyB3aWxsIGhhdmUKKycrJyBwcmVwZW5kZWQ6CisKKwlKMTIyMy9AMjMvK3h5Li4uei8ra2wuLi5tL0VwcXIKKworCitOb3RlIHRoYXQga2V5cyBhcmUgcmF3IGRhdGEsIGFuZCBub3Qgb25seSBtYXkgdGhleSBleGNlZWQgTkFNRV9NQVggaW4gc2l6ZSwKK3RoZXkgbWF5IGFsc28gY29udGFpbiB0aGluZ3MgbGlrZSAnLycgYW5kIE5VTCBjaGFyYWN0ZXJzLCBhbmQgc28gdGhleSBtYXkgbm90CitiZSBzdWl0YWJsZSBmb3IgdHVybmluZyBkaXJlY3RseSBpbnRvIGEgZmlsZW5hbWUuCisKK1RvIGhhbmRsZSB0aGlzLCBDYWNoZUZpbGVzIHdpbGwgdXNlIGEgc3VpdGFibHkgcHJpbnRhYmxlIGZpbGVuYW1lIGRpcmVjdGx5IGFuZAorImJhc2UtNjQiIGVuY29kZSBvbmVzIHRoYXQgYXJlbid0IGRpcmVjdGx5IHN1aXRhYmxlLiAgVGhlIHR3byB2ZXJzaW9ucyBvZgorb2JqZWN0IGZpbGVuYW1lcyBpbmRpY2F0ZSB0aGUgZW5jb2Rpbmc6CisKKwlPQkpFQ1QgVFlQRQlQUklOVEFCTEUJRU5DT0RFRAorCT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09CisJSW5kZXgJCSJJLi4uIgkJIkouLi4iCisJRGF0YQkJIkQuLi4iCQkiRS4uLiIKKwlTcGVjaWFsCQkiUy4uLiIJCSJULi4uIgorCitJbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgYXJlIGFsd2F5cyAiQCIgb3IgIisiIGFzIGFwcHJvcHJpYXRlLgorCisKK0VhY2ggb2JqZWN0IGluIHRoZSBjYWNoZSBoYXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGxhYmVsIHRoYXQgaG9sZHMgdGhlIG9iamVjdAordHlwZSBJRCAocmVxdWlyZWQgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbCBvYmplY3RzKSBhbmQgdGhlIGF1eGlsaWFyeSBkYXRhIGZyb20KK3RoZSBuZXRmcy4gIFRoZSBsYXR0ZXIgaXMgdXNlZCB0byBkZXRlY3Qgc3RhbGUgb2JqZWN0cyBpbiB0aGUgY2FjaGUgYW5kIHVwZGF0ZQorb3IgcmV0aXJlIHRoZW0uCisKKworTm90ZSB0aGF0IENhY2hlRmlsZXMgd2lsbCBlcmFzZSBmcm9tIHRoZSBjYWNoZSBhbnkgZmlsZSBpdCBkb2Vzbid0IHJlY29nbmlzZSBvcgorYW55IGZpbGUgb2YgYW4gaW5jb3JyZWN0IHR5cGUgKHN1Y2ggYXMgYSBGSUZPIGZpbGUgb3IgYSBkZXZpY2UgZmlsZSkuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFQ1VSSVRZIE1PREVMIEFORCBTRUxJTlVYCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWNoZUZpbGVzIGlzIGltcGxlbWVudGVkIHRvIGRlYWwgcHJvcGVybHkgd2l0aCB0aGUgTFNNIHNlY3VyaXR5IGZlYXR1cmVzIG9mCit0aGUgTGludXgga2VybmVsIGFuZCB0aGUgU0VMaW51eCBmYWNpbGl0eS4KKworT25lIG9mIHRoZSBwcm9ibGVtcyB0aGF0IENhY2hlRmlsZXMgZmFjZXMgaXMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWN0aW5nIG9uCitiZWhhbGYgb2YgYSBwcm9jZXNzLCBhbmQgcnVubmluZyBpbiB0aGF0IHByb2Nlc3MncyBjb250ZXh0LCBhbmQgdGhhdCBpbmNsdWRlcyBhCitzZWN1cml0eSBjb250ZXh0IHRoYXQgaXMgbm90IGFwcHJvcHJpYXRlIGZvciBhY2Nlc3NpbmcgdGhlIGNhY2hlIC0gZWl0aGVyCitiZWNhdXNlIHRoZSBmaWxlcyBpbiB0aGUgY2FjaGUgYXJlIGluYWNjZXNzaWJsZSB0byB0aGF0IHByb2Nlc3MsIG9yIGJlY2F1c2UgaWYKK3RoZSBwcm9jZXNzIGNyZWF0ZXMgYSBmaWxlIGluIHRoZSBjYWNoZSwgdGhhdCBmaWxlIG1heSBiZSBpbmFjY2Vzc2libGUgdG8gb3RoZXIKK3Byb2Nlc3Nlcy4KKworVGhlIHdheSBDYWNoZUZpbGVzIHdvcmtzIGlzIHRvIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgc2VjdXJpdHkgY29udGV4dCAoZnN1aWQsCitmc2dpZCBhbmQgYWN0b3Igc2VjdXJpdHkgbGFiZWwpIHRoYXQgdGhlIHByb2Nlc3MgYWN0cyBhcyAtIHdpdGhvdXQgY2hhbmdpbmcgdGhlCitzZWN1cml0eSBjb250ZXh0IG9mIHRoZSBwcm9jZXNzIHdoZW4gaXQgdGhlIHRhcmdldCBvZiBhbiBvcGVyYXRpb24gcGVyZm9ybWVkIGJ5Citzb21lIG90aGVyIHByb2Nlc3MgKHNvIHNpZ25hbGxpbmcgYW5kIHN1Y2hsaWtlIHN0aWxsIHdvcmsgY29ycmVjdGx5KS4KKworCitXaGVuIHRoZSBDYWNoZUZpbGVzIG1vZHVsZSBpcyBhc2tlZCB0byBiaW5kIHRvIGl0cyBjYWNoZSwgaXQ6CisKKyAoMSkgRmluZHMgdGhlIHNlY3VyaXR5IGxhYmVsIGF0dGFjaGVkIHRvIHRoZSByb290IGNhY2hlIGRpcmVjdG9yeSBhbmQgdXNlcworICAgICB0aGF0IGFzIHRoZSBzZWN1cml0eSBsYWJlbCB3aXRoIHdoaWNoIGl0IHdpbGwgY3JlYXRlIGZpbGVzLiAgQnkgZGVmYXVsdCwKKyAgICAgdGhpcyBpczoKKworCWNhY2hlZmlsZXNfdmFyX3QKKworICgyKSBGaW5kcyB0aGUgc2VjdXJpdHkgbGFiZWwgb2YgdGhlIHByb2Nlc3Mgd2hpY2ggaXNzdWVkIHRoZSBiaW5kIHJlcXVlc3QKKyAgICAgKHByZXN1bWVkIHRvIGJlIHRoZSBjYWNoZWZpbGVzZCBkYWVtb24pLCB3aGljaCBieSBkZWZhdWx0IHdpbGwgYmU6CisKKwljYWNoZWZpbGVzZF90CisKKyAgICAgYW5kIGFza3MgTFNNIHRvIHN1cHBseSBhIHNlY3VyaXR5IElEIGFzIHdoaWNoIGl0IHNob3VsZCBhY3QgZ2l2ZW4gdGhlCisgICAgIGRhZW1vbidzIGxhYmVsLiAgQnkgZGVmYXVsdCwgdGhpcyB3aWxsIGJlOgorCisJY2FjaGVmaWxlc19rZXJuZWxfdAorCisgICAgIFNFTGludXggdHJhbnNpdGlvbnMgdGhlIGRhZW1vbidzIHNlY3VyaXR5IElEIHRvIHRoZSBtb2R1bGUncyBzZWN1cml0eSBJRAorICAgICBiYXNlZCBvbiBhIHJ1bGUgb2YgdGhpcyBmb3JtIGluIHRoZSBwb2xpY3kuCisKKwl0eXBlX3RyYW5zaXRpb24gPGRhZW1vbidzLUlEPiBrZXJuZWxfdCA6IHByb2Nlc3MgPG1vZHVsZSdzLUlEPjsKKworICAgICBGb3IgaW5zdGFuY2U6CisKKwl0eXBlX3RyYW5zaXRpb24gY2FjaGVmaWxlc2RfdCBrZXJuZWxfdCA6IHByb2Nlc3MgY2FjaGVmaWxlc19rZXJuZWxfdDsKKworCitUaGUgbW9kdWxlJ3Mgc2VjdXJpdHkgSUQgZ2l2ZXMgaXQgcGVybWlzc2lvbiB0byBjcmVhdGUsIG1vdmUgYW5kIHJlbW92ZSBmaWxlcworYW5kIGRpcmVjdG9yaWVzIGluIHRoZSBjYWNoZSwgdG8gZmluZCBhbmQgYWNjZXNzIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBpbiB0aGUKK2NhY2hlLCB0byBzZXQgYW5kIGFjY2VzcyBleHRlbmRlZCBhdHRyaWJ1dGVzIG9uIGNhY2hlIG9iamVjdHMsIGFuZCB0byByZWFkIGFuZAord3JpdGUgZmlsZXMgaW4gdGhlIGNhY2hlLgorCitUaGUgZGFlbW9uJ3Mgc2VjdXJpdHkgSUQgZ2l2ZXMgaXQgb25seSBhIHZlcnkgcmVzdHJpY3RlZCBzZXQgb2YgcGVybWlzc2lvbnM6IGl0CittYXkgc2NhbiBkaXJlY3Rvcmllcywgc3RhdCBmaWxlcyBhbmQgZXJhc2UgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgSXQgbWF5Citub3QgcmVhZCBvciB3cml0ZSBmaWxlcyBpbiB0aGUgY2FjaGUsIGFuZCBzbyBpdCBpcyBwcmVjbHVkZWQgZnJvbSBhY2Nlc3NpbmcgdGhlCitkYXRhIGNhY2hlZCB0aGVyZWluOyBub3IgaXMgaXQgcGVybWl0dGVkIHRvIGNyZWF0ZSBuZXcgZmlsZXMgaW4gdGhlIGNhY2hlLgorCisKK1RoZXJlIGFyZSBwb2xpY3kgc291cmNlIGZpbGVzIGF2YWlsYWJsZSBpbjoKKworCWh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9+ZGhvd2VsbHMvZnNjYWNoZS9jYWNoZWZpbGVzZC0wLjgudGFyLmJ6MgorCithbmQgbGF0ZXIgdmVyc2lvbnMuICBJbiB0aGF0IHRhcmJhbGwsIHNlZSB0aGUgZmlsZXM6CisKKwljYWNoZWZpbGVzZC50ZQorCWNhY2hlZmlsZXNkLmZjCisJY2FjaGVmaWxlc2QuaWYKKworVGhleSBhcmUgYnVpbHQgYW5kIGluc3RhbGxlZCBkaXJlY3RseSBieSB0aGUgUlBNLgorCitJZiBhIG5vbi1SUE0gYmFzZWQgc3lzdGVtIGlzIGJlaW5nIHVzZWQsIHRoZW4gY29weSB0aGUgYWJvdmUgZmlsZXMgdG8gdGhlaXIgb3duCitkaXJlY3RvcnkgYW5kIHJ1bjoKKworCW1ha2UgLWYgL3Vzci9zaGFyZS9zZWxpbnV4L2RldmVsL01ha2VmaWxlCisJc2Vtb2R1bGUgLWkgY2FjaGVmaWxlc2QucHAKKworWW91IHdpbGwgbmVlZCBjaGVja3BvbGljeSBhbmQgc2VsaW51eC1wb2xpY3ktZGV2ZWwgaW5zdGFsbGVkIHByaW9yIHRvIHRoZQorYnVpbGQuCisKKworQnkgZGVmYXVsdCwgdGhlIGNhY2hlIGlzIGxvY2F0ZWQgaW4gL3Zhci9mc2NhY2hlLCBidXQgaWYgaXQgaXMgZGVzaXJhYmxlIHRoYXQKK2l0IHNob3VsZCBiZSBlbHNld2hlcmUsIHRoYW4gZWl0aGVyIHRoZSBhYm92ZSBwb2xpY3kgZmlsZXMgbXVzdCBiZSBhbHRlcmVkLCBvcgorYW4gYXV4aWxpYXJ5IHBvbGljeSBtdXN0IGJlIGluc3RhbGxlZCB0byBsYWJlbCB0aGUgYWx0ZXJuYXRlIGxvY2F0aW9uIG9mIHRoZQorY2FjaGUuCisKK0ZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGFkZCBhbiBhdXhpbGlhcnkgcG9saWN5IHRvIGVuYWJsZSB0aGUgY2FjaGUgdG8gYmUKK2xvY2F0ZWQgZWxzZXdoZXJlIHdoZW4gU0VMaW51eCBpcyBpbiBlbmZvcmNpbmcgbW9kZSwgcGxlYXNlIHNlZToKKworCS91c3Ivc2hhcmUvZG9jL2NhY2hlZmlsZXNkLSovbW92ZS1jYWNoZS50eHQKKworV2hlbiB0aGUgY2FjaGVmaWxlc2QgcnBtIGlzIGluc3RhbGxlZDsgYWx0ZXJuYXRpdmVseSwgdGhlIGRvY3VtZW50IGNhbiBiZSBmb3VuZAoraW4gdGhlIHNvdXJjZXMuCisKKworPT09PT09PT09PT09PT09PT09CitBIE5PVEUgT04gU0VDVVJJVFkKKz09PT09PT09PT09PT09PT09PQorCitDYWNoZUZpbGVzIG1ha2VzIHVzZSBvZiB0aGUgc3BsaXQgc2VjdXJpdHkgaW4gdGhlIHRhc2tfc3RydWN0LiAgSXQgYWxsb2NhdGVzCitpdHMgb3duIHRhc2tfc2VjdXJpdHkgc3RydWN0dXJlLCBhbmQgcmVkaXJlY3RzIGN1cnJlbnQtPmFjdF9hcyB0byBwb2ludCB0byBpdAord2hlbiBpdCBhY3RzIG9uIGJlaGFsZiBvZiBhbm90aGVyIHByb2Nlc3MsIGluIHRoYXQgcHJvY2VzcydzIGNvbnRleHQuCisKK1RoZSByZWFzb24gaXQgZG9lcyB0aGlzIGlzIHRoYXQgaXQgY2FsbHMgdmZzX21rZGlyKCkgYW5kIHN1Y2hsaWtlIHJhdGhlciB0aGFuCitieXBhc3Npbmcgc2VjdXJpdHkgYW5kIGNhbGxpbmcgaW5vZGUgb3BzIGRpcmVjdGx5LiAgVGhlcmVmb3JlIHRoZSBWRlMgYW5kIExTTQorbWF5IGRlbnkgdGhlIENhY2hlRmlsZXMgYWNjZXNzIHRvIHRoZSBjYWNoZSBkYXRhIGJlY2F1c2UgdW5kZXIgc29tZQorY2lyY3Vtc3RhbmNlcyB0aGUgY2FjaGluZyBjb2RlIGlzIHJ1bm5pbmcgaW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgb2Ygd2hhdGV2ZXIKK3Byb2Nlc3MgaXNzdWVkIHRoZSBvcmlnaW5hbCBzeXNjYWxsIG9uIHRoZSBuZXRmcy4KKworRnVydGhlcm1vcmUsIHNob3VsZCBDYWNoZUZpbGVzIGNyZWF0ZSBhIGZpbGUgb3IgZGlyZWN0b3J5LCB0aGUgc2VjdXJpdHkKK3BhcmFtZXRlcnMgd2l0aCB0aGF0IG9iamVjdCBpcyBjcmVhdGVkIChVSUQsIEdJRCwgc2VjdXJpdHkgbGFiZWwpIHdvdWxkIGJlCitkZXJpdmVkIGZyb20gdGhhdCBwcm9jZXNzIHRoYXQgaXNzdWVkIHRoZSBzeXN0ZW0gY2FsbCwgdGh1cyBwb3RlbnRpYWxseQorcHJldmVudGluZyBvdGhlciBwcm9jZXNzZXMgZnJvbSBhY2Nlc3NpbmcgdGhlIGNhY2hlIC0gaW5jbHVkaW5nIENhY2hlRmlsZXMncworY2FjaGUgbWFuYWdlbWVudCBkYWVtb24gKGNhY2hlZmlsZXNkKS4KKworV2hhdCBpcyByZXF1aXJlZCBpcyB0byB0ZW1wb3JhcmlseSBvdmVycmlkZSB0aGUgc2VjdXJpdHkgb2YgdGhlIHByb2Nlc3MgdGhhdAoraXNzdWVkIHRoZSBzeXN0ZW0gY2FsbC4gIFdlIGNhbid0LCBob3dldmVyLCBqdXN0IGRvIGFuIGluLXBsYWNlIGNoYW5nZSBvZiB0aGUKK3NlY3VyaXR5IGRhdGEgYXMgdGhhdCBhZmZlY3RzIHRoZSBwcm9jZXNzIGFzIGFuIG9iamVjdCwgbm90IGp1c3QgYXMgYSBzdWJqZWN0LgorVGhpcyBtZWFucyBpdCBtYXkgbG9zZSBzaWduYWxzIG9yIHB0cmFjZSBldmVudHMgZm9yIGV4YW1wbGUsIGFuZCBhZmZlY3RzIHdoYXQKK3RoZSBwcm9jZXNzIGxvb2tzIGxpa2UgaW4gL3Byb2MuCisKK1NvIENhY2hlRmlsZXMgbWFrZXMgdXNlIG9mIGEgbG9naWNhbCBzcGxpdCBpbiB0aGUgc2VjdXJpdHkgYmV0d2VlbiB0aGUKK29iamVjdGl2ZSBzZWN1cml0eSAodGFzay0+c2VjKSBhbmQgdGhlIHN1YmplY3RpdmUgc2VjdXJpdHkgKHRhc2stPmFjdF9hcykuICBUaGUKK29iamVjdGl2ZSBzZWN1cml0eSBob2xkcyB0aGUgaW50cmluc2ljIHNlY3VyaXR5IHByb3BlcnRpZXMgb2YgYSBwcm9jZXNzIGFuZCBpcworbmV2ZXIgb3ZlcnJpZGRlbi4gIFRoaXMgaXMgd2hhdCBhcHBlYXJzIGluIC9wcm9jLCBhbmQgaXMgd2hhdCBpcyB1c2VkIHdoZW4gYQorcHJvY2VzcyBpcyB0aGUgdGFyZ2V0IG9mIGFuIG9wZXJhdGlvbiBieSBzb21lIG90aGVyIHByb2Nlc3MgKFNJR0tJTEwgZm9yCitleGFtcGxlKS4KKworVGhlIHN1YmplY3RpdmUgc2VjdXJpdHkgaG9sZHMgdGhlIGFjdGl2ZSBzZWN1cml0eSBwcm9wZXJ0aWVzIG9mIGEgcHJvY2VzcywgYW5kCittYXkgYmUgb3ZlcnJpZGRlbi4gIFRoaXMgaXMgbm90IHNlZW4gZXh0ZXJuYWxseSwgYW5kIGlzIHVzZWQgd2hhbiBhIHByb2Nlc3MKK2FjdHMgdXBvbiBhbm90aGVyIG9iamVjdCwgZm9yIGV4YW1wbGUgU0lHS0lMTGluZyBhbm90aGVyIHByb2Nlc3Mgb3Igb3BlbmluZyBhCitmaWxlLgorCitMU00gaG9va3MgZXhpc3QgdGhhdCBhbGxvdyBTRUxpbnV4IChvciBTbWFjayBvciB3aGF0ZXZlcikgdG8gcmVqZWN0IGEgcmVxdWVzdAorZm9yIENhY2hlRmlsZXMgdG8gcnVuIGluIGEgY29udGV4dCBvZiBhIHNwZWNpZmljIHNlY3VyaXR5IGxhYmVsLCBvciB0byBjcmVhdGUKK2ZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIGFub3RoZXIgc2VjdXJpdHkgbGFiZWwuCisKKworPT09PT09PT09PT09PT09PT09PT09PT0KK1NUQVRJU1RJQ0FMIElORk9STUFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PQorCitJZiBGUy1DYWNoZSBpcyBjb21waWxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGVuYWJsZWQ6CisKKwlDT05GSUdfQ0FDSEVGSUxFU19ISVNUT0dSQU09eQorCit0aGVuIGl0IHdpbGwgZ2F0aGVyIGNlcnRhaW4gc3RhdGlzdGljcyBhbmQgZGlzcGxheSB0aGVtIHRocm91Z2ggYSBwcm9jIGZpbGUuCisKKyAoKikgL3Byb2MvZnMvY2FjaGVmaWxlcy9oaXN0b2dyYW0KKworCWNhdCAvcHJvYy9mcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbQorCUpJRlMgIFNFQ1MgIExPT0tVUFMgICBNS0RJUlMgICAgQ1JFQVRFUworCT09PT09ID09PT09ID09PT09PT09PSA9PT09PT09PT0gPT09PT09PT09CisKKyAgICAgVGhpcyBzaG93cyB0aGUgYnJlYWtkb3duIG9mIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCBhbW91bnQgb2YgdGltZQorICAgICBiZXR3ZWVuIDAgamlmZmllcyBhbmQgSFotMSBqaWZmaWVzIGEgdmFyaWV0eSBvZiB0YXNrcyB0b29rIHRvIHJ1bi4gIFRoZQorICAgICBjb2x1bW5zIGFyZSBhcyBmb2xsb3dzOgorCisJQ09MVU1OCQlUSU1FIE1FQVNVUkVNRU5UCisJPT09PT09PQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCUxPT0tVUFMJCUxlbmd0aCBvZiB0aW1lIHRvIHBlcmZvcm0gYSBsb29rdXAgb24gdGhlIGJhY2tpbmcgZnMKKwlNS0RJUlMJCUxlbmd0aCBvZiB0aW1lIHRvIHBlcmZvcm0gYSBta2RpciBvbiB0aGUgYmFja2luZyBmcworCUNSRUFURVMJCUxlbmd0aCBvZiB0aW1lIHRvIHBlcmZvcm0gYSBjcmVhdGUgb24gdGhlIGJhY2tpbmcgZnMKKworICAgICBFYWNoIHJvdyBzaG93cyB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IHRvb2sgYSBwYXJ0aWN1bGFyIHJhbmdlIG9mIHRpbWVzLgorICAgICBFYWNoIHN0ZXAgaXMgMSBqaWZmeSBpbiBzaXplLiAgVGhlIEpJRlMgY29sdW1uIGluZGljYXRlcyB0aGUgcGFydGljdWxhcgorICAgICBqaWZmeSByYW5nZSBjb3ZlcmVkLCBhbmQgdGhlIFNFQ1MgZmllbGQgdGhlIGVxdWl2YWxlbnQgbnVtYmVyIG9mIHNlY29uZHMuCisKKworPT09PT09PT09CitERUJVR0dJTkcKKz09PT09PT09PQorCitJZiBDT05GSUdfQ0FDSEVGSUxFU19ERUJVRyBpcyBlbmFibGVkLCB0aGUgQ2FjaGVGaWxlcyBmYWNpbGl0eSBjYW4gaGF2ZSBydW50aW1lCitkZWJ1Z2dpbmcgZW5hYmxlZCBieSBhZGp1c3RpbmcgdGhlIHZhbHVlIGluOgorCisJL3N5cy9tb2R1bGUvY2FjaGVmaWxlcy9wYXJhbWV0ZXJzL2RlYnVnCisKK1RoaXMgaXMgYSBiaXRtYXNrIG9mIGRlYnVnZ2luZyBzdHJlYW1zIHRvIGVuYWJsZToKKworCUJJVAlWQUxVRQlTVFJFQU0JCQkJUE9JTlQKKwk9PT09PT09CT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PQorCTAJMQlHZW5lcmFsCQkJCUZ1bmN0aW9uIGVudHJ5IHRyYWNlCisJMQkyCQkJCQlGdW5jdGlvbiBleGl0IHRyYWNlCisJMgk0CQkJCQlHZW5lcmFsCisKK1RoZSBhcHByb3ByaWF0ZSBzZXQgb2YgdmFsdWVzIHNob3VsZCBiZSBPUidkIHRvZ2V0aGVyIGFuZCB0aGUgcmVzdWx0IHdyaXR0ZW4gdG8KK3RoZSBjb250cm9sIGZpbGUuICBGb3IgZXhhbXBsZToKKworCWVjaG8gJCgoMXw0fDgpKSA+L3N5cy9tb2R1bGUvY2FjaGVmaWxlcy9wYXJhbWV0ZXJzL2RlYnVnCisKK3dpbGwgdHVybiBvbiBhbGwgZnVuY3Rpb24gZW50cnkgZGVidWdnaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTRiOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQKQEAgLTAsMCArMSwzMzMgQEAKKwkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCSAgR2VuZXJhbCBGaWxlc3lzdGVtIENhY2hpbmcKKwkJCSAgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPT09PT09PT0KK09WRVJWSUVXCis9PT09PT09PQorCitUaGlzIGZhY2lsaXR5IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGNhY2hlIGZvciBuZXR3b3JrIGZpbGVzeXN0ZW1zLCB0aG91Z2ggaXQKK2NvdWxkIGJlIHVzZWQgZm9yIGNhY2hpbmcgb3RoZXIgdGhpbmdzIHN1Y2ggYXMgSVNPOTY2MCBmaWxlc3lzdGVtcyB0b28uCisKK0ZTLUNhY2hlIG1lZGlhdGVzIGJldHdlZW4gY2FjaGUgYmFja2VuZHMgKHN1Y2ggYXMgQ2FjaGVGUykgYW5kIG5ldHdvcmsKK2ZpbGVzeXN0ZW1zOgorCisJKy0tLS0tLS0tLSsKKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKwl8ICAgTkZTICAgfC0tKyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKwl8ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgKy0tPnwgICBDYWNoZUZTICAgIHwKKwkrLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tKyAgfCAgIHwgIC9kZXYvaGRhNSAgIHwKKwkgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgfCAgfCAgICstLS0tLS0tLS0tLS0tLSsKKwkrLS0tLS0tLS0tKyAgKy0tPnwgICAgICAgICAgfCAgfAorCXwgICAgICAgICB8ICAgICAgfCAgICAgICAgICB8LS0rCisJfCAgIEFGUyAgIHwtLS0tLT58IEZTLUNhY2hlIHwKKwl8ICAgICAgICAgfCAgICAgIHwgICAgICAgICAgfC0tKworCSstLS0tLS0tLS0rICArLS0+fCAgICAgICAgICB8ICB8CisJICAgICAgICAgICAgIHwgICB8ICAgICAgICAgIHwgIHwgICArLS0tLS0tLS0tLS0tLS0rCisJKy0tLS0tLS0tLSsgIHwgICArLS0tLS0tLS0tLSsgIHwgICB8ICAgICAgICAgICAgICB8CisJfCAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICstLT58ICBDYWNoZUZpbGVzICB8CisJfCAgSVNPRlMgIHwtLSsgICAgICAgICAgICAgICAgICAgICB8ICAvdmFyL2NhY2hlICB8CisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisJKy0tLS0tLS0tLSsKKworT3IgdG8gbG9vayBhdCBpdCBhbm90aGVyIHdheSwgRlMtQ2FjaGUgaXMgYSBtb2R1bGUgdGhhdCBwcm92aWRlcyBhIGNhY2hpbmcKK2ZhY2lsaXR5IHRvIGEgbmV0d29yayBmaWxlc3lzdGVtIHN1Y2ggdGhhdCB0aGUgY2FjaGUgaXMgdHJhbnNwYXJlbnQgdG8gdGhlCit1c2VyOgorCisJKy0tLS0tLS0tLSsKKwl8ICAgICAgICAgfAorCXwgU2VydmVyICB8CisJfCAgICAgICAgIHwKKwkrLS0tLS0tLS0tKworCSAgICAgfCAgICAgICAgICAgICAgICAgIE5FVFdPUksKKwl+fn5+fnx+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisJICAgICB8CisJICAgICB8ICAgICAgICAgICArLS0tLS0tLS0tLSsKKwkgICAgIFYgICAgICAgICAgIHwgICAgICAgICAgfAorCSstLS0tLS0tLS0rICAgICAgfCAgICAgICAgICB8CisJfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgIHwKKwl8ICAgTkZTICAgfC0tLS0tPnwgRlMtQ2FjaGUgfAorCXwgICAgICAgICB8ICAgICAgfCAgICAgICAgICB8LS0rCisJKy0tLS0tLS0tLSsgICAgICB8ICAgICAgICAgIHwgIHwgICArLS0tLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tLS0tKworCSAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8ICB8ICAgfCAgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgICAgIHwKKwkgICAgIFYgICAgICAgICAgICstLS0tLS0tLS0tKyAgKy0tPnwgIENhY2hlRmlsZXMgIHwtLT58ICBFeHQzICAgICAgICB8CisJKy0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICB8ICAvdmFyL2NhY2hlICB8ICAgfCAgL2Rldi9zZGE2ICAgfAorCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLS0tLSsKKwl8ICAgVkZTICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4KKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKKwkrLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgIHwKKwkgICAgIHwgICAgICAgICAgICAgICAgICBLRVJORUwgU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwKKwl+fn5+fnx+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fH5+fn5+fnx+fn5+CisJICAgICB8ICAgICAgICAgICAgICAgICAgVVNFUiBTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICB8CisJICAgICBWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICB8CisJKy0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKwl8IFByb2Nlc3MgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhY2hlZmlsZXNkICB8CisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorCSstLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKworCitGUy1DYWNoZSBkb2VzIG5vdCBmb2xsb3cgdGhlIGlkZWEgb2YgY29tcGxldGVseSBsb2FkaW5nIGV2ZXJ5IG5ldGZzIGZpbGUKK29wZW5lZCBpbiBpdHMgZW50aXJldHkgaW50byBhIGNhY2hlIGJlZm9yZSBwZXJtaXR0aW5nIGl0IHRvIGJlIGFjY2Vzc2VkIGFuZAordGhlbiBzZXJ2aW5nIHRoZSBwYWdlcyBvdXQgb2YgdGhhdCBjYWNoZSByYXRoZXIgdGhhbiB0aGUgbmV0ZnMgaW5vZGUgYmVjYXVzZToKKworICgxKSBJdCBtdXN0IGJlIHByYWN0aWNhbCB0byBvcGVyYXRlIHdpdGhvdXQgYSBjYWNoZS4KKworICgyKSBUaGUgc2l6ZSBvZiBhbnkgYWNjZXNzaWJsZSBmaWxlIG11c3Qgbm90IGJlIGxpbWl0ZWQgdG8gdGhlIHNpemUgb2YgdGhlCisgICAgIGNhY2hlLgorCisgKDMpIFRoZSBjb21iaW5lZCBzaXplIG9mIGFsbCBvcGVuZWQgZmlsZXMgKHRoaXMgaW5jbHVkZXMgbWFwcGVkIGxpYnJhcmllcykKKyAgICAgbXVzdCBub3QgYmUgbGltaXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgY2FjaGUuCisKKyAoNCkgVGhlIHVzZXIgc2hvdWxkIG5vdCBiZSBmb3JjZWQgdG8gZG93bmxvYWQgYW4gZW50aXJlIGZpbGUganVzdCB0byBkbyBhCisgICAgIG9uZS1vZmYgYWNjZXNzIG9mIGEgc21hbGwgcG9ydGlvbiBvZiBpdCAoc3VjaCBhcyBtaWdodCBiZSBkb25lIHdpdGggdGhlCisgICAgICJmaWxlIiBwcm9ncmFtKS4KKworSXQgaW5zdGVhZCBzZXJ2ZXMgdGhlIGNhY2hlIG91dCBpbiBQQUdFX1NJWkUgY2h1bmtzIGFzIGFuZCB3aGVuIHJlcXVlc3RlZCBieQordGhlIG5ldGZzKCdzKSB1c2luZyBpdC4KKworCitGUy1DYWNoZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZhY2lsaXRpZXM6CisKKyAoMSkgTW9yZSB0aGFuIG9uZSBjYWNoZSBjYW4gYmUgdXNlZCBhdCBvbmNlLiAgQ2FjaGVzIGNhbiBiZSBzZWxlY3RlZAorICAgICBleHBsaWNpdGx5IGJ5IHVzZSBvZiB0YWdzLgorCisgKDIpIENhY2hlcyBjYW4gYmUgYWRkZWQgLyByZW1vdmVkIGF0IGFueSB0aW1lLgorCisgKDMpIFRoZSBuZXRmcyBpcyBwcm92aWRlZCB3aXRoIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBlaXRoZXIgcGFydHkgdG8KKyAgICAgd2l0aGRyYXcgY2FjaGluZyBmYWNpbGl0aWVzIGZyb20gYSBmaWxlIChyZXF1aXJlZCBmb3IgKDIpKS4KKworICg0KSBUaGUgaW50ZXJmYWNlIHRvIHRoZSBuZXRmcyByZXR1cm5zIGFzIGZldyBlcnJvcnMgYXMgcG9zc2libGUsIHByZWZlcnJpbmcKKyAgICAgcmF0aGVyIHRvIGxldCB0aGUgbmV0ZnMgcmVtYWluIG9ibGl2aW91cy4KKworICg1KSBDb29raWVzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBpbmRpY2VzLCBmaWxlcyBhbmQgb3RoZXIgb2JqZWN0cyB0byB0aGUKKyAgICAgbmV0ZnMuICBUaGUgc2ltcGxlc3QgY29va2llIGlzIGp1c3QgYSBOVUxMIHBvaW50ZXIgLSBpbmRpY2F0aW5nIG5vdGhpbmcKKyAgICAgY2FjaGVkIHRoZXJlLgorCisgKDYpIFRoZSBuZXRmcyBpcyBhbGxvd2VkIHRvIHByb3Bvc2UgLSBkeW5hbWljYWxseSAtIGFueSBpbmRleCBoaWVyYXJjaHkgaXQKKyAgICAgZGVzaXJlcywgdGhvdWdoIGl0IG11c3QgYmUgYXdhcmUgdGhhdCB0aGUgaW5kZXggc2VhcmNoIGZ1bmN0aW9uIGlzCisgICAgIHJlY3Vyc2l2ZSwgc3RhY2sgc3BhY2UgaXMgbGltaXRlZCwgYW5kIGluZGljZXMgY2FuIG9ubHkgYmUgY2hpbGRyZW4gb2YKKyAgICAgaW5kaWNlcy4KKworICg3KSBEYXRhIEkvTyBpcyBkb25lIGRpcmVjdCB0byBhbmQgZnJvbSB0aGUgbmV0ZnMncyBwYWdlcy4gIFRoZSBuZXRmcworICAgICBpbmRpY2F0ZXMgdGhhdCBwYWdlIEEgaXMgYXQgaW5kZXggQiBvZiB0aGUgZGF0YS1maWxlIHJlcHJlc2VudGVkIGJ5IGNvb2tpZQorICAgICBDLCBhbmQgdGhhdCBpdCBzaG91bGQgYmUgcmVhZCBvciB3cml0dGVuLiAgVGhlIGNhY2hlIGJhY2tlbmQgbWF5IG9yIG1heQorICAgICBub3Qgc3RhcnQgSS9PIG9uIHRoYXQgcGFnZSwgYnV0IGlmIGl0IGRvZXMsIGEgbmV0ZnMgY2FsbGJhY2sgd2lsbCBiZQorICAgICBpbnZva2VkIHRvIGluZGljYXRlIGNvbXBsZXRpb24uICBUaGUgSS9PIG1heSBiZSBlaXRoZXIgc3luY2hyb25vdXMgb3IKKyAgICAgYXN5bmNocm9ub3VzLgorCisgKDgpIENvb2tpZXMgY2FuIGJlICJyZXRpcmVkIiB1cG9uIHJlbGVhc2UuICBBdCB0aGlzIHBvaW50IEZTLUNhY2hlIHdpbGwgbWFyaworICAgICB0aGVtIGFzIG9ic29sZXRlIGFuZCB0aGUgaW5kZXggaGllcmFyY2h5IHJvb3RlZCBhdCB0aGF0IHBvaW50IHdpbGwgZ2V0CisgICAgIHJlY3ljbGVkLgorCisgKDkpIFRoZSBuZXRmcyBwcm92aWRlcyBhICJtYXRjaCIgZnVuY3Rpb24gZm9yIGluZGV4IHNlYXJjaGVzLiAgSW4gYWRkaXRpb24gdG8KKyAgICAgc2F5aW5nIHdoZXRoZXIgYSBtYXRjaCB3YXMgbWFkZSBvciBub3QsIHRoaXMgY2FuIGFsc28gc3BlY2lmeSB0aGF0IGFuCisgICAgIGVudHJ5IHNob3VsZCBiZSB1cGRhdGVkIG9yIGRlbGV0ZWQuCisKKygxMCkgQXMgbXVjaCBhcyBwb3NzaWJsZSBpcyBkb25lIGFzeW5jaHJvbm91c2x5LgorCisKK0ZTLUNhY2hlIG1haW50YWlucyBhIHZpcnR1YWwgaW5kZXhpbmcgdHJlZSBpbiB3aGljaCBhbGwgaW5kaWNlcywgZmlsZXMsIG9iamVjdHMKK2FuZCBwYWdlcyBhcmUga2VwdC4gIEJpdHMgb2YgdGhpcyB0cmVlIG1heSBhY3R1YWxseSByZXNpZGUgaW4gb25lIG9yIG1vcmUKK2NhY2hlcy4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTREVGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgTkZTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGUworICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgICBob21lZGlyICAgICAgICAgICAgICAgICAgICAgbWlycm9yICAgICAgICAgIGFmcy5vcmcgICByZWRoYXQuY29tCisgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICArLS0tLS0tLS0tLS0tKyAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICstLS0tLS0tLS0tKworICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgfAorICAgMDAwMDEgICAgICAgIDAwMDAyICAgICAgIDAwMDA3ICAgICAgICAgICAwMDEyNSAgICAgICAgdm9sMDAwMDEgICB2b2wwMDAwMgorICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0rLS0tKyAgICAgKy0tLS0tKyAgICAgICstLS0rICAgICAgKy0tLS0tLSstLS0tLS0rICAgICAgICAgICAgKy0tLS0tKy0tLS0rCisgfCAgIHwgICB8ICAgICB8ICAgICB8ICAgICAgfCAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgICB8ICAgICB8ICAgIHwKK1BHMCBQRzEgUEcyICAgUEcwICBYQVRUUiAgIFBHMCBQRzEgICBESVJFTlQgRElSRU5UIERJUkVOVCAgICAgICAgUi9XICAgUi9PICBCYWsKKyAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgUEcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDEgICAwMDAwMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSstLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRzAgUEcxIFBHMgorCitJbiB0aGUgZXhhbXBsZSBhYm92ZSwgeW91IGNhbiBzZWUgdHdvIG5ldGZzJ3MgYmVpbmcgYmFja2VkOiBORlMgYW5kIEFGUy4gIFRoZXNlCitoYXZlIGRpZmZlcmVudCBpbmRleCBoaWVyYXJjaGllczoKKworICgqKSBUaGUgTkZTIHByaW1hcnkgaW5kZXggY29udGFpbnMgcGVyLXNlcnZlciBpbmRpY2VzLiAgRWFjaCBzZXJ2ZXIgaW5kZXggaXMKKyAgICAgaW5kZXhlZCBieSBORlMgZmlsZSBoYW5kbGVzIHRvIGdldCBkYXRhIGZpbGUgb2JqZWN0cy4gIEVhY2ggZGF0YSBmaWxlCisgICAgIG9iamVjdHMgY2FuIGhhdmUgYW4gYXJyYXkgb2YgcGFnZXMsIGJ1dCBtYXkgYWxzbyBoYXZlIGZ1cnRoZXIgY2hpbGQKKyAgICAgb2JqZWN0cywgc3VjaCBhcyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFuZCBkaXJlY3RvcnkgZW50cmllcy4gIEV4dGVuZGVkCisgICAgIGF0dHJpYnV0ZSBvYmplY3RzIHRoZW1zZWx2ZXMgaGF2ZSBwYWdlLWFycmF5IGNvbnRlbnRzLgorCisgKCopIFRoZSBBRlMgcHJpbWFyeSBpbmRleCBjb250YWlucyBwZXItY2VsbCBpbmRpY2VzLiAgRWFjaCBjZWxsIGluZGV4IGNvbnRhaW5zCisgICAgIHBlci1sb2dpY2FsLXZvbHVtZSBpbmRpY2VzLiAgRWFjaCBvZiB2b2x1bWUgaW5kZXggY29udGFpbnMgdXAgdG8gdGhyZWUKKyAgICAgaW5kaWNlcyBmb3IgdGhlIHJlYWQtd3JpdGUsIHJlYWQtb25seSBhbmQgYmFja3VwIG1pcnJvcnMgb2YgdGhvc2Ugdm9sdW1lcy4KKyAgICAgRWFjaCBvZiB0aGVzZSBjb250YWlucyB2bm9kZSBkYXRhIGZpbGUgb2JqZWN0cywgZWFjaCBvZiB3aGljaCBjb250YWlucyBhbgorICAgICBhcnJheSBvZiBwYWdlcy4KKworVGhlIHZlcnkgdG9wIGluZGV4IGlzIHRoZSBGUy1DYWNoZSBtYXN0ZXIgaW5kZXggaW4gd2hpY2ggaW5kaXZpZHVhbCBuZXRmcydzCitoYXZlIGVudHJpZXMuCisKK0FueSBpbmRleCBvYmplY3QgbWF5IHJlc2lkZSBpbiBtb3JlIHRoYW4gb25lIGNhY2hlLCBwcm92aWRlZCBpdCBvbmx5IGhhcyBpbmRleAorY2hpbGRyZW4uICBBbnkgaW5kZXggd2l0aCBub24taW5kZXggb2JqZWN0IGNoaWxkcmVuIHdpbGwgYmUgYXNzdW1lZCB0byBvbmx5CityZXNpZGUgaW4gb25lIGNhY2hlLgorCisKK1RoZSBuZXRmcyBBUEkgdG8gRlMtQ2FjaGUgY2FuIGJlIGZvdW5kIGluOgorCisJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKKworVGhlIGNhY2hlIGJhY2tlbmQgQVBJIHRvIEZTLUNhY2hlIGNhbiBiZSBmb3VuZCBpbjoKKworCURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQKKworQSBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIGFuZCBvYmplY3Qgc3RhdGUgbWFjaGluZSBjYW4gYmUKK2ZvdW5kIGluOgorCisJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQKKworCis9PT09PT09PT09PT09PT09PT09PT09PQorU1RBVElTVElDQUwgSU5GT1JNQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIEZTLUNhY2hlIGlzIGNvbXBpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zIGVuYWJsZWQ6CisKKwlDT05GSUdfRlNDQUNIRV9TVEFUUz15CisJQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNPXkKKwordGhlbiBpdCB3aWxsIGdhdGhlciBjZXJ0YWluIHN0YXRpc3RpY3MgYW5kIGRpc3BsYXkgdGhlbSB0aHJvdWdoIGEgbnVtYmVyIG9mCitwcm9jIGZpbGVzLgorCisgKCopIC9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHMKKworICAgICBUaGlzIHNob3dzIGNvdW50cyBvZiBhIG51bWJlciBvZiBldmVudHMgdGhhdCBjYW4gaGFwcGVuIGluIEZTLUNhY2hlOgorCisJQ0xBU1MJRVZFTlQJTUVBTklORworCT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJQ29va2llcwlpZHg9TglOdW1iZXIgb2YgaW5kZXggY29va2llcyBhbGxvY2F0ZWQKKwkJZGF0PU4JTnVtYmVyIG9mIGRhdGEgc3RvcmFnZSBjb29raWVzIGFsbG9jYXRlZAorCQlzcGM9TglOdW1iZXIgb2Ygc3BlY2lhbCBjb29raWVzIGFsbG9jYXRlZAorCU9iamVjdHMJYWxjPU4JTnVtYmVyIG9mIG9iamVjdHMgYWxsb2NhdGVkCisJCW5hbD1OCU51bWJlciBvZiBvYmplY3QgYWxsb2NhdGlvbiBmYWlsdXJlcworCQlhdmw9TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IHJlYWNoZWQgdGhlIGF2YWlsYWJsZSBzdGF0ZQorCQlkZWQ9TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IHJlYWNoZWQgdGhlIGRlYWQgc3RhdGUKKwlDaGtBdXgJbm9uPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCBkaWRuJ3QgaGF2ZSBhIGNvaGVyZW5jeSBjaGVjaworCQlvaz1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgcGFzc2VkIGEgY29oZXJlbmN5IGNoZWNrCisJCXVwZD1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgbmVlZGVkIGEgY29oZXJlbmN5IGRhdGEgdXBkYXRlCisJCW9icz1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgd2VyZSBkZWNsYXJlZCBvYnNvbGV0ZQorCVBhZ2VzCW1yaz1OCU51bWJlciBvZiBwYWdlcyBtYXJrZWQgYXMgYmVpbmcgY2FjaGVkCisJCXVuYz1OCU51bWJlciBvZiB1bmNhY2hlIHBhZ2UgcmVxdWVzdHMgc2VlbgorCUFjcXVpcmUJbj1OCU51bWJlciBvZiBhY3F1aXJlIGNvb2tpZSByZXF1ZXN0cyBzZWVuCisJCW51bD1OCU51bWJlciBvZiBhY3EgcmVxcyBnaXZlbiBhIE5VTEwgcGFyZW50CisJCW5vYz1OCU51bWJlciBvZiBhY3EgcmVxcyByZWplY3RlZCBkdWUgdG8gbm8gY2FjaGUgYXZhaWxhYmxlCisJCW9rPU4JTnVtYmVyIG9mIGFjcSByZXFzIHN1Y2NlZWRlZAorCQluYmY9TglOdW1iZXIgb2YgYWNxIHJlcXMgcmVqZWN0ZWQgZHVlIHRvIGVycm9yCisJCW9vbT1OCU51bWJlciBvZiBhY3EgcmVxcyBmYWlsZWQgb24gRU5PTUVNCisJTG9va3VwcwluPU4JTnVtYmVyIG9mIGxvb2t1cCBjYWxscyBtYWRlIG9uIGNhY2hlIGJhY2tlbmRzCisJCW5lZz1OCU51bWJlciBvZiBuZWdhdGl2ZSBsb29rdXBzIG1hZGUKKwkJcG9zPU4JTnVtYmVyIG9mIHBvc2l0aXZlIGxvb2t1cHMgbWFkZQorCQljcnQ9TglOdW1iZXIgb2Ygb2JqZWN0cyBjcmVhdGVkIGJ5IGxvb2t1cAorCVVwZGF0ZXMJbj1OCU51bWJlciBvZiB1cGRhdGUgY29va2llIHJlcXVlc3RzIHNlZW4KKwkJbnVsPU4JTnVtYmVyIG9mIHVwZCByZXFzIGdpdmVuIGEgTlVMTCBwYXJlbnQKKwkJcnVuPU4JTnVtYmVyIG9mIHVwZCByZXFzIGdyYW50ZWQgQ1BVIHRpbWUKKwlSZWxpbnFzCW49TglOdW1iZXIgb2YgcmVsaW5xdWlzaCBjb29raWUgcmVxdWVzdHMgc2VlbgorCQludWw9TglOdW1iZXIgb2YgcmxxIHJlcXMgZ2l2ZW4gYSBOVUxMIHBhcmVudAorCQl3Y3I9TglOdW1iZXIgb2YgcmxxIHJlcXMgd2FpdGVkIG9uIGNvbXBsZXRpb24gb2YgY3JlYXRpb24KKwlBdHRyQ2hnCW49TglOdW1iZXIgb2YgYXR0cmlidXRlIGNoYW5nZWQgcmVxdWVzdHMgc2VlbgorCQlvaz1OCU51bWJlciBvZiBhdHRyIGNoYW5nZWQgcmVxdWVzdHMgcXVldWVkCisJCW5iZj1OCU51bWJlciBvZiBhdHRyIGNoYW5nZWQgcmVqZWN0ZWQgLUVOT0JVRlMKKwkJb29tPU4JTnVtYmVyIG9mIGF0dHIgY2hhbmdlZCBmYWlsZWQgLUVOT01FTQorCQlydW49TglOdW1iZXIgb2YgYXR0ciBjaGFuZ2VkIG9wcyBnaXZlbiBDUFUgdGltZQorCUFsbG9jcwluPU4JTnVtYmVyIG9mIGFsbG9jYXRpb24gcmVxdWVzdHMgc2VlbgorCQlvaz1OCU51bWJlciBvZiBzdWNjZXNzZnVsIGFsbG9jIHJlcXMKKwkJd3Q9TglOdW1iZXIgb2YgYWxsb2MgcmVxcyB0aGF0IHdhaXRlZCBvbiBsb29rdXAgY29tcGxldGlvbgorCQluYmY9TglOdW1iZXIgb2YgYWxsb2MgcmVxcyByZWplY3RlZCAtRU5PQlVGUworCQlvcHM9TglOdW1iZXIgb2YgYWxsb2MgcmVxcyBzdWJtaXR0ZWQKKwkJb3d0PU4JTnVtYmVyIG9mIGFsbG9jIHJlcXMgd2FpdGVkIGZvciBDUFUgdGltZQorCVJldHJ2bHMJbj1OCU51bWJlciBvZiByZXRyaWV2YWwgKHJlYWQpIHJlcXVlc3RzIHNlZW4KKwkJb2s9TglOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCByZXRyIHJlcXMKKwkJd3Q9TglOdW1iZXIgb2YgcmV0ciByZXFzIHRoYXQgd2FpdGVkIG9uIGxvb2t1cCBjb21wbGV0aW9uCisJCW5vZD1OCU51bWJlciBvZiByZXRyIHJlcXMgcmV0dXJuZWQgLUVOT0RBVEEKKwkJbmJmPU4JTnVtYmVyIG9mIHJldHIgcmVxcyByZWplY3RlZCAtRU5PQlVGUworCQlpbnQ9TglOdW1iZXIgb2YgcmV0ciByZXFzIGFib3J0ZWQgLUVSRVNUQVJUU1lTCisJCW9vbT1OCU51bWJlciBvZiByZXRyIHJlcXMgZmFpbGVkIC1FTk9NRU0KKwkJb3BzPU4JTnVtYmVyIG9mIHJldHIgcmVxcyBzdWJtaXR0ZWQKKwkJb3d0PU4JTnVtYmVyIG9mIHJldHIgcmVxcyB3YWl0ZWQgZm9yIENQVSB0aW1lCisJU3RvcmVzCW49TglOdW1iZXIgb2Ygc3RvcmFnZSAod3JpdGUpIHJlcXVlc3RzIHNlZW4KKwkJb2s9TglOdW1iZXIgb2Ygc3VjY2Vzc2Z1bCBzdG9yZSByZXFzCisJCWFnbj1OCU51bWJlciBvZiBzdG9yZSByZXFzIG9uIGEgcGFnZSBhbHJlYWR5IHBlbmRpbmcgc3RvcmFnZQorCQluYmY9TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyByZWplY3RlZCAtRU5PQlVGUworCQlvb209TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBmYWlsZWQgLUVOT01FTQorCQlvcHM9TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBzdWJtaXR0ZWQKKwkJcnVuPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgZ3JhbnRlZCBDUFUgdGltZQorCU9wcwlwZW5kPU4JTnVtYmVyIG9mIHRpbWVzIGFzeW5jIG9wcyBhZGRlZCB0byBwZW5kaW5nIHF1ZXVlcworCQlydW49TglOdW1iZXIgb2YgdGltZXMgYXN5bmMgb3BzIGdpdmVuIENQVSB0aW1lCisJCWVucT1OCU51bWJlciBvZiB0aW1lcyBhc3luYyBvcHMgcXVldWVkIGZvciBwcm9jZXNzaW5nCisJCWRmcj1OCU51bWJlciBvZiBhc3luYyBvcHMgcXVldWVkIGZvciBkZWZlcnJlZCByZWxlYXNlCisJCXJlbD1OCU51bWJlciBvZiBhc3luYyBvcHMgcmVsZWFzZWQKKwkJZ2M9TglOdW1iZXIgb2YgZGVmZXJyZWQtcmVsZWFzZSBhc3luYyBvcHMgZ2FyYmFnZSBjb2xsZWN0ZWQKKworCisgKCopIC9wcm9jL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtCisKKwljYXQgL3Byb2MvZnMvZnNjYWNoZS9oaXN0b2dyYW0KKwlKSUZTICBTRUNTICBPQkogSU5TVCAgT1AgUlVOUyAgIE9CSiBSVU5TICBSRVRSViBETFkgUkVUUklFVkxTCisJPT09PT0gPT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PQorCisgICAgIFRoaXMgc2hvd3MgdGhlIGJyZWFrZG93biBvZiB0aGUgbnVtYmVyIG9mIHRpbWVzIGVhY2ggYW1vdW50IG9mIHRpbWUKKyAgICAgYmV0d2VlbiAwIGppZmZpZXMgYW5kIEhaLTEgamlmZmllcyBhIHZhcmlldHkgb2YgdGFza3MgdG9vayB0byBydW4uICBUaGUKKyAgICAgY29sdW1ucyBhcmUgYXMgZm9sbG93czoKKworCUNPTFVNTgkJVElNRSBNRUFTVVJFTUVOVAorCT09PT09PT0JCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlPQkogSU5TVAlMZW5ndGggb2YgdGltZSB0byBpbnN0YW50aWF0ZSBhbiBvYmplY3QKKwlPUCBSVU5TCQlMZW5ndGggb2YgdGltZSBhIGNhbGwgdG8gcHJvY2VzcyBhbiBvcGVyYXRpb24gdG9vaworCU9CSiBSVU5TCUxlbmd0aCBvZiB0aW1lIGEgY2FsbCB0byBwcm9jZXNzIGFuIG9iamVjdCBldmVudCB0b29rCisJUkVUUlYgRExZCVRpbWUgYmV0d2VlbiBhbiByZXF1ZXN0aW5nIGEgcmVhZCBhbmQgbG9va3VwIGNvbXBsZXRpbmcKKwlSRVRSSUVWTFMJVGltZSBiZXR3ZWVuIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgcmV0cmlldmFsCisKKyAgICAgRWFjaCByb3cgc2hvd3MgdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCB0b29rIGEgcGFydGljdWxhciByYW5nZSBvZiB0aW1lcy4KKyAgICAgRWFjaCBzdGVwIGlzIDEgamlmZnkgaW4gc2l6ZS4gIFRoZSBKSUZTIGNvbHVtbiBpbmRpY2F0ZXMgdGhlIHBhcnRpY3VsYXIKKyAgICAgamlmZnkgcmFuZ2UgY292ZXJlZCwgYW5kIHRoZSBTRUNTIGZpZWxkIHRoZSBlcXVpdmFsZW50IG51bWJlciBvZiBzZWNvbmRzLgorCisKKz09PT09PT09PQorREVCVUdHSU5HCis9PT09PT09PT0KKworSWYgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgZW5hYmxlZCwgdGhlIEZTLUNhY2hlIGZhY2lsaXR5IGNhbiBoYXZlIHJ1bnRpbWUKK2RlYnVnZ2luZyBlbmFibGVkIGJ5IGFkanVzdGluZyB0aGUgdmFsdWUgaW46CisKKwkvc3lzL21vZHVsZS9mc2NhY2hlL3BhcmFtZXRlcnMvZGVidWcKKworVGhpcyBpcyBhIGJpdG1hc2sgb2YgZGVidWdnaW5nIHN0cmVhbXMgdG8gZW5hYmxlOgorCisJQklUCVZBTFVFCVNUUkVBTQkJCQlQT0lOVAorCT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJMAkxCUNhY2hlIG1hbmFnZW1lbnQJCUZ1bmN0aW9uIGVudHJ5IHRyYWNlCisJMQkyCQkJCQlGdW5jdGlvbiBleGl0IHRyYWNlCisJMgk0CQkJCQlHZW5lcmFsCisJMwk4CUNvb2tpZSBtYW5hZ2VtZW50CQlGdW5jdGlvbiBlbnRyeSB0cmFjZQorCTQJMTYJCQkJCUZ1bmN0aW9uIGV4aXQgdHJhY2UKKwk1CTMyCQkJCQlHZW5lcmFsCisJNgk2NAlQYWdlIGhhbmRsaW5nCQkJRnVuY3Rpb24gZW50cnkgdHJhY2UKKwk3CTEyOAkJCQkJRnVuY3Rpb24gZXhpdCB0cmFjZQorCTgJMjU2CQkJCQlHZW5lcmFsCisJOQk1MTIJT3BlcmF0aW9uIG1hbmFnZW1lbnQJCUZ1bmN0aW9uIGVudHJ5IHRyYWNlCisJMTAJMTAyNAkJCQkJRnVuY3Rpb24gZXhpdCB0cmFjZQorCTExCTIwNDgJCQkJCUdlbmVyYWwKKworVGhlIGFwcHJvcHJpYXRlIHNldCBvZiB2YWx1ZXMgc2hvdWxkIGJlIE9SJ2QgdG9nZXRoZXIgYW5kIHRoZSByZXN1bHQgd3JpdHRlbiB0bwordGhlIGNvbnRyb2wgZmlsZS4gIEZvciBleGFtcGxlOgorCisJZWNobyAkKCgxfDh8NjQpKSA+L3N5cy9tb2R1bGUvZnNjYWNoZS9wYXJhbWV0ZXJzL2RlYnVnCisKK3dpbGwgdHVybiBvbiBhbGwgZnVuY3Rpb24gZW50cnkgZGVidWdnaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIxMjViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQKQEAgLTAsMCArMSw3NzggQEAKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJCUZTLUNBQ0hFIE5FVFdPUksgRklMRVNZU1RFTSBBUEkKKwkJCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUncyBhbiBBUEkgYnkgd2hpY2ggYSBuZXR3b3JrIGZpbGVzeXN0ZW0gY2FuIG1ha2UgdXNlIG9mIHRoZSBGUy1DYWNoZQorZmFjaWxpdGllcy4gIFRoaXMgaXMgYmFzZWQgYXJvdW5kIGEgbnVtYmVyIG9mIHByaW5jaXBsZXM6CisKKyAoMSkgQ2FjaGVzIGNhbiBzdG9yZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzLiAgVGhlcmUgYXJlIHR3byBtYWluCisgICAgIG9iamVjdCB0eXBlczogaW5kaWNlcyBhbmQgZmlsZXMuICBUaGUgZmlyc3QgaXMgYSBzcGVjaWFsIHR5cGUgdXNlZCBieQorICAgICBGUy1DYWNoZSB0byBtYWtlIGZpbmRpbmcgb2JqZWN0cyBmYXN0ZXIgYW5kIHRvIG1ha2UgcmV0aXJpbmcgb2YgZ3JvdXBzIG9mCisgICAgIG9iamVjdHMgZWFzaWVyLgorCisgKDIpIEV2ZXJ5IGluZGV4LCBmaWxlIG9yIG90aGVyIG9iamVjdCBpcyByZXByZXNlbnRlZCBieSBhIGNvb2tpZS4gIFRoaXMgY29va2llCisgICAgIG1heSBvciBtYXkgbm90IGhhdmUgYW55dGhpbmcgYXNzb2NpYXRlZCB3aXRoIGl0LCBidXQgdGhlIG5ldGZzIGRvZXNuJ3QKKyAgICAgbmVlZCB0byBjYXJlLgorCisgKDMpIEJhcnJpbmcgdGhlIHRvcC1sZXZlbCBpbmRleCAob25lIGVudHJ5IHBlciBjYWNoZWQgbmV0ZnMpLCB0aGUgaW5kZXgKKyAgICAgaGllcmFyY2h5IGZvciBlYWNoIG5ldGZzIGlzIHN0cnVjdHVyZWQgYWNjb3JkaW5nIHRoZSB3aGltIG9mIHRoZSBuZXRmcy4KKworVGhpcyBBUEkgaXMgZGVjbGFyZWQgaW4gPGxpbnV4L2ZzY2FjaGUuaD4uCisKK1RoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBzZWN0aW9uczoKKworCSAoMSkgTmV0d29yayBmaWxlc3lzdGVtIGRlZmluaXRpb24KKwkgKDIpIEluZGV4IGRlZmluaXRpb24KKwkgKDMpIE9iamVjdCBkZWZpbml0aW9uCisJICg0KSBOZXR3b3JrIGZpbGVzeXN0ZW0gKHVuKXJlZ2lzdHJhdGlvbgorCSAoNSkgQ2FjaGUgdGFnIGxvb2t1cAorCSAoNikgSW5kZXggcmVnaXN0cmF0aW9uCisJICg3KSBEYXRhIGZpbGUgcmVnaXN0cmF0aW9uCisJICg4KSBNaXNjZWxsYW5lb3VzIG9iamVjdCByZWdpc3RyYXRpb24KKwkgKDkpIFNldHRpbmcgdGhlIGRhdGEgZmlsZSBzaXplCisJKDEwKSBQYWdlIGFsbG9jL3JlYWQvd3JpdGUKKwkoMTEpIFBhZ2UgdW5jYWNoaW5nCisJKDEyKSBJbmRleCBhbmQgZGF0YSBmaWxlIHVwZGF0ZQorCSgxMykgTWlzY2VsbGFuZW91cyBjb29raWUgb3BlcmF0aW9ucworCSgxNCkgQ29va2llIHVucmVnaXN0cmF0aW9uCisJKDE1KSBJbmRleCBhbmQgZGF0YSBmaWxlIGludmFsaWRhdGlvbgorCSgxNikgRlMtQ2FjaGUgc3BlY2lmaWMgcGFnZSBmbGFncy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTkVUV09SSyBGSUxFU1lTVEVNIERFRklOSVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZTLUNhY2hlIG5lZWRzIGEgZGVzY3JpcHRpb24gb2YgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbS4gIFRoaXMgaXMgc3BlY2lmaWVkCit1c2luZyBhIHJlY29yZCBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKworCXN0cnVjdCBmc2NhY2hlX25ldGZzIHsKKwkJdWludDMyX3QJCQl2ZXJzaW9uOworCQljb25zdCBjaGFyCQkJKm5hbWU7CisJCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkJKnByaW1hcnlfaW5kZXg7CisJCS4uLgorCX07CisKK1RoaXMgZmlyc3QgdHdvIGZpZWxkcyBzaG91bGQgYmUgZmlsbGVkIGluIGJlZm9yZSByZWdpc3RyYXRpb24sIGFuZCB0aGUgdGhpcmQKK3dpbGwgYmUgZmlsbGVkIGluIGJ5IHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb247IGFueSBvdGhlciBmaWVsZHMgc2hvdWxkIGp1c3QgYmUKK2lnbm9yZWQgYW5kIGFyZSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisKK1RoZSBmaWVsZHMgYXJlOgorCisgKDEpIFRoZSBuYW1lIG9mIHRoZSBuZXRmcyAodXNlZCBhcyB0aGUga2V5IGluIHRoZSB0b3BsZXZlbCBpbmRleCkuCisKKyAoMikgVGhlIHZlcnNpb24gb2YgdGhlIG5ldGZzIChpZiB0aGUgbmFtZSBtYXRjaGVzIGJ1dCB0aGUgdmVyc2lvbiBkb2Vzbid0LCB0aGUKKyAgICAgZW50aXJlIGluLWNhY2hlIGhpZXJhcmNoeSBmb3IgdGhpcyBuZXRmcyB3aWxsIGJlIHNjcmFwcGVkIGFuZCBiZWd1bgorICAgICBhZnJlc2gpLgorCisgKDMpIFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBwcmltYXJ5IGluZGV4IHdpbGwgYmUgYWxsb2NhdGVkIGFjY29yZGluZyB0bworICAgICBhbm90aGVyIHBhcmFtZXRlciBwYXNzZWQgaW50byB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uLgorCitGb3IgZXhhbXBsZSwga0FGUyAobGludXgvZnMvYWZzLykgdXNlcyB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHRvIGRlc2NyaWJlCitpdHNlbGY6CisKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyBhZnNfY2FjaGVfbmV0ZnMgPSB7CisJCS52ZXJzaW9uCT0gMCwKKwkJLm5hbWUJCT0gImFmcyIsCisJfTsKKworCis9PT09PT09PT09PT09PT09CitJTkRFWCBERUZJTklUSU9OCis9PT09PT09PT09PT09PT09CisKK0luZGljZXMgYXJlIHVzZWQgZm9yIHR3byBwdXJwb3NlczoKKworICgxKSBUbyBhaWQgdGhlIGZpbmRpbmcgb2YgYSBmaWxlIGJhc2VkIG9uIGEgc2VyaWVzIG9mIGtleXMgKHN1Y2ggYXMgQUZTJ3MKKyAgICAgImNlbGwiLCAidm9sdW1lIElEIiwgInZub2RlIElEIikuCisKKyAoMikgVG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzY2FyZCBhIHN1YnNldCBvZiBhbGwgdGhlIGZpbGVzIGNhY2hlZCBiYXNlZCBhcm91bmQKKyAgICAgYSBwYXJ0aWN1bGFyIGtleSAtIGZvciBpbnN0YW5jZSB0byBtaXJyb3IgdGhlIHJlbW92YWwgb2YgYW4gQUZTIHZvbHVtZS4KKworSG93ZXZlciwgc2luY2UgaXQncyB1bmxpa2VseSB0aGF0IGFueSB0d28gbmV0ZnMncyBhcmUgZ29pbmcgdG8gd2FudCB0byBkZWZpbmUKK3RoZWlyIGluZGV4IGhpZXJhcmNoaWVzIGluIHF1aXRlIHRoZSBzYW1lIHdheSwgRlMtQ2FjaGUgdHJpZXMgdG8gaW1wb3NlIGFzIGZldworcmVzdHJhaW50cyBhcyBwb3NzaWJsZSBvbiBob3cgYW4gaW5kZXggaXMgc3RydWN0dXJlZCBhbmQgd2hlcmUgaXQgaXMgcGxhY2VkIGluCit0aGUgdHJlZS4gIFRoZSBuZXRmcyBjYW4gZXZlbiBtaXggaW5kaWNlcyBhbmQgZGF0YSBmaWxlcyBhdCB0aGUgc2FtZSBsZXZlbCwgYnV0CitpdCdzIG5vdCByZWNvbW1lbmRlZC4KKworRWFjaCBpbmRleCBlbnRyeSBjb25zaXN0cyBvZiBhIGtleSBvZiBpbmRldGVybWluYXRlIGxlbmd0aCBwbHVzIHNvbWUgYXV4aWxsaWFyeQorZGF0YSwgYWxzbyBvZiBpbmRldGVybWluYXRlIGxlbmd0aC4KKworVGhlcmUgYXJlIHNvbWUgbGltaXRzIG9uIGluZGljZXM6CisKKyAoMSkgQW55IGluZGV4IGNvbnRhaW5pbmcgbm9uLWluZGV4IG9iamVjdHMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gYSBzaW5nbGUKKyAgICAgY2FjaGUuICBBbnkgc3VjaCBvYmplY3RzIGNyZWF0ZWQgd2l0aGluIGFuIGluZGV4IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUKKyAgICAgZmlyc3QgY2FjaGUgb25seS4gIFRoZSBjYWNoZSBpbiB3aGljaCBhbiBpbmRleCBpcyBjcmVhdGVkIGNhbiBiZQorICAgICBjb250cm9sbGVkIGJ5IGNhY2hlIHRhZ3MgKHNlZSBiZWxvdykuCisKKyAoMikgVGhlIGVudHJ5IGRhdGEgbXVzdCBiZSBhdG9taWNhbGx5IGpvdXJuYWxsYWJsZSwgc28gaXQgaXMgbGltaXRlZCB0byBhYm91dAorICAgICA0MDAgYnl0ZXMgYXQgcHJlc2VudC4gIEF0IGxlYXN0IDQwMCBieXRlcyB3aWxsIGJlIGF2YWlsYWJsZS4KKworICgzKSBUaGUgZGVwdGggb2YgdGhlIGluZGV4IHRyZWUgc2hvdWxkIGJlIGp1ZGdlZCB3aXRoIGNhcmUgYXMgdGhlIHNlYXJjaAorICAgICBmdW5jdGlvbiBpcyByZWN1cnNpdmUuICBUb28gbWFueSBsYXllcnMgd2lsbCBydW4gdGhlIGtlcm5lbCBvdXQgb2Ygc3RhY2suCisKKworPT09PT09PT09PT09PT09PT0KK09CSkVDVCBERUZJTklUSU9OCis9PT09PT09PT09PT09PT09PQorCitUbyBkZWZpbmUgYW4gb2JqZWN0LCBhIHN0cnVjdHVyZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUgc2hvdWxkIGJlIGZpbGxlZCBvdXQ6CisKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmCisJeworCQl1aW50OF90IG5hbWVbMTZdOworCQl1aW50OF90IHR5cGU7CisKKwkJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICooKnNlbGVjdF9jYWNoZSkoCisJCQljb25zdCB2b2lkICpwYXJlbnRfbmV0ZnNfZGF0YSwKKwkJCWNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKTsKKworCQl1aW50MTZfdCAoKmdldF9rZXkpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICB2b2lkICpidWZmZXIsCisJCQkJICAgIHVpbnQxNl90IGJ1Zm1heCk7CisKKwkJdm9pZCAoKmdldF9hdHRyKShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgdWludDY0X3QgKnNpemUpOworCisJCXVpbnQxNl90ICgqZ2V0X2F1eCkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgIHZvaWQgKmJ1ZmZlciwKKwkJCQkgICAgdWludDE2X3QgYnVmbWF4KTsKKworCQllbnVtIGZzY2FjaGVfY2hlY2thdXggKCpjaGVja19hdXgpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJCSAgIHVpbnQxNl90IGRhdGFsZW4pOworCisJCXZvaWQgKCpnZXRfY29udGV4dCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpOworCisJCXZvaWQgKCpwdXRfY29udGV4dCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpOworCisJCXZvaWQgKCptYXJrX3BhZ2VzX2NhY2hlZCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgc3RydWN0IHBhZ2V2ZWMgKmNhY2hlZF9wdmVjKTsKKworCQl2b2lkICgqbm93X3VuY2FjaGVkKSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7CisJfTsKKworVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CisKKyAoMSkgVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBbbWFuZGF0b3J5XS4KKworICAgICBUaGlzIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworCSgqKSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYCisKKwkgICAgVGhpcyBkZWZpbmVzIGFuIGluZGV4LCB3aGljaCBpcyBhIHNwZWNpYWwgRlMtQ2FjaGUgdHlwZS4KKworCSgqKSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFCisKKwkgICAgVGhpcyBkZWZpbmVzIGFuIG9yZGluYXJ5IGRhdGEgZmlsZS4KKworCSgqKSBBbnkgb3RoZXIgdmFsdWUgYmV0d2VlbiAyIGFuZCAyNTUKKworCSAgICBUaGlzIGRlZmluZXMgYW4gZXh0cmFvcmRpbmFyeSBvYmplY3Qgc3VjaCBhcyBhbiBYQVRUUi4KKworICgyKSBUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHR5cGUgKE5VTCB0ZXJtaW5hdGVkIHVubGVzcyBhbGwgMTYgY2hhcnMgYXJlIHVzZWQpCisgICAgIFtvcHRpb25hbF0uCisKKyAoMykgQSBmdW5jdGlvbiB0byBzZWxlY3QgdGhlIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIGFuIGluZGV4IFtvcHRpb25hbF0uCisKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIHdoZW4gYW4gaW5kZXggbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGluIGEgY2FjaGUKKyAgICAgZHVyaW5nIHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgbm9uLWluZGV4IG9iamVjdC4gIE9ubHkgdGhlIGltbWVkaWF0ZSBpbmRleAorICAgICBwYXJlbnQgZm9yIHRoZSBub24taW5kZXggb2JqZWN0IHdpbGwgYmUgcXVlcmllZC4gIEFueSBpbmRpY2VzIGFib3ZlIHRoYXQKKyAgICAgaW4gdGhlIGhpZXJhcmNoeSBtYXkgYmUgc3RvcmVkIGluIG11bHRpcGxlIGNhY2hlcy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QKKyAgICAgbmVlZCB0byBiZSBzdXBwbGllZCBmb3IgYW55IG5vbi1pbmRleCBvYmplY3Qgb3IgYW55IGluZGV4IHRoYXQgd2lsbCBvbmx5CisgICAgIGhhdmUgaW5kZXggY2hpbGRyZW4uCisKKyAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcGxpZWQgb3IgaWYgaXQgcmV0dXJucyBOVUxMIHRoZW4gdGhlIGZpcnN0CisgICAgIGNhY2hlIGluIHRoZSBwYXJlbnQncyBsaXN0IHdpbGwgYmUgY2hvc2VkLCBvciBmYWlsaW5nIHRoYXQsIHRoZSBmaXJzdAorICAgICBjYWNoZSBpbiB0aGUgbWFzdGVyIGxpc3QuCisKKyAoNCkgQSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhbiBvYmplY3QncyBrZXkgZnJvbSB0aGUgbmV0ZnMgW21hbmRhdG9yeV0uCisKKyAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBuZXRmcyBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUKKyAgICAgY29va2llIGFjcXVpc2l0aW9uIGZ1bmN0aW9uIGFuZCB0aGUgbWF4aW11bSBsZW5ndGggb2Yga2V5IGRhdGEgdGhhdCBpdCBtYXkKKyAgICAgcHJvdmlkZS4gIEl0IHNob3VsZCB3cml0ZSB0aGUgcmVxdWlyZWQga2V5IGRhdGEgaW50byB0aGUgZ2l2ZW4gYnVmZmVyIGFuZAorICAgICByZXR1cm4gdGhlIHF1YW50aXR5IGl0IHdyb3RlLgorCisgKDUpIEEgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXR0cmlidXRlIGRhdGEgZnJvbSB0aGUgbmV0ZnMgW29wdGlvbmFsXS4KKworICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG5ldGZzIGRhdGEgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZQorICAgICBjb29raWUgYWNxdWlzaXRpb24gZnVuY3Rpb24uICBJdCBzaG91bGQgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBmaWxlIGlmCisgICAgIHRoaXMgaXMgYSBkYXRhIGZpbGUuICBUaGUgc2l6ZSBtYXkgYmUgdXNlZCB0byBnb3Zlcm4gaG93IG11Y2ggY2FjaGUgbXVzdAorICAgICBiZSByZXNlcnZlZCBmb3IgdGhpcyBmaWxlIGluIHRoZSBjYWNoZS4KKworICAgICBJZiB0aGUgZnVuY3Rpb24gaXMgYWJzZW50LCBhIGZpbGUgc2l6ZSBvZiAwIGlzIGFzc3VtZWQuCisKKyAoNikgQSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhdXhpbGxpYXJ5IGRhdGEgZnJvbSB0aGUgbmV0ZnMgW29wdGlvbmFsXS4KKworICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG5ldGZzIGRhdGEgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZQorICAgICBjb29raWUgYWNxdWlzaXRpb24gZnVuY3Rpb24gYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhdXhpbGxpYXJ5IGRhdGEgdGhhdAorICAgICBpdCBtYXkgcHJvdmlkZS4gIEl0IHNob3VsZCB3cml0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGludG8gdGhlIGdpdmVuIGJ1ZmZlcgorICAgICBhbmQgcmV0dXJuIHRoZSBxdWFudGl0eSBpdCB3cm90ZS4KKworICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGFic2VudCwgdGhlIGF1eGlsbGlhcnkgZGF0YSBsZW5ndGggd2lsbCBiZSBzZXQgdG8gMC4KKworICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBhdXhpbGxpYXJ5IGRhdGEgYnVmZmVyIG1heSBiZSBkZXBlbmRlbnQgb24gdGhlIGtleQorICAgICBsZW5ndGguICBBIG5ldGZzIG11c3RuJ3QgcmVseSBvbiBiZWluZyBhYmxlIHRvIHByb3ZpZGUgbW9yZSB0aGFuIDQwMCBieXRlcworICAgICBmb3IgYm90aC4KKworICg3KSBBIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBhdXhpbGxpYXJ5IGRhdGEgW29wdGlvbmFsXS4KKworICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIGNoZWNrIHRoYXQgYSBtYXRjaCBmb3VuZCBpbiB0aGUgY2FjaGUgZm9yCisgICAgIHRoaXMgb2JqZWN0IGlzIHZhbGlkLiAgRm9yIGluc3RhbmNlIHdpdGggQUZTIGl0IGNvdWxkIGNoZWNrIHRoZSBhdXhpbGxpYXJ5CisgICAgIGRhdGEgYWdhaW5zdCB0aGUgZGF0YSB2ZXJzaW9uIG51bWJlciByZXR1cm5lZCBieSB0aGUgc2VydmVyIHRvIGRldGVybWluZQorICAgICB3aGV0aGVyIHRoZSBpbmRleCBlbnRyeSBpbiBhIGNhY2hlIGlzIHN0aWxsIHZhbGlkLgorCisgICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgYWJzZW50LCBpdCB3aWxsIGJlIGFzc3VtZWQgdGhhdCBtYXRjaGluZyBvYmplY3RzIGluIGEKKyAgICAgY2FjaGUgYXJlIGFsd2F5cyB2YWxpZC4KKworICAgICBJZiBwcmVzZW50LCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9PS0FZCQktIHRoZSBlbnRyeSBpcyBva2F5IGFzIGlzCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfTkVFRFNfVVBEQVRFCS0gdGhlIGVudHJ5IHJlcXVpcmVzIHVwZGF0ZQorCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFCQktIHRoZSBlbnRyeSBzaG91bGQgYmUgZGVsZXRlZAorCisgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgYXV4aWxsaWFyeSBkYXRhIGluCisgICAgIHRoZSBjYWNoZSBhbmQgY29weSBpdCBpbnRvIHRoZSBuZXRmcydzIHN0cnVjdHVyZXMuCisKKyAoOCkgQSBwYWlyIG9mIGZ1bmN0aW9ucyB0byBtYW5hZ2UgY29udGV4dHMgZm9yIHRoZSBjb21wbGV0aW9uIGNhbGxiYWNrCisgICAgIFtvcHRpb25hbF0uCisKKyAgICAgVGhlIGNhY2hlIHJlYWQvd3JpdGUgZnVuY3Rpb25zIGFyZSBwYXNzZWQgYSBjb250ZXh0IHdoaWNoIGlzIHRoZW4gcGFzc2VkCisgICAgIHRvIHRoZSBJL08gY29tcGxldGlvbiBjYWxsYmFjayBmdW5jdGlvbi4gIFRvIGVuc3VyZSB0aGlzIGNvbnRleHQgcmVtYWlucworICAgICB2YWxpZCB1bnRpbCBhZnRlciB0aGUgSS9PIGNvbXBsZXRpb24gaXMgY2FsbGVkLCB0d28gZnVuY3Rpb25zIG1heSBiZQorICAgICBwcm92aWRlZDogb25lIHRvIGdldCBhbiBleHRyYSByZWZlcmVuY2Ugb24gdGhlIGNvbnRleHQsIGFuZCBvbmUgdG8gZHJvcCBhCisgICAgIHJlZmVyZW5jZSB0byBpdC4KKworICAgICBJZiB0aGUgY29udGV4dCBpcyBub3QgdXNlZCBvciBpcyBhIHR5cGUgb2Ygb2JqZWN0IHRoYXQgd29uJ3QgZ28gb3V0IG9mCisgICAgIHNjb3BlLCB0aGVuIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlcXVpcmVkLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QKKyAgICAgcmVxdWlyZWQgZm9yIGluZGljZXMgYXMgaW5kaWNlcyBtYXkgbm90IGNvbnRhaW4gZGF0YS4gIFRoZXNlIGZ1bmN0aW9ucyBtYXkKKyAgICAgYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0IGFuZCBzbyBtYXkgbm90IHNsZWVwLgorCisgKDkpIEEgZnVuY3Rpb24gdG8gbWFyayBhIHBhZ2UgYXMgcmV0YWluaW5nIGNhY2hlIG1ldGFkYXRhIFtvcHRpb25hbF0uCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGNhY2hlIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgcmV0YWluaW5nIGluLW1lbW9yeQorICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBwYWdlIGFuZCB0aGF0IHRoZSBuZXRmcyBzaG91bGQgdW5jYWNoZSB0aGUgcGFnZSB3aGVuCisgICAgIGl0IGhhcyBmaW5pc2hlZC4gIFRoaXMgZG9lcyBub3QgaW5kaWNhdGUgd2hldGhlciB0aGVyZSdzIGRhdGEgb24gdGhlIGRpc2sKKyAgICAgb3Igbm90LiAgTm90ZSB0aGF0IHNldmVyYWwgcGFnZXMgYXQgb25jZSBtYXkgYmUgcHJlc2VudGVkIGZvciBtYXJraW5nLgorCisgICAgIFRoZSBQR19mc2NhY2hlIGJpdCBpcyBzZXQgb24gdGhlIHBhZ2VzIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlCisgICAgIGNhbGxlZCwgc28gdGhlIGZ1bmN0aW9uIG5lZWQgbm90IGJlIHByb3ZpZGVkIGlmIHRoaXMgaXMgc3VmZmljaWVudC4KKworICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBmb3IgaW5kaWNlcyBhcyB0aGV5J3JlIG5vdCBwZXJtaXR0ZWQgZGF0YS4KKworKDEwKSBBIGZ1bmN0aW9uIHRvIHVubWFyayBhbGwgdGhlIHBhZ2VzIHJldGFpbmluZyBjYWNoZSBtZXRhZGF0YSBbbWFuZGF0b3J5XS4KKworICAgICBUaGlzIGlzIGNhbGxlZCBieSBGUy1DYWNoZSB0byBpbmRpY2F0ZSB0aGF0IGEgYmFja2luZyBzdG9yZSBpcyBiZWluZworICAgICB1bmJvdW5kIGZyb20gYSBjb29raWUgYW5kIHRoYXQgYWxsIHRoZSBtYXJrcyBvbiB0aGUgcGFnZXMgc2hvdWxkIGJlCisgICAgIGNsZWFyZWQgdG8gcHJldmVudCBjb25mdXNpb24uICBOb3RlIHRoYXQgdGhlIGNhY2hlIHdpbGwgaGF2ZSB0b3JuIGRvd24gYWxsCisgICAgIGl0cyB0cmFja2luZyBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoZSBwYWdlcyBkb24ndCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkKKyAgICAgdW5jYWNoZWQuCisKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIGluZGljZXMgYXMgdGhleSdyZSBub3QgcGVybWl0dGVkIGRhdGEuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK05FVFdPUksgRklMRVNZU1RFTSAoVU4pUkVHSVNUUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZmlyc3Qgc3RlcCBpcyB0byBkZWNsYXJlIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gdG8gdGhlIGNhY2hlLiAgVGhpcyBhbHNvCitpbnZvbHZlcyBzcGVjaWZ5aW5nIHRoZSBsYXlvdXQgb2YgdGhlIHByaW1hcnkgaW5kZXggKGZvciBBRlMsIHRoaXMgd291bGQgYmUgdGhlCisiY2VsbCIgbGV2ZWwpLgorCitUaGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGlzOgorCisJaW50IGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKTsKKworSXQganVzdCB0YWtlcyBhIHBvaW50ZXIgdG8gdGhlIG5ldGZzIGRlZmluaXRpb24uICBJdCByZXR1cm5zIDAgb3IgYW4gZXJyb3IgYXMKK2FwcHJvcHJpYXRlLgorCitGb3Iga0FGUywgcmVnaXN0cmF0aW9uIGlzIGRvbmUgYXMgZm9sbG93czoKKworCXJldCA9IGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CisKK1RoZSBsYXN0IHN0ZXAgaXMsIG9mIGNvdXJzZSwgdW5yZWdpc3RyYXRpb246CisKKwl2b2lkIGZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMpOworCisKKz09PT09PT09PT09PT09PT0KK0NBQ0hFIFRBRyBMT09LVVAKKz09PT09PT09PT09PT09PT0KKworRlMtQ2FjaGUgcGVybWl0cyB0aGUgdXNlIG9mIG1vcmUgdGhhbiBvbmUgY2FjaGUuICBUbyBwZXJtaXQgcGFydGljdWxhciBpbmRleAorc3VidHJlZXMgdG8gYmUgYm91bmQgdG8gcGFydGljdWxhciBjYWNoZXMsIHRoZSBzZWNvbmQgc3RlcCBpcyB0byBsb29rIHVwIGNhY2hlCityZXByZXNlbnRhdGlvbiB0YWdzLiAgVGhpcyBzdGVwIGlzIG9wdGlvbmFsOyBpdCBjYW4gYmUgbGVmdCBlbnRpcmVseSB1cCB0bworRlMtQ2FjaGUgYXMgdG8gd2hpY2ggY2FjaGUgc2hvdWxkIGJlIHVzZWQuICBUaGUgcHJvYmxlbSB3aXRoIGRvaW5nIHRoYXQgaXMgdGhhdAorRlMtQ2FjaGUgd2lsbCBhbHdheXMgcGljayB0aGUgZmlyc3QgY2FjaGUgdGhhdCB3YXMgcmVnaXN0ZXJlZC4KKworVG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbiBmb3IgYSBuYW1lZCB0YWc6CisKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKmZzY2FjaGVfbG9va3VwX2NhY2hlX3RhZyhjb25zdCBjaGFyICpuYW1lKTsKKworVGhpcyB0YWtlcyBhIHRleHQgc3RyaW5nIGFzIHRoZSBuYW1lIGFuZCByZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgYSB0YWcuICBJdAord2lsbCBuZXZlciByZXR1cm4gYW4gZXJyb3IuICBJdCBtYXkgcmV0dXJuIGEgZHVtbXkgdGFnLCBob3dldmVyLCBpZiBpdCBydW5zIG91dAorb2YgbWVtb3J5OyB0aGlzIHdpbGwgaW5oaWJpdCBjYWNoaW5nIHdpdGggdGhpcyB0YWcuCisKK0FueSByZXByZXNlbnRhdGlvbiBzbyBvYnRhaW5lZCBtdXN0IGJlIHJlbGVhc2VkIGJ5IHBhc3NpbmcgaXQgdG8gdGhpcyBmdW5jdGlvbjoKKworCXZvaWQgZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZyk7CisKK1RoZSB0YWcgd2lsbCBiZSByZXRyaWV2ZWQgYnkgRlMtQ2FjaGUgd2hlbiBpdCBjYWxscyB0aGUgb2JqZWN0IGRlZmluaXRpb24KK29wZXJhdGlvbiBzZWxlY3RfY2FjaGUoKS4KKworCis9PT09PT09PT09PT09PT09PT0KK0lOREVYIFJFR0lTVFJBVElPTgorPT09PT09PT09PT09PT09PT09CisKK1RoZSB0aGlyZCBzdGVwIGlzIHRvIGluZm9ybSBGUy1DYWNoZSBhYm91dCBwYXJ0IG9mIGFuIGluZGV4IGhpZXJhcmNoeSB0aGF0IGNhbgorYmUgdXNlZCB0byBsb2NhdGUgZmlsZXMuICBUaGlzIGlzIGRvbmUgYnkgcmVxdWVzdGluZyBhIGNvb2tpZSBmb3IgZWFjaCBpbmRleCBpbgordGhlIHBhdGggdG8gdGhlIGZpbGU6CisKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKgorCWZzY2FjaGVfYWNxdWlyZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpwYXJlbnQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGZzY2FjaGVfb2JqZWN0X2RlZiAqZGVmLAorCQkJICAgICAgIHZvaWQgKm5ldGZzX2RhdGEpOworCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gaW5kZXggZW50cnkgaW4gdGhlIGluZGV4IHJlcHJlc2VudGVkIGJ5IHBhcmVudCwKK2ZpbGxpbmcgaW4gdGhlIGluZGV4IGVudHJ5IGJ5IGNhbGxpbmcgdGhlIG9wZXJhdGlvbnMgcG9pbnRlZCB0byBieSBkZWYuCisKK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMgYW4gZXJyb3IgLSBhbGwgZXJyb3JzIGFyZSBoYW5kbGVkCitpbnRlcm5hbGx5LiAgSXQgbWF5LCBob3dldmVyLCByZXR1cm4gTlVMTCB0byBpbmRpY2F0ZSBubyBjb29raWUuICBJdCBpcyBxdWl0ZQorYWNjZXB0YWJsZSB0byBwYXNzIHRoaXMgdG9rZW4gYmFjayB0byB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBwYXJlbnQgdG8gYW5vdGhlcgorYWNxdWlzaXRpb24gKG9yIGV2ZW4gdG8gdGhlIHJlbGlucXVpc2ggY29va2llLCByZWFkIHBhZ2UgYW5kIHdyaXRlIHBhZ2UKK2Z1bmN0aW9ucyAtIHNlZSBiZWxvdykuCisKK05vdGUgYWxzbyB0aGF0IG5vIGluZGljZXMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQgaW4gYSBjYWNoZSB1bnRpbCBhIG5vbi1pbmRleAorb2JqZWN0IG5lZWRzIHRvIGJlIGNyZWF0ZWQgc29tZXdoZXJlIGRvd24gdGhlIGhpZXJhcmNoeS4gIEZ1cnRoZXJtb3JlLCBhbiBpbmRleAorbWF5IGJlIGNyZWF0ZWQgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgY2FjaGVzIGluZGVwZW5kZW50bHkgYXQgZGlmZmVyZW50IHRpbWVzLgorVGhpcyBpcyBhbGwgaGFuZGxlZCB0cmFuc3BhcmVudGx5LCBhbmQgdGhlIG5ldGZzIGRvZXNuJ3Qgc2VlIGFueSBvZiBpdC4KKworRm9yIGV4YW1wbGUsIHdpdGggQUZTLCBhIGNlbGwgd291bGQgYmUgYWRkZWQgdG8gdGhlIHByaW1hcnkgaW5kZXguICBUaGlzIGluZGV4CitlbnRyeSB3b3VsZCBoYXZlIGEgZGVwZW5kZW50IGlub2RlIGNvbnRhaW5pbmcgYSB2b2x1bWUgbG9jYXRpb24gaW5kZXggZm9yIHRoZQordm9sdW1lIG1hcHBpbmdzIHdpdGhpbiB0aGlzIGNlbGw6CisKKwljZWxsLT5jYWNoZSA9CisJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUoYWZzX2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCisJCQkJICAgICAgICZhZnNfY2VsbF9jYWNoZV9pbmRleF9kZWYsCisJCQkJICAgICAgIGNlbGwpOworCitUaGVuIHdoZW4gYSB2b2x1bWUgbG9jYXRpb24gd2FzIGFjY2Vzc2VkLCBpdCB3b3VsZCBiZSBlbnRlcmVkIGludG8gdGhlIGNlbGwncworaW5kZXggYW5kIGFuIGlub2RlIHdvdWxkIGJlIGFsbG9jYXRlZCB0aGF0IGFjdHMgYXMgYSB2b2x1bWUgdHlwZSBhbmQgaGFzaCBjaGFpbgorY29tYmluYXRpb246CisKKwl2bG9jYXRpb24tPmNhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShjZWxsLT5jYWNoZSwKKwkJCQkgICAgICAgJmFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmLAorCQkJCSAgICAgICB2bG9jYXRpb24pOworCitBbmQgdGhlbiBhIHBhcnRpY3VsYXIgZmxhdm91ciBvZiB2b2x1bWUgKFIvTyBmb3IgZXhhbXBsZSkgY291bGQgYmUgYWRkZWQgdG8KK3RoYXQgaW5kZXgsIGNyZWF0aW5nIGFub3RoZXIgaW5kZXggZm9yIHZub2RlcyAoQUZTIGlub2RlIGVxdWl2YWxlbnRzKToKKworCXZvbHVtZS0+Y2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKHZsb2NhdGlvbi0+Y2FjaGUsCisJCQkJICAgICAgICZhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkgICAgICAgdm9sdW1lKTsKKworCis9PT09PT09PT09PT09PT09PT09PT09CitEQVRBIEZJTEUgUkVHSVNUUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb3VydGggc3RlcCBpcyB0byByZXF1ZXN0IGEgZGF0YSBmaWxlIGJlIGNyZWF0ZWQgaW4gdGhlIGNhY2hlLiAgVGhpcyBpcworaWRlbnRpY2FsIHRvIGluZGV4IGNvb2tpZSBhY3F1aXNpdGlvbi4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgdHlwZSBpbgordGhlIG9iamVjdCBkZWZpbml0aW9uIHNob3VsZCBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiBpbmRleCB0eXBlLgorCisJdm5vZGUtPmNhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh2b2x1bWUtPmNhY2hlLAorCQkJCSAgICAgICAmYWZzX3Zub2RlX2NhY2hlX29iamVjdF9kZWYsCisJCQkJICAgICAgIHZub2RlKTsKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01JU0NFTExBTkVPVVMgT0JKRUNUIFJFR0lTVFJBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FuIG9wdGlvbmFsIHN0ZXAgaXMgdG8gcmVxdWVzdCBhbiBvYmplY3Qgb2YgbWlzY2VsbGFuZW91cyB0eXBlIGJlIGNyZWF0ZWQgaW4KK3RoZSBjYWNoZS4gIFRoaXMgaXMgYWxtb3N0IGlkZW50aWNhbCB0byBpbmRleCBjb29raWUgYWNxdWlzaXRpb24uICBUaGUgb25seQorZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSB0eXBlIGluIHRoZSBvYmplY3QgZGVmaW5pdGlvbiBzaG91bGQgYmUgc29tZXRoaW5nIG90aGVyCit0aGFuIGluZGV4IHR5cGUuICBXaGlsc3QgdGhlIHBhcmVudCBvYmplY3QgY291bGQgYmUgYW4gaW5kZXgsIGl0J3MgbW9yZSBsaWtlbHkKK2l0IHdvdWxkIGJlIHNvbWUgb3RoZXIgdHlwZSBvZiBvYmplY3Qgc3VjaCBhcyBhIGRhdGEgZmlsZS4KKworCXhhdHRyLT5jYWNoZSA9CisJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUodm5vZGUtPmNhY2hlLAorCQkJCSAgICAgICAmYWZzX3hhdHRyX2NhY2hlX29iamVjdF9kZWYsCisJCQkJICAgICAgIHhhdHRyKTsKKworTWlzY2VsbGFuZW91cyBvYmplY3RzIG1pZ2h0IGJlIHVzZWQgdG8gc3RvcmUgZXh0ZW5kZWQgYXR0cmlidXRlcyBvciBkaXJlY3RvcnkKK2VudHJpZXMgZm9yIGV4YW1wbGUuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK1NFVFRJTkcgVEhFIERBVEEgRklMRSBTSVpFCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZmlmdGggc3RlcCBpcyB0byBzZXQgdGhlIHBoeXNpY2FsIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUsIHN1Y2ggYXMgaXRzIHNpemUuCitUaGlzIGRvZXNuJ3QgYXV0b21hdGljYWxseSByZXNlcnZlIGFueSBzcGFjZSBpbiB0aGUgY2FjaGUsIGJ1dCBwZXJtaXRzIHRoZQorY2FjaGUgdG8gYWRqdXN0IGl0cyBtZXRhZGF0YSBmb3IgZGF0YSB0cmFja2luZyBhcHByb3ByaWF0ZWx5OgorCisJaW50IGZzY2FjaGVfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKKworVGhlIGNhY2hlIHdpbGwgcmV0dXJuIC1FTk9CVUZTIGlmIHRoZXJlIGlzIG5vIGJhY2tpbmcgY2FjaGUgb3IgaWYgdGhlcmUgaXMgbm8KK3NwYWNlIHRvIGFsbG9jYXRlIGFueSBleHRyYSBtZXRhZGF0YSByZXF1aXJlZCBpbiB0aGUgY2FjaGUuICBUaGUgYXR0cmlidXRlcword2lsbCBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBnZXRfYXR0cigpIGNvb2tpZSBkZWZpbml0aW9uIG9wZXJhdGlvbi4KKworTm90ZSB0aGF0IGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgZGF0YSBwYWdlcyBpbiB0aGUgY2FjaGUgb3ZlciB0aGlzIHNpemUgbWF5CitiZSByZWJ1ZmZlZCB3aXRoIC1FTk9CVUZTLgorCitUaGlzIG9wZXJhdGlvbiBzY2hlZHVsZXMgYW4gYXR0cmlidXRlIGFkanVzdG1lbnQgdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGF0Citzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGFuZCBhcyBzdWNoLCBpdCBtYXkgaGFwcGVuIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zCit0byB0aGUgY2FsbGVyLiAgVGhlIGF0dHJpYnV0ZSBhZGp1c3RtZW50IGV4Y2x1ZGVzIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMuCisKKworPT09PT09PT09PT09PT09PT09PT09CitQQUdFIFJFQUQvQUxMT0MvV1JJVEUKKz09PT09PT09PT09PT09PT09PT09PQorCitBbmQgdGhlIHNpeHRoIHN0ZXAgaXMgdG8gc3RvcmUgYW5kIHJldHJpZXZlIHBhZ2VzIGluIHRoZSBjYWNoZS4gIFRoZXJlIGFyZQordGhyZWUgZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgdG8gZG8gdGhpcy4KKworTm90ZToKKworICgxKSBBIHBhZ2Ugc2hvdWxkIG5vdCBiZSByZS1yZWFkIG9yIHJlLWFsbG9jYXRlZCB3aXRob3V0IHVuY2FjaGluZyBpdCBmaXJzdC4KKworICgyKSBBIHJlYWQgb3IgYWxsb2NhdGVkIHBhZ2UgbXVzdCBiZSB1bmNhY2hlZCB3aGVuIHRoZSBuZXRmcyBwYWdlIGlzIHJlbGVhc2VkCisgICAgIGZyb20gdGhlIHBhZ2VjYWNoZS4KKworICgzKSBBIHBhZ2Ugc2hvdWxkIG9ubHkgYmUgd3JpdHRlbiB0byB0aGUgY2FjaGUgaWYgcHJldmlvdXMgcmVhZCBvciBhbGxvY2F0ZWQuCisKK1RoaXMgcGVybWl0cyB0aGUgY2FjaGUgdG8gbWFpbnRhaW4gaXRzIHBhZ2UgdHJhY2tpbmcgaW4gcHJvcGVyIG9yZGVyLgorCisKK1BBR0UgUkVBRAorLS0tLS0tLS0tCisKK0ZpcnN0bHksIHRoZSBuZXRmcyBzaG91bGQgYXNrIEZTLUNhY2hlIHRvIGV4YW1pbmUgdGhlIGNhY2hlcyBhbmQgcmVhZCB0aGUKK2NvbnRlbnRzIGNhY2hlZCBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2Ugb2YgYSBwYXJ0aWN1bGFyIGZpbGUgaWYgcHJlc2VudCwgb3IgZWxzZQorYWxsb2NhdGUgc3BhY2UgdG8gc3RvcmUgdGhlIGNvbnRlbnRzIGlmIG5vdDoKKworCXR5cGVkZWYKKwl2b2lkICgqZnNjYWNoZV9yd19jb21wbGV0ZV90KShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICB2b2lkICpjb250ZXh0LAorCQkJCSAgICAgIGludCBlcnJvcik7CisKKwlpbnQgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgICBmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkJICAgICAgIHZvaWQgKmNvbnRleHQsCisJCQkJICAgICAgIGdmcF90IGdmcCk7CisKK1RoZSBjb29raWUgYXJndW1lbnQgbXVzdCBzcGVjaWZ5IGEgY29va2llIGZvciBhbiBvYmplY3QgdGhhdCBpc24ndCBhbiBpbmRleCwKK3RoZSBwYWdlIHNwZWNpZmllZCB3aWxsIGhhdmUgdGhlIGRhdGEgbG9hZGVkIGludG8gaXQgKGFuZCBpcyBhbHNvIHVzZWQgdG8KK3NwZWNpZnkgdGhlIHBhZ2UgbnVtYmVyKSwgYW5kIHRoZSBnZnAgYXJndW1lbnQgaXMgdXNlZCB0byBjb250cm9sIGhvdyBhbnkKK21lbW9yeSBhbGxvY2F0aW9ucyBtYWRlIGFyZSBzYXRpc2ZpZWQuCisKK0lmIHRoZSBjb29raWUgaW5kaWNhdGVzIHRoZSBpbm9kZSBpcyBub3QgY2FjaGVkOgorCisgKDEpIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRU5PQlVGUy4KKworRWxzZSBpZiB0aGVyZSdzIGEgY29weSBvZiB0aGUgcGFnZSByZXNpZGVudCBpbiB0aGUgY2FjaGU6CisKKyAoMSkgVGhlIG1hcmtfcGFnZXNfY2FjaGVkKCkgY29va2llIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiB0aGF0IHBhZ2UuCisKKyAoMikgVGhlIGZ1bmN0aW9uIHdpbGwgc3VibWl0IGEgcmVxdWVzdCB0byByZWFkIHRoZSBkYXRhIGZyb20gdGhlIGNhY2hlJ3MKKyAgICAgYmFja2luZyBkZXZpY2UgZGlyZWN0bHkgaW50byB0aGUgcGFnZSBzcGVjaWZpZWQuCisKKyAoMykgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAuCisKKyAoNCkgV2hlbiB0aGUgcmVhZCBpcyBjb21wbGV0ZSwgZW5kX2lvX2Z1bmMoKSB3aWxsIGJlIGludm9rZWQgd2l0aDoKKworICAgICAoKikgVGhlIG5ldGZzIGRhdGEgc3VwcGxpZWQgd2hlbiB0aGUgY29va2llIHdhcyBjcmVhdGVkLgorCisgICAgICgqKSBUaGUgcGFnZSBkZXNjcmlwdG9yLgorCisgICAgICgqKSBUaGUgY29udGV4dCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGFib3ZlIGZ1bmN0aW9uLiAgVGhpcyB3aWxsIGJlCisgICAgICAgICBtYWludGFpbmVkIHdpdGggdGhlIGdldF9jb250ZXh0L3B1dF9jb250ZXh0IGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuCisKKyAgICAgKCopIEFuIGFyZ3VtZW50IHRoYXQncyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZm9yIGFuIGVycm9yIGNvZGUuCisKKyAgICAgSWYgYW4gZXJyb3Igb2NjdXJzLCBpdCBzaG91bGQgYmUgYXNzdW1lZCB0aGF0IHRoZSBwYWdlIGNvbnRhaW5zIG5vIHVzYWJsZQorICAgICBkYXRhLgorCisgICAgIGVuZF9pb19mdW5jKCkgd2lsbCBiZSBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IGlmIHRoZSByZWFkIGlzIHJlc3VsdHMgaW4KKyAgICAgYW4gZXJyb3IsIGJ1dCBpdCBtaWdodCBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQgaWYgdGhlIHJlYWQgaXMKKyAgICAgc3VjY2Vzc2Z1bC4KKworT3RoZXJ3aXNlLCBpZiB0aGVyZSdzIG5vdCBhIGNvcHkgYXZhaWxhYmxlIGluIGNhY2hlLCBidXQgdGhlIGNhY2hlIG1heSBiZSBhYmxlCit0byBzdG9yZSB0aGUgcGFnZToKKworICgxKSBUaGUgbWFya19wYWdlc19jYWNoZWQoKSBjb29raWUgb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHRoYXQgcGFnZS4KKworICgyKSBBIGJsb2NrIG1heSBiZSByZXNlcnZlZCBpbiB0aGUgY2FjaGUgYW5kIGF0dGFjaGVkIHRvIHRoZSBvYmplY3QgYXQgdGhlCisgICAgIGFwcHJvcHJpYXRlIHBsYWNlLgorCisgKDMpIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRU5PREFUQS4KKworVGhpcyBmdW5jdGlvbiBtYXkgYWxzbyByZXR1cm4gLUVOT01FTSBvciAtRUlOVFIsIGluIHdoaWNoIGNhc2UgaXQgd29uJ3QgaGF2ZQorcmVhZCBhbnkgZGF0YSBmcm9tIHRoZSBjYWNoZS4KKworCitQQUdFIEFMTE9DQVRFCistLS0tLS0tLS0tLS0tCisKK0FsdGVybmF0aXZlbHksIGlmIHRoZXJlJ3Mgbm90IGV4cGVjdGVkIHRvIGJlIGFueSBkYXRhIGluIHRoZSBjYWNoZSBmb3IgYSBwYWdlCitiZWNhdXNlIHRoZSBmaWxlIGhhcyBiZWVuIGV4dGVuZGVkLCBhIGJsb2NrIGNhbiBzaW1wbHkgYmUgYWxsb2NhdGVkIGluc3RlYWQ6CisKKwlpbnQgZnNjYWNoZV9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIGdmcF90IGdmcCk7CisKK1RoaXMgaXMgc2ltaWxhciB0byB0aGUgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQKK25ldmVyIHJlYWRzIGZyb20gdGhlIGNhY2hlLiAgSXQgd2lsbCByZXR1cm4gMCBpZiBhIGJsb2NrIGhhcyBiZWVuIGFsbG9jYXRlZCwKK3JhdGhlciB0aGFuIC1FTk9EQVRBIGFzIHRoZSBvdGhlciB3b3VsZC4gIE9uZSBvciB0aGUgb3RoZXIgbXVzdCBiZSBwZXJmb3JtZWQKK2JlZm9yZSB3cml0aW5nIHRvIHRoZSBjYWNoZS4KKworVGhlIG1hcmtfcGFnZXNfY2FjaGVkKCkgY29va2llIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiB0aGUgcGFnZSBpZgorc3VjY2Vzc2Z1bC4KKworCitQQUdFIFdSSVRFCistLS0tLS0tLS0tCisKK1NlY29uZGx5LCBpZiB0aGUgbmV0ZnMgY2hhbmdlcyB0aGUgY29udGVudHMgb2YgdGhlIHBhZ2UgKGVpdGhlciBkdWUgdG8gYW4KK2luaXRpYWwgZG93bmxvYWQgb3IgaWYgYSB1c2VyIHBlcmZvcm1zIGEgd3JpdGUpLCB0aGVuIHRoZSBwYWdlIHNob3VsZCBiZQord3JpdHRlbiBiYWNrIHRvIHRoZSBjYWNoZToKKworCWludCBmc2NhY2hlX3dyaXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwKTsKKworVGhlIGNvb2tpZSBhcmd1bWVudCBtdXN0IHNwZWNpZnkgYSBkYXRhIGZpbGUgY29va2llLCB0aGUgcGFnZSBzcGVjaWZpZWQgc2hvdWxkCitjb250YWluIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gKGFuZCBpcyBhbHNvIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGFnZSBudW1iZXIpLAorYW5kIHRoZSBnZnAgYXJndW1lbnQgaXMgdXNlZCB0byBjb250cm9sIGhvdyBhbnkgbWVtb3J5IGFsbG9jYXRpb25zIG1hZGUgYXJlCitzYXRpc2ZpZWQuCisKK1RoZSBwYWdlIG11c3QgaGF2ZSBmaXJzdCBiZWVuIHJlYWQgb3IgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseSBhbmQgbXVzdCBub3QgaGF2ZQorYmVlbiB1bmNhY2hlZCBiZWZvcmUgd3JpdGluZyBpcyBwZXJmb3JtZWQuCisKK0lmIHRoZSBjb29raWUgaW5kaWNhdGVzIHRoZSBpbm9kZSBpcyBub3QgY2FjaGVkIHRoZW46CisKKyAoMSkgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9CVUZTLgorCitFbHNlIGlmIHNwYWNlIGNhbiBiZSBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlIHRvIGhvbGQgdGhpcyBwYWdlOgorCisgKDEpIFBHX2ZzY2FjaGVfd3JpdGUgd2lsbCBiZSBzZXQgb24gdGhlIHBhZ2UuCisKKyAoMikgVGhlIGZ1bmN0aW9uIHdpbGwgc3VibWl0IGEgcmVxdWVzdCB0byB3cml0ZSB0aGUgZGF0YSB0byBjYWNoZSdzIGJhY2tpbmcKKyAgICAgZGV2aWNlIGRpcmVjdGx5IGZyb20gdGhlIHBhZ2Ugc3BlY2lmaWVkLgorCisgKDMpIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwLgorCisgKDQpIFdoZW4gdGhlIHdyaXRlIGlzIGNvbXBsZXRlIFBHX2ZzY2FjaGVfd3JpdGUgaXMgY2xlYXJlZCBvbiB0aGUgcGFnZSBhbmQKKyAgICAgYW55b25lIHdhaXRpbmcgZm9yIHRoYXQgYml0IHdpbGwgYmUgd29rZW4gdXAuCisKK0Vsc2UgaWYgdGhlcmUncyBubyBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNhY2hlLCAtRU5PQlVGUyB3aWxsIGJlIHJldHVybmVkLiAgSXQKK2lzIGFsc28gcG9zc2libGUgZm9yIHRoZSBQR19mc2NhY2hlX3dyaXRlIGJpdCB0byBiZSBjbGVhcmVkIHdoZW4gbm8gd3JpdGUgdG9vaworcGxhY2UgaWYgdW5mb3Jlc2VlbiBjaXJjdW1zdGFuY2VzIGFyb3NlIChzdWNoIGFzIGEgZGlzayBlcnJvcikuCisKK1dyaXRpbmcgdGFrZXMgcGxhY2UgYXN5bmNocm9ub3VzbHkuCisKKworTVVMVElQTEUgUEFHRSBSRUFECistLS0tLS0tLS0tLS0tLS0tLS0KKworQSBmYWNpbGl0eSBpcyBwcm92aWRlZCB0byByZWFkIHNldmVyYWwgcGFnZXMgYXQgb25jZSwgYXMgcmVxdWVzdGVkIGJ5IHRoZQorcmVhZHBhZ2VzKCkgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb246CisKKwlpbnQgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJCWludCAqbnJfcGFnZXMsCisJCQkJCWZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQkJdm9pZCAqY29udGV4dCwKKwkJCQkJZ2ZwX3QgZ2ZwKTsKKworVGhpcyB3b3JrcyBpbiBhIHNpbWlsYXIgd2F5IHRvIGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKCksIGV4Y2VwdDoKKworICgxKSBBbnkgcGFnZSBpdCBjYW4gcmV0cmlldmUgZGF0YSBmb3IgaXMgcmVtb3ZlZCBmcm9tIHBhZ2VzIGFuZCBucl9wYWdlcyBhbmQKKyAgICAgZGlzcGF0Y2hlZCBmb3IgcmVhZGluZyB0byB0aGUgZGlzay4gIFJlYWRzIG9mIGFkamFjZW50IHBhZ2VzIG9uIGRpc2sgbWF5CisgICAgIGJlIG1lcmdlZCBmb3IgZ3JlYXRlciBlZmZpY2llbmN5LgorCisgKDIpIFRoZSBtYXJrX3BhZ2VzX2NhY2hlZCgpIGNvb2tpZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgb24gc2V2ZXJhbCBwYWdlcworICAgICBhdCBvbmNlIGlmIHRoZXkncmUgYmVpbmcgcmVhZCBvciBhbGxvY2F0ZWQuCisKKyAoMykgSWYgdGhlcmUgd2FzIGFuIGdlbmVyYWwgZXJyb3IsIHRoZW4gdGhhdCBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorCisgICAgIEVsc2UgaWYgc29tZSBwYWdlcyBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQgb3IgcmVhZCwgdGhlbiAtRU5PQlVGUyB3aWxsIGJlCisgICAgIHJldHVybmVkLgorCisgICAgIEVsc2UgaWYgc29tZSBwYWdlcyBjb3VsZG4ndCBiZSByZWFkIGJ1dCB3ZXJlIGFsbG9jYXRlZCwgdGhlbiAtRU5PREFUQSB3aWxsCisgICAgIGJlIHJldHVybmVkLgorCisgICAgIE90aGVyd2lzZSwgaWYgYWxsIHBhZ2VzIGhhZCByZWFkcyBkaXNwYXRjaGVkLCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZCwgdGhlCisgICAgIGxpc3Qgd2lsbCBiZSBlbXB0eSBhbmQgKm5yX3BhZ2VzIHdpbGwgYmUgMC4KKworICg0KSBlbmRfaW9fZnVuYyB3aWxsIGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHBhZ2UgYmVpbmcgcmVhZCBhcyB0aGUgcmVhZHMKKyAgICAgY29tcGxldGUuICBJdCB3aWxsIGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgaWYgZXJyb3IgIT0gMCwgYnV0IGl0IG1heQorICAgICBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQgaWYgdGhlcmUgaXMgbm8gZXJyb3IuCisKK05vdGUgdGhhdCBhIHJldHVybiBvZiAtRU5PREFUQSwgLUVOT0JVRlMgb3IgYW55IG90aGVyIGVycm9yIGRvZXMgbm90IHByZWNsdWRlCitzb21lIG9mIHRoZSBwYWdlcyBiZWluZyByZWFkIGFuZCBzb21lIGJlaW5nIGFsbG9jYXRlZC4gIFRob3NlIHBhZ2VzIHdpbGwgaGF2ZQorYmVlbiBtYXJrZWQgYXBwcm9wcmlhdGVseSBhbmQgd2lsbCBuZWVkIHVuY2FjaGluZy4KKworCis9PT09PT09PT09PT09PQorUEFHRSBVTkNBQ0hJTkcKKz09PT09PT09PT09PT09CisKK1RvIHVuY2FjaGUgYSBwYWdlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQ6CisKKwl2b2lkIGZzY2FjaGVfdW5jYWNoZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpOworCitUaGlzIGZ1bmN0aW9uIHBlcm1pdHMgdGhlIGNhY2hlIHRvIHJlbGVhc2UgYW55IGluLW1lbW9yeSByZXByZXNlbnRhdGlvbiBpdAorbWlnaHQgYmUgaG9sZGluZyBmb3IgdGhpcyBuZXRmcyBwYWdlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmNlIGZvcgorZWFjaCBwYWdlIG9uIHdoaWNoIHRoZSByZWFkIG9yIHdyaXRlIHBhZ2UgZnVuY3Rpb25zIGFib3ZlIGhhdmUgYmVlbiBjYWxsZWQgdG8KK21ha2Ugc3VyZSB0aGUgY2FjaGUncyBpbi1tZW1vcnkgdHJhY2tpbmcgaW5mb3JtYXRpb24gZ2V0cyB0b3JuIGRvd24uCisKK05vdGUgdGhhdCBwYWdlcyBjYW4ndCBiZSBleHBsaWNpdGx5IGRlbGV0ZWQgZnJvbSB0aGUgYSBkYXRhIGZpbGUuICBUaGUgd2hvbGUKK2RhdGEgZmlsZSBtdXN0IGJlIHJldGlyZWQgKHNlZSB0aGUgcmVsaW5xdWlzaCBjb29raWUgZnVuY3Rpb24gYmVsb3cpLgorCitGdXJ0aGVybW9yZSwgbm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgY2FuY2VsIHRoZSBhc3luY2hyb25vdXMgcmVhZCBvciB3cml0ZQorb3BlcmF0aW9uIHN0YXJ0ZWQgYnkgdGhlIHJlYWQvYWxsb2MgYW5kIHdyaXRlIGZ1bmN0aW9ucywgc28gdGhlIHBhZ2UKK2ludmFsaWRhdGlvbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgbXVzdCB1c2U6CisKKwlib29sIGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK3RvIHNlZSBpZiBhIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUsIGFuZDoKKworCXZvaWQgZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJCXN0cnVjdCBwYWdlICpwYWdlKTsKKwordG8gd2FpdCBmb3IgaXQgdG8gZmluaXNoIGlmIGl0IGlzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09CitJTkRFWCBBTkQgREFUQSBGSUxFIFVQREFURQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gcmVxdWVzdCBhbiB1cGRhdGUgb2YgdGhlIGluZGV4IGRhdGEgZm9yIGFuIGluZGV4IG9yIG90aGVyIG9iamVjdCwgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZDoKKworCXZvaWQgZnNjYWNoZV91cGRhdGVfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHJlZmVyIGJhY2sgdG8gdGhlIG5ldGZzX2RhdGEgcG9pbnRlciBzdG9yZWQgaW4gdGhlIGNvb2tpZSBieQordGhlIGFjcXVpc2l0aW9uIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZGF0YSB0byB3cml0ZSBpbnRvIGVhY2ggcmV2aXNlZCBpbmRleAorZW50cnkuICBUaGUgdXBkYXRlIG1ldGhvZCBpbiB0aGUgcGFyZW50IGluZGV4IGRlZmluaXRpb24gd2lsbCBiZSBjYWxsZWQgdG8KK3RyYW5zZmVyIHRoZSBkYXRhLgorCitOb3RlIHRoYXQgcGFydGlhbCB1cGRhdGVzIG1heSBoYXBwZW4gYXV0b21hdGljYWxseSBhdCBvdGhlciB0aW1lcywgc3VjaCBhcyB3aGVuCitkYXRhIGJsb2NrcyBhcmUgYWRkZWQgdG8gYSBkYXRhIGZpbGUgb2JqZWN0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01JU0NFTExBTkVPVVMgQ09PS0lFIE9QRVJBVElPTlMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIGNvb2tpZXM6CisKKyAoKikgQ29va2llIHBpbm5pbmc6CisKKwlpbnQgZnNjYWNoZV9waW5fY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKKwl2b2lkIGZzY2FjaGVfdW5waW5fY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKKworICAgICBUaGVzZSBvcGVyYXRpb25zIHBlcm1pdCBkYXRhIGNvb2tpZXMgdG8gYmUgcGlubmVkIGludG8gdGhlIGNhY2hlIGFuZCB0bworICAgICBoYXZlIHRoZSBwaW5uaW5nIHJlbW92ZWQuICBUaGV5IGFyZSBub3QgcGVybWl0dGVkIG9uIGluZGV4IGNvb2tpZXMuCisKKyAgICAgVGhlIHBpbm5pbmcgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtRU5PQlVGUyBpbiB0aGUgY29va2llCisgICAgIGlzbid0IGJhY2tlZCBieSBhIGNhY2hlLCAtRU9QTk9UU1VQUCBpZiB0aGUgY2FjaGUgZG9lc24ndCBzdXBwb3J0IHBpbm5pbmcsCisgICAgIC1FTk9TUEMgaWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uLCAtRU5PTUVNIG9yCisgICAgIC1FSU8gaWYgdGhlcmUncyBhbnkgb3RoZXIgcHJvYmxlbS4KKworICgqKSBEYXRhIHNwYWNlIHJlc2VydmF0aW9uOgorCisJaW50IGZzY2FjaGVfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgbG9mZl90IHNpemUpOworCisgICAgIFRoaXMgcGVybWl0cyBhIG5ldGZzIHRvIHJlcXVlc3QgY2FjaGUgc3BhY2UgYmUgcmVzZXJ2ZWQgdG8gc3RvcmUgdXAgdG8gdGhlCisgICAgIGdpdmVuIGFtb3VudCBvZiBhIGZpbGUuICBJdCBpcyBwZXJtaXR0ZWQgdG8gYXNrIGZvciBtb3JlIHRoYW4gdGhlIGN1cnJlbnQKKyAgICAgc2l6ZSBvZiB0aGUgZmlsZSB0byBhbGxvdyBmb3IgZnV0dXJlIGZpbGUgZXhwYW5zaW9uLgorCisgICAgIElmIHNpemUgaXMgZ2l2ZW4gYXMgemVybyB0aGVuIHRoZSByZXNlcnZhdGlvbiB3aWxsIGJlIGNhbmNlbGxlZC4KKworICAgICBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtRU5PQlVGUyBpbiB0aGUgY29va2llIGlzbid0CisgICAgIGJhY2tlZCBieSBhIGNhY2hlLCAtRU9QTk9UU1VQUCBpZiB0aGUgY2FjaGUgZG9lc24ndCBzdXBwb3J0IHJlc2VydmF0aW9ucywKKyAgICAgLUVOT1NQQyBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24sIC1FTk9NRU0gb3IKKyAgICAgLUVJTyBpZiB0aGVyZSdzIGFueSBvdGhlciBwcm9ibGVtLgorCisgICAgIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgcGluIGFuIG9iamVjdCBpbiBhIGNhY2hlOyBpdCBjYW4gc3RpbGwgYmUgY3VsbGVkIHRvCisgICAgIG1ha2Ugc3BhY2UgaWYgaXQncyBub3QgaW4gdXNlLgorCisKKz09PT09PT09PT09PT09PT09PT09PQorQ09PS0lFIFVOUkVHSVNUUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT0KKworVG8gZ2V0IHJpZCBvZiBhIGNvb2tpZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkLgorCisJdm9pZCBmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgICAgICBpbnQgcmV0aXJlKTsKKworSWYgcmV0aXJlIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBvYmplY3Qgd2lsbCBiZSBtYXJrZWQgZm9yIHJlY3ljbGluZywgYW5kIGFsbAorY29waWVzIG9mIGl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGFsbCBhY3RpdmUgY2FjaGVzIGluIHdoaWNoIGl0IGlzIHByZXNlbnQuCitOb3Qgb25seSB0aGF0IGJ1dCBhbGwgY2hpbGQgb2JqZWN0cyB3aWxsIGFsc28gYmUgcmV0aXJlZC4KKworSWYgcmV0aXJlIGlzIHplcm8sIHRoZW4gdGhlIG9iamVjdCBtYXkgYmUgYXZhaWxhYmxlIGFnYWluIHdoZW4gbmV4dCB0aGUKK2FjcXVpc2l0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZC4gIFJldGlyZW1lbnQgaGVyZSB3aWxsIG92ZXJydWxlIHRoZSBwaW5uaW5nIG9uIGEKK2Nvb2tpZS4KKworT25lIHZlcnkgaW1wb3J0YW50IG5vdGUgLSByZWxpbnF1aXNoIG11c3QgTk9UIGJlIGNhbGxlZCBmb3IgYSBjb29raWUgdW5sZXNzIGFsbAordGhlIGNvb2tpZXMgZm9yICJjaGlsZCIgaW5kaWNlcywgb2JqZWN0cyBhbmQgcGFnZXMgaGF2ZSBiZWVuIHJlbGlucXVpc2hlZAorZmlyc3QuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOREVYIEFORCBEQVRBIEZJTEUgSU5WQUxJREFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGludmFsaWRhdGUgYW4gaW5kZXggc3VidHJlZSBvciBhIGRhdGEgZmlsZS4gIFRvIGRvCit0aGlzLCB0aGUgY2FsbGVyIHNob3VsZCByZWxpbnF1aXNoIGFuZCByZXRpcmUgdGhlIGNvb2tpZSB0aGV5IGhhdmUsIGFuZCB0aGVuCithY3F1aXJlIGEgbmV3IG9uZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0ZTLUNBQ0hFIFNQRUNJRklDIFBBR0UgRkxBRworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZTLUNhY2hlIG1ha2VzIHVzZSBvZiBhIHBhZ2UgZmxhZywgUEdfcHJpdmF0ZV8yLCBmb3IgaXRzIG93biBwdXJwb3NlLiAgVGhpcyBpcworZ2l2ZW4gdGhlIGFsdGVybmF0aXZlIG5hbWUgUEdfZnNjYWNoZS4KKworUEdfZnNjYWNoZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHBhZ2UgaXMga25vd24gYnkgdGhlIGNhY2hlLCBhbmQgdGhhdAordGhlIGNhY2hlIG11c3QgYmUgaW5mb3JtZWQgaWYgdGhlIHBhZ2UgaXMgZ29pbmcgdG8gZ28gYXdheS4gIEl0J3MgYW4gaW5kaWNhdGlvbgordG8gdGhlIG5ldGZzIHRoYXQgdGhlIGNhY2hlIGhhcyBhbiBpbnRlcmVzdCBpbiB0aGlzIHBhZ2UsIHdoZXJlIGFuIGludGVyZXN0IG1heQorYmUgYSBwb2ludGVyIHRvIGl0LCByZXNvdXJjZXMgYWxsb2NhdGVkIG9yIHJlc2VydmVkIGZvciBpdCwgb3IgSS9PIGluIHByb2dyZXNzCit1cG9uIGl0LgorCitUaGUgbmV0ZnMgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIGluIG1ldGhvZHMgc3VjaCBhcyByZWxlYXNlcGFnZSgpIHRvCitkZXRlcm1pbmUgd2hldGhlciBpdCBuZWVkcyB0byB1bmNhY2hlIGEgcGFnZSBvciB1cGRhdGUgaXQuCisKK0Z1cnRoZXJtb3JlLCBpZiB0aGlzIGJpdCBpcyBzZXQsIHJlbGVhc2VwYWdlKCkgYW5kIGludmFsaWRhdGVwYWdlKCkgb3BlcmF0aW9ucword2lsbCBiZSBjYWxsZWQgb24gYSBwYWdlIHRvIGdldCByaWQgb2YgaXQsIGV2ZW4gaWYgUEdfcHJpdmF0ZSBpcyBub3Qgc2V0LiAgVGhpcworYWxsb3dzIGNhY2hpbmcgdG8gYXR0ZW1wdGVkIG9uIGEgcGFnZSBiZWZvcmUgcmVhZF9jYWNoZV9wYWdlcygpIHRvIGJlIGNhbGxlZAorYWZ0ZXIgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKCkgYXMgdGhlIGZvcm1lciB3aWxsIHRyeSBhbmQgcmVsZWFzZSBwYWdlcyBpdAord2FzIGdpdmVuIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4KKworVGhpcyBiaXQgZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIHN1Y2ggYXMgUEdfcHJpdmF0ZS4gIFRoaXMgbWVhbnMgdGhhdCBGUy1DYWNoZQorY2FuIGJlIHVzZWQgd2l0aCBhIGZpbGVzeXN0ZW0gdGhhdCB1c2VzIHRoZSBibG9jayBidWZmZXJpbmcgY29kZS4KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wZXJhdGlvbnMgZGVmaW5lZCBvbiB0aGlzIGZsYWc6CisKKwlpbnQgUGFnZUZzQ2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOworCXZvaWQgU2V0UGFnZUZzQ2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCisJdm9pZCBDbGVhclBhZ2VGc0NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQorCWludCBUZXN0U2V0UGFnZUZzQ2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCisJaW50IFRlc3RDbGVhclBhZ2VGc0NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQorCitUaGVzZSBmdW5jdGlvbnMgYXJlIGJpdCB0ZXN0LCBiaXQgc2V0LCBiaXQgY2xlYXIsIGJpdCB0ZXN0IGFuZCBzZXQgYW5kIGJpdAordGVzdCBhbmQgY2xlYXIgb3BlcmF0aW9ucyBvbiBQR19mc2NhY2hlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIwYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQKQEAgLTAsMCArMSwzMTMgQEAKKwkgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICAgIElOLUtFUk5FTCBDQUNIRSBPQkpFQ1QgUkVQUkVTRU5UQVRJT04gQU5EIE1BTkFHRU1FTlQKKwkgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQnk6IERhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CisKK0NvbnRlbnRzOgorCisgKCopIFJlcHJlc2VudGF0aW9uCisKKyAoKikgT2JqZWN0IG1hbmFnZW1lbnQgc3RhdGUgbWFjaGluZS4KKworICAgICAtIFByb3Zpc2lvbiBvZiBjcHUgdGltZS4KKyAgICAgLSBMb2NraW5nIHNpbXBsaWZpY2F0aW9uLgorCisgKCopIFRoZSBzZXQgb2Ygc3RhdGVzLgorCisgKCopIFRoZSBzZXQgb2YgZXZlbnRzLgorCisKKz09PT09PT09PT09PT09CitSRVBSRVNFTlRBVElPTgorPT09PT09PT09PT09PT0KKworRlMtQ2FjaGUgbWFpbnRhaW5zIGFuIGluLWtlcm5lbCByZXByZXNlbnRhdGlvbiBvZiBlYWNoIG9iamVjdCB0aGF0IGEgbmV0ZnMgaXMKK2N1cnJlbnRseSBpbnRlcmVzdGVkIGluLiAgU3VjaCBvYmplY3RzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgZnNjYWNoZV9jb29raWUKK3N0cnVjdCBhbmQgYXJlIHJlZmVycmVkIHRvIGFzIGNvb2tpZXMuCisKK0ZTLUNhY2hlIGFsc28gbWFpbnRhaW5zIGEgc2VwYXJhdGUgaW4ta2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RzIHRoYXQKK2EgY2FjaGUgYmFja2VuZCBpcyBjdXJyZW50bHkgYWN0aXZlbHkgY2FjaGluZy4gIFN1Y2ggb2JqZWN0cyBhcmUgcmVwcmVzZW50ZWQgYnkKK3RoZSBmc2NhY2hlX29iamVjdCBzdHJ1Y3QuICBUaGUgY2FjaGUgYmFja2VuZHMgYWxsb2NhdGUgdGhlc2UgdXBvbiByZXF1ZXN0LCBhbmQKK2FyZSBleHBlY3RlZCB0byBlbWJlZCB0aGVtIGluIHRoZWlyIG93biByZXByZXNlbnRhdGlvbnMuICBUaGVzZSBhcmUgcmVmZXJyZWQgdG8KK2FzIG9iamVjdHMuCisKK1RoZXJlIGlzIGEgMTpOIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGNvb2tpZXMgYW5kIG9iamVjdHMuICBBIGNvb2tpZSBtYXkgYmUKK3JlcHJlc2VudGVkIGJ5IG11bHRpcGxlIG9iamVjdHMgLSBhbiBpbmRleCBtYXkgZXhpc3QgaW4gbW9yZSB0aGFuIG9uZSBjYWNoZSAtCitvciBldmVuIGJ5IG5vIG9iamVjdHMgKGl0IG1heSBub3QgYmUgY2FjaGVkKS4KKworRnVydGhlcm1vcmUsIGJvdGggY29va2llcyBhbmQgb2JqZWN0cyBhcmUgaGllcmFyY2hpY2FsLiAgVGhlIHR3byBoaWVyYXJjaGllcworY29ycmVzcG9uZCwgYnV0IHRoZSBjb29raWVzIHRyZWUgaXMgYSBzdXBlcnNldCBvZiB0aGUgdW5pb24gb2YgdGhlIG9iamVjdCB0cmVlcworb2YgbXVsdGlwbGUgY2FjaGVzOgorCisJICAgIE5FVEZTIElOREVYIFRSRUUgICAgICAgICAgICAgICA6ICAgICAgQ0FDSEUgMSAgICAgOiAgICAgIENBQ0hFIDIKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwgIDoKKwkgICAgICArLS0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6CisJICAgICAgfCAgSUNvb2tpZSAgfC0tLS0tLS0rICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOgorCSAgICAgICstLS0tLS0tLS0tLSsgICAgICAgfCAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgICAgICAgfCAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwKKwkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgIFYgICAgICAgIDogICAgICAgICB8CisJICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwkgICAgICAgICAgICBWICAgICAgICAgICAgICstLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8ICA6ICAgICAgICAgfAorCSAgICAgICstLS0tLS0tLS0tLSsgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJICAgICAgfCAgSUNvb2tpZSAgfC0tLS0tLS0rICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICAgICAgIFYKKwkgICAgICArLS0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8CisJICAgICAgKy0tLS0tKy0tLS0tKyAgICAgICAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgICAgICAgfAorCSAgICAgIFYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgOiAgICAgICAgIFYgICAgICAgIDogICAgICAgICB8CisJKy0tLS0tLS0tLS0tKyAgICAgfCAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwl8ICBJQ29va2llICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8ICA6ICAgICAgICAgfAorCSstLS0tLS0tLS0tLSsgICAgIHwgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJICAgICAgfCAgICAgICAgICAgViAgICAgICAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICAgICAgIFYKKwkgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgIHwgICAgIHwgIElDb29raWUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBJT2JqZWN0ICB8CisJICAgICAgfCAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICBWICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDogICAgICAgICBWICAgICAgICA6ICAgICAgICAgfAorCSstLS0tLS0tLS0tLSsgICAgIHwgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJfCAgRENvb2tpZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgRE9iamVjdCAgfCAgOiAgICAgICAgIHwKKwkrLS0tLS0tLS0tLS0rICAgICB8ICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgIDogICAgICAgICB8CisJICAgICAgICAgICstLS0tLS0tKy0tLS0tLS0rICAgICAgICA6ICAgICAgICAgICAgICAgICAgOiAgICAgICAgIHwKKwkgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgIDogICAgICAgICAgICAgICAgICA6ICAgICAgICAgfAorCSAgICAgICAgICBWICAgICAgICAgICAgICAgViAgICAgICAgOiAgICAgICAgICAgICAgICAgIDogICAgICAgICBWCisJICAgICstLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgfCAgRENvb2tpZSAgfCAgIHwgIERDb29raWUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgRE9iamVjdCAgfAorCSAgICArLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgOgorCitJbiB0aGUgYWJvdmUgaWxsdXN0cmF0aW9uLCBJQ29va2llIGFuZCBJT2JqZWN0IHJlcHJlc2VudCBpbmRpY2VzIGFuZCBEQ29va2llCithbmQgRE9iamVjdCByZXByZXNlbnQgZGF0YSBzdG9yYWdlIG9iamVjdHMuICBJbmRpY2VzIG1heSBoYXZlIHJlcHJlc2VudGF0aW9uIGluCittdWx0aXBsZSBjYWNoZXMsIGJ1dCBjdXJyZW50bHksIG5vbi1pbmRleCBvYmplY3RzIG1heSBub3QuICBPYmplY3RzIG9mIGFueSB0eXBlCittYXkgYWxzbyBiZSBlbnRpcmVseSB1bnJlcHJlc2VudGVkLgorCitBcyBmYXIgYXMgdGhlIG5ldGZzIEFQSSBnb2VzLCB0aGUgbmV0ZnMgaXMgb25seSBhY3R1YWxseSBwZXJtaXR0ZWQgdG8gc2VlCitwb2ludGVycyB0byB0aGUgY29va2llcy4gIFRoZSBjb29raWVzIHRoZW1zZWx2ZXMgYW5kIGFueSBvYmplY3RzIGF0dGFjaGVkIHRvCit0aG9zZSBjb29raWVzIGFyZSBoaWRkZW4gZnJvbSBpdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitPQkpFQ1QgTUFOQUdFTUVOVCBTVEFURSBNQUNISU5FCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGhpbiBGUy1DYWNoZSwgZWFjaCBhY3RpdmUgb2JqZWN0IGlzIG1hbmFnZWQgYnkgaXRzIG93biBpbmRpdmlkdWFsIHN0YXRlCittYWNoaW5lLiAgVGhlIHN0YXRlIGZvciBhbiBvYmplY3QgaXMga2VwdCBpbiB0aGUgZnNjYWNoZV9vYmplY3Qgc3RydWN0LCBpbgorb2JqZWN0LT5zdGF0ZS4gIEEgY29va2llIG1heSBwb2ludCB0byBhIHNldCBvZiBvYmplY3RzIHRoYXQgYXJlIGluIGRpZmZlcmVudAorc3RhdGVzLgorCitFYWNoIHN0YXRlIGhhcyBhbiBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGl0IHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBtYWNoaW5lCit3YWtlcyB1cCBpbiB0aGF0IHN0YXRlLiAgVGhlcmUgYXJlIGZvdXIgbG9naWNhbCBzZXRzIG9mIHN0YXRlczoKKworICgxKSBQcmVwYXJhdGlvbjogc3RhdGVzIHRoYXQgd2FpdCBmb3IgdGhlIHBhcmVudCBvYmplY3RzIHRvIGJlY29tZSByZWFkeS4gIFRoZQorICAgICByZXByZXNlbnRhdGlvbnMgYXJlIGhpZXJhcmNoaWNhbCwgYW5kIGl0IGlzIGV4cGVjdGVkIHRoYXQgYW4gb2JqZWN0IG11c3QKKyAgICAgYmUgY3JlYXRlZCBvciBhY2Nlc3NlZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHBhcmVudCBvYmplY3QuCisKKyAoMikgSW5pdGlhbGlzYXRpb246IHN0YXRlcyB0aGF0IHBlcmZvcm0gbG9va3VwcyBpbiB0aGUgY2FjaGUgYW5kIHZhbGlkYXRlCisgICAgIHdoYXQncyBmb3VuZCBhbmQgdGhhdCBjcmVhdGUgb24gZGlzayBhbnkgbWlzc2luZyBtZXRhZGF0YS4KKworICgzKSBOb3JtYWwgcnVubmluZzogc3RhdGVzIHRoYXQgYWxsb3cgbmV0ZnMgb3BlcmF0aW9ucyBvbiBvYmplY3RzIHRvIHByb2NlZWQKKyAgICAgYW5kIHRoYXQgdXBkYXRlIHRoZSBzdGF0ZSBvZiBvYmplY3RzLgorCisgKDQpIFRlcm1pbmF0aW9uOiBzdGF0ZXMgdGhhdCBkZXRhY2ggb2JqZWN0cyBmcm9tIHRoZWlyIG5ldGZzIGNvb2tpZXMsIHRoYXQKKyAgICAgZGVsZXRlIG9iamVjdHMgZnJvbSBkaXNrLCB0aGF0IGhhbmRsZSBkaXNrIGFuZCBzeXN0ZW0gZXJyb3JzIGFuZCB0aGF0IGZyZWUKKyAgICAgdXAgaW4tbWVtb3J5IHJlc291cmNlcy4KKworCitJbiBtb3N0IGNhc2VzLCB0cmFuc2l0aW9uaW5nIGJldHdlZW4gc3RhdGVzIGlzIGluIHJlc3BvbnNlIHRvIHNpZ25hbGxlZCBldmVudHMuCitXaGVuIGEgc3RhdGUgaGFzIGZpbmlzaGVkIHByb2Nlc3NpbmcsIGl0IHdpbGwgdXN1YWxseSBzZXQgdGhlIG1hc2sgb2YgZXZlbnRzIGluCit3aGljaCBpdCBpcyBpbnRlcmVzdGVkIChvYmplY3QtPmV2ZW50X21hc2spIGFuZCByZWxpbnF1aXNoIHRoZSB3b3JrZXIgdGhyZWFkLgorVGhlbiB3aGVuIGFuIGV2ZW50IGlzIHJhaXNlZCAoYnkgY2FsbGluZyBmc2NhY2hlX3JhaXNlX2V2ZW50KCkpLCBpZiB0aGUgZXZlbnQKK2lzIG5vdCBtYXNrZWQsIHRoZSBvYmplY3Qgd2lsbCBiZSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcgKGJ5IGNhbGxpbmcKK2ZzY2FjaGVfZW5xdWV1ZV9vYmplY3QoKSkuCisKKworUFJPVklTSU9OIE9GIENQVSBUSU1FCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHdvcmsgdG8gYmUgZG9uZSBieSB0aGUgdmFyaW91cyBzdGF0ZXMgaXMgZ2l2ZW4gQ1BVIHRpbWUgYnkgdGhlIHRocmVhZHMgb2YKK3RoZSBzbG93IHdvcmsgZmFjaWxpdHkgKHNlZSBEb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQpLiAgVGhpcyBpcyB1c2VkIGluCitwcmVmZXJlbmNlIHRvIHRoZSB3b3JrcXVldWUgZmFjaWxpdHkgYmVjYXVzZToKKworICgxKSBUaHJlYWRzIG1heSBiZSBjb21wbGV0ZWx5IG9jY3VwaWVkIGZvciB2ZXJ5IGxvbmcgcGVyaW9kcyBvZiB0aW1lIGJ5IGEKKyAgICAgcGFydGljdWxhciB3b3JrIGl0ZW0uICBUaGVzZSBzdGF0ZSBhY3Rpb25zIG1heSBiZSBkb2luZyBzZXF1ZW5jZXMgb2YKKyAgICAgc3luY2hyb25vdXMsIGpvdXJuYWxsZWQgZGlzayBhY2Nlc3NlcyAobG9va3VwLCBta2RpciwgY3JlYXRlLCBzZXR4YXR0ciwKKyAgICAgZ2V0eGF0dHIsIHRydW5jYXRlLCB1bmxpbmssIHJtZGlyLCByZW5hbWUpLgorCisgKDIpIFRocmVhZHMgbWF5IGRvIGxpdHRsZSBhY3R1YWwgd29yaywgYnV0IG1heSByYXRoZXIgc3BlbmQgYSBsb3Qgb2YgdGltZQorICAgICBzbGVlcGluZyBvbiBJL08uICBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXRocmVhZGVkIGFuZCAxLXBlci1DUFUtdGhyZWFkZWQKKyAgICAgd29ya3F1ZXVlcyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHRoZSByaWdodCBudW1iZXJzIG9mIHRocmVhZHMuCisKKworTE9DS0lORyBTSU1QTElGSUNBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIG9ubHkgb25lIHdvcmtlciB0aHJlYWQgbWF5IGJlIG9wZXJhdGluZyBvbiBhbnkgcGFydGljdWxhciBvYmplY3Qncworc3RhdGUgbWFjaGluZSBhdCBvbmNlLCB0aGlzIHNpbXBsaWZpZXMgdGhlIGxvY2tpbmcsIHBhcnRpY3VsYXJseSB3aXRoIHJlc3BlY3QKK3RvIGRpc2Nvbm5lY3RpbmcgdGhlIG5ldGZzJ3MgcmVwcmVzZW50YXRpb24gb2YgYSBjYWNoZSBvYmplY3QgKGZzY2FjaGVfY29va2llKQorZnJvbSB0aGUgY2FjaGUgYmFja2VuZCdzIHJlcHJlc2VudGF0aW9uIChmc2NhY2hlX29iamVjdCkgLSB3aGljaCBtYXkgYmUKK3JlcXVlc3RlZCBmcm9tIGVpdGhlciBlbmQuCisKKworPT09PT09PT09PT09PT09PT0KK1RIRSBTRVQgT0YgU1RBVEVTCis9PT09PT09PT09PT09PT09PQorCitUaGUgb2JqZWN0IHN0YXRlIG1hY2hpbmUgaGFzIGEgc2V0IG9mIHN0YXRlcyB0aGF0IGl0IGNhbiBiZSBpbi4gIFRoZXJlIGFyZQorcHJlcGFyYXRpb24gc3RhdGVzIGluIHdoaWNoIHRoZSBvYmplY3Qgc2V0cyBpdHNlbGYgdXAgYW5kIHdhaXRzIGZvciBpdHMgcGFyZW50CitvYmplY3QgdG8gdHJhbnNpdCB0byBhIHN0YXRlIHRoYXQgYWxsb3dzIGFjY2VzcyB0byBpdHMgY2hpbGRyZW46CisKKyAoMSkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfSU5JVC4KKworICAgICBJbml0aWFsaXNlIHRoZSBvYmplY3QgYW5kIHdhaXQgZm9yIHRoZSBwYXJlbnQgb2JqZWN0IHRvIGJlY29tZSBhY3RpdmUuICBJbgorICAgICB0aGUgY2FjaGUsIGl0IGlzIGV4cGVjdGVkIHRoYXQgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gbG9vayBhbiBvYmplY3QKKyAgICAgdXAgZnJvbSB0aGUgcGFyZW50IG9iamVjdCwgdW50aWwgdGhhdCBwYXJlbnQgb2JqZWN0IGl0c2VsZiBoYXMgYmVlbiBsb29rZWQKKyAgICAgdXAuCisKK1RoZXJlIGFyZSBpbml0aWFsaXNhdGlvbiBzdGF0ZXMgaW4gd2hpY2ggdGhlIG9iamVjdCBzZXRzIGl0c2VsZiB1cCBhbmQgYWNjZXNzZXMKK2Rpc2sgZm9yIHRoZSBvYmplY3QgbWV0YWRhdGE6CisKKyAoMikgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUC4KKworICAgICBMb29rIHVwIHRoZSBvYmplY3Qgb24gZGlzaywgdXNpbmcgdGhlIHBhcmVudCBhcyBhIHN0YXJ0aW5nIHBvaW50LgorICAgICBGUy1DYWNoZSBleHBlY3RzIHRoZSBjYWNoZSBiYWNrZW5kIHRvIHByb2JlIHRoZSBjYWNoZSB0byBzZWUgd2hldGhlciB0aGlzCisgICAgIG9iamVjdCBpcyByZXByZXNlbnRlZCB0aGVyZSwgYW5kIGlmIGl0IGlzLCB0byBzZWUgaWYgaXQncyB2YWxpZCAoY29oZXJlbmN5CisgICAgIG1hbmFnZW1lbnQpLgorCisgICAgIFRoZSBjYWNoZSBzaG91bGQgY2FsbCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoKSB0byBpbmRpY2F0ZSBsb29rdXAKKyAgICAgZmFpbHVyZSBmb3Igd2hhdGV2ZXIgcmVhc29uLCBhbmQgc2hvdWxkIGNhbGwgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QoKSB0bworICAgICBpbmRpY2F0ZSBzdWNjZXNzLgorCisgICAgIEF0IHRoZSBjb21wbGV0aW9uIG9mIGxvb2t1cCwgRlMtQ2FjaGUgd2lsbCBsZXQgdGhlIG5ldGZzIGdvIGFoZWFkIHdpdGgKKyAgICAgcmVhZCBvcGVyYXRpb25zLCBubyBtYXR0ZXIgd2hldGhlciB0aGUgZmlsZSBpcyB5ZXQgY2FjaGVkLiAgSWYgbm90IHlldAorICAgICBjYWNoZWQsIHJlYWQgb3BlcmF0aW9ucyB3aWxsIGJlIGltbWVkaWF0ZWx5IHJlamVjdGVkIHdpdGggRU5PREFUQSB1bnRpbAorICAgICB0aGUgZmlyc3Qga25vd24gcGFnZSBpcyB1bmNhY2hlZCAtIGFzIHRvIHRoYXQgcG9pbnQgdGhlcmUgY2FuIGJlIG5vIGRhdGEKKyAgICAgdG8gYmUgcmVhZCBvdXQgb2YgdGhlIGNhY2hlIGZvciB0aGF0IGZpbGUgdGhhdCBpc24ndCBjdXJyZW50bHkgYWxzbyBoZWxkCisgICAgIGluIHRoZSBwYWdlY2FjaGUuCisKKyAoMykgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcuCisKKyAgICAgQ3JlYXRlIGFuIG9iamVjdCBvbiBkaXNrLCB1c2luZyB0aGUgcGFyZW50IGFzIGEgc3RhcnRpbmcgcG9pbnQuICBUaGlzCisgICAgIGhhcHBlbnMgaWYgdGhlIGxvb2t1cCBmYWlsZWQgdG8gZmluZCB0aGUgb2JqZWN0LCBvciBpZiB0aGUgb2JqZWN0J3MKKyAgICAgY29oZXJlbmN5IGRhdGEgaW5kaWNhdGVkIHdoYXQncyBvbiBkaXNrIGlzIG91dCBvZiBkYXRlLiAgSW4gdGhpcyBzdGF0ZSwKKyAgICAgRlMtQ2FjaGUgZXhwZWN0cyB0aGUgY2FjaGUgdG8gY3JlYXRlCisKKyAgICAgVGhlIGNhY2hlIHNob3VsZCBjYWxsIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCkgaWYgY3JlYXRpb24gY29tcGxldGVzCisgICAgIHN1Y2Nlc3NmdWxseSwgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCkgb3RoZXJ3aXNlLgorCisgICAgIEF0IHRoZSBjb21wbGV0aW9uIG9mIGNyZWF0aW9uLCBGUy1DYWNoZSB3aWxsIHN0YXJ0IHByb2Nlc3Npbmcgd3JpdGUKKyAgICAgb3BlcmF0aW9ucyB0aGUgbmV0ZnMgaGFzIHF1ZXVlZCBmb3IgYW4gb2JqZWN0LiAgSWYgY3JlYXRpb24gZmFpbGVkLCB0aGUKKyAgICAgd3JpdGUgb3BzIHdpbGwgYmUgdHJhbnNwYXJlbnRseSBkaXNjYXJkZWQsIGFuZCBub3RoaW5nIHJlY29yZGVkIGluIHRoZQorICAgICBjYWNoZS4KKworVGhlcmUgYXJlIHNvbWUgbm9ybWFsIHJ1bm5pbmcgc3RhdGVzIGluIHdoaWNoIHRoZSBvYmplY3Qgc3BlbmRzIGl0cyB0aW1lCitzZXJ2aWNpbmcgbmV0ZnMgcmVxdWVzdHM6CisKKyAoNCkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFLgorCisgICAgIEEgdHJhbnNpZW50IHN0YXRlIGluIHdoaWNoIHBlbmRpbmcgb3BlcmF0aW9ucyBhcmUgc3RhcnRlZCwgY2hpbGQgb2JqZWN0cworICAgICBhcmUgcGVybWl0dGVkIHRvIGFkdmFuY2UgZnJvbSBGU0NBQ0hFX09CSkVDVF9JTklUIHN0YXRlLCBhbmQgdGVtcG9yYXJ5CisgICAgIGxvb2t1cCBkYXRhIGlzIGZyZWVkLgorCisgKDUpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0FDVElWRS4KKworICAgICBUaGUgbm9ybWFsIHJ1bm5pbmcgc3RhdGUuICBJbiB0aGlzIHN0YXRlLCByZXF1ZXN0cyB0aGUgbmV0ZnMgbWFrZXMgd2lsbCBiZQorICAgICBwYXNzZWQgb24gdG8gdGhlIGNhY2hlLgorCisgKDYpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX1VQREFUSU5HLgorCisgICAgIFRoZSBzdGF0ZSBtYWNoaW5lIGNvbWVzIGhlcmUgdG8gdXBkYXRlIHRoZSBvYmplY3QgaW4gdGhlIGNhY2hlIGZyb20gdGhlCisgICAgIG5ldGZzJ3MgcmVjb3Jkcy4gIFRoaXMgaW52b2x2ZXMgdXBkYXRpbmcgdGhlIGF1eGlsaWFyeSBkYXRhIHRoYXQgaXMgdXNlZAorICAgICB0byBtYWludGFpbiBjb2hlcmVuY3kuCisKK0FuZCB0aGVyZSBhcmUgdGVybWluYWwgc3RhdGVzIGluIHdoaWNoIGFuIG9iamVjdCBjbGVhbnMgaXRzZWxmIHVwLCBkZWFsbG9jYXRlcworbWVtb3J5IGFuZCBwb3RlbnRpYWxseSBkZWxldGVzIHN0dWZmIGZyb20gZGlzazoKKworICg3KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9MQ19EWUlORy4KKworICAgICBUaGUgb2JqZWN0IGNvbWVzIGhlcmUgaWYgaXQgaXMgZHlpbmcgYmVjYXVzZSBvZiBhIGxvb2t1cCBvciBjcmVhdGlvbgorICAgICBlcnJvci4gIFRoaXMgd291bGQgYmUgZHVlIHRvIGEgZGlzayBlcnJvciBvciBzeXN0ZW0gZXJyb3Igb2Ygc29tZSBzb3J0LgorICAgICBUZW1wb3JhcnkgZGF0YSBpcyBjbGVhbmVkIHVwLCBhbmQgdGhlIHBhcmVudCBpcyByZWxlYXNlZC4KKworICg4KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9EWUlORy4KKworICAgICBUaGUgb2JqZWN0IGNvbWVzIGhlcmUgaWYgaXQgaXMgZHlpbmcgZHVlIHRvIGFuIGVycm9yLCBiZWNhdXNlIGl0cyBwYXJlbnQKKyAgICAgY29va2llIGhhcyBiZWVuIHJlbGlucXVpc2hlZCBieSB0aGUgbmV0ZnMgb3IgYmVjYXVzZSB0aGUgY2FjaGUgaXMgYmVpbmcKKyAgICAgd2l0aGRyYXduLgorCisgICAgIEFueSBjaGlsZCBvYmplY3RzIHdhaXRpbmcgb24gdGhpcyBvbmUgYXJlIGdpdmVuIENQVSB0aW1lIHNvIHRoYXQgdGhleSB0b28KKyAgICAgY2FuIGRlc3Ryb3kgdGhlbXNlbHZlcy4gIFRoaXMgb2JqZWN0IHdhaXRzIGZvciBhbGwgaXRzIGNoaWxkcmVuIHRvIGdvIGF3YXkKKyAgICAgYmVmb3JlIGFkdmFuY2luZyB0byB0aGUgbmV4dCBzdGF0ZS4KKworICg5KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9BQk9SVF9JTklULgorCisgICAgIFRoZSBvYmplY3QgY29tZXMgdG8gdGhpcyBzdGF0ZSBpZiBpdCB3YXMgd2FpdGluZyBvbiBpdHMgcGFyZW50IGluCisgICAgIEZTQ0FDSEVfT0JKRUNUX0lOSVQsIGJ1dCBpdHMgcGFyZW50IGRpZWQuICBUaGUgb2JqZWN0IHdpbGwgZGVzdHJveSBpdHNlbGYKKyAgICAgc28gdGhhdCB0aGUgcGFyZW50IG1heSBwcm9jZWVkIGZyb20gdGhlIEZTQ0FDSEVfT0JKRUNUX0RZSU5HIHN0YXRlLgorCisoMTApIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX1JFTEVBU0lORy4KKygxMSkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLgorCisgICAgIFRoZSBvYmplY3QgY29tZXMgdG8gb25lIG9mIHRoZXNlIHR3byBzdGF0ZXMgd2hlbiBkeWluZyBvbmNlIGl0IGlzIHJpZCBvZgorICAgICBhbGwgaXRzIGNoaWxkcmVuLCBpZiBpdCBpcyBkeWluZyBiZWNhdXNlIHRoZSBuZXRmcyByZWxpbnF1aXNoZWQgaXRzCisgICAgIGNvb2tpZS4gIEluIHRoZSBmaXJzdCBzdGF0ZSwgdGhlIGNhY2hlZCBkYXRhIGlzIGV4cGVjdGVkIHRvIHBlcnNpc3QsIGFuZAorICAgICBpbiB0aGUgc2Vjb25kIGl0IHdpbGwgYmUgZGVsZXRlZC4KKworKDEyKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORy4KKworICAgICBUaGUgb2JqZWN0IHRyYW5zaXRzIHRvIHRoaXMgc3RhdGUgaWYgdGhlIGNhY2hlIGRlY2lkZXMgaXQgd2FudHMgdG8KKyAgICAgd2l0aGRyYXcgdGhlIG9iamVjdCBmcm9tIHNlcnZpY2UsIHBlcmhhcHMgdG8gbWFrZSBzcGFjZSwgYnV0IGFsc28gZHVlIHRvCisgICAgIGVycm9yIG9yIGp1c3QgYmVjYXVzZSB0aGUgd2hvbGUgY2FjaGUgaXMgYmVpbmcgd2l0aGRyYXduLgorCisoMTMpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0RFQUQuCisKKyAgICAgVGhlIG9iamVjdCB0cmFuc2l0cyB0byB0aGlzIHN0YXRlIHdoZW4gdGhlIGluLW1lbW9yeSBvYmplY3QgcmVjb3JkIGlzCisgICAgIHJlYWR5IHRvIGJlIGRlbGV0ZWQuICBUaGUgb2JqZWN0IHByb2Nlc3NvciBzaG91bGRuJ3QgZXZlciBzZWUgYW4gb2JqZWN0IGluCisgICAgIHRoaXMgc3RhdGUuCisKKworVEhFIFNFVCBPRiBFVkVOVFMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBldmVudHMgdGhhdCBjYW4gYmUgcmFpc2VkIHRvIGFuIG9iamVjdCBzdGF0ZSBtYWNoaW5lOgorCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURQorCisgICAgIFRoZSBuZXRmcyByZXF1ZXN0ZWQgdGhhdCBhbiBvYmplY3QgYmUgdXBkYXRlZC4gIFRoZSBzdGF0ZSBtYWNoaW5lIHdpbGwgYXNrCisgICAgIHRoZSBjYWNoZSBiYWNrZW5kIHRvIHVwZGF0ZSB0aGUgb2JqZWN0LCBhbmQgdGhlIGNhY2hlIGJhY2tlbmQgd2lsbCBhc2sgdGhlCisgICAgIG5ldGZzIGZvciBkZXRhaWxzIG9mIHRoZSBjaGFuZ2UgdGhyb3VnaCBpdHMgY29va2llIGRlZmluaXRpb24gb3BzLgorCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQKKworICAgICBUaGlzIGlzIHNpZ25hbGxlZCBpbiB0d28gY2lyY3Vtc3RhbmNlczoKKworICAgICAoYSkgd2hlbiBhbiBvYmplY3QncyBsYXN0IGNoaWxkIG9iamVjdCBpcyBkcm9wcGVkIGFuZAorCisgICAgIChiKSB3aGVuIHRoZSBsYXN0IG9wZXJhdGlvbiBvdXRzdGFuZGluZyBvbiBhbiBvYmplY3QgaXMgY29tcGxldGVkLgorCisgICAgIFRoaXMgaXMgdXNlZCB0byBwcm9jZWVkIGZyb20gdGhlIGR5aW5nIHN0YXRlLgorCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SCisKKyAgICAgVGhpcyBpcyBzaWduYWxsZWQgd2hlbiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiBzb21lCisgICAgIG9iamVjdC4KKworICgqKSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRQorCisgICAgIFRoZXNlIGFyZSBzaWduYWxsZWQgd2hlbiB0aGUgbmV0ZnMgcmVsaW5xdWlzaGVzIGEgY29va2llIGl0IHdhcyB1c2luZy4KKyAgICAgVGhlIGV2ZW50IHNlbGVjdGVkIGRlcGVuZHMgb24gd2hldGhlciB0aGUgbmV0ZnMgYXNrcyBmb3IgdGhlIGJhY2tpbmcKKyAgICAgb2JqZWN0IHRvIGJlIHJldGlyZWQgKGRlbGV0ZWQpIG9yIHJldGFpbmVkLgorCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXCisKKyAgICAgVGhpcyBpcyBzaWduYWxsZWQgd2hlbiB0aGUgY2FjaGUgYmFja2VuZCB3YW50cyB0byB3aXRoZHJhdyBhbiBvYmplY3QuCisgICAgIFRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IHdpbGwgaGF2ZSB0byBiZSBkZXRhY2hlZCBmcm9tIHRoZSBuZXRmcydzCisgICAgIGNvb2tpZS4KKworQmVjYXVzZSB0aGUgd2l0aGRyYXdpbmcgcmVsZWFzaW5nL3JldGlyaW5nIGV2ZW50cyBhcmUgYWxsIGhhbmRsZWQgYnkgdGhlIG9iamVjdAorc3RhdGUgbWFjaGluZSwgaXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlcmUncyBhIGNvbGxpc2lvbiB3aXRoIGJvdGggZW5kcyB0cnlpbmcKK3RvIHNldmVyIHRoZSBjb25uZWN0aW9uIGF0IHRoZSBzYW1lIHRpbWUuICBUaGUgc3RhdGUgbWFjaGluZSBjYW4ganVzdCBwaWNrCit3aGljaCBvbmUgaXQgd2FudHMgdG8gaG9ub3VyLCBhbmQgdGhhdCBlZmZlY3RzIHRoZSBvdGhlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vcGVyYXRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vcGVyYXRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmIwNzBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29wZXJhdGlvbnMudHh0CkBAIC0wLDAgKzEsMjEzIEBACisJCSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkgICAgICAgQVNZTkNIUk9OT1VTIE9QRVJBVElPTlMgSEFORExJTkcKKwkJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0J5OiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgorCitDb250ZW50czoKKworICgqKSBPdmVydmlldy4KKworICgqKSBPcGVyYXRpb24gcmVjb3JkIGluaXRpYWxpc2F0aW9uLgorCisgKCopIFBhcmFtZXRlcnMuCisKKyAoKikgUHJvY2VkdXJlLgorCisgKCopIEFzeW5jaHJvbm91cyBjYWxsYmFjay4KKworCis9PT09PT09PQorT1ZFUlZJRVcKKz09PT09PT09CisKK0ZTLUNhY2hlIGhhcyBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBoYW5kbGluZyBmYWNpbGl0eSB0aGF0IGl0IHVzZXMgZm9yIGl0cworZGF0YSBzdG9yYWdlIGFuZCByZXRyaWV2YWwgcm91dGluZXMuICBJdHMgb3BlcmF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYnkKK2ZzY2FjaGVfb3BlcmF0aW9uIHN0cnVjdHMsIHRob3VnaCB0aGVzZSBhcmUgdXN1YWxseSBlbWJlZGRlZCBpbnRvIHNvbWUgb3RoZXIKK3N0cnVjdHVyZS4KKworVGhpcyBmYWNpbGl0eSBpcyBhdmFpbGFibGUgdG8gYW5kIGV4cGVjdGVkIHRvIGJlIGJlIHVzZWQgYnkgdGhlIGNhY2hlIGJhY2tlbmRzLAorYW5kIEZTLUNhY2hlIHdpbGwgY3JlYXRlIG9wZXJhdGlvbnMgYW5kIHBhc3MgdGhlbSBvZmYgdG8gdGhlIGFwcHJvcHJpYXRlIGNhY2hlCitiYWNrZW5kIGZvciBjb21wbGV0aW9uLgorCitUbyBtYWtlIHVzZSBvZiB0aGlzIGZhY2lsaXR5LCA8bGludXgvZnNjYWNoZS1jYWNoZS5oPiBzaG91bGQgYmUgI2luY2x1ZGVkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK09QRVJBVElPTiBSRUNPUkQgSU5JVElBTElTQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQW4gb3BlcmF0aW9uIGlzIHJlY29yZGVkIGluIGFuIGZzY2FjaGVfb3BlcmF0aW9uIHN0cnVjdDoKKworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiB7CisJCXVuaW9uIHsKKwkJCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXN0X3dvcms7CisJCQlzdHJ1Y3Qgc2xvd193b3JrIHNsb3dfd29yazsKKwkJfTsKKwkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCWZzY2FjaGVfb3BlcmF0aW9uX3Byb2Nlc3Nvcl90IHByb2Nlc3NvcjsKKwkJLi4uCisJfTsKKworU29tZW9uZSB3YW50aW5nIHRvIGlzc3VlIGFuIG9wZXJhdGlvbiBzaG91bGQgYWxsb2NhdGUgc29tZXRoaW5nIHdpdGggdGhpcworc3RydWN0IGVtYmVkZGVkIGluIGl0LiAgVGhleSBzaG91bGQgaW5pdGlhbGlzZSBpdCBieSBjYWxsaW5nOgorCisJdm9pZCBmc2NhY2hlX29wZXJhdGlvbl9pbml0KHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AsCisJCQkJICAgIGZzY2FjaGVfb3BlcmF0aW9uX3JlbGVhc2VfdCByZWxlYXNlKTsKKword2l0aCB0aGUgb3BlcmF0aW9uIHRvIGJlIGluaXRpYWxpc2VkIGFuZCB0aGUgcmVsZWFzZSBmdW5jdGlvbiB0byB1c2UuCisKK1RoZSBvcC0+ZmxhZ3MgcGFyYW1ldGVyIHNob3VsZCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIENQVSB0aW1lIHByb3Zpc2lvbiBhbmQKK3RoZSBleGNsdXNpdml0eSAoc2VlIHRoZSBQYXJhbWV0ZXJzIHNlY3Rpb24pLgorCitUaGUgb3AtPmZhc3Rfd29yaywgb3AtPnNsb3dfd29yayBhbmQgb3AtPnByb2Nlc3NvciBmbGFncyBzaG91bGQgYmUgc2V0IGFzCithcHByb3ByaWF0ZSBmb3IgdGhlIENQVSB0aW1lIHByb3Zpc2lvbiAoc2VlIHRoZSBQYXJhbWV0ZXJzIHNlY3Rpb24pLgorCitGU0NBQ0hFX09QX1dBSVRJTkcgbWF5IGJlIHNldCBpbiBvcC0+ZmxhZ3MgcHJpb3IgdG8gZWFjaCBzdWJtaXNzaW9uIG9mIHRoZQorb3BlcmF0aW9uIGFuZCB3YWl0ZWQgZm9yIGFmdGVyd2FyZHMuCisKKworPT09PT09PT09PQorUEFSQU1FVEVSUworPT09PT09PT09PQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiByZWNvcmQncyBmbGFnCitwYXJhbWV0ZXIuICBUaGVyZSBhcmUgdGhyZWUgb3B0aW9ucyBmb3IgdGhlIHByb3Zpc2lvbiBvZiBDUFUgdGltZSBpbiB0aGVzZQorb3BlcmF0aW9uczoKKworICgxKSBUaGUgb3BlcmF0aW9uIG1heSBiZSBkb25lIHN5bmNocm9ub3VzbHkgKEZTQ0FDSEVfT1BfTVlUSFJFQUQpLiAgQSB0aHJlYWQKKyAgICAgbWF5IGRlY2lkZSBpdCB3YW50cyB0byBoYW5kbGUgYW4gb3BlcmF0aW9uIGl0c2VsZiB3aXRob3V0IGRlZmVycmluZyBpdCB0bworICAgICBhbm90aGVyIHRocmVhZC4KKworICAgICBUaGlzIGlzLCBmb3IgZXhhbXBsZSwgdXNlZCBpbiByZWFkIG9wZXJhdGlvbnMgZm9yIGNhbGxpbmcgcmVhZHBhZ2VzKCkgb24KKyAgICAgdGhlIGJhY2tpbmcgZmlsZXN5c3RlbSBpbiBDYWNoZUZpbGVzLiAgQWx0aG91Z2ggcmVhZHBhZ2VzKCkgZG9lcyBhbgorICAgICBhc3luY2hyb25vdXMgZGF0YSBmZXRjaCwgdGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBwYWdlcyBleGlzdCBpcyBkb25lCisgICAgIHN5bmNocm9ub3VzbHkgLSBhbmQgdGhlIG5ldGZzIGRvZXMgbm90IHByb2NlZWQgdW50aWwgdGhpcyBoYXMgYmVlbgorICAgICBkZXRlcm1pbmVkLgorCisgICAgIElmIHRoaXMgb3B0aW9uIGlzIHRvIGJlIHVzZWQsIEZTQ0FDSEVfT1BfV0FJVElORyBtdXN0IGJlIHNldCBpbiBvcC0+ZmxhZ3MKKyAgICAgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIG9wZXJhdGlvbiwgYW5kIHRoZSBvcGVyYXRpbmcgdGhyZWFkIG11c3Qgd2FpdCBmb3IgaXQKKyAgICAgdG8gYmUgY2xlYXJlZCBiZWZvcmUgcHJvY2VlZGluZzoKKworCQl3YWl0X29uX2JpdCgmb3AtPmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCisKKyAoMikgVGhlIG9wZXJhdGlvbiBtYXkgYmUgZmFzdCBhc3luY2hyb25vdXMgKEZTQ0FDSEVfT1BfRkFTVCksIGluIHdoaWNoIGNhc2UgaXQKKyAgICAgd2lsbCBiZSBnaXZlbiB0byBrZXZlbnRkIHRvIHByb2Nlc3MuICBTdWNoIGFuIG9wZXJhdGlvbiBpcyBub3QgcGVybWl0dGVkCisgICAgIHRvIHNsZWVwIG9uIEkvTy4KKworICAgICBUaGlzIGlzLCBmb3IgZXhhbXBsZSwgdXNlZCBieSBDYWNoZUZpbGVzIHRvIGNvcHkgZGF0YSBmcm9tIGEgYmFja2luZyBmcworICAgICBwYWdlIHRvIGEgbmV0ZnMgcGFnZSBhZnRlciB0aGUgYmFja2luZyBmcyBoYXMgcmVhZCB0aGUgcGFnZSBpbi4KKworICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBvcC0+ZmFzdF93b3JrIGFuZCBvcC0+cHJvY2Vzc29yIG11c3QgYmUKKyAgICAgaW5pdGlhbGlzZWQgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIG9wZXJhdGlvbjoKKworCQlJTklUX1dPUksoJm9wLT5mYXN0X3dvcmssIGRvX3NvbWVfd29yayk7CisKKworICgzKSBUaGUgb3BlcmF0aW9uIG1heSBiZSBzbG93IGFzeW5jaHJvbm91cyAoRlNDQUNIRV9PUF9TTE9XKSwgaW4gd2hpY2ggY2FzZSBpdAorICAgICB3aWxsIGJlIGdpdmVuIHRvIHRoZSBzbG93IHdvcmsgZmFjaWxpdHkgdG8gcHJvY2Vzcy4gIFN1Y2ggYW4gb3BlcmF0aW9uIGlzCisgICAgIHBlcm1pdHRlZCB0byBzbGVlcCBvbiBJL08uCisKKyAgICAgVGhpcyBpcywgZm9yIGV4YW1wbGUsIHVzZWQgYnkgRlMtQ2FjaGUgdG8gaGFuZGxlIGJhY2tncm91bmQgd3JpdGVzIG9mCisgICAgIHBhZ2VzIHRoYXQgaGF2ZSBqdXN0IGJlZW4gZmV0Y2hlZCBmcm9tIGEgcmVtb3RlIHNlcnZlci4KKworICAgICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCBvcC0+c2xvd193b3JrIGFuZCBvcC0+cHJvY2Vzc29yIG11c3QgYmUKKyAgICAgaW5pdGlhbGlzZWQgYmVmb3JlIHN1Ym1pdHRpbmcgdGhlIG9wZXJhdGlvbjoKKworCQlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3cob3AsIHByb2Nlc3NvcikKKworCitGdXJ0aGVybW9yZSwgb3BlcmF0aW9ucyBtYXkgYmUgb25lIG9mIHR3byB0eXBlczoKKworICgxKSBFeGNsdXNpdmUgKEZTQ0FDSEVfT1BfRVhDTFVTSVZFKS4gIE9wZXJhdGlvbnMgb2YgdGhpcyB0eXBlIG1heSBub3QgcnVuIGluCisgICAgIGNvbmp1bmN0aW9uIHdpdGggYW55IG90aGVyIG9wZXJhdGlvbiBvbiB0aGUgb2JqZWN0IGJlaW5nIG9wZXJhdGVkIHVwb24uCisKKyAgICAgQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBhdHRyaWJ1dGUgY2hhbmdlIG9wZXJhdGlvbiwgaW4gd2hpY2ggdGhlIGZpbGUKKyAgICAgYmVpbmcgd3JpdHRlbiB0byBtYXkgbmVlZCB0cnVuY2F0aW9uLgorCisgKDIpIFNoYXJlYWJsZS4gIE9wZXJhdGlvbnMgb2YgdGhpcyB0eXBlIG1heSBiZSBydW5uaW5nIHNpbXVsdGFuZW91c2x5LiAgSXQncworICAgICB1cCB0byB0aGUgb3BlcmF0aW9uIGltcGxlbWVudGF0aW9uIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGJldHdlZW4gb3RoZXIKKyAgICAgb3BlcmF0aW9ucyBydW5uaW5nIGF0IHRoZSBzYW1lIHRpbWUuCisKKworPT09PT09PT09CitQUk9DRURVUkUKKz09PT09PT09PQorCitPcGVyYXRpb25zIGFyZSB1c2VkIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwcm9jZWR1cmU6CisKKyAoMSkgVGhlIHN1Ym1pdHRpbmcgdGhyZWFkIG11c3QgYWxsb2NhdGUgdGhlIG9wZXJhdGlvbiBhbmQgaW5pdGlhbGlzZSBpdAorICAgICBpdHNlbGYuICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIHBhcnQgb2YgYSBtb3JlIHNwZWNpZmljIHN0cnVjdHVyZSB3aXRoIHRoZQorICAgICBnZW5lcmljIG9wIGVtYmVkZGVkIHdpdGhpbi4KKworICgyKSBUaGUgc3VibWl0dGluZyB0aHJlYWQgbXVzdCB0aGVuIHN1Ym1pdCB0aGUgb3BlcmF0aW9uIGZvciBwcm9jZXNzaW5nIHVzaW5nCisgICAgIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnM6CisKKwlpbnQgZnNjYWNoZV9zdWJtaXRfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKworCWludCBmc2NhY2hlX3N1Ym1pdF9leGNsdXNpdmVfb3Aoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCisgICAgIFRoZSBmaXJzdCBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBzdWJtaXQgbm9uLWV4Y2x1c2l2ZSBvcHMgYW5kIHRoZQorICAgICBzZWNvbmQgdG8gc3VibWl0IGV4Y2x1c2l2ZSBvbmVzLiAgVGhlIGNhbGxlciBtdXN0IHN0aWxsIHNldCB0aGUKKyAgICAgRlNDQUNIRV9PUF9FWENMVVNJVkUgZmxhZy4KKworICAgICBJZiBzdWNjZXNzZnVsLCBib3RoIGZ1bmN0aW9ucyB3aWxsIGFzc2lnbiB0aGUgb3BlcmF0aW9uIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgb2JqZWN0IGFuZCByZXR1cm4gMC4gIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlIG9iamVjdCBzcGVjaWZpZWQgaXMKKyAgICAgcGVybWFuZW50bHkgdW5hdmFpbGFibGUuCisKKyAgICAgVGhlIG9wZXJhdGlvbiBtYW5hZ2VyIHdpbGwgZGVmZXIgb3BlcmF0aW9ucyBvbiBhbiBvYmplY3QgdGhhdCBpcyBzdGlsbAorICAgICB1bmRlcmdvaW5nIGxvb2t1cCBvciBjcmVhdGlvbi4gIFRoZSBvcGVyYXRpb24gd2lsbCBhbHNvIGJlIGRlZmVycmVkIGlmIGFuCisgICAgIG9wZXJhdGlvbiBvZiBjb25mbGljdGluZyBleGNsdXNpdml0eSBpcyBpbiBwcm9ncmVzcyBvbiB0aGUgb2JqZWN0LgorCisgICAgIElmIHRoZSBvcGVyYXRpb24gaXMgYXN5bmNocm9ub3VzLCB0aGUgbWFuYWdlciB3aWxsIHJldGFpbiBhIHJlZmVyZW5jZSB0bworICAgICBpdCwgc28gdGhlIGNhbGxlciBzaG91bGQgcHV0IHRoZWlyIHJlZmVyZW5jZSB0byBpdCBieSBwYXNzaW5nIGl0IHRvOgorCisJdm9pZCBmc2NhY2hlX3B1dF9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisKKyAoMykgSWYgdGhlIHN1Ym1pdHRpbmcgdGhyZWFkIHdhbnRzIHRvIGRvIHRoZSB3b3JrIGl0c2VsZiwgYW5kIGhhcyBtYXJrZWQgdGhlCisgICAgIG9wZXJhdGlvbiB3aXRoIEZTQ0FDSEVfT1BfTVlUSFJFQUQsIHRoZW4gaXQgc2hvdWxkIG1vbml0b3IKKyAgICAgRlNDQUNIRV9PUF9XQUlUSU5HIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QgaWYKKyAgICAgbmVjZXNzYXJ5ICh0aGUgb2JqZWN0IG1pZ2h0IGhhdmUgZGllZCB3aGlsc3QgdGhlIHRocmVhZCB3YXMgd2FpdGluZykuCisKKyAgICAgV2hlbiBpdCBoYXMgZmluaXNoZWQgZG9pbmcgaXRzIHByb2Nlc3NpbmcsIGl0IHNob3VsZCBjYWxsCisgICAgIGZzY2FjaGVfcHV0X29wZXJhdGlvbigpIG9uIGl0LgorCisgKDQpIFRoZSBvcGVyYXRpb24gaG9sZHMgYW4gZWZmZWN0aXZlIGxvY2sgdXBvbiB0aGUgb2JqZWN0LCBwcmV2ZW50aW5nIG90aGVyCisgICAgIGV4Y2x1c2l2ZSBvcHMgY29uZmxpY3RpbmcgdW50aWwgaXQgaXMgcmVsZWFzZWQuICBUaGUgb3BlcmF0aW9uIGNhbiBiZQorICAgICBlbnF1ZXVlZCBmb3IgZnVydGhlciBpbW1lZGlhdGUgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcgYnkgYWRqdXN0aW5nIHRoZQorICAgICBDUFUgdGltZSBwcm92aXNpb25pbmcgb3B0aW9uIGlmIG5lY2Vzc2FyeSwgZWc6CisKKwlvcC0+ZmxhZ3MgJj0gfkZTQ0FDSEVfT1BfVFlQRTsKKwlvcC0+ZmxhZ3MgfD0gfkZTQ0FDSEVfT1BfRkFTVDsKKworICAgICBhbmQgY2FsbGluZzoKKworCXZvaWQgZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQorCisgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWxsb3cgb3RoZXIgdGhpbmdzIHRvIGhhdmUgdXNlIG9mIHRoZSB3b3JrZXIgdGhyZWFkCisgICAgIHBvb2xzLgorCisKKz09PT09PT09PT09PT09PT09PT09PQorQVNZTkNIUk9OT1VTIENBTExCQUNLCis9PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiB1c2VkIGluIGFzeW5jaHJvbm91cyBtb2RlLCB0aGUgd29ya2VyIHRocmVhZCBwb29sIHdpbGwgaW52b2tlIHRoZQorcHJvY2Vzc29yIG1ldGhvZCB3aXRoIGEgcG9pbnRlciB0byB0aGUgb3BlcmF0aW9uLiAgVGhpcyBzaG91bGQgdGhlbiBnZXQgYXQgdGhlCitjb250YWluZXIgc3RydWN0IGJ5IHVzaW5nIGNvbnRhaW5lcl9vZigpOgorCisJc3RhdGljIHZvaWQgZnNjYWNoZV93cml0ZV9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKKwl7CisJCXN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgKm9wID0KKwkJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UsIG9wKTsKKwkuLi4KKwl9CisKK1RoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2Ugb24gdGhlIG9wZXJhdGlvbiwgYW5kIHdpbGwgaW52b2tlCitmc2NhY2hlX3B1dF9vcGVyYXRpb24oKSB3aGVuIHRoZSBwcm9jZXNzb3IgZnVuY3Rpb24gcmV0dXJucy4gIFRoZSBwcm9jZXNzb3IKK2Z1bmN0aW9uIGlzIGF0IGxpYmVydHkgdG8gY2FsbCBmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKCkgb3IgdG8gdGFrZSBleHRyYQorcmVmZXJlbmNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXhvZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leG9mcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlZDc0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXhvZnMudHh0CkBAIC0wLDAgKzEsMTc2IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXSEFUIElTIEVYT0ZTPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitleG9mcyBpcyBhIGZpbGUgc3lzdGVtIHRoYXQgdXNlcyBhbiBPU0QgYW5kIGV4cG9ydHMgdGhlIEFQSSBvZiBhIG5vcm1hbCBMaW51eAorZmlsZSBzeXN0ZW0uIFVzZXJzIGFjY2VzcyBleG9mcyBsaWtlIGFueSBvdGhlciBsb2NhbCBmaWxlIHN5c3RlbSwgYW5kIGV4b2ZzCit3aWxsIGluIHR1cm4gaXNzdWUgY29tbWFuZHMgdG8gdGhlIGxvY2FsIE9TRCBpbml0aWF0b3IuCisKK09TRCBpcyBhIG5ldyBUMTAgY29tbWFuZCBzZXQgdGhhdCB2aWV3cyBzdG9yYWdlIGRldmljZXMgbm90IGFzIGEgbGFyZ2UvZmxhdAorYXJyYXkgb2Ygc2VjdG9ycyBidXQgYXMgYSBjb250YWluZXIgb2Ygb2JqZWN0cywgZWFjaCBoYXZpbmcgYSBsZW5ndGgsIHF1b3RhLAordGltZSBhdHRyaWJ1dGVzIGFuZCBtb3JlLiBFYWNoIG9iamVjdCBpcyBhZGRyZXNzZWQgYnkgYSA2NGJpdCBJRCwgYW5kIGlzCitjb250YWluZWQgaW4gYSA2NGJpdCBJRCBwYXJ0aXRpb24uIEVhY2ggb2JqZWN0IGhhcyBhc3NvY2lhdGVkIGF0dHJpYnV0ZXMKK2F0dGFjaGVkIHRvIGl0LCB3aGljaCBhcmUgaW50ZWdyYWwgcGFydCBvZiB0aGUgb2JqZWN0IGFuZCBwcm92aWRlIG1ldGFkYXRhIGFib3V0Cit0aGUgb2JqZWN0LiBUaGUgc3RhbmRhcmQgZGVmaW5lcyBzb21lIGNvbW1vbiBvYmxpZ2F0b3J5IGF0dHJpYnV0ZXMsIGJ1dCB1c2VyCithdHRyaWJ1dGVzIGNhbiBiZSBhZGRlZCBhcyBuZWVkZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VOVklST05NRU5UCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHVzZSB0aGlzIGZpbGUgc3lzdGVtLCB5b3UgbmVlZCB0byBoYXZlIGFuIG9iamVjdCBzdG9yZSB0byBydW4gaXQgb24uICBZb3UKK21heSBkb3dubG9hZCBhIHRhcmdldCBmcm9tOgoraHR0cDovL29wZW4tb3NkLm9yZworCitTZWUgRG9jdW1lbnRhdGlvbi9zY3NpL29zZC50eHQgZm9yIGhvdyB0byBzZXR1cCBhIHdvcmtpbmcgb3NkIGVudmlyb25tZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVU0FHRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBEb3dubG9hZCBhbmQgY29tcGlsZSBleG9mcyBhbmQgb3Blbi1vc2QgaW5pdGlhdG9yOgorICBZb3UgbmVlZCBhbiBleHRlcm5hbCBLZXJuZWwgc291cmNlIHRyZWUgb3Iga2VybmVsIGhlYWRlcnMgZnJvbSB5b3VyCisgIGRpc3RyaWJ1dGlvbi4gKGFueXRoaW5nIGJhc2VkIG9uIDIuNi4yNiBvciBsYXRlcikuCisKKyAgYS4gZG93bmxvYWQgb3Blbi1vc2QgaW5jbHVkaW5nIGV4b2ZzIHNvdXJjZSB1c2luZzoKKyAgICAgW3BhcmVudC1kaXJlY3RvcnldJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lm9wZW4tb3NkLm9yZy9vcGVuLW9zZC5naXQKKworICBiLiBCdWlsZCB0aGUgbGlicmFyeSBtb2R1bGUgbGlrZSB0aGlzOgorICAgICBbcGFyZW50LWRpcmVjdG9yeV0kIG1ha2UgLUMgS1NSQz0kKEtFUl9ESVIpIG9wZW4tb3NkCisKKyAgICAgVGhpcyB3aWxsIGJ1aWxkIGJvdGggdGhlIG9wZW4tb3NkIGluaXRpYXRvciBhcyB3ZWxsIGFzIHRoZSBleG9mcyBrZXJuZWwKKyAgICAgbW9kdWxlLiBVc2Ugd2hhdGV2ZXIgcGFyYW1ldGVycyB5b3UgY29tcGlsZWQgeW91ciBLZXJuZWwgd2l0aCBhbmQKKyAgICAgJChLRVJfRElSKSBhYm92ZSBwb2ludGluZyB0byB0aGUgS2VybmVsIHlvdSBjb21waWxlIGFnYWluc3QuIFNlZSB0aGUgZmlsZQorICAgICBvcGVuLW9zZC90b3AtbGV2ZWwtTWFrZWZpbGUgZm9yIGFuIGV4YW1wbGUuCisKKzIuIEdldCB0aGUgT1NEIGluaXRpYXRvciBhbmQgdGFyZ2V0IHNldCB1cCBwcm9wZXJseSwgYW5kIGxvZ2luIHRvIHRoZSB0YXJnZXQuCisgIFNlZSBEb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dCBmb3IgZmFydGhlciBpbnN0cnVjdGlvbnMuIEFsc28gc2VlIC4vZG8tb3NkCisgIGZvciBleGFtcGxlIHNjcmlwdCB0aGF0IGRvZXMgYWxsIHRoZXNlIHN0ZXBzLgorCiszLiBJbnNtb2QgdGhlIGV4b2ZzLmtvIG1vZHVsZToKKyAgIFtleG9mc10kIGluc21vZCBleG9mcy5rbworCis0LiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudCB0byBtb3VudCBleGlzdHMuIElmIG5vdCwgY3JlYXRlIGl0LgorICAgKEZvciBleGFtcGxlLCBta2RpciAvbW50L2V4b2ZzKQorCis1LiBBdCBmaXJzdCBydW4geW91IHdpbGwgbmVlZCB0byBpbnZva2UgdGhlIG1rZnMuZXhvZnMgYXBwbGljYXRpb24KKworICAgQXMgYW4gZXhhbXBsZSwgdGhpcyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBzeXN0ZW0gb246CisgICAvZGV2L29zZDAgcGFydGl0aW9uIElEIDY1NTM2CisKKyAgIG1rZnMuZXhvZnMgLS1waWQ9NjU1MzYgLS1mb3JtYXQgL2Rldi9vc2QwCisKKyAgIFRoZSAtLWZvcm1hdCBpcyBvcHRpb25hbCBpZiBub3Qgc3BlY2lmaWVkIG5vIE9TRF9GT1JNQVQgd2lsbCBiZQorICAgcHJlZm9ybWVkIGFuZCBhIGNsZWFuIGZpbGUgc3lzdGVtIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgc3BlY2lmaWVkIHBpZCwKKyAgIGluIHRoZSBhdmFpbGFibGUgc3BhY2Ugb2YgdGhlIHRhcmdldC4gKFVzZSAtLWZvcm1hdD1zaXplX2luX21lZyB0byBsaW1pdAorICAgdGhlIHRvdGFsIExVTiBzcGFjZSBhdmFpbGFibGUpCisKKyAgIElmIHBpZCBhbHJlYWR5IGV4aXN0IGl0IHdpbGwgYmUgZGVsZXRlZCBhbmQgYSBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZCBpbiBpdCdzCisgICBwbGFjZS4gQmUgY2FyZWZ1bC4KKworICAgQW4gZXhvZnMgbGl2ZXMgaW5zaWRlIGEgc2luZ2xlIE9TRCBwYXJ0aXRpb24uIFlvdSBjYW4gY3JlYXRlIG11bHRpcGxlIGV4b2ZzCisgICBmaWxlc3lzdGVtcyBvbiB0aGUgc2FtZSBkZXZpY2UgdXNpbmcgbXVsdGlwbGUgcGlkcy4KKworICAgKHJ1biBta2ZzLmV4b2ZzIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMgZm9yIHVzYWdlIGhlbHAgbWVzc2FnZSkKKworNi4gTW91bnQgdGhlIGZpbGUgc3lzdGVtLgorCisgICBGb3IgZXhhbXBsZSwgdG8gbW91bnQgL2Rldi9vc2QwLCBwYXJ0aXRpb24gSUQgMHgxMDAwMCBvbiAvbW50L2V4b2ZzOgorCisJbW91bnQgLXQgZXhvZnMgLW8gcGlkPTY1NTM2IC9kZXYvb3NkMCAvbW50L2V4b2ZzLworCis3LiBGb3IgcmVmZXJlbmNlIChTZWUgZG8tZXhvZnMgZXhhbXBsZSBzY3JpcHQpOgorCWRvLWV4b2ZzIHN0YXJ0IC0gYW4gZXhhbXBsZSBvZiBob3cgdG8gcGVyZm9ybSB0aGUgYWJvdmUgc3RlcHMuCisJZG8tZXhvZnMgc3RvcCAtICBhbiBleGFtcGxlIG9mIGhvdyB0byB1bm1vdW50IHRoZSBmaWxlIHN5c3RlbS4KKwlkby1leG9mcyBmb3JtYXQgLSBhbiBleGFtcGxlIG9mIGhvdyB0byBmb3JtYXQgYW5kIG1rZnMgYSBuZXcgZXhvZnMuCisKKzguIEV4dHJhIGNvbXBpbGF0aW9uIGZsYWdzICh1bmNvbW1lbnQgaW4gZnMvZXhvZnMvS2J1aWxkKToKKwlDT05GSUdfRVhPRlNfREVCVUcgLSBmb3IgZGVidWcgbWVzc2FnZXMgYW5kIGV4dHJhIGNoZWNrcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZXhvZnMgbW91bnQgb3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorU2ltaWxhciB0byBhbnkgbW91bnQgY29tbWFuZDoKKwltb3VudCAtdCBleG9mcyAtbyBleG9mc19vcHRpb25zIC9kZXYvb3NkWCBtb3VudF9leG9mc19kaXJlY3RvcnkKKworV2hlcmU6CisgICAgLXQgZXhvZnM6IHNwZWNpZmllcyB0aGUgZXhvZnMgZmlsZSBzeXN0ZW0KKworICAgIC9kZXYvb3NkWDogWCBpcyBhIGRlY2ltYWwgbnVtYmVyLiAvZGV2L29zZFggd2FzIGNyZWF0ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsCisgICAgICAgICAgICAgICBsb2dpbiBpbnRvIGFuIE9TRCB0YXJnZXQuCisKKyAgICBtb3VudF9leG9mc19kaXJlY3Rvcnk6IFRoZSBkaXJlY3RvcnkgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtIG9uCisKKyAgICBleG9mcyBzcGVjaWZpYyBvcHRpb25zOiBPcHRpb25zIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzICgsKQorCQlwaWQ9PGludGVnZXI+IC0gVGhlIHBhcnRpdGlvbiBudW1iZXIgdG8gbW91bnQvY3JlYXRlIGFzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciBvZiB0aGUgZmlsZXN5c3RlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gaXMgbWFuZGF0b3J5CisgICAgICAgICAgICAgICAgdG89PGludGVnZXI+ICAtIFRpbWVvdXQgaW4gdGlja3MgZm9yIGEgc2luZ2xlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyAoNjAgKiBIWikgW2ZvciBkZWJ1Z2dpbmcgb25seV0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorREVTSUdOCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVGhlIGZpbGUgc3lzdGVtIGNvbnRyb2wgYmxvY2sgKEFLQSBvbi1kaXNrIHN1cGVyYmxvY2spIHJlc2lkZXMgaW4gYW4gb2JqZWN0CisgIHdpdGggYSBzcGVjaWFsIElEIChkZWZpbmVkIGluIGNvbW1vbi5oKS4KKyAgSW5mb3JtYXRpb24gaW5jbHVkZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGNvbnRyb2wgYmxvY2sgaXMgdXNlZCB0byBmaWxsIHRoZQorICBpbi1tZW1vcnkgc3VwZXJibG9jayBzdHJ1Y3R1cmUgYXQgbW91bnQgdGltZS4gVGhpcyBvYmplY3QgaXMgY3JlYXRlZCBiZWZvcmUKKyAgdGhlIGZpbGUgc3lzdGVtIGlzIHVzZWQgYnkgbWtleG9mcy5jIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIHN1Y2ggYXM6CisJLSBUaGUgZmlsZSBzeXN0ZW0ncyBtYWdpYyBudW1iZXIKKwktIFRoZSBuZXh0IGlub2RlIG51bWJlciB0byBiZSBhbGxvY2F0ZWQKKworKiBFYWNoIGZpbGUgcmVzaWRlcyBpbiBpdHMgb3duIG9iamVjdCBhbmQgY29udGFpbnMgdGhlIGRhdGEgKGFuZCBpdCB3aWxsIGJlCisgIHBvc3NpYmxlIHRvIGV4dGVuZCB0aGUgZmlsZSBvdmVyIG11bHRpcGxlIG9iamVjdHMsIHRob3VnaCB0aGlzIGhhcyBub3QgYmVlbgorICBpbXBsZW1lbnRlZCB5ZXQpLgorCisqIEEgZGlyZWN0b3J5IGlzIHRyZWF0ZWQgYXMgYSBmaWxlLCBhbmQgZXNzZW50aWFsbHkgY29udGFpbnMgYSBsaXN0IG9mIDxmaWxlCisgIG5hbWUsIGlub2RlICM+IHBhaXJzIGZvciBmaWxlcyB0aGF0IGFyZSBmb3VuZCBpbiB0aGF0IGRpcmVjdG9yeS4gVGhlIG9iamVjdAorICBJRHMgY29ycmVzcG9uZCB0byB0aGUgZmlsZXMnIGlub2RlIG51bWJlcnMgYW5kIHdpbGwgYmUgYWxsb2NhdGVkIGFjY29yZGluZyB0bworICBhIGJpdG1hcCAoc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0KS4gTm93IHRoZXkgYXJlIGFsbG9jYXRlZCB1c2luZyBhCisgIGNvdW50ZXIuCisKKyogRWFjaCBmaWxlJ3MgY29udHJvbCBibG9jayAoQUtBIG9uLWRpc2sgaW5vZGUpIGlzIHN0b3JlZCBpbiBpdHMgb2JqZWN0J3MKKyAgYXR0cmlidXRlcy4gVGhpcyBhcHBsaWVzIHRvIGJvdGggcmVndWxhciBmaWxlcyBhbmQgb3RoZXIgdHlwZXMgKGRpcmVjdG9yaWVzLAorICBkZXZpY2UgZmlsZXMsIHN5bWxpbmtzLCBldGMuKS4KKworKiBDcmVkZW50aWFscyBhcmUgZ2VuZXJhdGVkIHBlciBvYmplY3QgKGlub2RlIGFuZCBzdXBlcmJsb2NrKSB3aGVuIHRoZXkgaXMKKyAgY3JlYXRlZCBpbiBtZW1vcnkgKHJlYWQgb2ZmIGRpc2sgb3IgY3JlYXRlZCkuIFRoZSBjcmVkZW50aWFsIHdvcmtzIGZvciBhbGwKKyAgb3BlcmF0aW9ucyBhbmQgaXMgdXNlZCBhcyBsb25nIGFzIHRoZSBvYmplY3QgcmVtYWlucyBpbiBtZW1vcnkuCisKKyogQXN5bmMgT1NEIG9wZXJhdGlvbnMgYXJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUsIGJ1dCB0aGUgdGFyZ2V0IG1heSBleGVjdXRlCisgIHRoZW0gb3V0IG9mIG9yZGVyLiBUaGUgb3BlcmF0aW9ucyB0aGF0IGNvbmNlcm4gdXMgYXJlIGNyZWF0ZSwgZGVsZXRlLAorICByZWFkcGFnZSwgd3JpdGVwYWdlLCB1cGRhdGVfaW5vZGUsIGFuZCB0cnVuY2F0ZS4gVGhlIGZvbGxvd2luZyBwYWlycyBvZgorICBvcGVyYXRpb25zIHNob3VsZCBleGVjdXRlIGluIHRoZSBvcmRlciB3cml0dGVuLCBhbmQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZW0KKyAgZnJvbSBleGVjdXRpbmcgaW4gcmV2ZXJzZSBvcmRlcjoKKwktIFRoZSBmb2xsb3dpbmcgYXJlIGhhbmRsZWQgd2l0aCB0aGUgT0JKX0NSRUFURUQgYW5kIE9CSl8yQkNSRUFURUQKKwkgIGZsYWdzLiBPQkpfQ1JFQVRFRCBpcyBzZXQgd2hlbiB3ZSBrbm93IHRoZSBvYmplY3QgZXhpc3RzIG9uIHRoZSBPU0QgLQorCSAgaW4gY3JlYXRlJ3MgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCB3aGVuIHdlIHN1Y2Nlc3NmdWxseSBkbyBhIHJlYWRfaW5vZGUuCisJICBPQkpfMkJDUkVBVEVEIGlzIHNldCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjcmVhdGUgZnVuY3Rpb24sIHNvIHdlCisJICBrbm93IHRoYXQgd2Ugc2hvdWxkIHdhaXQuCisJCS0gY3JlYXRlL2RlbGV0ZTogZGVsZXRlIHNob3VsZCB3YWl0IHVudGlsIHRoZSBvYmplY3QgaXMgY3JlYXRlZAorCQkgIG9uIHRoZSBPU0QuCisJCS0gY3JlYXRlL3JlYWRwYWdlOiByZWFkcGFnZSBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYSBwYWdlCisJCSAgZnVsbCBvZiB6ZXJvZXMgaW4gdGhpcyBjYXNlLiBJZiB0aGVyZSB3YXMgYSB3cml0ZSBhbHJlYWR5CisJCSAgZW4tcm91dGUgKGkuZS4gY3JlYXRlLCB3cml0ZXBhZ2UsIHJlYWRwYWdlKSB0aGVuIHRoZSBwYWdlCisJCSAgd291bGQgYmUgbG9ja2VkLCBhbmQgc28gaXQgd291bGQgcmVhbGx5IGJlIHRoZSBzYW1lIGFzCisJCSAgY3JlYXRlL3dyaXRlcGFnZS4KKwkJLSBjcmVhdGUvd3JpdGVwYWdlOiBpZiB3cml0ZXBhZ2UgaXMgY2FsbGVkIGZvciBhIHN5bmMgd3JpdGUsIGl0CisJCSAgc2hvdWxkIHdhaXQgdW50aWwgdGhlIG9iamVjdCBpcyBjcmVhdGVkIG9uIHRoZSBPU0QuCisJCSAgT3RoZXJ3aXNlLCBpdCBzaG91bGQganVzdCByZXR1cm4uCisJCS0gY3JlYXRlL3RydW5jYXRlOiB0cnVuY2F0ZSBzaG91bGQgd2FpdCB1bnRpbCB0aGUgb2JqZWN0IGlzCisJCSAgY3JlYXRlZCBvbiB0aGUgT1NELgorCQktIGNyZWF0ZS91cGRhdGVfaW5vZGU6IHVwZGF0ZV9pbm9kZSBzaG91bGQgd2FpdCB1bnRpbCB0aGUKKwkJICBvYmplY3QgaXMgY3JlYXRlZCBvbiB0aGUgT1NELgorCS0gSGFuZGxlZCBieSBWRlMgbG9ja3M6CisJCS0gcmVhZHBhZ2UvZGVsZXRlOiBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugb2YgcGFnZSBsb2NrLgorCQktIHdyaXRlcGFnZS9kZWxldGU6IHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSBvZiBwYWdlIGxvY2suCisJCS0gcmVhZHBhZ2Uvd3JpdGVwYWdlOiBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugb2YgcGFnZSBsb2NrLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMSUNFTlNFL0NPUFlSSUdIVAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGV4b2ZzIGZpbGUgc3lzdGVtIGlzIGJhc2VkIG9uIGV4dDIgdjAuNWIgKGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpbnV4IGtlcm5lbAordmVyc2lvbiAyLjYuMTApLiAgQWxsIGZpbGVzIGluY2x1ZGUgdGhlIG9yaWdpbmFsIGNvcHlyaWdodHMsIGFuZCB0aGUgbGljZW5zZQoraXMgR1BMIHZlcnNpb24gMiAob25seSB2ZXJzaW9uIDIsIGFzIGlzIHRydWUgZm9yIHRoZSBMaW51eCBrZXJuZWwpLiAgVGhlCitMaW51eCBrZXJuZWwgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSB3d3cua2VybmVsLm9yZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CmluZGV4IGNlYzgyOWIuLjk3ODgyZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dApAQCAtODUsNyArODUsNyBAQAogKiBleHRlbnQgZm9ybWF0IG1vcmUgcm9idXN0IGluIGZhY2Ugb2Ygb24tZGlzayBjb3JydXB0aW9uIGR1ZSB0byBtYWdpY3MsCiAqIGludGVybmFsIHJlZHVuZGFuY3kgaW4gdHJlZQogKiBpbXByb3ZlZCBmaWxlIGFsbG9jYXRpb24gKG11bHRpLWJsb2NrIGFsbG9jKQotKiBmaXggMzIwMDAgc3ViZGlyZWN0b3J5IGxpbWl0CisqIGxpZnQgMzIwMDAgc3ViZGlyZWN0b3J5IGxpbWl0IGltcG9zZWQgYnkgaV9saW5rc19jb3VudFsxXQogKiBuc2VjIHRpbWVzdGFtcHMgZm9yIG10aW1lLCBhdGltZSwgY3RpbWUsIGNyZWF0ZSB0aW1lCiAqIGlub2RlIHZlcnNpb24gZmllbGQgb24gZGlzayAoTkZTdjQsIEx1c3RyZSkKICogcmVkdWNlZCBlMmZzY2sgdGltZSB2aWEgdW5pbml0X2JnIGZlYXR1cmUKQEAgLTEwMCw2ICsxMDAsOSBAQAogKiBlZmZpY2VudCBuZXcgb3JkZXJlZCBtb2RlIGluIEpCRDIgYW5kIGV4dDQoYXZvaWQgdXNpbmcgYnVmZmVyIGhlYWQgdG8gZm9yY2UKICAgdGhlIG9yZGVyaW5nKQogCitbMV0gRmlsZXN5c3RlbXMgd2l0aCBhIGJsb2NrIHNpemUgb2YgMWsgbWF5IHNlZSBhIGxpbWl0IGltcG9zZWQgYnkgdGhlCitkaXJlY3RvcnkgaGFzaCB0cmVlIGhhdmluZyBhIG1heGltdW0gZGVwdGggb2YgdHdvLgorCiAyLjIgQ2FuZGlkYXRlIGZlYXR1cmVzIGZvciBmdXR1cmUgaW5jbHVzaW9uCiAKICogT25saW5lIGRlZnJhZyAocGF0Y2hlcyBhdmFpbGFibGUgYnV0IG5vdCB3ZWxsIHRlc3RlZCkKQEAgLTE4MCw4ICsxODMsOCBAQAogCQkJcGVyZm9ybWFuY2UuCiAKIGJhcnJpZXI9PDB8MSgqKT4JVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1c2Ugb2Ygd3JpdGUgYmFycmllcnMgaW4KLQkJCXRoZSBqYmQgY29kZS4gIGJhcnJpZXI9MCBkaXNhYmxlcywgYmFycmllcj0xIGVuYWJsZXMuCi0JCQlUaGlzIGFsc28gcmVxdWlyZXMgYW4gSU8gc3RhY2sgd2hpY2ggY2FuIHN1cHBvcnQKK2JhcnJpZXIoKikJCXRoZSBqYmQgY29kZS4gIGJhcnJpZXI9MCBkaXNhYmxlcywgYmFycmllcj0xIGVuYWJsZXMuCitub2JhcnJpZXIJCVRoaXMgYWxzbyByZXF1aXJlcyBhbiBJTyBzdGFjayB3aGljaCBjYW4gc3VwcG9ydAogCQkJYmFycmllcnMsIGFuZCBpZiBqYmQgZ2V0cyBhbiBlcnJvciBvbiBhIGJhcnJpZXIKIAkJCXdyaXRlLCBpdCB3aWxsIGRpc2FibGUgYWdhaW4gd2l0aCBhIHdhcm5pbmcuCiAJCQlXcml0ZSBiYXJyaWVycyBlbmZvcmNlIHByb3BlciBvbi1kaXNrIG9yZGVyaW5nCkBAIC0xODksNiArMTkyLDkgQEAKIAkJCXNhZmUgdG8gdXNlLCBhdCBzb21lIHBlcmZvcm1hbmNlIHBlbmFsdHkuICBJZgogCQkJeW91ciBkaXNrcyBhcmUgYmF0dGVyeS1iYWNrZWQgaW4gb25lIHdheSBvciBhbm90aGVyLAogCQkJZGlzYWJsaW5nIGJhcnJpZXJzIG1heSBzYWZlbHkgaW1wcm92ZSBwZXJmb3JtYW5jZS4KKwkJCVRoZSBtb3VudCBvcHRpb25zICJiYXJyaWVyIiBhbmQgIm5vYmFycmllciIgY2FuCisJCQlhbHNvIGJlIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgYmFycmllcnMsIGZvcgorCQkJY29uc2lzdGVuY3kgd2l0aCBvdGhlciBleHQ0IG1vdW50IG9wdGlvbnMuCiAKIGlub2RlX3JlYWRhaGVhZD1uCVRoaXMgdHVuaW5nIHBhcmFtZXRlciBjb250cm9scyB0aGUgbWF4aW11bQogCQkJbnVtYmVyIG9mIGlub2RlIHRhYmxlIGJsb2NrcyB0aGF0IGV4dDQncyBpbm9kZQpAQCAtMzEwLDYgKzMxNiwyNCBAQAogCQkJYSBzbGlnaHRseSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgZGVmYXVsdCBJL08KIAkJCXByaW9yaXR5LgogCithdXRvX2RhX2FsbG9jKCopCU1hbnkgYnJva2VuIGFwcGxpY2F0aW9ucyBkb24ndCB1c2UgZnN5bmMoKSB3aGVuIAorbm9hdXRvX2RhX2FsbG9jCQlyZXBsYWNpbmcgZXhpc3RpbmcgZmlsZXMgdmlhIHBhdHRlcm5zIHN1Y2ggYXMKKwkJCWZkID0gb3BlbigiZm9vLm5ldyIpL3dyaXRlKGZkLC4uKS9jbG9zZShmZCkvCisJCQlyZW5hbWUoImZvby5uZXciLCAiZm9vIiksIG9yIHdvcnNlIHlldCwKKwkJCWZkID0gb3BlbigiZm9vIiwgT19UUlVOQykvd3JpdGUoZmQsLi4pL2Nsb3NlKGZkKS4KKwkJCUlmIGF1dG9fZGFfYWxsb2MgaXMgZW5hYmxlZCwgZXh0NCB3aWxsIGRldGVjdAorCQkJdGhlIHJlcGxhY2UtdmlhLXJlbmFtZSBhbmQgcmVwbGFjZS12aWEtdHJ1bmNhdGUKKwkJCXBhdHRlcm5zIGFuZCBmb3JjZSB0aGF0IGFueSBkZWxheWVkIGFsbG9jYXRpb24KKwkJCWJsb2NrcyBhcmUgYWxsb2NhdGVkIHN1Y2ggdGhhdCBhdCB0aGUgbmV4dAorCQkJam91cm5hbCBjb21taXQsIGluIHRoZSBkZWZhdWx0IGRhdGE9b3JkZXJlZAorCQkJbW9kZSwgdGhlIGRhdGEgYmxvY2tzIG9mIHRoZSBuZXcgZmlsZSBhcmUgZm9yY2VkCisJCQl0byBkaXNrIGJlZm9yZSB0aGUgcmVuYW1lKCkgb3BlcmF0aW9uIGlzCisJCQljb21taXRlZC4gIFRoaXMgcHJvdmlkZXMgcm91Z2hseSB0aGUgc2FtZSBsZXZlbAorCQkJb2YgZ3VhcmFudGVlcyBhcyBleHQzLCBhbmQgYXZvaWRzIHRoZQorCQkJInplcm8tbGVuZ3RoIiBwcm9ibGVtIHRoYXQgY2FuIGhhcHBlbiB3aGVuIGEKKwkJCXN5c3RlbSBjcmFzaGVzIGJlZm9yZSB0aGUgZGVsYXllZCBhbGxvY2F0aW9uCisJCQlibG9ja3MgYXJlIGZvcmNlZCB0byBkaXNrLgorCiBEYXRhIE1vZGUKID09PT09PT09PQogVGhlcmUgYXJlIDMgZGlmZmVyZW50IGRhdGEgbW9kZXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCA4MzBiYWQ3Li5jZTg0Y2ZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTUsNiArNSw3IEBACiAgICAgICAgICAgICAgICAgICBCb2RvIEJhdWVyIDxiYkByaWNvY2hldC5uZXQ+CiAKIDIuNC54IHVwZGF0ZQkgIEpvcmdlIE5lcmluIDxjb21hbmRhbnRlQHphcmFsaW51eC5jb20+ICAgICAgTm92ZW1iZXIgMTQgMjAwMAorbW92ZSAvcHJvYy9zeXMJICBTaGVuIEZlbmcgPHNoZW5AY24uZnVqaXRzdS5jb20+CQkgICAgQXByaWwgMSAyMDA5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFZlcnNpb24gMS4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtlcm5lbCB2ZXJzaW9uIDIuMi4xMgogCQkJCQkgICAgICBLZXJuZWwgdmVyc2lvbiAyLjQuMC10ZXN0MTEtcHJlNApAQCAtMjYsMjUgKzI3LDE3IEBACiAgIDEuNglQYXJhbGxlbCBwb3J0IGluZm8gaW4gL3Byb2MvcGFycG9ydAogICAxLjcJVFRZIGluZm8gaW4gL3Byb2MvdHR5CiAgIDEuOAlNaXNjZWxsYW5lb3VzIGtlcm5lbCBzdGF0aXN0aWNzIGluIC9wcm9jL3N0YXQKKyAgMS45IEV4dDQgZmlsZSBzeXN0ZW0gcGFyYW1ldGVycwogCiAgIDIJTW9kaWZ5aW5nIFN5c3RlbSBQYXJhbWV0ZXJzCi0gIDIuMQkvcHJvYy9zeXMvZnMgLSBGaWxlIHN5c3RlbSBkYXRhCi0gIDIuMgkvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgLSBNaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzCi0gIDIuMwkvcHJvYy9zeXMva2VybmVsIC0gZ2VuZXJhbCBrZXJuZWwgcGFyYW1ldGVycwotICAyLjQJL3Byb2Mvc3lzL3ZtIC0gVGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbQotICAyLjUJL3Byb2Mvc3lzL2RldiAtIERldmljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gIDIuNgkvcHJvYy9zeXMvc3VucnBjIC0gUmVtb3RlIHByb2NlZHVyZSBjYWxscwotICAyLjcJL3Byb2Mvc3lzL25ldCAtIE5ldHdvcmtpbmcgc3R1ZmYKLSAgMi44CS9wcm9jL3N5cy9uZXQvaXB2NCAtIElQVjQgc2V0dGluZ3MKLSAgMi45CUFwcGxldGFsawotICAyLjEwCUlQWAotICAyLjExCS9wcm9jL3N5cy9mcy9tcXVldWUgLSBQT1NJWCBtZXNzYWdlIHF1ZXVlcyBmaWxlc3lzdGVtCi0gIDIuMTIJL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQotICAyLjEzCS9wcm9jLzxwaWQ+L29vbV9zY29yZSAtIERpc3BsYXkgY3VycmVudCBvb20ta2lsbGVyIHNjb3JlCi0gIDIuMTQJL3Byb2MvPHBpZD4vaW8gLSBEaXNwbGF5IHRoZSBJTyBhY2NvdW50aW5nIGZpZWxkcwotICAyLjE1CS9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlciAtIENvcmUgZHVtcCBmaWx0ZXJpbmcgc2V0dGluZ3MKLSAgMi4xNgkvcHJvYy88cGlkPi9tb3VudGluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCBtb3VudHMKLSAgMi4xNwkvcHJvYy9zeXMvZnMvZXBvbGwgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBlcG9sbCBpbnRlcmZhY2UKKworICAzCVBlci1Qcm9jZXNzIFBhcmFtZXRlcnMKKyAgMy4xCS9wcm9jLzxwaWQ+L29vbV9hZGogLSBBZGp1c3QgdGhlIG9vbS1raWxsZXIgc2NvcmUKKyAgMy4yCS9wcm9jLzxwaWQ+L29vbV9zY29yZSAtIERpc3BsYXkgY3VycmVudCBvb20ta2lsbGVyIHNjb3JlCisgIDMuMwkvcHJvYy88cGlkPi9pbyAtIERpc3BsYXkgdGhlIElPIGFjY291bnRpbmcgZmllbGRzCisgIDMuNAkvcHJvYy88cGlkPi9jb3JlZHVtcF9maWx0ZXIgLSBDb3JlIGR1bXAgZmlsdGVyaW5nIHNldHRpbmdzCisgIDMuNQkvcHJvYy88cGlkPi9tb3VudGluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCBtb3VudHMKKwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFByZWZhY2UKQEAgLTk0MCwyNyArOTMzLDYgQEAKICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwogIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQotIHN0YXRzICAgICAgICAgICBjb250cm9scyB3aGV0aGVyIHRoZSBtdWx0aWJsb2NrIGFsbG9jYXRvciBzaG91bGQgc3RhcnQKLSAgICAgICAgICAgICAgICAgY29sbGVjdGluZyBzdGF0aXN0aWNzLCB3aGljaCBhcmUgc2hvd24gZHVyaW5nIHRoZSB1bm1vdW50Ci0gZ3JvdXBfcHJlYWxsb2MgIHRoZSBtdWx0aWJsb2NrIGFsbG9jYXRvciB3aWxsIHJvdW5kIHVwIGFsbG9jYXRpb24KLSAgICAgICAgICAgICAgICAgcmVxdWVzdHMgdG8gYSBtdWx0aXBsZSBvZiB0aGlzIHR1bmluZyBwYXJhbWV0ZXIgaWYgdGhlCi0gICAgICAgICAgICAgICAgIHN0cmlwZSBzaXplIGlzIG5vdCBzZXQgaW4gdGhlIGV4dDQgc3VwZXJibG9jawotIG1heF90b19zY2FuICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXh0ZW50cyB0aGUgbXVsdGlibG9jayBhbGxvY2F0b3IKLSAgICAgICAgICAgICAgICAgd2lsbCBzZWFyY2ggdG8gZmluZCB0aGUgYmVzdCBleHRlbnQKLSBtaW5fdG9fc2NhbiAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIGV4dGVudHMgdGhlIG11bHRpYmxvY2sgYWxsb2NhdG9yCi0gICAgICAgICAgICAgICAgIHdpbGwgc2VhcmNoIHRvIGZpbmQgdGhlIGJlc3QgZXh0ZW50Ci0gb3JkZXIyX3JlcSAgICAgIFR1bmluZyBwYXJhbWV0ZXIgd2hpY2ggY29udHJvbHMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgCi0gICAgICAgICAgICAgICAgIHJlcXVlc3RzIChhcyBhIHBvd2VyIG9mIDIpIHdoZXJlIHRoZSBidWRkeSBjYWNoZSBpcwotICAgICAgICAgICAgICAgICB1c2VkCi0gc3RyZWFtX3JlcSAgICAgIEZpbGVzIHdoaWNoIGhhdmUgZmV3ZXIgYmxvY2tzIHRoYW4gdGhpcyB0dW5hYmxlCi0gICAgICAgICAgICAgICAgIHBhcmFtZXRlciB3aWxsIGhhdmUgdGhlaXIgYmxvY2tzIGFsbG9jYXRlZCBvdXQgb2YgYQotICAgICAgICAgICAgICAgICBibG9jayBncm91cCBzcGVjaWZpYyBwcmVhbGxvY2F0aW9uIHBvb2wsIHNvIHRoYXQgc21hbGwKLSAgICAgICAgICAgICAgICAgZmlsZXMgYXJlIHBhY2tlZCBjbG9zZWx5IHRvZ2V0aGVyLiAgRWFjaCBsYXJnZSBmaWxlCi0gICAgICAgICAgICAgICAgIHdpbGwgaGF2ZSBpdHMgYmxvY2tzIGFsbG9jYXRlZCBvdXQgb2YgaXRzIG93biB1bmlxdWUKLSAgICAgICAgICAgICAgICAgcHJlYWxsb2NhdGlvbiBwb29sLgotaW5vZGVfcmVhZGFoZWFkICBUdW5pbmcgcGFyYW1ldGVyIHdoaWNoIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZgotICAgICAgICAgICAgICAgICBpbm9kZSB0YWJsZSBibG9ja3MgdGhhdCBleHQ0J3MgaW5vZGUgdGFibGUgcmVhZGFoZWFkCi0gICAgICAgICAgICAgICAgIGFsZ29yaXRobSB3aWxsIHByZS1yZWFkIGludG8gdGhlIGJ1ZmZlciBjYWNoZQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApAQCAtMTAxMSwxMDIxICs5ODMsMjQgQEAKIFRoaXMgY2hhcHRlciAgaXMgIGhlYXZpbHkgIGJhc2VkICBvbiB0aGUgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCBpbiB0aGUgcHJlIDIuMgoga2VybmVscywgYW5kIGJlY2FtZSBwYXJ0IG9mIGl0IGluIHZlcnNpb24gMi4yLjEgb2YgdGhlIExpbnV4IGtlcm5lbC4KIAotMi4xIC9wcm9jL3N5cy9mcyAtIEZpbGUgc3lzdGVtIGRhdGEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgc3ViZGlyZWN0b3J5ICBjb250YWlucyAgc3BlY2lmaWMgIGZpbGUgc3lzdGVtLCBmaWxlIGhhbmRsZSwgaW5vZGUsIGRlbnRyeQotYW5kIHF1b3RhIGluZm9ybWF0aW9uLgotCi1DdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvZnM6Ci0KLWRlbnRyeS1zdGF0ZQotLS0tLS0tLS0tLS0tCi0KLVN0YXR1cyBvZiAgdGhlICBkaXJlY3RvcnkgIGNhY2hlLiAgU2luY2UgIGRpcmVjdG9yeSAgZW50cmllcyAgYXJlICBkeW5hbWljYWxseQotYWxsb2NhdGVkIGFuZCAgZGVhbGxvY2F0ZWQsICB0aGlzICBmaWxlIGluZGljYXRlcyB0aGUgY3VycmVudCBzdGF0dXMuIEl0IGhvbGRzCi1zaXggdmFsdWVzLCBpbiB3aGljaCB0aGUgbGFzdCB0d28gYXJlIG5vdCB1c2VkIGFuZCBhcmUgYWx3YXlzIHplcm8uIFRoZSBvdGhlcnMKLWFyZSBsaXN0ZWQgaW4gdGFibGUgMi0xLgotCi0KLVRhYmxlIDItMTogU3RhdHVzIGZpbGVzIG9mIHRoZSBkaXJlY3RvcnkgY2FjaGUgCi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSBGaWxlICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBucl9kZW50cnkgIEFsbW9zdCBhbHdheXMgemVybyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBucl91bnVzZWQgIE51bWJlciBvZiB1bnVzZWQgY2FjaGUgZW50cmllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSBhZ2VfbGltaXQgIAotICAgICAgICAgICAgaW4gc2Vjb25kcyBhZnRlciB0aGUgZW50cnkgbWF5IGJlIHJlY2xhaW1lZCwgd2hlbiBtZW1vcnkgaXMgc2hvcnQgCi0gd2FudF9wYWdlcyBpbnRlcm5hbGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotZHF1b3QtbnIgYW5kIGRxdW90LW1heAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZmlsZSBkcXVvdC1tYXggc2hvd3MgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCBkaXNrIHF1b3RhIGVudHJpZXMuCi0KLVRoZSBmaWxlICBkcXVvdC1uciAgc2hvd3MgIHRoZSAgbnVtYmVyIG9mIGFsbG9jYXRlZCBkaXNrIHF1b3RhIGVudHJpZXMgYW5kIHRoZQotbnVtYmVyIG9mIGZyZWUgZGlzayBxdW90YSBlbnRyaWVzLgotCi1JZiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjYWNoZWQgZGlzayBxdW90YXMgaXMgdmVyeSBsb3cgYW5kIHlvdSBoYXZlIGEgbGFyZ2UKLW51bWJlciBvZiBzaW11bHRhbmVvdXMgc3lzdGVtIHVzZXJzLCB5b3UgbWlnaHQgd2FudCB0byByYWlzZSB0aGUgbGltaXQuCi0KLWZpbGUtbnIgYW5kIGZpbGUtbWF4Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUga2VybmVsICBhbGxvY2F0ZXMgZmlsZSBoYW5kbGVzIGR5bmFtaWNhbGx5LCBidXQgZG9lc24ndCBmcmVlIHRoZW0gYWdhaW4gYXQKLXRoaXMgdGltZS4KLQotVGhlIHZhbHVlICBpbiAgZmlsZS1tYXggIGRlbm90ZXMgIHRoZSAgbWF4aW11bSBudW1iZXIgb2YgZmlsZSBoYW5kbGVzIHRoYXQgdGhlCi1MaW51eCBrZXJuZWwgd2lsbCBhbGxvY2F0ZS4gV2hlbiB5b3UgZ2V0IGEgbG90IG9mIGVycm9yIG1lc3NhZ2VzIGFib3V0IHJ1bm5pbmcKLW91dCBvZiAgZmlsZSBoYW5kbGVzLCB5b3UgbWlnaHQgd2FudCB0byByYWlzZSB0aGlzIGxpbWl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcwotMTAlIG9mICBSQU0gaW4ga2lsb2J5dGVzLiAgVG8gIGNoYW5nZSBpdCwganVzdCAgd3JpdGUgdGhlIG5ldyBudW1iZXIgIGludG8gdGhlCi1maWxlOgotCi0gICMgY2F0IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKLSAgNDA5NiAKLSAgIyBlY2hvIDgxOTIgPiAvcHJvYy9zeXMvZnMvZmlsZS1tYXggCi0gICMgY2F0IC9wcm9jL3N5cy9mcy9maWxlLW1heCAKLSAgODE5MiAKLQotCi1UaGlzIG1ldGhvZCAgb2YgIHJldmlzaW9uICBpcyAgdXNlZnVsICBmb3IgIGFsbCBjdXN0b21pemFibGUgcGFyYW1ldGVycyBvZiB0aGUKLWtlcm5lbCAtIHNpbXBseSBlY2hvIHRoZSBuZXcgdmFsdWUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4KLQotSGlzdG9yaWNhbGx5LCB0aGUgdGhyZWUgdmFsdWVzIGluIGZpbGUtbnIgZGVub3RlZCB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBmaWxlCi1oYW5kbGVzLCAgdGhlIG51bWJlciBvZiAgYWxsb2NhdGVkIGJ1dCAgdW51c2VkIGZpbGUgIGhhbmRsZXMsIGFuZCAgdGhlIG1heGltdW0KLW51bWJlciBvZiBmaWxlIGhhbmRsZXMuIExpbnV4IDIuNiBhbHdheXMgIHJlcG9ydHMgMCBhcyB0aGUgbnVtYmVyIG9mIGZyZWUgZmlsZQotaGFuZGxlcyAtLSB0aGlzICBpcyBub3QgYW4gZXJyb3IsICBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlICBudW1iZXIgb2YgYWxsb2NhdGVkCi1maWxlIGhhbmRsZXMgZXhhY3RseSBtYXRjaGVzIHRoZSBudW1iZXIgb2YgdXNlZCBmaWxlIGhhbmRsZXMuCi0KLUF0dGVtcHRzIHRvICBhbGxvY2F0ZSBtb3JlICBmaWxlIGRlc2NyaXB0b3JzIHRoYW4gIGZpbGUtbWF4IGFyZSAgcmVwb3J0ZWQgd2l0aAotcHJpbnRrLCBsb29rIGZvciAiVkZTOiBmaWxlLW1heCBsaW1pdCA8bnVtYmVyPiByZWFjaGVkIi4KLQotaW5vZGUtc3RhdGUgYW5kIGlub2RlLW5yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGZpbGUgaW5vZGUtbnIgY29udGFpbnMgdGhlIGZpcnN0IHR3byBpdGVtcyBmcm9tIGlub2RlLXN0YXRlLCBzbyB3ZSdsbCBza2lwCi10byB0aGF0IGZpbGUuLi4KLQotaW5vZGUtc3RhdGUgY29udGFpbnMgIHR3byAgYWN0dWFsIG51bWJlcnMgYW5kIGZpdmUgZHVtbXkgdmFsdWVzLiBUaGUgbnVtYmVycwotYXJlIG5yX2lub2RlcyBhbmQgbnJfZnJlZV9pbm9kZXMgKGluIG9yZGVyIG9mIGFwcGVhcmFuY2UpLgotCi1ucl9pbm9kZXMKLX5+fn5+fn5+fgotCi1EZW5vdGVzIHRoZSAgbnVtYmVyICBvZiAgaW5vZGVzIHRoZSBzeXN0ZW0gaGFzIGFsbG9jYXRlZC4gVGhpcyBudW1iZXIgd2lsbAotZ3JvdyBhbmQgc2hyaW5rIGR5bmFtaWNhbGx5LgotCi1ucl9vcGVuCi0tLS0tLS0tCi0KLURlbm90ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGUtaGFuZGxlcyBhIHByb2Nlc3MgY2FuCi1hbGxvY2F0ZS4gRGVmYXVsdCB2YWx1ZSBpcyAxMDI0KjEwMjQgKDEwNDg1NzYpIHdoaWNoIHNob3VsZCBiZQotZW5vdWdoIGZvciBtb3N0IG1hY2hpbmVzLiBBY3R1YWwgbGltaXQgZGVwZW5kcyBvbiBSTElNSVRfTk9GSUxFCi1yZXNvdXJjZSBsaW1pdC4KLQotbnJfZnJlZV9pbm9kZXMKLS0tLS0tLS0tLS0tLS0tCi0KLVJlcHJlc2VudHMgdGhlICBudW1iZXIgb2YgZnJlZSBpbm9kZXMuIEllLiBUaGUgbnVtYmVyIG9mIGludXNlIGlub2RlcyBpcwotKG5yX2lub2RlcyAtIG5yX2ZyZWVfaW5vZGVzKS4KLQotYWlvLW5yIGFuZCBhaW8tbWF4LW5yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYWlvLW5yIGlzIHRoZSBydW5uaW5nIHRvdGFsIG9mIHRoZSBudW1iZXIgb2YgZXZlbnRzIHNwZWNpZmllZCBvbiB0aGUKLWlvX3NldHVwIHN5c3RlbSBjYWxsIGZvciBhbGwgY3VycmVudGx5IGFjdGl2ZSBhaW8gY29udGV4dHMuICBJZiBhaW8tbnIKLXJlYWNoZXMgYWlvLW1heC1uciB0aGVuIGlvX3NldHVwIHdpbGwgZmFpbCB3aXRoIEVBR0FJTi4gIE5vdGUgdGhhdAotcmFpc2luZyBhaW8tbWF4LW5yIGRvZXMgbm90IHJlc3VsdCBpbiB0aGUgcHJlLWFsbG9jYXRpb24gb3IgcmUtc2l6aW5nCi1vZiBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcy4KLQotMi4yIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAtIE1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJlc2lkZXMgdGhlc2UgIGZpbGVzLCB0aGVyZSBpcyB0aGUgc3ViZGlyZWN0b3J5IC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy4gVGhpcwotaGFuZGxlcyB0aGUga2VybmVsIHN1cHBvcnQgZm9yIG1pc2NlbGxhbmVvdXMgYmluYXJ5IGZvcm1hdHMuCi0KLUJpbmZtdF9taXNjIHByb3ZpZGVzICB0aGUgYWJpbGl0eSB0byByZWdpc3RlciBhZGRpdGlvbmFsIGJpbmFyeSBmb3JtYXRzIHRvIHRoZQotS2VybmVsIHdpdGhvdXQgIGNvbXBpbGluZyAgYW4gYWRkaXRpb25hbCBtb2R1bGUva2VybmVsLiBUaGVyZWZvcmUsIGJpbmZtdF9taXNjCi1uZWVkcyB0byAga25vdyBtYWdpYyBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcgb3IgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBvZiB0aGUKLWJpbmFyeS4KLQotSXQgd29ya3MgYnkgbWFpbnRhaW5pbmcgYSBsaW5rZWQgbGlzdCBvZiBzdHJ1Y3RzIHRoYXQgY29udGFpbiBhIGRlc2NyaXB0aW9uIG9mCi1hIGJpbmFyeSAgZm9ybWF0LCAgaW5jbHVkaW5nICBhICBtYWdpYyAgd2l0aCBzaXplIChvciB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uKSwKLW9mZnNldCBhbmQgIG1hc2ssICBhbmQgIHRoZSAgaW50ZXJwcmV0ZXIgbmFtZS4gT24gcmVxdWVzdCBpdCBpbnZva2VzIHRoZSBnaXZlbgotaW50ZXJwcmV0ZXIgd2l0aCAgdGhlICBvcmlnaW5hbCAgcHJvZ3JhbSAgYXMgIGFyZ3VtZW50LCAgYXMgIGJpbmZtdF9qYXZhICBhbmQKLWJpbmZtdF9lbTg2IGFuZCAgYmluZm10X216ICBkby4gIFNpbmNlIGJpbmZtdF9taXNjIGRvZXMgbm90IGRlZmluZSBhbnkgZGVmYXVsdAotYmluYXJ5LWZvcm1hdHMsIHlvdSBoYXZlIHRvIHJlZ2lzdGVyIGFuIGFkZGl0aW9uYWwgYmluYXJ5LWZvcm1hdC4KLQotVGhlcmUgYXJlIHR3byBnZW5lcmFsIGZpbGVzIGluIGJpbmZtdF9taXNjIGFuZCBvbmUgZmlsZSBwZXIgcmVnaXN0ZXJlZCBmb3JtYXQuCi1UaGUgdHdvIGdlbmVyYWwgZmlsZXMgYXJlIHJlZ2lzdGVyIGFuZCBzdGF0dXMuCi0KLVJlZ2lzdGVyaW5nIGEgbmV3IGJpbmFyeSBmb3JtYXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gcmVnaXN0ZXIgYSBuZXcgYmluYXJ5IGZvcm1hdCB5b3UgaGF2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZAotCi0gIGVjaG8gOm5hbWU6dHlwZTpvZmZzZXQ6bWFnaWM6bWFzazppbnRlcnByZXRlcjogPiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MvcmVnaXN0ZXIgCi0KLQotCi13aXRoIGFwcHJvcHJpYXRlICBuYW1lICh0aGUgbmFtZSBmb3IgdGhlIC9wcm9jLWRpciBlbnRyeSksIG9mZnNldCAoZGVmYXVsdHMgdG8KLTAsIGlmICBvbWl0dGVkKSwgIG1hZ2ljLCBtYXNrICh3aGljaCBjYW4gYmUgb21pdHRlZCwgZGVmYXVsdHMgdG8gYWxsIDB4ZmYpIGFuZAotbGFzdCBidXQgIG5vdCAgbGVhc3QsICB0aGUgIGludGVycHJldGVyIHRoYXQgaXMgdG8gYmUgaW52b2tlZCAoZm9yIGV4YW1wbGUgYW5kCi10ZXN0aW5nIC9iaW4vZWNobykuICBUeXBlICBjYW4gYmUgTSBmb3IgdXN1YWwgbWFnaWMgbWF0Y2hpbmcgb3IgRSBmb3IgZmlsZW5hbWUKLWV4dGVuc2lvbiBtYXRjaGluZyAoZ2l2ZSBleHRlbnNpb24gaW4gcGxhY2Ugb2YgbWFnaWMpLgotCi1DaGVjayBvciByZXNldCB0aGUgc3RhdHVzIG9mIHRoZSBiaW5hcnkgZm9ybWF0IGhhbmRsZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgIGRvIGEgY2F0IG9uIHRoZSBmaWxlIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9zdGF0dXMsIHlvdSB3aWxsIGdldCB0aGUKLWN1cnJlbnQgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKSBvZiBiaW5mbXRfbWlzYy4gQ2hhbmdlIHRoZSBzdGF0dXMgYnkgZWNob2luZwotMCAoZGlzYWJsZXMpICBvciAgMSAgKGVuYWJsZXMpICBvciAgLTEgIChjYXV0aW9uOiAgdGhpcyAgY2xlYXJzIGFsbCBwcmV2aW91c2x5Ci1yZWdpc3RlcmVkIGJpbmFyeSAgZm9ybWF0cykgIHRvIHN0YXR1cy4gRm9yIGV4YW1wbGUgZWNobyAwID4gc3RhdHVzIHRvIGRpc2FibGUKLWJpbmZtdF9taXNjICh0ZW1wb3JhcmlseSkuCi0KLVN0YXR1cyBvZiBhIHNpbmdsZSBoYW5kbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1FYWNoIHJlZ2lzdGVyZWQgIGhhbmRsZXIgaGFzIGFuIGVudHJ5IGluIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy4gVGhlc2UgZmlsZXMKLXBlcmZvcm0gdGhlICBzYW1lIGZ1bmN0aW9uIGFzIHN0YXR1cywgYnV0IHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGFjdHVhbAotYmluYXJ5IGZvcm1hdC4gIEJ5ICBjYXRpbmcgdGhpcyBmaWxlLCB5b3UgYWxzbyByZWNlaXZlIGFsbCByZWxhdGVkIGluZm9ybWF0aW9uCi1hYm91dCB0aGUgaW50ZXJwcmV0ZXIvbWFnaWMgb2YgdGhlIGJpbmZtdC4KLQotRXhhbXBsZSB1c2FnZSBvZiBiaW5mbXRfbWlzYyAoZW11bGF0ZSBiaW5mbXRfamF2YSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgY2QgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjICAKLSAgZWNobyAnOkphdmE6TTo6XHhjYVx4ZmVceGJhXHhiZTo6L3Vzci9sb2NhbC9qYXZhL2Jpbi9qYXZhd3JhcHBlcjonID4gcmVnaXN0ZXIgIAotICBlY2hvICc6SFRNTDpFOjpodG1sOjovdXNyL2xvY2FsL2phdmEvYmluL2FwcGxldHZpZXdlcjonID4gcmVnaXN0ZXIgIAotICBlY2hvICc6QXBwbGV0Ok06OjwhLS1hcHBsZXQ6Oi91c3IvbG9jYWwvamF2YS9iaW4vYXBwbGV0dmlld2VyOicgPiByZWdpc3RlciAKLSAgZWNobyAnOkRFWEU6TTo6XHgwZURFWDo6L3Vzci9iaW4vZG9zZXhlYzonID4gcmVnaXN0ZXIgCi0KLQotVGhlc2UgZm91ciAgbGluZXMgIGFkZCAgc3VwcG9ydCAgZm9yICBKYXZhICBleGVjdXRhYmxlcyBhbmQgSmF2YSBhcHBsZXRzIChsaWtlCi1iaW5mbXRfamF2YSwgYWRkaXRpb25hbGx5ICByZWNvZ25pemluZyB0aGUgLmh0bWwgZXh0ZW5zaW9uIHdpdGggbm8gbmVlZCB0byBwdXQKLTwhLS1hcHBsZXQ+IHRvICBldmVyeSAgYXBwbGV0ICBmaWxlKS4gIFlvdSAgaGF2ZSAgdG8gIGluc3RhbGwgIHRoZSBKREsgYW5kIHRoZQotc2hlbGwtc2NyaXB0IC91c3IvbG9jYWwvamF2YS9iaW4vamF2YXdyYXBwZXIgIHRvby4gIEl0ICB3b3JrcyAgYXJvdW5kICB0aGUKLWJyb2tlbm5lc3Mgb2YgIHRoZSBKYXZhIGZpbGVuYW1lIGhhbmRsaW5nLiBUbyBhZGQgYSBKYXZhIGJpbmFyeSwganVzdCBjcmVhdGUgYQotbGluayB0byB0aGUgY2xhc3MtZmlsZSBzb21ld2hlcmUgaW4gdGhlIHBhdGguCi0KLTIuMyAvcHJvYy9zeXMva2VybmVsIC0gZ2VuZXJhbCBrZXJuZWwgcGFyYW1ldGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgZGlyZWN0b3J5ICByZWZsZWN0cyAgZ2VuZXJhbCAga2VybmVsICBiZWhhdmlvcnMuIEFzIEkndmUgc2FpZCBiZWZvcmUsIHRoZQotY29udGVudHMgZGVwZW5kICBvbiAgeW91ciAgY29uZmlndXJhdGlvbi4gIEhlcmUgeW91J2xsIGZpbmQgdGhlIG1vc3QgaW1wb3J0YW50Ci1maWxlcywgYWxvbmcgd2l0aCBkZXNjcmlwdGlvbnMgb2Ygd2hhdCB0aGV5IG1lYW4gYW5kIGhvdyB0byB1c2UgdGhlbS4KLQotYWNjdAotLS0tLQotCi1UaGUgZmlsZSBjb250YWlucyB0aHJlZSB2YWx1ZXM7IGhpZ2h3YXRlciwgbG93d2F0ZXIsIGFuZCBmcmVxdWVuY3kuCi0KLUl0IGV4aXN0cyAgb25seSAgd2hlbiAgQlNELXN0eWxlICBwcm9jZXNzICBhY2NvdW50aW5nIGlzIGVuYWJsZWQuIFRoZXNlIHZhbHVlcwotY29udHJvbCBpdHMgYmVoYXZpb3IuIElmIHRoZSBmcmVlIHNwYWNlIG9uIHRoZSBmaWxlIHN5c3RlbSB3aGVyZSB0aGUgbG9nIGxpdmVzCi1nb2VzIGJlbG93ICBsb3d3YXRlciAgcGVyY2VudGFnZSwgIGFjY291bnRpbmcgIHN1c3BlbmRzLiAgSWYgIGl0ICBnb2VzICBhYm92ZQotaGlnaHdhdGVyIHBlcmNlbnRhZ2UsICBhY2NvdW50aW5nICByZXN1bWVzLiBGcmVxdWVuY3kgZGV0ZXJtaW5lcyBob3cgb2Z0ZW4geW91Ci1jaGVjayB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgKHZhbHVlIGlzIGluIHNlY29uZHMpLiBEZWZhdWx0IHNldHRpbmdzIGFyZTogNCwKLTIsIGFuZCAgMzAuICBUaGF0IGlzLCBzdXNwZW5kIGFjY291bnRpbmcgaWYgdGhlcmUgaXMgbGVzcyB0aGFuIDIgcGVyY2VudCBmcmVlOwotcmVzdW1lIGl0ICBpZiB3ZSBoYXZlIGEgdmFsdWUgb2YgMyBvciBtb3JlIHBlcmNlbnQ7IGNvbnNpZGVyIGluZm9ybWF0aW9uIGFib3V0Ci10aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgdmFsaWQgZm9yIDMwIHNlY29uZHMKLQotY3RybC1hbHQtZGVsCi0tLS0tLS0tLS0tLS0KLQotV2hlbiB0aGUgdmFsdWUgaW4gdGhpcyBmaWxlIGlzIDAsIGN0cmwtYWx0LWRlbCBpcyB0cmFwcGVkIGFuZCBzZW50IHRvIHRoZSBpbml0Ci1wcm9ncmFtIHRvICBoYW5kbGUgYSBncmFjZWZ1bCByZXN0YXJ0LiBIb3dldmVyLCB3aGVuIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYXQKLXplcm8sIExpbnV4J3MgIHJlYWN0aW9uICB0byAgdGhpcyBrZXkgY29tYmluYXRpb24gd2lsbCBiZSBhbiBpbW1lZGlhdGUgcmVib290LAotd2l0aG91dCBzeW5jaW5nIGl0cyBkaXJ0eSBidWZmZXJzLgotCi1bTk9URV0KLSAgICBXaGVuIGEgIHByb2dyYW0gIChsaWtlICBkb3NlbXUpICBoYXMgIHRoZSAga2V5Ym9hcmQgIGluICByYXcgIG1vZGUsICB0aGUKLSAgICBjdHJsLWFsdC1kZWwgaXMgIGludGVyY2VwdGVkICBieSAgdGhlICBwcm9ncmFtICBiZWZvcmUgaXQgZXZlciByZWFjaGVzIHRoZQotICAgIGtlcm5lbCB0dHkgIGxheWVyLCAgYW5kICBpdCBpcyB1cCB0byB0aGUgcHJvZ3JhbSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoCi0gICAgaXQuCi0KLWRvbWFpbm5hbWUgYW5kIGhvc3RuYW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVzZSBmaWxlcyAgY2FuICBiZSBjb250cm9sbGVkIHRvIHNldCB0aGUgTklTIGRvbWFpbm5hbWUgYW5kIGhvc3RuYW1lIG9mIHlvdXIKLWJveC4gRm9yIHRoZSBjbGFzc2ljIGRhcmtzdGFyLmZyb3Aub3JnIGEgc2ltcGxlOgotCi0gICMgZWNobyAiZGFya3N0YXIiID4gL3Byb2Mvc3lzL2tlcm5lbC9ob3N0bmFtZSAKLSAgIyBlY2hvICJmcm9wLm9yZyIgPiAvcHJvYy9zeXMva2VybmVsL2RvbWFpbm5hbWUgCi0KLQotd291bGQgc3VmZmljZSB0byBzZXQgeW91ciBob3N0bmFtZSBhbmQgTklTIGRvbWFpbm5hbWUuCi0KLW9zcmVsZWFzZSwgb3N0eXBlIGFuZCB2ZXJzaW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgbmFtZXMgbWFrZSBpdCBwcmV0dHkgb2J2aW91cyB3aGF0IHRoZXNlIGZpZWxkcyBjb250YWluOgotCi0gID4gY2F0IC9wcm9jL3N5cy9rZXJuZWwvb3NyZWxlYXNlIAotICAyLjIuMTIgCi0gICAKLSAgPiBjYXQgL3Byb2Mvc3lzL2tlcm5lbC9vc3R5cGUgCi0gIExpbnV4IAotICAgCi0gID4gY2F0IC9wcm9jL3N5cy9rZXJuZWwvdmVyc2lvbiAKLSAgIzQgRnJpIE9jdCAxIDEyOjQxOjE0IFBEVCAxOTk5IAotCi0KLVRoZSBmaWxlcyAgb3NyZWxlYXNlIGFuZCBvc3R5cGUgc2hvdWxkIGJlIGNsZWFyIGVub3VnaC4gVmVyc2lvbiBuZWVkcyBhIGxpdHRsZQotbW9yZSBjbGFyaWZpY2F0aW9uLiAgVGhlICAjNCBtZWFucyB0aGF0IHRoaXMgaXMgdGhlIDR0aCBrZXJuZWwgYnVpbHQgZnJvbSB0aGlzCi1zb3VyY2UgYmFzZSBhbmQgdGhlIGRhdGUgYWZ0ZXIgaXQgaW5kaWNhdGVzIHRoZSB0aW1lIHRoZSBrZXJuZWwgd2FzIGJ1aWx0LiBUaGUKLW9ubHkgd2F5IHRvIHR1bmUgdGhlc2UgdmFsdWVzIGlzIHRvIHJlYnVpbGQgdGhlIGtlcm5lbC4KLQotcGFuaWMKLS0tLS0tCi0KLVRoZSB2YWx1ZSAgaW4gIHRoaXMgIGZpbGUgIHJlcHJlc2VudHMgIHRoZSAgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGtlcm5lbCB3YWl0cwotYmVmb3JlIHJlYm9vdGluZyAgb24gIGEgIHBhbmljLiAgV2hlbiAgeW91ICB1c2UgIHRoZSAgc29mdHdhcmUgIHdhdGNoZG9nLCAgdGhlCi1yZWNvbW1lbmRlZCBzZXR0aW5nICBpcyAgNjAuIElmIHNldCB0byAwLCB0aGUgYXV0byByZWJvb3QgYWZ0ZXIgYSBrZXJuZWwgcGFuaWMKLWlzIGRpc2FibGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nLgotCi1wcmludGsKLS0tLS0tLQotCi1UaGUgZm91ciB2YWx1ZXMgaW4gcHJpbnRrIGRlbm90ZQotKiBjb25zb2xlX2xvZ2xldmVsLAotKiBkZWZhdWx0X21lc3NhZ2VfbG9nbGV2ZWwsCi0qIG1pbmltdW1fY29uc29sZV9sb2dsZXZlbCBhbmQKLSogZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsCi1yZXNwZWN0aXZlbHkuCi0KLVRoZXNlIHZhbHVlcyAgaW5mbHVlbmNlICBwcmludGsoKSAgYmVoYXZpb3IgIHdoZW4gIHByaW50aW5nICBvciAgbG9nZ2luZyBlcnJvcgotbWVzc2FnZXMsIHdoaWNoICBjb21lICBmcm9tICBpbnNpZGUgIHRoZSAga2VybmVsLiAgU2VlICBzeXNsb2coMikgIGZvciAgbW9yZQotaW5mb3JtYXRpb24gb24gdGhlIGRpZmZlcmVudCBsb2cgbGV2ZWxzLgotCi1jb25zb2xlX2xvZ2xldmVsCi0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lc3NhZ2VzIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGlzIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZS4KLQotZGVmYXVsdF9tZXNzYWdlX2xldmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWVzc2FnZXMgd2l0aG91dCBhbiBleHBsaWNpdCBwcmlvcml0eSB3aWxsIGJlIHByaW50ZWQgd2l0aCB0aGlzIHByaW9yaXR5LgotCi1taW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NaW5pbXVtIChoaWdoZXN0KSB2YWx1ZSB0byB3aGljaCB0aGUgY29uc29sZV9sb2dsZXZlbCBjYW4gYmUgc2V0LgotCi1kZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1EZWZhdWx0IHZhbHVlIGZvciBjb25zb2xlX2xvZ2xldmVsLgotCi1zZy1iaWctYnVmZgotLS0tLS0tLS0tLS0KLQotVGhpcyBmaWxlICBzaG93cyAgdGhlIHNpemUgb2YgdGhlIGdlbmVyaWMgU0NTSSAoc2cpIGJ1ZmZlci4gQXQgdGhpcyBwb2ludCwgeW91Ci1jYW4ndCB0dW5lICBpdCAgeWV0LCAgYnV0ICB5b3UgIGNhbiAgY2hhbmdlICBpdCAgYXQgIGNvbXBpbGUgIHRpbWUgIGJ5IGVkaXRpbmcKLWluY2x1ZGUvc2NzaS9zZy5oIGFuZCBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgU0dfQklHX0JVRkYuCi0KLUlmIHlvdSB1c2UgYSBzY2FubmVyIHdpdGggU0FORSAoU2Nhbm5lciBBY2Nlc3MgTm93IEVhc3kpIHlvdSBtaWdodCB3YW50IHRvIHNldAotdGhpcyB0byBhIGhpZ2hlciB2YWx1ZS4gUmVmZXIgdG8gdGhlIFNBTkUgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGlzc3VlLgotCi1tb2Rwcm9iZQotLS0tLS0tLS0KLQotVGhlIGxvY2F0aW9uICB3aGVyZSAgdGhlICBtb2Rwcm9iZSAgYmluYXJ5ICBpcyAgbG9jYXRlZC4gIFRoZSBrZXJuZWwgdXNlcyB0aGlzCi1wcm9ncmFtIHRvIGxvYWQgbW9kdWxlcyBvbiBkZW1hbmQuCi0KLXVua25vd25fbm1pX3BhbmljCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgdmFsdWUgaW4gdGhpcyBmaWxlIGFmZmVjdHMgYmVoYXZpb3Igb2YgaGFuZGxpbmcgTk1JLiBXaGVuIHRoZSB2YWx1ZSBpcwotbm9uLXplcm8sIHVua25vd24gTk1JIGlzIHRyYXBwZWQgYW5kIHRoZW4gcGFuaWMgb2NjdXJzLiBBdCB0aGF0IHRpbWUsIGtlcm5lbAotZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZCBvbiBjb25zb2xlLgotCi1OTUkgc3dpdGNoIHRoYXQgbW9zdCBJQTMyIHNlcnZlcnMgaGF2ZSBmaXJlcyB1bmtub3duIE5NSSB1cCwgZm9yIGV4YW1wbGUuCi1JZiBhIHN5c3RlbSBoYW5ncyB1cCwgdHJ5IHByZXNzaW5nIHRoZSBOTUkgc3dpdGNoLgotCi1wYW5pY19vbl91bnJlY292ZXJlZF9ubWkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgZGVmYXVsdCBMaW51eCBiZWhhdmlvdXIgb24gYW4gTk1JIG9mIGVpdGhlciBtZW1vcnkgb3IgdW5rbm93biBpcyB0byBjb250aW51ZQotb3BlcmF0aW9uLiBGb3IgbWFueSBlbnZpcm9ubWVudHMgc3VjaCBhcyBzY2llbnRpZmljIGNvbXB1dGluZyBpdCBpcyBwcmVmZXJhYmxlCi10aGF0IHRoZSBib3ggaXMgdGFrZW4gb3V0IGFuZCB0aGUgZXJyb3IgZGVhbHQgd2l0aCB0aGFuIGFuIHVuY29ycmVjdGVkCi1wYXJpdHkvRUNDIGVycm9yIGdldCBwcm9wb2dhdGVkLgotCi1BIHNtYWxsIG51bWJlciBvZiBzeXN0ZW1zIGRvIGdlbmVyYXRlIE5NSSdzIGZvciBiaXphcnJlIHJhbmRvbSByZWFzb25zIHN1Y2ggYXMKLXBvd2VyIG1hbmFnZW1lbnQgc28gdGhlIGRlZmF1bHQgaXMgb2ZmLiBUaGF0IHN5c2N0bCB3b3JrcyBsaWtlIHRoZSBleGlzdGluZwotcGFuaWMgY29udHJvbHMgYWxyZWFkeSBpbiB0aGF0IGRpcmVjdG9yeS4KLQotbm1pX3dhdGNoZG9nCi0tLS0tLS0tLS0tLS0KLQotRW5hYmxlcy9EaXNhYmxlcyB0aGUgTk1JIHdhdGNoZG9nIG9uIHg4NiBzeXN0ZW1zLiAgV2hlbiB0aGUgdmFsdWUgaXMgbm9uLXplcm8KLXRoZSBOTUkgd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgd2lsbCBjb250aW51b3VzbHkgdGVzdCBhbGwgb25saW5lIGNwdXMgdG8KLWRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBzdGlsbCBmdW5jdGlvbmluZyBwcm9wZXJseS4gQ3VycmVudGx5LAotcGFzc2luZyAibm1pX3dhdGNoZG9nPSIgcGFyYW1ldGVyIGF0IGJvb3QgdGltZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbgotdG8gd29yay4KLQotSWYgTEFQSUMgTk1JIHdhdGNoZG9nIG1ldGhvZCBpcyBpbiB1c2UgKG5taV93YXRjaGRvZz0yIGtlcm5lbCBwYXJhbWV0ZXIpLCB0aGUKLU5NSSB3YXRjaGRvZyBzaGFyZXMgcmVnaXN0ZXJzIHdpdGggb3Byb2ZpbGUuIEJ5IGRpc2FibGluZyB0aGUgTk1JIHdhdGNoZG9nLAotb3Byb2ZpbGUgbWF5IGhhdmUgbW9yZSByZWdpc3RlcnMgdG8gdXRpbGl6ZS4KLQotbXNnbW5pCi0tLS0tLS0KLQotTWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZSBpZHMgb24gdGhlIHN5c3RlbS4KLVRoaXMgdmFsdWUgc2NhbGVzIHRvIHRoZSBhbW91bnQgb2YgbG93bWVtLiBJdCBpcyBhdXRvbWF0aWNhbGx5IHJlY29tcHV0ZWQKLXVwb24gbWVtb3J5IGFkZC9yZW1vdmUgb3IgaXBjIG5hbWVzcGFjZSBjcmVhdGlvbi9yZW1vdmFsLgotV2hlbiBhIHZhbHVlIGlzIHdyaXR0ZW4gaW50byB0aGlzIGZpbGUsIG1zZ21uaSdzIHZhbHVlIGJlY29tZXMgZml4ZWQsIGkuZS4gaXQKLWlzIG5vdCByZWNvbXB1dGVkIGFueW1vcmUgd2hlbiBvbmUgb2YgdGhlIGFib3ZlIGV2ZW50cyBvY2N1cnMuCi1Vc2UgYXV0b19tc2dtbmkgdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3IuCi0KLWF1dG9fbXNnbW5pCi0tLS0tLS0tLS0tLQotCi1FbmFibGVzL0Rpc2FibGVzIGF1dG9tYXRpYyByZWNvbXB1dGluZyBvZiBtc2dtbmkgdXBvbiBtZW1vcnkgYWRkL3JlbW92ZSBvcgotdXBvbiBpcGMgbmFtZXNwYWNlIGNyZWF0aW9uL3JlbW92YWwgKHNlZSB0aGUgbXNnbW5pIGRlc2NyaXB0aW9uIGFib3ZlKS4KLUVjaG9pbmcgIjEiIGludG8gdGhpcyBmaWxlIGVuYWJsZXMgbXNnbW5pIGF1dG9tYXRpYyByZWNvbXB1dGluZy4KLUVjaG9pbmcgIjAiIHR1cm5zIGl0IG9mZi4KLWF1dG9fbXNnbW5pIGRlZmF1bHQgdmFsdWUgaXMgMS4KLQotCi0yLjQgL3Byb2Mvc3lzL3ZtIC0gVGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxlYXNlIHNlZTogRG9jdW1lbnRhdGlvbi9zeXNjdGxzL3ZtLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVzZQorUGxlYXNlIHNlZTogRG9jdW1lbnRhdGlvbi9zeXNjdGxzLyBkaXJlY3RvcnkgZm9yIGRlc2NyaXB0aW9ucyBvZiB0aGVzZQogZW50cmllcy4KIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTdW1tYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRhaW4gYXNwZWN0cyAgb2YgIGtlcm5lbCAgYmVoYXZpb3IgIGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lLCB3aXRob3V0IHRoZQorbmVlZCB0byAgcmVjb21waWxlICB0aGUga2VybmVsLCBvciBldmVuIHRvIHJlYm9vdCB0aGUgc3lzdGVtLiBUaGUgZmlsZXMgaW4gdGhlCisvcHJvYy9zeXMgdHJlZSAgY2FuICBub3Qgb25seSBiZSByZWFkLCBidXQgYWxzbyBtb2RpZmllZC4gWW91IGNhbiB1c2UgdGhlIGVjaG8KK2NvbW1hbmQgdG8gd3JpdGUgdmFsdWUgaW50byB0aGVzZSBmaWxlcywgdGhlcmVieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncworb2YgdGhlIGtlcm5lbC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0yLjUgL3Byb2Mvc3lzL2RldiAtIERldmljZSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NIQVBURVIgMzogUEVSLVBST0NFU1MgUEFSQU1FVEVSUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUN1cnJlbnRseSB0aGVyZSBpcyBvbmx5IHN1cHBvcnQgZm9yIENEUk9NIGRyaXZlcywgYW5kIGZvciB0aG9zZSwgdGhlcmUgaXMgb25seQotb25lIHJlYWQtb25seSAgZmlsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDRC1ST00gZHJpdmVzIGF0dGFjaGVkIHRvCi10aGUgc3lzdGVtOgotCi0gID5jYXQgL3Byb2Mvc3lzL2Rldi9jZHJvbS9pbmZvIAotICBDRC1ST00gaW5mb3JtYXRpb24sIElkOiBjZHJvbS5jIDIuNTUgMTk5OS8wNC8yNSAKLSAgIAotICBkcml2ZSBuYW1lOiAgICAgICAgICAgICBzcjAgICAgIGhkYiAKLSAgZHJpdmUgc3BlZWQ6ICAgICAgICAgICAgMzIgICAgICA0MCAKLSAgZHJpdmUgIyBvZiBzbG90czogICAgICAgMSAgICAgICAwIAotICBDYW4gY2xvc2UgdHJheTogICAgICAgICAxICAgICAgIDEgCi0gIENhbiBvcGVuIHRyYXk6ICAgICAgICAgIDEgICAgICAgMSAKLSAgQ2FuIGxvY2sgdHJheTogICAgICAgICAgMSAgICAgICAxIAotICBDYW4gY2hhbmdlIHNwZWVkOiAgICAgICAxICAgICAgIDEgCi0gIENhbiBzZWxlY3QgZGlzazogICAgICAgIDAgICAgICAgMSAKLSAgQ2FuIHJlYWQgbXVsdGlzZXNzaW9uOiAgMSAgICAgICAxIAotICBDYW4gcmVhZCBNQ046ICAgICAgICAgICAxICAgICAgIDEgCi0gIFJlcG9ydHMgbWVkaWEgY2hhbmdlZDogIDEgICAgICAgMSAKLSAgQ2FuIHBsYXkgYXVkaW86ICAgICAgICAgMSAgICAgICAxIAotCi0KLVlvdSBzZWUgdHdvIGRyaXZlcywgc3IwIGFuZCBoZGIsIGFsb25nIHdpdGggYSBsaXN0IG9mIHRoZWlyIGZlYXR1cmVzLgotCi0yLjYgL3Byb2Mvc3lzL3N1bnJwYyAtIFJlbW90ZSBwcm9jZWR1cmUgY2FsbHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRpcmVjdG9yeSAgY29udGFpbnMgZm91ciBmaWxlcywgd2hpY2ggZW5hYmxlIG9yIGRpc2FibGUgZGVidWdnaW5nIGZvciB0aGUKLVJQQyBmdW5jdGlvbnMgTkZTLCBORlMtZGFlbW9uLCBSUEMgYW5kIE5MTS4gVGhlIGRlZmF1bHQgdmFsdWVzIGFyZSAwLiBUaGV5IGNhbgotYmUgc2V0IHRvIG9uZSB0byB0dXJuIGRlYnVnZ2luZyBvbi4gKFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAgZm9yIGVhY2gpCi0KLTIuNyAvcHJvYy9zeXMvbmV0IC0gTmV0d29ya2luZyBzdHVmZgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBpbnRlcmZhY2UgIHRvICB0aGUgIG5ldHdvcmtpbmcgIHBhcnRzICBvZiAgdGhlICBrZXJuZWwgIGlzICBsb2NhdGVkICBpbgotL3Byb2Mvc3lzL25ldC4gVGFibGUgIDItMyAgc2hvd3MgYWxsIHBvc3NpYmxlIHN1YmRpcmVjdG9yaWVzLiBZb3UgbWF5IHNlZSBvbmx5Ci1zb21lIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB5b3VyIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uCi0KLQotVGFibGUgMi0zOiBTdWJkaXJlY3RvcmllcyBpbiAvcHJvYy9zeXMvbmV0IAotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gRGlyZWN0b3J5IENvbnRlbnQgICAgICAgICAgICAgRGlyZWN0b3J5ICBDb250ZW50ICAgICAgICAgICAgCi0gY29yZSAgICAgIEdlbmVyYWwgcGFyYW1ldGVyICAgYXBwbGV0YWxrICBBcHBsZXRhbGsgcHJvdG9jb2wgCi0gdW5peCAgICAgIFVuaXggZG9tYWluIHNvY2tldHMgbmV0cm9tICAgICBORVQvUk9NICAgICAgICAgICAgCi0gODAyICAgICAgIEU4MDIgcHJvdG9jb2wgICAgICAgYXgyNSAgICAgICBBWDI1ICAgICAgICAgICAgICAgCi0gZXRoZXJuZXQgIEV0aGVybmV0IHByb3RvY29sICAgcm9zZSAgICAgICBYLjI1IFBMUCBsYXllciAgICAgCi0gaXB2NCAgICAgIElQIHZlcnNpb24gNCAgICAgICAgeDI1ICAgICAgICBYLjI1IHByb3RvY29sICAgICAgCi0gaXB4ICAgICAgIElQWCAgICAgICAgICAgICAgICAgdG9rZW4tcmluZyBJQk0gdG9rZW4gcmluZyAgICAgCi0gYnJpZGdlICAgIEJyaWRnaW5nICAgICAgICAgICAgZGVjbmV0ICAgICBERUMgbmV0ICAgICAgICAgICAgCi0gaXB2NiAgICAgIElQIHZlcnNpb24gNiAgICAgICAgICAgICAgICAgICAKLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1XZSB3aWxsICBjb25jZW50cmF0ZSAgb24gSVAgbmV0d29ya2luZyBoZXJlLiBTaW5jZSBBWDE1LCBYLjI1LCBhbmQgREVDIE5ldCBhcmUKLW9ubHkgbWlub3IgcGxheWVycyBpbiB0aGUgTGludXggd29ybGQsIHdlJ2xsIHNraXAgdGhlbSBpbiB0aGlzIGNoYXB0ZXIuIFlvdSdsbAotZmluZCBzb21lICBzaG9ydCAgaW5mbyBvbiBBcHBsZXRhbGsgYW5kIElQWCBmdXJ0aGVyIG9uIGluIHRoaXMgY2hhcHRlci4gUmV2aWV3Ci10aGUgb25saW5lICBkb2N1bWVudGF0aW9uICBhbmQgdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiB0aGUKLXBhcmFtZXRlcnMgZm9yICB0aG9zZSAgcHJvdG9jb2xzLiAgSW4gIHRoaXMgIHNlY3Rpb24gIHdlJ2xsICBkaXNjdXNzICB0aGUKLXN1YmRpcmVjdG9yaWVzIHByaW50ZWQgIGluICBib2xkIGxldHRlcnMgaW4gdGhlIHRhYmxlIGFib3ZlLiBBcyBkZWZhdWx0IHZhbHVlcwotYXJlIHN1aXRhYmxlIGZvciBtb3N0IG5lZWRzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoYW5nZSB0aGVzZSB2YWx1ZXMuCi0KLS9wcm9jL3N5cy9uZXQvY29yZSAtIE5ldHdvcmsgY29yZSBvcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ybWVtX2RlZmF1bHQKLS0tLS0tLS0tLS0tLQotCi1UaGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMuCi0KLXJtZW1fbWF4Ci0tLS0tLS0tLQotCi1UaGUgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KLQotd21lbV9kZWZhdWx0Ci0tLS0tLS0tLS0tLS0KLQotVGhlIGRlZmF1bHQgc2V0dGluZyAoaW4gYnl0ZXMpIG9mIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIuCi0KLXdtZW1fbWF4Ci0tLS0tLS0tLQotCi1UaGUgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KLQotbWVzc2FnZV9idXJzdCBhbmQgbWVzc2FnZV9jb3N0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlc2UgcGFyYW1ldGVycyAgYXJlIHVzZWQgdG8gbGltaXQgdGhlIHdhcm5pbmcgbWVzc2FnZXMgd3JpdHRlbiB0byB0aGUga2VybmVsCi1sb2cgZnJvbSAgdGhlICBuZXR3b3JraW5nICBjb2RlLiAgVGhleSAgZW5mb3JjZSAgYSAgcmF0ZSAgbGltaXQgIHRvICBtYWtlICBhCi1kZW5pYWwtb2Ytc2VydmljZSBhdHRhY2sgIGltcG9zc2libGUuIEEgaGlnaGVyIG1lc3NhZ2VfY29zdCBmYWN0b3IsIHJlc3VsdHMgaW4KLWZld2VyIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSB3cml0dGVuLiBNZXNzYWdlX2J1cnN0IGNvbnRyb2xzIHdoZW4gbWVzc2FnZXMgd2lsbAotYmUgZHJvcHBlZC4gIFRoZSAgZGVmYXVsdCAgc2V0dGluZ3MgIGxpbWl0ICB3YXJuaW5nIG1lc3NhZ2VzIHRvIG9uZSBldmVyeSBmaXZlCi1zZWNvbmRzLgotCi13YXJuaW5ncwotLS0tLS0tLS0KLQotVGhpcyBjb250cm9scyBjb25zb2xlIG1lc3NhZ2VzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gb2NjdXIgYmVjYXVzZQotb2YgcHJvYmxlbXMgb24gdGhlIG5ldHdvcmsgbGlrZSBkdXBsaWNhdGUgYWRkcmVzcyBvciBiYWQgY2hlY2tzdW1zLiBOb3JtYWxseSwKLXRoaXMgc2hvdWxkIGJlIGVuYWJsZWQsIGJ1dCBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0cyB0aGUgbWVzc2FnZXMgY2FuIGJlCi1kaXNhYmxlZC4KLQotbmV0ZGV2X2J1ZGdldAotLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRha2VuIGZyb20gYWxsIGludGVyZmFjZXMgaW4gb25lIHBvbGxpbmcgY3ljbGUgKE5BUEkKLXBvbGwpLiBJbiBvbmUgcG9sbGluZyBjeWNsZSBpbnRlcmZhY2VzIHdoaWNoIGFyZSByZWdpc3RlcmVkIHRvIHBvbGxpbmcgYXJlCi1wcm9iZWQgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFRoZSBsaW1pdCBvZiBwYWNrZXRzIGluIG9uZSBzdWNoIHByb2JlIGNhbiBiZQotc2V0IHBlci1kZXZpY2UgdmlhIHN5c2ZzIGNsYXNzL25ldC88ZGV2aWNlPi93ZWlnaHQgLgotCi1uZXRkZXZfbWF4X2JhY2tsb2cKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIG51bWJlciAgb2YgIHBhY2tldHMsICBxdWV1ZWQgIG9uICB0aGUgIElOUFVUICBzaWRlLCB3aGVuIHRoZSBpbnRlcmZhY2UKLXJlY2VpdmVzIHBhY2tldHMgZmFzdGVyIHRoYW4ga2VybmVsIGNhbiBwcm9jZXNzIHRoZW0uCi0KLW9wdG1lbV9tYXgKLS0tLS0tLS0tLS0KLQotTWF4aW11bSBhbmNpbGxhcnkgYnVmZmVyIHNpemUgYWxsb3dlZCBwZXIgc29ja2V0LiBBbmNpbGxhcnkgZGF0YSBpcyBhIHNlcXVlbmNlCi1vZiBzdHJ1Y3QgY21zZ2hkciBzdHJ1Y3R1cmVzIHdpdGggYXBwZW5kZWQgZGF0YS4KLQotL3Byb2Mvc3lzL25ldC91bml4IC0gUGFyYW1ldGVycyBmb3IgVW5peCBkb21haW4gc29ja2V0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVyZSBhcmUgIG9ubHkgIHR3byAgZmlsZXMgIGluIHRoaXMgc3ViZGlyZWN0b3J5LiBUaGV5IGNvbnRyb2wgdGhlIGRlbGF5cyBmb3IKLWRlbGV0aW5nIGFuZCBkZXN0cm95aW5nIHNvY2tldCBkZXNjcmlwdG9ycy4KLQotMi44IC9wcm9jL3N5cy9uZXQvaXB2NCAtIElQVjQgc2V0dGluZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlQIHZlcnNpb24gIDQgIGlzICBzdGlsbCB0aGUgbW9zdCB1c2VkIHByb3RvY29sIGluIFVuaXggbmV0d29ya2luZy4gSXQgd2lsbCBiZQotcmVwbGFjZWQgYnkgIElQIHZlcnNpb24gNiBpbiB0aGUgbmV4dCBjb3VwbGUgb2YgeWVhcnMsIGJ1dCBmb3IgdGhlIG1vbWVudCBpdCdzCi10aGUgZGUgIGZhY3RvICBzdGFuZGFyZCAgZm9yICB0aGUgIGludGVybmV0ICBhbmQgIGlzICB1c2VkICBpbiBtb3N0IG5ldHdvcmtpbmcKLWVudmlyb25tZW50cyBhcm91bmQgIHRoZSAgd29ybGQuICBCZWNhdXNlICBvZiB0aGUgaW1wb3J0YW5jZSBvZiB0aGlzIHByb3RvY29sLAotd2UnbGwgaGF2ZSBhIGRlZXBlciBsb29rIGludG8gdGhlIHN1YnRyZWUgY29udHJvbGxpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBJUHY0Ci1zdWJzeXN0ZW0gb2YgdGhlIExpbnV4IGtlcm5lbC4KLQotTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW50cmllcyBpbiAvcHJvYy9zeXMvbmV0L2lwdjQuCi0KLUlDTVAgc2V0dGluZ3MKLS0tLS0tLS0tLS0tLS0KLQotaWNtcF9lY2hvX2lnbm9yZV9hbGwgYW5kIGljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UdXJuIG9uICgxKSBvciBvZmYgKDApLCBpZiB0aGUga2VybmVsIHNob3VsZCBpZ25vcmUgYWxsIElDTVAgRUNITyByZXF1ZXN0cywgb3IKLWp1c3QgdGhvc2UgdG8gYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzLgotCi1QbGVhc2Ugbm90ZSB0aGF0IGlmIHlvdSBhY2NlcHQgSUNNUCBlY2hvIHJlcXVlc3RzIHdpdGggYSBicm9hZGNhc3QvbXVsdGlcLWNhc3QKLWRlc3RpbmF0aW9uIGFkZHJlc3MgIHlvdXIgIG5ldHdvcmsgIG1heSAgYmUgIHVzZWQgYXMgYW4gZXhwbG9kZXIgZm9yIGRlbmlhbCBvZgotc2VydmljZSBwYWNrZXQgZmxvb2RpbmcgYXR0YWNrcyB0byBvdGhlciBob3N0cy4KLQotaWNtcF9kZXN0dW5yZWFjaF9yYXRlLCBpY21wX2VjaG9yZXBseV9yYXRlLCBpY21wX3BhcmFtcHJvYl9yYXRlIGFuZCBpY21wX3RpbWVleGVlZF9yYXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2V0cyBsaW1pdHMgIGZvciAgc2VuZGluZyAgSUNNUCAgcGFja2V0cyAgdG8gc3BlY2lmaWMgdGFyZ2V0cy4gQSB2YWx1ZSBvZiB6ZXJvCi1kaXNhYmxlcyBhbGwgIGxpbWl0aW5nLiAgQW55ICBwb3NpdGl2ZSAgdmFsdWUgc2V0cyB0aGUgbWF4aW11bSBwYWNrYWdlIHJhdGUgaW4KLWh1bmRyZWR0aCBvZiBhIHNlY29uZCAob24gSW50ZWwgc3lzdGVtcykuCi0KLUlQIHNldHRpbmdzCi0tLS0tLS0tLS0tLQotCi1pcF9hdXRvY29uZmlnCi0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgZmlsZSBjb250YWlucyB0aGUgbnVtYmVyIG9uZSBpZiB0aGUgaG9zdCByZWNlaXZlZCBpdHMgSVAgY29uZmlndXJhdGlvbiBieQotUkFSUCwgQk9PVFAsIERIQ1Agb3IgYSBzaW1pbGFyIG1lY2hhbmlzbS4gT3RoZXJ3aXNlIGl0IGlzIHplcm8uCi0KLWlwX2RlZmF1bHRfdHRsCi0tLS0tLS0tLS0tLS0tLQotCi1UVEwgKFRpbWUgIFRvICBMaXZlKSBmb3IgSVB2NCBpbnRlcmZhY2VzLiBUaGlzIGlzIHNpbXBseSB0aGUgbWF4aW11bSBudW1iZXIgb2YKLWhvcHMgYSBwYWNrZXQgbWF5IHRyYXZlbC4KLQotaXBfZHluYWRkcgotLS0tLS0tLS0tLQotCi1FbmFibGUgZHluYW1pYyAgc29ja2V0ICBhZGRyZXNzIHJld3JpdGluZyBvbiBpbnRlcmZhY2UgYWRkcmVzcyBjaGFuZ2UuIFRoaXMgaXMKLXVzZWZ1bCBmb3IgZGlhbHVwIGludGVyZmFjZSB3aXRoIGNoYW5naW5nIElQIGFkZHJlc3Nlcy4KLQotaXBfZm9yd2FyZAotLS0tLS0tLS0tLQotCi1FbmFibGUgb3IgIGRpc2FibGUgZm9yd2FyZGluZyBvZiBJUCBwYWNrYWdlcyBiZXR3ZWVuIGludGVyZmFjZXMuIENoYW5naW5nIHRoaXMKLXZhbHVlIHJlc2V0cyAgYWxsIG90aGVyIHBhcmFtZXRlcnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuIFRoZXkgZGlmZmVyIGlmIHRoZQota2VybmVsIGlzIGNvbmZpZ3VyZWQgYXMgaG9zdCBvciByb3V0ZXIuCi0KLWlwX2xvY2FsX3BvcnRfcmFuZ2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUmFuZ2Ugb2YgIHBvcnRzICB1c2VkICBieSAgVENQICBhbmQgVURQIHRvIGNob29zZSB0aGUgbG9jYWwgcG9ydC4gQ29udGFpbnMgdHdvCi1udW1iZXJzLCB0aGUgIGZpcnN0ICBudW1iZXIgIGlzIHRoZSBsb3dlc3QgcG9ydCwgdGhlIHNlY29uZCBudW1iZXIgdGhlIGhpZ2hlc3QKLWxvY2FsIHBvcnQuICBEZWZhdWx0ICBpcyAgMTAyNC00OTk5LiAgU2hvdWxkICBiZSAgY2hhbmdlZCAgdG8gIDMyNzY4LTYxMDAwIGZvcgotaGlnaC11c2FnZSBzeXN0ZW1zLgotCi1pcF9ub19wbXR1X2Rpc2MKLS0tLS0tLS0tLS0tLS0tLQotCi1HbG9iYWwgc3dpdGNoICB0byAgdHVybiAgcGF0aCAgTVRVICBkaXNjb3Zlcnkgb2ZmLiBJdCBjYW4gYWxzbyBiZSBzZXQgb24gYSBwZXIKLXNvY2tldCBiYXNpcyBieSB0aGUgYXBwbGljYXRpb25zIG9yIG9uIGEgcGVyIHJvdXRlIGJhc2lzLgotCi1pcF9tYXNxX2RlYnVnCi0tLS0tLS0tLS0tLS0tCi0KLUVuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBvZiBJUCBtYXNxdWVyYWRpbmcuCi0KLUlQIGZyYWdtZW50YXRpb24gc2V0dGluZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaXBmcmFnX2hpZ2hfdHJhc2ggYW5kIGlwZnJhZ19sb3dfdHJhc2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gbWVtb3J5ICB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIGlwZnJhZ19oaWdoX3RocmVzaCBieXRlcwotb2YgbWVtb3J5ICBpcyAgYWxsb2NhdGVkICBmb3IgIHRoaXMgIHB1cnBvc2UsICB0aGUgIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzCi1wYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoIGlzIHJlYWNoZWQuCi0KLWlwZnJhZ190aW1lCi0tLS0tLS0tLS0tLQotCi1UaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCi0KLVRDUCBzZXR0aW5ncwotLS0tLS0tLS0tLS0tCi0KLXRjcF9lY24KLS0tLS0tLS0KLQotVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSB1c2Ugb2YgdGhlIEVDTiBiaXQgaW4gdGhlIElQdjQgaGVhZGVycy4gVGhpcyBpcyBhIG5ldwotZmVhdHVyZSBhYm91dCBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiwgYnV0IHNvbWUgcm91dGVycyBhbmQgZmlyZXdhbGxzCi1ibG9jayB0cmFmZmljIHRoYXQgaGFzIHRoaXMgYml0IHNldCwgc28gaXQgY291bGQgYmUgbmVjZXNzYXJ5IHRvIGVjaG8gMCB0bwotL3Byb2Mvc3lzL25ldC9pcHY0L3RjcF9lY24gaWYgeW91IHdhbnQgdG8gdGFsayB0byB0aGVzZSBzaXRlcy4gRm9yIG1vcmUgaW5mbwoteW91IGNvdWxkIHJlYWQgUkZDMjQ4MS4KLQotdGNwX3JldHJhbnNfY29sbGFwc2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJ1Zy10by1idWcgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgYnJva2VuIHByaW50ZXJzLiBPbiByZXRyYW5zbWl0LCB0cnkgdG8gc2VuZAotbGFyZ2VyIHBhY2tldHMgdG8gd29yayBhcm91bmQgYnVncyBpbiBjZXJ0YWluIFRDUCBzdGFja3MuIENhbiBiZSB0dXJuZWQgb2ZmIGJ5Ci1zZXR0aW5nIGl0IHRvIHplcm8uCi0KLXRjcF9rZWVwYWxpdmVfcHJvYmVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1OdW1iZXIgb2YgIGtlZXAgIGFsaXZlICBwcm9iZXMgIFRDUCAgc2VuZHMgIG91dCwgIHVudGlsICBpdCAgZGVjaWRlcyAgdGhhdCB0aGUKLWNvbm5lY3Rpb24gaXMgYnJva2VuLgotCi10Y3Bfa2VlcGFsaXZlX3RpbWUKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ib3cgb2Z0ZW4gIFRDUCAgc2VuZHMgb3V0IGtlZXAgYWxpdmUgbWVzc2FnZXMsIHdoZW4ga2VlcCBhbGl2ZSBpcyBlbmFibGVkLiBUaGUKLWRlZmF1bHQgaXMgMiBob3Vycy4KLQotdGNwX3N5bl9yZXRyaWVzCi0tLS0tLS0tLS0tLS0tLS0KLQotTnVtYmVyIG9mICB0aW1lcyAgaW5pdGlhbCAgU1lOcyAgZm9yICBhICBUQ1AgIGNvbm5lY3Rpb24gIGF0dGVtcHQgIHdpbGwgIGJlCi1yZXRyYW5zbWl0dGVkLiBTaG91bGQgIG5vdCAgYmUgIGhpZ2hlciAgdGhhbiAyNTUuIFRoaXMgaXMgb25seSB0aGUgdGltZW91dCBmb3IKLW91dGdvaW5nIGNvbm5lY3Rpb25zLCAgZm9yICBpbmNvbWluZyAgY29ubmVjdGlvbnMgdGhlIG51bWJlciBvZiByZXRyYW5zbWl0cyBpcwotZGVmaW5lZCBieSB0Y3BfcmV0cmllczEuCi0KLXRjcF9zYWNrCi0tLS0tLS0tLQotCi1FbmFibGUgc2VsZWN0IGFja25vd2xlZGdtZW50cyBhZnRlciBSRkMyMDE4LgotCi10Y3BfdGltZXN0YW1wcwotLS0tLS0tLS0tLS0tLS0KLQotRW5hYmxlIHRpbWVzdGFtcHMgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgotCi10Y3Bfc3RkdXJnCi0tLS0tLS0tLS0tCi0KLUVuYWJsZSB0aGUgIHN0cmljdCAgUkZDNzkzIGludGVycHJldGF0aW9uIG9mIHRoZSBUQ1AgdXJnZW50IHBvaW50ZXIgZmllbGQuIFRoZQotZGVmYXVsdCBpcyAgdG8gIHVzZSAgdGhlICBCU0QgIGNvbXBhdGlibGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHVyZ2VudCBwb2ludGVyCi1wb2ludGluZyB0byB0aGUgZmlyc3QgYnl0ZSBhZnRlciB0aGUgdXJnZW50IGRhdGEuIFRoZSBSRkM3OTMgaW50ZXJwcmV0YXRpb24gaXMKLXRvIGhhdmUgIGl0ICBwb2ludCAgdG8gIHRoZSBsYXN0IGJ5dGUgb2YgdXJnZW50IGRhdGEuIEVuYWJsaW5nIHRoaXMgb3B0aW9uIG1heQotbGVhZCB0byBpbnRlcm9wZXJhYmlsaXR5IHByb2JsZW1zLiBEaXNhYmxlZCBieSBkZWZhdWx0LgotCi10Y3Bfc3luY29va2llcwotLS0tLS0tLS0tLS0tLS0KLQotT25seSB2YWxpZCAgd2hlbiAgdGhlICBrZXJuZWwgIHdhcyAgY29tcGlsZWQgIHdpdGggQ09ORklHX1NZTkNPT0tJRVMuIFNlbmQgb3V0Ci1zeW5jb29raWVzIHdoZW4gIHRoZSAgc3luIGJhY2tsb2cgcXVldWUgb2YgYSBzb2NrZXQgb3ZlcmZsb3dzLiBUaGlzIGlzIHRvIHdhcmQKLW9mZiB0aGUgY29tbW9uICdzeW4gZmxvb2QgYXR0YWNrJy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4KLQotTm90ZSB0aGF0ICB0aGUgIGNvbmNlcHQgIG9mIGEgc29ja2V0IGJhY2tsb2cgaXMgYWJhbmRvbmVkLiBUaGlzIG1lYW5zIHRoZSBwZWVyCi1tYXkgbm90ICByZWNlaXZlICByZWxpYWJsZSAgZXJyb3IgIG1lc3NhZ2VzICBmcm9tICBhbiAgb3ZlciBsb2FkZWQgc2VydmVyIHdpdGgKLXN5bmNvb2tpZXMgZW5hYmxlZC4KLQotdGNwX3dpbmRvd19zY2FsaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRW5hYmxlIHdpbmRvdyBzY2FsaW5nIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KLQotdGNwX2Zpbl90aW1lb3V0Ci0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGxlbmd0aCAgb2YgIHRpbWUgIGluICBzZWNvbmRzICBpdCAgdGFrZXMgdG8gcmVjZWl2ZSBhIGZpbmFsIEZJTiBiZWZvcmUgdGhlCi1zb2NrZXQgaXMgIGFsd2F5cyAgY2xvc2VkLiAgVGhpcyAgaXMgIHN0cmljdGx5ICBhICB2aW9sYXRpb24gIG9mICB0aGUgIFRDUAotc3BlY2lmaWNhdGlvbiwgYnV0IHJlcXVpcmVkIHRvIHByZXZlbnQgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrcy4KLQotdGNwX21heF9rYV9wcm9iZXMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUluZGljYXRlcyBob3cgIG1hbnkgIGtlZXAgYWxpdmUgcHJvYmVzIGFyZSBzZW50IHBlciBzbG93IHRpbWVyIHJ1bi4gU2hvdWxkIG5vdAotYmUgc2V0IHRvbyBoaWdoIHRvIHByZXZlbnQgYnVyc3RzLgotCi10Y3BfbWF4X3N5bl9iYWNrbG9nCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxlbmd0aCBvZiAgdGhlIHBlciBzb2NrZXQgYmFja2xvZyBxdWV1ZS4gU2luY2UgTGludXggMi4yIHRoZSBiYWNrbG9nIHNwZWNpZmllZAotaW4gbGlzdGVuKDIpICBvbmx5ICBzcGVjaWZpZXMgIHRoZSAgbGVuZ3RoICBvZiAgdGhlICBiYWNrbG9nICBxdWV1ZSBvZiBhbHJlYWR5Ci1lc3RhYmxpc2hlZCBzb2NrZXRzLiBXaGVuIG1vcmUgY29ubmVjdGlvbiByZXF1ZXN0cyBhcnJpdmUgTGludXggc3RhcnRzIHRvIGRyb3AKLXBhY2tldHMuIFdoZW4gIHN5bmNvb2tpZXMgIGFyZSAgZW5hYmxlZCB0aGUgcGFja2V0cyBhcmUgc3RpbGwgYW5zd2VyZWQgYW5kIHRoZQotbWF4aW11bSBxdWV1ZSBpcyBlZmZlY3RpdmVseSBpZ25vcmVkLgotCi10Y3BfcmV0cmllczEKLS0tLS0tLS0tLS0tLQotCi1EZWZpbmVzIGhvdyAgb2Z0ZW4gIGFuICBhbnN3ZXIgIHRvICBhICBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGlzIHJldHJhbnNtaXR0ZWQKLWJlZm9yZSBnaXZpbmcgdXAuCi0KLXRjcF9yZXRyaWVzMgotLS0tLS0tLS0tLS0tCi0KLURlZmluZXMgaG93IG9mdGVuIGEgVENQIHBhY2tldCBpcyByZXRyYW5zbWl0dGVkIGJlZm9yZSBnaXZpbmcgdXAuCi0KLUludGVyZmFjZSBzcGVjaWZpYyBzZXR0aW5ncwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUluIHRoZSBkaXJlY3RvcnkgL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYgeW91J2xsIGZpbmQgb25lIHN1YmRpcmVjdG9yeSBmb3IgZWFjaAotaW50ZXJmYWNlIHRoZSAgc3lzdGVtICBrbm93cyBhYm91dCBhbmQgb25lIGRpcmVjdG9yeSBjYWxscyBhbGwuIENoYW5nZXMgaW4gdGhlCi1hbGwgc3ViZGlyZWN0b3J5ICBhZmZlY3QgIGFsbCAgaW50ZXJmYWNlcywgIHdoZXJlYXMgIGNoYW5nZXMgIGluICB0aGUgIG90aGVyCi1zdWJkaXJlY3RvcmllcyBhZmZlY3QgIG9ubHkgIG9uZSAgaW50ZXJmYWNlLiAgQWxsICBkaXJlY3RvcmllcyAgaGF2ZSAgdGhlIHNhbWUKLWVudHJpZXM6Ci0KLWFjY2VwdF9yZWRpcmVjdHMKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBzd2l0Y2ggIGRlY2lkZXMgIGlmIHRoZSBrZXJuZWwgYWNjZXB0cyBJQ01QIHJlZGlyZWN0IG1lc3NhZ2VzIG9yIG5vdC4gVGhlCi1kZWZhdWx0IGlzICd5ZXMnIGlmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZCBmb3IgYSByZWd1bGFyIGhvc3QgYW5kICdubycgZm9yIGEKLXJvdXRlciBjb25maWd1cmF0aW9uLgotCi1hY2NlcHRfc291cmNlX3JvdXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNob3VsZCBzb3VyY2UgIHJvdXRlZCAgcGFja2FnZXMgIGJlICBhY2NlcHRlZCAgb3IgIGRlY2xpbmVkLiAgVGhlICBkZWZhdWx0ICBpcwotZGVwZW5kZW50IG9uICB0aGUgIGtlcm5lbCAgY29uZmlndXJhdGlvbi4gIEl0J3MgJ3llcycgZm9yIHJvdXRlcnMgYW5kICdubycgZm9yCi1ob3N0cy4KLQotYm9vdHBfcmVsYXkKLX5+fn5+fn5+fn5+Ci0KLUFjY2VwdCBwYWNrZXRzICB3aXRoIHNvdXJjZSBhZGRyZXNzIDAuYi5jLmQgd2l0aCBkZXN0aW5hdGlvbnMgbm90IHRvIHRoaXMgaG9zdAotYXMgbG9jYWwgb25lcy4gSXQgaXMgc3VwcG9zZWQgdGhhdCBhIEJPT1RQIHJlbGF5IGRhZW1vbiB3aWxsIGNhdGNoIGFuZCBmb3J3YXJkCi1zdWNoIHBhY2tldHMuCi0KLVRoZSBkZWZhdWx0ICBpcyAgMCwgIHNpbmNlIHRoaXMgZmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQgeWV0IChrZXJuZWwgdmVyc2lvbgotMi4yLjEyKS4KLQotZm9yd2FyZGluZwotLS0tLS0tLS0tLQotCi1FbmFibGUgb3IgZGlzYWJsZSBJUCBmb3J3YXJkaW5nIG9uIHRoaXMgaW50ZXJmYWNlLgotCi1sb2dfbWFydGlhbnMKLS0tLS0tLS0tLS0tLQotCi1Mb2cgcGFja2V0cyB3aXRoIHNvdXJjZSBhZGRyZXNzZXMgd2l0aCBubyBrbm93biByb3V0ZSB0byBrZXJuZWwgbG9nLgotCi1tY19mb3J3YXJkaW5nCi0tLS0tLS0tLS0tLS0tCi0KLURvIG11bHRpY2FzdCByb3V0aW5nLiBUaGUga2VybmVsIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggQ09ORklHX01ST1VURSBhbmQgYQotbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgotCi1wcm94eV9hcnAKLS0tLS0tLS0tLQotCi1Eb2VzICgxKSBvciBkb2VzIG5vdCAoMCkgcGVyZm9ybSBwcm94eSBBUlAuCi0KLXJwX2ZpbHRlcgotLS0tLS0tLS0tCi0KLUludGVnZXIgdmFsdWUgZGV0ZXJtaW5lcyBpZiBhIHNvdXJjZSB2YWxpZGF0aW9uIHNob3VsZCBiZSBtYWRlLiAxIG1lYW5zIHllcywgMAotbWVhbnMgbm8uICBEaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgbG9jYWwvYnJvYWRjYXN0IGFkZHJlc3Mgc3Bvb2ZpbmcgaXMgYWx3YXlzCi1vbi4KLQotSWYgeW91ICBzZXQgdGhpcyB0byAxIG9uIGEgcm91dGVyIHRoYXQgaXMgdGhlIG9ubHkgY29ubmVjdGlvbiBmb3IgYSBuZXR3b3JrIHRvCi10aGUgbmV0LCAgaXQgIHdpbGwgIHByZXZlbnQgIHNwb29maW5nICBhdHRhY2tzICBhZ2FpbnN0IHlvdXIgaW50ZXJuYWwgbmV0d29ya3MKLShleHRlcm5hbCBhZGRyZXNzZXMgIGNhbiAgc3RpbGwgIGJlICBzcG9vZmVkKSwgd2l0aG91dCB0aGUgbmVlZCBmb3IgYWRkaXRpb25hbAotZmlyZXdhbGwgcnVsZXMuCi0KLXNlY3VyZV9yZWRpcmVjdHMKLS0tLS0tLS0tLS0tLS0tLS0KLQotQWNjZXB0IElDTVAgIHJlZGlyZWN0ICBtZXNzYWdlcyAgb25seSAgZm9yIGdhdGV3YXlzLCBsaXN0ZWQgaW4gZGVmYXVsdCBnYXRld2F5Ci1saXN0LiBFbmFibGVkIGJ5IGRlZmF1bHQuCi0KLXNoYXJlZF9tZWRpYQotLS0tLS0tLS0tLS0tCi0KLUlmIGl0ICBpcyAgbm90ICBzZXQgIHRoZSBrZXJuZWwgZG9lcyBub3QgYXNzdW1lIHRoYXQgZGlmZmVyZW50IHN1Ym5ldHMgb24gdGhpcwotZGV2aWNlIGNhbiBjb21tdW5pY2F0ZSBkaXJlY3RseS4gRGVmYXVsdCBzZXR0aW5nIGlzICd5ZXMnLgotCi1zZW5kX3JlZGlyZWN0cwotLS0tLS0tLS0tLS0tLS0KLQotRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNlbmQgSUNNUCByZWRpcmVjdHMgdG8gb3RoZXIgaG9zdHMuCi0KLVJvdXRpbmcgc2V0dGluZ3MKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGRpcmVjdG9yeSAgL3Byb2Mvc3lzL25ldC9pcHY0L3JvdXRlICBjb250YWlucyAgc2V2ZXJhbCAgZmlsZSAgdG8gIGNvbnRyb2wKLXJvdXRpbmcgaXNzdWVzLgotCi1lcnJvcl9idXJzdCBhbmQgZXJyb3JfY29zdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlc2UgIHBhcmFtZXRlcnMgIGFyZSB1c2VkIHRvIGxpbWl0IGhvdyBtYW55IElDTVAgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgdG8gCi1zZW5kICBmcm9tICB0aGUgIGhvc3QgIGluIHF1ZXN0aW9uLiBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIG1lc3NhZ2VzIGFyZSAKLXNlbnQgIHdoZW4gIHdlICBjYW5ub3QgcmVhY2ggIHRoZSBuZXh0IGhvcCB3aGlsZSB0cnlpbmcgdG8gdHJhbnNtaXQgYSBwYWNrZXQuIAotSXQgIHdpbGwgYWxzbyBwcmludCBzb21lIGVycm9yIG1lc3NhZ2VzIHRvIGtlcm5lbCBsb2dzIGlmIHNvbWVvbmUgaXMgaWdub3JpbmcgCi1vdXIgICBJQ01QICByZWRpcmVjdHMuICBUaGUgIGhpZ2hlciAgdGhlICBlcnJvcl9jb3N0ICBmYWN0b3IgIGlzLCAgdGhlICBmZXdlciAKLWRlc3RpbmF0aW9uICB1bnJlYWNoYWJsZSAgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgbGV0IHRocm91Z2guIEVycm9yX2J1cnN0IAotY29udHJvbHMgIHdoZW4gIGRlc3RpbmF0aW9uICB1bnJlYWNoYWJsZSAgbWVzc2FnZXMgYW5kIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUKLWRyb3BwZWQuIFRoZSBkZWZhdWx0IHNldHRpbmdzIGxpbWl0IHdhcm5pbmcgbWVzc2FnZXMgdG8gZml2ZSBldmVyeSBzZWNvbmQuCi0KLWZsdXNoCi0tLS0tLQotCi1Xcml0aW5nIHRvIHRoaXMgZmlsZSByZXN1bHRzIGluIGEgZmx1c2ggb2YgdGhlIHJvdXRpbmcgY2FjaGUuCi0KLWdjX2VsYXN0aWNpdHksIGdjX2ludGVydmFsLCBnY19taW5faW50ZXJ2YWxfbXMsIGdjX3RpbWVvdXQsIGdjX3RocmVzaAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVZhbHVlcyB0byAgY29udHJvbCAgdGhlICBmcmVxdWVuY3kgIGFuZCAgYmVoYXZpb3IgIG9mICB0aGUgIGdhcmJhZ2UgY29sbGVjdGlvbgotYWxnb3JpdGhtIGZvciB0aGUgcm91dGluZyBjYWNoZS4gZ2NfbWluX2ludGVydmFsIGlzIGRlcHJlY2F0ZWQgYW5kIHJlcGxhY2VkCi1ieSBnY19taW5faW50ZXJ2YWxfbXMuCi0KLQotbWF4X3NpemUKLS0tLS0tLS0tCi0KLU1heGltdW0gc2l6ZSAgb2YgIHRoZSByb3V0aW5nIGNhY2hlLiBPbGQgZW50cmllcyB3aWxsIGJlIHB1cmdlZCBvbmNlIHRoZSBjYWNoZQotcmVhY2hlZCBoYXMgdGhpcyBzaXplLgotCi1yZWRpcmVjdF9sb2FkLCByZWRpcmVjdF9udW1iZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1GYWN0b3JzIHdoaWNoICBkZXRlcm1pbmUgIGlmICBtb3JlIElDUE0gcmVkaXJlY3RzIHNob3VsZCBiZSBzZW50IHRvIGEgc3BlY2lmaWMKLWhvc3QuIE5vICByZWRpcmVjdHMgIHdpbGwgYmUgc2VudCBvbmNlIHRoZSBsb2FkIGxpbWl0IG9yIHRoZSBtYXhpbXVtIG51bWJlciBvZgotcmVkaXJlY3RzIGhhcyBiZWVuIHJlYWNoZWQuCi0KLXJlZGlyZWN0X3NpbGVuY2UKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGltZW91dCBmb3IgcmVkaXJlY3RzLiBBZnRlciB0aGlzIHBlcmlvZCByZWRpcmVjdHMgd2lsbCBiZSBzZW50IGFnYWluLCBldmVuIGlmCi10aGlzIGhhcyBiZWVuIHN0b3BwZWQsIGJlY2F1c2UgdGhlIGxvYWQgb3IgbnVtYmVyIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQuCi0KLU5ldHdvcmsgTmVpZ2hib3IgaGFuZGxpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU2V0dGluZ3MgYWJvdXQgaG93IHRvIGhhbmRsZSBjb25uZWN0aW9ucyB3aXRoIGRpcmVjdCBuZWlnaGJvcnMgKG5vZGVzIGF0dGFjaGVkCi10byB0aGUgc2FtZSBsaW5rKSBjYW4gYmUgZm91bmQgaW4gdGhlIGRpcmVjdG9yeSAvcHJvYy9zeXMvbmV0L2lwdjQvbmVpZ2guCi0KLUFzIHdlICBzYXcgIGl0ICBpbiAgdGhlICBjb25mIGRpcmVjdG9yeSwgdGhlcmUgaXMgYSBkZWZhdWx0IHN1YmRpcmVjdG9yeSB3aGljaAotaG9sZHMgdGhlICBkZWZhdWx0ICB2YWx1ZXMsIGFuZCBvbmUgZGlyZWN0b3J5IGZvciBlYWNoIGludGVyZmFjZS4gVGhlIGNvbnRlbnRzCi1vZiB0aGUgIGRpcmVjdG9yaWVzICBhcmUgaWRlbnRpY2FsLCB3aXRoIHRoZSBzaW5nbGUgZXhjZXB0aW9uIHRoYXQgdGhlIGRlZmF1bHQKLXNldHRpbmdzIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zIHRvIHNldCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFyYW1ldGVycy4KLQotSW4gdGhlIGludGVyZmFjZSBkaXJlY3RvcmllcyB5b3UnbGwgZmluZCB0aGUgZm9sbG93aW5nIGVudHJpZXM6Ci0KLWJhc2VfcmVhY2hhYmxlX3RpbWUsIGJhc2VfcmVhY2hhYmxlX3RpbWVfbXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQSBiYXNlICB2YWx1ZSAgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSByYW5kb20gcmVhY2hhYmxlIHRpbWUgdmFsdWUgYXMgc3BlY2lmaWVkCi1pbiBSRkMyNDYxLgotCi1FeHByZXNzaW9uIG9mIGJhc2VfcmVhY2hhYmxlX3RpbWUsIHdoaWNoIGlzIGRlcHJlY2F0ZWQsIGlzIGluIHNlY29uZHMuCi1FeHByZXNzaW9uIG9mIGJhc2VfcmVhY2hhYmxlX3RpbWVfbXMgaXMgaW4gbWlsbGlzZWNvbmRzLgotCi1yZXRyYW5zX3RpbWUsIHJldHJhbnNfdGltZV9tcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHRpbWUgYmV0d2VlbiByZXRyYW5zbWl0dGVkIE5laWdoYm9yIFNvbGljaXRhdGlvbiBtZXNzYWdlcy4KLVVzZWQgZm9yIGFkZHJlc3MgcmVzb2x1dGlvbiBhbmQgdG8gZGV0ZXJtaW5lIGlmIGEgbmVpZ2hib3IgaXMKLXVucmVhY2hhYmxlLgotCi1FeHByZXNzaW9uIG9mIHJldHJhbnNfdGltZSwgd2hpY2ggaXMgZGVwcmVjYXRlZCwgaXMgaW4gMS8xMDAgc2Vjb25kcyAoZm9yCi1JUHY0KSBvciBpbiBqaWZmaWVzIChmb3IgSVB2NikuCi1FeHByZXNzaW9uIG9mIHJldHJhbnNfdGltZV9tcyBpcyBpbiBtaWxsaXNlY29uZHMuCi0KLXVucmVzX3FsZW4KLS0tLS0tLS0tLS0KLQotTWF4aW11bSBxdWV1ZSAgbGVuZ3RoICBmb3IgYSBwZW5kaW5nIGFycCByZXF1ZXN0IC0gdGhlIG51bWJlciBvZiBwYWNrZXRzIHdoaWNoCi1hcmUgYWNjZXB0ZWQgZnJvbSBvdGhlciBsYXllcnMgd2hpbGUgdGhlIEFSUCBhZGRyZXNzIGlzIHN0aWxsIHJlc29sdmVkLgotCi1hbnljYXN0X2RlbGF5Ci0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gZm9yICByYW5kb20gIGRlbGF5ICBvZiAgYW5zd2VycyAgdG8gIG5laWdoYm9yIHNvbGljaXRhdGlvbiBtZXNzYWdlcyBpbgotamlmZmllcyAoMS8xMDAgIHNlYykuIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKExpbnV4IGRvZXMgbm90IGhhdmUgYW55Y2FzdCBzdXBwb3J0Ci15ZXQpLgotCi11Y2FzdF9zb2xpY2l0Ci0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgZm9yIHVuaWNhc3Qgc29saWNpdGF0aW9uLgotCi1tY2FzdF9zb2xpY2l0Ci0tLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMgZm9yIG11bHRpY2FzdCBzb2xpY2l0YXRpb24uCi0KLWRlbGF5X2ZpcnN0X3Byb2JlX3RpbWUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRGVsYXkgZm9yICB0aGUgIGZpcnN0ICB0aW1lICBwcm9iZSAgaWYgIHRoZSAgbmVpZ2hib3IgIGlzICByZWFjaGFibGUuICAoc2VlCi1nY19zdGFsZV90aW1lKQotCi1sb2NrdGltZQotLS0tLS0tLS0KLQotQW4gQVJQL25laWdoYm9yICBlbnRyeSAgaXMgb25seSByZXBsYWNlZCB3aXRoIGEgbmV3IG9uZSBpZiB0aGUgb2xkIGlzIGF0IGxlYXN0Ci1sb2NrdGltZSBvbGQuIFRoaXMgcHJldmVudHMgQVJQIGNhY2hlIHRocmFzaGluZy4KLQotcHJveHlfZGVsYXkKLS0tLS0tLS0tLS0tCi0KLU1heGltdW0gdGltZSAgKHJlYWwgIHRpbWUgaXMgcmFuZG9tIFswLi5wcm94eXRpbWVdKSBiZWZvcmUgYW5zd2VyaW5nIHRvIGFuIEFSUAotcmVxdWVzdCBmb3IgIHdoaWNoICB3ZSBoYXZlIGFuIHByb3h5IEFSUCBlbnRyeS4gSW4gc29tZSBjYXNlcywgdGhpcyBpcyB1c2VkIHRvCi1wcmV2ZW50IG5ldHdvcmsgZmxvb2RpbmcuCi0KLXByb3h5X3FsZW4KLS0tLS0tLS0tLS0KLQotTWF4aW11bSBxdWV1ZSBsZW5ndGggb2YgdGhlIGRlbGF5ZWQgcHJveHkgYXJwIHRpbWVyLiAoc2VlIHByb3h5X2RlbGF5KS4KLQotYXBwX3NvbGljaXQKLS0tLS0tLS0tLS0KLQotRGV0ZXJtaW5lcyB0aGUgIG51bWJlciBvZiByZXF1ZXN0cyB0byBzZW5kIHRvIHRoZSB1c2VyIGxldmVsIEFSUCBkYWVtb24uIFVzZSAwCi10byB0dXJuIG9mZi4KLQotZ2Nfc3RhbGVfdGltZQotLS0tLS0tLS0tLS0tLQotCi1EZXRlcm1pbmVzIGhvdyAgb2Z0ZW4gIHRvICBjaGVjayAgZm9yIHN0YWxlIEFSUCBlbnRyaWVzLiBBZnRlciBhbiBBUlAgZW50cnkgaXMKLXN0YWxlIGl0ICB3aWxsICBiZSByZXNvbHZlZCBhZ2FpbiAod2hpY2ggaXMgdXNlZnVsIHdoZW4gYW4gSVAgYWRkcmVzcyBtaWdyYXRlcwotdG8gYW5vdGhlciAgbWFjaGluZSkuICBXaGVuICB1Y2FzdF9zb2xpY2l0IGlzIGdyZWF0ZXIgdGhhbiAwIGl0IGZpcnN0IHRyaWVzIHRvCi1zZW5kIGFuICBBUlAgIHBhY2tldCAgZGlyZWN0bHkgIHRvICB0aGUgIGtub3duICBob3N0ICBXaGVuICB0aGF0ICBmYWlscyAgYW5kCi1tY2FzdF9zb2xpY2l0IGlzIGdyZWF0ZXIgdGhhbiAwLCBhbiBBUlAgcmVxdWVzdCBpcyBicm9hZGNhc3RlZC4KLQotMi45IEFwcGxldGFsawotLS0tLS0tLS0tLS0tLQotCi1UaGUgL3Byb2Mvc3lzL25ldC9hcHBsZXRhbGsgIGRpcmVjdG9yeSAgaG9sZHMgdGhlIEFwcGxldGFsayBjb25maWd1cmF0aW9uIGRhdGEKLXdoZW4gQXBwbGV0YWxrIGlzIGxvYWRlZC4gVGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIGFyZToKLQotYWFycC1leHBpcnktdGltZQotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYW1vdW50ICBvZiAgdGltZSAgd2Uga2VlcCBhbiBBUlAgZW50cnkgYmVmb3JlIGV4cGlyaW5nIGl0LiBVc2VkIHRvIGFnZSBvdXQKLW9sZCBob3N0cy4KLQotYWFycC1yZXNvbHZlLXRpbWUKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBhbW91bnQgb2YgdGltZSB3ZSB3aWxsIHNwZW5kIHRyeWluZyB0byByZXNvbHZlIGFuIEFwcGxldGFsayBhZGRyZXNzLgotCi1hYXJwLXJldHJhbnNtaXQtbGltaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgbnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgcmV0cmFuc21pdCBhIHF1ZXJ5IGJlZm9yZSBnaXZpbmcgdXAuCi0KLWFhcnAtdGljay10aW1lCi0tLS0tLS0tLS0tLS0tLQotCi1Db250cm9scyB0aGUgcmF0ZSBhdCB3aGljaCBleHBpcmVzIGFyZSBjaGVja2VkLgotCi1UaGUgZGlyZWN0b3J5ICAvcHJvYy9uZXQvYXBwbGV0YWxrICBob2xkcyB0aGUgbGlzdCBvZiBhY3RpdmUgQXBwbGV0YWxrIHNvY2tldHMKLW9uIGEgbWFjaGluZS4KLQotVGhlIGZpZWxkcyAgaW5kaWNhdGUgIHRoZSBERFAgdHlwZSwgdGhlIGxvY2FsIGFkZHJlc3MgKGluIG5ldHdvcms6bm9kZSBmb3JtYXQpCi10aGUgcmVtb3RlICBhZGRyZXNzLCAgdGhlICBzaXplIG9mIHRoZSB0cmFuc21pdCBwZW5kaW5nIHF1ZXVlLCB0aGUgc2l6ZSBvZiB0aGUKLXJlY2VpdmVkIHF1ZXVlICAoYnl0ZXMgd2FpdGluZyBmb3IgYXBwbGljYXRpb25zIHRvIHJlYWQpIHRoZSBzdGF0ZSBhbmQgdGhlIHVpZAotb3duaW5nIHRoZSBzb2NrZXQuCi0KLS9wcm9jL25ldC9hdGFsa19pZmFjZSBsaXN0cyAgYWxsICB0aGUgIGludGVyZmFjZXMgIGNvbmZpZ3VyZWQgZm9yIGFwcGxldGFsay5JdAotc2hvd3MgdGhlICBuYW1lICBvZiB0aGUgaW50ZXJmYWNlLCBpdHMgQXBwbGV0YWxrIGFkZHJlc3MsIHRoZSBuZXR3b3JrIHJhbmdlIG9uCi10aGF0IGFkZHJlc3MgIChvciAgbmV0d29yayBudW1iZXIgZm9yIHBoYXNlIDEgbmV0d29ya3MpLCBhbmQgdGhlIHN0YXR1cyBvZiB0aGUKLWludGVyZmFjZS4KLQotL3Byb2MvbmV0L2F0YWxrX3JvdXRlIGxpc3RzICBlYWNoICBrbm93biAgbmV0d29yayAgcm91dGUuICBJdCBsaXN0cyB0aGUgdGFyZ2V0Ci0obmV0d29yaykgdGhhdCB0aGUgcm91dGUgbGVhZHMgdG8sIHRoZSByb3V0ZXIgKG1heSBiZSBkaXJlY3RseSBjb25uZWN0ZWQpLCB0aGUKLXJvdXRlIGZsYWdzLCBhbmQgdGhlIGRldmljZSB0aGUgcm91dGUgaXMgdXNpbmcuCi0KLTIuMTAgSVBYCi0tLS0tLS0tLQotCi1UaGUgSVBYIHByb3RvY29sIGhhcyBubyB0dW5hYmxlIHZhbHVlcyBpbiBwcm9jL3N5cy9uZXQuCi0KLVRoZSBJUFggIHByb3RvY29sICBkb2VzLCAgaG93ZXZlciwgIHByb3ZpZGUgIHByb2MvbmV0L2lweC4gVGhpcyBsaXN0cyBlYWNoIElQWAotc29ja2V0IGdpdmluZyAgdGhlICBsb2NhbCAgYW5kICByZW1vdGUgIGFkZHJlc3NlcyAgaW4gIE5vdmVsbCAgZm9ybWF0ICh0aGF0IGlzCi1uZXR3b3JrOm5vZGU6cG9ydCkuIEluICBhY2NvcmRhbmNlICB3aXRoICB0aGUgIHN0cmFuZ2UgIE5vdmVsbCAgdHJhZGl0aW9uLAotZXZlcnl0aGluZyBidXQgdGhlIHBvcnQgaXMgaW4gaGV4LiBOb3RfQ29ubmVjdGVkIGlzIGRpc3BsYXllZCBmb3Igc29ja2V0cyB0aGF0Ci1hcmUgbm90ICB0aWVkIHRvIGEgc3BlY2lmaWMgcmVtb3RlIGFkZHJlc3MuIFRoZSBUeCBhbmQgUnggcXVldWUgc2l6ZXMgaW5kaWNhdGUKLXRoZSBudW1iZXIgIG9mICBieXRlcyAgcGVuZGluZyAgZm9yICB0cmFuc21pc3Npb24gIGFuZCAgcmVjZXB0aW9uLiAgVGhlICBzdGF0ZQotaW5kaWNhdGVzIHRoZSAgc3RhdGUgIHRoZSAgc29ja2V0ICBpcyAgaW4gYW5kIHRoZSB1aWQgaXMgdGhlIG93bmluZyB1aWQgb2YgdGhlCi1zb2NrZXQuCi0KLVRoZSAvcHJvYy9uZXQvaXB4X2ludGVyZmFjZSAgZmlsZSBsaXN0cyBhbGwgSVBYIGludGVyZmFjZXMuIEZvciBlYWNoIGludGVyZmFjZQotaXQgZ2l2ZXMgIHRoZSBuZXR3b3JrIG51bWJlciwgdGhlIG5vZGUgbnVtYmVyLCBhbmQgaW5kaWNhdGVzIGlmIHRoZSBuZXR3b3JrIGlzCi10aGUgcHJpbWFyeSAgbmV0d29yay4gIEl0ICBhbHNvICBpbmRpY2F0ZXMgIHdoaWNoICBkZXZpY2UgIGl0ICBpcyBib3VuZCB0byAob3IKLUludGVybmFsIGZvciAgaW50ZXJuYWwgIG5ldHdvcmtzKSAgYW5kICB0aGUgIEZyYW1lICBUeXBlIGlmIGFwcHJvcHJpYXRlLiBMaW51eAotc3VwcG9ydHMgODAyLjMsICA4MDIuMiwgIDgwMi4yICBTTkFQICBhbmQgRElYIChCbHVlIEJvb2spIGV0aGVybmV0IGZyYW1pbmcgZm9yCi1JUFguCi0KLVRoZSAvcHJvYy9uZXQvaXB4X3JvdXRlICB0YWJsZSAgaG9sZHMgIGEgbGlzdCBvZiBJUFggcm91dGVzLiBGb3IgZWFjaCByb3V0ZSBpdAotZ2l2ZXMgdGhlICBkZXN0aW5hdGlvbiAgbmV0d29yaywgdGhlIHJvdXRlciBub2RlIChvciBEaXJlY3RseSkgYW5kIHRoZSBuZXR3b3JrCi1hZGRyZXNzIG9mIHRoZSByb3V0ZXIgKG9yIENvbm5lY3RlZCkgZm9yIGludGVybmFsIG5ldHdvcmtzLgotCi0yLjExIC9wcm9jL3N5cy9mcy9tcXVldWUgLSBQT1NJWCBtZXNzYWdlIHF1ZXVlcyBmaWxlc3lzdGVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSAibXF1ZXVlIiAgZmlsZXN5c3RlbSBwcm92aWRlcyAgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgZmVhdHVyZXMgdG8gZW5hYmxlIHRoZQotY3JlYXRpb24gb2YgYSAgdXNlciBzcGFjZSAgbGlicmFyeSB0aGF0ICBpbXBsZW1lbnRzICB0aGUgIFBPU0lYIG1lc3NhZ2UgcXVldWVzCi1BUEkgKGFzIG5vdGVkIGJ5IHRoZSAgTVNHIHRhZyBpbiB0aGUgIFBPU0lYIDEwMDMuMS0yMDAxIHZlcnNpb24gIG9mIHRoZSBTeXN0ZW0KLUludGVyZmFjZXMgc3BlY2lmaWNhdGlvbi4pCi0KLVRoZSAibXF1ZXVlIiBmaWxlc3lzdGVtIGNvbnRhaW5zIHZhbHVlcyBmb3IgZGV0ZXJtaW5pbmcvc2V0dGluZyAgdGhlIGFtb3VudCBvZgotcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgotCi0vcHJvYy9zeXMvZnMvbXF1ZXVlL3F1ZXVlc19tYXggaXMgYSByZWFkL3dyaXRlICBmaWxlIGZvciAgc2V0dGluZy9nZXR0aW5nICB0aGUKLW1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2UgcXVldWVzIGFsbG93ZWQgb24gdGhlIHN5c3RlbS4KLQotL3Byb2Mvc3lzL2ZzL21xdWV1ZS9tc2dfbWF4ICBpcyAgYSAgcmVhZC93cml0ZSBmaWxlICBmb3IgIHNldHRpbmcvZ2V0dGluZyAgdGhlCi1tYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlcyBpbiBhIHF1ZXVlIHZhbHVlLiAgSW4gZmFjdCBpdCBpcyB0aGUgbGltaXRpbmcgdmFsdWUKLWZvciBhbm90aGVyICh1c2VyKSBsaW1pdCB3aGljaCBpcyBzZXQgaW4gbXFfb3BlbiBpbnZvY2F0aW9uLiBUaGlzIGF0dHJpYnV0ZSBvZgotYSBxdWV1ZSBtdXN0IGJlIGxlc3Mgb3IgZXF1YWwgdGhlbiBtc2dfbWF4LgotCi0vcHJvYy9zeXMvZnMvbXF1ZXVlL21zZ3NpemVfbWF4IGlzICBhIHJlYWQvd3JpdGUgIGZpbGUgZm9yIHNldHRpbmcvZ2V0dGluZyB0aGUKLW1heGltdW0gIG1lc3NhZ2Ugc2l6ZSB2YWx1ZSAoaXQgaXMgZXZlcnkgIG1lc3NhZ2UgcXVldWUncyBhdHRyaWJ1dGUgc2V0IGR1cmluZwotaXRzIGNyZWF0aW9uKS4KLQotMi4xMiAvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCiszLjEgL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgZmlsZSBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIHNjb3JlIHVzZWQgdG8gc2VsZWN0IHdoaWNoIHByb2Nlc3NlcwpAQCAtMjA2MiwyNSArMTAzNywxNSBAQAogYXJlIGtpbGxlZCwgcHJvY2VzcyBpdHNlbGYgd2lsbCBiZSBraWxsZWQgaW4gYW4gT09NIHNpdHVhdGlvbiB3aGVuIGl0IGRvZXMKIG5vdCBoYXZlIGNoaWxkcmVuIG9yIHNvbWUgb2YgdGhlbSBkaXNhYmxlZCBvb20gbGlrZSBkZXNjcmliZWQgYWJvdmUuCiAKLTIuMTMgL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKKzMuMiAvcHJvYy88cGlkPi9vb21fc2NvcmUgLSBEaXNwbGF5IGN1cnJlbnQgb29tLWtpbGxlciBzY29yZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRoaXMgZmlsZSBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgY3VycmVudCBzY29yZSB1c2VkIGJ5IHRoZSBvb20ta2lsbGVyIGlzIGZvcgogYW55IGdpdmVuIDxwaWQ+LiBVc2UgaXQgdG9nZXRoZXIgd2l0aCAvcHJvYy88cGlkPi9vb21fYWRqIHRvIHR1bmUgd2hpY2gKIHByb2Nlc3Mgc2hvdWxkIGJlIGtpbGxlZCBpbiBhbiBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbi4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TdW1tYXJ5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNlcnRhaW4gYXNwZWN0cyAgb2YgIGtlcm5lbCAgYmVoYXZpb3IgIGNhbiBiZSBtb2RpZmllZCBhdCBydW50aW1lLCB3aXRob3V0IHRoZQotbmVlZCB0byAgcmVjb21waWxlICB0aGUga2VybmVsLCBvciBldmVuIHRvIHJlYm9vdCB0aGUgc3lzdGVtLiBUaGUgZmlsZXMgaW4gdGhlCi0vcHJvYy9zeXMgdHJlZSAgY2FuICBub3Qgb25seSBiZSByZWFkLCBidXQgYWxzbyBtb2RpZmllZC4gWW91IGNhbiB1c2UgdGhlIGVjaG8KLWNvbW1hbmQgdG8gd3JpdGUgdmFsdWUgaW50byB0aGVzZSBmaWxlcywgdGhlcmVieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncwotb2YgdGhlIGtlcm5lbC4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0yLjE0ICAvcHJvYy88cGlkPi9pbyAtIERpc3BsYXkgdGhlIElPIGFjY291bnRpbmcgZmllbGRzCiszLjMgIC9wcm9jLzxwaWQ+L2lvIC0gRGlzcGxheSB0aGUgSU8gYWNjb3VudGluZyBmaWVsZHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBmaWxlIGNvbnRhaW5zIElPIHN0YXRpc3RpY3MgZm9yIGVhY2ggcnVubmluZyBwcm9jZXNzCkBAIC0yMTgyLDcgKzExNDcsNyBAQAogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNhbiBiZSBmb3VuZCB3aXRoaW4gdGhlIHRhc2tzdGF0cyBkb2N1bWVudGF0aW9uIGluCiBEb2N1bWVudGF0aW9uL2FjY291bnRpbmcuCiAKLTIuMTUgL3Byb2MvPHBpZD4vY29yZWR1bXBfZmlsdGVyIC0gQ29yZSBkdW1wIGZpbHRlcmluZyBzZXR0aW5ncworMy40IC9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlciAtIENvcmUgZHVtcCBmaWx0ZXJpbmcgc2V0dGluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogV2hlbiBhIHByb2Nlc3MgaXMgZHVtcGVkLCBhbGwgYW5vbnltb3VzIG1lbW9yeSBpcyB3cml0dGVuIHRvIGEgY29yZSBmaWxlIGFzCiBsb25nIGFzIHRoZSBzaXplIG9mIHRoZSBjb3JlIGZpbGUgaXNuJ3QgbGltaXRlZC4gQnV0IHNvbWV0aW1lcyB3ZSBkb24ndCB3YW50CkBAIC0yMjI2LDcgKzExOTEsNyBAQAogICAkIGVjaG8gMHg3ID4gL3Byb2Mvc2VsZi9jb3JlZHVtcF9maWx0ZXIKICAgJCAuL3NvbWVfcHJvZ3JhbQogCi0yLjE2CS9wcm9jLzxwaWQ+L21vdW50aW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IG1vdW50cworMy41CS9wcm9jLzxwaWQ+L21vdW50aW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IG1vdW50cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBmaWxlIGNvbnRhaW5zIGxpbmVzIG9mIHRoZSBmb3JtOgpAQCAtMjI2MywzMCArMTIyOCwzIEBACiAKICAgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zaGFyZWRzdWJ0cmVlLnR4dAogCi0yLjE3CS9wcm9jL3N5cy9mcy9lcG9sbCAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGVwb2xsIGludGVyZmFjZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXBvbGwoNykgaW50ZXJmYWNlLgotCi1tYXhfdXNlcl9pbnN0YW5jZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcG9sbCBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgYSBzaW5nbGUgdXNlciBjYW4KLWhhdmUgb3BlbiBhdCBhIGdpdmVuIHRpbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEyOCwgYW5kIHNob3VsZCBiZSBlbm91Z2gKLWZvciBub3JtYWwgdXNlcnMuCi0KLW1heF91c2VyX3dhdGNoZXMKLS0tLS0tLS0tLS0tLS0tLS0KLQotRXZlcnkgZXBvbGwgZmlsZSBkZXNjcmlwdG9yIGNhbiBzdG9yZSBhIG51bWJlciBvZiBmaWxlcyB0byBiZSBtb25pdG9yZWQKLWZvciBldmVudCByZWFkaW5lc3MuIEVhY2ggb25lIG9mIHRoZXNlIG1vbml0b3JlZCBmaWxlcyBjb25zdGl0dXRlcyBhICJ3YXRjaCIuCi1UaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mICJ3YXRjaGVzIiB0aGF0IGFyZQotYWxsb3dlZCBmb3IgZWFjaCB1c2VyLgotRWFjaCAid2F0Y2giIGNvc3RzIHJvdWdobHkgOTAgYnl0ZXMgb24gYSAzMmJpdCBrZXJuZWwsIGFuZCByb3VnaGx5IDE2MCBieXRlcwotb24gYSA2NGJpdCBvbmUuCi1UaGUgY3VycmVudCBkZWZhdWx0IHZhbHVlIGZvciAgbWF4X3VzZXJfd2F0Y2hlcyAgaXMgdGhlIDEvMzIgb2YgdGhlIGF2YWlsYWJsZQotbG93IG1lbW9yeSwgZGl2aWRlZCBmb3IgdGhlICJ3YXRjaCIgY29zdCBpbiBieXRlcy4KLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CmluZGV4IDlmODc0MGMuLjI2ZTRiOGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKQEAgLTEyLDYgKzEyLDcgQEAKICAgICAgfCAgIHwtLSBlbmFibGUKICAgICAgfCAgIHwtLSBpcnEKICAgICAgfCAgIHwtLSBsb2NhbF9jcHVzCisgICAgIHwgICB8LS0gcmVtb3ZlCiAgICAgIHwgICB8LS0gcmVzb3VyY2UKICAgICAgfCAgIHwtLSByZXNvdXJjZTAKICAgICAgfCAgIHwtLSByZXNvdXJjZTEKQEAgLTM2LDYgKzM3LDcgQEAKICAgICAgICBlbmFibGUJICAgICAgICAgICBXaGV0aGVyIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCAoYXNjaWksIHJ3KQogICAgICAgIGlycQkJICAgSVJRIG51bWJlciAoYXNjaWksIHJvKQogICAgICAgIGxvY2FsX2NwdXMJICAgbmVhcmJ5IENQVSBtYXNrIChjcHVtYXNrLCBybykKKyAgICAgICByZW1vdmUJCSAgIHJlbW92ZSBkZXZpY2UgZnJvbSBrZXJuZWwncyBsaXN0IChhc2NpaSwgd28pCiAgICAgICAgcmVzb3VyY2UJCSAgIFBDSSByZXNvdXJjZSBob3N0IGFkZHJlc3NlcyAoYXNjaWksIHJvKQogICAgICAgIHJlc291cmNlMC4uTgkgICBQQ0kgcmVzb3VyY2UgTiwgaWYgcHJlc2VudCAoYmluYXJ5LCBtbWFwKQogICAgICAgIHJlc291cmNlMF93Yy4uTl93YyAgUENJIFdDIG1hcCByZXNvdXJjZSBOLCBpZiBwcmVmZXRjaGFibGUgKGJpbmFyeSwgbW1hcCkKQEAgLTQ2LDYgKzQ4LDcgQEAKIAogICBybyAtIHJlYWQgb25seSBmaWxlCiAgIHJ3IC0gZmlsZSBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUKKyAgd28gLSB3cml0ZSBvbmx5IGZpbGUKICAgbW1hcCAtIGZpbGUgaXMgbW1hcGFibGUKICAgYXNjaWkgLSBmaWxlIGNvbnRhaW5zIGFzY2lpIHRleHQKICAgYmluYXJ5IC0gZmlsZSBjb250YWlucyBiaW5hcnkgZGF0YQpAQCAtNzMsNiArNzYsMTMgQEAKIEluIHRoZSBldmVudCBhIGRyaXZlciBpcyBub3QgYm91bmQgdG8gdGhlIGRldmljZSwgaXQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgdGhlCiAnZW5hYmxlJyBmaWxlLCBkb2N1bWVudGVkIGFib3ZlLgogCitUaGUgJ3JlbW92ZScgZmlsZSBpcyB1c2VkIHRvIHJlbW92ZSB0aGUgUENJIGRldmljZSwgYnkgd3JpdGluZyBhIG5vbi16ZXJvCitpbnRlZ2VyIHRvIHRoZSBmaWxlLiAgVGhpcyBkb2VzIG5vdCBpbnZvbHZlIGFueSBraW5kIG9mIGhvdC1wbHVnIGZ1bmN0aW9uYWxpdHksCitlLmcuIHBvd2VyaW5nIG9mZiB0aGUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCdzIGxpc3Qgb2YKK1BDSSBkZXZpY2VzLCB0aGUgc3lzZnMgZGlyZWN0b3J5IGZvciBpdCBpcyByZW1vdmVkLCBhbmQgdGhlIGRldmljZSB3aWxsIGJlCityZW1vdmVkIGZyb20gYW55IGRyaXZlcnMgYXR0YWNoZWQgdG8gaXQuIFJlbW92YWwgb2YgUENJIHJvb3QgYnVzZXMgaXMKK2Rpc2FsbG93ZWQuCisKIEFjY2Vzc2luZyBsZWdhY3kgcmVzb3VyY2VzIHRocm91Z2ggc3lzZnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0CmluZGV4IGZkZTgyOWEuLjkwMmI5NWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKQEAgLTI0LDYgKzI0LDggQEAKIAogCWdpZD0JCVNldCB0aGUgZGVmYXVsdCBncm91cC4KIAl1bWFzaz0JCVNldCB0aGUgZGVmYXVsdCB1bWFzay4KKwltb2RlPQkJU2V0IHRoZSBkZWZhdWx0IGZpbGUgcGVybWlzc2lvbnMuCisJZG1vZGU9CQlTZXQgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHBlcm1pc3Npb25zLgogCXVpZD0JCVNldCB0aGUgZGVmYXVsdCB1c2VyLgogCWJzPQkJU2V0IHRoZSBibG9jayBzaXplLgogCXVuaGlkZQkJU2hvdyBvdGhlcndpc2UgaGlkZGVuIGZpbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKaW5kZXggYjFiOTg4Ny4uMTQ1YzI1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CkBAIC0xMjMsNyArMTIzLDEwIEBACiAKIFVzaW5nIEdQSU9zCiAtLS0tLS0tLS0tLQotT25lIG9mIHRoZSBmaXJzdCB0aGluZ3MgdG8gZG8gd2l0aCBhIEdQSU8sIG9mdGVuIGluIGJvYXJkIHNldHVwIGNvZGUgd2hlbgorVGhlIGZpcnN0IHRoaW5nIGEgc3lzdGVtIHNob3VsZCBkbyB3aXRoIGEgR1BJTyBpcyBhbGxvY2F0ZSBpdCwgdXNpbmcKK3RoZSBncGlvX3JlcXVlc3QoKSBjYWxsOyBzZWUgbGF0ZXIuCisKK09uZSBvZiB0aGUgbmV4dCB0aGluZ3MgdG8gZG8gd2l0aCBhIEdQSU8sIG9mdGVuIGluIGJvYXJkIHNldHVwIGNvZGUgd2hlbgogc2V0dGluZyB1cCBhIHBsYXRmb3JtX2RldmljZSB1c2luZyB0aGUgR1BJTywgaXMgbWFyayBpdHMgZGlyZWN0aW9uOgogCiAJLyogc2V0IGFzIGlucHV0IG9yIG91dHB1dCwgcmV0dXJuaW5nIDAgb3IgbmVnYXRpdmUgZXJybm8gKi8KQEAgLTE0MSw4ICsxNDQsOCBAQAogCiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBpbnRlcmZhY2VzIHRvIEdQSU9zLCBzZXR0aW5nIHRoZSBkaXJlY3Rpb24KIG9mIGEgR1BJTyBpbXBsaWNpdGx5IHJlcXVlc3RzIHRoYXQgR1BJTyAoc2VlIGJlbG93KSBpZiBpdCBoYXMgbm90IGJlZW4KLXJlcXVlc3RlZCBhbHJlYWR5LiAgVGhhdCBjb21wYXRpYmlsaXR5IG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmU7Ci1leHBsaWNpdGx5IHJlcXVlc3RpbmcgR1BJT3MgaXMgc3Ryb25nbHkgcHJlZmVycmVkLgorcmVxdWVzdGVkIGFscmVhZHkuICBUaGF0IGNvbXBhdGliaWxpdHkgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBvcHRpb25hbAorZ3Bpb2xpYiBmcmFtZXdvcmsuCiAKIFNldHRpbmcgdGhlIGRpcmVjdGlvbiBjYW4gZmFpbCBpZiB0aGUgR1BJTyBudW1iZXIgaXMgaW52YWxpZCwgb3Igd2hlbgogdGhhdCBwYXJ0aWN1bGFyIEdQSU8gY2FuJ3QgYmUgdXNlZCBpbiB0aGF0IG1vZGUuICBJdCdzIGdlbmVyYWxseSBhIGJhZApAQCAtMTk1LDcgKzE5OCw3IEBACiAKIFBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhpcyB0eXBlIG9mIEdQSU8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIG90aGVyIEdQSU9zCiBieSByZXR1cm5pbmcgbm9uemVybyBmcm9tIHRoaXMgY2FsbCAod2hpY2ggcmVxdWlyZXMgYSB2YWxpZCBHUElPIG51bWJlciwKLWVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgcmVxdWVzdGVkKToKK3doaWNoIHNob3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCBncGlvX3JlcXVlc3QpOgogCiAJaW50IGdwaW9fY2Fuc2xlZXAodW5zaWduZWQgZ3Bpbyk7CiAKQEAgLTIxMiwxMCArMjE1LDkgQEAKIHNhbWUgYXMgdGhlIHNwaW5sb2NrLXNhZmUgY2FsbHMuCiAKIAotQ2xhaW1pbmcgYW5kIFJlbGVhc2luZyBHUElPcyAoT1BUSU9OQUwpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NsYWltaW5nIGFuZCBSZWxlYXNpbmcgR1BJT3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRvIGhlbHAgY2F0Y2ggc3lzdGVtIGNvbmZpZ3VyYXRpb24gZXJyb3JzLCB0d28gY2FsbHMgYXJlIGRlZmluZWQuCi1Ib3dldmVyLCBtYW55IHBsYXRmb3JtcyBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzIG1lY2hhbmlzbS4KIAogCS8qIHJlcXVlc3QgR1BJTywgcmV0dXJuaW5nIDAgb3IgbmVnYXRpdmUgZXJybm8uCiAJICogbm9uLW51bGwgbGFiZWxzIG1heSBiZSB1c2VmdWwgZm9yIGRpYWdub3N0aWNzLgpAQCAtMjQ0LDEzICsyNDYsNiBAQAogcG93ZXIgbWFuYWdlbWVudCwgc3VjaCBhcyBieSBwb3dlcmluZyBkb3duIHVudXNlZCBjaGlwIHNlY3RvcnMgYW5kLCBtb3JlCiBlYXNpbHksIGdhdGluZyBvZmYgdW51c2VkIGNsb2Nrcy4KIAotVGhlc2UgdHdvIGNhbGxzIGFyZSBvcHRpb25hbCBiZWNhdXNlIG5vdCBub3QgYWxsIGN1cnJlbnQgTGludXggcGxhdGZvcm1zCi1vZmZlciBzdWNoIGZ1bmN0aW9uYWxpdHkgaW4gdGhlaXIgR1BJTyBzdXBwb3J0OyBhIHZhbGlkIGltcGxlbWVudGF0aW9uCi1jb3VsZCByZXR1cm4gc3VjY2VzcyBmb3IgYWxsIGdwaW9fcmVxdWVzdCgpIGNhbGxzLiAgVW5saWtlIHRoZSBvdGhlciBjYWxscywKLXRoZSBzdGF0ZSB0aGV5IHJlcHJlc2VudCBkb2Vzbid0IG5vcm1hbGx5IG1hdGNoIGFueXRoaW5nIGZyb20gYSBoYXJkd2FyZQotcmVnaXN0ZXI7IGl0J3MganVzdCBhIHNvZnR3YXJlIGJpdG1hcCB3aGljaCBjbGVhcmx5IGlzIG5vdCBuZWNlc3NhcnkgZm9yCi1jb3JyZWN0IG9wZXJhdGlvbiBvZiBoYXJkd2FyZSBvciAoYnVnIGZyZWUpIGRyaXZlcnMuCi0KIE5vdGUgdGhhdCByZXF1ZXN0aW5nIGEgR1BJTyBkb2VzIE5PVCBjYXVzZSBpdCB0byBiZSBjb25maWd1cmVkIGluIGFueQogd2F5OyBpdCBqdXN0IG1hcmtzIHRoYXQgR1BJTyBhcyBpbiB1c2UuICBTZXBhcmF0ZSBjb2RlIG11c3QgaGFuZGxlIGFueQogcGluIHNldHVwIChlLmcuIGNvbnRyb2xsaW5nIHdoaWNoIHBpbiB0aGUgR1BJTyB1c2VzLCBwdWxsdXAvcHVsbGRvd24pLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9kczE2MjEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQppbmRleCAxZmVlNmYxLi41ZTk3ZjMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQpAQCAtNDksMTIgKzQ5LDkgQEAKIHJlYWRpbmdzLiBCZSBzdXJlIHRvIGhhdmUgYSBoaWdoIHZzLiBsb3cgdGVtcGVyYXR1cmUgbGltaXQgZ2FwIG9mIGFsIGxlYXN0CiAxLjAgZGVncmVlIENlbHNpdXMgdG8gYXZvaWQgVG91dCAiYm91bmNpbmciLCB0aG91Z2ghCiAKLUFzIGZvciBhbGFybXMsIHlvdSBjYW4gcmVhZCB0aGUgYWxhcm0gc3RhdHVzIG9mIHRoZSBEUzE2MjEgdmlhIHRoZSAnYWxhcm1zJwotL3N5cyBmaWxlIGludGVyZmFjZS4gVGhlIHJlc3VsdCBjb25zaXN0cyBtYWlubHkgb2YgYml0IDYgYW5kIDUgb2YgdGhlCi1jb25maWd1cmF0aW9uIHJlZ2lzdGVyIG9mIHRoZSBjaGlwOyBiaXQgNiAoMHg0MCBvciA2NCkgaXMgdGhlIGhpZ2ggYWxhcm0KLWJpdCBhbmQgYml0IDUgKDB4MjAgb3IgMzIpIHRoZSBsb3cgb25lLiBUaGVzZSBiaXRzIGFyZSBzZXQgd2hlbiB0aGUgaGlnaCBvcgotbG93IGxpbWl0cyBhcmUgbWV0IG9yIGV4Y2VlZGVkIGFuZCBhcmUgcmVzZXQgYnkgdGhlIG1vZHVsZSBhcyBzb29uIGFzIHRoZQotcmVzcGVjdGl2ZSB0ZW1wZXJhdHVyZSByYW5nZXMgYXJlIGxlZnQuCitUaGUgYWxhcm0gYml0cyBhcmUgc2V0IHdoZW4gdGhlIGhpZ2ggb3IgbG93IGxpbWl0cyBhcmUgbWV0IG9yIGV4Y2VlZGVkIGFuZAorYXJlIHJlc2V0IGJ5IHRoZSBtb2R1bGUgYXMgc29vbiBhcyB0aGUgcmVzcGVjdGl2ZSB0ZW1wZXJhdHVyZSByYW5nZXMgYXJlCitsZWZ0LgogCiBUaGUgYWxhcm0gcmVnaXN0ZXJzIGFyZSBpbiBubyB3YXkgc3VpdGFibGUgdG8gZmluZCBvdXQgYWJvdXQgdGhlIGFjdHVhbAogc3RhdHVzIG9mIFRvdXQuIFRoZXkgd2lsbCBvbmx5IHRlbGwgeW91IGFib3V0IGl0cyBoaXN0b3J5LCB3aGV0aGVyIG9yIG5vdApAQCAtNjQsNDUgKzYxLDMgQEAKIAogVGVtcGVyYXR1cmUgY29udmVyc2lvbiBvZiB0aGUgRFMxNjIxIHRha2VzIHVwIHRvIDEwMDBtczsgaW50ZXJuYWwgYWNjZXNzIHRvCiBub24tdm9sYXRpbGUgcmVnaXN0ZXJzIG1heSBsYXN0IGZvciAxMG1zIG9yIGJlbG93LgotCi1IaWdoIEFjY3VyYWN5IFRlbXBlcmF0dXJlIFJlYWRpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBzYWlkIGJlZm9yZSwgdGhlIHRlbXBlcmF0dXJlIGlzc3VlZCB2aWEgdGhlIDktYml0IGkyYy1idXMgZGF0YSBpcwotc29tZXdoYXQgYXJiaXRyYXJ5LiBJbnRlcm5hbGx5LCB0aGUgdGVtcGVyYXR1cmUgY29udmVyc2lvbiBpcyBvZiBhCi1kaWZmZXJlbnQga2luZCB0aGF0IGlzIGV4cGxhaW5lZCAobm90IHNvLi4uKSB3ZWxsIGluIHRoZSBEUzE2MjEgZGF0YSBzaGVldC4KLVRvIGN1dCB0aGUgbG9uZyBzdG9yeSBzaG9ydDogSW5zaWRlIHRoZSBEUzE2MjEgdGhlcmUgYXJlIHR3byBvc2NpbGxhdG9ycywKLWJvdGggb2YgdGhlbSBiaWFzc2VkIGJ5IGEgdGVtcGVyYXR1cmUgY29lZmZpY2llbnQuCi0KLUhpZ2hlciByZXNvbHV0aW9uIG9mIHRoZSB0ZW1wZXJhdHVyZSByZWFkaW5nIGNhbiBiZSBhY2hpZXZlZCB1c2luZyB0aGUKLWludGVybmFsIHByb2plY3Rpb24sIHdoaWNoIG1lYW5zIHRha2luZyBhY2NvdW50IG9mIFJFR19DT1VOVCBhbmQgUkVHX1NMT1BFCi0odGhlIGRyaXZlciBtYW5hZ2VzIHRoZW0pOgotCi1UYWtlbiBmcm9tIERhbGxhcyBTZW1pY29uZHVjdG9ycyBBcHAgTm90ZSAwNjg6ICdJbmNyZWFzaW5nIFRlbXBlcmF0dXJlCi1SZXNvbHV0aW9uIG9uIHRoZSBEUzE2MjAnIGFuZCBBcHAgTm90ZSAxMDU6ICdIaWdoIFJlc29sdXRpb24gVGVtcGVyYXR1cmUKLU1lYXN1cmVtZW50IHdpdGggRGFsbGFzIERpcmVjdC10by1EaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvcnMnCi0KLS0gUmVhZCB0aGUgOS1iaXQgdGVtcGVyYXR1cmUgYW5kIHN0cmlwIHRoZSBMU0IgKFRydW5jYXRlIHRoZSAuNSBkZWdzKQotLSBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIFRFTVBfUkVBRC4KLS0gVGhlbiwgcmVhZCBSRUdfQ09VTlQuCi0tIEFuZCB0aGVuLCBSRUdfU0xPUEUuCi0KLSAgICAgIFRFTVAgPSBURU1QX1JFQUQgLSAwLjI1ICsgKChSRUdfU0xPUEUgLSBSRUdfQ09VTlQpIC8gUkVHX1NMT1BFKQotCi1Ob3RlIHRoYXQgdGhpcyBpcyB3aGF0IHRoZSBET05FIGJpdCBpbiB0aGUgRFMxNjIxIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMKLWdvb2QgZm9yOiBJbnRlcm5hbGx5LCBvbmUgdGVtcGVyYXR1cmUgY29udmVyc2lvbiB0YWtlcyB1cCB0byAxMDAwbXMuIEJlZm9yZQotdGhhdCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdmFsaWQgdGhpbmdzIG91dAotb2YgUkVHX0NPVU5UIGFuZCBSRUdfU0xPUEUuIFRoZSBET05FIGJpdCwgYXMgeW91IG1heSBoYXZlIGd1ZXNzZWQgYnkgbm93LAotdGVsbHMgeW91IHdoZXRoZXIgdGhlIGNvbnZlcnNpb24gaXMgY29tcGxldGUgKCJkb25lIiwgaW4gcGxhaW4gRW5nbGlzaCkgYW5kCi10aHVzLCB3aGV0aGVyIHRoZSB2YWx1ZXMgeW91IHJlYWQgYXJlIGdvb2Qgb3Igbm90LgotCi1UaGUgRFMxNjIxIGhhcyB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uOiAiQ29udGludW91cyIgY29udmVyc2lvbiwgd2hpY2ggY2FuCi1iZSB1bmRlcnN0b29kIGFzIHRoZSBkZWZhdWx0IHN0YW5kLWFsb25lIG1vZGUgd2hlcmUgdGhlIGNoaXAgZ2V0cyB0aGUKLXRlbXBlcmF0dXJlIGFuZCBjb250cm9scyBleHRlcm5hbCBkZXZpY2VzIHZpYSBpdHMgVG91dCBwaW4gb3IgdGVsbHMgb3RoZXIKLWkyYydzIGFib3V0IGl0IGlmIHRoZXkgY2FyZS4gVGhlIG90aGVyIG1vZGUgaXMgY2FsbGVkICIxU0hPVCIsIHRoYXQgbWVhbnMKLXRoYXQgaXQgb25seSBmaWd1cmVzIG91dCBhYm91dCB0aGUgdGVtcGVyYXR1cmUgd2hlbiBpdCBpcyBleHBsaWNpdGx5IHRvbGQKLXRvIGRvIHNvOyB0aGlzIGNhbiBiZSBzZWVuIGFzIHBvd2VyIHNhdmluZyBtb2RlLgotCi1Ob3cgaWYgeW91IHdhbnQgdG8gcmVhZCBSRUdfQ09VTlQgYW5kIFJFR19TTE9QRSwgeW91IGhhdmUgdG8gZWl0aGVyIHN0b3AKLXRoZSBjb250aW51b3VzIGNvbnZlcnNpb25zIHVudGlsIHRoZSBjb250ZW50cyBvZiB0aGVzZSByZWdpc3RlcnMgYXJlIHZhbGlkLAotb3IsIGluIDFTSE9UIG1vZGUsIHlvdSBoYXZlIHRvIGhhdmUgb25lIGNvbnZlcnNpb24gbWFkZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkIGIvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKaW5kZXggMjg3ZjhjOS4uZWZmZTk0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKQEAgLTEsMTEgKzEsMTEgQEAKIEtlcm5lbCBkcml2ZXIgbGlzM2x2MDJkCi09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09CiAKIFN1cHBvcnRlZCBjaGlwczoKIAogICAqIFNUTWljcm9lbGVjdHJvbmljcyBMSVMzTFYwMkRMIGFuZCBMSVMzTFYwMkRRCiAKLUF1dGhvcjoKK0F1dGhvcnM6CiAgICAgICAgIFlhbiBCdXJtYW4gPGJ1cm1hbi55YW5AZ21haWwuY29tPgogCUVyaWMgUGllbCA8ZXJpYy5waWVsQHRyZW1wbGluLXV0Yy5uZXQ+CiAKQEAgLTE1LDcgKzE1LDcgQEAKIAogVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGFjY2VsZXJvbWV0ZXIgZm91bmQgaW4gdmFyaW91cyBIUAogbGFwdG9wcyBzcG9ydGluZyB0aGUgZmVhdHVyZSBvZmZpY2lhbGx5IGNhbGxlZCAiSFAgTW9iaWxlIERhdGEKLVByb3RlY3Rpb24gU3lzdGVtIDNEIiBvciAiSFAgM0QgRHJpdmVHdWFyZCIuIEl0IGRldGVjdCBhdXRvbWF0aWNhbGx5CitQcm90ZWN0aW9uIFN5c3RlbSAzRCIgb3IgIkhQIDNEIERyaXZlR3VhcmQiLiBJdCBkZXRlY3RzIGF1dG9tYXRpY2FsbHkKIGxhcHRvcHMgd2l0aCB0aGlzIHNlbnNvci4gS25vd24gbW9kZWxzIChmb3Igbm93IHRoZSBIUCAyMTMzLCBuYzY0MjAsCiBuYzI1MTAsIG5jODUxMCwgbmM4NHgwLCBudzk0NDAgYW5kIG54OTQyMCkgd2lsbCBoYXZlIHRoZWlyIGF4aXMKIGF1dG9tYXRpY2FsbHkgb3JpZW50ZWQgb24gc3RhbmRhcmQgd2F5IChlZzogeW91IGNhbiBkaXJlY3RseSBwbGF5CkBAIC0yNyw3ICsyNyw3IEBACiBjYWxpYnJhdGUgLSByZWFkOiB2YWx1ZXMgKHgsIHksIHopIHRoYXQgYXJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGlucHV0CiAJCSAgY2xhc3MgZGV2aWNlIG9wZXJhdGlvbi4KICAgICAgICAgICAgIHdyaXRlOiBmb3JjZXMgdGhlIGJhc2UgdG8gYmUgcmVjYWxpYnJhdGVkIHdpdGggdGhlIGN1cnJlbnQKLQkJICBwb3NpdGlvbi4KKwkJICAgcG9zaXRpb24uCiByYXRlIC0gcmVwb3J0cyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgYWNjZWxlcm9tZXRlciBkZXZpY2UgaW4gSFoKIAogVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCkBAIC00OCw3ICs0OCw3IEBACiB0aGUgYWNjZWxlcm9tZXRlciBhcmUgY29udmVydGVkIGludG8gYSAic3RhbmRhcmQiIG9yZ2FuaXNhdGlvbiBvZiB0aGUgYXhlcwogKGFrYSAiY2FuIHBsYXkgbmV2ZXJiYWxsIG91dCBvZiB0aGUgYm94Iik6CiAgKiBXaGVuIHRoZSBsYXB0b3AgaXMgaG9yaXpvbnRhbCB0aGUgcG9zaXRpb24gcmVwb3J0ZWQgaXMgYWJvdXQgMCBmb3IgWCBhbmQgWQotYW5kIGEgcG9zaXRpdmUgdmFsdWUgZm9yIFoKKwlhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgWgogICogSWYgdGhlIGxlZnQgc2lkZSBpcyBlbGV2YXRlZCwgWCBpbmNyZWFzZXMgKGJlY29tZXMgcG9zaXRpdmUpCiAgKiBJZiB0aGUgZnJvbnQgc2lkZSAod2hlcmUgdGhlIHRvdWNocGFkIGlzKSBpcyBlbGV2YXRlZCwgWSBkZWNyZWFzZXMKIAkoYmVjb21lcyBuZWdhdGl2ZSkKQEAgLTU5LDMgKzU5LDEzIEBACiBsYXB0b3AsIHBsZWFzZSBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgImRtaWRlY29kZSIgcGx1cyB0aGUgdmFsdWUgb2YKIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9saXMzbHYwMmQvcG9zaXRpb24gaW4gdGhlc2UgZm91ciBjYXNlcy4KIAorUSZBCistLS0KKworUTogSG93IGRvIEkgc2FmZWx5IHNpbXVsYXRlIGZyZWVmYWxsPyBJIGhhdmUgYW4gSFAgInBvcnRhYmxlCit3b3Jrc3RhdGlvbiIgd2hpY2ggaGFzIGFib3V0IDMuNWtnIGFuZCBhIHBsYXN0aWMgY2FzZSwgc28gbGV0dGluZyBpdAorZmFsbCB0byB0aGUgZ3JvdW5kIGlzIG91dCBvZiBxdWVzdGlvbi4uLgorCitBOiBUaGUgc2Vuc29yIGlzIHByZXR0eSBzZW5zaXRpdmUsIHNvIHlvdXIgaGFuZHMgY2FuIGRvIGl0LiBMaWZ0IGl0CitpbnRvIGZyZWUgc3BhY2UsIGZvbGxvdyB0aGUgZmFsbCB3aXRoIHlvdXIgaGFuZHMgZm9yIGxpa2UgMTAKK2NlbnRpbWV0ZXJzLiBUaGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgZGV0ZWN0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNmEyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKQEAgLTAsMCArMSw1MCBAQAorS2VybmVsIGRyaXZlciBsdGM0MjE1Cis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIExpbmVhciBUZWNobm9sb2d5IExUQzQyMTUKKyAgICBQcmVmaXg6ICdsdGM0MjE1JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAweDQ0CisgICAgRGF0YXNoZWV0OgorICAgICAgICBodHRwOi8vd3d3LmxpbmVhci5jb20vcGMvZG93bmxvYWREb2N1bWVudC5kbz9uYXZJZD1IMCxDMSxDMTAwMyxDMTAwNixDMTE2MyxQMTc1NzIsRDEyNjk3CisKK0F1dGhvcjogSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBMVEM0MjE1IGNvbnRyb2xsZXIgYWxsb3dzIGEgYm9hcmQgdG8gYmUgc2FmZWx5IGluc2VydGVkIGFuZCByZW1vdmVkCitmcm9tIGEgbGl2ZSBiYWNrcGxhbmUuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKK3RoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorCitFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAorb24gSTJDIGJ1cyAjMDoKKyQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBMVEM0MjE1IGhhcyBidWlsdC1pbiBsaW1pdHMgZm9yIG92ZXJ2b2x0YWdlLCB1bmRlcnZvbHRhZ2UsIGFuZAordW5kZXJjdXJyZW50IHdhcm5pbmdzLiBUaGlzIG1ha2VzIGl0IHZlcnkgbGlrZWx5IHRoYXQgdGhlIHJlZmVyZW5jZQorY2lyY3VpdCB3aWxsIGJlIHVzZWQuCisKK2luMV9pbnB1dAkJaW5wdXQgdm9sdGFnZQoraW4yX2lucHV0CQlvdXRwdXQgdm9sdGFnZQorCitpbjFfbWluX2FsYXJtCQlpbnB1dCB1bmRlcnZvbHRhZ2UgYWxhcm0KK2luMV9tYXhfYWxhcm0JCWlucHV0IG92ZXJ2b2x0YWdlIGFsYXJtCisKK2N1cnIxX2lucHV0CQljdXJyZW50CitjdXJyMV9tYXhfYWxhcm0JCW92ZXJjdXJyZW50IGFsYXJtCisKK3Bvd2VyMV9pbnB1dAkJcG93ZXIgdXNhZ2UKK3Bvd2VyMV9hbGFybQkJcG93ZXIgYmFkIGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTkxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9wY2Y4NTkxCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9wY2Y4NTkxCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2h3bW9uL3BjZjg1OTEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKaW5kZXggNmRiZmQ1ZS4uMmYxMGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UKQEAgLTM2NSw2ICszNjUsNyBAQAogCQkJCVVuaXQ6IG1pY3JvSm91bGUKIAkJCQlSTwogCisKICoqKioqKioqKioKICogQWxhcm1zICoKICoqKioqKioqKioKQEAgLTQ1Myw2ICs0NTQsMjcgQEAKIAkJUlcKIAogCisqKioqKioqKioqKioqKioqKioqKioqKgorKiBJbnRydXNpb24gZGV0ZWN0aW9uICoKKyoqKioqKioqKioqKioqKioqKioqKioqCisKK2ludHJ1c2lvblswLSpdX2FsYXJtCisJCUNoYXNzaXMgaW50cnVzaW9uIGRldGVjdGlvbgorCQkwOiBPSworCQkxOiBpbnRydXNpb24gZGV0ZWN0ZWQKKwkJUlcKKwkJQ29udHJhcnkgdG8gcmVndWxhciBhbGFybSBmbGFncyB3aGljaCBjbGVhciB0aGVtc2VsdmVzCisJCWF1dG9tYXRpY2FsbHkgd2hlbiByZWFkLCB0aGlzIG9uZSBzdGlja3MgdW50aWwgY2xlYXJlZCBieQorCQl0aGUgdXNlci4gVGhpcyBpcyBkb25lIGJ5IHdyaXRpbmcgMCB0byB0aGUgZmlsZS4gV3JpdGluZworCQlvdGhlciB2YWx1ZXMgaXMgdW5zdXBwb3J0ZWQuCisKK2ludHJ1c2lvblswLSpdX2JlZXAKKwkJQ2hhc3NpcyBpbnRydXNpb24gYmVlcAorCQkwOiBkaXNhYmxlCisJCTE6IGVuYWJsZQorCQlSVworCisKIHN5c2ZzIGF0dHJpYnV0ZSB3cml0ZXMgaW50ZXJwcmV0YXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgppbmRleCBkNmUxYWUzLi5iNmViNTkzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgpAQCAtMiwzMCArMiw0MCBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogU3VwcG9ydGVkIGNoaXBzOgotICAqIFdpbmJvbmQgVzgzNjI3RUhGL0VIRy9ESEcgKElTQSBhY2Nlc3MgT05MWSkKKyAgKiBXaW5ib25kIFc4MzYyN0VIRi9FSEcgKElTQSBhY2Nlc3MgT05MWSkKICAgICBQcmVmaXg6ICd3ODM2MjdlaGYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKICAgICBEYXRhc2hlZXQ6Ci0gICAgICAgIGh0dHA6Ly93d3cud2luYm9uZC11c2EuY29tL3Byb2R1Y3RzL3dpbmJvbmRfcHJvZHVjdHMvcGRmcy9QQ0lDL1c4MzYyN0VIRl8lMjBXODM2MjdFSEdiLnBkZgotICAgICAgICBESEcgZGF0YXNoZWV0IGNvbmZpZGVudGlhbC4KKyAgICAgICAgaHR0cDovL3d3dy5udXZvdG9uLmNvbS50dy9OUi9yZG9ubHlyZXMvQTZBMjU4RjAtRjBDOS00Rjk3LTgxQzAtQzREMjlFN0U5NDNFLzAvVzgzNjI3RUhGLnBkZgorICAqIFdpbmJvbmQgVzgzNjI3REhHCisgICAgUHJlZml4OiAndzgzNjI3ZGhnJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OgorICAgICAgICBodHRwOi8vd3d3Lm51dm90b24uY29tLnR3L05SL3Jkb25seXJlcy83ODg1NjIzRC1BNDg3LTRDRjktQTQ3Ri0zMEM1RjczRDZGRTYvMC9XODM2MjdESEcucGRmCisgICogV2luYm9uZCBXODM2NjdIRworICAgIFByZWZpeDogJ3c4MzY2N2hnJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJU0EgYWRkcmVzcyByZXRyaWV2ZWQgZnJvbSBTdXBlciBJL08gcmVnaXN0ZXJzCisgICAgRGF0YXNoZWV0OiBub3QgYXZhaWxhYmxlCiAKIEF1dGhvcnM6CiAgICAgICAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgICAgICBZdWFuIE11IChXaW5ib25kKQogICAgICAgICBSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgogICAgICAgICBEYXZpZCBIdWJiYXJkIDxkYXZpZC5jLmh1YmJhcmRAZ21haWwuY29tPgorICAgICAgICBHb25nIEp1biA8SkdvbmdAbnV2b3Rvbi5jb20+CiAKIERlc2NyaXB0aW9uCiAtLS0tLS0tLS0tLQogCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBXaW5ib25kIFc4MzYyN0VIRiwgVzgzNjI3RUhHLCBhbmQKLVc4MzYyN0RIRyBzdXBlciBJL08gY2hpcHMuIFdlIHdpbGwgcmVmZXIgdG8gdGhlbSBjb2xsZWN0aXZlbHkgYXMgV2luYm9uZCBjaGlwcy4KK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNjI3RUhGLCBXODM2MjdFSEcsCitXODM2MjdESEcgYW5kIFc4MzY2N0hHIHN1cGVyIEkvTyBjaGlwcy4gV2Ugd2lsbCByZWZlciB0byB0aGVtIGNvbGxlY3RpdmVseQorYXMgV2luYm9uZCBjaGlwcy4KIAogVGhlIGNoaXBzIGltcGxlbWVudCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBmaXZlIGZhbiByb3RhdGlvbgogc3BlZWQgc2Vuc29ycywgdGVuIGFuYWxvZyB2b2x0YWdlIHNlbnNvcnMgKG9ubHkgbmluZSBmb3IgdGhlIDYyN0RIRyksIG9uZQotVklEICg2IHBpbnMgZm9yIHRoZSA2MjdFSEYvRUhHLCA4IHBpbnMgZm9yIHRoZSA2MjdESEcpLCBhbGFybXMgd2l0aCBiZWVwCi13YXJuaW5ncyAoY29udHJvbCB1bmltcGxlbWVudGVkKSwgYW5kIHNvbWUgYXV0b21hdGljIGZhbiByZWd1bGF0aW9uCi1zdHJhdGVnaWVzIChwbHVzIG1hbnVhbCBmYW4gY29udHJvbCBtb2RlKS4KK1ZJRCAoNiBwaW5zIGZvciB0aGUgNjI3RUhGL0VIRywgOCBwaW5zIGZvciB0aGUgNjI3REhHIGFuZCA2NjdIRyksIGFsYXJtcword2l0aCBiZWVwIHdhcm5pbmdzIChjb250cm9sIHVuaW1wbGVtZW50ZWQpLCBhbmQgc29tZSBhdXRvbWF0aWMgZmFuCityZWd1bGF0aW9uIHN0cmF0ZWdpZXMgKHBsdXMgbWFudWFsIGZhbiBjb250cm9sIG1vZGUpLgogCiBUZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcyAxCiBkZWdDIGZvciB0ZW1wMSBhbmQgMC41IGRlZ0MgZm9yIHRlbXAyIGFuZCB0ZW1wMy4gQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIHdoZW4KQEAgLTU0LDcgKzY0LDggQEAKIHRlbXAxIC0+IHB3bTEKIHRlbXAyIC0+IHB3bTIKIHRlbXAzIC0+IHB3bTMKLXByb2cgIC0+IHB3bTQgKHRoZSBwcm9ncmFtbWFibGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIpCitwcm9nICAtPiBwd200IChub3Qgb24gNjY3SEc7IHRoZSBwcm9ncmFtbWFibGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5CisJICAgICAgIHRoZSBkcml2ZXIpCiAKIC9zeXMgZmlsZXMKIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCBmMWQ2Mzk5Li4xZjc3OWEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xMjIsMTAgKzEyMiw4IEBACiAnYycJMDAtN0YJbGludXgvY29kYS5oCQljb25mbGljdCEKICdjJwk4MC05RglhcmNoL3MzOTAvaW5jbHVkZS9hc20vY2hzYy5oCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCi0nZCcJMDAtREYJbGludXgvdmlkZW9fZGVjb2Rlci5oCWNvbmZsaWN0IQogJ2QnCUYwLUZGCWxpbnV4L2RpZ2kxLmgKICdlJwlhbGwJbGludXgvZGlnaTEuaAkJY29uZmxpY3QhCi0nZScJMDAtMUYJbGludXgvdmlkZW9fZW5jb2Rlci5oCWNvbmZsaWN0IQogJ2UnCTAwLTFGCW5ldC9pcmRhL2lydHR5LmgJY29uZmxpY3QhCiAnZicJMDAtMUYJbGludXgvZXh0Ml9mcy5oCiAnaCcJMDAtN0YJCQkJQ2hhcm9uIGZpbGVzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggNzU1ZGVmMi4uNDIxOTIwOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTQ5Miw2ICs0OTIsMTYgQEAKIAkJCVJhbmdlOiAwIC0gODE5MgogCQkJRGVmYXVsdDogNjQKIAorCWRtYV9kZWJ1Zz1vZmYJSWYgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIERNQV9BUElfREVCVUcgc3VwcG9ydAorCQkJdGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGRlYnVnZ2luZyBjb2RlIGF0IGJvb3QuCisKKwlkbWFfZGVidWdfZW50cmllcz08bnVtYmVyPgorCQkJVGhpcyBvcHRpb24gYWxsb3dzIHRvIHR1bmUgdGhlIG51bWJlciBvZiBwcmVhbGxvY2F0ZWQKKwkJCWVudHJpZXMgZm9yIERNQS1BUEkgZGVidWdnaW5nIGNvZGUuIE9uZSBlbnRyeSBpcworCQkJcmVxdWlyZWQgcGVyIERNQS1BUEkgYWxsb2NhdGlvbi4gVXNlIHRoaXMgaWYgdGhlCisJCQlETUEtQVBJIGRlYnVnZ2luZyBjb2RlIGRpc2FibGVzIGl0c2VsZiBiZWNhdXNlIHRoZQorCQkJYXJjaGl0ZWN0dXJhbCBkZWZhdWx0IGlzIHRvbyBsb3cuCisKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCiAJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CiAJCQkJdmVyYm9zZSB9CkBAIC0xNTEzLDcgKzE1MjMsOSBAQAogCiAJbm9jbGZsdXNoCVtCVUdTPVg4Nl0gRG9uJ3QgdXNlIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uCiAKLQlub2hsdAkJW0JVR1M9QVJNLFNIXQorCW5vaGx0CQlbQlVHUz1BUk0sU0hdIFRlbGxzIHRoZSBrZXJuZWwgdGhhdCB0aGUgc2xlZXAoU0gpIG9yCisJCQl3ZmkoQVJNKSBpbnN0cnVjdGlvbiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGFuZCBub3QgdG8KKwkJCXVzZSBpdC4gVGhpcyBpcyBhbHNvIHVzZWZ1bCB3aGVuIHVzaW5nIEpUQUcgZGVidWdnZXIuCiAKIAluby1obHQJCVtCVUdTPVg4Ni0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKIAkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bwpAQCAtMTY4NSw2ICsxNjk3LDggQEAKIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vYmxvY2tkZXYvcGFyaWRlLnR4dC4KIAogCXBjaT1vcHRpb25bLG9wdGlvbi4uLl0JW1BDSV0gdmFyaW91cyBQQ0kgc3Vic3lzdGVtIG9wdGlvbnM6CisJCWVhcmx5ZHVtcAlbWDg2XSBkdW1wIFBDSSBjb25maWcgc3BhY2UgYmVmb3JlIHRoZSBrZXJuZWwKKwkJCSAgICAgICAgY2hhbmdlcyBhbnl0aGluZwogCQlvZmYJCVtYODZdIGRvbid0IHByb2JlIGZvciB0aGUgUENJIGJ1cwogCQliaW9zCQlbWDg2LTMyXSBmb3JjZSB1c2Ugb2YgUENJIEJJT1MsIGRvbid0IGFjY2VzcwogCQkJCXRoZSBoYXJkd2FyZSBkaXJlY3RseS4gVXNlIHRoaXMgaWYgeW91ciBtYWNoaW5lCkBAIC0xNzg0LDYgKzE3OTgsMTUgQEAKIAkJY2JtZW1zaXplPW5uW0tNR10JVGhlIGZpeGVkIGFtb3VudCBvZiBidXMgc3BhY2Ugd2hpY2ggaXMKIAkJCQlyZXNlcnZlZCBmb3IgdGhlIENhcmRCdXMgYnJpZGdlJ3MgbWVtb3J5CiAJCQkJd2luZG93LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NCBtZWdhYnl0ZXMuCisJCXJlc291cmNlX2FsaWdubWVudD0KKwkJCQlGb3JtYXQ6CisJCQkJWzxvcmRlciBvZiBhbGlnbj5AXVs8ZG9tYWluPjpdPGJ1cz46PHNsb3Q+LjxmdW5jPls7IC4uLl0KKwkJCQlTcGVjaWZpZXMgYWxpZ25tZW50IGFuZCBkZXZpY2UgdG8gcmVhc3NpZ24KKwkJCQlhbGlnbmVkIG1lbW9yeSByZXNvdXJjZXMuCisJCQkJSWYgPG9yZGVyIG9mIGFsaWduPiBpcyBub3Qgc3BlY2lmaWVkLAorCQkJCVBBR0VfU0laRSBpcyB1c2VkIGFzIGFsaWdubWVudC4KKwkJCQlQQ0ktUENJIGJyaWRnZSBjYW4gYmUgc3BlY2lmaWVkLCBpZiByZXNvdXJjZQorCQkJCXdpbmRvd3MgbmVlZCB0byBiZSBleHBhbmRlZC4KIAogCXBjaWVfYXNwbT0JW1BDSUVdIEZvcmNpYmx5IGVuYWJsZSBvciBkaXNhYmxlIFBDSWUgQWN0aXZlIFN0YXRlIFBvd2VyCiAJCQlNYW5hZ2VtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwppbmRleCBmMmRiYmYzLi5kMzZmY2MwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYworKysgYi9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpAQCAtMTYzMCw2ICsxNjMwLDEzIEBACiAJCX0KIAl9CiAKKwkvKiBPSywgc28gd2Ugbm90ZWQgdGhhdCBpdCB3YXMgcHJldHR5IHBvb3IgdG8gdXNlIGFuIGZkYXRhc3luYyBhcyBhCisJICogYmFycmllci4gIEJ1dCBDaHJpc3RvcGggSGVsbHdpZyBwb2ludHMgb3V0IHRoYXQgd2UgbmVlZCBhIHN5bmMKKwkgKiAqYWZ0ZXJ3YXJkcyogYXMgd2VsbDogIkJhcnJpZXJzIHNwZWNpZnkgbm8gcmVvcmRlcmluZyB0byB0aGUgZnJvbnQKKwkgKiBvciB0aGUgYmFjay4iICBBbmQgSmVucyBBeGJvZSBjb25maXJtZWQgaXQsIHNvIGhlcmUgd2UgYXJlOiAqLworCWlmIChvdXQtPnR5cGUgJiBWSVJUSU9fQkxLX1RfQkFSUklFUikKKwkJZmRhdGFzeW5jKHZibGstPmZkKTsKKwogCS8qIFdlIGNhbid0IHRyaWdnZXIgYW4gSVJRLCBiZWNhdXNlIHdlJ3JlIG5vdCB0aGUgTGF1bmNoZXIuICBJdCBkb2VzCiAJICogdGhhdCB3aGVuIHdlIHRlbGwgaXQgd2UncmUgZG9uZS4gKi8KIAlhZGRfdXNlZChkZXYtPnZxLCBoZWFkLCB3bGVuKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKaW5kZXggNDg4NzczMC4uOTM4ZWEyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKQEAgLTI3LDMzICsyNywzNyBAQAogU3RhdGUKIC0tLS0tCiAKLVRoZSB2YWxpZGF0b3IgdHJhY2tzIGxvY2stY2xhc3MgdXNhZ2UgaGlzdG9yeSBpbnRvIDUgc2VwYXJhdGUgc3RhdGUgYml0czoKK1RoZSB2YWxpZGF0b3IgdHJhY2tzIGxvY2stY2xhc3MgdXNhZ2UgaGlzdG9yeSBpbnRvIDRuICsgMSBzZXBhcmF0ZSBzdGF0ZSBiaXRzOgogCi0tICdldmVyIGhlbGQgaW4gaGFyZGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXNhZmUgICBdCi0tICdldmVyIGhlbGQgaW4gc29mdGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBzb2Z0aXJxLXNhZmUgICBdCi0tICdldmVyIGhlbGQgd2l0aCBoYXJkaXJxcyBlbmFibGVkJyAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXVuc2FmZSBdCi0tICdldmVyIGhlbGQgd2l0aCBzb2Z0aXJxcyBhbmQgaGFyZGlycXMgZW5hYmxlZCcgICAgWyA9PSBzb2Z0aXJxLXVuc2FmZSBdCistICdldmVyIGhlbGQgaW4gU1RBVEUgY29udGV4dCcKKy0gJ2V2ZXIgaGVhZCBhcyByZWFkbG9jayBpbiBTVEFURSBjb250ZXh0JworLSAnZXZlciBoZWFkIHdpdGggU1RBVEUgZW5hYmxlZCcKKy0gJ2V2ZXIgaGVhZCBhcyByZWFkbG9jayB3aXRoIFNUQVRFIGVuYWJsZWQnCisKK1doZXJlIFNUQVRFIGNhbiBiZSBlaXRoZXIgb25lIG9mIChrZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaCkKKyAtIGhhcmRpcnEKKyAtIHNvZnRpcnEKKyAtIHJlY2xhaW1fZnMKIAogLSAnZXZlciB1c2VkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgPT0gIXVudXNlZCAgICAgICAgXQogCi1XaGVuIGxvY2tpbmcgcnVsZXMgYXJlIHZpb2xhdGVkLCB0aGVzZSA0IHN0YXRlIGJpdHMgYXJlIHByZXNlbnRlZCBpbiB0aGUKLWxvY2tpbmcgZXJyb3IgbWVzc2FnZXMsIGluc2lkZSBjdXJsaWVzLiAgQSBjb250cml2ZWQgZXhhbXBsZToKK1doZW4gbG9ja2luZyBydWxlcyBhcmUgdmlvbGF0ZWQsIHRoZXNlIHN0YXRlIGJpdHMgYXJlIHByZXNlbnRlZCBpbiB0aGUKK2xvY2tpbmcgZXJyb3IgbWVzc2FnZXMsIGluc2lkZSBjdXJsaWVzLiBBIGNvbnRyaXZlZCBleGFtcGxlOgogCiAgICBtb2Rwcm9iZS8yMjg3IGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6Ci0gICAgKCZzaW9fbG9ja3NbaV0ubG9jayl7LS0uLn0sIGF0OiBbPGMwMjg2N2ZkPl0gbXV0ZXhfbG9jaysweDIxLzB4MjQKKyAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLi0uLi59LCBhdDogWzxjMDI4NjdmZD5dIG11dGV4X2xvY2srMHgyMS8weDI0CiAKICAgIGJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOgotICAgICgmc2lvX2xvY2tzW2ldLmxvY2spey0tLi59LCBhdDogWzxjMDI4NjdmZD5dIG11dGV4X2xvY2srMHgyMS8weDI0CisgICAgKCZzaW9fbG9ja3NbaV0ubG9jayl7LS4tLi4ufSwgYXQ6IFs8YzAyODY3ZmQ+XSBtdXRleF9sb2NrKzB4MjEvMHgyNAogCiAKLVRoZSBiaXQgcG9zaXRpb24gaW5kaWNhdGVzIGhhcmRpcnEsIHNvZnRpcnEsIGhhcmRpcnEtcmVhZCwKLXNvZnRpcnEtcmVhZCByZXNwZWN0aXZlbHksIGFuZCB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBpbiBlYWNoCi1pbmRpY2F0ZXM6CitUaGUgYml0IHBvc2l0aW9uIGluZGljYXRlcyBTVEFURSwgU1RBVEUtcmVhZCwgZm9yIGVhY2ggb2YgdGhlIHN0YXRlcyBsaXN0ZWQKK2Fib3ZlLCBhbmQgdGhlIGNoYXJhY3RlciBkaXNwbGF5ZWQgaW4gZWFjaCBpbmRpY2F0ZXM6CiAKICAgICcuJyAgYWNxdWlyZWQgd2hpbGUgaXJxcyBkaXNhYmxlZAogICAgJysnICBhY3F1aXJlZCBpbiBpcnEgY29udGV4dAogICAgJy0nICBhY3F1aXJlZCB3aXRoIGlycXMgZW5hYmxlZAotICAgJz8nIHJlYWQgYWNxdWlyZWQgaW4gaXJxIGNvbnRleHQgd2l0aCBpcnFzIGVuYWJsZWQuCisgICAnPycgIGFjcXVpcmVkIGluIGlycSBjb250ZXh0IHdpdGggaXJxcyBlbmFibGVkLgogCiBVbnVzZWQgbXV0ZXhlcyBjYW5ub3QgYmUgcGFydCBvZiB0aGUgY2F1c2Ugb2YgYW4gZXJyb3IuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWQudHh0IGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKaW5kZXggMWRhOWQxYi4uNGVkZDM5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZC50eHQKQEAgLTE2NCwxNSArMTY0LDE5IEBACiAgIHJhaWRfZGlza3MKICAgICAgYSB0ZXh0IGZpbGUgd2l0aCBhIHNpbXBsZSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIGRldmljZXMKICAgICAgaW4gYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LiAgSWYgdGhpcyBpcyBub3QgeWV0IGtub3duLCB0aGUgZmlsZQotICAgICB3aWxsIGJlIGVtcHR5LiAgSWYgYW4gYXJyYXkgaXMgYmVpbmcgcmVzaXplZCAobm90IGN1cnJlbnRseQotICAgICBwb3NzaWJsZSkgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGxhcmdlciBvZiB0aGUgb2xkIGFuZCBuZXcgc2l6ZXMuCi0gICAgIFNvbWUgcmFpZCBsZXZlbCAoUkFJRDEpIGFsbG93IHRoaXMgdmFsdWUgdG8gYmUgc2V0IHdoaWxlIHRoZQotICAgICBhcnJheSBpcyBhY3RpdmUuICBUaGlzIHdpbGwgcmVjb25maWd1cmUgdGhlIGFycmF5LiAgIE90aGVyd2lzZQotICAgICBpdCBjYW4gb25seSBiZSBzZXQgd2hpbGUgYXNzZW1ibGluZyBhbiBhcnJheS4KKyAgICAgd2lsbCBiZSBlbXB0eS4gIElmIGFuIGFycmF5IGlzIGJlaW5nIHJlc2l6ZWQgdGhpcyB3aWxsIGNvbnRhaW4KKyAgICAgdGhlIG5ldyBudW1iZXIgb2YgZGV2aWNlcy4KKyAgICAgU29tZSByYWlkIGxldmVscyBhbGxvdyB0aGlzIHZhbHVlIHRvIGJlIHNldCB3aGlsZSB0aGUgYXJyYXkgaXMKKyAgICAgYWN0aXZlLiAgVGhpcyB3aWxsIHJlY29uZmlndXJlIHRoZSBhcnJheS4gICBPdGhlcndpc2UgaXQgY2FuIG9ubHkKKyAgICAgYmUgc2V0IHdoaWxlIGFzc2VtYmxpbmcgYW4gYXJyYXkuCisgICAgIEEgY2hhbmdlIHRvIHRoaXMgYXR0cmlidXRlIHdpbGwgbm90IGJlIHBlcm1pdHRlZCBpZiBpdCB3b3VsZAorICAgICByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGFycmF5LiAgVG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgZHJpdmVzCisgICAgIGluIGFuIGUuZy4gcmFpZDUsIHRoZSBhcnJheSBzaXplIG11c3QgZmlyc3QgYmUgcmVkdWNlZCBieQorICAgICBzZXR0aW5nIHRoZSAnYXJyYXlfc2l6ZScgYXR0cmlidXRlLgogCiAgIGNodW5rX3NpemUKLSAgICAgVGhpcyBpcyB0aGUgc2l6ZSBpZiBieXRlcyBmb3IgJ2NodW5rcycgYW5kIGlzIG9ubHkgcmVsZXZhbnQgdG8KLSAgICAgcmFpZCBsZXZlbHMgdGhhdCBpbnZvbHZlIHN0cmlwaW5nICgxLDQsNSw2LDEwKS4gVGhlIGFkZHJlc3Mgc3BhY2UKKyAgICAgVGhpcyBpcyB0aGUgc2l6ZSBpbiBieXRlcyBmb3IgJ2NodW5rcycgYW5kIGlzIG9ubHkgcmVsZXZhbnQgdG8KKyAgICAgcmFpZCBsZXZlbHMgdGhhdCBpbnZvbHZlIHN0cmlwaW5nICgwLDQsNSw2LDEwKS4gVGhlIGFkZHJlc3Mgc3BhY2UKICAgICAgb2YgdGhlIGFycmF5IGlzIGNvbmNlcHR1YWxseSBkaXZpZGVkIGludG8gY2h1bmtzIGFuZCBjb25zZWN1dGl2ZQogICAgICBjaHVua3MgYXJlIHN0cmlwZWQgb250byBuZWlnaGJvdXJpbmcgZGV2aWNlcy4KICAgICAgVGhlIHNpemUgc2hvdWxkIGJlIGF0IGxlYXN0IFBBR0VfU0laRSAoNGspIGFuZCBzaG91bGQgYmUgYSBwb3dlcgpAQCAtMTgzLDYgKzE4NywyMCBAQAogICAgICBzaW1wbHkgYSBudW1iZXIgdGhhdCBpcyBpbnRlcnByZXR0ZWQgZGlmZmVyZW50bHkgYnkgZGlmZmVyZW50CiAgICAgIGxldmVscy4gIEl0IGNhbiBiZSB3cml0dGVuIHdoaWxlIGFzc2VtYmxpbmcgYW4gYXJyYXkuCiAKKyAgYXJyYXlfc2l6ZQorICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGFydGlmaWNpYWxseSBjb25zdHJhaW4gdGhlIGF2YWlsYWJsZSBzcGFjZSBpbgorICAgICB0aGUgYXJyYXkgdG8gYmUgbGVzcyB0aGFuIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSBvbiB0aGUgY29tYmluZWQKKyAgICAgZGV2aWNlcy4gIFdyaXRpbmcgYSBudW1iZXIgKGluIEtpbG9ieXRlcykgd2hpY2ggaXMgbGVzcyB0aGFuCisgICAgIHRoZSBhdmFpbGFibGUgc2l6ZSB3aWxsIHNldCB0aGUgc2l6ZS4gIEFueSByZWNvbmZpZ3VyYXRpb24gb2YgdGhlCisgICAgIGFycmF5IChlLmcuIGFkZGluZyBkZXZpY2VzKSB3aWxsIG5vdCBjYXVzZSB0aGUgc2l6ZSB0byBjaGFuZ2UuCisgICAgIFdyaXRpbmcgdGhlIHdvcmQgJ2RlZmF1bHQnIHdpbGwgY2F1c2UgdGhlIGVmZmVjdGl2ZSBzaXplIG9mIHRoZQorICAgICBhcnJheSB0byBiZSB3aGF0ZXZlciBzaXplIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSBiYXNlZCBvbgorICAgICAnbGV2ZWwnLCAnY2h1bmtfc2l6ZScgYW5kICdjb21wb25lbnRfc2l6ZScuCisKKyAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGFycmF5IGJlZm9yZSByZWR1Y2luZworICAgICB0aGUgbnVtYmVyIG9mIGRldmljZXMgaW4gYSByYWlkNC81LzYsIG9yIHRvIHN1cHBvcnQgZXh0ZXJuYWwKKyAgICAgbWV0YWRhdGEgZm9ybWF0cyB3aGljaCBtYW5kYXRlIHN1Y2ggY2xpcHBpbmcuCisKICAgcmVzaGFwZV9wb3NpdGlvbgogICAgICBUaGlzIGlzIGVpdGhlciAibm9uZSIgb3IgYSBzZWN0b3IgbnVtYmVyIHdpdGhpbiB0aGUgZGV2aWNlcyBvZgogICAgICB0aGUgYXJyYXkgd2hlcmUgInJlc2hhcGUiIGlzIHVwIHRvLiAgSWYgdGhpcyBpcyBzZXQsIHRoZSB0aHJlZQpAQCAtMjA3LDYgKzIyNSwxMSBAQAogICAgICBhYm91dCB0aGUgYXJyYXkuICBJdCBjYW4gYmUgMC45MCAodHJhZGl0aW9uYWwgZm9ybWF0KSwgMS4wLCAxLjEsCiAgICAgIDEuMiAobmV3ZXIgZm9ybWF0IGluIHZhcnlpbmcgbG9jYXRpb25zKSBvciAibm9uZSIgaW5kaWNhdGluZyB0aGF0CiAgICAgIHRoZSBrZXJuZWwgaXNuJ3QgbWFuYWdpbmcgbWV0YWRhdGEgYXQgYWxsLgorICAgICBBbHRlcm5hdGVseSBpdCBjYW4gYmUgImV4dGVybmFsOiIgZm9sbG93ZWQgYnkgYSBzdHJpbmcgd2hpY2gKKyAgICAgaXMgc2V0IGJ5IHVzZXItc3BhY2UuICBUaGlzIGluZGljYXRlcyB0aGF0IG1ldGFkYXRhIGlzIG1hbmFnZWQKKyAgICAgYnkgYSB1c2VyLXNwYWNlIHByb2dyYW0uICBBbnkgZGV2aWNlIGZhaWx1cmUgb3Igb3RoZXIgZXZlbnQgdGhhdAorICAgICByZXF1aXJlcyBhIG1ldGFkYXRhIHVwZGF0ZSB3aWxsIGNhdXNlIGFycmF5IGFjdGl2aXR5IHRvIGJlCisgICAgIHN1c3BlbmRlZCB1bnRpbCB0aGUgZXZlbnQgaXMgYWNrbm93bGVkZ2VkLgogCiAgIHJlc3luY19zdGFydAogICAgICBUaGUgcG9pbnQgYXQgd2hpY2ggcmVzeW5jIHNob3VsZCBzdGFydC4gIElmIG5vIHJlc3luYyBpcyBuZWVkZWQsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pc2wyOTAwMyBiL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2lzbDI5MDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZmY1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pc2wyOTAwMwpAQCAtMCwwICsxLDYyIEBACitLZXJuZWwgZHJpdmVyIGlzbDI5MDAzCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorKiBJbnRlcnNpbCBJU0wyOTAwMworUHJlZml4OiAnaXNsMjkwMDMnCitBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZQorRGF0YXNoZWV0OgoraHR0cDovL3d3dy5pbnRlcnNpbC5jb20vZGF0YS9mbi9mbjc0NjQucGRmCisKK0F1dGhvcjogRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KK1RoZSBJU0wyOTAwMyBpcyBhbiBpbnRlZ3JhdGVkIGxpZ2h0IHNlbnNvciB3aXRoIGEgMTYtYml0IGludGVncmF0aW5nIHR5cGUKK0FEQywgSTJDIHVzZXIgcHJvZ3JhbW1hYmxlIGx1eCByYW5nZSBzZWxlY3QgZm9yIG9wdGltaXplZCBjb3VudHMvbHV4LCBhbmQKK0kyQyBtdWx0aS1mdW5jdGlvbiBjb250cm9sIGFuZCBtb25pdG9yaW5nIGNhcGFiaWxpdGllcy4gVGhlIGludGVybmFsIEFEQworcHJvdmlkZXMgMTYtYml0IHJlc29sdXRpb24gd2hpbGUgcmVqZWN0aW5nIDUwSHogYW5kIDYwSHogZmxpY2tlciBjYXVzZWQgYnkKK2FydGlmaWNpYWwgbGlnaHQgc291cmNlcy4KKworVGhlIGRyaXZlciBhbGxvd3MgdG8gc2V0IHRoZSBsdXggcmFuZ2UsIHRoZSBiaXQgcmVzb2x1dGlvbiwgdGhlIG9wZXJhdGlvbmFsCittb2RlIChzZWUgYmVsb3cpIGFuZCB0aGUgcG93ZXIgc3RhdGUgb2YgZGV2aWNlIGFuZCBjYW4gcmVhZCB0aGUgY3VycmVudCBsdXgKK3ZhbHVlLCBvZiBjb3Vyc2UuCisKKworRGV0ZWN0aW9uCistLS0tLS0tLS0KKworVGhlIElTTDI5MDAzIGRvZXMgbm90IGhhdmUgYW4gSUQgcmVnaXN0ZXIgd2hpY2ggY291bGQgYmUgdXNlZCB0byBpZGVudGlmeQoraXQsIHNvIHRoZSBkZXRlY3Rpb24gcm91dGluZSB3aWxsIGp1c3QgdHJ5IHRvIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZCBJMkMKK2FkZGVzcyBhbmQgY29uc2lkZXIgdGhlIGRldmljZSB0byBiZSBwcmVzZW50IGFzIHNvb24gYXMgaXQgQUNLcyB0aGUKK3RyYW5zZmVyLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworcmFuZ2U6CisJMDogMCBsdXggdG8gMTAwMCBsdXggKGRlZmF1bHQpCisJMTogMCBsdXggdG8gNDAwMCBsdXgKKwkyOiAwIGx1eCB0byAxNiwwMDAgbHV4CisJMzogMCBsdXggdG8gNjQsMDAwIGx1eAorCityZXNvbHV0aW9uOgorCTA6IDJeMTYgY3ljbGVzIChkZWZhdWx0KQorCTE6IDJeMTIgY3ljbGVzCisJMjogMl44IGN5Y2xlcworCTM6IDJeNCBjeWNsZXMKKworbW9kZToKKwkwOiBkaW9kZTEncyBjdXJyZW50ICh1bnNpZ25lZCAxNmJpdCkgKGRlZmF1bHQpCisJMTogZGlvZGUxJ3MgY3VycmVudCAodW5zaWduZWQgMTZiaXQpCisJMjogZGlmZmVyZW5jZSBiZXR3ZWVuIGRpb2RlcyAobDEgLSBsMiwgc2lnbmVkIDE1Yml0KQorCitwb3dlcl9zdGF0ZToKKwkwOiBkZXZpY2UgaXMgZGlzYWJsZWQgKGRlZmF1bHQpCisJMTogZGV2aWNlIGlzIGVuYWJsZWQKKworbHV4IChyZWFkIG9ubHkpOgorCXJldHVybnMgdGhlIHZhbHVlIGZyb20gdGhlIGxhc3Qgc2Vuc29yIHJlYWRpbmcKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZTI5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdnhnZS50eHQKQEAgLTAsMCArMSwxMDAgQEAKK05ldGVyaW9uJ3MgKEZvcm1lcmx5IFMyaW8pIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIFNlcnZlciBBZGFwdGVyIExpbnV4IGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbnRzCistLS0tLS0tLQorCisxKSBJbnRyb2R1Y3Rpb24KKzIpIEZlYXR1cmVzIHN1cHBvcnRlZAorMykgQ29uZmlndXJhYmxlIGRyaXZlciBwYXJhbWV0ZXJzCis0KSBUcm91Ymxlc2hvb3RpbmcKKworMSkgSW50cm9kdWN0aW9uOgorLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBMaW51eCBkcml2ZXIgc3VwcG9ydHMgYWxsIE5ldGVyaW9uJ3MgWDMxMDAgc2VyaWVzIDEwIEdiRSBQQ0llIEkvTworVmlydHVhbGl6ZWQgU2VydmVyIGFkYXB0ZXJzLgorVGhlIFgzMTAwIHNlcmllcyBzdXBwb3J0cyBmb3VyIG1vZGVzIG9mIG9wZXJhdGlvbiwgY29uZmlndXJhYmxlIHZpYQorZmlybXdhcmUgLQorCVNpbmdsZSBmdW5jdGlvbiBtb2RlCisJTXVsdGkgZnVuY3Rpb24gbW9kZQorCVNSSU9WIG1vZGUKKwlNUklPViBtb2RlCitUaGUgZnVuY3Rpb25zIHNoYXJlIGEgMTBHYkUgbGluayBhbmQgdGhlIHBjaS1lIGJ1cywgYnV0IGhhcmRseSBhbnl0aGluZyBlbHNlCitpbnNpZGUgdGhlIEFTSUMuIEZlYXR1cmVzIGxpa2UgaW5kZXBlbmRlbnQgaHcgcmVzZXQsIHN0YXRpc3RpY3MsIGJhbmR3aWR0aC8KK3ByaW9yaXR5IGFsbG9jYXRpb24gYW5kIGd1YXJhbnRlZXMsIEdSTywgVFNPLCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBldGMgYXJlCitzdXBwb3J0ZWQgaW5kZXBlbmRlbnRseSBvbiBlYWNoIGZ1bmN0aW9uLgorCisoU2VlIGJlbG93IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGZvciBib3RoIElQdjQgYW5kIElQdjYpCisKKzIpIEZlYXR1cmVzIHN1cHBvcnRlZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaSkgICBTaW5nbGUgZnVuY3Rpb24gbW9kZSAodXAgdG8gMTcgcXVldWVzKQorCitpaSkgIE11bHRpIGZ1bmN0aW9uIG1vZGUgKHVwIHRvIDE3IGZ1bmN0aW9ucykKKworaWlpKSBQQ0ktU0lHJ3MgSS9PIFZpcnR1YWxpemF0aW9uCisgICAgICAgLSBTaW5nbGUgUm9vdCBtb2RlOiB2MS4wICh1cCB0byAxNyBmdW5jdGlvbnMpCisgICAgICAgLSBNdWx0aS1Sb290IG1vZGU6IHYxLjAgKHVwIHRvIDE3IGZ1bmN0aW9ucykKKworaXYpICBKdW1ibyBmcmFtZXMKKyAgICAgICBYMzEwMCBTZXJpZXMgc3VwcG9ydHMgTVRVIHVwIHRvIDk2MDAgYnl0ZXMsIG1vZGlmaWFibGUgdXNpbmcKKyAgICAgICBpZmNvbmZpZyBjb21tYW5kLgorCit2KSAgIE9mZmxvYWRzIHN1cHBvcnRlZDogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBDaGVja3N1bSBvZmZsb2FkIChUQ1AvVURQL0lQKSBvbiB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocworICAgICAgIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCAoVFNPKSBvbiB0cmFuc21pdCBwYXRoCisgICAgICAgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgb24gcmVjZWl2ZSBwYXRoCisKK3ZpKSAgTVNJLVg6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgUmVzdWx0aW5nIGluIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgKHVwIHRvIDclIG9uIGNlcnRhaW4KKyAgICAgICBwbGF0Zm9ybXMpLgorCit2aWkpIE5BUEk6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgRm9yIGJldHRlciBSeCBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4KKwordmlpaSlSVEggKFJlY2VpdmUgVHJhZmZpYyBIYXNoKTogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBSZWNlaXZlIHNpZGUgc3RlZXJpbmcgZm9yIGJldHRlciBzY2FsaW5nLgorCitpeCkgIFN0YXRpc3RpY3MKKyAgICAgICBDb21wcmVoZW5zaXZlIE1BQy1sZXZlbCBhbmQgc29mdHdhcmUgc3RhdGlzdGljcyBkaXNwbGF5ZWQgdXNpbmcKKyAgICAgICAiZXRodG9vbCAtUyIgb3B0aW9uLgorCit4KSAgIE11bHRpcGxlIGhhcmR3YXJlIHF1ZXVlczogKEVuYWJsZWQgYnkgZGVmYXVsdCkKKyAgICAgICBVcCB0byAxNyBoYXJkd2FyZSBiYXNlZCB0cmFuc21pdCBhbmQgcmVjZWl2ZSBkYXRhIGNoYW5uZWxzLCB3aXRoCisgICAgICAgbXVsdGlwbGUgc3RlZXJpbmcgb3B0aW9ucyAodHJhbnNtaXQgbXVsdGlxdWV1ZSBlbmFibGVkIGJ5IGRlZmF1bHQpLgorCiszKSBDb25maWd1cmFibGUgZHJpdmVyIHBhcmFtZXRlcnM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2kpICBtYXhfY29uZmlnX2RldgorICAgICAgIFNwZWNpZmllcyBtYXhpbXVtIGRldmljZSBmdW5jdGlvbnMgdG8gYmUgZW5hYmxlZC4KKyAgICAgICBWYWxpZCByYW5nZTogMS04CisKK2lpKSBtYXhfY29uZmlnX3BvcnQKKyAgICAgICBTcGVjaWZpZXMgbnVtYmVyIG9mIHBvcnRzIHRvIGJlIGVuYWJsZWQuCisgICAgICAgVmFsaWQgcmFuZ2U6IDEsMgorICAgICAgIERlZmF1bHQ6IDEKKworaWlpKW1heF9jb25maWdfdnBhdGgKKyAgICAgICBTcGVjaWZpZXMgbWF4aW11bSBWUEFUSChzKSBjb25maWd1cmVkIGZvciBlYWNoIGRldmljZSBmdW5jdGlvbi4KKyAgICAgICBWYWxpZCByYW5nZTogMS0xNworCitpdikgdmxhbl90YWdfc3RyaXAKKyAgICAgICBFbmFibGVzL2Rpc2FibGVzIHZsYW4gdGFnIHN0cmlwcGluZyBmcm9tIGFsbCByZWNlaXZlZCB0YWdnZWQgZnJhbWVzIHRoYXQKKyAgICAgICBhcmUgbm90IHJlcGxpY2F0ZWQgYXQgdGhlIGludGVybmFsIEwyIHN3aXRjaC4KKyAgICAgICBWYWxpZCByYW5nZTogMCwxIChkaXNhYmxlZCwgZW5hYmxlZCByZXNwZWN0aXZlbHkpCisgICAgICAgRGVmYXVsdDogMQorCit2KSAgYWRkcl9sZWFybl9lbgorICAgICAgIEVuYWJsZSBsZWFybmluZyB0aGUgbWFjIGFkZHJlc3Mgb2YgdGhlIGd1ZXN0IE9TIGludGVyZmFjZSBpbgorICAgICAgIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LgorICAgICAgIFZhbGlkIHJhbmdlOiAwLDEgKGRpc2FibGVkLCBlbmFibGVkIHJlc3BlY3RpdmVseSkKKyAgICAgICBEZWZhdWx0OiAwCisKKzQpIFRyb3VibGVzaG9vdGluZzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmVzb2x2ZSBhbiBpc3N1ZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBvciBYMzEwMCBzZXJpZXMgYWRhcHRlciwgcGxlYXNlIGNvbGxlY3QKK3RoZSBzdGF0aXN0aWNzLCByZWdpc3RlciBkdW1wcyB1c2luZyBldGhvb2wsIHJlbGV2YW50IGxvZ3MgYW5kIGVtYWlsIHRoZW0gdG8KK3N1cHBvcnRAbmV0ZXJpb24uY29tLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKaW5kZXggY2M0NTMxMS4uMDczMmNkZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CkBAIC0zNSwzMCArMzUsMzAgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYSIsICJmc2wsZWxvLWRtYSI7Ci0JCXJlZyA9IDw4MmE4IDQ+OwotCQlyYW5nZXMgPSA8MCA4MTAwIDFhND47CisJCXJlZyA9IDwweDgyYTggND47CisJCXJhbmdlcyA9IDwwIDB4ODEwMCAweDFhND47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQlpbnRlcnJ1cHRzID0gPDQ3IDg+OworCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQljZWxsLWluZGV4ID0gPDA+OwogCQlkbWEtY2hhbm5lbEAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwotCQkJcmVnID0gPDAgODA+OworCQkJcmVnID0gPDAgMHg4MD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwotCQkJcmVnID0gPDgwIDgwPjsKKwkJCXJlZyA9IDwweDgwIDB4ODA+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEtY2hhbm5lbCIsICJmc2wsZWxvLWRtYS1jaGFubmVsIjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47Ci0JCQlyZWcgPSA8MTAwIDgwPjsKKwkJCXJlZyA9IDwweDEwMCAweDgwPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDM+OwotCQkJcmVnID0gPDE4MCA4MD47CisJCQlyZWcgPSA8MHgxODAgMHg4MD47CiAJCX07CiAJfTsKIApAQCAtOTMsMzYgKzkzLDM2IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKLQkJcmVnID0gPDIxMzAwIDQ+OwotCQlyYW5nZXMgPSA8MCAyMTEwMCAyMDA+OworCQlyZWcgPSA8MHgyMTMwMCA0PjsKKwkJcmFuZ2VzID0gPDAgMHgyMTEwMCAweDIwMD47CiAJCWNlbGwtaW5kZXggPSA8MD47CiAJCWRtYS1jaGFubmVsQDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MCA4MD47CisJCQlyZWcgPSA8MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQwLWRtYS1jaGFubmVsIiwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKLQkJCXJlZyA9IDw4MCA4MD47CisJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTUgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MTAwIDgwPjsKKwkJCXJlZyA9IDwweDEwMCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTYgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OwogCQl9OwogCQlkbWEtY2hhbm5lbEAxODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8MTgwIDgwPjsKKwkJCXJlZyA9IDwweDE4MCAweDgwPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCWludGVycnVwdHMgPSA8MTcgMj47CisJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDA4NDY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CkBAIC0wLDAgKzEsMjQgQEAKKyogRnJlZXNjYWxlIEVuaGFuY2VkIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciAoZVNESEMpCisKK1RoZSBFbmhhbmNlZCBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgcHJvdmlkZXMgYW4gaW50ZXJmYWNlCitmb3IgTU1DLCBTRCwgYW5kIFNESU8gdHlwZXMgb2YgbWVtb3J5IGNhcmRzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUKKyAgICAiZnNsLDxjaGlwPi1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyIgZm9yIE1QQzgzeHggcHJvY2Vzc29ycy4KKyAgICAiZnNsLDxjaGlwPi1lc2RoYyIsICJmc2wsbXBjODUzNi1lc2RoYyIgZm9yIE1QQzg1eHggcHJvY2Vzc29ycy4KKyAgLSByZWcgOiBzaG91bGQgY29udGFpbiBlU0RIQyByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aC4KKyAgLSBpbnRlcnJ1cHRzIDogc2hvdWxkIGNvbnRhaW4gZVNESEMgaW50ZXJydXB0LgorICAtIGludGVycnVwdC1wYXJlbnQgOiBpbnRlcnJ1cHQgc291cmNlIHBoYW5kbGUuCisgIC0gY2xvY2stZnJlcXVlbmN5IDogc3BlY2lmaWVzIGVTREhDIGJhc2UgY2xvY2sgZnJlcXVlbmN5LgorCitFeGFtcGxlOgorCitzZGhjaUAyZTAwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dAppbmRleCBhMmQ5NjM5Li41ZmY3NmM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKQEAgLTQsNDQgKzQsNTYgQEAKIGJlIHByb2dyYW1tZWQgaW4gQUM5NywgSTJTLCBsZWZ0LWp1c3RpZmllZCwgb3IgcmlnaHQtanVzdGlmaWVkIG1vZGVzLgogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlCSAgOiBjb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5pbmcgImZzbCxzc2kiCi0tIGNlbGwtaW5kZXgJICA6IHRoZSBTU0ksIDwwPiA9IFNTSTEsIDwxPiA9IFNTSTIsIGFuZCBzbyBvbgotLSByZWcJCSAgOiBvZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCi0tIGludGVycnVwdHMJICA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgYW5kIGIgaXMgYQotICAgICAgICAgICAgICAgICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQKLQkJICAgIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LiAgVGhpcyBzaG91bGQgYmUKLQkJICAgIGVuY29kZWQgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGluIHNlY3Rpb24gMikKLQkJICAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciB5b3UKLQkJICAgIGhhdmUuCi0tIGludGVycnVwdC1wYXJlbnQgOiB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgotLSBmc2wsbW9kZQkgIDogdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgU1NJIGludGVyZmFjZQotCQkgICAgImkycy1zbGF2ZSIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAiaTJzLW1hc3RlciIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgotCQkgICAgImxqLXNsYXZlIiAtIGxlZnQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQotCQkgICAgImxqLW1hc3RlciIgLSBsLmouIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKLQkJICAgICJyai1zbGF2ZSIgLSByaWdodC1qdXN0aWZpZWQgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAicmotbWFzdGVyIiAtIHIuai4sIFNTSSBpcyBjbG9jayBtYXN0ZXIKLQkJICAgICJhYzk3LXNsYXZlIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCi0JCSAgICAiYWM5Ny1tYXN0ZXIiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCi0tIGZzbCxwbGF5YmFjay1kbWE6IHBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgorLSBjb21wYXRpYmxlOiAgICAgICBDb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5zICJmc2wsc3NpIi4KKy0gY2VsbC1pbmRleDogICAgICAgVGhlIFNTSSwgPDA+ID0gU1NJMSwgPDE+ID0gU1NJMiwgYW5kIHNvIG9uLgorLSByZWc6ICAgICAgICAgICAgICBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlLgorLSBpbnRlcnJ1cHRzOiAgICAgICA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwgaW5mb3JtYXRpb24gZm9yIHRoZSBpbnRlcnJ1cHQuICBUaGlzIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBpbiBzZWN0aW9uIDIpCisgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgY29udHJvbGxlciB5b3UKKyAgICAgICAgICAgICAgICAgICAgaGF2ZS4KKy0gaW50ZXJydXB0LXBhcmVudDogVGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIGludGVycnVwdHMgZm9yIHRoaXMgZGV2aWNlLgorLSBmc2wsbW9kZTogICAgICAgICBUaGUgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSBTU0kgaW50ZXJmYWNlLgorICAgICAgICAgICAgICAgICAgICAiaTJzLXNsYXZlIiAtIEkyUyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgImkycy1tYXN0ZXIiIC0gSTJTIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgImxqLXNsYXZlIiAtIGxlZnQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAibGotbWFzdGVyIiAtIGwuai4gbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAicmotc2xhdmUiIC0gcmlnaHQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQorICAgICAgICAgICAgICAgICAgICAicmotbWFzdGVyIiAtIHIuai4sIFNTSSBpcyBjbG9jayBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgImFjOTctc2xhdmUiIC0gQUM5NyBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgImFjOTctbWFzdGVyIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgorLSBmc2wscGxheWJhY2stZG1hOiBQaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKICAgICAgICAgICAgICAgICAgICAgcGxheWJhY2sgb2YgYXVkaW8uICBUaGlzIGlzIHR5cGljYWxseSBkaWN0YXRlZCBieSBTT0MKICAgICAgICAgICAgICAgICAgICAgZGVzaWduLiAgU2VlIHRoZSBub3RlcyBiZWxvdy4KLS0gZnNsLGNhcHR1cmUtZG1hOiAgcGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCistIGZzbCxjYXB0dXJlLWRtYTogIFBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgogICAgICAgICAgICAgICAgICAgICBjYXB0dXJlIChyZWNvcmRpbmcpIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQKICAgICAgICAgICAgICAgICAgICAgYnkgU09DIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCistIGZzbCxmaWZvLWRlcHRoOiAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk9zLgorICAgICAgICAgICAgICAgICAgICBUaGlzIG51bWJlciBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlIGZvciBTRkNTUltURldNMF0uCistIGZzbCxzc2ktYXN5bmNocm9ub3VzOgorICAgICAgICAgICAgICAgICAgICBJZiBzcGVjaWZpZWQsIHRoZSBTU0kgaXMgdG8gYmUgcHJvZ3JhbW1lZCBpbiBhc3luY2hyb25vdXMKKyAgICAgICAgICAgICAgICAgICAgbW9kZS4gIEluIHRoaXMgbW9kZSwgcGlucyBTUkNLLCBTVENLLCBTUkZTLCBhbmQgU1RGUyBtdXN0CisgICAgICAgICAgICAgICAgICAgIGFsbCBiZSBjb25uZWN0ZWQgdG8gdmFsaWQgc2lnbmFscy4gIEluIHN5bmNocm9ub3VzIG1vZGUsCisgICAgICAgICAgICAgICAgICAgIFNSQ0sgYW5kIFNSRlMgYXJlIGlnbm9yZWQuICBBc3luY2hyb25vdXMgbW9kZSBhbGxvd3MKKyAgICAgICAgICAgICAgICAgICAgcGxheWJhY2sgYW5kIGNhcHR1cmUgdG8gdXNlIGRpZmZlcmVudCBzYW1wbGUgc2l6ZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIHNhbXBsZSByYXRlcy4gIFNvbWUgZHJpdmVycyBtYXkgcmVxdWlyZSB0aGF0IFNSQ0sgYW5kIFNUQ0sKKyAgICAgICAgICAgICAgICAgICAgYmUgY29ubmVjdGVkIHRvZ2V0aGVyLCBhbmQgU1JGUyBhbmQgU1RGUyBiZSBjb25uZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG9nZXRoZXIuICBUaGlzIHdvdWxkIHN0aWxsIGFsbG93IGRpZmZlcmVudCBzYW1wbGUgc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgIGJ1dCBub3QgZGlmZmVyZW50IHNhbXBsZSByYXRlcy4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKLS0gY29kZWMtaGFuZGxlCSAgOiBwaGFuZGxlIHRvIGEgJ2NvZGVjJyBub2RlIHRoYXQgZGVmaW5lcyBhbiBhdWRpbwotCQkgICAgY29kZWMgY29ubmVjdGVkIHRvIHRoaXMgU1NJLiAgVGhpcyBub2RlIGlzIHR5cGljYWxseQotCQkgICAgYSBjaGlsZCBvZiBhbiBJMkMgb3Igb3RoZXIgY29udHJvbCBub2RlLgorLSBjb2RlYy1oYW5kbGU6ICAgICBQaGFuZGxlIHRvIGEgJ2NvZGVjJyBub2RlIHRoYXQgZGVmaW5lcyBhbiBhdWRpbworICAgICAgICAgICAgICAgICAgICBjb2RlYyBjb25uZWN0ZWQgdG8gdGhpcyBTU0kuICBUaGlzIG5vZGUgaXMgdHlwaWNhbGx5CisgICAgICAgICAgICAgICAgICAgIGEgY2hpbGQgb2YgYW4gSTJDIG9yIG90aGVyIGNvbnRyb2wgbm9kZS4KIAogQ2hpbGQgJ2NvZGVjJyBub2RlIHJlcXVpcmVkIHByb3BlcnRpZXM6Ci0tIGNvbXBhdGlibGUJICA6IGNvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGNvZGVjCistIGNvbXBhdGlibGU6ICAgICAgIENvbXBhdGlibGUgbGlzdCwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGNvZGVjCiAKIENoaWxkICdjb2RlYycgbm9kZSBvcHRpb25hbCBwcm9wZXJ0aWVzOgotLSBjbG9jay1mcmVxdWVuY3kgIDogVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW5wdXQgY2xvY2ssIHdoaWNoIHR5cGljYWxseQotICAgICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSBhbiBvbi1ib2FyZCBkZWRpY2F0ZWQgb3NjaWxsYXRvci4KKy0gY2xvY2stZnJlcXVlbmN5OiAgVGhlIGZyZXF1ZW5jeSBvZiB0aGUgaW5wdXQgY2xvY2ssIHdoaWNoIHR5cGljYWxseSBjb21lcworICAgICAgICAgICAgICAgICAgICBmcm9tIGFuIG9uLWJvYXJkIGRlZGljYXRlZCBvc2NpbGxhdG9yLgogCiBOb3RlcyBvbiBmc2wscGxheWJhY2stZG1hIGFuZCBmc2wsY2FwdHVyZS1kbWE6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbW1jLXNwaS1zbG90LnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbW1jLXNwaS1zbG90LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzlhYzI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0CkBAIC0wLDAgKzEsMjMgQEAKK01NQy9TRC9TRElPIHNsb3QgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGEgU1BJIGJ1cworCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJtbWMtc3BpLXNsb3QiLgorLSByZWcgOiBzaG91bGQgc3BlY2lmeSBTUEkgYWRkcmVzcyAoY2hpcC1zZWxlY3QgbnVtYmVyKS4KKy0gc3BpLW1heC1mcmVxdWVuY3kgOiBtYXhpbXVtIGZyZXF1ZW5jeSBmb3IgdGhpcyBkZXZpY2UgKEh6KS4KKy0gdm9sdGFnZS1yYW5nZXMgOiB0d28gY2VsbHMgYXJlIHJlcXVpcmVkLCBmaXJzdCBjZWxsIHNwZWNpZmllcyBtaW5pbXVtCisgIHNsb3Qgdm9sdGFnZSAobVYpLCBzZWNvbmQgY2VsbCBzcGVjaWZpZXMgbWF4aW11bSBzbG90IHZvbHRhZ2UgKG1WKS4KKyAgU2V2ZXJhbCByYW5nZXMgY291bGQgYmUgc3BlY2lmaWVkLgorLSBncGlvcyA6IChvcHRpb25hbCkgbWF5IHNwZWNpZnkgR1BJT3MgaW4gdGhpcyBvcmRlcjogQ2FyZC1EZXRlY3QgR1BJTywKKyAgV3JpdGUtUHJvdGVjdCBHUElPLgorCitFeGFtcGxlOgorCisJbW1jLXNsb3RAMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjNyZGItbW1jLXNsb3QiLAorCQkJICAgICAibW1jLXNwaS1zbG90IjsKKwkJcmVnID0gPDA+OworCQlncGlvcyA9IDwmcWVfcGlvX2QgMTQgMQorCQkJICZxZV9waW9fZCAxNSAwPjsKKwkJdm9sdGFnZS1yYW5nZXMgPSA8MzMwMCAzMzAwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQgYi9Eb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJjNTBmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dApAQCAtMCwwICsxLDE3NCBAQAorCQkgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkgICAgIFNMT1cgV09SSyBJVEVNIEVYRUNVVElPTiBUSFJFQUQgUE9PTAorCQkgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeTogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KKworVGhlIHNsb3cgd29yayBpdGVtIGV4ZWN1dGlvbiB0aHJlYWQgcG9vbCBpcyBhIHBvb2wgb2YgdGhyZWFkcyBmb3IgcGVyZm9ybWluZwordGhpbmdzIHRoYXQgdGFrZSBhIHJlbGF0aXZlbHkgbG9uZyB0aW1lLCBzdWNoIGFzIG1ha2luZyBta2RpciBjYWxscy4KK1R5cGljYWxseSwgd2hlbiBwcm9jZXNzaW5nIHNvbWV0aGluZywgdGhlc2UgaXRlbXMgd2lsbCBzcGVuZCBhIGxvdCBvZiB0aW1lCitibG9ja2luZyBhIHRocmVhZCBvbiBJL08sIHRodXMgbWFraW5nIHRoYXQgdGhyZWFkIHVuYXZhaWxhYmxlIGZvciBkb2luZyBvdGhlcgord29yay4KKworVGhlIHN0YW5kYXJkIHdvcmtxdWV1ZSBtb2RlbCBpcyB1bnN1aXRhYmxlIGZvciB0aGlzIGNsYXNzIG9mIHdvcmsgaXRlbSBhcyB0aGF0CitsaW1pdHMgdGhlIG93bmVyIHRvIGEgc2luZ2xlIHRocmVhZCBvciBhIHNpbmdsZSB0aHJlYWQgcGVyIENQVS4gIEZvciBzb21lCit0YXNrcywgaG93ZXZlciwgbW9yZSB0aHJlYWRzIC0gb3IgZmV3ZXIgLSBhcmUgcmVxdWlyZWQuCisKK1RoZXJlIGlzIGp1c3Qgb25lIHBvb2wgcGVyIHN5c3RlbS4gIEl0IGNvbnRhaW5zIG5vIHRocmVhZHMgdW5sZXNzIHNvbWV0aGluZword2FudHMgdG8gdXNlIGl0IC0gYW5kIHRoYXQgc29tZXRoaW5nIG11c3QgcmVnaXN0ZXIgaXRzIGludGVyZXN0IGZpcnN0LiAgV2hlbgordGhlIHBvb2wgaXMgYWN0aXZlLCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgaXQgY29udGFpbnMgaXMgZHluYW1pYywgdmFyeWluZworYmV0d2VlbiBhIG1heGltdW0gYW5kIG1pbmltdW0gc2V0dGluZywgZGVwZW5kaW5nIG9uIHRoZSBsb2FkLgorCisKKz09PT09PT09PT09PT09PT09PT09CitDTEFTU0VTIE9GIFdPUksgSVRFTQorPT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBwb29sIHN1cHBvcnQgdHdvIGNsYXNzZXMgb2Ygd29yayBpdGVtczoKKworICgqKSBTbG93IHdvcmsgaXRlbXMuCisKKyAoKikgVmVyeSBzbG93IHdvcmsgaXRlbXMuCisKK1RoZSBmb3JtZXIgYXJlIGV4cGVjdGVkIHRvIGZpbmlzaCBtdWNoIHF1aWNrZXIgdGhhbiB0aGUgbGF0dGVyLgorCitBbiBvcGVyYXRpb24gb2YgdGhlIHZlcnkgc2xvdyBjbGFzcyBtYXkgZG8gYSBiYXRjaCBjb21iaW5hdGlvbiBvZiBzZXZlcmFsCitsb29rdXBzLCBta2RpcnMsIGFuZCBhIGNyZWF0ZSBmb3IgaW5zdGFuY2UuCisKK0FuIG9wZXJhdGlvbiBvZiB0aGUgb3JkaW5hcmlseSBzbG93IGNsYXNzIG1heSwgZm9yIGV4YW1wbGUsIHdyaXRlIHN0dWZmIG9yCitleHBhbmQgZmlsZXMsIHByb3ZpZGVkIHRoZSB0aW1lIHRha2VuIHRvIGRvIHNvIGlzbid0IHRvbyBsb25nLgorCitPcGVyYXRpb25zIG9mIGJvdGggdHlwZXMgbWF5IHNsZWVwIGR1cmluZyBleGVjdXRpb24sIHRodXMgdHlpbmcgdXAgdGhlIHRocmVhZAorbG9hbmVkIHRvIGl0LgorCisKK1RIUkVBRC1UTy1DTEFTUyBBTExPQ0FUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3QgYWxsIHRoZSB0aHJlYWRzIGluIHRoZSBwb29sIGFyZSBhdmFpbGFibGUgdG8gd29yayBvbiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KK1RoZSBudW1iZXIgd2lsbCBiZSBiZXR3ZWVuIG9uZSBhbmQgb25lIGZld2VyIHRoYW4gdGhlIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcy4KK1RoaXMgaXMgY29uZmlndXJhYmxlIChzZWUgdGhlICJQb29sIENvbmZpZ3VyYXRpb24iIHNlY3Rpb24pLgorCitBbGwgdGhlIHRocmVhZHMgYXJlIGF2YWlsYWJsZSB0byB3b3JrIG9uIG9yZGluYXJpbHkgc2xvdyB3b3JrIGl0ZW1zLCBidXQgYQorcGVyY2VudGFnZSBvZiB0aGUgdGhyZWFkcyB3aWxsIHByZWZlciB0byB3b3JrIG9uIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorCitUaGUgY29uZmlndXJhdGlvbiBlbnN1cmVzIHRoYXQgYXQgbGVhc3Qgb25lIHRocmVhZCB3aWxsIGJlIGF2YWlsYWJsZSB0byB3b3JrIG9uCit2ZXJ5IHNsb3cgd29yayBpdGVtcywgYW5kIGF0IGxlYXN0IG9uZSB0aHJlYWQgd2lsbCBiZSBhdmFpbGFibGUgdGhhdCB3b24ndCB3b3JrCitvbiB2ZXJ5IHNsb3cgd29yayBpdGVtcyBhdCBhbGwuCisKKworPT09PT09PT09PT09PT09PT09PT09CitVU0lORyBTTE9XIFdPUksgSVRFTVMKKz09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdGx5LCBhIG1vZHVsZSBvciBzdWJzeXN0ZW0gd2FudGluZyB0byBtYWtlIHVzZSBvZiBzbG93IHdvcmsgaXRlbXMgbXVzdAorcmVnaXN0ZXIgaXRzIGludGVyZXN0OgorCisJIGludCByZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCitUaGlzIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSAtdmUgZXJyb3IgdXBvbiBmYWlsdXJlLgorCisKK1Nsb3cgd29yayBpdGVtcyBtYXkgdGhlbiBiZSBzZXQgdXAgYnk6CisKKyAoMSkgRGVjbGFyaW5nIGEgc2xvd193b3JrIHN0cnVjdCB0eXBlIHZhcmlhYmxlOgorCisJI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgorCisJc3RydWN0IHNsb3dfd29yayBteWl0ZW07CisKKyAoMikgRGVjbGFyaW5nIHRoZSBvcGVyYXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgaXRlbToKKworCXN0cnVjdCBzbG93X3dvcmtfb3BzIG15aXRlbV9vcHMgPSB7CisJCS5nZXRfcmVmID0gbXlpdGVtX2dldF9yZWYsCisJCS5wdXRfcmVmID0gbXlpdGVtX3B1dF9yZWYsCisJCS5leGVjdXRlID0gbXlpdGVtX2V4ZWN1dGUsCisJfTsKKworICAgICBbKl0gRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG9wcywgc2VlIHNlY3Rpb24gIkl0ZW0gT3BlcmF0aW9ucyIuCisKKyAoMykgSW5pdGlhbGlzaW5nIHRoZSBpdGVtOgorCisJc2xvd193b3JrX2luaXQoJm15aXRlbSwgJm15aXRlbV9vcHMpOworCisgICAgIG9yOgorCisJdnNsb3dfd29ya19pbml0KCZteWl0ZW0sICZteWl0ZW1fb3BzKTsKKworICAgICBkZXBlbmRpbmcgb24gaXRzIGNsYXNzLgorCitBIHN1aXRhYmx5IHNldCB1cCB3b3JrIGl0ZW0gY2FuIHRoZW4gYmUgZW5xdWV1ZWQgZm9yIHByb2Nlc3Npbmc6CisKKwlpbnQgcmV0ID0gc2xvd193b3JrX2VucXVldWUoJm15aXRlbSk7CisKK1RoaXMgd2lsbCByZXR1cm4gYSAtdmUgZXJyb3IgaWYgdGhlIHRocmVhZCBwb29sIGlzIHVuYWJsZSB0byBnYWluIGEgcmVmZXJlbmNlCitvbiB0aGUgaXRlbSwgMCBvdGhlcndpc2UuCisKKworVGhlIGl0ZW1zIGFyZSByZWZlcmVuY2UgY291bnRlZCwgc28gdGhlcmUgb3VnaHQgdG8gYmUgbm8gbmVlZCBmb3IgYSBmbHVzaAorb3BlcmF0aW9uLiAgV2hlbiBhbGwgYSBtb2R1bGUncyBzbG93IHdvcmsgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYW5kIHRoZQorbW9kdWxlIGhhcyBubyBmdXJ0aGVyIGludGVyZXN0IGluIHRoZSBmYWNpbGl0eSwgaXQgc2hvdWxkIHVucmVnaXN0ZXIgaXRzCitpbnRlcmVzdDoKKworCXNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoKTsKKworCis9PT09PT09PT09PT09PT0KK0lURU0gT1BFUkFUSU9OUworPT09PT09PT09PT09PT09CisKK0VhY2ggd29yayBpdGVtIHJlcXVpcmVzIGEgdGFibGUgb2Ygb3BlcmF0aW9ucyBvZiB0eXBlIHN0cnVjdCBzbG93X3dvcmtfb3BzLgorQWxsIG1lbWJlcnMgYXJlIHJlcXVpcmVkOgorCisgKCopIEdldCBhIHJlZmVyZW5jZSBvbiBhbiBpdGVtOgorCisJaW50ICgqZ2V0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7CisKKyAgICAgVGhpcyBhbGxvd3MgdGhlIHRocmVhZCBwb29sIHRvIGF0dGVtcHQgdG8gcGluIGFuIGl0ZW0gYnkgZ2V0dGluZyBhCisgICAgIHJlZmVyZW5jZSBvbiBpdC4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAwIGlmIHRoZSByZWZlcmVuY2Ugd2FzCisgICAgIGdyYW50ZWQsIG9yIGEgLXZlIGVycm9yIG90aGVyd2lzZS4gIElmIGFuIGVycm9yIGlzIHJldHVybmVkLAorICAgICBzbG93X3dvcmtfZW5xdWV1ZSgpIHdpbGwgZmFpbC4KKworICAgICBUaGUgcmVmZXJlbmNlIGlzIGhlbGQgd2hpbHN0IHRoZSBpdGVtIGlzIHF1ZXVlZCBhbmQgd2hpbHN0IGl0IGlzIGJlaW5nCisgICAgIGV4ZWN1dGVkLiAgVGhlIGl0ZW0gbWF5IHRoZW4gYmUgcmVxdWV1ZWQgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UgaGVsZCwgb3IKKyAgICAgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIHJlbGVhc2VkLgorCisgKCopIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYW4gaXRlbToKKworCXZvaWQgKCpwdXRfcmVmKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKKworICAgICBUaGlzIGFsbG93cyB0aGUgdGhyZWFkIHBvb2wgdG8gdW5waW4gYW4gaXRlbSBieSByZWxlYXNpbmcgdGhlIHJlZmVyZW5jZSBvbgorICAgICBpdC4gIFRoZSB0aHJlYWQgcG9vbCB3aWxsIG5vdCB0b3VjaCB0aGUgaXRlbSBhZ2FpbiBvbmNlIHRoaXMgaGFzIGJlZW4KKyAgICAgY2FsbGVkLgorCisgKCopIEV4ZWN1dGUgYW4gaXRlbToKKworCXZvaWQgKCpleGVjdXRlKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKKworICAgICBUaGlzIHNob3VsZCBwZXJmb3JtIHRoZSB3b3JrIHJlcXVpcmVkIG9mIHRoZSBpdGVtLiAgSXQgbWF5IHNsZWVwLCBpdCBtYXkKKyAgICAgcGVyZm9ybSBkaXNrIEkvTyBhbmQgaXQgbWF5IHdhaXQgZm9yIGxvY2tzLgorCisKKz09PT09PT09PT09PT09PT09PQorUE9PTCBDT05GSUdVUkFUSU9OCis9PT09PT09PT09PT09PT09PT0KKworVGhlIHNsb3ctd29yayB0aHJlYWQgcG9vbCBoYXMgYSBudW1iZXIgb2YgY29uZmlndXJhYmxlczoKKworICgqKSAvcHJvYy9zeXMva2VybmVsL3Nsb3ctd29yay9taW4tdGhyZWFkcworCisgICAgIFRoZSBtaW5pbXVtIG51bWJlciBvZiB0aHJlYWRzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBwb29sIHdoaWxzdCBpdCBpcyBpbgorICAgICB1c2UuICBUaGlzIG1heSBiZSBhbnl3aGVyZSBiZXR3ZWVuIDIgYW5kIG1heC10aHJlYWRzLgorCisgKCopIC9wcm9jL3N5cy9rZXJuZWwvc2xvdy13b3JrL21heC10aHJlYWRzCisKKyAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBzaG91bGQgaW4gdGhlIHBvb2wuICBUaGlzIG1heSBiZQorICAgICBhbnl3aGVyZSBiZXR3ZWVuIG1pbi10aHJlYWRzIGFuZCAyNTUgb3IgTlJfQ1BVUyAqIDIsIHdoaWNoZXZlciBpcyBncmVhdGVyLgorCisgKCopIC9wcm9jL3N5cy9rZXJuZWwvc2xvdy13b3JrL3ZzbG93LXBlcmNlbnRhZ2UKKworICAgICBUaGUgcGVyY2VudGFnZSBvZiBhY3RpdmUgdGhyZWFkcyBpbiB0aGUgcG9vbCB0aGF0IG1heSBiZSB1c2VkIHRvIGV4ZWN1dGUKKyAgICAgdmVyeSBzbG93IHdvcmsgaXRlbXMuICBUaGlzIG1heSBiZSBiZXR3ZWVuIDEgYW5kIDk5LiAgVGhlIHJlc3VsdGFudCBudW1iZXIKKyAgICAgaXMgYm91bmRlZCB0byBiZXR3ZWVuIDEgYW5kIG9uZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgb2YgYWN0aXZlIHRocmVhZHMuCisgICAgIFRoaXMgZW5zdXJlcyB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHRocmVhZCB0aGF0IGNhbiBwcm9jZXNzIHZlcnkKKyAgICAgc2xvdyB3b3JrIGl0ZW1zLCBhbmQgYWx3YXlzIGF0IGxlYXN0IG9uZSB0aHJlYWQgdGhhdCB3b24ndC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKaW5kZXggYTIwYTkwNi4uMTI4NmY0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvMDAtSU5ERVgKQEAgLTEwLDYgKzEwLDggQEAKIAktIGRvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9mcy8qLgoga2VybmVsLnR4dAogCS0gZG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2tlcm5lbC8qLgorbmV0LnR4dAorCS0gZG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL25ldC8qLgogc3VucnBjLnR4dAogCS0gZG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL3N1bnJwYy8qLgogdm0udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQKaW5kZXggZjk5MjU0My4uMTQ1ODQ0OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dApAQCAtMSw1ICsxLDYgQEAKIERvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9mcy8qCWtlcm5lbCB2ZXJzaW9uIDIuMi4xMAogCShjKSAxOTk4LCAxOTk5LCAgUmlrIHZhbiBSaWVsIDxyaWVsQG5sLmxpbnV4Lm9yZz4KKwkoYykgMjAwOSwgICAgICAgIFNoZW4gRmVuZzxzaGVuQGNuLmZ1aml0c3UuY29tPgogCiBGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgogCkBAIC0xNCw3ICsxNSwxMiBAQAogc3lzdGVtLCBpdCBpcyBhZHZpc2FibGUgdG8gcmVhZCBib3RoIGRvY3VtZW50YXRpb24gYW5kIHNvdXJjZQogYmVmb3JlIGFjdHVhbGx5IG1ha2luZyBhZGp1c3RtZW50cy4KIAorMS4gL3Byb2Mvc3lzL2ZzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy9mczoKKy0gYWlvLW1heC1ucgorLSBhaW8tbnIKIC0gZGVudHJ5LXN0YXRlCiAtIGRxdW90LW1heAogLSBkcXVvdC1ucgpAQCAtMzAsOCArMzYsMTUgQEAKIC0gc3VwZXItbWF4CiAtIHN1cGVyLW5yCiAKLURvY3VtZW50YXRpb24gZm9yIHRoZSBmaWxlcyBpbiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgaXMKLWluIERvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0LgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYWlvLW5yICYgYWlvLW1heC1ucjoKKworYWlvLW5yIGlzIHRoZSBydW5uaW5nIHRvdGFsIG9mIHRoZSBudW1iZXIgb2YgZXZlbnRzIHNwZWNpZmllZCBvbiB0aGUKK2lvX3NldHVwIHN5c3RlbSBjYWxsIGZvciBhbGwgY3VycmVudGx5IGFjdGl2ZSBhaW8gY29udGV4dHMuICBJZiBhaW8tbnIKK3JlYWNoZXMgYWlvLW1heC1uciB0aGVuIGlvX3NldHVwIHdpbGwgZmFpbCB3aXRoIEVBR0FJTi4gIE5vdGUgdGhhdAorcmFpc2luZyBhaW8tbWF4LW5yIGRvZXMgbm90IHJlc3VsdCBpbiB0aGUgcHJlLWFsbG9jYXRpb24gb3IgcmUtc2l6aW5nCitvZiBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcy4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTc4LDMgKzE5MSw2MCBAQAogYWlvLW5yIGNhbiBncm93IHRvLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzIuIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEb2N1bWVudGF0aW9uIGZvciB0aGUgZmlsZXMgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGlzCitpbiBEb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dC4KKworCiszLiAvcHJvYy9zeXMvZnMvbXF1ZXVlIC0gUE9TSVggbWVzc2FnZSBxdWV1ZXMgZmlsZXN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgIm1xdWV1ZSIgIGZpbGVzeXN0ZW0gcHJvdmlkZXMgIHRoZSBuZWNlc3Nhcnkga2VybmVsIGZlYXR1cmVzIHRvIGVuYWJsZSB0aGUKK2NyZWF0aW9uIG9mIGEgIHVzZXIgc3BhY2UgIGxpYnJhcnkgdGhhdCAgaW1wbGVtZW50cyAgdGhlICBQT1NJWCBtZXNzYWdlIHF1ZXVlcworQVBJIChhcyBub3RlZCBieSB0aGUgIE1TRyB0YWcgaW4gdGhlICBQT1NJWCAxMDAzLjEtMjAwMSB2ZXJzaW9uICBvZiB0aGUgU3lzdGVtCitJbnRlcmZhY2VzIHNwZWNpZmljYXRpb24uKQorCitUaGUgIm1xdWV1ZSIgZmlsZXN5c3RlbSBjb250YWlucyB2YWx1ZXMgZm9yIGRldGVybWluaW5nL3NldHRpbmcgIHRoZSBhbW91bnQgb2YKK3Jlc291cmNlcyB1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KKworL3Byb2Mvc3lzL2ZzL21xdWV1ZS9xdWV1ZXNfbWF4IGlzIGEgcmVhZC93cml0ZSAgZmlsZSBmb3IgIHNldHRpbmcvZ2V0dGluZyAgdGhlCittYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlIHF1ZXVlcyBhbGxvd2VkIG9uIHRoZSBzeXN0ZW0uCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvbXNnX21heCAgaXMgIGEgIHJlYWQvd3JpdGUgZmlsZSAgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQorbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gYSBxdWV1ZSB2YWx1ZS4gIEluIGZhY3QgaXQgaXMgdGhlIGxpbWl0aW5nIHZhbHVlCitmb3IgYW5vdGhlciAodXNlcikgbGltaXQgd2hpY2ggaXMgc2V0IGluIG1xX29wZW4gaW52b2NhdGlvbi4gVGhpcyBhdHRyaWJ1dGUgb2YKK2EgcXVldWUgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRoZW4gbXNnX21heC4KKworL3Byb2Mvc3lzL2ZzL21xdWV1ZS9tc2dzaXplX21heCBpcyAgYSByZWFkL3dyaXRlICBmaWxlIGZvciBzZXR0aW5nL2dldHRpbmcgdGhlCittYXhpbXVtICBtZXNzYWdlIHNpemUgdmFsdWUgKGl0IGlzIGV2ZXJ5ICBtZXNzYWdlIHF1ZXVlJ3MgYXR0cmlidXRlIHNldCBkdXJpbmcKK2l0cyBjcmVhdGlvbikuCisKKworNC4gL3Byb2Mvc3lzL2ZzL2Vwb2xsIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXBvbGwgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBlcG9sbCg3KSBpbnRlcmZhY2UuCisKK21heF91c2VyX2luc3RhbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBhIHNpbmdsZSB1c2VyIGNhbgoraGF2ZSBvcGVuIGF0IGEgZ2l2ZW4gdGltZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTI4LCBhbmQgc2hvdWxkIGJlIGVub3VnaAorZm9yIG5vcm1hbCB1c2Vycy4KKworbWF4X3VzZXJfd2F0Y2hlcworLS0tLS0tLS0tLS0tLS0tLQorCitFdmVyeSBlcG9sbCBmaWxlIGRlc2NyaXB0b3IgY2FuIHN0b3JlIGEgbnVtYmVyIG9mIGZpbGVzIHRvIGJlIG1vbml0b3JlZAorZm9yIGV2ZW50IHJlYWRpbmVzcy4gRWFjaCBvbmUgb2YgdGhlc2UgbW9uaXRvcmVkIGZpbGVzIGNvbnN0aXR1dGVzIGEgIndhdGNoIi4KK1RoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgIndhdGNoZXMiIHRoYXQgYXJlCithbGxvd2VkIGZvciBlYWNoIHVzZXIuCitFYWNoICJ3YXRjaCIgY29zdHMgcm91Z2hseSA5MCBieXRlcyBvbiBhIDMyYml0IGtlcm5lbCwgYW5kIHJvdWdobHkgMTYwIGJ5dGVzCitvbiBhIDY0Yml0IG9uZS4KK1RoZSBjdXJyZW50IGRlZmF1bHQgdmFsdWUgZm9yICBtYXhfdXNlcl93YXRjaGVzICBpcyB0aGUgMS8zMiBvZiB0aGUgYXZhaWxhYmxlCitsb3cgbWVtb3J5LCBkaXZpZGVkIGZvciB0aGUgIndhdGNoIiBjb3N0IGluIGJ5dGVzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAppbmRleCBhNGNjZGQxLi5mMTFjYTc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKQEAgLTEsNSArMSw2IEBACiBEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMva2VybmVsLyoJa2VybmVsIHZlcnNpb24gMi4yLjEwCiAJKGMpIDE5OTgsIDE5OTksICBSaWsgdmFuIFJpZWwgPHJpZWxAbmwubGludXgub3JnPgorCShjKSAyMDA5LCAgICAgICAgU2hlbiBGZW5nPHNoZW5AY24uZnVqaXRzdS5jb20+CiAKIEZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCiAKQEAgLTE4LDYgKzE5LDcgQEAKIHNob3cgdXAgaW4gL3Byb2Mvc3lzL2tlcm5lbDoKIC0gYWNwaV92aWRlb19mbGFncwogLSBhY2N0CistIGF1dG9fbXNnbW5pCiAtIGNvcmVfcGF0dGVybgogLSBjb3JlX3VzZXNfcGlkCiAtIGN0cmwtYWx0LWRlbApAQCAtMzMsNiArMzUsNyBAQAogLSBtc2dtYXgKIC0gbXNnbW5iCiAtIG1zZ21uaQorLSBubWlfd2F0Y2hkb2cKIC0gb3NyZWxlYXNlCiAtIG9zdHlwZQogLSBvdmVyZmxvd2dpZApAQCAtNDAsNiArNDMsNyBAQAogLSBwYW5pYwogLSBwaWRfbWF4CiAtIHBvd2Vyc2F2ZS1uYXAgICAgICAgICAgICAgICBbIFBQQyBvbmx5IF0KKy0gcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pCiAtIHByaW50awogLSByYW5kb21pemVfdmFfc3BhY2UKIC0gcmVhbC1yb290LWRldiAgICAgICAgICAgICAgID09PiBEb2N1bWVudGF0aW9uL2luaXRyZC50eHQKQEAgLTU1LDYgKzU5LDcgQEAKIC0gc3lzcnEgICAgICAgICAgICAgICAgICAgICAgID09PiBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dAogLSB0YWludGVkCiAtIHRocmVhZHMtbWF4CistIHVua25vd25fbm1pX3BhbmljCiAtIHZlcnNpb24KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM4MSwzICszODYsNTEgQEAKICA1MTIgLSBBIGtlcm5lbCB3YXJuaW5nIGhhcyBvY2N1cnJlZC4KIDEwMjQgLSBBIG1vZHVsZSBmcm9tIGRyaXZlcnMvc3RhZ2luZyB3YXMgbG9hZGVkLgogCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCithdXRvX21zZ21uaToKKworRW5hYmxlcy9EaXNhYmxlcyBhdXRvbWF0aWMgcmVjb21wdXRpbmcgb2YgbXNnbW5pIHVwb24gbWVtb3J5IGFkZC9yZW1vdmUgb3IKK3Vwb24gaXBjIG5hbWVzcGFjZSBjcmVhdGlvbi9yZW1vdmFsIChzZWUgdGhlIG1zZ21uaSBkZXNjcmlwdGlvbiBhYm92ZSkuCitFY2hvaW5nICIxIiBpbnRvIHRoaXMgZmlsZSBlbmFibGVzIG1zZ21uaSBhdXRvbWF0aWMgcmVjb21wdXRpbmcuCitFY2hvaW5nICIwIiB0dXJucyBpdCBvZmYuCithdXRvX21zZ21uaSBkZWZhdWx0IHZhbHVlIGlzIDEuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK25taV93YXRjaGRvZzoKKworRW5hYmxlcy9EaXNhYmxlcyB0aGUgTk1JIHdhdGNoZG9nIG9uIHg4NiBzeXN0ZW1zLiAgV2hlbiB0aGUgdmFsdWUgaXMgbm9uLXplcm8KK3RoZSBOTUkgd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgd2lsbCBjb250aW51b3VzbHkgdGVzdCBhbGwgb25saW5lIGNwdXMgdG8KK2RldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBzdGlsbCBmdW5jdGlvbmluZyBwcm9wZXJseS4gQ3VycmVudGx5LAorcGFzc2luZyAibm1pX3dhdGNoZG9nPSIgcGFyYW1ldGVyIGF0IGJvb3QgdGltZSBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbgordG8gd29yay4KKworSWYgTEFQSUMgTk1JIHdhdGNoZG9nIG1ldGhvZCBpcyBpbiB1c2UgKG5taV93YXRjaGRvZz0yIGtlcm5lbCBwYXJhbWV0ZXIpLCB0aGUKK05NSSB3YXRjaGRvZyBzaGFyZXMgcmVnaXN0ZXJzIHdpdGggb3Byb2ZpbGUuIEJ5IGRpc2FibGluZyB0aGUgTk1JIHdhdGNoZG9nLAorb3Byb2ZpbGUgbWF5IGhhdmUgbW9yZSByZWdpc3RlcnMgdG8gdXRpbGl6ZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordW5rbm93bl9ubWlfcGFuaWM6CisKK1RoZSB2YWx1ZSBpbiB0aGlzIGZpbGUgYWZmZWN0cyBiZWhhdmlvciBvZiBoYW5kbGluZyBOTUkuIFdoZW4gdGhlIHZhbHVlIGlzCitub24temVybywgdW5rbm93biBOTUkgaXMgdHJhcHBlZCBhbmQgdGhlbiBwYW5pYyBvY2N1cnMuIEF0IHRoYXQgdGltZSwga2VybmVsCitkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkIG9uIGNvbnNvbGUuCisKK05NSSBzd2l0Y2ggdGhhdCBtb3N0IElBMzIgc2VydmVycyBoYXZlIGZpcmVzIHVua25vd24gTk1JIHVwLCBmb3IgZXhhbXBsZS4KK0lmIGEgc3lzdGVtIGhhbmdzIHVwLCB0cnkgcHJlc3NpbmcgdGhlIE5NSSBzd2l0Y2guCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3BhbmljX29uX3VucmVjb3ZlcmVkX25taToKKworVGhlIGRlZmF1bHQgTGludXggYmVoYXZpb3VyIG9uIGFuIE5NSSBvZiBlaXRoZXIgbWVtb3J5IG9yIHVua25vd24gaXMgdG8gY29udGludWUKK29wZXJhdGlvbi4gRm9yIG1hbnkgZW52aXJvbm1lbnRzIHN1Y2ggYXMgc2NpZW50aWZpYyBjb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZQordGhhdCB0aGUgYm94IGlzIHRha2VuIG91dCBhbmQgdGhlIGVycm9yIGRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZAorcGFyaXR5L0VDQyBlcnJvciBnZXQgcHJvcG9nYXRlZC4KKworQSBzbWFsbCBudW1iZXIgb2Ygc3lzdGVtcyBkbyBnZW5lcmF0ZSBOTUkncyBmb3IgYml6YXJyZSByYW5kb20gcmVhc29ucyBzdWNoIGFzCitwb3dlciBtYW5hZ2VtZW50IHNvIHRoZSBkZWZhdWx0IGlzIG9mZi4gVGhhdCBzeXNjdGwgd29ya3MgbGlrZSB0aGUgZXhpc3RpbmcKK3BhbmljIGNvbnRyb2xzIGFscmVhZHkgaW4gdGhhdCBkaXJlY3RvcnkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGQ1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0CkBAIC0wLDAgKzEsMTc1IEBACitEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvbmV0LyoJa2VybmVsIHZlcnNpb24gMi40LjAtdGVzdDExLXByZTQKKwkoYykgMTk5OQkJVGVycmVob24gQm93ZGVuIDx0ZXJyZWhvbkBwYWNiZWxsLm5ldD4KKwkJCQlCb2RvIEJhdWVyIDxiYkByaWNvY2hldC5uZXQ+CisJKGMpIDIwMDAJCUpvcmdlIE5lcmluIDxjb21hbmRhbnRlQHphcmFsaW51eC5jb20+CisJKGMpIDIwMDkJCVNoZW4gRmVuZyA8c2hlbkBjbi5mdWppdHN1LmNvbT4KKworRm9yIGdlbmVyYWwgaW5mbyBhbmQgbGVnYWwgYmx1cmIsIHBsZWFzZSBsb29rIGluIFJFQURNRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3lzY3RsIGZpbGVzIGluCisvcHJvYy9zeXMvbmV0IGFuZCBpcyB2YWxpZCBmb3IgTGludXgga2VybmVsIHZlcnNpb24gMi40LjAtdGVzdDExLXByZTQuCisKK1RoZSBpbnRlcmZhY2UgIHRvICB0aGUgIG5ldHdvcmtpbmcgIHBhcnRzICBvZiAgdGhlICBrZXJuZWwgIGlzICBsb2NhdGVkICBpbgorL3Byb2Mvc3lzL25ldC4gVGhlIGZvbGxvd2luZyB0YWJsZSBzaG93cyBhbGwgcG9zc2libGUgc3ViZGlyZWN0b3JpZXMuWW91IG1heQorc2VlIG9ubHkgc29tZSBvZiB0aGVtLCBkZXBlbmRpbmcgb24geW91ciBrZXJuZWwncyBjb25maWd1cmF0aW9uLgorCisKK1RhYmxlIDogU3ViZGlyZWN0b3JpZXMgaW4gL3Byb2Mvc3lzL25ldAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgRGlyZWN0b3J5IENvbnRlbnQgICAgICAgICAgICAgRGlyZWN0b3J5ICBDb250ZW50CisgY29yZSAgICAgIEdlbmVyYWwgcGFyYW1ldGVyICAgYXBwbGV0YWxrICBBcHBsZXRhbGsgcHJvdG9jb2wKKyB1bml4ICAgICAgVW5peCBkb21haW4gc29ja2V0cyBuZXRyb20gICAgIE5FVC9ST00KKyA4MDIgICAgICAgRTgwMiBwcm90b2NvbCAgICAgICBheDI1ICAgICAgIEFYMjUKKyBldGhlcm5ldCAgRXRoZXJuZXQgcHJvdG9jb2wgICByb3NlICAgICAgIFguMjUgUExQIGxheWVyCisgaXB2NCAgICAgIElQIHZlcnNpb24gNCAgICAgICAgeDI1ICAgICAgICBYLjI1IHByb3RvY29sCisgaXB4ICAgICAgIElQWCAgICAgICAgICAgICAgICAgdG9rZW4tcmluZyBJQk0gdG9rZW4gcmluZworIGJyaWRnZSAgICBCcmlkZ2luZyAgICAgICAgICAgIGRlY25ldCAgICAgREVDIG5ldAorIGlwdjYgICAgICBJUCB2ZXJzaW9uIDYKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisxLiAvcHJvYy9zeXMvbmV0L2NvcmUgLSBOZXR3b3JrIGNvcmUgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitybWVtX2RlZmF1bHQKKy0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaW4gYnl0ZXMuCisKK3JtZW1fbWF4CistLS0tLS0tLQorCitUaGUgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KKword21lbV9kZWZhdWx0CistLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgc2V0dGluZyAoaW4gYnl0ZXMpIG9mIHRoZSBzb2NrZXQgc2VuZCBidWZmZXIuCisKK3dtZW1fbWF4CistLS0tLS0tLQorCitUaGUgbWF4aW11bSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KKworbWVzc2FnZV9idXJzdCBhbmQgbWVzc2FnZV9jb3N0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgcGFyYW1ldGVycyAgYXJlIHVzZWQgdG8gbGltaXQgdGhlIHdhcm5pbmcgbWVzc2FnZXMgd3JpdHRlbiB0byB0aGUga2VybmVsCitsb2cgZnJvbSAgdGhlICBuZXR3b3JraW5nICBjb2RlLiAgVGhleSAgZW5mb3JjZSAgYSAgcmF0ZSAgbGltaXQgIHRvICBtYWtlICBhCitkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2sgIGltcG9zc2libGUuIEEgaGlnaGVyIG1lc3NhZ2VfY29zdCBmYWN0b3IsIHJlc3VsdHMgaW4KK2Zld2VyIG1lc3NhZ2VzIHRoYXQgd2lsbCBiZSB3cml0dGVuLiBNZXNzYWdlX2J1cnN0IGNvbnRyb2xzIHdoZW4gbWVzc2FnZXMgd2lsbAorYmUgZHJvcHBlZC4gIFRoZSAgZGVmYXVsdCAgc2V0dGluZ3MgIGxpbWl0ICB3YXJuaW5nIG1lc3NhZ2VzIHRvIG9uZSBldmVyeSBmaXZlCitzZWNvbmRzLgorCit3YXJuaW5ncworLS0tLS0tLS0KKworVGhpcyBjb250cm9scyBjb25zb2xlIG1lc3NhZ2VzIGZyb20gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGhhdCBjYW4gb2NjdXIgYmVjYXVzZQorb2YgcHJvYmxlbXMgb24gdGhlIG5ldHdvcmsgbGlrZSBkdXBsaWNhdGUgYWRkcmVzcyBvciBiYWQgY2hlY2tzdW1zLiBOb3JtYWxseSwKK3RoaXMgc2hvdWxkIGJlIGVuYWJsZWQsIGJ1dCBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0cyB0aGUgbWVzc2FnZXMgY2FuIGJlCitkaXNhYmxlZC4KKworbmV0ZGV2X2J1ZGdldAorLS0tLS0tLS0tLS0tLQorCitNYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRha2VuIGZyb20gYWxsIGludGVyZmFjZXMgaW4gb25lIHBvbGxpbmcgY3ljbGUgKE5BUEkKK3BvbGwpLiBJbiBvbmUgcG9sbGluZyBjeWNsZSBpbnRlcmZhY2VzIHdoaWNoIGFyZSByZWdpc3RlcmVkIHRvIHBvbGxpbmcgYXJlCitwcm9iZWQgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuIFRoZSBsaW1pdCBvZiBwYWNrZXRzIGluIG9uZSBzdWNoIHByb2JlIGNhbiBiZQorc2V0IHBlci1kZXZpY2UgdmlhIHN5c2ZzIGNsYXNzL25ldC88ZGV2aWNlPi93ZWlnaHQgLgorCituZXRkZXZfbWF4X2JhY2tsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitNYXhpbXVtIG51bWJlciAgb2YgIHBhY2tldHMsICBxdWV1ZWQgIG9uICB0aGUgIElOUFVUICBzaWRlLCB3aGVuIHRoZSBpbnRlcmZhY2UKK3JlY2VpdmVzIHBhY2tldHMgZmFzdGVyIHRoYW4ga2VybmVsIGNhbiBwcm9jZXNzIHRoZW0uCisKK29wdG1lbV9tYXgKKy0tLS0tLS0tLS0KKworTWF4aW11bSBhbmNpbGxhcnkgYnVmZmVyIHNpemUgYWxsb3dlZCBwZXIgc29ja2V0LiBBbmNpbGxhcnkgZGF0YSBpcyBhIHNlcXVlbmNlCitvZiBzdHJ1Y3QgY21zZ2hkciBzdHJ1Y3R1cmVzIHdpdGggYXBwZW5kZWQgZGF0YS4KKworMi4gL3Byb2Mvc3lzL25ldC91bml4IC0gUGFyYW1ldGVycyBmb3IgVW5peCBkb21haW4gc29ja2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBvbmx5IG9uZSBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LgordW5peF9kZ3JhbV9xbGVuIGxpbWl0cyB0aGUgbWF4IG51bWJlciBvZiBkYXRhZ3JhbXMgcXVldWVkIGluIFVuaXggZG9tYWluCitzb2NrZXQncyBidWZmZXIuIEl0IHdpbGwgbm90IHRha2UgZWZmZWN0IHVubGVzcyBQRl9VTklYIGZsYWcgaXMgc3BpY2lmaWVkLgorCisKKzMuIC9wcm9jL3N5cy9uZXQvaXB2NCAtIElQVjQgc2V0dGluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BsZWFzZSBzZWU6IERvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGFuZCBpcHZzLXN5c2N0bC50eHQgZm9yCitkZXNjcmlwdGlvbnMgb2YgdGhlc2UgZW50cmllcy4KKworCis0LiBBcHBsZXRhbGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIC9wcm9jL3N5cy9uZXQvYXBwbGV0YWxrICBkaXJlY3RvcnkgIGhvbGRzIHRoZSBBcHBsZXRhbGsgY29uZmlndXJhdGlvbiBkYXRhCit3aGVuIEFwcGxldGFsayBpcyBsb2FkZWQuIFRoZSBjb25maWd1cmFibGUgcGFyYW1ldGVycyBhcmU6CisKK2FhcnAtZXhwaXJ5LXRpbWUKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFtb3VudCAgb2YgIHRpbWUgIHdlIGtlZXAgYW4gQVJQIGVudHJ5IGJlZm9yZSBleHBpcmluZyBpdC4gVXNlZCB0byBhZ2Ugb3V0CitvbGQgaG9zdHMuCisKK2FhcnAtcmVzb2x2ZS10aW1lCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYW1vdW50IG9mIHRpbWUgd2Ugd2lsbCBzcGVuZCB0cnlpbmcgdG8gcmVzb2x2ZSBhbiBBcHBsZXRhbGsgYWRkcmVzcy4KKworYWFycC1yZXRyYW5zbWl0LWxpbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIHJldHJhbnNtaXQgYSBxdWVyeSBiZWZvcmUgZ2l2aW5nIHVwLgorCithYXJwLXRpY2stdGltZQorLS0tLS0tLS0tLS0tLS0KKworQ29udHJvbHMgdGhlIHJhdGUgYXQgd2hpY2ggZXhwaXJlcyBhcmUgY2hlY2tlZC4KKworVGhlIGRpcmVjdG9yeSAgL3Byb2MvbmV0L2FwcGxldGFsayAgaG9sZHMgdGhlIGxpc3Qgb2YgYWN0aXZlIEFwcGxldGFsayBzb2NrZXRzCitvbiBhIG1hY2hpbmUuCisKK1RoZSBmaWVsZHMgIGluZGljYXRlICB0aGUgRERQIHR5cGUsIHRoZSBsb2NhbCBhZGRyZXNzIChpbiBuZXR3b3JrOm5vZGUgZm9ybWF0KQordGhlIHJlbW90ZSAgYWRkcmVzcywgIHRoZSAgc2l6ZSBvZiB0aGUgdHJhbnNtaXQgcGVuZGluZyBxdWV1ZSwgdGhlIHNpemUgb2YgdGhlCityZWNlaXZlZCBxdWV1ZSAgKGJ5dGVzIHdhaXRpbmcgZm9yIGFwcGxpY2F0aW9ucyB0byByZWFkKSB0aGUgc3RhdGUgYW5kIHRoZSB1aWQKK293bmluZyB0aGUgc29ja2V0LgorCisvcHJvYy9uZXQvYXRhbGtfaWZhY2UgbGlzdHMgIGFsbCAgdGhlICBpbnRlcmZhY2VzICBjb25maWd1cmVkIGZvciBhcHBsZXRhbGsuSXQKK3Nob3dzIHRoZSAgbmFtZSAgb2YgdGhlIGludGVyZmFjZSwgaXRzIEFwcGxldGFsayBhZGRyZXNzLCB0aGUgbmV0d29yayByYW5nZSBvbgordGhhdCBhZGRyZXNzICAob3IgIG5ldHdvcmsgbnVtYmVyIGZvciBwaGFzZSAxIG5ldHdvcmtzKSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlCitpbnRlcmZhY2UuCisKKy9wcm9jL25ldC9hdGFsa19yb3V0ZSBsaXN0cyAgZWFjaCAga25vd24gIG5ldHdvcmsgIHJvdXRlLiAgSXQgbGlzdHMgdGhlIHRhcmdldAorKG5ldHdvcmspIHRoYXQgdGhlIHJvdXRlIGxlYWRzIHRvLCB0aGUgcm91dGVyIChtYXkgYmUgZGlyZWN0bHkgY29ubmVjdGVkKSwgdGhlCityb3V0ZSBmbGFncywgYW5kIHRoZSBkZXZpY2UgdGhlIHJvdXRlIGlzIHVzaW5nLgorCisKKzUuIElQWAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgSVBYIHByb3RvY29sIGhhcyBubyB0dW5hYmxlIHZhbHVlcyBpbiBwcm9jL3N5cy9uZXQuCisKK1RoZSBJUFggIHByb3RvY29sICBkb2VzLCAgaG93ZXZlciwgIHByb3ZpZGUgIHByb2MvbmV0L2lweC4gVGhpcyBsaXN0cyBlYWNoIElQWAorc29ja2V0IGdpdmluZyAgdGhlICBsb2NhbCAgYW5kICByZW1vdGUgIGFkZHJlc3NlcyAgaW4gIE5vdmVsbCAgZm9ybWF0ICh0aGF0IGlzCituZXR3b3JrOm5vZGU6cG9ydCkuIEluICBhY2NvcmRhbmNlICB3aXRoICB0aGUgIHN0cmFuZ2UgIE5vdmVsbCAgdHJhZGl0aW9uLAorZXZlcnl0aGluZyBidXQgdGhlIHBvcnQgaXMgaW4gaGV4LiBOb3RfQ29ubmVjdGVkIGlzIGRpc3BsYXllZCBmb3Igc29ja2V0cyB0aGF0CithcmUgbm90ICB0aWVkIHRvIGEgc3BlY2lmaWMgcmVtb3RlIGFkZHJlc3MuIFRoZSBUeCBhbmQgUnggcXVldWUgc2l6ZXMgaW5kaWNhdGUKK3RoZSBudW1iZXIgIG9mICBieXRlcyAgcGVuZGluZyAgZm9yICB0cmFuc21pc3Npb24gIGFuZCAgcmVjZXB0aW9uLiAgVGhlICBzdGF0ZQoraW5kaWNhdGVzIHRoZSAgc3RhdGUgIHRoZSAgc29ja2V0ICBpcyAgaW4gYW5kIHRoZSB1aWQgaXMgdGhlIG93bmluZyB1aWQgb2YgdGhlCitzb2NrZXQuCisKK1RoZSAvcHJvYy9uZXQvaXB4X2ludGVyZmFjZSAgZmlsZSBsaXN0cyBhbGwgSVBYIGludGVyZmFjZXMuIEZvciBlYWNoIGludGVyZmFjZQoraXQgZ2l2ZXMgIHRoZSBuZXR3b3JrIG51bWJlciwgdGhlIG5vZGUgbnVtYmVyLCBhbmQgaW5kaWNhdGVzIGlmIHRoZSBuZXR3b3JrIGlzCit0aGUgcHJpbWFyeSAgbmV0d29yay4gIEl0ICBhbHNvICBpbmRpY2F0ZXMgIHdoaWNoICBkZXZpY2UgIGl0ICBpcyBib3VuZCB0byAob3IKK0ludGVybmFsIGZvciAgaW50ZXJuYWwgIG5ldHdvcmtzKSAgYW5kICB0aGUgIEZyYW1lICBUeXBlIGlmIGFwcHJvcHJpYXRlLiBMaW51eAorc3VwcG9ydHMgODAyLjMsICA4MDIuMiwgIDgwMi4yICBTTkFQICBhbmQgRElYIChCbHVlIEJvb2spIGV0aGVybmV0IGZyYW1pbmcgZm9yCitJUFguCisKK1RoZSAvcHJvYy9uZXQvaXB4X3JvdXRlICB0YWJsZSAgaG9sZHMgIGEgbGlzdCBvZiBJUFggcm91dGVzLiBGb3IgZWFjaCByb3V0ZSBpdAorZ2l2ZXMgdGhlICBkZXN0aW5hdGlvbiAgbmV0d29yaywgdGhlIHJvdXRlciBub2RlIChvciBEaXJlY3RseSkgYW5kIHRoZSBuZXR3b3JrCithZGRyZXNzIG9mIHRoZSByb3V0ZXIgKG9yIENvbm5lY3RlZCkgZm9yIGludGVybmFsIG5ldHdvcmtzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAppbmRleCA5ZTU5MmM3Li5hZmEyOTQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c3JxLnR4dApAQCAtODEsNiArODEsOCBAQAogCiAnaScgICAgIC0gU2VuZCBhIFNJR0tJTEwgdG8gYWxsIHByb2Nlc3NlcywgZXhjZXB0IGZvciBpbml0LgogCisnaicgICAgIC0gRm9yY2libHkgIkp1c3QgdGhhdyBpdCIgLSBmaWxlc3lzdGVtcyBmcm96ZW4gYnkgdGhlIEZJRlJFRVpFIGlvY3RsLgorCiAnaycgICAgIC0gU2VjdXJlIEFjY2VzcyBLZXkgKFNBSykgS2lsbHMgYWxsIHByb2dyYW1zIG9uIHRoZSBjdXJyZW50IHZpcnR1YWwKICAgICAgICAgICBjb25zb2xlLiBOT1RFOiBTZWUgaW1wb3J0YW50IGNvbW1lbnRzIGJlbG93IGluIFNBSyBzZWN0aW9uLgogCkBAIC0xNjAsNiArMTYyLDkgQEAKIGFyZSB1bmFibGUgdG8ga2lsbCBhbnkgb3RoZXIgd2F5LCBlc3BlY2lhbGx5IGlmIGl0J3Mgc3Bhd25pbmcgb3RoZXIKIHByb2Nlc3Nlcy4KIAorIidKJ3VzdCB0aGF3IGl0IiBpcyB1c2VmdWwgaWYgeW91ciBzeXN0ZW0gYmVjb21lcyB1bnJlc3BvbnNpdmUgZHVlIHRvIGEgZnJvemVuCisocHJvYmFibHkgcm9vdCkgZmlsZXN5c3RlbSB2aWEgdGhlIEZJRlJFRVpFIGlvY3RsLgorCiAqICBTb21ldGltZXMgU3lzUnEgc2VlbXMgdG8gZ2V0ICdzdHVjaycgYWZ0ZXIgdXNpbmcgaXQsIHdoYXQgY2FuIEkgZG8/CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiBUaGF0IGhhcHBlbnMgdG8gbWUsIGFsc28uIEkndmUgZm91bmQgdGhhdCB0YXBwaW5nIHNoaWZ0LCBhbHQsIGFuZCBjb250cm9sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKaW5kZXggMGQ5M2ZhMS4uZjExYzU4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgpAQCAtMTM1LDcgKzEzNSw3IEBACiAxMzQgLT4gQWRsaW5rIFJUVjI0CiAxMzUgLT4gRFZpQ08gRnVzaW9uSERUViA1IExpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ1MDBdCiAxMzYgLT4gQWNvcnAgWTg3OEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5NTExOjE1NDBdCi0xMzcgLT4gQ29uY2VwdHJvbmljIENUVkZNaSB2MgorMTM3IC0+IENvbmNlcHRyb25pYyBDVFZGTWkgdjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDM2ZToxMDllXQogMTM4IC0+IFByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkKIDEzOSAtPiBQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAKIDE0MCAtPiBPc3ByZXkgNDQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwN10KQEAgLTE1NCwzICsxNTQsNyBAQAogMTUzIC0+IFBIWVRFQyBWRC0wMTIgKGJ0ODc4KQogMTU0IC0+IFBIWVRFQyBWRC0wMTItWDEgKGJ0ODc4KQogMTU1IC0+IFBIWVRFQyBWRC0wMTItWDIgKGJ0ODc4KQorMTU2IC0+IElWQ0UtODc4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDAwMDpmMDUwLDAwMDE6ZjA1MCwwMDAyOmYwNTAsMDAwMzpmMDUwXQorMTU3IC0+IEdlb3Zpc2lvbiBHVi04MDAoUykgKG1hc3RlcikgICAgICAgICAgICAgICAgICAgICAgICBbODAwYTo3NjNkXQorMTU4IC0+IEdlb3Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSAgICAgICAgICAgICAgICAgICAgICAgICBbODAwYjo3NjNkLDgwMGM6NzYzZCw4MDBkOjc2M2RdCisxNTkgLT4gUHJvVmlkZW8gUFYxODMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODMwOjE1NDAsMTgzMToxNTQwLDE4MzI6MTU0MCwxODMzOjE1NDAsMTgzNDoxNTQwLDE4MzU6MTU0MCwxODM2OjE1NDAsMTgzNzoxNTQwXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDM1ZWExMzAuLjkxYWEzYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTEyLDMgKzEyLDcgQEAKICAxMSAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRXhwcmVzcyAgICAgICAgICAgICAgICAgWzE4YWM6ZGI3OF0KICAxMiAtPiBMZWFkdGVrIFdpbmZhc3QgUHhEVlIzMjAwIEggICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjY4MV0KICAxMyAtPiBDb21wcm8gVmlkZW9NYXRlIEU2NTBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NWI6ZTgwMF0KKyAxNCAtPiBUdXJib1NpZ2h0IFRCUyA2OTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzY5MjA6ODg4OF0KKyAxNSAtPiBUZVZpaSBTNDcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Q0NzA6OTAyMl0KKyAxNiAtPiBEVkJXb3JsZCBEVkItUzIgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwMDE6MjAwNV0KKyAxNyAtPiBOZXRVUCBEdWFsIERWQi1TMiBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFiNTU6MmEyY10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAppbmRleCAwZDA4ZjFlLi43MWU5ZGIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC03NywzICs3Nyw0IEBACiAgNzYgLT4gU0FUVFJBREUgU1Q0MjAwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMjAwOjQyMDBdCiAgNzcgLT4gVEJTIDg5MTAgRFZCLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4OTEwOjg4ODhdCiAgNzggLT4gUHJvZiA2MjAwIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMDIyOjMwMjJdCisgNzkgLT4gVGVycmF0ZWMgQ2luZXJneSBIVCBQQ0kgTUtJSSAgICAgICAgICAgICAgICAgICAgICAgIFsxNTNiOjExNzddCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDc1YmRlZDguLjc4ZDBhNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC03LDEyICs3LDEyIEBACiAgIDYgLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVVNCICAgICAgICAgICAgICAgICAoZW0yODAwKQogICA3IC0+IExlYWR0ZWsgV2luZmFzdCBVU0IgSUkgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkgICAgICAgIFswNDEzOjYwMjNdCiAgIDggLT4gS3dvcmxkIFVTQjI4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQotICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAvRFZDIDEwMCAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMzA0OjAyMDcsMjMwNDowMjFhXQorICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIgKGVtMjgyMC9lbTI4NDApIFsxYjgwOmUzMDIsMjMwNDowMjA3LDIzMDQ6MDIxYV0KICAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwXQogIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCiAgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxMyAtPiBUZXJyYXRlYyBQcm9kaWd5IFhTICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQ3XQotIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgMTQgLT4gU0lJRyBBVlR1bmVyLVBWUiAvIFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wIChlbTI4MjAvZW0yODQwKQogIDE1IC0+IFYtR2VhciBQb2NrZXRUViAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAxNiAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDk1MCAgICAgICAgICAgICAgICAgIChlbTI4ODMpICAgICAgICBbMjA0MDo2NTEzLDIwNDA6NjUxNywyMDQwOjY1MWJdCiAgMTcgLT4gUGlubmFjbGUgUENUViBIRCBQcm8gU3RpY2sgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIzMDQ6MDIyN10KQEAgLTMwLDcgKzMwLDYgQEAKICAzMCAtPiBWaWRlb2xvZ3kgMjBLMTRYVVNCIFVTQjIuMCAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDMxIC0+IFVzYmdlYXIgVkQyMDR2OSAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMSkKICAzMiAtPiBTdXBlcmNvbXAgVVNCIDIuMCBUViAgICAgICAgICAgICAgICAgICAgIChlbTI4MjEpCi0gMzMgLT4gU0lJRyBBVlR1bmVyLVBWUi9Qcm9saW5rIFBsYXlUViBVU0IgMi4wICAoZW0yODIxKQogIDM0IC0+IFRlcnJhdGVjIENpbmVyZ3kgQSBIeWJyaWQgWFMgICAgICAgICAgICAgKGVtMjg2MCkgICAgICAgIFswY2NkOjAwNGZdCiAgMzUgLT4gVHlwaG9vbiBEVkQgTWFrZXIgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKQogIDM2IC0+IE5ldEdNQkggQ2FtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkKQEAgLTU4LDMgKzU3LDcgQEAKICA1OCAtPiBDb21wcm8gVmlkZW9NYXRlIEZvcllvdS9TdGVyZW8gICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMTg1YjoyMDQxXQogIDYwIC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgODUwICAgICAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFsyMDQwOjY1MWZdCiAgNjEgLT4gUGl4ZWx2aWV3IFBsYXlUViBCb3ggNCBVU0IgMi4wICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKKyA2MiAtPiBHYWRtZWkgVFZSMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQorIDYzIC0+IEthaW9teSBUVm5QQyBVMiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkgICAgICAgIFtlYjFhOmUzMDNdCisgNjQgLT4gRWFzeSBDYXAgQ2FwdHVyZSBEQy02MCAgICAgICAgICAgICAgICAgICAoZW0yODYwKQorIDY1IC0+IElPLURBVEEgR1YtTVZQL1NaICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFswNGJiOjA1MTVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggYjhkNDcwNS4uNmRhY2YyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTUzLDMgKzE1Myw1IEBACiAxNTIgLT4gQXN1cyBUaWdlciBSZXY6MS4wMCAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODU3XQogMTUzIC0+IEt3b3JsZCBQbHVzIFRWIEFuYWxvZyBMaXRlIFBDSSAgICAgICAgICAgWzE3ZGU6NzEyOF0KIDE1NCAtPiBBdmVybWVkaWEgQVZlclRWIEdPIDAwNyBGTSBQbHVzICAgICAgICAgIFsxNDYxOmYzMWRdCisxNTUgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjExMjAgQVRTQy9RQU0tSHlicmlkICBbMDA3MDo2NzA2LDAwNzA6NjcwOF0KKzE1NiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTExMHIzICAgICAgICAgICAgICAgIFswMDcwOjY3MDcsMDA3MDo2NzA5LDAwNzA6NjcwYV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4gYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCmluZGV4IDI5NTQ2MmIuLjBlODllNzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtNDAxLDggKzQwMSw3IEBACiAgICBmaXJzdCBzZXQgdGhlIGNvcnJlY3Qgbm9ybS4gV2VsbCwgaXQgc2VlbXMgbG9naWNhbGx5IGNvcnJlY3Q6IFRWCiAgICBzdGFuZGFyZCBpcyAibW9yZSBjb25zdGFudCIgZm9yIGN1cnJlbnQgY291bnRyeSB0aGFuIGdlb21ldHJ5CiAgICBzZXR0aW5ncyBvZiBhIHZhcmlldHkgb2YgVFYgY2FwdHVyZSBjYXJkcyB3aGljaCBtYXkgd29yayBpbiBJVFUgb3IKLSAgIHNxdWFyZSBwaXhlbCBmb3JtYXQuIFJlbWVtYmVyIHRoYXQgdXNlcnMgbm93IGNhbiBsb2NrIHRoZSBub3JtIHRvCi0gICBhdm9pZCBhbnkgYW1iaWd1aXR5LgorICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4KIC0tCiBQbGVhc2Ugbm90ZSB0aGF0IGxhdnBsYXkvbGF2cmVjIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBNSlBFRy10b29scwogKGh0dHA6Ly9tanBlZy5zZi5uZXQvKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwppbmRleCA1ZWY3NTc4Li5iYmUzZWQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCkBAIC04MSwxNiArODEsNiBAQAogCQlwYWw9W2JkZ2lsXQlzZWxlY3QgUEFMIHZhcmlhbnQgKHVzZWQgZm9yIHNvbWUgdHVuZXJzCiAJCQkJb25seSwgaW1wb3J0YW50IGZvciB0aGUgYXVkaW8gY2FycmllcikuCiAKLXR2bWl4ZXIubwotCXJlZ2lzdGVycyBhIG1peGVyIGRldmljZSBmb3IgdGhlIFRWIGNhcmQncyB2b2x1bWUvYmFzcy90cmVibGUKLQljb250cm9scyAocmVxdWlyZXMgYSBpMmMgYXVkaW8gY29udHJvbCBjaGlwIGxpa2UgdGhlIG1zcDM0MDApLgotCi0JaW5zbW9kIGFyZ3M6Ci0JCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLgotCQlkZXZucj1uCQlhbGxvY2F0ZSBkZXZpY2UgI24gKDAgPT0gL2Rldi9taXhlciwKLQkJCQkxID0gL2Rldi9taXhlcjEsIC4uLiksIGRlZmF1bHQgaXMgdG8KLQkJCQl1c2UgdGhlIGZpcnN0IGZyZWUgb25lLgotCiB0dmF1ZGlvLm8KIAluZXcsIGV4cGVyaW1lbnRhbCBtb2R1bGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHByb3ZpZGUgYSBzaW5nbGUKIAlkcml2ZXIgZm9yIGFsbCBzaW1wbGUgaTJjIGF1ZGlvIGNvbnRyb2wgY2hpcHMgKHRkYS90ZWEqKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCmluZGV4IDdjYTIxNTQuLjNhMzY3Y2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQpAQCAtNjMsOCArNjMsOCBAQAogeW91cnNlbGYgKHBhdGNoZXMgdmVyeSB3ZWxjb21lIG9mIGNvdXJzZS4uLikgIFlvdSBrbm93OiBUaGUgbGludXgKIHNsb2dhbiBpcyAiRG8gaXQgeW91cnNlbGYiLgogCi1UaGVyZSBpcyBhIG1haWxpbmcgbGlzdDogdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tLgotaHR0cHM6Ly9saXN0bWFuLnJlZGhhdC5jb20vbWFpbG1hbi9saXN0aW5mby92aWRlbzRsaW51eC1saXN0CitUaGVyZSBpcyBhIG1haWxpbmcgbGlzdDogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitodHRwOi8vdmdlci5rZXJuZWwub3JnL3ZnZXItbGlzdHMuaHRtbCNsaW51eC1tZWRpYQogCiBJZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggc29tZSBzcGVjaWZpYyBUViBjYXJkLCB0cnkgdG8gYXNrIHRoZXJlCiBpbnN0ZWFkIG9mIG1haWxpbmcgbWUgZGlyZWN0bHkuICBUaGUgY2hhbmNlIHRoYXQgc29tZW9uZSB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyCmluZGV4IDBlMjEzZWQuLmIzNjE0OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIKQEAgLTMyLDYgKzMyLDEwIEBACiBUaGUgd2lkdGggb2YgYSBmcmFtZSBpcyBhbHdheXMgNzIwIHBpeGVscywgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHNwZWNpZmllZAogd2lkdGguCiAKK0lmIHRoZSBoZWlnaHQgaXMgbm90IGEgbXVsdGlwbGUgb2YgMzIgbGluZXMsIHRoZW4gdGhlIGNhcHR1cmVkIHZpZGVvIGlzCittaXNzaW5nIG1hY3JvYmxvY2tzIGF0IHRoZSBlbmQgYW5kIGlzIHVudXNhYmxlLiBTbyB0aGUgaGVpZ2h0IG11c3QgYmUgYQorbXVsdGlwbGUgb2YgMzIuCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAppbmRleCAxYzU4YTc2Li45ODUyOWUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dApAQCAtMzIsNiArMzIsNyBAQAogemMzeHgJCTA0MWU6NDA1MQlDcmVhdGl2ZSBMaXZlIUNhbSBOb3RlYm9vayBQcm8gKFZGMDI1MCkKIG92NTE5CQkwNDFlOjQwNTIJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgSU0KIHpjM3h4CQkwNDFlOjQwNTMJQ3JlYXRpdmUgTGl2ZSFDYW0gVmlkZW8gSU0KK3ZjMDMyeAkJMDQxZTo0MDViCUNyZWF0aXZlIExpdmUhIENhbSBOb3RlYm9vayBVbHRyYSAoVkMwMTMwKQogb3Y1MTkJCTA0MWU6NDA1ZglDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjAzMzAKIG92NTE5CQkwNDFlOjQwNjAJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwMzUwCiBvdjUxOQkJMDQxZTo0MDYxCUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQwMApAQCAtMTkzLDYgKzE5NCw3IEBACiBzcGNhNTAwCQkwOGNhOjAxMDMJQWlwdGVrIFBvY2tldERWCiBzdW5wbHVzCQkwOGNhOjAxMDQJQWlwdGVrIFBvY2tldERWSUkgMS4zCiBzdW5wbHVzCQkwOGNhOjAxMDYJQWlwdGVrIFBvY2tldCBEVjMxMDArCittcjk3MzEwYQkwOGNhOjAxMTEJQWlwdGVrIFBlbkNhbSBWR0ErCiBzdW5wbHVzCQkwOGNhOjIwMDgJQWlwdGVrIE1pbmkgUGVuQ2FtIDIgTQogc3VucGx1cwkJMDhjYToyMDEwCUFpcHRlayBQb2NrZXRDYW0gM00KIHN1bnBsdXMJCTA4Y2E6MjAxNglBaXB0ZWsgUG9ja2V0Q2FtIDIgTWVnYQpAQCAtMjE1LDYgKzIxNyw3IEBACiBwYWMyMDcJCTA5M2E6MjQ3MAlHZW5pdXMgR0YxMTIKIHBhYzIwNwkJMDkzYToyNDcxCUdlbml1cyBWaWRlb0NhbSBnZTExMQogcGFjMjA3CQkwOTNhOjI0NzIJR2VuaXVzIFZpZGVvQ2FtIGdlMTEwCitwYWMyMDcJCTA5M2E6MjQ3NAlHZW5pdXMgaUxvb2sgMTExCiBwYWMyMDcJCTA5M2E6MjQ3NglHZW5pdXMgZS1NZXNzZW5nZXIgMTEyCiBwYWM3MzExCQkwOTNhOjI2MDAJUEFDNzMxMSBUeXBob29uCiBwYWM3MzExCQkwOTNhOjI2MDEJUGhpbGlwcyBTUEMgNjEwIE5DCkBAIC0yNzksNiArMjgyLDcgQEAKIHpjM3h4CQkxMGZkOjgwNTAJVHlwaG9vbiBXZWJzaG90IElJIFVTQiAzMDBrCiBvdjUzNAkJMTQxNToyMDAwCVNvbnkgSEQgRXllIGZvciBQUzMgKFNMRUggMDAyMDEpCiBwYWMyMDcJCTE0NWY6MDEzYQlUcnVzdCBXQi0xMzAwTgordmMwMzJ4CQkxNWI4OjYwMDEJSFAgMi4wIE1lZ2FwaXhlbAogdmMwMzJ4CQkxNWI4OjYwMDIJSFAgMi4wIE1lZ2FwaXhlbCByejQwNmFhCiBzcGNhNTAxCQkxNzc2OjUwMWMJQXJvd2FuYSAzMDBLIENNT1MgQ2FtZXJhCiB0NjEzCQkxN2ExOjAxMjgJVEFTQ09SUCBKUEVHIFdlYmNhbSwgTkdTIEN5Y2xvcHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dAppbmRleCA0OTY3OWU2Li4zYTc4MjNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaTQ3MHgudHh0CkBAIC0xLDYgKzEsNiBAQAogRHJpdmVyIGZvciBVU0IgcmFkaW9zIGZvciB0aGUgU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMKIAotQ29weXJpZ2h0IChjKSAyMDA4IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KK0NvcHlyaWdodCAoYykgMjAwOSBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAKIAogSW5mb3JtYXRpb24gZnJvbSBTaWxpY29uIExhYnMKQEAgLTQxLDcgKzQxLDcgQEAKIC0gMTBjNDo4MThhOiBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24KIC0gMDZlMTphMTU1OiBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKFJEWC0xNTUtRUYpCiAtIDFiODA6ZDcwMDogS1dvcmxkIFVTQiBGTSBSYWRpbyBTbmFwTXVzaWMgTW9iaWxlIDcwMCAoRk03MDApCi0tIDEwYzU6ODE5YTogRGVhbEV4dHJlbWUgVVNCIFJhZGlvCistIDEwYzU6ODE5YTogU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikKIAogCiBTb2Z0d2FyZQpAQCAtNTIsNiArNTIsNyBAQAogLSBncmFkaW8gLSBHVEsgRk0gcmFkaW8gdHVuZXIKIC0ga3JhZGlvIC0gQ29tZm9ydGFibGUgUmFkaW8gQXBwbGljYXRpb24gZm9yIEtERQogLSByYWRpbyAtIG5jdXJzZXMtYmFzZWQgcmFkaW8gYXBwbGljYXRpb24KKy0gbXBsYXllciAtIFRoZSBVbHRpbWF0ZSBNb3ZpZSBQbGF5ZXIgRm9yIExpbnV4CiAKIFRoZXJlIGlzIGFsc28gYSBsaWJyYXJ5IGxpYnY0bCwgd2hpY2ggY2FuIGJlIHVzZWQuIEl0J3MgZ29pbmcgdG8gaGF2ZSBhIGZ1bmN0aW9uCiBmb3IgZnJlcXVlbmN5IHNlZWtpbmcsIGVpdGhlciBieSB1c2luZyBoYXJkd2FyZSBmdW5jdGlvbmFsaXR5IGFzIGluIHJhZGlvLXNpNDcweApAQCAtNjksNyArNzAsNyBAQAogVVNCIEF1ZGlvIGlzIHByb3ZpZGVkIGJ5IHRoZSBBTFNBIHNuZF91c2JfYXVkaW8gbW9kdWxlLiBJdCBpcyByZWNvbW1lbmRlZCB0bwogYWxzbyBzZWxlY3QgU05EX1VTQl9BVURJTywgYXMgdGhpcyBpcyByZXF1aXJlZCB0byBnZXQgc291bmQgZnJvbSB0aGUgcmFkaW8uIEZvcgogbGlzdGluZyB5b3UgaGF2ZSB0byByZWRpcmVjdCB0aGUgc291bmQsIGZvciBleGFtcGxlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1jb21tYW5kcy4KK2NvbW1hbmRzLiBQbGVhc2UgYWRqdXN0IHRoZSBhdWRpbyBkZXZpY2VzIHRvIHlvdXIgbmVlZHMgKC9kZXYvZHNwKiBhbmQgaHc6eCx4KS4KIAogSWYgeW91IGp1c3Qgd2FudCB0byB0ZXN0IGF1ZGlvICh2ZXJ5IHBvb3IgcXVhbGl0eSk6CiBjYXQgL2Rldi9kc3AxID4gL2Rldi9kc3AKQEAgLTgwLDYgKzgxLDEwIEBACiBJZiB5b3UgdXNlIGFydHMgdHJ5OgogYXJlY29yZCAtRCBodzoxLDAgLXI5NjAwMCAtYzIgLWYgUzE2X0xFIHwgYXJ0c2RzcCBhcGxheSAtQiAtCiAKK0lmIHlvdSB1c2UgbXBsYXllciB0cnk6CittcGxheWVyIC1yYWRpbyBhZGV2aWNlPWh3PTEuMDphcmF0ZT05NjAwMCBcCisJLXJhd2F1ZGlvIHJhdGU9OTYwMDAgXAorCXJhZGlvOi8vPGZyZXF1ZW5jeT4vY2FwdHVyZQogCiBNb2R1bGUgUGFyYW1ldGVycwogPT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKaW5kZXggZmYxMjQzNy4uYTMxMTc3MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKQEAgLTQ3LDcgKzQ3LDkgQEAKIDMpIENyZWF0aW5nIFY0TDIgZGV2aWNlIG5vZGVzICgvZGV2L3ZpZGVvWCwgL2Rldi92YmlYLCAvZGV2L3JhZGlvWCBhbmQKICAgIC9kZXYvdnR4WCkgYW5kIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlLW5vZGUgc3BlY2lmaWMgZGF0YS4KIAotNCkgRmlsZWhhbmRsZS1zcGVjaWZpYyBzdHJ1Y3RzIGNvbnRhaW5pbmcgcGVyLWZpbGVoYW5kbGUgZGF0YS4KKzQpIEZpbGVoYW5kbGUtc3BlY2lmaWMgc3RydWN0cyBjb250YWluaW5nIHBlci1maWxlaGFuZGxlIGRhdGE7CisKKzUpIHZpZGVvIGJ1ZmZlciBoYW5kbGluZy4KIAogVGhpcyBpcyBhIHJvdWdoIHNjaGVtYXRpYyBvZiBob3cgaXQgYWxsIHJlbGF0ZXM6CiAKQEAgLTgyLDEyICs4NCwyMCBAQAogCXY0bDJfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CiAKIFJlZ2lzdHJhdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIHY0bDJfZGV2aWNlIHN0cnVjdCBhbmQgbGluayBkZXYtPmRyaXZlcl9kYXRhCi10byB2NGwyX2Rldi4gUmVnaXN0cmF0aW9uIHdpbGwgYWxzbyBzZXQgdjRsMl9kZXYtPm5hbWUgdG8gYSB2YWx1ZSBkZXJpdmVkIGZyb20KLWRldiAoZHJpdmVyIG5hbWUgZm9sbG93ZWQgYnkgdGhlIGJ1c19pZCwgdG8gYmUgcHJlY2lzZSkuIFlvdSBtYXkgY2hhbmdlIHRoZQotbmFtZSBhZnRlciByZWdpc3RyYXRpb24gaWYgeW91IHdhbnQuCit0byB2NGwyX2Rldi4gSWYgdjRsMl9kZXYtPm5hbWUgaXMgZW1wdHkgdGhlbiBpdCB3aWxsIGJlIHNldCB0byBhIHZhbHVlIGRlcml2ZWQKK2Zyb20gZGV2IChkcml2ZXIgbmFtZSBmb2xsb3dlZCBieSB0aGUgYnVzX2lkLCB0byBiZSBwcmVjaXNlKS4gSWYgeW91IHNldCBpdAordXAgYmVmb3JlIGNhbGxpbmcgdjRsMl9kZXZpY2VfcmVnaXN0ZXIgdGhlbiBpdCB3aWxsIGJlIHVudG91Y2hlZC4gSWYgZGV2IGlzCitOVUxMLCB0aGVuIHlvdSAqbXVzdCogc2V0dXAgdjRsMl9kZXYtPm5hbWUgYmVmb3JlIGNhbGxpbmcgdjRsMl9kZXZpY2VfcmVnaXN0ZXIuCiAKIFRoZSBmaXJzdCAnZGV2JyBhcmd1bWVudCBpcyBub3JtYWxseSB0aGUgc3RydWN0IGRldmljZSBwb2ludGVyIG9mIGEgcGNpX2RldiwKLXVzYl9kZXZpY2Ugb3IgcGxhdGZvcm1fZGV2aWNlLgordXNiX2RldmljZSBvciBwbGF0Zm9ybV9kZXZpY2UuIEl0IGlzIHJhcmUgZm9yIGRldiB0byBiZSBOVUxMLCBidXQgaXQgaGFwcGVucword2l0aCBJU0EgZGV2aWNlcyBvciB3aGVuIG9uZSBkZXZpY2UgY3JlYXRlcyBtdWx0aXBsZSBQQ0kgZGV2aWNlcywgdGh1cyBtYWtpbmcKK2l0IGltcG9zc2libGUgdG8gYXNzb2NpYXRlIHY0bDJfZGV2IHdpdGggYSBwYXJ0aWN1bGFyIHBhcmVudC4KKworWW91IGNhbiBhbHNvIHN1cHBseSBhIG5vdGlmeSgpIGNhbGxiYWNrIHRoYXQgY2FuIGJlIGNhbGxlZCBieSBzdWItZGV2aWNlcyB0bworbm90aWZ5IHlvdSBvZiBldmVudHMuIFdoZXRoZXIgeW91IG5lZWQgdG8gc2V0IHRoaXMgZGVwZW5kcyBvbiB0aGUgc3ViLWRldmljZS4KK0FueSBub3RpZmljYXRpb25zIGEgc3ViLWRldmljZSBzdXBwb3J0cyBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIgaW4KK2luY2x1ZGUvbWVkaWEvPHN1YmRldmljZT4uaC4KIAogWW91IHVucmVnaXN0ZXIgd2l0aDoKIApAQCAtOTUsNiArMTA1LDE3IEBACiAKIFVucmVnaXN0ZXJpbmcgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgdW5yZWdpc3RlciBhbGwgc3ViZGV2cyBmcm9tIHRoZSBkZXZpY2UuCiAKK0lmIHlvdSBoYXZlIGEgaG90cGx1Z2dhYmxlIGRldmljZSAoZS5nLiBhIFVTQiBkZXZpY2UpLCB0aGVuIHdoZW4gYSBkaXNjb25uZWN0CitoYXBwZW5zIHRoZSBwYXJlbnQgZGV2aWNlIGJlY29tZXMgaW52YWxpZC4gU2luY2UgdjRsMl9kZXZpY2UgaGFzIGEgcG9pbnRlciB0bwordGhhdCBwYXJlbnQgZGV2aWNlIGl0IGhhcyB0byBiZSBjbGVhcmVkIGFzIHdlbGwgdG8gbWFyayB0aGF0IHRoZSBwYXJlbnQgaXMKK2dvbmUuIFRvIGRvIHRoaXMgY2FsbDoKKworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CisKK1RoaXMgZG9lcyAqbm90KiB1bnJlZ2lzdGVyIHRoZSBzdWJkZXZzLCBzbyB5b3Ugc3RpbGwgbmVlZCB0byBjYWxsIHRoZQordjRsMl9kZXZpY2VfdW5yZWdpc3RlcigpIGZ1bmN0aW9uIGZvciB0aGF0LiBJZiB5b3VyIGRyaXZlciBpcyBub3QgaG90cGx1Z2dhYmxlLAordGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgpLgorCiBTb21ldGltZXMgeW91IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGFsbCBkZXZpY2VzIHJlZ2lzdGVyZWQgYnkgYSBzcGVjaWZpYwogZHJpdmVyLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgaWYgbXVsdGlwbGUgZGV2aWNlIGRyaXZlcnMgdXNlIHRoZSBzYW1lCiBoYXJkd2FyZS4gRS5nLiB0aGUgaXZ0dmZiIGRyaXZlciBpcyBhIGZyYW1lYnVmZmVyIGRyaXZlciB0aGF0IHVzZXMgdGhlIGl2dHYKQEAgLTEzNCw3ICsxNTUsNyBAQAogCiBzdGF0aWMgYXRvbWljX3QgZHJ2X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRydl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgZHJ2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJLi4uCkBAIC0yMTgsNyArMjM5LDcgQEAKIAogQSBzdWItZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdjRsMl9zdWJkZXYgc3RydWN0IHVzaW5nOgogCi0JdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZvcHMpOworCXY0bDJfc3ViZGV2X2luaXQoc2QsICZvcHMpOwogCiBBZnRlcndhcmRzIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgc3ViZGV2LT5uYW1lIHdpdGggYSB1bmlxdWUgbmFtZSBhbmQgc2V0IHRoZQogbW9kdWxlIG93bmVyLiBUaGlzIGlzIGRvbmUgZm9yIHlvdSBpZiB5b3UgdXNlIHRoZSBpMmMgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTIyNiw3ICsyNDcsNyBAQAogQSBkZXZpY2UgKGJyaWRnZSkgZHJpdmVyIG5lZWRzIHRvIHJlZ2lzdGVyIHRoZSB2NGwyX3N1YmRldiB3aXRoIHRoZQogdjRsMl9kZXZpY2U6CiAKLQlpbnQgZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KGRldmljZSwgc3ViZGV2KTsKKwlpbnQgZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCBzZCk7CiAKIFRoaXMgY2FuIGZhaWwgaWYgdGhlIHN1YmRldiBtb2R1bGUgZGlzYXBwZWFyZWQgYmVmb3JlIGl0IGNvdWxkIGJlIHJlZ2lzdGVyZWQuCiBBZnRlciB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgc3VjY2Vzc2Z1bGx5IHRoZSBzdWJkZXYtPmRldiBmaWVsZCBwb2ludHMgdG8KQEAgLTIzNCwxNyArMjU1LDE3IEBACiAKIFlvdSBjYW4gdW5yZWdpc3RlciBhIHN1Yi1kZXZpY2UgdXNpbmc6CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKIAotQWZ0ZXJ3YXJkcyB0aGUgc3ViZGV2IG1vZHVsZSBjYW4gYmUgdW5sb2FkZWQgYW5kIHN1YmRldi0+ZGV2ID09IE5VTEwuCitBZnRlcndhcmRzIHRoZSBzdWJkZXYgbW9kdWxlIGNhbiBiZSB1bmxvYWRlZCBhbmQgc2QtPmRldiA9PSBOVUxMLgogCiBZb3UgY2FuIGNhbGwgYW4gb3BzIGZ1bmN0aW9uIGVpdGhlciBkaXJlY3RseToKIAotCWVyciA9IHN1YmRldi0+b3BzLT5jb3JlLT5nX2NoaXBfaWRlbnQoc3ViZGV2LCAmY2hpcCk7CisJZXJyID0gc2QtPm9wcy0+Y29yZS0+Z19jaGlwX2lkZW50KHNkLCAmY2hpcCk7CiAKIGJ1dCBpdCBpcyBiZXR0ZXIgYW5kIGVhc2llciB0byB1c2UgdGhpcyBtYWNybzoKIAotCWVyciA9IHY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKKwllcnIgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKIAogVGhlIG1hY3JvIHdpbGwgdG8gdGhlIHJpZ2h0IE5VTEwgcG9pbnRlciBjaGVja3MgYW5kIHJldHVybnMgLUVOT0RFViBpZiBzdWJkZXYKIGlzIE5VTEwsIC1FTk9JT0NUTENNRCBpZiBlaXRoZXIgc3ViZGV2LT5jb3JlIG9yIHN1YmRldi0+Y29yZS0+Z19jaGlwX2lkZW50IGlzCkBAIC0yNTIsMTkgKzI3MywxOSBAQAogCiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgYWxsIG9yIGEgc3Vic2V0IG9mIHRoZSBzdWItZGV2aWNlczoKIAotCXY0bDJfZGV2aWNlX2NhbGxfYWxsKGRldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwodjRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBBbnkgc3ViZGV2IHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wcyBpcyBza2lwcGVkIGFuZCBlcnJvciByZXN1bHRzIGFyZQogaWdub3JlZC4gSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIGVycm9ycyB1c2UgdGhpczoKIAotCWVyciA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisJZXJyID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIodjRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBBbnkgZXJyb3IgZXhjZXB0IC1FTk9JT0NUTENNRCB3aWxsIGV4aXQgdGhlIGxvb3Agd2l0aCB0aGF0IGVycm9yLiBJZiBubwogZXJyb3JzIChleGNlcHQgLUVOT0lPQ1RMQ01EKSBvY2N1cmVkLCB0aGVuIDAgaXMgcmV0dXJuZWQuCiAKIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYm90aCBjYWxscyBpcyBhIGdyb3VwIElELiBJZiAwLCB0aGVuIGFsbCBzdWJkZXZzIGFyZQogY2FsbGVkLiBJZiBub24temVybywgdGhlbiBvbmx5IHRob3NlIHdob3NlIGdyb3VwIElEIG1hdGNoIHRoYXQgdmFsdWUgd2lsbAotYmUgY2FsbGVkLiBCZWZvcmUgYSBicmlkZ2UgZHJpdmVyIHJlZ2lzdGVycyBhIHN1YmRldiBpdCBjYW4gc2V0IHN1YmRldi0+Z3JwX2lkCitiZSBjYWxsZWQuIEJlZm9yZSBhIGJyaWRnZSBkcml2ZXIgcmVnaXN0ZXJzIGEgc3ViZGV2IGl0IGNhbiBzZXQgc2QtPmdycF9pZAogdG8gd2hhdGV2ZXIgdmFsdWUgaXQgd2FudHMgKGl0J3MgMCBieSBkZWZhdWx0KS4gVGhpcyB2YWx1ZSBpcyBvd25lZCBieSB0aGUKIGJyaWRnZSBkcml2ZXIgYW5kIHRoZSBzdWItZGV2aWNlIGRyaXZlciB3aWxsIG5ldmVyIG1vZGlmeSBvciB1c2UgaXQuCiAKQEAgLTI3Niw2ICsyOTcsMTEgQEAKIHY0bDJfZGV2aWNlX2NhbGxfYWxsKCkuIFRoYXQgZW5zdXJlcyB0aGF0IGl0IHdpbGwgb25seSBnbyB0byB0aGUgc3ViZGV2CiB0aGF0IG5lZWRzIGl0LgogCitJZiB0aGUgc3ViLWRldmljZSBuZWVkcyB0byBub3RpZnkgaXRzIHY0bDJfZGV2aWNlIHBhcmVudCBvZiBhbiBldmVudCwgdGhlbgoraXQgY2FuIGNhbGwgdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBub3RpZmljYXRpb24sIGFyZykuIFRoaXMgbWFjcm8gY2hlY2tzCit3aGV0aGVyIHRoZXJlIGlzIGEgbm90aWZ5KCkgY2FsbGJhY2sgZGVmaW5lZCBhbmQgcmV0dXJucyAtRU5PREVWIGlmIG5vdC4KK090aGVyd2lzZSB0aGUgcmVzdWx0IG9mIHRoZSBub3RpZnkoKSBjYWxsIGlzIHJldHVybmVkLgorCiBUaGUgYWR2YW50YWdlIG9mIHVzaW5nIHY0bDJfc3ViZGV2IGlzIHRoYXQgaXQgaXMgYSBnZW5lcmljIHN0cnVjdCBhbmQgZG9lcwogbm90IGNvbnRhaW4gYW55IGtub3dsZWRnZSBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU28gYSBkcml2ZXIgbWlnaHQKIGNvbnRhaW4gc2V2ZXJhbCBzdWJkZXZzIHRoYXQgdXNlIGFuIEkyQyBidXMsIGJ1dCBhbHNvIGEgc3ViZGV2IHRoYXQgaXMKQEAgLTM0MCw2ICszNjYsMTIgQEAKIGlzIGNhbGxlZC4gVGhpcyB3aWxsIHVucmVnaXN0ZXIgdGhlIHN1Yi1kZXZpY2UgZnJvbSB0aGUgYnJpZGdlIGRyaXZlci4gSXQgaXMKIHNhZmUgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIHN1Yi1kZXZpY2Ugd2FzIG5ldmVyIHJlZ2lzdGVyZWQuCiAKK1lvdSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3aGVuIHRoZSBicmlkZ2UgZHJpdmVyIGRlc3Ryb3lzIHRoZSBpMmMgYWRhcHRlcgordGhlIHJlbW92ZSgpIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9mIHRoZSBpMmMgZGV2aWNlcyBvbiB0aGF0IGFkYXB0ZXIuCitBZnRlciB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHY0bDJfc3ViZGV2IHN0cnVjdHVyZXMgYXJlIGludmFsaWQsIHNvIHRoZXkKK2hhdmUgdG8gYmUgdW5yZWdpc3RlcmVkIGZpcnN0LiBDYWxsaW5nIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKQorZnJvbSB0aGUgcmVtb3ZlKCkgY2FsbGJhY2sgZW5zdXJlcyB0aGF0IHRoaXMgaXMgYWx3YXlzIGRvbmUgY29ycmVjdGx5LgorCiAKIFRoZSBicmlkZ2UgZHJpdmVyIGFsc28gaGFzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBpdCBjYW4gdXNlOgogCkBAIC0zNDksOCArMzgxLDggQEAKIGNhbGxzIGkyY19uZXdfZGV2aWNlKCkgd2l0aCB0aGUgZ2l2ZW4gaTJjX2FkYXB0ZXIgYW5kIGNoaXAvYWRkcmVzcyBhcmd1bWVudHMuCiBJZiBhbGwgZ29lcyB3ZWxsLCB0aGVuIGl0IHJlZ2lzdGVycyB0aGUgc3ViZGV2IHdpdGggdGhlIHY0bDJfZGV2aWNlLiBJdCBnZXRzCiB0aGUgdjRsMl9kZXZpY2UgYnkgY2FsbGluZyBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpLCBzbyB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQotdGhhdCBhZGFwZGF0YSBpcyBzZXQgdG8gdjRsMl9kZXZpY2Ugd2hlbiB5b3Ugc2V0dXAgdGhlIGkyY19hZGFwdGVyIGluIHlvdXIKLWRyaXZlci4KK3RvIGNhbGwgaTJjX3NldF9hZGFwZGF0YShhZGFwdGVyLCB2NGwyX2RldmljZSkgd2hlbiB5b3Ugc2V0dXAgdGhlIGkyY19hZGFwdGVyCitpbiB5b3VyIGRyaXZlci4KIAogWW91IGNhbiBhbHNvIHVzZSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigpIHdoaWNoIGlzIHZlcnkgc2ltaWxhciB0bwogdjRsMl9pMmNfbmV3X3N1YmRldigpLCBleGNlcHQgdGhhdCBpdCBoYXMgYW4gYXJyYXkgb2YgcG9zc2libGUgSTJDIGFkZHJlc3NlcwpAQCAtMzU4LDYgKzM5MCwxNCBAQAogCiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4gTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KIAorTm90ZSB0aGF0IHRoZSBjaGlwaWQgeW91IHBhc3MgdG8gdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldigpIGlzIHVzdWFsbHkKK3RoZSBzYW1lIGFzIHRoZSBtb2R1bGUgbmFtZS4gSXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY2hpcCB2YXJpYW50LCBlLmcuCisic2FhNzExNCIgb3IgInNhYTcxMTUiLiBJbiBnZW5lcmFsIHRob3VnaCB0aGUgaTJjIGRyaXZlciBhdXRvZGV0ZWN0cyB0aGlzLgorVGhlIHVzZSBvZiBjaGlwaWQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0IG1vcmUgY2xvc2VseSBhdCBhCitsYXRlciBkYXRlLiBJdCBkaWZmZXJzIGJldHdlZW4gaTJjIGRyaXZlcnMgYW5kIGFzIHN1Y2ggY2FuIGJlIGNvbmZ1c2luZy4KK1RvIHNlZSB3aGljaCBjaGlwIHZhcmlhbnRzIGFyZSBzdXBwb3J0ZWQgeW91IGNhbiBsb29rIGluIHRoZSBpMmMgZHJpdmVyIGNvZGUKK2ZvciB0aGUgaTJjX2RldmljZV9pZCB0YWJsZS4gVGhpcyBsaXN0cyBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuCisKIAogc3RydWN0IHZpZGVvX2RldmljZQogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk2LDYgKzQzNiwxNSBAQAogLSBpb2N0bF9vcHM6IGlmIHlvdSB1c2UgdGhlIHY0bDJfaW9jdGxfb3BzIHRvIHNpbXBsaWZ5IGlvY3RsIG1haW50ZW5hbmNlCiAgIChoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgYW5kIGl0IG1pZ2h0IGJlY29tZSBjb21wdWxzb3J5IGluIHRoZQogICBmdXR1cmUhKSwgdGhlbiBzZXQgdGhpcyB0byB5b3VyIHY0bDJfaW9jdGxfb3BzIHN0cnVjdC4KKy0gcGFyZW50OiB5b3Ugb25seSBzZXQgdGhpcyBpZiB2NGwyX2RldmljZSB3YXMgcmVnaXN0ZXJlZCB3aXRoIE5VTEwgYXMKKyAgdGhlIHBhcmVudCBkZXZpY2Ugc3RydWN0LiBUaGlzIG9ubHkgaGFwcGVucyBpbiBjYXNlcyB3aGVyZSBvbmUgaGFyZHdhcmUKKyAgZGV2aWNlIGhhcyBtdWx0aXBsZSBQQ0kgZGV2aWNlcyB0aGF0IGFsbCBzaGFyZSB0aGUgc2FtZSB2NGwyX2RldmljZSBjb3JlLgorCisgIFRoZSBjeDg4IGRyaXZlciBpcyBhbiBleGFtcGxlIG9mIHRoaXM6IG9uZSBjb3JlIHY0bDJfZGV2aWNlIHN0cnVjdCwgYnV0CisgIGl0IGlzIHVzZWQgYnkgYm90aCBhbiByYXcgdmlkZW8gUENJIGRldmljZSAoY3g4ODAwKSBhbmQgYSBNUEVHIFBDSSBkZXZpY2UKKyAgKGN4ODgwMikuIFNpbmNlIHRoZSB2NGwyX2RldmljZSBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhcgorICBQQ0kgZGV2aWNlIGl0IGlzIHNldHVwIHdpdGhvdXQgYSBwYXJlbnQgZGV2aWNlLiBCdXQgd2hlbiB0aGUgc3RydWN0CisgIHZpZGVvX2RldmljZSBpcyBzZXR1cCB5b3UgZG8ga25vdyB3aGljaCBwYXJlbnQgUENJIGRldmljZSB0byB1c2UuCiAKIElmIHlvdSB1c2UgdjRsMl9pb2N0bF9vcHMsIHRoZW4geW91IHNob3VsZCBzZXQgZWl0aGVyIC51bmxvY2tlZF9pb2N0bCBvcgogLmlvY3RsIHRvIHZpZGVvX2lvY3RsMiBpbiB5b3VyIHY0bDJfZmlsZV9vcGVyYXRpb25zIHN0cnVjdC4KQEAgLTQ5OSw4ICs1NDgsOCBAQAogCiBZb3UgY2FuIHNldC9nZXQgZHJpdmVyIHByaXZhdGUgZGF0YSBpbiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCB1c2luZzoKIAotdm9pZCAqdmlkZW9fZ2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KTsKLXZvaWQgdmlkZW9fc2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKK3ZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwordm9pZCB2aWRlb19zZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCB2b2lkICpkYXRhKTsKIAogTm90ZSB0aGF0IHlvdSBjYW4gc2FmZWx5IGNhbGwgdmlkZW9fc2V0X2RydmRhdGEoKSBiZWZvcmUgY2FsbGluZwogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkuCkBAIC01MTksMyArNTY4LDEwMyBAQAogWW91IGNhbiBnbyBmcm9tIGEgdmlkZW9fZGV2aWNlIHN0cnVjdCB0byB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0IHVzaW5nOgogCiBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gdmRldi0+djRsMl9kZXY7CisKK3ZpZGVvIGJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGVhbGluZyB3aXRoIHZpZGVvCitidWZmZXJzLiBUaG9zZSBtZXRob2RzIGFsbG93IGEgZHJpdmVyIHRvIGltcGxlbWVudCByZWFkKCksIG1tYXAoKSBhbmQKK292ZXJsYXkoKSBvbiBhIGNvbnNpc3RlbnQgd2F5LgorCitUaGVyZSBhcmUgY3VycmVudGx5IG1ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0CitzdXBwb3J0cyBETUEgd2l0aCBzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoCitsaW5lYXIgYWNjZXNzICh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkKK3VzZWQgb24gVVNCIGRyaXZlcnMgKHZpZGVvYnVmLXZtYWxsb2MpLgorCitBbnkgZHJpdmVyIHVzaW5nIHZpZGVvYnVmIHNob3VsZCBwcm92aWRlIG9wZXJhdGlvbnMgKGNhbGxiYWNrcykgZm9yCitmb3VyIGhhbmRsZXJzOgorCitvcHMtPmJ1Zl9zZXR1cCAgIC0gY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gYnVmZmVycyBhbmQgYXZvaWQgdGhleQorCQkgICB0byB3YXN0ZSBtb3JlIHRoYW4gc29tZSBtYXhpbXVtIGxpbWl0IG9mIFJBTTsKK29wcy0+YnVmX3ByZXBhcmUgLSBmaWxscyB0aGUgdmlkZW8gYnVmZmVyIHN0cnVjdHMgYW5kIGNhbGxzCisJCSAgIHZpZGVvYnVmX2lvbG9jaygpIHRvIGFsbG9jIGFuZCBwcmVwYXJlIG1tYXBlZCBtZW1vcnk7CitvcHMtPmJ1Zl9xdWV1ZSAgIC0gYWR2aWNlcyB0aGUgZHJpdmVyIHRoYXQgYW5vdGhlciBidWZmZXIgd2VyZQorCQkgICByZXF1ZXN0ZWQgKGJ5IHJlYWQoKSBvciBieSBRQlVGKTsKK29wcy0+YnVmX3JlbGVhc2UgLSBmcmVlcyBhbnkgYnVmZmVyIHRoYXQgd2VyZSBhbGxvY2F0ZWQuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgdGhlIGRyaXZlciBuZWVkIHRvIGhhdmUgYSBjb2RlIChnZW5lcmFsbHkgY2FsbGVkIGF0CitpbnRlcnJ1cHQgY29udGV4dCkgdGhhdCB3aWxsIHByb3Blcmx5IGhhbmRsZSB0aGUgYnVmZmVyIHJlcXVlc3QgbGlzdHMsCithbm5vdW5jaW5nIHRoYXQgYSBuZXcgYnVmZmVyIHdlcmUgZmlsbGVkLgorCitUaGUgaXJxIGhhbmRsaW5nIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGUgdmlkZW9idWYgdGFzayBsaXN0cywgaW4gb3JkZXIKK3RvIGFkdmljZSB2aWRlb2J1ZiB0aGF0IGEgbmV3IGZyYW1lIHdlcmUgZmlsbGVkLCBpbiBvcmRlciB0byBob25vciB0byBhCityZXF1ZXN0LiBUaGUgY29kZSBpcyBnZW5lcmFsbHkgbGlrZSB0aGlzIG9uZToKKwlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpCisJCXJldHVybjsKKworCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgdmJ1ZmZlciwgdmIucXVldWUpOworCisJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKQorCQlyZXR1cm47CisKKwkvKiBTb21lIGxvZ2ljIHRvIGhhbmRsZSB0aGUgYnVmIG1heSBiZSBuZWVkZWQgaGVyZSAqLworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CisJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKworVGhvc2UgYXJlIHRoZSB2aWRlb2J1ZmZlciBmdW5jdGlvbnMgdXNlZCBvbiBkcml2ZXJzLCBpbXBsZW1lbnRlZCBvbgordmlkZW9idWYtY29yZToKKworLSBWaWRlb2J1ZiBpbml0IGZ1bmN0aW9ucworICB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCkKKyAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCB1c2VzIERNQQorICAgICAgU2NhdHRlci9HYXRoZXIgYnVmZmVycy4KKworICB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQKKyAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCBuZWVkIERNQQorICAgICAgY29udGlndW91cyBidWZmZXJzLgorCisgIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgpCisgICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisgICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBVU0IgKGFuZCBvdGhlciBkcml2ZXJzKQorICAgICAgdGhhdCBuZWVkIGEgdm1hbGxvY2VkIHR5cGUgb2YgdmlkZW9idWYuCisKKy0gdmlkZW9idWZfaW9sb2NrKCkKKyAgUHJlcGFyZXMgdGhlIHZpZGVvYnVmIG1lbW9yeSBmb3IgdGhlIHByb3BlciBtZXRob2QgKHJlYWQsIG1tYXAsIG92ZXJsYXkpLgorCistIHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koKQorICBDaGVja3MgaWYgYSB2aWRlb2J1ZiBpcyBzdHJlYW1pbmcuCisKKy0gdmlkZW9idWZfcXVldWVfY2FuY2VsKCkKKyAgU3RvcHMgdmlkZW8gaGFuZGxpbmcuCisKKy0gdmlkZW9idWZfbW1hcF9mcmVlKCkKKyAgZnJlZXMgbW1hcCBidWZmZXJzLgorCistIHZpZGVvYnVmX3N0b3AoKQorICBTdG9wcyB2aWRlbyBoYW5kbGluZywgZW5kcyBtbWFwIGFuZCBmcmVlcyBtbWFwIGFuZCBvdGhlciBidWZmZXJzLgorCistIFY0TDIgYXBpIGZ1bmN0aW9ucy4gVGhvc2UgZnVuY3Rpb25zIGNvcnJlc3BvbmQgdG8gVklESU9DX2ZvbyBpb2N0bHM6CisgICB2aWRlb2J1Zl9yZXFidWZzKCksIHZpZGVvYnVmX3F1ZXJ5YnVmKCksIHZpZGVvYnVmX3FidWYoKSwKKyAgIHZpZGVvYnVmX2RxYnVmKCksIHZpZGVvYnVmX3N0cmVhbW9uKCksIHZpZGVvYnVmX3N0cmVhbW9mZigpLgorCistIFY0TDEgYXBpIGZ1bmN0aW9uIChjb3JyZXNwb25kcyB0byBWSURJT0NNQlVGIGlvY3RsKToKKyAgIHZpZGVvYnVmX2NnbWJ1ZigpCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggVjRMMQorICAgICAgQVBJLgorCistIFNvbWUgaGVscCBmdW5jdGlvbnMgZm9yIHJlYWQoKS9wb2xsKCkgb3BlcmF0aW9uczoKKyAgIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCkKKyAgICAgIEZvciBjb250aW51b3VzIHN0cmVhbSByZWFkKCkKKyAgIHZpZGVvYnVmX3JlYWRfb25lKCkKKyAgICAgIEZvciBzbmFwc2hvdCByZWFkKCkKKyAgIHZpZGVvYnVmX3BvbGxfc3RyZWFtKCkKKyAgICAgIHBvbGxpbmcgaGVscCBmdW5jdGlvbgorCitUaGUgYmV0dGVyIHdheSB0byB1bmRlcnN0YW5kIGl0IGlzIHRvIHRha2UgYSBsb29rIGF0IHZpdmkgZHJpdmVyLiBPbmUKK29mIHRoZSBtYWluIHJlYXNvbnMgZm9yIHZpdmkgaXMgdG8gYmUgYSB2aWRlb2J1ZiB1c2FnZSBleGFtcGxlLiB0aGUKK3ZpdmlfdGhyZWFkX3RpY2soKSBkb2VzIHRoZSB0YXNrIHRoYXQgdGhlIElSUSBjYWxsYmFjayB3b3VsZCBkbyBvbiBQQ0kKK2RyaXZlcnMgKG9yIHRoZSBpcnEgY2FsbGJhY2sgb24gVVNCKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKaW5kZXggZDZlNzBiZS4uMDU3NjljZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKQEAgLTEwNSw4ICsxMDUsOCBAQAogICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2cGljOwogCiAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnNyYzsKLSAgaW50IGJwcCA9IDI0LCByLCBnLCBiOwotICB1bnNpZ25lZCBpbnQgaSwgc3JjX2RlcHRoOworICBpbnQgYnBwID0gMjQsIHIgPSAwLCBnID0gMCwgYiA9IDA7CisgIHVuc2lnbmVkIGludCBpLCBzcmNfZGVwdGggPSAxNjsKIAogICBpZiAoZmQgPCAwKSB7CiAgICAgcGVycm9yKFZJREVPX0RFVik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dAppbmRleCA1YzgxZTNhLi43ZjNkMTk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQKQEAgLTY1LDMgKzY1LDQgQEAKIDB4MDZkNiAgMHgwMDNiICAgVHJ1c3QgICAgICAgICAgIFBvd2VyY0BtIDk3MFoKIDB4MGExNyAgMHgwMDRlICAgUGVudGF4ICAgICAgICAgIE9wdGlvIDUwCiAweDA0MWUgIDB4NDA1ZCAgIENyZWF0aXZlICAgICAgICBEaVZpIENBTSA1MTYKKzB4MDhjYSAgMHgyMTAyICAgQWlwdGVrICAgICAgICAgIERWIFQzMDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dCBiL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDdiMWEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0CkBAIC0wLDAgKzEsMTAxIEBACisKK01pbmktSE9XVE8gZm9yIHVzaW5nIHRoZSBlYXJseXByaW50az1kYmdwIGJvb3Qgb3B0aW9uIHdpdGggYQorVVNCMiBEZWJ1ZyBwb3J0IGtleSBhbmQgYSBkZWJ1ZyBjYWJsZSwgb24geDg2IHN5c3RlbXMuCisKK1lvdSBuZWVkIHR3byBjb21wdXRlcnMsIHRoZSAnVVNCIGRlYnVnIGtleScgc3BlY2lhbCBnYWRnZXQgYW5kCithbmQgdHdvIFVTQiBjYWJsZXMsIGNvbm5lY3RlZCBsaWtlIHRoaXM6CisKKyAgW2hvc3QvdGFyZ2V0XSA8LS0tLS0tLT4gW1VTQiBkZWJ1ZyBrZXldIDwtLS0tLS0tPiBbY2xpZW50L2NvbnNvbGVdCisKKzEuIFRoZXJlIGFyZSB0aHJlZSBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHM6CisKKyBhLikgSG9zdC90YXJnZXQgc3lzdGVtIG5lZWRzIHRvIGhhdmUgVVNCIGRlYnVnIHBvcnQgY2FwYWJpbGl0eS4KKworIFlvdSBjYW4gY2hlY2sgdGhpcyBjYXBhYmlsaXR5IGJ5IGxvb2tpbmcgYXQgYSAnRGVidWcgcG9ydCcgYml0IGluCisgdGhlIGxzcGNpIC12dnYgb3V0cHV0OgorCisgIyBsc3BjaSAtdnZ2CisgLi4uCisgMDA6MWQuNyBVU0IgQ29udHJvbGxlcjogSW50ZWwgQ29ycG9yYXRpb24gODI4MDFIIChJQ0g4IEZhbWlseSkgVVNCMiBFSENJIENvbnRyb2xsZXIgIzEgKHJldiAwMykgKHByb2ctaWYgMjAgW0VIQ0ldKQorICAgICAgICAgU3Vic3lzdGVtOiBMZW5vdm8gVGhpbmtQYWQgVDYxCisgICAgICAgICBDb250cm9sOiBJL08tIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJFcnItIFN0ZXBwaW5nLSBTRVJSKyBGYXN0QjJCLSBEaXNJTlR4LQorICAgICAgICAgU3RhdHVzOiBDYXArIDY2TUh6LSBVREYtIEZhc3RCMkIrIFBhckVyci0gREVWU0VMPW1lZGl1bSA+VEFib3J0LSA8VEFib3J0LSA8TUFib3J0LSA+U0VSUi0gPFBFUlItIElOVHgtCisgICAgICAgICBMYXRlbmN5OiAwCisgICAgICAgICBJbnRlcnJ1cHQ6IHBpbiBEIHJvdXRlZCB0byBJUlEgMTkKKyAgICAgICAgIFJlZ2lvbiAwOiBNZW1vcnkgYXQgZmUyMjcwMDAgKDMyLWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9MUtdCisgICAgICAgICBDYXBhYmlsaXRpZXM6IFs1MF0gUG93ZXIgTWFuYWdlbWVudCB2ZXJzaW9uIDIKKyAgICAgICAgICAgICAgICAgRmxhZ3M6IFBNRUNsay0gRFNJLSBEMS0gRDItIEF1eEN1cnJlbnQ9Mzc1bUEgUE1FKEQwKyxEMS0sRDItLEQzaG90KyxEM2NvbGQrKQorICAgICAgICAgICAgICAgICBTdGF0dXM6IEQwIFBNRS1FbmFibGUtIERTZWw9MCBEU2NhbGU9MCBQTUUrCisgICAgICAgICBDYXBhYmlsaXRpZXM6IFs1OF0gRGVidWcgcG9ydDogQkFSPTEgb2Zmc2V0PTAwYTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXiA8PT09PT09PT09PT09PT09PT09PT0gWyBIRVJFIF0KKwkgS2VybmVsIGRyaXZlciBpbiB1c2U6IGVoY2lfaGNkCisgICAgICAgICBLZXJuZWwgbW9kdWxlczogZWhjaS1oY2QKKyAuLi4KKworKCBJZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBsaXN0IGEgZGVidWcgcG9ydCBjYXBhYmlsaXR5IHRoZW4geW91IHByb2JhYmx5CisgIHdvbnQgYmUgYWJsZSB0byB1c2UgdGhlIFVTQiBkZWJ1ZyBrZXkuICkKKworIGIuKSBZb3UgYWxzbyBuZWVkIGEgTmV0Y2hpcCBVU0IgZGVidWcgY2FibGUva2V5OgorCisgICAgICAgIGh0dHA6Ly93d3cucGx4dGVjaC5jb20vcHJvZHVjdHMvTkVUMjAwMC9ORVQyMERDL2RlZmF1bHQuYXNwCisKKyAgICAgVGhpcyBpcyBhIHNtYWxsIGJsdWUgcGxhc3RpYyBjb25uZWN0b3Igd2l0aCB0d28gVVNCIGNvbm5lY3Rpb25zLAorICAgICBpdCBkcmF3cyBwb3dlciBmcm9tIGl0cyBVU0IgY29ubmVjdGlvbnMuCisKKyBjLikgVGhpcmRseSwgeW91IG5lZWQgYSBzZWNvbmQgY2xpZW50L2NvbnNvbGUgc3lzdGVtIHdpdGggYSByZWd1bGFyIFVTQiBwb3J0LgorCisyLiBTb2Z0d2FyZSByZXF1aXJlbWVudHM6CisKKyBhLikgT24gdGhlIGhvc3QvdGFyZ2V0IHN5c3RlbToKKworICAgIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWcgb3B0aW9uOgorCisgICAgICBDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQorCisgICAgQW5kIHlvdSBuZWVkIHRvIGFkZCB0aGUgYm9vdCBjb21tYW5kIGxpbmU6ICJlYXJseXByaW50az1kYmdwIi4KKyAgICAoSWYgeW91IGFyZSB1c2luZyBHcnViLCBhcHBlbmQgaXQgdG8gdGhlICdrZXJuZWwnIGxpbmUgaW4KKyAgICAgL2V0Yy9ncnViLmNvbmYpCisKKyAgICBOT1RFOiBub3JtYWxseSBlYXJseXByaW50ayBjb25zb2xlIGdldHMgdHVybmVkIG9mZiBvbmNlIHRoZQorICAgIHJlZ3VsYXIgY29uc29sZSBpcyBhbGl2ZSAtIHVzZSAiZWFybHlwcmludGs9ZGJncCxrZWVwIiB0byBrZWVwCisgICAgdGhpcyBjaGFubmVsIG9wZW4gYmV5b25kIGVhcmx5IGJvb3R1cC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvcgorICAgIGRlYnVnZ2luZyBjcmFzaGVzIHVuZGVyIFhvcmcsIGV0Yy4KKworIGIuKSBPbiB0aGUgY2xpZW50L2NvbnNvbGUgc3lzdGVtOgorCisgICAgWW91IHNob3VsZCBlbmFibGUgdGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlnIG9wdGlvbjoKKworICAgICAgQ09ORklHX1VTQl9TRVJJQUxfREVCVUc9eQorCisgICAgT24gdGhlIG5leHQgYm9vdHVwIHdpdGggdGhlIG1vZGlmaWVkIGtlcm5lbCB5b3Ugc2hvdWxkCisgICAgZ2V0IGEgL2Rldi90dHlVU0J4IGRldmljZShzKS4KKworICAgIE5vdyB0aGlzIGNoYW5uZWwgb2Yga2VybmVsIG1lc3NhZ2VzIGlzIHJlYWR5IHRvIGJlIHVzZWQ6IHN0YXJ0CisgICAgeW91ciBmYXZvcml0ZSB0ZXJtaW5hbCBlbXVsYXRvciAobWluaWNvbSwgZXRjLikgYW5kIHNldAorICAgIGl0IHVwIHRvIHVzZSAvZGV2L3R0eVVTQjAgLSBvciB1c2UgYSByYXcgJ2NhdCAvZGV2L3R0eVVTQngnIHRvCisgICAgc2VlIHRoZSByYXcgb3V0cHV0LgorCisgYy4pIE9uIE52aWRpYSBTb3V0aGJyaWRnZSBiYXNlZCBzeXN0ZW1zOiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIHByb2JlCisgICAgIGFuZCBmaW5kIG91dCB3aGljaCBwb3J0IGhhcyBkZWJ1ZyBkZXZpY2UgY29ubmVjdGVkLgorCiszLiBUZXN0aW5nIHRoYXQgaXQgd29ya3MgZmluZToKKworICAgWW91IGNhbiB0ZXN0IHRoZSBvdXRwdXQgYnkgdXNpbmcgZWFybHlwcmludGs9ZGJncCxrZWVwIGFuZCBwcm92b2tpbmcKKyAgIGtlcm5lbCBtZXNzYWdlcyBvbiB0aGUgaG9zdC90YXJnZXQgc3lzdGVtLiBZb3UgY2FuIHByb3Zva2UgYSBoYXJtbGVzcworICAga2VybmVsIG1lc3NhZ2UgYnkgZm9yIGV4YW1wbGUgZG9pbmc6CisKKyAgICAgZWNobyBoID4gL3Byb2Mvc3lzcnEtdHJpZ2dlcgorCisgICBPbiB0aGUgaG9zdC90YXJnZXQgc3lzdGVtIHlvdSBzaG91bGQgc2VlIHRoaXMgaGVscCBsaW5lIGluICJkbWVzZyIgb3V0cHV0OgorCisgICAgIFN5c1JxIDogSEVMUCA6IGxvZ2xldmVsKDAtOSkgcmVCb290IENyYXNoZHVtcCB0ZXJtaW5hdGUtYWxsLXRhc2tzKEUpIG1lbW9yeS1mdWxsLW9vbS1raWxsKEYpIGtpbGwtYWxsLXRhc2tzKEkpIHNhSyBzaG93LWJhY2t0cmFjZS1hbGwtYWN0aXZlLWNwdXMoTCkgc2hvdy1tZW1vcnktdXNhZ2UoTSkgbmljZS1hbGwtUlQtdGFza3MoTikgcG93ZXJPZmYgc2hvdy1yZWdpc3RlcnMoUCkgc2hvdy1hbGwtdGltZXJzKFEpIHVuUmF3IFN5bmMgc2hvdy10YXNrLXN0YXRlcyhUKSBVbm1vdW50IHNob3ctYmxvY2tlZC10YXNrcyhXKSBkdW1wLWZ0cmFjZS1idWZmZXIoWikKKworICAgT24gdGhlIGNsaWVudC9jb25zb2xlIHN5c3RlbSBkbzoKKworICAgICAgIGNhdCAvZGV2L3R0eVVTQjAKKworICAgQW5kIHlvdSBzaG91bGQgc2VlIHRoZSBoZWxwIGxpbmUgYWJvdmUgZGlzcGxheWVkIHNob3J0bHkgYWZ0ZXIgeW91J3ZlCisgICBwcm92b2tlZCBpdCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisKK0lmIGl0IGRvZXMgbm90IHdvcmsgdGhlbiBwbGVhc2UgYXNrIGFib3V0IGl0IG9uIHRoZSBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCittYWlsaW5nIGxpc3Qgb3IgY29udGFjdCB0aGUgeDg2IG1haW50YWluZXJzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA3MWIxYjAzLi42MzYwYjliIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzU3LDYgKzM1Nyw3IEBACiBQOglJdmFuIEtva3NoYXlza3kKIE06CWlua0BqdXJhc3NpYy5wYXJrLm1zdS5ydQogUzoJTWFpbnRhaW5lZCBmb3IgMi40OyBQQ0kgc3VwcG9ydCBmb3IgMi42LgorTDoJbGludXgtYWxwaGFAdmdlci5rZXJuZWwub3JnCiAKIEFNRCBHRU9ERSBDUzU1MzYgVVNCIERFVklDRSBDT05UUk9MTEVSIERSSVZFUgogUDoJVGhvbWFzIERhaGxtYW5uCkBAIC0xMDYzLDcgKzEwNjQsNiBAQAogUDoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCiBNOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC0xOTUxLDYgKzE5NTEsMTIgQEAKIFc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLwogUzoJTWFpbnRhaW5lZAogCitIWVBFUlZJU09SIFZJUlRVQUwgQ09OU09MRSBEUklWRVIKK0w6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglPZGQgRml4ZXMKK0Y6CWRyaXZlcnMvY2hhci9odmNfKgorCiBHU1BDQSBGSU5FUElYIFNVQkRSSVZFUgogUDoJRnJhbmsgWmFnbwogTToJZnJhbmtAemFnby5uZXQKQEAgLTIyMDgsMjUgKzIyMTQsMTIgQEAKIFQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvYmFydC9wYXRhLTIuNi8KIFM6CU1haW50YWluZWQKIAotSURFL0FUQVBJIENEUk9NIERSSVZFUgorSURFL0FUQVBJIERSSVZFUlMKIFA6CUJvcmlzbGF2IFBldGtvdgogTToJcGV0a292YmJAZ21haWwuY29tCiBMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLUlERS9BVEFQSSBGTE9QUFkgRFJJVkVSUwotUDoJUGF1bCBCcmlzdG93Ci1NOglQYXVsIEJyaXN0b3cgPHBhdWxAcGF1bGJyaXN0b3cubmV0PgotVzoJaHR0cDovL3BhdWxicmlzdG93Lm5ldC9saW51eC9pZGVmbG9wcHkuaHRtbAotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotCi1JREUvQVRBUEkgVEFQRSBEUklWRVJTCi1QOglHYWRpIE94bWFuCi1NOglHYWRpIE94bWFuIDxnYWRpb0BuZXR2aXNpb24ubmV0LmlsPgotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotCiBJRExFLUk3MzAwCiBQOglBbmR5IEhlbnJvaWQKIE06CWFuZHJldy5kLmhlbnJvaWRAaW50ZWwuY29tCkBAIC0zMTE3LDcgKzMxMTAsNyBAQAogTDoJbmV0ZW1AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKIFM6CU1haW50YWluZWQKIAotTkVURVJJT04gKFMySU8pIFhmcmFtZSAxMEdiRSBEUklWRVIKK05FVEVSSU9OIChTMklPKSAxMEdiRSBEUklWRVIgKHhmcmFtZS92eGdlKQogUDoJUmFta3Jpc2huYSBWZXBhCiBNOglyYW0udmVwYUBuZXRlcmlvbi5jb20KIFA6CVJhc3RhcHVyIFNhbnRvc2gKQEAgLTMxMjYsOCArMzExOSwxMSBAQAogTToJc2l2YWt1bWFyLnN1YnJhbWFuaUBuZXRlcmlvbi5jb20KIFA6CVNyZWVuaXZhc2EgSG9ubnVyCiBNOglzcmVlbml2YXNhLmhvbm51ckBuZXRlcmlvbi5jb20KK1A6CUFuaWwgTXVydGh5CitNOglhbmlsLm11cnRoeUBuZXRlcmlvbi5jb20KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly90cmFjLm5ldGVyaW9uLmNvbS9jZ2ktYmluL3RyYWMuY2dpL3dpa2kvVGl0bGVJbmRleD9hbm9ueW1vdXMKK1c6CWh0dHA6Ly90cmFjLm5ldGVyaW9uLmNvbS9jZ2ktYmluL3RyYWMuY2dpL3dpa2kvTGludXg/QW5vbnltb3VzCitXOglodHRwOi8vdHJhYy5uZXRlcmlvbi5jb20vY2dpLWJpbi90cmFjLmNnaS93aWtpL1gzMTAwTGludXg/QW5vbnltb3VzCiBTOglTdXBwb3J0ZWQKIAogTkVURklMVEVSL0lQVEFCTEVTL0lQQ0hBSU5TCkBAIC00ODQ2LDcgKzQ4NDIsNiBAQAogUDoJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiCiBNOgltY2hlaGFiQGluZnJhZGVhZC5vcmcKIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotTDoJdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tCiBXOglodHRwOi8vbGludXh0di5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC00ODYzLDcgKzQ4NTgsNyBAQAogUDoJTWFyayBCcm93bgogTToJYnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20KIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS8xNQotVzoJaHR0cDovL3d3dy5zbGltbG9naWMuY28udWsvP3BhZ2VfaWQ9NQorVzoJaHR0cDovL3d3dy5zbGltbG9naWMuY28udWsvP3A9NDgKIFQ6CWdpdCBrZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9scmcvdm9sdGFnZS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIApAQCAtNDk4NSw3ICs0OTgwLDggQEAKIAogWEZTIEZJTEVTWVNURU0KIFA6CVNpbGljb24gR3JhcGhpY3MgSW5jCi1QOglCaWxsIE8nRG9ubmVsbAorUDoJRmVsaXggQmx5YWtoZXIKK006CWZlbGl4YkBzZ2kuY29tCiBNOgl4ZnMtbWFzdGVyc0Bvc3Muc2dpLmNvbQogTDoJeGZzQG9zcy5zZ2kuY29tCiBXOglodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMveGZzCmRpZmYgLS1naXQgYS9hcmNoL0tjb25maWcgYi9hcmNoL0tjb25maWcKaW5kZXggNTUwZGFiMi4uODMwYzE2YSAxMDA2NDQKLS0tIGEvYXJjaC9LY29uZmlnCisrKyBiL2FyY2gvS2NvbmZpZwpAQCAtMTA2LDMgKzEwNiw1IEBACiAJICBUaGUgPGxpbnV4L2Nsay5oPiBjYWxscyBzdXBwb3J0IHNvZnR3YXJlIGNsb2NrIGdhdGluZyBhbmQKIAkgIHRodXMgYXJlIGEga2V5IHBvd2VyIG1hbmFnZW1lbnQgdG9vbCBvbiBtYW55IHN5c3RlbXMuCiAKK2NvbmZpZyBIQVZFX0RNQV9BUElfREVCVUcKKwlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGZlYTRlYTcuLjEzY2Q0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC04MCw3ICs4MCw3IEBACiAJdm9pZCAoKnVwZGF0ZV9pcnFfaHcpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CiAJdm9pZCAoKmFja19pcnEpKHVuc2lnbmVkIGxvbmcpOwogCXZvaWQgKCpkZXZpY2VfaW50ZXJydXB0KSh1bnNpZ25lZCBsb25nIHZlY3Rvcik7Ci0Jdm9pZCAoKm1hY2hpbmVfY2hlY2spKHU2NCB2ZWN0b3IsIHU2NCBsYSk7CisJdm9pZCAoKm1hY2hpbmVfY2hlY2spKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhKTsKIAogCXZvaWQgKCpzbXBfY2FsbGluKSh2b2lkKTsKIAl2b2lkICgqaW5pdF9hcmNoKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDJhMTQzMDIuLmNiMDRlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMjczLDQgKzI3MywxOCBAQAogCiBleHRlcm4gc3RydWN0IHBjaV9kZXYgKmlzYV9icmlkZ2U7CiAKK2V4dGVybiBpbnQgcGNpX2xlZ2FjeV9yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIGxvZmZfdCBwb3J0LCB1MzIgKnZhbCwKKwkJCSAgIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IHBjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgbG9mZl90IHBvcnQsIHUzMiB2YWwsCisJCQkgICAgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpOworZXh0ZXJuIHZvaWQgcGNpX2FkanVzdF9sZWdhY3lfYXR0cihzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKTsKKyNkZWZpbmUgSEFWRV9QQ0lfTEVHQUNZCTEKKworZXh0ZXJuIGludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwogI2VuZGlmIC8qIF9fQUxQSEFfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBhZWViMTI1Li5lMzhmYjk1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xNjYsNiArMTY2LDkgQEAKIAlsb2NrLT5sb2NrID0gMDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBhZmUyMGZhLi41YWE0MGNjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTMwOSw1MTkgKzMwOSw3MiBAQAogI2RlZmluZSB0YmlhKCkJCV9fdGJpKC0yLCAvKiBubyBzZWNvbmQgYXJndW1lbnQgKi8pCiAKIC8qCi0gKiBBdG9taWMgZXhjaGFuZ2UuCi0gKiBTaW5jZSBpdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMKLSAqIGl0IG11c3QgY2xvYmJlciAibWVtb3J5IiAoYWxzbyBmb3IgaW50ZXJydXB0cyBpbiBVUCkuCisgKiBBdG9taWMgZXhjaGFuZ2Ugcm91dGluZXMuCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX3hjaGdfdTgodm9sYXRpbGUgY2hhciAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQsIHRtcCwgYWRkcjY0OworI2RlZmluZSBfX0FTTV9fTUIKKyNkZWZpbmUgX19fX3hjaGcodHlwZSwgYXJncy4uLikJCV9feGNoZyAjIyB0eXBlICMjIF9sb2NhbChhcmdzKQorI2RlZmluZSBfX19fY21weGNoZyh0eXBlLCBhcmdzLi4uKQlfX2NtcHhjaGcgIyMgdHlwZSAjIyBfbG9jYWwoYXJncykKKyNpbmNsdWRlIDxhc20veGNoZy5oPgogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTQsNywlM1xuIgotCSIJaW5zYmwJJTEsJTQsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglMylcbiIKLQkiCWV4dGJsCSUyLCU0LCUwXG4iCi0JIgltc2tibAklMiwlNCwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTMpXG4iCi0JIgliZXEJJTIsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UxNih2b2xhdGlsZSBzaG9ydCAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQsIHRtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTQsNywlM1xuIgotCSIJaW5zd2wJJTEsJTQsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglMylcbiIKLQkiCWV4dHdsCSUyLCU0LCUwXG4iCi0JIgltc2t3bAklMiwlNCwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTMpXG4iCi0JIgliZXEJJTIsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UzMih2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRsX2wgJTAsJTRcbiIKLQkiCWJpcyAkMzEsJTMsJTFcbiIKLQkiCXN0bF9jICUxLCUyXG4iCi0JIgliZXEgJTEsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQotCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBkdW1teTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZHFfbCAlMCwlNFxuIgotCSIJYmlzICQzMSwlMywlMVxuIgotCSIJc3RxX2MgJTEsJTJcbiIKLQkiCWJlcSAlMSwyZlxuIgotI2lmZGVmIENPTkZJR19TTVAKLQkiCW1iXG4iCi0jZW5kaWYKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOgliciAxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCi0JOiAickkiICh2YWwpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgotICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgeGNoZygpLiAgKi8KLWV4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQotI2RlZmluZSBfX3hjaGcocHRyLCB4LCBzaXplKSBcCi0oeyBcCi0JdW5zaWduZWQgbG9uZyBfX3hjaGdfX3JlczsgXAotCXZvbGF0aWxlIHZvaWQgKl9feGNoZ19fcHRyID0gKHB0cik7IFwKLQlzd2l0Y2ggKHNpemUpIHsgXAotCQljYXNlIDE6IF9feGNoZ19fcmVzID0gX194Y2hnX3U4KF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJY2FzZSAyOiBfX3hjaGdfX3JlcyA9IF9feGNoZ191MTYoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQljYXNlIDQ6IF9feGNoZ19fcmVzID0gX194Y2hnX3UzMihfX3hjaGdfX3B0ciwgeCk7IGJyZWFrOyBcCi0JCWNhc2UgODogX194Y2hnX19yZXMgPSBfX3hjaGdfdTY0KF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJZGVmYXVsdDogX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7IF9feGNoZ19fcmVzID0geDsgXAotCX0gXAotCV9feGNoZ19fcmVzOyBcCi19KQotCi0jZGVmaW5lIHhjaGcocHRyLHgpCQkJCQkJCSAgICAgXAotICAoewkJCQkJCQkJCSAgICAgXAotICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX3hfID0gKHgpOwkJCQkJICAgICBcCi0gICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX3hfLCBzaXplb2YoKihwdHIpKSk7IFwKKyNkZWZpbmUgeGNoZ19sb2NhbChwdHIseCkJCQkJCQlcCisgICh7CQkJCQkJCQkJXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX3hfID0gKHgpOwkJCQkJXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKV94XywJXAorCQkJCSAgICAgICBzaXplb2YoKihwdHIpKSk7CQkJXAogICB9KQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191OF9sb2NhbCh2b2xhdGlsZSBjaGFyICptLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldCwgdG1wLCBhZGRyNjQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiCWFuZG5vdAklNCw3LCUzXG4iCi0JIglpbnNibAklMSwlNCwlMVxuIgotCSIxOglsZHFfbAklMiwwKCUzKVxuIgotCSIJZXh0YmwJJTIsJTQsJTBcbiIKLQkiCW1za2JsCSUyLCU0LCUyXG4iCi0JIglvcgklMSwlMiwlMlxuIgotCSIJc3RxX2MJJTIsMCglMylcbiIKLQkiCWJlcQklMiwyZlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjI6CWJyCTFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191MTZfbG9jYWwodm9sYXRpbGUgc2hvcnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJYW5kbm90CSU0LDcsJTNcbiIKLQkiCWluc3dsCSUxLCU0LCUxXG4iCi0JIjE6CWxkcV9sCSUyLDAoJTMpXG4iCi0JIglleHR3bAklMiwlNCwlMFxuIgotCSIJbXNrd2wJJTIsJTQsJTJcbiIKLQkiCW9yCSUxLCUyLCUyXG4iCi0JIglzdHFfYwklMiwwKCUzKVxuIgotCSIJYmVxCSUyLDJmXG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UzMl9sb2NhbCh2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRsX2wgJTAsJTRcbiIKLQkiCWJpcyAkMzEsJTMsJTFcbiIKLQkiCXN0bF9jICUxLCUyXG4iCi0JIgliZXEgJTEsMmZcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOgliciAxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCi0JOiAickkiICh2YWwpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGR1bW15OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIjE6CWxkcV9sICUwLCU0XG4iCi0JIgliaXMgJDMxLCUzLCUxXG4iCi0JIglzdHFfYyAlMSwlMlxuIgotCSIJYmVxICUxLDJmXG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQotCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi0jZGVmaW5lIF9feGNoZ19sb2NhbChwdHIsIHgsIHNpemUpIFwKLSh7IFwKLQl1bnNpZ25lZCBsb25nIF9feGNoZ19fcmVzOyBcCi0Jdm9sYXRpbGUgdm9pZCAqX194Y2hnX19wdHIgPSAocHRyKTsgXAotCXN3aXRjaCAoc2l6ZSkgeyBcCi0JCWNhc2UgMTogX194Y2hnX19yZXMgPSBfX3hjaGdfdThfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQljYXNlIDI6IF9feGNoZ19fcmVzID0gX194Y2hnX3UxNl9sb2NhbChfX3hjaGdfX3B0ciwgeCk7IGJyZWFrOyBcCi0JCWNhc2UgNDogX194Y2hnX19yZXMgPSBfX3hjaGdfdTMyX2xvY2FsKF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJY2FzZSA4OiBfX3hjaGdfX3JlcyA9IF9feGNoZ191NjRfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQlkZWZhdWx0OiBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsgX194Y2hnX19yZXMgPSB4OyBcCi0JfSBcCi0JX194Y2hnX19yZXM7IFwKLX0pCi0KLSNkZWZpbmUgeGNoZ19sb2NhbChwdHIseCkJCQkJCQkgICAgIFwKLSAgKHsJCQkJCQkJCQkgICAgIFwKLSAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCSAgICAgXAotICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKV94XywJICAgICBcCi0gICAgIAkJc2l6ZW9mKCoocHRyKSkpOyBcCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCVwKKwkJCQkJICAodW5zaWduZWQgbG9uZylfbl8sCQlcCisJCQkJCSAgc2l6ZW9mKCoocHRyKSkpOwkJXAogICB9KQogCi0vKiAKLSAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCi0gKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKLSAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgotICoKLSAqIFRoZSBtZW1vcnkgYmFycmllciBzaG91bGQgYmUgcGxhY2VkIGluIFNNUCBvbmx5IHdoZW4gd2UgYWN0dWFsbHkKLSAqIG1ha2UgdGhlIGNoYW5nZS4gSWYgd2UgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIChzbyBpZiB0aGUgcmV0dXJuZWQKLSAqIHByZXYgaXMgZXF1YWwgdG8gb2xkKSB0aGVuIHdlIGFyZW4ndCBhY3F1aXJpbmcgYW55dGhpbmcgbmV3IGFuZAotICogd2UgZG9uJ3QgbmVlZCBhbnkgbWVtb3J5IGJhcnJpZXIgYXMgZmFyIEkgY2FuIHRlbGwuCi0gKi8KKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKKyAgKHsJCQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCisJY21weGNoZ19sb2NhbCgocHRyKSwgKG8pLCAobikpOwkJCQkJXAorICB9KQorCisjaWZkZWYgQ09ORklHX1NNUAorI3VuZGVmIF9fQVNNX19NQgorI2RlZmluZSBfX0FTTV9fTUIJIlx0bWJcbiIKKyNlbmRpZgorI3VuZGVmIF9fX194Y2hnCisjdW5kZWYgX19fX2NtcHhjaGcKKyNkZWZpbmUgX19fX3hjaGcodHlwZSwgYXJncy4uLikJCV9feGNoZyAjI3R5cGUoYXJncykKKyNkZWZpbmUgX19fX2NtcHhjaGcodHlwZSwgYXJncy4uLikJX19jbXB4Y2hnICMjdHlwZShhcmdzKQorI2luY2x1ZGUgPGFzbS94Y2hnLmg+CisKKyNkZWZpbmUgeGNoZyhwdHIseCkJCQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX194Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfeF8sCQlcCisJCQkJIHNpemVvZigqKHB0cikpKTsJCQlcCisgIH0pCisKKyNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCQlcCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywJc2l6ZW9mKCoocHRyKSkpO1wKKyAgfSkKKworI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKKyAgKHsJCQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCisJY21weGNoZygocHRyKSwgKG8pLCAobikpOwkJCQkJXAorICB9KQorCisjdW5kZWYgX19BU01fX01CCisjdW5kZWYgX19fX2NtcHhjaGcKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTgodm9sYXRpbGUgY2hhciAqbSwgbG9uZyBvbGQsIGxvbmcgbmV3KQotewotCXVuc2lnbmVkIGxvbmcgcHJldiwgdG1wLCBjbXAsIGFkZHI2NDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJYW5kbm90CSU1LDcsJTRcbiIKLQkiCWluc2JsCSUxLCU1LCUxXG4iCi0JIjE6CWxkcV9sCSUyLDAoJTQpXG4iCi0JIglleHRibAklMiwlNSwlMFxuIgotCSIJY21wZXEJJTAsJTYsJTNcbiIKLQkiCWJlcQklMywyZlxuIgotCSIJbXNrYmwJJTIsJTUsJTJcbiIKLQkiCW9yCSUxLCUyLCUyXG4iCi0JIglzdHFfYwklMiwwKCU0KVxuIgotCSIJYmVxCSUyLDNmXG4iCi0jaWZkZWYgQ09ORklHX1NNUAotCSIJbWJcbiIKLSNlbmRpZgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyCTFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191MTYodm9sYXRpbGUgc2hvcnQgKm0sIGxvbmcgb2xkLCBsb25nIG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiCWFuZG5vdAklNSw3LCU0XG4iCi0JIglpbnN3bAklMSwlNSwlMVxuIgotCSIxOglsZHFfbAklMiwwKCU0KVxuIgotCSIJZXh0d2wJJTIsJTUsJTBcbiIKLQkiCWNtcGVxCSUwLCU2LCUzXG4iCi0JIgliZXEJJTMsMmZcbiIKLQkiCW1za3dsCSUyLCU1LCUyXG4iCi0JIglvcgklMSwlMiwlMlxuIgotCSIJc3RxX2MJJTIsMCglNClcbiIKLQkiCWJlcQklMiwzZlxuIgotI2lmZGVmIENPTkZJR19TTVAKLQkiCW1iXG4iCi0jZW5kaWYKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTMyKHZvbGF0aWxlIGludCAqbSwgaW50IG9sZCwgaW50IG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZGxfbCAlMCwlNVxuIgotCSIJY21wZXEgJTAsJTMsJTFcbiIKLQkiCWJlcSAlMSwyZlxuIgotCSIJbW92ICU0LCUxXG4iCi0JIglzdGxfYyAlMSwlMlxuIgotCSIJYmVxICUxLDNmXG4iCi0jaWZkZWYgQ09ORklHX1NNUAotCSIJbWJcbiIKLSNlbmRpZgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyIDFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiKHByZXYpLCAiPSZyIihjbXApLCAiPW0iKCptKQotCTogInIiKChsb25nKSBvbGQpLCAiciIobmV3KSwgIm0iKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KQotewotCXVuc2lnbmVkIGxvbmcgcHJldiwgY21wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIjE6CWxkcV9sICUwLCU1XG4iCi0JIgljbXBlcSAlMCwlMywlMVxuIgotCSIJYmVxICUxLDJmXG4iCi0JIgltb3YgJTQsJTFcbiIKLQkiCXN0cV9jICUxLCUyXG4iCi0JIgliZXEgJTEsM2ZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIjI6XG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMzoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIocHJldiksICI9JnIiKGNtcCksICI9bSIoKm0pCi0JOiAiciIoKGxvbmcpIG9sZCksICJyIihuZXcpLCAibSIoKm0pIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHByZXY7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgotICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgY21weGNoZygpLiAgKi8KLWV4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3U4KHB0ciwgb2xkLCBuZXcpOwotCQljYXNlIDI6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3UxNihwdHIsIG9sZCwgbmV3KTsKLQkJY2FzZSA0OgotCQkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7Ci0JCWNhc2UgODoKLQkJCXJldHVybiBfX2NtcHhjaGdfdTY0KHB0ciwgb2xkLCBuZXcpOwotCX0KLQlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvLCBuKQkJCQkJCSBcCi0gICh7CQkJCQkJCQkJIFwKLSAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCSBcCi0gICAgIF9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQkgXAotICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV9vXywJCSBcCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCi0gIH0pCi0jZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJIFwKLSAgKHsJCQkJCQkJCQkgXAotCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJIFwKLQljbXB4Y2hnKChwdHIpLCAobyksIChuKSk7CQkJCQkgXAotICB9KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191OF9sb2NhbCh2b2xhdGlsZSBjaGFyICptLCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCB0bXAsIGNtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTUsNywlNFxuIgotCSIJaW5zYmwJJTEsJTUsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglNClcbiIKLQkiCWV4dGJsCSUyLCU1LCUwXG4iCi0JIgljbXBlcQklMCwlNiwlM1xuIgotCSIJYmVxCSUzLDJmXG4iCi0JIgltc2tibAklMiwlNSwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTQpXG4iCi0JIgliZXEJJTIsM2ZcbiIKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTE2X2xvY2FsKHZvbGF0aWxlIHNob3J0ICptLCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCB0bXAsIGNtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTUsNywlNFxuIgotCSIJaW5zd2wJJTEsJTUsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglNClcbiIKLQkiCWV4dHdsCSUyLCU1LCUwXG4iCi0JIgljbXBlcQklMCwlNiwlM1xuIgotCSIJYmVxCSUzLDJmXG4iCi0JIgltc2t3bAklMiwlNSwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTQpXG4iCi0JIgliZXEJJTIsM2ZcbiIKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTMyX2xvY2FsKHZvbGF0aWxlIGludCAqbSwgaW50IG9sZCwgaW50IG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZGxfbCAlMCwlNVxuIgotCSIJY21wZXEgJTAsJTMsJTFcbiIKLQkiCWJlcSAlMSwyZlxuIgotCSIJbW92ICU0LCUxXG4iCi0JIglzdGxfYyAlMSwlMlxuIgotCSIJYmVxICUxLDNmXG4iCi0JIjI6XG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMzoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIocHJldiksICI9JnIiKGNtcCksICI9bSIoKm0pCi0JOiAiciIoKGxvbmcpIG9sZCksICJyIihuZXcpLCAibSIoKm0pIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHByZXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19jbXB4Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRxX2wgJTAsJTVcbiIKLQkiCWNtcGVxICUwLCUzLCUxXG4iCi0JIgliZXEgJTEsMmZcbiIKLQkiCW1vdiAlNCwlMVxuIgotCSIJc3RxX2MgJTEsJTJcbiIKLQkiCWJlcSAlMSwzZlxuIgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyIDFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiKHByZXYpLCAiPSZyIihjbXApLCAiPW0iKCptKQotCTogInIiKChsb25nKSBvbGQpLCAiciIobmV3KSwgIm0iKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywKLQkJaW50IHNpemUpCi17Ci0Jc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgMToKLQkJCXJldHVybiBfX2NtcHhjaGdfdThfbG9jYWwocHRyLCBvbGQsIG5ldyk7Ci0JCWNhc2UgMjoKLQkJCXJldHVybiBfX2NtcHhjaGdfdTE2X2xvY2FsKHB0ciwgb2xkLCBuZXcpOwotCQljYXNlIDQ6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3UzMl9sb2NhbChwdHIsIG9sZCwgbmV3KTsKLQkJY2FzZSA4OgotCQkJcmV0dXJuIF9fY21weGNoZ191NjRfbG9jYWwocHRyLCBvbGQsIG5ldyk7Ci0JfQotCV9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwotCXJldHVybiBvbGQ7Ci19Ci0KLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQkgXAotICAoewkJCQkJCQkJCSBcCi0gICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAotICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKLSAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCSBcCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCi0gIH0pCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQkgXAotICAoewkJCQkJCQkJCSBcCi0JQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQkgXAotCWNtcHhjaGdfbG9jYWwoKHB0ciksIChvKSwgKG4pKTsJCQkJCSBcCi0gIH0pCi0KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYzE1NDEzNS4uZjA3MmYzNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtOCw3ICs4LDEyIEBACiAgKiBub3QgYSBtYWpvciBpc3N1ZS4gIEhvd2V2ZXIsIGZvciBpbnRlcm9wZXJhYmlsaXR5LCBsaWJyYXJpZXMgc3RpbGwKICAqIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBhIG5hbWUgY2xhc2hlcy4KICAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisjZWxzZQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sNjQuaD4KKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDIyZGUzYjQuLjE2M2YzMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC00OTgsMTMgKzQ5OCwxMyBAQAogfTsKIAogLyogUmV0dXJucyB0aGUgbmV3IHBjICovCi0jZGVmaW5lIGZpeHVwX2V4Y2VwdGlvbihtYXBfcmVnLCBmaXh1cCwgcGMpCQkJXAorI2RlZmluZSBmaXh1cF9leGNlcHRpb24obWFwX3JlZywgX2ZpeHVwLCBwYykJCQlcCiAoewkJCQkJCQkJXAotCWlmICgoZml4dXApLT5maXh1cC5iaXRzLnZhbHJlZyAhPSAzMSkJCQlcCi0JCW1hcF9yZWcoKGZpeHVwKS0+Zml4dXAuYml0cy52YWxyZWcpID0gMDsJXAotCWlmICgoZml4dXApLT5maXh1cC5iaXRzLmVycnJlZyAhPSAzMSkJCQlcCi0JCW1hcF9yZWcoKGZpeHVwKS0+Zml4dXAuYml0cy5lcnJyZWcpID0gLUVGQVVMVDsJXAotCShwYykgKyAoZml4dXApLT5maXh1cC5iaXRzLm5leHRpbnNuOwkJCVwKKwlpZiAoKF9maXh1cCktPmZpeHVwLmJpdHMudmFscmVnICE9IDMxKQkJCVwKKwkJbWFwX3JlZygoX2ZpeHVwKS0+Zml4dXAuYml0cy52YWxyZWcpID0gMDsJXAorCWlmICgoX2ZpeHVwKS0+Zml4dXAuYml0cy5lcnJyZWcgIT0gMzEpCQkJXAorCQltYXBfcmVnKChfZml4dXApLT5maXh1cC5iaXRzLmVycnJlZykgPSAtRUZBVUxUOwlcCisJKHBjKSArIChfZml4dXApLT5maXh1cC5iaXRzLm5leHRpbnNuOwkJCVwKIH0pCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS94Y2hnLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3hjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWJhMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS94Y2hnLmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX19BTFBIQV9TWVNURU1fSAorI2Vycm9yIERvIG5vdCBpbmNsdWRlIHhjaGcuaCBkaXJlY3RseSEKKyNlbHNlCisvKgorICogeGNoZy94Y2hnX2xvY2FsIGFuZCBjbXB4Y2hnL2NtcHhjaGdfbG9jYWwgc2hhcmUgdGhlIHNhbWUgY29kZQorICogZXhjZXB0IHRoYXQgbG9jYWwgdmVyc2lvbiBkbyBub3QgaGF2ZSB0aGUgZXhwZW5zaXZlIG1lbW9yeSBiYXJyaWVyLgorICogU28gdGhpcyBmaWxlIGlzIGluY2x1ZGVkIHR3aWNlIGZyb20gYXNtL3N5c3RlbS5oLgorICovCisKKy8qCisgKiBBdG9taWMgZXhjaGFuZ2UuCisgKiBTaW5jZSBpdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMKKyAqIGl0IG11c3QgY2xvYmJlciAibWVtb3J5IiAoYWxzbyBmb3IgaW50ZXJydXB0cyBpbiBVUCkuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19feGNoZyhfdTgsIHZvbGF0aWxlIGNoYXIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU0LDcsJTNcbiIKKwkiCWluc2JsCSUxLCU0LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTMpXG4iCisJIglleHRibAklMiwlNCwlMFxuIgorCSIJbXNrYmwJJTIsJTQsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCUzKVxuIgorCSIJYmVxCSUyLDJmXG4iCisJCV9fQVNNX19NQgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX194Y2hnKF91MTYsIHZvbGF0aWxlIHNob3J0ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCwgdG1wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNCw3LCUzXG4iCisJIglpbnN3bAklMSwlNCwlMVxuIgorCSIxOglsZHFfbAklMiwwKCUzKVxuIgorCSIJZXh0d2wJJTIsJTQsJTBcbiIKKwkiCW1za3dsCSUyLCU0LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglMylcbiIKKwkiCWJlcQklMiwyZlxuIgorCQlfX0FTTV9fTUIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAocmV0KSwgIj0mciIgKHZhbCksICI9JnIiICh0bXApLCAiPSZyIiAoYWRkcjY0KQorCTogInIiICgobG9uZyltKSwgIjEiICh2YWwpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19feGNoZyhfdTMyLCB2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0bF9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKwkJX19BU01fX01CCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX194Y2hnKF91NjQsIHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0cV9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKwkJX19BU01fX01CCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZworX19fX3hjaGcoLCB2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgeCwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBfX19feGNoZyhfdTgsIHB0ciwgeCk7CisJCWNhc2UgMjoKKwkJCXJldHVybiBfX19feGNoZyhfdTE2LCBwdHIsIHgpOworCQljYXNlIDQ6CisJCQlyZXR1cm4gX19fX3hjaGcoX3UzMiwgcHRyLCB4KTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIF9fX194Y2hnKF91NjQsIHB0ciwgeCk7CisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisvKgorICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKKyAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcworICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCisgKgorICogVGhlIG1lbW9yeSBiYXJyaWVyIHNob3VsZCBiZSBwbGFjZWQgaW4gU01QIG9ubHkgd2hlbiB3ZSBhY3R1YWxseQorICogbWFrZSB0aGUgY2hhbmdlLiBJZiB3ZSBkb24ndCBjaGFuZ2UgYW55dGhpbmcgKHNvIGlmIHRoZSByZXR1cm5lZAorICogcHJldiBpcyBlcXVhbCB0byBvbGQpIHRoZW4gd2UgYXJlbid0IGFjcXVpcmluZyBhbnl0aGluZyBuZXcgYW5kCisgKiB3ZSBkb24ndCBuZWVkIGFueSBtZW1vcnkgYmFycmllciBhcyBmYXIgSSBjYW4gdGVsbC4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKF91OCwgdm9sYXRpbGUgY2hhciAqbSwgdW5zaWduZWQgY2hhciBvbGQsIHVuc2lnbmVkIGNoYXIgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgcHJldiwgdG1wLCBjbXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU1LDcsJTRcbiIKKwkiCWluc2JsCSUxLCU1LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTQpXG4iCisJIglleHRibAklMiwlNSwlMFxuIgorCSIJY21wZXEJJTAsJTYsJTNcbiIKKwkiCWJlcQklMywyZlxuIgorCSIJbXNrYmwJJTIsJTUsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCU0KVxuIgorCSIJYmVxCSUyLDNmXG4iCisJCV9fQVNNX19NQgorCSIyOlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKKwk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKF91MTYsIHZvbGF0aWxlIHNob3J0ICptLCB1bnNpZ25lZCBzaG9ydCBvbGQsIHVuc2lnbmVkIHNob3J0IG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNSw3LCU0XG4iCisJIglpbnN3bAklMSwlNSwlMVxuIgorCSIxOglsZHFfbAklMiwwKCU0KVxuIgorCSIJZXh0d2wJJTIsJTUsJTBcbiIKKwkiCWNtcGVxCSUwLCU2LCUzXG4iCisJIgliZXEJJTMsMmZcbiIKKwkiCW1za3dsCSUyLCU1LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglNClcbiIKKwkiCWJlcQklMiwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19fY21weGNoZyhfdTMyLCB2b2xhdGlsZSBpbnQgKm0sIGludCBvbGQsIGludCBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTVcbiIKKwkiCWNtcGVxICUwLCUzLCUxXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiCW1vdiAlNCwlMVxuIgorCSIJc3RsX2MgJTEsJTJcbiIKKwkiCWJlcSAlMSwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19fY21weGNoZyhfdTY0LCB2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTVcbiIKKwkiCWNtcGVxICUwLCUzLCUxXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiCW1vdiAlNCwlMVxuIgorCSIJc3RxX2MgJTEsJTJcbiIKKwkiCWJlcSAlMSwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCisgICBpZiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCBjbXB4Y2hnKCkuICAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKCwgdm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsCisJICAgICAgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBfX19fY21weGNoZyhfdTgsIHB0ciwgb2xkLCBuZXcpOworCQljYXNlIDI6CisJCQlyZXR1cm4gX19fX2NtcHhjaGcoX3UxNiwgcHRyLCBvbGQsIG5ldyk7CisJCWNhc2UgNDoKKwkJCXJldHVybiBfX19fY21weGNoZyhfdTMyLCBwdHIsIG9sZCwgbmV3KTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIF9fX19jbXB4Y2hnKF91NjQsIHB0ciwgb2xkLCBuZXcpOworCX0KKwlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4gb2xkOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYjQ2OTc3NS4uYTQyNzUzOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIAogb2JqLSQoQ09ORklHX1ZHQV9IT1NFKQkrPSBjb25zb2xlLm8KIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCi1vYmotJChDT05GSUdfUENJKQkrPSBwY2kubyBwY2lfaW9tbXUubworb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8gcGNpX2lvbW11Lm8gcGNpLXN5c2ZzLm8KIG9iai0kKENPTkZJR19TUk1fRU5WKQkrPSBzcm1fZW52Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkrPSBtb2R1bGUubwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY2LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY2LmMKaW5kZXggMTFhZWUwMS4uOTg1ZTVjMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ni5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjYuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCQkgICAgICAgc3RyZWFtbmFtZVtzdHJlYW1dLCBiaXRzbmFtZVtiaXRzXSwgc291cmNlbmFtZVtzb3VyY2VdKTsKIAotCXByaW50aygiJXMgICAgQWRkcmVzczogMHglMDE2bHhcbiIKLQkgICAgICAgICAiICAgIFN5bmRyb21lW3VwcGVyLmxvd2VyXTogJTAybHguJTAybHhcbiIsIAorCXByaW50aygiJXMgICAgQWRkcmVzczogMHglMDE2bGx4XG4iCisJICAgICAgICAgIiAgICBTeW5kcm9tZVt1cHBlci5sb3dlcl06ICUwMmxseC4lMDJsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIGNfYWRkciwKIAkgICAgICAgYzJfc3luLCBjMV9zeW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ny5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ny5jCmluZGV4IDY4Y2Q0OTMuLjczNzcwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjcuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY3LmMKQEAgLTI0NiwxMyArMjQ2LDEzIEBACiAKIAlzd2l0Y2goaGVhZGVyLT50eXBlKSB7CiAJY2FzZSBFTF9UWVBFX19QQUxfX0xPR09VVF9GUkFNRToKLQkJcHJpbnRrKCIlcyoqKiBNQ0hLIG9jY3VycmVkIG9uIExQSUQgJWxkIChSQk9YICVseClcbiIsCisJCXByaW50aygiJXMqKiogTUNISyBvY2N1cnJlZCBvbiBMUElEICVsZCAoUkJPWCAlbGx4KVxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBwYWNrZXQtPmJ5X3R5cGUubG9nb3V0LndoYW1pLCAKIAkJICAgICAgIHBhY2tldC0+YnlfdHlwZS5sb2dvdXQucmJveF93aGFtaSk7CiAJCWVsX3ByaW50X3RpbWVzdGFtcCgmcGFja2V0LT5ieV90eXBlLmxvZ291dC50aW1lc3RhbXApOwotCQlwcmludGsoIiVzICBFWENfQUREUjogJTAxNmx4XG4iCi0JCSAgICAgICAgICIgIEhBTFRfQ09ERTogJWx4XG4iLCAKKwkJcHJpbnRrKCIlcyAgRVhDX0FERFI6ICUwMTZsbHhcbiIKKwkJICAgICAgICAgIiAgSEFMVF9DT0RFOiAlbGx4XG4iLAogCQkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkJICAgICAgIHBhY2tldC0+YnlfdHlwZS5sb2dvdXQuZXhjX2FkZHIsCiAJCSAgICAgICBwYWNrZXQtPmJ5X3R5cGUubG9nb3V0LmhhbHRfY29kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMKaW5kZXggNDEzYmYzNy4uNmJmZDI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIAogCXByaW50aygiJXMgICAgICBDb3JyZWN0YWJsZSBFcnJvciBTeW1wdG9tczpcbiIKLQkgICAgICAgIiVzICAgICAgICBTeW5kcm9tZTogMHglbHhcbiIsCisJICAgICAgICIlcyAgICAgICAgU3luZHJvbWU6IDB4JWxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgRVhUUkFDVChjcnJjdF9zeW0sIElPN19fUE83X0NSUkNUX1NZTV9fU1lOKSk7CiAJbWFydmVsX3ByaW50X2Vycl9jeWMoRVhUUkFDVChjcnJjdF9zeW0sIElPN19fUE83X0NSUkNUX1NZTV9fRVJSX0NZQykpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJdW5jcnJfc3ltICY9IHZhbGlkX21hc2s7CiAKIAlpZiAoRVhUUkFDVCh2YWxpZF9tYXNrLCBJTzdfX1BPN19VTkNSUl9TWU1fX1NZTikpCi0JCXByaW50aygiJXMgICAgICAgIFN5bmRyb21lOiAweCVseFxuIiwKKwkJcHJpbnRrKCIlcyAgICAgICAgU3luZHJvbWU6IDB4JWxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsIAogCQkgICAgICAgRVhUUkFDVCh1bmNycl9zeW0sIElPN19fUE83X1VOQ1JSX1NZTV9fU1lOKSk7CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlzcHJpbnRmKG9wY29kZV9zdHIsICJCbGtJTyIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzcHJpbnRmKG9wY29kZV9zdHIsICIweCVseFxuIiwgCisJCXNwcmludGYob3Bjb2RlX3N0ciwgIjB4JWxseFxuIiwKIAkJCUVYVFJBQ1QodWdiZ2Vfc3ltLCBJTzdfX1BPN19VR0JHRV9TWU1fX1VQSF9PUENPREUpKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzIxLDcgKzMyMSw3IEBACiAJICAgICAgIG9wY29kZV9zdHIpOwogCiAJaWYgKDB4QzUgIT0gRVhUUkFDVCh1Z2JnZV9zeW0sIElPN19fUE83X1VHQkdFX1NZTV9fVVBIX09QQ09ERSkpCi0JCXByaW50aygiJXMgICAgICAgIFBhY2tldCBPZmZzZXQgMHglMDhseFxuIiwKKwkJcHJpbnRrKCIlcyAgICAgICAgUGFja2V0IE9mZnNldCAweCUwOGxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBFWFRSQUNUKHVnYmdlX3N5bSwgSU83X19QTzdfVUdCR0VfU1lNX19VUEhfUEtUX09GRikpOwogfQpAQCAtNDgwLDggKzQ4MCw4IEBACiAJCXByaW50aygiJXMgICAgTG9zdCBFcnJvclxuIiwgZXJyX3ByaW50X3ByZWZpeCk7CiAKIAlwcmludGsoIiVzICAgIEZhaWxpbmcgUGFja2V0OlxuIgotCSAgICAgICAiJXMgICAgICBDeWNsZSAxOiAlMDE2bHhcbiIKLQkgICAgICAgIiVzICAgICAgQ3ljbGUgMjogJTAxNmx4XG4iLAorCSAgICAgICAiJXMgICAgICBDeWNsZSAxOiAlMDE2bGx4XG4iCisJICAgICAgICIlcyAgICAgIEN5Y2xlIDI6ICUwMTZsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfZXJyX3BrdDAsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfZXJyX3BrdDEpOwpAQCAtNTE1LDkgKzUxNSw5IEBACiAJaWYgKCEodGxiX2VyciAmIElPN19fUE9YX1RMQkVSUl9fRVJSX1ZBTElEKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKCIlcyAgICAgIFRMQiBFcnJvciBvbiBpbmRleCAweCVseDpcbiIKKwlwcmludGsoIiVzICAgICAgVExCIEVycm9yIG9uIGluZGV4IDB4JWxseDpcbiIKIAkgICAgICAgIiVzICAgICAgICAtICVzXG4iCi0JICAgICAgICIlcyAgICAgICAgLSBBZGRyOiAweCUwMTZseFxuIiwKKwkgICAgICAgIiVzICAgICAgICAtIEFkZHI6IDB4JTAxNmxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkgICAgICAgRVhUUkFDVCh0bGJfZXJyLCBJTzdfX1BPWF9UTEJFUlJfX0VSUl9UTEJfUFRSKSwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKQEAgLTU3OSw3ICs1NzksNyBAQAogCQlzcHJpbnRmKG1lc3NhZ2UsICJVbmNvcnJlY3RhYmxlIFNwbGl0IFdyaXRlIERhdGEgRXJyb3IiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc3ByaW50ZihtZXNzYWdlLCAiJTA4bHhcbiIsIAorCQlzcHJpbnRmKG1lc3NhZ2UsICIlMDhsbHhcbiIsCiAJCQlFWFRSQUNUKHNwbF9jbXBsdCwgSU83X19QT1hfU1BMQ01QTFRfX01FU1NBR0UpKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjIwLDkgKzYyMCw5IEBACiAJCXJldHVybjsKIAogCXByaW50aygiJXMgICAgICBUcmFuc2FjdGlvbiBTdW1tYXJ5OlxuIgotCSAgICAgICAiJXMgICAgICAgIENvbW1hbmQ6IDB4JWx4IC0gJXNcbiIKLQkgICAgICAgIiVzICAgICAgICBBZGRyZXNzOiAweCUwMTZseCVzXG4iCi0JICAgICAgICIlcyAgICAgICAgUENJLVggTWFzdGVyIFNsb3Q6IDB4JWx4XG4iLAorCSAgICAgICAiJXMgICAgICAgIENvbW1hbmQ6IDB4JWxseCAtICVzXG4iCisJICAgICAgICIlcyAgICAgICAgQWRkcmVzczogMHglMDE2bGx4JXNcbiIKKwkgICAgICAgIiVzICAgICAgICBQQ0ktWCBNYXN0ZXIgU2xvdDogMHglbGx4XG4iLAogCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCAKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgCiAJICAgICAgIEVYVFJBQ1QodHJhbnNfc3VtLCBJTzdfX1BPWF9UUkFOU1VNX19QQ0lYX0NNRCksCkBAIC05NjQsMTIgKzk2NCwxMiBAQAogCiAjaWYgMAogCQlwcmludGsoIiVzICBQT1JUIDcgRVJST1I6XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUk9SX1NVTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X1VOQ1JSX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0NSUkNUX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X1VHQkdFX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QwOiAgJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QxOiAgJTAxNmx4XG4iLAorCQkgICAgICAgIiVzICAgIFBPN19FUlJPUl9TVU06ICUwMTZsbHhcbiIKKwkJICAgICAgICIlcyAgICBQTzdfVU5DUlJfU1lNOiAlMDE2bGx4XG4iCisJCSAgICAgICAiJXMgICAgUE83X0NSUkNUX1NZTTogJTAxNmxseFxuIgorCQkgICAgICAgIiVzICAgIFBPN19VR0JHRV9TWU06ICUwMTZsbHhcbiIKKwkJICAgICAgICIlcyAgICBQTzdfRVJSX1BLVDA6ICAlMDE2bGx4XG4iCisJCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QxOiAgJTAxNmxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCBpby0+cG83X2Vycm9yX3N1bSwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfdW5jcnJfc3ltLApAQCAtOTg3LDEyICs5ODcsMTIgQEAKIAkJaWYgKCFNQVJWRUxfSU9fRVJSX1ZBTElEKGlvLT5wb3J0c1tpXS5wb3hfZXJyX3N1bSkpCiAJCQljb250aW51ZTsKIAotCQlwcmludGsoIiVzICBQSUQgJXUgUE9SVCAlZCBQT3hfRVJSX1NVTTogJTAxNmx4XG4iLCAKKwkJcHJpbnRrKCIlcyAgUElEICV1IFBPUlQgJWQgUE94X0VSUl9TVU06ICUwMTZsbHhcbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCAKIAkJICAgICAgIGxmX3N1YnBhY2tldHMtPmlvX3BpZCwgaSwgaW8tPnBvcnRzW2ldLnBveF9lcnJfc3VtKTsKIAkJbWFydmVsX3ByaW50X3BveF9lcnIoaW8tPnBvcnRzW2ldLnBveF9lcnJfc3VtLCAmaW8tPnBvcnRzW2ldKTsKIAotCQlwcmludGsoIiVzICBbIFBPeF9GSVJTVF9FUlI6ICUwMTZseCBdXG4iLCAKKwkJcHJpbnRrKCIlcyAgWyBQT3hfRklSU1RfRVJSOiAlMDE2bGx4IF1cbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCBpby0+cG9ydHNbaV0ucG94X2ZpcnN0X2Vycik7CiAJCW1hcnZlbF9wcmludF9wb3hfZXJyKGlvLT5wb3J0c1tpXS5wb3hfZmlyc3RfZXJyLCAKIAkJCQkgICAgICZpby0+cG9ydHNbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwppbmRleCAyNTc0NDllLi5jN2UyOGE4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIAlpZiAoIXByaW50KQogCQlyZXR1cm4gc3RhdHVzOwogCi0JcHJpbnRrKCIlcyAgUENoaXAgJWQgU0VSUk9SOiAlMDE2bHhcbiIsIAorCXByaW50aygiJXMgIFBDaGlwICVkIFNFUlJPUjogJTAxNmxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgd2hpY2gsIHNlcnJvcik7CiAJaWYgKHNlcnJvciAmIFRJVEFOX19QQ0hJUF9TRVJST1JfX0VDQ01BU0spIHsKIAkJcHJpbnRrKCIlcyAgICAlc29ycmVjdGFibGUgRUNDIEVycm9yOlxuIgogCQkgICAgICAgIiAgICAgIFNvdXJjZTogJS02cyAgQ29tbWFuZDogJS04cyAgU3luZHJvbWU6IDB4JTA4eFxuIgotCQkgICAgICAgIiAgICAgIEFkZHJlc3M6IDB4JWx4XG4iLCAKKwkJICAgICAgICIgICAgICBBZGRyZXNzOiAweCVsbHhcbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCQkgICAgICAgKHNlcnJvciAmIFRJVEFOX19QQ0hJUF9TRVJST1JfX1VFQ0MpID8gIlVuYyIgOiAiQyIsCiAJCSAgICAgICBzZXJyb3Jfc3JjW0VYVFJBQ1Qoc2Vycm9yLCBUSVRBTl9fUENISVBfU0VSUk9SX19TUkMpXSwKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWlmICghcHJpbnQpIAogCQlyZXR1cm4gc3RhdHVzOwogCi0JcHJpbnRrKCIlcyAgUENoaXAgJWQgJWNQRVJST1I6ICUwMTZseFxuIiwgCisJcHJpbnRrKCIlcyAgUENoaXAgJWQgJWNQRVJST1I6ICUwMTZsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIHdoaWNoLCAKIAkgICAgICAgcG9ydCA/ICdBJyA6ICdHJywgcGVycm9yKTsKIAlpZiAocGVycm9yICYgVElUQU5fX1BDSElQX1BFUlJPUl9fSVBUUFcpCkBAIC0zMTYsNyArMzE2LDcgQEAKIAlhZGRyID0gRVhUUkFDVChhZ3BlcnJvciwgVElUQU5fX1BDSElQX0FHUEVSUk9SX19BRERSKSA8PCAzOwogCWxlbiA9IEVYVFJBQ1QoYWdwZXJyb3IsIFRJVEFOX19QQ0hJUF9BR1BFUlJPUl9fTEVOKTsKIAotCXByaW50aygiJXMgIFBDaGlwICVkIEFHUEVSUk9SOiAlMDE2bHhcbiIsIGVycl9wcmludF9wcmVmaXgsCisJcHJpbnRrKCIlcyAgUENoaXAgJWQgQUdQRVJST1I6ICUwMTZsbHhcbiIsIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIHdoaWNoLCBhZ3BlcnJvcik7CiAJaWYgKGFncGVycm9yICYgVElUQU5fX1BDSElQX0FHUEVSUk9SX19OT1dJTkRPVykKIAkJcHJpbnRrKCIlcyAgICBObyBXaW5kb3dcbiIsIGVycl9wcmludF9wcmVmaXgpOwpAQCAtNTk3LDE2ICs1OTcsMTYgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCS8qIFRPRE8gLSBkZWNvZGUgaW5zdGVhZCBvZiBqdXN0IGR1bXBpbmcuLi4gKi8KLQlwcmludGsoIiVzICBTdW1tYXJ5IEZsYWdzOiAgICAgICAgICUwMTZseFxuIgotIAkgICAgICAgICAiICBDQ2hpcCBESVJ4OiAgICAgICAgICAgICUwMTZseFxuIgotCQkgIiAgU3lzdGVtIE1hbmFnZW1lbnQgSVI6ICAlMDE2bHhcbiIKLQkJICIgIENQVSBJUjogICAgICAgICAgICAgICAgJTAxNmx4XG4iCi0JCSAiICBQb3dlciBTdXBwbHkgSVI6ICAgICAgICUwMTZseFxuIgotCQkgIiAgTE03OCBGYXVsdCBTdGF0dXM6ICAgICAlMDE2bHhcbiIKLQkJICIgIFN5c3RlbSBEb29yczogICAgICAgICAgJTAxNmx4XG4iCi0JCSAiICBUZW1wZXJhdHVyZSBXYXJuaW5nOiAgICUwMTZseFxuIgotCQkgIiAgRmFuIENvbnRyb2w6ICAgICAgICAgICAlMDE2bHhcbiIKLQkJICIgIEZhdGFsIFBvd2VyIERvd24gQ29kZTogJTAxNmx4XG4iLAorCXByaW50aygiJXMgIFN1bW1hcnkgRmxhZ3M6ICAgICAgICAgJTAxNmxseFxuIgorIAkgICAgICAgICAiICBDQ2hpcCBESVJ4OiAgICAgICAgICAgICUwMTZsbHhcbiIKKwkJICIgIFN5c3RlbSBNYW5hZ2VtZW50IElSOiAgJTAxNmxseFxuIgorCQkgIiAgQ1BVIElSOiAgICAgICAgICAgICAgICAlMDE2bGx4XG4iCisJCSAiICBQb3dlciBTdXBwbHkgSVI6ICAgICAgICUwMTZsbHhcbiIKKwkJICIgIExNNzggRmF1bHQgU3RhdHVzOiAgICAgJTAxNmxseFxuIgorCQkgIiAgU3lzdGVtIERvb3JzOiAgICAgICAgICAlMDE2bGx4XG4iCisJCSAiICBUZW1wZXJhdHVyZSBXYXJuaW5nOiAgICUwMTZsbHhcbiIKKwkJICIgIEZhbiBDb250cm9sOiAgICAgICAgICAgJTAxNmxseFxuIgorCQkgIiAgRmF0YWwgUG93ZXIgRG93biBDb2RlOiAlMDE2bGx4XG4iLAogCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCSAgICAgICBlbWNoay0+c3VtbWFyeSwKIAkgICAgICAgZW1jaGstPmNfZGlyeCwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS1zeXNmcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhODIyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS1zeXNmcy5jCkBAIC0wLDAgKzEsMzY2IEBACisvKgorICogYXJjaC9hbHBoYS9rZXJuZWwvcGNpLXN5c2ZzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSXZhbiBLb2tzaGF5c2t5CisgKgorICogQWxwaGEgUENJIHJlc291cmNlIGZpbGVzLgorICoKKyAqIExvb3NlbHkgYmFzZWQgb24gZ2VuZXJpYyBIQVZFX1BDSV9NTUFQIGltcGxlbWVudGF0aW9uIGluCisgKiBkcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgaW50IGhvc2VfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfdHlwZSwgaW50IHNwYXJzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwlpZiAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkKKwkJYmFzZSA9IHNwYXJzZSA/IGhvc2UtPnNwYXJzZV9tZW1fYmFzZSA6IGhvc2UtPmRlbnNlX21lbV9iYXNlOworCWVsc2UKKwkJYmFzZSA9IHNwYXJzZSA/IGhvc2UtPnNwYXJzZV9pb19iYXNlIDogaG9zZS0+ZGVuc2VfaW9fYmFzZTsKKworCXZtYS0+dm1fcGdvZmYgKz0gYmFzZSA+PiBQQUdFX1NISUZUOworCXZtYS0+dm1fZmxhZ3MgfD0gKFZNX0lPIHwgVk1fUkVTRVJWRUQpOworCisJcmV0dXJuIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCisJCQkJICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJICB2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKK3N0YXRpYyBpbnQgX19wY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtLAorCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGludCBzcGFyc2UpCit7CisJdW5zaWduZWQgbG9uZyBuciwgc3RhcnQsIHNpemU7CisJaW50IHNoaWZ0ID0gc3BhcnNlID8gNSA6IDA7CisKKwluciA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJc3RhcnQgPSB2bWEtPnZtX3Bnb2ZmOworCXNpemUgPSAoKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgbnVtKSAtIDEpID4+IChQQUdFX1NISUZUIC0gc2hpZnQpKSArIDE7CisKKwlpZiAoc3RhcnQgPCBzaXplICYmIHNpemUgLSBzdGFydCA+PSBucikKKwkJcmV0dXJuIDE7CisJV0FSTigxLCAicHJvY2VzcyBcIiVzXCIgdHJpZWQgdG8gbWFwJXMgMHglMDhseC0weCUwOGx4IG9uICVzIEJBUiAlZCAiCisJCSIoc2l6ZSAweCUwOGx4KVxuIiwKKwkJY3VycmVudC0+Y29tbSwgc3BhcnNlID8gIiBzcGFyc2UiIDogIiIsIHN0YXJ0LCBzdGFydCArIG5yLAorCQlwY2lfbmFtZShwZGV2KSwgbnVtLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2lfbW1hcF9yZXNvdXJjZSAtIG1hcCBhIFBDSSByZXNvdXJjZSBpbnRvIHVzZXIgbWVtb3J5IHNwYWNlCisgKiBAa29iajoga29iamVjdCBmb3IgbWFwcGluZworICogQGF0dHI6IHN0cnVjdCBiaW5fYXR0cmlidXRlIGZvciB0aGUgZmlsZSBiZWluZyBtYXBwZWQKKyAqIEB2bWE6IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBwYXNzZWQgaW50byB0aGUgbW1hcAorICogQHNwYXJzZTogYWRkcmVzcyBzcGFjZSB0eXBlCisgKgorICogVXNlIHRoZSBidXMgbWFwcGluZyByb3V0aW5lcyB0byBtYXAgYSBQQ0kgcmVzb3VyY2UgaW50byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2Uoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IHNwYXJzZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoY29udGFpbmVyX29mKGtvYmosCisJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSwga29iaikpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKWF0dHItPnByaXZhdGU7CisJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3R5cGU7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIGJhcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspCisJCWlmIChyZXMgPT0gJnBkZXYtPnJlc291cmNlW2ldKQorCQkJYnJlYWs7CisJaWYgKGkgPj0gUENJX1JPTV9SRVNPVVJDRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIV9fcGNpX21tYXBfZml0cyhwZGV2LCBpLCB2bWEsIHNwYXJzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShyZXMtPnN0YXJ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYmFyLCByZXMpOworCXZtYS0+dm1fcGdvZmYgKz0gYmFyLnN0YXJ0ID4+IChQQUdFX1NISUZUIC0gKHNwYXJzZSA/IDUgOiAwKSk7CisJbW1hcF90eXBlID0gcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNID8gcGNpX21tYXBfbWVtIDogcGNpX21tYXBfaW87CisKKwlyZXR1cm4gaG9zZV9tbWFwX3BhZ2VfcmFuZ2UocGRldi0+c3lzZGF0YSwgdm1hLCBtbWFwX3R5cGUsIHNwYXJzZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2Vfc3BhcnNlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHBjaV9tbWFwX3Jlc291cmNlKGtvYmosIGF0dHIsIHZtYSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2VfZGVuc2Uoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHBjaV9tbWFwX3Jlc291cmNlKGtvYmosIGF0dHIsIHZtYSwgMCk7Cit9CisKKy8qKgorICogcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyAtIGNsZWFudXAgcmVzb3VyY2UgZmlsZXMKKyAqIEBkZXY6IGRldiB0byBjbGVhbnVwCisgKgorICogSWYgd2UgY3JlYXRlZCByZXNvdXJjZSBmaWxlcyBmb3IgQGRldiwgcmVtb3ZlIHRoZW0gZnJvbSBzeXNmcyBhbmQKKyAqIGZyZWUgdGhlaXIgcmVzb3VyY2VzLgorICovCit2b2lkIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKSB7CisJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyZXNfYXR0cjsKKworCQlyZXNfYXR0ciA9IHBkZXYtPnJlc19hdHRyW2ldOworCQlpZiAocmVzX2F0dHIpIHsKKwkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHJlc19hdHRyKTsKKwkJCWtmcmVlKHJlc19hdHRyKTsKKwkJfQorCisJCXJlc19hdHRyID0gcGRldi0+cmVzX2F0dHJfd2NbaV07CisJCWlmIChyZXNfYXR0cikgeworCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcmVzX2F0dHIpOworCQkJa2ZyZWUocmVzX2F0dHIpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNwYXJzZV9tZW1fbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtKQoreworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiBiYXI7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRldi0+c3lzZGF0YTsKKwlsb25nIGRlbnNlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNwYXJzZV9zaXplOworCisJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJhciwgJnBkZXYtPnJlc291cmNlW251bV0pOworCisJLyogQWxsIGNvcmUgbG9naWMgY2hpcHMgaGF2ZSA0RyBzcGFyc2UgYWRkcmVzcyBzcGFjZSwgZXhjZXB0CisJICAgQ0lBIHdoaWNoIGhhcyAxNkcgKHNlZSB4eHhfU1BBUlNFX01FTSBhbmQgeHh4X0RFTlNFX01FTQorCSAgIGRlZmluaXRpb25zIGluIGFzbS9jb3JlX3h4eC5oIGZpbGVzKS4gVGhpcyBjb3JyZXNwb25kcworCSAgIHRvIDEyOE0gb3IgNTEyTSBvZiB0aGUgYnVzIHNwYWNlLiAqLworCWRlbnNlX29mZnNldCA9IChsb25nKShob3NlLT5kZW5zZV9tZW1fYmFzZSAtIGhvc2UtPnNwYXJzZV9tZW1fYmFzZSk7CisJc3BhcnNlX3NpemUgPSBkZW5zZV9vZmZzZXQgPj0gMHg0MDAwMDAwMDBVTCA/IDB4MjAwMDAwMDAgOiAweDgwMDAwMDA7CisKKwlyZXR1cm4gYmFyLmVuZCA8IHNwYXJzZV9zaXplOworfQorCitzdGF0aWMgaW50IHBjaV9jcmVhdGVfb25lX2F0dHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW0sIGNoYXIgKm5hbWUsCisJCQkgICAgICAgY2hhciAqc3VmZml4LCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcmVzX2F0dHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzcGFyc2UpCit7CisJc2l6ZV90IHNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIG51bSk7CisKKwlzcHJpbnRmKG5hbWUsICJyZXNvdXJjZSVkJXMiLCBudW0sIHN1ZmZpeCk7CisJcmVzX2F0dHItPm1tYXAgPSBzcGFyc2UgPyBwY2lfbW1hcF9yZXNvdXJjZV9zcGFyc2UgOgorCQkJCSAgcGNpX21tYXBfcmVzb3VyY2VfZGVuc2U7CisJcmVzX2F0dHItPmF0dHIubmFtZSA9IG5hbWU7CisJcmVzX2F0dHItPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOworCXJlc19hdHRyLT5zaXplID0gc3BhcnNlID8gc2l6ZSA8PCA1IDogc2l6ZTsKKwlyZXNfYXR0ci0+cHJpdmF0ZSA9ICZwZGV2LT5yZXNvdXJjZVtudW1dOworCXJldHVybiBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCByZXNfYXR0cik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2NyZWF0ZV9hdHRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtKQoreworCS8qIGFsbG9jYXRlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUsIHBpZ2d5YmFjayBhdHRyaWJ1dGUgbmFtZSAqLworCWludCByZXR2YWwsIG5sZW4xLCBubGVuMiA9IDAsIHJlc19jb3VudCA9IDE7CisJdW5zaWduZWQgbG9uZyBzcGFyc2VfYmFzZSwgZGVuc2VfYmFzZTsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwZGV2LT5zeXNkYXRhOworCWNoYXIgKnN1ZmZpeCwgKmF0dHJfbmFtZTsKKworCXN1ZmZpeCA9ICIiOwkvKiBBc3N1bWUgYnd4IG1hY2hpbmUsIG5vcm1hbCByZXNvdXJjZU4gZmlsZXMuICovCisJbmxlbjEgPSAxMDsKKworCWlmIChwZGV2LT5yZXNvdXJjZVtudW1dLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJc3BhcnNlX2Jhc2UgPSBob3NlLT5zcGFyc2VfbWVtX2Jhc2U7CisJCWRlbnNlX2Jhc2UgPSBob3NlLT5kZW5zZV9tZW1fYmFzZTsKKwkJaWYgKHNwYXJzZV9iYXNlICYmICFzcGFyc2VfbWVtX21tYXBfZml0cyhwZGV2LCBudW0pKSB7CisJCQlzcGFyc2VfYmFzZSA9IDA7CisJCQlzdWZmaXggPSAiX2RlbnNlIjsKKwkJCW5sZW4xID0gMTY7CS8qIHJlc291cmNlTl9kZW5zZSAqLworCQl9CisJfSBlbHNlIHsKKwkJc3BhcnNlX2Jhc2UgPSBob3NlLT5zcGFyc2VfaW9fYmFzZTsKKwkJZGVuc2VfYmFzZSA9IGhvc2UtPmRlbnNlX2lvX2Jhc2U7CisJfQorCisJaWYgKHNwYXJzZV9iYXNlKSB7CisJCXN1ZmZpeCA9ICJfc3BhcnNlIjsKKwkJbmxlbjEgPSAxNzsKKwkJaWYgKGRlbnNlX2Jhc2UpIHsKKwkJCW5sZW4yID0gMTY7CS8qIHJlc291cmNlTl9kZW5zZSAqLworCQkJcmVzX2NvdW50ID0gMjsKKwkJfQorCX0KKworCWF0dHIgPSBremFsbG9jKHNpemVvZigqYXR0cikgKiByZXNfY291bnQgKyBubGVuMSArIG5sZW4yLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF0dHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQ3JlYXRlIGJ3eCwgc3BhcnNlIG9yIHNpbmdsZSBkZW5zZSBmaWxlICovCisJYXR0cl9uYW1lID0gKGNoYXIgKikoYXR0ciArIHJlc19jb3VudCk7CisJcGRldi0+cmVzX2F0dHJbbnVtXSA9IGF0dHI7CisJcmV0dmFsID0gcGNpX2NyZWF0ZV9vbmVfYXR0cihwZGV2LCBudW0sIGF0dHJfbmFtZSwgc3VmZml4LCBhdHRyLAorCQkJCSAgICAgc3BhcnNlX2Jhc2UpOworCWlmIChyZXR2YWwgfHwgcmVzX2NvdW50ID09IDEpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBDcmVhdGUgZGVuc2UgZmlsZSAqLworCWF0dHJfbmFtZSArPSBubGVuMTsKKwlhdHRyKys7CisJcGRldi0+cmVzX2F0dHJfd2NbbnVtXSA9IGF0dHI7CisJcmV0dXJuIHBjaV9jcmVhdGVfb25lX2F0dHIocGRldiwgbnVtLCBhdHRyX25hbWUsICJfZGVuc2UiLCBhdHRyLCAwKTsKK30KKworLyoqCisgKiBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzIC0gY3JlYXRlIHJlc291cmNlIGZpbGVzIGluIHN5c2ZzIGZvciBAZGV2CisgKiBAZGV2OiBkZXYgaW4gcXVlc3Rpb24KKyAqCisgKiBXYWxrIHRoZSByZXNvdXJjZXMgaW4gQGRldiBjcmVhdGluZyBmaWxlcyBmb3IgZWFjaCByZXNvdXJjZSBhdmFpbGFibGUuCisgKi8KK2ludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCWludCByZXR2YWw7CisKKwkvKiBFeHBvc2UgdGhlIFBDSSByZXNvdXJjZXMgZnJvbSB0aGlzIGRldmljZSBhcyBmaWxlcyAqLworCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspIHsKKworCQkvKiBza2lwIGVtcHR5IHJlc291cmNlcyAqLworCQlpZiAoIXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSBwY2lfY3JlYXRlX2F0dHIocGRldiwgaSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMocGRldik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBMZWdhY3kgSS9PIGJ1cyBtYXBwaW5nIHN0dWZmLiAqLworCitzdGF0aWMgaW50IF9fbGVnYWN5X21tYXBfZml0cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVzX3NpemUsIGludCBzcGFyc2UpCit7CisJdW5zaWduZWQgbG9uZyBuciwgc3RhcnQsIHNpemU7CisKKwluciA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJc3RhcnQgPSB2bWEtPnZtX3Bnb2ZmOworCXNpemUgPSAoKHJlc19zaXplIC0gMSkgPj4gUEFHRV9TSElGVCkgKyAxOworCisJaWYgKHN0YXJ0IDwgc2l6ZSAmJiBzaXplIC0gc3RhcnQgPj0gbnIpCisJCXJldHVybiAxOworCVdBUk4oMSwgInByb2Nlc3MgXCIlc1wiIHRyaWVkIHRvIG1hcCVzIDB4JTA4bHgtMHglMDhseCBvbiBob3NlICVkICIKKwkJIihzaXplIDB4JTA4bHgpXG4iLAorCQljdXJyZW50LT5jb21tLCBzcGFyc2UgPyAiIHNwYXJzZSIgOiAiIiwgc3RhcnQsIHN0YXJ0ICsgbnIsCisJCWhvc2UtPmluZGV4LCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFzX3NwYXJzZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCWJhc2UgPSAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkgPyBob3NlLT5zcGFyc2VfbWVtX2Jhc2UgOgorCQkJCQkgICAgIGhvc2UtPnNwYXJzZV9pb19iYXNlOworCisJcmV0dXJuIGJhc2UgIT0gMDsKK30KKworaW50IHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlpbnQgc3BhcnNlID0gaGFzX3NwYXJzZShob3NlLCBtbWFwX3R5cGUpOworCXVuc2lnbmVkIGxvbmcgcmVzX3NpemU7CisKKwlyZXNfc2l6ZSA9IChtbWFwX3R5cGUgPT0gcGNpX21tYXBfbWVtKSA/IGJ1cy0+bGVnYWN5X21lbS0+c2l6ZSA6CisJCQkJCQkgYnVzLT5sZWdhY3lfaW8tPnNpemU7CisJaWYgKCFfX2xlZ2FjeV9tbWFwX2ZpdHMoaG9zZSwgdm1hLCByZXNfc2l6ZSwgc3BhcnNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gaG9zZV9tbWFwX3BhZ2VfcmFuZ2UoaG9zZSwgdm1hLCBtbWFwX3R5cGUsIHNwYXJzZSk7Cit9CisKKy8qKgorICogcGNpX2FkanVzdF9sZWdhY3lfYXR0ciAtIGFkanVzdG1lbnQgb2YgbGVnYWN5IGZpbGUgYXR0cmlidXRlcworICogQGI6IGJ1cyB0byBjcmVhdGUgZmlsZXMgdW5kZXIKKyAqIEBtbWFwX3R5cGU6IEkvTyBwb3J0IG9yIG1lbW9yeQorICoKKyAqIEFkanVzdCBmaWxlIG5hbWUgYW5kIHNpemUgZm9yIHNwYXJzZSBtYXBwaW5ncy4KKyAqLwordm9pZCBwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyKHN0cnVjdCBwY2lfYnVzICpidXMsIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKworCWlmICghaGFzX3NwYXJzZShob3NlLCBtbWFwX3R5cGUpKQorCQlyZXR1cm47CisKKwlpZiAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkgeworCQlidXMtPmxlZ2FjeV9tZW0tPmF0dHIubmFtZSA9ICJsZWdhY3lfbWVtX3NwYXJzZSI7CisJCWJ1cy0+bGVnYWN5X21lbS0+c2l6ZSA8PD0gNTsKKwl9IGVsc2UgeworCQlidXMtPmxlZ2FjeV9pby0+YXR0ci5uYW1lID0gImxlZ2FjeV9pb19zcGFyc2UiOworCQlidXMtPmxlZ2FjeV9pby0+c2l6ZSA8PD0gNTsKKwl9CisJcmV0dXJuOworfQorCisvKiBMZWdhY3kgSS9PIGJ1cyByZWFkL3dyaXRlIGZ1bmN0aW9ucyAqLworaW50IHBjaV9sZWdhY3lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyICp2YWwsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKworCXBvcnQgKz0gaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OworCisJc3dpdGNoKHNpemUpIHsKKwljYXNlIDE6CisJCSooKHU4ICopdmFsKSA9IGluYihwb3J0KTsKKwkJcmV0dXJuIDE7CisJY2FzZSAyOgorCQlpZiAocG9ydCAmIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTE2ICopdmFsKSA9IGludyhwb3J0KTsKKwkJcmV0dXJuIDI7CisJY2FzZSA0OgorCQlpZiAocG9ydCAmIDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTMyICopdmFsKSA9IGlubChwb3J0KTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgcGNpX2xlZ2FjeV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyIHZhbCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gYnVzLT5zeXNkYXRhOworCisJcG9ydCArPSBob3NlLT5pb19zcGFjZS0+c3RhcnQ7CisKKwlzd2l0Y2goc2l6ZSkgeworCWNhc2UgMToKKwkJb3V0Yihwb3J0LCB2YWwpOworCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCWlmIChwb3J0ICYgMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlvdXR3KHBvcnQsIHZhbCk7CisJCXJldHVybiAyOworCWNhc2UgNDoKKwkJaWYgKHBvcnQgJiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW91dGwocG9ydCwgdmFsKTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwppbmRleCBhM2I5Mzg4Li5hOTFiYTI4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCSAqLwogCiAJCS8qIEFsaWduIHRvIG11bHRpcGxlIG9mIHNpemUgb2YgbWluaW11bSBiYXNlLiAgKi8KLQkJYWxpZ250byA9IG1heCgweDEwMDBVTCwgYWxpZ24pOworCQlhbGlnbnRvID0gbWF4X3QocmVzb3VyY2Vfc2l6ZV90LCAweDEwMDAsIGFsaWduKTsKIAkJc3RhcnQgPSBBTElHTihzdGFydCwgYWxpZ250byk7CiAJCWlmIChob3NlLT5zcGFyc2VfbWVtX2Jhc2UgJiYgc2l6ZSA8PSA3ICogMTYqTUIpIHsKIAkJCWlmICgoKHN0YXJ0IC8gKDE2Kk1CKSkgJiAweDcpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggYjkwOTRkYS4uYmZiODgwYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCSAgICAmJiBwYWRkciArIHNpemUgPD0gX19kaXJlY3RfbWFwX3NpemUpIHsKIAkJcmV0ID0gcGFkZHIgKyBfX2RpcmVjdF9tYXBfYmFzZTsKIAotCQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIC0+IGRpcmVjdCAlbHggZnJvbSAlcFxuIiwKKwkJREJHQTIoInBjaV9tYXBfc2luZ2xlOiBbJXAsJXp4XSAtPiBkaXJlY3QgJWxseCBmcm9tICVwXG4iLAogCQkgICAgICBjcHVfYWRkciwgc2l6ZSwgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJCXJldHVybiByZXQ7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlpZiAoZGFjX2FsbG93ZWQpIHsKIAkJcmV0ID0gcGFkZHIgKyBhbHBoYV9tdi5wY2lfZGFjX29mZnNldDsKIAotCQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIC0+IERBQyAlbHggZnJvbSAlcFxuIiwKKwkJREJHQTIoInBjaV9tYXBfc2luZ2xlOiBbJXAsJXp4XSAtPiBEQUMgJWxseCBmcm9tICVwXG4iLAogCQkgICAgICBjcHVfYWRkciwgc2l6ZSwgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJCXJldHVybiByZXQ7CkBAIC0yOTksNyArMjk5LDcgQEAKIAlyZXQgPSBhcmVuYS0+ZG1hX2Jhc2UgKyBkbWFfb2ZzICogUEFHRV9TSVpFOwogCXJldCArPSAodW5zaWduZWQgbG9uZyljcHVfYWRkciAmIH5QQUdFX01BU0s7CiAKLQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIG5wICVsZCAtPiBzZyAlbHggZnJvbSAlcFxuIiwKKwlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlenhdIG5wICVsZCAtPiBzZyAlbGx4IGZyb20gJXBcbiIsCiAJICAgICAgY3B1X2FkZHIsIHNpemUsIG5wYWdlcywgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJcmV0dXJuIHJldDsKQEAgLTM1NSwxNCArMzU1LDE0IEBACiAJICAgICYmIGRtYV9hZGRyIDwgX19kaXJlY3RfbWFwX2Jhc2UgKyBfX2RpcmVjdF9tYXBfc2l6ZSkgewogCQkvKiBOb3RoaW5nIHRvIGRvLiAgKi8KIAotCQlEQkdBMigicGNpX3VubWFwX3NpbmdsZTogZGlyZWN0IFslbHgsJWx4XSBmcm9tICVwXG4iLAorCQlEQkdBMigicGNpX3VubWFwX3NpbmdsZTogZGlyZWN0IFslbGx4LCV6eF0gZnJvbSAlcFxuIiwKIAkJICAgICAgZG1hX2FkZHIsIHNpemUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAkJcmV0dXJuOwogCX0KIAogCWlmIChkbWFfYWRkciA+IDB4ZmZmZmZmZmYpIHsKLQkJREJHQTIoInBjaTY0X3VubWFwX3NpbmdsZTogREFDIFslbHgsJWx4XSBmcm9tICVwXG4iLAorCQlEQkdBMigicGNpNjRfdW5tYXBfc2luZ2xlOiBEQUMgWyVsbHgsJXp4XSBmcm9tICVwXG4iLAogCQkgICAgICBkbWFfYWRkciwgc2l6ZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM3Myw5ICszNzMsOSBAQAogCiAJZG1hX29mcyA9IChkbWFfYWRkciAtIGFyZW5hLT5kbWFfYmFzZSkgPj4gUEFHRV9TSElGVDsKIAlpZiAoZG1hX29mcyAqIFBBR0VfU0laRSA+PSBhcmVuYS0+c2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJvZ3VzIHBjaV91bm1hcF9zaW5nbGU6IGRtYV9hZGRyICVseCAiCi0JCSAgICAgICAiIGJhc2UgJWx4IHNpemUgJXhcbiIsIGRtYV9hZGRyLCBhcmVuYS0+ZG1hX2Jhc2UsCi0JCSAgICAgICBhcmVuYS0+c2l6ZSk7CisJCXByaW50ayhLRVJOX0VSUiAiQm9ndXMgcGNpX3VubWFwX3NpbmdsZTogZG1hX2FkZHIgJWxseCAiCisJCSAgICAgICAiIGJhc2UgJWxseCBzaXplICV4XG4iLAorCQkgICAgICAgZG1hX2FkZHIsIGFyZW5hLT5kbWFfYmFzZSwgYXJlbmEtPnNpemUpOwogCQlyZXR1cm47CiAJCUJVRygpOwogCX0KQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJlbmEtPmxvY2ssIGZsYWdzKTsKIAotCURCR0EyKCJwY2lfdW5tYXBfc2luZ2xlOiBzZyBbJWx4LCVseF0gbnAgJWxkIGZyb20gJXBcbiIsCisJREJHQTIoInBjaV91bm1hcF9zaW5nbGU6IHNnIFslbGx4LCV6eF0gbnAgJWxkIGZyb20gJXBcbiIsCiAJICAgICAgZG1hX2FkZHIsIHNpemUsIG5wYWdlcywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3NpbmdsZSk7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCQkKLQlEQkdBMigicGNpX2FsbG9jX2NvbnNpc3RlbnQ6ICVseCAtPiBbJXAsJXhdIGZyb20gJXBcbiIsCisJREJHQTIoInBjaV9hbGxvY19jb25zaXN0ZW50OiAlenggLT4gWyVwLCVsbHhdIGZyb20gJXBcbiIsCiAJICAgICAgc2l6ZSwgY3B1X2FkZHIsICpkbWFfYWRkcnAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAlyZXR1cm4gY3B1X2FkZHI7CkBAIC00NjQsNyArNDY0LDcgQEAKIAlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGRtYV9hZGRyLCBzaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIsIGdldF9vcmRlcihzaXplKSk7CiAKLQlEQkdBMigicGNpX2ZyZWVfY29uc2lzdGVudDogWyV4LCVseF0gZnJvbSAlcFxuIiwKKwlEQkdBMigicGNpX2ZyZWVfY29uc2lzdGVudDogWyVsbHgsJXp4XSBmcm9tICVwXG4iLAogCSAgICAgIGRtYV9hZGRyLCBzaXplLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfZnJlZV9jb25zaXN0ZW50KTsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQlvdXQtPmRtYV9hZGRyZXNzID0gcGFkZHIgKyBfX2RpcmVjdF9tYXBfYmFzZTsKIAkJb3V0LT5kbWFfbGVuZ3RoID0gc2l6ZTsKIAotCQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gZGlyZWN0ICVseFxuIiwKKwkJREJHQSgiICAgIHNnX2ZpbGw6IFslcCwlbHhdIC0+IGRpcmVjdCAlbGx4XG4iLAogCQkgICAgIF9fdmEocGFkZHIpLCBzaXplLCBvdXQtPmRtYV9hZGRyZXNzKTsKIAogCQlyZXR1cm4gMDsKQEAgLTU2Myw3ICs1NjMsNyBAQAogCQlvdXQtPmRtYV9hZGRyZXNzID0gcGFkZHIgKyBhbHBoYV9tdi5wY2lfZGFjX29mZnNldDsKIAkJb3V0LT5kbWFfbGVuZ3RoID0gc2l6ZTsKIAotCQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gREFDICVseFxuIiwKKwkJREJHQSgiICAgIHNnX2ZpbGw6IFslcCwlbHhdIC0+IERBQyAlbGx4XG4iLAogCQkgICAgIF9fdmEocGFkZHIpLCBzaXplLCBvdXQtPmRtYV9hZGRyZXNzKTsKIAogCQlyZXR1cm4gMDsKQEAgLTU4OSw3ICs1ODksNyBAQAogCW91dC0+ZG1hX2FkZHJlc3MgPSBhcmVuYS0+ZG1hX2Jhc2UgKyBkbWFfb2ZzKlBBR0VfU0laRSArIHBhZGRyOwogCW91dC0+ZG1hX2xlbmd0aCA9IHNpemU7CiAKLQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gc2cgJWx4IG5wICVsZFxuIiwKKwlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gc2cgJWxseCBucCAlbGRcbiIsCiAJICAgICBfX3ZhKHBhZGRyKSwgc2l6ZSwgb3V0LT5kbWFfYWRkcmVzcywgbnBhZ2VzKTsKIAogCS8qIEFsbCB2aXJ0dWFsbHkgY29udGlndW91cy4gIFdlIG5lZWQgdG8gZmluZCB0aGUgbGVuZ3RoIG9mIGVhY2gKQEAgLTc1Miw3ICs3NTIsNyBAQAogCiAJCWlmIChhZGRyID4gMHhmZmZmZmZmZikgewogCQkJLyogSXQncyBhIERBQyBhZGRyZXNzIC0tIG5vdGhpbmcgdG8gZG8uICAqLwotCQkJREJHQSgiICAgICglbGQpIERBQyBbJWx4LCVseF1cbiIsCisJCQlEQkdBKCIgICAgKCVsZCkgREFDIFslbGx4LCV6eF1cbiIsCiAJCQkgICAgICBzZyAtIGVuZCArIG5lbnRzLCBhZGRyLCBzaXplKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03NjAsMTIgKzc2MCwxMiBAQAogCQlpZiAoYWRkciA+PSBfX2RpcmVjdF9tYXBfYmFzZQogCQkgICAgJiYgYWRkciA8IF9fZGlyZWN0X21hcF9iYXNlICsgX19kaXJlY3RfbWFwX3NpemUpIHsKIAkJCS8qIE5vdGhpbmcgdG8gZG8uICAqLwotCQkJREJHQSgiICAgICglbGQpIGRpcmVjdCBbJWx4LCVseF1cbiIsCisJCQlEQkdBKCIgICAgKCVsZCkgZGlyZWN0IFslbGx4LCV6eF1cbiIsCiAJCQkgICAgICBzZyAtIGVuZCArIG5lbnRzLCBhZGRyLCBzaXplKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJREJHQSgiICAgICglbGQpIHNnIFslbHgsJWx4XVxuIiwKKwkJREJHQSgiICAgICglbGQpIHNnIFslbGx4LCV6eF1cbiIsCiAJCSAgICAgc2cgLSBlbmQgKyBuZW50cywgYWRkciwgc2l6ZSk7CiAKIAkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOGQwMDk3Zi4uM2EyZmI3YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgKi8KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkLAogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaAppbmRleCBmZTE0YzY3Li41NjdmMjU5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb3RvLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBhcGVjc19wY2lfb3BzOwogZXh0ZXJuIHZvaWQgYXBlY3NfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXBlY3NfcGNpX2Nscl9lcnIodm9pZCk7Ci1leHRlcm4gdm9pZCBhcGVjc19tYWNoaW5lX2NoZWNrKHU2NCwgdTY0KTsKK2V4dGVybiB2b2lkIGFwZWNzX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGFwZWNzX3BjaV90Ymkoc3RydWN0IHBjaV9jb250cm9sbGVyICosIGRtYV9hZGRyX3QsIGRtYV9hZGRyX3QpOwogCiAvKiBjb3JlX2NpYS5jICovCkBAIC0yOSw3ICsyOSw3IEBACiBleHRlcm4gdm9pZCBjaWFfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHl4aXNfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2lhX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgY2lhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgY2lhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGNpYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9pcm9uZ2F0ZS5jICovCkBAIC00Miw3ICs0Miw3IEBACiAvKiBjb3JlX2xjYS5jICovCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgbGNhX3BjaV9vcHM7CiBleHRlcm4gdm9pZCBsY2FfaW5pdF9hcmNoKHZvaWQpOwotZXh0ZXJuIHZvaWQgbGNhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgbGNhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGxjYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9tYXJ2ZWwuYyAqLwpAQCAtNjQsNyArNjQsNyBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIG1jcGNpYV9wY2lfb3BzOwogZXh0ZXJuIHZvaWQgbWNwY2lhX2luaXRfYXJjaCh2b2lkKTsKIGV4dGVybiB2b2lkIG1jcGNpYV9pbml0X2hvc2VzKHZvaWQpOwotZXh0ZXJuIHZvaWQgbWNwY2lhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgbWNwY2lhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIG1jcGNpYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9wb2xhcmlzLmMgKi8KQEAgLTcyLDE0ICs3MiwxNCBAQAogZXh0ZXJuIGludCBwb2xhcmlzX3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICosIGludCwgdTMyICopOwogZXh0ZXJuIGludCBwb2xhcmlzX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqLCBpbnQsIHUzMik7CiBleHRlcm4gdm9pZCBwb2xhcmlzX2luaXRfYXJjaCh2b2lkKTsKLWV4dGVybiB2b2lkIHBvbGFyaXNfbWFjaGluZV9jaGVjayh1NjQsIHU2NCk7CitleHRlcm4gdm9pZCBwb2xhcmlzX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKICNkZWZpbmUgcG9sYXJpc19wY2lfdGJpICgodm9pZCAqKTApCiAKIC8qIGNvcmVfdDIuYyAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHQyX3BjaV9vcHM7CiBleHRlcm4gdm9pZCB0Ml9pbml0X2FyY2godm9pZCk7CiBleHRlcm4gdm9pZCB0Ml9raWxsX2FyY2goaW50KTsKLWV4dGVybiB2b2lkIHQyX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgdDJfbWFjaGluZV9jaGVjayh1bnNpZ25lZCBsb25nIHZlY3RvciwgdW5zaWduZWQgbG9uZyBsYV9wdHIpOwogZXh0ZXJuIHZvaWQgdDJfcGNpX3RiaShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiwgZG1hX2FkZHJfdCwgZG1hX2FkZHJfdCk7CiAKIC8qIGNvcmVfdGl0YW4uYyAqLwpAQCAtOTQsMTQgKzk0LDE0IEBACiBleHRlcm4gc3RydWN0IHBjaV9vcHMgdHN1bmFtaV9wY2lfb3BzOwogZXh0ZXJuIHZvaWQgdHN1bmFtaV9pbml0X2FyY2godm9pZCk7CiBleHRlcm4gdm9pZCB0c3VuYW1pX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgdHN1bmFtaV9tYWNoaW5lX2NoZWNrKHU2NCwgdTY0KTsKK2V4dGVybiB2b2lkIHRzdW5hbWlfbWFjaGluZV9jaGVjayh1bnNpZ25lZCBsb25nIHZlY3RvciwgdW5zaWduZWQgbG9uZyBsYV9wdHIpOwogZXh0ZXJuIHZvaWQgdHN1bmFtaV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV93aWxkZmlyZS5jICovCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgd2lsZGZpcmVfcGNpX29wczsKIGV4dGVybiB2b2lkIHdpbGRmaXJlX2luaXRfYXJjaCh2b2lkKTsKIGV4dGVybiB2b2lkIHdpbGRmaXJlX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgd2lsZGZpcmVfbWFjaGluZV9jaGVjayh1NjQsIHU2NCk7CitleHRlcm4gdm9pZCB3aWxkZmlyZV9tYWNoaW5lX2NoZWNrKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhX3B0cik7CiBleHRlcm4gdm9pZCB3aWxkZmlyZV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIGV4dGVybiBpbnQgd2lsZGZpcmVfcGFfdG9fbmlkKHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludCB3aWxkZmlyZV9jcHVpZF90b19uaWQoaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDAyYmVlNjkuLjgwZGY4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAkJICAgICAgIHBsYXRmb3JtX3N0cmluZygpLCBucl9wcm9jZXNzb3JzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKGYsICJjcHVzIGFjdGl2ZVx0XHQ6ICVkXG4iCisJc2VxX3ByaW50ZihmLCAiY3B1cyBhY3RpdmVcdFx0OiAldVxuIgogCQkgICAgICAiY3B1IGFjdGl2ZSBtYXNrXHRcdDogJTAxNmx4XG4iLAogCQkgICAgICAgbnVtX29ubGluZV9jcHVzKCksIGNwdXNfYWRkcihjcHVfcG9zc2libGVfbWFwKVswXSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzY2OS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKaW5kZXggZmQ0NjdiMi4uYmNhNWJkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKQEAgLTI1NDIsOCArMjU0Miw4IEBACiAgICAgICAgIFNNQzM3YzY2OV9kaXNwbGF5X2RldmljZV9pbmZvKCApOwogI2VuZGlmCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotICAgICAgICBwcmludGsoICJTTUMzN2M2NjkgU3VwZXIgSS9PIENvbnRyb2xsZXIgZm91bmQgQCAweCVseFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcpIFNNQ19iYXNlICk7CisgICAgICAgIHByaW50ayggIlNNQzM3YzY2OSBTdXBlciBJL08gQ29udHJvbGxlciBmb3VuZCBAIDB4JXBcbiIsCisJCVNNQ19iYXNlICk7CiAgICAgfQogICAgIGVsc2UgewogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYyBiL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYwppbmRleCA3OGFkN2NkLi5kMTJhZjQ3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCkBAIC0yMTgsNyArMjE4LDYgQEAKIAkJCQlCQVNFX0RJUik7CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JYmFzZV9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIENyZWF0ZSBwZXItbmFtZSBzdWJkaXJlY3RvcnkKQEAgLTIyOSw3ICsyMjgsNiBAQAogCQkJCUJBU0VfRElSLCBOQU1FRF9ESVIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQotCW5hbWVkX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogQ3JlYXRlIHBlci1udW1iZXIgc3ViZGlyZWN0b3J5CkBAIC0yNDEsNyArMjM5LDYgQEAKIAkJZ290byBjbGVhbnVwOwogCiAJfQotCW51bWJlcmVkX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogQ3JlYXRlIGFsbCBuYW1lZCBub2RlcwpAQCAtMjU0LDcgKzI1MSw2IEBACiAJCQlnb3RvIGNsZWFudXA7CiAKIAkJZW50cnktPnByb2NfZW50cnktPmRhdGEJCT0gKHZvaWQgKikgZW50cnk7Ci0JCWVudHJ5LT5wcm9jX2VudHJ5LT5vd25lcgk9IFRISVNfTU9EVUxFOwogCQllbnRyeS0+cHJvY19lbnRyeS0+cmVhZF9wcm9jCT0gc3JtX2Vudl9yZWFkOwogCQllbnRyeS0+cHJvY19lbnRyeS0+d3JpdGVfcHJvYwk9IHNybV9lbnZfd3JpdGU7CiAKQEAgLTI3NSw3ICsyNzEsNiBAQAogCiAJCWVudHJ5LT5pZAkJCT0gdmFyX251bTsKIAkJZW50cnktPnByb2NfZW50cnktPmRhdGEJCT0gKHZvaWQgKikgZW50cnk7Ci0JCWVudHJ5LT5wcm9jX2VudHJ5LT5vd25lcgk9IFRISVNfTU9EVUxFOwogCQllbnRyeS0+cHJvY19lbnRyeS0+cmVhZF9wcm9jCT0gc3JtX2Vudl9yZWFkOwogCQllbnRyeS0+cHJvY19lbnRyeS0+d3JpdGVfcHJvYwk9IHNybV9lbnZfd3JpdGU7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCmluZGV4IGUyNTE2ZjkuLjJiNWNhZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKQEAgLTI0NCwxMiArMjQ0LDExIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1qZW5zZW5fbWFjaGluZV9jaGVjayAodTY0IHZlY3RvciwgdTY0IGxhKQoramVuc2VuX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGEpCiB7CiAJcHJpbnRrKEtFUk5fQ1JJVCAiTWFjaGluZSBjaGVja1xuIik7CiB9CiAKLQogLyoKICAqIFRoZSBTeXN0ZW0gVmVjdG9yCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKaW5kZXggZDIzMmU0Mi4uOWUyNjMyNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCXNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnVwZGF0ZV9pcnFfaHcoYml0LCBtYXNrKTsKIAlzcGluX3VubG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAjaWYgMAotCXByaW50aygiJXM6IG1hc2sgMHglbHggYml0IDB4JXggaXJxIDB4JXhcbiIsCisJcHJpbnRrKCIlczogbWFzayAweCVseCBiaXQgMHglbHggaXJxIDB4JXhcbiIsCiAJICAgICAgIF9fZnVuY19fLCBtYXNrLCBiaXQsIGlycSk7CiAjZW5kaWYKIH0KQEAgLTQ2OSw3ICs0NjksNyBAQAogCXNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnVwZGF0ZV9pcnFfaHcoYml0LCBtYXNrKTsKIAlzcGluX3VubG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAjaWYgMAotCXByaW50aygiJXM6IG1hc2sgMHglbHggYml0IDB4JXggaXJxIDB4JXhcbiIsCisJcHJpbnRrKCIlczogbWFzayAweCVseCBiaXQgMHglbHggaXJxIDB4JXhcbiIsCiAJICAgICAgIF9fZnVuY19fLCBtYXNrLCBiaXQsIGlycSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jCmluZGV4IGNlZmM1YTMuLjZlZTc2NTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYwpAQCAtNjIzLDcgKzYyMyw3IEBACiAJfQogCiAJbG9ja19rZXJuZWwoKTsKLQlwcmludGsoIkJhZCB1bmFsaWduZWQga2VybmVsIGFjY2VzcyBhdCAlMDE2bHg6ICVwICVseCAlbGRcbiIsCisJcHJpbnRrKCJCYWQgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgYXQgJTAxNmx4OiAlcCAlbHggJWx1XG4iLAogCQlwYywgdmEsIG9wY29kZSwgcmVnKTsKIAlkb19leGl0KFNJR1NFR1YpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCmluZGV4IGFhOWQzNGYuLjY3OWE0YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCkBAIC00NzQsMTQgKzQ3NCwzNCBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLUNPTkZJR19TTUM5MTFYPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDM3X2RlZmNvbmZpZwppbmRleCA2Mjc0NzQ1Li42ZTM3Yzc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMzdfZGVmY29uZmlnCkBAIC00NjUsMTIgKzQ2NSwzMyBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKaW5kZXggY2QyOTgyNC4uMjFkYjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwpAQCAtNDk2LDEzICs0OTYsMzMgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCA3ZTI1M2Y1Li45YTc1YzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtNDkwLDEzICs0OTAsMzMgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMmI0MWViYi4uYzEzNjgxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yMTcsNiArMjE3LDkgQEAKIC8qIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPyAqLwogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrIDwgMHg4MDAwMDAwMCkKIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCAyZGUxNGUyLi5jMzI2NWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwogCiBpbnQKLWNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKK2NvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCiAJICAgIHVuc2lnbmVkIGxvbmcgc3RrX3N6LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyhwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggN2FjODEyZC4uZTI2YzRmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTE5OCwxNyArMTk4LDE3IEBACiAJLyogVVNCIG11c3Qgbm90IGJlIHVzaW5nIFBMTEIgKi8KIAlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewogCQlpZiAoKHNjc3IgJiAoQVQ5MVJNOTIwMF9QTUNfVUhQIHwgQVQ5MVJNOTIwMF9QTUNfVURQKSkgIT0gMCkgewotCQkJcHJfZGVidWcoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKKwkJCXByX2VycigiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpKSB7CiAJCWlmICgoc2NzciAmIChBVDkxU0FNOTI2eF9QTUNfVUhQIHwgQVQ5MVNBTTkyNnhfUE1DX1VEUCkpICE9IDApIHsKLQkJCXByX2RlYnVnKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CisJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MWNhcDkoKSkgewogCQlpZiAoKHNjc3IgJiBBVDkxQ0FQOV9QTUNfVUhQKSAhPSAwKSB7Ci0JCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOworCQkJcHJfZXJyKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJCWNzcyA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENLUihpKSkgJiBBVDkxX1BNQ19DU1M7CiAJCWlmIChjc3MgIT0gQVQ5MV9QTUNfQ1NTX1NMT1cpIHsKLQkJCXByX2RlYnVnKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggUENLJWQgc3JjICVkXG4iLCBpLCBjc3MpOworCQkJcHJfZXJyKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggUENLJWQgc3JjICVkXG4iLCBpLCBjc3MpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYmJiZDcyNy4uNGQ5YzFmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjgsNyArMjgsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCV9fcmF3X3dyaXRlbChSRVNFVF9HTE9CQUwgfCBSRVNFVF9DUFUxLAogCQkgICAgIElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9SRVNFVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDAxZWRmZS4uNGY1YjBlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTQsNyArMTQsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKaW5kZXggNWZjZTAyMi4uYzM2NDhlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KQEAgLTcwLDcgKzcwLDcgQEAKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MTF4X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAkJPSBDUzFfQkFTRV9BRERSICsgMHgzMDAsCiAJCS5lbmQJCT0gQ1MxX0JBU0VfQUREUiArIDB4MzAwICsgU1pfNjRLIC0gMSwKQEAgLTc5LDIyICs3OSwyNSBAQAogCVsxXSA9IHsKIAkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKIAkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSBzbWM5MTF4X2luZm8gPSB7Ci0JLmZsYWdzCQk9IFNNQzkxMVhfVVNFXzMyQklULAotCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9MT1csCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9pbmZvID0geworCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkgfAorCQkJICBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19ldGggPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAorCS5uYW1lCQk9ICJzbXNjOTExeCIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc21jOTExeF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbWM5MTF4X2luZm8sCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2luZm8sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGEyYzNmY2MuLmM0OWQ5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtNDcsNiArNDcsOCBAQAogCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9SWDUxKQkJKz0gYm9hcmQtcng1MS5vIFwKIAkJCQkJICAgYm9hcmQtcng1MS1wZXJpcGhlcmFscy5vIFwKKwkJCQkJICAgbW1jLXR3bDQwMzAubworCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKIGlmZXEgKCQoQ09ORklHX1VTQl9NVVNCX1NPQykseSkKIG9iai15CQkJCQkrPSB1c2ItbXVzYi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBlMDk2Zjc3Li5kYTU3YjBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC00MSwxMiArNDIsMTIgQEAKIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKLSNkZWZpbmUgTERQX1NNQzkxMVhfQ1MJCTEKLSNkZWZpbmUgTERQX1NNQzkxMVhfR1BJTwkxNTIKKyNkZWZpbmUgTERQX1NNU0M5MTFYX0NTCQkxCisjZGVmaW5lIExEUF9TTVNDOTExWF9HUElPCTE1MgogI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwCiAjZGVmaW5lIExEUF9FVEhSX1NUQVJUCQlERUJVR19CQVNFCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGRwX3NtYzkxMXhfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxkcF9zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IExEUF9FVEhSX1NUQVJULAogCQkuZW5kCT0gTERQX0VUSFJfU1RBUlQgKyBTWl80SywKQEAgLTU5LDQwICs2MCw1MCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBsZHBfc21jOTExeF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAorc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgbGRwX3Ntc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxkcF9zbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKIAkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxkcF9zbWM5MTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbGRwX3NtYzkxMXhfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsZHBfc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBsZHBfc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZsZHBfc21zYzkxMXhfY29uZmlnLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbGRwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZsZHBfc21jOTExeF9kZXZpY2UsCisJJmxkcF9zbXNjOTExeF9kZXZpY2UsCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGxkcF9pbml0X3NtYzkxMXgodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbGRwX2luaXRfc21zYzkxMXgodm9pZCkKIHsKIAlpbnQgZXRoX2NzOwogCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CiAJaW50IGV0aF9ncGlvID0gMDsKIAotCWV0aF9jcyA9IExEUF9TTUM5MTFYX0NTOworCWV0aF9jcyA9IExEUF9TTVNDOTExWF9DUzsKIAogCWlmIChncG1jX2NzX3JlcXVlc3QoZXRoX2NzLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxMXhcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQTUMgbWVtIGZvciBzbXNjOTExeFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlsZHBfc21jOTExeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MDsKLQlsZHBfc21jOTExeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZSArIDB4ZmY7CisJbGRwX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgwOworCWxkcF9zbXNjOTExeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZSArIDB4ZmY7CiAJdWRlbGF5KDEwMCk7CiAKLQlldGhfZ3BpbyA9IExEUF9TTUM5MTFYX0dQSU87CisJZXRoX2dwaW8gPSBMRFBfU01TQzkxMVhfR1BJTzsKIAotCWxkcF9zbWM5MTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IE9NQVBfR1BJT19JUlEoZXRoX2dwaW8pOworCWxkcF9zbXNjOTExeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQX0dQSU9fSVJRKGV0aF9ncGlvKTsKIAotCWlmIChncGlvX3JlcXVlc3QoZXRoX2dwaW8sICJzbWM5MTF4IGlycSIpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTExeCBJUlFcbiIsCisJaWYgKGdwaW9fcmVxdWVzdChldGhfZ3BpbywgInNtc2M5MTF4IGlycSIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21zYzkxMXggSVJRXG4iLAogCQkJCWV0aF9ncGlvKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEwNCw3ICsxMTUsNyBAQAogCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwotCWxkcF9pbml0X3NtYzkxMXgoKTsKKwlsZHBfaW5pdF9zbXNjOTExeCgpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgbGRwX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKaW5kZXggYjNmNmU5ZC4uYjFmMjNiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwpAQCAtNTcsNiArNTcsOSBAQAogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKIAorI2RlZmluZSBPVkVST19TTVNDOTExWF9DUyAgICAgIDUKKyNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfR1BJTyAgICAxNzYKKwogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKIApAQCAtMTE2LDYgKzExOSw2NyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvdmVyb19hZHM3ODQ2X2luaXQodm9pZCkgeyByZXR1cm47IH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU01TQzkxMVgpIHx8IGRlZmluZWQoQ09ORklHX1NNU0M5MTFYX01PRFVMRSkKKworI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3Zlcm9fc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJzbXNjOTExeC1tZW1vcnkiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgb3Zlcm9fc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQgLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG92ZXJvX3Ntc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3Zlcm9fc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSAmb3Zlcm9fc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvdmVyb19zbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9zbXNjOTExeCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KE9WRVJPX1NNU0M5MTFYX0NTLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlcXVlc3QgZm9yIEdQTUMgbWVtIGZvciBzbXNjOTExeFxuIik7CisJCXJldHVybjsKKwl9CisKKwlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MDsKKwlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZSArIDB4ZmY7CisKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19TTVNDOTExWF9HUElPLCAiU01TQzkxMVggSVJRIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX2lucHV0KE9WRVJPX1NNU0M5MTFYX0dQSU8pID09IDApKSB7CisJCWdwaW9fZXhwb3J0KE9WRVJPX1NNU0M5MTFYX0dQSU8sIDApOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciBTTVNDOTExWCBJUlFcbiIpOworCQlyZXR1cm47CisJfQorCisJb3Zlcm9fc21zYzkxMXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT01BUF9HUElPX0lSUShPVkVST19TTVNDOTExWF9HUElPKTsKKwlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMV0uZW5kCSAgPSAwOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvdmVyb19zbXNjOTExeF9kZXZpY2UpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvdmVyb19pbml0X3Ntc2M5MTF4KHZvaWQpIHsgcmV0dXJuOyB9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG92ZXJvX25hbmRfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLApAQCAtMjkwLDYgKzM1NCw3IEBACiAJb3Zlcm9fZmxhc2hfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoKTsKIAlvdmVyb19hZHM3ODQ2X2luaXQoKTsKKwlvdmVyb19pbml0X3Ntc2M5MTF4KCk7CiAKIAlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1cyV19OUkVTRVQsCiAJCQkgICJPVkVST19HUElPX1cyV19OUkVTRVQiKSA9PSAwKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCmluZGV4IGY0NjY5OGUuLjYxMTI3NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKQEAgLTM4MCwxNCArMzgwLDQ5IEBACiAJLmdwaW9fYmFzZQk9IE5SX0JVSUxUSU5fR1BJTyArIDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtbXSA9IHsKLQl7Ci0JCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCBhYm92ZSAqLwotCQkuZ3Bpbwk9IE5SX0JVSUxUSU5fR1BJTyArIDEsCi0JfSwgewotCQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KLQkJLmdwaW8JPSAtRU5YSU8sCitzdGF0aWMgaW50IGdwaW9fYnVzX3N3aXRjaDsKKworc3RhdGljIGludCBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfbGluayAqbGluaywKKwkJdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlpZiAoZ3Bpb19idXNfc3dpdGNoIDw9IDApIHsKKwkJaWYgKGZsYWdzID09IFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb19idXNfc3dpdGNoLCAxKTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKGdwaW9fYnVzX3N3aXRjaCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfbGluayAqbGluaykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFncGlvX2J1c19zd2l0Y2gpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KE5SX0JVSUxUSU5fR1BJTyArIDEsICJjYW1lcmEiKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWdwaW9fYnVzX3N3aXRjaCA9IE5SX0JVSUxUSU5fR1BJTyArIDE7CisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19idXNfc3dpdGNoLCAwKTsKKwkJfSBlbHNlCisJCQlncGlvX2J1c19zd2l0Y2ggPSAtRUlOVkFMOworCX0KKworCWlmIChncGlvX2J1c19zd2l0Y2ggPiAwKQorCQlyZXR1cm4gU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfMTA7CisJZWxzZQorCQlyZXR1cm4gU09DQU1fREFUQVdJRFRIXzEwOworfQorCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7CisJLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCisJLnF1ZXJ5X2J1c19wYXJhbSA9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAorCS5zZXRfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAogfTsKIAogLyogQm9hcmQgSTJDIGRldmljZXMuICovCkBAIC0zOTgsMTAgKzQzMywxMCBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICZwY2E5NTM2X2RhdGEsCiAJfSwgewogCQlJMkNfQk9BUkRfSU5GTygibXQ5djAyMiIsIDB4NDgpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMF0sIC8qIFdpdGggZXh0ZW5kZXIgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCiAJfSwgewogCQlJMkNfQk9BUkRfSU5GTygibXQ5bTAwMSIsIDB4NWQpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMF0sIC8qIFdpdGggZXh0ZW5kZXIgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rLCAvKiBXaXRoIGV4dGVuZGVyICovCiAJfSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1BYQTI3eCB8fENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCmluZGV4IGQ2NzY2NjguLjlhYjk0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbWM5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KQEAgLTEyOCwxNCArMTI4LDE1IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZmxhc2hfZGV2aWNlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbWM5MTF4X3BsYXRkYXRhIHJlYWx2aWV3X3NtYzkxMXhfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IFNNQzkxMVhfVVNFXzMyQklULAotCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCwKLQkuaXJxX3BvbGFyaXR5CT0gMSwKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklULAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0hJR0gsCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2V0aF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAorCS5uYW1lCQk9ICJzbXNjOTExeCIsCiAJLmlkCQk9IDAsCiAJLm51bV9yZXNvdXJjZXMJPSAyLAogfTsKQEAgLTE0NSw4ICsxNDYsOCBAQAogCWlmIChuYW1lKQogCQlyZWFsdmlld19ldGhfZGV2aWNlLm5hbWUgPSBuYW1lOwogCXJlYWx2aWV3X2V0aF9kZXZpY2UucmVzb3VyY2UgPSByZXM7Ci0JaWYgKHN0cmNtcChyZWFsdmlld19ldGhfZGV2aWNlLm5hbWUsICJzbWM5MTF4IikgPT0gMCkKLQkJcmVhbHZpZXdfZXRoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZyZWFsdmlld19zbWM5MTF4X3BsYXRkYXRhOworCWlmIChzdHJjbXAocmVhbHZpZXdfZXRoX2RldmljZS5uYW1lLCAic21zYzkxMXgiKSA9PSAwKQorCQlyZWFsdmlld19ldGhfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZzsKIAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2V0aF9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwppbmRleCA2N2Q2ZDljLi5kMGQzOWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJY2xrLT5uYW1lCQk9ICJkdW1teV90aW1lciI7CiAJY2xrLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKIAljbGstPnJhdGluZwkJPSAyMDA7CisJY2xrLT5tdWx0ICAgICAgICAgICAgICAgPSAxOwogCWNsay0+c2V0X21vZGUJCT0gZHVtbXlfdGltZXJfc2V0X21vZGU7CiAJY2xrLT5icm9hZGNhc3QJCT0gc21wX3RpbWVyX2Jyb2FkY2FzdDsKIAljbGstPmNwdW1hc2sJCT0gY3B1bWFza19vZihjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwppbmRleCA5NDA3N2ZiLi42ZjdlNzA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUworKysgYi9hcmNoL2FybS9tbS9hYm9ydC1ldjYuUwpAQCAtMjksMTAgKzI5LDEwIEBACiAJbXJjCXAxNSwgMCwgcjEsIGM1LCBjMCwgMAkJQCBnZXQgRlNSCiAJbXJjCXAxNSwgMCwgcjAsIGM2LCBjMCwgMAkJQCBnZXQgRkFSCiAvKgotICogRmF1bHR5IFNXUCBpbnN0cnVjdGlvbiBvbiAxMTM2IGRvZXNuJ3Qgc2V0IGJpdCAxMSBpbiBERlNSLgorICogRmF1bHR5IFNXUCBpbnN0cnVjdGlvbiBvbiAxMTM2IGRvZXNuJ3Qgc2V0IGJpdCAxMSBpbiBERlNSIChlcnJhdHVtIDMyNjEwMykuCiAgKiBUaGUgdGVzdCBiZWxvdyBjb3ZlcnMgYWxsIHRoZSB3cml0ZSBzaXR1YXRpb25zLCBpbmNsdWRpbmcgSmF2YSBieXRlY29kZXMKICAqLwotCWJpYwlyMSwgcjEsICMxIDw8IDExIHwgMSA8PCAxMAlAIGNsZWFyIGJpdHMgMTEgYW5kIDEwIG9mIEZTUgorCWJpYwlyMSwgcjEsICMxIDw8IDExCQlAIGNsZWFyIGJpdCAxMSBvZiBGU1IKIAl0c3QJcjMsICNQU1JfSl9CSVQJCQlAIEphdmE/CiAJbW92bmUJcGMsIGxyCiAJZG9fdGh1bWJfYWJvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCmluZGV4IGQ2ZGQ4MzguLjZlNzdjMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfYWxsKHZvaWQpCit7CisJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzExLCAwIiA6IDogInIiICgwKSk7Cit9CiAKIC8qCiAgKiBMaW51eCBwcmltaXRpdmVzLgpAQCAtMjU0LDkgKzI1OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBfX2ludmFsaWRhdGVfaWNhY2hlKHZvaWQpCiB7Ci0JaW50IGR1bW15OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDAiIDogIj1yIiAoZHVtbXkpKTsKKwlfX2FzbV9fKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCAwIiA6IDogInIiICgwKSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGludmFsaWRhdGVfYW5kX2Rpc2FibGVfaWNhY2hlKHZvaWQpCkBAIC0zMjEsNiArMzIzLDcgQEAKIAogCQlkID0gZmx1c2hfYW5kX2Rpc2FibGVfZGNhY2hlKCk7CiAJCWkgPSBpbnZhbGlkYXRlX2FuZF9kaXNhYmxlX2ljYWNoZSgpOworCQlsMl9pbnZfYWxsKCk7CiAJCXdyaXRlX2V4dHJhX2ZlYXR1cmVzKHUgfCAweDAwNDAwMDAwKTsKIAkJaWYgKGkpCiAJCQllbmFibGVfaWNhY2hlKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzX2NhbWVyYS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M19jYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ3ZmYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M19jYW1lcmEuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogbXgzX2NhbWVyYS5oIC0gaS5NWDN4IGNhbWVyYSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEd1ZW5uYWRpIExpYWtob3ZldHNraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTVgzX0NBTUVSQV9IXworI2RlZmluZSBfTVgzX0NBTUVSQV9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNkZWZpbmUgTVgzX0NBTUVSQV9DTEtfU1JDCTEKKyNkZWZpbmUgTVgzX0NBTUVSQV9FWFRfVlNZTkMJMgorI2RlZmluZSBNWDNfQ0FNRVJBX0RQCQk0CisjZGVmaW5lIE1YM19DQU1FUkFfUENQCQk4CisjZGVmaW5lIE1YM19DQU1FUkFfSFNQCQkweDEwCisjZGVmaW5lIE1YM19DQU1FUkFfVlNQCQkweDIwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzQJMHg0MAorI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF84CTB4ODAKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTAJMHgxMDAKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUJMHgyMDAKKworI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF9NQVNLIChNWDNfQ0FNRVJBX0RBVEFXSURUSF80IHwgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCB8IFwKKwkJCQkgICBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzE1KQorCisvKioKKyAqIHN0cnVjdCBteDNfY2FtZXJhX3BkYXRhIC0gaS5NWDN4IGNhbWVyYSBwbGF0Zm9ybSBkYXRhCisgKiBAZmxhZ3M6CU1YM19DQU1FUkFfKiBmbGFncworICogQG1jbGtfMTBraHo6CW1hc3RlciBjbG9jayBmcmVxdWVuY3kgaW4gMTBrSHogdW5pdHMKKyAqIEBkbWFfZGV2OglJUFUgRE1BIGRldmljZSB0byBtYXRjaCBhZ2FpbnN0IGluIGNoYW5uZWwgYWxsb2NhdGlvbgorICovCitzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIG1jbGtfMTBraHo7CisJc3RydWN0IGRldmljZSAqZG1hX2RldjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL2VudHJ5LlMgYi9hcmNoL2FybS92ZnAvZW50cnkuUwppbmRleCBiYTU5MmE5Li5hMmJlZDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvZW50cnkuUworKysgYi9hcmNoL2FybS92ZnAvZW50cnkuUwpAQCAtMTUsMTMgKzE1LDE2IEBACiAgKiAgcjEwID0gdGhyZWFkX2luZm8gc3RydWN0dXJlCiAgKiAgbHIgID0gZmFpbHVyZSByZXR1cm4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KKyNpbmNsdWRlICIuLi9rZXJuZWwvZW50cnktaGVhZGVyLlMiCiAKIEVOVFJZKGRvX3ZmcCkKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlhZGQJcjExLCByNCwgIzEJCUAgaW5jcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAllbmFibGVfaXJxCiAgCWxkcglyNCwgLkxDdmZwCiAJbGRyCXIxMSwgW3IxMCwgI1RJX0NQVV0JQCBDUFUgbnVtYmVyCkBAIC0zMCw2ICszMywxMiBAQAogRU5EUFJPQyhkb192ZnApCiAKIEVOVFJZKHZmcF9udWxsX2VudHJ5KQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAltb3YJcGMsIGxyCiBFTkRQUk9DKHZmcF9udWxsX2VudHJ5KQogCkBAIC00MSw2ICs1MCwxMiBAQAogCiAJX19JTklUCiBFTlRSWSh2ZnBfdGVzdGluZ19lbnRyeSkKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWdldF90aHJlYWRfaW5mbwlyMTAKKwlsZHIJcjQsIFtyMTAsICNUSV9QUkVFTVBUXQlAIGdldCBwcmVlbXB0IGNvdW50CisJc3ViCXIxMSwgcjQsICMxCQlAIGRlY3JlbWVudCBpdAorCXN0cglyMTEsIFtyMTAsICNUSV9QUkVFTVBUXQorI2VuZGlmCiAJbGRyCXIwLCBWRlBfYXJjaF9hZGRyZXNzCiAJc3RyCXI1LCBbcjBdCQlAIGtub3duIG5vbi16ZXJvIHZhbHVlCiAJbW92CXBjLCByOQkJCUAgd2UgaGF2ZSBoYW5kbGVkIHRoZSBmYXVsdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCBhNWE0ZTU3Li44M2M0ZTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMTM3LDYgKzEzNywxMiBAQAogCVZGUEZNWFIJRlBFWEMsIHIxCQlAIHJlc3RvcmUgRlBFWEMgbGFzdAogCXN1YglyMiwgcjIsICM0CiAJc3RyCXIyLCBbc3AsICNTX1BDXQkJQCByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24KKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWdldF90aHJlYWRfaW5mbwlyMTAKKwlsZHIJcjQsIFtyMTAsICNUSV9QUkVFTVBUXQlAIGdldCBwcmVlbXB0IGNvdW50CisJc3ViCXIxMSwgcjQsICMxCQlAIGRlY3JlbWVudCBpdAorCXN0cglyMTEsIFtyMTAsICNUSV9QUkVFTVBUXQorI2VuZGlmCiAJbW92CXBjLCByOQkJCUAgd2UgdGhpbmsgd2UgaGF2ZSBoYW5kbGVkIHRoaW5ncwogCiAKQEAgLTE1NSw2ICsxNjEsMTIgQEAKIAlAIG5vdCByZWNvZ25pc2VkIGJ5IFZGUAogCiAJREJHU1RSCSJub3QgVkZQIgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAltb3YJcGMsIGxyCiAKIHByb2Nlc3NfZXhjZXB0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCmluZGV4IDc1NDU3YjMuLjAxNTk5YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCQkgKiBvbiBWRlAgc3ViYXJjaCAxLgogCQkgKi8KIAkJIHZmcF9yYWlzZV9leGNlcHRpb25zKFZGUF9FWENFUFRJT05fRVJST1IsIHRyaWdnZXIsIGZwc2NyLCByZWdzKTsKLQkJIHJldHVybjsKKwkJZ290byBleGl0OwogCX0KIAogCS8qCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkgKiB0aGUgRlBFWEMuRlAyViBiaXQgaXMgdmFsaWQgb25seSBpZiBGUEVYQy5FWCBpcyAxLgogCSAqLwogCWlmIChmcGV4YyBeIChGUEVYQ19FWCB8IEZQRVhDX0ZQMlYpKQotCQlyZXR1cm47CisJCWdvdG8gZXhpdDsKIAogCS8qCiAJICogVGhlIGJhcnJpZXIoKSBoZXJlIHByZXZlbnRzIGZwaW5zdDIgYmVpbmcgcmVhZApAQCAtMzEwLDYgKzMxMCw4IEBACiAJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKHRyaWdnZXIsIG9yaWdfZnBzY3IsIHJlZ3MpOwogCWlmIChleGNlcHRpb25zKQogCQl2ZnBfcmFpc2VfZXhjZXB0aW9ucyhleGNlcHRpb25zLCB0cmlnZ2VyLCBvcmlnX2Zwc2NyLCByZWdzKTsKKyBleGl0OgorCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZmcF9lbmFibGUodm9pZCAqdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQzYWU1NTUuLjFiYmUxZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IGNlNGU0MjkuLjYyZDRhYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTI1MCwyMSArMjUwLDMgQEAKIAlkdW1wX2R0bGIoKTsKIAlkaWUoIkJ1cyBFcnJvciIsIHJlZ3MsIFNJR0tJTEwpOwogfQotCi0vKgotICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IGJlY2F1c2UKLSAqIHdlJ3JlIHVzaW5nIHNlZ21lbnRhdGlvbiB0byBlbnN1cmUgYSBmaXhlZCBtYXBwaW5nIG9mIHRoZSBrZXJuZWwKLSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KLSAqCi0gKiBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcywgYnV0IGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8KLSAqIGRpc2FibGUgc2VnbWVudGF0aW9uIGF0IHN0YXJ0dXAgYW5kIGxvYWQgdGhlIGtlcm5lbCBtYXBwaW5ncyBpbnRvCi0gKiB0aGUgVExCIGxpa2UgYW55IG90aGVyIHBhZ2VzLiBUaGVyZSB3aWxsIGJlIGxvdHMgb2YgdHJpY2tlcnkgdG8KLSAqIGF2b2lkIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG9mIHRoZSBUTEIgbWlzcyBoYW5kbGVyLCB0aG91Z2guLi4KLSAqLwotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLXZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKQotewotCi19Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9tYXBfcGFnZXMpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzNlMmU4OS4uZjQ5NDI3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiB9CiAKIGludAotY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkgICAgdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9zcmFtLWFsbG9jLmMgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwppbmRleCA4MzRjYWI3Li41MzBkMTM5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYworKysgYi9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYwpAQCAtODU0LDcgKzg1NCw2IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInVuYWJsZSB0byBjcmVhdGUgL3Byb2Mvc3JhbVxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JcHRyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXB0ci0+cmVhZF9wcm9jID0gc3JhbV9wcm9jX3JlYWQ7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGJkOWIzZmYuLmM0YzY5Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAqLwogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggYzY4NWJhNC4uMmI3M2M3YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTI2MSw3ICsyNjEsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMiAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGNlZDViNzIuLjEyMGU3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IDlkYWMxNzMuLmY1OWE5NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNjUsNyArNjUsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX2lwaSAgPSB7CiAJLmhhbmRsZXIgPSBjcmlzdjMyX2lwaV9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiaXBpIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKaW5kZXggM2ExM2RkNi4uNjU2MzNkMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKQEAgLTI2Nyw3ICsyNjcsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxX3RpbWVyID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmgKaW5kZXggMGQ1NzA5Yi4uMTI5NzU2YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvc3BpbmxvY2suaApAQCAtMTIxLDYgKzEyMSw4IEBACiAJcmV0dXJuIDE7CiB9CiAKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX3Jhd193cml0ZV9sb2NrKGxvY2spCiAKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2MDgxNmU4Li40ZGYwYjMyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRfdGFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5MS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKaW5kZXggOWUzOGY5OS4uNGRkOWFkYSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMKQEAgLTEwOSwyOCArMTA5LDI0IEBACiAJWzBdID0gewogCQkuaGFuZGxlcgk9IGZwZ2FfaW50ZXJydXB0LAogCQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCQkubmFtZQkJPSAiZnBnYS4wIiwKIAkJLmRldl9pZAkJPSAodm9pZCAqKSAweDAwMjhVTCwKIAl9LAogCVsxXSA9IHsKIAkJLmhhbmRsZXIJPSBmcGdhX2ludGVycnVwdCwKIAkJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gImZwZ2EuMSIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgMHgwMDUwVUwsCiAJfSwKIAlbMl0gPSB7CiAJCS5oYW5kbGVyCT0gZnBnYV9pbnRlcnJ1cHQsCiAJCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCi0JCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJCS5uYW1lCQk9ICJmcGdhLjIiLAogCQkuZGV2X2lkCQk9ICh2b2lkICopIDB4MWMwMFVMLAogCX0sCiAJWzNdID0gewogCQkuaGFuZGxlcgk9IGZwZ2FfaW50ZXJydXB0LAogCQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCQkubmFtZQkJPSAiZnBnYS4zIiwKIAkJLmRldl9pZAkJPSAodm9pZCAqKSAweDYzODZVTCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCmluZGV4IDNjMjc1MmMuLmU0NTIwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCkBAIC0xMDgsNyArMTA4LDYgQEAKIAlbMF0gPSB7CiAJCS5oYW5kbGVyCT0gZnBnYV9pbnRlcnJ1cHQsCiAJCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAotCQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogCQkubmFtZQkJPSAiZnBnYS4wIiwKIAkJLmRldl9pZAkJPSAodm9pZCAqKSAweDA3MDBVTCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTM0OTMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCmluZGV4IDc3NTRjNzMuLmJhNTVlY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jCkBAIC0xMjAsMTQgKzEyMCwxMiBAQAogCVswXSA9IHsKIAkJLmhhbmRsZXIJPSBtYjkzNDkzX2ludGVycnVwdCwKIAkJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gIm1iOTM0OTMuMCIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgX19hZGRyX01COTM0OTNfSVFTUigwKSwKIAl9LAogCVsxXSA9IHsKIAkJLmhhbmRsZXIJPSBtYjkzNDkzX2ludGVycnVwdCwKIAkJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKLQkJLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkJLm5hbWUJCT0gIm1iOTM0OTMuMSIsCiAJCS5kZXZfaWQJCT0gKHZvaWQgKikgX19hZGRyX01COTM0OTNfSVFTUigxKSwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5NTgzYTMzLi4wZGU1MGRmIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogLyoKICAqIHNldCB1cCB0aGUga2VybmVsIHN0YWNrIGFuZCBleGNlcHRpb24gZnJhbWVzIGZvciBhIG5ldyBwcm9jZXNzCiAgKi8KLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkJdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3RpbWUuYyBiL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKaW5kZXggNjlmNmE0ZS4uZmIwY2U3NSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCkBAIC00NSw3ICs0NSw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnEgID0gewogCS5oYW5kbGVyID0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhOGVmNjU0Li5lMmYzM2QwIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCQkgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvaXR1LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwppbmRleCBkMWM5MjY1Li40ODgzYmE3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci9pdHUuYwpAQCAtNjAsNyArNjAsNiBAQAogCS5uYW1lCQk9ICJpdHUiLAogCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLQkubWFzawkJPSBDUFVfTUFTS19OT05FLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGRpdmlkZV9yYXRlW10gPSB7MSwgMiwgNCwgOH07CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMgYi9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90aW1lcjE2LmMKaW5kZXggZTE0MjcxYi4uMDQyZGJiNSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXIxNi5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyMTYuYwpAQCAtNTUsNyArNTUsNiBAQAogCS5uYW1lCQk9ICJ0aW1lci0xNiIsCiAJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsxLCAyLCA0LCA4fTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RpbWVyOC5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKaW5kZXggMDU1NmQ3Yy4uMzhiZTBjYSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdGltZXI4LmMKQEAgLTc1LDcgKzc1LDYgQEAKIAkubmFtZQkJPSAidGltZXItOCIsCiAJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHs4LCA2NCwgODE5Mn07CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lci90cHUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCmluZGV4IDc5YWUxZGIuLmU3YzZlNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jCkBAIC02NSw3ICs2NSw2IEBACiAJLm5hbWUJCT0gInRwdSIsCiAJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKaW5kZXggYTEwOWRiMy4uNzU2NDU0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKQEAgLTE5Myw3ICsxOTMsNiBAQAogQ09ORklHX05SX1FVSUNLPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19NTVVfTk9USUZJRVI9eQogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTQxNiw4ICs0MTUsNiBAQAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfWFA9bQogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19TR0lfR1JVPW0KLSMgQ09ORklHX1NHSV9HUlVfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUgYi9hcmNoL2lhNjQvZGlnL01ha2VmaWxlCmluZGV4IDVjMDI4MzguLjJmN2NhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2RpZy9NYWtlZmlsZQpAQCAtNyw4ICs3LDggQEAKIAogb2JqLXkgOj0gc2V0dXAubwogaWZlcSAoJChDT05GSUdfRE1BUiksIHkpCi1vYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8gbWFjaHZlY192dGQubyBkaWdfdnRkX2lvbW11Lm8KK29iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpICs9IG1hY2h2ZWMubyBtYWNodmVjX3Z0ZC5vCiBlbHNlCiBvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8KIGVuZGlmCi1vYmotJChDT05GSUdfSUE2NF9ESUdfVlREKSArPSBkaWdfdnRkX2lvbW11Lm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMgYi9hcmNoL2lhNjQvZGlnL2RpZ192dGRfaW9tbXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4YTA3OS4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvZGlnL2RpZ192dGRfaW9tbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+Ci0KLXZvaWQgKgotdnRkX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCi0JCSBnZnBfdCBmbGFncykKLXsKLQlyZXR1cm4gaW50ZWxfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfYWxsb2NfY29oZXJlbnQpOwotCi12b2lkCi12dGRfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKLQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlpbnRlbF9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX2ZyZWVfY29oZXJlbnQpOwotCi1kbWFfYWRkcl90Ci12dGRfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXJldHVybiBpbnRlbF9tYXBfc2luZ2xlKGRldiwgKHBoeXNfYWRkcl90KWFkZHIsIHNpemUsIGRpcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfbWFwX3NpbmdsZV9hdHRycyk7Ci0KLXZvaWQKLXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAotCQkgICAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaW50ZWxfdW5tYXBfc2luZ2xlKGRldiwgaW92YSwgc2l6ZSwgZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMpOwotCi1pbnQKLXZ0ZF9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JcmV0dXJuIGludGVsX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfbWFwX3NnX2F0dHJzKTsKLQotdm9pZAotdnRkX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgIGludCBuZW50cywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaW50ZWxfdW5tYXBfc2coZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX3VubWFwX3NnX2F0dHJzKTsKLQotaW50Ci12dGRfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX2RtYV9tYXBwaW5nX2Vycm9yKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKaW5kZXggMjc2OWRiZi4uZTRhODBkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKQEAgLTEzLDQ5ICsxMywzNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgc2JhX2RtYV9vcHMsIHN3aW90bGJfZG1hX29wczsKKwogLyogc3dpb3RsYiBkZWNsYXJhdGlvbnMgJiBkZWZpbml0aW9uczogKi8KIGV4dGVybiBpbnQgc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBzaXplKTsKIAotLyogaHdpb21tdSBkZWNsYXJhdGlvbnMgJiBkZWZpbml0aW9uczogKi8KLQotZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXNiYV9hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJc2JhX21hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXNiYV91bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCXNiYV91bm1hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCXNiYV9kbWFfc3VwcG9ydGVkOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJc2JhX2RtYV9tYXBwaW5nX2Vycm9yOwotCi0jZGVmaW5lIGh3aW9tbXVfYWxsb2NfY29oZXJlbnQJCXNiYV9hbGxvY19jb2hlcmVudAotI2RlZmluZSBod2lvbW11X2ZyZWVfY29oZXJlbnQJCXNiYV9mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIGh3aW9tbXVfbWFwX3NpbmdsZV9hdHRycwlzYmFfbWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBod2lvbW11X3VubWFwX3NpbmdsZV9hdHRycwlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIGh3aW9tbXVfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIGh3aW9tbXVfdW5tYXBfc2dfYXR0cnMJCXNiYV91bm1hcF9zZ19hdHRycwotI2RlZmluZSBod2lvbW11X2RtYV9zdXBwb3J0ZWQJCXNiYV9kbWFfc3VwcG9ydGVkCi0jZGVmaW5lIGh3aW9tbXVfZG1hX21hcHBpbmdfZXJyb3IJc2JhX2RtYV9tYXBwaW5nX2Vycm9yCi0jZGVmaW5lIGh3aW9tbXVfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQotI2RlZmluZSBod2lvbW11X3N5bmNfc2dfZm9yX2NwdQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgaHdpb21tdV9zeW5jX3NnX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zZwotCi0KIC8qCiAgKiBOb3RlOiB3ZSBuZWVkIHRvIG1ha2UgdGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBvciBub3QgdG8gdXNlCiAgKiB0aGUgc3cgSS9PIFRMQiBiYXNlZCBwdXJlbHkgb24gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICBBbnl0aGluZyBlbHNlCiAgKiB3b3VsZCBiZSB1bnJlbGlhYmxlIG9yIHdvdWxkIGJlIHRvbyBpbnRydXNpdmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci11c2Vfc3dpb3RsYiAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgdXNlX3N3aW90bGIoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBkZXYgJiYgZGV2LT5kbWFfbWFzayAmJiAhaHdpb21tdV9kbWFfc3VwcG9ydGVkKGRldiwgKmRldi0+ZG1hX21hc2spOworCXJldHVybiBkZXYgJiYgZGV2LT5kbWFfbWFzayAmJgorCQkhc2JhX2RtYV9vcHMuZG1hX3N1cHBvcnRlZChkZXYsICpkZXYtPmRtYV9tYXNrKTsKIH0KIAorc3RydWN0IGRtYV9tYXBfb3BzICpod3N3X2RtYV9nZXRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAodXNlX3N3aW90bGIoZGV2KSkKKwkJcmV0dXJuICZzd2lvdGxiX2RtYV9vcHM7CisJcmV0dXJuICZzYmFfZG1hX29wczsKK30KK0VYUE9SVF9TWU1CT0woaHdzd19kbWFfZ2V0X29wcyk7CisKIHZvaWQgX19pbml0CiBod3N3X2luaXQgKHZvaWQpCiB7CkBAIC03MSwxMjUgKzU2LDMgQEAKICNlbmRpZgogCX0KIH0KLQotdm9pZCAqCi1od3N3X2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFncyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWdzKTsKLX0KLQotdm9pZAotaHdzd19mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Ci0JZWxzZQotCQlod2lvbW11X2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0KLWRtYV9hZGRyX3QKLWh3c3dfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyLAotCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXJldHVybiBzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoZGV2LCBhZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X21hcF9zaW5nbGVfYXR0cnMoZGV2LCBhZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKLX0KLUVYUE9SVF9TWU1CT0woaHdzd19tYXBfc2luZ2xlX2F0dHJzKTsKLQotdm9pZAotaHdzd191bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAotCQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlyZXR1cm4gc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBpb3ZhLCBzaXplLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X3VubWFwX3NpbmdsZV9hdHRycyhkZXYsIGlvdmEsIHNpemUsIGRpciwgYXR0cnMpOwotfQotRVhQT1JUX1NZTUJPTChod3N3X3VubWFwX3NpbmdsZV9hdHRycyk7Ci0KLWludAotaHdzd19tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfbWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV9tYXBfc2dfYXR0cnMoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIsIGF0dHJzKTsKLX0KLUVYUE9SVF9TWU1CT0woaHdzd19tYXBfc2dfYXR0cnMpOwotCi12b2lkCi1od3N3X3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfdW5tYXBfc2dfYXR0cnMoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X3VubWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGh3c3dfdW5tYXBfc2dfYXR0cnMpOwotCi12b2lkCi1od3N3X3N5bmNfc2luZ2xlX2Zvcl9jcHUgKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKLQllbHNlCi0JCWh3aW9tbXVfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGFkZHIsIHNpemUsIGRpcik7Ci19Ci0KLXZvaWQKLWh3c3dfc3luY19zZ19mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGludCBkaXIpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXN3aW90bGJfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbGVtcywgZGlyKTsKLQllbHNlCi0JCWh3aW9tbXVfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbGVtcywgZGlyKTsKLX0KLQotdm9pZAotaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGFkZHIsIHNpemUsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwotfQotCi12b2lkCi1od3N3X3N5bmNfc2dfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci19Ci0KLWludAotaHdzd19kbWFfc3VwcG9ydGVkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCWlmIChod2lvbW11X2RtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIHN3aW90bGJfZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwotfQotCi1pbnQKLWh3c3dfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiBod2lvbW11X2RtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpIHx8Ci0JCXN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaHdzd19kbWFfbWFwcGluZ19lcnJvcik7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfZG1hX3N1cHBvcnRlZCk7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfYWxsb2NfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChod3N3X2ZyZWVfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2luZ2xlX2Zvcl9jcHUpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2dfZm9yX2NwdSk7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDZkNWU2YzUuLjU2Y2ViNjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPiAgICAgICAgIC8qIGh3ZWlnaHQ2NCgpICovCiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4JCS8qIGlhNjRfZ2V0X2l0YygpICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC05MDgsMTEgKzkwOSwxMyBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLWRtYV9hZGRyX3QKLXNiYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIsCi0JCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgZG1hX2FkZHJfdCBzYmFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBvZmYsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgaW9jICppb2M7CisJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIHBvZmY7CiAJZG1hX2FkZHJfdCBpb3ZwOwogCWRtYV9hZGRyX3Qgb2Zmc2V0OwogCXU2NCAqcGRpcl9zdGFydDsKQEAgLTk5MCw3ICs5OTMsMTQgQEAKICNlbmRpZgogCXJldHVybiBTQkFfSU9WQShpb2MsIGlvdnAsIG9mZnNldCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNiYV9tYXBfc2luZ2xlX2F0dHJzKTsKKworc3RhdGljIGRtYV9hZGRyX3Qgc2JhX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlyZXR1cm4gc2JhX21hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGFkZHIpLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLLCBzaXplLCBkaXIsIGF0dHJzKTsKK30KIAogI2lmZGVmIEVOQUJMRV9NQVJLX0NMRUFOCiBzdGF0aWMgU0JBX0lOTElORSB2b2lkCkBAIC0xMDI2LDggKzEwMzYsOCBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgc2JhX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgc2l6ZV90IHNpemUsCi0JCQkgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgdm9pZCBzYmFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb2MgKmlvYzsKICNpZiBERUxBWUVEX1JFU09VUkNFX0NOVCA+IDAKQEAgLTEwOTQsNyArMTEwNCwxMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKICNlbmRpZiAvKiBERUxBWUVEX1JFU09VUkNFX0NOVCA9PSAwICovCiB9Ci1FWFBPUlRfU1lNQk9MKHNiYV91bm1hcF9zaW5nbGVfYXR0cnMpOworCit2b2lkIHNiYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc2JhX3VubWFwX3BhZ2UoZGV2LCBpb3ZhLCBzaXplLCBkaXIsIGF0dHJzKTsKK30KIAogLyoqCiAgKiBzYmFfYWxsb2NfY29oZXJlbnQgLSBhbGxvY2F0ZS9tYXAgc2hhcmVkIG1lbSBmb3IgRE1BCkBAIC0xMTA0LDcgKzExMTksNyBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgKgorc3RhdGljIHZvaWQgKgogc2JhX2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3QgaW9jICppb2M7CkBAIC0xMTY3LDcgKzExODIsOCBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgc2JhX2ZyZWVfY29oZXJlbnQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCitzdGF0aWMgdm9pZCBzYmFfZnJlZV9jb2hlcmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXNiYV91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCAwLCBOVUxMKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSB2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKQEAgLTE0MjIsOCArMTQzOCw5IEBACiAgKgogICogU2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKICAqLwotaW50IHNiYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIGludCBzYmFfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvYyAqaW9jOwogCWludCBjb2FsZXNjZWQsIGZpbGxlZCA9IDA7CkBAIC0xNTAyLDcgKzE1MTksNiBAQAogCiAJcmV0dXJuIGZpbGxlZDsKIH0KLUVYUE9SVF9TWU1CT0woc2JhX21hcF9zZ19hdHRycyk7CiAKIC8qKgogICogc2JhX3VubWFwX3NnX2F0dHJzIC0gdW5tYXAgU2NhdHRlci9HYXRoZXIgbGlzdApAQCAtMTUxNCw4ICsxNTMwLDkgQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi12b2lkIHNiYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJaW50IG5lbnRzLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyB2b2lkIHNiYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogI2lmZGVmIEFTU0VSVF9QRElSX1NBTklUWQogCXN0cnVjdCBpb2MgKmlvYzsKQEAgLTE1NTEsNyArMTU2OCw2IEBACiAjZW5kaWYKIAogfQotRVhQT1JUX1NZTUJPTChzYmFfdW5tYXBfc2dfYXR0cnMpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKQEAgLTIwNjQsNiArMjA4MCw4IEBACiAJfSwKIH07CiAKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzOworCiBzdGF0aWMgaW50IF9faW5pdAogc2JhX2luaXQodm9pZCkKIHsKQEAgLTIwNzcsNiArMjA5NSw3IEBACiAJICogYSBzdWNjZXNzZnVsIGtkdW1wIGtlcm5lbCBib290IGlzIHRvIHVzZSB0aGUgc3dpb3RsYi4KIAkgKi8KIAlpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHsKKwkJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CiAJCWlmIChzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSg2NCAqICgxPDwyMCkpICE9IDApCiAJCQlwYW5pYygiVW5hYmxlIHRvIGluaXRpYWxpemUgc29mdHdhcmUgSS9PIFRMQjoiCiAJCQkJICAiIFRyeSBtYWNodmVjPWRpZyBib290IG9wdGlvbiIpOwpAQCAtMjA5Miw2ICsyMTExLDcgQEAKIAkJICogSWYgd2UgZGlkbid0IGZpbmQgc29tZXRoaW5nIHNiYV9pb21tdSBjYW4gY2xhaW0sIHdlCiAJCSAqIG5lZWQgdG8gc2V0dXAgdGhlIHN3aW90bGIgYW5kIHN3aXRjaCB0byB0aGUgZGlnIG1hY2h2ZWMuCiAJCSAqLworCQlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29wczsKIAkJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSkgIT0gMCkKIAkJCXBhbmljKCJVbmFibGUgdG8gZmluZCBTQkEgSU9NTVUgb3IgaW5pdGlhbGl6ZSAiCiAJCQkgICAgICAic29mdHdhcmUgSS9PIFRMQjogVHJ5IG1hY2h2ZWM9ZGlnIGJvb3Qgb3B0aW9uIik7CkBAIC0yMTM4LDE1ICsyMTU4LDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKLWludAotc2JhX2RtYV9zdXBwb3J0ZWQgKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCitzdGF0aWMgaW50IHNiYV9kbWFfc3VwcG9ydGVkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewogCS8qIG1ha2Ugc3VyZSBpdCdzIGF0IGxlYXN0IDMyYml0IGNhcGFibGUgKi8KIAlyZXR1cm4gKChtYXNrICYgMHhGRkZGRkZGRlVMKSA9PSAweEZGRkZGRkZGVUwpOwogfQogCi1pbnQKLXNiYV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCitzdGF0aWMgaW50IHNiYV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc2LDcgKzIxOTQsMjIgQEAKIAogX19zZXR1cCgic2JhcGFnZXNpemU9IixzYmFfcGFnZV9vdmVycmlkZSk7CiAKLUVYUE9SVF9TWU1CT0woc2JhX2RtYV9tYXBwaW5nX2Vycm9yKTsKLUVYUE9SVF9TWU1CT0woc2JhX2RtYV9zdXBwb3J0ZWQpOwotRVhQT1JUX1NZTUJPTChzYmFfYWxsb2NfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChzYmFfZnJlZV9jb2hlcmVudCk7CitzdHJ1Y3QgZG1hX21hcF9vcHMgc2JhX2RtYV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CQk9IHNiYV9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAkJPSBzYmFfZnJlZV9jb2hlcmVudCwKKwkubWFwX3BhZ2UJCT0gc2JhX21hcF9wYWdlLAorCS51bm1hcF9wYWdlCQk9IHNiYV91bm1hcF9wYWdlLAorCS5tYXBfc2cJCQk9IHNiYV9tYXBfc2dfYXR0cnMsCisJLnVubWFwX3NnCQk9IHNiYV91bm1hcF9zZ19hdHRycywKKwkuc3luY19zaW5nbGVfZm9yX2NwdQk9IG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlLAorCS5zeW5jX3NnX2Zvcl9jcHUJPSBtYWNodmVjX2RtYV9zeW5jX3NnLAorCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCT0gbWFjaHZlY19kbWFfc3luY19zaW5nbGUsCisJLnN5bmNfc2dfZm9yX2RldmljZQk9IG1hY2h2ZWNfZG1hX3N5bmNfc2csCisJLmRtYV9zdXBwb3J0ZWQJCT0gc2JhX2RtYV9zdXBwb3J0ZWQsCisJLm1hcHBpbmdfZXJyb3IJCT0gc2JhX2RtYV9tYXBwaW5nX2Vycm9yLAorfTsKKwordm9pZCBzYmFfZG1hX2luaXQodm9pZCkKK3sKKwlkbWFfb3BzID0gJnNiYV9kbWFfb3BzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKaW5kZXggMjRiMWFkNS4uMmJlZjUyNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYworKysgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KQEAgLTg0OCwzOCArODQ5LDM2IEBACiAgKiAvcHJvYyBmcyByb3V0aW5lcy4uLi4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBsaW5lX2luZm8oY2hhciAqYnVmLCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlICpzdGF0ZSkKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZDogdWFydDolcyBwb3J0OiVsWCBpcnE6JWRcbiIsCisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgcG9ydDolbFggaXJxOiVkXG4iLAogCQkgICAgICAgc3RhdGUtPmxpbmUsIHVhcnRfY29uZmlnW3N0YXRlLT50eXBlXS5uYW1lLAogCQkgICAgICAgc3RhdGUtPnBvcnQsIHN0YXRlLT5pcnEpOwogfQogCi1zdGF0aWMgaW50IHJzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHJzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGksIGxlbiA9IDAsIGw7Ci0Jb2ZmX3QJYmVnaW4gPSAwOworCWludCBpOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInNpbXNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgc2VyaWFsX3ZlcnNpb24pOwotCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUyAmJiBsZW4gPCA0MDAwOyBpKyspIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCAmcnNfdGFibGVbaV0pOwotCQlsZW4gKz0gbDsKLQkJaWYgKGxlbitiZWdpbiA+IG9mZitjb3VudCkKLQkJCWdvdG8gZG9uZTsKLQkJaWYgKGxlbitiZWdpbiA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuOwotCQkJbGVuID0gMDsKLQkJfQotCX0KLQkqZW9mID0gMTsKLWRvbmU6Ci0JaWYgKG9mZiA+PSBsZW4rYmVnaW4pCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyAoYmVnaW4tb2ZmKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbi1vZmYpID8gY291bnQgOiBiZWdpbitsZW4tb2ZmKTsKKwlzZXFfcHJpbnRmKG0sICJzaW1zZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfUE9SVFM7IGkrKykKKwkJbGluZV9pbmZvKG0sICZyc190YWJsZVtpXSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcnNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCByc19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHJzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogcnNfaW5pdCgpIGFuZCBmcmllbmRzCkBAIC05MTcsNyArOTE2LDcgQEAKIAkuc3RhcnQgPSByc19zdGFydCwKIAkuaGFuZ3VwID0gcnNfaGFuZ3VwLAogCS53YWl0X3VudGlsX3NlbnQgPSByc193YWl0X3VudGlsX3NlbnQsCi0JLnJlYWRfcHJvYyA9IHJzX3JlYWRfcHJvYywKKwkucHJvY19mb3BzID0gJnJzX3Byb2NfZm9wcywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDFmOTEyZDkuLjM2YzAwMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xMSw5OSArMTEsMTI4IEBACiAKICNkZWZpbmUgQVJDSF9IQVNfRE1BX0dFVF9SRVFVSVJFRF9NQVNLCiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgewotCWludCAgICAgICAgICAgICAoKm1hcHBpbmdfZXJyb3IpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJIGRtYV9hZGRyX3QgZG1hX2FkZHIpOwotCXZvaWQqICAgICAgICAgICAoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7Ci0Jdm9pZCAgICAgICAgICAgICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLQlkbWFfYWRkcl90ICAgICAgKCptYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdW5zaWduZWQgbG9uZyBwdHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKmRtYV9zdXBwb3J0ZWRfb3ApKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci0JaW50CQlpc19waHlzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzOwogZXh0ZXJuIHN0cnVjdCBpYTY0X21hY2hpbmVfdmVjdG9yIGlhNjRfbXY7CiBleHRlcm4gdm9pZCBzZXRfaW9tbXVfbWFjaHZlYyh2b2lkKTsKIAotI2RlZmluZSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIGdmcCkJXAotCXBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGhhbmRsZSwgKGdmcCkgfCBHRlBfRE1BKQorZXh0ZXJuIHZvaWQgbWFjaHZlY19kbWFfc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCisJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIG1hY2h2ZWNfZG1hX3N5bmNfc2coc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKIAotLyogY29oZXJlbnQgbWVtLiBpcyBjaGVhcCAqLwotc3RhdGljIGlubGluZSB2b2lkICoKLWRtYV9hbGxvY19ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAotCQkgICAgICBnZnBfdCBmbGFnKQorc3RhdGljIGlubGluZSB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgZG1hX2FkZHJfdCAqZGFkZHIsIGdmcF90IGdmcCkKIHsKLQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZGFkZHIsIGdmcCk7CiB9Ci0jZGVmaW5lIGRtYV9mcmVlX2NvaGVyZW50CXBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50Ci1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAotCQkgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKLX0KLSNkZWZpbmUgZG1hX21hcF9zaW5nbGVfYXR0cnMJcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMKLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAotCQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcikKLXsKLQlyZXR1cm4gZG1hX21hcF9zaW5nbGVfYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKLX0KLSNkZWZpbmUgZG1hX21hcF9zZ19hdHRycwlwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCi1zdGF0aWMgaW5saW5lIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkgICAgIGludCBuZW50cywgaW50IGRpcikKLXsKLQlyZXR1cm4gZG1hX21hcF9zZ19hdHRycyhkZXYsIHNnbCwgbmVudHMsIGRpciwgTlVMTCk7Ci19Ci0jZGVmaW5lIGRtYV91bm1hcF9zaW5nbGVfYXR0cnMJcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGNwdV9hZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKLXsKLQlyZXR1cm4gZG1hX3VubWFwX3NpbmdsZV9hdHRycyhkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotI2RlZmluZSBkbWFfdW5tYXBfc2dfYXR0cnMJcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCi1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQkJaW50IG5lbnRzLCBpbnQgZGlyKQotewotCXJldHVybiBkbWFfdW5tYXBfc2dfYXR0cnMoZGV2LCBzZ2wsIG5lbnRzLCBkaXIsIE5VTEwpOwotfQotI2RlZmluZSBkbWFfc3luY19zaW5nbGVfZm9yX2NwdQlwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQotI2RlZmluZSBkbWFfc3luY19zZ19mb3JfY3B1CXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUKLSNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UKLSNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2RldmljZQlwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCi0jZGVmaW5lIGRtYV9tYXBwaW5nX2Vycm9yCXBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCiAKLSNkZWZpbmUgZG1hX21hcF9wYWdlKGRldiwgcGcsIG9mZiwgc2l6ZSwgZGlyKQkJCQlcCi0JZG1hX21hcF9zaW5nbGUoZGV2LCBwYWdlX2FkZHJlc3MocGcpICsgKG9mZiksIChzaXplKSwgKGRpcikpCi0jZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgZG1hX2FkZHIsIHNpemUsIGRpcikJCQlcCi0JZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIHZvaWQgKmNhZGRyLCBkbWFfYWRkcl90IGRhZGRyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjYWRkciwgZGFkZHIpOworfQorCisjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKyNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdm9pZCAqY2FkZHIsIHNpemVfdCBzaXplLAorCQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5tYXBfcGFnZShkZXYsIHZpcnRfdG9fcGFnZShjYWRkciksCisJCQkgICAgICh1bnNpZ25lZCBsb25nKWNhZGRyICYgflBBR0VfTUFTSywgc2l6ZSwKKwkJCSAgICAgZGlyLCBhdHRycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkciwKKwkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+dW5tYXBfcGFnZShkZXYsIGRhZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKK30KKworI2RlZmluZSBkbWFfbWFwX3NpbmdsZShkLCBhLCBzLCByKSBkbWFfbWFwX3NpbmdsZV9hdHRycyhkLCBhLCBzLCByLCBOVUxMKQorI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGQsIGEsIHMsIHIpIGRtYV91bm1hcF9zaW5nbGVfYXR0cnMoZCwgYSwgcywgciwgTlVMTCkKKworc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5tYXBfc2coZGV2LCBzZ2wsIG5lbnRzLCBkaXIsIGF0dHJzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+dW5tYXBfc2coZGV2LCBzZ2wsIG5lbnRzLCBkaXIsIGF0dHJzKTsKK30KKworI2RlZmluZSBkbWFfbWFwX3NnKGQsIHMsIG4sIHIpIGRtYV9tYXBfc2dfYXR0cnMoZCwgcywgbiwgciwgTlVMTCkKKyNkZWZpbmUgZG1hX3VubWFwX3NnKGQsIHMsIG4sIHIpIGRtYV91bm1hcF9zZ19hdHRycyhkLCBzLCBuLCByLCBOVUxMKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRhZGRyLAorCQkJCQkgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkYWRkciwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCQkgICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+c3luY19zZ19mb3JfY3B1KGRldiwgc2dsLCBuZW50cywgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCBkYWRkciwKKwkJCQkJICAgICAgc2l6ZV90IHNpemUsCisJCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZGFkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCQkJICBpbnQgbmVudHMsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnN5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnbCwgbmVudHMsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+bWFwcGluZ19lcnJvcihkZXYsIGRhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+bWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpciwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3VubWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcik7Cit9CiAKIC8qCiAgKiBSZXN0IG9mIHRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSAiQWR2YW5jZWQgRE1BIEFQSSIuICBVc2UgYXQgeW91ciBvd24gcmlzay4KQEAgLTExNSw3ICsxNDQsMTEgQEAKICNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsIHNpemUsIGRpcikJXAogCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKQogCi0jZGVmaW5lIGRtYV9zdXBwb3J0ZWQJCXBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+ZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOworfQogCiBzdGF0aWMgaW5saW5lIGludAogZG1hX3NldF9tYXNrIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQpAQCAtMTQxLDExICsxNzQsNCBAQAogCiAjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpCSgxKQkvKiBhbGwgd2UgZG8gaXMgY29oZXJlbnQgbWVtb3J5Li4uICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZ2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBkbWFfb3BzOwotfQotCi0KLQogI2VuZGlmIC8qIF9BU01fSUE2NF9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAppbmRleCBjNDc4MzBlLi4xMTFlZDUyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKQEAgLTIwMiw3ICsyMDIsMTEgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2RlZmluZSBJQTY0X0lOVFJJTlNJQ19BUEkobmFtZSkJcHZfY3B1X29wcy5uYW1lCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorIyBkZWZpbmUgSUE2NF9JTlRSSU5TSUNfQVBJKG5hbWUpCXBhcmF2aXJ0XyAjIyBuYW1lCisjZWxzZQorIyBkZWZpbmUgSUE2NF9JTlRSSU5TSUNfQVBJKG5hbWUpCXB2X2NwdV9vcHMubmFtZQorI2VuZGlmCiAjZGVmaW5lIElBNjRfSU5UUklOU0lDX01BQ1JPKG5hbWUpCXBhcmF2aXJ0XyAjIyBuYW1lCiAjZWxzZQogI2RlZmluZSBJQTY0X0lOVFJJTlNJQ19BUEkobmFtZSkJaWE2NF9uYXRpdmVfICMjIG5hbWUKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGZlODdiMjEuLjM2N2QyOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbnM6ICovCiBzdHJ1Y3QgZGV2aWNlOwpAQCAtNDUsMjQgKzQ0LDggQEAKIAogLyogRE1BLW1hcHBpbmcgaW50ZXJmYWNlOiAqLwogdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2luaXQgKHZvaWQpOwotdHlwZWRlZiB2b2lkICppYTY0X212X2RtYV9hbGxvY19jb2hlcmVudCAoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQgKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotdHlwZWRlZiBkbWFfYWRkcl90IGlhNjRfbXZfZG1hX21hcF9zaW5nbGUgKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLXR5cGVkZWYgaW50IGlhNjRfbXZfZG1hX21hcF9zZyAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NnIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9zdXBwb3J0ZWQgKHN0cnVjdCBkZXZpY2UgKiwgdTY0KTsKLQotdHlwZWRlZiBkbWFfYWRkcl90IGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsIGludCwgc3RydWN0IGRtYV9hdHRycyAqKTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQsIHN0cnVjdCBkbWFfYXR0cnMgKik7Ci10eXBlZGVmIGludCBpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50LCBzdHJ1Y3QgZG1hX2F0dHJzICopOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCwgc3RydWN0IGRtYV9hdHRycyAqKTsKIHR5cGVkZWYgdTY0IGlhNjRfbXZfZG1hX2dldF9yZXF1aXJlZF9tYXNrIChzdHJ1Y3QgZGV2aWNlICopOwordHlwZWRlZiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmlhNjRfbXZfZG1hX2dldF9vcHMoc3RydWN0IGRldmljZSAqKTsKIAogLyoKICAqIFdBUk5JTkc6IFRoZSBsZWdhY3kgSS9PIHNwYWNlIGlzIF9hcmNoaXRlY3RlZF8uICBQbGF0Zm9ybXMgYXJlCkBAIC0xMTQsOCArOTcsNiBAQAogCiBleHRlcm4gdm9pZCBtYWNodmVjX3NldHVwIChjaGFyICoqKTsKIGV4dGVybiB2b2lkIG1hY2h2ZWNfdGltZXJfaW50ZXJydXB0IChpbnQsIHZvaWQgKik7Ci1leHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NpbmdsZSAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NnIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCBtYWNodmVjX3RsYl9taWdyYXRlX2ZpbmlzaCAoc3RydWN0IG1tX3N0cnVjdCAqKTsKIAogIyBpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9TSU0pCkBAIC0xNDgsMTkgKzEyOSw4IEBACiAjICBkZWZpbmUgcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZQlpYTY0X212Lmdsb2JhbF90bGJfcHVyZ2UKICMgIGRlZmluZSBwbGF0Zm9ybV90bGJfbWlncmF0ZV9maW5pc2gJaWE2NF9tdi50bGJfbWlncmF0ZV9maW5pc2gKICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJaWE2NF9tdi5kbWFfaW5pdAotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlpYTY0X212LmRtYV9hbGxvY19jb2hlcmVudAotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CWlhNjRfbXYuZG1hX2ZyZWVfY29oZXJlbnQKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwlpYTY0X212LmRtYV9tYXBfc2luZ2xlX2F0dHJzCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwlpYTY0X212LmRtYV91bm1hcF9zaW5nbGVfYXR0cnMKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCWlhNjRfbXYuZG1hX21hcF9zZ19hdHRycwotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwlpYTY0X212LmRtYV91bm1hcF9zZ19hdHRycwotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IGlhNjRfbXYuZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CWlhNjRfbXYuZG1hX3N5bmNfc2dfZm9yX2NwdQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIGlhNjRfbXYuZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlIGlhNjRfbXYuZG1hX3N5bmNfc2dfZm9yX2RldmljZQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCQlpYTY0X212LmRtYV9tYXBwaW5nX2Vycm9yCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAlpYTY0X212LmRtYV9zdXBwb3J0ZWQKICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X3JlcXVpcmVkX21hc2sgaWE2NF9tdi5kbWFfZ2V0X3JlcXVpcmVkX21hc2sKKyMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJaWE2NF9tdi5kbWFfZ2V0X29wcwogIyAgZGVmaW5lIHBsYXRmb3JtX2lycV90b192ZWN0b3IJaWE2NF9tdi5pcnFfdG9fdmVjdG9yCiAjICBkZWZpbmUgcGxhdGZvcm1fbG9jYWxfdmVjdG9yX3RvX2lycQlpYTY0X212LmxvY2FsX3ZlY3Rvcl90b19pcnEKICMgIGRlZmluZSBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0JaWE2NF9tdi5wY2lfZ2V0X2xlZ2FjeV9tZW0KQEAgLTIwMywxOSArMTczLDggQEAKIAlpYTY0X212X2dsb2JhbF90bGJfcHVyZ2VfdCAqZ2xvYmFsX3RsYl9wdXJnZTsKIAlpYTY0X212X3RsYl9taWdyYXRlX2ZpbmlzaF90ICp0bGJfbWlncmF0ZV9maW5pc2g7CiAJaWE2NF9tdl9kbWFfaW5pdCAqZG1hX2luaXQ7Ci0JaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQgKmRtYV9hbGxvY19jb2hlcmVudDsKLQlpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50ICpkbWFfZnJlZV9jb2hlcmVudDsKLQlpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzICpkbWFfbWFwX3NpbmdsZV9hdHRyczsKLQlpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMgKmRtYV91bm1hcF9zaW5nbGVfYXR0cnM7Ci0JaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzICpkbWFfbWFwX3NnX2F0dHJzOwotCWlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzICpkbWFfdW5tYXBfc2dfYXR0cnM7Ci0JaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSAqZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHU7Ci0JaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfY3B1ICpkbWFfc3luY19zZ19mb3JfY3B1OwotCWlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgKmRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotCWlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZSAqZG1hX3N5bmNfc2dfZm9yX2RldmljZTsKLQlpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yICpkbWFfbWFwcGluZ19lcnJvcjsKLQlpYTY0X212X2RtYV9zdXBwb3J0ZWQgKmRtYV9zdXBwb3J0ZWQ7CiAJaWE2NF9tdl9kbWFfZ2V0X3JlcXVpcmVkX21hc2sgKmRtYV9nZXRfcmVxdWlyZWRfbWFzazsKKwlpYTY0X212X2RtYV9nZXRfb3BzICpkbWFfZ2V0X29wczsKIAlpYTY0X212X2lycV90b192ZWN0b3IgKmlycV90b192ZWN0b3I7CiAJaWE2NF9tdl9sb2NhbF92ZWN0b3JfdG9faXJxICpsb2NhbF92ZWN0b3JfdG9faXJxOwogCWlhNjRfbXZfcGNpX2dldF9sZWdhY3lfbWVtX3QgKnBjaV9nZXRfbGVnYWN5X21lbTsKQEAgLTI1NCwxOSArMjEzLDggQEAKIAlwbGF0Zm9ybV9nbG9iYWxfdGxiX3B1cmdlLAkJXAogCXBsYXRmb3JtX3RsYl9taWdyYXRlX2ZpbmlzaCwJCVwKIAlwbGF0Zm9ybV9kbWFfaW5pdCwJCQlcCi0JcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50LAkJXAotCXBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50LAkJXAotCXBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzLAkJXAotCXBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMsCVwKLQlwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzLAkJXAotCXBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycywJCVwKLQlwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSwJXAotCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUsCQlcCi0JcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCVwKLQlwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlLAlcCi0JcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IsCQkJXAotCXBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQsCQkJXAogCXBsYXRmb3JtX2RtYV9nZXRfcmVxdWlyZWRfbWFzaywJCVwKKwlwbGF0Zm9ybV9kbWFfZ2V0X29wcywJCQlcCiAJcGxhdGZvcm1faXJxX3RvX3ZlY3RvciwJCQlcCiAJcGxhdGZvcm1fbG9jYWxfdmVjdG9yX3RvX2lycSwJCVwKIAlwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0sCQlcCkBAIC0zMDIsNiArMjUwLDkgQEAKICMgIGVycm9yIFVua25vd24gY29uZmlndXJhdGlvbi4gIFVwZGF0ZSBhcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oLgogIyBlbmRpZiAvKiBDT05GSUdfSUE2NF9HRU5FUklDICovCiAKK2V4dGVybiB2b2lkIHN3aW90bGJfZG1hX2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfZ2V0X29wcyhzdHJ1Y3QgZGV2aWNlICopOworCiAvKgogICogRGVmaW5lIGRlZmF1bHQgdmVyc2lvbnMgc28gd2UgY2FuIGV4dGVuZCBtYWNodmVjIGZvciBuZXcgcGxhdGZvcm1zIHdpdGhvdXQgaGF2aW5nCiAgKiB0byB1cGRhdGUgdGhlIG1hY2h2ZWMgZmlsZXMgZm9yIGFsbCBleGlzdGluZyBwbGF0Zm9ybXMuCkBAIC0zMzIsNDMgKzI4MywxMCBAQAogIyBkZWZpbmUgcGxhdGZvcm1fa2VybmVsX2xhdW5jaF9ldmVudAltYWNodmVjX25vb3AKICNlbmRpZgogI2lmbmRlZiBwbGF0Zm9ybV9kbWFfaW5pdAotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCXN3aW90bGJfaW5pdAorIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCXN3aW90bGJfZG1hX2luaXQKICNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlzd2lvdGxiX2FsbG9jX2NvaGVyZW50Ci0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CXN3aW90bGJfZnJlZV9jb2hlcmVudAotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwlzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwlzd2lvdGxiX21hcF9zZ19hdHRycwotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCXN3aW90bGJfdW5tYXBfc2dfYXR0cnMKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZQotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcgotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQKLSMgZGVmaW5lICBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCXN3aW90bGJfZG1hX3N1cHBvcnRlZAorI2lmbmRlZiBwbGF0Zm9ybV9kbWFfZ2V0X29wcworIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2dldF9vcHMJCWRtYV9nZXRfb3BzCiAjZW5kaWYKICNpZm5kZWYgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCiAjIGRlZmluZSAgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCWlhNjRfZG1hX2dldF9yZXF1aXJlZF9tYXNrCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmgKaW5kZXggMzQwMGI1Ni4uNmFiMWRlNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfZGlnX3Z0ZC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2RpZ192dGQuaApAQCAtMiwxNCArMiw2IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0RJR19WVERfaAogCiBleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJZGlnX3NldHVwOwotZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXZ0ZF9hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXZ0ZF9mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJdnRkX21hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQl2dGRfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCXZ0ZF91bm1hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCWlvbW11X2RtYV9zdXBwb3J0ZWQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcgl2dGRfZG1hX21hcHBpbmdfZXJyb3I7CiBleHRlcm4gaWE2NF9tdl9kbWFfaW5pdAkJCXBjaV9pb21tdV9hbGxvYzsKIAogLyoKQEAgLTIyLDE3ICsxNCw1IEBACiAjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImRpZ192dGQiCiAjZGVmaW5lIHBsYXRmb3JtX3NldHVwCQkJCWRpZ19zZXR1cAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCXBjaV9pb21tdV9hbGxvYwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQJCXZ0ZF9hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJdnRkX2ZyZWVfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMJCXZ0ZF9tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJCXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwkJdnRkX21hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJCXZ0ZF91bm1hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CQltYWNodmVjX2RtYV9zeW5jX3NnCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJCWlvbW11X2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXZ0ZF9kbWFfbWFwcGluZ19lcnJvcgogCiAjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfRElHX1ZURF9oICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDEuaAppbmRleCAyZjU3ZjUxLi4zYmQ4M2Q3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxLmgKQEAgLTIsMTQgKzIsNyBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9oCiAKIGV4dGVybiBpYTY0X212X3NldHVwX3QJCQlkaWdfc2V0dXA7Ci1leHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJc2JhX2FsbG9jX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJc2JhX2ZyZWVfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZV9hdHRycwlzYmFfbWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJc2JhX3VubWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMJCXNiYV9tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMJc2JhX3VubWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJc2JhX2RtYV9zdXBwb3J0ZWQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcglzYmFfZG1hX21hcHBpbmdfZXJyb3I7CitleHRlcm4gaWE2NF9tdl9kbWFfaW5pdAkJCXNiYV9kbWFfaW5pdDsKIAogLyoKICAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQpAQCAtMjAsMTggKzEzLDYgQEAKICAqLwogI2RlZmluZSBwbGF0Zm9ybV9uYW1lCQkJCSJocHp4MSIKICNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJc2JhX2FsbG9jX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQlzYmFfZnJlZV9jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwkJc2JhX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJc2JhX3VubWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwkJc2JhX3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCQkJc2JhX2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXNiYV9kbWFfbWFwcGluZ19lcnJvcgorI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJCXNiYV9kbWFfaW5pdAogCiAjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCmluZGV4IGE4NDJjZGQuLjEwOTFhYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxX3N3aW90bGIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MV9zd2lvdGxiLmgKQEAgLTIsMTggKzIsNyBAQAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9TV0lPVExCX2gKIAogZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdAkJCQlkaWdfc2V0dXA7Ci1leHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJCWh3c3dfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAkJaHdzd19mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJCWh3c3dfbWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJCWh3c3dfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJCWh3c3dfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCQlod3N3X3VubWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJCWh3c3dfZG1hX3N1cHBvcnRlZDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCQlod3N3X2RtYV9tYXBwaW5nX2Vycm9yOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJCWh3c3dfc3luY19zaW5nbGVfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUJCWh3c3dfc3luY19zZ19mb3JfY3B1OwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZQkJaHdzd19zeW5jX3NnX2Zvcl9kZXZpY2U7CitleHRlcm4gaWE2NF9tdl9kbWFfZ2V0X29wcwkJCWh3c3dfZG1hX2dldF9vcHM7CiAKIC8qCiAgKiBUaGlzIHN0dWZmIGhhcyBkdWFsIHVzZSEKQEAgLTIzLDIwICsxMiw4IEBACiAgKiB0aGUgbWFjcm9zIGFyZSB1c2VkIGRpcmVjdGx5LgogICovCiAjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImhwengxX3N3aW90bGIiCi0KICNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAkJaHdzd19mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCQlod3N3X21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJaHdzd191bm1hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwkJaHdzd19tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCQlod3N3X3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCQlod3N3X2RtYV9zdXBwb3J0ZWQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCWh3c3dfZG1hX21hcHBpbmdfZXJyb3IKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCWh3c3dfc3luY19zZ19mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCWh3c3dfc3luY19zaW5nbGVfZm9yX2RldmljZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQlod3N3X3N5bmNfc2dfZm9yX2RldmljZQorI2RlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJCWh3c3dfZG1hX2dldF9vcHMKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX1NXSU9UTEJfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfc24yLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaAppbmRleCBmMWE2ZTBkLi5mMDYxYTMwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaApAQCAtNTUsMTkgKzU1LDggQEAKIGV4dGVybiBpYTY0X212X3JlYWR3X3QgX19zbl9yZWFkd19yZWxheGVkOwogZXh0ZXJuIGlhNjRfbXZfcmVhZGxfdCBfX3NuX3JlYWRsX3JlbGF4ZWQ7CiBleHRlcm4gaWE2NF9tdl9yZWFkcV90IF9fc25fcmVhZHFfcmVsYXhlZDsKLWV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzbl9kbWFfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAlzbl9kbWFfZnJlZV9jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzCXNuX2RtYV9tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJc25fZG1hX21hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZ19hdHRycwlzbl9kbWFfdW5tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQlzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUJc25fZG1hX3N5bmNfc2dfZm9yX2NwdTsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2RldmljZQlzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJc25fZG1hX21hcHBpbmdfZXJyb3I7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlzbl9kbWFfc3VwcG9ydGVkOwogZXh0ZXJuIGlhNjRfbXZfZG1hX2dldF9yZXF1aXJlZF9tYXNrCXNuX2RtYV9nZXRfcmVxdWlyZWRfbWFzazsKK2V4dGVybiBpYTY0X212X2RtYV9pbml0CQkJc25fZG1hX2luaXQ7CiBleHRlcm4gaWE2NF9tdl9taWdyYXRlX3QJCXNuX21pZ3JhdGU7CiBleHRlcm4gaWE2NF9tdl9rZXJuZWxfbGF1bmNoX2V2ZW50X3QJc25fa2VybmVsX2xhdW5jaF9ldmVudDsKIGV4dGVybiBpYTY0X212X3NldHVwX21zaV9pcnFfdAkJc25fc2V0dXBfbXNpX2lycTsKQEAgLTExMSwyMCArMTAwLDggQEAKICNkZWZpbmUgcGxhdGZvcm1fcGNpX2dldF9sZWdhY3lfbWVtCXNuX3BjaV9nZXRfbGVnYWN5X21lbQogI2RlZmluZSBwbGF0Zm9ybV9wY2lfbGVnYWN5X3JlYWQJc25fcGNpX2xlZ2FjeV9yZWFkCiAjZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfd3JpdGUJc25fcGNpX2xlZ2FjeV93cml0ZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJbWFjaHZlY19ub29wCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAlzbl9kbWFfYWxsb2NfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJc25fZG1hX2ZyZWVfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMJc25fZG1hX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMJc25fZG1hX21hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJc25fZG1hX3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJc25fZG1hX3N5bmNfc2dfZm9yX2NwdQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCXNuX2RtYV9tYXBwaW5nX2Vycm9yCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCXNuX2RtYV9zdXBwb3J0ZWQKICNkZWZpbmUgcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrCXNuX2RtYV9nZXRfcmVxdWlyZWRfbWFzaworI2RlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJc25fZG1hX2luaXQKICNkZWZpbmUgcGxhdGZvcm1fbWlncmF0ZQkJc25fbWlncmF0ZQogI2RlZmluZSBwbGF0Zm9ybV9rZXJuZWxfbGF1bmNoX2V2ZW50ICAgIHNuX2tlcm5lbF9sYXVuY2hfZXZlbnQKICNpZmRlZiBDT05GSUdfUENJX01TSQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCAwNDBiYzg3Li43ZjJhNDU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtODcsNyArODcsNyBAQAogCS8qIHJlLWNoZWNrLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIGxvY2s6ICovCiAJY29udGV4dCA9IG1tLT5jb250ZXh0OwogCWlmIChjb250ZXh0ID09IDApIHsKLQkJY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOworCQljcHVtYXNrX2NsZWFyKG1tX2NwdW1hc2sobW0pKTsKIAkJaWYgKGlhNjRfY3R4Lm5leHQgPj0gaWE2NF9jdHgubGltaXQpIHsKIAkJCWlhNjRfY3R4Lm5leHQgPSBmaW5kX25leHRfemVyb19iaXQoaWE2NF9jdHguYml0bWFwLAogCQkJCQlpYTY0X2N0eC5tYXhfY3R4LCBpYTY0X2N0eC5uZXh0KTsKQEAgLTE2Niw4ICsxNjYsOCBAQAogCiAJZG8gewogCQljb250ZXh0ID0gZ2V0X21tdV9jb250ZXh0KG1tKTsKLQkJaWYgKCFjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spKQotCQkJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKSkKKwkJCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksIG1tX2NwdW1hc2sobW0pKTsKIAkJcmVsb2FkX2NvbnRleHQoY29udGV4dCk7CiAJCS8qCiAJCSAqIGluIHRoZSB1bmxpa2VseSBldmVudCBvZiBhIFRMQi1mbHVzaCBieSBhbm90aGVyIHRocmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAppbmRleCBkMmRhNjFlLi45MDhlYWVmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xNiw2ICsxNiwxMiBAQAogCXN0cnVjdCBlbGY2NF9zaGRyICpnb3Q7CQkvKiBnbG9iYWwgb2Zmc2V0IHRhYmxlICovCiAJc3RydWN0IGVsZjY0X3NoZHIgKm9wZDsJCS8qIG9mZmljaWFsIHByb2NlZHVyZSBkZXNjcmlwdG9ycyAqLwogCXN0cnVjdCBlbGY2NF9zaGRyICp1bndpbmQ7CS8qIHVud2luZC10YWJsZSBzZWN0aW9uICovCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJc3RydWN0IGVsZjY0X3NoZHIgKnBhcmF2aXJ0X2J1bmRsZXM7CisJCQkJCS8qIHBhcmF2aXJ0X2FsdF9idW5kbGVfcGF0Y2ggdGFibGUgKi8KKwlzdHJ1Y3QgZWxmNjRfc2hkciAqcGFyYXZpcnRfaW5zdHM7CisJCQkJCS8qIHBhcmF2aXJ0X2FsdF9pbnN0X3BhdGNoIHRhYmxlICovCisjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGdwOwkJLyogZ2xvYmFsLXBvaW50ZXIgZm9yIG1vZHVsZSAqLwogCiAJdm9pZCAqY29yZV91bndfdGFibGU7CQkvKiBjb3JlIHVud2luZC10YWJsZSBjb29raWUgcmV0dXJuZWQgYnkgdW53aW5kZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvaW5zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9pbnN0LmgKaW5kZXggMGExMDI2Yy4uZDJkNDZlZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9pbnN0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9pbnN0LmgKQEAgLTMwLDYgKzMwLDkgQEAKICNkZWZpbmUgX19wYXJhdmlydF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsX3RhcmdldCBcCiAJCQkJCQlpYTY0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGwKIAorI2RlZmluZSBwYXJhdmlydF9mc3lzY2FsbF90YWJsZQkJCWlhNjRfbmF0aXZlX2ZzeXNjYWxsX3RhYmxlCisjZGVmaW5lIHBhcmF2aXJ0X2ZzeXNfYnViYmxlX2Rvd24JCWlhNjRfbmF0aXZlX2ZzeXNfYnViYmxlX2Rvd24KKwogI2lmZGVmIENPTkZJR19QQVJBVklSVF9HVUVTVF9BU01fQ0xPQkJFUl9DSEVDSwogIyBkZWZpbmUgUEFSQVZJUlRfUE9JU09OCTB4ZGVhZGJlZWZiYWFkZjAwZAogIyBkZWZpbmUgQ0xPQkJFUihjbG9iKQkJCQlcCkBAIC03NCw2ICs3NywxMSBAQAogKHByZWQpCW1vdiByZWcgPSBwc3IJCQlcCiAJQ0xPQkJFUihjbG9iKQogCisjZGVmaW5lIE1PVl9GUk9NX0lUQyhwcmVkLCBwcmVkX2Nsb2IsIHJlZywgY2xvYikJXAorKHByZWQpCW1vdiByZWcgPSBhci5pdGMJCQkJXAorCUNMT0JCRVIoY2xvYikJCQkJCVwKKwlDTE9CQkVSX1BSRUQocHJlZF9jbG9iKQorCiAjZGVmaW5lIE1PVl9UT19JRkEocmVnLCBjbG9iKQlcCiAJbW92IGNyLmlmYSA9IHJlZwlcCiAJQ0xPQkJFUihjbG9iKQpAQCAtMTU4LDYgKzE2NiwxMSBAQAogI2RlZmluZSBSU01fUFNSX0RUCQlcCiAJcnNtIHBzci5kdAogCisjZGVmaW5lIFJTTV9QU1JfQkVfSShjbG9iMCwgY2xvYjEpCVwKKwlyc20gcHNyLmJlIHwgcHNyLmkJCVwKKwlDTE9CQkVSKGNsb2IwKQkJCVwKKwlDTE9CQkVSKGNsb2IxKQorCiAjZGVmaW5lIFNTTV9QU1JfRFRfQU5EX1NSTFpfSQlcCiAJc3NtIHBzci5kdAkJXAogCTs7CQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wYXRjaGxpc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvcGF0Y2hsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxNmNhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvcGF0Y2hsaXN0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9pbnN0LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QJCVwKKwlfX2lhNjRfbmF0aXZlX3N0YXJ0X2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CQkJXAorCV9faWE2NF9uYXRpdmVfZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QJXAorCV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QJXAorCV9faWE2NF9uYXRpdmVfZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdAkJCVwKKwlfX2lhNjRfbmF0aXZlX3N0YXJ0X2dhdGVfdnRvcF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV92dG9wX3BhdGNobGlzdAkJCVwKKwlfX2lhNjRfbmF0aXZlX2VuZF9nYXRlX3Z0b3BfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QJCVwKKwlfX2lhNjRfbmF0aXZlX3N0YXJ0X2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CQlcCisJX19pYTY0X25hdGl2ZV9lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9uYXRpdmUvcHZjaGtfaW5zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmgKaW5kZXggYjhlNmViMS4uOGQ3Mjk2MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmgKQEAgLTE4MCw2ICsxODAsMTEgQEAKIAlJU19QUkVEX0lOKHByZWQpCQkJXAogCUlTX1JSRUdfT1VUKHJlZykJCQlcCiAJSVNfUlJFR19DTE9CKGNsb2IpCisjZGVmaW5lIE1PVl9GUk9NX0lUQyhwcmVkLCBwcmVkX2Nsb2IsIHJlZywgY2xvYikJXAorCUlTX1BSRURfSU4ocHJlZCkJCQkJXAorCUlTX1BSRURfQ0xPQihwcmVkX2Nsb2IpCQkJCVwKKwlJU19SUkVHX09VVChyZWcpCQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYikKICNkZWZpbmUgTU9WX1RPX0lGQShyZWcsIGNsb2IpCQkJXAogCUlTX1JSRUdfSU4ocmVnKQkJCQlcCiAJSVNfUlJFR19DTE9CKGNsb2IpCkBAIC0yNDYsNiArMjUxLDkgQEAKIAlJU19SUkVHX0NMT0IoY2xvYjIpCiAjZGVmaW5lIFJTTV9QU1JfRFQJCQkJXAogCW5vcCAwCisjZGVmaW5lIFJTTV9QU1JfQkVfSShjbG9iMCwgY2xvYjEpCQlcCisJSVNfUlJFR19DTE9CKGNsb2IwKQkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjEpCiAjZGVmaW5lIFNTTV9QU1JfRFRfQU5EX1NSTFpfSQkJCVwKIAlub3AgMAogI2RlZmluZSBCU1dfMChjbG9iMCwgY2xvYjEsIGNsb2IyKQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAyYmYzNjM2Li4yZWIwYTk4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtMjIsNiArMjIsNTYgQEAKICNpZm5kZWYgX19BU01fUEFSQVZJUlRfSAogI2RlZmluZSBfX0FTTV9QQVJBVklSVF9ICiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBmc3lzIHJlbGF0ZWQgYWRkcmVzc2VzCisgKi8KK3N0cnVjdCBwdl9mc3lzX2RhdGEgeworCXVuc2lnbmVkIGxvbmcgKmZzeXNjYWxsX3RhYmxlOworCXZvaWQgKmZzeXNfYnViYmxlX2Rvd247Cit9OworCitleHRlcm4gc3RydWN0IHB2X2ZzeXNfZGF0YSBwdl9mc3lzX2RhdGE7CisKK3Vuc2lnbmVkIGxvbmcgKnBhcmF2aXJ0X2dldF9mc3lzY2FsbF90YWJsZSh2b2lkKTsKK2NoYXIgKnBhcmF2aXJ0X2dldF9mc3lzX2J1YmJsZV9kb3duKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwYXRjaGxpc3QgYWRkcmVzc2VzIGZvciBnYXRlIHBhZ2UKKyAqLworZW51bSBwdl9nYXRlX3BhdGNobGlzdCB7CisJUFZfR0FURV9TVEFSVF9GU1lTQ0FMTCwKKwlQVl9HQVRFX0VORF9GU1lTQ0FMTCwKKworCVBWX0dBVEVfU1RBUlRfQlJMX0ZTWVNfQlVCQkxFX0RPV04sCisJUFZfR0FURV9FTkRfQlJMX0ZTWVNfQlVCQkxFX0RPV04sCisKKwlQVl9HQVRFX1NUQVJUX1ZUT1AsCisJUFZfR0FURV9FTkRfVlRPUCwKKworCVBWX0dBVEVfU1RBUlRfTUNLSU5MRVlfRTksCisJUFZfR0FURV9FTkRfTUNLSU5MRVlfRTksCit9OworCitzdHJ1Y3QgcHZfcGF0Y2hkYXRhIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2ZzeXNjYWxsX3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIGVuZF9mc3lzY2FsbF9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBzdGFydF9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBlbmRfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0OworCXVuc2lnbmVkIGxvbmcgc3RhcnRfdnRvcF9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBlbmRfdnRvcF9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBzdGFydF9tY2tpbmxleV9lOV9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBlbmRfbWNraW5sZXlfZTlfcGF0Y2hsaXN0OworCisJdm9pZCAqZ2F0ZV9zZWN0aW9uOworfTsKKworZXh0ZXJuIHN0cnVjdCBwdl9wYXRjaGRhdGEgcHZfcGF0Y2hkYXRhOworCit1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X2dldF9nYXRlX3BhdGNobGlzdChlbnVtIHB2X2dhdGVfcGF0Y2hsaXN0IHR5cGUpOwordm9pZCAqcGFyYXZpcnRfZ2V0X2dhdGVfc2VjdGlvbih2b2lkKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0dVRVNUCiAKICNkZWZpbmUgUEFSQVZJUlRfSFlQRVJWSVNPUl9UWVBFX0RFRkFVTFQJMApAQCAtNjgsNiArMTE4LDE0IEBACiAJaW50ICgqYXJjaF9zZXR1cF9ub21jYSkodm9pZCk7CiAKIAl2b2lkICgqcG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSkodm9pZCk7CisKKyNpZmRlZiBBU01fU1VQUE9SVEVECisJdW5zaWduZWQgbG9uZyAoKnBhdGNoX2J1bmRsZSkodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHR5cGUpOworCXVuc2lnbmVkIGxvbmcgKCpwYXRjaF9pbnN0KSh1bnNpZ25lZCBsb25nIHN0YWcsIHVuc2lnbmVkIGxvbmcgZXRhZywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB0eXBlKTsKKyNlbmRpZgorCXZvaWQgKCpwYXRjaF9icmFuY2gpKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHR5cGUpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wczsKQEAgLTIxMCw2ICsyNjgsOCBAQAogCWludCAoKmRvX3N0ZWFsX2FjY291bnRpbmcpKHVuc2lnbmVkIGxvbmcgKm5ld19pdG0pOwogCiAJdm9pZCAoKmNsb2Nrc291cmNlX3Jlc3VtZSkodm9pZCk7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgKCpzY2hlZF9jbG9jaykodm9pZCk7CiB9OwogCiBleHRlcm4gc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzOwpAQCAtMjI3LDYgKzI4NywxMSBAQAogCXJldHVybiBwdl90aW1lX29wcy5kb19zdGVhbF9hY2NvdW50aW5nKG5ld19pdG0pOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBwYXJhdmlydF9zY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBwdl90aW1lX29wcy5zY2hlZF9jbG9jaygpOworfQorCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3BhdGNoLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnRfcGF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjhmZjVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3BhdGNoLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19BU01fUEFSQVZJUlRfUEFUQ0hfSAorI2RlZmluZSBfX0FTTV9QQVJBVklSVF9QQVRDSF9ICisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKworCS5zZWN0aW9uIC5wYXJhdmlydF9icmFuY2hlcywgImEiCisJLnByZXZpb3VzCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1NJVEVfQlIodHlwZSkJCVwKKwl7CQkJCQlcCisJWzE6XSA7CQkJCQlcCisJYnIuY29uZC5zcHRrLm1hbnkgMmYgOwkJCVwKKwlub3AuYiAwIDsJCQkJXAorCW5vcC5iIDA7OyA7CQkJCVwKKwl9IDsJCQkJCVwKKwkyOgkJCQkJXAorCS54ZGF0YTggIi5wYXJhdmlydF9icmFuY2hlcyIsIDFiLCB0eXBlCisKKyNlbHNlCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgorCisvKiBmb3IgYmluYXJ5IHBhdGNoICovCitzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgeworCXZvaWQJCSpzYnVuZGxlOworCXZvaWQJCSplYnVuZGxlOworCXVuc2lnbmVkIGxvbmcJdHlwZTsKK307CisKKy8qIGxhYmVsIG1lYW5zIHRoZSBiZWdpbm5pbmcgb2YgbmV3IGJ1bmRsZSAqLworI2RlZmluZSBwYXJhdmlydF9hbHRfYnVuZGxlKGluc3RyLCBwcml2b3ApCQkJCVwKKwkiXHQ5OTg6XG4iCQkJCQkJCVwKKwkiXHQiIGluc3RyICJcbiIJCQkJCQkJXAorCSJcdDk5OTpcbiIJCQkJCQkJXAorCSJcdC5wdXNoc2VjdGlvbiAucGFyYXZpcnRfYnVuZGxlcywgXCJhXCJcbiIJCQlcCisJIlx0LnBvcHNlY3Rpb25cbiIJCQkJCQlcCisJIlx0LnhkYXRhOCBcIi5wYXJhdmlydF9idW5kbGVzXCIsIDk5OGIsIDk5OWIsICIJCQlcCisJX19zdHJpbmdpZnkocHJpdm9wKSAiXG4iCisKKworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtIHsKKwljb25zdCB2b2lkCSpzYnVuZGxlOworCWNvbnN0IHZvaWQJKmVidW5kbGU7CisJdW5zaWduZWQgbG9uZwl0eXBlOworfTsKKworCitzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0IHsKKwl1bnNpZ25lZCBsb25nCXN0YWc7CisJdW5zaWduZWQgbG9uZwlldGFnOworCXVuc2lnbmVkIGxvbmcJdHlwZTsKK307CisKKyNkZWZpbmUgcGFyYXZpcnRfYWx0X2luc3QoaW5zdHIsIHByaXZvcCkJCQkJXAorCSJcdFs5OTg6XVxuIgkJCQkJCQlcCisJIlx0IiBpbnN0ciAiXG4iCQkJCQkJCVwKKwkiXHRbOTk5Ol1cbiIJCQkJCQkJXAorCSJcdC5wdXNoc2VjdGlvbiAucGFyYXZpcnRfaW5zdHMsIFwiYVwiXG4iCQkJXAorCSJcdC5wb3BzZWN0aW9uXG4iCQkJCQkJXAorCSJcdC54ZGF0YTggXCIucGFyYXZpcnRfaW5zdHNcIiwgOTk4YiwgOTk5YiwgIgkJCVwKKwlfX3N0cmluZ2lmeShwcml2b3ApICJcbiIKKworc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnJhbmNoIHsKKwl1bnNpZ25lZCBsb25nCXRhZzsKKwl1bnNpZ25lZCBsb25nCXR5cGU7Cit9OworCitzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnJhbmNoX3RhcmdldCB7CisJY29uc3Qgdm9pZAkqZW50cnk7CisJdW5zaWduZWQgbG9uZwl0eXBlOworfTsKKwordm9pZAorX19wYXJhdmlydF9wYXRjaF9hcHBseV9icmFuY2goCisJdW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKwljb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnJhbmNoX3RhcmdldCAqZW50cmllcywKKwl1bnNpZ25lZCBpbnQgbnJfZW50cmllcyk7CisKK3ZvaWQKK3BhcmF2aXJ0X3BhdGNoX3JlbG9jX2JyKHVuc2lnbmVkIGxvbmcgdGFnLCBjb25zdCB2b2lkICp0YXJnZXQpOworCit2b2lkCitwYXJhdmlydF9wYXRjaF9yZWxvY19icmwodW5zaWduZWQgbG9uZyB0YWcsIGNvbnN0IHZvaWQgKnRhcmdldCk7CisKKworI2lmIGRlZmluZWQoQVNNX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCit1bnNpZ25lZCBsb25nCitpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKwordW5zaWduZWQgbG9uZworX19wYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtICplbGVtcywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmVsZW1zLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtICoqZm91bmQpOworCit2b2lkCitwYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnVuZGxlICpzdGFydCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKmVuZCk7CisKK3ZvaWQKK3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2luc3QoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqc3RhcnQsCisJCQkgIGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKmVuZCk7CisKK3ZvaWQgcGFyYXZpcnRfcGF0Y2hfYXBwbHkodm9pZCk7CisjZWxzZQorI2RlZmluZSBwYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9wYXRjaF9hcHBseV9pbnN0KHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfcGF0Y2hfYXBwbHkoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTEVZX18gKi8KKworI2VuZGlmIC8qIF9fQVNNX1BBUkFWSVJUX1BBVENIX0ggKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtc2V0LXN0eWxlOiAibGludXgiCisgKiBjLWJhc2ljLW9mZnNldDogOAorICogdGFiLXdpZHRoOiA4CisgKiBpbmRlbnQtdGFicy1tb2RlOiB0CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydF9wcml2b3AuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydF9wcml2b3AuaAppbmRleCAzM2M4ZTU1Li4zZDI5NTExIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnRfcHJpdm9wLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3ByaXZvcC5oCkBAIC0zMyw3ICszMyw3IEBACiAgKi8KIAogc3RydWN0IHB2X2NwdV9vcHMgewotCXZvaWQgKCpmYykodW5zaWduZWQgbG9uZyBhZGRyKTsKKwl2b2lkICgqZmMpKHZvaWQgKmFkZHIpOwogCXVuc2lnbmVkIGxvbmcgKCp0aGFzaCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIAl1bnNpZ25lZCBsb25nICgqZ2V0X2NwdWlkKShpbnQgaW5kZXgpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfcG1kKShpbnQgaW5kZXgpOwpAQCAtNjAsMTIgKzYwLDE4IEBACiAvKiBJbnN0cnVjdGlvbnMgcGFyYXZpcnR1YWxpemVkIGZvciBwZXJmb3JtYW5jZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBBU01fU1VQUE9SVEVECisjZGVmaW5lIHBhcmF2aXJ0X3NzbV9pKCkJcHZfY3B1X29wcy5zc21faSgpCisjZGVmaW5lIHBhcmF2aXJ0X3JzbV9pKCkJcHZfY3B1X29wcy5yc21faSgpCisjZGVmaW5lIF9fcGFyYXZpcnRfZ2V0cmVnKCkJcHZfY3B1X29wcy5nZXRyZWcoKQorI2VuZGlmCisKIC8qIG1hc2sgZm9yIGlhNjRfbmF0aXZlX3NzbS9yc20oKSBtdXN0IGJlIGNvbnN0YW50LigiaSIgY29uc3RyYWluZykuCiAgKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRvZXNuJ3Qgc2F0aXNmeSBpdC4gKi8KICNkZWZpbmUgcGFyYXZpcnRfc3NtKG1hc2spCQkJXAogCWRvIHsJCQkJCVwKIAkJaWYgKChtYXNrKSA9PSBJQTY0X1BTUl9JKQlcCi0JCQlwdl9jcHVfb3BzLnNzbV9pKCk7CVwKKwkJCXBhcmF2aXJ0X3NzbV9pKCk7CVwKIAkJZWxzZQkJCQlcCiAJCQlpYTY0X25hdGl2ZV9zc20obWFzayk7CVwKIAl9IHdoaWxlICgwKQpAQCAtNzMsNyArNzksNyBAQAogI2RlZmluZSBwYXJhdmlydF9yc20obWFzaykJCQlcCiAJZG8gewkJCQkJXAogCQlpZiAoKG1hc2spID09IElBNjRfUFNSX0kpCVwKLQkJCXB2X2NwdV9vcHMucnNtX2koKTsJXAorCQkJcGFyYXZpcnRfcnNtX2koKTsJXAogCQllbHNlCQkJCVwKIAkJCWlhNjRfbmF0aXZlX3JzbShtYXNrKTsJXAogCX0gd2hpbGUgKDApCkBAIC04Niw3ICs5Miw3IEBACiAJCWlmICgocmVnKSA9PSBfSUE2NF9SRUdfSVApCQkJXAogCQkJcmVzID0gaWE2NF9uYXRpdmVfZ2V0cmVnKF9JQTY0X1JFR19JUCk7IFwKIAkJZWxzZQkJCQkJCVwKLQkJCXJlcyA9IHB2X2NwdV9vcHMuZ2V0cmVnKHJlZyk7CQlcCisJCQlyZXMgPSBfX3BhcmF2aXJ0X2dldHJlZyhyZWcpOwkJXAogCQlyZXM7CQkJCQkJXAogCX0pCiAKQEAgLTExMiw2ICsxMTgsMTIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QQVJBVklSVCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpICYmIGRlZmluZWQoQVNNX1NVUFBPUlRFRCkKKyNkZWZpbmUgcGFyYXZpcnRfZHZfc2VyaWFsaXplX2RhdGEoKQlpYTY0X2R2X3NlcmlhbGl6ZV9kYXRhKCkKKyNlbHNlCisjZGVmaW5lIHBhcmF2aXJ0X2R2X3NlcmlhbGl6ZV9kYXRhKCkJLyogbm90aGluZyAqLworI2VuZGlmCisKIC8qIHRoZXNlIHJvdXRpbmVzIHV0aWxpemUgcHJpdmlsZWdlLXNlbnNpdGl2ZSBvciBwZXJmb3JtYW5jZS1zZW5zaXRpdmUKICAqIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zIHNvIHRoZSBjb2RlIG11c3QgYmUgcmVwbGFjZWQgd2l0aAogICogcGFyYXZpcnR1YWxpemVkIHZlcnNpb25zICovCkBAIC0xMjEsNCArMTMzLDM0OSBAQAogCUlBNjRfUEFSQVZJUlRfQVNNX0ZVTkMod29ya19wcm9jZXNzZWRfc3lzY2FsbCkKICNkZWZpbmUgaWE2NF9sZWF2ZV9rZXJuZWwJCUlBNjRfUEFSQVZJUlRfQVNNX0ZVTkMobGVhdmVfa2VybmVsKQogCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGJpbmFyeSBwYXRjaGluZyBpbmZyYXN0cnVjdHVyZQorICovCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfRkMJCQkJMQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX1RIQVNICQkJMgorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0dFVF9DUFVJRAkJCTMKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9HRVRfUE1ECQkJNAorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX1BUQ0dBCQkJNQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0dFVF9SUgkJCTYKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9TRVRfUlIJCQk3CisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfU0VUX1JSMF9UT19SUjQJCTgKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9TU01fSQkJCTkKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9SU01fSQkJCTEwCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfR0VUX1BTUl9JCQkJMTEKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9JTlRSSU5fTE9DQUxfSVJRX1JFU1RPUkUJMTIKKworLyogUEFSQVZJUlRfUEFUWV9UWVBFX1tHU11FVFJFRyArIF9JQTY0X1JFR194eHggKi8KKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9HRVRSRUcJCQkweDEwMDAwMDAwCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfU0VUUkVHCQkJMHgyMDAwMDAwMAorCisvKgorICogc3RydWN0IHRhc2tfc3RydWN0KiAoKmlhNjRfc3dpdGNoX3RvKSh2b2lkKiBuZXh0X3Rhc2spOworICogdm9pZCAqaWE2NF9sZWF2ZV9zeXNjYWxsOworICogdm9pZCAqaWE2NF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsCisgKiB2b2lkICppYTY0X2xlYXZlX2tlcm5lbDsKKyAqLworCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfU1RBUlQJCQkweDMwMDAwMDAwCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfU1dJVENIX1RPCQlcCisJKFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfU1RBUlQgKyAwKQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0JSX0xFQVZFX1NZU0NBTEwJCVwKKwkoUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9TVEFSVCArIDEpCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfV09SS19QUk9DRVNTRURfU1lTQ0FMTAlcCisJKFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfU1RBUlQgKyAyKQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0JSX0xFQVZFX0tFUk5FTAkJXAorCShQQVJBVklSVF9QQVRDSF9UWVBFX0JSX1NUQVJUICsgMykKKworI2lmZGVmIEFTTV9TVVBQT1JURUQKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfcGF0Y2guaD4KKworLyoKKyAqIHB2X2NwdV9vcHMgY2FsbGluZyBzdHViLgorICogbm9ybWFsIGZ1bmN0aW9uIGNhbGwgY29udmVuc2lvbiBjYW4ndCBiZSB3cml0dGVuIGJ5IGdjYworICogaW5saW5lIGFzc2VtYmx5LgorICoKKyAqIGZyb20gdGhlIGNhbGxlcidzIHBvaW50IG9mIHZpZXcsCisgKiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyB3aWxsIGJlIGNsb2JiZXJlZC4KKyAqIHIyLCByMworICogcjgtcjE1CisgKiByMTYsIHIxNworICogYjYsIGI3CisgKiBwNi1wMTUKKyAqIGFyLmNjdgorICoKKyAqIGZyb20gdGhlIGNhbGxlZSdzIHBvaW50IG9mIHZpZXcgLAorICogdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgY2FuIGJlIHVzZWQuCisgKiByMiwgcjM6IHNjcmF0Y2gKKyAqIHI4OiBzY3JhdGNoLCBpbnB1dCBhcmd1bWVudDAgYW5kIHJldHVybiB2YWx1ZQorICogcjAtcjE1OiBzY3JhdGNoLCBpbnB1dCBhcmd1bWVudDEtNQorICogYjY6IHJldHVybiBwb2ludGVyCisgKiBiNzogc2NyYXRjaAorICogcDYtcDE1OiBzY3JhdGNoCisgKiBhci5jY3Y6IHNjcmF0Y2gKKyAqCisgKiBvdGhlciByZWdpc3RlcnMgbXVzdCBub3QgYmUgY2hhbmdlZC4gZXNwZWNpYWxseQorICogYjA6IHJwOiBwcmVzZXJ2ZWQuIGdjYyBpZ25vcmVzIGIwIGluIGNsb2JiZXJlZCByZWdpc3Rlci4KKyAqIHIxNjogc2F2ZWQgZ3AKKyAqLworLyogNSBidW5kbGVzICovCisjZGVmaW5lIF9fUEFSQVZJUlRfQlIJCQkJCQkJXAorCSI7O1xuIgkJCQkJCQkJXAorCSJ7IC5tbHhcbiIJCQkJCQkJXAorCSJub3AgMFxuIgkJCQkJCQlcCisJIm1vdmwgcjIgPSAlW29wX2FkZHJdXG4iLyogZ2V0IGZ1bmN0aW9uIHBvaW50ZXIgYWRkcmVzcyAqLwlcCisJIjs7XG4iCQkJCQkJCQlcCisJIn1cbiIJCQkJCQkJCVwKKwkiMTpcbiIJCQkJCQkJCVwKKwkieyAubWlpXG4iCQkJCQkJCVwKKwkibGQ4IHIyID0gW3IyXVxuIgkvKiBsb2FkIGZ1bmN0aW9uIGRlc2NyaXB0b3IgYWRkcmVzcyAqLwlcCisJIm1vdiByMTcgPSBpcFxuIgkvKiBnZXQgaXAgdG8gY2FsYyByZXR1cm4gYWRkcmVzcyAqLwlcCisJIm1vdiByMTYgPSBncFxuIgkvKiBzYXZlIGdwICovCQkJCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkifVxuIgkJCQkJCQkJXAorCSJ7IC5taWlcbiIJCQkJCQkJXAorCSJsZDggcjMgPSBbcjJdLCA4XG4iCS8qIGxvYWQgZW50cnkgYWRkcmVzcyAqLwkJXAorCSJhZGRzIHIxNyA9ICAxZiAtIDFiLCByMTdcbiIJLyogY2FsY3VsYXRlIHJldHVybiBhZGRyZXNzICovCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkibW92IGI3ID0gcjNcbiIJCS8qIHNldCBlbnRyeSBhZGRyZXNzICovCQkJXAorCSJ9XG4iCQkJCQkJCQlcCisJInsgLm1pYlxuIgkJCQkJCQlcCisJImxkOCBncCA9IFtyMl1cbiIJLyogbG9hZCBncCB2YWx1ZSAqLwkJCVwKKwkibW92IGI2ID0gcjE3XG4iCS8qIHNldCByZXR1cm4gYWRkcmVzcyAqLwkJXAorCSJici5jb25kLnNwdGsuZmV3IGI3XG4iCS8qIGludHJpbnNpY3MgYXJlIHZlcnkgc2hvcnQgaXNucyAqLwlcCisJIn1cbiIJCQkJCQkJCVwKKwkiMTpcbiIJCQkJCQkJCVwKKwkieyAubWlpXG4iCQkJCQkJCVwKKwkibW92IGdwID0gcjE2XG4iCS8qIHJlc3RvcmUgZ3AgdmFsdWUgKi8JCQlcCisJIm5vcCAwXG4iCQkJCQkJCVwKKwkibm9wIDBcbiIJCQkJCQkJXAorCSI7O1xuIgkJCQkJCQkJXAorCSJ9XG4iCisKKyNkZWZpbmUgUEFSQVZJUlRfT1Aob3ApCQkJCVwKKwlbb3BfYWRkcl0gImkiKCZwdl9jcHVfb3BzLm9wKQorCisjZGVmaW5lIFBBUkFWSVJUX1RZUEUodHlwZSkJCQlcCisJUEFSQVZJUlRfUEFUQ0hfVFlQRV8gIyMgdHlwZQorCisjZGVmaW5lIFBBUkFWSVJUX1JFR19DTE9CQkVSUzAJCQkJCVwKKwkicjIiLCAicjMiLCAvKiJyOCIsKi8gInI5IiwgInIxMCIsICJyMTEiLCAicjE0IiwJXAorCQkicjE1IiwgInIxNiIsICJyMTciCisKKyNkZWZpbmUgUEFSQVZJUlRfUkVHX0NMT0JCRVJTMQkJCQkJXAorCSJyMiIsInIzIiwgLyoicjgiLCovICJyOSIsICJyMTAiLCAicjExIiwgInIxNCIsCQlcCisJCSJyMTUiLCAicjE2IiwgInIxNyIKKworI2RlZmluZSBQQVJBVklSVF9SRUdfQ0xPQkJFUlMyCQkJCQlcCisJInIyIiwgInIzIiwgLyoicjgiLCAicjkiLCovICJyMTAiLCAicjExIiwgInIxNCIsCVwKKwkJInIxNSIsICJyMTYiLCAicjE3IgorCisjZGVmaW5lIFBBUkFWSVJUX1JFR19DTE9CQkVSUzUJCQkJCVwKKwkicjIiLCAicjMiLCAvKiJyOCIsICJyOSIsICJyMTAiLCAicjExIiwgInIxNCIsKi8JXAorCQkicjE1IiwgInIxNiIsICJyMTciCisKKyNkZWZpbmUgUEFSQVZJUlRfQlJfQ0xPQkJFUlMJCQlcCisJImI2IiwgImI3IgorCisjZGVmaW5lIFBBUkFWSVJUX1BSX0NMT0JCRVJTCQkJCQkJXAorCSJwNiIsICJwNyIsICJwOCIsICJwOSIsICJwMTAiLCAicDExIiwgInAxMiIsICJwMTMiLCAicDE0IiwgInAxNSIKKworI2RlZmluZSBQQVJBVklSVF9BUl9DTE9CQkVSUwkJCVwKKwkiYXIuY2N2IgorCisjZGVmaW5lIFBBUkFWSVJUX0NMT0JCRVJTMAkJCVwKKwkJUEFSQVZJUlRfUkVHX0NMT0JCRVJTMCwJCVwKKwkJUEFSQVZJUlRfQlJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX1BSX0NMT0JCRVJTLAkJXAorCQlQQVJBVklSVF9BUl9DTE9CQkVSUywJCVwKKwkJIm1lbW9yeSIKKworI2RlZmluZSBQQVJBVklSVF9DTE9CQkVSUzEJCQlcCisJCVBBUkFWSVJUX1JFR19DTE9CQkVSUzEsCQlcCisJCVBBUkFWSVJUX0JSX0NMT0JCRVJTLAkJXAorCQlQQVJBVklSVF9QUl9DTE9CQkVSUywJCVwKKwkJUEFSQVZJUlRfQVJfQ0xPQkJFUlMsCQlcCisJCSJtZW1vcnkiCisKKyNkZWZpbmUgUEFSQVZJUlRfQ0xPQkJFUlMyCQkJXAorCQlQQVJBVklSVF9SRUdfQ0xPQkJFUlMyLAkJXAorCQlQQVJBVklSVF9CUl9DTE9CQkVSUywJCVwKKwkJUEFSQVZJUlRfUFJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX0FSX0NMT0JCRVJTLAkJXAorCQkibWVtb3J5IgorCisjZGVmaW5lIFBBUkFWSVJUX0NMT0JCRVJTNQkJCVwKKwkJUEFSQVZJUlRfUkVHX0NMT0JCRVJTNSwJCVwKKwkJUEFSQVZJUlRfQlJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX1BSX0NMT0JCRVJTLAkJXAorCQlQQVJBVklSVF9BUl9DTE9CQkVSUywJCVwKKwkJIm1lbW9yeSIKKworI2RlZmluZSBQQVJBVklSVF9CUjAob3AsIHR5cGUpCQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIgYXNtICgicjgiKTsJCVwKKwlhc20gdm9sYXRpbGUgKHBhcmF2aXJ0X2FsdF9idW5kbGUoX19QQVJBVklSVF9CUiwJXAorCQkJCQkgIFBBUkFWSVJUX1RZUEUodHlwZSkpCVwKKwkJICAgICAgOgkiPXIiKGlhNjRfY2xvYmJlcikJCQlcCisJCSAgICAgIDogUEFSQVZJUlRfT1Aob3ApCQkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzApCisKKyNkZWZpbmUgUEFSQVZJUlRfQlIwX1JFVChvcCwgdHlwZSkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9pbnRyaV9yZXMgYXNtICgicjgiKTsJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCSAgUEFSQVZJUlRfVFlQRSh0eXBlKSkJXAorCQkgICAgICA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpCQkJXAorCQkgICAgICA6IFBBUkFWSVJUX09QKG9wKQkJCQlcCisJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMwKQorCisjZGVmaW5lIFBBUkFWSVJUX0JSMShvcCwgdHlwZSwgYXJnMSkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX18jI2FyZzEgYXNtICgicjgiKSA9IGFyZzE7CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlciBhc20gKCJyOCIpOwkJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCSAgUEFSQVZJUlRfVFlQRSh0eXBlKSkJXAorCQkgICAgICA6CSI9ciIoaWE2NF9jbG9iYmVyKQkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9PUChvcCksICIwIihfXyMjYXJnMSkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzEpCisKKyNkZWZpbmUgUEFSQVZJUlRfQlIxX1JFVChvcCwgdHlwZSwgYXJnMSkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2ludHJpX3JlcyBhc20gKCJyOCIpOwlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfXyMjYXJnMSBhc20gKCJyOCIpID0gYXJnMTsJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCSAgUEFSQVZJUlRfVFlQRSh0eXBlKSkJXAorCQkgICAgICA6ICI9ciIoaWE2NF9pbnRyaV9yZXMpCQkJXAorCQkgICAgICA6IFBBUkFWSVJUX09QKG9wKSwgIjAiKF9fIyNhcmcxKQkJXAorCQkgICAgICA6IFBBUkFWSVJUX0NMT0JCRVJTMSkKKworI2RlZmluZSBQQVJBVklSVF9CUjFfVk9JRChvcCwgdHlwZSwgYXJnMSkJCQlcCisJcmVnaXN0ZXIgdm9pZCAqX18jI2FyZzEgYXNtICgicjgiKSA9IGFyZzE7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIgYXNtICgicjgiKTsJCVwKKwlhc20gdm9sYXRpbGUgKHBhcmF2aXJ0X2FsdF9idW5kbGUoX19QQVJBVklSVF9CUiwJXAorCQkJCQkgIFBBUkFWSVJUX1RZUEUodHlwZSkpCVwKKwkJICAgICAgOgkiPXIiKGlhNjRfY2xvYmJlcikJCQlcCisJCSAgICAgIDogUEFSQVZJUlRfT1Aob3ApLCAiMCIoX18jI2FyZzEpCQlcCisJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMxKQorCisjZGVmaW5lIFBBUkFWSVJUX0JSMihvcCwgdHlwZSwgYXJnMSwgYXJnMikJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX18jI2FyZzEgYXNtICgicjgiKSA9IGFyZzE7CQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfXyMjYXJnMiBhc20gKCJyOSIpID0gYXJnMjsJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlcjEgYXNtICgicjgiKTsJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlcjIgYXNtICgicjkiKTsJCVwKKwlhc20gdm9sYXRpbGUgKHBhcmF2aXJ0X2FsdF9idW5kbGUoX19QQVJBVklSVF9CUiwJCVwKKwkJCQkJICBQQVJBVklSVF9UWVBFKHR5cGUpKQkJXAorCQkgICAgICA6ICI9ciIoaWE2NF9jbG9iYmVyMSksICI9ciIoaWE2NF9jbG9iYmVyMikJXAorCQkgICAgICA6IFBBUkFWSVJUX09QKG9wKSwgIjAiKF9fIyNhcmcxKSwgIjEiKF9fIyNhcmcyKQlcCisJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMyKQorCisKKyNkZWZpbmUgUEFSQVZJUlRfREVGSU5FX0NQVV9PUDAob3AsIHR5cGUpCQlcCisJc3RhdGljIGlubGluZSB2b2lkCQkJCVwKKwlwYXJhdmlydF8gIyMgb3AgKHZvaWQpCQkJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjAob3AsIHR5cGUpOwkJCVwKKwl9CisKKyNkZWZpbmUgUEFSQVZJUlRfREVGSU5FX0NQVV9PUDBfUkVUKG9wLCB0eXBlKQkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwkJCVwKKwlwYXJhdmlydF8gIyMgb3AgKHZvaWQpCQkJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjBfUkVUKG9wLCB0eXBlKTsJCVwKKwkJcmV0dXJuIGlhNjRfaW50cmlfcmVzOwkJCVwKKwl9CisKKyNkZWZpbmUgUEFSQVZJUlRfREVGSU5FX0NQVV9PUDFfVk9JRChvcCwgdHlwZSkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQJCQkJXAorCXBhcmF2aXJ0XyAjIyBvcCAodm9pZCAqYXJnMSkJCQlcCisJewkJCQkJCVwKKwkJUEFSQVZJUlRfQlIxX1ZPSUQob3AsIHR5cGUsIGFyZzEpOwlcCisJfQorCisjZGVmaW5lIFBBUkFWSVJUX0RFRklORV9DUFVfT1AxKG9wLCB0eXBlKQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZAkJCQlcCisJcGFyYXZpcnRfICMjIG9wICh1bnNpZ25lZCBsb25nIGFyZzEpCQlcCisJewkJCQkJCVwKKwkJUEFSQVZJUlRfQlIxKG9wLCB0eXBlLCBhcmcxKTsJCVwKKwl9CisKKyNkZWZpbmUgUEFSQVZJUlRfREVGSU5FX0NQVV9PUDFfUkVUKG9wLCB0eXBlKQkJXAorCXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwkJCVwKKwlwYXJhdmlydF8gIyMgb3AgKHVuc2lnbmVkIGxvbmcgYXJnMSkJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjFfUkVUKG9wLCB0eXBlLCBhcmcxKTsJXAorCQlyZXR1cm4gaWE2NF9pbnRyaV9yZXM7CQkJXAorCX0KKworI2RlZmluZSBQQVJBVklSVF9ERUZJTkVfQ1BVX09QMihvcCwgdHlwZSkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQJCQkJXAorCXBhcmF2aXJ0XyAjIyBvcCAodW5zaWduZWQgbG9uZyBhcmcxLAkJXAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnMikJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjIob3AsIHR5cGUsIGFyZzEsIGFyZzIpOwlcCisJfQorCisKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AxX1ZPSUQoZmMsIEZDKTsKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AxX1JFVCh0aGFzaCwgVEhBU0gpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMV9SRVQoZ2V0X2NwdWlkLCBHRVRfQ1BVSUQpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMV9SRVQoZ2V0X3BtZCwgR0VUX1BNRCkKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AyKHB0Y2dhLCBQVENHQSkKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AxX1JFVChnZXRfcnIsIEdFVF9SUikKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AyKHNldF9yciwgU0VUX1JSKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDAoc3NtX2ksIFNTTV9JKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDAocnNtX2ksIFJTTV9JKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDBfUkVUKGdldF9wc3JfaSwgR0VUX1BTUl9JKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDEoaW50cmluX2xvY2FsX2lycV9yZXN0b3JlLCBJTlRSSU5fTE9DQUxfSVJRX1JFU1RPUkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcGFyYXZpcnRfc2V0X3JyMF90b19ycjQodW5zaWduZWQgbG9uZyB2YWwwLCB1bnNpZ25lZCBsb25nIHZhbDEsCisJCQl1bnNpZ25lZCBsb25nIHZhbDIsIHVuc2lnbmVkIGxvbmcgdmFsMywKKwkJCXVuc2lnbmVkIGxvbmcgdmFsNCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdmFsMCBhc20gKCJyOCIpID0gdmFsMDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdmFsMSBhc20gKCJyOSIpID0gdmFsMTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdmFsMiBhc20gKCJyMTAiKSA9IHZhbDI7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3ZhbDMgYXNtICgicjExIikgPSB2YWwzOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX192YWw0IGFzbSAoInIxNCIpID0gdmFsNDsKKworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMCBhc20gKCJyOCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMSBhc20gKCJyOSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMiBhc20gKCJyMTAiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlcjMgYXNtICgicjExIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXI0IGFzbSAoInIxNCIpOworCisJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCisJCQkJCSAgUEFSQVZJUlRfVFlQRShTRVRfUlIwX1RPX1JSNCkpCisJCSAgICAgIDogIj1yIihpYTY0X2Nsb2JiZXIwKSwKKwkJCSI9ciIoaWE2NF9jbG9iYmVyMSksCisJCQkiPXIiKGlhNjRfY2xvYmJlcjIpLAorCQkJIj1yIihpYTY0X2Nsb2JiZXIzKSwKKwkJCSI9ciIoaWE2NF9jbG9iYmVyNCkKKwkJICAgICAgOiBQQVJBVklSVF9PUChzZXRfcnIwX3RvX3JyNCksCisJCQkiMCIoX192YWwwKSwgIjEiKF9fdmFsMSksICIyIihfX3ZhbDIpLAorCQkJIjMiKF9fdmFsMyksICI0IihfX3ZhbDQpCisJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlM1KTsKK30KKworLyogdW5zaWduZWQgbG9uZyBwYXJhdmlydF9nZXRyZWcoaW50IHJlZykgKi8KKyNkZWZpbmUgX19wYXJhdmlydF9nZXRyZWcocmVnKQkJCQkJCVwKKwkoewkJCQkJCQkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfaW50cmlfcmVzIGFzbSAoInI4Iik7CVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlZyBhc20gKCJyOCIpID0gKHJlZyk7CVwKKwkJCQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWcpKTsJCVwKKwkJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCVwKKwkJCQkJCSAgUEFSQVZJUlRfVFlQRShHRVRSRUcpIFwKKwkJCQkJCSAgKyAocmVnKSkJCVwKKwkJCSAgICAgIDogIj1yIihpYTY0X2ludHJpX3JlcykJCQlcCisJCQkgICAgICA6IFBBUkFWSVJUX09QKGdldHJlZyksICIwIihfX3JlZykJCVwKKwkJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMxKTsJCQlcCisJCQkJCQkJCQlcCisJCWlhNjRfaW50cmlfcmVzOwkJCQkJCVwKKwl9KQorCisvKiB2b2lkIHBhcmF2aXJ0X3NldHJlZyhpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkgKi8KKyNkZWZpbmUgcGFyYXZpcnRfc2V0cmVnKHJlZywgdmFsKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3ZhbCBhc20gKCJyOCIpID0gdmFsOwkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmVnIGFzbSAoInI5IikgPSByZWc7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMSBhc20gKCJyOCIpOwlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMiBhc20gKCJyOSIpOwlcCisJCQkJCQkJCQlcCisJCUJVSUxEX0JVR19PTighX19idWlsdGluX2NvbnN0YW50X3AocmVnKSk7CQlcCisJCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCQkgIFBBUkFWSVJUX1RZUEUoU0VUUkVHKSBcCisJCQkJCQkgICsgKHJlZykpCQlcCisJCQkgICAgICA6ICI9ciIoaWE2NF9jbG9iYmVyMSksCQkJXAorCQkJCSI9ciIoaWE2NF9jbG9iYmVyMikJCQlcCisJCQkgICAgICA6IFBBUkFWSVJUX09QKHNldHJlZyksCQkJXAorCQkJCSIxIihfX3JlZyksICIwIihfX3ZhbCkJCQlcCisJCQkgICAgICA6IFBBUkFWSVJUX0NMT0JCRVJTMik7CQkJXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBBU01fU1VQUE9SVEVEICovCisjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICYmIEFTTV9TVVBQT1RFRCAqLworCiAjZW5kaWYgLyogX0FTTV9JQTY0X1BBUkFWSVJUX1BSSVZPUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggMjFjNDAyMy4uNTk4NDA4MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMTI2LDcgKzEyNiw4IEBACiBleHRlcm4gaW50IGlzX211bHRpdGhyZWFkaW5nX2VuYWJsZWQodm9pZCk7CiAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOworZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOworI2RlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzawogCiAjZWxzZSAvKiBDT05GSUdfU01QICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMDIyOWZiOS4uMTNhYjcxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTEyMCw2ICsxMjAsMzggQEAKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKIAorI2lmZGVmIEFTTV9TVVBQT1JURUQKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCitfX3Jhd19yZWFkX2xvY2tfZmxhZ3MocmF3X3J3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInRiaXQubnogcDYsIHAwID0gJTEsJTJcbiIKKwkJImJyLmZldyAzZlxuIgorCQkiMTpcbiIKKwkJImZldGNoYWRkNC5yZWwgcjIgPSBbJTBdLCAtMTs7XG4iCisJCSIocDYpIHNzbSBwc3IuaVxuIgorCQkiMjpcbiIKKwkJImhpbnQgQHBhdXNlXG4iCisJCSJsZDQgcjIgPSBbJTBdOztcbiIKKwkJImNtcDQubHQgcDcscDAgPSByMiwgcjBcbiIKKwkJIihwNykgYnIuY29uZC5zcG50LmZldyAyYlxuIgorCQkiKHA2KSByc20gcHNyLmlcbiIKKwkJIjs7XG4iCisJCSIzOlxuIgorCQkiZmV0Y2hhZGQ0LmFjcSByMiA9IFslMF0sIDE7O1xuIgorCQkiY21wNC5sdCBwNyxwMCA9IHIyLCByMFxuIgorCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDFiXG4iCisJCTogOiAiciIobG9jayksICJyIihmbGFncyksICJpIihJQTY0X1BTUl9JX0JJVCkKKwkJOiAicDYiLCAicDciLCAicjIiLCAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrKGxvY2spIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCAwKQorCisjZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLworCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhydywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhydykKKwogI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socncpCQkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJCQlcCiAJcmF3X3J3bG9ja190ICpfX3JlYWRfbG9ja19wdHIgPSAocncpOwkJCQkJCVwKQEAgLTEzMSw2ICsxNjMsOCBAQAogCX0JCQkJCQkJCQkJXAogfSB3aGlsZSAoMCkKIAorI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCisKICNkZWZpbmUgX19yYXdfcmVhZF91bmxvY2socncpCQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJcmF3X3J3bG9ja190ICpfX3JlYWRfbG9ja19wdHIgPSAocncpOwkJCVwKQEAgLTEzOCwyMCArMTcyLDMzIEBACiB9IHdoaWxlICgwKQogCiAjaWZkZWYgQVNNX1NVUFBPUlRFRAotI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKHJ3KQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJCVwKLSAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCQlcCi0JCSJtb3YgYXIuY2N2ID0gcjBcbiIJCQkJCQlcCi0JCSJkZXAgcjI5ID0gLTEsIHIwLCAzMSwgMTs7XG4iCQkJCQlcCi0JCSIxOlxuIgkJCQkJCQkJXAotCQkibGQ0IHIyID0gWyUwXTs7XG4iCQkJCQkJXAotCQkiY21wNC5lcSBwMCxwNyA9IHIwLHIyXG4iCQkJCQlcCi0JCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWIgXG4iCQkJCQlcCi0JCSJjbXB4Y2hnNC5hY3EgcjIgPSBbJTBdLCByMjksIGFyLmNjdjs7XG4iCQkJXAotCQkiY21wNC5lcSBwMCxwNyA9IHIwLCByMlxuIgkJCQkJXAotCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDFiOztcbiIJCQkJCVwKLQkJOjogInIiKHJ3KSA6ICJhci5jY3YiLCAicDciLCAicjIiLCAicjI5IiwgIm1lbW9yeSIpOwkJXAotfSB3aGlsZSgwKQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK19fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocmF3X3J3bG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInRiaXQubnogcDYsIHAwID0gJTEsICUyXG4iCisJCSJtb3YgYXIuY2N2ID0gcjBcbiIKKwkJImRlcCByMjkgPSAtMSwgcjAsIDMxLCAxXG4iCisJCSJici5mZXcgM2Y7O1xuIgorCQkiMTpcbiIKKwkJIihwNikgc3NtIHBzci5pXG4iCisJCSIyOlxuIgorCQkiaGludCBAcGF1c2VcbiIKKwkJImxkNCByMiA9IFslMF07O1xuIgorCQkiY21wNC5lcSBwMCxwNyA9IHIwLCByMlxuIgorCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDJiXG4iCisJCSIocDYpIHJzbSBwc3IuaVxuIgorCQkiOztcbiIKKwkJIjM6XG4iCisJCSJjbXB4Y2hnNC5hY3EgcjIgPSBbJTBdLCByMjksIGFyLmNjdjs7XG4iCisJCSJjbXA0LmVxIHAwLHA3ID0gcjAsIHIyXG4iCisJCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWI7O1xuIgorCQk6IDogInIiKGxvY2spLCAiciIoZmxhZ3MpLCAiaSIoSUE2NF9QU1JfSV9CSVQpCisJCTogImFyLmNjdiIsICJwNiIsICJwNyIsICJyMiIsICJyMjkiLCAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9jayhydykgX19yYXdfd3JpdGVfbG9ja19mbGFncyhydywgMCkKIAogI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHJ3KQkJCQkJCQlcCiAoewkJCQkJCQkJCQlcCkBAIC0xNzQsNiArMjIxLDggQEAKIAogI2Vsc2UgLyogIUFTTV9TVVBQT1JURUQgKi8KIAorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGwsIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGwpCisKICNkZWZpbmUgX19yYXdfd3JpdGVfbG9jayhsKQkJCQkJCQkJXAogKHsJCQkJCQkJCQkJCVwKIAlfX3U2NCBpYTY0X3ZhbCwgaWE2NF9zZXRfdmFsID0gaWE2NF9kZXBfbWkoLTEsIDAsIDMxLCAxKTsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDRlMDNjZmUuLjg2YzdkYjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC00MCw1ICs0MCw2IEBACiB9CiAKIGV4dGVybiB2b2lkIGlhNjRfY3B1X2xvY2FsX3RpY2sgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpYTY0X25hdGl2ZV9zY2hlZF9jbG9jayAodm9pZCk7CiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAzMTkzZjQ0Li43YjRjOGM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNDQsMTEgKzQ0LDYgQEAKICNkZWZpbmUgcGFyZW50X25vZGUobmlkKSAobmlkKQogCiAvKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBDUFUgb24gTm9kZSAnbm9kZScuCi0gKi8KLSNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkgKGNwdW1hc2tfZmlyc3QoY3B1bWFza19vZl9ub2RlKG5vZGUpKSkKLQotLyoKICAqIERldGVybWluZXMgdGhlIG5vZGUgZm9yIGEgZ2l2ZW4gcGNpIGJ1cwogICovCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKGJ1cykgUENJX0NPTlRST0xMRVIoYnVzKS0+bm9kZQpAQCAtMTE3LDExICsxMTIsNiBAQAogCiBleHRlcm4gdm9pZCBhcmNoX2ZpeF9waHlzX3BhY2thZ2VfaWQoaW50IG51bSwgdTMyIHNsb3QpOwogCi0jZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyBcCi0JCQkJCUNQVV9NQVNLX0FMTCA6IFwKLQkJCQkJbm9kZV90b19jcHVtYXNrKHBjaWJ1c190b19ub2RlKGJ1cykpIFwKLQkJCQkpCi0KICNkZWZpbmUgY3B1bWFza19vZl9wY2lidXMoYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/CQlcCiAJCQkJIGNwdV9hbGxfbWFzayA6CQkJCVwKIAkJCQkgY3B1bWFza19vZl9ub2RlKHBjaWJ1c190b19ub2RlKGJ1cykpKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IGY2MDcwMTguLjUzZTlkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTMwNSw1ICszMDUsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHV2X2h1Yl9zZW5kX2lwaShpbnQgcG5vZGUsIGludCBhcGljaWQsIGludCB2ZWN0b3IpCit7CisJLyogbm90IGN1cnJlbnRseSBuZWVkZWQgb24gaWE2NCAqLworfQorCisKICNlbmRpZiAvKiBfX0FTTV9JQTY0X1VWX0hVQl9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9tbXJzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCmluZGV4IGMxNDllZjAuLmZlMGI4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaApAQCAtOCw4ICs4LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0lBNjRfVVZfTU1SU19fCi0jZGVmaW5lIF9fQVNNX0lBNjRfVVZfTU1SU19fCisjaWZuZGVmIF9BU01fSUE2NF9VVl9VVl9NTVJTX0gKKyNkZWZpbmUgX0FTTV9JQTY0X1VWX1VWX01NUlNfSAogCiAjZGVmaW5lIFVWX01NUl9FTkFCTEUJCSgxVUwgPDwgNjMpCiAKQEAgLTI0Myw2ICsyNDMsMTU4IEBACiAjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQUxJQVNfMzIgMHgwMDVmMAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHIDB4NjFiMDBVTAorCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMF90bGJfaW50MF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IwX3RsYl9pbnQwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHIDB4NjFiNDBVTAorCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMF90bGJfaW50MV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IwX3RsYl9pbnQxX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHIDB4NjFmMDBVTAorCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMV90bGJfaW50MF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IxX3RsYl9pbnQwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHIDB4NjFmNDBVTAorCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMV90bGJfaW50MV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IxX3RsYl9pbnQxX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfSU5UX0NNUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAjZGVmaW5lIFVWSF9JTlRfQ01QQiAweDIyMDgwVUwKQEAgLTY3MCw0ICs4MjIsNCBAQAogfTsKIAogCi0jZW5kaWYgLyogX19BU01fSUE2NF9VVl9NTVJTX18gKi8KKyNlbmRpZiAvKiBfQVNNX0lBNjRfVVZfVVZfTU1SU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2h5cGVydmlzb3IuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oCmluZGV4IDdhODA0ZTguLmU0MjUyMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oCkBAIC0zMyw5ICszMyw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9YRU5fSFlQRVJWSVNPUl9ICiAjZGVmaW5lIF9BU01fSUE2NF9YRU5fSFlQRVJWSVNPUl9ICiAKLSNpZmRlZiBDT05GSUdfWEVOCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaD4JLyogdG8gY29tcGlsZSBmZWF0dXJlLmMgKi8KICNpbmNsdWRlIDx4ZW4vZmVhdHVyZXMuaD4JCS8qIHRvIGNvbWlwbGUgeGVuLW5ldGZyb250LmMgKi8KQEAgLTQzLDIyICs0MCwzMiBAQAogCiAvKiB4ZW5fZG9tYWluX3R5cGUgaXMgc2V0IGJlZm9yZSBleGVjdXRpbmcgYW55IEMgY29kZSBieSBlYXJseV94ZW5fc2V0dXAgKi8KIGVudW0geGVuX2RvbWFpbl90eXBlIHsKLQlYRU5fTkFUSVZFLAotCVhFTl9QVl9ET01BSU4sCi0JWEVOX0hWTV9ET01BSU4sCisJWEVOX05BVElWRSwJLyogcnVubmluZyBvbiBiYXJlIGhhcmR3YXJlICovCisJWEVOX1BWX0RPTUFJTiwJLyogcnVubmluZyBpbiBhIFBWIGRvbWFpbiAqLworCVhFTl9IVk1fRE9NQUlOLAkvKiBydW5uaW5nIGluIGEgWGVuIGh2bSBkb21haW4qLwogfTsKIAorI2lmZGVmIENPTkZJR19YRU4KIGV4dGVybiBlbnVtIHhlbl9kb21haW5fdHlwZSB4ZW5fZG9tYWluX3R5cGU7CisjZWxzZQorI2RlZmluZSB4ZW5fZG9tYWluX3R5cGUJCVhFTl9OQVRJVkUKKyNlbmRpZgogCiAjZGVmaW5lIHhlbl9kb21haW4oKQkJKHhlbl9kb21haW5fdHlwZSAhPSBYRU5fTkFUSVZFKQotI2RlZmluZSB4ZW5fcHZfZG9tYWluKCkJCSh4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX1BWX0RPTUFJTikKLSNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKHhlbl9wdl9kb21haW4oKSAmJiBcCisjZGVmaW5lIHhlbl9wdl9kb21haW4oKQkJKHhlbl9kb21haW4oKSAmJgkJCVwKKwkJCQkgeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCisjZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKHhlbl9kb21haW4oKSAmJgkJCVwKKwkJCQkgeGVuX2RvbWFpbl90eXBlID09IFhFTl9IVk1fRE9NQUlOKQorCisjaWZkZWYgQ09ORklHX1hFTl9ET00wCisjZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSh4ZW5fcHZfZG9tYWluKCkgJiYJCQlcCiAJCQkJICh4ZW5fc3RhcnRfaW5mby0+ZmxhZ3MgJiBTSUZfSU5JVERPTUFJTikpCi0jZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKHhlbl9kb21haW5fdHlwZSA9PSBYRU5fSFZNX0RPTUFJTikKKyNlbHNlCisjZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSgwKQorI2VuZGlmCiAKLS8qIGRlcHJlY2F0ZWQuIHJlbW92ZSB0aGlzICovCi0jZGVmaW5lIGlzX3J1bm5pbmdfb25feGVuKCkJKHhlbl9kb21haW5fdHlwZSA9PSBYRU5fUFZfRE9NQUlOKQogCisjaWZkZWYgQ09ORklHX1hFTgogZXh0ZXJuIHN0cnVjdCBzaGFyZWRfaW5mbyAqSFlQRVJWSVNPUl9zaGFyZWRfaW5mbzsKIGV4dGVybiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm87CiAKQEAgLTc0LDE2ICs4MSw2IEBACiAKIC8qIEZvciBzZXR1cF9hcmNoKCkgaW4gYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jICovCiB2b2lkIHhlbl9pYTY0X2VuYWJsZV9vcHRfZmVhdHVyZSh2b2lkKTsKLQotI2Vsc2UgLyogQ09ORklHX1hFTiAqLwotCi0jZGVmaW5lIHhlbl9kb21haW4oKQkJKDApCi0jZGVmaW5lIHhlbl9wdl9kb21haW4oKQkJKDApCi0jZGVmaW5lIHhlbl9pbml0aWFsX2RvbWFpbigpCSgwKQotI2RlZmluZSB4ZW5faHZtX2RvbWFpbigpCSgwKQotI2RlZmluZSBpc19ydW5uaW5nX29uX3hlbigpCSgwKQkvKiBkZXByZWNhdGVkLiByZW1vdmUgdGhpcyAqLwogI2VuZGlmCiAKLSNkZWZpbmUgaXNfaW5pdGlhbF94ZW5kb21haW4oKQkoMCkJLyogZGVwcmVjYXRlZC4gcmVtb3ZlIHRoaXMgKi8KLQogI2VuZGlmIC8qIF9BU01fSUE2NF9YRU5fSFlQRVJWSVNPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2luc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oCmluZGV4IDE5YzJhZTEuLmM1M2E0NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oCkBAIC0zMyw2ICszMyw5IEBACiAjZGVmaW5lIF9fcGFyYXZpcnRfd29ya19wcm9jZXNzZWRfc3lzY2FsbF90YXJnZXQgXAogCQkJCQkJeGVuX3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGwKIAorI2RlZmluZSBwYXJhdmlydF9mc3lzY2FsbF90YWJsZQkJCXhlbl9mc3lzY2FsbF90YWJsZQorI2RlZmluZSBwYXJhdmlydF9mc3lzX2J1YmJsZV9kb3duCQl4ZW5fZnN5c19idWJibGVfZG93bgorCiAjZGVmaW5lIE1PVl9GUk9NX0lGQShyZWcpCVwKIAltb3ZsIHJlZyA9IFhTSV9JRkE7CVwKIAk7OwkJCVwKQEAgLTExMCw2ICsxMTMsMjcgQEAKIC5lbmRtCiAjZGVmaW5lIE1PVl9GUk9NX1BTUihwcmVkLCByZWcsIGNsb2IpCV9fTU9WX0ZST01fUFNSIHByZWQsIHJlZywgY2xvYgogCisvKiBhc3N1bWluZyBhci5pdGMgaXMgcmVhZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgTU9WX0ZST01fSVRDKHByZWQsIHByZWRfY2xvYiwgcmVnLCBjbG9iKQkJXAorKHByZWQpCW1vdmwgY2xvYiA9IFhTSV9JVENfT0ZGU0VUOwkJCQlcCisJOzsJCQkJCQkJXAorKHByZWQpCWxkOCBjbG9iID0gW2Nsb2JdOwkJCQkJXAorKHByZWQpCW1vdiByZWcgPSBhci5pdGM7CQkJCQlcCisJOzsJCQkJCQkJXAorKHByZWQpCWFkZCByZWcgPSByZWcsIGNsb2I7CQkJCQlcCisJOzsJCQkJCQkJXAorKHByZWQpCW1vdmwgY2xvYiA9IFhTSV9JVENfTEFTVDsJCQkJXAorCTs7CQkJCQkJCVwKKyhwcmVkKQlsZDggY2xvYiA9IFtjbG9iXTsJCQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJY21wLmdldS51bmMgcHJlZF9jbG9iLCBwMCA9IGNsb2IsIHJlZzsJCQlcCisJOzsJCQkJCQkJXAorKHByZWRfY2xvYikJYWRkIHJlZyA9IDEsIGNsb2I7CQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJbW92bCBjbG9iID0gWFNJX0lUQ19MQVNUOwkJCQlcCisJOzsJCQkJCQkJXAorKHByZWQpCXN0OCBbY2xvYl0gPSByZWcKKwogCiAjZGVmaW5lIE1PVl9UT19JRkEocmVnLCBjbG9iKQlcCiAJbW92bCBjbG9iID0gWFNJX0lGQTsJXApAQCAtMzYyLDYgKzM4NiwxMCBAQAogI2RlZmluZSBSU01fUFNSX0RUCQlcCiAJWEVOX0hZUEVSX1JTTV9QU1JfRFQKIAorI2RlZmluZSBSU01fUFNSX0JFX0koY2xvYjAsIGNsb2IxKQlcCisJUlNNX1BTUl9JKHAwLCBjbG9iMCwgY2xvYjEpOwlcCisJcnVtIHBzci5iZQorCiAjZGVmaW5lIFNTTV9QU1JfRFRfQU5EX1NSTFpfSQlcCiAJWEVOX0hZUEVSX1NTTV9QU1JfRFQKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKaW5kZXggZjAwZmFiNDAuLmU5NTFlNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaApAQCAtMjA5LDYgKzIwOSwxNSBAQAogCQkJdW5zaWduZWQgbG9uZyBrcnNbOF07CS8qIGtlcm5lbCByZWdpc3RlcnMgKi8KIAkJCXVuc2lnbmVkIGxvbmcgdG1wWzE2XTsJLyogdGVtcCByZWdpc3RlcnMKIAkJCQkJCSAgIChlLmcuIGZvciBoeXBlcnByaXZvcHMpICovCisKKwkJCS8qIGl0YyBwYXJhdmlydHVhbGl6YXRpb24KKwkJCSAqIHZBUi5JVEMgPSBtQVIuSVRDICsgaXRjX29mZnNldAorCQkJICogaXRjX2xhc3QgaXMgb25lIHdoaWNoIHdhcyBsYXN0bHkgcGFzc2VkIHRvCisJCQkgKiB0aGUgZ3Vlc3QgT1MgaW4gb3JkZXIgdG8gcHJldmVudCBpdCBmcm9tCisJCQkgKiBnb2luZyBiYWNrd29yZHMuCisJCQkgKi8KKwkJCXVuc2lnbmVkIGxvbmcgaXRjX29mZnNldDsKKwkJCXVuc2lnbmVkIGxvbmcgaXRjX2xhc3Q7CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL21pbnN0YXRlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL21pbnN0YXRlLmgKaW5kZXggNGQ5MmQ5Yi4uYzU3ZmE5MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9taW5zdGF0ZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vbWluc3RhdGUuaApAQCAtMSwzICsxLDEyIEBACisKKyNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORworLyogcmVhZCBhci5pdGMgaW4gYWR2YW5jZSwgYW5kIHVzZSBpdCBiZWZvcmUgbGVhdmluZyBiYW5rIDAgKi8KKyNkZWZpbmUgWEVOX0FDQ09VTlRfR0VUX1NUQU1QCQlcCisJTU9WX0ZST01fSVRDKHBVU3RrLCBwNiwgcjIwLCByMik7CisjZWxzZQorI2RlZmluZSBYRU5fQUNDT1VOVF9HRVRfU1RBTVAKKyNlbmRpZgorCiAvKgogICogRE9fU0FWRV9NSU4gc3dpdGNoZXMgdG8gdGhlIGtlcm5lbCBzdGFja3MgKGlmIG5lY2Vzc2FyeSkgYW5kIHNhdmVzCiAgKiB0aGUgbWluaW11bSBzdGF0ZSBuZWNlc3NhcnkgdGhhdCBhbGxvd3MgdXMgdG8gdHVybiBwc3IuaWMgYmFjawpAQCAtMTIzLDcgKzEzMiw3IEBACiAJOzsJCQkJCQkJCQkJCVwKIC5tZW0ub2Zmc2V0IDAsMDsgc3Q4LnNwaWxsIFtyMTZdPXIyLDE2OwkJCQkJCQkJXAogLm1lbS5vZmZzZXQgOCwwOyBzdDguc3BpbGwgW3IxN109cjMsMTY7CQkJCQkJCQlcCi0JQUNDT1VOVF9HRVRfU1RBTVAJCQkJCQkJCQlcCisJWEVOX0FDQ09VTlRfR0VUX1NUQU1QCQkJCQkJCQkJXAogCWFkZHMgcjI9SUE2NF9QVF9SRUdTX1IxNl9PRkZTRVQscjE7CQkJCQkJCVwKIAk7OwkJCQkJCQkJCQkJXAogCUVYVFJBOwkJCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wYXRjaGxpc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcGF0Y2hsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlOTQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcGF0Y2hsaXN0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wYXRjaGxpc3QuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdAkJXAorCV9feGVuX3N0YXJ0X2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CQkJXAorCV9feGVuX2VuZF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdAorI2RlZmluZSBfX3BhcmF2aXJ0X3N0YXJ0X2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0CVwKKwlfX3hlbl9zdGFydF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdAorI2RlZmluZSBfX3BhcmF2aXJ0X2VuZF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdAlcCisJX194ZW5fZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdAkJCVwKKwlfX3hlbl9zdGFydF9nYXRlX3Z0b3BfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfdnRvcF9wYXRjaGxpc3QJCQlcCisJX194ZW5fZW5kX2dhdGVfdnRvcF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX21ja2lubGV5X2U5X3BhdGNobGlzdAkJXAorCV9feGVuX3N0YXJ0X2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CQlcCisJX194ZW5fZW5kX2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3ByaXZvcC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wcml2b3AuaAppbmRleCA3MWVjNzU0Li5mYjRlYzVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3ByaXZvcC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcHJpdm9wLmgKQEAgLTU1LDYgKzU1LDggQEAKICNkZWZpbmUgWFNJX0JBTksxX1IxNgkJCShYU0lfQkFTRSArIFhTSV9CQU5LMV9SMTZfT0ZTKQogI2RlZmluZSBYU0lfQkFOS05VTQkJCShYU0lfQkFTRSArIFhTSV9CQU5LTlVNX09GUykKICNkZWZpbmUgWFNJX0lIQQkJCQkoWFNJX0JBU0UgKyBYU0lfSUhBX09GUykKKyNkZWZpbmUgWFNJX0lUQ19PRkZTRVQJCQkoWFNJX0JBU0UgKyBYU0lfSVRDX09GRlNFVF9PRlMpCisjZGVmaW5lIFhTSV9JVENfTEFTVAkJCShYU0lfQkFTRSArIFhTSV9JVENfTEFTVF9PRlMpCiAjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTY3LDcgKzY5LDcgQEAKICAqICBtYXkgaGF2ZSBkaWZmZXJlbnQgc2VtYW50aWNzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXkgYXJlIGV4ZWN1dGVkCiAgKiAgYXQgUEwwIHZzIFBMIT0wLiAgV2hlbiBwYXJhdmlydHVhbGl6ZWQsIHRoZXNlIGluc3RydWN0aW9ucyBtdXN0bid0CiAgKiAgYmUgYWxsb3dlZCB0byBleGVjdXRlIGRpcmVjdGx5LCBsZXN0IGluY29ycmVjdCBzZW1hbnRpY3MgcmVzdWx0LiAqLwotZXh0ZXJuIHZvaWQgeGVuX2ZjKHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCB4ZW5fZmModm9pZCAqYWRkcik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fdGhhc2godW5zaWduZWQgbG9uZyBhZGRyKTsKIAogLyogTm90ZSB0aGF0ICJ0dGFnIiBhbmQgImNvdmVyIiBhcmUgYWxzbyBwcml2aWxlZ2Utc2Vuc2l0aXZlOyAidHRhZyIKQEAgLTgwLDggKzgyLDEwIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X2NwdWlkKGludCBpbmRleCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X3BtZChpbnQgaW5kZXgpOwogCisjaWZuZGVmIEFTTV9TVVBQT1JURUQKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRfZWZsYWcodm9pZCk7CS8qIHNlZSB4ZW5faWE2NF9nZXRyZWcgKi8KIGV4dGVybiB2b2lkIHhlbl9zZXRfZWZsYWcodW5zaWduZWQgbG9uZyk7CS8qIHNlZSB4ZW5faWE2NF9zZXRyZWcgKi8KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW5zdHJ1Y3Rpb25zIHBhcmF2aXJ0dWFsaXplZCBmb3IgcGVyZm9ybWFuY2UgKi8KQEAgLTEwNiw2ICsxMTAsNyBAQAogI2RlZmluZSB4ZW5fZ2V0X3ZpcnR1YWxfcGVuZCgpCQlcCiAJKCooKCh1aW50OF90ICopWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIpIC0gMSkpCiAKKyNpZm5kZWYgQVNNX1NVUFBPUlRFRAogLyogQWx0aG91Z2ggYWxsIHByaXZpbGVnZWQgb3BlcmF0aW9ucyBjYW4gYmUgbGVmdCB0byB0cmFwIGFuZCB3aWxsCiAgKiBiZSBwcm9wZXJseSBoYW5kbGVkIGJ5IFhlbiwgc29tZSBhcmUgZnJlcXVlbnQgZW5vdWdoIHRoYXQgd2UgdXNlCiAgKiBoeXBlcnByaXZvcHMgZm9yIHBlcmZvcm1hbmNlLiAqLwpAQCAtMTIzLDYgKzEyOCw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWw0KTsKIGV4dGVybiB2b2lkIHhlbl9zZXRfa3IodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyB2YWwpOwogZXh0ZXJuIHZvaWQgeGVuX3B0Y2dhKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKyNlbmRpZiAvKiAhQVNNX1NVUFBPUlRFRCAqLwogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCBjMzgxZWE5Li41NjI4ZTlhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTUsOSArNSw5IEBACiBleHRyYS15CTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCi0JIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCisJIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGFyYXZpcnRfcGF0Y2hsaXN0Lm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCiAJIHNhbGluZm8ubyBzZXR1cC5vIHNpZ25hbC5vIHN5c19pYTY0Lm8gdGltZS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gXAotCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubworCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubyBkbWEtbWFwcGluZy5vCiAKIG9iai0kKENPTkZJR19JQTY0X0JSTF9FTVUpCSs9IGJybF9lbXUubwogb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykJKz0gYWNwaS1leHQubwpAQCAtMzYsNDYgKzM2LDIzIEBACiBtY2FfcmVjb3ZlcnkteQkJCSs9IG1jYV9kcnYubyBtY2FfZHJ2X2FzbS5vCiBvYmotJChDT05GSUdfSUE2NF9NQ19FUlJfSU5KRUNUKSs9IGVycl9pbmplY3QubwogCi1vYmotJChDT05GSUdfUEFSQVZJUlQpCQkrPSBwYXJhdmlydC5vIHBhcmF2aXJ0ZW50cnkubworb2JqLSQoQ09ORklHX1BBUkFWSVJUKQkJKz0gcGFyYXZpcnQubyBwYXJhdmlydGVudHJ5Lm8gXAorCQkJCSAgIHBhcmF2aXJ0X3BhdGNoLm8KIAogb2JqLSQoQ09ORklHX0lBNjRfRVNJKQkJKz0gZXNpLm8KIGlmbmVxICgkKENPTkZJR19JQTY0X0VTSSksKQogb2JqLXkJCQkJKz0gZXNpX3N0dWIubwkjIG11c3QgYmUgaW4ga2VybmVsIHByb3BlcgogZW5kaWYKIG9iai0kKENPTkZJR19ETUFSKQkJKz0gcGNpLWRtYS5vCi1pZmVxICgkKENPTkZJR19ETUFSKSwgeSkKIG9iai0kKENPTkZJR19TV0lPVExCKQkJKz0gcGNpLXN3aW90bGIubwotZW5kaWYKLQotIyBUaGUgZ2F0ZSBEU08gaW1hZ2UgaXMgYnVpbHQgdXNpbmcgYSBzcGVjaWFsIGxpbmtlciBzY3JpcHQuCi10YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KLQotZXh0cmEteSArPSBnYXRlLnNvIGdhdGUtc3ltcy5vIGdhdGUubGRzIGdhdGUubwogCiAjIGZwX2VtdWxhdGUoKSBleHBlY3RzIGYyLWY1LGYxNi1mMzEgdG8gY29udGFpbiB0aGUgdXNlci1sZXZlbCBzdGF0ZS4KIENGTEFHU190cmFwcy5vICArPSAtbWZpeGVkLXJhbmdlPWYyLWY1LGYxNi1mMzEKIAotQ1BQRkxBR1NfZ2F0ZS5sZHMgOj0gLVAgLUMgLVUkKEFSQ0gpCi0KLXF1aWV0X2NtZF9nYXRlID0gR0FURSAkQAotICAgICAgY21kX2dhdGUgPSAkKENDKSAtbm9zdGRsaWIgJChHQVRFQ0ZMQUdTXyQoQEYpKSAtV2wsLVQsJChmaWx0ZXItb3V0IEZPUkNFLCReKSAtbyAkQAotCi1HQVRFQ0ZMQUdTX2dhdGUuc28gPSAtc2hhcmVkIC1zIC1XbCwtc29uYW1lPWxpbnV4LWdhdGUuc28uMSBcCi0JCSAgICAgJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9c3lzdikKLSQob2JqKS9nYXRlLnNvOiAkKG9iaikvZ2F0ZS5sZHMgJChvYmopL2dhdGUubyBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGdhdGUpCi0KLSQob2JqKS9idWlsdC1pbi5vOiAkKG9iaikvZ2F0ZS1zeW1zLm8KLSQob2JqKS9idWlsdC1pbi5vOiBsZF9mbGFncyArPSAtUiAkKG9iaikvZ2F0ZS1zeW1zLm8KLQotR0FURUNGTEFHU19nYXRlLXN5bXMubyA9IC1yCi0kKG9iaikvZ2F0ZS1zeW1zLm86ICQob2JqKS9nYXRlLmxkcyAkKG9iaikvZ2F0ZS5vIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsZ2F0ZSkKLQotIyBnYXRlLWRhdGEubyBjb250YWlucyB0aGUgZ2F0ZSBEU08gaW1hZ2UgYXMgZGF0YSBpbiBzZWN0aW9uIC5kYXRhLmdhdGUuCi0jIFdlIG11c3QgYnVpbGQgZ2F0ZS5zbyBiZWZvcmUgd2UgY2FuIGFzc2VtYmxlIGl0LgotIyBOb3RlOiBrYnVpbGQgZG9lcyBub3QgdHJhY2sgdGhpcyBkZXBlbmRlbmN5IGR1ZSB0byB1c2FnZSBvZiAuaW5jYmluCi0kKG9iaikvZ2F0ZS1kYXRhLm86ICQob2JqKS9nYXRlLnNvCisjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KK2luY2x1ZGUgJChzcmN0cmVlKS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlLmdhdGUKKyMgdGVsbCBjb21waWxlZCBmb3IgbmF0aXZlCitDUFBGTEFHU19nYXRlLmxkcyArPSAtRF9fSUE2NF9HQVRFX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIAogIyBDYWxjdWxhdGUgTlJfSVJRID0gbWF4KElBNjRfTkFUSVZFX05SX0lSUVMsIFhFTl9OUl9JUlFTLCAuLi4pIGJhc2VkIG9uIGNvbmZpZwogZGVmaW5lIHNlZC15CkBAIC0xMTEsOSArODgsOSBAQAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9pbmNsdWRlL2FzbS1pYTY0L25yLWlycXMuaAogCiAjCi0jIG5hdGl2ZSBpdnQuUyBhbmQgZW50cnkuUworIyBuYXRpdmUgaXZ0LlMsIGVudHJ5LlMgYW5kIGZzeXMuUwogIwotQVNNX1BBUkFWSVJUX09CSlMgPSBpdnQubyBlbnRyeS5vCitBU01fUEFSQVZJUlRfT0JKUyA9IGl2dC5vIGVudHJ5Lm8gZnN5cy5vCiBkZWZpbmUgcGFyYXZpcnR1YWxpemVkX25hdGl2ZQogQUZMQUdTXyQoMSkgKz0gLURfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIEFGTEFHU19wdmNoay1zZWQtJCgxKSArPSAtRF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1BWQ0hFQ0sKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUuZ2F0ZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUuZ2F0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg3Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZS5nYXRlCkBAIC0wLDAgKzEsMjcgQEAKKyMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0LgorCit0YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KKworZXh0cmEteSArPSBnYXRlLnNvIGdhdGUtc3ltcy5vIGdhdGUubGRzIGdhdGUubworCitDUFBGTEFHU19nYXRlLmxkcyA6PSAtUCAtQyAtVSQoQVJDSCkKKworcXVpZXRfY21kX2dhdGUgPSBHQVRFICRACisgICAgICBjbWRfZ2F0ZSA9ICQoQ0MpIC1ub3N0ZGxpYiAkKEdBVEVDRkxBR1NfJChARikpIC1XbCwtVCwkKGZpbHRlci1vdXQgRk9SQ0UsJF4pIC1vICRACisKK0dBVEVDRkxBR1NfZ2F0ZS5zbyA9IC1zaGFyZWQgLXMgLVdsLC1zb25hbWU9bGludXgtZ2F0ZS5zby4xIFwKKwkJICAgICAkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQorJChvYmopL2dhdGUuc286ICQob2JqKS9nYXRlLmxkcyAkKG9iaikvZ2F0ZS5vIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZ2F0ZSkKKworJChvYmopL2J1aWx0LWluLm86ICQob2JqKS9nYXRlLXN5bXMubworJChvYmopL2J1aWx0LWluLm86IGxkX2ZsYWdzICs9IC1SICQob2JqKS9nYXRlLXN5bXMubworCitHQVRFQ0ZMQUdTX2dhdGUtc3ltcy5vID0gLXIKKyQob2JqKS9nYXRlLXN5bXMubzogJChvYmopL2dhdGUubGRzICQob2JqKS9nYXRlLm8gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxnYXRlKQorCisjIGdhdGUtZGF0YS5vIGNvbnRhaW5zIHRoZSBnYXRlIERTTyBpbWFnZSBhcyBkYXRhIGluIHNlY3Rpb24gLmRhdGEuZ2F0ZS4KKyMgV2UgbXVzdCBidWlsZCBnYXRlLnNvIGJlZm9yZSB3ZSBjYW4gYXNzZW1ibGUgaXQuCisjIE5vdGU6IGtidWlsZCBkb2VzIG5vdCB0cmFjayB0aGlzIGRlcGVuZGVuY3kgZHVlIHRvIHVzYWdlIG9mIC5pbmNiaW4KKyQob2JqKS9nYXRlLWRhdGEubzogJChvYmopL2dhdGUuc28KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggYmRlZjJjZS4uNTUxMDMxNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQlwb3NzaWJsZSwgbWF4KChwb3NzaWJsZSAtIGF2YWlsYWJsZV9jcHVzKSwgMCkpOwogCiAJZm9yIChpID0gMDsgaSA8IHBvc3NpYmxlOyBpKyspCi0JCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7CiB9CiAKIGludCBhY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnBjcHUpCkBAIC05MjgsOSArOTI4LDkgQEAKIAlidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CiAJYnVmZmVyLnBvaW50ZXIgPSBOVUxMOwogCi0JY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOwotCWlmIChjcHUgPj0gTlJfQ1BVUykKKwljcHVtYXNrX2NvbXBsZW1lbnQoJnRtcF9tYXAsIGNwdV9wcmVzZW50X21hc2spOworCWNwdSA9IGNwdW1hc2tfZmlyc3QoJnRtcF9tYXApOworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhY3BpX21hcF9jcHUybm9kZShoYW5kbGUsIGNwdSwgcGh5c2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA3NDJkYmIxLi5hZjU2NTAxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMTYsNSArMzE2LDcgQEAKIAlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX0JBTksxX1IxNl9PRlMsIGJhbmsxX3JlZ3NbMF0pOwogCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjBOQVRTX09GUywgdmJuYXQpOwogCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjFOQVRTX09GUywgdm5hdCk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JVENfT0ZGU0VUX09GUywgaXRjX29mZnNldCk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JVENfTEFTVF9PRlMsIGl0Y19sYXN0KTsKICNlbmRpZiAvKiBDT05GSUdfWEVOICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2lhNjQva2VybmVsL2RtYS1tYXBwaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2YTJhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZG1hLW1hcHBpbmcuYwpAQCAtMCwwICsxLDEzIEBACisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBzeXN0ZW0gKi8KK2ludCBpb21tdV9kZXRlY3RlZCBfX3JlYWRfbW9zdGx5OworCitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CitFWFBPUlRfU1lNQk9MKGRtYV9vcHMpOworCitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9nZXRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZG1hX29wczsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2dldF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggZWZhZmYxNS4uN2VmODBlOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC00NTYsNiArNDU2LDcgQEAKIAkJIEdSQU5VTEVST1VORERPV04oKHVuc2lnbmVkIGxvbmcpIHBhbF92YWRkciksCiAJCSBwdGVfdmFsKHBmbl9wdGUoX19wYShwYWxfdmFkZHIpID4+IFBBR0VfU0hJRlQsIFBBR0VfS0VSTkVMKSksCiAJCSBJQTY0X0dSQU5VTEVfU0hJRlQpOworCXBhcmF2aXJ0X2R2X3NlcmlhbGl6ZV9kYXRhKCk7CiAJaWE2NF9zZXRfcHNyKHBzcik7CQkvKiByZXN0b3JlIHBzciAqLwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZTUzNDFlMi4uY2NmZGVlZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtNzM1LDcgKzczNSw3IEBACiBfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGw6CiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlhZGRzIHIyPVBUKExPQURSUykrMTYscjEyCi0ocFVTdGspCW1vdi5tIHIyMj1hci5pdGMJCQkvLyBmZXRjaCB0aW1lIGF0IGxlYXZlCisJTU9WX0ZST01fSVRDKHBVU3RrLCBwOSwgcjIyLCByMTkpCS8vIGZldGNoIHRpbWUgYXQgbGVhdmUKIAlhZGRzIHIxOD1USV9GTEFHUytJQTY0X1RBU0tfU0laRSxyMTMKIAk7OwogKHA2KQlsZDQgcjMxPVtyMThdCQkJCS8vIGxvYWQgY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncwpAQCAtOTg0LDcgKzk4NCw3IEBACiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAkucHJlZC5yZWwubXV0ZXggcFVTdGsscEtTdGsKIAlNT1ZfRlJPTV9QU1IocEtTdGssIHIyMiwgcjI5KQkvLyBNMiByZWFkIFBTUiBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAotKHBVU3RrKQltb3YubSByMjI9YXIuaXRjCS8vIE0gIGZldGNoIHRpbWUgYXQgbGVhdmUKKwlNT1ZfRlJPTV9JVEMocFVTdGssIHA5LCByMjIsIHIyOSkJLy8gTSAgZmV0Y2ggdGltZSBhdCBsZWF2ZQogCW5vcC5pIDAKIAk7OwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZnN5cy5TIGIvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKaW5kZXggYzE2MjVjNy4uMzU2N2Q1NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9mc3lzLlMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICNpbmNsdWRlICJlbnRyeS5oIgorI2luY2x1ZGUgInBhcmF2aXJ0X2luc3QuaCIKIAogLyoKICAqIFNlZSBEb2N1bWVudGF0aW9uL2lhNjQvZnN5cy50eHQgZm9yIGRldGFpbHMgb24gZnN5c2NhbGxzLgpAQCAtMjc5LDcgKzI4MCw3IEBACiAocDkpCWNtcC5lcSBwMTMscDAgPSAwLHIzMAkvLyBpZiBtbWlvX3B0ciwgY2xlYXIgcDEzIGppdHRlciBjb250cm9sCiAJOzsKIAkucHJlZC5yZWwubXV0ZXggcDgscDkKLShwOCkJbW92IHIyID0gYXIuaXRjCQkvLyBDUFVfVElNRVIuIDM2IGNsb2NrcyBsYXRlbmN5ISEhCisJTU9WX0ZST01fSVRDKHA4LCBwNiwgcjIsIHIxMCkJLy8gQ1BVX1RJTUVSLiAzNiBjbG9ja3MgbGF0ZW5jeSEhIQogKHA5KQlsZDggcjIgPSBbcjMwXQkJLy8gTU1JT19USU1FUi4gQ291bGQgYWxzbyBoYXZlIGxhdGVuY3kgaXNzdWVzLi4KIChwMTMpCWxkOCByMjUgPSBbcjE5XQkJLy8gZ2V0IGl0Y19sYXN0Y3ljbGUgdmFsdWUKIAlsZDggcjkgPSBbcjIyXSxJQTY0X1RJTUVTUEVDX1RWX05TRUNfT0ZGU0VUCS8vIHR2X3NlYwpAQCAtNDE4LDcgKzQxOSw3IEBACiAJbW92IHIxNz0oMSA8PCAoU0lHS0lMTCAtIDEpKSB8ICgxIDw8IChTSUdTVE9QIC0gMSkpCiAJOzsKIAotCXJzbSBwc3IuaQkJCQkvLyBtYXNrIGludGVycnVwdCBkZWxpdmVyeQorCVJTTV9QU1JfSShwMCwgcjE4LCByMTkpCQkJLy8gbWFzayBpbnRlcnJ1cHQgZGVsaXZlcnkKIAltb3YgYXIuY2N2PTAKIAlhbmRjbSByMTQ9cjE0LHIxNwkJCS8vIGZpbHRlciBvdXQgU0lHS0lMTCAmIFNJR1NUT1AKIApAQCAtNDkxLDcgKzQ5Miw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXN0NC5yZWwgW3IzMV09cjAJCQkvLyByZWxlYXNlIHRoZSBsb2NrCiAjZW5kaWYKLQlzc20gcHNyLmkKKwlTU01fUFNSX0kocDAsIHA5LCByMzEpCiAJOzsKIAogCXNybHouZAkJCQkJLy8gZW5zdXJlIHBzci5pIGlzIHNldCBhZ2FpbgpAQCAtNTEzLDcgKzUxNCw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXN0NC5yZWwgW3IzMV09cjAJCQkvLyByZWxlYXNlIHRoZSBsb2NrCiAjZW5kaWYKLQlzc20gcHNyLmkKKwlTU01fUFNSX0kocDAsIHA5LCByMTcpCiAJOzsKIAlzcmx6LmQKIAlici5zcHRrLm1hbnkgZnN5c19mYWxsYmFja19zeXNjYWxsCS8vIHdpdGggc2lnbmFsIHBlbmRpbmcsIGRvIHRoZSBoZWF2eS13ZWlnaHQgc3lzY2FsbApAQCAtNTIxLDcgKzUyMiw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogLmxvY2tfY29udGVudGlvbjoKIAkvKiBSYXRoZXIgdGhhbiBzcGlubmluZyBoZXJlLCBmYWxsIGJhY2sgb24gZG9pbmcgYSBoZWF2eS13ZWlnaHQgc3lzY2FsbC4gICovCi0Jc3NtIHBzci5pCisJU1NNX1BTUl9JKHAwLCBwOSwgcjE3KQogCTs7CiAJc3Jsei5kCiAJYnIuc3B0ay5tYW55IGZzeXNfZmFsbGJhY2tfc3lzY2FsbApAQCAtNTkyLDE3ICs1OTMsMTcgQEAKIAlhZGRzIHIxNz0tMTAyNCxyMTUKIAltb3ZsIHIxND1zeXNfY2FsbF90YWJsZQogCTs7Ci0JcnNtIHBzci5pCisJUlNNX1BTUl9JKHAwLCByMjYsIHIyNykKIAlzaGxhZGQgcjE4PXIxNywzLHIxNAogCTs7CiAJbGQ4IHIxOD1bcjE4XQkJCQkvLyBsb2FkIG5vcm1hbCAoaGVhdnktd2VpZ2h0KSBzeXNjYWxsIGVudHJ5LXBvaW50Ci0JbW92IHIyOT1wc3IJCQkJLy8gcmVhZCBwc3IgKDEyIGN5YyBsb2FkIGxhdGVuY3kpCisJTU9WX0ZST01fUFNSKHAwLCByMjksIHIyNikJCS8vIHJlYWQgcHNyICgxMiBjeWMgbG9hZCBsYXRlbmN5KQogCW1vdiByMjc9YXIucnNjCiAJbW92IHIyMT1hci5mcHNyCiAJbW92IHIyNj1hci5wZnMKIEVORChmc3lzX2ZhbGxiYWNrX3N5c2NhbGwpCiAJLyogRkFMTCBUSFJPVUdIICovCi1HTE9CQUxfRU5UUlkoZnN5c19idWJibGVfZG93bikKK0dMT0JBTF9FTlRSWShwYXJhdmlydF9mc3lzX2J1YmJsZV9kb3duKQogCS5wcm9sb2d1ZQogCS5hbHRycCBiNgogCS5ib2R5CkBAIC02NDAsNyArNjQxLDcgQEAKIAkgKgogCSAqIFBTUi5CRSA6IGFscmVhZHkgaXMgdHVybmVkIG9mZiBpbiBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMoKQogCSAqIFBTUi5BQyA6IGRvbid0IGNhcmUgKGtlcm5lbCBub3JtYWxseSB0dXJucyBQU1IuQUMgb24pCi0JICogUFNSLkkgIDogYWxyZWFkeSB0dXJuZWQgb2ZmIGJ5IHRoZSB0aW1lIGZzeXNfYnViYmxlX2Rvd24gZ2V0cworCSAqIFBTUi5JICA6IGFscmVhZHkgdHVybmVkIG9mZiBieSB0aGUgdGltZSBwYXJhdmlydF9mc3lzX2J1YmJsZV9kb3duIGdldHMKIAkgKgkgICAgaW52b2tlZAogCSAqIFBTUi5ERkw6IGFsd2F5cyAwIChrZXJuZWwgbmV2ZXIgdHVybnMgaXQgb24pCiAJICogUFNSLkRGSDogZG9uJ3QgY2FyZSAtLS0ga2VybmVsIG5ldmVyIHRvdWNoZXMgZjMyLWYxMjcgb24gaXRzIG93bgpAQCAtNjUwLDcgKzY1MSw3IEBACiAJICogUFNSLkRCIDogZG9uJ3QgY2FyZSAtLS0ga2VybmVsIG5ldmVyIGVuYWJsZXMga2VybmVsLWxldmVsCiAJICoJICAgIGJyZWFrcG9pbnRzCiAJICogUFNSLlRCIDogbXVzdCBiZSAwIGFscmVhZHk7IGlmIGl0IHdhc24ndCB6ZXJvIG9uIGVudHJ5IHRvCi0JICogICAgICAgICAgX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjLCB0aGUgYnJhbmNoIHRvIGZzeXNfYnViYmxlX2Rvd24KKwkgKiAgICAgICAgICBfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMsIHRoZSBicmFuY2ggdG8gcGFyYXZpcnRfZnN5c19idWJibGVfZG93bgogCSAqICAgICAgICAgIHdpbGwgdHJpZ2dlciBhIHRha2VuIGJyYW5jaDsgdGhlIHRha2VuLXRyYXAtaGFuZGxlciB0aGVuCiAJICogICAgICAgICAgY29udmVydHMgdGhlIHN5c2NhbGwgaW50byBhIGJyZWFrLWJhc2VkIHN5c3RlbS1jYWxsLgogCSAqLwpAQCAtNjgzLDcgKzY4NCw3IEBACiAJOzsKIAltb3YgYXIucnNjPTAJCQkJLy8gTTIgICBzZXQgZW5mb3JjZWQgbGF6eSBtb2RlLCBwbCAwLCBMRSwgbG9hZHJzPTAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwotCW1vdi5tIHIzMD1hci5pdGMJCQkvLyBNICAgIGdldCBjeWNsZSBmb3IgYWNjb3VudGluZworCU1PVl9GUk9NX0lUQyhwMCwgcDYsIHIzMCwgcjIzKQkJLy8gTSAgICBnZXQgY3ljbGUgZm9yIGFjY291bnRpbmcKICNlbHNlCiAJbm9wLm0gMAogI2VuZGlmCkBAIC03MzQsMjEgKzczNSwyMSBAQAogCW1vdiBycD1yMTQJCQkJLy8gSTAgICBzZXQgdGhlIHJlYWwgcmV0dXJuIGFkZHIKIAlhbmQgcjM9X1RJRl9TWVNDQUxMX1RSQUNFQVVESVQscjMJLy8gQQogCTs7Ci0Jc3NtIHBzci5pCQkJCS8vIE0yICAgd2UncmUgb24ga2VybmVsIHN0YWNrcyBub3csIHJlZW5hYmxlIGlycXMKKwlTU01fUFNSX0kocDAsIHA2LCByMjIpCQkJLy8gTTIgICB3ZSdyZSBvbiBrZXJuZWwgc3RhY2tzIG5vdywgcmVlbmFibGUgaXJxcwogCWNtcC5lcSBwOCxwMD1yMyxyMAkJCS8vIEEKIChwMTApCWJyLmNvbmQuc3BudC5tYW55IGlhNjRfcmV0X2Zyb21fc3lzY2FsbAkvLyBCICAgIHJldHVybiBpZiBiYWQgY2FsbC1mcmFtZSBvciByMTUgaXMgYSBOYVQKIAogCW5vcC5tIDAKIChwOCkJYnIuY2FsbC5zcHRrLm1hbnkgYjY9YjYJCQkvLyBCICAgIChpZ25vcmUgcmV0dXJuIGFkZHJlc3MpCiAJYnIuY29uZC5zcG50IGlhNjRfdHJhY2Vfc3lzY2FsbAkJLy8gQgotRU5EKGZzeXNfYnViYmxlX2Rvd24pCitFTkQocGFyYXZpcnRfZnN5c19idWJibGVfZG93bikKIAogCS5yb2RhdGEKIAkuYWxpZ24gOAotCS5nbG9ibCBmc3lzY2FsbF90YWJsZQorCS5nbG9ibCBwYXJhdmlydF9mc3lzY2FsbF90YWJsZQogCi0JZGF0YTggZnN5c19idWJibGVfZG93bgotZnN5c2NhbGxfdGFibGU6CisJZGF0YTggcGFyYXZpcnRfZnN5c19idWJibGVfZG93bgorcGFyYXZpcnRfZnN5c2NhbGxfdGFibGU6CiAJZGF0YTggZnN5c19uaV9zeXNjYWxsCiAJZGF0YTggMAkJCQkvLyBleGl0CQkJLy8gMTAyNQogCWRhdGE4IDAJCQkJLy8gcmVhZApAQCAtMTAzMyw0ICsxMDM0LDQgQEAKIAogCS8vIGZpbGwgaW4gemVyb3MgZm9yIHRoZSByZW1haW5pbmcgZW50cmllcwogCS56ZXJvOgotCS5zcGFjZSBmc3lzY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMgLSAuemVybywgMAorCS5zcGFjZSBwYXJhdmlydF9mc3lzY2FsbF90YWJsZSArIDgqTlJfc3lzY2FsbHMgLSAuemVybywgMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMgYi9hcmNoL2lhNjQva2VybmVsL2dhdGUuUwppbmRleCA3NGIxY2NjLi5jZjVlMGExIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2dhdGUuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2dhdGUuUwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlICJwYXJhdmlydF9pbnN0LmgiCiAKIC8qCiAgKiBXZSBjYW4ndCBlYXNpbHkgcmVmZXIgdG8gc3ltYm9scyBpbnNpZGUgdGhlIGtlcm5lbC4gIFRvIGF2b2lkIGZ1bGwgcnVudGltZSByZWxvY2F0aW9uLApAQCAtNDgsODcgKzQ5LDYgQEAKIH0KIEVORChfX2tlcm5lbF9zeXNjYWxsX3ZpYV9icmVhaykKIAotLyoKLSAqIE9uIGVudHJ5OgotICoJcjExID0gc2F2ZWQgYXIucGZzCi0gKglyMTUgPSBzeXN0ZW0gY2FsbCAjCi0gKgliMCAgPSBzYXZlZCByZXR1cm4gYWRkcmVzcwotICoJYjYgID0gcmV0dXJuIGFkZHJlc3MKLSAqIE9uIGV4aXQ6Ci0gKglyMTEgPSBzYXZlZCBhci5wZnMKLSAqCXIxNSA9IHN5c3RlbSBjYWxsICMKLSAqCWIwICA9IHNhdmVkIHJldHVybiBhZGRyZXNzCi0gKglhbGwgb3RoZXIgInNjcmF0Y2giIHJlZ2lzdGVyczoJdW5kZWZpbmVkCi0gKglhbGwgInByZXNlcnZlZCIgcmVnaXN0ZXJzOglzYW1lIGFzIG9uIGVudHJ5Ci0gKi8KLQotR0xPQkFMX0VOVFJZKF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYykKLQkucHJvbG9ndWUKLQkuYWx0cnAgYjYKLQkuYm9keQotewotCS8qCi0JICogTm90ZTogdGhlIGtlcm5lbCBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbnMgaW4gdGhpcwotCSAqIGJ1bmRsZSBnZXQgZXhlY3V0ZWQuICBUaGUgcmVtYWluaW5nIGNvZGUgbXVzdCBiZSBzYWZlIGV2ZW4gaWYKLQkgKiB0aGV5IGRvIG5vdCBnZXQgZXhlY3V0ZWQuCi0JICovCi0JYWRkcyByMTc9LTEwMjQscjE1CQkJLy8gQQotCW1vdiByMTA9MAkJCQkvLyBBICAgIGRlZmF1bHQgdG8gc3VjY2Vzc2Z1bCBzeXNjYWxsIGV4ZWN1dGlvbgotCWVwYwkJCQkJLy8gQgljYXVzZXMgc3BsaXQtaXNzdWUKLX0KLQk7OwotCXJzbSBwc3IuYmUgfCBwc3IuaQkJCS8vIE0yICg1IGN5YyB0byBzcmx6LmQpCi0JTE9BRF9GU1lTQ0FMTF9UQUJMRShyMTQpCQkvLyBYCi0JOzsKLQltb3YgcjE2PUlBNjRfS1IoQ1VSUkVOVCkJCS8vIE0yICgxMiBjeWMpCi0Jc2hsYWRkIHIxOD1yMTcsMyxyMTQJCQkvLyBBCi0JbW92IHIxOT1OUl9zeXNjYWxscy0xCQkJLy8gQQotCTs7Ci0JbGZldGNoIFtyMThdCQkJCS8vIE0wfDEKLQltb3YgcjI5PXBzcgkJCQkvLyBNMiAoMTIgY3ljKQotCS8vIElmIHIxNyBpcyBhIE5hVCwgcDYgd2lsbCBiZSB6ZXJvCi0JY21wLmdldSBwNixwNz1yMTkscjE3CQkJLy8gQSAgICAoc3lzbnIgPiAwICYmIHN5c25yIDwgMTAyNCtOUl9zeXNjYWxscyk/Ci0JOzsKLQltb3YgcjIxPWFyLmZwc3IJCQkJLy8gTTIgKDEyIGN5YykKLQl0bmF0Lm56IHAxMCxwOT1yMTUJCQkvLyBJMAotCW1vdi5pIHIyNj1hci5wZnMJCQkvLyBJMCAod291bGQgc3RhbGwgYW55aG93IGR1ZSB0byBzcmx6LmQuLi4pCi0JOzsKLQlzcmx6LmQJCQkJCS8vIE0wIChmb3JjZXMgc3BsaXQtaXNzdWUpIGVuc3VyZSBQU1IuQkU9PTAKLShwNikJbGQ4IHIxOD1bcjE4XQkJCQkvLyBNMHwxCi0Jbm9wLmkgMAotCTs7Ci0Jbm9wLm0gMAotKHA2KQl0Yml0LnoudW5jIHA4LHAwPXIxOCwwCQkJLy8gSTAgKGR1YWwtaXNzdWVzIHdpdGggIm1vdiBiNz1yMTgiISkKLQlub3AuaSAwCi0JOzsKLShwOCkJc3NtIHBzci5pCi0ocDYpCW1vdiBiNz1yMTgJCQkJLy8gSTAKLShwOCkJYnIuZHB0ay5tYW55IGI3CQkJCS8vIEIKLQotCW1vdiByMjc9YXIucnNjCQkJCS8vIE0yICgxMiBjeWMpCi0vKgotICogYnJsLmNvbmQgZG9lc24ndCB3b3JrIGFzIGludGVuZGVkIGJlY2F1c2UgdGhlIGxpbmtlciB3b3VsZCBjb252ZXJ0IHRoaXMgYnJhbmNoCi0gKiBpbnRvIGEgYnJhbmNoIHRvIGEgUExULiAgUGVyaGFwcyB0aGVyZSB3aWxsIGJlIGEgd2F5IHRvIGF2b2lkIHRoaXMgd2l0aCBzb21lCi0gKiBmdXR1cmUgdmVyc2lvbiBvZiB0aGUgbGlua2VyLiAgSW4gdGhlIG1lYW50aW1lLCB3ZSBqdXN0IHVzZSBhbiBpbmRpcmVjdCBicmFuY2gKLSAqIGluc3RlYWQuCi0gKi8KLSNpZmRlZiBDT05GSUdfSVRBTklVTQotKHA2KQlhZGQgcjE0PS04LHIxNAkJCQkvLyByMTQgPC0gYWRkciBvZiBmc3lzX2J1YmJsZV9kb3duIGVudHJ5Ci0JOzsKLShwNikJbGQ4IHIxND1bcjE0XQkJCQkvLyByMTQgPC0gZnN5c19idWJibGVfZG93bgotCTs7Ci0ocDYpCW1vdiBiNz1yMTQKLShwNikJYnIuc3B0ay5tYW55IGI3Ci0jZWxzZQotCUJSTF9DT05EX0ZTWVNfQlVCQkxFX0RPV04ocDYpCi0jZW5kaWYKLQlzc20gcHNyLmkKLQltb3YgcjEwPS0xCi0ocDEwKQltb3Ygcjg9RUlOVkFMCi0ocDkpCW1vdiByOD1FTk9TWVMKLQlGU1lTX1JFVFVSTgotRU5EKF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYykKLQogIwlkZWZpbmUgQVJHMF9PRkYJCSgxNiArIElBNjRfU0lHRlJBTUVfQVJHMF9PRkZTRVQpCiAjCWRlZmluZSBBUkcxX09GRgkJKDE2ICsgSUE2NF9TSUdGUkFNRV9BUkcxX09GRlNFVCkKICMJZGVmaW5lIEFSRzJfT0ZGCQkoMTYgKyBJQTY0X1NJR0ZSQU1FX0FSRzJfT0ZGU0VUKQpAQCAtMzc0LDMgKzI5NCw5MiBAQAogCS8vIGludmFsYSBub3QgbmVjZXNzYXJ5IGFzIHRoYXQgd2lsbCBoYXBwZW4gd2hlbiByZXR1cm5pbmcgdG8gdXNlci1tb2RlCiAJYnIuY29uZC5zcHRrIGJhY2tfZnJvbV9yZXN0b3JlX3JicwogRU5EKF9fa2VybmVsX3NpZ3RyYW1wKQorCisvKgorICogT24gZW50cnk6CisgKglyMTEgPSBzYXZlZCBhci5wZnMKKyAqCXIxNSA9IHN5c3RlbSBjYWxsICMKKyAqCWIwICA9IHNhdmVkIHJldHVybiBhZGRyZXNzCisgKgliNiAgPSByZXR1cm4gYWRkcmVzcworICogT24gZXhpdDoKKyAqCXIxMSA9IHNhdmVkIGFyLnBmcworICoJcjE1ID0gc3lzdGVtIGNhbGwgIworICoJYjAgID0gc2F2ZWQgcmV0dXJuIGFkZHJlc3MKKyAqCWFsbCBvdGhlciAic2NyYXRjaCIgcmVnaXN0ZXJzOgl1bmRlZmluZWQKKyAqCWFsbCAicHJlc2VydmVkIiByZWdpc3RlcnM6CXNhbWUgYXMgb24gZW50cnkKKyAqLworCitHTE9CQUxfRU5UUlkoX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjKQorCS5wcm9sb2d1ZQorCS5hbHRycCBiNgorCS5ib2R5Cit7CisJLyoKKwkgKiBOb3RlOiB0aGUga2VybmVsIGNhbm5vdCBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgdHdvIGluc3RydWN0aW9ucyBpbiB0aGlzCisJICogYnVuZGxlIGdldCBleGVjdXRlZC4gIFRoZSByZW1haW5pbmcgY29kZSBtdXN0IGJlIHNhZmUgZXZlbiBpZgorCSAqIHRoZXkgZG8gbm90IGdldCBleGVjdXRlZC4KKwkgKi8KKwlhZGRzIHIxNz0tMTAyNCxyMTUJCQkvLyBBCisJbW92IHIxMD0wCQkJCS8vIEEgICAgZGVmYXVsdCB0byBzdWNjZXNzZnVsIHN5c2NhbGwgZXhlY3V0aW9uCisJZXBjCQkJCQkvLyBCCWNhdXNlcyBzcGxpdC1pc3N1ZQorfQorCTs7CisJUlNNX1BTUl9CRV9JKHIyMCwgcjIyKQkJCS8vIE0yICg1IGN5YyB0byBzcmx6LmQpCisJTE9BRF9GU1lTQ0FMTF9UQUJMRShyMTQpCQkvLyBYCisJOzsKKwltb3YgcjE2PUlBNjRfS1IoQ1VSUkVOVCkJCS8vIE0yICgxMiBjeWMpCisJc2hsYWRkIHIxOD1yMTcsMyxyMTQJCQkvLyBBCisJbW92IHIxOT1OUl9zeXNjYWxscy0xCQkJLy8gQQorCTs7CisJbGZldGNoIFtyMThdCQkJCS8vIE0wfDEKKwlNT1ZfRlJPTV9QU1IocDAsIHIyOSwgcjgpCQkvLyBNMiAoMTIgY3ljKQorCS8vIElmIHIxNyBpcyBhIE5hVCwgcDYgd2lsbCBiZSB6ZXJvCisJY21wLmdldSBwNixwNz1yMTkscjE3CQkJLy8gQSAgICAoc3lzbnIgPiAwICYmIHN5c25yIDwgMTAyNCtOUl9zeXNjYWxscyk/CisJOzsKKwltb3YgcjIxPWFyLmZwc3IJCQkJLy8gTTIgKDEyIGN5YykKKwl0bmF0Lm56IHAxMCxwOT1yMTUJCQkvLyBJMAorCW1vdi5pIHIyNj1hci5wZnMJCQkvLyBJMCAod291bGQgc3RhbGwgYW55aG93IGR1ZSB0byBzcmx6LmQuLi4pCisJOzsKKwlzcmx6LmQJCQkJCS8vIE0wIChmb3JjZXMgc3BsaXQtaXNzdWUpIGVuc3VyZSBQU1IuQkU9PTAKKyhwNikJbGQ4IHIxOD1bcjE4XQkJCQkvLyBNMHwxCisJbm9wLmkgMAorCTs7CisJbm9wLm0gMAorKHA2KQl0Yml0LnoudW5jIHA4LHAwPXIxOCwwCQkJLy8gSTAgKGR1YWwtaXNzdWVzIHdpdGggIm1vdiBiNz1yMTgiISkKKwlub3AuaSAwCisJOzsKKwlTU01fUFNSX0kocDgsIHAxNCwgcjI1KQorKHA2KQltb3YgYjc9cjE4CQkJCS8vIEkwCisocDgpCWJyLmRwdGsubWFueSBiNwkJCQkvLyBCCisKKwltb3YgcjI3PWFyLnJzYwkJCQkvLyBNMiAoMTIgY3ljKQorLyoKKyAqIGJybC5jb25kIGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZCBiZWNhdXNlIHRoZSBsaW5rZXIgd291bGQgY29udmVydCB0aGlzIGJyYW5jaAorICogaW50byBhIGJyYW5jaCB0byBhIFBMVC4gIFBlcmhhcHMgdGhlcmUgd2lsbCBiZSBhIHdheSB0byBhdm9pZCB0aGlzIHdpdGggc29tZQorICogZnV0dXJlIHZlcnNpb24gb2YgdGhlIGxpbmtlci4gIEluIHRoZSBtZWFudGltZSwgd2UganVzdCB1c2UgYW4gaW5kaXJlY3QgYnJhbmNoCisgKiBpbnN0ZWFkLgorICovCisjaWZkZWYgQ09ORklHX0lUQU5JVU0KKyhwNikJYWRkIHIxND0tOCxyMTQJCQkJLy8gcjE0IDwtIGFkZHIgb2YgZnN5c19idWJibGVfZG93biBlbnRyeQorCTs7CisocDYpCWxkOCByMTQ9W3IxNF0JCQkJLy8gcjE0IDwtIGZzeXNfYnViYmxlX2Rvd24KKwk7OworKHA2KQltb3YgYjc9cjE0CisocDYpCWJyLnNwdGsubWFueSBiNworI2Vsc2UKKwlCUkxfQ09ORF9GU1lTX0JVQkJMRV9ET1dOKHA2KQorI2VuZGlmCisJU1NNX1BTUl9JKHAwLCBwMTQsIHIxMCkKKwltb3YgcjEwPS0xCisocDEwKQltb3Ygcjg9RUlOVkFMCisocDkpCW1vdiByOD1FTk9TWVMKKwlGU1lTX1JFVFVSTgorCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisJLyoKKwkgKiBwYWRkIHRvIG1ha2UgdGhlIHNpemUgb2YgdGhpcyBzeW1ib2wgY29uc3RhbnQKKwkgKiBpbmRlcGVuZGVudCBvZiBwYXJhdmlydHVhbGl6YXRpb24uCisJICovCisJLmFsaWduIFBBR0VfU0laRSAvIDgKKyNlbmRpZgorRU5EKF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5sZHMuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5sZHMuUwppbmRleCAzY2IxYWJjLi44OGM2NGVkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLmxkcy5TCkBAIC03LDYgKzcsNyBAQAogCiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSAicGFyYXZpcnRfcGF0Y2hsaXN0LmgiCiAKIFNFQ1RJT05TCiB7CkBAIC0zMywyMSArMzQsMjEgQEAKIAkuID0gR0FURV9BRERSICsgMHg2MDA7CiAKIAkuZGF0YS5wYXRjaAkJOiB7Ci0JCV9fc3RhcnRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QgPSAuOworCQlfX3BhcmF2aXJ0X3N0YXJ0X2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0ID0gLjsKIAkJKiguZGF0YS5wYXRjaC5tY2tpbmxleV9lOSkKLQkJX19lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QgPSAuOworCQlfX3BhcmF2aXJ0X2VuZF9nYXRlX21ja2lubGV5X2U5X3BhdGNobGlzdCA9IC47CiAKLQkJX19zdGFydF9nYXRlX3Z0b3BfcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9zdGFydF9nYXRlX3Z0b3BfcGF0Y2hsaXN0ID0gLjsKIAkJKiguZGF0YS5wYXRjaC52dG9wKQotCQlfX2VuZF9nYXRlX3Z0b3BfcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9lbmRfZ2F0ZV92dG9wX3BhdGNobGlzdCA9IC47CiAKLQkJX19zdGFydF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QgPSAuOwogCQkqKC5kYXRhLnBhdGNoLmZzeXNjYWxsX3RhYmxlKQotCQlfX2VuZF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0ID0gLjsKIAotCQlfX3N0YXJ0X2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9zdGFydF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdCA9IC47CiAJCSooLmRhdGEucGF0Y2guYnJsX2ZzeXNfYnViYmxlX2Rvd24pCi0JCV9fZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9lbmRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QgPSAuOwogCX0JCQkJCQk6cmVhZGFibGUKIAogCS5JQV82NC51bndpbmRfaW5mbwk6IHsgKiguSUFfNjQudW53aW5kX2luZm8qKSB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCmluZGV4IDU5MzAxYzQuLjIzZjg0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TCkBAIC0xMDUwLDcgKzEwNTAsNyBAQAogICogZXhjZXB0IHRoYXQgdGhlIG11bHRpcGxpY2F0aW9uIGFuZCB0aGUgc2hpZnQgYXJlIGRvbmUgd2l0aCAxMjgtYml0CiAgKiBpbnRlcm1lZGlhdGUgcHJlY2lzaW9uIHNvIHRoYXQgd2UgY2FuIHByb2R1Y2UgYSBmdWxsIDY0LWJpdCByZXN1bHQuCiAgKi8KLUdMT0JBTF9FTlRSWShzY2hlZF9jbG9jaykKK0dMT0JBTF9FTlRSWShpYTY0X25hdGl2ZV9zY2hlZF9jbG9jaykKIAlhZGRsIHI4PVRISVNfQ1BVKGNwdV9pbmZvKSArIElBNjRfQ1BVSU5GT19OU0VDX1BFUl9DWUNfT0ZGU0VULHIwCiAJbW92Lm0gcjk9YXIuaXRjCQkvLyBmZXRjaCBjeWNsZS1jb3VudGVyCQkJCSgzNSBjeWMpCiAJOzsKQEAgLTEwNjYsNyArMTA2NiwxMyBAQAogCTs7CiAJc2hycCByOD1yOSxyOCxJQTY0X05TRUNfUEVSX0NZQ19TSElGVAogCWJyLnJldC5zcHRrLm1hbnkgcnAKLUVORChzY2hlZF9jbG9jaykKK0VORChpYTY0X25hdGl2ZV9zY2hlZF9jbG9jaykKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisJLy91bnNpZ25lZCBsb25nIGxvbmcKKwkvL3NjaGVkX2Nsb2NrKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCJpYTY0X25hdGl2ZV9zY2hlZF9jbG9jayIpKSk7CisJLmdsb2JhbCBzY2hlZF9jbG9jaworc2NoZWRfY2xvY2sgPSBpYTY0X25hdGl2ZV9zY2hlZF9jbG9jaworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogR0xPQkFMX0VOVFJZKGN5Y2xlX3RvX2NwdXRpbWUpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2l2dC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwppbmRleCBmNjc1ZDhlMy4uZWM5YTVmZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2l2dC5TCkBAIC04MDQsNyArODA0LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAJc3QxIFtyMTZdPXIwCQkJCS8vIE0yfDMgY2xlYXIgY3VycmVudC0+dGhyZWFkLm9uX3VzdGFjayBmbGFnCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKLQltb3YubSByMzA9YXIuaXRjCQkJLy8gTSAgICBnZXQgY3ljbGUgZm9yIGFjY291bnRpbmcKKwlNT1ZfRlJPTV9JVEMocDAsIHAxNCwgcjMwLCByMTgpCQkvLyBNICAgIGdldCBjeWNsZSBmb3IgYWNjb3VudGluZwogI2Vsc2UKIAltb3YgYjY9cjMwCQkJCS8vIEkwICAgc2V0dXAgc3lzY2FsbCBoYW5kbGVyIGJyYW5jaCByZWcgZWFybHkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tYWNodmVjLmMgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwppbmRleCA3Y2NiMjI4Li5kNDFhNDBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYwpAQCAtMSw1ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTc1LDE0ICs3NSwxNiBAQAogRVhQT1JUX1NZTUJPTChtYWNodmVjX3RpbWVyX2ludGVycnVwdCk7CiAKIHZvaWQKLW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK21hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCW1iKCk7CiB9CiBFWFBPUlRfU1lNQk9MKG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlKTsKIAogdm9pZAotbWFjaHZlY19kbWFfc3luY19zZyAoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuLCBpbnQgZGlyKQorbWFjaHZlY19kbWFfc3luY19zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG4sCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJbWIoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IGJhYjFkZTIuLjhmMzNhODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMTQ1Niw5ICsxNDU2LDkgQEAKIAogCWlhNjRfbWNhX2NtY19pbnRfaGFuZGxlcihjbWNfaXJxLCBhcmcpOwogCi0JZm9yICgrK2NwdWlkIDsgY3B1aWQgPCBOUl9DUFVTICYmICFjcHVfb25saW5lKGNwdWlkKSA7IGNwdWlkKyspOworCWNwdWlkID0gY3B1bWFza19uZXh0KGNwdWlkKzEsIGNwdV9vbmxpbmVfbWFzayk7CiAKLQlpZiAoY3B1aWQgPCBOUl9DUFVTKSB7CisJaWYgKGNwdWlkIDwgbnJfY3B1X2lkcykgewogCQlwbGF0Zm9ybV9zZW5kX2lwaShjcHVpZCwgSUE2NF9DTUNQX1ZFQ1RPUiwgSUE2NF9JUElfRE1fSU5ULCAwKTsKIAl9IGVsc2UgewogCQkvKiBJZiBubyBsb2cgcmVjb3JkLCBzd2l0Y2ggb3V0IG9mIHBvbGxpbmcgbW9kZSAqLwpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAogCWlhNjRfbWNhX2NwZV9pbnRfaGFuZGxlcihjcGVfaXJxLCBhcmcpOwogCi0JZm9yICgrK2NwdWlkIDsgY3B1aWQgPCBOUl9DUFVTICYmICFjcHVfb25saW5lKGNwdWlkKSA7IGNwdWlkKyspOworCWNwdWlkID0gY3B1bWFza19uZXh0KGNwdWlkKzEsIGNwdV9vbmxpbmVfbWFzayk7CiAKIAlpZiAoY3B1aWQgPCBOUl9DUFVTKSB7CiAJCXBsYXRmb3JtX3NlbmRfaXBpKGNwdWlkLCBJQTY0X0NQRVBfVkVDVE9SLCBJQTY0X0lQSV9ETV9JTlQsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWFhN2Q5MC4uZGEzYjBjZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC00NDYsNiArNDQ2LDE0IEBACiAJCQltb2QtPmFyY2gub3BkID0gczsKIAkJZWxzZSBpZiAoc3RyY21wKCIuSUFfNjQudW53aW5kIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCiAJCQltb2QtPmFyY2gudW53aW5kID0gczsKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKwkJZWxzZSBpZiAoc3RyY21wKCIucGFyYXZpcnRfYnVuZGxlcyIsCisJCQkJc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2gucGFyYXZpcnRfYnVuZGxlcyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLnBhcmF2aXJ0X2luc3RzIiwKKwkJCQlzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5wYXJhdmlydF9pbnN0cyA9IHM7CisjZW5kaWYKIAogCWlmICghbW9kLT5hcmNoLmNvcmVfcGx0IHx8ICFtb2QtPmFyY2guaW5pdF9wbHQgfHwgIW1vZC0+YXJjaC5nb3QgfHwgIW1vZC0+YXJjaC5vcGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogc2VjdGlvbnMgbWlzc2luZ1xuIiwgbW9kLT5uYW1lKTsKQEAgLTUyNSw4ICs1MzMsNyBAQAogCQkJZ290byBmb3VuZDsKIAogCS8qIE5vdCBlbm91Z2ggR09UIGVudHJpZXM/ICovCi0JaWYgKGUgPj0gKHN0cnVjdCBnb3RfZW50cnkgKikgKG1vZC0+YXJjaC5nb3QtPnNoX2FkZHIgKyBtb2QtPmFyY2guZ290LT5zaF9zaXplKSkKLQkJQlVHKCk7CisJQlVHX09OKGUgPj0gKHN0cnVjdCBnb3RfZW50cnkgKikgKG1vZC0+YXJjaC5nb3QtPnNoX2FkZHIgKyBtb2QtPmFyY2guZ290LT5zaF9zaXplKSk7CiAKIAllLT52YWwgPSB2YWx1ZTsKIAkrK21vZC0+YXJjaC5uZXh0X2dvdF9lbnRyeTsKQEAgLTkyMSw2ICs5MjgsMzAgQEAKIAlERUJVR1AoIiVzOiBpbml0OiBlbnRyeT0lcFxuIiwgX19mdW5jX18sIG1vZC0+aW5pdCk7CiAJaWYgKG1vZC0+YXJjaC51bndpbmQpCiAJCXJlZ2lzdGVyX3Vud2luZF90YWJsZShtb2QpOworI2lmZGVmIENPTkZJR19QQVJBVklSVAorICAgICAgICBpZiAobW9kLT5hcmNoLnBhcmF2aXJ0X2J1bmRsZXMpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKnN0YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZC0+YXJjaC5wYXJhdmlydF9idW5kbGVzLT5zaF9hZGRyOworICAgICAgICAgICAgICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqZW5kID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIChtb2QtPmFyY2gucGFyYXZpcnRfYnVuZGxlcy0+c2hfYWRkciArCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2J1bmRsZXMtPnNoX3NpemUpOworCisgICAgICAgICAgICAgICAgcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnVuZGxlKHN0YXJ0LCBlbmQpOworICAgICAgICB9CisgICAgICAgIGlmIChtb2QtPmFyY2gucGFyYXZpcnRfaW5zdHMpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICpzdGFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2luc3RzLT5zaF9hZGRyOworICAgICAgICAgICAgICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKmVuZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgKG1vZC0+YXJjaC5wYXJhdmlydF9pbnN0cy0+c2hfYWRkciArCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2luc3RzLT5zaF9zaXplKTsKKworICAgICAgICAgICAgICAgIHBhcmF2aXJ0X3BhdGNoX2FwcGx5X2luc3Qoc3RhcnQsIGVuZCk7CisgICAgICAgIH0KKyNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCmluZGV4IGU1YzU3ZjQuLmE0ZjE5YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCkBAIC0xMDAyLDggKzEwMDIsNiBAQAogCQkqcGRpciA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoCiAJCQkJcGFsaW5mb19lbnRyaWVzW2pdLm5hbWUsIDAsIGNwdV9kaXIsCiAJCQkJcGFsaW5mb19yZWFkX2VudHJ5LCAodm9pZCAqKWYudmFsdWUpOwotCQlpZiAoKnBkaXIpCi0JCQkoKnBkaXIpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlwZGlyKys7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IDlmMTRjMTYuLmEyMWQ3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTQ2LDEzICs0NiwyMyBAQAogICogaW5pdGlhbGl6YXRpb24gaG9va3MuCiAgKi8KIAotc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOworc3RhdGljIHZvaWQgX19pbml0CitpYTY0X25hdGl2ZV9wYXRjaF9icmFuY2godW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKK3N0cnVjdCBwdl9pbml0X29wcyBwdl9pbml0X29wcyA9Cit7CisjaWZkZWYgQVNNX1NVUFBPUlRFRAorCS5wYXRjaF9idW5kbGUgPSBpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGUsCisjZW5kaWYKKwkucGF0Y2hfYnJhbmNoID0gaWE2NF9uYXRpdmVfcGF0Y2hfYnJhbmNoLAorfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogcHZfY3B1X29wcwogICogaW50cmluc2ljcyBob29rcy4KICAqLwogCisjaWZuZGVmIEFTTV9TVVBQT1JURUQKIC8qIGlhNjRfbmF0aXZlX3h4eCBhcmUgbWFjcm9zIHNvIHRoYXQgd2UgaGF2ZSB0byBtYWtlIHRoZW0gcmVhbCBmdW5jdGlvbnMgKi8KIAogI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMShuYW1lKQkJCQkJXApAQCAtNjAsNyArNzAsMTQgQEAKIAlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh1bnNpZ25lZCBsb25nIGFyZykJXAogCXsJCQkJCQkJXAogCQlpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcpOwkJCVwKLQl9CQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzFfVk9JRChuYW1lKQkJCQlcCisJc3RhdGljIHZvaWQJCQkJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModm9pZCAqYXJnKQkJXAorCXsJCQkJCQkJXAorCQlpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcpOwkJCVwKKwl9CiAKICNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzIobmFtZSkJCQkJCVwKIAlzdGF0aWMgdm9pZAkJCQkJCVwKQEAgLTY4LDcgKzg1LDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzEpCVwKIAl7CQkJCQkJCVwKIAkJaWE2NF9uYXRpdmVfICMjIG5hbWUoYXJnMCwgYXJnMSk7CQlcCi0JfQkJCQkJCQlcCisJfQogCiAjZGVmaW5lIERFRklORV9GVU5DMChuYW1lKQkJCVwKIAlzdGF0aWMgdW5zaWduZWQgbG9uZwkJCVwKQEAgLTg0LDcgKzEwMSw3IEBACiAJCXJldHVybiBpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcpOwlcCiAJfQkJCQkJCVwKIAotREVGSU5FX1ZPSURfRlVOQzEoZmMpOworREVGSU5FX1ZPSURfRlVOQzFfVk9JRChmYyk7CiBERUZJTkVfVk9JRF9GVU5DMShpbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUpOwogCiBERUZJTkVfVk9JRF9GVU5DMihwdGNnYSk7CkBAIC0yNzQsNiArMjkxLDI2NiBAQAogCQlicmVhazsKIAl9CiB9CisjZWxzZQorCisjZGVmaW5lIF9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkJCQkJCVwKKwlleHRlcm4gY29uc3QgY2hhciBpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZGlyZWN0X3N0YXJ0W107CVwKKwlleHRlcm4gY29uc3QgY2hhciBpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZGlyZWN0X2VuZFtdOwlcCisJYXNtICgiLmFsaWduIDMyXG4iCQkJCQkJXAorCSAgICAgIi5wcm9jIGlhNjRfbmF0aXZlXyIgI25hbWUgIl9mdW5jXG4iCQkJXAorCSAgICAgImlhNjRfbmF0aXZlXyIgI25hbWUgIl9mdW5jOlxuIgkJCQlcCisJICAgICAiaWE2NF9uYXRpdmVfIiAjbmFtZSAiX2RpcmVjdF9zdGFydDpcbiIJCQlcCisJICAgICBjb2RlCQkJCQkJCVwKKwkgICAgICJpYTY0X25hdGl2ZV8iICNuYW1lICJfZGlyZWN0X2VuZDpcbiIJCQlcCisJICAgICAiYnIuY29uZC5zcHRrLm1hbnkgYjZcbiIJCQkJCVwKKwkgICAgICIuZW5kcCBpYTY0X25hdGl2ZV8iICNuYW1lICJfZnVuY1xuIikKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMChuYW1lLCBjb2RlKQkJCQlcCisJZXh0ZXJuIHZvaWQJCQkJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModm9pZCk7CQkJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMShuYW1lLCBjb2RlKQkJCQlcCisJZXh0ZXJuIHZvaWQJCQkJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModW5zaWduZWQgbG9uZyBhcmcpOwlcCisJX19ERUZJTkVfRlVOQyhuYW1lLCBjb2RlKQorCisjZGVmaW5lIERFRklORV9WT0lEX0ZVTkMxX1ZPSUQobmFtZSwgY29kZSkJCQlcCisJZXh0ZXJuIHZvaWQJCQkJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModm9pZCAqYXJnKTsJCVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzIobmFtZSwgY29kZSkJCQkJXAorCWV4dGVybiB2b2lkCQkJCQkJXAorCWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9mdW5jKHVuc2lnbmVkIGxvbmcgYXJnMCwJXAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSk7CVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX0ZVTkMwKG5hbWUsIGNvZGUpCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModm9pZCk7CVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX0ZVTkMxKG5hbWUsIHR5cGUsIGNvZGUpCQkJXAorCWV4dGVybiB1bnNpZ25lZCBsb25nCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh0eXBlIGFyZyk7CVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKK0RFRklORV9WT0lEX0ZVTkMxX1ZPSUQoZmMsCisJCSAgICAgICAiZmMgcjhcbiIpOworREVGSU5FX1ZPSURfRlVOQzEoaW50cmluX2xvY2FsX2lycV9yZXN0b3JlLAorCQkgICI7O1xuIgorCQkgICIgICAgIGNtcC5uZSBwNiwgcDcgPSByOCwgcjBcbiIKKwkJICAiOztcbiIKKwkJICAiKHA2KSBzc20gcHNyLmlcbiIKKwkJICAiKHA3KSByc20gcHNyLmlcbiIKKwkJICAiOztcbiIKKwkJICAiKHA2KSBzcmx6LmRcbiIpOworCitERUZJTkVfVk9JRF9GVU5DMihwdGNnYSwKKwkJICAicHRjLmdhIHI4LCByOVxuIik7CitERUZJTkVfVk9JRF9GVU5DMihzZXRfcnIsCisJCSAgIm1vdiBycltyOF0gPSByOVxuIik7CisKKy8qIGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfUFNSKSAmIElBNjRfUFNSX0kgKi8KK0RFRklORV9GVU5DMChnZXRfcHNyX2ksCisJICAgICAibW92IHIyID0gIiBfX3N0cmluZ2lmeSgxIDw8IElBNjRfUFNSX0lfQklUKSAiXG4iCisJICAgICAibW92IHI4ID0gcHNyXG4iCisJICAgICAiOztcbiIKKwkgICAgICJhbmQgcjggPSByMiwgcjhcbiIpOworCitERUZJTkVfRlVOQzEodGhhc2gsIHVuc2lnbmVkIGxvbmcsCisJICAgICAidGhhc2ggcjggPSByOFxuIik7CitERUZJTkVfRlVOQzEoZ2V0X2NwdWlkLCBpbnQsCisJICAgICAibW92IHI4ID0gY3B1aWRbcjhdXG4iKTsKK0RFRklORV9GVU5DMShnZXRfcG1kLCBpbnQsCisJICAgICAibW92IHI4ID0gcG1kW3I4XVxuIik7CitERUZJTkVfRlVOQzEoZ2V0X3JyLCB1bnNpZ25lZCBsb25nLAorCSAgICAgIm1vdiByOCA9IHJyW3I4XVxuIik7CisKK0RFRklORV9WT0lEX0ZVTkMwKHNzbV9pLAorCQkgICJzc20gcHNyLmlcbiIpOworREVGSU5FX1ZPSURfRlVOQzAocnNtX2ksCisJCSAgInJzbSBwc3IuaVxuIik7CisKK2V4dGVybiB2b2lkCitpYTY0X25hdGl2ZV9zZXRfcnIwX3RvX3JyNF9mdW5jKHVuc2lnbmVkIGxvbmcgdmFsMCwgdW5zaWduZWQgbG9uZyB2YWwxLAorCQkJCXVuc2lnbmVkIGxvbmcgdmFsMiwgdW5zaWduZWQgbG9uZyB2YWwzLAorCQkJCXVuc2lnbmVkIGxvbmcgdmFsNCk7CitfX0RFRklORV9GVU5DKHNldF9ycjBfdG9fcnI0LAorCSAgICAgICJtb3YgcnJbcjBdID0gcjhcbiIKKwkgICAgICAibW92bCByMiA9IDB4MjAwMDAwMDAwMDAwMDAwMFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJtb3YgcnJbcjJdID0gcjlcbiIKKwkgICAgICAic2hsIHIzID0gcjIsIDFcbiIJLyogbW92bCByMyA9IDB4NDAwMDAwMDAwMDAwMDAwMCAqLworCSAgICAgICI7O1xuIgorCSAgICAgICJhZGQgcjIgPSByMiwgcjNcbiIJLyogbW92bCByMiA9IDB4NjAwMDAwMDAwMDAwMDAwMCAqLworCSAgICAgICJtb3YgcnJbcjNdID0gcjEwXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIm1vdiBycltyMl0gPSByMTFcbiIKKwkgICAgICAic2hsIHIzID0gcjMsIDFcbiIJLyogbW92bCByMyA9IDB4ODAwMDAwMDAwMDAwMDAwMCAqLworCSAgICAgICI7O1xuIgorCSAgICAgICJtb3YgcnJbcjNdID0gcjE0XG4iKTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWE2NF9uYXRpdmVfZ2V0cmVnX2Z1bmMoaW50IHJlZ251bSk7Cithc20oIi5nbG9iYWwgaWE2NF9uYXRpdmVfZ2V0cmVnX2Z1bmNcbiIpOworI2RlZmluZSBfX0RFRklORV9HRVRfUkVHKGlkLCByZWcpCQkJXAorCSJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR18gIyMgaWQpICJcbiIJXAorCSI7O1xuIgkJCQkJCVwKKwkiY21wLmVxIHA2LCBwMCA9IHIyLCByOFxuIgkJCVwKKwkiOztcbiIJCQkJCQlcCisJIihwNikgbW92IHI4ID0gIiAjcmVnICJcbiIJCQlcCisJIihwNikgYnIuY29uZC5zcHRrLm1hbnkgYjZcbiIJCQlcCisJIjs7XG4iCisjZGVmaW5lIF9fREVGSU5FX0dFVF9BUihpZCwgcmVnKQlfX0RFRklORV9HRVRfUkVHKEFSXyAjIyBpZCwgYXIucmVnKQorI2RlZmluZSBfX0RFRklORV9HRVRfQ1IoaWQsIHJlZykJX19ERUZJTkVfR0VUX1JFRyhDUl8gIyMgaWQsIGNyLnJlZykKKworX19ERUZJTkVfRlVOQyhnZXRyZWcsCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhHUCwgZ3ApCisJICAgICAgLypfX0RFRklORV9HRVRfUkVHKElQLCBpcCkqLyAvKiByZXR1cm5lZCBpcCB2YWx1ZSBzaG91bGRuJ3QgYmUgY29uc3RhbnQgKi8KKwkgICAgICBfX0RFRklORV9HRVRfUkVHKFBTUiwgcHNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoVFAsIHRwKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoU1AsIHNwKQorCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9LUjAsIGFyMCkKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSMSwgYXIxKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfS1IyLCBhcjIpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9LUjMsIGFyMykKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSNCwgYXI0KQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfS1I1LCBhcjUpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9LUjYsIGFyNikKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSNywgYXI3KQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihSU0MsIHJzYykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoQlNQLCBic3ApCisJICAgICAgX19ERUZJTkVfR0VUX0FSKEJTUFNUT1JFLCBic3BzdG9yZSkKKwkgICAgICBfX0RFRklORV9HRVRfQVIoUk5BVCwgcm5hdCkKKwkgICAgICBfX0RFRklORV9HRVRfQVIoRkNSLCBmY3IpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKEVGTEFHLCBlZmxhZykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoQ1NELCBjc2QpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKFNTRCwgc3NkKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfQ0ZMQUcsIGFyMjcpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKEZTUiwgZnNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihGSVIsIGZpcikKKwkgICAgICBfX0RFRklORV9HRVRfQVIoRkRSLCBmZHIpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKENDViwgY2N2KQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihVTkFULCB1bmF0KQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihGUFNSLCBmcHNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihJVEMsIGl0YykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoUEZTLCBwZnMpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKExDLCBsYykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoRUMsIGVjKQorCisJICAgICAgX19ERUZJTkVfR0VUX0NSKERDUiwgZGNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJVE0sIGl0bSkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVZBLCBpdmEpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKFBUQSwgcHRhKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJUFNSLCBpcHNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJU1IsIGlzcikKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSUlQLCBpaXApCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElGQSwgaWZhKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJVElSLCBpdGlyKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJSVBBLCBpaXBhKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJRlMsIGlmcykKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSUlNLCBpaW0pCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElIQSwgaWhhKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihMSUQsIGxpZCkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVZSLCBpdnIpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKFRQUiwgdHByKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihFT0ksIGVvaSkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVJSMCwgaXJyMCkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVJSMSwgaXJyMSkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVJSMiwgaXJyMikKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVJSMywgaXJyMykKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSVRWLCBpdHYpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKFBNViwgcG12KQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihDTUNWLCBjbWN2KQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihMUlIwLCBscnIwKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihMUlIxLCBscnIxKQorCisJICAgICAgIm1vdiByOCA9IC0xXG4iCS8qIHVuc3VwcG9ydGVkIGNhc2UgKi8KKwkpOworCitleHRlcm4gdm9pZCBpYTY0X25hdGl2ZV9zZXRyZWdfZnVuYyhpbnQgcmVnbnVtLCB1bnNpZ25lZCBsb25nIHZhbCk7Cithc20oIi5nbG9iYWwgaWE2NF9uYXRpdmVfc2V0cmVnX2Z1bmNcbiIpOworI2RlZmluZSBfX0RFRklORV9TRVRfUkVHKGlkLCByZWcpCQkJXAorCSJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR18gIyMgaWQpICJcbiIJXAorCSI7O1xuIgkJCQkJCVwKKwkiY21wLmVxIHA2LCBwMCA9IHIyLCByOVxuIgkJCVwKKwkiOztcbiIJCQkJCQlcCisJIihwNikgbW92ICIgI3JlZyAiID0gcjhcbiIJCQlcCisJIihwNikgYnIuY29uZC5zcHRrLm1hbnkgYjZcbiIJCQlcCisJIjs7XG4iCisjZGVmaW5lIF9fREVGSU5FX1NFVF9BUihpZCwgcmVnKQlfX0RFRklORV9TRVRfUkVHKEFSXyAjIyBpZCwgYXIucmVnKQorI2RlZmluZSBfX0RFRklORV9TRVRfQ1IoaWQsIHJlZykJX19ERUZJTkVfU0VUX1JFRyhDUl8gIyMgaWQsIGNyLnJlZykKK19fREVGSU5FX0ZVTkMoc2V0cmVnLAorCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19QU1JfTCkgIlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJjbXAuZXEgcDYsIHAwID0gcjIsIHI5XG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIihwNikgbW92IHBzci5sID0gcjhcbiIKKyNpZmRlZiBIQVZFX1NFUklBTElaRV9ESVJFQ1RJVkUKKwkgICAgICAiLnNlcmlhbGl6ZS5kYXRhXG4iCisjZW5kaWYKKwkgICAgICAiKHA2KSBici5jb25kLnNwdGsubWFueSBiNlxuIgorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoR1AsIGdwKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoU1AsIHNwKQorCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9LUjAsIGFyMCkKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSMSwgYXIxKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfS1IyLCBhcjIpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9LUjMsIGFyMykKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSNCwgYXI0KQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfS1I1LCBhcjUpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9LUjYsIGFyNikKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSNywgYXI3KQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihSU0MsIHJzYykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoQlNQLCBic3ApCisJICAgICAgX19ERUZJTkVfU0VUX0FSKEJTUFNUT1JFLCBic3BzdG9yZSkKKwkgICAgICBfX0RFRklORV9TRVRfQVIoUk5BVCwgcm5hdCkKKwkgICAgICBfX0RFRklORV9TRVRfQVIoRkNSLCBmY3IpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKEVGTEFHLCBlZmxhZykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoQ1NELCBjc2QpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKFNTRCwgc3NkKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfQ0ZMQUcsIGFyMjcpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKEZTUiwgZnNyKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihGSVIsIGZpcikKKwkgICAgICBfX0RFRklORV9TRVRfQVIoRkRSLCBmZHIpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKENDViwgY2N2KQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihVTkFULCB1bmF0KQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihGUFNSLCBmcHNyKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihJVEMsIGl0YykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoUEZTLCBwZnMpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKExDLCBsYykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoRUMsIGVjKQorCisJICAgICAgX19ERUZJTkVfU0VUX0NSKERDUiwgZGNyKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJVE0sIGl0bSkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVZBLCBpdmEpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKFBUQSwgcHRhKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJUFNSLCBpcHNyKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJU1IsIGlzcikKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSUlQLCBpaXApCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElGQSwgaWZhKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJVElSLCBpdGlyKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJSVBBLCBpaXBhKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJRlMsIGlmcykKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSUlNLCBpaW0pCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElIQSwgaWhhKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihMSUQsIGxpZCkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVZSLCBpdnIpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKFRQUiwgdHByKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihFT0ksIGVvaSkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVJSMCwgaXJyMCkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVJSMSwgaXJyMSkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVJSMiwgaXJyMikKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVJSMywgaXJyMykKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSVRWLCBpdHYpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKFBNViwgcG12KQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihDTUNWLCBjbWN2KQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihMUlIwLCBscnIwKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihMUlIxLCBscnIxKQorCSk7CisjZW5kaWYKIAogc3RydWN0IHB2X2NwdV9vcHMgcHZfY3B1X29wcyA9IHsKIAkuZmMJCT0gaWE2NF9uYXRpdmVfZmNfZnVuYywKQEAgLTM2Niw0ICs2NDMsMjU4IEBACiAKIHN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wcyA9IHsKIAkuZG9fc3RlYWxfYWNjb3VudGluZyA9IGlhNjRfbmF0aXZlX2RvX3N0ZWFsX2FjY291bnRpbmcsCisJLnNjaGVkX2Nsb2NrID0gaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2ssCiB9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBiaW5hcnkgcGFjdGhpbmcKKyAqIHB2X2luaXRfb3BzLnBhdGNoX2J1bmRsZQorICovCisKKyNpZmRlZiBBU01fU1VQUE9SVEVECisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0RFRklORV9HRVRfUkVHKG5hbWUsIHJlZykJXAorCV9fREVGSU5FX0ZVTkMoZ2V0XyAjIyBuYW1lLAkJCVwKKwkJICAgICAgIjs7XG4iCQkJCVwKKwkJICAgICAgIm1vdiByOCA9ICIgI3JlZyAiXG4iCQlcCisJCSAgICAgICI7O1xuIikKKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfU0VUX1JFRyhuYW1lLCByZWcpCVwKKwlfX0RFRklORV9GVU5DKHNldF8gIyMgbmFtZSwJCQlcCisJCSAgICAgICI7O1xuIgkJCQlcCisJCSAgICAgICJtb3YgIiAjcmVnICIgPSByOFxuIgkJXAorCQkgICAgICAiOztcbiIpCisKKyNkZWZpbmUgSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhuYW1lLCByZWcpCQlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0dFVF9SRUcobmFtZSwgcmVnKTsJXAorCUlBNjRfTkFUSVZFX1BBVENIX0RFRklORV9TRVRfUkVHKG5hbWUsIHJlZykJXAorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihuYW1lLCByZWcpCQkJXAorCUlBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoYXJfICMjIG5hbWUsIGFyLnJlZykKKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IobmFtZSwgcmVnKQkJCVwKKwlJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGNyXyAjIyBuYW1lLCBjci5yZWcpCisKKworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0dFVF9SRUcocHNyLCBwc3IpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0dFVF9SRUcodHAsIHRwKTsKKworLyogSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1NFVF9SRUcocHNyX2wsIHBzci5sKTsgKi8KK19fREVGSU5FX0ZVTkMoc2V0X3Bzcl9sLAorCSAgICAgICI7O1xuIgorCSAgICAgICJtb3YgcHNyLmwgPSByOFxuIgorI2lmZGVmIEhBVkVfU0VSSUFMSVpFX0RJUkVDVElWRQorCSAgICAgICIuc2VyaWFsaXplLmRhdGFcbiIKKyNlbmRpZgorCSAgICAgICI7O1xuIik7CisKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoZ3AsIGdwKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoc3AsIHNwKTsKKworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhrcjAsIGFyMCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyMSwgYXIxKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoa3IyLCBhcjIpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhrcjMsIGFyMyk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyNCwgYXI0KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoa3I1LCBhcjUpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhrcjYsIGFyNik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyNywgYXI3KTsKKworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKHJzYywgcnNjKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihic3AsIGJzcCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoYnNwc3RvcmUsIGJzcHN0b3JlKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihybmF0LCBybmF0KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihmY3IsIGZjcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoZWZsYWcsIGVmbGFnKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihjc2QsIGNzZCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoc3NkLCBzc2QpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhhcjI3LCBhcjI3KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihmc3IsIGZzcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoZmlyLCBmaXIpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGZkciwgZmRyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihjY3YsIGNjdik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIodW5hdCwgdW5hdCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoZnBzciwgZnBzcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoaXRjLCBpdGMpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKHBmcywgcGZzKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihsYywgbGMpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGVjLCBlYyk7CisKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihkY3IsIGRjcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXRtLCBpdG0pOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGl2YSwgaXZhKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihwdGEsIHB0YSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXBzciwgaXBzcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXNyLCBpc3IpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlpcCwgaWlwKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpZmEsIGlmYSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXRpciwgaXRpcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaWlwYSwgaWlwYSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaWZzLCBpZnMpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlpbSwgaWltKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpaGEsIGloYSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IobGlkLCBsaWQpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGl2ciwgaXZyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUih0cHIsIHRwcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoZW9pLCBlb2kpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlycjAsIGlycjApOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlycjEsIGlycjEpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlycjIsIGlycjIpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlycjMsIGlycjMpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGl0diwgaXR2KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihwbXYsIHBtdik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoY21jdiwgY21jdik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IobHJyMCwgbHJyMCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IobHJyMSwgbHJyMSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gaWE2NF9uYXRpdmVfcGF0Y2hfYnVuZGxlX2VsZW1zW10KK19faW5pdGRhdGFfb3JfbW9kdWxlID0KK3sKKyNkZWZpbmUgSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0obmFtZSwgdHlwZSkJCVwKKwl7CQkJCQkJCVwKKwkJKHZvaWQqKWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9kaXJlY3Rfc3RhcnQsCVwKKwkJKHZvaWQqKWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfICMjIHR5cGUsCQkJXAorCX0KKworCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKGZjLCBGQyksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0odGhhc2gsIFRIQVNIKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShnZXRfY3B1aWQsIEdFVF9DUFVJRCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oZ2V0X3BtZCwgR0VUX1BNRCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0ocHRjZ2EsIFBUQ0dBKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShnZXRfcnIsIEdFVF9SUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oc2V0X3JyLCBTRVRfUlIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKHNldF9ycjBfdG9fcnI0LCBTRVRfUlIwX1RPX1JSNCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oc3NtX2ksIFNTTV9JKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShyc21faSwgUlNNX0kpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKGdldF9wc3JfaSwgR0VUX1BTUl9JKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShpbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUsCisJCQkJICAgICAgSU5UUklOX0xPQ0FMX0lSUV9SRVNUT1JFKSwKKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcobmFtZSwgcmVnKQkJCVwKKwl7CQkJCQkJCQlcCisJCSh2b2lkKilpYTY0X25hdGl2ZV9nZXRfICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJXAorCQkodm9pZCopaWE2NF9uYXRpdmVfZ2V0XyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAkJXAorCQlQQVJBVklSVF9QQVRDSF9UWVBFX0dFVFJFRyArIF9JQTY0X1JFR18gIyMgcmVnLAkJXAorCX0KKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcobmFtZSwgcmVnKQkJCVwKKwl7CQkJCQkJCQlcCisJCSh2b2lkKilpYTY0X25hdGl2ZV9zZXRfICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJXAorCQkodm9pZCopaWE2NF9uYXRpdmVfc2V0XyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAkJXAorCQlQQVJBVklSVF9QQVRDSF9UWVBFX1NFVFJFRyArIF9JQTY0X1JFR18gIyMgcmVnLAkJXAorCX0KKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcobmFtZSwgcmVnKQkJXAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhuYW1lLCByZWcpLAlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKG5hbWUsIHJlZykJCVwKKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihuYW1lLCByZWcpCQlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGFyXyAjIyBuYW1lLCBBUl8gIyMgcmVnKQorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKG5hbWUsIHJlZykJCVwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoY3JfICMjIG5hbWUsIENSXyAjIyByZWcpCisKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcocHNyLCBQU1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyh0cCwgVFApLAorCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKHBzcl9sLCBQU1JfTCksCisKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoZ3AsIEdQKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoc3AsIFNQKSwKKworCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhrcjAsIEFSX0tSMCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyMSwgQVJfS1IxKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoa3IyLCBBUl9LUjIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhrcjMsIEFSX0tSMyksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyNCwgQVJfS1I0KSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoa3I1LCBBUl9LUjUpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhrcjYsIEFSX0tSNiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyNywgQVJfS1I3KSwKKworCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKHJzYywgUlNDKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihic3AsIEJTUCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoYnNwc3RvcmUsIEJTUFNUT1JFKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihybmF0LCBSTkFUKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihmY3IsIEZDUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoZWZsYWcsIEVGTEFHKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihjc2QsIENTRCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoc3NkLCBTU0QpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhhcjI3LCBBUl9DRkxBRyksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoZnNyLCBGU1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGZpciwgRklSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihmZHIsIEZEUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoY2N2LCBDQ1YpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKHVuYXQsIFVOQVQpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGZwc3IsIEZQU1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGl0YywgSVRDKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihwZnMsIFBGUyksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIobGMsIExDKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihlYywgRUMpLAorCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoZGNyLCBEQ1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGl0bSwgSVRNKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpdmEsIElWQSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IocHRhLCBQVEEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlwc3IsIElQU1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlzciwgSVNSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpaXAsIElJUCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaWZhLCBJRkEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGl0aXIsIElUSVIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlpcGEsIElJUEEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlmcywgSUZTKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpaW0sIElJTSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaWhhLCBJSEEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGxpZCwgTElEKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpdnIsIElWUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IodHByLCBUUFIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGVvaSwgRU9JKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpcnIwLCBJUlIwKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpcnIxLCBJUlIxKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpcnIyLCBJUlIyKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpcnIzLCBJUlIzKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpdHYsIElUViksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IocG12LCBQTVYpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGNtY3YsIENNQ1YpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGxycjAsIExSUjApLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGxycjEsIExSUjEpLAorfTsKKwordW5zaWduZWQgbG9uZyBfX2luaXRfb3JfbW9kdWxlCitpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbmVsZW1zID0gc2l6ZW9mKGlhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZV9lbGVtcykgLworCQlzaXplb2YoaWE2NF9uYXRpdmVfcGF0Y2hfYnVuZGxlX2VsZW1zWzBdKTsKKworCXJldHVybiBfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZShzYnVuZGxlLCBlYnVuZGxlLCB0eXBlLAorCQkJCQkgICAgICBpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGVfZWxlbXMsCisJCQkJCSAgICAgIG5lbGVtcywgTlVMTCk7Cit9CisjZW5kaWYgLyogQVNNX1NVUFBPVEVEICovCisKK2V4dGVybiBjb25zdCBjaGFyIGlhNjRfbmF0aXZlX3N3aXRjaF90b1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgaWE2NF9uYXRpdmVfbGVhdmVfc3lzY2FsbFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgaWE2NF9uYXRpdmVfd29ya19wcm9jZXNzZWRfc3lzY2FsbFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgaWE2NF9uYXRpdmVfbGVhdmVfa2VybmVsW107CisKK2NvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9icmFuY2hfdGFyZ2V0IGlhNjRfbmF0aXZlX2JyYW5jaF90YXJnZXRbXQorX19pbml0Y29uc3QgPSB7CisjZGVmaW5lIFBBUkFWSVJUX0JSX1RBUkdFVChuYW1lLCB0eXBlKQkJCVwKKwl7CQkJCQkJXAorCQlpYTY0X25hdGl2ZV8gIyMgbmFtZSwJCQlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfQlJfICMjIHR5cGUsCVwKKwl9CisJUEFSQVZJUlRfQlJfVEFSR0VUKHN3aXRjaF90bywgU1dJVENIX1RPKSwKKwlQQVJBVklSVF9CUl9UQVJHRVQobGVhdmVfc3lzY2FsbCwgTEVBVkVfU1lTQ0FMTCksCisJUEFSQVZJUlRfQlJfVEFSR0VUKHdvcmtfcHJvY2Vzc2VkX3N5c2NhbGwsIFdPUktfUFJPQ0VTU0VEX1NZU0NBTEwpLAorCVBBUkFWSVJUX0JSX1RBUkdFVChsZWF2ZV9rZXJuZWwsIExFQVZFX0tFUk5FTCksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQKK2lhNjRfbmF0aXZlX3BhdGNoX2JyYW5jaCh1bnNpZ25lZCBsb25nIHRhZywgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbmVsZW0gPQorCQlzaXplb2YoaWE2NF9uYXRpdmVfYnJhbmNoX3RhcmdldCkgLworCQlzaXplb2YoaWE2NF9uYXRpdmVfYnJhbmNoX3RhcmdldFswXSk7CisJX19wYXJhdmlydF9wYXRjaF9hcHBseV9icmFuY2godGFnLCB0eXBlLAorCQkJCSAgICAgIGlhNjRfbmF0aXZlX2JyYW5jaF90YXJnZXQsIG5lbGVtKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfcGF0Y2guYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfcGF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmRmZWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaC5jCkBAIC0wLDAgKzEsNTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsaW51eC9hcmNoL2lhNjQveGVuL3BhcmF2aXJ0X3BhdGNoLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CisjaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfcGF0Y2guaD4KKwordHlwZWRlZiB1bmlvbiBpYTY0X2luc3QgeworICAgICAgICBzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgcXAgOiA2OworCQl1bnNpZ25lZCBsb25nIGxvbmcgOiAzMTsKKwkJdW5zaWduZWQgbG9uZyBsb25nIG9wY29kZSA6IDQ7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyByZXNlcnZlZCA6IDIzOworICAgICAgICB9IGdlbmVyaWM7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBsOworfSBpYTY0X2luc3RfdDsKKworLyoKKyAqIGZsdXNoX2ljYWNoZV9yYW5nZSgpIGNhbid0IGJlIHVzZWQgaGVyZS4KKyAqIHdlIGFyZSBoZXJlIGJlZm9yZSBjcHVfaW5pdCgpIHdoaWNoIGluaXRpYWxpemVzCisgKiBpYTY0X2lfY2FjaGVfc3RyaWRlX3NoaWZ0LiBmbHVzaF9pY2FjaGVfcmFuZ2UoKSB1c2VzIGl0LgorICovCit2b2lkIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X2ZsdXNoX2lfY2FjaGVfcmFuZ2UoY29uc3Qgdm9pZCAqaW5zdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlleHRlcm4gdm9pZCBwYXJhdmlydF9mY19pKGNvbnN0IHZvaWQgKmFkZHIpOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IHNpemVvZihidW5kbGVfdCkpCisJCXBhcmF2aXJ0X2ZjX2koaW5zdHIgKyBpKTsKK30KKworYnVuZGxlX3QqIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X2dldF9idW5kbGUodW5zaWduZWQgbG9uZyB0YWcpCit7CisJcmV0dXJuIChidW5kbGVfdCAqKSh0YWcgJiB+M1VMKTsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9nZXRfc2xvdCh1bnNpZ25lZCBsb25nIHRhZykKK3sKKwlyZXR1cm4gdGFnICYgM1VMOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X2dldF9udW1faW5zdCh1bnNpZ25lZCBsb25nIHN0YWcsIHVuc2lnbmVkIGxvbmcgZXRhZykKK3sKKwlidW5kbGVfdCAqc2J1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUoc3RhZyk7CisJdW5zaWduZWQgbG9uZyBzc2xvdCA9IHBhcmF2aXJ0X2dldF9zbG90KHN0YWcpOworCWJ1bmRsZV90ICplYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZShldGFnKTsKKwl1bnNpZ25lZCBsb25nIGVzbG90ID0gcGFyYXZpcnRfZ2V0X3Nsb3QoZXRhZyk7CisKKwlyZXR1cm4gKGVidW5kbGUgLSBzYnVuZGxlKSAqIDMgKyBlc2xvdCAtIHNzbG90ICsgMTsKK30KKwordW5zaWduZWQgbG9uZyBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9nZXRfbmV4dF90YWcodW5zaWduZWQgbG9uZyB0YWcpCit7CisJdW5zaWduZWQgbG9uZyBzbG90ID0gcGFyYXZpcnRfZ2V0X3Nsb3QodGFnKTsKKworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiB0YWcgKyAxOworCWNhc2UgMjogeworCQlidW5kbGVfdCAqYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZSh0YWcpOworCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpKGJ1bmRsZSArIDEpOworCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQorCitpYTY0X2luc3RfdCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9yZWFkX3Nsb3QwKGNvbnN0IGJ1bmRsZV90ICpidW5kbGUpCit7CisJaWE2NF9pbnN0X3QgaW5zdDsKKwlpbnN0LmwgPSBidW5kbGUtPnF1YWQwLnNsb3QwOworCXJldHVybiBpbnN0OworfQorCitpYTY0X2luc3RfdCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9yZWFkX3Nsb3QxKGNvbnN0IGJ1bmRsZV90ICpidW5kbGUpCit7CisJaWE2NF9pbnN0X3QgaW5zdDsKKwlpbnN0LmwgPSBidW5kbGUtPnF1YWQwLnNsb3QxX3AwIHwKKwkJKCh1bnNpZ25lZCBsb25nIGxvbmcpYnVuZGxlLT5xdWFkMS5zbG90MV9wMSA8PCAxOFVMKTsKKwlyZXR1cm4gaW5zdDsKK30KKworaWE2NF9pbnN0X3QgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfcmVhZF9zbG90Mihjb25zdCBidW5kbGVfdCAqYnVuZGxlKQoreworCWlhNjRfaW5zdF90IGluc3Q7CisJaW5zdC5sID0gYnVuZGxlLT5xdWFkMS5zbG90MjsKKwlyZXR1cm4gaW5zdDsKK30KKworaWE2NF9pbnN0X3QgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfcmVhZF9pbnN0KHVuc2lnbmVkIGxvbmcgdGFnKQoreworCWJ1bmRsZV90ICpidW5kbGUgPSBwYXJhdmlydF9nZXRfYnVuZGxlKHRhZyk7CisJdW5zaWduZWQgbG9uZyBzbG90ID0gcGFyYXZpcnRfZ2V0X3Nsb3QodGFnKTsKKworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIHBhcmF2aXJ0X3JlYWRfc2xvdDAoYnVuZGxlKTsKKwljYXNlIDE6CisJCXJldHVybiBwYXJhdmlydF9yZWFkX3Nsb3QxKGJ1bmRsZSk7CisJY2FzZSAyOgorCQlyZXR1cm4gcGFyYXZpcnRfcmVhZF9zbG90MihidW5kbGUpOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfd3JpdGVfc2xvdDAoYnVuZGxlX3QgKmJ1bmRsZSwgaWE2NF9pbnN0X3QgaW5zdCkKK3sKKwlidW5kbGUtPnF1YWQwLnNsb3QwID0gaW5zdC5sOworfQorCit2b2lkIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X3dyaXRlX3Nsb3QxKGJ1bmRsZV90ICpidW5kbGUsIGlhNjRfaW5zdF90IGluc3QpCit7CisJYnVuZGxlLT5xdWFkMC5zbG90MV9wMCA9IGluc3QubDsKKwlidW5kbGUtPnF1YWQxLnNsb3QxX3AxID0gaW5zdC5sID4+IDE4VUw7Cit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfd3JpdGVfc2xvdDIoYnVuZGxlX3QgKmJ1bmRsZSwgaWE2NF9pbnN0X3QgaW5zdCkKK3sKKwlidW5kbGUtPnF1YWQxLnNsb3QyID0gaW5zdC5sOworfQorCit2b2lkIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X3dyaXRlX2luc3QodW5zaWduZWQgbG9uZyB0YWcsIGlhNjRfaW5zdF90IGluc3QpCit7CisJYnVuZGxlX3QgKmJ1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUodGFnKTsKKwl1bnNpZ25lZCBsb25nIHNsb3QgPSBwYXJhdmlydF9nZXRfc2xvdCh0YWcpOworCisJc3dpdGNoIChzbG90KSB7CisJY2FzZSAwOgorCQlwYXJhdmlydF93cml0ZV9zbG90MChidW5kbGUsIGluc3QpOworCQlicmVhazsKKwljYXNlIDE6CisJCXBhcmF2aXJ0X3dyaXRlX3Nsb3QxKGJ1bmRsZSwgaW5zdCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcGFyYXZpcnRfd3JpdGVfc2xvdDIoYnVuZGxlLCBpbnN0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlwYXJhdmlydF9mbHVzaF9pX2NhY2hlX3JhbmdlKGJ1bmRsZSwgc2l6ZW9mKCpidW5kbGUpKTsKK30KKworLyogZm9yIGRlYnVnICovCit2b2lkCitwYXJhdmlydF9wcmludF9idW5kbGUoY29uc3QgYnVuZGxlX3QgKmJ1bmRsZSkKK3sKKwljb25zdCB1bnNpZ25lZCBsb25nICpxdWFkID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilidW5kbGU7CisJaWE2NF9pbnN0X3Qgc2xvdDAgPSBwYXJhdmlydF9yZWFkX3Nsb3QwKGJ1bmRsZSk7CisJaWE2NF9pbnN0X3Qgc2xvdDEgPSBwYXJhdmlydF9yZWFkX3Nsb3QxKGJ1bmRsZSk7CisJaWE2NF9pbnN0X3Qgc2xvdDIgPSBwYXJhdmlydF9yZWFkX3Nsb3QyKGJ1bmRsZSk7CisKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiYnVuZGxlIDB4JXAgMHglMDE2bHggMHglMDE2bHhcbiIsIGJ1bmRsZSwgcXVhZFswXSwgcXVhZFsxXSk7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgImJ1bmRsZSB0ZW1wbGF0ZSAweCV4XG4iLAorCSAgICAgICBidW5kbGUtPnF1YWQwLnRlbXBsYXRlKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAic2xvdDAgMHglbHggc2xvdDFfcDAgMHglbHggc2xvdDFfcDEgMHglbHggc2xvdDIgMHglbHhcbiIsCisJICAgICAgICh1bnNpZ25lZCBsb25nKWJ1bmRsZS0+cXVhZDAuc2xvdDAsCisJICAgICAgICh1bnNpZ25lZCBsb25nKWJ1bmRsZS0+cXVhZDAuc2xvdDFfcDAsCisJICAgICAgICh1bnNpZ25lZCBsb25nKWJ1bmRsZS0+cXVhZDEuc2xvdDFfcDEsCisJICAgICAgICh1bnNpZ25lZCBsb25nKWJ1bmRsZS0+cXVhZDEuc2xvdDIpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJzbG90MCAweCUwMTZsbHggc2xvdDEgMHglMDE2bGx4IHNsb3QyIDB4JTAxNmxseFxuIiwKKwkgICAgICAgc2xvdDAubCwgc2xvdDEubCwgc2xvdDIubCk7Cit9CisKK3N0YXRpYyBpbnQgbm9yZXBsYWNlX3BhcmF2aXJ0IF9faW5pdF9vcl9tb2R1bGUgPSAwOworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub3JlcGxhY2VfcGFyYXZpcnQoY2hhciAqc3RyKQoreworCW5vcmVwbGFjZV9wYXJhdmlydCA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub3JlcGxhY2UtcGFyYXZpcnQiLCBzZXR1cF9ub3JlcGxhY2VfcGFyYXZpcnQpOworCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZQorZmlsbF9ub3BfYnVuZGxlKHZvaWQgKnNidW5kbGUsIHZvaWQgKmVidW5kbGUpCit7CisJZXh0ZXJuIGNvbnN0IGNoYXIgcGFyYXZpcnRfbm9wX2J1bmRsZVtdOworCWV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X25vcF9idW5kbGVfc2l6ZTsKKworCXZvaWQgKmJ1bmRsZSA9IHNidW5kbGU7CisKKwlCVUdfT04oKCgodW5zaWduZWQgbG9uZylzYnVuZGxlKSAlIHNpemVvZihidW5kbGVfdCkpICE9IDApOworCUJVR19PTigoKCh1bnNpZ25lZCBsb25nKWVidW5kbGUpICUgc2l6ZW9mKGJ1bmRsZV90KSkgIT0gMCk7CisKKwl3aGlsZSAoYnVuZGxlIDwgZWJ1bmRsZSkgeworCQltZW1jcHkoYnVuZGxlLCBwYXJhdmlydF9ub3BfYnVuZGxlLCBwYXJhdmlydF9ub3BfYnVuZGxlX3NpemUpOworCisJCWJ1bmRsZSArPSBwYXJhdmlydF9ub3BfYnVuZGxlX3NpemU7CisJfQorfQorCisvKiBoZWxwZXIgZnVuY3Rpb24gKi8KK3Vuc2lnbmVkIGxvbmcgX19pbml0X29yX21vZHVsZQorX19wYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtICplbGVtcywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbmVsZW1zLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtICoqZm91bmQpCit7CisJdW5zaWduZWQgbG9uZyB1c2VkID0gMDsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlCVUdfT04oKCgodW5zaWduZWQgbG9uZylzYnVuZGxlKSAlIHNpemVvZihidW5kbGVfdCkpICE9IDApOworCUJVR19PTigoKCh1bnNpZ25lZCBsb25nKWVidW5kbGUpICUgc2l6ZW9mKGJ1bmRsZV90KSkgIT0gMCk7CisKKwlmb3VuZCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9idW5kbGVfZWxlbSAqcCA9ICZlbGVtc1tpXTsKKwkJaWYgKHAtPnR5cGUgPT0gdHlwZSkgeworCQkJdW5zaWduZWQgbG9uZyBuZWVkID0gcC0+ZWJ1bmRsZSAtIHAtPnNidW5kbGU7CisJCQl1bnNpZ25lZCBsb25nIHJvb20gPSBlYnVuZGxlIC0gc2J1bmRsZTsKKworCQkJaWYgKGZvdW5kICE9IE5VTEwpCisJCQkJKmZvdW5kID0gcDsKKworCQkJaWYgKHJvb20gPCBuZWVkKSB7CisJCQkJLyogbm8gcm9vbSB0byByZXBsYWNlLiBza2lwIGl0ICovCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInRoZSBzcGFjZSBpcyB0b28gc21hbGwgdG8gcHV0ICIKKwkJCQkgICAgICAgImJ1bmRsZXMuIHR5cGUgJWxkIG5lZWQgJWxkIHJvb20gJWxkXG4iLAorCQkJCSAgICAgICB0eXBlLCBuZWVkLCByb29tKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJdXNlZCA9IG5lZWQ7CisJCQltZW1jcHkoc2J1bmRsZSwgcC0+c2J1bmRsZSwgdXNlZCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB1c2VkOworfQorCit2b2lkIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZShjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKnN0YXJ0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqZW5kKQoreworCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqcDsKKworCWlmIChub3JlcGxhY2VfcGFyYXZpcnQpCisJCXJldHVybjsKKwlpZiAocHZfaW5pdF9vcHMucGF0Y2hfYnVuZGxlID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAocCA9IHN0YXJ0OyBwIDwgZW5kOyBwKyspIHsKKwkJdW5zaWduZWQgbG9uZyB1c2VkOworCisJCXVzZWQgPSAoKnB2X2luaXRfb3BzLnBhdGNoX2J1bmRsZSkocC0+c2J1bmRsZSwgcC0+ZWJ1bmRsZSwKKwkJCQkJCSAgIHAtPnR5cGUpOworCQlpZiAodXNlZCA9PSAwKQorCQkJY29udGludWU7CisKKwkJZmlsbF9ub3BfYnVuZGxlKHAtPnNidW5kbGUgKyB1c2VkLCBwLT5lYnVuZGxlKTsKKwkJcGFyYXZpcnRfZmx1c2hfaV9jYWNoZV9yYW5nZShwLT5zYnVuZGxlLAorCQkJCQkgICAgIHAtPmVidW5kbGUgLSBwLT5zYnVuZGxlKTsKKwl9CisJaWE2NF9zeW5jX2koKTsKKwlpYTY0X3NybHpfaSgpOworfQorCisvKgorICogbm9wLmksIG5vcC5tLCBub3AuZiBpbnN0cnVjdGlvbiBhcmUgc2FtZSBmb3JtYXQuCisgKiBidXQgbm9wLmIgaGFzIGRpZmZlcmVubnQgZm9ybWF0LgorICogVGhpcyBkb2Vzbid0IHN1cHBvcnQgbm9wLmIgZm9yIG5vdy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0X29yX21vZHVsZQorZmlsbF9ub3BfaW5zdCh1bnNpZ25lZCBsb25nIHN0YWcsIHVuc2lnbmVkIGxvbmcgZXRhZykKK3sKKwlleHRlcm4gY29uc3QgYnVuZGxlX3QgcGFyYXZpcnRfbm9wX21maV9pbnN0X2J1bmRsZVtdOworCXVuc2lnbmVkIGxvbmcgdGFnOworCWNvbnN0IGlhNjRfaW5zdF90IG5vcF9pbnN0ID0KKwkJcGFyYXZpcnRfcmVhZF9zbG90MChwYXJhdmlydF9ub3BfbWZpX2luc3RfYnVuZGxlKTsKKworCWZvciAodGFnID0gc3RhZzsgdGFnIDwgZXRhZzsgdGFnID0gcGFyYXZpcnRfZ2V0X25leHRfdGFnKHRhZykpCisJCXBhcmF2aXJ0X3dyaXRlX2luc3QodGFnLCBub3BfaW5zdCk7Cit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfcGF0Y2hfYXBwbHlfaW5zdChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICpzdGFydCwKKwkJCSAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqZW5kKQoreworCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKnA7CisKKwlpZiAobm9yZXBsYWNlX3BhcmF2aXJ0KQorCQlyZXR1cm47CisJaWYgKHB2X2luaXRfb3BzLnBhdGNoX2luc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChwID0gc3RhcnQ7IHAgPCBlbmQ7IHArKykgeworCQl1bnNpZ25lZCBsb25nIHRhZzsKKwkJYnVuZGxlX3QgKnNidW5kbGU7CisJCWJ1bmRsZV90ICplYnVuZGxlOworCisJCXRhZyA9ICgqcHZfaW5pdF9vcHMucGF0Y2hfaW5zdCkocC0+c3RhZywgcC0+ZXRhZywgcC0+dHlwZSk7CisJCWlmICh0YWcgPT0gcC0+c3RhZykKKwkJCWNvbnRpbnVlOworCisJCWZpbGxfbm9wX2luc3QodGFnLCBwLT5ldGFnKTsKKwkJc2J1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUocC0+c3RhZyk7CisJCWVidW5kbGUgPSBwYXJhdmlydF9nZXRfYnVuZGxlKHAtPmV0YWcpICsgMTsKKwkJcGFyYXZpcnRfZmx1c2hfaV9jYWNoZV9yYW5nZShzYnVuZGxlLCAoZWJ1bmRsZSAtIHNidW5kbGUpICoKKwkJCQkJICAgICBzaXplb2YoYnVuZGxlX3QpKTsKKwl9CisJaWE2NF9zeW5jX2koKTsKKwlpYTY0X3NybHpfaSgpOworfQorI2VuZGlmIC8qIEFTTV9TVVBQT1RFRCAqLworCisvKiBicmwuY29uZC5zcHRrLm1hbnkgPHRhcmdldDY0PiBYMyAqLwordHlwZWRlZiB1bmlvbiBpbnN0X3gzX29wIHsKKwlpYTY0X2luc3RfdCBpbnN0OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcXA6IDY7CisJCXVuc2lnbmVkIGxvbmcgYnR5cDogMzsKKwkJdW5zaWduZWQgbG9uZyB1bnVzZWQ6IDM7CisJCXVuc2lnbmVkIGxvbmcgcDogMTsKKwkJdW5zaWduZWQgbG9uZyBpbW0yMGI6IDIwOworCQl1bnNpZ25lZCBsb25nIHdoOiAyOworCQl1bnNpZ25lZCBsb25nIGQ6IDE7CisJCXVuc2lnbmVkIGxvbmcgaTogMTsKKwkJdW5zaWduZWQgbG9uZyBvcGNvZGU6IDQ7CisJfTsKKwl1bnNpZ25lZCBsb25nIGw7Cit9IGluc3RfeDNfb3BfdDsKKwordHlwZWRlZiB1bmlvbiBpbnN0X3gzX2ltbSB7CisJaWE2NF9pbnN0X3QgaW5zdDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHVudXNlZDogMjsKKwkJdW5zaWduZWQgbG9uZyBpbW0zOTogMzk7CisJfTsKKwl1bnNpZ25lZCBsb25nIGw7Cit9IGluc3RfeDNfaW1tX3Q7CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfcGF0Y2hfcmVsb2NfYnJsKHVuc2lnbmVkIGxvbmcgdGFnLCBjb25zdCB2b2lkICp0YXJnZXQpCit7CisJdW5zaWduZWQgbG9uZyB0YWdfb3AgPSBwYXJhdmlydF9nZXRfbmV4dF90YWcodGFnKTsKKwl1bnNpZ25lZCBsb25nIHRhZ19pbW0gPSB0YWc7CisJYnVuZGxlX3QgKmJ1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUodGFnKTsKKworCWlhNjRfaW5zdF90IGluc3Rfb3AgPSBwYXJhdmlydF9yZWFkX2luc3QodGFnX29wKTsKKwlpYTY0X2luc3RfdCBpbnN0X2ltbSA9IHBhcmF2aXJ0X3JlYWRfaW5zdCh0YWdfaW1tKTsKKworCWluc3RfeDNfb3BfdCBpbnN0X3gzX29wID0geyAubCA9IGluc3Rfb3AubCB9OworCWluc3RfeDNfaW1tX3QgaW5zdF94M19pbW0gPSB7IC5sID0gaW5zdF9pbW0ubCB9OworCisJdW5zaWduZWQgbG9uZyBpbW02MCA9CisJCSgodW5zaWduZWQgbG9uZyl0YXJnZXQgLSAodW5zaWduZWQgbG9uZylidW5kbGUpID4+IDQ7CisKKwlCVUdfT04ocGFyYXZpcnRfZ2V0X3Nsb3QodGFnKSAhPSAxKTsgLyogTUxYICovCisJQlVHX09OKCgodW5zaWduZWQgbG9uZyl0YXJnZXQgJiAoc2l6ZW9mKGJ1bmRsZV90KSAtIDEpKSAhPSAwKTsKKworCS8qIGltbTYwWzU5XSAxYml0ICovCisJaW5zdF94M19vcC5pID0gKGltbTYwID4+IDU5KSAmIDE7CisJLyogaW1tNjBbMTk6MF0gMjBiaXQgKi8KKwlpbnN0X3gzX29wLmltbTIwYiA9IGltbTYwICYgKCgxVUwgPDwgMjApIC0gMSk7CisJLyogaW1tNjBbNTg6MjBdIDM5Yml0ICovCisJaW5zdF94M19pbW0uaW1tMzkgPSAoaW1tNjAgPj4gMjApICYgKCgxVUwgPDwgMzkpIC0gMSk7CisKKwlpbnN0X29wLmwgPSBpbnN0X3gzX29wLmw7CisJaW5zdF9pbW0ubCA9IGluc3RfeDNfaW1tLmw7CisKKwlwYXJhdmlydF93cml0ZV9pbnN0KHRhZ19vcCwgaW5zdF9vcCk7CisJcGFyYXZpcnRfd3JpdGVfaW5zdCh0YWdfaW1tLCBpbnN0X2ltbSk7Cit9CisKKy8qIGJyLmNvbmQuc3B0ay5tYW55IDx0YXJnZXQyNT4JQjEgKi8KK3R5cGVkZWYgdW5pb24gaW5zdF9iMSB7CisJaWE2NF9pbnN0X3QgaW5zdDsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHFwOiA2OworCQl1bnNpZ25lZCBsb25nIGJ0eXBlOiAzOworCQl1bnNpZ25lZCBsb25nIHVudXNlZDogMzsKKwkJdW5zaWduZWQgbG9uZyBwOiAxOworCQl1bnNpZ25lZCBsb25nIGltbTIwYjogMjA7CisJCXVuc2lnbmVkIGxvbmcgd2g6IDI7CisJCXVuc2lnbmVkIGxvbmcgZDogMTsKKwkJdW5zaWduZWQgbG9uZyBzOiAxOworCQl1bnNpZ25lZCBsb25nIG9wY29kZTogNDsKKwl9OworCXVuc2lnbmVkIGxvbmcgbDsKK30gaW5zdF9iMV90OworCit2b2lkIF9faW5pdAorcGFyYXZpcnRfcGF0Y2hfcmVsb2NfYnIodW5zaWduZWQgbG9uZyB0YWcsIGNvbnN0IHZvaWQgKnRhcmdldCkKK3sKKwlidW5kbGVfdCAqYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZSh0YWcpOworCWlhNjRfaW5zdF90IGluc3QgPSBwYXJhdmlydF9yZWFkX2luc3QodGFnKTsKKwl1bnNpZ25lZCBsb25nIHRhcmdldDI1ID0gKHVuc2lnbmVkIGxvbmcpdGFyZ2V0IC0gKHVuc2lnbmVkIGxvbmcpYnVuZGxlOworCWluc3RfYjFfdCBpbnN0X2IxOworCisJQlVHX09OKCgodW5zaWduZWQgbG9uZyl0YXJnZXQgJiAoc2l6ZW9mKGJ1bmRsZV90KSAtIDEpKSAhPSAwKTsKKworCWluc3RfYjEubCA9IGluc3QubDsKKwlpZiAodGFyZ2V0MjUgJiAoMVVMIDw8IDYzKSkKKwkJaW5zdF9iMS5zID0gMTsKKwllbHNlCisJCWluc3RfYjEucyA9IDA7CisKKwlpbnN0X2IxLmltbTIwYiA9IHRhcmdldDI1ID4+IDQ7CisJaW5zdC5sID0gaW5zdF9iMS5sOworCisJcGFyYXZpcnRfd3JpdGVfaW5zdCh0YWcsIGluc3QpOworfQorCit2b2lkIF9faW5pdAorX19wYXJhdmlydF9wYXRjaF9hcHBseV9icmFuY2goCisJdW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKwljb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnJhbmNoX3RhcmdldCAqZW50cmllcywKKwl1bnNpZ25lZCBpbnQgbnJfZW50cmllcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZW50cmllczsgaSsrKSB7CisJCWlmIChlbnRyaWVzW2ldLnR5cGUgPT0gdHlwZSkgeworCQkJcGFyYXZpcnRfcGF0Y2hfcmVsb2NfYnIodGFnLCBlbnRyaWVzW2ldLmVudHJ5KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQKK3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9icmFuY2ggKnN0YXJ0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2JyYW5jaCAqZW5kKQoreworCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2JyYW5jaCAqcDsKKworCWlmIChub3JlcGxhY2VfcGFyYXZpcnQpCisJCXJldHVybjsKKwlpZiAocHZfaW5pdF9vcHMucGF0Y2hfYnJhbmNoID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAocCA9IHN0YXJ0OyBwIDwgZW5kOyBwKyspCisJCSgqcHZfaW5pdF9vcHMucGF0Y2hfYnJhbmNoKShwLT50YWcsIHAtPnR5cGUpOworCisJaWE2NF9zeW5jX2koKTsKKwlpYTY0X3NybHpfaSgpOworfQorCit2b2lkIF9faW5pdAorcGFyYXZpcnRfcGF0Y2hfYXBwbHkodm9pZCkKK3sKKwlleHRlcm4gY29uc3QgY2hhciBfX3N0YXJ0X3BhcmF2aXJ0X2J1bmRsZXNbXTsKKwlleHRlcm4gY29uc3QgY2hhciBfX3N0b3BfcGFyYXZpcnRfYnVuZGxlc1tdOworCWV4dGVybiBjb25zdCBjaGFyIF9fc3RhcnRfcGFyYXZpcnRfaW5zdHNbXTsKKwlleHRlcm4gY29uc3QgY2hhciBfX3N0b3BfcGFyYXZpcnRfaW5zdHNbXTsKKwlleHRlcm4gY29uc3QgY2hhciBfX3N0YXJ0X3BhcmF2aXJ0X2JyYW5jaGVzW107CisJZXh0ZXJuIGNvbnN0IGNoYXIgX19zdG9wX3BhcmF2aXJ0X2JyYW5jaGVzW107CisKKwlwYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUoKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqKQorCQkJCSAgICBfX3N0YXJ0X3BhcmF2aXJ0X2J1bmRsZXMsCisJCQkJICAgIChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKikKKwkJCQkgICAgX19zdG9wX3BhcmF2aXJ0X2J1bmRsZXMpOworCXBhcmF2aXJ0X3BhdGNoX2FwcGx5X2luc3QoKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKikKKwkJCQkgIF9fc3RhcnRfcGFyYXZpcnRfaW5zdHMsCisJCQkJICAoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorCQkJCSAgX19zdG9wX3BhcmF2aXJ0X2luc3RzKTsKKwlwYXJhdmlydF9wYXRjaF9hcHBseV9icmFuY2goKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2JyYW5jaCAqKQorCQkJCSAgICBfX3N0YXJ0X3BhcmF2aXJ0X2JyYW5jaGVzLAorCQkJCSAgICAoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnJhbmNoICopCisJCQkJICAgIF9fc3RvcF9wYXJhdmlydF9icmFuY2hlcyk7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLXNldC1zdHlsZTogImxpbnV4IgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIHRhYi13aWR0aDogOAorICogaW5kZW50LXRhYnMtbW9kZTogdAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X3BhdGNobGlzdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaGxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgwODJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaGxpc3QuYwpAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggSXNha3UgWWFtYWhhdGEgPHlhbWFoYXRhIGF0IHZhbGludXggY28ganA+CisgKiAgICAgICAgICAgICAgICAgICAgVkEgTGludXggU3lzdGVtcyBKYXBhbiBLLksuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisKKyNkZWZpbmUgREVDTEFSRShuYW1lKQkJCQkJCVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZwkJCQkJXAorCQlfX2lhNjRfbmF0aXZlX3N0YXJ0X2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0W107CVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZwkJCQkJXAorCQlfX2lhNjRfbmF0aXZlX2VuZF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdFtdCisKK0RFQ0xBUkUoZnN5c2NhbGwpOworREVDTEFSRShicmxfZnN5c19idWJibGVfZG93bik7CitERUNMQVJFKHZ0b3ApOworREVDTEFSRShtY2tpbmxleV9lOSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RhcnRfZ2F0ZV9zZWN0aW9uW107CisKKyNkZWZpbmUgQVNTSUdOKG5hbWUpCQkJCQkJCSAgICBcCisJLnN0YXJ0XyMjbmFtZSMjX3BhdGNobGlzdCA9CQkJCQkgICAgXAorCQkodW5zaWduZWQgbG9uZylfX2lhNjRfbmF0aXZlX3N0YXJ0X2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0LCBcCisJLmVuZF8jI25hbWUjI19wYXRjaGxpc3QgPQkJCQkJICAgIFwKKwkJKHVuc2lnbmVkIGxvbmcpX19pYTY0X25hdGl2ZV9lbmRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3QKKworc3RydWN0IHB2X3BhdGNoZGF0YSBwdl9wYXRjaGRhdGEgX19pbml0ZGF0YSA9IHsKKwlBU1NJR04oZnN5c2NhbGwpLAorCUFTU0lHTihicmxfZnN5c19idWJibGVfZG93biksCisJQVNTSUdOKHZ0b3ApLAorCUFTU0lHTihtY2tpbmxleV9lOSksCisKKwkuZ2F0ZV9zZWN0aW9uID0gKHZvaWQqKV9fc3RhcnRfZ2F0ZV9zZWN0aW9uLAorfTsKKworCit1bnNpZ25lZCBsb25nIF9faW5pdAorcGFyYXZpcnRfZ2V0X2dhdGVfcGF0Y2hsaXN0KGVudW0gcHZfZ2F0ZV9wYXRjaGxpc3QgdHlwZSkKK3sKKworI2RlZmluZSBDQVNFKE5BTUUsIG5hbWUpCQkJCQlcCisJY2FzZSBQVl9HQVRFX1NUQVJUXyMjTkFNRToJCQkJXAorCQlyZXR1cm4gcHZfcGF0Y2hkYXRhLnN0YXJ0XyMjbmFtZSMjX3BhdGNobGlzdDsJXAorCWNhc2UgUFZfR0FURV9FTkRfIyNOQU1FOgkJCQlcCisJCXJldHVybiBwdl9wYXRjaGRhdGEuZW5kXyMjbmFtZSMjX3BhdGNobGlzdDsJXAorCisJc3dpdGNoICh0eXBlKSB7CisJCUNBU0UoRlNZU0NBTEwsIGZzeXNjYWxsKTsKKwkJQ0FTRShCUkxfRlNZU19CVUJCTEVfRE9XTiwgYnJsX2ZzeXNfYnViYmxlX2Rvd24pOworCQlDQVNFKFZUT1AsIHZ0b3ApOworCQlDQVNFKE1DS0lOTEVZX0U5LCBtY2tpbmxleV9lOSk7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCAqIF9faW5pdAorcGFyYXZpcnRfZ2V0X2dhdGVfc2VjdGlvbih2b2lkKQoreworCXJldHVybiBwdl9wYXRjaGRhdGEuZ2F0ZV9zZWN0aW9uOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaGxpc3QuaCBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfcGF0Y2hsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NGFhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfcGF0Y2hsaXN0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbGludXgvYXJjaC9pYTY0L3hlbi9wYXJhdmlydF9wYXRjaGxpc3QuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZiBkZWZpbmVkKF9fSUE2NF9HQVRFX1BBUkFWSVJUVUFMSVpFRF9YRU4pCisjaW5jbHVkZSA8YXNtL3hlbi9wYXRjaGxpc3QuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL25hdGl2ZS9wYXRjaGxpc3QuaD4KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0ZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRlbnRyeS5TCmluZGV4IDJmNDJmY2IuLjYxNTg1NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRlbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRlbnRyeS5TCkBAIC0yMCw4ICsyMCwxMSBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydF9wcml2b3AuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnRfcGF0Y2guaD4KICNpbmNsdWRlICJlbnRyeS5oIgogCiAjZGVmaW5lIERBVEE4KHN5bSwgaW5pdF92YWx1ZSkJCQlcCkBAIC0zMiwyOSArMzUsODcgQEAKIAlkYXRhOCBpbml0X3ZhbHVlIDsJCQlcCiAJLnBvcHNlY3Rpb24KIAotI2RlZmluZSBCUkFOQ0godGFyZywgcmVnLCBicmVnKQkJXAotCW1vdmwgcmVnPXRhcmcgOwkJCVwKLQk7OwkJCQlcCi0JbGQ4IHJlZz1bcmVnXSA7CQkJXAotCTs7CQkJCVwKLQltb3YgYnJlZz1yZWcgOwkJCVwKKyNkZWZpbmUgQlJBTkNIKHRhcmcsIHJlZywgYnJlZywgdHlwZSkJCQkJCVwKKwlQQVJBVklSVF9QQVRDSF9TSVRFX0JSKFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfICMjIHR5cGUpIDsJXAorCTs7CQkJCQkJCQlcCisJbW92bCByZWc9dGFyZyA7CQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCWxkOCByZWc9W3JlZ10gOwkJCQkJCQlcCisJOzsJCQkJCQkJCVwKKwltb3YgYnJlZz1yZWcgOwkJCQkJCQlcCiAJYnIuY29uZC5zcHRrLm1hbnkgYnJlZwogCi0jZGVmaW5lIEJSQU5DSF9QUk9DKHN5bSwgcmVnLCBicmVnKQkJCQlcCi0JREFUQTgocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgaWE2NF9uYXRpdmVfICMjIHN5bSkgOyBcCi0JR0xPQkFMX0VOVFJZKHBhcmF2aXJ0XyAjIyBzeW0pIDsJCQlcCi0JCUJSQU5DSChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCByZWcsIGJyZWcpIDsJXAorI2RlZmluZSBCUkFOQ0hfUFJPQyhzeW0sIHJlZywgYnJlZywgdHlwZSkJCQkJXAorCURBVEE4KHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIGlhNjRfbmF0aXZlXyAjIyBzeW0pIDsJCVwKKwlHTE9CQUxfRU5UUlkocGFyYXZpcnRfICMjIHN5bSkgOwkJCQlcCisJCUJSQU5DSChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCByZWcsIGJyZWcsIHR5cGUpIDsJXAogCUVORChwYXJhdmlydF8gIyMgc3ltKQogCi0jZGVmaW5lIEJSQU5DSF9QUk9DX1VOV0lORk8oc3ltLCByZWcsIGJyZWcpCQkJXAotCURBVEE4KHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIGlhNjRfbmF0aXZlXyAjIyBzeW0pIDsgXAotCUdMT0JBTF9FTlRSWShwYXJhdmlydF8gIyMgc3ltKSA7CQkJXAotCQlQVF9SRUdTX1VOV0lORF9JTkZPKDApIDsJCQlcCi0JCUJSQU5DSChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCByZWcsIGJyZWcpIDsJXAorI2RlZmluZSBCUkFOQ0hfUFJPQ19VTldJTkZPKHN5bSwgcmVnLCBicmVnLCB0eXBlKQkJCVwKKwlEQVRBOChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCBpYTY0X25hdGl2ZV8gIyMgc3ltKSA7CQlcCisJR0xPQkFMX0VOVFJZKHBhcmF2aXJ0XyAjIyBzeW0pIDsJCQkJXAorCQlQVF9SRUdTX1VOV0lORF9JTkZPKDApIDsJCQkJXAorCQlCUkFOQ0gocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgcmVnLCBicmVnLCB0eXBlKSA7CVwKIAlFTkQocGFyYXZpcnRfICMjIHN5bSkKIAogCi1CUkFOQ0hfUFJPQyhzd2l0Y2hfdG8sIHIyMiwgYjcpCi1CUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX3N5c2NhbGwsIHIyMiwgYjcpCi1CUkFOQ0hfUFJPQyh3b3JrX3Byb2Nlc3NlZF9zeXNjYWxsLCByMiwgYjcpCi1CUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX2tlcm5lbCwgcjIyLCBiNykKK0JSQU5DSF9QUk9DKHN3aXRjaF90bywgcjIyLCBiNywgU1dJVENIX1RPKQorQlJBTkNIX1BST0NfVU5XSU5GTyhsZWF2ZV9zeXNjYWxsLCByMjIsIGI3LCBMRUFWRV9TWVNDQUxMKQorQlJBTkNIX1BST0Mod29ya19wcm9jZXNzZWRfc3lzY2FsbCwgcjIsIGI3LCBXT1JLX1BST0NFU1NFRF9TWVNDQUxMKQorQlJBTkNIX1BST0NfVU5XSU5GTyhsZWF2ZV9rZXJuZWwsIHIyMiwgYjcsIExFQVZFX0tFUk5FTCkKKworCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKyNkZWZpbmUgX19JTklUX09SX01PRFVMRQkudGV4dAorI2RlZmluZSBfX0lOSVREQVRBX09SX01PRFVMRQkuZGF0YQorI2Vsc2UKKyNkZWZpbmUgX19JTklUX09SX01PRFVMRQlfX0lOSVQKKyNkZWZpbmUgX19JTklUREFUQV9PUl9NT0RVTEUJX19JTklUREFUQQorI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKKwlfX0lOSVRfT1JfTU9EVUxFCisJR0xPQkFMX0VOVFJZKHBhcmF2aXJ0X2ZjX2kpCisJZmMuaSByMzIKKwlici5yZXQuc3B0ay5tYW55IHJwCisJRU5EKHBhcmF2aXJ0X2ZjX2kpCisJX19GSU5JVAorCisJX19JTklUX09SX01PRFVMRQorCS5hbGlnbiAzMgorCUdMT0JBTF9FTlRSWShwYXJhdmlydF9ub3BfYl9pbnN0X2J1bmRsZSkKKwl7CisJCW5vcC5iIDAKKwkJbm9wLmIgMAorCQlub3AuYiAwCisJfQorCUVORChwYXJhdmlydF9ub3BfYl9pbnN0X2J1bmRsZSkKKwlfX0ZJTklUCisKKwkvKiBOT1RFOiBub3AuW21maV0gaGFzIHNhbWUgZm9ybWF0ICovCisJX19JTklUX09SX01PRFVMRQorCUdMT0JBTF9FTlRSWShwYXJhdmlydF9ub3BfbWZpX2luc3RfYnVuZGxlKQorCXsKKwkJbm9wLm0gMAorCQlub3AuZiAwCisJCW5vcC5pIDAKKwl9CisJRU5EKHBhcmF2aXJ0X25vcF9tZmlfaW5zdF9idW5kbGUpCisJX19GSU5JVAorCisJX19JTklUX09SX01PRFVMRQorCUdMT0JBTF9FTlRSWShwYXJhdmlydF9ub3BfYnVuZGxlKQorcGFyYXZpcnRfbm9wX2J1bmRsZV9zdGFydDoKKwl7CisJCW5vcCAwCisJCW5vcCAwCisJCW5vcCAwCisJfQorcGFyYXZpcnRfbm9wX2J1bmRsZV9lbmQ6CisJRU5EKHBhcmF2aXJ0X25vcF9idW5kbGUpCisJX19GSU5JVAorCisJX19JTklUREFUQV9PUl9NT0RVTEUKKwkuYWxpZ24gOAorCS5nbG9iYWwgcGFyYXZpcnRfbm9wX2J1bmRsZV9zaXplCitwYXJhdmlydF9ub3BfYnVuZGxlX3NpemU6CisJZGF0YTgJcGFyYXZpcnRfbm9wX2J1bmRsZV9lbmQgLSBwYXJhdmlydF9ub3BfYnVuZGxlX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMgYi9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMKaW5kZXggYjgzYjJjNS4uNjhhMTMxMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXRjaC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vcGF0Y2guaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CkBAIC0xNjksMTYgKzE3MCwzNSBAQAogCWlhNjRfc3Jsel9pKCk7CiB9CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGlhNjRfbmF0aXZlX2ZzeXNjYWxsX3RhYmxlW05SX3N5c2NhbGxzXTsKK2V4dGVybiBjaGFyIGlhNjRfbmF0aXZlX2ZzeXNfYnViYmxlX2Rvd25bXTsKK3N0cnVjdCBwdl9mc3lzX2RhdGEgcHZfZnN5c19kYXRhIF9faW5pdGRhdGEgPSB7CisJLmZzeXNjYWxsX3RhYmxlID0gKHVuc2lnbmVkIGxvbmcgKilpYTY0X25hdGl2ZV9mc3lzY2FsbF90YWJsZSwKKwkuZnN5c19idWJibGVfZG93biA9ICh2b2lkICopaWE2NF9uYXRpdmVfZnN5c19idWJibGVfZG93biwKK307CisKK3Vuc2lnbmVkIGxvbmcgKiBfX2luaXQKK3BhcmF2aXJ0X2dldF9mc3lzY2FsbF90YWJsZSh2b2lkKQoreworCXJldHVybiBwdl9mc3lzX2RhdGEuZnN5c2NhbGxfdGFibGU7Cit9CisKK2NoYXIgKiBfX2luaXQKK3BhcmF2aXJ0X2dldF9mc3lzX2J1YmJsZV9kb3duKHZvaWQpCit7CisJcmV0dXJuIHB2X2ZzeXNfZGF0YS5mc3lzX2J1YmJsZV9kb3duOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIHBhdGNoX2ZzeXNjYWxsX3RhYmxlICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyBmc3lzY2FsbF90YWJsZVtOUl9zeXNjYWxsc107CisJdTY0IGZzeXNjYWxsX3RhYmxlID0gKHU2NClwYXJhdmlydF9nZXRfZnN5c2NhbGxfdGFibGUoKTsKIAlzMzIgKm9mZnAgPSAoczMyICopIHN0YXJ0OwogCXU2NCBpcDsKIAogCXdoaWxlIChvZmZwIDwgKHMzMiAqKSBlbmQpIHsKIAkJaXAgPSAodTY0KSBpYTY0X2ltdmEoKGNoYXIgKikgb2ZmcCArICpvZmZwKTsKLQkJaWE2NF9wYXRjaF9pbW02NChpcCwgKHU2NCkgZnN5c2NhbGxfdGFibGUpOworCQlpYTY0X3BhdGNoX2ltbTY0KGlwLCBmc3lzY2FsbF90YWJsZSk7CiAJCWlhNjRfZmMoKHZvaWQgKikgaXApOwogCQkrK29mZnA7CiAJfQpAQCAtMTg5LDcgKzIwOSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIHBhdGNoX2JybF9mc3lzX2J1YmJsZV9kb3duICh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQlleHRlcm4gY2hhciBmc3lzX2J1YmJsZV9kb3duW107CisJdTY0IGZzeXNfYnViYmxlX2Rvd24gPSAodTY0KXBhcmF2aXJ0X2dldF9mc3lzX2J1YmJsZV9kb3duKCk7CiAJczMyICpvZmZwID0gKHMzMiAqKSBzdGFydDsKIAl1NjQgaXA7CiAKQEAgLTIwNywxMyArMjI3LDEzIEBACiB2b2lkIF9faW5pdAogaWE2NF9wYXRjaF9nYXRlICh2b2lkKQogewotIwlkZWZpbmUgU1RBUlQobmFtZSkJKCh1bnNpZ25lZCBsb25nKSBfX3N0YXJ0X2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0KQotIwlkZWZpbmUgRU5EKG5hbWUpCSgodW5zaWduZWQgbG9uZylfX2VuZF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdCkKKyMJZGVmaW5lIFNUQVJUKG5hbWUpCXBhcmF2aXJ0X2dldF9nYXRlX3BhdGNobGlzdChQVl9HQVRFX1NUQVJUXyMjbmFtZSkKKyMJZGVmaW5lIEVORChuYW1lKQlwYXJhdmlydF9nZXRfZ2F0ZV9wYXRjaGxpc3QoUFZfR0FURV9FTkRfIyNuYW1lKQogCi0JcGF0Y2hfZnN5c2NhbGxfdGFibGUoU1RBUlQoZnN5c2NhbGwpLCBFTkQoZnN5c2NhbGwpKTsKLQlwYXRjaF9icmxfZnN5c19idWJibGVfZG93bihTVEFSVChicmxfZnN5c19idWJibGVfZG93biksIEVORChicmxfZnN5c19idWJibGVfZG93bikpOwotCWlhNjRfcGF0Y2hfdnRvcChTVEFSVCh2dG9wKSwgRU5EKHZ0b3ApKTsKLQlpYTY0X3BhdGNoX21ja2lubGV5X2U5KFNUQVJUKG1ja2lubGV5X2U5KSwgRU5EKG1ja2lubGV5X2U5KSk7CisJcGF0Y2hfZnN5c2NhbGxfdGFibGUoU1RBUlQoRlNZU0NBTEwpLCBFTkQoRlNZU0NBTEwpKTsKKwlwYXRjaF9icmxfZnN5c19idWJibGVfZG93bihTVEFSVChCUkxfRlNZU19CVUJCTEVfRE9XTiksIEVORChCUkxfRlNZU19CVUJCTEVfRE9XTikpOworCWlhNjRfcGF0Y2hfdnRvcChTVEFSVChWVE9QKSwgRU5EKFZUT1ApKTsKKwlpYTY0X3BhdGNoX21ja2lubGV5X2U5KFNUQVJUKE1DS0lOTEVZX0U5KSwgRU5EKE1DS0lOTEVZX0U5KSk7CiB9CiAKIHZvaWQgaWE2NF9wYXRjaF9waHlzX3N0YWNrX3JlZyh1bnNpZ25lZCBsb25nIHZhbCkKQEAgLTIyOSw3ICsyNDksNyBAQAogCXdoaWxlIChvZmZwIDwgZW5kKSB7CiAJCWlwID0gKHU2NCkgb2ZmcCArICpvZmZwOwogCQlpYTY0X3BhdGNoKGlwLCBtYXNrLCBpbW0pOwotCQlpYTY0X2ZjKGlwKTsKKwkJaWE2NF9mYygodm9pZCAqKWlwKTsKIAkJKytvZmZwOwogCX0KIAlpYTY0X3N5bmNfaSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYwppbmRleCBkMGFkYTA2Li5lNGNiNDQzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1kbWEuYwpAQCAtMzIsOSArMzIsNiBAQAogaW50IGZvcmNlX2lvbW11IF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKIAotLyogU2V0IHRoaXMgdG8gMSBpZiB0aGVyZSBpcyBhIEhXIElPTU1VIGluIHRoZSBzeXN0ZW0gKi8KLWludCBpb21tdV9kZXRlY3RlZCBfX3JlYWRfbW9zdGx5OwotCiAvKiBEdW1teSBkZXZpY2UgdXNlZCBmb3IgTlVMTCBhcmd1bWVudHMgKG5vcm1hbGx5IElTQSkuIEJldHRlciB3b3VsZAogICAgYmUgcHJvYmFibHkgYSBzbWFsbGVyIERNQSBtYXNrLCBidXQgdGhpcyBpcyBidWctdG8tYnVnIGNvbXBhdGlibGUKICAgIHRvIGkzODYuICovCkBAIC00NCwxOCArNDEsNyBAQAogCS5kbWFfbWFzayA9ICZmYWxsYmFja19kZXYuY29oZXJlbnRfZG1hX21hc2ssCiB9OwogCi12b2lkIF9faW5pdCBwY2lfaW9tbXVfYWxsb2Modm9pZCkKLXsKLQkvKgotCSAqIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IGZvcgotCSAqIGZhbGwtYmFjay9mYWlsLW92ZXIgcmVhc29ucwotCSAqLwotCWRldGVjdF9pbnRlbF9pb21tdSgpOwotCi0jaWZkZWYgQ09ORklHX1NXSU9UTEIKLQlwY2lfc3dpb3RsYl9pbml0KCk7Ci0jZW5kaWYKLX0KK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgaW50ZWxfZG1hX29wczsKIAogc3RhdGljIGludCBfX2luaXQgcGNpX2lvbW11X2luaXQodm9pZCkKIHsKQEAgLTc5LDE1ICs2NSwxMiBAQAogCXJldHVybjsKIH0KIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKLUVYUE9SVF9TWU1CT0woZG1hX29wcyk7Ci0KIGludCBpb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CiAKLQlpZiAob3BzLT5kbWFfc3VwcG9ydGVkX29wKQotCQlyZXR1cm4gb3BzLT5kbWFfc3VwcG9ydGVkX29wKGRldiwgbWFzayk7CisJaWYgKG9wcy0+ZG1hX3N1cHBvcnRlZCkKKwkJcmV0dXJuIG9wcy0+ZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwogCiAJLyogQ29waWVkIGZyb20gaTM4Ni4gRG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UsIGJlY2F1c2UgaXQgd2lsbAogCSAgIG9ubHkgd29yayBmb3IgcGNpX2FsbG9jX2NvaGVyZW50LgpAQCAtMTE2LDQgKzk5LDI1IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlvbW11X2RtYV9zdXBwb3J0ZWQpOwogCit2b2lkIF9faW5pdCBwY2lfaW9tbXVfYWxsb2Modm9pZCkKK3sKKwlkbWFfb3BzID0gJmludGVsX2RtYV9vcHM7CisKKwlkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1ID0gbWFjaHZlY19kbWFfc3luY19zaW5nbGU7CisJZG1hX29wcy0+c3luY19zZ19mb3JfY3B1ID0gbWFjaHZlY19kbWFfc3luY19zZzsKKwlkbWFfb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlID0gbWFjaHZlY19kbWFfc3luY19zaW5nbGU7CisJZG1hX29wcy0+c3luY19zZ19mb3JfZGV2aWNlID0gbWFjaHZlY19kbWFfc3luY19zZzsKKwlkbWFfb3BzLT5kbWFfc3VwcG9ydGVkID0gaW9tbXVfZG1hX3N1cHBvcnRlZDsKKworCS8qCisJICogVGhlIG9yZGVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbXBvcnRhbnQgZm9yCisJICogZmFsbC1iYWNrL2ZhaWwtb3ZlciByZWFzb25zCisJICovCisJZGV0ZWN0X2ludGVsX2lvbW11KCk7CisKKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorCXBjaV9zd2lvdGxiX2luaXQoKTsKKyNlbmRpZgorfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYwppbmRleCAxNmM1MDUxLi41NzNmMDJjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC0xMywyMyArMTMsMzcgQEAKIGludCBzd2lvdGxiIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHN3aW90bGIpOwogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHN3aW90bGJfZG1hX29wcyA9IHsKLQkubWFwcGluZ19lcnJvciA9IHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IsCi0JLmFsbG9jX2NvaGVyZW50ID0gc3dpb3RsYl9hbGxvY19jb2hlcmVudCwKK3N0YXRpYyB2b2lkICppYTY0X3N3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKK3sKKwlpZiAoZGV2LT5jb2hlcmVudF9kbWFfbWFzayAhPSBETUFfNjRCSVRfTUFTSykKKwkJZ2ZwIHw9IEdGUF9ETUE7CisJcmV0dXJuIHN3aW90bGJfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBnZnApOworfQorCitzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudCA9IGlhNjRfc3dpb3RsYl9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IHN3aW90bGJfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IHN3aW90bGJfbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlID0gc3dpb3RsYl91bm1hcF9zaW5nbGUsCisJLm1hcF9wYWdlID0gc3dpb3RsYl9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZSA9IHN3aW90bGJfdW5tYXBfcGFnZSwKKwkubWFwX3NnID0gc3dpb3RsYl9tYXBfc2dfYXR0cnMsCisJLnVubWFwX3NnID0gc3dpb3RsYl91bm1hcF9zZ19hdHRycywKIAkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSwKIAkuc3luY19zZ19mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCiAJLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlLAotCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZywKLQkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnLAotCS5kbWFfc3VwcG9ydGVkX29wID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAorCS5kbWFfc3VwcG9ydGVkID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAorCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKIH07CiAKK3ZvaWQgX19pbml0IHN3aW90bGJfZG1hX2luaXQodm9pZCkKK3sKKwlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29wczsKKwlzd2lvdGxiX2luaXQoKTsKK30KKwogdm9pZCBfX2luaXQgcGNpX3N3aW90bGJfaW5pdCh2b2lkKQogewogCWlmICghaW9tbXVfZGV0ZWN0ZWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggNWMwZjQwOC4uOGEwNmRjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC01NjAzLDcgKzU2MDMsNyBAQAogICogL3Byb2MvcGVyZm1vbiBpbnRlcmZhY2UsIGZvciBkZWJ1ZyBvbmx5CiAgKi8KIAotI2RlZmluZSBQRk1fUFJPQ19TSE9XX0hFQURFUgkoKHZvaWQgKilOUl9DUFVTKzEpCisjZGVmaW5lIFBGTV9QUk9DX1NIT1dfSEVBREVSCSgodm9pZCAqKW5yX2NwdV9pZHMrMSkKIAogc3RhdGljIHZvaWQgKgogcGZtX3Byb2Nfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKQEAgLTU2MTIsNyArNTYxMiw3IEBACiAJCXJldHVybiBQRk1fUFJPQ19TSE9XX0hFQURFUjsKIAl9CiAKLQl3aGlsZSAoKnBvcyA8PSBOUl9DUFVTKSB7CisJd2hpbGUgKCpwb3MgPD0gbnJfY3B1X2lkcykgewogCQlpZiAoY3B1X29ubGluZSgqcG9zIC0gMSkpIHsKIAkJCXJldHVybiAodm9pZCAqKSpwb3M7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzU3MTYyNy4uNWQ3YzBlNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogICogc28gdGhlcmUgaXMgbm90aGluZyB0byB3b3JyeSBhYm91dC4KICAqLwogaW50Ci1jb3B5X3RocmVhZCAoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkgICAgIHVuc2lnbmVkIGxvbmcgdXNlcl9zdGFja19iYXNlLCB1bnNpZ25lZCBsb25nIHVzZXJfc3RhY2tfc2l6ZSwKIAkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCmluZGV4IGVjYjllYjcuLjcwNTNjNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAl9CiAKIAluID0gZGF0YS0+Y3B1X2NoZWNrOwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrKSB7CiAJCWlmIChjcHVfaXNzZXQobiwgZGF0YS0+Y3B1X2V2ZW50KSkgewogCQkJaWYgKCFjcHVfb25saW5lKG4pKSB7CiAJCQkJY3B1X2NsZWFyKG4sIGRhdGEtPmNwdV9ldmVudCk7CkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJCWNwdSA9IG47CiAJCQlicmVhazsKIAkJfQotCQlpZiAoKytuID09IE5SX0NQVVMpCisJCWlmICgrK24gPT0gbnJfY3B1X2lkcykKIAkJCW4gPSAwOwogCX0KIApAQCAtMzM3LDcgKzMzNyw3IEBACiAKIAkvKiBmb3IgbmV4dCByZWFkLCBzdGFydCBjaGVja2luZyBhdCBuZXh0IENQVSAqLwogCWRhdGEtPmNwdV9jaGVjayA9IGNwdTsKLQlpZiAoKytkYXRhLT5jcHVfY2hlY2sgPT0gTlJfQ1BVUykKKwlpZiAoKytkYXRhLT5jcHVfY2hlY2sgPT0gbnJfY3B1X2lkcykKIAkJZGF0YS0+Y3B1X2NoZWNrID0gMDsKIAogCXNucHJpbnRmKGNtZCwgc2l6ZW9mKGNtZCksICJyZWFkICVkXG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDg2NWFmMjcuLjcxNDA2NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxhc20vbWVtaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0X3BhdGNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhdGNoLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC01MzcsNiArNTM4LDcgQEAKIAlwYXJhdmlydF9hcmNoX3NldHVwX2Vhcmx5KCk7CiAKIAlpYTY0X3BhdGNoX3Z0b3AoKHU2NCkgX19zdGFydF9fX3Z0b3BfcGF0Y2hsaXN0LCAodTY0KSBfX2VuZF9fX3Z0b3BfcGF0Y2hsaXN0KTsKKwlwYXJhdmlydF9wYXRjaF9hcHBseSgpOwogCiAJKmNtZGxpbmVfcCA9IF9fdmEoaWE2NF9ib290X3BhcmFtLT5jb21tYW5kX2xpbmUpOwogCXN0cmxjcHkoYm9vdF9jb21tYW5kX2xpbmUsICpjbWRsaW5lX3AsIENPTU1BTkRfTElORV9TSVpFKTsKQEAgLTczMCwxMCArNzMyLDEwIEBACiBjX3N0YXJ0IChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewogI2lmZGVmIENPTkZJR19TTVAKLQl3aGlsZSAoKnBvcyA8IE5SX0NQVVMgJiYgIWNwdV9pc3NldCgqcG9zLCBjcHVfb25saW5lX21hcCkpCisJd2hpbGUgKCpwb3MgPCBucl9jcHVfaWRzICYmICFjcHVfb25saW5lKCpwb3MpKQogCQkrKypwb3M7CiAjZW5kaWYKLQlyZXR1cm4gKnBvcyA8IE5SX0NQVVMgPyBjcHVfZGF0YSgqcG9zKSA6IE5VTEw7CisJcmV0dXJuICpwb3MgPCBucl9jcHVfaWRzID8gY3B1X2RhdGEoKnBvcykgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCAqCkBAIC0xMDE2LDggKzEwMTgsNyBAQAogCQkJCQl8IElBNjRfRENSX0RBIHwgSUE2NF9EQ1JfREQgfCBJQTY0X0RDUl9MQykpOwogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotCWlmIChjdXJyZW50LT5tbSkKLQkJQlVHKCk7CisJQlVHX09OKGN1cnJlbnQtPm1tKTsKIAogCWlhNjRfbW11X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CiAJaWE2NF9tY2FfY3B1X2luaXQoaWE2NF9pbXZhKGNwdV9kYXRhKSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYwppbmRleCBkYThmMDIwLi4yZWE0MTk5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKQEAgLTE2NiwxMSArMTY2LDExIEBACiAgKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNlbmRfSVBJX21hc2soY3B1bWFza190IG1hc2ssIGludCBvcCkKK3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCBvcCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykgewogCQkJc2VuZF9JUElfc2luZ2xlKGNwdSwgb3ApOwogCX0KIH0KQEAgLTMxNiw3ICszMTYsNyBAQAogCXNlbmRfSVBJX3NpbmdsZShjcHUsIElQSV9DQUxMX0ZVTkNfU0lOR0xFKTsKIH0KIAotdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spCit2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewogCXNlbmRfSVBJX21hc2sobWFzaywgSVBJX0NBTExfRlVOQyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDUyMjkwNTQuLjc3MDBlMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCkBAIC01ODEsMTQgKzU4MSwxNCBAQAogCiAJaWE2NF9jcHVfdG9fc2FwaWNpZFswXSA9IGJvb3RfY3B1X2lkOwogCWNwdXNfY2xlYXIoY3B1X3ByZXNlbnRfbWFwKTsKLQljcHVfc2V0KDAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1X3NldCgwLCBjcHVfcG9zc2libGVfbWFwKTsKKwlzZXRfY3B1X3ByZXNlbnQoMCwgdHJ1ZSk7CisJc2V0X2NwdV9wb3NzaWJsZSgwLCB0cnVlKTsKIAlmb3IgKGNwdSA9IDEsIGkgPSAwOyBpIDwgc21wX2Jvb3RfZGF0YS5jcHVfY291bnQ7IGkrKykgewogCQlzYXBpY2lkID0gc21wX2Jvb3RfZGF0YS5jcHVfcGh5c19pZFtpXTsKIAkJaWYgKHNhcGljaWQgPT0gYm9vdF9jcHVfaWQpCiAJCQljb250aW51ZTsKLQkJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfcG9zc2libGVfbWFwKTsKKwkJc2V0X2NwdV9wcmVzZW50KGNwdSwgdHJ1ZSk7CisJCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIAkJaWE2NF9jcHVfdG9fc2FwaWNpZFtjcHVdID0gc2FwaWNpZDsKIAkJY3B1Kys7CiAJfQpAQCAtNjI2LDEyICs2MjYsOSBAQAogCSAqLwogCWlmICghbWF4X2NwdXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIG1vZGUgZGVhY3RpdmF0ZWQuXG4iKTsKLQkJY3B1c19jbGVhcihjcHVfb25saW5lX21hcCk7Ci0JCWNwdXNfY2xlYXIoY3B1X3ByZXNlbnRfbWFwKTsKLQkJY3B1c19jbGVhcihjcHVfcG9zc2libGVfbWFwKTsKLQkJY3B1X3NldCgwLCBjcHVfb25saW5lX21hcCk7Ci0JCWNwdV9zZXQoMCwgY3B1X3ByZXNlbnRfbWFwKTsKLQkJY3B1X3NldCgwLCBjcHVfcG9zc2libGVfbWFwKTsKKwkJaW5pdF9jcHVfb25saW5lKGNwdW1hc2tfb2YoMCkpOworCQlpbml0X2NwdV9wcmVzZW50KGNwdW1hc2tfb2YoMCkpOworCQlpbml0X2NwdV9wb3NzaWJsZShjcHVtYXNrX29mKDApKTsKIAkJcmV0dXJuOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKaW5kZXggZjBlYmIzNC4uNjQxYzhiNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgpAQCAtNTAsNiArNTEsMTUgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCisvKiBXZSBuZWVkIHRvIGRlZmluZSBhIHJlYWwgZnVuY3Rpb24gZm9yIHNjaGVkX2Nsb2NrLCB0byBvdmVycmlkZSB0aGUKKyAgIHdlYWsgZGVmYXVsdCB2ZXJzaW9uICovCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHBhcmF2aXJ0X3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QQVJBVklSVAogc3RhdGljIHZvaWQKIHBhcmF2aXJ0X2Nsb2Nrc291cmNlX3Jlc3VtZSh2b2lkKQogewpAQCAtNDA1LDYgKzQxNSwyMSBAQAogCS5uYW1lID0JCSJ0aW1lciIKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19lZmlfZGV2ID0geworCS5uYW1lID0gInJ0Yy1lZmkiLAorCS5pZCA9IC0xLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcnRjX2luaXQodm9pZCkKK3sKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZWZpX2RldikgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBydGMgZGV2aWNlLi4uXG4iKTsKKworCS8qIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciAqLworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQocnRjX2luaXQpOworCiB2b2lkIF9faW5pdAogdGltZV9pbml0ICh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDM3NjVlZmMuLjRhOTVlODYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE2OSw2ICsxNjksMzAgQEAKIAkgIF9fZW5kX19fbWNraW5sZXlfZTlfYnVuZGxlcyA9IC47CiAJfQogCisjaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpCisgIC4gPSBBTElHTigxNik7CisgIC5wYXJhdmlydF9idW5kbGVzIDogQVQoQUREUigucGFyYXZpcnRfYnVuZGxlcykgLSBMT0FEX09GRlNFVCkKKwl7CisJICBfX3N0YXJ0X3BhcmF2aXJ0X2J1bmRsZXMgPSAuOworICAgICAgICAgICooLnBhcmF2aXJ0X2J1bmRsZXMpCisJICBfX3N0b3BfcGFyYXZpcnRfYnVuZGxlcyA9IC47CisJfQorICAuID0gQUxJR04oMTYpOworICAucGFyYXZpcnRfaW5zdHMgOiBBVChBRERSKC5wYXJhdmlydF9pbnN0cykgLSBMT0FEX09GRlNFVCkKKwl7CisJICBfX3N0YXJ0X3BhcmF2aXJ0X2luc3RzID0gLjsKKyAgICAgICAgICAqKC5wYXJhdmlydF9pbnN0cykKKwkgIF9fc3RvcF9wYXJhdmlydF9pbnN0cyA9IC47CisJfQorICAuID0gQUxJR04oMTYpOworICAucGFyYXZpcnRfYnJhbmNoZXMgOiBBVChBRERSKC5wYXJhdmlydF9icmFuY2hlcykgLSBMT0FEX09GRlNFVCkKKwl7CisJICBfX3N0YXJ0X3BhcmF2aXJ0X2JyYW5jaGVzID0gLjsKKwkgICooLnBhcmF2aXJ0X2JyYW5jaGVzKQorCSAgX19zdG9wX3BhcmF2aXJ0X2JyYW5jaGVzID0gLjsKKwl9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfR0VORVJJQykKICAgLyogTWFjaGluZSBWZWN0b3IgKi8KICAgLiA9IEFMSUdOKDE2KTsKQEAgLTIwMSw2ICsyMjUsMTIgQEAKIAkgIF9fc3RhcnRfZ2F0ZV9zZWN0aW9uID0gLjsKIAkgICooLmRhdGEuZ2F0ZSkKIAkgIF9fc3RvcF9nYXRlX3NlY3Rpb24gPSAuOworI2lmZGVmIENPTkZJR19YRU4KKwkgIC4gPSBBTElHTihQQUdFX1NJWkUpOworCSAgX194ZW5fc3RhcnRfZ2F0ZV9zZWN0aW9uID0gLjsKKwkgICooLmRhdGEuZ2F0ZS54ZW4pCisJICBfX3hlbl9zdG9wX2dhdGVfc2VjdGlvbiA9IC47CisjZW5kaWYKIAl9CiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogbWFrZSBzdXJlIHRoZSBnYXRlIHBhZ2UgZG9lc24ndCBleHBvc2UKICAgCQkJCSAqIGtlcm5lbCBkYXRhCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKaW5kZXggMDc2YjAwZC4uMjhhZjZhNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwpAQCAtNzAsNyArNzAsNyBAQAogCWludCBsOwogCiAJZm9yIChsID0gMDsgbCA8IChsZW4gKyAzMik7IGwgKz0gMzIpCi0JCWlhNjRfZmMoc3RhcnQgKyBsKTsKKwkJaWE2NF9mYygodm9pZCAqKShzdGFydCArIGwpKTsKIAogCWlhNjRfc3luY19pKCk7CiAJaWE2NF9zcmx6X2koKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKaW5kZXggZDRkMjgwNS4uYTE4ZWUxNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKQEAgLTM4Niw3ICszODYsNyBAQAogCQllbHNlCiAJCQkqcm5hdF9hZGRyID0gKCpybmF0X2FkZHIpICYgKH5uYXRfbWFzayk7CiAKLQkJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX0JTUFNUT1JFLCBic3BzdG9yZSk7CisJCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9CU1BTVE9SRSwgKHVuc2lnbmVkIGxvbmcpYnNwc3RvcmUpOwogCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfUk5BVCwgcm5hdCk7CiAJfQogCWxvY2FsX2lycV9yZXN0b3JlKHBzcik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCmluZGV4IDM4MjMyYjMuLjJjMjUwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdnRsYi5jCkBAIC0yMTAsNiArMjEwLDcgQEAKIAkJcGh5X3B0ZSAgJj0gflBBR0VfRkxBR1NfUlZfTUFTSzsKIAkJcHNyID0gaWE2NF9jbGVhcl9pYygpOwogCQlpYTY0X2l0Yyh0eXBlLCB2YSwgcGh5X3B0ZSwgaXRpcl9wcyhpdGlyKSk7CisJCXBhcmF2aXJ0X2R2X3NlcmlhbGl6ZV9kYXRhKCk7CiAJCWlhNjRfc2V0X3Bzcihwc3IpOwogCX0KIApAQCAtNDU2LDYgKzQ1Nyw3IEBACiAJCXBoeV9wdGUgICY9IH5QQUdFX0ZMQUdTX1JWX01BU0s7CiAJCXBzciA9IGlhNjRfY2xlYXJfaWMoKTsKIAkJaWE2NF9pdGModHlwZSwgaWZhLCBwaHlfcHRlLCBwcyk7CisJCXBhcmF2aXJ0X2R2X3NlcmlhbGl6ZV9kYXRhKCk7CiAJCWlhNjRfc2V0X3Bzcihwc3IpOwogCX0KIAlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggNTZlMTI5MC4uYzBmM2JlZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL21jYS5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCkBAIC0yNTksNiArMjYwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogc2V0dXBfZ2F0ZSAodm9pZCkKIHsKKwl2b2lkICpnYXRlX3NlY3Rpb247CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkvKgpAQCAtMjY2LDEwICsyNjgsMTEgQEAKIAkgKiBoZWFkZXJzIGV0Yy4gYW5kIG9uY2UgZXhlY3V0ZS1vbmx5IHBhZ2UgdG8gZW5hYmxlCiAJICogcHJpdmlsZWdlLXByb21vdGlvbiB2aWEgImVwYyI6CiAJICovCi0JcGFnZSA9IHZpcnRfdG9fcGFnZShpYTY0X2ltdmEoX19zdGFydF9nYXRlX3NlY3Rpb24pKTsKKwlnYXRlX3NlY3Rpb24gPSBwYXJhdmlydF9nZXRfZ2F0ZV9zZWN0aW9uKCk7CisJcGFnZSA9IHZpcnRfdG9fcGFnZShpYTY0X2ltdmEoZ2F0ZV9zZWN0aW9uKSk7CiAJcHV0X2tlcm5lbF9wYWdlKHBhZ2UsIEdBVEVfQUREUiwgUEFHRV9SRUFET05MWSk7CiAjaWZkZWYgSEFWRV9CVUdHWV9TRUdSRUwKLQlwYWdlID0gdmlydF90b19wYWdlKGlhNjRfaW12YShfX3N0YXJ0X2dhdGVfc2VjdGlvbiArIFBBR0VfU0laRSkpOworCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaWE2NF9pbXZhKGdhdGVfc2VjdGlvbiArIFBBR0VfU0laRSkpOwogCXB1dF9rZXJuZWxfcGFnZShwYWdlLCBHQVRFX0FERFIgKyBQQUdFX1NJWkUsIFBBR0VfR0FURSk7CiAjZWxzZQogCXB1dF9rZXJuZWxfcGFnZShwYWdlLCBHQVRFX0FERFIgKyBQRVJDUFVfUEFHRV9TSVpFLCBQQUdFX0dBVEUpOwpAQCAtNjMzLDggKzYzNiw3IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19GTEFUTUVNCi0JaWYgKCFtZW1fbWFwKQotCQlCVUcoKTsKKwlCVUdfT04oIW1lbV9tYXApOwogCW1heF9tYXBuciA9IG1heF9sb3dfcGZuOwogI2VuZGlmCiAKQEAgLTY2Nyw4ICs2NjksOCBAQAogCSAqIGNvZGUgY2FuIHRlbGwgdGhlbSBhcGFydC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfc3lzY2FsbHM7ICsraSkgewotCQlleHRlcm4gdW5zaWduZWQgbG9uZyBmc3lzY2FsbF90YWJsZVtOUl9zeXNjYWxsc107CiAJCWV4dGVybiB1bnNpZ25lZCBsb25nIHN5c19jYWxsX3RhYmxlW05SX3N5c2NhbGxzXTsKKwkJdW5zaWduZWQgbG9uZyAqZnN5c2NhbGxfdGFibGUgPSBwYXJhdmlydF9nZXRfZnN5c2NhbGxfdGFibGUoKTsKIAogCQlpZiAoIWZzeXNjYWxsX3RhYmxlW2ldIHx8IG5vbHdzeXMpCiAJCQlmc3lzY2FsbF90YWJsZVtpXSA9IHN5c19jYWxsX3RhYmxlW2ldIHwgMTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBiZDk4MThhLi5iOWYzZDdiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAobW0gIT0gY3VycmVudC0+YWN0aXZlX21tIHx8IGNwdXNfd2VpZ2h0KG1tLT5jcHVfdm1fbWFzaykgIT0gMSkgeworCWlmIChtbSAhPSBjdXJyZW50LT5hY3RpdmVfbW0gfHwgY3B1bWFza193ZWlnaHQobW1fY3B1bWFzayhtbSkpICE9IDEpIHsKIAkJcGxhdGZvcm1fZ2xvYmFsX3RsYl9wdXJnZShtbSwgc3RhcnQsIGVuZCwgbmJpdHMpOwogCQlwcmVlbXB0X2VuYWJsZSgpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc2NyaXB0cy9wdmNoZWNrLnNlZCBiL2FyY2gvaWE2NC9zY3JpcHRzL3B2Y2hlY2suc2VkCmluZGV4IGJhNjZhYzIuLmU1OTgwOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zY3JpcHRzL3B2Y2hlY2suc2VkCisrKyBiL2FyY2gvaWE2NC9zY3JpcHRzL3B2Y2hlY2suc2VkCkBAIC0xNyw2ICsxNyw3IEBACiBzL21vdi4qPS4qY3JcLml2ci8ud2FybmluZyBcImNyLml2ciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCiBzL21vdi4qPVteXC5dKnBzci8ud2FybmluZyBcInBzciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCSMgYXZvaWQgYXIuZnBzcgogcy9tb3YuKj0uKmFyXC5lZmxhZ3MvLndhcm5pbmcgXCJhci5lZmxhZ3Mgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZworcy9tb3YuKj0uKmFyXC5pdGMuKi8ud2FybmluZyBcImFyLml0YyBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCiBzL21vdi4qY3JcLmlmYS4qPS4qLy53YXJuaW5nIFwiY3IuaWZhIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKIHMvbW92LipjclwuaXRpci4qPS4qLy53YXJuaW5nIFwiY3IuaXRpciBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCiBzL21vdi4qY3JcLmloYS4qPS4qLy53YXJuaW5nIFwiY3IuaWhhIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDBkNGZmYTQuLjU3ZjI4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTM1LDggKzEzNSw3IEBACiAJfQogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmICghd2FyX2xpc3QpCi0JCUJVRygpOworCUJVR19PTighd2FyX2xpc3QpOwogCiAJU0FMX0NBTExfTk9MT0NLKGlzcnYsIFNOX1NBTF9JT0lGX0dFVF9XSURHRVRfRE1BRkxVU0hfTElTVCwKIAkJCW5hc2lkLCB3aWRnZXQsIF9fcGEod2FyX2xpc3QpLCAwLCAwLCAwICwwKTsKQEAgLTE4MCwyMyArMTc5LDIwIEBACiAJCXNpemVvZihzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX2tlcm5lbCAqKTsKIAlodWJkZXYtPmhkaV9mbHVzaF9uYXNpZF9saXN0LndpZGdldF9wID0KIAkJa3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWh1YmRldi0+aGRpX2ZsdXNoX25hc2lkX2xpc3Qud2lkZ2V0X3ApCi0JCUJVRygpOworCUJVR19PTighaHViZGV2LT5oZGlfZmx1c2hfbmFzaWRfbGlzdC53aWRnZXRfcCk7CiAKIAlmb3IgKHdpZGdldCA9IDA7IHdpZGdldCA8PSBIVUJfV0lER0VUX0lEX01BWDsgd2lkZ2V0KyspIHsKIAkJc2l6ZSA9IERFVl9QRVJfV0lER0VUICoKIAkJCXNpemVvZihzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX2tlcm5lbCk7CiAJCXNuX2ZsdXNoX2RldmljZV9rZXJuZWwgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXNuX2ZsdXNoX2RldmljZV9rZXJuZWwpCi0JCQlCVUcoKTsKKwkJQlVHX09OKCFzbl9mbHVzaF9kZXZpY2Vfa2VybmVsKTsKIAogCQlkZXZfZW50cnkgPSBzbl9mbHVzaF9kZXZpY2Vfa2VybmVsOwogCQlmb3IgKGRldmljZSA9IDA7IGRldmljZSA8IERFVl9QRVJfV0lER0VUOwogCQkgICAgIGRldmljZSsrLCBkZXZfZW50cnkrKykgewogCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX2NvbW1vbik7CiAJCQlkZXZfZW50cnktPmNvbW1vbiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWRldl9lbnRyeS0+Y29tbW9uKQotCQkJCUJVRygpOworCQkJQlVHX09OKCFkZXZfZW50cnktPmNvbW1vbik7CiAJCQlpZiAoc25fcHJvbV9mZWF0dXJlX2F2YWlsYWJsZShQUkZfREVWSUNFX0ZMVVNIX0xJU1QpKQogCQkJCXN0YXR1cyA9IHNhbF9nZXRfZGV2aWNlX2RtYWZsdXNoX2xpc3QoCiAJCQkJCSAgICAgaHViZGV2LT5oZGlfbmFzaWQsIHdpZGdldCwgZGV2aWNlLApAQCAtMzI2LDggKzMyMiw3IEBACiAJICovCiAJY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbl9wbGF0Zm9ybV9kYXRhKSwKIAkJCQkJICAgIEdGUF9LRVJORUwpOwotCWlmIChjb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpCi0JCUJVRygpOworCUJVR19PTihjb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpOwogCXNuX3BsYXRmb3JtX2RhdGEgPQogCQkJKHN0cnVjdCBzbl9wbGF0Zm9ybV9kYXRhICopIGNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CiAJc25fcGxhdGZvcm1fZGF0YS0+cHJvdmlkZXJfc29mdCA9IHByb3ZpZGVyX3NvZnQ7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCmluZGV4IGUyZWIyZGEuLmVlNzc0YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIHsKIAkJY29udHJvbGxlci0+d2luZG93ID0ga2NhbGxvYygyLCBzaXplb2Yoc3RydWN0IHBjaV93aW5kb3cpLAogCQkJCQkgICAgIEdGUF9LRVJORUwpOwotCQlpZiAoY29udHJvbGxlci0+d2luZG93ID09IE5VTEwpCi0JCQlCVUcoKTsKKwkJQlVHX09OKGNvbnRyb2xsZXItPndpbmRvdyA9PSBOVUxMKTsKIAkJY29udHJvbGxlci0+d2luZG93WzBdLm9mZnNldCA9IGxlZ2FjeV9pbzsKIAkJY29udHJvbGxlci0+d2luZG93WzBdLnJlc291cmNlLm5hbWUgPSAibGVnYWN5X2lvIjsKIAkJY29udHJvbGxlci0+d2luZG93WzBdLnJlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKQEAgLTE2OCw4ICsxNjcsNyBAQAogCWlkeCA9IGNvbnRyb2xsZXItPndpbmRvd3M7CiAJbmV3X2NvdW50ID0gY29udHJvbGxlci0+d2luZG93cyArIGNvdW50OwogCW5ld193aW5kb3cgPSBrY2FsbG9jKG5ld19jb3VudCwgc2l6ZW9mKHN0cnVjdCBwY2lfd2luZG93KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG5ld193aW5kb3cgPT0gTlVMTCkKLQkJQlVHKCk7CisJQlVHX09OKG5ld193aW5kb3cgPT0gTlVMTCk7CiAJaWYgKGNvbnRyb2xsZXItPndpbmRvdykgewogCQltZW1jcHkobmV3X3dpbmRvdywgY29udHJvbGxlci0+d2luZG93LAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwY2lfd2luZG93KSAqIGNvbnRyb2xsZXItPndpbmRvd3MpOwpAQCAtMjIyLDggKzIyMCw3IEBACiAJCSh1NjQpIF9fcGEocGNpZGV2X2luZm8pLAogCQkodTY0KSBfX3BhKHNuX2lycV9pbmZvKSk7CiAKLQlpZiAoc3RhdHVzKQotCQlCVUcoKTsgLyogQ2Fubm90IGdldCBwbGF0Zm9ybSBwY2kgZGV2aWNlIGluZm9ybWF0aW9uICovCisJQlVHX09OKHN0YXR1cyk7IC8qIENhbm5vdCBnZXQgcGxhdGZvcm0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiAqLwogCiAKIAkvKiBDb3B5IG92ZXIgUElPIE1hcHBlZCBBZGRyZXNzZXMgKi8KQEAgLTMwNyw4ICszMDQsNyBAQAogCXByb21fYnVzc29mdF9wdHIgPSBfX3ZhKHByb21fYnVzc29mdF9wdHIpOwogCiAJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKCpjb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb250cm9sbGVyKQotCQlCVUcoKTsKKwlCVUdfT04oIWNvbnRyb2xsZXIpOwogCWNvbnRyb2xsZXItPnNlZ21lbnQgPSBzZWdtZW50OwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCAwMmM1YjhhLi5lNDU2ZjA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC03MzIsOCArNzMyLDcgQEAKIAkJa2xfY29uZmlnX2hkcl90ICprbGdyYXBoX2hlYWRlcjsKIAkJbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKG5vZGUpOwogCQlrbGdyYXBoX2hlYWRlciA9IGlhNjRfc25fZ2V0X2tsY29uZmlnX2FkZHIobmFzaWQpOwotCQlpZiAoa2xncmFwaF9oZWFkZXIgPT0gTlVMTCkKLQkJCUJVRygpOworCQlCVUdfT04oa2xncmFwaF9oZWFkZXIgPT0gTlVMTCk7CiAJCWJyZCA9IE5PREVfT0ZGU0VUX1RPX0xCT0FSRChuYXNpZCwga2xncmFwaF9oZWFkZXItPmNoX2JvYXJkX2luZm8pOwogCQl3aGlsZSAoYnJkKSB7CiAJCQlpZiAoYm9hcmRfbmVlZHNfY25vZGUoYnJkLT5icmRfdHlwZSkgJiYgcGh5c2ljYWxfbm9kZV9tYXBbYnJkLT5icmRfbmFzaWRdIDwgMCkgewpAQCAtNzUwLDcgKzc0OSw3IEBACiB7CiAJbG9uZyBjcHU7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IE5SX0NQVVM7IGNwdSsrKQorCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCiAJCWlmIChjcHVpZF90b19uYXNpZChjcHUpID09IG5hc2lkICYmCiAJCQkJCWNwdWlkX3RvX3NsaWNlKGNwdSkgPT0gc2xpY2UpCiAJCQlyZXR1cm4gY3B1OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jCmluZGV4IDRkY2NlM2QuLmU2MzMyODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3Byb21pbmZvX3Byb2MuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9wcm9taW5mb19wcm9jLmMKQEAgLTIyNSw3ICsyMjUsNiBAQAogaW50IF9faW5pdCBwcm9taW5mb19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZW50cDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7CiAJY25vZGVpZF90IGNub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBuYXNpZDsKIAlpbnQgc2l6ZTsKQEAgLTI0NiwxNCArMjQ1LDEwIEBACiAJCXNwcmludGYobmFtZSwgIm5vZGUlZCIsIGNub2RlaWQpOwogCQkqZW50cCA9IHByb2NfbWtkaXIobmFtZSwgc2dpX3Byb21pbmZvX2VudHJ5KTsKIAkJbmFzaWQgPSBjbm9kZWlkX3RvX25hc2lkKGNub2RlaWQpOwotCQlwID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZml0IiwgMCwgKmVudHAsIHJlYWRfZml0X2VudHJ5LAorCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJmaXQiLCAwLCAqZW50cCwgcmVhZF9maXRfZW50cnksCiAJCQkJCSAgICh2b2lkICopbmFzaWQpOwotCQlpZiAocCkKLQkJCXAtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCXAgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ2ZXJzaW9uIiwgMCwgKmVudHAsCisJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInZlcnNpb24iLCAwLCAqZW50cCwKIAkJCQkJICAgcmVhZF92ZXJzaW9uX2VudHJ5LCAodm9pZCAqKW5hc2lkKTsKLQkJaWYgKHApCi0JCQlwLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQllbnRwKys7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKaW5kZXggZTU4NWY5YS4uMTE3NjUwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdW5zaWduZWQgbG9uZyBpdGM7CiAKIAlpdGMgPSBpYTY0X2dldF9pdGMoKTsKLQlzbXBfZmx1c2hfdGxiX2NwdW1hc2sobW0tPmNwdV92bV9tYXNrKTsKKwlzbXBfZmx1c2hfdGxiX2NwdW1hc2soKm1tX2NwdW1hc2sobW0pKTsKIAlpdGMgPSBpYTY0X2dldF9pdGMoKSAtIGl0YzsKIAlfX2dldF9jcHVfdmFyKHB0Y3N0YXRzKS5zaHViX2lwaV9mbHVzaGVzX2l0Y19jbG9ja3MgKz0gaXRjOwogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnNodWJfaXBpX2ZsdXNoZXMrKzsKQEAgLTE4Miw3ICsxODIsNyBAQAogCW5vZGVzX2NsZWFyKG5vZGVzX2ZsdXNoZWQpOwogCWkgPSAwOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtbS0+Y3B1X3ZtX21hc2spIHsKKwlmb3JfZWFjaF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkgewogCQljbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CiAJCW5vZGVfc2V0KGNub2RlLCBub2Rlc19mbHVzaGVkKTsKIAkJbGNwdSA9IGNwdTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCiBzdGF0aWMgdm9pZCAqc24yX3B0Y19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmaWxlLCBsb2ZmX3QgKiBvZmZzZXQpCiB7Ci0JaWYgKCpvZmZzZXQgPCBOUl9DUFVTKQorCWlmICgqb2Zmc2V0IDwgbnJfY3B1X2lkcykKIAkJcmV0dXJuIG9mZnNldDsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQ2OSw3ICs0NjksNyBAQAogc3RhdGljIHZvaWQgKnNuMl9wdGNfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhLCBsb2ZmX3QgKiBvZmZzZXQpCiB7CiAJKCpvZmZzZXQpKys7Ci0JaWYgKCpvZmZzZXQgPCBOUl9DUFVTKQorCWlmICgqb2Zmc2V0IDwgbnJfY3B1X2lkcykKIAkJcmV0dXJuIG9mZnNldDsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQ5MSw3ICs0OTEsNyBAQAogCQlzZXFfcHJpbnRmKGZpbGUsICIjIHB0Y3Rlc3QgJWQsIGZsdXNob3B0ICVkXG4iLCBzbjJfcHRjdGVzdCwgc24yX2ZsdXNoX29wdCk7CiAJfQogCi0JaWYgKGNwdSA8IE5SX0NQVVMgJiYgY3B1X29ubGluZShjcHUpKSB7CisJaWYgKGNwdSA8IG5yX2NwdV9pZHMgJiYgY3B1X29ubGluZShjcHUpKSB7CiAJCXN0YXQgPSAmcGVyX2NwdShwdGNzdGF0cywgY3B1KTsKIAkJc2VxX3ByaW50ZihmaWxlLCAiY3B1ICVkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkXG4iLCBjcHUsIHN0YXQtPnB0Y19sLAogCQkJCXN0YXQtPmNoYW5nZV9yaWQsIHN0YXQtPnNodWJfcHRjX2ZsdXNoZXMsIHN0YXQtPm5vZGVzX2ZsdXNoZWQsCkBAIC01NTQsNyArNTU0LDcgQEAKIAogCXByb2Nfc24yX3B0YyA9IHByb2NfY3JlYXRlKFBUQ19CQVNFTkFNRSwgMDQ0NCwKIAkJCQkgICBOVUxMLCAmcHJvY19zbjJfcHRjX29wZXJhdGlvbnMpOwotCWlmICghJnByb2Nfc24yX3B0Y19vcGVyYXRpb25zKSB7CisJaWYgKCFwcm9jX3NuMl9wdGMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gY3JlYXRlICVzIHByb2MgZW50cnkiLCBQVENfQkFTRU5BTUUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCmluZGV4IGJlMzM5NDcuLjllNjQ5MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jCkBAIC0yNzUsOCArMjc1LDcgQEAKIAogCS8qIGdldCBpdCdzIGludGVyY29ubmVjdCB0b3BvbG9neSAqLwogCXN6ID0gb3AtPnBvcnRzICogc2l6ZW9mKHN0cnVjdCBzbl9od3BlcmZfcG9ydF9pbmZvKTsKLQlpZiAoc3ogPiBzaXplb2YocHRkYXRhKSkKLQkJQlVHKCk7CisJQlVHX09OKHN6ID4gc2l6ZW9mKHB0ZGF0YSkpOwogCWUgPSBpYTY0X3NuX2h3cGVyZl9vcChzbl9od3BlcmZfbWFzdGVyX25hc2lkLAogCQkJICAgICAgU05fSFdQRVJGX0VOVU1fUE9SVFMsIG5vZGVvYmotPmlkLCBzeiwKIAkJCSAgICAgICh1NjQpJnB0ZGF0YSwgMCwgMCwgTlVMTCk7CkBAIC0zMTAsOCArMzA5LDcgQEAKIAlpZiAocm91dGVyICYmICghZm91bmRfY3B1IHx8ICFmb3VuZF9tZW0pKSB7CiAJCS8qIHNlYXJjaCBmb3IgYSBub2RlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSByb3V0ZXIgKi8KIAkJc3ogPSByb3V0ZXItPnBvcnRzICogc2l6ZW9mKHN0cnVjdCBzbl9od3BlcmZfcG9ydF9pbmZvKTsKLQkJaWYgKHN6ID4gc2l6ZW9mKHB0ZGF0YSkpCi0JCQlCVUcoKTsKKwkJQlVHX09OKHN6ID4gc2l6ZW9mKHB0ZGF0YSkpOwogCQllID0gaWE2NF9zbl9od3BlcmZfb3Aoc25faHdwZXJmX21hc3Rlcl9uYXNpZCwKIAkJCQkgICAgICBTTl9IV1BFUkZfRU5VTV9QT1JUUywgcm91dGVyLT5pZCwgc3osCiAJCQkJICAgICAgKHU2NCkmcHRkYXRhLCAwLCAwLCBOVUxMKTsKQEAgLTYxMiw3ICs2MTAsNyBAQAogCW9wX2luZm8tPmEtPmFyZyAmPSBTTl9IV1BFUkZfQVJHX09CSklEX01BU0s7CiAKIAlpZiAoY3B1ICE9IFNOX0hXUEVSRl9BUkdfQU5ZX0NQVSkgewotCQlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNwdV9vbmxpbmUoY3B1KSkgeworCQlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkgewogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYwppbmRleCA4NjNmNTAxLi44YzEzMGU4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaV9kbWEuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtYXR0cnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgogI2luY2x1ZGUgPGFzbS9zbi9wY2lidXNfcHJvdmlkZXJfZGVmcy5oPgpAQCAtMzEsNyArMzEsNyBAQAogICogdGhpcyBmdW5jdGlvbi4gIE9mIGNvdXJzZSwgU04gb25seSBzdXBwb3J0cyBkZXZpY2VzIHRoYXQgaGF2ZSAzMiBvciBtb3JlCiAgKiBhZGRyZXNzIGJpdHMgd2hlbiB1c2luZyB0aGUgUE1VLgogICovCi1pbnQgc25fZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQorc3RhdGljIGludCBzbl9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogCkBAIC0zOSw3ICszOSw2IEBACiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfc3VwcG9ydGVkKTsKIAogLyoqCiAgKiBzbl9kbWFfc2V0X21hc2sgLSBzZXQgdGhlIERNQSBtYXNrCkBAIC03NSw4ICs3NCw4IEBACiAgKiBxdWV1ZSBmb3IgYSBTQ1NJIGNvbnRyb2xsZXIpLiAgU2VlIERvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgZm9yCiAgKiBtb3JlIGluZm9ybWF0aW9uLgogICovCi12b2lkICpzbl9kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSAgICBkbWFfYWRkcl90ICogZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgdm9pZCAqc25fZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgZG1hX2FkZHJfdCAqIGRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQogewogCXZvaWQgKmNwdWFkZHI7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CkBAIC0xMjQsNyArMTIzLDYgQEAKIAogCXJldHVybiBjcHVhZGRyOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfYWxsb2NfY29oZXJlbnQpOwogCiAvKioKICAqIHNuX3BjaV9mcmVlX2NvaGVyZW50IC0gZnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGNvaGVyZW50IERNQWFibGUgcmVnaW9uCkBAIC0xMzYsOCArMTM0LDggQEAKICAqIEZyZWVzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRtYV9hbGxvY19jb2hlcmVudCgpLCBwb3RlbnRpYWxseSB1bm1hcHBpbmcKICAqIGFueSBhc3NvY2lhdGVkIElPTU1VIG1hcHBpbmdzLgogICovCi12b2lkIHNuX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAotCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCitzdGF0aWMgdm9pZCBzbl9kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKKwkJCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnByb3ZpZGVyID0gU05fUENJREVWX0JVU1BST1ZJREVSKHBkZXYpOwpAQCAtMTQ3LDcgKzE0NSw2IEBACiAJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBkbWFfaGFuZGxlLCAwKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNwdV9hZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfZnJlZV9jb2hlcmVudCk7CiAKIC8qKgogICogc25fZG1hX21hcF9zaW5nbGVfYXR0cnMgLSBtYXAgYSBzaW5nbGUgcGFnZSBmb3IgRE1BCkBAIC0xNzMsMTAgKzE3MCwxMiBAQAogICogVE9ETzogc2ltcGxpZnkgb3VyIGludGVyZmFjZTsKICAqICAgICAgIGZpZ3VyZSBvdXQgaG93IHRvIHNhdmUgZG1hbWFwIGhhbmRsZSBzbyBjYW4gdXNlIHR3byBzdGVwLgogICovCi1kbWFfYWRkcl90IHNuX2RtYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsCi0JCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24sCi0JCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgZG1hX2FkZHJfdCBzbl9kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogeworCXZvaWQgKmNwdV9hZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CkBAIC0yMDEsNyArMjAwLDYgQEAKIAl9CiAJcmV0dXJuIGRtYV9hZGRyOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfbWFwX3NpbmdsZV9hdHRycyk7CiAKIC8qKgogICogc25fZG1hX3VubWFwX3NpbmdsZV9hdHRycyAtIHVuYW1wIGEgRE1BIG1hcHBlZCBwYWdlCkBAIC0yMTUsMjEgKzIxMywyMCBAQAogICogYnkgQGRtYV9oYW5kbGUgaW50byB0aGUgY29oZXJlbmNlIGRvbWFpbi4gIE9uIFNOLCB3ZSdyZSBhbHdheXMgY2FjaGUKICAqIGNvaGVyZW50LCBzbyB3ZSBqdXN0IG5lZWQgdG8gZnJlZSBhbnkgQVRFcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXBwaW5nLgogICovCi12b2lkIHNuX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLAotCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIHZvaWQgc25fZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbl9wY2lidXNfcHJvdmlkZXIgKnByb3ZpZGVyID0gU05fUENJREVWX0JVU1BST1ZJREVSKHBkZXYpOwogCiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogCi0JcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBkbWFfYWRkciwgZGlyZWN0aW9uKTsKKwlwcm92aWRlci0+ZG1hX3VubWFwKHBkZXYsIGRtYV9hZGRyLCBkaXIpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzKTsKIAogLyoqCi0gKiBzbl9kbWFfdW5tYXBfc2dfYXR0cnMgLSB1bm1hcCBhIERNQSBzY2F0dGVybGlzdAorICogc25fZG1hX3VubWFwX3NnIC0gdW5tYXAgYSBETUEgc2NhdHRlcmxpc3QKICAqIEBkZXY6IGRldmljZSB0byB1bm1hcAogICogQHNnOiBzY2F0dGVybGlzdCB0byB1bm1hcAogICogQG5od2VudHJpZXM6IG51bWJlciBvZiBzY2F0dGVybGlzdCBlbnRyaWVzCkBAIC0yMzgsOSArMjM1LDkgQEAKICAqCiAgKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgogICovCi12b2lkIHNuX2RtYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkJICAgaW50IG5od2VudHJpZXMsIGludCBkaXJlY3Rpb24sCi0JCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyB2b2lkIHNuX2RtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJICAgIGludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CkBAIC0yNTAsMTUgKzI0NywxNCBAQAogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5od2VudHJpZXMsIGkpIHsKLQkJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBzZy0+ZG1hX2FkZHJlc3MsIGRpcmVjdGlvbik7CisJCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgc2ctPmRtYV9hZGRyZXNzLCBkaXIpOwogCQlzZy0+ZG1hX2FkZHJlc3MgPSAoZG1hX2FkZHJfdCkgTlVMTDsKIAkJc2ctPmRtYV9sZW5ndGggPSAwOwogCX0KIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3VubWFwX3NnX2F0dHJzKTsKIAogLyoqCi0gKiBzbl9kbWFfbWFwX3NnX2F0dHJzIC0gbWFwIGEgc2NhdHRlcmxpc3QgZm9yIERNQQorICogc25fZG1hX21hcF9zZyAtIG1hcCBhIHNjYXR0ZXJsaXN0IGZvciBETUEKICAqIEBkZXY6IGRldmljZSB0byBtYXAgZm9yCiAgKiBAc2c6IHNjYXR0ZXJsaXN0IHRvIG1hcAogICogQG5od2VudHJpZXM6IG51bWJlciBvZiBlbnRyaWVzCkBAIC0yNzIsOCArMjY4LDkgQEAKICAqCiAgKiBNYXBzIGVhY2ggZW50cnkgb2YgQHNnIGZvciBETUEuCiAgKi8KLWludCBzbl9kbWFfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCi0JCQlpbnQgbmh3ZW50cmllcywgaW50IGRpcmVjdGlvbiwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgaW50IHNuX2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSBpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2F2ZWRfc2cgPSBzZ2wsICpzZzsKQEAgLTMxMCw4ICszMDcsNyBAQAogCQkJICogRnJlZSBhbnkgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBlbnRyaWVzLgogCQkJICovCiAJCQlpZiAoaSA+IDApCi0JCQkJc25fZG1hX3VubWFwX3NnX2F0dHJzKGRldiwgc2F2ZWRfc2csIGksCi0JCQkJCQkgICAgICBkaXJlY3Rpb24sIGF0dHJzKTsKKwkJCQlzbl9kbWFfdW5tYXBfc2coZGV2LCBzYXZlZF9zZywgaSwgZGlyLCBhdHRycyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0zMjAsNDEgKzMxNiwzNiBAQAogCiAJcmV0dXJuIG5od2VudHJpZXM7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9tYXBfc2dfYXR0cnMpOwogCi12b2lkIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSk7CiAKLXZvaWQgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICBzaXplX3Qgc2l6ZSwKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSk7CiAKLXZvaWQgc25fZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNuX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV9zeW5jX3NnX2Zvcl9jcHUpOwogCi12b2lkIHNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKIAotaW50IHNuX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3N0YXRpYyBpbnQgc25fZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfbWFwcGluZ19lcnJvcik7CiAKIHU2NCBzbl9kbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDcxLDMgKzQ2MiwyMyBAQAogIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIHNuX2RtYV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CQk9IHNuX2RtYV9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAkJPSBzbl9kbWFfZnJlZV9jb2hlcmVudCwKKwkubWFwX3BhZ2UJCT0gc25fZG1hX21hcF9wYWdlLAorCS51bm1hcF9wYWdlCQk9IHNuX2RtYV91bm1hcF9wYWdlLAorCS5tYXBfc2cJCQk9IHNuX2RtYV9tYXBfc2csCisJLnVubWFwX3NnCQk9IHNuX2RtYV91bm1hcF9zZywKKwkuc3luY19zaW5nbGVfZm9yX2NwdSAJPSBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSwKKwkuc3luY19zZ19mb3JfY3B1CT0gc25fZG1hX3N5bmNfc2dfZm9yX2NwdSwKKwkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAorCS5zeW5jX3NnX2Zvcl9kZXZpY2UJPSBzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlLAorCS5tYXBwaW5nX2Vycm9yCQk9IHNuX2RtYV9tYXBwaW5nX2Vycm9yLAorCS5kbWFfc3VwcG9ydGVkCQk9IHNuX2RtYV9zdXBwb3J0ZWQsCit9OworCit2b2lkIHNuX2RtYV9pbml0KHZvaWQpCit7CisJZG1hX29wcyA9ICZzbl9kbWFfb3BzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKaW5kZXggMDYwZGY0YS4uYzY1OWFkNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCkBAIC0yNTYsOSArMjU2LDcgQEAKIAogCWh1YmluZm8gPSAoTk9ERVBEQShuYXNpZF90b19jbm9kZWlkKG5hc2lkKSkpLT5wZGluZm87CiAKLQlpZiAoIWh1YmluZm8pIHsKLQkJQlVHKCk7Ci0JfQorCUJVR19PTighaHViaW5mbyk7CiAKIAlmbHVzaF9uYXNpZF9saXN0ID0gJmh1YmluZm8tPmhkaV9mbHVzaF9uYXNpZF9saXN0OwogCWlmIChmbHVzaF9uYXNpZF9saXN0LT53aWRnZXRfcCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9NYWtlZmlsZSBiL2FyY2gvaWE2NC94ZW4vTWFrZWZpbGUKaW5kZXggMGFkMDIyNC4uZTZmNGEwYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQveGVuL01ha2VmaWxlCkBAIC0zLDE0ICszLDI5IEBACiAjCiAKIG9iai15IDo9IGh5cGVyY2FsbC5vIHhlbml2dC5vIHhlbnNldHVwLm8geGVuX3B2X29wcy5vIGlycV94ZW4ubyBcCi0JIGh5cGVydmlzb3IubyB4ZW5jb21tLm8geGNvbV9oY2FsbC5vIGdyYW50LXRhYmxlLm8gdGltZS5vIHN1c3BlbmQubworCSBoeXBlcnZpc29yLm8geGVuY29tbS5vIHhjb21faGNhbGwubyBncmFudC10YWJsZS5vIHRpbWUubyBzdXNwZW5kLm8gXAorCSBnYXRlLWRhdGEubwogCiBvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8KIAorIyBUaGUgZ2F0ZSBEU08gaW1hZ2UgaXMgYnVpbHQgdXNpbmcgYSBzcGVjaWFsIGxpbmtlciBzY3JpcHQuCitpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZS5nYXRlCisKKyMgdGVsbCBjb21waWxlZCBmb3IgeGVuCitDUFBGTEFHU19nYXRlLmxkcyArPSAtRF9fSUE2NF9HQVRFX1BBUkFWSVJUVUFMSVpFRF9YRU4KK0FGTEFHU19nYXRlLm8gKz0gLURfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9YRU4gLURfX0lBNjRfR0FURV9QQVJBVklSVFVBTElaRURfWEVOCisKKyMgdXNlIHNhbWUgZmlsZSBvZiBuYXRpdmUuCiskKG9iaikvZ2F0ZS5vOiAkKHNyYykvLi4va2VybmVsL2dhdGUuUyBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxhc19vX1MpCiskKG9iaikvZ2F0ZS5sZHM6ICQoc3JjKS8uLi9rZXJuZWwvZ2F0ZS5sZHMuUyBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxjcHBfbGRzX1MpCisKKwogQUZMQUdTX3hlbml2dC5vICs9IC1EX19JQTY0X0FTTV9QQVJBVklSVFVBTElaRURfWEVOCiAKICMgeGVuIG11bHRpIGNvbXBpbGUKLUFTTV9QQVJBVklSVF9NVUxUSV9DT01QSUxFX1NSQ1MgPSBpdnQuUyBlbnRyeS5TCitBU01fUEFSQVZJUlRfTVVMVElfQ09NUElMRV9TUkNTID0gaXZ0LlMgZW50cnkuUyBmc3lzLlMKIEFTTV9QQVJBVklSVF9PQkpTID0gJChhZGRwcmVmaXggeGVuLSwkKEFTTV9QQVJBVklSVF9NVUxUSV9DT01QSUxFX1NSQ1M6LlM9Lm8pKQogb2JqLXkgKz0gJChBU01fUEFSQVZJUlRfT0JKUykKIGRlZmluZSBwYXJhdmlydHVhbGl6ZWRfeGVuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL2dhdGUtZGF0YS5TIGIvYXJjaC9pYTY0L3hlbi9nYXRlLWRhdGEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ4MzBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L3hlbi9nYXRlLWRhdGEuUwpAQCAtMCwwICsxLDMgQEAKKwkuc2VjdGlvbiAuZGF0YS5nYXRlLnhlbiwgImF3IgorCisJLmluY2JpbiAiYXJjaC9pYTY0L3hlbi9nYXRlLnNvIgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKaW5kZXggNDVlMDJiYi4uZTMyZGFlNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUworKysgYi9hcmNoL2lhNjQveGVuL2h5cGVyY2FsbC5TCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9wcml2b3AuaD4KIAorI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKIC8qCiAgKiBIeXBlcmNhbGxzIHdpdGhvdXQgcGFyYW1ldGVyLgogICovCkBAIC03Miw2ICs3Myw3IEBACiAJYnIucmV0LnNwdGsubWFueSBycAogCTs7CiBFTkQoeGVuX3NldF9ycjBfdG9fcnI0KQorI2VuZGlmCiAKIEdMT0JBTF9FTlRSWSh4ZW5fc2VuZF9pcGkpCiAJbW92IHIxND1yMzIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vdGltZS5jIGIvYXJjaC9pYTY0L3hlbi90aW1lLmMKaW5kZXggNjhkNjIwNC4uZmI4MzMyNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi90aW1lLmMKKysrIGIvYXJjaC9pYTY0L3hlbi90aW1lLmMKQEAgLTE3NSwxMCArMTc1LDU4IEBACiAJfSB3aGlsZSAodW5saWtlbHkocmV0ICE9IGxjeWNsZSkpOwogfQogCisvKiBiYXNlZCBvbiB4ZW5fc2NoZWRfY2xvY2soKSBpbiBhcmNoL3g4Ni94ZW4vdGltZS5jLiAqLworLyoKKyAqIFRoaXMgcmVsaWVzIG9uIEhBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0suIElmIGl0IGNhbid0IGJlIGRlZmluZWQsCisgKiBzb21ldGhpbmcgc2ltaWxhciBsb2dpYyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaGVyZS4KKyAqLworLyoKKyAqIFhlbiBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFJldHVybnMgdGhlIG51bWJlciBvZiB1bnN0b2xlbgorICogbmFub3NlY29uZHMsIHdoaWNoIGlzIG5hbm9zZWNvbmRzIHRoZSBWQ1BVIHNwZW50IGluIFJVTk5JTkcrQkxPQ0tFRAorICogc3RhdGVzLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHhlbl9zY2hlZF9jbG9jayh2b2lkKQoreworCXN0cnVjdCB2Y3B1X3J1bnN0YXRlX2luZm8gcnVuc3RhdGU7CisKKwl1bnNpZ25lZCBsb25nIGxvbmcgbm93OworCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJldDsKKworCS8qCisJICogSWRlYWxseSBzY2hlZF9jbG9jayBzaG91bGQgYmUgY2FsbGVkIG9uIGEgcGVyLWNwdSBiYXNpcworCSAqIGFueXdheSwgc28gcHJlZW1wdCBzaG91bGQgYWxyZWFkeSBiZSBkaXNhYmxlZCwgYnV0IHRoYXQncworCSAqIG5vdCBjdXJyZW50IHByYWN0aWNlIGF0IHRoZSBtb21lbnQuCisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisKKwkvKgorCSAqIGJvdGggaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2soKSBhbmQgeGVuJ3MgcnVuc3RhdGUgYXJlCisJICogYmFzZWQgb24gbUFSLklUQy4gU28gZGlmZmVyZW5jZSBvZiB0aGVtIG1ha2VzIHNlbnNlLgorCSAqLworCW5vdyA9IGlhNjRfbmF0aXZlX3NjaGVkX2Nsb2NrKCk7CisKKwlnZXRfcnVuc3RhdGVfc25hcHNob3QoJnJ1bnN0YXRlKTsKKworCVdBUk5fT04ocnVuc3RhdGUuc3RhdGUgIT0gUlVOU1RBVEVfcnVubmluZyk7CisKKwlvZmZzZXQgPSAwOworCWlmIChub3cgPiBydW5zdGF0ZS5zdGF0ZV9lbnRyeV90aW1lKQorCQlvZmZzZXQgPSBub3cgLSBydW5zdGF0ZS5zdGF0ZV9lbnRyeV90aW1lOworCXJldCA9IHJ1bnN0YXRlLnRpbWVbUlVOU1RBVEVfYmxvY2tlZF0gKworCQlydW5zdGF0ZS50aW1lW1JVTlNUQVRFX3J1bm5pbmddICsKKwkJb2Zmc2V0OworCisJcHJlZW1wdF9lbmFibGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBwdl90aW1lX29wcyB4ZW5fdGltZV9vcHMgX19pbml0ZGF0YSA9IHsKIAkuaW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcJPSB4ZW5faW5pdF9taXNzaW5nX3RpY2tzX2FjY291bnRpbmcsCiAJLmRvX3N0ZWFsX2FjY291bnRpbmcJCT0geGVuX2RvX3N0ZWFsX2FjY291bnRpbmcsCiAJLmNsb2Nrc291cmNlX3Jlc3VtZQkJPSB4ZW5faXRjX2ppdHRlcl9kYXRhX3Jlc2V0LAorCS5zY2hlZF9jbG9jawkJCT0geGVuX3NjaGVkX2Nsb2NrLAogfTsKIAogLyogQ2FsbGVkIGFmdGVyIHN1c3BlbmQsIHRvIHJlc3VtZSB0aW1lLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4veGVuX3B2X29wcy5jIGIvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKaW5kZXggOTM2Y2ZmMy4uNWUyMjcwYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKKysrIGIvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogCiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcnZpc29yLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi94ZW5jb21tLmg+CkBAIC0xNTMsNiArMTU0LDEzIEBACiAJeGVuX3NldHVwX3ZjcHVfaW5mb19wbGFjZW1lbnQoKTsKIH0KIAorI2lmZGVmIEFTTV9TVVBQT1JURUQKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK3hlbl9wYXRjaF9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgX19pbml0Cit4ZW5fcGF0Y2hfYnJhbmNoKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHR5cGUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2luaXRfb3BzIHhlbl9pbml0X29wcyBfX2luaXRjb25zdCA9IHsKIAkuYmFubmVyID0geGVuX2Jhbm5lciwKIApAQCAtMTYzLDYgKzE3MSw1MyBAQAogCS5hcmNoX3NldHVwX25vbWNhID0geGVuX2FyY2hfc2V0dXBfbm9tY2EsCiAKIAkucG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSA9IHhlbl9wb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1LAorI2lmZGVmIEFTTV9TVVBQT1JURUQKKwkucGF0Y2hfYnVuZGxlID0geGVuX3BhdGNoX2J1bmRsZSwKKyNlbmRpZgorCS5wYXRjaF9icmFuY2ggPSB4ZW5fcGF0Y2hfYnJhbmNoLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfZnN5c19kYXRhCisgKiBhZGRyZXNzZXMgZm9yIGZzeXMKKyAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyB4ZW5fZnN5c2NhbGxfdGFibGVbTlJfc3lzY2FsbHNdOworZXh0ZXJuIGNoYXIgeGVuX2ZzeXNfYnViYmxlX2Rvd25bXTsKK3N0cnVjdCBwdl9mc3lzX2RhdGEgeGVuX2ZzeXNfZGF0YSBfX2luaXRkYXRhID0geworCS5mc3lzY2FsbF90YWJsZSA9ICh1bnNpZ25lZCBsb25nICopeGVuX2ZzeXNjYWxsX3RhYmxlLAorCS5mc3lzX2J1YmJsZV9kb3duID0gKHZvaWQgKil4ZW5fZnN5c19idWJibGVfZG93biwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHB2X3BhdGNoZGF0YQorICogcGF0Y2hkYXRhIGFkZHJlc3NlcworICovCisKKyNkZWZpbmUgREVDTEFSRShuYW1lKQkJCQkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX194ZW5fc3RhcnRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3RbXTsJXAorCWV4dGVybiB1bnNpZ25lZCBsb25nIF9feGVuX2VuZF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdFtdCisKK0RFQ0xBUkUoZnN5c2NhbGwpOworREVDTEFSRShicmxfZnN5c19idWJibGVfZG93bik7CitERUNMQVJFKHZ0b3ApOworREVDTEFSRShtY2tpbmxleV9lOSk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9feGVuX3N0YXJ0X2dhdGVfc2VjdGlvbltdOworCisjZGVmaW5lIEFTU0lHTihuYW1lKQkJCQkJCQlcCisJLnN0YXJ0XyMjbmFtZSMjX3BhdGNobGlzdCA9CQkJCQlcCisJCSh1bnNpZ25lZCBsb25nKV9feGVuX3N0YXJ0X2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0LAlcCisJLmVuZF8jI25hbWUjI19wYXRjaGxpc3QgPQkJCQkJXAorCQkodW5zaWduZWQgbG9uZylfX3hlbl9lbmRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3QKKworc3RhdGljIHN0cnVjdCBwdl9wYXRjaGRhdGEgeGVuX3BhdGNoZGF0YSBfX2luaXRkYXRhID0geworCUFTU0lHTihmc3lzY2FsbCksCisJQVNTSUdOKGJybF9mc3lzX2J1YmJsZV9kb3duKSwKKwlBU1NJR04odnRvcCksCisJQVNTSUdOKG1ja2lubGV5X2U5KSwKKworCS5nYXRlX3NlY3Rpb24gPSAodm9pZCopX194ZW5fc3RhcnRfZ2F0ZV9zZWN0aW9uLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTcwLDYgKzIyNSw3NiBAQAogICogaW50cmluc2ljcyBob29rcy4KICAqLwogCisjaWZuZGVmIEFTTV9TVVBQT1JURUQKK3N0YXRpYyB2b2lkCit4ZW5fc2V0X2l0bV93aXRoX29mZnNldCh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwkvKiBpYTY0X2NwdV9sb2NhbF90aWNrKCkgY2FsbHMgdGhpcyB3aXRoIGludGVycnVwdCBlbmFibGVkLiAqLworCS8qIFdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7ICovCisJeGVuX3NldF9pdG0odmFsIC0gWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworeGVuX2dldF9pdG1fd2l0aF9vZmZzZXQodm9pZCkKK3sKKwkvKiB1bnVzZWQgYXQgdGhpcyBtb21lbnQgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXMgaXMgY2FsbGVkLlxuIiwgX19mdW5jX18pOworCisJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKKwlyZXR1cm4gaWE2NF9uYXRpdmVfZ2V0cmVnKF9JQTY0X1JFR19DUl9JVE0pICsKKwkJWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQ7Cit9CisKKy8qIGlhNjRfc2V0X2l0YygpIGlzIG9ubHkgY2FsbGVkIGJ5CisgKiBjcHVfaW5pdCgpIHdpdGggaWE2NF9zZXRfaXRjKDApIGFuZCBpYTY0X3N5bmNfaXRjKCkuCisgKiBTbyBYRU5fTUFQUEVEUkVTRy0+aXRjX29mZnNldCBjYWwgYmUgY29uc2lkZXJlZCBhcyBhbG1vc3QgY29uc3RhbnQuCisgKi8KK3N0YXRpYyB2b2lkCit4ZW5fc2V0X2l0Yyh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIG1pdGM7CisKKwlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCW1pdGMgPSBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisJWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQgPSB2YWwgLSBtaXRjOworCVhFTl9NQVBQRURSRUdTLT5pdGNfbGFzdCA9IHZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcKK3hlbl9nZXRfaXRjKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXM7CisJdW5zaWduZWQgbG9uZyBpdGNfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgaXRjX2xhc3Q7CisJdW5zaWduZWQgbG9uZyByZXRfaXRjX2xhc3Q7CisKKwlpdGNfb2Zmc2V0ID0gWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQ7CisJZG8geworCQlpdGNfbGFzdCA9IFhFTl9NQVBQRURSRUdTLT5pdGNfbGFzdDsKKwkJcmVzID0gaWE2NF9uYXRpdmVfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOworCQlyZXMgKz0gaXRjX29mZnNldDsKKwkJaWYgKGl0Y19sYXN0ID49IHJlcykKKwkJCXJlcyA9IGl0Y19sYXN0ICsgMTsKKwkJcmV0X2l0Y19sYXN0ID0gY21weGNoZygmWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0LAorCQkJCSAgICAgICBpdGNfbGFzdCwgcmVzKTsKKwl9IHdoaWxlICh1bmxpa2VseShyZXRfaXRjX2xhc3QgIT0gaXRjX2xhc3QpKTsKKwlyZXR1cm4gcmVzOworCisjaWYgMAorCS8qIGlhNjRfaXRjX3VkZWxheSgpIGNhbGxzIGlhNjRfZ2V0X2l0YygpIHdpdGggaW50ZXJydXB0IGVuYWJsZWQuCisJICAgU2hvdWxkIGl0IGJlIHBhcmF2aXJ0dWFsaXplZCBpbnN0ZWFkPyAqLworCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7CisJaXRjX29mZnNldCA9IFhFTl9NQVBQRURSRUdTLT5pdGNfb2Zmc2V0OworCWl0Y19sYXN0ID0gWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0OworCXJlcyA9IGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKKwlyZXMgKz0gaXRjX29mZnNldDsKKwlpZiAoaXRjX2xhc3QgPj0gcmVzKQorCQlyZXMgPSBpdGNfbGFzdCArIDE7CisJWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0ID0gcmVzOworCXJldHVybiByZXM7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgeGVuX3NldHJlZyhpbnQgcmVnbnVtLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlzd2l0Y2ggKHJlZ251bSkgewpAQCAtMTgxLDExICszMDYsMTQgQEAKIAkJeGVuX3NldF9lZmxhZyh2YWwpOwogCQlicmVhazsKICNlbmRpZgorCWNhc2UgX0lBNjRfUkVHX0FSX0lUQzoKKwkJeGVuX3NldF9pdGModmFsKTsKKwkJYnJlYWs7CiAJY2FzZSBfSUE2NF9SRUdfQ1JfVFBSOgogCQl4ZW5fc2V0X3Rwcih2YWwpOwogCQlicmVhazsKIAljYXNlIF9JQTY0X1JFR19DUl9JVE06Ci0JCXhlbl9zZXRfaXRtKHZhbCk7CisJCXhlbl9zZXRfaXRtX3dpdGhfb2Zmc2V0KHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgX0lBNjRfUkVHX0NSX0VPSToKIAkJeGVuX2VvaSh2YWwpOwpAQCAtMjA5LDYgKzMzNywxMiBAQAogCQlyZXMgPSB4ZW5fZ2V0X2VmbGFnKCk7CiAJCWJyZWFrOwogI2VuZGlmCisJY2FzZSBfSUE2NF9SRUdfQVJfSVRDOgorCQlyZXMgPSB4ZW5fZ2V0X2l0YygpOworCQlicmVhazsKKwljYXNlIF9JQTY0X1JFR19DUl9JVE06CisJCXJlcyA9IHhlbl9nZXRfaXRtX3dpdGhfb2Zmc2V0KCk7CisJCWJyZWFrOwogCWNhc2UgX0lBNjRfUkVHX0NSX0lWUjoKIAkJcmVzID0geGVuX2dldF9pdnIoKTsKIAkJYnJlYWs7CkBAIC0yNTksOCArMzkzLDQxNyBAQAogCWVsc2UKIAkJeGVuX3JzbV9pKCk7CiB9CisjZWxzZQorI2RlZmluZSBfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCQkJCQlcCisJZXh0ZXJuIGNvbnN0IGNoYXIgeGVuXyAjIyBuYW1lICMjIF9kaXJlY3Rfc3RhcnRbXTsJCVwKKwlleHRlcm4gY29uc3QgY2hhciB4ZW5fICMjIG5hbWUgIyMgX2RpcmVjdF9lbmRbXTsJCVwKKwlhc20gKCIuYWxpZ24gMzJcbiIJCQkJCQlcCisJICAgICAiLnByb2MgeGVuXyIgI25hbWUgIlxuIgkJCQkJXAorCSAgICAgInhlbl8iICNuYW1lICI6XG4iCQkJCQkJXAorCSAgICAgInhlbl8iICNuYW1lICJfZGlyZWN0X3N0YXJ0OlxuIgkJCQlcCisJICAgICBjb2RlCQkJCQkJCVwKKwkgICAgICJ4ZW5fIiAjbmFtZSAiX2RpcmVjdF9lbmQ6XG4iCQkJCVwKKwkgICAgICJici5jb25kLnNwdGsubWFueSBiNlxuIgkJCQkJXAorCSAgICAgIi5lbmRwIHhlbl8iICNuYW1lICJcbiIpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfY3B1X29wcyB4ZW5fY3B1X29wcyBfX2luaXRkYXRhID0geworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMChuYW1lLCBjb2RlKQkJXAorCWV4dGVybiB2b2lkCQkJCVwKKwl4ZW5fICMjIG5hbWUgKHZvaWQpOwkJCVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzEobmFtZSwgY29kZSkJCVwKKwlleHRlcm4gdm9pZAkJCQlcCisJeGVuXyAjIyBuYW1lICh1bnNpZ25lZCBsb25nIGFyZyk7CVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzFfVk9JRChuYW1lLCBjb2RlKQlcCisJZXh0ZXJuIHZvaWQJCQkJXAorCXhlbl8gIyMgbmFtZSAodm9pZCAqYXJnKTsJCVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzIobmFtZSwgY29kZSkJCVwKKwlleHRlcm4gdm9pZAkJCQlcCisJeGVuXyAjIyBuYW1lICh1bnNpZ25lZCBsb25nIGFyZzAsCVwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcxKTsJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfRlVOQzAobmFtZSwgY29kZSkJCVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZwkJCVwKKwl4ZW5fICMjIG5hbWUgKHZvaWQpOwkJCVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX0ZVTkMxKG5hbWUsIHR5cGUsIGNvZGUpCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCQlcCisJeGVuXyAjIyBuYW1lICh0eXBlIGFyZyk7CQlcCisJX19ERUZJTkVfRlVOQyhuYW1lLCBjb2RlKQorCisjZGVmaW5lIFhFTl9QU1JfSV9BRERSX0FERFIgICAgIChYU0lfQkFTRSArIFhTSV9QU1JfSV9BRERSX09GUykKKworLyoKKyAqIHN0YXRpYyB2b2lkIHhlbl9zZXRfaXRtX3dpdGhfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgdmFsKQorICogICAgICAgIHhlbl9zZXRfaXRtKHZhbCAtIFhFTl9NQVBQRURSRUdTLT5pdGNfb2Zmc2V0KTsKKyAqLworLyogMiBidW5kbGVzICovCitERUZJTkVfVk9JRF9GVU5DMShzZXRfaXRtX3dpdGhfb2Zmc2V0LAorCQkgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KFhTSV9CQVNFKSAiICsgIgorCQkgIF9fc3RyaW5naWZ5KFhTSV9JVENfT0ZGU0VUX09GUykgIlxuIgorCQkgICI7O1xuIgorCQkgICJsZDggcjMgPSBbcjJdXG4iCisJCSAgIjs7XG4iCisJCSAgInN1YiByOCA9IHI4LCByM1xuIgorCQkgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1NFVF9JVE0pICJcbiIpOworCisvKgorICogc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9pdG1fd2l0aF9vZmZzZXQodm9pZCkKKyAqICAgIHJldHVybiBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0NSX0lUTSkgKyBYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldDsKKyAqLworLyogMiBidW5kbGVzICovCitERUZJTkVfRlVOQzAoZ2V0X2l0bV93aXRoX29mZnNldCwKKwkgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KFhTSV9CQVNFKSAiICsgIgorCSAgICAgX19zdHJpbmdpZnkoWFNJX0lUQ19PRkZTRVRfT0ZTKSAiXG4iCisJICAgICAiOztcbiIKKwkgICAgICJsZDggcjMgPSBbcjJdXG4iCisJICAgICAibW92IHI4ID0gY3IuaXRtXG4iCisJICAgICAiOztcbiIKKwkgICAgICJhZGQgcjggPSByOCwgcjJcbiIpOworCisvKgorICogc3RhdGljIHZvaWQgeGVuX3NldF9pdGModW5zaWduZWQgbG9uZyB2YWwpCisgKgl1bnNpZ25lZCBsb25nIG1pdGM7CisgKgorICoJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKKyAqCW1pdGMgPSBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisgKglYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldCA9IHZhbCAtIG1pdGM7CisgKglYRU5fTUFQUEVEUkVHUy0+aXRjX2xhc3QgPSB2YWw7CisgKi8KKy8qIDIgYnVuZGxlcyAqLworREVGSU5FX1ZPSURfRlVOQzEoc2V0X2l0YywKKwkJICAibW92IHIyID0gIiBfX3N0cmluZ2lmeShYU0lfQkFTRSkgIiArICIKKwkJICBfX3N0cmluZ2lmeShYU0lfSVRDX0xBU1RfT0ZTKSAiXG4iCisJCSAgIm1vdiByMyA9IGFyLml0Y1xuIgorCQkgICI7O1xuIgorCQkgICJzdWIgcjMgPSByOCwgcjNcbiIKKwkJICAic3Q4IFtyMl0gPSByOCwgIgorCQkgIF9fc3RyaW5naWZ5KFhTSV9JVENfTEFTVF9PRlMpICIgLSAiCisJCSAgX19zdHJpbmdpZnkoWFNJX0lUQ19PRkZTRVRfT0ZTKSAiXG4iCisJCSAgIjs7XG4iCisJCSAgInN0OCBbcjJdID0gcjNcbiIpOworCisvKgorICogc3RhdGljIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9pdGModm9pZCkKKyAqCXVuc2lnbmVkIGxvbmcgcmVzOworICoJdW5zaWduZWQgbG9uZyBpdGNfb2Zmc2V0OworICoJdW5zaWduZWQgbG9uZyBpdGNfbGFzdDsKKyAqCXVuc2lnbmVkIGxvbmcgcmV0X2l0Y19sYXN0OworICoKKyAqCWl0Y19vZmZzZXQgPSBYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldDsKKyAqCWRvIHsKKyAqCQlpdGNfbGFzdCA9IFhFTl9NQVBQRURSRUdTLT5pdGNfbGFzdDsKKyAqCQlyZXMgPSBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisgKgkJcmVzICs9IGl0Y19vZmZzZXQ7CisgKgkJaWYgKGl0Y19sYXN0ID49IHJlcykKKyAqCQkJcmVzID0gaXRjX2xhc3QgKyAxOworICoJCXJldF9pdGNfbGFzdCA9IGNtcHhjaGcoJlhFTl9NQVBQRURSRUdTLT5pdGNfbGFzdCwKKyAqCQkJCSAgICAgICBpdGNfbGFzdCwgcmVzKTsKKyAqCX0gd2hpbGUgKHVubGlrZWx5KHJldF9pdGNfbGFzdCAhPSBpdGNfbGFzdCkpOworICoJcmV0dXJuIHJlczsKKyAqLworLyogNSBidW5kbGVzICovCitERUZJTkVfRlVOQzAoZ2V0X2l0YywKKwkgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KFhTSV9CQVNFKSAiICsgIgorCSAgICAgX19zdHJpbmdpZnkoWFNJX0lUQ19PRkZTRVRfT0ZTKSAiXG4iCisJICAgICAiOztcbiIKKwkgICAgICJsZDggcjkgPSBbcjJdLCAiIF9fc3RyaW5naWZ5KFhTSV9JVENfTEFTVF9PRlMpICIgLSAiCisJICAgICBfX3N0cmluZ2lmeShYU0lfSVRDX09GRlNFVF9PRlMpICJcbiIKKwkJCQkJLyogcjkgPSBpdGNfb2Zmc2V0ICovCisJCQkJCS8qIHIyID0gWFNJX0lUQ19PRkZTRVQgKi8KKwkgICAgICI4ODg6XG4iCisJICAgICAibW92IHI4ID0gYXIuaXRjXG4iCS8qIHJlcyA9IGFyLml0YyAqLworCSAgICAgIjs7XG4iCisJICAgICAibGQ4IHIzID0gW3IyXVxuIgkJLyogcjMgPSBpdGNfbGFzdCAqLworCSAgICAgImFkZCByOCA9IHI4LCByOVxuIgkvKiByZXMgPSBhci5pdGMgKyBpdGNfb2Zmc2V0ICovCisJICAgICAiOztcbiIKKwkgICAgICJjbXAuZ3R1IHA2LCBwMCA9IHIzLCByOFxuIgorCSAgICAgIjs7XG4iCisJICAgICAiKHA2KSBhZGQgcjggPSAxLCByM1xuIgkvKiBpZiAoaXRjX2xhc3QgPiByZXMpIGl0Y19sYXN0ICsgMSAqLworCSAgICAgIjs7XG4iCisJICAgICAibW92IGFyLmNjdiA9IHI4XG4iCisJICAgICAiOztcbiIKKwkgICAgICJjbXB4Y2hnOC5hY3EgcjEwID0gW3IyXSwgcjgsIGFyLmNjdlxuIgorCSAgICAgIjs7XG4iCisJICAgICAiY21wLm5lIHA2LCBwMCA9IHIxMCwgcjNcbiIKKwkgICAgICIocDYpIGhpbnQgQHBhdXNlXG4iCisJICAgICAiKHA2KSBici5jb25kLnNwbnQgODg4YlxuIik7CisKK0RFRklORV9WT0lEX0ZVTkMxX1ZPSUQoZmMsCisJCSAgICAgICAiYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9GQykgIlxuIik7CisKKy8qCisgKiBwc3JfaV9hZGRyX2FkZHIgPSBYRU5fUFNSX0lfQUREUl9BRERSCisgKiBtYXNrZWRfYWRkciA9ICpwc3JfaV9hZGRyX2FkZHIKKyAqIHBlbmRpbmdfaW50cl9hZGRyID0gbWFza2VkX2FkZHIgLSAxCisgKiBpZiAodmFsICYgSUE2NF9QU1JfSSkgeworICogICBtYXNrZWQgPSAqbWFza2VkX2FkZHIKKyAqICAgKm1hc2tlZF9hZGRyID0gMDp4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koMSkKKyAqICAgY29tcGlsZXIgYmFycmllcgorICogICBpZiAobWFza2VkKSB7CisgKiAgICAgIHVpbnQ4X3QgcGVuZGluZyA9ICpwZW5kaW5nX2ludHJfYWRkcjsKKyAqICAgICAgaWYgKHBlbmRpbmcpCisgKiAgICAgICAgICAgICAgWEVOX0hZUEVSX1NTTV9JCisgKiAgIH0KKyAqIH0gZWxzZSB7CisgKiAgICptYXNrZWRfYWRkciA9IDE6eGVuX3NldF92aXJ0dWFsX3Bzcl9pKDApCisgKiB9CisgKi8KKy8qIDYgYnVuZGxlcyAqLworREVGSU5FX1ZPSURfRlVOQzEoaW50cmluX2xvY2FsX2lycV9yZXN0b3JlLAorCQkgIC8qIHI4ID0gaW5wdXQgdmFsdWU6IDAgb3IgSUE2NF9QU1JfSQorCQkgICAqIHA2ID0gIChmbGFncyAmIElBNjRfUFNSX0kpCisJCSAgICogICAgPSBpZiBjbGF1c2UKKwkJICAgKiBwNyA9ICEoZmxhZ3MgJiBJQTY0X1BTUl9JKQorCQkgICAqICAgID0gZWxzZSBjbGF1c2UKKwkJICAgKi8KKwkJICAiY21wLm5lIHA2LCBwNyA9IHI4LCByMFxuIgorCQkgICJtb3YgcjkgPSAiIF9fc3RyaW5naWZ5KFhFTl9QU1JfSV9BRERSX0FERFIpICJcbiIKKwkJICAiOztcbiIKKwkJICAvKiByOSA9IFhFTl9QU1JfSV9BRERSICovCisJCSAgImxkOCByOSA9IFtyOV1cbiIKKwkJICAiOztcbiIKKworCQkgIC8qIHIxMCA9IG1hc2tlZCBwcmV2aW91cyB2YWx1ZSAqLworCQkgICIocDYpCWxkMS5hY3EgcjEwID0gW3I5XVxuIgorCQkgICI7O1xuIgorCisJCSAgLyogcDggPSAhbWFza2VkIGludGVycnVwdCBtYXNrZWQgcHJldmlvdXNseT8gKi8KKwkJICAiKHA2KQljbXAubmUudW5jIHA4LCBwMCA9IHIxMCwgcjBcbiIKKworCQkgIC8qIHA3ID0gZWxzZSBjbGF1c2UgKi8KKwkJICAiKHA3KQltb3YgcjExID0gMVxuIgorCQkgICI7O1xuIgorCQkgIC8qIG1hc2tlZCA9IDEgKi8KKwkJICAiKHA3KQlzdDEucmVsIFtyOV0gPSByMTFcbiIKKworCQkgIC8qIHA2ID0gaWYgY2xhdXNlICovCisJCSAgLyogbWFza2VkID0gMAorCQkgICAqIHI5ID0gbWFza2VkX2FkZHIgLSAxCisJCSAgICogICAgPSBwZW5kaW5nX2ludHJfYWRkcgorCQkgICAqLworCQkgICIocDgpCXN0MS5yZWwgW3I5XSA9IHIwLCAtMVxuIgorCQkgICI7O1xuIgorCQkgIC8qIHI4ID0gcGVuZGluZ19pbnRyICovCisJCSAgIihwOCkJbGQxLmFjcSByMTEgPSBbcjldXG4iCisJCSAgIjs7XG4iCisJCSAgLyogcDkgPSBpbnRlcnJ1cHQgcGVuZGluZz8gKi8KKwkJICAiKHA4KQljbXAubmUudW5jIHA5LCBwMTAgPSByMTEsIHIwXG4iCisJCSAgIjs7XG4iCisJCSAgIihwMTApIG1mXG4iCisJCSAgLyogaXNzdWUgaHlwZXJjYWxsIHRvIHRyaWdnZXIgaW50ZXJydXB0ICovCisJCSAgIihwOSkJYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9TU01fSSkgIlxuIik7CisKK0RFRklORV9WT0lEX0ZVTkMyKHB0Y2dhLAorCQkgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1BUQ19HQSkgIlxuIik7CitERUZJTkVfVk9JRF9GVU5DMihzZXRfcnIsCisJCSAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU0VUX1JSKSAiXG4iKTsKKworLyoKKyAqIHRtcCA9IFhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyID0gWEVOX1BTUl9JX0FERFJfQUREUjsKKyAqIHRtcCA9ICp0bXAKKyAqIHRtcCA9ICp0bXA7CisgKiBwc3JfaSA9IHRtcD8gMDogSUE2NF9QU1JfSTsKKyAqLworLyogNCBidW5kbGVzICovCitERUZJTkVfRlVOQzAoZ2V0X3Bzcl9pLAorCSAgICAgIm1vdiByOSA9ICIgX19zdHJpbmdpZnkoWEVOX1BTUl9JX0FERFJfQUREUikgIlxuIgorCSAgICAgIjs7XG4iCisJICAgICAibGQ4IHI5ID0gW3I5XVxuIgkJCS8qIHI5ID0gWEVOX1BTUl9JX0FERFIgKi8KKwkgICAgICJtb3YgcjggPSAwXG4iCQkJLyogcHNyX2kgPSAwICovCisJICAgICAiOztcbiIKKwkgICAgICJsZDEuYWNxIHI5ID0gW3I5XVxuIgkJLyogcjkgPSBYRU5fUFNSX0kgKi8KKwkgICAgICI7O1xuIgorCSAgICAgImNtcC5lcS51bmMgcDYsIHAwID0gcjksIHIwXG4iCS8qIHA2ID0gKFhFTl9QU1JfSSAhPSAwKSAqLworCSAgICAgIjs7XG4iCisJICAgICAiKHA2KSBtb3YgcjggPSAiIF9fc3RyaW5naWZ5KDEgPDwgSUE2NF9QU1JfSV9CSVQpICJcbiIpOworCitERUZJTkVfRlVOQzEodGhhc2gsIHVuc2lnbmVkIGxvbmcsCisJICAgICAiYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9USEFTSCkgIlxuIik7CitERUZJTkVfRlVOQzEoZ2V0X2NwdWlkLCBpbnQsCisJICAgICAiYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9HRVRfQ1BVSUQpICJcbiIpOworREVGSU5FX0ZVTkMxKGdldF9wbWQsIGludCwKKwkgICAgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0dFVF9QTUQpICJcbiIpOworREVGSU5FX0ZVTkMxKGdldF9yciwgdW5zaWduZWQgbG9uZywKKwkgICAgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0dFVF9SUikgIlxuIik7CisKKy8qCisgKiB2b2lkIHhlbl9wcml2b3Bfc3NtX2kodm9pZCkKKyAqCisgKiBpbnQgbWFza2VkID0gIXhlbl9nZXRfdmlydHVhbF9wc3JfaSgpOworICoJLy8gbWFza2VkID0gKigqWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIpCisgKiB4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koMSkKKyAqCS8vICooKlhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyKSA9IDAKKyAqIC8vIGNvbXBpbGVyIGJhcnJpZXIKKyAqIGlmIChtYXNrZWQpIHsKKyAqCXVpbnQ4X3QqIHBlbmRfaW50X2FkZHIgPQorICoJCSh1aW50OF90KikoKlhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyKSAtIDE7CisgKgl1aW50OF90IHBlbmRpbmcgPSAqcGVuZF9pbnRfYWRkcjsKKyAqCWlmIChwZW5kaW5nKQorICoJCVhFTl9IWVBFUl9TU01fSQorICogfQorICovCisvKiA0IGJ1bmRsZXMgKi8KK0RFRklORV9WT0lEX0ZVTkMwKHNzbV9pLAorCQkgICJtb3YgcjggPSAiIF9fc3RyaW5naWZ5KFhFTl9QU1JfSV9BRERSX0FERFIpICJcbiIKKwkJICAiOztcbiIKKwkJICAibGQ4IHI4ID0gW3I4XVxuIgkJLyogcjggPSBYRU5fUFNSX0lfQUREUiAqLworCQkgICI7O1xuIgorCQkgICJsZDEuYWNxIHI5ID0gW3I4XVxuIgkJLyogcjkgPSBYRU5fUFNSX0kgKi8KKwkJICAiOztcbiIKKwkJICAic3QxLnJlbCBbcjhdID0gcjAsIC0xXG4iCS8qIHBzcl9pID0gMC4gZW5hYmxlIGludGVycnVwdAorCQkJCQkJICogcjggPSBYRU5fUFNSX0lfQUREUiAtIDEKKwkJCQkJCSAqICAgID0gcGVuZF9pbnRfYWRkcgorCQkJCQkJICovCisJCSAgImNtcC5lcS51bmMgcDAsIHA2ID0gcjksIHIwXG4iLyogcDYgPSAhWEVOX1BTUl9JCisJCQkJCQkgKiBwcmV2aW91c2x5IGludGVycnVwdAorCQkJCQkJICogbWFza2VkPworCQkJCQkJICovCisJCSAgIjs7XG4iCisJCSAgIihwNikgbGQxLmFjcSByOCA9IFtyOF1cbiIJLyogcjggPSB4ZW5fcGVuZF9pbnQgKi8KKwkJICAiOztcbiIKKwkJICAiKHA2KSBjbXAuZXEudW5jIHA2LCBwNyA9IHI4LCByMFxuIgkvKmludGVycnVwdCBwZW5kaW5nPyovCisJCSAgIjs7XG4iCisJCSAgLyogaXNzdWUgaHlwZXJjYWxsIHRvIGdldCBpbnRlcnJ1cHQgKi8KKwkJICAiKHA3KSBicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1NTTV9JKSAiXG4iCisJCSAgIjs7XG4iKTsKKworLyoKKyAqIHBzcl9pX2FkZHJfYWRkciA9IFhFTl9NQVBQRURSRUdTLT5pbnRlcnJ1cHRfbWFza19hZGRyCisgKgkJICAgPSBYRU5fUFNSX0lfQUREUl9BRERSOworICogcHNyX2lfYWRkciA9ICpwc3JfaV9hZGRyX2FkZHI7CisgKiAqcHNyX2lfYWRkciA9IDE7CisgKi8KKy8qIDIgYnVuZGxlcyAqLworREVGSU5FX1ZPSURfRlVOQzAocnNtX2ksCisJCSAgIm1vdiByOCA9ICIgX19zdHJpbmdpZnkoWEVOX1BTUl9JX0FERFJfQUREUikgIlxuIgorCQkJCQkJLyogcjggPSBYRU5fUFNSX0lfQUREUiAqLworCQkgICJtb3YgcjkgPSAxXG4iCisJCSAgIjs7XG4iCisJCSAgImxkOCByOCA9IFtyOF1cbiIJCS8qIHI4ID0gWEVOX1BTUl9JICovCisJCSAgIjs7XG4iCisJCSAgInN0MS5yZWwgW3I4XSA9IHI5XG4iKTsJLyogWEVOX1BTUl9JID0gMSAqLworCitleHRlcm4gdm9pZAoreGVuX3NldF9ycjBfdG9fcnI0KHVuc2lnbmVkIGxvbmcgdmFsMCwgdW5zaWduZWQgbG9uZyB2YWwxLAorCQkgICB1bnNpZ25lZCBsb25nIHZhbDIsIHVuc2lnbmVkIGxvbmcgdmFsMywKKwkJICAgdW5zaWduZWQgbG9uZyB2YWw0KTsKK19fREVGSU5FX0ZVTkMoc2V0X3JyMF90b19ycjQsCisJICAgICAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU0VUX1JSMF9UT19SUjQpICJcbiIpOworCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRyZWcoaW50IHJlZ251bSk7CisjZGVmaW5lIF9fREVGSU5FX0dFVF9SRUcoaWQsIHByaXZvcCkJCQkJCVwKKwkibW92IHIyID0gIiBfX3N0cmluZ2lmeShfSUE2NF9SRUdfICMjIGlkKSAiXG4iCQkJXAorCSI7O1xuIgkJCQkJCQkJXAorCSJjbXAuZXEgcDYsIHAwID0gcjIsIHI4XG4iCQkJCQlcCisJIjs7XG4iCQkJCQkJCQlcCisJIihwNikgYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9HRVRfICMjIHByaXZvcCkgIlxuIglcCisJIihwNikgYnIuY29uZC5zcHRrLm1hbnkgYjZcbiIJCQkJCVwKKwkiOztcbiIKKworX19ERUZJTkVfRlVOQyhnZXRyZWcsCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhQU1IsIFBTUikKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9FRkxBRywgRUZMQUcpCisjZW5kaWYKKworCSAgICAgIC8qIGdldF9pdGMgKi8KKwkgICAgICAibW92IHIyID0gIiBfX3N0cmluZ2lmeShfSUE2NF9SRUdfQVJfSVRDKSAiXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgImNtcC5lcSBwNiwgcDAgPSByMiwgcjhcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiKHA2KSBici5jb25kLnNwbnQgeGVuX2dldF9pdGNcbiIKKwkgICAgICAiOztcbiIKKworCSAgICAgIC8qIGdldCBpdG0gKi8KKwkgICAgICAibW92IHIyID0gIiBfX3N0cmluZ2lmeShfSUE2NF9SRUdfQ1JfSVRNKSAiXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgImNtcC5lcSBwNiwgcDAgPSByMiwgcjhcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiKHA2KSBici5jb25kLnNwbnQgeGVuX2dldF9pdG1fd2l0aF9vZmZzZXRcbiIKKwkgICAgICAiOztcbiIKKworCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQ1JfSVZSLCBJVlIpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhDUl9UUFIsIFRQUikKKworCSAgICAgIC8qIGZhbGwgYmFjayAqLworCSAgICAgICJtb3ZsIHIyID0gaWE2NF9uYXRpdmVfZ2V0cmVnX2Z1bmNcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAibW92IGI3ID0gcjJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiYnIuY29uZC5zcHRrLm1hbnkgYjdcbiIpOworCitleHRlcm4gdm9pZCB4ZW5fc2V0cmVnKGludCByZWdudW0sIHVuc2lnbmVkIGxvbmcgdmFsKTsKKyNkZWZpbmUgX19ERUZJTkVfU0VUX1JFRyhpZCwgcHJpdm9wKQkJCQkJXAorCSJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR18gIyMgaWQpICJcbiIJCQlcCisJIjs7XG4iCQkJCQkJCQlcCisJImNtcC5lcSBwNiwgcDAgPSByMiwgcjlcbiIJCQkJCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkiKHA2KSBicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QXyAjIyBwcml2b3ApICJcbiIJCVwKKwkiKHA2KSBici5jb25kLnNwdGsubWFueSBiNlxuIgkJCQkJXAorCSI7O1xuIgorCitfX0RFRklORV9GVU5DKHNldHJlZywKKwkgICAgICAvKiBrcjAgLi4ga3IgNyovCisJICAgICAgLyoKKwkgICAgICAgKiBpZiAoX0lBNjRfUkVHX0FSX0tSMCA8PSByZWdudW0gJiYKKwkgICAgICAgKiAgICAgcmVnbnVtIDw9IF9JQTY0X1JFR19BUl9LUjcpIHsKKwkgICAgICAgKiAgICAgcmVnaXN0ZXIgX19pbmRleCBhc20gKCJyOCIpID0gcmVnbnVtIC0gX0lBNjRfUkVHX0FSX0tSMAorCSAgICAgICAqICAgICByZWdpc3RlciBfX3ZhbCBhc20gKCJyOSIpID0gdmFsCisJICAgICAgICogICAgImJyZWFrIEhZUEVSUFJJVk9QX1NFVF9LUiIKKwkgICAgICAgKiB9CisJICAgICAgICovCisJICAgICAgIm1vdiByMTcgPSByOVxuIgorCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9LUjApICJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiY21wLmdlIHA2LCBwMCA9IHI5LCByMlxuIgorCSAgICAgICJzdWIgcjE3ID0gcjE3LCByMlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDYpIGNtcC5nZS51bmMgcDcsIHAwID0gIgorCSAgICAgIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9LUjcpICIgLSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9LUjApCisJICAgICAgIiwgcjE3XG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIihwNykgbW92IHI5ID0gcjhcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiKHA3KSBtb3YgcjggPSByMTdcbiIKKwkgICAgICAiKHA3KSBicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1NFVF9LUikgIlxuIgorCisJICAgICAgLyogc2V0IGl0bSAqLworCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19DUl9JVE0pICJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiY21wLmVxIHA2LCBwMCA9IHIyLCByOFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDYpIGJyLmNvbmQuc3BudCB4ZW5fc2V0X2l0bV93aXRoX29mZnNldFxuIgorCisJICAgICAgLyogc2V0IGl0YyAqLworCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9JVEMpICJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiY21wLmVxIHA2LCBwMCA9IHIyLCByOFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDYpIGJyLmNvbmQuc3BudCB4ZW5fc2V0X2l0Y1xuIgorCisjaWZkZWYgQ09ORklHX0lBMzJfU1VQUE9SVAorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfRUZMQUcsIFNFVF9FRkxBRykKKyNlbmRpZgorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQ1JfVFBSLCBTRVRfVFBSKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQ1JfRU9JLCBFT0kpCisKKwkgICAgICAvKiBmYWxsIGJhY2sgKi8KKwkgICAgICAibW92bCByMiA9IGlhNjRfbmF0aXZlX3NldHJlZ19mdW5jXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIm1vdiBiNyA9IHIyXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgImJyLmNvbmQuc3B0ay5tYW55IGI3XG4iKTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2NwdV9vcHMgeGVuX2NwdV9vcHMgX19pbml0Y29uc3QgPSB7CiAJLmZjCQk9IHhlbl9mYywKIAkudGhhc2gJCT0geGVuX3RoYXNoLAogCS5nZXRfY3B1aWQJPSB4ZW5fZ2V0X2NwdWlkLApAQCAtMzM3LDcgKzg4MCw3IEBACiAJSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9hcGljX3dyaXRlLCAmYXBpY19vcCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW9zYXBpY19vcHMgeGVuX2lvc2FwaWNfb3BzIF9faW5pdGNvbnN0ID0geworc3RhdGljIHN0cnVjdCBwdl9pb3NhcGljX29wcyB4ZW5faW9zYXBpY19vcHMgX19pbml0ZGF0YSA9IHsKIAkucGNhdF9jb21wYXRfaW5pdCA9IHhlbl9wY2F0X2NvbXBhdF9pbml0LAogCS5fX2dldF9pcnFfY2hpcCA9IHhlbl9pb3NhcGljX2dldF9pcnFfY2hpcCwKIApAQCAtMzU1LDYgKzg5OCw4IEBACiAJeGVuX2luZm9faW5pdCgpOwogCXB2X2luZm8gPSB4ZW5faW5mbzsKIAlwdl9pbml0X29wcyA9IHhlbl9pbml0X29wczsKKwlwdl9mc3lzX2RhdGEgPSB4ZW5fZnN5c19kYXRhOworCXB2X3BhdGNoZGF0YSA9IHhlbl9wYXRjaGRhdGE7CiAJcHZfY3B1X29wcyA9IHhlbl9jcHVfb3BzOwogCXB2X2lvc2FwaWNfb3BzID0geGVuX2lvc2FwaWNfb3BzOwogCXB2X2lycV9vcHMgPSB4ZW5faXJxX29wczsKQEAgLTM2MiwzICs5MDcsMjUyIEBACiAKIAlwYXJhdmlydF9jcHVfYXNtX2luaXQoJnhlbl9jcHVfYXNtX3N3aXRjaCk7CiB9CisKKyNpZmRlZiBBU01fU1VQUE9SVEVECisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBiaW5hcnkgcGFjdGhpbmcKKyAqIHB2X2luaXRfb3BzLnBhdGNoX2J1bmRsZQorICovCisKKyNkZWZpbmUgREVGSU5FX0ZVTkNfR0VUUkVHKG5hbWUsIHByaXZvcCkJCQkJXAorCURFRklORV9GVU5DMChnZXRfICMjIG5hbWUsCQkJCQlcCisJCSAgICAgImJyZWFrICJfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9HRVRfICMjIHByaXZvcCkgIlxuIikKKworREVGSU5FX0ZVTkNfR0VUUkVHKHBzciwgUFNSKTsKK0RFRklORV9GVU5DX0dFVFJFRyhlZmxhZywgRUZMQUcpOworREVGSU5FX0ZVTkNfR0VUUkVHKGl2ciwgSVZSKTsKK0RFRklORV9GVU5DX0dFVFJFRyh0cHIsIFRQUik7CisKKyNkZWZpbmUgREVGSU5FX0ZVTkNfU0VUX0tSKG4pCQkJCQkJXAorCURFRklORV9WT0lEX0ZVTkMwKHNldF9rciAjIyBuLAkJCQkJXAorCQkJICAiOztcbiIJCQkJCVwKKwkJCSAgIm1vdiByOSA9IHI4XG4iCQkJCVwKKwkJCSAgIm1vdiByOCA9ICIgI24gIlxuIgkJCQlcCisJCQkgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1NFVF9LUikgIlxuIikKKworREVGSU5FX0ZVTkNfU0VUX0tSKDApOworREVGSU5FX0ZVTkNfU0VUX0tSKDEpOworREVGSU5FX0ZVTkNfU0VUX0tSKDIpOworREVGSU5FX0ZVTkNfU0VUX0tSKDMpOworREVGSU5FX0ZVTkNfU0VUX0tSKDQpOworREVGSU5FX0ZVTkNfU0VUX0tSKDUpOworREVGSU5FX0ZVTkNfU0VUX0tSKDYpOworREVGSU5FX0ZVTkNfU0VUX0tSKDcpOworCisjZGVmaW5lIF9fREVGSU5FX0ZVTkNfU0VUUkVHKG5hbWUsIHByaXZvcCkJCQkJXAorCURFRklORV9WT0lEX0ZVTkMwKG5hbWUsCQkJCQkJXAorCQkJICAiYnJlYWsgIl9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QXyAjIyBwcml2b3ApICJcbiIpCisKKyNkZWZpbmUgREVGSU5FX0ZVTkNfU0VUUkVHKG5hbWUsIHByaXZvcCkJCQlcCisJX19ERUZJTkVfRlVOQ19TRVRSRUcoc2V0XyAjIyBuYW1lLCBTRVRfICMjIHByaXZvcCkKKworREVGSU5FX0ZVTkNfU0VUUkVHKGVmbGFnLCBFRkxBRyk7CitERUZJTkVfRlVOQ19TRVRSRUcodHByLCBUUFIpOworX19ERUZJTkVfRlVOQ19TRVRSRUcoZW9pLCBFT0kpOworCitleHRlcm4gY29uc3QgY2hhciB4ZW5fY2hlY2tfZXZlbnRzW107CitleHRlcm4gY29uc3QgY2hhciBfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3N0YXJ0W107CitleHRlcm4gY29uc3QgY2hhciBfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X2VuZFtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9yZWxvYzsKKworYXNtICgKKwkiLmFsaWduIDMyXG4iCisJIi5wcm9jIHhlbl9jaGVja19ldmVudHNcbiIKKwkieGVuX2NoZWNrX2V2ZW50czpcbiIKKwkvKiBtYXNrZWQgPSAwCisJICogcjkgPSBtYXNrZWRfYWRkciAtIDEKKwkgKiAgICA9IHBlbmRpbmdfaW50cl9hZGRyCisJICovCisJInN0MS5yZWwgW3I5XSA9IHIwLCAtMVxuIgorCSI7O1xuIgorCS8qIHI4ID0gcGVuZGluZ19pbnRyICovCisJImxkMS5hY3EgcjExID0gW3I5XVxuIgorCSI7O1xuIgorCS8qIHA5ID0gaW50ZXJydXB0IHBlbmRpbmc/ICovCisJImNtcC5uZSBwOSwgcDEwID0gcjExLCByMFxuIgorCSI7O1xuIgorCSIocDEwKSBtZlxuIgorCS8qIGlzc3VlIGh5cGVyY2FsbCB0byB0cmlnZ2VyIGludGVycnVwdCAqLworCSIocDkpIGJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU1NNX0kpICJcbiIKKwkiYnIuY29uZC5zcHRrLm1hbnkgYjZcbiIKKwkiLmVuZHAgeGVuX2NoZWNrX2V2ZW50c1xuIgorCSJcbiIKKwkiLmFsaWduIDMyXG4iCisJIi5wcm9jIF9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3RcbiIKKwkiX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdDpcbiIKKwkiX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9zdGFydDpcbiIKKwkiMTpcbiIKKwkie1xuIgorCSJjbXAubmUgcDYsIHA3ID0gcjgsIHIwXG4iCisJIm1vdiByMTcgPSBpcFxuIiAvKiBnZXQgaXAgdG8gY2FsYyByZXR1cm4gYWRkcmVzcyAqLworCSJtb3YgcjkgPSAiX19zdHJpbmdpZnkoWEVOX1BTUl9JX0FERFJfQUREUikgIlxuIgorCSI7O1xuIgorCSJ9XG4iCisJIntcbiIKKwkvKiByOSA9IFhFTl9QU1JfSV9BRERSICovCisJImxkOCByOSA9IFtyOV1cbiIKKwkiOztcbiIKKwkvKiByMTAgPSBtYXNrZWQgcHJldmlvdXMgdmFsdWUgKi8KKwkiKHA2KSBsZDEuYWNxIHIxMCA9IFtyOV1cbiIKKwkiYWRkcyByMTcgPSAgMWYgLSAxYiwgcjE3XG4iIC8qIGNhbGN1bGF0ZSByZXR1cm4gYWRkcmVzcyAqLworCSI7O1xuIgorCSJ9XG4iCisJIntcbiIKKwkvKiBwOCA9ICFtYXNrZWQgaW50ZXJydXB0IG1hc2tlZCBwcmV2aW91c2x5PyAqLworCSIocDYpIGNtcC5uZS51bmMgcDgsIHAwID0gcjEwLCByMFxuIgorCSJcbiIKKwkvKiBwNyA9IGVsc2UgY2xhdXNlICovCisJIihwNykgbW92IHIxMSA9IDFcbiIKKwkiOztcbiIKKwkiKHA4KSBtb3YgYjYgPSByMTdcbiIgLyogc2V0IHJldHVybiBhZGRyZXNzICovCisJIn1cbiIKKwkie1xuIgorCS8qIG1hc2tlZCA9IDEgKi8KKwkiKHA3KSBzdDEucmVsIFtyOV0gPSByMTFcbiIKKwkiXG4iCisJIls5OTpdXG4iCisJIihwOCkgYnJsLmNvbmQuZHB0ay5mZXcgeGVuX2NoZWNrX2V2ZW50c1xuIgorCSJ9XG4iCisJLyogcHYgY2FsbGluZyBzdHViIGlzIDUgYnVuZGxlcy4gZmlsbCBub3AgdG8gYWRqdXN0IHJldHVybiBhZGRyZXNzICovCisJIntcbiIKKwkibm9wIDBcbiIKKwkibm9wIDBcbiIKKwkibm9wIDBcbiIKKwkifVxuIgorCSIxOlxuIgorCSJfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X2VuZDpcbiIKKwkiLmVuZHAgX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdFxuIgorCSJcbiIKKwkiLmFsaWduIDhcbiIKKwkiX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9yZWxvYzpcbiIKKwkiZGF0YTggOTliXG4iCispOworCitzdGF0aWMgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtIHhlbl9wYXRjaF9idW5kbGVfZWxlbXNbXQorX19pbml0ZGF0YV9vcl9tb2R1bGUgPQoreworI2RlZmluZSBYRU5fUEFUQ0hfQlVORExFX0VMRU0obmFtZSwgdHlwZSkJCVwKKwl7CQkJCQkJXAorCQkodm9pZCopeGVuXyAjIyBuYW1lICMjIF9kaXJlY3Rfc3RhcnQsCVwKKwkJKHZvaWQqKXhlbl8gIyMgbmFtZSAjIyBfZGlyZWN0X2VuZCwJXAorCQlQQVJBVklSVF9QQVRDSF9UWVBFXyAjIyB0eXBlLAkJXAorCX0KKworCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShmYywgRkMpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTSh0aGFzaCwgVEhBU0gpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShnZXRfY3B1aWQsIEdFVF9DUFVJRCksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKGdldF9wbWQsIEdFVF9QTUQpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShwdGNnYSwgUFRDR0EpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShnZXRfcnIsIEdFVF9SUiksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKHNldF9yciwgU0VUX1JSKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0oc2V0X3JyMF90b19ycjQsIFNFVF9SUjBfVE9fUlI0KSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0oc3NtX2ksIFNTTV9JKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0ocnNtX2ksIFJTTV9JKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0oZ2V0X3Bzcl9pLCBHRVRfUFNSX0kpLAorCXsKKwkJKHZvaWQqKV9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3Rfc3RhcnQsCisJCSh2b2lkKilfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X2VuZCwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV9JTlRSSU5fTE9DQUxfSVJRX1JFU1RPUkUsCisJfSwKKworI2RlZmluZSBYRU5fUEFUQ0hfQlVORExFX0VMRU1fR0VUUkVHKG5hbWUsIHJlZykJCQlcCisJewkJCQkJCQlcCisJCXhlbl9nZXRfICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJCVwKKwkJeGVuX2dldF8gIyMgbmFtZSAjIyBfZGlyZWN0X2VuZCwJCVwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV9HRVRSRUcgKyBfSUE2NF9SRUdfICMjIHJlZywgXAorCX0KKworCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcocHNyLCBQU1IpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcoZWZsYWcsIEFSX0VGTEFHKSwKKworCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcoaXZyLCBDUl9JVlIpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcodHByLCBDUl9UUFIpLAorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhpdGMsIEFSX0lUQyksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhpdG1fd2l0aF9vZmZzZXQsIENSX0lUTSksCisKKworI2RlZmluZSBfX1hFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcobmFtZSwgcmVnKQkJXAorCXsJCQkJCQkJXAorCQl4ZW5fICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJCQlcCisJCXhlbl8gIyMgbmFtZSAjIyBfZGlyZWN0X2VuZCwJCQlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfU0VUUkVHICsgX0lBNjRfUkVHXyAjIyByZWcsIFwKKwl9CisKKyNkZWZpbmUgWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhuYW1lLCByZWcpCQkJXAorCV9fWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhzZXRfICMjIG5hbWUsIHJlZykKKworCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3IwLCBBUl9LUjApLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3IxLCBBUl9LUjEpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3IyLCBBUl9LUjIpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3IzLCBBUl9LUjMpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3I0LCBBUl9LUjQpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3I1LCBBUl9LUjUpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3I2LCBBUl9LUjYpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoa3I3LCBBUl9LUjcpLAorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhlZmxhZywgQVJfRUZMQUcpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcodHByLCBDUl9UUFIpLAorCV9fWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhlb2ksIENSX0VPSSksCisKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKGl0YywgQVJfSVRDKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKGl0bV93aXRoX29mZnNldCwgQ1JfSVRNKSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK3hlbl9wYXRjaF9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSwgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbmVsZW1zID0gc2l6ZW9mKHhlbl9wYXRjaF9idW5kbGVfZWxlbXMpIC8KKwkJc2l6ZW9mKHhlbl9wYXRjaF9idW5kbGVfZWxlbXNbMF0pOworCXVuc2lnbmVkIGxvbmcgdXNlZDsKKwljb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gKmZvdW5kOworCisJdXNlZCA9IF9fcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnVuZGxlKHNidW5kbGUsIGVidW5kbGUsIHR5cGUsCisJCQkJCSAgICAgeGVuX3BhdGNoX2J1bmRsZV9lbGVtcywgbmVsZW1zLAorCQkJCQkgICAgICZmb3VuZCk7CisKKwlpZiAoZm91bmQgPT0gTlVMTCkKKwkJLyogZmFsbGJhY2sgKi8KKwkJcmV0dXJuIGlhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZShzYnVuZGxlLCBlYnVuZGxlLCB0eXBlKTsKKwlpZiAodXNlZCA9PSAwKQorCQlyZXR1cm4gdXNlZDsKKworCS8qIHJlbG9jYXRpb24gKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBBUkFWSVJUX1BBVENIX1RZUEVfSU5UUklOX0xPQ0FMX0lSUV9SRVNUT1JFOiB7CisJCXVuc2lnbmVkIGxvbmcgcmVsb2MgPQorCQkJX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9yZWxvYzsKKwkJdW5zaWduZWQgbG9uZyByZWxvY19vZmZzZXQgPSByZWxvYyAtICh1bnNpZ25lZCBsb25nKQorCQkJX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9zdGFydDsKKwkJdW5zaWduZWQgbG9uZyB0YWcgPSAodW5zaWduZWQgbG9uZylzYnVuZGxlICsgcmVsb2Nfb2Zmc2V0OworCQlwYXJhdmlydF9wYXRjaF9yZWxvY19icmwodGFnLCB4ZW5fY2hlY2tfZXZlbnRzKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCS8qIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiB1c2VkOworfQorI2VuZGlmIC8qIEFTTV9TVVBQT1RFRCAqLworCitjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnJhbmNoX3RhcmdldCB4ZW5fYnJhbmNoX3RhcmdldFtdCitfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgUEFSQVZJUlRfQlJfVEFSR0VUKG5hbWUsIHR5cGUpCQkJXAorCXsJCQkJCQlcCisJCSZ4ZW5fICMjIG5hbWUsCQkJCVwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl8gIyMgdHlwZSwJXAorCX0KKwlQQVJBVklSVF9CUl9UQVJHRVQoc3dpdGNoX3RvLCBTV0lUQ0hfVE8pLAorCVBBUkFWSVJUX0JSX1RBUkdFVChsZWF2ZV9zeXNjYWxsLCBMRUFWRV9TWVNDQUxMKSwKKwlQQVJBVklSVF9CUl9UQVJHRVQod29ya19wcm9jZXNzZWRfc3lzY2FsbCwgV09SS19QUk9DRVNTRURfU1lTQ0FMTCksCisJUEFSQVZJUlRfQlJfVEFSR0VUKGxlYXZlX2tlcm5lbCwgTEVBVkVfS0VSTkVMKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdAoreGVuX3BhdGNoX2JyYW5jaCh1bnNpZ25lZCBsb25nIHRhZywgdW5zaWduZWQgbG9uZyB0eXBlKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgbmVsZW0gPQorCQlzaXplb2YoeGVuX2JyYW5jaF90YXJnZXQpIC8gc2l6ZW9mKHhlbl9icmFuY2hfdGFyZ2V0WzBdKTsKKwlfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaCh0YWcsIHR5cGUsIHhlbl9icmFuY2hfdGFyZ2V0LCBuZWxlbSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDcxMDNkOTEuLjNlODc2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIAlyZXR1cm4gMDsgLyogVGFzayBkaWRuJ3QgdXNlIHRoZSBmcHUgYXQgYWxsLiAqLwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwdSwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwdSwKIAl1bnNpZ25lZCBsb25nIHVudXNlZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3MgPSB0YXNrX3B0X3JlZ3ModHNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKaW5kZXggNmVhMDE3Ny4uY2FkYTNiYSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKQEAgLTIzMCw3ICsyMzAsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJNRlQyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKaW5kZXggZmVkZjNlMy4uZmI4YTA2YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmgKQEAgLTEsNSArMSwzNzggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImJvb3RpbmZvX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgImJvb3RpbmZvX21tLmgiCisvKgorKiogYXNtL2Jvb3RpbmZvLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZQorKioKKyoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAorKioKKyoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisqKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorKiogZm9yIG1vcmUgZGV0YWlscy4KKyoqCisqKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAorKioKKyoqIDUvMi85NCBSb21hbiBIb2RlazoKKyoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKKyoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KKyoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgorKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQorKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgorKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgcmVuYW1lZCB0byBib290aW5mby5oIGFnYWluCisqKiAyNy8xMS85NiBHZWVydCBVeXR0ZXJob2V2ZW46CisqKiAgIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCisqLworCisjaWZuZGVmIF9NNjhLX0JPT1RJTkZPX0gKKyNkZWZpbmUgX002OEtfQk9PVElORk9fSAorCisKKyAgICAvKgorICAgICAqICBCb290aW5mbyBkZWZpbml0aW9ucworICAgICAqCisgICAgICogIFRoaXMgaXMgYW4gZWFzaWx5IHBhcnNhYmxlIGFuZCBleHRlbmRhYmxlIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbAorICAgICAqICBpbmZvcm1hdGlvbiB0byBiZSBwYXNzZWQgZnJvbSB0aGUgYm9vdHN0cmFwIHRvIHRoZSBrZXJuZWwuCisgICAgICoKKyAgICAgKiAgVGhpcyB3YXkgSSBob3BlIHRvIGtlZXAgYWxsIGZ1dHVyZSBjaGFuZ2VzIGJhY2svZm9yZXdhcmRzIGNvbXBhdGlibGUuCisgICAgICogIFRodXMsIGtlZXAgeW91ciBmaW5nZXJzIGNyb3NzZWQuLi4KKyAgICAgKgorICAgICAqICBUaGlzIHN0cnVjdHVyZSBpcyBjb3BpZWQgcmlnaHQgYWZ0ZXIgdGhlIGtlcm5lbCBic3MgYnkgdGhlIGJvb3RzdHJhcAorICAgICAqICByb3V0aW5lLgorICAgICAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYmlfcmVjb3JkIHsKKyAgICB1bnNpZ25lZCBzaG9ydCB0YWc7CQkJLyogdGFnIElEICovCisgICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsJCS8qIHNpemUgb2YgcmVjb3JkIChpbiBieXRlcykgKi8KKyAgICB1bnNpZ25lZCBsb25nIGRhdGFbMF07CQkvKiBkYXRhICovCit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKworICAgIC8qCisgICAgICogIFRhZyBEZWZpbml0aW9ucworICAgICAqCisgICAgICogIE1hY2hpbmUgaW5kZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4MDAwMAorICAgICAqICBNYWNoaW5lIGRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHg4MDAwCisgICAgICovCisKKyNkZWZpbmUgQklfTEFTVAkJCTB4MDAwMAkvKiBsYXN0IHJlY29yZCAoc2VudGluZWwpICovCisjZGVmaW5lIEJJX01BQ0hUWVBFCQkweDAwMDEJLyogbWFjaGluZSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0NQVVRZUEUJCTB4MDAwMgkvKiBjcHUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9GUFVUWVBFCQkweDAwMDMJLyogZnB1IHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfTU1VVFlQRQkJMHgwMDA0CS8qIG1tdSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX01FTUNIVU5LCQkweDAwMDUJLyogbWVtb3J5IGNodW5rIGFkZHJlc3MgYW5kIHNpemUgKi8KKwkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KKyNkZWZpbmUgQklfUkFNRElTSwkJMHgwMDA2CS8qIHJhbWRpc2sgYWRkcmVzcyBhbmQgc2l6ZSAqLworCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLworI2RlZmluZSBCSV9DT01NQU5EX0xJTkUJCTB4MDAwNwkvKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KKwkJCQkJLyogKHN0cmluZykgKi8KKworICAgIC8qCisgICAgICogIEFtaWdhLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BTUlHQV9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX0FVVE9DT04JMHg4MDAxCS8qIEF1dG9Db25maWcgZGV2aWNlICovCisJCQkJCS8qIChzdHJ1Y3QgQ29uZmlnRGV2KSAqLworI2RlZmluZSBCSV9BTUlHQV9DSElQX1NJWkUJMHg4MDAyCS8qIHNpemUgb2YgQ2hpcCBSQU0gKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfVkJMQU5LCQkweDgwMDMJLyogVkJMQU5LIGZyZXF1ZW5jeSAodV9jaGFyKSAqLworI2RlZmluZSBCSV9BTUlHQV9QU0ZSRVEJCTB4ODAwNAkvKiBwb3dlciBzdXBwbHkgZnJlcXVlbmN5ICh1X2NoYXIpICovCisjZGVmaW5lIEJJX0FNSUdBX0VDTE9DSwkJMHg4MDA1CS8qIEVDbG9jayBmcmVxdWVuY3kgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfQ0hJUFNFVAkweDgwMDYJLyogbmF0aXZlIGNoaXBzZXQgcHJlc2VudCAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9TRVJQRVIJCTB4ODAwNwkvKiBzZXJpYWwgcG9ydCBwZXJpb2QgKHVfc2hvcnQpICovCisKKyAgICAvKgorICAgICAqICBBdGFyaS1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfQVRBUklfTUNIX0NPT0tJRQkweDgwMDAJLyogX01DSCBjb29raWUgZnJvbSBUT1MgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQVRBUklfTUNIX1RZUEUJMHg4MDAxCS8qIHNwZWNpYWwgbWFjaGluZSB0eXBlICh1X2xvbmcpICovCisJCQkJCS8qICh2YWx1ZXMgYXJlIEFUQVJJX01BQ0hfKiBkZWZpbmVzICovCisKKy8qIG1jaF9jb29raWUgdmFsdWVzICh1cHBlciB3b3JkKSAqLworI2RlZmluZSBBVEFSSV9NQ0hfU1QJCTAKKyNkZWZpbmUgQVRBUklfTUNIX1NURQkJMQorI2RlZmluZSBBVEFSSV9NQ0hfVFQJCTIKKyNkZWZpbmUgQVRBUklfTUNIX0ZBTENPTgkzCisKKy8qIG1jaF90eXBlIHZhbHVlcyAqLworI2RlZmluZSBBVEFSSV9NQUNIX05PUk1BTAkwCS8qIG5vIHNwZWNpYWwgbWFjaGluZSB0eXBlICovCisjZGVmaW5lIEFUQVJJX01BQ0hfTUVEVVNBCTEJLyogTWVkdXNhIDA0MCAqLworI2RlZmluZSBBVEFSSV9NQUNIX0hBREVTCTIJLyogSGFkZXMgMDQwIG9yIDA2MCAqLworI2RlZmluZSBBVEFSSV9NQUNIX0FCNDAJCTMJLyogQWZ0ZXJidXJuZXIwNDAgb24gRmFsY29uICovCisKKyAgICAvKgorICAgICAqICBWTUUtc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX1ZNRV9UWVBFCQkweDgwMDAJLyogVk1FIHN1Yi1hcmNoaXRlY3R1cmUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfVk1FX0JSRElORk8JCTB4ODAwMQkvKiBWTUUgYm9hcmQgaW5mb3JtYXRpb24gKHN0cnVjdCkgKi8KKworLyogQklfVk1FX1RZUEUgY29kZXMgKi8KKyNkZWZpbmUJVk1FX1RZUEVfVFAzNFYJCTB4MDAzNAkvKiBUYWRwb2xlIFRQMzRWICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNDcJMHgwMTQ3CS8qIE1vdG9yb2xhIE1WTUUxNDcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2MgkweDAxNjIJLyogTW90b3JvbGEgTVZNRTE2MiAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY2CTB4MDE2NgkvKiBNb3Rvcm9sYSBNVk1FMTY2ICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNjcJMHgwMTY3CS8qIE1vdG9yb2xhIE1WTUUxNjcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3MgkweDAxNzIJLyogTW90b3JvbGEgTVZNRTE3MiAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTc3CTB4MDE3NwkvKiBNb3Rvcm9sYSBNVk1FMTc3ICovCisjZGVmaW5lIFZNRV9UWVBFX0JWTUU0MDAwCTB4NDAwMAkvKiBCVk0gTHRkLiBCVk1FNDAwMCAqLworI2RlZmluZSBWTUVfVFlQRV9CVk1FNjAwMAkweDYwMDAJLyogQlZNIEx0ZC4gQlZNRTYwMDAgKi8KKworLyogQklfVk1FX0JSRElORk8gaXMgYSAzMiBieXRlIHN0cnVjdCBhcyByZXR1cm5lZCBieSB0aGUgQnVnIGNvZGUgb24KKyAqIE1vdG9yb2xhIFZNRSBib2FyZHMuICBDb250YWlucyBib2FyZCBudW1iZXIsIEJ1ZyB2ZXJzaW9uLCBib2FyZAorICogY29uZmlndXJhdGlvbiBvcHRpb25zLCBldGMuICBTZWUgaW5jbHVkZS9hc20vbXZtZTE2eGh3LmggZm9yIGRldGFpbHMuCisgKi8KKworCisgICAgLyoKKyAgICAgKiAgTWFjaW50b3NoLXNwZWNpZmljIHRhZ3MgKGFsbCB1X2xvbmcpCisgICAgICovCisKKyNkZWZpbmUgQklfTUFDX01PREVMCQkweDgwMDAJLyogTWFjIEdlc3RhbHQgSUQgKG1vZGVsIHR5cGUpICovCisjZGVmaW5lIEJJX01BQ19WQUREUgkJMHg4MDAxCS8qIE1hYyB2aWRlbyBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX1ZERVBUSAkJMHg4MDAyCS8qIE1hYyB2aWRlbyBkZXB0aCAqLworI2RlZmluZSBCSV9NQUNfVlJPVwkJMHg4MDAzCS8qIE1hYyB2aWRlbyByb3dieXRlcyAqLworI2RlZmluZSBCSV9NQUNfVkRJTQkJMHg4MDA0CS8qIE1hYyB2aWRlbyBkaW1lbnNpb25zICovCisjZGVmaW5lIEJJX01BQ19WTE9HSUNBTAkJMHg4MDA1CS8qIE1hYyB2aWRlbyBsb2dpY2FsIGJhc2UgKi8KKyNkZWZpbmUgQklfTUFDX1NDQ0JBU0UJCTB4ODAwNgkvKiBNYWMgU0NDIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfQlRJTUUJCTB4ODAwNwkvKiBNYWMgYm9vdCB0aW1lICovCisjZGVmaW5lIEJJX01BQ19HTVRCSUFTCQkweDgwMDgJLyogTWFjIEdNVCB0aW1lem9uZSBvZmZzZXQgKi8KKyNkZWZpbmUgQklfTUFDX01FTVNJWkUJCTB4ODAwOQkvKiBNYWMgUkFNIHNpemUgKHNhbml0eSBjaGVjaykgKi8KKyNkZWZpbmUgQklfTUFDX0NQVUlECQkweDgwMGEJLyogTWFjIENQVSB0eXBlIChzYW5pdHkgY2hlY2spICovCisjZGVmaW5lIEJJX01BQ19ST01CQVNFCQkweDgwMGIJLyogTWFjIHN5c3RlbSBST00gYmFzZSBhZGRyZXNzICovCisKKyAgICAvKgorICAgICAqICBNYWNpbnRvc2ggaGFyZHdhcmUgcHJvZmlsZSBkYXRhIC0gdW51c2VkLCBzZWUgbWFjaW50b3NoLmggZm9yCisgICAgICogIHJlc29uYWJsZSB0eXBlIHZhbHVlcworICAgICAqLworCisjZGVmaW5lIEJJX01BQ19WSUExQkFTRQkJMHg4MDEwCS8qIE1hYyBWSUExIGJhc2UgYWRkcmVzcyAoYWx3YXlzIHByZXNlbnQpICovCisjZGVmaW5lIEJJX01BQ19WSUEyQkFTRQkJMHg4MDExCS8qIE1hYyBWSUEyIGJhc2UgYWRkcmVzcyAodHlwZSB2YXJpZXMpICovCisjZGVmaW5lIEJJX01BQ19WSUEyVFlQRQkJMHg4MDEyCS8qIE1hYyBWSUEyIHR5cGUgKFZJQSwgUkJWLCBPU1MpICovCisjZGVmaW5lIEJJX01BQ19BREJUWVBFCQkweDgwMTMJLyogTWFjIEFEQiBpbnRlcmZhY2UgdHlwZSAqLworI2RlZmluZSBCSV9NQUNfQVNDQkFTRQkJMHg4MDE0CS8qIE1hYyBBcHBsZSBTb3VuZCBDaGlwIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfU0NTSTUzODAJCTB4ODAxNQkvKiBNYWMgTkNSIDUzODAgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KKyNkZWZpbmUgQklfTUFDX1NDU0lETUEJCTB4ODAxNgkvKiBNYWMgU0NTSSBETUEgKGJhc2UgYWRkcmVzcykgKi8KKyNkZWZpbmUgQklfTUFDX1NDU0k1Mzk2CQkweDgwMTcJLyogTWFjIE5DUiA1M0M5NiBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLworI2RlZmluZSBCSV9NQUNfSURFVFlQRQkJMHg4MDE4CS8qIE1hYyBJREUgaW50ZXJmYWNlIHR5cGUgKi8KKyNkZWZpbmUgQklfTUFDX0lERUJBU0UJCTB4ODAxOQkvKiBNYWMgSURFIGludGVyZmFjZSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQklfTUFDX05VQlVTCQkweDgwMWEJLyogTWFjIE51YnVzIHR5cGUgKG5vbmUsIHJlZ3VsYXIsIHBzZXVkbykgKi8KKyNkZWZpbmUgQklfTUFDX1NMT1RNQVNLCQkweDgwMWIJLyogTWFjIE51YnVzIHNsb3RzIHByZXNlbnQgKi8KKyNkZWZpbmUgQklfTUFDX1NDQ1RZUEUJCTB4ODAxYwkvKiBNYWMgU0NDIHNlcmlhbCB0eXBlIChub3JtYWwsIElPUCkgKi8KKyNkZWZpbmUgQklfTUFDX0VUSFRZUEUJCTB4ODAxZAkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCB0eXBlIChTb25pYywgTUFDRSAqLworI2RlZmluZSBCSV9NQUNfRVRIQkFTRQkJMHg4MDFlCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfUE1VCQkweDgwMWYJLyogTWFjIHBvd2VyIG1hbmFnZW1lbnQgLyBwb3dlcm9mZiBoYXJkd2FyZSAqLworI2RlZmluZSBCSV9NQUNfSU9QX1NXSU0JCTB4ODAyMAkvKiBNYWMgU1dJTSBmbG9wcHkgSU9QICovCisjZGVmaW5lIEJJX01BQ19JT1BfQURCCQkweDgwMjEJLyogTWFjIEFEQiBJT1AgKi8KKworICAgIC8qCisgICAgICogTWFjOiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGJvb3RlciBkYXRhIGZvcm1hdCAodGVtcG9yYXJpbHkpCisgICAgICogRmllbGRzIHVudXNlZCB3aXRoIHRoZSBuZXcgYm9vdGluZm8gY2FuIGJlIGRlbGV0ZWQgbm93OyBpbnN0ZWFkIG9mCisgICAgICogYWRkaW5nIG5ldyBmaWVsZHMgdGhlIHN0cnVjdCBtaWdodCBiZSBzcGxpdHRlZCBpbnRvIGEgaGFyZHdhcmUgYWRkcmVzcworICAgICAqIHBhcnQgYW5kIGEgaGFyZHdhcmUgdHlwZSBwYXJ0CisgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBtYWNfYm9vdGVyX2RhdGEKK3sKKwl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvcm93OworCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7CisJdW5zaWduZWQgbG9uZyBhcmdzOworCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7CisJdW5zaWduZWQgbG9uZyBnbXRiaWFzOworCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKKwl1bnNpZ25lZCBsb25nIHByaW50bWY7CisJdW5zaWduZWQgbG9uZyBwcmludGhzazsKKwl1bnNpZ25lZCBsb25nIHByaW50Z3BpOworCXVuc2lnbmVkIGxvbmcgY3B1aWQ7CisJdW5zaWduZWQgbG9uZyByb21iYXNlOworCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7CisJdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKK307CisKK2V4dGVybiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCisJbWFjX2JpX2RhdGE7CisKICNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgQXBvbGxvLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BUE9MTE9fTU9ERUwgICAgICAgICAweDgwMDAgIC8qIG1vZGVsICh1X2xvbmcpICovCisKKyAgICAvKgorICAgICAqICBIUDMwMC1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfSFAzMDBfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLworI2RlZmluZSBCSV9IUDMwMF9VQVJUX1NDT0RFCTB4ODAwMQkvKiBVQVJUIHNlbGVjdCBjb2RlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0hQMzAwX1VBUlRfQUREUgkweDgwMDIJLyogcGh5cy4gYWRkciBvZiBVQVJUICh1X2xvbmcpICovCisKKyAgICAvKgorICAgICAqIFN0dWZmIGZvciBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbmluZworICAgICAqCisgICAgICogQXQgdGhlIHN0YXJ0IG9mIGtlcm5lbCBjb2RlLCBhICdzdHJ1Y3QgYm9vdHZlcnNpb24nIGlzIGxvY2F0ZWQuCisgICAgICogYm9vdHN0cmFwIGNoZWNrcyBmb3IgYSBtYXRjaGluZyB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgYmVmb3JlIGJvb3RpbmcKKyAgICAgKiBhIGtlcm5lbCwgdG8gYXZvaWQgdXNlciBjb25mdXNpb24gaWYga2VybmVsIGFuZCBib290c3RyYXAgZG9uJ3Qgd29yaworICAgICAqIHRvZ2V0aGVyIDotKQorICAgICAqCisgICAgICogSWYgaW5jb21wYXRpYmxlIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIGJvb3RpbmZvIGludGVyZmFjZSwgdGhlIG1ham9yCisgICAgICogbnVtYmVyIGJlbG93IHNob3VsZCBiZSBzdGVwcGVkIChhbmQgdGhlIG1pbm9yIHJlc2V0IHRvIDApIGZvciB0aGUKKyAgICAgKiBhcHByb3ByaWF0ZSBtYWNoaW5lLiBJZiBhIGNoYW5nZSBpcyBiYWNrd2FyZC1jb21wYXRpYmxlLCB0aGUgbWlub3IKKyAgICAgKiBzaG91bGQgYmUgc3RlcHBlZC4gIkJhY2t3YXJkcy1jb21wYXRpYmxlIiBtZWFucyB0aGF0IGJvb3Rpbmcgd2lsbCB3b3JrLAorICAgICAqIGJ1dCBjZXJ0YWluIGZlYXR1cmVzIG1heSBub3QuCisgICAgICovCisKKyNkZWZpbmUgQk9PVElORk9WX01BR0lDCQkJMHg0MjQ5NTYxQQkvKiAnQklWXlonICovCisjZGVmaW5lIE1LX0JJX1ZFUlNJT04obWFqb3IsbWlub3IpCSgoKG1ham9yKTw8MTYpKyhtaW5vcikpCisjZGVmaW5lIEJJX1ZFUlNJT05fTUFKT1IodikJCSgoKHYpID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgQklfVkVSU0lPTl9NSU5PUih2KQkJKCh2KSAmIDB4ZmZmZikKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGJvb3R2ZXJzaW9uIHsKKyAgICB1bnNpZ25lZCBzaG9ydCBicmFuY2g7CisgICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKKyAgICBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7CisJdW5zaWduZWQgbG9uZyB2ZXJzaW9uOworICAgIH0gbWFjaHZlcnNpb25zWzBdOworfTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIEFNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEFUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMSApCisjZGVmaW5lIE1BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIE1WTUUxNDdfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIE1WTUUxNnhfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEJWTUU2MDAwX0JPT1RJX1ZFUlNJT04gTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIFE0MF9CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisjZGVmaW5lIEhQMzAwX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCisKKyNpZmRlZiBCT09USU5GT19DT01QQVRfMV8wCisKKyAgICAvKgorICAgICAqICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAorICAgICAqLworCisjZGVmaW5lIENPTVBBVF9BTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQorI2RlZmluZSBDT01QQVRfQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKKyNkZWZpbmUgQ09NUEFUX01BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMSwgMCApCisKKyNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgorCisjZGVmaW5lIENPTVBBVF9OVU1fQVVUTyAgICAxNgorCitzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhIHsKKyAgICBpbnQgbW9kZWw7CisgICAgaW50IG51bV9hdXRvY29uOworICAgIHN0cnVjdCBDb25maWdEZXYgYXV0b2NvbltDT01QQVRfTlVNX0FVVE9dOworICAgIHVuc2lnbmVkIGxvbmcgY2hpcF9zaXplOworICAgIHVuc2lnbmVkIGNoYXIgdmJsYW5rOworICAgIHVuc2lnbmVkIGNoYXIgcHNmcmVxOworICAgIHVuc2lnbmVkIGxvbmcgZWNsb2NrOworICAgIHVuc2lnbmVkIGxvbmcgY2hpcHNldDsKKyAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X2JpX0F0YXJpIHsKKyAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7CisgICAgdW5zaWduZWQgbG9uZyBtY2hfY29va2llOworfTsKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2gKK3sKKwl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvcm93OworCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKKwl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7CisJdW5zaWduZWQgbG9uZyBhcmdzOworCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7CisJdW5zaWduZWQgbG9uZyBnbXRiaWFzOworCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKKwl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKKwl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7CisJdW5zaWduZWQgbG9uZyBpZDsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKKwl1bnNpZ25lZCBsb25nIHByaW50bWY7CisJdW5zaWduZWQgbG9uZyBwcmludGhzazsKKwl1bnNpZ25lZCBsb25nIHByaW50Z3BpOworCXVuc2lnbmVkIGxvbmcgY3B1aWQ7CisJdW5zaWduZWQgbG9uZyByb21iYXNlOworCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7CisJdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKK307CisKKyNlbmRpZgorCitzdHJ1Y3QgY29tcGF0X21lbV9pbmZvIHsKKyAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworI2RlZmluZSBDT01QQVRfTlVNX01FTUlORk8gIDQKKworI2RlZmluZSBDT01QQVRfQ1BVQl82ODAyMCAwCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDMwIDEKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNDAgMgorI2RlZmluZSBDT01QQVRfQ1BVQl82ODA2MCAzCisjZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgxIDUKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODIgNgorI2RlZmluZSBDT01QQVRfRlBVQl82ODA0MCA3CisjZGVmaW5lIENPTVBBVF9GUFVCXzY4MDYwIDgKKworI2RlZmluZSBDT01QQVRfQ1BVXzY4MDIwICAgICgxPDxDT01QQVRfQ1BVQl82ODAyMCkKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODAzMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMzApCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwNDAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDQwKQorI2RlZmluZSBDT01QQVRfQ1BVXzY4MDYwICAgICgxPDxDT01QQVRfQ1BVQl82ODA2MCkKKyNkZWZpbmUgQ09NUEFUX0NQVV9NQVNLICAgICAoMzEpCisjZGVmaW5lIENPTVBBVF9GUFVfNjg4ODEgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgxKQorI2RlZmluZSBDT01QQVRfRlBVXzY4ODgyICAgICgxPDxDT01QQVRfRlBVQl82ODg4MikKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODA0MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNDApCisjZGVmaW5lIENPTVBBVF9GUFVfNjgwNjAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDYwKQorI2RlZmluZSBDT01QQVRfRlBVX01BU0sgICAgICgweGZlMCkKKworI2RlZmluZSBDT01QQVRfQ0xfU0laRSAgICAgICgyNTYpCisKK3N0cnVjdCBjb21wYXRfYm9vdGluZm8geworICAgIHVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7CisgICAgdW5zaWduZWQgbG9uZyBjcHV0eXBlOworICAgIHN0cnVjdCBjb21wYXRfbWVtX2luZm8gbWVtb3J5W0NPTVBBVF9OVU1fTUVNSU5GT107CisgICAgaW50IG51bV9tZW1vcnk7CisgICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX2FkZHI7CisgICAgY2hhciBjb21tYW5kX2xpbmVbQ09NUEFUX0NMX1NJWkVdOworICAgIHVuaW9uIHsKKwlzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhICAgICBiaV9hbWk7CisJc3RydWN0IGNvbXBhdF9iaV9BdGFyaSAgICAgYmlfYXRhOworCXN0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoIGJpX21hYzsKKyAgICB9IGJpX3VuOworfTsKKworI2RlZmluZSBiaV9hbWlnYQliaV91bi5iaV9hbWkKKyNkZWZpbmUgYmlfYXRhcmkJYmlfdW4uYmlfYXRhCisjZGVmaW5lIGJpX21hYwkJYmlfdW4uYmlfbWFjCisKKyNlbmRpZiAvKiBCT09USU5GT19DT01QQVRfMV8wICovCisKKworI2VuZGlmIC8qIF9NNjhLX0JPT1RJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mb19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiOGEwNmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyoKLSoqIGFzbS9ib290aW5mby5oIC0tIERlZmluaXRpb24gb2YgdGhlIExpbnV4L202OGsgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKLSoqCi0qKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKLSoqCi0qKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSoqIGZvciBtb3JlIGRldGFpbHMuCi0qKgotKiogQ3JlYXRlZCAwOS8yOS85MiBieSBHcmVnIEhhcnAKLSoqCi0qKiA1LzIvOTQgUm9tYW4gSG9kZWs6Ci0qKiAgIEFkZGVkIGJpX2F0YXJpIHBhcnQgb2YgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHVuaW9uIGJpX3VuOyBmb3Igbm93IGl0Ci0qKiAgIGNvbnRhaW5zIGp1c3QgYSBtb2RlbCBmaWVsZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFRUIGFuZCBGYWxjb24uCi0qKiAyNi83Lzk2IFJvbWFuIFppcHBlbDoKLSoqICAgUmVuYW1lZCB0byBzZXR1cC5oOyBhZGRlZCBzb21lIHVzZWZ1bCBtYWNyb3MgdG8gYWxsb3cgZ2NjIHNvbWUKLSoqICAgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KLSoqIDUvMTAvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgotKiogICBSZWRlc2lnbiBvZiB0aGUgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IHJlbmFtZWQgdG8gYm9vdGluZm8uaCBhZ2FpbgotKiogMjcvMTEvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgotKiogICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAotKi8KLQotI2lmbmRlZiBfTTY4S19CT09USU5GT19ICi0jZGVmaW5lIF9NNjhLX0JPT1RJTkZPX0gKLQotCi0gICAgLyoKLSAgICAgKiAgQm9vdGluZm8gZGVmaW5pdGlvbnMKLSAgICAgKgotICAgICAqICBUaGlzIGlzIGFuIGVhc2lseSBwYXJzYWJsZSBhbmQgZXh0ZW5kYWJsZSBzdHJ1Y3R1cmUgY29udGFpbmluZyBhbGwKLSAgICAgKiAgaW5mb3JtYXRpb24gdG8gYmUgcGFzc2VkIGZyb20gdGhlIGJvb3RzdHJhcCB0byB0aGUga2VybmVsLgotICAgICAqCi0gICAgICogIFRoaXMgd2F5IEkgaG9wZSB0byBrZWVwIGFsbCBmdXR1cmUgY2hhbmdlcyBiYWNrL2ZvcmV3YXJkcyBjb21wYXRpYmxlLgotICAgICAqICBUaHVzLCBrZWVwIHlvdXIgZmluZ2VycyBjcm9zc2VkLi4uCi0gICAgICoKLSAgICAgKiAgVGhpcyBzdHJ1Y3R1cmUgaXMgY29waWVkIHJpZ2h0IGFmdGVyIHRoZSBrZXJuZWwgYnNzIGJ5IHRoZSBib290c3RyYXAKLSAgICAgKiAgcm91dGluZS4KLSAgICAgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGJpX3JlY29yZCB7Ci0gICAgdW5zaWduZWQgc2hvcnQgdGFnOwkJCS8qIHRhZyBJRCAqLwotICAgIHVuc2lnbmVkIHNob3J0IHNpemU7CQkvKiBzaXplIG9mIHJlY29yZCAoaW4gYnl0ZXMpICovCi0gICAgdW5zaWduZWQgbG9uZyBkYXRhWzBdOwkJLyogZGF0YSAqLwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0KLSAgICAvKgotICAgICAqICBUYWcgRGVmaW5pdGlvbnMKLSAgICAgKgotICAgICAqICBNYWNoaW5lIGluZGVwZW5kZW50IHRhZ3Mgc3RhcnQgY291bnRpbmcgZnJvbSAweDAwMDAKLSAgICAgKiAgTWFjaGluZSBkZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4ODAwMAotICAgICAqLwotCi0jZGVmaW5lIEJJX0xBU1QJCQkweDAwMDAJLyogbGFzdCByZWNvcmQgKHNlbnRpbmVsKSAqLwotI2RlZmluZSBCSV9NQUNIVFlQRQkJMHgwMDAxCS8qIG1hY2hpbmUgdHlwZSAodV9sb25nKSAqLwotI2RlZmluZSBCSV9DUFVUWVBFCQkweDAwMDIJLyogY3B1IHR5cGUgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfRlBVVFlQRQkJMHgwMDAzCS8qIGZwdSB0eXBlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX01NVVRZUEUJCTB4MDAwNAkvKiBtbXUgdHlwZSAodV9sb25nKSAqLwotI2RlZmluZSBCSV9NRU1DSFVOSwkJMHgwMDA1CS8qIG1lbW9yeSBjaHVuayBhZGRyZXNzIGFuZCBzaXplICovCi0JCQkJCS8qIChzdHJ1Y3QgbWVtX2luZm8pICovCi0jZGVmaW5lIEJJX1JBTURJU0sJCTB4MDAwNgkvKiByYW1kaXNrIGFkZHJlc3MgYW5kIHNpemUgKi8KLQkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KLSNkZWZpbmUgQklfQ09NTUFORF9MSU5FCQkweDAwMDcJLyoga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzICovCi0JCQkJCS8qIChzdHJpbmcpICovCi0KLSAgICAvKgotICAgICAqICBBbWlnYS1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfQU1JR0FfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLwotI2RlZmluZSBCSV9BTUlHQV9BVVRPQ09OCTB4ODAwMQkvKiBBdXRvQ29uZmlnIGRldmljZSAqLwotCQkJCQkvKiAoc3RydWN0IENvbmZpZ0RldikgKi8KLSNkZWZpbmUgQklfQU1JR0FfQ0hJUF9TSVpFCTB4ODAwMgkvKiBzaXplIG9mIENoaXAgUkFNICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0FNSUdBX1ZCTEFOSwkJMHg4MDAzCS8qIFZCTEFOSyBmcmVxdWVuY3kgKHVfY2hhcikgKi8KLSNkZWZpbmUgQklfQU1JR0FfUFNGUkVRCQkweDgwMDQJLyogcG93ZXIgc3VwcGx5IGZyZXF1ZW5jeSAodV9jaGFyKSAqLwotI2RlZmluZSBCSV9BTUlHQV9FQ0xPQ0sJCTB4ODAwNQkvKiBFQ2xvY2sgZnJlcXVlbmN5ICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0FNSUdBX0NISVBTRVQJMHg4MDA2CS8qIG5hdGl2ZSBjaGlwc2V0IHByZXNlbnQgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQU1JR0FfU0VSUEVSCQkweDgwMDcJLyogc2VyaWFsIHBvcnQgcGVyaW9kICh1X3Nob3J0KSAqLwotCi0gICAgLyoKLSAgICAgKiAgQXRhcmktc3BlY2lmaWMgdGFncwotICAgICAqLwotCi0jZGVmaW5lIEJJX0FUQVJJX01DSF9DT09LSUUJMHg4MDAwCS8qIF9NQ0ggY29va2llIGZyb20gVE9TICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0FUQVJJX01DSF9UWVBFCTB4ODAwMQkvKiBzcGVjaWFsIG1hY2hpbmUgdHlwZSAodV9sb25nKSAqLwotCQkJCQkvKiAodmFsdWVzIGFyZSBBVEFSSV9NQUNIXyogZGVmaW5lcyAqLwotCi0vKiBtY2hfY29va2llIHZhbHVlcyAodXBwZXIgd29yZCkgKi8KLSNkZWZpbmUgQVRBUklfTUNIX1NUCQkwCi0jZGVmaW5lIEFUQVJJX01DSF9TVEUJCTEKLSNkZWZpbmUgQVRBUklfTUNIX1RUCQkyCi0jZGVmaW5lIEFUQVJJX01DSF9GQUxDT04JMwotCi0vKiBtY2hfdHlwZSB2YWx1ZXMgKi8KLSNkZWZpbmUgQVRBUklfTUFDSF9OT1JNQUwJMAkvKiBubyBzcGVjaWFsIG1hY2hpbmUgdHlwZSAqLwotI2RlZmluZSBBVEFSSV9NQUNIX01FRFVTQQkxCS8qIE1lZHVzYSAwNDAgKi8KLSNkZWZpbmUgQVRBUklfTUFDSF9IQURFUwkyCS8qIEhhZGVzIDA0MCBvciAwNjAgKi8KLSNkZWZpbmUgQVRBUklfTUFDSF9BQjQwCQkzCS8qIEFmdGVyYnVybmVyMDQwIG9uIEZhbGNvbiAqLwotCi0gICAgLyoKLSAgICAgKiAgVk1FLXNwZWNpZmljIHRhZ3MKLSAgICAgKi8KLQotI2RlZmluZSBCSV9WTUVfVFlQRQkJMHg4MDAwCS8qIFZNRSBzdWItYXJjaGl0ZWN0dXJlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX1ZNRV9CUkRJTkZPCQkweDgwMDEJLyogVk1FIGJvYXJkIGluZm9ybWF0aW9uIChzdHJ1Y3QpICovCi0KLS8qIEJJX1ZNRV9UWVBFIGNvZGVzICovCi0jZGVmaW5lCVZNRV9UWVBFX1RQMzRWCQkweDAwMzQJLyogVGFkcG9sZSBUUDM0ViAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTQ3CTB4MDE0NwkvKiBNb3Rvcm9sYSBNVk1FMTQ3ICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNjIJMHgwMTYyCS8qIE1vdG9yb2xhIE1WTUUxNjIgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2NgkweDAxNjYJLyogTW90b3JvbGEgTVZNRTE2NiAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY3CTB4MDE2NwkvKiBNb3Rvcm9sYSBNVk1FMTY3ICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNzIJMHgwMTcyCS8qIE1vdG9yb2xhIE1WTUUxNzIgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3NwkweDAxNzcJLyogTW90b3JvbGEgTVZNRTE3NyAqLwotI2RlZmluZSBWTUVfVFlQRV9CVk1FNDAwMAkweDQwMDAJLyogQlZNIEx0ZC4gQlZNRTQwMDAgKi8KLSNkZWZpbmUgVk1FX1RZUEVfQlZNRTYwMDAJMHg2MDAwCS8qIEJWTSBMdGQuIEJWTUU2MDAwICovCi0KLS8qIEJJX1ZNRV9CUkRJTkZPIGlzIGEgMzIgYnl0ZSBzdHJ1Y3QgYXMgcmV0dXJuZWQgYnkgdGhlIEJ1ZyBjb2RlIG9uCi0gKiBNb3Rvcm9sYSBWTUUgYm9hcmRzLiAgQ29udGFpbnMgYm9hcmQgbnVtYmVyLCBCdWcgdmVyc2lvbiwgYm9hcmQKLSAqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZXRjLiAgU2VlIGluY2x1ZGUvYXNtL212bWUxNnhody5oIGZvciBkZXRhaWxzLgotICovCi0KLQotICAgIC8qCi0gICAgICogIE1hY2ludG9zaC1zcGVjaWZpYyB0YWdzIChhbGwgdV9sb25nKQotICAgICAqLwotCi0jZGVmaW5lIEJJX01BQ19NT0RFTAkJMHg4MDAwCS8qIE1hYyBHZXN0YWx0IElEIChtb2RlbCB0eXBlKSAqLwotI2RlZmluZSBCSV9NQUNfVkFERFIJCTB4ODAwMQkvKiBNYWMgdmlkZW8gYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIEJJX01BQ19WREVQVEgJCTB4ODAwMgkvKiBNYWMgdmlkZW8gZGVwdGggKi8KLSNkZWZpbmUgQklfTUFDX1ZST1cJCTB4ODAwMwkvKiBNYWMgdmlkZW8gcm93Ynl0ZXMgKi8KLSNkZWZpbmUgQklfTUFDX1ZESU0JCTB4ODAwNAkvKiBNYWMgdmlkZW8gZGltZW5zaW9ucyAqLwotI2RlZmluZSBCSV9NQUNfVkxPR0lDQUwJCTB4ODAwNQkvKiBNYWMgdmlkZW8gbG9naWNhbCBiYXNlICovCi0jZGVmaW5lIEJJX01BQ19TQ0NCQVNFCQkweDgwMDYJLyogTWFjIFNDQyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX0JUSU1FCQkweDgwMDcJLyogTWFjIGJvb3QgdGltZSAqLwotI2RlZmluZSBCSV9NQUNfR01UQklBUwkJMHg4MDA4CS8qIE1hYyBHTVQgdGltZXpvbmUgb2Zmc2V0ICovCi0jZGVmaW5lIEJJX01BQ19NRU1TSVpFCQkweDgwMDkJLyogTWFjIFJBTSBzaXplIChzYW5pdHkgY2hlY2spICovCi0jZGVmaW5lIEJJX01BQ19DUFVJRAkJMHg4MDBhCS8qIE1hYyBDUFUgdHlwZSAoc2FuaXR5IGNoZWNrKSAqLwotI2RlZmluZSBCSV9NQUNfUk9NQkFTRQkJMHg4MDBiCS8qIE1hYyBzeXN0ZW0gUk9NIGJhc2UgYWRkcmVzcyAqLwotCi0gICAgLyoKLSAgICAgKiAgTWFjaW50b3NoIGhhcmR3YXJlIHByb2ZpbGUgZGF0YSAtIHVudXNlZCwgc2VlIG1hY2ludG9zaC5oIGZvcgotICAgICAqICByZXNvbmFibGUgdHlwZSB2YWx1ZXMKLSAgICAgKi8KLQotI2RlZmluZSBCSV9NQUNfVklBMUJBU0UJCTB4ODAxMAkvKiBNYWMgVklBMSBiYXNlIGFkZHJlc3MgKGFsd2F5cyBwcmVzZW50KSAqLwotI2RlZmluZSBCSV9NQUNfVklBMkJBU0UJCTB4ODAxMQkvKiBNYWMgVklBMiBiYXNlIGFkZHJlc3MgKHR5cGUgdmFyaWVzKSAqLwotI2RlZmluZSBCSV9NQUNfVklBMlRZUEUJCTB4ODAxMgkvKiBNYWMgVklBMiB0eXBlIChWSUEsIFJCViwgT1NTKSAqLwotI2RlZmluZSBCSV9NQUNfQURCVFlQRQkJMHg4MDEzCS8qIE1hYyBBREIgaW50ZXJmYWNlIHR5cGUgKi8KLSNkZWZpbmUgQklfTUFDX0FTQ0JBU0UJCTB4ODAxNAkvKiBNYWMgQXBwbGUgU291bmQgQ2hpcCBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX1NDU0k1MzgwCQkweDgwMTUJLyogTWFjIE5DUiA1MzgwIFNDU0kgKGJhc2UgYWRkcmVzcywgbXVsdGkpICovCi0jZGVmaW5lIEJJX01BQ19TQ1NJRE1BCQkweDgwMTYJLyogTWFjIFNDU0kgRE1BIChiYXNlIGFkZHJlc3MpICovCi0jZGVmaW5lIEJJX01BQ19TQ1NJNTM5NgkJMHg4MDE3CS8qIE1hYyBOQ1IgNTNDOTYgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KLSNkZWZpbmUgQklfTUFDX0lERVRZUEUJCTB4ODAxOAkvKiBNYWMgSURFIGludGVyZmFjZSB0eXBlICovCi0jZGVmaW5lIEJJX01BQ19JREVCQVNFCQkweDgwMTkJLyogTWFjIElERSBpbnRlcmZhY2UgYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIEJJX01BQ19OVUJVUwkJMHg4MDFhCS8qIE1hYyBOdWJ1cyB0eXBlIChub25lLCByZWd1bGFyLCBwc2V1ZG8pICovCi0jZGVmaW5lIEJJX01BQ19TTE9UTUFTSwkJMHg4MDFiCS8qIE1hYyBOdWJ1cyBzbG90cyBwcmVzZW50ICovCi0jZGVmaW5lIEJJX01BQ19TQ0NUWVBFCQkweDgwMWMJLyogTWFjIFNDQyBzZXJpYWwgdHlwZSAobm9ybWFsLCBJT1ApICovCi0jZGVmaW5lIEJJX01BQ19FVEhUWVBFCQkweDgwMWQJLyogTWFjIGJ1aWx0aW4gZXRoZXJuZXQgdHlwZSAoU29uaWMsIE1BQ0UgKi8KLSNkZWZpbmUgQklfTUFDX0VUSEJBU0UJCTB4ODAxZQkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX1BNVQkJMHg4MDFmCS8qIE1hYyBwb3dlciBtYW5hZ2VtZW50IC8gcG93ZXJvZmYgaGFyZHdhcmUgKi8KLSNkZWZpbmUgQklfTUFDX0lPUF9TV0lNCQkweDgwMjAJLyogTWFjIFNXSU0gZmxvcHB5IElPUCAqLwotI2RlZmluZSBCSV9NQUNfSU9QX0FEQgkJMHg4MDIxCS8qIE1hYyBBREIgSU9QICovCi0KLSAgICAvKgotICAgICAqIE1hYzogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBib290ZXIgZGF0YSBmb3JtYXQgKHRlbXBvcmFyaWx5KQotICAgICAqIEZpZWxkcyB1bnVzZWQgd2l0aCB0aGUgbmV3IGJvb3RpbmZvIGNhbiBiZSBkZWxldGVkIG5vdzsgaW5zdGVhZCBvZgotICAgICAqIGFkZGluZyBuZXcgZmllbGRzIHRoZSBzdHJ1Y3QgbWlnaHQgYmUgc3BsaXR0ZWQgaW50byBhIGhhcmR3YXJlIGFkZHJlc3MKLSAgICAgKiBwYXJ0IGFuZCBhIGhhcmR3YXJlIHR5cGUgcGFydAotICAgICAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCi17Ci0JdW5zaWduZWQgbG9uZyB2aWRlb2FkZHI7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb3JvdzsKLQl1bnNpZ25lZCBsb25nIHZpZGVvZGVwdGg7Ci0JdW5zaWduZWQgbG9uZyBkaW1lbnNpb25zOwotCXVuc2lnbmVkIGxvbmcgYXJnczsKLQl1bnNpZ25lZCBsb25nIGJvb3R0aW1lOwotCXVuc2lnbmVkIGxvbmcgZ210YmlhczsKLQl1bnNpZ25lZCBsb25nIGJvb3R2ZXI7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb2xvZ2ljYWw7Ci0JdW5zaWduZWQgbG9uZyBzY2NiYXNlOwotCXVuc2lnbmVkIGxvbmcgaWQ7Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplOwotCXVuc2lnbmVkIGxvbmcgc2VyaWFsbWY7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxoc2s7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxncGk7Ci0JdW5zaWduZWQgbG9uZyBwcmludG1mOwotCXVuc2lnbmVkIGxvbmcgcHJpbnRoc2s7Ci0JdW5zaWduZWQgbG9uZyBwcmludGdwaTsKLQl1bnNpZ25lZCBsb25nIGNwdWlkOwotCXVuc2lnbmVkIGxvbmcgcm9tYmFzZTsKLQl1bnNpZ25lZCBsb25nIGFkYmRlbGF5OwotCXVuc2lnbmVkIGxvbmcgdGltZWRicmE7Ci19OwotCi1leHRlcm4gc3RydWN0IG1hY19ib290ZXJfZGF0YQotCW1hY19iaV9kYXRhOwotCi0jZW5kaWYKLQotICAgIC8qCi0gICAgICogIEFwb2xsby1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfQVBPTExPX01PREVMICAgICAgICAgMHg4MDAwICAvKiBtb2RlbCAodV9sb25nKSAqLwotCi0gICAgLyoKLSAgICAgKiAgSFAzMDAtc3BlY2lmaWMgdGFncwotICAgICAqLwotCi0jZGVmaW5lIEJJX0hQMzAwX01PREVMCQkweDgwMDAJLyogbW9kZWwgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfSFAzMDBfVUFSVF9TQ09ERQkweDgwMDEJLyogVUFSVCBzZWxlY3QgY29kZSAodV9sb25nKSAqLwotI2RlZmluZSBCSV9IUDMwMF9VQVJUX0FERFIJMHg4MDAyCS8qIHBoeXMuIGFkZHIgb2YgVUFSVCAodV9sb25nKSAqLwotCi0gICAgLyoKLSAgICAgKiBTdHVmZiBmb3IgYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb25pbmcKLSAgICAgKgotICAgICAqIEF0IHRoZSBzdGFydCBvZiBrZXJuZWwgY29kZSwgYSAnc3RydWN0IGJvb3R2ZXJzaW9uJyBpcyBsb2NhdGVkLgotICAgICAqIGJvb3RzdHJhcCBjaGVja3MgZm9yIGEgbWF0Y2hpbmcgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlIGJlZm9yZSBib290aW5nCi0gICAgICogYSBrZXJuZWwsIHRvIGF2b2lkIHVzZXIgY29uZnVzaW9uIGlmIGtlcm5lbCBhbmQgYm9vdHN0cmFwIGRvbid0IHdvcmsKLSAgICAgKiB0b2dldGhlciA6LSkKLSAgICAgKgotICAgICAqIElmIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBib290aW5mbyBpbnRlcmZhY2UsIHRoZSBtYWpvcgotICAgICAqIG51bWJlciBiZWxvdyBzaG91bGQgYmUgc3RlcHBlZCAoYW5kIHRoZSBtaW5vciByZXNldCB0byAwKSBmb3IgdGhlCi0gICAgICogYXBwcm9wcmlhdGUgbWFjaGluZS4gSWYgYSBjaGFuZ2UgaXMgYmFja3dhcmQtY29tcGF0aWJsZSwgdGhlIG1pbm9yCi0gICAgICogc2hvdWxkIGJlIHN0ZXBwZWQuICJCYWNrd2FyZHMtY29tcGF0aWJsZSIgbWVhbnMgdGhhdCBib290aW5nIHdpbGwgd29yaywKLSAgICAgKiBidXQgY2VydGFpbiBmZWF0dXJlcyBtYXkgbm90LgotICAgICAqLwotCi0jZGVmaW5lIEJPT1RJTkZPVl9NQUdJQwkJCTB4NDI0OTU2MUEJLyogJ0JJVl5aJyAqLwotI2RlZmluZSBNS19CSV9WRVJTSU9OKG1ham9yLG1pbm9yKQkoKChtYWpvcik8PDE2KSsobWlub3IpKQotI2RlZmluZSBCSV9WRVJTSU9OX01BSk9SKHYpCQkoKCh2KSA+PiAxNikgJiAweGZmZmYpCi0jZGVmaW5lIEJJX1ZFUlNJT05fTUlOT1IodikJCSgodikgJiAweGZmZmYpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBib290dmVyc2lvbiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgYnJhbmNoOwotICAgIHVuc2lnbmVkIGxvbmcgbWFnaWM7Ci0gICAgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIG1hY2h0eXBlOwotCXVuc2lnbmVkIGxvbmcgdmVyc2lvbjsKLSAgICB9IG1hY2h2ZXJzaW9uc1swXTsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBBTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBBVEFSSV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDEgKQotI2RlZmluZSBNQUNfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBNVk1FMTQ3X0JPT1RJX1ZFUlNJT04gIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBNVk1FMTZ4X0JPT1RJX1ZFUlNJT04gIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBCVk1FNjAwMF9CT09USV9WRVJTSU9OIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBRNDBfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotI2RlZmluZSBIUDMwMF9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDIsIDAgKQotCi0jaWZkZWYgQk9PVElORk9fQ09NUEFUXzFfMAotCi0gICAgLyoKLSAgICAgKiAgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbiAxLjAKLSAgICAgKi8KLQotI2RlZmluZSBDT01QQVRfQU1JR0FfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKLSNkZWZpbmUgQ09NUEFUX0FUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMSwgMCApCi0jZGVmaW5lIENPTVBBVF9NQUNfQk9PVElfVkVSU0lPTiAgICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQotCi0jaW5jbHVkZSA8bGludXgvem9ycm8uaD4KLQotI2RlZmluZSBDT01QQVRfTlVNX0FVVE8gICAgMTYKLQotc3RydWN0IGNvbXBhdF9iaV9BbWlnYSB7Ci0gICAgaW50IG1vZGVsOwotICAgIGludCBudW1fYXV0b2NvbjsKLSAgICBzdHJ1Y3QgQ29uZmlnRGV2IGF1dG9jb25bQ09NUEFUX05VTV9BVVRPXTsKLSAgICB1bnNpZ25lZCBsb25nIGNoaXBfc2l6ZTsKLSAgICB1bnNpZ25lZCBjaGFyIHZibGFuazsKLSAgICB1bnNpZ25lZCBjaGFyIHBzZnJlcTsKLSAgICB1bnNpZ25lZCBsb25nIGVjbG9jazsKLSAgICB1bnNpZ25lZCBsb25nIGNoaXBzZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBod19wcmVzZW50OwotfTsKLQotc3RydWN0IGNvbXBhdF9iaV9BdGFyaSB7Ci0gICAgdW5zaWduZWQgbG9uZyBod19wcmVzZW50OwotICAgIHVuc2lnbmVkIGxvbmcgbWNoX2Nvb2tpZTsKLX07Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoCi17Ci0JdW5zaWduZWQgbG9uZyB2aWRlb2FkZHI7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb3JvdzsKLQl1bnNpZ25lZCBsb25nIHZpZGVvZGVwdGg7Ci0JdW5zaWduZWQgbG9uZyBkaW1lbnNpb25zOwotCXVuc2lnbmVkIGxvbmcgYXJnczsKLQl1bnNpZ25lZCBsb25nIGJvb3R0aW1lOwotCXVuc2lnbmVkIGxvbmcgZ210YmlhczsKLQl1bnNpZ25lZCBsb25nIGJvb3R2ZXI7Ci0JdW5zaWduZWQgbG9uZyB2aWRlb2xvZ2ljYWw7Ci0JdW5zaWduZWQgbG9uZyBzY2NiYXNlOwotCXVuc2lnbmVkIGxvbmcgaWQ7Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplOwotCXVuc2lnbmVkIGxvbmcgc2VyaWFsbWY7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxoc2s7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxncGk7Ci0JdW5zaWduZWQgbG9uZyBwcmludG1mOwotCXVuc2lnbmVkIGxvbmcgcHJpbnRoc2s7Ci0JdW5zaWduZWQgbG9uZyBwcmludGdwaTsKLQl1bnNpZ25lZCBsb25nIGNwdWlkOwotCXVuc2lnbmVkIGxvbmcgcm9tYmFzZTsKLQl1bnNpZ25lZCBsb25nIGFkYmRlbGF5OwotCXVuc2lnbmVkIGxvbmcgdGltZWRicmE7Ci19OwotCi0jZW5kaWYKLQotc3RydWN0IGNvbXBhdF9tZW1faW5mbyB7Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyOwotICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLX07Ci0KLSNkZWZpbmUgQ09NUEFUX05VTV9NRU1JTkZPICA0Ci0KLSNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwMjAgMAotI2RlZmluZSBDT01QQVRfQ1BVQl82ODAzMCAxCi0jZGVmaW5lIENPTVBBVF9DUFVCXzY4MDQwIDIKLSNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNjAgMwotI2RlZmluZSBDT01QQVRfRlBVQl82ODg4MSA1Ci0jZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgyIDYKLSNkZWZpbmUgQ09NUEFUX0ZQVUJfNjgwNDAgNwotI2RlZmluZSBDT01QQVRfRlBVQl82ODA2MCA4Ci0KLSNkZWZpbmUgQ09NUEFUX0NQVV82ODAyMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMjApCi0jZGVmaW5lIENPTVBBVF9DUFVfNjgwMzAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDMwKQotI2RlZmluZSBDT01QQVRfQ1BVXzY4MDQwICAgICgxPDxDT01QQVRfQ1BVQl82ODA0MCkKLSNkZWZpbmUgQ09NUEFUX0NQVV82ODA2MCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwNjApCi0jZGVmaW5lIENPTVBBVF9DUFVfTUFTSyAgICAgKDMxKQotI2RlZmluZSBDT01QQVRfRlBVXzY4ODgxICAgICgxPDxDT01QQVRfRlBVQl82ODg4MSkKLSNkZWZpbmUgQ09NUEFUX0ZQVV82ODg4MiAgICAoMTw8Q09NUEFUX0ZQVUJfNjg4ODIpCi0jZGVmaW5lIENPTVBBVF9GUFVfNjgwNDAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDQwKQotI2RlZmluZSBDT01QQVRfRlBVXzY4MDYwICAgICgxPDxDT01QQVRfRlBVQl82ODA2MCkKLSNkZWZpbmUgQ09NUEFUX0ZQVV9NQVNLICAgICAoMHhmZTApCi0KLSNkZWZpbmUgQ09NUEFUX0NMX1NJWkUgICAgICAoMjU2KQotCi1zdHJ1Y3QgY29tcGF0X2Jvb3RpbmZvIHsKLSAgICB1bnNpZ25lZCBsb25nIG1hY2h0eXBlOwotICAgIHVuc2lnbmVkIGxvbmcgY3B1dHlwZTsKLSAgICBzdHJ1Y3QgY29tcGF0X21lbV9pbmZvIG1lbW9yeVtDT01QQVRfTlVNX01FTUlORk9dOwotICAgIGludCBudW1fbWVtb3J5OwotICAgIHVuc2lnbmVkIGxvbmcgcmFtZGlza19zaXplOwotICAgIHVuc2lnbmVkIGxvbmcgcmFtZGlza19hZGRyOwotICAgIGNoYXIgY29tbWFuZF9saW5lW0NPTVBBVF9DTF9TSVpFXTsKLSAgICB1bmlvbiB7Ci0Jc3RydWN0IGNvbXBhdF9iaV9BbWlnYSAgICAgYmlfYW1pOwotCXN0cnVjdCBjb21wYXRfYmlfQXRhcmkgICAgIGJpX2F0YTsKLQlzdHJ1Y3QgY29tcGF0X2JpX01hY2ludG9zaCBiaV9tYWM7Ci0gICAgfSBiaV91bjsKLX07Ci0KLSNkZWZpbmUgYmlfYW1pZ2EJYmlfdW4uYmlfYW1pCi0jZGVmaW5lIGJpX2F0YXJpCWJpX3VuLmJpX2F0YQotI2RlZmluZSBiaV9tYWMJCWJpX3VuLmJpX21hYwotCi0jZW5kaWYgLyogQk9PVElORk9fQ09NUEFUXzFfMCAqLwotCi0KLSNlbmRpZiAvKiBfTTY4S19CT09USU5GT19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mb19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTJlNTI2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mb19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0KLS8qIE5vdGhpbmcgZm9yIG02OGtub21tdSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Zy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Zy5oCmluZGV4IDk5N2UwOTQuLmVmOWEyZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnLmgKQEAgLTEsNSArMSwzMCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiYnVnX25vLmgiCisjaWZuZGVmIF9NNjhLX0JVR19ICisjZGVmaW5lIF9NNjhLX0JVR19ICisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZkZWYgQ09ORklHX0JVRworI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKKwlfX2J1aWx0aW5fdHJhcCgpOyBcCit9IHdoaWxlICgwKQogI2Vsc2UKLSNpbmNsdWRlICJidWdfbW0uaCIKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCXBhbmljKCJCVUchIik7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIEJVRygpIGRvIHsgXAorCV9fYnVpbHRpbl90cmFwKCk7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBIQVZFX0FSQ0hfQlVHCisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YjUyOGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19CVUdfSAotI2RlZmluZSBfTTY4S19CVUdfSAotCi0KLSNpZmRlZiBDT05GSUdfQlVHCi0jaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKLSNpZm5kZWYgQ09ORklHX1NVTjMKLSNkZWZpbmUgQlVHKCkgZG8geyBcCi0JcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAotCV9fYnVpbHRpbl90cmFwKCk7IFwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0JcGFuaWMoIkJVRyEiKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotI2Vsc2UKLSNkZWZpbmUgQlVHKCkgZG8geyBcCi0JX19idWlsdGluX3RyYXAoKTsgXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIEhBVkVfQVJDSF9CVUcKLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGU3ZGMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX0JVR19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfQlVHX0gKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3MuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzLmgKaW5kZXggMDFmMDQ3ZC4uZDA2MjA3YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3MuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVncy5oCkBAIC0xLDUgKzEsMjAgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImJ1Z3Nfbm8uaCIKKy8qCisgKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcworICovCisKKy8qCisgKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCisgKgorICogTmVlZHM6CisgKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CisgKi8KKworI2lmZGVmIENPTkZJR19NTVUKK2V4dGVybiB2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CS8qIGluIGFyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyAqLwogI2Vsc2UKLSNpbmNsdWRlICJidWdzX21tLmgiCitzdGF0aWMgdm9pZCBjaGVja19idWdzKHZvaWQpCit7Cit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnc19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDE5MzU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0vKgotICogIGluY2x1ZGUvYXNtLW02OGsvYnVncy5oCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NCAgTGludXMgVG9ydmFsZHMKLSAqLwotCi0vKgotICogVGhpcyBpcyBpbmNsdWRlZCBieSBpbml0L21haW4uYyB0byBjaGVjayBmb3IgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBidWdzLgotICoKLSAqIE5lZWRzOgotICoJdm9pZCBjaGVja19idWdzKHZvaWQpOwotICovCi0KLWV4dGVybiB2b2lkIGNoZWNrX2J1Z3Modm9pZCk7CS8qIGluIGFyY2gvbTY4ay9rZXJuZWwvc2V0dXAuYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3Nfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMzgyZGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3Nfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qCi0gKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCi0gKgotICogTmVlZHM6Ci0gKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7Ci0gKi8KLQotc3RhdGljIHZvaWQgY2hlY2tfYnVncyh2b2lkKQotewotfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA1OTljMjliLi5mZWQzZmQzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMSw1ICsxLDExIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJjYWNoZV9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJjYWNoZV9tbS5oIgorLyoKKyAqIGluY2x1ZGUvYXNtLW02OGsvY2FjaGUuaAorICovCisjaWZuZGVmIF9fQVJDSF9NNjhLX0NBQ0hFX0gKKyNkZWZpbmUgX19BUkNIX002OEtfQ0FDSEVfSAorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfU0hJRlQgIDQKKyNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX0JZVEVTICAoMTw8IEwxX0NBQ0hFX1NISUZUKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZDNmZDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oCi0gKi8KLSNpZm5kZWYgX19BUkNIX002OEtfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfTTY4S19DQUNIRV9ICi0KLS8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCi0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9TSElGVCAgNAotI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgICgxPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRlOWVhYy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX19BUkNIX002OEtOT01NVV9DQUNIRV9ICi0jZGVmaW5lIF9fQVJDSF9NNjhLTk9NTVVfQ0FDSEVfSAotCi0vKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwotI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgIDE2CS8qIHRoaXMgbmVlZCB0byBiZSBhdCBsZWFzdCAxICovCi0KLS8qIG02OGstZWxmLWdjYyAgMi45NS4yIGRvZXNuJ3QgbGlrZSB0aGVzZSAqLwotCi0jZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWQKLSNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggNTFiMDU2ZC4uOTFmY2M1MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudC5oCkBAIC0xLDUgKzEsMjggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImN1cnJlbnRfbm8uaCIKKyNpZm5kZWYgX002OEtfQ1VSUkVOVF9ICisjZGVmaW5lIF9NNjhLX0NVUlJFTlRfSAorCisjaWZkZWYgQ09ORklHX01NVQorCityZWdpc3RlciBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQgX19hc21fXygiJWEyIik7CisKICNlbHNlCi0jaW5jbHVkZSAiY3VycmVudF9tbS5oIgotI2VuZGlmCisKKy8qCisgKglSYXRoZXIgdGhhbiBkZWRpY2F0ZSBhIHJlZ2lzdGVyIChhcyB0aGUgbTY4ayBzb3VyY2UgZG9lcyksIHdlCisgKglqdXN0IGtlZXAgYSBnbG9iYWwsICB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjaGFuZ2UgaXQgYWxsIHRvIGJlCisgKgljdXJyZW50IGFuZCBsb3NlIF9jdXJyZW50X3Rhc2suCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybihjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2spOworfQorCisjZGVmaW5lCWN1cnJlbnQJZ2V0X2N1cnJlbnQoKQorCisjZW5kaWYgLyogQ09ORk5JR19NTVUgKi8KKworI2VuZGlmIC8qICEoX002OEtfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jdXJyZW50X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZThmOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19DVVJSRU5UX0gKLSNkZWZpbmUgX002OEtfQ1VSUkVOVF9ICi0KLXJlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBfX2FzbV9fKCIlYTIiKTsKLQotI2VuZGlmIC8qICEoX002OEtfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jdXJyZW50X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzZWUwZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9DVVJSRU5UX0gKLSNkZWZpbmUgX002OEtOT01NVV9DVVJSRU5UX0gKLS8qCi0gKgljdXJyZW50LmgKLSAqCShDKSBDb3B5cmlnaHQgMjAwMCwgTGluZW8sIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUB1Y2xpbnV4Lm9yZz4KLSAqCShDKSBDb3B5cmlnaHQgMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKLSAqCi0gKglyYXRoZXIgdGhhbiBkZWRpY2F0ZSBhIHJlZ2lzdGVyIChhcyB0aGUgbTY4ayBzb3VyY2UgZG9lcyksIHdlCi0gKglqdXN0IGtlZXAgYSBnbG9iYWwsICB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjaGFuZ2UgaXQgYWxsIHRvIGJlCi0gKgljdXJyZW50IGFuZCBsb3NlIF9jdXJyZW50X3Rhc2suCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+Ci0KLXN0cnVjdCB0YXNrX3N0cnVjdDsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpCi17Ci0JcmV0dXJuKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzayk7Ci19Ci0KLSNkZWZpbmUJY3VycmVudAlnZXRfY3VycmVudCgpCi0KLSNlbmRpZiAvKiBfTTY4S05PTU1VX0NVUlJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaAppbmRleCBkMjExZDlmLi5lZGI2NjE0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaApAQCAtMSw1ICsxLDM0IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJkaXY2NF9uby5oIgorI2lmbmRlZiBfTTY4S19ESVY2NF9ICisjZGVmaW5lIF9NNjhLX0RJVjY0X0gKKworI2lmZGVmIENPTkZJR19NTVUKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIG4gPSBuIC8gYmFzZTsgcmV0dXJuIHJlbTsgKi8KKworI2RlZmluZSBkb19kaXYobiwgYmFzZSkgKHsJCQkJCVwKKwl1bmlvbiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBuMzJbMl07CQkJCVwKKwkJdW5zaWduZWQgbG9uZyBsb25nIG42NDsJCQkJXAorCX0gX19uOwkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3JlbSwgX191cHBlcjsJCQkJXAorCQkJCQkJCQlcCisJX19uLm42NCA9IChuKTsJCQkJCQlcCisJaWYgKChfX3VwcGVyID0gX19uLm4zMlswXSkpIHsJCQkJXAorCQlhc20gKCJkaXZ1bC5sICUyLCUxOiUwIgkJCQlcCisJCQk6ICI9ZCIgKF9fbi5uMzJbMF0pLCAiPWQiIChfX3VwcGVyKQlcCisJCQk6ICJkIiAoYmFzZSksICIwIiAoX19uLm4zMlswXSkpOwlcCisJfQkJCQkJCQlcCisJYXNtICgiZGl2dS5sICUyLCUxOiUwIgkJCQkJXAorCQk6ICI9ZCIgKF9fbi5uMzJbMV0pLCAiPWQiIChfX3JlbSkJCVwKKwkJOiAiZCIgKGJhc2UpLCAiMSIgKF9fdXBwZXIpLCAiMCIgKF9fbi5uMzJbMV0pKTsJXAorCShuKSA9IF9fbi5uNjQ7CQkJCQkJXAorCV9fcmVtOwkJCQkJCQlcCit9KQorCiAjZWxzZQotI2luY2x1ZGUgImRpdjY0X21tLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2VuZGlmIC8qIF9NNjhLX0RJVjY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNDNjOTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0RJVjY0X0gKLSNkZWZpbmUgX002OEtfRElWNjRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogbiA9IG4gLyBiYXNlOyByZXR1cm4gcmVtOyAqLwotCi0jZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoewkJCQkJXAotCXVuaW9uIHsJCQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIG4zMlsyXTsJCQkJXAotCQl1bnNpZ25lZCBsb25nIGxvbmcgbjY0OwkJCQlcCi0JfSBfX247CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fcmVtLCBfX3VwcGVyOwkJCQlcCi0JCQkJCQkJCVwKLQlfX24ubjY0ID0gKG4pOwkJCQkJCVwKLQlpZiAoKF9fdXBwZXIgPSBfX24ubjMyWzBdKSkgewkJCQlcCi0JCWFzbSAoImRpdnVsLmwgJTIsJTE6JTAiCQkJCVwKLQkJCTogIj1kIiAoX19uLm4zMlswXSksICI9ZCIgKF9fdXBwZXIpCVwKLQkJCTogImQiIChiYXNlKSwgIjAiIChfX24ubjMyWzBdKSk7CVwKLQl9CQkJCQkJCVwKLQlhc20gKCJkaXZ1LmwgJTIsJTE6JTAiCQkJCQlcCi0JCTogIj1kIiAoX19uLm4zMlsxXSksICI9ZCIgKF9fcmVtKQkJXAotCQk6ICJkIiAoYmFzZSksICIxIiAoX191cHBlciksICIwIiAoX19uLm4zMlsxXSkpOwlcCi0JKG4pID0gX19uLm42NDsJCQkJCQlcCi0JX19yZW07CQkJCQkJCVwKLX0pCi0KLSNlbmRpZiAvKiBfTTY4S19ESVY2NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2Q5NzhjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGY0YTRjNzYuLjI2ZjUwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xLDUgKzEsMTEyIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJkbWEtbWFwcGluZ19uby5oIgorI2lmbmRlZiBfTTY4S19ETUFfTUFQUElOR19ICisjZGVmaW5lIF9NNjhLX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKKyNpZm5kZWYgQ09ORklHX01NVV9TVU4zCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCXJldHVybiAxIDw8IEwxX0NBQ0hFX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfaXNfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCisJCQkJZG1hX2FkZHJfdCAqLCBnZnBfdCk7CitleHRlcm4gdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwKKwkJCSAgICAgIHZvaWQgKiwgZG1hX2FkZHJfdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCSAgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBmbGFnKQoreworCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIGZsYWcpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCXZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgaGFuZGxlKQoreworCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwkvKiB3ZSB1c2UgY29oZXJlbnQgYWxsb2NhdGlvbiwgc28gbm90IG11Y2ggdG8gZG8gaGVyZS4gKi8KK30KKworZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7Cit9CisKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwYWdlICosCisJCQkgICAgICAgdW5zaWduZWQgbG9uZywgc2l6ZV90IHNpemUsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyZXNzLAorCQkJCSAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworZXh0ZXJuIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlKQoreworCXJldHVybiAwOworfQorCiAjZWxzZQotI2luY2x1ZGUgImRtYS1tYXBwaW5nX21tLmgiCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+CiAjZW5kaWYKKworI2VuZGlmICAvKiBfTTY4S19ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmdfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmY1MDU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSNpZm5kZWYgX002OEtfRE1BX01BUFBJTkdfSAotI2RlZmluZSBfTTY4S19ETUFfTUFQUElOR19ICi0KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0OwotCi0jaWZuZGVmIENPTkZJR19NTVVfU1VOMwotc3RhdGljIGlubGluZSBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gMSA8PCBMMV9DQUNIRV9TSElGVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiAwOwotfQotCi1leHRlcm4gdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LAotCQkJCWRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotZXh0ZXJuIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCi0JCQkgICAgICB2b2lkICosIGRtYV9hZGRyX3QpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCQkgIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZmxhZykKLXsKLQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCBmbGFnKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCQl2b2lkICphZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKLXsKLQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCi0JCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci0JLyogd2UgdXNlIGNvaGVyZW50IGFsbG9jYXRpb24sIHNvIG5vdCBtdWNoIHRvIGRvIGhlcmUuICovCi19Ci0KLWV4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsCi0JCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotfQotCi1leHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgcGFnZSAqLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsIHNpemVfdCBzaXplLAotCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLWV4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCi0JCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLWV4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LAotCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKLQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0ICsgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCi0JCQkJCSAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkgICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0ICsgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KLSNlbmRpZgotCi0jZW5kaWYgIC8qIF9NNjhLX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NDhmMmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfRE1BX01BUFBJTkdfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+Ci0KLSNlbmRpZiAgLyogX002OEtOT01NVV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMDRjZTQ4OC4uMGIwZjQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMSw1ICsxLDExOSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiZWxmX25vLmgiCisjaWZuZGVmIF9fQVNNbTY4a19FTEZfSAorI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorCisvKgorICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUgUl82OEtfTk9ORQkwCisjZGVmaW5lIFJfNjhLXzMyCTEKKyNkZWZpbmUgUl82OEtfMTYJMgorI2RlZmluZSBSXzY4S184CQkzCisjZGVmaW5lIFJfNjhLX1BDMzIJNAorI2RlZmluZSBSXzY4S19QQzE2CTUKKyNkZWZpbmUgUl82OEtfUEM4CTYKKyNkZWZpbmUgUl82OEtfR09UMzIJNworI2RlZmluZSBSXzY4S19HT1QxNgk4CisjZGVmaW5lIFJfNjhLX0dPVDgJOQorI2RlZmluZSBSXzY4S19HT1QzMk8JMTAKKyNkZWZpbmUgUl82OEtfR09UMTZPCTExCisjZGVmaW5lIFJfNjhLX0dPVDhPCTEyCisjZGVmaW5lIFJfNjhLX1BMVDMyCTEzCisjZGVmaW5lIFJfNjhLX1BMVDE2CTE0CisjZGVmaW5lIFJfNjhLX1BMVDgJMTUKKyNkZWZpbmUgUl82OEtfUExUMzJPCTE2CisjZGVmaW5lIFJfNjhLX1BMVDE2TwkxNworI2RlZmluZSBSXzY4S19QTFQ4TwkxOAorI2RlZmluZSBSXzY4S19DT1BZCTE5CisjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCisjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCisjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzY4SykKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNXzY4SworCisvKiBGb3IgU1ZSNC9tNjhrIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBpcworICAgcGFzc2VkIGluICVhMS4gIEFsdGhvdWdoIG15IGNvcHkgb2YgdGhlIEFCSSBoYXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGl0CisgICBpcyBhY3R1YWxseSB1c2VkIG9uIEFTVi4gICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPmExID0gMAorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKICNlbHNlCi0jaW5jbHVkZSAiZWxmX21tLmgiCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKKyNlbHNlCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MEQ4MDAwMDBVTAorI2VuZGlmCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQkJXAorCS8qIEJsZWVjaC4gKi8JCQkJCQkJXAorCXByX3JlZ1swXSA9IHJlZ3MtPmQxOwkJCQkJCVwKKwlwcl9yZWdbMV0gPSByZWdzLT5kMjsJCQkJCQlcCisJcHJfcmVnWzJdID0gcmVncy0+ZDM7CQkJCQkJXAorCXByX3JlZ1szXSA9IHJlZ3MtPmQ0OwkJCQkJCVwKKwlwcl9yZWdbNF0gPSByZWdzLT5kNTsJCQkJCQlcCisJcHJfcmVnWzddID0gcmVncy0+YTA7CQkJCQkJXAorCXByX3JlZ1s4XSA9IHJlZ3MtPmExOwkJCQkJCVwKKwlwcl9yZWdbOV0gPSByZWdzLT5hMjsJCQkJCQlcCisJcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKKwlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPm9yaWdfZDA7CQkJCQlcCisJcHJfcmVnWzE3XSA9IHJlZ3MtPnNyOwkJCQkJCVwKKwlwcl9yZWdbMThdID0gcmVncy0+cGM7CQkJCQkJXAorCXByX3JlZ1sxOV0gPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsJCVwKKwl7CQkJCQkJCQlcCisJICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsJXAorCSAgcHJfcmVnWzVdID0gc3ctPmQ2OwkJCQkJCVwKKwkgIHByX3JlZ1s2XSA9IHN3LT5kNzsJCQkJCQlcCisJICBwcl9yZWdbMTBdID0gc3ctPmEzOwkJCQkJCVwKKwkgIHByX3JlZ1sxMV0gPSBzdy0+YTQ7CQkJCQkJXAorCSAgcHJfcmVnWzEyXSA9IHN3LT5hNTsJCQkJCQlcCisJICBwcl9yZWdbMTNdID0gc3ctPmE2OwkJCQkJCVwKKwl9CisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBmNDllLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGZfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNbTY4a19FTEZfSAotI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKLQotLyoKLSAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotCi0vKgotICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCi0gKi8KLSNkZWZpbmUgUl82OEtfTk9ORQkwCi0jZGVmaW5lIFJfNjhLXzMyCTEKLSNkZWZpbmUgUl82OEtfMTYJMgotI2RlZmluZSBSXzY4S184CQkzCi0jZGVmaW5lIFJfNjhLX1BDMzIJNAotI2RlZmluZSBSXzY4S19QQzE2CTUKLSNkZWZpbmUgUl82OEtfUEM4CTYKLSNkZWZpbmUgUl82OEtfR09UMzIJNwotI2RlZmluZSBSXzY4S19HT1QxNgk4Ci0jZGVmaW5lIFJfNjhLX0dPVDgJOQotI2RlZmluZSBSXzY4S19HT1QzMk8JMTAKLSNkZWZpbmUgUl82OEtfR09UMTZPCTExCi0jZGVmaW5lIFJfNjhLX0dPVDhPCTEyCi0jZGVmaW5lIFJfNjhLX1BMVDMyCTEzCi0jZGVmaW5lIFJfNjhLX1BMVDE2CTE0Ci0jZGVmaW5lIFJfNjhLX1BMVDgJMTUKLSNkZWZpbmUgUl82OEtfUExUMzJPCTE2Ci0jZGVmaW5lIFJfNjhLX1BMVDE2TwkxNwotI2RlZmluZSBSXzY4S19QTFQ4TwkxOAotI2RlZmluZSBSXzY4S19DT1BZCTE5Ci0jZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCi0jZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCi0jZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwotCi0jZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKLQotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCi0gKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzY4SykKLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgotICovCi0jZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCi0jZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCi0jZGVmaW5lIEVMRl9BUkNICUVNXzY4SwotCi0vKiBGb3IgU1ZSNC9tNjhrIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBpcwotICAgcGFzc2VkIGluICVhMS4gIEFsdGhvdWdoIG15IGNvcHkgb2YgdGhlIEFCSSBoYXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGl0Ci0gICBpcyBhY3R1YWxseSB1c2VkIG9uIEFTVi4gICovCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPmExID0gMAotCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCi0jaWZuZGVmIENPTkZJR19TVU4zCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKLSNlbHNlCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKLSNlbmRpZgotCi0vKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAotICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCi0gICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQotICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KLQotI2lmbmRlZiBDT05GSUdfU1VOMwotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKLSNlbHNlCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MEQ4MDAwMDBVTAotI2VuZGlmCi0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQkJXAotCS8qIEJsZWVjaC4gKi8JCQkJCQkJXAotCXByX3JlZ1swXSA9IHJlZ3MtPmQxOwkJCQkJCVwKLQlwcl9yZWdbMV0gPSByZWdzLT5kMjsJCQkJCQlcCi0JcHJfcmVnWzJdID0gcmVncy0+ZDM7CQkJCQkJXAotCXByX3JlZ1szXSA9IHJlZ3MtPmQ0OwkJCQkJCVwKLQlwcl9yZWdbNF0gPSByZWdzLT5kNTsJCQkJCQlcCi0JcHJfcmVnWzddID0gcmVncy0+YTA7CQkJCQkJXAotCXByX3JlZ1s4XSA9IHJlZ3MtPmExOwkJCQkJCVwKLQlwcl9yZWdbOV0gPSByZWdzLT5hMjsJCQkJCQlcCi0JcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKLQlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCi0JcHJfcmVnWzE2XSA9IHJlZ3MtPm9yaWdfZDA7CQkJCQlcCi0JcHJfcmVnWzE3XSA9IHJlZ3MtPnNyOwkJCQkJCVwKLQlwcl9yZWdbMThdID0gcmVncy0+cGM7CQkJCQkJXAotCXByX3JlZ1sxOV0gPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsJCVwKLQl7CQkJCQkJCQlcCi0JICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsJXAotCSAgcHJfcmVnWzVdID0gc3ctPmQ2OwkJCQkJCVwKLQkgIHByX3JlZ1s2XSA9IHN3LT5kNzsJCQkJCQlcCi0JICBwcl9yZWdbMTBdID0gc3ctPmEzOwkJCQkJCVwKLQkgIHByX3JlZ1sxMV0gPSBzdy0+YTQ7CQkJCQkJXAotCSAgcHJfcmVnWzEyXSA9IHN3LT5hNTsJCQkJCQlcCi0JICBwcl9yZWdbMTNdID0gc3ctPmE2OwkJCQkJCVwKLQl9Ci0KLS8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKLSAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCi0KLSNkZWZpbmUgRUxGX0hXQ0FQCSgwKQotCi0vKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KLSAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCi0gICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKLQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODA0NjgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGZfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jaWZuZGVmIF9fQVNNbTY4a19FTEZfSAotI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKLQotLyoKLSAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotCi0vKgotICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCi0gKi8KLSNkZWZpbmUgUl82OEtfTk9ORSAgMAotI2RlZmluZSBSXzY4S18zMiAgICAxCi0jZGVmaW5lIFJfNjhLXzE2ICAgIDIKLSNkZWZpbmUgUl82OEtfOCAgICAgMwotI2RlZmluZSBSXzY4S19QQzMyICA0Ci0jZGVmaW5lIFJfNjhLX1BDMTYgIDUKLSNkZWZpbmUgUl82OEtfUEM4ICAgNgotI2RlZmluZSBSXzY4S19HT1QzMiA3Ci0jZGVmaW5lIFJfNjhLX0dPVDE2IDgKLSNkZWZpbmUgUl82OEtfR09UOCAgOQotI2RlZmluZSBSXzY4S19HT1QzMk8gICAgMTAKLSNkZWZpbmUgUl82OEtfR09UMTZPICAgIDExCi0jZGVmaW5lIFJfNjhLX0dPVDhPIDEyCi0jZGVmaW5lIFJfNjhLX1BMVDMyIDEzCi0jZGVmaW5lIFJfNjhLX1BMVDE2IDE0Ci0jZGVmaW5lIFJfNjhLX1BMVDggIDE1Ci0jZGVmaW5lIFJfNjhLX1BMVDMyTyAgICAxNgotI2RlZmluZSBSXzY4S19QTFQxNk8gICAgMTcKLSNkZWZpbmUgUl82OEtfUExUOE8gMTgKLSNkZWZpbmUgUl82OEtfQ09QWSAgMTkKLSNkZWZpbmUgUl82OEtfR0xPQl9EQVQgIDIwCi0jZGVmaW5lIFJfNjhLX0pNUF9TTE9UICAyMQotI2RlZmluZSBSXzY4S19SRUxBVElWRSAgMjIKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IGVsZl9mcHJlZ3NldF90OwotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNjhLKQotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKLSNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCi0KLS8qIEZvciBTVlI0L202OGsgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGlzCi0gICBwYXNzZWQgaW4gJWExLiAgQWx0aG91Z2ggbXkgY29weSBvZiB0aGUgQUJJIGhhcyBubyBzdWNoIHN0YXRlbWVudCwgaXQKLSAgIGlzIGFjdHVhbGx5IHVzZWQgb24gQVNWLiAgKi8KLSNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+YTEgPSAwCi0KLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgotCi0vKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAotICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCi0gICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQotICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCi0JLyogQmxlZWNoLiAqLwkJCQkJCQlcCi0JcHJfcmVnWzBdID0gcmVncy0+ZDE7CQkJCQkJXAotCXByX3JlZ1sxXSA9IHJlZ3MtPmQyOwkJCQkJCVwKLQlwcl9yZWdbMl0gPSByZWdzLT5kMzsJCQkJCQlcCi0JcHJfcmVnWzNdID0gcmVncy0+ZDQ7CQkJCQkJXAotCXByX3JlZ1s0XSA9IHJlZ3MtPmQ1OwkJCQkJCVwKLQlwcl9yZWdbN10gPSByZWdzLT5hMDsJCQkJCQlcCi0JcHJfcmVnWzhdID0gcmVncy0+YTE7CQkJCQkJXAotCXByX3JlZ1sxNF0gPSByZWdzLT5kMDsJCQkJCQlcCi0JcHJfcmVnWzE1XSA9IHJkdXNwKCk7CQkJCQkJXAotCXByX3JlZ1sxNl0gPSAwIC8qIHJlZ3MtPm9yaWdfZDAgKi87CQkJCVwKLQlwcl9yZWdbMTddID0gcmVncy0+c3I7CQkJCQkJXAotCXByX3JlZ1sxOF0gPSByZWdzLT5wYzsJCQkJCQlcCi0JLyogcHJfcmVnWzE5XSA9IChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yOyAqLwkJXAotCXsJCQkJCQkJCVwKLQkgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncykgLSAxOwlcCi0JICBwcl9yZWdbNV0gPSBzdy0+ZDY7CQkJCQkJXAotCSAgcHJfcmVnWzZdID0gc3ctPmQ3OwkJCQkJCVwKLQkgIHByX3JlZ1sxMF0gPSBzdy0+YTM7CQkJCQkJXAotCSAgcHJfcmVnWzExXSA9IHN3LT5hNDsJCQkJCQlcCi0JICBwcl9yZWdbMTJdID0gc3ctPmE1OwkJCQkJCVwKLQkgIHByX3JlZ1sxM10gPSBzdy0+YTY7CQkJCQkJXAotCX0KLQotLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAotICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KLQotI2RlZmluZSBFTEZfSFdDQVAJKDApCi0KLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQotCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCmluZGV4IDk3YmNhZWYuLmJlNGU0YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCkBAIC0xLDUgKzEsMzggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImZiX25vLmgiCisjaWZuZGVmIF9BU01fRkJfSF8KKyNkZWZpbmUgX0FTTV9GQl9IXworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZkZWYgQ09ORklHX1NVTjMKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQoreworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOworfQogI2Vsc2UKLSNpbmNsdWRlICJmYl9tbS5oIgotI2VuZGlmCitzdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZikKK3sKKwlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PQ0FDSEUwMzA7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICY9IF9DQUNIRU1BU0swNDA7CisJCS8qIFVzZSBuby1jYWNoZSBtb2RlLCBzZXJpYWxpemVkICovCisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PQ0FDSEVfUzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1NVTjMgKi8KKyNlbHNlCisjZGVmaW5lIGZiX3BncHJvdGVjdCguLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworc3RhdGljIGlubGluZSBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0ZCX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZmJfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBiOTdhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0ZCX0hfCi0jZGVmaW5lIF9BU01fRkJfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaWZkZWYgQ09ORklHX1NVTjMKLXN0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQotewotCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQotewotCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRTAzMDsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gX0NBQ0hFTUFTSzA0MDsKLQkJLyogVXNlIG5vLWNhY2hlIG1vZGUsIHNlcmlhbGl6ZWQgKi8KLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRV9TOwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfU1VOMyAqLwotCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIF9BU01fRkJfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGYzODAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fRkJfSF8KLSNkZWZpbmUgX0FTTV9GQl9IXwotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLSNkZWZpbmUgZmJfcGdwcm90ZWN0KC4uLikgZG8ge30gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogX0FTTV9GQl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IGUxOWJjNWUuLmZmYjZiOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTEsNSArMSwyMSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiZnB1X25vLmgiCisjaWZuZGVmIF9fTTY4S19GUFVfSAorI2RlZmluZSBfX002OEtfRlBVX0gKKworCisvKgorICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoMjE2KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoOTYpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDI4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoMTIpCiAjZWxzZQotI2luY2x1ZGUgImZwdV9tbS5oIgorI2RlZmluZSBGUFNUQVRFU0laRSAoMCkKICNlbmRpZgorCisjZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjZiOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBfX002OEtfRlBVX0gKLSNkZWZpbmUgX19NNjhLX0ZQVV9ICi0KLQotLyoKLSAqIE1BWCBmbG9hdGluZyBwb2ludCB1bml0IHN0YXRlIHNpemUgKEZTQVZFL0ZSRVNUT1JFKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNikKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDk2KQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4S0ZQVV9FTVUpCi0jZGVmaW5lIEZQU1RBVEVTSVpFICgyOCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDEyKQotI2Vsc2UKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fTTY4S19GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTZiMmU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHVfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgX19NNjhLTk9NTVVfRlBVX0gKLSNkZWZpbmUgX19NNjhLTk9NTVVfRlBVX0gKLQotCi0vKgotICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNi9zaXplb2YodW5zaWduZWQgY2hhcikpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApCi0jZGVmaW5lIEZQU1RBVEVTSVpFICg5Ni9zaXplb2YodW5zaWduZWQgY2hhcikpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDI4L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDEyL3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbHNlCi0vKiBBc3N1bWUgbm8gRlAgdW5pdCBwcmVzZW50IHRoZW4uLi4gKi8KLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIpIC8qIGR1bW15IHNpemUgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZTE5NTI2MC4uZWFjZWYwOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMSw1ICsxLDYgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImh3X2lycV9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJod19pcnFfbW0uaCIKKyNpZm5kZWYgX19BU01fTTY4S19IV19JUlFfSAorI2RlZmluZSBfX0FTTV9NNjhLX0hXX0lSUV9ICisKKy8qIER1bW15IGluY2x1ZGUuICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWNlZjA5Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnFfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NNjhLX0hXX0lSUV9ICi0jZGVmaW5lIF9fQVNNX002OEtfSFdfSVJRX0gKLQotLyogRHVtbXkgaW5jbHVkZS4gKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZWM5ZTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX0hXX0lSUV9IX18KLSNkZWZpbmUgX19NNjhLTk9NTVVfSFdfSVJRX0hfXwotCi0jZW5kaWYgLyogX19NNjhLTk9NTVVfSFdfSVJRX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oCmluZGV4IGI5OTZhM2MuLjM5NTg3MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pZGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaWRlLmgKQEAgLTMwLDEwMSArMzAsMjggQEAKICNkZWZpbmUgX002OEtfSURFX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi0jaWZkZWYgQ09ORklHX0FUQVJJCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2F0YXJpX3N0ZG1hLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUMKLSNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgotI2VuZGlmCi0KIC8qCiAgKiBHZXQgcmlkIG9mIGRlZnMgZnJvbSBpby5oIC0gaWRlIGhhcyBpdHMgcHJpdmF0ZSBhbmQgY29uZmxpY3RpbmcgdmVyc2lvbnMKICAqIFNpbmNlIHNvIGZhciBubyBzaW5nbGUgbTY4ayBwbGF0Zm9ybSB1c2VzIElTQS9QQ0kgSS9PIHNwYWNlIGZvciBJREUsIHdlCiAgKiBhbHdheXMgdXNlIHRoZSBgcmF3JyBNTUlPIHZlcnNpb25zCiAgKi8KLSN1bmRlZiBpbmIKLSN1bmRlZiBpbncKLSN1bmRlZiBpbnN3Ci0jdW5kZWYgaW5sCi0jdW5kZWYgaW5zbAotI3VuZGVmIG91dGIKLSN1bmRlZiBvdXR3Ci0jdW5kZWYgb3V0c3cKLSN1bmRlZiBvdXRsCi0jdW5kZWYgb3V0c2wKICN1bmRlZiByZWFkYgogI3VuZGVmIHJlYWR3Ci0jdW5kZWYgcmVhZGwKICN1bmRlZiB3cml0ZWIKICN1bmRlZiB3cml0ZXcKLSN1bmRlZiB3cml0ZWwKIAotI2RlZmluZSBpbmIJCQkJaW5fOAotI2RlZmluZSBpbncJCQkJaW5fYmUxNgotI2RlZmluZSBpbnN3KHBvcnQsIGFkZHIsIG4pCQlyYXdfaW5zdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgaW5sCQkJCWluX2JlMzIKLSNkZWZpbmUgaW5zbChwb3J0LCBhZGRyLCBuKQkJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIG91dGIodmFsLCBwb3J0KQkJCW91dF84KHBvcnQsIHZhbCkKLSNkZWZpbmUgb3V0dyh2YWwsIHBvcnQpCQkJb3V0X2JlMTYocG9ydCwgdmFsKQotI2RlZmluZSBvdXRzdyhwb3J0LCBhZGRyLCBuKQkJcmF3X291dHN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSBvdXRsKHZhbCwgcG9ydCkJCQlvdXRfYmUzMihwb3J0LCB2YWwpCi0jZGVmaW5lIG91dHNsKHBvcnQsIGFkZHIsIG4pCQlyYXdfb3V0c2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCiAjZGVmaW5lIHJlYWRiCQkJCWluXzgKICNkZWZpbmUgcmVhZHcJCQkJaW5fYmUxNgogI2RlZmluZSBfX2lkZV9tbV9pbnN3KHBvcnQsIGFkZHIsIG4pCXJhd19pbnN3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSByZWFkbAkJCQlpbl9iZTMyCiAjZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikJcmF3X2luc2woKHUzMiAqKXBvcnQsIGFkZHIsIG4pCiAjZGVmaW5lIHdyaXRlYih2YWwsIHBvcnQpCQlvdXRfOChwb3J0LCB2YWwpCiAjZGVmaW5lIHdyaXRldyh2YWwsIHBvcnQpCQlvdXRfYmUxNihwb3J0LCB2YWwpCiAjZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgd3JpdGVsKHZhbCwgcG9ydCkJCW91dF9iZTMyKHBvcnQsIHZhbCkKICNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikJcmF3X291dHNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQotI2lmIGRlZmluZWQoQ09ORklHX0FUQVJJKSB8fCBkZWZpbmVkKENPTkZJR19RNDApCi0jZGVmaW5lIGluc3dfc3dhcHcocG9ydCwgYWRkciwgbikJcmF3X2luc3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIG91dHN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzd19zd2FwdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfRkFMQ09OX0lERQotI2RlZmluZSBJREVfQVJDSF9MT0NLCi0KLWV4dGVybiBpbnQgZmFsY29uaWRlX2ludHJfbG9jazsKLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBpZGVfcmVsZWFzZV9sb2NrICh2b2lkKQotewotCWlmIChNQUNIX0lTX0FUQVJJKSB7Ci0JCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKLQkJCXByaW50aygiaWRlX3JlbGVhc2VfbG9jazogYnVnXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCQlmYWxjb25pZGVfaW50cl9sb2NrID0gMDsKLQkJc3RkbWFfcmVsZWFzZSgpOwotCX0KLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZAotaWRlX2dldF9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKLXsKLQlpZiAoTUFDSF9JU19BVEFSSSkgewotCQlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7Ci0JCQlpZiAoaW5faW50ZXJydXB0KCkgPiAwKQotCQkJCXBhbmljKCAiRmFsY29uIElERSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0IiApOwotCQkJc3RkbWFfbG9jayhoYW5kbGVyLCBkYXRhKTsKLQkJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAxOwotCQl9Ci0JfQotfQotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUgKi8KLQotI2RlZmluZSBJREVfQVJDSF9BQ0tfSU5UUgotI2RlZmluZSBpZGVfYWNrX2ludHIoaHdpZikJKChod2lmKS0+YWNrX2ludHIgPyAoaHdpZiktPmFja19pbnRyKGh3aWYpIDogMSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTTY4S19JREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKaW5kZXggMDQ1ZDlmZC4uYzg0M2M2MyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0xLDUgKzEsMjEgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImttYXBfdHlwZXNfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAia21hcF90eXBlc19tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICisjZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICisKK2VudW0ga21fdHlwZSB7CisJS01fQk9VTkNFX1JFQUQsCisJS01fU0tCX1NVTlJQQ19EQVRBLAorCUtNX1NLQl9EQVRBX1NPRlRJUlEsCisJS01fVVNFUjAsCisJS01fVVNFUjEsCisJS01fQklPX1NSQ19JUlEsCisJS01fQklPX0RTVF9JUlEsCisJS01fUFRFMCwKKwlLTV9QVEUxLAorCUtNX0lSUTAsCisJS01fSVJRMSwKKwlLTV9TT0ZUSVJRMCwKKwlLTV9TT0ZUSVJRMSwKKwlLTV9UWVBFX05SCit9OworCisjZW5kaWYJLyogX19BU01fTTY4S19LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQzYzYzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0jZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0KLWVudW0ga21fdHlwZSB7Ci0JS01fQk9VTkNFX1JFQUQsCi0JS01fU0tCX1NVTlJQQ19EQVRBLAotCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi0JS01fVVNFUjAsCi0JS01fVVNFUjEsCi0JS01fQklPX1NSQ19JUlEsCi0JS01fQklPX0RTVF9JUlEsCi0JS01fUFRFMCwKLQlLTV9QVEUxLAotCUtNX0lSUTAsCi0JS01fSVJRMSwKLQlLTV9TT0ZUSVJRMCwKLQlLTV9TT0ZUSVJRMSwKLQlLTV9UWVBFX05SCi19OwotCi0jZW5kaWYJLyogX19BU01fTTY4S19LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmI2NzA3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0jZGVmaW5lIF9fQVNNX002OEtfS01BUF9UWVBFU19ICi0KLWVudW0ga21fdHlwZSB7Ci0JS01fQk9VTkNFX1JFQUQsCi0JS01fU0tCX1NVTlJQQ19EQVRBLAotCUtNX1NLQl9EQVRBX1NPRlRJUlEsCi0JS01fVVNFUjAsCi0JS01fVVNFUjEsCi0JS01fQklPX1NSQ19JUlEsCi0JS01fQklPX0RTVF9JUlEsCi0JS01fUFRFMCwKLQlLTV9QVEUxLAotCUtNX0lSUTAsCi0JS01fSVJRMSwKLQlLTV9TT0ZUSVJRMCwKLQlLTV9TT0ZUSVJRMSwKLQlLTV9UWVBFX05SCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMyeHNpbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKaW5kZXggMTgzNWZkMi4uY2U2MDM0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL201MzJ4c2ltLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgTUNGSU5UX1ZFQ0JBU0UgICAgICA2NAogI2RlZmluZSBNQ0ZJTlRfVUFSVDAgICAgICAgIDI2ICAgICAgICAgIC8qIEludGVycnVwdCBudW1iZXIgZm9yIFVBUlQwICovCiAjZGVmaW5lIE1DRklOVF9VQVJUMSAgICAgICAgMjcgICAgICAgICAgLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDEgKi8KKyNkZWZpbmUgTUNGSU5UX1VBUlQyICAgICAgICAyOCAgICAgICAgICAvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBVQVJUMiAqLwogCiAjZGVmaW5lIE1DRl9XVE1fV0NSCU1DRl9SRUcxNigweEZDMDk4MDAwKQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCmluZGV4IGZiOTBkY2YuLjlmNzBhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Yy5oCkBAIC0xLDUgKzEsMjYgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgIm1jMTQ2ODE4cnRjX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgIm1jMTQ2ODE4cnRjX21tLmgiCi0jZW5kaWYKKy8qCisgKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgorICovCisjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAorI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKKworCisjaWZkZWYgQ09ORklHX0FUQVJJCisvKiBSVEMgaW4gQXRhcmkgbWFjaGluZXMgKi8KKworI2luY2x1ZGUgPGFzbS9hdGFyaWh3Lmg+CisKKyNkZWZpbmUgUlRDX1BPUlQoeCkJKFRUX1JUQ19CQVMgKyAyKih4KSkKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMAorCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyBcCithdGFyaV9vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAorYXRhcmlfaW5iX3AoUlRDX1BPUlQoMSkpOyBcCit9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgXAorYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2F0YXJpX291dGJfcCgodmFsKSxSVENfUE9SVCgxKSk7IFwKK30pCisjZW5kaWYgLyogQ09ORklHX0FUQVJJICovCisKKyNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNzBhMDEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KLSAqLwotI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKLSNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICi0KLQotI2lmZGVmIENPTkZJR19BVEFSSQotLyogUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCi0KLSNpbmNsdWRlIDxhc20vYXRhcmlody5oPgotCi0jZGVmaW5lIFJUQ19QT1JUKHgpCShUVF9SVENfQkFTICsgMiooeCkpCi0jZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKLQotI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAotYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKLWF0YXJpX2luYl9wKFJUQ19QT1JUKDEpKTsgXAotfSkKLSNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKLWF0YXJpX291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCi1hdGFyaV9vdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCi19KQotI2VuZGlmIC8qIENPTkZJR19BVEFSSSAqLwotCi0jZW5kaWYgLyogX0FTTV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDdhMDQ4MS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotLyoKLSAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCi0gKi8KLSNpZm5kZWYgX002OEtOT01NVV9NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSAotCi0vKiBlbXB0eSBpbmNsdWRlIGZpbGUgdG8gc2F0aXNmeSB0aGUgaW5jbHVkZSBpbiBnZW5ydGMuYy9pZGUtZ2VvbWV0cnkuYyAqLwotCi0jZW5kaWYgLyogX002OEtOT01NVV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmcGNpLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmcGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNTA3ZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnBjaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICoJbWNmcGNpLmggLS0gUENJIGJyaWRnZSBvbiBDb2xkRmlyZSBldmFsIGJvYXJkcy4KLSAqCi0gKgkoQykgQ29weXJpZ2h0IDIwMDAsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCi0gKgkoQykgQ29weXJpZ2h0IDIwMDAsIExpbmVvIEluYy4gKHd3dy5saW5lby5jb20pCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmCW1jZnBjaV9oCi0jZGVmaW5lCW1jZnBjaV9oCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZkZWYgQ09ORklHX1BDSQotCi0vKgotICoJQWRkcmVzcyByZWdpb25zIGluIHRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBhcmUgbm90IG1hcHBlZCBpbnRvIHRoZQotICoJbm9ybWFsIG1lbW9yeSBzcGFjZSBvZiB0aGUgQ29sZEZpcmUuIFRoZXkgbXVzdCBiZSBhY2Nlc3NlZCB2aWEKLSAqCWhhbmRsZXIgcm91dGluZXMuIFRoaXMgaXMgZWFzeSBmb3IgSS9PIHNwYWNlIChpbmIvb3V0Yi9ldGMpIGJ1dAotICoJbmVlZHMgc29tZSBjb2RlIGNoYW5nZXMgdG8gc3VwcG9ydCBvcmRpbmFyeSBtZW1vcnkuIEludGVycnVwdHMKLSAqCWFsc28gbmVlZCB0byBiZSB2ZWN0b3JlZCB0aHJvdWdoIHRoZSBQQ0kgaGFuZGxlciBmaXJzdCwgdGhlbiBpdAotICoJd2lsbCBjYWxsIHRoZSBhY3R1YWwgZHJpdmVyIHN1Yi1oYW5kbGVycy4KLSAqLwotCi0vKgotICoJVW4tZGVmaW5lIGFsbCB0aGUgc3RhbmRhcmQgSS9PIGFjY2VzcyByb3V0aW5lcy4KLSAqLwotI3VuZGVmCWluYgotI3VuZGVmCWludwotI3VuZGVmCWlubAotI3VuZGVmCWluYl9wCi0jdW5kZWYJaW53X3AKLSN1bmRlZglpbnNiCi0jdW5kZWYJaW5zdwotI3VuZGVmCWluc2wKLSN1bmRlZglvdXRiCi0jdW5kZWYJb3V0dwotI3VuZGVmCW91dGwKLSN1bmRlZglvdXRiX3AKLSN1bmRlZglvdXR3X3AKLSN1bmRlZglvdXRzYgotI3VuZGVmCW91dHN3Ci0jdW5kZWYJb3V0c2wKLQotI3VuZGVmCXJlcXVlc3RfaXJxCi0jdW5kZWYJZnJlZV9pcnEKLQotI3VuZGVmCWJ1c190b192aXJ0Ci0jdW5kZWYJdmlydF90b19idXMKLQotCi0vKgotICoJUmUtZGlyZWN0IGFsbCBJL08gbWVtb3J5IGFjY2Vzc2VzIGZ1bmN0aW9ucyB0byBQQ0kgc3BlY2lmaWMgb25lcy4KLSAqLwotI2RlZmluZQlpbmIJcGNpX2luYgotI2RlZmluZQlpbncJcGNpX2ludwotI2RlZmluZQlpbmwJcGNpX2lubAotI2RlZmluZQlpbmJfcAlwY2lfaW5iCi0jZGVmaW5lCWlud19wCXBjaV9pbncKLSNkZWZpbmUJaW5zYglwY2lfaW5zYgotI2RlZmluZQlpbnN3CXBjaV9pbnN3Ci0jZGVmaW5lCWluc2wJcGNpX2luc2wKLQotI2RlZmluZQlvdXRiCXBjaV9vdXRiCi0jZGVmaW5lCW91dHcJcGNpX291dHcKLSNkZWZpbmUJb3V0bAlwY2lfb3V0bAotI2RlZmluZQlvdXRiX3AJcGNpX291dGIKLSNkZWZpbmUJb3V0d19wCXBjaV9vdXR3Ci0jZGVmaW5lCW91dHNiCXBjaV9vdXRzYgotI2RlZmluZQlvdXRzdwlwY2lfb3V0c3cKLSNkZWZpbmUJb3V0c2wJcGNpX291dHNsCi0KLSNkZWZpbmUJcmVxdWVzdF9pcnEJcGNpX3JlcXVlc3RfaXJxCi0jZGVmaW5lCWZyZWVfaXJxCXBjaV9mcmVlX2lycQotCi0jZGVmaW5lCXZpcnRfdG9fYnVzCXBjaV92aXJ0X3RvX2J1cwotI2RlZmluZQlidXNfdG9fdmlydAlwY2lfYnVzX3RvX3ZpcnQKLQotI2RlZmluZQlDT05GSUdfQ09NRU1QQ0kJMQotCi0KLS8qCi0gKglQcm90b3R5cGVzIG9mIHRoZSByZWFsIFBDSSBmdW5jdGlvbnMgKGRlZmluZWQgaW4gYmlvczMyLmMpLgotICovCi11bnNpZ25lZCBjaGFyCXBjaV9pbmIodW5zaWduZWQgaW50IGFkZHIpOwotdW5zaWduZWQgc2hvcnQJcGNpX2ludyh1bnNpZ25lZCBpbnQgYWRkcik7Ci11bnNpZ25lZCBpbnQJcGNpX2lubCh1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfaW5zYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotdm9pZAkJcGNpX2luc3codm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9pbnNsKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci0KLXZvaWQJCXBjaV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKLXZvaWQJCXBjaV9vdXRsKHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKTsKLXZvaWQJCXBjaV9vdXRzYih2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotdm9pZAkJcGNpX291dHN3KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci12b2lkCQlwY2lfb3V0c2wodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLQotaW50CQlwY2lfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwKLQkJCXZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCi0JCQl1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJY29uc3QgY2hhciAqZGV2aWNlLAotCQkJdm9pZCAqZGV2X2lkKTsKLXZvaWQJCXBjaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotCi12b2lkCQkqcGNpX2JtYWxsb2MoaW50IHNpemUpOwotdm9pZAkJcGNpX2JtZnJlZSh2b2lkICpibXAsIGludCBsZW4pOwotdm9pZAkJcGNpX2NvcHl0b3NobWVtKHVuc2lnbmVkIGxvbmcgYm1wLCB2b2lkICpzcmMsIGludCBzaXplKTsKLXZvaWQJCXBjaV9jb3B5ZnJvbXNobWVtKHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBibXAsIGludCBzaXplKTsKLXVuc2lnbmVkIGxvbmcJcGNpX3ZpcnRfdG9fYnVzKHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MpOwotdm9pZAkJKnBjaV9idXNfdG9fdmlydCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwotdm9pZAkJcGNpX2JtY3B5dG8odm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOwotdm9pZAkJcGNpX2JtY3B5ZnJvbSh2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbik7Ci0KLSNlbmRpZiAvKiBDT05GSUdfUENJICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNlbmRpZgkvKiBtY2ZwY2lfaCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGE4MWQzOTQuLjhhMTFhNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11LmgKQEAgLTEsNSArMSwxMyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAibW11X25vLmgiCisjaWZuZGVmIF9fTU1VX0gKKyNkZWZpbmUgX19NTVVfSAorCisjaWZkZWYgQ09ORklHX01NVQorLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKICNlbHNlCi0jaW5jbHVkZSAibW11X21tLmgiCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZwkJZW5kX2JyazsKK30gbW1fY29udGV4dF90OworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBiNDQwOTI4Li43ZDQzNDFlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMSw1ICsxLDE3NSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAibW11X2NvbnRleHRfbm8uaCIKKyNpZm5kZWYgX19NNjhLX01NVV9DT05URVhUX0gKKyNkZWZpbmUgX19NNjhLX01NVV9DT05URVhUX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIENPTkZJR19TVU4zCisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobW0tPnBnZCk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDIzMChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIGNycFsyXSA9IHsKKwkJMHg4MDAwMDAwMCB8IF9QQUdFX1RBQkxFLCBtbS0+Y29udGV4dAorCX07CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODAzMCIpOworCisJLyogZmx1c2ggTUM2ODAzMC9NQzY4MDIwIGNhY2hlcyAodGhleSBhcmUgdmlydHVhbGx5IGFkZHJlc3NlZCkgKi8KKwlhc20gdm9sYXRpbGUgKAorCQkibW92ZWMgJSVjYWNyLCUwOyIKKwkJIm9ydyAlMSwlMDsgIgorCQkibW92ZWMgJTAsJSVjYWNyIgorCQk6ICI9ZCIgKHRtcCkgOiAiZGkiIChGTFVTSF9JX0FORF9EKSk7CisKKwkvKiBTd2l0Y2ggdGhlIHJvb3QgcG9pbnRlci4gRm9yIGEgMDMwLW9ubHkga2VybmVsLAorCSAqIGF2b2lkIGZsdXNoaW5nIHRoZSB3aG9sZSBBVEMsIHdlIG9ubHkgbmVlZCB0bworCSAqIGZsdXNoIHRoZSB1c2VyIGVudHJpZXMuIFRoZSA2ODg1MSBkb2VzIHRoaXMgYnkKKwkgKiBpdHNlbGYuIEF2b2lkIGEgcnVudGltZSBjaGVjayBoZXJlLgorCSAqLworCWFzbSB2b2xhdGlsZSAoCisjaWZkZWYgQ1BVX002ODAzMF9PTkxZCisJCSJwbW92ZWZkICUwLCUlY3JwOyAiCisJCSJwZmx1c2ggIzAsIzQiCiAjZWxzZQotI2luY2x1ZGUgIm1tdV9jb250ZXh0X21tLmgiCisJCSJwbW92ZSAlMCwlJWNycCIKICNlbmRpZgorCQk6IDogIm0iIChjcnBbMF0pKTsKKworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzA0NjAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDAiKTsKKworCS8qIGZsdXNoIGFkZHJlc3MgdHJhbnNsYXRpb24gY2FjaGUgKHVzZXIgZW50cmllcykgKi8KKwlhc20gdm9sYXRpbGUgKCJwZmx1c2hhbiIpOworCisJLyogc3dpdGNoIHRoZSByb290IHBvaW50ZXIgKi8KKwlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJXVycCIgOiA6ICJyIiAobW0tPmNvbnRleHQpKTsKKworCWlmIChDUFVfSVNfMDYwKSB7CisJCXVuc2lnbmVkIGxvbmcgdG1wOworCisJCS8qIGNsZWFyIHVzZXIgZW50cmllcyBpbiB0aGUgYnJhbmNoIGNhY2hlICovCisJCWFzbSB2b2xhdGlsZSAoCisJCQkibW92ZWMgJSVjYWNyLCUwOyAiCisJCSAgICAgICAgIm9ybCAlMSwlMDsgIgorCQkgICAgICAgICJtb3ZlYyAlMCwlJWNhY3IiCisJCQk6ICI9ZCIgKHRtcCk6ICJkaSIgKDB4MDAyMDAwMDApKTsKKwl9CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAocHJldiAhPSBuZXh0KSB7CisJCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJCXN3aXRjaF9tbV8wMjMwKG5leHQpOworCQllbHNlCisJCQlzd2l0Y2hfbW1fMDQ2MChuZXh0KTsKKwl9Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCisJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwluZXh0X21tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG5leHRfbW0tPnBnZCk7CisKKwlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCXN3aXRjaF9tbV8wMjMwKG5leHRfbW0pOworCWVsc2UKKwkJc3dpdGNoX21tXzA0NjAobmV4dF9tbSk7Cit9CisKKyNlbHNlICAvKiBDT05GSUdfU1VOMyAqLworI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ZyZWVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBjbGVhcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgY29udGV4dCk7CisKKy8qIHNldCB0aGUgY29udGV4dCBmb3IgYSBuZXcgdGFzayB0byB1bm1hcHBlZCAqLworc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQgPSBTVU4zX0lOVkFMSURfQ09OVEVYVDsKKwlyZXR1cm4gMDsKK30KKworLyogZmluZCB0aGUgY29udGV4dCBnaXZlbiB0byB0aGlzIHByb2Nlc3MsIGFuZCBpZiBpdCBoYXNuJ3QgYWxyZWFkeQorICAgZ290IG9uZSwgZ28gZ2V0IG9uZSBmb3IgaXQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmKG1tLT5jb250ZXh0ID09IFNVTjNfSU5WQUxJRF9DT05URVhUKQorCQltbS0+Y29udGV4dCA9IGdldF9mcmVlX2NvbnRleHQobW0pOworfQorCisvKiBmbHVzaCBjb250ZXh0IGlmIGFsbG9jYXRlZC4uLiAqLworc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZihtbS0+Y29udGV4dCAhPSBTVU4zX0lOVkFMSURfQ09OVEVYVCkKKwkJY2xlYXJfY29udGV4dChtbS0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWdldF9tbXVfY29udGV4dChtbSk7CisJc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJYWN0aXZhdGVfY29udGV4dCh0c2stPm1tKTsKK30KKworI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKKwkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQoreworCWFjdGl2YXRlX2NvbnRleHQobmV4dF9tbSk7Cit9CisKKyNlbmRpZgorI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KKworc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCisjZW5kaWYgLyogX19NNjhLX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5NGRhY2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotI2lmbmRlZiBfX002OEtfTU1VX0NPTlRFWFRfSAotI2RlZmluZSBfX002OEtfTU1VX0NPTlRFWFRfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLX0KLQotI2lmbmRlZiBDT05GSUdfU1VOMwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotCi1zdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAotCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCW1tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG1tLT5wZ2QpOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzAyMzAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW5zaWduZWQgbG9uZyBjcnBbMl0gPSB7Ci0JCTB4ODAwMDAwMDAgfCBfUEFHRV9UQUJMRSwgbW0tPmNvbnRleHQKLQl9OwotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwMzAiKTsKLQotCS8qIGZsdXNoIE1DNjgwMzAvTUM2ODAyMCBjYWNoZXMgKHRoZXkgYXJlIHZpcnR1YWxseSBhZGRyZXNzZWQpICovCi0JYXNtIHZvbGF0aWxlICgKLQkJIm1vdmVjICUlY2FjciwlMDsiCi0JCSJvcncgJTEsJTA7ICIKLQkJIm1vdmVjICUwLCUlY2FjciIKLQkJOiAiPWQiICh0bXApIDogImRpIiAoRkxVU0hfSV9BTkRfRCkpOwotCi0JLyogU3dpdGNoIHRoZSByb290IHBvaW50ZXIuIEZvciBhIDAzMC1vbmx5IGtlcm5lbCwKLQkgKiBhdm9pZCBmbHVzaGluZyB0aGUgd2hvbGUgQVRDLCB3ZSBvbmx5IG5lZWQgdG8KLQkgKiBmbHVzaCB0aGUgdXNlciBlbnRyaWVzLiBUaGUgNjg4NTEgZG9lcyB0aGlzIGJ5Ci0JICogaXRzZWxmLiBBdm9pZCBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4KLQkgKi8KLQlhc20gdm9sYXRpbGUgKAotI2lmZGVmIENQVV9NNjgwMzBfT05MWQotCQkicG1vdmVmZCAlMCwlJWNycDsgIgotCQkicGZsdXNoICMwLCM0IgotI2Vsc2UKLQkJInBtb3ZlICUwLCUlY3JwIgotI2VuZGlmCi0JCTogOiAibSIgKGNycFswXSkpOwotCi0JYXNtIHZvbGF0aWxlICgiLmNoaXAgNjhrIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW1fMDQ2MChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlhc20gdm9sYXRpbGUgKCIuY2hpcCA2ODA0MCIpOwotCi0JLyogZmx1c2ggYWRkcmVzcyB0cmFuc2xhdGlvbiBjYWNoZSAodXNlciBlbnRyaWVzKSAqLwotCWFzbSB2b2xhdGlsZSAoInBmbHVzaGFuIik7Ci0KLQkvKiBzd2l0Y2ggdGhlIHJvb3QgcG9pbnRlciAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdmVjICUwLCUldXJwIiA6IDogInIiIChtbS0+Y29udGV4dCkpOwotCi0JaWYgKENQVV9JU18wNjApIHsKLQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkJLyogY2xlYXIgdXNlciBlbnRyaWVzIGluIHRoZSBicmFuY2ggY2FjaGUgKi8KLQkJYXNtIHZvbGF0aWxlICgKLQkJCSJtb3ZlYyAlJWNhY3IsJTA7ICIKLQkJICAgICAgICAib3JsICUxLCUwOyAiCi0JCSAgICAgICAgIm1vdmVjICUwLCUlY2FjciIKLQkJCTogIj1kIiAodG1wKTogImRpIiAoMHgwMDIwMDAwMCkpOwotCX0KLQotCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlmIChwcmV2ICE9IG5leHQpIHsKLQkJaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQkJc3dpdGNoX21tXzAyMzAobmV4dCk7Ci0JCWVsc2UKLQkJCXN3aXRjaF9tbV8wNDYwKG5leHQpOwotCX0KLX0KLQotI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKLQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQotewotCW5leHRfbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobmV4dF9tbS0+cGdkKTsKLQotCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJc3dpdGNoX21tXzAyMzAobmV4dF9tbSk7Ci0JZWxzZQotCQlzd2l0Y2hfbW1fMDQ2MChuZXh0X21tKTsKLX0KLQotI2Vsc2UgIC8qIENPTkZJR19TVU4zICovCi0jaW5jbHVkZSA8YXNtL3N1bjNtbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfZnJlZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGNsZWFyX2NvbnRleHQodW5zaWduZWQgbG9uZyBjb250ZXh0KTsKLQotLyogc2V0IHRoZSBjb250ZXh0IGZvciBhIG5ldyB0YXNrIHRvIHVubWFwcGVkICovCi1zdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQltbS0+Y29udGV4dCA9IFNVTjNfSU5WQUxJRF9DT05URVhUOwotCXJldHVybiAwOwotfQotCi0vKiBmaW5kIHRoZSBjb250ZXh0IGdpdmVuIHRvIHRoaXMgcHJvY2VzcywgYW5kIGlmIGl0IGhhc24ndCBhbHJlYWR5Ci0gICBnb3Qgb25lLCBnbyBnZXQgb25lIGZvciBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbW11X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JaWYobW0tPmNvbnRleHQgPT0gU1VOM19JTlZBTElEX0NPTlRFWFQpCi0JCW1tLT5jb250ZXh0ID0gZ2V0X2ZyZWVfY29udGV4dChtbSk7Ci19Ci0KLS8qIGZsdXNoIGNvbnRleHQgaWYgYWxsb2NhdGVkLi4uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWlmKG1tLT5jb250ZXh0ICE9IFNVTjNfSU5WQUxJRF9DT05URVhUKQotCQljbGVhcl9jb250ZXh0KG1tLT5jb250ZXh0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JZ2V0X21tdV9jb250ZXh0KG1tKTsKLQlzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlhY3RpdmF0ZV9jb250ZXh0KHRzay0+bW0pOwotfQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAotCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCi17Ci0JYWN0aXZhdGVfY29udGV4dChuZXh0X21tKTsKLX0KLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2VlNDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX01NVV9DT05URVhUX0gKLSNkZWZpbmUgX19NNjhLTk9NTVVfTU1VX0NPTlRFWFRfSAotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1pbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQkvLyBtbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhtbS0+cGdkKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLSNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQkJZG8geyB9IHdoaWxlKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCi0JCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKLXsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjZDM2ZDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9fTU1VX0gKLSNkZWZpbmUgX19NTVVfSAotCi0vKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkYTFlNi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9fTTY4S05PTU1VX01NVV9ICi0jZGVmaW5lIF9fTTY4S05PTU1VX01NVV9ICi0KLS8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Ci19IG1tX2NvbnRleHRfdDsKLQotI2VuZGlmIC8qIF9fTTY4S05PTU1VX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggNzliNTlkMS4uNWYyMWUxMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMSw1ICsxLDQ4IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJtb2R1bGVfbm8uaCIKKyNpZm5kZWYgX0FTTV9NNjhLX01PRFVMRV9ICisjZGVmaW5lIF9BU01fTTY4S19NT0RVTEVfSAorCisjaWZkZWYgQ09ORklHX01NVQorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworCXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmZpeHVwX3N0YXJ0LCAqZml4dXBfZW5kOworfTsKKworI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHsJCQkJXAorCS5maXh1cF9zdGFydAkJPSBfX3N0YXJ0X2ZpeHVwLAlcCisJLmZpeHVwX2VuZAkJPSBfX3N0b3BfZml4dXAsCQlcCit9CisKKworZW51bSBtNjhrX2ZpeHVwX3R5cGUgeworCW02OGtfZml4dXBfbWVtb2Zmc2V0LAorCW02OGtfZml4dXBfdm5vZGVfc2hpZnQsCit9OworCitzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIHsKKwllbnVtIG02OGtfZml4dXBfdHlwZSB0eXBlOworCXZvaWQgKmFkZHI7Cit9OworCisjZGVmaW5lIG02OGtfZml4dXAodHlwZSwgYWRkcikJCQlcCisJIgkuc2VjdGlvbiBcIi5tNjhrX2ZpeHVwXCIsXCJhd1wiXG4iCVwKKwkiCS5sb25nICIgI3R5cGUgIiwiICNhZGRyICJcbiIJXAorCSIJLnByZXZpb3VzXG4iCisKK2V4dGVybiBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIF9fc3RhcnRfZml4dXBbXSwgX19zdG9wX2ZpeHVwW107CisKK3N0cnVjdCBtb2R1bGU7CitleHRlcm4gdm9pZCBtb2R1bGVfZml4dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICpzdGFydCwKKwkJCSBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICplbmQpOworCiAjZWxzZQotI2luY2x1ZGUgIm1vZHVsZV9tbS5oIgotI2VuZGlmCisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7Cit9OworCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisjZW5kaWYgLyogX0FTTV9NNjhLX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MmQyMGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtfTU9EVUxFX0gKLSNkZWZpbmUgX0FTTV9NNjhLX01PRFVMRV9ICi0KLXN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7Ci0Jc3RydWN0IG02OGtfZml4dXBfaW5mbyAqZml4dXBfc3RhcnQsICpmaXh1cF9lbmQ7Ci19OwotCi0jZGVmaW5lIE1PRFVMRV9BUkNIX0lOSVQgewkJCQlcCi0JLmZpeHVwX3N0YXJ0CQk9IF9fc3RhcnRfZml4dXAsCVwKLQkuZml4dXBfZW5kCQk9IF9fc3RvcF9maXh1cCwJCVwKLX0KLQotI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLQotCi1lbnVtIG02OGtfZml4dXBfdHlwZSB7Ci0JbTY4a19maXh1cF9tZW1vZmZzZXQsCi0JbTY4a19maXh1cF92bm9kZV9zaGlmdCwKLX07Ci0KLXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gewotCWVudW0gbTY4a19maXh1cF90eXBlIHR5cGU7Ci0Jdm9pZCAqYWRkcjsKLX07Ci0KLSNkZWZpbmUgbTY4a19maXh1cCh0eXBlLCBhZGRyKQkJCVwKLQkiCS5zZWN0aW9uIFwiLm02OGtfZml4dXBcIixcImF3XCJcbiIJXAotCSIJLmxvbmcgIiAjdHlwZSAiLCIgI2FkZHIgIlxuIglcCi0JIgkucHJldmlvdXNcbiIKLQotZXh0ZXJuIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gX19zdGFydF9maXh1cFtdLCBfX3N0b3BfZml4dXBbXTsKLQotc3RydWN0IG1vZHVsZTsKLWV4dGVybiB2b2lkIG1vZHVsZV9maXh1cChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKnN0YXJ0LAotCQkJIHN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmVuZCk7Ci0KLSNlbmRpZiAvKiBfQVNNX002OEtfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGVfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0NWFiNS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jaWZuZGVmIEFTTV9NNjhLTk9NTVVfTU9EVUxFX0gKLSNkZWZpbmUgQVNNX002OEtOT01NVV9NT0RVTEVfSAotCi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgewotfTsKLQotI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCi0jZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCi0jZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLQotI2VuZGlmIC8qIEFTTV9NNjhLTk9NTVVfTU9EVUxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggNjY0NTVjOC4uMTc4MDE1MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSwxMSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGFnZV9vZmZzZXRfbm8uaCIKKy8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAogI2Vsc2UKLSNpbmNsdWRlICJwYWdlX29mZnNldF9tbS5oIgorI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MEUwMDAwMDAKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUJUEFHRV9PRkZTRVRfUkFXCQlDT05GSUdfUkFNQkFTRQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2JkYjdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLS8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCi0jaWZuZGVmIENPTkZJR19TVU4zCi0jZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMAotI2Vsc2UKLSNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDBFMDAwMDAwCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlNzNlMC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotCi0KLS8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCi0jZGVmaW5lCVBBR0VfT0ZGU0VUX1JBVwkJQ09ORklHX1JBTUJBU0UKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IGRiZWE5NTMuLjRhZDBhZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTEsNSArMSwxMiBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGNpX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInBjaV9tbS5oIgotI2VuZGlmCisjaWZuZGVmIF9BU01fTTY4S19QQ0lfSAorI2RlZmluZSBfQVNNX002OEtfUENJX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CisKKy8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKKyAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKKyAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCisgKi8KKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKKworI2VuZGlmIC8qIF9BU01fTTY4S19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWQwYWVhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2lfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLX1BDSV9ICi0jZGVmaW5lIF9BU01fTTY4S19QQ0lfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KLQotLyogVGhlIFBDSSBhZGRyZXNzIHNwYWNlIGRvZXMgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeQotICogYWRkcmVzcyBzcGFjZS4gIFRoZSBuZXR3b3JraW5nIGFuZCBibG9jayBkZXZpY2UgbGF5ZXJzIHVzZQotICogdGhpcyBib29sZWFuIGZvciBib3VuY2UgYnVmZmVyIGRlY2lzaW9ucy4KLSAqLwotI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQotCi0jZW5kaWYgLyogX0FTTV9NNjhLX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYmJjMDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotI2lmbmRlZiBNNjhLTk9NTVVfUENJX0gKLSNkZWZpbmUJTTY4S05PTU1VX1BDSV9ICi0KLSNpbmNsdWRlIDxhc20vcGNpX21tLmg+Ci0KLSNpZmRlZiBDT05GSUdfQ09NRU1QQ0kKLS8qCi0gKglUaGVzZSBhcmUgcHJldHR5IG11Y2ggYXJiaXRhcnkgd2l0aCB0aGUgQ29NRU0gaW1wbGVtZW50YXRpb24uCi0gKglXZSBoYXZlIHRoZSB3aG9sZSBhZGRyZXNzIHNwYWNlIHRvIG91cnNlbHZlcy4KLSAqLwotI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJMHgxMDAKLSNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAwMDEwMDAwCi0KLSNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAotCi0vKgotICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIFBDSSBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4KLSAqIGJlIHN1cHBvcnRlZCBwcm9wZXJseS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGRldmljZSBjYW4KLSAqIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZywgdGhlbgotICogeW91IHdvdWxkIHBhc3MgMHgwMGZmZmZmZiBhcyB0aGUgbWFzayB0byB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiAxOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0NPTUVNUENJICovCi0KLSNlbmRpZiAvKiBNNjhLTk9NTVVfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDA1OWNiNzMuLmMyOTRhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMSw1ICsxLDE5IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJwZ2FsbG9jX25vLmgiCisjaWZuZGVmIE02OEtfUEdBTExPQ19ICisjZGVmaW5lIE02OEtfUEdBTExPQ19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2lmZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KKyNpZmRlZiBDT05GSUdfU1VOMworI2luY2x1ZGUgPGFzbS9zdW4zX3BnYWxsb2MuaD4KICNlbHNlCi0jaW5jbHVkZSAicGdhbGxvY19tbS5oIgorI2luY2x1ZGUgPGFzbS9tb3Rvcm9sYV9wZ2FsbG9jLmg+CiAjZW5kaWYKKworZXh0ZXJuIHZvaWQgbTY4a19zZXR1cF9ub2RlKGludCBub2RlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogTTY4S19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2IxYTU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0KLSNpZm5kZWYgTTY4S19QR0FMTE9DX0gKLSNkZWZpbmUgTTY4S19QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgotCi0KLSNpZmRlZiBDT05GSUdfU1VOMwotI2luY2x1ZGUgPGFzbS9zdW4zX3BnYWxsb2MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8YXNtL21vdG9yb2xhX3BnYWxsb2MuaD4KLSNlbmRpZgotCi1leHRlcm4gdm9pZCBtNjhrX3NldHVwX25vZGUoaW50IG5vZGUpOwotCi0jZW5kaWYgLyogTTY4S19QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjM1MmY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9QR0FMTE9DX0gKLSNkZWZpbmUgX002OEtOT01NVV9QR0FMTE9DX0gKLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpCWRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbm8uaAppbmRleCA0NjI1MTAxLi5iZjg2YjI5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX25vLmgKQEAgLTY3LDQgKzY3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIAorI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZiAvKiBfTTY4S05PTU1VX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3J0Yy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3J0Yy5oCmluZGV4IDVkM2UwMzguLmE0ZDA4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ydGMuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcnRjLmgKQEAgLTM2LDEzICszNiwxNiBAQAogCSAqIFJUQyBoYXMgUlRDX0RBWV9PRl9XRUVLLCB3ZSBpZ25vcmUgaXQsIGFzIGl0IGlzIG9ubHkgdXBkYXRlZAogCSAqIGJ5IHRoZSBSVEMgd2hlbiBpbml0aWFsbHkgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUuCiAJICovCi0JbWFjaF9od2NsaygwLCB0aW1lKTsKKwlpZiAobWFjaF9od2NsaykKKwkJbWFjaF9od2NsaygwLCB0aW1lKTsKIAlyZXR1cm4gUlRDXzI0SDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdGltZSkKIHsKLQlyZXR1cm4gbWFjaF9od2NsaygxLCB0aW1lKTsKKwlpZiAobWFjaF9od2NsaykKKwkJcmV0dXJuIG1hY2hfaHdjbGsoMSwgdGltZSk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9ydGNfc3Modm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggYjdlNTI4Ni4uZTI3YWQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEsNSArMSwyMyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2NhdHRlcmxpc3Rfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAic2NhdHRlcmxpc3RfbW0uaCIKKyNpZm5kZWYgX002OEtfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfTTY4S19TQ0FUVEVSTElTVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworI2lmZGVmIENPTkZJR19ERUJVR19TRworCXVuc2lnbmVkIGxvbmcgc2dfbWFnaWM7CiAjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbGluazsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGg7CisKKwlkbWFfYWRkcl90IGRtYV9hZGRyZXNzOwkvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCit9OworCisvKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCisKKyNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3RfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2E3YTBlLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9NNjhLX1NDQVRURVJMSVNUX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZyBzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcgcGFnZV9saW5rOwotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGxlbmd0aDsKLQotCV9fdTMyIGRtYV9hZGRyZXNzOwkvKiBBIHBsYWNlIHRvIGhhbmcgaG9zdC1zcGVjaWZpYyBhZGRyZXNzZXMgYXQuICovCi19OwotCi0vKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCi0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCi0KLSNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3Rfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmM0Nzg4Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1NDQVRURVJMSVNUX0gKLSNkZWZpbmUgX002OEtOT01NVV9TQ0FUVEVSTElTVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgewotI2lmZGVmIENPTkZJR19ERUJVR19TRwotCXVuc2lnbmVkIGxvbmcJc2dfbWFnaWM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nCXBhZ2VfbGluazsKLQl1bnNpZ25lZCBpbnQJb2Zmc2V0OwotCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Ci0JdW5zaWduZWQgaW50CWxlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICAgICAgKChzZyktPmRtYV9hZGRyZXNzKQotI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgICAgICAoKHNnKS0+bGVuZ3RoKQotCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECSgweGZmZmZmZmZmKQotCi0jZW5kaWYgLyogIShfTTY4S05PTU1VX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnQuaAppbmRleCA4MjU4M2JjLi5lZTk1OTIxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50LmgKQEAgLTEsNSArMSw2MyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2VnbWVudF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJzZWdtZW50X21tLmgiCisjaWZuZGVmIF9NNjhLX1NFR01FTlRfSAorI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKKworLyogZGVmaW5lIGNvbnN0YW50cyAqLworLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCisjZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCisjaWZuZGVmIF9fVVNFUl9EUworI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCiAjZW5kaWYKKyNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKKyNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKKyNpZm5kZWYgX19LRVJORUxfRFMKKyNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKKyNlbmRpZgorI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQorI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQorI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCisKKy8qCisgKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCisgKi8KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX01NVQorCW1tX3NlZ21lbnRfdCBfdjsKKwlfX2FzbV9fICgibW92ZWMgJS9kZmMsJTAiOiI9ciIgKF92LnNlZyk6KTsKKworCXJldHVybiBfdjsKKyNlbHNlCisJcmV0dXJuIFVTRVJfRFM7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCit7CisgICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLworICAgIHJldHVybiBLRVJORUxfRFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKK3sKKyNpZmRlZiBDT05GSUdfTU1VCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3ZlYyAlMCwlL3NmY1xuXHQiCisJCQkgICAgICAibW92ZWMgJTAsJS9kZmNcblx0IgorCQkJICAgICAgOiAvKiBubyBvdXRwdXRzICovIDogInIiICh2YWwuc2VnKSA6ICJtZW1vcnkiKTsKKyNlbmRpZgorfQorCisjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjBiMmQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NFR01FTlRfSAotI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKLQotLyogZGVmaW5lIGNvbnN0YW50cyAqLwotLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCi0jZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCi0jaWZuZGVmIF9fVVNFUl9EUwotI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCi0jZW5kaWYKLSNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKLSNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKLSNpZm5kZWYgX19LRVJORUxfRFMKLSNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKLSNlbmRpZgotI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQotI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzZWc7Ci19IG1tX3NlZ21lbnRfdDsKLQotI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCi0KLS8qCi0gKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCi17Ci0JbW1fc2VnbWVudF90IF92OwotCV9fYXNtX18gKCJtb3ZlYyAlL2RmYywlMCI6Ij1yIiAoX3Yuc2VnKTopOwotCi0JcmV0dXJuIF92OwotfQotCi1zdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZHModm9pZCkKLXsKLSAgICAvKiByZXR1cm4gdGhlIHN1cGVydmlzb3IgZGF0YSBzcGFjZSBjb2RlICovCi0gICAgcmV0dXJuIEtFUk5FTF9EUzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgdmFsKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWMgJTAsJS9zZmNcblx0IgotCQkJICAgICAgIm1vdmVjICUwLCUvZGZjXG5cdCIKLQkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLyA6ICJyIiAodmFsLnNlZykgOiAibWVtb3J5Iik7Ci19Ci0KLSNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMzE4ZWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSNpZm5kZWYgX002OEtfU0VHTUVOVF9ICi0jZGVmaW5lIF9NNjhLX1NFR01FTlRfSAotCi0vKiBkZWZpbmUgY29uc3RhbnRzICovCi0vKiBBZGRyZXNzIHNwYWNlcyAoRkMwLUZDMikgKi8KLSNkZWZpbmUgVVNFUl9EQVRBICAgICAoMSkKLSNpZm5kZWYgX19VU0VSX0RTCi0jZGVmaW5lIF9fVVNFUl9EUyAgICAgKFVTRVJfREFUQSkKLSNlbmRpZgotI2RlZmluZSBVU0VSX1BST0dSQU0gICgyKQotI2RlZmluZSBTVVBFUl9EQVRBICAgICg1KQotI2lmbmRlZiBfX0tFUk5FTF9EUwotI2RlZmluZSBfX0tFUk5FTF9EUyAgIChTVVBFUl9EQVRBKQotI2VuZGlmCi0jZGVmaW5lIFNVUEVSX1BST0dSQU0gKDYpCi0jZGVmaW5lIENQVV9TUEFDRSAgICAgKDcpCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNlZzsKLX0gbW1fc2VnbWVudF90OwotCi0jZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQotI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRyhfX1VTRVJfRFMpCi0jZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRyhfX0tFUk5FTF9EUykKLQotLyoKLSAqIEdldC9zZXQgdGhlIFNGQy9ERkMgcmVnaXN0ZXJzIGZvciBNT1ZFUyBpbnN0cnVjdGlvbnMKLSAqLwotCi1zdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKLXsKLSAgICByZXR1cm4gVVNFUl9EUzsKLX0KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCi17Ci0gICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLwotICAgIHJldHVybiBLRVJORUxfRFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKLXsKLX0KLQotI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX002OEtfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDcxOTc2MjkuLmI4N2YyZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC0xLDUgKzEsMTggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInRpbWV4X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInRpbWV4X21tLmgiCisvKgorICogbGludXgvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oCisgKgorICogbTY4ayBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworI2lmbmRlZiBfQVNNbTY4a19USU1FWF9ICisjZGVmaW5lIF9BU01tNjhrX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3ZjJmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmgKLSAqCi0gKiBtNjhrIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaWZuZGVmIF9BU01tNjhrX1RJTUVYX0gKLSNkZWZpbmUgX0FTTW02OGtfVElNRVhfSAotCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotCi1zdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDkwNTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGtub21tdS90aW1leC5oCi0gKgotICogbTY4a25vbW11IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaWZuZGVmIF9BU01fTTY4S05PTU1VX1RJTUVYX0gKLSNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfVElNRVhfSAotCi0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0jaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+Ci0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURQlNQ0ZfQ0xLCi0jZWxzZQotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCi0jZW5kaWYKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGN5Y2xlc190OwotCi1zdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCmluZGV4IGI2ZjkzYjMuLmE2YjRlZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0xLDUgKzEsMjY3IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJ0bGJmbHVzaF9uby5oIgorI2lmbmRlZiBfTTY4S19UTEJGTFVTSF9ICisjZGVmaW5lIF9NNjhLX1RMQkZMVVNIX0gKKworI2lmZGVmIENPTkZJR19NTVUKKyNpZm5kZWYgQ09ORklHX1NVTjMKKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2Uodm9pZCAqYWRkcikKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKKwkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCisJCQkJICAgICAiLmNoaXAgNjhrIgorCQkJCSAgICAgOiA6ICJhIiAoYWRkcikpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9IGVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKK30KKworLyoKKyAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKK3sKKwlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoYW5cblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIpOworCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYjA0MF9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCisJCQkgICAgICIuY2hpcCA2OGsiCisJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7CisJZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzAsIzQsKCUwKSIgOiA6ICJhIiAoYWRkcikpOworfQorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworLyoKKyAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgInBmbHVzaGFcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIpOworCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoYSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCisJCV9fZmx1c2hfdGxiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgeworCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhVU0VSX0RTKTsKKwkJX19mbHVzaF90bGJfb25lKGFkZHIpOworCQlzZXRfZnMob2xkX2ZzKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKICNlbHNlCi0jaW5jbHVkZSAidGxiZmx1c2hfbW0uaCIKKworCisvKiBSZXNlcnZlZCBQTUVHcy4gKi8KK2V4dGVybiBjaGFyIHN1bjNfcmVzZXJ2ZWRfcG1lZ1tTVU4zX1BNRUdTX05VTV07CitleHRlcm4gdW5zaWduZWQgbG9uZyBwbWVnX3ZhZGRyW1NVTjNfUE1FR1NfTlVNXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfYWxsb2NbU1VOM19QTUVHU19OVU1dOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG1lZ19jdHhbU1VOM19QTUVHU19OVU1dOworCisvKiBGbHVzaCBhbGwgdXNlcnNwYWNlIG1hcHBpbmdzIG9uZSBieSBvbmUuLi4gICh3aHkgbm8gZmx1c2ggY29tbWFuZCwKKyAgIHN1bj8pICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGN0eCwgb2xkY3R4OworCisgICAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICAgIGZvcihhZGRyID0gMHgwMDAwMDAwMDsgYWRkciA8IFRBU0tfU0laRTsgYWRkciArPSBTVU4zX1BNRUdfU0laRSkgeworCSAgICAgICBmb3IoY3R4ID0gMDsgY3R4IDwgODsgY3R4KyspIHsKKwkJICAgICAgIHN1bjNfcHV0X2NvbnRleHQoY3R4KTsKKwkJICAgICAgIHN1bjNfcHV0X3NlZ21hcChhZGRyLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJICAgICAgIH0KKyAgICAgICB9CisKKyAgICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisgICAgICAgLyogZXJhc2UgYWxsIG9mIHRoZSB1c2Vyc3BhY2UgcG1lZyBtYXBzLCB3ZSd2ZSBjbG9iYmVyZWQgdGhlbQorCSAgYWxsIGFueXdheSAqLworICAgICAgIGZvcihhZGRyID0gMDsgYWRkciA8IFNVTjNfSU5WQUxJRF9QTUVHOyBhZGRyKyspIHsKKwkgICAgICAgaWYocG1lZ19hbGxvY1thZGRyXSA9PSAxKSB7CisJCSAgICAgICBwbWVnX2FsbG9jW2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfY3R4W2FkZHJdID0gMDsKKwkJICAgICAgIHBtZWdfdmFkZHJbYWRkcl0gPSAwOworCSAgICAgICB9CisgICAgICAgfQorCit9CisKKy8qIENsZWFyIHVzZXIgVExCIGVudHJpZXMgd2l0aGluIHRoZSBjb250ZXh0IG5hbWVkIGluIG1tICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKyAgICAgdW5zaWduZWQgY2hhciBvbGRjdHg7CisgICAgIHVuc2lnbmVkIGNoYXIgc2VnOworICAgICB1bnNpZ25lZCBsb25nIGk7CisKKyAgICAgb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworICAgICBzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKKworICAgICBmb3IoaSA9IDA7IGkgPCBUQVNLX1NJWkU7IGkgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkgICAgIHNlZyA9IHN1bjNfZ2V0X3NlZ21hcChpKTsKKwkgICAgIGlmKHNlZyA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBjb250aW51ZTsKKworCSAgICAgc3VuM19wdXRfc2VnbWFwKGksIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwkgICAgIHBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJICAgICBwbWVnX2N0eFtzZWddID0gMDsKKwkgICAgIHBtZWdfdmFkZHJbc2VnXSA9IDA7CisgICAgIH0KKworICAgICBzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7CisKK30KKworLyogRmx1c2ggYSBzaW5nbGUgVExCIHBhZ2UuIEluIHRoaXMgY2FzZSwgd2UncmUgbGltaXRlZCB0byBmbHVzaGluZyBhCisgICBzaW5nbGUgUE1FRyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdW5zaWduZWQgY2hhciBvbGRjdHg7CisJdW5zaWduZWQgY2hhciBpOworCisJb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCXN1bjNfcHV0X2NvbnRleHQodm1hLT52bV9tbS0+Y29udGV4dCk7CisJYWRkciAmPSB+U1VOM19QTUVHX01BU0s7CisJaWYoKGkgPSBzdW4zX2dldF9zZWdtYXAoYWRkcikpICE9IFNVTjNfSU5WQUxJRF9QTUVHKQorCXsKKwkJcG1lZ19hbGxvY1tpXSA9IDA7CisJCXBtZWdfY3R4W2ldID0gMDsKKwkJcG1lZ192YWRkcltpXSA9IDA7CisJCXN1bjNfcHV0X3NlZ21hcCAoYWRkciwgIFNVTjNfSU5WQUxJRF9QTUVHKTsKKwl9CisJc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworCit9CisvKiBGbHVzaCBhIHJhbmdlIG9mIHBhZ2VzIGZyb20gVExCLiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOworCXVuc2lnbmVkIGNoYXIgc2VnLCBvbGRjdHg7CisKKwlzdGFydCAmPSB+U1VOM19QTUVHX01BU0s7CisKKwlvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7CisJc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7CisKKwl3aGlsZShzdGFydCA8IGVuZCkKKwl7CisJCWlmKChzZWcgPSBzdW4zX2dldF9zZWdtYXAoc3RhcnQpKSA9PSBTVU4zX0lOVkFMSURfUE1FRykKKwkJICAgICBnb3RvIG5leHQ7CisJCWlmKHBtZWdfY3R4W3NlZ10gPT0gbW0tPmNvbnRleHQpIHsKKwkJCXBtZWdfYWxsb2Nbc2VnXSA9IDA7CisJCQlwbWVnX2N0eFtzZWddID0gMDsKKwkJCXBtZWdfdmFkZHJbc2VnXSA9IDA7CisJCX0KKwkJc3VuM19wdXRfc2VnbWFwKHN0YXJ0LCBTVU4zX0lOVkFMSURfUE1FRyk7CisJbmV4dDoKKwkJc3RhcnQgKz0gU1VOM19QTUVHX1NJWkU7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF90bGJfYWxsKCk7Cit9CisKKy8qIEZsdXNoIGtlcm5lbCBwYWdlIGZyb20gVExCLiAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcGFnZSAodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN1bjNfcHV0X3NlZ21hcCAoYWRkciAmIH4oU1VOM19QTUVHX1NJWkUgLSAxKSwgU1VOM19JTlZBTElEX1BNRUcpOworfQorCiAjZW5kaWYKKworI2Vsc2UgLyogIUNPTkZJR19NTVUgKi8KKworLyoKKyAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7Cit9CisKKyNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQorCisvKgorICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworCisjZW5kaWYgLyogX002OEtfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiNmJmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1RMQkZMVVNIX0gKLSNkZWZpbmUgX002OEtfVExCRkxVU0hfSAotCi0KLSNpZm5kZWYgQ09ORklHX1NVTjMKLQotI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2Uodm9pZCAqYWRkcikKLXsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCQlzZXRfZnMoS0VSTkVMX0RTKTsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKLQkJCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCi0JCQkJICAgICAiLmNoaXAgNjhrIgotCQkJCSAgICAgOiA6ICJhIiAoYWRkcikpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQl9IGVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICM0LCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKLX0KLQotLyoKLSAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKLXsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCi0JCQkJICAgICAicGZsdXNoYW5cblx0IgotCQkJCSAgICAgIi5jaGlwIDY4ayIpOwotCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0Iik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYjA0MF9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCi0JCQkgICAgICJwZmx1c2ggKCUwKVxuXHQiCi0JCQkgICAgICIuY2hpcCA2OGsiCi0JCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKQotCQlfX2ZsdXNoX3RsYjA0MF9vbmUoYWRkcik7Ci0JZWxzZSBpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCi0JCV9fYXNtX18gX192b2xhdGlsZV9fKCJwZmx1c2ggIzAsIzQsKCUwKSIgOiA6ICJhIiAoYWRkcikpOwotfQotCi0jZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLQotLyoKLSAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgotCQkJCSAgICAgInBmbHVzaGFcblx0IgotCQkJCSAgICAgIi5jaGlwIDY4ayIpOwotCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoYSIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWlmIChtbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pCi0JCV9fZmx1c2hfdGxiKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgewotCQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JCXNldF9mcyhVU0VSX0RTKTsKLQkJX19mbHVzaF90bGJfb25lKGFkZHIpOwotCQlzZXRfZnMob2xkX2ZzKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlmbHVzaF90bGJfYWxsKCk7Ci19Ci0KLSNlbHNlCi0KLQotLyogUmVzZXJ2ZWQgUE1FR3MuICovCi1leHRlcm4gY2hhciBzdW4zX3Jlc2VydmVkX3BtZWdbU1VOM19QTUVHU19OVU1dOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG1lZ192YWRkcltTVU4zX1BNRUdTX05VTV07Ci1leHRlcm4gdW5zaWduZWQgY2hhciBwbWVnX2FsbG9jW1NVTjNfUE1FR1NfTlVNXTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfY3R4W1NVTjNfUE1FR1NfTlVNXTsKLQotLyogRmx1c2ggYWxsIHVzZXJzcGFjZSBtYXBwaW5ncyBvbmUgYnkgb25lLi4uICAod2h5IG5vIGZsdXNoIGNvbW1hbmQsCi0gICBzdW4/KSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gICAgICAgdW5zaWduZWQgY2hhciBjdHgsIG9sZGN0eDsKLQotICAgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLSAgICAgICBmb3IoYWRkciA9IDB4MDAwMDAwMDA7IGFkZHIgPCBUQVNLX1NJWkU7IGFkZHIgKz0gU1VOM19QTUVHX1NJWkUpIHsKLQkgICAgICAgZm9yKGN0eCA9IDA7IGN0eCA8IDg7IGN0eCsrKSB7Ci0JCSAgICAgICBzdW4zX3B1dF9jb250ZXh0KGN0eCk7Ci0JCSAgICAgICBzdW4zX3B1dF9zZWdtYXAoYWRkciwgU1VOM19JTlZBTElEX1BNRUcpOwotCSAgICAgICB9Ci0gICAgICAgfQotCi0gICAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOwotICAgICAgIC8qIGVyYXNlIGFsbCBvZiB0aGUgdXNlcnNwYWNlIHBtZWcgbWFwcywgd2UndmUgY2xvYmJlcmVkIHRoZW0KLQkgIGFsbCBhbnl3YXkgKi8KLSAgICAgICBmb3IoYWRkciA9IDA7IGFkZHIgPCBTVU4zX0lOVkFMSURfUE1FRzsgYWRkcisrKSB7Ci0JICAgICAgIGlmKHBtZWdfYWxsb2NbYWRkcl0gPT0gMSkgewotCQkgICAgICAgcG1lZ19hbGxvY1thZGRyXSA9IDA7Ci0JCSAgICAgICBwbWVnX2N0eFthZGRyXSA9IDA7Ci0JCSAgICAgICBwbWVnX3ZhZGRyW2FkZHJdID0gMDsKLQkgICAgICAgfQotICAgICAgIH0KLQotfQotCi0vKiBDbGVhciB1c2VyIFRMQiBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBuYW1lZCBpbiBtbSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0gICAgIHVuc2lnbmVkIGNoYXIgb2xkY3R4OwotICAgICB1bnNpZ25lZCBjaGFyIHNlZzsKLSAgICAgdW5zaWduZWQgbG9uZyBpOwotCi0gICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLSAgICAgc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7Ci0KLSAgICAgZm9yKGkgPSAwOyBpIDwgVEFTS19TSVpFOyBpICs9IFNVTjNfUE1FR19TSVpFKSB7Ci0JICAgICBzZWcgPSBzdW4zX2dldF9zZWdtYXAoaSk7Ci0JICAgICBpZihzZWcgPT0gU1VOM19JTlZBTElEX1BNRUcpCi0JCSAgICAgY29udGludWU7Ci0KLQkgICAgIHN1bjNfcHV0X3NlZ21hcChpLCBTVU4zX0lOVkFMSURfUE1FRyk7Ci0JICAgICBwbWVnX2FsbG9jW3NlZ10gPSAwOwotCSAgICAgcG1lZ19jdHhbc2VnXSA9IDA7Ci0JICAgICBwbWVnX3ZhZGRyW3NlZ10gPSAwOwotICAgICB9Ci0KLSAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOwotCi19Ci0KLS8qIEZsdXNoIGEgc2luZ2xlIFRMQiBwYWdlLiBJbiB0aGlzIGNhc2UsIHdlJ3JlIGxpbWl0ZWQgdG8gZmx1c2hpbmcgYQotICAgc2luZ2xlIFBNRUcgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXVuc2lnbmVkIGNoYXIgb2xkY3R4OwotCXVuc2lnbmVkIGNoYXIgaTsKLQotCW9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLQlzdW4zX3B1dF9jb250ZXh0KHZtYS0+dm1fbW0tPmNvbnRleHQpOwotCWFkZHIgJj0gflNVTjNfUE1FR19NQVNLOwotCWlmKChpID0gc3VuM19nZXRfc2VnbWFwKGFkZHIpKSAhPSBTVU4zX0lOVkFMSURfUE1FRykKLQl7Ci0JCXBtZWdfYWxsb2NbaV0gPSAwOwotCQlwbWVnX2N0eFtpXSA9IDA7Ci0JCXBtZWdfdmFkZHJbaV0gPSAwOwotCQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIsICBTVU4zX0lOVkFMSURfUE1FRyk7Ci0JfQotCXN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKLQotfQotLyogRmx1c2ggYSByYW5nZSBvZiBwYWdlcyBmcm9tIFRMQi4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQl1bnNpZ25lZCBjaGFyIHNlZywgb2xkY3R4OwotCi0Jc3RhcnQgJj0gflNVTjNfUE1FR19NQVNLOwotCi0Jb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOwotCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOwotCi0Jd2hpbGUoc3RhcnQgPCBlbmQpCi0JewotCQlpZigoc2VnID0gc3VuM19nZXRfc2VnbWFwKHN0YXJ0KSkgPT0gU1VOM19JTlZBTElEX1BNRUcpCi0JCSAgICAgZ290byBuZXh0OwotCQlpZihwbWVnX2N0eFtzZWddID09IG1tLT5jb250ZXh0KSB7Ci0JCQlwbWVnX2FsbG9jW3NlZ10gPSAwOwotCQkJcG1lZ19jdHhbc2VnXSA9IDA7Ci0JCQlwbWVnX3ZhZGRyW3NlZ10gPSAwOwotCQl9Ci0JCXN1bjNfcHV0X3NlZ21hcChzdGFydCwgU1VOM19JTlZBTElEX1BNRUcpOwotCW5leHQ6Ci0JCXN0YXJ0ICs9IFNVTjNfUE1FR19TSVpFOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZmx1c2hfdGxiX2FsbCgpOwotfQotCi0vKiBGbHVzaCBrZXJuZWwgcGFnZSBmcm9tIFRMQi4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIgJiB+KFNVTjNfUE1FR19TSVpFIC0gMSksIFNVTjNfSU5WQUxJRF9QTUVHKTsKLX0KLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfTTY4S19UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDcwY2ZiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX1RMQkZMVVNIX0gKLSNkZWZpbmUgX002OEtOT01NVV9UTEJGTFVTSF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGluZW8sIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUB1Y2xpbnV4Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAyLCBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgotICovCi0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotLyoKLSAqIGZsdXNoIGFsbCB1c2VyLXNwYWNlIGF0YyBlbnRyaWVzLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIodm9pZCkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JQlVHKCk7Ci19Ci0KLSNkZWZpbmUgZmx1c2hfdGxiKCkgX19mbHVzaF90bGIoKQotCi0vKgotICogZmx1c2ggYWxsIGF0YyBlbnRyaWVzIChib3RoIGtlcm5lbCBhbmQgdXNlci1zcGFjZSBlbnRyaWVzKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UodW5zaWduZWQgbG9uZyBhZGRyKQotewotCUJVRygpOwotfQotCi0jZW5kaWYgLyogX002OEtOT01NVV9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCmluZGV4IGI1M2NkMTYuLmU0ZTIyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC0xLDUgKzEsMzAgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInVjb250ZXh0X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInVjb250ZXh0X21tLmgiCisjaWZuZGVmIF9NNjhLX1VDT05URVhUX0gKKyNkZWZpbmUgX002OEtfVUNPTlRFWFRfSAorCit0eXBlZGVmIGludCBncmVnX3Q7CisjZGVmaW5lIE5HUkVHIDE4Cit0eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOworCit0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CisJaW50IGZfZnBjbnRsWzNdOworCWludCBmX2ZwcmVnc1s4KjNdOworfSBmcHJlZ3NldF90OworCitzdHJ1Y3QgbWNvbnRleHQgeworCWludCB2ZXJzaW9uOworCWdyZWdzZXRfdCBncmVnczsKKwlmcHJlZ3NldF90IGZwcmVnczsKK307CisKKyNkZWZpbmUgTUNPTlRFWFRfVkVSU0lPTiAyCisKK3N0cnVjdCB1Y29udGV4dCB7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZsYWdzOworCXN0cnVjdCB1Y29udGV4dCAgKnVjX2xpbms7CisJc3RhY2tfdAkJICB1Y19zdGFjazsKKwlzdHJ1Y3QgbWNvbnRleHQJICB1Y19tY29udGV4dDsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmlsbGVyWzgwXTsKKwlzaWdzZXRfdAkgIHVjX3NpZ21hc2s7CS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGUyMjY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19VQ09OVEVYVF9ICi0jZGVmaW5lIF9NNjhLX1VDT05URVhUX0gKLQotdHlwZWRlZiBpbnQgZ3JlZ190OwotI2RlZmluZSBOR1JFRyAxOAotdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgewotCWludCBmX2ZwY250bFszXTsKLQlpbnQgZl9mcHJlZ3NbOCozXTsKLX0gZnByZWdzZXRfdDsKLQotc3RydWN0IG1jb250ZXh0IHsKLQlpbnQgdmVyc2lvbjsKLQlncmVnc2V0X3QgZ3JlZ3M7Ci0JZnByZWdzZXRfdCBmcHJlZ3M7Ci19OwotCi0jZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEzYTI3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9VQ09OVEVYVF9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfVUNPTlRFWFRfSAotCi10eXBlZGVmIGludCBncmVnX3Q7Ci0jZGVmaW5lIE5HUkVHIDE4Ci10eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbTkdSRUddOwotCi10eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7Ci0JaW50IGZfcGNyOwotCWludCBmX3BzcjsKLQlpbnQgZl9mcGlhZGRyOwotCWludCBmX2ZwcmVnc1s4XVszXTsKLX0gZnByZWdzZXRfdDsKLQotc3RydWN0IG1jb250ZXh0IHsKLQlpbnQgdmVyc2lvbjsKLQlncmVnc2V0X3QgZ3JlZ3M7Ci0JZnByZWdzZXRfdCBmcHJlZ3M7Ci19OwotCi0jZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgotCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCmluZGV4IGM2NDBiYmEuLjAxOWNhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKQEAgLTEsNSArMSwyNSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAidW5hbGlnbmVkX25vLmgiCisjaWZuZGVmIF9BU01fTTY4S19VTkFMSUdORURfSAorI2RlZmluZSBfQVNNX002OEtfVU5BTElHTkVEX0gKKworCisjaWZkZWYgQ09ORklHX0NPTERGSVJFCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9ieXRlc2hpZnQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCisjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCisjZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCisKICNlbHNlCi0jaW5jbHVkZSAidW5hbGlnbmVkX21tLmgiCisvKgorICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuIAorICovCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CisKKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKKwogI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX002OEtfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc2OThmMi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19VTkFMSUdORURfSAotI2RlZmluZSBfQVNNX002OEtfVU5BTElHTkVEX0gKLQotLyoKLSAqIFRoZSBtNjhrIGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLgotICovCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+Ci0KLSNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKLSNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKLQotI2VuZGlmIC8qIF9BU01fTTY4S19VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjFlYTRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLTk9NTVVfVU5BTElHTkVEX0gKLSNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfVU5BTElHTkVEX0gKLQotCi0jaWZkZWYgQ09ORklHX0NPTERGSVJFCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9sZV9ieXRlc2hpZnQuaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgotCi0jZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCi0jZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCi0KLSNlbHNlCi0vKgotICogVGhlIG02OGsgY2FuIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcyBpdHNlbGYuIAotICovCi0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2FjY2Vzc19vay5oPgotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+Ci0KLSNkZWZpbmUgZ2V0X3VuYWxpZ25lZAlfX2dldF91bmFsaWduZWRfYmUKLSNkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQVNNX002OEtOT01NVV9VTkFMSUdORURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGsva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2MzJjZTAxLi5lYzM3ZmI1NiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQkgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJCSB1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKaW5kZXggN2RiNDE1OS4uNTRkOTgwNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tNjhrL2tlcm5lbC90aW1lLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE1OSwzICsxNjAsMjAgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworCisKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCWlmICghbWFjaF9od2NsaykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLWdlbmVyaWMiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQocnRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvTWFrZWZpbGUgYi9hcmNoL202OGtub21tdS9NYWtlZmlsZQppbmRleCBmZDBmYjMwLi5jZTQwNGJjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9NYWtlZmlsZQpAQCAtODgsMTggKzg4LDE4IEBACiAjCiAjIFNvbWUgQ0ZMQUcgYWRkaXRpb25zIGJhc2VkIG9uIHNwZWNpZmljIENQVSB0eXBlLgogIwotY2ZsYWdzLSQoQ09ORklHX001MjA2KQkJOj0gLW01MjAwCi1jZmxhZ3MtJChDT05GSUdfTTUyMDZlKQkJOj0gLW01MjAwCi1jZmxhZ3MtJChDT05GSUdfTTUyMHgpCQk6PSAtbTUzMDcKK2NmbGFncy0kKENPTkZJR19NNTIwNikJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTIwNiwtbTUyMDApCitjZmxhZ3MtJChDT05GSUdfTTUyMDZlKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbTUyMDZlLC1tNTIwMCkKK2NmbGFncy0kKENPTkZJR19NNTIweCkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTIwOCwtbTUyMDApCiBjZmxhZ3MtJChDT05GSUdfTTUyM3gpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyM3gsLW01MzA3KQotY2ZsYWdzLSQoQ09ORklHX001MjQ5KQkJOj0gLW01MjAwCitjZmxhZ3MtJChDT05GSUdfTTUyNDkpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyNDksLW01MjAwKQogY2ZsYWdzLSQoQ09ORklHX001MjcxKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjcxLC1tNTMwNykKLWNmbGFncy0kKENPTkZJR19NNTI3MikJCTo9IC1tNTMwNworY2ZsYWdzLSQoQ09ORklHX001MjcyKQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjcxLC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNTI3NSkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTI3NSwtbTUzMDcpCiBjZmxhZ3MtJChDT05GSUdfTTUyOHgpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tNTI4eCwtbTUzMDcpCi1jZmxhZ3MtJChDT05GSUdfTTUzMDcpCQk6PSAtbTUzMDcKK2NmbGFncy0kKENPTkZJR19NNTMwNykJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW01MzA3LC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNTMyeCkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTMyeCwtbTUzMDcpCi1jZmxhZ3MtJChDT05GSUdfTTU0MDcpCQk6PSAtbTUyMDAKK2NmbGFncy0kKENPTkZJR19NNTQwNykJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW01NDA3LC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNjgzMjgpCQk6PSAtbTY4MDAwCiBjZmxhZ3MtJChDT05GSUdfTTY4RVozMjgpCTo9IC1tNjgwMDAKIGNmbGFncy0kKENPTkZJR19NNjhWWjMyOCkJOj0gLW02ODAwMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2RtYS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2RtYS5jCmluZGV4IGUxMGVhZmMuLjkzNjEyNTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9kbWEuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZG1hLmMKQEAgLTksMTAgKzksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgaW50IGdmcCkKKwkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKIHsKIAl2b2lkICpyZXQ7CiAJLyogaWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzICovCkBAIC0zNCwzICszNSw4IEBACiB7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KKwordm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlLCBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworfQorCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMKaW5kZXggYmJhMWJiNC4uNTZlMGY0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMKQEAgLTIzLDcgKzIzLDcgQEAKIAlzdHJ1Y3QgcHRfcmVncyAqb2xkcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKIAogCWlycV9lbnRlcigpOwotCV9fZG9fSVJRKGlycSk7CisJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CiAJaXJxX2V4aXQoKTsKIAogCXNldF9pcnFfcmVncyhvbGRyZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDNmMmQ3NzQuLjFlOTZjNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgIHJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkJdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKaW5kZXggM2JmMjQ5Yy4uN2JlZmMwYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwpAQCAtMTExLDExICsxMTEsNyBAQAogCXsKIAkJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7MCwgfTsKIAotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IDAgPj4gUEFHRV9TSElGVDsKLQkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSAoZW5kX21lbSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOwotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IDA7Ci0jZW5kaWYKKwkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSAoZW5kX21lbSAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOwogCQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYwppbmRleCBkMjk5ZjdiLi45ZWFiMTlkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvY29uZmlnLmMKQEAgLTMyLDcgKzMyLDggQEAKIAl7CiAJCS5tYXBiYXNlIAk9IE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMiwKIAkJLmlycQkJPSA3NCwKLQl9CisJfSwKKwl7IH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI0OV91YXJ0ID0gewpAQCAtNTAsMTIgKzUxLDEyIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbTUyNDlfdWFydF9pbml0X2xpbmUoaW50IGxpbmUsIGludCBpcnEpCiB7CiAJaWYgKGxpbmUgPT0gMCkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQxKTsKIAl9IGVsc2UgaWYgKGxpbmUgPT0gMSkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9jb25maWcuYwppbmRleCA3MjRmYWYwLi40NDgwM2JmIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMKQEAgLTY1LDEyICs2NSwxMiBAQAogc3RhdGljIHZvaWQgX19pbml0IG01MzA3X3VhcnRfaW5pdF9saW5lKGludCBsaW5lLCBpbnQgaXJxKQogewogCWlmIChsaW5lID09IDApIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMSk7CiAJfSBlbHNlIGlmIChsaW5lID09IDEpIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTQwNy9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzU0MDcvY29uZmlnLmMKaW5kZXggNjQ4YjhiNy4uMGVlOGMxYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTQwNy9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jCkBAIC01NiwxMiArNTYsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtNTQwN191YXJ0X2luaXRfbGluZShpbnQgbGluZSwgaW50IGlycSkKIHsKIAlpZiAobGluZSA9PSAwKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDEpOwogCX0gZWxzZSBpZiAobGluZSA9PSAxKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvTWFrZWZpbGUKaW5kZXggNGY0MTZhOS4uMWJjYjkzNyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAKIAogYXNmbGFncy0kKENPTkZJR19GVUxMREVCVUcpIDo9IC1EREVCVUdHRVJfQ09NUEFUSUJMRV9DQUNIRT0xCiAKLW9iai0kKENPTkZJR19DT0xERklSRSkJKz0gZG1hLm8gZW50cnkubyB2ZWN0b3JzLm8KK29iai0kKENPTkZJR19DT0xERklSRSkJKz0gY2xrLm8gZG1hLm8gZW50cnkubyB2ZWN0b3JzLm8KIG9iai0kKENPTkZJR19NNTIwNikJKz0gdGltZXJzLm8KIG9iai0kKENPTkZJR19NNTIwNmUpCSs9IHRpbWVycy5vCiBvYmotJChDT05GSUdfTTUyMHgpCSs9IHBpdC5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9jbGsuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2Nsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGJmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9jbGsuYwpAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoJY2xrLmMgLS0gZ2VuZXJhbCBDb2xkRmlyZSBDUFUga2VybmVsIGNsayBoYW5kbGluZworICoKKyAqCUNvcHlyaWdodCAoQykgMjAwOSwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKK30KKwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBNQ0ZfQ0xLOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA5MjUwOGM1Li45OThlNWRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtNzcsNyArNzcsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBNQUNIX0RFQ1NUQVRJT04KIAlib29sICJERUNzdGF0aW9ucyIKQEAgLTEzMiw3ICsxMzEsNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNZU19TVVBQT1JUU18xMDBIWgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAloZWxwCiAJIFRoaXMgYSBmYW1pbHkgb2YgbWFjaGluZXMgYmFzZWQgb24gdGhlIE1JUFMgUjQwMzAgY2hpcHNldCB3aGljaCB3YXMKIAkgdXNlZCBieSBzZXZlcmFsIHZlbmRvcnMgdG8gYnVpbGQgUklTQy9vcyBhbmQgV2luZG93cyBOVCB3b3Jrc3RhdGlvbnMuCkBAIC0xNTQsNyArMTUyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEJST0tFTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIExFTU9URV9GVUxPTkcKIAlib29sICJMZW1vdGUgRnVsb25nIG1pbmktUEMiCkBAIC0xNzUsNyArMTcyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQV9TVVBQT1JUX0JST0tFTgogCXNlbGVjdCBDUFVfSEFTX1dCCiAJaGVscApAQCAtMjUwLDcgKzI0Niw2IEBACiAJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IENTUkNfUjRLCiAJc2VsZWN0IFNZU19IQVNfQ1BVX1ZSNDFYWAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIE5YUF9TVEIyMjAKIAlib29sICJOWFAgU1RCMjIwIGJvYXJkIgpAQCAtMzY0LDcgKzM1OSw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCiAJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJaGVscAogCSAgVGhpcyBhcmUgdGhlIFNHSSBPcmlnaW4gMjAwLCBPcmlnaW4gMjAwMCBhbmQgT255eCAyIEdyYXBoaWNzCiAJICB3b3Jrc3RhdGlvbnMuICBUbyBjb21waWxlIGEgTGludXgga2VybmVsIHRoYXQgcnVucyBvbiB0aGVzZSwgc2F5IFkKQEAgLTU2Myw3ICs1NTcsNiBAQAogCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBDU1JDX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKQEAgLTcwMCw4ICs2OTMsNyBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCi0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIHkKIAogIwogIyBTZWxlY3Qgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuCkBAIC05MjAsNyArOTEyLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IENQVV9NSVBTUjJfSVJRX1ZJCiAKQEAgLTkzOSw3ICs5MzAsNiBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAKIGNvbmZpZyBTV0FQX0lPX1NQQUNFCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggMjJkYWIyZS4uOGQ1NDRjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtNzIwLDExICs3MjAsMTcgQEAKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0uIG1pc3Npbmctc3lzY2FsbHMgRVhUUkFfQ0ZMQUdTPSItbWFiaT0zMiIKIGVuZGlmCiAKK2luc3RhbGw6CisJJChRKWluc3RhbGwgLUQgLW0gNzU1IHZtbGludXggJChJTlNUQUxMX1BBVEgpL3ZtbGludXgtJChLRVJORUxSRUxFQVNFKQorCSQoUSlpbnN0YWxsIC1EIC1tIDY0NCAuY29uZmlnICQoSU5TVEFMTF9QQVRIKS9jb25maWctJChLRVJORUxSRUxFQVNFKQorCSQoUSlpbnN0YWxsIC1EIC1tIDY0NCBTeXN0ZW0ubWFwICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ubWFwLSQoS0VSTkVMUkVMRUFTRSkKKwogYXJjaGNsZWFuOgogCUAkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9ib290CiAJQCQoTUFLRSkgJChjbGVhbik9YXJjaC9taXBzL2xhc2F0CiAKIGRlZmluZSBhcmNoaGVscAorCWVjaG8gJyAgaW5zdGFsbCAgICAgICAgICAgICAgLSBpbnN0YWxsIGtlcm5lbCBpbnRvICQoSU5TVEFMTF9QQVRIKScKIAllY2hvICcgIHZtbGludXguZWNvZmYgICAgICAgIC0gRUNPRkYgYm9vdCBpbWFnZScKIAllY2hvICcgIHZtbGludXguYmluICAgICAgICAgIC0gUmF3IGJpbmFyeSBib290IGltYWdlJwogCWVjaG8gJyAgdm1saW51eC5zcmVjICAgICAgICAgLSBTUkVDIGJvb3QgaW1hZ2UnCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnIGIvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZwppbmRleCA3ZjhlZjEzLi44MTI4YWViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKQEAgLTEzNCw0ICsxMzQsNCBAQAogCXNlbGVjdCBTWVNfSEFTX0NQVV9NSVBTMzJfUjEKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpby5jCmluZGV4IGU2NjBkZGQuLjkxYTljNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCBPcGVuV3J0Lm9yZywgRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSwgT3BlbldydC5vcmcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CiAgKiAgCUFyY2hpdGVjdHVyZSBzcGVjaWZpYyBHUElPIHN1cHBvcnQKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0yNywxMjIgKzI3LDE3NSBAQAogICogCW90aGVycyBoYXZlIGEgc2Vjb25kIG9uZSA6IEdQSU8yCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgogI2luY2x1ZGUgPGFzbS9ncGlvLmg+CiAKLSNkZWZpbmUgZ3BpbzEgc3lzCitzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXZvaWQgX19pb21lbQkJKnJlZ2Jhc2U7Cit9OworCiAjaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0KLXN0YXRpYyBzdHJ1Y3QgYXUxeDAwX2dwaW8yICpjb25zdCBncGlvMiA9IChzdHJ1Y3QgYXUxeDAwX2dwaW8yICopIEdQSU8yX0JBU0U7Ci0jZGVmaW5lIEdQSU8yX09VVFBVVF9FTkFCTEVfTUFTSyAJMHgwMDAxMDAwMAotCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMl9yZWFkKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCWdwaW8gLT0gQVUxWFhYX0dQSU9fQkFTRTsKLQlyZXR1cm4gKChncGlvMi0+cGluc3RhdGUgPj4gZ3BpbykgJiAweDAxKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisJcmV0dXJuIHJlYWRsKGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfU1QpICYgbWFzazsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2dwaW8yX3dyaXRlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIGF1MTAwMF9ncGlvMl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7CisJdTMyIG1hc2sgPSAoKEdQSU8yX09VVF9FTl9NQVNLIDw8IG9mZnNldCkgfCAoISF2YWx1ZSA8PCBvZmZzZXQpKTsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZ3BpbzItPm91dHB1dCA9IChHUElPMl9PVVRQVVRfRU5BQkxFX01BU0sgPDwgZ3BpbykgfCAoKCEhdmFsdWUpIDw8IGdwaW8pOworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX09VVCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMl9kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8yX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JZ3BpbyAtPSBBVTFYWFhfR1BJT19CQVNFOwotCWdwaW8yLT5kaXIgJj0gfigweDAxIDw8IGdwaW8pOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG1wID0gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCXRtcCAmPSB+bWFzazsKKwl3cml0ZWwodG1wLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX0RJUik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7Ci0JZ3BpbzItPmRpciB8PSAweDAxIDw8IGdwaW87Ci0JZ3BpbzItPm91dHB1dCA9IChHUElPMl9PVVRQVVRfRU5BQkxFX01BU0sgPDwgZ3BpbykgfCAoKCEhdmFsdWUpIDw8IGdwaW8pOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIG91dF9tYXNrID0gKChHUElPMl9PVVRfRU5fTUFTSyA8PCBvZmZzZXQpIHwgKCEhdmFsdWUgPDwgb2Zmc2V0KSk7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdG1wID0gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCXRtcCB8PSBtYXNrOworCXdyaXRlbCh0bXAsIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfRElSKTsKKwl3cml0ZWwob3V0X21hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfT1VUKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlyZXR1cm4gMDsKIH0KLQogI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKSAqLwogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMV9yZWFkKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXJldHVybiAoZ3BpbzEtPnBpbnN0YXRlcmQgPj4gZ3BpbykgJiAweDAxOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKwlyZXR1cm4gcmVhZGwoZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMV9TVCkgJiBtYXNrOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfZ3BpbzFfd3JpdGUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIHZvaWQgYXUxMDAwX2dwaW8xX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogeworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdTMyIHJlZ19vZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCiAJaWYgKHZhbHVlKQotCQlncGlvMS0+b3V0cHV0c2V0ID0gKDB4MDEgPDwgZ3Bpbyk7CisJCXJlZ19vZmZzZXQgPSBBVTEwMDBfR1BJTzFfT1VUOwogCWVsc2UKLQkJLyogT3V0cHV0IGEgemVybyAqLwotCQlncGlvMS0+b3V0cHV0Y2xyID0gKDB4MDEgPDwgZ3Bpbyk7CisJCXJlZ19vZmZzZXQgPSBBVTEwMDBfR1BJTzFfQ0xSOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgcmVnX29mZnNldCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMV9kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JZ3BpbzEtPnBpbmlucHV0ZW4gPSAoMHgwMSA8PCBncGlvKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisJd3JpdGVsKG1hc2ssIGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzFfU1QpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzFfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKLQlncGlvMS0+dHJpb3V0Y2xyID0gKDB4MDEgJiBncGlvKTsKLQlhdTF4eHhfZ3BpbzFfd3JpdGUoZ3BpbywgdmFsdWUpOworCXUzMiBtYXNrID0gMSA8PCBvZmZzZXQ7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8xX1RSSV9PVVQpOworCWF1MTAwMF9ncGlvMV9zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MXh4eF9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJcmV0dXJuIDA7Ci0jZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8yX3JlYWQoZ3Bpbyk7CitzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCBhdTEwMDBfZ3Bpb19jaGlwW10gPSB7CisJWzBdID0geworCQkucmVnYmFzZQkJCT0gKHZvaWQgX19pb21lbSAqKVNZU19CQVNFLAorCQkuY2hpcCA9IHsKKwkJCS5sYWJlbAkJCT0gImF1MTAwMC1ncGlvMSIsCisJCQkuZGlyZWN0aW9uX2lucHV0CT0gYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9pbnB1dCwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0CT0gYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQsCisJCQkuZ2V0CQkJPSBhdTEwMDBfZ3BpbzFfZ2V0LAorCQkJLnNldAkJCT0gYXUxMDAwX2dwaW8xX3NldCwKKwkJCS5iYXNlCQkJPSAwLAorCQkJLm5ncGlvCQkJPSAzMiwKKwkJfSwKKwl9LAorI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQorCVsxXSA9IHsKKwkJLnJlZ2Jhc2UgICAgICAgICAgICAgICAgICAgICAgICA9ICh2b2lkIF9faW9tZW0gKilHUElPMl9CQVNFLAorCQkuY2hpcCA9IHsKKwkJCS5sYWJlbCAgICAgICAgICAgICAgICAgID0gImF1MTAwMC1ncGlvMiIsCisJCQkuZGlyZWN0aW9uX2lucHV0ICAgICAgICA9IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25faW5wdXQsCisJCQkuZGlyZWN0aW9uX291dHB1dCAgICAgICA9IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25fb3V0cHV0LAorCQkJLmdldCAgICAgICAgICAgICAgICAgICAgPSBhdTEwMDBfZ3BpbzJfZ2V0LAorCQkJLnNldCAgICAgICAgICAgICAgICAgICAgPSBhdTEwMDBfZ3BpbzJfc2V0LAorCQkJLmJhc2UgICAgICAgICAgICAgICAgICAgPSBBVTFYWFhfR1BJT19CQVNFLAorCQkJLm5ncGlvICAgICAgICAgICAgICAgICAgPSAzMiwKKwkJfSwKKwl9LAogI2VuZGlmCi0JZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8xX3JlYWQoZ3Bpbyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGF1MXh4eF9ncGlvX2dldF92YWx1ZSk7Cit9OwogCi12b2lkIGF1MXh4eF9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfZ3Bpb19pbml0KHZvaWQpCiB7Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQk7Ci0jZWxzZQotCQlhdTF4eHhfZ3BpbzJfd3JpdGUoZ3BpbywgdmFsdWUpOwotI2VuZGlmCi0JZWxzZQotCQlhdTF4eHhfZ3BpbzFfd3JpdGUoZ3BpbywgdmFsdWUpOwotfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19zZXRfdmFsdWUpOwotCi1pbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKGdwaW8gPj0gQVUxWFhYX0dQSU9fQkFTRSkKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLSNlbHNlCi0JCXJldHVybiBhdTF4eHhfZ3BpbzJfZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCWdwaW9jaGlwX2FkZCgmYXUxMDAwX2dwaW9fY2hpcFswXS5jaGlwKTsKKyNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKKwlncGlvY2hpcF9hZGQoJmF1MTAwMF9ncGlvX2NoaXBbMV0uY2hpcCk7CiAjZW5kaWYKIAotCXJldHVybiBhdTF4eHhfZ3BpbzFfZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQpOworYXJjaF9pbml0Y2FsbChhdTEwMDBfZ3Bpb19pbml0KTsKIAotaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQotewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotI2VuZGlmCi0KLQlyZXR1cm4gYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwppbmRleCA5NTMwMzI5Li4wZDY4ZTE5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMTAwX21tYy5oPgpAQCAtMTMxLDYgKzEzMiwxMiBAQAogCS5yZXNvdXJjZQk9IGlkZV9yZXNvdXJjZXMKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIHNtY19kYXRhID0geworCS5mbGFncwk9IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFXzE2QklULAorCS5sZWRhCT0gUlBDX0xFRF8xMDBfMTAsCisJLmxlZGIJPSBSUENfTEVEX1RYX1JYLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MWMxMTFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkubmFtZQk9ICJzbWM5MXgtcmVncyIsCkBAIC0xNDYsNiArMTUzLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxYzExMV9kZXZpY2UgPSB7CisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc21jX2RhdGEsCisJfSwKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxYzExMV9yZXNvdXJjZXMpLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQppbmRleCAxYzJhN2ZhLi5kNjkwM2MzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9NYWtlZmlsZQpAQCAtMTQsMyArMTQsNSBAQAogb2JqLXkgKz0gb2N0ZW9uLW1lbWNweS5vCiAKIG9iai0kKENPTkZJR19TTVApICAgICAgICAgICAgICAgICAgICAgKz0gc21wLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9mbGFzaF9zZXR1cC5jCmluZGV4IDU1M2QzNmMuLjAwOGY2NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZmxhc2hfc2V0dXAuYwpAQCAtNTcsNyArNTcsNyBAQAogCQlmbGFzaF9tYXAuYmFua3dpZHRoID0gMTsKIAkJZmxhc2hfbWFwLnZpcnQgPSBpb3JlbWFwKGZsYXNoX21hcC5waHlzLCBmbGFzaF9tYXAuc2l6ZSk7CiAJCXByX25vdGljZSgiQm9vdGJ1cyBmbGFzaDogU2V0dGluZyBmbGFzaCBmb3IgJWx1TUIgZmxhc2ggYXQgIgotCQkJICAiMHglMDhseFxuIiwgZmxhc2hfbWFwLnNpemUgPj4gMjAsIGZsYXNoX21hcC5waHlzKTsKKwkJCSAgIjB4JTA4bGx4XG4iLCBmbGFzaF9tYXAuc2l6ZSA+PiAyMCwgZmxhc2hfbWFwLnBoeXMpOwogCQlzaW1wbGVfbWFwX2luaXQoJmZsYXNoX21hcCk7CiAJCW15bXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmZmxhc2hfbWFwKTsKIAkJaWYgKG15bXRkKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKaW5kZXggZmM3Mjk4NC4uMWMxOWFmOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYwpAQCAtMzEsNyArMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NvcmVfZW9pKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaXJxX2Rlc2NfdCAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXVuc2lnbmVkIGludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1NXMDsKIAkvKgogCSAqIElmIGFuIElSUSBpcyBiZWluZyBwcm9jZXNzZWQgd2hpbGUgd2UgYXJlIGRpc2FibGluZyBpdCB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMgYi9hcmNoL21pcHMvY29iYWx0L2lycS5jCmluZGV4IGFjNGZiOTEuLmNiOWJmODIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb2JhbHQvaXJxLmMKKysrIGIvYXJjaC9taXBzL2NvYmFsdC9pcnEuYwpAQCAtNDcsNyArNDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlID0gewogCS5oYW5kbGVyCT0gbm9fYWN0aW9uLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gImNhc2NhZGUiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvaXJxLmMgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYwppbmRleCBjMjU4M2VjLi40MzgyOGFlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYworKysgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYwpAQCAtODAsOSArODAsOSBAQAogCXUzMiBpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9FTU1BMlJIX0lSUTsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoRU1NQTJSSF9JUlFfQkFTRSArIGksCi0JCQkJCSAmZW1tYTJyaF9pcnFfY29udHJvbGxlciwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShFTU1BMlJIX0lSUV9CQVNFICsgaSwKKwkJCQkJICAgICAgJmVtbWEycmhfaXJxX2NvbnRyb2xsZXIsCisJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogfQogCiBzdGF0aWMgdm9pZCBlbW1hMnJoX3N3X2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKQEAgLTEyMCw5ICsxMjAsOSBAQAogCXUzMiBpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9FTU1BMlJIX0lSUV9TVzsgaSsrKQotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoRU1NQTJSSF9TV19JUlFfQkFTRSArIGksCi0JCQkJCSAmZW1tYTJyaF9zd19pcnFfY29udHJvbGxlciwKLQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShFTU1BMlJIX1NXX0lSUV9CQVNFICsgaSwKKwkJCQkJICAgICAgJmVtbWEycmhfc3dfaXJxX2NvbnRyb2xsZXIsCisJCQkJCSAgICAgIGhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogfQogCiBzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTQ5LDYgKzE0OSwxMiBAQAogCiBzdGF0aWMgdm9pZCBlbW1hMnJoX2dwaW9faXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogeworCWlycSAtPSBFTU1BMlJIX0dQSU9fSVJRX0JBU0U7CisJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX1NULCB+KDEgPDwgaXJxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfbWFza19hY2sodW5zaWduZWQgaW50IGlycSkKK3sKIAl1MzIgcmVnOwogCiAJaXJxIC09IEVNTUEyUkhfR1BJT19JUlFfQkFTRTsKQEAgLTE1OSwyNyArMTY1LDEyIEBACiAJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX01BU0ssIHJlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZW5kKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIHJlZzsKLQotCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpIHsKLQotCQlpcnEgLT0gRU1NQTJSSF9HUElPX0lSUV9CQVNFOwotCi0JCXJlZyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOwotCQlyZWcgfD0gMSA8PCBpcnE7Ci0JCWVtbWEycmhfb3V0MzIoRU1NQTJSSF9HUElPX0lOVF9NQVNLLCByZWcpOwotCX0KLX0KLQogc3RydWN0IGlycV9jaGlwIGVtbWEycmhfZ3Bpb19pcnFfY29udHJvbGxlciA9IHsKIAkubmFtZSA9ICJlbW1hMnJoX2dwaW9faXJxIiwKIAkuYWNrID0gZW1tYTJyaF9ncGlvX2lycV9hY2ssCiAJLm1hc2sgPSBlbW1hMnJoX2dwaW9faXJxX2Rpc2FibGUsCi0JLm1hc2tfYWNrID0gZW1tYTJyaF9ncGlvX2lycV9hY2ssCisJLm1hc2tfYWNrID0gZW1tYTJyaF9ncGlvX2lycV9tYXNrX2FjaywKIAkudW5tYXNrID0gZW1tYTJyaF9ncGlvX2lycV9lbmFibGUsCi0JLmVuZCA9IGVtbWEycmhfZ3Bpb19pcnFfZW5kLAogfTsKIAogdm9pZCBlbW1hMnJoX2dwaW9faXJxX2luaXQodm9pZCkKQEAgLTE4NywxNCArMTc4LDE0IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJRX0dQSU87IGkrKykKLQkJc2V0X2lycV9jaGlwKEVNTUEyUkhfR1BJT19JUlFfQkFTRSArIGksCi0JCQkgICAgICZlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXIpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShFTU1BMlJIX0dQSU9fSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyLAorCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0gewogCSAgIC5oYW5kbGVyID0gbm9fYWN0aW9uLAogCSAgIC5mbGFncyA9IDAsCi0JICAgLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCSAgIC5uYW1lID0gImNhc2NhZGUiLAogCSAgIC5kZXZfaWQgPSBOVUxMLAogCSAgIC5uZXh0ID0gTlVMTCwKQEAgLTIxMyw4ICsyMDQsNyBAQAogCQkgICAgZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9JTlRfRU5fMCk7CiAKICNpZmRlZiBFTU1BMlJIX1NXX0NBU0NBREUKLQlpZiAoaW50U3RhdHVzICYKLQkgICAgKDEgPDwgKChFTU1BMlJIX1NXX0NBU0NBREUgLSBFTU1BMlJIX0lSUV9JTlQwKSAmICgzMiAtIDEpKSkpIHsKKwlpZiAoaW50U3RhdHVzICYgKDFVTCA8PCBFTU1BMlJIX1NXX0NBU0NBREUpKSB7CiAJCXUzMiBzd0ludFN0YXR1czsKIAkJc3dJbnRTdGF0dXMgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NXX0lOVCkKIAkJICAgICYgZW1tYTJyaF9pbjMyKEVNTUEyUkhfQkhJRl9TV19JTlRfRU4pOwpAQCAtMjI1LDYgKzIxNSw4IEBACiAJCQl9CiAJCX0KIAl9CisJLyogU2tpcCBTL1cgaW50ZXJydXB0ICovCisJaW50U3RhdHVzICY9IH4oMVVMIDw8IEVNTUEyUkhfU1dfQ0FTQ0FERSk7CiAjZW5kaWYKIAogCWZvciAoaSA9IDAsIGJpdG1hc2sgPSAxOyBpIDwgMzI7IGkrKywgYml0bWFzayA8PD0gMSkgewpAQCAtMjM4LDggKzIzMCw3IEBACiAJCSAgICBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9FTl8xKTsKIAogI2lmZGVmIEVNTUEyUkhfR1BJT19DQVNDQURFCi0JaWYgKGludFN0YXR1cyAmCi0JICAgICgxIDw8ICgoRU1NQTJSSF9HUElPX0NBU0NBREUgLSBFTU1BMlJIX0lSUV9JTlQwKSAmICgzMiAtIDEpKSkpIHsKKwlpZiAoaW50U3RhdHVzICYgKDFVTCA8PCAoRU1NQTJSSF9HUElPX0NBU0NBREUgJSAzMikpKSB7CiAJCXUzMiBncGlvSW50U3RhdHVzOwogCQlncGlvSW50U3RhdHVzID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfU1QpCiAJCSAgICAmIGVtbWEycmhfaW4zMihFTU1BMlJIX0dQSU9fSU5UX01BU0spOwpAQCAtMjUwLDYgKzI0MSw4IEBACiAJCQl9CiAJCX0KIAl9CisJLyogU2tpcCBHUElPIGludGVycnVwdCAqLworCWludFN0YXR1cyAmPSB+KDFVTCA8PCAoRU1NQTJSSF9HUElPX0NBU0NBREUgJSAzMikpOwogI2VuZGlmCiAKIAlmb3IgKGkgPSAzMiwgYml0bWFzayA9IDE7IGkgPCA2NDsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYwppbmRleCBkNWY0N2U0Li44MGFlMTJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogc3RhdGljIHN0cnVjdCAgcGxhdF9zZXJpYWw4MjUwX3BvcnQgcGxhdGZvcm1fc2VyaWFsX3BvcnRzW10gPSB7CiAJWzBdID0gewogCQkubWVtYmFzZT0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjBfQkFTRSArIDMpLAorCQkubWFwYmFzZSA9IEVNTUEyUkhfUEZVUjBfQkFTRSArIDMsCiAJCS5pcnEgPSBFTU1BMlJIX0lSUV9QRlVSMCwKIAkJLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKIAkJLnJlZ3NoaWZ0ID0gNCwKQEAgLTExNyw2ICsxMTgsNyBAQAogCQkuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKICAgICAgICB9LCBbMV0gPSB7CiAJCS5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjFfQkFTRSArIDMpLAorCQkubWFwYmFzZSA9IEVNTUEyUkhfUEZVUjFfQkFTRSArIDMsCiAJCS5pcnEgPSBFTU1BMlJIX0lSUV9QRlVSMSwKIAkJLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKIAkJLnJlZ3NoaWZ0ID0gNCwKQEAgLTEyNCw2ICsxMjYsNyBAQAogCQkuZmxhZ3MgPSBFTU1BMlJIX1NFUklBTF9GTEFHUywKICAgICAgICB9LCBbMl0gPSB7CiAJCS5tZW1iYXNlID0gKHZvaWQgX19pb21lbSopS1NFRzFBRERSKEVNTUEyUkhfUEZVUjJfQkFTRSArIDMpLAorCQkubWFwYmFzZSA9IEVNTUEyUkhfUEZVUjJfQkFTRSArIDMsCiAJCS5pcnEgPSBFTU1BMlJIX0lSUV9QRlVSMiwKIAkJLnVhcnRjbGsgPSBFTU1BMlJIX1NFUklBTF9DTE9DSywKIAkJLnJlZ3NoaWZ0ID0gNCwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBjMDE4NzI3Li4zYmRjMGUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0yMDksOCArMjA5LDcgQEAKIAkgKiBNSVBTMzIgY2xhc3MgcHJvY2Vzc29ycwogCSAqLwogCUNQVV80S0MsIENQVV80S0VDLCBDUFVfNEtTQywgQ1BVXzI0SywgQ1BVXzM0SywgQ1BVXzEwMDRLLCBDUFVfNzRLLAotCUNQVV9BVTEwMDAsIENQVV9BVTExMDAsIENQVV9BVTEyMDAsIENQVV9BVTEyMTAsIENQVV9BVTEyNTAsIENQVV9BVTE1MDAsCi0JQ1BVX0FVMTU1MCwgQ1BVX1BSNDQ1MCwgQ1BVX0JDTTMzMDIsIENQVV9CQ000NzEwLAorCUNQVV9BTENIRU1ZLCBDUFVfUFI0NDUwLCBDUFVfQkNNMzMwMiwgQ1BVX0JDTTQ3MTAsCiAKIAkvKgogCSAqIE1JUFM2NCBjbGFzcyBwcm9jZXNzb3JzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaAppbmRleCAxMzRlMWZjLi5hMTJkOTcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKQEAgLTg3LDcgKzg3LDcgQEAKIAk6ICI9ciIgKHRtcCkpOwkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMSkgJiYgIWRlZmluZWQoQ09ORklHX01BQ0hfQUxDSEVNWSkKIAogLyoKICAqIFRoZXNlIGFyZSBzbGlnaHRseSBjb21wbGljYXRlZCBieSB0aGUgZmFjdCB0aGF0IHdlIGd1YXJhbnRlZSBSMSBrZXJuZWxzIHRvCkBAIC0xMzksNyArMTM5LDcgQEAKIH0gd2hpbGUgKDApCiAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfUjU1MDApCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfUjU1MDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQUxDSEVNWSkKIAogLyoKICAqIFIxMDAwMCByb2NrcyAtIGFsbCBoYXphcmRzIGhhbmRsZWQgaW4gaGFyZHdhcmUsIHNvIHRoaXMgYmVjb21lcyBhIG5vYnJhaW5lci4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWRmMGNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfQVUxWDAwX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfQVUxWDAwX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKyNkZWZpbmUgY3B1X2hhc190bGIJCQkxCisjZGVmaW5lIGNwdV9oYXNfNGtleAkJCTEKKyNkZWZpbmUgY3B1X2hhc18za19jYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzXzRrX2NhY2hlCQkxCisjZGVmaW5lIGNwdV9oYXNfdHgzOV9jYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzX2ZwdQkJCTAKKyNkZWZpbmUgY3B1X2hhc19jb3VudGVyCQkJMQorI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkJMQorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkJMQorI2RlZmluZSBjcHVfaGFzX3ZjZQkJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3AJCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJCTAKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCQkxCisjZGVmaW5lIGNwdV9oYXNfZWp0YWcJCQkxCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMTYJCQkwCisjZGVmaW5lIGNwdV9oYXNfbWRteAkJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzM2QJCQkwCisjZGVmaW5lIGNwdV9oYXNfc21hcnRtaXBzCQkwCisjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJCTAKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCQkwCisjZGVmaW5lIGNwdV9oYXNfaWNfZmlsbHNfZl9kYwkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMzMnIxCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjIJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzNjRyMQkJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIyCQkwCisjZGVmaW5lIGNwdV9oYXNfZHNwCQkJMAorI2RlZmluZSBjcHVfaGFzX21pcHNtdAkJCTAKKyNkZWZpbmUgY3B1X2hhc191c2VybG9jYWwJCTAKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4CQkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJCTAKKyNkZWZpbmUgY3B1X2hhc182NGJpdF96ZXJvX3JlZwkJMAorI2RlZmluZSBjcHVfaGFzX3ZpbnQJCQkwCisjZGVmaW5lIGNwdV9oYXNfdmVpYwkJCTAKKyNkZWZpbmUgY3B1X2hhc19pbmNsdXNpdmVfcGNhY2hlcwkwCisKKyNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKQkJMzIKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkJMzIKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQVUxWDAwX0NQVV9GRUFUVVJFX09WRVJSSURFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaAppbmRleCAyZGM2MWUwLi4zNGQ5YjcyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKQEAgLTUsNjUgKzUsMjkgQEAKIAogI2RlZmluZSBBVTFYWFhfR1BJT19CQVNFCTIwMAogCi1zdHJ1Y3QgYXUxeDAwX2dwaW8yIHsKLQl1MzIJZGlyOwotCXUzMglyZXNlcnZlZDsKLQl1MzIJb3V0cHV0OwotCXUzMglwaW5zdGF0ZTsKLQl1MzIJaW50ZW47Ci0JdTMyCWVuYWJsZTsKLX07CisvKiBHUElPIGJhbmsgMSBvZmZzZXRzICovCisjZGVmaW5lIEFVMTAwMF9HUElPMV9UUklfT1VUCTB4MDEwMAorI2RlZmluZSBBVTEwMDBfR1BJTzFfT1VUCTB4MDEwOAorI2RlZmluZSBBVTEwMDBfR1BJTzFfU1QJCTB4MDExMAorI2RlZmluZSBBVTEwMDBfR1BJTzFfQ0xSCTB4MDEwQwogCi1leHRlcm4gaW50IGF1MXh4eF9ncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiB2b2lkIGF1MXh4eF9ncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOwotZXh0ZXJuIGludCBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7Ci1leHRlcm4gaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKKy8qIEdQSU8gYmFuayAyIG9mZnNldHMgKi8KKyNkZWZpbmUgQVUxMDAwX0dQSU8yX0RJUgkweDAwCisjZGVmaW5lIEFVMTAwMF9HUElPMl9SU1ZECTB4MDQKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX09VVAkweDA4CisjZGVmaW5lIEFVMTAwMF9HUElPMl9TVAkJMHgwQworI2RlZmluZSBBVTEwMDBfR1BJTzJfSU5UCTB4MTAKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX0VOCQkweDE0CiAKKyNkZWZpbmUgR1BJTzJfT1VUX0VOX01BU0sJMHgwMDAxMDAwMAogCi0vKiBXcmFwcGVycyBmb3IgdGhlIGFyY2gtbmV1dHJhbCBHUElPIEFQSSAqLworI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlOVUxMCiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fcmVxdWVzdCh1bnNpZ25lZCBncGlvLCBjb25zdCBjaGFyICpsYWJlbCkKLXsKLQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi0JcmV0dXJuIDA7Ci19CisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlIF9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUgX19ncGlvX3NldF92YWx1ZQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLwotfQorI2RlZmluZSBncGlvX2NhbnNsZWVwIF9fZ3Bpb19jYW5zbGVlcAogCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JcmV0dXJuIGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBhdTF4eHhfZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JYXUxeHh4X2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gZ3BpbzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaXJxKQotewotCXJldHVybiBpcnE7Ci19Ci0KLS8qIEZvciBjYW5zbGVlcCAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KIAogI2VuZGlmIC8qIF9BVTFYWFhfR1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaAppbmRleCBkOGZmNGNkLi4xNzg0ZmRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaApAQCAtMzEsMjQgKzMxLDI4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAwKTsKKwlzc2JfZ3Bpb19vdXRlbigmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywgMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworCXNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwaW9faW50bWFzayh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBncGlvX2ludG1hc2sodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXJldHVybiBzc2JfZ3Bpb19pbnRtYXNrKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAotCQkJCXZhbHVlID8gMSA8PCBncGlvIDogMCk7CisJc3NiX2dwaW9faW50bWFzaygmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywKKwkJCSB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwaW9fcG9sYXJpdHkodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ3Bpb19wb2xhcml0eSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX3BvbGFyaXR5KCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAotCQkJCSB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXNzYl9ncGlvX3BvbGFyaXR5KCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAorCQkJICB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaAppbmRleCA1NWQ0ODE1Li4wNzU0NzIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpCShub2RlKQogI2RlZmluZSBub2RlX3RvX2NwdW1hc2sobm9kZSkJKGh1Yl9kYXRhKG5vZGUpLT5oX2NwdXMpCiAjZGVmaW5lIGNwdW1hc2tfb2Zfbm9kZShub2RlKQkoJmh1Yl9kYXRhKG5vZGUpLT5oX2NwdXMpCi0jZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpCShjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSkpCiBzdHJ1Y3QgcGNpX2J1czsKIGV4dGVybiBpbnQgcGNpYnVzX3RvX25vZGUoc3RydWN0IHBjaV9idXMgKik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCmluZGV4IDdmMGIwMzQuLmMwZGExYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaApAQCAtNzEsOCArNzEsNiBAQAogCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fQ09SSUQgKCgoKih2b2xhdGlsZSB1MzIgKilpb3JlbWFwKE1JUFNfUkVWSVNJT05fUkVHLCA0KSkgPj4gMTApICYgMHgzZikKIAotZXh0ZXJuIGludCBtaXBzX3JldmlzaW9uX2NvcmlkOwotCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9PVEhFUgkgICAwCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDCSAgIDEKICNkZWZpbmUgTUlQU19SRVZJU0lPTl9TQ09OX1NPQ0lUU0NQCSAgIDIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAtb3BzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCmluZGV4IDQzYzIwN2U3Li42NGZmYzAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAtb3BzLmgKQEAgLTE1LDYgKzE1LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAorc3RydWN0IHRhc2tfc3RydWN0OworCiBzdHJ1Y3QgcGxhdF9zbXBfb3BzIHsKIAl2b2lkICgqc2VuZF9pcGlfc2luZ2xlKShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKIAl2b2lkICgqc2VuZF9pcGlfbWFzaykoY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAwODg0OTQ3Li41YjYwYTA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtNzYsNyArNzYsNyBAQAogCQkiMjoJCQkJCQkJXG4iCiAJCSIJLnN1YnNlY3Rpb24gMgkJCQkJXG4iCiAJCSI0OglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgotCQkiNToJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKKwkJIglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNjoJYm5legklW3RpY2tldF0sIDZiCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgMQkJCQlcbiIKQEAgLTg1LDcgKzg1LDcgQEAKIAkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCi0JCSIJYgk1YgkJCQkJXG4iCisJCSIJYgk0YgkJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKQEAgLTExMyw3ICsxMTMsNyBAQAogCQkiCSBsbAklW3RpY2tldF0sICVbdGlja2V0X3B0cl0JCVxuIgogCQkiCQkJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKLQkJIjU6CXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCisJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJIglhbmRpCSVbdGlja2V0XSwgJVt0aWNrZXRdLCAweDFmZmYJCVxuIgogCQkiCWJlcQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgMmIJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVtteV90aWNrZXRdLCAlW3RpY2tldF0JXG4iCi0JCSIJYgk1YgkJCQkJXG4iCisJCSIJYgk0YgkJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDEJCQlcbiIKIAkJIgkucHJldmlvdXMJCQkJCVxuIgogCQkiCS5zZXQgcG9wCQkJCQlcbiIKQEAgLTQ4MCw2ICs0ODAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQogCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYmNiYjhkNi4uNzk1NmU2OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTQsMTIgKzQsMTggQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5IGJ5IFJhbGYgQmFlY2hsZQorICogQ29weXJpZ2h0IChDKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywKKyAqICAgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUKICAqIENvcHlyaWdodCAoQykgMTk5OSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KICNpZm5kZWYgX0FTTV9UWVBFU19ICiAjZGVmaW5lIF9BU01fVFlQRVNfSAogCi0jaWYgX01JUFNfU1pMT05HID09IDY0CisvKgorICogV2UgZG9uJ3QgdXNlIGludC1sNjQuaCBmb3IgdGhlIGtlcm5lbCBhbnltb3JlIGJ1dCBzdGlsbCB1c2UgaXQgZm9yCisgKiB1c2Vyc3BhY2UgdG8gYXZvaWQgY29kZSBjaGFuZ2VzLgorICovCisjaWYgKF9NSVBTX1NaTE9ORyA9PSA2NCkgJiYgIWRlZmluZWQoX19LRVJORUxfXykKICMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWw2NC5oPgogI2Vsc2UKICMgaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBhNzNlMTUzLi40MDAwNTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNTAsMTYgKzM1MCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDMyNykKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMzI4KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMzI5KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMzMwKQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDMzMSkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzMxCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMzMQogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02NTYsMTYgKzY1OCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDI4NikKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMjg3KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMjg4KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMjg5KQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDI5MCkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyODgKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkwCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjg4CisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI5MAogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtOTY2LDE2ICs5NzAsMTggQEAKICNkZWZpbmUgX19OUl9kdXAzCQkJKF9fTlJfTGludXggKyAyOTApCiAjZGVmaW5lIF9fTlJfcGlwZTIJCQkoX19OUl9MaW51eCArIDI5MSkKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQkoX19OUl9MaW51eCArIDI5MikKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9MaW51eCArIDI5MykKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfTGludXggKyAyOTQpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkyCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI5NAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI5MgorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjk0CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2lycS5jIGIvYXJjaC9taXBzL2phenovaXJxLmMKaW5kZXggMDM5NjVjYi4uZDliNmE1YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovaXJxLmMKKysrIGIvYXJjaC9taXBzL2phenovaXJxLmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcjQwMzBfdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gcjQwMzBfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrCQk9IENQVV9NQVNLX0NQVTAsCiAJLm5hbWUJCT0gIlI0MDMwIHRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwppbmRleCBjNjcyYzA4Li5mMGZkNjM2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKKysrIGIvYXJjaC9taXBzL2phenovamF6emRtYS5jCkBAIC02OCw4ICs2OCw3IEBACiAJICovCiAJcGd0YmwgPSAoVkRNQV9QR1RCTF9FTlRSWSAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsCiAJCQkJCQkgICAgZ2V0X29yZGVyKFZETUFfUEdUQkxfU0laRSkpOwotCWlmICghcGd0YmwpCi0JCUJVRygpOworCUJVR19PTighcGd0YmwpOwogCWRtYV9jYWNoZV93YmFja19pbnYoKHVuc2lnbmVkIGxvbmcpcGd0YmwsIFZETUFfUEdUQkxfU0laRSk7CiAJcGd0YmwgPSAoVkRNQV9QR1RCTF9FTlRSWSAqKUtTRUcxQUREUihwZ3RibCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCmluZGV4IGI4MjA2NjEuLmE1MTgyYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwpAQCAtMTQ0LDcgKzE0NCw2IEBACiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwogCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7Ci0JYWN0aW9uLT5tYXNrCT0gY3B1bWFza19vZl9jcHUoY3B1KTsKIAlhY3Rpb24tPm5hbWUJPSBuYW1lOwogCWFjdGlvbi0+ZGV2X2lkCT0gY2Q7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwppbmRleCBhMmVlYmFhLi4zNDBmNTNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCkBAIC0xNDMsNyArMTQzLDYgQEAKIAogCWFjdGlvbi0+aGFuZGxlcgk9IHNpYnl0ZV9jb3VudGVyX2hhbmRsZXI7CiAJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVTsKLQlhY3Rpb24tPm1hc2sJPSBjcHVtYXNrX29mX2NwdShjcHUpOwogCWFjdGlvbi0+bmFtZQk9IG5hbWU7CiAJYWN0aW9uLT5kZXZfaWQJPSBjZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggMWJkYmNhZC4uYjEzYjhlYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0xODMsMTMgKzE4Myw3IEBACiAJY2FzZSBDUFVfVFg0OVhYOgogCQljcHVfd2FpdCA9IHI0a193YWl0X2lycW9mZjsKIAkJYnJlYWs7Ci0JY2FzZSBDUFVfQVUxMDAwOgotCWNhc2UgQ1BVX0FVMTEwMDoKLQljYXNlIENQVV9BVTE1MDA6Ci0JY2FzZSBDUFVfQVUxNTUwOgotCWNhc2UgQ1BVX0FVMTIwMDoKLQljYXNlIENQVV9BVTEyMTA6Ci0JY2FzZSBDUFVfQVUxMjUwOgorCWNhc2UgQ1BVX0FMQ0hFTVk6CiAJCWNwdV93YWl0ID0gYXUxa193YWl0OwogCQlicmVhazsKIAljYXNlIENQVV8yMEtDOgpAQCAtNzgzLDM3ICs3NzcsMzAgQEAKIAlzd2l0Y2ggKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYwMCkgewogCWNhc2UgUFJJRF9JTVBfQVUxX1JFVjE6CiAJY2FzZSBQUklEX0lNUF9BVTFfUkVWMjoKKwkJYy0+Y3B1dHlwZSA9IENQVV9BTENIRU1ZOwogCQlzd2l0Y2ggKChjLT5wcm9jZXNzb3JfaWQgPj4gMjQpICYgMHhmZikgewogCQljYXNlIDA6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTAwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTEwMDAiOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxNTAwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTUwMCI7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTExMDA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMTAwIjsKIAkJCWJyZWFrOwogCQljYXNlIDM6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTU1MDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTE1NTAiOwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMjAwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTIwMCI7Ci0JCQlpZiAoKGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmYpID09IDIpIHsKLQkJCQljLT5jcHV0eXBlID0gQ1BVX0FVMTI1MDsKKwkJCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZikgPT0gMikKIAkJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMjUwIjsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDU6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTIxMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTEyMTAiOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwYW5pYygiVW5rbm93biBBdSBDb3JlISIpOworCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MXh4eCI7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwppbmRleCBmNGQxODc4Li42ODk3MTllIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCkBAIC05OCw3ICs5OCw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCkBAIC0xMjEsNyArMTIwLDYgQEAKIAljZC0+bWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweEYsIGNkKTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2QpOwogCi0JaXJxMC5tYXNrID0gY3B1bWFza19vZl9jcHUoY3B1KTsKIAlzZXR1cF9pcnEoMCwgJmlycTApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjU5LmMKaW5kZXggNDEzYmQxZC4uMDFjMDg4NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTkuYwpAQCAtMzA2LDcgKzMwNiw2IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycTIgPSB7CiAJLmhhbmRsZXIgPSBub19hY3Rpb24sCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImNhc2NhZGUiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKaW5kZXggOTYzYzE2ZC4uNmE4Y2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCkBAIC0xNDAsMTQgKzE0MCwxNiBAQAogCiAJCXN3aXRjaCAoaW1wLT5pbV90eXBlKSB7CiAJCWNhc2UgTVNDMDFfSVJRX0VER0U6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxYmFzZStuLCAmbXNjX2VkZ2VpcnFfdHlwZSk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnFiYXNlICsgbiwKKwkJCQkmbXNjX2VkZ2VpcnFfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJaWYgKGNwdV9oYXNfdmVpYykKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCBNU0MwMV9JQ19TVVBfRURHRV9CSVQpOwogCQkJZWxzZQogCQkJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtuKjgsIE1TQzAxX0lDX1NVUF9FREdFX0JJVCB8IGltcC0+aW1fbHZsKTsKIAkJCWJyZWFrOwogCQljYXNlIE1TQzAxX0lSUV9MRVZFTDoKLQkJCXNldF9pcnFfY2hpcChpcnFiYXNlK24sICZtc2NfbGV2ZWxpcnFfdHlwZSk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnFiYXNlK24sCisJCQkJJm1zY19sZXZlbGlycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgMCk7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycV9jcHUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCmluZGV4IDBlZTI1NjcuLjU1YzhhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkgKi8KIAlpZiAoY3B1X2hhc19taXBzbXQpCiAJCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2Jhc2UgKyAyOyBpKyspCi0JCQlzZXRfaXJxX2NoaXAoaSwgJm1pcHNfbXRfY3B1X2lycV9jb250cm9sbGVyKTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmbWlwc19tdF9jcHVfaXJxX2NvbnRyb2xsZXIsCisJCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOwogCiAJZm9yIChpID0gaXJxX2Jhc2UgKyAyOyBpIDwgaXJxX2Jhc2UgKyA4OyBpKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmbWlwc19jcHVfaXJxX2NvbnRyb2xsZXIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDJhNDcyNzEuLjYyNDJiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC0xMzMsOSArMTMzLDkgQEAKIAlyZXR1cm4gc3lzX2Z0cnVuY2F0ZShmZCwgbWVyZ2VfNjQoYTIsIGEzKSk7CiB9CiAKLVNZU0NBTExfREVGSU5FNSgzMl9sbHNlZWssIHVuc2lnbmVkIGxvbmcsIGZkLCB1bnNpZ25lZCBsb25nLCBvZmZzZXRfaGlnaCwKLQl1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LCBsb2ZmX3QgX191c2VyICosIHJlc3VsdCwKLQl1bnNpZ25lZCBsb25nLCBvcmlnaW4pCitTWVNDQUxMX0RFRklORTUoMzJfbGxzZWVrLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9mZnNldF9oaWdoLAorCQl1bnNpZ25lZCBpbnQsIG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiwgcmVzdWx0LAorCQl1bnNpZ25lZCBpbnQsIG9yaWdpbikKIHsKIAlyZXR1cm4gc3lzX2xsc2VlayhmZCwgb2Zmc2V0X2hpZ2gsIG9mZnNldF9sb3csIHJlc3VsdCwgb3JpZ2luKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggY2EyZTQwMi4uMWVhYWE0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIHsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggOWFiNzBjMy4uMGIzMWI5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNjUwLDYgKzY1MCw4IEBACiAJc3lzCXN5c19kdXAzCQkzCiAJc3lzCXN5c19waXBlMgkJMgogCXN5cwlzeXNfaW5vdGlmeV9pbml0MQkxCisJc3lzCXN5c19wcmVhZHYJCTYJLyogNDMzMCAqLworCXN5cwlzeXNfcHdyaXRldgkJNgogCS5lbmRtCiAKIAkvKiBXZSBwcmUtY29tcHV0ZSB0aGUgbnVtYmVyIG9mIF9pbnN0cnVjdGlvbl8gYnl0ZXMgbmVlZGVkIHRvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IDliNDY5ODYuLmM2NDdmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00ODcsNCArNDg3LDYgQEAKIAlQVFIJc3lzX2R1cDMKIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYJCQkvKiA1MzkwICovCiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IGY2MWQ2YjAuLmMyYzE2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTQxMyw0ICs0MTMsNiBAQAogCVBUUglzeXNfZHVwMwkJCS8qIDUyOTAgKi8KIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNuMzJfY2FsbF90YWJsZSwuLXN5c24zMl9jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNjA5OTdmMS4uMDAyZmFjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNTMzLDQgKzUzMyw2IEBACiAJUFRSCXN5c19kdXAzCiAJUFRSCXN5c19waXBlMgogCVBUUglzeXNfaW5vdGlmeV9pbml0MQorCVBUUgljb21wYXRfc3lzX3ByZWFkdgkJLyogNDMzMCAqLworCVBUUgljb21wYXRfc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKaW5kZXggNDQzMGExZi4uMjk1MGI5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwpAQCAtMjc3LDcgKzI3Nyw4IEBACiAJICogbm90IHNlbGVjdGVkLiBPbmNlIHRoYXQgZG9uZSB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSBsb3cgYm91bmQKIAkgKiBvZiB1c2FibGUgbWVtb3J5LgogCSAqLwotCXJlc2VydmVkX2VuZCA9IG1heChpbml0X2luaXRyZCgpLCBQRk5fVVAoX19wYV9zeW1ib2woJl9lbmQpKSk7CisJcmVzZXJ2ZWRfZW5kID0gbWF4KGluaXRfaW5pdHJkKCksCisJCQkgICAodW5zaWduZWQgbG9uZykgUEZOX1VQKF9fcGFfc3ltYm9sKCZfZW5kKSkpOwogCiAJLyoKIAkgKiBtYXhfbG93X3BmbiBpcyBub3QgYSBudW1iZXIgb2YgcGFnZXMuIFRoZSBudW1iZXIgb2YgcGFnZXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC11cC5jCmluZGV4IGVhZDZjMzAuLjg3OGUzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtdXAuYwpAQCAtMTMsNyArMTMsNyBAQAogLyoKICAqIFNlbmQgaW50ZXItcHJvY2Vzc29yIGludGVycnVwdAogICovCi12b2lkIHVwX3NlbmRfaXBpX3NpbmdsZShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQorc3RhdGljIHZvaWQgdXBfc2VuZF9pcGlfc2luZ2xlKGludCBjcHUsIHVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJcGFuaWMoS0VSTl9FUlIgIiVzIGNhbGxlZCIsIF9fZnVuY19fKTsKIH0KQEAgLTI3LDMxICsyNywzMSBAQAogICogIEFmdGVyIHdlJ3ZlIGRvbmUgaW5pdGlhbCBib290LCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhbGxvdyB0aGUKICAqICBib2FyZCBjb2RlIHRvIGNsZWFuIHVwIHN0YXRlLCBpZiBuZWVkZWQKICAqLwotdm9pZCBfX2NwdWluaXQgdXBfaW5pdF9zZWNvbmRhcnkodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1cF9pbml0X3NlY29uZGFyeSh2b2lkKQogewogfQogCi12b2lkIF9fY3B1aW5pdCB1cF9zbXBfZmluaXNoKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgdXBfc21wX2ZpbmlzaCh2b2lkKQogewogfQogCiAvKiBIb29rIGZvciBhZnRlciBhbGwgQ1BVcyBhcmUgb25saW5lICovCi12b2lkIHVwX2NwdXNfZG9uZSh2b2lkKQorc3RhdGljIHZvaWQgdXBfY3B1c19kb25lKHZvaWQpCiB7CiB9CiAKIC8qCiAgKiBGaXJtd2FyZSBDUFUgc3RhcnR1cCBob29rCiAgKi8KLXZvaWQgX19jcHVpbml0IHVwX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1cF9ib290X3NlY29uZGFyeShpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiB7CiB9CiAKLXZvaWQgX19pbml0IHVwX3NtcF9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHVwX3NtcF9zZXR1cCh2b2lkKQogewogfQogCi12b2lkIF9faW5pdCB1cF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQorc3RhdGljIHZvaWQgX19pbml0IHVwX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IDNkYTk0NzAuLmM5Mzc1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi12b2xhdGlsZSBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7CS8qIEJpdG1hc2sgb2Ygc3RhcnRlZCBzZWNvbmRhcmllcyAqLworc3RhdGljIHZvbGF0aWxlIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsJLyogQml0bWFzayBvZiBzdGFydGVkIHNlY29uZGFyaWVzICovCiBpbnQgX19jcHVfbnVtYmVyX21hcFtOUl9DUFVTXTsJCS8qIE1hcCBwaHlzaWNhbCB0byBsb2dpY2FsICovCiBpbnQgX19jcHVfbG9naWNhbF9tYXBbTlJfQ1BVU107CQkvKiBNYXAgbG9naWNhbCB0byBwaHlzaWNhbCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggMjlmYWRhYy4uZTgzZGExNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMTI3Nyw4ICsxMjc3LDcgQEAKIAl1MzIgKnc7CiAJdW5zaWduZWQgY2hhciAqYjsKIAotCWlmICghY3B1X2hhc192ZWljICYmICFjcHVfaGFzX3ZpbnQpCi0JCUJVRygpOworCUJVR19PTighY3B1X2hhc192ZWljICYmICFjcHVfaGFzX3ZpbnQpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewogCQloYW5kbGVyID0gKHVuc2lnbmVkIGxvbmcpIGRvX2RlZmF1bHRfdmk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMgYi9hcmNoL21pcHMvbGFzYXQvaW50ZXJydXB0LmMKaW5kZXggZDFhYzdhMi4uMTM1M2ZiMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xhc2F0L2ludGVycnVwdC5jCisrKyBiL2FyY2gvbWlwcy9sYXNhdC9pbnRlcnJ1cHQuYwpAQCAtMTA0LDcgKzEwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGNhc2NhZGUgPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGVtb3RlL2xtMmUvaXJxLmMgYi9hcmNoL21pcHMvbGVtb3RlL2xtMmUvaXJxLmMKaW5kZXggM2UwYjdiZS4uMWQwYTA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xlbW90ZS9sbTJlL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sZW1vdGUvbG0yZS9pcnEuYwpAQCAtOTIsNyArOTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vYy1yNGsuYyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCmluZGV4IDg3MWU4MjguLjU4ZDkwNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS9jLXI0ay5jCkBAIC0xMDI2LDEzICsxMDI2LDcgQEAKIAkJYy0+aWNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfVlRBRzsKIAkJYnJlYWs7CiAKLQljYXNlIENQVV9BVTEwMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTEwMDoKLQljYXNlIENQVV9BVTE1NTA6Ci0JY2FzZSBDUFVfQVUxMjAwOgotCWNhc2UgQ1BVX0FVMTIxMDoKLQljYXNlIENQVV9BVTEyNTA6CisJY2FzZSBDUFVfQUxDSEVNWToKIAkJYy0+aWNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfSUNfRl9EQzsKIAkJYnJlYWs7CiAJfQpAQCAtMTI0NCw3ICsxMjM4LDcgQEAKIAkvKgogCSAqIEF1MTEwMCBlcnJhdGEgYWN0dWFsbHkga2VlcHMgc2lsZW5jZSBhYm91dCB0aGlzIGJpdCwgc28gd2Ugc2V0IGl0CiAJICoganVzdCBpbiBjYXNlIGZvciB0aG9zZSByZXZpc2lvbnMgdGhhdCByZXF1aXJlIGl0IHRvIGJlIHNldCBhY2NvcmRpbmcKLQkgKiB0byBhcmNoL21pcHMvYXUxMDAwL2NvbW1vbi9jcHV0YWJsZS5jCisJICogdG8gdGhlIChub3cgZ29uZSkgY3B1IHRhYmxlLgogCSAqLwogCWNhc2UgMHgwMjAzMDIwMDogLyogQXUxMTAwIEFCICovCiAJY2FzZSAweDAyMDMwMjAxOiAvKiBBdTExMDAgQkEgKi8KQEAgLTEzMTQsMTEgKzEzMDgsMTAgQEAKIAkJYnJlYWs7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIGNhdGNoIHRoZSBlYXJseSBBbGNoZW15IFNPQ3Mgd2l0aAotCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZS4uLgorCSAqIHRoZSB3cml0ZS1vbmx5IGNvX2NvbmZpZy5vZCBiaXQgYW5kIHNldCBpdCBiYWNrIHRvIG9uZSBvbjoKKwkgKiBBdTEwMDAgcmV2IERBLCBIQSwgSEI7ICBBdTExMDAgQUIsIEJBLCBCQywgQXUxNTAwIEFCCiAJICovCi0JY2FzZSBDUFVfQVUxMDAwOiAvKiByZXYuIERBLCBIQSwgSEIgKi8KLQljYXNlIENQVV9BVTExMDA6IC8qIHJldi4gQUIsIEJBLCBCQyA/PyAqLwotCWNhc2UgQ1BVX0FVMTUwMDogLyogcmV2LiBBQiAqLworCWNhc2UgQ1BVX0FMQ0hFTVk6CiAJCWF1MXgwMF9maXh1cF9jb25maWdfb2QoKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCmluZGV4IDhmMmNkOGUuLjQ0ODE2NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwpAQCAtMTcsOCArMTcsNyBAQAogCiB2b2lkIF9fa3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJQlVHKCk7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm47CiAJa3VubWFwX2hpZ2gocGFnZSk7CkBAIC00MywxMSArNDIsMTEgQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KLQlpZiAoIXB0ZV9ub25lKCooa21hcF9wdGUtaWR4KSkpCi0JCUJVRygpOworCUJVR19PTighcHRlX25vbmUoKihrbWFwX3B0ZSAtIGlkeCkpKTsKICNlbmRpZgogCXNldF9wdGUoa21hcF9wdGUtaWR4LCBta19wdGUocGFnZSwga21hcF9wcm90KSk7CiAJbG9jYWxfZmx1c2hfdGxiX29uZSgodW5zaWduZWQgbG9uZyl2YWRkcik7CkBAIC02Niw4ICs2NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTitpZHgpKQotCQlCVUcoKTsKKwlCVUdfT04odmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCkpOwogCiAJLyoKIAkgKiBmb3JjZSBvdGhlciBtYXBwaW5ncyB0byBPb3BzIGlmIHRoZXknbGwgdHJ5IHRvIGFjY2VzcwpAQCAtOTEsNiArODksNyBAQAogCiAJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogCXNldF9wdGUoa21hcF9wdGUtaWR4LCBwZm5fcHRlKHBmbiwga21hcF9wcm90KSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxMzdjMTRiLi5kOTM0ODk0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTMwNyw4ICszMDcsNyBAQAogCQkJCWlmIChwbWRfbm9uZSgqcG1kKSkgewogCQkJCQlwdGUgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKIAkJCQkJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXB0ZSkpOwotCQkJCQlpZiAocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpCi0JCQkJCQlCVUcoKTsKKwkJCQkJQlVHX09OKHB0ZSAhPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApKTsKIAkJCQl9CiAJCQkJdmFkZHIgKz0gUE1EX1NJWkU7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW9yZW1hcC5jIGIvYXJjaC9taXBzL21tL2lvcmVtYXAuYwppbmRleCA1OTk0NWI5Li4wYzQzMjQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKQEAgLTI3LDggKzI3LDcgQEAKIAllbmQgPSBhZGRyZXNzICsgc2l6ZTsKIAlpZiAoZW5kID4gUE1EX1NJWkUpCiAJCWVuZCA9IFBNRF9TSVpFOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKIAlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKIAlkbyB7CiAJCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKQEAgLTUyLDggKzUxLDcgQEAKIAlpZiAoZW5kID4gUEdESVJfU0laRSkKIAkJZW5kID0gUEdESVJfU0laRTsKIAlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOworCUJVR19PTihhZGRyZXNzID49IGVuZCk7CiAJZG8gewogCQlwdGVfdCAqIHB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyZXNzKTsKIAkJaWYgKCFwdGUpCkBAIC03NSw4ICs3Myw3IEBACiAJcGh5c19hZGRyIC09IGFkZHJlc3M7CiAJZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwogCWRvIHsKIAkJcHVkX3QgKnB1ZDsKIAkJcG1kX3QgKnBtZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggZjMzNWNmNi4uMDYxNWI2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTI5MiwxMyArMjkyLDYgQEAKIAljYXNlIENQVV9SNDMwMDoKIAljYXNlIENQVV81S0M6CiAJY2FzZSBDUFVfVFg0OVhYOgotCWNhc2UgQ1BVX0FVMTAwMDoKLQljYXNlIENQVV9BVTExMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTU1MDoKLQljYXNlIENQVV9BVTEyMDA6Ci0JY2FzZSBDUFVfQVUxMjEwOgotCWNhc2UgQ1BVX0FVMTI1MDoKIAljYXNlIENQVV9QUjQ0NTA6CiAJCXVhc21faV9ub3AocCk7CiAJCXRsYncocCk7CkBAIC0zMjEsNiArMzE0LDcgQEAKIAljYXNlIENQVV9SNTUwMDoKIAkJaWYgKG00a2NfdGxicF93YXIoKSkKIAkJCXVhc21faV9ub3AocCk7CisJY2FzZSBDUFVfQUxDSEVNWToKIAkJdGxidyhwKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKaW5kZXggNDgzMmFmMi4uNDc1MDM4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogaW50IGluaXRfZGVidWcgPSAwOwogCi1pbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKK3N0YXRpYyBpbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKIGludCBtaXBzX3JldmlzaW9uX3Njb25pZDsKIAogLyogQm9uaXRvNjQgc3lzdGVtIGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYwppbmRleCA3ZDA1ZTY4Li4wNGNlYmFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1iZXJyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctYmVyci5jCkBAIC02Niw3ICs2Niw3IEBACiAJcHJpbnRrKCJTbGljZSAlYyBnb3QgJWNiZSBhdCAweCVseFxuIiwgJ0EnICsgY3B1LCBkYXRhID8gJ2QnIDogJ2knLAogCSAgICAgICByZWdzLT5jcDBfZXBjKTsKIAlwcmludGsoIkh1YiBpbmZvcm1hdGlvbjpcbiIpOwotCXByaW50aygiRVJSX0lOVF9QRU5EID0gMHglMDZseFxuIiwgTE9DQUxfSFVCX0woUElfRVJSX0lOVF9QRU5EKSk7CisJcHJpbnRrKCJFUlJfSU5UX1BFTkQgPSAweCUwNmxseFxuIiwgTE9DQUxfSFVCX0woUElfRVJSX0lOVF9QRU5EKSk7CiAJZXJyc3QwID0gTE9DQUxfSFVCX0woY3B1ID8gUElfRVJSX1NUQVRVUzBfQiA6IFBJX0VSUl9TVEFUVVMwX0EpOwogCWVycnN0MSA9IExPQ0FMX0hVQl9MKGNwdSA/IFBJX0VSUl9TVEFUVVMxX0IgOiBQSV9FUlJfU1RBVFVTMV9BKTsKIAlkdW1wX2h1Yl9pbmZvcm1hdGlvbihlcnJzdDAsIGVycnN0MSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCmluZGV4IDY0NDU5ZTcuLjZjNWE2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCkBAIC0xNDMsOCArMTQzLDggQEAKIAlwZW5kMCA9IFJFTU9URV9IVUJfTChuYXNpZCwgUElfSU5UX1BFTkQwKTsKIAlwZW5kMSA9IFJFTU9URV9IVUJfTChuYXNpZCwgUElfSU5UX1BFTkQxKTsKIAotCXByaW50aygiUElfSU5UX01BU0swOiAlMTZseCBQSV9JTlRfTUFTSzE6ICUxNmx4XG4iLCBtYXNrMCwgbWFzazEpOwotCXByaW50aygiUElfSU5UX1BFTkQwOiAlMTZseCBQSV9JTlRfUEVORDE6ICUxNmx4XG4iLCBwZW5kMCwgcGVuZDEpOworCXByaW50aygiUElfSU5UX01BU0swOiAlMTZMeCBQSV9JTlRfTUFTSzE6ICUxNkx4XG4iLCBtYXNrMCwgbWFzazEpOworCXByaW50aygiUElfSU5UX1BFTkQwOiAlMTZMeCBQSV9JTlRfUEVORDE6ICUxNkx4XG4iLCBwZW5kMCwgcGVuZDEpOwogCXByaW50aygiXG5cbiIpOwogfQogCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJaWYgKGkgPT0gMTAwMCkgewogCQkJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkKIAkJCQlpZiAoTk9ERVBEQShub2RlKS0+ZHVtcF9jb3VudCA9PSAwKSB7Ci0JCQkJCWNwdSA9IG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpOworCQkJCQljcHUgPSBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7CiAJCQkJCWZvciAobj0wOyBuIDwgQ05PREVfTlVNX0NQVVMobm9kZSk7IGNwdSsrLCBuKyspIHsKIAkJCQkJCUNQVU1BU0tfU0VUQihubWllZF9jcHVzLCBjcHUpOwogCQkJCQkJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKaW5kZXggMGQ2YjY2Ni4uODNhMGIzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItaXJxLmMKQEAgLTExNSwxNCArMTE1LDEyIEBACiBzdHJ1Y3QgaXJxYWN0aW9uIG1lbWVycl9pcnEgPSB7CiAJLmhhbmRsZXIgPSBjcmltZV9tZW1lcnJfaW50ciwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJDUklNRSBtZW1vcnkgZXJyb3IiLAogfTsKIAogc3RydWN0IGlycWFjdGlvbiBjcHVlcnJfaXJxID0gewogCS5oYW5kbGVyID0gY3JpbWVfY3B1ZXJyX2ludHIsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiQ1JJTUUgQ1BVIGVycm9yIiwKIH07CiAKQEAgLTMyNSwxNiArMzIzLDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBtYWNlX2ludDsKIAotCXN3aXRjaCAoaXJxKSB7Ci0JY2FzZSBNQUNFSVNBX1BBUkFMTEVMX0lSUToKLQljYXNlIE1BQ0VJU0FfU0VSSUFMMV9URE1BUFJfSVJROgotCWNhc2UgTUFDRUlTQV9TRVJJQUwyX1RETUFQUl9JUlE6Ci0JCS8qIGVkZ2UgdHJpZ2dlcmVkICovCi0JCW1hY2VfaW50ID0gbWFjZS0+cGVyaWYuY3RybC5pc3RhdDsKLQkJbWFjZV9pbnQgJj0gfigxIDw8IChpcnEgLSBNQUNFSVNBX0FVRElPX1NXX0lSUSkpOwotCQltYWNlLT5wZXJpZi5jdHJsLmlzdGF0ID0gbWFjZV9pbnQ7Ci0JCWJyZWFrOwotCX0KKwkvKiBlZGdlIHRyaWdnZXJlZCAqLworCW1hY2VfaW50ID0gbWFjZS0+cGVyaWYuY3RybC5pc3RhdDsKKwltYWNlX2ludCAmPSB+KDEgPDwgKGlycSAtIE1BQ0VJU0FfQVVESU9fU1dfSVJRKSk7CisJbWFjZS0+cGVyaWYuY3RybC5pc3RhdCA9IG1hY2VfaW50OworCiAJZGlzYWJsZV9tYWNlaXNhX2lycShpcnEpOwogfQogCkBAIC0zNDQsNyArMzM3LDE2IEBACiAJCWVuYWJsZV9tYWNlaXNhX2lycShpcnEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9pbnRlcnJ1cHQgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9sZXZlbF9pbnRlcnJ1cHQgPSB7CisJLm5hbWUJCT0gIklQMzIgTUFDRSBJU0EiLAorCS5hY2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKKwkubWFzawkJPSBkaXNhYmxlX21hY2Vpc2FfaXJxLAorCS5tYXNrX2Fjawk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCisJLnVubWFzawkJPSBlbmFibGVfbWFjZWlzYV9pcnEsCisJLmVuZAkJPSBlbmRfbWFjZWlzYV9pcnEsCit9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGlwMzJfbWFjZWlzYV9lZGdlX2ludGVycnVwdCA9IHsKIAkubmFtZQkJPSAiSVAzMiBNQUNFIElTQSIsCiAJLmFjawkJPSBtYXNrX2FuZF9hY2tfbWFjZWlzYV9pcnEsCiAJLm1hc2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKQEAgLTUwMCwyNyArNTAyLDUwIEBACiAJZm9yIChpcnEgPSBDUklNRV9JUlFfQkFTRTsgaXJxIDw9IElQMzJfSVJRX01BWDsgaXJxKyspIHsKIAkJc3dpdGNoIChpcnEpIHsKIAkJY2FzZSBNQUNFX1ZJRF9JTjFfSVJRIC4uLiBNQUNFX1BDSV9CUklER0VfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCZpcDMyX21hY2VfaW50ZXJydXB0LAorCQkJCWhhbmRsZV9sZXZlbF9pcnEsICJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBNQUNFUENJX1NDU0kwX0lSUSAuLi4gIE1BQ0VQQ0lfU0hBUkVEMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmaXAzMl9tYWNlcGNpX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmlwMzJfbWFjZXBjaV9pbnRlcnJ1cHQsIGhhbmRsZV9sZXZlbF9pcnEsCisJCQkJImxldmVsIik7CiAJCQlicmVhazsKKwogCQljYXNlIENSSU1FX0dCRTBfSVJRIC4uLiBDUklNRV9HQkUzX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKIAkJY2FzZSBDUklNRV9DUFVFUlJfSVJROgogCQljYXNlIENSSU1FX01FTUVSUl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfbGV2ZWxfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmY3JpbWVfbGV2ZWxfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9SRV9FTVBUWV9FX0lSUSAuLi4gQ1JJTUVfUkVfSURMRV9FX0lSUToKIAkJY2FzZSBDUklNRV9TT0ZUMF9JUlEgLi4uIENSSU1FX1NPRlQyX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKKwogCQljYXNlIENSSU1FX1ZJQ0VfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNyaW1lX2VkZ2VfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmY3JpbWVfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAkJCWJyZWFrOworCisJCWNhc2UgTUFDRUlTQV9QQVJBTExFTF9JUlE6CisJCWNhc2UgTUFDRUlTQV9TRVJJQUwxX1RETUFQUl9JUlE6CisJCWNhc2UgTUFDRUlTQV9TRVJJQUwyX1RETUFQUl9JUlE6CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmlwMzJfbWFjZWlzYV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLAorCQkJCSJlZGdlIik7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZWlzYV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2Vpc2FfbGV2ZWxfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCmluZGV4IGNhOTNlY2YuLjgyOGNlMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLW1lbW9yeS5jCkBAIC0zNiw3ICszNiw3IEBACiAJCWlmIChiYXNlICsgc2l6ZSA+ICgyNTYgPDwgMjApKQogCQkJYmFzZSArPSBDUklNRV9ISV9NRU1fQkFTRTsKIAotCQlwcmludGsoIkNSSU1FIE1DOiBiYW5rICV1IGJhc2UgMHglMDE2bHggc2l6ZSAlbHVNaUJcbiIsCisJCXByaW50aygiQ1JJTUUgTUM6IGJhbmsgJXUgYmFzZSAweCUwMTZMeCBzaXplICVMdU1pQlxuIiwKIAkJCWJhbmssIGJhc2UsIHNpemUgPj4gMjApOwogCQlhZGRfbWVtb3J5X3JlZ2lvbihiYXNlLCBzaXplLCBCT09UX01FTV9SQU0pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwppbmRleCAxMmI0NjVkLi4zNTIzNTJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBCQ00xNDgwX05SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJmJjbTE0ODBfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmJjbTE0ODBfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCQliY20xNDgwX2lycV9vd25lcltpXSA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwppbmRleCA4MDhhYzI5Li5jMDhmZjU4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0IxMjUwX05SX0lSUVM7IGkrKykgewotCQlzZXRfaXJxX2NoaXAoaSwgJnNiMTI1MF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc2IxMjUwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2IxMjUwX2lycV9vd25lcltpXSA9IDA7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9hMjByLmMgYi9hcmNoL21pcHMvc25pL2EyMHIuYwppbmRleCAzZjhjZjVlLi43ZGQ3NmZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL2EyMHIuYworKysgYi9hcmNoL21pcHMvc25pL2EyMHIuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSBTTklfQTIwUl9JUlFfQkFTRSArIDIgOyBpIDwgU05JX0EyMFJfSVJRX0JBU0UgKyA4OyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmYTIwcl9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmYTIwcl9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gYTIwcl9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CiAJc2V0dXBfaXJxKFNOSV9BMjBSX0lSUV9CQVNFICsgMywgJnNuaV9pc2FfaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpbXQuYyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwppbmRleCA4MzQ2NTBmLi43NGU2YzY3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaW10LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2ltdC5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCS8qIEFjdHVhbGx5IHdlJ3ZlIGdvdCBtb3JlIGludGVycnVwdHMgdG8gaGFuZGxlIC4uLiAgKi8KIAlmb3IgKGkgPSBQQ0lNVF9JUlFfSU5UMjsgaSA8PSBQQ0lNVF9JUlFfU0NTSTsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnBjaW10X2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZwY2ltdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gc25pX3BjaW10X2h3aW50OwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlExfElFX0lSUTMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS9wY2l0LmMgYi9hcmNoL21pcHMvc25pL3BjaXQuYwppbmRleCBlNWYxMmNmLi4wNzFhOTU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3BjaXQuYworKysgYi9hcmNoL21pcHMvc25pL3BjaXQuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCWZvciAoaSA9IFNOSV9QQ0lUX0lOVF9TVEFSVDsgaSA8PSBTTklfUENJVF9JTlRfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmcGNpdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHID0gMDsKIAlzbmlfaHdpbnQgPSBzbmlfcGNpdF9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMSk7CkBAIC0yNTksNyArMjU5LDcgQEAKIAogCW1pcHNfY3B1X2lycV9pbml0KCk7CiAJZm9yIChpID0gU05JX1BDSVRfSU5UX1NUQVJUOyBpIDw9IFNOSV9QQ0lUX0lOVF9FTkQ7IGkrKykKLQkJc2V0X2lycV9jaGlwKGksICZwY2l0X2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZwY2l0X2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkqKHZvbGF0aWxlIHUzMiAqKVNOSV9QQ0lUX0lOVF9SRUcgPSAweDQwMDAwMDAwOwogCXNuaV9od2ludCA9IHNuaV9wY2l0X2h3aW50X2NwbHVzOwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcm0yMDAuYyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwppbmRleCA1MzEwYWE3Li41ZTY4NzgxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3JtMjAwLmMKKysrIGIvYXJjaC9taXBzL3NuaS9ybTIwMC5jCkBAIC0zNTksNyArMzU5LDggQEAKICAqIElSUTIgaXMgY2FzY2FkZSBpbnRlcnJ1cHQgdG8gc2Vjb25kIGludGVycnVwdCBjb250cm9sbGVyCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHNuaV9ybTIwMF9pcnEyID0gewotCW5vX2FjdGlvbiwgMCwgQ1BVX01BU0tfTk9ORSwgImNhc2NhZGUiLCBOVUxMLCBOVUxMCisJLmhhbmRsZXIgPSBub19hY3Rpb24sCisJLm5hbWUgPSAiY2FzY2FkZSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNuaV9ybTIwMF9waWMxX3Jlc291cmNlID0gewpAQCAtNDg3LDcgKzQ4OCw3IEBACiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAkvKiBBY3R1YWxseSB3ZSd2ZSBnb3QgbW9yZSBpbnRlcnJ1cHRzIHRvIGhhbmRsZSAuLi4gICovCiAJZm9yIChpID0gU05JX1JNMjAwX0lOVF9TVEFSVDsgaSA8PSBTTklfUk0yMDBfSU5UX0VORDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnJtMjAwX2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZybTIwMF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gc25pX3JtMjAwX2h3aW50OwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlEwKTsKIAlzZXR1cF9pcnEoU05JX1JNMjAwX0lOVF9TVEFSVCArIDAsICZzbmlfcm0yMDBfaTgyNTlBX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnIGIvYXJjaC9taXBzL3R4eDkvS2NvbmZpZwppbmRleCAyMjZlOGJiLi4wZGI3Y2YzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy90eHg5L0tjb25maWcKQEAgLTIwLDcgKzIwLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIFRPU0hJQkFfSk1SMzkyNwogCWJvb2wgIlRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKaW5kZXggOTJkZDFhMC4uOWNjMzg5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaXJxLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY2FzY2FkZV9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBub19hY3Rpb24sCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiY2FzY2FkZSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGIyOGM5YTYuLjIzNGNmMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKICAqIHNldCB1cCB0aGUga2VybmVsIHN0YWNrIGZvciBhIG5ldyB0aHJlYWQgYW5kIGNvcHkgYXJjaC1zcGVjaWZpYyB0aHJlYWQKICAqIGNvbnRyb2wgaW5mb3JtYXRpb24KICAqLwotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAogCQl1bnNpZ25lZCBsb25nIGNfdXNwLCB1bnNpZ25lZCBsb25nIHVzdGtfc2l6ZSwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqa3JlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAva2VybmVsL3RpbWUuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdGltZS5jCmluZGV4IGU0NjA2NTguLjM5NWNhZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdGltZS5jCkBAIC0zNyw3ICszNyw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnEgPSB7CiAJLmhhbmRsZXIJPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfVElNRVIsCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAidGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggYWFjZjExZC4uOTAzOGYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC05LDkgKzksMTMgQEAKIAlkZWZfYm9vbCB5CiAJc2VsZWN0IEhBVkVfSURFCiAJc2VsZWN0IEhBVkVfT1BST0ZJTEUKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIgaWYgNjRCSVQKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIgaWYgNjRCSVQKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVCBpZiA2NEJJVAogCXNlbGVjdCBSVENfQ0xBU1MKLQlzZWxlY3QgUlRDX0RSVl9QQVJJU0MKKwlzZWxlY3QgUlRDX0RSVl9HRU5FUklDCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEJVRwogCWhlbHAKIAkgIFRoZSBQQS1SSVNDIG1pY3JvcHJvY2Vzc29yIGlzIGRlc2lnbmVkIGJ5IEhld2xldHQtUGFja2FyZCBhbmQgdXNlZAogCSAgaW4gbWFueSBvZiB0aGVpciB3b3Jrc3RhdGlvbnMgJiBzZXJ2ZXJzIChIUDkwMDAgNzAwIGFuZCA4MDAgc2VyaWVzLApAQCAtNzUsNiArNzksOSBAQAogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJZGVmX2Jvb2wgeQogCitjb25maWcgSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQKKyAgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgSVJRX1BFUl9DUFUKIAlib29sCiAJZGVmYXVsdCB5CkBAIC04Myw2ICs5MCw5IEBACiBjb25maWcgUE0KIAlib29sCiAKK2NvbmZpZyBTVEFDS1RSQUNFX1NVUFBPUlQKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBJU0FfRE1BX0FQSQogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQppbmRleCAwZDQyODI3Li5kYTZmNjY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9NYWtlZmlsZQorKysgYi9hcmNoL3BhcmlzYy9NYWtlZmlsZQpAQCAtNTYsNyArNTYsOSBAQAogCiAjIFdpdGhvdXQgdGhpcywgImxkIC1yIiByZXN1bHRzIGluIC50ZXh0IHNlY3Rpb25zIHRoYXQgYXJlIHRvbyBiaWcKICMgKD4gMHg0MDAwMCkgZm9yIGJyYW5jaGVzIHRvIHJlYWNoIHN0dWJzLgotY2ZsYWdzLXkJKz0gLWZmdW5jdGlvbi1zZWN0aW9ucworaWZuZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyAgY2ZsYWdzLXkJKz0gLWZmdW5jdGlvbi1zZWN0aW9ucworZW5kaWYKIAogIyBzZWxlY3Qgd2hpY2ggcHJvY2Vzc29yIHRvIG9wdGltaXNlIGZvcgogY2ZsYWdzLSQoQ09ORklHX1BBNzEwMCkJCSs9IC1tYXJjaD0xLjEgLW1zY2hlZHVsZT03MTAwCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IGVkYmZlMjUuLmFkYTNlNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2F0b21pYy5oCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBTaW5jZSAiYSIgaXMgdXN1YWxseSBhbiBhZGRyZXNzLCB1c2Ugb25lIHNwaW5sb2NrIHBlciBjYWNoZWxpbmUuCiAgKi8KICMgIGRlZmluZSBBVE9NSUNfSEFTSF9TSVpFIDQKLSMgIGRlZmluZSBBVE9NSUNfSEFTSChhKSAoJihfX2F0b21pY19oYXNoWyAoKCh1bnNpZ25lZCBsb25nKSBhKS9MMV9DQUNIRV9CWVRFUykgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSBdKSkKKyMgIGRlZmluZSBBVE9NSUNfSEFTSChhKSAoJihfX2F0b21pY19oYXNoWyAoKCh1bnNpZ25lZCBsb25nKSAoYSkpL0wxX0NBQ0hFX0JZVEVTKSAmIChBVE9NSUNfSEFTSF9TSVpFLTEpIF0pKQogCiBleHRlcm4gcmF3X3NwaW5sb2NrX3QgX19hdG9taWNfaGFzaFtBVE9NSUNfSEFTSF9TSVpFXSBfX2xvY2tfYWxpZ25lZDsKIApAQCAtMjIyLDEzICsyMjIsMTMgQEAKIAogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKIAotI2RlZmluZSBhdG9taWNfYWRkKGksdikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAoKGludClpKSwodikpKSkKLSNkZWZpbmUgYXRvbWljX3N1YihpLHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkpCisjZGVmaW5lIGF0b21pY19hZGQoaSx2KQkoKHZvaWQpKF9fYXRvbWljX2FkZF9yZXR1cm4oICgoaW50KShpKSksKHYpKSkpCisjZGVmaW5lIGF0b21pY19zdWIoaSx2KQkoKHZvaWQpKF9fYXRvbWljX2FkZF9yZXR1cm4oLSgoaW50KShpKSksKHYpKSkpCiAjZGVmaW5lIGF0b21pY19pbmModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgIDEsKHYpKSkpCiAjZGVmaW5lIGF0b21pY19kZWModikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAgLTEsKHYpKSkpCiAKLSNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpaSksKHYpKSkKLSNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljX2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpKGkpKSwodikpKQorI2RlZmluZSBhdG9taWNfc3ViX3JldHVybihpLHYpCShfX2F0b21pY19hZGRfcmV0dXJuKC0oKGludCkoaSkpLCh2KSkpCiAjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAgIDEsKHYpKSkKICNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICAtMSwodikpKQogCkBAIC0yODksMTMgKzI4OSwxMyBAQAogCXJldHVybiB2LT5jb3VudGVyOwogfQogCi0jZGVmaW5lIGF0b21pYzY0X2FkZChpLHYpCSgodm9pZCkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAoKHM2NClpKSwodikpKSkKLSNkZWZpbmUgYXRvbWljNjRfc3ViKGksdikJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KWkpLCh2KSkpKQorI2RlZmluZSBhdG9taWM2NF9hZGQoaSx2KQkoKHZvaWQpKF9fYXRvbWljNjRfYWRkX3JldHVybiggKChzNjQpKGkpKSwodikpKSkKKyNkZWZpbmUgYXRvbWljNjRfc3ViKGksdikJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KShpKSksKHYpKSkpCiAjZGVmaW5lIGF0b21pYzY0X2luYyh2KQkJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAgMSwodikpKSkKICNkZWZpbmUgYXRvbWljNjRfZGVjKHYpCQkoKHZvaWQpKF9fYXRvbWljNjRfYWRkX3JldHVybiggIC0xLCh2KSkpKQogCi0jZGVmaW5lIGF0b21pYzY0X2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAoKHM2NClpKSwodikpKQotI2RlZmluZSBhdG9taWM2NF9zdWJfcmV0dXJuKGksdikJKF9fYXRvbWljNjRfYWRkX3JldHVybigtKChzNjQpaSksKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfYWRkX3JldHVybihpLHYpCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICgoczY0KShpKSksKHYpKSkKKyNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLHYpCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KShpKSksKHYpKSkKICNkZWZpbmUgYXRvbWljNjRfaW5jX3JldHVybih2KQkJKF9fYXRvbWljNjRfYWRkX3JldHVybiggICAxLCh2KSkpCiAjZGVmaW5lIGF0b21pYzY0X2RlY19yZXR1cm4odikJCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAtMSwodikpKQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggYjdjYTZkYy4uNzI0Mzk1MSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtOTcsNiArOTcsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BBOFgwMAogLyogT25seSBwYTg4MDAsIHBhODkwMCBuZWVkcyB0aGlzICovCisKKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorCiAjZGVmaW5lIEFSQ0hfSEFTX0tNQVAKIAogdm9pZCBrdW5tYXBfcGFyaXNjKHZvaWQgKmFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3ZmE2NzU3Li45YzgwMmViIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTY4LDYgKzE2OCwxNiBAQAogCV9fdTY0CWdwOwogfSBFbGY2NF9GZGVzYzsKIAorI2lmZGVmIF9fS0VSTkVMX18KKworI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBFbGZfRmRlc2MJRWxmNjRfRmRlc2MKKyNlbHNlCisjZGVmaW5lIEVsZl9GZGVzYwlFbGYzMl9GZGVzYworI2VuZGlmIC8qQ09ORklHXzY0QklUKi8KKworI2VuZGlmIC8qX19LRVJORUxfXyovCisKIC8qIExlZ2FsIHZhbHVlcyBmb3IgcF90eXBlIGZpZWxkIG9mIEVsZjMyX1BoZHIvRWxmNjRfUGhkci4gICovCiAKICNkZWZpbmUgUFRfSFBfVExTCQkoUFRfTE9PUyArIDB4MCkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhMDVkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX0FTTV9QQVJJU0NfRlRSQUNFX0gKKyNkZWZpbmUgX0FTTV9QQVJJU0NfRlRSQUNFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB2b2lkIG1jb3VudCh2b2lkKTsKKworLyoKKyAqIFN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgZm9yIGZ1bmN0aW9ucyBvZiBhIHRocmVhZC4KKyAqIFVzZWQgaW4gc3RydWN0IHRocmVhZF9pbmZvCisgKi8KK3N0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHsKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIGZ1bmM7CisJdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOworfTsKKworLyoKKyAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi4KKyAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuCisgKiBEZWZpbmVkIGluIGVudHJ5LlMKKyAqLworZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BBUklTQ19GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGMzOTQxZjAuLjdiYzUxMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTM2LDE2ICszNiw3IEBACiAgKi8KICNkZWZpbmUgU1RSSUNUX01NX1RZUEVDSEVDS1MKICNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwotdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsKLSNpZiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZnV0dXJlX2ZsYWdzOwotIC8qIFhYWDogaXQncyBwb3NzaWJsZSB0byByZW1vdmUgZnV0dXJlX2ZsYWdzIGFuZCBjaGFuZ2UgQklUU19QRVJfUFRFX0VOVFJZCi0JIHRvIDIsIGJ1dCB0aGVuIHN0cmFuZ2VseSB0aGUgaWRlbnRpY2FsIDMyYml0IGtlcm5lbCBib290cyBvbiBhCi0JIGMzMDAwKHBhMjApLCBidXQgbm90IGFueSBsb25nZXIgb24gYSA3MTUocGExMSkuCi0JIFN0aWxsIGludmVzdGlnYXRpbmcuLi4gSGVsZ2VELgotICAqLwotI2VuZGlmCi19IHB0ZV90OyAvKiBlaXRoZXIgMzIgb3IgNjRiaXQgKi8KK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7IC8qIGVpdGhlciAzMiBvciA2NGJpdCAqLwogCiAvKiBOT1RFOiBldmVuIG9uIDY0IGJpdHMsIHRoZXNlIGVudHJpZXMgYXJlIF9fdTMyIGJlY2F1c2Ugd2UgYWxsb2NhdGUKICAqIHRoZSBwbWQgYW5kIHBnZCBpbiBaT05FX0RNQSAoaS5lLiB1bmRlciA0R0IpICovCkBAIC0xMTEsNyArMTAyLDcgQEAKICNkZWZpbmUgQklUU19QRVJfUE1EX0VOVFJZCTIKICNkZWZpbmUgQklUU19QRVJfUEdEX0VOVFJZCTIKICNlbHNlCi0jZGVmaW5lIEJJVFNfUEVSX1BURV9FTlRSWQkzCisjZGVmaW5lIEJJVFNfUEVSX1BURV9FTlRSWQkyCiAjZGVmaW5lIEJJVFNfUEVSX1BNRF9FTlRSWQkyCiAjZGVmaW5lIEJJVFNfUEVSX1BHRF9FTlRSWQlCSVRTX1BFUl9QTURfRU5UUlkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAppbmRleCA0MzBmMWFlLi40Y2E1MTBiIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApAQCAtNDksNiArNDksOCBAQAogI2RlZmluZSBQRENfTU9ERUxfQ1BVX0lECTYJLyogcmV0dXJucyBjcHUtaWQgKG9ubHkgbmV3ZXIgbWFjaGluZXMhKSAqLwogI2RlZmluZSBQRENfTU9ERUxfQ0FQQUJJTElUSUVTCTcJLyogcmV0dXJucyBPUzMyL09TNjQtZmxhZ3MJKi8KIC8qIFZhbHVlcyBmb3IgUERDX01PREVMX0NBUEFCSUxJVElFUyBub24tZXF1aXZhbGVudCB2aXJ0dWFsIGFsaWFzaW5nIHN1cHBvcnQgKi8KKyNkZWZpbmUgIFBEQ19NT0RFTF9PUzY0CQkJKDEgPDwgMCkKKyNkZWZpbmUgIFBEQ19NT0RFTF9PUzMyCQkJKDEgPDwgMSkKICNkZWZpbmUgIFBEQ19NT0RFTF9JT1BESVJfRkRDCQkoMSA8PCAyKQogI2RlZmluZSAgUERDX01PREVMX05WQV9NQVNLCQkoMyA8PCA0KQogI2RlZmluZSAgUERDX01PREVMX05WQV9TVVBQT1JURUQJKDAgPDwgNCkKQEAgLTM0MSw2ICszNDMsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gLyogZm9yIF9fUEFHRV9PRkZTRVQgKi8KKwogZXh0ZXJuIGludCBwZGNfdHlwZTsKIAogLyogVmFsdWVzIGZvciBwZGNfdHlwZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQ3MGE0YjguLmEyN2QyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUwLDExICs1MCw3IEBACiAJcHJpbnRrKCIlczolZDogYmFkIHBnZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKHVuc2lnbmVkIGxvbmcpcGdkX3ZhbChlKSkKIAogLyogVGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgaW5pdGlhbGx5IG1hcHBlZCBrZXJuZWwgbWVtb3J5ICovCi0jaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIEtFUk5FTF9JTklUSUFMX09SREVSCTI0CS8qIDAgdG8gMTw8MjQgPSAxNk1CICovCi0jZWxzZQotI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyMwkvKiAwIHRvIDE8PDIzID0gOE1CICovCi0jZW5kaWYKICNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfU0laRQkoMSA8PCBLRVJORUxfSU5JVElBTF9PUkRFUikKIAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKQEAgLTkxLDE2ICs4NywyNSBAQAogCiAvKiBEZWZpbml0aW9ucyBmb3IgMXN0IGxldmVsICovCiAjZGVmaW5lIFBHRElSX1NISUZUCShQTURfU0hJRlQgKyBCSVRTX1BFUl9QTUQpCisjaWYgKFBHRElSX1NISUZUICsgUEFHRV9TSElGVCArIFBHRF9PUkRFUiAtIEJJVFNfUEVSX1BHRF9FTlRSWSkgPiBCSVRTX1BFUl9MT05HCisjZGVmaW5lIEJJVFNfUEVSX1BHRAkoQklUU19QRVJfTE9ORyAtIFBHRElSX1NISUZUKQorI2Vsc2UKICNkZWZpbmUgQklUU19QRVJfUEdECShQQUdFX1NISUZUICsgUEdEX09SREVSIC0gQklUU19QRVJfUEdEX0VOVFJZKQorI2VuZGlmCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQogI2RlZmluZSBQVFJTX1BFUl9QR0QgICAgKDFVTCA8PCBCSVRTX1BFUl9QR0QpCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICAgICAgIFBUUlNfUEVSX1BHRAogCisjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIE1BWF9BRERSQklUUwkoUEdESVJfU0hJRlQgKyBCSVRTX1BFUl9QR0QpCiAjZGVmaW5lIE1BWF9BRERSRVNTCSgxVUwgPDwgTUFYX0FERFJCSVRTKQotCiAjZGVmaW5lIFNQQUNFSURfU0hJRlQJKE1BWF9BRERSQklUUyAtIDMyKQorI2Vsc2UKKyNkZWZpbmUgTUFYX0FERFJCSVRTCShCSVRTX1BFUl9MT05HKQorI2RlZmluZSBNQVhfQUREUkVTUwkoMVVMIDw8IE1BWF9BRERSQklUUykKKyNkZWZpbmUgU1BBQ0VJRF9TSElGVAkwCisjZW5kaWYKIAogLyogVGhpcyBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgaW5pdGlhbCBwYWdlcyB3ZSBuZWVkIGZvciB0aGUgaW5pdGlhbAogICogcGFnZSB0YWJsZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNmVmNGI3OC4uMjFlYjQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc21wLmgKQEAgLTI5LDcgKzI5LDggQEAKIGV4dGVybiB2b2lkIHNtcF9zZW5kX2FsbF9ub3Aodm9pZCk7CiAKIGV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7Ci1leHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spOworZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOworI2RlZmluZSBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzawogCiAjZW5kaWYgLyogIUFTU0VNQkxZICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IGYzZDIwOTAuLmZhZTAzZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTg3LDYgKzE4Nyw5IEBACiAJcmV0dXJuICFydy0+Y291bnRlcjsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDE2ZDNmYy4uNjdkYjA3MiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTEsMTAgKzExLDI1IEBACiAJCSAgIHByb2Nlc3MubyBwcm9jZXNzb3IubyBwZGNfY29ucy5vIHBkY19jaGFzc2lzLm8gdW53aW5kLm8gXAogCQkgICB0b3BvbG9neS5vCiAKK2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyMgRG8gbm90IHByb2ZpbGUgZGVidWcgYW5kIGxvd2xldmVsIHV0aWxpdGllcworQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9jYWNoZS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2lycS5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX3BhY2FjaGUubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9wZXJmLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfdHJhcHMubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV91bmFsaWduZWQubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV91bndpbmQubyA9IC1wZworZW5kaWYKKwogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KIG9iai0kKENPTkZJR19QQTExKQkrPSBwY2ktZG1hLm8KIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJKz0gbW9kdWxlLm8KIG9iai0kKENPTkZJR182NEJJVCkJKz0gYmluZm10X2VsZjMyLm8gc3lzX3BhcmlzYzMyLm8gc2lnbmFsMzIubworb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpKz0gc3RhY2t0cmFjZS5vCiAjIG9ubHkgc3VwcG9ydGVkIGZvciBQQ1gtVy9VIGluIDY0LWJpdCBtb2RlIGF0IHRoZSBtb21lbnQKIG9iai0kKENPTkZJR182NEJJVCkJKz0gcGVyZi5vIHBlcmZfYXNtLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCQkrPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL2VudHJ5LlMKaW5kZXggMGRiOWZkYy4uYWUzZTcwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC01MDUsNiArNTA1LDE4IEBACiAJU1RSRUcJCVxwdGUsMChccHRlcCkKIAkuZW5kbQogCisJLyogYml0c2hpZnQgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgUEZOIChiYXNlZCBvbiBrZXJuZWwncyBQQUdFX1NJWkUpCisJICogdG8gYSBDUFUgVExCIDRrIFBGTiAoNGsgPT4gMTIgYml0cyB0byBzaGlmdCkgKi8KKwkjZGVmaW5lIFBBR0VfQUREX1NISUZUICAoUEFHRV9TSElGVC0xMikKKworCS8qIERyb3AgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJ0IGFuZCBpZHRsYnQgKi8KKwkubWFjcm8JCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUKKwlleHRyZCx1CQlccHRlLCg2My1BU01fUEZOX1BURV9TSElGVCkrKDYzLTU4KStQQUdFX0FERF9TSElGVCxcCisJCQkJNjQtUEFHRV9TSElGVC1QQUdFX0FERF9TSElGVCxccHRlCisJZGVwZGkJCV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCw2MyxcCisJCQkJKDYzLTU4KStQQUdFX0FERF9TSElGVCxccHRlCisJLmVuZG0KKwogCS8qIENvbnZlcnQgdGhlIHB0ZSBhbmQgcHJvdCB0byB0bGIgaW5zZXJ0aW9uIHZhbHVlcy4gIEhvdwogCSAqIHRoaXMgaGFwcGVucyBpcyBxdWl0ZSBzdWJ0bGUsIHJlYWQgYmVsb3cgKi8KIAkubWFjcm8JCW1ha2VfaW5zZXJ0X3RsYglzcGMscHRlLHByb3QKQEAgLTU0NCw4ICs1NTYsNyBAQAogCWRlcGkJCTEsMTIsMSxccHJvdAogCiAJLyogRHJvcCBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYnQgYW5kIGlkdGxidCAqLwotCWV4dHJkLHUJCVxwdGUsKDYzLUFTTV9QRk5fUFRFX1NISUZUKSsoNjMtNTgpLDY0LVBBR0VfU0hJRlQsXHB0ZQotCWRlcGRpCQlfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsNjMsNjMtNTgsXHB0ZQorCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBccHRlCiAJLmVuZG0KIAogCS8qIElkZW50aWNhbCBtYWNybyB0byBtYWtlX2luc2VydF90bGIgYWJvdmUsIGV4Y2VwdCBpdApAQCAtNTYzLDggKzU3NCw4IEBACiAKIAkvKiBHZXQgcmlkIG9mIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlpdGxiYSAqLwogCi0JZGVwaQkJX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxULDMxLEFTTV9QRk5fUFRFX1NISUZULFxwdGUKLQlleHRydQkJXHB0ZSwyNCwyNSxccHRlCisJZGVwaQkJMCwzMSxBU01fUEZOX1BURV9TSElGVCxccHRlCisJU0hSUkVHCQlccHRlLChBU01fUEZOX1BURV9TSElGVC0oMzEtMjYpKSxccHRlCiAJLmVuZG0KIAogCS8qIFRoaXMgaXMgZm9yIElMUDMyIFBBMi4wIG9ubHkuICBUaGUgVExCIGluc2VydGlvbiBuZWVkcwpAQCAtMTI0NCwxMCArMTI1NSw5IEBACiAJZGVwZGkseiAgICAgICAgIDcsNywzLHByb3QKIAlkZXBkaSAgICAgICAgICAgMSwxMCwxLHByb3QKIAotCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCisJLyogRHJvcCBwcm90IGJpdHMgZnJvbSBwdGUgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYnQgKi8KKwljb252ZXJ0X2Zvcl90bGJfaW5zZXJ0MjAgcHRlCiAKLQlkZXBkaQkJMCw2MywxMixwdGUKLQlleHRyZCx1ICAgICAgICAgcHRlLDU2LDUyLHB0ZQogCWlkdGxidCAgICAgICAgICBwdGUscHJvdAogCiAJcmZpcgpAQCAtMTMzNyw4ICsxMzQ3LDggQEAKIAogCS8qIEdldCByaWQgb2YgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJhICovCiAKLQlkZXBpCQkwLDMxLDEyLHB0ZQotCWV4dHJ1CQlwdGUsMjQsMjUscHRlCisJZGVwaQkJMCwzMSxBU01fUEZOX1BURV9TSElGVCxwdGUKKwlTSFJSRUcJCXB0ZSwoQVNNX1BGTl9QVEVfU0hJRlQtKDMxLTI2KSkscHRlCiAKIAltZnNwCQklc3IxLHQwICAvKiBTYXZlIHNyMSBzbyB3ZSBjYW4gdXNlIGl0IGluIHRsYiBpbnNlcnRzICovCiAJbXRzcAkJc3BjLCVzcjEKQEAgLTE0MDMsMTAgKzE0MTMsOSBAQAogCWRlcGRpLHogICAgICAgICA3LDcsMyxwcm90CiAJZGVwZGkgICAgICAgICAgIDEsMTAsMSxwcm90CiAKLQkvKiBHZXQgcmlkIG9mIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlkdGxidCAqLworCS8qIERyb3AgcHJvdCBiaXRzIGZyb20gcHRlIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCisJY29udmVydF9mb3JfdGxiX2luc2VydDIwIHB0ZQogCi0JZGVwZGkJCTAsNjMsMTIscHRlCi0JZXh0cmQsdSAgICAgICAgIHB0ZSw1NiwzMixwdGUKIAlpZHRsYnQgICAgICAgICAgcHRlLHByb3QKIAogCXJmaXIKQEAgLTIxNzYsNiArMjE4NSwzMyBAQAogRU5EUFJPQyhzeXNjYWxsX2V4aXQpCiAKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKwkuaW1wb3J0IGZ0cmFjZV9mdW5jdGlvbl90cmFtcG9saW5lLGNvZGUKK0VOVFJZKF9tY291bnQpCisJY29weQklcjMsICVhcmcyCisJYglmdHJhY2VfZnVuY3Rpb25fdHJhbXBvbGluZQorCW5vcAorRU5EUFJPQyhfbWNvdW50KQorCitFTlRSWShyZXR1cm5fdG9faGFuZGxlcikKKwlsb2FkMzIJcmV0dXJuX3RyYW1wb2xpbmUsICVycAorCWNvcHkJJXJldDAsICVhcmcwCisJY29weQklcmV0MSwgJWFyZzEKKwliCWZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW5vcAorcmV0dXJuX3RyYW1wb2xpbmU6CisJY29weQklcmV0MCwgJXJwCisJY29weQklcjIzLCAlcmV0MAorCWNvcHkJJXIyNCwgJXJldDEKKworLmdsb2JsIGZ0cmFjZV9zdHViCitmdHJhY2Vfc3R1YjoKKwlidgklcjAoJXJwKQorCW5vcAorRU5EUFJPQyhyZXR1cm5fdG9faGFuZGxlcikKKyNlbmRpZgkvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCisKKwogZ2V0X3JlZ2lzdGVyOgogCS8qCiAJICogZ2V0X3JlZ2lzdGVyIGlzIHVzZWQgYnkgdGhlIG5vbiBhY2Nlc3MgdGxiIG1pc3MgaGFuZGxlcnMgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKaW5kZXggZjZkMjQxMi4uNGMyNDdlMCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMKQEAgLTUyNyw3ICs1MjcsMTEgQEAKICAgICAgICAgcGRjX3Jlc3VsdFswXSA9IDA7IC8qIHByZXNldCB6ZXJvIChjYWxsIG1heSBub3QgYmUgaW1wbGVtZW50ZWQhKSAqLwogICAgICAgICByZXR2YWwgPSBtZW1fcGRjX2NhbGwoUERDX01PREVMLCBQRENfTU9ERUxfQ0FQQUJJTElUSUVTLCBfX3BhKHBkY19yZXN1bHQpLCAwKTsKICAgICAgICAgY29udmVydF90b193aWRlKHBkY19yZXN1bHQpOwotICAgICAgICAqY2FwYWJpbGl0aWVzID0gcGRjX3Jlc3VsdFswXTsKKyAgICAgICAgaWYgKHJldHZhbCA9PSBQRENfT0spIHsKKyAgICAgICAgICAgICAgICAqY2FwYWJpbGl0aWVzID0gcGRjX3Jlc3VsdFswXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqY2FwYWJpbGl0aWVzID0gUERDX01PREVMX09TMzI7CisgICAgICAgIH0KICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGRjX2xvY2ssIGZsYWdzKTsKIAogICAgICAgICByZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzczNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBDb2RlIGZvciB0cmFjaW5nIGNhbGxzIGluIExpbnV4IGtlcm5lbC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CisgKgorICogYmFzZWQgb24gY29kZSBmb3IgeDg2IHdoaWNoIGlzOgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKgorICogZnV0dXJlIHBvc3NpYmxlIGVuaGFuY2VtZW50czoKKyAqIAktIGFkZCBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKyAqCS0gYWRkIENPTkZJR19TVEFDS19UUkFDRVIKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgorCisKKworI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKworLyogQWRkIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCitzdGF0aWMgaW50IHB1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKKwkJCQl1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpCit7CisJaW50IGluZGV4OworCisJaWYgKCFjdXJyZW50LT5yZXRfc3RhY2spCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBUaGUgcmV0dXJuIHRyYWNlIHN0YWNrIGlzIGZ1bGwgKi8KKwlpZiAoY3VycmVudC0+Y3Vycl9yZXRfc3RhY2sgPT0gRlRSQUNFX1JFVEZVTkNfREVQVEggLSAxKSB7CisJCWF0b21pY19pbmMoJmN1cnJlbnQtPnRyYWNlX292ZXJydW4pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWluZGV4ID0gKytjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKwliYXJyaWVyKCk7CisJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQgPSByZXQ7CisJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jID0gZnVuYzsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lID0gdGltZTsKKwkqZGVwdGggPSBpbmRleDsKKworCXJldHVybiAwOworfQorCisvKiBSZXRyaWV2ZSBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworc3RhdGljIHZvaWQgcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJaWYgKHVubGlrZWx5KGluZGV4IDwgMCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2hlcmUgdG8gZ28gKi8KKwkJKnJldCA9ICh1bnNpZ25lZCBsb25nKQorCQkJZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcigmcGFuaWMpOworCQlyZXR1cm47CisJfQorCisJKnJldCA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCXRyYWNlLT5mdW5jID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jOworCXRyYWNlLT5jYWxsdGltZSA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWU7CisJdHJhY2UtPm92ZXJydW4gPSBhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJdHJhY2UtPmRlcHRoID0gaW5kZXg7CisJYmFycmllcigpOworCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisKK30KKworLyoKKyAqIFNlbmQgdGhlIHRyYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIHJldHVybiBhZGRyZXNzLgorICovCit1bnNpZ25lZCBsb25nIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcih1bnNpZ25lZCBsb25nIHJldHZhbDAsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmV0dmFsMSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCB0cmFjZTsKKwl1bnNpZ25lZCBsb25nIHJldDsKKworCXBvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKKwl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCisJCXJldCA9ICh1bnNpZ25lZCBsb25nKQorCQkJZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcigmcGFuaWMpOworCX0KKworCS8qIEhBQ0s6IHdlIGhhbmQgb3ZlciB0aGUgb2xkIGZ1bmN0aW9ucycgcmV0dXJuIHZhbHVlcworCSAgIGluICVyMjMgYW5kICVyMjQuIEFzc2VtYmx5IGluIGVudHJ5LlMgd2lsbCB0YWtlIGNhcmUKKwkgICBhbmQgbW92ZSB0aG9zZSB0byB0aGVpciBmaW5hbCByZWdpc3RlcnMgJXJldDAgYW5kICVyZXQxICovCisJYXNtKCAiY29weSAlMCwgJSVyMjMgXG5cdCIKKwkgICAgICJjb3B5ICUxLCAlJXIyNCBcbiIgOiA6ICJyIiAocmV0dmFsMCksICJyIiAocmV0dmFsMSkgKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCisgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgorICovCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2luZ19ncmFwaF9wYXVzZSkpKQorCQlyZXR1cm47CisKKwlvbGQgPSAqcGFyZW50OworCSpwYXJlbnQgPSAodW5zaWduZWQgbG9uZykKKwkJICBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKCZyZXR1cm5fdG9faGFuZGxlcik7CisKKwlpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhvbGQpKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQkqcGFyZW50ID0gb2xkOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlpZiAocHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKKwkJCQlzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CisJCSpwYXJlbnQgPSBvbGQ7CisJCXJldHVybjsKKwl9CisKKwl0cmFjZS5mdW5jID0gc2VsZl9hZGRyOworCisJLyogT25seSB0cmFjZSBpZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBleHBlY3RzIHRvICovCisJaWYgKCFmdHJhY2VfZ3JhcGhfZW50cnkoJnRyYWNlKSkgeworCQljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCQkqcGFyZW50ID0gb2xkOworCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KKworCit2b2lkIGZ0cmFjZV9mdW5jdGlvbl90cmFtcG9saW5lKHVuc2lnbmVkIGxvbmcgcGFyZW50LAorCQkJCXVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyLAorCQkJCXVuc2lnbmVkIGxvbmcgb3JnX3NwX2dyMykKK3sKKwlleHRlcm4gZnRyYWNlX2Z1bmNfdCBmdHJhY2VfdHJhY2VfZnVuY3Rpb247CisKKwlpZiAoZnVuY3Rpb25fdHJhY2Vfc3RvcCkKKwkJcmV0dXJuOworCisJaWYgKGZ0cmFjZV90cmFjZV9mdW5jdGlvbiAhPSBmdHJhY2Vfc3R1YikgeworCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24ocGFyZW50LCBzZWxmX2FkZHIpOworCQlyZXR1cm47CisJfQorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwlpZiAoZnRyYWNlX2dyYXBoX2VudHJ5ICYmIGZ0cmFjZV9ncmFwaF9yZXR1cm4pIHsKKwkJdW5zaWduZWQgbG9uZyBzcDsKKwkJdW5zaWduZWQgbG9uZyAqcGFyZW50X3JwOworCisgICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY29weSAlJXIzMCwgJTAiIDogIj1yIihzcCkpOworCQkvKiBzYW5pdHkgY2hlY2s6IGlzIHN0YWNrIHBvaW50ZXIgd2hpY2ggd2UgZ290IGZyb20KKwkJICAgYXNzZW1ibGVyIGZ1bmN0aW9uIGluIGVudHJ5LlMgaW4gYSByZWFzb25hYmxlCisJCSAgIHJhbmdlIGNvbXBhcmVkIHRvIGN1cnJlbnQgc3RhY2sgcG9pbnRlcj8gKi8KKwkJaWYgKChzcCAtIG9yZ19zcF9ncjMpID4gMHg0MDApCisJCQlyZXR1cm47CisKKwkJLyogY2FsY3VsYXRlIHBvaW50ZXIgdG8gJXJwIGluIHN0YWNrICovCisJCXBhcmVudF9ycCA9ICh1bnNpZ25lZCBsb25nICopIG9yZ19zcF9ncjMgLSAweDEwOworCQkvKiBzYW5pdHkgY2hlY2s6IHBhcmVudF9ycCBzaG91bGQgaG9sZCBwYXJlbnQgKi8KKwkJaWYgKCpwYXJlbnRfcnAgIT0gcGFyZW50KQorCQkJcmV0dXJuOworCQkKKwkJcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHBhcmVudF9ycCwgc2VsZl9hZGRyKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorfQorCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKaW5kZXggMWM3NDBmNS4uNGVhNDIyOSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwpAQCAtMzExLDEyICszMTEsMTIgQEAKIAluZXh0X2NwdSsrOyAvKiBhc3NpZ24gdG8gIm5leHQiIENQVSB3ZSB3YW50IHRoaXMgYnVnZ2VyIG9uICovCiAKIAkvKiB2YWxpZGF0ZSBlbnRyeSAqLwotCXdoaWxlICgobmV4dF9jcHUgPCBOUl9DUFVTKSAmJgorCXdoaWxlICgobmV4dF9jcHUgPCBucl9jcHVfaWRzKSAmJgogCQkoIXBlcl9jcHUoY3B1X2RhdGEsIG5leHRfY3B1KS50eG5fYWRkciB8fAogCQkgIWNwdV9vbmxpbmUobmV4dF9jcHUpKSkKIAkJbmV4dF9jcHUrKzsKIAotCWlmIChuZXh0X2NwdSA+PSBOUl9DUFVTKSAKKwlpZiAobmV4dF9jcHUgPj0gbnJfY3B1X2lkcykgCiAJCW5leHRfY3B1ID0gMDsJLyogbm90aGluZyBlbHNlLCBhc3NpZ24gbW9uYXJjaCAqLwogCiAJcmV0dXJuIHR4bl9hZmZpbml0eV9hZGRyKHZpcnRfaXJxLCBuZXh0X2NwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOTAxMzI0My4uZWNkMWM1MCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtNjEsOSArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2lmIDAKQEAgLTExNSw4ICsxMTMsNiBAQAogCUVsZjMyX0FkZHIgYWRkcjsKIH07CiAKLSNkZWZpbmUgRWxmX0ZkZXNjCUVsZjMyX0ZkZXNjCi0KIHN0cnVjdCBzdHViX2VudHJ5IHsKIAlFbGYzMl9Xb3JkIGluc25zWzJdOyAvKiBlYWNoIHN0dWIgZW50cnkgaGFzIHR3byBpbnNucyAqLwogfTsKQEAgLTEyNSw4ICsxMjEsNiBAQAogCUVsZjY0X0FkZHIgYWRkcjsKIH07CiAKLSNkZWZpbmUgRWxmX0ZkZXNjCUVsZjY0X0ZkZXNjCi0KIHN0cnVjdCBzdHViX2VudHJ5IHsKIAlFbGY2NF9Xb3JkIGluc25zWzRdOyAvKiBlYWNoIHN0dWIgZW50cnkgaGFzIGZvdXIgaW5zbnMgKi8KIH07CkBAIC05MTYsMTUgKzkxMCwzIEBACiAJZGVyZWdpc3Rlcl91bndpbmRfdGFibGUobW9kKTsKIAltb2R1bGVfYnVnX2NsZWFudXAobW9kKTsKIH0KLQotI2lmZGVmIENPTkZJR182NEJJVAotdm9pZCAqZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcih2b2lkICpwdHIpCi17Ci0JRWxmNjRfRmRlc2MgKmRlc2MgPSBwdHI7Ci0Jdm9pZCAqcDsKLQotCWlmICghcHJvYmVfa2VybmVsX2FkZHJlc3MoJmRlc2MtPmFkZHIsIHApKQotCQlwdHIgPSBwOwotCXJldHVybiBwdHI7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYwppbmRleCAwZWVjZmJiLi5kZjY1MzY2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3BhcmlzY19rc3ltcy5jCkBAIC0xNTMsNSArMTUzLDEwIEBACiBFWFBPUlRfU1lNQk9MKHBmbm5pZF9tYXApOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCitleHRlcm4gdm9pZCBfbWNvdW50KHZvaWQpOworRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKKyNlbmRpZgorCiAvKiBmcm9tIHBhY2FjaGUuUyAtLSBuZWVkZWQgZm9yIGNvcHlfcGFnZSAqLwogRVhQT1JUX1NZTUJPTChjb3B5X3VzZXJfcGFnZV9hc20pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjgwZTAyYS4uNmY2OTEwMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00NiwxNCArNDYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9wZGMuaD4KICNpbmNsdWRlIDxhc20vcGRjX2NoYXNzaXMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCiAvKgogICogVGhlIGlkbGUgdGhyZWFkLiBUaGVyZSdzIG5vIHVzZWZ1bCB3b3JrIHRvIGJlCkBAIC0yMzEsOCArMjMyLDggQEAKIAkgICAKIAkgICBIb3dldmVyLCB0aGVzZSBsYXN0IDMgYXJncyBhcmUgb25seSBleGFtaW5lZAogCSAgIGlmIHRoZSBwcm9wZXIgZmxhZ3MgYXJlIHNldC4gKi8KLQlpbnQgX191c2VyICpjaGlsZF90aWRwdHI7Ci0JaW50IF9fdXNlciAqcGFyZW50X3RpZHB0cjsKKwlpbnQgX191c2VyICpwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5nclsyNF07CisJaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyICA9IChpbnQgX191c2VyICopcmVncy0+Z3JbMjJdOwogCiAJLyogdXNwIG11c3QgYmUgd29yZCBhbGlnbmVkLiAgVGhpcyBhbHNvIHByZXZlbnRzIHVzZXJzIGZyb20KIAkgKiBwYXNzaW5nIGluIHRoZSB2YWx1ZSAxICh3aGljaCBpcyB0aGUgc2lnbmFsIGZvciBhIHNwZWNpYWwKQEAgLTI0MywxNiArMjQ0LDYgQEAKIAlpZiAodXNwID09IDApCiAJICB1c3AgPSByZWdzLT5nclszMF07CiAKLQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9QQVJFTlRfU0VUVElEKQotCSAgcGFyZW50X3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy0+Z3JbMjRdOwotCWVsc2UKLQkgIHBhcmVudF90aWRwdHIgPSBOVUxMOwotCQotCWlmIChjbG9uZV9mbGFncyAmIChDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCkpCi0JICBjaGlsZF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MtPmdyWzIyXTsKLQllbHNlCi0JICBjaGlsZF90aWRwdHIgPSBOVUxMOwotCiAJcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIHVzcCwgcmVncywgMCwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKIH0KIApAQCAtMjYzLDcgKzI1NCw3IEBACiB9CiAKIGludAotY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2NvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCSAgICB1bnNpZ25lZCBsb25nIHVudXNlZCwJLyogaW4gaWE2NCB0aGlzIGlzICJ1c2VyX3N0YWNrX3NpemUiICovCiAJICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcHJlZ3MpCiB7CkBAIC00MDAsMyArMzkxLDE1IEBACiAJfSB3aGlsZSAoY291bnQrKyA8IDE2KTsKIAlyZXR1cm4gMDsKIH0KKworI2lmZGVmIENPTkZJR182NEJJVAordm9pZCAqZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcih2b2lkICpwdHIpCit7CisJRWxmNjRfRmRlc2MgKmRlc2MgPSBwdHI7CisJdm9pZCAqcDsKKworCWlmICghcHJvYmVfa2VybmVsX2FkZHJlc3MoJmRlc2MtPmFkZHIsIHApKQorCQlwdHIgPSBwOworCXJldHVybiBwdHI7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCBlY2I2MDkzLi5lMDlkMGY3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAlzdHJ1Y3QgY3B1aW5mb19wYXJpc2MgKnA7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKG51bV9vbmxpbmVfY3B1cygpID49IE5SX0NQVVMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibnVtX29ubGluZV9jcHVzKCkgPj0gTlJfQ1BVU1xuIik7CisJaWYgKG51bV9vbmxpbmVfY3B1cygpID49IG5yX2NwdV9pZHMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibnVtX29ubGluZV9jcHVzKCkgPj0gbnJfY3B1X2lkc1xuIik7CiAJCXJldHVybiAxOwogCX0KICNlbHNlCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkgKi8KICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGNwdWlkKSB7Ci0JCWNwdV9zZXQoY3B1aWQsIGNwdV9wcmVzZW50X21hcCk7CisJCXNldF9jcHVfcHJlc2VudChjcHVpZCwgdHJ1ZSk7CiAJCWNwdV91cChjcHVpZCk7CiAJfQogI2VuZGlmCkBAIC0zNjQsNiArMzY0LDEzIEBACiAJCQkJIGJvb3RfY3B1X2RhdGEuY3B1X2h6IC8gMTAwMDAwMCwKIAkJCQkgYm9vdF9jcHVfZGF0YS5jcHVfaHogJSAxMDAwMDAwICApOwogCisJCXNlcV9wcmludGYobSwgImNhcGFiaWxpdGllc1x0OiIpOworCQlpZiAoYm9vdF9jcHVfZGF0YS5wZGMuY2FwYWJpbGl0aWVzICYgUERDX01PREVMX09TMzIpCisJCQlzZXFfcHJpbnRmKG0sICIgb3MzMiIpOworCQlpZiAoYm9vdF9jcHVfZGF0YS5wZGMuY2FwYWJpbGl0aWVzICYgUERDX01PREVMX09TNjQpCisJCQlzZXFfcHJpbnRmKG0sICIgb3M2NCIpOworCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCiAJCXNlcV9wcmludGYobSwgIm1vZGVsXHRcdDogJXNcbiIKIAkJCQkibW9kZWwgbmFtZVx0OiAlc1xuIiwKIAkJCQkgYm9vdF9jcHVfZGF0YS5wZGMuc3lzX21vZGVsX25hbWUsCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKaW5kZXggOTk5NWQ3ZS4uMWZkMGYwYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMTEzLDE0ICsxMTQsMTQgQEAKIHsKIAkvKiBSRVZJU0lUIDogcmVkaXJlY3QgSS9PIEludGVycnVwdHMgdG8gYW5vdGhlciBDUFU/ICovCiAJLyogUkVWSVNJVCA6IGRvZXMgUE0gKmtub3cqIHRoaXMgQ1BVIGlzbid0IGF2YWlsYWJsZT8gKi8KLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBmYWxzZSk7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlmb3IgKDs7KQogCQk7CiB9CiAKIAotaXJxcmV0dXJuX3QKK2lycXJldHVybl90IF9faXJxX2VudHJ5CiBpcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkgCiB7CiAJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMjE0LDExICsyMTUsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNlbmRfSVBJX21hc2soY3B1bWFza190IG1hc2ssIGVudW0gaXBpX21lc3NhZ2VfdHlwZSBvcCkKK3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGVudW0gaXBpX21lc3NhZ2VfdHlwZSBvcCkKIHsKIAlpbnQgY3B1OwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQorCWZvcl9lYWNoX2NwdShjcHUsIG1hc2spCiAJCWlwaV9zZW5kKGNwdSwgb3ApOwogfQogCkBAIC0yNTcsNyArMjU4LDcgQEAKIAlzZW5kX0lQSV9hbGxidXRzZWxmKElQSV9OT1ApOwogfQogCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKK3ZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CiAJc2VuZF9JUElfbWFzayhtYXNrLCBJUElfQ0FMTF9GVU5DKTsKIH0KQEAgLTI5NiwxMyArMjk3LDE0IEBACiAJbWIoKTsKIAogCS8qIFdlbGwsIHN1cHBvcnQgMi40IGxpbnV4IHNjaGVtZSBhcyB3ZWxsLiAqLwotCWlmIChjcHVfdGVzdF9hbmRfc2V0KGNwdW51bSwgY3B1X29ubGluZV9tYXApKQorCWlmIChjcHVfaXNzZXQoY3B1bnVtLCBjcHVfb25saW5lX21hcCkpCiAJewogCQlleHRlcm4gdm9pZCBtYWNoaW5lX2hhbHQodm9pZCk7IC8qIGFyY2gvcGFyaXNjLi4uL3Byb2Nlc3MuYyAqLwogCiAJCXByaW50ayhLRVJOX0NSSVQgIkNQVSMlZCBhbHJlYWR5IGluaXRpYWxpemVkIVxuIiwgY3B1bnVtKTsKIAkJbWFjaGluZV9oYWx0KCk7CiAJfSAgCisJc2V0X2NwdV9vbmxpbmUoY3B1bnVtLCB0cnVlKTsKIAogCS8qIEluaXRpYWxpc2UgdGhlIGlkbGUgdGFzayBmb3IgdGhpcyBDUFUgKi8KIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKQEAgLTQyNCw4ICs0MjYsOCBAQAogCS8qIFNldHVwIEJTUCBtYXBwaW5ncyAqLwogCXByaW50ayhLRVJOX0lORk8gIlNNUDogYm9vdHN0cmFwIENQVSBJRCBpcyAlZFxuIiwgYm9vdHN0cmFwX3Byb2Nlc3Nvcik7CiAKLQljcHVfc2V0KGJvb3RzdHJhcF9wcm9jZXNzb3IsIGNwdV9vbmxpbmVfbWFwKTsKLQljcHVfc2V0KGJvb3RzdHJhcF9wcm9jZXNzb3IsIGNwdV9wcmVzZW50X21hcCk7CisJc2V0X2NwdV9vbmxpbmUoYm9vdHN0cmFwX3Byb2Nlc3NvciwgdHJ1ZSk7CisJc2V0X2NwdV9wcmVzZW50KGJvb3RzdHJhcF9wcm9jZXNzb3IsIHRydWUpOwogfQogCiAKQEAgLTQzNiw4ICs0MzgsNyBAQAogKi8KIHZvaWQgX19pbml0IHNtcF9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQogewotCWNwdXNfY2xlYXIoY3B1X3ByZXNlbnRfbWFwKTsKLQljcHVfc2V0KDAsIGNwdV9wcmVzZW50X21hcCk7CisJaW5pdF9jcHVfcHJlc2VudChjcHVtYXNrX29mKDApKTsKIAogCXBhcmlzY19tYXhfY3B1cyA9IG1heF9jcHVzOwogCWlmICghbWF4X2NwdXMpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N0YWNrdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmU5MTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogU3RhY2sgdHJhY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KKyAqICBiYXNlZCBvbiBhcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGJ5IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgorICogIGFuZCBwYXJpc2MgdW53aW5kIGZ1bmN0aW9ucyBieSBSYW5kb2xwaCBDaHVuZyA8dGF1c3FAZGViaWFuLm9yZz4KKyAqCisgKiAgVE9ETzogVXNlcnNwYWNlIHN0YWNrdHJhY2UgKENPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVCkKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKworc3RhdGljIHZvaWQgZHVtcF90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJc3RydWN0IHVud2luZF9mcmFtZV9pbmZvIGluZm87CisKKwkvKiBpbml0aWFsaXplIHVud2luZCBpbmZvICovCisJaWYgKHRhc2sgPT0gY3VycmVudCkgeworCQl1bnNpZ25lZCBsb25nIHNwOworCQlzdHJ1Y3QgcHRfcmVncyByOworSEVSRToKKwkJYXNtIHZvbGF0aWxlICgiY29weSAlJXIzMCwgJTAiIDogIj1yIihzcCkpOworCQltZW1zZXQoJnIsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCQlyLmlhb3FbMF0gPSAodW5zaWduZWQgbG9uZykmJkhFUkU7CisJCXIuZ3JbMl0gPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJCXIuZ3JbMzBdID0gc3A7CisJCXVud2luZF9mcmFtZV9pbml0KCZpbmZvLCB0YXNrLCAmcik7CisJfSBlbHNlIHsKKwkJdW53aW5kX2ZyYW1lX2luaXRfZnJvbV9ibG9ja2VkX3Rhc2soJmluZm8sIHRhc2spOworCX0KKworCS8qIHVud2luZCBzdGFjayBhbmQgc2F2ZSBlbnRyaWVzIGluIHN0YWNrX3RyYWNlIHN0cnVjdCAqLworCXRyYWNlLT5ucl9lbnRyaWVzID0gMDsKKwl3aGlsZSAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpIHsKKwkJaWYgKHVud2luZF9vbmNlKCZpbmZvKSA8IDAgfHwgaW5mby5pcCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKF9fa2VybmVsX3RleHRfYWRkcmVzcyhpbmZvLmlwKSkKKwkJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gaW5mby5pcDsKKwl9Cit9CisKKworLyoKKyAqIFNhdmUgc3RhY2stYmFja3RyYWNlIGFkZHJlc3NlcyBpbnRvIGEgc3RhY2tfdHJhY2UgYnVmZmVyLgorICovCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlkdW1wX3RyYWNlKGN1cnJlbnQsIHRyYWNlKTsKKwlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCisJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9zdGFja190cmFjZSk7CisKK3ZvaWQgc2F2ZV9zdGFja190cmFjZV90c2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UpCit7CisJZHVtcF90cmFjZSh0c2ssIHRyYWNlKTsKKwlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCisJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gVUxPTkdfTUFYOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2F2ZV9zdGFja190cmFjZV90c2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKaW5kZXggNjliNmVlYi4uNTlmYzFhNCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCkBAIC0zNjUsMTcgKzM2NSw1MSBAQAogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JCUxpZ2h0LXdlaWdodC1zeXNjYWxsIGNvZGUKKwkJMzIvNjQtYml0IExpZ2h0LVdlaWdodC1TeXNjYWxsIEFCSQogCi0JCXIyMCAtIGx3cyBudW1iZXIKLQkJcjI2LHIyNSxyMjQscjIzLHIyMiAtIElucHV0IHJlZ2lzdGVycwotCQlyMjggLSBGdW5jdGlvbiByZXR1cm4gcmVnaXN0ZXIKLQkJcjIxIC0gRXJyb3IgY29kZS4KKwkJKiAtIEluZGljYXRlcyBhIGhpbnQgZm9yIHVzZXJzcGFjZSBpbmxpbmUgYXNtCisJCWltcGxlbWVudGF0aW9ucy4KIAotCQlTY3JhY3RoOiBBbnkgb2YgdGhlIGFib3ZlIHRoYXQgYXJlbid0IGJlaW5nCi0JCWN1cnJlbnRseSB1c2VkLCBpbmNsdWRpbmcgcjEuIAorCQlTeXNjYWxsIG51bWJlciAoY2FsbGVyLXNhdmVzKQorCSAgICAgICAgLSAlcjIwCisJICAgICAgICAqIEluIGFzbSBjbG9iYmVyLgogCi0JCVJldHVybiBwb2ludGVyOiByMzEgKE5vdCB1c2FibGUpCisJCUFyZ3VtZW50IHJlZ2lzdGVycyAoY2FsbGVyLXNhdmVzKQorCSAgICAgICAgLSAlcjI2LCAlcjI1LCAlcjI0LCAlcjIzLCAlcjIyCisJICAgICAgICAqIEluIGFzbSBpbnB1dC4KKworCQlSZXR1cm4gcmVnaXN0ZXJzIChjYWxsZXItc2F2ZXMpCisJICAgICAgICAtICVyMjggKHJldHVybiksICVyMjEgKGVycm5vKQorCSAgICAgICAgKiBJbiBhc20gb3V0cHV0LgorCisJCUNhbGxlci1zYXZlcyByZWdpc3RlcnMKKwkgICAgICAgIC0gJXIxLCAlcjI3LCAlcjI5CisJICAgICAgICAtICVyMiAocmV0dXJuIHBvaW50ZXIpCisJICAgICAgICAtICVyMzEgKGJsZSBsaW5rIHJlZ2lzdGVyKQorCSAgICAgICAgKiBJbiBhc20gY2xvYmJlci4KKworCQlDYWxsZWUtc2F2ZXMgcmVnaXN0ZXJzCisJICAgICAgICAtICVyMy0lcjE4CisJICAgICAgICAtICVyMzAgKHN0YWNrIHBvaW50ZXIpCisJICAgICAgICAqIE5vdCBpbiBhc20gY2xvYmJlci4KKworCQlJZiB1c2Vyc3BhY2UgaXMgMzItYml0OgorCQlDYWxsZWUtc2F2ZXMgcmVnaXN0ZXJzCisJICAgICAgICAtICVyMTkgKDMyLWJpdCBQSUMgcmVnaXN0ZXIpCisKKwkJRGlmZmVyZW5jZXMgZnJvbSAzMi1iaXQgY2FsbGluZyBjb252ZW50aW9uOgorCQktIFN5c2NhbGwgbnVtYmVyIGluICVyMjAKKwkJLSBBZGRpdGlvbmFsIGFyZ3VtZW50IHJlZ2lzdGVyICVyMjIgKGFyZzQpCisJCS0gQ2FsbGVlLXNhdmVzICVyMTkuCisKKwkJSWYgdXNlcnNwYWNlIGlzIDY0LWJpdDoKKwkJQ2FsbGVlLXNhdmVzIHJlZ2lzdGVycworCQktICVyMjcgKDY0LWJpdCBQSUMgcmVnaXN0ZXIpCisKKwkJRGlmZmVyZW5jZXMgZnJvbSA2NC1iaXQgY2FsbGluZyBjb252ZW50aW9uOgorCQktIFN5c2NhbGwgbnVtYmVyIGluICVyMjAKKwkJLSBBZGRpdGlvbmFsIGFyZ3VtZW50IHJlZ2lzdGVyICVyMjIgKGFyZzQpCisJCS0gQ2FsbGVlLXNhdmVzICVyMjcuCiAKIAkJRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgZW50cnkgcGF0aDoKIApAQCAtNDczLDcgKzUwNyw4IEBACiAJYixuCWx3c19jb21wYXJlX2FuZF9zd2FwCiAjZWxzZQogCS8qIElmIHdlIGFyZSBub3QgYSA2NC1iaXQga2VybmVsLCB0aGVuIHdlIGRvbid0Ci0JICogaW1wbGVtZW50IGhhdmluZyA2NC1iaXQgaW5wdXQgcmVnaXN0ZXJzCisJICogaGF2ZSA2NC1iaXQgaW5wdXQgcmVnaXN0ZXJzLCBhbmQgY2FsbGluZworCSAqIHRoZSA2NC1iaXQgTFdTIENBUyByZXR1cm5zIEVOT1NZUy4KIAkgKi8KIAliLG4JbHdzX2V4aXRfbm9zeXMKICNlbmRpZgpAQCAtNjM1LDEyICs2NzAsMTUgQEAKIAkvKgogCQlBbGwgbGlnaHQtd2VpZ2h0LXN5c2NhbGwgYXRvbWljIG9wZXJhdGlvbnMgCiAJCXdpbGwgdXNlIHRoaXMgc2V0IG9mIGxvY2tzIAorCisJCU5PVEU6IFRoZSBsd3NfbG9ja19zdGFydCBzeW1ib2wgbXVzdCBiZQorCQlhdCBsZWFzdCAxNi1ieXRlIGFsaWduZWQgZm9yIHNhZmUgdXNlCisJCXdpdGggbGRjdy4KIAkqLwogCS5zZWN0aW9uIC5kYXRhCiAJLmFsaWduCVBBR0VfU0laRQogRU5UUlkobHdzX2xvY2tfc3RhcnQpCiAJLyogbHdzIGxvY2tzICovCi0JLmFsaWduIDE2CiAJLnJlcHQgMTYKIAkvKiBLZWVwIGxvY2tzIGFsaWduZWQgYXQgMTYtYnl0ZXMgKi8KIAkud29yZCAxCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwppbmRleCA5ZDQ2YzQzLi5kNGRkMDU2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC01Myw3ICs1NCw3IEBACiAgKiBoZWxkIG9mZiBmb3IgYW4gYXJiaXRyYXJpbHkgbG9uZyBwZXJpb2Qgb2YgdGltZSBieSBpbnRlcnJ1cHRzIGJlaW5nCiAgKiBkaXNhYmxlZCwgc28gd2UgbWF5IG1pc3Mgb25lIG9yIG1vcmUgdGlja3MuCiAgKi8KLWlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitpcnFyZXR1cm5fdCBfX2lycV9lbnRyeSB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXVuc2lnbmVkIGxvbmcgbm93OwogCXVuc2lnbmVkIGxvbmcgbmV4dF90aWNrOwpAQCAtMjE2LDE3ICsyMTcsMTQgQEAKIAlwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLml0X3ZhbHVlID0gbmV4dF90aWNrOwogfQogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19wYXJpc2NfZGV2ID0gewotCS5uYW1lID0gInJ0Yy1wYXJpc2MiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2dlbmVyaWNfZGV2ID0geworCS5uYW1lID0gInJ0Yy1nZW5lcmljIiwKIAkuaWQgPSAtMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX3BhcmlzY19kZXYpOwotCWlmIChyZXQgPCAwKQorCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19nZW5lcmljX2RldikgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBydGMgZGV2aWNlLi4uXG4iKTsKIAogCS8qIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwppbmRleCBiYTY1OGQyLi5jMzJmNWQ2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjQ3LDYgKzI0Nyw4IEBACiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsKIAorCW9vcHNfZW50ZXIoKTsKKwogCS8qIEFtdXNlIHRoZSB1c2VyIGluIGEgU1BBUkMgZmFzaGlvbiAqLwogCWlmIChlcnIpIHByaW50aygKIEtFUk5fQ1JJVCAiICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBcbiIKQEAgLTI5Myw2ICsyOTUsNyBAQAogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAJfQogCisJb29wc19leGl0KCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApAQCAtNDk0LDcgKzQ5Nyw3IEBACiAJcGFuaWMobXNnKTsKIH0KIAotdm9pZCBoYW5kbGVfaW50ZXJydXB0aW9uKGludCBjb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBoYW5kbGVfaW50ZXJydXB0aW9uKGludCBjb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmF1bHRfc3BhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxYTNiNmNjLi5mZDJjYzRmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTQsNiArNTQsOCBAQAogCQlURVhUX1RFWFQKIAkJU0NIRURfVEVYVAogCQlMT0NLX1RFWFQKKwkJS1BST0JFU19URVhUCisJCUlSUUVOVFJZX1RFWFQKIAkJKigudGV4dC5kb19zb2Z0aXJxKQogCQkqKC50ZXh0LnN5c19leGl0KQogCQkqKC50ZXh0LmRvX3NpZ2FsdHN0YWNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCmluZGV4IDlkNzA0ZDkuLjQzNTZjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2luaXQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKQEAgLTQ1Niw2ICs0NTYsMTMgQEAKIHsKIAlpbnQgY29kZXNpemUsIHJlc2VydmVkcGFnZXMsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAorCS8qIERvIHNhbml0eSBjaGVja3Mgb24gcGFnZSB0YWJsZSBjb25zdGFudHMgKi8KKwlCVUlMRF9CVUdfT04oUFRFX0VOVFJZX1NJWkUgIT0gc2l6ZW9mKHB0ZV90KSk7CisJQlVJTERfQlVHX09OKFBNRF9FTlRSWV9TSVpFICE9IHNpemVvZihwbWRfdCkpOworCUJVSUxEX0JVR19PTihQR0RfRU5UUllfU0laRSAhPSBzaXplb2YocGdkX3QpKTsKKwlCVUlMRF9CVUdfT04oUEFHRV9TSElGVCArIEJJVFNfUEVSX1BURSArIEJJVFNfUEVSX1BNRCArIEJJVFNfUEVSX1BHRAorCQkJPiBCSVRTX1BFUl9MT05HKTsKKwogCWhpZ2hfbWVtb3J5ID0gX192YSgobWF4X3BmbiA8PCBQQUdFX1NISUZUKSk7CiAKICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyZTIxNjBjLi45ZTA4ZDhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTExLDYgKzExMSw3IEBACiAJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRQogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX1RSQUNFUgorCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVApAQCAtMjI3LDYgKzIyOCw5IEBACiAJZGVwZW5kcyBvbiBQUEM2NCAjIG5vdCBzdXBwb3J0ZWQgb24gMzIgYml0cyB5ZXQKIAlkZWZhdWx0IG4KIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpAQCAtMzEyLDcgKzMxNiw3IEBACiAKIGNvbmZpZyBLRVhFQwogCWJvb2wgImtleGVjIHN5c3RlbSBjYWxsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gKFBQQ19QUlBNQzI4MDAgfHwgUFBDX01VTFRJUExBVEZPUk0pICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gQk9PSzNTICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKIAkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290CkBAIC00MDksNiArNDEzLDE4IEBACiAJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgbgogCitjb25maWcgU1REQklOVVRJTFMKKwlib29sICJVc2luZyBzdGFuZGFyZCBiaW51dGlscyBzZXR0aW5ncyIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFR1cm5pbmcgdGhpcyBvcHRpb24gb2ZmIGFsbG93cyB5b3UgdG8gc2VsZWN0IDI1NktCIFBBR0VfU0laRSBvbiA0NHguCisJICBOb3RlLCB0aGF0IGtlcm5lbCB3aWxsIGJlIGFibGUgdG8gcnVuIG9ubHkgdGhvc2UgYXBwbGljYXRpb25zLAorCSAgd2hpY2ggaGFkIGJlZW4gY29tcGlsZWQgdXNpbmcgYmludXRpbHMgbGF0ZXIgdGhhbiAyLjE3LjUwLjAuMyB3aXRoCisJICAnLXptYXgtcGFnZS1zaXplJyBzZXQgdG8gMjU2SyAodGhlIGRlZmF1bHQgaXMgNjRLKS4gT3IsIGlmIHVzaW5nCisJICB0aGUgb2xkZXIgYmludXRpbHMsIHlvdSBjYW4gcGF0Y2ggdGhlbSB3aXRoIGEgdHJpdmlhbCBwYXRjaCwgd2hpY2gKKwkgIGNoYW5nZXMgdGhlIEVMRl9NQVhQQUdFU0laRSBkZWZpbml0aW9uIGZyb20gMHgxMDAwMCB0byAweDQwMDAwLgorCiBjaG9pY2UKIAlwcm9tcHQgIlBhZ2Ugc2l6ZSIKIAlkZWZhdWx0IFBQQ180S19QQUdFUwpAQCAtNDQ0LDYgKzQ2MCwxOSBAQAogCWJvb2wgIjY0ayBwYWdlIHNpemUiIGlmIDQ0eCB8fCBQUENfU1REX01NVV82NAogCXNlbGVjdCBQUENfSEFTX0hBU0hfNjRLIGlmIFBQQ19TVERfTU1VXzY0CiAKK2NvbmZpZyBQUENfMjU2S19QQUdFUworCWJvb2wgIjI1NmsgcGFnZSBzaXplIiBpZiA0NHgKKwlkZXBlbmRzIG9uICFTVERCSU5VVElMUyAmJiAoIVNITUVNIHx8IEJST0tFTikKKwloZWxwCisJICBNYWtlIHRoZSBwYWdlIHNpemUgMjU2ay4KKworCSAgQXMgdGhlIEVMRiBzdGFuZGFyZCBvbmx5IHJlcXVpcmVzIGFsaWdubWVudCB0byBzdXBwb3J0IHBhZ2UKKwkgIHNpemVzIHVwIHRvIDY0aywgeW91IHdpbGwgbmVlZCB0byBjb21waWxlIGFsbCBvZiB5b3VyIHVzZXIKKwkgIHNwYWNlIGFwcGxpY2F0aW9ucyB3aXRoIGEgbm9uLXN0YW5kYXJkIGJpbnV0aWxzIHNldHRpbmdzCisJICAoc2VlIHRoZSBTVERCSU5VVElMUyBkZXNjcmlwdGlvbiBmb3IgZGV0YWlscykuCisKKwkgIFNheSBOIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCisKIGVuZGNob2ljZQogCiBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgpAQCAtNDU2LDYgKzQ4NSw4IEBACiAJZGVmYXVsdCAiOSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzE2S19QQUdFUwogCXJhbmdlIDcgNjQgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzY0S19QQUdFUwogCWRlZmF1bHQgIjciIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ182NEtfUEFHRVMKKwlyYW5nZSA1IDY0IGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18yNTZLX1BBR0VTCisJZGVmYXVsdCAiNSIgaWYgUFBDX1NURF9NTVVfMzIgJiYgUFBDXzI1NktfUEFHRVMKIAlyYW5nZSAxMSA2NAogCWRlZmF1bHQgIjExIgogCWhlbHAKQEAgLTU5NCw2ICs2MjUsNyBAQAogY29uZmlnIEZTTF9QQ0kKICAJYm9vbAogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCisJc2VsZWN0IFBDSV9RVUlSS1MKIAogY29uZmlnIDR4eF9TT0MKIAlib29sCkBAIC03MzAsNiArNzYyLDIyIEBACiAJaGV4ICJNYXhpbXVtIGxvdyBtZW1vcnkgc2l6ZSAoaW4gYnl0ZXMpIiBpZiBMT1dNRU1fU0laRV9CT09MCiAJZGVmYXVsdCAiMHgzMDAwMDAwMCIKIAorY29uZmlnIExPV01FTV9DQU1fTlVNX0JPT0wKKwlib29sICJTZXQgbnVtYmVyIG9mIENBTXMgdG8gdXNlIHRvIG1hcCBsb3cgbWVtb3J5IgorCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiBGU0xfQk9PS0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ0FNIHNsb3RzIHRoYXQKKwkgIHdpbGwgYmUgdXNlZCB0byBtYXAgbG93IG1lbW9yeS4gIFRoZXJlIGFyZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIHNsb3RzCisJICBhdmFpbGFibGUgYW5kIGV2ZW4gbW9yZSBsaW1pdGVkIG51bWJlciB0aGF0IHdpbGwgZml0IGluIHRoZSBMMSBNTVUuCisJICBIb3dldmVyLCB1c2luZyBtb3JlIGVudHJpZXMgd2lsbCBhbGxvdyBtYXBwaW5nIG1vcmUgbG93IG1lbW9yeS4gIFRoaXMKKwkgIGNhbiBiZSB1c2VmdWwgaW4gb3B0aW1pemluZyB0aGUgbGF5b3V0IG9mIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeS4KKworCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitjb25maWcgTE9XTUVNX0NBTV9OVU0KKwlpbnQgIk51bWJlciBvZiBDQU1zIHRvIHVzZSB0byBtYXAgbG93IG1lbW9yeSIgaWYgTE9XTUVNX0NBTV9OVU1fQk9PTAorCWRlZmF1bHQgMworCiBjb25maWcgUkVMT0NBVEFCTEUKIAlib29sICJCdWlsZCBhIHJlbG9jYXRhYmxlIGtlcm5lbCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBBRFZBTkNFRF9PUFRJT05TICYmIEZMQVRNRU0gJiYgRlNMX0JPT0tFCkBAIC03OTQsNyArODQyLDcgQEAKIAogY29uZmlnIFBIWVNJQ0FMX0FMSUdOCiAJaGV4Ci0JZGVmYXVsdCAiMHgxMDAwMDAwMCIgaWYgRlNMX0JPT0tFCisJZGVmYXVsdCAiMHgwNDAwMDAwMCIgaWYgRlNMX0JPT0tFCiAJaGVscAogCSAgVGhpcyB2YWx1ZSBwdXRzIHRoZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIG9uIHBoeXNpY2FsIGFkZHJlc3MKIAkgIHdoZXJlIGtlcm5lbCBpcyBsb2FkZWQgYW5kIHJ1biBmcm9tLiBLZXJuZWwgaXMgY29tcGlsZWQgZm9yIGFuCkBAIC04MTUsMzEgKzg2Myw2IEBACiAJZGVmYXVsdCAiMHg4MDAwMDAwMCIgaWYgUFBDX1BSRVAgfHwgUFBDXzh4eAogCWRlZmF1bHQgIjB4YzAwMDAwMDAiCiAKLWNvbmZpZyBDT05TSVNURU5UX1NUQVJUX0JPT0wKLQlib29sICJTZXQgY3VzdG9tIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wgYWRkcmVzcyIKLQlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIGJhc2UgdmlydHVhbCBhZGRyZXNzCi0JICBvZiB0aGUgY29uc2lzdGVudCBtZW1vcnkgcG9vbC4gIFRoaXMgcG9vbCBvZiB2aXJ0dWFsCi0JICBtZW1vcnkgaXMgdXNlZCB0byBtYWtlIGNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb25zLgotCi1jb25maWcgQ09OU0lTVEVOVF9TVEFSVAotCWhleCAiQmFzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgY29uc2lzdGVudCBtZW1vcnkgcG9vbCIgaWYgQ09OU0lTVEVOVF9TVEFSVF9CT09MCi0JZGVmYXVsdCAiMHhmZDAwMDAwMCIgaWYgKE5PVF9DT0hFUkVOVF9DQUNIRSAmJiA4eHgpCi0JZGVmYXVsdCAiMHhmZjEwMDAwMCIgaWYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0KLWNvbmZpZyBDT05TSVNURU5UX1NJWkVfQk9PTAotCWJvb2wgIlNldCBjdXN0b20gY29uc2lzdGVudCBtZW1vcnkgcG9vbCBzaXplIgotCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiBOT1RfQ09IRVJFTlRfQ0FDSEUKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUKLQkgIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wuICBUaGlzIHBvb2wgb2YgdmlydHVhbCBtZW1vcnkKLQkgIGlzIHVzZWQgdG8gbWFrZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9ucy4KLQotY29uZmlnIENPTlNJU1RFTlRfU0laRQotCWhleCAiU2l6ZSBvZiBjb25zaXN0ZW50IG1lbW9yeSBwb29sIiBpZiBDT05TSVNURU5UX1NJWkVfQk9PTAotCWRlZmF1bHQgIjB4MDAyMDAwMDAiIGlmIE5PVF9DT0hFUkVOVF9DQUNIRQotCiBjb25maWcgUElOX1RMQgogCWJvb2wgIlBpbm5lZCBLZXJuZWwgVExCcyAoODYwIE9OTFkpIgogCWRlcGVuZHMgb24gQURWQU5DRURfT1BUSU9OUyAmJiA4eHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKaW5kZXggMDhmN2NjMC4uYTEwOThlMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTI3LDE1ICsyNyw2IEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLSAgICAgICAgYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCi0gICAgICAgIGRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFISUJFUk5BVElPTgotICAgICAgICBoZWxwCi0gICAgICAgICAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KLSAgICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotICAgICAgICAgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KLQotCiBjb25maWcgSENBTExfU1RBVFMKIAlib29sICJIeXBlcnZpc29yIGNhbGwgaW5zdHJ1bWVudGF0aW9uIgogCWRlcGVuZHMgb24gUFBDX1BTRVJJRVMgJiYgREVCVUdfRlMKQEAgLTEyOSw3ICsxMjAsNyBAQAogCiBjb25maWcgQk9PVFhfVEVYVAogCWJvb2wgIlN1cHBvcnQgZm9yIGVhcmx5IGJvb3QgdGV4dCBjb25zb2xlIChCb290WCBvciBPcGVuRmlybXdhcmUgb25seSkiCi0JZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIFBQQ19PRiAmJiBQUENfQk9PSzNTCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzZWUgcHJvZ3Jlc3MgbWVzc2FnZXMgZnJvbSB0aGUgYm9vdCBmaXJtd2FyZSBpbiB0ZXh0CiAJICBtb2RlLiBSZXF1aXJlcyBlaXRoZXIgQm9vdFggb3IgT3BlbiBGaXJtd2FyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCA3MmQxN2Y1Li41NTFmYzU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC0xNDcsOCArMTQ3LDggQEAKIAkJCQkgICBhcmNoL3Bvd2VycGMvbW0vIFwKIAkJCQkgICBhcmNoL3Bvd2VycGMvbGliLyBcCiAJCQkJICAgYXJjaC9wb3dlcnBjL3N5c2Rldi8gXAotCQkJCSAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvCi1jb3JlLSQoQ09ORklHX01BVEhfRU1VTEFUSU9OKQkrPSBhcmNoL3Bvd2VycGMvbWF0aC1lbXUvCisJCQkJICAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy8gXAorCQkJCSAgIGFyY2gvcG93ZXJwYy9tYXRoLWVtdS8KIGNvcmUtJChDT05GSUdfWE1PTikJCSs9IGFyY2gvcG93ZXJwYy94bW9uLwogY29yZS0kKENPTkZJR19LVk0pIAkJKz0gYXJjaC9wb3dlcnBjL2t2bS8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQppbmRleCBlODRkZjMzLi40NDU4YWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9NYWtlZmlsZQpAQCAtNzAsNyArNzAsNyBAQAogCQljdWJvb3Qta2F0bWFpLmMgY3Vib290LXJhaW5pZXIuYyByZWRib290LTh4eC5jIGVwODI0OGUuYyBcCiAJCWN1Ym9vdC13YXJwLmMgY3Vib290LTg1eHgtY3BtMi5jIGN1Ym9vdC15b3NlbWl0ZS5jIHNpbXBsZWJvb3QuYyBcCiAJCXZpcnRleDQwNS1oZWFkLlMgdmlydGV4LmMgcmVkYm9vdC04M3h4LmMgY3Vib290LXNhbTQ0MGVwLmMgXAotCQljdWJvb3QtYWNhZGlhLmMKKwkJY3Vib290LWFjYWRpYS5jIGN1Ym9vdC1hbWlnYW9uZS5jCiBzcmMtYm9vdCA6PSAkKHNyYy13bGliKSAkKHNyYy1wbGF0KSBlbXB0eS5jCiAKIHNyYy1ib290IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sICQoc3JjLWJvb3QpKQpAQCAtMjM1LDcgKzIzNSw5IEBACiAJCQkJCSAgIGR0YkltYWdlLmFkZGVyODc1LXJlZGJvb3QKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vNTJ4eC9LY29uZmlnCi1pbWFnZS0kKENPTkZJR19QUENfTElURTUyMDApCQkrPSBjdUltYWdlLmxpdGU1MjAwIGN1SW1hZ2UubGl0ZTUyMDBiCitpbWFnZS0kKENPTkZJR19QUENfTElURTUyMDApCQkrPSBjdUltYWdlLmxpdGU1MjAwIGxpdGU1MjAwLmR0YgoraW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMGIgbGl0ZTUyMDBiLmR0YgoraW1hZ2UtJChDT05GSUdfUFBDX01FRElBNTIwMCkJCSs9IGN1SW1hZ2UubWVkaWE1MjAwIG1lZGlhNTIwMC5kdGIKIAogIyBCb2FyZCBwb3J0cyBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vODJ4eC9LY29uZmlnCiBpbWFnZS0kKENPTkZJR19NUEM4MjcyX0FEUykJCSs9IGN1SW1hZ2UubXBjODI3MmFkcwpAQCAtMjc0LDYgKzI3Niw5IEBACiBpbWFnZS0kKENPTkZJR19NUEM3NDQ4SFBDMikJCSs9IGN1SW1hZ2UubXBjNzQ0OGhwYzIKIGltYWdlLSQoQ09ORklHX1BQQ19DMkspCQkJKz0gY3VJbWFnZS5jMmsKIAorIyBCb2FyZCBwb3J0IGluIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybS9hbWlnYW9uZS9LY29uZmlnCitpbWFnZS0kKENPTkZJR19BTUlHQU9ORSkJCSs9IGN1SW1hZ2UuYW1pZ2FvbmUKKwogIyBGb3IgMzItYml0IHBvd2VybWFjcywgYnVpbGQgdGhlIENPRkYgYW5kIG1pYm9vdCBpbWFnZXMKICMgYXMgd2VsbCBhcyB0aGUgRUxGIGltYWdlcy4KIGlmZXEgKCQoQ09ORklHX1BQQzMyKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9jdWJvb3QtYW1pZ2FvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyOTY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIE9sZCBVLWJvb3QgY29tcGF0aWJpbGl0eSBmb3IgQW1pZ2FPbmUKKyAqCisgKiBBdXRob3I6IEdlcmhhcmQgUGlyY2hlciAoZ2VyaGFyZF9waXJjaGVyQGdteC5uZXQpCisgKgorICogICBCYXNlZCBvbiBjdWJvb3QtODN4eC5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJzdGRpby5oIgorI2luY2x1ZGUgImN1Ym9vdC5oIgorCisjaW5jbHVkZSAicHBjYm9vdC5oIgorCitzdGF0aWMgYmRfdCBiZDsKKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZml4dXBzKHZvaWQpCit7CisJZHRfZml4dXBfbWVtb3J5KGJkLmJpX21lbXN0YXJ0LCBiZC5iaV9tZW1zaXplKTsKKwlkdF9maXh1cF9jcHVfY2xvY2tzKGJkLmJpX2ludGZyZXEsIGJkLmJpX2J1c2ZyZXEgLyA0LCBiZC5iaV9idXNmcmVxKTsKK30KKwordm9pZCBwbGF0Zm9ybV9pbml0KHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNykKK3sKKwlDVUJPT1RfSU5JVCgpOworCWZkdF9pbml0KF9kdGJfc3RhcnQpOworCXNlcmlhbF9jb25zb2xlX2luaXQoKTsKKwlwbGF0Zm9ybV9vcHMuZml4dXBzID0gcGxhdGZvcm1fZml4dXBzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FtaWdhb25lLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1NDlmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBBbWlnYU9uZSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHZXJoYXJkIFBpcmNoZXIgKGdlcmhhcmRfcGlyY2hlckBnbXgubmV0KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkFtaWdhT25lIjsKKwljb21wYXRpYmxlID0gImV5ZXRlY2gsYW1pZ2FvbmUiOworCWNvaGVyZW5jeS1vZmY7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2NwdXMgPSA8MT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIDMzLjMgTUh6LCBmcm9tIFUtYm9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIFUtYm9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MCAwPjsJCQkJLy8gRnJvbSBVLWJvb3QKKwl9OworCisJcGNpQDgwMDAwMDAwIHsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJtYWktbG9naWMsYXJ0aWNpYS1zIjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWJ1cy1yYW5nZSA9IDwwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAwIDB4MDBjMDAwMDAJLy8gUENJIEkvTworCQkgICAgICAgICAgMHgwMjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4N2QwMDAwMDAJLy8gUENJIG1lbW9yeQorCQkgICAgICAgICAgMHgwMjAwMDAwMCAwIDB4MDAwMDAwMDAgMHhmZDAwMDAwMCAwIDB4MDEwMDAwMDA+OwkvLyBQQ0kgYWxpYXMgbWVtb3J5IChJU0EpCisJCS8vIENvbmZpZ3VyYXRpb24gYWRkcmVzcyBhbmQgZGF0YSByZWdpc3Rlci4KKwkJcmVnID0gPDB4ZmVjMDBjZjggNAorCQkgICAgICAgMHhmZWUwMGNmYyA0PjsKKwkJODI1OS1pbnRlcnJ1cHQtYWNrbm93bGVkZ2UgPSA8MHhmZWYwMDAwMD47CisJCS8vIERvIG5vdCBkZWZpbmUgYSBpbnRlcnJ1cHQtcGFyZW50IGhlcmUsIGlmIHRoZXJlIGlzIG5vCisJCS8vIGludGVycnVwdC1tYXAgcHJvcGVydHkuCisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKworCQlpc2FANyB7CisJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOworCQkJY29tcGF0aWJsZSA9ICJwY2ljbGFzcywwNjAxIjsKKwkJCXZlbmRvci1pZCA9IDwweDAwMDAxMTA2PjsKKwkJCWRldmljZS1pZCA9IDwweDAwMDAwNjg2PjsKKwkJCXJldmlzaW9uLWlkID0gPDB4MDAwMDAwMTA+OworCQkJY2xhc3MtY29kZSA9IDwweDAwMDYwMTAwPjsKKwkJCXN1YnN5c3RlbS1pZCA9IDwwPjsKKwkJCXN1YnN5c3RlbS12ZW5kb3ItaWQgPSA8MD47CisJCQlkZXZzZWwtc3BlZWQgPSA8MHgwMDAwMDAwMT47CisJCQltaW4tZ3JhbnQgPSA8MD47CisJCQltYXgtbGF0ZW5jeSA9IDwwPjsKKwkJCS8qIEZpcnN0IDY0ayBmb3IgSS9PIGF0IDB4MCBvbiBQQ0kgbWFwcGVkIHRvIDB4MCBvbiBJU0EuICovCisJCQlyYW5nZXMgPSA8MHgwMDAwMDAwMSAwIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4MDAwMTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaTgyNTk+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCWRtYS1jb250cm9sbGVyQDAgeworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDIwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDAwMCAweDAwMDAwMDIwCisJCQkJICAgICAgIDEgMHgwMDAwMDA4MCAweDAwMDAwMDEwCisJCQkJICAgICAgIDEgMHgwMDAwMDBjMCAweDAwMDAwMDIwPjsKKwkJCX07CisKKwkJCWk4MjU5OiBpbnRlcnJ1cHQtY29udHJvbGxlckAyMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDAwMCI7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDAyMCAweDAwMDAwMDAyCisJCQkJICAgICAgIDEgMHgwMDAwMDBhMCAweDAwMDAwMDAyCisJCQkJICAgICAgIDEgMHgwMDAwMDRkMCAweDAwMDAwMDAyPjsKKwkJCQlyZXNlcnZlZC1pbnRlcnJ1cHRzID0gPDI+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQl9OworCisJCQl0aW1lckA0MCB7CisJCQkJLy8gQWxzbyBhZGRzIHBjc3BrciB0byBwbGF0Zm9ybSBkZXZpY2VzLgorCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDEwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDA0MCAweDAwMDAwMDIwPjsKKwkJCX07CisKKwkJCTgwNDJANjAgeworCQkJCWRldmljZV90eXBlID0gIjgwNDIiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNjAgMHgwMDAwMDAwMQorCQkJCSAgICAgICAxIDB4MDAwMDAwNjQgMHgwMDAwMDAwMT47CisJCQkJaW50ZXJydXB0cyA9IDwxIDMgMTIgMz47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlrZXlib2FyZEAwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsMzAzIjsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisKKwkJCQltb3VzZUAxIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsZjAzIjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQl9OworCisJCQlydGNANzAgeworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDA3MCAweDAwMDAwMDAyPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggMz47CisJCQl9OworCisJCQlzZXJpYWxAM2Y4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDUwMSIsInBucFBOUCw1MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzZjggMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDw0IDM+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQl9OworCisJCQlzZXJpYWxAMmY4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDUwMSIsInBucFBOUCw1MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAyZjggMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDwzIDM+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCQljdXJyZW50LXNwZWVkID0gPDExNTIwMD47CisJCQl9OworCisJCQlwYXJhbGxlbEAzNzggeworCQkJCWRldmljZV90eXBlID0gInBhcmFsbGVsIjsKKwkJCQkvLyBObyBFQ1Agc3VwcG9ydCBmb3Igbm93LCBvdGhlcndpc2UgYWRkICJwbnBQTlAsNDAxIi4KKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw0MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzNzggMHgwMDAwMDAwMworCQkJCSAgICAgICAxIDB4MDAwMDA3NzggMHgwMDAwMDAwMz47CisJCQl9OworCisJCQlmZGNAM2YwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJmZGMiOworCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDcwMCI7CisJCQkJcmVnID0gPDEgMHgwMDAwMDNmMCAweDAwMDAwMDA4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDYgMz47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlkaXNrQDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wY2lAODAwMDAwMDAvaXNhQDcvc2VyaWFsQDNmOCI7CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCmluZGV4IDUyNGFmN2UuLjdkYTg0ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hc3A4MzR4LXJlZGJvb3QuZHRzCkBAIC0xODEsNzAgKzE4MSw3NiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDA4IGU1IDExIDMyIDMzIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDA4IGU1IDExIDMyIDM0IF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKaW5kZXggNDQ0N2RlZi4uNWZkMWFkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCkBAIC0xNDksNiArMTQ5LDIwIEBACiAJCQkJCS8qUlhERSovICAweDUgMHg0PjsKIAkJfTsKIAorICAgICAgICAgICAgICAgIFVTQjA6IGVoY2lAYmZmZDA0MDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJpYm0sdXNiLWVoY2ktNDYwZXgiLCAidXNiLWVoY2kiOworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDB4MWQgND47CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8NCAweGJmZmQwNDAwIDB4OTAgNCAweGJmZmQwNDkwIDB4NzA+OworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBVU0IxOiB1c2JAYmZmZDAwMDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJvaGNpLWxlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDw0IDB4YmZmZDAwMDAgMHg2MD47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMyPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8MHgxZSA0PjsKKyAgICAgICAgICAgICAgICB9OworCiAJCVBPQjA6IG9wYiB7CiAJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwZXgiLCAiaWJtLG9wYiI7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI1Miw2ICsyNjYsMjAgQEAKIAkJCQlyZWcgPSA8MHhlZjYwMDcwMCAweDAwMDAwMDE0PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKIAkJCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQ+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGNANjggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic3RtLG00MXQ4MCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMyPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE5IDB4OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dG1ANDggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiYWQsYWQ3NDE0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHg0OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4MTQgMHg4PjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIAkJCX07CiAKIAkJCUlJQzE6IGkyY0BlZjYwMDgwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCmluZGV4IDJmNzRjYzQuLmNlZTgwODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jbTUyMDAuZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJzY2hpbmRsZXIsY201MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC02Niw3ICs2Nyw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIApAQCAtNzQsODQgKzc0LDc2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTYxLDcgKzE1Myw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xNzAsNDggKzE2MSwzNCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDIyMDAgewkJLy8gUFNDMgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCQlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyNDAwIHsJCS8vIFBTQzMKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDI+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkJcmVnID0gPDB4MjQwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMmMwMCB7CQkvLyBQU0M2Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDw1PjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKQEAgLTIyMSwxMCArMTk4LDggQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwpAQCAtMjM1LDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yNDUsOSArMjE5LDggQEAKIAkJfTsKIAl9OwogCi0JbHBiIHsKLQkJbW9kZWwgPSAiZnNsLGxwYiI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlyYW5nZXMgPSA8MCAwIDB4ZmMwMDAwMDAgMHgyMDAwMDAwPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2RpZ3N5X210Yy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMzNjE4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogRGlnc3kgTVRDIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTZW1paGFsZgorICoKKyAqIEJhc2VkIG9uIHRoZSBDTTUyMDAgYnkgTS4gQmFsYWtvd2ljegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImludGVyY29udHJvbCxkaWdzeS1tdGMiOworCWNvbXBhdGlibGUgPSAiaW50ZXJjb250cm9sLGRpZ3N5LW10YyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJCS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMjAwMDAwMD47CS8vIDMyTUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWZzbCxoYXMtd2R0OworCQl9OworCisJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJfTsKKworCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCX07CisKKwkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQl9OworCisJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJfTsKKworCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCX07CisKKwkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQl9OworCisJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXNwaUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKKwkJCXJlZyA9IDwweGYwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47CisJCX07CisKKwkJdXNiQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKKwkJCXJlZyA9IDwweDEwMDAgMHhmZj47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjYwMCB7CQkvLyBQU0M0CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDI2MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDExIDA+OworCQl9OworCisJCXNlcmlhbEAyODAwIHsJCS8vIFBTQzUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTIgMD47CisJCX07CisKKwkJZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisKKwkJCXJ0Y0A1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCX07CisJCX07CisKKwkJc3JhbUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIjsKKwkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKKwkJfTsKKwl9OworCisJbHBiIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MTAwMDAwMD47CisKKwkJLy8gMTYtYml0IGZsYXNoIGRldmljZSBhdCBMb2NhbFBsdXMgQnVzIENTMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAgMHgwMDIwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJbGFiZWwgPSAicm9vdCI7CisJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMDMwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDUwMDAwMCB7CisJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJcmVnID0gPDB4MDA1MDAwMDAgMHgwMGEwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQGYwMDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MHgwMGYwMDAwMCAweDEwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3BwYzlhLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDdhZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiBHRSBGYW51YyBQUEM5QSBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IFNCUyBDTTYgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwNyBTQlMgVGVjaG5vbG9naWVzIEdtYkggJiBDby4gS0cKKyAqIEFuZDogbXBjODY0MV9ocGNuLmR0cyAoTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZSkKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqLworCisvKgorICogQ29tcGlsZWQgd2l0aCBkdGMgLUkgZHRzIC1PIGR0YiAtbyBnZWZfcHBjOWEuZHRiIGdlZl9wcGM5YS5kdHMKKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiR0VGX1BQQzlBIjsKKwljb21wYXRpYmxlID0gImdlZixwcGM5YSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCQlQb3dlclBDLDg2NDFAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47CS8vIHNldCBieSB1Ym9vdAorCX07CisKKwlsb2NhbGJ1c0BmZWYwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGU4MDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDA4MDAwCS8vIEZQR0EKKwkJCSAgNSAwIDB4ZmMwMDgwMDAgMHgwMDAwODAwMAkvLyBBRklYIEZQR0EKKwkJCSAgNiAwIDB4ZmQwMDAwMDAgMHgwMDgwMDAwMAkvLyBJTyBGUEdBICg4LWJpdCkKKwkJCSAgNyAwIDB4ZmQ4MDAwMDAgMHgwMDgwMDAwMD47CS8vIElPIEZQR0EgKDMyLWJpdCkKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZmlybXdhcmUtbWlycm9yIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDw0PjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAgMHgxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1wYWdlZC1mbGFzaCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MSAweDAgMHg4MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAgMHg3ODAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDc4MDAwMDAgMHg4MDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJZnBnYUA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZnBnYS1yZWdzIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OworCQl9OworCisJCXdkdEA0LDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtZnBnYS13ZHQiLCAiZ2VmLGZwZ2Etd2R0LTEuMDAiLAorCQkJCSJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMDAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYSAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisJCS8qIFNlY29uZCB3YXRjaGRvZyBhdmFpbGFibGUsIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgb25lLgorCQl3ZHRANCwyMDEwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2Etd2R0IiwgImdlZixmcGdhLXdkdC0xLjAwIiwKKwkJCQkiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDEwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWIgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworCQkqLworCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2EtcGljIiwgImdlZixmcGdhLXBpYy0xLjAwIjsKKwkJCXJlZyA9IDwweDQgMHg0MDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweDgKKwkJCQkgICAgICAweDk+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKwkJZ2VmX2dwaW86IGdwaW9ANywxNDAwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWdwaW8iLCAiZ2VmLHNiYzYxMC1ncGlvIjsKKwkJCXJlZyA9IDwweDcgMHgxNDAwMCAweDI0PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKwl9OworCisJc29jQGZlZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXNvYyIsICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisKKwkJaTJjMTogaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKworCQkJaHdtb25ANDggeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG05MiI7CisJCQkJcmVnID0gPDB4NDg+OworCQkJfTsKKworCQkJaHdtb25ANGMgeworCQkJCWNvbXBhdGlibGUgPSAiYWRpLGFkdDc0NjEiOworCQkJCXJlZyA9IDwweDRjPjsKKwkJCX07CisKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJlcHNvbixyeDg1ODEiOworCQkJCXJlZyA9IDwweDAwMDAwMDUxPjsKKwkJCX07CisKKwkJCWV0aUA2YiB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxNjgyIjsKKwkJCQlyZWcgPSA8MHg2Yj47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgMHgyIDB4MjAgMHgyIDB4MjEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJhIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxYyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZlZjA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmZWYwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDQwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAweDAgMHgwMDQwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDQwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTY5MTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogR0UgRmFudWMgU0JDMzEwIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogU0JTIENNNiBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqIENvcHlyaWdodCAyMDA3IFNCUyBUZWNobm9sb2dpZXMgR21iSCAmIENvLiBLRworICogQW5kOiBtcGM4NjQxX2hwY24uZHRzIChNUEM4NjQxIEhQQ04gRGV2aWNlIFRyZWUgU291cmNlKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICovCisKKy8qCisgKiBDb21waWxlZCB3aXRoIGR0YyAtSSBkdHMgLU8gZHRiIC1vIGdlZl9zYmMzMTAuZHRiIGdlZl9zYmMzMTAuZHRzCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkdFRl9TQkMzMTAiOworCWNvbXBhdGlibGUgPSAiZ2VmLHNiYzMxMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NjQxQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCQlQb3dlclBDLDg2NDFAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIEZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAgMHg0MDAwMDAwMD47CS8vIHNldCBieSB1Ym9vdAorCX07CisKKwlsb2NhbGJ1c0BmZWYwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAJLy8gMTZNQiBCb290IGZsYXNoCisJCQkgIDEgMCAweGUwMDAwMDAwIDB4MDgwMDAwMDAJLy8gUGFnZWQgRmxhc2ggMAorCQkJICAyIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDEKKwkJCSAgMyAwIDB4ZmMxMDAwMDAgMHgwMDAyMDAwMAkvLyBOVlJBTQorCQkJICA0IDAgMHhmYzAwMDAwMCAweDAwMDEwMDAwPjsJLy8gRlBHQQorCisJCS8qIGZsYXNoQDAsMCBpcyBhIG1pcnJvciBvZiBwYXJ0IG9mIHRoZSBtZW1vcnkgaW4gZmxhc2hAMSwwCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAwIDB4MDEwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDEwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisJCSovCisKKwkJZmxhc2hAMSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwxIDAgMHg4MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDc4MDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3ODAwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MDc4MDAwMDAgMHgwMDgwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQlmcGdhQDQsMCB7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXJlZ3MiOworCQkJcmVnID0gPDB4NCAweDAgMHg0MD47CisJCX07CisKKwkJd2R0QDQsMjAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAid2F0Y2hkb2ciOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMDAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYSAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisvKgorCQl3ZHRANCwyMDEwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJ3YXRjaGRvZyI7CisJCQljb21wYXRpYmxlID0gImdlZixmcGdhLXdkdCI7CisJCQlyZWcgPSA8MHg0IDB4MjAxMCAweDg+OworCQkJaW50ZXJydXB0cyA9IDwweDFiIDB4ND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJfTsKKyovCisJCWdlZl9waWM6IHBpY0A0LDQwMDAgeworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS1waWMiOworCQkJcmVnID0gPDB4NCAweDQwMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4OAorCQkJCSAgICAgIDB4OT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQl9OworCQlnZWZfZ3BpbzogZ3Bpb0A0LDgwMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImdlZixzYmMzMTAtZ3BpbyI7CisJCQlyZWcgPSA8MHg0IDB4ODAwMCAweDI0PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKwl9OworCisJc29jQGZlZjAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZmVmMDAwMDAgMHgwMDEwMDAwMD47CisJCXJlZyA9IDwweGZlZjAwMDAwIDB4MTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKworCQlpMmMxOiBpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4NTgxIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDA1MT47CisJCQl9OworCQl9OworCisJCWkyYzI6IGkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWh3bW9uQDQ4IHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtOTIiOworCQkJCXJlZyA9IDwweDQ4PjsKKwkJCX07CisKKwkJCWh3bW9uQDRjIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZHQ3NDYxIjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQl9OworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEA4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDE4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDM+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjMgMj47CisJCQl9OworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OSAweDQ+OworCQkJCQlyZWcgPSA8MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDQ+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgxZiAweDIgMHgyMCAweDIgMHgyMSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCXNlcmlhbDE6IHNlcmlhbEA0NjAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ2MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDFjIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmVmMDgwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGZlZjA4MDAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4NDAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGZlMDAwMDAwIDB4MCAweDAwNDAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MHgxOCAweDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCTB4MDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDAgMHgyCisJCQkweDAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MgorCQkJMHgwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDIKKwkJCTB4MDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDMgMHgyCisJCT47CisKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwIDB4NDAwMDAwMDAKKworCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwIDB4MDA0MDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCmluZGV4IGU3OGMzNTUuLjY1ODJkYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWxvY2FsYnVzIiwgInNpbXBsZS1idXMiOwotCQlyZWcgPSA8MHhmODAwNTAwMCAweDEwMDA+OworCQlyZWcgPSA8MHhmZWYwNTAwMCAweDEwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDE5IDI+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIApAQCAtMjAyLDM0ICsyMDIsMzcgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKLQkJCQlyZWcgPSA8MT47Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47Ci0JCQkJcmVnID0gPDM+OwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMKaW5kZXggM2JmZmY0Ny4uMzA4ZmU3YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cwpAQCAtMTI0LDY3ICsxMjQsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7CQkJCQkvKiBGb3IgVFNFQ3MgKi8KLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCVBIWTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJUEhZMjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCi0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCS8qIE1hYyBhZGRyZXNzIGZpbGxlZCBpbiBieSBib290d3JhcHBlciAqLwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZQSFkxPjsKKworCQkJbWRpb0A1MjAgewkJCQkJLyogRm9yIFRTRUNzICovCisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJUEhZMjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQkvKiBNYWMgYWRkcmVzcyBmaWxsZWQgaW4gYnkgYm9vdHdyYXBwZXIgKi8KIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDIzIDB4MiAweDI0IDB4MiAweDI4IDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmUEhZMj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCmluZGV4IDNmN2E1ZGMuLmRlMzBiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAiZnNsLGxpdGU1MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC01OCw5NiArNTksNzQgQEAKIAkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBpYyI7CiAJCQlyZWcgPSA8MHg1MDAgMHg4MD47CiAJCX07CiAKIAkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIAogCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4NjIwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCXJlZyA9IDwweDYzMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8ND47CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDB4NjUwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw2PjsKIAkJCXJlZyA9IDwweDY2MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nz47CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCkBAIC0xNTUsMzkgKzEzNCwzMyBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKLQkJCWRldmljZV90eXBlID0gImRtYS1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOwogCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKIAkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKIAkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKIAkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAogCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTE5NiwxMyArMTY5LDEwIEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBhYzk3IG1vZGUgZXhhbXBsZQpAQCAtMjExLDcgKzE4MSw2IEBACiAJCS8vCWNlbGwtaW5kZXggPSA8MT47CiAJCS8vCXJlZyA9IDwweDIyMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDMyBpbiBDT0RFQyBtb2RlIGV4YW1wbGUKQEAgLTIyMCwyNyArMTg5LDIyIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8Mj47CiAJCS8vCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNCBpbiB1YXJ0IG1vZGUgZXhhbXBsZQogCQkvL3NlcmlhbEAyNjAwIHsJCS8vIFBTQzQKLQkJLy8JZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCS8vCWNlbGwtaW5kZXggPSA8Mz47CiAJCS8vCXJlZyA9IDwweDI2MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMTEgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzUgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjgwMCB7CQkvLyBQU0M1Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDQ+OwogCQkvLwlyZWcgPSA8MHgyODAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDEyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M2IGluIHNwaSBtb2RlIGV4YW1wbGUKQEAgLTI0OSwxNiArMjEzLDEzIEBACiAJCS8vCWNlbGwtaW5kZXggPSA8NT47CiAJCS8vCXJlZyA9IDwweDJjMDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yNjgsMzAgKzIyOSwyNCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDEgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDE+OwogCQkJfTsKIAkJfTsKIAogCQlhdGFAM2EwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJhdGEiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjk5LDE0ICsyNTQsMTIgQEAKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCQlzcmFtQDgwMDAgewotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXNyYW0iOwogCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OwogCQl9OwogCX07CkBAIC0zMjUsNyArMjc4LDYgQEAKIAkJCQkgMHhjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgogCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAogCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwppbmRleCA2M2UzYmI0Li5jNjNlMzU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAiZnNsLGxpdGU1MjAwYiI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNTgsMTM2ICs1OSwxMTIgQEAKIAkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOwogCQkJcmVnID0gPDB4NTAwIDB4ODA+OwogCQl9OwogCiAJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCiAJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8ND47CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw1PjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDY+OwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nz47CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQljYW5AOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIAotCQlncGlvQGIwMCB7CisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW9AYzAwIHsKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CiAJCQlyZWcgPSA8MHhmMDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwogCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJkbWEtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKIAkJCXJlZyA9IDwweDEyMDAgMHg4MD47CiAJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xOTYsMTMgKzE3MywxMCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIFBTQzIgaW4gYWM5NyBtb2RlIGV4YW1wbGUKQEAgLTIxMSw3ICsxODUsNiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDE+OwogCQkvLwlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDIgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzMgaW4gQ09ERUMgbW9kZSBleGFtcGxlCkBAIC0yMjAsMjcgKzE5MywyMiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDI+OwogCQkvLwlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzQgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjYwMCB7CQkvLyBQU0M0Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDM+OwogCQkvLwlyZWcgPSA8MHgyNjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDExIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M1IGluIHVhcnQgbW9kZSBleGFtcGxlCiAJCS8vc2VyaWFsQDI4MDAgewkJLy8gUFNDNQotCQkvLwlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJLy8JY2VsbC1pbmRleCA9IDw0PjsKIAkJLy8JcmVnID0gPDB4MjgwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAxMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNiBpbiBzcGkgbW9kZSBleGFtcGxlCkBAIC0yNDksNDkgKzIxNyw0MCBAQAogCQkvLwljZWxsLWluZGV4ID0gPDU+OwogCQkvLwlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDQgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKIAkJbWRpb0AzMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwgImZzbCxtcGM1MjAwLW1kaW8iOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKLQkJCWRldmljZV90eXBlID0gImF0YSI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKQEAgLTI5OSwxNCArMjU4LDEzIEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CisKIAkJc3JhbUA4MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CiAJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CiAJCX07CiAJfTsKQEAgLTMzMCw3ICsyODgsNiBAQAogCQkJCSAweGM4MDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCiAJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCiAJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTdkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIEZyZWVzY2FsZSBNZWRpYTUyMDAgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorICogU3RldmVuIENhdmFuYWdoIDxzY2F2YW5hZ2hAc2VjcmV0bGFiLmNhPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImZzbCxtZWRpYTUyMDAiOworCWNvbXBhdGlibGUgPSAiZnNsLG1lZGlhNTIwMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJYWxpYXNlcyB7CisJCWNvbnNvbGUgPSAmY29uc29sZTsKKwkJZXRoZXJuZXQwID0gJmV0aDA7CisJfTsKKworCWNob3NlbiB7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJmNvbnNvbGU7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MzMwMDAwMDA+OwkvLyAzMyBNSHosIHRoZXNlIHdlcmUgY29uZmlndXJlZCBieSBVLUJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MTMyMDAwMDAwPjsJCS8vIDEzMiBNSHoKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzOTYwMDAwMDA+OwkJLy8gMzk2IE1IegorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsJLy8gMTI4TUIgUkFNCisJfTsKKworCXNvY0BmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCXJlZyA9IDwweGYwMDAwMDAwIDB4MDAwMDAxMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDEzMjAwMDAwMD47Ly8gMTMyIE1IegorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlmc2wsaGFzLXdkdDsKKwkJfTsKKworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCX07CisKKwkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQl9OworCisJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJfTsKKworCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCX07CisKKwkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQl9OworCisJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJfTsKKworCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCX07CisKKwkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKKwkJCXJlZyA9IDwweDgwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKKwkJfTsKKworCQljYW5AOTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OworCQkJcmVnID0gPDB4OTAwIDB4ODA+OworCQl9OworCisJCWNhbkA5ODAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CisJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47CisJCQlyZWcgPSA8MHg5ODAgMHg4MD47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlzcGlAZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CisJCQlyZWcgPSA8MHhmMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OworCQl9OworCisJCXVzYkAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA2IDA+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCS8vIFBTQzYgaW4gdWFydCBtb2RlCisJCWNvbnNvbGU6IHNlcmlhbEAyYzAwIHsJCS8vIFBTQzYKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJY2VsbC1pbmRleCA9IDw1PjsKKwkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCXJlZyA9IDwweDJjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CisJCX07CisKKwkJZXRoMDogZXRoZXJuZXRAMzAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCX07CisKKwkJbWRpb0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQl9OworCisJCWkyY0AzZDQwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkNDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1lZGlhNTIwMF9mcGdhIDAgMiAvLyAxc3Qgc2xvdAorCQkJCSAweGMwMDAgMCAwIDIgJm1lZGlhNTIwMF9mcGdhIDAgMworCQkJCSAweGMwMDAgMCAwIDMgJm1lZGlhNTIwMF9mcGdhIDAgNAorCQkJCSAweGMwMDAgMCAwIDQgJm1lZGlhNTIwMF9mcGdhIDAgNQorCisJCQkJIDB4YzgwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCAzIC8vIDJuZCBzbG90CisJCQkJIDB4YzgwMCAwIDAgMiAmbWVkaWE1MjAwX2ZwZ2EgMCA0CisJCQkJIDB4YzgwMCAwIDAgMyAmbWVkaWE1MjAwX2ZwZ2EgMCA1CisJCQkJIDB4YzgwMCAwIDAgNCAmbWVkaWE1MjAwX2ZwZ2EgMCAyCisKKwkJCQkgMHhkMDAwIDAgMCAxICZtZWRpYTUyMDBfZnBnYSAwIDQgLy8gbWluaVBDSQorCQkJCSAweGQwMDAgMCAwIDIgJm1lZGlhNTIwMF9mcGdhIDAgNQorCisJCQkJIDB4ZTAwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCA1IC8vIENvcmFsSVAKKwkJCQk+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPCAwIDAgMHhmYzAwMDAwMCAweDAyMDAwMDAwCisJCQkgICAxIDAgMHhmZTAwMDAwMCAweDAyMDAwMDAwCisJCQkgICAyIDAgMHhmMDAxMDAwMCAweDAwMDEwMDAwCisJCQkgICAzIDAgMHhmMDAyMDAwMCAweDAwMDEwMDAwID47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1kLGFtMjlsdjI4bWwiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDB4MCAweDIwMDAwMDA+OwkJLy8gMzIgTUIKKwkJCWJhbmstd2lkdGggPSA8ND47CQkJLy8gV2lkdGggaW4gYnl0ZXMgb2YgdGhlIGZsYXNoIGJhbmsKKwkJCWRldmljZS13aWR0aCA9IDwyPjsJCQkvLyBUd28gZGV2aWNlcyBvbiBlYWNoIGJhbmsKKwkJfTsKKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWQsYW0yOWx2MjhtbCIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDEgMCAweDIwMDAwMDA+OwkJCS8vIDMyIE1CCisJCQliYW5rLXdpZHRoID0gPDQ+OwkJCS8vIFdpZHRoIGluIGJ5dGVzIG9mIHRoZSBmbGFzaCBiYW5rCisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CQkJLy8gVHdvIGRldmljZXMgb24gZWFjaCBiYW5rCisJCX07CisKKwkJbWVkaWE1MjAwX2ZwZ2E6IGZwZ2FAMiwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1lZGlhNTIwMC1mcGdhIjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsJLy8gMDpiYW5rIDE6aWQ7IG5vIHR5cGUgZmllbGQKKwkJCXJlZyA9IDwyIDAgMHgxMDAwMD47CisKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MCAwIDMJLy8gSVJRIGJhbmsgMAorCQkJICAgICAgICAgICAgICAxIDEgMz47CS8vIElSUSBiYW5rIDEKKwkJfTsKKworCQl1YXJ0QDMsMCB7CisJCQljb21wYXRpYmxlID0gInRpLHRsMTZjNzUyYnB0IjsKKwkJCXJlZyA9IDwzIDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtZWRpYTUyMDBfZnBnYT47CisJCQlpbnRlcnJ1cHRzID0gPDAgMCAgMCAxPjsgLy8gMiBpcnFzCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCmluZGV4IDUyYmE2ZjkuLjdiZThjYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJwcm9tZXNzLG1vdGlvbnBybyI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjYsNyArNjcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKQEAgLTc0LDM1ICs3NCwzMCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJbW90aW9ucHJvLWxlZEA2NjAgewkvLyBNb3Rpb24tUFJPIHN0YXR1cyBMRUQKQEAgLTExMCw3ICsxMDUsNiBAQAogCQkJbGFiZWwgPSAibW90aW9ucHJvLXN0YXR1c2xlZCI7CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlibGluay1kZWxheSA9IDwxMDA+OyAvLyAxMDAgbXNlYwogCQl9OwogCkBAIC0xMTksNDkgKzExMyw0NiBAQAogCQkJbGFiZWwgPSAibW90aW9ucHJvLXJlYWR5bGVkIjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTcxLDcgKzE2Miw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xODAsMTIgKzE3MCw5IEBACiAJCX07CiAKIAkJc2VyaWFsQDIwMDAgewkJLy8gUFNDMQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MD47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0MyIGluIHNwaSBtYXN0ZXIgbW9kZSAKQEAgLTE5NCwyNiArMTgxLDIwIEBACiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0M1IGluIHVhcnQgbW9kZQogCQlzZXJpYWxAMjgwMCB7CQkvLyBQU0M1Ci0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDw0PjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yMjMsMTAgKzIwNCw4IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDIgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDI+OwogCQkJfTsKIAkJfTsKQEAgLTIzNSw3ICsyMTQsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjQ0LDcgKzIyMiw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQlydGNANjggewpAQCAtMjU5LDggKzIzNiw4IEBACiAJCX07CiAJfTsKIAotCWxwYiB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CiAJCSNzaXplLWNlbGxzID0gPDE+OwogCQlyYW5nZXMgPSA8MCAwIDB4ZmYwMDAwMDAgMHgwMTAwMDAwMApAQCAtMjczLDcgKzI1MCw2IEBACiAJCQljb21wYXRpYmxlID0gInByb21lc3MsbW90aW9ucHJvLWtvbGxtb3JnZW4iOwogCQkJcmVnID0gPDEgMCAweDEwMDAwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIDgtYml0IGJvYXJkIENQTEQgb24gTG9jYWxQbHVzIEJ1cyBDUzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCmluZGV4IDNlYmY3ZWMuLjc2MWZhYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJc2xlZXAgPSA8JnBtYyAweDIwMDAwMDAwPjsKLQkJCXJhbmdlczsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CkBAIC0xOTUsMTEgKzE5NSwxMSBAQAogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJZnNsLG1hZ2ljLXBhY2tldDsKIAotCQkJbWRpb0AyNDUyMCB7CisJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CiAJCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewogCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OwpAQCAtMjIxLDYgKzIyMSw3IEBACiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM0IDB4OCAzMyAweDggMzIgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwpAQCAtMjI5LDExICsyMzAsMTEgQEAKIAkJCXNsZWVwID0gPCZwbWMgMHgxMDAwMDAwMD47CiAJCQlmc2wsbWFnaWMtcGFja2V0OwogCi0JCQltZGlvQDI1NTIwIHsKKwkJCW1kaW9ANTIwIHsKIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OwogCiAJCQkJdGJpMTogdGJpLXBoeUAxMSB7CiAJCQkJCXJlZyA9IDwweDExPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCmluZGV4IDcxNzg0MTYuLjNmNGM1ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwpAQCAtMjIsNiArMjIsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xODgsNjYgKzE5MCw3NCBAQAogCQkJcGh5X3R5cGUgPSAidXRtaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5MCA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8ICZwaHkxID47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzQ5LDQgKzM1OSw2NiBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMTAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzAwMDAwMDAgMHhjMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkMTAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzAwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKaW5kZXggZGVhMzA5MS4uNDMxOWJkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCkBAIC0xNTIsMTAgKzE1MiwyMSBAQAogCQl9OwogCiAJCXBhcl9pb0AxNDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlyZWcgPSA8MHgxNDAwIDB4MTAwPjsKKwkJCXJhbmdlcyA9IDwzIDB4MTQ0OCAweDE4PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtcWUtcGFyaW8iOwogCQkJZGV2aWNlX3R5cGUgPSAicGFyX2lvIjsKIAkJCW51bS1wb3J0cyA9IDw3PjsKIAorCQkJcWVfcGlvX2Q6IGdwaW8tY29udHJvbGxlckAxNDQ4IHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLXFlLXBhcmlvLWJhbmsiOworCQkJCXJlZyA9IDwzIDB4MTg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKIAkJCXVjYzJwaW86dWNjX3BpbkAwMiB7CiAJCQkJcGlvLW1hcCA9IDwKIAkJCS8qIHBvcnQgIHBpbiAgZGlyICBvcGVuX2RyYWluICBhc3NpZ25tZW50ICBoYXNfaXJxICovCkBAIC0yMjUsMTIgKzIzNiwyNSBAQAogCQl9OwogCiAJCXNwaUA0YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxzcGkiOwogCQkJcmVnID0gPDB4NGMwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OworCQkJZ3Bpb3MgPSA8JnFlX3Bpb19kIDEzIDA+OwogCQkJbW9kZSA9ICJjcHUtcWUiOworCisJCQltbWMtc2xvdEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzcmRiLW1tYy1zbG90IiwKKwkJCQkJICAgICAibW1jLXNwaS1zbG90IjsKKwkJCQlyZWcgPSA8MD47CisJCQkJZ3Bpb3MgPSA8JnFlX3Bpb19kIDE0IDEKKwkJCQkJICZxZV9waW9fZCAxNSAwPjsKKwkJCQl2b2x0YWdlLXJhbmdlcyA9IDwzMzAwIDMzMDA+OworCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwkJCX07CiAJCX07CiAKIAkJc3BpQDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCmluZGV4IGI1ZWRhOTQuLjFhZTM4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzCkBAIC0xNzAsNTcgKzE3MCw1MiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQkvKiBWaXRlc3NlIDgyMDEgKi8KLQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgxYz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxYz47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQkvKiBWaXRlc3NlIDgyMDEgKi8KKwkJCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4MWM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKQEAgLTIyOCw2ICsyMjMsMTggQEAKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwppbmRleCBjODdhNjAxLi42NjJhYmUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKQEAgLTE0OSwzNyArMTQ5LDQxIEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCS8qIFZpdGVzc2UgODIwMSAqLwotCQkJcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDFjPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTFjPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCS8qIFZpdGVzc2UgODIwMSAqLworCQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCmluZGV4IGQ5YWRiYTAuLmQ5ZjBhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cwpAQCAtMTY3LDY5ICsxNjcsNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwppbmRleCAxZDE0ZDcwLi45NjM3MDgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKQEAgLTIzLDYgKzIzLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTI3LDIxICsxMjksMzggQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgeworCQlzbGVlcC1uZXh1cyB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOwogCi0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7Ci0JCQkJcmVnID0gPDB4Njg+OwotCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCX07CisJCQl9OworCisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE3NCw3MCArMTkzLDgzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlkcl9tb2RlID0gImhvc3QiOwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTMwOSwxNCArMzQxLDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OwotCQl9OwotCi0JCXNkaGNAMmUwMDAgewotCQkJbW9kZWwgPSAiZVNESEMiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZXNkaGMiOwotCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKLQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTMyNCw2ICszNDksNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMzMSw2ICszNTcsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zNDYsNiArMzczLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtNDAwLDYgKzQzNCw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUwMzAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTQwOSw0ICs0NDQsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCmluZGV4IDk0MTNhZjMuLjA1MzMzOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cwpAQCAtMjIsNiArMjIsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMDcsMjYgKzEwOSw3MiBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWR0dEA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OworCisJCQkJYXQyNEA1MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMyNTYiOworCQkJCQlyZWcgPSA8MHg1MD47CisJCQkJfTsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzdlcmRiIiwKKwkJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQkJcmVnID0gPDB4MGE+OworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJfTsKIAkJCX07CiAKLQkJCW1jdV9waW86IG1jdUBhIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3N2VyZGIiLAotCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7Ci0JCQkJcmVnID0gPDB4MGE+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk3LDY0ICsyNDUsNzYgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTI4Nyw2ICszNDcsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMjk0LDYgKzM1NSw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzAxLDYgKzM2Myw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMxNiw2ICszNzksMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zNDEsNiArNDExLDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTM1MCw0ICs0MjEsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCmluZGV4IGI4NWZjMDIuLjY1MWZmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cwpAQCAtMjMsNiArMjMsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMjcsMjEgKzEyOSwzOCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7CisJCXNsZWVwLW5leHVzIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CiAKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKLQkJCQlyZWcgPSA8MHg2OD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJfTsKKwkJCX07CisKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMjEzLDcwICsyMzIsODMgQEAKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzA5LDE0ICszNDEsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJc2RoY0AyZTAwMCB7Ci0JCQltb2RlbCA9ICJlU0RIQyI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMzMiw2ICszNTcsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zODcsNiArNDE5LDcgQEAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUwMzAwMDAwIDB4MCAweDAwMTAwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC0zOTUsNCArNDI4LDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwppbmRleCAyM2MxMGNlLi41ZDkwZTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKQEAgLTIyLDYgKzIyLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTA3LDI2ICsxMDksNzIgQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCWdwaW8xOiBncGlvLWNvbnRyb2xsZXJAYzAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4YzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7Ci0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7Ci0JCQkJcmVnID0gPDB4Njg+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCWdwaW8yOiBncGlvLWNvbnRyb2xsZXJAZDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1ncGlvIiwgImZzbCxtcGM4MzQ5LWdwaW8iOworCQkJcmVnID0gPDB4ZDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NzUgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQl9OworCisJCXNsZWVwLW5leHVzIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKKworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlkdHRANDggeworCQkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCQlyZWcgPSA8MHg0OD47CisJCQkJfTsKKworCQkJCWF0MjRANTAgeworCQkJCQljb21wYXRpYmxlID0gImF0MjQsMjRjMjU2IjsKKwkJCQkJcmVnID0gPDB4NTA+OworCQkJCX07CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJfTsKKworCQkJCW1jdV9waW86IG1jdUBhIHsKKwkJCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc4ZXJkYiIsCisJCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7CisJCQkJCXJlZyA9IDwweDBhPjsKKwkJCQkJZ3Bpby1jb250cm9sbGVyOworCQkJCX07CiAJCQl9OwogCi0JCQltY3VfcGlvOiBtY3VAYSB7Ci0JCQkJI2dwaW8tY2VsbHMgPSA8Mj47Ci0JCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzhlcmRiIiwKLQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOwotCQkJCXJlZyA9IDwweDBhPjsKLQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1lc2RoYyIsICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTE5Nyw2MiArMjQ1LDc2IEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCXBoeV90eXBlID0gInVscGkiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0yODUsNiArMzQ3LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMDAsNiArMzYzLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzI1LDYgKzM5NSw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC0zMzQsNCArNDA1LDY4IEBACiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktcGNpIjsKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OworCisJcGNpMTogcGNpZUBlMDAwOTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwOTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwIDB4YTgwMDAwMDAgMCAweDEwMDAwMDAwCisJCSAgICAgICAgICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGI4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMSA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMSA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMzAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKKworCXBjaTI6IHBjaWVAZTAwMGEwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMGEwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMCAweGM4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGQ4MDAwMDAwIDAgMHgwMDgwMDAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDIgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDMgJmlwaWMgMiA4CisJCQkJIDAgMCAwIDQgJmlwaWMgMiA4PjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMGMwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCisJCXBjaWVAMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMCAweDEwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDAgMHgwMDgwMDAwMD47CisJCX07CisJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwppbmRleCBhY2YwNmM0Li5kNmYyMDhiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKQEAgLTEyNywyMSArMTI3LDM4IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKKwkJc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKIAotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOwotCQkJCXJlZyA9IDwweDY4PjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQl9OworCQkJfTsKKworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0yMTMsNjkgKzIzMCw4MyBAQAogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJZHJfbW9kZSA9ICJob3N0IjsKIAkJCXBoeV90eXBlID0gInVscGkiOwotCQl9OwotCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzA4LDE0ICszMzksNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJc2RoY0AyZTAwMCB7Ci0JCQltb2RlbCA9ICJlU0RIQyI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMzIzLDYgKzM0Nyw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzMwLDYgKzM1NSw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCXNhdGFAMWEwMDAgewpAQCAtMzM3LDYgKzM2Myw3IEBACiAJCQlyZWcgPSA8MHgxYTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMGM+OwogCQl9OwogCiAJCXNhdGFAMWIwMDAgewpAQCAtMzQ0LDYgKzM3MSw3IEBACiAJCQlyZWcgPSA8MHgxYjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMDM+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTM1OSw2ICszODcsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC00MTMsNiArNDQ4LDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTAzMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKaW5kZXggNzJjZGMzYy4uOThhZTk1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCkBAIC0xMDcsMjYgKzEwNyw3MiBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWR0dEA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OworCisJCQkJYXQyNEA1MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMyNTYiOworCQkJCQlyZWcgPSA8MHg1MD47CisJCQkJfTsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzllcmRiIiwKKwkJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQkJcmVnID0gPDB4MGE+OworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJfTsKIAkJCX07CiAKLQkJCW1jdV9waW86IG1jdUBhIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OWVyZGIiLAotCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7Ci0JCQkJcmVnID0gPDB4MGE+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk3LDYzICsyNDMsNzYgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7Ci0JCX07Ci0KLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlzbGVlcCA9IDwmcG1jIDB4YzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0yODYsNiArMzQ1LDcgQEAKIAkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKIAkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OwogCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQkJc2xlZXAgPSA8JnBtYyAweDAzMDAwMDAwPjsKIAkJfTsKIAogCQlzYXRhQDE4MDAwIHsKQEAgLTI5Myw2ICszNTMsNyBAQAogCQkJcmVnID0gPDB4MTgwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDQgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMGMwPjsKIAkJfTsKIAogCQlzYXRhQDE5MDAwIHsKQEAgLTMwMCw2ICszNjEsNyBAQAogCQkJcmVnID0gPDB4MTkwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDUgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDMwPjsKIAkJfTsKIAogCQlzYXRhQDFhMDAwIHsKQEAgLTMwNyw2ICszNjksNyBAQAogCQkJcmVnID0gPDB4MWEwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDYgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDBjPjsKIAkJfTsKIAogCQlzYXRhQDFiMDAwIHsKQEAgLTMxNCw2ICszNzcsNyBAQAogCQkJcmVnID0gPDB4MWIwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJc2xlZXAgPSA8JnBtYyAweDAwMDAwMDAzPjsKIAkJfTsKIAogCQkvKiBJUElDCkBAIC0zMjksNiArMzkzLDEzIEBACiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwogCQkJcmVnID0gPDB4NzAwIDB4MTAwPjsKIAkJfTsKKworCQlwbWM6IHBvd2VyQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXBtYyIsICJmc2wsbXBjODM0OS1wbWMiOworCQkJcmVnID0gPDB4YjAwIDB4MTAwIDB4YTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8ODAgMHg4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQl9OwogCX07CiAKIAlwY2kwOiBwY2lAZTAwMDg1MDAgewpAQCAtMzU0LDYgKzQyNSw3IEBACiAJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAwMTAwMDAwPjsKKwkJc2xlZXAgPSA8JnBtYyAweDAwMDEwMDAwPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODUzNmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCmluZGV4IDNjOTA1ZGYuLmIzMWM1MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzCkBAIC0xMzcsNDIgKzEzNyw2IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJdXNiQDIyMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1MzYtdXNiMi1tcGgiLCAiZnNsLXVzYjItbXBoIjsKIAkJCXJlZyA9IDwweDIyMDAwIDB4MTAwMD47CkBAIC0xOTQsMzEgKzE1OCw3MyBAQAogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQl1c2JAMmIwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCmluZGV4IDc5NTcwZmYuLmRkZDY3YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKQEAgLTEyNiw5NyArMTI2LDEwNiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJGRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDw0MSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKaW5kZXggMjIxMDM2YS4uZTQ1MDk3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cwpAQCAtMTI2LDY2ICsxMjYsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0NGRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCmluZGV4IDA2NjhkMTAuLjdjNjkzMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzCkBAIC05OCw0NCArOTgsNiBAQAogCQkJZGZzcnI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCi0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZG1hQDIxMzAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC0xNzgsMzEgKzE0MCw3NCBAQAogCQl9OwogCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKaW5kZXggZGY3NzRhNy4uODA0ZTkwMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtMTQyLDEyOSArMTQyLDE0MSBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAvKiBlVFNFQyAzLzQgYXJlIGN1cnJlbnRseSBicm9rZW4KIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cwppbmRleCAwNTNiMDFlLi45NDg0ZjA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCkBAIC0xMjYsNjYgKzEyNiw3MiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cwppbmRleCAxMWIxYmNiLi5jYzJhY2Y4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCkBAIC0xMTUsNzggKzExNSw4NCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw3IDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCmluZGV4IDE5NTViZDkuLjlkNTJlM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKQEAgLTE0OSw3OCArMTQ5LDg0IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDcgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MSAxPjsKLQkJCQlyZWcgPSA8MHg3PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxIDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAgCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUA3IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MSAxPjsKKwkJCQkJcmVnID0gPDB4Nz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxIDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MiAxPjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKICAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzCmluZGV4IDM1OWMzYjcuLjZlNzlhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE1QQzg1NzIgRFMgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDcsIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTMxMiwxMjkgKzMxMiwxNDEgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCX07Ci0KLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtNjQzLDcgKzY1NSw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCXVsaTE1NzVAMCB7CiAJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtNjU0LDcgKzY2Niw3IEBACiAKIAkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkJICAweDAgMHgxMDAwMD47CiAJCQkJaXNhQDFlIHsKIAkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTc0NCw3ICs3NTYsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIApAQCAtNzgxLDcgKzc5Myw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfMzZiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfMzZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ4MWE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc18zNmIuZHRzCkBAIC0wLDAgKzEsNzk5IEBACisvKgorICogTVBDODU3MiBEUyBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworLyB7CisJbW9kZWwgPSAiZnNsLE1QQzg1NzJEUyI7CisJY29tcGF0aWJsZSA9ICJmc2wsTVBDODU3MkRTIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKworCWFsaWFzZXMgeworCQlldGhlcm5ldDAgPSAmZW5ldDA7CisJCWV0aGVybmV0MSA9ICZlbmV0MTsKKwkJZXRoZXJuZXQyID0gJmVuZXQyOworCQlldGhlcm5ldDMgPSAmZW5ldDM7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODU3MkAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCisJCVBvd2VyUEMsODU3MkAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDI+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCX07CisKKwlsb2NhbGJ1c0BmZmZlMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZWxiYyIsICJmc2wsZWxiYyIsICJzaW1wbGUtYnVzIjsKKwkJcmVnID0gPDB4ZiAweGZmZTA1MDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxOSAyPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJcmFuZ2VzID0gPDB4MCAweDAgMHhmIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAorCQkJICAweDEgMHgwIDB4ZiAweGUwMDAwMDAwIDB4MDgwMDAwMDAKKwkJCSAgMHgyIDB4MCAweGYgMHhmZmEwMDAwMCAweDAwMDQwMDAwCisJCQkgIDB4MyAweDAgMHhmIDB4ZmZkZjAwMDAgMHgwMDAwODAwMAorCQkJICAweDQgMHgwIDB4ZiAweGZmYTQwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHg1IDB4MCAweGYgMHhmZmE4MDAwMCAweDAwMDQwMDAwCisJCQkgIDB4NiAweDAgMHhmIDB4ZmZhYzAwMDAgMHgwMDA0MDAwMD47CisKKwkJbm9yQDAsMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8MT47CisKKwkJCXJhbWRpc2tAMCB7CisJCQkJcmVnID0gPDB4MCAweDAzMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlkaWFnbm9zdGljQDMwMDAwMDAgeworCQkJCXJlZyA9IDwweDAzMDAwMDAwIDB4MDBlMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWRpbmtAM2UwMDAwMCB7CisJCQkJcmVnID0gPDB4MDNlMDAwMDAgMHgwMDIwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJa2VybmVsQDQwMDAwMDAgeworCQkJCXJlZyA9IDwweDA0MDAwMDAwIDB4MDA0MDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWpmZnMyQDQ0MDAwMDAgeworCQkJCXJlZyA9IDwweDA0NDAwMDAwIDB4MDNiMDAwMDA+OworCQkJfTsKKworCQkJZHRiQDdmMDAwMDAgeworCQkJCXJlZyA9IDwweDA3ZjAwMDAwIDB4MDAwODAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXUtYm9vdEA3ZjgwMDAwIHsKKwkJCQlyZWcgPSA8MHgwN2Y4MDAwMCAweDAwMDgwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCW5hbmRAMiwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWZjbS1uYW5kIiwKKwkJCQkgICAgICJmc2wsZWxiYy1mY20tbmFuZCI7CisJCQlyZWcgPSA8MHgyIDB4MCAweDQwMDAwPjsKKworCQkJdS1ib290QDAgeworCQkJCXJlZyA9IDwweDAgMHgwMjAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJamZmczJAMjAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDIwMDAwMDAgMHgxMDAwMDAwMD47CisJCQl9OworCisJCQlyYW1kaXNrQDEyMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxMjAwMDAwMCAweDA4MDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlrZXJuZWxAMWEwMDAwMDAgeworCQkJCXJlZyA9IDwweDFhMDAwMDAwIDB4MDQwMDAwMDA+OworCQkJfTsKKworCQkJZHRiQDFlMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxZTAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQllbXB0eUAxZjAwMDAwMCB7CisJCQkJcmVnID0gPDB4MWYwMDAwMDAgMHgyMTAwMDAwMD47CisJCQl9OworCQl9OworCisJCW5hbmRANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZmNtLW5hbmQiLAorCQkJCSAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDAwMDA+OworCQl9OworCisJCW5hbmRANSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZmNtLW5hbmQiLAorCQkJCSAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwweDUgMHgwIDB4NDAwMDA+OworCQl9OworCisJCW5hbmRANiwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZmNtLW5hbmQiLAorCQkJCSAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwweDYgMHgwIDB4NDAwMDA+OworCQl9OworCX07CisKKwlzb2M4NTcyQGZmZmUwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGYgMHhmZmUwMDAwMCAweDEwMDAwMD47CisJCXJlZyA9IDwweGYgMHhmZmUwMDAwMCAwIDB4MTAwMD47CS8vIENDU1JCQVIgJiBzb2MgcmVncywgcmVtb3ZlIG9uY2UgcGFyc2UgY29kZSBmb3IgaW1tcmJhc2UgZml4ZWQKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBvdXQgYnkgdWJvb3QuCisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQltZW1vcnktY29udHJvbGxlckA2MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4NjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCUwyOiBsMi1jYWNoZS1jb250cm9sbGVyQDIwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbDItY2FjaGUtY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwMCAweDEwMDA+OworCQkJY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWNhY2hlLXNpemUgPSA8MHgxMDAwMDA+OyAvLyBMMiwgMU0KKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZG1hQGMzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHhjMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4YzEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc2IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc3IDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzggMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3OSAyPjsKKwkJCX07CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIxIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDEwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEtY2hhbm5lbCIsCisJCQkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCisJCW1zaUA0MTYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1zaSIsICJmc2wsbXBpYy1tc2kiOworCQkJcmVnID0gPDB4NDE2MDAgMHg4MD47CisJCQltc2ktYXZhaWxhYmxlLXJhbmdlcyA9IDwwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8CisJCQkJMHhlMCAwCisJCQkJMHhlMSAwCisJCQkJMHhlMiAwCisJCQkJMHhlMyAwCisJCQkJMHhlNCAwCisJCQkJMHhlNSAwCisJCQkJMHhlNiAwCisJCQkJMHhlNyAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCWNyeXB0b0AzMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxzZWMzLjAiLCAiZnNsLHNlYzIuNCIsICJmc2wsc2VjMi4yIiwKKwkJCQkgICAgICJmc2wsc2VjMi4xIiwgImZzbCxzZWMyLjAiOworCQkJcmVnID0gPDB4MzAwMDAgMHgxMDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQ1IDIgNTggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWZzbCxudW0tY2hhbm5lbHMgPSA8ND47CisJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CisJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKKwkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJfTsKKworCQltcGljOiBwaWNANDAwMDAgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8MHg0MDAwMCAweDQwMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCX07CisJfTsKKworCXBjaTA6IHBjaWVAZmZmZTA4MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMDgwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDB4YyAweDAwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMwMDAwMCAweDAgMHgwMDAxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmZjAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyAwIC0gUENJIHNsb3QgMSAqLworCQkJMHg4ODAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDEgLSBQQ0kgc2xvdCAxICovCisJCQkweDg5MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4OTAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDg5MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgMiAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGEwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhhMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyAzIC0gUENJIHNsb3QgMSAqLworCQkJMHg4YjAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhiMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4YjAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDQgLSBQQ0kgc2xvdCAxICovCisJCQkweDhjMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4YzAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhjMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNSAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGQwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhkMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZDAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyA2IC0gUENJIHNsb3QgMSAqLworCQkJMHg4ZTAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhlMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ZTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDcgLSBQQ0kgc2xvdCAxICovCisJCQkweDhmMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ZjAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhmMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgMCAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAxIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MTAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkxMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDIgLSBQQ0kgc2xvdCAyICovCisJCQkweDkyMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5MjAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDkyMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgMyAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTMwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkzMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MzAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyA0IC0gUENJIHNsb3QgMiAqLworCQkJMHg5NDAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDk0MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5NDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDUgLSBQQ0kgc2xvdCAyICovCisJCQkweDk1MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NTAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk1MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgNiAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTYwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk2MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NjAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyA3IC0gUENJIHNsb3QgMiAqLworCQkJMHg5NzAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDk3MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5NzAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLy8gSURTRUwgMHgxYyAgVVNCCisJCQkweGUwMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4YyAweDIKKwkJCTB4ZTEwMCAweDAgMHgwIDB4MiAmaTgyNTkgMHg5IDB4MgorCQkJMHhlMjAwIDB4MCAweDAgMHgzICZpODI1OSAweGEgMHgyCisJCQkweGUzMDAgMHgwIDB4MCAweDQgJmk4MjU5IDB4YiAweDIKKworCQkJLy8gSURTRUwgMHgxZCAgQXVkaW8KKwkJCTB4ZTgwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg2IDB4MgorCisJCQkvLyBJRFNFTCAweDFlIExlZ2FjeQorCQkJMHhmMDAwIDB4MCAweDAgMHgxICZpODI1OSAweDcgMHgyCisJCQkweGYxMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NyAweDIKKworCQkJLy8gSURTRUwgMHgxZiBJREUvU0FUQQorCQkJMHhmODAwIDB4MCAweDAgMHgxICZpODI1OSAweGUgMHgyCisJCQkweGY5MDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NSAweDIKKworCQkJPjsKKworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQkJdWxpMTU3NUAwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCSAgMHgwIDB4MTAwMDA+OworCQkJCWlzYUAxZSB7CisJCQkJCWRldmljZV90eXBlID0gImlzYSI7CisJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCQkJcmVnID0gPDB4ZjAwMCAweDAgMHgwIDB4MCAweDA+OworCQkJCQlyYW5nZXMgPSA8MHgxIDB4MCAweDEwMDAwMDAgMHgwIDB4MAorCQkJCQkJICAweDEwMDA+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpODI1OT47CisKKwkJCQkJaTgyNTk6IGludGVycnVwdC1jb250cm9sbGVyQDIwIHsKKwkJCQkJCXJlZyA9IDwweDEgMHgyMCAweDIKKwkJCQkJCSAgICAgICAweDEgMHhhMCAweDIKKwkJCQkJCSAgICAgICAweDEgMHg0ZDAgMHgyPjsKKwkJCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCQkJY29tcGF0aWJsZSA9ICJjaHJwLGlpYyI7CisJCQkJCQlpbnRlcnJ1cHRzID0gPDkgMj47CisJCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJfTsKKworCQkJCQlpODA0MkA2MCB7CisJCQkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkJcmVnID0gPDB4MSAweDYwIDB4MSAweDEgMHg2NCAweDE+OworCQkJCQkJaW50ZXJydXB0cyA9IDwxIDMgMTIgMz47CisJCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0KKwkJCQkJCQk8Jmk4MjU5PjsKKworCQkJCQkJa2V5Ym9hcmRAMCB7CisJCQkJCQkJcmVnID0gPDB4MD47CisJCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsMzAzIjsKKwkJCQkJCX07CisKKwkJCQkJCW1vdXNlQDEgeworCQkJCQkJCXJlZyA9IDwweDE+OworCQkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGYwMyI7CisJCQkJCQl9OworCQkJCQl9OworCisJCQkJCXJ0Y0A3MCB7CisJCQkJCQljb21wYXRpYmxlID0gInBucFBOUCxiMDAiOworCQkJCQkJcmVnID0gPDB4MSAweDcwIDB4Mj47CisJCQkJCX07CisKKwkJCQkJZ3Bpb0A0MDAgeworCQkJCQkJcmVnID0gPDB4MSAweDQwMCAweDgwPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCX07CisKKwlwY2kxOiBwY2llQGZmZmUwOTAwMCB7CisJCWNlbGwtaW5kZXggPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHgyMDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMTAwMDAgMHgwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNSAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHg0IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDUgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4NiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHg3IDB4MQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBmZmZlMGEwMDAgeworCQljZWxsLWluZGV4ID0gPDI+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwYTAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjIDB4NDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzIwMDAwIDB4MCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjYgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgwICovCisJCQkwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDIgJm1waWMgMHgxIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgxCisJCQkwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJCT47CisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUwLmR0cwppbmRleCBmZDQ2MmVmLi4yYmMwYzcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMKQEAgLTYsNyArNiw3IEBACiAgKiBUaGlzIGR0cyBmaWxlIGFsbG93cyBjb3JlMCB0byBoYXZlIG1lbW9yeSwgbDIsIGkyYywgZG1hMSwgZ2xvYmFsLXV0aWwsIGV0aDAsCiAgKiBldGgxLCBjcnlwdG8sIHBjaTAsIHBjaTEuCiAgKgotICogQ29weXJpZ2h0IDIwMDcsIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE0OCwzNSArMTQ4LDM4IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKQEAgLTIyNyw3ICsyMzAsNyBAQAogCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOwogCQkJcHJvdGVjdGVkLXNvdXJjZXMgPSA8CiAJCQkzMSAzMiAzMyAzNyAzOCAzOSAgICAgICAvKiBlbmV0MiBlbmV0MyAqLwotCQkJNzYgNzcgNzggNzkgMjcgNDIJLyogZG1hMiBwY2kyIHNlcmlhbCovCisJCQk3NiA3NyA3OCA3OSAyNiA0MgkvKiBkbWEyIHBjaTIgc2VyaWFsKi8KIAkJCTB4ZTAgMHhlMSAweGUyIDB4ZTMgICAgIC8qIG1zaSAqLwogCQkJMHhlNCAweGU1IDB4ZTYgMHhlNwogCQkJPjsKQEAgLTM3Niw3ICszNzksNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCQl1bGkxNTc1QDAgewogCQkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKIAkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTM4Nyw3ICszOTAsNyBAQAogCiAJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJCSAgMHgwIDB4MTAwMDA+OwogCQkJCWlzYUAxZSB7CiAJCQkJCWRldmljZV90eXBlID0gImlzYSI7CiAJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CkBAIC00NzcsNyArNDgwLDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMS5kdHMKaW5kZXggZTM1MjMwZi4uMTU5Y2IzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUxLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzCkBAIC03LDcgKzcsNyBAQAogICoKICAqIFBsZWFzZSBub3RlIHRvIGFkZCAiLWIgMSIgZm9yIGNvcmUxJ3MgZHRzIGNvbXBpbGluZy4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKIAkJCTE4IDE2IDEwIDQyIDQ1IDU4CS8qIE1FTSBMMiBtZGlvIHNlcmlhbCBjcnlwdG8gKi8KIAkJCTI5IDMwIDM0IDM1IDM2IDQwCS8qIGVuZXQwIGVuZXQxICovCi0JCQkyNCAyNiAyMCAyMSAyMiAyMwkvKiBwY2llMCBwY2llMSBkbWExICovCisJCQkyNCAyNSAyMCAyMSAyMiAyMwkvKiBwY2kwIHBjaTEgZG1hMSAqLwogCQkJNDMJCQkvKiBpMmMgKi8KIAkJCTB4MSAweDIgMHgzIDB4NCAgICAgICAgIC8qIHBjaSBzbG90ICovCiAJCQkweDkgMHhhIDB4YiAweGMgICAgICAgICAvKiB1c2IgKi8KQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODYxMF9ocGNkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCmluZGV4IGY3MjRkNzIuLjFiZDNlYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzCkBAIC0yMTcsNiArMjE3LDcgQEAKIAkJCWNvZGVjLWhhbmRsZSA9IDwmY3M0MjcwPjsKIAkJCWZzbCxwbGF5YmFjay1kbWEgPSA8JmRtYTAwPjsKIAkJCWZzbCxjYXB0dXJlLWRtYSA9IDwmZG1hMDE+OworCQkJZnNsLGZpZm8tZGVwdGggPSA8OD47CiAJCX07CiAKIAkJc3NpQDE2MTAwIHsKQEAgLTIyNSw2ICsyMjYsNyBAQAogCQkJcmVnID0gPDB4MTYxMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDYzIDI+OworCQkJZnNsLGZpZm8tZGVwdGggPSA8OD47CiAJCX07CiAKIAkJZG1hQDIxMzAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKaW5kZXggNDQ4MTUzMi4uZDcyYmViMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCkBAIC0xODAsMTMzICsxODAsMTQ0IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAJCQogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCmluZGV4IGJlMmMxMWMuLjg5NTgzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCkBAIC0xOSw2ICsxOSw3IEBACiAJY29tcGF0aWJsZSA9ICJwaHl0ZWMscGNtMDMwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yOSwyNiArMzAsMjYgQEAKIAkJCXJlZyA9IDwwPjsKIAkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKIAkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKLQkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvKiBMMSwgMTZLICAgICAgICAgICovCi0JCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLyogTDEsIDE2SyAgICAgICAgICAqLwotCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvKiBGcm9tIEJvb3Rsb2FkZXIgICovCi0JCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBCb290bG9hZGVyICAqLwotCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBCb290bG9hZGVyICAqLworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCiAJCX07CiAJfTsKIAogCW1lbW9yeSB7CiAJCWRldmljZV90eXBlID0gIm1lbW9yeSI7Ci0JCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvKiA2NE1CICovCisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CCiAJfTsKIAogCXNvYzUyMDBAZjAwMDAwMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOwotCQlyYW5nZXMgPSA8MHgwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47Ci0JCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIGJvb3Rsb2FkZXIgKi8KLQkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZyb20gYm9vdGxvYWRlciAqLworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKIAogCQljZG1AMjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CkBAIC01Niw4NyArNTcsNzAgQEAKIAkJfTsKIAogCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKLQkJCS8qIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7ICovCisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKIAkJCXJlZyA9IDwweDUwMCAweDgwPjsKIAkJfTsKIAotCQl0aW1lckA2MDAgewkvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKi8KKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4OSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIAotCQl0aW1lckA2MTAgewkvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgKi8KKwkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4YSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwogCQl9OwogCi0JCWdwdDI6IHRpbWVyQDYyMCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDI+OwogCQkJcmVnID0gPDB4NjIwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhiIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQzOiB0aW1lckA2MzAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCXJlZyA9IDwweDYzMCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4YyAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0NDogdGltZXJANjQwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQ0OiB0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8ND47CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGQgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDU6IHRpbWVyQDY1MCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0NTogdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDB4NjUwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhlIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ2OiB0aW1lckA2NjAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDY6IHRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw2PjsKIAkJCXJlZyA9IDwweDY2MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4ZiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0NzogdGltZXJANjcwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQ3OiB0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8Nz47CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDEwIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKQEAgLTE0NCw0MCArMTI4LDMzIEBACiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg1IDB4MCAweDEgMHg2IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKIAkJfTsKIAogCQljYW5AOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MTEgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MTIgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIAogCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg3IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwaW9fd2t1cDogZ3Bpby13a3VwQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4OCAweDAgMHgwIDB4MyAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKQEAgLTE4NSwyNiArMTYyLDIyIEBACiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4ZCAweDAgMHgyIDB4ZSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJkbWEtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKIAkJCXJlZyA9IDwweDEyMDAgMHg4MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MyAweDAgMHgwICAweDMgMHgxIDB4MCAgMHgzIDB4MiAweDAgIDB4MyAweDMgMHgwCi0JCQkgICAgICAgICAgICAgIDB4MyAweDQgMHgwICAweDMgMHg1IDB4MCAgMHgzIDB4NiAweDAgIDB4MyAweDcgMHgwCi0JCQkgICAgICAgICAgICAgIDB4MyAweDggMHgwICAweDMgMHg5IDB4MCAgMHgzIDB4YSAweDAgIDB4MyAweGIgMHgwCi0JCQkgICAgICAgICAgICAgIDB4MyAweGMgMHgwICAweDMgMHhkIDB4MCAgMHgzIDB4ZSAweDAgIDB4MyAweGYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OwogCQl9OwogCiAJCXhsYkAxZjAwIHsKQEAgLTIxMywyNCArMTg2LDE5IEBACiAJCX07CiAKIAkJYWM5N0AyMDAwIHsgLyogUFNDMSBpbiBhYzk3IG1vZGUgKi8KLQkJCWRldmljZV90eXBlID0gInNvdW5kIjsKIAkJCWNvbXBhdGlibGUgPSAibXBjNTIwMGItcHNjLWFjOTciLCJmc2wsbXBjNTIwMGItcHNjLWFjOTciOwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgyIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKIAkJfTsKIAogCQkvKiBQU0MyIHBvcnQgaXMgdXNlZCBieSBDQU4xLzIgKi8KIAogCQlzZXJpYWxAMjQwMCB7IC8qIFBTQzMgaW4gVUFSVCBtb2RlICovCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MyAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDMgMD47CiAJCX07CiAKIAkJLyogUFNDNCBpcyA/Pz8gKi8KQEAgLTIzOCw1NSArMjA2LDQ0IEBACiAJCS8qIFBTQzUgaXMgPz8/ICovCiAKIAkJc2VyaWFsQDJjMDAgeyAvKiBQU0M2IGluIFVBUlQgbW9kZSAqLwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDU+OwogCQkJcmVnID0gPDB4MmMwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDQgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47Ci0JCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMCAwMCAwMCAwMCAwMCAwMF07Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDUgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIAogCQltZGlvQDMwMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCAiZnNsLG1wYzUyMDAtbWRpbyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLyogZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzICovCi0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDUgMHgwPjsJLyogdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uICovCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCiAKLQkJCXBoeTA6ZXRoZXJuZXQtcGh5QDAgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQkJcmVnID0gPDB4MD47CisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OwogCQkJfTsKIAkJfTsKIAogCQlhdGFAM2EwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJhdGEiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg3IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKIAkJfTsKIAogCQlpMmNAM2QwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4ZiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjk0LDEwICsyNTEsOCBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDEwIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQkJcnRjQDUxIHsKIAkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKQEAgLTMwNyw3ICsyNjIsNyBAQAogCQl9OwogCiAJCXNyYW1AODAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSIsInNyYW0iOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOwogCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OwogCQl9OwogCkBAIC0zNDAsMjIgKzI5NSwyMSBAQAogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wY2kiLCJmc2wsbXBjNTIwMC1wY2kiOwogCQlyZWcgPSA8MHhmMDAwMGQwMCAweDEwMD47Ci0JCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwotCQlpbnRlcnJ1cHQtbWFwID0gPDB4YzAwMCAweDAgMHgwIDB4MSAmbXBjNTIwMF9waWMgMHgwIDB4MCAweDMgLyogMXN0IHNsb3QgKi8KLQkJCQkgMHhjMDAwIDB4MCAweDAgMHgyICZtcGM1MjAwX3BpYyAweDEgMHgxIDB4MwotCQkJCSAweGMwMDAgMHgwIDB4MCAweDMgJm1wYzUyMDBfcGljIDB4MSAweDIgMHgzCi0JCQkJIDB4YzAwMCAweDAgMHgwIDB4NCAmbXBjNTIwMF9waWMgMHgxIDB4MyAweDMKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MHhjMDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDAgMyAvLyAxc3Qgc2xvdAorCQkJCSAweGMwMDAgMCAwIDIgJm1wYzUyMDBfcGljIDEgMSAzCisJCQkJIDB4YzAwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAyIDMKKwkJCQkgMHhjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAxIDMgMwogCi0JCQkJIDB4YzgwMCAweDAgMHgwIDB4MSAmbXBjNTIwMF9waWMgMHgxIDB4MSAweDMgLyogMm5kIHNsb3QgKi8KLQkJCQkgMHhjODAwIDB4MCAweDAgMHgyICZtcGM1MjAwX3BpYyAweDEgMHgyIDB4MwotCQkJCSAweGM4MDAgMHgwIDB4MCAweDMgJm1wYzUyMDBfcGljIDB4MSAweDMgMHgzCi0JCQkJIDB4YzgwMCAweDAgMHgwIDB4NCAmbXBjNTIwMF9waWMgMHgwIDB4MCAweDM+OworCQkJCSAweGM4MDAgMCAwIDEgJm1wYzUyMDBfcGljIDEgMSAzIC8vIDJuZCBzbG90CisJCQkJIDB4YzgwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAyIDMKKwkJCQkgMHhjODAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDMgMworCQkJCSAweGM4MDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCi0JCWludGVycnVwdHMgPSA8MHgyIDB4OCAweDAgMHgyIDB4OSAweDAgMHgyIDB4YSAweDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47Ci0JCXJhbmdlcyA9IDwweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKLQkJCSAgMHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDEwMDAwMDAwCi0JCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAweDAgMHgwMTAwMDAwMD47CisJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweGIwMDAwMDAwIDAgMHgwMTAwMDAwMD47CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDA0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cwpAQCAtMCwwICsxLDM5MiBAQAorLyoKKyAqIHBoeUNPUkUtTVBDNTIwMEItSU8gKHBjbTAzMikgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgUGVuZ3V0cm9uaXgKKyAqIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqIEp1ZXJnZW4gQmVpc2VydCA8ai5iZWlzZXJ0QHBlbmd1dHJvbml4LmRlPgorICogV29sZnJhbSBTYW5nIDx3LnNhbmdAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAicGh5dGVjLHBjbTAzMiI7CisJY29tcGF0aWJsZSA9ICJwaHl0ZWMscGNtMDMyIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CS8vIDEyOE1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCXN5c3RlbS1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKworCQljZG1AMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWNkbSIsImZzbCxtcGM1MjAwLWNkbSI7CisJCQlyZWcgPSA8MHgyMDAgMHgzOD47CisJCX07CisKKwkJbXBjNTIwMF9waWM6IGludGVycnVwdC1jb250cm9sbGVyQDUwMCB7CisJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKKwkJCXJlZyA9IDwweDUwMCAweDgwPjsKKwkJfTsKKworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKKwkJCWZzbCxoYXMtd2R0OworCQl9OworCisJCXRpbWVyQDYxMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJfTsKKworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDQ6IHRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ1OiB0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NjogdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDc6IHRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOworCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OworCQl9OworCisJCWNhbkA5MDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7CisJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47CisJCQlyZWcgPSA8MHg5MDAgMHg4MD47CisJCX07CisKKwkJY2FuQDk4MCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKKwkJCXJlZyA9IDwweDk4MCAweDgwPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXNwaUBmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKKwkJCXJlZyA9IDwweGYwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47CisJCX07CisKKwkJdXNiQDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKKwkJCXJlZyA9IDwweDEwMDAgMHhmZj47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQlhYzk3QDIwMDAgewkvKiBQU0MxIGlzIGFjOTcgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy1hYzk3IiwiZnNsLG1wYzUyMDAtcHNjLWFjOTciOworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47CisJCX07CisKKwkJLyogUFNDMiBwb3J0IGlzIHVzZWQgYnkgQ0FOMS8yICovCisKKwkJc2VyaWFsQDI0MDAgeyAvKiBQU0MzIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJcmVnID0gPDB4MjQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKKwkJfTsKKworCQkvKiBQU0M0IGlzID8/PyAqLworCisJCS8qIFBTQzUgaXMgPz8/ICovCisKKwkJc2VyaWFsQDJjMDAgeyAvKiBQU0M2IGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQljZWxsLWluZGV4ID0gPDU+OworCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAzMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJfTsKKworCQltZGlvQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KKworCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisJCX07CisKKwkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKKwkJCWZzbDUyMDAtY2xvY2tpbmc7CisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOworCQkJCXJlZyA9IDwweDUxPjsKKwkJCX07CisJCQllZXByb21ANTIgeworCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMzMiI7CisJCQkJcmVnID0gPDB4NTI+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlwY2lAZjAwMDBkMDAgeworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CisJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MHhjMDAwIDAgMCAxICZtcGM1MjAwX3BpYyAwIDAgMyAvLyAxc3Qgc2xvdAorCQkJCSAweGMwMDAgMCAwIDIgJm1wYzUyMDBfcGljIDEgMSAzCisJCQkJIDB4YzAwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAyIDMKKwkJCQkgMHhjMDAwIDAgMCA0ICZtcGM1MjAwX3BpYyAxIDMgMworCisJCQkJIDB4YzgwMCAwIDAgMSAmbXBjNTIwMF9waWMgMSAxIDMgLy8gMm5kIHNsb3QKKwkJCQkgMHhjODAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGM4MDAgMCAwIDMgJm1wYzUyMDBfcGljIDEgMyAzCisJCQkJIDB4YzgwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OworCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjAwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZlMDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgMSAwIDB4ZmMwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAyIDAgMHhmYmUwMDAwMCAweDAwMjAwMDAwCisJCQkgIDMgMCAweGY5ZTAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgNCAwIDB4ZjdlMDAwMDAgMHgwMjAwMDAwMAorCQkJICA1IDAgMHhlNjAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDYgMCAweGU4MDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgNyAwIDB4ZWEwMDAwMDAgMHgwMjAwMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgwMjAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInVib290bCI7CisJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDQwMDAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAwMDQwMDAwIDB4MDAxYzAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCWxhYmVsID0gImpmZnMyIjsKKwkJCQlyZWcgPSA8MHgwMDIwMDAwMCAweDAxZDAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWYwMDAwMCB7CisJCQkJbGFiZWwgPSAidWJvb3QiOworCQkJCXJlZyA9IDwweDAxZjAwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZjQwMDAwIHsKKwkJCQlsYWJlbCA9ICJlbnYiOworCQkJCXJlZyA9IDwweDAxZjQwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZjgwMDAwIHsKKwkJCQlsYWJlbCA9ICJvZnRyZWUiOworCQkJCXJlZyA9IDwweDAxZjgwMDAwIDB4MDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZmMwMDAwIHsKKwkJCQlsYWJlbCA9ICJzcGFjZSI7CisJCQkJcmVnID0gPDB4MDFmYzAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQl9OworCisJCXNyYW1AMiwwIHsKKwkJCWNvbXBhdGlibGUgPSAibXRkLXJhbSI7CisJCQlyZWcgPSA8MiAwIDB4MDAyMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJfTsKKworICAgICAgICAgICAgICAgIC8qCisJCSAqIGV4YW1wbGUgc25pcHBldHMgZm9yIEZQR0EKKwkJICoKKwkJICogZnBnYUAzLDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiZnBnYV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDwzIDAgMHgwMjAwMDAwMD47CisJCSAqICAgICAgICAgYmFuay13aWR0aCA9IDw0PjsKKwkJICogfTsKKwkJICoKKwkJICogZnBnYUA0LDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiZnBnYV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDw0IDAgMHgwMjAwMDAwMD47CisJCSAqICAgICAgICAgYmFuay13aWR0aCA9IDw0PjsKKwkJICogfTsKKyAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIC8qCisJCSAqIGV4YW1wbGUgc25pcHBldHMgZm9yIGZyZWUgY2hpcHNlbGVjdHMKKyAgICAgICAgICAgICAgICAgKgorCQkgKiBkZXZpY2VANSwwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImN1c3RvbV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDw1IDAgMHgwMjAwMDAwMD47CisJCSAqIH07CisgICAgICAgICAgICAgICAgICoKKwkJICogZGV2aWNlQDYsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJjdXN0b21fZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8NiAwIDB4MDIwMDAwMDA+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqCisJCSAqIGRldmljZUA3LDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiY3VzdG9tX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDcgMCAweDAyMDAwMDAwPjsKKwkJICogfTsKKyAgICAgICAgICAgICAgICAgKi8KKwl9OworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3JlZHdvb2QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3JlZHdvb2QuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDAyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIEFNQ0MgUmVkd29vZCg0NjBTWCkKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBBTUNDIDx0bWFycmlAYW1jYy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQKKyAqIGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworL2R0cy12MS87CisKKy8geworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDE+OworCW1vZGVsID0gImFtY2MscmVkd29vZCI7CisJY29tcGF0aWJsZSA9ICJhbWNjLHJlZHdvb2QiOworCWRjci1wYXJlbnQgPSA8JnsvY3B1cy9jcHVAMH0+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZFTUFDMDsKKwkJc2VyaWFsMCA9ICZVQVJUMDsKKwl9OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJbW9kZWwgPSAiUG93ZXJQQyw0NjBTWCI7CisJCQlyZWcgPSA8MHgwMDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CisJCQlkY3ItY29udHJvbGxlcjsKKwkJCWRjci1hY2Nlc3MtbWV0aG9kID0gIm5hdGl2ZSI7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDAgMHgwMDAwMDAwMD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwl9OworCisJVUlDMDogaW50ZXJydXB0LWNvbnRyb2xsZXIwIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MHN4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDA+OworCQlkY3ItcmVnID0gPDB4MGMwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlVSUMxOiBpbnRlcnJ1cHQtY29udHJvbGxlcjEgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MT47CisJCWRjci1yZWcgPSA8MHgwZDAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHgxZSAweDQgMHgxZiAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlVSUMyOiBpbnRlcnJ1cHQtY29udHJvbGxlcjIgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8Mj47CisJCWRjci1yZWcgPSA8MHgwZTAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHhhIDB4NCAweGIgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJVUlDMzogaW50ZXJydXB0LWNvbnRyb2xsZXIzIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sdWljLTQ2MHN4IiwiaWJtLHVpYyI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQljZWxsLWluZGV4ID0gPDM+OworCQlkY3ItcmVnID0gPDB4MGYwIDB4MDA5PjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPDB4MTAgMHg0IDB4MTEgMHg0PjsgLyogY2FzY2FkZSAqLworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwl9OworCisJU0RSMDogc2RyIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sc2RyLTQ2MHN4IjsKKwkJZGNyLXJlZyA9IDwweDAwZSAweDAwMj47CisJfTsKKworCUNQUjA6IGNwciB7CisJCWNvbXBhdGlibGUgPSAiaWJtLGNwci00NjBzeCI7CisJCWRjci1yZWcgPSA8MHgwMGMgMHgwMDI+OworCX07CisKKwlwbGIgeworCQljb21wYXRpYmxlID0gImlibSxwbGItNDYwc3giLCAiaWJtLHBsYjQiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJU0RSQU0wOiBzZHJhbSB7CisJCQljb21wYXRpYmxlID0gImlibSxzZHJhbS00NjBzeCIsICJpYm0sc2RyYW0tNDA1Z3AiOworCQkJZGNyLXJlZyA9IDwweDAxMCAweDAwMj47CisJCX07CisKKwkJTUFMMDogbWNtYWwgeworCQkJY29tcGF0aWJsZSA9ICJpYm0sbWNtYWwtNDYwc3giLCAiaWJtLG1jbWFsMiI7CisJCQlkY3ItcmVnID0gPDB4MTgwIDB4NjI+OworCQkJbnVtLXR4LWNoYW5zID0gPDQ+OworCQkJbnVtLXJ4LWNoYW5zID0gPDMyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCWludGVycnVwdHMgPSA8CS8qVFhFT0IqLyAweDYgMHg0CisJCQkJCS8qUlhFT0IqLyAweDcgMHg0CisJCQkJCS8qU0VSUiovICAweDEgMHg0CisJCQkJCS8qVFhERSovICAweDIgMHg0CisJCQkJCS8qUlhERSovICAweDMgMHg0CisJCQkJCS8qQ09BTCBUWDAqLyAweDE4IDB4MgorCQkJCQkvKkNPQUwgVFgxKi8gMHgxOSAweDIKKwkJCQkJLypDT0FMIFRYMiovIDB4MWEgMHgyCisJCQkJCS8qQ09BTCBUWDMqLyAweDFiIDB4MgorCQkJCQkvKkNPQUwgUlgwKi8gMHgxYyAweDIKKwkJCQkJLypDT0FMIFJYMSovIDB4MWQgMHgyCisJCQkJCS8qQ09BTCBSWDIqLyAweDFlIDB4MgorCQkJCQkvKkNPQUwgUlgzKi8gMHgxZiAweDI+OworCQl9OworCisJCVBPQjA6IG9wYiB7CisJCQljb21wYXRpYmxlID0gImlibSxvcGItNDYwc3giLCAiaWJtLG9wYiI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcmFuZ2VzID0gPDB4YjAwMDAwMDAgMHgwMDAwMDAwNCAweGIwMDAwMDAwIDB4NTAwMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisKKwkJCUVCQzA6IGViYyB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZWJjLTQ2MHN4IiwgImlibSxlYmMiOworCQkJCWRjci1yZWcgPSA8MHgwMTIgMHgwMDI+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCS8qIHJhbmdlcyBwcm9wZXJ0eSBpcyBzdXBwbGllZCBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDQ+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCisJCQkJbm9yX2ZsYXNoQDAsMCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYW1kLHMyOWdsNTEybiIsICJjZmktZmxhc2giOworCQkJCQliYW5rLXdpZHRoID0gPDI+OworCQkJCQlyZWcgPSA8MHgwMDAwMDAwIDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCQkJcGFydGl0aW9uQDAgeworCQkJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAxZTAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQkJCWxhYmVsID0gImR0YiI7CisJCQkJCQlyZWcgPSA8MHgwMDFlMDAwMCAweDAwMDIwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJyYW1kaXNrIjsKKwkJCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDE0MDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMTYwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJqZmZzMiI7CisJCQkJCQlyZWcgPSA8MHgwMTYwMDAwMCAweDAwNDAwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDFhMDAwMDAgeworCQkJCQkJbGFiZWwgPSAidXNlciI7CisJCQkJCQlyZWcgPSA8MHgwMWEwMDAwMCAweDAyNTYwMDAwPjsKKwkJCQkJfTsKKwkJCQkJcGFydGl0aW9uQDNmNjAwMDAgeworCQkJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQkJCXJlZyA9IDwweDAzZjYwMDAwIDB4MDAwNDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AM2ZhMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCQkJcmVnID0gPDB4MDNmYTAwMDAgMHgwMDA2MDAwMD47CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisKKwkJCVVBUlQwOiBzZXJpYWxAZWY2MDAyMDAgeworCQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDIwMCAweDAwMDAwMDA4PjsKKwkJCQl2aXJ0dWFsLXJlZyA9IDwweGVmNjAwMjAwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljdXJyZW50LXNwZWVkID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQkJaW50ZXJydXB0cyA9IDwweDAgMHg0PjsKKwkJCX07CisKKwkJCVJHTUlJMDogZW1hYy1yZ21paUBlZjYwMDkwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0scmdtaWktNDYwc3giLCAiaWJtLHJnbWlpIjsKKwkJCQlyZWcgPSA8MHhlZjYwMDkwMCAweDAwMDAwMDA4PjsKKwkJCX07CisKKwkJCUVNQUMwOiBldGhlcm5ldEBlZjYwMGEwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQkJY29tcGF0aWJsZSA9ICJpYm0sZW1hYy00NjBzeCIsICJpYm0sZW1hYzQiOworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JkVNQUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDE+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJaW50ZXJydXB0LW1hcCA9IDwvKlN0YXR1cyovIDB4MCAmVUlDMCAweDEzIDB4NAorCQkJCQkJIC8qV2FrZSovICAgMHgxICZVSUMyIDB4MWQgMHg0PjsKKwkJCQlyZWcgPSA8MHhlZjYwMGEwMCAweDAwMDAwMDcwPjsKKwkJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFswMDAwMDAwMDAwMDBdOyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJbWFsLWRldmljZSA9IDwmTUFMMD47CisJCQkJbWFsLXR4LWNoYW5uZWwgPSA8MD47CisJCQkJbWFsLXJ4LWNoYW5uZWwgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQltYXgtZnJhbWUtc2l6ZSA9IDw5MDAwPjsKKwkJCQlyeC1maWZvLXNpemUgPSA8NDA5Nj47CisJCQkJdHgtZmlmby1zaXplID0gPDIwNDg+OworCQkJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJCQlwaHktbWFwID0gPDB4MDAwMDAwMDA+OworCQkJCXJnbWlpLWRldmljZSA9IDwmUkdNSUkwPjsKKwkJCQlyZ21paS1jaGFubmVsID0gPDA+OworCQkJCWhhcy1pbnZlcnRlZC1zdGFjci1vYzsKKwkJCQloYXMtbmV3LXN0YWNyLXN0YW9wYzsKKwkJCX07CisKKwkJfTsKKworCX07CisJY2hvc2VuIHsKKwkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYi9vcGIvc2VyaWFsQGVmNjAwMjAwIjsKKwl9OworCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCmluZGV4IDhkMzY1YTUuLmEzNmRiYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKQEAgLTE1OSw2OCArMTU5LDc2IEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OwotCQkJCXJlZyA9IDwweDE5PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyMSAweDg+OwotCQkJCXJlZyA9IDwweDFhPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKKwkJCQkJcmVnID0gPDB4MTk+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMSAweDg+OworCQkJCQlyZWcgPSA8MHgxYT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCmluZGV4IDJiYWY0YTUuLjljNTA3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKQEAgLTIzNCw2NiArMjM0LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDE+OwotCQkJCXJlZyA9IDwweDE5PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDcgMHgxPjsKLQkJCQlyZWcgPSA8MHgxYT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxOSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDE+OworCQkJCQlyZWcgPSA8MHgxOT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMWEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDcgMHgxPjsKKwkJCQkJcmVnID0gPDB4MWE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MjMgMHgyIDB4MjQgMHgyIDB4MjggMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMKaW5kZXggMDE1NDJmNy4uYjc3MjQwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cwpAQCAtMTM5LDc3ICsxMzksODMgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NiAweDE+OwotCQkJCXJlZyA9IDwweDE5PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDcgMHgxPjsKLQkJCQlyZWcgPSA8MHgxYT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMWIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg4IDB4MT47Ci0JCQkJcmVnID0gPDB4MWI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDFjIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDE+OwotCQkJCXJlZyA9IDwweDFjPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47CisJCQkJCXJlZyA9IDwweDE5PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OworCQkJCQlyZWcgPSA8MHgxYT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMWIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKKwkJCQkJcmVnID0gPDB4MWI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDFjIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4MT47CisJCQkJCXJlZyA9IDwweDFjPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MjMgMHgyIDB4MjQgMHgyIDB4MjggMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMKaW5kZXggMzZkYjk4MS4uZTNlOTE0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCkBAIC0xOTIsMTMyICsxOTIsMTQ0IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDFmIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDFmPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMWYgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MWY+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NvY3JhdGVzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zb2NyYXRlcy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkMGZjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zb2NyYXRlcy5kdHMKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBEZXZpY2UgVHJlZSBTb3VyY2UgZm9yIHRoZSBTb2NyYXRlcyBib2FyZCAoTVBDODU0NCkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVtY3JhZnQgU3lzdGVtcy4KKyAqIFNlcmdlaSBQb3NlbGVub3YsIDxzcG9zZWxlbm92QGVtY3JhZnQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gImFiYixzb2NyYXRlcyI7CisJY29tcGF0aWJsZSA9ICJhYmIsc29jcmF0ZXMiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODU0NEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDB4ODAwMD47CS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDAwMDAwMDA+OwkvLyBGaWxsZWQgaW4gYnkgVS1Cb290CisJfTsKKworCXNvYzg1NDRAZTAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHhlMDAwMDAwMCAweDAwMTAwMDAwPjsKKwkJcmVnID0gPDB4ZTAwMDAwMDAgMHgwMDAwMTAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZpbGxlZCBpbiBieSBVLUJvb3QKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1pbW1yIiwgInNpbXBsZS1idXMiOworCisJCW1lbW9yeS1jb250cm9sbGVyQDIwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCX07CisKKwkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJY2FjaGUtc2l6ZSA9IDwweDQwMDAwPjsJLy8gTDIsIDI1NksKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxNiAyPjsKKwkJfTsKKworCQlpMmNAMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlkdHRAMjggeworCQkJCWNvbXBhdGlibGUgPSAid2luYm9uZCx3ODM3ODJkIjsKKwkJCQlyZWcgPSA8MHgyOD47CisJCQl9OworCQkJcnRjQDMyIHsKKwkJCQljb21wYXRpYmxlID0gImVwc29uLHJ4ODAyNSI7CisJCQkJcmVnID0gPDB4MzI+OworCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCX07CisJCQlkdHRANGMgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzNzUiOworCQkJCXJlZyA9IDwweDRjPjsKKwkJCX07CisJCQl0c0A0YSB7CisJCQkJY29tcGF0aWJsZSA9ICJ0aSx0c2MyMDAzIjsKKwkJCQlyZWcgPSA8MHg0YT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJfTsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8NDMgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwwIDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgeworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDUwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDQyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7CS8vZ2xvYmFsIHV0aWxpdGllcyBibG9jaworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKwl9OworCisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtbG9jYWxidXMiLAorCQkgICAgICAgICAgICAgImZzbCxwcTMtbG9jYWxidXMiLAorCQkJICAgICAic2ltcGxlLWJ1cyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmVnID0gPDB4ZTAwMDUwMDAgMHg0MD47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZjMDAwMDAwIDB4MDQwMDAwMDAKKwkJCSAgMiAwIDB4YzgwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAzIDAgMHhjMDAwMDAwMCAweDAwMTAwMDAwCisJCQk+OyAvKiBPdmVyd3JpdHRlbiBieSBVLUJvb3QgKi8KKworCQlub3JfZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1kLHMyOWdsMjU2biIsICJjZmktZmxhc2giOworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCXJlZyA9IDwweDAgMHgwMDAwMDAgMHg0MDAwMDAwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4MWUwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQkJcGFydGl0aW9uQDFlMDAwMCB7CisJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQlyZWcgPSA8MHgxZTAwMDAgMHgyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJbGFiZWwgPSAicm9vdCI7CisJCQkJcmVnID0gPDB4MjAwMDAwIDB4MjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANDAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHg0MDAwMDAgMHgzYjgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AM2Y4MDAwMCB7CisJCQkJbGFiZWwgPSAiZW52IjsKKwkJCQlyZWcgPSA8MHgzZjgwMDAwIDB4NDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCQlwYXJ0aXRpb25AM2ZjMDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290IjsKKwkJCQlyZWcgPSA8MHgzZmMwMDAwIDB4NDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJZGlzcGxheUAyLDAgeworCQkJY29tcGF0aWJsZSA9ICJmdWppdHN1LGxpbWUiOworCQkJcmVnID0gPDIgMHgwIDB4NDAwMDAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8NiAxPjsKKwkJfTsKKworCQlmcGdhX3BpYzogZnBnYS1waWNAMywxMCB7CisJCQljb21wYXRpYmxlID0gImFiYixzb2NyYXRlcy1mcGdhLXBpYyI7CisJCQlyZWcgPSA8MyAweDEwIDB4MTA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkvKiBJUlFzIDIsIDEwLCAxMSwgYWN0aXZlIGxvdywgbGV2ZWwtc2Vuc2l0aXZlICovCisJCQlpbnRlcnJ1cHRzID0gPDIgMSAxMCAxIDExIDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQl9OworCisJCXNwaUAzLDYwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzLXNwaSI7CisJCQlyZWcgPSA8MyAweDYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDw4IDQgMD47CS8vIG51bWJlciwgdHlwZSwgcm91dGluZworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZnBnYV9waWM+OworCQl9OworCisJCW5hbmRAMyw3MCB7CisJCQljb21wYXRpYmxlID0gImFiYixzb2NyYXRlcy1uYW5kIjsKKwkJCXJlZyA9IDwzIDB4NzAgMHgwND47CisJCQliYW5rLXdpZHRoID0gPDE+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRhdGFAMCB7CisJCQkJbGFiZWwgPSAiZGF0YSI7CisJCQkJcmVnID0gPDB4MCAweDQwMDAwMDAwPjsKKwkJCX07CisJCX07CisKKwkJY2FuQDMsMTAwIHsKKwkJCWNvbXBhdGlibGUgPSAicGhpbGlwcyxzamExMDAwIjsKKwkJCXJlZyA9IDwzIDB4MTAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwyIDggMT47CS8vIG51bWJlciwgdHlwZSwgcm91dGluZworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZnBnYV9waWM+OworCQl9OworCX07CisKKwlwY2kwOiBwY2lAZTAwMDgwMDAgeworCQljZWxsLWluZGV4ID0gPDA+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtcGNpIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJcmVnID0gPDB4ZTAwMDgwMDAgMHgxMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDY2NjY2NjY2PjsKKworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCQkvKiBJRFNFTCAweDExICovCisJCQkJIDB4ODgwMCAweDAgMHgwIDEgJm1waWMgNSAxCisJCQkJLyogSURTRUwgMHgxMiAqLworCQkJCSAweDkwMDAgMHgwIDB4MCAxICZtcGljIDQgMT47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI0IDI+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4MD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyMDAwMDAwIDB4MCAweDAxMDAwMDAwPjsKKwl9OworCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3N0eF9ncDNfODU2MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4X2dwM184NTYwLmR0cwppbmRleCBmZmYzM2ZlLi44YjE3Mzk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4X2dwM184NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4X2dwM184NTYwLmR0cwpAQCAtMTI0LDY2ICsxMjQsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDQ+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgND47Ci0JCQkJcmVnID0gPDQ+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSA0PjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDQ+OworCQkJCQlyZWcgPSA8ND47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5ND47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwppbmRleCA5MDYzMDJlLi5jOTU5MGI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCkBAIC0xNyw2ICsxNyw3IEBACiAJY29tcGF0aWJsZSA9ICJ0cWMsdHFtNTIwMCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjYsMzYgKzY3LDMzIEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiI7CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5MDAgMHg4MD47CiAJCX07CiAKIAkJY2FuQDk4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIjsKIAkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIAotCQlncGlvQGIwMCB7CisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKQEAgLTEwNSw3ICsxMDMsNiBAQAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTE0LDM5ICsxMTEsMjggQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyMjAwIHsJCS8vIFBTQzIKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDE+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDI0MDAgewkJLy8gUFNDMwotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8Mj47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjQwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCX07CiAKQEAgLTE1NiwxMCArMTQyLDggQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDA+OwogCQkJfTsKIAkJfTsKQEAgLTE2OCw3ICsxNTIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0xNzcsNyArMTYwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJIHJ0Y0A2OCB7CkBAIC0xOTIsOSArMTc0LDggQEAKIAkJfTsKIAl9OwogCi0JbHBiIHsKLQkJbW9kZWwgPSAiZnNsLGxwYiI7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLGxwYiI7CisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOwogCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCXJhbmdlcyA9IDwwIDAgMHhmYzAwMDAwMCAweDAyMDAwMDAwPjsKQEAgLTIyMyw3ICsyMDQsNiBAQAogCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDAgMCAzPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCiAJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKLQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDEwMDAwMDAwCiAJCQkgIDB4MDIwMDAwMDAgMCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMCAweDEwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMKaW5kZXggYTY5M2YwMS4uYWM5NDEzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cwpAQCAtODQsNiArODQsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTMxLDk0ICsxMzYsMTAzIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiRkVDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8NDEgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQxLmR0cwppbmRleCA5ZTNmNWYwZC4uYzcxYmI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQxLmR0cwpAQCAtODMsNiArODMsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTMwLDcyICsxMzUsNzggQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cwppbmRleCAxNTA4NmViLi4yOGIxYTk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzCkBAIC04NSw2ICs4NSwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xNDMsMTM0ICsxNDgsMTQ2IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8ND47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk1OiBldGhlcm5ldC1waHlANSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDw1PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8ND47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk1OiBldGhlcm5ldC1waHlANSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDw1PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNzAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI3MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzcgMiAzOCAyIDM5IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkzPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTQ+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTM2NSwxNCArMzgyLDE0IEBACiAJCWNhbjBAMiwwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCWNhbjFAMiwxMDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzCmluZGV4IGI3YjY1ZjUuLjgyNmZiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMKQEAgLTg1LDYgKzg1LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTE0MywxMzQgKzE0OCwxNDYgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk0OiBldGhlcm5ldC1waHlANCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDw0PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDU+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDU+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5ND47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzY1LDE0ICszODIsMTQgQEAKIAkJY2FuMEAyLDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJY2FuMUAyLDEwMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMKaW5kZXggY2Y5MmI0ZS4uYTEzM2RlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cwpAQCAtODMsNiArODMsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTMwLDcyICsxMzUsNzggQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cwppbmRleCA5ZTFhYjJkLi42NDllMmU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzCkBAIC04NSw2ICs4NSwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzIsNzIgKzEzNyw3OCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJbXBpYzogcGljQDQwMDAwIHsKQEAgLTMzNSwxNCArMzQ2LDE0IEBACiAJCWNhbjBAMiwwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCiAJCWNhbjFAMiwxMDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDEwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3ZpcnRleDQ0MC1tbDUwNy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdmlydGV4NDQwLW1sNTA3LmR0cwppbmRleCBkYzhlNzhlLi41MmQ4YzFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdmlydGV4NDQwLW1sNTA3LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdmlydGV4NDQwLW1sNTA3LmR0cwpAQCAtNyw2ICs3LDE1IEBACiAgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIC0tLQorICoKKyAqIERldmljZSBUcmVlIEdlbmVyYXRvciB2ZXJzaW9uOiAxLjEKKyAqCisgKiBDQVVUSU9OOiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgbGliZ2VuLgorICogVmVyc2lvbjogWGlsaW54IEVESyAxMC4xLjAzIEVES19LX1NQMy42CisgKgorICogWFBTIHByb2plY3QgZGlyZWN0b3J5OiBtbDUwN19wcGM0NDBfZW1iX3JlZgogICovCiAKIC9kdHMtdjEvOwpAQCAtMjIsOCArMzEsOCBAQAogCQlyZWcgPSA8IDAgMHgxMDAwMDAwMCA+OwogCX0gOwogCWNob3NlbiB7Ci0JCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAgaXA9b24gcm9vdD0vZGV2L3JhbSI7Ci0JCWxpbnV4LHN0ZG91dC1wYXRoID0gIi9wbGJAMC9zZXJpYWxAODNlMDAwMDAiOworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwIHJvb3Q9L2Rldi9yYW0iOworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZSUzIzMl9VYXJ0XzE7CiAJfSA7CiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtMTM2LDE5ICsxNDUsMTkgQEAKIAkJCQljb21wYXRpYmxlID0gInhsbngsbGwtZG1hLTEuMDAuYSI7CiAJCQkJZGNyLXJlZyA9IDwgMHg4MCAweDExID47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47Ci0JCQkJaW50ZXJydXB0cyA9IDwgOSAyIDB4YSAyID47CisJCQkJaW50ZXJydXB0cyA9IDwgMTAgMiAxMSAyID47CiAJCQl9IDsKIAkJfSA7CiAJfSA7CiAJcGxiX3Y0Nl8wOiBwbGJAMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKLQkJY29tcGF0aWJsZSA9ICJ4bG54LHBsYi12NDYtMS4wMi5hIiwgInNpbXBsZS1idXMiOworCQljb21wYXRpYmxlID0gInhsbngscGxiLXY0Ni0xLjAzLmEiLCAic2ltcGxlLWJ1cyI7CiAJCXJhbmdlcyA7CiAJCURJUF9Td2l0Y2hlc184Qml0OiBncGlvQDgxNDYwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtZ3Bpby0xLjAwLmEiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47Ci0JCQlpbnRlcnJ1cHRzID0gPCA2IDIgPjsKKwkJCWludGVycnVwdHMgPSA8IDcgMiA+OwogCQkJcmVnID0gPCAweDgxNDYwMDAwIDB4MTAwMDAgPjsKIAkJCXhsbngsYWxsLWlucHV0cyA9IDwxPjsKIAkJCXhsbngsYWxsLWlucHV0cy0yID0gPDA+OwpAQCAtMTYzLDYgKzE3Miw4NiBAQAogCQkJeGxueCx0cmktZGVmYXVsdCA9IDwweGZmZmZmZmZmPjsKIAkJCXhsbngsdHJpLWRlZmF1bHQtMiA9IDwweGZmZmZmZmZmPjsKIAkJfSA7CisJCUZMQVNIOiBmbGFzaEBmYzAwMDAwMCB7CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1tY2gtZW1jLTIuMDAuYSIsICJjZmktZmxhc2giOworCQkJcmVnID0gPCAweGZjMDAwMDAwIDB4MjAwMDAwMCA+OworCQkJeGxueCxmYW1pbHkgPSAidmlydGV4NSI7CisJCQl4bG54LGluY2x1ZGUtZGF0YXdpZHRoLW1hdGNoaW5nLTAgPSA8MHgxPjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMSA9IDwweDA+OworCQkJeGxueCxpbmNsdWRlLWRhdGF3aWR0aC1tYXRjaGluZy0yID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtZGF0YXdpZHRoLW1hdGNoaW5nLTMgPSA8MHgwPjsKKwkJCXhsbngsaW5jbHVkZS1uZWdlZGdlLWlvcmVncyA9IDwweDA+OworCQkJeGxueCxpbmNsdWRlLXBsYi1pcGlmID0gPDB4MT47CisJCQl4bG54LGluY2x1ZGUtd3JidWYgPSA8MHgxPjsKKwkJCXhsbngsbWF4LW1lbS13aWR0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoLW5hdGl2ZS1kd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1jaC1wbGItY2xrLXBlcmlvZC1wcyA9IDwweDI3MTA+OworCQkJeGxueCxtY2gtc3BsYi1hd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1jaDAtYWNjZXNzYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gwLXByb3RvY29sID0gPDB4MD47CisJCQl4bG54LG1jaDAtcmRkYXRhYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gxLWFjY2Vzc2J1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMS1wcm90b2NvbCA9IDwweDA+OworCQkJeGxueCxtY2gxLXJkZGF0YWJ1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMi1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDItcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMi1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDMtYWNjZXNzYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gzLXByb3RvY29sID0gPDB4MD47CisJCQl4bG54LG1jaDMtcmRkYXRhYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtZW0wLXdpZHRoID0gPDB4MTA+OworCQkJeGxueCxtZW0xLXdpZHRoID0gPDB4MjA+OworCQkJeGxueCxtZW0yLXdpZHRoID0gPDB4MjA+OworCQkJeGxueCxtZW0zLXdpZHRoID0gPDB4MjA+OworCQkJeGxueCxudW0tYmFua3MtbWVtID0gPDB4MT47CisJCQl4bG54LG51bS1jaGFubmVscyA9IDwweDI+OworCQkJeGxueCxwcmlvcml0eS1tb2RlID0gPDB4MD47CisJCQl4bG54LHN5bmNoLW1lbS0wID0gPDB4MD47CisJCQl4bG54LHN5bmNoLW1lbS0xID0gPDB4MD47CisJCQl4bG54LHN5bmNoLW1lbS0yID0gPDB4MD47CisJCQl4bG54LHN5bmNoLW1lbS0zID0gPDB4MD47CisJCQl4bG54LHN5bmNoLXBpcGVkZWxheS0wID0gPDB4Mj47CisJCQl4bG54LHN5bmNoLXBpcGVkZWxheS0xID0gPDB4Mj47CisJCQl4bG54LHN5bmNoLXBpcGVkZWxheS0yID0gPDB4Mj47CisJCQl4bG54LHN5bmNoLXBpcGVkZWxheS0zID0gPDB4Mj47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0wID0gPDB4MWFkYjA+OworCQkJeGxueCx0YXZkdi1wcy1tZW0tMSA9IDwweDNhOTg+OworCQkJeGxueCx0YXZkdi1wcy1tZW0tMiA9IDwweDNhOTg+OworCQkJeGxueCx0YXZkdi1wcy1tZW0tMyA9IDwweDNhOTg+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMCA9IDwweDFhZGIwPjsKKwkJCXhsbngsdGNlZHYtcHMtbWVtLTEgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGNlZHYtcHMtbWVtLTIgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGNlZHYtcHMtbWVtLTMgPSA8MHgzYTk4PjsKKwkJCXhsbngsdGh6Y2UtcHMtbWVtLTAgPSA8MHg4OGI4PjsKKwkJCXhsbngsdGh6Y2UtcHMtbWVtLTEgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6Y2UtcHMtbWVtLTIgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6Y2UtcHMtbWVtLTMgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6b2UtcHMtbWVtLTAgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6b2UtcHMtbWVtLTEgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6b2UtcHMtbWVtLTIgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGh6b2UtcHMtbWVtLTMgPSA8MHgxYjU4PjsKKwkJCXhsbngsdGx6d2UtcHMtbWVtLTAgPSA8MHg4OGI4PjsKKwkJCXhsbngsdGx6d2UtcHMtbWVtLTEgPSA8MHgwPjsKKwkJCXhsbngsdGx6d2UtcHMtbWVtLTIgPSA8MHgwPjsKKwkJCXhsbngsdGx6d2UtcHMtbWVtLTMgPSA8MHgwPjsKKwkJCXhsbngsdHdjLXBzLW1lbS0wID0gPDB4MmFmOD47CisJCQl4bG54LHR3Yy1wcy1tZW0tMSA9IDwweDNhOTg+OworCQkJeGxueCx0d2MtcHMtbWVtLTIgPSA8MHgzYTk4PjsKKwkJCXhsbngsdHdjLXBzLW1lbS0zID0gPDB4M2E5OD47CisJCQl4bG54LHR3cC1wcy1tZW0tMCA9IDwweDExMTcwPjsKKwkJCXhsbngsdHdwLXBzLW1lbS0xID0gPDB4MmVlMD47CisJCQl4bG54LHR3cC1wcy1tZW0tMiA9IDwweDJlZTA+OworCQkJeGxueCx0d3AtcHMtbWVtLTMgPSA8MHgyZWUwPjsKKwkJCXhsbngseGNsMC1saW5lc2l6ZSA9IDwweDQ+OworCQkJeGxueCx4Y2wwLXdyaXRleGZlciA9IDwweDE+OworCQkJeGxueCx4Y2wxLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDEtd3JpdGV4ZmVyID0gPDB4MT47CisJCQl4bG54LHhjbDItbGluZXNpemUgPSA8MHg0PjsKKwkJCXhsbngseGNsMi13cml0ZXhmZXIgPSA8MHgxPjsKKwkJCXhsbngseGNsMy1saW5lc2l6ZSA9IDwweDQ+OworCQkJeGxueCx4Y2wzLXdyaXRleGZlciA9IDwweDE+OworCQl9IDsKIAkJSGFyZF9FdGhlcm5ldF9NQUM6IHhwcy1sbC10ZW1hY0A4MWMwMDAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDE+OwpAQCAtMTg1LDYgKzI3NCwxOSBAQAogCQkJCXhsbngsdHhmaWZvID0gPDB4MTAwMD47CiAJCQl9IDsKIAkJfSA7CisJCUlJQ19FRVBST006IGkyY0A4MTYwMDAwMCB7CisJCQljb21wYXRpYmxlID0gInhsbngseHBzLWlpYy0yLjAwLmEiOworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47CisJCQlpbnRlcnJ1cHRzID0gPCA2IDIgPjsKKwkJCXJlZyA9IDwgMHg4MTYwMDAwMCAweDEwMDAwID47CisJCQl4bG54LGNsay1mcmVxID0gPDB4NWY1ZTEwMD47CisJCQl4bG54LGZhbWlseSA9ICJ2aXJ0ZXg1IjsKKwkJCXhsbngsZ3BvLXdpZHRoID0gPDB4MT47CisJCQl4bG54LGlpYy1mcmVxID0gPDB4MTg2YTA+OworCQkJeGxueCxzY2wtaW5lcnRpYWwtZGVsYXkgPSA8MHgwPjsKKwkJCXhsbngsc2RhLWluZXJ0aWFsLWRlbGF5ID0gPDB4MD47CisJCQl4bG54LHRlbi1iaXQtYWRyID0gPDB4MD47CisJCX0gOwogCQlMRURzXzhCaXQ6IGdwaW9AODE0MDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ncGlvLTEuMDAuYSI7CiAJCQlyZWcgPSA8IDB4ODE0MDAwMDAgMHgxMDAwMCA+OwpAQCAtMjIwLDcgKzMyMiw3IEBACiAJCVB1c2hfQnV0dG9uc181Qml0OiBncGlvQDgxNDQwMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtZ3Bpby0xLjAwLmEiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmeHBzX2ludGNfMD47Ci0JCQlpbnRlcnJ1cHRzID0gPCA3IDIgPjsKKwkJCWludGVycnVwdHMgPSA8IDggMiA+OwogCQkJcmVnID0gPCAweDgxNDQwMDAwIDB4MTAwMDAgPjsKIAkJCXhsbngsYWxsLWlucHV0cyA9IDwxPjsKIAkJCXhsbngsYWxsLWlucHV0cy0yID0gPDA+OwpAQCAtMjM3LDEzICszMzksMTMgQEAKIAkJfSA7CiAJCVJTMjMyX1VhcnRfMTogc2VyaWFsQDgzZTAwMDAwIHsKIAkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDAwMDA+OwotCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy11YXJ0MTY1NTAtMi4wMC5hIiwgIm5zMTY1NTAiOwotCQkJY3VycmVudC1zcGVlZCA9IDwweDI1ODA+OworCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy11YXJ0MTY1NTAtMi4wMC5iIiwgIm5zMTY1NTAiOworCQkJY3VycmVudC1zcGVlZCA9IDw5NjAwPjsKIAkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCWludGVycnVwdHMgPSA8IDggMiA+OworCQkJaW50ZXJydXB0cyA9IDwgOSAyID47CiAJCQlyZWcgPSA8IDB4ODNlMDAwMDAgMHgxMDAwMCA+OwotCQkJcmVnLW9mZnNldCA9IDwzPjsKKwkJCXJlZy1vZmZzZXQgPSA8MHgxMDAzPjsKIAkJCXJlZy1zaGlmdCA9IDwyPjsKIAkJCXhsbngsZmFtaWx5ID0gInZpcnRleDUiOwogCQkJeGxueCxoYXMtZXh0ZXJuYWwtcmNsayA9IDwwPjsKQEAgLTI2OCw3ICszNzAsNyBAQAogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1pbnRjLTEuMDAuYSI7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlciA7CiAJCQlyZWcgPSA8IDB4ODE4MDAwMDAgMHgxMDAwMCA+OwotCQkJeGxueCxudW0taW50ci1pbnB1dHMgPSA8MHhiPjsKKwkJCXhsbngsbnVtLWludHItaW5wdXRzID0gPDB4Yz47CiAJCX0gOwogCQl4cHNfdGltZWJhc2Vfd2R0XzE6IHhwcy10aW1lYmFzZS13ZHRAODNhMDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy10aW1lYmFzZS13ZHQtMS4wMC5iIjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKaW5kZXggOGIzNjA3Yy4uZjIxNTZmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMKQEAgLTExNyw3ICsxMTcsOCBAQAogCWlmIChkZXZwID09IE5VTEwpCiAJCWdvdG8gZXJyX291dDsKIAotCWlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJuczE2NTUwIikpCisJaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgIm5zMTY1NTAiKSB8fAorCSAgICBkdF9pc19jb21wYXRpYmxlKGRldnAsICJwbnBQTlAsNTAxIikpCiAJCXJjID0gbnMxNjU1MF9jb25zb2xlX2luaXQoZGV2cCwgJnNlcmlhbF9jZCk7CiAJZWxzZSBpZiAoZHRfaXNfY29tcGF0aWJsZShkZXZwLCAibWFydmVsbCxtdjY0MzYwLW1wc2MiKSkKIAkJcmMgPSBtcHNjX2NvbnNvbGVfaW5pdChkZXZwLCAmc2VyaWFsX2NkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCmluZGV4IDk2NWMyMzcuLjNhYzc1YWUgMTAwNzU1Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgpAQCAtMTg2LDYgKzE4Niw5IEBACiAgICAgKi1tcGM4NSp8Ki10cW04NSp8Ki1zYmM4NSopCiAgICAgICAgIHBsYXRmb3Jtbz0kb2JqZWN0L2N1Ym9vdC04NXh4Lm8KICAgICAgICAgOzsKKyAgICAqLWFtaWdhb25lKQorICAgICAgICBsaW5rX2FkZHJlc3M9JzB4ODAwMDAwJworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogcHMzKQpAQCAtMjExLDExICsyMTQsMTEgQEAKICAgICBiaW5hcnk9eQogICAgIDs7CiBzaW1wbGVib290LXZpcnRleDQ0MC0qKQotICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9zaW1wbGVib290Lm8gJG9iamVjdC92aXJ0ZXgubyIKKyAgICBwbGF0Zm9ybW89IiRvYmplY3QvZml4ZWQtaGVhZC5vICRvYmplY3Qvc2ltcGxlYm9vdC5vICRvYmplY3QvdmlydGV4Lm8iCiAgICAgYmluYXJ5PXkKICAgICA7Owogc2ltcGxlYm9vdC0qKQotICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9zaW1wbGVib290Lm8iCisgICAgcGxhdGZvcm1vPSIkb2JqZWN0L2ZpeGVkLWhlYWQubyAkb2JqZWN0L3NpbXBsZWJvb3QubyIKICAgICBiaW5hcnk9eQogICAgIDs7CiBhc3A4MzR4LXJlZGJvb3QpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwppbmRleCA4MWNkY2M0Li5mOWEwOGVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMyCi0jIFR1ZSBKYW4gMjAgMDg6MjI6MzUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBNb24gRmViICAyIDEzOjEzOjA0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtNzQsNiArNzQsMTUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTE0NywxMSArMTU2LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKIApAQCAtMzczLDYgKzM3Nyw3IEBACiBDT05GSUdfUFJPQ19FVkVOVFM9eQogIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKIENPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtMzg0LDYgKzM4OSw3IEBACiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMApAQCAtNDY2LDYgKzQ3MiwxNSBAQAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC01MzMsMTMgKzU0OCwxMzYgQEAKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19JQk1fSUlDPXkKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQUQ3NDE0PXkKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CkBAIC01NTYsNyArNjk0LDEyIEBACiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwpAQCAtNTc0LDYgKzcxNyw3IEBACiAjIE11bHRpbWVkaWEgZHJpdmVycwogIwogQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC01OTAsNyArNzM0LDEwOSBAQAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD1tCisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2NTQzMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpAQCAtMCwwICsxLDExNzYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgV2VkIEZlYiAgNCAxNDozMTowOSAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CitDT05GSUdfNDR4PXkKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHXzR4eD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX1BURV82NEJJVD15CitDT05GSUdfUEhZU182NEJJVD15CitDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAorQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUj15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CisjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAorIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAorIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAorIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CitDT05GSUdfUkVEV09PRD15CisjIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAorQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQorIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAorQ09ORklHXzQ2MFNYPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iIgorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfNHh4X1NPQz15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBU19BVFRSUz15CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OPXkKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNJT05fU0FTPXkKK0NPTkZJR19GVVNJT05fTUFYX1NHRT0xMjgKKyMgQ09ORklHX0ZVU0lPTl9DVEwgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKK0NPTkZJR19JMk89eQorQ09ORklHX0kyT19MQ1RfTk9USUZZX09OX0NIQU5HRVM9eQorQ09ORklHX0kyT19FWFRfQURBUFRFQz15CisjIENPTkZJR19JMk9fQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyT19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX0JMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyT19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyT19QUk9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CitDT05GSUdfSUJNX05FV19FTUFDPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCitDT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgorQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAorQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRz15CitDT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15CitDT05GSUdfSUJNX05FV19FTUFDX1RBSD15CitDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPXkKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTEKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTEKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CisjIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0lCTV9JSUM9eQorIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfREVCVUdfQ09SRT15CitDT05GSUdfSTJDX0RFQlVHX0FMR089eQorQ09ORklHX0kyQ19ERUJVR19CVVM9eQorQ09ORklHX0kyQ19ERUJVR19DSElQPXkKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9eQorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DUllQVEQ9eQorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPXkKK0NPTkZJR19DUllQVE9fR0NNPXkKK0NPTkZJR19DUllQVE9fU0VRSVY9eQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj15CitDT05GSUdfQ1JZUFRPX0NUUz15CitDT05GSUdfQ1JZUFRPX0VDQj15CitDT05GSUdfQ1JZUFRPX0xSVz15CitDT05GSUdfQ1JZUFRPX1BDQkM9eQorQ09ORklHX0NSWVBUT19YVFM9eQorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9eQorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01END15CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PXkKK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjOTA0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTQxMCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LjIKKyMgU2F0IE9jdCAxOCAxMTowNjoxMyAyMDA4CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHXzZ4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg1eHg9eQorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX0U1MDA9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19GU0xfQk9PS0U9eQorQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TUEU9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorQ09ORklHX1BQQ19NRVJHRT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKKyMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNT0QgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19NUEM4NXh4PXkKKyMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorQ09ORklHX1NPQ1JBVEVTPXkKKyMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMjUwPXkKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKKyMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR19GU0xfU09DPXkKK0NPTkZJR19GU0xfUENJPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfQUxJR049MHgxMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKK0NPTkZJR19DQU49eQorQ09ORklHX0NBTl9SQVc9eQorQ09ORklHX0NBTl9CQ009eQorCisjCisjIENBTiBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfQ0FOX1ZDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX09MRF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9TTENBTiBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX1NKQTEwMDA9eQorQ09ORklHX0NBTl9TSkExMDAwX01FTV9PRj15CisjIENPTkZJR19DQU5fRU1TX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fSVhYQVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9QRUFLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fS1ZBU0VSX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fTVNDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9TT0NSQVRFUz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01BUlZFTExfUEhZPXkKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKK0NPTkZJR19HRkFSX05BUEk9eQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9ODAwCitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NDgwCisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDM9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX01QQz15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX1NQSV9TT0NSQVRFUz15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CitDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE03NT15CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19XODM3ODFEPXkKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CitDT05GSUdfRkJfQk9USF9FTkRJQU49eQorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCitDT05GSUdfRkJfTUI4NjJYWD15CisjIENPTkZJR19GQl9NQjg2MlhYX1BDSV9HREMgaXMgbm90IHNldAorQ09ORklHX0ZCX01CODYyWFhfTElNRT15CisjIENPTkZJR19GQl9QUkVfSU5JVF9GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAorIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRlNMX0RJVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVFM9eQorIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHgxNj15CisjIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JYODAyNT15CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1BQQz15CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorIyBDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYyYzE2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE4ODkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzcKKyMgRnJpIE1hciAxMyAxNTozNjoxMSAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX0dFRl9QUEM5QT15CisjIENPTkZJR19HRUZfU0JDMzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFRl9TQkM2MTAgaXMgbm90IHNldAorQ09ORklHX01QQzg2NDE9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz1tCisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfUENJX0RFQlVHPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1FVRVVFPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0VDTj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUkFXPW0KKyMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCisKKyMKKyMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCisjIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BTkdMRT1tCisjIENPTkZJR19JUDZfTkZfVEFSR0VUX0hMIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfUkFXPW0KKyMgQ09ORklHX0lQNl9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfU0NUUD1tCisjIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKK0NPTkZJR19USVBDPW0KKyMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAorIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVRNPW0KK0NPTkZJR19BVE1fQ0xJUD1tCisjIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfU1RQPW0KK0NPTkZJR19CUklER0U9bQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CitDT05GSUdfVkxBTl84MDIxUT1tCisjIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XQU5fUk9VVEVSPW0KK0NPTkZJR19ORVRfU0NIRUQ9eQorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCisjIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KKyMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFND1tCitDT05GSUdfTkVUX0NMU19ST1VURT15CitDT05GSUdfTkVUX0NMU19GVz1tCitDT05GSUdfTkVUX0NMU19VMzI9bQorIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19SU1ZQPW0KK0NPTkZJR19ORVRfQ0xTX1JTVlA2PW0KKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZJRk89eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0dQSU89eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CisjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUw9eQorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfQVRNX0RSSVZFUlM9eQorIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRk9SRTIwMEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9TT0xPUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CitDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfTlZSQU09eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfRFMxNjgyPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0xNOTA9eQorQ09ORklHX1NFTlNPUlNfTE05Mj15CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorQ09ORklHX0dFRl9XRFQ9eQorIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCitDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19USFJVU1RNQVNURVJfRkY9bQorQ09ORklHX1pFUk9QTFVTX0ZGPW0KK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SWDg1ODE9eQorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZPXkKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQorIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX05VTEw9bQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIzNmIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE2MTMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgV2VkIEphbiAyOCAyMzowNTozNCAyMDA5CisjCisjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKK0NPTkZJR182eHg9eQorIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CisjIENPTkZJR180MHggaXMgbm90IHNldAorIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0UyMDAgaXMgbm90IHNldAorQ09ORklHX1BQQ19GUFU9eQorIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1NNUD15CitDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19HUElPPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CitDT05GSUdfR0VORVJJQ19UQlNZTkM9eQorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKK0NPTkZJR19SRUxBWT15CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfU1RPUF9NQUNISU5FPXkKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKK0NPTkZJR19QUENfTVVMVElQTEFURk9STT15CitDT05GSUdfQ0xBU1NJQzMyPXkKKyMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODZ4eD15CisjIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAorIyBDT05GSUdfU0JDODY0MUQgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODYxMF9IUENEIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfU0JDMzEwPXkKKyMgQ09ORklHX0dFRl9TQkM2MTAgaXMgbm90IHNldAorQ09ORklHX01QQzg2NDE9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CitDT05GSUdfSFpfMTAwMD15CitDT05GSUdfSFo9MTAwMAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CitDT05GSUdfUENJRVBPUlRCVVM9eQorQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKK0NPTkZJR19QQ0lfTVNJPXkKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX0xPV01FTV9DQU1fTlVNPTMKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX05FVF9JUEdSRT1tCitDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CitDT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD1tCitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCitDT05GSUdfTkVUX1BLVEdFTj1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX0ZJQl9SVUxFUz15CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0dQSU89eQorQ09ORklHX09GX0kyQz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorQ09ORklHX0JMS19ERVZfTkJEPW0KKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorQ09ORklHX0FUQT15CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfU0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCitDT05GSUdfQk9ORElORz1tCisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CitDT05GSUdfVFVOPW0KKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfR0lBTkZBUj15CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CitDT05GSUdfU0xJUD1tCitDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKK0NPTkZJR19TTEhDPW0KK0NPTkZJR19TTElQX1NNQVJUPXkKK0NPTkZJR19TTElQX01PREVfU0xJUDY9eQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfTlZSQU09eQorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCitDT05GSUdfRFMxNjgyPXkKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE05MD15CitDT05GSUdfU0VOU09SU19MTTkyPXkKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1dEVD15CisjIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKKyMgQ09ORklHX1JUQ19JTlRGX1BST0MgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlg4NTgxPXkKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfVURGX0ZTPXkKK0NPTkZJR19VREZfTkxTPXkKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJhc2NpaSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCitDT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCitDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCitDT05GSUdfTkxTX0lTTzg4NTlfOD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorQ09ORklHX05MU19JU084ODU5XzI9bQorQ09ORklHX05MU19JU084ODU5XzM9bQorQ09ORklHX05MU19JU084ODU5XzQ9bQorQ09ORklHX05MU19JU084ODU5XzU9bQorQ09ORklHX05MU19JU084ODU5XzY9bQorQ09ORklHX05MU19JU084ODU5Xzc9bQorQ09ORklHX05MU19JU084ODU5Xzk9bQorQ09ORklHX05MU19JU084ODU5XzEzPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xND1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorQ09ORklHX05MU19LT0k4X1I9bQorQ09ORklHX05MU19LT0k4X1U9bQorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjNjYzM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTYzNiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBTdW4gRmViICAxIDE0OjIyOjQyIDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfQUxUSVZFQz15CitDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX0NIRUNLX0NBQ0hFX0NPSEVSRU5DWT15CitDT05GSUdfUFBDMzI9eQorQ09ORklHX1dPUkRfU0laRT0zMgorIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CisjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CitDT05GSUdfSVJRX1BFUl9DUFU9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKKyMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAorQ09ORklHX1BQQz15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19HRU5FUklDX05WUkFNPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19QUENfT0Y9eQorQ09ORklHX09GPXkKK0NPTkZJR19QUENfVURCR18xNjU1MD15CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX1BDU1BLUl9QTEFURk9STT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAorIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAorQ09ORklHX0FNSUdBT05FPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSTgyNTk9eQorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5GTVRfTUlTQz15CisjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0CisKKyMKKyMgQWR2YW5jZWQgc2V0dXAKKyMKKyMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAorCisjCisjIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAorIworQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCitDT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKK0NPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9ORUVERUQ9eQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KKyMgQ09ORklHX05GX05BVF9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAorQ09ORklHX05GX05BVF9TSVA9bQorIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfUEFSUE9SVD15CitDT05GSUdfUEFSUE9SVF9QQz15CisjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKK0NPTkZJR19CTEtfREVWX0ZEPXkKKyMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0lERV9USU1JTkdTPXkKK0NPTkZJR19JREVfQVRBUEk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKKyMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NJSU1BR0U9eQorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9eQorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorQ09ORklHX1ZPUlRFWD15CisjIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUENJPXkKKyMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorQ09ORklHXzgxMzlDUD15CitDT05GSUdfODEzOVRPTz15CitDT05GSUdfODEzOVRPT19QSU89eQorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UUiBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CisjIENPTkZJR19QTElQIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKK0NPTkZJR19JTlBVVF9QQ1NQS1I9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fSTgwNDI9eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUERFViBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CitDT05GSUdfRklSTVdBUkVfRURJRD15CitDT05GSUdfRkJfRERDPXkKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9NQUNNT0RFUz15CitDT05GSUdfRkJfQkFDS0xJR0hUPXkKK0NPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQorQ09ORklHX0ZCX1RJTEVCTElUVElORz15CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CitDT05GSUdfRkJfM0RGWD15CisjIENPTkZJR19GQl8zREZYX0FDQ0VMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPW0KKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKK0NPTkZJR19WR0FfQ09OU09MRT15CisjIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfVE9QU0VFRD15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CitDT05GSUdfVVNCX1VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1VTUzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9DTU9TPXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BQQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTPXkKKyMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfSkJEMj15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BRkZTX0ZTPW0KKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDMTY9eQorQ09ORklHX0NSQ19UMTBESUY9eQorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPW0KK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKK0NPTkZJR19YTU9OPXkKK0NPTkZJR19YTU9OX0RFRkFVTFQ9eQorQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9bQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwppbmRleCA4MWFmYzhiLi5hZjBjZDU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgTW9uIEphbiAyNiAyMTo0MDo0NCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIEZyaSBGZWIgIDYgMDk6NDg6NTMgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zODgsNyArMzg4LDEwIEBACiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTAyLDcgKzUwNSw3IEBACiAjCiAjIEVFUFJPTSBzdXBwb3J0CiAjCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKQEAgLTY3OCw3ICs2ODEsNyBAQAogIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorQ09ORklHX0xYVF9QSFk9eQogIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CkBAIC04MTUsOCArODE4LDYgQEAKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtMTI4MSw3ICsxMjgyLDYxIEBACiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDg4YzYyOTUuLjI1MjQwMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTIwNjcsOSArMjA2Nyw5IEBACiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX0hDQUxMX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CiBDT05GSUdfWE1PTj15CiAjIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgbm90IHNldAogQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb2RlLXBhdGNoaW5nLmgKaW5kZXggMTA3ZDliOS4uMzdjMzJhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb2RlLXBhdGNoaW5nLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaApAQCAtMTEsOSArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotI2RlZmluZSBQUENfTk9QX0lOU1RSCQkweDYwMDAwMDAwCi0jZGVmaW5lIFBQQ19MV1NZTkNfSU5TVFIJMHg3YzIwMDRhYworI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKIC8qIEZsYWdzIGZvciBjcmVhdGVfYnJhbmNoOgogICogImIiICAgPT0gY3JlYXRlX2JyYW5jaChhZGRyLCB0YXJnZXQsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCAyMTE3MmJhLi44MGYzMTVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMTQ1LDYgKzE0NSw3IEBACiAjZGVmaW5lIENQVV9GVFJfVVNFX1RCCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA0MCkKICNkZWZpbmUgQ1BVX0ZUUl9MMkNTUgkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAwODApCiAjZGVmaW5lIENQVV9GVFJfNjAxCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDEwMCkKKyNkZWZpbmUgQ1BVX0ZUUl9EQkVMTAkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDAyMDApCiAjZGVmaW5lIENQVV9GVFJfQ0FOX05BUAkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDA0MDApCiAjZGVmaW5lIENQVV9GVFJfTDNDUgkJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDA4MDApCiAjZGVmaW5lIENQVV9GVFJfTDNfRElTQUJMRV9OQVAJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDEwMDApCkBAIC0zNzUsNyArMzc2LDggQEAKIAkgICAgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBDUFVfRlRSX05PRVhFQ1VURSkKICNkZWZpbmUgQ1BVX0ZUUlNfRTUwME1DCShDUFVfRlRSX01BWUJFX0NBTl9ET1pFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfTUFZQkVfQ0FOX05BUCB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgXAotCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSkKKwkgICAgQ1BVX0ZUUl9MMkNTUiB8IENQVV9GVFJfTFdTWU5DIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCisJICAgIENQVV9GVFJfREJFTEwpCiAjZGVmaW5lIENQVV9GVFJTX0dFTkVSSUNfMzIJKENQVV9GVFJfQ09NTU9OIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04pCiAKIC8qIDY0LWJpdCBDUFVzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMTE4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGJlbGwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogcHJvdmlkZXMgbWFza3MgYW5kIG9wY29kZSBpbWFnZXMgZm9yIHVzZSBieSBjb2RlIGdlbmVyYXRpb24sIGVtdWxhdGlvbgorICogYW5kIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1pZ2h0IG5vdCBrbm93IGFib3V0CisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0RCRUxMX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0RCRUxMX0gKKworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CisKKyNkZWZpbmUgUFBDX0RCRUxMX01TR19CUkRDQVNUCSgweDA0MDAwMDAwKQorI2RlZmluZSBQUENfREJFTExfVFlQRSh4KQkoKCh4KSAmIDB4ZikgPDwgMjgpCitlbnVtIHBwY19kYmVsbCB7CisJUFBDX0RCRUxMID0gMCwJCS8qIGRvb3JiZWxsICovCisJUFBDX0RCRUxMX0NSSVQgPSAxLAkvKiBjcml0aWNhbCBkb29yYmVsbCAqLworCVBQQ19HX0RCRUxMID0gMiwJLyogZ3Vlc3QgZG9vcmJlbGwgKi8KKwlQUENfR19EQkVMTF9DUklUID0gMywJLyogZ3Vlc3QgY3JpdGljYWwgZG9vcmJlbGwgKi8KKwlQUENfR19EQkVMTF9NQyA9IDQsCS8qIGd1ZXN0IG1jaGVjayBkb29yYmVsbCAqLworfTsKKworI2lmZGVmIENPTkZJR19TTVAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRiZWxsX3NtcF9tZXNzYWdlW05SX0NQVVNdOworZXh0ZXJuIHZvaWQgc21wX2RiZWxsX21lc3NhZ2VfcGFzcyhpbnQgdGFyZ2V0LCBpbnQgbXNnKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgcHBjX21zZ3NuZChlbnVtIHBwY19kYmVsbCB0eXBlLCB1MzIgZmxhZ3MsIHUzMiB0YWcpCit7CisJdTMyIG1zZyA9IFBQQ19EQkVMTF9UWVBFKHR5cGUpIHwgKGZsYWdzICYgUFBDX0RCRUxMX01TR19CUkRDQVNUKSB8CisJCQkodGFnICYgMHgwN2ZmZmZmZik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoUFBDX01TR1NORCglMCkgOiA6ICJyIiAobXNnKSk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfREJFTExfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA4NmNlZjdkLi5jNjlmMmI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTA5LDE4ICsxMDksOCBAQAogCSAqIG9ubHkgSVNBIERNQSBkZXZpY2Ugd2Ugc3VwcG9ydCBpcyB0aGUgZmxvcHB5IGFuZCB3ZSBoYXZlIGEgaGFjawogCSAqIGluIHRoZSBmbG9wcHkgZHJpdmVyIGRpcmVjdGx5IHRvIGdldCBhIGRldmljZSBmb3IgdXMuCiAJICovCi0KLQlpZiAodW5saWtlbHkoZGV2ID09IE5VTEwpIHx8IGRldi0+YXJjaGRhdGEuZG1hX29wcyA9PSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0CisJaWYgKHVubGlrZWx5KGRldiA9PSBOVUxMKSkKIAkJcmV0dXJuIE5VTEw7Ci0jZWxzZQotCQkvKiBVc2UgZGVmYXVsdCBvbiAzMi1iaXQgaWYgZG1hX29wcyBpcyBub3Qgc2V0IHVwICovCi0JCS8qIFRPRE86IExvbmcgdGVybSwgd2Ugc2hvdWxkIGZpeCBkcml2ZXJzIHNvIHRoYXQgZGV2IGFuZAotCQkgKiBhcmNoZGF0YSBkbWFfb3BzIGFyZSBzZXQgdXAgZm9yIGFsbCBidXNlcy4KLQkJICovCi0JCXJldHVybiAmZG1hX2RpcmVjdF9vcHM7Ci0jZW5kaWYKLQl9CiAKIAlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfb3BzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGI1NjAwY2UuLjFhODU2YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTgsNiArOCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgpAQCAtMTc4LDcgKzE3OSw4IEBACiAgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQogICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KIAotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAoMHgyMDAwMDAwMCkKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJhbmRvbWl6ZV9ldF9keW4odW5zaWduZWQgbG9uZyBiYXNlKTsKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkocmFuZG9taXplX2V0X2R5bigweDIwMDAwMDAwKSkKIAogLyoKICAqIE91ciByZWdpc3RlcnMgYXJlIGFsd2F5cyB1bnNpZ25lZCBsb25ncywgd2hldGhlciB3ZSdyZSBhIDMyIGJpdApAQCAtMjcwLDYgKzI3MiwxNCBAQAogCQkJCSAgICAgICBpbnQgdXNlc19pbnRlcnApOwogI2RlZmluZSBWRFNPX0FVWF9FTlQoYSxiKSBORVdfQVVYX0VOVChhLGIpOwogCisvKiAxR0IgZm9yIDY0Yml0LCA4TUIgZm9yIDMyYml0ICovCisjZGVmaW5lIFNUQUNLX1JORF9NQVNLIChpc18zMmJpdF90YXNrKCkgPyBcCisJKDB4N2ZmID4+IChQQUdFX1NISUZUIC0gMTIpKSA6IFwKKwkoMHgzZmZmZiA+PiAoUEFHRV9TSElGVCAtIDEyKSkpCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfcmFuZG9taXplX2JyayhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZGVmaW5lIGFyY2hfcmFuZG9taXplX2JyayBhcmNoX3JhbmRvbWl6ZV9icmsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA4NDI4YjM4Li5kNjBmZDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC02MSw3ICs2MSw3IEBACiAgKiBTb21lIGhhcmR3YXJlIHdhbnRzIHRvIGdldCBmaXhtYXBwZWQgd2l0aG91dCBjYWNoaW5nLgogICovCiAjZGVmaW5lIHNldF9maXhtYXBfbm9jYWNoZShpZHgsIHBoeXMpIFwKLQkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTk9DQUNIRSkKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUxfTkNHKQogCiAjZGVmaW5lIGNsZWFyX2ZpeG1hcChpZHgpIFwKIAkJX19zZXRfZml4bWFwKGlkeCwgMCwgX19wZ3Byb3QoMCkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZTVmMmFlOC4uZGRlMTI5NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNSw3ICs1LDQ0IEBACiAjZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKF9tY291bnQpKQogI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFCTQgLyogc2l6ZW9mIG1jb3VudCBjYWxsICovCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKy8qIEJhc2VkIG9mZiBvZiBvYmpkdW1wIG9wdHB1dCBmcm9tIGdsaWJjICovCisKKyNkZWZpbmUgTUNPVU5UX1NBVkVfRlJBTUUJCQlcCisJc3R3dQlyMSwtNDgocjEpOwkJCVwKKwlzdHcJcjMsIDEyKHIxKTsJCQlcCisJc3R3CXI0LCAxNihyMSk7CQkJXAorCXN0dwlyNSwgMjAocjEpOwkJCVwKKwlzdHcJcjYsIDI0KHIxKTsJCQlcCisJbWZscglyMzsJCQkJXAorCWx3eglyNCwgNTIocjEpOwkJCVwKKwltZmNyCXI1OwkJCQlcCisJc3R3CXI3LCAyOChyMSk7CQkJXAorCXN0dwlyOCwgMzIocjEpOwkJCVwKKwlzdHcJcjksIDM2KHIxKTsJCQlcCisJc3R3CXIxMCw0MChyMSk7CQkJXAorCXN0dwlyMywgNDQocjEpOwkJCVwKKwlzdHcJcjUsIDgocjEpCisKKyNkZWZpbmUgTUNPVU5UX1JFU1RPUkVfRlJBTUUJCQlcCisJbHd6CXI2LCA4KHIxKTsJCQlcCisJbHd6CXIwLCA0NChyMSk7CQkJXAorCWx3eglyMywgMTIocjEpOwkJCVwKKwltdGN0cglyMDsJCQkJXAorCWx3eglyNCwgMTYocjEpOwkJCVwKKwltdGNyCXI2OwkJCQlcCisJbHd6CXI1LCAyMChyMSk7CQkJXAorCWx3eglyNiwgMjQocjEpOwkJCVwKKwlsd3oJcjAsIDUyKHIxKTsJCQlcCisJbHd6CXI3LCAyOChyMSk7CQkJXAorCWx3eglyOCwgMzIocjEpOwkJCVwKKwltdGxyCXIwOwkJCQlcCisJbHd6CXI5LCAzNihyMSk7CQkJXAorCWx3eglyMTAsNDAocjEpOwkJCVwKKwlhZGRpCXIxLCByMSwgNDgKKworI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwogZXh0ZXJuIHZvaWQgX21jb3VudCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggMDRlNGE2Mi4uNjg0YTczZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTM5LDE1ICs0MCwxNSBAQAogICogY2h1bmsgb2YgUkFNLgogICovCiAvKgotICogV2UgdXNlIG9uZSBmdWxsIHB0ZSB0YWJsZSB3aXRoIDRLIHBhZ2VzLiBBbmQgd2l0aCAxNksvNjRLIHBhZ2VzIHB0ZQotICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIgYW5kIDUxMk1CIHJlc3AuKSB0aGF0IGJvdGggRklYTUFQCi0gKiBhbmQgUEtNQVAgY2FuIGJlIHBsYWNlZCBpbiBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgMTAyNCBwYWdlcyBmb3IKLSAqIFBLTUFQIGluIGNhc2Ugb2YgMTZLLzY0SyBwYWdlcy4KKyAqIFdlIHVzZSBvbmUgZnVsbCBwdGUgdGFibGUgd2l0aCA0SyBwYWdlcy4gQW5kIHdpdGggMTZLLzY0Sy8yNTZLIHBhZ2VzIHB0ZQorICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIvNTEyTUIvMkdCIHJlc3AuKSwgc28gdGhhdCBib3RoIEZJWE1BUAorICogYW5kIFBLTUFQIGNhbiBiZSBwbGFjZWQgaW4gYSBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgNTEyIHBhZ2VzIGZvciBQS01BUAorICogaW4gY2FzZSBvZiAxNksvNjRLLzI1NksgcGFnZSBzaXplcy4KICAqLwogI2lmZGVmIENPTkZJR19QUENfNEtfUEFHRVMKICNkZWZpbmUgUEtNQVBfT1JERVIJUFRFX1NISUZUCiAjZWxzZQotI2RlZmluZSBQS01BUF9PUkRFUgkxMAorI2RlZmluZSBQS01BUF9PUkRFUgk5CiAjZW5kaWYKICNkZWZpbmUgTEFTVF9QS01BUAkoMSA8PCBQS01BUF9PUkRFUikKICNpZm5kZWYgQ09ORklHX1BQQ180S19QQUdFUwpAQCAtOTQsMTIgKzk1LDEzIEBACiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKICNlbmRpZgotCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsIGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwlfX3NldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSwgMSk7CiAJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgdmFkZHIpOwogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZjc1YTVmYy4uYjdlMDM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBzaG91bGQgd2UgaGFuZGxlIHRoaXMgdmlhIGxvc3QgaW50ZXJydXB0cyBhbmQgSVBJcwogICogb3Igc2hvdWxkIHdlIG5vdCBjYXJlIGxpa2Ugd2UgZG8gbm93ID8gLS1CZW5ILgogICovCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7CitzdHJ1Y3QgaXJxX2NoaXA7CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQ5NGNkOGIuLjAwMWYyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC02MzIsNiArNjMyLDkgQEAKICAqICAgaW9yZW1hcF9mbGFncyBhbmQgY2Fubm90IGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBvbmUKICAqICAgb2YgdGhlIHByZXZpb3VzIG9uZXMpCiAgKgorICogKiBfX2lvcmVtYXBfY2FsbGVyIGlzIHRoZSBzYW1lIGFzIGFib3ZlIGJ1dCB0YWtlcyBhbiBleHBsaWNpdCBjYWxsZXIKKyAqICAgcmVmZXJlbmNlIHJhdGhlciB0aGFuIHVzaW5nIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQorICoKICAqICogX19pb3VubWFwLCBpcyB0aGUgbG93IGxldmVsIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgaW91bm1hcCBhbmQgY2Fubm90CiAgKiAgIGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBpb3VubWFwKQogICoKQEAgLTY0Niw2ICs2NDksOSBAQAogCiBleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCiBleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcF9hdChwaHlzX2FkZHJfdCBwYSwgdm9pZCAqZWEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggMjVhYWE5Ny4uNjgyMzVmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtOTcsNyArOTcsNyBAQAogCXU2NAlzYXZlZF9ncHI0OwkJLy8gU2F2ZWQgR1BSNCAgICAgICAgICAgICAgICAgICB4MjgteDJGCiAJdTY0CXNhdmVkX2dwcjU7CQkvLyBTYXZlZCBHUFI1ICAgICAgICAgICAgICAgICAgIHgzMC14MzcKIAotCXU4CXJlc2VydmVkNDsJCS8vIFJlc2VydmVkCQkJeDM4LXgzOAorCXU4CWR0bF9lbmFibGVfbWFzazsJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIG1hc2sJeDM4LXgzOAogCXU4CWRvbmF0ZV9kZWRpY2F0ZWRfY3B1OwkvLyBEb25hdGUgZGVkaWNhdGVkIENQVSBjeWNsZXMgIHgzOS14MzkKIAl1OAlmcHJlZ3NfaW5fdXNlOwkJLy8gRlAgcmVncyBpbiB1c2UgICAgICAgICAgICAgICB4M0EteDNBCiAJdTgJcG1jcmVnc19pbl91c2U7CQkvLyBQTUMgcmVncyBpbiB1c2UgICAgICAgICAgICAgIHgzQi14M0IKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENBQ0hFX0xJTkVfNC01IDB4MDE4MCAtIDB4MDI3RiBDb250YWlucyBQTUMgaW50ZXJydXB0IGRhdGEKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQl1MzIJcGFnZV9pbnM7CQkJLy8gQ01PIEhpbnQgLSAjIHBhZ2UgaW5zIGJ5IE9TICB4MDAteDA0Ci0JdTgJcG1jX3NhdmVfYXJlYVsyNTJdOwkvLyBQTUMgaW50ZXJydXB0IEFyZWEgICAgICAgICAgIHgwNC14RkYKKwl1MzIJcGFnZV9pbnM7CQkvLyBDTU8gSGludCAtICMgcGFnZSBpbnMgYnkgT1MgIHgwMC14MDMKKwl1OAlyZXNlcnZlZDhbMTQ4XTsJCS8vIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgeDA0LXg5NworCXZvbGF0aWxlIHU2NCBkdGxfaWR4OwkJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIGhlYWQgaWR4CXg5OC14OUYKKwl1OAlyZXNlcnZlZDlbOTZdOwkJLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICB4QTAteEZGCiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDB4NDAwKSkpOwogCiBleHRlcm4gc3RydWN0IGxwcGFjYSBscHBhY2FbXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDI3NDBjNDQuLjBlZmRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtOTAsNyArOTAsNyBAQAogCXZvaWQJCSgqdGNlX2ZsdXNoKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7CiAKIAl2b2lkIF9faW9tZW0gKgkoKmlvcmVtYXApKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOwogCXZvaWQJCSgqaW91bm1hcCkodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbik7CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMyNyw4ICszMjcsNiBAQAogICovCiAvKiBQcmludCBhIGJvb3QgcHJvZ3Jlc3MgbWVzc2FnZS4gKi8KIHZvaWQgcHBjNjRfYm9vdF9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKLS8qIFByaW50IGEgdGVybWluYXRpb24gbWVzc2FnZSAocHJpbnQgb25seSAtLSBkb2VzIG5vdCBzdG9wIHRoZSBrZXJuZWwpICovCi12b2lkIHBwYzY0X3Rlcm1pbmF0ZV9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGxvZ19lcnJvcihjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtNDR4LmgKaW5kZXggMjdjYzZmZC4uM2M4NjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oCkBAIC04Myw2ICs4Myw4IEBACiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl8xNksKICNlbGlmIChQQUdFX1NISUZUID09IDE2KQogI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfNjRLCisjZWxpZiAoUEFHRV9TSElGVCA9PSAxOCkKKyNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzI1NksKICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIFBBR0VfU0laRSIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NGNmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKy8qCisgKiBGcmVlc2NhbGUgQm9vay1FL0Jvb2stM2UgKElTQSAyLjA2KykgTU1VIHN1cHBvcnQKKyAqLworCisvKiBCb29rLTNlIGRlZmluZWQgcGFnZSBzaXplcyAqLworI2RlZmluZSBCT09LM0VfUEFHRVNaXzFLCTAKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8ySwkxCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNEsJMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhLCTMKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xNksJNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMySwk1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRLCTYKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xMjhLCTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZLCTgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJLCTkKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xTQkxMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJNCTExCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNE0JMTIKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl84TQkxMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2TQkxNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMyTQkxNQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzY0TQkxNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOE0JMTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZNCTE4CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNTEyTQkxOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFHQgkyMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJHQgkyMQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzRHQgkyMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhHQgkyMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2R0IJMjQKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8zMkdCCTI1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRHQgkyNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOEdCCTI3CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMjU2R0IJMjgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJHQgkyOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFUQgkzMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJUQgkzMQorCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfTlYoeCkJKCh4KSAmIDB4MDAwMDBGRkYpCisKKyNkZWZpbmUgTUFTMV9WQUxJRCAJMHg4MDAwMDAwMAorI2RlZmluZSBNQVMxX0lQUk9UCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUFTMV9USUQoeCkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfSU5ECTB4MDAwMDIwMDAKKyNkZWZpbmUgTUFTMV9UUwkJMHgwMDAwMTAwMAorI2RlZmluZSBNQVMxX1RTSVpFKHgpCSgoeCA8PCA3KSAmIDB4MDAwMDBGODApCisKKyNkZWZpbmUgTUFTMl9FUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMyX1gwCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzJfWDEJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTMl9XCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BUzJfSQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVMyX00JCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTMl9HCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BUzJfRQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMyX0VQTl9NQVNLKHNpemUpCQkofjAgPDwgKHNpemUgKyAxMCkpCisjZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCisjZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAorI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCisjZGVmaW5lIE1BUzRfSU5ERAkweDAwMDA4MDAwCisjZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKKyNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAorI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCisjZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0CisjZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAorI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKKyNkZWZpbmUgTUFTNl9JU0laRSh4KQlNQVMxX1RTSVpFKHgpCisjZGVmaW5lIE1BUzZfU0FTCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUFTNl9TUElECU1BUzZfU1BJRDAKKworI2RlZmluZSBNQVM3X1JQTgkweEZGRkZGRkZGCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWlkOworCXVuc2lnbmVkIGludAlhY3RpdmU7CisJdW5zaWduZWQgbG9uZwl2ZHNvX2Jhc2U7Cit9IG1tX2NvbnRleHRfdDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyODViNjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLSNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLS8qCi0gKiBGcmVlc2NhbGUgQm9vay1FIE1NVSBzdXBwb3J0Ci0gKi8KLQotLyogQm9vay1FIGRlZmluZWQgcGFnZSBzaXplcyAqLwotI2RlZmluZSBCT09LRV9QQUdFU1pfMUsJCTAKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRLCQkxCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNksJMgotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRLCTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NksJNAotI2RlZmluZSBCT09LRV9QQUdFU1pfMU0JCTUKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRNCQk2Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNk0JNwotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRNCTgKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1Nk0JOQotI2RlZmluZSBCT09LRV9QQUdFU1pfMUdCCTEwCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl80R0IJMTEKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2R0IJMTIKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzY0R0IJMTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NkdCCTE0Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xVEIJMTUKLQotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkoKHggPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQotI2RlZmluZSBNQVMwX05WKHgpCSgoeCkgJiAweDAwMDAwRkZGKQotCi0jZGVmaW5lIE1BUzFfVkFMSUQgCTB4ODAwMDAwMDAKLSNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQotI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKLQotI2RlZmluZSBNQVMyX0VQTgkweEZGRkZGMDAwCi0jZGVmaW5lIE1BUzJfWDAJCTB4MDAwMDAwNDAKLSNkZWZpbmUgTUFTMl9YMQkJMHgwMDAwMDAyMAotI2RlZmluZSBNQVMyX1cJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTMl9JCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzJfTQkJMHgwMDAwMDAwNAotI2RlZmluZSBNQVMyX0cJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTMl9FCQkweDAwMDAwMDAxCi0jZGVmaW5lIE1BUzJfRVBOX01BU0soc2l6ZSkJCSh+MCA8PCAoMiooc2l6ZSkgKyAxMCkpCi0jZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCi0KLSNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAotI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCi0jZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKLSNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAotI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCi0jZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKLSNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAotI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgotI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCi0KLSNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCi0jZGVmaW5lIE1BUzRfVElERFNFTAkweDAwMEYwMDAwCi0jZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKLSNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAotI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQotCi0jZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAotI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKLSNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQotI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAotCi0jZGVmaW5lIE1BUzdfUlBOCTB4RkZGRkZGRkYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQJaWQ7Ci0JdW5zaWduZWQgaW50CWFjdGl2ZTsKLQl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsKLX0gbW1fY29udGV4dF90OwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfRlNMX0JPT0tFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCA2OGI3NTI2Li45OGMxMDRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTI4NCw4ICsyODQsNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIG51bWJlcl9vZl9wYWdlcyk7CiBleHRlcm4gdm9pZCBkZW1vdGVfc2VnbWVudF80ayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDZlNzYzOTkuLmNiZjE1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKQEAgLTM2LDkgKzM2LDkgQEAKICAqLwogI2RlZmluZSBNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUCUFTTV9DT05TVCgweDAwMDQwMDAwKQogCi0vKiBFbmFibGUgdXNlIG9mIHRsYmlseCBpbnZhbGlkYXRlLWJ5LVBJRCB2YXJpYW50LgorLyogRW5hYmxlIHVzZSBvZiB0bGJpbHggaW52YWxpZGF0ZSBpbnN0cnVjdGlvbnMuCiAgKi8KLSNkZWZpbmUgTU1VX0ZUUl9VU0VfVExCSUxYX1BJRAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCisjZGVmaW5lIE1NVV9GVFJfVVNFX1RMQklMWAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCiAKIC8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIG91dHN0YW5kaW5nCiAgKiBicm9hZGNhc3QgdGxiaXZheCBvciB0bGJzeW5jLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHVzZSBhIHNwaW5sb2NrCkBAIC00Niw2ICs0NiwxMiBAQAogICovCiAjZGVmaW5lIE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTAlBU01fQ09OU1QoMHgwMDEwMDAwMCkKIAorLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGRvZXNuJ3QgaGFuZGxlIHdheSBzZWxlY3Rpb24KKyAqIHByb3Blcmx5IGFuZCBuZWVkcyBTVyB0byB0cmFjayBhbmQgdXBkYXRlIHRoZSBMUlUgc3RhdGUuICBUaGlzCisgKiBpcyBzcGVjaWZpYyB0byBhbiBlcnJhdGEgb24gZTMwMGMyL2MzL2M0IGNsYXNzIHBhcnRzCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVCUFTTV9DT05TVCgweDAwMjAwMDAwKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCkBAIC01Niw2ICs2MiwxMCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhcnRfX19tbXVfZnRyX2ZpeHVwLCBfX3N0b3BfX19tbXVfZnRyX2ZpeHVwOwogCisvKiBNTVUgaW5pdGlhbGl6YXRpb24gKDY0LWJpdCBvbmx5IGZvIG5vdykgKi8KK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAKQEAgLTcxLDkgKzgxLDkgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKIC8qIDQ0eC1zdHlsZSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCiAjICBpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyogRnJlZXNjYWxlIEJvb2stRSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCi0jICBpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRV9NTVUpCisvKiBGcmVlc2NhbGUgQm9vay1FIHNvZnR3YXJlIGxvYWRlZCBUTEIgb3IgQm9vay0zZSAoSVNBIDIuMDYrKSBNTVUgKi8KKyMgIGluY2x1ZGUgPGFzbS9tbXUtYm9vazNlLmg+CiAjZWxpZiBkZWZpbmVkIChDT05GSUdfUFBDXzh4eCkKIC8qIE1vdG9yb2xhL0ZyZWVzY2FsZSA4eHggc29mdHdhcmUgbG9hZGVkIFRMQiAqLwogIyAgaW5jbHVkZSA8YXNtL21tdS04eHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYWI0ZjE5Mi4uYjcwNjM2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJLyogTWFyayB0aGlzIGNvbnRleHQgaGFzIGJlZW4gdXNlZCBvbiB0aGUgbmV3IENQVSAqLwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CiAKIAkvKiAzMi1iaXQga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgUEdESVIgaW4gdGhlIHRocmVhZCBzdHJ1Y3QgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCmluZGV4IDgxYTIzOTMuLjUyZTA0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaApAQCAtMjczLDYgKzI3Myw3IEBACiBleHRlcm4gdm9pZCBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfbWFwX2NvbW1vbl9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIGludCBtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KGludCBwc2NfaWQsIGludCBjbGtkaXYpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtcGM1Mnh4X2dldF94dGFsX2ZyZXEoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfcmVzdGFydChjaGFyICpjbWQpOwogCiAvKiBtcGM1Mnh4X3BpYy5jICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxOTdkNTY5Li4zMmNiZjE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTE5LDEyICsxOSwxNCBAQAogI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogCiAvKgotICogT24gcmVndWxhciBQUEMzMiBwYWdlIHNpemUgaXMgNEsgKGJ1dCB3ZSBzdXBwb3J0IDRLLzE2Sy82NEsgcGFnZXMKKyAqIE9uIHJlZ3VsYXIgUFBDMzIgcGFnZSBzaXplIGlzIDRLIChidXQgd2Ugc3VwcG9ydCA0Sy8xNksvNjRLLzI1NksgcGFnZXMKICAqIG9uIFBQQzQ0eCkuIEZvciBQUEM2NCB3ZSBzdXBwb3J0IGVpdGhlciA0SyBvciA2NEsgc29mdHdhcmUKICAqIHBhZ2Ugc2l6ZS4gV2hlbiB1c2luZyA2NEsgcGFnZXMgaG93ZXZlciwgd2hldGhlciB3ZSBhcmUgcmVhbGx5IHN1cHBvcnRpbmcKICAqIDY0SyBwYWdlcyBpbiBIVyBvciBub3QgaXMgaXJyZWxldmFudCB0byB0aG9zZSBkZWZpbml0aW9ucy4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDXzI1NktfUEFHRVMpCisjZGVmaW5lIFBBR0VfU0hJRlQJCTE4CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKQogI2RlZmluZSBQQUdFX1NISUZUCQkxNgogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDXzE2S19QQUdFUykKICNkZWZpbmUgUEFHRV9TSElGVAkJMTQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCmluZGV4IDE0NThkOTUuLmEwZTNmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaApAQCAtMTksNyArMTksMTEgQEAKICNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAkwCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfMjU2S19QQUdFUworI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSBQVEVfVF9MT0cyIC0gMikJLyogMS80IG9mIGEgcGFnZSAqLworI2Vsc2UKICNkZWZpbmUgUFRFX1NISUZUCShQQUdFX1NISUZUIC0gUFRFX1RfTE9HMikJLyogZnVsbCBwYWdlICovCisjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMzU0ODE1OS4uYmExN2Q1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTE0LDYgKzExNCwxMCBAQAogLyogRGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZG9tYWluIG51bWJlciBpbiAvcHJvYyAqLwogZXh0ZXJuIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKKy8qIE1TSSBhcmNoIGhvb2tzICovCisjZGVmaW5lIGFyY2hfc2V0dXBfbXNpX2lycXMgYXJjaF9zZXR1cF9tc2lfaXJxcworI2RlZmluZSBhcmNoX3RlYXJkb3duX21zaV9pcnFzIGFyY2hfdGVhcmRvd25fbXNpX2lycXMKKyNkZWZpbmUgYXJjaF9tc2lfY2hlY2tfZGV2aWNlIGFyY2hfbXNpX2NoZWNrX2RldmljZQogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAvKiBNYXAgYSByYW5nZSBvZiBQQ0kgbWVtb3J5IG9yIEkvTyBzcGFjZSBmb3IgYSBkZXZpY2UgaW50byB1c2VyIHNwYWNlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiY2E0ZTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFXzRLX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSAotLyoKLSAqIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAgVGhlIFBURSBsZXZlbCBtdXN0IHVzZSBhIDY0YiByZWNvcmQKLSAqIGZvciBlYWNoIHBhZ2UgdGFibGUgZW50cnkuICBUaGUgUE1EIGFuZCBQR0QgbGV2ZWwgdXNlIGEgMzJiIHJlY29yZCBmb3IKLSAqIGVhY2ggZW50cnkgYnkgYXNzdW1pbmcgdGhhdCBlYWNoIGVudHJ5IGlzIHBhZ2UgYWxpZ25lZC4KLSAqLwotI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgOQotI2RlZmluZSBQTURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQVURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgOQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHB0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBVRF9UQUJMRV9TSVpFCShzaXplb2YocHVkX3QpIDw8IFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUFVECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLwotI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQTURfU0hJRlQKLQotLyogUFVEX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQVURfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVURfU0laRQkoMVVMIDw8IFBVRF9TSElGVCkKLSNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIGZvdXJ0aC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJKFBVRF9TSElGVCArIFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKLQotLyogUFRFIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCi0jZGVmaW5lIF9QQUdFX1NFQ09OREFSWSAweDgwMDAgLyogc29mdHdhcmU6IEhQVEUgaXMgaW4gc2Vjb25kYXJ5IGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0dST1VQX0lYICAweDcwMDAgLyogc29mdHdhcmU6IEhQVEUgaW5kZXggd2l0aGluIGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0ZfU0VDT05EICBfUEFHRV9TRUNPTkRBUlkKLSNkZWZpbmUgX1BBR0VfRl9HSVggICAgIF9QQUdFX0dST1VQX0lYCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgxMDAwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLS8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgXAotCQkJIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYKQotCi0vKiBUaGVyZSBpcyBubyA0SyBQRk4gaGFjayBvbiA0SyBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV80S19QRk4JMAotCi0vKiBQQUdFX01BU0sgZ2l2ZXMgdGhlIHJpZ2h0IGFuc3dlciBiZWxvdywgYnV0IG9ubHkgYnkgYWNjaWRlbnQgKi8KLS8qIEl0IHNob3VsZCBiZSBwcmVzZXJ2aW5nIHRoZSBoaWdoIDQ4IGJpdHMgYW5kIHRoZW4gc3BlY2lmaWNhbGx5ICovCi0vKiBwcmVzZXJ2aW5nIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0hQVEVGTEFHUyB8IF9QQUdFX1NQRUNJQUwpCi0KLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCi0jZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KLSNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLwotI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKLQotLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCi0jZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQotCi0jaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKLSNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCi0jZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCi0jZWxzZQotI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQotI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKLSNlbmRpZgotI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKLQlkbyB7CQkJCQkJCSAgICAgICAgIFwKLQkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAotCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKQotCi0jaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKLSNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKLSNlbHNlCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SwotI2VuZGlmCi0KLS8qCi0gKiA0LWxldmVsIHBhZ2UgdGFibGVzIHJlbGF0ZWQgYml0cwotICovCi0KLSNkZWZpbmUgcGdkX25vbmUocGdkKQkJKCFwZ2RfdmFsKHBnZCkpCi0jZGVmaW5lIHBnZF9iYWQocGdkKQkJKHBnZF92YWwocGdkKSA9PSAwKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMCkKLSNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkocGdkX3ZhbCgqKHBnZHApKSA9IDApCi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkJKHBnZF92YWwocGdkKSAmIH5QR0RfTUFTS0VEX0JJVFMpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXZpcnRfdG9fcGFnZShwZ2RfcGFnZV92YWRkcihwZ2QpKQotCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkcCwgYWRkcikJXAotICAoKChwdWRfdCAqKSBwZ2RfcGFnZV92YWRkcigqKHBnZHApKSkgKyBcCi0gICAgKCgoYWRkcikgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKSkpCi0KLSNkZWZpbmUgcHVkX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHVkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdWRfdmFsKGUpKQotCi0jZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLCAocHJvdCkpCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKaW5kZXggODIwYjVmMC4uYmE0NWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCkBAIC0xOSw1NSArMTksNiBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgotICogVGhlIFBvd2VyUEMgTU1VIHVzZXMgYSBoYXNoIHRhYmxlIGNvbnRhaW5pbmcgUFRFcywgdG9nZXRoZXIgd2l0aAotICogYSBzZXQgb2YgMTYgc2VnbWVudCByZWdpc3RlcnMgKG9uIDMyLWJpdCBpbXBsZW1lbnRhdGlvbnMpLCB0byBkZWZpbmUKLSAqIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KLSAqCi0gKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5Ci0gKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKLSAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQotICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2h0YWJsZS5TCi0gKiAocHJvY2VkdXJlIGhhc2hfcGFnZSkgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgcHRlcyBmcm9tIHRoZQotICogdHJlZSBhbmQgcHV0dGluZyB0aGVtIGludG8gdGhlIGhhc2ggdGFibGUgd2hlbiBuZWNlc3NhcnksIGFuZAotICogdXBkYXRpbmcgdGhlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBiaXRzIGluIHRoZSBwYWdlIHRhYmxlIHRyZWUuCi0gKi8KLQotLyoKLSAqIFRoZSBQb3dlclBDIE1QQzh4eCB1c2VzIGEgVExCIHdpdGggaGFyZHdhcmUgYXNzaXN0ZWQsIHNvZnR3YXJlIHRhYmxld2Fsay4KLSAqIFdlIGFsc28gdXNlIHRoZSB0d28gbGV2ZWwgdGFibGVzLCBidXQgd2UgY2FuIHB1dCB0aGUgcmVhbCBiaXRzIGluIHRoZW0KLSAqIG5lZWRlZCBmb3IgdGhlIFRMQiBhbmQgdGFibGV3YWxrLiAgVGhlc2UgZGVmaW5pdGlvbnMgcmVxdWlyZSBNeF9DVFIuUFBNID0gMCwKLSAqIE14X0NUUi5QUENTID0gMCwgYW5kIE1EX0NUUi5UV0FNID0gMS4gIFRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgaGFzCi0gKiBhZGRpdGlvbmFsIHBhZ2UgcHJvdGVjdGlvbiAod2hlbiBNeF9DVFIuUFBDUyA9IDEpIHRoYXQgYWxsb3dzIFRMQiBoaXQKLSAqIGJhc2VkIHVwb24gdXNlci9zdXBlciBhY2Nlc3MuICBUaGUgVExCIGRvZXMgbm90IGhhdmUgYWNjZXNzZWQgbm9yIHdyaXRlCi0gKiBwcm90ZWN0LiAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIFRMQiBnZXQgbG9hZGVkIHdpdGggYW4gZW50cnkgaXQgaXMKLSAqIGFjY2Vzc2VkLCBhbmQgb3ZlcmxvYWQgdGhlIGNoYW5nZWQgYml0IGZvciB3cml0ZSBwcm90ZWN0LiAgV2UgdXNlCi0gKiB0d28gYml0cyBpbiB0aGUgc29mdHdhcmUgcHRlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHNldCB0byB6ZXJvIGluCi0gKiB0aGUgVExCIGVudHJ5ICgyNCBhbmQgMjUpIGZvciB0aGVzZSBpbmRpY2F0b3JzLiAgQWx0aG91Z2ggdGhlIGxldmVsIDEKLSAqIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGd1YXJkZWQgYW5kIHdyaXRldGhyb3VnaC9jb3B5YmFjayBiaXRzLCB3ZSBjYW4KLSAqIHNldCB0aGVzZSBhdCB0aGUgcGFnZSBsZXZlbCBzaW5jZSB0aGV5IGdldCBjb3BpZWQgZnJvbSB0aGUgTXhfVFdDCi0gKiByZWdpc3RlciB3aGVuIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLiAgV2Ugd2lsbCB1c2UgYml0IDI3IGZvciBndWFyZCwgc2luY2UKLSAqIHRoYXQgaXMgd2hlcmUgaXQgZXhpc3RzIGluIHRoZSBNRF9UV0MsIGFuZCBiaXQgMjYgZm9yIHdyaXRldGhyb3VnaC4KLSAqIFRoZXNlIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIHRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgYXQgVExCIGxvYWQgdGltZSwgYW5kCi0gKiBjb3BpZWQgdG8gdGhlIE1EX1RXQyBiZWZvcmUgaXQgZ2V0cyBsb2FkZWQuCi0gKiBMYXJnZSBwYWdlIHNpemVzIGFkZGVkLiAgV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHNpemVzLCA0SyBhbmQgOE0uCi0gKiBUaGlzIGFsc28gYWxsb3dzIGEgVExCIGhhbmRlciBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBjYW4gZGlyZWN0bHkKLSAqIGxvYWQgdGhlIFBNRCBpbnRvIE1EX1RXQy4gIFRoZSA4TSBwYWdlcyBhcmUgb25seSB1c2VkIGZvciBrZXJuZWwKLSAqIG1hcHBpbmcgb2Ygd2VsbCBrbm93biBhcmVhcy4gIFRoZSBQTUQgKFBHRCkgZW50cmllcyBjb250YWluIGNvbnRyb2wKLSAqIGZsYWdzIGluIGFkZGl0aW9uIHRvIHRoZSBhZGRyZXNzLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUKLSAqIHNvZnR3YXJlIG5vIGxvbmdlciBhc3N1bWVzIHRoZXNlIGFyZSBvbmx5IHBvaW50ZXJzLgotICovCi0KLS8qCi0gKiBBdCBwcmVzZW50LCBhbGwgUG93ZXJQQyA0MDAtY2xhc3MgcHJvY2Vzc29ycyBzaGFyZSBhIHNpbWlsYXIgVExCCi0gKiBhcmNoaXRlY3R1cmUuIFRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBzaWRlcyBzaGFyZSBhIHVuaWZpZWQsCi0gKiA2NC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIGlzIG1haW50YWluZWQgdG90YWxseSB1bmRlcgotICogc29mdHdhcmUgY29udHJvbC4gSW4gYWRkaXRpb24sIHRoZSBpbnN0cnVjdGlvbiBzaWRlIGhhcyBhCi0gKiBoYXJkd2FyZS1tYW5hZ2VkLCA0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKLSAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKLSAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkgKHNlZSAibW11LmgiIGZvciBkZWZpbml0aW9ucykuCi0gKi8KLQotLyoKICAqIFRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IFBURXMgYXJlIDMyLWJpdHMgYW5kIHdlIGhhdmUgYSAxLXBhZ2UKICAqIDEwMjQtZW50cnkgcGdkaXIgcG9pbnRpbmcgdG8gMS1wYWdlIDEwMjQtZW50cnkgUFRFIHBhZ2VzLiAgLS0gcGF1bHVzCiAgKgpAQCAtMTM1LDQwOSArODYsMjIgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KQotCi0vKiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgZ290Y2hhcyBoZXJlLiAgVGhlIDQweCBoYXJkd2FyZSBUTEJMTwotICAgZmllbGQgbG9va3MgbGlrZSB0aGlzOgotCi0gICAwICAxICAyICAzICA0ICAuLi4gMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKLSAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBFWCBXUiBaU0VMLi4uLi4uLiAgVyAgSSAgTSAgRwotCi0gICBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKLQotICAgLSBiaXRzIDIwIGFuZCAyMSBtdXN0IGJlIGNsZWFyZWQsIGJlY2F1c2Ugd2UgdXNlIDRrIHBhZ2VzICg0MHggY2FuCi0gICAgIHN1cHBvcnQgZG93biB0byAxayBwYWdlcyksIHRoaXMgaXMgZG9uZSBpbiB0aGUgVExCTWlzcyBleGNlcHRpb24KLSAgICAgaGFuZGxlci4KLSAgIC0gV2UgdXNlIG9ubHkgem9uZXMgMCAoZm9yIGtlcm5lbCBwYWdlcykgYW5kIDEgKGZvciB1c2VyIHBhZ2VzKQotICAgICBvZiB0aGUgMTYgYXZhaWxhYmxlLiAgQml0IDI0LTI2IG9mIHRoZSBUTEIgYXJlIGNsZWFyZWQgaW4gdGhlIFRMQgotICAgICBtaXNzIGhhbmRsZXIuICBCaXQgMjcgaXMgUEFHRV9VU0VSLCB0aHVzIHNlbGVjdGluZyB0aGUgY29ycmVjdAotICAgICB6b25lLgotICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHR3byBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQotICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDMwIGJpdHMuICBCZWNhdXNlIDQweCBkb2Vzbid0IHN1cHBvcnQgU01QCi0gICAgIGFueXdheSwgTSBpcyBpcnJlbGV2YW50IHNvIHdlIGJvcnJvdyBpdCBmb3IgUEFHRV9QUkVTRU5ULiAgQml0IDMwCi0gICAgIGlzIGNsZWFyZWQgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgYmVmb3JlIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLgotICAgLSBBbGwgb3RoZXIgYml0cyBvZiB0aGUgUFRFIGFyZSBsb2FkZWQgaW50byBUTEJMTyB3aXRob3V0Ci0gICAgIG1vZGlmaWNhdGlvbiwgbGVhdmluZyB1cyBvbmx5IHRoZSBiaXRzIDIwLCAyMSwgMjQsIDI1LCAyNiwgMzAgZm9yCi0gICAgIHNvZnR3YXJlIFBURSBiaXRzLiAgV2UgYWN0dWFsbHkgdXNlIHVzZSBiaXRzIDIxLCAyNCwgMjUsIGFuZAotICAgICAzMCByZXNwZWN0aXZlbHkgZm9yIHRoZSBzb2Z0d2FyZSBiaXRzOiBBQ0NFU1NFRCwgRElSVFksIFJXLCBhbmQKLSAgICAgUFJFU0VOVC4KLSovCi0KLS8qIERlZmluaXRpb25zIGZvciA0MHggZW1iZWRkZWQgY2hpcHMuICovCi0jZGVmaW5lCV9QQUdFX0dVQVJERUQJMHgwMDEJLyogRzogcGFnZSBpcyBndWFyZGVkIGZyb20gcHJlZmV0Y2ggKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMQkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDIJLyogc29mdHdhcmU6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCi0jZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KLSNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KLSNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgyMDAJLyogaGFyZHdhcmU6IEVYIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJLyogc29mdHdhcmU6IFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDQwMAkvKiBQTUQgcG9pbnRzIHRvIHBhZ2Ugb2YgUFRFcyAqLwotI2RlZmluZSBfUE1EX0JBRAkweDgwMgotI2RlZmluZSBfUE1EX1NJWkUJMHgwZTAJLyogc2l6ZSBmaWVsZCwgIT0gMCBmb3IgbGFyZ2UtcGFnZSBQTUQgZW50cnkgKi8KLSNkZWZpbmUgX1BNRF9TSVpFXzRNCTB4MGMwCi0jZGVmaW5lIF9QTURfU0laRV8xNk0JMHgwZTAKLSNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWR2YWwpCSgxMDI0IDw8ICgoKHBtZHZhbCkgJiBfUE1EX1NJWkUpID4+IDQpKQotCi0vKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDQweCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQorI2luY2x1ZGUgPGFzbS9wdGUtNDB4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR180NHgpCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIFBQQzQ0MAotICoKLSAqIEJlY2F1c2Ugb2YgdGhlIDMgd29yZCBUTEIgZW50cmllcyB0byBzdXBwb3J0IDM2LWJpdCBhZGRyZXNzaW5nLAotICogdGhlIGF0dHJpYnV0ZSBhcmUgZGlmZmljdWx0IHRvIG1hcCBpbiBzdWNoIGEgZmFzaGlvbiB0aGF0IHRoZXkKLSAqIGFyZSBlYXNpbHkgbG9hZGVkIGR1cmluZyBleGNlcHRpb24gcHJvY2Vzc2luZy4gIEkgZGVjaWRlZCB0bwotICogb3JnYW5pemUgdGhlIGVudHJ5IHNvIHRoZSBFUlBOIGlzIHRoZSBvbmx5IHBvcnRpb24gaW4gdGhlCi0gKiB1cHBlciB3b3JkIG9mIHRoZSBQVEUgYW5kIHRoZSBhdHRyaWJ1dGUgYml0cyBiZWxvdyBhcmUgcGFja2VkCi0gKiBpbiBhcyBzZW5zaWJseSBhcyB0aGV5IGNhbiBiZSBpbiB0aGUgYXJlYSBiZWxvdyBhIDRLQiBwYWdlIHNpemUKLSAqIG9yaWVudGVkIFJQTi4gIFRoaXMgYXQgbGVhc3QgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoZSBSUE4gYW5kCi0gKiBFUlBOIGZpZWxkcyBpbiB0aGUgVExCLiAtTWF0dAotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKLSAqIGxlc3MgdGhhbiA0S0IuCi0gKgotICoKLSAqIFBQQyA0NDAgY29yZSBoYXMgZm9sbG93aW5nIFRMQiBhdHRyaWJ1dGUgZmllbGRzOwotICoKLSAqICAgVExCMToKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLSAgLSAgLSAgLSAgLSAgLSBFUlBOLi4uLi4uLgotICoKLSAqICAgVExCMjoKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIC0gIC0gIC0gIC0gIC0gICAgLSBVMCBVMSBVMiBVMyBXICBJICBNICBHICBFICAgLSBVWCBVVyBVUiBTWCBTVyBTUgotICoKLSAqIE5ld2VyIDQ0MCBjb3JlcyAoNDQweDYgYXMgdXNlZCBvbiBBTUNDIDQ2MEVYLzQ2MEdUKSBoYXZlIGFkZGl0aW9uYWwKLSAqIFRMQjIgc3RvcmFnZSBhdHRpYnV0ZSBmaWVsZHMuIFRob3NlIGFyZToKLSAqCi0gKiAgIFRMQjI6Ci0gKiAgIDAuLi4xMCAgICAxMSAgIDEyICAgMTMgICAxNCAgIDE1ICAgMTYuLi4zMQotICogICBubyBjaGFuZ2UgV0wxICBJTDFJIElMMUQgSUwySSBJTDJEIG5vIGNoYW5nZQotICoKLSAqIFRoZXJlIGFyZSBzb21lIGNvbnN0cmFpbnMgYW5kIG9wdGlvbnMsIHRvIGRlY2lkZSBtYXBwaW5nIHNvZnR3YXJlIGJpdHMKLSAqIGludG8gVExCIGVudHJ5LgotICoKLSAqICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBDQUNIRSBDT0hFUkVOVCBiaXQgKE0pIGhhcyBubyBlZmZlY3Qgb24gb3JpZ2luYWwgUFBDNDQwIGNvcmVzLAotICogICAgIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IFNNUC4gSG93ZXZlciwgc29tZSBsYXRlciA0NjAgdmFyaWFudHMKLSAqICAgICBoYXZlIC1zb21lLSBmb3JtIG9mIFNNUCBzdXBwb3J0IGFuZCBzbyBJIGtlZXAgdGhlIGJpdCB0aGVyZSBmb3IKLSAqICAgICBmdXR1cmUgdXNlCi0gKgotICogV2l0aCB0aGUgUFBDIDQ0eCBMaW51eCBpbXBsZW1lbnRhdGlvbiwgdGhlIDAtMTF0aCBMU0JzIG9mIHRoZSBQVEUgYXJlIHVzZWQKLSAqIGZvciBtZW1vcnkgcHJvdGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyAoc2VlIFBURSBzdHJ1Y3R1cmUgaW4KLSAqIGluY2x1ZGUvYXNtLXBwYy9tbXUuaCkuICBUaGUgX1BBR0VfWFhYIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBtYXAgdG8gdGhlCi0gKiBhYm92ZSBiaXRzLiAgTm90ZSB0aGF0IHRoZSBiaXQgdmFsdWVzIGFyZSBDUFUgc3BlY2lmaWMsIG5vdCBhcmNoaXRlY3R1cmUKLSAqIHNwZWNpZmljLgotICoKLSAqIFRoZSBrZXJuZWwgUFRFIGVudHJ5IGhvbGRzIGFuIGFyY2gtZGVwZW5kZW50IHN3cF9lbnRyeSBzdHJ1Y3R1cmUgdW5kZXIKLSAqIGNlcnRhaW4gc2l0dWF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGluIHN1Y2ggc2l0dWF0aW9ucyBzb21lIHBvcnRpb24gb2YKLSAqIHRoZSBQVEUgYml0cyBhcmUgdXNlZCBhcyBhIHN3cF9lbnRyeS4gSW4gdGhlIFBQQyBpbXBsZW1lbnRhdGlvbiwgdGhlCi0gKiAzLTI0dGggTFNCIGFyZSBzaGFyZWQgd2l0aCBzd3BfZW50cnksIGhvd2V2ZXIgdGhlIDAtMm5kIHRocmVlIExTQiBzdGlsbAotICogaG9sZCBwcm90ZWN0aW9uIHZhbHVlcy4gVGhhdCBtZWFucyB0aGUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGFyZQotICogcmVzZXJ2ZWQgZm9yIGJvdGggUFRFIGFuZCBTV0FQIGVudHJ5IGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IHRocmVlCi0gKiBMU0JzLgotICoKLSAqIFRoZXJlIGFyZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXZhaWxhYmxlIGZvciBTV0FQIGVudHJ5OgotICoJX1BBR0VfUFJFU0VOVAotICoJX1BBR0VfRklMRQotICoJX1BBR0VfSEFTSFBURSAoaWYgSFcgaGFzKQotICoKLSAqIFNvIHRob3NlIHRocmVlIGJpdHMgaGF2ZSB0byBiZSBpbnNpZGUgb2YgMC0ybmQgTFNCIG9mIFBURS4KLSAqCi0gKi8KLQotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAwMDAyMDAJCS8qIEg6IE0gYml0ICovCi0jZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLwotCi0vKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KKyNpbmNsdWRlIDxhc20vcHRlLTQ0eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyoKLSAgIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMzoKLQotICAgMzIgMzMgMzQgMzUgMzYgIC4uLiA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MwotICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBVMCBVMSBVMiBVMyBVWCBTWCBVVyBTVyBVUiBTUgotCi0gICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotCi0gICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIEZTTCBCb29rLUUgQ29yZXMgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAxCS8qIFM6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMgkvKiBTOiBVc2VyIHBhZ2UgKG1hcHMgdG8gVVIpICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDQJLyogUzogV3JpdGUgcGVybWlzc2lvbiAoU1cpICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDgJLyogUzogUGFnZSBkaXJ0eSAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMjAJLyogUzogUGFnZSByZWZlcmVuY2VkICovCi0KLSNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwNDAJLyogSDogRSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMDgwCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLwotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLwotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmZmZmZmMDAwMFVMTAotI2VuZGlmCi0KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKLSNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLQorI2luY2x1ZGUgPGFzbS9wdGUtZnNsLWJvb2tlLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR184eHgpCi0vKiBEZWZpbml0aW9ucyBmb3IgOHh4IGVtYmVkZGVkIGNoaXBzLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMQkvKiBQYWdlIGlzIHZhbGlkICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCi0KLS8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCi0gKiBpbnRvIHRoZSBUTEIuCi0gKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgwCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KLQotLyogU2V0dGluZyBhbnkgYml0cyBpbiB0aGUgbmliYmxlIHdpdGggdGhlIGZvbGxvdyB0d28gY29udHJvbHMgd2lsbAotICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCi0gKiBhcmUgYWx3YXlzIHplcm8uCi0gKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAxMDAJLyogaC93IHdyaXRlIGVuYWJsZTogbmV2ZXIgc2V0IGluIExpbnV4IFBURSAqLwotI2RlZmluZSBfUEFHRV9VU0VSCTB4MDgwMAkvKiBPbmUgb2YgdGhlIFBQIGJpdHMsIHRoZSBvdGhlciBpcyBVU0VSJn5SVyAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKLSNkZWZpbmUgX1BNRF9CQUQJMHgwZmYwCi0jZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYwotI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCi0KLSNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKLQotLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA4eHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCi0jZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCi0KKyNpbmNsdWRlIDxhc20vcHRlLTh4eC5oPgogI2Vsc2UgLyogQ09ORklHXzZ4eCAqLwotLyogRGVmaW5pdGlvbnMgZm9yIDYweCwgNzQwLzc1MCwgZXRjLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCS8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDAyCS8qIGhhc2hfcGFnZSBoYXMgbWFkZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA0CS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAkvKiB1c2VybW9kZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDA4CS8qIEc6IHByb2hpYml0IHNwZWN1bGF0aXZlIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAxMAkvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAyMAkvKiBJOiBjYWNoZSBpbmhpYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDA0MAkvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwCS8qIEM6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCi0jZWxzZQotI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoMzIuaD4KICNlbmRpZgogCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotCi0jZW5kaWYKLQotLyoKLSAqIFNvbWUgYml0cyBhcmUgb25seSB1c2VkIG9uIHNvbWUgY3B1IGZhbWlsaWVzLi4uCi0gKi8KLSNpZm5kZWYgX1BBR0VfSEFTSFBURQotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUFRFX05PTkVfTUFTSwotI2RlZmluZSBfUFRFX05PTkVfTUFTSyAwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfU0hBUkVECi0jZGVmaW5lIF9QQUdFX1NIQVJFRAkwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfSFdXUklURQotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9IV0VYRUMKLSNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9FWEVDCi0jZGVmaW5lIF9QQUdFX0VYRUMJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0VORElBTgotI2RlZmluZSBfUEFHRV9FTkRJQU4JMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0NPSEVSRU5UCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCi0jaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAotI2VuZGlmCi0jaWZuZGVmIF9QTURfU0laRQotI2RlZmluZSBfUE1EX1NJWkUJMAotI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCi0jZW5kaWYKLQotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IFwKLQkJCSBfUEFHRV9TUEVDSUFMKQotCi0KLSNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAotCQkJIF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX0VORElBTiB8IFwKLQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCi0JCQkgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQykKLQotLyoKLSAqIFdlIGRlZmluZSAyIHNldHMgb2YgYmFzZSBwcm90IGJpdHMsIG9uZSBmb3IgYmFzaWMgcGFnZXMgKGllLAotICogY2FjaGVhYmxlIGtlcm5lbCBhbmQgdXNlciBwYWdlcykgYW5kIG9uZSBmb3Igbm9uIGNhY2hlYWJsZQotICogcGFnZXMuIFdlIGFsd2F5cyBzZXQgX1BBR0VfQ09IRVJFTlQgd2hlbiBTTVAgaXMgZW5hYmxlZCBvcgotICogdGhlIHByb2Nlc3NvciBtaWdodCBuZWVkIGl0IGZvciBETUEgY29oZXJlbmN5LgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKLSNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCi0jZWxzZQotI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCi0jZW5kaWYKLSNkZWZpbmUgX1BBR0VfQkFTRV9OQwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTk9fQ0FDSEUpCi0KLSNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKQotI2RlZmluZSBfUEFHRV9LRVJORUwJKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUkVOQUJMRSkKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX05DCShfUEFHRV9CQVNFX05DIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfV1JFTkFCTEUpCi0KLSNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKLS8qIE9uIHN0YW5kYXJkIFBQQyBNTVUsIG5vIHVzZXIgYWNjZXNzIGltcGxpZXMga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzLAotICogc28gdG8gd3JpdGUtcHJvdGVjdCBrZXJuZWwgbWVtb3J5IHdlIG11c3QgdHVybiBvbiB1c2VyIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9VU0VSKQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCShfUEFHRV9CQVNFIHwgX1BBR0VfU0hBUkVEKQotI2VuZGlmCi0KLSNkZWZpbmUgX1BBR0VfSU8JKF9QQUdFX0tFUk5FTF9OQyB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIF9QQUdFX1JBTQkoX1BBR0VfS0VSTkVMIHwgX1BBR0VfSFdFWEVDKQotCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCi0JZGVmaW5lZChDT05GSUdfS1BST0JFUykKLS8qIFdlIHdhbnQgdGhlIGRlYnVnZ2VycyB0byBiZSBhYmxlIHRvIHNldCBicmVha3BvaW50cyBhbnl3aGVyZSwgc28KLSAqIGRvbid0IHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0ICovCi0jZGVmaW5lIF9QQUdFX1JBTV9URVhUCV9QQUdFX1JBTQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJKF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0hXRVhFQykKLSNlbmRpZgotCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9CQVNFKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoX1BBR0VfUkFNKQotI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCV9fcGdwcm90KF9QQUdFX0lPKQotCi0vKgotICogVGhlIFBvd2VyUEMgY2FuIG9ubHkgZG8gZXhlY3V0ZSBwcm90ZWN0aW9uIG9uIGEgc2VnbWVudCAoMjU2TUIpIGJhc2lzLAotICogbm90IG9uIGEgcGFnZSBiYXNpcy4gIFNvIHdlIGNvbnNpZGVyIGV4ZWN1dGUgcGVybWlzc2lvbiB0aGUgc2FtZSBhcyByZWFkLgotICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4KLSAqIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCi0gKi8KLSNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWV9YCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRF9YCi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisvKiBBbmQgaGVyZSB3ZSBpbmNsdWRlIGNvbW1vbiBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBNYWtlIHN1cmUgd2UgZ2V0IGEgbGluayBlcnJvciBpZiBQTURfUEFHRV9TSVpFIGlzIGV2ZXIgY2FsbGVkIG9uIGEKLSAqIGtlcm5lbCB3aXRob3V0IGxhcmdlIHBhZ2UgUE1EIHN1cHBvcnQgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUodm9pZCk7CiAKLS8qCi0gKiBDb252ZXJzaW9ucyBiZXR3ZWVuIFBURSB2YWx1ZXMgYW5kIHBhZ2UgZnJhbWUgbnVtYmVycy4KLSAqLwotCi0vKiBpbiBzb21lIGNhc2Ugd2Ugd2FudCB0byBhZGRpdGlvbmFseSBhZGp1c3Qgd2hlcmUgdGhlIHBmbiBpcyBpbiB0aGUgcHRlIHRvCi0gKiBhbGxvdyByb29tIGZvciBtb3JlIGZsYWdzICovCi0jaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCi0jZGVmaW5lIFBGTl9TSElGVF9PRkZTRVQJKFBBR0VfU0hJRlQgKyA4KQotI2Vsc2UKLSNkZWZpbmUgUEZOX1NISUZUX09GRlNFVAkoUEFHRV9TSElGVCkKLSNlbmRpZgotCi0jZGVmaW5lIHB0ZV9wZm4oeCkJCShwdGVfdmFsKHgpID4+IFBGTl9TSElGVF9PRkZTRVQpCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQotCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHB0ZV9iYXNpY190KShwZm4pIDw8IFBGTl9TSElGVF9PRkZTRVQpIHxcCi0JCQkJCXBncHJvdF92YWwocHJvdCkpCi0jZGVmaW5lIG1rX3B0ZShwYWdlLCBwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBwcm90KQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQogI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApIFwKIAlkbyB7IHB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIDApOyB9IHdoaWxlICgwKQogCkBAIC01NDYsNDMgKzExMCw2IEBACiAjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAmIF9QTURfUFJFU0VOVF9NQVNLKQogI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCWRvIHsgcG1kX3ZhbCgqKHBtZHApKSA9IDA7IH0gd2hpbGUgKDApCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKLXsKLQlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKLQlyZXR1cm4gcHRlOwotfQotCiAvKgogICogV2hlbiBmbHVzaGluZyB0aGUgdGxiIGVudHJ5IGZvciBhIHBhZ2UsIHdlIGFsc28gbmVlZCB0byBmbHVzaCB0aGUgaGFzaAogICogdGFibGUgZW50cnkuICBmbHVzaF9oYXNoX3BhZ2VzIGlzIGFzc2VtYmxlciAoZm9yIHNwZWVkKSBpbiBoYXNodGFibGUuUy4KQEAgLTU5OSwxMSArMTI2LDE5IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIC8qCi0gKiBBdG9taWMgUFRFIHVwZGF0ZXMuCisgKiBQVEUgdXBkYXRlcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gZXhpc3RpbmcKKyAqIHZhbGlkIFBURSBpcyB1cGRhdGVkLiBUaGlzIGRvZXMgLW5vdC0gaW5jbHVkZSBzZXRfcHRlX2F0KCkKKyAqIHdoaWNoIG5vd2FkYXlzIG9ubHkgc2V0cyBhIG5ldyBQVEUuCiAgKgotICogcHRlX3VwZGF0ZSBjbGVhcnMgYW5kIHNldHMgYml0IGF0b21pY2FsbHksIGFuZCByZXR1cm5zCi0gKiB0aGUgb2xkIHB0ZSB2YWx1ZS4gIEluIHRoZSA2NC1iaXQgUFRFIGNhc2Ugd2UgbG9jayBhcm91bmQgdGhlCi0gKiBsb3cgUFRFIHdvcmQgc2luY2Ugd2UgZXhwZWN0IEFMTCBmbGFnIGJpdHMgdG8gYmUgdGhlcmUKKyAqIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBNTVUsIHdlIG1heSBuZWVkIHRvIHVzZSBhdG9taWMgdXBkYXRlcworICogYW5kIHRoZSBQVEUgbWF5IGJlIGVpdGhlciAzMiBvciA2NCBiaXQgd2lkZS4gSW4gdGhlIGxhdGVyIGNhc2UsCisgKiB3aGVuIHVzaW5nIGF0b21pYyB1cGRhdGVzLCBvbmx5IHRoZSBsb3cgcGFydCBvZiB0aGUgUFRFIGlzCisgKiBhY2Nlc3NlZCBhdG9taWNhbGx5LgorICoKKyAqIEluIGFkZGl0aW9uLCBvbiA0NHgsIHdlIGFsc28gbWFpbnRhaW4gYSBnbG9iYWwgZmxhZyBpbmRpY2F0aW5nCisgKiB0aGF0IGFuIGV4ZWN1dGFibGUgdXNlciBtYXBwaW5nIHdhcyBtb2RpZmllZCwgd2hpY2ggaXMgbmVlZGVkCisgKiB0byBwcm9wZXJseSBmbHVzaCB0aGUgdmlydHVhbGx5IHRhZ2dlZCBpbnN0cnVjdGlvbiBjYWNoZSBvZgorICogdGhvc2UgaW1wbGVtZW50YXRpb25zLgogICovCiAjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdXBkYXRlKHB0ZV90ICpwLApAQCAtNjY4LDQ0ICsyMDMsNiBAQAogI2VuZGlmIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KIAogLyoKLSAqIHNldF9wdGUgc3RvcmVzIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCi0gKiBPbiBtYWNoaW5lcyB3aGljaCB1c2UgYW4gTU1VIGhhc2ggdGFibGUgd2UgYXZvaWQgY2hhbmdpbmcgdGhlCi0gKiBfUEFHRV9IQVNIUFRFIGJpdC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotI2lmIChfUEFHRV9IQVNIUFRFICE9IDApICYmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKLQlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLSNpZiBfUEFHRV9IQVNIUFRFICE9IDAKLQlpZiAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQlmbHVzaF9oYXNoX2VudHJ5KG1tLCBwdGVwLCBhZGRyKTsKLSNlbmRpZgotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JCXN0dyVVMCVYMCAlMiwlMFxuXAotCQllaWVpb1xuXAotCQlzdHclVTAlWDAgJUwyLCUxIgotCTogIj1tIiAoKnB0ZXApLCAiPW0iICgqKCh1bnNpZ25lZCBjaGFyICopcHRlcCs0KSkKLQk6ICJyIiAocHRlKSA6ICJtZW1vcnkiKTsKLSNlbHNlCi0JKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQkgICAgICB8IChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSkpOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKQotCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKLSNlbmRpZgotCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLX0KLQotLyoKICAqIDIuNiBjYWxscyB0aGlzIHdpdGhvdXQgZmx1c2hpbmcgdGhlIFRMQiBlbnRyeTsgdGhpcyBpcyB3cm9uZwogICogZm9yIG91ciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9uLCB3ZSBmaXggdGhhdCB1cCBoZXJlLgogICovCkBAIC03NDUsMjQgKzI0MiwxNCBAQAogfQogCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQogewogCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKLQkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyk7CisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfAorCQkgX1BBR0VfSFdFWEVDIHwgX1BBR0VfRVhFQyk7CiAJcHRlX3VwZGF0ZShwdGVwLCAwLCBiaXRzKTsKIH0KIAotI2RlZmluZSAgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAotKHsJCQkJCQkJCQkgICBcCi0JaW50IF9fY2hhbmdlZCA9ICFwdGVfc2FtZSgqKF9fcHRlcCksIF9fZW50cnkpOwkJCSAgIFwKLQlpZiAoX19jaGFuZ2VkKSB7CQkJCQkJICAgXAotCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOyAgICAgICAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCi0KICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSEFTSFBURSkgPT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZmRjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF80S19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0gKKy8qCisgKiBFbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbC4gIFRoZSBQVEUgbGV2ZWwgbXVzdCB1c2UgYSA2NGIgcmVjb3JkCisgKiBmb3IgZWFjaCBwYWdlIHRhYmxlIGVudHJ5LiAgVGhlIFBNRCBhbmQgUEdEIGxldmVsIHVzZSBhIDMyYiByZWNvcmQgZm9yCisgKiBlYWNoIGVudHJ5IGJ5IGFzc3VtaW5nIHRoYXQgZWFjaCBlbnRyeSBpcyBwYWdlIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgUFRFX0lOREVYX1NJWkUgIDkKKyNkZWZpbmUgUE1EX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUFRFX1RBQkxFX1NJWkUJKHNpemVvZihwdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVURfVEFCTEVfU0laRQkoc2l6ZW9mKHB1ZF90KSA8PCBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJKHNpemVvZihwZ2RfdCkgPDwgUEdEX0lOREVYX1NJWkUpCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BVRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUE1EX1NISUZUCisKKy8qIFBVRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUFVEX1NISUZUCShQTURfU0hJRlQgKyBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFVEX1NJWkUJKDFVTCA8PCBQVURfU0hJRlQpCisjZGVmaW5lIFBVRF9NQVNLCSh+KFBVRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBmb3VydGgtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQVURfU0hJRlQgKyBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCisjZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAorLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLworI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKKworCisvKgorICogNC1sZXZlbCBwYWdlIHRhYmxlcyByZWxhdGVkIGJpdHMKKyAqLworCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCShwZ2RfdmFsKHBnZCkgPT0gMCkKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkocGdkX3ZhbChwZ2QpICE9IDApCisjZGVmaW5lIHBnZF9jbGVhcihwZ2RwKQkJKHBnZF92YWwoKihwZ2RwKSkgPSAwKQorI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCShwZ2RfdmFsKHBnZCkgJiB+UEdEX01BU0tFRF9CSVRTKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQl2aXJ0X3RvX3BhZ2UocGdkX3BhZ2VfdmFkZHIocGdkKSkKKworI2RlZmluZSBwdWRfb2Zmc2V0KHBnZHAsIGFkZHIpCVwKKyAgKCgocHVkX3QgKikgcGdkX3BhZ2VfdmFkZHIoKihwZ2RwKSkpICsgXAorICAgICgoKGFkZHIpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpKQorCisjZGVmaW5lIHB1ZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB1ZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHVkX3ZhbChlKSkKKworLyoKKyAqIE9uIGFsbCA0SyBzZXR1cHMsIHJlbWFwXzRrX3BmbigpIGVxdWF0ZXMgdG8gcmVtYXBfcGZuX3JhbmdlKCkgKi8KKyNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQlcCisJcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsIChwcm90KSkKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNjRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjMDg1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworCisjZGVmaW5lIFBURV9JTkRFWF9TSVpFICAxMgorI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTIKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUJMAorI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocmVhbF9wdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKKworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUEFHRV9TSElGVAorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLworI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QvUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkweDFmZgorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IGIwZjE4YmUuLmM0MGRiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMTEsOSArMTEsOSBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS02NGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC02NGsuaD4KICNlbHNlCi0jaW5jbHVkZSA8YXNtL3BndGFibGUtNGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC00ay5oPgogI2VuZGlmCiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKQEAgLTI1LDYgKzI1LDggQEAKICAgICAgICAgICAgICAgICAJICAgIFBVRF9JTkRFWF9TSVpFICsgUEdEX0lOREVYX1NJWkUgKyBQQUdFX1NISUZUKQogI2RlZmluZSBQR1RBQkxFX1JBTkdFIChBU01fQ09OU1QoMSkgPDwgUEdUQUJMRV9FQUREUl9TSVpFKQogCisKKy8qIFNvbWUgc2FuaXR5IGNoZWNraW5nICovCiAjaWYgVEFTS19TSVpFX1VTRVI2NCA+IFBHVEFCTEVfUkFOR0UKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgcGFnZXRhYmxlIHJhbmdlCiAjZW5kaWYKQEAgLTMzLDcgKzM1LDYgQEAKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgdXNlciBWU0lEIHJhbmdlCiAjZW5kaWYKIAotCiAvKgogICogRGVmaW5lIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSB2bWFsbG9jIFZNIGFyZWEuCiAgKi8KQEAgLTc2LDgyICs3NywxMSBAQAogCiAKIC8qCi0gKiBDb21tb24gYml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQotICogKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIEFkZGl0aW9uYWwKLSAqIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS0qLmgKKyAqIEluY2x1ZGUgdGhlIFBURSBiaXRzIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCi0jZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwOAotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQlVTWQkweDA4MDAgLyogc29mdHdhcmU6IFBURSAmIGhhc2ggYXJlIGJ1c3kgKi8KKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC5oPgorI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKLS8qIFN0cm9uZyBBY2Nlc3MgT3JkZXJpbmcgKi8KLSNkZWZpbmUgX1BBR0VfU0FPCShfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX1dSRU5BQkxFCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKQotCi0vKiBfX3BncHJvdCBkZWZpbmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggKi8KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKLQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9DSQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgICAgICAgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0FHUAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSkKLSNkZWZpbmUgSEFWRV9QQUdFX0FHUAotCi0jZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCi0JCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9XUklURVRIUlUgfAkJXAotCQkJIF9QQUdFXzRLX1BGTiB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CQlcCi0JCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0VYRUMpCi0vKiBQVEVJRFggbmliYmxlICovCi0jZGVmaW5lIF9QVEVJRFhfU0VDT05EQVJZCTB4OAotI2RlZmluZSBfUFRFSURYX0dST1VQX0lYCTB4NwotCi0KLS8qCi0gKiBQT1dFUjQgYW5kIG5ld2VyIGhhdmUgcGVyIHBhZ2UgZXhlY3V0ZSBwcm90ZWN0aW9uLCBvbGRlciBjaGlwcyBjYW4gb25seQotICogZG8gdGhpcyBvbiBhIHNlZ21lbnQgKDI1Nk1CKSBiYXNpcy4KLSAqCi0gKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgotICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KLSAqCi0gKiBOb3RlIGR1ZSB0byB0aGUgd2F5IHZtIGZsYWdzIGFyZSBsYWlkIG91dCwgdGhlIGJpdHMgYXJlIFhXUgotICovCi0jZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX1gKLSNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9YCi0KLSNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfWAotI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfWAogCiAjaWZkZWYgQ09ORklHX1BQQ19NTV9TTElDRVMKICNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKQEAgLTE2MSwzMyArOTEsMzkgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCi0gKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAotICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KLSAqCi0gKiBta19wdGUgdGFrZXMgYSAoc3RydWN0IHBhZ2UgKikgYXMgaW5wdXQKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdmFyaW91cyBQVEUgYWNjZXNzb3JzLCBpdCdzCisgKiB1c2VkIGluIGFsbCBjYXNlcyBleGNlcHQgQm9vazNTIHdpdGggNjRLIHBhZ2VzIHdoZXJlIHdlIGhhdmUgYQorICogY29uY2VwdCBvZiBzdWItcGFnZXMKICAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKyNpZm5kZWYgX19yZWFsX3B0ZQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKLXsKLQlwdGVfdCBwdGU7CisjaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKKyNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCisjZWxzZQorI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQorI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKKyNlbmRpZgorI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKIAorI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKKwlkbyB7CQkJCQkJCSAgICAgICAgIFwKKwkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAorCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKIAotCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUFRFX1JQTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7Ci0JcmV0dXJuIHB0ZTsKLX0KKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCkKIAotI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKLSAgKF9fcHRlKChwdGVfdmFsKF9wdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpCisjaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKKyNlbHNlCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SworI2VuZGlmCiAKLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorI2VuZGlmIC8qIF9fcmVhbF9wdGUgKi8KKwogCiAvKiBwdGVfY2xlYXIgbW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4KT4+UFRFX1JQTl9TSElGVCkpKQotI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKLQogI2RlZmluZSBQTURfQkFEX0JJVFMJCShQVEVfVEFCTEVfU0laRS0xKQogI2RlZmluZSBQVURfQkFEX0JJVFMJCShQTURfVEFCTEVfU0laRS0xKQogCkBAIC0yMzUsMzYgKzE3MSw2IEBACiAvKiBUaGlzIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSB2bWFsbG9jIHBhZ2VzICovCiAjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQogCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7fQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SVyk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkpOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKSB7Ci0JcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHBncHJvdF90IHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQotewotCXJldHVybiBfX3BncHJvdChwdGVfdmFsKHB0ZSkgJiBQQUdFX1BST1RfQklUUyk7Ci19CiAKIC8qIEF0b21pYyBQVEUgdXBkYXRlcyAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCkBAIC0yNzIsNiArMTc4LDcgQEAKIAkJCQkgICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCSAgICAgICBpbnQgaHVnZSkKIHsKKyNpZmRlZiBQVEVfQVRPTUlDX1VQREFURVMKIAl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCkBAIC0yODQsNiArMTkxLDEzIEBACiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCksICI9bSIgKCpwdGVwKQogCTogInIiIChwdGVwKSwgInIiIChjbHIpLCAibSIgKCpwdGVwKSwgImkiIChfUEFHRV9CVVNZKQogCTogImNjIiApOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkICYgfmNscik7CisjZW5kaWYKKwkvKiBodWdlIHBhZ2VzIHVzZSB0aGUgb2xkIHBhZ2UgdGFibGUgbG9jayAqLworCWlmICghaHVnZSkKKwkJYXNzZXJ0X3B0ZV9sb2NrZWQobW0sIGFkZHIpOwogCiAJaWYgKG9sZCAmIF9QQUdFX0hBU0hQVEUpCiAJCWhwdGVfbmVlZF9mbHVzaChtbSwgYWRkciwgcHRlcCwgb2xkLCBodWdlKTsKQEAgLTM1OSwyNiArMjczLDE3IEBACiAJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgfjBVTCwgMCk7CiB9CiAKLS8qCi0gKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKQotCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwotCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwotCSpwdGVwID0gcHRlOwotfQogCiAvKiBTZXQgdGhlIGRpcnR5IGFuZC9vciBhY2Nlc3NlZCBiaXRzIGF0b21pY2FsbHkgaW4gYSBsaW51eCBQVEUsIHRoaXMKICAqIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBmbHVzaCB0aGUgaGFzaCBlbnRyeQogICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwotc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQorc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8CisJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKTsKKworI2lmZGVmIFBURV9BVE9NSUNfVVBEQVRFUwogCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTM5MSwxNiArMjk2LDExIEBACiAJOiI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCiAJOiJyIiAoYml0cyksICJyIiAocHRlcCksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCiAJOiJjYyIpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkIHwgYml0cyk7CisjZW5kaWYKIH0KLSNkZWZpbmUgIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKLSh7CQkJCQkJCQkJICAgXAotCWludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihfX3B0ZXApLCBfX2VudHJ5KTsJCQkgICBcCi0JaWYgKF9fY2hhbmdlZCkgewkJCQkJCSAgIFwKLQkJX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KTsgICAgCSAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMDdmNTVlNi4uZWIxN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02LDcgKzYsMTcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKIHN0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK2V4dGVybiB2b2lkIGFzc2VydF9wdGVfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworI2Vsc2UgLyogQ09ORklHX0RFQlVHX1ZNICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3B0ZV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKK30KKyNlbmRpZiAvKiAhQ09ORklHX0RFQlVHX1ZNICovCisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKQEAgLTE3LDYgKzI3LDEzMCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisvKiBHZW5lcmljIGFjY2Vzc29ycyB0byBQVEUgYml0cyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfcHJlc2VudChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiB+X1BURV9OT05FX01BU0spID09IDA7IH0KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsgfQorCisvKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqCisgKiBFdmVuIGlmIFBURXMgY2FuIGJlIHVuc2lnbmVkIGxvbmcgbG9uZywgYSBQRk4gaXMgYWx3YXlzIGFuIHVuc2lnbmVkCisgKiBsb25nIGZvciBub3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcGdwcm90KSB7CisJcmV0dXJuIF9fcHRlKCgocHRlX2Jhc2ljX3QpKHBmbikgPDwgUFRFX1JQTl9TSElGVCkgfAorCQkgICAgIHBncHJvdF92YWwocGdwcm90KSk7IH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkJeworCXJldHVybiBwdGVfdmFsKHB0ZSkgPj4gUFRFX1JQTl9TSElGVDsgfQorCisvKiBLZWVwIHRoZXNlIGFzIGEgbWFjcm9zIHRvIGF2b2lkIGluY2x1ZGUgZGVwZW5kZW5jeSBtZXNzICovCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworLyogR2VuZXJpYyBtb2RpZmllcnMgZm9yIFBURSBiaXRzICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpIHsKKwlyZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKworLyogSW5zZXJ0IGEgUFRFLCB0b3AtbGV2ZWwgZnVuY3Rpb24gaXMgb3V0IG9mIGxpbmUuIEl0IHVzZXMgYW4gaW5saW5lCisgKiBsb3cgbGV2ZWwgZnVuY3Rpb24gaW4gdGhlIHJlc3BlY3RpdmUgcGd0YWJsZS0qIGZpbGVzCisgKi8KK2V4dGVybiB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCSAgICAgICBwdGVfdCBwdGUpOworCisvKiBUaGlzIGxvdyBsZXZlbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgYWN0dWFsIFBURSBpbnNlcnRpb24KKyAqIFNldHRpbmcgdGhlIFBURSBkZXBlbmRzIG9uIHRoZSBNTVUgdHlwZSBhbmQgb3RoZXIgZmFjdG9ycy4gSXQncworICogYW4gaG9ycmlibGUgbWVzcyB0aGF0IEknbSBub3QgZ29pbmcgdG8gdHJ5IHRvIGNsZWFuIHVwIG5vdyBidXQKKyAqIEknbSBrZWVwaW5nIGl0IGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbiBzcHJlYWQgYXJvdW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCBpbnQgcGVyY3B1KQoreworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJLyogRmlyc3QgY2FzZSBpcyAzMi1iaXQgSGFzaCBNTVUgaW4gU01QIG1vZGUgd2l0aCAzMi1iaXQgUFRFcy4gV2UgdXNlIHRoZQorCSAqIGhlbHBlciBwdGVfdXBkYXRlKCkgd2hpY2ggZG9lcyBhbiBhdG9taWMgdXBkYXRlLiBXZSBuZWVkIHRvIGRvIHRoYXQKKwkgKiBiZWNhdXNlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY2FuIGNsZWFyIF9QQUdFX0hBU0hQVEUuIElmIGl0J3MgYQorCSAqIHBlci1DUFUgUFRFIHN1Y2ggYXMgYSBrbWFwX2F0b21pYywgd2UgZG8gYSBzaW1wbGUgdXBkYXRlIHByZXNlcnZpbmcKKwkgKiB0aGUgaGFzaCBiaXRzIGluc3RlYWQgKGllLCBzYW1lIGFzIHRoZSBub24tU01QIGNhc2UpCisJICovCisJaWYgKHBlcmNwdSkKKwkJKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQorCQkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKwllbHNlCisJCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwkvKiBTZWNvbmQgY2FzZSBpcyAzMi1iaXQgd2l0aCA2NC1iaXQgUFRFIGluIFNNUCBtb2RlLiBJbiB0aGlzIGNhc2UsIHdlCisJICogY2FuIGp1c3Qgc3RvcmUgYXMgbG9uZyBhcyB3ZSBkbyB0aGUgdHdvIGhhbHZlcyBpbiB0aGUgcmlnaHQgb3JkZXIKKwkgKiB3aXRoIGEgYmFycmllciBpbiBiZXR3ZWVuLiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgdGFrZSBjYXJlLAorCSAqIGluIHRoZSBoYXNoIGNvZGUsIHRvIHByZS1pbnZhbGlkYXRlIGlmIHRoZSBQVEUgd2FzIGFscmVhZHkgaGFzaGVkLAorCSAqIHdoaWNoIHN5bmNocm9uaXplcyB1cyB3aXRoIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbi4KKwkgKiBJbiB0aGUgcGVyY3B1IGNhc2UsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIHNpbXBsZSB1cGRhdGUgcHJlc2VydmluZworCSAqIHRoZSBoYXNoIGJpdHMKKwkgKi8KKwlpZiAocGVyY3B1KSB7CisJCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisJCXJldHVybjsKKwl9CisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeShtbSwgcHRlcCwgYWRkcik7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorCQlzdHclVTAlWDAgJTIsJTBcblwKKwkJZWllaW9cblwKKwkJc3R3JVUwJVgwICVMMiwlMSIKKwk6ICI9bSIgKCpwdGVwKSwgIj1tIiAoKigodW5zaWduZWQgY2hhciAqKXB0ZXArNCkpCisJOiAiciIgKHB0ZSkgOiAibWVtb3J5Iik7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKQorCS8qIFRoaXJkIGNhc2UgaXMgMzItYml0IGhhc2ggdGFibGUgaW4gVVAgbW9kZSwgd2UgbmVlZCB0byBwcmVzZXJ2ZQorCSAqIHRoZSBfUEFHRV9IQVNIUFRFIGJpdCBzaW5jZSB3ZSBtYXkgbm90IGhhdmUgaW52YWxpZGF0ZWQgdGhlIHByZXZpb3VzCisJICogdHJhbnNsYXRpb24gaW4gdGhlIGhhc2ggeWV0IChkb25lIGluIGEgc3Vic2VxdWVudCBmbHVzaF90bGJfeHh4KCkpCisJICogYW5kIHNlZSB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgdGhhdCB0aGlzIFBURSBuZWVkcyBpbnZhbGlkYXRpbmcKKwkgKi8KKwkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisKKyNlbHNlCisJLyogQW55dGhpbmcgZWxzZSBqdXN0IHN0b3JlcyB0aGUgUFRFIG5vcm1hbGx5LiBUaGF0IGNvdmVycyBhbGwgNjQtYml0CisJICogY2FzZXMsIGFuZCAzMi1iaXQgbm9uLWhhc2ggd2l0aCA2NC1iaXQgUFRFcyBpbiBVUCBtb2RlCisJICovCisJKnB0ZXAgPSBwdGU7CisjZW5kaWYKK30KKworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworZXh0ZXJuIGludCBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpOworCiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE0ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogcHJvdmlkZXMgbWFza3MgYW5kIG9wY29kZSBpbWFnZXMgZm9yIHVzZSBieSBjb2RlIGdlbmVyYXRpb24sIGVtdWxhdGlvbgorICogYW5kIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1pZ2h0IG5vdCBrbm93IGFib3V0CisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFBDX09QQ09ERV9ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgorCisvKiBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgKi8KKyNkZWZpbmUgUFBDX0lOU1RfRENCQQkJCTB4N2MwMDA1ZWMKKyNkZWZpbmUgUFBDX0lOU1RfRENCQV9NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX0RDQkFMCQkJMHg3YzIwMDVlYworI2RlZmluZSBQUENfSU5TVF9EQ0JaTAkJCTB4N2MyMDA3ZWMKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTAkJCTB4N2MwMDAwMWUKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTF9NQVNLCQkweGZjMDAwMDNlCisjZGVmaW5lIFBQQ19JTlNUX0xTV0kJCQkweDdjMDAwNGFhCisjZGVmaW5lIFBQQ19JTlNUX0xTV1gJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKKyNkZWZpbmUgUFBDX0lOU1RfTUNSWFIJCQkweDdjMDAwNDAwCisjZGVmaW5lIFBQQ19JTlNUX01DUlhSX01BU0sJCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgUFBDX0lOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2CisjZGVmaW5lIFBQQ19JTlNUX01GU1BSX1BWUl9NQVNLCQkweGZjMWZmZmZmCisjZGVmaW5lIFBQQ19JTlNUX01TR1NORAkJCTB4N2MwMDAxOWMKKyNkZWZpbmUgUFBDX0lOU1RfTk9QCQkJMHg2MDAwMDAwMAorI2RlZmluZSBQUENfSU5TVF9QT1BDTlRCCQkweDdjMDAwMGY0CisjZGVmaW5lIFBQQ19JTlNUX1BPUENOVEJfTUFTSwkJMHhmYzAwMDdmZQorI2RlZmluZSBQUENfSU5TVF9SRkNJCQkJMHg0YzAwMDA2NgorI2RlZmluZSBQUENfSU5TVF9SRkRJCQkJMHg0YzAwMDA0ZQorI2RlZmluZSBQUENfSU5TVF9SRk1DSQkJCTB4NGMwMDAwNGMKKworI2RlZmluZSBQUENfSU5TVF9TVFJJTkcJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSwkweGZjMDAwNjdlCisKKyNkZWZpbmUgUFBDX0lOU1RfU1RTV0kJCQkweDdjMDAwNWFhCisjZGVmaW5lIFBQQ19JTlNUX1NUU1dYCQkJMHg3YzAwMDUyYQorI2RlZmluZSBQUENfSU5TVF9UTEJJTFgJCQkweDdjMDAwNjI2CisjZGVmaW5lIFBQQ19JTlNUX1dBSVQJCQkweDdjMDAwMDdjCisKKy8qIG1hY3JvcyB0byBpbnNlcnQgZmllbGRzIGludG8gb3Bjb2RlcyAqLworI2RlZmluZSBfX1BQQ19SQShhKQkoKGEgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgX19QUENfUkIoYikJKChiICYgMHgxZikgPDwgMTEpCisjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgodCAmIDB4MykgPDwgMjEpCisjZGVmaW5lIF9fUFBDX1dDKHcpCSgodyAmIDB4MykgPDwgMjEpCisKKy8qIERlYWwgd2l0aCBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIGFyZW4ndCBhd2FyZSBvZiAqLworI2RlZmluZQlQUENfRENCQUwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQkFMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZQlQUENfRENCWkwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQlpMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCisJCQkJCV9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKKyNkZWZpbmUgUFBDX1JGREkJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGREkpCisjZGVmaW5lIFBQQ19SRk1DSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZNQ0kpCisjZGVmaW5lIFBQQ19UTEJJTFgodCwgYSwgYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfVExCSUxYIHwgXAorCQkJCQlfX1BQQ19UX1RMQih0KSB8IF9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19UTEJJTFhfQUxMKGEsIGIpCVBQQ19UTEJJTFgoMCwgYSwgYikKKyNkZWZpbmUgUFBDX1RMQklMWF9QSUQoYSwgYikJUFBDX1RMQklMWCgxLCBhLCBiKQorI2RlZmluZSBQUENfVExCSUxYX1ZBKGEsIGIpCVBQQ19UTEJJTFgoMywgYSwgYikKKyNkZWZpbmUgUFBDX1dBSVQodykJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1dBSVQgfCBcCisJCQkJCV9fUFBDX1dDKHcpKQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKaW5kZXggMWEwZDYyOC4uZjU5YTY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZXJyb3IgX19GSUxFX18gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhc3NlbWJsZXIgZmlsZXMKQEAgLTE2NywxMSArMTY4LDYgQEAKICNkZWZpbmUgSE1UX01FRElVTV9ISUdIIG9yCTUsNSw1CQkjIG1lZGl1bSBoaWdoIHByaW9yaXR5CiAjZGVmaW5lIEhNVF9ISUdICW9yCTMsMywzCiAKLS8qIGhhbmRsZSBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1heSBub3Qga25vdyAqLwotI2RlZmluZSBSRkNJCQkubG9uZyAweDRjMDAwMDY2CS8qIHJmY2kgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgUkZESQkJLmxvbmcgMHg0YzAwMDA0ZQkvKiByZmRpIGluc3RydWN0aW9uICovCi0jZGVmaW5lIFJGTUNJCQkubG9uZyAweDRjMDAwMDRjCS8qIHJmbWNpIGluc3RydWN0aW9uICovCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkMzQ2NjQ5Li45ZWVkMjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMTMsNiArMzEzLDI1IEBACiAjZGVmaW5lIEhBVkVfQVJDSF9QSUNLX01NQVBfTEFZT1VUCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUEM2NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jbGVhbl9zcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzXzMyKQoreworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlpZiAoaXNfMzIpCisJCXNwID0gcmVncy0+Z3ByWzFdICYgMHgwZmZmZmZmZmZVTDsKKwllbHNlCisJCXNwID0gcmVncy0+Z3ByWzFdOworCisJcmV0dXJuIHNwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY2xlYW5fc3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc18zMikKK3sKKwlyZXR1cm4gcmVncy0+Z3ByWzFdOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzLmgKaW5kZXggNjdmMTgxMi4uY2RiNmZkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzMy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczMuaApAQCAtNTAsNiArNTAsOSBAQAogCiBlbnVtIHBzM19wYXJhbV9hdl9tdWx0aV9vdXQgcHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCh2b2lkKTsKIAorZXh0ZXJuIHU2NCBwczNfb3NfYXJlYV9nZXRfcnRjX2RpZmYodm9pZCk7CitleHRlcm4gdm9pZCBwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYodTY0IHJ0Y19kaWZmKTsKKwogLyogZG1hIHJvdXRpbmVzICovCiAKIGVudW0gcHMzX2RtYV9wYWdlX3NpemUgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2F2LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAppbmRleCBjZDI0YWMxLi4wNDI3YjBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaApAQCAtNzMwLDcgKzczMCw3IEBACiBleHRlcm4gaW50IHBzM2F2X2NtZF92aWRlb19nZXRfbW9uaXRvcl9pbmZvKHN0cnVjdCBwczNhdl9wa3RfYXZfZ2V0X21vbml0b3JfaW5mbyAqLAogCQkJCQkgICAgdTMyKTsKIAotZXh0ZXJuIGludCBwczNhdl9zZXRfdmlkZW9fbW9kZSh1MzIpOworZXh0ZXJuIGludCBwczNhdl9zZXRfdmlkZW9fbW9kZShpbnQpOwogZXh0ZXJuIGludCBwczNhdl9zZXRfYXVkaW9fbW9kZSh1MzIsIHUzMiwgdTMyLCB1MzIsIHUzMik7CiBleHRlcm4gaW50IHBzM2F2X2dldF9hdXRvX21vZGUodm9pZCk7CiBleHRlcm4gaW50IHBzM2F2X2dldF9tb2RlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAppbmRleCBlNzIzM2E4Li45MGRiZWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qIGlvY3RsICovCiAjZGVmaW5lIFBTM0ZCX0lPQ1RMX1NFVE1PREUgICAgICAgX0lPVygncicsICAxLCBpbnQpIC8qIHNldCB2aWRlbyBtb2RlICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYzMGZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaApAQCAtMCwwICsxLDY0IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfNDB4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV80MHhfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIEF0IHByZXNlbnQsIGFsbCBQb3dlclBDIDQwMC1jbGFzcyBwcm9jZXNzb3JzIHNoYXJlIGEgc2ltaWxhciBUTEIKKyAqIGFyY2hpdGVjdHVyZS4gVGhlIGluc3RydWN0aW9uIGFuZCBkYXRhIHNpZGVzIHNoYXJlIGEgdW5pZmllZCwKKyAqIDY0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggaXMgbWFpbnRhaW5lZCB0b3RhbGx5IHVuZGVyCisgKiBzb2Z0d2FyZSBjb250cm9sLiBJbiBhZGRpdGlvbiwgdGhlIGluc3RydWN0aW9uIHNpZGUgaGFzIGEKKyAqIGhhcmR3YXJlLW1hbmFnZWQsIDQtZW50cnksIGZ1bGx5LWFzc29jaWF0aXZlIFRMQiB3aGljaCBzZXJ2ZXMgYXMgYQorICogZmlyc3QgbGV2ZWwgdG8gdGhlIHNoYXJlZCBUTEIuIFRoZXNlIHR3byBUTEJzIGFyZSBrbm93biBhcyB0aGUgVVRMQgorICogYW5kIElUTEIsIHJlc3BlY3RpdmVseSAoc2VlICJtbXUuaCIgZm9yIGRlZmluaXRpb25zKS4KKyAqCisgKiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgZ290Y2hhcyBoZXJlLiAgVGhlIDQweCBoYXJkd2FyZSBUTEJMTworICogZmllbGQgbG9va3MgbGlrZSB0aGlzOgorICoKKyAqIDAgIDEgIDIgIDMgIDQgIC4uLiAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMQorICogUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIEVYIFdSIFpTRUwuLi4uLi4uICBXICBJICBNICBHCisgKgorICogV2hlcmUgcG9zc2libGUgd2UgbWFrZSB0aGUgTGludXggUFRFIGJpdHMgbWF0Y2ggdXAgd2l0aCB0aGlzCisgKgorICogLSBiaXRzIDIwIGFuZCAyMSBtdXN0IGJlIGNsZWFyZWQsIGJlY2F1c2Ugd2UgdXNlIDRrIHBhZ2VzICg0MHggY2FuCisgKiAgIHN1cHBvcnQgZG93biB0byAxayBwYWdlcyksIHRoaXMgaXMgZG9uZSBpbiB0aGUgVExCTWlzcyBleGNlcHRpb24KKyAqICAgaGFuZGxlci4KKyAqIC0gV2UgdXNlIG9ubHkgem9uZXMgMCAoZm9yIGtlcm5lbCBwYWdlcykgYW5kIDEgKGZvciB1c2VyIHBhZ2VzKQorICogICBvZiB0aGUgMTYgYXZhaWxhYmxlLiAgQml0IDI0LTI2IG9mIHRoZSBUTEIgYXJlIGNsZWFyZWQgaW4gdGhlIFRMQgorICogICBtaXNzIGhhbmRsZXIuICBCaXQgMjcgaXMgUEFHRV9VU0VSLCB0aHVzIHNlbGVjdGluZyB0aGUgY29ycmVjdAorICogICB6b25lLgorICogLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHR3byBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICogICBlbnRyaWVzIHVzZSB0aGUgdG9wIDMwIGJpdHMuICBCZWNhdXNlIDQweCBkb2Vzbid0IHN1cHBvcnQgU01QCisgKiAgIGFueXdheSwgTSBpcyBpcnJlbGV2YW50IHNvIHdlIGJvcnJvdyBpdCBmb3IgUEFHRV9QUkVTRU5ULiAgQml0IDMwCisgKiAgIGlzIGNsZWFyZWQgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgYmVmb3JlIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLgorICogLSBBbGwgb3RoZXIgYml0cyBvZiB0aGUgUFRFIGFyZSBsb2FkZWQgaW50byBUTEJMTyB3aXRob3V0CisgKiAgIG1vZGlmaWNhdGlvbiwgbGVhdmluZyB1cyBvbmx5IHRoZSBiaXRzIDIwLCAyMSwgMjQsIDI1LCAyNiwgMzAgZm9yCisgKiAgIHNvZnR3YXJlIFBURSBiaXRzLiAgV2UgYWN0dWFsbHkgdXNlIHVzZSBiaXRzIDIxLCAyNCwgMjUsIGFuZAorICogICAzMCByZXNwZWN0aXZlbHkgZm9yIHRoZSBzb2Z0d2FyZSBiaXRzOiBBQ0NFU1NFRCwgRElSVFksIFJXLCBhbmQKKyAqICAgUFJFU0VOVC4KKyAqLworCisjZGVmaW5lCV9QQUdFX0dVQVJERUQJMHgwMDEJLyogRzogcGFnZSBpcyBndWFyZGVkIGZyb20gcHJlZmV0Y2ggKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMQkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDIJLyogc29mdHdhcmU6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCisjZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KKyNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KKyNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgyMDAJLyogaGFyZHdhcmU6IEVYIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJLyogc29mdHdhcmU6IFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworCisjZGVmaW5lIF9QTURfUFJFU0VOVAkweDQwMAkvKiBQTUQgcG9pbnRzIHRvIHBhZ2Ugb2YgUFRFcyAqLworI2RlZmluZSBfUE1EX0JBRAkweDgwMgorI2RlZmluZSBfUE1EX1NJWkUJMHgwZTAJLyogc2l6ZSBmaWVsZCwgIT0gMCBmb3IgbGFyZ2UtcGFnZSBQTUQgZW50cnkgKi8KKyNkZWZpbmUgX1BNRF9TSVpFXzRNCTB4MGMwCisjZGVmaW5lIF9QTURfU0laRV8xNk0JMHgwZTAKKworI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZHZhbCkJKDEwMjQgPDwgKCgocG1kdmFsKSAmIF9QTURfU0laRSkgPj4gNCkpCisKKy8qIFVudGlsIG15IHJld29yayBpcyBmaW5pc2hlZCwgNDB4IHN0aWxsIG5lZWRzIGF0b21pYyBQVEUgdXBkYXRlcyAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFXzQweF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U5OGJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00NHguaApAQCAtMCwwICsxLDEwMiBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFXzQ0eF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfNDR4X0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgUFBDNDQwCisgKgorICogQmVjYXVzZSBvZiB0aGUgMyB3b3JkIFRMQiBlbnRyaWVzIHRvIHN1cHBvcnQgMzYtYml0IGFkZHJlc3NpbmcsCisgKiB0aGUgYXR0cmlidXRlIGFyZSBkaWZmaWN1bHQgdG8gbWFwIGluIHN1Y2ggYSBmYXNoaW9uIHRoYXQgdGhleQorICogYXJlIGVhc2lseSBsb2FkZWQgZHVyaW5nIGV4Y2VwdGlvbiBwcm9jZXNzaW5nLiAgSSBkZWNpZGVkIHRvCisgKiBvcmdhbml6ZSB0aGUgZW50cnkgc28gdGhlIEVSUE4gaXMgdGhlIG9ubHkgcG9ydGlvbiBpbiB0aGUKKyAqIHVwcGVyIHdvcmQgb2YgdGhlIFBURSBhbmQgdGhlIGF0dHJpYnV0ZSBiaXRzIGJlbG93IGFyZSBwYWNrZWQKKyAqIGluIGFzIHNlbnNpYmx5IGFzIHRoZXkgY2FuIGJlIGluIHRoZSBhcmVhIGJlbG93IGEgNEtCIHBhZ2Ugc2l6ZQorICogb3JpZW50ZWQgUlBOLiAgVGhpcyBhdCBsZWFzdCBtYWtlcyBpdCBlYXN5IHRvIGxvYWQgdGhlIFJQTiBhbmQKKyAqIEVSUE4gZmllbGRzIGluIHRoZSBUTEIuIC1NYXR0CisgKgorICogVGhpcyBpc24ndCBlbnRpcmVseSB0cnVlIGFueW1vcmUsIGF0IGxlYXN0IHNvbWUgYml0cyBhcmUgbm93CisgKiBlYXNpZXIgdG8gbW92ZSBpbnRvIHRoZSBUTEIgZnJvbSB0aGUgUFRFLiAtQmVuSC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlc2UgYml0cyBwcmVjbHVkZSBmdXR1cmUgdXNlIG9mIGEgcGFnZSBzaXplCisgKiBsZXNzIHRoYW4gNEtCLgorICoKKyAqCisgKiBQUEMgNDQwIGNvcmUgaGFzIGZvbGxvd2luZyBUTEIgYXR0cmlidXRlIGZpZWxkczsKKyAqCisgKiAgIFRMQjE6CisgKiAgIDAgIDEgIDIgIDMgIDQgIC4uLiAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMQorICogICBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIC0gIC0gIC0gIC0gIC0gIC0gRVJQTi4uLi4uLi4KKyAqCisgKiAgIFRMQjI6CisgKiAgIDAgIDEgIDIgIDMgIDQgIC4uLiAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMQorICogICAtICAtICAtICAtICAtICAgIC0gVTAgVTEgVTIgVTMgVyAgSSAgTSAgRyAgRSAgIC0gVVggVVcgVVIgU1ggU1cgU1IKKyAqCisgKiBOZXdlciA0NDAgY29yZXMgKDQ0MHg2IGFzIHVzZWQgb24gQU1DQyA0NjBFWC80NjBHVCkgaGF2ZSBhZGRpdGlvbmFsCisgKiBUTEIyIHN0b3JhZ2UgYXR0aWJ1dGUgZmllbGRzLiBUaG9zZSBhcmU6CisgKgorICogICBUTEIyOgorICogICAwLi4uMTAgICAgMTEgICAxMiAgIDEzICAgMTQgICAxNSAgIDE2Li4uMzEKKyAqICAgbm8gY2hhbmdlIFdMMSAgSUwxSSBJTDFEIElMMkkgSUwyRCBubyBjaGFuZ2UKKyAqCisgKiBUaGVyZSBhcmUgc29tZSBjb25zdHJhaW5zIGFuZCBvcHRpb25zLCB0byBkZWNpZGUgbWFwcGluZyBzb2Z0d2FyZSBiaXRzCisgKiBpbnRvIFRMQiBlbnRyeS4KKyAqCisgKiAgIC0gUFJFU0VOVCAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICogICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cyBmb3IgVExCMi4KKyAqCisgKiAgIC0gRklMRSAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICogICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cyBmb3IgVExCMi4KKyAqCisgKiAgIC0gQ0FDSEUgQ09IRVJFTlQgYml0IChNKSBoYXMgbm8gZWZmZWN0IG9uIG9yaWdpbmFsIFBQQzQ0MCBjb3JlcywKKyAqICAgICBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBTTVAuIEhvd2V2ZXIsIHNvbWUgbGF0ZXIgNDYwIHZhcmlhbnRzCisgKiAgICAgaGF2ZSAtc29tZS0gZm9ybSBvZiBTTVAgc3VwcG9ydCBhbmQgc28gSSBrZWVwIHRoZSBiaXQgdGhlcmUgZm9yCisgKiAgICAgZnV0dXJlIHVzZQorICoKKyAqIFdpdGggdGhlIFBQQyA0NHggTGludXggaW1wbGVtZW50YXRpb24sIHRoZSAwLTExdGggTFNCcyBvZiB0aGUgUFRFIGFyZSB1c2VkCisgKiBmb3IgbWVtb3J5IHByb3RlY3Rpb24gcmVsYXRlZCBmdW5jdGlvbnMgKHNlZSBQVEUgc3RydWN0dXJlIGluCisgKiBpbmNsdWRlL2FzbS1wcGMvbW11LmgpLiAgVGhlIF9QQUdFX1hYWCBkZWZpbml0aW9ucyBpbiB0aGlzIGZpbGUgbWFwIHRvIHRoZQorICogYWJvdmUgYml0cy4gIE5vdGUgdGhhdCB0aGUgYml0IHZhbHVlcyBhcmUgQ1BVIHNwZWNpZmljLCBub3QgYXJjaGl0ZWN0dXJlCisgKiBzcGVjaWZpYy4KKyAqCisgKiBUaGUga2VybmVsIFBURSBlbnRyeSBob2xkcyBhbiBhcmNoLWRlcGVuZGVudCBzd3BfZW50cnkgc3RydWN0dXJlIHVuZGVyCisgKiBjZXJ0YWluIHNpdHVhdGlvbnMuIEluIG90aGVyIHdvcmRzLCBpbiBzdWNoIHNpdHVhdGlvbnMgc29tZSBwb3J0aW9uIG9mCisgKiB0aGUgUFRFIGJpdHMgYXJlIHVzZWQgYXMgYSBzd3BfZW50cnkuIEluIHRoZSBQUEMgaW1wbGVtZW50YXRpb24sIHRoZQorICogMy0yNHRoIExTQiBhcmUgc2hhcmVkIHdpdGggc3dwX2VudHJ5LCBob3dldmVyIHRoZSAwLTJuZCB0aHJlZSBMU0Igc3RpbGwKKyAqIGhvbGQgcHJvdGVjdGlvbiB2YWx1ZXMuIFRoYXQgbWVhbnMgdGhlIHRocmVlIHByb3RlY3Rpb24gYml0cyBhcmUKKyAqIHJlc2VydmVkIGZvciBib3RoIFBURSBhbmQgU1dBUCBlbnRyeSBhdCB0aGUgbW9zdCBzaWduaWZpY2FudCB0aHJlZQorICogTFNCcy4KKyAqCisgKiBUaGVyZSBhcmUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGF2YWlsYWJsZSBmb3IgU1dBUCBlbnRyeToKKyAqCV9QQUdFX1BSRVNFTlQKKyAqCV9QQUdFX0ZJTEUKKyAqCV9QQUdFX0hBU0hQVEUgKGlmIEhXIGhhcykKKyAqCisgKiBTbyB0aG9zZSB0aHJlZSBiaXRzIGhhdmUgdG8gYmUgaW5zaWRlIG9mIDAtMm5kIExTQiBvZiBQVEUuCisgKgorICovCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAwMDAxCQkvKiBTOiBQVEUgdmFsaWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDAwMDAwMgkJLyogUzogV3JpdGUgcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDAwMDQJCS8qIFM6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMDAwMDQJCS8qIEg6IEV4ZWN1dGUgcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwMDAwMDA4CQkvKiBTOiBQYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDAwMDAxMAkJLyogUzogUGFnZSBkaXJ0eSAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwMDAwMjAJCS8qIFM6IFNwZWNpYWwgcGFnZSAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDAwMDAwNDAJCS8qIFM6IFVzZXIgcGFnZSAqLworI2RlZmluZSBfUEFHRV9FTkRJQU4JMHgwMDAwMDA4MAkJLyogSDogRSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMDAwMTAwCQkvKiBIOiBHIGJpdCAqLworI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMDAwMjAwCQkvKiBIOiBNIGJpdCAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMDAwNDAwCQkvKiBIOiBJIGJpdCAqLworI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDAwMDgwMAkJLyogSDogVyBiaXQgKi8KKworLyogVE9ETzogQWRkIGxhcmdlIHBhZ2UgbG93bWVtIG1hcHBpbmcgc3VwcG9ydCAqLworI2RlZmluZSBfUE1EX1BSRVNFTlQJMAorI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQorI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKKworLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLworI2RlZmluZSBfUFRFX05PTkVfTUFTSwkweGZmZmZmZmZmMDAwMDAwMDBVTEwKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFXzQ0eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzZlMzEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApAQCAtMCwwICsxLDY3IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfOHh4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV84eHhfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZSBQb3dlclBDIE1QQzh4eCB1c2VzIGEgVExCIHdpdGggaGFyZHdhcmUgYXNzaXN0ZWQsIHNvZnR3YXJlIHRhYmxld2Fsay4KKyAqIFdlIGFsc28gdXNlIHRoZSB0d28gbGV2ZWwgdGFibGVzLCBidXQgd2UgY2FuIHB1dCB0aGUgcmVhbCBiaXRzIGluIHRoZW0KKyAqIG5lZWRlZCBmb3IgdGhlIFRMQiBhbmQgdGFibGV3YWxrLiAgVGhlc2UgZGVmaW5pdGlvbnMgcmVxdWlyZSBNeF9DVFIuUFBNID0gMCwKKyAqIE14X0NUUi5QUENTID0gMCwgYW5kIE1EX0NUUi5UV0FNID0gMS4gIFRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgaGFzCisgKiBhZGRpdGlvbmFsIHBhZ2UgcHJvdGVjdGlvbiAod2hlbiBNeF9DVFIuUFBDUyA9IDEpIHRoYXQgYWxsb3dzIFRMQiBoaXQKKyAqIGJhc2VkIHVwb24gdXNlci9zdXBlciBhY2Nlc3MuICBUaGUgVExCIGRvZXMgbm90IGhhdmUgYWNjZXNzZWQgbm9yIHdyaXRlCisgKiBwcm90ZWN0LiAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIFRMQiBnZXQgbG9hZGVkIHdpdGggYW4gZW50cnkgaXQgaXMKKyAqIGFjY2Vzc2VkLCBhbmQgb3ZlcmxvYWQgdGhlIGNoYW5nZWQgYml0IGZvciB3cml0ZSBwcm90ZWN0LiAgV2UgdXNlCisgKiB0d28gYml0cyBpbiB0aGUgc29mdHdhcmUgcHRlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHNldCB0byB6ZXJvIGluCisgKiB0aGUgVExCIGVudHJ5ICgyNCBhbmQgMjUpIGZvciB0aGVzZSBpbmRpY2F0b3JzLiAgQWx0aG91Z2ggdGhlIGxldmVsIDEKKyAqIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGd1YXJkZWQgYW5kIHdyaXRldGhyb3VnaC9jb3B5YmFjayBiaXRzLCB3ZSBjYW4KKyAqIHNldCB0aGVzZSBhdCB0aGUgcGFnZSBsZXZlbCBzaW5jZSB0aGV5IGdldCBjb3BpZWQgZnJvbSB0aGUgTXhfVFdDCisgKiByZWdpc3RlciB3aGVuIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLiAgV2Ugd2lsbCB1c2UgYml0IDI3IGZvciBndWFyZCwgc2luY2UKKyAqIHRoYXQgaXMgd2hlcmUgaXQgZXhpc3RzIGluIHRoZSBNRF9UV0MsIGFuZCBiaXQgMjYgZm9yIHdyaXRldGhyb3VnaC4KKyAqIFRoZXNlIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIHRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgYXQgVExCIGxvYWQgdGltZSwgYW5kCisgKiBjb3BpZWQgdG8gdGhlIE1EX1RXQyBiZWZvcmUgaXQgZ2V0cyBsb2FkZWQuCisgKiBMYXJnZSBwYWdlIHNpemVzIGFkZGVkLiAgV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHNpemVzLCA0SyBhbmQgOE0uCisgKiBUaGlzIGFsc28gYWxsb3dzIGEgVExCIGhhbmRlciBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBjYW4gZGlyZWN0bHkKKyAqIGxvYWQgdGhlIFBNRCBpbnRvIE1EX1RXQy4gIFRoZSA4TSBwYWdlcyBhcmUgb25seSB1c2VkIGZvciBrZXJuZWwKKyAqIG1hcHBpbmcgb2Ygd2VsbCBrbm93biBhcmVhcy4gIFRoZSBQTUQgKFBHRCkgZW50cmllcyBjb250YWluIGNvbnRyb2wKKyAqIGZsYWdzIGluIGFkZGl0aW9uIHRvIHRoZSBhZGRyZXNzLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUKKyAqIHNvZnR3YXJlIG5vIGxvbmdlciBhc3N1bWVzIHRoZXNlIGFyZSBvbmx5IHBvaW50ZXJzLgorICovCisKKy8qIERlZmluaXRpb25zIGZvciA4eHggZW1iZWRkZWQgY2hpcHMuICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAxCS8qIFBhZ2UgaXMgdmFsaWQgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDIJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMDIJLyogSTogY2FjaGUgaW5oaWJpdCAqLworI2RlZmluZSBfUEFHRV9TSEFSRUQJMHgwMDA0CS8qIE5vIEFTSUQgKGNvbnRleHQpIGNvbXBhcmUgKi8KKworLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKKyAqIGludG8gdGhlIFRMQi4KKyAqLworI2RlZmluZSBfUEFHRV9FWEVDCTB4MDAwOAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMTAJLyogc29mdHdhcmU6IGd1YXJkZWQgYWNjZXNzICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAyMAkvKiBzb2Z0d2FyZTogcGFnZSBjaGFuZ2VkICovCisjZGVmaW5lIF9QQUdFX1JXCTB4MDA0MAkvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwODAJLyogc29mdHdhcmU6IHBhZ2UgcmVmZXJlbmNlZCAqLworCisvKiBTZXR0aW5nIGFueSBiaXRzIGluIHRoZSBuaWJibGUgd2l0aCB0aGUgZm9sbG93IHR3byBjb250cm9scyB3aWxsCisgKiByZXF1aXJlIGEgVExCIGV4Y2VwdGlvbiBoYW5kbGVyIGNoYW5nZS4gIEl0IGlzIGFzc3VtZWQgdW51c2VkIGJpdHMKKyAqIGFyZSBhbHdheXMgemVyby4KKyAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MDEwMAkvKiBoL3cgd3JpdGUgZW5hYmxlOiBuZXZlciBzZXQgaW4gTGludXggUFRFICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwODAwCS8qIE9uZSBvZiB0aGUgUFAgYml0cywgdGhlIG90aGVyIGlzIFVTRVImflJXICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4MDAwMQorI2RlZmluZSBfUE1EX0JBRAkweDBmZjAKKyNkZWZpbmUgX1BNRF9QQUdFX01BU0sJMHgwMDBjCisjZGVmaW5lIF9QTURfUEFHRV84TQkweDAwMGMKKworI2RlZmluZSBfUFRFX05PTkVfTUFTSyBfUEFHRV9BQ0NFU1NFRAorCisvKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDh4eCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KKyNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKKworLyogV2UgbmVlZCB0byBhZGQgX1BBR0VfU0hBUkVEIHRvIGtlcm5lbCBwYWdlcyAqLworI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX1NIQVJFRCkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXCShfUEFHRV9ESVJUWSB8IF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSkKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV84eHhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3NDBlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qIEluY2x1ZGVkIGZyb20gYXNtL3BndGFibGUtKi5oIG9ubHkgISAqLworCisvKgorICogU29tZSBiaXRzIGFyZSBvbmx5IHVzZWQgb24gc29tZSBjcHUgZmFtaWxpZXMuLi4gTWFrZSBzdXJlIHRoYXQgYWxsCisgKiB0aGUgdW5kZWZpbmVkIGdldHMgYSBzZW5zaWJsZSBkZWZhdWx0CisgKi8KKyNpZm5kZWYgX1BBR0VfSEFTSFBURQorI2RlZmluZSBfUEFHRV9IQVNIUFRFCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9TSEFSRUQKKyNkZWZpbmUgX1BBR0VfU0hBUkVECTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9IV1dSSVRFCisjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hXRVhFQworI2RlZmluZSBfUEFHRV9IV0VYRUMJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0VYRUMKKyNkZWZpbmUgX1BBR0VfRVhFQwkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfRU5ESUFOCisjZGVmaW5lIF9QQUdFX0VORElBTgkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfQ09IRVJFTlQKKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1dSSVRFVEhSVQorI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1NQRUNJQUwKKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfNEtfUEZOCisjZGVmaW5lIF9QQUdFXzRLX1BGTgkJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1BTSVpFCisjZGVmaW5lIF9QQUdFX1BTSVpFCQkwCisjZW5kaWYKKyNpZm5kZWYgX1BNRF9QUkVTRU5UX01BU0sKKyNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sJX1BNRF9QUkVTRU5UCisjZW5kaWYKKyNpZm5kZWYgX1BNRF9TSVpFCisjZGVmaW5lIF9QTURfU0laRQkwCisjZGVmaW5lIFBNRF9QQUdFX1NJWkUocG1kKQliYWRfY2FsbF90b19QTURfUEFHRV9TSVpFKCkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9LRVJORUxfUk8KKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9LRVJORUxfUlcKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JXCShfUEFHRV9ESVJUWSB8IF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSkKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9IUFRFRkxBR1MKKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIF9QQUdFX0hBU0hQVEUKKyNlbmRpZgorI2lmbmRlZiBfUFRFX05PTkVfTUFTSworI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IUFRFRkxBR1MKKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgd2UgZ2V0IGEgbGluayBlcnJvciBpZiBQTURfUEFHRV9TSVpFIGlzIGV2ZXIgY2FsbGVkIG9uIGEKKyAqIGtlcm5lbCB3aXRob3V0IGxhcmdlIHBhZ2UgUE1EIHN1cHBvcnQKKyAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIGJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUodm9pZCk7CisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIExvY2F0aW9uIG9mIHRoZSBQRk4gaW4gdGhlIFBURS4gTW9zdCAzMi1iaXQgcGxhdGZvcm1zIHVzZSB0aGUgc2FtZQorICogYXMgX1BBR0VfU0hJRlQgaGVyZSAoaWUsIG5hdHVyYWxseSBhbGlnbmVkKS4KKyAqIFBsYXRmb3JtIHdobyBkb24ndCBqdXN0IHByZS1kZWZpbmUgdGhlIHZhbHVlIHNvIHdlIGRvbid0IG92ZXJyaWRlIGl0IGhlcmUKKyAqLworI2lmbmRlZiBQVEVfUlBOX1NISUZUCisjZGVmaW5lIFBURV9SUE5fU0hJRlQJKFBBR0VfU0hJRlQpCisjZW5kaWYKKworLyogVGhlIG1hc2sgY29udmVyZWQgYnkgdGhlIFJQTiBtdXN0IGJlIGEgVUxMIG9uIDMyLWJpdCBwbGF0Zm9ybXMgd2l0aAorICogNjQtYml0IFBURXMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisjZGVmaW5lIFBURV9SUE5fTUFYCSgxVUxMIDw8ICg2NCAtIFBURV9SUE5fU0hJRlQpKQorI2RlZmluZSBQVEVfUlBOX01BU0sJKH4oKDFVTEw8PFBURV9SUE5fU0hJRlQpLTEpKQorI2Vsc2UKKyNkZWZpbmUgUFRFX1JQTl9NQVgJKDFVTCA8PCAoMzIgLSBQVEVfUlBOX1NISUZUKSkKKyNkZWZpbmUgUFRFX1JQTl9NQVNLCSh+KCgxVUw8PFBURV9SUE5fU0hJRlQpLTEpKQorI2VuZGlmCisKKy8qIF9QQUdFX0NIR19NQVNLIG1hc2tzIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjY3Jvc3MKKyAqIHBncHJvdCBjaGFuZ2VzCisgKi8KKyNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9SUE5fTUFTSyB8IF9QQUdFX0hQVEVGTEFHUyB8IF9QQUdFX0RJUlRZIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU1BFQ0lBTCkKKworLyogTWFzayBvZiBiaXRzIHJldHVybmVkIGJ5IHB0ZV9wZ3Byb3QoKSAqLworI2RlZmluZSBQQUdFX1BST1RfQklUUwkoX1BBR0VfR1VBUkRFRCB8IF9QQUdFX0NPSEVSRU5UIHwgX1BBR0VfTk9fQ0FDSEUgfCBcCisJCQkgX1BBR0VfV1JJVEVUSFJVIHwgX1BBR0VfRU5ESUFOIHwgX1BBR0VfNEtfUEZOIHwgXAorCQkJIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKKwkJCSBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUgfCBfUEFHRV9ESVJUWSB8IFwKKwkJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKQorCisvKgorICogV2UgZGVmaW5lIDIgc2V0cyBvZiBiYXNlIHByb3QgYml0cywgb25lIGZvciBiYXNpYyBwYWdlcyAoaWUsCisgKiBjYWNoZWFibGUga2VybmVsIGFuZCB1c2VyIHBhZ2VzKSBhbmQgb25lIGZvciBub24gY2FjaGVhYmxlCisgKiBwYWdlcy4gV2UgYWx3YXlzIHNldCBfUEFHRV9DT0hFUkVOVCB3aGVuIFNNUCBpcyBlbmFibGVkIG9yCisgKiB0aGUgcHJvY2Vzc29yIG1pZ2h0IG5lZWQgaXQgZm9yIERNQSBjb2hlcmVuY3kuCisgKi8KKyNkZWZpbmUgX1BBR0VfQkFTRV9OQwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUFNJWkUpCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKKyNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfQkFTRV9OQyB8IF9QQUdFX0NPSEVSRU5UKQorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfQkFTRV9OQykKKyNlbmRpZgorCisvKiBQZXJtaXNzaW9uIG1hc2tzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIF9fUCBhbmQgX19TIHRhYmxlLAorICoKKyAqIE5vdGU6X19wZ3Byb3QgaXMgZGVmaW5lZCBpbiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisgKgorICogV3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucyBmb3Igbm93ICh3ZSBjb3VsZCBtYWtlIHdyaXRlLW9ubHkKKyAqIHBhZ2VzIG9uIEJvb2tFIGJ1dCB3ZSBkb24ndCBib3RoZXIgZm9yIG5vdykuIEV4ZWN1dGUgcGVybWlzc2lvbiBjb250cm9sIGlzCisgKiBwb3NzaWJsZSBvbiBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUgX1BBR0VfRVhFQworICoKKyAqIE5vdGUgZHVlIHRvIHRoZSB3YXkgdm0gZmxhZ3MgYXJlIGxhaWQgb3V0LCB0aGUgYml0cyBhcmUgWFdSCisgKi8KKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX0JBU0UpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcpCisjZGVmaW5lIFBBR0VfU0hBUkVEX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfQ09QWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKKyNkZWZpbmUgUEFHRV9DT1BZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQorCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQorI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX1gKKyNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9YCisKKyNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX1gKKyNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfWAorI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfWAorCisvKiBQZXJtaXNzaW9uIG1hc2tzIHVzZWQgZm9yIGtlcm5lbCBtYXBwaW5ncyAqLworI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JXKQorI2RlZmluZSBQQUdFX0tFUk5FTF9OQwlfX3BncHJvdChfUEFHRV9CQVNFX05DIHwgX1BBR0VfS0VSTkVMX1JXIHwgXAorCQkJCSBfUEFHRV9OT19DQUNIRSkKKyNkZWZpbmUgUEFHRV9LRVJORUxfTkNHCV9fcGdwcm90KF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9LRVJORUxfUlcgfCBcCisJCQkJIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JXIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk8JX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9STykKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUk8gfCBfUEFHRV9FWEVDKQorCisvKiBQcm90ZWN0aW9uIHVzZWQgZm9yIGtlcm5lbCB0ZXh0LiBXZSB3YW50IHRoZSBkZWJ1Z2dlcnMgdG8gYmUgYWJsZSB0bworICogc2V0IGJyZWFrcG9pbnRzIGFueXdoZXJlLCBzbyBkb24ndCB3cml0ZSBwcm90ZWN0IHRoZSBrZXJuZWwgdGV4dAorICogb24gcGxhdGZvcm1zIHdoZXJlIHN1Y2ggY29udHJvbCBpcyBwb3NzaWJsZS4KKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tHREIpIHx8IGRlZmluZWQoQ09ORklHX1hNT04pIHx8IGRlZmluZWQoQ09ORklHX0JESV9TV0lUQ0gpIHx8XAorCWRlZmluZWQoQ09ORklHX0tQUk9CRVMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1RFWFQJUEFHRV9LRVJORUxfWAorI2Vsc2UKKyNkZWZpbmUgUEFHRV9LRVJORUxfVEVYVAlQQUdFX0tFUk5FTF9ST1gKKyNlbmRpZgorCisvKiBNYWtlIG1vZHVsZXMgY29kZSBoYXBweS4gV2UgZG9uJ3Qgc2V0IFJPIHlldCAqLworI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCVBBR0VfS0VSTkVMX1gKKworLyogQWR2ZXJ0aXNlIHNwZWNpYWwgbWFwcGluZyB0eXBlIGZvciBBR1AgKi8KKyNkZWZpbmUgUEFHRV9BR1AJCShQQUdFX0tFUk5FTF9OQykKKyNkZWZpbmUgSEFWRV9QQUdFX0FHUAorCisvKiBBZHZlcnRpc2Ugc3VwcG9ydCBmb3IgX1BBR0VfU1BFQ0lBTCAqLworI2lmZGVmIF9QQUdFX1NQRUNJQUwKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1mc2wtYm9va2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDgyMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1mc2wtYm9va2UuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfRlNMX0JPT0tFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV9GU0xfQk9PS0VfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyogUFRFIGJpdCBkZWZpbml0aW9ucyBmb3IgRnJlZXNjYWxlIEJvb2tFIFNXIGxvYWRlZCBUTEIgTU1VIGJhc2VkCisgKiBwcm9jZXNzb3JzCisgKgorICAgTU1VIEFzc2lzdCBSZWdpc3RlciAzOgorCisgICAzMiAzMyAzNCAzNSAzNiAgLi4uIDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzCisgICBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAwICAwIFUwIFUxIFUyIFUzIFVYIFNYIFVXIFNXIFVSIFNSCisKKyAgIC0gUFJFU0VOVCAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCisKKyAgIC0gRklMRSAqbXVzdCogYmUgaW4gdGhlIGJvdHRvbSB0aHJlZSBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQorICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDI5IGJpdHMuCisqLworCisvKiBEZWZpbml0aW9ucyBmb3IgRlNMIEJvb2stRSBDb3JlcyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDEJLyogUzogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwMDAyCS8qIFM6IFVzZXIgcGFnZSAobWFwcyB0byBVUikgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkweDAwMDAyCS8qIFM6IHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDAwNAkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uIChTVykgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDAwOAkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDAwMDEwCS8qIEg6IFNYIHBlcm1pc3Npb24gKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDAyMAkvKiBTOiBQYWdlIHJlZmVyZW5jZWQgKi8KKworI2RlZmluZSBfUEFHRV9FTkRJQU4JMHgwMDA0MAkvKiBIOiBFIGJpdCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwODAJLyogSDogRyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJMHgwMDEwMAkvKiBIOiBNIGJpdCAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAwMjAwCS8qIEg6IEkgYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwNDAwCS8qIEg6IFcgYml0ICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDgwMCAvKiBTOiBTcGVjaWFsIHBhZ2UgKi8KKworI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKy8qIEVSUE4gaW4gYSBQVEUgbmV2ZXIgZ2V0cyBjbGVhcmVkLCBpZ25vcmUgaXQgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJMHhmZmZmZmZmZmZmZmYwMDAwVUxMCisvKiBXZSBleHRlbmQgdGhlIHNpemUgb2YgdGhlIFBURSBmbGFncyBhcmVhIHdoZW4gdXNpbmcgNjQtYml0IFBURXMgKi8KKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoUEFHRV9TSElGVCArIDgpCisjZW5kaWYKKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMAorI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQorI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV9GU0xfQk9PS0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlNTcxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDMyLmgKQEAgLTAsMCArMSw0OCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFX0hBU0gzMl9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfSEFTSDMyX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBUaGUgImNsYXNzaWMiIDMyLWJpdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG93ZXJQQyBNTVUgdXNlcyBhIGhhc2gKKyAqIHRhYmxlIGNvbnRhaW5pbmcgUFRFcywgdG9nZXRoZXIgd2l0aCBhIHNldCBvZiAxNiBzZWdtZW50IHJlZ2lzdGVycywKKyAqIHRvIGRlZmluZSB0aGUgdmlydHVhbCB0byBwaHlzaWNhbCBhZGRyZXNzIG1hcHBpbmcuCisgKgorICogV2UgdXNlIHRoZSBoYXNoIHRhYmxlIGFzIGFuIGV4dGVuZGVkIFRMQiwgaS5lLiBhIGNhY2hlIG9mIGN1cnJlbnRseQorICogYWN0aXZlIG1hcHBpbmdzLiAgV2UgbWFpbnRhaW4gYSB0d28tbGV2ZWwgcGFnZSB0YWJsZSB0cmVlLCBtdWNoCisgKiBsaWtlIHRoYXQgdXNlZCBieSB0aGUgaTM4NiwgZm9yIHRoZSBzYWtlIG9mIHRoZSBMaW51eCBtZW1vcnkKKyAqIG1hbmFnZW1lbnQgY29kZS4gIExvdy1sZXZlbCBhc3NlbWJsZXIgY29kZSBpbiBoYXNoX2xvd18zMi5TCisgKiAocHJvY2VkdXJlIGhhc2hfcGFnZSkgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgcHRlcyBmcm9tIHRoZQorICogdHJlZSBhbmQgcHV0dGluZyB0aGVtIGludG8gdGhlIGhhc2ggdGFibGUgd2hlbiBuZWNlc3NhcnksIGFuZAorICogdXBkYXRpbmcgdGhlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBiaXRzIGluIHRoZSBwYWdlIHRhYmxlIHRyZWUuCisgKi8KKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCS8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDAyCS8qIGhhc2hfcGFnZSBoYXMgbWFkZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA0CS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAkvKiB1c2VybW9kZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDA4CS8qIEc6IHByb2hpYml0IHNwZWN1bGF0aXZlIGFjY2VzcyAqLworI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAxMAkvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAyMAkvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDA0MAkvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCisjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwCS8qIEM6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCisKKyNpZmRlZiBDT05GSUdfUFRFXzY0QklUCisvKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KKyNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCisjZWxzZQorI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjZW5kaWYKKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMAorI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSyAoUEFHRV9NQVNLKQorI2RlZmluZSBfUE1EX0JBRAkoflBBR0VfTUFTSykKKworLyogSGFzaCB0YWJsZSBiYXNlZCBwbGF0Zm9ybXMgbmVlZCBhdG9taWMgdXBkYXRlcyBvZiB0aGUgbGludXggUFRFICovCisjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfSEFTSDMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC00ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzRlODA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNGsuaApAQCAtMCwwICsxLDE3IEBACisvKiBUbyBiZSBpbmNsdWRlIGJ5IHBndGFibGUtaGFzaDY0Lmggb25seSAqLworCisvKiBQVEUgYml0cyAqLworI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDQwMCAvKiBzb2Z0d2FyZTogcHRlIGhhcyBhbiBhc3NvY2lhdGVkIEhQVEUgKi8KKyNkZWZpbmUgX1BBR0VfU0VDT05EQVJZIDB4ODAwMCAvKiBzb2Z0d2FyZTogSFBURSBpcyBpbiBzZWNvbmRhcnkgZ3JvdXAgKi8KKyNkZWZpbmUgX1BBR0VfR1JPVVBfSVggIDB4NzAwMCAvKiBzb2Z0d2FyZTogSFBURSBpbmRleCB3aXRoaW4gZ3JvdXAgKi8KKyNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIF9QQUdFX1NFQ09OREFSWQorI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgX1BBR0VfR1JPVVBfSVgKKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDEwMDAwIC8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KKworLyogUFRFIGZsYWdzIHRvIGNvbnNlcnZlIGZvciBIUFRFIGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIF9QQUdFX0hQVEVGTEFHUyAoX1BBR0VfQlVTWSB8IF9QQUdFX0hBU0hQVEUgfCBcCisJCQkgX1BBR0VfU0VDT05EQVJZIHwgX1BBR0VfR1JPVVBfSVgpCisKKy8qIHNoaWZ0IHRvIHB1dCBwYWdlIG51bWJlciBpbnRvIHB0ZSAqLworI2RlZmluZSBQVEVfUlBOX1NISUZUCSgxNykKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS02NGsuaApyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNjRrLmgKaW5kZXggNzM4OTAwMy4uZTA1ZDI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNjRrLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNjRrLmgKQEAgLTEsMjIgKzEsODAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0gKKy8qIFRvIGJlIGluY2x1ZGUgYnkgcGd0YWJsZS1oYXNoNjQuaCBvbmx5ICovCiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CisvKiBBZGRpdGlvbmFsIFBURSBiaXRzIChkb24ndCBjaGFuZ2Ugd2l0aG91dCBjaGVja2luZyBhc20gaW4gaGFzaF9sb3cuUykgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwNDAwIC8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfSFBURV9TVUIJMHgwZmZmZjAwMCAvKiBjb21ibyBvbmx5OiBzdWIgcGFnZXMgSFBURSBiaXRzICovCisjZGVmaW5lIF9QQUdFX0hQVEVfU1VCMAkweDA4MDAwMDAwIC8qIGNvbWJvIG9ubHk6IGZpcnN0IHN1YiBwYWdlICovCisjZGVmaW5lIF9QQUdFX0NPTUJPCTB4MTAwMDAwMDAgLyogdGhpcyBpcyBhIGNvbWJvIDRrIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfNEtfUEZOCTB4MjAwMDAwMDAgLyogUEZOIGlzIGZvciBhIHNpbmdsZSA0ayBwYWdlICovCiAKKy8qIEZvciA2NEsgcGFnZSwgd2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIF9QQUdFX0hBU0hQVEUgYml0LiBJbnN0ZWFkLAorICogd2Ugc2V0IHRoYXQgdG8gYmUgdGhlIHdob2xlIHN1Yi1iaXRzIG1hc2suIFRoZSBDIGNvZGUgd2lsbCBvbmx5CisgKiB0ZXN0IHRoaXMsIHNvIGEgbXVsdGktYml0IG1hc2sgd2lsbCB3b3JrLiBGb3IgY29tYm8gcGFnZXMsIHRoaXMKKyAqIGlzIGVxdWl2YWxlbnQgYXMgZWZmZWN0aXZlbHksIHRoZSBvbGQgX1BBR0VfSEFTSFBURSB3YXMgYW4gT1Igb2YKKyAqIGFsbCB0aGUgc3ViIGJpdHMuIEZvciByZWFsIDY0ayBwYWdlcywgd2Ugbm93IGhhdmUgdGhlIGFzc2VtYmx5IHNldAorICogX1BBR0VfSFBURV9TVUIwIGluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIEhJRFggYml0cyB3aGljaCBvdmVybGFwCisgKiB0aGF0IG1hc2suIFRoaXMgaXMgZmluZSBhcyBsb25nIGFzIHRoZSBISURYIGJpdHMgYXJlIG5ldmVyIHNldCBvbgorICogYSBQVEUgdGhhdCBpc24ndCBoYXNoZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHRvZGF5LgorICoKKyAqIEEgbGl0dGxlIG5pdCBpcyBmb3IgdGhlIGh1Z2UgcGFnZSBDIGNvZGUsIHdoaWNoIGRvZXMgdGhlIGhhc2hpbmcKKyAqIGluIEMsIHdlIG5lZWQgdG8gcHJvdmlkZSB3aGljaCBiaXQgdG8gdXNlLgorICovCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJX1BBR0VfSFBURV9TVUIKIAotI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgMTIKLSNkZWZpbmUgUE1EX0lOREVYX1NJWkUgIDEyCi0jZGVmaW5lIFBVRF9JTkRFWF9TSVpFCTAKLSNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDQKKy8qIE5vdGUgdGhlIGZ1bGwgcGFnZSBiaXRzIG11c3QgYmUgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgZm9yIG5vcm1hbAorICogNGsgcGFnZXMgYXMgdGhlIHNhbWUgYXNzc2VtYmx5IHdpbGwgYmUgdXNlZCB0byBpbnNlcnQgNjRLIHBhZ2VzCisgKiB3ZXRoZXIgdGhlIGtlcm5lbCBoYXMgQ09ORklHX1BQQ182NEtfUEFHRVMgb3Igbm90CisgKi8KKyNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIDB4MDAwMDgwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KKyNkZWZpbmUgX1BBR0VfRl9HSVggICAgIDB4MDAwMDcwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KKworLyogUFRFIGZsYWdzIHRvIGNvbnNlcnZlIGZvciBIUFRFIGlkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIF9QQUdFX0hQVEVGTEFHUyAoX1BBR0VfQlVTWSB8IF9QQUdFX0hBU0hQVEUgfCBfUEFHRV9DT01CTykKKworLyogU2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlLgorICoKKyAqIFRoYXQgZ2l2ZXMgdXMgYSBtYXggUlBOIG9mIDM0IGJpdHMsIHdoaWNoIG1lYW5zIGEgbWF4IG9mIDUwIGJpdHMKKyAqIG9mIGFkZHJlc3NhYmxlIHBoeXNpY2FsIHNwYWNlLCBvciA0NiBiaXRzIGZvciB0aGUgc3BlY2lhbCA0ayBQRk5zLgorICovCisjZGVmaW5lIFBURV9SUE5fU0hJRlQJKDMwKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHJlYWxfcHRlX3QpIDw8IFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfVEFCTEVfU0laRQkoc2l6ZW9mKHBtZF90KSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJKHNpemVvZihwZ2RfdCkgPDwgUEdEX0lOREVYX1NJWkUpCiAKLSNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BHRAkoMSA8PCBQR0RfSU5ERVhfU0laRSkKKy8qCisgKiBXaXRoIDY0SyBwYWdlcyBvbiBoYXNoIHRhYmxlLCB3ZSBoYXZlIGEgc3BlY2lhbCBQVEUgZm9ybWF0IHRoYXQKKyAqIHVzZXMgYSBzZWNvbmQgImhhbGYiIG9mIHRoZSBwYWdlIHRhYmxlIHRvIGVuY29kZSBzdWItcGFnZSBpbmZvcm1hdGlvbgorICogaW4gb3JkZXIgdG8gZGVhbCB3aXRoIDY0SyBtYWRlIG9mIDRLIEhXIHBhZ2VzLiBUaHVzIHdlIG92ZXJyaWRlIHRoZQorICogZ2VuZXJpYyBhY2Nlc3NvcnMgYW5kIGl0ZXJhdG9ycyBoZXJlCisgKi8KKyNkZWZpbmUgX19yZWFsX3B0ZShlLHApIAkoKHJlYWxfcHRlX3QpIHsgXAorCShlKSwgcHRlX3ZhbCgqKChwKSArIFBUUlNfUEVSX1BURSkpIH0pCisjZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCSgocHRlX3ZhbCgocikucHRlKSAmIF9QQUdFX0NPTUJPKSA/IFwKKyAgICAgICAgKCgocikuaGlkeCA+PiAoKGluZGV4KTw8MikpICYgMHhmKSA6ICgocHRlX3ZhbCgocikucHRlKSA+PiAxMikgJiAweGYpKQorI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCSgocikucHRlKQorI2RlZmluZSBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSBcCisJKHB0ZV92YWwocnB0ZS5wdGUpICYgKF9QQUdFX0hQVEVfU1VCMCA+PiAoaW5kZXgpKSkKKworLyogVHJpY2s6IHdlIHNldCBfX2VuZCB0byB2YSArIDY0aywgd2hpY2ggaGFwcGVucyB3b3JrcyBmb3IKKyAqIGEgMTZNIHBhZ2UgYXMgd2VsbCBhcyB3ZSB3YW50IG9ubHkgb25lIGl0ZXJhdGlvbgorICovCisjZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhycHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkJICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2VuZCA9IHZhICsgUEFHRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fc3BsaXQgPSAocHNpemUgPT0gTU1VX1BBR0VfNEsgfHwgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgcHNpemUgPT0gTU1VX1BBR0VfNjRLX0FQKTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWZvciAoaW5kZXggPSAwOyB2YSA8IF9fZW5kOyBpbmRleCsrLCB2YSArPSAoMUwgPDwgc2hpZnQpKSB7IFwKKwkJICAgICAgICBpZiAoIV9fc3BsaXQgfHwgX19ycHRlX3N1Yl92YWxpZChycHRlLCBpbmRleCkpIGRvIHsgXAorCisjZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9lbmQoKSB9IHdoaWxlKDApOyB9IH0gd2hpbGUoMCkKKworI2RlZmluZSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSkJXAorCSgoKHB0ZSkgJiBfUEFHRV9DT01CTyk/IE1NVV9QQUdFXzRLOiBNTVVfUEFHRV82NEspCisKKyNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQkJCQlcCisJcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsCQlcCisJCQlfX3BncHJvdChwZ3Byb3RfdmFsKChwcm90KSkgfCBfUEFHRV80S19QRk4pKQorCiAKICNpZmRlZiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVAogLyoKQEAgLTU1LDEwMSArMTEzLDMgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCAqLwogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KLSNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUEFHRV9TSElGVAotCi0vKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCi0jZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQotCi0vKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKLQotLyogQWRkaXRpb25hbCBQVEUgYml0cyAoZG9uJ3QgY2hhbmdlIHdpdGhvdXQgY2hlY2tpbmcgYXNtIGluIGhhc2hfbG93LlMpICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDQwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0hQVEVfU1VCCTB4MGZmZmYwMDAgLyogY29tYm8gb25seTogc3ViIHBhZ2VzIEhQVEUgYml0cyAqLwotI2RlZmluZSBfUEFHRV9IUFRFX1NVQjAJMHgwODAwMDAwMCAvKiBjb21ibyBvbmx5OiBmaXJzdCBzdWIgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9DT01CTwkweDEwMDAwMDAwIC8qIHRoaXMgaXMgYSBjb21ibyA0ayBwYWdlICovCi0jZGVmaW5lIF9QQUdFXzRLX1BGTgkweDIwMDAwMDAwIC8qIFBGTiBpcyBmb3IgYSBzaW5nbGUgNGsgcGFnZSAqLwotCi0vKiBGb3IgNjRLIHBhZ2UsIHdlIGRvbid0IGhhdmUgYSBzZXBhcmF0ZSBfUEFHRV9IQVNIUFRFIGJpdC4gSW5zdGVhZCwKLSAqIHdlIHNldCB0aGF0IHRvIGJlIHRoZSB3aG9sZSBzdWItYml0cyBtYXNrLiBUaGUgQyBjb2RlIHdpbGwgb25seQotICogdGVzdCB0aGlzLCBzbyBhIG11bHRpLWJpdCBtYXNrIHdpbGwgd29yay4gRm9yIGNvbWJvIHBhZ2VzLCB0aGlzCi0gKiBpcyBlcXVpdmFsZW50IGFzIGVmZmVjdGl2ZWx5LCB0aGUgb2xkIF9QQUdFX0hBU0hQVEUgd2FzIGFuIE9SIG9mCi0gKiBhbGwgdGhlIHN1YiBiaXRzLiBGb3IgcmVhbCA2NGsgcGFnZXMsIHdlIG5vdyBoYXZlIHRoZSBhc3NlbWJseSBzZXQKLSAqIF9QQUdFX0hQVEVfU1VCMCBpbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBISURYIGJpdHMgd2hpY2ggb3ZlcmxhcAotICogdGhhdCBtYXNrLiBUaGlzIGlzIGZpbmUgYXMgbG9uZyBhcyB0aGUgSElEWCBiaXRzIGFyZSBuZXZlciBzZXQgb24KLSAqIGEgUFRFIHRoYXQgaXNuJ3QgaGFzaGVkLCB3aGljaCBpcyB0aGUgY2FzZSB0b2RheS4KLSAqCi0gKiBBIGxpdHRsZSBuaXQgaXMgZm9yIHRoZSBodWdlIHBhZ2UgQyBjb2RlLCB3aGljaCBkb2VzIHRoZSBoYXNoaW5nCi0gKiBpbiBDLCB3ZSBuZWVkIHRvIHByb3ZpZGUgd2hpY2ggYml0IHRvIHVzZS4KLSAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCV9QQUdFX0hQVEVfU1VCCi0KLS8qIE5vdGUgdGhlIGZ1bGwgcGFnZSBiaXRzIG11c3QgYmUgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgZm9yIG5vcm1hbAotICogNGsgcGFnZXMgYXMgdGhlIHNhbWUgYXNzc2VtYmx5IHdpbGwgYmUgdXNlZCB0byBpbnNlcnQgNjRLIHBhZ2VzCi0gKiB3ZXRoZXIgdGhlIGtlcm5lbCBoYXMgQ09ORklHX1BQQ182NEtfUEFHRVMgb3Igbm90Ci0gKi8KLSNkZWZpbmUgX1BBR0VfRl9TRUNPTkQgIDB4MDAwMDgwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfRl9HSVggICAgIDB4MDAwMDcwMDAgLyogZnVsbCBwYWdlOiBoaWR4IGJpdHMgKi8KLQotLyogUFRFIGZsYWdzIHRvIGNvbnNlcnZlIGZvciBIUFRFIGlkZW50aWZpY2F0aW9uICovCi0jZGVmaW5lIF9QQUdFX0hQVEVGTEFHUyAoX1BBR0VfQlVTWSB8IF9QQUdFX0hBU0hQVEUgfCBfUEFHRV9DT01CTykKLQotLyogU2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlLgotICoKLSAqIFRoYXQgZ2l2ZXMgdXMgYSBtYXggUlBOIG9mIDM0IGJpdHMsIHdoaWNoIG1lYW5zIGEgbWF4IG9mIDUwIGJpdHMKLSAqIG9mIGFkZHJlc3NhYmxlIHBoeXNpY2FsIHNwYWNlLCBvciA0NiBiaXRzIGZvciB0aGUgc3BlY2lhbCA0ayBQRk5zLgotICovCi0jZGVmaW5lIFBURV9SUE5fU0hJRlQJKDMwKQotI2RlZmluZSBQVEVfUlBOX01BWAkoMVVMIDw8ICg2NCAtIFBURV9SUE5fU0hJRlQpKQotI2RlZmluZSBQVEVfUlBOX01BU0sJKH4oKDFVTDw8UFRFX1JQTl9TSElGVCktMSkpCi0KLS8qIF9QQUdFX0NIR19NQVNLIG1hc2tzIG9mIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkIGFjY3Jvc3MKLSAqIHBncHJvdCBjaGFuZ2VzCi0gKi8KLSNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBURV9SUE5fTUFTSyB8IF9QQUdFX0hQVEVGTEFHUyB8IF9QQUdFX0RJUlRZIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfU1BFQ0lBTCkKLQotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUE1EIHRvIGdldCB0byB0aGUgUFRFIHBhZ2UgKi8KLSNkZWZpbmUgUE1EX01BU0tFRF9CSVRTCQkweDFmZgotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUEdEL1BVRCB0byBnZXQgdG8gdGhlIFBNRCBwYWdlICovCi0jZGVmaW5lIFBVRF9NQVNLRURfQklUUwkJMHgxZmYKLQotLyogTWFuaXB1bGF0ZSAicnB0ZSIgdmFsdWVzICovCi0jZGVmaW5lIF9fcmVhbF9wdGUoZSxwKSAJKChyZWFsX3B0ZV90KSB7IFwKLQkoZSksIHB0ZV92YWwoKigocCkgKyBQVFJTX1BFUl9QVEUpKSB9KQotI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkoKHB0ZV92YWwoKHIpLnB0ZSkgJiBfUEFHRV9DT01CTykgPyBcCi0gICAgICAgICgoKHIpLmhpZHggPj4gKChpbmRleCk8PDIpKSAmIDB4ZikgOiAoKHB0ZV92YWwoKHIpLnB0ZSkgPj4gMTIpICYgMHhmKSkKLSNkZWZpbmUgX19ycHRlX3RvX3B0ZShyKQkoKHIpLnB0ZSkKLSNkZWZpbmUgX19ycHRlX3N1Yl92YWxpZChycHRlLCBpbmRleCkgXAotCShwdGVfdmFsKHJwdGUucHRlKSAmIChfUEFHRV9IUFRFX1NVQjAgPj4gKGluZGV4KSkpCi0KLQotLyogVHJpY2s6IHdlIHNldCBfX2VuZCB0byB2YSArIDY0aywgd2hpY2ggaGFwcGVucyB3b3JrcyBmb3IKLSAqIGEgMTZNIHBhZ2UgYXMgd2VsbCBhcyB3ZSB3YW50IG9ubHkgb25lIGl0ZXJhdGlvbgotICovCi0jZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9zdWJwYWdlcyhycHRlLCBwc2l6ZSwgdmEsIGluZGV4LCBzaGlmdCkJICAgIFwKLSAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2VuZCA9IHZhICsgUEFHRV9TSVpFOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fc3BsaXQgPSAocHNpemUgPT0gTU1VX1BBR0VfNEsgfHwgICAgICAgICAgICAgICAgIFwKLQkJCQkgICAgcHNpemUgPT0gTU1VX1BBR0VfNjRLX0FQKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWZvciAoaW5kZXggPSAwOyB2YSA8IF9fZW5kOyBpbmRleCsrLCB2YSArPSAoMUwgPDwgc2hpZnQpKSB7IFwKLQkJICAgICAgICBpZiAoIV9fc3BsaXQgfHwgX19ycHRlX3N1Yl92YWxpZChycHRlLCBpbmRleCkpIGRvIHsgXAotCi0jZGVmaW5lIHB0ZV9pdGVyYXRlX2hhc2hlZF9lbmQoKSB9IHdoaWxlKDApOyB9IH0gd2hpbGUoMCkKLQotI2RlZmluZSBwdGVfcGFnZXNpemVfaW5kZXgobW0sIGFkZHIsIHB0ZSkJXAotCSgoKHB0ZSkgJiBfUEFHRV9DT01CTyk/IE1NVV9QQUdFXzRLOiBNTVVfUEFHRV82NEspCi0KLSNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQkJCQlcCi0JcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsCQlcCi0JCQlfX3BncHJvdChwZ3Byb3RfdmFsKChwcm90KSkgfCBfUEFHRV80S19QRk4pKQotCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfNjRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTllZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC5oCkBAIC0wLDAgKzEsNTQgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV9IQVNINjRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFX0hBU0g2NF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQ29tbW9uIGJpdHMgYmV0d2VlbiA0SyBhbmQgNjRLIHBhZ2VzIGluIGEgbGludXgtc3R5bGUgUFRFLgorICogVGhlc2UgbWF0Y2ggdGhlIGJpdHMgaW4gdGhlIChoYXJkd2FyZS1kZWZpbmVkKSBQb3dlclBDIFBURSBhcyBjbG9zZWx5CisgKiBhcyBwb3NzaWJsZS4gQWRkaXRpb25hbCBiaXRzIG1heSBiZSBkZWZpbmVkIGluIHBndGFibGUtaGFzaDY0LSouaAorICoKKyAqIE5vdGU6IFdlIG9ubHkgc3VwcG9ydCB1c2VyIHJlYWQvd3JpdGUgcGVybWlzc2lvbnMuIFN1cGVydmlzb3IgYWx3YXlzCisgKiBoYXZlIGZ1bGwgcmVhZC93cml0ZSB0byBwYWdlcyBhYm92ZSBQQUdFX09GRlNFVCAocGFnZXMgYmVsb3cgdGhhdAorICogYWx3YXlzIHVzZSB0aGUgdXNlciBhY2Nlc3MgcGVybWlzc2lvbnMpLgorICoKKyAqIFdlIGNvdWxkIGNyZWF0ZSBzZXBhcmF0ZSBrZXJuZWwgcmVhZC1vbmx5IGlmIHdlIHVzZWQgdGhlIDMgUFAgYml0cworICogY29tYmluYXRpb25zIHRoYXQgbmV3ZXIgcHJvY2Vzc29ycyBwcm92aWRlIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QuCisgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkJMHgwMDAxIC8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9VU0VSCQkweDAwMDIgLyogbWF0Y2hlcyBvbmUgb2YgdGhlIFBQIGJpdHMgKi8KKyNkZWZpbmUgX1BBR0VfRklMRQkJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCisjZGVmaW5lIF9QQUdFX0VYRUMJCTB4MDAwNCAvKiBObyBleGVjdXRlIG9uIFBPV0VSNCBhbmQgbmV3ZXIgKHdlIGludmVydCkgKi8KKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkJMHgwMDA4CisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCQkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJCTB4MDAyMCAvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkJMHgwMDQwIC8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJCTB4MDEwMCAvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJCTB4MDIwMCAvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9CVVNZCQkweDA4MDAgLyogc29mdHdhcmU6IFBURSAmIGhhc2ggYXJlIGJ1c3kgKi8KKworLyogTm8gc2VwYXJhdGUga2VybmVsIHJlYWQtb25seSAqLworI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKSAvKiB1c2VyIGFjY2VzcyBibG9ja2VkIGJ5IGtleSAqLworI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JCSBfUEFHRV9LRVJORUxfUlcKKworLyogU3Ryb25nIEFjY2VzcyBPcmRlcmluZyAqLworI2RlZmluZSBfUEFHRV9TQU8JCShfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0NPSEVSRU5UKQorCisvKiBObyBwYWdlIHNpemUgZW5jb2RpbmcgaW4gdGhlIGxpbnV4IFBURSAqLworI2RlZmluZSBfUEFHRV9QU0laRQkJMAorCisvKiBQVEVJRFggbmliYmxlICovCisjZGVmaW5lIF9QVEVJRFhfU0VDT05EQVJZCTB4OAorI2RlZmluZSBfUFRFSURYX0dST1VQX0lYCTB4NworCisvKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KKyNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKKworI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoNjQtNjRrLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wdGUtaGFzaDY0LTRrLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV9IQVNINjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCmluZGV4IGY0ODRhMzQuLmM5ZmYxZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKQEAgLTE1NSw2ICsxNTUsOCBAQAogI2RlZmluZSAgIENUUkxfUlVOTEFUQ0gJMHgxCiAjZGVmaW5lIFNQUk5fREFCUgkweDNGNQkvKiBEYXRhIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciAqLwogI2RlZmluZSAgIERBQlJfVFJBTlNMQVRJT04JKDFVTCA8PCAyKQorI2RlZmluZSAgIERBQlJfREFUQV9XUklURQkoMVVMIDw8IDEpCisjZGVmaW5lICAgREFCUl9EQVRBX1JFQUQJKDFVTCA8PCAwKQogI2RlZmluZSBTUFJOX0RBQlIyCTB4MTNECS8qIGUzMDAgKi8KICNkZWZpbmUgU1BSTl9EQUJSWAkweDNGNwkvKiBEYXRhIEFkZHJlc3MgQnJlYWtwb2ludCBSZWdpc3RlciBFeHRlbnNpb24gKi8KICNkZWZpbmUgICBEQUJSWF9VU0VSCSgxVUwgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAppbmRleCA2NzQ1Mzc2Li5hNTZmNGQ2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaApAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBfX0FTTV9QT1dFUlBDX1JFR19CT09LRV9IX18KIAogLyogTWFjaGluZSBTdGF0ZSBSZWdpc3RlciAoTVNSKSBGaWVsZHMgKi8KKyNkZWZpbmUgTVNSX0dTCQkoMTw8MjgpIC8qIEd1ZXN0IHN0YXRlICovCiAjZGVmaW5lIE1TUl9VQ0xFCSgxPDwyNikJLyogVXNlci1tb2RlIGNhY2hlIGxvY2sgZW5hYmxlICovCiAjZGVmaW5lIE1TUl9TUEUJCSgxPDwyNSkJLyogRW5hYmxlIFNQRSAqLwogI2RlZmluZSBNU1JfRFdFCQkoMTw8MTApCS8qIERlYnVnIFdhaXQgRW5hYmxlICovCkBAIC0xMTAsNiArMTExLDcgQEAKICNkZWZpbmUgU1BSTl9MMUNTUjAJMHgzRjIJLyogTDEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgU1BSTl9MMUNTUjEJMHgzRjMJLyogTDEgQ2FjaGUgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDEgKi8KICNkZWZpbmUgU1BSTl9NTVVDU1IwCTB4M0Y0CS8qIE1NVSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBTUFJOX01NVUNGRwkweDNGNwkvKiBNTVUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1BJVAkweDNEQgkvKiBQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXIgKi8KICNkZWZpbmUgU1BSTl9CVUNTUgkweDNGNQkvKiBCcmFuY2ggVW5pdCBDb250cm9sIGFuZCBTdGF0dXMgKi8KICNkZWZpbmUgU1BSTl9MMkNTUjAJMHgzRjkJLyogTDIgRGF0YSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAzNjg2NDM2Li5jM2IxOTMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjg3LDYgKzI4Nyw5IEBACiAJcnctPmxvY2sgPSAwOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJX19zcGluX3lpZWxkKGxvY2spCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQlfX3J3X3lpZWxkKGxvY2spCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N1c3BlbmQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKaW5kZXggY2JmMmM5NC4uYzZlZmMzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N1c3BlbmQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3VzcGVuZC5oCkBAIC0zLDcgKzMsNCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfc3VzcGVuZCh2b2lkKSB7IHJldHVybiAwOyB9CiAKLXZvaWQgc2F2ZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCk7Ci12b2lkIHJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpOwotCiAjZW5kaWYgLyogX19BU01fUE9XRVJQQ19TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAyYTRiZTE5Li5mNjEyNzk4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC01MzEsNyArNTMxLDcgQEAKICNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikgX19jbXB4Y2hnNjRfbG9jYWxfZ2VuZXJpYygocHRyKSwgKG8pLCAobikpCiAjZW5kaWYKIAotI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9hbGlnbl9zdGFjayh1bnNpZ25lZCBsb25nIHNwKTsKIAogLyogVXNlZCBpbiB2ZXJ5IGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbi4gKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHJlbG9jX29mZnNldCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggOTY2NWEyNi4uOWFiYTVhMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyLDggKzEyLDEwIEBACiAKIC8qIFdlIGhhdmUgOGsgc3RhY2tzIG9uIHBwYzMyIGFuZCAxNmsgb24gcHBjNjQgKi8KIAotI2lmZGVmIENPTkZJR19QUEM2NAorI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KQogI2RlZmluZSBUSFJFQURfU0hJRlQJCTE0CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfMjU2S19QQUdFUykKKyNkZWZpbmUgVEhSRUFEX1NISUZUCQkxNQogI2Vsc2UKICNkZWZpbmUgVEhSRUFEX1NISUZUCQkxMwogI2VuZGlmCkBAIC0xNTQsNiArMTU2LDEzIEBACiAJdGktPmxvY2FsX2ZsYWdzIHw9IF9UTEZfUkVTVE9SRV9TSUdNQVNLOwogCXNldF9iaXQoVElGX1NJR1BFTkRJTkcsICZ0aS0+ZmxhZ3MpOwogfQorCisjaWZkZWYgQ09ORklHX1BQQzY0CisjZGVmaW5lIGlzXzMyYml0X3Rhc2soKQkodGVzdF90aHJlYWRfZmxhZyhUSUZfMzJCSVQpKQorI2Vsc2UKKyNkZWZpbmUgaXNfMzJiaXRfdGFzaygpCSgxKQorI2VuZGlmCisKICNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDM3NTI1ODUuLjA1NGExNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0yNCwxMSArMjQsNiBAQAogCiAjZGVmaW5lIGNwdW1hc2tfb2Zfbm9kZShub2RlKSAoJm51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pCiAKLXN0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7Ci19Ci0KIGludCBvZl9ub2RlX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSk7CiAKIHN0cnVjdCBwY2lfYnVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKaW5kZXggNjQxOGNlZS4uY2QyMWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykoY2hhciBjKTsKK2V4dGVybiB2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBleHRlcm4gaW50ICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDhkMWE0MTkuLjcxOTAxZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTIgKzE4LDEwIEBACiBDRkxBR1NfUkVNT1ZFX3Byb21faW5pdC5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBDRkxBR1NfUkVNT1ZFX2J0ZXh0Lm8gPSAtcGcgLW1uby1zY2hlZC1lcGlsb2cKIENGTEFHU19SRU1PVkVfcHJvbS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi0KLWlmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotIyBkeW5hbWljIGZ0cmFjZSBzZXR1cC4KKyMgZG8gbm90IHRyYWNlIHRyYWNlciBjb2RlCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi1lbmRpZgotCisjIHRpbWVycyB1c2VkIGJ5IHRyYWNpbmcKK0NGTEFHU19SRU1PVkVfdGltZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBlbmRpZgogCiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXApAQCAtNjEsNiArNTksNyBAQAogb2JqNjQtJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcF9hc202NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vIG1vZHVsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR180NHgpCQkrPSBjcHVfc2V0dXBfNDR4Lm8KK29iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBjcHVfc2V0dXBfZnNsX2Jvb2tlLm8gZGJlbGwubwogCiBleHRyYS0kKENPTkZJR19QUENfU1REX01NVSkJOj0gaGVhZF8zMi5vCiBleHRyYS0kKENPTkZJR19QUEM2NCkJCTo9IGhlYWRfNjQubwpAQCAtNzYsNyArNzUsNyBAQAogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwotb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubworb2JqLSQoQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUpCSs9IHByb21faW5pdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHBwY19rc3ltcy5vCiBvYmotJChDT05GSUdfQk9PVFhfVEVYVCkJKz0gYnRleHQubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCkBAIC05NCw2ICs5Myw3IEBACiBvYmo2NC0kKENPTkZJR19BVURJVCkJCSs9IGNvbXBhdF9hdWRpdC5vCiAKIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiAKIG9iai0kKENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSkgKz0gc29mdGVtdTh4eC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCA3M2NiNmEzLi41ZmZjZmFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl7IDQsIFNUK0YrUytVIH0sCS8qIDExIDEgMTAxMDogc3Rmc3V4ICovCiAJeyA4LCBTVCtGK1UgfSwJCS8qIDExIDEgMTAxMTogc3RmZHV4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTEwMCAqLwotCUlOVkFMSUQsCQkvKiAxMSAxIDExMDEgKi8KKwl7IDQsIExEK0YgfSwJCS8qIDExIDEgMTEwMTogbGZpd3p4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTExMCAqLwogCUlOVkFMSUQsCQkvKiAxMSAxIDExMTEgKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNDJmZTRkYS4uMWU0MGJjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjg0LDkgKzI4NCw2IEBACiAjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEFib3V0IHRoZSBDUFUgZmVhdHVyZXMgdGFibGUgKi8KLQlERUZJTkUoQ1BVX1NQRUNfRU5UUllfU0laRSwgc2l6ZW9mKHN0cnVjdCBjcHVfc3BlYykpOwotCURFRklORShDUFVfU1BFQ19QVlJfTUFTSywgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBwdnJfbWFzaykpOwotCURFRklORShDUFVfU1BFQ19QVlJfVkFMVUUsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgcHZyX3ZhbHVlKSk7CiAJREVGSU5FKENQVV9TUEVDX0ZFQVRVUkVTLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIGNwdV9mZWF0dXJlcykpOwogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAlERUZJTkUoQ1BVX1NQRUNfUkVTVE9SRSwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfcmVzdG9yZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwppbmRleCAxMGI0YWIxLi43ZDYwNmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwpAQCAtMzQsNiArMzQsNyBAQAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV80NjBleCkKIF9HTE9CQUwoX19zZXR1cF9jcHVfNDYwZ3QpCitfR0xPQkFMKF9fc2V0dXBfY3B1XzQ2MHN4KQogCW1mbHIJcjQKIAlibAlfX2luaXRfZnB1XzQ0eAogCWJsCV9fZml4dXBfNDQwQV9tY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNzJkMWQ3My4uNTRmNzY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTE1LDkgKzE1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjAzKQogCW1mbHIJcjQKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIxMCwwCisJbXRzcHIJU1BSTl9TUFJHNCxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbG93IGxldmVsIENQVSBzZXR1cCBmdW5jdGlvbnMuCisgKiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKK19HTE9CQUwoX19zZXR1cF9jcHVfZTIwMCkKKwkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KKwltZnNwcglyMyxTUFJOX0hJRDAKKwlvcmkJcjMscjMsSElEMF9EQVBVRU5AbAorCW10c3ByCVNQUk5fSElEMCxyMworCWIJX19zZXR1cF9lMjAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDB2MSkKK19HTE9CQUwoX19zZXR1cF9jcHVfZTUwMHYyKQorCWIJX19zZXR1cF9lNTAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDBtYykKKwliCV9fc2V0dXBfZTUwMG1jX2l2b3JzCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA5MjNmODdhLi5jZDFiNjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNSw2ICszNSwxMCBAQAogICogYW5kIHBwYzY0CiAgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2UyMDAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjEodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwbWModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NDBlcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGVweCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGd4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwpAQCAtNDMsNiArNDcsNyBAQAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDQweDUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NjBleCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ2MGd0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDYwc3godW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyAqc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC03MjYsNiArNzMxLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCByZXYgMi4wIG11c3QgZGlzYWJsZSBISUQwW0RQTV0gKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCkBAIC03NDEsNiArNzQ4LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCAoQWxsIHJldnMgZXhjZXB0IDIuMCkgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCkBAIC03NTYsNiArNzY1LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc1MEdYICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtNzcxLDYgKzc4Miw4IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwZngsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDAvNzUwIChMMkNSIGJpdCBuZWVkIGZpeHVwIGZvciA3NDApICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtMTA3Nyw3ICsxMDkwLDggQEAKIAkJLmNwdV9uYW1lCQk9ICJlMzAwYzIiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0UzMDBDMiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUywKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMgfAorCQkJTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzYwMywKQEAgLTEwOTAsNyArMTEwNCw4IEBACiAJCS5jcHVfbmFtZQkJPSAiZTMwMGMzIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FMzAwLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUiwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTIHwKKwkJCU1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV82MDMsCkBAIC0xMTA1LDcgKzExMjAsOCBAQAogCQkuY3B1X25hbWUJCT0gImUzMDBjNCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTMwMCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVIsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUyB8CisJCQlNTVVfRlRSX05FRURfRFRMQl9TV19MUlUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNjAzLApAQCAtMTYzNCw2ICsxNjUwLDE5IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAogCX0sCisJeyAvKiA0NjBTWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmZmYwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDEzNTQxODAwLAorCQkuY3B1X25hbWUJCT0gIjQ2MFNYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80NHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNDYwc3gsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCkBAIC0xNjg3LDYgKzE3MTYsNyBAQAogCQkJUFBDX0ZFQVRVUkVfVU5JRklFRF9DQUNIRSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTIwMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lMjAwLAogCQkucGxhdGZvcm0JCT0gInBwYzU1NTQiLAogCX0KQEAgLTE3MDYsNiArMTczNiw3IEBACiAJCS5udW1fcG1jcwkJPSA0LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjL2U1MDAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRlNMX0VNQiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9lNTAwdjEsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZTUwMCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM4NTQwIiwKIAl9LApAQCAtMTcyNCw2ICsxNzU1LDcgQEAKIAkJLm51bV9wbWNzCQk9IDQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGMvZTUwMCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9GU0xfRU1CLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X2U1MDB2MiwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lNTAwLAogCQkucGxhdGZvcm0JCT0gInBwYzg1NDgiLAogCX0sCkBAIC0xNzMzLDEyICsxNzY1LDE0IEBACiAJCS5jcHVfbmFtZQkJPSAiZTUwMG1jIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAorCQkJTU1VX0ZUUl9VU0VfVExCSUxYLAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LAogCQkuZGNhY2hlX2JzaXplCQk9IDY0LAogCQkubnVtX3BtY3MJCT0gNCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwIiwgLyogeHh4IC0gZ2FsYWssIGU1MDBtYz8gKi8KIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0ZTTF9FTUIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTUwMG1jLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2U1MDAsCiAJCS5wbGF0Zm9ybQkJPSAicHBjZTUwMG1jIiwKIAl9LApAQCAtMTc2Miw3NCArMTc5Niw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9zcGVjIHRoZV9jcHVfc3BlYzsKIAorc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9zcGVjKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMgKnMpCit7CisJc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKKwlzdHJ1Y3QgY3B1X3NwZWMgb2xkOworCisJdCA9IFBUUlJFTE9DKHQpOworCW9sZCA9ICp0OworCisJLyogQ29weSBldmVyeXRoaW5nLCB0aGVuIGRvIGZpeHVwcyAqLworCSp0ID0gKnM7CisKKwkvKgorCSAqIElmIHdlIGFyZSBvdmVycmlkaW5nIGEgcHJldmlvdXMgdmFsdWUgZGVyaXZlZCBmcm9tIHRoZSByZWFsCisJICogUFZSIHdpdGggYSBuZXcgdmFsdWUgb2J0YWluZWQgdXNpbmcgYSBsb2dpY2FsIFBWUiB2YWx1ZSwKKwkgKiBkb24ndCBtb2RpZnkgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgZmllbGRzLgorCSAqLworCWlmIChvbGQubnVtX3BtY3MgJiYgIXMtPm51bV9wbWNzKSB7CisJCXQtPm51bV9wbWNzID0gb2xkLm51bV9wbWNzOworCQl0LT5wbWNfdHlwZSA9IG9sZC5wbWNfdHlwZTsKKwkJdC0+b3Byb2ZpbGVfdHlwZSA9IG9sZC5vcHJvZmlsZV90eXBlOworCQl0LT5vcHJvZmlsZV9tbWNyYV9zaWh2ID0gb2xkLm9wcm9maWxlX21tY3JhX3NpaHY7CisJCXQtPm9wcm9maWxlX21tY3JhX3NpcHIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfc2lwcjsKKwkJdC0+b3Byb2ZpbGVfbW1jcmFfY2xlYXIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfY2xlYXI7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UgYmVmb3JlIGFuZAorCQkgKiBoYXZlIHB1bGxlZCB0aGUgZGVmYXVsdCBjYXNlIGJlY2F1c2UgdGhlIHJlYWwgUFZSIHdhcworCQkgKiBub3QgZm91bmQgaW5zaWRlIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseQorCQkgKiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkgbW9kZS4gSW4gdGhhdCBjYXNlLCBsZXQgdGhlCisJCSAqIG9wcm9maWxlciBrbm93IHdoaWNoIHNldCBvZiBjb21wYXRpYmlsaXR5IGNvdW50ZXJzIHRvCisJCSAqIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUgb3Byb2ZpbGVfY3B1X3R5cGUgc3RyaW5nCisJCSAqIGlzIHNldCB0byB0aGF0IG9mIGNvbXBhdGliaWxpdHkgbW9kZS4gSWYgdGhlCisJCSAqIG9wcm9maWxlX2NwdV90eXBlIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlCisJCSAqIHBvc3NpYmx5IG92ZXJyaWRpbmcgYSByZWFsIFBWUiB3aXRoIGEgbG9naWNhbCBvbmUsCisJCSAqIGFuZCwgaW4gdGhhdCBjYXNlLCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvcgorCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KKwkJICovCisJCWlmIChvbGQub3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKKwkJCXQtPm9wcm9maWxlX2NwdV90eXBlID0gcy0+b3Byb2ZpbGVfY3B1X3R5cGU7CisJfQorCisJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKKworCS8qCisJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCisJICogd2UncmUgY2FsbGVkIHdpdGggcmVhbCBwdnIgZmlyc3QuCisJICovCisJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQorCQkqUFRSUkVMT0MoJnBvd2VycGNfYmFzZV9wbGF0Zm9ybSkgPSB0LT5wbGF0Zm9ybTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKwkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgc2V0dXBfY3B1IGZvcgorCSAqIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUgdGhhdCBhdCBhIGxhdGVyIHRpbWUsIGZvciBub3csCisJICoganVzdCB1c2UgI2lmZGVmLiBXZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uCisJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKKwkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgorCSAqLworCWlmIChzLT5jcHVfc2V0dXApIHsKKwkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KK30KKwogc3RydWN0IGNwdV9zcGVjICogX19pbml0IGlkZW50aWZ5X2NwdSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgaW50IHB2cikKIHsKIAlzdHJ1Y3QgY3B1X3NwZWMgKnMgPSBjcHVfc3BlY3M7Ci0Jc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKIAlpbnQgaTsKIAogCXMgPSBQVFJSRUxPQyhzKTsKLQl0ID0gUFRSUkVMT0ModCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcHVfc3BlY3MpOyBpKysscysrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdV9zcGVjcyk7IGkrKyxzKyspIHsKIAkJaWYgKChwdnIgJiBzLT5wdnJfbWFzaykgPT0gcy0+cHZyX3ZhbHVlKSB7Ci0JCQkvKgotCQkJICogSWYgd2UgYXJlIG92ZXJyaWRpbmcgYSBwcmV2aW91cyB2YWx1ZSBkZXJpdmVkCi0JCQkgKiBmcm9tIHRoZSByZWFsIFBWUiB3aXRoIGEgbmV3IHZhbHVlIG9idGFpbmVkCi0JCQkgKiB1c2luZyBhIGxvZ2ljYWwgUFZSIHZhbHVlLCBkb24ndCBtb2RpZnkgdGhlCi0JCQkgKiBwZXJmb3JtYW5jZSBtb25pdG9yIGZpZWxkcy4KLQkJCSAqLwotCQkJaWYgKHQtPm51bV9wbWNzICYmICFzLT5udW1fcG1jcykgewotCQkJCXQtPmNwdV9uYW1lID0gcy0+Y3B1X25hbWU7Ci0JCQkJdC0+Y3B1X2ZlYXR1cmVzID0gcy0+Y3B1X2ZlYXR1cmVzOwotCQkJCXQtPmNwdV91c2VyX2ZlYXR1cmVzID0gcy0+Y3B1X3VzZXJfZmVhdHVyZXM7Ci0JCQkJdC0+aWNhY2hlX2JzaXplID0gcy0+aWNhY2hlX2JzaXplOwotCQkJCXQtPmRjYWNoZV9ic2l6ZSA9IHMtPmRjYWNoZV9ic2l6ZTsKLQkJCQl0LT5jcHVfc2V0dXAgPSBzLT5jcHVfc2V0dXA7Ci0JCQkJdC0+Y3B1X3Jlc3RvcmUgPSBzLT5jcHVfcmVzdG9yZTsKLQkJCQl0LT5wbGF0Zm9ybSA9IHMtPnBsYXRmb3JtOwotCQkJCS8qCi0JCQkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UKLQkJCQkgKiBiZWZvcmUgYW5kIGhhdmUgcHVsbGVkIHRoZSBkZWZhdWx0IGNhc2UKLQkJCQkgKiBiZWNhdXNlIHRoZSByZWFsIFBWUiB3YXMgbm90IGZvdW5kIGluc2lkZQotCQkJCSAqIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseSBydW5uaW5nIGluCi0JCQkJICogY29tcGF0aWJpbGl0eSBtb2RlLiBJbiB0aGF0IGNhc2UsIGxldCB0aGUKLQkJCQkgKiBvcHJvZmlsZXIga25vdyB3aGljaCBzZXQgb2YgY29tcGF0aWJpbGl0eQotCQkJCSAqIGNvdW50ZXJzIHRvIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZSBzdHJpbmcgaXMgc2V0IHRvIHRoYXQgb2YKLQkJCQkgKiBjb21wYXRpYmlsaXR5IG1vZGUuIElmIHRoZSBvcHJvZmlsZV9jcHVfdHlwZQotCQkJCSAqIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlIHBvc3NpYmx5Ci0JCQkJICogb3ZlcnJpZGluZyBhIHJlYWwgUFZSIHdpdGggYSBsb2dpY2FsIG9uZSwgYW5kLAotCQkJCSAqIGluIHRoYXQgY2FzZSwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KLQkJCQkgKi8KLQkJCQlpZiAodC0+b3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKLQkJCQkJdC0+b3Byb2ZpbGVfY3B1X3R5cGUgPSBzLT5vcHJvZmlsZV9jcHVfdHlwZTsKLQkJCX0gZWxzZQotCQkJCSp0ID0gKnM7Ci0JCQkqUFRSUkVMT0MoJmN1cl9jcHVfc3BlYykgPSAmdGhlX2NwdV9zcGVjOwotCi0JCQkvKgotCQkJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCi0JCQkgKiB3ZSdyZSBjYWxsZWQgd2l0aCByZWFsIHB2ciBmaXJzdC4KLQkJCSAqLwotCQkJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQotCQkJCSpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9IHQtPnBsYXRmb3JtOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkJLyogcHBjNjQgYW5kIGJvb2tlIGV4cGVjdCBpZGVudGlmeV9jcHUgdG8gYWxzbyBjYWxsCi0JCQkgKiBzZXR1cF9jcHUgZm9yIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUKLQkJCSAqIHRoYXQgYXQgYSBsYXRlciB0aW1lLCBmb3Igbm93LCBqdXN0IHVzZSAjaWZkZWYuCi0JCQkgKiB3ZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKLQkJCSAqIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwKLQkJCSAqIG1vZGUgb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KLQkJCSAqLwotCQkJaWYgKHMtPmNwdV9zZXR1cCkgewotCQkJCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KKwkJCXNldHVwX2NwdV9zcGVjKG9mZnNldCwgcyk7CiAJCQlyZXR1cm4gczsKIAkJfQorCX0KKwogCUJVRygpOworCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDE5NjcxYWMuLjVmYjY2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogYnJhbmNoIHRvICJhZGRyIiB3ZSBqdW1wIHRvICgiYWRkciIgKyAzMiBNQikuIEFsdGhvdWdoIGl0IHJlcXVpcmVzCiAJICogdHdvIGluc3RydWN0aW9ucyBpdCBkb2Vzbid0IHJlcXVpcmUgYW55IHJlZ2lzdGVycy4KIAkgKi8KLQlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfTk9QX0lOU1RSKTsKKwlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfSU5TVF9OT1ApOwogCXBhdGNoX2JyYW5jaCgrK3AsIGFkZHIgKyBQSFlTSUNBTF9TVEFSVCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorCisjaWZkZWYgQ09ORklHX1NNUAordW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKKwordm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit7CisJaW50IGk7CisKKwlpZih0YXJnZXQgPCBOUl9DUFVTKSB7CisJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbdGFyZ2V0XSk7CisJCXBwY19tc2dzbmQoUFBDX0RCRUxMLCAwLCB0YXJnZXQpOworCX0KKwllbHNlIGlmKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOworCQkJc2V0X2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtpXSk7CisJCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaSk7CisJCX0KKwl9CisJZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOworCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgUFBDX0RCRUxMX01TR19CUkRDQVNULCAwKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA2ZjdlYjdlLi40ZGQzOGYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02Myw3ICs2Myw3IEBACiAKIAkuZ2xvYmwJY3JpdF90cmFuc2Zlcl90b19oYW5kbGVyCiBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFX01NVQogCW1mc3ByCXIwLFNQUk5fTUFTMAogCXN0dwlyMCxNQVMwKHIxMSkKIAltZnNwcglyMCxTUFJOX01BUzEKQEAgLTc4LDcgKzc4LDcgQEAKIAltZnNwcglyMCxTUFJOX01BUzcKIAlzdHcJcjAsTUFTNyhyMTEpCiAjZW5kaWYgLyogQ09ORklHX1BIWVNfNjRCSVQgKi8KLSNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0VfTU1VICovCiAjaWZkZWYgQ09ORklHXzQ0eAogCW1mc3ByCXIwLFNQUk5fTU1VQ1IKIAlzdHcJcjAsTU1VQ1IocjExKQpAQCAtOTE0LDcgKzkxNCw3IEBACiAJbXRzcHIJU1BSTl8jI2V4Y19sdmxfc3JyMCxyOTsJCQkJCVwKIAltdHNwcglTUFJOXyMjZXhjX2x2bF9zcnIxLHIxMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNFX01NVSkKICNpZmRlZiBDT05GSUdfUEhZU182NEJJVAogI2RlZmluZQlSRVNUT1JFX01BUzcJCQkJCQkJXAogCWx3eglyMTEsTUFTNyhyMSk7CQkJCQkJXApAQCAtOTU2LDcgKzk1Niw3IEBACiAJbHd6CXIxMCxjcml0X3NycjFAbChyMTApOwogCW10c3ByCVNQUk5fU1JSMCxyOTsKIAltdHNwcglTUFJOX1NSUjEscjEwOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBSRkNJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBQUENfUkZDSSkKICNlbmRpZiAvKiBDT05GSUdfNDB4ICovCiAKICNpZmRlZiBDT05GSUdfQk9PS0UKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCXN0dwlyMTAsS1NQX0xJTUlUKHI5KQogCVJFU1RPUkVfeFNSUihTUlIwLFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFJGQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFBQQ19SRkNJKQogCiAJLmdsb2JsCXJldF9mcm9tX2RlYnVnX2V4YwogcmV0X2Zyb21fZGVidWdfZXhjOgpAQCAtOTgxLDcgKzk4MSw3IEBACiAJUkVTVE9SRV94U1JSKFNSUjAsU1JSMSk7CiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX01NVV9SRUdTOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBSRkRJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBQUENfUkZESSkKIAogCS5nbG9ibAlyZXRfZnJvbV9tY2hlY2tfZXhjCiByZXRfZnJvbV9tY2hlY2tfZXhjOgpAQCAtOTkyLDcgKzk5Miw3IEBACiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX3hTUlIoRFNSUjAsRFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUkZNQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUFBDX1JGTUNJKQogI2VuZGlmIC8qIENPTkZJR19CT09LRSAqLwogCiAvKgpAQCAtMTE3Niw1OSArMTE3NiwyNyBAQAogCWJjdHIKIAogX0dMT0JBTChmdHJhY2VfY2FsbGVyKQotCS8qIEJhc2VkIG9mZiBvZiBvYmpkdW1wIG9wdHB1dCBmcm9tIGdsaWJjICovCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKwlNQ09VTlRfU0FWRV9GUkFNRQorCS8qIHIzIGVuZHMgdXAgd2l0aCBsaW5rIHJlZ2lzdGVyICovCiAJc3ViaQlyMywgcjMsIE1DT1VOVF9JTlNOX1NJWkUKIC5nbG9ibCBmdHJhY2VfY2FsbAogZnRyYWNlX2NhbGw6CiAJYmwJZnRyYWNlX3N0dWIKIAlub3AKLQlsd3oJcjYsIDgocjEpCi0JbHd6CXIwLCA0NChyMSkKLQlsd3oJcjMsIDEyKHIxKQotCW10Y3RyCXIwCi0JbHd6CXI0LCAxNihyMSkKLQltdGNyCXI2Ci0JbHd6CXI1LCAyMChyMSkKLQlsd3oJcjYsIDI0KHIxKQotCWx3eglyMCwgNTIocjEpCi0JbHd6CXI3LCAyOChyMSkKLQlsd3oJcjgsIDMyKHIxKQotCW10bHIJcjAKLQlsd3oJcjksIDM2KHIxKQotCWx3eglyMTAsNDAocjEpCi0JYWRkaQlyMSwgcjEsIDQ4CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCisJTUNPVU5UX1JFU1RPUkVfRlJBTUUKKwkvKiBvbGQgbGluayByZWdpc3RlciBlbmRzIHVwIGluIGN0ciByZWcgKi8KIAliY3RyCiAjZWxzZQogX0dMT0JBTChtY291bnQpCiBfR0xPQkFMKF9tY291bnQpCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKworCU1DT1VOVF9TQVZFX0ZSQU1FCiAKIAlzdWJpCXIzLCByMywgTUNPVU5UX0lOU05fU0laRQogCUxPQURfUkVHX0FERFIocjUsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbikKQEAgLTEyMzYsMjggKzEyMDQsNTUgQEAKIAogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAogCi0JbHd6CXI2LCA4KHIxKQotCWx3eglyMCwgNDQocjEpCi0JbHd6CXIzLCAxMihyMSkKLQltdGN0cglyMAotCWx3eglyNCwgMTYocjEpCi0JbXRjcglyNgotCWx3eglyNSwgMjAocjEpCi0JbHd6CXI2LCAyNChyMSkKLQlsd3oJcjAsIDUyKHIxKQotCWx3eglyNywgMjgocjEpCi0JbHd6CXI4LCAzMihyMSkKLQltdGxyCXIwCi0JbHd6CXI5LCAzNihyMSkKLQlsd3oJcjEwLDQwKHIxKQotCWFkZGkJcjEsIHIxLCA0OAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwliCWZ0cmFjZV9ncmFwaF9jYWxsZXIKKyNlbmRpZgorCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCiAJYmN0cgogI2VuZGlmCiAKIF9HTE9CQUwoZnRyYWNlX3N0dWIpCiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisJLyogbG9hZCByNCB3aXRoIGxvY2FsIGFkZHJlc3MgKi8KKwlsd3oJcjQsIDQ0KHIxKQorCXN1YmkJcjQsIHI0LCBNQ09VTlRfSU5TTl9TSVpFCisKKwkvKiBnZXQgdGhlIHBhcmVudCBhZGRyZXNzICovCisJYWRkaQlyMywgcjEsIDUyCisKKwlibAlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCisJLyogb2xkIGxpbmsgcmVnaXN0ZXIgZW5kcyB1cCBpbiBjdHIgcmVnICovCisJYmN0cgorCitfR0xPQkFMKHJldHVybl90b19oYW5kbGVyKQorCS8qIG5lZWQgdG8gc2F2ZSByZXR1cm4gdmFsdWVzICovCisJc3R3dQlyMSwgLTMyKHIxKQorCXN0dwlyMywgMjAocjEpCisJc3R3CXI0LCAxNihyMSkKKwlzdHcJcjMxLCAxMihyMSkKKwltcglyMzEsIHIxCisKKwlibAlmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlub3AKKworCS8qIHJldHVybiB2YWx1ZSBoYXMgcmVhbCByZXR1cm4gYWRkcmVzcyAqLworCW10bHIJcjMKKworCWx3eglyMywgMjAocjEpCisJbHd6CXI0LCAxNihyMSkKKwlsd3oJcjMxLDEyKHIxKQorCWx3eglyMSwgMChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCiAjZW5kaWYgLyogQ09ORklHX01DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDM4M2VkNmUuLmFiZmMzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTkwOCw2ICs5MDgsMTIgQEAKIGZ0cmFjZV9jYWxsOgogCWJsCWZ0cmFjZV9zdHViCiAJbm9wCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCiAJbGQJcjAsIDEyOChyMSkKIAltdGxyCXIwCiAJYWRkaQlyMSwgcjEsIDExMgpAQCAtOTMxLDEzICs5MzcsOTAgQEAKIAlsZAlyNSwwKHI1KQogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAorCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJYglmdHJhY2VfZ3JhcGhfY2FsbGVyCisjZW5kaWYKIAlsZAlyMCwgMTI4KHIxKQogCW10bHIJcjAKIAlhZGRpCXIxLCByMSwgMTEyCiBfR0xPQkFMKGZ0cmFjZV9zdHViKQogCWJscgogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorX0dMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbGVyKQorCS8qIGxvYWQgcjQgd2l0aCBsb2NhbCBhZGRyZXNzICovCisJbGQJcjQsIDEyOChyMSkKKwlzdWJpCXI0LCByNCwgTUNPVU5UX0lOU05fU0laRQorCisJLyogZ2V0IHRoZSBwYXJlbnQgYWRkcmVzcyAqLworCWxkCXIxMSwgMTEyKHIxKQorCWFkZGkJcjMsIHIxMSwgMTYKKworCWJsCS5wcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCWxkCXIwLCAxMjgocjEpCisJbXRscglyMAorCWFkZGkJcjEsIHIxLCAxMTIKKwlibHIKKworX0dMT0JBTChyZXR1cm5fdG9faGFuZGxlcikKKwkvKiBuZWVkIHRvIHNhdmUgcmV0dXJuIHZhbHVlcyAqLworCXN0ZAlyNCwgIC0yNChyMSkKKwlzdGQJcjMsICAtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisJbXIJcjMxLCByMQorCXN0ZHUJcjEsIC0xMTIocjEpCisKKwlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJbm9wCisKKwkvKiByZXR1cm4gdmFsdWUgaGFzIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwltdGxyCXIzCisKKwlsZAlyMSwgMChyMSkKKwlsZAlyNCwgIC0yNChyMSkKKwlsZAlyMywgIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCisJLyogSnVtcCBiYWNrIHRvIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwlibHIKKworX0dMT0JBTChtb2RfcmV0dXJuX3RvX2hhbmRsZXIpCisJLyogbmVlZCB0byBzYXZlIHJldHVybiB2YWx1ZXMgKi8KKwlzdGQJcjQsICAtMzIocjEpCisJc3RkCXIzLCAgLTI0KHIxKQorCS8qIHNhdmUgVE9DICovCisJc3RkCXIyLCAgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCW1yCXIzMSwgcjEKKwlzdGR1CXIxLCAtMTEyKHIxKQorCisJLyoKKwkgKiBXZSBhcmUgaW4gYSBtb2R1bGUgdXNpbmcgdGhlIG1vZHVsZSdzIFRPQy4KKwkgKiBTd2l0Y2ggdG8gb3VyIFRPQyB0byBydW4gaW5zaWRlIHRoZSBjb3JlIGtlcm5lbC4KKwkgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjQsZnRyYWNlX3JldHVybl90b19oYW5kbGVyKQorCWxkCXIyLCA4KHI0KQorCisJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW5vcAorCisJLyogcmV0dXJuIHZhbHVlIGhhcyByZWFsIHJldHVybiBhZGRyZXNzICovCisJbXRscglyMworCisJbGQJcjEsIDAocjEpCisJbGQJcjQsICAtMzIocjEpCisJbGQJcjMsICAtMjQocjEpCisJbGQJcjIsICAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDYwYzYwY2MuLjViNWQxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBUaGFua3MgZ29lcyBvdXQgdG8gUC5BLiBTZW1pLCBJbmMgZm9yIHN1cHBseWluZyBtZSB3aXRoIGEgUFBDNjQgYm94LgogICoKKyAqIEFkZGVkIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBjb2RlLCB0YWtlbiBmcm9tIHg4NiB0aGF0IHdhcyB3cml0dGVuCisgKiBieSBGcmVkZXJpYyBXZWlzYmVja2VyLCBhbmQgcG9ydGVkIHRvIFBQQyBieSBTdGV2ZW4gUm9zdGVkdC4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0yMCwxNCArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCi0jaWYgMAotI2RlZmluZSBERUJVR1AgcHJpbnRrCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm10ICwgLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gUFBDX05PUF9JTlNUUjsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgYWRkcgogI2Vsc2UKQEAgLTM1LDM3ICszMCwyMyBAQAogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpCiAjZW5kaWYKIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9jYWxjX29mZnNldChsb25nIGlwLCBsb25nIGFkZHIpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitzdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiAoaW50KShhZGRyIC0gaXApOworCXJldHVybiBQUENfSU5TVF9OT1A7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2Vfbm9wX3JlcGxhY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2Z0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGluaykKIHsKLQlyZXR1cm4gKGNoYXIgKikmZnRyYWNlX25vcDsKLX0KKwl1bnNpZ25lZCBpbnQgb3A7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9wOwotCi0JLyoKLQkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGp1c3QgdXNlIGNyZWF0ZV9mdW5jdGlvbl9jYWxsLCBidXQgdGhhdCB3aWxsCi0JICogdXBkYXRlIHRoZSBjb2RlIGl0c2VsZi4gSGVyZSB3ZSBuZWVkIHRvIGp1c3QgcmV0dXJuIHRoZQotCSAqIGluc3RydWN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgbW9kaWZpZWQsIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZQotCSAqIGNvZGUuCi0JICovCiAJYWRkciA9IEdFVF9BRERSKGFkZHIpOwogCi0JLyogU2V0IHRvICJibCBhZGRyIiAqLwotCW9wID0gMHg0ODAwMDAwMSB8IChmdHJhY2VfY2FsY19vZmZzZXQoaXAsIGFkZHIpICYgMHgwM2ZmZmZmYyk7CisJLyogaWYgKGxpbmspIHNldCBvcCB0byAnYmwnIGVsc2UgJ2InICovCisJb3AgPSBjcmVhdGVfYnJhbmNoKCh1bnNpZ25lZCBpbnQgKilpcCwgYWRkciwgbGluayA/IDEgOiAwKTsKIAotCS8qCi0JICogTm8gbG9ja2luZyBuZWVkZWQsIHRoaXMgbXVzdCBiZSBjYWxsZWQgdmlhIGtzdG9wX21hY2hpbmUKLQkgKiB3aGljaCBpbiBlc3NlbmNlIGlzIGxpa2UgcnVubmluZyBvbiBhIHVuaXByb2Nlc3NvciBtYWNoaW5lLgotCSAqLwotCXJldHVybiAodW5zaWduZWQgY2hhciAqKSZvcDsKKwlyZXR1cm4gb3A7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTc3LDEwICs1OCw5IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLAotCQkgICB1bnNpZ25lZCBjaGFyICpuZXdfY29kZSkKK2Z0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewotCXVuc2lnbmVkIGNoYXIgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisJdW5zaWduZWQgaW50IHJlcGxhY2VkOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtOTMsMTUgKzczLDE1IEBACiAJICovCiAKIAkvKiByZWFkIHRoZSB0ZXh0IHdlIHdhbnQgdG8gbW9kaWZ5ICovCi0JaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQoJnJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiBNYWtlIHN1cmUgaXQgaXMgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUgKi8KLQlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwlpZiAocmVwbGFjZWQgIT0gb2xkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlcGxhY2UgdGhlIHRleHQgd2l0aCB0aGUgbmV3IHRleHQgKi8KLQlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsIG5ld19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZuZXcsIE1DT1VOVF9JTlNOX1NJWkUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJZmx1c2hfaWNhY2hlX3JhbmdlKGlwLCBpcCArIDgpOwpAQCAtMTE5LDYgKzk5LDggQEAKIAlyZXR1cm4gY3JlYXRlX2JyYW5jaCgodW5zaWduZWQgaW50ICopaXAsIGFkZHIsIDApOwogfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwogc3RhdGljIGludCBpc19ibF9vcCh1bnNpZ25lZCBpbnQgb3ApCiB7CiAJcmV0dXJuIChvcCAmIDB4ZmMwMDAwMDMpID09IDB4NDgwMDAwMDE7CkBAIC0xNzUsNyArMTU3LDcgQEAKIAkgKiAweGU4LCAweDRjLCAweDAwLCAweDI4LCAgICBsZCAgICAgIHIyLDQwKHIxMikKIAkgKi8KIAotCURFQlVHUCgiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKIAogCS8qIEZpbmQgd2hlcmUgdGhlIHRyYW1wb2xpbmUganVtcHMgdG8gKi8KIAlpZiAocHJvYmVfa2VybmVsX3JlYWQoam1wLCAodm9pZCAqKXRyYW1wLCBzaXplb2Yoam1wKSkpIHsKQEAgLTE4Myw3ICsxNjUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlERUJVR1AoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDgyMDAwMCkgfHwKQEAgLTE5OSwxOCArMTgxLDE4IEBACiAJb2Zmc2V0ID0gKCh1bnNpZ25lZCkoKHVuc2lnbmVkIHNob3J0KWptcFswXSkgPDwgMTYpICsKIAkJKGludCkoKHNob3J0KWptcFsxXSk7CiAKLQlERUJVR1AoIiAleCAiLCBvZmZzZXQpOworCXByX2RlYnVnKCIgJXggIiwgb2Zmc2V0KTsKIAogCS8qIGdldCB0aGUgYWRkcmVzcyB0aGlzIGp1bXBzIHRvbyAqLwogCXRyYW1wID0gbW9kLT5hcmNoLnRvYyArIG9mZnNldCArIDMyOwotCURFQlVHUCgidG9jOiAlbHgiLCB0cmFtcCk7CisJcHJfZGVidWcoInRvYzogJWx4IiwgdHJhbXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgOCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAlbHhcbiIsIHRyYW1wKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4XG4iLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHhcbiIsIGptcFswXSwgam1wWzFdKTsKIAogCXB0ciA9ICgodW5zaWduZWQgbG9uZylqbXBbMF0gPDwgMzIpICsgam1wWzFdOwogCkBAIC0yODcsNyArMjY5LDcgQEAKIAkgKiAgMHg0ZSwgMHg4MCwgMHgwNCwgMHgyMCAgYmN0cgogCSAqLwogCi0JREVCVUdQKCJpcDolbHgganVtcHMgdG8gJWx4IiwgaXAsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCIsIGlwLCB0cmFtcCk7CiAKIAkvKiBGaW5kIHdoZXJlIHRoZSB0cmFtcG9saW5lIGp1bXBzIHRvICovCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgc2l6ZW9mKGptcCkpKSB7CkBAIC0yOTUsNyArMjc3LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4ICIsIGptcFswXSwgam1wWzFdKTsKKwlwcl9kZWJ1ZygiICUwOHggJTA4eCAiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDYwMDAwMCkgfHwKQEAgLTMxMSw3ICsyOTMsNyBAQAogCWlmICh0cmFtcCAmIDB4ODAwMCkKIAkJdHJhbXAgLT0gMHgxMDAwMDsKIAotCURFQlVHUCgiICV4ICIsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiICV4ICIsIHRyYW1wKTsKIAogCWlmICh0cmFtcCAhPSBhZGRyKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMzIwLDcgKzMwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW9wID0gUFBDX05PUF9JTlNUUjsKKwlvcCA9IFBQQ19JTlNUX05PUDsKIAogCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKilpcCwgJm9wLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTMzMCwxMiArMzEyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogUFBDNjQgKi8KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJICAgIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC0zNDQsMTEgKzMyNywxMiBAQAogCSAqLwogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwotCQlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyKTsKKwkJb2xkID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkciwgMSk7CiAJCW5ldyA9IGZ0cmFjZV9ub3BfcmVwbGFjZSgpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBXZSBzaG91bGQgZWl0aGVyIGFscmVhZHkgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZQpAQCAtMzczLDkgKzM1NywxMyBAQAogCQltb2QgPSByZWMtPmFyY2gubW9kOwogCiAJcmV0dXJuIF9fZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBhZGRyKTsKLQorI2Vsc2UKKwkvKiBXZSBzaG91bGQgbm90IGdldCBoZXJlIHdpdGhvdXQgbW9kdWxlcyAqLworCXJldHVybiAtRUlOVkFMOworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiB9CiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogI2lmZGVmIENPTkZJR19QUEM2NAogc3RhdGljIGludAogX19mdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTM5Miw3ICszODAsNyBAQAogCSAqICBiICs4OyBsZCByMiw0MChyMSkKIAkgKi8KIAlpZiAoKChvcFswXSAhPSAweDQ4MDAwMDA4KSB8fCAob3BbMV0gIT0gMHhlODQxMDAyOCkpICYmCi0JICAgICgob3BbMF0gIT0gUFBDX05PUF9JTlNUUikgfHwgKG9wWzFdICE9IFBQQ19OT1BfSU5TVFIpKSkgeworCSAgICAoKG9wWzBdICE9IFBQQ19JTlNUX05PUCkgfHwgKG9wWzFdICE9IFBQQ19JTlNUX05PUCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QcyBidXQgaGF2ZSAleCAleFxuIiwgb3BbMF0sIG9wWzFdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDE0LDcgKzQwMiw3IEBACiAJLyogbGQgcjIsNDAocjEpICovCiAJb3BbMV0gPSAweGU4NDEwMDI4OwogCi0JREVCVUdQKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOworCXByX2RlYnVnKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWlwLCBvcCwgTUNPVU5UX0lOU05fU0laRSAqIDIpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDM1LDcgKzQyMyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogSXQgc2hvdWxkIGJlIHBvaW50aW5nIHRvIGEgbm9wICovCi0JaWYgKG9wICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAob3AgIT0gUFBDX0lOU1RfTk9QKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QIGJ1dCBoYXZlICV4XG4iLCBvcCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ1NCw3ICs0NDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlERUJVR1AoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CisJcHJfZGVidWcoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CiAKIAlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZvcCwgTUNPVU5UX0lOU05fU0laRSkpCiAJCXJldHVybiAtRVBFUk07CkBAIC00NjQsMTEgKzQ1MiwxMiBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC00NzgsMTAgKzQ2NywxMSBAQAogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwogCQlvbGQgPSBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKLQkJbmV3ID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkcik7CisJCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIGFkZHIsIDEpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBCZWluZyB0aGF0IHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gbm9wLCBpdCBoYWQgYmV0dGVyCkBAIC00OTMsMTYgKzQ4MywyMCBAQAogCX0KIAogCXJldHVybiBfX2Z0cmFjZV9tYWtlX2NhbGwocmVjLCBhZGRyKTsKKyNlbHNlCisJLyogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSB3aXRob3V0IG1vZHVsZXMgKi8KKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogfQogCiBpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCiB7CiAJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKIAlpbnQgcmV0OwogCi0JbWVtY3B5KG9sZCwgJmZ0cmFjZV9jYWxsLCBNQ09VTlRfSU5TTl9TSVpFKTsKLQluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKwlvbGQgPSAqKHVuc2lnbmVkIGludCAqKSZmdHJhY2VfY2FsbDsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jLCAxKTsKIAlyZXQgPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKIAogCXJldHVybiByZXQ7CkBAIC01MTcsMyArNTExLDExNSBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK2V4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0dWIodm9pZCk7CisKK2ludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKworaW50IGZ0cmFjZV9kaXNhYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgbW9kX3JldHVybl90b19oYW5kbGVyKHZvaWQpOworI2VuZGlmCisKKy8qCisgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCisgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgorICovCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKKwlpbnQgZmF1bHRlZDsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXI7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKKwkJcmV0dXJuOworCisjaWYgQ09ORklHX1BQQzY0CisJLyogbm9uIGNvcmUga2VybmVsIGNvZGUgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgVE9DICovCisJaWYgKFJFR0lPTl9JRChzZWxmX2FkZHIpICE9IEtFUk5FTF9SRUdJT05fSUQpCisJCXJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmbW9kX3JldHVybl90b19oYW5kbGVyOworI2VuZGlmCisKKwlyZXR1cm5faG9va2VyID0gR0VUX0FERFIocmV0dXJuX2hvb2tlcik7CisKKwkvKgorCSAqIFByb3RlY3QgYWdhaW5zdCBmYXVsdCwgZXZlbiBpZiBpdCBzaG91bGRuJ3QKKwkgKiBoYXBwZW4uIFRoaXMgdG9vbCBpcyB0b28gbXVjaCBpbnRydXNpdmUgdG8KKwkgKiBpZ25vcmUgc3VjaCBhIHByb3RlY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlKAorCQkiMTogIiBQUENfTEwgIiVbb2xkXSwgMCglW3BhcmVudF0pXG4iCisJCSIyOiAiIFBQQ19TVEwgIiVbcmV0dXJuX2hvb2tlcl0sIDAoJVtwYXJlbnRdKVxuIgorCQkiICAgbGkgJVtmYXVsdGVkXSwgMFxuIgorCQkiMzpcbiIKKworCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjQ6IGxpICVbZmF1bHRlZF0sIDFcbiIKKwkJIiAgIGIgM2JcbiIKKwkJIi5wcmV2aW91c1xuIgorCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQlQUENfTE9OR19BTElHTiAiXG4iCisJCQlQUENfTE9ORyAiMWIsNGJcbiIKKwkJCVBQQ19MT05HICIyYiw0YlxuIgorCQkiLnByZXZpb3VzIgorCisJCTogW29sZF0gIj1yIiAob2xkKSwgW2ZhdWx0ZWRdICI9ciIgKGZhdWx0ZWQpCisJCTogW3BhcmVudF0gInIiIChwYXJlbnQpLCBbcmV0dXJuX2hvb2tlcl0gInIiIChyZXR1cm5faG9va2VyKQorCQk6ICJtZW1vcnkiCisJKTsKKworCWlmICh1bmxpa2VseShmYXVsdGVkKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCisJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCQkqcGFyZW50ID0gb2xkOworCQlyZXR1cm47CisJfQorCisJdHJhY2UuZnVuYyA9IHNlbGZfYWRkcjsKKworCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0byAqLworCWlmICghZnRyYWNlX2dyYXBoX2VudHJ5KCZ0cmFjZSkpIHsKKwkJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKwkJKnBhcmVudCA9IG9sZDsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBkNzk0YTYzLi41NGU2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTA4LDE4ICsxMDgsMjEgQEAKICAqIGJlY2F1c2UgT0YgbWF5IGhhdmUgSS9PIGRldmljZXMgbWFwcGVkIGludG8gdGhhdCBhcmVhCiAgKiAocGFydGljdWxhcmx5IG9uIENIUlApLgogICovCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJY21wd2kJMCxyNSwwCiAJYmVxCTFmCiAKKyNpZmRlZiBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORQogCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KIAliY2wJMjAsMzEsJCs0CiAwOgltZmxyCXI4CQkJLyogcjggPSBydW50aW1lIGFkZHIgaGVyZSAqLwogCWFkZGlzCXI4LHI4LChfc3RleHQgLSAwYilAaGEKIAlhZGRpCXI4LHI4LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCiAJYmwJcHJvbV9pbml0CisjZW5kaWYgLyogQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKLSNlbmRpZgogCiAvKgogICogQ2hlY2sgZm9yIEJvb3RYIHNpZ25hdHVyZSB3aGVuIHN1cHBvcnRpbmcgUG93ZXJNYWMgYW5kIGJyYW5jaCB0bwpAQCAtNDcyLDEyICs0NzUsMTEgQEAKIAkuID0gMHgxMDAwCiBJbnN0cnVjdGlvblRMQk1pc3M6CiAvKgotICogcjA6CXN0b3JlZCBjdHIKKyAqIHIwOglzY3JhdGNoCiAgKiByMToJbGludXggc3R5bGUgcHRlICggbGF0ZXIgYmVjb21lcyBwcGMgaGFyZHdhcmUgcHRlICkKICAqIHIyOglwdHIgdG8gbGludXgtc3R5bGUgcHRlCiAgKiByMzoJc2NyYXRjaAogICovCi0JbWZjdHIJcjAKIAkvKiBHZXQgUFRFIChsaW51eC1zdHlsZSkgYW5kIGNoZWNrIGFjY2VzcyAqLwogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAlsaXMJcjEsUEFHRV9PRkZTRVRAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KQEAgLTQ5NiwyOCArNDk4LDI3IEBACiAJcmx3aW5tLglyMixyMiwwLDAsMTkJCS8qIGV4dHJhY3QgYWRkcmVzcyBvZiBwdGUgcGFnZSAqLwogCWJlcS0JSW5zdHJ1Y3Rpb25BZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlJbnN0cnVjdGlvbkFkZHJlc3NJbnZhbGlkIC8qIHJldHVybiBpZiBhY2Nlc3Mgbm90IHBlcm1pdHRlZCAqLwotCW9yaQlyMyxyMyxfUEFHRV9BQ0NFU1NFRAkvKiBzZXQgX1BBR0VfQUNDRVNTRUQgaW4gcHRlICovCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KIAkvKgogCSAqIE5PVEUhIFdlIGFyZSBhc3N1bWluZyB0aGlzIGlzIG5vdCBhbiBTTVAgc3lzdGVtLCBvdGhlcndpc2UKIAkgKiB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSB0aGUgcHRlIGF0b21pY2FsbHkgd2l0aCBsd2FyeC9zdHdjeC4KIAkgKi8KLQlzdHcJcjMsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KKwlzdHcJcjAsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW5tCXIxLHIzLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLwotCXJsd2lubQlyMixyMywzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMSxyMCwzMi0xMCwzMSwzMQkvKiBfUEFHRV9SVyAtPiBQUCBsc2IgKi8KKwlybHdpbm0JcjIscjAsMzItNywzMSwzMQkvKiBfUEFHRV9ESVJUWSAtPiBQUCBsc2IgKi8KIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLworCXJsd2ltaQlyMCxyMCwzMi0xLDMwLDMwCS8qIF9QQUdFX1VTRVIgLT4gUFAgbXNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCi0JYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCisJYW5kYwlyMSxyMCxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCiBCRUdJTl9GVFJfU0VDVElPTgogCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQotCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwogCW1mc3ByCXIzLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLwogCW10Y3JmCTB4ODAscjMKQEAgLTUyOCw3ICs1MjksNiBAQAogCiAJYWRkaXMJcjEscjEsMHgyMDAwCiAJbXRzcHIJU1BSTl9EU0lTUixyMQkvKiAoc2hvdWxkbid0IGJlIG5lZWRlZCkgKi8KLQltdGN0cglyMAkJLyogUmVzdG9yZSBDVFIgKi8KIAlhbmRpLglyMixyMywweEZGRkYJLyogQ2xlYXIgdXBwZXIgYml0cyBvZiBTUlIxICovCiAJb3IJcjIscjIscjEKIAltdHNwcglTUFJOX1NSUjEscjIKQEAgLTU0OSwxMiArNTQ5LDExIEBACiAJLiA9IDB4MTEwMAogRGF0YUxvYWRUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC01NzMsMzggKzU3Miw0OCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KKwlvcmkJcjAscjAsX1BBR0VfQUNDRVNTRUQJLyogc2V0IF9QQUdFX0FDQ0VTU0VEIGluIHB0ZSAqLwogCS8qCiAJICogTk9URSEgV2UgYXJlIGFzc3VtaW5nIHRoaXMgaXMgbm90IGFuIFNNUCBzeXN0ZW0sIG90aGVyd2lzZQogCSAqIHdlIHdvdWxkIG5lZWQgdG8gdXBkYXRlIHRoZSBwdGUgYXRvbWljYWxseSB3aXRoIGx3YXJ4L3N0d2N4LgogCSAqLwotCXN0dwlyMywwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLwogCS8qIENvbnZlcnQgbGludXgtc3R5bGUgUFRFIHRvIGxvdyB3b3JkIG9mIFBQQy1zdHlsZSBQVEUgKi8KLQlybHdpbm0JcjEscjMsMzItMTAsMzEsMzEJLyogX1BBR0VfUlcgLT4gUFAgbHNiICovCi0Jcmx3aW5tCXIyLHIzLDMyLTcsMzEsMzEJLyogX1BBR0VfRElSVFkgLT4gUFAgbHNiICovCisJcmx3aW5tCXIxLHIwLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMixyMCwzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLwogCWFuZAlyMSxyMSxyMgkJLyogd3JpdGFibGUgaWYgX1JXIGFuZCBfRElSVFkgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwotCXJsd2ltaQlyMyxyMywzMi0xLDMxLDMxCS8qIF9QQUdFX1VTRVIgLT4gUFAgbHNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwogCW9yaQlyMSxyMSwweGUwNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgKi8KLQlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KKwlhbmRjCXIxLHIwLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KIEJFR0lOX0ZUUl9TRUNUSU9OCiAJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCi0JbWZzcHIJcjMsU1BSTl9ETUlTUworCW1mc3ByCXIyLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLworCW10Y3JmCTB4ODAscjIKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIwLDEKKwltZnNwcglyMSxTUFJOX1NQUkc0CisJcmx3aW5tCXIyLHIzLDIwLDI3LDMxCQkvKiBHZXQgQWRkcmVzcyBiaXRzIDE1OjE5ICovCisJc2x3CXIwLHIwLHIyCisJeG9yCXIxLHIwLHIxCisJc3J3CXIwLHIxLHIyCisJbXRzcHIgICBTUFJOX1NQUkc0LHIxCisJbWZzcHIJcjIsU1BSTl9TUlIxCisJcmx3aW1pCXIyLHIwLDMxLTE0LDE0LDE0CisJbXRzcHIgICBTUFJOX1NSUjEscjIKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVKQogCXRsYmxkCXIzCi0JbWZzcHIJcjMsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCi0JbXRjcmYJMHg4MCxyMwogCXJmaQogRGF0YUFkZHJlc3NJbnZhbGlkOgogCW1mc3ByCXIzLFNQUk5fU1JSMQogCXJsd2lubQlyMSxyMyw5LDYsNgkvKiBHZXQgbG9hZC9zdG9yZSBiaXQgKi8KIAlhZGRpcwlyMSxyMSwweDIwMDAKIAltdHNwcglTUFJOX0RTSVNSLHIxCi0JbXRjdHIJcjAJCS8qIFJlc3RvcmUgQ1RSICovCiAJYW5kaS4JcjIscjMsMHhGRkZGCS8qIENsZWFyIHVwcGVyIGJpdHMgb2YgU1JSMSAqLwogCW10c3ByCVNQUk5fU1JSMSxyMgogCW1mc3ByCXIxLFNQUk5fRE1JU1MJLyogR2V0IGZhaWxpbmcgYWRkcmVzcyAqLwpAQCAtNjI0LDEyICs2MzMsMTEgQEAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC02NDgsMjcgKzY1NiwzOCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCiAJLyoKIAkgKiBOT1RFISBXZSBhcmUgYXNzdW1pbmcgdGhpcyBpcyBub3QgYW4gU01QIHN5c3RlbSwgb3RoZXJ3aXNlCiAJICogd2Ugd291bGQgbmVlZCB0byB1cGRhdGUgdGhlIHB0ZSBhdG9taWNhbGx5IHdpdGggbHdhcngvc3R3Y3guCiAJICovCi0Jc3R3CXIzLDAocjIpCQkvKiB1cGRhdGUgUFRFIChhY2Nlc3NlZC9kaXJ0eSBiaXRzKSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQvZGlydHkgYml0cykgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwogCWxpCXIxLDB4ZTA1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAmIFBQIGxzYiAqLwotCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLworCWFuZGMJcjEscjAscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLwogQkVHSU5fRlRSX1NFQ1RJT04KIAlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKLQltZnNwcglyMyxTUFJOX0RNSVNTCisJbWZzcHIJcjIsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCisJbXRjcmYJMHg4MCxyMgorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJbGkJcjAsMQorCW1mc3ByCXIxLFNQUk5fU1BSRzQKKwlybHdpbm0JcjIscjMsMjAsMjcsMzEJCS8qIEdldCBBZGRyZXNzIGJpdHMgMTU6MTkgKi8KKwlzbHcJcjAscjAscjIKKwl4b3IJcjEscjAscjEKKwlzcncJcjAscjEscjIKKwltdHNwciAgIFNQUk5fU1BSRzQscjEKKwltZnNwcglyMixTUFJOX1NSUjEKKwlybHdpbWkJcjIscjAsMzEtMTQsMTQsMTQKKwltdHNwciAgIFNQUk5fU1JSMSxyMgorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX05FRURfRFRMQl9TV19MUlUpCiAJdGxibGQJcjMKLQltZnNwcglyMyxTUFJOX1NSUjEJCS8qIE5lZWQgdG8gcmVzdG9yZSBDUjAgKi8KLQltdGNyZgkweDgwLHIzCiAJcmZpCiAKICNpZm5kZWYgQ09ORklHX0FMVElWRUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZWJhZWRhZi4uNTBlZjUwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAJYgkuX19hZnRlcl9wcm9tX3N0YXJ0CiAKIF9JTklUX1NUQVRJQyhfX2Jvb3RfZnJvbV9wcm9tKQorI2lmZGVmIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FCiAJLyogU2F2ZSBwYXJhbWV0ZXJzICovCiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CkBAIC0xMzkwLDcgKzEzOTEsMTAgQEAKIAkvKiBEbyBhbGwgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggT0YgY2xpZW50IGludGVyZmFjZSAqLwogCW1yCXI4LHIyNgogCWJsCS5wcm9tX2luaXQKLQkvKiBXZSBuZXZlciByZXR1cm4gKi8KKyNlbmRpZiAvKiAjQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGZjZTJkZjkuLjk1ZjM5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC0xMCw2ICsxMCwxNSBAQAogCQltdHNwcglTUFJOX0lWT1IjI3ZlY3Rvcl9udW1iZXIscjI2OwlcCiAJCXN5bmMKIAorI2lmIChUSFJFQURfU0hJRlQgPCAxNSkKKyNkZWZpbmUgQUxMT0NfU1RBQ0tfRlJBTUUocmVnLCB2YWwpCQkJXAorCWFkZGkgcmVnLHJlZyx2YWwKKyNlbHNlCisjZGVmaW5lIEFMTE9DX1NUQUNLX0ZSQU1FKHJlZywgdmFsKQkJCVwKKwlhZGRpcwlyZWcscmVnLHZhbEBoYTsJCQkJXAorCWFkZGkJcmVnLHJlZyx2YWxAbAorI2VuZGlmCisKICNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cJCQkJCQkgICAgIFwKIAltdHNwcglTUFJOX1NQUkcwLHIxMDsJCS8qIHNhdmUgdHdvIHJlZ2lzdGVycyB0byB3b3JrIHdpdGggKi9cCiAJbXRzcHIJU1BSTl9TUFJHMSxyMTE7CQkJCQkJICAgICBcCkBAIC0yMCw3ICsyOSw3IEBACiAJYmVxCTFmOwkJCQkJCQkgICAgIFwKIAltZnNwcglyMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKIAlsd3oJcjEsVEhSRUFEX0lORk8tVEhSRUFEKHIxKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgICAqL1wKLQlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFOwkJCQkJICAgICBcCisJQUxMT0NfU1RBQ0tfRlJBTUUocjEsIFRIUkVBRF9TSVpFKTsJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXAogCW1yCXIxMSxyMTsJCQkJCQkJICAgICBcCiAJc3R3CXIxMCxfQ0NSKHIxMSk7ICAgICAgICAgIC8qIHNhdmUgdmFyaW91cyByZWdpc3RlcnMJICAgKi9cCkBAIC03MCwxMCArNzksMTAgQEAKIAogLyogb25seSBvbiBlNTAwbWMvZTIwMCAqLwogI2RlZmluZSBERUJVR19TVEFDS19CQVNFCWRiZ2lycV9jdHgKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5Ci0jZWxzZQorI2lmZGVmIENPTkZJR19FMjAwCiAjZGVmaW5lIERFQlVHX1NQUkcJCVNQUk5fU1BSRzZXCisjZWxzZQorI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5CiAjZW5kaWYKIAogI2RlZmluZSBFWENfTFZMX0ZSQU1FX09WRVJIRUFECShUSFJFQURfU0laRSAtIElOVF9GUkFNRV9TSVpFIC0gRVhDX0xWTF9TSVpFKQpAQCAtMjc5LDcgKzI4OCw3IEBACiAJbHd6CXIxMSxHUFIxMShyOCk7CQkJCQkJICAgICAgXAogCW1mc3ByCXI4LERFQlVHX1NQUkc7CQkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAotCVJGREk7CQkJCQkJCQkgICAgICBcCisJUFBDX1JGREk7CQkJCQkJCQkgICAgICBcCiAJYgkuOwkJCQkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAJLyogY29udGludWUgbm9ybWFsIGhhbmRsaW5nIGZvciBhIGRlYnVnIGV4Y2VwdGlvbi4uLiAqLwkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDM2ZmZiMzUuLjRjMjI2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTEwMywxMCArMTAzLDE1IEBACiAJb3IJcjcscjcscjQKIAltdHNwcglTUFJOX01BUzYscjcKIAl0bGJzeAkwLHI2CQkJCS8qIHNlYXJjaCBNU1JbSVNdLCBTUElEPVBJRDAgKi8KLSNpZm5kZWYgQ09ORklHX0UyMDAKIAltZnNwcglyNyxTUFJOX01BUzEKIAlhbmRpcy4JcjcscjcsTUFTMV9WQUxJREBoCiAJYm5lCW1hdGNoX1RMQgorCisJbWZzcHIJcjcsU1BSTl9NTVVDRkcKKwlybHdpbm0JcjcscjcsMjEsMjgsMzEJCQkvKiBleHRyYWN0IE1NVUNGR1tOUElEU10gKi8KKwljbXB3aQlyNywzCisJYm5lCW1hdGNoX1RMQgkJCS8qIHNraXAgaWYgTlBJRFMgIT0gMyAqLworCiAJbWZzcHIJcjcsU1BSTl9QSUQxCiAJc2x3aQlyNyxyNywxNgogCW9yCXI3LHI3LHI0CkBAIC0xMjAsNyArMTI1LDcgQEAKIAlvcglyNyxyNyxyNAogCW10c3ByCVNQUk5fTUFTNixyNwogCXRsYnN4CTAscjYJCQkJLyogRmFsbCB0aHJvdWdoLCB3ZSBoYWQgdG8gbWF0Y2ggKi8KLSNlbmRpZgorCiBtYXRjaF9UTEI6CiAJbWZzcHIJcjcsU1BSTl9NQVMwCiAJcmx3aW5tCXIzLHI3LDE2LDIwLDMxCQkJLyogRXh0cmFjdCBNQVMwKEVudHJ5KSAqLwpAQCAtMTY4LDcgKzE3Myw3IEBACiAKIAkvKiBncmFiIGFuZCBmaXh1cCB0aGUgUlBOICovCiAJbWZzcHIJcjYsU1BSTl9NQVMxCS8qIGV4dHJhY3QgTUFTMVtTSVpFXSAqLwotCXJsd2lubQlyNixyNiwyNSwyNywzMAorCXJsd2lubQlyNixyNiwyNSwyNywzMQogCWxpCXI4LC0xCiAJYWRkaQlyNixyNiwxMAogCXNsdwlyNixyOCxyNgkvKiBjb252ZXJ0IHRvIG1hc2sgKi8KQEAgLTE5NCw3ICsxOTksNyBAQAogCXhvcmkJcjYscjQsMQkJLyogU2V0dXAgVE1QIG1hcHBpbmcgaW4gdGhlIG90aGVyIEFkZHJlc3Mgc3BhY2UgKi8KIAlzbHdpCXI2LHI2LDEyCiAJb3JpcwlyNixyNiwoTUFTMV9WQUxJRHxNQVMxX0lQUk9UKUBoCi0Jb3JpCXI2LHI2LChNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzEscjYKIAltZnNwcglyNixTUFJOX01BUzIKIAlsaQlyNywwCQkvKiB0ZW1wIEVQTiA9IDAgKi8KQEAgLTIxNSwxNCArMjIwLDE5IEBACiAKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCisJbXRzcHIgICBTUFJOX01BUzYscjYKIAltdHNwcglTUFJOX1BJRDAscjYKLSNpZm5kZWYgQ09ORklHX0UyMDAKKworCW1mc3ByCXI3LFNQUk5fTU1VQ0ZHCisJcmx3aW5tCXI3LHI3LDIxLDI4LDMxCQkJLyogZXh0cmFjdCBNTVVDRkdbTlBJRFNdICovCisJY21wd2kJcjcsMworCWJuZQkyZgkJCQkvKiBza2lwIGlmIE5QSURTICE9IDMgKi8KKwogCW10c3ByCVNQUk5fUElEMSxyNgogCW10c3ByCVNQUk5fUElEMixyNgotI2VuZGlmCi0JbXRzcHIJU1BSTl9NQVM2LHI2CiAKIC8qIDUuIEludmFsaWRhdGUgbWFwcGluZyB3ZSBzdGFydGVkIGluICovCisyOgogCWxpcwlyNywweDEwMDAJLyogU2V0IE1BUzAoVExCU0VMKSA9IDEgKi8KIAlybHdpbWkJcjcscjMsMTYsNCwxNQkvKiBTZXR1cCBNQVMwID0gVExCU0VMIHwgRVNFTChyMykgKi8KIAltdHNwcglTUFJOX01BUzAscjcKQEAgLTI0NywxMCArMjU3LDEwIEBACiAJbGlzCXI2LDB4MTAwMAkJLyogU2V0IE1BUzAoVExCU0VMKSA9IFRMQjEoMSksIEVTRUwgPSAwICovCiAJbXRzcHIJU1BSTl9NQVMwLHI2CiAJbGlzCXI2LChNQVMxX1ZBTElEfE1BUzFfSVBST1QpQGgKLQlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzY0TSkpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl82NE0pKUBsCiAJbXRzcHIJU1BSTl9NQVMxLHI2Ci0JbGlzCXI2LE1BUzJfVkFMKFBBR0VfT0ZGU0VULCBCT09LRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAotCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PS0VfUEFHRVNaXzY0TSwgTV9JRl9TTVApQGwKKwlsaXMJcjYsTUFTMl9WQUwoUEFHRV9PRkZTRVQsIEJPT0szRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAorCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PSzNFX1BBR0VTWl82NE0sIE1fSUZfU01QKUBsCiAJbXRzcHIJU1BSTl9NQVMyLHI2CiAJbXRzcHIJU1BSTl9NQVMzLHI4CiAJdGxid2UKQEAgLTI5OCwyNiArMzA4LDE0IEBACiAJU0VUX0lWT1IoMTIsIFdhdGNoZG9nVGltZXIpOwogCVNFVF9JVk9SKDEzLCBEYXRhVExCRXJyb3IpOwogCVNFVF9JVk9SKDE0LCBJbnN0cnVjdGlvblRMQkVycm9yKTsKLQlTRVRfSVZPUigxNSwgRGVidWdEZWJ1Zyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJU0VUX0lWT1IoMTUsIERlYnVnQ3JpdCk7Ci0jZW5kaWYKLQlTRVRfSVZPUigzMiwgU1BFVW5hdmFpbGFibGUpOwotCVNFVF9JVk9SKDMzLCBTUEVGbG9hdGluZ1BvaW50RGF0YSk7Ci0JU0VUX0lWT1IoMzQsIFNQRUZsb2F0aW5nUG9pbnRSb3VuZCk7Ci0jaWZuZGVmIENPTkZJR19FMjAwCi0JU0VUX0lWT1IoMzUsIFBlcmZvcm1hbmNlTW9uaXRvcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotCVNFVF9JVk9SKDM2LCBEb29yYmVsbCk7Ci0jZW5kaWYKIAogCS8qIEVzdGFibGlzaCB0aGUgaW50ZXJydXB0IHZlY3RvciBiYXNlICovCiAJbGlzCXI0LGludGVycnVwdF9iYXNlQGgJLyogSVZQUiBvbmx5IHVzZXMgdGhlIGhpZ2ggMTYtYml0cyAqLwogCW10c3ByCVNQUk5fSVZQUixyNAogCiAJLyogU2V0dXAgdGhlIGRlZmF1bHRzIGZvciBUTEIgZW50cmllcyAqLwotCWxpCXIyLChNQVM0X1RTSVpFRChCT09LRV9QQUdFU1pfNEspKUBsCisJbGkJcjIsKE1BUzRfVFNJWkVEKEJPT0szRV9QQUdFU1pfNEspKUBsCiAjaWZkZWYgQ09ORklHX0UyMDAKIAlvcmlzCXIyLHIyLE1BUzRfVExCU0VMRCgxKUBoCiAjZW5kaWYKQEAgLTMyOSwxMiArMzI3LDYgQEAKIAlvcmlzCXIyLHIyLEhJRDBfRE9aRUBoCiAJbXRzcHIJU1BSTl9ISUQwLCByMgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0UyMDAKLQkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KLQltZnNwcglyMixTUFJOX0hJRDAKLQlvcmkJcjIscjIsSElEMF9EQVBVRU5AbAotCW10c3ByCVNQUk5fSElEMCxyMgotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkKIAkvKgpAQCAtNzA2LDE1ICs2OTgsMTMgQEAKIAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICovCiAJRVhDRVBUSU9OKDB4MjA2MCwgUGVyZm9ybWFuY2VNb25pdG9yLCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbiwgRVhDX1hGRVJfU1REKQogCi0jaWZkZWYgQ09ORklHX1BQQ19FNTAwTUMKLQlFWENFUFRJT04oMHgyMDcwLCBEb29yYmVsbCwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKLSNlbmRpZgorCUVYQ0VQVElPTigweDIwNzAsIERvb3JiZWxsLCBkb29yYmVsbF9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKKworCUNSSVRJQ0FMX0VYQ0VQVElPTigweDIwODAsIENyaXRpY2FsRG9vcmJlbGwsIHVua25vd25fZXhjZXB0aW9uKQogCiAJLyogRGVidWcgSW50ZXJydXB0ICovCiAJREVCVUdfREVCVUdfRVhDRVBUSU9OCi0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJREVCVUdfQ1JJVF9FWENFUFRJT04KLSNlbmRpZgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCkBAIC04OTcsNiArODg3LDQ3IEBACiAgKiBHbG9iYWwgZnVuY3Rpb25zCiAgKi8KIAorLyogQWRqdXN0IG9yIHNldHVwIElWT1JzIGZvciBlMjAwICovCitfR0xPQkFMKF9fc2V0dXBfZTIwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0RlYnVnQGwKKwltdHNwcglTUFJOX0lWT1IxNSxyMworCWxpCXIzLFNQRVVuYXZhaWxhYmxlQGwKKwltdHNwcglTUFJOX0lWT1IzMixyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnREYXRhQGwKKwltdHNwcglTUFJOX0lWT1IzMyxyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnRSb3VuZEBsCisJbXRzcHIJU1BSTl9JVk9SMzQscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMHYxL3YyICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0NyaXRAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsU1BFVW5hdmFpbGFibGVAbAorCW10c3ByCVNQUk5fSVZPUjMyLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludERhdGFAbAorCW10c3ByCVNQUk5fSVZPUjMzLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludFJvdW5kQGwKKwltdHNwcglTUFJOX0lWT1IzNCxyMworCWxpCXIzLFBlcmZvcm1hbmNlTW9uaXRvckBsCisJbXRzcHIJU1BSTl9JVk9SMzUscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMG1jICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMG1jX2l2b3JzKQorCWxpCXIzLERlYnVnRGVidWdAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsUGVyZm9ybWFuY2VNb25pdG9yQGwKKwltdHNwcglTUFJOX0lWT1IzNSxyMworCWxpCXIzLERvb3JiZWxsQGwKKwltdHNwcglTUFJOX0lWT1IzNixyMworCWxpCXIzLENyaXRpY2FsRG9vcmJlbGxAbAorCW10c3ByCVNQUk5fSVZPUjM3LHIzCisJc3luYworCWJscgorCiAvKgogICogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpCiAgKgpAQCAtMTA4OSw3ICsxMTIwLDcgQEAKIAltdHNwcglTUFJOX1NQUkczLHI0CiAKIAkvKiBTZXR1cCB0aGUgZGVmYXVsdHMgZm9yIFRMQiBlbnRyaWVzICovCi0JbGkJcjQsKE1BUzRfVFNJWkVEKEJPT0tFX1BBR0VTWl80SykpQGwKKwlsaQlyNCwoTUFTNF9UU0laRUQoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzQscjQKIAogCS8qIEp1bXAgdG8gc3RhcnRfc2Vjb25kYXJ5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAxYjU1ZmZkLi41NTc2MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogewogCWludCBpID0gKihsb2ZmX3QgKil2LCBqOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIHN0YXRpYyBpbnQgdmlycV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlycV9kZXNjX3QgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IGNoYXIgKnA7CiAJY2hhciBub25lW10gPSAibm9uZSI7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA4OTkyYjAzLi44ZmJiMTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTMyOSw3ICszMjksNyBAQAogICAgcmVzdG9yZSByMi4gKi8KIHN0YXRpYyBpbnQgcmVzdG9yZV9yMih1MzIgKmluc3RydWN0aW9uLCBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19JTlNUX05PUCkgewogCQlwcmludGsoIiVzOiBFeHBlY3Qgbm9vcCBhZnRlciByZWxvY2F0ZSwgZ290ICUwOHhcbiIsCiAJCSAgICAgICBtZS0+bmFtZSwgKmluc3RydWN0aW9uKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21zaS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tc2kuYwppbmRleCAzYmI3ZDNkLi44YmJjMTJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXNpLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKQEAgLTE5LDYgKzIwLDEwIEBACiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAorCS8qIFBvd2VyUEMgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIE1TSSB5ZXQgKi8KKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSSAmJiBudmVjID4gMSkKKwkJcmV0dXJuIDE7CisKIAlpZiAocHBjX21kLm1zaV9jaGVja19kZXZpY2UpIHsKIAkJcHJfZGVidWcoIm1zaTogVXNpbmcgcGxhdGZvcm0gY2hlY2sgcm91dGluZS5cbiIpOwogCQlyZXR1cm4gcHBjX21kLm1zaV9jaGVja19kZXZpY2UoZGV2LCBudmVjLCB0eXBlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggMGY0MTgxMi4uOWM2OWU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxhc20vZWVoLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaG9zZV9zcGlubG9jayk7CitMSVNUX0hFQUQoaG9zZV9saXN0KTsKIAogLyogWFhYIGtpbGwgdGhhdCBzb21lIGRheSAuLi4gKi8KIHN0YXRpYyBpbnQgZ2xvYmFsX3BoYl9udW1iZXI7CQkvKiBHbG9iYWwgcGhiIGNvdW50ZXIgKi8KQEAgLTQ5LDcgKzUwLDcgQEAKIHVuc2lnbmVkIGludCBwcGNfcGNpX2ZsYWdzID0gMDsKIAogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHM7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqcGNpX2RtYV9vcHMgPSAmZG1hX2RpcmVjdF9vcHM7CiAKIHZvaWQgc2V0X3BjaV9kbWFfb3BzKHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMpCiB7CkBAIC0xMTMsMTkgKzExNCwyNCBAQAogCQlrZnJlZShwaGIpOwogfQogCitzdGF0aWMgcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfaW9fc2l6ZShjb25zdCBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJcmV0dXJuIGhvc2UtPnBjaV9pb19zaXplOworI2Vsc2UKKwlyZXR1cm4gaG9zZS0+aW9fcmVzb3VyY2UuZW5kIC0gaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKyAxOworI2VuZGlmCit9CisKIGludCBwY2liaW9zX3ZhZGRyX2lzX2lvcG9ydCh2b2lkIF9faW9tZW0gKmFkZHJlc3MpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3Qgc2l6ZTsKIAogCXNwaW5fbG9jaygmaG9zZV9zcGlubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob3NlLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJc2l6ZSA9IGhvc2UtPnBjaV9pb19zaXplOwotI2Vsc2UKLQkJc2l6ZSA9IGhvc2UtPmlvX3Jlc291cmNlLmVuZCAtIGhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0ICsgMTsKLSNlbmRpZgorCQlzaXplID0gcGNpYmlvc19pb19zaXplKGhvc2UpOwogCQlpZiAoYWRkcmVzcyA+PSBob3NlLT5pb19iYXNlX3ZpcnQgJiYKIAkJICAgIGFkZHJlc3MgPCAoaG9zZS0+aW9fYmFzZV92aXJ0ICsgc2l6ZSkpIHsKIAkJCXJldCA9IDE7CkBAIC0xMzYsNiArMTQyLDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAordW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CisJdW5zaWduZWQgbG9uZyByZXQgPSB+MDsKKworCXNwaW5fbG9jaygmaG9zZV9zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShob3NlLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKKwkJc2l6ZSA9IHBjaWJpb3NfaW9fc2l6ZShob3NlKTsKKwkJaWYgKGFkZHJlc3MgPj0gaG9zZS0+aW9fYmFzZV9waHlzICYmCisJCSAgICBhZGRyZXNzIDwgKGhvc2UtPmlvX2Jhc2VfcGh5cyArIHNpemUpKSB7CisJCQl1bnNpZ25lZCBsb25nIGJhc2UgPQorCQkJCSh1bnNpZ25lZCBsb25nKWhvc2UtPmlvX2Jhc2VfdmlydCAtIF9JT19CQVNFOworCQkJcmV0ID0gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZob3NlX3NwaW5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfYWRkcmVzc190b19waW8pOworCiAvKgogICogUmV0dXJuIHRoZSBkb21haW4gbnVtYmVyIGZvciB0aGlzIGJ1cy4KICAqLwpAQCAtMTQ1Myw3ICsxNDgyLDcgQEAKIAkgKiB3ZSBwcm9jZWVkIHRvIGFzc2lnbmluZyB0aGluZ3MgdGhhdCB3ZXJlIGxlZnQgdW5hc3NpZ25lZAogCSAqLwogCWlmICghKHBwY19wY2lfZmxhZ3MgJiBQUENfUENJX1BST0JFX09OTFkpKSB7Ci0JCXByX2RlYnVnKCJQQ0k6IEFzc2lnbmluZyB1bmFzc2lnbmVkIHJlc291Y2VzLi4uXG4iKTsKKwkJcHJfZGVidWcoIlBDSTogQXNzaWduaW5nIHVuYXNzaWduZWQgcmVzb3VyY2VzLi4uXG4iKTsKIAkJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcygpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKaW5kZXggMTMyY2Q4MC4uZDQ3MzYzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KQEAgLTQzLDggKzQ0LDYgQEAKICAqLwogc3RhdGljIGludCBwY2lfYXNzaWduX2FsbF9idXNlczsKIAotTElTVF9IRUFEKGhvc2VfbGlzdCk7Ci0KIHN0YXRpYyBpbnQgcGNpX2J1c19jb3VudDsKIAogLyogVGhpcyB3aWxsIHJlbWFpbiBOVUxMIGZvciBub3csIHVudGlsIGlzYS1icmlkZ2UuYyBpcyBtYWRlIGNvbW1vbgpAQCAtMjE5LDE2ICsyMTgsMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKnNjYW5fT0ZfZm9yX3BjaV9kZXYoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqY25wOwogCWNvbnN0IHUzMiAqcmVnOwogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAogCWZvcl9lYWNoX2NoaWxkX29mX25vZGUocGFyZW50LCBucCkgewogCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCAmcHNpemUpOwotCQlpZiAocmVnID09IE5VTEwgfHwgcHNpemUgPCA0KQotCQkJY29udGludWU7Ci0JCWlmICgoKHJlZ1swXSA+PiA4KSAmIDB4ZmYpID09IGRldmZuKQorICAgICAgICAgICAgICAgIGlmIChyZWcgJiYgcHNpemUgPj0gNCAmJiAoKHJlZ1swXSA+PiA4KSAmIDB4ZmYpID09IGRldmZuKQogCQkJcmV0dXJuIG5wOworCisJCS8qIE5vdGU6IHNvbWUgT0ZzIGNyZWF0ZSBhIHBhcmVudCBub2RlICJtdWx0aWZ1bmMtZGV2aWNlIiBhcworCQkgKiBhIGZha2Ugcm9vdCBmb3IgYWxsIGZ1bmN0aW9ucyBvZiBhIG11bHRpLWZ1bmN0aW9uIGRldmljZSwKKwkJICogd2UgZ28gZG93biB0aGVtIGFzIHdlbGwuICovCisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAobnAtPm5hbWUsICJtdWx0aWZ1bmMtZGV2aWNlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNucCA9IHNjYW5fT0ZfZm9yX3BjaV9kZXYobnAsIGRldmZuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbnA7CisgICAgICAgICAgICAgICAgfQogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTQ5MSwyNCArNDk3LDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi11bnNpZ25lZCBsb25nIHBjaV9hZGRyZXNzX3RvX3BpbyhwaHlzX2FkZHJfdCBhZGRyZXNzKQotewotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob3NlLCB0bXAsICZob3NlX2xpc3QsIGxpc3Rfbm9kZSkgewotCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IGhvc2UtPmlvX3Jlc291cmNlLmVuZCAtCi0JCQlob3NlLT5pb19yZXNvdXJjZS5zdGFydCArIDE7Ci0JCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgotCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBzaXplKSkgewotCQkJdW5zaWduZWQgbG9uZyBiYXNlID0KLQkJCQkodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKLQkJCXJldHVybiBiYXNlICsgKGFkZHJlc3MgLSBob3NlLT5pb19iYXNlX3BoeXMpOwotCQl9Ci0JfQotCXJldHVybiAodW5zaWduZWQgaW50KS0xOwotfQotRVhQT1JUX1NZTUJPTChwY2lfYWRkcmVzc190b19waW8pOwotCiAvKgogICogTnVsbCBQQ0kgY29uZmlnIGFjY2VzcyBmdW5jdGlvbnMsIGZvciB0aGUgY2FzZSB3aGVuIHdlIGNhbid0CiAgKiBmaW5kIGEgaG9zZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCmluZGV4IGVhOGVkYTguLmJlNTc0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwpAQCAtNDMsOCArNDMsNiBAQAogdW5zaWduZWQgbG9uZyBwY2lfaW9fYmFzZSA9IElTQV9JT19CQVNFOwogRVhQT1JUX1NZTUJPTChwY2lfaW9fYmFzZSk7CiAKLUxJU1RfSEVBRChob3NlX2xpc3QpOwotCiBzdGF0aWMgdm9pZCBmaXh1cF9icm9rZW5fcGNuZXQzMihzdHJ1Y3QgcGNpX2RldiogZGV2KQogewogCWlmICgoZGV2LT5jbGFzcz4+OCA9PSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCkpIHsKQEAgLTUyNCwyMyArNTIyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaWJpb3NfbWFwX2lvX3NwYWNlKTsKIAotdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zZSwgdG1wLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKLQkJaWYgKGFkZHJlc3MgPj0gaG9zZS0+aW9fYmFzZV9waHlzICYmCi0JCSAgICBhZGRyZXNzIDwgKGhvc2UtPmlvX2Jhc2VfcGh5cyArIGhvc2UtPnBjaV9pb19zaXplKSkgewotCQkJdW5zaWduZWQgbG9uZyBiYXNlID0KLQkJCQkodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKLQkJCXJldHVybiBiYXNlICsgKGFkZHJlc3MgLSBob3NlLT5pb19iYXNlX3BoeXMpOwotCQl9Ci0JfQotCXJldHVybiAodW5zaWduZWQgaW50KS0xOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZHJlc3NfdG9fcGlvKTsKLQotCiAjZGVmaW5lIElPQkFTRV9CUklER0VfTlVNQkVSCTAKICNkZWZpbmUgSU9CQVNFX01FTU9SWQkJMQogI2RlZmluZSBJT0JBU0VfSU8JCTIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZmI3MDQ5Yy4uN2I0NGEzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMzLDcgKzMzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbXF1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC01OTUsNyArNTk4LDcgQEAKIC8qCiAgKiBDb3B5IGEgdGhyZWFkLi4KICAqLwotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMTAwOCw2ICsxMDExLDE0IEBACiAJdW5zaWduZWQgbG9uZyBzcCwgaXAsIGxyLCBuZXdzcDsKIAlpbnQgY291bnQgPSAwOwogCWludCBmaXJzdGZyYW1lID0gMTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaW50IGN1cnJfZnJhbWUgPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKwlleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworI2VuZGlmCisjZW5kaWYKIAogCXNwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOwogCWlmICh0c2sgPT0gTlVMTCkKQEAgLTEwMzAsNiArMTA0MSwxMyBAQAogCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOwogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQkJcHJpbnRrKCIgKCVwUykiLAorCQkJCSAgICAgICAodm9pZCAqKWN1cnJlbnQtPnJldF9zdGFja1tjdXJyX2ZyYW1lXS5yZXQpOworCQkJCWN1cnJfZnJhbWUtLTsKKwkJCX0KKyNlbmRpZgogCQkJaWYgKGZpcnN0ZnJhbWUpCiAJCQkJcHJpbnRrKCIgKHVucmVsaWFibGUpIik7CiAJCQlwcmludGsoIlxuIik7CkBAIC0xMTIyLDMgKzExNDAsNDMgQEAKIH0KIAogI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKwordW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApCit7CisJaWYgKCEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX05PX1JBTkRPTUlaRSkgJiYgcmFuZG9taXplX3ZhX3NwYWNlKQorCQlzcCAtPSBnZXRfcmFuZG9tX2ludCgpICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gc3AgJiB+MHhmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHJuZCA9IDA7CisKKwkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCisJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDIzLVBBR0VfU0hJRlQpKSk7CisJZWxzZQorCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMzAtUEFHRV9TSElGVCkpKTsKKworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKK30KKwordW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CisKKwlpZiAocmV0IDwgYmFzZSkKKwkJcmV0dXJuIGJhc2U7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmMDBmODMxLi41ZWM2YTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMTA3NSwxMSArMTA3NSw2IEBACiAJCURCRygicmVzZXJ2aW5nOiAlbGx4IC0+ICVsbHhcbiIsIGJhc2UsIHNpemUpOwogCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKIAl9Ci0KLSNpZiAwCi0JREJHKCJtZW1vcnkgcmVzZXJ2ZWQsIGxtYnMgOlxuIik7Ci0gICAgICAJbG1iX2R1bXBfYWxsKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKQEAgLTEyMjEsNiArMTIxNiw3IEBACiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxpbWl0KTsKIAogCWxtYl9hbmFseXplKCk7CisJbG1iX2R1bXBfYWxsKCk7CiAKIAlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggN2YxYjMzZC4uMmUwMjZjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0yMjgzLDYgKzIyODMsOCBAQAogCSAqLwogCXByb21faW5pdF9zdGRvdXQoKTsKIAorCXByb21fcHJpbnRmKCJQcmVwYXJpbmcgdG8gYm9vdCAlcyIsIFJFTE9DKGxpbnV4X2Jhbm5lcikpOworCiAJLyoKIAkgKiBHZXQgZGVmYXVsdCBtYWNoaW5lIHR5cGUuIEF0IHRoaXMgcG9pbnQsIHdlIGRvIG5vdCBkaWZmZXJlbnRpYXRlCiAJICogYmV0d2VlbiBwU2VyaWVzIFNNUCBhbmQgcFNlcmllcyBMUEFSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCmluZGV4IGVhM2EyZWMuLjFhYzEzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCkBAIC0yMCw3ICsyMCw3IEBACiBfZW5kIGVudGVyX3Byb20gbWVtY3B5IG1lbXNldCByZWxvY19vZmZzZXQgX19zZWNvbmRhcnlfaG9sZAogX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIF9fc3RhcnQKIHN0cmNtcCBzdHJjcHkgc3RybGNweSBzdHJsZW4gc3RybmNtcCBzdHJzdHIgbG9nb19saW51eF9jbHV0MjI0Ci1yZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIiCityZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIgbGludXhfYmFubmVyIgogCiBOTT0iJDEiCiBPQko9IiQyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCBmZGZlMTRjLi5lZTRjNzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgewogCWF0b21pY190IHdvcmtpbmc7IC8qIG51bWJlciBvZiBjcHVzIGFjY2Vzc2luZyB0aGlzIHN0cnVjdCAqLworCWF0b21pY190IGRvbmU7CiAJaW50IHRva2VuOyAvKiBpYm0sc3VzcGVuZC1tZSAqLwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7IC8qIHdhaXQgb24gdGhpcyB1bnRpbCB3b3JraW5nID09IDAgKi8KQEAgLTY4OSw3ICs2OTAsNyBAQAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogc3RhdGljIHZvaWQgcnRhc19wZXJjcHVfc3VzcGVuZF9tZSh2b2lkICppbmZvKQogewotCWxvbmcgcmM7CisJbG9uZyByYyA9IEhfU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nIG1zcl9zYXZlOwogCWludCBjcHU7CiAJc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KQEAgLTcwMSw3ICs3MDIsOCBAQAogCW1zcl9zYXZlID0gbWZtc3IoKTsKIAltdG1zcihtc3Jfc2F2ZSAmIH4oTVNSX0VFKSk7CiAKLQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0pPSU4pOworCXdoaWxlIChyYyA9PSBIX1NVQ0NFU1MgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5kb25lKSkKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9KT0lOKTsKIAogCW10bXNyKG1zcl9zYXZlKTsKIApAQCAtNzI0LDYgKzcyNiw5IEBACiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJjKTsKIAkJZGF0YS0+ZXJyb3IgPSByYzsKIAl9CisKKwlhdG9taWNfc2V0KCZkYXRhLT5kb25lLCAxKTsKKwogCS8qIFRoaXMgY3B1IGRpZCB0aGUgc3VzcGVuZCBvciBnb3QgYW4gZXJyb3I7IGluIGVpdGhlciBjYXNlLAogCSAqIHdlIG5lZWQgdG8gcHJvZCBhbGwgb3RoZXIgb3RoZXIgY3B1cyBvdXQgb2Ygam9pbiBzdGF0ZS4KIAkgKiBFeHRyYSBwcm9kcyBhcmUgaGFybWxlc3MuCkBAIC03NjYsNiArNzcxLDcgQEAKIAl9CiAKIAlhdG9taWNfc2V0KCZkYXRhLndvcmtpbmcsIDApOworCWF0b21pY19zZXQoJmRhdGEuZG9uZSwgMCk7CiAJZGF0YS50b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxzdXNwZW5kLW1lIik7CiAJZGF0YS5lcnJvciA9IDA7CiAJZGF0YS5jb21wbGV0ZSA9ICZkb25lOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCAxNDljYjExLi4xMzAxMWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtNjY5LDcgKzY2OSw2IEBACiB7CiAJaWYgKGRwKSB7CiAJCWtmcmVlKGRwLT5kYXRhKTsKLQkJZHAtPm93bmVyID0gTlVMTDsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHAtPm5hbWUsIGRwLT5wYXJlbnQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDcwNWZjNGIuLjk3NzRmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNjY5LDMgKzY3MSwzNyBAQAogfQogYXJjaF9pbml0Y2FsbChwb3dlcnBjX2RlYnVnZnNfaW5pdCk7CiAjZW5kaWYKKworc3RhdGljIGludCBwcGNfZGZsdF9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCS8qIFdlIGFyZSBvbmx5IGludGVyZXRlZCBpbiBkZXZpY2UgYWRkaXRpb24gKi8KKwlpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSkKKwkJcmV0dXJuIDA7CisKKwlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjX2RmbHRfcGxhdF9idXNfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcGNfZGZsdF9idXNfbm90aWZ5LAorCS5wcmlvcml0eSA9IElOVF9NQVgsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwY19kZmx0X29mX2J1c19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBwY19kZmx0X2J1c19ub3RpZnksCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2J1c19ub3RpZmllcih2b2lkKQoreworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZwcGNfZGZsdF9wbGF0X2J1c19ub3RpZmllcik7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJnBwY19kZmx0X29mX2J1c19ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzZXR1cF9idXNfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDJkMzQxOTYuLmM0MTBjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIwMiw4ICsyMDIsNiBAQAogCiAJLyogRml4IHVwIHBhY2EgZmllbGRzIHJlcXVpcmVkIGZvciB0aGUgYm9vdCBjcHUgKi8KIAlnZXRfcGFjYSgpLT5jcHVfc3RhcnQgPSAxOwotCWdldF9wYWNhKCktPnN0YWJfcmVhbCA9IF9fcGEoKHU2NCkmaW5pdGlhbF9zdGFiKTsKLQlnZXRfcGFjYSgpLT5zdGFiX2FkZHIgPSAodTY0KSZpbml0aWFsX3N0YWI7CiAKIAkvKiBQcm9iZSB0aGUgbWFjaGluZSB0eXBlICovCiAJcHJvYmVfbWFjaGluZSgpOwpAQCAtMjEyLDIwICsyMTAsOCBAQAogCiAJREJHKCJGb3VuZCwgSW5pdGlhbGl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50Li4uXG4iKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgTU1VIEhhc2ggdGFibGUgYW5kIGNyZWF0ZSB0aGUgbGluZWFyIG1hcHBpbmcKLQkgKiBvZiBtZW1vcnkuIEhhcyB0byBiZSBkb25lIGJlZm9yZSBzdGFiL3NsYiBpbml0aWFsaXphdGlvbiBhcwotCSAqIHRoaXMgaXMgY3VycmVudGx5IHdoZXJlIHRoZSBwYWdlIHNpemUgZW5jb2RpbmcgaXMgb2J0YWluZWQKLQkgKi8KLQlodGFiX2luaXRpYWxpemUoKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBzdGFiIC8gU0xCIG1hbmFnZW1lbnQgZXhjZXB0IG9uIGlTZXJpZXMKLQkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKLQkJc2xiX2luaXRpYWxpemUoKTsKLQllbHNlIGlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKLQkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfcmVhbCk7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdSgpOwogCiAJREJHKCIgPC0gZWFybHlfc2V0dXAoKVxuIik7CiB9CkBAIC0yMzMsMjIgKzIxOSwxMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgZWFybHlfc2V0dXBfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3RydWN0IHBhY2Ffc3RydWN0ICpscGFjYSA9IGdldF9wYWNhKCk7Ci0KIAkvKiBNYXJrIGludGVycnVwdHMgZW5hYmxlZCBpbiBQQUNBICovCi0JbHBhY2EtPnNvZnRfZW5hYmxlZCA9IDA7CisJZ2V0X3BhY2EoKS0+c29mdF9lbmFibGVkID0gMDsKIAotCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBmb3IgdGhhdCBDUFUgKi8KLQlodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KCk7Ci0KLQkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKLQkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgotCSAqIGlTZXJpZXMgYW55d2F5Ci0JICovCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCi0JCXNsYl9pbml0aWFsaXplKCk7Ci0JZWxzZQotCQlzdGFiX2luaXRpYWxpemUobHBhY2EtPnN0YWJfYWRkcik7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdV9zZWNvbmRhcnkoKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTU3OCwxMyArNTUzLDYgQEAKIAlwcmludGsoIltib290XSUwNHggJXNcbiIsIHNyYywgbXNnKTsKIH0KIAotLyogUHJpbnQgYSB0ZXJtaW5hdGlvbiBtZXNzYWdlIChwcmludCBvbmx5IC0tIGRvZXMgbm90IHN0b3AgdGhlIGtlcm5lbCkgKi8KLXZvaWQgcHBjNjRfdGVybWluYXRlX21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpCi17Ci0JcHBjNjRfZG9fbXNnKFBQQzY0X0xJTlVYX0ZVTkNUSU9OfFBQQzY0X1RFUk1fTUVTU0FHRXxzcmMsIG1zZyk7Ci0JcHJpbnRrKCJbdGVybWluYXRlXSUwNHggJXNcbiIsIHNyYywgbXNnKTsKLX0KLQogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5jcHVfZGllKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYTU0NDA1ZS4uMDBiNTA3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCkBAIC0yNiwxMiArMjYsMTIgQEAKICAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc2lnbmFsIGZyYW1lCiAgKi8KIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgc2l6ZV90IGZyYW1lX3NpemUpCisJCQkgICBzaXplX3QgZnJhbWVfc2l6ZSwgaW50IGlzXzMyKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIG9sZHNwLCBuZXdzcDsKIAogICAgICAgICAvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwotICAgICAgICBvbGRzcCA9IHJlZ3MtPmdwclsxXTsKKyAgICAgICAgb2xkc3AgPSBnZXRfY2xlYW5fc3AocmVncywgaXNfMzIpOwogCiAJLyogQ2hlY2sgZm9yIGFsdCBzdGFjayAqLwogCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5oCmluZGV4IGI0MjdiZjguLjZjMGRkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaApAQCAtMTUsNyArMTUsNyBAQAogZXh0ZXJuIHZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUpOworCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUsIGludCBpc18zMik7CiBleHRlcm4gdm9pZCByZXN0b3JlX3NpZ21hc2soc2lnc2V0X3QgKnNldCk7CiAKIGV4dGVybiBpbnQgaGFuZGxlX3NpZ25hbDMyKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLApAQCAtMzksMjIgKzM5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAotc3RhdGljIGlubGluZSBpbnQgaXNfMzJiaXRfdGFzayh2b2lkKQotewotCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7Ci19Ci0KIGV4dGVybiBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzXzMyYml0X3Rhc2sodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCQkgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggYjEzYWJmMy4uZDY3MDQyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC04MzYsNyArODM2LDcgQEAKIAogCS8qIFNldCB1cCBTaWduYWwgRnJhbWUgKi8KIAkvKiBQdXQgYSBSZWFsIFRpbWUgQ29udGV4dCBvbnRvIHN0YWNrICovCi0JcnRfc2YgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqcnRfc2YpKTsKKwlydF9zZiA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpydF9zZiksIDEpOwogCWFkZHIgPSBydF9zZjsKIAlpZiAodW5saWtlbHkocnRfc2YgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CkBAIC0xMTgyLDcgKzExODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbmV3c3AgPSAwOwogCiAJLyogU2V0IHVwIFNpZ25hbCBGcmFtZSAqLwotCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpLCAxKTsKIAlpZiAodW5saWtlbHkoZnJhbWUgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAJc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICopICZmcmFtZS0+c2N0eDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IGUxMzI4OTEuLjJmZTZmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJdW5zaWduZWQgbG9uZyBuZXdzcCA9IDA7CiAJbG9uZyBlcnIgPSAwOwogCi0JZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSksIDApOwogCWlmICh1bmxpa2VseShmcmFtZSA9PSBOVUxMKSkKIAkJZ290byBiYWRmcmFtZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDRhMmVlMDguLmY0MWFlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTEzNCw0NCArMTM0LDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHBwY19lbmFibGVfcG1jcyk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR182eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQotLyogWFhYIGNvbnZlcnQgdG8gcnVzdHkncyBvbl9vbmVfY3B1ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBydW5fb25fY3B1KHVuc2lnbmVkIGxvbmcgY3B1LAotCQkJICAgICAgICB1bnNpZ25lZCBsb25nICgqZnVuYykodW5zaWduZWQgbG9uZyksCi0JCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JY3B1bWFza190IG9sZF9hZmZpbml0eSA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCS8qIHNob3VsZCByZXR1cm4gLUVJTlZBTCB0byB1c2Vyc3BhY2UgKi8KLQlpZiAoc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBmdW5jKGFyZyk7Ci0KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9hZmZpbml0eSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KICNkZWZpbmUgU1lTRlNfUE1DU0VUVVAoTkFNRSwgQUREUkVTUykgXAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF8jI05BTUUodW5zaWduZWQgbG9uZyBqdW5rKSBcCitzdGF0aWMgdm9pZCByZWFkXyMjTkFNRSh2b2lkICp2YWwpIFwKIHsgXAotCXJldHVybiBtZnNwcihBRERSRVNTKTsgXAorCSoodW5zaWduZWQgbG9uZyAqKXZhbCA9IG1mc3ByKEFERFJFU1MpOwlcCiB9IFwKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlXyMjTkFNRSh1bnNpZ25lZCBsb25nIHZhbCkgXAorc3RhdGljIHZvaWQgd3JpdGVfIyNOQU1FKHZvaWQgKnZhbCkgXAogeyBcCiAJcHBjX2VuYWJsZV9wbWNzKCk7IFwKLQltdHNwcihBRERSRVNTLCB2YWwpOyBcCi0JcmV0dXJuIDA7IFwKKwltdHNwcihBRERSRVNTLCAqKHVuc2lnbmVkIGxvbmcgKil2YWwpOwlcCiB9IFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNOQU1FKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIFwKIAkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBcCiAJCQljaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7IFwKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHJ1bl9vbl9jcHUoY3B1LT5zeXNkZXYuaWQsIHJlYWRfIyNOQU1FLCAwKTsgXAorCXVuc2lnbmVkIGxvbmcgdmFsOyBcCisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdS0+c3lzZGV2LmlkLCByZWFkXyMjTkFNRSwgJnZhbCwgMSk7CVwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHZhbCk7IFwKIH0gXAogc3RhdGljIHNzaXplX3QgX191c2VkIFwKQEAgLTE4Myw3ICsxNjIsNyBAQAogCWludCByZXQgPSBzc2NhbmYoYnVmLCAiJWx4IiwgJnZhbCk7IFwKIAlpZiAocmV0ICE9IDEpIFwKIAkJcmV0dXJuIC1FSU5WQUw7IFwKLQlydW5fb25fY3B1KGNwdS0+c3lzZGV2LmlkLCB3cml0ZV8jI05BTUUsIHZhbCk7IFwKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LT5zeXNkZXYuaWQsIHdyaXRlXyMjTkFNRSwgJnZhbCwgMSk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCBjOTU2NDAzLi45MjZlYTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMTEyNywzICsxMTI3LDE5IEBACiAJZHItPnJlc3VsdF9sb3cgID0gKCh1NjQpeSA8PCAzMikgKyB6OwogCiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCWlmICghcHBjX21kLmdldF9ydGNfdGltZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLWdlbmVyaWMiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQocnRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDU0NTdlOTUuLjY3OGZiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTUyLDYgKzUyLDEwIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKyNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCisjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIGludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTYzNywyOSArNjQxLDYgQEAKICAqIGJpdHMgaXMgZmFzdGVyIGFuZCBlYXNpZXIuCiAgKgogICovCi0jZGVmaW5lIElOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2Ci0jZGVmaW5lIElOU1RfTUZTUFJfUFZSX01BU0sJMHhmYzFmZmZmZgotCi0jZGVmaW5lIElOU1RfRENCQQkJMHg3YzAwMDVlYwotI2RlZmluZSBJTlNUX0RDQkFfTUFTSwkJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfTUNSWFIJCTB4N2MwMDA0MDAKLSNkZWZpbmUgSU5TVF9NQ1JYUl9NQVNLCQkweGZjMDAwN2ZlCi0KLSNkZWZpbmUgSU5TVF9TVFJJTkcJCTB4N2MwMDA0MmEKLSNkZWZpbmUgSU5TVF9TVFJJTkdfTUFTSwkweGZjMDAwN2ZlCi0jZGVmaW5lIElOU1RfU1RSSU5HX0dFTl9NQVNLCTB4ZmMwMDA2N2UKLSNkZWZpbmUgSU5TVF9MU1dJCQkweDdjMDAwNGFhCi0jZGVmaW5lIElOU1RfTFNXWAkJMHg3YzAwMDQyYQotI2RlZmluZSBJTlNUX1NUU1dJCQkweDdjMDAwNWFhCi0jZGVmaW5lIElOU1RfU1RTV1gJCTB4N2MwMDA1MmEKLQotI2RlZmluZSBJTlNUX1BPUENOVEIJCTB4N2MwMDAwZjQKLSNkZWZpbmUgSU5TVF9QT1BDTlRCX01BU0sJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfSVNFTAkJMHg3YzAwMDAxZQotI2RlZmluZSBJTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQotCiBzdGF0aWMgaW50IGVtdWxhdGVfc3RyaW5nX2luc3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0d29yZCkKIHsKIAl1OCByVCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwpAQCAtNjcwLDIwICs2NTEsMjAgQEAKIAlpbnQgcG9zID0gMDsKIAogCS8qIEVhcmx5IG91dCBpZiB3ZSBhcmUgYW4gaW52YWxpZCBmb3JtIG9mIGxzd3ggKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9TVFJJTkdfTUFTSykgPT0gSU5TVF9MU1dYKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykgPT0gUFBDX0lOU1RfTFNXWCkKIAkJaWYgKChyVCA9PSByQSkgfHwgKHJUID09IE5CX1JCKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJRUEgPSAockEgPT0gMCkgPyAwIDogcmVncy0+Z3ByW3JBXTsKIAotCXN3aXRjaCAoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSB7Ci0JCWNhc2UgSU5TVF9MU1dYOgotCQljYXNlIElOU1RfU1RTV1g6CisJc3dpdGNoIChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19NQVNLKSB7CisJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJY2FzZSBQUENfSU5TVF9TVFNXWDoKIAkJCUVBICs9IE5CX1JCOwogCQkJbnVtX2J5dGVzID0gcmVncy0+eGVyICYgMHg3ZjsKIAkJCWJyZWFrOwotCQljYXNlIElOU1RfTFNXSToKLQkJY2FzZSBJTlNUX1NUU1dJOgorCQljYXNlIFBQQ19JTlNUX0xTV0k6CisJCWNhc2UgUFBDX0lOU1RfU1RTV0k6CiAJCQludW1fYnl0ZXMgPSAoTkJfUkIgPT0gMCkgPyAzMiA6IE5CX1JCOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC02OTUsOSArNjc2LDkgQEAKIAkJdTggdmFsOwogCQl1MzIgc2hpZnQgPSA4ICogKDMgLSAocG9zICYgMHgzKSk7CiAKLQkJc3dpdGNoICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSkgewotCQkJY2FzZSBJTlNUX0xTV1g6Ci0JCQljYXNlIElOU1RfTFNXSToKKwkJc3dpdGNoICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykpIHsKKwkJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJCWNhc2UgUFBDX0lOU1RfTFNXSToKIAkJCQlpZiAoZ2V0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQkvKiBmaXJzdCB0aW1lIHVwZGF0aW5nIHRoaXMgcmVnLApAQCAtNzA2LDggKzY4Nyw4IEBACiAJCQkJCXJlZ3MtPmdwcltyVF0gPSAwOwogCQkJCXJlZ3MtPmdwcltyVF0gfD0gdmFsIDw8IHNoaWZ0OwogCQkJCWJyZWFrOwotCQkJY2FzZSBJTlNUX1NUU1dJOgotCQkJY2FzZSBJTlNUX1NUU1dYOgorCQkJY2FzZSBQUENfSU5TVF9TVFNXSToKKwkJCWNhc2UgUFBDX0lOU1RfU1RTV1g6CiAJCQkJdmFsID0gcmVncy0+Z3ByW3JUXSA+PiBzaGlmdDsKIAkJCQlpZiAocHV0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc3NSwxOCArNzU2LDE4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogRW11bGF0ZSB0aGUgbWZzcHIgckQsIFBWUi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9NRlNQUl9QVlJfTUFTSykgPT0gSU5TVF9NRlNQUl9QVlIpIHsKKwlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfTUZTUFJfUFZSX01BU0spID09IFBQQ19JTlNUX01GU1BSX1BWUikgewogCQlyZCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwogCQlyZWdzLT5ncHJbcmRdID0gbWZzcHIoU1BSTl9QVlIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBFbXVsYXRpbmcgdGhlIGRjYmEgaW5zbiBpcyBqdXN0IGEgbm8tb3AuICAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0RDQkFfTUFTSykgPT0gSU5TVF9EQ0JBKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9EQ0JBX01BU0spID09IFBQQ19JTlNUX0RDQkEpCiAJCXJldHVybiAwOwogCiAJLyogRW11bGF0ZSB0aGUgbWNyeHIgaW5zbi4gICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfTUNSWFJfTUFTSykgPT0gSU5TVF9NQ1JYUikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9NQ1JYUl9NQVNLKSA9PSBQUENfSU5TVF9NQ1JYUikgewogCQlpbnQgc2hpZnQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxYzsKIAkJdW5zaWduZWQgbG9uZyBtc2sgPSAweGYwMDAwMDAwVUwgPj4gc2hpZnQ7CiAKQEAgLTc5NiwxNiArNzc3LDE2IEBACiAJfQogCiAJLyogRW11bGF0ZSBsb2FkL3N0b3JlIHN0cmluZyBpbnNuLiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19HRU5fTUFTSykgPT0gSU5TVF9TVFJJTkcpCisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSykgPT0gUFBDX0lOU1RfU1RSSU5HKQogCQlyZXR1cm4gZW11bGF0ZV9zdHJpbmdfaW5zdChyZWdzLCBpbnN0d29yZCk7CiAKIAkvKiBFbXVsYXRlIHRoZSBwb3BjbnRiIChQb3B1bGF0aW9uIENvdW50IEJ5dGVzKSBpbnN0cnVjdGlvbi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9QT1BDTlRCX01BU0spID09IElOU1RfUE9QQ05UQikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9QT1BDTlRCX01BU0spID09IFBQQ19JTlNUX1BPUENOVEIpIHsKIAkJcmV0dXJuIGVtdWxhdGVfcG9wY250Yl9pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKIAkvKiBFbXVsYXRlIGlzZWwgKEludGVnZXIgU2VsZWN0KSBpbnN0cnVjdGlvbiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0lTRUxfTUFTSykgPT0gSU5TVF9JU0VMKSB7CisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX0lTRUxfTUFTSykgPT0gUFBDX0lOU1RfSVNFTCkgewogCQlyZXR1cm4gZW11bGF0ZV9pc2VsKHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKQEAgLTExNDQsNiArMTEyNSwyNCBAQAogI2VuZGlmIC8qIENPTkZJR19WU1ggKi8KIAogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKwordm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IG1zZzsKKworCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpCisJCXJldHVybjsKKworCWZvciAobXNnID0gMDsgbXNnIDwgNDsgbXNnKyspCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbY3B1XSkpCisJCQlzbXBfbWVzc2FnZV9yZWN2KG1zZyk7CisjZWxzZQorCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIGRvb3JiZWxsIG9uIG5vbi1zbXAgc3lzdGVtXG4iKTsKKyNlbmRpZgorfQorCiB2b2lkIENhY2hlTG9ja2luZ0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwppbmRleCA3ZDZjOWJiLi5mYzlhZjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKIHZvaWQgKCp1ZGJnX3B1dGMpKGNoYXIgYyk7Cit2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBpbnQgKCp1ZGJnX2dldGMpKHZvaWQpOwogaW50ICgqdWRiZ19nZXRjX3BvbGwpKHZvaWQpOwogCkBAIC03Niw2ICs3Nyw5IEBACiAJCQl3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKQogCQkJCXVkYmdfcHV0YyhjKTsKIAkJfQorCisJCWlmICh1ZGJnX2ZsdXNoKQorCQkJdWRiZ19mbHVzaCgpOwogCX0KICNpZiAwCiAJZWxzZSB7CkBAIC05OCw2ICsxMDIsOSBAQAogCQl9CiAJfQogCisJaWYgKHVkYmdfZmx1c2gpCisJCXVkYmdfZmx1c2goKTsKKwogCXJldHVybiBuIC0gcmVtYWluOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmluZGV4IDdiN2RhOGMuLjAzNjJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC00OCwxNCArNDgsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKnVkYmdfY29tcG9ydDsKIAotc3RhdGljIHZvaWQgdWRiZ181NTBfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChpbl84KCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCW91dF84KCZ1ZGJnX2NvbXBvcnQtPnRociwgYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzU1MF9wdXRjKCdccicpOworCQl1ZGJnXzU1MF9mbHVzaCgpOworCQlvdXRfOCgmdWRiZ19jb21wb3J0LT50aHIsIGMpOwogCX0KIH0KIApAQCAtMTA4LDYgKzExNSw3IEBACiAJCS8qIENsZWFyICYgZW5hYmxlIEZJRk9zICovCiAJCW91dF84KCZ1ZGJnX2NvbXBvcnQtPmZjciAsMHgwNyk7CiAJCXVkYmdfcHV0YyA9IHVkYmdfNTUwX3B1dGM7CisJCXVkYmdfZmx1c2ggPSB1ZGJnXzU1MF9mbHVzaDsKIAkJdWRiZ19nZXRjID0gdWRiZ181NTBfZ2V0YzsKIAkJdWRiZ19nZXRjX3BvbGwgPSB1ZGJnXzU1MF9nZXRjX3BvbGw7CiAJfQpAQCAtMTQ5LDE0ICsxNTcsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUENfTUFQTEUKLXZvaWQgdWRiZ19tYXBsZV9yZWFsX3B1dGMoY2hhciBjKQordm9pZCB1ZGJnX21hcGxlX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCiAJCQkvKiB3YWl0IGZvciBpZGxlICovOwotCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKwordm9pZCB1ZGJnX21hcGxlX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19tYXBsZV9yZWFsX3B1dGMoJ1xyJyk7CisJCXVkYmdfbWFwbGVfcmVhbF9mbHVzaCgpOworCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTY1LDIwICsxODAsMjggQEAKIAl1ZGJnX2NvbXBvcnQgPSAoc3RydWN0IE5TMTY1NTAgX19pb21lbSAqKTB4ZjQwMDAzZjg7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX21hcGxlX3JlYWxfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ19tYXBsZV9yZWFsX2ZsdXNoOwogCXVkYmdfZ2V0YyA9IE5VTEw7CiAJdWRiZ19nZXRjX3BvbGwgPSBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfTUFQTEUgKi8KIAogI2lmZGVmIENPTkZJR19QUENfUEFTRU1JCi12b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit2b2lkIHVkYmdfcGFzX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF8yMDVfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF8yMDVfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJfQorfQorCit2b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19wYXNfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnX3Bhc19yZWFsX2ZsdXNoKCk7CisJCXJlYWxfMjA1X3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTg3LDYgKzIxMCw3IEBACiAJdWRiZ19jb21wb3J0ID0gKHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKikweGZjZmYwM2Y4VUw7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX3Bhc19yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfcGFzX3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gTlVMTDsKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CkBAIC0xOTUsMTQgKzIxOSwyMSBAQAogI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzQ0eC80NHguaD4KIAotc3RhdGljIHZvaWQgdWRiZ180NHhfYXMxX3B1dGMoY2hhciBjKQorc3RhdGljIGludCB1ZGJnXzQ0eF9hczFfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgoYXMxX3JlYWRiKCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDR4X2FzMV9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzQ0eF9hczFfcHV0YygnXHInKTsKKwkJdWRiZ180NHhfYXMxX2ZsdXNoKCk7CisJCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKIAl9CiB9CiAKQEAgLTIyMiwxOSArMjUzLDI3IEBACiAJCShzdHJ1Y3QgTlMxNjU1MCBfX2lvbWVtICopUFBDNDR4X0VBUkxZX0RFQlVHX1ZJUlRBRERSOwogCiAJdWRiZ19wdXRjID0gdWRiZ180NHhfYXMxX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDR4X2FzMV9mbHVzaDsKIAl1ZGJnX2dldGMgPSB1ZGJnXzQ0eF9hczFfZ2V0YzsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHgKLXN0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzQweF9yZWFsX2ZsdXNoKHZvaWQpCiB7CiAJaWYgKHVkYmdfY29tcG9ydCkgewogCQl3aGlsZSAoKHJlYWxfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ180MHhfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnXzQweF9yZWFsX2ZsdXNoKCk7CisJCXJlYWxfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CiAJfQogfQogCkBAIC0yNTQsNiArMjkzLDcgQEAKIAkJQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHhfUEhZU0FERFI7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnXzQweF9yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDB4X3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gdWRiZ180MHhfcmVhbF9nZXRjOwogCXVkYmdfZ2V0Y19wb2xsID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCmluZGV4IGQzNjk0NDkuLjgxOWU1OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJY21vLT5leGNlc3Muc2l6ZSA9IGNtby0+ZW50aXRsZWQgLSBjbW8tPnJlc2VydmUuc2l6ZTsKIAljbW8tPmV4Y2Vzcy5mcmVlID0gY21vLT5leGNlc3Muc2l6ZSAtIG5lZWQ7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKSk7CisJY2FuY2VsX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmsod29yaykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpb19jbW8ubG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNjdmMDdmNC4uYjllZjE2NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTgsNiArNTgsNyBAQAogCQlTQ0hFRF9URVhUCiAJCUxPQ0tfVEVYVAogCQlLUFJPQkVTX1RFWFQKKwkJSVJRRU5UUllfVEVYVAogCiAjaWZkZWYgQ09ORklHX1BQQzMyCiAJCSooLmdvdDEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwppbmRleCBiN2RjNGMxLi4wMDVhMjhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKQEAgLTI5LDEyMSArMjksMTEgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCiAvKgotICogVGhpcyBhZGRyZXNzIHJhbmdlIGRlZmF1bHRzIHRvIGEgdmFsdWUgdGhhdCBpcyBzYWZlIGZvciBhbGwKLSAqIHBsYXRmb3JtcyB3aGljaCBjdXJyZW50bHkgc2V0IENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUuIEl0Ci0gKiBjYW4gYmUgZnVydGhlciBjb25maWd1cmVkIGZvciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgdW5kZXIKLSAqIHRoZSAiQWR2YW5jZWQgU2V0dXAiIG1lbnUuIC1NYXR0Ci0gKi8KLSNkZWZpbmUgQ09OU0lTVEVOVF9CQVNFCShDT05GSUdfQ09OU0lTVEVOVF9TVEFSVCkKLSNkZWZpbmUgQ09OU0lTVEVOVF9FTkQJKENPTkZJR19DT05TSVNURU5UX1NUQVJUICsgQ09ORklHX0NPTlNJU1RFTlRfU0laRSkKLSNkZWZpbmUgQ09OU0lTVEVOVF9PRkZTRVQoeCkJKCgodW5zaWduZWQgbG9uZykoeCkgLSBDT05TSVNURU5UX0JBU0UpID4+IFBBR0VfU0hJRlQpCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBwYWdlIHRhYmxlICgyTUIpIGNvdmVyaW5nIHVuY2FjaGVkLCBETUEgY29uc2lzdGVudCBhbGxvY2F0aW9ucwotICovCi1zdGF0aWMgcHRlX3QgKmNvbnNpc3RlbnRfcHRlOwotc3RhdGljIERFRklORV9TUElOTE9DSyhjb25zaXN0ZW50X2xvY2spOwotCi0vKgotICogVk0gcmVnaW9uIGhhbmRsaW5nIHN1cHBvcnQuCi0gKgotICogVGhpcyBzaG91bGQgYmVjb21lIHNvbWV0aGluZyBnZW5lcmljLCBoYW5kbGluZyBWTSByZWdpb24gYWxsb2NhdGlvbnMgZm9yCi0gKiB2bWFsbG9jIGFuZCBzaW1pbGFyIChpb3JlbWFwLCBtb2R1bGUgc3BhY2UsIGV0YykuCi0gKgotICogSSBlbnZpc2FnZSB2bWFsbG9jKCkncyBzdXBwb3J0aW5nIHZtX3N0cnVjdCBiZWNvbWluZzoKLSAqCi0gKiAgc3RydWN0IHZtX3N0cnVjdCB7Ci0gKiAgICBzdHJ1Y3Qgdm1fcmVnaW9uCXJlZ2lvbjsKLSAqICAgIHVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0gKiAgICBzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwotICogICAgdW5zaWduZWQgaW50CW5yX3BhZ2VzOwotICogICAgdW5zaWduZWQgbG9uZwlwaHlzX2FkZHI7Ci0gKiAgfTsKLSAqCi0gKiBnZXRfdm1fYXJlYSgpIHdvdWxkIHRoZW4gY2FsbCB2bV9yZWdpb25fYWxsb2Mgd2l0aCBhbiBhcHByb3ByaWF0ZQotICogc3RydWN0IHZtX3JlZ2lvbiBoZWFkIChlZyk6Ci0gKgotICogIHN0cnVjdCB2bV9yZWdpb24gdm1hbGxvY19oZWFkID0gewotICoJLnZtX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh2bWFsbG9jX2hlYWQudm1fbGlzdCksCi0gKgkudm1fc3RhcnQJPSBWTUFMTE9DX1NUQVJULAotICoJLnZtX2VuZAkJPSBWTUFMTE9DX0VORCwKLSAqICB9OwotICoKLSAqIEhvd2V2ZXIsIHZtYWxsb2NfaGVhZC52bV9zdGFydCBpcyB2YXJpYWJsZSAodHlwaWNhbGx5LCBpdCBpcyBkZXBlbmRlbnQgb24KLSAqIHRoZSBhbW91bnQgb2YgUkFNIGZvdW5kIGF0IGJvb3QgdGltZS4pICBJIHdvdWxkIGltYWdpbmUgdGhhdCBnZXRfdm1fYXJlYSgpCi0gKiB3b3VsZCBoYXZlIHRvIGluaXRpYWxpc2UgdGhpcyBlYWNoIHRpbWUgcHJpb3IgdG8gY2FsbGluZyB2bV9yZWdpb25fYWxsb2MoKS4KLSAqLwotc3RydWN0IHBwY192bV9yZWdpb24gewotCXN0cnVjdCBsaXN0X2hlYWQJdm1fbGlzdDsKLQl1bnNpZ25lZCBsb25nCQl2bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nCQl2bV9lbmQ7Ci19OwotCi1zdGF0aWMgc3RydWN0IHBwY192bV9yZWdpb24gY29uc2lzdGVudF9oZWFkID0gewotCS52bV9saXN0CT0gTElTVF9IRUFEX0lOSVQoY29uc2lzdGVudF9oZWFkLnZtX2xpc3QpLAotCS52bV9zdGFydAk9IENPTlNJU1RFTlRfQkFTRSwKLQkudm1fZW5kCQk9IENPTlNJU1RFTlRfRU5ELAotfTsKLQotc3RhdGljIHN0cnVjdCBwcGNfdm1fcmVnaW9uICoKLXBwY192bV9yZWdpb25fYWxsb2Moc3RydWN0IHBwY192bV9yZWdpb24gKmhlYWQsIHNpemVfdCBzaXplLCBnZnBfdCBnZnApCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gaGVhZC0+dm1fc3RhcnQsIGVuZCA9IGhlYWQtPnZtX2VuZCAtIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqYywgKm5ldzsKLQotCW5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcGNfdm1fcmVnaW9uKSwgZ2ZwKTsKLQlpZiAoIW5ldykKLQkJZ290byBvdXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZoZWFkLT52bV9saXN0LCB2bV9saXN0KSB7Ci0JCWlmICgoYWRkciArIHNpemUpIDwgYWRkcikKLQkJCWdvdG8gbm9zcGM7Ci0JCWlmICgoYWRkciArIHNpemUpIDw9IGMtPnZtX3N0YXJ0KQotCQkJZ290byBmb3VuZDsKLQkJYWRkciA9IGMtPnZtX2VuZDsKLQkJaWYgKGFkZHIgPiBlbmQpCi0JCQlnb3RvIG5vc3BjOwotCX0KLQotIGZvdW5kOgotCS8qCi0JICogSW5zZXJ0IHRoaXMgZW50cnkgX2JlZm9yZV8gdGhlIG9uZSB3ZSBmb3VuZC4KLQkgKi8KLQlsaXN0X2FkZF90YWlsKCZuZXctPnZtX2xpc3QsICZjLT52bV9saXN0KTsKLQluZXctPnZtX3N0YXJ0ID0gYWRkcjsKLQluZXctPnZtX2VuZCA9IGFkZHIgKyBzaXplOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIG5ldzsKLQotIG5vc3BjOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCWtmcmVlKG5ldyk7Ci0gb3V0OgotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IHBwY192bV9yZWdpb24gKnBwY192bV9yZWdpb25fZmluZChzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqaGVhZCwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXN0cnVjdCBwcGNfdm1fcmVnaW9uICpjOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmaGVhZC0+dm1fbGlzdCwgdm1fbGlzdCkgewotCQlpZiAoYy0+dm1fc3RhcnQgPT0gYWRkcikKLQkJCWdvdG8gb3V0OwotCX0KLQljID0gTlVMTDsKLSBvdXQ6Ci0JcmV0dXJuIGM7Ci19Ci0KLS8qCiAgKiBBbGxvY2F0ZSBETUEtY29oZXJlbnQgbWVtb3J5IHNwYWNlIGFuZCByZXR1cm4gYm90aCB0aGUga2VybmVsIHJlbWFwcGVkCiAgKiB2aXJ0dWFsIGFuZCBidXMgYWRkcmVzcyBmb3IgdGhhdCBzcGFjZS4KICAqLwpAQCAtMTUxLDIxICs0MSwyMSBAQAogX19kbWFfYWxsb2NfY29oZXJlbnQoc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCBwcGNfdm1fcmVnaW9uICpjOwogCXVuc2lnbmVkIGxvbmcgb3JkZXI7CisJaW50IGk7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gUEFHRV9BTElHTihzaXplKT4+UEFHRV9TSElGVDsKKwl1bnNpZ25lZCBpbnQgYXJyYXlfc2l6ZSA9IG5yX3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJc3RydWN0IHBhZ2UgKmVuZDsKIAl1NjQgbWFzayA9IDB4MDBmZmZmZmYsIGxpbWl0OyAvKiBJU0EgZGVmYXVsdCAqLworCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAKLQlpZiAoIWNvbnNpc3RlbnRfcHRlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBpbml0aWFsaXNlZFxuIiwgX19mdW5jX18pOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQorCUJVR19PTighbWVtX2luaXRfZG9uZSk7CiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAJbGltaXQgPSAobWFzayArIDEpICYgfm1hc2s7Ci0JaWYgKChsaW1pdCAmJiBzaXplID49IGxpbWl0KSB8fCBzaXplID49IChDT05TSVNURU5UX0VORCAtIENPTlNJU1RFTlRfQkFTRSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29oZXJlbnQgYWxsb2NhdGlvbiB0b28gYmlnIChyZXF1ZXN0ZWQgJSN4IG1hc2sgJSNMeClcbiIsCi0JCSAgICAgICBzaXplLCBtYXNrKTsKKwlpZiAobGltaXQgJiYgc2l6ZSA+PSBsaW1pdCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb2hlcmVudCBhbGxvY2F0aW9uIHRvbyBiaWcgKHJlcXVlc3RlZCAiCisJCQkJIiUjeCBtYXNrICUjTHgpXG4iLCBzaXplLCBtYXNrKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0xNzgsNiArNjgsOCBAQAogCWlmICghcGFnZSkKIAkJZ290byBub19wYWdlOwogCisJZW5kID0gcGFnZSArICgxIDw8IG9yZGVyKTsKKwogCS8qCiAJICogSW52YWxpZGF0ZSBhbnkgZGF0YSB0aGF0IG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlCiAJICoga2VybmVsIGRpcmVjdC1tYXBwZWQgcmVnaW9uIGZvciBkZXZpY2UgRE1BLgpAQCAtMTg4LDQ4ICs4MCw1OSBAQAogCQlmbHVzaF9kY2FjaGVfcmFuZ2Uoa2FkZHIsIGthZGRyICsgc2l6ZSk7CiAJfQogCisJc3BsaXRfcGFnZShwYWdlLCBvcmRlcik7CisKIAkvKgotCSAqIEFsbG9jYXRlIGEgdmlydHVhbCBhZGRyZXNzIGluIHRoZSBjb25zaXN0ZW50IG1hcHBpbmcgcmVnaW9uLgorCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCiAJICovCi0JYyA9IHBwY192bV9yZWdpb25fYWxsb2MoJmNvbnNpc3RlbnRfaGVhZCwgc2l6ZSwKLQkJCSAgICBnZnAgJiB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0pKTsKLQlpZiAoYykgewotCQl1bnNpZ25lZCBsb25nIHZhZGRyID0gYy0+dm1fc3RhcnQ7Ci0JCXB0ZV90ICpwdGUgPSBjb25zaXN0ZW50X3B0ZSArIENPTlNJU1RFTlRfT0ZGU0VUKHZhZGRyKTsKLQkJc3RydWN0IHBhZ2UgKmVuZCA9IHBhZ2UgKyAoMSA8PCBvcmRlcik7CisJKmhhbmRsZSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAotCQlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKKwlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSkpOworCWlmICghYXJlYSkKKwkJZ290byBvdXRfZnJlZV9wYWdlczsKIAotCQkvKgotCQkgKiBTZXQgdGhlICJkbWEgaGFuZGxlIgotCQkgKi8KLQkJKmhhbmRsZSA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwlpZiAoYXJyYXlfc2l6ZSA+IFBBR0VfU0laRSkgeworCQlwYWdlcyA9IHZtYWxsb2MoYXJyYXlfc2l6ZSk7CisJCWFyZWEtPmZsYWdzIHw9IFZNX1ZQQUdFUzsKKwl9IGVsc2UgeworCQlwYWdlcyA9IGttYWxsb2MoYXJyYXlfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJfQorCWlmICghcGFnZXMpCisJCWdvdG8gb3V0X2ZyZWVfYXJlYTsKIAotCQlkbyB7Ci0JCQlCVUdfT04oIXB0ZV9ub25lKCpwdGUpKTsKKwlhcmVhLT5wYWdlcyA9IHBhZ2VzOworCWFyZWEtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAKLQkJCVNldFBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLAotCQkJCSAgIHB0ZSwgbWtfcHRlKHBhZ2UsIHBncHJvdF9ub25jYWNoZWQoUEFHRV9LRVJORUwpKSk7Ci0JCQlwYWdlKys7Ci0JCQlwdGUrKzsKLQkJCXZhZGRyICs9IFBBR0VfU0laRTsKLQkJfSB3aGlsZSAoc2l6ZSAtPSBQQUdFX1NJWkUpOworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKQorCQlwYWdlc1tpXSA9IHBhZ2UgKyBpOwogCi0JCS8qCi0JCSAqIEZyZWUgdGhlIG90aGVyd2lzZSB1bnVzZWQgcGFnZXMuCi0JCSAqLwotCQl3aGlsZSAocGFnZSA8IGVuZCkgewotCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCQlwYWdlKys7Ci0JCX0KKwlpZiAobWFwX3ZtX2FyZWEoYXJlYSwgcGdwcm90X25vbmNhY2hlZChQQUdFX0tFUk5FTCksICZwYWdlcykpCisJCWdvdG8gb3V0X3VubWFwOwogCi0JCXJldHVybiAodm9pZCAqKWMtPnZtX3N0YXJ0OworCS8qCisJICogRnJlZSB0aGUgb3RoZXJ3aXNlIHVudXNlZCBwYWdlcy4KKwkgKi8KKwlwYWdlICs9IG5yX3BhZ2VzOworCXdoaWxlIChwYWdlIDwgZW5kKSB7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQlwYWdlKys7CiAJfQogCisJcmV0dXJuIGFyZWEtPmFkZHI7CitvdXRfdW5tYXA6CisJdnVubWFwKGFyZWEtPmFkZHIpOworCWlmIChhcnJheV9zaXplID4gUEFHRV9TSVpFKQorCQl2ZnJlZShwYWdlcyk7CisJZWxzZQorCQlrZnJlZShwYWdlcyk7CisJZ290byBvdXRfZnJlZV9wYWdlczsKK291dF9mcmVlX2FyZWE6CisJZnJlZV92bV9hcmVhKGFyZWEpOworb3V0X2ZyZWVfcGFnZXM6CiAJaWYgKHBhZ2UpCiAJCV9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7Ci0gbm9fcGFnZToKK25vX3BhZ2U6CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKF9fZG1hX2FsbG9jX2NvaGVyZW50KTsKQEAgLTIzOSwxMDQgKzE0MiwxMiBAQAogICovCiB2b2lkIF9fZG1hX2ZyZWVfY29oZXJlbnQoc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyKQogewotCXN0cnVjdCBwcGNfdm1fcmVnaW9uICpjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFkZHI7Ci0JcHRlX3QgKnB0ZXA7CisJdmZyZWUodmFkZHIpOwogCi0Jc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0KLQljID0gcHBjX3ZtX3JlZ2lvbl9maW5kKCZjb25zaXN0ZW50X2hlYWQsICh1bnNpZ25lZCBsb25nKXZhZGRyKTsKLQlpZiAoIWMpCi0JCWdvdG8gbm9fYXJlYTsKLQotCWlmICgoYy0+dm1fZW5kIC0gYy0+dm1fc3RhcnQpICE9IHNpemUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZnJlZWluZyB3cm9uZyBjb2hlcmVudCBzaXplICglbGQgIT0gJWQpXG4iLAotCQkgICAgICAgX19mdW5jX18sIGMtPnZtX2VuZCAtIGMtPnZtX3N0YXJ0LCBzaXplKTsKLQkJZHVtcF9zdGFjaygpOwotCQlzaXplID0gYy0+dm1fZW5kIC0gYy0+dm1fc3RhcnQ7Ci0JfQotCi0JcHRlcCA9IGNvbnNpc3RlbnRfcHRlICsgQ09OU0lTVEVOVF9PRkZTRVQoYy0+dm1fc3RhcnQpOwotCWFkZHIgPSBjLT52bV9zdGFydDsKLQlkbyB7Ci0JCXB0ZV90IHB0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcigmaW5pdF9tbSwgYWRkciwgcHRlcCk7Ci0JCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JCXB0ZXArKzsKLQkJYWRkciArPSBQQUdFX1NJWkU7Ci0KLQkJaWYgKCFwdGVfbm9uZShwdGUpICYmIHB0ZV9wcmVzZW50KHB0ZSkpIHsKLQkJCXBmbiA9IHB0ZV9wZm4ocHRlKTsKLQotCQkJaWYgKHBmbl92YWxpZChwZm4pKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotCQkJCUNsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOwotCi0JCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQotCQlwcmludGsoS0VSTl9DUklUICIlczogYmFkIHBhZ2UgaW4ga2VybmVsIHBhZ2UgdGFibGVcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7Ci0JfSB3aGlsZSAoc2l6ZSAtPSBQQUdFX1NJWkUpOwotCi0JZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShjLT52bV9zdGFydCwgYy0+dm1fZW5kKTsKLQotCWxpc3RfZGVsKCZjLT52bV9saXN0KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUoYyk7Ci0JcmV0dXJuOwotCi0gbm9fYXJlYToKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiB0cnlpbmcgdG8gZnJlZSBpbnZhbGlkIGNvaGVyZW50IGFyZWE6ICVwXG4iLAotCSAgICAgICBfX2Z1bmNfXywgdmFkZHIpOwotCWR1bXBfc3RhY2soKTsKIH0KIEVYUE9SVF9TWU1CT0woX19kbWFfZnJlZV9jb2hlcmVudCk7CiAKIC8qCi0gKiBJbml0aWFsaXNlIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBkbWFfYWxsb2NfaW5pdCh2b2lkKQotewotCXBnZF90ICpwZ2Q7Ci0JcHVkX3QgKnB1ZDsKLQlwbWRfdCAqcG1kOwotCXB0ZV90ICpwdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlkbyB7Ci0JCXBnZCA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIENPTlNJU1RFTlRfQkFTRSk7Ci0JCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgcGdkLCBDT05TSVNURU5UX0JBU0UpOwotCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIHB1ZCwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJaWYgKCFwbWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBtZCB0YWJsZXNcbiIsIF9fZnVuY19fKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBDT05TSVNURU5UX0JBU0UpOwotCQlpZiAoIXB0ZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcHRlIHRhYmxlc1xuIiwgX19mdW5jX18pOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY29uc2lzdGVudF9wdGUgPSBwdGU7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1jb3JlX2luaXRjYWxsKGRtYV9hbGxvY19pbml0KTsKLQotLyoKICAqIG1ha2UgYW4gYXJlYSBjb25zaXN0ZW50LgogICovCiB2b2lkIF9fZG1hX3N5bmModm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCmluZGV4IDhjNWEwM2IuLjdlODg2NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAl9CiAKIAlmb3IgKDsgZGVzdCA8IGVuZDsgZGVzdCsrKQotCQlwYXRjaF9pbnN0cnVjdGlvbihkZXN0LCBQUENfTk9QX0lOU1RSKTsKKwkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZGVzdCwgUFBDX0lOU1RfTk9QKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKIAkJZGVzdCA9ICh2b2lkICopc3RhcnQgKyAqc3RhcnQ7Ci0JCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19MV1NZTkNfSU5TVFIpOworCQlwYXRjaF9pbnN0cnVjdGlvbihkZXN0LCBQUENfSU5TVF9MV1NZTkMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCmluZGV4IGY5ZTUwNmEuLjBjMTZhYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKQEAgLTEsNiArMSw0IEBACiAKLW9iai15CQkJCTo9IG1hdGgubyBmbXIubyBsZmQubyBzdGZkLm8KLQogb2JqLSQoQ09ORklHX01BVEhfRU1VTEFUSU9OKQkrPSBmYWJzLm8gZmFkZC5vIGZhZGRzLm8gZmNtcG8ubyBmY21wdS5vIFwKIAkJCQkJZmN0aXcubyBmY3Rpd3oubyBmZGl2Lm8gZmRpdnMubyBcCiAJCQkJCWZtYWRkLm8gZm1hZGRzLm8gZm1zdWIubyBmbXN1YnMubyBcCkBAIC05LDcgKzcsOCBAQAogCQkJCQlmcmVzLm8gZnJzcC5vIGZyc3FydGUubyBmc2VsLm8gbGZzLm8gXAogCQkJCQlmc3FydC5vCWZzcXJ0cy5vIGZzdWIubyBmc3Vicy5vIFwKIAkJCQkJbWNyZnMubyBtZmZzLm8gbXRmc2IwLm8gbXRmc2IxLm8gXAotCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubworCQkJCQltdGZzZi5vIG10ZnNmaS5vIHN0Zml3eC5vIHN0ZnMubyBcCisJCQkJCW1hdGgubyBmbXIubyBsZmQubyBzdGZkLm8KIAogb2JqLSQoQ09ORklHX1NQRSkJCSs9IG1hdGhfZWZwLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCmluZGV4IDk1M2NjNGEuLjE3MjkwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogZW5kaWYKIAotb2JqLXkJCQkJOj0gZmF1bHQubyBtZW0ubyBwZ3RhYmxlLm8gXAorb2JqLXkJCQkJOj0gZmF1bHQubyBtZW0ubyBwZ3RhYmxlLm8gZ3VwLm8gXAogCQkJCSAgIGluaXRfJChDT05GSUdfV09SRF9TSVpFKS5vIFwKIAkJCQkgICBwZ3RhYmxlXyQoQ09ORklHX1dPUkRfU0laRSkubwogb2JqLSQoQ09ORklHX1BQQ19NTVVfTk9IQVNIKQkrPSBtbXVfY29udGV4dF9ub2hhc2gubyB0bGJfbm9oYXNoLm8gXApAQCAtMTQsNyArMTQsNyBAQAogaGFzaC0kKENPTkZJR19QUENfTkFUSVZFKQk6PSBoYXNoX25hdGl2ZV82NC5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBoYXNoX3V0aWxzXzY0Lm8gXAogCQkJCSAgIHNsYl9sb3cubyBzbGIubyBzdGFiLm8gXAotCQkJCSAgIGd1cC5vIG1tYXAubyAkKGhhc2gteSkKKwkJCQkgICBtbWFwXzY0Lm8gJChoYXNoLXkpCiBvYmotJChDT05GSUdfUFBDX1NURF9NTVVfMzIpCSs9IHBwY19tbXVfMzIubwogb2JqLSQoQ09ORklHX1BQQ19TVERfTU1VKQkrPSBoYXNoX2xvd18kKENPTkZJR19XT1JEX1NJWkUpLm8gXAogCQkJCSAgIHRsYl9oYXNoJChDT05GSUdfV09SRF9TSVpFKS5vIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKaW5kZXggOTFjN2I4Ni4uNzY5OTM5NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMKQEAgLTI1Myw0NSArMjUzLDMzIEBACiAjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCiAJaWYgKGlzX2V4ZWMpIHsKLSNpZiAhKGRlZmluZWQoQ09ORklHXzR4eCkgfHwgZGVmaW5lZChDT05GSUdfQk9PS0UpKQotCQkvKiBwcm90ZWN0aW9uIGZhdWx0ICovCisjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VCisJCS8qIFByb3RlY3Rpb24gZmF1bHQgb24gZXhlYyBnbyBzdHJhaWdodCB0byBmYWlsdXJlIG9uCisJCSAqIEhhc2ggYmFzZWQgTU1VcyBhcyB0aGV5IGVpdGhlciBkb24ndCBzdXBwb3J0IHBlci1wYWdlCisJCSAqIGV4ZWN1dGUgcGVybWlzc2lvbiwgb3IgaWYgdGhleSBkbywgaXQncyBoYW5kbGVkIGFscmVhZHkKKwkJICogYXQgdGhlIGhhc2ggbGV2ZWwuIFRoaXMgdGVzdCB3b3VsZCBwcm9iYWJseSBoYXZlIHRvCisJCSAqIGJlIHJlbW92ZWQgaWYgd2UgY2hhbmdlIHRoZSB3YXkgdGhpcyB3b3JrcyB0byBtYWtlIGhhc2gKKwkJICogcHJvY2Vzc29ycyB1c2UgdGhlIHNhbWUgSS9EIGNhY2hlIGNvaGVyZW5jeSBtZWNoYW5pc20KKwkJICogYXMgZW1iZWRkZWQuCisJCSAqLwogCQlpZiAoZXJyb3JfY29kZSAmIERTSVNSX1BST1RGQVVMVCkKIAkJCWdvdG8gYmFkX2FyZWE7CisjZW5kaWYgLyogQ09ORklHX1BQQ19TVERfTU1VICovCisKIAkJLyoKIAkJICogQWxsb3cgZXhlY3V0aW9uIGZyb20gcmVhZGFibGUgYXJlYXMgaWYgdGhlIE1NVSBkb2VzIG5vdAogCQkgKiBwcm92aWRlIHNlcGFyYXRlIGNvbnRyb2xzIG92ZXIgcmVhZGluZyBhbmQgZXhlY3V0aW5nLgorCQkgKgorCQkgKiBOb3RlOiBUaGF0IGNvZGUgdXNlZCB0byBub3QgYmUgZW5hYmxlZCBmb3IgNHh4L0Jvb2tFLgorCQkgKiBJdCBpcyBub3cgYXMgSS9EIGNhY2hlIGNvaGVyZW5jeSBmb3IgdGhlc2UgaXMgZG9uZSBhdAorCQkgKiBzZXRfcHRlX2F0KCkgdGltZSBhbmQgSSBzZWUgbm8gcmVhc29uIHdoeSB0aGUgdGVzdAorCQkgKiBiZWxvdyB3b3VsZG4ndCBiZSB2YWxpZCBvbiB0aG9zZSBwcm9jZXNzb3JzLiBUaGlzIC1tYXktCisJCSAqIGJyZWFrIHByb2dyYW1zIGNvbXBpbGVkIHdpdGggYSByZWFsbHkgb2xkIEFCSSB0aG91Z2guCiAJCSAqLwogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykgJiYKIAkJICAgIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpIHx8CiAJCSAgICAgISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSkpKSkKIAkJCWdvdG8gYmFkX2FyZWE7Ci0jZWxzZQotCQlwdGVfdCAqcHRlcDsKLQkJcG1kX3QgKnBtZHA7Ci0KLQkJLyogU2luY2UgNHh4L0Jvb2stRSBzdXBwb3J0cyBwZXItcGFnZSBleGVjdXRlIHBlcm1pc3Npb24sCi0JCSAqIHdlIGxhemlseSBmbHVzaCBkY2FjaGUgdG8gaWNhY2hlLiAqLwotCQlwdGVwID0gTlVMTDsKLQkJaWYgKGdldF9wdGVwdHIobW0sIGFkZHJlc3MsICZwdGVwLCAmcG1kcCkpIHsKLQkJCXNwaW5sb2NrX3QgKnB0bCA9IHB0ZV9sb2NrcHRyKG1tLCBwbWRwKTsKLQkJCXNwaW5fbG9jayhwdGwpOwotCQkJaWYgKHB0ZV9wcmVzZW50KCpwdGVwKSkgewotCQkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHRlX3BhZ2UoKnB0ZXApOwotCi0JCQkJaWYgKCF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpIHsKLQkJCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBhZ2UpOwotCQkJCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKLQkJCQl9Ci0JCQkJcHRlX3VwZGF0ZShwdGVwLCAwLCBfUEFHRV9IV0VYRUMgfAotCQkJCQkgICBfUEFHRV9BQ0NFU1NFRCk7Ci0JCQkJbG9jYWxfZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyZXNzKTsKLQkJCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7Ci0JCQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKLQkJfQotI2VuZGlmCiAJLyogYSB3cml0ZSAqLwogCX0gZWxzZSBpZiAoaXNfd3JpdGUpIHsKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCmluZGV4IGVhNmU0MWUuLmJiM2Q2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYwpAQCAtNTYsMTAgKzU2LDE0IEBACiAKIGV4dGVybiB2b2lkIGxvYWRjYW1fZW50cnkodW5zaWduZWQgaW50IGluZGV4KTsKIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2NhbTAsIF9fY2FtMSwgX19jYW0yOworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FtW0NPTkZJR19MT1dNRU1fQ0FNX05VTV07CiAKICNkZWZpbmUgTlVNX1RMQkNBTVMJKDE2KQogCisjaWYgZGVmaW5lZChDT05GSUdfTE9XTUVNX0NBTV9OVU1fQk9PTCkgJiYgKENPTkZJR19MT1dNRU1fQ0FNX05VTSA+PSBOVU1fVExCQ0FNUykKKyNlcnJvciAiTE9XTUVNX0NBTV9OVU0gbXVzdCBiZSBsZXNzIHRoYW4gTlVNX1RMQkNBTVMiCisjZW5kaWYKKwogc3RydWN0IHRsYmNhbSBUTEJDQU1bTlVNX1RMQkNBTVNdOwogCiBzdHJ1Y3QgdGxiY2FtcmFuZ2UgewpAQCAtMTA3LDcgKzExMSw3IEBACiAJdW5zaWduZWQgaW50IHRzaXplLCBsejsKIAogCWFzbSAoImNudGx6dyAlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHNpemUpKTsKLQl0c2l6ZSA9ICgyMSAtIGx6KSAvIDI7CisJdHNpemUgPSAyMSAtIGx6OwogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmICgoZmxhZ3MgJiBfUEFHRV9OT19DQUNIRSkgPT0gMCkKQEAgLTE1MiwxOSArMTU2LDE5IEBACiAJbG9hZGNhbV9lbnRyeShpbmRleCk7CiB9CiAKLXZvaWQgX19pbml0IGNhbV9tYXBpbl9yYW0odW5zaWduZWQgbG9uZyBjYW0wLCB1bnNpZ25lZCBsb25nIGNhbTEsCi0JCXVuc2lnbmVkIGxvbmcgY2FtMikKK3Vuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKIHsKLQlzZXR0bGJjYW0oMCwgUEFHRV9PRkZTRVQsIG1lbXN0YXJ0X2FkZHIsIGNhbTAsIF9QQUdFX0tFUk5FTCwgMCk7Ci0JdGxiY2FtX2luZGV4Kys7Ci0JaWYgKGNhbTEpIHsKKwl1bnNpZ25lZCBsb25nIHZpcnQgPSBQQUdFX09GRlNFVDsKKwlwaHlzX2FkZHJfdCBwaHlzID0gbWVtc3RhcnRfYWRkcjsKKworCXdoaWxlIChjYW1bdGxiY2FtX2luZGV4XSAmJiB0bGJjYW1faW5kZXggPCBBUlJBWV9TSVpFKGNhbSkpIHsKKwkJc2V0dGxiY2FtKHRsYmNhbV9pbmRleCwgdmlydCwgcGh5cywgY2FtW3RsYmNhbV9pbmRleF0sIFBBR0VfS0VSTkVMX1gsIDApOworCQl2aXJ0ICs9IGNhbVt0bGJjYW1faW5kZXhdOworCQlwaHlzICs9IGNhbVt0bGJjYW1faW5kZXhdOwogCQl0bGJjYW1faW5kZXgrKzsKLQkJc2V0dGxiY2FtKDEsIFBBR0VfT0ZGU0VUK2NhbTAsIG1lbXN0YXJ0X2FkZHIrY2FtMCwgY2FtMSwgX1BBR0VfS0VSTkVMLCAwKTsKIAl9Ci0JaWYgKGNhbTIpIHsKLQkJdGxiY2FtX2luZGV4Kys7Ci0JCXNldHRsYmNhbSgyLCBQQUdFX09GRlNFVCtjYW0wK2NhbTEsIG1lbXN0YXJ0X2FkZHIrY2FtMCtjYW0xLCBjYW0yLCBfUEFHRV9LRVJORUwsIDApOwotCX0KKworCXJldHVybiB2aXJ0IC0gUEFHRV9PRkZTRVQ7CiB9CiAKIC8qCkBAIC0xNzUsNTEgKzE3OSw0NiBAQAogCWZsdXNoX2luc3RydWN0aW9uX2NhY2hlKCk7CiB9CiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IG1tdV9tYXBpbl9yYW0odm9pZCkKLXsKLQljYW1fbWFwaW5fcmFtKF9fY2FtMCwgX19jYW0xLCBfX2NhbTIpOwotCi0JcmV0dXJuIF9fY2FtMCArIF9fY2FtMSArIF9fY2FtMjsKLX0KLQotCiB2b2lkIF9faW5pdAogYWRqdXN0X3RvdGFsX2xvd21lbSh2b2lkKQogewotCXBoeXNfYWRkcl90IG1heF9sb3dtZW1fc2l6ZSA9IF9fbWF4X2xvd19tZW1vcnk7Ci0JcGh5c19hZGRyX3QgY2FtX21heF9zaXplID0gMHgxMDAwMDAwMDsKIAlwaHlzX2FkZHJfdCByYW07CisJdW5zaWduZWQgaW50IG1heF9jYW0gPSAobWZzcHIoU1BSTl9UTEIxQ0ZHKSA+PiAxNikgJiAweGZmOworCWNoYXIgYnVmW0FSUkFZX1NJWkUoY2FtKSAqIDUgKyAxXSwgKnAgPSBidWY7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyB2aXJ0ID0gUEFHRV9PRkZTRVQgJiAweGZmZmZmZmZmVUw7CisJdW5zaWduZWQgbG9uZyBwaHlzID0gbWVtc3RhcnRfYWRkciAmIDB4ZmZmZmZmZmZVTDsKIAotCS8qIGFkanVzdCBDQU0gc2l6ZSB0byBtYXhfbG93bWVtX3NpemUgKi8KLQlpZiAobWF4X2xvd21lbV9zaXplIDwgY2FtX21heF9zaXplKQotCQljYW1fbWF4X3NpemUgPSBtYXhfbG93bWVtX3NpemU7CisJLyogQ29udmVydCAoNF5tYXgpIGtCIHRvICgyXm1heCkgYnl0ZXMgKi8KKwltYXhfY2FtID0gbWF4X2NhbSAqIDIgKyAxMDsKIAotCS8qIGFkanVzdCBsb3dtZW0gc2l6ZSB0byBtYXhfbG93bWVtX3NpemUgKi8KLQlyYW0gPSBtaW4obWF4X2xvd21lbV9zaXplLCB0b3RhbF9sb3dtZW0pOworCS8qIGFkanVzdCBsb3dtZW0gc2l6ZSB0byBfX21heF9sb3dfbWVtb3J5ICovCisJcmFtID0gbWluKChwaHlzX2FkZHJfdClfX21heF9sb3dfbWVtb3J5LCAocGh5c19hZGRyX3QpdG90YWxfbG93bWVtKTsKIAogCS8qIENhbGN1bGF0ZSBDQU0gdmFsdWVzICovCi0JX19jYW0wID0gMVVMIDw8IDIgKiAoX19pbG9nMihyYW0pIC8gMik7Ci0JaWYgKF9fY2FtMCA+IGNhbV9tYXhfc2l6ZSkKLQkJX19jYW0wID0gY2FtX21heF9zaXplOwotCXJhbSAtPSBfX2NhbTA7Ci0JaWYgKHJhbSkgewotCQlfX2NhbTEgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKLQkJaWYgKF9fY2FtMSA+IGNhbV9tYXhfc2l6ZSkKLQkJCV9fY2FtMSA9IGNhbV9tYXhfc2l6ZTsKLQkJcmFtIC09IF9fY2FtMTsKLQl9Ci0JaWYgKHJhbSkgewotCQlfX2NhbTIgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKLQkJaWYgKF9fY2FtMiA+IGNhbV9tYXhfc2l6ZSkKLQkJCV9fY2FtMiA9IGNhbV9tYXhfc2l6ZTsKLQkJcmFtIC09IF9fY2FtMjsKLQl9CisJX19tYXhfbG93X21lbW9yeSA9IDA7CisJZm9yIChpID0gMDsgcmFtICYmIGkgPCBBUlJBWV9TSVpFKGNhbSk7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgY2Ftc2l6ZSA9IF9faWxvZzIocmFtKSAmIH4xVTsKKwkJdW5zaWduZWQgaW50IGFsaWduID0gX19mZnModmlydCB8IHBoeXMpICYgfjFVOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5IENBTSBtYXBwaW5nOiBDQU0wPSVsZE1iLCBDQU0xPSVsZE1iLCIKLQkJCSIgQ0FNMj0lbGRNYiByZXNpZHVhbDogJWxkTWJcbiIsCi0JCQlfX2NhbTAgPj4gMjAsIF9fY2FtMSA+PiAyMCwgX19jYW0yID4+IDIwLAotCQkJKGxvbmcgaW50KSgodG90YWxfbG93bWVtIC0gX19jYW0wIC0gX19jYW0xIC0gX19jYW0yKQotCQkJCSAgID4+IDIwKSk7Ci0JX19tYXhfbG93X21lbW9yeSA9IF9fY2FtMCArIF9fY2FtMSArIF9fY2FtMjsKKwkJaWYgKGNhbXNpemUgPiBhbGlnbikKKwkJCWNhbXNpemUgPSBhbGlnbjsKKwkJaWYgKGNhbXNpemUgPiBtYXhfY2FtKQorCQkJY2Ftc2l6ZSA9IG1heF9jYW07CisKKwkJY2FtW2ldID0gMVVMIDw8IGNhbXNpemU7CisJCXJhbSAtPSBjYW1baV07CisJCV9fbWF4X2xvd19tZW1vcnkgKz0gY2FtW2ldOworCQl2aXJ0ICs9IGNhbVtpXTsKKwkJcGh5cyArPSBjYW1baV07CisKKwkJcCArPSBzcHJpbnRmKHAsICIlbHUvIiwgY2FtW2ldID4+IDIwKTsKKwl9CisJZm9yICg7IGkgPCBBUlJBWV9TSVpFKGNhbSk7IGkrKykKKwkJcCArPSBzcHJpbnRmKHAsICIwLyIpOworCXBbLTFdID0gJ1wwJzsKKworCXByX2luZm8oIk1lbW9yeSBDQU0gbWFwcGluZzogJXMgTWIsIHJlc2lkdWFsOiAlZE1iXG4iLCBidWYsCisJICAgICAgICAodW5zaWduZWQgaW50KSgodG90YWxfbG93bWVtIC0gX19tYXhfbG93X21lbW9yeSkgPj4gMjApKTsKIAlfX2luaXRpYWxfbWVtb3J5X2xpbWl0X2FkZHIgPSBtZW1zdGFydF9hZGRyICsgX19tYXhfbG93X21lbW9yeTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9ndXAuYwppbmRleCAyOGExMTRkLi5iYzQwMGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCisjaWZkZWYgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKKwogLyoKICAqIFRoZSBwZXJmb3JtYW5jZSBjcml0aWNhbCBsZWFmIGZ1bmN0aW9ucyBhcmUgbWFkZSBub2lubGluZSBvdGhlcndpc2UgZ2NjCiAgKiBpbmxpbmVzIGV2ZXJ5dGhpbmcgaW50byBhIHNpbmdsZSBmdW5jdGlvbiB3aGljaCByZXN1bHRzIGluIHRvbyBtdWNoCkBAIC0xNTEsOCArMTUzLDExIEBACiAJdW5zaWduZWQgbG9uZyBhZGRyLCBsZW4sIGVuZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJcGdkX3QgKnBnZHA7Ci0JaW50IHBzaXplLCBuciA9IDA7CisJaW50IG5yID0gMDsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAl1bnNpZ25lZCBpbnQgc2hpZnQ7CisJaW50IHBzaXplOworI2VuZGlmCiAKIAlwcl9kZWJ1ZygiJXMoJWx4LCV4LCVzKVxuIiwgX19mdW5jX18sIHN0YXJ0LCBucl9wYWdlcywgd3JpdGUgPyAid3JpdGUiIDogInJlYWQiKTsKIApAQCAtMjA1LDggKzIxMCwxMyBAQAogCSAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkvKiBUaG9zZSBiaXRzIGFyZSByZWxhdGVkIHRvIGh1Z2V0bGJmcyBpbXBsZW1lbnRhdGlvbiBhbmQgb25seSBleGlzdAorCSAqIG9uIDY0LWJpdCBmb3Igbm93CisJICovCiAJcHNpemUgPSBnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpOwogCXNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCWlmICh1bmxpa2VseShtbXVfaHVnZV9wc2l6ZXNbcHNpemVdKSkgewpAQCAtMjM2LDcgKzI0Niw5IEBACiAJCWRvIHsKIAkJCXBnZF90IHBnZCA9ICpwZ2RwOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJCQlWTV9CVUdfT04oc2hpZnQgIT0gbW11X3BzaXplX2RlZnNbZ2V0X3NsaWNlX3BzaXplKG1tLCBhZGRyKV0uc2hpZnQpOworI2VuZGlmCiAJCQlwcl9kZWJ1ZygiICAlMDE2bHg6IG5vcm1hbCBwZ2QgJXBcbiIsIGFkZHIsCiAJCQkJICh2b2lkICopcGdkX3ZhbChwZ2QpKTsKIAkJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKQEAgLTI3OSwzICsyOTEsNSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIH0KKworI2VuZGlmIC8qIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCA4ZDViNDc1Li5kYjU1NmQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTUxNiw3ICs1MTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHRhYl9nZXRfdGFibGVfc2l6ZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUsIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudDsKKwl1bnNpZ25lZCBsb25nIG1lbV9zaXplLCBybmRfbWVtX3NpemUsIHB0ZWdfY291bnQsIHBzaXplOwogCiAJLyogSWYgaGFzaCBzaXplIGlzbid0IGFscmVhZHkgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLCB3ZSB0cnkgdG8KIAkgKiByZXRyaWV2ZSBpdCBmcm9tIHRoZSBkZXZpY2UtdHJlZS4gSWYgaXQncyBub3QgdGhlcmUgbmVpdGhlciwgd2UKQEAgLTUzNCw3ICs1MzQsOCBAQAogCQlybmRfbWVtX3NpemUgPDw9IDE7CiAKIAkvKiAjIHBhZ2VzIC8gMiAqLwotCXB0ZWdfY291bnQgPSBtYXgocm5kX21lbV9zaXplID4+ICgxMiArIDEpLCAxVUwgPDwgMTEpOworCXBzaXplID0gbW11X3BzaXplX2RlZnNbbW11X3ZpcnR1YWxfcHNpemVdLnNoaWZ0OworCXB0ZWdfY291bnQgPSBtYXgocm5kX21lbV9zaXplID4+IChwc2l6ZSArIDEpLCAxVUwgPDwgMTEpOwogCiAJcmV0dXJuIHB0ZWdfY291bnQgPDwgNzsKIH0KQEAgLTU4OSw3ICs1OTAsNyBAQAogCW1ha2VfYmwoaHRhYl9jYWxsX2hwdGVfdXBkYXRlcHAsIHBwY19tZC5ocHRlX3VwZGF0ZXBwKTsKIH0KIAotdm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB0YWJsZTsKIAl1bnNpZ25lZCBsb25nIHB0ZWdfY291bnQ7CkBAIC03MzEsMTEgKzczMiw0MyBAQAogI3VuZGVmIEtCCiAjdW5kZWYgTUIKIAotdm9pZCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCit2b2lkIF9faW5pdCBlYXJseV9pbml0X21tdSh2b2lkKQogeworCS8qIFNldHVwIGluaXRpYWwgU1RBQiBhZGRyZXNzIGluIHRoZSBQQUNBICovCisJZ2V0X3BhY2EoKS0+c3RhYl9yZWFsID0gX19wYSgodTY0KSZpbml0aWFsX3N0YWIpOworCWdldF9wYWNhKCktPnN0YWJfYWRkciA9ICh1NjQpJmluaXRpYWxfc3RhYjsKKworCS8qIEluaXRpYWxpemUgdGhlIE1NVSBIYXNoIHRhYmxlIGFuZCBjcmVhdGUgdGhlIGxpbmVhciBtYXBwaW5nCisJICogb2YgbWVtb3J5LiBIYXMgdG8gYmUgZG9uZSBiZWZvcmUgc3RhYi9zbGIgaW5pdGlhbGl6YXRpb24gYXMKKwkgKiB0aGlzIGlzIGN1cnJlbnRseSB3aGVyZSB0aGUgcGFnZSBzaXplIGVuY29kaW5nIGlzIG9idGFpbmVkCisJICovCisJaHRhYl9pbml0aWFsaXplKCk7CisKKwkvKiBJbml0aWFsaXplIHN0YWIgLyBTTEIgbWFuYWdlbWVudCBleGNlcHQgb24gaVNlcmllcworCSAqLworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCQlzbGJfaW5pdGlhbGl6ZSgpOworCWVsc2UgaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9yZWFsKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfbW11X3NlY29uZGFyeSh2b2lkKQoreworCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBmb3IgdGhhdCBDUFUgKi8KIAlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCiAJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOworCisJLyogSW5pdGlhbGl6ZSBTVEFCL1NMQi4gV2UgdXNlIGEgdmlydHVhbCBhZGRyZXNzIGFzIGl0IHdvcmtzCisJICogaW4gcmVhbCBtb2RlIG9uIHBTZXJpZXMgYW5kIHdlIHdhbnQgYSB2aXJ1dGFsIGFkZHJlc3Mgb24KKwkgKiBpU2VyaWVzIGFueXdheQorCSAqLworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCQlzbGJfaW5pdGlhbGl6ZSgpOworCWVsc2UKKwkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfYWRkcik7CiB9CisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgogICogQ2FsbGVkIGJ5IGFzbSBoYXNodGFibGUuUyBmb3IgZG9pbmcgbGF6eSBpY2FjaGUgZmx1c2gKQEAgLTg1OCw3ICs4OTEsNyBAQAogCXVuc2lnbmVkIGxvbmcgdnNpZDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlwdGVfdCAqcHRlcDsKLQljcHVtYXNrX3QgdG1wOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICp0bXA7CiAJaW50IHJjLCB1c2VyX3JlZ2lvbiA9IDAsIGxvY2FsID0gMDsKIAlpbnQgcHNpemUsIHNzaXplOwogCkBAIC05MDYsOCArOTM5LDggQEAKIAkJcmV0dXJuIDE7CiAKIAkvKiBDaGVjayBDUFUgbG9jYWxpdHkgKi8KLQl0bXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmICh1c2VyX3JlZ2lvbiAmJiBjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgdG1wKSkKKwl0bXAgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKHVzZXJfcmVnaW9uICYmIGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIHRtcCkpCiAJCWxvY2FsID0gMTsKIAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKQEAgLTEwMjMsNyArMTA1Niw2IEBACiAJdW5zaWduZWQgbG9uZyB2c2lkOwogCXZvaWQgKnBnZGlyOwogCXB0ZV90ICpwdGVwOwotCWNwdW1hc2tfdCBtYXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGxvY2FsID0gMDsKIAlpbnQgc3NpemU7CkBAIC0xMDY2LDggKzEwOTgsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCS8qIElzIHRoYXQgbG9jYWwgdG8gdGhpcyBDUFUgPyAqLwotCW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgbWFzaykpCisJaWYgKGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpCiAJCWxvY2FsID0gMTsKIAogCS8qIEhhc2ggaXQgaW4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwppbmRleCBmMDBmMDlhLi5mNjY4ZmE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCkBAIC00NzIsNDAgKzQ3Miw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VCiAJdW5zaWduZWQgbG9uZyBhY2Nlc3MgPSAwLCB0cmFwOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CiAKLQkvKiBoYW5kbGUgaS1jYWNoZSBjb2hlcmVuY3kgKi8KLQlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgJiYKLQkgICAgIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX05PRVhFQ1VURSkgJiYKLQkgICAgcGZuX3ZhbGlkKHBmbikpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwotI2lmZGVmIENPTkZJR184eHgKLQkJLyogT24gOHh4LCBjYWNoZSBjb250cm9sIGluc3RydWN0aW9ucyAocGFydGljdWxhcmx5Ci0JCSAqICJkY2JzdCIgZnJvbSBmbHVzaF9kY2FjaGVfaWNhY2hlKSBmYXVsdCBhcyB3cml0ZQotCQkgKiBvcGVyYXRpb24gaWYgdGhlcmUgaXMgYW4gdW5wb3B1bGF0ZWQgVExCIGVudHJ5Ci0JCSAqIGZvciB0aGUgYWRkcmVzcyBpbiBxdWVzdGlvbi4gVG8gd29ya2Fyb3VuZCB0aGF0LAotCQkgKiB3ZSBpbnZhbGlkYXRlIHRoZSBUTEIgaGVyZSwgdGh1cyBhdm9pZGluZyBkY2JzdAotCQkgKiBtaXNiZWhhdmlvdXIuCi0JCSAqLwotCQlfdGxiaWxfdmEoYWRkcmVzcywgMCAvKiA4eHggZG9lc24ndCBjYXJlIGFib3V0IFBJRCAqLyk7Ci0jZW5kaWYKLQkJLyogVGhlIF9QQUdFX1VTRVIgdGVzdCBzaG91bGQgcmVhbGx5IGJlIF9QQUdFX0VYRUMsIGJ1dAotCQkgKiBvbGRlciBnbGliYyB2ZXJzaW9ucyBleGVjdXRlIHNvbWUgY29kZSBmcm9tIG5vLWV4ZWMKLQkJICogcGFnZXMsIHdoaWNoIGZvciBub3cgd2UgYXJlIHN1cHBvcnRpbmcuICBJZiBleGVjLW9ubHkKLQkJICogcGFnZXMgYXJlIGV2ZXIgaW1wbGVtZW50ZWQsIHRoaXMgd2lsbCBoYXZlIHRvIGNoYW5nZS4KLQkJICovCi0JCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9VU0VSKQotCQkgICAgJiYgIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKSkgewotCQkJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKSB7Ci0JCQkJX19mbHVzaF9kY2FjaGVfaWNhY2hlKCh2b2lkICopIGFkZHJlc3MpOwotCQkJfSBlbHNlCi0JCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBhZ2UpOwotCQkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAkvKiBXZSBvbmx5IHdhbnQgSFBURXMgZm9yIGxpbnV4IFBURXMgdGhhdCBoYXZlIF9QQUdFX0FDQ0VTU0VEIHNldCAqLwogCWlmICghcHRlX3lvdW5nKHB0ZSkgfHwgYWRkcmVzcyA+PSBUQVNLX1NJWkUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbWFwLmMgYi9hcmNoL3Bvd2VycGMvbW0vbW1hcF82NC5jCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9tbS9tbWFwLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9tbS9tbWFwXzY0LmMKaW5kZXggODYwMTBmYy4uMGQ5NTdhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW1hcF82NC5jCkBAIC0yNCwxNiArMjQsNTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAvKgogICogVG9wIG9mIG1tYXAgYXJlYSAoanVzdCBiZWxvdyB0aGUgcHJvY2VzcyBzdGFjaykuCiAgKgotICogTGVhdmUgYW4gYXQgbGVhc3QgfjEyOCBNQiBob2xlLgorICogTGVhdmUgYXQgbGVhc3QgYSB+MTI4IE1CIGhvbGUgb24gMzJiaXQgYXBwbGljYXRpb25zLgorICoKKyAqIE9uIDY0Yml0IGFwcGxpY2F0aW9ucyB3ZSByYW5kb21pc2UgdGhlIHN0YWNrIGJ5IDFHQiBzbyB3ZSBuZWVkIHRvCisgKiBzcGFjZSBvdXIgbW1hcCBzdGFydCBhZGRyZXNzIGJ5IGEgZnVydGhlciAxR0IsIG90aGVyd2lzZSB0aGVyZSBpcyBhCisgKiBjaGFuY2UgdGhlIG1tYXAgYXJlYSB3aWxsIGVuZCB1cCBjbG9zZXIgdG8gdGhlIHN0YWNrIHRoYW4gb3VyIHVsaW1pdAorICogcmVxdWlyZXMuCiAgKi8KLSNkZWZpbmUgTUlOX0dBUCAoMTI4KjEwMjQqMTAyNCkKKyNkZWZpbmUgTUlOX0dBUDMyICgxMjgqMTAyNCoxMDI0KQorI2RlZmluZSBNSU5fR0FQNjQgKCgxMjggKyAxMDI0KSoxMDI0KjEwMjRVTCkKKyNkZWZpbmUgTUlOX0dBUCAoKGlzXzMyYml0X3Rhc2soKSkgPyBNSU5fR0FQMzIgOiBNSU5fR0FQNjQpCiAjZGVmaW5lIE1BWF9HQVAgKFRBU0tfU0laRS82KjUpCiAKK3N0YXRpYyBpbmxpbmUgaW50IG1tYXBfaXNfbGVnYWN5KHZvaWQpCit7CisJaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9DT01QQVRfTEFZT1VUKQorCQlyZXR1cm4gMTsKKworCWlmIChjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKK30KKworLyoKKyAqIFNpbmNlIGdldF9yYW5kb21faW50KCkgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gYSAxIGppZmZ5IHdpbmRvdywKKyAqIHdlIHdpbGwgYWxtb3N0IGFsd2F5cyBnZXQgdGhlIHNhbWUgcmFuZG9taXNhdGlvbiBmb3IgdGhlIHN0YWNrIGFuZCBtbWFwCisgKiByZWdpb24uIFRoaXMgd2lsbCBtZWFuIHRoZSByZWxhdGl2ZSBkaXN0YW5jZSBiZXR3ZWVuIHN0YWNrIGFuZCBtbWFwIHdpbGwKKyAqIGJlIHRoZSBzYW1lLgorICoKKyAqIFRvIGF2b2lkIHRoaXMgd2UgY2FuIHNoaWZ0IHRoZSByYW5kb21uZXNzIGJ5IDEgYml0LgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX3JuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm5kID0gMDsKKworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgeworCQkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCisJCWlmIChpc18zMmJpdF90YXNrKCkpCisJCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMjItUEFHRV9TSElGVCkpKTsKKwkJZWxzZQorCQkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDI5LVBBR0VfU0hJRlQpKSk7CisJfQorCXJldHVybiAocm5kIDw8IFBBR0VfU0hJRlQpICogMjsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZ2FwID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXI7CkBAIC00MywyNCArODQsNyBAQAogCWVsc2UgaWYgKGdhcCA+IE1BWF9HQVApCiAJCWdhcCA9IE1BWF9HQVA7CiAKLQlyZXR1cm4gVEFTS19TSVpFIC0gKGdhcCAmIFBBR0VfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1tYXBfaXNfbGVnYWN5KHZvaWQpCi17Ci0JLyoKLQkgKiBGb3JjZSBzdGFuZGFyZCBhbGxvY2F0aW9uIGZvciA2NCBiaXQgcHJvZ3JhbXMuCi0JICovCi0JaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpCi0JCXJldHVybiAxOwotCi0JaWYgKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgQUREUl9DT01QQVRfTEFZT1VUKQotCQlyZXR1cm4gMTsKLQotCWlmIChjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBzeXNjdGxfbGVnYWN5X3ZhX2xheW91dDsKKwlyZXR1cm4gUEFHRV9BTElHTihUQVNLX1NJWkUgLSBnYXAgLSBtbWFwX3JuZCgpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCA1MmEwY2ZjLi5hNzBlMzExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJCW1tLT5jb250ZXh0LmlkID0gTU1VX05PX0NPTlRFWFQ7CiAKIAkJLyogTWFyayBpdCBzdGFsZSBvbiBhbGwgQ1BVcyB0aGF0IHVzZWQgdGhpcyBtbSAqLwotCQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsIG1tLT5jcHVfdm1fbWFzaykKKwkJZm9yX2VhY2hfY3B1KGNwdSwgbW1fY3B1bWFzayhtbSkpCiAJCQlfX3NldF9iaXQoaWQsIHN0YWxlX21hcFtjcHVdKTsKIAkJcmV0dXJuIGlkOwogCX0KQEAgLTM4MCw3ICszODAsNyBAQAogI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJNTVU6IEFsbG9jYXRlZCAlZCBieXRlcyBvZiBjb250ZXh0IG1hcHMgZm9yICVkIGNvbnRleHRzXG4iLAorCSAgICAgICAiTU1VOiBBbGxvY2F0ZWQgJXp1IGJ5dGVzIG9mIGNvbnRleHQgbWFwcyBmb3IgJWQgY29udGV4dHNcbiIsCiAJICAgICAgIDIgKiBDVFhfTUFQX1NJWkUgKyAoc2l6ZW9mKHZvaWQgKikgKiAobGFzdF9jb250ZXh0ICsgMSkpLAogCSAgICAgICBsYXN0X2NvbnRleHQgLSBmaXJzdF9jb250ZXh0ICsgMSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IDVhYzA4YjguLjkwNDcxNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTU4LDM1ICsxNTgsNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19jcHVpbml0IGZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKLXsKLQl1bnNpZ25lZCBpbnQgaHdfY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSA9IE5VTEw7Ci0JY29uc3QgdW5zaWduZWQgaW50ICppbnRlcnJ1cHRfc2VydmVyLCAqcmVnOwotCWludCBsZW47Ci0KLQl3aGlsZSAoKGNwdV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoY3B1X25vZGUsICJjcHUiKSkgIT0gTlVMTCkgewotCQkvKiBUcnkgaW50ZXJydXB0IHNlcnZlciBmaXJzdCAqLwotCQlpbnRlcnJ1cHRfc2VydmVyID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdV9ub2RlLAotCQkJCQkiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLCAmbGVuKTsKLQotCQlsZW4gPSBsZW4gLyBzaXplb2YodTMyKTsKLQotCQlpZiAoaW50ZXJydXB0X3NlcnZlciAmJiAobGVuID4gMCkpIHsKLQkJCXdoaWxlIChsZW4tLSkgewotCQkJCWlmIChpbnRlcnJ1cHRfc2VydmVyW2xlbl0gPT0gaHdfY3B1aWQpCi0JCQkJCXJldHVybiBjcHVfbm9kZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShjcHVfbm9kZSwgInJlZyIsICZsZW4pOwotCQkJaWYgKHJlZyAmJiAobGVuID4gMCkgJiYgKHJlZ1swXSA9PSBod19jcHVpZCkpCi0JCQkJcmV0dXJuIGNwdV9ub2RlOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIC8qIG11c3QgaG9sZCByZWZlcmVuY2UgdG8gbm9kZSBkdXJpbmcgY2FsbCAqLwogc3RhdGljIGNvbnN0IGludCAqb2ZfZ2V0X2Fzc29jaWF0aXZpdHkoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCiB7CkBAIC0yOTAsNyArMjYxLDcgQEAKIAlyZWZfcG9pbnRzID0gb2ZfZ2V0X3Byb3BlcnR5KHJ0YXNfcm9vdCwKIAkJCSJpYm0sYXNzb2NpYXRpdml0eS1yZWZlcmVuY2UtcG9pbnRzIiwgJmxlbik7CiAKLQlpZiAoKGxlbiA+PSAxKSAmJiByZWZfcG9pbnRzKSB7CisJaWYgKChsZW4gPj0gMiAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSAmJiByZWZfcG9pbnRzKSB7CiAJCWRlcHRoID0gcmVmX3BvaW50c1sxXTsKIAl9IGVsc2UgewogCQlkYmcoIk5VTUE6IGlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMgbm90IGZvdW5kLlxuIik7CkBAIC00NzAsNyArNDQxLDcgQEAKIHN0YXRpYyBpbnQgX19jcHVpbml0IG51bWFfc2V0dXBfY3B1KHVuc2lnbmVkIGxvbmcgbGNwdSkKIHsKIAlpbnQgbmlkID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IGZpbmRfY3B1X25vZGUobGNwdSk7CisJc3RydWN0IGRldmljZV9ub2RlICpjcHUgPSBvZl9nZXRfY3B1X25vZGUobGNwdSwgTlVMTCk7CiAKIAlpZiAoIWNwdSkgewogCQlXQVJOX09OKDEpOwpAQCAtNjUyLDcgKzYyMyw3IEBACiAJZm9yX2VhY2hfcHJlc2VudF9jcHUoaSkgewogCQlpbnQgbmlkOwogCi0JCWNwdSA9IGZpbmRfY3B1X25vZGUoaSk7CisJCWNwdSA9IG9mX2dldF9jcHVfbm9kZShpLCBOVUxMKTsKIAkJQlVHX09OKCFjcHUpOwogCQluaWQgPSBvZl9ub2RlX3RvX25pZF9zaW5nbGUoY3B1KTsKIAkJb2Zfbm9kZV9wdXQoY3B1KTsKQEAgLTEwNDEsNTcgKzEwMTIsMzIgQEAKIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwogLyoKLSAqIFZhbGlkYXRlIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtb3J5IHNlY3Rpb24gd2UgYXJlCi0gKiB0cnlpbmcgdG8gYWRkLgotICovCi1pbnQgdmFsaWRfaG90X2FkZF9zY24oaW50ICpuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHUzMiBsbWJfc2l6ZSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBzY25fYWRkcikKLXsKLQlub2RlbWFza190IG5vZGVzOwotCi0JaWYgKCpuaWQgPCAwIHx8ICFub2RlX29ubGluZSgqbmlkKSkKLQkJKm5pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKLQotCWlmICgoc2NuX2FkZHIgPj0gc3RhcnQpICYmIChzY25fYWRkciA8IChzdGFydCArIGxtYl9zaXplKSkpIHsKLQkJbm9kZXNfc2V0YWxsKG5vZGVzKTsKLQkJd2hpbGUgKE5PREVfREFUQSgqbmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID09IDApIHsKLQkJCW5vZGVfY2xlYXIoKm5pZCwgbm9kZXMpOwotCQkJKm5pZCA9IGFueV9vbmxpbmVfbm9kZShub2Rlcyk7Ci0JCX0KLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uIHJlcHJlc2VudGVkCi0gKiBieSB0aGUgaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSBub2RlLgorICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24gZm9yCisgKiBtZW1vcnkgcmVwcmVzZW50ZWQgaW4gdGhlIGRldmljZSB0cmVlIGJ5IHRoZSBwcm9wZXJ0eQorICogaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeS9pYm0sZHluYW1pYy1tZW1vcnkuCiAgKi8KIHN0YXRpYyBpbnQgaG90X2FkZF9kcmNvbmZfc2NuX3RvX25pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCiB7CiAJY29uc3QgdTMyICpkbTsKLQl1bnNpZ25lZCBpbnQgbiwgcmM7CisJdW5zaWduZWQgaW50IGRyY29uZl9jZWxsX2NudCwgcmM7CiAJdW5zaWduZWQgbG9uZyBsbWJfc2l6ZTsKLQlpbnQgZGVmYXVsdF9uaWQgPSBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7Ci0JaW50IG5pZDsKIAlzdHJ1Y3QgYXNzb2NfYXJyYXlzIGFhOworCWludCBuaWQgPSAtMTsKIAotCW4gPSBvZl9nZXRfZHJjb25mX21lbW9yeShtZW1vcnksICZkbSk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gZGVmYXVsdF9uaWQ7OworCWRyY29uZl9jZWxsX2NudCA9IG9mX2dldF9kcmNvbmZfbWVtb3J5KG1lbW9yeSwgJmRtKTsKKwlpZiAoIWRyY29uZl9jZWxsX2NudCkKKwkJcmV0dXJuIC0xOwogCiAJbG1iX3NpemUgPSBvZl9nZXRfbG1iX3NpemUobWVtb3J5KTsKIAlpZiAoIWxtYl9zaXplKQotCQlyZXR1cm4gZGVmYXVsdF9uaWQ7CisJCXJldHVybiAtMTsKIAogCXJjID0gb2ZfZ2V0X2Fzc29jX2FycmF5cyhtZW1vcnksICZhYSk7CiAJaWYgKHJjKQotCQlyZXR1cm4gZGVmYXVsdF9uaWQ7CisJCXJldHVybiAtMTsKIAotCWZvciAoOyBuICE9IDA7IC0tbikgeworCWZvciAoOyBkcmNvbmZfY2VsbF9jbnQgIT0gMDsgLS1kcmNvbmZfY2VsbF9jbnQpIHsKIAkJc3RydWN0IG9mX2RyY29uZl9jZWxsIGRybWVtOwogCiAJCXJlYWRfZHJjb25mX2NlbGwoJmRybWVtLCAmZG0pOwpAQCAtMTEwMiwzNiArMTA0OCwyNiBAQAogCQkgICAgfHwgIShkcm1lbS5mbGFncyAmIERSQ09ORl9NRU1fQVNTSUdORUQpKQogCQkJY29udGludWU7CiAKLQkJbmlkID0gb2ZfZHJjb25mX3RvX25pZF9zaW5nbGUoJmRybWVtLCAmYWEpOworCQlpZiAoKHNjbl9hZGRyIDwgZHJtZW0uYmFzZV9hZGRyKQorCQkgICAgfHwgKHNjbl9hZGRyID49IChkcm1lbS5iYXNlX2FkZHIgKyBsbWJfc2l6ZSkpKQorCQkJY29udGludWU7CiAKLQkJaWYgKHZhbGlkX2hvdF9hZGRfc2NuKCZuaWQsIGRybWVtLmJhc2VfYWRkciwgbG1iX3NpemUsCi0JCQkJICAgICAgc2NuX2FkZHIpKQotCQkJcmV0dXJuIG5pZDsKKwkJbmlkID0gb2ZfZHJjb25mX3RvX25pZF9zaW5nbGUoJmRybWVtLCAmYWEpOworCQlicmVhazsKIAl9CiAKLQlCVUcoKTsJLyogc2VjdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBmb3VuZCBhYm92ZSAqLwotCXJldHVybiAwOworCXJldHVybiBuaWQ7CiB9CiAKIC8qCi0gKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbi4gIFNlY3Rpb24KLSAqIGNvcnJlc3BvbmRzIHRvIGEgU1BBUlNFTUVNIHNlY3Rpb24sIG5vdCBhbiBMTUIuICBJdCBpcyBhc3N1bWVkIHRoYXQKLSAqIHNlY3Rpb25zIGFyZSBmdWxseSBjb250YWluZWQgd2l0aGluIGEgc2luZ2xlIExNQi4KKyAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uIGZvciBtZW1vcnkKKyAqIHJlcHJlc2VudGVkIGluIHRoZSBkZXZpY2UgdHJlZSBhcyBhIG5vZGUgKGkuZS4gbWVtb3J5QFhYWFgpIGZvcgorICogZWFjaCBsbWIuCiAgKi8KLWludCBob3RfYWRkX3Njbl90b19uaWQodW5zaWduZWQgbG9uZyBzY25fYWRkcikKK2ludCBob3RfYWRkX25vZGVfc2NuX3RvX25pZCh1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKLQlpbnQgbmlkOwotCi0JaWYgKCFudW1hX2VuYWJsZWQgfHwgKG1pbl9jb21tb25fZGVwdGggPCAwKSkKLQkJcmV0dXJuIGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKLQotCW1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpOwotCWlmIChtZW1vcnkpIHsKLQkJbmlkID0gaG90X2FkZF9kcmNvbmZfc2NuX3RvX25pZChtZW1vcnksIHNjbl9hZGRyKTsKLQkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKLQkJcmV0dXJuIG5pZDsKLQl9CisJaW50IG5pZCA9IC0xOwogCiAJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplOwpAQCAtMTE0NSwyMCArMTA4MSw2MiBAQAogCiAJCS8qIHJhbmdlcyBpbiBjZWxsICovCiAJCXJhbmdlcyA9IChsZW4gPj4gMikgLyAobl9tZW1fYWRkcl9jZWxscyArIG5fbWVtX3NpemVfY2VsbHMpOwotaGFfbmV3X3JhbmdlOgotCQlzdGFydCA9IHJlYWRfbl9jZWxscyhuX21lbV9hZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQlzaXplID0gcmVhZF9uX2NlbGxzKG5fbWVtX3NpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShtZW1vcnkpOwogCi0JCWlmICh2YWxpZF9ob3RfYWRkX3NjbigmbmlkLCBzdGFydCwgc2l6ZSwgc2NuX2FkZHIpKSB7Ci0JCQlvZl9ub2RlX3B1dChtZW1vcnkpOwotCQkJcmV0dXJuIG5pZDsKKwkJd2hpbGUgKHJhbmdlcy0tKSB7CisJCQlzdGFydCA9IHJlYWRfbl9jZWxscyhuX21lbV9hZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOworCQkJc2l6ZSA9IHJlYWRfbl9jZWxscyhuX21lbV9zaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOworCisJCQlpZiAoKHNjbl9hZGRyIDwgc3RhcnQpIHx8IChzY25fYWRkciA+PSAoc3RhcnQgKyBzaXplKSkpCisJCQkJY29udGludWU7CisKKwkJCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShtZW1vcnkpOworCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoLS1yYW5nZXMpCQkvKiBwcm9jZXNzIGFsbCByYW5nZXMgaW4gY2VsbCAqLwotCQkJZ290byBoYV9uZXdfcmFuZ2U7CisJCW9mX25vZGVfcHV0KG1lbW9yeSk7CisJCWlmIChuaWQgPj0gMCkKKwkJCWJyZWFrOwogCX0KLQlCVUcoKTsJLyogc2VjdGlvbiBhZGRyZXNzIHNob3VsZCBiZSBmb3VuZCBhYm92ZSAqLwotCXJldHVybiAwOworCisJcmV0dXJuIG5pZDsKIH0KKworLyoKKyAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uLiAgU2VjdGlvbgorICogY29ycmVzcG9uZHMgdG8gYSBTUEFSU0VNRU0gc2VjdGlvbiwgbm90IGFuIExNQi4gIEl0IGlzIGFzc3VtZWQgdGhhdAorICogc2VjdGlvbnMgYXJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzaW5nbGUgTE1CLgorICovCitpbnQgaG90X2FkZF9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCit7CisJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOworCWludCBuaWQsIGZvdW5kID0gMDsKKworCWlmICghbnVtYV9lbmFibGVkIHx8IChtaW5fY29tbW9uX2RlcHRoIDwgMCkpCisJCXJldHVybiBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7CisKKwltZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxkeW5hbWljLXJlY29uZmlndXJhdGlvbi1tZW1vcnkiKTsKKwlpZiAobWVtb3J5KSB7CisJCW5pZCA9IGhvdF9hZGRfZHJjb25mX3Njbl90b19uaWQobWVtb3J5LCBzY25fYWRkcik7CisJCW9mX25vZGVfcHV0KG1lbW9yeSk7CisJfSBlbHNlIHsKKwkJbmlkID0gaG90X2FkZF9ub2RlX3Njbl90b19uaWQoc2NuX2FkZHIpOworCX0KKworCWlmIChuaWQgPCAwIHx8ICFub2RlX29ubGluZShuaWQpKQorCQluaWQgPSBhbnlfb25saW5lX25vZGUoTk9ERV9NQVNLX0FMTCk7CisKKwlpZiAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykKKwkJcmV0dXJuIG5pZDsKKworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgeworCQlpZiAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcykgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlCVUdfT04oIWZvdW5kKTsKKwlyZXR1cm4gbmlkOworfQorCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwppbmRleCA2ZDk0MTE2Li5mNWM2ZmQ0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiByb3V0aW5lcyBmb3IgZGVhbGluZyB3aXRoIGZyZWUgb2YgcGFnZSB0YWJsZXMKKyAqIEFsb25nIHdpdGggY29tbW9uIHBhZ2UgdGFibGUgaGFuZGxpbmcgY29kZQogICoKICAqICBEZXJpdmVkIGZyb20gYXJjaC9wb3dlcnBjL21tL3RsYl82NC5jOgogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCkBAIC04MSwxMSArODIsMTAgQEAKIHZvaWQgcGd0YWJsZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX2ZyZWVfdCBwZ2YpCiB7CiAJLyogVGhpcyBpcyBzYWZlIHNpbmNlIHRsYl9nYXRoZXJfbW11IGhhcyBkaXNhYmxlZCBwcmVlbXB0aW9uICovCi0gICAgICAgIGNwdW1hc2tfdCBsb2NhbF9jcHVtYXNrID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlzdHJ1Y3QgcHRlX2ZyZWVsaXN0X2JhdGNoICoqYmF0Y2hwID0gJl9fZ2V0X2NwdV92YXIocHRlX2ZyZWVsaXN0X2N1cik7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnRsYi0+bW0tPm1tX3VzZXJzKSA8IDIgfHwKLQkgICAgY3B1c19lcXVhbCh0bGItPm1tLT5jcHVfdm1fbWFzaywgbG9jYWxfY3B1bWFzaykpIHsKKwkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKHRsYi0+bW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKXsKIAkJcGd0YWJsZV9mcmVlKHBnZik7CiAJCXJldHVybjsKIAl9CkBAIC0xMTUsMyArMTE1LDEzMyBAQAogCXB0ZV9mcmVlX3N1Ym1pdCgqYmF0Y2hwKTsKIAkqYmF0Y2hwID0gTlVMTDsKIH0KKworLyoKKyAqIEhhbmRsZSBpL2QgY2FjaGUgZmx1c2hpbmcsIGNhbGxlZCBmcm9tIHNldF9wdGVfYXQoKSBvciBwdGVwX3NldF9hY2Nlc3NfZmxhZ3MoKQorICovCitzdGF0aWMgcHRlX3QgZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kocHRlX3QgcHRlKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKHVubGlrZWx5KCFwZm5fdmFsaWQocGZuKSkpCisJCXJldHVybiBwdGU7CisJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisKKwlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJiAhdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpKSB7CisJCXByX2RlYnVnKCJkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeS4uLiBmbHVzaGluZ1xuIik7CisJCWZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShwYWdlKTsKKwkJc2V0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncyk7CisJfQorCWVsc2UKKwkJcHJfZGVidWcoImRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5Li4uIGFscmVhZHkgY2xlYW5cbiIpOworCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgfCBfUEFHRV9IV0VYRUMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19leGVjX2ZhdWx0KHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnQtPnRocmVhZC5yZWdzICYmIFRSQVAoY3VycmVudC0+dGhyZWFkLnJlZ3MpID09IDB4NDAwOworfQorCisvKiBXZSBvbmx5IHRyeSB0byBkbyBpL2QgY2FjaGUgY29oZXJlbmN5IG9uIHN0dWZmIHRoYXQgbG9va3MgbGlrZQorICogcmVhc29uYWJseSAibm9ybWFsIiBQVEVzLiBXZSBjdXJyZW50bHkgcmVxdWlyZSBhIFBURSB0byBiZSBwcmVzZW50CisgKiBhbmQgd2UgYXZvaWQgX1BBR0VfU1BFQ0lBTCBhbmQgX1BBR0VfTk9fQ0FDSEUKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX2xvb2tzX25vcm1hbChwdGVfdCBwdGUpCit7CisJcmV0dXJuIChwdGVfdmFsKHB0ZSkgJgorCQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1NQRUNJQUwgfCBfUEFHRV9OT19DQUNIRSkpID09CisJCShfUEFHRV9QUkVTRU5UKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKQorLyogU2VydmVyLXN0eWxlIE1NVSBoYW5kbGVzIGNvaGVyZW5jeSB3aGVuIGhhc2hpbmcgaWYgSFcgZXhlYyBwZXJtaXNzaW9uCisgKiBpcyBzdXBwb3NlZCBwZXIgcGFnZSAoY3VycmVudGx5IDY0LWJpdCBvbmx5KS4gRWxzZSwgd2UgYWx3YXlzIGZsdXNoCisgKiB2YWxpZCBQVEVzIGluIHNldF9wdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlX3QgcHRlLCBpbnQgc2V0X3B0ZSkKK3sKKwlyZXR1cm4gc2V0X3B0ZSAmJiBwdGVfbG9va3Nfbm9ybWFsKHB0ZSkgJiYKKwkJIShjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpIHx8CisJCSAgY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9FWEVDVVRFKSk7Cit9CisjZWxpZiBfUEFHRV9IV0VYRUMgPT0gMAorLyogRW1iZWRkZWQgdHlwZSBNTVUgd2l0aG91dCBIVyBleGVjIHN1cHBvcnQgKDh4eCBvbmx5IHNvIGZhciksIHdlIGZsdXNoCisgKiB0aGUgY2FjaGUgZm9yIGFueSBwcmVzZW50IFBURQorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfbmVlZF9leGVjX2ZsdXNoKHB0ZV90IHB0ZSwgaW50IHNldF9wdGUpCit7CisJcmV0dXJuIHNldF9wdGUgJiYgcHRlX2xvb2tzX25vcm1hbChwdGUpOworfQorI2Vsc2UKKy8qIE90aGVyIGVtYmVkZGVkIENQVXMgd2l0aCBIVyBleGVjIHN1cHBvcnQgcGVyLXBhZ2UsIHdlIGZsdXNoIG9uIGV4ZWMKKyAqIGZhdWx0IGlmIEhXRVhFQyBpcyBub3Qgc2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlX3QgcHRlLCBpbnQgc2V0X3B0ZSkKK3sKKwlyZXR1cm4gcHRlX2xvb2tzX25vcm1hbChwdGUpICYmIGlzX2V4ZWNfZmF1bHQoKSAmJgorCQkhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0hXRVhFQyk7Cit9CisjZW5kaWYKKworLyoKKyAqIHNldF9wdGUgc3RvcmVzIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCisgKi8KK3ZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQoreworI2lmZGVmIENPTkZJR19ERUJVR19WTQorCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKKyNlbmRpZgorCS8qIE5vdGU6IG1tLT5jb250ZXh0LmlkIG1pZ2h0IG5vdCB5ZXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGFzCisJICogdGhpcyBjb250ZXh0IG1pZ2h0IG5vdCBoYXZlIGJlZW4gYWN0aXZhdGVkIHlldCB3aGVuIHRoaXMKKwkgKiBpcyBjYWxsZWQuCisJICovCisJcHRlID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7CisJaWYgKHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlLCAxKSkKKwkJcHRlID0gZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kocHRlKTsKKworCS8qIFBlcmZvcm0gdGhlIHNldHRpbmcgb2YgdGhlIFBURSAqLworCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlLCAwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gcmVsYXhpbmcgYWNjZXNzIHRvIGEgUFRFLiBJdCdzIGFsc28gY2FsbGVkIGluIHRoZSBwYWdlCisgKiBmYXVsdCBwYXRoIHdoZW4gd2UgZG9uJ3QgaGl0IGFueSBvZiB0aGUgbWFqb3IgZmF1bHQgY2FzZXMsIGllLCBhIG1pbm9yCisgKiB1cGRhdGUgb2YgX1BBR0VfQUNDRVNTRUQsIF9QQUdFX0RJUlRZLCBldGMuLi4gVGhlIGdlbmVyaWMgY29kZSB3aWxsIGhhdmUKKyAqIGhhbmRsZWQgdGhvc2UgdHdvIGZvciB1cywgd2UgYWRkaXRpb25hbGx5IGRlYWwgd2l0aCBtaXNzaW5nIGV4ZWN1dGUKKyAqIHBlcm1pc3Npb24gaGVyZSBvbiBzb21lIHByb2Nlc3NvcnMKKyAqLworaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnksIGludCBkaXJ0eSkKK3sKKwlpbnQgY2hhbmdlZDsKKwlpZiAoIWRpcnR5ICYmIHB0ZV9uZWVkX2V4ZWNfZmx1c2goZW50cnksIDApKQorCQllbnRyeSA9IGRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5KGVudHJ5KTsKKwljaGFuZ2VkID0gIXB0ZV9zYW1lKCoocHRlcCksIGVudHJ5KTsKKwlpZiAoY2hhbmdlZCkgeworCQlhc3NlcnRfcHRlX2xvY2tlZCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKKwkJX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlcCwgZW50cnkpOworCQlmbHVzaF90bGJfcGFnZV9ub2hhc2godm1hLCBhZGRyZXNzKTsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK3ZvaWQgYXNzZXJ0X3B0ZV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKworCWlmIChtbSA9PSAmaW5pdF9tbSkKKwkJcmV0dXJuOworCXBnZCA9IG1tLT5wZ2QgKyBwZ2RfaW5kZXgoYWRkcik7CisJQlVHX09OKHBnZF9ub25lKCpwZ2QpKTsKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJQlVHX09OKHB1ZF9ub25lKCpwdWQpKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJQlVHX09OKCFwbWRfcHJlc2VudCgqcG1kKSk7CisJQlVHX09OKCFzcGluX2lzX2xvY2tlZChwdGVfbG9ja3B0cihtbSwgcG1kKSkpOworfQorI2VuZGlmIC8qIENPTkZJR19ERUJVR19WTSAqLworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwppbmRleCA1OGJjYWViLi40MzBkMDkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKQEAgLTEyOSw3ICsxMjksOCBAQAogdm9pZCBfX2lvbWVtICoKIGlvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX2lvcmVtYXAoYWRkciwgc2l6ZSwgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQsCisJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcCk7CiAKQEAgLTE0MywyMCArMTQ0LDI3IEBACiAJLyogd2UgZG9uJ3Qgd2FudCB0byBsZXQgX1BBR0VfVVNFUiBhbmQgX1BBR0VfRVhFQyBsZWFrIG91dCAqLwogCWZsYWdzICY9IH4oX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpOwogCi0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlvcmVtYXBfZmxhZ3MpOwogCiB2b2lkIF9faW9tZW0gKgogX19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKwordm9pZCBfX2lvbWVtICoKK19faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkgdm9pZCAqY2FsbGVyKQorewogCXVuc2lnbmVkIGxvbmcgdiwgaTsKIAlwaHlzX2FkZHJfdCBwOwogCWludCBlcnI7CiAKIAkvKiBNYWtlIHN1cmUgd2UgaGF2ZSB0aGUgYmFzZSBmbGFncyAqLwogCWlmICgoZmxhZ3MgJiBfUEFHRV9QUkVTRU5UKSA9PSAwKQotCQlmbGFncyB8PSBfUEFHRV9LRVJORUw7CisJCWZsYWdzIHw9IFBBR0VfS0VSTkVMOwogCiAJLyogTm9uLWNhY2hlYWJsZSBwYWdlIGNhbm5vdCBiZSBjb2hlcmVudCAqLwogCWlmIChmbGFncyAmIF9QQUdFX05PX0NBQ0hFKQpAQCAtMjEyLDcgKzIyMCw3IEBACiAKIAlpZiAobWVtX2luaXRfZG9uZSkgewogCQlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwotCQlhcmVhID0gZ2V0X3ZtX2FyZWEoc2l6ZSwgVk1fSU9SRU1BUCk7CisJCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKIAkJaWYgKGFyZWEgPT0gMCkKIAkJCXJldHVybiBOVUxMOwogCQl2ID0gKHVuc2lnbmVkIGxvbmcpIGFyZWEtPmFkZHI7CkBAIC0yODgsNyArMjk2LDcgQEAKIAlwID0gbWVtc3RhcnRfYWRkciArIHM7CiAJZm9yICg7IHMgPCB0b3RhbF9sb3dtZW07IHMgKz0gUEFHRV9TSVpFKSB7CiAJCWt0ZXh0ID0gKChjaGFyICopIHYgPj0gX3N0ZXh0ICYmIChjaGFyICopIHYgPCBldGV4dCk7Ci0JCWYgPSBrdGV4dCA/X1BBR0VfUkFNX1RFWFQgOiBfUEFHRV9SQU07CisJCWYgPSBrdGV4dCA/IFBBR0VfS0VSTkVMX1RFWFQgOiBQQUdFX0tFUk5FTDsKIAkJbWFwX3BhZ2UodiwgcCwgZik7CiAjaWZkZWYgQ09ORklHX1BQQ19TVERfTU1VXzMyCiAJCWlmIChrdGV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDM2NWU2MWEuLmJmYTdkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMTQ0LDggKzE0NCw4IEBACiAJdW5tYXBfa2VybmVsX3JhbmdlKCh1bnNpZ25lZCBsb25nKWVhLCBzaXplKTsKIH0KIAotdm9pZCBfX2lvbWVtICogX19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQordm9pZCBfX2lvbWVtICogX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQogewogCXBoeXNfYWRkcl90IHBhbGlnbmVkOwogCXZvaWQgX19pb21lbSAqcmV0OwpAQCAtMTY4LDggKzE2OCw5IEBACiAJaWYgKG1lbV9pbml0X2RvbmUpIHsKIAkJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAotCQlhcmVhID0gX19nZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQLAotCQkJCSAgICAgaW9yZW1hcF9ib3QsIElPUkVNQVBfRU5EKTsKKwkJYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsCisJCQkJCSAgICBpb3JlbWFwX2JvdCwgSU9SRU1BUF9FTkQsCisJCQkJCSAgICBjYWxsZXIpOwogCQlpZiAoYXJlYSA9PSBOVUxMKQogCQkJcmV0dXJuIE5VTEw7CiAJCXJldCA9IF9faW9yZW1hcF9hdChwYWxpZ25lZCwgYXJlYS0+YWRkciwgc2l6ZSwgZmxhZ3MpOwpAQCAtMTg2LDE5ICsxODcsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CiAKIHZvaWQgX19pb21lbSAqIGlvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQ7CisJdm9pZCAqY2FsbGVyID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwogCiAJaWYgKHBwY19tZC5pb3JlbWFwKQotCQlyZXR1cm4gcHBjX21kLmlvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOwotCXJldHVybiBfX2lvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MpOworCQlyZXR1cm4gcHBjX21kLmlvcmVtYXAoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CisJcmV0dXJuIF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CiB9CiAKIHZvaWQgX19pb21lbSAqIGlvcmVtYXBfZmxhZ3MocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQogeworCXZvaWQgKmNhbGxlciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwogCS8qIHdyaXRlYWJsZSBpbXBsaWVzIGRpcnR5IGZvciBrZXJuZWwgYWRkcmVzc2VzICovCiAJaWYgKGZsYWdzICYgX1BBR0VfUlcpCiAJCWZsYWdzIHw9IF9QQUdFX0RJUlRZOwpAQCAtMjA3LDggKzIxNiw4IEBACiAJZmxhZ3MgJj0gfihfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQyk7CiAKIAlpZiAocHBjX21kLmlvcmVtYXApCi0JCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7Ci0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jIGIvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYwppbmRleCBmZTY1YzQwLi4yZDJhODdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKQEAgLTc0LDkgKzc0LDYgQEAKIAogdW5zaWduZWQgbG9uZyBfX2luaXQgbW11X21hcGluX3JhbSh2b2lkKQogewotI2lmZGVmIENPTkZJR19QT1dFUjQKLQlyZXR1cm4gMDsKLSNlbHNlCiAJdW5zaWduZWQgbG9uZyB0b3QsIGJsLCBkb25lOwogCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUgPSAoMjU2PDwyMCk7CiAKQEAgLTk1LDcgKzkyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCXNldGJhdCgyLCBQQUdFX09GRlNFVCwgMCwgYmwsIF9QQUdFX1JBTSk7CisJc2V0YmF0KDIsIFBBR0VfT0ZGU0VULCAwLCBibCwgUEFHRV9LRVJORUxfWCk7CiAJZG9uZSA9ICh1bnNpZ25lZCBsb25nKWJhdF9hZGRyc1syXS5saW1pdCAtIFBBR0VfT0ZGU0VUICsgMTsKIAlpZiAoKGRvbmUgPCB0b3QpICYmICFiYXRfYWRkcnNbM10ubGltaXQpIHsKIAkJLyogdXNlIEJBVDMgdG8gY292ZXIgYSBiaXQgbW9yZSAqLwpAQCAtMTAzLDEyICsxMDAsMTEgQEAKIAkJZm9yIChibCA9IDEyODw8MTA7IGJsIDwgbWF4X3NpemU7IGJsIDw8PSAxKQogCQkJaWYgKGJsICogMiA+IHRvdCkKIAkJCQlicmVhazsKLQkJc2V0YmF0KDMsIFBBR0VfT0ZGU0VUK2RvbmUsIGRvbmUsIGJsLCBfUEFHRV9SQU0pOworCQlzZXRiYXQoMywgUEFHRV9PRkZTRVQrZG9uZSwgZG9uZSwgYmwsIFBBR0VfS0VSTkVMX1gpOwogCQlkb25lID0gKHVuc2lnbmVkIGxvbmcpYmF0X2FkZHJzWzNdLmxpbWl0IC0gUEFHRV9PRkZTRVQgKyAxOwogCX0KIAogCXJldHVybiBkb25lOwotI2VuZGlmCiB9CiAKIC8qCkBAIC0xMzYsOSArMTMyLDcgQEAKIAkJd2ltZ3hwcCB8PSAoZmxhZ3MgJiBfUEFHRV9SVyk/IEJQUF9SVzogQlBQX1JYOwogCQliYXRbMV0uYmF0dSA9IHZpcnQgfCAoYmwgPDwgMikgfCAyOyAvKiBWcz0xLCBWcD0wICovCiAJCWJhdFsxXS5iYXRsID0gQkFUX1BIWVNfQUREUihwaHlzKSB8IHdpbWd4cHA7Ci0jaWZuZGVmIENPTkZJR19LR0RCIC8qIHdhbnQgdXNlciBhY2Nlc3MgZm9yIGJyZWFrcG9pbnRzICovCiAJCWlmIChmbGFncyAmIF9QQUdFX1VTRVIpCi0jZW5kaWYKIAkJCWJhdFsxXS5iYXR1IHw9IDE7IAkvKiBWcCA9IDEgKi8KIAkJaWYgKGZsYWdzICYgX1BBR0VfR1VBUkRFRCkgewogCQkJLyogRyBiaXQgbXVzdCBiZSB6ZXJvIGluIElCQVRzICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwppbmRleCBjOTMxYmM3Li4xYmUxYjVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKQEAgLTEzOSwxMiArMTM5LDEyIEBACiAgKi8KIHZvaWQgX19mbHVzaF90bGJfcGVuZGluZyhzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCkKIHsKLQljcHVtYXNrX3QgdG1wOworCWNvbnN0IHN0cnVjdCBjcHVtYXNrICp0bXA7CiAJaW50IGksIGxvY2FsID0gMDsKIAogCWkgPSBiYXRjaC0+aW5kZXg7Ci0JdG1wID0gY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAoY3B1c19lcXVhbChiYXRjaC0+bW0tPmNwdV92bV9tYXNrLCB0bXApKQorCXRtcCA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAoY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKGJhdGNoLT5tbSksIHRtcCkpCiAJCWxvY2FsID0gMTsKIAlpZiAoaSA9PSAxKQogCQlmbHVzaF9oYXNoX3BhZ2UoYmF0Y2gtPnZhZGRyWzBdLCBiYXRjaC0+cHRlWzBdLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKaW5kZXggMzlhYzIyYi4uN2FmNzI5NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogCXBpZCA9IG1tLT5jb250ZXh0LmlkOwogCWlmICh1bmxpa2VseShwaWQgPT0gTU1VX05PX0NPTlRFWFQpKQogCQlnb3RvIG5vX2NvbnRleHQ7Ci0JY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpIHsKKwlpZiAoIWNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKIAkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geyAucGlkID0gcGlkIH07Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X21hc2ssIGRvX2ZsdXNoX3RsYl9tbV9pcGksICZwLCAxKTsKKwkJLyogSWdub3JlcyBzbXBfcHJvY2Vzc29yX2lkKCkgZXZlbiBpZiBzZXQuICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uX21hbnkobW1fY3B1bWFzayhtbSksCisJCQkJICAgICAgIGRvX2ZsdXNoX3RsYl9tbV9pcGksICZwLCAxKTsKIAl9CiAJX3RsYmlsX3BpZChwaWQpOwogIG5vX2NvbnRleHQ6CkBAIC0xNDYsMTYgKzE0NiwxNSBAQAogCiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKIHsKLQljcHVtYXNrX3QgY3B1X21hc2s7CisJc3RydWN0IGNwdW1hc2sgKmNwdV9tYXNrOwogCXVuc2lnbmVkIGludCBwaWQ7CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlwaWQgPSB2bWEgPyB2bWEtPnZtX21tLT5jb250ZXh0LmlkIDogMDsKIAlpZiAodW5saWtlbHkocGlkID09IE1NVV9OT19DT05URVhUKSkKIAkJZ290byBiYWlsOwotCWNwdV9tYXNrID0gdm1hLT52bV9tbS0+Y3B1X3ZtX21hc2s7Ci0JY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwotCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpIHsKKwljcHVfbWFzayA9IG1tX2NwdW1hc2sodm1hLT52bV9tbSk7CisJaWYgKCFjcHVtYXNrX2VxdWFsKGNwdV9tYXNrLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKSB7CiAJCS8qIElmIGJyb2FkY2FzdCB0bGJpdmF4IGlzIHN1cHBvcnRlZCwgdXNlIGl0ICovCiAJCWlmIChtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9VU0VfVExCSVZBWF9CQ0FTVCkpIHsKIAkJCWludCBsb2NrID0gbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTCk7CkBAIC0xNjcsNyArMTY2LDggQEAKIAkJCWdvdG8gYmFpbDsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCB0bGJfZmx1c2hfcGFyYW0gcCA9IHsgLnBpZCA9IHBpZCwgLmFkZHIgPSB2bWFkZHIgfTsKLQkJCXNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X21hc2ssCisJCQkvKiBJZ25vcmVzIHNtcF9wcm9jZXNzb3JfaWQoKSBldmVuIGlmIHNldCBpbiBjcHVfbWFzayAqLworCQkJc21wX2NhbGxfZnVuY3Rpb25fbWFueShjcHVfbWFzaywKIAkJCQkJICAgICAgIGRvX2ZsdXNoX3RsYl9wYWdlX2lwaSwgJnAsIDEpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2hfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwppbmRleCBmOTAwYTM5Li43ODhiODdjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUwpAQCAtMTE4LDI1ICsxMTgsNTAgQEAKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQogLyoKLSAqIEZTTCBCb29rRSBpbXBsZW1lbnRhdGlvbnMuIEN1cnJlbnRseSBfcGlkIGFuZCBfYWxsIGFyZSB0aGUKLSAqIHNhbWUuIFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiB0bGJpbHggaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGFuZAotICogcGVyZm9ybXMgaW52YWxpZGF0ZS1ieS1QSUQuIFRoaXMgY2hhbmdlIHdpbGwgYmUgZHJpdmVuIGJ5Ci0gKiBtbXVfZmVhdHVyZXMgY29uZGl0aW9uYWwKKyAqIEZTTCBCb29rRSBpbXBsZW1lbnRhdGlvbnMuCisgKgorICogU2luY2UgZmVhdHVyZSBzZWN0aW9ucyBhcmUgdXNpbmcgX1NFQ1RJT05fRUxTRSB3ZSBuZWVkCisgKiB0byBoYXZlIHRoZSBsYXJnZXIgY29kZSBwYXRoIGJlZm9yZSB0aGUgX1NFQ1RJT05fRUxTRQogICovCiAKKyNkZWZpbmUgTU1VQ1NSMF9UTEJGSQkoTU1VQ1NSMF9UTEIwRkkgfCBNTVVDU1IwX1RMQjFGSSB8IFwKKwkJCSBNTVVDU1IwX1RMQjJGSSB8IE1NVUNTUjBfVExCM0ZJKQogLyoKICAqIEZsdXNoIE1NVSBUTEIgb24gdGhlIGxvY2FsIHByb2Nlc3NvcgogICovCi1fR0xPQkFMKF90bGJpbF9waWQpCiBfR0xPQkFMKF90bGJpbF9hbGwpCi0jZGVmaW5lIE1NVUNTUjBfVExCRkkJKE1NVUNTUjBfVExCMEZJIHwgTU1VQ1NSMF9UTEIxRkkgfCBcCi0JCQkgTU1VQ1NSMF9UTEIyRkkgfCBNTVVDU1IwX1RMQjNGSSkKK0JFR0lOX01NVV9GVFJfU0VDVElPTgogCWxpCXIzLChNTVVDU1IwX1RMQkZJKUBsCiAJbXRzcHIJU1BSTl9NTVVDU1IwLCByMwogMToKIAltZnNwcglyMyxTUFJOX01NVUNTUjAKIAlhbmRpLglyMyxyMyxNTVVDU1IwX1RMQkZJQGwKIAlibmUJMWIKK01NVV9GVFJfU0VDVElPTl9FTFNFCisJUFBDX1RMQklMWF9BTEwoMCwwKQorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9VU0VfVExCSUxYKQorCW1zeW5jCisJaXN5bmMKKwlibHIKKworX0dMT0JBTChfdGxiaWxfcGlkKQorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJc2x3aQlyMyxyMywxNgorCW1mbXNyCXIxMAorCXdydGVlaQkwCisJbWZzcHIJcjQsU1BSTl9NQVM2CS8qIHNhdmUgTUFTNiAqLworCW10c3ByCVNQUk5fTUFTNixyMworCVBQQ19UTEJJTFhfUElEKDAsMCkKKwltdHNwcglTUFJOX01BUzYscjQJLyogcmVzdG9yZSBNQVM2ICovCisJd3J0ZWUJcjEwCitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCWxpCXIzLChNTVVDU1IwX1RMQkZJKUBsCisJbXRzcHIJU1BSTl9NTVVDU1IwLCByMworMToKKwltZnNwcglyMyxTUFJOX01NVUNTUjAKKwlhbmRpLglyMyxyMyxNTVVDU1IwX1RMQkZJQGwKKwlibmUJMWIKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGU0VUKE1NVV9GVFJfVVNFX1RMQklMWCkKIAltc3luYwogCWlzeW5jCiAJYmxyCkBAIC0xNDksNyArMTc0LDkgQEAKIAltZm1zcglyMTAKIAl3cnRlZWkJMAogCXNsd2kJcjQscjQsMTYKKwlvcmkJcjQscjQsKE1BUzZfSVNJWkUoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzYscjQJCS8qIGFzc3VtZSBBUz0wIGZvciBub3cgKi8KK0JFR0lOX01NVV9GVFJfU0VDVElPTgogCXRsYnN4CTAscjMKIAltZnNwcglyNCxTUFJOX01BUzEJCS8qIGNoZWNrIHZhbGlkICovCiAJYW5kaXMuCXIzLHI0LE1BUzFfVkFMSURAaApAQCAtMTU3LDYgKzE4NCw5IEBACiAJcmx3aW5tCXI0LHI0LDAsMSwzMQogCW10c3ByCVNQUk5fTUFTMSxyNAogCXRsYndlCitNTVVfRlRSX1NFQ1RJT05fRUxTRQorCVBQQ19UTEJJTFhfVkEoMCxyMykKK0FMVF9NTVVfRlRSX1NFQ1RJT05fRU5EX0lGQ0xSKE1NVV9GVFJfVVNFX1RMQklMWCkKIAltc3luYwogCWlzeW5jCiAxOgl3cnRlZQlyMTAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jCmluZGV4IGNjNTk5ZWIuLmY4ZDM2ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYwpAQCAtMjksNyArMjksNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFsdWVbT1BfTUFYX0NPVU5URVJdOwogCiBzdGF0aWMgaW50IG9wcm9maWxlX3J1bm5pbmc7Ci1zdGF0aWMgdTMyIG1tY3IwX3ZhbCwgbW1jcjFfdmFsLCBtbWNyMl92YWw7CitzdGF0aWMgdTMyIG1tY3IwX3ZhbCwgbW1jcjFfdmFsLCBtbWNyMl92YWwsIG51bV9wbWNzOwogCiAjZGVmaW5lIE1NQ1IwX1BNQzFfU0hJRlQJNgogI2RlZmluZSBNTUNSMF9QTUMyX1NISUZUCTAKQEAgLTg4LDEzICs4OCwxMiBAQAogCiAJbXRzcHIoU1BSTl9NTUNSMCwgbW1jcjBfdmFsKTsKIAltdHNwcihTUFJOX01NQ1IxLCBtbWNyMV92YWwpOwotCW10c3ByKFNQUk5fTU1DUjIsIG1tY3IyX3ZhbCk7CisJaWYgKG51bV9wbWNzID4gNCkKKwkJbXRzcHIoU1BSTl9NTUNSMiwgbW1jcjJfdmFsKTsKIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIE5VTV9DVFJTIDYKLQogLyogQ29uZmlndXJlcyB0aGUgZ2xvYmFsIHNldHRpbmdzIGZvciB0aGUgY291bnRlcyBvbiBhbGwgQ1BVcy4gKi8KIHN0YXRpYyBpbnQgZnNsNzQ1MF9yZWdfc2V0dXAoc3RydWN0IG9wX2NvdW50ZXJfY29uZmlnICpjdHIsCiAJCQkgICAgIHN0cnVjdCBvcF9zeXN0ZW1fY29uZmlnICpzeXMsCkBAIC0xMDIsMTIgKzEwMSwxMyBAQAogewogCWludCBpOwogCisJbnVtX3BtY3MgPSBudW1fY3RyczsKIAkvKiBPdXIgY291bnRlcnMgY291bnQgdXAsIGFuZCAiY291bnQiIHJlZmVycyB0bwogCSAqIGhvdyBtdWNoIGJlZm9yZSB0aGUgbmV4dCBpbnRlcnJ1cHQsIGFuZCB3ZSBpbnRlcnJ1cHQKIAkgKiBvbiBvdmVyZmxvdy4gIFNvIHdlIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgdmFsdWUKIAkgKiB3aGljaCB3aWxsIGdpdmUgdXMgImNvdW50IiB1bnRpbCBvdmVyZmxvdy4KIAkgKiBUaGVuIHdlIHNldCB0aGUgZXZlbnRzIG9uIHRoZSBlbmFibGVkIGNvdW50ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DVFJTOyArK2kpCisJZm9yIChpID0gMDsgaSA8IG51bV9jdHJzOyArK2kpCiAJCXJlc2V0X3ZhbHVlW2ldID0gMHg4MDAwMDAwMFVMIC0gY3RyW2ldLmNvdW50OwogCiAJLyogU2V0IGV2ZW50cyBmb3IgQ291bnRlcnMgMSAmIDIgKi8KQEAgLTEyMyw5ICsxMjMsMTAgQEAKIAogCS8qIFNldCBldmVudHMgZm9yIENvdW50ZXJzIDMtNiAqLwogCW1tY3IxX3ZhbCA9IG1tY3IxX2V2ZW50MyhjdHJbMl0uZXZlbnQpCi0JCXwgbW1jcjFfZXZlbnQ0KGN0clszXS5ldmVudCkKLQkJfCBtbWNyMV9ldmVudDUoY3RyWzRdLmV2ZW50KQotCQl8IG1tY3IxX2V2ZW50NihjdHJbNV0uZXZlbnQpOworCQl8IG1tY3IxX2V2ZW50NChjdHJbM10uZXZlbnQpOworCWlmIChudW1fY3RycyA+IDQpCisJCW1tY3IxX3ZhbCB8PSBtbWNyMV9ldmVudDUoY3RyWzRdLmV2ZW50KQorCQkJfCBtbWNyMV9ldmVudDYoY3RyWzVdLmV2ZW50KTsKIAogCW1tY3IyX3ZhbCA9IDA7CiAKQEAgLTEzOSw3ICsxNDAsNyBAQAogCiAJbXRtc3IobWZtc3IoKSB8IE1TUl9QTU0pOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DVFJTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BtY3M7ICsraSkgewogCQlpZiAoY3RyW2ldLmVuYWJsZWQpCiAJCQljbGFzc2ljX2N0cl93cml0ZShpLCByZXNldF92YWx1ZVtpXSk7CiAJCWVsc2UKQEAgLTE4NCw3ICsxODUsNyBAQAogCXBjID0gbWZzcHIoU1BSTl9TSUFSKTsKIAlpc19rZXJuZWwgPSBpc19rZXJuZWxfYWRkcihwYyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcG1jczsgKytpKSB7CiAJCXZhbCA9IGNsYXNzaWNfY3RyX3JlYWQoaSk7CiAJCWlmICh2YWwgPCAwKSB7CiAJCQlpZiAob3Byb2ZpbGVfcnVubmluZyAmJiBjdHJbaV0uZW5hYmxlZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKaW5kZXggMzQ5NmJjMC4uYmY1YzdmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDE3IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQU1DQyBQUEM0NjBHVCBldmFsdWF0aW9uIGJvYXJkLgogCitjb25maWcgUkVEV09PRAorCWJvb2wgIlJlZHdvb2QiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IG4KKwlzZWxlY3QgUFBDNDR4X1NJTVBMRQorCXNlbGVjdCA0NjBTWAorCXNlbGVjdCBQQ0kKKwlzZWxlY3QgUFBDNHh4X1BDSV9FWFBSRVNTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQU1DQyBQUEM0NjBTWCBSZWR3b29kIGJvYXJkLgorCiBjb25maWcgWU9TRU1JVEUKIAlib29sICJZb3NlbWl0ZSIKIAlkZXBlbmRzIG9uIDQ0eApAQCAtMjIwLDYgKzIzMSwxNCBAQAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKIAlzZWxlY3QgSUJNX05FV19FTUFDX1RBSAogCitjb25maWcgNDYwU1gKKwlib29sCisJc2VsZWN0IFBQQ19GUFUKKwlzZWxlY3QgSUJNX05FV19FTUFDX0VNQUM0CisJc2VsZWN0IElCTV9ORVdfRU1BQ19SR01JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfWk1JSQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfVEFICisKICMgNDR4IGVycmF0YS93b3JrYXJvdW5kIGNvbmZpZyBzeW1ib2xzLCBzZWxlY3RlZCBieSB0aGUgQ1BVIG1vZGVscyBhYm92ZQogY29uZmlnIElCTTQ0MEVQX0VSUjQyCiAJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCmluZGV4IDc2ZmRjNTEuLjViY2Q0NDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAkiaWJtLGVib255IiwKIAkiYW1jYyxrYXRtYWkiLAogCSJhbWNjLHJhaW5pZXIiLAorCSJhbWNjLHJlZHdvb2QiLAogCSJhbWNjLHNlcXVvaWEiLAogCSJhbWNjLHRhaXNoYW4iLAogCSJhbWNjLHlvc2VtaXRlIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81MTJ4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwppbmRleCAzMjY4NTJjLi40ZGFjOWIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZwpAQCAtMTIsNyArMTIsNyBAQAogCiBjb25maWcgTVBDNTEyMV9BRFMKIAlib29sICJGcmVlc2NhbGUgTVBDNTEyMUUgQURTIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIKKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQogCXNlbGVjdCBQUENfTVBDNTEyMQogCXNlbGVjdCBNUEM1MTIxX0FEU19DUExECkBAIC0yMSw3ICsyMSw3IEBACiAKIGNvbmZpZyBNUEM1MTIxX0dFTkVSSUMKIAlib29sICJHZW5lcmljIHN1cHBvcnQgZm9yIHNpbXBsZSBNUEM1MTIxIGJhc2VkIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAlzZWxlY3QgUFBDX01QQzUxMjEKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCmluZGV4IDY5NmE1ZWUuLjhiOGU5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19NUEM1Mnh4CiAJYm9vbCAiNTJ4eC1iYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IFBQQ19DTE9DSwogCXNlbGVjdCBQUENfUENJX0NIT0lDRQogCkBAIC0yMSw3ICsyMSwxMyBAQAogCSAgICBhbmQgaWYgdGhlcmUgaXMgYSBQQ0kgYnVzIG5vZGUgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUuCiAKIAkgIEJvYXJkcyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBnZW5lcmljIHBsYXRmb3JtIHN1cHBvcnQKLQkgIGFyZTogJ3RxYyx0cW01MjAwJywgJ3Byb21lc3MsbW90aW9ucHJvJywgJ3NjaGluZGxlcixjbTUyMDAnLgorCSAgYXJlOgorCSAgICAgaW50ZXJjb250cm9sLGRpZ3N5LW10YworCSAgICAgcGh5dGVjLHBjbTAzMAorCSAgICAgcGh5dGVjLHBjbTAzMgorCSAgICAgcHJvbWVzcyxtb3Rpb25wcm8KKwkgICAgIHNjaGluZGxlcixjbTUyMDAKKwkgICAgIHRxYyx0cW01MjAwCiAKIGNvbmZpZyBQUENfRUZJS0EKIAlib29sICJiUGxhbiBFZmlrYSA1azIuIE1QQzUyMDBCIGJhc2VkIGNvbXB1dGVyIgpAQCAtMzUsNiArNDEsMTEgQEAKIAlkZXBlbmRzIG9uIFBQQ19NUEM1Mnh4CiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAKK2NvbmZpZyBQUENfTUVESUE1MjAwCisJYm9vbCAiRnJlZXNjYWxlIE1lZGlhNTIwMCBFdmFsIEJvYXJkIgorCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwogY29uZmlnIFBQQ19NUEM1MjAwX0JVR0ZJWAogCWJvb2wgIk1QQzUyMDAgKEwyNVIpIGJ1Z2ZpeCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQppbmRleCBiOGE1MjA2Li5iZmQ0ZjUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCkBAIC0xLDEyICsxLDEzIEBACiAjCiAjIE1ha2VmaWxlIGZvciA1Mnh4IGJhc2VkIGJvYXJkcwogIwotb2JqLXkJCQkJKz0gbXBjNTJ4eF9waWMubyBtcGM1Mnh4X2NvbW1vbi5vCitvYmoteQkJCQkrPSBtcGM1Mnh4X3BpYy5vIG1wYzUyeHhfY29tbW9uLm8gbXBjNTJ4eF9ncHQubwogb2JqLSQoQ09ORklHX1BDSSkJCSs9IG1wYzUyeHhfcGNpLm8KIAogb2JqLSQoQ09ORklHX1BQQ19NUEM1MjAwX1NJTVBMRSkgKz0gbXBjNTIwMF9zaW1wbGUubwogb2JqLSQoQ09ORklHX1BQQ19FRklLQSkJCSs9IGVmaWthLm8KIG9iai0kKENPTkZJR19QUENfTElURTUyMDApCSs9IGxpdGU1MjAwLm8KK29iai0kKENPTkZJR19QUENfTUVESUE1MjAwKQkrPSBtZWRpYTUyMDAubwogCiBvYmotJChDT05GSUdfUE0pCQkrPSBtcGM1Mnh4X3NsZWVwLm8gbXBjNTJ4eF9wbS5vCiBpZmVxICgkKENPTkZJR19QUENfTElURTUyMDApLHkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbWVkaWE1MjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhlNGYxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIFN1cHBvcnQgZm9yICdtZWRpYTUyMDAtcGxhdGZvcm0nIGNvbXBhdGlibGUgYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgY29kZSBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBGcmVlc2NhcGUgTWVkaWE1MjAwIHBsYXRmb3JtCisgKiAoYnVpbHQgYXJvdW5kIHRoZSBNUEM1MjAwIFNvQykuCisgKgorICogTm90YWJsZSBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgTWVkaWE1MjAwIGlzIHRoZSBwcmVzZW5jZSBvZiBhbiBGUEdBCisgKiB0aGF0IGhhcyBhbGwgZXh0ZXJuYWwgSVJRIGxpbmVzIHJvdXRlZCB0aHJvdWdoIGl0LiAgVGhpcyBmaWxlIGltcGxlbWVudHMKKyAqIGEgY2FzY2FkZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgZHJpdmVyIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUKKyAqIFZpcnR1YWwgSVJRIHN1YnN5c3RlbSBhZnRlciB0aGUgcHJpbWFyeSBtcGM1MjAwIGludGVycnVwdCBjb250cm9sbGVyCisgKiBpcyBpbml0aWFsaXplZC4KKyAqCisgKi8KKworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyMDBfZ3Bpb19pZHNbXSBfX2luaXRkYXRhID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3BpbyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWdwaW8iLCB9LAorCXt9Cit9OworCisvKiBGUEdBIHJlZ2lzdGVyIHNldCAqLworI2RlZmluZSBNRURJQTUyMDBfSVJRX0VOQUJMRSAoMHg0MGMpCisjZGVmaW5lIE1FRElBNTIwMF9JUlFfU1RBVFVTICgweDQxMCkKKyNkZWZpbmUgTUVESUE1MjAwX05VTV9JUlFTICAgKDYpCisjZGVmaW5lIE1FRElBNTIwMF9JUlFfU0hJRlQgICgzMiAtIE1FRElBNTIwMF9OVU1fSVJRUykKKworc3RydWN0IG1lZGlhNTIwMF9pcnEgeworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGlycV9ob3N0ICppcnFob3N0OworfTsKK3N0cnVjdCBtZWRpYTUyMDBfaXJxIG1lZGlhNTIwMF9pcnE7CisKK3N0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBpbl9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFKTsKKwl2YWwgfD0gMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbdmlycV0uaHdpcnEpOworCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCB2YWwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtZWRpYTUyMDBfaXJxX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOworCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOworCXZhbCAmPSB+KDEgPDwgKE1FRElBNTIwMF9JUlFfU0hJRlQgKyBpcnFfbWFwW3ZpcnFdLmh3aXJxKSk7CisJb3V0X2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUsIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWVkaWE1MjAwX2lycV9jaGlwID0geworCS50eXBlbmFtZSA9ICJNZWRpYTUyMDAgRlBHQSIsCisJLnVubWFzayA9IG1lZGlhNTIwMF9pcnFfdW5tYXNrLAorCS5tYXNrID0gbWVkaWE1MjAwX2lycV9tYXNrLAorCS5tYXNrX2FjayA9IG1lZGlhNTIwMF9pcnFfbWFzaywKK307CisKK3ZvaWQgbWVkaWE1MjAwX2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCB2aXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJaW50IHN1Yl92aXJxLCB2YWw7CisJdTMyIHN0YXR1cywgZW5hYmxlOworCisJLyogTWFzayBvZmYgdGhlIGNhc2NhZGVkIElSUSAqLworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJZGVzYy0+Y2hpcC0+bWFzayh2aXJxKTsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7CisKKwkvKiBBc2sgdGhlIEZQR0EgZm9yIElSUSBzdGF0dXMuICBJZiAndmFsJyBpcyAwLCB0aGVuIG5vIGlycXMKKwkgKiBhcmUgcGVuZGluZy4gICdmZnMoKScgaXMgMSBiYXNlZCAqLworCXN0YXR1cyA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOworCWVuYWJsZSA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9TVEFUVVMpOworCXZhbCA9IGZmcygoc3RhdHVzICYgZW5hYmxlKSA+PiBNRURJQTUyMDBfSVJRX1NISUZUKTsKKwlpZiAodmFsKSB7CisJCXN1Yl92aXJxID0gaXJxX2xpbmVhcl9yZXZtYXAobWVkaWE1MjAwX2lycS5pcnFob3N0LCB2YWwgLSAxKTsKKwkJLyogcHJfZGVidWcoIiVzOiB2aXJxPSVpIHM9JS44eCBlPSUuOHggaHdpcnE9JWkgc3VidmlycT0laVxuIiwKKwkJICogICAgICAgICAgX19mdW5jX18sIHZpcnEsIHN0YXR1cywgZW5hYmxlLCB2YWwgLSAxLCBzdWJfdmlycSk7CisJCSAqLworCQlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX3ZpcnEpOworCX0KKworCS8qIFByb2Nlc3NpbmcgZG9uZTsgY2FuIHJlZW5hYmxlIHRoZSBjYXNjYWRlIG5vdyAqLworCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CisJZGVzYy0+Y2hpcC0+YWNrKHZpcnEpOworCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCisJCWRlc2MtPmNoaXAtPnVubWFzayh2aXJxKTsKKwlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgbWVkaWE1MjAwX2lycV9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3KQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGdldF9pcnFfZGVzYyh2aXJxKTsKKworCXByX2RlYnVnKCIlczogaD0lcCwgdmlycT0laSwgaHdpcnE9JWlcbiIsIF9fZnVuY19fLCBoLCB2aXJxLCAoaW50KWh3KTsKKwlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCAmbWVkaWE1MjAwX2lycSk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtZWRpYTUyMDBfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9UWVBFX1NFTlNFX01BU0sgfCBJUlFfTEVWRUwpOworCWRlc2MtPnN0YXR1cyB8PSBJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfTEVWRUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZWRpYTUyMDBfaXJxX3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKKwkJCQkgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCQkgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCisJCQkJIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQoreworCWlmIChpbnRzaXplICE9IDIpCisJCXJldHVybiAtMTsKKworCXByX2RlYnVnKCIlczogYmFuaz0laSwgbnVtYmVyPSVpXG4iLCBfX2Z1bmNfXywgaW50c3BlY1swXSwgaW50c3BlY1sxXSk7CisJKm91dF9od2lycSA9IGludHNwZWNbMV07CisJKm91dF9mbGFncyA9IElSUV9UWVBFX05PTkU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIG1lZGlhNTIwMF9pcnFfb3BzID0geworCS5tYXAgPSBtZWRpYTUyMDBfaXJxX21hcCwKKwkueGxhdGUgPSBtZWRpYTUyMDBfaXJxX3hsYXRlLAorfTsKKworLyoKKyAqIFNldHVwIE1lZGlhNTIwMCBJUlEgbWFwcGluZworICovCitzdGF0aWMgdm9pZCBfX2luaXQgbWVkaWE1MjAwX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpmcGdhX25wOworCWludCBjYXNjYWRlX3ZpcnE7CisKKwkvKiBGaXJzdCBzZXR1cCB0aGUgcmVndWxhciBNUEM1MjAwIGludGVycnVwdCBjb250cm9sbGVyICovCisJbXBjNTJ4eF9pbml0X2lycSgpOworCisJLyogTm93IGZpbmQgdGhlIEZQR0EgSVJRICovCisJZnBnYV9ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJmc2wsbWVkaWE1MjAwLWZwZ2EiKTsKKwlpZiAoIWZwZ2FfbnApCisJCWdvdG8gb3V0OworCXByX2RlYnVnKCIlczogZm91bmQgZnBnYSBub2RlOiAlc1xuIiwgX19mdW5jX18sIGZwZ2FfbnAtPmZ1bGxfbmFtZSk7CisKKwltZWRpYTUyMDBfaXJxLnJlZ3MgPSBvZl9pb21hcChmcGdhX25wLCAwKTsKKwlpZiAoIW1lZGlhNTIwMF9pcnEucmVncykKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBtYXBwZWQgdG8gJXBcbiIsIF9fZnVuY19fLCBtZWRpYTUyMDBfaXJxLnJlZ3MpOworCisJY2FzY2FkZV92aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZnBnYV9ucCwgMCk7CisJaWYgKCFjYXNjYWRlX3ZpcnEpCisJCWdvdG8gb3V0OworCXByX2RlYnVnKCIlczogY2FzY2FkZWQgb24gdmlycT0laVxuIiwgX19mdW5jX18sIGNhc2NhZGVfdmlycSk7CisKKwkvKiBEaXNhYmxlIGFsbCBGUEdBIElSUXMgKi8KKwlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgMCk7CisKKwlzcGluX2xvY2tfaW5pdCgmbWVkaWE1MjAwX2lycS5sb2NrKTsKKworCW1lZGlhNTIwMF9pcnEuaXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KGZwZ2FfbnAsIElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQkJCSAgICAgICBNRURJQTUyMDBfTlVNX0lSUVMsCisJCQkJCSAgICAgICAmbWVkaWE1MjAwX2lycV9vcHMsIC0xKTsKKwlpZiAoIW1lZGlhNTIwMF9pcnEuaXJxaG9zdCkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBhbGxvY2F0ZWQgaXJxaG9zdFxuIiwgX19mdW5jX18pOworCisJbWVkaWE1MjAwX2lycS5pcnFob3N0LT5ob3N0X2RhdGEgPSAmbWVkaWE1MjAwX2lycTsKKworCXNldF9pcnFfZGF0YShjYXNjYWRlX3ZpcnEsICZtZWRpYTUyMDBfaXJxKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihjYXNjYWRlX3ZpcnEsIG1lZGlhNTIwMF9pcnFfY2FzY2FkZSk7CisKKwlyZXR1cm47CisKKyBvdXQ6CisJcHJfZXJyKCJDb3VsZCBub3QgZmluZCBNZWRpYTUyMDAgRlBHQTsgUENJIGludGVycnVwdHMgd2lsbCBub3Qgd29ya1xuIik7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtZWRpYTUyMDBfc2V0dXBfYXJjaCh2b2lkKQoreworCisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgbXBjNTJ4eF9ncGlvIF9faW9tZW0gKmdwaW87CisJdTMyIHBvcnRfY29uZmlnOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJtZWRpYTUyMDBfc2V0dXBfYXJjaCgpIiwgMCk7CisKKwkvKiBNYXAgaW1wb3J0YW50IHJlZ2lzdGVycyBmcm9tIHRoZSBpbnRlcm5hbCBtZW1vcnkgbWFwICovCisJbXBjNTJ4eF9tYXBfY29tbW9uX2RldmljZXMoKTsKKworCS8qIFNvbWUgbXBjNTIwMCAmIG1wYzUyMDBiIHJlbGF0ZWQgY29uZmlndXJhdGlvbiAqLworCW1wYzUyMDBfc2V0dXBfeGxiX2FyYml0ZXIoKTsKKworCW1wYzUyeHhfc2V0dXBfcGNpKCk7CisKKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBtcGM1MjAwX2dwaW9faWRzKTsKKwlncGlvID0gb2ZfaW9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAoIWdwaW8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZC4gZXhwZWN0IGFibm9ybWFsIGJlaGF2aW9yXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHBvcnQgY29uZmlnICovCisJcG9ydF9jb25maWcgPSBpbl9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZyk7CisKKwlwb3J0X2NvbmZpZyAmPSB+MHgwMzAwMDAwMDsJLyogQVRBIENTIGlzIG9uIGNzYl80LzUJCSovCisJcG9ydF9jb25maWcgfD0gIDB4MDEwMDAwMDA7CisKKwlvdXRfYmUzMigmZ3Bpby0+cG9ydF9jb25maWcsIHBvcnRfY29uZmlnKTsKKworCS8qIFVubWFwIHpvbmUgKi8KKwlpb3VubWFwKGdwaW8pOworCit9CisKKy8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KK3N0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7CisJImZzbCxtZWRpYTUyMDAiLAorCU5VTEwKK307CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgTU1VIGlzIG9mZiwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbWVkaWE1MjAwX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBub2RlID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCWludCBpID0gMDsKKworCXdoaWxlIChib2FyZFtpXSkgeworCQlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKG5vZGUsIGJvYXJkW2ldKSkKKwkJCWJyZWFrOworCQlpKys7CisJfQorCisJcmV0dXJuIChib2FyZFtpXSAhPSBOVUxMKTsKK30KKworZGVmaW5lX21hY2hpbmUobWVkaWE1MjAwX3BsYXRmb3JtKSB7CisJLm5hbWUJCT0gIm1lZGlhNTIwMC1wbGF0Zm9ybSIsCisJLnByb2JlCQk9IG1lZGlhNTIwMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAk9IG1lZGlhNTIwMF9zZXR1cF9hcmNoLAorCS5pbml0CQk9IG1wYzUyeHhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzLAorCS5pbml0X0lSUQk9IG1lZGlhNTIwMF9pbml0X2lycSwKKwkuZ2V0X2lycQk9IG1wYzUyeHhfZ2V0X2lycSwKKwkucmVzdGFydAk9IG1wYzUyeHhfcmVzdGFydCwKKwkuY2FsaWJyYXRlX2RlY3IJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1MjAwX3NpbXBsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKaW5kZXggYTNiZGEwYi4uYzMxZTViNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMKQEAgLTUwLDggKzUwLDEwIEBACiAKIC8qIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBib2FyZHMgKi8KIHN0YXRpYyBjaGFyICpib2FyZFtdIF9faW5pdGRhdGEgPSB7Ci0JInByb21lc3MsbW90aW9ucHJvIiwKKwkiaW50ZXJjb250cm9sLGRpZ3N5LW10YyIsCiAJInBoeXRlYyxwY20wMzAiLAorCSJwaHl0ZWMscGNtMDMyIiwKKwkicHJvbWVzcyxtb3Rpb25wcm8iLAogCSJzY2hpbmRsZXIsY201MjAwIiwKIAkidHFjLHRxbTUyMDAiLAogCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKaW5kZXggOTgzNjdhMC4uOGUzZGQ1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMKQEAgLTI4LDkgKzI4LDEwIEBACiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2J1c19pZHNbXSBfX2luaXRkYXRhID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaW1tciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJmc2wsbHBiIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAogCiAJLyogZGVwcmVjaWF0ZWQgbWF0Y2hlczsgc2hvdWxkbid0IGJlIHVzZWQgaW4gbmV3IGRldmljZSB0cmVlcyAqLworCXsgLmNvbXBhdGlibGUgPSAiZnNsLGxwYiIsIH0sCiAJeyAudHlwZSA9ICJidWlsdGluIiwgLmNvbXBhdGlibGUgPSAibXBjNTIwMCIsIH0sIC8qIGVmaWthICovCiAJeyAudHlwZSA9ICJzb2MiLCAuY29tcGF0aWJsZSA9ICJtcGM1MjAwIiwgfSwgLyogbGl0ZTUyMDAgKi8KIAl7fQpAQCAtMjA1LDYgKzIwNiw0MyBAQAogRVhQT1JUX1NZTUJPTChtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KTsKIAogLyoqCisgKiBtcGM1Mnh4X2dldF94dGFsX2ZyZXEgLSBHZXQgU1lTX1hUQUxfSU4gZnJlcXVlbmN5IGZvciBhIGRldmljZQorICoKKyAqIEBub2RlOiBkZXZpY2Ugbm9kZQorICoKKyAqIFJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgZXh0ZXJuYWwgb3NjaWxsYXRvciBjbG9jayBjb25uZWN0ZWQKKyAqIHRvIHRoZSBTWVNfWFRBTF9JTiBwaW4sIG9yIDAgaWYgaXQgY2Fubm90IGJlIGRldGVybWluZWQuCisgKi8KK3Vuc2lnbmVkIGludCBtcGM1Mnh4X2dldF94dGFsX2ZyZXEoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwlpZiAoIW1wYzUyeHhfY2RtKQorCQlyZXR1cm4gMDsKKworCWZyZXEgPSBtcGM1Mnh4X2ZpbmRfaXBiX2ZyZXEobm9kZSk7CisJaWYgKCFmcmVxKQorCQlyZXR1cm4gMDsKKworCWlmIChpbl84KCZtcGM1Mnh4X2NkbS0+aXBiX2Nsa19zZWwpICYgMHgxKQorCQlmcmVxICo9IDI7CisKKwl2YWwgID0gaW5fYmUzMigmbXBjNTJ4eF9jZG0tPnJzdGNmZyk7CisJaWYgKHZhbCAmICgxIDw8IDUpKQorCQlmcmVxICo9IDg7CisJZWxzZQorCQlmcmVxICo9IDQ7CisJaWYgKHZhbCAmICgxIDw8IDYpKQorCQlmcmVxIC89IDEyOworCWVsc2UKKwkJZnJlcSAvPSAxNjsKKworCXJldHVybiBmcmVxOworfQorRVhQT1JUX1NZTUJPTChtcGM1Mnh4X2dldF94dGFsX2ZyZXEpOworCisvKioKICAqIG1wYzUyeHhfcmVzdGFydDogcHBjX21kLT5yZXN0YXJ0IGhvb2sgZm9yIG1wYzUyMDAgdXNpbmcgdGhlIHdhdGNoZG9nIHRpbWVyCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYwppbmRleCAwN2Y4OWFlLi4yYjhkOGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jCkBAIC0zNTQsODggKzM1NCw2IEBACiAJLnJlbW92ZSA9IG1wYzUyeHhfZ3Bpb2NoaXBfcmVtb3ZlLAogfTsKIAotLyoKLSAqIEdQSU8gTElCIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgZ3B0IEdQSU9zLgotICoKLSAqIEVhY2ggZ3B0IG9ubHkgaGFzIGEgc2luZ2xlIEdQSU8uCi0gKi8KLXN0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOwotCi0JcmV0dXJuIChpbl9iZTMyKCZyZWdzLT5zdGF0dXMpICYgKDEgPDwgKDMxIC0gMjMpKSkgPyAxIDogMDsKLX0KLQotc3RhdGljIHZvaWQKLW1wYzUyeHhfZ3B0X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7Ci0Jc3RydWN0IG1wYzUyeHhfZ3B0IF9faW9tZW0gKnJlZ3MgPSBtbV9nYy0+cmVnczsKLQotCWlmICh2YWwpCi0JCW91dF9iZTMyKCZyZWdzLT5tb2RlLCAweDM0KTsKLQllbHNlCi0JCW91dF9iZTMyKCZyZWdzLT5tb2RlLCAweDI0KTsKLQotCXByX2RlYnVnKCIlczogZ3BpbzogJWQgdmFsOiAlZFxuIiwgX19mdW5jX18sIGdwaW8sIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOwotCi0Jb3V0X2JlMzIoJnJlZ3MtPm1vZGUsIDB4MDQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLW1wYzUyeHhfZ3B0X2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCi17Ci0JbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7Ci0JcHJfZGVidWcoIiVzOiBncGlvOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgZ3BpbywgdmFsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKLQkJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1jaGlwOwotCXN0cnVjdCBvZl9ncGlvX2NoaXAgKmNoaXA7Ci0KLQltbWNoaXAgPSBremFsbG9jKHNpemVvZigqbW1jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbWNoaXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2hpcCA9ICZtbWNoaXAtPm9mX2djOwotCi0JY2hpcC0+Z3Bpb19jZWxscyAgICAgICAgICA9IDI7Ci0JY2hpcC0+Z2MubmdwaW8gICAgICAgICAgICA9IDE7Ci0JY2hpcC0+Z2MuZGlyZWN0aW9uX2lucHV0ICA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luOwotCWNoaXAtPmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9vdXQ7Ci0JY2hpcC0+Z2MuZ2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfZ3B0X2dwaW9fZ2V0OwotCWNoaXAtPmdjLnNldCAgICAgICAgICAgICAgPSBtcGM1Mnh4X2dwdF9ncGlvX3NldDsKLQotCXJldHVybiBvZl9tbV9ncGlvY2hpcF9hZGQob2ZkZXYtPm5vZGUsIG1tY2hpcCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfZ3B0X2dwaW9jaGlwX21hdGNoW10gPSB7Ci0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQtZ3BpbyIsCi0JfSwKLQl7fQotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfZHJpdmVyID0gewotCS5uYW1lID0gImdwaW9fZ3B0IiwKLQkubWF0Y2hfdGFibGUgPSBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9tYXRjaCwKLQkucHJvYmUgPSBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9wcm9iZSwKLQkucmVtb3ZlID0gbXBjNTJ4eF9ncGlvY2hpcF9yZW1vdmUsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X2dwaW9faW5pdCh2b2lkKQogewogCWlmIChvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfd2t1cF9ncGlvY2hpcF9kcml2ZXIpKQpAQCAtNDQ0LDkgKzM2Miw2IEBACiAJaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF9zaW1wbGVfZ3Bpb2NoaXBfZHJpdmVyKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgc2ltcGxlIEdQSU8gZHJpdmVyXG4iKTsKIAotCWlmIChvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wYzUyeHhfZ3B0X2dwaW9jaGlwX2RyaXZlcikpCi0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIGdwdCBHUElPIGRyaXZlclxuIik7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmJjZDQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBNUEM1MjAwIEdlbmVyYWwgUHVycG9zZSBUaW1lciBkZXZpY2UgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGlzIGEgZHJpdmVyIGZvciB0aGUgdGhlIEdlbmVyYWwgUHVycG9zZSBUaW1lciAoZ3B0KSBkZXZpY2VzCisgKiBmb3VuZCBvbiB0aGUgTVBDNTIwMCBTb0MuICBFYWNoIHRpbWVyIGhhcyBhbiBJTyBwaW4gd2hpY2ggY2FuIGJlIHVzZWQKKyAqIGZvciBHUElPIG9yIGNhbiBiZSB1c2VkIHRvIHJhaXNlIGludGVycnVwdHMuICBUaGUgdGltZXIgZnVuY3Rpb24gY2FuCisgKiBiZSB1c2VkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgSU8gcGluLCBvciBpdCBjYW4gYmUgdXNlZCB0byBjb250cm9sCisgKiBvdXRwdXQgc2lnbmFscyBvciBtZWFzdXJlIGlucHV0IHNpZ25hbHMuCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdQSU8gYW5kIElSUSBjb250cm9sbGVyIGZ1bmN0aW9ucyBvZiB0aGUgR1BUCisgKiBkZXZpY2UuICBUaW1lciBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLCBub3IgaXMgdGhlIHdhdGNoZG9nCisgKiB0aW1lci4KKyAqCisgKiBUbyB1c2UgdGhlIEdQSU8gZnVuY3Rpb24sIHRoZSBmb2xsb3dpbmcgdHdvIHByb3BlcnRpZXMgbXVzdCBiZSBhZGRlZAorICogdG8gdGhlIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoZSBncHQgZGV2aWNlICh0eXBpY2FsbHkgaW4gdGhlIC5kdHMgZmlsZQorICogZm9yIHRoZSBib2FyZCk6CisgKiAJZ3Bpby1jb250cm9sbGVyOworICogCSNncGlvLWNlbGxzID0gPCAyID47CisgKiBUaGlzIGRyaXZlciB3aWxsIHJlZ2lzdGVyIHRoZSBHUElPIHBpbiBpZiBpdCBmaW5kcyB0aGUgZ3Bpby1jb250cm9sbGVyCisgKiBwcm9wZXJ0eSBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKgorICogVG8gdXNlIHRoZSBJUlEgY29udHJvbGxlciBmdW5jdGlvbiwgdGhlIGZvbGxvd2luZyB0d28gcHJvcGVydGllcyBtdXN0CisgKiBiZSBhZGRlZCB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIGdwdCBkZXZpY2U6CisgKiAJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisgKiAJI2ludGVycnVwdC1jZWxscyA9IDwgMSA+OworICogVGhlIElSUSBjb250cm9sbGVyIGJpbmRpbmcgb25seSB1c2VzIG9uZSBjZWxsIHRvIHNwZWNpZnkgdGhlIGludGVycnVwdCwKKyAqIGFuZCB0aGUgSVJRIGZsYWdzIGFyZSBlbmNvZGVkIGluIHRoZSBjZWxsLiAgQSBjZWxsIGlzIG5vdCB1c2VkIHRvIGVuY29kZQorICogdGhlIElSUSBudW1iZXIgYmVjYXVzZSB0aGUgR1BUIG9ubHkgaGFzIGEgc2luZ2xlIElSUSBzb3VyY2UuICBGb3IgZmxhZ3MsCisgKiBhIHZhbHVlIG9mICcxJyBtZWFucyByaXNpbmcgZWRnZSBzZW5zaXRpdmUgYW5kICcyJyBtZWFucyBmYWxsaW5nIGVkZ2UuCisgKgorICogVGhlIEdQSU8gYW5kIHRoZSBJUlEgY29udHJvbGxlciBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZSwKKyAqIGJ1dCBpbiB0aGlzIHVzZSBjYXNlIHRoZSBJTyBsaW5lIHdpbGwgb25seSB3b3JrIGFzIGFuIGlucHV0LiAgVHJ5aW5nIHRvCisgKiB1c2UgaXQgYXMgYSBHUElPIG91dHB1dCB3aWxsIG5vdCB3b3JrLgorICoKKyAqIFdoZW4gdXNpbmcgdGhlIEdQSU8gbGluZSBhcyBhbiBvdXRwdXQsIGl0IGNhbiBlaXRoZXIgYmUgZHJpdmVuIGFzIG5vcm1hbAorICogSU8sIG9yIGl0IGNhbiBiZSBhbiBPcGVuIENvbGxlY3RvciAoT0MpIG91dHB1dC4gIEF0IHRoZSBtb21lbnQgaXQgaXMgdGhlCisgKiByZXNwb25zaWJpbGl0eSBvZiBlaXRoZXIgdGhlIGJvb3Rsb2FkZXIgb3IgdGhlIHBsYXRmb3JtIHNldHVwIGNvZGUgdG8gc2V0CisgKiB0aGUgb3V0cHV0IG1vZGUuICBUaGlzIGRyaXZlciBkb2VzIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBtb2RlIHNldHRpbmcuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNUEM1Mnh4IGdwdCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgR3JhbnQgTGlrZWx5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qKgorICogc3RydWN0IG1wYzUyeHhfZ3B0IC0gUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBmb3IgTVBDNTJ4eCBHUFQgZHJpdmVyCisgKiBAZGV2OiBwb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEByZWdzOiB2aXJ0dWFsIGFkZHJlc3Mgb2YgR1BUIHJlZ2lzdGVycworICogQGxvY2s6IHNwaW5sb2NrIHRvIGNvb3JkaW5hdGUgYmV0d2VlbiBkaWZmZXJlbnQgZnVuY3Rpb25zLgorICogQG9mX2djOiBvZl9ncGlvX2NoaXAgaW5zdGFuY2Ugc3RydWN0dXJlOyB1c2VkIHdoZW4gR1BJTyBpcyBlbmFibGVkCisgKiBAaXJxaG9zdDogUG9pbnRlciB0byBpcnFfaG9zdCBpbnN0YW5jZTsgdXNlZCB3aGVuIElSUSBtb2RlIGlzIHN1cHBvcnRlZAorICovCitzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmlycWhvc3Q7CisKKyNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQorCXN0cnVjdCBvZl9ncGlvX2NoaXAgb2ZfZ2M7CisjZW5kaWYKK307CisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLCSgweDA3KQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX0lDCQkoMHgwMSkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19PQwkJKDB4MDIpCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfUFdNCQkoMHgwMykKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19HUElPCSgweDA0KQorCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfR1BJT19NQVNLCSgweDMwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0xPVwkoMHgyMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX09VVF9ISUdICSgweDMwKQorCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSVJRX0VOCQkoMHgwMTAwKQorCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX01BU0sJKDB4MDMwMDAwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9SSVNJTkcJKDB4MDEwMDAwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9GQUxMSU5HCSgweDAyMDAwMCkKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfVE9HR0xFCSgweDAzMDAwMCkKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9TVEFUVVNfSVJRTUFTSwkoMHgwMDBmKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENhc2NhZGVkIGludGVycnVwdCBjb250cm9sbGVyIGhvb2tzCisgKi8KKworc3RhdGljIHZvaWQgbXBjNTJ4eF9ncHRfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwlzZXRiaXRzMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9JUlFfRU4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJiaXRzMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9JUlFfRU4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKworCW91dF9iZTMyKCZncHQtPnJlZ3MtPnN0YXR1cywgTVBDNTJ4eF9HUFRfU1RBVFVTX0lSUU1BU0spOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2V0X2lycV9jaGlwX2RhdGEodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzOiB2aXJxPSVpIHR5cGU9JXhcbiIsIF9fZnVuY19fLCB2aXJxLCBmbG93X3R5cGUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCXJlZyA9IGluX2JlMzIoJmdwdC0+cmVncy0+bW9kZSkgJiB+TVBDNTJ4eF9HUFRfTU9ERV9JQ1RfTUFTSzsKKwlpZiAoZmxvd190eXBlICYgSVJRRl9UUklHR0VSX1JJU0lORykKKwkJcmVnIHw9IE1QQzUyeHhfR1BUX01PREVfSUNUX1JJU0lORzsKKwlpZiAoZmxvd190eXBlICYgSVJRRl9UUklHR0VSX0ZBTExJTkcpCisJCXJlZyB8PSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9GQUxMSU5HOworCW91dF9iZTMyKCZncHQtPnJlZ3MtPm1vZGUsIHJlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtcGM1Mnh4X2dwdF9pcnFfY2hpcCA9IHsKKwkudHlwZW5hbWUgPSAiTVBDNTJ4eCBHUFQiLAorCS51bm1hc2sgPSBtcGM1Mnh4X2dwdF9pcnFfdW5tYXNrLAorCS5tYXNrID0gbXBjNTJ4eF9ncHRfaXJxX21hc2ssCisJLmFjayA9IG1wYzUyeHhfZ3B0X2lycV9hY2ssCisJLnNldF90eXBlID0gbXBjNTJ4eF9ncHRfaXJxX3NldF90eXBlLAorfTsKKwordm9pZCBtcGM1Mnh4X2dwdF9pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgdmlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2RhdGEodmlycSk7CisJaW50IHN1Yl92aXJxOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBpbl9iZTMyKCZncHQtPnJlZ3MtPnN0YXR1cykgJiBNUEM1Mnh4X0dQVF9TVEFUVVNfSVJRTUFTSzsKKwlpZiAoc3RhdHVzKSB7CisJCXN1Yl92aXJxID0gaXJxX2xpbmVhcl9yZXZtYXAoZ3B0LT5pcnFob3N0LCAwKTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHN1Yl92aXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICAgIGlycV9od19udW1iZXJfdCBodykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gaC0+aG9zdF9kYXRhOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzOiBoPSVwLCB2aXJxPSVpXG4iLCBfX2Z1bmNfXywgaCwgdmlycSk7CisJc2V0X2lycV9jaGlwX2RhdGEodmlycSwgZ3B0KTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1wYzUyeHhfZ3B0X2lycV9jaGlwLCBoYW5kbGVfZWRnZV9pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKKwkJCQkgdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJCQkgaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsCisJCQkJIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBoLT5ob3N0X2RhdGE7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGZsYWdzPSVpXG4iLCBfX2Z1bmNfXywgaW50c3BlY1swXSk7CisKKwlpZiAoKGludHNpemUgPCAxKSB8fCAoaW50c3BlY1swXSA8IDEpIHx8IChpbnRzcGVjWzBdID4gMykpIHsKKwkJZGV2X2VycihncHQtPmRldiwgImJhZCBpcnEgc3BlY2lmaWVyIGluICVzXG4iLCBjdC0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKm91dF9od2lycSA9IDA7IC8qIFRoZSBHUFQgb25seSBoYXMgMSBJUlEgbGluZSAqLworCSpvdXRfZmxhZ3MgPSBpbnRzcGVjWzBdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIG1wYzUyeHhfZ3B0X2lycV9vcHMgPSB7CisJLm1hcCA9IG1wYzUyeHhfZ3B0X2lycV9tYXAsCisJLnhsYXRlID0gbXBjNTJ4eF9ncHRfaXJxX3hsYXRlLAorfTsKKworc3RhdGljIHZvaWQKK21wYzUyeHhfZ3B0X2lycV9zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaW50IGNhc2NhZGVfdmlycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogT25seSBzZXR1cCBjYXNjYWRlZCBJUlEgaWYgZGV2aWNlIHRyZWUgY2xhaW1zIHRoZSBHUFQgaXMKKwkgKiBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWlmICghb2ZfZmluZF9wcm9wZXJ0eShub2RlLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLCBOVUxMKSkKKwkJcmV0dXJuOworCisJY2FzY2FkZV92aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CisKKwlncHQtPmlycWhvc3QgPSBpcnFfYWxsb2NfaG9zdChub2RlLCBJUlFfSE9TVF9NQVBfTElORUFSLCAxLAorCQkJCSAgICAgICZtcGM1Mnh4X2dwdF9pcnFfb3BzLCAtMSk7CisJaWYgKCFncHQtPmlycWhvc3QpIHsKKwkJZGV2X2VycihncHQtPmRldiwgImlycV9hbGxvY19ob3N0KCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwdC0+aXJxaG9zdC0+aG9zdF9kYXRhID0gZ3B0OworCisJc2V0X2lycV9kYXRhKGNhc2NhZGVfdmlycSwgZ3B0KTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihjYXNjYWRlX3ZpcnEsIG1wYzUyeHhfZ3B0X2lycV9jYXNjYWRlKTsKKworCS8qIFNldCB0byBJbnB1dCBDYXB0dXJlIG1vZGUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJY2xyc2V0Yml0c19iZTMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfTVNfTUFTSywKKwkJCU1QQzUyeHhfR1BUX01PREVfTVNfSUMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzKCkgY29tcGxldGUuIHZpcnE9JWlcbiIsIF9fZnVuY19fLCBjYXNjYWRlX3ZpcnEpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogR1BJT0xJQiBob29rcworICovCisjaWYgZGVmaW5lZChDT05GSUdfR1BJT0xJQikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdjX3RvX21wYzUyeHhfZ3B0KHN0cnVjdCBncGlvX2NoaXAgKmdjKQoreworCXJldHVybiBjb250YWluZXJfb2YodG9fb2ZfZ3Bpb19jaGlwKGdjKSwgc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYsb2ZfZ2MpOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2NfdG9fbXBjNTJ4eF9ncHQoZ2MpOworCisJcmV0dXJuIChpbl9iZTMyKCZncHQtPnJlZ3MtPnN0YXR1cykgPj4gOCkgJiAxOworfQorCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdikKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2NfdG9fbXBjNTJ4eF9ncHQoZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHI7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGdwaW86JWQgdjolZFxuIiwgX19mdW5jX18sIGdwaW8sIHYpOworCXIgPSB2ID8gTVBDNTJ4eF9HUFRfTU9ERV9HUElPX09VVF9ISUdIIDogTVBDNTJ4eF9HUFRfTU9ERV9HUElPX09VVF9MT1c7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJY2xyc2V0Yml0c19iZTMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfR1BJT19NQVNLLCByKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdjX3RvX21wYzUyeHhfZ3B0KGdjKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzOiBncGlvOiVkXG4iLCBfX2Z1bmNfXywgZ3Bpbyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJY2xyYml0czMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfR1BJT19NQVNLKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittcGM1Mnh4X2dwdF9ncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQoreworCW1wYzUyeHhfZ3B0X2dwaW9fc2V0KGdjLCBncGlvLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaW50IHJjOworCisJLyogT25seSBzZXR1cCBHUElPIGlmIHRoZSBkZXZpY2UgdHJlZSBjbGFpbXMgdGhlIEdQVCBpcworCSAqIGEgR1BJTyBjb250cm9sbGVyICovCisJaWYgKCFvZl9maW5kX3Byb3BlcnR5KG5vZGUsICJncGlvLWNvbnRyb2xsZXIiLCBOVUxMKSkKKwkJcmV0dXJuOworCisJZ3B0LT5vZl9nYy5nYy5sYWJlbCA9IGtzdHJkdXAobm9kZS0+ZnVsbF9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdwdC0+b2ZfZ2MuZ2MubGFiZWwpIHsKKwkJZGV2X2VycihncHQtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3B0LT5vZl9nYy5ncGlvX2NlbGxzID0gMjsKKwlncHQtPm9mX2djLmdjLm5ncGlvID0gMTsKKwlncHQtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCAgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbjsKKwlncHQtPm9mX2djLmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9vdXQ7CisJZ3B0LT5vZl9nYy5nYy5nZXQgPSBtcGM1Mnh4X2dwdF9ncGlvX2dldDsKKwlncHQtPm9mX2djLmdjLnNldCA9IG1wYzUyeHhfZ3B0X2dwaW9fc2V0OworCWdwdC0+b2ZfZ2MuZ2MuYmFzZSA9IC0xOworCWdwdC0+b2ZfZ2MueGxhdGUgPSBvZl9ncGlvX3NpbXBsZV94bGF0ZTsKKwlub2RlLT5kYXRhID0gJmdwdC0+b2ZfZ2M7CisJb2Zfbm9kZV9nZXQobm9kZSk7CisKKwkvKiBTZXR1cCBleHRlcm5hbCBwaW4gaW4gR1BJTyBtb2RlICovCisJY2xyc2V0Yml0c19iZTMyKCZncHQtPnJlZ3MtPm1vZGUsIE1QQzUyeHhfR1BUX01PREVfTVNfTUFTSywKKwkJCU1QQzUyeHhfR1BUX01PREVfTVNfR1BJTyk7CisKKwlyYyA9IGdwaW9jaGlwX2FkZCgmZ3B0LT5vZl9nYy5nYyk7CisJaWYgKHJjKQorCQlkZXZfZXJyKGdwdC0+ZGV2LCAiZ3Bpb2NoaXBfYWRkKCkgZmFpbGVkOyByYz0laVxuIiwgcmMpOworCisJZGV2X2RiZyhncHQtPmRldiwgIiVzKCkgY29tcGxldGUuXG4iLCBfX2Z1bmNfXyk7Cit9CisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19HUElPTElCKSAqLworc3RhdGljIHZvaWQKK21wYzUyeHhfZ3B0X2dwaW9fc2V0dXAoc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKnAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApIHsgfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogb2ZfcGxhdGZvcm0gYnVzIGJpbmRpbmcgY29kZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1Mnh4X2dwdF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdDsKKworCWdwdCA9IGt6YWxsb2Moc2l6ZW9mICpncHQsIEdGUF9LRVJORUwpOworCWlmICghZ3B0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pbml0KCZncHQtPmxvY2spOworCWdwdC0+ZGV2ID0gJm9mZGV2LT5kZXY7CisJZ3B0LT5yZWdzID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWlmICghZ3B0LT5yZWdzKSB7CisJCWtmcmVlKGdwdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgZ3B0KTsKKworCW1wYzUyeHhfZ3B0X2dwaW9fc2V0dXAoZ3B0LCBvZmRldi0+bm9kZSk7CisJbXBjNTJ4eF9ncHRfaXJxX3NldHVwKGdwdCwgb2ZkZXYtPm5vZGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfZ3B0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiLCB9LAorCisJLyogRGVwcmVjaWF0ZWQgY29tcGF0aWJsZSB2YWx1ZXM7IGRvbid0IHVzZSBmb3IgbmV3IGR0cyBmaWxlcyAqLworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iLCB9LAorCXsgLmNvbXBhdGlibGUgPSAibXBjNTIwMC1ncHQiLCB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X2dwdF9kcml2ZXIgPSB7CisJLm5hbWUgPSAibXBjNTJ4eC1ncHQiLAorCS5tYXRjaF90YWJsZSA9IG1wYzUyeHhfZ3B0X21hdGNoLAorCS5wcm9iZSA9IG1wYzUyeHhfZ3B0X3Byb2JlLAorCS5yZW1vdmUgPSBtcGM1Mnh4X2dwdF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM1Mnh4X2dwdF9pbml0KHZvaWQpCit7CisJaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF9ncHRfZHJpdmVyKSkKKwkJcHJfZXJyKCJlcnJvciByZWdpc3RlcmluZyBNUEM1Mnh4IEdQVCBkcml2ZXJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIE1ha2Ugc3VyZSBHUElPcyBhbmQgSVJRcyBnZXQgc2V0IHVwIGJlZm9yZSBhbnlvbmUgdHJpZXMgdG8gdXNlIHRoZW0gKi8KK3N1YnN5c19pbml0Y2FsbChtcGM1Mnh4X2dwdF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKaW5kZXggMGEwOTNmMC4uNDgwZjgwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMKQEAgLTE2Myw4ICsxNjMsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9jbHJiaXQoJmludHItPmN0cmwsIDExIC0gbDJpcnEpOwogfQogCkBAIC0xNzYsOCArMTc0LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5jdHJsLCAxMSAtIGwyaXJxKTsKIH0KIApAQCAtMTg5LDE3ICsxODUsMTUgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5jdHJsLCAyNy1sMmlycSk7CiB9CiAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9leHRpcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCiB7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOwogCXUzMiBjdHJsX3JlZywgdHlwZTsKIAlpbnQgaXJxOwogCWludCBsMmlycTsKKwl2b2lkICpoYW5kbGVyID0gaGFuZGxlX2xldmVsX2lycTsKIAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwpAQCAtMjA3LDMyICsyMDEsMjEgQEAKIAlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWQgZmxvd190eXBlPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSwgZmxvd190eXBlKTsKIAogCXN3aXRjaCAoZmxvd190eXBlKSB7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfSElHSDoKLQkJdHlwZSA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgSVJRRl9UUklHR0VSX1JJU0lORzoKLQkJdHlwZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgSVJRRl9UUklHR0VSX0ZBTExJTkc6Ci0JCXR5cGUgPSAyOwotCQlicmVhazsKLQljYXNlIElSUUZfVFJJR0dFUl9MT1c6Ci0JCXR5cGUgPSAzOwotCQlicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9ISUdIOiB0eXBlID0gMDsgYnJlYWs7CisJY2FzZSBJUlFGX1RSSUdHRVJfUklTSU5HOiB0eXBlID0gMTsgaGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsgYnJlYWs7CisJY2FzZSBJUlFGX1RSSUdHRVJfRkFMTElORzogdHlwZSA9IDI7IGhhbmRsZXIgPSBoYW5kbGVfZWRnZV9pcnE7IGJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0xPVzogdHlwZSA9IDM7IGJyZWFrOwogCWRlZmF1bHQ6CiAJCXR5cGUgPSAwOwogCX0KIAotCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9UWVBFX1NFTlNFX01BU0sgfCBJUlFfTEVWRUwpOwotCWRlc2MtPnN0YXR1cyB8PSBmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOwotCWlmIChmbG93X3R5cGUgJiAoSVJRX1RZUEVfTEVWRUxfSElHSCB8IElSUV9UWVBFX0xFVkVMX0xPVykpCi0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7Ci0KIAljdHJsX3JlZyA9IGluX2JlMzIoJmludHItPmN0cmwpOwogCWN0cmxfcmVnICY9IH4oMHgzIDw8ICgyMiAtIChsMmlycSAqIDIpKSk7CiAJY3RybF9yZWcgfD0gKHR5cGUgPDwgKDIyIC0gKGwyaXJxICogMikpKTsKIAlvdXRfYmUzMigmaW50ci0+Y3RybCwgY3RybF9yZWcpOwogCisJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQodmlycSwgaGFuZGxlcik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ3LDYgKzIzMCwxMSBAQAogLyoKICAqIE1haW4gaW50ZXJydXB0IGlycV9jaGlwCiAgKi8KK3N0YXRpYyBpbnQgbXBjNTJ4eF9udWxsX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXJldHVybiAwOyAvKiBEbyBub3RoaW5nIHNvIHRoYXQgdGhlIHNlbnNlIG1hc2sgd2lsbCBnZXQgdXBkYXRlZCAqLworfQorCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X21haW5fbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAlpbnQgaXJxOwpAQCAtMjU1LDggKzI0Myw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmaW50ci0+bWFpbl9tYXNrLCAxNiAtIGwyaXJxKTsKIH0KIApAQCAtMjY4LDggKzI1NCw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX2NscmJpdCgmaW50ci0+bWFpbl9tYXNrLCAxNiAtIGwyaXJxKTsKIH0KIApAQCAtMjc4LDYgKzI2Miw3IEBACiAJLm1hc2sgPSBtcGM1Mnh4X21haW5fbWFzaywKIAkubWFza19hY2sgPSBtcGM1Mnh4X21haW5fbWFzaywKIAkudW5tYXNrID0gbXBjNTJ4eF9tYWluX3VubWFzaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X251bGxfc2V0X3R5cGUsCiB9OwogCiAvKgpAQCAtMjkxLDggKzI3Niw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmaW50ci0+cGVyX21hc2ssIDMxIC0gbDJpcnEpOwogfQogCkBAIC0zMDQsOCArMjg3LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZpbnRyLT5wZXJfbWFzaywgMzEgLSBsMmlycSk7CiB9CiAKQEAgLTMxNCw2ICsyOTUsNyBAQAogCS5tYXNrID0gbXBjNTJ4eF9wZXJpcGhfbWFzaywKIAkubWFza19hY2sgPSBtcGM1Mnh4X3BlcmlwaF9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF91bm1hc2ssCisJLnNldF90eXBlID0gbXBjNTJ4eF9udWxsX3NldF90eXBlLAogfTsKIAogLyoKQEAgLTMyNyw4ICszMDksNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJnNkbWEtPkludE1hc2ssIGwyaXJxKTsKIH0KIApAQCAtMzQwLDggKzMyMCw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX2NscmJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCkBAIC0zNTMsOCArMzMxLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJb3V0X2JlMzIoJnNkbWEtPkludFBlbmQsIDEgPDwgbDJpcnEpOwogfQogCkBAIC0zNjMsOSArMzM5LDE5IEBACiAJLm1hc2sgPSBtcGM1Mnh4X3NkbWFfbWFzaywKIAkudW5tYXNrID0gbXBjNTJ4eF9zZG1hX3VubWFzaywKIAkuYWNrID0gbXBjNTJ4eF9zZG1hX2FjaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X251bGxfc2V0X3R5cGUsCiB9OwogCiAvKioKKyAqIG1wYzUyeHhfaXNfZXh0aXJxIC0gUmV0dXJucyB0cnVlIGlmIGh3aXJxIG51bWJlciBpcyBmb3IgYW4gZXh0ZXJuYWwgSVJRCisgKi8KK3N0YXRpYyBpbnQgbXBjNTJ4eF9pc19leHRpcnEoaW50IGwxLCBpbnQgbDIpCit7CisJcmV0dXJuICgobDEgPT0gMCkgJiYgKGwyID09IDApKSB8fAorCSAgICAgICAoKGwxID09IDEpICYmIChsMiA+PSAxKSAmJiAobDIgPD0gMykpOworfQorCisvKioKICAqIG1wYzUyeHhfaXJxaG9zdF94bGF0ZSAtIHRyYW5zbGF0ZSB2aXJxIyBmcm9tIGRldmljZSB0cmVlIGludGVycnVwdHMgcHJvcGVydHkKICAqLwogc3RhdGljIGludCBtcGM1Mnh4X2lycWhvc3RfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LApAQCAtMzgzLDM4ICszNjksMjMgQEAKIAogCWludHJ2ZWN0X2wxID0gKGludClpbnRzcGVjWzBdOwogCWludHJ2ZWN0X2wyID0gKGludClpbnRzcGVjWzFdOwotCWludHJ2ZWN0X3R5cGUgPSAoaW50KWludHNwZWNbMl07CisJaW50cnZlY3RfdHlwZSA9IChpbnQpaW50c3BlY1syXSAmIDB4MzsKIAogCWludHJ2ZWN0X2xpbnV4ID0gKGludHJ2ZWN0X2wxIDw8IE1QQzUyeHhfSVJRX0wxX09GRlNFVCkgJgogCQkJIE1QQzUyeHhfSVJRX0wxX01BU0s7CiAJaW50cnZlY3RfbGludXggfD0gaW50cnZlY3RfbDIgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCisJKm91dF9od2lycSA9IGludHJ2ZWN0X2xpbnV4OworCSpvdXRfZmxhZ3MgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJaWYgKG1wYzUyeHhfaXNfZXh0aXJxKGludHJ2ZWN0X2wxLCBpbnRydmVjdF9sMikpCisJCSpvdXRfZmxhZ3MgPSBtcGM1Mnh4X21hcF9zZW5zZXNbaW50cnZlY3RfdHlwZV07CisKIAlwcl9kZWJ1ZygicmV0dXJuICV4LCBsMT0lZCwgbDI9JWRcbiIsIGludHJ2ZWN0X2xpbnV4LCBpbnRydmVjdF9sMSwKIAkJIGludHJ2ZWN0X2wyKTsKLQotCSpvdXRfaHdpcnEgPSBpbnRydmVjdF9saW51eDsKLQkqb3V0X2ZsYWdzID0gbXBjNTJ4eF9tYXBfc2Vuc2VzW2ludHJ2ZWN0X3R5cGVdOwotCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogbXBjNTJ4eF9pcnF4X2dldHR5cGUgLSBkZXRlcm1pbmUgdGhlIElSUSBzZW5zZSB0eXBlIChsZXZlbC9lZGdlKQotICoKLSAqIE9ubHkgZXh0ZXJuYWwgSVJRcyBuZWVkIHRoaXMuCi0gKi8KLXN0YXRpYyBpbnQgbXBjNTJ4eF9pcnF4X2dldHR5cGUoaW50IGlycSkKLXsKLQlpbnQgdHlwZTsKLQl1MzIgY3RybF9yZWc7Ci0KLQljdHJsX3JlZyA9IGluX2JlMzIoJmludHItPmN0cmwpOwotCXR5cGUgPSAoY3RybF9yZWcgPj4gKDIyIC0gaXJxICogMikpICYgMHgzOwotCi0JcmV0dXJuIG1wYzUyeHhfbWFwX3NlbnNlc1t0eXBlXTsKLX0KLQotLyoqCiAgKiBtcGM1Mnh4X2lycWhvc3RfbWFwIC0gSG9vayB0byBtYXAgZnJvbSB2aXJxIHRvIGFuIGlycV9jaGlwIHN0cnVjdHVyZQogICovCiBzdGF0aWMgaW50IG1wYzUyeHhfaXJxaG9zdF9tYXAoc3RydWN0IGlycV9ob3N0ICpoLCB1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTQyMiw2OCArMzkzLDQ2IEBACiB7CiAJaW50IGwxaXJxOwogCWludCBsMmlycTsKLQlzdHJ1Y3QgaXJxX2NoaXAgKmdvb2RfaXJxY2hpcDsKLQl2b2lkICpnb29kX2hhbmRsZTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNoaXA7CisJdm9pZCAqaG5kbHI7CiAJaW50IHR5cGU7CisJdTMyIHJlZzsKIAogCWwxaXJxID0gKGlycSAmIE1QQzUyeHhfSVJRX0wxX01BU0spID4+IE1QQzUyeHhfSVJRX0wxX09GRlNFVDsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKIAkvKgotCSAqIE1vc3Qgb2Ygb3VycyBJUlFzIHdpbGwgYmUgbGV2ZWwgbG93Ci0JICogT25seSBleHRlcm5hbCBJUlFzIG9uIHNvbWUgcGxhdGZvcm0gbWF5IGJlIG90aGVycworCSAqIEV4dGVybmFsIElSUXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYnkgdGhlIGhhcmR3YXJlIHNvIHRoZXkgYXJlCisJICogaGFuZGxlZCBieSBhIGRlZGljYXRlZCBpcnFfY2hpcCBzdHJ1Y3R1cmUuCiAJICovCi0JdHlwZSA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKwlpZiAobXBjNTJ4eF9pc19leHRpcnEobDFpcnEsIGwyaXJxKSkgeworCQlyZWcgPSBpbl9iZTMyKCZpbnRyLT5jdHJsKTsKKwkJdHlwZSA9IG1wYzUyeHhfbWFwX3NlbnNlc1socmVnID4+ICgyMiAtIGwyaXJxICogMikpICYgMHgzXTsKKwkJaWYgKCh0eXBlID09IElSUV9UWVBFX0VER0VfRkFMTElORykgfHwKKwkJICAgICh0eXBlID09IElSUV9UWVBFX0VER0VfUklTSU5HKSkKKwkJCWhuZGxyID0gaGFuZGxlX2VkZ2VfaXJxOworCQllbHNlCisJCQlobmRsciA9IGhhbmRsZV9sZXZlbF9pcnE7CiAKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsICZtcGM1Mnh4X2V4dGlycV9pcnFjaGlwLCBobmRscik7CisJCXByX2RlYnVnKCIlczogRXh0ZXJuYWwgSVJRJWkgdmlycT0leCwgaHc9JXguIHR5cGU9JXhcbiIsCisJCQkgX19mdW5jX18sIGwyaXJxLCB2aXJxLCAoaW50KWlycSwgdHlwZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIEl0IGlzIGFuIGludGVybmFsIFNPQyBpcnEuICBDaG9vc2UgdGhlIGNvcnJlY3QgaXJxX2NoaXAgKi8KIAlzd2l0Y2ggKGwxaXJxKSB7Ci0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9DUklUOgotCQlwcl9kZWJ1ZygiJXM6IENyaXRpY2FsLiBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQotCQlCVUdfT04obDJpcnEgIT0gMCk7Ci0KLQkJdHlwZSA9IG1wYzUyeHhfaXJxeF9nZXR0eXBlKGwyaXJxKTsKLQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfZXh0aXJxX2lycWNoaXA7Ci0JCWJyZWFrOwotCi0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9NQUlOOgotCQlwcl9kZWJ1ZygiJXM6IE1haW4gSVJRWzEtM10gbDI9JXhcbiIsIF9fZnVuY19fLCBsMmlycSk7Ci0KLQkJaWYgKChsMmlycSA+PSAxKSAmJiAobDJpcnEgPD0gMykpIHsKLQkJCXR5cGUgPSBtcGM1Mnh4X2lycXhfZ2V0dHlwZShsMmlycSk7Ci0JCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9leHRpcnFfaXJxY2hpcDsKLQkJfSBlbHNlIHsKLQkJCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X21haW5faXJxY2hpcDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgTVBDNTJ4eF9JUlFfTDFfUEVSUDoKLQkJcHJfZGVidWcoIiVzOiBQZXJpcGhlcmFscy4gbDI9JXhcbiIsIF9fZnVuY19fLCBsMmlycSk7Ci0JCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X3BlcmlwaF9pcnFjaGlwOwotCQlicmVhazsKLQotCWNhc2UgTVBDNTJ4eF9JUlFfTDFfU0RNQToKLQkJcHJfZGVidWcoIiVzOiBTRE1BLiBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfc2RtYV9pcnFjaGlwOwotCQlicmVhazsKLQorCWNhc2UgTVBDNTJ4eF9JUlFfTDFfTUFJTjogaXJxY2hpcCA9ICZtcGM1Mnh4X21haW5faXJxY2hpcDsgYnJlYWs7CisJY2FzZSBNUEM1Mnh4X0lSUV9MMV9QRVJQOiBpcnFjaGlwID0gJm1wYzUyeHhfcGVyaXBoX2lycWNoaXA7IGJyZWFrOworCWNhc2UgTVBDNTJ4eF9JUlFfTDFfU0RNQTogaXJxY2hpcCA9ICZtcGM1Mnh4X3NkbWFfaXJxY2hpcDsgYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfZXJyKCIlczogaW52YWxpZCB2aXJxIHJlcXVlc3RlZCAoMHgleClcbiIsIF9fZnVuY19fLCB2aXJxKTsKKwkJcHJfZXJyKCIlczogaW52YWxpZCBpcnE6IHZpcnE9JWksIGwxPSVpLCBsMj0laVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB2aXJxLCBsMWlycSwgbDJpcnEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKLQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlnb29kX2hhbmRsZSA9IGhhbmRsZV9lZGdlX2lycTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZ29vZF9oYW5kbGUgPSBoYW5kbGVfbGV2ZWxfaXJxOwotCX0KLQotCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBnb29kX2lycWNoaXAsIGdvb2RfaGFuZGxlKTsKLQotCXByX2RlYnVnKCIlczogdmlycT0leCwgaHc9JXguIHR5cGU9JXhcbiIsIF9fZnVuY19fLCB2aXJxLAotCQkgKGludClpcnEsIHR5cGUpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBpcnFjaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwlwcl9kZWJ1ZygiJXM6IHZpcnE9JXgsIGwxPSVpLCBsMj0laVxuIiwgX19mdW5jX18sIHZpcnEsIGwxaXJxLCBsMmlycSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMiw2ICs0NzEsOCBAQAogCQlwYW5pYyhfX0ZJTEVfXwkiOiBmaW5kX2FuZF9tYXAgZmFpbGVkIG9uICdtcGM1MjAwLWJlc3Rjb21tJy4gIgogCQkJCSJDaGVjayBub2RlICEiKTsKIAorCXByX2RlYnVnKCJNUEM1MjAwIElSUSBjb250cm9sbGVyIG1hcHBlZCB0byAweCVwXG4iLCBpbnRyKTsKKwogCS8qIERpc2FibGUgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLwogCW91dF9iZTMyKCZzZG1hLT5JbnRQZW5kLCAweGZmZmZmZmZmKTsJLyogMSBtZWFucyBjbGVhciBwZW5kaW5nICovCiAJb3V0X2JlMzIoJnNkbWEtPkludE1hc2ssIDB4ZmZmZmZmZmYpOwkvKiAxIG1lYW5zIGRpc2FibGVkICovCkBAIC02MTMsOCArNTY0LDUgQEAKIAkJfQogCX0KIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiB2aXJxPSVkXG4iLCBfX2Z1bmNfXywgaXJxLAotCQkgaXJxX2xpbmVhcl9yZXZtYXAobXBjNTJ4eF9pcnFob3N0LCBpcnEpKTsKLQogCXJldHVybiBpcnFfbGluZWFyX3Jldm1hcChtcGM1Mnh4X2lycWhvc3QsIGlycSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnCmluZGV4IDMwZjAwOGIuLjdjN2RmNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogbWVudWNvbmZpZyBQUENfODJ4eAogCWJvb2wgIjgyeHgtYmFzZWQgYm9hcmRzIChQUSBJSSkiCi0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eAogCiBpZiBQUENfODJ4eAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCmluZGV4IDgzYzY2NGEuLjQzN2QyOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogbWVudWNvbmZpZyBQUENfODN4eAogCWJvb2wgIjgzeHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKIAlzZWxlY3QgUFBDX1BDSV9DSE9JQ0UKIAlzZWxlY3QgRlNMX1BDSSBpZiBQQ0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvYXNwODM0eC5jCmluZGV4IGJiMzBkNjcuLmFhMGQ4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2FzcDgzNHguYwpAQCAtNTgsNiArNTgsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMXhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwppbmRleCA5MWEyYzgwLi4wYjRmODgzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYwpAQCAtMzgsNiArMzgsOCBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikKIAkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzMTQtcGNpZSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CiAjZW5kaWYKIAltcGM4MzF4X3VzYl9jZmcoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKaW5kZXggMmExMjk1Zi4uNTY3ZGVkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvbW1jX3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaXBpYy5oPgpAQCAtMzksMTYgKzQwLDExNiBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCi1zdGF0aWMgdm9pZCBtcGM4M3h4X3NwaV9hY3RpdmF0ZV9jcyh1OCBjcywgdTggcG9sYXJpdHkpCitzdGF0aWMgaW50IF9faW5pdCBvZl9mc2xfc3BpX3Byb2JlKGNoYXIgKnR5cGUsIGNoYXIgKmNvbXBhdGlibGUsIHUzMiBzeXNjbGssCisJCQkJICAgc3RydWN0IHNwaV9ib2FyZF9pbmZvICpib2FyZF9pbmZvcywKKwkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkX2luZm9zLAorCQkJCSAgIHZvaWQgKCpjc19jb250cm9sKShzdHJ1Y3Qgc3BpX2RldmljZSAqZGV2LAorCQkJCQkJICAgICAgYm9vbCBvbikpCiB7Ci0JcHJfZGVidWcoIiVzICVkICVkXG4iLCBfX2Z1bmNfXywgY3MsIHBvbGFyaXR5KTsKLQlwYXJfaW9fZGF0YV9zZXQoMywgMTMsIHBvbGFyaXR5KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXVuc2lnbmVkIGludCBpID0gMDsKKworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgdHlwZSwgY29tcGF0aWJsZSkgeworCQlpbnQgcmV0OworCQl1bnNpZ25lZCBpbnQgajsKKwkJY29uc3Qgdm9pZCAqcHJvcDsKKwkJc3RydWN0IHJlc291cmNlIHJlc1syXTsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwkJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKKwkJCS5jc19jb250cm9sID0gY3NfY29udHJvbCwKKwkJfTsKKworCQltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CisKKwkJcGRhdGEuc3lzY2xrID0gc3lzY2xrOworCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJaWYgKCFwcm9wKQorCQkJZ290byBlcnI7CisJCXBkYXRhLmJ1c19udW0gPSAqKHUzMiAqKXByb3A7CisKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKKwkJaWYgKHByb3ApCisJCQlpID0gKih1MzIgKilwcm9wOworCisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJtb2RlIiwgTlVMTCk7CisJCWlmIChwcm9wICYmICFzdHJjbXAocHJvcCwgImNwdS1xZSIpKQorCQkJcGRhdGEucWVfbW9kZSA9IDE7CisKKwkJZm9yIChqID0gMDsgaiA8IG51bV9ib2FyZF9pbmZvczsgaisrKSB7CisJCQlpZiAoYm9hcmRfaW5mb3Nbal0uYnVzX251bSA9PSBwZGF0YS5idXNfbnVtKQorCQkJCXBkYXRhLm1heF9jaGlwc2VsZWN0Kys7CisJCX0KKworCQlpZiAoIXBkYXRhLm1heF9jaGlwc2VsZWN0KQorCQkJY29udGludWU7CisKKwkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlc1swXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQlyZXQgPSBvZl9pcnFfdG9fcmVzb3VyY2UobnAsIDAsICZyZXNbMV0pOworCQlpZiAocmV0ID09IE5PX0lSUSkKKwkJCWdvdG8gZXJyOworCisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoIm1wYzgzeHhfc3BpIiwgaSk7CisJCWlmICghcGRldikKKwkJCWdvdG8gZXJyOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmcGRhdGEsIHNpemVvZihwZGF0YSkpOworCQlpZiAocmV0KQorCQkJZ290byB1bnJlZzsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsCisJCQkJCQkgICAgQVJSQVlfU0laRShyZXMpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5yZWc7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gdW5yZWc7CisKKwkJZ290byBuZXh0OwordW5yZWc6CisJCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CitlcnI6CisJCXByX2VycigiJXM6IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIG5wLT5mdWxsX25hbWUpOworbmV4dDoKKwkJaSsrOworCX0KKworCXJldHVybiBpOwogfQogCi1zdGF0aWMgdm9pZCBtcGM4M3h4X3NwaV9kZWFjdGl2YXRlX2NzKHU4IGNzLCB1OCBwb2xhcml0eSkKK3N0YXRpYyBpbnQgX19pbml0IGZzbF9zcGlfaW5pdChzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmJvYXJkX2luZm9zLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fYm9hcmRfaW5mb3MsCisJCQkgICAgICAgdm9pZCAoKmNzX2NvbnRyb2wpKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJCQkgIGJvb2wgb24pKQogewotCXByX2RlYnVnKCIlcyAlZCAlZFxuIiwgX19mdW5jX18sIGNzLCBwb2xhcml0eSk7Ci0JcGFyX2lvX2RhdGFfc2V0KDMsIDEzLCAhcG9sYXJpdHkpOworCXUzMiBzeXNjbGsgPSAtMTsKKwlpbnQgcmV0OworCisJLyogU1BJIGNvbnRyb2xsZXIgaXMgZWl0aGVyIGNsb2NrZWQgZnJvbSBRRSBvciBTb0MgY2xvY2sgKi8KKwlzeXNjbGsgPSBnZXRfYnJnZnJlcSgpOworCWlmIChzeXNjbGsgPT0gLTEpIHsKKwkJc3lzY2xrID0gZnNsX2dldF9zeXNfZnJlcSgpOworCQlpZiAoc3lzY2xrID09IC0xKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gb2ZfZnNsX3NwaV9wcm9iZShOVUxMLCAiZnNsLHNwaSIsIHN5c2NsaywgYm9hcmRfaW5mb3MsCisJCQkgICAgICAgbnVtX2JvYXJkX2luZm9zLCBjc19jb250cm9sKTsKKwlpZiAoIXJldCkKKwkJb2ZfZnNsX3NwaV9wcm9iZSgic3BpIiwgImZzbF9zcGkiLCBzeXNjbGssIGJvYXJkX2luZm9zLAorCQkJCSBudW1fYm9hcmRfaW5mb3MsIGNzX2NvbnRyb2wpOworCisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJvYXJkX2luZm9zLCBudW1fYm9hcmRfaW5mb3MpOworfQorCitzdGF0aWMgdm9pZCBtcGM4M3h4X3NwaV9jc19jb250cm9sKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgb24pCit7CisJcHJfZGVidWcoIiVzICVkICVkXG4iLCBfX2Z1bmNfXywgc3BpLT5jaGlwX3NlbGVjdCwgb24pOworCXBhcl9pb19kYXRhX3NldCgzLCAxMywgb24pOwogfQogCiBzdGF0aWMgc3RydWN0IG1tY19zcGlfcGxhdGZvcm1fZGF0YSBtcGM4MzJ4X21tY19wZGF0YSA9IHsKQEAgLTc0LDkgKzE3NSwxMyBAQAogCXBhcl9pb19jb25maWdfcGluKDMsIDE0LCAyLCAwLCAwLCAwKTsgLyogU0RfSU5TRVJULCBJICovCiAJcGFyX2lvX2NvbmZpZ19waW4oMywgMTUsIDIsIDAsIDAsIDApOyAvKiBTRF9QUk9URUNULEkgKi8KIAotCXJldHVybiBmc2xfc3BpX2luaXQoJm1wYzgzMnhfc3BpX2JvYXJkaW5mbywgMSwKLQkJCSAgICBtcGM4M3h4X3NwaV9hY3RpdmF0ZV9jcywKLQkJCSAgICBtcGM4M3h4X3NwaV9kZWFjdGl2YXRlX2NzKTsKKwkvKgorCSAqIERvbid0IGJvdGhlciB3aXRoIGxlZ2FjeSBzdHVmZiB3aGVuIGRldmljZSB0cmVlIGNvbnRhaW5zCisJICogbW1jLXNwaS1zbG90IG5vZGUuCisJICovCisJaWYgKG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJtbWMtc3BpLXNsb3QiKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGZzbF9zcGlfaW5pdCgmbXBjODMyeF9zcGlfYm9hcmRpbmZvLCAxLCBtcGM4M3h4X3NwaV9jc19jb250cm9sKTsKIH0KIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKG1wYzgzMnhfcmRiLCBtcGM4MzJ4X3NwaV9pbml0KTsKICNlbmRpZiAvKiBDT05GSUdfUVVJQ0NfRU5HSU5FICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCmluZGV4IDc2MDkyZDMuLjgxZTQ0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCkBAIC00Miw2ICs0Miw3IEBACiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIG1wYzgzNHhfaXR4X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHBxMnByby1sb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYwppbmRleCBmYzNmMmVkLi5kMGE2MzRiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9tZHMuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCmluZGV4IDUzMGVmOTkuLjUxZGY3ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X21kcy5jCkBAIC04NCwxNCArODQsMTAgQEAKIAkJcHBjX21kLnByb2dyZXNzKCJtcGM4Mzd4X21kc19zZXR1cF9hcmNoKCkiLCAwKTsKIAogI2lmZGVmIENPTkZJR19QQ0kKLQlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzNDktcGNpIikgewotCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKSB7Ci0JCQlwcl93YXJuaW5nKCIlczogZGlzYWJsZWQgYnkgdGhlIGZpcm13YXJlLlxuIiwKLQkJCQkgICBucC0+ZnVsbF9uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCiAJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7Ci0JfQorCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODMxNC1wY2llIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKICNlbmRpZgogCW1wYzgzN3htZHNfdXNiX2NmZygpOwogfQpAQCAtMTAwLDYgKzk2LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKaW5kZXggMWQwOTY1NC4uNzZmM2IzMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfcmRiLmMKQEAgLTM4LDYgKzM4LDggQEAKICNpZmRlZiBDT05GSUdfUENJCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpCiAJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzE0LXBjaWUiKQorCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwogI2VuZGlmCiAJbXBjODM3eF91c2JfY2ZnKCk7CiB9CkBAIC00Niw2ICs0OCw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3NiYzgzNHguYwppbmRleCAxNTZjNGUyLi40OTAyM2RiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMKQEAgLTg0LDYgKzg0LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYwppbmRleCBjYzk5YzI4Li4xMWUxZmFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTIxMCw3ICsyMTEsNyBAQAogCWludCByZXQgPSAwOwogCiAJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLXVzYjItZHIiKTsKLQlpZiAoIW5wKQorCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5X3R5cGUiLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCBiNzlkYzcxLi43ZjA2NmFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtNTEsNiArNTEsMTIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IERTIChNUEM4NTQ0IERTKSBib2FyZAogCitjb25maWcgU09DUkFURVMKKwlib29sICJTb2NyYXRlcyIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBTb2NyYXRlcyBib2FyZC4KKwogY29uZmlnIEtTSTg1NjAKICAgICAgICAgYm9vbCAiRW1lcnNvbiBLU0k4NTYwIgogICAgICAgICBzZWxlY3QgREVGQVVMVF9VSU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQppbmRleCBmMDc5OGMwLi5hODU3YjM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCkBAIC0xMyw0ICsxMyw1IEBACiBvYmotJChDT05GSUdfVFFNODV4eCkJICArPSB0cW04NXh4Lm8KIG9iai0kKENPTkZJR19TQkM4NTYwKSAgICAgKz0gc2JjODU2MC5vCiBvYmotJChDT05GSUdfU0JDODU0OCkgICAgICs9IHNiYzg1NDgubworb2JqLSQoQ09ORklHX1NPQ1JBVEVTKSAgICArPSBzb2NyYXRlcy5vIHNvY3JhdGVzX2ZwZ2FfcGljLm8KIG9iai0kKENPTkZJR19LU0k4NTYwKQkgICs9IGtzaTg1NjAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKaW5kZXggODFjZWU3Yi4uZjRkMzZiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCkBAIC0xMDYsOCArMTA2LDYgQEAKIAljcG0yX3BpY19pbml0KG5wKTsKIAlvZl9ub2RlX3B1dChucCk7CiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLCBjcG0yX2Nhc2NhZGUpOwotCi0Jc2V0dXBfaXJxKDAsIE5VTEwpOwogI2VuZGlmCiB9CiAKQEAgLTIyMSw2ICsyMTksNyBAQAogCXsgLnR5cGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAJeyAubmFtZSA9ICJjcG0iLCB9LAogCXsgLm5hbWUgPSAibG9jYWxidXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYwppbmRleCAxYmY1YWVmLi42M2VmY2EyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKQEAgLTkyLDYgKzkyLDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfYWRzLmMKaW5kZXggMjFmMDA5MC4uOTQzOGE4OTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAl7IC5uYW1lID0gImNwbSIsIH0sCiAJeyAubmFtZSA9ICJsb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwppbmRleCBhZWI2YTViLi40NThkOTFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9jZHMuYwpAQCAtMTc5LDcgKzE3OSw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtcGM4NXh4Y2RzXzgyNTlfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gbXBjODV4eF84MjU5X2Nhc2NhZGVfYWN0aW9uLAogCS5mbGFncyA9IElSUUZfU0hBUkVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICI4MjU5IGNhc2NhZGUiLAogfTsKICNlbmRpZiAvKiBQUENfSTgyNTkgKi8KQEAgLTMzNiw2ICszMzUsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKaW5kZXggNzMyNmQ5MC4uZGU2NmRlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKaW5kZXggNjU4YTM2Zi4uN2RkMDI5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKQEAgLTI2NSw2ICsyNjUsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAJeyAudHlwZSA9ICJxZSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscWUiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NDguYwppbmRleCA3ZWM3N2NlLi5lY2RkOGMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCXsgLm5hbWUgPSAic29jIiwgfSwKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKaW5kZXggNDcyZjI1NC4uY2MyNzgwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCkBAIC0yMTMsNiArMjEzLDcgQEAKIAl7IC5uYW1lID0gImNwbSIsIH0sCiAJeyAubmFtZSA9ICJsb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCmluZGV4IDc5YTBkZjEuLmNjMGIwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZGJlbGwuaD4KIAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAKQEAgLTgwLDEwICs4MSw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdAotc21wXzg1eHhfc2V0dXBfY3B1KGludCBjcHVfbnIpCitzbXBfODV4eF9iYXNpY19zZXR1cChpbnQgY3B1X25yKQogewotCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKLQogCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdHMgKi8KIAltdHNwcihTUFJOX1RTUiwgVFNSX0VOVyB8IFRTUl9XSVMgfCBUU1JfRElTIHwgVFNSX0ZJUyk7CiAKQEAgLTkxLDE1ICs5MCw0MyBAQAogCW10c3ByKFNQUk5fVENSLCBUQ1JfRElFKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0CitzbXBfODV4eF9zZXR1cF9jcHUoaW50IGNwdV9ucikKK3sKKwltcGljX3NldHVwX3RoaXNfY3B1KCk7CisKKwlzbXBfODV4eF9iYXNpY19zZXR1cChjcHVfbnIpOworfQorCiBzdHJ1Y3Qgc21wX29wc190IHNtcF84NXh4X29wcyA9IHsKLQkubWVzc2FnZV9wYXNzID0gc21wX21waWNfbWVzc2FnZV9wYXNzLAotCS5wcm9iZSA9IHNtcF9tcGljX3Byb2JlLAogCS5raWNrX2NwdSA9IHNtcF84NXh4X2tpY2tfY3B1LAotCS5zZXR1cF9jcHUgPSBzbXBfODV4eF9zZXR1cF9jcHUsCiB9OwogCi12b2lkIF9faW5pdAotbXBjODV4eF9zbXBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc21wX2R1bW15X3Byb2JlKHZvaWQpCiB7CisJcmV0dXJuIE5SX0NQVVM7Cit9CisKK3ZvaWQgX19pbml0IG1wYzg1eHhfc21wX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IE5VTEw7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmIChucCkgeworCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfbXBpY19wcm9iZTsKKwkJc21wXzg1eHhfb3BzLnNldHVwX2NwdSA9IHNtcF84NXh4X3NldHVwX2NwdTsKKwkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IHNtcF9tcGljX21lc3NhZ2VfcGFzczsKKwl9IGVsc2UgeworCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfZHVtbXlfcHJvYmU7CisJCXNtcF84NXh4X29wcy5zZXR1cF9jcHUgPSBzbXBfODV4eF9iYXNpY19zZXR1cDsKKwl9CisKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQorCQlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gc21wX2RiZWxsX21lc3NhZ2VfcGFzczsKKworCUJVR19PTighc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyk7CisKIAlzbXBfb3BzID0gJnNtcF84NXh4X29wczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlODQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlcy5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVtY3JhZnQgU3lzdGVtcworICogU2VyZ2VpIFBvc2VsZW5vdiA8c3Bvc2VsZW5vdkBlbWNyYWZ0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiBNUEM4NTYwIEFEUyBhbmQgYXJjaC9wcGMgdHFtODV4eCBwb3J0cworICoKKyAqIE1haW50YWluZWQgYnkgS3VtYXIgR2FsYSAoc2VlIE1BSU5UQUlORVJTIGZvciBjb250YWN0IGluZm9ybWF0aW9uKQorICoKKyAqIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKgorICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQorICogCUt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqICAgICAgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisKKyNpbmNsdWRlICJzb2NyYXRlc19mcGdhX3BpYy5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgc29jcmF0ZXNfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAib3Blbi1waWMiKTsKKwlpZiAoIW5wKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJMCwgMjU2LCAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKKworCW1waWNfaW5pdChtcGljKTsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFiYixzb2NyYXRlcy1mcGdhLXBpYyIpOworCWlmICghbnApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBzb2NyYXRlcy1mcGdhLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzb2NyYXRlc19mcGdhX3BpY19pbml0KG5wKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19zZXR1cF9hcmNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisjZW5kaWYKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygic29jcmF0ZXNfc2V0dXBfYXJjaCgpIiwgMCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NTQwLXBjaSIpCisJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIHNvY3JhdGVzX29mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCisJe30sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc29jcmF0ZXNfaW5pdCh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBzb2NyYXRlc19vZl9idXNfaWRzLCBOVUxMKTsKK30KKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBzb2NyYXRlc19wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFiYixzb2NyYXRlcyIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitkZWZpbmVfbWFjaGluZShzb2NyYXRlcykgeworCS5uYW1lCQkJPSAiU29jcmF0ZXMiLAorCS5wcm9iZQkJCT0gc29jcmF0ZXNfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gc29jcmF0ZXNfc2V0dXBfYXJjaCwKKwkuaW5pdAkJCT0gc29jcmF0ZXNfaW5pdCwKKwkuaW5pdF9JUlEJCT0gc29jcmF0ZXNfcGljX2luaXQsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlZGY2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyoKKyAqIFRoZSBGUEdBIHN1cHBvcnRzIDkgaW50ZXJydXB0IHNvdXJjZXMsIHdoaWNoIGNhbiBiZSByb3V0ZWQgdG8gMworICogaW50ZXJydXB0IHJlcXVlc3QgbGluZXMgb2YgdGhlIE1QSUMuIFRoZSBsaW5lIHRvIGJlIHVzZWQgY2FuIGJlCisgKiBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgdGhpcmQgY2VsbCBvZiBGRFQgcHJvcGVydHkgICJpbnRlcnJ1cHRzIi4KKyAqLworCisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMJOQorCisjZGVmaW5lIEZQR0FfUElDX0lSUUNGRwkJKDB4MCkKKyNkZWZpbmUgRlBHQV9QSUNfSVJRTUFTSyhuKQkoMHg0ICsgMHg0ICogKG4pKQorCisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sJKCgxIDw8IFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMpIC0gMSkKKworc3RydWN0IHNvY3JhdGVzX2ZwZ2FfaXJxX2luZm8geworCXVuc2lnbmVkIGludCBpcnFfbGluZTsKKwlpbnQgdHlwZTsKK307CisKKy8qCisgKiBJbnRlcnJ1cHQgcm91dGluZyBhbmQgdHlwZSB0YWJsZQorICoKKyAqIElSUV9UWVBFX05PTkUgbWVhbnMgdGhlIGludGVycnVwdCB0eXBlIGlzIGNvbmZpZ3VyYWJsZSwKKyAqIG90aGVyd2lzZSBpdCdzIGZpeGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29jcmF0ZXNfZnBnYV9pcnFfaW5mbyBmcGdhX2lycXNbU09DUkFURVNfRlBHQV9OVU1fSVJRU10gPSB7CisJWzBdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVsxXSA9IHswLCBJUlFfVFlQRV9MRVZFTF9ISUdIfSwKKwlbMl0gPSB7MCwgSVJRX1RZUEVfTEVWRUxfTE9XfSwKKwlbM10gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzRdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs1XSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbNl0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzddID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs4XSA9IHswLCBJUlFfVFlQRV9MRVZFTF9ISUdIfSwKK307CisKKyNkZWZpbmUgc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSkgICAgKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzb2NyYXRlc19mcGdhX3BpY19sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlOworc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3Q7CitzdGF0aWMgdW5zaWduZWQgaW50IHNvY3JhdGVzX2ZwZ2FfaXJxc1szXTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBzb2NyYXRlc19mcGdhX3BpY19yZWFkKGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMzIoc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKGludCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwlvdXRfYmUzMihzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgKyByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2dldF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1aW50MzJfdCBjYXVzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJLyogQ2hlY2sgaXJxIGxpbmUgcm91dGVkIHRvIHRoZSBNUElDICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoaXJxID09IHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSAzKQorCQlyZXR1cm4gTk9fSVJROworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwljYXVzZSA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoY2F1c2UgPj4gKGkgKyAxNikpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKHNvY3JhdGVzX2ZwZ2FfcGljX2lycV9ob3N0LAorCQkJKGlycV9od19udW1iZXJfdClpKTsKK30KKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnE7CisKKwkvKgorCSAqIFNlZSBpZiB3ZSBhY3R1YWxseSBoYXZlIGFuIGludGVycnVwdCwgY2FsbCBnZW5lcmljIGhhbmRsaW5nIGNvZGUgaWYKKwkgKiB3ZSBkby4KKwkgKi8KKwljYXNjYWRlX2lycSA9IHNvY3JhdGVzX2ZwZ2FfcGljX2dldF9pcnEoaXJxKTsKKworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxLCBpcnFfbGluZTsKKwl1aW50MzJfdCBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayB8PSAoMSA8PCAoaHdpcnEgKyAxNikpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgfD0gKDEgPDwgaHdpcnEpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgaXJxX2xpbmU7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwKKwkJdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgcG9sYXJpdHk7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaWYgKGZwZ2FfaXJxc1tod2lycV0udHlwZSAhPSBJUlFfVFlQRV9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgeworCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJcG9sYXJpdHkgPSAxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJcG9sYXJpdHkgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFDRkcpOworCWlmIChwb2xhcml0eSkKKwkJbWFzayB8PSAoMSA8PCBod2lycSk7CisJZWxzZQorCQltYXNrICY9IH4oMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRQ0ZHLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc29jcmF0ZXNfZnBnYV9waWNfY2hpcCA9IHsKKwkudHlwZW5hbWUgICAgICAgPSAiIEZQR0EtUElDICIsCisJLmFjawkJPSBzb2NyYXRlc19mcGdhX3BpY19hY2ssCisJLm1hc2sgICAgICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFzaywKKwkubWFza19hY2sgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjaywKKwkudW5tYXNrICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY191bm1hc2ssCisJLmVvaQkJPSBzb2NyYXRlc19mcGdhX3BpY19lb2ksCisJLnNldF90eXBlCT0gc29jcmF0ZXNfZnBnYV9waWNfc2V0X3R5cGUsCit9OworCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCWlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwkvKiBBbGwgaW50ZXJydXB0cyBhcmUgTEVWRUwgc2Vuc2l0aXZlICovCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmc29jcmF0ZXNfZnBnYV9waWNfY2hpcCwKKwkJCWhhbmRsZV9mYXN0ZW9pX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwKKwkJc3RydWN0IGRldmljZV9ub2RlICpjdCwJdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQoreworCXN0cnVjdCBzb2NyYXRlc19mcGdhX2lycV9pbmZvICpmcGdhX2lycSA9ICZmcGdhX2lycXNbaW50c3BlY1swXV07CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAgKGZwZ2FfaXJxLT50eXBlID09IElSUV9UWVBFX05PTkUpIHsKKwkJLyogdHlwZSBpcyBjb25maWd1cmFibGUgKi8KKwkJaWYgKGludHNwZWNbMV0gIT0gSVJRX1RZUEVfTEVWRUxfTE9XICYmCisJCSAgICBpbnRzcGVjWzFdICE9IElSUV9UWVBFX0xFVkVMX0hJR0gpIHsKKwkJCXByX3dhcm5pbmcoIkZQR0EgUElDOiBpbnZhbGlkIGlycSB0eXBlLCAiCisJCQkJICAgInNldHRpbmcgZGVmYXVsdCBhY3RpdmUgbG93XG4iKTsKKwkJCSpvdXRfZmxhZ3MgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJCX0gZWxzZSB7CisJCQkqb3V0X2ZsYWdzID0gaW50c3BlY1sxXTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHR5cGUgaXMgZml4ZWQgKi8KKwkJKm91dF9mbGFncyA9IGZwZ2FfaXJxLT50eXBlOworCX0KKworCS8qIFVzZSBzcGVjaWZpZWQgaW50ZXJydXB0IHJvdXRpbmcgKi8KKwlpZiAoaW50c3BlY1syXSA8PSAyKQorCQlmcGdhX2lycS0+aXJxX2xpbmUgPSBpbnRzcGVjWzJdOworCWVsc2UKKwkJcHJfd2FybmluZygiRlBHQSBQSUM6IGludmFsaWQgaXJxIHJvdXRpbmdcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3Rfb3BzID0geworCS5tYXAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19ob3N0X21hcCwKKwkueGxhdGUgID0gc29jcmF0ZXNfZnBnYV9waWNfaG9zdF94bGF0ZSwKK307CisKK3ZvaWQgc29jcmF0ZXNfZnBnYV9waWNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBpYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJLyogU2V0dXAgYW4gaXJxX2hvc3Qgc3RydWN0dXJlICovCisJc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChwaWMsIElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQlTT0NSQVRFU19GUEdBX05VTV9JUlFTLAkmc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9vcHMsCisJCQlTT0NSQVRFU19GUEdBX05VTV9JUlFTKTsKKwlpZiAoc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QgPT0gTlVMTCkgeworCQlwcl9lcnIoIkZQR0EgUElDOiBVbmFibGUgdG8gYWxsb2NhdGUgaG9zdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBpYywgaSk7CisJCWlmIChzb2NyYXRlc19mcGdhX2lycXNbaV0gPT0gTk9fSVJRKSB7CisJCQlwcl93YXJuaW5nKCJGUEdBIFBJQzogY2FuJ3QgZ2V0IGlycSVkLlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihzb2NyYXRlc19mcGdhX2lycXNbaV0sCisJCQkJc29jcmF0ZXNfZnBnYV9waWNfY2FzY2FkZSk7CisJfQorCisJc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlID0gb2ZfaW9tYXAocGljLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSygwKSwKKwkJCVNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sgPDwgMTYpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soMSksCisJCQlTT0NSQVRFU19GUEdBX0lSUV9NQVNLIDw8IDE2KTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKDIpLAorCQkJU09DUkFURVNfRlBHQV9JUlFfTUFTSyA8PCAxNik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCisJcHJfaW5mbygiRlBHQSBQSUM6IFNldHRpbmcgdXAgU29jcmF0ZXMgRlBHQSBQSUNcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQ3ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgU09DUkFURVNfRlBHQV9QSUNfSAorI2RlZmluZSBTT0NSQVRFU19GUEdBX1BJQ19ICisKK3ZvaWQgc29jcmF0ZXNfZnBnYV9waWNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBpYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggMGNjYThmNS4uZjU1OTkxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKaW5kZXggMjkzM2E4ZS4uNWIwYWI5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA4ZTU2OTM5Li5mZGFmNGRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBQUENfODZ4eAogbWVudWNvbmZpZyBQUENfODZ4eAogCWJvb2wgIjg2eHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBBTFRJVkVDCiAJaGVscApAQCAtMzEsNiArMzEsMjIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIEhQQ0QgYm9hcmQuCiAKK2NvbmZpZyBHRUZfUFBDOUEKKwlib29sICJHRSBGYW51YyBQUEM5QSIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFBQQzlBLgorCitjb25maWcgR0VGX1NCQzMxMAorCWJvb2wgIkdFIEZhbnVjIFNCQzMxMCIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFNCQzMxMC4KKwogY29uZmlnIEdFRl9TQkM2MTAKIAlib29sICJHRSBGYW51YyBTQkM2MTAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCkBAIC00OCw3ICs2NCw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAKKwlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAgfHwgR0VGX1NCQzMxMCB8fCBHRUZfUFBDOUEKIAogY29uZmlnIE1QQzg2MTAKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKaW5kZXggMzFlNTQwYy4uNGIwZDdiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQpAQCAtOSwzICs5LDUgQEAKIG9iai0kKENPTkZJR19NUEM4NjEwX0hQQ0QpCSs9IG1wYzg2MTBfaHBjZC5vCiBnZWYtZ3Bpby0kKENPTkZJR19HUElPTElCKQkrPSBnZWZfZ3Bpby5vCiBvYmotJChDT05GSUdfR0VGX1NCQzYxMCkJKz0gZ2VmX3NiYzYxMC5vIGdlZl9waWMubyAkKGdlZi1ncGlvLXkpCitvYmotJChDT05GSUdfR0VGX1NCQzMxMCkJKz0gZ2VmX3NiYzMxMC5vIGdlZl9waWMubyAkKGdlZi1ncGlvLXkpCitvYmotJChDT05GSUdfR0VGX1BQQzlBKQkJKz0gZ2VmX3BwYzlhLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKaW5kZXggODViMjgwMC4uYjJlYTg4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKQEAgLTM3LDggKzM3LDYgQEAKICNkZWZpbmUgR0VGX0dQSU9fT1ZFUlJVTgkweDFDCiAjZGVmaW5lIEdFRl9HUElPX01PREUJCTB4MjAKIAotI2RlZmluZSBOVU1fR1BJTyAxOQotCiBzdGF0aWMgdm9pZCBfZ2VmX2dwaW9fc2V0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgaW50IGRhdGE7CkBAIC0xMDMsMTAgKzEwMSwxMCBAQAogc3RhdGljIGludCBfX2luaXQgZ2VmX2dwaW9faW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICpnZWZfZ3Bpb19jaGlwOwogCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZ2VmLHNiYzYxMC1ncGlvIikgewotCQlpbnQgcmV0dmFsOwotCQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICpnZWZfZ3Bpb19jaGlwOwogCiAJCXByX2RlYnVnKCIlczogSW5pdGlhbGlzaW5nIEdFRiBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKIApAQCAtMTIwLDcgKzExOCwzNSBAQAogCiAJCS8qIFNldHVwIHBvaW50ZXJzIHRvIGNoaXAgZnVuY3Rpb25zICovCiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdwaW9fY2VsbHMgPSAyOwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IE5VTV9HUElPOworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IDE5OworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25faW5wdXQgPSBnZWZfZ3Bpb19kaXJfaW47CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBnZWZfZ3Bpb19kaXJfb3V0OworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5nZXQgPSBnZWZfZ3Bpb19nZXQ7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLnNldCA9IGdlZl9ncGlvX3NldDsKKworCQkvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBtZW1vcnkgbWFwcGVkIEdQSU8gY2hpcCAqLworCQlyZXR2YWwgPSBvZl9tbV9ncGlvY2hpcF9hZGQobnAsIGdlZl9ncGlvX2NoaXApOworCQlpZiAocmV0dmFsKSB7CisJCQlrZnJlZShnZWZfZ3Bpb19jaGlwKTsKKwkJCXByX2VycigiJXM6IFVuYWJsZSB0byBhZGQgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJnZWYsc2JjMzEwLWdwaW8iKSB7CisKKwkJcHJfZGVidWcoIiVzOiBJbml0aWFsaXNpbmcgR0VGIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOworCisJCS8qIEFsbG9jYXRlIGNoaXAgc3RydWN0dXJlICovCisJCWdlZl9ncGlvX2NoaXAgPSBremFsbG9jKHNpemVvZigqZ2VmX2dwaW9fY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWdlZl9ncGlvX2NoaXApIHsKKwkJCXByX2VycigiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmVcbiIsCisJCQkJbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNldHVwIHBvaW50ZXJzIHRvIGNoaXAgZnVuY3Rpb25zICovCisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdwaW9fY2VsbHMgPSAyOworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IDY7CiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7CiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmdldCA9IGdlZl9ncGlvX2dldDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkxMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogR0UgRmFudWMgUFBDOUEgYm9hcmQgc3VwcG9ydAorICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBtcGM4Nnh4X2hwY24uYyAoTVBDODZ4eCBIUENOIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIE5FQyBmaXh1cCBhZGFwdGVkIGZyb20gYXJjaC9taXBzL3BjaS9maXh1cC1sbTJlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPGFzbS9tcGljLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyNpbmNsdWRlICJtcGM4Nnh4LmgiCisjaW5jbHVkZSAiZ2VmX3BpYy5oIgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IHByaW50ayhLRVJOX0VSUiAiUFBDOUE6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpwcGM5YV9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjYXNjYWRlX25vZGUgPSBOVUxMOworCisJbXBjODZ4eF9pbml0X2lycSgpOworCisJLyoKKwkgKiBUaGVyZSBpcyBhIHNpbXBsZSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgbWFpbiBGUEdBLCB0aGlzIG5lZWRzCisJICogdG8gYmUgY2FzY2FkZWQgaW50byB0aGUgTVBJQworCSAqLworCWNhc2NhZGVfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1waWMtMS4wMCIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBQQzlBOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlZ3M7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg2NDEtcGNpZSIpIHsKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworCX0KKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fSU5GTyAiR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIFBQQzlBIDZVIFZNRSBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYscHBjOWEtZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJcHBjOWFfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAocHBjOWFfcmVncyA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG1hcCBib2FyZCByZWdpc3RlcnNcbiIpOworCQlvZl9ub2RlX3B1dChyZWdzKTsKKwl9Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9wcGM5YV9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiA4KSAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgYm9hcmQgKHNvZnR3YXJlKSByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3BwYzlhX2dldF9mcGdhX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9wcGM5YV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CisKKwlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfcHBjOWFfZ2V0X3BjYl9yZXYoKSwKKwkJKCdBJyArIGdlZl9wcGM5YV9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3BwYzlhX2dldF9mcGdhX3JldigpKTsKKworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX25lY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogRG8gbm90IGRvIHRoZSBmaXh1cCBvbiBvdGhlciBwbGF0Zm9ybXMhICovCisJaWYgKCFtYWNoaW5lX2lzKGdlZl9wcGM5YSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9wcGM5YV9uZWNfZml4dXApOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEJTUCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgKiBzdXBwbGllZCBkZXZpY2UtdHJlZSwgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBhY3R1YWwKKyAqIGJvYXJkLiBJdCBpcyBleHBlY3RlZCB0aGF0aSwgaW4gdGhlIGZ1dHVyZSwgYSBrZXJuZWwgbWF5IHN1cHBvcnQgbXVsdGlwbGUKKyAqIGJvYXJkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgZ2VmX3BwYzlhX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHBwYzlhIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSBwbGF0Zm9ybSBkZXZpY2VzXG4iKTsKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9wcGM5YSwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworZGVmaW5lX21hY2hpbmUoZ2VmX3BwYzlhKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBQUEM5QSIsCisJLnByb2JlCQkJPSBnZWZfcHBjOWFfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gZ2VmX3BwYzlhX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9wcGM5YV9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvCQk9IGdlZl9wcGM5YV9zaG93X2NwdWluZm8sCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODZ4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCisjaWZkZWYgQ09ORklHX1BDSQorCS5wY2liaW9zX2ZpeHVwX2J1cwk9IGZzbF9wY2liaW9zX2ZpeHVwX2J1cywKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogR0UgRmFudWMgU0JDMzEwIGJvYXJkIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogbXBjODZ4eF9ocGNuLmMgKE1QQzg2eHggSFBDTiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcykKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBORUMgZml4dXAgYWRhcHRlZCBmcm9tIGFyY2gvbWlwcy9wY2kvZml4dXAtbG0yZS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tcGM4Nnh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorCisjaW5jbHVkZSAibXBjODZ4eC5oIgorI2luY2x1ZGUgImdlZl9waWMuaCIKKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcgKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9FUlIgIlNCQzMxMDogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCit2b2lkIF9faW9tZW0gKnNiYzMxMF9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FzY2FkZV9ub2RlID0gTlVMTDsKKworCW1wYzg2eHhfaW5pdF9pcnEoKTsKKworCS8qCisJICogVGhlcmUgaXMgYSBzaW1wbGUgaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIG1haW4gRlBHQSwgdGhpcyBuZWVkcworCSAqIHRvIGJlIGNhc2NhZGVkIGludG8gdGhlIE1QSUMKKwkgKi8KKwljYXNjYWRlX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZ2VmLGZwZ2EtcGljIik7CisJaWYgKCFjYXNjYWRlX25vZGUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0JDMzEwOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyZWdzOworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NjQxLXBjaWUiKSB7CisJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gIkdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBTQkMzMTAgNlUgVlBYIFNCQ1xuIik7CisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODZ4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwkvKiBSZW1hcCBiYXNpYyBib2FyZCByZWdpc3RlcnMgKi8KKwlyZWdzID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXJlZ3MiKTsKKwlpZiAocmVncykgeworCQlzYmMzMTBfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAoc2JjMzEwX3JlZ3MgPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBtYXAgYm9hcmQgcmVnaXN0ZXJzXG4iKTsKKwkJb2Zfbm9kZV9wdXQocmVncyk7CisJfQorfQorCisvKiBSZXR1cm4gdGhlIFBDQiByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfc2JjMzEwX2dldF9ib2FyZF9pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIHJlZyAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X3BjYl9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjMzEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDgpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBib2FyZCAoc29mdHdhcmUpIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gMTYpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBGUEdBIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2ZwZ2FfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzMxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9zYmMzMTBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiQm9hcmQgSURcdDogMHglMi4yeFxuIiwgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfaWQoKSk7CisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzMxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzMxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCS8qIERvIG5vdCBkbyB0aGUgZml4dXAgb24gb3RoZXIgcGxhdGZvcm1zISAqLworCWlmICghbWFjaGluZV9pcyhnZWZfc2JjMzEwKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUnVubmluZyBORUMgdVBENzIwMTAxIEZpeHVwXG4iKTsKKworCS8qIEVuc3VyZSBvbmx5IHBvcnRzIDEgJiAyIGFyZSBlbmFibGVkICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICZ2YWwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgKHZhbCAmIH43KSB8IDB4Mik7CisKKwkvKiBTeXN0ZW0gY2xvY2sgaXMgNDgtTUh6IE9zY2lsbGF0b3IgYW5kIEVIQ0kgRW5hYmxlZC4gKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTQsIDEgPDwgNSk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORUMsIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiwKKwlnZWZfc2JjMzEwX25lY19maXh1cCk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQlNQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN1cHBsaWVkIGRldmljZS10cmVlLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIGFjdHVhbAorICogYm9hcmQuIEl0IGlzIGV4cGVjdGVkIHRoYXRpLCBpbiB0aGUgZnV0dXJlLCBhIGtlcm5lbCBtYXkgc3VwcG9ydCBtdWx0aXBsZQorICogYm9hcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBnZWZfc2JjMzEwX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHNiYzMxMCIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBfX2luaXQgbXBjODZ4eF90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCS8qIFNldCB0aGUgdGltZSBiYXNlIHRvIHplcm8gKi8KKwltdHNwcihTUFJOX1RCV0wsIDApOworCW10c3ByKFNQUk5fVEJXVSwgMCk7CisKKwl0ZW1wID0gbWZzcHIoU1BSTl9ISUQwKTsKKwl0ZW1wIHw9IEhJRDBfVEJFTjsKKwltdHNwcihTUFJOX0hJRDAsIHRlbXApOworCWFzbSB2b2xhdGlsZSgiaXN5bmMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjMzEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjMzEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkMzMTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzMxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjMzEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmMzMTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjMzEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKaW5kZXggZDZiNzcyYi4uZWEyMzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCkBAIC0xOTQsNiArMTk0LDcgQEAKIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IGU4ZDU0YWMuLjNmNDlhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgbXBjODYxMF9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWltbXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDI3ZTBlNjguLmM0ZWM0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3NiYzg2NDFkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwppbmRleCA1ZmQ3ZWQ0Li4yODg2YTM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvOHh4L204eHhfc2V0dXAuYwppbmRleCAwZDlmNzVjLi4zODVhY2ZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzh4eC9tOHh4X3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvbTh4eF9zZXR1cC5jCkBAIC00NCw3ICs0NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRiaW50X2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IHRpbWViYXNlX2ludGVycnVwdCwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAidGJpbnQiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCmluZGV4IDlhOGJiNTMuLmUzZTg3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKQEAgLTEsMTQgKzEsNSBAQAogbWVudSAiUGxhdGZvcm0gc3VwcG9ydCIKIAotY29uZmlnIFBQQ19NVUxUSVBMQVRGT1JNCi0JYm9vbAotCWRlcGVuZHMgb24gUFBDNjQgfHwgNnh4Ci0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBDTEFTU0lDMzIKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KLQogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnIgpAQCAtMjgsMTUgKzE5LDI4IEBACiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80MHgvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9LY29uZmlnIgogCiBjb25maWcgUFBDX05BVElWRQogCWJvb2wKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHggfHwgUFBDNjQKIAloZWxwCiAJICBTdXBwb3J0IGZvciBydW5uaW5nIG5hdGl2ZWx5IG9uIHRoZSBoYXJkd2FyZSwgaS5lLiB3aXRob3V0CiAJICBhIGh5cGVydmlzb3IuIFRoaXMgb3B0aW9uIGlzIG5vdCB1c2VyLXNlbGVjdGFibGUgYnV0IHNob3VsZAogCSAgYmUgc2VsZWN0ZWQgYnkgYWxsIHBsYXRmb3JtcyB0aGF0IG5lZWQgaXQuCiAKK2NvbmZpZyBQUENfT0ZfQk9PVF9UUkFNUE9MSU5FCisJYm9vbCAiU3VwcG9ydCBib290aW5nIGZyb20gT3BlbiBGaXJtd2FyZSBvciB5YWJvb3QiCisJZGVwZW5kcyBvbiA2eHggfHwgUFBDNjQKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTdXBwb3J0IGZyb20gYm9vdGluZyBmcm9tIE9wZW4gRmlybXdhcmUgb3IgeWFib290IHVzaW5nIGFuCisJICBPcGVuIEZpcm13YXJlIGNsaWVudCBpbnRlcmZhY2UuIFRoaXMgZW5hYmxlcyB0aGUga2VybmVsIHRvCisJICBjb21tdW5pY2F0ZSB3aXRoIG9wZW4gZmlybXdhcmUgdG8gcmV0cmlldmUgc3lzdGVtIGluZm9ybWF0aW9ucworCSAgc3VjaCBhcyB0aGUgZGV2aWNlIHRyZWUuCisKKwkgIEluIGNhc2Ugb2YgZG91YnQsIHNheSBZCisKIGNvbmZpZyBVREJHX1JUQVNfQ09OU09MRQogCWJvb2wgIlJUQVMgYmFzZWQgZGVidWcgY29uc29sZSIKIAlkZXBlbmRzIG9uIFBQQ19SVEFTCkBAIC03MCw3ICs3NCw3IEBACiAKIGNvbmZpZyBVM19EQVJUCiAJYm9vbAotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0CiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBQUENfUlRBUwpAQCAtOTEsMTUgKzk1LDYgQEAKIAl0cmlzdGF0ZSAiRmlybXdhcmUgZmxhc2ggaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gUFBDNjQgJiYgUlRBU19QUk9DCiAKLWNvbmZpZyBQUENfUE1JCi0JdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFBNSSIKLQlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERQotCWhlbHAKLQkgIFBNSSAoUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcnJ1cHQpIGlzIGEgd2F5IHRvCi0JICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBCTUMgKEJhc2Vib2FyZCBNYW5hZ2VtZW50IENvbnRyb2xsZXIpLgotCSAgSXQgaXMgdXNlZCBpbiBzb21lIElCTSBDZWxsIGJsYWRlcy4KLQlkZWZhdWx0IG0KLQogY29uZmlnIE1NSU9fTlZSQU0KIAlib29sCiAJZGVmYXVsdCBuCkBAIC0xOTYsNyArMTkxLDcgQEAKIAogY29uZmlnIFRBVQogCWJvb2wgIk9uLWNoaXAgQ1BVIHRlbXBlcmF0dXJlIHNlbnNvciBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ0xBU1NJQzMyCisJZGVwZW5kcyBvbiA2eHgKIAloZWxwCiAJICBHMyBhbmQgRzQgcHJvY2Vzc29ycyBoYXZlIGFuIG9uLWNoaXAgdGVtcGVyYXR1cmUgc2Vuc29yIGNhbGxlZCB0aGUKIAkgICdUaGVybWFsIEFzc2lzdCBVbml0IChUQVUpJywgd2hpY2gsIGluIHRoZW9yeSwgY2FuIG1lYXN1cmUgdGhlIG9uLWRpZQpAQCAtMjc0LDcgKzI2OSw3IEBACiAKIGNvbmZpZyBBWE9OX1JBTQogCXRyaXN0YXRlICJBeG9uIEREUjIgbWVtb3J5IGRldmljZSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUKKwlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERSAmJiBCTE9DSwogCWRlZmF1bHQgbQogCWhlbHAKIAkgIEl0IHJlZ2lzdGVycyBvbmUgYmxvY2sgZGV2aWNlIHBlciBBeG9uJ3MgRERSMiBtZW1vcnkgYmFuayBmb3VuZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCBlODY4YjVjLi45ZGE3OTVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQpAQCAtNTcsOSArNTcsMTcgQEAKIAogZW5kY2hvaWNlCiAKKyMgVW50aWwgd2UgaGF2ZSBhIGNob2ljZSBvZiBleGNsdXNpdmUgQ1BVIHR5cGVzIG9uIDY0LWJpdCwgd2UgYWx3YXlzCisjIHVzZSBQUENfQk9PSzNTLiBPbiAzMi1iaXQsIHRoaXMgaXMgZXF1aXZhbGVudCB0byA2eHggd2hpY2ggaXMKKyMgImNsYXNzaWMiIE1NVQorCitjb25maWcgUFBDX0JPT0szUworICAgICAgIGRlZl9ib29sIHkKKyAgICAgICBkZXBlbmRzIG9uIFBQQzY0IHx8IDZ4eAorCiBjb25maWcgUE9XRVI0X09OTFkKIAlib29sICJPcHRpbWl6ZSBmb3IgUE9XRVI0IgotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBDYXVzZSB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIFBPV0VSNC9QT1dFUjUvUFBDOTcwIHByb2Nlc3NvcnMuCkBAIC02OCwxNiArNzYsMTYgQEAKIAogY29uZmlnIFBPV0VSMwogCWJvb2wKLQlkZXBlbmRzIG9uIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmYXVsdCB5IGlmICFQT1dFUjRfT05MWQogCiBjb25maWcgUE9XRVI0Ci0JZGVwZW5kcyBvbiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWRlZl9ib29sIHkKIAogY29uZmlnIFRVTkVfQ0VMTAogCWJvb2wgIk9wdGltaXplIGZvciBDZWxsIEJyb2FkYmFuZCBFbmdpbmUiCi0JZGVwZW5kcyBvbiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWhlbHAKIAkgIENhdXNlIHRoZSBjb21waWxlciB0byBvcHRpbWl6ZSBmb3IgdGhlIFBQRSBvZiB0aGUgQ2VsbCBCcm9hZGJhbmQKIAkgIEVuZ2luZS4gVGhpcyB3aWxsIG1ha2UgdGhlIGNvZGUgcnVuIGNvbnNpZGVyYWJseSBmYXN0ZXIgb24gQ2VsbApAQCAtMTQ3LDcgKzE1NSw3IEBACiAKIGNvbmZpZyBBTFRJVkVDCiAJYm9vbCAiQWx0aVZlYyBTdXBwb3J0IgotCWRlcGVuZHMgb24gQ0xBU1NJQzMyIHx8IFBPV0VSNAorCWRlcGVuZHMgb24gNnh4IHx8IFBPV0VSNAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMga2VybmVsIHN1cHBvcnQgZm9yIHRoZSBBbHRpdmVjIGV4dGVuc2lvbnMgdG8gdGhlCiAJICBQb3dlclBDIHByb2Nlc3Nvci4gVGhlIGtlcm5lbCBjdXJyZW50bHkgc3VwcG9ydHMgc2F2aW5nIGFuZCByZXN0b3JpbmcKQEAgLTIxMCw2ICsyMTgsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiAhUFBDX1NURF9NTVUKIAorY29uZmlnIFBQQ19CT09LM0VfTU1VCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gRlNMX0JPT0tFCisKIGNvbmZpZyBQUENfTU1fU0xJQ0VTCiAJYm9vbAogCWRlZmF1bHQgeSBpZiBIVUdFVExCX1BBR0UgfHwgKFBQQ19TVERfTU1VXzY0ICYmIFBQQ182NEtfUEFHRVMpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQppbmRleCA4MDc5ZTBiLi5mNzQxOTE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDQgQEAKIG9iai0kKENPTkZJR19QUENfQ0VMTCkJCSs9IGNlbGwvCiBvYmotJChDT05GSUdfUFBDX1BTMykJCSs9IHBzMy8KIG9iai0kKENPTkZJR19FTUJFRERFRDZ4eCkJKz0gZW1iZWRkZWQ2eHgvCitvYmotJChDT05GSUdfQU1JR0FPTkUpCQkrPSBhbWlnYW9uZS8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjI0NzY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2NvbmZpZyBBTUlHQU9ORQorCWJvb2wgIkV5ZXRlY2ggQW1pZ2FPbmUvTUFJIFRlcm9uIgorCWRlcGVuZHMgb24gNnh4ICYmIEJST0tFTl9PTl9TTVAKKwlzZWxlY3QgUFBDX0k4MjU5CisJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKKwlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKKwlzZWxlY3QgUENJCisJc2VsZWN0IE5PVF9DT0hFUkVOVF9DQUNIRQorCXNlbGVjdCBDSEVDS19DQUNIRV9DT0hFUkVOQ1kKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgUENTUEtSX1BMQVRGT1JNCisJaGVscAorCVNlbGVjdCBBbWlnYU9uZSBmb3IgdGhlIGZvbGxvd2luZyBtYWNoaW5lczoKKwktIEFtaWdhT25lIFNFL1Rlcm9uIENYIChHMyBvbmx5KQorCS0gQW1pZ2FPbmUgWEUvVGVyb24gUFgKKwktIHVBMS9UZXJvbiBtaW5pCisJICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBhdDoKKwkgIDxodHRwOi8vYW1pZ2FvbmUtbGludXguc291cmNlZm9yZ2UubmV0Lz4uCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4NWIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQkrPSBzZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzMDM1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvc2V0dXAuYwpAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIEFtaWdhT25lIHBsYXRmb3JtIHNldHVwCisgKgorICogQ29weXJpZ2h0IDIwMDggR2VyaGFyZCBQaXJjaGVyIChnZXJoYXJkX3BpcmNoZXJAZ214Lm5ldCkKKyAqCisgKiAgIEJhc2VkIG9uIG9yaWdpbmFsIGFtaWdhb25lX3NldHVwLmMgc291cmNlIGNvZGUKKyAqIENvcHlyaWdodCAyMDAzIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiBhbmQgVGhvbWFzIEZyaWVkZW4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c3JlbGVhc2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworZXh0ZXJuIHZvaWQgX19mbHVzaF9kaXNhYmxlX0wxKHZvaWQpOworCit2b2lkIGFtaWdhb25lX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc2VxX3ByaW50ZihtLCAidmVuZG9yXHRcdDogRXlldGVjaCBMdGQuXG4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYW1pZ2FvbmVfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKK3sKKwljb25zdCB1MzIgKmNmZ19hZGRyLCAqY2ZnX2RhdGE7CisJaW50IGxlbjsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CisKKwlwcmludGsoS0VSTl9JTkZPICJBZGRpbmcgUENJIGhvc3QgYnJpZGdlICVzXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CisKKwljZmdfYWRkciA9IG9mX2dldF9hZGRyZXNzKGRldiwgMCwgTlVMTCwgTlVMTCk7CisJY2ZnX2RhdGEgPSBvZl9nZXRfYWRkcmVzcyhkZXYsIDEsIE5VTEwsIE5VTEwpOworCWlmICgoY2ZnX2FkZHIgPT0gTlVMTCkgfHwgKGNmZ19kYXRhID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWJ1c19yYW5nZSA9IG9mX2dldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKKwlpZiAoKGJ1c19yYW5nZSA9PSBOVUxMKSB8fCAobGVuIDwgMiAqIHNpemVvZihpbnQpKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKKwkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKworCWhvc2UgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZGV2KTsKKwlpZiAoaG9zZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzBdIDogMDsKKwlob3NlLT5sYXN0X2J1c25vID0gYnVzX3JhbmdlID8gYnVzX3JhbmdlWzFdIDogMHhmZjsKKworCXNldHVwX2luZGlyZWN0X3BjaShob3NlLCBjZmdfYWRkclswXSwgY2ZnX2RhdGFbMF0sIDApOworCisJLyogSW50ZXJwcmV0IHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSAqLworCS8qIFRoaXMgYWxzbyBtYXBzIHRoZSBJL08gcmVnaW9uIGFuZCBzZXRzIGlzYV9pby9tZW1fYmFzZSAqLworCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCAxKTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBhbWlnYW9uZV9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgcGhiID0gLUVOT0RFVjsKKworCS8qIExvb2t1cCBQQ0kgaG9zdCBicmlkZ2VzLiAqLworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJtYWktbG9naWMsYXJ0aWNpYS1zIikKKwkJcGhiID0gYW1pZ2FvbmVfYWRkX2JyaWRnZShucCk7CisKKwlCVUdfT04ocGhiICE9IDApOworCisJaWYgKHBwY19tZC5wcm9ncmVzcykKKwkJcHBjX21kLnByb2dyZXNzKCJMaW51eC9QUEMgIlVUU19SRUxFQVNFIlxuIiwgMCk7Cit9CisKK3ZvaWQgX19pbml0IGFtaWdhb25lX2luaXRfSVJRKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwaWMsICpucCA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqcHJvcCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpbnRfYWNrID0gMDsKKworCS8qIFNlYXJjaCBmb3IgSVNBIGludGVycnVwdCBjb250cm9sbGVyLiAqLworCXBpYyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBucFBOUCwwMDAiKTsKKwlCVUdfT04ocGljID09IE5VTEwpOworCisJLyogTG9vayBmb3IgaW50ZXJydXB0IGFja25vd2xlZGdlIGFkZHJlc3MgaW4gdGhlIFBDSSByb290IG5vZGUuICovCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCAicGNpIiwgIm1haS1sb2dpYyxhcnRpY2lhLXMiKTsKKwlpZiAobnApIHsKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCk7CisJCWlmIChwcm9wKQorCQkJaW50X2FjayA9IHByb3BbMF07CisJCW9mX25vZGVfcHV0KG5wKTsKKwl9CisKKwlpZiAoaW50X2FjayA9PSAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW5ub3QgZmluZCBQQ0kgaW50ZXJydXB0IGFja25vd2xlZGdlIgorCQkgICAgICAgIiBhZGRyZXNzLCBwb2xsaW5nXG4iKTsKKworCWk4MjU5X2luaXQocGljLCBpbnRfYWNrKTsKKwlwcGNfbWQuZ2V0X2lycSA9IGk4MjU5X2lycTsKKwlpcnFfc2V0X2RlZmF1bHRfaG9zdChpODI1OV9nZXRfaG9zdCgpKTsKK30KKwordm9pZCBfX2luaXQgYW1pZ2FvbmVfaW5pdCh2b2lkKQoreworCXJlcXVlc3RfcmVnaW9uKDB4MDAsIDB4MjAsICJkbWExIik7CisJcmVxdWVzdF9yZWdpb24oMHg0MCwgMHgyMCwgInRpbWVyIik7CisJcmVxdWVzdF9yZWdpb24oMHg4MCwgMHgxMCwgImRtYSBwYWdlIHJlZyIpOworCXJlcXVlc3RfcmVnaW9uKDB4YzAsIDB4MjAsICJkbWEyIik7Cit9CisKK3ZvaWQgYW1pZ2FvbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIEZsdXNoIGFuZCBkaXNhYmxlIGNhY2hlcy4gKi8KKwlfX2ZsdXNoX2Rpc2FibGVfTDEoKTsKKworICAgICAgICAvKiBTZXQgU1JSMCB0byB0aGUgcmVzZXQgdmVjdG9yIGFuZCB0dXJuIG9uIE1TUl9JUC4gKi8KKwltdHNwcihTUFJOX1NSUjAsIDB4ZmZmMDAxMDApOworCW10c3ByKFNQUk5fU1JSMSwgTVNSX0lQKTsKKworCS8qIERvIGFuIHJmaSB0byBqdW1wIGJhY2sgdG8gZmlybXdhcmUuICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJmaSIgOiA6IDogIm1lbW9yeSIpOworCisJLyogTm90IHJlYWNoZWQuICovCisJd2hpbGUgKDEpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhbWlnYW9uZV9wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImV5ZXRlY2gsYW1pZ2FvbmUiKSkgeworCQkvKgorCQkgKiBDb2hlcmVudCBtZW1vcnkgYWNjZXNzIGNhdXNlIGNvbXBsZXRlIHN5c3RlbSBsb2NrdXAhIFRodXMKKwkJICogZGlzYWJsZSB0aGlzIENQVSBmZWF0dXJlLCBldmVuIGlmIHRoZSBDUFUgbmVlZHMgaXQuCisJCSAqLworCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyAmPSB+Q1BVX0ZUUl9ORUVEX0NPSEVSRU5UOworCisJCUlTQV9ETUFfVEhSRVNIT0xEID0gMHgwMGZmZmZmZjsKKwkJRE1BX01PREVfUkVBRCA9IDB4NDQ7CisJCURNQV9NT0RFX1dSSVRFID0gMHg0ODsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworZGVmaW5lX21hY2hpbmUoYW1pZ2FvbmUpIHsKKwkubmFtZQkJCT0gIkFtaWdhT25lIiwKKwkucHJvYmUJCQk9IGFtaWdhb25lX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IGFtaWdhb25lX3NldHVwX2FyY2gsCisJLmluaXQJCQk9IGFtaWdhb25lX2luaXQsCisJLnNob3dfY3B1aW5mbwkJPSBhbWlnYW9uZV9zaG93X2NwdWluZm8sCisJLmluaXRfSVJRCQk9IGFtaWdhb25lX2luaXRfSVJRLAorCS5yZXN0YXJ0CQk9IGFtaWdhb25lX3Jlc3RhcnQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwppbmRleCA1Y2MzMjc5Li40MGUyNGMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwpAQCAtMjMsNyArMjMsNyBAQAogCiBjb25maWcgUFBDX0lCTV9DRUxMX0JMQURFCiAJYm9vbCAiSUJNIENlbGwgQmxhZGUiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCXNlbGVjdCBQUENfQ0VMTF9OQVRJVkUKIAlzZWxlY3QgTU1JT19OVlJBTQogCXNlbGVjdCBQUENfVURCR18xNjU1MApAQCAtMzEsNyArMzEsNyBAQAogCiBjb25maWcgUFBDX0NFTExFQgogCWJvb2wgIlRvc2hpYmEncyBDZWxsIFJlZmVyZW5jZSBTZXQgJ0NlbGxlYicgQXJjaGl0ZWN0dXJlIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0NFTExfTkFUSVZFCiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBQUENfVURCR19CRUFUCkBAIC00MCw5ICs0MCwxNCBAQAogCiBjb25maWcgUFBDX0NFTExfUVBBQ0UKIAlib29sICJJQk0gQ2VsbCAtIFFQQUNFIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0NFTExfQ09NTU9OCiAKK2NvbmZpZyBBWE9OX01TSQorCWJvb2wKKwlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERSAmJiBQQ0lfTVNJCisJZGVmYXVsdCB5CisKIG1lbnUgIkNlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zIgogCWRlcGVuZHMgb24gUFBDX0NFTEwKIApAQCAtOTgsNyArMTAzLDcgQEAKIAogY29uZmlnIFBQQ19JQk1fQ0VMTF9QT1dFUkJVVFRPTgogCXRyaXN0YXRlICJJQk0gQ2VsbCBCbGFkZSBwb3dlciBidXR0b24iCi0JZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgUFBDX1BNSSAmJiBJTlBVVF9FVkRFVgorCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFICYmIElOUFVUX0VWREVWCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU3VwcG9ydCBQb3dlcmJ1dHRvbiBvbiBJQk0gQ2VsbCBibGFkZXMuCkBAIC0xMTgsOSArMTIzLDkgQEAKIAkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxLz4uCiAJICBJZiB5b3UgZG9uJ3QgaGF2ZSBzdWNoIHByb2Nlc3Nvciwgc2F5IE4KIAotY29uZmlnIENCRV9DUFVGUkVRX1BNSQotCXRyaXN0YXRlICJDQkUgZnJlcXVlbmN5IHNjYWxpbmcgdXNpbmcgUE1JIGludGVyZmFjZSIKLQlkZXBlbmRzIG9uIENCRV9DUFVGUkVRICYmIFBQQ19QTUkgJiYgRVhQRVJJTUVOVEFMCitjb25maWcgQ0JFX0NQVUZSRVFfUE1JX0VOQUJMRQorCWJvb2wgIkNCRSBmcmVxdWVuY3kgc2NhbGluZyB1c2luZyBQTUkgaW50ZXJmYWNlIgorCWRlcGVuZHMgb24gQ0JFX0NQVUZSRVEgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgU2VsZWN0IHRoaXMsIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgUE1JIGludGVyZmFjZQpAQCAtMTI4LDYgKzEzMywyMCBAQAogCSAgcHJvY2Vzc29yIHdpbGwgbm90IG9ubHkgYmUgYWJsZSB0byBydW4gYXQgbG93ZXIgc3BlZWQsCiAJICBidXQgYWxzbyBhdCBsb3dlciBjb3JlIHZvbHRhZ2UuCiAKK2NvbmZpZyBDQkVfQ1BVRlJFUV9QTUkKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gQ0JFX0NQVUZSRVFfUE1JX0VOQUJMRQorCWRlZmF1bHQgQ0JFX0NQVUZSRVEKKworY29uZmlnIFBQQ19QTUkKKwl0cmlzdGF0ZQorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQ0JFX0NQVUZSRVFfUE1JIHx8IFBQQ19JQk1fQ0VMTF9QT1dFUkJVVFRPTgorCWhlbHAKKwkgIFBNSSAoUGxhdGZvcm0gTWFuYWdlbWVudCBJbnRlcnJ1cHQpIGlzIGEgd2F5IHRvCisJICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBCTUMgKEJhc2Vib2FyZCBNYW5hZ2VtZW50IENvbnRyb2xsZXIpLgorCSAgSXQgaXMgdXNlZCBpbiBzb21lIElCTSBDZWxsIGJsYWRlcy4KKwogY29uZmlnIENCRV9DUFVGUkVRX1NQVV9HT1ZFUk5PUgogCXRyaXN0YXRlICJDQkUgZnJlcXVlbmN5IHNjYWxpbmcgYmFzZWQgb24gU1BVIHVzYWdlIgogCWRlcGVuZHMgb24gU1BVX0ZTICYmIENQVV9GUkVRCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKaW5kZXggNDNlY2NiMi4uODNmYWZlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogCQkJCQkgICAkKHNwdS1tYW5hZ2UteSkgXAogCQkJCQkgICBzcHVmcy8KIAotb2JqLSQoQ09ORklHX1BDSV9NU0kpCQkJKz0gYXhvbl9tc2kubworb2JqLSQoQ09ORklHX0FYT05fTVNJKQkJCSs9IGF4b25fbXNpLm8KIAogIyBxcGFjZSBzZXR1cAogb2JqLSQoQ09ORklHX1BQQ19DRUxMX1FQQUNFKQkJKz0gcXBhY2Vfc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYwppbmRleCAwNTljYWQ2Li41YzExMThlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW8td29ya2Fyb3VuZHMuYwpAQCAtMTMxLDEwICsxMzEsMTAgQEAKIH07CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmlvd2FfaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCBpb3dhX2J1cyAqYnVzOwotCXZvaWQgX19pb21lbSAqcmVzID0gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwl2b2lkIF9faW9tZW0gKnJlcyA9IF9faW9yZW1hcF9jYWxsZXIoYWRkciwgc2l6ZSwgZmxhZ3MsIGNhbGxlcik7CiAJaW50IGJ1c25vOwogCiAJYnVzID0gaW93YV9wY2lfZmluZCgwLCAodW5zaWduZWQgbG9uZylhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggZWU1MDMzZS4uNTc0NDUyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTc0LDcgKzc0LDcgQEAKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1YJCTB4ODAwMDAwMDAwMDAwMDAwMHVsCiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9TUEZfTWFzawkweDYwMDAwMDAwMDAwMDAwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX1MJCTB4NjAwMDAwMDAwMDAwMDAwMHVsCi0jZGVmaW5lIElPQ19JT19FeGNwU3RhdF9TUEZfUAkJMHg0MDAwMDAwMDAwMDAwMDAwdWwKKyNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1NQRl9QCQkweDIwMDAwMDAwMDAwMDAwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfQUREUl9NYXNrCTB4MDAwMDAwMDdmZmZmZjAwMHVsCiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9SV19NYXNrCQkweDAwMDAwMDAwMDAwMDA4MDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfSU9JRF9NYXNrCTB4MDAwMDAwMDAwMDAwMDdmZnVsCkBAIC0yNDcsMTcgKzI0NywxOCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW9jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgc3RhdDsKKwl1bnNpZ25lZCBsb25nIHN0YXQsIHNwZjsKIAlzdHJ1Y3QgY2JlX2lvbW11ICppb21tdSA9IGRhdGE7CiAKIAlzdGF0ID0gaW5fYmU2NChpb21tdS0+eGxhdGVfcmVncyArIElPQ19JT19FeGNwU3RhdCk7CisJc3BmID0gc3RhdCAmIElPQ19JT19FeGNwU3RhdF9TUEZfTWFzazsKIAogCS8qIE1pZ2h0IHdhbnQgdG8gcmF0ZSBsaW1pdCBpdCAqLwogCXByaW50ayhLRVJOX0VSUiAiaW9tbXU6IERNQSBleGNlcHRpb24gMHglMDE2bHhcbiIsIHN0YXQpOwogCXByaW50ayhLRVJOX0VSUiAiICBWPSVkLCBTUEY9WyVjJWNdLCBSVz0lcywgSU9JRD0weCUwNHhcbiIsCiAJICAgICAgICEhKHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfViksCi0JICAgICAgIChzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1NQRl9TKSA/ICdTJyA6ICcgJywKLQkgICAgICAgKHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfU1BGX1ApID8gJ1AnIDogJyAnLAorCSAgICAgICAoc3BmID09IElPQ19JT19FeGNwU3RhdF9TUEZfUykgPyAnUycgOiAnICcsCisJICAgICAgIChzcGYgPT0gSU9DX0lPX0V4Y3BTdGF0X1NQRl9QKSA/ICdQJyA6ICcgJywKIAkgICAgICAgKHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfUldfTWFzaykgPyAiUmVhZCIgOiAiV3JpdGUiLAogCSAgICAgICAodW5zaWduZWQgaW50KShzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X0lPSURfTWFzaykpOwogCXByaW50ayhLRVJOX0VSUiAiICBwYWdlPTB4JTAxNmx4XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwppbmRleCBiZTg0ZTZhLi5jNWNlMDJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvcXBhY2Vfc2V0dXAuYwpAQCAtODEsMTYgKzgxLDYgQEAKIH0KIG1hY2hpbmVfc3Vic3lzX2luaXRjYWxsKHFwYWNlLCBxcGFjZV9wdWJsaXNoX2RldmljZXMpOwogCi1leHRlcm4gaW50IHFwYWNlX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JLyogc2V0IGRtYV9vcHMgZm9yIG9mX3BsYXRmb3JtIGJ1cyAqLwotCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+bmFtZQotCQkJJiYgIXN0cmNtcChkZXYtPmJ1cy0+bmFtZSwgIm9mX3BsYXRmb3JtIikpCi0JCXNldF9kbWFfb3BzKGRldiwgJmRtYV9kaXJlY3Rfb3BzKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcXBhY2Vfc2V0dXBfYXJjaCh2b2lkKQogewogI2lmZGVmIENPTkZJR19TUFVfQkFTRQpAQCAtMTE1LDkgKzEwNSw2IEBACiAjaWZkZWYgQ09ORklHX0RVTU1ZX0NPTlNPTEUKIAljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKICNlbmRpZgotCi0JLyogc2V0IG5vdGlmaWVyIGZ1bmN0aW9uICovCi0JcGxhdGZvcm1fbm90aWZ5ID0gJnFwYWNlX25vdGlmeTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcXBhY2VfcHJvYmUodm9pZCkKQEAgLTE0MSw2ICsxMjgsOCBAQAogCS5wb3dlcl9vZmYJCT0gcnRhc19wb3dlcl9vZmYsCiAJLmhhbHQJCQk9IHJ0YXNfaGFsdCwKIAkuZ2V0X2Jvb3RfdGltZQkJPSBydGFzX2dldF9ib290X3RpbWUsCisJLmdldF9ydGNfdGltZQkJPSBydGFzX2dldF9ydGNfdGltZSwKKwkuc2V0X3J0Y190aW1lCQk9IHJ0YXNfc2V0X3J0Y190aW1lLAogCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAogCS5wcm9ncmVzcwkJPSBxcGFjZV9wcm9ncmVzcywKIAkuaW5pdF9JUlEJCT0gaWljX2luaXRfSVJRLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwppbmRleCBlNDg3YWQ2Li45YWJkMjEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaW50IG5yID0gKE5SX0NQVVMgPiAxKSA/IE5SX0NQVVMgOiBOUl9DUFVTICsgMTsKIAogCS8qIEdsb2JhbCBUTEJJRSBicm9hZGNhc3QgcmVxdWlyZWQgd2l0aCBTUEVzLiAqLwotCV9fY3B1c19zZXRhbGwoJm1tLT5jcHVfdm1fbWFzaywgbnIpOworCWJpdG1hcF9maWxsKGNwdW1hc2tfYml0cyhtbV9jcHVtYXNrKG1tKSksIG5yKTsKIH0KIAogdm9pZCBzcHVfYXNzb2NpYXRlX21tKHN0cnVjdCBzcHUgKnNwdSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2ZhdWx0LmMKaW5kZXggYzhiMWNkNC4uOTVkOGRhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfZmF1bHQuYwpAQCAtMzksNjAgKzM5LDU2IEBACiAJdW5zaWduZWQgbG9uZyBpc193cml0ZTsKIAlpbnQgcmV0OwogCi0jaWYgMAotCWlmICghSVNfVkFMSURfRUEoZWEpKSB7CisJaWYgKG1tID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLSNlbmRpZiAvKiBYWFggKi8KLQlpZiAobW0gPT0gTlVMTCkgeworCisJaWYgKG1tLT5wZ2QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWlmIChtbS0+cGdkID09IE5VTEwpIHsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldCA9IC1FRkFVTFQ7CiAJdm1hID0gZmluZF92bWEobW0sIGVhKTsKIAlpZiAoIXZtYSkKLQkJZ290byBiYWRfYXJlYTsKLQlpZiAodm1hLT52bV9zdGFydCA8PSBlYSkKLQkJZ290byBnb29kX2FyZWE7Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCi0JCWdvdG8gYmFkX2FyZWE7Ci0JaWYgKGV4cGFuZF9zdGFjayh2bWEsIGVhKSkKLQkJZ290byBiYWRfYXJlYTsKLWdvb2RfYXJlYToKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKGVhIDwgdm1hLT52bV9zdGFydCkgeworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGVhKSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAlpc193cml0ZSA9IGRzaXNyICYgTUZDX0RTSVNSX0FDQ0VTU19QVVQ7CiAJaWYgKGlzX3dyaXRlKSB7CiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCX0gZWxzZSB7CiAJCWlmIChkc2lzciAmIE1GQ19EU0lTUl9BQ0NFU1NfREVOSUVEKQotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fRVhFQykpKQotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CisKIAlyZXQgPSAwOwogCSpmbHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgZWEsIGlzX3dyaXRlKTsKIAlpZiAodW5saWtlbHkoKmZsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoKmZsdCAmIFZNX0ZBVUxUX09PTSkgewogCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0gZWxzZSBpZiAoKmZsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJQlVHKCk7CiAJfQorCiAJaWYgKCpmbHQgJiBWTV9GQVVMVF9NQUpPUikKIAkJY3VycmVudC0+bWFqX2ZsdCsrOwogCWVsc2UKIAkJY3VycmVudC0+bWluX2ZsdCsrOworCitvdXRfdW5sb2NrOgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHJldDsKLQotYmFkX2FyZWE6Ci0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gLUVGQVVMVDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNwdV9oYW5kbGVfbW1fZmF1bHQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKaW5kZXggNjY1M2RkYi4uZGI1Mzk4YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCkBAIC0zNSw2ICszNSw4IEBACiBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmFsbG9jX3NwdV9jb250ZXh0KHN0cnVjdCBzcHVfZ2FuZyAqZ2FuZykKIHsKIAlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKIAljdHggPSBremFsbG9jKHNpemVvZiAqY3R4LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0eCkKIAkJZ290byBvdXQ7CkBAIC02NCw2ICs2Niw4IEBACiAJX19zcHVfdXBkYXRlX3NjaGVkX2luZm8oY3R4KTsKIAlzcHVfc2V0X3RpbWVzbGljZShjdHgpOwogCWN0eC0+c3RhdHMudXRpbF9zdGF0ZSA9IFNQVV9VVElMX0lETEVfTE9BREVEOworCWt0aW1lX2dldF90cygmdHMpOworCWN0eC0+c3RhdHMudHN0YW1wID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKIAogCWF0b21pY19pbmMoJm5yX3NwdV9jb250ZXh0cyk7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCAwZGE3ZjJiLi5kNmE1MTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTU2OCwxNiArNTY4LDE3IEBACiAJc3RydWN0IHNwdV9sc2NzYSAqbHNjc2EgPSBjdHgtPmNzYS5sc2NzYTsKIAlpbnQgcmV0OwogCi0Jc2l6ZSA9IG1pbl90KHNzaXplX3QsIHNpemVvZiBsc2NzYS0+Z3BycyAtICpwb3MsIHNpemUpOwotCWlmIChzaXplIDw9IDApCisJaWYgKCpwb3MgPj0gc2l6ZW9mKGxzY3NhLT5ncHJzKSkKIAkJcmV0dXJuIC1FRkJJRzsKKworCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YobHNjc2EtPmdwcnMpIC0gKnBvcywgc2l6ZSk7CiAJKnBvcyArPSBzaXplOwogCiAJcmV0ID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gY29weV9mcm9tX3VzZXIobHNjc2EtPmdwcnMgKyAqcG9zIC0gc2l6ZSwKKwlyZXQgPSBjb3B5X2Zyb21fdXNlcigoY2hhciAqKWxzY3NhLT5ncHJzICsgKnBvcyAtIHNpemUsCiAJCQkgICAgIGJ1ZmZlciwgc2l6ZSkgPyAtRUZBVUxUIDogc2l6ZTsKIAogCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7CkBAIC02MjMsMTAgKzYyNCwxMSBAQAogCXN0cnVjdCBzcHVfbHNjc2EgKmxzY3NhID0gY3R4LT5jc2EubHNjc2E7CiAJaW50IHJldDsKIAotCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YobHNjc2EtPmZwY3IpIC0gKnBvcywgc2l6ZSk7Ci0JaWYgKHNpemUgPD0gMCkKKwlpZiAoKnBvcyA+PSBzaXplb2YobHNjc2EtPmZwY3IpKQogCQlyZXR1cm4gLUVGQklHOwogCisJc2l6ZSA9IG1pbl90KHNzaXplX3QsIHNpemVvZihsc2NzYS0+ZnBjcikgLSAqcG9zLCBzaXplKTsKKwogCXJldCA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTI2NjUsNyArMjY2Nyw3IEBACiAJLnJlbGVhc2UgICAgICAgID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfY29udGVudHNbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdID0gewogCXsgImNhcGFiaWxpdGllcyIsICZzcHVmc19jYXBzX2ZvcHMsIDA0NDQsIH0sCiAJeyAibWVtIiwgICZzcHVmc19tZW1fZm9wcywgIDA2NjYsIExTX1NJWkUsIH0sCiAJeyAicmVncyIsICZzcHVmc19yZWdzX2ZvcHMsICAwNjY2LCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjhbMTI4XSksIH0sCkBAIC0yNzA2LDcgKzI3MDgsNyBAQAogCXt9LAogfTsKIAotc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX25vc2NoZWRfY29udGVudHNbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW10gPSB7CiAJeyAiY2FwYWJpbGl0aWVzIiwgJnNwdWZzX2NhcHNfZm9wcywgMDQ0NCwgfSwKIAl7ICJtZW0iLCAgJnNwdWZzX21lbV9mb3BzLCAgMDY2NiwgTFNfU0laRSwgfSwKIAl7ICJtYm94IiwgJnNwdWZzX21ib3hfZm9wcywgMDQ0NCwgfSwKQEAgLTI3MzEsMTIgKzI3MzMsMTIgQEAKIAl7fSwKIH07CiAKLXN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0geworY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7CiAJeyAiLmN0eCIsICZzcHVmc19jdHhfZm9wcywgMDQ0NCwgfSwKIAl7fSwKIH07CiAKLXN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0geworY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7CiAJeyAicmVncyIsIF9fc3B1ZnNfcmVnc19yZWFkLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjhbMTI4XSl9LAogCXsgImZwY3IiLCBfX3NwdWZzX2ZwY3JfcmVhZCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4KSB9LAogCXsgImxzbHIiLCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKaW5kZXggZTMwOWVmNy4uNzA2ZWI1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMKQEAgLTE4Niw4ICsxODYsOSBAQAogCXJldHVybiBzaW1wbGVfcm1kaXIocGFyZW50LCBkaXIpOwogfQogCi1zdGF0aWMgaW50IHNwdWZzX2ZpbGxfZGlyKHN0cnVjdCBkZW50cnkgKmRpciwgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3IgKmZpbGVzLAotCQkJICBpbnQgbW9kZSwgc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpCitzdGF0aWMgaW50IHNwdWZzX2ZpbGxfZGlyKHN0cnVjdCBkZW50cnkgKmRpciwKKwkJY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3IgKmZpbGVzLCBpbnQgbW9kZSwKKwkJc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqdG1wOwogCWludCByZXQ7CkBAIC02MzQsNyArNjM1LDcgQEAKIAlpZiAoZGVudHJ5LT5kX2lub2RlKQogCQlnb3RvIG91dF9kcHV0OwogCi0JbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWlmIChmbGFncyAmIFNQVV9DUkVBVEVfR0FORykKIAkJcmV0ID0gc3B1ZnNfY3JlYXRlX2dhbmcobmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCmluZGV4IGM1OGJkMzYuLjRkZGY3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKQEAgLTExNyw2ICsxMTcsOSBAQAogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKKwkvKiBjbGVhciBwdXJnZSBzdGF0dXMgKi8KKwlvdXRfYmU2NChtZmNfY250bCwgMCk7CisKIAkvKiBwdXQgdGhlIFNQRSBpbiBrZXJuZWwgbW9kZSB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGxvYWRlciAqLwogCXNyMSA9IHNwdV9tZmNfc3IxX2dldChjdHgtPnNwdSk7CiAJc3IxICY9IH5NRkNfU1RBVEUxX1BST0JMRU1fU1RBVEVfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKaW5kZXggM2JmOTA4ZS4uYWUzMTU3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKQEAgLTI0MSw5ICsyNDEsOSBAQAogCXNpemVfdCBzaXplOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdOwotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW107Ci1leHRlcm4gc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX25vc2NoZWRfY29udGVudHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXTsKIAogLyogc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKi8KIGV4dGVybiBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHM7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTsKIAlzaXplX3Qgc2l6ZTsKIH07Ci1leHRlcm4gc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CiBleHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX251bV9ub3RlczsKIAogZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKaW5kZXggMjJiNGI0ZS4uMzdkNDM4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX0NIUlAKIAlib29sICJDb21tb24gSGFyZHdhcmUgUmVmZXJlbmNlIFBsYXRmb3JtIChDSFJQKSBiYXNlZCBtYWNoaW5lcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwppbmRleCAxMzBmZjcyLi4wMzlmYzhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0UgCQkJKDB4ZjIwMDAwMDApCiAjZGVmaW5lIFBFR0FTT1MyX1NSQU1fU0laRQkJCSgyNTYqMTAyNCkKIAotI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCi0jZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgxCQkJKFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgwICsgKFBFR0FTT1MyX1NSQU1fU0laRSAvIDIpICkKKyNkZWZpbmUgUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCisjZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDEJCQkoUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMCArIChQRUdBU09TMl9TUkFNX1NJWkUgLyAyKSApCiAKIAogI2RlZmluZSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFCQkoUEVHQVNPUzJfU1JBTV9TSVpFLzQpCkBAIC00Nyw3NSArNDcsNDIgQEAKIAkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjQzeHhfZXRoX3BvcnQxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkubmFtZQk9ICJldGggcG9ydDEgaXJxIiwKIAkJLnN0YXJ0CT0gOSwKIAkJLmVuZAk9IDksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkID0gewotCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JLnBvcnRfbnVtYmVyCT0gMCwKLQotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMCwKLQkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKLQkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCi0KLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDAgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAotCS5yeF9zcmFtX3NpemUgPSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFLAotCS5yeF9xdWV1ZV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRS8xNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDBfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjQzeHhfZXRoMF9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgxIGlycSIsCi0JCS5zdGFydAk9IDksCi0JCS5lbmQJPSA5LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGV0aDFfcGQgPSB7CitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoX3BvcnQxX3BkID0gewogCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCiAJLnBvcnRfbnVtYmVyCT0gMSwKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig3KSwKIAotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMSwKKwkudHhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMSwKIAkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCiAKLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDEgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAorCS5yeF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIX1BPUlQxICsgUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkucnhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRSwKIAkucnhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fUlhSSU5HX1NJWkUvMTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgxX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aF9wb3J0MV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKIAkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGgxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXY2NDN4eF9ldGgxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfcG9ydDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9wb3J0MV9yZXNvdXJjZXMsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoX3BvcnQxX3BkLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JJmV0aDBfZGV2aWNlLAotCSZldGgxX2RldmljZSwKKwkmZXRoX3BvcnQxX2RldmljZSwKIH07CiAKIC8qKioqKioqKioqKi8KQEAgLTE5MSwxNSArMTU4LDEwIEBACiAKIAkJaWYgKCBFbmFibGVfU1JBTSgpIDwgMCkKIAkJewotCQkJZXRoMF9wZC50eF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC50eF9zcmFtX3NpemUgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX3NpemUgPSAwOwotCi0JCQlldGgxX3BkLnR4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnR4X3NyYW1fc2l6ZSA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fc2l6ZSA9IDA7CisJCQlldGhfcG9ydDFfcGQudHhfc3JhbV9hZGRyID0gMDsKKwkJCWV0aF9wb3J0MV9wZC50eF9zcmFtX3NpemUgPSAwOworCQkJZXRoX3BvcnQxX3BkLnJ4X3NyYW1fYWRkciA9IDA7CisJCQlldGhfcG9ydDFfcGQucnhfc3JhbV9zaXplID0gMDsKIAogI2lmZGVmIEJFX1ZFUkJPU0UKIAkJCXByaW50aygiUGVnYXNvcyBJSS9NYXJ2ZWxsIE1WNjQzNjE6IENhbid0IGVuYWJsZSB0aGUgIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCAyNzJkNzlhLi5jZDRhZDlhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtNDcyLDcgKzQ3Miw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfVlQpICYmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEQkhJRCkgJiYgZGVmaW5lZChDT05GSUdfWE1PTikKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHhtb25faXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0geG1vbl9pcnEsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gIlhNT04gYnJlYWsiLAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCmluZGV4IDRmOWY4MTguLjI5MWFjOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRU1CRURERUQ2eHgKIAlib29sICJFbWJlZGRlZCA2eHgvN3h4Lzd4eHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDMzIgJiYgQlJPS0VOX09OX1NNUCAmJiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4ICYmIEJST0tFTl9PTl9TTVAKIAogY29uZmlnIExJTktTVEFUSU9OCiAJYm9vbCAiTGlua3N0YXRpb24gLyBLdXJvYm94KEhHKSBmcm9tIEJ1ZmZhbG8iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCmluZGV4IDdkZGQwYTIuLjY0N2U4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19JU0VSSUVTCiAJYm9vbCAiSUJNIExlZ2FjeSBpU2VyaWVzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0lORElSRUNUX0lPCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFIGlmIEVNQkVEREVECiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCA3MDFkOTI5Li45NGY0NDQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yX2VhY2hfaXJxIChpcnEpIHsKLQkJaXJxX2Rlc2NfdCAqZGVzYyA9IGdldF9pcnFfZGVzYyhpcnEpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKIAogCQlpZiAoZGVzYyAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPnN0YXJ0dXApIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDI0NTE5YjkuLmE2Y2QzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC02MTcsNyArNjE3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgX19pb21lbSAqaXNlcmllc19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyZXNzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnCmluZGV4IGE2NDY3YTUuLjFlYTYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX01BUExFCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWJvb2wgIk1hcGxlIDk3MEZYIEV2YWx1YXRpb24gQm9hcmQiCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBNUElDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZwppbmRleCAzNDhlMDYxLi5hMmFlYjMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BBU0VNSQotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJQQSBTZW1pIFNvQy1iYXNlZCBwbGF0Zm9ybXMiCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1QSUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZwppbmRleCAwNTU5OTBjLi4xZTFhMDg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QTUFDCiAJYm9vbCAiQXBwbGUgUG93ZXJNYWMgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gUFBDX0JPT0szUwogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJIGlmIFBQQzMyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCmluZGV4IGJlYjM4MzMuLjIyZWNmYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCkBAIC04Niw2ICs4Niw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZzVfc3dpdGNoX211dGV4KTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNpdGlvbl9sYXRlbmN5OwogCiAjaWZkZWYgQ09ORklHX1BNQUNfU01VCiAKQEAgLTM1Nyw3ICszNTgsNyBAQAogCiBzdGF0aWMgaW50IGc1X2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gdHJhbnNpdGlvbl9sYXRlbmN5OwogCXBvbGljeS0+Y3VyID0gZzVfY3B1X2ZyZXFzW2c1X3F1ZXJ5X2ZyZXEoKV0uZnJlcXVlbmN5OwogCS8qIHNlY29uZGFyeSBDUFVzIGFyZSB0aWVkIHRvIHRoZSBwcmltYXJ5IG9uZSBieSB0aGUKIAkgKiBjcHVmcmVxIGNvcmUgaWYgaW4gdGhlIHNlY29uZGFyeSBwb2xpY3kgd2UgdGVsbCBpdCB0aGF0CkBAIC01MDAsNiArNTAxLDcgQEAKIAlnNV9jcHVfZnJlcXNbMV0uZnJlcXVlbmN5ID0gbWF4X2ZyZXEvMjsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSAxMjAwMDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3Njb21fc3dpdGNoX2ZyZXE7CiAJZzVfcXVlcnlfZnJlcSA9IGc1X3Njb21fcXVlcnlfZnJlcTsKIAlmcmVxX21ldGhvZCA9ICJTQ09NIjsKQEAgLTY3NSw2ICs2NzcsNyBAQAogCWc1X2NwdV9mcmVxc1sxXS5mcmVxdWVuY3kgPSBtaW5fZnJlcTsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CiAJZzVfc3dpdGNoX3ZvbHQgPSBnNV9wZnVuY19zd2l0Y2hfdm9sdDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3BmdW5jX3N3aXRjaF9mcmVxOwogCWc1X3F1ZXJ5X2ZyZXEgPSBnNV9wZnVuY19xdWVyeV9mcmVxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKaW5kZXggNmQxNDlhZS4uNzAzOWQ4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCkBAIC0yNjYsNyArMjY2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHhtb25fYWN0aW9uID0gewogCS5oYW5kbGVyCT0geG1vbl9pcnEsCiAJLmZsYWdzCQk9IDAsCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZQkJPSAiTk1JIC0gWE1PTiIKIH07CiAjZW5kaWYKQEAgLTI3NCw3ICsyNzMsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZ2F0d2lja19jYXNjYWRlX2FjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGdhdHdpY2tfYWN0aW9uLAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gImNhc2NhZGUiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmgKaW5kZXggYzQ0Yzg5Zi4uZDYyMmE4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKLWV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcG1hY19waWM7CitleHRlcm4gc3RydWN0IGlycV9jaGlwIHBtYWNfcGljOwogCiBleHRlcm4gdm9pZCBwbWFjX3BpY19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBwbWFjX2dldF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggOWI3OGY1My4uNDU5MzZjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNzQ2LDQgKzc0Niw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzY0KQogCS5jcHVfZGllCQk9IHBtYWNfY3B1X2RpZSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwkuY3B1X2RpZQkJPSBnZW5lcmljX21hY2hfY3B1X2RpZSwKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGJkODgxN2IuLmNmMWRiZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtMzg1LDcgKzM4NSw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwc3VyZ2VfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gcHN1cmdlX3ByaW1hcnlfaW50ciwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJwcmltYXJ5IElQSSIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3ByZXAvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHJlcC9LY29uZmlnCmluZGV4IDI5ZDQxMTIuLmJmODMzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHJlcC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHJlcC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QUkVQCiAJYm9vbCAiUG93ZXJQQyBSZWZlcmVuY2UgUGxhdGZvcm0gKFBSZVApIGJhc2VkIG1hY2hpbmVzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiA2eHggJiYgQlJPS0VOCiAJc2VsZWN0IE1QSUMKIAlzZWxlY3QgUFBDX0k4MjU5CiAJc2VsZWN0IFBQQ19JTkRJUkVDVF9QQ0kKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCmluZGV4IDc0MGVmNTYuLmRmZTMxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBQUENfUFMzCiAJYm9vbCAiU29ueSBQUzMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCXNlbGVjdCBQUENfQ0VMTAogCXNlbGVjdCBVU0JfQVJDSF9IQVNfT0hDSQogCXNlbGVjdCBVU0JfT0hDSV9MSVRUTEVfRU5ESUFOCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwppbmRleCBkMjgxY2MwLi45YTJiNmQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCXJlc3VsdCA9IGFkZF9tZW1vcnkoMCwgc3RhcnRfYWRkciwgbWFwLnIxLnNpemUpOwogCiAJaWYgKHJlc3VsdCkgewotCQlEQkcoIiVzOiVkOiBhZGRfbWVtb3J5IGZhaWxlZDogKCVkKVxuIiwKKwkJcHJfZXJyKCIlczolZDogYWRkX21lbW9yeSBmYWlsZWQ6ICglZClcbiIsCiAJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcmVzdWx0ID0gb25saW5lX3BhZ2VzKHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCiAJaWYgKHJlc3VsdCkKLQkJREJHKCIlczolZDogb25saW5lX3BhZ2VzIGZhaWxlZDogKCVkKVxuIiwKKwkJcHJfZXJyKCIlczolZDogb25saW5lX3BhZ2VzIGZhaWxlZDogKCVkKVxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKaW5kZXggZTFjODNjMi4uODZlMzkyYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9vcy1hcmVhLmMKQEAgLTgwOCw2ICs4MDgsNyBAQAogewogCXJldHVybiBzYXZlZF9wYXJhbXMucnRjX2RpZmY7CiB9CitFWFBPUlRfU1lNQk9MKHBzM19vc19hcmVhX2dldF9ydGNfZGlmZik7CiAKIC8qKgogICogcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmIC0gU2V0IHRoZSBydGMgZGlmZiB2YWx1ZS4KQEAgLTgyMyw2ICs4MjQsNyBAQAogCQlvc19hcmVhX3F1ZXVlX3dvcmsoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKHBzM19vc19hcmVhX3NldF9ydGNfZGlmZik7CiAKIC8qKgogICogcHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCAtIFJldHVybnMgdGhlIGRlZmF1bHQgdmlkZW8gbW9kZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9wbGF0Zm9ybS5oCmluZGV4IDIzNWMxM2UuLjEzNmFhMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvcGxhdGZvcm0uaApAQCAtNjQsOCArNjQsNiBAQAogCiB2b2lkIF9faW5pdCBwczNfb3NfYXJlYV9zYXZlX3BhcmFtcyh2b2lkKTsKIHZvaWQgX19pbml0IHBzM19vc19hcmVhX2luaXQodm9pZCk7Ci11NjQgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKHZvaWQpOwotdm9pZCBwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYodTY0IHJ0Y19kaWZmKTsKIAogLyogc3B1ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCmluZGV4IDMzMzFjY2IuLjY2MTgxODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYwpAQCAtMjcwLDggKzI3MCw2IEBACiAJLmluaXRfSVJRCQkJPSBwczNfaW5pdF9JUlEsCiAJLnBhbmljCQkJCT0gcHMzX3BhbmljLAogCS5nZXRfYm9vdF90aW1lCQkJPSBwczNfZ2V0X2Jvb3RfdGltZSwKLQkuc2V0X3J0Y190aW1lCQkJPSBwczNfc2V0X3J0Y190aW1lLAotCS5nZXRfcnRjX3RpbWUJCQk9IHBzM19nZXRfcnRjX3RpbWUsCiAJLnNldF9kYWJyCQkJPSBwczNfc2V0X2RhYnIsCiAJLmNhbGlicmF0ZV9kZWNyCQkJPSBwczNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQkJPSBwczNfcHJvZ3Jlc3MsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy90aW1lLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy90aW1lLmMKaW5kZXggZDBkYWY3ZC4uYjE3OGExZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3RpbWUuYwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9ydGMuaD4KICNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgpAQCAtNzQsMjMgKzc1LDIwIEBACiAJcmV0dXJuIHJ0Y192YWw7CiB9CiAKLWludCBwczNfc2V0X3J0Y190aW1lKHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JdTY0IG5vdyA9IG1rdGltZSh0bS0+dG1feWVhciArIDE5MDAsIHRtLT50bV9tb24gKyAxLCB0bS0+dG1fbWRheSwKLQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwotCi0JcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmKG5vdyAtIHJlYWRfcnRjKCkpOwotCXJldHVybiAwOwotfQotCi12b2lkIHBzM19nZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQl0b190bShyZWFkX3J0YygpICsgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKCksIHRtKTsKLQl0bS0+dG1feWVhciAtPSAxOTAwOwotCXRtLT50bV9tb24gLT0gMTsKLX0KLQogdW5zaWduZWQgbG9uZyBfX2luaXQgcHMzX2dldF9ib290X3RpbWUodm9pZCkKIHsKIAlyZXR1cm4gcmVhZF9ydGMoKSArIHBzM19vc19hcmVhX2dldF9ydGNfZGlmZigpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBwczNfcnRjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1wczMiLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocGRldik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQocHMzX3J0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggZGRjMmEzMC4uZjBlNmYyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BTRVJJRVMKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJYm9vbCAiSUJNIHBTZXJpZXMgJiBuZXcgKFBPV0VSNS1iYXNlZCkgaVNlcmllcyIKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKQEAgLTI1LDYgKzI1LDExIEBACiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBQQ0kKIAlkZWZhdWx0IHkgaWYgIUVNQkVEREVECiAKK2NvbmZpZyBQU0VSSUVTX01TSQorICAgICAgIGJvb2wKKyAgICAgICBkZXBlbmRzIG9uIFBDSV9NU0kgJiYgRUVICisgICAgICAgZGVmYXVsdCB5CisKIGNvbmZpZyBTQ0FOTE9HCiAJdHJpc3RhdGUgIlNjYW5sb2cgZHVtcCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBSVEFTX1BST0MgJiYgUFBDX1BTRVJJRVMKQEAgLTYzLDMgKzY4LDEzIEBACiAJICBtYWtlcyBzZW5zZSBmb3IgYSBzeXN0ZW0gcnVubmluZyBpbiBhbiBMUEFSIHdoZXJlIHRoZSB1bnVzZWQgcGFnZXMKIAkgIHdpbGwgYmUgcmV1c2VkIGZvciBvdGhlciBMUEFScy4gVGhlIGludGVyZmFjZSBhbGxvd3MgZmlybXdhcmUgdG8KIAkgIGJhbGFuY2UgbWVtb3J5IGFjcm9zcyBtYW55IExQQVJzLgorCitjb25maWcgRFRMCisJYm9vbCAiRGlzcGF0Y2ggVHJhY2UgTG9nIgorCWRlcGVuZHMgb24gUFBDX1NQTFBBUiAmJiBERUJVR19GUworCWhlbHAKKwkgIFNQTFBBUiBtYWNoaW5lcyBjYW4gbG9nIGh5cGVydmlzb3IgcHJlZW1wdCAmIGRpc3BhdGNoIGV2ZW50cyB0byBhCisJICBrZXJuZWwgYnVmZmVyLiBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIGxvZ2dpbmcgdGhlc2UgZXZlbnRzLAorCSAgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBhIGRlYnVnZnMgZmlsZS4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggZGZlNTc0YS4uNzkwYzBiOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX0VFSCkJKz0gZWVoLm8gZWVoX2NhY2hlLm8gZWVoX2RyaXZlci5vIGVlaF9ldmVudC5vIGVlaF9zeXNmcy5vCiBvYmotJChDT05GSUdfS0VYRUMpCSs9IGtleGVjLm8KIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vIHBjaV9kbHBhci5vCi1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXNpLm8KK29iai0kKENPTkZJR19QU0VSSUVTX01TSSkJKz0gbXNpLm8KIAogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLWNwdS5vCiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCSs9IGhvdHBsdWctbWVtb3J5Lm8KQEAgLTI1LDMgKzI1LDQgQEAKIG9iai0kKENPTkZJR19IQ0FMTF9TVEFUUykJKz0gaHZDYWxsX2luc3Qubwogb2JqLSQoQ09ORklHX1BIWVBfRFVNUCkJKz0gcGh5cF9kdW1wLm8KIG9iai0kKENPTkZJR19DTU0pCQkrPSBjbW0ubworb2JqLSQoQ09ORklHX0RUTCkJCSs9IGR0bC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmY2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIFZpcnR1YWwgUHJvY2Vzc29yIERpc3BhdGNoIFRyYWNlIExvZworICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDkKKyAqCisgKiBBdXRob3I6IEplcmVteSBLZXJyIDxqa0BvemxhYnMub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCisKKy8qCisgKiBMYXlvdXQgb2YgZW50cmllcyBpbiB0aGUgaHlwZXJ2aXNvcidzIERUTCBidWZmZXIuIEFsdGhvdWdoIHdlIGRvbid0CisgKiBhY3R1YWxseSBhY2Nlc3MgdGhlIGludGVybmFscyBvZiBhbiBlbnRyeSAod2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIHNpemUpLAorICogd2UgbWlnaHQgYXMgd2VsbCBkZWZpbmUgaXQgaGVyZSBmb3IgcmVmZXJlbmNlLgorICovCitzdHJ1Y3QgZHRsX2VudHJ5IHsKKwl1OAlkaXNwYXRjaF9yZWFzb247CisJdTgJcHJlZW1wdF9yZWFzb247CisJdTE2CXByb2Nlc3Nvcl9pZDsKKwl1MzIJZW5xdWV1ZV90b19kaXNwYXRjaF90aW1lOworCXUzMglyZWFkeV90b19lbnF1ZXVlX3RpbWU7CisJdTMyCXdhaXRpbmdfdG9fcmVhZHlfdGltZTsKKwl1NjQJdGltZWJhc2U7CisJdTY0CWZhdWx0X2FkZHI7CisJdTY0CXNycjA7CisJdTY0CXNycjE7Cit9OworCitzdHJ1Y3QgZHRsIHsKKwlzdHJ1Y3QgZHRsX2VudHJ5CSpidWY7CisJc3RydWN0IGRlbnRyeQkJKmZpbGU7CisJaW50CQkJY3B1OworCWludAkJCWJ1Zl9lbnRyaWVzOworCXU2NAkJCWxhc3RfaWR4OworfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZHRsLCBkdGwpOworCisvKgorICogRGlzcGF0Y2ggdHJhY2UgbG9nIGV2ZW50IG1hc2s6CisgKiAweDc6IDB4MTogdm9sdW50YXJ5IHZpcnR1YWwgcHJvY2Vzc29yIHdhaXRzCisgKiAgICAgIDB4MjogdGltZS1zbGljZSBwcmVlbXB0cworICogICAgICAweDQ6IHZpcnR1YWwgcGFydGl0aW9uIG1lbW9yeSBwYWdlIGZhdWx0cworICovCitzdGF0aWMgdTggZHRsX2V2ZW50X21hc2sgPSAweDc7CisKKworLyoKKyAqIFNpemUgb2YgcGVyLWNwdSBsb2cgYnVmZmVycy4gRGVmYXVsdCBpcyBqdXN0IHVuZGVyIDE2IHBhZ2VzIHdvcnRoLgorICovCitzdGF0aWMgaW50IGR0bF9idWZfZW50cmllcyA9ICgxNiAqIDg1KTsKKworCitzdGF0aWMgaW50IGR0bF9lbmFibGUoc3RydWN0IGR0bCAqZHRsKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0LCBod2NwdTsKKworCS8qIG9ubHkgYWxsb3cgb25lIHJlYWRlciAqLworCWlmIChkdGwtPmJ1ZikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24gc2l6ZSBmb3IgdXNlIGR1cmluZyByZWFkICovCisJZHRsLT5idWZfZW50cmllcyA9IGR0bF9idWZfZW50cmllczsKKworCWR0bC0+YnVmID0ga21hbGxvY19ub2RlKGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSksCisJCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShkdGwtPmNwdSkpOworCWlmICghZHRsLT5idWYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1ZmZlciBhbGxvYyBmYWlsZWQgZm9yIGNwdSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHRsLT5jcHUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBSZWdpc3RlciBvdXIgZHRsIGJ1ZmZlciB3aXRoIHRoZSBoeXBlcnZpc29yLiBUaGUgSFYgZXhwZWN0cyB0aGUKKwkgKiBidWZmZXIgc2l6ZSB0byBiZSBwYXNzZWQgaW4gdGhlIHNlY29uZCB3b3JkIG9mIHRoZSBidWZmZXIgKi8KKwkoKHUzMiAqKWR0bC0+YnVmKVsxXSA9IGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisKKwlod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoZHRsLT5jcHUpOworCWFkZHIgPSBfX3BhKGR0bC0+YnVmKTsKKwlyZXQgPSByZWdpc3Rlcl9kdGwoaHdjcHUsIGFkZHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERUTCByZWdpc3RyYXRpb24gZm9yIGNwdSAlZCAoaHcgJWQpICIKKwkJICAgICAgICJmYWlsZWQgd2l0aCAlZFxuIiwgX19mdW5jX18sIGR0bC0+Y3B1LCBod2NwdSwgcmV0KTsKKwkJa2ZyZWUoZHRsLT5idWYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBzZXQgb3VyIGluaXRpYWwgYnVmZmVyIGluZGljZXMgKi8KKwlkdGwtPmxhc3RfaWR4ID0gbHBwYWNhW2R0bC0+Y3B1XS5kdGxfaWR4ID0gMDsKKworCS8qIGVuc3VyZSB0aGF0IG91ciB1cGRhdGVzIHRvIHRoZSBscHBhY2EgZmllbGRzIGhhdmUgb2NjdXJyZWQgYmVmb3JlCisJICogd2UgYWN0dWFsbHkgZW5hYmxlIHRoZSBsb2dnaW5nICovCisJc21wX3dtYigpOworCisJLyogZW5hYmxlIGV2ZW50IGxvZ2dpbmcgKi8KKwlscHBhY2FbZHRsLT5jcHVdLmR0bF9lbmFibGVfbWFzayA9IGR0bF9ldmVudF9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0bF9kaXNhYmxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGR0bC0+Y3B1KTsKKworCWxwcGFjYVtkdGwtPmNwdV0uZHRsX2VuYWJsZV9tYXNrID0gMHgwOworCisJdW5yZWdpc3Rlcl9kdGwoaHdjcHUsIF9fcGEoZHRsLT5idWYpKTsKKworCWtmcmVlKGR0bC0+YnVmKTsKKwlkdGwtPmJ1ZiA9IE5VTEw7CisJZHRsLT5idWZfZW50cmllcyA9IDA7Cit9CisKKy8qIGZpbGUgaW50ZXJmYWNlICovCisKK3N0YXRpYyBpbnQgZHRsX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZHRsICpkdGwgPSBpbm9kZS0+aV9wcml2YXRlOworCWludCByYzsKKworCXJjID0gZHRsX2VuYWJsZShkdGwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZHRsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0bF9maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGR0bCAqZHRsID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlkdGxfZGlzYWJsZShkdGwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkdGxfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAorCQlsb2ZmX3QgKnBvcykKK3sKKwlpbnQgcmMsIGN1cl9pZHgsIGxhc3RfaWR4LCBuX3JlYWQsIG5fcmVxLCByZWFkX3NpemU7CisJc3RydWN0IGR0bCAqZHRsOworCisJaWYgKChsZW4gJSBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZHRsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogcmVxdWVzdGVkIG51bWJlciBvZiBlbnRyaWVzIHRvIHJlYWQgKi8KKwluX3JlcSA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKworCS8qIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcyByZWFkICovCisJbl9yZWFkID0gMDsKKworCWN1cl9pZHggPSBscHBhY2FbZHRsLT5jcHVdLmR0bF9pZHg7CisJbGFzdF9pZHggPSBkdGwtPmxhc3RfaWR4OworCisJaWYgKGN1cl9pZHggLSBsYXN0X2lkeCA+IGR0bC0+YnVmX2VudHJpZXMpIHsKKwkJcHJfZGVidWcoIiVzOiBodiBidWZmZXIgb3ZlcmZsb3cgZm9yIGNwdSAlZCwgc2FtcGxlcyBsb3N0XG4iLAorCQkJCV9fZnVuY19fLCBkdGwtPmNwdSk7CisJfQorCisJY3VyX2lkeCAgJT0gZHRsLT5idWZfZW50cmllczsKKwlsYXN0X2lkeCAlPSBkdGwtPmJ1Zl9lbnRyaWVzOworCisJLyogcmVhZCB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIGlmIHdlJ3ZlIHdyYXBwZWQgKi8KKwlpZiAobGFzdF9pZHggPiBjdXJfaWR4KSB7CisJCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgZHRsLT5idWZfZW50cmllcyAtIGxhc3RfaWR4KTsKKworCQlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQkJcmVhZF9zaXplICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbGFzdF9pZHggPSAwOworCQluX3JlcSAtPSByZWFkX3NpemU7CisJCW5fcmVhZCArPSByZWFkX3NpemU7CisJCWJ1ZiArPSByZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisJfQorCisJLyogLi4gYW5kIG5vdyB0aGUgaGVhZCAqLworCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgY3VyX2lkeCAtIGxhc3RfaWR4KTsKKwlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQlyZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpOworCWlmIChyYykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwluX3JlYWQgKz0gcmVhZF9zaXplOworCWR0bC0+bGFzdF9pZHggKz0gbl9yZWFkOworCisJcmV0dXJuIG5fcmVhZCAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsX2ZvcHMgPSB7CisJLm9wZW4JCT0gZHRsX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IGR0bF9maWxlX3JlbGVhc2UsCisJLnJlYWQJCT0gZHRsX2ZpbGVfcmVhZCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkdGxfZGlyOworCitzdGF0aWMgaW50IGR0bF9zZXR1cF9maWxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwljaGFyIG5hbWVbMTBdOworCisJc3ByaW50ZihuYW1lLCAiY3B1LSVkIiwgZHRsLT5jcHUpOworCisJZHRsLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNDAwLCBkdGxfZGlyLCBkdGwsICZkdGxfZm9wcyk7CisJaWYgKCFkdGwtPmZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHRsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9tYXNrX2ZpbGUsICpidWZfZW50cmllc19maWxlOworCWludCByYywgaTsKKworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNldCB1cCBjb21tb24gZGVidWdmcyBzdHJ1Y3R1cmUgKi8KKworCXJjID0gLUVOT01FTTsKKwlkdGxfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkdGwiLCBwb3dlcnBjX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFkdGxfZGlyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBjcmVhdGUgZHRsIHJvb3QgZGlyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJZXZlbnRfbWFza19maWxlID0gZGVidWdmc19jcmVhdGVfeDgoImR0bF9ldmVudF9tYXNrIiwgMDYwMCwKKwkJCQlkdGxfZGlyLCAmZHRsX2V2ZW50X21hc2spOworCWJ1Zl9lbnRyaWVzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImR0bF9idWZfZW50cmllcyIsIDA2MDAsCisJCQkJZHRsX2RpciwgJmR0bF9idWZfZW50cmllcyk7CisKKwlpZiAoIWV2ZW50X21hc2tfZmlsZSB8fCAhYnVmX2VudHJpZXNfZmlsZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgY3JlYXRlIGR0bCBmaWxlc1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9yZW1vdmVfZGlyOworCX0KKworCS8qIHNldCB1cCB0aGUgcGVyLWNwdSBsb2cgc3RydWN0dXJlcyAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCBkdGwgKmR0bCA9ICZwZXJfY3B1KGR0bCwgaSk7CisJCWR0bC0+Y3B1ID0gaTsKKworCQlyYyA9IGR0bF9zZXR1cF9maWxlKGR0bCk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfZGlyOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkdGxfZGlyKTsKK2VycjoKKwlyZXR1cm4gcmM7Cit9CithcmNoX2luaXRjYWxsKGR0bF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDBhZDU2ZmYuLjM4MDQyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtNzksNiArNzksNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogZWVoX2Rpc2FibGVfaXJxIC0gZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSByZWNvdmVyaW5nIGRldmljZQorICovCitzdGF0aWMgdm9pZCBlZWhfZGlzYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwkvKiBEb24ndCBkaXNhYmxlIE1TSSBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhleSBhcmUKKwkgKiBlZmZlY3RpdmVseSBkaXNhYmxlZCBieSB0aGUgRE1BIFN0b3BwZWQgc3RhdGUKKwkgKiB3aGVuIGFuIEVFSCBlcnJvciBvY2N1cnMuCisJKi8KKwlpZiAoZGV2LT5tc2lfZW5hYmxlZCB8fCBkZXYtPm1zaXhfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKCFpcnFfaW5fdXNlKGRldi0+aXJxKSkKKwkJcmV0dXJuOworCisJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOworCWRpc2FibGVfaXJxX25vc3luYyhkZXYtPmlycSk7Cit9CisKKy8qKgorICogZWVoX2VuYWJsZV9pcnEgLSBlbmFibGUgaW50ZXJydXB0IGZvciB0aGUgcmVjb3ZlcmluZyBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZWVoX2VuYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwlpZiAoKFBDSV9ETihkbiktPmVlaF9tb2RlKSAmIEVFSF9NT0RFX0lSUV9ESVNBQkxFRCkgeworCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+RUVIX01PREVfSVJRX0RJU0FCTEVEOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwl9Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qKgogICogZWVoX3JlcG9ydF9lcnJvciAtIHJlcG9ydCBwY2kgZXJyb3IgdG8gZWFjaCBkZXZpY2UgZHJpdmVyCkBAIC05OCwxMSArMTMyLDggQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9CisJZWVoX2Rpc2FibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKQogCQlyZXR1cm47CkBAIC0xNDcsMTUgKzE3OCwxMiBAQAogewogCWVudW0gcGNpX2Vyc19yZXN1bHQgcmMsICpyZXMgPSB1c2VyZGF0YTsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCiAJaWYgKCFkcml2ZXIpCiAJCXJldHVybjsKIAotCWlmICgoUENJX0ROKGRuKS0+ZWVoX21vZGUpICYgRUVIX01PREVfSVJRX0RJU0FCTEVEKSB7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7Ci0JCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCX0KKwllZWhfZW5hYmxlX2lycShkZXYpOworCiAJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CiAJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KQogCQlyZXR1cm47CkBAIC0xNzQsMTcgKzIwMiwxNCBAQAogc3RhdGljIHZvaWQgZWVoX3JlcG9ydF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAogCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CiAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKChQQ0lfRE4oZG4pLT5lZWhfbW9kZSkgJiBFRUhfTU9ERV9JUlFfRElTQUJMRUQpIHsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfkVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JfQorCWVlaF9lbmFibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZSkKIAkJcmV0dXJuOwpAQCAtMjA4LDE1ICsyMzMsMTIgQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyKQorCWVlaF9kaXNhYmxlX2lycShkZXYpOworCisJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkKIAkJcmV0dXJuOwotCWlmICghZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQpCi0JCXJldHVybjsKKwogCWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKGRldiwgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCmluZGV4IGYxNTIyMmIuLmJmMmUxYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTcxLDExICs3MSwxMyBAQAogCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOwogCiAJLyoKLQkgKiBJZiB0aGUgUlRBUyBjYWxsIHN1Y2NlZWRlZCwgY2hlY2sgdGhlIG51bWJlciBvZiBpcnFzIGlzIGFjdHVhbGx5Ci0JICogd2hhdCB3ZSBhc2tlZCBmb3IuIElmIG5vdCwgcmV0dXJuIGFuIGVycm9yLgorCSAqIElmIHRoZSBSVEFTIGNhbGwgc3VjY2VlZGVkLCByZXR1cm4gdGhlIG51bWJlciBvZiBpcnFzIGFsbG9jYXRlZC4KKwkgKiBJZiBub3QsIG1ha2Ugc3VyZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogCSAqLwotCWlmIChyYyA9PSAwICYmIHJ0YXNfcmV0WzBdICE9IG51bV9pcnFzKQotCQlyYyA9IC1FTk9TUEM7CisJaWYgKHJjID09IDApCisJCXJjID0gcnRhc19yZXRbMF07CisJZWxzZSBpZiAocmMgPiAwKQorCQlyYyA9IC1yYzsKIAogCXByX2RlYnVnKCJydGFzX21zaTogaWJtLGNoYW5nZV9tc2koZnVuYz0lZCxudW09JWQpLCBnb3QgJWQgcmMgPSAlZFxuIiwKIAkJIGZ1bmMsIG51bV9pcnFzLCBydGFzX3JldFswXSwgcmMpOwpAQCAtOTEsNyArOTMsNyBAQAogCWlmICghcGRuKQogCQlyZXR1cm47CiAKLQlpZiAocnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIDApKQorCWlmIChydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9GTiwgMCkgIT0gMCkKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBTZXR0aW5nIE1TSXMgdG8gMCBmYWlsZWQhXG4iKTsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBACiAJcnRhc19kaXNhYmxlX21zaShwZGV2KTsKIH0KIAotc3RhdGljIGludCBjaGVja19yZXFfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYykKK3N0YXRpYyBpbnQgY2hlY2tfcmVxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgY2hhciAqcHJvcF9uYW1lKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kbiAqcGRuOwpAQCAtMTQ0LDI2ICsxNDYsMjM1IEBACiAKIAlkbiA9IHBkbi0+bm9kZTsKIAotCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0scmVxI21zaSIsIE5VTEwpOworCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sIHByb3BfbmFtZSwgTlVMTCk7CiAJaWYgKCFyZXFfbXNpKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogTm8gaWJtLHJlcSNtc2kgb24gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCQlwcl9kZWJ1ZygicnRhc19tc2k6IE5vICVzIG9uICVzXG4iLCBwcm9wX25hbWUsIGRuLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlpZiAoKnJlcV9tc2kgPCBudmVjKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogaWJtLHJlcSNtc2kgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBudmVjKTsKLQkJcmV0dXJuIC1FTk9TUEM7CisJCXByX2RlYnVnKCJydGFzX21zaTogJXMgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBwcm9wX25hbWUsIG52ZWMpOworCisJCWlmICgqcmVxX21zaSA9PSAwKSAvKiBCZSBwYXJhbm9pZCAqLworCQkJcmV0dXJuIC1FTk9TUEM7CisKKwkJcmV0dXJuICpyZXFfbXNpOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNoZWNrX3JlcV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpIik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVxX21zaXgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpLXgiKTsKK30KKworLyogUXVvdGEgY2FsY3VsYXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9wZV90b3RhbF9tc2koc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp0b3RhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWNvbnN0IHUzMiAqcDsKKworCWRuID0gb2Zfbm9kZV9nZXQocGNpX2RldmljZV90b19PRl9ub2RlKGRldikpOworCXdoaWxlIChkbikgeworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHBlLXRvdGFsLSNtc2kiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCXByX2RlYnVnKCJydGFzX21zaTogZm91bmQgcHJvcCBvbiBkbiAlc1xuIiwKKwkJCQlkbi0+ZnVsbF9uYW1lKTsKKwkJCSp0b3RhbCA9ICpwOworCQkJcmV0dXJuIGRuOworCQl9CisKKwkJZG4gPSBvZl9nZXRfbmV4dF9wYXJlbnQoZG4pOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX3BlX2RuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCAqdG90YWwpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKworCS8qIEZvdW5kIG91ciBQRSBhbmQgYXNzdW1lIDggYXQgdGhhdCBwb2ludC4gKi8KKworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwlkbiA9IGZpbmRfZGV2aWNlX3BlKGRuKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFdlIGFjdHVhbGx5IHdhbnQgdGhlIHBhcmVudCAqLworCWRuID0gb2ZfZ2V0X3BhcmVudChkbik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBIYXJkY29kZSBvZiA4IGZvciBvbGQgZmlybXdhcmVzICovCisJKnRvdGFsID0gODsKKwlwcl9kZWJ1ZygicnRhc19tc2k6IHVzaW5nIFBFIGRuICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXJldHVybiBkbjsKK30KKworc3RydWN0IG1zaV9jb3VudHMgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVxdWVzdG9yOworCWludCBudW1fZGV2aWNlczsKKwlpbnQgcmVxdWVzdDsKKwlpbnQgcXVvdGE7CisJaW50IHNwYXJlOworCWludCBvdmVyX3F1b3RhOworfTsKKworc3RhdGljIHZvaWQgKmNvdW50X25vbl9icmlkZ2VfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtc2lfY291bnRzICpjb3VudHMgPSBkYXRhOworCWNvbnN0IHUzMiAqcDsKKwl1MzIgY2xhc3M7CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IGNvdW50aW5nICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJjbGFzcy1jb2RlIiwgTlVMTCk7CisJY2xhc3MgPSBwID8gKnAgOiAwOworCisJaWYgKChjbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKKwkJY291bnRzLT5udW1fZGV2aWNlcysrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjb3VudF9zcGFyZV9tc2lzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zaV9jb3VudHMgKmNvdW50cyA9IGRhdGE7CisJY29uc3QgdTMyICpwOworCWludCByZXE7CisKKwlpZiAoZG4gPT0gY291bnRzLT5yZXF1ZXN0b3IpCisJCXJlcSA9IGNvdW50cy0+cmVxdWVzdDsKKwllbHNlIHsKKwkJLyogV2UgZG9uJ3Qga25vdyBpZiBhIGRyaXZlciB3aWxsIHRyeSB0byB1c2UgTVNJIG9yIE1TSS1YLAorCQkgKiBzbyB3ZSBqdXN0IGhhdmUgdG8gcHVudCBhbmQgdXNlIHRoZSBsYXJnZXIgb2YgdGhlIHR3by4gKi8KKwkJcmVxID0gMDsKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpIiwgTlVMTCk7CisJCWlmIChwKQorCQkJcmVxID0gKnA7CisKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpLXgiLCBOVUxMKTsKKwkJaWYgKHApCisJCQlyZXEgPSBtYXgocmVxLCAoaW50KSpwKTsKKwl9CisKKwlpZiAocmVxIDwgY291bnRzLT5xdW90YSkKKwkJY291bnRzLT5zcGFyZSArPSBjb3VudHMtPnF1b3RhIC0gcmVxOworCWVsc2UgaWYgKHJlcSA+IGNvdW50cy0+cXVvdGEpCisJCWNvdW50cy0+b3Zlcl9xdW90YSsrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXNpX3F1b3RhX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlcXVlc3QpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwZV9kbjsKKwlzdHJ1Y3QgbXNpX2NvdW50cyBjb3VudHM7CisJaW50IHRvdGFsOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiBjYWxjIHF1b3RhIGZvciAlcywgcmVxdWVzdCAlZFxuIiwgcGNpX25hbWUoZGV2KSwKKwkJICByZXF1ZXN0KTsKKworCXBlX2RuID0gZmluZF9wZV90b3RhbF9tc2koZGV2LCAmdG90YWwpOworCWlmICghcGVfZG4pCisJCXBlX2RuID0gZmluZF9wZV9kbihkZXYsICZ0b3RhbCk7CisKKwlpZiAoIXBlX2RuKSB7CisJCXByX2VycigicnRhc19tc2k6IGNvdWxkbid0IGZpbmQgUEUgZm9yICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfZGVidWcoInJ0YXNfbXNpOiBmb3VuZCBQRSAlc1xuIiwgcGVfZG4tPmZ1bGxfbmFtZSk7CisKKwltZW1zZXQoJmNvdW50cywgMCwgc2l6ZW9mKHN0cnVjdCBtc2lfY291bnRzKSk7CisKKwkvKiBXb3JrIG91dCBob3cgbWFueSBkZXZpY2VzIHdlIGhhdmUgYmVsb3cgdGhpcyBQRSAqLworCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBlX2RuLCBjb3VudF9ub25fYnJpZGdlX2RldmljZXMsICZjb3VudHMpOworCisJaWYgKGNvdW50cy5udW1fZGV2aWNlcyA9PSAwKSB7CisJCXByX2VycigicnRhc19tc2k6IGZvdW5kIDAgZGV2aWNlcyB1bmRlciBQRSBmb3IgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJY291bnRzLnF1b3RhID0gdG90YWwgLyBjb3VudHMubnVtX2RldmljZXM7CisJaWYgKHJlcXVlc3QgPD0gY291bnRzLnF1b3RhKQorCQlnb3RvIG91dDsKKworCS8qIGVsc2UsIHdlIGhhdmUgc29tZSBtb3JlIGNhbGN1bGF0aW5nIHRvIGRvICovCisJY291bnRzLnJlcXVlc3RvciA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCWNvdW50cy5yZXF1ZXN0ID0gcmVxdWVzdDsKKwl0cmF2ZXJzZV9wY2lfZGV2aWNlcyhwZV9kbiwgY291bnRfc3BhcmVfbXNpcywgJmNvdW50cyk7CisKKwkvKiBJZiB0aGUgcXVvdGEgaXNuJ3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgdG90YWwsIHdlIGNhbgorCSAqIHVzZSB0aGUgcmVtYWluZGVyIGFzIHNwYXJlIE1TSXMgZm9yIGFueW9uZSB0aGF0IHdhbnRzIHRoZW0uICovCisJY291bnRzLnNwYXJlICs9IHRvdGFsICUgY291bnRzLm51bV9kZXZpY2VzOworCisJLyogRGl2aWRlIGFueSBzcGFyZSBieSB0aGUgbnVtYmVyIG9mIG92ZXItcXVvdGEgcmVxdWVzdG9ycyAqLworCWlmIChjb3VudHMub3Zlcl9xdW90YSkKKwkJY291bnRzLnF1b3RhICs9IGNvdW50cy5zcGFyZSAvIGNvdW50cy5vdmVyX3F1b3RhOworCisJLyogQW5kIGZpbmFsbHkgY2xhbXAgdGhlIHJlcXVlc3QgdG8gdGhlIHBvc3NpYmx5IGFkanVzdGVkIHF1b3RhICovCisJcmVxdWVzdCA9IG1pbihjb3VudHMucXVvdGEsIHJlcXVlc3QpOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiByZXF1ZXN0IGNsYW1wZWQgdG8gcXVvdGEgJWRcbiIsIHJlcXVlc3QpOworb3V0OgorCW9mX25vZGVfcHV0KHBlX2RuKTsKKworCXJldHVybiByZXF1ZXN0OworfQorCiBzdGF0aWMgaW50IHJ0YXNfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKLQkJcHJfZGVidWcoInJ0YXNfbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOworCWludCBxdW90YSwgcmM7CiAKLQlyZXR1cm4gY2hlY2tfcmVxX21zaShwZGV2LCBudmVjKTsKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpCisJCXJjID0gY2hlY2tfcmVxX21zaXgocGRldiwgbnZlYyk7CisJZWxzZQorCQlyYyA9IGNoZWNrX3JlcV9tc2kocGRldiwgbnZlYyk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXF1b3RhID0gbXNpX3F1b3RhX2Zvcl9kZXZpY2UocGRldiwgbnZlYyk7CisKKwlpZiAocXVvdGEgJiYgcXVvdGEgPCBudmVjKQorCQlyZXR1cm4gcXVvdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19tc2l4X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlpbnQgZXhwZWN0ZWQ7CisKKwkvKiBUaGVyZSdzIG5vIHdheSBmb3IgdXMgdG8gZXhwcmVzcyB0byBmaXJtd2FyZSB0aGF0IHdlIHdhbnQKKwkgKiBhIGRpc2NvbnRpZ3VvdXMsIG9yIG5vbi16ZXJvIGJhc2VkLCByYW5nZSBvZiBNU0ktWCBlbnRyaWVzLgorCSAqIFNvIHdlIG11c3QgcmVqZWN0IHN1Y2ggcmVxdWVzdHMuICovCisKKwlleHBlY3RlZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAhPSBleHBlY3RlZCkgeworCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBiYWQgTVNJLVggZW50cmllcy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZXhwZWN0ZWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGFzX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCkBAIC0xNzcsNiArMzg4LDkgQEAKIAlpZiAoIXBkbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVggJiYgY2hlY2tfbXNpeF9lbnRyaWVzKHBkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogVHJ5IHRoZSBuZXcgbW9yZSBleHBsaWNpdCBmaXJtd2FyZSBpbnRlcmZhY2UsIGlmIHRoYXQgZmFpbHMgZmFsbAogCSAqIGJhY2sgdG8gdGhlIG9sZCBpbnRlcmZhY2UuIFRoZSBvbGQgaW50ZXJmYWNlIGlzIGtub3duIHRvIG5ldmVyCkBAIC0xODUsMjEgKzM5OSwyMSBAQAogCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJKSB7CiAJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfTVNJX0ZOLCBudmVjKTsKIAotCQlpZiAocmMpIHsKKwkJaWYgKHJjIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiB0cnlpbmcgdGhlIG9sZCBmaXJtd2FyZSBjYWxsLlxuIik7CiAJCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX0ZOLCBudmVjKTsKIAkJfQogCX0gZWxzZQogCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX01TSVhfRk4sIG52ZWMpOwogCi0JaWYgKHJjKSB7CisJaWYgKHJjICE9IG52ZWMpIHsKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBydGFzX2NoYW5nZV9tc2koKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJaSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSk7CisJCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSsrKTsKIAkJaWYgKGh3aXJxIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBlcnJvciAoJWQpIGdldHRpbmcgaHdpcnFcbiIsIHJjKTsKIAkJCXJldHVybiBod2lycTsKQEAgLTIzNCw4ICs0NDgsOCBAQAogCX0KIAogCS8qIE5vIE1TSSAtPiBNU0lzIGNhbid0IGhhdmUgYmVlbiBhc3NpZ25lZCBieSBmdywgbGVhdmUgTFNJICovCi0JaWYgKGNoZWNrX3JlcV9tc2kocGRldiwgMSkpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicnRhc19tc2k6IG5vIHJlcSNtc2ksIG5vdGhpbmcgdG8gZG8uXG4iKTsKKwlpZiAoY2hlY2tfcmVxX21zaShwZGV2LCAxKSAmJiBjaGVja19yZXFfbXNpeChwZGV2LCAxKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogbm8gcmVxI21zaS94LCBub3RoaW5nIHRvIGRvLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwppbmRleCA1ZTFlZDNkLi5hZDE1MmEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCkBAIC0xMzcsMTEgKzEzNyw5IEBACiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBfX2RldmluaXQgaW5pdF9waGJfZHluYW1pYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwotCWludCBwcmltYXJ5OwogCiAJcHJfZGVidWcoIlBDSTogSW5pdGlhbGl6aW5nIG5ldyBob3RwbHVnIFBIQiAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CiAKLQlwcmltYXJ5ID0gbGlzdF9lbXB0eSgmaG9zZV9saXN0KTsKIAlwaGIgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZG4pOwogCWlmICghcGhiKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggZDk2N2MxOC4uYTI0YTZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCkBAIC00Myw2ICs0MywxNiBAQAogCXJldHVybiB2cGFfY2FsbCgweDMsIGNwdSwgdnBhKTsKIH0KIAorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfZHRsKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBsb25nIHZwYSkKK3sKKwlyZXR1cm4gdnBhX2NhbGwoMHg2LCBjcHUsIHZwYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByZWdpc3Rlcl9kdGwodW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQoreworCXJldHVybiB2cGFfY2FsbCgweDIsIGNwdSwgdnBhKTsKK30KKwogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3BhZ2Vfc2V0X2xvYW5lZCh1bnNpZ25lZCBsb25nIHZwYSkKIHsKIAl1bnNpZ25lZCBsb25nIGNtb19wYWdlX3N6ID0gY21vX2dldF9wYWdlX3NpemUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggYzU5MWEyNS4uYjZmMWIxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQ2OCw5ICs0NjgsMTMgQEAKIAogCQlyYyA9IGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBTZXJpZXNfcmVjb25maWdfY2hhaW4sCiAJCQkJCQkgIGFjdGlvbiwgdmFsdWUpOworCQlpZiAocmMgPT0gTk9USUZZX0JBRCkgeworCQkJcmMgPSBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShucCwgb2xkcHJvcCwgbmV3cHJvcCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTEuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCmluZGV4IDQ5MDQ3M2MuLjgyNDI0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMS5jCkBAIC0xMTksNyArMTE5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gY3BtX2Vycm9yX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGNwbV9lcnJvcl9pbnRlcnJ1cHQsCi0JLm1hc2sgPSBDUFVfTUFTS19OT05FLAogCS5uYW1lID0gImVycm9yIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKaW5kZXggZjFjMzM5NS4uZmQ5NjlmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yLmMKQEAgLTUyLDYgKzUyLDcgQEAKICAqIHRoZSBjb21tdW5pY2F0aW9uIHByb2Nlc3NvciBkZXZpY2VzLgogICovCiBjcG0yX21hcF90IF9faW9tZW0gKmNwbTJfaW1tcjsKK0VYUE9SVF9TWU1CT0woY3BtMl9pbW1yKTsKIAogI2RlZmluZSBDUE1fTUFQX1NJWkUJKDB4NDAwMDApCS8qIDI1NmsgLSB0aGUgUFEzIHJlc2VydmUgdGhpcyBhbW91bnQKIAkJCQkJICAgb2Ygc3BhY2UgZm9yIENQTSBhcyBpdCBpcyBsYXJnZXIKQEAgLTEyOSw3ICsxMzAsOCBAQAogCQlicmcgLT0gNDsKIAl9CiAJYnAgKz0gYnJnOwotCXZhbCA9ICgoKGNsayAvIHJhdGUpIC0gMSkgPDwgMSkgfCBDUE1fQlJHX0VOIHwgc3JjOworCS8qIFJvdW5kIHRoZSBjbG9jayBkaXZpZGVyIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuICovCisJdmFsID0gKCgoY2xrICogMiAvIHJhdGUpIC0gMSkgJiB+MSkgfCBDUE1fQlJHX0VOIHwgc3JjOwogCWlmIChkaXYxNikKIAkJdmFsIHw9IENQTV9CUkdfRElWMTY7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMKaW5kZXggMDBkM2QxNy4uZTRiNmQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHsKIAlpZiAoY3BtX3VkYmdfdHhkZXNjKSB7CiAjaWZkZWYgQ09ORklHX0NQTTIKLQkJc2V0YmF0KDEsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDEwMjQqMTAyNCwgX1BBR0VfSU8pOworCQlzZXRiYXQoMSwgMHhmMDAwMDAwMCwgMHhmMDAwMDAwMCwgMTAyNCoxMDI0LCBQQUdFX0tFUk5FTF9OQ0cpOwogI2VuZGlmCiAJCXVkYmdfcHV0YyA9IHVkYmdfcHV0Y19jcG07CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwppbmRleCA5ODE3ZjYzLi43ODAyMWQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9wY2kuYwpAQCAtMSwxMiArMSwxNiBAQAogLyoKICAqIE1QQzgzeHgvODV4eC84Nnh4IFBDSS9QQ0lFIHN1cHBvcnQgcm91dGluZy4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNywyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIEluaXRpYWwgYXV0aG9yOiBYaWFuZ2h1YSBYaWFvIDx4LnhpYW9AZnJlZXNjYWxlLmNvbT4KICAqIFJlY29kZTogWkhBTkcgV0VJIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KICAqIFJld3JpdGUgdGhlIHJvdXRpbmcgZm9yIEZyZXNjYWxlIFBDSSBhbmQgUENJIEV4cHJlc3MKICAqIAlSb3kgWmFuZyA8dGllLWZlaS56YW5nQGZyZWVzY2FsZS5jb20+CisgKiBNUEM4M3h4IFBDSS1FeHByZXNzIHN1cHBvcnQ6CisgKiAJVG9ueSBMaSA8dG9ueS5saUBmcmVlc2NhbGUuY29tPgorICogCUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0yNyw2ICszMSwyOSBAQAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KIAorc3RhdGljIGludCBmc2xfcGNpZV9idXNfZml4dXA7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxdWlya19mc2xfcGNpZV9oZWFkZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKiBpZiB3ZSBhcmVuJ3QgYSBQQ0llIGRvbid0IGJvdGhlciAqLworCWlmICghcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKSkKKwkJcmV0dXJuOworCisJZGV2LT5jbGFzcyA9IFBDSV9DTEFTU19CUklER0VfUENJIDw8IDg7CisJZnNsX3BjaWVfYnVzX2ZpeHVwID0gMTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGZzbF9wY2llX2NoZWNrX2xpbmsoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworCXUzMiB2YWw7CisKKwllYXJseV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCAwLCAwLCBQQ0lFX0xUU1NNLCAmdmFsKTsKKwlpZiAodmFsIDwgUENJRV9MVFNTTV9MMCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19QUENfODV4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDXzg2eHgpCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9vbmVfYXRtdShzdHJ1Y3QgY2Nzcl9wY2kgX19pb21lbSAqcGNpLAogCXVuc2lnbmVkIGludCBpbmRleCwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCkBAIC0xNTksMjggKzE4Niw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBmc2xfcGNpZV9idXNfZml4dXA7Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBxdWlya19mc2xfcGNpZV9oZWFkZXIoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQkvKiBpZiB3ZSBhcmVuJ3QgYSBQQ0llIGRvbid0IGJvdGhlciAqLwotCWlmICghcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKSkKLQkJcmV0dXJuIDsKLQotCWRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4OwotCWZzbF9wY2llX2J1c19maXh1cCA9IDE7Ci0JcmV0dXJuIDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgZnNsX3BjaWVfY2hlY2tfbGluayhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdTMyIHZhbDsKLQllYXJseV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCAwLCAwLCBQQ0lFX0xUU1NNLCAmdmFsKTsKLQlpZiAodmFsIDwgUENJRV9MVFNTTV9MMCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgZnNsX3BjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKSBidXMtPnN5c2RhdGE7CkBAIC0yOTQsOCArMjk5LDE4NCBAQAogI2VuZGlmIC8qIENPTkZJR19QUENfODV4eCB8fCBDT05GSUdfUFBDXzg2eHggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX1BQQ184M3h4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfTVBDNTEyeCkKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNEUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTQsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTVFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE1LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4Mzc3RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODM3NywgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODM3OEUsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzgsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CisKK3N0cnVjdCBtcGM4M3h4X3BjaWVfcHJpdiB7CisJdm9pZCBfX2lvbWVtICpjZmdfdHlwZTA7CisJdm9pZCBfX2lvbWVtICpjZmdfdHlwZTE7CisJdTMyIGRldl9iYXNlOworfTsKKworLyoKKyAqIFdpdGggdGhlIGNvbnZlbnRpb24gb2YgdS1ib290LCB0aGUgUENJRSBvdXRib3VuZCB3aW5kb3cgMCBzZXJ2ZXMKKyAqIGFzIGNvbmZpZ3VyYXRpb24gdHJhbnNhY3Rpb25zIG91dGJvdW5kLgorICovCisjZGVmaW5lIFBFWF9PVVRXSU4wX0JBUgkJMHhDQTQKKyNkZWZpbmUgUEVYX09VVFdJTjBfVEFMCQkweENBOAorI2RlZmluZSBQRVhfT1VUV0lOMF9UQUgJCTB4Q0FDCisKK3N0YXRpYyBpbnQgbXBjODN4eF9wY2llX2V4Y2x1ZGVfZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbikKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBidXMtPnN5c2RhdGE7CisKKwlpZiAoaG9zZS0+aW5kaXJlY3RfdHlwZSAmIFBQQ19JTkRJUkVDVF9UWVBFX05PX1BDSUVfTElOSykKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIHRoZSBIVyBidWc6IGZvciBUeXBlIDAgY29uZmlndXJlIHRyYW5zYWN0aW9ucyB0aGUKKwkgKiBQQ0ktRSBjb250cm9sbGVyIGRvZXMgbm90IGNoZWNrIHRoZSBkZXZpY2UgbnVtYmVyIGJpdHMgYW5kIGp1c3QKKwkgKiBhc3N1bWVzIHRoYXQgdGhlIGRldmljZSBudW1iZXIgYml0cyBhcmUgMC4KKwkgKi8KKwlpZiAoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8gfHwKKwkJCWJ1cy0+cHJpbWFyeSA9PSBob3NlLT5maXJzdF9idXNubykgeworCQlpZiAoZGV2Zm4gJiAweGY4KQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9CisKKwlpZiAocHBjX21kLnBjaV9leGNsdWRlX2RldmljZSkgeworCQlpZiAocHBjX21kLnBjaV9leGNsdWRlX2RldmljZShob3NlLCBidXMtPm51bWJlciwgZGV2Zm4pKQorCQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICptcGM4M3h4X3BjaWVfcmVtYXBfY2ZnKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBvZmZzZXQpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gYnVzLT5zeXNkYXRhOworCXN0cnVjdCBtcGM4M3h4X3BjaWVfcHJpdiAqcGNpZSA9IGhvc2UtPmRuLT5kYXRhOworCXU4IGJ1c19ubyA9IGJ1cy0+bnVtYmVyIC0gaG9zZS0+Zmlyc3RfYnVzbm87CisJdTMyIGRldl9iYXNlID0gYnVzX25vIDw8IDI0IHwgZGV2Zm4gPDwgMTY7CisJaW50IHJldDsKKworCXJldCA9IG1wYzgzeHhfcGNpZV9leGNsdWRlX2RldmljZShidXMsIGRldmZuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKworCW9mZnNldCAmPSAweGZmZjsKKworCS8qIFR5cGUgMCAqLworCWlmIChidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubykKKwkJcmV0dXJuIHBjaWUtPmNmZ190eXBlMCArIG9mZnNldDsKKworCWlmIChwY2llLT5kZXZfYmFzZSA9PSBkZXZfYmFzZSkKKwkJZ290byBtYXBwZWQ7CisKKwlvdXRfbGUzMihwY2llLT5jZmdfdHlwZTAgKyBQRVhfT1VUV0lOMF9UQUwsIGRldl9iYXNlKTsKKworCXBjaWUtPmRldl9iYXNlID0gZGV2X2Jhc2U7CittYXBwZWQ6CisJcmV0dXJuIHBjaWUtPmNmZ190eXBlMSArIG9mZnNldDsKK30KKworc3RhdGljIGludCBtcGM4M3h4X3BjaWVfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmNmZ19hZGRyOworCisJY2ZnX2FkZHIgPSBtcGM4M3h4X3BjaWVfcmVtYXBfY2ZnKGJ1cywgZGV2Zm4sIG9mZnNldCk7CisJaWYgKCFjZmdfYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQkqdmFsID0gaW5fOChjZmdfYWRkcik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnZhbCA9IGluX2xlMTYoY2ZnX2FkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqdmFsID0gaW5fbGUzMihjZmdfYWRkcik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9wY2llX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqY2ZnX2FkZHI7CisKKwljZmdfYWRkciA9IG1wYzgzeHhfcGNpZV9yZW1hcF9jZmcoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKKwlpZiAoIWNmZ19hZGRyKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCW91dF84KGNmZ19hZGRyLCB2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCW91dF9sZTE2KGNmZ19hZGRyLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvdXRfbGUzMihjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIG1wYzgzeHhfcGNpZV9vcHMgPSB7CisJLnJlYWQgPSBtcGM4M3h4X3BjaWVfcmVhZF9jb25maWcsCisJLndyaXRlID0gbXBjODN4eF9wY2llX3dyaXRlX2NvbmZpZywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzgzeHhfcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlZykKK3sKKwlzdHJ1Y3QgbXBjODN4eF9wY2llX3ByaXYgKnBjaWU7CisJdTMyIGNmZ19iYXI7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlwY2llID0gemFsbG9jX21heWJlX2Jvb3RtZW0oc2l6ZW9mKCpwY2llKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY2llKQorCQlyZXR1cm4gcmV0OworCisJcGNpZS0+Y2ZnX3R5cGUwID0gaW9yZW1hcChyZWctPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZykpOworCWlmICghcGNpZS0+Y2ZnX3R5cGUwKQorCQlnb3RvIGVycjA7CisKKwljZmdfYmFyID0gaW5fbGUzMihwY2llLT5jZmdfdHlwZTAgKyBQRVhfT1VUV0lOMF9CQVIpOworCWlmICghY2ZnX2JhcikgeworCQkvKiBQQ0ktRSBpc24ndCBjb25maWd1cmVkLiAqLworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjE7CisJfQorCisJcGNpZS0+Y2ZnX3R5cGUxID0gaW9yZW1hcChjZmdfYmFyLCAweDEwMDApOworCWlmICghcGNpZS0+Y2ZnX3R5cGUxKQorCQlnb3RvIGVycjE7CisKKwlXQVJOX09OKGhvc2UtPmRuLT5kYXRhKTsKKwlob3NlLT5kbi0+ZGF0YSA9IHBjaWU7CisJaG9zZS0+b3BzID0gJm1wYzgzeHhfcGNpZV9vcHM7CisKKwlvdXRfbGUzMihwY2llLT5jZmdfdHlwZTAgKyBQRVhfT1VUV0lOMF9UQUgsIDApOworCW91dF9sZTMyKHBjaWUtPmNmZ190eXBlMCArIFBFWF9PVVRXSU4wX1RBTCwgMCk7CisKKwlpZiAoZnNsX3BjaWVfY2hlY2tfbGluayhob3NlKSkKKwkJaG9zZS0+aW5kaXJlY3RfdHlwZSB8PSBQUENfSU5ESVJFQ1RfVFlQRV9OT19QQ0lFX0xJTks7CisKKwlyZXR1cm4gMDsKK2VycjE6CisJaW91bm1hcChwY2llLT5jZmdfdHlwZTApOworZXJyMDoKKwlrZnJlZShwY2llKTsKKwlyZXR1cm4gcmV0OworCit9CisKIGludCBfX2luaXQgbXBjODN4eF9hZGRfYnJpZGdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogeworCWludCByZXQ7CiAJaW50IGxlbjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CiAJc3RydWN0IHJlc291cmNlIHJzcmNfcmVnOwpAQCAtMzAzLDYgKzQ4NCwxMSBAQAogCWNvbnN0IGludCAqYnVzX3JhbmdlOwogCWludCBwcmltYXJ5OwogCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGRldikpIHsKKwkJcHJfd2FybmluZygiJXM6IGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS5cbiIsCisJCQkgICBkZXYtPmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAlwcl9kZWJ1ZygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwogCiAJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KQEAgLTM1MCw3ICs1MzYsMTQgQEAKIAlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CiAJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CiAKLQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyY19jZmcuc3RhcnQsIHJzcmNfY2ZnLnN0YXJ0ICsgNCwgMCk7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRldiwgImZzbCxtcGM4MzE0LXBjaWUiKSkgeworCQlyZXQgPSBtcGM4M3h4X3BjaWVfc2V0dXAoaG9zZSwgJnJzcmNfcmVnKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyMDsKKwl9IGVsc2UgeworCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgcnNyY19jZmcuc3RhcnQsCisJCQkJICAgcnNyY19jZmcuc3RhcnQgKyA0LCAwKTsKKwl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBGU0wgUENJIGhvc3QgYnJpZGdlIGF0IDB4JTAxNmxseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLApAQCAtMzY1LDUgKzU1OCw4IEBACiAJcGNpX3Byb2Nlc3NfYnJpZGdlX09GX3Jhbmdlcyhob3NlLCBkZXYsIHByaW1hcnkpOwogCiAJcmV0dXJuIDA7CitlcnIwOgorCXBjaWJpb3NfZnJlZV9jb250cm9sbGVyKGhvc2UpOworCXJldHVybiByZXQ7CiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ184M3h4ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IDExNWNiMTYuLmFmZThkYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgpAQCAtMzI4LDYgKzMyOSw5IEBACiAJCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9kYXRhOwogCQljb25zdCB1bnNpZ25lZCBjaGFyICpwcm9wID0gTlVMTDsKIAorCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQkJY29udGludWU7CisKIAkJbWVtc2V0KCZyLCAwLCBzaXplb2YocikpOwogCQltZW1zZXQoJnVzYl9kYXRhLCAwLCBzaXplb2YodXNiX2RhdGEpKTsKIApAQCAtNDEzLDExNSArNDE3LDYgQEAKIAogYXJjaF9pbml0Y2FsbChmc2xfdXNiX29mX2luaXQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBvZl9mc2xfc3BpX3Byb2JlKGNoYXIgKnR5cGUsIGNoYXIgKmNvbXBhdGlibGUsIHUzMiBzeXNjbGssCi0JCQkJICAgc3RydWN0IHNwaV9ib2FyZF9pbmZvICpib2FyZF9pbmZvcywKLQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkX2luZm9zLAotCQkJCSAgIHZvaWQgKCphY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KSwKLQkJCQkgICB2b2lkICgqZGVhY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KSkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXVuc2lnbmVkIGludCBpID0gMDsKLQotCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgdHlwZSwgY29tcGF0aWJsZSkgewotCQlpbnQgcmV0OwotCQl1bnNpZ25lZCBpbnQgajsKLQkJY29uc3Qgdm9pZCAqcHJvcDsKLQkJc3RydWN0IHJlc291cmNlIHJlc1syXTsKLQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQkJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSBwZGF0YSA9IHsKLQkJCS5hY3RpdmF0ZV9jcyA9IGFjdGl2YXRlX2NzLAotCQkJLmRlYWN0aXZhdGVfY3MgPSBkZWFjdGl2YXRlX2NzLAotCQl9OwotCi0JCW1lbXNldChyZXMsIDAsIHNpemVvZihyZXMpKTsKLQotCQlwZGF0YS5zeXNjbGsgPSBzeXNjbGs7Ci0KLQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCQlpZiAoIXByb3ApCi0JCQlnb3RvIGVycjsKLQkJcGRhdGEuYnVzX251bSA9ICoodTMyICopcHJvcDsKLQotCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOwotCQlpZiAocHJvcCkKLQkJCWkgPSAqKHUzMiAqKXByb3A7Ci0KLQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKLQkJaWYgKHByb3AgJiYgIXN0cmNtcChwcm9wLCAiY3B1LXFlIikpCi0JCQlwZGF0YS5xZV9tb2RlID0gMTsKLQotCQlmb3IgKGogPSAwOyBqIDwgbnVtX2JvYXJkX2luZm9zOyBqKyspIHsKLQkJCWlmIChib2FyZF9pbmZvc1tqXS5idXNfbnVtID09IHBkYXRhLmJ1c19udW0pCi0JCQkJcGRhdGEubWF4X2NoaXBzZWxlY3QrKzsKLQkJfQotCi0JCWlmICghcGRhdGEubWF4X2NoaXBzZWxlY3QpCi0JCQljb250aW51ZTsKLQotCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzWzBdKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyOwotCi0JCXJldCA9IG9mX2lycV90b19yZXNvdXJjZShucCwgMCwgJnJlc1sxXSk7Ci0JCWlmIChyZXQgPT0gTk9fSVJRKQotCQkJZ290byBlcnI7Ci0KLQkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibXBjODN4eF9zcGkiLCBpKTsKLQkJaWYgKCFwZGV2KQotCQkJZ290byBlcnI7Ci0KLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZwZGF0YSwgc2l6ZW9mKHBkYXRhKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHVucmVnOwotCi0JCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywKLQkJCQkJCSAgICBBUlJBWV9TSVpFKHJlcykpOwotCQlpZiAocmV0KQotCQkJZ290byB1bnJlZzsKLQotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCQlpZiAocmV0KQotCQkJZ290byB1bnJlZzsKLQotCQlnb3RvIG5leHQ7Ci11bnJlZzoKLQkJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsKLWVycjoKLQkJcHJfZXJyKCIlczogcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgbnAtPmZ1bGxfbmFtZSk7Ci1uZXh0OgotCQlpKys7Ci0JfQotCi0JcmV0dXJuIGk7Ci19Ci0KLWludCBfX2luaXQgZnNsX3NwaV9pbml0KHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYm9hcmRfaW5mb3MsCi0JCQl1bnNpZ25lZCBpbnQgbnVtX2JvYXJkX2luZm9zLAotCQkJdm9pZCAoKmFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpLAotCQkJdm9pZCAoKmRlYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSkpCi17Ci0JdTMyIHN5c2NsayA9IC0xOwotCWludCByZXQ7Ci0KLSNpZmRlZiBDT05GSUdfUVVJQ0NfRU5HSU5FCi0JLyogU1BJIGNvbnRyb2xsZXIgaXMgZWl0aGVyIGNsb2NrZWQgZnJvbSBRRSBvciBTb0MgY2xvY2sgKi8KLQlzeXNjbGsgPSBnZXRfYnJnZnJlcSgpOwotI2VuZGlmCi0JaWYgKHN5c2NsayA9PSAtMSkgewotCQlzeXNjbGsgPSBmc2xfZ2V0X3N5c19mcmVxKCk7Ci0JCWlmIChzeXNjbGsgPT0gLTEpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXQgPSBvZl9mc2xfc3BpX3Byb2JlKE5VTEwsICJmc2wsc3BpIiwgc3lzY2xrLCBib2FyZF9pbmZvcywKLQkJCSAgICAgICBudW1fYm9hcmRfaW5mb3MsIGFjdGl2YXRlX2NzLCBkZWFjdGl2YXRlX2NzKTsKLQlpZiAoIXJldCkKLQkJb2ZfZnNsX3NwaV9wcm9iZSgic3BpIiwgImZzbF9zcGkiLCBzeXNjbGssIGJvYXJkX2luZm9zLAotCQkJCSBudW1fYm9hcmRfaW5mb3MsIGFjdGl2YXRlX2NzLCBkZWFjdGl2YXRlX2NzKTsKLQotCXJldHVybiBzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhib2FyZF9pbmZvcywgbnVtX2JvYXJkX2luZm9zKTsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1BQQ184NXh4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfODZ4eCkKIHN0YXRpYyBfX2JlMzIgX19pb21lbSAqcnN0Y3I7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5oIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKaW5kZXggOWM3NDRlNC4uNDIzODFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmgKQEAgLTQsNiArNCw4IEBACiAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKK3N0cnVjdCBzcGlfZGV2aWNlOworCiBleHRlcm4gcGh5c19hZGRyX3QgZ2V0X2ltbXJiYXNlKHZvaWQpOwogI2lmIGRlZmluZWQoQ09ORklHX0NQTTIpIHx8IGRlZmluZWQoQ09ORklHX1FVSUNDX0VOR0lORSkgfHwgZGVmaW5lZChDT05GSUdfOHh4KQogZXh0ZXJuIHUzMiBnZXRfYnJnZnJlcSh2b2lkKTsKQEAgLTE3LDExICsxOSw2IEBACiBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm87CiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiAKLWV4dGVybiBpbnQgZnNsX3NwaV9pbml0KHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYm9hcmRfaW5mb3MsCi0JCQl1bnNpZ25lZCBpbnQgbnVtX2JvYXJkX2luZm9zLAotCQkJdm9pZCAoKmFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpLAotCQkJdm9pZCAoKmRlYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSkpOwotCiBleHRlcm4gdm9pZCBmc2xfcnN0Y3JfcmVzdGFydChjaGFyICpjbWQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVSkgfHwgZGVmaW5lZChDT05GSUdfRkJfRlNMX0RJVV9NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCmluZGV4IDlhODljZDMuLmE4NmQzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC01NjgsOCArNTY4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKIAotCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrKTsKLQl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCXRlbXAgPSAxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2ssIHRlbXApOwogCiAJLyogbWIoKSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhY2sgaXMgZmluaXNoZWQuICBCdXQgaXQgZG9lcyBmaW5pc2gKQEAgLTU5Miw4ICs1OTEsNyBAQAogCXRlbXAgJj0gfigxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7CiAKLQl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjayk7Ci0JdGVtcCB8PSAoMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpKTsKKwl0ZW1wID0gMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrLCB0ZW1wKTsKIAogCS8qIG1iKCkgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgYWNrIGlzIGZpbmlzaGVkLiAgQnV0IGl0IGRvZXMgZmluaXNoCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21zaV9iaXRtYXAuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCmluZGV4IGY4NDIxN2IuLjVhMzJjYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICNkZWZpbmUgY2hlY2soeCkJXAogCWlmICghKHgpKSBwcmludGsoIm1zaV9iaXRtYXA6IHRlc3QgZmFpbGVkIGF0IGxpbmUgJWRcbiIsIF9fTElORV9fKTsKIAotdm9pZCB0ZXN0X2Jhc2ljcyh2b2lkKQordm9pZCBfX2luaXQgdGVzdF9iYXNpY3Modm9pZCkKIHsKIAlzdHJ1Y3QgbXNpX2JpdG1hcCBibXA7CiAJaW50IGksIHNpemUgPSA1MTI7CkBAIC0xODYsNyArMTg2LDcgQEAKIAlrZnJlZShibXAuYml0bWFwKTsKIH0KIAotdm9pZCB0ZXN0X29mX25vZGUodm9pZCkKK3ZvaWQgX19pbml0IHRlc3Rfb2Zfbm9kZSh2b2lkKQogewogCXUzMiBwcm9wX2RhdGFbXSA9IHsgMTAsIDEwLCAyNSwgMywgNDAsIDEsIDEwMCwgMTAwLCAyMDAsIDIwIH07CiAJY29uc3QgY2hhciAqZXhwZWN0ZWRfc3RyID0gIjAtOSwyMC0yNCwyOC0zOSw0MS05OSwyMjAtMjU1IjsKQEAgLTIzNCw3ICsyMzQsNyBAQAogCWtmcmVlKGJtcC5iaXRtYXApOwogfQogCi1pbnQgbXNpX2JpdG1hcF9zZWxmdGVzdCh2b2lkKQoraW50IF9faW5pdCBtc2lfYml0bWFwX3NlbGZ0ZXN0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIlJ1bm5pbmcgTVNJIGJpdG1hcCBzZWxmLXRlc3RzIC4uLlxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jCmluZGV4IGM4NTg3NDkuLmFhYTkxNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYwpAQCAtNTAsNyArNTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBtaV9kYXRhICpkYXRhOwogCi1zdGF0aWMgaW50IHBtaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgcG1pX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAl1OCB0eXBlOwogCWludCByYzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKaW5kZXggNTU1OGQ5My4uNmEyZDQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMKQEAgLTE4MzksNiArMTgzOSw4IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAorCXBwY19wY2lfZmxhZ3MgfD0gUFBDX1BDSV9FTkFCTEVfUFJPQ19ET01BSU5TIHwgUFBDX1BDSV9DT01QQVRfRE9NQUlOXzA7CisKICNpZmRlZiBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiaWJtLHBsYi1wY2lleCIpCiAJCXBwYzR4eF9wcm9iZV9wY2lleF9icmlkZ2UobnApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCAyYThhZjVlLi5kY2I2NjdjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNzIsNiArNzIsOSBAQAogY29uZmlnIFZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQworCWRlZl9ib29sIHkKKwogbWFpbm1lbnUgIkxpbnV4IEtlcm5lbCBDb25maWd1cmF0aW9uIgogCiBjb25maWcgUzM5MApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwppbmRleCA0NTk5ZmEwLi4yMjgzOTMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZwpAQCAtNiwxMiArNiw0IEBACiAKIHNvdXJjZSAibGliL0tjb25maWcuZGVidWciCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCWhlbHAKLQkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCi0JICBUaGlzIHJlc3VsdHMgaW4gYSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZgotCSAgbWVtb3J5IGNvcnJ1cHRpb25zLgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCBiMWU4OTJhLi43MDRkZDM5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTEyLDYgKzEyLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaAppbmRleCA2ZGNjYjA3Li42MTliZjk0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCkBAIC00NTYsNiArNDU2LDggQEAKICNkZWZpbmUgQ0lPX09QRVIgICAgICAgMHgwMDA0CiAvKiBTaWNrIHJldmFsaWRhdGlvbiBvZiBkZXZpY2UuICovCiAjZGVmaW5lIENJT19SRVZBTElEQVRFIDB4MDAwOAorLyogRGV2aWNlIGRpZCBub3QgcmVzcG9uZCBpbiB0aW1lLiAqLworI2RlZmluZSBDSU9fQk9YRUQgICAgICAweDAwMTAKIAogLyoqCiAgKiBzdHJ1Y3QgY2N3X2Rldl9pZCAtIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBjY3cgZGV2aWNlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBkZjg0YWU5Li5mMzg2MWIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTcyLDYgKzE3Miw5IEBACiAJcmV0dXJuIF9yYXdfd3JpdGVfdHJ5bG9ja19yZXRyeShydyk7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjQ4ZTk2MS4uYTNhY2Q4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogewogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIG5ld19zdGFja3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCmluZGV4IGE2NGUzODguLmUyNzY1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwpAQCAtMzEwLDcgKzMxMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHNoX21vYmlsZV9jZXVfaW5mbyA9IHsKIAkuZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8Ci0JU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCwKKwlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfAorCVNPQ0FNX0RBVEFXSURUSF84LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZXVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggYmMzNWI0Yy4uNGZkNmE3MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtMzUyLDggKzM1Miw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHNoX21vYmlsZV9jZXVfaW5mbyA9IHsKLQkuZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyBcCi0JfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdILAorCS5mbGFncyA9IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HCisJfCBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdICisJfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdILAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaWdvcl9jZXVfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZTc5MzE4MS4uNjAyODM1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjE2LDYgKzIxNiw5IEBACiAJcmV0dXJuIChvbGR2YWwgPiAoUldfTE9DS19CSUFTIC0gMSkpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAwNjZmMGZiLi5hM2YyMzk1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0zMyw3ICszMyw2IEBACiAKICNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpCSgodm9pZClub2RlLCBjcHVfb25saW5lX21hcCkKICNkZWZpbmUgY3B1bWFza19vZl9ub2RlKG5vZGUpCSgodm9pZClub2RlLCBjcHVfb25saW5lX21hc2spCi0jZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpCSgodm9pZCkobm9kZSksMCkKIAogI2RlZmluZSBwY2lidXNfdG9fbm9kZShidXMpCSgodm9pZCkoYnVzKSwgLTEpCiAjZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyBcCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggZGRhZmJiYi4uNjk0YmMxNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYzkwYzdlNS4uOTZiZTgzOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggNTlkMmEwMy4uOTg4Yzc3YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfNjQuYwpAQCAtMjg0LDcgKzI4NCw2IEBACiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItY210LmMKaW5kZXggYzEyNzI5My4uOWFhMzQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLWNtdC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1jbXQuYwpAQCAtMTA5LDcgKzEwOSw2IEBACiAJLm5hbWUJCT0gInRpbWVyIiwKIAkuaGFuZGxlcgk9IGNtdF90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgdm9pZCBjbXRfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKaW5kZXggOWE3N2FlOC4uOWIwZWYwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCkBAIC0xMTUsNyArMTE1LDYgQEAKIAkubmFtZQkJPSAidGltZXIiLAogCS5oYW5kbGVyCT0gbXR1Ml90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRpdmlzb3JzW10gPSB7IDEsIDQsIDE2LCA2NCwgMSwgMSwgMjU2IH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMTBiNWE2Zi4uYzVkMzM5NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMTYyLDcgKzE2Miw2IEBACiAJLm5hbWUJCT0gInBlcmlvZGljL29uZXNob3QgdGltZXIiLAogCS5oYW5kbGVyCT0gdG11X3RpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLm1hc2sJCT0gQ1BVX01BU0tfTk9ORSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCB0bXVfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IGMzZWEyMTUuLmNjMTJjZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTEyNCw2ICsxMjQsOSBAQAogY29uZmlnIE9GCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKKwlkZWZfYm9vbCB5IGlmIFNQQVJDNjQKKwogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZwppbmRleCBiOGExNWUyLi45MGQ1ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCkBAIC0yMiwxNCArMjIsNiBAQAogY29uZmlnIFNUQUNLX0RFQlVHCiAJYm9vbCAiU3RhY2sgT3ZlcmZsb3cgRGV0ZWN0aW9uIFN1cHBvcnQiCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIFNQQVJDNjQgJiYgREVCVUdfS0VSTkVMICYmICFISUJFUk5BVElPTgotCWhlbHAKLQkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCi0JICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgotCiBjb25maWcgTUNPVU5UCiAJYm9vbAogCWRlcGVuZHMgb24gU1BBUkM2NApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF82NC5oCmluZGV4IDU2OTNhYjQuLjY2NmE3M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0XzY0LmgKQEAgLTEyMSw4ICsxMjEsOCBAQAogCSAqIGxvY2FsIFRMQi4KIAkgKi8KIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKCFjdHhfdmFsaWQgfHwgIWNwdV9pc3NldChjcHUsIG1tLT5jcHVfdm1fbWFzaykpIHsKLQkJY3B1X3NldChjcHUsIG1tLT5jcHVfdm1fbWFzayk7CisJaWYgKCFjdHhfdmFsaWQgfHwgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkpIHsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbW1fY3B1bWFzayhtbSkpOwogCQlfX2ZsdXNoX3RsYl9tbShDVFhfSFdCSVRTKG1tLT5jb250ZXh0KSwKIAkJCSAgICAgICBTRUNPTkRBUllfQ09OVEVYVCk7CiAJfQpAQCAtMTQxLDggKzE0MSw4IEBACiAJaWYgKCFDVFhfVkFMSUQobW0tPmNvbnRleHQpKQogCQlnZXRfbmV3X21tdV9jb250ZXh0KG1tKTsKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaWYgKCFjcHVfaXNzZXQoY3B1LCBtbS0+Y3B1X3ZtX21hc2spKQotCQljcHVfc2V0KGNwdSwgbW0tPmNwdV92bV9tYXNrKTsKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkpCisJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKTsKIAogCWxvYWRfc2Vjb25kYXJ5X2NvbnRleHQobW0pOwogCV9fZmx1c2hfdGxiX21tKENUWF9IV0JJVFMobW0tPmNvbnRleHQpLCBTRUNPTkRBUllfQ09OVEVYVCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NtcF82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zbXBfNjQuaAppbmRleCA1NzIyNGRkLi5iZWNiNmJmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NtcF82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc21wXzY0LmgKQEAgLTM1LDcgKzM1LDggQEAKIGV4dGVybiBpbnQgc3BhcmM2NF9tdWx0aV9jb3JlOwogCiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKK2V4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKKyNkZWZpbmUgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sKIAogLyoKICAqCUdlbmVyYWwgZnVuY3Rpb25zIHRoYXQgZWFjaCBob3N0IHN5c3RlbSBtdXN0IHByb3ZpZGUuCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKaW5kZXggYmYyZDUzMi4uNDZmOTFhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaApAQCAtMTc3LDYgKzE3Nyw4IEBACiAjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhydykJZG8geyAocncpLT5sb2NrID0gMDsgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhydywgZmxhZ3MpICAgX19yYXdfcmVhZF9sb2NrKHJ3KQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgIF9fcmF3X3dyaXRlX2xvY2socncpCiAKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCmluZGV4IGM0ZDI3NGQuLmY2YjJiOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKQEAgLTIxMSw5ICsyMTEsMTEgQEAKIH0KIAogI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socCkJX19yZWFkX2xvY2socCkKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHAsIGYpIF9fcmVhZF9sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhwKQlfX3JlYWRfdHJ5bG9jayhwKQogI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhwKQlfX3JlYWRfdW5sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socCkJX193cml0ZV9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocCwgZikgX193cml0ZV9sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhwKQlfX3dyaXRlX3VubG9jayhwKQogI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHApCV9fd3JpdGVfdHJ5bG9jayhwKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCA3OWMxYWUyLi43NTFjOGMxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkgZG8gewkJCQkJCVwKIAlTV0lUQ0hfRU5URVIocHJldik7CQkJCQkJCQlcCiAJU1dJVENIX0RPX0xBWllfRlBVKG5leHQpOwkJCQkJCQlcCi0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmFjdGl2ZV9tbS0+Y3B1X3ZtX21hc2spOwkJCVwKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG5leHQtPmFjdGl2ZV9tbSkpOwkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCQkJXAogCSJzZXRoaQklJWhpKGhlcmUgLSAweDgpLCAlJW83XG5cdCIJCQkJCQlcCiAJIm1vdgklJWc2LCAlJWczXG5cdCIJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaAppbmRleCA1YmMwYjhmLi5lNWVhOGQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RvcG9sb2d5XzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90b3BvbG9neV82NC5oCkBAIC0yOCwxMSArMjgsNiBAQAogI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodiwgbm9kZSkJXAogCQkJICAgdiA9ICYobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkKIAotc3RhdGljIGlubGluZSBpbnQgbm9kZV90b19maXJzdF9jcHUoaW50IG5vZGUpCi17Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3QoY3B1bWFza19vZl9ub2RlKG5vZGUpKTsKLX0KLQogc3RydWN0IHBjaV9idXM7CiAjaWZkZWYgQ09ORklHX1BDSQogZXh0ZXJuIGludCBwY2lidXNfdG9fbm9kZShzdHJ1Y3QgcGNpX2J1cyAqcGJ1cyk7CkBAIC00MywxMyArMzgsOSBAQAogfQogI2VuZGlmCiAKLSNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQlcCi0JKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyBcCi0JIENQVV9NQVNLX0FMTCA6IFwKLQkgbm9kZV90b19jcHVtYXNrKHBjaWJ1c190b19ub2RlKGJ1cykpKQogI2RlZmluZSBjcHVtYXNrX29mX3BjaWJ1cyhidXMpCVwKIAkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkgQ1BVX01BU0tfQUxMX1BUUiA6IFwKKwkgY3B1X2FsbF9tYXNrIDogXAogCSBjcHVtYXNrX29mX25vZGUocGNpYnVzX3RvX25vZGUoYnVzKSkpCiAKICNkZWZpbmUgU0RfTk9ERV9JTklUIChzdHJ1Y3Qgc2NoZWRfZG9tYWluKSB7CQlcCkBAIC04OSw3ICs4MCw2IEBACiAjZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkJKHNwYXJjNjRfbXVsdGlfY29yZSkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNkZWZpbmUgY3B1X2NvcmVncm91cF9tYXAoY3B1KQkJCShjcHVfY29yZV9tYXBbY3B1XSkKICNkZWZpbmUgY3B1X2NvcmVncm91cF9tYXNrKGNwdSkJCQkoJmNwdV9jb3JlX21hcFtjcHVdKQogCiAjZW5kaWYgLyogX0FTTV9TUEFSQzY0X1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2RzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jCmluZGV4IDU3YzM5ODQuLjkwMzUwZjgzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9kcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2RzLmMKQEAgLTY1Myw3ICs2NTMsNyBAQAogCQlpZiAoY3B1X2xpc3RbaV0gPT0gQ1BVX1NFTlRJTkVMKQogCQkJY29udGludWU7CiAKLQkJaWYgKGNwdV9saXN0W2ldIDwgTlJfQ1BVUykKKwkJaWYgKGNwdV9saXN0W2ldIDwgbnJfY3B1X2lkcykKIAkJCWNwdV9zZXQoY3B1X2xpc3RbaV0sIG1hc2spOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwppbmRleCA0NGRkNWVlLi5hZDgwMGI4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwpAQCAtNDM5LDcgKzQzOSw2IEBACiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAKIAlhY3Rpb24tPmZsYWdzID0gaXJxZmxhZ3M7Ci0JY3B1c19jbGVhcihhY3Rpb24tPm1hc2spOwogCWFjdGlvbi0+bmFtZSA9IGRldm5hbWU7CiAJYWN0aW9uLT5kZXZfaWQgPSBOVUxMOwogCWFjdGlvbi0+bmV4dCA9IE5VTEw7CkBAIC01NzQsNyArNTczLDYgQEAKIAogCWFjdGlvbi0+aGFuZGxlciA9IGhhbmRsZXI7CiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwogCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCmluZGV4IGQwZDZhNTEuLjVkZWFiZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lycV82NC5jCkBAIC0yNjYsMTIgKzI2NiwxMiBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX3JvdmVyX2xvY2ssIGZsYWdzKTsKIAogCQl3aGlsZSAoIWNwdV9vbmxpbmUoaXJxX3JvdmVyKSkgewotCQkJaWYgKCsraXJxX3JvdmVyID49IE5SX0NQVVMpCisJCQlpZiAoKytpcnFfcm92ZXIgPj0gbnJfY3B1X2lkcykKIAkJCQlpcnFfcm92ZXIgPSAwOwogCQl9CiAJCWNwdWlkID0gaXJxX3JvdmVyOwogCQlkbyB7Ci0JCQlpZiAoKytpcnFfcm92ZXIgPj0gTlJfQ1BVUykKKwkJCWlmICgrK2lycV9yb3ZlciA+PSBucl9jcHVfaWRzKQogCQkJCWlycV9yb3ZlciA9IDA7CiAJCX0gd2hpbGUgKCFjcHVfb25saW5lKGlycV9yb3ZlcikpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlZC5jCmluZGV4IGFkYWFlZDQuLjAwZDAzNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xlZC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlZC5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAlsZWQgPSBwcm9jX2NyZWF0ZSgibGVkIiwgMCwgTlVMTCwgJmxlZF9wcm9jX2ZvcHMpOwogCWlmICghbGVkKQogCQlyZXR1cm4gLUVOT01FTTsKLQlsZWQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJsZWQ6IHZlcnNpb24gJXMsIExhcnMgS290dGhvZmYgPG1ldGFsaGVhZEBtZXRhbGhlYWQud3M+XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYyBiL2FyY2gvc3BhcmMva2VybmVsL21kZXNjLmMKaW5kZXggM2Y3OWYwYy4uZjBlNmVkMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbWRlc2MuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tZGVzYy5jCkBAIC01NjcsNyArNTY3LDcgQEAKIAkJCW1heF9jcHUgPSBOUl9DUFVTOwogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBtYXhfY3B1OyBpKyspCi0JCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCQkJc2V0X2NwdV9wb3NzaWJsZShpLCB0cnVlKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwppbmRleCBmMzU3NzIyLi4yYzBjYzcyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMjA2LDEzICsyMDcsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5taV9hZGp1c3RfaHopOwogCitzdGF0aWMgaW50IG5taV9zaHV0ZG93bihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcCkKK3sKKwlvbl9lYWNoX2NwdShzdG9wX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBubWlfcmVib290X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbm1pX3NodXRkb3duLAorfTsKKwogaW50IF9faW5pdCBubWlfaW5pdCh2b2lkKQogeworCWludCBlcnI7CisKIAlubWlfdXNhYmxlID0gMTsKIAogCW9uX2VhY2hfY3B1KHN0YXJ0X3dhdGNoZG9nLCBOVUxMLCAxKTsKIAotCXJldHVybiBjaGVja19ubWlfd2F0Y2hkb2coKTsKKwllcnIgPSBjaGVja19ubWlfd2F0Y2hkb2coKTsKKwlpZiAoIWVycikgeworCQllcnIgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm5taV9yZWJvb3Rfbm90aWZpZXIpOworCQlpZiAoZXJyKSB7CisJCQlubWlfdXNhYmxlID0gMDsKKwkJCW9uX2VhY2hfY3B1KHN0b3Bfd2F0Y2hkb2csIE5VTEwsIDEpOworCQl9CisJfQorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX25taV93YXRjaGRvZyhjaGFyICpzdHIpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggZjRiZWUzNS4uMjgzMGI0MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAgKi8KIGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYTczOTU0Yi4uNDA0MWY5NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNTYxLDcgKzU2MSw3IEBACiAgKiBQYXJlbnQgLS0+ICAlbzAgPT0gY2hpbGRzICBwaWQsICVvMSA9PSAwCiAgKiBDaGlsZCAgLS0+ICAlbzAgPT0gcGFyZW50cyBwaWQsICVvMSA9PSAxCiAgKi8KLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzY0LmMKaW5kZXggZWRlY2NhNy4uY2E1NWM3MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fNjQuYwpAQCAtNTE4LDggKzUxOCw4IEBACiAJCX0KIAogI2lmZGVmIENPTkZJR19TTVAKLQkJY3B1X3NldChjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKLQkJY3B1X3NldChjcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcHJlc2VudChjcHVpZCwgdHJ1ZSk7CisJCXNldF9jcHVfcG9zc2libGUoY3B1aWQsIHRydWUpOwogI2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmluZGV4IDFlNWFjNGUuLjEzMmQ4MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCkBAIC03MCwxMyArNzAsMTIgQEAKIAlleHRlcm4gdm9pZCBzbXA0bV9zbXBfZG9uZSh2b2lkKTsKIAlleHRlcm4gdm9pZCBzbXA0ZF9zbXBfZG9uZSh2b2lkKTsKIAl1bnNpZ25lZCBsb25nIGJvZ29zdW0gPSAwOwotCWludCBjcHUsIG51bTsKKwlpbnQgY3B1LCBudW0gPSAwOwogCi0JZm9yIChjcHUgPSAwLCBudW0gPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKLQkJaWYgKGNwdV9vbmxpbmUoY3B1KSkgewotCQkJbnVtKys7Ci0JCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSkudWRlbGF5X3ZhbDsKLQkJfQorCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCW51bSsrOworCQlib2dvc3VtICs9IGNwdV9kYXRhKGNwdSkudWRlbGF5X3ZhbDsKKwl9CiAKIAlwcmludGsoIlRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwKIAkJbnVtLCBib2dvc3VtLyg1MDAwMDAvSFopLApAQCAtMTQ0LDcgKzE0Myw3IEBACiB2b2lkIHNtcF9mbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlpZihtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCiAJCQl4YzEoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX2NhY2hlX21tKSwgKHVuc2lnbmVkIGxvbmcpIG1tKTsKQEAgLTE1NSwxMiArMTU0LDEzIEBACiB2b2lkIHNtcF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJaWYobW0tPmNvbnRleHQgIT0gTk9fQ09OVEVYVCkgewotCQljcHVtYXNrX3QgY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CisJCWNwdW1hc2tfdCBjcHVfbWFzayA9ICptbV9jcHVtYXNrKG1tKTsKIAkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKSB7CiAJCQl4YzEoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9tbSksICh1bnNpZ25lZCBsb25nKSBtbSk7CiAJCQlpZihhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxICYmIGN1cnJlbnQtPmFjdGl2ZV9tbSA9PSBtbSkKLQkJCQltbS0+Y3B1X3ZtX21hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJCWNwdW1hc2tfY29weShtbV9jcHVtYXNrKG1tKSwKKwkJCQkJICAgICBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCQl9CiAJCWxvY2FsX2ZsdXNoX3RsYl9tbShtbSk7CiAJfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCiAJaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJY3B1bWFza190IGNwdV9tYXNrID0gbW0tPmNwdV92bV9tYXNrOworCQljcHVtYXNrX3QgY3B1X21hc2sgPSAqbW1fY3B1bWFzayhtbSk7CiAJCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAkJaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkKIAkJCXhjMygoc21wZnVuY190KSBCVEZJWFVQX0NBTEwobG9jYWxfZmx1c2hfY2FjaGVfcmFuZ2UpLCAodW5zaWduZWQgbG9uZykgdm1hLCBzdGFydCwgZW5kKTsKQEAgLTE4Niw3ICsxODYsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAogCWlmIChtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCiAJCQl4YzMoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9yYW5nZSksICh1bnNpZ25lZCBsb25nKSB2bWEsIHN0YXJ0LCBlbmQpOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCiAJaWYobW0tPmNvbnRleHQgIT0gTk9fQ09OVEVYVCkgewotCQljcHVtYXNrX3QgY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CisJCWNwdW1hc2tfdCBjcHVfbWFzayA9ICptbV9jcHVtYXNrKG1tKTsKIAkJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X21hc2spOwogCQlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQogCQkJeGMyKChzbXBmdW5jX3QpIEJURklYVVBfQ0FMTChsb2NhbF9mbHVzaF9jYWNoZV9wYWdlKSwgKHVuc2lnbmVkIGxvbmcpIHZtYSwgcGFnZSk7CkBAIC0yMTIsNyArMjEyLDcgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAKIAlpZihtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCWNwdW1hc2tfdCBjcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKKwkJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJCWlmICghY3B1c19lbXB0eShjcHVfbWFzaykpCiAJCQl4YzIoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3RsYl9wYWdlKSwgKHVuc2lnbmVkIGxvbmcpIHZtYSwgcGFnZSk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAogdm9pZCBzbXBfZmx1c2hfc2lnX2luc25zKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGluc25fYWRkcikKIHsKLQljcHVtYXNrX3QgY3B1X21hc2sgPSBtbS0+Y3B1X3ZtX21hc2s7CisJY3B1bWFza190IGNwdV9tYXNrID0gKm1tX2NwdW1hc2sobW0pOwogCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9tYXNrKTsKIAlpZiAoIWNwdXNfZW1wdHkoY3B1X21hc2spKQogCQl4YzIoKHNtcGZ1bmNfdCkgQlRGSVhVUF9DQUxMKGxvY2FsX2ZsdXNoX3NpZ19pbnNucyksICh1bnNpZ25lZCBsb25nKSBtbSwgaW5zbl9hZGRyKTsKQEAgLTMzMiw4ICszMzIsOCBAQAogCWluc3RhbmNlID0gMDsKIAl3aGlsZSAoIWNwdV9maW5kX2J5X2luc3RhbmNlKGluc3RhbmNlLCBOVUxMLCAmbWlkKSkgewogCQlpZiAobWlkIDwgTlJfQ1BVUykgewotCQkJY3B1X3NldChtaWQsIGNwdV9wb3NzaWJsZV9tYXApOwotCQkJY3B1X3NldChtaWQsIGNwdV9wcmVzZW50X21hcCk7CisJCQlzZXRfY3B1X3Bvc3NpYmxlKG1pZCwgdHJ1ZSk7CisJCQlzZXRfY3B1X3ByZXNlbnQobWlkLCB0cnVlKTsKIAkJfQogCQlpbnN0YW5jZSsrOwogCX0KQEAgLTM1MSw4ICszNTEsOCBAQAogCQlwcmludGsoImJvb3QgY3B1IGlkICE9IDAsIHRoaXMgY291bGQgd29yayBidXQgaXMgdW50ZXN0ZWRcbiIpOwogCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBjcHVpZDsKLQljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7Ci0JY3B1X3NldChjcHVpZCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoY3B1aWQsIHRydWUpOworCXNldF9jcHVfcG9zc2libGUoY3B1aWQsIHRydWUpOwogfQogCiBpbnQgX19jcHVpbml0IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCmluZGV4IDc5NDU3ZjYuLjcwOGUxMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jCkBAIC04MDgsOSArODA4LDkgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfY2FsbF9mdW5jdGlvbjsKIAotdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY3B1bWFza190IG1hc2spCit2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXhjYWxsX2RlbGl2ZXIoKHU2NCkgJnhjYWxsX2NhbGxfZnVuY3Rpb24sIDAsIDAsICZtYXNrKTsKKwl4Y2FsbF9kZWxpdmVyKCh1NjQpICZ4Y2FsbF9jYWxsX2Z1bmN0aW9uLCAwLCAwLCBtYXNrKTsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfY2FsbF9mdW5jdGlvbl9zaW5nbGU7CkBAIC04NTAsNyArODUwLDcgQEAKIAogdm9pZCBzbXBfdHNiX3N5bmMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0Jc21wX2NhbGxfZnVuY3Rpb25fbWFzayhtbS0+Y3B1X3ZtX21hc2ssIHRzYl9zeW5jLCBtbSwgMSk7CisJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtbV9jcHVtYXNrKG1tKSwgdHNiX3N5bmMsIG1tLCAxKTsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGNhbGxfZmx1c2hfdGxiX21tOwpAQCAtMTA1NSwxMyArMTA1NSwxMyBAQAogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMSkgewotCQltbS0+Y3B1X3ZtX21hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOworCQljcHVtYXNrX2NvcHkobW1fY3B1bWFzayhtbSksIGNwdW1hc2tfb2YoY3B1KSk7CiAJCWdvdG8gbG9jYWxfZmx1c2hfYW5kX291dDsKIAl9CiAKIAlzbXBfY3Jvc3NfY2FsbF9tYXNrZWQoJnhjYWxsX2ZsdXNoX3RsYl9tbSwKIAkJCSAgICAgIGN0eCwgMCwgMCwKLQkJCSAgICAgICZtbS0+Y3B1X3ZtX21hc2spOworCQkJICAgICAgbW1fY3B1bWFzayhtbSkpOwogCiBsb2NhbF9mbHVzaF9hbmRfb3V0OgogCV9fZmx1c2hfdGxiX21tKGN0eCwgU0VDT05EQVJZX0NPTlRFWFQpOwpAQCAtMTA3NSwxMSArMTA3NSwxMSBAQAogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAlpZiAobW0gPT0gY3VycmVudC0+bW0gJiYgYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMSkKLQkJbW0tPmNwdV92bV9tYXNrID0gY3B1bWFza19vZl9jcHUoY3B1KTsKKwkJY3B1bWFza19jb3B5KG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKGNwdSkpOwogCWVsc2UKIAkJc21wX2Nyb3NzX2NhbGxfbWFza2VkKCZ4Y2FsbF9mbHVzaF90bGJfcGVuZGluZywKIAkJCQkgICAgICBjdHgsIG5yLCAodW5zaWduZWQgbG9uZykgdmFkZHJzLAotCQkJCSAgICAgICZtbS0+Y3B1X3ZtX21hc2spOworCQkJCSAgICAgIG1tX2NwdW1hc2sobW0pKTsKIAogCV9fZmx1c2hfdGxiX3BlbmRpbmcoY3R4LCBuciwgdmFkZHJzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCAzMzY5ZmVmLi5hYjAzNmE3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtMzI2LDcgKzMyNiw2IEBACiAKIAlhY3Rpb24tPmhhbmRsZXIgPSBoYW5kbGVyOwogCWFjdGlvbi0+ZmxhZ3MgPSBpcnFmbGFnczsKLQljcHVzX2NsZWFyKGFjdGlvbi0+bWFzayk7CiAJYWN0aW9uLT5uYW1lID0gZGV2bmFtZTsKIAlhY3Rpb24tPm5leHQgPSBOVUxMOwogCWFjdGlvbi0+ZGV2X2lkID0gZGV2X2lkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwppbmRleCA1MGFmYWVkLi41NGZiMDI0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwogCWNjX3NldF9pbXNrKGNjX2dldF9pbXNrKCkgJiB+MHg0MDAwKTsgLyogQWxsb3cgUElMIDE0IGFzIHdlbGwgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKLQljcHVfc2V0KGNwdWlkLCBjcHVfb25saW5lX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoY3B1aWQsIHRydWUpOwogCiB9CiAKQEAgLTIyOCwxMSArMjI4LDEwIEBACiAJLyogc2V0dXAgY3B1IGxpc3QgZm9yIGlycSByb3RhdGlvbiAqLwogCWZpcnN0ID0gMDsKIAlwcmV2ID0gJmZpcnN0OwotCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspCi0JCWlmIChjcHVfb25saW5lKGkpKSB7Ci0JCQkqcHJldiA9IGk7Ci0JCQlwcmV2ID0gJmNwdV9kYXRhKGkpLm5leHQ7Ci0JCX0KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKKwkJKnByZXYgPSBpOworCQlwcmV2ID0gJmNwdV9kYXRhKGkpLm5leHQ7CisJfQogCSpwcmV2ID0gZmlyc3Q7CiAJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRtX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKaW5kZXggODA0MDM3Ni4uOTYwYjExMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCi0JY3B1X3NldChjcHVpZCwgY3B1X29ubGluZV9tYXApOworCXNldF9jcHVfb25saW5lKGNwdWlkLCB0cnVlKTsKIH0KIAogLyoKQEAgLTE4NiwxMSArMTg2LDkgQEAKIAkvKiBzZXR1cCBjcHUgbGlzdCBmb3IgaXJxIHJvdGF0aW9uICovCiAJZmlyc3QgPSAwOwogCXByZXYgPSAmZmlyc3Q7Ci0JZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoY3B1X29ubGluZShpKSkgewotCQkJKnByZXYgPSBpOwotCQkJcHJldiA9ICZjcHVfZGF0YShpKS5uZXh0OwotCQl9CisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCSpwcmV2ID0gaTsKKwkJcHJldiA9ICZjcHVfZGF0YShpKS5uZXh0OwogCX0KIAkqcHJldiA9IGZpcnN0OwogCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9oaWdobWVtLmMgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwppbmRleCA3NTJkMGM5Li43OTE2ZmViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYworKysgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwpAQCAtMzksNiArMzksNyBAQAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCAwMDM3M2NlLi4yYzhkZmViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAkJaWYgKHN0cmNtcChuYW1lLCAiY3B1IikpCiAJCQljb250aW51ZTsKIAkJaWQgPSBtZGVzY19nZXRfcHJvcGVydHkobWQsIHRhcmdldCwgImlkIiwgTlVMTCk7Ci0JCWlmICgqaWQgPCBOUl9DUFVTKQorCQlpZiAoKmlkIDwgbnJfY3B1X2lkcykKIAkJCWNwdV9zZXQoKmlkLCAqbWFzayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jIGIvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCmluZGV4IGZlN2VkMDguLjA2YzlhN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3JtbXUuYworKysgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKQEAgLTE0MjUsNyArMTQyNSw3IEBACiAJCQkJbWluX2xpbmVfc2l6ZSA9IHZhY19saW5lX3NpemU7CiAJCQkvL0ZJWE1FOiBjcHVzIG5vdCBjb250aWd1b3VzISEKIAkJCWNwdSsrOwotCQkJaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjcHVfb25saW5lKGNwdSkpCisJCQlpZiAoY3B1ID49IG5yX2NwdV9pZHMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKIAkJCQlicmVhazsKICNlbHNlCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggNDM0MjI0ZS4uNDM0YmExMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTc1Nyw3ICs3NTcsNyBAQAogCXZvaWQgKCpwcm9jKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdm9pZCAqKTsKIAl1bnNpZ25lZCBjaGFyIGFkZHJfYnVmWzRdLCBuZXRtYXNrX2J1Zls0XTsKIAotCWlmIChkZXYtPm9wZW4gIT0gdW1sX25ldF9vcGVuKQorCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuICE9IHVtbF9uZXRfb3BlbikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5oIGIvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5oCmluZGV4IDk2YjgwYjUuLmQ4YmE2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wY2FwX3VzZXIuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmgKQEAgLTE5LDEzICsxOSwzIEBACiAKIGV4dGVybiBpbnQgcGNhcF91c2VyX3JlYWQoaW50IGZkLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBwY2FwX2RhdGEgKnByaSk7CiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydC5oIGIvYXJjaC91bS9kcml2ZXJzL3BvcnQuaAppbmRleCA5MTE3NjA5Li4zNzJhODBjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvcG9ydC5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0LmgKQEAgLTE4LDEzICsxOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3NzbC5oIGIvYXJjaC91bS9kcml2ZXJzL3NzbC5oCmluZGV4IDk4NDEyYWEuLjMxNGQxNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zc2wuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvc3NsLmgKQEAgLTExLDEzICsxMSwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuaCBiL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmgKaW5kZXggNTA1YTNkNS4uNmQ4Mjc1ZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5oCkBAIC05LDEzICs5LDMgQEAKIGV4dGVybiB2b2lkIHNhdmVfY29uc29sZV9mbGFncyh2b2lkKTsKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwppbmRleCAwYTg2ODExLi5mOTM0MjI1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtMTcsMTIgKzE3LDEyIEBACiAgKiBKYW1lcyBNY01lY2hhbgogICovCiAKLSNkZWZpbmUgTUFKT1JfTlIgVUJEX01BSk9SCiAjZGVmaW5lIFVCRF9TSElGVCA0CiAKICNpbmNsdWRlICJsaW51eC9rZXJuZWwuaCIKICNpbmNsdWRlICJsaW51eC9tb2R1bGUuaCIKICNpbmNsdWRlICJsaW51eC9ibGtkZXYuaCIKKyNpbmNsdWRlICJsaW51eC9hdGEuaCIKICNpbmNsdWRlICJsaW51eC9oZHJlZy5oIgogI2luY2x1ZGUgImxpbnV4L2luaXQuaCIKICNpbmNsdWRlICJsaW51eC9jZHJvbS5oIgpAQCAtMTE1LDcgKzExNSw3IEBACiB9OwogCiAvKiBQcm90ZWN0ZWQgYnkgdWJkX2xvY2sgKi8KLXN0YXRpYyBpbnQgZmFrZV9tYWpvciA9IE1BSk9SX05SOworc3RhdGljIGludCBmYWtlX21ham9yID0gVUJEX01BSk9SOwogc3RhdGljIHN0cnVjdCBnZW5kaXNrICp1YmRfZ2VuZGlza1tNQVhfREVWXTsKIHN0YXRpYyBzdHJ1Y3QgZ2VuZGlzayAqZmFrZV9nZW5kaXNrW01BWF9ERVZdOwogCkBAIC0yOTksNyArMjk5LDcgQEAKIAkJfQogCiAJCW11dGV4X2xvY2soJnViZF9sb2NrKTsKLQkJaWYoZmFrZV9tYWpvciAhPSBNQUpPUl9OUil7CisJCWlmIChmYWtlX21ham9yICE9IFVCRF9NQUpPUikgewogCQkJKmVycm9yX291dCA9ICJDYW4ndCBhc3NpZ24gYSBmYWtlIG1ham9yIHR3aWNlIjsKIAkJCWdvdG8gb3V0MTsKIAkJfQpAQCAtODE4LDEzICs4MTgsMTMgQEAKIAlkaXNrLT5maXJzdF9taW5vciA9IHVuaXQgPDwgVUJEX1NISUZUOwogCWRpc2stPmZvcHMgPSAmdWJkX2Jsb3BzOwogCXNldF9jYXBhY2l0eShkaXNrLCBzaXplIC8gNTEyKTsKLQlpZihtYWpvciA9PSBNQUpPUl9OUikKKwlpZiAobWFqb3IgPT0gVUJEX01BSk9SKQogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgInViZCVjIiwgJ2EnICsgdW5pdCk7CiAJZWxzZQogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgInViZF9mYWtlJWQiLCB1bml0KTsKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyIChub3QgZm9yIGlkZSBmYWtlIGRldmljZXMpICovCi0JaWYgKG1ham9yID09IE1BSk9SX05SKSB7CisJaWYgKG1ham9yID09IFVCRF9NQUpPUikgewogCQl1YmRfZGV2c1t1bml0XS5wZGV2LmlkICAgPSB1bml0OwogCQl1YmRfZGV2c1t1bml0XS5wZGV2Lm5hbWUgPSBEUklWRVJfTkFNRTsKIAkJdWJkX2RldnNbdW5pdF0ucGRldi5kZXYucmVsZWFzZSA9IHViZF9kZXZpY2VfcmVsZWFzZTsKQEAgLTg3MSwxMyArODcxLDEzIEBACiAJdWJkX2Rldi0+cXVldWUtPnF1ZXVlZGF0YSA9IHViZF9kZXY7CiAKIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKHViZF9kZXYtPnF1ZXVlLCBNQVhfU0cpOwotCWVyciA9IHViZF9kaXNrX3JlZ2lzdGVyKE1BSk9SX05SLCB1YmRfZGV2LT5zaXplLCBuLCAmdWJkX2dlbmRpc2tbbl0pOworCWVyciA9IHViZF9kaXNrX3JlZ2lzdGVyKFVCRF9NQUpPUiwgdWJkX2Rldi0+c2l6ZSwgbiwgJnViZF9nZW5kaXNrW25dKTsKIAlpZihlcnIpewogCQkqZXJyb3Jfb3V0ID0gIkZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UiOwogCQlnb3RvIG91dF9jbGVhbnVwOwogCX0KIAotCWlmKGZha2VfbWFqb3IgIT0gTUFKT1JfTlIpCisJaWYgKGZha2VfbWFqb3IgIT0gVUJEX01BSk9SKQogCQl1YmRfZGlza19yZWdpc3RlcihmYWtlX21ham9yLCB1YmRfZGV2LT5zaXplLCBuLAogCQkJCSAgJmZha2VfZ2VuZGlza1tuXSk7CiAKQEAgLTEwNTksMTAgKzEwNTksMTAgQEAKIAljaGFyICplcnJvcjsKIAlpbnQgaSwgZXJyOwogCi0JaWYgKHJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUiwgInViZCIpKQorCWlmIChyZWdpc3Rlcl9ibGtkZXYoVUJEX01BSk9SLCAidWJkIikpCiAJCXJldHVybiAtMTsKIAotCWlmIChmYWtlX21ham9yICE9IE1BSk9SX05SKSB7CisJaWYgKGZha2VfbWFqb3IgIT0gVUJEX01BSk9SKSB7CiAJCWNoYXIgbmFtZVtzaXplb2YoInViZF9ubm5cMCIpXTsKIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ1YmRfJWQiLCBmYWtlX21ham9yKTsKQEAgLTEzMDksMTYgKzEzMDksMTUgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgdWJkICp1YmRfZGV2ID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBoZF9kcml2ZWlkIHViZF9pZCA9IHsKLQkJLmN5bHMJCT0gMCwKLQkJLmhlYWRzCQk9IDEyOCwKLQkJLnNlY3RvcnMJPSAzMiwKLQl9OworCXUxNiB1YmRfaWRbQVRBX0lEX1dPUkRTXTsKIAogCXN3aXRjaCAoY21kKSB7CiAJCXN0cnVjdCBjZHJvbV92b2xjdHJsIHZvbHVtZTsKIAljYXNlIEhESU9fR0VUX0lERU5USVRZOgotCQl1YmRfaWQuY3lscyA9IHViZF9kZXYtPnNpemUgLyAoMTI4ICogMzIgKiA1MTIpOworCQltZW1zZXQoJnViZF9pZCwgMCwgQVRBX0lEX1dPUkRTICogMik7CisJCXViZF9pZFtBVEFfSURfQ1lMU10JPSB1YmRfZGV2LT5zaXplIC8gKDEyOCAqIDMyICogNTEyKTsKKwkJdWJkX2lkW0FUQV9JRF9IRUFEU10JPSAxMjg7CisJCXViZF9pZFtBVEFfSURfU0VDVE9SU10JPSAzMjsKIAkJaWYoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKSBhcmcsIChjaGFyICopICZ1YmRfaWQsCiAJCQkJIHNpemVvZih1YmRfaWQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmggYi9hcmNoL3VtL2RyaXZlcnMveHRlcm0uaAppbmRleCBmMzNhNmU3Li41NmI5YzRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMveHRlcm0uaAorKysgYi9hcmNoL3VtL2RyaXZlcnMveHRlcm0uaApAQCAtMTAsMTMgKzEwLDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKaW5kZXggNjJkZGJhNi4uMjcyYTgxZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtOCwxMyArOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11LmgKaW5kZXggMmNmMzVjMi4uY2YyNTlkZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xMCwxMyArMTAsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGRhLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BkYS5oCmluZGV4IDBkOGJmMzMuLmRkY2Q3NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGRhLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZGEuaApAQCAtMTksMTMgKzE5LDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDkwNjJhNmUuLjcxODk4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC02MCwxMyArNjAsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAwNDQ2ZjQ1Li4wODRkZTRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0xMzQsMTMgKzEzNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9mcmFtZV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaAppbmRleCBjZTk1MTRmLi43NjA3ODQ5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaApAQCAtMjAsMTMgKzIwLDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2luaXRyZC5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pbml0cmQuaAppbmRleCA0MzliOWE4Li4yMjY3M2JjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2luaXRyZC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvaW5pdHJkLmgKQEAgLTEwLDEzICsxMCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfa2Vybi5oCmluZGV4IGZiYTM4OTUuLmIwNWQyMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvaXJxX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2lycV9rZXJuLmgKQEAgLTE2LDEzICsxNiwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fa2Vybi5oCmluZGV4IGNiN2UxOTYuLjY5YmUwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbWVtX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21lbV9rZXJuLmgKQEAgLTE4LDEzICsxOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oCmluZGV4IGJiNjY1MTcuLjM4NDUwNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdWJkX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3ViZF91c2VyLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0OTllNWU5Li4zODhlYzBhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLHF1b3RlMSkKIAogcXVpZXRfY21kX3F1b3RlMSA9IFFVT1RFICAgJEAKLSAgICAgIGNtZF9xdW90ZTEgPSBzZWQgLWUgJ3MvIi9cXCIvZycgLWUgJ3MvXi8iLycgLWUgJ3MvJCQvXFxuIi8nIFwKKyAgICAgIGNtZF9xdW90ZTEgPSBzZWQgLWUgJ3MvIi9cXCIvZycgLWUgJ3MvXi8iLycgLWUgJ3MvJCQvXFxuIiwvJyBcCiAJCSAgICQ8ID4gJEAKIAogJChvYmopL2NvbmZpZy5jOiAkKHNyYykvY29uZmlnLmMuaW4gJChvYmopL2NvbmZpZy50bXAgRk9SQ0UKQEAgLTM2LDkgKzM2LDkgQEAKIAogcXVpZXRfY21kX3F1b3RlMiA9IFFVT1RFICAgJEAKICAgICAgIGNtZF9xdW90ZTIgPSBzZWQgLWUgJy9DT05GSUcveycgICAgICAgICAgXAotCQkgIC1lICdzLyJDT05GSUciXDsvIiIvJyAgICAgICAgXAorCQkgIC1lICdzLyJDT05GSUciLy8nICAgICAgICAgICAgXAogCQkgIC1lICdyICQob2JqKS9jb25maWcudG1wJyAgICAgXAogCQkgIC1lICdhIFwnICAgICAgICAgICAgICAgICAgICAgXAotCQkgIC1lICciIlw7JyAgICAgICAgICAgICAgICAgICAgXAorCQkgIC1lICciIicgICAgICAgICAgICAgICAgICAgICAgXAogCQkgIC1lICd9JyAgICAgICAgICAgICAgICAgICAgICAgXAogCQkgICQ8ID4gJEAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2NvbmZpZy5jLmluIGIvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KaW5kZXggYzA2MmNiZi4uYjdhNDNmZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KKysrIGIvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KQEAgLTcsMTEgKzcsMTUgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJpbml0LmgiCiAKLXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbmZpZyA9ICJDT05GSUciOworc3RhdGljIF9faW5pdGRhdGEgY29uc3QgY2hhciAqY29uZmlnW10gPSB7CisiQ09ORklHIgorfTsKIAogc3RhdGljIGludCBfX2luaXQgcHJpbnRfY29uZmlnKGNoYXIgKmxpbmUsIGludCAqYWRkKQogewotCXByaW50ZigiJXMiLCBjb25maWcpOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY29uZmlnKS9zaXplb2YoY29uZmlnWzBdKTsgaSsrKQorCQlwcmludGYoIiVzIiwgY29uZmlnW2ldKTsKIAlleGl0KDApOwogfQogCkBAIC0yMCwxMyArMjQsMyBAQAogIiAgICBQcmludHMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgdGhpcyBVTUwgYmluYXJ5IHdhcyBnZW5lcmF0ZWQgZnJvbS5cblxuIgogKTsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBhMWM2ZDA3Li40YTI4YTE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAl1c2Vyc3BhY2UoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpOwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYwppbmRleCBjNGRmNzA1Li5hNDYyNWM3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc3lzY2FsbC5jCkBAIC0xMjcsNyArMTI3LDggQEAKIAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gdW1fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwKTsKKwlyZXQgPSB1bV9leGVjdmUoKGNoYXIgKilmaWxlbmFtZSwgKGNoYXIgX191c2VyICpfX3VzZXIgKilhcmd2LAorCQkJKGNoYXIgX191c2VyICpfX3VzZXIgKikgZW52cCk7CiAJc2V0X2ZzKGZzKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKaW5kZXggMTgzZGIyNi4uMDJlZTlhZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAlpZiAoKHB0cmFjZShQVFJBQ0VfT0xEU0VUT1BUSU9OUywgcGlkLCAwLAogCQkgICAodm9pZCAqKSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QpIDwgMCkpCi0JCWZhdGFsX3BlcnJvcigiY2hlY2tfcHRyYWNlOiBQVFJBQ0VfT0xEU0VUT1BUSU9OUyBmYWlsZWQiKTsKKwkJZmF0YWxfcGVycm9yKCJjaGVja19zeXNlbXU6IFBUUkFDRV9PTERTRVRPUFRJT05TIGZhaWxlZCIpOwogCiAJd2hpbGUgKDEpIHsKIAkJY291bnQrKzsKQEAgLTI1MiwxMiArMjUyLDEyIEBACiAJCQlnb3RvIGZhaWw7CiAJCUNBVENIX0VJTlRSKG4gPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgV1VOVFJBQ0VEKSk7CiAJCWlmIChuIDwgMCkKLQkJCWZhdGFsX3BlcnJvcigiY2hlY2tfcHRyYWNlIDogd2FpdCBmYWlsZWQiKTsKKwkJCWZhdGFsX3BlcnJvcigiY2hlY2tfc3lzZW11OiB3YWl0IGZhaWxlZCIpOwogCiAJCWlmIChXSUZTVE9QUEVEKHN0YXR1cykgJiYKIAkJICAgIChXU1RPUFNJRyhzdGF0dXMpID09IChTSUdUUkFQfDB4ODApKSkgewogCQkJaWYgKCFjb3VudCkgewotCQkJCW5vbl9mYXRhbCgiY2hlY2tfcHRyYWNlIDogU1lTRU1VX1NJTkdMRVNURVAgIgorCQkJCW5vbl9mYXRhbCgiY2hlY2tfc3lzZW11OiBTWVNFTVVfU0lOR0xFU1RFUCAiCiAJCQkJCSAgImRvZXNuJ3Qgc2luZ2xlc3RlcCIpOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KQEAgLTI3MSw3ICsyNzEsNyBAQAogCQllbHNlIGlmIChXSUZTVE9QUEVEKHN0YXR1cykgJiYgKFdTVE9QU0lHKHN0YXR1cykgPT0gU0lHVFJBUCkpCiAJCQljb3VudCsrOwogCQllbHNlIHsKLQkJCW5vbl9mYXRhbCgiY2hlY2tfcHRyYWNlIDogZXhwZWN0ZWQgU0lHVFJBUCBvciAiCisJCQlub25fZmF0YWwoImNoZWNrX3N5c2VtdTogZXhwZWN0ZWQgU0lHVFJBUCBvciAiCiAJCQkJICAiKFNJR1RSQVAgfCAweDgwKSwgZ290IHN0YXR1cyA9ICVkXG4iLAogCQkJCSAgc3RhdHVzKTsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL2FyY2hwYXJhbS5oIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKaW5kZXggOTNmZDcyMy4uMmExOGE4OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2NoZWNrc3VtLmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaAppbmRleCAwY2I0NjQ1Li5lZDQ3NDQ1IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaApAQCAtMTk5LDEzICsxOTksMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwppbmRleCAwMGU1ZjUyMC4uYzYyNjBkZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwpAQCAtOSw2ICs5LDE3IEBACiAKICNkZWZpbmUgb2xkX21tYXAgb2xkX21tYXBfaTM4NgogCisjZGVmaW5lIHB0cmVnc19mb3JrIHN5c19mb3JrCisjZGVmaW5lIHB0cmVnc19leGVjdmUgc3lzX2V4ZWN2ZQorI2RlZmluZSBwdHJlZ3NfaW9wbCBzeXNfaW9wbAorI2RlZmluZSBwdHJlZ3Nfdm04Nm9sZCBzeXNfdm04Nm9sZAorI2RlZmluZSBwdHJlZ3Nfc2lncmV0dXJuIHN5c19zaWdyZXR1cm4KKyNkZWZpbmUgcHRyZWdzX2Nsb25lIHN5c19jbG9uZQorI2RlZmluZSBwdHJlZ3Nfdm04NiBzeXNfdm04NgorI2RlZmluZSBwdHJlZ3NfcnRfc2lncmV0dXJuIHN5c19ydF9zaWdyZXR1cm4KKyNkZWZpbmUgcHRyZWdzX3NpZ2FsdHN0YWNrIHN5c19zaWdhbHRzdGFjaworI2RlZmluZSBwdHJlZ3NfdmZvcmsgc3lzX3Zmb3JrCisKIC5zZWN0aW9uIC5yb2RhdGEsImEiCiAKICNpbmNsdWRlICIuLi8uLi94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKaW5kZXggNDJkZDhmYi4uMGYwZjRlNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2lnY29udGV4dC5oCmluZGV4IGYxNWZiMjUuLjc2YjQzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL3VtL3N5cy1pYTY0L3N5c2RlcC9zaWdjb250ZXh0LmgKQEAgLTgsMTMgKzgsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3N5c2NhbGxzLmggYi9hcmNoL3VtL3N5cy1pYTY0L3N5c2RlcC9zeXNjYWxscy5oCmluZGV4IDRhMWY0NmUuLjVmNjcwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3N5c2NhbGxzLmgKKysrIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc3lzY2FsbHMuaApAQCAtOCwxMyArOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL21pc2N0aGluZ3MuYyBiL2FyY2gvdW0vc3lzLXBwYy9taXNjdGhpbmdzLmMKaW5kZXggMzczMDYxYy4uMWMxMWFlZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL21pc2N0aGluZ3MuYworKysgYi9hcmNoL3VtL3N5cy1wcGMvbWlzY3RoaW5ncy5jCkBAIC00MCwxNCArNDAsMyBAQAogfQogLyogRU5EIHN0dWZmIHRha2VuIGZyb20gYXJjaC9wcGMva2VybmVsL3Byb2Nlc3MuYyAqLwogCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1wcGMvcHRyYWNlLmMgYi9hcmNoL3VtL3N5cy1wcGMvcHRyYWNlLmMKaW5kZXggOGU3MWI0Ny4uNjZlZjE1NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0vc3lzLXBwYy9wdHJhY2UuYwpAQCAtNTYsMTMgKzU2LDMgQEAKIAlyZXR1cm4gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKTsKIH0KIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKaW5kZXggZmYwYjljMC4uMjI0ZDI0MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKKysrIGIvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKQEAgLTI3LDEzICsyNywzIEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKaW5kZXggZGYyMzk3ZC4uMGUzMjMwZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKQEAgLTkxLDEzICs5MSwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oCmluZGV4IGYyMGQ5NjUuLmI3Mjg2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zaWdjb250ZXh0LmgKQEAgLTUwLDEzICs1MCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc3lzY2FsbHMuaCBiL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKaW5kZXggNjc5ZGYzNS4uMWZmODE1NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc3lzY2FsbHMuaAorKysgYi9hcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCkBAIC00MSwxMyArNDEsMyBAQAogCiAjZGVmaW5lIExBU1RfQVJDSF9TWVNDQUxMIF9fTlJfZmFkdmlzZTY0CiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1wcGMvc2lnY29udGV4dC5jIGIvYXJjaC91bS9zeXMtcHBjL3NpZ2NvbnRleHQuYwppbmRleCA0YmRjMTVjLi40MDY5NGQwIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1wcGMvc2lnY29udGV4dC5jCisrKyBiL2FyY2gvdW0vc3lzLXBwYy9zaWdjb250ZXh0LmMKQEAgLTIsMTMgKzIsMyBAQAogI2luY2x1ZGUgImFzbS9zaWdjb250ZXh0LmgiCiAjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9hcmNocGFyYW0uaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vYXJjaHBhcmFtLmgKaW5kZXggMjcwZWQ5NS4uNmMwODM2NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9hcmNocGFyYW0uaAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL2FyY2hwYXJhbS5oCkBAIC0xNCwxMyArMTQsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vbW9kdWxlLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL21vZHVsZS5oCmluZGV4IDM1YjU0OTEuLjhlYjc5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9tb2R1bGUuaApAQCAtMTgsMTMgKzE4LDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvbWVtLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvbWVtLmMKaW5kZXggM2Y1OWEwYS4uM2Y4ZGY4YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L21lbS5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9tZW0uYwpAQCAtMTQsMTIgKzE0LDMgQEAKIHVuc2lnbmVkIGxvbmcgdm1fZGF0YV9kZWZhdWx0X2ZsYWdzMzIgPSBfX1ZNX0RBVEFfREVGQVVMVF9GTEFHUzsKIHVuc2lnbmVkIGxvbmcgdm1fZm9yY2VfZXhlYzMyID0gUFJPVF9FWEVDOwogCi0vKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBkN2I1NjIxLi41Njk2Y2VjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTQwLDYgKzQwLDcgQEAKIAlzZWxlY3QgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpZiBYODZfMzIKIAlzZWxlY3QgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCXNlbGVjdCBVU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVAorCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIAlzZWxlY3QgSEFWRV9LRVJORUxfR1pJUAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMgogCXNlbGVjdCBIQVZFX0tFUk5FTF9MWk1BCkBAIC0xNjQsNiArMTY1LDkgQEAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX09QVElNSVpFRF9JTkxJTklORwogCWRlZl9ib29sIHkKIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVmX2Jvb2wgeQorCiAjIFVzZSB0aGUgZ2VuZXJpYyBpbnRlcnJ1cHQgaGFuZGxpbmcgY29kZSBpbiBrZXJuZWwvaXJxLzoKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCiAJYm9vbApAQCAtNzg2LDYgKzc5MCwxMSBAQAogCSAgIEFkZGl0aW9uYWwgc3VwcG9ydCBmb3IgQU1EIHNwZWNpZmljIE1DRSBmZWF0dXJlcyBzdWNoIGFzCiAJICAgdGhlIERSQU0gRXJyb3IgVGhyZXNob2xkLgogCitjb25maWcgWDg2X01DRV9USFJFU0hPTEQKKwlkZXBlbmRzIG9uIFg4Nl9NQ0VfQU1EIHx8IFg4Nl9NQ0VfSU5URUwKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBYODZfTUNFX05PTkZBVEFMCiAJdHJpc3RhdGUgIkNoZWNrIGZvciBub24tZmF0YWwgZXJyb3JzIG9uIEFNRCBBdGhsb24vRHVyb24gLyBJbnRlbCBQZW50aXVtIDQiCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgWDg2X01DRQpAQCAtOTI5LDYgKzkzOCwxMiBAQAogCSAgd2l0aCBtYWpvciAyMDMgYW5kIG1pbm9ycyAwIHRvIDMxIGZvciAvZGV2L2NwdS8wL2NwdWlkIHRvCiAJICAvZGV2L2NwdS8zMS9jcHVpZC4KIAorY29uZmlnIFg4Nl9DUFVfREVCVUcKKwl0cmlzdGF0ZSAiL3N5cy9rZXJuZWwvZGVidWcveDg2L2NwdS8qIC0gQ1BVIERlYnVnIHN1cHBvcnQiCisJLS0taGVscC0tLQorCSAgSWYgeW91IHNlbGVjdCB0aGlzIG9wdGlvbiwgdGhpcyB3aWxsIHByb3ZpZGUgdmFyaW91cyB4ODYgQ1BVcworCSAgaW5mb3JtYXRpb24gdGhyb3VnaCBkZWJ1Z2ZzLgorCiBjaG9pY2UKIAlwcm9tcHQgIkhpZ2ggTWVtb3J5IFN1cHBvcnQiCiAJZGVmYXVsdCBISUdITUVNNEcgaWYgIVg4Nl9OVU1BUQpAQCAtMTEyMSw3ICsxMTM2LDcgQEAKIAogY29uZmlnIE5PREVTX1NISUZUCiAJaW50ICJNYXhpbXVtIE5VTUEgTm9kZXMgKGFzIGEgcG93ZXIgb2YgMikiIGlmICFNQVhTTVAKLQlyYW5nZSAxIDkgICBpZiBYODZfNjQKKwlyYW5nZSAxIDkKIAlkZWZhdWx0ICI5IiBpZiBNQVhTTVAKIAlkZWZhdWx0ICI2IiBpZiBYODZfNjQKIAlkZWZhdWx0ICI0IiBpZiBYODZfTlVNQVEKQEAgLTE0MjksNyArMTQ0NCw3IEBACiBjb25maWcgS0VYRUNfSlVNUAogCWJvb2wgImtleGVjIGp1bXAgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZXBlbmRzIG9uIEtFWEVDICYmIEhJQkVSTkFUSU9OICYmIFg4Nl8zMgorCWRlcGVuZHMgb24gS0VYRUMgJiYgSElCRVJOQVRJT04KIAktLS1oZWxwLS0tCiAJICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlCiAJICBjb2RlIGluIHBoeXNpY2FsIGFkZHJlc3MgbW9kZSB2aWEgS0VYRUMKQEAgLTE4MjIsOCArMTgzNyw4IEBACiAKIGNvbmZpZyBETUFSCiAJYm9vbCAiU3VwcG9ydCBmb3IgRE1BIFJlbWFwcGluZyBEZXZpY2VzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSV9NU0kgJiYgQUNQSSAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCisJZGVwZW5kcyBvbiBQQ0lfTVNJICYmIEFDUEkgJiYgRVhQRVJJTUVOVEFMCisJaGVscAogCSAgRE1BIHJlbWFwcGluZyAoRE1BUikgZGV2aWNlcyBzdXBwb3J0IGVuYWJsZXMgaW5kZXBlbmRlbnQgYWRkcmVzcwogCSAgdHJhbnNsYXRpb25zIGZvciBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoRE1BKSBmcm9tIGRldmljZXMuCiAJICBUaGVzZSBETUEgcmVtYXBwaW5nIGRldmljZXMgYXJlIHJlcG9ydGVkIHZpYSBBQ1BJIHRhYmxlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZy5jcHUgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQppbmRleCBhOTVlYWYwLi45MjRlMTU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmNwdQorKysgYi9hcmNoL3g4Ni9LY29uZmlnLmNwdQpAQCAtNDU2LDI0ICs0NTYsOSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgQ1BVX1NVUF9DRU5UQVVSXzMyCitjb25maWcgQ1BVX1NVUF9DRU5UQVVSCiAJZGVmYXVsdCB5CiAJYm9vbCAiU3VwcG9ydCBDZW50YXVyIHByb2Nlc3NvcnMiIGlmIFBST0NFU1NPUl9TRUxFQ1QKLQlkZXBlbmRzIG9uICE2NEJJVAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBkZXRlY3Rpb24sIHR1bmluZ3MgYW5kIHF1aXJrcyBmb3IgQ2VudGF1ciBwcm9jZXNzb3JzCi0KLQkgIFlvdSBuZWVkIHRoaXMgZW5hYmxlZCBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gYQotCSAgQ2VudGF1ciBDUFUuIERpc2FibGluZyB0aGlzIG9wdGlvbiBvbiBvdGhlciB0eXBlcyBvZiBDUFVzCi0JICBtYWtlcyB0aGUga2VybmVsIGEgdGlueSBiaXQgc21hbGxlci4gRGlzYWJsaW5nIGl0IG9uIGEgQ2VudGF1cgotCSAgQ1BVIG1pZ2h0IHJlbmRlciB0aGUga2VybmVsIHVuYm9vdGFibGUuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBDUFVfU1VQX0NFTlRBVVJfNjQKLQlkZWZhdWx0IHkKLQlib29sICJTdXBwb3J0IENlbnRhdXIgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAotCWRlcGVuZHMgb24gNjRCSVQKIAktLS1oZWxwLS0tCiAJICBUaGlzIGVuYWJsZXMgZGV0ZWN0aW9uLCB0dW5pbmdzIGFuZCBxdWlya3MgZm9yIENlbnRhdXIgcHJvY2Vzc29ycwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwppbmRleCBmZGI0NWRmLi5kODM1OWU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gveDg2L0tjb25maWcuZGVidWcKQEAgLTcyLDE0ICs3Miw2IEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKLWNvbmZpZyBERUJVR19QQUdFQUxMT0MKLQlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAotCS0tLWhlbHAtLS0KLQkgIFVubWFwIHBhZ2VzIGZyb20gdGhlIGtlcm5lbCBsaW5lYXIgbWFwcGluZyBhZnRlciBmcmVlX3BhZ2VzKCkuCi0JICBUaGlzIHJlc3VsdHMgaW4gYSBsYXJnZSBzbG93ZG93biwgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcwotCSAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgotCiBjb25maWcgREVCVUdfUEVSX0NQVV9NQVBTCiAJYm9vbCAiRGVidWcgYWNjZXNzIHRvIHBlcl9jcHUgbWFwcyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCAxODM2MTkxLi5mMDVkOGM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMTUzLDM0ICsxNTMsMjMgQEAKIAogYm9vdCA6PSBhcmNoL3g4Ni9ib290CiAKLVBIT05ZICs9IHpJbWFnZSBiekltYWdlIGNvbXByZXNzZWQgemxpbG8gYnpsaWxvIFwKLSAgICAgICAgIHpkaXNrIGJ6ZGlzayBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpc29pbWFnZSBpbnN0YWxsCitCT09UX1RBUkdFVFMgPSBiemxpbG8gYnpkaXNrIGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGlzb2ltYWdlIGluc3RhbGwKKworUEhPTlkgKz0gYnpJbWFnZSAkKEJPT1RfVEFSR0VUUykKIAogIyBEZWZhdWx0IGtlcm5lbCB0byBidWlsZAogYWxsOiBiekltYWdlCiAKICMgS0JVSUxEX0lNQUdFIHNwZWNpZnkgdGFyZ2V0IGltYWdlIGJlaW5nIGJ1aWx0Ci0gICAgICAgICAgICAgICAgICAgIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL2J6SW1hZ2UKLXpJbWFnZSB6bGlsbyB6ZGlzazogS0JVSUxEX0lNQUdFIDo9ICQoYm9vdCkvekltYWdlCitLQlVJTERfSU1BR0UgOj0gJChib290KS9iekltYWdlCiAKLXpJbWFnZSBiekltYWdlOiB2bWxpbnV4CitiekltYWdlOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKEtCVUlMRF9JTUFHRSkKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9hcmNoLyQoVVRTX01BQ0hJTkUpL2Jvb3QKIAkkKFEpbG4gLWZzbiAuLi8uLi94ODYvYm9vdC9iekltYWdlICQob2JqdHJlZSkvYXJjaC8kKFVUU19NQUNISU5FKS9ib290LyRACiAKLWNvbXByZXNzZWQ6IHpJbWFnZQotCi16bGlsbyBiemxpbG86IHZtbGludXgKLQkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpIEJPT1RJTUFHRT0kKEtCVUlMRF9JTUFHRSkgemxpbG8KLQotemRpc2sgYnpkaXNrOiB2bWxpbnV4Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIHpkaXNrCi0KLWZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGlzb2ltYWdlOiB2bWxpbnV4Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpICRACi0KLWluc3RhbGw6Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIGluc3RhbGwKKyQoQk9PVF9UQVJHRVRTKTogdm1saW51eAorCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJEAKIAogUEhPTlkgKz0gdmRzb19pbnN0YWxsCiB2ZHNvX2luc3RhbGw6CkBAIC0yMDUsNyArMTk0LDMgQEAKICAgZWNobyAgJyAgICAgICAgICAgICAgICAgIEZEQVJHUz0iLi4uIiAgYXJndW1lbnRzIGZvciB0aGUgYm9vdGVkIGtlcm5lbCcKICAgZWNobyAgJyAgICAgICAgICAgICAgICAgIEZESU5JVFJEPWZpbGUgaW5pdHJkIGZvciB0aGUgYm9vdGVkIGtlcm5lbCcKIGVuZGVmCi0KLUNMRUFOX0ZJTEVTICs9IGFyY2gveDg2L2Jvb3QvZmRpbWFnZSBcCi0JICAgICAgIGFyY2gveDg2L2Jvb3QvaW1hZ2UuaXNvIFwKLQkgICAgICAgYXJjaC94ODYvYm9vdC9tdG9vbHMuY29uZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggYzcwZWZmNi4uZmI3MzdjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCkBAIC02LDI2ICs2LDI0IEBACiAjIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIENvcHlyaWdodCAoQykgMTk5NCBieSBMaW51cyBUb3J2YWxkcworIyBDaGFuZ2VkIGJ5IG1hbnksIG1hbnkgY29udHJpYnV0b3JzIG92ZXIgdGhlIHllYXJzLgogIwogCiAjIFJPT1RfREVWIHNwZWNpZmllcyB0aGUgZGVmYXVsdCByb290LWRldmljZSB3aGVuIG1ha2luZyB0aGUgaW1hZ2UuCiAjIFRoaXMgY2FuIGJlIGVpdGhlciBGTE9QUFksIENVUlJFTlQsIC9kZXYveHh4eCBvciBlbXB0eSwgaW4gd2hpY2ggY2FzZQogIyB0aGUgZGVmYXVsdCBvZiBGTE9QUFkgaXMgdXNlZCBieSAnYnVpbGQnLgogCi1ST09UX0RFViA6PSBDVVJSRU5UCitST09UX0RFVgk6PSBDVVJSRU5UCiAKICMgSWYgeW91IHdhbnQgdG8gcHJlc2V0IHRoZSBTVkdBIG1vZGUsIHVuY29tbWVudCB0aGUgbmV4dCBsaW5lIGFuZAogIyBzZXQgU1ZHQV9NT0RFIHRvIHdoYXRldmVyIG51bWJlciB5b3Ugd2FudC4KICMgU2V0IGl0IHRvIC1EU1ZHQV9NT0RFPU5PUk1BTF9WR0EgaWYgeW91IGp1c3Qgd2FudCB0aGUgRUdBL1ZHQSBtb2RlLgogIyBUaGUgbnVtYmVyIGlzIHRoZSBzYW1lIGFzIHlvdSB3b3VsZCBvcmRpbmFyaWx5IHByZXNzIGF0IGJvb3R1cC4KIAotU1ZHQV9NT0RFIDo9IC1EU1ZHQV9NT0RFPU5PUk1BTF9WR0EKK1NWR0FfTU9ERQk6PSAtRFNWR0FfTU9ERT1OT1JNQUxfVkdBCiAKLSMgSWYgeW91IHdhbnQgdGhlIFJBTSBkaXNrIGRldmljZSwgZGVmaW5lIHRoaXMgdG8gYmUgdGhlIHNpemUgaW4gYmxvY2tzLgotCi0jUkFNRElTSyA6PSAtRFJBTURJU0s9NTEyCi0KLXRhcmdldHMJCTo9IHZtbGludXguYmluIHNldHVwLmJpbiBzZXR1cC5lbGYgekltYWdlIGJ6SW1hZ2UKK3RhcmdldHMJCTo9IHZtbGludXguYmluIHNldHVwLmJpbiBzZXR1cC5lbGYgYnpJbWFnZQordGFyZ2V0cwkJKz0gZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaW1hZ2UuaXNvIG10b29scy5jb25mCiBzdWJkaXItCQk6PSBjb21wcmVzc2VkCiAKIHNldHVwLXkJCSs9IGEyMC5vIGNtZGxpbmUubyBjb3B5Lm8gY3B1Lm8gY3B1Y2hlY2subyBlZGQubwpAQCAtNzEsMTcgKzY5LDEzIEBACiBLQlVJTERfQ0ZMQUdTICs9ICAgJChjYWxsIGNjLW9wdGlvbiwtbTMyKQogS0JVSUxEX0FGTEFHUwk6PSAkKEtCVUlMRF9DRkxBR1MpIC1EX19BU1NFTUJMWV9fCiAKLSQob2JqKS96SW1hZ2U6ICBhc2ZsYWdzLXkgOj0gJChTVkdBX01PREUpICQoUkFNRElTSykKLSQob2JqKS9iekltYWdlOiBjY2ZsYWdzLXkgOj0gLURfX0JJR19LRVJORUxfXwotJChvYmopL2J6SW1hZ2U6IGFzZmxhZ3MteSA6PSAkKFNWR0FfTU9ERSkgJChSQU1ESVNLKSAtRF9fQklHX0tFUk5FTF9fCi0kKG9iaikvYnpJbWFnZTogQlVJTERGTEFHUyAgIDo9IC1iCiskKG9iaikvYnpJbWFnZTogYXNmbGFncy15ICA6PSAkKFNWR0FfTU9ERSkKIAogcXVpZXRfY21kX2ltYWdlID0gQlVJTEQgICAkQAotY21kX2ltYWdlID0gJChvYmopL3Rvb2xzL2J1aWxkICQoQlVJTERGTEFHUykgJChvYmopL3NldHVwLmJpbiBcCi0JICAgICQob2JqKS92bWxpbnV4LmJpbiAkKFJPT1RfREVWKSA+ICRACitjbWRfaW1hZ2UgPSAkKG9iaikvdG9vbHMvYnVpbGQgJChvYmopL3NldHVwLmJpbiAkKG9iaikvdm1saW51eC5iaW4gXAorCSQoUk9PVF9ERVYpID4gJEAKIAotJChvYmopL3pJbWFnZSAkKG9iaikvYnpJbWFnZTogJChvYmopL3NldHVwLmJpbiBcCi0JCQkgICAgICAkKG9iaikvdm1saW51eC5iaW4gJChvYmopL3Rvb2xzL2J1aWxkIEZPUkNFCiskKG9iaikvYnpJbWFnZTogJChvYmopL3NldHVwLmJpbiAkKG9iaikvdm1saW51eC5iaW4gJChvYmopL3Rvb2xzL2J1aWxkIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsaW1hZ2UpCiAJQGVjaG8gJ0tlcm5lbDogJEAgaXMgcmVhZHknICcgKCMnYGNhdCAudmVyc2lvbmAnKScKIApAQCAtMTE2LDkgKzExMCwxMSBAQAogJChvYmopL2NvbXByZXNzZWQvdm1saW51eDogRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKG9iaikvY29tcHJlc3NlZCAkQAogCi0jIFNldCB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYXBwZW5kIGFyZ3VtZW50cyB0byB0aGUgemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKKyMgU2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gcGFzcyBhcHBlbmQgYXJndW1lbnRzIHRvIHRoZQorIyBiemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKIEZEQVJHUyA9Ci0jIFNldCB0aGlzIGlmIHlvdSB3YW50IGFuIGluaXRyZCBpbmNsdWRlZCB3aXRoIHRoZSB6ZGlzay9mZGltYWdlL2lzb2ltYWdlIGtlcm5lbAorIyBTZXQgdGhpcyBpZiB5b3Ugd2FudCBhbiBpbml0cmQgaW5jbHVkZWQgd2l0aCB0aGUKKyMgYnpkaXNrL2ZkaW1hZ2UvaXNvaW1hZ2Uga2VybmVsCiBGRElOSVRSRCA9CiAKIGltYWdlX2NtZGxpbmUgPSBkZWZhdWx0IGxpbnV4ICQoRkRBUkdTKSAkKGlmICQoRkRJTklUUkQpLGluaXRyZD1pbml0cmQuaW1nLCkKQEAgLTEyNyw3ICsxMjMsNyBAQAogCXNlZCAtZSAnc3xAT0JKQHwkKG9iail8ZycgPCAkPCA+ICRACiAKICMgVGhpcyByZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gL2Rldi9mZDAKLXpkaXNrOiAkKEJPT1RJTUFHRSkgJChvYmopL210b29scy5jb25mCitiemRpc2s6ICQob2JqKS9iekltYWdlICQob2JqKS9tdG9vbHMuY29uZgogCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtZm9ybWF0IGE6CQkJOyBzeW5jCiAJc3lzbGludXggL2Rldi9mZDAJCQkJCTsgc3luYwogCWVjaG8gJyQoaW1hZ2VfY21kbGluZSknIHwgXApAQCAtMTM1LDEwICsxMzEsMTAgQEAKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJyQoRkRJTklUUkQpJyBhOmluaXRyZC5pbWcgOyBcCiAJZmkKLQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChCT09USU1BR0UpIGE6bGludXgJOyBzeW5jCisJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQob2JqKS9iekltYWdlIGE6bGludXgJOyBzeW5jCiAKICMgVGhlc2UgcmVxdWlyZSBiZWluZyByb290IG9yIGhhdmluZyBzeXNsaW51eCAyLjAyIG9yIGhpZ2hlciBpbnN0YWxsZWQKLWZkaW1hZ2UgZmRpbWFnZTE0NDogJChCT09USU1BR0UpICQob2JqKS9tdG9vbHMuY29uZgorZmRpbWFnZSBmZGltYWdlMTQ0OiAkKG9iaikvYnpJbWFnZSAkKG9iaikvbXRvb2xzLmNvbmYKIAlkZCBpZj0vZGV2L3plcm8gb2Y9JChvYmopL2ZkaW1hZ2UgYnM9MTAyNCBjb3VudD0xNDQwCiAJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1mb3JtYXQgdjoJCQk7IHN5bmMKIAlzeXNsaW51eCAkKG9iaikvZmRpbWFnZQkJCQkJOyBzeW5jCkBAIC0xNDcsOSArMTQzLDkgQEAKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJyQoRkRJTklUUkQpJyB2OmluaXRyZC5pbWcgOyBcCiAJZmkKLQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChCT09USU1BR0UpIHY6bGludXgJOyBzeW5jCisJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQob2JqKS9iekltYWdlIHY6bGludXgJOyBzeW5jCiAKLWZkaW1hZ2UyODg6ICQoQk9PVElNQUdFKSAkKG9iaikvbXRvb2xzLmNvbmYKK2ZkaW1hZ2UyODg6ICQob2JqKS9iekltYWdlICQob2JqKS9tdG9vbHMuY29uZgogCWRkIGlmPS9kZXYvemVybyBvZj0kKG9iaikvZmRpbWFnZSBicz0xMDI0IGNvdW50PTI4ODAKIAlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWZvcm1hdCB3OgkJCTsgc3luYwogCXN5c2xpbnV4ICQob2JqKS9mZGltYWdlCQkJCQk7IHN5bmMKQEAgLTE1OCw5ICsxNTQsOSBAQAogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAnJChGRElOSVRSRCknIHc6aW5pdHJkLmltZyA7IFwKIAlmaQotCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKEJPT1RJTUFHRSkgdzpsaW51eAk7IHN5bmMKKwlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChvYmopL2J6SW1hZ2UgdzpsaW51eAk7IHN5bmMKIAotaXNvaW1hZ2U6ICQoQk9PVElNQUdFKQoraXNvaW1hZ2U6ICQob2JqKS9iekltYWdlCiAJLXJtIC1yZiAkKG9iaikvaXNvaW1hZ2UKIAlta2RpciAkKG9iaikvaXNvaW1hZ2UKIAlmb3IgaSBpbiBsaWIgbGliNjQgc2hhcmUgZW5kIDsgZG8gXApAQCAtMTcwLDcgKzE2Niw3IEBACiAJCWZpIDsgXAogCQlpZiBbICQkaSA9IGVuZCBdIDsgdGhlbiBleGl0IDEgOyBmaSA7IFwKIAlkb25lCi0JY3AgJChCT09USU1BR0UpICQob2JqKS9pc29pbWFnZS9saW51eAorCWNwICQob2JqKS9iekltYWdlICQob2JqKS9pc29pbWFnZS9saW51eAogCWVjaG8gJyQoaW1hZ2VfY21kbGluZSknID4gJChvYmopL2lzb2ltYWdlL2lzb2xpbnV4LmNmZwogCWlmIFsgLWYgJyQoRkRJTklUUkQpJyBdIDsgdGhlbiBcCiAJCWNwICckKEZESU5JVFJEKScgJChvYmopL2lzb2ltYWdlL2luaXRyZC5pbWcgOyBcCkBAIC0xODEsMTIgKzE3NywxMyBAQAogCWlzb2h5YnJpZCAkKG9iaikvaW1hZ2UuaXNvIDI+L2Rldi9udWxsIHx8IHRydWUKIAlybSAtcmYgJChvYmopL2lzb2ltYWdlCiAKLXpsaWxvOiAkKEJPT1RJTUFHRSkKK2J6bGlsbzogJChvYmopL2J6SW1hZ2UKIAlpZiBbIC1mICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6IF07IHRoZW4gbXYgJChJTlNUQUxMX1BBVEgpL3ZtbGludXogJChJTlNUQUxMX1BBVEgpL3ZtbGludXoub2xkOyBmaQogCWlmIFsgLWYgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAgXTsgdGhlbiBtdiAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm9sZDsgZmkKLQljYXQgJChCT09USU1BR0UpID4gJChJTlNUQUxMX1BBVEgpL3ZtbGludXoKKwljYXQgJChvYmopL2J6SW1hZ2UgPiAkKElOU1RBTExfUEFUSCkvdm1saW51egogCWNwIFN5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpLwogCWlmIFsgLXggL3NiaW4vbGlsbyBdOyB0aGVuIC9zYmluL2xpbG87IGVsc2UgL2V0Yy9saWxvL2luc3RhbGw7IGZpCiAKIGluc3RhbGw6Ci0Jc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQoQk9PVElNQUdFKSBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCisJc2ggJChzcmN0cmVlKS8kKHNyYykvaW5zdGFsbC5zaCAkKEtFUk5FTFJFTEVBU0UpICQob2JqKS9iekltYWdlIFwKKwkJU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUyBiL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKaW5kZXggN2NjZmY0OC4uNWQ4NGQxYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9oZWFkZXIuUworKysgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCkBAIC0yNCwxMiArMjQsOCBAQAogI2luY2x1ZGUgImJvb3QuaCIKICNpbmNsdWRlICJvZmZzZXRzLmgiCiAKLVNFVFVQU0VDVFMJPSA0CQkJLyogZGVmYXVsdCBuciBvZiBzZXR1cC1zZWN0b3JzICovCiBCT09UU0VHCQk9IDB4MDdDMAkJLyogb3JpZ2luYWwgYWRkcmVzcyBvZiBib290LXNlY3RvciAqLwotU1lTU0VHCQk9IERFRl9TWVNTRUcJCS8qIHN5c3RlbSBsb2FkZWQgYXQgMHgxMDAwMCAoNjU1MzYpICovCi1TWVNTSVpFCQk9IERFRl9TWVNTSVpFCQkvKiBzeXN0ZW0gc2l6ZTogIyBvZiAxNi1ieXRlIGNsaWNrcyAqLwotCQkJCQkvKiB0byBiZSBsb2FkZWQgKi8KLVJPT1RfREVWCT0gMAkJCS8qIFJPT1RfREVWIGlzIG5vdyB3cml0dGVuIGJ5ICJidWlsZCIgKi8KK1NZU1NFRwkJPSAweDEwMDAJCS8qIGhpc3RvcmljYWwgbG9hZCBhZGRyZXNzID4+IDQgKi8KIAogI2lmbmRlZiBTVkdBX01PREUKICNkZWZpbmUgU1ZHQV9NT0RFIEFTS19WR0EKQEAgLTk3LDEyICs5MywxMiBAQAogCS5zZWN0aW9uICIuaGVhZGVyIiwgImEiCiAJLmdsb2JsCWhkcgogaGRyOgotc2V0dXBfc2VjdHM6CS5ieXRlIFNFVFVQU0VDVFMKK3NldHVwX3NlY3RzOgkuYnl0ZSAwCQkJLyogRmlsbGVkIGluIGJ5IGJ1aWxkLmMgKi8KIHJvb3RfZmxhZ3M6CS53b3JkIFJPT1RfUkRPTkxZCi1zeXNzaXplOgkubG9uZyBTWVNTSVpFCi1yYW1fc2l6ZToJLndvcmQgUkFNRElTSworc3lzc2l6ZToJLmxvbmcgMAkJCS8qIEZpbGxlZCBpbiBieSBidWlsZC5jICovCityYW1fc2l6ZToJLndvcmQgMAkJCS8qIE9ic29sZXRlICovCiB2aWRfbW9kZToJLndvcmQgU1ZHQV9NT0RFCi1yb290X2RldjoJLndvcmQgUk9PVF9ERVYKK3Jvb3RfZGV2Ogkud29yZCAwCQkJLyogRmlsbGVkIGluIGJ5IGJ1aWxkLmMgKi8KIGJvb3RfZmxhZzoJLndvcmQgMHhBQTU1CiAKIAkjIG9mZnNldCA1MTIsIGVudHJ5IHBvaW50CkBAIC0xMjMsMTQgKzExOSwxNSBAQAogCQkJCQkjIG9yIGVsc2Ugb2xkIGxvYWRsaW4tMS41IHdpbGwgZmFpbCkKIAkJLmdsb2JsIHJlYWxtb2RlX3N3dGNoCiByZWFsbW9kZV9zd3RjaDoJLndvcmQJMCwgMAkJIyBkZWZhdWx0X3N3aXRjaCwgU0VUVVBTRUcKLXN0YXJ0X3N5c19zZWc6CS53b3JkCVNZU1NFRworc3RhcnRfc3lzX3NlZzoJLndvcmQJU1lTU0VHCQkjIG9ic29sZXRlIGFuZCBtZWFuaW5nbGVzcywgYnV0IGp1c3QKKwkJCQkJIyBpbiBjYXNlIHNvbWV0aGluZyBkZWNpZGVkIHRvICJ1c2UiIGl0CiAJCS53b3JkCWtlcm5lbF92ZXJzaW9uLTUxMiAjIHBvaW50aW5nIHRvIGtlcm5lbCB2ZXJzaW9uIHN0cmluZwogCQkJCQkjIGFib3ZlIHNlY3Rpb24gb2YgaGVhZGVyIGlzIGNvbXBhdGlibGUKIAkJCQkJIyB3aXRoIGxvYWRsaW4tMS41IChoZWFkZXIgdjEuNSkuIERvbid0CiAJCQkJCSMgY2hhbmdlIGl0LgogCi10eXBlX29mX2xvYWRlcjoJLmJ5dGUJMAkJIyA9IDAsIG9sZCBvbmUgKExJTE8sIExvYWRsaW4sCi0JCQkJCSMgICAgICBCb290bGluLCBTWVNMWCwgYm9vdHNlY3QuLi4pCit0eXBlX29mX2xvYWRlcjoJLmJ5dGUJMAkJIyAwIG1lYW5zIGFuY2llbnQgYm9vdGxvYWRlciwgbmV3ZXIKKwkJCQkJIyBib290bG9hZGVycyBrbm93IHRvIGNoYW5nZSB0aGlzLgogCQkJCQkjIFNlZSBEb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQgZm9yCiAJCQkJCSMgYXNzaWduZWQgaWRzCiAKQEAgLTE0MiwxMSArMTM5LDcgQEAKIAkJCQkJIyBzcGFjZSBiZWhpbmQgc2V0dXAuUyBjYW4gYmUgdXNlZCBmb3IKIAkJCQkJIyBoZWFwIHB1cnBvc2VzLgogCQkJCQkjIE9ubHkgdGhlIGxvYWRlciBrbm93cyB3aGF0IGlzIGZyZWUKLSNpZm5kZWYgX19CSUdfS0VSTkVMX18KLQkJLmJ5dGUJMAotI2Vsc2UKIAkJLmJ5dGUJTE9BREVEX0hJR0gKLSNlbmRpZgogCiBzZXR1cF9tb3ZlX3NpemU6IC53b3JkICAweDgwMDAJCSMgc2l6ZSB0byBtb3ZlLCB3aGVuIHNldHVwIGlzIG5vdAogCQkJCQkjIGxvYWRlZCBhdCAweDkwMDAwLiBXZSB3aWxsIG1vdmUgc2V0dXAKQEAgLTE1NywxMSArMTUwLDcgQEAKIAogY29kZTMyX3N0YXJ0OgkJCQkjIGhlcmUgbG9hZGVycyBjYW4gcHV0IGEgZGlmZmVyZW50CiAJCQkJCSMgc3RhcnQgYWRkcmVzcyBmb3IgMzItYml0IGNvZGUuCi0jaWZuZGVmIF9fQklHX0tFUk5FTF9fCi0JCS5sb25nCTB4MTAwMAkJIyAgIDB4MTAwMCA9IGRlZmF1bHQgZm9yIHpJbWFnZQotI2Vsc2UKIAkJLmxvbmcJMHgxMDAwMDAJIyAweDEwMDAwMCA9IGRlZmF1bHQgZm9yIGJpZyBrZXJuZWwKLSNlbmRpZgogCiByYW1kaXNrX2ltYWdlOgkubG9uZwkwCQkjIGFkZHJlc3Mgb2YgbG9hZGVkIHJhbWRpc2sgaW1hZ2UKIAkJCQkJIyBIZXJlIHRoZSBsb2FkZXIgcHV0cyB0aGUgMzItYml0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwppbmRleCA4YzNjMjVmLi41MDU0YzJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKQEAgLTIsNiArMiw3IEBACiAgKgogICogICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgTGludXMgVG9ydmFsZHMKICAqICAgQ29weXJpZ2h0IDIwMDcgclBhdGgsIEluYy4gLSBBbGwgUmlnaHRzIFJlc2VydmVkCisgKiAgIENvcHlyaWdodCAyMDA5IEludGVsIENvcnBvcmF0aW9uOyBhdXRob3IgSC4gUGV0ZXIgQW52aW4KICAqCiAgKiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSB1bmRlcgogICogICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KQEAgLTE2LDI0ICsxNywzOCBAQAogCiAjZGVmaW5lIFNNQVAJMHg1MzRkNDE1MAkvKiBBU0NJSSAiU01BUCIgKi8KIAorc3RydWN0IGU4MjBfZXh0X2VudHJ5IHsKKwlzdHJ1Y3QgZTgyMGVudHJ5IHN0ZDsKKwl1MzIgZXh0X2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RhdGljIGludCBkZXRlY3RfbWVtb3J5X2U4MjAodm9pZCkKIHsKIAlpbnQgY291bnQgPSAwOwogCXUzMiBuZXh0ID0gMDsKLQl1MzIgc2l6ZSwgaWQ7CisJdTMyIHNpemUsIGlkLCBlZGk7CiAJdTggZXJyOwogCXN0cnVjdCBlODIwZW50cnkgKmRlc2MgPSBib290X3BhcmFtcy5lODIwX21hcDsKKwlzdGF0aWMgc3RydWN0IGU4MjBfZXh0X2VudHJ5IGJ1ZjsgLyogc3RhdGljIHNvIGl0IGlzIHplcm9lZCAqLworCisJLyoKKwkgKiBTZXQgdGhpcyBoZXJlIHNvIHRoYXQgaWYgdGhlIEJJT1MgZG9lc24ndCBjaGFuZ2UgdGhpcyBmaWVsZAorCSAqIGJ1dCBzdGlsbCBkb2Vzbid0IGNoYW5nZSAlZWN4LCB3ZSdyZSBzdGlsbCBva2F5Li4uCisJICovCisJYnVmLmV4dF9mbGFncyA9IDE7CiAKIAlkbyB7Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IGU4MjBlbnRyeSk7CisJCXNpemUgPSBzaXplb2YgYnVmOwogCi0JCS8qIEltcG9ydGFudDogJWVkeCBpcyBjbG9iYmVyZWQgYnkgc29tZSBCSU9TZXMsCi0JCSAgIHNvIGl0IG11c3QgYmUgZWl0aGVyIHVzZWQgZm9yIHRoZSBlcnJvciBvdXRwdXQKLQkJICAgb3IgZXhwbGljaXRseSBtYXJrZWQgY2xvYmJlcmVkLiAqLwotCQlhc20oImludCAkMHgxNTsgc2V0YyAlMCIKKwkJLyogSW1wb3J0YW50OiAlZWR4IGFuZCAlZXNpIGFyZSBjbG9iYmVyZWQgYnkgc29tZSBCSU9TZXMsCisJCSAgIHNvIHRoZXkgbXVzdCBiZSBlaXRoZXIgdXNlZCBmb3IgdGhlIGVycm9yIG91dHB1dAorCQkgICBvciBleHBsaWNpdGx5IG1hcmtlZCBjbG9iYmVyZWQuICBHaXZlbiB0aGF0LCBhc3N1bWUgdGhlcmUKKwkJICAgaXMgc29tZXRoaW5nIG91dCB0aGVyZSBjbG9iYmVyaW5nICVlYnAgYW5kICVlZGksIHRvby4gKi8KKwkJYXNtKCJwdXNobCAlJWVicDsgaW50ICQweDE1OyBwb3BsICUlZWJwOyBzZXRjICUwIgogCQkgICAgOiAiPWQiIChlcnIpLCAiK2IiIChuZXh0KSwgIj1hIiAoaWQpLCAiK2MiIChzaXplKSwKLQkJICAgICAgIj1tIiAoKmRlc2MpCi0JCSAgICA6ICJEIiAoZGVzYyksICJkIiAoU01BUCksICJhIiAoMHhlODIwKSk7CisJCSAgICAgICI9RCIgKGVkaSksICIrbSIgKGJ1ZikKKwkJICAgIDogIkQiICgmYnVmKSwgImQiIChTTUFQKSwgImEiICgweGU4MjApCisJCSAgICA6ICJlc2kiKTsKIAogCQkvKiBCSU9TZXMgd2hpY2ggdGVybWluYXRlIHRoZSBjaGFpbiB3aXRoIENGID0gMSBhcyBvcHBvc2VkCiAJCSAgIHRvICVlYnggPSAwIGRvbid0IGFsd2F5cyByZXBvcnQgdGhlIFNNQVAgc2lnbmF0dXJlIG9uCkBAIC01MSw4ICs2NiwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQkvKiBBQ1BJIDMuMCBhZGRlZCB0aGUgZXh0ZW5kZWQgZmxhZ3Mgc3VwcG9ydC4gIElmIGJpdCAwCisJCSAgIGluIHRoZSBleHRlbmRlZCBmbGFncyBpcyB6ZXJvLCB3ZSdyZSBzdXBwb3NlZCB0byBzaW1wbHkKKwkJICAgaWdub3JlIHRoZSBlbnRyeSAtLSBhIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlISAqLworCQlpZiAoc2l6ZSA+IDIwICYmICEoYnVmLmV4dF9mbGFncyAmIDEpKQorCQkJY29udGludWU7CisKKwkJKmRlc2MrKyA9IGJ1Zi5zdGQ7CiAJCWNvdW50Kys7Ci0JCWRlc2MrKzsKIAl9IHdoaWxlIChuZXh0ICYmIGNvdW50IDwgQVJSQVlfU0laRShib290X3BhcmFtcy5lODIwX21hcCkpOwogCiAJcmV0dXJuIGJvb3RfcGFyYW1zLmU4MjBfZW50cmllcyA9IGNvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9wbS5jIGIvYXJjaC94ODYvYm9vdC9wbS5jCmluZGV4IDg1YTFjZDguLjgwNjJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvcG0uYworKysgYi9hcmNoL3g4Ni9ib290L3BtLmMKQEAgLTMzLDQ3ICszMyw2IEBACiB9CiAKIC8qCi0gKiBBIHpJbWFnZSBrZXJuZWwgaXMgbG9hZGVkIGF0IDB4MTAwMDAgYnV0IHdhbnRzIHRvIHJ1biBhdCAweDEwMDAuCi0gKiBBIGJ6SW1hZ2Uga2VybmVsIGlzIGxvYWRlZCBhbmQgcnVucyBhdCAweDEwMDAwMC4KLSAqLwotc3RhdGljIHZvaWQgbW92ZV9rZXJuZWxfYXJvdW5kKHZvaWQpCi17Ci0JLyogTm90ZTogcmVseSBvbiB0aGUgY29tcGlsZS10aW1lIG9wdGlvbiBoZXJlIHJhdGhlciB0aGFuCi0JICAgdGhlIExPQURFRF9ISUdIIGZsYWcuICBUaGUgUWVtdSBrZXJuZWwgbG9hZGVyIHVuY29uZGl0aW9uYWxseQotCSAgIHNldHMgdGhlIGxvYWRmbGFncyB0byB6ZXJvLiAqLwotI2lmbmRlZiBfX0JJR19LRVJORUxfXwotCXUxNiBkc3Rfc2VnLCBzcmNfc2VnOwotCXUzMiBzeXNzaXplOwotCi0JZHN0X3NlZyA9ICAweDEwMDAgPj4gNDsKLQlzcmNfc2VnID0gMHgxMDAwMCA+PiA0OwotCXN5c3NpemUgPSBib290X3BhcmFtcy5oZHIuc3lzc2l6ZTsgLyogU2l6ZSBpbiAxNi1ieXRlIHBhcmFncmFwaHMgKi8KLQotCXdoaWxlIChzeXNzaXplKSB7Ci0JCWludCBwYXJhcyAgPSAoc3lzc2l6ZSA+PSAweDEwMDApID8gMHgxMDAwIDogc3lzc2l6ZTsKLQkJaW50IGR3b3JkcyA9IHBhcmFzIDw8IDI7Ci0KLQkJYXNtIHZvbGF0aWxlKCJwdXNodyAlJWVzIDsgIgotCQkJICAgICAicHVzaHcgJSVkcyA7ICIKLQkJCSAgICAgIm1vdncgJTEsJSVlcyA7ICIKLQkJCSAgICAgIm1vdncgJTIsJSVkcyA7ICIKLQkJCSAgICAgInhvcncgJSVkaSwlJWRpIDsgIgotCQkJICAgICAieG9ydyAlJXNpLCUlc2kgOyAiCi0JCQkgICAgICJyZXA7bW92c2wgOyAiCi0JCQkgICAgICJwb3B3ICUlZHMgOyAiCi0JCQkgICAgICJwb3B3ICUlZXMiCi0JCQkgICAgIDogIitjIiAoZHdvcmRzKQotCQkJICAgICA6ICJyIiAoZHN0X3NlZyksICJyIiAoc3JjX3NlZykKLQkJCSAgICAgOiAiZXNpIiwgImVkaSIpOwotCi0JCXN5c3NpemUgLT0gcGFyYXM7Ci0JCWRzdF9zZWcgKz0gcGFyYXM7Ci0JCXNyY19zZWcgKz0gcGFyYXM7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCiAgKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBsZWdhY3kgUElDLgogICovCiBzdGF0aWMgdm9pZCBtYXNrX2FsbF9pbnRlcnJ1cHRzKHZvaWQpCkBAIC0xNDcsOSArMTA2LDYgQEAKIAkvKiBIb29rIGJlZm9yZSBsZWF2aW5nIHJlYWwgbW9kZSwgYWxzbyBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCiAJcmVhbG1vZGVfc3dpdGNoX2hvb2soKTsKIAotCS8qIE1vdmUgdGhlIGtlcm5lbC9zZXR1cCB0byB0aGVpciBmaW5hbCByZXN0aW5nIHBsYWNlcyAqLwotCW1vdmVfa2VybmVsX2Fyb3VuZCgpOwotCiAJLyogRW5hYmxlIHRoZSBBMjAgZ2F0ZSAqLwogCWlmIChlbmFibGVfYTIwKCkpIHsKIAkJcHV0cygiQTIwIGdhdGUgbm90IHJlc3BvbmRpbmcsIHVuYWJsZSB0byBib290Li4uXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMgYi9hcmNoL3g4Ni9ib290L3BtanVtcC5TCmluZGV4IDAxOWMxN2EuLjNlMGVkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKKysrIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwpAQCAtNDcsNiArNDcsNyBAQAogRU5EUFJPQyhwcm90ZWN0ZWRfbW9kZV9qdW1wKQogCiAJLmNvZGUzMgorCS5zZWN0aW9uICIudGV4dDMyIiwiYXgiCiBHTE9CQUwoaW5fcG0zMikKIAkjIFNldCB1cCBkYXRhIHNlZ21lbnRzIGZvciBmbGF0IDMyLWJpdCBtb2RlCiAJbW92bAklZWN4LCAlZHMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCmluZGV4IGRmOTIzNGIuLmJiOGRjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKKysrIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZApAQCAtMTcsNyArMTcsOCBAQAogCS5oZWFkZXIJCTogeyAqKC5oZWFkZXIpIH0KIAkuaW5pdHRleHQJOiB7ICooLmluaXR0ZXh0KSB9CiAJLmluaXRkYXRhCTogeyAqKC5pbml0ZGF0YSkgfQotCS50ZXh0CQk6IHsgKigudGV4dCopIH0KKwkudGV4dAkJOiB7ICooLnRleHQpIH0KKwkudGV4dDMyCQk6IHsgKigudGV4dDMyKSB9CiAKIAkuID0gQUxJR04oMTYpOwogCS5yb2RhdGEJCTogeyAqKC5yb2RhdGEqKSB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMgYi9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMKaW5kZXggNDRkYzE5Mi4uZWUzYTRlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7Ci0JZGllKCJVc2FnZTogYnVpbGQgWy1iXSBzZXR1cCBzeXN0ZW0gW3Jvb3RkZXZdIFs+IGltYWdlXSIpOworCWRpZSgiVXNhZ2U6IGJ1aWxkIHNldHVwIHN5c3RlbSBbcm9vdGRldl0gWz4gaW1hZ2VdIik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAJdm9pZCAqa2VybmVsOwogCXUzMiBjcmMgPSAweGZmZmZmZmZmVUw7CiAKLQlpZiAoYXJnYyA+IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWIiKSkKLQkgIHsKLQkgICAgaXNfYmlnX2tlcm5lbCA9IDE7Ci0JICAgIGFyZ2MtLSwgYXJndisrOwotCSAgfQogCWlmICgoYXJnYyA8IDMpIHx8IChhcmdjID4gNCkpCiAJCXVzYWdlKCk7CiAJaWYgKGFyZ2MgPiAzKSB7CkBAIC0yMTYsOCArMjExLDYgQEAKIAkJZGllKCJVbmFibGUgdG8gbW1hcCAnJXMnOiAlbSIsIGFyZ3ZbMl0pOwogCS8qIE51bWJlciBvZiAxNi1ieXRlIHBhcmFncmFwaHMsIGluY2x1ZGluZyBzcGFjZSBmb3IgYSA0LWJ5dGUgQ1JDICovCiAJc3lzX3NpemUgPSAoc3ogKyAxNSArIDQpIC8gMTY7Ci0JaWYgKCFpc19iaWdfa2VybmVsICYmIHN5c19zaXplID4gREVGX1NZU1NJWkUpCi0JCWRpZSgiU3lzdGVtIGlzIHRvbyBiaWcuIFRyeSB1c2luZyBiekltYWdlIG9yIG1vZHVsZXMuIik7CiAKIAkvKiBQYXRjaCB0aGUgc2V0dXAgY29kZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzaXplIHBhcmFtZXRlcnMgKi8KIAlidWZbMHgxZjFdID0gc2V0dXBfc2VjdG9ycy0xOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKaW5kZXggNWQ0NzQyZS4uOTVkODZjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCkBAIC0xMjksNDEgKzEyOSw0NSBAQAogCXJldHVybiAoaW5iKDB4M2NjKSAmIDEpID8gMHgzZDQgOiAweDNiNDsKIH0KIAotc3RhdGljIHZvaWQgdmdhX3NldF80ODBfc2NhbmxpbmVzKGludCBlbmQpCitzdGF0aWMgdm9pZCB2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoaW50IGxpbmVzKQogewotCXUxNiBjcnRjOwotCXU4ICBjc2VsOworCXUxNiBjcnRjOwkJLyogQ1JUQyBiYXNlIGFkZHJlc3MgKi8KKwl1OCAgY3NlbDsJCS8qIENSVEMgbWlzY2VsbGFuZW91cyBvdXRwdXQgcmVnaXN0ZXIgKi8KKwl1OCAgb3ZmdzsJCS8qIENSVEMgb3ZlcmZsb3cgcmVnaXN0ZXIgKi8KKwlpbnQgZW5kID0gbGluZXMtMTsKIAogCWNydGMgPSB2Z2FfY3J0YygpOwogCisJb3ZmdyA9IDB4M2MgfCAoKGVuZCA+PiAoOC0xKSkgJiAweDAyKSB8ICgoZW5kID4+ICg5LTYpKSAmIDB4NDApOworCiAJb3V0X2lkeCgweDBjLCBjcnRjLCAweDExKTsgLyogVmVydGljYWwgc3luYyBlbmQsIHVubG9jayBDUjAtNyAqLwogCW91dF9pZHgoMHgwYiwgY3J0YywgMHgwNik7IC8qIFZlcnRpY2FsIHRvdGFsICovCi0Jb3V0X2lkeCgweDNlLCBjcnRjLCAweDA3KTsgLyogVmVydGljYWwgb3ZlcmZsb3cgKi8KKwlvdXRfaWR4KG92ZncsIGNydGMsIDB4MDcpOyAvKiBWZXJ0aWNhbCBvdmVyZmxvdyAqLwogCW91dF9pZHgoMHhlYSwgY3J0YywgMHgxMCk7IC8qIFZlcnRpY2FsIHN5bmMgc3RhcnQgKi8KLQlvdXRfaWR4KGVuZCwgY3J0YywgMHgxMik7IC8qIFZlcnRpY2FsIGRpc3BsYXkgZW5kICovCisJb3V0X2lkeChlbmQsICBjcnRjLCAweDEyKTsgLyogVmVydGljYWwgZGlzcGxheSBlbmQgKi8KIAlvdXRfaWR4KDB4ZTcsIGNydGMsIDB4MTUpOyAvKiBWZXJ0aWNhbCBibGFuayBzdGFydCAqLwogCW91dF9pZHgoMHgwNCwgY3J0YywgMHgxNik7IC8qIFZlcnRpY2FsIGJsYW5rIGVuZCAqLwogCWNzZWwgPSBpbmIoMHgzY2MpOwogCWNzZWwgJj0gMHgwZDsKIAljc2VsIHw9IDB4ZTI7Ci0Jb3V0Yihjc2VsLCAweDNjYyk7CisJb3V0Yihjc2VsLCAweDNjMik7CiB9CiAKIHN0YXRpYyB2b2lkIHZnYV9zZXRfODB4MzAodm9pZCkKIHsKLQl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMHhkZik7CisJdmdhX3NldF80ODBfc2NhbmxpbmVzKDMwKjE2KTsKIH0KIAogc3RhdGljIHZvaWQgdmdhX3NldF84MHgzNCh2b2lkKQogewogCXZnYV9zZXRfMTRmb250KCk7Ci0JdmdhX3NldF80ODBfc2NhbmxpbmVzKDB4ZGIpOworCXZnYV9zZXRfNDgwX3NjYW5saW5lcygzNCoxNCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZnYV9zZXRfODB4NjAodm9pZCkKIHsKIAl2Z2Ffc2V0Xzhmb250KCk7Ci0JdmdhX3NldF80ODBfc2NhbmxpbmVzKDB4ZGYpOworCXZnYV9zZXRfNDgwX3NjYW5saW5lcyg2MCo4KTsKIH0KIAogc3RhdGljIGludCB2Z2Ffc2V0X21vZGUoc3RydWN0IG1vZGVfaW5mbyAqbW9kZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGRiMGM4MDMuLmE1MDUyMDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtODI4LDQgKzgyOCw2IEBACiAJLnF1YWQgc3lzX2R1cDMJCQkvKiAzMzAgKi8KIAkucXVhZCBzeXNfcGlwZTIKIAkucXVhZCBzeXNfaW5vdGlmeV9pbml0MQorCS5xdWFkIGNvbXBhdF9zeXNfcHJlYWR2CisJLnF1YWQgY29tcGF0X3N5c19wd3JpdGV2CiBpYTMyX3N5c2NhbGxfZW5kOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCmluZGV4IDRlZjk0OWMuLmRmOGEzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfVlNNUAorI2lmZGVmIENPTkZJR19YODZfNjQKIGV4dGVybiBpbnQgaXNfdnNtcF9ib3godm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaXNfdnNtcF9ib3godm9pZCkKQEAgLTEwOCw2ICsxMDgsMTYgQEAKIGV4dGVybiB1NjQgbmF0aXZlX2FwaWNfaWNyX3JlYWQodm9pZCk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1gyQVBJQworLyoKKyAqIE1ha2UgcHJldmlvdXMgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKKyAqIHNlbmRpbmcgdGhlIElQSSB0aHJvdWdoIHgyYXBpYyB3cm1zci4gV2UgbmVlZCBhIHNlcmlhbGl6aW5nIGluc3RydWN0aW9uIG9yCisgKiBtZmVuY2UgZm9yIHRoaXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB4MmFwaWNfd3Jtc3JfZmVuY2Uodm9pZCkKK3sKKwlhc20gdm9sYXRpbGUoIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX2FwaWNfbXNyX3dyaXRlKHUzMiByZWcsIHUzMiB2KQogewogCWlmIChyZWcgPT0gQVBJQ19ERlIgfHwgcmVnID09IEFQSUNfSUQgfHwgcmVnID09IEFQSUNfTERSIHx8CkBAIC0xODQsNiArMTk0LDkgQEAKIHsKIAlyZXR1cm4gMDsKIH0KKworI2RlZmluZQl4MmFwaWMJMAorCiAjZW5kaWYKIAogZXh0ZXJuIGludCBnZXRfcGh5c2ljYWxfYnJvYWRjYXN0KHZvaWQpOwpAQCAtMzc5LDYgKzM5Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2tfQVBJQ19pcnEodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkvKgogCSAqIGFja19BUElDX2lycSgpIGFjdHVhbGx5IGdldHMgY29tcGlsZWQgYXMgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24KIAkgKiAuLi4geXVtbWllLgpAQCAtMzg2LDYgKzQwMCw3IEBACiAKIAkvKiBEb2NzIHNheSB1c2UgMCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KIAlhcGljX3dyaXRlKEFQSUNfRU9JLCAwKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRlZmF1bHRfZ2V0X2FwaWNfaWQodW5zaWduZWQgbG9uZyB4KQpAQCAtNDc0LDEwICs0ODksMTkgQEAKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KHJlYWRfYXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRlZmF1bHRfcGh5c19wa2dfaWQoaW50IGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpCit7CisJcmV0dXJuIGNwdWlkX2FwaWMgPj4gaW5kZXhfbXNiOworfQorCitleHRlcm4gaW50IGRlZmF1bHRfYXBpY2lkX3RvX25vZGUoaW50IGxvZ2ljYWxfYXBpY2lkKTsKKworI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBkZWZhdWx0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKLQlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdOworCXJldHVybiBjcHVtYXNrX2JpdHMoY3B1bWFzaylbMF0gJiBBUElDX0FMTF9DUFVTOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludApAQCAtNDkxLDE1ICs1MTUsNiBAQAogCXJldHVybiAodW5zaWduZWQgaW50KShtYXNrMSAmIG1hc2syICYgbWFzazMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQotewotCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKLX0KLQotZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCk7Ci0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGVmYXVsdF9jaGVja19hcGljaWRfdXNlZChwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCkKIHsKIAlyZXR1cm4gcGh5c2lkX2lzc2V0KGFwaWNpZCwgYml0bWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAppbmRleCA2MzEzNGUzLi5iYzk1MTRmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lCQlBUElDX0VTUl9TRU5ESUxMCTB4MDAwMjAKICNkZWZpbmUJCUFQSUNfRVNSX1JFQ1ZJTEwJMHgwMDA0MAogI2RlZmluZQkJQVBJQ19FU1JfSUxMUkVHQQkweDAwMDgwCisjZGVmaW5lIAlBUElDX0xWVENNQ0kJMHgyZjAKICNkZWZpbmUJQVBJQ19JQ1IJMHgzMDAKICNkZWZpbmUJCUFQSUNfREVTVF9TRUxGCQkweDQwMDAwCiAjZGVmaW5lCQlBUElDX0RFU1RfQUxMSU5DCTB4ODAwMDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaAppbmRleCA2NTI2Y2YwLi42YmEyM2RkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX0FTTV9YODZfQk9PVF9ICiAjZGVmaW5lIF9BU01fWDg2X0JPT1RfSAogCi0vKiBEb24ndCB0b3VjaCB0aGVzZSwgdW5sZXNzIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSdyZSBkb2luZy4gKi8KLSNkZWZpbmUgREVGX1NZU1NFRwkweDEwMDAKLSNkZWZpbmUgREVGX1NZU1NJWkUJMHg3RjAwCi0KIC8qIEludGVybmFsIHN2Z2Egc3RhcnR1cCBjb25zdGFudHMgKi8KICNkZWZpbmUgTk9STUFMX1ZHQQkweGZmZmYJCS8qIDgweDI1IG1vZGUgKi8KICNkZWZpbmUgRVhURU5ERURfVkdBCTB4ZmZmZQkJLyogODB4NTAgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDViMzAxYjcuLmIzODk0YmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTkwLDYgKzkwLDkgQEAKIGludCBzZXRfbWVtb3J5X2FycmF5X3VjKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBhZGRyaW5hcnJheSk7CiBpbnQgc2V0X21lbW9yeV9hcnJheV93Yih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgYWRkcmluYXJyYXkpOwogCitpbnQgc2V0X3BhZ2VzX2FycmF5X3VjKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSk7CitpbnQgc2V0X3BhZ2VzX2FycmF5X3diKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSk7CisKIC8qCiAgKiBGb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIEFQSXMsIGEgZmV3IGZ1bmN0aW9ucwogICogYXJlIHByb3ZpZGVkIHRoYXQgd29yayBvbiBhICJzdHJ1Y3QgcGFnZSIuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVfZGVidWcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdV9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyMjgwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVfZGVidWcuaApAQCAtMCwwICsxLDIyNiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9DUFVfREVCVUdfSAorI2RlZmluZSBfQVNNX1g4Nl9DUFVfREVCVUdfSAorCisvKgorICogQ1BVIHg4NiBhcmNoaXRlY3R1cmUgZGVidWcKKyAqCisgKiBDb3B5cmlnaHQoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKi8KKworLyogUmVnaXN0ZXIgZmxhZ3MgKi8KK2VudW0gY3B1X2RlYnVnX2JpdCB7CisvKiBNb2RlbCBTcGVjaWZpYyBSZWdpc3RlcnMgKE1TUnMpCQkJCQkqLworCUNQVV9NQ19CSVQsCQkJCS8qIE1hY2hpbmUgQ2hlY2sJKi8KKwlDUFVfTU9OSVRPUl9CSVQsCQkJLyogTW9uaXRvcgkJKi8KKwlDUFVfVElNRV9CSVQsCQkJCS8qIFRpbWUJCQkqLworCUNQVV9QTUNfQklULAkJCQkvKiBQZXJmb3JtYW5jZSBNb25pdG9yCSovCisJQ1BVX1BMQVRGT1JNX0JJVCwJCQkvKiBQbGF0Zm9ybQkJKi8KKwlDUFVfQVBJQ19CSVQsCQkJCS8qIEFQSUMJCQkqLworCUNQVV9QT1dFUk9OX0JJVCwJCQkvKiBQb3dlci1vbgkJKi8KKwlDUFVfQ09OVFJPTF9CSVQsCQkJLyogQ29udHJvbAkJKi8KKwlDUFVfRkVBVFVSRVNfQklULAkJCS8qIEZlYXR1cmVzIGNvbnRyb2wJKi8KKwlDUFVfTEJSQU5DSF9CSVQsCQkJLyogTGFzdCBCcmFuY2gJCSovCisJQ1BVX0JJT1NfQklULAkJCQkvKiBCSU9TCQkJKi8KKwlDUFVfRlJFUV9CSVQsCQkJCS8qIEZyZXF1ZW5jeQkJKi8KKwlDUFVfTVRUUl9CSVQsCQkJCS8qIE1UUlIJCQkqLworCUNQVV9QRVJGX0JJVCwJCQkJLyogUGVyZm9ybWFuY2UJCSovCisJQ1BVX0NBQ0hFX0JJVCwJCQkJLyogQ2FjaGUJCSovCisJQ1BVX1NZU0VOVEVSX0JJVCwJCQkvKiBTeXNlbnRlcgkJKi8KKwlDUFVfVEhFUk1fQklULAkJCQkvKiBUaGVybWFsCQkqLworCUNQVV9NSVNDX0JJVCwJCQkJLyogTWlzY2VsbGFuZW91cwkqLworCUNQVV9ERUJVR19CSVQsCQkJCS8qIERlYnVnCQkqLworCUNQVV9QQVRfQklULAkJCQkvKiBQQVQJCQkqLworCUNQVV9WTVhfQklULAkJCQkvKiBWTVgJCQkqLworCUNQVV9DQUxMX0JJVCwJCQkJLyogU3lzdGVtIENhbGwJCSovCisJQ1BVX0JBU0VfQklULAkJCQkvKiBCQVNFIEFkZHJlc3MJCSovCisJQ1BVX1ZFUl9CSVQsCQkJCS8qIFZlcnNpb24gSUQJCSovCisJQ1BVX0NPTkZfQklULAkJCQkvKiBDb25maWd1cmF0aW9uCSovCisJQ1BVX1NNTV9CSVQsCQkJCS8qIFN5c3RlbSBtZ210IG1vZGUJKi8KKwlDUFVfU1ZNX0JJVCwJCQkJLypTZWN1cmUgVmlydHVhbCBNYWNoaW5lKi8KKwlDUFVfT1NWTV9CSVQsCQkJCS8qIE9TLVZpc2libGUgV29ya2Fyb3VuZCovCisvKiBTdGFuZGFyZCBSZWdpc3RlcnMJCQkJCQkJKi8KKwlDUFVfVFNTX0JJVCwJCQkJLyogVGFzayBTdGFjayBTZWdtZW50CSovCisJQ1BVX0NSX0JJVCwJCQkJLyogQ29udHJvbCBSZWdpc3RlcnMJKi8KKwlDUFVfRFRfQklULAkJCQkvKiBEZXNjcmlwdG9yIFRhYmxlCSovCisvKiBFbmQgb2YgUmVnaXN0ZXJzIGZsYWdzCQkJCQkJKi8KKwlDUFVfUkVHX0FMTF9CSVQsCQkJLyogU2VsZWN0IGFsbCBSZWdpc3RlcnMJKi8KK307CisKKyNkZWZpbmUJQ1BVX1JFR19BTEwJCSh+MCkJCS8qIFNlbGVjdCBhbGwgUmVnaXN0ZXJzCSovCisKKyNkZWZpbmUJQ1BVX01DCQkJKDEgPDwgQ1BVX01DX0JJVCkKKyNkZWZpbmUJQ1BVX01PTklUT1IJCSgxIDw8IENQVV9NT05JVE9SX0JJVCkKKyNkZWZpbmUJQ1BVX1RJTUUJCSgxIDw8IENQVV9USU1FX0JJVCkKKyNkZWZpbmUJQ1BVX1BNQwkJCSgxIDw8IENQVV9QTUNfQklUKQorI2RlZmluZQlDUFVfUExBVEZPUk0JCSgxIDw8IENQVV9QTEFURk9STV9CSVQpCisjZGVmaW5lCUNQVV9BUElDCQkoMSA8PCBDUFVfQVBJQ19CSVQpCisjZGVmaW5lCUNQVV9QT1dFUk9OCQkoMSA8PCBDUFVfUE9XRVJPTl9CSVQpCisjZGVmaW5lCUNQVV9DT05UUk9MCQkoMSA8PCBDUFVfQ09OVFJPTF9CSVQpCisjZGVmaW5lCUNQVV9GRUFUVVJFUwkJKDEgPDwgQ1BVX0ZFQVRVUkVTX0JJVCkKKyNkZWZpbmUJQ1BVX0xCUkFOQ0gJCSgxIDw8IENQVV9MQlJBTkNIX0JJVCkKKyNkZWZpbmUJQ1BVX0JJT1MJCSgxIDw8IENQVV9CSU9TX0JJVCkKKyNkZWZpbmUJQ1BVX0ZSRVEJCSgxIDw8IENQVV9GUkVRX0JJVCkKKyNkZWZpbmUJQ1BVX01UUlIJCSgxIDw8IENQVV9NVFRSX0JJVCkKKyNkZWZpbmUJQ1BVX1BFUkYJCSgxIDw8IENQVV9QRVJGX0JJVCkKKyNkZWZpbmUJQ1BVX0NBQ0hFCQkoMSA8PCBDUFVfQ0FDSEVfQklUKQorI2RlZmluZQlDUFVfU1lTRU5URVIJCSgxIDw8IENQVV9TWVNFTlRFUl9CSVQpCisjZGVmaW5lCUNQVV9USEVSTQkJKDEgPDwgQ1BVX1RIRVJNX0JJVCkKKyNkZWZpbmUJQ1BVX01JU0MJCSgxIDw8IENQVV9NSVNDX0JJVCkKKyNkZWZpbmUJQ1BVX0RFQlVHCQkoMSA8PCBDUFVfREVCVUdfQklUKQorI2RlZmluZQlDUFVfUEFUCQkJKDEgPDwgQ1BVX1BBVF9CSVQpCisjZGVmaW5lCUNQVV9WTVgJCQkoMSA8PCBDUFVfVk1YX0JJVCkKKyNkZWZpbmUJQ1BVX0NBTEwJCSgxIDw8IENQVV9DQUxMX0JJVCkKKyNkZWZpbmUJQ1BVX0JBU0UJCSgxIDw8IENQVV9CQVNFX0JJVCkKKyNkZWZpbmUJQ1BVX1ZFUgkJCSgxIDw8IENQVV9WRVJfQklUKQorI2RlZmluZQlDUFVfQ09ORgkJKDEgPDwgQ1BVX0NPTkZfQklUKQorI2RlZmluZQlDUFVfU01NCQkJKDEgPDwgQ1BVX1NNTV9CSVQpCisjZGVmaW5lCUNQVV9TVk0JCQkoMSA8PCBDUFVfU1ZNX0JJVCkKKyNkZWZpbmUJQ1BVX09TVk0JCSgxIDw8IENQVV9PU1ZNX0JJVCkKKyNkZWZpbmUJQ1BVX1RTUwkJCSgxIDw8IENQVV9UU1NfQklUKQorI2RlZmluZQlDUFVfQ1IJCQkoMSA8PCBDUFVfQ1JfQklUKQorI2RlZmluZQlDUFVfRFQJCQkoMSA8PCBDUFVfRFRfQklUKQorCisvKiBSZWdpc3RlciBmaWxlIGZsYWdzICovCitlbnVtIGNwdV9maWxlX2JpdCB7CisJQ1BVX0lOREVYX0JJVCwJCQkJLyogaW5kZXgJCSovCisJQ1BVX1ZBTFVFX0JJVCwJCQkJLyogdmFsdWUJCSovCit9OworCisjZGVmaW5lCUNQVV9GSUxFX1ZBTFVFCQkJKDEgPDwgQ1BVX1ZBTFVFX0JJVCkKKworLyoKKyAqIERpc3BsYXlGYW1pbHlfRGlzcGxheU1vZGVsCVByb2Nlc3NvciBGYW1pbGllcy9Qcm9jZXNzb3IgTnVtYmVyIFNlcmllcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAwNV8wMSwgMDVfMDIsIDA1XzA0CQlQZW50aXVtLCBQZW50aXVtIHdpdGggTU1YCisgKgorICogMDZfMDEJCQlQZW50aXVtIFBybworICogMDZfMDMsIDA2XzA1CQkJUGVudGl1bSBJSSBYZW9uLCBQZW50aXVtIElJCisgKiAwNl8wNywgMDZfMDgsIDA2XzBBLCAwNl8wQglQZW50aXVtIElJSSBYZW9uLCBQZW50dW0gSUlJCisgKgorICogMDZfMDksIDA2MEQJCQlQZW50aXVtIE0KKyAqCisgKiAwNl8wRQkJCUNvcmUgRHVvLCBDb3JlIFNvbG8KKyAqCisgKiAwNl8wRgkJCVhlb24gMzAwMCwgMzIwMCwgNTEwMCwgNTMwMCwgNzMwMCBzZXJpZXMsCisgKgkJCQlDb3JlIDIgUXVhZCwgQ29yZSAyIEV4dHJlbWUsIENvcmUgMiBEdW8sCisgKgkJCQlQZW50aXVtIGR1YWwtY29yZQorICogMDZfMTcJCQlYZW9uIDUyMDAsIDU0MDAgc2VyaWVzLCBDb3JlIDIgUXVhZCBROTY1MAorICoKKyAqIDA2XzFDCQkJQXRvbQorICoKKyAqIDBGXzAwLCAwRl8wMSwgMEZfMDIJCVhlb24sIFhlb24gTVAsIFBlbnRpdW0gNAorICogMEZfMDMsIDBGXzA0CQkJWGVvbiwgWGVvbiBNUCwgUGVudGl1bSA0LCBQZW50aXVtIEQKKyAqCisgKiAwRl8wNgkJCVhlb24gNzEwMCwgNTAwMCBTZXJpZXMsIFhlb24gTVAsCisgKgkJCQlQZW50aXVtIDQsIFBlbnRpdW0gRAorICovCisKKy8qIFJlZ2lzdGVyIHByb2Nlc3NvcnMgYml0cyAqLworZW51bSBjcHVfcHJvY2Vzc29yX2JpdCB7CisJQ1BVX05PTkUsCisvKiBJbnRlbCAqLworCUNQVV9JTlRFTF9QRU5USVVNX0JJVCwKKwlDUFVfSU5URUxfUDZfQklULAorCUNQVV9JTlRFTF9QRU5USVVNX01fQklULAorCUNQVV9JTlRFTF9DT1JFX0JJVCwKKwlDUFVfSU5URUxfQ09SRTJfQklULAorCUNQVV9JTlRFTF9BVE9NX0JJVCwKKwlDUFVfSU5URUxfWEVPTl9QNF9CSVQsCisJQ1BVX0lOVEVMX1hFT05fTVBfQklULAorLyogQU1EICovCisJQ1BVX0FNRF9LNl9CSVQsCisJQ1BVX0FNRF9LN19CSVQsCisJQ1BVX0FNRF9LOF9CSVQsCisJQ1BVX0FNRF8wRl9CSVQsCisJQ1BVX0FNRF8xMF9CSVQsCisJQ1BVX0FNRF8xMV9CSVQsCit9OworCisjZGVmaW5lCUNQVV9JTlRFTF9QRU5USVVNCSgxIDw8IENQVV9JTlRFTF9QRU5USVVNX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1A2CQkoMSA8PCBDUFVfSU5URUxfUDZfQklUKQorI2RlZmluZQlDUFVfSU5URUxfUEVOVElVTV9NCSgxIDw8IENQVV9JTlRFTF9QRU5USVVNX01fQklUKQorI2RlZmluZQlDUFVfSU5URUxfQ09SRQkJKDEgPDwgQ1BVX0lOVEVMX0NPUkVfQklUKQorI2RlZmluZQlDUFVfSU5URUxfQ09SRTIJCSgxIDw8IENQVV9JTlRFTF9DT1JFMl9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9BVE9NCQkoMSA8PCBDUFVfSU5URUxfQVRPTV9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9YRU9OX1A0CSgxIDw8IENQVV9JTlRFTF9YRU9OX1A0X0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1hFT05fTVAJKDEgPDwgQ1BVX0lOVEVMX1hFT05fTVBfQklUKQorCisjZGVmaW5lCUNQVV9JTlRFTF9QWAkJKENQVV9JTlRFTF9QNiB8IENQVV9JTlRFTF9QRU5USVVNX00pCisjZGVmaW5lCUNQVV9JTlRFTF9DT1JFWAkJKENQVV9JTlRFTF9DT1JFIHwgQ1BVX0lOVEVMX0NPUkUyKQorI2RlZmluZQlDUFVfSU5URUxfWEVPTgkJKENQVV9JTlRFTF9YRU9OX1A0IHwgQ1BVX0lOVEVMX1hFT05fTVApCisjZGVmaW5lCUNQVV9DT19BVAkJKENQVV9JTlRFTF9DT1JFIHwgQ1BVX0lOVEVMX0FUT00pCisjZGVmaW5lCUNQVV9DMl9BVAkJKENQVV9JTlRFTF9DT1JFMiB8IENQVV9JTlRFTF9BVE9NKQorI2RlZmluZQlDUFVfQ1hfQVQJCShDUFVfSU5URUxfQ09SRVggfCBDUFVfSU5URUxfQVRPTSkKKyNkZWZpbmUJQ1BVX0NYX1hFCQkoQ1BVX0lOVEVMX0NPUkVYIHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9QNl9YRQkJKENQVV9JTlRFTF9QNiB8IENQVV9JTlRFTF9YRU9OKQorI2RlZmluZQlDUFVfUE1fQ09fQVQJCShDUFVfSU5URUxfUEVOVElVTV9NIHwgQ1BVX0NPX0FUKQorI2RlZmluZQlDUFVfQzJfQVRfWEUJCShDUFVfQzJfQVQgfCBDUFVfSU5URUxfWEVPTikKKyNkZWZpbmUJQ1BVX0NYX0FUX1hFCQkoQ1BVX0NYX0FUIHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9QNl9DWF9BVAkJKENQVV9JTlRFTF9QNiB8IENQVV9DWF9BVCkKKyNkZWZpbmUJQ1BVX1A2X0NYX1hFCQkoQ1BVX1A2X1hFIHwgQ1BVX0lOVEVMX0NPUkVYKQorI2RlZmluZQlDUFVfUDZfQ1hfQVRfWEUJCShDUFVfSU5URUxfUDYgfCBDUFVfQ1hfQVRfWEUpCisjZGVmaW5lCUNQVV9QTV9DWF9BVF9YRQkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfQVRfWEUpCisjZGVmaW5lCUNQVV9QTV9DWF9BVAkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfQVQpCisjZGVmaW5lCUNQVV9QTV9DWF9YRQkJKENQVV9JTlRFTF9QRU5USVVNX00gfCBDUFVfQ1hfWEUpCisjZGVmaW5lCUNQVV9QWF9DWF9BVAkJKENQVV9JTlRFTF9QWCB8IENQVV9DWF9BVCkKKyNkZWZpbmUJQ1BVX1BYX0NYX0FUX1hFCQkoQ1BVX0lOVEVMX1BYIHwgQ1BVX0NYX0FUX1hFKQorCisvKiBTZWxlY3QgYWxsIHN1cHBvcnRlZCBJbnRlbCBDUFVzICovCisjZGVmaW5lCUNQVV9JTlRFTF9BTEwJCShDUFVfSU5URUxfUEVOVElVTSB8IENQVV9QWF9DWF9BVF9YRSkKKworI2RlZmluZQlDUFVfQU1EX0s2CQkoMSA8PCBDUFVfQU1EX0s2X0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF9LNwkJKDEgPDwgQ1BVX0FNRF9LN19CSVQpCisjZGVmaW5lCUNQVV9BTURfSzgJCSgxIDw8IENQVV9BTURfSzhfQklUKQorI2RlZmluZQlDUFVfQU1EXzBGCQkoMSA8PCBDUFVfQU1EXzBGX0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF8xMAkJKDEgPDwgQ1BVX0FNRF8xMF9CSVQpCisjZGVmaW5lCUNQVV9BTURfMTEJCSgxIDw8IENQVV9BTURfMTFfQklUKQorCisjZGVmaW5lCUNQVV9LMTBfUExVUwkJKENQVV9BTURfMTAgfCBDUFVfQU1EXzExKQorI2RlZmluZQlDUFVfSzBGX1BMVVMJCShDUFVfQU1EXzBGIHwgQ1BVX0sxMF9QTFVTKQorI2RlZmluZQlDUFVfSzhfUExVUwkJKENQVV9BTURfSzggfCBDUFVfSzBGX1BMVVMpCisjZGVmaW5lCUNQVV9LN19QTFVTCQkoQ1BVX0FNRF9LNyB8IENQVV9LOF9QTFVTKQorCisvKiBTZWxlY3QgYWxsIHN1cHBvcnRlZCBBTUQgQ1BVcyAqLworI2RlZmluZQlDUFVfQU1EX0FMTAkJKENQVV9BTURfSzYgfCBDUFVfSzdfUExVUykKKworLyogU2VsZWN0IGFsbCBzdXBwb3J0ZWQgQ1BVcyAqLworI2RlZmluZQlDUFVfQUxMCQkJKENQVV9JTlRFTF9BTEwgfCBDUFVfQU1EX0FMTCkKKworI2RlZmluZSBNQVhfQ1BVX0ZJTEVTCQk1MTIKKworc3RydWN0IGNwdV9wcml2YXRlIHsKKwl1bnNpZ25lZAkJY3B1OworCXVuc2lnbmVkCQl0eXBlOworCXVuc2lnbmVkCQlyZWc7CisJdW5zaWduZWQJCWZpbGU7Cit9OworCitzdHJ1Y3QgY3B1X2RlYnVnX2Jhc2UgeworCWNoYXIJCQkqbmFtZTsJCS8qIFJlZ2lzdGVyIG5hbWUJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFJlZ2lzdGVyIGZsYWcJKi8KKwl1bnNpZ25lZAkJd3JpdGU7CQkvKiBSZWdpc3RlciB3cml0ZSBmbGFnCSovCit9OworCisvKgorICogQ3VycmVudGx5IGl0IGxvb2tzIHNpbWlsYXIgdG8gY3B1X2RlYnVnX2Jhc2UgYnV0IG9uY2Ugd2UgYWRkIG1vcmUgZmlsZXMKKyAqIGNwdV9maWxlX2Jhc2Ugd2lsbCBnbyBpbiBkaWZmZXJlbnQgZGlyZWN0aW9uCisgKi8KK3N0cnVjdCBjcHVfZmlsZV9iYXNlIHsKKwljaGFyCQkJKm5hbWU7CQkvKiBSZWdpc3RlciBmaWxlIG5hbWUJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFJlZ2lzdGVyIGZpbGUgZmxhZwkqLworCXVuc2lnbmVkCQl3cml0ZTsJCS8qIFJlZ2lzdGVyIHdyaXRlIGZsYWcJKi8KK307CisKK3N0cnVjdCBjcHVfY3B1WF9iYXNlIHsKKwlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwkvKiBSZWdpc3RlciBkZW50cnkJKi8KKwlpbnQJCQlpbml0OwkJLyogUmVnaXN0ZXIgaW5kZXggZmlsZQkqLworfTsKKworc3RydWN0IGNwdV9kZWJ1Z19yYW5nZSB7CisJdW5zaWduZWQJCW1pbjsJCS8qIFJlZ2lzdGVyIHJhbmdlIG1pbgkqLworCXVuc2lnbmVkCQltYXg7CQkvKiBSZWdpc3RlciByYW5nZSBtYXgJKi8KKwl1bnNpZ25lZAkJZmxhZzsJCS8qIFN1cHBvcnRlZCBmbGFncwkqLworCXVuc2lnbmVkCQltb2RlbDsJCS8qIFN1cHBvcnRlZCBtb2RlbHMJKi8KK307CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9DUFVfREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCmluZGV4IGRjMjc3MDUuLjU2MjNjNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKQEAgLTkxLDcgKzkxLDYgQEAKICNkZWZpbmUgc3RvcmVfZ2R0KGR0cikgbmF0aXZlX3N0b3JlX2dkdChkdHIpCiAjZGVmaW5lIHN0b3JlX2lkdChkdHIpIG5hdGl2ZV9zdG9yZV9pZHQoZHRyKQogI2RlZmluZSBzdG9yZV90cih0cikgKHRyID0gbmF0aXZlX3N0b3JlX3RyKCkpCi0jZGVmaW5lIHN0b3JlX2xkdChsZHQpIGFzbSgic2xkdCAlMCI6Ij1tIiAobGR0KSkKIAogI2RlZmluZSBsb2FkX1RMUyh0LCBjcHUpIG5hdGl2ZV9sb2FkX3Rscyh0LCBjcHUpCiAjZGVmaW5lIHNldF9sZHQgbmF0aXZlX3NldF9sZHQKQEAgLTExMiw2ICsxMTEsOCBAQAogfQogI2VuZGlmCS8qIENPTkZJR19QQVJBVklSVCAqLwogCisjZGVmaW5lIHN0b3JlX2xkdChsZHQpIGFzbSgic2xkdCAlMCIgOiAiPW0iKGxkdCkpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfd3JpdGVfaWR0X2VudHJ5KGdhdGVfZGVzYyAqaWR0LCBpbnQgZW50cnksCiAJCQkJCSAgY29uc3QgZ2F0ZV9kZXNjICpnYXRlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCAzYzAzNGY0Li40OTk0YTIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtNiw3ICs2LDcgQEAKIAl2b2lkCSphY3BpX2hhbmRsZTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7CitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRE1BUgogCXZvaWQgKmlvbW11OyAvKiBob29rIGZvciBJT01NVSBzcGVjaWZpYyBleHRlbnNpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDEzMmExMzQuLmNlYTdiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNyw2ICs3LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYXR0cnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgpAQCAtMTYsNDcgKzE4LDkgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlIHg4Nl9kbWFfZmFsbGJhY2tfZGV2OwogZXh0ZXJuIGludCBwYW5pY19vbl9vdmVyZmxvdzsKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyB7Ci0JaW50ICAgICAgICAgICAgICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci0Jdm9pZCogICAgICAgICAgICgqYWxsb2NfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKLQl2b2lkICAgICAgICAgICAgKCpmcmVlX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCXZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpOwotCWRtYV9hZGRyX3QgICAgICAoKm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwdHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnVubWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCi0JCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zZykoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCQkJCWludCBkaXJlY3Rpb24pOwotCWludCAgICAgICAgICAgICAoKmRtYV9zdXBwb3J0ZWQpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7Ci0JaW50CQlpc19waHlzOwotfTsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiAKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9tYXBfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCXJldHVybiBkbWFfb3BzOwpAQCAtNzEsNyArMzUsNyBAQAogLyogTWFrZSBzdXJlIHdlIGtlZXAgdGhlIHNhbWUgYmVoYXZpb3VyICovCiBzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAJaWYgKG9wcy0+bWFwcGluZ19lcnJvcikKIAkJcmV0dXJuIG9wcy0+bWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKTsKIApAQCAtOTAsMTM3ICs1NCwxNjcgQEAKIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90CiBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgaW50IGRpcmVjdGlvbikKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlkbWFfYWRkcl90IGFkZHI7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIG9wcy0+bWFwX3NpbmdsZShod2RldiwgdmlydF90b19waHlzKHB0ciksIHNpemUsIGRpcmVjdGlvbik7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWFkZHIgPSBvcHMtPm1hcF9wYWdlKGh3ZGV2LCB2aXJ0X3RvX3BhZ2UocHRyKSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHRyICYgflBBR0VfTUFTSywgc2l6ZSwKKwkJCSAgICAgZGlyLCBOVUxMKTsKKwlkZWJ1Z19kbWFfbWFwX3BhZ2UoaHdkZXYsIHZpcnRfdG9fcGFnZShwdHIpLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpcHRyICYgflBBR0VfTUFTSywgc2l6ZSwKKwkJCSAgIGRpciwgYWRkciwgdHJ1ZSk7CisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsCi0JCSBpbnQgZGlyZWN0aW9uKQorCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCWlmIChvcHMtPnVubWFwX3NpbmdsZSkKLQkJb3BzLT51bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlpZiAob3BzLT51bm1hcF9wYWdlKQorCQlvcHMtPnVubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCB0cnVlKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorCSAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlpbnQgZW50czsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJZW50cyA9IG9wcy0+bWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpciwgTlVMTCk7CisJZGVidWdfZG1hX21hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBlbnRzLCBkaXIpOworCisJcmV0dXJuIGVudHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgICBpbnQgZGlyZWN0aW9uKQorCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJZGVidWdfZG1hX3VubWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcik7CiAJaWYgKG9wcy0+dW5tYXBfc2cpCi0JCW9wcy0+dW5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyZWN0aW9uKTsKKwkJb3BzLT51bm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKwkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KQotCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpCi0JCW9wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJb3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkKIAkJb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGh3ZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQsCi0JCQkJCSAgICAgICBzaXplLCBkaXJlY3Rpb24pOworCQkJCQkgICAgICAgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwKKwkJCQkJICAgIG9mZnNldCwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKIAkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSBpbnQgZGlyZWN0aW9uKQorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKQogCQlvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsCi0JCQkJCQkgIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJCQkJCSAgb2Zmc2V0LCBzaXplLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLAorCQkJCQkgICAgICAgb2Zmc2V0LCBzaXplLCBkaXIpOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKKwkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2dfZm9yX2NwdSkKLQkJb3BzLT5zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NnX2Zvcl9jcHUoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorCQkgICAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zZ19mb3JfZGV2aWNlKQotCQlvcHMtPnN5bmNfc2dfZm9yX2RldmljZShod2Rldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKKwkJb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcik7CisJZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShod2Rldiwgc2csIG5lbGVtcywgZGlyKTsKIAogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgIGludCBkaXJlY3Rpb24pCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCWRtYV9hZGRyX3QgYWRkcjsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlyZXR1cm4gb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0LAotCQkJICAgICAgIHNpemUsIGRpcmVjdGlvbik7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWFkZHIgPSBvcHMtPm1hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyLCBhZGRyLCBmYWxzZSk7CisKKwlyZXR1cm4gYWRkcjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXJlY3Rpb24pOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlpZiAob3BzLT51bm1hcF9wYWdlKQorCQlvcHMtPnVubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjY2LDcgKzI2MCw3IEBACiBkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKIAkJZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCXZvaWQgKm1lbW9yeTsKIAogCWdmcCAmPSB+KF9fR0ZQX0RNQSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9ETUEzMik7CkBAIC0yODUsMjAgKzI3OSwyNCBAQAogCWlmICghb3BzLT5hbGxvY19jb2hlcmVudCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsCi0JCQkJICAgZG1hX2FsbG9jX2NvaGVyZW50X2dmcF9mbGFncyhkZXYsIGdmcCkpOworCW1lbW9yeSA9IG9wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAorCQkJCSAgICAgZG1hX2FsbG9jX2NvaGVyZW50X2dmcF9mbGFncyhkZXYsIGdmcCkpOworCWRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICpkbWFfaGFuZGxlLCBtZW1vcnkpOworCisJcmV0dXJuIG1lbW9yeTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBidXMpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7ICAgICAgIC8qIGZvciBwb3J0YWJpbGl0eSAqLwogCiAJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIHZhZGRyKSkKIAkJcmV0dXJuOwogCisJZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgYnVzKTsKIAlpZiAob3BzLT5mcmVlX2NvaGVyZW50KQogCQlvcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgYnVzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKaW5kZXggYmM2ODIxMi4uZmQ4ZjllMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1pLmgKQEAgLTEsMjIgKzEsMTUgQEAKICNpZm5kZWYgX0FTTV9YODZfRE1JX0gKICNkZWZpbmUgX0FTTV9YODZfRE1JX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKLSNkZWZpbmUgRE1JX01BWF9EQVRBIDIwNDgKLQotZXh0ZXJuIGludCBkbWlfYWxsb2NfaW5kZXg7Ci1leHRlcm4gY2hhciBkbWlfYWxsb2NfZGF0YVtETUlfTUFYX0RBVEFdOwotCi0vKiBUaGlzIGlzIHNvIGVhcmx5IHRoYXQgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gYWxsb2NhdGUgZHluYW1pYyBtZW1vcnkuCi0gICBBbGxvY2F0ZSBkYXRhIGluIGFuIEJTUyBhcnJheS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1pX2FsbG9jKHVuc2lnbmVkIGxlbikKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19pbml0IHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCiB7Ci0JaW50IGlkeCA9IGRtaV9hbGxvY19pbmRleDsKLQlpZiAoKGRtaV9hbGxvY19pbmRleCArIGxlbikgPiBETUlfTUFYX0RBVEEpCi0JCXJldHVybiBOVUxMOwotCWRtaV9hbGxvY19pbmRleCArPSBsZW47Ci0JcmV0dXJuIGRtaV9hbGxvY19kYXRhICsgaWR4OworCXJldHVybiBleHRlbmRfYnJrKGxlbiwgc2l6ZW9mKGludCkpOwogfQogCiAvKiBVc2UgZWFybHkgSU8gbWFwcGluZ3MgZm9yIERNSSBiZWNhdXNlIGl0J3MgaW5pdGlhbGl6ZWQgZWFybHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaAppbmRleCAwMGQ0MWNlLi43ZWNiYTRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCkBAIC03Miw3ICs3Miw3IEBACiBleHRlcm4gdm9pZCBlODIwX2FkZF9yZWdpb24odTY0IHN0YXJ0LCB1NjQgc2l6ZSwgaW50IHR5cGUpOwogZXh0ZXJuIHZvaWQgZTgyMF9wcmludF9tYXAoY2hhciAqd2hvKTsKIGV4dGVybiBpbnQKLXNhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLCBpbnQgKnBucl9tYXApOworc2FuaXRpemVfZTgyMF9tYXAoc3RydWN0IGU4MjBlbnRyeSAqYmlvc21hcCwgaW50IG1heF9ucl9tYXAsIHUzMiAqcG5yX21hcCk7CiBleHRlcm4gdTY0IGU4MjBfdXBkYXRlX3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAogCQkJICAgICAgIHVuc2lnbmVkIG5ld190eXBlKTsKIGV4dGVybiB1NjQgZTgyMF9yZW1vdmVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKaW5kZXggODU0ZDUzOC4uYzJlNmJlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaApAQCAtMzMsNiArMzMsOCBAQAogCQkgc21wX2ludmFsaWRhdGVfaW50ZXJydXB0KQogI2VuZGlmCiAKK0JVSUxEX0lOVEVSUlVQVChnZW5lcmljX2ludGVycnVwdCwgR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SKQorCiAvKgogICogZXZlcnkgcGVudGl1bSBsb2NhbCBBUElDIGhhcyB0d28gJ2xvY2FsIGludGVycnVwdHMnLCB3aXRoIGEKICAqIHNvZnQtZGVmaW5hYmxlIHZlY3RvciBhdHRhY2hlZCB0byBib3RoIGludGVycnVwdHMsIG9uZSBvZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBiNTViNGE3Li5kYjI0YzIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNTUsMjkgKzU1LDQgQEAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCiAKLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLS8qCi0gKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMKLSAqIG9mIGEgdGhyZWFkLgotICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm8KLSAqLwotc3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sgewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCXVuc2lnbmVkIGxvbmcgZnVuYzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7Ci19OwotCi0vKgotICogUHJpbWFyeSBoYW5kbGVyIG9mIGEgZnVuY3Rpb24gcmV0dXJuLgotICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci4KLSAqIERlZmluZWQgaW4gZW50cnlfMzIvNjQuUwotICovCi1leHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KLQogI2VuZGlmIC8qIF9BU01fWDg2X0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMTc2ZjA1OC4uMDM5ZGI2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMTIsNiArMTIsNyBAQAogCXVuc2lnbmVkIGludCBhcGljX3RpbWVyX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCiAJdW5zaWduZWQgaW50IGlycV9zcHVyaW91c19jb3VudDsKICNlbmRpZgorCXVuc2lnbmVkIGludCBnZW5lcmljX2lycXM7CS8qIGFyY2ggZGVwZW5kZW50ICovCiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGludCBpcnFfcmVzY2hlZF9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaXJxX2NhbGxfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggYmY5Mjc2Yi4uMDE0YzJiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtNjMsNiArNjMsNyBAQAogdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKIHZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOwordm9pZCAqa21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KTsKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CiAKICNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IDM3MGUxYzguLmI3NjJlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIC8qIEludGVycnVwdCBoYW5kbGVycyByZWdpc3RlcmVkIGR1cmluZyBpbml0X0lSUSAqLwogZXh0ZXJuIHZvaWQgYXBpY190aW1lcl9pbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9pZCBnZW5lcmljX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIGVycm9yX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNwdXJpb3VzX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIHRoZXJtYWxfaW50ZXJydXB0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmIxYTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW5pdC5oCkBAIC0wLDAgKzEsMTggQEAKKyNpZm5kZWYgX0FTTV9YODZfSU5JVF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X0lOSVRfMzJfSAorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorZXh0ZXJuIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpOworI2VuZGlmCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzayk7CisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBlODIwX3RhYmxlX3N0YXJ0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgZTgyMF90YWJsZV90b3A7CisKKyNlbmRpZiAvKiBfQVNNX1g4Nl9JTklUXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCA1OWNiNGExLi4zNzNjYzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNjIsNyArMTYyLDggQEAKIGV4dGVybiB2b2lkIGlvYXBpY19pbml0X21hcHBpbmdzKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGludCBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiBpbnQgc2F2ZV9JT19BUElDX3NldHVwKHZvaWQpOworZXh0ZXJuIHZvaWQgbWFza19JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV9JT19BUElDX3NldHVwKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVpbml0X2ludHJfcmVtYXBwZWRfSU9fQVBJQyhpbnQpOwogI2VuZGlmCkBAIC0xNzIsNyArMTczLDcgQEAKIGV4dGVybiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljLCBpbnQgaXJxLAogCQkJICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAogCQkJICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJCSAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3Rvcik7CisJCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IsIGludCBwaW4pOwogZXh0ZXJuIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLAogCQkJICAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IGUpOwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCmluZGV4IGE2ZWU5ZTYuLmFmMzI2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtMyw3ICszLDcgQEAKIAogZXh0ZXJuIHZvaWQgcGNpX2lvbW11X3NodXRkb3duKHZvaWQpOwogZXh0ZXJuIHZvaWQgbm9faW9tbXVfaW5pdCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIG5vbW11X2RtYV9vcHM7CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIG5vbW11X2RtYV9vcHM7CiBleHRlcm4gaW50IGZvcmNlX2lvbW11LCBub19pb21tdTsKIGV4dGVybiBpbnQgaW9tbXVfZGV0ZWN0ZWQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggMTA3ZWIyMS4uZjM4NDgxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmgKQEAgLTM2LDYgKzM2LDcgQEAKIGV4dGVybiB2b2lkIGZpeHVwX2lycXModm9pZCk7CiAjZW5kaWYKIAorZXh0ZXJuIHZvaWQgKCpnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gdm9pZCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7CiBleHRlcm4gYm9vbCBoYW5kbGVfaXJxKHVuc2lnbmVkIGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCmluZGV4IDIwZTFmZDUuLjAzOTY3NjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X0lSUV9SRU1BUFBJTkdfSAogI2RlZmluZSBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0gKIAotZXh0ZXJuIGludCB4MmFwaWM7Ci0KICNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoeDJhcGljKSA/IGRlc3QgOiBkZXN0IDw8IDgpCiAKICNlbmRpZgkvKiBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCmluZGV4IDhhMjg1ZjMuLjNjYmQ3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtMTEyLDYgKzExMiwxMSBAQAogI2RlZmluZSBMT0NBTF9QRVJGX1ZFQ1RPUgkJMHhlZQogCiAvKgorICogR2VuZXJpYyBzeXN0ZW0gdmVjdG9yIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UKKyAqLworI2RlZmluZSBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IJMHhlZAorCisvKgogICogRmlyc3QgQVBJQyB2ZWN0b3IgYXZhaWxhYmxlIHRvIGRyaXZlcnM6ICh2ZWN0b3JzIDB4MzAtMHhlZSkgd2UKICAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5CiAgKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCmluZGV4IDBjZWI2ZDEuLjMxN2ZmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaApAQCAtOSwxMyArOSwxMyBAQAogIyBkZWZpbmUgUEFHRVNfTlIJCTQKICNlbHNlCiAjIGRlZmluZSBQQV9DT05UUk9MX1BBR0UJMAotIyBkZWZpbmUgUEFfVEFCTEVfUEFHRQkJMQotIyBkZWZpbmUgUEFHRVNfTlIJCTIKKyMgZGVmaW5lIFZBX0NPTlRST0xfUEFHRQkxCisjIGRlZmluZSBQQV9UQUJMRV9QQUdFCQkyCisjIGRlZmluZSBQQV9TV0FQX1BBR0UJCTMKKyMgZGVmaW5lIFBBR0VTX05SCQk0CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19YODZfMzIKICMgZGVmaW5lIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQkyMDQ4Ci0jZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtMTM2LDEwICsxMzYsMTEgQEAKIAkJdW5zaWduZWQgaW50IGhhc19wYWUsCiAJCXVuc2lnbmVkIGludCBwcmVzZXJ2ZV9jb250ZXh0KTsKICNlbHNlCi1OT1JFVF9UWVBFIHZvaWQKK3Vuc2lnbmVkIGxvbmcKIHJlbG9jYXRlX2tlcm5lbCh1bnNpZ25lZCBsb25nIGluZGlyZWN0aW9uX3BhZ2UsCiAJCXVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LAotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpIEFUVFJJQl9OT1JFVDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzLAorCQl1bnNpZ25lZCBpbnQgcHJlc2VydmVfY29udGV4dCk7CiAjZW5kaWYKIAogI2RlZmluZSBBUkNIX0hBU19LSU1BR0VfQVJDSApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGd1ZXN0X2hjYWxsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaAppbmRleCA0Mzg5NDQyLi4wZjRlZTcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3RfaGNhbGwuaApAQCAtMjYsMzYgKzI2LDIwIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9rdm1fcGFyYS5oPgogCiAvKkc6MDMxIEJ1dCBmaXJzdCwgaG93IGRvZXMgb3VyIEd1ZXN0IGNvbnRhY3QgdGhlIEhvc3QgdG8gYXNrIGZvciBwcml2aWxlZ2VkCiAgKiBvcGVyYXRpb25zPyAgVGhlcmUgYXJlIHR3byB3YXlzOiB0aGUgZGlyZWN0IHdheSBpcyB0byBtYWtlIGEgImh5cGVyY2FsbCIsCiAgKiB0byBtYWtlIHJlcXVlc3RzIG9mIHRoZSBIb3N0IEl0c2VsZi4KICAqCi0gKiBPdXIgaHlwZXJjYWxsIG1lY2hhbmlzbSB1c2VzIHRoZSBoaWdoZXN0IHVudXNlZCB0cmFwIGNvZGUgKHRyYXBzIDMyIGFuZAotICogYWJvdmUgYXJlIHVzZWQgYnkgcmVhbCBoYXJkd2FyZSBpbnRlcnJ1cHRzKS4gIEZpZnRlZW4gaHlwZXJjYWxscyBhcmUKKyAqIFdlIHVzZSB0aGUgS1ZNIGh5cGVyY2FsbCBtZWNoYW5pc20uIEVpZ2h0ZWVuIGh5cGVyY2FsbHMgYXJlCiAgKiBhdmFpbGFibGU6IHRoZSBoeXBlcmNhbGwgbnVtYmVyIGlzIHB1dCBpbiB0aGUgJWVheCByZWdpc3RlciwgYW5kIHRoZQotICogYXJndW1lbnRzICh3aGVuIHJlcXVpcmVkKSBhcmUgcGxhY2VkIGluICVlZHgsICVlYnggYW5kICVlY3guICBJZiBhIHJldHVybgorICogYXJndW1lbnRzICh3aGVuIHJlcXVpcmVkKSBhcmUgcGxhY2VkIGluICVlYngsICVlY3ggYW5kICVlZHguICBJZiBhIHJldHVybgogICogdmFsdWUgbWFrZXMgc2Vuc2UsIGl0J3MgcmV0dXJuZWQgaW4gJWVheC4KICAqCiAgKiBHcm9zc2x5IGludmFsaWQgY2FsbHMgcmVzdWx0IGluIFN1ZGRlbiBEZWF0aCBhdCB0aGUgaGFuZHMgb2YgdGhlIHZlbmdlZnVsCiAgKiBIb3N0LCByYXRoZXIgdGhhbiByZXR1cm5pbmcgZmFpbHVyZS4gIFRoaXMgcmVmbGVjdHMgV2luc3RvbiBDaHVyY2hpbGwncwogICogZGVmaW5pdGlvbiBvZiBhIGdlbnRsZW1hbjogInNvbWVvbmUgd2hvIGlzIG9ubHkgcnVkZSBpbnRlbnRpb25hbGx5Ii4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotaGNhbGwodW5zaWduZWQgbG9uZyBjYWxsLAotICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKLXsKLQkvKiAiaW50IiBpcyB0aGUgSW50ZWwgaW5zdHJ1Y3Rpb24gdG8gdHJpZ2dlciBhIHRyYXAuICovCi0JYXNtIHZvbGF0aWxlKCJpbnQgJCIgX19zdHJpbmdpZnkoTEdVRVNUX1RSQVBfRU5UUlkpCi0JCSAgICAgLyogVGhlIGNhbGwgaW4gJWVheCAoYWthICJhIikgbWlnaHQgYmUgb3ZlcndyaXR0ZW4gKi8KLQkJICAgICA6ICI9YSIoY2FsbCkKLQkJICAgICAgIC8qIFRoZSBhcmd1bWVudHMgYXJlIGluICVlYXgsICVlZHgsICVlYnggJiAlZWN4ICovCi0JCSAgICAgOiAiYSIoY2FsbCksICJkIihhcmcxKSwgImIiKGFyZzIpLCAiYyIoYXJnMykKLQkJICAgICAgIC8qICJtZW1vcnkiIG1lYW5zIHRoaXMgbWlnaHQgd3JpdGUgc29tZXdoZXJlIGluIG1lbW9yeS4KLQkJCSogVGhpcyBpc24ndCB0cnVlIGZvciBhbGwgY2FsbHMsIGJ1dCBpdCdzIHNhZmUgdG8gdGVsbAotCQkJKiBnY2MgdGhhdCBpdCBtaWdodCBoYXBwZW4gc28gaXQgZG9lc24ndCBnZXQgY2xldmVyLiAqLwotCQkgICAgIDogIm1lbW9yeSIpOwotCXJldHVybiBjYWxsOwotfQogLyo6Ki8KIAogLyogQ2FuJ3QgdXNlIG91ciBtaW4oKSBtYWNybyBoZXJlOiBuZWVkcyB0byBiZSBhIGNvbnN0YW50ICovCkBAIC02NCw3ICs0OCw3IEBACiAjZGVmaW5lIExIQ0FMTF9SSU5HX1NJWkUgNjQKIHN0cnVjdCBoY2FsbF9hcmdzIHsKIAkvKiBUaGVzZSBtYXAgZGlyZWN0bHkgb250byBlYXgsIGVieCwgZWN4LCBlZHggaW4gc3RydWN0IGxndWVzdF9yZWdzICovCi0JdW5zaWduZWQgbG9uZyBhcmcwLCBhcmcyLCBhcmczLCBhcmcxOworCXVuc2lnbmVkIGxvbmcgYXJnMCwgYXJnMSwgYXJnMiwgYXJnMzsKIH07CiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKaW5kZXggOTMyMGUyYS4uMTJkNTVlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMSwxNCArMSwxMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9MSU5LQUdFX0gKICNkZWZpbmUgX0FTTV9YODZfTElOS0FHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKwogI3VuZGVmIG5vdHJhY2UKICNkZWZpbmUgbm90cmFjZSBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKIAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgX19BTElHTiAucDJhbGlnbiA0LCwxNQotI2RlZmluZSBfX0FMSUdOX1NUUiAiLnAyYWxpZ24gNCwsMTUiCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19YODZfMzIKICNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkKIC8qCkBAIC01MCwxNiArNDcsMjAgQEAKIAlfX2FzbWxpbmthZ2VfcHJvdGVjdF9uKHJldCwgImciIChhcmcxKSwgImciIChhcmcyKSwgImciIChhcmczKSwgXAogCQkJICAgICAgImciIChhcmc0KSwgImciIChhcmc1KSwgImciIChhcmc2KSkKIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCisjaWZkZWYgX19BU1NFTUJMWV9fCiAKICNkZWZpbmUgR0xPQkFMKG5hbWUpCVwKIAkuZ2xvYmwgbmFtZTsJXAogCW5hbWU6CiAKLSNpZmRlZiBDT05GSUdfWDg2X0FMSUdOTUVOVF8xNgotI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAxNiwweDkwCi0jZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMTYsMHg5MCIKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9BTElHTk1FTlRfMTYpCisjZGVmaW5lIF9fQUxJR04JCS5wMmFsaWduIDQsIDB4OTAKKyNkZWZpbmUgX19BTElHTl9TVFIJX19zdHJpbmdpZnkoX19BTElHTikKICNlbmRpZgogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKICNlbmRpZiAvKiBfQVNNX1g4Nl9MSU5LQUdFX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCAzMmM2ZTE3Li41NjM5MzNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaApAQCAtMTEsNiArMTEsOCBAQAogICovCiAKICNkZWZpbmUgTUNHX0NUTF9QCSAoMVVMPDw4KSAgIC8qIE1DR19DQVAgcmVnaXN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIE1DR19FWFRfUAkgKDFVTEw8PDkpICAgLyogRXh0ZW5kZWQgcmVnaXN0ZXJzIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQ0dfQ01DSV9QCSAoMVVMTDw8MTApICAvKiBDTUNJIHN1cHBvcnRlZCAqLwogCiAjZGVmaW5lIE1DR19TVEFUVVNfUklQViAgKDFVTDw8MCkgICAvKiByZXN0YXJ0IGlwIHZhbGlkICovCiAjZGVmaW5lIE1DR19TVEFUVVNfRUlQViAgKDFVTDw8MSkgICAvKiBpcCBwb2ludHMgdG8gY29ycmVjdCBpbnN0cnVjdGlvbiAqLwpAQCAtOTAsMTQgKzkyLDI5IEBACiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKK3ZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBkZXZpY2VfbWNlKTsKIGV4dGVybiB2b2lkICgqdGhyZXNob2xkX2NwdV9jYWxsYmFjaykodW5zaWduZWQgbG9uZyBhY3Rpb24sIHVuc2lnbmVkIGludCBjcHUpOwogCisvKgorICogVG8gc3VwcG9ydCBtb3JlIHRoYW4gMTI4IHdvdWxkIG5lZWQgdG8gZXNjYXBlIHRoZSBwcmVkZWZpbmVkCisgKiBMaW51eCBkZWZpbmVkIGV4dGVuZGVkIGJhbmtzIGZpcnN0LgorICovCisjZGVmaW5lIE1BWF9OUl9CQU5LUyAoTUNFX0VYVEVOREVEX0JBTksgLSAxKQorCiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKIHZvaWQgbWNlX2ludGVsX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOwordm9pZCBjbWNpX2NsZWFyKHZvaWQpOwordm9pZCBjbWNpX3JlZW5hYmxlKHZvaWQpOwordm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKTsKK3ZvaWQgY21jaV9yZWNoZWNrKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY21jaV9jbGVhcih2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfcmVlbmFibGUodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfcmVjaGVjayh2b2lkKSB7fQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfWDg2X01DRV9BTUQKQEAgLTEwNiwxMSArMTIzLDIzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbWNlX2FtZF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7IH0KICNlbmRpZgogCi12b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQodW5zaWduZWQgaW50IGNwdSwgX191NjQgc3RhdHVzKTsKK2V4dGVybiBpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpOworCit2b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoX191NjQgc3RhdHVzKTsKIAogZXh0ZXJuIGF0b21pY190IG1jZV9lbnRyeTsKIAogZXh0ZXJuIHZvaWQgZG9fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKKwordHlwZWRlZiBERUNMQVJFX0JJVE1BUChtY2VfYmFua3NfdCwgTUFYX05SX0JBTktTKTsKK0RFQ0xBUkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpOworCitlbnVtIG1jcF9mbGFncyB7CisJTUNQX1RJTUVTVEFNUCA9ICgxIDw8IDApLAkvKiBsb2cgdGltZSBzdGFtcCAqLworCU1DUF9VQyA9ICgxIDw8IDEpLAkJLyogbG9nIHVuY29ycmVjdGVkIGVycm9ycyAqLworfTsKK2V4dGVybiB2b2lkIG1hY2hpbmVfY2hlY2tfcG9sbChlbnVtIG1jcF9mbGFncyBmbGFncywgbWNlX2JhbmtzX3QgKmIpOworCiBleHRlcm4gaW50IG1jZV9ub3RpZnlfdXNlcih2b2lkKTsKIAogI2VuZGlmIC8qICFDT05GSUdfWDg2XzMyICovCkBAIC0xMjAsOCArMTQ5LDggQEAKICNlbHNlCiAjZGVmaW5lIG1jaGVja19pbml0KGMpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgotZXh0ZXJuIHZvaWQgc3RvcF9tY2Uodm9pZCk7Ci1leHRlcm4gdm9pZCByZXN0YXJ0X21jZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgKCptY2VfdGhyZXNob2xkX3ZlY3Rvcikodm9pZCk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9YODZfTUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zaWRlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKaW5kZXggNjcwNmIzMC4uNGNjNDhhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUJIE1TSV9BRERSX0RFU1RfSURfTUFTSwkJMHgwMGZmZmYwCiAjZGVmaW5lICBNU0lfQUREUl9ERVNUX0lEKGRlc3QpCQkoKChkZXN0KSA8PCBNU0lfQUREUl9ERVNUX0lEX1NISUZUKSAmIFwKIAkJCQkJIE1TSV9BRERSX0RFU1RfSURfTUFTSykKKyNkZWZpbmUgTVNJX0FERFJfRVhUX0RFU1RfSUQoZGVzdCkJKChkZXN0KSAmIDB4ZmZmZmZmMDApCiAKICNkZWZpbmUgTVNJX0FERFJfSVJfRVhUX0lOVAkJKDEgPDwgNCkKICNkZWZpbmUgTVNJX0FERFJfSVJfU0hWCQkJKDEgPDwgMykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggZjRlNTA1Zi4uZWM0MWZjMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTgxLDYgKzgxLDExIEBACiAjZGVmaW5lIE1TUl9JQTMyX01DMF9BRERSCQkweDAwMDAwNDAyCiAjZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDCQkweDAwMDAwNDAzCiAKKy8qIFRoZXNlIGFyZSBjb25zZWN1dGl2ZSBhbmQgbm90IGluIHRoZSBub3JtYWwgNGVyIE1DRSBiYW5rIGJsb2NrICovCisjZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwyCQkweDAwMDAwMjgwCisjZGVmaW5lIENNQ0lfRU4JCQkoMVVMTCA8PCAzMCkKKyNkZWZpbmUgQ01DSV9USFJFU0hPTERfTUFTSwkJMHhmZmZmVUxMCisKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHgwMDAwMDBjMQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjEJCQkweDAwMDAwMGMyCiAjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MDAwMDAxODYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaAppbmRleCBmMWU0YTc5Li4wZjkxNWFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCkBAIC0zOSw2ICszOSwxMSBAQAogI2RlZmluZSBfX1ZJUlRVQUxfTUFTS19TSElGVAkzMgogI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCiAKKy8qCisgKiBLZXJuZWwgaW1hZ2Ugc2l6ZSBpcyBsaW1pdGVkIHRvIDUxMiBNQiAoc2VlIGluIGFyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMpCisgKi8KKyNkZWZpbmUgS0VSTkVMX0lNQUdFX1NJWkUJKDUxMiAqIDEwMjQgKiAxMDI0KQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCmluZGV4IDJkNjI1ZGEuLjgyNmFkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKQEAgLTQwLDE0ICs0MCw4IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLXN0cnVjdCBwZ3Byb3Q7Ci0KIGV4dGVybiBpbnQgcGFnZV9pc19yYW0odW5zaWduZWQgbG9uZyBwYWdlbnIpOwogZXh0ZXJuIGludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2Vucik7Ci1leHRlcm4gdm9pZCBtYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCSAgICAgICBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKLWV4dGVybiB2b2lkIHVubWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfcGZuX21hcHBlZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDA2MTdkNWMuLjc3MjdhYTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtMzE3LDggKzMxNyw2IEBACiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAl2b2lkICgqc2V0X3B0ZV9hdG9taWMpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKCpzZXRfcHRlX3ByZXNlbnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSk7CiAJdm9pZCAoKnB0ZV9jbGVhcikoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgcHRlX3QgKnB0ZXApOwogCXZvaWQgKCpwbWRfY2xlYXIpKHBtZF90ICpwbWRwKTsKQEAgLTM4OSw3ICszODcsNyBAQAogCiAjZGVmaW5lIHBhcmF2aXJ0X3R5cGUob3ApCQkJCVwKIAlbcGFyYXZpcnRfdHlwZW51bV0gImkiIChQQVJBVklSVF9QQVRDSChvcCkpLAlcCi0JW3BhcmF2aXJ0X29wcHRyXSAibSIgKG9wKQorCVtwYXJhdmlydF9vcHB0cl0gImkiICgmKG9wKSkKICNkZWZpbmUgcGFyYXZpcnRfY2xvYmJlcihjbG9iYmVyKQkJXAogCVtwYXJhdmlydF9jbG9iYmVyXSAiaSIgKGNsb2JiZXIpCiAKQEAgLTQ0Myw3ICs0NDEsNyBAQAogICogb2Zmc2V0IGludG8gdGhlIHBhcmF2aXJ0X3BhdGNoX3RlbXBsYXRlIHN0cnVjdHVyZSwgYW5kIGNhbiB0aGVyZWZvcmUgYmUKICAqIGZyZWVseSBjb252ZXJ0ZWQgYmFjayBpbnRvIGEgc3RydWN0dXJlIG9mZnNldC4KICAqLwotI2RlZmluZSBQQVJBVklSVF9DQUxMCSJjYWxsIColW3BhcmF2aXJ0X29wcHRyXTsiCisjZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVjW3BhcmF2aXJ0X29wcHRyXTsiCiAKIC8qCiAgKiBUaGVzZSBtYWNyb3MgYXJlIGludGVuZGVkIHRvIHdyYXAgY2FsbHMgdGhyb3VnaCBvbmUgb2YgdGhlIHBhcmF2aXJ0CkBAIC0xMzY1LDEzICsxMzYzLDYgQEAKIAkJICAgIHB0ZS5wdGUsIHB0ZS5wdGUgPj4gMzIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQkvKiA1IGFyZyB3b3JkcyAqLwotCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgIHB0ZV90ICpwdGVwKQogewpAQCAtMTM4OCwxMiArMTM3OSw2IEBACiAJc2V0X3B0ZShwdGVwLCBwdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlzZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgcHRlX3QgKnB0ZXApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCmluZGV4IGIwZTcwMDUuLjJjZDA3YjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1g4Nl9QQVRfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIGV4dGVybiBpbnQgcGF0X2VuYWJsZWQ7CkBAIC0xNyw1ICsxOCw5IEBACiAKIGV4dGVybiBpbnQga2VybmVsX21hcF9zeW5jX21lbXR5cGUodTY0IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJdW5zaWduZWQgbG9uZyBmbGFnKTsKK2V4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOworZXh0ZXJuIHZvaWQgdW5tYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBhOTc3ZGUyLi5hMDMwMWJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaApAQCAtODYsNiArODYsOSBAQAogCiBleHRlcm4gdm9pZCBwY2lfaW9tbXVfYWxsb2Modm9pZCk7CiAKKy8qIE1TSSBhcmNoIGhvb2sgKi8KKyNkZWZpbmUgYXJjaF9zZXR1cF9tc2lfaXJxcyBhcmNoX3NldHVwX21zaV9pcnFzCisKICNlbmRpZiAgLyogX19LRVJORUxfXyAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKaW5kZXggYzE3NzRhYy4uMjMzNDk4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0yNiwxMyArMjYsNiBAQAogCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkJICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfcG1kX2NsZWFyKHBtZF90ICpwbWRwKQogewogCW5hdGl2ZV9zZXRfcG1kKHBtZHAsIF9fcG1kKDApKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCmluZGV4IDNmMTNjZGYuLjE3N2IwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaApAQCAtMzEsMjMgKzMxLDYgQEAKIAlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7CiB9CiAKLS8qCi0gKiBTaW5jZSB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uIHVzZXIgUFRFcywgYW5kIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIKLSAqIG11c3QgaGFuZGxlIHRoZSBhbHJlYWR5IHJhY3kgc2l0dWF0aW9uIG9mIHNpbXVsdGFuZW91cyBwYWdlIGZhdWx0cywKLSAqIHdlIGFyZSBqdXN0aWZpZWQgaW4gbWVyZWx5IGNsZWFyaW5nIHRoZSBQVEUgcHJlc2VudCBiaXQsIGZvbGxvd2VkCi0gKiBieSBhIHNldC4gIFRoZSBvcmRlcmluZyBoZXJlIGlzIGltcG9ydGFudC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JcHRlcC0+cHRlX2xvdyA9IDA7Ci0Jc21wX3dtYigpOwotCXB0ZXAtPnB0ZV9oaWdoID0gcHRlLnB0ZV9oaWdoOwotCXNtcF93bWIoKTsKLQlwdGVwLT5wdGVfbG93ID0gcHRlLnB0ZV9sb3c7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBuYXRpdmVfc2V0X3B0ZV9hdG9taWMocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShwdGVwKSwgbmF0aXZlX3B0ZV92YWwocHRlKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDA4MTJlMS4uMjlkOTZkMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzEsOCArMzEsNiBAQAogI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZSkJCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSkKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQluYXRpdmVfc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKQogCi0jZGVmaW5lIHNldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQkJCQlcCi0JbmF0aXZlX3NldF9wdGVfcHJlc2VudChtbSwgYWRkciwgcHRlcCwgcHRlKQogI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwLCBwdGUpCQkJCQlcCiAJbmF0aXZlX3NldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDk3NjEyZmMuLjMxYmQxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTQyLDkgKzQyLDYgQEAKICAqLwogI3VuZGVmIFRFU1RfQUNDRVNTX09LCiAKLS8qIFRoZSBib290IHBhZ2UgdGFibGVzIChhbGwgY3JlYXRlZCBhcyBhIHNpbmdsZSBhcnJheSkgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHBnMFtdOwotCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICMgaW5jbHVkZSA8YXNtL3BndGFibGUtM2xldmVsLmg+CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCmluZGV4IGJkOGRmM2IuLjI3MzNmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKQEAgLTI1LDYgKzI1LDExIEBACiAgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCiAgKi8KICNkZWZpbmUgVk1BTExPQ19PRkZTRVQJKDggKiAxMDI0ICogMTAyNCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCitleHRlcm4gYm9vbCBfX3ZtYWxsb2Nfc3RhcnRfc2V0OyAvKiBzZXQgb25jZSBoaWdoX21lbW9yeSBpcyBzZXQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQJKCh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKICNkZWZpbmUgTEFTVF9QS01BUCA1MTIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCA0ZDI1OGFkLi5iODIzOGRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yNzMsNiArMjczLDcgQEAKIAogZXh0ZXJuIHB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOwogZXh0ZXJuIGludCBueF9lbmFibGVkOworZXh0ZXJuIHZvaWQgc2V0X254KHZvaWQpOwogCiAjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUJcGdwcm90X3dyaXRlY29tYmluZQogZXh0ZXJuIHBncHJvdF90IHBncHJvdF93cml0ZWNvbWJpbmUocGdwcm90X3QgcHJvdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDc2MTM5NTAuLmFlODVhOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC03NSw5ICs3NSw5IEBACiAjZWxzZQogCS8qIE51bWJlciBvZiA0SyBwYWdlcyBpbiBEVExCL0lUTEIgY29tYmluZWQoaW4gcGFnZXMpOiAqLwogCWludAkJCXg4Nl90bGJzaXplOworI2VuZGlmCiAJX191OAkJCXg4Nl92aXJ0X2JpdHM7CiAJX191OAkJCXg4Nl9waHlzX2JpdHM7Ci0jZW5kaWYKIAkvKiBDUFVJRCByZXR1cm5lZCBjb3JlIGlkIGJpdHM6ICovCiAJX191OAkJCXg4Nl9jb3JlaWRfYml0czsKIAkvKiBNYXggZXh0ZW5kZWQgQ1BVSUQgZnVuY3Rpb24gc3VwcG9ydGVkOiAqLwpAQCAtMzkxLDYgKzM5MSw5IEBACiBERUNMQVJFX0lOSVRfUEVSX0NQVShpcnFfc3RhY2tfdW5pb24pOwogCiBERUNMQVJFX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKTsKK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBrZXJuZWxfZWZsYWdzOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBpZ25vcmVfc3lzcmV0KHZvaWQpOwogI2Vsc2UJLyogWDg2XzY0ICovCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc3RhY2tfY2FuYXJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDJiOGM1MTYuLjFiN2VlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMSArMSw4IEBACisjaWZuZGVmIF9BU01fWDg2X1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9YODZfU0VDVElPTlNfSAorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KKworZXh0ZXJuIGNoYXIgX19icmtfYmFzZVtdLCBfX2Jya19saW1pdFtdOworCisjZW5kaWYJLyogX0FTTV9YODZfU0VDVElPTlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggMDVjNmY2Yi4uYmRjMmFkYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgogCiAvKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotI2lmZGVmIENPTkZJR19YODZfVlNNUAorI2lmZGVmIENPTkZJR19YODZfNjQKIHZvaWQgdnNtcF9pbml0KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB2c21wX2luaXQodm9pZCkgeyB9CkBAIC0xMDAsMjAgKzEwMCw1MSBAQAogICovCiAjZGVmaW5lIExPV01FTVNJWkUoKQkoMHg5ZjAwMCkKIAorLyogZXhjZWVkaW5nbHkgZWFybHkgYnJrLWxpa2UgYWxsb2NhdG9yICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfYnJrX2VuZDsKK3ZvaWQgKmV4dGVuZF9icmsoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbik7CisKKy8qCisgKiBSZXNlcnZlIHNwYWNlIGluIHRoZSBicmsgc2VjdGlvbi4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbgorICogdGhlIGZpbGUsIGFuZCBzb21ld2hhdCBkZXNjcmlwdGl2ZS4gIFRoZSBzaXplIGlzIGluIGJ5dGVzLiAgTXVzdCBiZQorICogdXNlZCBhdCBmaWxlIHNjb3BlLgorICoKKyAqIChUaGlzIHVzZXMgYSB0ZW1wIGZ1bmN0aW9uIHRvIHdyYXAgdGhlIGFzbSBzbyB3ZSBjYW4gcGFzcyBpdCB0aGUKKyAqIHNpemUgcGFyYW1ldGVyOyBvdGhlcndpc2Ugd2Ugd291bGRuJ3QgYmUgYWJsZSB0by4gIFdlIGNhbid0IHVzZSBhCisgKiAic2VjdGlvbiIgYXR0cmlidXRlIG9uIGEgbm9ybWFsIHZhcmlhYmxlIGJlY2F1c2UgaXQgYWx3YXlzIGVuZHMgdXAKKyAqIGJlaW5nIEBwcm9nYml0cywgd2hpY2ggZW5kcyB1cCBhbGxvY2F0aW5nIHNwYWNlIGluIHRoZSB2bWxpbnV4CisgKiBleGVjdXRhYmxlLikKKyAqLworI2RlZmluZSBSRVNFUlZFX0JSSyhuYW1lLHN6KQkJCQkJCVwKKwlzdGF0aWMgdm9pZCBfX3NlY3Rpb24oLmRpc2NhcmQpIF9fdXNlZAkJCQlcCisJX19icmtfcmVzZXJ2YXRpb25fZm5fIyNuYW1lIyNfXyh2b2lkKSB7CQkJCVwKKwkJYXNtIHZvbGF0aWxlICgJCQkJCQlcCisJCQkiLnB1c2hzZWN0aW9uIC5icmtfcmVzZXJ2YXRpb24sXCJhd1wiLEBub2JpdHM7IiBcCisJCQkiLmJyay4iICNuYW1lICI6IgkJCQlcCisJCQkiIDE6LnNraXAgJWMwOyIJCQkJCVwKKwkJCSIgLnNpemUgLmJyay4iICNuYW1lICIsIC4gLSAxYjsiCQlcCisJCQkiIC5wb3BzZWN0aW9uIgkJCQkJXAorCQkJOiA6ICJpIiAoc3opKTsJCQkJCVwKKwl9CisKICNpZmRlZiBfX2kzODZfXwogCiB2b2lkIF9faW5pdCBpMzg2X3N0YXJ0X2tlcm5lbCh2b2lkKTsKIGV4dGVybiB2b2lkIHByb2JlX3JvbXModm9pZCk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGluaXRfcGdfdGFibGVzX3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfZW5kOwotCiAjZWxzZQogdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X2tlcm5lbChjaGFyICpyZWFsX21vZGUpOwogdm9pZCBfX2luaXQgeDg2XzY0X3N0YXJ0X3Jlc2VydmF0aW9ucyhjaGFyICpyZWFsX21vZGVfZGF0YSk7CiAKICNlbmRpZiAvKiBfX2kzODZfXyAqLwogI2VuZGlmIC8qIF9TRVRVUCAqLworI2Vsc2UKKyNkZWZpbmUgUkVTRVJWRV9CUksobmFtZSxzeikJCQkJXAorCS5wdXNoc2VjdGlvbiAuYnJrX3Jlc2VydmF0aW9uLCJhdyIsQG5vYml0czsJXAorLmJyay5uYW1lOgkJCQkJCVwKKzE6CS5za2lwIHN6OwkJCQkJXAorCS5zaXplIC5icmsubmFtZSwuLTFiOwkJCQlcCisJLnBvcHNlY3Rpb24KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCmluZGV4IDNhNTY5NjYuLmU1ZTZjYWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjk1LDYgKzI5NSw5IEBACiAJCSAgICAgOiAiK20iIChydy0+bG9jaykgOiAiaSIgKFJXX0xPQ0tfQklBUykgOiAibWVtb3J5Iik7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VzcGVuZF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VzcGVuZF8zMi5oCmluZGV4IGE1MDc0YmQuLjQ4ZGNmYTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1c3BlbmRfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzMyLmgKQEAgLTI0LDI4ICsyNCw0IEBACiAJdW5zaWduZWQgbG9uZyByZXR1cm5fYWRkcmVzczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNpZmRlZiBDT05GSUdfQUNQSQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWlwOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZXNwOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWJwOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWJ4OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZXNpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZWRpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9zYXZlX3JlZ2lzdGVyX3N0YXRlKHVuc2lnbmVkIGxvbmcgcmV0dXJuX3BvaW50KQotewotCXNhdmVkX2VpcCA9IHJldHVybl9wb2ludDsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc3AsJTAiIDogIj1tIiAoc2F2ZWRfZXNwKSk7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJwLCUwIiA6ICI9bSIgKHNhdmVkX2VicCkpOwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVieCwlMCIgOiAiPW0iIChzYXZlZF9lYngpKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlZGksJTAiIDogIj1tIiAoc2F2ZWRfZWRpKSk7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZXNpLCUwIiA6ICI9bSIgKHNhdmVkX2VzaSkpOwotfQotCi0jZGVmaW5lIGFjcGlfcmVzdG9yZV9yZWdpc3Rlcl9zdGF0ZSgpICBkbyB7fSB3aGlsZSAoMCkKLQotLyogcm91dGluZXMgZm9yIHNhdmluZy9yZXN0b3Jpbmcga2VybmVsIHN0YXRlICovCi1leHRlcm4gaW50IGFjcGlfc2F2ZV9zdGF0ZV9tZW0odm9pZCk7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fWDg2X1NVU1BFTkRfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggYTgxMTk1ZS4uYmQzN2VkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC0xMiw5ICsxMiw5IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IHRpbWVyX2FjazsKLWV4dGVybiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTsKIGV4dGVybiBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCitleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7CiAKIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDc3Y2ZiMmMuLjc0NDI5OWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMjE3LDEwICsyMTcsNiBAQAogewogCXJldHVybiBjcHVfb25saW5lX21hcDsKIH0KLXN0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQotewotCXJldHVybiBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOwotfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKSB7IH0KIApAQCAtMjM3LDE0ICsyMzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAotI2lmZGVmIENPTkZJR19OVU1BCi0vKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGZpcnN0IENQVSBvbiBOb2RlICdub2RlJy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5vZGVfdG9fZmlyc3RfY3B1KGludCBub2RlKQotewotCXJldHVybiBjcHVtYXNrX2ZpcnN0KGNwdW1hc2tfb2Zfbm9kZShub2RlKSk7Ci19Ci0jZW5kaWYKLQogZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcChpbnQgY3B1KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGYyYmJhNzguLjZlNzJkNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0zMzgsNiArMzM4LDggQEAKICNkZWZpbmUgX19OUl9kdXAzCQkzMzAKICNkZWZpbmUgX19OUl9waXBlMgkJMzMxCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MQkzMzIKKyNkZWZpbmUgX19OUl9wcmVhZHYJCTMzMworI2RlZmluZSBfX05SX3B3cml0ZXYJCTMzNAogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGQyZTQxNWUuLmY4MTgyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NTMsNiArNjUzLDEwIEBACiBfX1NZU0NBTEwoX19OUl9waXBlMiwgc3lzX3BpcGUyKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCQkyOTQKIF9fU1lTQ0FMTChfX05SX2lub3RpZnlfaW5pdDEsIHN5c19pbm90aWZ5X2luaXQxKQorI2RlZmluZSBfX05SX3ByZWFkdgkJCQkyOTUKK19fU1lTQ0FMTChfX05SX3ByZWFkdiwgc3lzX3ByZWFkdikKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJCTI5NgorX19TWVNDQUxMKF9fTlJfcHdyaXRldiwgc3lzX3B3cml0ZXYpCiAKIAogI2lmbmRlZiBfX05PX1NUVUJTCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCmluZGV4IDc3NzMyN2UuLmQzYTk4ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCkBAIC0xMSwxMSArMTEsMTMgQEAKICNpZm5kZWYgX0FTTV9YODZfVVZfVVZfSFVCX0gKICNkZWZpbmUgX0FTTV9YODZfVVZfVVZfSFVCX0gKIAorI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X21tcnMuaD4KIAogCiAvKgpAQCAtMTk5LDYgKzIwMSwxMCBAQAogI2RlZmluZSBTQ0lSX0NQVV9BQ1RJVklUWQkweDAyCS8qIG5vdCBpZGxlICovCiAjZGVmaW5lIFNDSVJfQ1BVX0hCX0lOVEVSVkFMCShIWikJLyogb25jZSBwZXIgc2Vjb25kICovCiAKKy8qIExvb3AgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIGJsYWRlcyAqLworI2RlZmluZSBmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShiaWQpCQlcCisJZm9yICgoYmlkKSA9IDA7IChiaWQpIDwgdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOyAoYmlkKSsrKQorCiAvKgogICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4ga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzLCBzb2NrZXQgbG9jYWwgcGh5c2ljYWwKICAqIGFkZHJlc3NlcywgYW5kIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzZXMuCkBAIC0zOTMsNiArMzk5LDcgQEAKIAkJdXZfd3JpdGVfbG9jYWxfbW1yOCh1dl9odWJfaW5mby0+c2Npci5vZmZzZXQsIHZhbHVlKTsKIAl9CiB9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1dl9zZXRfY3B1X3NjaXJfYml0cyhpbnQgY3B1LCB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewogCWlmICh1dl9jcHVfaHViX2luZm8oY3B1KS0+c2Npci5zdGF0ZSAhPSB2YWx1ZSkgewpAQCAtNDAxLDQgKzQwOCwxNSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHV2X2h1Yl9zZW5kX2lwaShpbnQgcG5vZGUsIGludCBhcGljaWQsIGludCB2ZWN0b3IpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAorCQkJKChhcGljaWQgJiAweDNmKSA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkJCSh2ZWN0b3IgPDwgVVZIX0lQSV9JTlRfVkVDVE9SX1NIRlQpOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAjZW5kaWYgLyogX0FTTV9YODZfVVZfVVZfSFVCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAppbmRleCBkZDYyNzc5Li5kYjY4YWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTI0Myw2ICsyNDQsMTU4IEBACiAjZGVmaW5lIFVWSF9FVkVOVF9PQ0NVUlJFRDBfQUxJQVNfMzIgMHgwMDVmMAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHIDB4NjFiMDBVTAorCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMF90bGJfaW50MF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IwX3RsYl9pbnQwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHIDB4NjFiNDBVTAorCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMF90bGJfaW50MV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IwX3RsYl9pbnQxX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHIDB4NjFmMDBVTAorCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMV90bGJfaW50MF9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IxX3RsYl9pbnQwX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHIDB4NjFmNDBVTAorCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1ZFQ1RPUl9TSEZUIDAKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX01BU0sgMHgwMDAwMDAwMDAwMDAwMGZmVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfRE1fU0hGVCA4CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RNX01BU0sgMHgwMDAwMDAwMDAwMDAwNzAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfREVTVE1PREVfU0hGVCAxMQorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9NQVNLIDB4MDAwMDAwMDAwMDAwMDgwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1NUQVRVU19TSEZUIDEyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1NUQVRVU19NQVNLIDB4MDAwMDAwMDAwMDAwMTAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1BfU0hGVCAxMworI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19QX01BU0sgMHgwMDAwMDAwMDAwMDAyMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVF9TSEZUIDE1CisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1RfTUFTSyAweDAwMDAwMDAwMDAwMDgwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19NX1NIRlQgMTYKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfTV9NQVNLIDB4MDAwMDAwMDAwMDAxMDAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfU0hGVCAzMgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19BUElDX0lEX01BU0sgMHhmZmZmZmZmZjAwMDAwMDAwVUwKKwordW5pb24gdXZoX2dyMV90bGJfaW50MV9jb25maWdfdSB7CisgICAgdW5zaWduZWQgbG9uZwl2OworICAgIHN0cnVjdCB1dmhfZ3IxX3RsYl9pbnQxX2NvbmZpZ19zIHsKKwl1bnNpZ25lZCBsb25nCXZlY3Rvcl8gIDogIDg7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJZG0gICAgICAgOiAgMzsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkZXN0bW9kZSA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXN0YXR1cyAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJcCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE0ICA6ICAxOyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCXQgICAgICAgIDogIDE7ICAvKiBSTyAqLworCXVuc2lnbmVkIGxvbmcJbSAgICAgICAgOiAgMTsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlyc3ZkXzE3XzMxOiAxNTsgIC8qICAgICovCisJdW5zaWduZWQgbG9uZwlhcGljX2lkICA6IDMyOyAgLyogUlcgKi8KKyAgICB9IHM7Cit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfSU5UX0NNUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAjZGVmaW5lIFVWSF9JTlRfQ01QQiAweDIyMDgwVUwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAppbmRleCA1ZTc5Y2E2Li45YzM3MWU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC0yOTYsNiArMjk2LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBIWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yKHU2NCBtYSwgdTY0IGRlc2MpCiB7CisJaWYgKHNpemVvZih1NjQpID09IHNpemVvZihsb25nKSkKKwkJcmV0dXJuIF9oeXBlcmNhbGwyKGludCwgdXBkYXRlX2Rlc2NyaXB0b3IsIG1hLCBkZXNjKTsKIAlyZXR1cm4gX2h5cGVyY2FsbDQoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIG1hPj4zMiwgZGVzYywgZGVzYz4+MzIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOTVmMjE2Yi4uYzYxMWFkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtNzAsNyArNzAsNiBAQAogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlY18kKEJJVFMpLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IHJlbG9jYXRlX2tlcm5lbF8kKEJJVFMpLm8gY3Jhc2gubwogb2JqLSQoQ09ORklHX0NSQVNIX0RVTVApCSs9IGNyYXNoX2R1bXBfJChCSVRTKS5vCi1vYmotJChDT05GSUdfWDg2X1ZTTVApCQkrPSB2c21wXzY0Lm8KIG9iai0kKENPTkZJR19LUFJPQkVTKQkJKz0ga3Byb2Jlcy5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19FRkkpIAkJKz0gZWZpLm8gZWZpXyQoQklUUykubyBlZmlfc3R1Yl8kKEJJVFMpLm8KQEAgLTEwNiwxMiArMTA1LDEyIEBACiAKIG9iai0kKENPTkZJR19YODZfQ0hFQ0tfQklPU19DT1JSVVBUSU9OKSArPSBjaGVjay5vCiAKLW9iai0kKENPTkZJR19TV0lPVExCKQkJCSs9IHBjaS1zd2lvdGxiXzY0Lm8gIyBOQiByZW5hbWUgd2l0aG91dCBfNjQKK29iai0kKENPTkZJR19TV0lPVExCKQkJCSs9IHBjaS1zd2lvdGxiLm8KIAogIyMjCiAjIDY0IGJpdCBzcGVjaWZpYyBmaWxlcwogaWZlcSAoJChDT05GSUdfWDg2XzY0KSx5KQotCW9iai0kKENPTkZJR19YODZfVVYpCQkrPSB0bGJfdXYubyBiaW9zX3V2Lm8gdXZfaXJxLm8gdXZfc3lzZnMubworCW9iai0kKENPTkZJR19YODZfVVYpCQkrPSB0bGJfdXYubyBiaW9zX3V2Lm8gdXZfaXJxLm8gdXZfc3lzZnMubyB1dl90aW1lLm8KIAlvYmotJChDT05GSUdfWDg2X1BNX1RJTUVSKQkrPSBwbXRpbWVyXzY0Lm8KIAlvYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdF82NC5vCiAKQEAgLTEyMCw0ICsxMTksNSBAQAogCW9iai0kKENPTkZJR19BTURfSU9NTVUpCQkrPSBhbWRfaW9tbXVfaW5pdC5vIGFtZF9pb21tdS5vCiAKIAlvYmotJChDT05GSUdfUENJX01NQ09ORklHKQkrPSBtbWNvbmYtZmFtMTBoXzY0Lm8KKwlvYmoteQkJCQkrPSB2c21wXzY0Lm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDY5MDdiOGUuLjRjODBmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC00MTQsOSArNDE0LDE3IEBACiAJICAgdGhhdCBtaWdodCBleGVjdXRlIHRoZSB0byBiZSBwYXRjaGVkIGNvZGUuCiAJICAgT3RoZXIgQ1BVcyBhcmUgbm90IHJ1bm5pbmcuICovCiAJc3RvcF9ubWkoKTsKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCXN0b3BfbWNlKCk7Ci0jZW5kaWYKKworCS8qCisJICogRG9uJ3Qgc3RvcCBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbnMgd2hpbGUgcGF0Y2hpbmcuCisJICogTUNFcyBvbmx5IGhhcHBlbiB3aGVuIHNvbWV0aGluZyBnb3QgY29ycnVwdGVkIGFuZCBpbiB0aGlzCisJICogY2FzZSB3ZSBtdXN0IGRvIHNvbWV0aGluZyBhYm91dCB0aGUgY29ycnVwdGlvbi4KKwkgKiBJZ25vcmluZyBpdCBpcyB3b3JzZSB0aGFuIGEgdW5saWtlbHkgcGF0Y2hpbmcgcmFjZS4KKwkgKiBBbHNvIG1hY2hpbmUgY2hlY2tzIHRlbmQgdG8gYmUgYnJvYWRjYXN0IGFuZCBpZiBvbmUgQ1BVCisJICogZ29lcyBpbnRvIG1hY2hpbmUgY2hlY2sgdGhlIG90aGVycyBmb2xsb3cgcXVpY2tseSwgc28gd2UgZG9uJ3QKKwkgKiBleHBlY3QgYSBtYWNoaW5lIGNoZWNrIHRvIGNhdXNlIHVuZHVlIHByb2JsZW1zIGR1cmluZyB0byBjb2RlCisJICogcGF0Y2hpbmcuCisJICovCiAKIAlhcHBseV9hbHRlcm5hdGl2ZXMoX19hbHRfaW5zdHJ1Y3Rpb25zLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kKTsKIApAQCAtNDU2LDkgKzQ2NCw2IEBACiAJCQkJKHVuc2lnbmVkIGxvbmcpX19zbXBfbG9ja3NfZW5kKTsKIAogCXJlc3RhcnRfbm1pKCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl9NQ0UKLQlyZXN0YXJ0X21jZSgpOwotI2VuZGlmCiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IDUxMTNjMDguLmE5N2RiOTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTIyLDEwICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pb21tdS1oZWxwZXIuaD4KLSNpZmRlZiBDT05GSUdfSU9NTVVfQVBJCiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9nYXJ0Lmg+CkBAIC0xMjk3LDggKzEyOTYsMTAgQEAKIC8qCiAgKiBUaGUgZXhwb3J0ZWQgbWFwX3NpbmdsZSBmdW5jdGlvbiBmb3IgZG1hX29wcy4KICAqLwotc3RhdGljIGRtYV9hZGRyX3QgbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBoeXNfYWRkcl90IHBhZGRyLAotCQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3N0YXRpYyBkbWFfYWRkcl90IG1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwpAQCAtMTMwNiw2ICsxMzA3LDcgQEAKIAl1MTYgZGV2aWQ7CiAJZG1hX2FkZHJfdCBhZGRyOwogCXU2NCBkbWFfbWFzazsKKwlwaHlzX2FkZHJfdCBwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKIAogCUlOQ19TVEFUU19DT1VOVEVSKGNudF9tYXBfc2luZ2xlKTsKIApAQCAtMTM0MCw4ICsxMzQyLDggQEAKIC8qCiAgKiBUaGUgZXhwb3J0ZWQgdW5tYXBfc2luZ2xlIGZ1bmN0aW9uIGZvciBkbWFfb3BzLgogICovCi1zdGF0aWMgdm9pZCB1bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyKQorc3RhdGljIHZvaWQgdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwpAQCAtMTM5MCw3ICsxMzkyLDggQEAKICAqIGxpc3RzKS4KICAqLwogc3RhdGljIGludCBtYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJICBpbnQgbmVsZW1zLCBpbnQgZGlyKQorCQkgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwpAQCAtMTQ1Nyw3ICsxNDYwLDggQEAKICAqIGxpc3RzKS4KICAqLwogc3RhdGljIHZvaWQgdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKLQkJICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyKQorCQkgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OwpAQCAtMTY0NCwxMSArMTY0OCwxMSBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgYW1kX2lvbW11X2RtYV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIGFtZF9pb21tdV9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IGFsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IG1hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZSA9IHVubWFwX3NpbmdsZSwKKwkubWFwX3BhZ2UgPSBtYXBfcGFnZSwKKwkudW5tYXBfcGFnZSA9IHVubWFwX3BhZ2UsCiAJLm1hcF9zZyA9IG1hcF9zZywKIAkudW5tYXBfc2cgPSB1bm1hcF9zZywKIAkuZG1hX3N1cHBvcnRlZCA9IGFtZF9pb21tdV9kbWFfc3VwcG9ydGVkLApAQCAtMTkyNCw2ICsxOTI4LDEyIEBACiAJcmV0dXJuIHBhZGRyOwogfQogCitzdGF0aWMgaW50IGFtZF9pb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2FwKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhbWRfaW9tbXVfb3BzID0gewogCS5kb21haW5faW5pdCA9IGFtZF9pb21tdV9kb21haW5faW5pdCwKIAkuZG9tYWluX2Rlc3Ryb3kgPSBhbWRfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCkBAIC0xOTMyLDUgKzE5NDIsNiBAQAogCS5tYXAgPSBhbWRfaW9tbXVfbWFwX3JhbmdlLAogCS51bm1hcCA9IGFtZF9pb21tdV91bm1hcF9yYW5nZSwKIAkuaW92YV90b19waHlzID0gYW1kX2lvbW11X2lvdmFfdG9fcGh5cywKKwkuZG9tYWluX2hhc19jYXAgPSBhbWRfaW9tbXVfZG9tYWluX2hhc19jYXAsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggZjljZWNkZi4uODVlYjhlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7CiAKQEAgLTgwOCw3ICs4MDksNyBAQAogCXUzMiB2OwogCiAJLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCi0JaWYgKCFhcGljX3BoeXMpCisJaWYgKCF4MmFwaWMgJiYgIWFwaWNfcGh5cykKIAkJcmV0dXJuOwogCiAJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwpAQCAtODQyLDYgKzg0MywxNCBAQAogCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKKwlpZiAobWF4bHZ0ID49IDYpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVENNQ0kpOworCQlpZiAoISh2ICYgQVBJQ19MVlRfTUFTS0VEKSkKKwkJCWFwaWNfd3JpdGUoQVBJQ19MVlRDTUNJLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl9CisjZW5kaWYKKwogCS8qCiAJICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgogCSAqLwpAQCAtMTI0MSw2ICsxMjUwLDEyIEBACiAJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAorCS8qIFJlY2hlY2sgQ01DSSBpbmZvcm1hdGlvbiBhZnRlciBsb2NhbCBBUElDIGlzIHVwIG9uIENQVSAjMCAqLworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKKwkJY21jaV9yZWNoZWNrKCk7CisjZW5kaWYKIH0KIAogdm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKQEAgLTEzMTksMTUgKzEzMzQsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrXzgyNTlBKCk7Ci0KLQlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOworCXJldCA9IHNhdmVfSU9fQVBJQ19zZXR1cCgpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlbmQ7CiAJfQogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW1hc2tfSU9fQVBJQ19zZXR1cCgpOworCW1hc2tfODI1OUEoKTsKKwogCXJldCA9IGVuYWJsZV9pbnRyX3JlbWFwcGluZygxKTsKIAogCWlmIChyZXQgJiYgeDJhcGljX3ByZWVuYWJsZWQpIHsKQEAgLTEzNTIsMTAgKzEzNjgsMTAgQEAKIAllbHNlCiAJCXJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoeDJhcGljX3ByZWVuYWJsZWQpOwogCi1lbmQ6CiAJdW5tYXNrXzgyNTlBKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCitlbmQ6CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCkKIAkJCXByX2luZm8oIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKQEAgLTE1MDgsMTIgKzE1MjQsMTAgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIAlpZiAoeDJhcGljKSB7CiAJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwogCQlyZXR1cm47CiAJfQotI2VuZGlmCiAKIAkvKgogCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gc2V0IHVwIGEgZmFrZSBhbGwKQEAgLTE5NTcsMTIgKzE5NzEsOSBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIAlpZiAoeDJhcGljKQogCQllbmFibGVfeDJhcGljKCk7Ci0JZWxzZQotI2VuZGlmCi0JeworCWVsc2UgewogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIEFQSUNCQVNFIHBvaW50cyB0byB0aGUgcmlnaHQgYWRkcmVzcwogCQkgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwppbmRleCBmOTMzODIyLi4wMDE0NzE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwpAQCAtMTU5LDIwICsxNTksNiBAQAogCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF94YXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0JdW5zaWduZWQgbG9uZyBtYXNrMiA9IGNwdW1hc2tfYml0cyhhbmRtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0KLQlyZXR1cm4gbWFzazEgJiBtYXNrMjsKLX0KLQogc3RhdGljIGludCBmbGF0X3BoeXNfcGtnX2lkKGludCBpbml0aWFsX2FwaWNfaWQsIGludCBpbmRleF9tc2IpCiB7CiAJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKQEAgLTIxMyw4ICsxOTksOCBAQAogCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCiAJLmFwaWNfaWRfbWFzawkJCT0gMHhGRnUgPDwgMjQsCiAKLQkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkLAotCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKIAogCS5zZW5kX0lQSV9tYXNrCQkJPSBmbGF0X3NlbmRfSVBJX21hc2ssCiAJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IGZsYXRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDAwZTYwNzEuLjFiYjVjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTM4OSw2ICszODksOCBAQAogCXVuc2lnbmVkIGludCBpbmRleDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogCXVuc2lnbmVkIGludCBkYXRhOworCXVuc2lnbmVkIGludCB1bnVzZWQyWzExXTsKKwl1bnNpZ25lZCBpbnQgZW9pOwogfTsKIAogc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCkBAIC0zOTcsNiArMzk5LDEyIEBACiAJCSsgKG1wX2lvYXBpY3NbaWR4XS5hcGljYWRkciAmIH5QQUdFX01BU0spOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19lb2kodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2ZWN0b3IpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwodmVjdG9yLCAmaW9fYXBpYy0+ZW9pKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CkBAIC01NDYsMTYgKzU1NCwxMiBAQAogCiAJCWFwaWMgPSBlbnRyeS0+YXBpYzsKIAkJcGluID0gZW50cnktPnBpbjsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkvKgogCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCiAJCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KIAkJICovCiAJCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCiAJCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0jZWxzZQotCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0jZW5kaWYKIAkJcmVnID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyBwaW4qMik7CiAJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKIAkJcmVnIHw9IHZlY3RvcjsKQEAgLTU4OCwxMCArNTkyLDEyIEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CiAKLQljcHVtYXNrX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4sIG1hc2spOworCS8qIGNoZWNrIHRoYXQgYmVmb3JlIGRlc2MtPmFkZGluaXR5IGdldCB1cGRhdGVkICovCiAJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKIAotCXJldHVybiBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjcHVfb25saW5lX21hc2spOworCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CisKKwlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtODQ5LDkgKzg1NSw5IEBACiBzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107CiAKIC8qCi0gKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCisgKiBTYXZlcyBhbGwgdGhlIElPLUFQSUMgUlRFJ3MKICAqLwotaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCitpbnQgc2F2ZV9JT19BUElDX3NldHVwKHZvaWQpCiB7CiAJdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NzYsMTYgKzg4Miw5IEBACiAJfQogCiAJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSA9CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCisJCQllYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dID0KIAkJCQlpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCQkJaWYgKCFlbnRyeS5tYXNrKSB7Ci0JCQkJZW50cnkubWFzayA9IDE7Ci0JCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotCQkJfQotCQl9CiAKIAlyZXR1cm4gMDsKIApAQCAtODk4LDYgKzg5NywyNSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCit2b2lkIG1hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCWludCBhcGljLCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlicmVhazsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXTsKKwkJCWlmICghZW50cnkubWFzaykgeworCQkJCWVudHJ5Lm1hc2sgPSAxOworCQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKKwkJCX0KKwkJfQorCX0KK30KKwogdm9pZCByZXN0b3JlX0lPX0FQSUNfc2V0dXAodm9pZCkKIHsKIAlpbnQgYXBpYywgcGluOwpAQCAtMTQxMSw5ICsxNDI5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcDsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcDsKLSNlbmRpZgogCiAjZGVmaW5lIElPQVBJQ19BVVRPICAgICAtMQogI2RlZmluZSBJT0FQSUNfRURHRSAgICAgMApAQCAtMTQ1Miw3ICsxNDY4LDYgQEAKIAllbHNlCiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKIAkJaWYgKHRyaWdnZXIpCkBAIC0xNDY0LDcgKzE0NzksNyBAQAogCQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQlyZXR1cm47CiAJfQotI2VuZGlmCisKIAlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAogCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCkBAIC0xNDc4LDE0ICsxNDkzLDEzIEBACiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljX2lkLCBpbnQgaXJxLAogCQkgICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAogCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJICAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3RvcikKKwkJICAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3RvciwgaW50IHBpbikKIHsKIAkvKgogCSAqIGFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKIAkgKi8KIAltZW1zZXQoZW50cnksMCxzaXplb2YoKmVudHJ5KSk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7CiAJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBtYXBfaW9hcGljX3RvX2lyKGFwaWNfaWQpOwogCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwpAQCAtMTUwNCw3ICsxNTE4LDE0IEBACiAKIAkJaXJ0ZS5wcmVzZW50ID0gMTsKIAkJaXJ0ZS5kc3RfbW9kZSA9IGFwaWMtPmlycV9kZXN0X21vZGU7Ci0JCWlydGUudHJpZ2dlcl9tb2RlID0gdHJpZ2dlcjsKKwkJLyoKKwkJICogVHJpZ2dlciBtb2RlIGluIHRoZSBJUlRFIHdpbGwgYWx3YXlzIGJlIGVkZ2UsIGFuZCB0aGUKKwkJICogYWN0dWFsIGxldmVsIG9yIGVkZ2UgdHJpZ2dlciB3aWxsIGJlIHNldHVwIGluIHRoZSBJTy1BUElDCisJCSAqIFJURS4gVGhpcyB3aWxsIGhlbHAgc2ltcGxpZnkgbGV2ZWwgdHJpZ2dlcmVkIGlycSBtaWdyYXRpb24uCisJCSAqIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgY29tbWVudHMgYWJvdmUgZXhwbGFpbmlnIElPLUFQSUMKKwkJICogaXJxIG1pZ3JhdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJydXB0LXJlbWFwcGluZy4KKwkJICovCisJCWlydGUudHJpZ2dlcl9tb2RlID0gMDsKIAkJaXJ0ZS5kbHZyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CiAJCWlydGUudmVjdG9yID0gdmVjdG9yOwogCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdGluYXRpb24pOwpAQCAtMTUxNSwxOCArMTUzNiwyMSBAQAogCQlpcl9lbnRyeS0+emVybyA9IDA7CiAJCWlyX2VudHJ5LT5mb3JtYXQgPSAxOwogCQlpcl9lbnRyeS0+aW5kZXggPSAoaW5kZXggJiAweDdmZmYpOwotCX0gZWxzZQotI2VuZGlmCi0JeworCQkvKgorCQkgKiBJTy1BUElDIFJURSB3aWxsIGJlIGNvbmZpZ3VyZWQgd2l0aCB2aXJ0dWFsIHZlY3Rvci4KKwkJICogaXJxIGhhbmRsZXIgd2lsbCBkbyB0aGUgZXhwbGljaXQgRU9JIHRvIHRoZSBpby1hcGljLgorCQkgKi8KKwkJaXJfZW50cnktPnZlY3RvciA9IHBpbjsKKwl9IGVsc2UgewogCQllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOwogCQllbnRyeS0+ZGVzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKIAkJZW50cnktPmRlc3QgPSBkZXN0aW5hdGlvbjsKKwkJZW50cnktPnZlY3RvciA9IHZlY3RvcjsKIAl9CiAKIAllbnRyeS0+bWFzayA9IDA7CQkJCS8qIGVuYWJsZSBJUlEgKi8KIAllbnRyeS0+dHJpZ2dlciA9IHRyaWdnZXI7CiAJZW50cnktPnBvbGFyaXR5ID0gcG9sYXJpdHk7Ci0JZW50cnktPnZlY3RvciA9IHZlY3RvcjsKIAogCS8qIE1hc2sgbGV2ZWwgdHJpZ2dlcmVkIGlycXMuCiAJICogVXNlIElSUV9ERUxBWUVEX0RJU0FCTEUgZm9yIGVkZ2UgdHJpZ2dlcmVkIGlycXMuCkBAIC0xNTYxLDcgKzE1ODUsNyBAQAogCiAKIAlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBpcnEsICZlbnRyeSwKLQkJCSAgICAgICBkZXN0LCB0cmlnZ2VyLCBwb2xhcml0eSwgY2ZnLT52ZWN0b3IpKSB7CisJCQkgICAgICAgZGVzdCwgdHJpZ2dlciwgcG9sYXJpdHksIGNmZy0+dmVjdG9yLCBwaW4pKSB7CiAJCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAogCQkgICAgICAgbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIHBpbik7CiAJCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEsIGNmZyk7CkBAIC0xNjQyLDEwICsxNjY2LDggQEAKIHsKIAlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCXJldHVybjsKLSNlbmRpZgogCiAJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CiAKQEAgLTIwNDAsOCArMjA2MiwxMyBAQAogCSAqIElmIHRoZSBpODI1OSBpcyByb3V0ZWQgdGhyb3VnaCBhbiBJT0FQSUMKIAkgKiBQdXQgdGhhdCBJT0FQSUMgaW4gdmlydHVhbCB3aXJlIG1vZGUKIAkgKiBzbyBsZWdhY3kgaW50ZXJydXB0cyBjYW4gYmUgZGVsaXZlcmVkLgorCSAqCisJICogV2l0aCBpbnRlcnJ1cHQtcmVtYXBwaW5nLCBmb3Igbm93IHdlIHdpbGwgdXNlIHZpcnR1YWwgd2lyZSBBIG1vZGUsCisJICogYXMgdmlydHVhbCB3aXJlIEIgaXMgbGl0dGxlIGNvbXBsZXggKG5lZWQgdG8gY29uZmlndXJlIGJvdGgKKwkgKiBJT0FQSUMgUlRFIGFzd2VsbCBhcyBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5KS4KKwkgKiBBcyB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyBjcmFzaCBkdW1wLCBrZWVwIHRoaXMgc2ltcGxlIGZvciBub3cuCiAJICovCi0JaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKKwlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSAmJiAhaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgewogCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKIAogCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKQEAgLTIwNjEsNyArMjA4OCwxMCBAQAogCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKIAl9CiAKLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOworCS8qCisJICogVXNlIHZpcnR1YWwgd2lyZSBBIG1vZGUgd2hlbiBpbnRlcnJ1cHQgcmVtYXBwaW5nIGlzIGVuYWJsZWQuCisJICovCisJZGlzY29ubmVjdF9ic3BfQVBJQyghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCAmJiBpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTIzMDMsMzcgKzIzMzMsMjQgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoaXJfbWlncmF0aW9uX3dvcmssIGlyX2lycV9taWdyYXRpb24pOwogCiAvKgogICogTWlncmF0ZSB0aGUgSU8tQVBJQyBpcnEgaW4gdGhlIHByZXNlbmNlIG9mIGludHItcmVtYXBwaW5nLgogICoKLSAqIEZvciBlZGdlIHRyaWdnZXJlZCwgaXJxIG1pZ3JhdGlvbiBpcyBhIHNpbXBsZSBhdG9taWMgdXBkYXRlKG9mIHZlY3RvcgotICogYW5kIGNwdSBkZXN0aW5hdGlvbikgb2YgSVJURSBhbmQgZmx1c2ggdGhlIGhhcmR3YXJlIGNhY2hlLgorICogRm9yIGJvdGggbGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYworICogdXBkYXRlKG9mIHZlY3RvciBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCiAgKgotICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgbmVlZCB0byBtb2RpZnkgdGhlIGlvLWFwaWMgUlRFIGFzd2VsbCB3aXRoIHRoZSB1cGRhdGUKLSAqIHZlY3RvciBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCBtb2RpZnlpbmcgSVJURSB3aXRoIHZlY3RvciBhbmQgZGVzdGluYXRpb24uCi0gKiBTbyBpcnEgbWlncmF0aW9uIGZvciBsZXZlbCB0cmlnZ2VyZWQgaXMgbGl0dGxlICBiaXQgbW9yZSBjb21wbGV4IGNvbXBhcmVkIHRvCi0gKiBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24uIEJ1dCB0aGUgZ29vZCBuZXdzIGlzLCB3ZSB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtCi0gKiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhcyB3ZSBoYXZlIHRvZGF5LCBvbmx5IGRpZmZlcmVuY2UgYmVpbmcsCi0gKiB3ZSBub3cgaW5pdGlhdGUgdGhlIGlycSBtaWdyYXRpb24gZnJvbSBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUKLSAqIGludGVycnVwdCBjb250ZXh0LgotICoKLSAqIEluIGZ1dHVyZSwgd2hlbiB3ZSBkbyBhIGRpcmVjdGVkIEVPSSAoY29tYmluZWQgd2l0aCBjcHUgRU9JIGJyb2FkY2FzdAotICogc3VwcHJlc3Npb24pIHRvIHRoZSBJTy1BUElDLCBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbiB3aWxsIGFsc28gYmUKLSAqIGFzIHNpbXBsZSBhcyBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24gYW5kIHdlIGNhbiBkbyB0aGUgaXJxIG1pZ3JhdGlvbgotICogd2l0aCBhIHNpbXBsZSBhdG9taWMgdXBkYXRlIHRvIElPLUFQSUMgUlRFLgorICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgZWxpbWluYXRlIHRoZSBpby1hcGljIFJURSBtb2RpZmljYXRpb24gKHdpdGggdGhlCisgKiB1cGRhdGVkIHZlY3RvciBpbmZvcm1hdGlvbiksIGJ5IHVzaW5nIGEgdmlydHVhbCB2ZWN0b3IgKGlvLWFwaWMgcGluIG51bWJlcikuCisgKiBSZWFsIHZlY3RvciB0aGF0IGlzIHVzZWQgZm9yIGludGVycnVwdGluZyBjcHUgd2lsbCBiZSBjb21pbmcgZnJvbQorICogdGhlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBtaWdyYXRlX2lvYXBpY19pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IGlydGUgaXJ0ZTsKLQlpbnQgbW9kaWZ5X2lvYXBpY19ydGU7CiAJdW5zaWduZWQgaW50IGRlc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobWFzaywgY3B1X29ubGluZV9tYXNrKSkKQEAgLTIzNTEsMTMgKzIzNjgsNiBAQAogCiAJZGVzdCA9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIG1hc2spOwogCi0JbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7Ci0JaWYgKG1vZGlmeV9pb2FwaWNfcnRlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JfQotCiAJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKIAlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CiAKQEAgLTIzNzIsNzMgKzIzODIsMTIgQEAKIAljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIG1hc2spOwogfQogCi1zdGF0aWMgaW50IG1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWludCByZXQgPSAtMTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCi0JbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCi0JaWYgKGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoY2ZnKSkgewotCQkvKgotCQkgKiBJbnRlcnJ1cHQgaW4gcHJvZ3Jlc3MuIE1pZ3JhdGluZyBpcnEgbm93IHdpbGwgY2hhbmdlIHRoZQotCQkgKiB2ZWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIElPLUFQSUMgUlRFIGFuZCB0aGF0IHdpbGwgY29uZnVzZQotCQkgKiB0aGUgRU9JIGJyb2FkY2FzdCBwZXJmb3JtZWQgYnkgY3B1LgotCQkgKiBTbywgZGVsYXkgdGhlIGlycSBtaWdyYXRpb24gdG8gdGhlIG5leHQgaW5zdGFuY2UuCi0JCSAqLwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyX21pZ3JhdGlvbl93b3JrLCAxKTsKLQkJZ290byB1bm1hc2s7Ci0JfQotCi0JLyogZXZlcnRoaW5nIGlzIGNsZWFyLiB3ZSBoYXZlIHJpZ2h0IG9mIHdheSAqLwotCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIGRlc2MtPnBlbmRpbmdfbWFzayk7Ci0KLQlyZXQgPSAwOwotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQljcHVtYXNrX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7Ci0KLXVubWFzazoKLQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgfHwKLQkJCSAgICAhKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7Ci0JCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQogLyoKICAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KICAqLwogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKLQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQljcHVtYXNrX2NvcHkoZGVzYy0+cGVuZGluZ19tYXNrLCBtYXNrKTsKLQkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhkZXNjKTsKLQkJcmV0dXJuOwotCX0KLQogCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIG1hc2spOwogfQogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwKQEAgLTI0NDgsNiArMjM5NywxMSBAQAogCiAJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKK30KICNlbmRpZgogCiBhc21saW5rYWdlIHZvaWQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpCkBAIC0yNDYxLDYgKzI0MTUsNyBAQAogCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyB2ZWN0b3IrKykgewogCQl1bnNpZ25lZCBpbnQgaXJxOworCQl1bnNpZ25lZCBpbnQgaXJyOwogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKQEAgLTI0ODAsNiArMjQzNSwxOCBAQAogCQlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkKIAkJCWdvdG8gdW5sb2NrOwogCisJCWlyciA9IGFwaWNfcmVhZChBUElDX0lSUiArICh2ZWN0b3IgLyAzMiAqIDB4MTApKTsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHZlY3RvciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFuZWR1cCBpcworCQkgKiByZWdpc3RlcmVkIGF0IHRoZSBjcHUncyBJUlIuIElmIHNvLCB0aGVuIHRoaXMgaXMgbm90CisJCSAqIHRoZSBiZXN0IHRpbWUgdG8gY2xlYW4gaXQgdXAuIExldHMgY2xlYW4gaXQgdXAgaW4gdGhlCisJCSAqIG5leHQgYXR0ZW1wdCBieSBzZW5kaW5nIGFub3RoZXIgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IKKwkJICogdG8gbXlzZWxmLgorCQkgKi8KKwkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgeworCQkJYXBpYy0+c2VuZF9JUElfc2VsZihJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJCQlnb3RvIHVubG9jazsKKwkJfQogCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKIAkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKIHVubG9jazoKQEAgLTI1MjksOSArMjQ5Niw0NCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgX19lb2lfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCWludCBhcGljLCBwaW47CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwllbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWZvciAoOzspIHsKKworCQlpZiAoIWVudHJ5KQorCQkJYnJlYWs7CisKKwkJYXBpYyA9IGVudHJ5LT5hcGljOworCQlwaW4gPSBlbnRyeS0+cGluOworCQlpb19hcGljX2VvaShhcGljLCBwaW4pOworCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQKK2VvaV9pb2FwaWNfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlycSA9IGRlc2MtPmlycTsKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX2VvaV9pb2FwaWNfaXJxKGlycSwgY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBhY2tfeDJhcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlhY2tfeDJBUElDX2lycSgpOworCWVvaV9pb2FwaWNfaXJxKGRlc2MpOwogfQogCiBzdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKQEAgLTI2NjIsMjAgKzI2NjQsMjAgQEAKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiSVItSU8tQVBJQyIsCiAJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCiAJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKIAkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAogCS5lb2kJCT0gYWNrX3gyYXBpY19sZXZlbCwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eQk9IHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxLAogI2VuZGlmCisjZW5kaWYKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKIHsKQEAgLTI5MDEsMTAgKzI5MDMsOCBAQAogCSAqIDgyNTlBLgogCSAqLwogCWlmIChwaW4xID09IC0xKSB7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQlwYW5pYygiQklPUyBidWc6IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQyIpOwotI2VuZGlmCiAJCXBpbjEgPSBwaW4yOwogCQlhcGljMSA9IGFwaWMyOwogCQlub19waW4xID0gMTsKQEAgLTI5NDAsMTAgKzI5NDAsOCBAQAogCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOwogCQkJZ290byBvdXQ7CiAJCX0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwotI2VuZGlmCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKIAkJaWYgKCFub19waW4xKQpAQCAtMzIzNyw5ICszMjM1LDcgQEAKIAlpZiAoZGVzYykKIAkJZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlmcmVlX2lydGUoaXJxKTsKLSNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEsIGNmZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKQEAgLTMyNjUsNyArMzI2MSw2IEBACiAKIAlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwogCQlpbnQgaXJfaW5kZXg7CkBAIC0zMjkxLDEwICszMjg2LDEzIEBACiAJCQkJICBNU0lfQUREUl9JUl9TSFYgfAogCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgxKGlyX2luZGV4KSB8CiAJCQkJICBNU0lfQUREUl9JUl9JTkRFWDIoaXJfaW5kZXgpOwotCX0gZWxzZQotI2VuZGlmCi0JewotCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOworCX0gZWxzZSB7CisJCWlmICh4MmFwaWNfZW5hYmxlZCgpKQorCQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISSB8CisJCQkJCSAgTVNJX0FERFJfRVhUX0RFU1RfSUQoZGVzdCk7CisJCWVsc2UKKwkJCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisKIAkJbXNnLT5hZGRyZXNzX2xvID0KIAkJCU1TSV9BRERSX0JBU0VfTE8gfAogCQkJKChhcGljLT5pcnFfZGVzdF9tb2RlID09IDApID8KQEAgLTMzOTQsMTUgKzMzOTIsMTYgQEAKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lyX2NoaXAgPSB7CiAJLm5hbWUJCT0gIklSLVBDSS1NU0kiLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKICNlbmRpZgorI2VuZGlmCiAJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAogfTsKIApAQCAtMzQzMiw3ICszNDMxLDYgQEAKIAl9CiAJcmV0dXJuIGluZGV4OwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MsIGludCBpcnEpCiB7CkBAIC0zNDQ2LDcgKzM0NDQsNiBAQAogCXNldF9pcnFfbXNpKGlycSwgbXNpZGVzYyk7CiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJLyoKQEAgLTM0NTUsNyArMzQ1Miw2IEBACiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9pcl9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJfSBlbHNlCi0jZW5kaWYKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAogCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBNU0kvTVNJLVhcbiIsIGlycSk7CkBAIC0zNDY5LDExICszNDY1LDEyIEBACiAJaW50IHJldCwgc3ViX2hhbmRsZTsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2M7CiAJdW5zaWduZWQgaW50IGlycV93YW50OwotCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gMDsKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gTlVMTDsKIAlpbnQgaW5kZXggPSAwOwotI2VuZGlmCisKKwkvKiB4ODYgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIE1TSSB5ZXQgKi8KKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSSAmJiBudmVjID4gMSkKKwkJcmV0dXJuIDE7CiAKIAlpcnFfd2FudCA9IG5yX2lycXNfZ3NpOwogCXN1Yl9oYW5kbGUgPSAwOwpAQCAtMzQ4Miw3ICszNDc5LDYgQEAKIAkJaWYgKGlycSA9PSAwKQogCQkJcmV0dXJuIC0xOwogCQlpcnFfd2FudCA9IGlycSArIDE7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJaWYgKCFpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJZ290byBub19pcjsKIApAQCAtMzUxMCw3ICszNTA2LDYgQEAKIAkJCXNldF9pcnRlX2lycShpcnEsIGlvbW11LCBpbmRleCwgc3ViX2hhbmRsZSk7CiAJCX0KIG5vX2lyOgotI2VuZGlmCiAJCXJldCA9IHNldHVwX21zaV9pcnEoZGV2LCBtc2lkZXNjLCBpcnEpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyb3I7CkBAIC0zNTI4LDcgKzM1MjMsNyBAQAogCWRlc3Ryb3lfaXJxKGlycSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfRE1BUgorI2lmIGRlZmluZWQgKENPTkZJR19ETUFSKSB8fCBkZWZpbmVkIChDT05GSUdfSU5UUl9SRU1BUCkKICNpZmRlZiBDT05GSUdfU01QCiBzdGF0aWMgdm9pZCBkbWFyX21zaV9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7CkBAIC0zNjA5LDcgKzM2MDQsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi1zdHJ1Y3QgaXJxX2NoaXAgaHBldF9tc2lfdHlwZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHBldF9tc2lfdHlwZSA9IHsKIAkubmFtZSA9ICJIUEVUX01TSSIsCiAJLnVubWFzayA9IGhwZXRfbXNpX3VubWFzaywKIAkubWFzayA9IGhwZXRfbXNpX21hc2ssCkBAIC00MDQ1LDExICs0MDQwLDkgQEAKIAkJCWVsc2UKIAkJCQltYXNrID0gYXBpYy0+dGFyZ2V0X2NwdXMoKTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCQlzZXRfaXJfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogCQkJZWxzZQotI2VuZGlmCiAJCQkJc2V0X2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKIAkJfQogCkBAIC00MTQyLDkgKzQxMzUsMTIgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBpb2FwaWNfcmVzb3VyY2VzOwogCiAJaWYgKCFyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIklPIEFQSUMgcmVzb3VyY2VzIGNvdWxkIGJlIG5vdCBiZSBhbGxvY2F0ZWQuXG4iKTsKLQkJcmV0dXJuIC0xOworCQlpZiAobnJfaW9hcGljcyA+IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJJTyBBUElDIHJlc291cmNlcyBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQuXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gMDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwppbmRleCA4ZDc3NDhlLi4xNzgzNjUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKQEAgLTY4LDYgKzY4LDEzIEBACiAJCQlhcGljID0gJmFwaWNfcGh5c2ZsYXQ7CiAJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgQVBJQyByb3V0aW5nIHRvICVzXG4iLCBhcGljLT5uYW1lKTsKIAl9CisKKwkvKgorCSAqIE5vdyB0aGF0IGFwaWMgcm91dGluZyBtb2RlbCBpcyBzZWxlY3RlZCwgY29uZmlndXJlIHRoZQorCSAqIGZhdWx0IGhhbmRsaW5nIGZvciBpbnRyIHJlbWFwcGluZy4KKwkgKi8KKwlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKKwkJZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcoKTsKIH0KIAogLyogU2FtZSBmb3IgYm90aCBmbGF0IGFuZCBwaHlzaWNhbC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCmluZGV4IDhmYjg3YjYuLjRhOTAzZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYwpAQCAtNTcsNiArNTcsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CiAJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QoCkBAIC03Myw2ICs3NSw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKIAkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKQEAgLTkwLDYgKzk0LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShxdWVyeV9jcHUpIHsKIAkJaWYgKHF1ZXJ5X2NwdSA9PSB0aGlzX2NwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCmluZGV4IDIzNjI1YjkuLmEyODQzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYwpAQCAtNTgsNiArNTgsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CiAJCV9feDJhcGljX3NlbmRfSVBJX2Rlc3QocGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgcXVlcnlfY3B1KSwKQEAgLTczLDYgKzc1LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlpZiAocXVlcnlfY3B1ICE9IHRoaXNfY3B1KQpAQCAtODksNiArOTMsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkgewogCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMWJkNmRhMS4uMTI0ODMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0xMTgsMTcgKzExOCwxMiBAQAogCiBzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9vbmUoaW50IGNwdSwgaW50IHZlY3RvcikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCwgYXBpY2lkOworCXVuc2lnbmVkIGxvbmcgYXBpY2lkOwogCWludCBwbm9kZTsKIAogCWFwaWNpZCA9IHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSk7CiAJcG5vZGUgPSB1dl9hcGljaWRfdG9fcG5vZGUoYXBpY2lkKTsKLQotCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8Ci0JICAgICAgKGFwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKLQkgICAgICAodmVjdG9yIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKLQotCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7CisJdXZfaHViX3NlbmRfaXBpKHBub2RlLCBhcGljaWQsIHZlY3Rvcik7CiB9CiAKIHN0YXRpYyB2b2lkIHV2X3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggMTAwMzNmZS4uYWM3NzgzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMTE5MCw4ICsxMTkwLDEwIEBACiAJc3RydWN0IGFwbV91c2VyCSphczsKIAogCWRldmljZV9zdXNwZW5kKFBNU0dfU1VTUEVORCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCWRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xMjA5LDkgKzEyMTEsMTIgQEAKIAlpZiAoZXJyICE9IEFQTV9TVUNDRVNTKQogCQlhcG1fZXJyb3IoInN1c3BlbmQiLCBlcnIpOwogCWVyciA9IChlcnIgPT0gQVBNX1NVQ0NFU1MpID8gMCA6IC1FSU87CisKIAlzeXNkZXZfcmVzdW1lKCk7Ci0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOworCiAJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1VNRSk7CiAJcXVldWVfZXZlbnQoQVBNX05PUk1BTF9SRVNVTUUsIE5VTEwpOwogCXNwaW5fbG9jaygmdXNlcl9saXN0X2xvY2spOwpAQCAtMTIyOCw4ICsxMjMzLDkgQEAKIHsKIAlpbnQgZXJyOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTIzOSw4ICsxMjQ1LDkgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3lzZGV2X3Jlc3VtZSgpOwotCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIH0KIAogc3RhdGljIGFwbV9ldmVudF90IGdldF9ldmVudCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYwppbmRleCBmYmYyZjMzLi41YTZhYTFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfMzIuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKaW5kZXggODc5M2FiMy4uZTcyZjA2MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzY0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NoZWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYwppbmRleCAyYWMwYWI3Li5mYzk5OWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYwpAQCAtODMsMTUgKzgzLDE1IEBACiAJCXU2NCBzaXplOwogCQlhZGRyID0gZmluZF9lODIwX2FyZWFfc2l6ZShhZGRyLCAmc2l6ZSwgUEFHRV9TSVpFKTsKIAotCQlpZiAoYWRkciA9PSAwKQorCQlpZiAoIShhZGRyICsgMSkpCisJCQlicmVhazsKKworCQlpZiAoYWRkciA+PSBjb3JydXB0aW9uX2NoZWNrX3NpemUpCiAJCQlicmVhazsKIAogCQlpZiAoKGFkZHIgKyBzaXplKSA+IGNvcnJ1cHRpb25fY2hlY2tfc2l6ZSkKIAkJCXNpemUgPSBjb3JydXB0aW9uX2NoZWNrX3NpemUgLSBhZGRyOwogCi0JCWlmIChzaXplID09IDApCi0JCQlicmVhazsKLQogCQllODIwX3VwZGF0ZV9yYW5nZShhZGRyLCBzaXplLCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CiAJCXNjYW5fYXJlYXNbbnVtX3NjYW5fYXJlYXNdLmFkZHIgPSBhZGRyOwogCQlzY2FuX2FyZWFzW251bV9zY2FuX2FyZWFzXS5zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDgyZGI3ZjQuLjRlMjQyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTQsMTEgKzE0LDEyIEBACiBvYmotJChDT05GSUdfWDg2XzMyKQkrPSBidWdzLm8gY21weGNoZy5vCiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBidWdzXzY0Lm8KIAorb2JqLSQoQ09ORklHX1g4Nl9DUFVfREVCVUcpCQkrPSBjcHVfZGVidWcubworCiBvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTCkJCSs9IGludGVsLm8KIG9iai0kKENPTkZJR19DUFVfU1VQX0FNRCkJCSs9IGFtZC5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9DWVJJWF8zMikJCSs9IGN5cml4Lm8KLW9iai0kKENPTkZJR19DUFVfU1VQX0NFTlRBVVJfMzIpCSs9IGNlbnRhdXIubwotb2JqLSQoQ09ORklHX0NQVV9TVVBfQ0VOVEFVUl82NCkJKz0gY2VudGF1cl82NC5vCitvYmotJChDT05GSUdfQ1BVX1NVUF9DRU5UQVVSKQkJKz0gY2VudGF1ci5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9UUkFOU01FVEFfMzIpCSs9IHRyYW5zbWV0YS5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9VTUNfMzIpCQkrPSB1bWMubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNjg4MmE3My4uODIyMGFlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMjksNyArMjksNyBAQAogCXUzMiByZWdzWzRdOwogCWNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgKmNiOwogCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IF9fY3B1aW5pdGNvbnN0IGNwdWlkX2JpdHNbXSA9IHsKIAkJeyBYODZfRkVBVFVSRV9JREEsIENSX0VBWCwgMSwgMHgwMDAwMDAwNiB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCAyNTQyM2E1Li43ZTRhNDU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogIyBpbmNsdWRlIDxhc20vbnVtYV82NC5oPgpAQCAtMTQxLDYgKzE0Miw1NSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19jcHVpbml0IGFtZF9rN19zbXBfY2hlY2soc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBjYWxsaW5nIGlzIGZyb20gaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpID8gKi8KKwlpZiAoYy0+Y3B1X2luZGV4ID09IGJvb3RfY3B1X2lkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENlcnRhaW4gQXRobG9ucyBtaWdodCB3b3JrIChmb3IgdmFyaW91cyB2YWx1ZXMgb2YgJ3dvcmsnKSBpbiBTTVAKKwkgKiBidXQgdGhleSBhcmUgbm90IGNlcnRpZmllZCBhcyBNUCBjYXBhYmxlLgorCSAqLworCS8qIEF0aGxvbiA2NjAvNjYxIGlzIHZhbGlkLiAqLworCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmICgoYy0+eDg2X21hc2sgPT0gMCkgfHwKKwkgICAgKGMtPng4Nl9tYXNrID09IDEpKSkKKwkJZ290byB2YWxpZF9rNzsKKworCS8qIER1cm9uIDY3MCBpcyB2YWxpZCAqLworCWlmICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA9PSAwKSkKKwkJZ290byB2YWxpZF9rNzsKKworCS8qCisJICogQXRobG9uIDY2MiwgRHVyb24gNjcxLCBhbmQgQXRobG9uID5tb2RlbCA3IGhhdmUgY2FwYWJpbGl0eQorCSAqIGJpdC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgQTUgc3RlcHBpbmcgKDY2Mikgb2Ygc29tZQorCSAqIEF0aGxvbiBYUCdzIGhhdmUgdGhlIE1QIGJpdCBzZXQuCisJICogU2VlIGh0dHA6Ly93d3cuaGVpc2UuZGUvbmV3c3RpY2tlci9kYXRhL2pvdy0xOC4xMC4wMS0wMDAgZm9yCisJICogbW9yZS4KKwkgKi8KKwlpZiAoKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKGMtPng4Nl9tYXNrID49IDIpKSB8fAorCSAgICAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPj0gMSkpIHx8CisJICAgICAoYy0+eDg2X21vZGVsID4gNykpCisJCWlmIChjcHVfaGFzX21wKQorCQkJZ290byB2YWxpZF9rNzsKKworCS8qIElmIHdlIGdldCBoZXJlLCBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KKworCS8qCisJICogRG9uJ3QgdGFpbnQgaWYgd2UgYXJlIHJ1bm5pbmcgU01QIGtlcm5lbCBvbiBhIHNpbmdsZSBub24tTVAKKwkgKiBhcHByb3ZlZCBBdGhsb24KKwkgKi8KKwlXQVJOX09OQ0UoMSwgIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgorCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOworCWlmICghdGVzdF90YWludChUQUlOVF9VTlNBRkVfU01QKSkKKwkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOworCit2YWxpZF9rNzoKKwk7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfYW1kX2s3KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1MzIgbCwgaDsKQEAgLTE3NSw2ICsyMjUsOCBAQAogCX0KIAogCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0s3KTsKKworCWFtZF9rN19zbXBfY2hlY2soYyk7CiB9CiAjZW5kaWYKIApAQCAtNDUwLDcgKzUwMiw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGFtZF9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgYW1kX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkFNRCIsCiAJLmNfaWRlbnQJPSB7ICJBdXRoZW50aWNBTUQiIH0sCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYwppbmRleCA4OWJmZGQ5Li5jOTVlODMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYwpAQCAtMSwxMSArMSwxMSBAQAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2luY2x1ZGUgImNwdS5oIgogCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJICovCiAJCWMtPng4Nl9jYXBhYmlsaXR5WzVdID0gY3B1aWRfZWR4KDB4QzAwMDAwMDEpOwogCX0KLQorI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBDeXJpeCBJSUkgZmFtaWx5IG5lZWRzIENYOCAmIFBHRSBleHBsaWNpdGx5IGVuYWJsZWQuICovCiAJaWYgKGMtPng4Nl9tb2RlbCA+PSA2ICYmIGMtPng4Nl9tb2RlbCA8PSA5KSB7CiAJCXJkbXNyKE1TUl9WSUFfRkNSLCBsbywgaGkpOwpAQCAtMjg4LDYgKzI4OCwxMSBAQAogCS8qIEJlZm9yZSBOZWhlbWlhaCwgdGhlIEMzJ3MgaGFkIDNkTk9XISAqLwogCWlmIChjLT54ODZfbW9kZWwgPj0gNiAmJiBjLT54ODZfbW9kZWwgPCA5KQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV8zRE5PVyk7CisjZW5kaWYKKwlpZiAoYy0+eDg2ID09IDB4NiAmJiBjLT54ODZfbW9kZWwgPj0gMHhmKSB7CisJCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplICogMjsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUkVQX0dPT0QpOworCX0KIAogCWRpc3BsYXlfY2FjaGVpbmZvKGMpOwogfQpAQCAtMzE2LDE2ICszMjEsMjUgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXN3aXRjaCAoYy0+eDg2KSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWNhc2UgNToKIAkJLyogRW11bGF0ZSBNVFJScyB1c2luZyBDZW50YXVyJ3MgTUNSLiAqLwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DRU5UQVVSX01DUik7CiAJCWJyZWFrOworI2VuZGlmCisJY2FzZSA2OgorCQlpZiAoYy0+eDg2X21vZGVsID49IDB4ZikKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CisJCWJyZWFrOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfU1lTRU5URVIzMik7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJY2hhciAqbmFtZTsKIAl1MzIgIGZjcl9zZXQgPSAwOwogCXUzMiAgZmNyX2NsciA9IDA7CkBAIC0zMzcsOCArMzUxLDEwIEBACiAJICogM0ROb3cgaXMgSURkIGJ5IGJpdCAzMSBpbiBleHRlbmRlZCBDUFVJRCAoMSozMiszMSkgYW55d2F5CiAJICovCiAJY2xlYXJfY3B1X2NhcChjLCAwKjMyKzMxKTsKLQorI2VuZGlmCisJZWFybHlfaW5pdF9jZW50YXVyKGMpOwogCXN3aXRjaCAoYy0+eDg2KSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWNhc2UgNToKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAkJY2FzZSA0OgpAQCAtNDQyLDE2ICs0NTgsMjAgQEAKIAkJfQogCQlzcHJpbnRmKGMtPng4Nl9tb2RlbF9pZCwgIldpbkNoaXAgJXMiLCBuYW1lKTsKIAkJYnJlYWs7Ci0KKyNlbmRpZgogCWNhc2UgNjoKIAkJaW5pdF9jMyhjKTsKIAkJYnJlYWs7CiAJfQorI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0CiBjZW50YXVyX3NpemVfY2FjaGUoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogVklBIEMzIENQVXMgKDY3MC02OEYpIG5lZWQgZnVydGhlciBzaGlmdGluZy4gKi8KIAlpZiAoKGMtPng4NiA9PSA2KSAmJiAoKGMtPng4Nl9tb2RlbCA9PSA3KSB8fCAoYy0+eDg2X21vZGVsID09IDgpKSkKIAkJc2l6ZSA+Pj0gODsKQEAgLTQ2NCwxMSArNDg0LDExIEBACiAJaWYgKChjLT54ODYgPT0gNikgJiYgKGMtPng4Nl9tb2RlbCA9PSA5KSAmJgogCQkJCShjLT54ODZfbWFzayA9PSAxKSAmJiAoc2l6ZSA9PSA2NSkpCiAJCXNpemUgLT0gMTsKLQorI2VuZGlmCiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBjZW50YXVyX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBjZW50YXVyX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkNlbnRhdXIiLAogCS5jX2lkZW50CT0geyAiQ2VudGF1ckhhdWxzIiB9LAogCS5jX2Vhcmx5X2luaXQJPSBlYXJseV9pbml0X2NlbnRhdXIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1cl82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTYyNWY1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1cl82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0jaW5jbHVkZSAiY3B1LmgiCi0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWlmIChjLT54ODYgPT0gMHg2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGYpCi0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7Ci0KLQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9TWVNFTlRFUjMyKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JZWFybHlfaW5pdF9jZW50YXVyKGMpOwotCi0JaWYgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZikgewotCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZSAqIDI7Ci0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKLQl9Ci0Jc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGNlbnRhdXJfY3B1X2RldiBfX2NwdWluaXRkYXRhID0gewotCS5jX3ZlbmRvcgk9ICJDZW50YXVyIiwKLQkuY19pZGVudAk9IHsgIkNlbnRhdXJIYXVscyIgfSwKLQkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF9jZW50YXVyLAotCS5jX2luaXQJCT0gaW5pdF9jZW50YXVyLAotCS5jX3g4Nl92ZW5kb3IJPSBYODZfVkVORE9SX0NFTlRBVVIsCi19OwotCi1jcHVfZGV2X3JlZ2lzdGVyKGNlbnRhdXJfY3B1X2Rldik7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDgyNmQ1YzguLmUyOTYyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtMSw1MiArMSw1MiBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2dkYi5oPgotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxhc20vaTM4Ny5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2dkYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tY2UuaD4KLSNpbmNsdWRlIDxhc20vcGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9udW1hLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3BhdC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogI2luY2x1ZGUgPGFzbS91di91di5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgotI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgotCiAjaW5jbHVkZSAiY3B1LmgiCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKIC8qIGFsbCBvZiB0aGVzZSBtYXNrcyBhcmUgaW5pdGlhbGl6ZWQgaW4gc2V0dXBfY3B1X2xvY2FsX21hc2tzKCkgKi8KLWNwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwotY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOwogY3B1bWFza192YXJfdCBjcHVfaW5pdGlhbGl6ZWRfbWFzazsKK2NwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKK2NwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwogCiAvKiByZXByZXNlbnRpbmcgY3B1cyBmb3Igd2hpY2ggc2libGluZyBtYXBzIGNhbiBiZSBjb21wdXRlZCAqLwogY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOwpAQCAtNjIsMTUgKzYyLDE1IEBACiAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIAotY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOworY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKK2NwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKIAogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CiAKIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC03OSw0OCArNzksNDggQEAKIAkgKiBJUkVUIHdpbGwgY2hlY2sgdGhlIHNlZ21lbnQgdHlwZXMgIGtrZWlsIDIwMDAvMTAvMjgKIAkgKiBBbHNvIHN5c3JldCBtYW5kYXRlcyBhIHNwZWNpYWwgR0RUIGxheW91dAogCSAqCi0JICogVGhlIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCisJICogVExTIGRlc2NyaXB0b3JzIGFyZSBjdXJyZW50bHkgYXQgYSBkaWZmZXJlbnQgcGxhY2UgY29tcGFyZWQgdG8gaTM4Ni4KIAkgKiBIb3BlZnVsbHkgbm9ib2R5IGV4cGVjdHMgdGhlbSBhdCBhIGZpeGVkIHBsYWNlIChXaW5lPykKIAkgKi8KLQlbR0RUX0VOVFJZX0tFUk5FTDMyX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjliMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MzAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSMzJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMzAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZmZiMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUwzMl9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAogI2Vsc2UKLQlbR0RUX0VOVFJZX0tFUk5FTF9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YTAwIH0gfSB9LAotCVtHRFRfRU5UUllfS0VSTkVMX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0NTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0RTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjIwMCB9IH0gfSwKIAkvKgogCSAqIFNlZ21lbnRzIHVzZWQgZm9yIGNhbGxpbmcgUG5QIEJJT1MgaGF2ZSBieXRlIGdyYW51bGFyaXR5LgogCSAqIFRoZXkgY29kZSBzZWdtZW50cyBhbmQgZGF0YSBzZWdtZW50cyBoYXZlIGZpeGVkIDY0ayBsaW1pdHMsCiAJICogdGhlIHRyYW5zZmVyIHNlZ21lbnQgc2l6ZXMgYXJlIHNldCBhdCBydW4gdGltZS4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzMyXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzE2XSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgZGF0YSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOTIwMCB9IH0gfSwKIAkvKiAxNi1iaXQgZGF0YSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19UUzFdID0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfVFMxXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAogCS8qIDE2LWJpdCBkYXRhICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX1RTMl0gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzJdCQk9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAgfSB9IH0sCiAJLyoKIAkgKiBUaGUgQVBNIHNlZ21lbnRzIGhhdmUgYnl0ZSBncmFudWxhcml0eSBhbmQgdGhlaXIgYmFzZXMKIAkgKiBhcmUgc2V0IGF0IHJ1biB0aW1lLiAgQWxsIGhhdmUgNjRrIGxpbWl0cy4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0VdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzFdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsxXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCiAJLyogZGF0YSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzJdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCiAKLQlbR0RUX0VOVFJZX0VTUEZJWF9TU10gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwYzA5MjAwIH0gfSB9LAotCVtHRFRfRU5UUllfUEVSQ1BVXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9FU1BGSVhfU1NdCQk9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDBjMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QRVJDUFVdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCiAJR0RUX1NUQUNLX0NBTkFSWV9JTklUCiAjZW5kaWYKIH0gfTsKQEAgLTE2NCwxNiArMTY0LDE3IEBACiAJICogdGhlIENQVUlELiBBZGQgInZvbGF0aWxlIiB0byBub3QgYWxsb3cgZ2NjIHRvCiAJICogb3B0aW1pemUgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4KIAkgKi8KLQlhc20gdm9sYXRpbGUgKCJwdXNoZmxcblx0IgotCQkgICAgICAicHVzaGZsXG5cdCIKLQkJICAgICAgInBvcGwgJTBcblx0IgotCQkgICAgICAibW92bCAlMCwlMVxuXHQiCi0JCSAgICAgICJ4b3JsICUyLCUwXG5cdCIKLQkJICAgICAgInB1c2hsICUwXG5cdCIKLQkJICAgICAgInBvcGZsXG5cdCIKLQkJICAgICAgInB1c2hmbFxuXHQiCi0JCSAgICAgICJwb3BsICUwXG5cdCIKLQkJICAgICAgInBvcGZsXG5cdCIKKwlhc20gdm9sYXRpbGUgKCJwdXNoZmwJCVxuXHQiCisJCSAgICAgICJwdXNoZmwJCVxuXHQiCisJCSAgICAgICJwb3BsICUwCQlcblx0IgorCQkgICAgICAibW92bCAlMCwgJTEJXG5cdCIKKwkJICAgICAgInhvcmwgJTIsICUwCVxuXHQiCisJCSAgICAgICJwdXNobCAlMAkJXG5cdCIKKwkJICAgICAgInBvcGZsCQlcblx0IgorCQkgICAgICAicHVzaGZsCQlcblx0IgorCQkgICAgICAicG9wbCAlMAkJXG5cdCIKKwkJICAgICAgInBvcGZsCQlcblx0IgorCiAJCSAgICAgIDogIj0mciIgKGYxKSwgIj0mciIgKGYyKQogCQkgICAgICA6ICJpciIgKGZsYWcpKTsKIApAQCAtMTg4LDE4ICsxODksMjIgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BOKSAmJiBkaXNhYmxlX3g4Nl9zZXJpYWxfbnIpIHsKLQkJLyogRGlzYWJsZSBwcm9jZXNzb3Igc2VyaWFsIG51bWJlciAqLwotCQl1bnNpZ25lZCBsb25nIGxvLCBoaTsKLQkJcmRtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKLQkJbG8gfD0gMHgyMDAwMDA7Ci0JCXdybXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ1BVIHNlcmlhbCBudW1iZXIgZGlzYWJsZWQuXG4iKTsKLQkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QTik7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CiAKLQkJLyogRGlzYWJsaW5nIHRoZSBzZXJpYWwgbnVtYmVyIG1heSBhZmZlY3QgdGhlIGNwdWlkIGxldmVsICovCi0JCWMtPmNwdWlkX2xldmVsID0gY3B1aWRfZWF4KDApOwotCX0KKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUE4pIHx8ICFkaXNhYmxlX3g4Nl9zZXJpYWxfbnIpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgcHJvY2Vzc29yIHNlcmlhbCBudW1iZXI6ICovCisKKwlyZG1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOworCWxvIHw9IDB4MjAwMDAwOworCXdybXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSBzZXJpYWwgbnVtYmVyIGRpc2FibGVkLlxuIik7CisJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QTik7CisKKwkvKiBEaXNhYmxpbmcgdGhlIHNlcmlhbCBudW1iZXIgbWF5IGFmZmVjdCB0aGUgY3B1aWQgbGV2ZWwgKi8KKwljLT5jcHVpZF9sZXZlbCA9IGNwdWlkX2VheCgwKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgeDg2X3NlcmlhbF9ucl9zZXR1cChjaGFyICpzKQpAQCAtMjMyLDYgKzIzNyw3IEBACiAJdTMyIGZlYXR1cmU7CiAJdTMyIGxldmVsOwogfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSBfX2NwdWluaXRjb25zdAogY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmVzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9NV0FJVCwJCTB4MDAwMDAwMDUgfSwKQEAgLTI0Myw3ICsyNDksMTEgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBmaWx0ZXJfY3B1aWRfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjLCBib29sIHdhcm4pCiB7CiAJY29uc3Qgc3RydWN0IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlICpkZjsKKwogCWZvciAoZGYgPSBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZXM7IGRmLT5mZWF0dXJlOyBkZisrKSB7CisKKwkJaWYgKCFjcHVfaGFzKGMsIGRmLT5mZWF0dXJlKSkKKwkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBOb3RlOiBjcHVpZF9sZXZlbCBpcyBzZXQgdG8gLTEgaWYgdW5hdmFpbGFibGUsIGJ1dAogCQkgKiBleHRlbmRlZF9leHRlbmRlZF9sZXZlbCBpcyBzZXQgdG8gMCBpZiB1bmF2YWlsYWJsZQpAQCAtMjUxLDMyICsyNjEsMzIgQEAKIAkJICogd2hlbiBzaWduZWQ7IGhlbmNlIHRoZSB3ZWlyZCBtZXNzaW5nIGFyb3VuZCB3aXRoCiAJCSAqIHNpZ25zIGhlcmUuLi4KIAkJICovCi0JCWlmIChjcHVfaGFzKGMsIGRmLT5mZWF0dXJlKSAmJgotCQkgICAgKChzMzIpZGYtPmxldmVsIDwgMCA/CisJCWlmICghKChzMzIpZGYtPmxldmVsIDwgMCA/CiAJCSAgICAgKHUzMilkZi0+bGV2ZWwgPiAodTMyKWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsIDoKLQkJICAgICAoczMyKWRmLT5sZXZlbCA+IChzMzIpYy0+Y3B1aWRfbGV2ZWwpKSB7Ci0JCQljbGVhcl9jcHVfY2FwKGMsIGRmLT5mZWF0dXJlKTsKLQkJCWlmICh3YXJuKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIkNQVTogQ1BVIGZlYXR1cmUgJXMgZGlzYWJsZWQgIgotCQkJCSAgICAgICAiZHVlIHRvIGxhY2sgb2YgQ1BVSUQgbGV2ZWwgMHgleFxuIiwKLQkJCQkgICAgICAgeDg2X2NhcF9mbGFnc1tkZi0+ZmVhdHVyZV0sCi0JCQkJICAgICAgIGRmLT5sZXZlbCk7Ci0JCX0KKwkJICAgICAoczMyKWRmLT5sZXZlbCA+IChzMzIpYy0+Y3B1aWRfbGV2ZWwpKQorCQkJY29udGludWU7CisKKwkJY2xlYXJfY3B1X2NhcChjLCBkZi0+ZmVhdHVyZSk7CisJCWlmICghd2FybikKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJDUFU6IENQVSBmZWF0dXJlICVzIGRpc2FibGVkLCBubyBDUFVJRCBsZXZlbCAweCV4XG4iLAorCQkJCXg4Nl9jYXBfZmxhZ3NbZGYtPmZlYXR1cmVdLCBkZi0+bGV2ZWwpOwogCX0KIH0KIAogLyoKICAqIE5hbWluZyBjb252ZW50aW9uIHNob3VsZCBiZTogPE5hbWU+IFsoPENvZGVuYW1lPildCiAgKiBUaGlzIHRhYmxlIG9ubHkgaXMgdXNlZCB1bmxlc3MgaW5pdF88dmVuZG9yPigpIGJlbG93IGRvZXNuJ3Qgc2V0IGl0OwotICogaW4gcGFydGljdWxhciwgaWYgQ1BVSUQgbGV2ZWxzIDB4ODAwMDAwMDIuLjQgYXJlIHN1cHBvcnRlZCwgdGhpcyBpc24ndCB1c2VkCi0gKgorICogaW4gcGFydGljdWxhciwgaWYgQ1BVSUQgbGV2ZWxzIDB4ODAwMDAwMDIuLjQgYXJlIHN1cHBvcnRlZCwgdGhpcworICogaXNuJ3QgdXNlZAogICovCiAKIC8qIExvb2sgdXAgQ1BVIG5hbWVzIGJ5IHRhYmxlIGxvb2t1cC4gKi8KLXN0YXRpYyBjaGFyIF9fY3B1aW5pdCAqdGFibGVfbG9va3VwX21vZGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyBjb25zdCBjaGFyICpfX2NwdWluaXQgdGFibGVfbG9va3VwX21vZGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlzdHJ1Y3QgY3B1X21vZGVsX2luZm8gKmluZm87CisJY29uc3Qgc3RydWN0IGNwdV9tb2RlbF9pbmZvICppbmZvOwogCiAJaWYgKGMtPng4Nl9tb2RlbCA+PSAxNikKIAkJcmV0dXJuIE5VTEw7CS8qIFJhbmdlIGNoZWNrICovCkBAIC0zMDcsOCArMzE3LDEwIEBACiAJbG9hZF9zdGFja19jYW5hcnlfc2VnbWVudCgpOwogfQogCi0vKiBDdXJyZW50IGdkdCBwb2ludHMgJWZzIGF0IHRoZSAibWFzdGVyIiBwZXItY3B1IGFyZWE6IGFmdGVyIHRoaXMsCi0gKiBpdCdzIG9uIHRoZSByZWFsIG9uZS4gKi8KKy8qCisgKiBDdXJyZW50IGdkdCBwb2ludHMgJWZzIGF0IHRoZSAibWFzdGVyIiBwZXItY3B1IGFyZWE6IGFmdGVyIHRoaXMsCisgKiBpdCdzIG9uIHRoZSByZWFsIG9uZS4KKyAqLwogdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdChpbnQgY3B1KQogewogCXN0cnVjdCBkZXNjX3B0ciBnZHRfZGVzY3I7CkBAIC0zMjEsNyArMzMzLDcgQEAKIAlsb2FkX3BlcmNwdV9zZWdtZW50KGNwdSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKl9fY3B1aW5pdGRhdGEgY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBkZWZhdWx0X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewpAQCAtMzQwLDcgKzM1Miw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGRhdGEgZGVmYXVsdF9jcHUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgZGVmYXVsdF9jcHUgPSB7CiAJLmNfaW5pdAk9IGRlZmF1bHRfaW5pdCwKIAkuY192ZW5kb3IgPSAiVW5rbm93biIsCiAJLmNfeDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTiwKQEAgLTM1NCwyMiArMzY2LDI0IEBACiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsIDwgMHg4MDAwMDAwNCkKIAkJcmV0dXJuOwogCi0JdiA9ICh1bnNpZ25lZCBpbnQgKikgYy0+eDg2X21vZGVsX2lkOworCXYgPSAodW5zaWduZWQgaW50ICopYy0+eDg2X21vZGVsX2lkOwogCWNwdWlkKDB4ODAwMDAwMDIsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKIAljcHVpZCgweDgwMDAwMDAzLCAmdls0XSwgJnZbNV0sICZ2WzZdLCAmdls3XSk7CiAJY3B1aWQoMHg4MDAwMDAwNCwgJnZbOF0sICZ2WzldLCAmdlsxMF0sICZ2WzExXSk7CiAJYy0+eDg2X21vZGVsX2lkWzQ4XSA9IDA7CiAKLQkvKiBJbnRlbCBjaGlwcyByaWdodC1qdXN0aWZ5IHRoaXMgc3RyaW5nIGZvciBzb21lIGR1bWIgcmVhc29uOwotCSAgIHVuZG8gdGhhdCBicmFpbiBkYW1hZ2UgKi8KKwkvKgorCSAqIEludGVsIGNoaXBzIHJpZ2h0LWp1c3RpZnkgdGhpcyBzdHJpbmcgZm9yIHNvbWUgZHVtYiByZWFzb247CisJICogdW5kbyB0aGF0IGJyYWluIGRhbWFnZToKKwkgKi8KIAlwID0gcSA9ICZjLT54ODZfbW9kZWxfaWRbMF07CiAJd2hpbGUgKCpwID09ICcgJykKLQkgICAgIHArKzsKKwkJcCsrOwogCWlmIChwICE9IHEpIHsKLQkgICAgIHdoaWxlICgqcCkKLQkJICAqcSsrID0gKnArKzsKLQkgICAgIHdoaWxlIChxIDw9ICZjLT54ODZfbW9kZWxfaWRbNDhdKQotCQkgICpxKysgPSAnXDAnOwkvKiBaZXJvLXBhZCB0aGUgcmVzdCAqLworCQl3aGlsZSAoKnApCisJCQkqcSsrID0gKnArKzsKKwkJd2hpbGUgKHEgPD0gJmMtPng4Nl9tb2RlbF9pZFs0OF0pCisJCQkqcSsrID0gJ1wwJzsJLyogWmVyby1wYWQgdGhlIHJlc3QgKi8KIAl9CiB9CiAKQEAgLTQzOCwyOCArNDUyLDMxIEBACiAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IEh5cGVyLVRocmVhZGluZyBpcyBkaXNhYmxlZFxuIik7Ci0JfSBlbHNlIGlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkgewotCi0JCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gbnJfY3B1X2lkcykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BVOiBVbnN1cHBvcnRlZCBudW1iZXIgb2Ygc2libGluZ3MgJWQiLAotCQkJCQlzbXBfbnVtX3NpYmxpbmdzKTsKLQkJCXNtcF9udW1fc2libGluZ3MgPSAxOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOwotCQljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKTsKLQotCQlzbXBfbnVtX3NpYmxpbmdzID0gc21wX251bV9zaWJsaW5ncyAvIGMtPng4Nl9tYXhfY29yZXM7Ci0KLQkJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOwotCi0JCWNvcmVfYml0cyA9IGdldF9jb3VudF9vcmRlcihjLT54ODZfbWF4X2NvcmVzKTsKLQotCQljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKLQkJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7CisJCWdvdG8gb3V0OwogCX0KIAorCWlmIChzbXBfbnVtX3NpYmxpbmdzIDw9IDEpCisJCWdvdG8gb3V0OworCisJaWYgKHNtcF9udW1fc2libGluZ3MgPiBucl9jcHVfaWRzKSB7CisJCXByX3dhcm5pbmcoIkNQVTogVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHNpYmxpbmdzICVkIiwKKwkJCSAgIHNtcF9udW1fc2libGluZ3MpOworCQlzbXBfbnVtX3NpYmxpbmdzID0gMTsKKwkJcmV0dXJuOworCX0KKworCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKKwljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKTsKKworCXNtcF9udW1fc2libGluZ3MgPSBzbXBfbnVtX3NpYmxpbmdzIC8gYy0+eDg2X21heF9jb3JlczsKKworCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKKworCWNvcmVfYml0cyA9IGdldF9jb3VudF9vcmRlcihjLT54ODZfbWF4X2NvcmVzKTsKKworCWMtPmNwdV9jb3JlX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYikgJgorCQkJCSAgICAgICAoKDEgPDwgY29yZV9iaXRzKSAtIDEpOworCiBvdXQ6CiAJaWYgKChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncykgPiAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFBoeXNpY2FsIFByb2Nlc3NvciBJRDogJWRcbiIsCkBAIC00NzMsOCArNDkwLDggQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZXRfY3B1X3ZlbmRvcihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJY2hhciAqdiA9IGMtPng4Nl92ZW5kb3JfaWQ7Ci0JaW50IGk7CiAJc3RhdGljIGludCBwcmludGVkOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFg4Nl9WRU5ET1JfTlVNOyBpKyspIHsKIAkJaWYgKCFjcHVfZGV2c1tpXSkKQEAgLTQ4Myw2ICs1MDAsNyBAQAogCQlpZiAoIXN0cmNtcCh2LCBjcHVfZGV2c1tpXS0+Y19pZGVudFswXSkgfHwKIAkJICAgIChjcHVfZGV2c1tpXS0+Y19pZGVudFsxXSAmJgogCQkgICAgICFzdHJjbXAodiwgY3B1X2RldnNbaV0tPmNfaWRlbnRbMV0pKSkgeworCiAJCQl0aGlzX2NwdSA9IGNwdV9kZXZzW2ldOwogCQkJYy0+eDg2X3ZlbmRvciA9IHRoaXNfY3B1LT5jX3g4Nl92ZW5kb3I7CiAJCQlyZXR1cm47CkBAIC00OTEsNyArNTA5LDkgQEAKIAogCWlmICghcHJpbnRlZCkgewogCQlwcmludGVkKys7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ1BVOiB2ZW5kb3JfaWQgJyVzJyB1bmtub3duLCB1c2luZyBnZW5lcmljIGluaXQuXG4iLCB2KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAiQ1BVOiB2ZW5kb3JfaWQgJyVzJyB1bmtub3duLCB1c2luZyBnZW5lcmljIGluaXQuXG4iLCB2KTsKKwogCQlwcmludGsoS0VSTl9FUlIgIkNQVTogWW91ciBzeXN0ZW0gbWF5IGJlIHVuc3RhYmxlLlxuIik7CiAJfQogCkBAIC01MTEsMTQgKzUzMSwxNyBAQAogCS8qIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDEgKi8KIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwMSkgewogCQl1MzIganVuaywgdGZtcywgY2FwMCwgbWlzYzsKKwogCQljcHVpZCgweDAwMDAwMDAxLCAmdGZtcywgJm1pc2MsICZqdW5rLCAmY2FwMCk7CiAJCWMtPng4NiA9ICh0Zm1zID4+IDgpICYgMHhmOwogCQljLT54ODZfbW9kZWwgPSAodGZtcyA+PiA0KSAmIDB4ZjsKIAkJYy0+eDg2X21hc2sgPSB0Zm1zICYgMHhmOworCiAJCWlmIChjLT54ODYgPT0gMHhmKQogCQkJYy0+eDg2ICs9ICh0Zm1zID4+IDIwKSAmIDB4ZmY7CiAJCWlmIChjLT54ODYgPj0gMHg2KQogCQkJYy0+eDg2X21vZGVsICs9ICgodGZtcyA+PiAxNikgJiAweGYpIDw8IDQ7CisKIAkJaWYgKGNhcDAgJiAoMTw8MTkpKSB7CiAJCQljLT54ODZfY2xmbHVzaF9zaXplID0gKChtaXNjID4+IDgpICYgMHhmZikgKiA4OwogCQkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemU7CkBAIC01MzQsNiArNTU3LDcgQEAKIAkvKiBJbnRlbC1kZWZpbmVkIGZsYWdzOiBsZXZlbCAweDAwMDAwMDAxICovCiAJaWYgKGMtPmNwdWlkX2xldmVsID49IDB4MDAwMDAwMDEpIHsKIAkJdTMyIGNhcGFiaWxpdHksIGV4Y2FwOworCiAJCWNwdWlkKDB4MDAwMDAwMDEsICZ0Zm1zLCAmZWJ4LCAmZXhjYXAsICZjYXBhYmlsaXR5KTsKIAkJYy0+eDg2X2NhcGFiaWxpdHlbMF0gPSBjYXBhYmlsaXR5OwogCQljLT54ODZfY2FwYWJpbGl0eVs0XSA9IGV4Y2FwOwpAQCAtNTQyLDYgKzU2Niw3IEBACiAJLyogQU1ELWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4ODAwMDAwMDEgKi8KIAl4bHZsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID0geGx2bDsKKwogCWlmICgoeGx2bCAmIDB4ZmZmZjAwMDApID09IDB4ODAwMDAwMDApIHsKIAkJaWYgKHhsdmwgPj0gMHg4MDAwMDAwMSkgewogCQkJYy0+eDg2X2NhcGFiaWxpdHlbMV0gPSBjcHVpZF9lZHgoMHg4MDAwMDAwMSk7CkBAIC01NDksMTMgKzU3NCwxNSBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA4KSB7CiAJCXUzMiBlYXggPSBjcHVpZF9lYXgoMHg4MDAwMDAwOCk7CiAKIAkJYy0+eDg2X3ZpcnRfYml0cyA9IChlYXggPj4gOCkgJiAweGZmOwogCQljLT54ODZfcGh5c19iaXRzID0gZWF4ICYgMHhmZjsKIAl9CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVsc2UgaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUEFFKSB8fCBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BTRTM2KSkKKwkJYy0+eDg2X3BoeXNfYml0cyA9IDM2OwogI2VuZGlmCiAKIAlpZiAoYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPj0gMHg4MDAwMDAwNykKQEAgLTYwMiw4ICs2MjksMTIgQEAKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OworCWMtPng4Nl9waHlzX2JpdHMgPSAzNjsKKwljLT54ODZfdmlydF9iaXRzID0gNDg7CiAjZWxzZQogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSAzMjsKKwljLT54ODZfcGh5c19iaXRzID0gMzI7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDMyOwogI2VuZGlmCiAJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemU7CiAKQEAgLTYzNCwxMiArNjY1LDEyIEBACiAKIHZvaWQgX19pbml0IGVhcmx5X2NwdV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdV9kZXYgKipjZGV2OworCWNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjb25zdCAqY2RldjsKIAlpbnQgY291bnQgPSAwOwogCi0JcHJpbnRrKCJLRVJORUwgc3VwcG9ydGVkIGNwdXM6XG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJLRVJORUwgc3VwcG9ydGVkIGNwdXM6XG4iKTsKIAlmb3IgKGNkZXYgPSBfX3g4Nl9jcHVfZGV2X3N0YXJ0OyBjZGV2IDwgX194ODZfY3B1X2Rldl9lbmQ7IGNkZXYrKykgewotCQlzdHJ1Y3QgY3B1X2RldiAqY3B1ZGV2ID0gKmNkZXY7CisJCWNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjcHVkZXYgPSAqY2RldjsKIAkJdW5zaWduZWQgaW50IGo7CiAKIAkJaWYgKGNvdW50ID49IFg4Nl9WRU5ET1JfTlVNKQpAQCAtNjUwLDcgKzY4MSw3IEBACiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCWlmICghY3B1ZGV2LT5jX2lkZW50W2pdKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKCIgICVzICVzXG4iLCBjcHVkZXYtPmNfdmVuZG9yLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAlcyAlc1xuIiwgY3B1ZGV2LT5jX3ZlbmRvciwKIAkJCQljcHVkZXYtPmNfaWRlbnRbal0pOwogCQl9CiAJfQpAQCAtNzI2LDkgKzc1NywxMyBAQAogCWMtPng4Nl9jb3JlaWRfYml0cyA9IDA7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSA2NDsKKwljLT54ODZfcGh5c19iaXRzID0gMzY7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDQ4OwogI2Vsc2UKIAljLT5jcHVpZF9sZXZlbCA9IC0xOwkvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi8KIAljLT54ODZfY2xmbHVzaF9zaXplID0gMzI7CisJYy0+eDg2X3BoeXNfYml0cyA9IDMyOworCWMtPng4Nl92aXJ0X2JpdHMgPSAzMjsKICNlbmRpZgogCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplOwogCW1lbXNldCgmYy0+eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZiBjLT54ODZfY2FwYWJpbGl0eSk7CkBAIC03NTksOCArNzk0LDggQEAKIAlzcXVhc2hfdGhlX3N0dXBpZF9zZXJpYWxfbnVtYmVyKGMpOwogCiAJLyoKLQkgKiBUaGUgdmVuZG9yLXNwZWNpZmljIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgZmVhdHVyZXMuICBOb3cKLQkgKiB3ZSBkbyAiZ2VuZXJpYyBjaGFuZ2VzLiIKKwkgKiBUaGUgdmVuZG9yLXNwZWNpZmljIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgZmVhdHVyZXMuCisJICogTm93IHdlIGRvICJnZW5lcmljIGNoYW5nZXMuIgogCSAqLwogCiAJLyogRmlsdGVyIG91dCBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gQ1BVSUQgbGV2ZWxzIHdlIGRvbid0IGhhdmUgKi8KQEAgLTc2OCw3ICs4MDMsNyBAQAogCiAJLyogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc3RpbGwgdW5zZXQsIGRvIHRhYmxlIGxvb2t1cC4gKi8KIAlpZiAoIWMtPng4Nl9tb2RlbF9pZFswXSkgewotCQljaGFyICpwOworCQljb25zdCBjaGFyICpwOwogCQlwID0gdGFibGVfbG9va3VwX21vZGVsKGMpOwogCQlpZiAocCkKIAkJCXN0cmNweShjLT54ODZfbW9kZWxfaWQsIHApOwpAQCAtODQzLDExICs4NzgsMTEgQEAKIH0KIAogc3RydWN0IG1zcl9yYW5nZSB7Ci0JdW5zaWduZWQgbWluOwotCXVuc2lnbmVkIG1heDsKKwl1bnNpZ25lZAltaW47CisJdW5zaWduZWQJbWF4OwogfTsKIAotc3RhdGljIHN0cnVjdCBtc3JfcmFuZ2UgbXNyX3JhbmdlX2FycmF5W10gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXNyX3JhbmdlIG1zcl9yYW5nZV9hcnJheVtdIF9fY3B1aW5pdGNvbnN0ID0gewogCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDQxOH0sCiAJeyAweGMwMDAwMDAwLCAweGMwMDAwNDBifSwKIAl7IDB4YzAwMTAwMDAsIDB4YzAwMTAxNDJ9LApAQCAtODU2LDE0ICs4OTEsMTUgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHByaW50X2NwdV9tc3Iodm9pZCkKIHsKKwl1bnNpZ25lZCBpbmRleF9taW4sIGluZGV4X21heDsKIAl1bnNpZ25lZCBpbmRleDsKIAl1NjQgdmFsOwogCWludCBpOwotCXVuc2lnbmVkIGluZGV4X21pbiwgaW5kZXhfbWF4OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXNyX3JhbmdlX2FycmF5KTsgaSsrKSB7CiAJCWluZGV4X21pbiA9IG1zcl9yYW5nZV9hcnJheVtpXS5taW47CiAJCWluZGV4X21heCA9IG1zcl9yYW5nZV9hcnJheVtpXS5tYXg7CisKIAkJZm9yIChpbmRleCA9IGluZGV4X21pbjsgaW5kZXggPCBpbmRleF9tYXg7IGluZGV4KyspIHsKIAkJCWlmIChyZG1zcmxfYW1kX3NhZmUoaW5kZXgsICZ2YWwpKQogCQkJCWNvbnRpbnVlOwpAQCAtODczLDYgKzkwOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc2hvd19tc3IgX19jcHVpbml0ZGF0YTsKKwogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfc2hvd19tc3IoY2hhciAqYXJnKQogewogCWludCBudW07CkBAIC04OTQsMTIgKzkzMSwxNCBAQAogCiB2b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JY2hhciAqdmVuZG9yID0gTlVMTDsKKwljb25zdCBjaGFyICp2ZW5kb3IgPSBOVUxMOwogCi0JaWYgKGMtPng4Nl92ZW5kb3IgPCBYODZfVkVORE9SX05VTSkKKwlpZiAoYy0+eDg2X3ZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKSB7CiAJCXZlbmRvciA9IHRoaXNfY3B1LT5jX3ZlbmRvcjsKLQllbHNlIGlmIChjLT5jcHVpZF9sZXZlbCA+PSAwKQotCQl2ZW5kb3IgPSBjLT54ODZfdmVuZG9yX2lkOworCX0gZWxzZSB7CisJCWlmIChjLT5jcHVpZF9sZXZlbCA+PSAwKQorCQkJdmVuZG9yID0gYy0+eDg2X3ZlbmRvcl9pZDsKKwl9CiAKIAlpZiAodmVuZG9yICYmICFzdHJzdHIoYy0+eDg2X21vZGVsX2lkLCB2ZW5kb3IpKQogCQlwcmludGsoS0VSTl9DT05UICIlcyAiLCB2ZW5kb3IpOwpAQCAtOTI2LDEwICs5NjUsMTIgQEAKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX2Rpc2FibGVjcHVpZChjaGFyICphcmcpCiB7CiAJaW50IGJpdDsKKwogCWlmIChnZXRfb3B0aW9uKCZhcmcsICZiaXQpICYmIGJpdCA8IE5DQVBJTlRTKjMyKQogCQlzZXR1cF9jbGVhcl9jcHVfY2FwKGJpdCk7CiAJZWxzZQogCQlyZXR1cm4gMDsKKwogCXJldHVybiAxOwogfQogX19zZXR1cCgiY2xlYXJjcHVpZD0iLCBzZXR1cF9kaXNhYmxlY3B1aWQpOwpAQCAtOTM5LDYgKzk4MCw3IEBACiAKIERFRklORV9QRVJfQ1BVX0ZJUlNUKHVuaW9uIGlycV9zdGFja191bmlvbiwKIAkJICAgICBpcnFfc3RhY2tfdW5pb24pIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBERUZJTkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpID0KIAlpbml0X3Blcl9jcHVfdmFyKGlycV9zdGFja191bmlvbi5pcnFfc3RhY2spICsgSVJRX1NUQUNLX1NJWkUgLSA2NDsKIApAQCAtOTQ4LDEyICs5OTAsMjEgQEAKIAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBpcnFfY291bnQpID0gLTE7CiAKKy8qCisgKiBTcGVjaWFsIElTVCBzdGFja3Mgd2hpY2ggdGhlIENQVSBzd2l0Y2hlcyB0byB3aGVuIGl0IGNhbGxzCisgKiBhbiBJU1QtbWFya2VkIGRlc2NyaXB0b3IgZW50cnkuIFVwIHRvIDcgc3RhY2tzIChoYXJkd2FyZQorICogbGltaXQpLCBhbGwgb2YgdGhlbSBhcmUgNEssIGV4Y2VwdCB0aGUgZGVidWcgc3RhY2sgd2hpY2gKKyAqIGlzIDhLLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV4Y2VwdGlvbl9zdGFja19zaXplc1tOX0VYQ0VQVElPTl9TVEFDS1NdID0geworCSAgWzAgLi4uIE5fRVhDRVBUSU9OX1NUQUNLUyAtIDFdCT0gRVhDRVBUSU9OX1NUS1NaLAorCSAgW0RFQlVHX1NUQUNLIC0gMV0JCQk9IERFQlVHX1NUS1NaCit9OworCiBzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKGNoYXIsIGV4Y2VwdGlvbl9zdGFja3MKIAlbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsgREVCVUdfU1RLU1pdKQogCV9fYWxpZ25lZChQQUdFX1NJWkUpOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7Ci0KIC8qIE1heSBub3QgYmUgbWFya2VkIF9faW5pdDogdXNlZCBieSBzb2Z0d2FyZSBzdXNwZW5kICovCiB2b2lkIHN5c2NhbGxfaW5pdCh2b2lkKQogewpAQCAtOTgzLDcgKzEwMzQsNyBAQAogICovCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKIAotI2Vsc2UJLyogeDg2XzY0ICovCisjZWxzZQkvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHN0YWNrX2NhbmFyeSk7CkBAIC05OTUsOSArMTA0NiwyNiBAQAogCW1lbXNldChyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIAlyZWdzLT5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKIAlyZWdzLT5ncyA9IF9fS0VSTkVMX1NUQUNLX0NBTkFSWTsKKwogCXJldHVybiByZWdzOwogfQotI2VuZGlmCS8qIHg4Nl82NCAqLworI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KKworLyoKKyAqIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczoKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfYWxsX2RlYnVnX3JlZ3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyogSWdub3JlIGRiNCwgZGI1ICovCisJCWlmICgoaSA9PSA0KSB8fCAoaSA9PSA1KSkKKwkJCWNvbnRpbnVlOworCisJCXNldF9kZWJ1Z3JlZygwLCBpKTsKKwl9Cit9CiAKIC8qCiAgKiBjcHVfaW5pdCgpIGluaXRpYWxpemVzIHN0YXRlIHRoYXQgaXMgcGVyLUNQVS4gU29tZSBkYXRhIGlzIGFscmVhZHkKQEAgLTEwMDcsMTUgKzEwNzUsMjAgQEAKICAqIEEgbG90IG9mIHN0YXRlIGlzIGFscmVhZHkgc2V0IHVwIGluIFBEQSBpbml0IGZvciA2NCBiaXQKICAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKKwogdm9pZCBfX2NwdWluaXQgY3B1X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1ID0gc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB0c3Nfc3RydWN0ICp0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0Jc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOwotCXVuc2lnbmVkIGxvbmcgdjsKKwlzdHJ1Y3Qgb3JpZ19pc3QgKm9yaWdfaXN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWU7CisJc3RydWN0IHRzc19zdHJ1Y3QgKnQ7CisJdW5zaWduZWQgbG9uZyB2OworCWludCBjcHU7CiAJaW50IGk7CiAKKwljcHUgPSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCk7CisJdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOworCW9yaWdfaXN0ID0gJnBlcl9jcHUob3JpZ19pc3QsIGNwdSk7CisKICNpZmRlZiBDT05GSUdfTlVNQQogCWlmIChjcHUgIT0gMCAmJiBwZXJjcHVfcmVhZChub2RlX251bWJlcikgPT0gMCAmJgogCSAgICBjcHVfdG9fbm9kZShjcHUpICE9IE5VTUFfTk9fTk9ERSkKQEAgLTEwNTYsMTkgKzExMjksMTcgQEAKIAkgKiBzZXQgdXAgYW5kIGxvYWQgdGhlIHBlci1DUFUgVFNTCiAJICovCiAJaWYgKCFvcmlnX2lzdC0+aXN0WzBdKSB7Ci0JCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZXNbTl9FWENFUFRJT05fU1RBQ0tTXSA9IHsKLQkJICBbMCAuLi4gTl9FWENFUFRJT05fU1RBQ0tTIC0gMV0gPSBFWENFUFRJT05fU1RLU1osCi0JCSAgW0RFQlVHX1NUQUNLIC0gMV0gPSBERUJVR19TVEtTWgotCQl9OwogCQljaGFyICplc3RhY2tzID0gcGVyX2NwdShleGNlcHRpb25fc3RhY2tzLCBjcHUpOworCiAJCWZvciAodiA9IDA7IHYgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IHYrKykgewotCQkJZXN0YWNrcyArPSBzaXplc1t2XTsKKwkJCWVzdGFja3MgKz0gZXhjZXB0aW9uX3N0YWNrX3NpemVzW3ZdOwogCQkJb3JpZ19pc3QtPmlzdFt2XSA9IHQtPng4Nl90c3MuaXN0W3ZdID0KIAkJCQkJKHVuc2lnbmVkIGxvbmcpZXN0YWNrczsKIAkJfQogCX0KIAogCXQtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKTsKKwogCS8qCiAJICogPD0gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgQ1BVIHdpbGwgYWNjZXNzIHVwIHRvCiAJICogOCBiaXRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBJTyBwZXJtaXNzaW9uIGJpdG1hcC4KQEAgLTEwNzgsOCArMTE0OSw3IEBACiAKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAltZS0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0JaWYgKG1lLT5tbSkKLQkJQlVHKCk7CisJQlVHX09OKG1lLT5tbSk7CiAJZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIG1lKTsKIAogCWxvYWRfc3AwKHQsICZjdXJyZW50LT50aHJlYWQpOwpAQCAtMTA5OCwxNyArMTE2OCw3IEBACiAJCWFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaygpOwogCWVsc2UKICNlbmRpZgotCXsKLQkJLyoKLQkJICogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOgotCQkgKi8KLQkJc2V0X2RlYnVncmVnKDBVTCwgMCk7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDEpOwotCQlzZXRfZGVidWdyZWcoMFVMLCAyKTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgMyk7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDYpOwotCQlzZXRfZGVidWdyZWcoMFVMLCA3KTsKLQl9CisJCWNsZWFyX2FsbF9kZWJ1Z19yZWdzKCk7CiAKIAlmcHVfaW5pdCgpOwogCkBAIC0xMTI5LDcgKzExODksOCBAQAogCiAJaWYgKGNwdW1hc2tfdGVzdF9hbmRfc2V0X2NwdShjcHUsIGNwdV9pbml0aWFsaXplZF9tYXNrKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFUjJWQgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIsIGNwdSk7Ci0JCWZvciAoOzspIGxvY2FsX2lycV9lbmFibGUoKTsKKwkJZm9yICg7OykKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgQ1BVIyVkXG4iLCBjcHUpOwpAQCAtMTE0NSw4ICsxMjA2LDcgQEAKIAkgKi8KIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAljdXJyLT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLQlpZiAoY3Vyci0+bW0pCi0JCUJVRygpOworCUJVR19PTihjdXJyLT5tbSk7CiAJZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnIpOwogCiAJbG9hZF9zcDAodCwgdGhyZWFkKTsKQEAgLTExNTksMTMgKzEyMTksNyBAQAogCV9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUywgJmRvdWJsZWZhdWx0X3Rzcyk7CiAjZW5kaWYKIAotCS8qIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczogKi8KLQlzZXRfZGVidWdyZWcoMCwgMCk7Ci0Jc2V0X2RlYnVncmVnKDAsIDEpOwotCXNldF9kZWJ1Z3JlZygwLCAyKTsKLQlzZXRfZGVidWdyZWcoMCwgMyk7Ci0Jc2V0X2RlYnVncmVnKDAsIDYpOwotCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwljbGVhcl9hbGxfZGVidWdfcmVncygpOwogCiAJLyoKIAkgKiBGb3JjZSBGUFUgaW5pdGlhbGl6YXRpb246CkBAIC0xMTg1LDYgKzEyMzksNCBAQAogCiAJeHNhdmVfaW5pdCgpOwogfQotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKaW5kZXggZGU0MDk0YS4uNmRlOWE5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCkBAIC0zLDMzICszLDM0IEBACiAjZGVmaW5lIEFSQ0hfWDg2X0NQVV9ICiAKIHN0cnVjdCBjcHVfbW9kZWxfaW5mbyB7Ci0JaW50IHZlbmRvcjsKLQlpbnQgZmFtaWx5OwotCWNoYXIgKm1vZGVsX25hbWVzWzE2XTsKKwlpbnQJCXZlbmRvcjsKKwlpbnQJCWZhbWlseTsKKwljb25zdCBjaGFyCSptb2RlbF9uYW1lc1sxNl07CiB9OwogCiAvKiBhdHRlbXB0IHRvIGNvbnNvbGlkYXRlIGNwdSBhdHRyaWJ1dGVzICovCiBzdHJ1Y3QgY3B1X2RldiB7Ci0JY2hhcgkqIGNfdmVuZG9yOworCWNvbnN0IGNoYXIJKmNfdmVuZG9yOwogCiAJLyogc29tZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVzIGZvciBjcHVpZCBzdHJpbmcgKi8KLQljaGFyCSogY19pZGVudFsyXTsJCisJY29uc3QgY2hhcgkqY19pZGVudFsyXTsKIAogCXN0cnVjdAkJY3B1X21vZGVsX2luZm8gY19tb2RlbHNbNF07CiAKLQl2b2lkICAgICAgICAgICAgKCpjX2Vhcmx5X2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0Jdm9pZAkJKCpjX2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMpOwotCXZvaWQJCSgqY19pZGVudGlmeSkoc3RydWN0IGNwdWluZm9feDg2ICogYyk7Ci0JdW5zaWduZWQgaW50CSgqY19zaXplX2NhY2hlKShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0JaW50CWNfeDg2X3ZlbmRvcjsKKwl2b2lkICAgICAgICAgICAgKCpjX2Vhcmx5X2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKKwl2b2lkCQkoKmNfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICopOworCXZvaWQJCSgqY19pZGVudGlmeSkoc3RydWN0IGNwdWluZm9feDg2ICopOworCXVuc2lnbmVkIGludAkoKmNfc2l6ZV9jYWNoZSkoc3RydWN0IGNwdWluZm9feDg2ICosIHVuc2lnbmVkIGludCk7CisJaW50CQljX3g4Nl92ZW5kb3I7CiB9OwogCiAjZGVmaW5lIGNwdV9kZXZfcmVnaXN0ZXIoY3B1X2RldlgpIFwKLQlzdGF0aWMgc3RydWN0IGNwdV9kZXYgKl9fY3B1X2Rldl8jI2NwdV9kZXZYIF9fdXNlZCBcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjb25zdCBfX2NwdV9kZXZfIyNjcHVfZGV2WCBfX3VzZWQgXAogCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIueDg2X2NwdV9kZXYuaW5pdCIpKSkgPSBcCiAJJmNwdV9kZXZYOwogCi1leHRlcm4gc3RydWN0IGNwdV9kZXYgKl9feDg2X2NwdV9kZXZfc3RhcnRbXSwgKl9feDg2X2NwdV9kZXZfZW5kW107CitleHRlcm4gY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNvbnN0IF9feDg2X2NwdV9kZXZfc3RhcnRbXSwKKwkJCSAgICAqY29uc3QgX194ODZfY3B1X2Rldl9lbmRbXTsKIAogZXh0ZXJuIHZvaWQgZGlzcGxheV9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZlMjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKQEAgLTAsMCArMSw5MDEgQEAKKy8qCisgKiBDUFUgeDg2IGFyY2hpdGVjdHVyZSBkZWJ1ZyBjb2RlCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDkgSmFzd2luZGVyIFNpbmdoIFJhanB1dAorICoKKyAqIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9jcHVfZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9jcHVYX2Jhc2UsIGNwdV9hcnJbQ1BVX1JFR19BTExfQklUXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9wcml2YXRlICosIHByaXZfYXJyW01BWF9DUFVfRklMRVNdKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgY3B1X21vZGVsZmxhZyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfcHJpdl9jb3VudCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIGNwdV9tb2RlbCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoY3B1X2RlYnVnX2xvY2spOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqY3B1X2RlYnVnZnNfZGlyOworCitzdGF0aWMgc3RydWN0IGNwdV9kZWJ1Z19iYXNlIGNwdV9iYXNlW10gPSB7CisJeyAibWMiLAkJQ1BVX01DLAkJMAl9LAorCXsgIm1vbml0b3IiLAlDUFVfTU9OSVRPUiwJMAl9LAorCXsgInRpbWUiLAlDUFVfVElNRSwJMAl9LAorCXsgInBtYyIsCUNQVV9QTUMsCTEJfSwKKwl7ICJwbGF0Zm9ybSIsCUNQVV9QTEFURk9STSwJMAl9LAorCXsgImFwaWMiLAlDUFVfQVBJQywJMAl9LAorCXsgInBvd2Vyb24iLAlDUFVfUE9XRVJPTiwJMAl9LAorCXsgImNvbnRyb2wiLAlDUFVfQ09OVFJPTCwJMAl9LAorCXsgImZlYXR1cmVzIiwJQ1BVX0ZFQVRVUkVTLAkwCX0sCisJeyAibGFzdGJyYW5jaCIsCUNQVV9MQlJBTkNILAkwCX0sCisJeyAiYmlvcyIsCUNQVV9CSU9TLAkwCX0sCisJeyAiZnJlcSIsCUNQVV9GUkVRLAkwCX0sCisJeyAibXRyciIsCUNQVV9NVFJSLAkwCX0sCisJeyAicGVyZiIsCUNQVV9QRVJGLAkwCX0sCisJeyAiY2FjaGUiLAlDUFVfQ0FDSEUsCTAJfSwKKwl7ICJzeXNlbnRlciIsCUNQVV9TWVNFTlRFUiwJMAl9LAorCXsgInRoZXJtIiwJQ1BVX1RIRVJNLAkwCX0sCisJeyAibWlzYyIsCUNQVV9NSVNDLAkwCX0sCisJeyAiZGVidWciLAlDUFVfREVCVUcsCTAJfSwKKwl7ICJwYXQiLAlDUFVfUEFULAkwCX0sCisJeyAidm14IiwJQ1BVX1ZNWCwJMAl9LAorCXsgImNhbGwiLAlDUFVfQ0FMTCwJMAl9LAorCXsgImJhc2UiLAlDUFVfQkFTRSwJMAl9LAorCXsgInZlciIsCUNQVV9WRVIsCTAJfSwKKwl7ICJjb25mIiwJQ1BVX0NPTkYsCTAJfSwKKwl7ICJzbW0iLAlDUFVfU01NLAkwCX0sCisJeyAic3ZtIiwJQ1BVX1NWTSwJMAl9LAorCXsgIm9zdm0iLAlDUFVfT1NWTSwJMAl9LAorCXsgInRzcyIsCUNQVV9UU1MsCTAJfSwKKwl7ICJjciIsCQlDUFVfQ1IsCQkwCX0sCisJeyAiZHQiLAkJQ1BVX0RULAkJMAl9LAorCXsgInJlZ2lzdGVycyIsCUNQVV9SRUdfQUxMLAkwCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNwdV9maWxlX2Jhc2UgY3B1X2ZpbGVbXSA9IHsKKwl7ICJpbmRleCIsCUNQVV9SRUdfQUxMLAkwCX0sCisJeyAidmFsdWUiLAlDUFVfUkVHX0FMTCwJMQl9LAorfTsKKworLyogSW50ZWwgUmVnaXN0ZXJzIFJhbmdlICovCitzdGF0aWMgc3RydWN0IGNwdV9kZWJ1Z19yYW5nZSBjcHVfaW50ZWxfcmFuZ2VbXSA9IHsKKwl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIENQVV9NQywJQ1BVX0lOVEVMX0FMTAkJfSwKKwl7IDB4MDAwMDAwMDYsIDB4MDAwMDAwMDcsIENQVV9NT05JVE9SLAlDUFVfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCBDUFVfVElNRSwJQ1BVX0lOVEVMX0FMTAkJfSwKKwl7IDB4MDAwMDAwMTEsIDB4MDAwMDAwMTMsIENQVV9QTUMsCUNQVV9JTlRFTF9QRU5USVVNCX0sCisJeyAweDAwMDAwMDE3LCAweDAwMDAwMDE3LCBDUFVfUExBVEZPUk0sCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwMUIsIDB4MDAwMDAwMUIsIENQVV9BUElDLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDAwMkEsIDB4MDAwMDAwMkEsIENQVV9QT1dFUk9OLAlDUFVfUFhfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDJCLCAweDAwMDAwMDJCLCBDUFVfUE9XRVJPTiwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMDJDLCAweDAwMDAwMDJDLCBDUFVfRlJFUSwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMDNBLCAweDAwMDAwMDNBLCBDUFVfQ09OVFJPTCwJQ1BVX0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQzLCBDUFVfTEJSQU5DSCwJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDA0NCwgMHgwMDAwMDA0NywgQ1BVX0xCUkFOQ0gsCUNQVV9QTV9DT19BVAkJfSwKKwl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjMsIENQVV9MQlJBTkNILAlDUFVfQzJfQVQJCX0sCisJeyAweDAwMDAwMDY0LCAweDAwMDAwMDY3LCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX0FUT00JCX0sCisKKwl7IDB4MDAwMDAwNzksIDB4MDAwMDAwNzksIENQVV9CSU9TLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDg4LCAweDAwMDAwMDhBLCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAwOEIsIDB4MDAwMDAwOEIsIENQVV9CSU9TLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDlCLCAweDAwMDAwMDlCLCBDUFVfTU9OSVRPUiwJQ1BVX0lOVEVMX1hFT04JCX0sCisKKwl7IDB4MDAwMDAwQzEsIDB4MDAwMDAwQzIsIENQVV9QTUMsCUNQVV9QNl9DWF9BVAkJfSwKKwl7IDB4MDAwMDAwQ0QsIDB4MDAwMDAwQ0QsIENQVV9GUkVRLAlDUFVfQ1hfQVQJCX0sCisJeyAweDAwMDAwMEU3LCAweDAwMDAwMEU4LCBDUFVfUEVSRiwJQ1BVX0NYX0FUCQl9LAorCXsgMHgwMDAwMDBGRSwgMHgwMDAwMDBGRSwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKworCXsgMHgwMDAwMDExNiwgMHgwMDAwMDExNiwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMTE4LCAweDAwMDAwMTE4LCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAxMTksIDB4MDAwMDAxMTksIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1BYCQl9LAorCXsgMHgwMDAwMDExQSwgMHgwMDAwMDExQiwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMTFFLCAweDAwMDAwMTFFLCBDUFVfQ0FDSEUsCUNQVV9QWF9DWF9BVAkJfSwKKworCXsgMHgwMDAwMDE3NCwgMHgwMDAwMDE3NiwgQ1BVX1NZU0VOVEVSLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTc5LCAweDAwMDAwMTdBLCBDUFVfTUMsCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxN0IsIDB4MDAwMDAxN0IsIENQVV9NQywJQ1BVX1A2X1hFCQl9LAorCXsgMHgwMDAwMDE4NiwgMHgwMDAwMDE4NywgQ1BVX1BNQywJQ1BVX1A2X0NYX0FUCQl9LAorCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDE5OSwgQ1BVX1BFUkYsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxOUEsIDB4MDAwMDAxOUEsIENQVV9USU1FLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTlCLCAweDAwMDAwMTlELCBDUFVfVEhFUk0sCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxQTAsIDB4MDAwMDAxQTAsIENQVV9NSVNDLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDAxQzksIDB4MDAwMDAxQzksIENQVV9MQlJBTkNILAlDUFVfUE1fQ1hfQVQJCX0sCisJeyAweDAwMDAwMUQ3LCAweDAwMDAwMUQ4LCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMUQ5LCAweDAwMDAwMUQ5LCBDUFVfREVCVUcsCUNQVV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxREEsIDB4MDAwMDAxREEsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAxREIsIDB4MDAwMDAxREIsIENQVV9MQlJBTkNILAlDUFVfUDZfWEUJCX0sCisJeyAweDAwMDAwMURDLCAweDAwMDAwMURDLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDFERCwgMHgwMDAwMDFERSwgQ1BVX0xCUkFOQ0gsCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxRTAsIDB4MDAwMDAxRTAsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfUDYJCX0sCisKKwl7IDB4MDAwMDAyMDAsIDB4MDAwMDAyMEYsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjUwLCAweDAwMDAwMjUwLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCXsgMHgwMDAwMDI1OCwgMHgwMDAwMDI1OSwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKwl7IDB4MDAwMDAyNjgsIDB4MDAwMDAyNkYsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjc3LCAweDAwMDAwMjc3LCBDUFVfUEFULAlDUFVfQzJfQVRfWEUJCX0sCisJeyAweDAwMDAwMkZGLCAweDAwMDAwMkZGLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCisJeyAweDAwMDAwMzAwLCAweDAwMDAwMzA4LCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzMDksIDB4MDAwMDAzMEIsIENQVV9QTUMsCUNQVV9DMl9BVF9YRQkJfSwKKwl7IDB4MDAwMDAzMEMsIDB4MDAwMDAzMTEsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDM0NSwgMHgwMDAwMDM0NSwgQ1BVX1BNQywJQ1BVX0MyX0FUCQl9LAorCXsgMHgwMDAwMDM2MCwgMHgwMDAwMDM3MSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMzhELCAweDAwMDAwMzkwLCBDUFVfUE1DLAlDUFVfQzJfQVQJCX0sCisJeyAweDAwMDAwM0EwLCAweDAwMDAwM0JFLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzQzAsIDB4MDAwMDAzQ0QsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDNFMCwgMHgwMDAwMDNFMSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwM0YwLCAweDAwMDAwM0YwLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzRjEsIDB4MDAwMDAzRjEsIENQVV9QTUMsCUNQVV9DMl9BVF9YRQkJfSwKKwl7IDB4MDAwMDAzRjIsIDB4MDAwMDAzRjIsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCisJeyAweDAwMDAwNDAwLCAweDAwMDAwNDAyLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MDMsIDB4MDAwMDA0MDMsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDA0LCAweDAwMDAwNDA2LCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MDcsIDB4MDAwMDA0MDcsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDA4LCAweDAwMDAwNDBBLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MEIsIDB4MDAwMDA0MEIsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDBDLCAweDAwMDAwNDBFLCBDUFVfTUMsCUNQVV9QTV9DWF9YRQkJfSwKKwl7IDB4MDAwMDA0MEYsIDB4MDAwMDA0MEYsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDEwLCAweDAwMDAwNDEyLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MTMsIDB4MDAwMDA0MTcsIENQVV9NQywJQ1BVX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQ4MCwgMHgwMDAwMDQ4QiwgQ1BVX1ZNWCwJQ1BVX0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwNjAwLCAweDAwMDAwNjAwLCBDUFVfREVCVUcsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA2ODAsIDB4MDAwMDA2OEYsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA2QzAsIDB4MDAwMDA2Q0YsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKworCXsgMHgwMDAxMDdDQywgMHgwMDAxMDdEMywgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT05fTVAJfSwKKworCXsgMHhDMDAwMDA4MCwgMHhDMDAwMDA4MCwgQ1BVX0ZFQVRVUkVTLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAwODEsIDB4QzAwMDAwODIsIENQVV9DQUxMLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAwODQsIDB4QzAwMDAwODQsIENQVV9DQUxMLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAxMDAsIDB4QzAwMDAxMDIsIENQVV9CQVNFLAlDUFVfSU5URUxfWEVPTgkJfSwKK307CisKKy8qIEFNRCBSZWdpc3RlcnMgUmFuZ2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1X2RlYnVnX3JhbmdlIGNwdV9hbWRfcmFuZ2VbXSA9IHsKKwl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIENQVV9NQywJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIENQVV9USU1FLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMDFCLCAweDAwMDAwMDFCLCBDUFVfQVBJQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDAyQSwgMHgwMDAwMDAyQSwgQ1BVX1BPV0VST04sCUNQVV9LN19QTFVTCQl9LAorCXsgMHgwMDAwMDA4QiwgMHgwMDAwMDA4QiwgQ1BVX1ZFUiwJQ1BVX0s4X1BMVVMJCX0sCisJeyAweDAwMDAwMEZFLCAweDAwMDAwMEZFLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweDAwMDAwMTc0LCAweDAwMDAwMTc2LCBDUFVfU1lTRU5URVIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAxNzksIDB4MDAwMDAxN0IsIENQVV9NQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDFEOSwgMHgwMDAwMDFEOSwgQ1BVX0RFQlVHLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMURCLCAweDAwMDAwMURFLCBDUFVfTEJSQU5DSCwJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweDAwMDAwMjAwLCAweDAwMDAwMjBGLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI1MCwgMHgwMDAwMDI1MCwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyNTgsIDB4MDAwMDAyNTksIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMjY4LCAweDAwMDAwMjZGLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI3NywgMHgwMDAwMDI3NywgQ1BVX1BBVCwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDJGRiwgMHgwMDAwMDJGRiwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKworCXsgMHgwMDAwMDQwMCwgMHgwMDAwMDQxMywgQ1BVX01DLAlDUFVfSzhfUExVUywJCX0sCisKKwl7IDB4QzAwMDAwODAsIDB4QzAwMDAwODAsIENQVV9GRUFUVVJFUywJQ1BVX0FNRF9BTEwsCQl9LAorCXsgMHhDMDAwMDA4MSwgMHhDMDAwMDA4NCwgQ1BVX0NBTEwsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMDAxMDAsIDB4QzAwMDAxMDIsIENQVV9CQVNFLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDAwMTAzLCAweEMwMDAwMTAzLCBDUFVfVElNRSwJQ1BVX0sxMF9QTFVTLAkJfSwKKworCXsgMHhDMDAxMDAwMCwgMHhDMDAxMDAwNywgQ1BVX1BNQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxMCwgMHhDMDAxMDAxMCwgQ1BVX0NPTkYsCUNQVV9LN19QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMTUsIDB4QzAwMTAwMTUsIENQVV9DT05GLAlDUFVfSzdfUExVUywJCX0sCisJeyAweEMwMDEwMDE2LCAweEMwMDEwMDFBLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxRCwgMHhDMDAxMDAxRCwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMUYsIDB4QzAwMTAwMUYsIENQVV9DT05GLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDMwLCAweEMwMDEwMDM1LCBDUFVfQklPUywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDA0NCwgMHhDMDAxMDA0OCwgQ1BVX01DLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDUwLCAweEMwMDEwMDU2LCBDUFVfU01NLAlDUFVfSzBGX1BMVVMsCQl9LAorCXsgMHhDMDAxMDA1OCwgMHhDMDAxMDA1OCwgQ1BVX0NPTkYsCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMDYwLCAweEMwMDEwMDYwLCBDUFVfQ0FDSEUsCUNQVV9BTURfMTEsCQl9LAorCXsgMHhDMDAxMDA2MSwgMHhDMDAxMDA2OCwgQ1BVX1NNTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNjksIDB4QzAwMTAwNkIsIENQVV9TTU0sCUNQVV9BTURfMTEsCQl9LAorCXsgMHhDMDAxMDA3MCwgMHhDMDAxMDA3MSwgQ1BVX1NNTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAxMTEsIDB4QzAwMTAxMTMsIENQVV9TTU0sCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAxMTQsIDB4QzAwMTAxMTgsIENQVV9TVk0sCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMTQwLCAweEMwMDEwMTQxLCBDUFVfT1NWTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTEwMjIsIDB4QzAwMTEwMjMsIENQVV9DT05GLAlDUFVfSzEwX1BMVVMsCQl9LAorfTsKKworCisvKiBJbnRlbCAqLworc3RhdGljIGludCBnZXRfaW50ZWxfbW9kZWxmbGFnKHVuc2lnbmVkIG1vZGVsKQoreworCWludCBmbGFnOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgMHgwNTAxOgorCWNhc2UgMHgwNTAyOgorCWNhc2UgMHgwNTA0OgorCQlmbGFnID0gQ1BVX0lOVEVMX1BFTlRJVU07CisJCWJyZWFrOworCWNhc2UgMHgwNjAxOgorCWNhc2UgMHgwNjAzOgorCWNhc2UgMHgwNjA1OgorCWNhc2UgMHgwNjA3OgorCWNhc2UgMHgwNjA4OgorCWNhc2UgMHgwNjBBOgorCWNhc2UgMHgwNjBCOgorCQlmbGFnID0gQ1BVX0lOVEVMX1A2OworCQlicmVhazsKKwljYXNlIDB4MDYwOToKKwljYXNlIDB4MDYwRDoKKwkJZmxhZyA9IENQVV9JTlRFTF9QRU5USVVNX007CisJCWJyZWFrOworCWNhc2UgMHgwNjBFOgorCQlmbGFnID0gQ1BVX0lOVEVMX0NPUkU7CisJCWJyZWFrOworCWNhc2UgMHgwNjBGOgorCWNhc2UgMHgwNjE3OgorCQlmbGFnID0gQ1BVX0lOVEVMX0NPUkUyOworCQlicmVhazsKKwljYXNlIDB4MDYxQzoKKwkJZmxhZyA9IENQVV9JTlRFTF9BVE9NOworCQlicmVhazsKKwljYXNlIDB4MEYwMDoKKwljYXNlIDB4MEYwMToKKwljYXNlIDB4MEYwMjoKKwljYXNlIDB4MEYwMzoKKwljYXNlIDB4MEYwNDoKKwkJZmxhZyA9IENQVV9JTlRFTF9YRU9OX1A0OworCQlicmVhazsKKwljYXNlIDB4MEYwNjoKKwkJZmxhZyA9IENQVV9JTlRFTF9YRU9OX01QOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gQ1BVX05PTkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmbGFnOworfQorCisvKiBBTUQgKi8KK3N0YXRpYyBpbnQgZ2V0X2FtZF9tb2RlbGZsYWcodW5zaWduZWQgbW9kZWwpCit7CisJaW50IGZsYWc7CisKKwlzd2l0Y2ggKG1vZGVsID4+IDgpIHsKKwljYXNlIDB4NjoKKwkJZmxhZyA9IENQVV9BTURfSzY7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlmbGFnID0gQ1BVX0FNRF9LNzsKKwkJYnJlYWs7CisJY2FzZSAweDg6CisJCWZsYWcgPSBDUFVfQU1EX0s4OworCQlicmVhazsKKwljYXNlIDB4ZjoKKwkJZmxhZyA9IENQVV9BTURfMEY7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJZmxhZyA9IENQVV9BTURfMTA7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwkJZmxhZyA9IENQVV9BTURfMTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsYWcgPSBDUFVfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsYWc7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NwdV9tb2RlbGZsYWcodW5zaWduZWQgY3B1KQoreworCWludCBmbGFnOworCisJZmxhZyA9IHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpOworCisJc3dpdGNoIChmbGFnID4+IDE2KSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlmbGFnID0gZ2V0X2ludGVsX21vZGVsZmxhZyhmbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJZmxhZyA9IGdldF9hbWRfbW9kZWxmbGFnKGZsYWcgJiAweGZmZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gQ1BVX05PTkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmbGFnOworfQorCitzdGF0aWMgaW50IGdldF9jcHVfcmFuZ2VfY291bnQodW5zaWduZWQgY3B1KQoreworCWludCBpbmRleDsKKworCXN3aXRjaCAocGVyX2NwdShjcHVfbW9kZWwsIGNwdSkgPj4gMTYpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWluZGV4ID0gQVJSQVlfU0laRShjcHVfaW50ZWxfcmFuZ2UpOworCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpbmRleCA9IEFSUkFZX1NJWkUoY3B1X2FtZF9yYW5nZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IGlzX3R5cGVmbGFnX3ZhbGlkKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgZmxhZykKK3sKKwl1bnNpZ25lZCB2ZW5kb3IsIG1vZGVsZmxhZzsKKwlpbnQgaSwgaW5kZXg7CisKKwkvKiBTdGFuZGFyZCBSZWdpc3RlcnMgc2hvdWxkIGJlIGFsd2F5cyB2YWxpZCAqLworCWlmIChmbGFnID49IENQVV9UU1MpCisJCXJldHVybiAxOworCisJbW9kZWxmbGFnID0gcGVyX2NwdShjcHVfbW9kZWxmbGFnLCBjcHUpOworCXZlbmRvciA9IHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID4+IDE2OworCWluZGV4ID0gZ2V0X2NwdV9yYW5nZV9jb3VudChjcHUpOworCisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJc3dpdGNoICh2ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKChjcHVfaW50ZWxfcmFuZ2VbaV0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCQkgICAgKGNwdV9pbnRlbF9yYW5nZVtpXS5mbGFnICYgZmxhZykpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJCWlmICgoY3B1X2FtZF9yYW5nZVtpXS5tb2RlbCAmIG1vZGVsZmxhZykgJiYKKwkJCSAgICAoY3B1X2FtZF9yYW5nZVtpXS5mbGFnICYgZmxhZykpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEludmFsaWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGdldF9jcHVfcmFuZ2UodW5zaWduZWQgY3B1LCB1bnNpZ25lZCAqbWluLCB1bnNpZ25lZCAqbWF4LAorCQkJICAgICAgaW50IGluZGV4LCB1bnNpZ25lZCBmbGFnKQoreworCXVuc2lnbmVkIG1vZGVsZmxhZzsKKworCW1vZGVsZmxhZyA9IHBlcl9jcHUoY3B1X21vZGVsZmxhZywgY3B1KTsKKwkqbWF4ID0gMDsKKwlzd2l0Y2ggKHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID4+IDE2KSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAoKGNwdV9pbnRlbF9yYW5nZVtpbmRleF0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCSAgICAoY3B1X2ludGVsX3JhbmdlW2luZGV4XS5mbGFnICYgZmxhZykpIHsKKwkJCSptaW4gPSBjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLm1pbjsKKwkJCSptYXggPSBjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLm1heDsKKwkJfQorCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpZiAoKGNwdV9hbWRfcmFuZ2VbaW5kZXhdLm1vZGVsICYgbW9kZWxmbGFnKSAmJgorCQkgICAgKGNwdV9hbWRfcmFuZ2VbaW5kZXhdLmZsYWcgJiBmbGFnKSkgeworCQkJKm1pbiA9IGNwdV9hbWRfcmFuZ2VbaW5kZXhdLm1pbjsKKwkJCSptYXggPSBjcHVfYW1kX3JhbmdlW2luZGV4XS5tYXg7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICptYXg7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgY2FsbGVkIHdpdGggc2VxID0gTlVMTCBmb3IgcHJpbnRrICovCitzdGF0aWMgdm9pZCBwcmludF9jcHVfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdW5zaWduZWQgdHlwZSwKKwkJCSAgIHUzMiBsb3csIHUzMiBoaWdoKQoreworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdjsKKwl1NjQgdmFsID0gaGlnaDsKKworCWlmIChzZXEpIHsKKwkJcHJpdiA9IHNlcS0+cHJpdmF0ZTsKKwkJaWYgKHByaXYtPmZpbGUpIHsKKwkJCXZhbCA9ICh2YWwgPDwgMzIpIHwgbG93OworCQkJc2VxX3ByaW50ZihzZXEsICIweCVsbHhcbiIsIHZhbCk7CisJCX0gZWxzZQorCQkJc2VxX3ByaW50ZihzZXEsICIgJTA4eDogJTA4eF8lMDh4XG4iLAorCQkJCSAgIHR5cGUsIGhpZ2gsIGxvdyk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gIiAlMDh4OiAlMDh4XyUwOHhcbiIsIHR5cGUsIGhpZ2gsIGxvdyk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgY2FsbGVkIHdpdGggc2VxID0gTlVMTCBmb3IgcHJpbnRrICovCitzdGF0aWMgdm9pZCBwcmludF9tc3Ioc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgZmxhZykKK3sKKwl1bnNpZ25lZCBtc3IsIG1zcl9taW4sIG1zcl9tYXg7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2OworCXUzMiBsb3csIGhpZ2g7CisJaW50IGksIHJhbmdlOworCisJaWYgKHNlcSkgeworCQlwcml2ID0gc2VxLT5wcml2YXRlOworCQlpZiAocHJpdi0+ZmlsZSkgeworCQkJaWYgKCFyZG1zcl9zYWZlX29uX2NwdShwcml2LT5jcHUsIHByaXYtPnJlZywKKwkJCQkJICAgICAgICZsb3csICZoaWdoKSkKKwkJCQlwcmludF9jcHVfZGF0YShzZXEsIHByaXYtPnJlZywgbG93LCBoaWdoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJhbmdlID0gZ2V0X2NwdV9yYW5nZV9jb3VudChjcHUpOworCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKCFnZXRfY3B1X3JhbmdlKGNwdSwgJm1zcl9taW4sICZtc3JfbWF4LCBpLCBmbGFnKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAobXNyID0gbXNyX21pbjsgbXNyIDw9IG1zcl9tYXg7IG1zcisrKSB7CisJCQlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBtc3IsICZsb3csICZoaWdoKSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50X2NwdV9kYXRhKHNlcSwgbXNyLCBsb3csIGhpZ2gpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF90c3Modm9pZCAqYXJnKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gYXJnOworCXVuc2lnbmVkIGludCBzZWc7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBSQVhcdDogJTAxNmx4XG4iLCByZWdzLT5heCk7CisJc2VxX3ByaW50ZihzZXEsICIgUkJYXHQ6ICUwMTZseFxuIiwgcmVncy0+YngpOworCXNlcV9wcmludGYoc2VxLCAiIFJDWFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmN4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSRFhcdDogJTAxNmx4XG4iLCByZWdzLT5keCk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBSU0lcdDogJTAxNmx4XG4iLCByZWdzLT5zaSk7CisJc2VxX3ByaW50ZihzZXEsICIgUkRJXHQ6ICUwMTZseFxuIiwgcmVncy0+ZGkpOworCXNlcV9wcmludGYoc2VxLCAiIFJCUFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmJwKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBFU1BcdDogJTAxNmx4XG4iLCByZWdzLT5zcCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihzZXEsICIgUjA4XHQ6ICUwMTZseFxuIiwgcmVncy0+cjgpOworCXNlcV9wcmludGYoc2VxLCAiIFIwOVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnI5KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTBcdDogJTAxNmx4XG4iLCByZWdzLT5yMTApOworCXNlcV9wcmludGYoc2VxLCAiIFIxMVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxMSk7CisJc2VxX3ByaW50ZihzZXEsICIgUjEyXHQ6ICUwMTZseFxuIiwgcmVncy0+cjEyKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTNcdDogJTAxNmx4XG4iLCByZWdzLT5yMTMpOworCXNlcV9wcmludGYoc2VxLCAiIFIxNFx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxNCk7CisJc2VxX3ByaW50ZihzZXEsICIgUjE1XHQ6ICUwMTZseFxuIiwgcmVncy0+cjE1KTsKKyNlbmRpZgorCisJYXNtKCJtb3ZsICUlY3MsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgQ1NcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlhc20oIm1vdmwgJSVkcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBEU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCXNlcV9wcmludGYoc2VxLCAiIFNTXHQ6ICAgICAgICAgICAgICUwNGx4XG4iLCByZWdzLT5zcyAmIDB4ZmZmZik7CisJYXNtKCJtb3ZsICUlZXMsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRVNcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlhc20oIm1vdmwgJSVmcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBGU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCWFzbSgibW92bCAlJWdzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIEdTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBFRkxBR1NcdDogJTAxNmx4XG4iLCByZWdzLT5mbGFncyk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBFSVBcdDogJTAxNmx4XG4iLCByZWdzLT5pcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGFyZzsKKworCXNlcV9wcmludGYoc2VxLCAiIGNyMFx0OiAlMDE2bHhcbiIsIHJlYWRfY3IwKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyMlx0OiAlMDE2bHhcbiIsIHJlYWRfY3IyKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyM1x0OiAlMDE2bHhcbiIsIHJlYWRfY3IzKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyNFx0OiAlMDE2bHhcbiIsIHJlYWRfY3I0X3NhZmUoKSk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNlcV9wcmludGYoc2VxLCAiIGNyOFx0OiAlMDE2bHhcbiIsIHJlYWRfY3I4KCkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW50X2Rlc2NfcHRyKGNoYXIgKnN0ciwgc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZXNjX3B0ciBkdCkKK3sKKwlzZXFfcHJpbnRmKHNlcSwgIiAlc1x0OiAlMDE2bGx4XG4iLCBzdHIsICh1NjQpKGR0LmFkZHJlc3MgfCBkdC5zaXplKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2R0KHZvaWQgKnNlcSkKK3sKKwlzdHJ1Y3QgZGVzY19wdHIgZHQ7CisJdW5zaWduZWQgbG9uZyBsZHQ7CisKKwkvKiBJRFQgKi8KKwlzdG9yZV9pZHQoKHN0cnVjdCBkZXNjX3B0ciAqKSZkdCk7CisJcHJpbnRfZGVzY19wdHIoIklEVCIsIHNlcSwgZHQpOworCisJLyogR0RUICovCisJc3RvcmVfZ2R0KChzdHJ1Y3QgZGVzY19wdHIgKikmZHQpOworCXByaW50X2Rlc2NfcHRyKCJHRFQiLCBzZXEsIGR0KTsKKworCS8qIExEVCAqLworCXN0b3JlX2xkdChsZHQpOworCXNlcV9wcmludGYoc2VxLCAiIExEVFx0OiAlMDE2bHhcbiIsIGxkdCk7CisKKwkvKiBUUiAqLworCXN0b3JlX3RyKGxkdCk7CisJc2VxX3ByaW50ZihzZXEsICIgVFJcdDogJTAxNmx4XG4iLCBsZHQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kcih2b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyogSWdub3JlIGRiNCwgZGI1ICovCisJCWlmICgoaSA9PSA0KSB8fCAoaSA9PSA1KSkKKwkJCWNvbnRpbnVlOworCQlnZXRfZGVidWdyZWcoZHIsIGkpOworCQlzZXFfcHJpbnRmKHNlcSwgIiBkciVkXHQ6ICUwMTZseFxuIiwgaSwgZHIpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiXG4gTVNSXHQ6XG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYXBpYyh2b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHNlcSwgIiBMQVBJQ1x0OlxuIik7CisJc2VxX3ByaW50ZihzZXEsICIgSURcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSUQpID4+IDI0KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVEFTS1BSSVx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVEFTS1BSSSkpOworCXNlcV9wcmludGYoc2VxLCAiIEFSQlBSSVx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19BUkJQUkkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBQUk9DUFJJXHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTERSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xEUikpOworCXNlcV9wcmludGYoc2VxLCAiIERGUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19ERlIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBTUElWXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1NQSVYpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJU1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSVNSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRVNSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0VTUikpOworCXNlcV9wcmludGYoc2VxLCAiIElDUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19JQ1IpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJQ1IyXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0lDUjIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRUXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVFQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRUSE1SXHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUUENcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUUEMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlQwXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVDApKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlQxXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVDEpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRFUlJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZURVJSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVE1JQ1RcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVE1JQ1QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBUTUNDVFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19UTUNDVCkpOworCXNlcV9wcmludGYoc2VxLCAiIFREQ1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVERDUikpOworI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisJc2VxX3ByaW50ZihzZXEsICJcbiBNU1JcdDpcbiIpOworfQorCitzdGF0aWMgaW50IGNwdV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBzZXEtPnByaXZhdGU7CisKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZykgeworCWNhc2UgQ1BVX1RTUzoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfdHNzLCBzZXEsIDEpOworCQlicmVhazsKKwljYXNlIENQVV9DUjoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfY3IsIHNlcSwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RUOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9kdCwgc2VxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVCVUc6CisJCWlmIChwcml2LT5maWxlID09IENQVV9JTkRFWF9CSVQpCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9kciwgc2VxLCAxKTsKKwkJcHJpbnRfbXNyKHNlcSwgcHJpdi0+Y3B1LCBjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQVBJQzoKKwkJaWYgKHByaXYtPmZpbGUgPT0gQ1BVX0lOREVYX0JJVCkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X2FwaWMsIHNlcSwgMSk7CisJCXByaW50X21zcihzZXEsIHByaXYtPmNwdSwgY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRfbXNyKHNlcSwgcHJpdi0+Y3B1LCBjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKTsKKwkJYnJlYWs7CisJfQorCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqY3B1X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJaWYgKCpwb3MgPT0gMCkgLyogT25lIHRpbWUgaXMgZW5vdWdoIDstKSAqLworCQlyZXR1cm4gc2VxOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCisJcmV0dXJuIGNwdV9zZXFfc3RhcnQoc2VxLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBjcHVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1X3NlcV9vcHMgPSB7CisJLnN0YXJ0CQk9IGNwdV9zZXFfc3RhcnQsCisJLm5leHQJCT0gY3B1X3NlcV9uZXh0LAorCS5zdG9wCQk9IGNwdV9zZXFfc3RvcCwKKwkuc2hvdwkJPSBjcHVfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGNwdV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCWludCBlcnI7CisKKwllcnIgPSBzZXFfb3BlbihmaWxlLCAmY3B1X3NlcV9vcHMpOworCWlmICghZXJyKSB7CisJCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJc2VxLT5wcml2YXRlID0gcHJpdjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX21zcihzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYsIHU2NCB2YWwpCit7CisJdTMyIGxvdywgaGlnaDsKKworCWhpZ2ggPSAodmFsID4+IDMyKSAmIDB4ZmZmZmZmZmY7CisJbG93ID0gdmFsICYgMHhmZmZmZmZmZjsKKworCWlmICghd3Jtc3Jfc2FmZV9vbl9jcHUocHJpdi0+Y3B1LCBwcml2LT5yZWcsIGxvdywgaGlnaCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGljIGludCB3cml0ZV9jcHVfcmVnaXN0ZXIoc3RydWN0IGNwdV9wcml2YXRlICpwcml2LCBjb25zdCBjaGFyICpidWYpCit7CisJaW50IHJldCA9IC1FUEVSTTsKKwl1NjQgdmFsOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTdXBwb3J0aW5nIG9ubHkgTVNScyAqLworCWlmIChwcml2LT50eXBlIDwgQ1BVX1RTU19CSVQpCisJCXJldHVybiB3cml0ZV9tc3IocHJpdiwgdmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwdV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gc2VxLT5wcml2YXRlOworCWNoYXIgYnVmWzE5XTsKKworCWlmICgocHJpdiA9PSBOVUxMKSB8fCAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NvdW50XSA9IDA7CisKKwlpZiAoKGNwdV9iYXNlW3ByaXYtPnR5cGVdLndyaXRlKSAmJiAoY3B1X2ZpbGVbcHJpdi0+ZmlsZV0ud3JpdGUpKQorCQlpZiAoIXdyaXRlX2NwdV9yZWdpc3Rlcihwcml2LCBidWYpKQorCQkJcmV0dXJuIGNvdW50OworCisJcmV0dXJuIC1FQUNDRVM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwdV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjcHVfc2VxX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IGNwdV93cml0ZSwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjcHVfY3JlYXRlX2ZpbGUodW5zaWduZWQgY3B1LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCByZWcsCisJCQkgICB1bnNpZ25lZCBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gTlVMTDsKKworCS8qIEFscmVhZHkgaW50aWFsaXplZCAqLworCWlmIChmaWxlID09IENQVV9JTkRFWF9CSVQpCisJCWlmIChwZXJfY3B1KGNwdV9hcnJbdHlwZV0uaW5pdCwgY3B1KSkKKwkJCXJldHVybiAwOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5jcHUgPSBjcHU7CisJcHJpdi0+dHlwZSA9IHR5cGU7CisJcHJpdi0+cmVnID0gcmVnOworCXByaXYtPmZpbGUgPSBmaWxlOworCW11dGV4X2xvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwlwZXJfY3B1KHByaXZfYXJyW3R5cGVdLCBjcHUpID0gcHJpdjsKKwlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpKys7CisJbXV0ZXhfdW5sb2NrKCZjcHVfZGVidWdfbG9jayk7CisKKwlpZiAoZmlsZSkKKwkJZGVidWdmc19jcmVhdGVfZmlsZShjcHVfZmlsZVtmaWxlXS5uYW1lLCBTX0lSVUdPLAorCQkJCSAgICBkZW50cnksICh2b2lkICopcHJpdiwgJmNwdV9mb3BzKTsKKwllbHNlIHsKKwkJZGVidWdmc19jcmVhdGVfZmlsZShjcHVfYmFzZVt0eXBlXS5uYW1lLCBTX0lSVUdPLAorCQkJCSAgICBwZXJfY3B1KGNwdV9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpLAorCQkJCSAgICAodm9pZCAqKXByaXYsICZjcHVfZm9wcyk7CisJCW11dGV4X2xvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwkJcGVyX2NwdShjcHVfYXJyW3R5cGVdLmluaXQsIGNwdSkgPSAxOworCQltdXRleF91bmxvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9yZWdmaWxlcyh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCByZWcsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwl1bnNpZ25lZCBmaWxlOworCWludCBlcnIgPSAwOworCisJZm9yIChmaWxlID0gMDsgZmlsZSA8ICBBUlJBWV9TSVpFKGNwdV9maWxlKTsgZmlsZSsrKSB7CisJCWVyciA9IGNwdV9jcmVhdGVfZmlsZShjcHUsIHR5cGUsIHJlZywgZmlsZSwgZGVudHJ5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9tc3IodW5zaWduZWQgY3B1LCB1bnNpZ25lZCB0eXBlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGRlbnRyeSAqY3B1X2RlbnRyeSA9IE5VTEw7CisJdW5zaWduZWQgcmVnLCByZWdfbWluLCByZWdfbWF4OworCWludCBpLCByYW5nZSwgZXJyID0gMDsKKwljaGFyIHJlZ19kaXJbMTJdOworCXUzMiBsb3csIGhpZ2g7CisKKwlyYW5nZSA9IGdldF9jcHVfcmFuZ2VfY291bnQoY3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCByYW5nZTsgaSsrKSB7CisJCWlmICghZ2V0X2NwdV9yYW5nZShjcHUsICZyZWdfbWluLCAmcmVnX21heCwgaSwKKwkJCQkgICBjcHVfYmFzZVt0eXBlXS5mbGFnKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAocmVnID0gcmVnX21pbjsgcmVnIDw9IHJlZ19tYXg7IHJlZysrKSB7CisJCQlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCByZWcsICZsb3csICZoaWdoKSkKKwkJCQljb250aW51ZTsKKworCQkJc3ByaW50ZihyZWdfZGlyLCAiMHgleCIsIHJlZyk7CisJCQljcHVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZGlyKHJlZ19kaXIsIGRlbnRyeSk7CisJCQllcnIgPSBjcHVfaW5pdF9yZWdmaWxlcyhjcHUsIHR5cGUsIHJlZywgY3B1X2RlbnRyeSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X2FsbHJlZyh1bnNpZ25lZCBjcHUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpjcHVfZGVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCB0eXBlOworCWludCBlcnIgPSAwOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8ICBBUlJBWV9TSVpFKGNwdV9iYXNlKSAtIDE7IHR5cGUrKykgeworCQlpZiAoIWlzX3R5cGVmbGFnX3ZhbGlkKGNwdSwgY3B1X2Jhc2VbdHlwZV0uZmxhZykpCisJCQljb250aW51ZTsKKwkJY3B1X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihjcHVfYmFzZVt0eXBlXS5uYW1lLCBkZW50cnkpOworCQlwZXJfY3B1KGNwdV9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpID0gY3B1X2RlbnRyeTsKKworCQlpZiAodHlwZSA8IENQVV9UU1NfQklUKQorCQkJZXJyID0gY3B1X2luaXRfbXNyKGNwdSwgdHlwZSwgY3B1X2RlbnRyeSk7CisJCWVsc2UKKwkJCWVyciA9IGNwdV9jcmVhdGVfZmlsZShjcHUsIHR5cGUsIDAsIENQVV9JTkRFWF9CSVQsCisJCQkJCSAgICAgIGNwdV9kZW50cnkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X2NwdSh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmNwdV9kZW50cnkgPSBOVUxMOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1aTsKKwljaGFyIGNwdV9kaXJbMTJdOworCXVuc2lnbmVkIGNwdTsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspIHsKKwkJY3B1aSA9ICZjcHVfZGF0YShjcHUpOworCQlpZiAoIWNwdV9oYXMoY3B1aSwgWDg2X0ZFQVRVUkVfTVNSKSkKKwkJCWNvbnRpbnVlOworCQlwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KSA9ICgoY3B1aS0+eDg2X3ZlbmRvciA8PCAxNikgfAorCQkJCQkgICAoY3B1aS0+eDg2IDw8IDgpIHwKKwkJCQkJICAgKGNwdWktPng4Nl9tb2RlbCkpOworCQlwZXJfY3B1KGNwdV9tb2RlbGZsYWcsIGNwdSkgPSBnZXRfY3B1X21vZGVsZmxhZyhjcHUpOworCisJCXNwcmludGYoY3B1X2RpciwgImNwdSVkIiwgY3B1KTsKKwkJY3B1X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihjcHVfZGlyLCBjcHVfZGVidWdmc19kaXIpOworCQllcnIgPSBjcHVfaW5pdF9hbGxyZWcoY3B1LCBjcHVfZGVudHJ5KTsKKworCQlwcl9pbmZvKCJjcHUlZCglZCkgZGVidWcgZmlsZXMgJWRcbiIsCisJCQljcHUsIG5yX2NwdV9pZHMsIHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkpOworCQlpZiAocGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSA+IE1BWF9DUFVfRklMRVMpIHsKKwkJCXByX2VycigiUmVnaXN0ZXIgZmlsZXMgY291bnQgJWQgZXhjZWVkcyBsaW1pdCAlZFxuIiwKKwkJCQlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpLCBNQVhfQ1BVX0ZJTEVTKTsKKwkJCXBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkgPSBNQVhfQ1BVX0ZJTEVTOworCQkJZXJyID0gLUVORklMRTsKKwkJfQorCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjcHVfZGVidWdfaW5pdCh2b2lkKQoreworCWNwdV9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY3B1IiwgYXJjaF9kZWJ1Z2ZzX2Rpcik7CisKKwlyZXR1cm4gY3B1X2luaXRfY3B1KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcHVfZGVidWdfZXhpdCh2b2lkKQoreworCWludCBpLCBjcHU7CisKKwlpZiAoY3B1X2RlYnVnZnNfZGlyKQorCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY3B1X2RlYnVnZnNfZGlyKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgIG5yX2NwdV9pZHM7IGNwdSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KTsgaSsrKQorCQkJa2ZyZWUocGVyX2NwdShwcml2X2FycltpXSwgY3B1KSk7Cit9CisKK21vZHVsZV9pbml0KGNwdV9kZWJ1Z19pbml0KTsKK21vZHVsZV9leGl0KGNwdV9kZWJ1Z19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoIFJhanB1dCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFUgRGVidWcgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKaW5kZXggZmZkMGY1ZS4uNTkzMTcxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwpAQCAtNjEsMjMgKzYxLDIzIEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIEN4ODZfZGlyMF9tc2IgX19jcHVpbml0ZGF0YSA9IDA7CiAKLXN0YXRpYyBjaGFyIEN4ODZfbW9kZWxbXVs5XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g4Nl9tb2RlbFtdWzldID0gewogCSJDeDQ4NiIsICJDeDQ4NiIsICI1eDg2ICIsICI2eDg2IiwgIk1lZGlhR1ggIiwgIjZ4ODZNWCAiLAogCSJNIElJICIsICJVbmtub3duIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2X25hbWVbXVs1XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g0ODZfbmFtZVtdWzVdID0gewogCSJTTEMiLCAiRExDIiwgIlNMQzIiLCAiRExDMiIsICJTUngiLCAiRFJ4IiwKIAkiU1J4MiIsICJEUngyIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2U19uYW1lW11bNF0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4NDg2U19uYW1lW11bNF0gPSB7CiAJIlMiLCAiUzIiLCAiU2UiLCAiUzJlIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2RF9uYW1lW11bNF0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4NDg2RF9uYW1lW11bNF0gPSB7CiAJIkRYIiwgIkRYMiIsICI/IiwgIj8iLCAiPyIsICJEWDQiCiB9Owogc3RhdGljIGNoYXIgQ3g4Nl9jYltdIF9fY3B1aW5pdGRhdGEgPSAiPy41eCBDb3JlL0J1cyBDbG9jayI7Ci1zdGF0aWMgY2hhciBjeXJpeF9tb2RlbF9tdWx0MVtdIF9fY3B1aW5pdGRhdGEgPSAiMTI/PzQzIjsKLXN0YXRpYyBjaGFyIGN5cml4X21vZGVsX211bHQyW10gX19jcHVpbml0ZGF0YSA9ICIxMjIzMzQ0NSI7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBjeXJpeF9tb2RlbF9tdWx0MVtdID0gIjEyPz80MyI7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBjeXJpeF9tb2RlbF9tdWx0MltdID0gIjEyMjMzNDQ1IjsKIAogLyoKICAqIFJlc2V0IHRoZSBzbG93LWxvb3AgKFNMT1ApIGJpdCBvbiB0aGUgNjg2KEwpIHdoaWNoIGlzIHNldCBieSBzb21lIG9sZApAQCAtNDM1LDcgKzQzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgY3lyaXhfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGN5cml4X2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkN5cml4IiwKIAkuY19pZGVudAk9IHsgIkN5cml4SW5zdGVhZCIgfSwKIAkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF9jeXJpeCwKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiBjcHVfZGV2X3JlZ2lzdGVyKGN5cml4X2NwdV9kZXYpOwogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgbnNjX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBuc2NfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiTlNDIiwKIAkuY19pZGVudAk9IHsgIkdlb2RlIGJ5IE5TQyIgfSwKIAkuY19pbml0CQk9IGluaXRfbnNjLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDFhODlhMmIuLjc0MzdmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kcy5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgpAQCAtNTQsNiArNTUsMTEgQEAKIAkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IDEyODsKICNlbmRpZgogCisJLyogQ1BVSUQgd29ya2Fyb3VuZCBmb3IgMEYzMy8wRjM0IENQVSAqLworCWlmIChjLT54ODYgPT0gMHhGICYmIGMtPng4Nl9tb2RlbCA9PSAweDMKKwkgICAgJiYgKGMtPng4Nl9tYXNrID09IDB4MyB8fCBjLT54ODZfbWFzayA9PSAweDQpKQorCQljLT54ODZfcGh5c19iaXRzID0gMzY7CisKIAkvKgogCSAqIGMtPng4Nl9wb3dlciBpcyA4MDAwXzAwMDcgZWR4LiBCaXQgOCBpcyBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlCiAJICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuCkBAIC0xMTYsNiArMTIyLDI4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgX19jcHVpbml0IGludGVsX3NtcF9jaGVjayhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIGNhbGxpbmcgaXMgZnJvbSBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgPyAqLworCWlmIChjLT5jcHVfaW5kZXggPT0gYm9vdF9jcHVfaWQpCisJCXJldHVybjsKKworCS8qCisJICogTWFzayBCLCBQZW50aXVtLCBidXQgbm90IFBlbnRpdW0gTU1YCisJICovCisJaWYgKGMtPng4NiA9PSA1ICYmCisJICAgIGMtPng4Nl9tYXNrID49IDEgJiYgYy0+eDg2X21hc2sgPD0gNCAmJgorCSAgICBjLT54ODZfbW9kZWwgPD0gMykgeworCQkvKgorCQkgKiBSZW1lbWJlciB3ZSBoYXZlIEIgc3RlcCBQZW50aWEgd2l0aCBidWdzCisJCSAqLworCQlXQVJOX09OQ0UoMSwgIldBUk5JTkc6IFNNUCBvcGVyYXRpb24gbWF5IGJlIHVucmVsaWFibGUiCisJCQkJICAgICJ3aXRoIEIgc3RlcHBpbmcgcHJvY2Vzc29ycy5cbiIpOworCX0KKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW50ZWxfd29ya2Fyb3VuZHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGxvbmcgbG8sIGhpOwpAQCAtMTkyLDYgKzIyMCw4IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQogCW51bWFxX3RzY19kaXNhYmxlKCk7CiAjZW5kaWYKKworCWludGVsX3NtcF9jaGVjayhjKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW50ZWxfd29ya2Fyb3VuZHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtMzkxLDcgKzQyMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGludGVsX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBpbnRlbF9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJJbnRlbCIsCiAJLmNfaWRlbnQJPSB7ICJHZW51aW5lSW50ZWwiIH0sCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggNzI5MzUwOC4uYzQ3MWViMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0zMiw3ICszMiw3IEBACiB9OwogCiAvKiBhbGwgdGhlIGNhY2hlIGRlc2NyaXB0b3IgdHlwZXMgd2UgY2FyZSBhYm91dCAobm8gVExCIG9yIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCi1zdGF0aWMgc3RydWN0IF9jYWNoZV90YWJsZSBjYWNoZV90YWJsZVtdIF9fY3B1aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBfY2FjaGVfdGFibGUgX19jcHVpbml0Y29uc3QgY2FjaGVfdGFibGVbXSA9CiB7CiAJeyAweDA2LCBMVkxfMV9JTlNULCA4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MDgsIExWTF8xX0lOU1QsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTIwNiwxNSArMjA2LDE1IEBACiAJdW5zaWduZWQgdmFsOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGFzc29jc1tdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgX19jcHVpbml0Y29uc3QgYXNzb2NzW10gPSB7CiAJWzFdID0gMSwgWzJdID0gMiwgWzRdID0gNCwgWzZdID0gOCwKIAlbOF0gPSAxNiwgWzB4YV0gPSAzMiwgWzB4Yl0gPSA0OCwKIAlbMHhjXSA9IDY0LAogCVsweGZdID0gMHhmZmZmIC8vID8/CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBsZXZlbHNbXSBfX2NwdWluaXRkYXRhID0geyAxLCAxLCAyLCAzIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciB0eXBlc1tdIF9fY3B1aW5pdGRhdGEgPSB7IDEsIDIsIDMsIDMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9fY3B1aW5pdGNvbnN0IGxldmVsc1tdID0geyAxLCAxLCAyLCAzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2NwdWluaXRjb25zdCB0eXBlc1tdID0geyAxLCAyLCAzLCAzIH07CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdAogYW1kX2NwdWlkNChpbnQgbGVhZiwgdW5pb24gX2NwdWlkNF9sZWFmX2VheCAqZWF4LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQppbmRleCBkN2QyMzIzLi5iMmY4OTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAKIG9iai0kKENPTkZJR19YODZfTUNFX0lOVEVMKQkrPSBtY2VfaW50ZWxfNjQubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfQU1EKQkrPSBtY2VfYW1kXzY0Lm8KIG9iai0kKENPTkZJR19YODZfTUNFX05PTkZBVEFMKQkrPSBub24tZmF0YWwubworb2JqLSQoQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEKSArPSB0aHJlc2hvbGQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwppbmRleCBkZmFlYmNlLi4zNTUyMTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwpAQCAtNjAsMjAgKzYwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9sZF9jcjQgX19pbml0ZGF0YTsKLQotdm9pZCBfX2luaXQgc3RvcF9tY2Uodm9pZCkKLXsKLQlvbGRfY3I0ID0gcmVhZF9jcjQoKTsKLQljbGVhcl9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCi12b2lkIF9faW5pdCByZXN0YXJ0X21jZSh2b2lkKQotewotCWlmIChvbGRfY3I0ICYgWDg2X0NSNF9NQ0UpCi0JCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBtY2hlY2tfZGlzYWJsZShjaGFyICpzdHIpCiB7CiAJbWNlX2Rpc2FibGVkID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKaW5kZXggZmU3OTk4NS4uY2ExNDYwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKQEAgLTMsNiArMyw4IEBACiAgKiBLOCBwYXJ0cyBDb3B5cmlnaHQgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqIFJlc3QgZnJvbSB1bmtub3duIGF1dGhvcihzKS4KICAqIDIwMDQgQW5kaSBLbGVlbi4gUmV3cm90ZSBtb3N0IG9mIGl0LgorICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQW5kaSBLbGVlbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNCw2ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CkBAIC0zMiw3ICszNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KIAogI2RlZmluZSBNSVNDX01DRUxPR19NSU5PUiAyMjcKLSNkZWZpbmUgTlJfU1lTRlNfQkFOS1MgNgogCiBhdG9taWNfdCBtY2VfZW50cnk7CiAKQEAgLTQ3LDcgKzUxLDcgQEAKICAqLwogc3RhdGljIGludCB0b2xlcmFudCA9IDE7CiBzdGF0aWMgaW50IGJhbmtzOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFua1tOUl9TWVNGU19CQU5LU10gPSB7IFswIC4uLiBOUl9TWVNGU19CQU5LUy0xXSA9IH4wVUwgfTsKK3N0YXRpYyB1NjQgKmJhbms7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBub3RpZnlfdXNlcjsKIHN0YXRpYyBpbnQgcmlwX21zcjsKIHN0YXRpYyBpbnQgbWNlX2Jvb3Rsb2cgPSAtMTsKQEAgLTU4LDYgKzYyLDE5IEBACiAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtY2Vfd2FpdCk7CiAKKy8qIE1DQSBiYW5rcyBwb2xsZWQgYnkgdGhlIHBlcmlvZCBwb2xsaW5nIHRpbWVyIGZvciBjb3JyZWN0ZWQgZXZlbnRzICovCitERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpID0geworCVswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OUl9CQU5LUyktMV0gPSB+MFVMCit9OworCisvKiBEbyBpbml0aWFsIGluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0IG1jZSAqLwordm9pZCBtY2Vfc2V0dXAoc3RydWN0IG1jZSAqbSkKK3sKKwltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKKwltLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcmR0c2NsbChtLT50c2MpOworfQorCiAvKgogICogTG9ja2xlc3MgTUNFIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuCiAgKiBUaGlzIGF2b2lkcyBkZWFkbG9ja3Mgb24gcHJpbnRrIGxvY2tzIHdpdGhvdXQgaGF2aW5nIHRvIGJyZWFrIGxvY2tzLiBBbHNvCkBAIC0xMTksMTEgKzEzNiwxMSBAQAogCQkJcHJpbnRfc3ltYm9sKCJ7JXN9IiwgbS0+aXApOwogCQlwcmludGsoIlxuIik7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJUU0MgJUx4ICIsIG0tPnRzYyk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlRTQyAlbGx4ICIsIG0tPnRzYyk7CiAJaWYgKG0tPmFkZHIpCi0JCXByaW50aygiQUREUiAlTHggIiwgbS0+YWRkcik7CisJCXByaW50aygiQUREUiAlbGx4ICIsIG0tPmFkZHIpOwogCWlmIChtLT5taXNjKQotCQlwcmludGsoIk1JU0MgJUx4ICIsIG0tPm1pc2MpOworCQlwcmludGsoIk1JU0MgJWxseCAiLCBtLT5taXNjKTsKIAlwcmludGsoIlxuIik7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgaXMgbm90IGEgc29mdHdhcmUgcHJvYmxlbSFcbiIpOwogCXByaW50ayhLRVJOX0VNRVJHICJSdW4gdGhyb3VnaCBtY2Vsb2cgLS1hc2NpaSB0byBkZWNvZGUgIgpAQCAtMTQ5LDggKzE2NiwxMCBAQAogCXBhbmljKG1zZyk7CiB9CiAKLXN0YXRpYyBpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CisJaWYgKG1jZV9kb250X2luaXQpCisJCXJldHVybiAwOwogCXJldHVybiBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01DRSkgJiYgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0EpOwogfQogCkBAIC0xNzIsNyArMTkxLDc3IEBACiB9CiAKIC8qCi0gKiBUaGUgYWN0dWFsIG1hY2hpbmUgY2hlY2sgaGFuZGxlcgorICogUG9sbCBmb3IgY29ycmVjdGVkIGV2ZW50cyBvciBldmVudHMgdGhhdCBoYXBwZW5lZCBiZWZvcmUgcmVzZXQuCisgKiBUaG9zZSBhcmUganVzdCBsb2dnZWQgdGhyb3VnaCAvZGV2L21jZWxvZy4KKyAqCisgKiBUaGlzIGlzIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIG1hY2hpbmVfY2hlY2tfcG9sbChlbnVtIG1jcF9mbGFncyBmbGFncywgbWNlX2JhbmtzX3QgKmIpCit7CisJc3RydWN0IG1jZSBtOworCWludCBpOworCisJbWNlX3NldHVwKCZtKTsKKworCXJkbXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtLm1jZ3N0YXR1cyk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJaWYgKCFiYW5rW2ldIHx8ICF0ZXN0X2JpdChpLCAqYikpCisJCQljb250aW51ZTsKKworCQltLm1pc2MgPSAwOworCQltLmFkZHIgPSAwOworCQltLmJhbmsgPSBpOworCQltLnRzYyA9IDA7CisKKwkJYmFycmllcigpOworCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGkqNCwgbS5zdGF0dXMpOworCQlpZiAoIShtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVkFMKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFVuY29ycmVjdGVkIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgZXhjZXB0aW9uIGhhbmRsZXIKKwkJICogd2hlbiBpdCBpcyBlbmFibGVkLiBCdXQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzIGRpc2FibGVkIGxvZworCQkgKiBldmVyeXRoaW5nLgorCQkgKgorCQkgKiBUQkQgZG8gdGhlIHNhbWUgY2hlY2sgZm9yIE1DSV9TVEFUVVNfRU4gaGVyZT8KKwkJICovCisJCWlmICgobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSAmJiAhKGZsYWdzICYgTUNQX1VDKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfTUlTQ1YpCisJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX01JU0MgKyBpKjQsIG0ubWlzYyk7CisJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfQUREUlYpCisJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0FERFIgKyBpKjQsIG0uYWRkcik7CisKKwkJaWYgKCEoZmxhZ3MgJiBNQ1BfVElNRVNUQU1QKSkKKwkJCW0udHNjID0gMDsKKwkJLyoKKwkJICogRG9uJ3QgZ2V0IHRoZSBJUCBoZXJlIGJlY2F1c2UgaXQncyB1bmxpa2VseSB0bworCQkgKiBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGFjdHVhbCBlcnJvciBsb2NhdGlvbi4KKwkJICovCisKKwkJbWNlX2xvZygmbSk7CisJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKKworCQkvKgorCQkgKiBDbGVhciBzdGF0ZSBmb3IgdGhpcyBiYW5rLgorCQkgKi8KKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKKwl9CisKKwkvKgorCSAqIERvbid0IGNsZWFyIE1DR19TVEFUVVMgaGVyZSBiZWNhdXNlIGl0J3Mgb25seSBkZWZpbmVkIGZvcgorCSAqIGV4Y2VwdGlvbnMuCisJICovCit9CisKKy8qCisgKiBUaGUgYWN0dWFsIG1hY2hpbmUgY2hlY2sgaGFuZGxlci4gVGhpcyBvbmx5IGhhbmRsZXMgcmVhbAorICogZXhjZXB0aW9ucyB3aGVuIHNvbWV0aGluZyBnb3QgY29ycnVwdGVkIGNvbWluZyBpbiB0aHJvdWdoIGludCAxOC4KKyAqCisgKiBUaGlzIGlzIGV4ZWN1dGVkIGluIE5NSSBjb250ZXh0IG5vdCBzdWJqZWN0IHRvIG5vcm1hbCBsb2NraW5nIHJ1bGVzLiBUaGlzCisgKiBpbXBsaWVzIHRoYXQgbW9zdCBrZXJuZWwgc2VydmljZXMgY2Fubm90IGJlIHNhZmVseSB1c2VkLiBEb24ndCBldmVuCisgKiB0aGluayBhYm91dCBwdXR0aW5nIGEgcHJpbnRrIGluIHRoZXJlIQogICovCiB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC0xOTAsMTcgKzI3OSwxOCBAQAogCSAqIGVycm9yLgogCSAqLwogCWludCBraWxsX2l0ID0gMDsKKwlERUNMQVJFX0JJVE1BUCh0b2NsZWFyLCBNQVhfTlJfQkFOS1MpOwogCiAJYXRvbWljX2luYygmbWNlX2VudHJ5KTsKIAotCWlmICgocmVncwotCSAgICAgJiYgbm90aWZ5X2RpZShESUVfTk1JLCAibWFjaGluZSBjaGVjayIsIHJlZ3MsIGVycm9yX2NvZGUsCisJaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLAogCQkJICAgMTgsIFNJR0tJTEwpID09IE5PVElGWV9TVE9QKQotCSAgICB8fCAhYmFua3MpCisJCWdvdG8gb3V0MjsKKwlpZiAoIWJhbmtzKQogCQlnb3RvIG91dDI7CiAKLQltZW1zZXQoJm0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7Ci0JbS5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbWNlX3NldHVwKCZtKTsKKwogCXJkbXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtLm1jZ3N0YXR1cyk7CiAJLyogaWYgdGhlIHJlc3RhcnQgSVAgaXMgbm90IHZhbGlkLCB3ZSdyZSBkb25lIGZvciAqLwogCWlmICghKG0ubWNnc3RhdHVzICYgTUNHX1NUQVRVU19SSVBWKSkKQEAgLTIxMCwxOCArMzAwLDMyIEBACiAJYmFycmllcigpOwogCiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKLQkJaWYgKGkgPCBOUl9TWVNGU19CQU5LUyAmJiAhYmFua1tpXSkKKwkJX19jbGVhcl9iaXQoaSwgdG9jbGVhcik7CisJCWlmICghYmFua1tpXSkKIAkJCWNvbnRpbnVlOwogCiAJCW0ubWlzYyA9IDA7CiAJCW0uYWRkciA9IDA7CiAJCW0uYmFuayA9IGk7Ci0JCW0udHNjID0gMDsKIAogCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGkqNCwgbS5zdGF0dXMpOwogCQlpZiAoKG0uc3RhdHVzICYgTUNJX1NUQVRVU19WQUwpID09IDApCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBOb24gdW5jb3JyZWN0ZWQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IG1hY2hpbmVfY2hlY2tfcG9sbAorCQkgKiBMZWF2ZSB0aGVtIGFsb25lLgorCQkgKi8KKwkJaWYgKChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVUMpID09IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTZXQgdGFpbnQgZXZlbiB3aGVuIG1hY2hpbmUgY2hlY2sgd2FzIG5vdCBlbmFibGVkLgorCQkgKi8KKwkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOworCisJCV9fc2V0X2JpdChpLCB0b2NsZWFyKTsKKwogCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX0VOKSB7CiAJCQkvKiBpZiBQQ0Mgd2FzIHNldCwgdGhlcmUncyBubyB3YXkgb3V0ICovCiAJCQlub193YXlfb3V0IHw9ICEhKG0uc3RhdHVzICYgTUNJX1NUQVRVU19QQ0MpOwpAQCAtMjM1LDYgKzMzOSwxMiBAQAogCQkJCQlub193YXlfb3V0ID0gMTsKIAkJCQlraWxsX2l0ID0gMTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBNYWNoaW5lIGNoZWNrIGV2ZW50IHdhcyBub3QgZW5hYmxlZC4gQ2xlYXIsIGJ1dAorCQkJICogaWdub3JlLgorCQkJICovCisJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfTUlTQ1YpCkBAIC0yNDMsMTAgKzM1Myw3IEBACiAJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0FERFIgKyBpKjQsIG0uYWRkcik7CiAKIAkJbWNlX2dldF9yaXAoJm0sIHJlZ3MpOwotCQlpZiAoZXJyb3JfY29kZSA+PSAwKQotCQkJcmR0c2NsbChtLnRzYyk7Ci0JCWlmIChlcnJvcl9jb2RlICE9IC0yKQotCQkJbWNlX2xvZygmbSk7CisJCW1jZV9sb2coJm0pOwogCiAJCS8qIERpZCB0aGlzIGJhbmsgY2F1c2UgdGhlIGV4Y2VwdGlvbj8gKi8KIAkJLyogQXNzdW1lIHRoYXQgdGhlIGJhbmsgd2l0aCB1bmNvcnJlY3RhYmxlIGVycm9ycyBkaWQgaXQsCkBAIC0yNTUsMTQgKzM2Miw4IEBACiAJCQlwYW5pY20gPSBtOwogCQkJcGFuaWNtX2ZvdW5kID0gMTsKIAkJfQotCi0JCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIAl9CiAKLQkvKiBOZXZlciBkbyBhbnl0aGluZyBmaW5hbCBpbiB0aGUgcG9sbGluZyB0aW1lciAqLwotCWlmICghcmVncykKLQkJZ290byBvdXQ7Ci0KIAkvKiBJZiB3ZSBkaWRuJ3QgZmluZCBhbiB1bmNvcnJlY3RhYmxlIGVycm9yLCBwaWNrCiAJICAgdGhlIGxhc3Qgb25lIChzaG91bGRuJ3QgaGFwcGVuLCBqdXN0IGJlaW5nIHNhZmUpLiAqLwogCWlmICghcGFuaWNtX2ZvdW5kKQpAQCAtMzA5LDEwICs0MTAsMTEgQEAKIAkvKiBub3RpZnkgdXNlcnNwYWNlIEFTQVAgKi8KIAlzZXRfdGhyZWFkX2ZsYWcoVElGX01DRV9OT1RJRlkpOwogCi0gb3V0OgogCS8qIHRoZSBsYXN0IHRoaW5nIHdlIGRvIGlzIGNsZWFyIHN0YXRlICovCi0JZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCi0JCXdybXNybChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIHRvY2xlYXIpKQorCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKKwl9CiAJd3Jtc3JsKE1TUl9JQTMyX01DR19TVEFUVVMsIDApOwogIG91dDI6CiAJYXRvbWljX2RlYygmbWNlX2VudHJ5KTsKQEAgLTMzMiwxNSArNDM0LDEzIEBACiAgKiBhbmQgaGlzdG9yaWNhbGx5IGhhcyBiZWVuIHRoZSByZWdpc3RlciB2YWx1ZSBvZiB0aGUKICAqIE1TUl9JQTMyX1RIRVJNQUxfU1RBVFVTIChJbnRlbCkgbXNyLgogICovCi12b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQodW5zaWduZWQgaW50IGNwdSwgX191NjQgc3RhdHVzKQordm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KF9fdTY0IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbWNlIG07CiAKLQltZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7Ci0JbS5jcHUgPSBjcHU7CisJbWNlX3NldHVwKCZtKTsKIAltLmJhbmsgPSBNQ0VfVEhFUk1BTF9CQU5LOwogCW0uc3RhdHVzID0gc3RhdHVzOwotCXJkdHNjbGwobS50c2MpOwogCW1jZV9sb2coJm0pOwogfQogI2VuZGlmIC8qIENPTkZJR19YODZfTUNFX0lOVEVMICovCkBAIC0zNTMsMTggKzQ1MywxOCBAQAogCiBzdGF0aWMgaW50IGNoZWNrX2ludGVydmFsID0gNSAqIDYwOyAvKiA1IG1pbnV0ZXMgKi8KIHN0YXRpYyBpbnQgbmV4dF9pbnRlcnZhbDsgLyogaW4gamlmZmllcyAqLwotc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksobWNoZWNrX3dvcmssIG1jaGVja190aW1lcik7CitzdGF0aWMgdm9pZCBtY2hlY2tfdGltZXIodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRpbWVyX2xpc3QsIG1jZV90aW1lcik7CiAKLXN0YXRpYyB2b2lkIG1jaGVja19jaGVja19jcHUodm9pZCAqaW5mbykKK3N0YXRpYyB2b2lkIG1jaGVja190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CisJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmcGVyX2NwdShtY2VfdGltZXIsIGRhdGEpOworCisJV0FSTl9PTihzbXBfcHJvY2Vzc29yX2lkKCkgIT0gZGF0YSk7CisKIAlpZiAobWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCi0JCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1jaGVja190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jb25fZWFjaF9jcHUobWNoZWNrX2NoZWNrX2NwdSwgTlVMTCwgMSk7CisJCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLAorCQkJCSZfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CiAKIAkvKgogCSAqIEFsZXJ0IHVzZXJzcGFjZSBpZiBuZWVkZWQuICBJZiB3ZSBsb2dnZWQgYW4gTUNFLCByZWR1Y2UgdGhlCkBAIC0zNzcsMzEgKzQ3Nyw0MSBAQAogCQkJCShpbnQpcm91bmRfamlmZmllc19yZWxhdGl2ZShjaGVja19pbnRlcnZhbCpIWikpOwogCX0KIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmssIG5leHRfaW50ZXJ2YWwpOworCXQtPmV4cGlyZXMgPSBqaWZmaWVzICsgbmV4dF9pbnRlcnZhbDsKKwlhZGRfdGltZXIodCk7CiB9CiAKK3N0YXRpYyB2b2lkIG1jZV9kb190cmlnZ2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwljYWxsX3VzZXJtb2RlaGVscGVyKHRyaWdnZXIsIHRyaWdnZXJfYXJndiwgTlVMTCwgVU1IX05PX1dBSVQpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKG1jZV90cmlnZ2VyX3dvcmssIG1jZV9kb190cmlnZ2VyKTsKKwogLyoKLSAqIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICBUaGlzIGlzIHdoZXJlIHdlIGRvCi0gKiBhbnl0aGluZyB3ZSBuZWVkIHRvIGFsZXJ0IHVzZXJzcGFjZSBhYm91dCBuZXcgTUNFcy4gIFRoaXMgaXMgY2FsbGVkCi0gKiBkaXJlY3RseSBmcm9tIHRoZSBwb2xsZXIgYW5kIGFsc28gZnJvbSBlbnRyeS5TIGFuZCBpZGxlLCB0aGFua3MgdG8KLSAqIFRJRl9NQ0VfTk9USUZZLgorICogTm90aWZ5IHRoZSB1c2VyKHMpIGFib3V0IG5ldyBtYWNoaW5lIGNoZWNrIGV2ZW50cy4KKyAqIENhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCwgYnV0IG5vdCBmcm9tIG1hY2hpbmUgY2hlY2svTk1JCisgKiBjb250ZXh0LgogICovCiBpbnQgbWNlX25vdGlmeV91c2VyKHZvaWQpCiB7CisJLyogTm90IG1vcmUgdGhhbiB0d28gbWVzc2FnZXMgZXZlcnkgbWludXRlICovCisJc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUocmF0ZWxpbWl0LCA2MCpIWiwgMik7CisKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfTUNFX05PVElGWSk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmbm90aWZ5X3VzZXIpKSB7Ci0JCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcHJpbnQ7Ci0JCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1jZV93YWl0KTsKLQkJaWYgKHRyaWdnZXJbMF0pCi0JCQljYWxsX3VzZXJtb2RlaGVscGVyKHRyaWdnZXIsIHRyaWdnZXJfYXJndiwgTlVMTCwKLQkJCQkJCVVNSF9OT19XQUlUKTsKIAotCQlpZiAodGltZV9hZnRlcl9lcShub3csIGxhc3RfcHJpbnQgKyAoY2hlY2tfaW50ZXJ2YWwqSFopKSkgewotCQkJbGFzdF9wcmludCA9IG5vdzsKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gcmlzayBvZiBtaXNzaW5nIG5vdGlmaWNhdGlvbnMgYmVjYXVzZQorCQkgKiB3b3JrX3BlbmRpbmcgaXMgYWx3YXlzIGNsZWFyZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcworCQkgKiBleGVjdXRlZC4KKwkJICovCisJCWlmICh0cmlnZ2VyWzBdICYmICF3b3JrX3BlbmRpbmcoJm1jZV90cmlnZ2VyX3dvcmspKQorCQkJc2NoZWR1bGVfd29yaygmbWNlX3RyaWdnZXJfd29yayk7CisKKwkJaWYgKF9fcmF0ZWxpbWl0KCZyYXRlbGltaXQpKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFjaGluZSBjaGVjayBldmVudHMgbG9nZ2VkXG4iKTsKLQkJfQogCiAJCXJldHVybiAxOwogCX0KQEAgLTQyNSw2MyArNTM1LDc4IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IHBlcmlvZGljX21jaGVja19pbml0KHZvaWQpCiB7Ci0JbmV4dF9pbnRlcnZhbCA9IGNoZWNrX2ludGVydmFsICogSFo7Ci0JaWYgKG5leHRfaW50ZXJ2YWwpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmssCi0JCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShuZXh0X2ludGVydmFsKSk7Ci0JaWRsZV9ub3RpZmllcl9yZWdpc3RlcigmbWNlX2lkbGVfbm90aWZpZXIpOwotCXJldHVybiAwOworICAgICAgIGlkbGVfbm90aWZpZXJfcmVnaXN0ZXIoJm1jZV9pZGxlX25vdGlmaWVyKTsKKyAgICAgICByZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwocGVyaW9kaWNfbWNoZWNrX2luaXQpOwogCi0KIC8qCiAgKiBJbml0aWFsaXplIE1hY2hpbmUgQ2hlY2tzIGZvciBhIENQVS4KICAqLwotc3RhdGljIHZvaWQgbWNlX2luaXQodm9pZCAqZHVtbXkpCitzdGF0aWMgaW50IG1jZV9jYXBfaW5pdCh2b2lkKQogewogCXU2NCBjYXA7Ci0JaW50IGk7CisJdW5zaWduZWQgYjsKIAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwotCWJhbmtzID0gY2FwICYgMHhmZjsKLQlpZiAoYmFua3MgPiBNQ0VfRVhURU5ERURfQkFOSykgewotCQliYW5rcyA9IE1DRV9FWFRFTkRFRF9CQU5LOwotCQlwcmludGsoS0VSTl9JTkZPICJNQ0U6IHdhcm5pbmc6IHVzaW5nIG9ubHkgJWQgYmFua3NcbiIsCi0JCSAgICAgICBNQ0VfRVhURU5ERURfQkFOSyk7CisJYiA9IGNhcCAmIDB4ZmY7CisJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1DRTogVXNpbmcgb25seSAldSBtYWNoaW5lIGNoZWNrIGJhbmtzIG91dCBvZiAldVxuIiwKKwkJCU1BWF9OUl9CQU5LUywgYik7CisJCWIgPSBNQVhfTlJfQkFOS1M7CiAJfQorCisJLyogRG9uJ3Qgc3VwcG9ydCBhc3ltbWV0cmljIGNvbmZpZ3VyYXRpb25zIHRvZGF5ICovCisJV0FSTl9PTihiYW5rcyAhPSAwICYmIGIgIT0gYmFua3MpOworCWJhbmtzID0gYjsKKwlpZiAoIWJhbmspIHsKKwkJYmFuayA9IGttYWxsb2MoYmFua3MgKiBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmFuaykKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1zZXQoYmFuaywgMHhmZiwgYmFua3MgKiBzaXplb2YodTY0KSk7CisJfQorCiAJLyogVXNlIGFjY3VyYXRlIFJJUCByZXBvcnRpbmcgaWYgYXZhaWxhYmxlLiAqLwogCWlmICgoY2FwICYgKDE8PDkpKSAmJiAoKGNhcCA+PiAxNikgJiAweGZmKSA+PSA5KQogCQlyaXBfbXNyID0gTVNSX0lBMzJfTUNHX0VJUDsKIAotCS8qIExvZyB0aGUgbWFjaGluZSBjaGVja3MgbGVmdCBvdmVyIGZyb20gdGhlIHByZXZpb3VzIHJlc2V0LgotCSAgIFRoaXMgYWxzbyBjbGVhcnMgYWxsIHJlZ2lzdGVycyAqLwotCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgbWNlX2Jvb3Rsb2cgPyAtMSA6IC0yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWNlX2luaXQodm9pZCAqZHVtbXkpCit7CisJdTY0IGNhcDsKKwlpbnQgaTsKKwltY2VfYmFua3NfdCBhbGxfYmFua3M7CisKKwkvKgorCSAqIExvZyB0aGUgbWFjaGluZSBjaGVja3MgbGVmdCBvdmVyIGZyb20gdGhlIHByZXZpb3VzIHJlc2V0LgorCSAqLworCWJpdG1hcF9maWxsKGFsbF9iYW5rcywgTUFYX05SX0JBTktTKTsKKwltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1VDLCAmYWxsX2JhbmtzKTsKIAogCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwogCisJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7CiAJaWYgKGNhcCAmIE1DR19DVExfUCkKIAkJd3Jtc3IoTVNSX0lBMzJfTUNHX0NUTCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewotCQlpZiAoaSA8IE5SX1NZU0ZTX0JBTktTKQotCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwrNCppLCBiYW5rW2ldKTsKLQkJZWxzZQotCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwrNCppLCB+MFVMKTsKLQorCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCs0KmksIGJhbmtbaV0pOwogCQl3cm1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDApOwogCX0KIH0KIAogLyogQWRkIHBlciBDUFUgc3BlY2lmaWMgd29ya2Fyb3VuZHMgaGVyZSAqLwotc3RhdGljIHZvaWQgX19jcHVpbml0IG1jZV9jcHVfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyB2b2lkIG1jZV9jcHVfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAkvKiBUaGlzIHNob3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgQklPUywgYnV0IGlzbid0IGFsd2F5cyAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSB7Ci0JCWlmKGMtPng4NiA9PSAxNSkKKwkJaWYgKGMtPng4NiA9PSAxNSAmJiBiYW5rcyA+IDQpCiAJCQkvKiBkaXNhYmxlIEdBUlQgVEJMIHdhbGsgZXJyb3IgcmVwb3J0aW5nLCB3aGljaCB0cmlwcyBvZmYKIAkJCSAgIGluY29ycmVjdGx5IHdpdGggdGhlIElPTU1VICYgM3dhcmUgJiBDZXJiZXJ1cy4gKi8KLQkJCWNsZWFyX2JpdCgxMCwgJmJhbmtbNF0pOworCQkJY2xlYXJfYml0KDEwLCAodW5zaWduZWQgbG9uZyAqKSZiYW5rWzRdKTsKIAkJaWYoYy0+eDg2IDw9IDE3ICYmIG1jZV9ib290bG9nIDwgMCkKIAkJCS8qIExvdHMgb2YgYnJva2VuIEJJT1MgYXJvdW5kIHRoYXQgZG9uJ3QgY2xlYXIgdGhlbQogCQkJICAgYnkgZGVmYXVsdCBhbmQgbGVhdmUgY3JhcCBpbiB0aGVyZS4gRG9uJ3QgbG9nLiAqLwpAQCAtNTA0LDIwICs2MjksMzggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1jZV9pbml0X3RpbWVyKHZvaWQpCit7CisJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpOworCisJLyogZGF0YSByYWNlIGhhcm1sZXNzIGJlY2F1c2UgZXZlcnlvbmUgc2V0cyB0byB0aGUgc2FtZSB2YWx1ZSAqLworCWlmICghbmV4dF9pbnRlcnZhbCkKKwkJbmV4dF9pbnRlcnZhbCA9IGNoZWNrX2ludGVydmFsICogSFo7CisJaWYgKCFuZXh0X2ludGVydmFsKQorCQlyZXR1cm47CisJc2V0dXBfdGltZXIodCwgbWNoZWNrX3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXQtPmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBuZXh0X2ludGVydmFsKTsKKwlhZGRfdGltZXIodCk7Cit9CisKIC8qCiAgKiBDYWxsZWQgZm9yIGVhY2ggYm9vdGVkIENQVSB0byBzZXQgdXAgbWFjaGluZSBjaGVja3MuCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgb2ZmLgogICovCiB2b2lkIF9fY3B1aW5pdCBtY2hlY2tfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JbWNlX2NwdV9xdWlya3MoYyk7Ci0KLQlpZiAobWNlX2RvbnRfaW5pdCB8fAotCSAgICAhbWNlX2F2YWlsYWJsZShjKSkKKwlpZiAoIW1jZV9hdmFpbGFibGUoYykpCiAJCXJldHVybjsKIAorCWlmIChtY2VfY2FwX2luaXQoKSA8IDApIHsKKwkJbWNlX2RvbnRfaW5pdCA9IDE7CisJCXJldHVybjsKKwl9CisJbWNlX2NwdV9xdWlya3MoYyk7CisKIAltY2VfaW5pdChOVUxMKTsKIAltY2VfY3B1X2ZlYXR1cmVzKGMpOworCW1jZV9pbml0X3RpbWVyKCk7CiB9CiAKIC8qCkBAIC01NzMsNyArNzE2LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpjcHVfdHNjOwogCXN0YXRpYyBERUZJTkVfTVVURVgobWNlX3JlYWRfbXV0ZXgpOwotCXVuc2lnbmVkIG5leHQ7CisJdW5zaWduZWQgcHJldiwgbmV4dDsKIAljaGFyIF9fdXNlciAqYnVmID0gdWJ1ZjsKIAlpbnQgaSwgZXJyOwogCkBAIC01OTIsMjUgKzczNSwzMiBAQAogCX0KIAogCWVyciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5leHQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKwlwcmV2ID0gMDsKKwlkbyB7CisJCWZvciAoaSA9IHByZXY7IGkgPCBuZXh0OyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCi0JCXdoaWxlICghbWNlbG9nLmVudHJ5W2ldLmZpbmlzaGVkKSB7Ci0JCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzdGFydCArIDIpKSB7Ci0JCQkJbWVtc2V0KG1jZWxvZy5lbnRyeSArIGksMCwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQkJCQlnb3RvIHRpbWVvdXQ7CisJCQl3aGlsZSAoIW1jZWxvZy5lbnRyeVtpXS5maW5pc2hlZCkgeworCQkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHN0YXJ0ICsgMikpIHsKKwkJCQkJbWVtc2V0KG1jZWxvZy5lbnRyeSArIGksIDAsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1jZSkpOworCQkJCQlnb3RvIHRpbWVvdXQ7CisJCQkJfQorCQkJCWNwdV9yZWxheCgpOwogCQkJfQotCQkJY3B1X3JlbGF4KCk7CisJCQlzbXBfcm1iKCk7CisJCQllcnIgfD0gY29weV90b191c2VyKGJ1ZiwgbWNlbG9nLmVudHJ5ICsgaSwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBtY2UpOwordGltZW91dDoKKwkJCTsKIAkJfQotCQlzbXBfcm1iKCk7Ci0JCWVyciB8PSBjb3B5X3RvX3VzZXIoYnVmLCBtY2Vsb2cuZW50cnkgKyBpLCBzaXplb2Yoc3RydWN0IG1jZSkpOwotCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBtY2UpOwotIHRpbWVvdXQ6Ci0JCTsKLQl9CiAKLQltZW1zZXQobWNlbG9nLmVudHJ5LCAwLCBuZXh0ICogc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQltY2Vsb2cubmV4dCA9IDA7CisJCW1lbXNldChtY2Vsb2cuZW50cnkgKyBwcmV2LCAwLAorCQkgICAgICAgKG5leHQgLSBwcmV2KSAqIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJCXByZXYgPSBuZXh0OworCQluZXh0ID0gY21weGNoZygmbWNlbG9nLm5leHQsIHByZXYsIDApOworCX0gd2hpbGUgKG5leHQgIT0gcHJldik7CiAKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCkBAIC02ODAsMjAgKzgzMCw2IEBACiAJJm1jZV9jaHJkZXZfb3BzLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgb2xkX2NyNCBfX2luaXRkYXRhOwotCi12b2lkIF9faW5pdCBzdG9wX21jZSh2b2lkKQotewotCW9sZF9jcjQgPSByZWFkX2NyNCgpOwotCWNsZWFyX2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KLXZvaWQgX19pbml0IHJlc3RhcnRfbWNlKHZvaWQpCi17Ci0JaWYgKG9sZF9jcjQgJiBYODZfQ1I0X01DRSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KIC8qCiAgKiBPbGQgc3R5bGUgYm9vdCBvcHRpb25zIHBhcnNpbmcuIE9ubHkgZm9yIGNvbXBhdGliaWxpdHkuCiAgKi8KQEAgLTcwMyw4ICs4MzksNyBAQAogCXJldHVybiAxOwogfQogCi0vKiBtY2U9b2ZmIGRpc2FibGVzIG1hY2hpbmUgY2hlY2suIE5vdGUgeW91IGNhbiByZS1lbmFibGUgaXQgbGF0ZXIKLSAgIHVzaW5nIHN5c2ZzLgorLyogbWNlPW9mZiBkaXNhYmxlcyBtYWNoaW5lIGNoZWNrLgogICAgbWNlPVRPTEVSQU5DRUxFVkVMIChudW1iZXIsIHNlZSBhYm92ZSkKICAgIG1jZT1ib290bG9nIExvZyBNQ0VzIGZyb20gYmVmb3JlIGJvb3RpbmcuIERpc2FibGVkIGJ5IGRlZmF1bHQgb24gQU1ELgogICAgbWNlPW5vYm9vdGxvZyBEb24ndCBsb2cgTUNFcyBmcm9tIGJlZm9yZSBib290aW5nLiAqLwpAQCAtNzI4LDYgKzg2MywyOSBAQAogICogU3lzZnMgc3VwcG9ydAogICovCiAKKy8qCisgKiBEaXNhYmxlIG1hY2hpbmUgY2hlY2tzIG9uIHN1c3BlbmQgYW5kIHNodXRkb3duLiBXZSBjYW4ndCByZWFsbHkgaGFuZGxlCisgKiB0aGVtIGxhdGVyLgorICovCitzdGF0aWMgaW50IG1jZV9kaXNhYmxlKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwgKyBpKjQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gbWNlX2Rpc2FibGUoKTsKK30KKworc3RhdGljIGludCBtY2Vfc2h1dGRvd24oc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWNlX2Rpc2FibGUoKTsKK30KKwogLyogT24gcmVzdW1lIGNsZWFyIGFsbCBNQ0Ugc3RhdGUuIERvbid0IHdhbnQgdG8gc2VlIGxlZnRvdmVycyBmcm9tIHRoZSBCSU9TLgogICAgT25seSBvbmUgQ1BVIGlzIGFjdGl2ZSBhdCB0aGlzIHRpbWUsIHRoZSBvdGhlcnMgZ2V0IHJlYWRkZWQgbGF0ZXIgdXNpbmcKICAgIENQVSBob3RwbHVnLiAqLwpAQCAtNzM4LDIwICs4OTYsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbWNlX2NwdV9yZXN0YXJ0KHZvaWQgKmRhdGEpCit7CisJZGVsX3RpbWVyX3N5bmMoJl9fZ2V0X2NwdV92YXIobWNlX3RpbWVyKSk7CisJaWYgKG1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCQltY2VfaW5pdChOVUxMKTsKKwltY2VfaW5pdF90aW1lcigpOworfQorCiAvKiBSZWluaXQgTUNFcyBhZnRlciB1c2VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLwogc3RhdGljIHZvaWQgbWNlX3Jlc3RhcnQodm9pZCkKIHsKLQlpZiAobmV4dF9pbnRlcnZhbCkKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmspOwotCS8qIFRpbWVyIHJhY2UgaXMgaGFybWxlc3MgaGVyZSAqLwotCW9uX2VhY2hfY3B1KG1jZV9pbml0LCBOVUxMLCAxKTsKIAluZXh0X2ludGVydmFsID0gY2hlY2tfaW50ZXJ2YWwgKiBIWjsKLQlpZiAobmV4dF9pbnRlcnZhbCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtY2hlY2tfd29yaywKLQkJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKG5leHRfaW50ZXJ2YWwpKTsKKwlvbl9lYWNoX2NwdShtY2VfY3B1X3Jlc3RhcnQsIE5VTEwsIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtY2Vfc3lzY2xhc3MgPSB7CisJLnN1c3BlbmQgPSBtY2Vfc3VzcGVuZCwKKwkuc2h1dGRvd24gPSBtY2Vfc2h1dGRvd24sCiAJLnJlc3VtZSA9IG1jZV9yZXN1bWUsCiAJLm5hbWUgPSAibWFjaGluZWNoZWNrIiwKIH07CkBAIC03NzgsMTYgKzk0MCwyNiBAQAogCX0JCQkJCQkJCVwKIAlzdGF0aWMgU1lTREVWX0FUVFIobmFtZSwgMDY0NCwgc2hvd18gIyMgbmFtZSwgc2V0XyAjIyBuYW1lKTsKIAotLyoKLSAqIFRCRCBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgZHluYW1pY2FsbHkgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBiYW5rcy4KLSAqIEhhdmUgb25seSA2IGNvbnRvbCBiYW5rcyBpbiAvc3lzZnMgdW50aWwgdGhlbi4KLSAqLwotQUNDRVNTT1IoYmFuazBjdGwsYmFua1swXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazFjdGwsYmFua1sxXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazJjdGwsYmFua1syXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazNjdGwsYmFua1szXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazRjdGwsYmFua1s0XSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazVjdGwsYmFua1s1XSxtY2VfcmVzdGFydCgpKQorc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpiYW5rX2F0dHJzOworCitzdGF0aWMgc3NpemVfdCBzaG93X2Jhbmsoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwl1NjQgYiA9IGJhbmtbYXR0ciAtIGJhbmtfYXR0cnNdOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHhcbiIsIGIpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYmFuayhzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXopCit7CisJY2hhciAqZW5kOworCXU2NCBuZXcgPSBzaW1wbGVfc3RydG91bGwoYnVmLCAmZW5kLCAwKTsKKwlpZiAoZW5kID09IGJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmFua1thdHRyIC0gYmFua19hdHRyc10gPSBuZXc7CisJbWNlX3Jlc3RhcnQoKTsKKwlyZXR1cm4gZW5kLWJ1ZjsKK30KIAogc3RhdGljIHNzaXplX3Qgc2hvd190cmlnZ2VyKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYpCkBAIC04MTQsOCArOTg2LDYgQEAKIHN0YXRpYyBTWVNERVZfSU5UX0FUVFIodG9sZXJhbnQsIDA2NDQsIHRvbGVyYW50KTsKIEFDQ0VTU09SKGNoZWNrX2ludGVydmFsLGNoZWNrX2ludGVydmFsLG1jZV9yZXN0YXJ0KCkpCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKm1jZV9hdHRyaWJ1dGVzW10gPSB7Ci0JJmF0dHJfYmFuazBjdGwsICZhdHRyX2JhbmsxY3RsLCAmYXR0cl9iYW5rMmN0bCwKLQkmYXR0cl9iYW5rM2N0bCwgJmF0dHJfYmFuazRjdGwsICZhdHRyX2Jhbms1Y3RsLAogCSZhdHRyX3RvbGVyYW50LmF0dHIsICZhdHRyX2NoZWNrX2ludGVydmFsLCAmYXR0cl90cmlnZ2VyLAogCU5VTEwKIH07CkBAIC04NDUsMTEgKzEwMTUsMjIgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCWVyciA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLAorCQkJCQkmYmFua19hdHRyc1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yMjsKKwl9CiAJY3B1X3NldChjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogCiAJcmV0dXJuIDA7CitlcnJvcjI6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLAorCQkJCQkmYmFua19hdHRyc1tpXSk7CisJfQogZXJyb3I6Ci0Jd2hpbGUgKGktLSkgeworCXdoaWxlICgtLWkgPj0gMCkgewogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLAogCQkJCSAgIG1jZV9hdHRyaWJ1dGVzW2ldKTsKIAl9CkBAIC04NjgsMTUgKzEwNDksNDYgQEAKIAlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLAogCQkJbWNlX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KSwKKwkJCSZiYW5rX2F0dHJzW2ldKTsKIAlzeXNkZXZfdW5yZWdpc3RlcigmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSkpOwogCWNwdV9jbGVhcihjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogfQogCisvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1hY2hpbmUgY2hlY2tzIG9uIG9mZmxpbmVkIENQVXMuICovCitzdGF0aWMgdm9pZCBtY2VfZGlzYWJsZV9jcHUodm9pZCAqaCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CisKKwlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCQlyZXR1cm47CisJaWYgKCEoYWN0aW9uICYgQ1BVX1RBU0tTX0ZST1pFTikpCisJCWNtY2lfY2xlYXIoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwgKyBpKjQsIDApOworfQorCitzdGF0aWMgdm9pZCBtY2VfcmVlbmFibGVfY3B1KHZvaWQgKmgpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhY3Rpb24gPSAqKHVuc2lnbmVkIGxvbmcgKiloOworCisJaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKKwkJcmV0dXJuOworCWlmICghKGFjdGlvbiAmIENQVV9UQVNLU19GUk9aRU4pKQorCQljbWNpX3JlZW5hYmxlKCk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMICsgaSo0LCBiYW5rW2ldKTsKK30KKwogLyogR2V0IG5vdGlmaWVkIHdoZW4gYSBjcHUgY29tZXMgb24vb2ZmLiBCZSBob3RwbHVnIGZyaWVuZGx5LiAqLwogc3RhdGljIGludCBfX2NwdWluaXQgbWNlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdCA9ICZwZXJfY3B1KG1jZV90aW1lciwgY3B1KTsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgpAQCAtODkxLDYgKzExMDMsMjEgQEAKIAkJCXRocmVzaG9sZF9jcHVfY2FsbGJhY2soYWN0aW9uLCBjcHUpOwogCQltY2VfcmVtb3ZlX2RldmljZShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwkJZGVsX3RpbWVyX3N5bmModCk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1jZV9kaXNhYmxlX2NwdSwgJmFjdGlvbiwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKKwkJdC0+ZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIG5leHRfaW50ZXJ2YWwpOworCQlhZGRfdGltZXJfb24odCwgY3B1KTsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbWNlX3JlZW5hYmxlX2NwdSwgJmFjdGlvbiwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX1BPU1RfREVBRDoKKwkJLyogaW50ZW50aW9uYWxseSBpZ25vcmluZyBmcm96ZW4gaGVyZSAqLworCQljbWNpX3JlZGlzY292ZXIoY3B1KTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CkBAIC04OTksNiArMTEyNiwzNCBAQAogCS5ub3RpZmllcl9jYWxsID0gbWNlX2NwdV9jYWxsYmFjaywKIH07CiAKK3N0YXRpYyBfX2luaXQgaW50IG1jZV9pbml0X2JhbmtzKHZvaWQpCit7CisJaW50IGk7CisKKwliYW5rX2F0dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpICogYmFua3MsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFiYW5rX2F0dHJzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphID0gJmJhbmtfYXR0cnNbaV07CisJCWEtPmF0dHIubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYmFuayVkIiwgaSk7CisJCWlmICghYS0+YXR0ci5uYW1lKQorCQkJZ290byBub21lbTsKKwkJYS0+YXR0ci5tb2RlID0gMDY0NDsKKwkJYS0+c2hvdyA9IHNob3dfYmFuazsKKwkJYS0+c3RvcmUgPSBzZXRfYmFuazsKKwl9CisJcmV0dXJuIDA7CisKK25vbWVtOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJa2ZyZWUoYmFua19hdHRyc1tpXS5hdHRyLm5hbWUpOworCWtmcmVlKGJhbmtfYXR0cnMpOworCWJhbmtfYXR0cnMgPSBOVUxMOworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgX19pbml0IGludCBtY2VfaW5pdF9kZXZpY2Uodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtOTA2LDYgKzExNjEsMTEgQEAKIAogCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpCiAJCXJldHVybiAtRUlPOworCisJZXJyID0gbWNlX2luaXRfYmFua3MoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZtY2Vfc3lzY2xhc3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggOTgxNzUwNi4uN2QwMWJlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtNzksNiArNzksOCBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgY2hhciwgYmFua19tYXApOwkvKiBzZWUgd2hpY2ggYmFua3MgYXJlIG9uICovCiAKK3N0YXRpYyB2b2lkIGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpOworCiAvKgogICogQ1BVIEluaXRpYWxpemF0aW9uCiAgKi8KQEAgLTkwLDcgKzkyLDggQEAKIH07CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggY29ycmVjdCBjcHUgYWZmaW5pdHkgKi8KLXN0YXRpYyBsb25nIHRocmVzaG9sZF9yZXN0YXJ0X2Jhbmsodm9pZCAqX3RyKQorLyogQ2FsbGVkIHZpYSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSAqLworc3RhdGljIHZvaWQgdGhyZXNob2xkX3Jlc3RhcnRfYmFuayh2b2lkICpfdHIpCiB7CiAJc3RydWN0IHRocmVzaF9yZXN0YXJ0ICp0ciA9IF90cjsKIAl1MzIgbWNpX21pc2NfaGksIG1jaV9taXNjX2xvOwpAQCAtMTE3LDcgKzEyMCw2IEBACiAKIAltY2lfbWlzY19oaSB8PSBNQVNLX0NPVU5UX0VOX0hJOwogCXdybXNyKHRyLT5iLT5hZGRyZXNzLCBtY2lfbWlzY19sbywgbWNpX21pc2NfaGkpOwotCXJldHVybiAwOwogfQogCiAvKiBjcHUgaW5pdCBlbnRyeSBwb2ludCwgY2FsbGVkIGZyb20gbWNlLmMgd2l0aCBwcmVlbXB0IG9mZiAqLwpAQCAtMTc0LDYgKzE3Niw4IEBACiAJCQl0ci5yZXNldCA9IDA7CiAJCQl0ci5vbGRfbGltaXQgPSAwOwogCQkJdGhyZXNob2xkX3Jlc3RhcnRfYmFuaygmdHIpOworCisJCQltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0OwogCQl9CiAJfQogfQpAQCAtMTg3LDE5ICsxOTEsMTMgQEAKICAqIHRoZSBpbnRlcnJ1cHQgZ29lcyBvZmYgd2hlbiBlcnJvcl9jb3VudCByZWFjaGVzIHRocmVzaG9sZF9saW1pdC4KICAqIHRoZSBoYW5kbGVyIHdpbGwgc2ltcGx5IGxvZyBtY2Vsb2cgdy8gc29mdHdhcmUgZGVmaW5lZCBiYW5rIG51bWJlci4KICAqLwotYXNtbGlua2FnZSB2b2lkIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCitzdGF0aWMgdm9pZCBhbWRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBiYW5rLCBibG9jazsKIAlzdHJ1Y3QgbWNlIG07CiAJdTMyIGxvdyA9IDAsIGhpZ2ggPSAwLCBhZGRyZXNzID0gMDsKIAotCWFja19BUElDX2lycSgpOwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCi0JbWVtc2V0KCZtLCAwLCBzaXplb2YobSkpOwotCXJkdHNjbGwobS50c2MpOwotCW0uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCW1jZV9zZXR1cCgmbSk7CiAKIAkvKiBhc3N1bWUgZmlyc3QgYmFuayBjYXVzZWQgaXQgKi8KIAlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTlJfQkFOS1M7ICsrYmFuaykgewpAQCAtMjMzLDcgKzIzMSw4IEBACiAKIAkJCS8qIExvZyB0aGUgbWFjaGluZSBjaGVjayB0aGF0IGNhdXNlZCB0aGUgdGhyZXNob2xkCiAJCQkgICBldmVudC4gKi8KLQkJCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgMCk7CisJCQltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwKKwkJCQkJJl9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKIAogCQkJaWYgKGhpZ2ggJiBNQVNLX09WRVJGTE9XX0hJKSB7CiAJCQkJcmRtc3JsKGFkZHJlc3MsIG0ubWlzYyk7CkBAIC0yNDMsMTMgKzI0MiwxMCBAQAogCQkJCSAgICAgICArIGJhbmsgKiBOUl9CTE9DS1MKIAkJCQkgICAgICAgKyBibG9jazsKIAkJCQltY2VfbG9nKCZtKTsKLQkJCQlnb3RvIG91dDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAl9Ci1vdXQ6Ci0JaW5jX2lycV9zdGF0KGlycV90aHJlc2hvbGRfY291bnQpOwotCWlycV9leGl0KCk7CiB9CiAKIC8qCkBAIC0yODMsNyArMjc5LDcgQEAKIAl0ci5iID0gYjsKIAl0ci5yZXNldCA9IDA7CiAJdHIub2xkX2xpbWl0ID0gMDsKLQl3b3JrX29uX2NwdShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0cik7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIAogCXJldHVybiBlbmQgLSBidWY7CiB9CkBAIC0zMDUsMjMgKzMwMSwzMiBAQAogCXRyLmIgPSBiOwogCXRyLnJlc2V0ID0gMDsKIAotCXdvcmtfb25fY3B1KGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIsIDEpOwogCiAJcmV0dXJuIGVuZCAtIGJ1ZjsKIH0KIAotc3RhdGljIGxvbmcgbG9jYWxfZXJyb3JfY291bnQodm9pZCAqX2IpCitzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrX2Nyb3NzX2NwdSB7CisJc3RydWN0IHRocmVzaG9sZF9ibG9jayAqdGI7CisJbG9uZyByZXR2YWw7Cit9OworCitzdGF0aWMgdm9pZCBsb2NhbF9lcnJvcl9jb3VudF9oYW5kbGVyKHZvaWQgKl90YmNjKQogewotCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIgPSBfYjsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrX2Nyb3NzX2NwdSAqdGJjYyA9IF90YmNjOworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIgPSB0YmNjLT50YjsKIAl1MzIgbG93LCBoaWdoOwogCiAJcmRtc3IoYi0+YWRkcmVzcywgbG93LCBoaWdoKTsKLQlyZXR1cm4gKGhpZ2ggJiAweEZGRikgLSAoVEhSRVNIT0xEX01BWCAtIGItPnRocmVzaG9sZF9saW1pdCk7CisJdGJjYy0+cmV0dmFsID0gKGhpZ2ggJiAweEZGRikgLSAoVEhSRVNIT0xEX01BWCAtIGItPnRocmVzaG9sZF9saW1pdCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZXJyb3JfY291bnQoc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgd29ya19vbl9jcHUoYi0+Y3B1LCBsb2NhbF9lcnJvcl9jb3VudCwgYikpOworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2tfY3Jvc3NfY3B1IHRiY2MgPSB7IC50YiA9IGIsIH07CisKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCBsb2NhbF9lcnJvcl9jb3VudF9oYW5kbGVyLCAmdGJjYywgMSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCB0YmNjLnJldHZhbCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2Vycm9yX2NvdW50KHN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIsCkBAIC0zMjksNyArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgdGhyZXNoX3Jlc3RhcnQgdHIgPSB7IC5iID0gYiwgLnJlc2V0ID0gMSwgLm9sZF9saW1pdCA9IDAgfTsKIAotCXdvcmtfb25fY3B1KGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIsIDEpOwogCXJldHVybiAxOwogfQogCkBAIC0zOTgsNyArNDAzLDcgQEAKIAlpZiAoKGJhbmsgPj0gTlJfQkFOS1MpIHx8IChibG9jayA+PSBOUl9CTE9DS1MpKQogCQlyZXR1cm4gMDsKIAotCWlmIChyZG1zcl9zYWZlKGFkZHJlc3MsICZsb3csICZoaWdoKSkKKwlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBhZGRyZXNzLCAmbG93LCAmaGlnaCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCEoaGlnaCAmIE1BU0tfVkFMSURfSEkpKSB7CkBAIC00NjIsMTIgKzQ2NywxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgbG9uZyBsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKHZvaWQgKl9iYW5rKQorc3RhdGljIF9fY3B1aW5pdCBsb25nCitsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGludCBjcHUsIHVuc2lnbmVkIGludCBiYW5rKQogewotCXVuc2lnbmVkIGludCAqYmFuayA9IF9iYW5rOwotCi0JcmV0dXJuIGFsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3Moc21wX3Byb2Nlc3Nvcl9pZCgpLCAqYmFuaywgMCwKLQkJCQkJIE1TUl9JQTMyX01DMF9NSVNDICsgKmJhbmsgKiA0KTsKKwlyZXR1cm4gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmssIDAsCisJCQkJCSBNU1JfSUEzMl9NQzBfTUlTQyArIGJhbmsgKiA0KTsKIH0KIAogLyogc3ltbGlua3Mgc2libGluZyBzaGFyZWQgYmFua3MgdG8gZmlyc3QgY29yZS4gIGZpcnN0IGNvcmUgb3ducyBkaXIvZmlsZXMuICovCkBAIC01MzAsNyArNTM0LDcgQEAKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKIAotCWVyciA9IHdvcmtfb25fY3B1KGNwdSwgbG9jYWxfYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcywgJmJhbmspOworCWVyciA9IGxvY2FsX2FsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoY3B1LCBiYW5rKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCmluZGV4IGFhNWUyODcuLjU3ZGYzZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIEludGVsIHNwZWNpZmljIE1DRSBmZWF0dXJlcy4KICAqIENvcHlyaWdodCAyMDA0IFp3YW5lIE13YWlrYW1ibyA8endhbmVAbGludXhwb3dlci5jYT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBbmRpIEtsZWVuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzLDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vdGhlcm1fdGhyb3QuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogCiBhc21saW5rYWdlIHZvaWQgc21wX3RoZXJtYWxfaW50ZXJydXB0KHZvaWQpCiB7CkBAIC0yNSw3ICsyOCw3IEBACiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKIAlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgMSkpCi0JCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc3JfdmFsKTsKKwkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChtc3JfdmFsKTsKIAogCWluY19pcnFfc3RhdChpcnFfdGhlcm1hbF9jb3VudCk7CiAJaXJxX2V4aXQoKTsKQEAgLTg1LDcgKzg4LDIwOSBAQAogCXJldHVybjsKIH0KIAorLyoKKyAqIFN1cHBvcnQgZm9yIEludGVsIENvcnJlY3QgTWFjaGluZSBDaGVjayBJbnRlcnJ1cHRzLiBUaGlzIGFsbG93cworICogdGhlIENQVSB0byByYWlzZSBhbiBpbnRlcnJ1cHQgd2hlbiBhIGNvcnJlY3RlZCBtYWNoaW5lIGNoZWNrIGhhcHBlbmVkLgorICogTm9ybWFsbHkgd2UgcGljayB0aG9zZSB1cCB1c2luZyBhIHJlZ3VsYXIgcG9sbGluZyB0aW1lci4KKyAqIEFsc28gc3VwcG9ydHMgcmVsaWFibGUgZGlzY292ZXJ5IG9mIHNoYXJlZCBiYW5rcy4KKyAqLworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUobWNlX2JhbmtzX3QsIG1jZV9iYW5rc19vd25lZCk7CisKKy8qCisgKiBjbWNpX2Rpc2NvdmVyX2xvY2sgcHJvdGVjdHMgYWdhaW5zdCBwYXJhbGxlbCBkaXNjb3ZlcnkgYXR0ZW1wdHMKKyAqIHdoaWNoIGNvdWxkIHJhY2UgYWdhaW5zdCBlYWNoIG90aGVyLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNtY2lfZGlzY292ZXJfbG9jayk7CisKKyNkZWZpbmUgQ01DSV9USFJFU0hPTEQgMQorCitzdGF0aWMgaW50IGNtY2lfc3VwcG9ydGVkKGludCAqYmFua3MpCit7CisJdTY0IGNhcDsKKworCS8qCisJICogVmVuZG9yIGNoZWNrIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQsIGJ1dCB0aGUgaW5pdGlhbAorCSAqIGluaXRpYWxpemF0aW9uIGlzIHZlbmRvciBrZXllZCBhbmQgdGhpcworCSAqIG1ha2VzIHN1cmUgbm9uZSBvZiB0aGUgYmFja2Rvb3JzIGFyZSBlbnRlcmVkIG90aGVyd2lzZS4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiAwOworCWlmICghY3B1X2hhc19hcGljIHx8IGxhcGljX2dldF9tYXhsdnQoKSA8IDYpCisJCXJldHVybiAwOworCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOworCSpiYW5rcyA9IG1pbl90KHVuc2lnbmVkLCBNQVhfTlJfQkFOS1MsIGNhcCAmIDB4ZmYpOworCXJldHVybiAhIShjYXAgJiBNQ0dfQ01DSV9QKTsKK30KKworLyoKKyAqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyBpcyBjYWxsZWQgb24gZXZlcnkgZXZlbnQuCisgKiBKdXN0IGNhbGwgdGhlIHBvbGxlciBkaXJlY3RseSB0byBsb2cgYW55IGV2ZW50cy4KKyAqIFRoaXMgY291bGQgaW4gdGhlb3J5IGluY3JlYXNlIHRoZSB0aHJlc2hvbGQgdW5kZXIgaGlnaCBsb2FkLAorICogYnV0IGRvZXNuJ3QgZm9yIG5vdy4KKyAqLworc3RhdGljIHZvaWQgaW50ZWxfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQoreworCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLCAmX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpKTsKKwltY2Vfbm90aWZ5X3VzZXIoKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdXBkYXRlKGNoYXIgKnR5cGUsIGludCAqaGRyLCBpbnQgbnVtKQoreworCWlmICgqaGRyID09IDApCisJCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZCBNQ0EgYmFua3MiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCSpoZHIgPSAxOworCXByaW50ayhLRVJOX0NPTlQgIiAlczolZCIsIHR5cGUsIG51bSk7Cit9CisKKy8qCisgKiBFbmFibGUgQ01DSSAoQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgSW50ZXJydXB0KSBmb3IgYXZhaWxhYmxlIE1DRSBiYW5rcworICogb24gdGhpcyBDUFUuIFVzZSB0aGUgYWxnb3JpdGhtIHJlY29tbWVuZGVkIGluIHRoZSBTRE0gdG8gZGlzY292ZXIgc2hhcmVkCisgKiBiYW5rcy4KKyAqLworc3RhdGljIHZvaWQgY21jaV9kaXNjb3ZlcihpbnQgYmFua3MsIGludCBib290KQoreworCXVuc2lnbmVkIGxvbmcgKm93bmVkID0gKHZvaWQgKikmX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpOworCWludCBoZHIgPSAwOworCWludCBpOworCisJc3Bpbl9sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCXU2NCB2YWw7CisKKwkJaWYgKHRlc3RfYml0KGksIG93bmVkKSkKKwkJCWNvbnRpbnVlOworCisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisKKwkJLyogQWxyZWFkeSBvd25lZCBieSBzb21lb25lIGVsc2U/ICovCisJCWlmICh2YWwgJiBDTUNJX0VOKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksIG93bmVkKSB8fCBib290KQorCQkJCXByaW50X3VwZGF0ZSgiU0hEIiwgJmhkciwgaSk7CisJCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbCB8PSBDTUNJX0VOIHwgQ01DSV9USFJFU0hPTEQ7CisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisKKwkJLyogRGlkIHRoZSBlbmFibGUgYml0IHN0aWNrPyAtLSB0aGUgYmFuayBzdXBwb3J0cyBDTUNJICovCisJCWlmICh2YWwgJiBDTUNJX0VOKSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgb3duZWQpIHx8IGJvb3QpCisJCQkJcHJpbnRfdXBkYXRlKCJDTUNJIiwgJmhkciwgaSk7CisJCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CisJCX0gZWxzZSB7CisJCQlXQVJOX09OKCF0ZXN0X2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSkpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworCWlmIChoZHIpCisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKKy8qCisgKiBKdXN0IGluIGNhc2Ugd2UgbWlzc2VkIGFuIGV2ZW50IGR1cmluZyBpbml0aWFsaXphdGlvbiBjaGVjaworICogYWxsIHRoZSBDTUNJIG93bmVkIGJhbmtzLgorICovCit2b2lkIGNtY2lfcmVjaGVjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGJhbmtzOworCisJaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSB8fCAhY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwgJl9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogRGlzYWJsZSBDTUNJIG9uIHRoaXMgQ1BVIGZvciBhbGwgYmFua3MgaXQgb3ducyB3aGVuIGl0IGdvZXMgZG93bi4KKyAqIFRoaXMgYWxsb3dzIG90aGVyIENQVXMgdG8gY2xhaW0gdGhlIGJhbmtzIG9uIHJlZGlzY292ZXJ5LgorICovCit2b2lkIGNtY2lfY2xlYXIodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgYmFua3M7CisJdTY0IHZhbDsKKworCWlmICghY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmY21jaV9kaXNjb3Zlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQlpZiAoIXRlc3RfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSkpCisJCQljb250aW51ZTsKKwkJLyogRGlzYWJsZSBDTUNJICovCisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCXZhbCAmPSB+KENNQ0lfRU58Q01DSV9USFJFU0hPTERfTUFTSyk7CisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CisJfQorCXNwaW5fdW5sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworfQorCisvKgorICogQWZ0ZXIgYSBDUFUgd2VudCBkb3duIGN5Y2xlIHRocm91Z2ggYWxsIHRoZSBvdGhlcnMgYW5kIHJlZGlzY292ZXIKKyAqIE11c3QgcnVuIGluIHByb2Nlc3MgY29udGV4dC4KKyAqLwordm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKQoreworCWludCBiYW5rczsKKwlpbnQgY3B1OworCWNwdW1hc2tfdmFyX3Qgb2xkOworCisJaWYgKCFjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQlyZXR1cm47CisJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmb2xkLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuOworCWNwdW1hc2tfY29weShvbGQsICZjdXJyZW50LT5jcHVzX2FsbG93ZWQpOworCisJZm9yX2VhY2hfb25saW5lX2NwdSAoY3B1KSB7CisJCWlmIChjcHUgPT0gZHlpbmcpCisJCQljb250aW51ZTsKKwkJaWYgKHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBSZWNoZWNrIGJhbmtzIGluIGNhc2UgQ1BVcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSAqLworCQlpZiAoY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJCWNtY2lfZGlzY292ZXIoYmFua3MsIDApOworCX0KKworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG9sZCk7CisJZnJlZV9jcHVtYXNrX3ZhcihvbGQpOworfQorCisvKgorICogUmVlbmFibGUgQ01DSSBvbiB0aGlzIENQVSBpbiBjYXNlIGEgQ1BVIGRvd24gZmFpbGVkLgorICovCit2b2lkIGNtY2lfcmVlbmFibGUodm9pZCkKK3sKKwlpbnQgYmFua3M7CisJaWYgKGNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCWNtY2lfZGlzY292ZXIoYmFua3MsIDApOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9pbml0X2NtY2kodm9pZCkKK3sKKwlpbnQgYmFua3M7CisKKwlpZiAoIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCXJldHVybjsKKworCW1jZV90aHJlc2hvbGRfdmVjdG9yID0gaW50ZWxfdGhyZXNob2xkX2ludGVycnVwdDsKKwljbWNpX2Rpc2NvdmVyKGJhbmtzLCAxKTsKKwkvKgorCSAqIEZvciBDUFUgIzAgdGhpcyBydW5zIHdpdGggc3RpbGwgZGlzYWJsZWQgQVBJQywgYnV0IHRoYXQncworCSAqIG9rIGJlY2F1c2Ugb25seSB0aGUgdmVjdG9yIGlzIHNldCB1cC4gV2Ugc3RpbGwgZG8gYW5vdGhlcgorCSAqIGNoZWNrIGZvciB0aGUgYmFua3MgbGF0ZXIgZm9yIENQVSAjMCBqdXN0IHRvIG1ha2Ugc3VyZQorCSAqIHRvIG5vdCBtaXNzIGFueSBldmVudHMuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVENNQ0ksIFRIUkVTSE9MRF9BUElDX1ZFQ1RPUnxBUElDX0RNX0ZJWEVEKTsKKwljbWNpX3JlY2hlY2soKTsKK30KKwogdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpbnRlbF9pbml0X3RoZXJtYWwoYyk7CisJaW50ZWxfaW5pdF9jbWNpKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aHJlc2hvbGQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RocmVzaG9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWU5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aHJlc2hvbGQuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29tbW9uIGNvcnJlY3RlZCBNQ0UgdGhyZXNob2xkIGhhbmRsZXIgY29kZToKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KKworc3RhdGljIHZvaWQgZGVmYXVsdF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fRVJSICJVbmV4cGVjdGVkIHRocmVzaG9sZCBpbnRlcnJ1cHQgYXQgdmVjdG9yICV4XG4iLAorCQkJIFRIUkVTSE9MRF9BUElDX1ZFQ1RPUik7Cit9CisKK3ZvaWQgKCptY2VfdGhyZXNob2xkX3ZlY3Rvcikodm9pZCkgPSBkZWZhdWx0X3RocmVzaG9sZF9pbnRlcnJ1cHQ7CisKK2FzbWxpbmthZ2Ugdm9pZCBtY2VfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQoreworCWV4aXRfaWRsZSgpOworCWlycV9lbnRlcigpOworCWluY19pcnFfc3RhdChpcnFfdGhyZXNob2xkX2NvdW50KTsKKwltY2VfdGhyZXNob2xkX3ZlY3RvcigpOworCWlycV9leGl0KCk7CisJLyogQWNrIG9ubHkgYXQgdGhlIGVuZCB0byBhdm9pZCBwb3RlbnRpYWwgcmVlbnRyeSAqLworCWFja19BUElDX2lycSgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCmluZGV4IDE5MWZjMDUuLmY0MzYxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi1vYmoteQkJOj0gbWFpbi5vIGlmLm8gZ2VuZXJpYy5vIHN0YXRlLm8KK29iai15CQk6PSBtYWluLm8gaWYubyBnZW5lcmljLm8gc3RhdGUubyBjbGVhbnVwLm8KIG9iai0kKENPTkZJR19YODZfMzIpICs9IGFtZC5vIGN5cml4Lm8gY2VudGF1ci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMGZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC0wLDAgKzEsMTEwMSBAQAorLyogIE1UUlIgKE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVyKSBjbGVhbnVwCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgWWluZ2hhaSBMdQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorCisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KKyNpbmNsdWRlICJtdHJyLmgiCisKKy8qIHNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCisjZGVmaW5lIFJBTkdFX05VTSAyNTYKKworc3RydWN0IHJlc19yYW5nZSB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKK307CisKK3N0YXRpYyBpbnQgX19pbml0CithZGRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCS8qIG91dCBvZiBzbG90cyAqLworCWlmIChucl9yYW5nZSA+PSBSQU5HRV9OVU0pCisJCXJldHVybiBucl9yYW5nZTsKKworCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0OworCXJhbmdlW25yX3JhbmdlXS5lbmQgPSBlbmQ7CisKKwlucl9yYW5nZSsrOworCisJcmV0dXJuIG5yX3JhbmdlOworfQorCitzdGF0aWMgaW50IF9faW5pdAorYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBpOworCisJLyogdHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CisKKwkJaWYgKCFyYW5nZVtpXS5lbmQpCisJCQljb250aW51ZTsKKworCQljb21tb25fc3RhcnQgPSBtYXgocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJY29tbW9uX2VuZCA9IG1pbihyYW5nZVtpXS5lbmQsIGVuZCk7CisJCWlmIChjb21tb25fc3RhcnQgPiBjb21tb25fZW5kICsgMSkKKwkJCWNvbnRpbnVlOworCisJCWZpbmFsX3N0YXJ0ID0gbWluKHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7CisJCWZpbmFsX2VuZCA9IG1heChyYW5nZVtpXS5lbmQsIGVuZCk7CisKKwkJcmFuZ2VbaV0uc3RhcnQgPSBmaW5hbF9zdGFydDsKKwkJcmFuZ2VbaV0uZW5kID0gIGZpbmFsX2VuZDsKKwkJcmV0dXJuIG5yX3JhbmdlOworCX0KKworCS8qIG5lZWQgdG8gYWRkIHRoYXQgKi8KKwlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7CisJCWlmICghcmFuZ2Vbal0uZW5kKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKKwkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKKwkJCXJhbmdlW2pdLmVuZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgeworCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOworCQkJY29udGludWU7CisJCX0KKworCisJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgeworCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKKwkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLworCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7CisJCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpIDwgUkFOR0VfTlVNKSB7CisJCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOworCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOworCQkJfQorCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOworCQkJY29udGludWU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNtcF9yYW5nZShjb25zdCB2b2lkICp4MSwgY29uc3Qgdm9pZCAqeDIpCit7CisJY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjEgPSB4MTsKKwljb25zdCBzdHJ1Y3QgcmVzX3JhbmdlICpyMiA9IHgyOworCWxvbmcgc3RhcnQxLCBzdGFydDI7CisKKwlzdGFydDEgPSByMS0+c3RhcnQ7CisJc3RhcnQyID0gcjItPnN0YXJ0OworCisJcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKK30KKworc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcGZuOworCXVuc2lnbmVkIGxvbmcgc2l6ZV9wZm47CisJbXRycl90eXBlIHR5cGU7Cit9OworCitzdGF0aWMgc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIF9faW5pdGRhdGEgcmFuZ2Vfc3RhdGVbUkFOR0VfTlVNXTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBkZWJ1Z19wcmludDsKKworc3RhdGljIGludCBfX2luaXQKK3g4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKKwltdHJyX3R5cGUgdHlwZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQorCQkJY29udGludWU7CisJCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgYmFzZSwKKwkJCQkJCWJhc2UgKyBzaXplIC0gMSk7CisJfQorCWlmIChkZWJ1Z19wcmludCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgV0IgY2hlY2tpbmdcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOworCX0KKworCS8qIHRha2Ugb3V0IFVDIHJhbmdlcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSAmJgorCQkgICAgdHlwZSAhPSBNVFJSX1RZUEVfV1JQUk9UKQorCQkJY29udGludWU7CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKCFzaXplKQorCQkJY29udGludWU7CisJCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKKwkJaWYgKGJhc2UgPCAoMTw8KDIwLVBBR0VfU0hJRlQpKSAmJiBtdHJyX3N0YXRlLmhhdmVfZml4ZWQgJiYKKwkJICAgIChtdHJyX3N0YXRlLmVuYWJsZWQgJiAxKSkgeworCQkJLyogVmFyIE1UUlIgY29udGFpbnMgVUMgZW50cnkgYmVsb3cgMU0/IFNraXAgaXQ6ICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogVkFSIE1UUlIgJWQgIgorCQkJCSJjb250YWlucyBzdHJhbmdlIFVDIGVudHJ5IHVuZGVyIDFNLCBjaGVjayAiCisJCQkJIndpdGggeW91ciBzeXN0ZW0gdmVuZG9yIVxuIiwgaSk7CisJCQlpZiAoYmFzZSArIHNpemUgPD0gKDE8PCgyMC1QQUdFX1NISUZUKSkpCisJCQkJY29udGludWU7CisJCQlzaXplIC09ICgxPDwoMjAtUEFHRV9TSElGVCkpIC0gYmFzZTsKKwkJCWJhc2UgPSAxPDwoMjAtUEFHRV9TSElGVCk7CisJCX0KKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGJhc2UsIGJhc2UgKyBzaXplIC0gMSk7CisJfQorCWlmIChleHRyYV9yZW1vdmVfc2l6ZSkKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCSBleHRyYV9yZW1vdmVfYmFzZSArIGV4dHJhX3JlbW92ZV9zaXplICAtIDEpOworCisJLyogZ2V0IG5ldyByYW5nZSBudW0gKi8KKwlucl9yYW5nZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7CisJCWlmICghcmFuZ2VbaV0uZW5kKQorCQkJY29udGludWU7CisJCW5yX3JhbmdlKys7CisJfQorCWlmICAoZGVidWdfcHJpbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFVDIGNoZWNraW5nXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKKwl9CisKKwkvKiBzb3J0IHRoZSByYW5nZXMgKi8KKwlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOworCWlmICAoZGVidWdfcHJpbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIHNvcnRpbmdcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOworCX0KKworCS8qIGNsZWFyIHRob3NlIGlzIG5vdCB1c2VkICovCisJZm9yIChpID0gbnJfcmFuZ2U7IGkgPCBSQU5HRV9OVU07IGkrKykKKwkJbWVtc2V0KCZyYW5nZVtpXSwgMCwgc2l6ZW9mKHJhbmdlW2ldKSk7CisKKwlyZXR1cm4gbnJfcmFuZ2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEgcmFuZ2VbUkFOR0VfTlVNXTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBucl9yYW5nZTsKKworI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQoreworCXVuc2lnbmVkIGxvbmcgc3VtOworCWludCBpOworCisJc3VtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJc3VtICs9IHJhbmdlW2ldLmVuZCArIDEgLSByYW5nZVtpXS5zdGFydDsKKworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX210cnJfY2xlYW51cCBfX2luaXRkYXRhID0KKwlDT05GSUdfTVRSUl9TQU5JVElaRVJfRU5BQkxFX0RFRkFVTFQ7CisKK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKGNoYXIgKnN0cikKK3sKKwllbmFibGVfbXRycl9jbGVhbnVwID0gMDsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfY2xlYW51cCIsIGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgZW5hYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCit7CisJZW5hYmxlX210cnJfY2xlYW51cCA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZW5hYmxlX210cnJfY2xlYW51cCIsIGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXAoY2hhciAqc3RyKQoreworCWRlYnVnX3ByaW50ID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtdHJyX2NsZWFudXBfZGVidWciLCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXApOworCitzdHJ1Y3QgdmFyX210cnJfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7CisJdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKKwl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7CisJdW5zaWduZWQgaW50CXJlZzsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCisJCXVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKK3sKKwl1MzIgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaTsKKwl1NjQgYmFzZSwgbWFzazsKKworCWlmICghc2l6ZWspIHsKKwkJZmlsbF9tdHJyX3Zhcl9yYW5nZShyZWcsIDAsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorCisJbWFzayA9ICgxVUxMIDw8IGFkZHJlc3NfYml0cykgLSAxOworCW1hc2sgJj0gfigoKCh1NjQpc2l6ZWspIDw8IDEwKSAtIDEpOworCisJYmFzZSAgPSAoKHU2NCliYXNlaykgPDwgMTA7CisKKwliYXNlIHw9IHR5cGU7CisJbWFzayB8PSAweDgwMDsKKworCWJhc2VfbG8gPSBiYXNlICYgKCgxVUxMPDwzMikgLSAxKTsKKwliYXNlX2hpID0gYmFzZSA+PiAzMjsKKworCW1hc2tfbG8gPSBtYXNrICYgKCgxVUxMPDwzMikgLSAxKTsKKwltYXNrX2hpID0gbWFzayA+PiAzMjsKKworCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzYXZlX3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCisJCXVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlyYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuID0gYmFzZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CisJcmFuZ2Vfc3RhdGVbcmVnXS5zaXplX3BmbiA9IHNpemVrID4+IChQQUdFX1NISUZUIC0gMTApOworCXJhbmdlX3N0YXRlW3JlZ10udHlwZSA9IHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X3Zhcl9tdHJyX2FsbCh1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZm9yIChyZWcgPSAwOyByZWcgPCBudW1fdmFyX3JhbmdlczsgcmVnKyspIHsKKwkJYmFzZWsgPSByYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCQlzaXplayA9IHJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtyZWddLnR5cGU7CisKKwkJc2V0X3Zhcl9tdHJyKHJlZywgYmFzZWssIHNpemVrLCB0eXBlLCBhZGRyZXNzX2JpdHMpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9fc2l6ZV9mYWN0b3IodW5zaWduZWQgbG9uZyBzaXplaywgY2hhciAqZmFjdG9ycCkKK3sKKwljaGFyIGZhY3RvcjsKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBzaXplazsKKworCWlmIChiYXNlICYgKCgxPDwxMCkgLSAxKSkgeworCQkvKiBub3QgTUIgYWxpZ25tZW50ICovCisJCWZhY3RvciA9ICdLJzsKKwl9IGVsc2UgaWYgKGJhc2UgJiAoKDE8PDIwKSAtIDEpKSB7CisJCWZhY3RvciA9ICdNJzsKKwkJYmFzZSA+Pj0gMTA7CisJfSBlbHNlIHsKKwkJZmFjdG9yID0gJ0cnOworCQliYXNlID4+PSAyMDsKKwl9CisKKwkqZmFjdG9ycCA9IGZhY3RvcjsKKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdAorcmFuZ2VfdG9fbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0aywKKwkgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3NpemVrLCB1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJaWYgKCFyYW5nZV9zaXplayB8fCAocmVnID49IG51bV92YXJfcmFuZ2VzKSkKKwkJcmV0dXJuIHJlZzsKKworCXdoaWxlIChyYW5nZV9zaXplaykgeworCQl1bnNpZ25lZCBsb25nIG1heF9hbGlnbiwgYWxpZ247CisJCXVuc2lnbmVkIGxvbmcgc2l6ZWs7CisKKwkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIEkgY2FuIG1ha2UgYSByYW5nZSAqLworCQlpZiAocmFuZ2Vfc3RhcnRrKQorCQkJbWF4X2FsaWduID0gZmZzKHJhbmdlX3N0YXJ0aykgLSAxOworCQllbHNlCisJCQltYXhfYWxpZ24gPSAzMjsKKwkJYWxpZ24gPSBmbHMocmFuZ2Vfc2l6ZWspIC0gMTsKKwkJaWYgKGFsaWduID4gbWF4X2FsaWduKQorCQkJYWxpZ24gPSBtYXhfYWxpZ247CisKKwkJc2l6ZWsgPSAxIDw8IGFsaWduOworCQlpZiAoZGVidWdfcHJpbnQpIHsKKwkJCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOworCisJCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmFuZ2Vfc3RhcnRrLAorCQkJCQkJCSAmc3RhcnRfZmFjdG9yKSwKKwkJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVrLCAmc2l6ZV9mYWN0b3IpLAorCisJCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dGluZyB2YXJpYWJsZSBNVFJSICVkLCAiCisJCQkJImJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKKwkJCQlyZWcsIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKKwkJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAorCQkJCSh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKSA/ICJVQyIgOgorCQkJCSAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKQorCQkJCSk7CisJCX0KKwkJc2F2ZV92YXJfbXRycihyZWcrKywgcmFuZ2Vfc3RhcnRrLCBzaXplaywgdHlwZSk7CisJCXJhbmdlX3N0YXJ0ayArPSBzaXplazsKKwkJcmFuZ2Vfc2l6ZWsgLT0gc2l6ZWs7CisJCWlmIChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJlZzsKK30KKworc3RhdGljIHVuc2lnbmVkIF9faW5pdAorcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlaywKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZWspCit7CisJdW5zaWduZWQgbG9uZyBob2xlX2Jhc2VrLCBob2xlX3NpemVrOworCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2Jhc2VrLCBzZWNvbmRfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyByYW5nZTBfYmFzZWssIHJhbmdlMF9zaXplazsKKwl1bnNpZ25lZCBsb25nIHJhbmdlX2Jhc2VrLCByYW5nZV9zaXplazsKKwl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKKworCWhvbGVfYmFzZWsgPSAwOworCWhvbGVfc2l6ZWsgPSAwOworCXNlY29uZF9iYXNlayA9IDA7CisJc2Vjb25kX3NpemVrID0gMDsKKwljaHVua19zaXplayA9IHN0YXRlLT5jaHVua19zaXplazsKKwlncmFuX3NpemVrID0gc3RhdGUtPmdyYW5fc2l6ZWs7CisKKwkvKiBhbGlnbiB3aXRoIGdyYW4gc2l6ZSwgcHJldmVudCBzbWFsbCBibG9jayB1c2VkIHVwIE1UUlJzICovCisJcmFuZ2VfYmFzZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc3RhcnRrLCBncmFuX3NpemVrKTsKKwlpZiAoKHJhbmdlX2Jhc2VrID4gYmFzZWspICYmIGJhc2VrKQorCQlyZXR1cm4gc2Vjb25kX3NpemVrOworCXN0YXRlLT5yYW5nZV9zaXplayAtPSAocmFuZ2VfYmFzZWsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrKTsKKwlyYW5nZV9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgZ3Jhbl9zaXplayk7CisKKwl3aGlsZSAocmFuZ2Vfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKwkJcmFuZ2Vfc2l6ZWsgLT0gZ3Jhbl9zaXplazsKKwkJaWYgKCFyYW5nZV9zaXplaykKKwkJCXJldHVybiAwOworCX0KKwlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSByYW5nZV9zaXplazsKKworCS8qIHRyeSB0byBhcHBlbmQgc29tZSBzbWFsbCBob2xlICovCisJcmFuZ2UwX2Jhc2VrID0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKKwlyYW5nZTBfc2l6ZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc2l6ZWssIGNodW5rX3NpemVrKTsKKworCS8qIG5vIGluY3JlYXNlICovCisJaWYgKHJhbmdlMF9zaXplayA9PSBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKwkJaWYgKGRlYnVnX3ByaW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlWDogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCXJhbmdlMF9iYXNlazw8MTAsCisJCQkJKHJhbmdlMF9iYXNlayArIHN0YXRlLT5yYW5nZV9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAorCQkJCXN0YXRlLT5yYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CisJCXJldHVybiAwOworCX0KKworCS8qIG9ubHkgY3V0IGJhY2ssIHdoZW4gaXQgaXMgbm90IHRoZSBsYXN0ICovCisJaWYgKHNpemVrKSB7CisJCXdoaWxlIChyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWsgPiAoYmFzZWsgKyBzaXplaykpIHsKKwkJCWlmIChyYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspCisJCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOworCQkJZWxzZQorCQkJCXJhbmdlMF9zaXplayA9IDA7CisKKwkJCWlmICghcmFuZ2UwX3NpemVrKQorCQkJCWJyZWFrOworCQl9CisJfQorCitzZWNvbmRfdHJ5OgorCXJhbmdlX2Jhc2VrID0gcmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrOworCisJLyogb25lIGhvbGUgaW4gdGhlIG1pZGRsZSAqLworCWlmIChyYW5nZV9iYXNlayA+IGJhc2VrICYmIHJhbmdlX2Jhc2VrIDw9IChiYXNlayArIHNpemVrKSkKKwkJc2Vjb25kX3NpemVrID0gcmFuZ2VfYmFzZWsgLSBiYXNlazsKKworCWlmIChyYW5nZTBfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKworCQkvKiBvbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgZW5kICovCisJCWhvbGVfc2l6ZWsgPSByYW5nZTBfc2l6ZWsgLSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7CisKKwkJLyogaG9sZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gaGFsZiBvZiByYW5nZTAgc2l6ZSAqLworCQlpZiAoaG9sZV9zaXplayA+PSAocmFuZ2UwX3NpemVrID4+IDEpICYmCisJCSAgICByYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspIHsKKwkJCXJhbmdlMF9zaXplayAtPSBjaHVua19zaXplazsKKwkJCXNlY29uZF9zaXplayA9IDA7CisJCQlob2xlX3NpemVrID0gMDsKKworCQkJZ290byBzZWNvbmRfdHJ5OworCQl9CisJfQorCisJaWYgKHJhbmdlMF9zaXplaykgeworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2UwOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKKwkJCQkocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCisJCQkJcmFuZ2UwX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKKwl9CisKKwlpZiAocmFuZ2UwX3NpemVrIDwgc3RhdGUtPnJhbmdlX3NpemVrKSB7CisJCS8qIG5lZWQgdG8gaGFuZGxlIGxlZnQgb3ZlciAqLworCQlyYW5nZV9zaXplayA9IHN0YXRlLT5yYW5nZV9zaXplayAtIHJhbmdlMF9zaXplazsKKworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VfYmFzZWs8PDEwLAorCQkJCSAocmFuZ2VfYmFzZWsgKyByYW5nZV9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2VfYmFzZWssCisJCQkJIHJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKKwl9CisKKwlpZiAoaG9sZV9zaXplaykgeworCQlob2xlX2Jhc2VrID0gcmFuZ2VfYmFzZWsgLSBob2xlX3NpemVrIC0gc2Vjb25kX3NpemVrOworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSBob2xlX2Jhc2VrPDwxMCwKKwkJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCBob2xlX2Jhc2VrLAorCQkJCSBob2xlX3NpemVrLCBNVFJSX1RZUEVfVU5DQUNIQUJMRSk7CisJfQorCisJcmV0dXJuIHNlY29uZF9zaXplazsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzZXRfdmFyX210cnJfcmFuZ2Uoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlX3BmbiwKKwkJICAgdW5zaWduZWQgbG9uZyBzaXplX3BmbikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9zaXplayA9IDA7CisKKwlpZiAoc3RhdGUtPnJlZyA+PSBudW1fdmFyX3JhbmdlcykKKwkJcmV0dXJuOworCisJYmFzZWsgPSBiYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwlzaXplayA9IHNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCisJLyogU2VlIGlmIEkgY2FuIG1lcmdlIHdpdGggdGhlIGxhc3QgcmFuZ2UgKi8KKwlpZiAoKGJhc2VrIDw9IDEwMjQpIHx8CisJICAgIChzdGF0ZS0+cmFuZ2Vfc3RhcnRrICsgc3RhdGUtPnJhbmdlX3NpemVrID09IGJhc2VrKSkgeworCQl1bnNpZ25lZCBsb25nIGVuZGsgPSBiYXNlayArIHNpemVrOworCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSBlbmRrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKKwkJcmV0dXJuOworCX0KKwkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnMgKi8KKwlpZiAoc3RhdGUtPnJhbmdlX3NpemVrICE9IDApCisJCXNlY29uZF9zaXplayA9IHJhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0YXRlLCBiYXNlaywgc2l6ZWspOworCisJLyogQWxsb2NhdGUgYW4gbXNyICovCisJc3RhdGUtPnJhbmdlX3N0YXJ0ayA9IGJhc2VrICsgc2Vjb25kX3NpemVrOworCXN0YXRlLT5yYW5nZV9zaXplayAgPSBzaXplayAtIHNlY29uZF9zaXplazsKK30KKworLyogbWluaW51bSBzaXplIG9mIG10cnIgYmxvY2sgdGhhdCBjYW4gdGFrZSBob2xlICovCitzdGF0aWMgdTY0IG10cnJfY2h1bmtfc2l6ZSBfX2luaXRkYXRhID0gKDI1NlVMTDw8MjApOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KGNoYXIgKnApCit7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdHJyX2NodW5rX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibXRycl9jaHVua19zaXplIiwgcGFyc2VfbXRycl9jaHVua19zaXplX29wdCk7CisKKy8qIGdyYW5pdHkgb2YgbXRyciBvZiBibG9jayAqLworc3RhdGljIHU2NCBtdHJyX2dyYW5fc2l6ZSBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQoY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAtRUlOVkFMOworCW10cnJfZ3Jhbl9zaXplID0gbWVtcGFyc2UocCwgJnApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm10cnJfZ3Jhbl9zaXplIiwgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KTsKKworc3RhdGljIGludCBucl9tdHJyX3NwYXJlX3JlZyBfX2luaXRkYXRhID0KKwkJCQkgQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX3NwYXJlX3JlZyhjaGFyICphcmcpCit7CisJaWYgKGFyZykKKwkJbnJfbXRycl9zcGFyZV9yZWcgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7CisKK3N0YXRpYyBpbnQgX19pbml0Cit4ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCisJCSAgICB1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSkKK3sKKwlzdHJ1Y3QgdmFyX210cnJfc3RhdGUgdmFyX3N0YXRlOworCWludCBpOworCWludCBudW1fcmVnOworCisJdmFyX3N0YXRlLnJhbmdlX3N0YXJ0awk9IDA7CisJdmFyX3N0YXRlLnJhbmdlX3NpemVrCT0gMDsKKwl2YXJfc3RhdGUucmVnCQk9IDA7CisJdmFyX3N0YXRlLmNodW5rX3NpemVrCT0gY2h1bmtfc2l6ZSA+PiAxMDsKKwl2YXJfc3RhdGUuZ3Jhbl9zaXplawk9IGdyYW5fc2l6ZSA+PiAxMDsKKworCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CisKKwkvKiBXcml0ZSB0aGUgcmFuZ2UgZXRjICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXNldF92YXJfbXRycl9yYW5nZSgmdmFyX3N0YXRlLCByYW5nZVtpXS5zdGFydCwKKwkJCQkgICByYW5nZVtpXS5lbmQgLSByYW5nZVtpXS5zdGFydCArIDEpOworCisJLyogV3JpdGUgdGhlIGxhc3QgcmFuZ2UgKi8KKwlpZiAodmFyX3N0YXRlLnJhbmdlX3NpemVrICE9IDApCisJCXJhbmdlX3RvX210cnJfd2l0aF9ob2xlKCZ2YXJfc3RhdGUsIDAsIDApOworCisJbnVtX3JlZyA9IHZhcl9zdGF0ZS5yZWc7CisJLyogQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3MgKi8KKwl3aGlsZSAodmFyX3N0YXRlLnJlZyA8IG51bV92YXJfcmFuZ2VzKSB7CisJCXNhdmVfdmFyX210cnIodmFyX3N0YXRlLnJlZywgMCwgMCwgMCk7CisJCXZhcl9zdGF0ZS5yZWcrKzsKKwl9CisKKwlyZXR1cm4gbnVtX3JlZzsKK30KKworc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKKwl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcgbG9zZV9jb3Zlcl9zaXplazsKKwl1bnNpZ25lZCBpbnQgbnVtX3JlZzsKKwlpbnQgYmFkOworfTsKKworLyoKKyAqIGdyYW5fc2l6ZTogNjRLLCAxMjhLLCAyNTZLLCA1MTJLLCAxTSwgMk0sIC4uLiwgMkcKKyAqIGNodW5rIHNpemU6IGdyYW5fc2l6ZSwgLi4uLCAyRworICogc28gd2UgbmVlZCAoMSsxNikqOAorICovCisjZGVmaW5lIE5VTV9SRVNVTFQJMTM2CisjZGVmaW5lIFBTSElGVAkJKFBBR0VfU0hJRlQgLSAxMCkKKworc3RhdGljIHN0cnVjdCBtdHJyX2NsZWFudXBfcmVzdWx0IF9faW5pdGRhdGEgcmVzdWx0W05VTV9SRVNVTFRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtaW5fbG9zc19wZm5bUkFOR0VfTlVNXTsKKworc3RhdGljIHZvaWQgX19pbml0IHByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKHZvaWQpCit7CisJaW50IGk7CisJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOworCW10cnJfdHlwZSB0eXBlOworCisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKworCQlzaXplX2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJaWYgKCFzaXplX2Jhc2UpCisJCQljb250aW51ZTsKKworCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplX2Jhc2UsICZzaXplX2ZhY3RvciksCisJCXN0YXJ0X2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHN0YXJ0X2Jhc2UsICZzdGFydF9mYWN0b3IpLAorCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAicmVnICVkLCBiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCisJCQlpLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCisJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAorCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpID8gIlVDIiA6CisJCQkgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpID8gIldQIiA6CisJCQkgICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKSkKKwkJCSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX25lZWRfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCW10cnJfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCisJaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOworCisJLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KKwltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCisJCQljb250aW51ZTsKKwkJaWYgKCFzaXplKQorCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOworCQlpZiAodHlwZSA9PSBNVFJSX1RZUEVfV1JQUk9UKQorCQkJdHlwZSA9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFOworCQludW1bdHlwZV0rKzsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBnb3QgVUMgZW50cmllcyAqLworCWlmICghbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KKwlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQorCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcmFuZ2Vfc3VtczsKK3N0YXRpYyB2b2lkIF9faW5pdCBtdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCisJCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSwKKwkJCQkJIGludCBpKQoreworCWludCBudW1fcmVnOworCXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOworCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OworCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7CisKKwkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCisJbnVtX3JlZyA9IHg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLAorCQkJCQkJY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKKworCS8qIHdlIGdvdCBuZXcgc2V0dGluZyBpbiByYW5nZV9zdGF0ZSwgY2hlY2sgaXQgKi8KKwltZW1zZXQocmFuZ2VfbmV3LCAwLCBzaXplb2YocmFuZ2VfbmV3KSk7CisJbnJfcmFuZ2VfbmV3ID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZV9uZXcsIDAsCisJCQkJZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplKTsKKwlyYW5nZV9zdW1zX25ldyA9IHN1bV9yYW5nZXMocmFuZ2VfbmV3LCBucl9yYW5nZV9uZXcpOworCisJcmVzdWx0W2ldLmNodW5rX3NpemVrID0gY2h1bmtfc2l6ZSA+PiAxMDsKKwlyZXN1bHRbaV0uZ3Jhbl9zaXplayA9IGdyYW5fc2l6ZSA+PiAxMDsKKwlyZXN1bHRbaV0ubnVtX3JlZyA9IG51bV9yZWc7CisJaWYgKHJhbmdlX3N1bXMgPCByYW5nZV9zdW1zX25ldykgeworCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9CisJCQkocmFuZ2Vfc3Vtc19uZXcgLSByYW5nZV9zdW1zKSA8PCBQU0hJRlQ7CisJCXJlc3VsdFtpXS5iYWQgPSAxOworCX0gZWxzZQorCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9CisJCQkocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7CisKKwkvKiBkb3VibGUgY2hlY2sgaXQgKi8KKwlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7CisJCWlmIChucl9yYW5nZV9uZXcgIT0gbnJfcmFuZ2UgfHwKKwkJCW1lbWNtcChyYW5nZSwgcmFuZ2VfbmV3LCBzaXplb2YocmFuZ2UpKSkKKwkJCQlyZXN1bHRbaV0uYmFkID0gMTsKKwl9CisKKwlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgKHJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldyA8CisJCQkJbWluX2xvc3NfcGZuW251bV9yZWddKSkgeworCQltaW5fbG9zc19wZm5bbnVtX3JlZ10gPQorCQkJcmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3OworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IG10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaW50IGkpCit7CisJY2hhciBncmFuX2ZhY3RvciwgY2h1bmtfZmFjdG9yLCBsb3NlX2ZhY3RvcjsKKwl1bnNpZ25lZCBsb25nIGdyYW5fYmFzZSwgY2h1bmtfYmFzZSwgbG9zZV9iYXNlOworCisJZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCisJY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCisJbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCisJcHJpbnRrKEtFUk5fSU5GTyAiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAorCQkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCisJCQlncmFuX2Jhc2UsIGdyYW5fZmFjdG9yLCBjaHVua19iYXNlLCBjaHVua19mYWN0b3IpOworCXByaW50ayhLRVJOX0NPTlQgIm51bV9yZWc6ICVkICBcdGxvc2UgY292ZXIgUkFNOiAlcyVsZCVjXG4iLAorCQkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKKwkJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KHZvaWQpCit7CisJaW50IGk7CisJaW50IG51bV9yZWdfZ29vZDsKKwlpbnQgaW5kZXhfZ29vZDsKKworCWlmIChucl9tdHJyX3NwYXJlX3JlZyA+PSBudW1fdmFyX3JhbmdlcykKKwkJbnJfbXRycl9zcGFyZV9yZWcgPSBudW1fdmFyX3JhbmdlcyAtIDE7CisJbnVtX3JlZ19nb29kID0gLTE7CisJZm9yIChpID0gbnVtX3Zhcl9yYW5nZXMgLSBucl9tdHJyX3NwYXJlX3JlZzsgaSA+IDA7IGktLSkgeworCQlpZiAoIW1pbl9sb3NzX3BmbltpXSkKKwkJCW51bV9yZWdfZ29vZCA9IGk7CisJfQorCisJaW5kZXhfZ29vZCA9IC0xOworCWlmIChudW1fcmVnX2dvb2QgIT0gLTEpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykgeworCQkJaWYgKCFyZXN1bHRbaV0uYmFkICYmCisJCQkgICAgcmVzdWx0W2ldLm51bV9yZWcgPT0gbnVtX3JlZ19nb29kICYmCisJCQkgICAgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7CisJCQkJaW5kZXhfZ29vZCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gaW5kZXhfZ29vZDsKK30KKworCitpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCit7CisJdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplLCBkZWYsIGR1bW15OworCW10cnJfdHlwZSB0eXBlOworCXU2NCBjaHVua19zaXplLCBncmFuX3NpemU7CisJaW50IGluZGV4X2dvb2Q7CisJaW50IGk7CisKKwlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZW5hYmxlX210cnJfY2xlYW51cCA8IDEpCisJCXJldHVybiAwOworCXJkbXNyKE1UUlJkZWZUeXBlX01TUiwgZGVmLCBkdW1teSk7CisJZGVmICY9IDB4ZmY7CisJaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCisJbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7CisJCXJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuID0gYmFzZTsKKwkJcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPSBzaXplOworCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIGhhbmRsZSBpdCBhbmQgY2FuIGhhbmRsZSBpdCAqLworCWlmICghbXRycl9uZWVkX2NsZWFudXAoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBwcmludCBvcmlnaW5hbCB2YXIgTVRSUnMgYXQgZmlyc3QsIGZvciBkZWJ1Z2dpbmc6ICovCisJcHJpbnRrKEtFUk5fREVCVUcgIm9yaWdpbmFsIHZhcmlhYmxlIE1UUlJzXG4iKTsKKwlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOworCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKKwlleHRyYV9yZW1vdmVfc2l6ZSA9IDA7CisJZXh0cmFfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOworCWlmIChtdHJyX3RvbTIpCisJCWV4dHJhX3JlbW92ZV9zaXplID0KKwkJCShtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSBleHRyYV9yZW1vdmVfYmFzZTsKKwlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCQkgIGV4dHJhX3JlbW92ZV9zaXplKTsKKwkvKgorCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcnJlZCBieSB2YXIgbXRyciB3aXRoIFdCCisJICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdGl2ZSBiZWZvcmUgdmFyIG10cnIgZm9yIGl0CisJICovCisJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCisJCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKKwkvKiBzb3J0IHRoZSByYW5nZXMgKi8KKwlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOworCisJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCisJICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOworCisJaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgeworCQlpID0gMDsKKwkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKG10cnJfY2h1bmtfc2l6ZSwgbXRycl9ncmFuX3NpemUsCisJCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKKworCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOworCisJCWlmICghcmVzdWx0W2ldLmJhZCkgeworCQkJc2V0X3Zhcl9tdHJyX2FsbChhZGRyZXNzX2JpdHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7CisJCQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW52YWxpZCBtdHJyX2dyYW5fc2l6ZSBvciBtdHJyX2NodW5rX3NpemUsICIKKwkJICAgICAgICJ3aWxsIGZpbmQgb3B0aW1hbCBvbmVcbiIpOworCX0KKworCWkgPSAwOworCW1lbXNldChtaW5fbG9zc19wZm4sIDB4ZmYsIHNpemVvZihtaW5fbG9zc19wZm4pKTsKKwltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisJZm9yIChncmFuX3NpemUgPSAoMVVMTDw8MTYpOyBncmFuX3NpemUgPCAoMVVMTDw8MzIpOyBncmFuX3NpemUgPDw9IDEpIHsKKworCQlmb3IgKGNodW5rX3NpemUgPSBncmFuX3NpemU7IGNodW5rX3NpemUgPCAoMVVMTDw8MzIpOworCQkgICAgIGNodW5rX3NpemUgPDw9IDEpIHsKKworCQkJaWYgKGkgPj0gTlVNX1JFU1VMVCkKKwkJCQljb250aW51ZTsKKworCQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKGNodW5rX3NpemUsIGdyYW5fc2l6ZSwKKwkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOworCQkJaWYgKGRlYnVnX3ByaW50KSB7CisJCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOworCQkJfQorCisJCQlpKys7CisJCX0KKwl9CisKKwkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleCAqLworCWluZGV4X2dvb2QgPSBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KCk7CisKKwlpZiAoaW5kZXhfZ29vZCAhPSAtMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBvcHRpbWFsIHNldHRpbmcgZm9yIG10cnIgY2xlYW4gdXBcbiIpOworCQlpID0gaW5kZXhfZ29vZDsKKwkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKworCQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCisJCWNodW5rX3NpemUgPSByZXN1bHRbaV0uY2h1bmtfc2l6ZWs7CisJCWNodW5rX3NpemUgPDw9IDEwOworCQlncmFuX3NpemUgPSByZXN1bHRbaV0uZ3Jhbl9zaXplazsKKwkJZ3Jhbl9zaXplIDw8PSAxMDsKKwkJeDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsIGNodW5rX3NpemUsIGdyYW5fc2l6ZSk7CisJCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7CisJCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIHByaW50IG91dCBhbGwgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykKKwkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAibXRycl9jbGVhbnVwOiBjYW4gbm90IGZpbmQgb3B0aW1hbCB2YWx1ZVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHNwZWNpZnkgbXRycl9ncmFuX3NpemUvbXRycl9jaHVua19zaXplXG4iKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK2ludCBfX2luaXQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGRpc2FibGVfbXRycl90cmltOworCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfdHJpbV9zZXR1cChjaGFyICpzdHIpCit7CisJZGlzYWJsZV9tdHJyX3RyaW0gPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVfbXRycl90cmltIiwgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXApOworCisvKgorICogTmV3ZXIgQU1EIEs4cyBhbmQgbGF0ZXIgQ1BVcyBoYXZlIGEgc3BlY2lhbCBtYWdpYyBNU1Igd2F5IHRvIGZvcmNlIFdCCisgKiBmb3IgbWVtb3J5ID40R0IuIENoZWNrIGZvciB0aGF0IGhlcmUuCisgKiBOb3RlIHRoaXMgd29uJ3QgY2hlY2sgaWYgdGhlIE1UUlJzIDwgNEdCIHdoZXJlIHRoZSBtYWdpYyBiaXQgZG9lc24ndAorICogYXBwbHkgdG8gYXJlIHdyb25nLCBidXQgc28gZmFyIHdlIGRvbid0IGtub3cgb2YgYW55IHN1Y2ggY2FzZSBpbiB0aGUgd2lsZC4KKyAqLworI2RlZmluZSBUb20yRW5hYmxlZCAoMVUgPDwgMjEpCisjZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQiAoMVUgPDwgMjIpCisKK2ludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCit7CisJdTMyIGwsIGg7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQorCQlyZXR1cm4gMDsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCAweGYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDExKQorCQlyZXR1cm4gMDsKKwkvKiBJbiBjYXNlIHNvbWUgaHlwZXJ2aXNvciBkb2Vzbid0IHBhc3MgU1lTQ0ZHIHRocm91Z2ggKi8KKwlpZiAocmRtc3Jfc2FmZShNU1JfSzhfU1lTQ0ZHLCAmbCwgJmgpIDwgMCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBNZW1vcnkgYmV0d2VlbiA0R0IgYW5kIHRvcCBvZiBtZW0gaXMgZm9yY2VkIFdCIGJ5IHRoaXMgbWFnaWMgYml0LgorCSAqIFJlc2VydmVkIGJlZm9yZSBLOFJldkYsIGJ1dCBzaG91bGQgYmUgemVybyB0aGVyZS4KKwkgKi8KKwlpZiAoKGwgJiAoVG9tMkVuYWJsZWQgfCBUb20yRm9yY2VNZW1UeXBlV0IpKSA9PQorCQkgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgX19pbml0IHJlYWxfdHJpbV9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCit7CisJdTY0IHRyaW1fc3RhcnQsIHRyaW1fc2l6ZTsKKwl0cmltX3N0YXJ0ID0gc3RhcnRfcGZuOworCXRyaW1fc3RhcnQgPDw9IFBBR0VfU0hJRlQ7CisJdHJpbV9zaXplID0gbGltaXRfcGZuOworCXRyaW1fc2l6ZSA8PD0gUEFHRV9TSElGVDsKKwl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKKworCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAorCQkJCUU4MjBfUkVTRVJWRUQpOworfQorLyoqCisgKiBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5IC0gdHJpbSBSQU0gbm90IGNvdmVyZWQgYnkgTVRSUnMKKyAqIEBlbmRfcGZuOiBlbmRpbmcgcGFnZSBmcmFtZSBudW1iZXIKKyAqCisgKiBTb21lIGJ1Z2d5IEJJT1NlcyBkb24ndCBzZXR1cCB0aGUgTVRSUnMgcHJvcGVybHkgZm9yIHN5c3RlbXMgd2l0aCBjZXJ0YWluCisgKiBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoYXQgdGhlIGhpZ2hlc3QgTVRSUiBtYXRjaGVzCisgKiB0aGUgZW5kIG9mIG1lbW9yeSwgdG8gbWFrZSBzdXJlIHRoZSBNVFJScyBoYXZpbmcgYSB3cml0ZSBiYWNrIHR5cGUgY292ZXIKKyAqIGFsbCBvZiB0aGUgbWVtb3J5IHRoZSBrZXJuZWwgaXMgaW50ZW5kaW5nIHRvIHVzZS4gSWYgbm90LCBpdCdsbCB0cmltIGFueQorICogbWVtb3J5IG9mZiB0aGUgZW5kIGJ5IGFkanVzdGluZyBlbmRfcGZuLCByZW1vdmluZyBpdCBmcm9tIHRoZSBrZXJuZWwncworICogYWxsb2NhdGlvbiBwb29scywgd2FybmluZyB0aGUgdXNlciB3aXRoIGFuIG9ibm94aW91cyBtZXNzYWdlLgorICovCitpbnQgX19pbml0IG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZSwgaGlnaGVzdF9wZm4gPSAwLCBkZWYsIGR1bW15OworCW10cnJfdHlwZSB0eXBlOworCXU2NCB0b3RhbF90cmltX3NpemU7CisKKwkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCisJaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOworCS8qCisJICogTWFrZSBzdXJlIHdlIG9ubHkgdHJpbSB1bmNhY2hhYmxlIG1lbW9yeSBvbiBtYWNoaW5lcyB0aGF0CisJICogc3VwcG9ydCB0aGUgSW50ZWwgTVRSUiBhcmNoaXRlY3R1cmU6CisJICovCisJaWYgKCFpc19jcHUoSU5URUwpIHx8IGRpc2FibGVfbXRycl90cmltKQorCQlyZXR1cm4gMDsKKwlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOworCWRlZiAmPSAweGZmOworCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCisJCXJldHVybiAwOworCisJLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLworCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOworCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7CisJCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKKwkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7CisJfQorCisJLyogRmluZCBoaWdoZXN0IGNhY2hlZCBwZm4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKKwkJCWNvbnRpbnVlOworCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKGhpZ2hlc3RfcGZuIDwgYmFzZSArIHNpemUpCisJCQloaWdoZXN0X3BmbiA9IGJhc2UgKyBzaXplOworCX0KKworCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLworCWlmICghaGlnaGVzdF9wZm4pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIE1UUlJzIGFsbCBibGFuayAtIHZpcnR1YWxpemVkIHN5c3RlbS5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLworCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCisJCQljb250aW51ZTsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlpZiAoIXNpemUpCisJCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7CisJCW51bVt0eXBlXSsrOworCX0KKworCS8qIG5vIGVudHJ5IGZvciBXQj8gKi8KKwlpZiAoIW51bVtNVFJSX1RZUEVfV1JCQUNLXSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KKwlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQorCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCisJCXJldHVybiAwOworCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKKwlucl9yYW5nZSA9IDA7CisJaWYgKG10cnJfdG9tMikgeworCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOworCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7CisJCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQorCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKKwkJbnJfcmFuZ2UrKzsKKwl9CisJbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgMCwgMCk7CisKKwl0b3RhbF90cmltX3NpemUgPSAwOworCS8qIGNoZWNrIHRoZSBoZWFkICovCisJaWYgKHJhbmdlWzBdLnN0YXJ0KQorCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeSgwLCByYW5nZVswXS5zdGFydCk7CisJLyogY2hlY2sgdGhlIGhvbGVzICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7CisJCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgcmFuZ2VbaSsxXS5zdGFydCkKKwkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCisJCQkJCQkJICAgIHJhbmdlW2krMV0uc3RhcnQpOworCX0KKwkvKiBjaGVjayB0aGUgdG9wICovCisJaSA9IG5yX3JhbmdlIC0gMTsKKwlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IGVuZF9wZm4pCisJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCisJCQkJCQkJIGVuZF9wZm4pOworCisJaWYgKHRvdGFsX3RyaW1fc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIgorCQkJIiBhbGwgb2YgbWVtb3J5LCBsb3NpbmcgJWxsdU1CIG9mIFJBTS5cbiIsCisJCQl0b3RhbF90cmltX3NpemUgPj4gMjApOworCisJCWlmICghY2hhbmdlZF9ieV9tdHJyX2NsZWFudXApCisJCQlXQVJOX09OKDEpOworCisJCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKKwkJdXBkYXRlX2U4MjAoKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggMGMwYTQ1NS4uMzdmMjhmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0zMywxMyArMzMsMzEgQEAKIHN0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZSA9IHt9OwogRVhQT1JUX1NZTUJPTF9HUEwobXRycl9zdGF0ZSk7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBtdHJyX3Nob3c7Ci1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2RlYnVnKGNoYXIgKm9wdCkKKy8qKgorICogQklPUyBpcyBleHBlY3RlZCB0byBjbGVhciBNdHJyRml4RHJhbU1vZEVuIGJpdCwgc2VlIGZvciBleGFtcGxlCisgKiAiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciB0aGUgQU1EIEF0aGxvbiA2NCBhbmQgQU1ECisgKiBPcHRlcm9uIFByb2Nlc3NvcnMiICgyNjA5NCBSZXYuIDMuMzAgRmVicnVhcnkgMjAwNiksIHNlY3Rpb24KKyAqICIxMy4yLjEuMiBTWVNDRkcgUmVnaXN0ZXIiOiAiVGhlIE10cnJGaXhEcmFtTW9kRW4gYml0IHNob3VsZCBiZSBzZXQKKyAqIHRvIDEgZHVyaW5nIEJJT1MgaW5pdGFsaXphdGlvbiBvZiB0aGUgZml4ZWQgTVRSUnMsIHRoZW4gY2xlYXJlZCB0bworICogMCBmb3Igb3BlcmF0aW9uLiIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbih2b2lkKQogewotCW10cnJfc2hvdyA9IDE7Ci0JcmV0dXJuIDA7CisJdTMyIGxvLCBoaTsKKworCWlmICghKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmCisJICAgICAgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MGYpKSkKKwkJcmV0dXJuOworCisJcmRtc3IoTVNSX0s4X1NZU0NGRywgbG8sIGhpKTsKKwlpZiAobG8gJiBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEZXX1dBUk4gIk1UUlI6IENQVSAldTogU1lTQ0ZHW010cnJGaXhEcmFtTW9kRW5dIgorCQkgICAgICAgIiBub3QgY2xlYXJlZCBieSBCSU9TLCBjbGVhcmluZyB0aGlzIGJpdFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWxvICY9IH5LOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlk7CisJCW10cnJfd3Jtc3IoTVNSX0s4X1NZU0NGRywgbG8sIGhpKTsKKwl9CiB9Ci1lYXJseV9wYXJhbSgibXRyci5zaG93IiwgbXRycl9kZWJ1Zyk7CiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgTVRSUiB0eXBlIGZvciB0aGUgcmVnaW9uCkBAIC0xNzQsNiArMTkyLDggQEAKIAl1bnNpZ25lZCBpbnQgKnAgPSAodW5zaWduZWQgaW50ICopIGZyczsKIAlpbnQgaTsKIAorCWs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbigpOworCiAJcmRtc3IoTVRSUmZpeDY0S18wMDAwMF9NU1IsIHBbMF0sIHBbMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKQEAgLTE4OCwxOCArMjA4LDk0IEBACiAJCWdldF9maXhlZF9yYW5nZXMobXRycl9zdGF0ZS5maXhlZF9yYW5nZXMpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9maXhlZCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBzdGVwLCBjb25zdCBtdHJyX3R5cGUqdHlwZXMpCitzdGF0aWMgdW5zaWduZWQgX19pbml0ZGF0YSBsYXN0X2ZpeGVkX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIF9faW5pdGRhdGEgbGFzdF9maXhlZF9lbmQ7CitzdGF0aWMgbXRycl90eXBlIF9faW5pdGRhdGEgbGFzdF9maXhlZF90eXBlOworCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZml4ZWRfbGFzdCh2b2lkKQoreworCWlmICghbGFzdF9maXhlZF9lbmQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIgICUwNVgtJTA1WCAlc1xuIiwgbGFzdF9maXhlZF9zdGFydCwKKwkJbGFzdF9maXhlZF9lbmQgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIobGFzdF9maXhlZF90eXBlKSk7CisKKwlsYXN0X2ZpeGVkX2VuZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfZml4ZWRfbGFzdCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBlbmQsCisJCQkJICAgICAgIG10cnJfdHlwZSB0eXBlKQoreworCWxhc3RfZml4ZWRfc3RhcnQgPSBiYXNlOworCWxhc3RfZml4ZWRfZW5kID0gZW5kOworCWxhc3RfZml4ZWRfdHlwZSA9IHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9maXhlZCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBzdGVwLAorCQkJICAgICAgIGNvbnN0IG10cnJfdHlwZSAqdHlwZXMpCiB7CiAJdW5zaWduZWQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCA4OyArK2ksICsrdHlwZXMsIGJhc2UgKz0gc3RlcCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAlMDVYLSUwNVggJXNcbiIsCi0JCQliYXNlLCBiYXNlICsgc3RlcCAtIDEsIG10cnJfYXR0cmliX3RvX3N0cigqdHlwZXMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpLCArK3R5cGVzLCBiYXNlICs9IHN0ZXApIHsKKwkJaWYgKGxhc3RfZml4ZWRfZW5kID09IDApIHsKKwkJCXVwZGF0ZV9maXhlZF9sYXN0KGJhc2UsIGJhc2UgKyBzdGVwLCAqdHlwZXMpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxhc3RfZml4ZWRfZW5kID09IGJhc2UgJiYgbGFzdF9maXhlZF90eXBlID09ICp0eXBlcykgeworCQkJbGFzdF9maXhlZF9lbmQgPSBiYXNlICsgc3RlcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIG5ldyBzZWdtZW50czogZ2FwIG9yIGRpZmZlcmVudCB0eXBlICovCisJCXByaW50X2ZpeGVkX2xhc3QoKTsKKwkJdXBkYXRlX2ZpeGVkX2xhc3QoYmFzZSwgYmFzZSArIHN0ZXAsICp0eXBlcyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NldCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBvc3Rfc2V0KHZvaWQpOwogCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfbXRycl9zdGF0ZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWludCBoaWdoX3dpZHRoOworCisJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZGVmYXVsdCB0eXBlOiAlc1xuIiwKKwkJCSBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOworCWlmIChtdHJyX3N0YXRlLmhhdmVfZml4ZWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZml4ZWQgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMSA/ICJlbiIgOiAiZGlzIik7CisJCXByaW50X2ZpeGVkKDB4MDAwMDAsIDB4MTAwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgMCk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpCisJCQlwcmludF9maXhlZCgweDgwMDAwICsgaSAqIDB4MjAwMDAsIDB4MDQwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAxKSAqIDgpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJcHJpbnRfZml4ZWQoMHhDMDAwMCArIGkgKiAweDA4MDAwLCAweDAxMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMykgKiA4KTsKKworCQkvKiB0YWlsICovCisJCXByaW50X2ZpeGVkX2xhc3QoKTsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgdmFyaWFibGUgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKKwloaWdoX3dpZHRoID0gKChzaXplX29yX21hc2sgPyBmZnMoc2l6ZV9vcl9tYXNrKSAtIDEgOiAzMikgLSAoMzIgLSBQQUdFX1NISUZUKSArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgeworCQlpZiAobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gJiAoMSA8PCAxMSkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCisJCQkgICAgICAgaSwKKwkJCSAgICAgICBoaWdoX3dpZHRoLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvID4+IDEyLAorCQkJICAgICAgIGhpZ2hfd2lkdGgsCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gPj4gMTIsCisJCQkgICAgICAgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgMHhmZikpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBkaXNhYmxlZFxuIiwgaSk7CisJfQorCWlmIChtdHJyX3RvbTIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRPTTI6ICUwMTZsbHggYWthICVsbGRNXG4iLAorCQkJCSAgbXRycl90b20yLCBtdHJyX3RvbTI+PjIwKTsKKwl9Cit9CisKIC8qICBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgICovCiB2b2lkIF9faW5pdCBnZXRfbXRycl9zdGF0ZSh2b2lkKQogewpAQCAtMjMxLDQxICszMjcsOSBAQAogCQltdHJyX3RvbTIgfD0gbG93OwogCQltdHJyX3RvbTIgJj0gMHhmZmZmZmY4MDAwMDBVTEw7CiAJfQotCWlmIChtdHJyX3Nob3cpIHsKLQkJaW50IGhpZ2hfd2lkdGg7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiBkZWZhdWx0IHR5cGU6ICVzXG4iLCBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOwotCQlpZiAobXRycl9zdGF0ZS5oYXZlX2ZpeGVkKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNVFJSIGZpeGVkIHJhbmdlcyAlc2FibGVkOlxuIiwKLQkJCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAxID8gImVuIiA6ICJkaXMiKTsKLQkJCXByaW50X2ZpeGVkKDB4MDAwMDAsIDB4MTAwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgMCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotCQkJCXByaW50X2ZpeGVkKDB4ODAwMDAgKyBpICogMHgyMDAwMCwgMHgwNDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDEpICogOCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQkJCXByaW50X2ZpeGVkKDB4QzAwMDAgKyBpICogMHgwODAwMCwgMHgwMTAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDMpICogOCk7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiB2YXJpYWJsZSByYW5nZXMgJXNhYmxlZDpcbiIsCi0JCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKLQkJaGlnaF93aWR0aCA9ICgoc2l6ZV9vcl9tYXNrID8gZmZzKHNpemVfb3JfbWFzaykgLSAxIDogMzIpIC0gKDMyIC0gUEFHRV9TSElGVCkgKyAzKSAvIDQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7Ci0JCQlpZiAobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gJiAoMSA8PCAxMSkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCi0JCQkJICAgICAgIGksCi0JCQkJICAgICAgIGhpZ2hfd2lkdGgsCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAotCQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyA+PiAxMiwKLQkJCQkgICAgICAgaGlnaF93aWR0aCwKLQkJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvID4+IDEyLAotCQkJCSAgICAgICBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmKSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAldSBkaXNhYmxlZFxuIiwgaSk7Ci0JCX0KLQkJaWYgKG10cnJfdG9tMikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsCi0JCQkJCSAgbXRycl90b20yLCBtdHJyX3RvbTI+PjIwKTsKLQkJfQotCX0KKwlwcmludF9tdHJyX3N0YXRlKCk7CisKIAltdHJyX3N0YXRlX3NldCA9IDE7CiAKIAkvKiBQQVQgc2V0dXAgZm9yIEJQLiBXZSBuZWVkIHRvIGdvIHRocm91Z2ggc3luYyBzdGVwcyBoZXJlICovCkBAIC0zMDgsMjcgKzM3MiwxMCBAQAogfQogCiAvKioKLSAqIEVuYWJsZSBhbmQgYWxsb3cgcmVhZC93cml0ZSBvZiBleHRlbmRlZCBmaXhlZC1yYW5nZSBNVFJSIGJpdHMgb24gSzggQ1BVcwotICogc2VlIEFNRCBwdWJsaWNhdGlvbiBuby4gMjQ1OTMsIGNoYXB0ZXIgMy4yLjEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGs4X2VuYWJsZV9maXhlZF9pb3Jycyh2b2lkKQotewotCXVuc2lnbmVkIGxvLCBoaTsKLQotCXJkbXNyKE1TUl9LOF9TWVNDRkcsIGxvLCBoaSk7Ci0JbXRycl93cm1zcihNU1JfSzhfU1lTQ0ZHLCBsbwotCQkJCXwgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFCi0JCQkJfCBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlksIGhpKTsKLX0KLQotLyoqCiAgKiBzZXRfZml4ZWRfcmFuZ2UgLSBjaGVja3MgJiB1cGRhdGVzIGEgZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0IHNob3VsZCBoYXZlCiAgKiBAbXNyOiBNU1IgYWRkcmVzcyBvZiB0aGUgTVRUUiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhbmQgdXBkYXRlZAogICogQGNoYW5nZWQ6IHBvaW50ZXIgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIE1UUlIgbmVlZGVkIHRvIGJlIGNoYW5nZWQKICAqIEBtc3J3b3JkczogcG9pbnRlciB0byB0aGUgTVNSIHZhbHVlcyB3aGljaCB0aGUgTVNSIHNob3VsZCBoYXZlCi0gKgotICogSWYgSzggZXh0ZW50aW9ucyBhcmUgd2FudGVkLCB1cGRhdGUgdGhlIEs4IFNZU0NGRyBNU1IgYWxzby4KLSAqIFNlZSBBTUQgcHVibGljYXRpb24gbm8uIDI0NTkzLCBjaGFwdGVyIDcuOC4xLCBwYWdlIDIzMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIHZvaWQgc2V0X2ZpeGVkX3JhbmdlKGludCBtc3IsIGJvb2wgKmNoYW5nZWQsIHVuc2lnbmVkIGludCAqbXNyd29yZHMpCiB7CkBAIC0zMzcsMTAgKzM4NCw2IEBACiAJcmRtc3IobXNyLCBsbywgaGkpOwogCiAJaWYgKGxvICE9IG1zcndvcmRzWzBdIHx8IGhpICE9IG1zcndvcmRzWzFdKSB7Ci0JCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLQkJICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweDBmICYmIGJvb3RfY3B1X2RhdGEueDg2IDw9IDB4MTEpICYmCi0JCSAgICAoKG1zcndvcmRzWzBdIHwgbXNyd29yZHNbMV0pICYgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLKSkKLQkJCWs4X2VuYWJsZV9maXhlZF9pb3JycygpOwogCQltdHJyX3dybXNyKG1zciwgbXNyd29yZHNbMF0sIG1zcndvcmRzWzFdKTsKIAkJKmNoYW5nZWQgPSB0cnVlOwogCX0KQEAgLTM3NiwyMiArNDE5LDMxIEBACiB7CiAJdW5zaWduZWQgaW50IG1hc2tfbG8sIG1hc2tfaGksIGJhc2VfbG8sIGJhc2VfaGk7CiAJdW5zaWduZWQgaW50IHRtcCwgaGk7CisJaW50IGNwdTsKKworCS8qCisJICogZ2V0X210cnIgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSBtdHJyX3N0YXRlLCBhbHNvIGl0IGNvdWxkIGJlIGNhbGxlZAorCSAqIGZyb20gYW55IGNwdSwgc28gdHJ5IHRvIHByaW50IGl0IG91dCBkaXJlY3RseS4KKwkgKi8KKwljcHUgPSBnZXRfY3B1KCk7CiAKIAlyZG1zcihNVFJScGh5c01hc2tfTVNSKHJlZyksIG1hc2tfbG8sIG1hc2tfaGkpOworCiAJaWYgKChtYXNrX2xvICYgMHg4MDApID09IDApIHsKIAkJLyogIEludmFsaWQgKGkuZS4gZnJlZSkgcmFuZ2UgICovCiAJCSpiYXNlID0gMDsKIAkJKnNpemUgPSAwOwogCQkqdHlwZSA9IDA7Ci0JCXJldHVybjsKKwkJZ290byBvdXRfcHV0X2NwdTsKIAl9CiAKIAlyZG1zcihNVFJScGh5c0Jhc2VfTVNSKHJlZyksIGJhc2VfbG8sIGJhc2VfaGkpOwogCi0JLyogV29yayBvdXQgdGhlIHNoaWZ0ZWQgYWRkcmVzcyBtYXNrLiAqLworCS8qIFdvcmsgb3V0IHRoZSBzaGlmdGVkIGFkZHJlc3MgbWFzazogKi8KIAl0bXAgPSBtYXNrX2hpIDw8ICgzMiAtIFBBR0VfU0hJRlQpIHwgbWFza19sbyA+PiBQQUdFX1NISUZUOwogCW1hc2tfbG8gPSBzaXplX29yX21hc2sgfCB0bXA7Ci0JLyogRXhwYW5kIHRtcCB3aXRoIGhpZ2ggYml0cyB0byBhbGwgMXMqLworCisJLyogRXhwYW5kIHRtcCB3aXRoIGhpZ2ggYml0cyB0byBhbGwgMXM6ICovCiAJaGkgPSBmbHModG1wKTsKIAlpZiAoaGkgPiAwKSB7CiAJCXRtcCB8PSB+KCgxPDwoaGkgLSAxKSkgLSAxKTsKQEAgLTQwMiwxMSArNDU0LDE5IEBACiAJCX0KIAl9CiAKLQkvKiBUaGlzIHdvcmtzIGNvcnJlY3RseSBpZiBzaXplIGlzIGEgcG93ZXIgb2YgdHdvLCBpLmUuIGEKLQkgICBjb250aWd1b3VzIHJhbmdlLiAqLworCS8qCisJICogVGhpcyB3b3JrcyBjb3JyZWN0bHkgaWYgc2l6ZSBpcyBhIHBvd2VyIG9mIHR3bywgaS5lLiBhCisJICogY29udGlndW91cyByYW5nZToKKwkgKi8KIAkqc2l6ZSA9IC1tYXNrX2xvOwogCSpiYXNlID0gYmFzZV9oaSA8PCAoMzIgLSBQQUdFX1NISUZUKSB8IGJhc2VfbG8gPj4gUEFHRV9TSElGVDsKIAkqdHlwZSA9IGJhc2VfbG8gJiAweGZmOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgZ2V0X210cnI6IGNwdSVkIHJlZyUwMmQgYmFzZT0lMDEwbHggc2l6ZT0lMDEwbHggJXNcbiIsCisJCQljcHUsIHJlZywgKmJhc2UsICpzaXplLAorCQkJbXRycl9hdHRyaWJfdG9fc3RyKCp0eXBlICYgMHhmZikpOworb3V0X3B1dF9jcHU6CisJcHV0X2NwdSgpOwogfQogCiAvKioKQEAgLTQxOSw2ICs0NzksOCBAQAogCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCWludCBibG9jaz0tMSwgcmFuZ2U7CiAKKwlrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4oKTsKKwogCXdoaWxlIChmaXhlZF9yYW5nZV9ibG9ja3NbKytibG9ja10ucmFuZ2VzKQogCSAgICBmb3IgKHJhbmdlPTA7IHJhbmdlIDwgZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5yYW5nZXM7IHJhbmdlKyspCiAJCXNldF9maXhlZF9yYW5nZShmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLmJhc2VfbXNyICsgcmFuZ2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IDRjNDIxNDYuLmZiNzNhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC0zNzcsMTAgKzM3Nyw2IEBACiAJLnJlbGVhc2UgPSBtdHJyX2Nsb3NlLAogfTsKIAotCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfbXRycjsKLQotCiBzdGF0aWMgaW50IG10cnJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAljaGFyIGZhY3RvcjsKQEAgLTQyMywxMSArNDE5LDcgQEAKIAkgICAgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJvY19yb290X210cnIgPQotCQlwcm9jX2NyZWF0ZSgibXRyciIsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLCAmbXRycl9mb3BzKTsKLQotCWlmIChwcm9jX3Jvb3RfbXRycikKLQkJcHJvY19yb290X210cnItPm93bmVyID0gVEhJU19NT0RVTEU7CisJcHJvY19jcmVhdGUoIm10cnIiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwgJm10cnJfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDIzNmE0MDEuLjAzY2RhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJdW5zaWduZWQgbG9uZwlsc2l6ZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl92YWx1ZSBtdHJyX3N0YXRlW01UUlJfTUFYX1ZBUl9SQU5HRVNdOworc3RhdGljIHN0cnVjdCBtdHJyX3ZhbHVlIG10cnJfdmFsdWVbTVRSUl9NQVhfVkFSX1JBTkdFU107CiAKIHN0YXRpYyBpbnQgbXRycl9zYXZlKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC01ODIsOSArNTgyLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCW10cnJfaWYtPmdldChpLAotCQkJICAgICAmbXRycl9zdGF0ZVtpXS5sYmFzZSwKLQkJCSAgICAgJm10cnJfc3RhdGVbaV0ubHNpemUsCi0JCQkgICAgICZtdHJyX3N0YXRlW2ldLmx0eXBlKTsKKwkJCSAgICAgJm10cnJfdmFsdWVbaV0ubGJhc2UsCisJCQkgICAgICZtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJICAgICAmbXRycl92YWx1ZVtpXS5sdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTk0LDExICs1OTQsMTEgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCWlmIChtdHJyX3N0YXRlW2ldLmxzaXplKSAKKwkJaWYgKG10cnJfdmFsdWVbaV0ubHNpemUpCiAJCQlzZXRfbXRycihpLAotCQkJCSBtdHJyX3N0YXRlW2ldLmxiYXNlLAotCQkJCSBtdHJyX3N0YXRlW2ldLmxzaXplLAotCQkJCSBtdHJyX3N0YXRlW2ldLmx0eXBlKTsKKwkJCQkgbXRycl92YWx1ZVtpXS5sYmFzZSwKKwkJCQkgbXRycl92YWx1ZVtpXS5sc2l6ZSwKKwkJCQkgbXRycl92YWx1ZVtpXS5sdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjEwLDEwNTggKzYxMCw3IEBACiAJLnJlc3VtZQkJPSBtdHJyX3Jlc3RvcmUsCiB9OwogCi0vKiBzaG91bGQgYmUgcmVsYXRlZCB0byBNVFJSX1ZBUl9SQU5HRVMgbnVtcyAqLwotI2RlZmluZSBSQU5HRV9OVU0gMjU2Ci0KLXN0cnVjdCByZXNfcmFuZ2UgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBvdXQgb2Ygc2xvdHMgKi8KLQlpZiAobnJfcmFuZ2UgPj0gUkFOR0VfTlVNKQotCQlyZXR1cm4gbnJfcmFuZ2U7Ci0KLQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSBzdGFydDsKLQlyYW5nZVtucl9yYW5nZV0uZW5kID0gZW5kOwotCi0JbnJfcmFuZ2UrKzsKLQotCXJldHVybiBucl9yYW5nZTsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWFkZF9yYW5nZV93aXRoX21lcmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpbnQgaTsKLQotCS8qIHRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7Ci0JCXVuc2lnbmVkIGxvbmcgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOwotCi0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJY29tbW9uX3N0YXJ0ID0gbWF4KHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4ocmFuZ2VbaV0uZW5kLCBlbmQpOwotCQlpZiAoY29tbW9uX3N0YXJ0ID4gY29tbW9uX2VuZCArIDEpCi0JCQljb250aW51ZTsKLQotCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOwotCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOwotCi0JCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7Ci0JCXJldHVybiBucl9yYW5nZTsKLQl9Ci0KLQkvKiBuZWVkIHRvIGFkZCB0aGF0ICovCi0JcmV0dXJuIGFkZF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIHN0YXJ0LCBlbmQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXN1YnRyYWN0X3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaiA9IDA7IGogPCBSQU5HRV9OVU07IGorKykgewotCQlpZiAoIXJhbmdlW2pdLmVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kKSB7Ci0JCQlyYW5nZVtqXS5zdGFydCA9IDA7Ci0JCQlyYW5nZVtqXS5lbmQgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kICYmCi0JCSAgICByYW5nZVtqXS5zdGFydCA8IGVuZCArIDEpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gZW5kICsgMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kICYmCi0JCSAgICByYW5nZVtqXS5lbmQgPiBzdGFydCAtIDEpIHsKLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHN0YXJ0ID4gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kKSB7Ci0JCQkvKiBmaW5kIHRoZSBuZXcgc3BhcmUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaSA8IFJBTkdFX05VTSkgewotCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKLQkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAicnVuIG9mIHNsb3QgaW4gcmFuZ2VzXG4iKTsKLQkJCX0KLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQotewotCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIxID0geDE7Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjIgPSB4MjsKLQlsb25nIHN0YXJ0MSwgc3RhcnQyOwotCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7Ci19Ci0KLXN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlX3BmbjsKLQl1bnNpZ25lZCBsb25nIHNpemVfcGZuOwotCW10cnJfdHlwZSB0eXBlOwotfTsKLQotc3RhdGljIHN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSBfX2luaXRkYXRhIHJhbmdlX3N0YXRlW1JBTkdFX05VTV07Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgZGVidWdfcHJpbnQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci14ODZfZ2V0X210cnJfbWVtX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemU7Ci0JbXRycl90eXBlIHR5cGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIGJhc2UsCi0JCQkJCQliYXNlICsgc2l6ZSAtIDEpOwotCX0KLQlpZiAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFdCIGNoZWNraW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiB0YWtlIG91dCBVQyByYW5nZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgJiYKLQkJICAgIHR5cGUgIT0gTVRSUl9UWVBFX1dSUFJPVCkKLQkJCWNvbnRpbnVlOwotCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCWlmICghc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBiYXNlLCBiYXNlICsgc2l6ZSAtIDEpOwotCX0KLQlpZiAoZXh0cmFfcmVtb3ZlX3NpemUpCi0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkgZXh0cmFfcmVtb3ZlX2Jhc2UgKyBleHRyYV9yZW1vdmVfc2l6ZSAgLSAxKTsKLQotCS8qIGdldCBuZXcgcmFuZ2UgbnVtICovCi0JbnJfcmFuZ2UgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQlpZiAoIXJhbmdlW2ldLmVuZCkKLQkJCWNvbnRpbnVlOwotCQlucl9yYW5nZSsrOwotCX0KLQlpZiAgKGRlYnVnX3ByaW50KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBVQyBjaGVja2luZ1xuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7Ci0JfQotCi0JLyogc29ydCB0aGUgcmFuZ2VzICovCi0Jc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKLQlpZiAgKGRlYnVnX3ByaW50KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBzb3J0aW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiBjbGVhciB0aG9zZSBpcyBub3QgdXNlZCAqLwotCWZvciAoaSA9IG5yX3JhbmdlOyBpIDwgUkFOR0VfTlVNOyBpKyspCi0JCW1lbXNldCgmcmFuZ2VbaV0sIDAsIHNpemVvZihyYW5nZVtpXSkpOwotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc19yYW5nZSBfX2luaXRkYXRhIHJhbmdlW1JBTkdFX05VTV07Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgbnJfcmFuZ2U7Ci0KLSNpZmRlZiBDT05GSUdfTVRSUl9TQU5JVElaRVIKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bV9yYW5nZXMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSkKLXsKLQl1bnNpZ25lZCBsb25nIHN1bTsKLQlpbnQgaTsKLQotCXN1bSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCXN1bSArPSByYW5nZVtpXS5lbmQgKyAxIC0gcmFuZ2VbaV0uc3RhcnQ7Ci0KLQlyZXR1cm4gc3VtOwotfQotCi1zdGF0aWMgaW50IGVuYWJsZV9tdHJyX2NsZWFudXAgX19pbml0ZGF0YSA9Ci0JQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxUOwotCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCi17Ci0JZW5hYmxlX210cnJfY2xlYW51cCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZV9tdHJyX2NsZWFudXAiLCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXAoY2hhciAqc3RyKQotewotCWVuYWJsZV9tdHJyX2NsZWFudXAgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVuYWJsZV9tdHJyX2NsZWFudXAiLCBlbmFibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKLQotc3RhdGljIGludCBfX2luaXQgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKGNoYXIgKnN0cikKLXsKLQlkZWJ1Z19wcmludCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9jbGVhbnVwX2RlYnVnIiwgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKTsKLQotc3RydWN0IHZhcl9tdHJyX3N0YXRlIHsKLQl1bnNpZ25lZCBsb25nCXJhbmdlX3N0YXJ0azsKLQl1bnNpZ25lZCBsb25nCXJhbmdlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcJY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZwlncmFuX3NpemVrOwotCXVuc2lnbmVkIGludAlyZWc7Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAotCQl1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCi17Ci0JdTMyIGJhc2VfbG8sIGJhc2VfaGksIG1hc2tfbG8sIG1hc2tfaGk7Ci0JdTY0IGJhc2UsIG1hc2s7Ci0KLQlpZiAoIXNpemVrKSB7Ci0JCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCAwLCAwLCAwLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCW1hc2sgPSAoMVVMTCA8PCBhZGRyZXNzX2JpdHMpIC0gMTsKLQltYXNrICY9IH4oKCgodTY0KXNpemVrKSA8PCAxMCkgLSAxKTsKLQotCWJhc2UgID0gKCh1NjQpYmFzZWspIDw8IDEwOwotCi0JYmFzZSB8PSB0eXBlOwotCW1hc2sgfD0gMHg4MDA7Ci0KLQliYXNlX2xvID0gYmFzZSAmICgoMVVMTDw8MzIpIC0gMSk7Ci0JYmFzZV9oaSA9IGJhc2UgPj4gMzI7Ci0KLQltYXNrX2xvID0gbWFzayAmICgoMVVMTDw8MzIpIC0gMSk7Ci0JbWFza19oaSA9IG1hc2sgPj4gMzI7Ci0KLQlmaWxsX210cnJfdmFyX3JhbmdlKHJlZywgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2F2ZV92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAotCQl1bnNpZ25lZCBjaGFyIHR5cGUpCi17Ci0JcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA9IGJhc2VrID4+IChQQUdFX1NISUZUIC0gMTApOwotCXJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPSBzaXplayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKLQlyYW5nZV9zdGF0ZVtyZWddLnR5cGUgPSB0eXBlOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycl9hbGwodW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKLQl1bnNpZ25lZCBjaGFyIHR5cGU7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgbnVtX3Zhcl9yYW5nZXM7IHJlZysrKSB7Ci0JCWJhc2VrID0gcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJc2l6ZWsgPSByYW5nZV9zdGF0ZVtyZWddLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbcmVnXS50eXBlOwotCi0JCXNldF92YXJfbXRycihyZWcsIGJhc2VrLCBzaXplaywgdHlwZSwgYWRkcmVzc19iaXRzKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvX3NpemVfZmFjdG9yKHVuc2lnbmVkIGxvbmcgc2l6ZWssIGNoYXIgKmZhY3RvcnApCi17Ci0JY2hhciBmYWN0b3I7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gc2l6ZWs7Ci0KLQlpZiAoYmFzZSAmICgoMTw8MTApIC0gMSkpIHsKLQkJLyogbm90IE1CIGFsaWdubWVudCAqLwotCQlmYWN0b3IgPSAnSyc7Ci0JfSBlbHNlIGlmIChiYXNlICYgKCgxPDwyMCkgLSAxKSl7Ci0JCWZhY3RvciA9ICdNJzsKLQkJYmFzZSA+Pj0gMTA7Ci0JfSBlbHNlIHsKLQkJZmFjdG9yID0gJ0cnOwotCQliYXNlID4+PSAyMDsKLQl9Ci0KLQkqZmFjdG9ycCA9IGZhY3RvcjsKLQotCXJldHVybiBiYXNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdAotcmFuZ2VfdG9fbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0aywKLQkgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3NpemVrLCB1bnNpZ25lZCBjaGFyIHR5cGUpCi17Ci0JaWYgKCFyYW5nZV9zaXplayB8fCAocmVnID49IG51bV92YXJfcmFuZ2VzKSkKLQkJcmV0dXJuIHJlZzsKLQotCXdoaWxlIChyYW5nZV9zaXplaykgewotCQl1bnNpZ25lZCBsb25nIG1heF9hbGlnbiwgYWxpZ247Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZWs7Ci0KLQkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIEkgY2FuIG1ha2UgYSByYW5nZSAqLwotCQlpZiAocmFuZ2Vfc3RhcnRrKQotCQkJbWF4X2FsaWduID0gZmZzKHJhbmdlX3N0YXJ0aykgLSAxOwotCQllbHNlCi0JCQltYXhfYWxpZ24gPSAzMjsKLQkJYWxpZ24gPSBmbHMocmFuZ2Vfc2l6ZWspIC0gMTsKLQkJaWYgKGFsaWduID4gbWF4X2FsaWduKQotCQkJYWxpZ24gPSBtYXhfYWxpZ247Ci0KLQkJc2l6ZWsgPSAxIDw8IGFsaWduOwotCQlpZiAoZGVidWdfcHJpbnQpIHsKLQkJCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOwotCi0JCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmFuZ2Vfc3RhcnRrLCAmc3RhcnRfZmFjdG9yKSwKLQkJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVrLCAmc2l6ZV9mYWN0b3IpLAotCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dGluZyB2YXJpYWJsZSBNVFJSICVkLCAiCi0JCQkJImJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKLQkJCQlyZWcsIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKLQkJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAotCQkJCSh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKT8iVUMiOgotCQkJCSAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSQkFDSyk/IldCIjoiT3RoZXIiKQotCQkJCSk7Ci0JCX0KLQkJc2F2ZV92YXJfbXRycihyZWcrKywgcmFuZ2Vfc3RhcnRrLCBzaXplaywgdHlwZSk7Ci0JCXJhbmdlX3N0YXJ0ayArPSBzaXplazsKLQkJcmFuZ2Vfc2l6ZWsgLT0gc2l6ZWs7Ci0JCWlmIChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJlZzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9faW5pdAotcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlaywKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZWspCi17Ci0JdW5zaWduZWQgbG9uZyBob2xlX2Jhc2VrLCBob2xlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2Jhc2VrLCBzZWNvbmRfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyByYW5nZTBfYmFzZWssIHJhbmdlMF9zaXplazsKLQl1bnNpZ25lZCBsb25nIHJhbmdlX2Jhc2VrLCByYW5nZV9zaXplazsKLQl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKLQotCWhvbGVfYmFzZWsgPSAwOwotCWhvbGVfc2l6ZWsgPSAwOwotCXNlY29uZF9iYXNlayA9IDA7Ci0Jc2Vjb25kX3NpemVrID0gMDsKLQljaHVua19zaXplayA9IHN0YXRlLT5jaHVua19zaXplazsKLQlncmFuX3NpemVrID0gc3RhdGUtPmdyYW5fc2l6ZWs7Ci0KLQkvKiBhbGlnbiB3aXRoIGdyYW4gc2l6ZSwgcHJldmVudCBzbWFsbCBibG9jayB1c2VkIHVwIE1UUlJzICovCi0JcmFuZ2VfYmFzZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc3RhcnRrLCBncmFuX3NpemVrKTsKLQlpZiAoKHJhbmdlX2Jhc2VrID4gYmFzZWspICYmIGJhc2VrKQotCQlyZXR1cm4gc2Vjb25kX3NpemVrOwotCXN0YXRlLT5yYW5nZV9zaXplayAtPSAocmFuZ2VfYmFzZWsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrKTsKLQlyYW5nZV9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgZ3Jhbl9zaXplayk7Ci0KLQl3aGlsZSAocmFuZ2Vfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJcmFuZ2Vfc2l6ZWsgLT0gZ3Jhbl9zaXplazsKLQkJaWYgKCFyYW5nZV9zaXplaykKLQkJCXJldHVybiAwOwotCX0KLQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSByYW5nZV9zaXplazsKLQotCS8qIHRyeSB0byBhcHBlbmQgc29tZSBzbWFsbCBob2xlICovCi0JcmFuZ2UwX2Jhc2VrID0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKLQlyYW5nZTBfc2l6ZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc2l6ZWssIGNodW5rX3NpemVrKTsKLQotCS8qIG5vIGluY3JlYXNlICovCi0JaWYgKHJhbmdlMF9zaXplayA9PSBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJaWYgKGRlYnVnX3ByaW50KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlWDogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCXJhbmdlMF9iYXNlazw8MTAsCi0JCQkJKHJhbmdlMF9iYXNlayArIHN0YXRlLT5yYW5nZV9zaXplayk8PDEwKTsKLQkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAotCQkJCXN0YXRlLT5yYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIG9ubHkgY3V0IGJhY2ssIHdoZW4gaXQgaXMgbm90IHRoZSBsYXN0ICovCi0JaWYgKHNpemVrKSB7Ci0JCXdoaWxlIChyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWsgPiAoYmFzZWsgKyBzaXplaykpIHsKLQkJCWlmIChyYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspCi0JCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOwotCQkJZWxzZQotCQkJCXJhbmdlMF9zaXplayA9IDA7Ci0KLQkJCWlmICghcmFuZ2UwX3NpemVrKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi1zZWNvbmRfdHJ5OgotCXJhbmdlX2Jhc2VrID0gcmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrOwotCi0JLyogb25lIGhvbGUgaW4gdGhlIG1pZGRsZSAqLwotCWlmIChyYW5nZV9iYXNlayA+IGJhc2VrICYmIHJhbmdlX2Jhc2VrIDw9IChiYXNlayArIHNpemVrKSkKLQkJc2Vjb25kX3NpemVrID0gcmFuZ2VfYmFzZWsgLSBiYXNlazsKLQotCWlmIChyYW5nZTBfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQotCQkvKiBvbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgZW5kICovCi0JCWhvbGVfc2l6ZWsgPSByYW5nZTBfc2l6ZWsgLSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7Ci0KLQkJLyogaG9sZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gaGFsZiBvZiByYW5nZTAgc2l6ZSAqLwotCQlpZiAoaG9sZV9zaXplayA+PSAocmFuZ2UwX3NpemVrID4+IDEpICYmCi0JCSAgICByYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspIHsKLQkJCXJhbmdlMF9zaXplayAtPSBjaHVua19zaXplazsKLQkJCXNlY29uZF9zaXplayA9IDA7Ci0JCQlob2xlX3NpemVrID0gMDsKLQotCQkJZ290byBzZWNvbmRfdHJ5OwotCQl9Ci0JfQotCi0JaWYgKHJhbmdlMF9zaXplaykgewotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2UwOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKLQkJCQkocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCi0JCQkJcmFuZ2UwX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQl9Ci0KLQlpZiAocmFuZ2UwX3NpemVrIDwgc3RhdGUtPnJhbmdlX3NpemVrKSB7Ci0JCS8qIG5lZWQgdG8gaGFuZGxlIGxlZnQgb3ZlciAqLwotCQlyYW5nZV9zaXplayA9IHN0YXRlLT5yYW5nZV9zaXplayAtIHJhbmdlMF9zaXplazsKLQotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VfYmFzZWs8PDEwLAotCQkJCSAocmFuZ2VfYmFzZWsgKyByYW5nZV9zaXplayk8PDEwKTsKLQkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2VfYmFzZWssCi0JCQkJIHJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQl9Ci0KLQlpZiAoaG9sZV9zaXplaykgewotCQlob2xlX2Jhc2VrID0gcmFuZ2VfYmFzZWsgLSBob2xlX3NpemVrIC0gc2Vjb25kX3NpemVrOwotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSBob2xlX2Jhc2VrPDwxMCwKLQkJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCBob2xlX2Jhc2VrLAotCQkJCSBob2xlX3NpemVrLCBNVFJSX1RZUEVfVU5DQUNIQUJMRSk7Ci0JfQotCi0JcmV0dXJuIHNlY29uZF9zaXplazsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci1zZXRfdmFyX210cnJfcmFuZ2Uoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlX3BmbiwKLQkJICAgdW5zaWduZWQgbG9uZyBzaXplX3BmbikKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKLQl1bnNpZ25lZCBsb25nIHNlY29uZF9zaXplayA9IDA7Ci0KLQlpZiAoc3RhdGUtPnJlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJcmV0dXJuOwotCi0JYmFzZWsgPSBiYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQlzaXplayA9IHNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCi0JLyogU2VlIGlmIEkgY2FuIG1lcmdlIHdpdGggdGhlIGxhc3QgcmFuZ2UgKi8KLQlpZiAoKGJhc2VrIDw9IDEwMjQpIHx8Ci0JICAgIChzdGF0ZS0+cmFuZ2Vfc3RhcnRrICsgc3RhdGUtPnJhbmdlX3NpemVrID09IGJhc2VrKSkgewotCQl1bnNpZ25lZCBsb25nIGVuZGsgPSBiYXNlayArIHNpemVrOwotCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSBlbmRrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKLQkJcmV0dXJuOwotCX0KLQkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnMgKi8KLQlpZiAoc3RhdGUtPnJhbmdlX3NpemVrICE9IDApCi0JCXNlY29uZF9zaXplayA9IHJhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0YXRlLCBiYXNlaywgc2l6ZWspOwotCi0JLyogQWxsb2NhdGUgYW4gbXNyICovCi0Jc3RhdGUtPnJhbmdlX3N0YXJ0ayA9IGJhc2VrICsgc2Vjb25kX3NpemVrOwotCXN0YXRlLT5yYW5nZV9zaXplayAgPSBzaXplayAtIHNlY29uZF9zaXplazsKLX0KLQotLyogbWluaW51bSBzaXplIG9mIG10cnIgYmxvY2sgdGhhdCBjYW4gdGFrZSBob2xlICovCi1zdGF0aWMgdTY0IG10cnJfY2h1bmtfc2l6ZSBfX2luaXRkYXRhID0gKDI1NlVMTDw8MjApOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KGNoYXIgKnApCi17Ci0JaWYgKCFwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltdHJyX2NodW5rX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9jaHVua19zaXplIiwgcGFyc2VfbXRycl9jaHVua19zaXplX29wdCk7Ci0KLS8qIGdyYW5pdHkgb2YgbXRyciBvZiBibG9jayAqLwotc3RhdGljIHU2NCBtdHJyX2dyYW5fc2l6ZSBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQoY2hhciAqcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAtRUlOVkFMOwotCW10cnJfZ3Jhbl9zaXplID0gbWVtcGFyc2UocCwgJnApOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm10cnJfZ3Jhbl9zaXplIiwgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KTsKLQotc3RhdGljIGludCBucl9tdHJyX3NwYXJlX3JlZyBfX2luaXRkYXRhID0KLQkJCQkgQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX3NwYXJlX3JlZyhjaGFyICphcmcpCi17Ci0JaWYgKGFyZykKLQkJbnJfbXRycl9zcGFyZV9yZWcgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOwotCXJldHVybiAwOwotfQotCi1lYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci14ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JCSAgICB1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSkKLXsKLQlzdHJ1Y3QgdmFyX210cnJfc3RhdGUgdmFyX3N0YXRlOwotCWludCBpOwotCWludCBudW1fcmVnOwotCi0JdmFyX3N0YXRlLnJhbmdlX3N0YXJ0awk9IDA7Ci0JdmFyX3N0YXRlLnJhbmdlX3NpemVrCT0gMDsKLQl2YXJfc3RhdGUucmVnCQk9IDA7Ci0JdmFyX3N0YXRlLmNodW5rX3NpemVrCT0gY2h1bmtfc2l6ZSA+PiAxMDsKLQl2YXJfc3RhdGUuZ3Jhbl9zaXplawk9IGdyYW5fc2l6ZSA+PiAxMDsKLQotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0KLQkvKiBXcml0ZSB0aGUgcmFuZ2UgZXRjICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCXNldF92YXJfbXRycl9yYW5nZSgmdmFyX3N0YXRlLCByYW5nZVtpXS5zdGFydCwKLQkJCQkgICByYW5nZVtpXS5lbmQgLSByYW5nZVtpXS5zdGFydCArIDEpOwotCi0JLyogV3JpdGUgdGhlIGxhc3QgcmFuZ2UgKi8KLQlpZiAodmFyX3N0YXRlLnJhbmdlX3NpemVrICE9IDApCi0JCXJhbmdlX3RvX210cnJfd2l0aF9ob2xlKCZ2YXJfc3RhdGUsIDAsIDApOwotCi0JbnVtX3JlZyA9IHZhcl9zdGF0ZS5yZWc7Ci0JLyogQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3MgKi8KLQl3aGlsZSAodmFyX3N0YXRlLnJlZyA8IG51bV92YXJfcmFuZ2VzKSB7Ci0JCXNhdmVfdmFyX210cnIodmFyX3N0YXRlLnJlZywgMCwgMCwgMCk7Ci0JCXZhcl9zdGF0ZS5yZWcrKzsKLQl9Ci0KLQlyZXR1cm4gbnVtX3JlZzsKLX0KLQotc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgewotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKLQl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgbG9zZV9jb3Zlcl9zaXplazsKLQl1bnNpZ25lZCBpbnQgbnVtX3JlZzsKLQlpbnQgYmFkOwotfTsKLQotLyoKLSAqIGdyYW5fc2l6ZTogNjRLLCAxMjhLLCAyNTZLLCA1MTJLLCAxTSwgMk0sIC4uLiwgMkcKLSAqIGNodW5rIHNpemU6IGdyYW5fc2l6ZSwgLi4uLCAyRwotICogc28gd2UgbmVlZCAoMSsxNikqOAotICovCi0jZGVmaW5lIE5VTV9SRVNVTFQJMTM2Ci0jZGVmaW5lIFBTSElGVAkJKFBBR0VfU0hJRlQgLSAxMCkKLQotc3RhdGljIHN0cnVjdCBtdHJyX2NsZWFudXBfcmVzdWx0IF9faW5pdGRhdGEgcmVzdWx0W05VTV9SRVNVTFRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtaW5fbG9zc19wZm5bUkFOR0VfTlVNXTsKLQotc3RhdGljIHZvaWQgX19pbml0IHByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKHZvaWQpCi17Ci0JaW50IGk7Ci0JY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOwotCW10cnJfdHlwZSB0eXBlOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQotCQlzaXplX2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJaWYgKCFzaXplX2Jhc2UpCi0JCQljb250aW51ZTsKLQotCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplX2Jhc2UsICZzaXplX2ZhY3RvciksCi0JCXN0YXJ0X2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHN0YXJ0X2Jhc2UsICZzdGFydF9mYWN0b3IpLAotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAicmVnICVkLCBiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCi0JCQlpLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCi0JCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAotCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpID8gIlVDIiA6Ci0JCQkgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpID8gIldQIiA6Ci0JCQkgICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKSkKLQkJCSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX25lZWRfY2xlYW51cCh2b2lkKQotewotCWludCBpOwotCW10cnJfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCi0JaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOwotCi0JLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KLQltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzaXplKQotCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOwotCQlpZiAodHlwZSA9PSBNVFJSX1RZUEVfV1JQUk9UKQotCQkJdHlwZSA9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFOwotCQludW1bdHlwZV0rKzsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBnb3QgVUMgZW50cmllcyAqLwotCWlmICghbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KLQlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQotCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcmFuZ2Vfc3VtczsKLXN0YXRpYyB2b2lkIF9faW5pdCBtdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSwKLQkJCQkJIGludCBpKQotewotCWludCBudW1fcmVnOwotCXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOwotCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OwotCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7Ci0KLQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCi0JbnVtX3JlZyA9IHg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLAotCQkJCQkJY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKLQotCS8qIHdlIGdvdCBuZXcgc2V0dGluZyBpbiByYW5nZV9zdGF0ZSwgY2hlY2sgaXQgKi8KLQltZW1zZXQocmFuZ2VfbmV3LCAwLCBzaXplb2YocmFuZ2VfbmV3KSk7Ci0JbnJfcmFuZ2VfbmV3ID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZV9uZXcsIDAsCi0JCQkJZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplKTsKLQlyYW5nZV9zdW1zX25ldyA9IHN1bV9yYW5nZXMocmFuZ2VfbmV3LCBucl9yYW5nZV9uZXcpOwotCi0JcmVzdWx0W2ldLmNodW5rX3NpemVrID0gY2h1bmtfc2l6ZSA+PiAxMDsKLQlyZXN1bHRbaV0uZ3Jhbl9zaXplayA9IGdyYW5fc2l6ZSA+PiAxMDsKLQlyZXN1bHRbaV0ubnVtX3JlZyA9IG51bV9yZWc7Ci0JaWYgKHJhbmdlX3N1bXMgPCByYW5nZV9zdW1zX25ldykgewotCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9Ci0JCQkocmFuZ2Vfc3Vtc19uZXcgLSByYW5nZV9zdW1zKSA8PCBQU0hJRlQ7Ci0JCXJlc3VsdFtpXS5iYWQgPSAxOwotCX0gZWxzZQotCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9Ci0JCQkocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7Ci0KLQkvKiBkb3VibGUgY2hlY2sgaXQgKi8KLQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7Ci0JCWlmIChucl9yYW5nZV9uZXcgIT0gbnJfcmFuZ2UgfHwKLQkJCW1lbWNtcChyYW5nZSwgcmFuZ2VfbmV3LCBzaXplb2YocmFuZ2UpKSkKLQkJCQlyZXN1bHRbaV0uYmFkID0gMTsKLQl9Ci0KLQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgKHJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldyA8Ci0JCQkJbWluX2xvc3NfcGZuW251bV9yZWddKSkgewotCQltaW5fbG9zc19wZm5bbnVtX3JlZ10gPQotCQkJcmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3OwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaW50IGkpCi17Ci0JY2hhciBncmFuX2ZhY3RvciwgY2h1bmtfZmFjdG9yLCBsb3NlX2ZhY3RvcjsKLQl1bnNpZ25lZCBsb25nIGdyYW5fYmFzZSwgY2h1bmtfYmFzZSwgbG9zZV9iYXNlOwotCi0JZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCi0JY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCi0JbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAotCQkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCi0JCQlncmFuX2Jhc2UsIGdyYW5fZmFjdG9yLCBjaHVua19iYXNlLCBjaHVua19mYWN0b3IpOwotCXByaW50ayhLRVJOX0NPTlQgIm51bV9yZWc6ICVkICBcdGxvc2UgY292ZXIgUkFNOiAlcyVsZCVjXG4iLAotCQkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKLQkJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IG51bV9yZWdfZ29vZDsKLQlpbnQgaW5kZXhfZ29vZDsKLQotCWlmIChucl9tdHJyX3NwYXJlX3JlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJbnJfbXRycl9zcGFyZV9yZWcgPSBudW1fdmFyX3JhbmdlcyAtIDE7Ci0JbnVtX3JlZ19nb29kID0gLTE7Ci0JZm9yIChpID0gbnVtX3Zhcl9yYW5nZXMgLSBucl9tdHJyX3NwYXJlX3JlZzsgaSA+IDA7IGktLSkgewotCQlpZiAoIW1pbl9sb3NzX3BmbltpXSkKLQkJCW51bV9yZWdfZ29vZCA9IGk7Ci0JfQotCi0JaW5kZXhfZ29vZCA9IC0xOwotCWlmIChudW1fcmVnX2dvb2QgIT0gLTEpIHsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykgewotCQkJaWYgKCFyZXN1bHRbaV0uYmFkICYmCi0JCQkgICAgcmVzdWx0W2ldLm51bV9yZWcgPT0gbnVtX3JlZ19nb29kICYmCi0JCQkgICAgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7Ci0JCQkJaW5kZXhfZ29vZCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaW5kZXhfZ29vZDsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQotewotCXVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplOwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZSwgZGVmLCBkdW1teTsKLQltdHJyX3R5cGUgdHlwZTsKLQl1NjQgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplOwotCWludCBpbmRleF9nb29kOwotCWludCBpOwotCi0JaWYgKCFpc19jcHUoSU5URUwpIHx8IGVuYWJsZV9tdHJyX2NsZWFudXAgPCAxKQotCQlyZXR1cm4gMDsKLQlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOwotCWRlZiAmPSAweGZmOwotCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCi0JCXJldHVybiAwOwotCi0JLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLwotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwotCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7Ci0JCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKLQkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgbmVlZCBoYW5kbGUgaXQgYW5kIGNhbiBoYW5kbGUgaXQgKi8KLQlpZiAoIW10cnJfbmVlZF9jbGVhbnVwKCkpCi0JCXJldHVybiAwOwotCi0JLyogcHJpbnQgb3JpZ2luYWwgdmFyIE1UUlJzIGF0IGZpcnN0LCBmb3IgZGVidWdnaW5nOiAqLwotCXByaW50ayhLRVJOX0RFQlVHICJvcmlnaW5hbCB2YXJpYWJsZSBNVFJSc1xuIik7Ci0JcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUoKTsKLQotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7Ci0JZXh0cmFfcmVtb3ZlX3NpemUgPSAwOwotCWV4dHJhX3JlbW92ZV9iYXNlID0gMSA8PCAoMzIgLSBQQUdFX1NISUZUKTsKLQlpZiAobXRycl90b20yKQotCQlleHRyYV9yZW1vdmVfc2l6ZSA9Ci0JCQkobXRycl90b20yID4+IFBBR0VfU0hJRlQpIC0gZXh0cmFfcmVtb3ZlX2Jhc2U7Ci0JbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCAwLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkJICBleHRyYV9yZW1vdmVfc2l6ZSk7Ci0JLyoKLQkgKiBbMCwgMU0pIHNob3VsZCBhbHdheXMgYmUgY292ZXJyZWQgYnkgdmFyIG10cnIgd2l0aCBXQgotCSAqIGFuZCBmaXhlZCBtdHJycyBzaG91bGQgdGFrZSBlZmZlY3RpdmUgYmVmb3JlIHZhciBtdHJyIGZvciBpdAotCSAqLwotCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLAotCQkJCQkoMVVMTDw8KDIwIC0gUEFHRV9TSElGVCkpIC0gMSk7Ci0JLyogc29ydCB0aGUgcmFuZ2VzICovCi0Jc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKLQotCXJhbmdlX3N1bXMgPSBzdW1fcmFuZ2VzKHJhbmdlLCBucl9yYW5nZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAidG90YWwgUkFNIGNvdmVycmVkOiAlbGRNXG4iLAotCSAgICAgICByYW5nZV9zdW1zID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKLQotCWlmIChtdHJyX2NodW5rX3NpemUgJiYgbXRycl9ncmFuX3NpemUpIHsKLQkJaSA9IDA7Ci0JCW10cnJfY2FsY19yYW5nZV9zdGF0ZShtdHJyX2NodW5rX3NpemUsIG10cnJfZ3Jhbl9zaXplLAotCQkJCSAgICAgIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSwgaSk7Ci0KLQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQotCQlpZiAoIXJlc3VsdFtpXS5iYWQpIHsKLQkJCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gImludmFsaWQgbXRycl9ncmFuX3NpemUgb3IgbXRycl9jaHVua19zaXplLCAiCi0JCSAgICAgICAid2lsbCBmaW5kIG9wdGltYWwgb25lXG4iKTsKLQl9Ci0KLQlpID0gMDsKLQltZW1zZXQobWluX2xvc3NfcGZuLCAweGZmLCBzaXplb2YobWluX2xvc3NfcGZuKSk7Ci0JbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOwotCWZvciAoZ3Jhbl9zaXplID0gKDFVTEw8PDE2KTsgZ3Jhbl9zaXplIDwgKDFVTEw8PDMyKTsgZ3Jhbl9zaXplIDw8PSAxKSB7Ci0KLQkJZm9yIChjaHVua19zaXplID0gZ3Jhbl9zaXplOyBjaHVua19zaXplIDwgKDFVTEw8PDMyKTsKLQkJICAgICBjaHVua19zaXplIDw8PSAxKSB7Ci0KLQkJCWlmIChpID49IE5VTV9SRVNVTFQpCi0JCQkJY29udGludWU7Ci0KLQkJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShjaHVua19zaXplLCBncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKLQkJCWlmIChkZWJ1Z19wcmludCkgewotCQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQkJCX0KLQotCQkJaSsrOwotCQl9Ci0JfQotCi0JLyogdHJ5IHRvIGZpbmQgdGhlIG9wdGltYWwgaW5kZXggKi8KLQlpbmRleF9nb29kID0gbXRycl9zZWFyY2hfb3B0aW1hbF9pbmRleCgpOwotCi0JaWYgKGluZGV4X2dvb2QgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgb3B0aW1hbCBzZXR0aW5nIGZvciBtdHJyIGNsZWFuIHVwXG4iKTsKLQkJaSA9IGluZGV4X2dvb2Q7Ci0JCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0KLQkJLyogY29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZSAqLwotCQljaHVua19zaXplID0gcmVzdWx0W2ldLmNodW5rX3NpemVrOwotCQljaHVua19zaXplIDw8PSAxMDsKLQkJZ3Jhbl9zaXplID0gcmVzdWx0W2ldLmdyYW5fc2l6ZWs7Ci0JCWdyYW5fc2l6ZSA8PD0gMTA7Ci0JCXg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLCBjaHVua19zaXplLCBncmFuX3NpemUpOwotCQlzZXRfdmFyX210cnJfYWxsKGFkZHJlc3NfYml0cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJOZXcgdmFyaWFibGUgTVRSUnNcbiIpOwotCQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQkvKiBwcmludCBvdXQgYWxsICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVTVUxUOyBpKyspCi0JCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIm10cnJfY2xlYW51cDogY2FuIG5vdCBmaW5kIG9wdGltYWwgdmFsdWVcbiIpOwotCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSBzcGVjaWZ5IG10cnJfZ3Jhbl9zaXplL210cnJfY2h1bmtfc2l6ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKLQotc3RhdGljIGludCBkaXNhYmxlX210cnJfdHJpbTsKLQotc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXAoY2hhciAqc3RyKQotewotCWRpc2FibGVfbXRycl90cmltID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfdHJpbSIsIGRpc2FibGVfbXRycl90cmltX3NldHVwKTsKLQotLyoKLSAqIE5ld2VyIEFNRCBLOHMgYW5kIGxhdGVyIENQVXMgaGF2ZSBhIHNwZWNpYWwgbWFnaWMgTVNSIHdheSB0byBmb3JjZSBXQgotICogZm9yIG1lbW9yeSA+NEdCLiBDaGVjayBmb3IgdGhhdCBoZXJlLgotICogTm90ZSB0aGlzIHdvbid0IGNoZWNrIGlmIHRoZSBNVFJScyA8IDRHQiB3aGVyZSB0aGUgbWFnaWMgYml0IGRvZXNuJ3QKLSAqIGFwcGx5IHRvIGFyZSB3cm9uZywgYnV0IHNvIGZhciB3ZSBkb24ndCBrbm93IG9mIGFueSBzdWNoIGNhc2UgaW4gdGhlIHdpbGQuCi0gKi8KLSNkZWZpbmUgVG9tMkVuYWJsZWQgKDFVIDw8IDIxKQotI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IgKDFVIDw8IDIyKQotCi1pbnQgX19pbml0IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKQotewotCXUzMiBsLCBoOwotCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgMHhmIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxMSkKLQkJcmV0dXJuIDA7Ci0JLyogSW4gY2FzZSBzb21lIGh5cGVydmlzb3IgZG9lc24ndCBwYXNzIFNZU0NGRyB0aHJvdWdoICovCi0JaWYgKHJkbXNyX3NhZmUoTVNSX0s4X1NZU0NGRywgJmwsICZoKSA8IDApCi0JCXJldHVybiAwOwotCS8qCi0JICogTWVtb3J5IGJldHdlZW4gNEdCIGFuZCB0b3Agb2YgbWVtIGlzIGZvcmNlZCBXQiBieSB0aGlzIG1hZ2ljIGJpdC4KLQkgKiBSZXNlcnZlZCBiZWZvcmUgSzhSZXZGLCBidXQgc2hvdWxkIGJlIHplcm8gdGhlcmUuCi0JICovCi0JaWYgKChsICYgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkgPT0KLQkJIChUb20yRW5hYmxlZCB8IFRvbTJGb3JjZU1lbVR5cGVXQikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCByZWFsX3RyaW1fbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKQotewotCXU2NCB0cmltX3N0YXJ0LCB0cmltX3NpemU7Ci0JdHJpbV9zdGFydCA9IHN0YXJ0X3BmbjsKLQl0cmltX3N0YXJ0IDw8PSBQQUdFX1NISUZUOwotCXRyaW1fc2l6ZSA9IGxpbWl0X3BmbjsKLQl0cmltX3NpemUgPDw9IFBBR0VfU0hJRlQ7Ci0JdHJpbV9zaXplIC09IHRyaW1fc3RhcnQ7Ci0KLQlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2UodHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JBTSwKLQkJCQlFODIwX1JFU0VSVkVEKTsKLX0KLS8qKgotICogbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSAtIHRyaW0gUkFNIG5vdCBjb3ZlcmVkIGJ5IE1UUlJzCi0gKiBAZW5kX3BmbjogZW5kaW5nIHBhZ2UgZnJhbWUgbnVtYmVyCi0gKgotICogU29tZSBidWdneSBCSU9TZXMgZG9uJ3Qgc2V0dXAgdGhlIE1UUlJzIHByb3Blcmx5IGZvciBzeXN0ZW1zIHdpdGggY2VydGFpbgotICogbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiAgVGhpcyByb3V0aW5lIGNoZWNrcyB0aGF0IHRoZSBoaWdoZXN0IE1UUlIgbWF0Y2hlcwotICogdGhlIGVuZCBvZiBtZW1vcnksIHRvIG1ha2Ugc3VyZSB0aGUgTVRSUnMgaGF2aW5nIGEgd3JpdGUgYmFjayB0eXBlIGNvdmVyCi0gKiBhbGwgb2YgdGhlIG1lbW9yeSB0aGUga2VybmVsIGlzIGludGVuZGluZyB0byB1c2UuIElmIG5vdCwgaXQnbGwgdHJpbSBhbnkKLSAqIG1lbW9yeSBvZmYgdGhlIGVuZCBieSBhZGp1c3RpbmcgZW5kX3BmbiwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUga2VybmVsJ3MKLSAqIGFsbG9jYXRpb24gcG9vbHMsIHdhcm5pbmcgdGhlIHVzZXIgd2l0aCBhbiBvYm5veGlvdXMgbWVzc2FnZS4KLSAqLwotaW50IF9faW5pdCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKLXsKLQl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemUsIGhpZ2hlc3RfcGZuID0gMCwgZGVmLCBkdW1teTsKLQltdHJyX3R5cGUgdHlwZTsKLQl1NjQgdG90YWxfdHJpbV9zaXplOwotCi0JLyogZXh0cmEgb25lIGZvciBhbGwgMCAqLwotCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IHRyaW0gdW5jYWNoYWJsZSBtZW1vcnkgb24gbWFjaGluZXMgdGhhdAotCSAqIHN1cHBvcnQgdGhlIEludGVsIE1UUlIgYXJjaGl0ZWN0dXJlOgotCSAqLwotCWlmICghaXNfY3B1KElOVEVMKSB8fCBkaXNhYmxlX210cnJfdHJpbSkKLQkJcmV0dXJuIDA7Ci0JcmRtc3IoTVRSUmRlZlR5cGVfTVNSLCBkZWYsIGR1bW15KTsKLQlkZWYgJj0gMHhmZjsKLQlpZiAoZGVmICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQotCQlyZXR1cm4gMDsKLQotCS8qIGdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGUgKi8KLQltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKLQkJcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm4gPSBiYXNlOwotCQlyYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA9IHNpemU7Ci0JCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOwotCX0KLQotCS8qIEZpbmQgaGlnaGVzdCBjYWNoZWQgcGZuICovCi0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCi0JCQljb250aW51ZTsKLQkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOwotCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCWlmIChoaWdoZXN0X3BmbiA8IGJhc2UgKyBzaXplKQotCQkJaGlnaGVzdF9wZm4gPSBiYXNlICsgc2l6ZTsKLQl9Ci0KLQkvKiBrdm0vcWVtdSBkb2Vzbid0IGhhdmUgbXRyciBzZXQgcmlnaHQsIGRvbid0IHRyaW0gdGhlbSBhbGwgKi8KLQlpZiAoIWhpZ2hlc3RfcGZuKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNQVSBNVFJScyBhbGwgYmxhbmsgLSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KLQltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCWlmICh0eXBlID49IE1UUlJfTlVNX1RZUEVTKQotCQkJY29udGludWU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKCFzaXplKQotCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOwotCQludW1bdHlwZV0rKzsKLQl9Ci0KLQkvKiBubyBlbnRyeSBmb3IgV0I/ICovCi0JaWYgKCFudW1bTVRSUl9UWVBFX1dSQkFDS10pCi0JCXJldHVybiAwOwotCi0JLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCi0JaWYgKG51bVtNVFJSX1RZUEVfV1JCQUNLXSArIG51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0gIT0KLQkJbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7Ci0JbnJfcmFuZ2UgPSAwOwotCWlmIChtdHJyX3RvbTIpIHsKLQkJcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gKDFVTEw8PCgzMiAtIFBBR0VfU0hJRlQpKTsKLQkJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IChtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSAxOwotCQlpZiAoaGlnaGVzdF9wZm4gPCByYW5nZVtucl9yYW5nZV0uZW5kICsgMSkKLQkJCWhpZ2hlc3RfcGZuID0gcmFuZ2VbbnJfcmFuZ2VdLmVuZCArIDE7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIDAsIDApOwotCi0JdG90YWxfdHJpbV9zaXplID0gMDsKLQkvKiBjaGVjayB0aGUgaGVhZCAqLwotCWlmIChyYW5nZVswXS5zdGFydCkKLQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkoMCwgcmFuZ2VbMF0uc3RhcnQpOwotCS8qIGNoZWNrIHRoZSBob2xlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCi0JCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAotCQkJCQkJCSAgICByYW5nZVtpKzFdLnN0YXJ0KTsKLQl9Ci0JLyogY2hlY2sgdGhlIHRvcCAqLwotCWkgPSBucl9yYW5nZSAtIDE7Ci0JaWYgKHJhbmdlW2ldLmVuZCArIDEgPCBlbmRfcGZuKQotCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAotCQkJCQkJCSBlbmRfcGZuKTsKLQotCWlmICh0b3RhbF90cmltX3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQklPUyBidWc6IENQVSBNVFJScyBkb24ndCBjb3ZlciIKLQkJCSIgYWxsIG9mIG1lbW9yeSwgbG9zaW5nICVsbHVNQiBvZiBSQU0uXG4iLAotCQkJdG90YWxfdHJpbV9zaXplID4+IDIwKTsKLQotCQlpZiAoIWNoYW5nZWRfYnlfbXRycl9jbGVhbnVwKQotCQkJV0FSTl9PTigxKTsKLQotCQlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgbXRyclxuIik7Ci0JCXVwZGF0ZV9lODIwKCk7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CitpbnQgX19pbml0ZGF0YSBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKIAogLyoqCiAgKiBtdHJyX2JwX2luaXQgLSBpbml0aWFsaXplIG10cnJzIG9uIHRoZSBib290IENQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKaW5kZXggZmZkNjA0MC4uNzdmNjdmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCkBAIC03OSw2ICs3OSw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Zhcl9yYW5nZXM7CiBleHRlcm4gdTY0IG10cnJfdG9tMjsKK2V4dGVybiBzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiAKIHZvaWQgbXRycl9zdGF0ZV93YXJuKHZvaWQpOwogY29uc3QgY2hhciAqbXRycl9hdHRyaWJfdG9fc3RyKGludCB4KTsKQEAgLTg4LDMgKzg5LDYgQEAKIGludCBhbWRfaW5pdF9tdHJyKHZvaWQpOwogaW50IGN5cml4X2luaXRfbXRycih2b2lkKTsKIGludCBjZW50YXVyX2luaXRfbXRycih2b2lkKTsKKworZXh0ZXJuIGludCBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKK2V4dGVybiBpbnQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwppbmRleCA1MmIzZmVmLi5iYjYyYjNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKQEAgLTk4LDcgKzk4LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgdHJhbnNtZXRhX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCB0cmFuc21ldGFfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiVHJhbnNtZXRhIiwKIAkuY19pZGVudAk9IHsgIkdlbnVpbmVUTXg4NiIsICJUcmFuc21ldGFDUFUiIH0sCiAJLmNfZWFybHlfaW5pdAk9IGVhcmx5X2luaXRfdHJhbnNtZXRhLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdW1jLmMKaW5kZXggZTc3N2Y3OS4uZmQyYzM3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jCkBAIC04LDcgKzgsNyBAQAogICogc28gbm8gc3BlY2lhbCBpbml0IHRha2VzIHBsYWNlLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiB1bWNfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IHVtY19jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJVTUMiLAogCS5jX2lkZW50CT0geyAiVU1DIFVNQyBVTUMiIH0sCiAJLmNfbW9kZWxzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IDg3ZDEwM2QuLmRkMjEzMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggNTA4YmVjMS4uZWYyYzM1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMTAsMTkgKzExMCw1MCBAQAogLyoKICAqIEFkZCBhIG1lbW9yeSByZWdpb24gdG8gdGhlIGtlcm5lbCBlODIwIG1hcC4KICAqLwotdm9pZCBfX2luaXQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IF9fZTgyMF9hZGRfcmVnaW9uKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKKwkJCQkJIGludCB0eXBlKQogewotCWludCB4ID0gZTgyMC5ucl9tYXA7CisJaW50IHggPSBlODIweC0+bnJfbWFwOwogCi0JaWYgKHggPT0gQVJSQVlfU0laRShlODIwLm1hcCkpIHsKKwlpZiAoeCA9PSBBUlJBWV9TSVpFKGU4MjB4LT5tYXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiT29vcHMhIFRvbyBtYW55IGVudHJpZXMgaW4gdGhlIG1lbW9yeSBtYXAhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWU4MjAubWFwW3hdLmFkZHIgPSBzdGFydDsKLQllODIwLm1hcFt4XS5zaXplID0gc2l6ZTsKLQllODIwLm1hcFt4XS50eXBlID0gdHlwZTsKLQllODIwLm5yX21hcCsrOworCWU4MjB4LT5tYXBbeF0uYWRkciA9IHN0YXJ0OworCWU4MjB4LT5tYXBbeF0uc2l6ZSA9IHNpemU7CisJZTgyMHgtPm1hcFt4XS50eXBlID0gdHlwZTsKKwllODIweC0+bnJfbWFwKys7Cit9CisKK3ZvaWQgX19pbml0IGU4MjBfYWRkX3JlZ2lvbih1NjQgc3RhcnQsIHU2NCBzaXplLCBpbnQgdHlwZSkKK3sKKwlfX2U4MjBfYWRkX3JlZ2lvbigmZTgyMCwgc3RhcnQsIHNpemUsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZTgyMF9wcmludF90eXBlKHUzMiB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRTgyMF9SQU06CisJY2FzZSBFODIwX1JFU0VSVkVEX0tFUk46CisJCXByaW50ayhLRVJOX0NPTlQgIih1c2FibGUpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9SRVNFUlZFRDoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHJlc2VydmVkKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfQUNQSToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgZGF0YSkiKTsKKwkJYnJlYWs7CisJY2FzZSBFODIwX05WUzoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgTlZTKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfVU5VU0FCTEU6CisJCXByaW50ayhLRVJOX0NPTlQgIih1bnVzYWJsZSkiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fQ09OVCAidHlwZSAldSIsIHR5cGUpOworCQlicmVhazsKKwl9CiB9CiAKIHZvaWQgX19pbml0IGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobykKQEAgLTEzNCwyNyArMTY1LDggQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGU4MjAubWFwW2ldLmFkZHIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkgICAgICAgKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplKSk7Ci0JCXN3aXRjaCAoZTgyMC5tYXBbaV0udHlwZSkgewotCQljYXNlIEU4MjBfUkFNOgotCQljYXNlIEU4MjBfUkVTRVJWRURfS0VSTjoKLQkJCXByaW50ayhLRVJOX0NPTlQgIih1c2FibGUpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfUkVTRVJWRUQ6Ci0JCQlwcmludGsoS0VSTl9DT05UICIocmVzZXJ2ZWQpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfQUNQSToKLQkJCXByaW50ayhLRVJOX0NPTlQgIihBQ1BJIGRhdGEpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfTlZTOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgTlZTKVxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBFODIwX1VOVVNBQkxFOgotCQkJcHJpbnRrKCIodW51c2FibGUpXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fQ09OVCAidHlwZSAldVxuIiwgZTgyMC5tYXBbaV0udHlwZSk7Ci0JCQlicmVhazsKLQkJfQorCQllODIwX3ByaW50X3R5cGUoZTgyMC5tYXBbaV0udHlwZSk7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJfQogfQogCkBAIC0yMjEsNyArMjMzLDcgQEAKICAqLwogCiBpbnQgX19pbml0IHNhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLAotCQkJCWludCAqcG5yX21hcCkKKwkJCSAgICAgdTMyICpwbnJfbWFwKQogewogCXN0cnVjdCBjaGFuZ2VfbWVtYmVyIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqcGJpb3M7IC8qIHBvaW50ZXIgdG8gb3JpZ2luYWwgYmlvcyBlbnRyeSAqLwpAQCAtNDE3LDExICs0MjksMTIgQEAKIAlyZXR1cm4gX19hcHBlbmRfZTgyMF9tYXAoYmlvc21hcCwgbnJfbWFwKTsKIH0KIAotc3RhdGljIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2VfbWFwKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LAorc3RhdGljIHU2NCBfX2luaXQgX19lODIwX3VwZGF0ZV9yYW5nZShzdHJ1Y3QgZTgyMG1hcCAqZTgyMHgsIHU2NCBzdGFydCwKIAkJCQkJdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAogCQkJCQl1bnNpZ25lZCBuZXdfdHlwZSkKIHsKLQlpbnQgaTsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGludCBpOwogCXU2NCByZWFsX3VwZGF0ZWRfc2l6ZSA9IDA7CiAKIAlCVUdfT04ob2xkX3R5cGUgPT0gbmV3X3R5cGUpOwpAQCAtNDI5LDI3ICs0NDIsNTUgQEAKIAlpZiAoc2l6ZSA+IChVTExPTkdfTUFYIC0gc3RhcnQpKQogCQlzaXplID0gVUxMT05HX01BWCAtIHN0YXJ0OwogCi0JZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKKwllbmQgPSBzdGFydCArIHNpemU7CisJcHJpbnRrKEtFUk5fREVCVUcgImU4MjAgdXBkYXRlIHJhbmdlOiAlMDE2THggLSAlMDE2THggIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZW5kKTsKKwllODIwX3ByaW50X3R5cGUob2xkX3R5cGUpOworCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gIik7CisJZTgyMF9wcmludF90eXBlKG5ld190eXBlKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGU4MjB4LT5ucl9tYXA7IGkrKykgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIweC0+bWFwW2ldOwogCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJdTY0IGVpX2VuZDsKKwogCQlpZiAoZWktPnR5cGUgIT0gb2xkX3R5cGUpCiAJCQljb250aW51ZTsKLQkJLyogdG90YWxseSBjb3ZlcmVkPyAqLwotCQlpZiAoZWktPmFkZHIgPj0gc3RhcnQgJiYKLQkJICAgIChlaS0+YWRkciArIGVpLT5zaXplKSA8PSAoc3RhcnQgKyBzaXplKSkgeworCisJCWVpX2VuZCA9IGVpLT5hZGRyICsgZWktPnNpemU7CisJCS8qIHRvdGFsbHkgY292ZXJlZCBieSBuZXcgcmFuZ2U/ICovCisJCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJiBlaV9lbmQgPD0gZW5kKSB7CiAJCQllaS0+dHlwZSA9IG5ld190eXBlOwogCQkJcmVhbF91cGRhdGVkX3NpemUgKz0gZWktPnNpemU7CiAJCQljb250aW51ZTsKIAkJfQorCisJCS8qIG5ldyByYW5nZSBpcyB0b3RhbGx5IGNvdmVyZWQ/ICovCisJCWlmIChlaS0+YWRkciA8IHN0YXJ0ICYmIGVpX2VuZCA+IGVuZCkgeworCQkJX19lODIwX2FkZF9yZWdpb24oZTgyMHgsIHN0YXJ0LCBzaXplLCBuZXdfdHlwZSk7CisJCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgZW5kLCBlaV9lbmQgLSBlbmQsIGVpLT50eXBlKTsKKwkJCWVpLT5zaXplID0gc3RhcnQgLSBlaS0+YWRkcjsKKwkJCXJlYWxfdXBkYXRlZF9zaXplICs9IHNpemU7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qIHBhcnRpYWxseSBjb3ZlcmVkICovCiAJCWZpbmFsX3N0YXJ0ID0gbWF4KHN0YXJ0LCBlaS0+YWRkcik7Ci0JCWZpbmFsX2VuZCA9IG1pbihzdGFydCArIHNpemUsIGVpLT5hZGRyICsgZWktPnNpemUpOworCQlmaW5hbF9lbmQgPSBtaW4oZW5kLCBlaV9lbmQpOwogCQlpZiAoZmluYWxfc3RhcnQgPj0gZmluYWxfZW5kKQogCQkJY29udGludWU7Ci0JCWU4MjBfYWRkX3JlZ2lvbihmaW5hbF9zdGFydCwgZmluYWxfZW5kIC0gZmluYWxfc3RhcnQsCi0JCQkJCSBuZXdfdHlwZSk7CisKKwkJX19lODIwX2FkZF9yZWdpb24oZTgyMHgsIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKKwkJCQkgIG5ld190eXBlKTsKKwogCQlyZWFsX3VwZGF0ZWRfc2l6ZSArPSBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydDsKIAorCQkvKgorCQkgKiBsZWZ0IHJhbmdlIGNvdWxkIGJlIGhlYWQgb3IgdGFpbCwgc28gbmVlZCB0byB1cGRhdGUKKwkJICogc2l6ZSBhdCBmaXJzdC4KKwkJICovCiAJCWVpLT5zaXplIC09IGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0OwogCQlpZiAoZWktPmFkZHIgPCBmaW5hbF9zdGFydCkKIAkJCWNvbnRpbnVlOwpAQCAtNDYxLDEzICs1MDIsMTMgQEAKIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCiAJCQkgICAgIHVuc2lnbmVkIG5ld190eXBlKQogewotCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZV9tYXAoJmU4MjAsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwgbmV3X3R5cGUpOworCXJldHVybiBfX2U4MjBfdXBkYXRlX3JhbmdlKCZlODIwLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsIG5ld190eXBlKTsKIH0KIAogc3RhdGljIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2Vfc2F2ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJCQkJICB1bnNpZ25lZCBvbGRfdHlwZSwgdW5zaWduZWQgbmV3X3R5cGUpCiB7Ci0JcmV0dXJuIGU4MjBfdXBkYXRlX3JhbmdlX21hcCgmZTgyMF9zYXZlZCwgc3RhcnQsIHNpemUsIG9sZF90eXBlLAorCXJldHVybiBfX2U4MjBfdXBkYXRlX3JhbmdlKCZlODIwX3NhdmVkLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsCiAJCQkJICAgICBuZXdfdHlwZSk7CiB9CiAKQEAgLTUxMSw3ICs1NTIsNyBAQAogCiB2b2lkIF9faW5pdCB1cGRhdGVfZTgyMCh2b2lkKQogewotCWludCBucl9tYXA7CisJdTMyIG5yX21hcDsKIAogCW5yX21hcCA9IGU4MjAubnJfbWFwOwogCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZucl9tYXApKQpAQCAtNTIyLDcgKzU2Myw3IEBACiB9CiBzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX2U4MjBfc2F2ZWQodm9pZCkKIHsKLQlpbnQgbnJfbWFwOworCXUzMiBucl9tYXA7CiAKIAlucl9tYXAgPSBlODIwX3NhdmVkLm5yX21hcDsKIAlpZiAoc2FuaXRpemVfZTgyMF9tYXAoZTgyMF9zYXZlZC5tYXAsIEFSUkFZX1NJWkUoZTgyMF9zYXZlZC5tYXApLCAmbnJfbWFwKSkKQEAgLTEwMjAsOCArMTA2MSw4IEBACiAJCQljb250aW51ZTsKIAkJcmV0dXJuIGFkZHI7CiAJfQotCXJldHVybiAtMVVMOwogCisJcmV0dXJuIC0xVUxMOwogfQogCiAvKgpAQCAtMTAzNCwxMyArMTA3NSwyMiBAQAogCXU2NCBzdGFydDsKIAogCXN0YXJ0ID0gc3RhcnR0OwotCXdoaWxlIChzaXplIDwgc2l6ZXQpCisJd2hpbGUgKHNpemUgPCBzaXpldCAmJiAoc3RhcnQgKyAxKSkKIAkJc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHN0YXJ0LCAmc2l6ZSwgYWxpZ24pOwogCiAJaWYgKHNpemUgPCBzaXpldCkKIAkJcmV0dXJuIDA7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHN0YXJ0ID49IE1BWE1FTSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXJ0ICsgc2l6ZSA+IE1BWE1FTSkKKwkJc2l6ZSA9IE1BWE1FTSAtIHN0YXJ0OworI2VuZGlmCisKIAlhZGRyID0gcm91bmRfZG93bihzdGFydCArIHNpemUgLSBzaXpldCwgYWxpZ24pOworCWlmIChhZGRyIDwgc3RhcnQpCisJCXJldHVybiAwOwogCWU4MjBfdXBkYXRlX3JhbmdlKGFkZHIsIHNpemV0LCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CiAJZTgyMF91cGRhdGVfcmFuZ2Vfc2F2ZWQoYWRkciwgc2l6ZXQsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIAlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgZWFybHlfcmVzZXJ2ZV9lODIwXG4iKTsKQEAgLTEyNTMsNyArMTMwMyw3IEBACiB2b2lkIF9faW5pdCBmaW5pc2hfZTgyMF9wYXJzaW5nKHZvaWQpCiB7CiAJaWYgKHVzZXJkZWYpIHsKLQkJaW50IG5yID0gZTgyMC5ucl9tYXA7CisJCXUzMiBuciA9IGU4MjAubnJfbWFwOwogCiAJCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZucikgPCAwKQogCQkJZWFybHlfcGFuaWMoIkludmFsaWQgdXNlciBzdXBwbGllZCBtZW1vcnkgbWFwIik7CkBAIC0xMzM2LDcgKzEzODYsNyBAQAogY2hhciAqX19pbml0IGRlZmF1bHRfbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCkKIHsKIAljaGFyICp3aG8gPSAiQklPUy1lODIwIjsKLQlpbnQgbmV3X25yOworCXUzMiBuZXdfbnI7CiAJLyoKIAkgKiBUcnkgdG8gY29weSB0aGUgQklPUy1zdXBwbGllZCBFODIwLW1hcC4KIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDYzOWFkOTguLjMzNWYwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXJldHVybiAoY3RybCAmIERCR1BfRVJST1IpID8gLURCR1BfRVJSQ09ERShjdHJsKSA6IERCR1BfTEVOKGN0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBkYmdwX21kZWxheShpbnQgbXMpCitzdGF0aWMgdm9pZCBfX2luaXQgZGJncF9tZGVsYXkoaW50IG1zKQogewogCWludCBpOwogCkBAIC0zMTEsNyArMzExLDcgQEAKIAl3cml0ZWwoaGksICZlaGNpX2RlYnVnLT5kYXRhNDcpOwogfQogCi1zdGF0aWMgdm9pZCBkYmdwX2dldF9kYXRhKHZvaWQgKmJ1ZiwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgZGJncF9nZXRfZGF0YSh2b2lkICpidWYsIGludCBzaXplKQogewogCXVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOwogCXUzMiBsbywgaGk7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRiZ3BfYnVsa19yZWFkKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsIHZvaWQgKmRhdGEsCitzdGF0aWMgaW50IF9faW5pdCBkYmdwX2J1bGtfcmVhZCh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LCB2b2lkICpkYXRhLAogCQkJCSBpbnQgc2l6ZSkKIHsKIAl1MzIgcGlkcywgYWRkciwgY3RybDsKQEAgLTM4Niw4ICszODYsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwgaW50IHJlcXVlc3QsCi0JaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQorc3RhdGljIGludCBfX2luaXQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwKKwlpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQorc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQogewogCXUzMiBwb3J0c2M7CiAJdTMyIGRlbGF5X3RpbWUsIGRlbGF5OwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIGludCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgaW50IF9faW5pdCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0LCByZXBzOwpAQCAtNTU3LDEzICs1NTcsMTMgQEAKIAogdHlwZWRlZiB2b2lkICgqc2V0X2RlYnVnX3BvcnRfdCkoaW50IHBvcnQpOwogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQorc3RhdGljIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCiB7CiB9CiAKLXN0YXRpYyBzZXRfZGVidWdfcG9ydF90IHNldF9kZWJ1Z19wb3J0ID0gZGVmYXVsdF9zZXRfZGVidWdfcG9ydDsKK3N0YXRpYyBzZXRfZGVidWdfcG9ydF90IF9faW5pdGRhdGEgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0OwogCi1zdGF0aWMgdm9pZCBudmlkaWFfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgdm9pZCBfX2luaXQgbnZpZGlhX3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQogewogCXUzMiBkd29yZDsKIAlkd29yZCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDg5OWU4OTMuLmM5MjlhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC00NDIsOCArNDQyLDcgQEAKIAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCi0JLyogTm90ZSwgX1RJRl9TRUNDT01QIGlzIGJpdCBudW1iZXIgOCwgYW5kIHNvIGl0IG5lZWRzIHRlc3R3IGFuZCBub3QgdGVzdGIgKi8KLQl0ZXN0dyAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzZW50ZXJfYXVkaXQKIHN5c2VudGVyX2RvX2NhbGw6CiAJY21wbCAkKG5yX3N5c2NhbGxzKSwgJWVheApAQCAtNDU0LDcgKzQ1Myw3IEBACiAJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZKQogCVRSQUNFX0lSUVNfT0ZGCiAJbW92bCBUSV9mbGFncyglZWJwKSwgJWVjeAotCXRlc3R3ICRfVElGX0FMTFdPUktfTUFTSywgJWN4CisJdGVzdGwgJF9USUZfQUxMV09SS19NQVNLLCAlZWN4CiAJam5lIHN5c2V4aXRfYXVkaXQKIHN5c2VudGVyX2V4aXQ6CiAvKiBpZiBzb21ldGhpbmcgbW9kaWZpZXMgcmVnaXN0ZXJzIGl0IG11c3QgYWxzbyBkaXNhYmxlIHN5c2V4aXQgKi8KQEAgLTQ2OCw3ICs0NjcsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogc3lzZW50ZXJfYXVkaXQ6Ci0JdGVzdHcgJChfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVlYnApCisJdGVzdGwgJChfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVlYnApCiAJam56IHN5c2NhbGxfdHJhY2VfZW50cnkKIAlhZGRsICQ0LCVlc3AKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKQEAgLTQ4NSw3ICs0ODQsNyBAQAogCWptcCBzeXNlbnRlcl9kb19jYWxsCiAKIHN5c2V4aXRfYXVkaXQ6Ci0JdGVzdHcgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCAlY3gKKwl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVlY3gKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKIAlUUkFDRV9JUlFTX09OCiAJRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCkBAIC00OTgsNyArNDk3LDcgQEAKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCAlY3gKKwl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVlY3gKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKIAltb3ZsIFBUX0VBWCglZXNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwogCWptcCBzeXNlbnRlcl9leGl0CkBAIC01MjMsOCArNTIyLDcgQEAKIAlTQVZFX0FMTAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCQkJCQkjIHN5c3RlbSBjYWxsIHRyYWNpbmcgaW4gb3BlcmF0aW9uIC8gZW11bGF0aW9uCi0JLyogTm90ZSwgX1RJRl9TRUNDT01QIGlzIGJpdCBudW1iZXIgOCwgYW5kIHNvIGl0IG5lZWRzIHRlc3R3IGFuZCBub3QgdGVzdGIgKi8KLQl0ZXN0dyAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzY2FsbF90cmFjZV9lbnRyeQogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqYWUgc3lzY2FsbF9iYWRzeXMKQEAgLTUzOCw3ICs1MzYsNyBAQAogCQkJCQkjIGJldHdlZW4gc2FtcGxpbmcgYW5kIHRoZSBpcmV0CiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJF9USUZfQUxMV09SS19NQVNLLCAlY3gJIyBjdXJyZW50LT53b3JrCisJdGVzdGwgJF9USUZfQUxMV09SS19NQVNLLCAlZWN4CSMgY3VycmVudC0+d29yawogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCiByZXN0b3JlX2FsbDoKQEAgLTY3Myw3ICs2NzEsNyBAQAogCSMgcGVyZm9ybSBzeXNjYWxsIGV4aXQgdHJhY2luZwogCUFMSUdOCiBzeXNjYWxsX2V4aXRfd29yazoKLQl0ZXN0YiAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwgJWNsCisJdGVzdGwgJF9USUZfV09SS19TWVNDQUxMX0VYSVQsICVlY3gKIAlqeiB3b3JrX3BlbmRpbmcKIAlUUkFDRV9JUlFTX09OCiAJRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCSMgY291bGQgbGV0IHN5c2NhbGxfdHJhY2VfbGVhdmUoKSBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDgzZDE4MzYuLmEzMzFlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC0zNjgsNiArMzY4LDcgQEAKIEVORChzYXZlX3Jlc3QpCiAKIC8qIHNhdmUgY29tcGxldGUgc3RhY2sgZnJhbWUgKi8KKwkucHVzaHNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IgogRU5UUlkoc2F2ZV9wYXJhbm9pZCkKIAlYQ1BUX0ZSQU1FIDEgUkRJKzgKIAljbGQKQEAgLTM5Niw2ICszOTcsNyBAQAogMToJcmV0CiAJQ0ZJX0VORFBST0MKIEVORChzYXZlX3BhcmFub2lkKQorCS5wb3BzZWN0aW9uCiAKIC8qCiAgKiBBIG5ld2x5IGZvcmtlZCBwcm9jZXNzIGRpcmVjdGx5IGNvbnRleHQgc3dpdGNoZXMgaW50byB0aGlzIGFkZHJlc3MuCkBAIC00MTYsNyArNDE4LDYgQEAKIAogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCi0JQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJUkVTVE9SRV9SRVNUCiAKIAl0ZXN0bCAkMywgQ1MtQVJHT0ZGU0VUKCVyc3ApCQkjIGZyb20ga2VybmVsX3RocmVhZD8KQEAgLTQyOCw3ICs0MjksNiBAQAogCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyZGksIC1BUkdPRkZTRVQKIAlqbXAgcmV0X2Zyb21fc3lzX2NhbGwJCQkjIGdvIHRvIHRoZSBTWVNSRVQgZmFzdHBhdGgKIAotCUNGSV9SRVNUT1JFX1NUQVRFCiAJQ0ZJX0VORFBST0MKIEVORChyZXRfZnJvbV9mb3JrKQogCkBAIC05ODQsNiArOTg0LDggQEAKICNlbmRpZgogYXBpY2ludGVycnVwdCBMT0NBTF9USU1FUl9WRUNUT1IgXAogCWFwaWNfdGltZXJfaW50ZXJydXB0IHNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorYXBpY2ludGVycnVwdCBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IgXAorCWdlbmVyaWNfaW50ZXJydXB0IHNtcF9nZW5lcmljX2ludGVycnVwdAogCiAjaWZkZWYgQ09ORklHX1NNUAogYXBpY2ludGVycnVwdCBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggMjMxYmRkMy4uNzZmNzE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMzg5LDc5ICszODksNiBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCi0vKiBBZGQgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KLXN0YXRpYyBpbnQgcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAotCQkJCXVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKLXsKLQlpbnQgaW5kZXg7Ci0KLQlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLwotCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwotCWJhcnJpZXIoKTsKLQljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKLQljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOwotCSpkZXB0aCA9IGluZGV4OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCi1zdGF0aWMgdm9pZCBwb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KQotewotCWludCBpbmRleDsKLQotCWluZGV4ID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7Ci0KLQlpZiAodW5saWtlbHkoaW5kZXggPCAwKSkgewotCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOwotCQlXQVJOX09OKDEpOwotCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLCBvdGhlcndpc2Ugd2UgaGF2ZSBubyB3aGVyZSB0byBnbyAqLwotCQkqcmV0ID0gKHVuc2lnbmVkIGxvbmcpcGFuaWM7Ci0JCXJldHVybjsKLQl9Ci0KLQkqcmV0ID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQ7Ci0JdHJhY2UtPmZ1bmMgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmM7Ci0JdHJhY2UtPmNhbGx0aW1lID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZTsKLQl0cmFjZS0+b3ZlcnJ1biA9IGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKLQl0cmFjZS0+ZGVwdGggPSBpbmRleDsKLQliYXJyaWVyKCk7Ci0JY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKLQotfQotCi0vKgotICogU2VuZCB0aGUgdHJhY2UgdG8gdGhlIHJpbmctYnVmZmVyLgotICogQHJldHVybiB0aGUgb3JpZ2luYWwgcmV0dXJuIGFkZHJlc3MuCi0gKi8KLXVuc2lnbmVkIGxvbmcgZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHZvaWQpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlwb3BfcmV0dXJuX3RyYWNlKCZ0cmFjZSwgJnJldCk7Ci0JdHJhY2UucmV0dGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlmdHJhY2VfZ3JhcGhfcmV0dXJuKCZ0cmFjZSk7Ci0KLQlpZiAodW5saWtlbHkoIXJldCkpIHsKLQkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKLQkJV0FSTl9PTigxKTsKLQkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYy4gV2hhdCBlbHNlIHRvIGRvPyAqLwotCQlyZXQgPSAodW5zaWduZWQgbG9uZylwYW5pYzsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycwogICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KQEAgLTUyMSw3ICs0NDgsNyBAQAogCiAJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlpZiAocHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCiAJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgewogCQkqcGFyZW50ID0gb2xkOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggYWMxMDhkMS4uM2Y4NTc5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtMTgsNyArMTgsNyBAQAogewogCXJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkoKTsKIAotCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9lbmQpLCAiVEVYVCBEQVRBIEJTUyIpOworCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9fYnNzX3N0b3ApLCAiVEVYVCBEQVRBIEJTUyIpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogUmVzZXJ2ZSBJTklUUkQgKi8KQEAgLTI5LDkgKzI5LDYgQEAKIAkJcmVzZXJ2ZV9lYXJseShyYW1kaXNrX2ltYWdlLCByYW1kaXNrX2VuZCwgIlJBTURJU0siKTsKIAl9CiAjZW5kaWYKLQlyZXNlcnZlX2Vhcmx5KGluaXRfcGdfdGFibGVzX3N0YXJ0LCBpbml0X3BnX3RhYmxlc19lbmQsCi0JCQkiSU5JVF9QR19UQUJMRSIpOwotCiAJcmVzZXJ2ZV9lYmRhX3JlZ2lvbigpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYwppbmRleCBmNWIyNzIyLi43MGVhYTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogCXJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkoKTsKIAotCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9lbmQpLCAiVEVYVCBEQVRBIEJTUyIpOworCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9fYnNzX3N0b3ApLCAiVEVYVCBEQVRBIEJTUyIpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogUmVzZXJ2ZSBJTklUUkQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGMzMmNhMTkuLjMwNjgzODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtMzgsNDIgKzM4LDQwIEBACiAjZGVmaW5lIFg4Nl9WRU5ET1JfSUQJbmV3X2NwdV9kYXRhK0NQVUlORk9feDg2X3ZlbmRvcl9pZAogCiAvKgotICogVGhpcyBpcyBob3cgbXVjaCBtZW1vcnkgKmluIGFkZGl0aW9uIHRvIHRoZSBtZW1vcnkgY292ZXJlZCB1cCB0bwotICogYW5kIGluY2x1ZGluZyBfZW5kKiB3ZSBuZWVkIG1hcHBlZCBpbml0aWFsbHkuCisgKiBUaGlzIGlzIGhvdyBtdWNoIG1lbW9yeSBpbiBhZGRpdGlvbiB0byB0aGUgbWVtb3J5IGNvdmVyZWQgdXAgdG8KKyAqIGFuZCBpbmNsdWRpbmcgX2VuZCB3ZSBuZWVkIG1hcHBlZCBpbml0aWFsbHkuCiAgKiBXZSBuZWVkOgotICogIC0gb25lIGJpdCBmb3IgZWFjaCBwb3NzaWJsZSBwYWdlLCBidXQgb25seSBpbiBsb3cgbWVtb3J5LCB3aGljaCBtZWFucwotICogICAgIDJeMzIvNDA5Ni84ID0gMTI4SyB3b3JzdCBjYXNlICg0Ry80RyBzcGxpdC4pCi0gKiAgLSBlbm91Z2ggc3BhY2UgdG8gbWFwIGFsbCBsb3cgbWVtb3J5LCB3aGljaCBtZWFucwotICogICAgICgyXjMyLzQwOTYpIC8gMTAyNCBwYWdlcyAod29yc3QgY2FzZSwgbm9uIFBBRSkKLSAqICAgICAoMl4zMi80MDk2KSAvIDUxMiArIDQgcGFnZXMgKHdvcnN0IGNhc2UgZm9yIFBBRSkKLSAqICAtIGEgZmV3IHBhZ2VzIGZvciBhbGxvY2F0b3IgdXNlIGJlZm9yZSB0aGUga2VybmVsIHBhZ2V0YWJsZSBoYXMKLSAqICAgICBiZWVuIHNldCB1cAorICogICAgIChLRVJORUxfSU1BR0VfU0laRS80MDk2KSAvIDEwMjQgcGFnZXMgKHdvcnN0IGNhc2UsIG5vbiBQQUUpCisgKiAgICAgKEtFUk5FTF9JTUFHRV9TSVpFLzQwOTYpIC8gNTEyICsgNCBwYWdlcyAod29yc3QgY2FzZSBmb3IgUEFFKQogICoKICAqIE1vZHVsbyByb3VuZGluZywgZWFjaCBtZWdhYnl0ZSBhc3NpZ25lZCBoZXJlIHJlcXVpcmVzIGEga2lsb2J5dGUgb2YKICAqIG1lbW9yeSwgd2hpY2ggaXMgY3VycmVudGx5IHVucmVjbGFpbWVkLgogICoKICAqIFRoaXMgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgYSBwYWdlLgorICoKKyAqIEtFUk5FTF9JTUFHRV9TSVpFIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gcGEoX2VuZCkKKyAqIGFuZCBzbWFsbCB0aGFuIG1heF9sb3dfcGZuLCBvdGhlcndpc2Ugd2lsbCB3YXN0ZSBzb21lIHBhZ2UgdGFibGUgZW50cmllcwogICovCi1MT1dfUEFHRVMgPSAxPDwoMzItUEFHRV9TSElGVF9hc20pCi0KLS8qCi0gKiBUbyBwcmVzZXJ2ZSB0aGUgRE1BIHBvb2wgaW4gUEFHRUFMTE9DIGtlcm5lbHMsIHdlJ2xsIGFsbG9jYXRlCi0gKiBwYWdldGFibGVzIGZyb20gYWJvdmUgdGhlIDE2TUIgRE1BIGxpbWl0LCBzbyB3ZSdsbCBoYXZlIHRvIHNldAotICogdXAgcGFnZXRhYmxlcyAxNk1CIG1vcmUgKHdvcnN0LWNhc2UpOgotICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotTE9XX1BBR0VTID0gTE9XX1BBR0VTICsgMHgxMDAwMDAwCi0jZW5kaWYKIAogI2lmIFBUUlNfUEVSX1BNRCA+IDEKLVBBR0VfVEFCTEVfU0laRSA9IChMT1dfUEFHRVMgLyBQVFJTX1BFUl9QTUQpICsgUFRSU19QRVJfUEdECisjZGVmaW5lIFBBR0VfVEFCTEVfU0laRShwYWdlcykgKCgocGFnZXMpIC8gUFRSU19QRVJfUE1EKSArIFBUUlNfUEVSX1BHRCkKICNlbHNlCi1QQUdFX1RBQkxFX1NJWkUgPSAoTE9XX1BBR0VTIC8gUFRSU19QRVJfUEdEKQorI2RlZmluZSBQQUdFX1RBQkxFX1NJWkUocGFnZXMpICgocGFnZXMpIC8gUFRSU19QRVJfUEdEKQogI2VuZGlmCi1CT09UQklUTUFQX1NJWkUgPSBMT1dfUEFHRVMgLyA4Ci1BTExPQ0FUT1JfU0xPUCA9IDQKIAotSU5JVF9NQVBfQkVZT05EX0VORCA9IEJPT1RCSVRNQVBfU0laRSArIChQQUdFX1RBQkxFX1NJWkUgKyBBTExPQ0FUT1JfU0xPUCkqUEFHRV9TSVpFX2FzbQorLyogRW5vdWdoIHNwYWNlIHRvIGZpdCBwYWdldGFibGVzIGZvciB0aGUgbG93IG1lbW9yeSBsaW5lYXIgbWFwICovCitNQVBQSU5HX0JFWU9ORF9FTkQgPSBcCisJUEFHRV9UQUJMRV9TSVpFKCgoMTw8MzIpIC0gX19QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVAorCisvKgorICogV29yc3QtY2FzZSBzaXplIG9mIHRoZSBrZXJuZWwgbWFwcGluZyB3ZSBuZWVkIHRvIG1ha2U6CisgKiB0aGUgd29yc3QtY2FzZSBzaXplIG9mIHRoZSBrZXJuZWwgaXRzZWxmLCBwbHVzIHRoZSBleHRyYSB3ZSBuZWVkCisgKiB0byBtYXAgZm9yIHRoZSBsaW5lYXIgbWFwLgorICovCitLRVJORUxfUEFHRVMgPSAoS0VSTkVMX0lNQUdFX1NJWkUgKyBNQVBQSU5HX0JFWU9ORF9FTkQpPj5QQUdFX1NISUZUCisKK0lOSVRfTUFQX1NJWkUgPSBQQUdFX1RBQkxFX1NJWkUoS0VSTkVMX1BBR0VTKSAqIFBBR0VfU0laRV9hc20KK1JFU0VSVkVfQlJLKHBhZ2V0YWJsZXMsIElOSVRfTUFQX1NJWkUpCiAKIC8qCiAgKiAzMi1iaXQga2VybmVsIGVudHJ5cG9pbnQ7IG9ubHkgdXNlZCBieSB0aGUgYm9vdCBDUFUuICBPbiBlbnRyeSwKQEAgLTE2NiwxMCArMTY0LDEwIEBACiAKIC8qCiAgKiBJbml0aWFsaXplIHBhZ2UgdGFibGVzLiAgVGhpcyBjcmVhdGVzIGEgUERFIGFuZCBhIHNldCBvZiBwYWdlCi0gKiB0YWJsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGltbWVkaWF0ZWx5IGJleW9uZCBfZW5kLiAgVGhlIHZhcmlhYmxlCi0gKiBpbml0X3BnX3RhYmxlc19lbmQgaXMgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmaXJzdCAic2FmZSIgbG9jYXRpb24uCisgKiB0YWJsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGltbWVkaWF0ZWx5IGJleW9uZCBfX2Jya19iYXNlLiAgVGhlIHZhcmlhYmxlCisgKiBfYnJrX2VuZCBpcyBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0ICJzYWZlIiBsb2NhdGlvbi4KICAqIE1hcHBpbmdzIGFyZSBjcmVhdGVkIGJvdGggYXQgdmlydHVhbCBhZGRyZXNzIDAgKGlkZW50aXR5IG1hcHBpbmcpCi0gKiBhbmQgUEFHRV9PRkZTRVQgZm9yIHVwIHRvIF9lbmQrc2l6ZW9mKHBhZ2UgdGFibGVzKStJTklUX01BUF9CRVlPTkRfRU5ELgorICogYW5kIFBBR0VfT0ZGU0VUIGZvciB1cCB0byBfZW5kLgogICoKICAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KQEAgLTE5MCw4ICsxODgsNyBAQAogCiAJeG9ybCAlZWJ4LCVlYngJCQkJLyogJWVieCBpcyBrZXB0IGF0IHplcm8gKi8KIAotCW1vdmwgJHBhKHBnMCksICVlZGkKLQltb3ZsICVlZGksIHBhKGluaXRfcGdfdGFibGVzX3N0YXJ0KQorCW1vdmwgJHBhKF9fYnJrX2Jhc2UpLCAlZWRpCiAJbW92bCAkcGEoc3dhcHBlcl9wZ19wbWQpLCAlZWR4CiAJbW92bCAkUFRFX0lERU5UX0FUVFIsICVlYXgKIDEwOgpAQCAtMjA5LDE0ICsyMDYsMTQgQEAKIAlsb29wIDExYgogCiAJLyoKLQkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byBhbmQgaW5jbHVkaW5nIElOSVRfTUFQX0JFWU9ORF9FTkQKLQkgKiBieXRlcyBiZXlvbmQgdGhlIGVuZCBvZiBvdXIgb3duIHBhZ2UgdGFibGVzLgorCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIHRoZSBlbmQgKyBNQVBQSU5HX0JFWU9ORF9FTkQuCiAJICovCi0JbGVhbCAoSU5JVF9NQVBfQkVZT05EX0VORCtQVEVfSURFTlRfQVRUUikoJWVkaSksJWVicAorCW1vdmwgJHBhKF9lbmQpICsgTUFQUElOR19CRVlPTkRfRU5EICsgUFRFX0lERU5UX0FUVFIsICVlYnAKIAljbXBsICVlYnAsJWVheAogCWpiIDEwYgogMToKLQltb3ZsICVlZGkscGEoaW5pdF9wZ190YWJsZXNfZW5kKQorCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlZGkKKwltb3ZsICVlZGksIHBhKF9icmtfZW5kKQogCXNocmwgJDEyLCAlZWF4CiAJbW92bCAlZWF4LCBwYShtYXhfcGZuX21hcHBlZCkKIApAQCAtMjI3LDggKzIyNCw3IEBACiAKIHBhZ2VfcGRlX29mZnNldCA9IChfX1BBR0VfT0ZGU0VUID4+IDIwKTsKIAotCW1vdmwgJHBhKHBnMCksICVlZGkKLQltb3ZsICVlZGksIHBhKGluaXRfcGdfdGFibGVzX3N0YXJ0KQorCW1vdmwgJHBhKF9fYnJrX2Jhc2UpLCAlZWRpCiAJbW92bCAkcGEoc3dhcHBlcl9wZ19kaXIpLCAlZWR4CiAJbW92bCAkUFRFX0lERU5UX0FUVFIsICVlYXgKIDEwOgpAQCAtMjQyLDE0ICsyMzgsMTMgQEAKIAlhZGRsICQweDEwMDAsJWVheAogCWxvb3AgMTFiCiAJLyoKLQkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byBhbmQgaW5jbHVkaW5nIElOSVRfTUFQX0JFWU9ORF9FTkQKLQkgKiBieXRlcyBiZXlvbmQgdGhlIGVuZCBvZiBvdXIgb3duIHBhZ2UgdGFibGVzOyB0aGUgKzB4MDA3IGlzCi0JICogdGhlIGF0dHJpYnV0ZSBiaXRzCisJICogRW5kIGNvbmRpdGlvbjogd2UgbXVzdCBtYXAgdXAgdG8gdGhlIGVuZCArIE1BUFBJTkdfQkVZT05EX0VORC4KIAkgKi8KLQlsZWFsIChJTklUX01BUF9CRVlPTkRfRU5EK1BURV9JREVOVF9BVFRSKSglZWRpKSwlZWJwCisJbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAogCWNtcGwgJWVicCwlZWF4CiAJamIgMTBiCi0JbW92bCAlZWRpLHBhKGluaXRfcGdfdGFibGVzX2VuZCkKKwlhZGRsICRfX1BBR0VfT0ZGU0VULCAlZWRpCisJbW92bCAlZWRpLCBwYShfYnJrX2VuZCkKIAlzaHJsICQxMiwgJWVheAogCW1vdmwgJWVheCwgcGEobWF4X3Bmbl9tYXBwZWQpCiAKQEAgLTYzNiw2ICs2MzEsNyBAQAogCS5maWxsIDEwMjQsNCwwCiBFTlRSWShlbXB0eV96ZXJvX3BhZ2UpCiAJLmZpbGwgNDA5NiwxLDAKKwogLyoKICAqIFRoaXMgc3RhcnRzIHRoZSBkYXRhIHNlY3Rpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1My5jIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKaW5kZXggMTBmOTJmYi4uMzQ3NTQ0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKQEAgLTMsMTcgKzMsMTcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaTgyNTMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogREVGSU5FX1NQSU5MT0NLKGk4MjUzX2xvY2spOwogRVhQT1JUX1NZTUJPTChpODI1M19sb2NrKTsKQEAgLTQwLDcgKzQwLDcgQEAKIHsKIAlzcGluX2xvY2soJmk4MjUzX2xvY2spOwogCi0Jc3dpdGNoKG1vZGUpIHsKKwlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgogCQkvKiBiaW5hcnksIG1vZGUgMiwgTFNCL01TQiwgY2ggMCAqLwogCQlvdXRiX3BpdCgweDM0LCBQSVRfTU9ERSk7CkBAIC05NSw3ICs5NSw3IEBACiAgKiByZWdpc3RlcmVkLiBUaGlzIG1lY2hhbmlzbSByZXBsYWNlcyB0aGUgcHJldmlvdXMgI2lmZGVmIExPQ0FMX0FQSUMgLQogICogIXVzaW5nX2FwaWNfdGltZXIgZGVjaXNpb25zIGluIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKCkKICAqLwotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgcGl0X2Nsb2NrZXZlbnQgPSB7CitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2UgPSB7CiAJLm5hbWUJCT0gInBpdCIsCiAJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5zZXRfbW9kZQk9IGluaXRfcGl0X3RpbWVyLApAQCAtMTE0LDE1ICsxMTQsMTMgQEAKIAkgKiBTdGFydCBwaXQgd2l0aCB0aGUgYm9vdCBjcHUgbWFzayBhbmQgbWFrZSBpdCBnbG9iYWwgYWZ0ZXIgdGhlCiAJICogSU9fQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAkgKi8KLQlwaXRfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXBpdF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsCi0JCQkJICAgICBwaXRfY2xvY2tldmVudC5zaGlmdCk7Ci0JcGl0X2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkYsICZwaXRfY2xvY2tldmVudCk7Ci0JcGl0X2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2xvY2tldmVudCk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2xvY2tldmVudCk7Ci0JZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJnBpdF9jbG9ja2V2ZW50OworCXBpdF9jZS5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCXBpdF9jZS5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBwaXRfY2Uuc2hpZnQpOworCXBpdF9jZS5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRiwgJnBpdF9jZSk7CisJcGl0X2NlLm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmcGl0X2NlKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcGl0X2NlKTsKKwlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmcGl0X2NlOwogfQogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKQEAgLTEzMywxMSArMTMxLDExIEBACiAgKi8KIHN0YXRpYyBjeWNsZV90IHBpdF9yZWFkKHZvaWQpCiB7CisJc3RhdGljIGludCBvbGRfY291bnQ7CisJc3RhdGljIHUzMiBvbGRfamlmczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjb3VudDsKIAl1MzIgamlmczsKLQlzdGF0aWMgaW50IG9sZF9jb3VudDsKLQlzdGF0aWMgdTMyIG9sZF9qaWZzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKIAkvKgpAQCAtMTc5LDkgKzE3Nyw5IEBACiAJICogUHJldmlvdXMgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoZXNlIGNhc2VzIGludGVsbGlnZW50bHkgd2VyZQogCSAqIGJ1Z2d5LCBzbyB3ZSBqdXN0IGRvIHRoZSBzaW1wbGUgdGhpbmcgbm93LgogCSAqLwotCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKSB7CisJaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpCiAJCWNvdW50ID0gb2xkX2NvdW50OwotCX0KKwogCW9sZF9jb3VudCA9IGNvdW50OwogCW9sZF9qaWZzID0gamlmczsKIApAQCAtMTkyLDEzICsxOTAsMTMgQEAKIAlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBMQVRDSCkgKyBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9waXQgPSB7Ci0JLm5hbWUJPSAicGl0IiwKLQkucmF0aW5nID0gMTEwLAotCS5yZWFkCT0gcGl0X3JlYWQsCi0JLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkubXVsdAk9IDAsCi0JLnNoaWZ0CT0gMjAsCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIHBpdF9jcyA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDExMCwKKwkucmVhZAkJPSBwaXRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkubXVsdAkJPSAwLAorCS5zaGlmdAkJPSAyMCwKIH07CiAKIHN0YXRpYyB2b2lkIHBpdF9kaXNhYmxlX2Nsb2Nrc291cmNlKHZvaWQpCkBAIC0yMDYsOSArMjA0LDkgQEAKIAkvKgogCSAqIFVzZSBtdWx0IHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgcmVnaXN0ZXJlZCBvciBub3QKIAkgKi8KLQlpZiAoY2xvY2tzb3VyY2VfcGl0Lm11bHQpIHsKLQkJY2xvY2tzb3VyY2VfdW5yZWdpc3RlcigmY2xvY2tzb3VyY2VfcGl0KTsKLQkJY2xvY2tzb3VyY2VfcGl0Lm11bHQgPSAwOworCWlmIChwaXRfY3MubXVsdCkgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZwaXRfY3MpOworCQlwaXRfY3MubXVsdCA9IDA7CiAJfQogfQogCkBAIC0yMjIsMTMgKzIyMCwxMyBAQAogCSAgKiAtIHdoZW4gbG9jYWwgQVBJQyB0aW1lciBpcyBhY3RpdmUgKFBJVCBpcyBzd2l0Y2hlZCBvZmYpCiAJICAqLwogCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSB8fCBpc19ocGV0X2VuYWJsZWQoKSB8fAotCSAgICBwaXRfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCSAgICBwaXRfY2UubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQykKIAkJcmV0dXJuIDA7CiAKLQljbG9ja3NvdXJjZV9waXQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLAotCQkJCQkJICAgY2xvY2tzb3VyY2VfcGl0LnNoaWZ0KTsKLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3BpdCk7CisJcGl0X2NzLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgcGl0X2NzLnNoaWZ0KTsKKworCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmcGl0X2NzKTsKIH0KIGFyY2hfaW5pdGNhbGwoaW5pdF9waXRfY2xvY2tzb3VyY2UpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYwppbmRleCA3MjBkMjYwLi5hOTc5YjViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYwpAQCAtNywxMCArNywxMCBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIGludCBpb19kZWxheV90eXBlIF9fcmVhZF9tb3N0bHkgPSBDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBFOwogCkBAIC00Nyw4ICs0Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKIAlpZiAoaW9fZGVsYXlfdHlwZSA9PSBDT05GSUdfSU9fREVMQVlfVFlQRV8wWDgwKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHVzaW5nIDB4ZWQgSS9PIGRlbGF5IHBvcnRcbiIsCi0JCQlpZC0+aWRlbnQpOworCQlwcl9ub3RpY2UoIiVzOiB1c2luZyAweGVkIEkvTyBkZWxheSBwb3J0XG4iLCBpZC0+aWRlbnQpOwogCQlpb19kZWxheV90eXBlID0gQ09ORklHX0lPX0RFTEFZX1RZUEVfMFhFRDsKIAl9CiAKQEAgLTY0LDQwICs2Myw0MCBAQAogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIkNvbXBhcSBQcmVzYXJpbyBWNjAwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQjciKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQjciKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiSFAgUGF2aWxpb24gZHY5MDAweiIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQjkiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQjkiKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiSFAgUGF2aWxpb24gZHY2MDAwIiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCOCIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCOCIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiB0eDEwMDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEJGIikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEJGIikKIAkJfQogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIlByZXNhcmlvIEY3MDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEQzIikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEQzIikKIAkJfQogCX0sCiAJeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggZjEzY2ExNi4uM2FhZjdiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMTUsNiArMTUsOSBAQAogCiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCisvKiBGdW5jdGlvbiBwb2ludGVyIGZvciBnZW5lcmljIGludGVycnVwdCB2ZWN0b3IgaGFuZGxpbmcgKi8KK3ZvaWQgKCpnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pKHZvaWQpID0gTlVMTDsKKwogLyoKICAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgogICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCkBAIC00Miw1NSArNDUsNjAgQEAKIC8qCiAgKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgogICovCi1zdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnApCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQogewogCWludCBqOwogCi0Jc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5fX25taV9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJMT0MiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3RpbWVyX2lycXMpOwogCXNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJTUFUiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CiAjZW5kaWYKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKSB7CisJCXNlcV9wcmludGYocCwgIlBMVDogIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5nZW5lcmljX2lycXMpOworCQlzZXFfcHJpbnRmKHAsICIgIFBsYXRmb3JtIGludGVycnVwdHNcbiIpOworCX0KICNpZmRlZiBDT05GSUdfU01QCi0Jc2VxX3ByaW50ZihwLCAiUkVTOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJSRVMiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfcmVzY2hlZF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiQ0FMOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDQUwiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfY2FsbF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCXNlcV9wcmludGYocCwgIlRMQjogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVExCIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RsYl9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRQotCXNlcV9wcmludGYocCwgIlRSTTogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVFJNIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RoZXJtYWxfY291bnQpOwogCXNlcV9wcmludGYocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKICMgaWZkZWYgQ09ORklHX1g4Nl82NAotCXNlcV9wcmludGYocCwgIlRIUjogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEhSIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RocmVzaG9sZF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUaHJlc2hvbGQgQVBJQyBpbnRlcnJ1cHRzXG4iKTsKICMgZW5kaWYKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXNlcV9wcmludGYocCwgIlNQVTogIik7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0Jc2VxX3ByaW50ZihwLCAiRVJSOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOworCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIkVSUiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0Jc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOworCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIk1JUyIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KQEAgLTk4LDE5ICsxMDYsMjIgQEAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOworCWludCBpID0gKihsb2ZmX3QgKikgdiwgaiwgcHJlYzsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJaWYgKGkgPiBucl9pcnFzKQogCQlyZXR1cm4gMDsKIAorCWZvciAocHJlYyA9IDMsIGogPSAxMDAwOyBwcmVjIDwgMTAgJiYgaiA8PSBucl9pcnFzOyArK3ByZWMpCisJCWogKj0gMTA7CisKIAlpZiAoaSA9PSBucl9pcnFzKQotCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHApOworCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHAsIHByZWMpOwogCiAJLyogcHJpbnQgaGVhZGVyICovCiAJaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOworCQlzZXFfcHJpbnRmKHAsICIlKnMiLCBwcmVjICsgOCwgIiIpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIiwgaik7CiAJCXNlcV9wdXRjKHAsICdcbicpOwpAQCAtMTIxLDIzICsxMzIsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKLSNlbHNlCiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7Ci0jZW5kaWYKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKIAkJZ290byBvdXQ7CiAKLQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0Jc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbHNlCisJc2VxX3ByaW50ZihwLCAiJSpkOiAiLCBwcmVjLCBpKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotI2VuZGlmCiAJc2VxX3ByaW50ZihwLCAiICU4cyIsIGRlc2MtPmNoaXAtPm5hbWUpOwogCXNlcV9wcmludGYocCwgIi0lLThzIiwgZGVzYy0+bmFtZSk7CiAKQEAgLTE2Miw3ICsxNjUsMTAgQEAKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+YXBpY190aW1lcl9pcnFzOworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OwogI2VuZGlmCisJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5nZW5lcmljX2lycXM7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3Jlc2NoZWRfY291bnQ7CiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfY2FsbF9jb3VudDsKQEAgLTE3NCw5ICsxODAsNiBAQAogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RocmVzaG9sZF9jb3VudDsKICNlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7Ci0jZW5kaWYKIAlyZXR1cm4gc3VtOwogfQogCkBAIC0yMjYsNCArMjI5LDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBIYW5kbGVyIGZvciBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IuCisgKi8KK3ZvaWQgc21wX2dlbmVyaWNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCWFja19BUElDX2lycSgpOworCisJZXhpdF9pZGxlKCk7CisKKwlpcnFfZW50ZXIoKTsKKworCWluY19pcnFfc3RhdChnZW5lcmljX2lycXMpOworCisJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKCk7CisKKwlpcnFfZXhpdCgpOworCisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KKwogRVhQT1JUX1NZTUJPTF9HUEwodmVjdG9yX3VzZWRfYnlfcGVyY3B1X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwppbmRleCA1MGI4YzNhLi4zNjhiMGE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKQEAgLTUwLDcgKzUwLDYgQEAKICAqLwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZnB1X2lycSA9IHsKIAkuaGFuZGxlciA9IG1hdGhfZXJyb3JfaXJxLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJmcHUiLAogfTsKIApAQCAtODMsNyArODIsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEyID0gewogCS5oYW5kbGVyID0gbm9fYWN0aW9uLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJjYXNjYWRlIiwKIH07CiAKQEAgLTE3NSw2ICsxNzMsOSBAQAogCS8qIHNlbGYgZ2VuZXJhdGVkIElQSSBmb3IgbG9jYWwgQVBJQyB0aW1lciAqLwogCWFsbG9jX2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKIAorCS8qIGdlbmVyaWMgSVBJIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UgKi8KKwlhbGxvY19pbnRyX2dhdGUoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SLCBnZW5lcmljX2ludGVycnVwdCk7CisKIAkvKiBJUEkgdmVjdG9ycyBmb3IgQVBJQyBzcHVyaW91cyBhbmQgZXJyb3IgaW50ZXJydXB0cyAqLwogCWFsbG9jX2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKIAlhbGxvY19pbnRyX2dhdGUoRVJST1JfQVBJQ19WRUNUT1IsIGVycm9yX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwppbmRleCBkYTQ4MWExLi44Y2QxMDUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMiA9IHsKIAkuaGFuZGxlciA9IG5vX2FjdGlvbiwKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAiY2FzY2FkZSIsCiB9OwogREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKQEAgLTE0Nyw2ICsxNDYsOSBAQAogCS8qIHNlbGYgZ2VuZXJhdGVkIElQSSBmb3IgbG9jYWwgQVBJQyB0aW1lciAqLwogCWFsbG9jX2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKIAorCS8qIGdlbmVyaWMgSVBJIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UgKi8KKwlhbGxvY19pbnRyX2dhdGUoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SLCBnZW5lcmljX2ludGVycnVwdCk7CisKIAkvKiBJUEkgdmVjdG9ycyBmb3IgQVBJQyBzcHVyaW91cyBhbmQgZXJyb3IgaW50ZXJydXB0cyAqLwogCWFsbG9jX2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKIAlhbGxvY19pbnRyX2dhdGUoRVJST1JfQVBJQ19WRUNUT1IsIGVycm9yX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2RlYnVnZnMuYyBiL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCmluZGV4IGZmN2QzYjAuLmU0NDQzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCkBAIC04LDExICs4LDExIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCkBAIC0yNiw5ICsyNiw4IEBACiAJdTMyIGxlbjsKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zZXR1cF9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LAotCQlsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBzZXR1cF9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YV9ub2RlICpub2RlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgcmVtYWluOwpAQCAtMzksMjAgKzM4LDIxIEBACiAKIAlpZiAocG9zIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAocG9zID49IG5vZGUtPmxlbikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY291bnQgPiBub2RlLT5sZW4gLSBwb3MpCiAJCWNvdW50ID0gbm9kZS0+bGVuIC0gcG9zOworCiAJcGEgPSBub2RlLT5wYWRkciArIHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgKyBwb3M7CiAJcGcgPSBwZm5fdG9fcGFnZSgocGEgKyBjb3VudCAtIDEpID4+IFBBR0VfU0hJRlQpOwogCWlmIChQYWdlSGlnaE1lbShwZykpIHsKIAkJcCA9IGlvcmVtYXBfY2FjaGUocGEsIGNvdW50KTsKIAkJaWYgKCFwKQogCQkJcmV0dXJuIC1FTlhJTzsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlwID0gX192YShwYSk7Ci0JfQogCiAJcmVtYWluID0gY29weV90b191c2VyKHVzZXJfYnVmLCBwLCBjb3VudCk7CiAKQEAgLTcwLDEyICs3MCwxMyBAQAogc3RhdGljIGludCBzZXR1cF9kYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3NldHVwX2RhdGEgPSB7Ci0JLnJlYWQgPQkJc2V0dXBfZGF0YV9yZWFkLAotCS5vcGVuID0JCXNldHVwX2RhdGFfb3BlbiwKKwkucmVhZAkJPSBzZXR1cF9kYXRhX3JlYWQsCisJLm9wZW4JCT0gc2V0dXBfZGF0YV9vcGVuLAogfTsKIAogc3RhdGljIGludCBfX2luaXQKQEAgLTg0LDU3ICs4NSw1MCBAQAogewogCXN0cnVjdCBkZW50cnkgKmQsICp0eXBlLCAqZGF0YTsKIAljaGFyIGJ1ZlsxNl07Ci0JaW50IGVycm9yOwogCiAJc3ByaW50ZihidWYsICIlZCIsIG5vKTsKIAlkID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1ZiwgcGFyZW50KTsKLQlpZiAoIWQpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZXR1cm47Ci0JfQorCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAl0eXBlID0gZGVidWdmc19jcmVhdGVfeDMyKCJ0eXBlIiwgU19JUlVHTywgZCwgJm5vZGUtPnR5cGUpOwotCWlmICghdHlwZSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCF0eXBlKQogCQlnb3RvIGVycl9kaXI7Ci0JfQorCiAJZGF0YSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRhdGEiLCBTX0lSVUdPLCBkLCBub2RlLCAmZm9wc19zZXR1cF9kYXRhKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOworCWlmICghZGF0YSkKIAkJZ290byBlcnJfdHlwZTsKLQl9CisKIAlyZXR1cm4gMDsKIAogZXJyX3R5cGU6CiAJZGVidWdmc19yZW1vdmUodHlwZSk7CiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGQpOwotZXJyX3JldHVybjoKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9zZXR1cF9kYXRhX25vZGVzKHN0cnVjdCBkZW50cnkgKnBhcmVudCkKIHsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YV9ub2RlICpub2RlOwogCXN0cnVjdCBzZXR1cF9kYXRhICpkYXRhOwotCWludCBlcnJvciwgbm8gPSAwOworCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IGRlbnRyeSAqZDsKIAlzdHJ1Y3QgcGFnZSAqcGc7CiAJdTY0IHBhX2RhdGE7CisJaW50IG5vID0gMDsKIAogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNldHVwX2RhdGEiLCBwYXJlbnQpOwotCWlmICghZCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhX2RhdGEgPSBib290X3BhcmFtcy5oZHIuc2V0dXBfZGF0YTsKIAogCXdoaWxlIChwYV9kYXRhKSB7CiAJCW5vZGUgPSBrbWFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIW5vZGUpIHsKLQkJCWVycm9yID0gLUVOT01FTTsKKwkJaWYgKCFub2RlKQogCQkJZ290byBlcnJfZGlyOwotCQl9CisKIAkJcGcgPSBwZm5fdG9fcGFnZSgocGFfZGF0YStzaXplb2YoKmRhdGEpLTEpID4+IFBBR0VfU0hJRlQpOwogCQlpZiAoUGFnZUhpZ2hNZW0ocGcpKSB7CiAJCQlkYXRhID0gaW9yZW1hcF9jYWNoZShwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsKQEAgLTE0Myw5ICsxMzcsOCBAQAogCQkJCWVycm9yID0gLUVOWElPOwogCQkJCWdvdG8gZXJyX2RpcjsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlCiAJCQlkYXRhID0gX192YShwYV9kYXRhKTsKLQkJfQogCiAJCW5vZGUtPnBhZGRyID0gcGFfZGF0YTsKIAkJbm9kZS0+dHlwZSA9IGRhdGEtPnR5cGU7CkBAIC0xNTksMTEgKzE1MiwxMSBAQAogCQkJZ290byBlcnJfZGlyOwogCQlubysrOwogCX0KKwogCXJldHVybiAwOwogCiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGQpOwotZXJyX3JldHVybjoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE3NSwyOCArMTY4LDI2IEBACiBzdGF0aWMgaW50IF9faW5pdCBib290X3BhcmFtc19rZGVidWdmc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGJwLCAqdmVyc2lvbiwgKmRhdGE7Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IC1FTk9NRU07CiAKIAlkYnAgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJvb3RfcGFyYW1zIiwgTlVMTCk7Ci0JaWYgKCFkYnApIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZXR1cm47Ci0JfQorCWlmICghZGJwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXZlcnNpb24gPSBkZWJ1Z2ZzX2NyZWF0ZV94MTYoInZlcnNpb24iLCBTX0lSVUdPLCBkYnAsCiAJCQkJICAgICAmYm9vdF9wYXJhbXMuaGRyLnZlcnNpb24pOwotCWlmICghdmVyc2lvbikgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCF2ZXJzaW9uKQogCQlnb3RvIGVycl9kaXI7Ci0JfQorCiAJZGF0YSA9IGRlYnVnZnNfY3JlYXRlX2Jsb2IoImRhdGEiLCBTX0lSVUdPLCBkYnAsCiAJCQkJICAgJmJvb3RfcGFyYW1zX2Jsb2IpOwotCWlmICghZGF0YSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCFkYXRhKQogCQlnb3RvIGVycl92ZXJzaW9uOwotCX0KKwogCWVycm9yID0gY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoZGJwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2RhdGE7CisKIAlyZXR1cm4gMDsKIAogZXJyX2RhdGE6CkBAIC0yMDUsMTAgKzE5Niw5IEBACiAJZGVidWdmc19yZW1vdmUodmVyc2lvbik7CiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGRicCk7Ci1lcnJfcmV0dXJuOgogCXJldHVybiBlcnJvcjsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19ERUJVR19CT09UX1BBUkFNUyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX2tkZWJ1Z2ZzX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDQ1NThkZDMuLjU1Yjk0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJa3Byb2JlX29wY29kZV90IG9wY29kZTsKIAlrcHJvYmVfb3Bjb2RlX3QgKm9yaWdfb3Bjb2RlcyA9IG9wY29kZXM7CiAKLQlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMob3Bjb2RlcykpCisJaWYgKHNlYXJjaF9leGNlcHRpb25fdGFibGVzKCh1bnNpZ25lZCBsb25nKW9wY29kZXMpKQogCQlyZXR1cm4gMDsJLyogUGFnZSBmYXVsdCBtYXkgb2NjdXIgb24gdGhpcyBhZGRyZXNzLiAqLwogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uYwppbmRleCA0NzhiY2E5Li4zMzAxOWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC0xMzgsMTIgKzEzOCw2IEBACiAJa3ZtX21tdV93cml0ZShwdGVwLCBwdGVfdmFsKHB0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlrdm1fbW11X3dyaXRlKHB0ZXAsIHB0ZV92YWwocHRlKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGt2bV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CkBAIC0yMjAsNyArMjE0LDYgQEAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCQlwdl9tbXVfb3BzLnNldF9wdGVfYXRvbWljID0ga3ZtX3NldF9wdGVfYXRvbWljOwotCQlwdl9tbXVfb3BzLnNldF9wdGVfcHJlc2VudCA9IGt2bV9zZXRfcHRlX3ByZXNlbnQ7CiAJCXB2X21tdV9vcHMucHRlX2NsZWFyID0ga3ZtX3B0ZV9jbGVhcjsKIAkJcHZfbW11X29wcy5wbWRfY2xlYXIgPSBrdm1fcG1kX2NsZWFyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwppbmRleCBmNWZjOGM3Li5lNzM2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtNjMsNyArNjMsNyBAQAogCQkiXHRtb3ZsICUlZWF4LCUlZnNcbiIKIAkJIlx0bW92bCAlJWVheCwlJWdzXG4iCiAJCSJcdG1vdmwgJSVlYXgsJSVzc1xuIgotCQk6OjogImVheCIsICJtZW1vcnkiKTsKKwkJOiA6IDogImVheCIsICJtZW1vcnkiKTsKICN1bmRlZiBTVFIKICN1bmRlZiBfX1NUUgogfQpAQCAtMjA1LDcgKzIwNSw4IEBACiAKIAlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpIHsKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJLyogV2UgbmVlZCB0byBwdXQgQVBJQ3MgaW4gbGVnYWN5IG1vZGUgc28gdGhhdCB3ZSBjYW4KKwkJLyoKKwkJICogV2UgbmVlZCB0byBwdXQgQVBJQ3MgaW4gbGVnYWN5IG1vZGUgc28gdGhhdCB3ZSBjYW4KIAkJICogZ2V0IHRpbWVyIGludGVycnVwdHMgaW4gc2Vjb25kIGtlcm5lbC4ga2V4ZWMva2R1bXAKIAkJICogcGF0aHMgYWxyZWFkeSBoYXZlIGNhbGxzIHRvIGRpc2FibGVfSU9fQVBJQygpIGluCiAJCSAqIG9uZSBmb3JtIG9yIG90aGVyLiBrZXhlYyBqdW1wIHBhdGggYWxzbyBuZWVkCkBAIC0yMjcsNyArMjI4LDggQEAKIAkJcGFnZV9saXN0W1BBX1NXQVBfUEFHRV0gPSAocGFnZV90b19wZm4oaW1hZ2UtPnN3YXBfcGFnZSkKIAkJCQkJCTw8IFBBR0VfU0hJRlQpOwogCi0JLyogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKKwkvKgorCSAqIFRoZSBzZWdtZW50IHJlZ2lzdGVycyBhcmUgZnVubnkgdGhpbmdzLCB0aGV5IGhhdmUgYm90aCBhCiAJICogdmlzaWJsZSBhbmQgYW4gaW52aXNpYmxlIHBhcnQuICBXaGVuZXZlciB0aGUgdmlzaWJsZSBwYXJ0IGlzCiAJICogc2V0IHRvIGEgc3BlY2lmaWMgc2VsZWN0b3IsIHRoZSBpbnZpc2libGUgcGFydCBpcyBsb2FkZWQKIAkgKiB3aXRoIGZyb20gYSB0YWJsZSBpbiBtZW1vcnkuICBBdCBubyBvdGhlciB0aW1lIGlzIHRoZQpAQCAtMjM3LDExICsyMzksMTIgQEAKIAkgKiBzZWdtZW50cywgYmVmb3JlIEkgemFwIHRoZSBnZHQgd2l0aCBhbiBpbnZhbGlkIHZhbHVlLgogCSAqLwogCWxvYWRfc2VnbWVudHMoKTsKLQkvKiBUaGUgZ2R0ICYgaWR0IGFyZSBub3cgaW52YWxpZC4KKwkvKgorCSAqIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgogCSAqIElmIHlvdSB3YW50IHRvIGxvYWQgdGhlbSB5b3UgbXVzdCBzZXQgdXAgeW91ciBvd24gaWR0ICYgZ2R0LgogCSAqLwotCXNldF9nZHQocGh5c190b192aXJ0KDApLDApOwotCXNldF9pZHQocGh5c190b192aXJ0KDApLDApOworCXNldF9nZHQocGh5c190b192aXJ0KDApLCAwKTsKKwlzZXRfaWR0KHBoeXNfdG9fdmlydCgwKSwgMCk7CiAKIAkvKiBub3cgY2FsbCBpdCAqLwogCWltYWdlLT5zdGFydCA9IHJlbG9jYXRlX2tlcm5lbF9wdHIoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmhlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwppbmRleCA2OTkzZDUxLi44OWNlYTRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTEyLDExICsxMiw0NyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaW5pdF9vbmVfbGV2ZWwyX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHBnZF90ICpwZ2QsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCWFkZHIgJj0gUE1EX01BU0s7CisJcGdkICs9IHBnZF9pbmRleChhZGRyKTsKKwlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7CisJCXBhZ2UgPSBraW1hZ2VfYWxsb2NfY29udHJvbF9wYWdlcyhpbWFnZSwgMCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0OworCQlwdWQgPSAocHVkX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJCW1lbXNldChwdWQsIDAsIFBBR0VfU0laRSk7CisJCXNldF9wZ2QocGdkLCBfX3BnZChfX3BhKHB1ZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKSB7CisJCXBhZ2UgPSBraW1hZ2VfYWxsb2NfY29udHJvbF9wYWdlcyhpbWFnZSwgMCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0OworCQlwbWQgPSAocG1kX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJCW1lbXNldChwbWQsIDAsIFBBR0VfU0laRSk7CisJCXNldF9wdWQocHVkLCBfX3B1ZChfX3BhKHBtZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQorCQlzZXRfcG1kKHBtZCwgX19wbWQoYWRkciB8IF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykpOworCXJlc3VsdCA9IDA7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KIAogc3RhdGljIHZvaWQgaW5pdF9sZXZlbDJfcGFnZShwbWRfdCAqbGV2ZWwycCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtODMsOSArMTE5LDggQEAKIAkJfQogCQlsZXZlbDNwID0gKHB1ZF90ICopcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlyZXN1bHQgPSBpbml0X2xldmVsM19wYWdlKGltYWdlLCBsZXZlbDNwLCBhZGRyLCBsYXN0X2FkZHIpOwotCQlpZiAocmVzdWx0KSB7CisJCWlmIChyZXN1bHQpCiAJCQlnb3RvIG91dDsKLQkJfQogCQlzZXRfcGdkKGxldmVsNHArKywgX19wZ2QoX19wYShsZXZlbDNwKSB8IF9LRVJOUEdfVEFCTEUpKTsKIAkJYWRkciArPSBQR0RJUl9TSVpFOwogCX0KQEAgLTE1Niw2ICsxOTEsMTMgQEAKIAlyZXN1bHQgPSBpbml0X2xldmVsNF9wYWdlKGltYWdlLCBsZXZlbDRwLCAwLCBtYXhfcGZuIDw8IFBBR0VfU0hJRlQpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CisJLyoKKwkgKiBpbWFnZS0+c3RhcnQgbWF5IGJlIG91dHNpZGUgMCB+IG1heF9wZm4sIGZvciBleGFtcGxlIHdoZW4KKwkgKiBqdW1wIGJhY2sgdG8gb3JpZ2luYWwga2VybmVsIGZyb20ga2V4ZWNlZCBrZXJuZWwKKwkgKi8KKwlyZXN1bHQgPSBpbml0X29uZV9sZXZlbDJfcGFnZShpbWFnZSwgbGV2ZWw0cCwgaW1hZ2UtPnN0YXJ0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OwogCXJldHVybiBpbml0X3RyYW5zaXRpb25fcGd0YWJsZShpbWFnZSwgbGV2ZWw0cCk7CiB9CiAKQEAgLTIyOSwyMCArMjcxLDQ1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBwYWdlX2xpc3RbUEFHRVNfTlJdOwogCXZvaWQgKmNvbnRyb2xfcGFnZTsKKwlpbnQgc2F2ZV9mdHJhY2VfZW5hYmxlZDsKIAotCXRyYWNlcl9kaXNhYmxlKCk7CisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CisjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKIAogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAorCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgeworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgorCQkgKiBnZXQgdGltZXIgaW50ZXJydXB0cyBpbiBzZWNvbmQga2VybmVsLiBrZXhlYy9rZHVtcAorCQkgKiBwYXRocyBhbHJlYWR5IGhhdmUgY2FsbHMgdG8gZGlzYWJsZV9JT19BUElDKCkgaW4KKwkJICogb25lIGZvcm0gb3Igb3RoZXIuIGtleGVjIGp1bXAgcGF0aCBhbHNvIG5lZWQKKwkJICogb25lLgorCQkgKi8KKwkJZGlzYWJsZV9JT19BUElDKCk7CisjZW5kaWYKKwl9CisKIAljb250cm9sX3BhZ2UgPSBwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSArIFBBR0VfU0laRTsKLQltZW1jcHkoY29udHJvbF9wYWdlLCByZWxvY2F0ZV9rZXJuZWwsIFBBR0VfU0laRSk7CisJbWVtY3B5KGNvbnRyb2xfcGFnZSwgcmVsb2NhdGVfa2VybmVsLCBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUpOwogCiAJcGFnZV9saXN0W1BBX0NPTlRST0xfUEFHRV0gPSB2aXJ0X3RvX3BoeXMoY29udHJvbF9wYWdlKTsKKwlwYWdlX2xpc3RbVkFfQ09OVFJPTF9QQUdFXSA9ICh1bnNpZ25lZCBsb25nKWNvbnRyb2xfcGFnZTsKIAlwYWdlX2xpc3RbUEFfVEFCTEVfUEFHRV0gPQogCSAgKHVuc2lnbmVkIGxvbmcpX19wYShwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSk7CiAKLQkvKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQorCWlmIChpbWFnZS0+dHlwZSA9PSBLRVhFQ19UWVBFX0RFRkFVTFQpCisJCXBhZ2VfbGlzdFtQQV9TV0FQX1BBR0VdID0gKHBhZ2VfdG9fcGZuKGltYWdlLT5zd2FwX3BhZ2UpCisJCQkJCQk8PCBQQUdFX1NISUZUKTsKKworCS8qCisJICogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKIAkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKIAkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAogCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCkBAIC0yNTIsMTUgKzMxOSwyNSBAQAogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCiAJICovCiAJbG9hZF9zZWdtZW50cygpOwotCS8qIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgorCS8qCisJICogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCiAJICogSWYgeW91IHdhbnQgdG8gbG9hZCB0aGVtIHlvdSBtdXN0IHNldCB1cCB5b3VyIG93biBpZHQgJiBnZHQuCiAJICovCi0Jc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksMCk7Ci0Jc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksMCk7CisJc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksIDApOworCXNldF9pZHQocGh5c190b192aXJ0KDApLCAwKTsKIAogCS8qIG5vdyBjYWxsIGl0ICovCi0JcmVsb2NhdGVfa2VybmVsKCh1bnNpZ25lZCBsb25nKWltYWdlLT5oZWFkLCAodW5zaWduZWQgbG9uZylwYWdlX2xpc3QsCi0JCQlpbWFnZS0+c3RhcnQpOworCWltYWdlLT5zdGFydCA9IHJlbG9jYXRlX2tlcm5lbCgodW5zaWduZWQgbG9uZylpbWFnZS0+aGVhZCwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGFnZV9saXN0LAorCQkJCSAgICAgICBpbWFnZS0+c3RhcnQsCisJCQkJICAgICAgIGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KTsKKworI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCisJaWYgKGtleGVjX2ltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KQorCQlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOworI2VuZGlmCisKKwlfX2Z0cmFjZV9lbmFibGVkX3Jlc3RvcmUoc2F2ZV9mdHJhY2VfZW5hYmxlZCk7CiB9CiAKIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tZmdwdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL21mZ3B0XzMyLmMKaW5kZXggODgxNWYzYy4uODQ2NTEwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21mZ3B0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21mZ3B0XzMyLmMKQEAgLTM0OCw3ICszNDgsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbWZncHRpcnEgID0gewogCS5oYW5kbGVyID0gbWZncHRfdGljaywKIAkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKLQkubWFzayA9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUgPSAibWZncHQtdGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jIGIvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYwppbmRleCA2NjZlNDNkLi43MTJkMTVmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgbW1jb25mX2RtaV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fY3B1aW5pdGNvbnN0IG1tY29uZl9kbWlfdGFibGVbXSA9IHsKICAgICAgICAgewogICAgICAgICAgICAgICAgIC5jYWxsYmFjayA9IHNldF9jaGVja19lbmFibGVfYW1kX21tY29uZiwKICAgICAgICAgICAgICAgICAuaWRlbnQgPSAiU3VuIE1pY3Jvc3lzdGVtcyBNYWNoaW5lIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDM3Y2IxYmQuLmRjZTk5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwpAQCAtMTA5LDkgKzEwOSw2IEBACiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gYnVzdHlwZSAlcyAtIGlnbm9yaW5nXG4iLCBzdHIpOwogfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAogc3RhdGljIGludCBiYWRfaW9hcGljKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTIyNCw4ICsyMjEsMTIgQEAKIAlpZiAoKyttcF9pcnFfZW50cmllcyA9PSBNQVhfSVJRX1NPVVJDRVMpCiAJCXBhbmljKCJNYXggIyBvZiBpcnEgc291cmNlcyBleGNlZWRlZCEhXG4iKTsKIH0KKyNlbHNlIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBNUF9idXNfaW5mbyhzdHJ1Y3QgbXBjX2J1cyAqbSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgTVBfaW9hcGljX2luZm8oc3RydWN0IG1wY19pb2FwaWMgKm0pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IE1QX2ludHNyY19pbmZvKHN0cnVjdCBtcGNfaW50c3JjICptKSB7fQorI2VuZGlmIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogCi0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19pbml0IE1QX2xpbnRzcmNfaW5mbyhzdHJ1Y3QgbXBjX2xpbnRzcmMgKm0pCiB7CkBAIC0yNzUsNiArMjc2LDIwIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIHNraXBfZW50cnkodW5zaWduZWQgY2hhciAqKnB0ciwgaW50ICpjb3VudCwgaW50IHNpemUpCit7CisJKnB0ciArPSBzaXplOworCSpjb3VudCArPSBzaXplOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc21wX2R1bXBfbXB0YWJsZShzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIHVuc2lnbmVkIGNoYXIgKm1wdCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIllvdXIgbXB0YWJsZSBpcyB3cm9uZywgY29udGFjdCB5b3VyIEhXIHZlbmRvciFcbiIKKwkJInR5cGUgJXhcbiIsICptcHQpOworCXByaW50X2hleF9kdW1wKEtFUk5fRVJSLCAiICAiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwKKwkJCTEsIG1wYywgbXBjLT5sZW5ndGgsIDEpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfcmVhZF9tcGMoc3RydWN0IG1wY190YWJsZSAqbXBjLCB1bnNpZ25lZCBlYXJseSkKIHsKIAljaGFyIHN0clsxNl07CkBAIC0zMTAsNjEgKzMyNSwzMCBAQAogCXdoaWxlIChjb3VudCA8IG1wYy0+bGVuZ3RoKSB7CiAJCXN3aXRjaCAoKm1wdCkgewogCQljYXNlIE1QX1BST0NFU1NPUjoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2NwdSAqbSA9IChzdHJ1Y3QgbXBjX2NwdSAqKW1wdDsKLQkJCQkvKiBBQ1BJIG1heSBoYXZlIGFscmVhZHkgcHJvdmlkZWQgdGhpcyBkYXRhICovCi0JCQkJaWYgKCFhY3BpX2xhcGljKQotCQkJCQlNUF9wcm9jZXNzb3JfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJLyogQUNQSSBtYXkgaGF2ZSBhbHJlYWR5IHByb3ZpZGVkIHRoaXMgZGF0YSAqLworCQkJaWYgKCFhY3BpX2xhcGljKQorCQkJCU1QX3Byb2Nlc3Nvcl9pbmZvKChzdHJ1Y3QgbXBjX2NwdSAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfY3B1KSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9CVVM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19idXMgKm0gPSAoc3RydWN0IG1wY19idXMgKiltcHQ7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJTVBfYnVzX2luZm8obSk7Ci0jZW5kaWYKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJTVBfYnVzX2luZm8oKHN0cnVjdCBtcGNfYnVzICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19idXMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0lPQVBJQzoKLQkJCXsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJCQlzdHJ1Y3QgbXBjX2lvYXBpYyAqbSA9IChzdHJ1Y3QgbXBjX2lvYXBpYyAqKW1wdDsKLQkJCQlNUF9pb2FwaWNfaW5mbyhtKTsKLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9pb2FwaWNfaW5mbygoc3RydWN0IG1wY19pb2FwaWMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU5UU1JDOgotCQkJewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkJCXN0cnVjdCBtcGNfaW50c3JjICptID0gKHN0cnVjdCBtcGNfaW50c3JjICopbXB0OwotCi0JCQkJTVBfaW50c3JjX2luZm8obSk7Ci0jZW5kaWYKLQkJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJTVBfaW50c3JjX2luZm8oKHN0cnVjdCBtcGNfaW50c3JjICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0xJTlRTUkM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19saW50c3JjICptID0KLQkJCQkgICAgKHN0cnVjdCBtcGNfbGludHNyYyAqKW1wdDsKLQkJCQlNUF9saW50c3JjX2luZm8obSk7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCU1QX2xpbnRzcmNfaW5mbygoc3RydWN0IG1wY19saW50c3JjICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19saW50c3JjKSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHdyb25nIG1wdGFibGUgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiWW91ciBtcHRhYmxlIGlzIHdyb25nLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgInR5cGUgJXhcbiIsICptcHQpOwotCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIgICIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LAotCQkJCQkxLCBtcGMsIG1wYy0+bGVuZ3RoLCAxKTsKKwkJCXNtcF9kdW1wX21wdGFibGUobXBjLCBtcHQpOwogCQkJY291bnQgPSBtcGMtPmxlbmd0aDsKIAkJCWJyZWFrOwogCQl9CkBAIC01NTgsNiArNTQyLDY4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXBmX2ludGVsICptcGZfZm91bmQ7CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBnZXRfbXBjX3NpemUodW5zaWduZWQgbG9uZyBwaHlzcHRyKQoreworCXN0cnVjdCBtcGNfdGFibGUgKm1wYzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwltcGMgPSBlYXJseV9pb3JlbWFwKHBoeXNwdHIsIFBBR0VfU0laRSk7CisJc2l6ZSA9IG1wYy0+bGVuZ3RoOworCWVhcmx5X2lvdW5tYXAobXBjLCBQQUdFX1NJWkUpOworCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIiAgbXBjOiAlbHgtJWx4XG4iLCBwaHlzcHRyLCBwaHlzcHRyICsgc2l6ZSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBfX2luaXQgY2hlY2tfcGh5c3B0cihzdHJ1Y3QgbXBmX2ludGVsICptcGYsIHVuc2lnbmVkIGludCBlYXJseSkKK3sKKwlzdHJ1Y3QgbXBjX3RhYmxlICptcGM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJc2l6ZSA9IGdldF9tcGNfc2l6ZShtcGYtPnBoeXNwdHIpOworCW1wYyA9IGVhcmx5X2lvcmVtYXAobXBmLT5waHlzcHRyLCBzaXplKTsKKwkvKgorCSAqIFJlYWQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIHRhYmxlLiAgQW55dGhpbmcgaGVyZSB3aWxsCisJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgorCSAqLworCWlmICghc21wX3JlYWRfbXBjKG1wYywgZWFybHkpKSB7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJCXNtcF9mb3VuZF9jb25maWcgPSAwOworI2VuZGlmCisJCXByaW50ayhLRVJOX0VSUiAiQklPUyBidWcsIE1QIHRhYmxlIGVycm9ycyBkZXRlY3RlZCEuLi5cbiIKKwkJCSIuLi4gZGlzYWJsaW5nIFNNUCBzdXBwb3J0LiAodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOworCQllYXJseV9pb3VubWFwKG1wYywgc2l6ZSk7CisJCXJldHVybiAtMTsKKwl9CisJZWFybHlfaW91bm1hcChtcGMsIHNpemUpOworCisJaWYgKGVhcmx5KQorCQlyZXR1cm4gLTE7CisKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBubyBleHBsaWNpdCBNUCBJUlEgZW50cmllcywgdGhlbiB3ZSBhcmUKKwkgKiBicm9rZW4uICBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyB0bworCSAqIElTQSBkZWZhdWx0cyBhbmQgaG9wZSBpdCB3aWxsIHdvcmsuCisJICovCisJaWYgKCFtcF9pcnFfZW50cmllcykgeworCQlzdHJ1Y3QgbXBjX2J1cyBidXM7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1Zywgbm8gZXhwbGljaXQgSVJRIGVudHJpZXMsICIKKwkJICAgICAgICJ1c2luZyBkZWZhdWx0IG1wdGFibGUuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CisKKwkJYnVzLnR5cGUgPSBNUF9CVVM7CisJCWJ1cy5idXNpZCA9IDA7CisJCW1lbWNweShidXMuYnVzdHlwZSwgIklTQSAgICIsIDYpOworCQlNUF9idXNfaW5mbygmYnVzKTsKKworCQljb25zdHJ1Y3RfZGVmYXVsdF9pb2lycV9tcHRhYmxlKDApOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBTY2FuIHRoZSBtZW1vcnkgYmxvY2tzIGZvciBhbiBTTVAgY29uZmlndXJhdGlvbiBibG9jay4KICAqLwpAQCAtNjExLDQ1ICs2NTcsOCBAQAogCQljb25zdHJ1Y3RfZGVmYXVsdF9JU0FfbXB0YWJsZShtcGYtPmZlYXR1cmUxKTsKIAogCX0gZWxzZSBpZiAobXBmLT5waHlzcHRyKSB7Ci0KLQkJLyoKLQkJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKLQkJICogb3ZlcnJpZGUgdGhlIGRlZmF1bHRzLgotCQkgKi8KLQkJaWYgKCFzbXBfcmVhZF9tcGMocGh5c190b192aXJ0KG1wZi0+cGh5c3B0ciksIGVhcmx5KSkgewotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7Ci0jZW5kaWYKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJCSU9TIGJ1ZywgTVAgdGFibGUgZXJyb3JzIGRldGVjdGVkIS4uLlxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIi4uLiBkaXNhYmxpbmcgU01QIHN1cHBvcnQuICIKLQkJCSAgICAgICAiKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKKwkJaWYgKGNoZWNrX3BoeXNwdHIobXBmLCBlYXJseSkpCiAJCQlyZXR1cm47Ci0JCX0KLQotCQlpZiAoZWFybHkpCi0JCQlyZXR1cm47Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCS8qCi0JCSAqIElmIHRoZXJlIGFyZSBubyBleHBsaWNpdCBNUCBJUlEgZW50cmllcywgdGhlbiB3ZSBhcmUKLQkJICogYnJva2VuLiAgV2Ugc2V0IHVwIG1vc3Qgb2YgdGhlIGxvdyAxNiBJTy1BUElDIHBpbnMgdG8KLQkJICogSVNBIGRlZmF1bHRzIGFuZCBob3BlIGl0IHdpbGwgd29yay4KLQkJICovCi0JCWlmICghbXBfaXJxX2VudHJpZXMpIHsKLQkJCXN0cnVjdCBtcGNfYnVzIGJ1czsKLQotCQkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1Zywgbm8gZXhwbGljaXQgSVJRIGVudHJpZXMsICIKLQkJCSAgICAgICAidXNpbmcgZGVmYXVsdCBtcHRhYmxlLiAiCi0JCQkgICAgICAgIih0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7Ci0KLQkJCWJ1cy50eXBlID0gTVBfQlVTOwotCQkJYnVzLmJ1c2lkID0gMDsKLQkJCW1lbWNweShidXMuYnVzdHlwZSwgIklTQSAgICIsIDYpOwotCQkJTVBfYnVzX2luZm8oJmJ1cyk7Ci0KLQkJCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFibGUoMCk7Ci0JCX0KLSNlbmRpZgogCX0gZWxzZQogCQlCVUcoKTsKIApAQCAtNjcwLDYgKzY3OSwzMSBAQAogCV9fZ2V0X3NtcF9jb25maWcoMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHNtcF9yZXNlcnZlX2Jvb3RtZW0oc3RydWN0IG1wZl9pbnRlbCAqbXBmKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGdldF9tcGNfc2l6ZShtcGYtPnBoeXNwdHIpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkvKgorCSAqIFdlIGNhbm5vdCBhY2Nlc3MgdG8gTVBDIHRhYmxlIHRvIGNvbXB1dGUgdGFibGUgc2l6ZSB5ZXQsCisJICogYXMgb25seSBmZXcgbWVnYWJ5dGVzIGZyb20gdGhlIGJvdHRvbSBpcyBtYXBwZWQgbm93LgorCSAqIFBDLTk4MDAncyBNUEMgdGFibGUgcGxhY2VzIG9uIHRoZSB2ZXJ5IGxhc3Qgb2YgcGh5c2ljYWwKKwkgKiBtZW1vcnk7IHNvIHRoYXQgc2ltcGx5IHJlc2VydmluZyBQQUdFX1NJWkUgZnJvbSBtcGYtPnBoeXNwdHIKKwkgKiB5aWVsZHMgQlVHKCkgaW4gcmVzZXJ2ZV9ib290bWVtLgorCSAqIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgcGh5c3B0ciBpcyBiZWxvdyB0aGFuIG1heF9sb3dfcGZuCisJICogd2UgZG9uJ3QgbmVlZCByZXNlcnZlIHRoZSBhcmVhIGFib3ZlIG1heF9sb3dfcGZuCisJICovCisJdW5zaWduZWQgbG9uZyBlbmQgPSBtYXhfbG93X3BmbiAqIFBBR0VfU0laRTsKKworCWlmIChtcGYtPnBoeXNwdHIgPCBlbmQpIHsKKwkJaWYgKG1wZi0+cGh5c3B0ciArIHNpemUgPiBlbmQpCisJCQlzaXplID0gZW5kIC0gbXBmLT5waHlzcHRyOworCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisJfQorI2Vsc2UKKwlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsIEJPT1RNRU1fREVGQVVMVCk7CisjZW5kaWYKK30KKwogc3RhdGljIGludCBfX2luaXQgc21wX3NjYW5fY29uZmlnKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBsZW5ndGgsCiAJCQkJICB1bnNpZ25lZCByZXNlcnZlKQogewpAQCAtNjk3LDM2ICs3MzEsMTAgQEAKIAogCQkJaWYgKCFyZXNlcnZlKQogCQkJCXJldHVybiAxOwotCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModmlydF90b19waHlzKG1wZiksIFBBR0VfU0laRSwKLQkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKLQkJCWlmIChtcGYtPnBoeXNwdHIpIHsKLQkJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX1NJWkU7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCQkJCS8qCi0JCQkJICogV2UgY2Fubm90IGFjY2VzcyB0byBNUEMgdGFibGUgdG8gY29tcHV0ZQotCQkJCSAqIHRhYmxlIHNpemUgeWV0LCBhcyBvbmx5IGZldyBtZWdhYnl0ZXMgZnJvbQotCQkJCSAqIHRoZSBib3R0b20gaXMgbWFwcGVkIG5vdy4KLQkJCQkgKiBQQy05ODAwJ3MgTVBDIHRhYmxlIHBsYWNlcyBvbiB0aGUgdmVyeSBsYXN0Ci0JCQkJICogb2YgcGh5c2ljYWwgbWVtb3J5OyBzbyB0aGF0IHNpbXBseSByZXNlcnZpbmcKLQkJCQkgKiBQQUdFX1NJWkUgZnJvbSBtcGYtPnBoeXNwdHIgeWllbGRzIEJVRygpCi0JCQkJICogaW4gcmVzZXJ2ZV9ib290bWVtLgotCQkJCSAqIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgcGh5c3B0ciBpcyBiZWxvdyB0aGFuCi0JCQkJICogbWF4X2xvd19wZm4KLQkJCQkgKiB3ZSBkb24ndCBuZWVkIHJlc2VydmUgdGhlIGFyZWEgYWJvdmUgbWF4X2xvd19wZm4KLQkJCQkgKi8KLQkJCQl1bnNpZ25lZCBsb25nIGVuZCA9IG1heF9sb3dfcGZuICogUEFHRV9TSVpFOwotCi0JCQkJaWYgKG1wZi0+cGh5c3B0ciA8IGVuZCkgewotCQkJCQlpZiAobXBmLT5waHlzcHRyICsgc2l6ZSA+IGVuZCkKLQkJCQkJCXNpemUgPSBlbmQgLSBtcGYtPnBoeXNwdHI7Ci0JCQkJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwKLQkJCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJCX0KLSNlbHNlCi0JCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLAorCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModmlydF90b19waHlzKG1wZiksIHNpemVvZigqbXBmKSwKIAkJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0jZW5kaWYKLQkJCX0KKwkJCWlmIChtcGYtPnBoeXNwdHIpCisJCQkJc21wX3Jlc2VydmVfYm9vdG1lbShtcGYpOwogCiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtODI5LDcgKzgzNyw1NyBAQAogI2RlZmluZSBTUEFSRV9TTE9UX05VTSAyMAogCiBzdGF0aWMgc3RydWN0IG1wY19pbnRzcmMgX19pbml0ZGF0YSAqbV9zcGFyZVtTUEFSRV9TTE9UX05VTV07Ci0jZW5kaWYKKworc3RhdGljIHZvaWQgY2hlY2tfaXJxX3NyYyhzdHJ1Y3QgbXBjX2ludHNyYyAqbSwgaW50ICpucl9tX3NwYXJlKQoreworCWludCBpOworCisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiT0xEICIpOworCXByaW50X01QX2ludHNyY19pbmZvKG0pOworCisJaSA9IGdldF9NUF9pbnRzcmNfaW5kZXgobSk7CisJaWYgKGkgPiAwKSB7CisJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtKTsKKwkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiTkVXICIpOworCQlwcmludF9tcF9pcnFfaW5mbygmbXBfaXJxc1tpXSk7CisJCXJldHVybjsKKwl9CisJaWYgKCFpKSB7CisJCS8qIGxlZ2FjeSwgZG8gbm90aGluZyAqLworCQlyZXR1cm47CisJfQorCWlmICgqbnJfbV9zcGFyZSA8IFNQQVJFX1NMT1RfTlVNKSB7CisJCS8qCisJCSAqIG5vdCBmb3VuZCAoLTEpLCBvciBkdXBsaWNhdGVkICgtMikgYXJlIGludmFsaWQgZW50cmllcywKKwkJICogd2UgbmVlZCB0byB1c2UgdGhlIHNsb3QgbGF0ZXIKKwkJICovCisJCW1fc3BhcmVbKm5yX21fc3BhcmVdID0gbTsKKwkJKm5yX21fc3BhcmUgKz0gMTsKKwl9Cit9CisjZWxzZSAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19pcnFfc3JjKHN0cnVjdCBtcGNfaW50c3JjICptLCBpbnQgKm5yX21fc3BhcmUpIHt9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCisKK3N0YXRpYyBpbnQgY2hlY2tfc2xvdCh1bnNpZ25lZCBsb25nIG1wY19uZXdfcGh5cywgdW5zaWduZWQgbG9uZyBtcGNfbmV3X2xlbmd0aCwKKwkJICAgICAgaW50IGNvdW50KQoreworCWlmICghbXBjX25ld19waHlzKSB7CisJCXByX2luZm8oIk5vIHNwYXJlIHNsb3RzLCB0cnkgdG8gYXBwZW5kLi4udGFrZSB5b3VyIHJpc2ssICIKKwkJCSJuZXcgbXBjX2xlbmd0aCAleFxuIiwgY291bnQpOworCX0gZWxzZSB7CisJCWlmIChjb3VudCA8PSBtcGNfbmV3X2xlbmd0aCkKKwkJCXByX2luZm8oIk5vIHNwYXJlIHNsb3RzLCB0cnkgdG8gYXBwZW5kLi4uLCAiCisJCQkJIm5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7CisJCWVsc2UgeworCQkJcHJfZXJyKCJtcGNfbmV3X2xlbmd0aCAlbHggaXMgdG9vIHNtYWxsXG4iLAorCQkJCW1wY19uZXdfbGVuZ3RoKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQogCiBzdGF0aWMgaW50ICBfX2luaXQgcmVwbGFjZV9pbnRzcmNfYWxsKHN0cnVjdCBtcGNfdGFibGUgKm1wYywKIAkJCQkJdW5zaWduZWQgbG9uZyBtcGNfbmV3X3BoeXMsCkBAIC04MzcsNzcgKzg5NSwzMyBAQAogewogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCWludCBpOwotCWludCBucl9tX3NwYXJlID0gMDsKICNlbmRpZgotCiAJaW50IGNvdW50ID0gc2l6ZW9mKCptcGMpOworCWludCBucl9tX3NwYXJlID0gMDsKIAl1bnNpZ25lZCBjaGFyICptcHQgPSAoKHVuc2lnbmVkIGNoYXIgKiltcGMpICsgY291bnQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJtcGNfbGVuZ3RoICV4XG4iLCBtcGMtPmxlbmd0aCk7CiAJd2hpbGUgKGNvdW50IDwgbXBjLT5sZW5ndGgpIHsKIAkJc3dpdGNoICgqbXB0KSB7CiAJCWNhc2UgTVBfUFJPQ0VTU09SOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY3B1ICptID0gKHN0cnVjdCBtcGNfY3B1ICopbXB0OwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfY3B1KSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9CVVM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19idXMgKm0gPSAoc3RydWN0IG1wY19idXMgKiltcHQ7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19idXMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0lPQVBJQzoKLQkJCXsKLQkJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKTsKLQkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU5UU1JDOgotCQkJewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkJCXN0cnVjdCBtcGNfaW50c3JjICptID0gKHN0cnVjdCBtcGNfaW50c3JjICopbXB0OwotCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiT0xEICIpOwotCQkJCXByaW50X01QX2ludHNyY19pbmZvKG0pOwotCQkJCWkgPSBnZXRfTVBfaW50c3JjX2luZGV4KG0pOwotCQkJCWlmIChpID4gMCkgewotCQkJCQlhc3NpZ25fdG9fbXBjX2ludHNyYygmbXBfaXJxc1tpXSwgbSk7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8gIk5FVyAiKTsKLQkJCQkJcHJpbnRfbXBfaXJxX2luZm8oJm1wX2lycXNbaV0pOwotCQkJCX0gZWxzZSBpZiAoIWkpIHsKLQkJCQkJLyogbGVnYWN5LCBkbyBub3RoaW5nICovCi0JCQkJfSBlbHNlIGlmIChucl9tX3NwYXJlIDwgU1BBUkVfU0xPVF9OVU0pIHsKLQkJCQkJLyoKLQkJCQkJICogbm90IGZvdW5kICgtMSksIG9yIGR1cGxpY2F0ZWQgKC0yKQotCQkJCQkgKiBhcmUgaW52YWxpZCBlbnRyaWVzLAotCQkJCQkgKiB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xvdCAgbGF0ZXIKLQkJCQkJICovCi0JCQkJCW1fc3BhcmVbbnJfbV9zcGFyZV0gPSBtOwotCQkJCQlucl9tX3NwYXJlKys7Ci0JCQkJfQotI2VuZGlmCi0JCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCWNoZWNrX2lycV9zcmMoKHN0cnVjdCBtcGNfaW50c3JjICopbXB0LCAmbnJfbV9zcGFyZSk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9MSU5UU1JDOgotCQkJewotCQkJCXN0cnVjdCBtcGNfbGludHNyYyAqbSA9Ci0JCQkJICAgIChzdHJ1Y3QgbXBjX2xpbnRzcmMgKiltcHQ7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19saW50c3JjKSk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIHdyb25nIG1wdGFibGUgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiWW91ciBtcHRhYmxlIGlzIHdyb25nLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIik7Ci0JCQlwcmludGsoS0VSTl9FUlIgInR5cGUgJXhcbiIsICptcHQpOwotCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIgICIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LAotCQkJCQkxLCBtcGMsIG1wYy0+bGVuZ3RoLCAxKTsKKwkJCXNtcF9kdW1wX21wdGFibGUobXBjLCBtcHQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC05MjQsMjMgKzkzOCwxNSBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKG5yX21fc3BhcmUgPiAwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIqTkVXKiBmb3VuZCAiKTsKKwkJCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIipORVcqIGZvdW5kXG4iKTsKIAkJCW5yX21fc3BhcmUtLTsKIAkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtX3NwYXJlW25yX21fc3BhcmVdKTsKIAkJCW1fc3BhcmVbbnJfbV9zcGFyZV0gPSBOVUxMOwogCQl9IGVsc2UgewogCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7CiAJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJaWYgKCFtcGNfbmV3X3BoeXMpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJObyBzcGFyZSBzbG90cywgdHJ5IHRvIGFwcGVuZC4uLnRha2UgeW91ciByaXNrLCBuZXcgbXBjX2xlbmd0aCAleFxuIiwgY291bnQpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY291bnQgPD0gbXBjX25ld19sZW5ndGgpCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIk5vIHNwYXJlIHNsb3RzLCB0cnkgdG8gYXBwZW5kLi4uLCBuZXcgbXBjX2xlbmd0aCAleFxuIiwgY291bnQpOwotCQkJCWVsc2UgewotCQkJCQlwcmludGsoS0VSTl9FUlIgIm1wY19uZXdfbGVuZ3RoICVseCBpcyB0b28gc21hbGxcbiIsIG1wY19uZXdfbGVuZ3RoKTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJfQorCQkJaWYgKCFjaGVja19zbG90KG1wY19uZXdfcGh5cywgbXBjX25ld19sZW5ndGgsIGNvdW50KSkKKwkJCQlnb3RvIG91dDsKIAkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtKTsKIAkJCW1wYy0+bGVuZ3RoID0gY291bnQ7CiAJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggNjNkZDM1OC4uOGU0NWY0NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTQ3MCw3ICs0NzAsNiBAQAogI2lmIFBBR0VUQUJMRV9MRVZFTFMgPj0gMwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJLnNldF9wdGVfYXRvbWljID0gbmF0aXZlX3NldF9wdGVfYXRvbWljLAotCS5zZXRfcHRlX3ByZXNlbnQgPSBuYXRpdmVfc2V0X3B0ZV9wcmVzZW50LAogCS5wdGVfY2xlYXIgPSBuYXRpdmVfcHRlX2NsZWFyLAogCS5wbWRfY2xlYXIgPSBuYXRpdmVfcG1kX2NsZWFyLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWNhbGdhcnlfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCmluZGV4IGQyOGJiZGMuLjc1NWMyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jCkBAIC0zODAsOCArMzgwLDkgQEAKIAlyZXR1cm4gdGJsOwogfQogCi1zdGF0aWMgdm9pZCBjYWxnYXJ5X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIGNhbGdhcnlfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICAgaW50IG5lbGVtcyxlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKQEAgLTQwNCw3ICs0MDUsOCBAQAogfQogCiBzdGF0aWMgaW50IGNhbGdhcnlfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQlpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorCQkJICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKQEAgLTQyOSwxNSArNDMxLDE0IEBACiAJCXMtPmRtYV9hZGRyZXNzID0gKGVudHJ5IDw8IFBBR0VfU0hJRlQpIHwgcy0+b2Zmc2V0OwogCiAJCS8qIGluc2VydCBpbnRvIEhXIHRhYmxlICovCi0JCXRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsIHZhZGRyICYgUEFHRV9NQVNLLAotCQkJICBkaXJlY3Rpb24pOworCQl0Y2VfYnVpbGQodGJsLCBlbnRyeSwgbnBhZ2VzLCB2YWRkciAmIFBBR0VfTUFTSywgZGlyKTsKIAogCQlzLT5kbWFfbGVuZ3RoID0gcy0+bGVuZ3RoOwogCX0KIAogCXJldHVybiBuZWxlbXM7CiBlcnJvcjoKLQljYWxnYXJ5X3VubWFwX3NnKGRldiwgc2csIG5lbGVtcywgZGlyZWN0aW9uKTsKKwljYWxnYXJ5X3VubWFwX3NnKGRldiwgc2csIG5lbGVtcywgZGlyLCBOVUxMKTsKIAlmb3JfZWFjaF9zZyhzZywgcywgbmVsZW1zLCBpKSB7CiAJCXNnLT5kbWFfYWRkcmVzcyA9IGJhZF9kbWFfYWRkcmVzczsKIAkJc2ctPmRtYV9sZW5ndGggPSAwOwpAQCAtNDQ1LDEwICs0NDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGRtYV9hZGRyX3QgY2FsZ2FyeV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIsCi0Jc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgZG1hX2FkZHJfdCBjYWxnYXJ5X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQl2b2lkICp2YWRkciA9IHBoeXNfdG9fdmlydChwYWRkcik7CisJdm9pZCAqdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyB1YWRkcjsKIAl1bnNpZ25lZCBpbnQgbnBhZ2VzOwogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwpAQCAtNDU2LDE3ICs0NTksMTggQEAKIAl1YWRkciA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwogCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyh1YWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKIAotCXJldHVybiBpb21tdV9hbGxvYyhkZXYsIHRibCwgdmFkZHIsIG5wYWdlcywgZGlyZWN0aW9uKTsKKwlyZXR1cm4gaW9tbXVfYWxsb2MoZGV2LCB0YmwsIHZhZGRyLCBucGFnZXMsIGRpcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGdhcnlfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgY2FsZ2FyeV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCSAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZmluZF9pb21tdV90YWJsZShkZXYpOwogCXVuc2lnbmVkIGludCBucGFnZXM7CiAKLQlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2hhbmRsZSwgc2l6ZSwgUEFHRV9TSVpFKTsKLQlpb21tdV9mcmVlKHRibCwgZG1hX2hhbmRsZSwgbnBhZ2VzKTsKKwlucGFnZXMgPSBpb21tdV9udW1fcGFnZXMoZG1hX2FkZHIsIHNpemUsIFBBR0VfU0laRSk7CisJaW9tbXVfZnJlZSh0YmwsIGRtYV9hZGRyLCBucGFnZXMpOwogfQogCiBzdGF0aWMgdm9pZCogY2FsZ2FyeV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLApAQCAtNTE1LDEzICs1MTksMTMgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBjYWxnYXJ5X2RtYV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzIGNhbGdhcnlfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBjYWxnYXJ5X2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gY2FsZ2FyeV9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gY2FsZ2FyeV9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUgPSBjYWxnYXJ5X3VubWFwX3NpbmdsZSwKIAkubWFwX3NnID0gY2FsZ2FyeV9tYXBfc2csCiAJLnVubWFwX3NnID0gY2FsZ2FyeV91bm1hcF9zZywKKwkubWFwX3BhZ2UgPSBjYWxnYXJ5X21hcF9wYWdlLAorCS51bm1hcF9wYWdlID0gY2FsZ2FyeV91bm1hcF9wYWdlLAogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKiBidXNub190b19iYmFyKHVuc2lnbmVkIGNoYXIgbnVtKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggYjI1NDI4NS4uOTBmNWI5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hci5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTEyLDcgKzEzLDcgQEAKIAogc3RhdGljIGludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7CitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7CiBFWFBPUlRfU1lNQk9MKGRtYV9vcHMpOwogCiBzdGF0aWMgaW50IGlvbW11X3NhY19mb3JjZSBfX3JlYWRfbW9zdGx5OwpAQCAtNDQsNiArNDUsOSBAQAogfTsKIEVYUE9SVF9TWU1CT0woeDg2X2RtYV9mYWxsYmFja19kZXYpOwogCisvKiBOdW1iZXIgb2YgZW50cmllcyBwcmVhbGxvY2F0ZWQgZm9yIERNQS1BUEkgZGVidWdnaW5nICovCisjZGVmaW5lIFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTICAgICAgIDMyNzY4CisKIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKIAlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKQEAgLTIyNCw3ICsyMjgsNyBAQAogCiBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAjaWZkZWYgQ09ORklHX1BDSQogCWlmIChtYXNrID4gMHhmZmZmZmZmZiAmJiBmb3JiaWRfZGFjID4gMCkgewpAQCAtMjY1LDYgKzI2OSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfaW9tbXVfaW5pdCh2b2lkKQogeworCWRtYV9kZWJ1Z19pbml0KFBSRUFMTE9DX0RNQV9ERUJVR19FTlRSSUVTKTsKKworI2lmZGVmIENPTkZJR19QQ0kKKwlkbWFfZGVidWdfYWRkX2J1cygmcGNpX2J1c190eXBlKTsKKyNlbmRpZgorCiAJY2FsZ2FyeV9pb21tdV9pbml0KCk7CiAKIAlpbnRlbF9pb21tdV9pbml0KCk7CkBAIC0yOTAsOCArMzAwLDcgQEAKIHN0YXRpYyBfX2RldmluaXQgdm9pZCB2aWFfbm9fZGFjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaWYgKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfUENJICYmIGZvcmJpZF9kYWMgPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiUENJOiBWSUEgUENJIGJyaWRnZSBkZXRlY3RlZC4gRGlzYWJsaW5nIERBQy5cbiIpOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJkaXNhYmxpbmcgREFDIG9uIFZJQSBQQ0kgYnJpZGdlXG4iKTsKIAkJZm9yYmlkX2RhYyA9IDE7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwppbmRleCBkNTc2OGIxLi5iMjg0YjU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwpAQCAtMjU1LDEwICsyNTUsMTMgQEAKIH0KIAogLyogTWFwIGEgc2luZ2xlIGFyZWEgaW50byB0aGUgSU9NTVUgKi8KLXN0YXRpYyBkbWFfYWRkcl90Ci1nYXJ0X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgZG1hX2FkZHJfdCBnYXJ0X21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGJ1czsKKwlwaHlzX2FkZHJfdCBwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKIAogCWlmICghZGV2KQogCQlkZXYgPSAmeDg2X2RtYV9mYWxsYmFja19kZXY7CkBAIC0yNzUsOCArMjc4LDkgQEAKIC8qCiAgKiBGcmVlIGEgRE1BIG1hcHBpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIGdhcnRfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgZ2FydF91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgaW9tbXVfcGFnZTsKIAlpbnQgbnBhZ2VzOwpAQCAtMjk4LDggKzMwMiw4IEBACiAvKgogICogV3JhcHBlciBmb3IgcGNpX3VubWFwX3NpbmdsZSB3b3JraW5nIHdpdGggc2NhdHRlcmxpc3RzLgogICovCi1zdGF0aWMgdm9pZAotZ2FydF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcikKK3N0YXRpYyB2b2lkIGdhcnRfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwogCWludCBpOwpAQCAtMzA3LDcgKzMxMSw3IEBACiAJZm9yX2VhY2hfc2coc2csIHMsIG5lbnRzLCBpKSB7CiAJCWlmICghcy0+ZG1hX2xlbmd0aCB8fCAhcy0+bGVuZ3RoKQogCQkJYnJlYWs7Ci0JCWdhcnRfdW5tYXBfc2luZ2xlKGRldiwgcy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgsIGRpcik7CisJCWdhcnRfdW5tYXBfcGFnZShkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCBkaXIsIE5VTEwpOwogCX0KIH0KIApAQCAtMzI5LDcgKzMzMyw3IEBACiAJCQlhZGRyID0gZG1hX21hcF9hcmVhKGRldiwgYWRkciwgcy0+bGVuZ3RoLCBkaXIsIDApOwogCQkJaWYgKGFkZHIgPT0gYmFkX2RtYV9hZGRyZXNzKSB7CiAJCQkJaWYgKGkgPiAwKQotCQkJCQlnYXJ0X3VubWFwX3NnKGRldiwgc2csIGksIGRpcik7CisJCQkJCWdhcnRfdW5tYXBfc2coZGV2LCBzZywgaSwgZGlyLCBOVUxMKTsKIAkJCQluZW50cyA9IDA7CiAJCQkJc2dbMF0uZG1hX2xlbmd0aCA9IDA7CiAJCQkJYnJlYWs7CkBAIC00MDAsOCArNDA0LDggQEAKICAqIERNQSBtYXAgYWxsIGVudHJpZXMgaW4gYSBzY2F0dGVybGlzdC4KICAqIE1lcmdlIGNodW5rcyB0aGF0IGhhdmUgcGFnZSBhbGlnbmVkIHNpemVzIGludG8gYSBjb250aW51b3VzIG1hcHBpbmcuCiAgKi8KLXN0YXRpYyBpbnQKLWdhcnRfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLCBpbnQgZGlyKQorc3RhdGljIGludCBnYXJ0X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzLCAqcHMsICpzdGFydF9zZywgKnNnbWFwOwogCWludCBuZWVkID0gMCwgbmV4dG5lZWQsIGksIG91dCwgc3RhcnQ7CkBAIC00NjgsNyArNDcyLDcgQEAKIAogZXJyb3I6CiAJZmx1c2hfZ2FydCgpOwotCWdhcnRfdW5tYXBfc2coZGV2LCBzZywgb3V0LCBkaXIpOworCWdhcnRfdW5tYXBfc2coZGV2LCBzZywgb3V0LCBkaXIsIE5VTEwpOwogCiAJLyogV2hlbiBpdCB3YXMgZm9yY2VkIG9yIG1lcmdlZCB0cnkgYWdhaW4gaW4gYSBkdW1iIHdheSAqLwogCWlmIChmb3JjZV9pb21tdSB8fCBpb21tdV9tZXJnZSkgewpAQCAtNTIxLDcgKzUyNSw3IEBACiBnYXJ0X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCiAJCSAgIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7Ci0JZ2FydF91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOworCWdhcnRfdW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCwgTlVMTCk7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KIApAQCAtNzA3LDExICs3MTEsMTEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGdhcnRfZG1hX29wcyA9IHsKLQkubWFwX3NpbmdsZQkJCT0gZ2FydF9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUJCQk9IGdhcnRfdW5tYXBfc2luZ2xlLAorc3RhdGljIHN0cnVjdCBkbWFfbWFwX29wcyBnYXJ0X2RtYV9vcHMgPSB7CiAJLm1hcF9zZwkJCQk9IGdhcnRfbWFwX3NnLAogCS51bm1hcF9zZwkJCT0gZ2FydF91bm1hcF9zZywKKwkubWFwX3BhZ2UJCQk9IGdhcnRfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UJCQk9IGdhcnRfdW5tYXBfcGFnZSwKIAkuYWxsb2NfY29oZXJlbnQJCQk9IGdhcnRfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQJCQk9IGdhcnRfZnJlZV9jb2hlcmVudCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKaW5kZXggYzcwYWI1YS4uYzZkNzAzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYwpAQCAtMSwxNCArMSwxNCBAQAogLyogRmFsbGJhY2sgZnVuY3Rpb25zIHdoZW4gdGhlIG1haW4gSU9NTVUgY29kZSBpcyBub3QgY29tcGlsZWQgaW4uIFRoaXMKICAgIGNvZGUgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGkzODYuICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogc3RhdGljIGludApAQCAtMjUsMTkgKzI1LDE5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBkbWFfYWRkcl90Ci1ub21tdV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGludCBkaXJlY3Rpb24pCitzdGF0aWMgZG1hX2FkZHJfdCBub21tdV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JZG1hX2FkZHJfdCBidXMgPSBwYWRkcjsKKwlkbWFfYWRkcl90IGJ1cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKIAlXQVJOX09OKHNpemUgPT0gMCk7Ci0JaWYgKCFjaGVja19hZGRyKCJtYXBfc2luZ2xlIiwgaHdkZXYsIGJ1cywgc2l6ZSkpCi0JCQkJcmV0dXJuIGJhZF9kbWFfYWRkcmVzczsKKwlpZiAoIWNoZWNrX2FkZHIoIm1hcF9zaW5nbGUiLCBkZXYsIGJ1cywgc2l6ZSkpCisJCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogCXJldHVybiBidXM7CiB9CiAKLQogLyogTWFwIGEgc2V0IG9mIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IHNjYXR0ZXJsaXN0IGluIHN0cmVhbWluZwogICogbW9kZSBmb3IgRE1BLiAgVGhpcyBpcyB0aGUgc2NhdHRlci1nYXRoZXIgdmVyc2lvbiBvZiB0aGUKICAqIGFib3ZlIHBjaV9tYXBfc2luZ2xlIGludGVyZmFjZS4gIEhlcmUgdGhlIHNjYXR0ZXIgZ2F0aGVyIGxpc3QKQEAgLTU0LDcgKzU0LDggQEAKICAqIHRoZSBzYW1lIGhlcmUuCiAgKi8KIHN0YXRpYyBpbnQgbm9tbXVfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCSAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCisJCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgaTsKQEAgLTc4LDEyICs3OSwxMiBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgbm9tbXVfZG1hX29wcyA9IHsKLQkuYWxsb2NfY29oZXJlbnQgPSBkbWFfZ2VuZXJpY19hbGxvY19jb2hlcmVudCwKLQkuZnJlZV9jb2hlcmVudCA9IG5vbW11X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBub21tdV9tYXBfc2luZ2xlLAotCS5tYXBfc2cgPSBub21tdV9tYXBfc2csCi0JLmlzX3BoeXMgPSAxLAorc3RydWN0IGRtYV9tYXBfb3BzIG5vbW11X2RtYV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CT0gZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQJPSBub21tdV9mcmVlX2NvaGVyZW50LAorCS5tYXBfc2cJCT0gbm9tbXVfbWFwX3NnLAorCS5tYXBfcGFnZQk9IG5vbW11X21hcF9wYWdlLAorCS5pc19waHlzCT0gMSwKIH07CiAKIHZvaWQgX19pbml0IG5vX2lvbW11X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiLmMKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL3BjaS1zd2lvdGxiXzY0LmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IGQ1OWM5MTcuLjM0ZjEyZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC0zMywxOCArMzMsMTEgQEAKIAlyZXR1cm4gYmFkZHI7CiB9CiAKLWludCBfX3dlYWsgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK2ludCBfX3dlYWsgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcocGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdAotc3dpb3RsYl9tYXBfc2luZ2xlX3BoeXMoc3RydWN0IGRldmljZSAqaHdkZXYsIHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwKLQkJCWludCBkaXJlY3Rpb24pCi17Ci0JcmV0dXJuIHN3aW90bGJfbWFwX3NpbmdsZShod2RldiwgcGh5c190b192aXJ0KHBhZGRyKSwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQogc3RhdGljIHZvaWQgKng4Nl9zd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCiB7CkBAIC01NywyMCArNTAsMjAgQEAKIAlyZXR1cm4gc3dpb3RsYl9hbGxvY19jb2hlcmVudChod2Rldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZ3MpOwogfQogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHN3aW90bGJfZG1hX29wcyA9IHsKK3N0cnVjdCBkbWFfbWFwX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CiAJLm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAogCS5hbGxvY19jb2hlcmVudCA9IHg4Nl9zd2lvdGxiX2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gc3dpb3RsYl9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gc3dpb3RsYl9tYXBfc2luZ2xlX3BoeXMsCi0JLnVubWFwX3NpbmdsZSA9IHN3aW90bGJfdW5tYXBfc2luZ2xlLAogCS5zeW5jX3NpbmdsZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1LAogCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAogCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1LAogCS5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlLAogCS5zeW5jX3NnX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdSwKIAkuc3luY19zZ19mb3JfZGV2aWNlID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UsCi0JLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnLAotCS51bm1hcF9zZyA9IHN3aW90bGJfdW5tYXBfc2csCisJLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnX2F0dHJzLAorCS51bm1hcF9zZyA9IHN3aW90bGJfdW5tYXBfc2dfYXR0cnMsCisJLm1hcF9wYWdlID0gc3dpb3RsYl9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZSA9IHN3aW90bGJfdW5tYXBfcGFnZSwKIAkuZG1hX3N1cHBvcnRlZCA9IE5VTEwsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA2YWZhNTIzLi4xNTZmODc1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTY1LDExICs2NSwxMSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OwogCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJm1lLT50aHJlYWQ7CisJdW5zaWduZWQgbG9uZyAqYnAgPSB0LT5pb19iaXRtYXBfcHRyOwogCi0JaWYgKG1lLT50aHJlYWQuaW9fYml0bWFwX3B0cikgeworCWlmIChicCkgewogCQlzdHJ1Y3QgdHNzX3N0cnVjdCAqdHNzID0gJnBlcl9jcHUoaW5pdF90c3MsIGdldF9jcHUoKSk7CiAKLQkJa2ZyZWUodC0+aW9fYml0bWFwX3B0cik7CiAJCXQtPmlvX2JpdG1hcF9wdHIgPSBOVUxMOwogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfSU9fQklUTUFQKTsKIAkJLyoKQEAgLTc4LDYgKzc4LDcgQEAKIAkJbWVtc2V0KHRzcy0+aW9fYml0bWFwLCAweGZmLCB0LT5pb19iaXRtYXBfbWF4KTsKIAkJdC0+aW9fYml0bWFwX21heCA9IDA7CiAJCXB1dF9jcHUoKTsKKwkJa2ZyZWUoYnApOwogCX0KIAogCWRzX2V4aXRfdGhyZWFkKGN1cnJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMTQwMTRkNy4uNzZmOGY4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAl1bmxhenlfZnB1KHRzayk7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYWJiN2U2YS4uYjc1MWE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAl1bmxhenlfZnB1KHRzayk7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAzZDk2NzJlLi5iN2NjMjFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC02ODUsOSArNjg1LDggQEAKIAkJaWYgKCFjZmcuc2lnbmFsKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJCWNoaWxkLT50aHJlYWQuYnRzX292Zmxfc2lnbmFsID0gY2ZnLnNpZ25hbDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWlmICgoY2ZnLmZsYWdzICYgUFRSQUNFX0JUU19PX0FMTE9DKSAmJgpAQCAtMTQ1Niw2ICsxNDU1LDYgQEAKIAkgKiBzeXN0ZW0gY2FsbCBpbnN0cnVjdGlvbi4KIAkgKi8KIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkgJiYKLQkgICAgdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQLCBTSUdfREZMKSkKKwkgICAgdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJc2VuZF9zaWd0cmFwKGN1cnJlbnQsIHJlZ3MsIDAsIFRSQVBfQlJLUFQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IDY5N2QxYjcuLmU5NTAyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTc0LDggKzc0LDcgQEAKIAlpZiAoIWZvcmNlX2hwZXRfYWRkcmVzcykKIAkJcmV0dXJuOwogCi0JaWYgKHJjYmFfYmFzZSA9PSBOVUxMKQotCQlCVUcoKTsKKwlCVUdfT04ocmNiYV9iYXNlID09IE5VTEwpOwogCiAJLyogcmVhZCB0aGUgRnVuY3Rpb24gRGlzYWJsZSByZWdpc3RlciwgZHdvcmQgbW9kZSBvbmx5ICovCiAJdmFsID0gcmVhZGwocmNiYV9iYXNlICsgMHgzNDA0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwppbmRleCAyMDY0ZDBhLi40MTIzNTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCkBAIC0xNyw3ICsxNyw4IEBACiAKICNkZWZpbmUgUFRSKHgpICh4IDw8IDIpCiAKLS8qIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQorLyoKKyAqIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQogICogfiBjb250cm9sX3BhZ2UgKyBQQUdFX1NJWkUgYXJlIHVzZWQgYXMgZGF0YSBzdG9yYWdlIGFuZCBzdGFjayBmb3IKICAqIGp1bXBpbmcgYmFjawogICovCkBAIC03Niw4ICs3NywxMCBAQAogCW1vdmwJJWVheCwgQ1BfUEFfU1dBUF9QQUdFKCVlZGkpCiAJbW92bAklZWJ4LCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVlZGkpCiAKLQkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93ICovCi0JLyogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoICovCisJLyoKKwkgKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93CisJICogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoCisJICovCiAJbW92bAlQVFIoUEFfQ09OVFJPTF9QQUdFKSglZWJwKSwgJWVkaQogCiAJLyogc3dpdGNoIHRvIG5ldyBzZXQgb2YgcGFnZSB0YWJsZXMgKi8KQEAgLTk3LDcgKzEwMCw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaGwgICAlZWR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGRpc2FibGVkCiAJICogIC0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCiAJICogIC0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZApAQCAtMTEzLDcgKzExNyw4IEBACiAJLyogY2xlYXIgY3I0IGlmIGFwcGxpY2FibGUgKi8KIAl0ZXN0bAklZWN4LCAlZWN4CiAJanoJMWYKLQkvKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CiAJICogU2V0dGluZyBldmVyeXRoaW5nIHRvIHplcm8gc2VlbXMgc2FmZS4KIAkgKi8KIAl4b3JsCSVlYXgsICVlYXgKQEAgLTEzMiwxNSArMTM3LDE4IEBACiAJY2FsbAlzd2FwX3BhZ2VzCiAJYWRkbAkkOCwgJWVzcAogCi0JLyogVG8gYmUgY2VydGFpbiBvZiBhdm9pZGluZyBwcm9ibGVtcyB3aXRoIHNlbGYtbW9kaWZ5aW5nIGNvZGUKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCiAJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgogCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiwgaXQncyBoYW5keSwgYW5kIG5vdCBwcm9jZXNzb3IgZGVwZW5kZW50LgogCSAqLwogCXhvcmwJJWVheCwgJWVheAogCW1vdmwJJWVheCwgJWNyMwogCi0JLyogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcyAqLwotCS8qIGxlYXZlICVlc3AgYWxvbmUgKi8KKwkvKgorCSAqIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMKKwkgKiBsZWF2ZSAlZXNwIGFsb25lCisJICovCiAKIAl0ZXN0bAklZXNpLCAlZXNpCiAJam56IDFmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKaW5kZXggZDMyY2ZiMi4uNGRlOGY1YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUwpAQCAtMTksMjkgKzE5LDc3IEBACiAjZGVmaW5lIFBUUih4KSAoeCA8PCAzKQogI2RlZmluZSBQQUdFX0FUVFIgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCiAKKy8qCisgKiBjb250cm9sX3BhZ2UgKyBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUKKyAqIH4gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFIGFyZSB1c2VkIGFzIGRhdGEgc3RvcmFnZSBhbmQgc3RhY2sgZm9yCisgKiBqdW1waW5nIGJhY2sKKyAqLworI2RlZmluZSBEQVRBKG9mZnNldCkJCShLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUrKG9mZnNldCkpCisKKy8qIE1pbmltYWwgQ1BVIHN0YXRlICovCisjZGVmaW5lIFJTUAkJCURBVEEoMHgwKQorI2RlZmluZSBDUjAJCQlEQVRBKDB4OCkKKyNkZWZpbmUgQ1IzCQkJREFUQSgweDEwKQorI2RlZmluZSBDUjQJCQlEQVRBKDB4MTgpCisKKy8qIG90aGVyIGRhdGEgKi8KKyNkZWZpbmUgQ1BfUEFfVEFCTEVfUEFHRQlEQVRBKDB4MjApCisjZGVmaW5lIENQX1BBX1NXQVBfUEFHRQkJREFUQSgweDI4KQorI2RlZmluZSBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQCURBVEEoMHgzMCkKKwogCS50ZXh0CiAJLmFsaWduIFBBR0VfU0laRQogCS5jb2RlNjQKIAkuZ2xvYmwgcmVsb2NhdGVfa2VybmVsCiByZWxvY2F0ZV9rZXJuZWw6Ci0JLyogJXJkaSBpbmRpcmVjdGlvbl9wYWdlCisJLyoKKwkgKiAlcmRpIGluZGlyZWN0aW9uX3BhZ2UKIAkgKiAlcnNpIHBhZ2VfbGlzdAogCSAqICVyZHggc3RhcnQgYWRkcmVzcworCSAqICVyY3ggcHJlc2VydmVfY29udGV4dAogCSAqLwogCisJLyogU2F2ZSB0aGUgQ1BVIGNvbnRleHQsIHVzZWQgZm9yIGp1bXBpbmcgYmFjayAqLworCXB1c2hxICVyYngKKwlwdXNocSAlcmJwCisJcHVzaHEgJXIxMgorCXB1c2hxICVyMTMKKwlwdXNocSAlcjE0CisJcHVzaHEgJXIxNQorCXB1c2hmCisKKwltb3ZxCVBUUihWQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjExCisJbW92cQklcnNwLCBSU1AoJXIxMSkKKwltb3ZxCSVjcjAsICVyYXgKKwltb3ZxCSVyYXgsIENSMCglcjExKQorCW1vdnEJJWNyMywgJXJheAorCW1vdnEJJXJheCwgQ1IzKCVyMTEpCisJbW92cQklY3I0LCAlcmF4CisJbW92cQklcmF4LCBDUjQoJXIxMSkKKwogCS8qIHplcm8gb3V0IGZsYWdzLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJcHVzaHEgJDAKIAlwb3BmcQogCi0JLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdyAqLwotCS8qIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaCAqLworCS8qCisJICogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdworCSAqIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaAorCSAqLwogCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyOAogCiAJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSBub3cgdG9vICovCi0JbW92cQlQVFIoUEFfVEFCTEVfUEFHRSkoJXJzaSksICVyY3gKKwltb3ZxCVBUUihQQV9UQUJMRV9QQUdFKSglcnNpKSwgJXI5CisKKwkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBzd2FwIHBhZ2Ugbm93ICovCisJbW92cQlQVFIoUEFfU1dBUF9QQUdFKSglcnNpKSwgJXIxMAorCisJLyogc2F2ZSBzb21lIGluZm9ybWF0aW9uIGZvciBqdW1waW5nIGJhY2sgKi8KKwltb3ZxCSVyOSwgQ1BfUEFfVEFCTEVfUEFHRSglcjExKQorCW1vdnEJJXIxMCwgQ1BfUEFfU1dBUF9QQUdFKCVyMTEpCisJbW92cQklcmRpLCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVyMTEpCiAKIAkvKiBTd2l0Y2ggdG8gdGhlIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcyAqLwotCW1vdnEJJXJjeCwgJWNyMworCW1vdnEJJXI5LCAlY3IzCiAKIAkvKiBzZXR1cCBhIG5ldyBzdGFjayBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBjb250cm9sIHBhZ2UgKi8KIAlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKQEAgLTU1LDcgKzEwMyw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaHEgICAlcmR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGVuYWJsZWQKIAkgKiAgLSBBbGlnbm1lbnQgY2hlY2sgZGlzYWJsZWQKIAkgKiAgLSBXcml0ZSBwcm90ZWN0IGRpc2FibGVkCkBAIC02OCw3ICsxMTcsOCBAQAogCW9ybAkkKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKSwgJWVheAogCW1vdnEJJXJheCwgJWNyMAogCi0JLyogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgogCSAqICAtIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9uIGVuYWJsZWQKIAkgKi8KIAltb3ZxCSRYODZfQ1I0X1BBRSwgJXJheApAQCAtNzgsOSArMTI4LDg3IEBACiAxOgogCiAJLyogRmx1c2ggdGhlIFRMQiAobmVlZGVkPykgKi8KLQltb3ZxCSVyY3gsICVjcjMKKwltb3ZxCSVyOSwgJWNyMworCisJbW92cQklcmN4LCAlcjExCisJY2FsbAlzd2FwX3BhZ2VzCisKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCisJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgorCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAorCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KKwkgKi8KKwltb3ZxCSVjcjMsICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKworCS8qCisJICogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcworCSAqIGxlYXZlICVyc3AgYWxvbmUKKwkgKi8KKworCXRlc3RxCSVyMTEsICVyMTEKKwlqbnogMWYKKwl4b3JxCSVyYXgsICVyYXgKKwl4b3JxCSVyYngsICVyYngKKwl4b3JxICAgICVyY3gsICVyY3gKKwl4b3JxICAgICVyZHgsICVyZHgKKwl4b3JxICAgICVyc2ksICVyc2kKKwl4b3JxICAgICVyZGksICVyZGkKKwl4b3JxICAgICVyYnAsICVyYnAKKwl4b3JxCSVyOCwgICVyOAorCXhvcnEJJXI5LCAgJXI5CisJeG9ycQklcjEwLCAlcjkKKwl4b3JxCSVyMTEsICVyMTEKKwl4b3JxCSVyMTIsICVyMTIKKwl4b3JxCSVyMTMsICVyMTMKKwl4b3JxCSVyMTQsICVyMTQKKwl4b3JxCSVyMTUsICVyMTUKKworCXJldAorCisxOgorCXBvcHEJJXJkeAorCWxlYXEJUEFHRV9TSVpFKCVyMTApLCAlcnNwCisJY2FsbAkqJXJkeAorCisJLyogZ2V0IHRoZSByZS1lbnRyeSBwb2ludCBvZiB0aGUgcGVlciBzeXN0ZW0gKi8KKwltb3ZxCTAoJXJzcCksICVyYnAKKwljYWxsCTFmCisxOgorCXBvcHEJJXI4CisJc3VicQkkKDFiIC0gcmVsb2NhdGVfa2VybmVsKSwgJXI4CisJbW92cQlDUF9QQV9TV0FQX1BBR0UoJXI4KSwgJXIxMAorCW1vdnEJQ1BfUEFfQkFDS1VQX1BBR0VTX01BUCglcjgpLCAlcmRpCisJbW92cQlDUF9QQV9UQUJMRV9QQUdFKCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKwlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKKwljYWxsCXN3YXBfcGFnZXMKKwltb3ZxCSR2aXJ0dWFsX21hcHBlZCwgJXJheAorCXB1c2hxCSVyYXgKKwlyZXQKKwordmlydHVhbF9tYXBwZWQ6CisJbW92cQlSU1AoJXI4KSwgJXJzcAorCW1vdnEJQ1I0KCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjQKKwltb3ZxCUNSMyglcjgpLCAlcmF4CisJbW92cQlDUjAoJXI4KSwgJXI4CisJbW92cQklcmF4LCAlY3IzCisJbW92cQklcjgsICVjcjAKKwltb3ZxCSVyYnAsICVyYXgKKworCXBvcGYKKwlwb3BxCSVyMTUKKwlwb3BxCSVyMTQKKwlwb3BxCSVyMTMKKwlwb3BxCSVyMTIKKwlwb3BxCSVyYnAKKwlwb3BxCSVyYngKKwlyZXQKIAogCS8qIERvIHRoZSBjb3BpZXMgKi8KK3N3YXBfcGFnZXM6CiAJbW92cQklcmRpLCAlcmN4IAkvKiBQdXQgdGhlIHBhZ2VfbGlzdCBpbiAlcmN4ICovCiAJeG9ycQklcmRpLCAlcmRpCiAJeG9ycQklcnNpLCAlcnNpCkBAIC0xMTIsMzYgKzI0MCwyNyBAQAogCW1vdnEJJXJjeCwgICAlcnNpICAvKiBGb3IgZXZlciBzb3VyY2UgcGFnZSBkbyBhIGNvcHkgKi8KIAlhbmRxCSQweGZmZmZmZmZmZmZmZmYwMDAsICVyc2kKIAorCW1vdnEJJXJkaSwgJXJkeAorCW1vdnEJJXJzaSwgJXJheAorCisJbW92cQklcjEwLCAlcmRpCiAJbW92cQkkNTEyLCAgICVyY3gKIAlyZXAgOyBtb3ZzcQorCisJbW92cQklcmF4LCAlcmRpCisJbW92cQklcmR4LCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbW92cQklcmR4LCAlcmRpCisJbW92cQklcjEwLCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbGVhCVBBR0VfU0laRSglcmF4KSwgJXJzaQogCWptcAkwYgogMzoKLQotCS8qIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCi0JICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgotCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAotCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KLQkgKi8KLQltb3ZxCSVjcjMsICVyYXgKLQltb3ZxCSVyYXgsICVjcjMKLQotCS8qIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KLQkvKiBsZWF2ZSAlcnNwIGFsb25lICovCi0KLQl4b3JxCSVyYXgsICVyYXgKLQl4b3JxCSVyYngsICVyYngKLQl4b3JxICAgICVyY3gsICVyY3gKLQl4b3JxICAgICVyZHgsICVyZHgKLQl4b3JxICAgICVyc2ksICVyc2kKLQl4b3JxICAgICVyZGksICVyZGkKLQl4b3JxICAgICVyYnAsICVyYnAKLQl4b3JxCSVyOCwgICVyOAotCXhvcnEJJXI5LCAgJXI5Ci0JeG9ycQklcjEwLCAlcjkKLQl4b3JxCSVyMTEsICVyMTEKLQl4b3JxCSVyMTIsICVyMTIKLQl4b3JxCSVyMTMsICVyMTMKLQl4b3JxCSVyMTQsICVyMTQKLQl4b3JxCSVyMTUsICVyMTUKLQogCXJldAorCisJLmdsb2JsIGtleGVjX2NvbnRyb2xfY29kZV9zaXplCisuc2V0IGtleGVjX2NvbnRyb2xfY29kZV9zaXplLCAuIC0gcmVsb2NhdGVfa2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKaW5kZXggZGQ2ZjJiNy4uNWQ0NjViMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwpAQCAtMSwxNCArMSwxNCBAQAogLyoKICAqIFJUQyByZWxhdGVkIGZ1bmN0aW9ucwogICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAotI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCkBAIC0xNiw5ICsxNiw5IEBACiAgKiByZWdpc3RlciB3ZSBhcmUgd29ya2luZyB3aXRoLiAgSXQgaXMgcmVxdWlyZWQgZm9yIE5NSSBhY2Nlc3MgdG8gdGhlCiAgKiBDTU9TL1JUQyByZWdpc3RlcnMuICBTZWUgaW5jbHVkZS9hc20taTM4Ni9tYzE0NjgxOHJ0Yy5oIGZvciBkZXRhaWxzLgogICovCi12b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jayA9IDA7Cit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jazsKIEVYUE9SVF9TWU1CT0woY21vc19sb2NrKTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogRm9yIHR3byBkaWdpdCB5ZWFycyBhc3N1bWUgdGltZSBpcyBhbHdheXMgYWZ0ZXIgdGhhdCAqLwogI2RlZmluZSBDTU9TX1lFQVJTX09GRlMgMjAwMApAQCAtMzgsOSArMzgsOSBAQAogICovCiBpbnQgbWFjaF9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewotCWludCByZXR2YWwgPSAwOwogCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwogCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCWludCByZXR2YWwgPSAwOwogCiAJIC8qIHRlbGwgdGhlIGNsb2NrIGl0J3MgYmVpbmcgc2V0ICovCiAJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKQEAgLTcyLDggKzcyLDggQEAKIAkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKIAkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQotCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7Ci0JCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKKwkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKKwkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKQEAgLTE1MSw2ICsxNTEsNyBAQAogCW91dGIoYWRkciwgUlRDX1BPUlQoMCkpOwogCXZhbCA9IGluYihSVENfUE9SVCgxKSk7CiAJbG9ja19jbW9zX3N1ZmZpeChhZGRyKTsKKwogCXJldHVybiB2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHJ0Y19jbW9zX3JlYWQpOwpAQCAtMTY2LDggKzE2Nyw4IEBACiAKIHN0YXRpYyBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKIHsKLQlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHZhbCA9IHNldF93YWxsY2xvY2sobm93dGltZSk7CkBAIC0yNDIsNiArMjQzLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwogCWRldl9pbmZvKCZydGNfZGV2aWNlLmRldiwKIAkJICJyZWdpc3RlcmVkIHBsYXRmb3JtIFJUQyBkZXZpY2UgKG5vIFBOUCBkZXZpY2UgZm91bmQpXG4iKTsKKwogCXJldHVybiAwOwogfQogZGV2aWNlX2luaXRjYWxsKGFkZF9ydGNfY21vcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGI3NDZkZWIuLmI0MTU4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZGVmaW5lIEFSQ0hfU0VUVVAKICNlbmRpZgogCitSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKwogdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgX2Jya19zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fYnJrX2Jhc2U7Cit1bnNpZ25lZCBsb25nIF9icmtfZW5kID0gKHVuc2lnbmVkIGxvbmcpX19icmtfYmFzZTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKIHsKQEAgLTE1OCwxMiArMTYzLDYgQEAKIAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogVGhpcyB2YWx1ZSBpcyBzZXQgdXAgYnkgdGhlIGVhcmx5IGJvb3QgY29kZSB0byBwb2ludCB0byB0aGUgdmFsdWUKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBib290IHRpbWUgcGFnZSB0YWJsZXMuICBJdCBjb250YWlucyBhICpwaHlzaWNhbCoKLSAgIGFkZHJlc3MsIGFuZCBtdXN0IG5vdCBiZSBpbiB0aGUgLmJzcyBzZWdtZW50ISAqLwotdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19zdGFydCBfX2luaXRkYXRhID0gfjBVTDsKLXVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfZW5kIF9faW5pdGRhdGEgPSB+MFVMOwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZpZGVvX3JhbV9yZXNvdXJjZSA9IHsKIAkubmFtZQk9ICJWaWRlbyBSQU0gYXJlYSIsCiAJLnN0YXJ0CT0gMHhhMDAwMCwKQEAgLTIwMiw3ICsyMDEsOSBAQAogI2VuZGlmCiAKICNlbHNlCi1zdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGEgX19yZWFkX21vc3RseSA9IHsKKwkueDg2X3BoeXNfYml0cyA9IE1BWF9QSFlTTUVNX0JJVFMsCit9OwogRVhQT1JUX1NZTUJPTChib290X2NwdV9kYXRhKTsKICNlbmRpZgogCkBAIC0yMTcsMTIgKzIxOCw2IEBACiBpbnQgYm9vdGxvYWRlcl90eXBlOwogCiAvKgotICogRWFybHkgRE1JIG1lbW9yeQotICovCi1pbnQgZG1pX2FsbG9jX2luZGV4OwotY2hhciBkbWlfYWxsb2NfZGF0YVtETUlfTUFYX0RBVEFdOwotCi0vKgogICogU2V0dXAgb3B0aW9ucwogICovCiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CkBAIC0yNjcsNiArMjYyLDM1IEBACiB9CiAjZW5kaWYKIAordm9pZCAqIF9faW5pdCBleHRlbmRfYnJrKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCit7CisJc2l6ZV90IG1hc2sgPSBhbGlnbiAtIDE7CisJdm9pZCAqcmV0OworCisJQlVHX09OKF9icmtfc3RhcnQgPT0gMCk7CisJQlVHX09OKGFsaWduICYgbWFzayk7CisKKwlfYnJrX2VuZCA9IChfYnJrX2VuZCArIG1hc2spICYgfm1hc2s7CisJQlVHX09OKChjaGFyICopKF9icmtfZW5kICsgc2l6ZSkgPiBfX2Jya19saW1pdCk7CisKKwlyZXQgPSAodm9pZCAqKV9icmtfZW5kOworCV9icmtfZW5kICs9IHNpemU7CisKKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2Jyayh2b2lkKQoreworCWlmIChfYnJrX2VuZCA+IF9icmtfc3RhcnQpCisJCXJlc2VydmVfZWFybHkoX19wYShfYnJrX3N0YXJ0KSwgX19wYShfYnJrX2VuZCksICJCUksiKTsKKworCS8qIE1hcmsgYnJrIGFyZWEgYXMgbG9ja2VkIGRvd24gYW5kIG5vIGxvbmdlciB0YWtpbmcgYW55CisJICAgbmV3IGFsbG9jYXRpb25zICovCisJX2Jya19zdGFydCA9IDA7Cit9CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTcxNSwxMSArNzM5LDcgQEAKIAlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3RleHQ7CiAJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSBfZXRleHQ7CiAJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBfZWRhdGE7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWluaXRfbW0uYnJrID0gaW5pdF9wZ190YWJsZXNfZW5kICsgUEFHRV9PRkZTRVQ7Ci0jZWxzZQotCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOwotI2VuZGlmCisJaW5pdF9tbS5icmsgPSBfYnJrX2VuZDsKIAogCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSB2aXJ0X3RvX3BoeXMoX3RleHQpOwogCWNvZGVfcmVzb3VyY2UuZW5kID0gdmlydF90b19waHlzKF9ldGV4dCktMTsKQEAgLTg0MCw2ICs4NjAsOCBAQAogCXNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjaygpOwogI2VuZGlmCiAKKwlyZXNlcnZlX2JyaygpOworCiAJLyogbWF4X3Bmbl9tYXBwZWQgaXMgdXBkYXRlZCBoZXJlICovCiAJbWF4X2xvd19wZm5fbWFwcGVkID0gaW5pdF9tZW1vcnlfbWFwcGluZygwLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAJbWF4X3Bmbl9tYXBwZWQgPSBtYXhfbG93X3Bmbl9tYXBwZWQ7CkBAIC0xMDI3LDcgKzEwNDksNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCAgPSB7CiAJLmhhbmRsZXIgPSB0aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX0lSUVBPTEwgfCBJUlFGX1RJTUVSLAotCS5tYXNrID0gQ1BVX01BU0tfTk9ORSwKIAkubmFtZSA9ICJ0aW1lciIKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwppbmRleCBkMmNjNjQyLi5kZmNjNzRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCkBAIC0yMTEsMzEgKzIxMSwyNyBAQAogewogCS8qIERlZmF1bHQgdG8gdXNpbmcgbm9ybWFsIHN0YWNrICovCiAJdW5zaWduZWQgbG9uZyBzcCA9IHJlZ3MtPnNwOworCWludCBvbnNpZ3N0YWNrID0gb25fc2lnX3N0YWNrKHNwKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKiByZWR6b25lICovCiAJc3AgLT0gMTI4OwogI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAotCS8qCi0JICogSWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGFuZCB3b3VsZCBvdmVyZmxvdyBpdCwgZG9uJ3QuCi0JICogUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2Ugd2lsbCBkaWUgd2l0aCBTSUdTRUdWLgotCSAqLwotCWlmIChvbl9zaWdfc3RhY2soc3ApICYmICFsaWtlbHkob25fc2lnX3N0YWNrKHNwIC0gZnJhbWVfc2l6ZSkpKQotCQlyZXR1cm4gKHZvaWQgX191c2VyICopIC0xTDsKLQotCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLwotCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCWlmIChzYXNfc3NfZmxhZ3Moc3ApID09IDApCi0JCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwotCX0gZWxzZSB7CisJaWYgKCFvbnNpZ3N0YWNrKSB7CisJCS8qIFRoaXMgaXMgdGhlIFgvT3BlbiBzYW5jdGlvbmVkIHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICAqLworCQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgeworCQkJaWYgKHNhc19zc19mbGFncyhzcCkgPT0gMCkKKwkJCQlzcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOworCQl9IGVsc2UgewogI2lmZGVmIENPTkZJR19YODZfMzIKLQkJLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCi0JCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgotCQkJIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgJiYKLQkJCQlrYS0+c2Euc2FfcmVzdG9yZXIpCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CisJCQkvKiBUaGlzIGlzIHRoZSBsZWdhY3kgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gKi8KKwkJCWlmICgocmVncy0+c3MgJiAweGZmZmYpICE9IF9fVVNFUl9EUyAmJgorCQkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCisJCQkJCWthLT5zYS5zYV9yZXN0b3JlcikKKwkJCQlzcCA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLworCQl9CiAJfQogCiAJaWYgKHVzZWRfbWF0aCgpKSB7CkBAIC0yNDQsMTIgKzI0MCwyMiBAQAogCQlzcCA9IHJvdW5kX2Rvd24oc3AsIDY0KTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAJCSpmcHN0YXRlID0gKHZvaWQgX191c2VyICopc3A7Ci0KLQkJaWYgKHNhdmVfaTM4N194c3RhdGUoKmZwc3RhdGUpIDwgMCkKLQkJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CiAJfQogCi0JcmV0dXJuICh2b2lkIF9fdXNlciAqKWFsaWduX3NpZ2ZyYW1lKHNwIC0gZnJhbWVfc2l6ZSk7CisJc3AgPSBhbGlnbl9zaWdmcmFtZShzcCAtIGZyYW1lX3NpemUpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93IGl0LCBkb24ndC4KKwkgKiBSZXR1cm4gYW4gYWx3YXlzLWJvZ3VzIGFkZHJlc3MgaW5zdGVhZCBzbyB3ZSB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJICovCisJaWYgKG9uc2lnc3RhY2sgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3ApKSkKKwkJcmV0dXJuICh2b2lkIF9fdXNlciAqKS0xTDsKKworCS8qIHNhdmUgaTM4NyBzdGF0ZSAqLworCWlmICh1c2VkX21hdGgoKSAmJiBzYXZlX2kzODdfeHN0YXRlKCpmcHN0YXRlKSA8IDApCisJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CisKKwlyZXR1cm4gKHZvaWQgX191c2VyICopc3A7CiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCAyNDkzMzRmLi5lZjdkMTAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTExNCwxMCArMTE0LDYgQEAKIAogYXRvbWljX3QgaW5pdF9kZWFzc2VydGVkOwogCi0KLS8qIFNldCBpZiB3ZSBmaW5kIGEgQiBzdGVwcGluZyBDUFUgKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0ZGF0YSBzbXBfYl9zdGVwcGluZzsKLQogI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKIAogLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwpAQCAtMjcxLDggKzI2Nyw2IEBACiAJY3B1bWFza19zZXRfY3B1KGNwdWlkLCBjcHVfY2FsbGluX21hc2spOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgdW5zYWZlX3NtcDsKLQogLyoKICAqIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3Nvci4KICAqLwpAQCAtMzQwLDc2ICszMzQsNiBAQAogCWNwdV9pZGxlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzbXBfYXBwbHlfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQkvKgotCSAqIE1hc2sgQiwgUGVudGl1bSwgYnV0IG5vdCBQZW50aXVtIE1NWAotCSAqLwotCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgYy0+eDg2ID09IDUgJiYKLQkgICAgYy0+eDg2X21hc2sgPj0gMSAmJiBjLT54ODZfbWFzayA8PSA0ICYmCi0JICAgIGMtPng4Nl9tb2RlbCA8PSAzKQotCQkvKgotCQkgKiBSZW1lbWJlciB3ZSBoYXZlIEIgc3RlcCBQZW50aWEgd2l0aCBidWdzCi0JCSAqLwotCQlzbXBfYl9zdGVwcGluZyA9IDE7Ci0KLQkvKgotCSAqIENlcnRhaW4gQXRobG9ucyBtaWdodCB3b3JrIChmb3IgdmFyaW91cyB2YWx1ZXMgb2YgJ3dvcmsnKSBpbiBTTVAKLQkgKiBidXQgdGhleSBhcmUgbm90IGNlcnRpZmllZCBhcyBNUCBjYXBhYmxlLgotCSAqLwotCWlmICgoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYgKGMtPng4NiA9PSA2KSkgewotCi0JCWlmIChudW1fcG9zc2libGVfY3B1cygpID09IDEpCi0JCQlnb3RvIHZhbGlkX2s3OwotCi0JCS8qIEF0aGxvbiA2NjAvNjYxIGlzIHZhbGlkLiAqLwotCQlpZiAoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoKGMtPng4Nl9tYXNrID09IDApIHx8Ci0JCSAgICAoYy0+eDg2X21hc2sgPT0gMSkpKQotCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKiBEdXJvbiA2NzAgaXMgdmFsaWQgKi8KLQkJaWYgKChjLT54ODZfbW9kZWwgPT0gNykgJiYgKGMtPng4Nl9tYXNrID09IDApKQotCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKgotCQkgKiBBdGhsb24gNjYyLCBEdXJvbiA2NzEsIGFuZCBBdGhsb24gPm1vZGVsIDcgaGF2ZSBjYXBhYmlsaXR5Ci0JCSAqIGJpdC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgQTUgc3RlcHBpbmcgKDY2Mikgb2Ygc29tZQotCQkgKiBBdGhsb24gWFAncyBoYXZlIHRoZSBNUCBiaXQgc2V0LgotCQkgKiBTZWUgaHR0cDovL3d3dy5oZWlzZS5kZS9uZXdzdGlja2VyL2RhdGEvam93LTE4LjEwLjAxLTAwMCBmb3IKLQkJICogbW9yZS4KLQkJICovCi0JCWlmICgoKGMtPng4Nl9tb2RlbCA9PSA2KSAmJiAoYy0+eDg2X21hc2sgPj0gMikpIHx8Ci0JCSAgICAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPj0gMSkpIHx8Ci0JCSAgICAgKGMtPng4Nl9tb2RlbCA+IDcpKQotCQkJaWYgKGNwdV9oYXNfbXApCi0JCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKiBJZiB3ZSBnZXQgaGVyZSwgbm90IGEgY2VydGlmaWVkIFNNUCBjYXBhYmxlIEFNRCBzeXN0ZW0uICovCi0JCXVuc2FmZV9zbXAgPSAxOwotCX0KLQotdmFsaWRfazc6Ci0JOwotfQotCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX2NoZWNrcyh2b2lkKQotewotCWlmIChzbXBfYl9zdGVwcGluZykKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogU01QIG9wZXJhdGlvbiBtYXkgYmUgdW5yZWxpYWJsZSIKLQkJCQkgICAgIndpdGggQiBzdGVwcGluZyBwcm9jZXNzb3JzLlxuIik7Ci0KLQkvKgotCSAqIERvbid0IHRhaW50IGlmIHdlIGFyZSBydW5uaW5nIFNNUCBrZXJuZWwgb24gYSBzaW5nbGUgbm9uLU1QCi0JICogYXBwcm92ZWQgQXRobG9uCi0JICovCi0JaWYgKHVuc2FmZV9zbXAgJiYgbnVtX29ubGluZV9jcHVzKCkgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgotCQkJInByb2Nlc3NvcnMgaXMgbm90IHN1aXRhYmxlIGZvciBTTVAuXG4iKTsKLQkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOwotCX0KLX0KLQogLyoKICAqIFRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtIGZvcgogICogYSBnaXZlbiBDUFUKQEAgLTQyMyw3ICszNDcsNiBAQAogCWMtPmNwdV9pbmRleCA9IGlkOwogCWlmIChpZCAhPSAwKQogCQlpZGVudGlmeV9zZWNvbmRhcnlfY3B1KGMpOwotCXNtcF9hcHBseV9xdWlya3MoYyk7CiB9CiAKIApAQCAtMTE5Myw3ICsxMTE2LDYgQEAKIAlwcl9kZWJ1ZygiQm9vdCBkb25lLlxuIik7CiAKIAlpbXByZXNzX2ZyaWVuZHMoKTsKLQlzbXBfY2hlY2tzKCk7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJc2V0dXBfaW9hcGljX2Rlc3QoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKaW5kZXggM2JkYjY0OC4uZmY1Yzg3MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCkBAIC0zMzIsMyArMzMyLDUgQEAKIAkubG9uZyBzeXNfZHVwMwkJCS8qIDMzMCAqLwogCS5sb25nIHN5c19waXBlMgogCS5sb25nIHN5c19pbm90aWZ5X2luaXQxCisJLmxvbmcgc3lzX3ByZWFkdgorCS5sb25nIHN5c19wd3JpdGV2CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC94ODYva2VybmVsL3RpbWVfNjQuYwppbmRleCAyNDFlYzM5Li41YmEzNDNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90aW1lXzY0LmMKQEAgLTExNiw3ICsxMTYsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxMCA9IHsKIAkuaGFuZGxlcgk9IHRpbWVyX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfSVJRUE9MTCB8IElSUUZfTk9CQUxBTkNJTkcgfCBJUlFGX1RJTUVSLAotCS5tYXNrCQk9IENQVV9NQVNLX05PTkUsCiAJLm5hbWUJCT0gInRpbWVyIgogfTsKIApAQCAtMTI1LDcgKzEyNCw2IEBACiAJaWYgKCFocGV0X2VuYWJsZSgpKQogCQlzZXR1cF9waXRfdGltZXIoKTsKIAotCWlycTAubWFzayA9IGNwdW1hc2tfb2ZfY3B1KDApOwogCXNldHVwX2lycSgwLCAmaXJxMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCBkMDM4YjljLi43OWMwNzMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAlpbnQgbm9kZTsKIAlpbnQgbmJsYWRlczsKIAlpbnQgbGFzdF9ibGFkZTsKLQlpbnQgY3VyX2NwdSA9IDA7CisJaW50IGN1cl9jcHU7CiAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm4gMDsKQEAgLTc2MCw2ICs3NjAsNyBAQAogCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKIAluYmxhZGVzID0gMDsKIAlsYXN0X2JsYWRlID0gLTE7CisJY3VyX2NwdSA9IDA7CiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlibGFkZSA9IHV2X25vZGVfdG9fYmxhZGVfaWQobm9kZSk7CiAJCWlmIChibGFkZSA9PSBsYXN0X2JsYWRlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCAwZmNjOTVhLi43ZTQ1MTU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKgogICogU2VuZCBmZWVkYmFjayB0byA8Y29scGF0Y2hAdXMuaWJtLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeDg2X2NwdSwgY3B1X2RldmljZXMpOwpAQCAtNDcsNiArNDcsNyBAQAogCSAqLwogCWlmIChudW0pCiAJCXBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1LmhvdHBsdWdnYWJsZSA9IDE7CisKIAlyZXR1cm4gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdSwgbnVtKTsKIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9yZWdpc3Rlcl9jcHUpOwpAQCAtNTYsMTIgKzU3LDEzIEBACiAJdW5yZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1KTsKIH0KIEVYUE9SVF9TWU1CT0woYXJjaF91bnJlZ2lzdGVyX2NwdSk7Ci0jZWxzZQorI2Vsc2UgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pCiB7CiAJcmV0dXJuIHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgbnVtKS5jcHUsIG51bSk7CiB9Ci0jZW5kaWYgLypDT05GSUdfSE9UUExVR19DUFUqLworI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7CkBAIC03MCwxMSArNzIsMTEgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCiAJCXJlZ2lzdGVyX29uZV9ub2RlKGkpOwotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisjZW5kaWYKIAogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpCiAJCWFyY2hfcmVnaXN0ZXJfY3B1KGkpOworCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmI2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogU0dJIFJUQyBjbG9jay90aW1lciByb3V0aW5lcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIERpbWl0cmkgU2l2YW5pY2gKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgorI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisKKyNkZWZpbmUgUlRDX05BTUUJCSJzZ2lfcnRjIgorCitzdGF0aWMgY3ljbGVfdCB1dl9yZWFkX3J0Yyh2b2lkKTsKK3N0YXRpYyBpbnQgdXZfcnRjX25leHRfZXZlbnQodW5zaWduZWQgbG9uZywgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIHV2X3J0Y190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV91diA9IHsKKwkubmFtZQkJPSBSVENfTkFNRSwKKwkucmF0aW5nCQk9IDQwMCwKKwkucmVhZAkJPSB1dl9yZWFkX3J0YywKKwkubWFzawkJPSAoY3ljbGVfdClVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLLAorCS5zaGlmdAkJPSAxMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja19ldmVudF9kZXZpY2VfdXYgPSB7CisJLm5hbWUJCT0gUlRDX05BTUUsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2hpZnQJCT0gMjAsCisJLnJhdGluZwkJPSA0MDAsCisJLmlycQkJPSAtMSwKKwkuc2V0X25leHRfZXZlbnQJPSB1dl9ydGNfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSB1dl9ydGNfdGltZXJfc2V0dXAsCisJLmV2ZW50X2hhbmRsZXIJPSBOVUxMLAorfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGNwdV9jZWQpOworCisvKiBUaGVyZSBpcyBvbmUgb2YgdGhlc2UgYWxsb2NhdGVkIHBlciBub2RlICovCitzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgeworCXNwaW5sb2NrX3QJbG9jazsKKwkvKiBuZXh0IGNwdSB3YWl0aW5nIGZvciB0aW1lciwgbG9jYWwgbm9kZSByZWxhdGl2ZTogKi8KKwlpbnQJCW5leHRfY3B1OworCS8qIG51bWJlciBvZiBjcHVzIG9uIHRoaXMgbm9kZTogKi8KKwlpbnQJCW5jcHVzOworCXN0cnVjdCB7CisJCWludAlsY3B1OwkJLyogc3lzdGVtd2lkZSBsb2dpY2FsIGNwdSBudW1iZXIgKi8KKwkJdTY0CWV4cGlyZXM7CS8qIG5leHQgdGltZXIgZXhwaXJhdGlvbiBmb3IgdGhpcyBjcHUgKi8KKwl9IGNwdVsxXTsKK307CisKKy8qCisgKiBBY2Nlc3MgdG8gdXZfcnRjX3RpbWVyX2hlYWQgdmlhIGJsYWRlIGlkLgorICovCitzdGF0aWMgc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkCQkqKmJsYWRlX2luZm8gX19yZWFkX21vc3RseTsKKworc3RhdGljIGludAkJCQl1dl9ydGNfZW5hYmxlOworCisvKgorICogSGFyZHdhcmUgaW50ZXJmYWNlIHJvdXRpbmVzCisgKi8KKworLyogU2VuZCBJUElzIHRvIGFub3RoZXIgbm9kZSAqLworc3RhdGljIHZvaWQgdXZfcnRjX3NlbmRfSVBJKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBhcGljaWQsIHZhbDsKKwlpbnQgcG5vZGU7CisKKwlhcGljaWQgPSBjcHVfcGh5c2ljYWxfaWQoY3B1KTsKKwlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShhcGljaWQpOworCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJICAgICAgKGFwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkgICAgICAoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7Cit9CisKKy8qIENoZWNrIGZvciBhbiBSVEMgaW50ZXJydXB0IHBlbmRpbmcgKi8KK3N0YXRpYyBpbnQgdXZfaW50cl9wZW5kaW5nKGludCBwbm9kZSkKK3sKKwlyZXR1cm4gdXZfcmVhZF9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9FVkVOVF9PQ0NVUlJFRDApICYKKwkJVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX01BU0s7Cit9CisKKy8qIFNldHVwIGludGVycnVwdCBhbmQgcmV0dXJuIG5vbi16ZXJvIGlmIGVhcmx5IGV4cGlyYXRpb24gb2NjdXJyZWQuICovCitzdGF0aWMgaW50IHV2X3NldHVwX2ludHIoaW50IGNwdSwgdTY0IGV4cGlyZXMpCit7CisJdTY0IHZhbDsKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX1JUQzFfSU5UX0NPTkZJRywKKwkJVVZIX1JUQzFfSU5UX0NPTkZJR19NX01BU0spOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lOVF9DTVBCLCAtMUwpOworCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTLAorCQlVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzFfTUFTSyk7CisKKwl2YWwgPSAoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SIDw8IFVWSF9SVEMxX0lOVF9DT05GSUdfVkVDVE9SX1NIRlQpIHwKKwkJKCh1NjQpY3B1X3BoeXNpY2FsX2lkKGNwdSkgPDwgVVZIX1JUQzFfSU5UX0NPTkZJR19BUElDX0lEX1NIRlQpOworCisJLyogU2V0IGNvbmZpZ3VyYXRpb24gKi8KKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9SVEMxX0lOVF9DT05GSUcsIHZhbCk7CisJLyogSW5pdGlhbGl6ZSBjb21wYXJhdG9yIHZhbHVlICovCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSU5UX0NNUEIsIGV4cGlyZXMpOworCisJcmV0dXJuIChleHBpcmVzIDwgdXZfcmVhZF9ydGMoKSAmJiAhdXZfaW50cl9wZW5kaW5nKHBub2RlKSk7Cit9CisKKy8qCisgKiBQZXItY3B1IHRpbWVyIHRyYWNraW5nIHJvdXRpbmVzCisgKi8KKworc3RhdGljIF9faW5pdCB2b2lkIHV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycyh2b2lkKQoreworCWludCBiaWQ7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShiaWQpIHsKKwkJa2ZyZWUoYmxhZGVfaW5mb1tiaWRdKTsKKwl9CisJa2ZyZWUoYmxhZGVfaW5mbyk7Cit9CisKKy8qIEFsbG9jYXRlIHBlci1ub2RlIGxpc3Qgb2YgY3B1IHRpbWVyIGV4cGlyYXRpb24gdGltZXMuICovCitzdGF0aWMgX19pbml0IGludCB1dl9ydGNfYWxsb2NhdGVfdGltZXJzKHZvaWQpCit7CisJaW50IGNwdTsKKworCWJsYWRlX2luZm8gPSBrbWFsbG9jKHV2X3Bvc3NpYmxlX2JsYWRlcyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsYWRlX2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChibGFkZV9pbmZvLCAwLCB1dl9wb3NzaWJsZV9ibGFkZXMgKiBzaXplb2Yodm9pZCAqKSk7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaW50IG5pZCA9IGNwdV90b19ub2RlKGNwdSk7CisJCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwkJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCQlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisKKwkJaWYgKCFoZWFkKSB7CisJCQloZWFkID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQpICsKKwkJCQkodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyhiaWQpICoKKwkJCQkJMiAqIHNpemVvZih1NjQpKSwKKwkJCQlHRlBfS0VSTkVMLCBuaWQpOworCQkJaWYgKCFoZWFkKSB7CisJCQkJdXZfcnRjX2RlYWxsb2NhdGVfdGltZXJzKCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlzcGluX2xvY2tfaW5pdCgmaGVhZC0+bG9jayk7CisJCQloZWFkLT5uY3B1cyA9IHV2X2JsYWRlX25yX3Bvc3NpYmxlX2NwdXMoYmlkKTsKKwkJCWhlYWQtPm5leHRfY3B1ID0gLTE7CisJCQlibGFkZV9pbmZvW2JpZF0gPSBoZWFkOworCQl9CisKKwkJaGVhZC0+Y3B1W2JjcHVdLmxjcHUgPSBjcHU7CisJCWhlYWQtPmNwdVtiY3B1XS5leHBpcmVzID0gVUxMT05HX01BWDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRmluZCBhbmQgc2V0IHRoZSBuZXh0IGV4cGlyaW5nIHRpbWVyLiAgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y19maW5kX25leHRfdGltZXIoc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkLCBpbnQgcG5vZGUpCit7CisJdTY0IGxvd2VzdCA9IFVMTE9OR19NQVg7CisJaW50IGMsIGJjcHUgPSAtMTsKKworCWhlYWQtPm5leHRfY3B1ID0gLTE7CisJZm9yIChjID0gMDsgYyA8IGhlYWQtPm5jcHVzOyBjKyspIHsKKwkJdTY0IGV4cCA9IGhlYWQtPmNwdVtjXS5leHBpcmVzOworCQlpZiAoZXhwIDwgbG93ZXN0KSB7CisJCQliY3B1ID0gYzsKKwkJCWxvd2VzdCA9IGV4cDsKKwkJfQorCX0KKwlpZiAoYmNwdSA+PSAwKSB7CisJCWhlYWQtPm5leHRfY3B1ID0gYmNwdTsKKwkJYyA9IGhlYWQtPmNwdVtiY3B1XS5sY3B1OworCQlpZiAodXZfc2V0dXBfaW50cihjLCBsb3dlc3QpKQorCQkJLyogSWYgd2UgZGlkbid0IHNldCBpdCB1cCBpbiB0aW1lLCB0cmlnZ2VyICovCisJCQl1dl9ydGNfc2VuZF9JUEkoYyk7CisJfSBlbHNlIHsKKwkJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfUlRDMV9JTlRfQ09ORklHLAorCQkJVVZIX1JUQzFfSU5UX0NPTkZJR19NX01BU0spOworCX0KK30KKworLyoKKyAqIFNldCBleHBpcmF0aW9uIHRpbWUgZm9yIGN1cnJlbnQgY3B1LgorICoKKyAqIFJldHVybnMgMSBpZiB3ZSBtaXNzZWQgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAqLworc3RhdGljIGludCB1dl9ydGNfc2V0X3RpbWVyKGludCBjcHUsIHU2NCBleHBpcmVzKQoreworCWludCBwbm9kZSA9IHV2X2NwdV90b19wbm9kZShjcHUpOworCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCXU2NCAqdCA9ICZoZWFkLT5jcHVbYmNwdV0uZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuZXh0X2NwdTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisKKwluZXh0X2NwdSA9IGhlYWQtPm5leHRfY3B1OworCSp0ID0gZXhwaXJlczsKKwkvKiBXaWxsIHRoaXMgb25lIGJlIG5leHQgdG8gZ28gb2ZmPyAqLworCWlmIChuZXh0X2NwdSA8IDAgfHwgYmNwdSA9PSBuZXh0X2NwdSB8fAorCQkJZXhwaXJlcyA8IGhlYWQtPmNwdVtuZXh0X2NwdV0uZXhwaXJlcykgeworCQloZWFkLT5uZXh0X2NwdSA9IGJjcHU7CisJCWlmICh1dl9zZXR1cF9pbnRyKGNwdSwgZXhwaXJlcykpIHsKKwkJCSp0ID0gVUxMT05HX01BWDsKKwkJCXV2X3J0Y19maW5kX25leHRfdGltZXIoaGVhZCwgcG5vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbnNldCBleHBpcmF0aW9uIHRpbWUgZm9yIGN1cnJlbnQgY3B1LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGlzIHRpbWVyIHdhcyBwZW5kaW5nLgorICovCitzdGF0aWMgaW50IHV2X3J0Y191bnNldF90aW1lcihpbnQgY3B1KQoreworCWludCBwbm9kZSA9IHV2X2NwdV90b19wbm9kZShjcHUpOworCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCXU2NCAqdCA9ICZoZWFkLT5jcHVbYmNwdV0uZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGhlYWQtPm5leHRfY3B1ID09IGJjcHUgJiYgdXZfcmVhZF9ydGMoKSA+PSAqdCkKKwkJcmMgPSAxOworCisJKnQgPSBVTExPTkdfTUFYOworCisJLyogV2FzIHRoZSBoYXJkd2FyZSBzZXR1cCBmb3IgdGhpcyB0aW1lcj8gKi8KKwlpZiAoaGVhZC0+bmV4dF9jcHUgPT0gYmNwdSkKKwkJdXZfcnRjX2ZpbmRfbmV4dF90aW1lcihoZWFkLCBwbm9kZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMuCisgKi8KKworLyoKKyAqIFJlYWQgdGhlIFJUQy4KKyAqLworc3RhdGljIGN5Y2xlX3QgdXZfcmVhZF9ydGModm9pZCkKK3sKKwlyZXR1cm4gKGN5Y2xlX3QpdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JUQyk7Cit9CisKKy8qCisgKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKKyAqLworc3RhdGljIGludCB1dl9ydGNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJaW50IGNlZF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNlZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gdXZfcnRjX3NldF90aW1lcihjZWRfY3B1LCBkZWx0YSArIHV2X3JlYWRfcnRjKCkpOworfQorCisvKgorICogU2V0dXAgdGhlIFJUQyB0aW1lciBpbiBvbmVzaG90IG1vZGUKKyAqLworc3RhdGljIHZvaWQgdXZfcnRjX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlpbnQgY2VkX2NwdSA9IGNwdW1hc2tfZmlyc3QoZXZ0LT5jcHVtYXNrKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgeWV0ICovCisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCXV2X3J0Y191bnNldF90aW1lcihjZWRfY3B1KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCB1dl9ydGNfaW50ZXJydXB0KHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJl9fZ2V0X2NwdV92YXIoY3B1X2NlZCk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmICghY2VkIHx8ICFjZWQtPmV2ZW50X2hhbmRsZXIpCisJCXJldHVybjsKKworCWlmICh1dl9ydGNfdW5zZXRfdGltZXIoY3B1KSAhPSAxKQorCQlyZXR1cm47CisKKwljZWQtPmV2ZW50X2hhbmRsZXIoY2VkKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdXZfZW5hYmxlX3J0YyhjaGFyICpzdHIpCit7CisJdXZfcnRjX2VuYWJsZSA9IDE7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInV2cnRjIiwgdXZfZW5hYmxlX3J0Yyk7CisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfcmVnaXN0ZXJfY2xvY2tldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmX19nZXRfY3B1X3ZhcihjcHVfY2VkKTsKKworCSpjZWQgPSBjbG9ja19ldmVudF9kZXZpY2VfdXY7CisJY2VkLT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworfQorCitzdGF0aWMgX19pbml0IGludCB1dl9ydGNfc2V0dXBfY2xvY2sodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXV2X3J0Y19lbmFibGUgfHwgIWlzX3V2X3N5c3RlbSgpIHx8IGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24gPSB1dl9ydGNfaW50ZXJydXB0OworCisJY2xvY2tzb3VyY2VfdXYubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAorCQkJCWNsb2Nrc291cmNlX3V2LnNoaWZ0KTsKKworCXJjID0gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3V2KTsKKwlpZiAocmMpIHsKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gTlVMTDsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIFNldHVwIGFuZCByZWdpc3RlciBjbG9ja2V2ZW50cyAqLworCXJjID0gdXZfcnRjX2FsbG9jYXRlX3RpbWVycygpOworCWlmIChyYykgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwljbG9ja19ldmVudF9kZXZpY2VfdXYubXVsdCA9IGRpdl9zYyhzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQsCisJCQkJTlNFQ19QRVJfU0VDLCBjbG9ja19ldmVudF9kZXZpY2VfdXYuc2hpZnQpOworCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm1pbl9kZWx0YV9ucyA9IE5TRUNfUEVSX1NFQyAvCisJCQkJCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQ7CisKKwljbG9ja19ldmVudF9kZXZpY2VfdXYubWF4X2RlbHRhX25zID0gY2xvY2tzb3VyY2VfdXYubWFzayAqCisJCQkJKE5TRUNfUEVSX1NFQyAvIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwlyYyA9IHNjaGVkdWxlX29uX2VhY2hfY3B1KHV2X3J0Y19yZWdpc3Rlcl9jbG9ja2V2ZW50cyk7CisJaWYgKHJjKSB7CisJCWNsb2Nrc291cmNlX3VucmVnaXN0ZXIoJmNsb2Nrc291cmNlX3V2KTsKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gTlVMTDsKKwkJdXZfcnRjX2RlYWxsb2NhdGVfdGltZXJzKCk7CisJfQorCisJcmV0dXJuIHJjOworfQorYXJjaF9pbml0Y2FsbCh1dl9ydGNfc2V0dXBfY2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCmluZGV4IDE5MWE4NzYuLjMxZmZjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKQEAgLTU3OCw3ICs1NzgsNyBAQAogc3RhdGljIGlycXJldHVybl90IHBpaXg0X21hc3Rlcl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlpbnQgcmVhbGlycTsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggMmNjNGE5MC4uOTVkZWI5ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKQEAgLTM5NSwxMSArMzk1LDYgQEAKIAl2bWlfb3BzLnVwZGF0ZV9wdGUocHRlcCwgVk1JX1BBR0VfUFQpOwogfQogCi1zdGF0aWMgdm9pZCB2bWlfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jdm1pX29wcy5zZXRfcHRlKHB0ZSwgcHRlcCwgdm1pX2ZsYWdzX2FkZHJfZGVmZXIobW0sIGFkZHIsIFZNSV9QQUdFX1BULCAxKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZtaV9zZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpCiB7CiAJLyogVW0sIGV3dyAqLwpAQCAtNzUwLDcgKzc0NSw2IEBACiAJCXB2X21tdV9vcHMuc2V0X3BtZCA9IHZtaV9zZXRfcG1kOwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJCXB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMgPSB2bWlfc2V0X3B0ZV9hdG9taWM7Ci0JCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50ID0gdm1pX3NldF9wdGVfcHJlc2VudDsKIAkJcHZfbW11X29wcy5zZXRfcHVkID0gdm1pX3NldF9wdWQ7CiAJCXB2X21tdV9vcHMucHRlX2NsZWFyID0gdm1pX3B0ZV9jbGVhcjsKIAkJcHZfbW11X29wcy5wbWRfY2xlYXIgPSB2bWlfcG1kX2NsZWFyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtaWNsb2NrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYwppbmRleCAzM2E3ODhkLi5kMzAzMzY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYwpAQCAtMjAyLDcgKzIwMiw2IEBACiAJLm5hbWUgCQk9ICJ2bWktdGltZXIiLAogCS5oYW5kbGVyIAk9IHZtaV90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzIAkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCi0JLm1hc2sgCQk9IENQVV9NQVNLX0FMTCwKIH07CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2bWlfdGltZV9pbml0X2Nsb2NrZXZlbnQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzMyLmxkcy5TIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMKaW5kZXggMGQ4NjA5Ni4uNjJhZDUwMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMKQEAgLTE4OSwxNSArMTg5LDI0IEBACiAJKiguYnNzKQogCS4gPSBBTElHTig0KTsKIAlfX2Jzc19zdG9wID0gLjsKLSAgCV9lbmQgPSAuIDsKLQkvKiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwgY3JlYXRlcyB0aGUgZWFybHkgYm9vdCBwYWdlIHRhYmxlcyAqLworICB9CisKKyAgLmJyayA6IEFUKEFERFIoLmJyaykgLSBMT0FEX09GRlNFVCkgewogCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCXBnMCA9IC4gOworCV9fYnJrX2Jhc2UgPSAuIDsKKyAJLiArPSA2NCAqIDEwMjQgOwkvKiA2NGsgYWxpZ25tZW50IHNsb3Agc3BhY2UgKi8KKwkqKC5icmtfcmVzZXJ2YXRpb24pCS8qIGFyZWFzIGJyayB1c2VycyBoYXZlIHJlc2VydmVkICovCisJX19icmtfbGltaXQgPSAuIDsKKyAgfQorCisgIC5lbmQgOiBBVChBRERSKC5lbmQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfZW5kID0gLiA7CiAgIH0KIAogICAvKiBTZWN0aW9ucyB0byBiZSBkaXNjYXJkZWQgKi8KICAgL0RJU0NBUkQvIDogewogCSooLmV4aXRjYWxsLmV4aXQpCisJKiguZGlzY2FyZCkKIAl9CiAKICAgU1RBQlNfREVCVUcKQEAgLTIwNSw2ICsyMTQsMTIgQEAKICAgRFdBUkZfREVCVUcKIH0KIAorLyoKKyAqIEJ1aWxkLXRpbWUgY2hlY2sgb24gdGhlIGltYWdlIHNpemU6CisgKi8KK0FTU0VSVCgoX2VuZCAtIExPQURfT0ZGU0VUIDw9IEtFUk5FTF9JTUFHRV9TSVpFKSwKKwkia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIikKKwogI2lmZGVmIENPTkZJR19LRVhFQwogLyogTGluayB0aW1lIGNoZWNrcyAqLwogI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfNjQubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwppbmRleCBmYmZjZWQ2Li5jODc0MjUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUwpAQCAtMjksOCArMjksOCBAQAogewogICAuID0gX19TVEFSVF9LRVJORUw7CiAgIHBoeXNfc3RhcnR1cF82NCA9IHN0YXJ0dXBfNjQgLSBMT0FEX09GRlNFVDsKLSAgX3RleHQgPSAuOwkJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCiAgIC50ZXh0IDogIEFUKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KIAkvKiBGaXJzdCB0aGUgY29kZSB0aGF0IGhhcyB0byBiZSBmaXJzdCBmb3IgYm9vdHN0cmFwcGluZyAqLwogCSooLnRleHQuaGVhZCkKIAlfc3RleHQgPSAuOwpAQCAtNjEsMTMgKzYxLDEzIEBACiAgIC5kYXRhIDogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkgewogCURBVEFfREFUQQogCUNPTlNUUlVDVE9SUworCV9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCX0gOmRhdGEKIAotICBfZWRhdGEgPSAuOwkJCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOwogICAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkuID0gQUxJR04oQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUyk7CiAJKiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkKICAgfQogICAuID0gQUxJR04oQ09ORklHX1g4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMpOwpAQCAtMTI1LDI5ICsxMjUsMjkgQEAKICN1bmRlZiBWVklSVF9PRkZTRVQKICN1bmRlZiBWVklSVAogCi0gIC4gPSBBTElHTihUSFJFQURfU0laRSk7CS8qIGluaXRfdGFzayAqLwogICAuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihUSFJFQURfU0laRSk7CS8qIGluaXRfdGFzayAqLwogCSooLmRhdGEuaW5pdF90YXNrKQogICB9OmRhdGEuaW5pdAogCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICAuZGF0YS5wYWdlX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLnBhZ2VfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCSooLmRhdGEucGFnZV9hbGlnbmVkKQogICB9CiAKLSAgLyogbWlnaHQgZ2V0IGZyZWVkIGFmdGVyIGluaXQgKi8KLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9fc21wX2FsdF9iZWdpbiA9IC47Ci0gIF9fc21wX2xvY2tzID0gLjsKICAgLnNtcF9sb2NrcyA6IEFUKEFERFIoLnNtcF9sb2NrcykgLSBMT0FEX09GRlNFVCkgeworCS8qIG1pZ2h0IGdldCBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19zbXBfYWx0X2JlZ2luID0gLjsKKwlfX3NtcF9sb2NrcyA9IC47CiAJKiguc21wX2xvY2tzKQorCV9fc21wX2xvY2tzX2VuZCA9IC47CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19zbXBfYWx0X2VuZCA9IC47CiAgIH0KLSAgX19zbXBfbG9ja3NfZW5kID0gLjsKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9fc21wX2FsdF9lbmQgPSAuOwogCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCi0gIF9faW5pdF9iZWdpbiA9IC47CisgIF9faW5pdF9iZWdpbiA9IC47CS8qIHBhaXJlZCB3aXRoIF9faW5pdF9lbmQgKi8KICAgLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewogCV9zaW5pdHRleHQgPSAuOwogCUlOSVRfVEVYVApAQCAtMTU5LDQwICsxNTksNDIgQEAKIAlfX2luaXRkYXRhX2VuZCA9IC47CiAgICB9CiAKLSAgLiA9IEFMSUdOKDE2KTsKLSAgX19zZXR1cF9zdGFydCA9IC47Ci0gIC5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgeyAqKC5pbml0LnNldHVwKSB9Ci0gIF9fc2V0dXBfZW5kID0gLjsKLSAgX19pbml0Y2FsbF9zdGFydCA9IC47CisgIC5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTigxNik7CisJX19zZXR1cF9zdGFydCA9IC47CisJKiguaW5pdC5zZXR1cCkKKwlfX3NldHVwX2VuZCA9IC47CisgIH0KICAgLmluaXRjYWxsLmluaXQgOiBBVChBRERSKC5pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7CisJX19pbml0Y2FsbF9zdGFydCA9IC47CiAJSU5JVENBTExTCisJX19pbml0Y2FsbF9lbmQgPSAuOwogICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLSAgX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwogICAuY29uX2luaXRjYWxsLmluaXQgOiBBVChBRERSKC5jb25faW5pdGNhbGwuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAkqKC5jb25faW5pdGNhbGwuaW5pdCkKKwlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwogICB9Ci0gIF9fY29uX2luaXRjYWxsX2VuZCA9IC47Ci0gIF9feDg2X2NwdV9kZXZfc3RhcnQgPSAuOwogICAueDg2X2NwdV9kZXYuaW5pdCA6IEFUKEFERFIoLng4Nl9jcHVfZGV2LmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfX3g4Nl9jcHVfZGV2X3N0YXJ0ID0gLjsKIAkqKC54ODZfY3B1X2Rldi5pbml0KQorCV9feDg2X2NwdV9kZXZfZW5kID0gLjsKICAgfQotICBfX3g4Nl9jcHVfZGV2X2VuZCA9IC47CiAgIFNFQ1VSSVRZX0lOSVQKIAogICAuID0gQUxJR04oOCk7CiAgIC5wYXJhaW5zdHJ1Y3Rpb25zIDogQVQoQUREUigucGFyYWluc3RydWN0aW9ucykgLSBMT0FEX09GRlNFVCkgewotICBfX3BhcmFpbnN0cnVjdGlvbnMgPSAuOworCV9fcGFyYWluc3RydWN0aW9ucyA9IC47CiAgICAgICAgKigucGFyYWluc3RydWN0aW9ucykKLSAgX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CisJX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CiAgIH0KIAotICAuID0gQUxJR04oOCk7Ci0gIF9fYWx0X2luc3RydWN0aW9ucyA9IC47CiAgIC5hbHRpbnN0cnVjdGlvbnMgOiBBVChBRERSKC5hbHRpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oOCk7CisJX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKIAkqKC5hbHRpbnN0cnVjdGlvbnMpCisJX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CiAgIH0KLSAgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZCA9IC47CiAgIC5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IEFUKEFERFIoLmFsdGluc3RyX3JlcGxhY2VtZW50KSAtIExPQURfT0ZGU0VUKSB7CiAJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCiAgIH0KQEAgLTIwNyw5ICsyMDksMTEgQEAKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwotICAuaW5pdC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOworICAuaW5pdC5yYW1mcyA6IEFUKEFERFIoLmluaXQucmFtZnMpIC0gTE9BRF9PRkZTRVQpIHsKKwlfX2luaXRyYW1mc19zdGFydCA9IC47CisJKiguaW5pdC5yYW1mcykKKwlfX2luaXRyYW1mc19lbmQgPSAuOworICB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTIyOSwyMCArMjMzLDI5IEBACiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogICBfX2luaXRfZW5kID0gLjsKIAotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19ub3NhdmVfYmVnaW4gPSAuOwogICAuZGF0YV9ub3NhdmUgOiBBVChBRERSKC5kYXRhX25vc2F2ZSkgLSBMT0FEX09GRlNFVCkgewotICAgICAgKiguZGF0YS5ub3NhdmUpCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19ub3NhdmVfYmVnaW4gPSAuOworCSooLmRhdGEubm9zYXZlKQorCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fbm9zYXZlX2VuZCA9IC47CiAgIH0gOmRhdGEuaW5pdDIgLyogdXNlIGFub3RoZXIgc2VjdGlvbiBkYXRhLmluaXQyLCBzZWUgUEVSQ1BVX1ZBRERSKCkgYWJvdmUgKi8KLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0gIF9fbm9zYXZlX2VuZCA9IC47CiAKLSAgX19ic3Nfc3RhcnQgPSAuOwkJLyogQlNTICovCiAgIC5ic3MgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MgKi8KIAkqKC5ic3MucGFnZV9hbGlnbmVkKQogCSooLmJzcykKLQl9Ci0gIF9fYnNzX3N0b3AgPSAuOworCV9fYnNzX3N0b3AgPSAuOworICB9CisKKyAgLmJyayA6IEFUKEFERFIoLmJyaykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fYnJrX2Jhc2UgPSAuIDsKKyAJLiArPSA2NCAqIDEwMjQgOwkvKiA2NGsgYWxpZ25tZW50IHNsb3Agc3BhY2UgKi8KKwkqKC5icmtfcmVzZXJ2YXRpb24pCS8qIGFyZWFzIGJyayB1c2VycyBoYXZlIHJlc2VydmVkICovCisJX19icmtfbGltaXQgPSAuIDsKKyAgfQogCiAgIF9lbmQgPSAuIDsKIApAQCAtMjUwLDYgKzI2Myw3IEBACiAgIC9ESVNDQVJELyA6IHsKIAkqKC5leGl0Y2FsbC5leGl0KQogCSooLmVoX2ZyYW1lKQorCSooLmRpc2NhcmQpCiAJfQogCiAgIFNUQUJTX0RFQlVHCkBAIC0yNzUsMyArMjg5LDEwIEBACiBBU1NFUlQoKHBlcl9jcHVfX2lycV9zdGFja191bmlvbiA9PSAwKSwKICAgICAgICAgImlycV9zdGFja191bmlvbiBpcyBub3QgYXQgc3RhcnQgb2YgcGVyLWNwdSBhcmVhIik7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19LRVhFQworI2luY2x1ZGUgPGFzbS9rZXhlYy5oPgorCitBU1NFUlQoa2V4ZWNfY29udHJvbF9jb2RlX3NpemUgPD0gS0VYRUNfQ09OVFJPTF9DT0RFX01BWF9TSVpFLAorICAgICAgICJrZXhlYyBjb250cm9sIGNvZGUgc2l6ZSBpcyB0b28gYmlnIikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKaW5kZXggNzRkZTU2Mi4uYTFkODA0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKLSNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKyNpZiBkZWZpbmVkIENPTkZJR19QQ0kgJiYgZGVmaW5lZCBDT05GSUdfUEFSQVZJUlQKIC8qCiAgKiBJbnRlcnJ1cHQgY29udHJvbCBvbiB2U01Qb3dlcmVkIHN5c3RlbXM6CiAgKiB+QUMgaXMgYSBzaGFkb3cgb2YgSUYuICBJZiBJRiBpcyAnb24nIEFDIHNob3VsZCBiZSAnb2ZmJwpAQCAtMTE0LDYgKzExNCw3IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgaXNfdnNtcCA9IC0xOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZGV0ZWN0X3ZzbXBfYm94KHZvaWQpCkBAIC0xMzksNiArMTQwLDE1IEBACiAJfQogfQogCisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGRldGVjdF92c21wX2JveCh2b2lkKQoreworfQoraW50IGlzX3ZzbXBfYm94KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIHZvaWQgX19pbml0IHZzbXBfaW5pdCh2b2lkKQogewogCWRldGVjdF92c21wX2JveCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggOWZlNGRkYS4uZTk0YTExZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJaWYgKGxndWVzdF9kYXRhLmhjYWxsX3N0YXR1c1tuZXh0X2NhbGxdICE9IDB4RkYpIHsKIAkJLyogVGFibGUgZnVsbCwgc28gZG8gbm9ybWFsIGhjYWxsIHdoaWNoIHdpbGwgZmx1c2ggdGFibGUuICovCi0JCWhjYWxsKGNhbGwsIGFyZzEsIGFyZzIsIGFyZzMpOworCQlrdm1faHlwZXJjYWxsMyhjYWxsLCBhcmcxLCBhcmcyLCBhcmczKTsKIAl9IGVsc2UgewogCQlsZ3Vlc3RfZGF0YS5oY2FsbHNbbmV4dF9jYWxsXS5hcmcwID0gY2FsbDsKIAkJbGd1ZXN0X2RhdGEuaGNhbGxzW25leHRfY2FsbF0uYXJnMSA9IGFyZzE7CkBAIC0xMzQsMTMgKzEzNCwzMiBAQAogICoKICAqIFNvLCB3aGVuIHdlJ3JlIGluIGxhenkgbW9kZSwgd2UgY2FsbCBhc3luY19oY2FsbCgpIHRvIHN0b3JlIHRoZSBjYWxsIGZvcgogICogZnV0dXJlIHByb2Nlc3Npbmc6ICovCi1zdGF0aWMgdm9pZCBsYXp5X2hjYWxsKHVuc2lnbmVkIGxvbmcgY2FsbCwKK3N0YXRpYyB2b2lkIGxhenlfaGNhbGwxKHVuc2lnbmVkIGxvbmcgY2FsbCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSkKK3sKKwlpZiAocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpID09IFBBUkFWSVJUX0xBWllfTk9ORSkKKwkJa3ZtX2h5cGVyY2FsbDEoY2FsbCwgYXJnMSk7CisJZWxzZQorCQlhc3luY19oY2FsbChjYWxsLCBhcmcxLCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgbGF6eV9oY2FsbDIodW5zaWduZWQgbG9uZyBjYWxsLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcyKQoreworCWlmIChwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9OT05FKQorCQlrdm1faHlwZXJjYWxsMihjYWxsLCBhcmcxLCBhcmcyKTsKKwllbHNlCisJCWFzeW5jX2hjYWxsKGNhbGwsIGFyZzEsIGFyZzIsIDApOworfQorCitzdGF0aWMgdm9pZCBsYXp5X2hjYWxsMyh1bnNpZ25lZCBsb25nIGNhbGwsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzIsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZzMpCiB7CiAJaWYgKHBhcmF2aXJ0X2dldF9sYXp5X21vZGUoKSA9PSBQQVJBVklSVF9MQVpZX05PTkUpCi0JCWhjYWxsKGNhbGwsIGFyZzEsIGFyZzIsIGFyZzMpOworCQlrdm1faHlwZXJjYWxsMyhjYWxsLCBhcmcxLCBhcmcyLCBhcmczKTsKIAllbHNlCiAJCWFzeW5jX2hjYWxsKGNhbGwsIGFyZzEsIGFyZzIsIGFyZzMpOwogfQpAQCAtMTUwLDcgKzE2OSw3IEBACiBzdGF0aWMgdm9pZCBsZ3Vlc3RfbGVhdmVfbGF6eV9tb2RlKHZvaWQpCiB7CiAJcGFyYXZpcnRfbGVhdmVfbGF6eShwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkpOwotCWhjYWxsKExIQ0FMTF9GTFVTSF9BU1lOQywgMCwgMCwgMCk7CisJa3ZtX2h5cGVyY2FsbDAoTEhDQUxMX0ZMVVNIX0FTWU5DKTsKIH0KIAogLypHOjAzMwpAQCAtMjI5LDcgKzI0OCw3IEBACiAJLyogS2VlcCB0aGUgbG9jYWwgY29weSB1cCB0byBkYXRlLiAqLwogCW5hdGl2ZV93cml0ZV9pZHRfZW50cnkoZHQsIGVudHJ5bnVtLCBnKTsKIAkvKiBUZWxsIEhvc3QgYWJvdXQgdGhpcyBuZXcgZW50cnkuICovCi0JaGNhbGwoTEhDQUxMX0xPQURfSURUX0VOVFJZLCBlbnRyeW51bSwgZGVzY1swXSwgZGVzY1sxXSk7CisJa3ZtX2h5cGVyY2FsbDMoTEhDQUxMX0xPQURfSURUX0VOVFJZLCBlbnRyeW51bSwgZGVzY1swXSwgZGVzY1sxXSk7CiB9CiAKIC8qIENoYW5naW5nIHRvIGEgZGlmZmVyZW50IElEVCBpcyB2ZXJ5IHJhcmU6IHdlIGtlZXAgdGhlIElEVCB1cC10by1kYXRlIGV2ZXJ5CkBAIC0yNDEsNyArMjYwLDcgQEAKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmlkdCA9ICh2b2lkICopZGVzYy0+YWRkcmVzczsKIAogCWZvciAoaSA9IDA7IGkgPCAoZGVzYy0+c2l6ZSsxKS84OyBpKyspCi0JCWhjYWxsKExIQ0FMTF9MT0FEX0lEVF9FTlRSWSwgaSwgaWR0W2ldLmEsIGlkdFtpXS5iKTsKKwkJa3ZtX2h5cGVyY2FsbDMoTEhDQUxMX0xPQURfSURUX0VOVFJZLCBpLCBpZHRbaV0uYSwgaWR0W2ldLmIpOwogfQogCiAvKgpAQCAtMjYxLDggKzI4MCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9sb2FkX2dkdChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKmRlc2MpCiB7Ci0JQlVHX09OKChkZXNjLT5zaXplKzEpLzggIT0gR0RUX0VOVFJJRVMpOwotCWhjYWxsKExIQ0FMTF9MT0FEX0dEVCwgX19wYShkZXNjLT5hZGRyZXNzKSwgR0RUX0VOVFJJRVMsIDApOworCUJVR19PTigoZGVzYy0+c2l6ZSArIDEpIC8gOCAhPSBHRFRfRU5UUklFUyk7CisJa3ZtX2h5cGVyY2FsbDIoTEhDQUxMX0xPQURfR0RULCBfX3BhKGRlc2MtPmFkZHJlc3MpLCBHRFRfRU5UUklFUyk7CiB9CiAKIC8qIEZvciBhIHNpbmdsZSBHRFQgZW50cnkgd2hpY2ggY2hhbmdlcywgd2UgZG8gdGhlIGxhenkgdGhpbmc6IGFsdGVyIG91ciBHRFQsCkBAIC0yNzIsNyArMjkxLDcgQEAKIAkJCQkgICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKIHsKIAluYXRpdmVfd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeW51bSwgZGVzYywgdHlwZSk7Ci0JaGNhbGwoTEhDQUxMX0xPQURfR0RULCBfX3BhKGR0KSwgR0RUX0VOVFJJRVMsIDApOworCWt2bV9oeXBlcmNhbGwyKExIQ0FMTF9MT0FEX0dEVCwgX19wYShkdCksIEdEVF9FTlRSSUVTKTsKIH0KIAogLyogT0ssIEkgbGllZC4gIFRoZXJlIGFyZSB0aHJlZSAidGhyZWFkIGxvY2FsIHN0b3JhZ2UiIEdEVCBlbnRyaWVzIHdoaWNoIGNoYW5nZQpAQCAtMjg0LDcgKzMwMyw3IEBACiAJICogY2FuJ3QgaGFuZGxlIHVzIHJlbW92aW5nIGVudHJpZXMgd2UncmUgY3VycmVudGx5IHVzaW5nLiAgU28gd2UgY2xlYXIKIAkgKiB0aGUgR1MgcmVnaXN0ZXIgaGVyZTogaWYgaXQncyBuZWVkZWQgaXQnbGwgYmUgcmVsb2FkZWQgYW55d2F5LiAqLwogCWxhenlfbG9hZF9ncygwKTsKLQlsYXp5X2hjYWxsKExIQ0FMTF9MT0FEX1RMUywgX19wYSgmdC0+dGxzX2FycmF5KSwgY3B1LCAwKTsKKwlsYXp5X2hjYWxsMihMSENBTExfTE9BRF9UTFMsIF9fcGEoJnQtPnRsc19hcnJheSksIGNwdSk7CiB9CiAKIC8qRzowMzggVGhhdCdzIGVub3VnaCBleGNpdGVtZW50IGZvciBub3csIGJhY2sgdG8gcGxvdWdoaW5nIHRocm91Z2ggZWFjaCBvZgpAQCAtMzgyLDcgKzQwMSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJyZW50X2NyMDsKIHN0YXRpYyB2b2lkIGxndWVzdF93cml0ZV9jcjAodW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JbGF6eV9oY2FsbChMSENBTExfVFMsIHZhbCAmIFg4Nl9DUjBfVFMsIDAsIDApOworCWxhenlfaGNhbGwxKExIQ0FMTF9UUywgdmFsICYgWDg2X0NSMF9UUyk7CiAJY3VycmVudF9jcjAgPSB2YWw7CiB9CiAKQEAgLTM5Niw3ICs0MTUsNyBAQAogICogdGhlIHZvd2VscyBoYXZlIGJlZW4gb3B0aW1pemVkIG91dC4gKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9jbHRzKHZvaWQpCiB7Ci0JbGF6eV9oY2FsbChMSENBTExfVFMsIDAsIDAsIDApOworCWxhenlfaGNhbGwxKExIQ0FMTF9UUywgMCk7CiAJY3VycmVudF9jcjAgJj0gflg4Nl9DUjBfVFM7CiB9CiAKQEAgLTQxOCw3ICs0MzcsNyBAQAogc3RhdGljIHZvaWQgbGd1ZXN0X3dyaXRlX2NyMyh1bnNpZ25lZCBsb25nIGNyMykKIHsKIAlsZ3Vlc3RfZGF0YS5wZ2RpciA9IGNyMzsKLQlsYXp5X2hjYWxsKExIQ0FMTF9ORVdfUEdUQUJMRSwgY3IzLCAwLCAwKTsKKwlsYXp5X2hjYWxsMShMSENBTExfTkVXX1BHVEFCTEUsIGNyMyk7CiAJY3IzX2NoYW5nZWQgPSB0cnVlOwogfQogCkBAIC00OTAsMTEgKzUwOSwxNyBAQAogICogaW50byBhIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuICBXZSBzZXQgdGhlIGVudHJ5IHRoZW4gdGVsbCB0aGUgSG9zdCB0aGUKICAqIHRvcGxldmVsIGFuZCBhZGRyZXNzIHRoaXMgY29ycmVzcG9uZHMgdG8uICBUaGUgR3Vlc3QgdXNlcyBvbmUgcGFnZXRhYmxlIHBlcgogICogcHJvY2Vzcywgc28gd2UgbmVlZCB0byB0ZWxsIHRoZSBIb3N0IHdoaWNoIG9uZSB3ZSdyZSBjaGFuZ2luZyAobW0tPnBnZCkuICovCitzdGF0aWMgdm9pZCBsZ3Vlc3RfcHRlX3VwZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgIHB0ZV90ICpwdGVwKQoreworCWxhenlfaGNhbGwzKExIQ0FMTF9TRVRfUFRFLCBfX3BhKG1tLT5wZ2QpLCBhZGRyLCBwdGVwLT5wdGVfbG93KTsKK30KKwogc3RhdGljIHZvaWQgbGd1ZXN0X3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCiB7CiAJKnB0ZXAgPSBwdGV2YWw7Ci0JbGF6eV9oY2FsbChMSENBTExfU0VUX1BURSwgX19wYShtbS0+cGdkKSwgYWRkciwgcHRldmFsLnB0ZV9sb3cpOworCWxndWVzdF9wdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKTsKIH0KIAogLyogVGhlIEd1ZXN0IGNhbGxzIHRoaXMgdG8gc2V0IGEgdG9wLWxldmVsIGVudHJ5LiAgQWdhaW4sIHdlIHNldCB0aGUgZW50cnkgdGhlbgpAQCAtNTAzLDggKzUyOCw4IEBACiBzdGF0aWMgdm9pZCBsZ3Vlc3Rfc2V0X3BtZChwbWRfdCAqcG1kcCwgcG1kX3QgcG1kdmFsKQogewogCSpwbWRwID0gcG1kdmFsOwotCWxhenlfaGNhbGwoTEhDQUxMX1NFVF9QTUQsIF9fcGEocG1kcCkmUEFHRV9NQVNLLAotCQkgICAoX19wYShwbWRwKSYoUEFHRV9TSVpFLTEpKS80LCAwKTsKKwlsYXp5X2hjYWxsMihMSENBTExfU0VUX1BNRCwgX19wYShwbWRwKSAmIFBBR0VfTUFTSywKKwkJICAgKF9fcGEocG1kcCkgJiAoUEFHRV9TSVpFIC0gMSkpIC8gNCk7CiB9CiAKIC8qIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBsZWdhY3kgcGxhY2VzIHdoZXJlIHRoZSBrZXJuZWwgc2V0cyBhIFBURSwgYnV0IHdlCkBAIC01MjAsNyArNTQ1LDcgQEAKIHsKIAkqcHRlcCA9IHB0ZXZhbDsKIAlpZiAoY3IzX2NoYW5nZWQpCi0JCWxhenlfaGNhbGwoTEhDQUxMX0ZMVVNIX1RMQiwgMSwgMCwgMCk7CisJCWxhenlfaGNhbGwxKExIQ0FMTF9GTFVTSF9UTEIsIDEpOwogfQogCiAvKiBVbmZvcnR1bmF0ZWx5IGZvciBMZ3Vlc3QsIHRoZSBwdl9tbXVfb3BzIGZvciBwYWdlIHRhYmxlcyB3ZXJlIGJhc2VkIG9uCkBAIC01MzYsNyArNTYxLDcgQEAKIHN0YXRpYyB2b2lkIGxndWVzdF9mbHVzaF90bGJfc2luZ2xlKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAkvKiBTaW1wbHkgc2V0IGl0IHRvIHplcm86IGlmIGl0IHdhcyBub3QsIGl0IHdpbGwgZmF1bHQgYmFjayBpbi4gKi8KLQlsYXp5X2hjYWxsKExIQ0FMTF9TRVRfUFRFLCBsZ3Vlc3RfZGF0YS5wZ2RpciwgYWRkciwgMCk7CisJbGF6eV9oY2FsbDMoTEhDQUxMX1NFVF9QVEUsIGxndWVzdF9kYXRhLnBnZGlyLCBhZGRyLCAwKTsKIH0KIAogLyogVGhpcyBpcyB3aGF0IGhhcHBlbnMgYWZ0ZXIgdGhlIEd1ZXN0IGhhcyByZW1vdmVkIGEgbGFyZ2UgbnVtYmVyIG9mIGVudHJpZXMuCkBAIC01NDQsNyArNTY5LDcgQEAKICAqIGhhdmUgY2hhbmdlZCwgaWUuIHZpcnR1YWwgYWRkcmVzc2VzIGJlbG93IFBBR0VfT0ZGU0VULiAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X2ZsdXNoX3RsYl91c2VyKHZvaWQpCiB7Ci0JbGF6eV9oY2FsbChMSENBTExfRkxVU0hfVExCLCAwLCAwLCAwKTsKKwlsYXp5X2hjYWxsMShMSENBTExfRkxVU0hfVExCLCAwKTsKIH0KIAogLyogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUga2VybmVsIHBhZ2UgdGFibGVzIGhhdmUgY2hhbmdlZC4gIFRoYXQncyBub3QgdmVyeQpAQCAtNTUyLDcgKzU3Nyw3IEBACiAgKiBzbG93KSwgc28gaXQncyB3b3J0aCBzZXBhcmF0aW5nIHRoaXMgZnJvbSB0aGUgdXNlciBmbHVzaGluZyBhYm92ZS4gKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9mbHVzaF90bGJfa2VybmVsKHZvaWQpCiB7Ci0JbGF6eV9oY2FsbChMSENBTExfRkxVU0hfVExCLCAxLCAwLCAwKTsKKwlsYXp5X2hjYWxsMShMSENBTExfRkxVU0hfVExCLCAxKTsKIH0KIAogLyoKQEAgLTY4OSw3ICs3MTQsNyBAQAogCX0KIAogCS8qIFBsZWFzZSB3YWtlIHVzIHRoaXMgZmFyIGluIHRoZSBmdXR1cmUuICovCi0JaGNhbGwoTEhDQUxMX1NFVF9DTE9DS0VWRU5ULCBkZWx0YSwgMCwgMCk7CisJa3ZtX2h5cGVyY2FsbDEoTEhDQUxMX1NFVF9DTE9DS0VWRU5ULCBkZWx0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwMCw3ICs3MjUsNyBAQAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CiAJCS8qIEEgMCBhcmd1bWVudCBzaHV0cyB0aGUgY2xvY2sgZG93bi4gKi8KLQkJaGNhbGwoTEhDQUxMX1NFVF9DTE9DS0VWRU5ULCAwLCAwLCAwKTsKKwkJa3ZtX2h5cGVyY2FsbDAoTEhDQUxMX1NFVF9DTE9DS0VWRU5UKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCQkvKiBUaGlzIGlzIHdoYXQgd2UgZXhwZWN0LiAqLwpAQCAtNzc1LDggKzgwMCw4IEBACiBzdGF0aWMgdm9pZCBsZ3Vlc3RfbG9hZF9zcDAoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywKIAkJCSAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQogewotCWxhenlfaGNhbGwoTEhDQUxMX1NFVF9TVEFDSywgX19LRVJORUxfRFN8MHgxLCB0aHJlYWQtPnNwMCwKLQkJICAgVEhSRUFEX1NJWkUvUEFHRV9TSVpFKTsKKwlsYXp5X2hjYWxsMyhMSENBTExfU0VUX1NUQUNLLCBfX0tFUk5FTF9EUyB8IDB4MSwgdGhyZWFkLT5zcDAsCisJCSAgIFRIUkVBRF9TSVpFIC8gUEFHRV9TSVpFKTsKIH0KIAogLyogTGV0J3MganVzdCBzYXksIEkgd291bGRuJ3QgZG8gZGVidWdnaW5nIHVuZGVyIGEgR3Vlc3QuICovCkBAIC04NDksNyArODc0LDcgQEAKIC8qIFNUT1AhICBVbnRpbCBhbiBpbnRlcnJ1cHQgY29tZXMgaW4uICovCiBzdGF0aWMgdm9pZCBsZ3Vlc3Rfc2FmZV9oYWx0KHZvaWQpCiB7Ci0JaGNhbGwoTEhDQUxMX0hBTFQsIDAsIDAsIDApOworCWt2bV9oeXBlcmNhbGwwKExIQ0FMTF9IQUxUKTsKIH0KIAogLyogVGhlIFNIVVRET1dOIGh5cGVyY2FsbCB0YWtlcyBhIHN0cmluZyB0byBkZXNjcmliZSB3aGF0J3MgaGFwcGVuaW5nLCBhbmQKQEAgLTg1OSw3ICs4ODQsOCBAQAogICogcmF0aGVyIHRoYW4gdmlydHVhbCBhZGRyZXNzZXMsIHNvIHdlIHVzZSBfX3BhKCkgaGVyZS4gKi8KIHN0YXRpYyB2b2lkIGxndWVzdF9wb3dlcl9vZmYodm9pZCkKIHsKLQloY2FsbChMSENBTExfU0hVVERPV04sIF9fcGEoIlBvd2VyIGRvd24iKSwgTEdVRVNUX1NIVVRET1dOX1BPV0VST0ZGLCAwKTsKKwlrdm1faHlwZXJjYWxsMihMSENBTExfU0hVVERPV04sIF9fcGEoIlBvd2VyIGRvd24iKSwKKwkJCQkJTEdVRVNUX1NIVVRET1dOX1BPV0VST0ZGKTsKIH0KIAogLyoKQEAgLTg2OSw3ICs4OTUsNyBAQAogICovCiBzdGF0aWMgaW50IGxndWVzdF9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGwsIHZvaWQgKnApCiB7Ci0JaGNhbGwoTEhDQUxMX1NIVVRET1dOLCBfX3BhKHApLCBMR1VFU1RfU0hVVERPV05fUE9XRVJPRkYsIDApOworCWt2bV9oeXBlcmNhbGwyKExIQ0FMTF9TSFVURE9XTiwgX19wYShwKSwgTEdVRVNUX1NIVVRET1dOX1BPV0VST0ZGKTsKIAkvKiBUaGUgaGNhbGwgd29uJ3QgcmV0dXJuLCBidXQgdG8ga2VlcCBnY2MgaGFwcHksIHdlJ3JlICJkb25lIi4gKi8KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CkBAIC05MTAsNyArOTM2LDcgQEAKIAkJbGVuID0gc2l6ZW9mKHNjcmF0Y2gpIC0gMTsKIAlzY3JhdGNoW2xlbl0gPSAnXDAnOwogCW1lbWNweShzY3JhdGNoLCBidWYsIGxlbik7Ci0JaGNhbGwoTEhDQUxMX05PVElGWSwgX19wYShzY3JhdGNoKSwgMCwgMCk7CisJa3ZtX2h5cGVyY2FsbDEoTEhDQUxMX05PVElGWSwgX19wYShzY3JhdGNoKSk7CiAKIAkvKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4uICovCiAJcmV0dXJuIGxlbjsKQEAgLTkyMCw3ICs5NDYsNyBAQAogICogTGF1bmNoZXIgdG8gcmVib290IHVzLiAqLwogc3RhdGljIHZvaWQgbGd1ZXN0X3Jlc3RhcnQoY2hhciAqcmVhc29uKQogewotCWhjYWxsKExIQ0FMTF9TSFVURE9XTiwgX19wYShyZWFzb24pLCBMR1VFU1RfU0hVVERPV05fUkVTVEFSVCwgMCk7CisJa3ZtX2h5cGVyY2FsbDIoTEhDQUxMX1NIVVRET1dOLCBfX3BhKHJlYXNvbiksIExHVUVTVF9TSFVURE9XTl9SRVNUQVJUKTsKIH0KIAogLypHOjA1MApAQCAtMTA0MCw2ICsxMDY2LDggQEAKIAlwdl9tbXVfb3BzLnJlYWRfY3IzID0gbGd1ZXN0X3JlYWRfY3IzOwogCXB2X21tdV9vcHMubGF6eV9tb2RlLmVudGVyID0gcGFyYXZpcnRfZW50ZXJfbGF6eV9tbXU7CiAJcHZfbW11X29wcy5sYXp5X21vZGUubGVhdmUgPSBsZ3Vlc3RfbGVhdmVfbGF6eV9tb2RlOworCXB2X21tdV9vcHMucHRlX3VwZGF0ZSA9IGxndWVzdF9wdGVfdXBkYXRlOworCXB2X21tdV9vcHMucHRlX3VwZGF0ZV9kZWZlciA9IGxndWVzdF9wdGVfdXBkYXRlOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJLyogYXBpYyByZWFkL3dyaXRlIGludGVyY2VwdHMgKi8KQEAgLTEwNTgsMTQgKzEwODYsNiBAQAogCSAqIGxndWVzdF9pbml0KCkgd2hlcmUgdGhlIHJlc3Qgb2YgdGhlIGZhaXJseSBjaGFvdGljIGJvb3Qgc2V0dXAKIAkgKiBvY2N1cnMuICovCiAKLQkvKiBUaGUgbmF0aXZlIGJvb3QgY29kZSBzZXRzIHVwIGluaXRpYWwgcGFnZSB0YWJsZXMgaW1tZWRpYXRlbHkgYWZ0ZXIKLQkgKiB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHNldHMgaW5pdF9wZ190YWJsZXNfZW5kIHNvIHRoZXkncmUgbm90Ci0JICogY2xvYmJlcmVkLiAgVGhlIExhdW5jaGVyIHBsYWNlcyBvdXIgaW5pdGlhbCBwYWdldGFibGVzIHNvbWV3aGVyZSBhdAotCSAqIHRoZSB0b3Agb2Ygb3VyIHBoeXNpY2FsIG1lbW9yeSwgc28gd2UgZG9uJ3QgbmVlZCBleHRyYSBzcGFjZTogc2V0Ci0JICogaW5pdF9wZ190YWJsZXNfZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGtlcm5lbC4gKi8KLQlpbml0X3BnX3RhYmxlc19zdGFydCA9IF9fcGEocGcwKTsKLQlpbml0X3BnX3RhYmxlc19lbmQgPSBfX3BhKHBnMCk7Ci0KIAkvKiBBcyBkZXNjcmliZWQgaW4gaGVhZF8zMi5TLCB3ZSBtYXAgdGhlIGZpcnN0IDEyOE0gb2YgbWVtb3J5LiAqLwogCW1heF9wZm5fbWFwcGVkID0gKDEyOCoxMDI0KjEwMjQpID4+IFBBR0VfU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUyBiL2FyY2gveDg2L2xndWVzdC9pMzg2X2hlYWQuUwppbmRleCAxMGI5YmQzLi5mNzk1NDE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvaTM4Nl9oZWFkLlMKKysrIGIvYXJjaC94ODYvbGd1ZXN0L2kzODZfaGVhZC5TCkBAIC0yNyw4ICsyNyw4IEBACiAJLyogV2UgbWFrZSB0aGUgImluaXRpYWxpemF0aW9uIiBoeXBlcmNhbGwgbm93IHRvIHRlbGwgdGhlIEhvc3QgYWJvdXQKIAkgKiB1cywgYW5kIGFsc28gZmluZCBvdXQgd2hlcmUgaXQgcHV0IG91ciBwYWdlIHRhYmxlcy4gKi8KIAltb3ZsICRMSENBTExfTEdVRVNUX0lOSVQsICVlYXgKLQltb3ZsICRsZ3Vlc3RfZGF0YSAtIF9fUEFHRV9PRkZTRVQsICVlZHgKLQlpbnQgJExHVUVTVF9UUkFQX0VOVFJZCisJbW92bCAkbGd1ZXN0X2RhdGEgLSBfX1BBR0VfT0ZGU0VULCAlZWJ4CisJLmJ5dGUgMHgwZiwweDAxLDB4YzEgLyogS1ZNX0hZUEVSQ0FMTCAqLwogCiAJLyogU2V0IHVwIHRoZSBpbml0aWFsIHN0YWNrIHNvIHdlIGNhbiBydW4gQyBjb2RlLiAqLwogCW1vdmwgJChpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRSksJWVzcApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCmluZGV4IGMyMjk4MWYuLmFkNTQ0MWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKQEAgLTEsMzAgKzEsMzggQEAKIC8qIENvcHlyaWdodCAyMDAyIEFuZGkgS2xlZW4gKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KIAogLyoKICAqIG1lbWNweSAtIENvcHkgYSBtZW1vcnkgYmxvY2suCiAgKgotICogSW5wdXQ6CQotICogcmRpIGRlc3RpbmF0aW9uCi0gKiByc2kgc291cmNlCi0gKiByZHggY291bnQKLSAqIAorICogSW5wdXQ6CisgKiAgcmRpIGRlc3RpbmF0aW9uCisgKiAgcnNpIHNvdXJjZQorICogIHJkeCBjb3VudAorICoKICAqIE91dHB1dDoKICAqIHJheCBvcmlnaW5hbCBkZXN0aW5hdGlvbgotICovCQorICovCiAKKy8qCisgKiBtZW1jcHlfYygpIC0gZmFzdCBzdHJpbmcgb3BzIChSRVAgTU9WU1EpIGJhc2VkIHZhcmlhbnQuCisgKgorICogQ2FsbHMgdG8gdGhpcyBnZXQgcGF0Y2hlZCBpbnRvIHRoZSBrZXJuZWwgaW1hZ2UgdmlhIHRoZQorICogYWx0ZXJuYXRpdmUgaW5zdHJ1Y3Rpb25zIGZyYW1ld29yazoKKyAqLwogCUFMSUdOCiBtZW1jcHlfYzoKIAlDRklfU1RBUlRQUk9DCi0JbW92cSAlcmRpLCVyYXgKLQltb3ZsICVlZHgsJWVjeAotCXNocmwgJDMsJWVjeAotCWFuZGwgJDcsJWVkeAorCW1vdnEgJXJkaSwgJXJheAorCisJbW92bCAlZWR4LCAlZWN4CisJc2hybCAkMywgJWVjeAorCWFuZGwgJDcsICVlZHgKIAlyZXAgbW92c3EKLQltb3ZsICVlZHgsJWVjeAorCW1vdmwgJWVkeCwgJWVjeAogCXJlcCBtb3ZzYgogCXJldAogCUNGSV9FTkRQUk9DCkBAIC0zMyw5OSArNDEsMTEwIEBACiBFTlRSWShfX21lbWNweSkKIEVOVFJZKG1lbWNweSkKIAlDRklfU1RBUlRQUk9DCi0JcHVzaHEgJXJieAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCA4Ci0JQ0ZJX1JFTF9PRkZTRVQgcmJ4LCAwCi0JbW92cSAlcmRpLCVyYXgKIAotCW1vdmwgJWVkeCwlZWN4Ci0Jc2hybCAkNiwlZWN4CisJLyoKKwkgKiBQdXQgdGhlIG51bWJlciBvZiBmdWxsIDY0LWJ5dGUgYmxvY2tzIGludG8gJWVjeC4KKwkgKiBUYWlsIHBvcnRpb24gaXMgaGFuZGxlZCBhdCB0aGUgZW5kOgorCSAqLworCW1vdnEgJXJkaSwgJXJheAorCW1vdmwgJWVkeCwgJWVjeAorCXNocmwgICAkNiwgJWVjeAogCWp6IC5MaGFuZGxlX3RhaWwKIAogCS5wMmFsaWduIDQKIC5MbG9vcF82NDoKKwkvKgorCSAqIFdlIGRlY3JlbWVudCB0aGUgbG9vcCBpbmRleCBoZXJlIC0gYW5kIHRoZSB6ZXJvLWZsYWcgaXMKKwkgKiBjaGVja2VkIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgKGluc3RydWN0aW9ucyBpbmJldHdlZW4gZG8KKwkgKiBub3QgY2hhbmdlIHRoZSB6ZXJvIGZsYWcpOgorCSAqLwogCWRlY2wgJWVjeAogCi0JbW92cSAoJXJzaSksJXIxMQotCW1vdnEgOCglcnNpKSwlcjgKKwkvKgorCSAqIE1vdmUgaW4gYmxvY2tzIG9mIDR4MTYgYnl0ZXM6CisJICovCisJbW92cSAwKjgoJXJzaSksCQklcjExCisJbW92cSAxKjgoJXJzaSksCQklcjgKKwltb3ZxICVyMTEsCQkwKjgoJXJkaSkKKwltb3ZxICVyOCwJCTEqOCglcmRpKQogCi0JbW92cSAlcjExLCglcmRpKQotCW1vdnEgJXI4LDEqOCglcmRpKQorCW1vdnEgMio4KCVyc2kpLAkJJXI5CisJbW92cSAzKjgoJXJzaSksCQklcjEwCisJbW92cSAlcjksCQkyKjgoJXJkaSkKKwltb3ZxICVyMTAsCQkzKjgoJXJkaSkKIAotCW1vdnEgMio4KCVyc2kpLCVyOQotCW1vdnEgMyo4KCVyc2kpLCVyMTAKKwltb3ZxIDQqOCglcnNpKSwJCSVyMTEKKwltb3ZxIDUqOCglcnNpKSwJCSVyOAorCW1vdnEgJXIxMSwJCTQqOCglcmRpKQorCW1vdnEgJXI4LAkJNSo4KCVyZGkpCiAKLQltb3ZxICVyOSwyKjgoJXJkaSkKLQltb3ZxICVyMTAsMyo4KCVyZGkpCisJbW92cSA2KjgoJXJzaSksCQklcjkKKwltb3ZxIDcqOCglcnNpKSwJCSVyMTAKKwltb3ZxICVyOSwJCTYqOCglcmRpKQorCW1vdnEgJXIxMCwJCTcqOCglcmRpKQogCi0JbW92cSA0KjgoJXJzaSksJXIxMQotCW1vdnEgNSo4KCVyc2kpLCVyOAorCWxlYXEgNjQoJXJzaSksICVyc2kKKwlsZWFxIDY0KCVyZGkpLCAlcmRpCiAKLQltb3ZxICVyMTEsNCo4KCVyZGkpCi0JbW92cSAlcjgsNSo4KCVyZGkpCi0KLQltb3ZxIDYqOCglcnNpKSwlcjkKLQltb3ZxIDcqOCglcnNpKSwlcjEwCi0KLQltb3ZxICVyOSw2KjgoJXJkaSkKLQltb3ZxICVyMTAsNyo4KCVyZGkpCi0KLQlsZWFxIDY0KCVyc2kpLCVyc2kKLQlsZWFxIDY0KCVyZGkpLCVyZGkKIAlqbnogIC5MbG9vcF82NAogCiAuTGhhbmRsZV90YWlsOgotCW1vdmwgJWVkeCwlZWN4Ci0JYW5kbCAkNjMsJWVjeAotCXNocmwgJDMsJWVjeAorCW1vdmwgJWVkeCwgJWVjeAorCWFuZGwgICQ2MywgJWVjeAorCXNocmwgICAkMywgJWVjeAogCWp6ICAgLkxoYW5kbGVfNworCiAJLnAyYWxpZ24gNAogLkxsb29wXzg6CiAJZGVjbCAlZWN4Ci0JbW92cSAoJXJzaSksJXI4Ci0JbW92cSAlcjgsKCVyZGkpCi0JbGVhcSA4KCVyZGkpLCVyZGkKLQlsZWFxIDgoJXJzaSksJXJzaQorCW1vdnEgKCVyc2kpLAkJJXI4CisJbW92cSAlcjgsCQkoJXJkaSkKKwlsZWFxIDgoJXJkaSksCQklcmRpCisJbGVhcSA4KCVyc2kpLAkJJXJzaQogCWpueiAgLkxsb29wXzgKIAogLkxoYW5kbGVfNzoKLQltb3ZsICVlZHgsJWVjeAotCWFuZGwgJDcsJWVjeAotCWp6IC5MZW5kZQorCW1vdmwgJWVkeCwgJWVjeAorCWFuZGwgJDcsICVlY3gKKwlqeiAuTGVuZAorCiAJLnAyYWxpZ24gNAogLkxsb29wXzE6Ci0JbW92YiAoJXJzaSksJXI4YgotCW1vdmIgJXI4YiwoJXJkaSkKKwltb3ZiICglcnNpKSwgJXI4YgorCW1vdmIgJXI4YiwgKCVyZGkpCiAJaW5jcSAlcmRpCiAJaW5jcSAlcnNpCiAJZGVjbCAlZWN4CiAJam56IC5MbG9vcF8xCiAKLS5MZW5kZToKLQlwb3BxICVyYngKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTgKLQlDRklfUkVTVE9SRSByYngKKy5MZW5kOgogCXJldAotLkxmaW5hbDoKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhtZW1jcHkpCiBFTkRQUk9DKF9fbWVtY3B5KQogCi0JLyogU29tZSBDUFVzIHJ1biBmYXN0ZXIgdXNpbmcgdGhlIHN0cmluZyBjb3B5IGluc3RydWN0aW9ucy4KLQkgICBJdCBpcyBhbHNvIGEgbG90IHNpbXBsZXIuIFVzZSB0aGlzIHdoZW4gcG9zc2libGUgKi8KKwkvKgorCSAqIFNvbWUgQ1BVcyBydW4gZmFzdGVyIHVzaW5nIHRoZSBzdHJpbmcgY29weSBpbnN0cnVjdGlvbnMuCisJICogSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlOgorCSAqLwogCi0JLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCJheCIKKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIKIDE6CS5ieXRlIDB4ZWIJCQkJLyogam1wIDxkaXNwOD4gKi8KIAkuYnl0ZSAobWVtY3B5X2MgLSBtZW1jcHkpIC0gKDJmIC0gMWIpCS8qIG9mZnNldCAqLwogMjoKIAkucHJldmlvdXMKLQkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgorCisJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywgImEiCiAJLmFsaWduIDgKIAkucXVhZCBtZW1jcHkKIAkucXVhZCAxYgogCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECi0JLyogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLCBzbyBpdAotCSAqIGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIG9ubHkgb3V0Y29tZS4uLiAqLworCisJLyoKKwkgKiBSZXBsYWNlIG9ubHkgYmVnaW5uaW5nLCBtZW1jcHkgaXMgdXNlZCB0byBhcHBseSBhbHRlcm5hdGl2ZXMsCisJICogc28gaXQgaXMgc2lsbHkgdG8gb3ZlcndyaXRlIGl0c2VsZiB3aXRoIG5vcHMgLSByZWJvb3QgaXMgdGhlCisJICogb25seSBvdXRjb21lLi4uCisJICovCiAJLmJ5dGUgMmIgLSAxYgogCS5ieXRlIDJiIC0gMWIKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCAwMGYxMjdjLi44MTI2ZThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC0xOSw0OSArMTksNiBAQAogCWt1bm1hcF9oaWdoKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBkZWJ1Z19rbWFwX2F0b21pY19wcm90KGVudW0ga21fdHlwZSB0eXBlKQotewotI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCi0Jc3RhdGljIHVuc2lnbmVkIHdhcm5fY291bnQgPSAxMDsKLQotCWlmICh1bmxpa2VseSh3YXJuX2NvdW50ID09IDApKQotCQlyZXR1cm47Ci0KLQlpZiAodW5saWtlbHkoaW5faW50ZXJydXB0KCkpKSB7Ci0JCWlmIChpbl9pcnEoKSkgewotCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKLQkJCSAgICB0eXBlICE9IEtNX0JJT19TUkNfSVJRICYmIHR5cGUgIT0gS01fQklPX0RTVF9JUlEgJiYKLQkJCSAgICB0eXBlICE9IEtNX0JPVU5DRV9SRUFEKSB7Ci0JCQkJV0FSTl9PTigxKTsKLQkJCQl3YXJuX2NvdW50LS07Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIWlycXNfZGlzYWJsZWQoKSkgewkvKiBzb2Z0aXJxICovCi0JCQlpZiAodHlwZSAhPSBLTV9JUlEwICYmIHR5cGUgIT0gS01fSVJRMSAmJgotCQkJICAgIHR5cGUgIT0gS01fU09GVElSUTAgJiYgdHlwZSAhPSBLTV9TT0ZUSVJRMSAmJgotCQkJICAgIHR5cGUgIT0gS01fU0tCX1NVTlJQQ19EQVRBICYmCi0JCQkgICAgdHlwZSAhPSBLTV9TS0JfREFUQV9TT0ZUSVJRICYmCi0JCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgewotCQkJCVdBUk5fT04oMSk7Ci0JCQkJd2Fybl9jb3VudC0tOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHR5cGUgPT0gS01fSVJRMCB8fCB0eXBlID09IEtNX0lSUTEgfHwgdHlwZSA9PSBLTV9CT1VOQ0VfUkVBRCB8fAotCQkJdHlwZSA9PSBLTV9CSU9fU1JDX0lSUSB8fCB0eXBlID09IEtNX0JJT19EU1RfSVJRKSB7Ci0JCWlmICghaXJxc19kaXNhYmxlZCgpKSB7Ci0JCQlXQVJOX09OKDEpOwotCQkJd2Fybl9jb3VudC0tOwotCQl9Ci0JfSBlbHNlIGlmICh0eXBlID09IEtNX1NPRlRJUlEwIHx8IHR5cGUgPT0gS01fU09GVElSUTEpIHsKLQkJaWYgKGlycV9jb3VudCgpID09IDAgJiYgIWlycXNfZGlzYWJsZWQoKSkgewotCQkJV0FSTl9PTigxKTsKLQkJCXdhcm5fY291bnQtLTsKLQkJfQotCX0KLSNlbmRpZgotfQotCiAvKgogICoga21hcF9hdG9taWMva3VubWFwX2F0b21pYyBpcyBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIGttYXAva3VubWFwIGJlY2F1c2UKICAqIG5vIGdsb2JhbCBsb2NrIGlzIG5lZWRlZCBhbmQgYmVjYXVzZSB0aGUga21hcCBjb2RlIG11c3QgcGVyZm9ybSBhIGdsb2JhbCBUTEIKQEAgLTgxLDcgKzM4LDcgQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCi0JZGVidWdfa21hcF9hdG9taWNfcHJvdCh0eXBlKTsKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwpAQCAtMTIxLDIyICs3OCwxMyBAQAogCXBhZ2VmYXVsdF9lbmFibGUoKTsKIH0KIAotLyogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKKy8qCisgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIGttYXBfYXRvbWljKCkgYnV0IGNhbiBtYXAgbWVtb3J5IHRoYXQgZG9lc24ndAogICogaGF2ZSBhIHN0cnVjdCBwYWdlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAqLwogdm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKLQllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHg7Ci0JdW5zaWduZWQgbG9uZyB2YWRkcjsKLQotCXBhZ2VmYXVsdF9kaXNhYmxlKCk7Ci0KLQlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKLQlzZXRfcHRlKGttYXBfcHRlLWlkeCwgcGZuX3B0ZShwZm4sIGttYXBfcHJvdCkpOwotCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOwotCi0JcmV0dXJuICh2b2lkKikgdmFkZHI7CisJcmV0dXJuIGttYXBfYXRvbWljX3Byb3RfcGZuKHBmbiwgdHlwZSwga21hcF9wcm90KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGttYXBfYXRvbWljX3Bmbik7IC8qIHRlbXBvcmFyaWx5IGluIHVzZSBieSBpOTE1IEdFTSB1bnRpbCB2bWFwICovCiAKQEAgLTE1OCw3ICsxMDYsNiBAQAogRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CiBFWFBPUlRfU1lNQk9MKGt1bm1hcF9hdG9taWMpOwogCi0jaWZkZWYgQ09ORklHX05VTUEKIHZvaWQgX19pbml0IHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKQEAgLTE4MiwxMSArMTI5LDMgQEAKIAl9CiAJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwogfQotI2Vsc2UKLXZvaWQgX19pbml0IHNldF9oaWdobWVtX3BhZ2VzX2luaXQodm9pZCkKLXsKLQlhZGRfaGlnaHBhZ2VzX3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCwgaGlnaHN0YXJ0X3BmbiwgaGlnaGVuZF9wZm4pOwotCi0JdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOwotfQotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0LmMgYi9hcmNoL3g4Ni9tbS9pbml0LmMKaW5kZXggY2U2YTcyMi4uZmQzZGExZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2L21tL2luaXQuYwpAQCAtMSw4ICsxLDM0NSBAQAorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KKwogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKyNpbmNsdWRlIDxhc20vaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2VfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBlODIwX3RhYmxlX3N0YXJ0OwordW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIGU4MjBfdGFibGVfZW5kOwordW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIGU4MjBfdGFibGVfdG9wOworCitpbnQgYWZ0ZXJfYm9vdG1lbTsKKworaW50IGRpcmVjdF9nYnBhZ2VzCisjaWZkZWYgQ09ORklHX0RJUkVDVF9HQlBBR0VTCisJCQkJPSAxCisjZW5kaWYKKzsKKworc3RhdGljIHZvaWQgX19pbml0IGZpbmRfZWFybHlfdGFibGVfc3BhY2UodW5zaWduZWQgbG9uZyBlbmQsIGludCB1c2VfcHNlLAorCQkJCQkgIGludCB1c2VfZ2JwYWdlcykKK3sKKwl1bnNpZ25lZCBsb25nIHB1ZHMsIHBtZHMsIHB0ZXMsIHRhYmxlcywgc3RhcnQ7CisKKwlwdWRzID0gKGVuZCArIFBVRF9TSVpFIC0gMSkgPj4gUFVEX1NISUZUOworCXRhYmxlcyA9IHJvdW5kdXAocHVkcyAqIHNpemVvZihwdWRfdCksIFBBR0VfU0laRSk7CisKKwlpZiAodXNlX2dicGFnZXMpIHsKKwkJdW5zaWduZWQgbG9uZyBleHRyYTsKKworCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QVURfU0hJRlQpIDw8IFBVRF9TSElGVCk7CisJCXBtZHMgPSAoZXh0cmEgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKKwl9IGVsc2UKKwkJcG1kcyA9IChlbmQgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKKworCXRhYmxlcyArPSByb3VuZHVwKHBtZHMgKiBzaXplb2YocG1kX3QpLCBQQUdFX1NJWkUpOworCisJaWYgKHVzZV9wc2UpIHsKKwkJdW5zaWduZWQgbG9uZyBleHRyYTsKKworCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCQlleHRyYSArPSBQTURfU0laRTsKKyNlbmRpZgorCQlwdGVzID0gKGV4dHJhICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwl9IGVsc2UKKwkJcHRlcyA9IChlbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOworCisJdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogZm9yIGZpeG1hcCAqLworCXRhYmxlcyArPSByb3VuZHVwKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7CisjZW5kaWYKKworCS8qCisJICogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCisJICogY2F1c2UgYSBob3RzcG90IGFuZCBmaWxsIHVwIFpPTkVfRE1BLiBUaGUgcGFnZSB0YWJsZXMKKwkgKiBuZWVkIHJvdWdobHkgMC41S0IgcGVyIEdCLgorCSAqLworI2lmZGVmIENPTkZJR19YODZfMzIKKwlzdGFydCA9IDB4NzAwMDsKKwllODIwX3RhYmxlX3N0YXJ0ID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULAorCQkJCQl0YWJsZXMsIFBBR0VfU0laRSk7CisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJc3RhcnQgPSAweDgwMDA7CisJZTgyMF90YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHRhYmxlcywgUEFHRV9TSVpFKTsKKyNlbmRpZgorCWlmIChlODIwX3RhYmxlX3N0YXJ0ID09IC0xVUwpCisJCXBhbmljKCJDYW5ub3QgZmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyIpOworCisJZTgyMF90YWJsZV9zdGFydCA+Pj0gUEFHRV9TSElGVDsKKwllODIwX3RhYmxlX2VuZCA9IGU4MjBfdGFibGVfc3RhcnQ7CisJZTgyMF90YWJsZV90b3AgPSBlODIwX3RhYmxlX3N0YXJ0ICsgKHRhYmxlcyA+PiBQQUdFX1NISUZUKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvICVseCBAICVseC0lbHhcbiIsCisJCWVuZCwgZTgyMF90YWJsZV9zdGFydCA8PCBQQUdFX1NISUZULCBlODIwX3RhYmxlX3RvcCA8PCBQQUdFX1NISUZUKTsKK30KKworc3RydWN0IG1hcF9yYW5nZSB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBwYWdlX3NpemVfbWFzazsKK307CisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIE5SX1JBTkdFX01SIDMKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKyNkZWZpbmUgTlJfUkFOR0VfTVIgNQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19tZW1pbml0IHNhdmVfbXIoc3RydWN0IG1hcF9yYW5nZSAqbXIsIGludCBucl9yYW5nZSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKK3sKKwlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQlpZiAobnJfcmFuZ2UgPj0gTlJfUkFOR0VfTVIpCisJCQlwYW5pYygicnVuIG91dCBvZiByYW5nZSBmb3IgaW5pdF9tZW1vcnlfbWFwcGluZ1xuIik7CisJCW1yW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0X3Bmbjw8UEFHRV9TSElGVDsKKwkJbXJbbnJfcmFuZ2VdLmVuZCAgID0gZW5kX3Bmbjw8UEFHRV9TSElGVDsKKwkJbXJbbnJfcmFuZ2VdLnBhZ2Vfc2l6ZV9tYXNrID0gcGFnZV9zaXplX21hc2s7CisJCW5yX3JhbmdlKys7CisJfQorCisJcmV0dXJuIG5yX3JhbmdlOworfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorc3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2JwYWdlcyh2b2lkKQoreworCWlmIChkaXJlY3RfZ2JwYWdlcyAmJiBjcHVfaGFzX2dicGFnZXMpCisJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEdCIHBhZ2VzIGZvciBkaXJlY3QgbWFwcGluZ1xuIik7CisJZWxzZQorCQlkaXJlY3RfZ2JwYWdlcyA9IDA7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfZ2JwYWdlcyh2b2lkKQoreworfQorI2VuZGlmCisKKy8qCisgKiBTZXR1cCB0aGUgZGlyZWN0IG1hcHBpbmcgb2YgdGhlIHBoeXNpY2FsIG1lbW9yeSBhdCBQQUdFX09GRlNFVC4KKyAqIFRoaXMgcnVucyBiZWZvcmUgYm9vdG1lbSBpcyBpbml0aWFsaXplZCBhbmQgZ2V0cyBwYWdlcyBkaXJlY3RseSBmcm9tCisgKiB0aGUgcGh5c2ljYWwgbWVtb3J5LiBUbyBhY2Nlc3MgdGhlbSB0aGV5IGFyZSB0ZW1wb3JhcmlseSBtYXBwZWQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19pbml0X3JlZm9rIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBvczsKKworCXN0cnVjdCBtYXBfcmFuZ2UgbXJbTlJfUkFOR0VfTVJdOworCWludCBucl9yYW5nZSwgaTsKKwlpbnQgdXNlX3BzZSwgdXNlX2dicGFnZXM7CisKKwlwcmludGsoS0VSTl9JTkZPICJpbml0X21lbW9yeV9tYXBwaW5nOiAlMDE2bHgtJTAxNmx4XG4iLCBzdGFydCwgZW5kKTsKKworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJaW5pdF9nYnBhZ2VzKCk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCisJLyoKKwkgKiBGb3IgQ09ORklHX0RFQlVHX1BBR0VBTExPQywgaWRlbnRpdHkgbWFwcGluZyB3aWxsIHVzZSBzbWFsbCBwYWdlcy4KKwkgKiBUaGlzIHdpbGwgc2ltcGxpZnkgY3BhKCksIHdoaWNoIG90aGVyd2lzZSBuZWVkcyB0byBzdXBwb3J0IHNwbGl0dGluZworCSAqIGxhcmdlIHBhZ2VzIGludG8gc21hbGwgaW4gaW50ZXJydXB0IGNvbnRleHQsIGV0Yy4KKwkgKi8KKwl1c2VfcHNlID0gdXNlX2dicGFnZXMgPSAwOworI2Vsc2UKKwl1c2VfcHNlID0gY3B1X2hhc19wc2U7CisJdXNlX2dicGFnZXMgPSBkaXJlY3RfZ2JwYWdlczsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2lmZGVmIENPTkZJR19YODZfUEFFCisJc2V0X254KCk7CisJaWYgKG54X2VuYWJsZWQpCisJCXByaW50ayhLRVJOX0lORk8gIk5YIChFeGVjdXRlIERpc2FibGUpIHByb3RlY3Rpb246IGFjdGl2ZVxuIik7CisjZW5kaWYKKworCS8qIEVuYWJsZSBQU0UgaWYgYXZhaWxhYmxlICovCisJaWYgKGNwdV9oYXNfcHNlKQorCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUFNFKTsKKworCS8qIEVuYWJsZSBQR0UgaWYgYXZhaWxhYmxlICovCisJaWYgKGNwdV9oYXNfcGdlKSB7CisJCXNldF9pbl9jcjQoWDg2X0NSNF9QR0UpOworCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9HTE9CQUw7CisJfQorI2VuZGlmCisKKwlpZiAodXNlX2dicGFnZXMpCisJCXBhZ2Vfc2l6ZV9tYXNrIHw9IDEgPDwgUEdfTEVWRUxfMUc7CisJaWYgKHVzZV9wc2UpCisJCXBhZ2Vfc2l6ZV9tYXNrIHw9IDEgPDwgUEdfTEVWRUxfMk07CisKKwltZW1zZXQobXIsIDAsIHNpemVvZihtcikpOworCW5yX3JhbmdlID0gMDsKKworCS8qIGhlYWQgaWYgbm90IGJpZyBwYWdlIGFsaWdubWVudCA/ICovCisJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwlwb3MgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyoKKwkgKiBEb24ndCB1c2UgYSBsYXJnZSBwYWdlIGZvciB0aGUgZmlyc3QgMi80TUIgb2YgbWVtb3J5CisJICogYmVjYXVzZSB0aGVyZSBhcmUgb2Z0ZW4gZml4ZWQgc2l6ZSBNVFJScyBpbiB0aGVyZQorCSAqIGFuZCBvdmVybGFwcGluZyBNVFJScyBpbnRvIGxhcmdlIHBhZ2VzIGNhbiBjYXVzZQorCSAqIHNsb3dkb3ducy4KKwkgKi8KKwlpZiAocG9zID09IDApCisJCWVuZF9wZm4gPSAxPDwoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CisJZWxzZQorCQllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKKwkJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCWVuZF9wZm4gPSAoKHBvcyArIChQTURfU0laRSAtIDEpKSA+PiBQTURfU0hJRlQpCisJCQk8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CisjZW5kaWYKKwlpZiAoZW5kX3BmbiA+IChlbmQgPj4gUEFHRV9TSElGVCkpCisJCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKKwlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorCisJLyogYmlnIHBhZ2UgKDJNKSByYW5nZSAqLworCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwllbmRfcGZuID0gKGVuZD4+UE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJZW5kX3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCisJCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChlbmRfcGZuID4gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSkpCisJCWVuZF9wZm4gPSAoKGVuZD4+UE1EX1NISUZUKTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpKTsKKyNlbmRpZgorCisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLAorCQkJCXBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk7CisJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwl9CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJLyogYmlnIHBhZ2UgKDFHKSByYW5nZSAqLworCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCisJCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVuZF9wZm4gPSAoZW5kID4+IFBVRF9TSElGVCkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmCisJCQkJICgoMTw8UEdfTEVWRUxfMk0pfCgxPDxQR19MRVZFTF8xRykpKTsKKwkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworCX0KKworCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlICgxRykgYWxpZ25tZW50ICovCisJc3RhcnRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKKwkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CisJZW5kX3BmbiA9IChlbmQgPj4gUE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLAorCQkJCXBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk7CisJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwl9CisjZW5kaWYKKworCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlICgyTSkgYWxpZ25tZW50ICovCisJc3RhcnRfcGZuID0gcG9zPj5QQUdFX1NISUZUOworCWVuZF9wZm4gPSBlbmQ+PlBBR0VfU0hJRlQ7CisJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKKworCS8qIHRyeSB0byBtZXJnZSBzYW1lIHBhZ2Ugc2l6ZSBhbmQgY29udGludW91cyAqLworCWZvciAoaSA9IDA7IG5yX3JhbmdlID4gMSAmJiBpIDwgbnJfcmFuZ2UgLSAxOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBvbGRfc3RhcnQ7CisJCWlmIChtcltpXS5lbmQgIT0gbXJbaSsxXS5zdGFydCB8fAorCQkgICAgbXJbaV0ucGFnZV9zaXplX21hc2sgIT0gbXJbaSsxXS5wYWdlX3NpemVfbWFzaykKKwkJCWNvbnRpbnVlOworCQkvKiBtb3ZlIGl0ICovCisJCW9sZF9zdGFydCA9IG1yW2ldLnN0YXJ0OworCQltZW1tb3ZlKCZtcltpXSwgJm1yW2krMV0sCisJCQkobnJfcmFuZ2UgLSAxIC0gaSkgKiBzaXplb2Yoc3RydWN0IG1hcF9yYW5nZSkpOworCQltcltpLS1dLnN0YXJ0ID0gb2xkX3N0YXJ0OworCQlucl9yYW5nZS0tOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMTBseCAtICUwMTBseCBwYWdlICVzXG4iLAorCQkJCW1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCisJCQkobXJbaV0ucGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMUcpKT8iMUciOigKKwkJCSAobXJbaV0ucGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMk0pKT8iMk0iOiI0ayIpKTsKKworCS8qCisJICogRmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMuCisJICoKKwkgKiBMYXRlciB3ZSBzaG91bGQgYWxsb2NhdGUgdGhlc2UgdGFibGVzIGluIHRoZSBsb2NhbCBub2RlIG9mIHRoZQorCSAqIG1lbW9yeSBtYXBwZWQuIFVuZm9ydHVuYXRlbHkgdGhpcyBpcyBkb25lIGN1cnJlbnRseSBiZWZvcmUgdGhlCisJICogbm9kZXMgYXJlIGRpc2NvdmVyZWQuCisJICovCisJaWYgKCFhZnRlcl9ib290bWVtKQorCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCwgdXNlX3BzZSwgdXNlX2dicGFnZXMpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQorCQlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KG1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCisJCQkJCSAgICAgbXJbaV0ucGFnZV9zaXplX21hc2spOworCXJldCA9IGVuZDsKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJcmV0ID0ga2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJCQkJICAgbXJbaV0ucGFnZV9zaXplX21hc2spOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZWFybHlfaW9yZW1hcF9wYWdlX3RhYmxlX3JhbmdlX2luaXQoKTsKKworCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJbW11X2NyNF9mZWF0dXJlcyA9IHJlYWRfY3I0KCk7CisjZW5kaWYKKwlfX2ZsdXNoX3RsYl9hbGwoKTsKKworCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiBlODIwX3RhYmxlX2VuZCA+IGU4MjBfdGFibGVfc3RhcnQpCisJCXJlc2VydmVfZWFybHkoZTgyMF90YWJsZV9zdGFydCA8PCBQQUdFX1NISUZULAorCQkJCSBlODIwX3RhYmxlX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOworCisJaWYgKCFhZnRlcl9ib290bWVtKQorCQllYXJseV9tZW10ZXN0KHN0YXJ0LCBlbmQpOworCisJcmV0dXJuIHJldCA+PiBQQUdFX1NISUZUOworfQorCisKKy8qCisgKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCisgKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCisgKgorICoKKyAqIE9uIHg4NiwgYWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byB0aGUgZmlyc3QgbWVnYWJ5dGUgb2YgcmFtIGJlY2F1c2UgdGhhdCBhcmVhCisgKiBjb250YWlucyBiaW9zIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgorICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKKyAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCisgKi8KK2ludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2VucikKK3sKKwlpZiAocGFnZW5yIDw9IDI1NikKKwkJcmV0dXJuIDE7CisJaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShwYWdlbnIgPDwgUEFHRV9TSElGVCkpCisJCXJldHVybiAwOworCWlmICghcGFnZV9pc19yYW0ocGFnZW5yKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CiAKIHZvaWQgZnJlZV9pbml0X3BhZ2VzKGNoYXIgKndoYXQsIHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtNDcsMyArMzg0LDEwIEBACiAJCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9iZWdpbiksCiAJCQkodW5zaWduZWQgbG9uZykoJl9faW5pdF9lbmQpKTsKIH0KKworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZnJlZV9pbml0X3BhZ2VzKCJpbml0cmQgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfMzIuYyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwppbmRleCA0N2RmMGUxLi5kYjgxZTlhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaW5pdC5oPgogCiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKIHVuc2lnbmVkIGxvbmcgbWF4X3Bmbl9tYXBwZWQ7CkBAIC01OCwxOSArNTksMTQgQEAKIAogc3RhdGljIG5vaW5saW5lIGludCBkb190ZXN0X3dwX2JpdCh2b2lkKTsKIAotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHRhYmxlX3N0YXJ0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV9lbmQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIHRhYmxlX3RvcDsKLQotc3RhdGljIGludCBfX2luaXRkYXRhIGFmdGVyX2luaXRfYm9vdG1lbTsKK2Jvb2wgX19yZWFkX21vc3RseSBfX3ZtYWxsb2Nfc3RhcnRfc2V0ID0gZmFsc2U7CiAKIHN0YXRpYyBfX2luaXQgdm9pZCAqYWxsb2NfbG93X3BhZ2Uodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHRhYmxlX2VuZCsrOworCXVuc2lnbmVkIGxvbmcgcGZuID0gZTgyMF90YWJsZV9lbmQrKzsKIAl2b2lkICphZHI7CiAKLQlpZiAocGZuID49IHRhYmxlX3RvcCkKKwlpZiAocGZuID49IGU4MjBfdGFibGVfdG9wKQogCQlwYW5pYygiYWxsb2NfbG93X3BhZ2U6IHJhbiBvdXQgb2YgbWVtb3J5Iik7CiAKIAlhZHIgPSBfX3ZhKHBmbiAqIFBBR0VfU0laRSk7CkBAIC05MCw3ICs4Niw3IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCWlmICghKHBnZF92YWwoKnBnZCkgJiBfUEFHRV9QUkVTRU5UKSkgewotCQlpZiAoYWZ0ZXJfaW5pdF9ib290bWVtKQorCQlpZiAoYWZ0ZXJfYm9vdG1lbSkKIAkJCXBtZF90YWJsZSA9IChwbWRfdCAqKWFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CiAJCWVsc2UKIAkJCXBtZF90YWJsZSA9IChwbWRfdCAqKWFsbG9jX2xvd19wYWdlKCk7CkBAIC0xMTcsNyArMTEzLDcgQEAKIAlpZiAoIShwbWRfdmFsKCpwbWQpICYgX1BBR0VfUFJFU0VOVCkpIHsKIAkJcHRlX3QgKnBhZ2VfdGFibGUgPSBOVUxMOwogCi0JCWlmIChhZnRlcl9pbml0X2Jvb3RtZW0pIHsKKwkJaWYgKGFmdGVyX2Jvb3RtZW0pIHsKICNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCiAJCQlwYWdlX3RhYmxlID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKICNlbmRpZgpAQCAtMTY4LDEyICsxNjQsMTIgQEAKIAlpZiAocG1kX2lkeF9rbWFwX2JlZ2luICE9IHBtZF9pZHhfa21hcF9lbmQKIAkgICAgJiYgKHZhZGRyID4+IFBNRF9TSElGVCkgPj0gcG1kX2lkeF9rbWFwX2JlZ2luCiAJICAgICYmICh2YWRkciA+PiBQTURfU0hJRlQpIDw9IHBtZF9pZHhfa21hcF9lbmQKLQkgICAgJiYgKChfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCkgPCB0YWJsZV9zdGFydAotCQl8fCAoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpID49IHRhYmxlX2VuZCkpIHsKKwkgICAgJiYgKChfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCkgPCBlODIwX3RhYmxlX3N0YXJ0CisJCXx8IChfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCkgPj0gZTgyMF90YWJsZV9lbmQpKSB7CiAJCXB0ZV90ICpuZXdwdGU7CiAJCWludCBpOwogCi0JCUJVR19PTihhZnRlcl9pbml0X2Jvb3RtZW0pOworCQlCVUdfT04oYWZ0ZXJfYm9vdG1lbSk7CiAJCW5ld3B0ZSA9IGFsbG9jX2xvd19wYWdlKCk7CiAJCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykKIAkJCXNldF9wdGUobmV3cHRlICsgaSwgcHRlW2ldKTsKQEAgLTI0MiwxMSArMjM4LDE0IEBACiAgKiBvZiBtYXhfbG93X3BmbiBwYWdlcywgYnkgY3JlYXRpbmcgcGFnZSB0YWJsZXMgc3RhcnRpbmcgZnJvbSBhZGRyZXNzCiAgKiBQQUdFX09GRlNFVDoKICAqLwotc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQocGdkX3QgKnBnZF9iYXNlLAotCQkJCQkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sCi0JCQkJCQlpbnQgdXNlX3BzZSkKK3Vuc2lnbmVkIGxvbmcgX19pbml0CitrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrKQogeworCWludCB1c2VfcHNlID0gcGFnZV9zaXplX21hc2sgPT0gKDE8PFBHX0xFVkVMXzJNKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKwlwZ2RfdCAqcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKIAlpbnQgcGdkX2lkeCwgcG1kX2lkeCwgcHRlX29mczsKIAl1bnNpZ25lZCBsb25nIHBmbjsKIAlwZ2RfdCAqcGdkOwpAQCAtMjU1LDYgKzI1NCw5IEBACiAJdW5zaWduZWQgcGFnZXNfMm0sIHBhZ2VzXzRrOwogCWludCBtYXBwaW5nX2l0ZXI7CiAKKwlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKKwogCS8qCiAJICogRmlyc3QgaXRlcmF0aW9uIHdpbGwgc2V0dXAgaWRlbnRpdHkgbWFwcGluZyB1c2luZyBsYXJnZS9zbWFsbCBwYWdlcwogCSAqIGJhc2VkIG9uIHVzZV9wc2UsIHdpdGggb3RoZXIgYXR0cmlidXRlcyBzYW1lIGFzIHNldCBieQpAQCAtMzY5LDI2ICszNzEsNiBAQAogCQltYXBwaW5nX2l0ZXIgPSAyOwogCQlnb3RvIHJlcGVhdDsKIAl9Ci19Ci0KLS8qCi0gKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCi0gKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCi0gKgotICoKLSAqIE9uIHg4NiwgYWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byB0aGUgZmlyc3QgbWVnYWJ5dGUgb2YgcmFtIGJlY2F1c2UgdGhhdCBhcmVhCi0gKiBjb250YWlucyBiaW9zIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgotICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKLSAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCi0gKi8KLWludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlpZiAocGFnZW5yIDw9IDI1NikKLQkJcmV0dXJuIDE7Ci0JaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShwYWdlbnIgPDwgUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCWlmICghcGFnZV9pc19yYW0ocGFnZW5yKSkKLQkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU0NSw4ICs1MjcsOSBAQAogICogYmUgcGFydGlhbGx5IHBvcHVsYXRlZCwgYW5kIHNvIGl0IGF2b2lkcyBzdG9tcGluZyBvbiBhbnkgZXhpc3RpbmcKICAqIG1hcHBpbmdzLgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfaW9yZW1hcF9wYWdlX3RhYmxlX3JhbmdlX2luaXQocGdkX3QgKnBnZF9iYXNlKQordm9pZCBfX2luaXQgZWFybHlfaW9yZW1hcF9wYWdlX3RhYmxlX3JhbmdlX2luaXQodm9pZCkKIHsKKwlwZ2RfdCAqcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKIAl1bnNpZ25lZCBsb25nIHZhZGRyLCBlbmQ7CiAKIAkvKgpAQCAtNjQxLDcgKzYyNCw3IEBACiB9CiBlYXJseV9wYXJhbSgibm9leGVjIiwgbm9leGVjX3NldHVwKTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9ueCh2b2lkKQordm9pZCBfX2luaXQgc2V0X254KHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7CiAKQEAgLTc5Myw2ICs3NzYsOCBAQAogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAJbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlczsKICNlbmRpZgorCV9fdm1hbGxvY19zdGFydF9zZXQgPSB0cnVlOworCiAJcHJpbnRrKEtFUk5fTk9USUNFICIlbGRNQiBMT1dNRU0gYXZhaWxhYmxlLlxuIiwKIAkJCXBhZ2VzX3RvX21iKG1heF9sb3dfcGZuKSk7CiAKQEAgLTgxNCwxNzYgKzc5OSw2NiBAQAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCSB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCQkJIHVuc2lnbmVkIGxvbmcgYm9vdG1hcCkKK3sKKwl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKKworCS8qIGRvbid0IHRvdWNoIG1pbl9sb3dfcGZuICovCisJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksCisJCQkJCSBib290bWFwID4+IFBBR0VfU0hJRlQsCisJCQkJCSBzdGFydF9wZm4sIGVuZF9wZm4pOworCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBsb3cgcmFtOiAlMDhseCAtICUwOGx4XG4iLAorCQlub2RlaWQsIHN0YXJ0X3Bmbjw8UEFHRV9TSElGVCwgZW5kX3Bmbjw8UEFHRV9TSElGVCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICBub2RlICVkIGJvb3RtYXAgJTA4bHggLSAlMDhseFxuIiwKKwkJIG5vZGVpZCwgYm9vdG1hcCwgYm9vdG1hcCArIGJvb3RtYXBfc2l6ZSk7CisJZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMobm9kZWlkLCBlbmRfcGZuKTsKKwllYXJseV9yZXNfdG9fYm9vdG1lbShzdGFydF9wZm48PFBBR0VfU0hJRlQsIGVuZF9wZm48PFBBR0VfU0hJRlQpOworCisJcmV0dXJuIGJvb3RtYXAgKyBib290bWFwX3NpemU7Cit9CisKIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IG5vZGVpZDsKIAl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZSwgYm9vdG1hcDsKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IgKHdpdGggbG93IG1lbW9yeSBvbmx5KToKIAkgKi8KIAlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMobWF4X2xvd19wZm4pPDxQQUdFX1NISUZUOwotCWJvb3RtYXAgPSBmaW5kX2U4MjBfYXJlYShtaW5fbG93X3Bmbjw8UEFHRV9TSElGVCwKLQkJCQkgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQsIGJvb3RtYXBfc2l6ZSwKKwlib290bWFwID0gZmluZF9lODIwX2FyZWEoMCwgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQsIGJvb3RtYXBfc2l6ZSwKIAkJCQkgUEFHRV9TSVpFKTsKIAlpZiAoYm9vdG1hcCA9PSAtMUwpCiAJCXBhbmljKCJDYW5ub3QgZmluZCBib290bWVtIG1hcCBvZiBzaXplICVsZFxuIiwgYm9vdG1hcF9zaXplKTsKIAlyZXNlcnZlX2Vhcmx5KGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUsICJCT09UTUFQIik7CiAKLQkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLwotCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYm9vdG1hcCA+PiBQQUdFX1NISUZULAotCQkJCQkgbWluX2xvd19wZm4sIG1heF9sb3dfcGZuKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIG1hcHBlZCBsb3cgcmFtOiAwIC0gJTA4bHhcbiIsCiAJCSBtYXhfcGZuX21hcHBlZDw8UEFHRV9TSElGVCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBsb3cgcmFtOiAlMDhseCAtICUwOGx4XG4iLAotCQkgbWluX2xvd19wZm48PFBBR0VfU0hJRlQsIG1heF9sb3dfcGZuPDxQQUdFX1NISUZUKTsKLQlwcmludGsoS0VSTl9JTkZPICIgIGJvb3RtYXAgJTA4bHggLSAlMDhseFxuIiwKLQkJIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOwotCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCi0JCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKGksIG1heF9sb3dfcGZuKTsKLQllYXJseV9yZXNfdG9fYm9vdG1lbSgwLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICBsb3cgcmFtOiAwIC0gJTA4bHhcbiIsIG1heF9sb3dfcGZuPDxQQUdFX1NISUZUKTsKIAotCWFmdGVyX2luaXRfYm9vdG1lbSA9IDE7Ci19CisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZWlkKSB7CisJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIAotc3RhdGljIHZvaWQgX19pbml0IGZpbmRfZWFybHlfdGFibGVfc3BhY2UodW5zaWduZWQgbG9uZyBlbmQsIGludCB1c2VfcHNlKQotewotCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgcHRlcywgdGFibGVzLCBzdGFydDsKLQotCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JdGFibGVzID0gcm91bmR1cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKLQotCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocG1kcyAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7Ci0KLQlpZiAodXNlX3BzZSkgewotCQl1bnNpZ25lZCBsb25nIGV4dHJhOwotCi0JCWV4dHJhID0gZW5kIC0gKChlbmQ+PlBNRF9TSElGVCkgPDwgUE1EX1NISUZUKTsKLQkJZXh0cmEgKz0gUE1EX1NJWkU7Ci0JCXB0ZXMgPSAoZXh0cmEgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCX0gZWxzZQotCQlwdGVzID0gKGVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0KLQl0YWJsZXMgKz0gcm91bmR1cChwdGVzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKLQotCS8qIGZvciBmaXhtYXAgKi8KLQl0YWJsZXMgKz0gcm91bmR1cChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOwotCi0JLyoKLQkgKiBSRUQtUEVOIHB1dHRpbmcgcGFnZSB0YWJsZXMgb25seSBvbiBub2RlIDAgY291bGQKLQkgKiBjYXVzZSBhIGhvdHNwb3QgYW5kIGZpbGwgdXAgWk9ORV9ETUEuIFRoZSBwYWdlIHRhYmxlcwotCSAqIG5lZWQgcm91Z2hseSAwLjVLQiBwZXIgR0IuCi0JICovCi0Jc3RhcnQgPSAweDcwMDA7Ci0JdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQsCi0JCQkJCXRhYmxlcywgUEFHRV9TSVpFKTsKLQlpZiAodGFibGVfc3RhcnQgPT0gLTFVTCkKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIHBhZ2UgdGFibGVzIik7Ci0KLQl0YWJsZV9zdGFydCA+Pj0gUEFHRV9TSElGVDsKLQl0YWJsZV9lbmQgPSB0YWJsZV9zdGFydDsKLQl0YWJsZV90b3AgPSB0YWJsZV9zdGFydCArICh0YWJsZXM+PlBBR0VfU0hJRlQpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgImtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMgdXAgdG8gJWx4IEAgJWx4LSVseFxuIiwKLQkJZW5kLCB0YWJsZV9zdGFydCA8PCBQQUdFX1NISUZULAotCQkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCkgKyB0YWJsZXMpOwotfQotCi11bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlwZ2RfdCAqcGdkX2Jhc2UgPSBzd2FwcGVyX3BnX2RpcjsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIGJpZ19wYWdlX3N0YXJ0OwotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQkvKgotCSAqIEZvciBDT05GSUdfREVCVUdfUEFHRUFMTE9DLCBpZGVudGl0eSBtYXBwaW5nIHdpbGwgdXNlIHNtYWxsIHBhZ2VzLgotCSAqIFRoaXMgd2lsbCBzaW1wbGlmeSBjcGEoKSwgd2hpY2ggb3RoZXJ3aXNlIG5lZWRzIHRvIHN1cHBvcnQgc3BsaXR0aW5nCi0JICogbGFyZ2UgcGFnZXMgaW50byBzbWFsbCBpbiBpbnRlcnJ1cHQgY29udGV4dCwgZXRjLgotCSAqLwotCWludCB1c2VfcHNlID0gMDsKKyNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUworCQlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3Bmbltub2RlaWRdOworCQllbmRfcGZuID0gbm9kZV9lbmRfcGZuW25vZGVpZF07CisJCWlmIChzdGFydF9wZm4gPiBtYXhfbG93X3BmbikKKwkJCWNvbnRpbnVlOworCQlpZiAoZW5kX3BmbiA+IG1heF9sb3dfcGZuKQorCQkJZW5kX3BmbiA9IG1heF9sb3dfcGZuOwogI2Vsc2UKLQlpbnQgdXNlX3BzZSA9IGNwdV9oYXNfcHNlOworCQlzdGFydF9wZm4gPSAwOworCQllbmRfcGZuID0gbWF4X2xvd19wZm47CiAjZW5kaWYKLQotCS8qCi0JICogRmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBkaXJlY3QgbWFwcGluZyB0YWJsZXMuCi0JICovCi0JaWYgKCFhZnRlcl9pbml0X2Jvb3RtZW0pCi0JCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlKTsKLQotI2lmZGVmIENPTkZJR19YODZfUEFFCi0Jc2V0X254KCk7Ci0JaWYgKG54X2VuYWJsZWQpCi0JCXByaW50ayhLRVJOX0lORk8gIk5YIChFeGVjdXRlIERpc2FibGUpIHByb3RlY3Rpb246IGFjdGl2ZVxuIik7Ci0jZW5kaWYKLQotCS8qIEVuYWJsZSBQU0UgaWYgYXZhaWxhYmxlICovCi0JaWYgKGNwdV9oYXNfcHNlKQotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUFNFKTsKLQotCS8qIEVuYWJsZSBQR0UgaWYgYXZhaWxhYmxlICovCi0JaWYgKGNwdV9oYXNfcGdlKSB7Ci0JCXNldF9pbl9jcjQoWDg2X0NSNF9QR0UpOwotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9HTE9CQUw7CisJCWJvb3RtYXAgPSBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkLCBzdGFydF9wZm4sIGVuZF9wZm4sCisJCQkJCQkgYm9vdG1hcCk7CiAJfQogCi0JLyoKLQkgKiBEb24ndCB1c2UgYSBsYXJnZSBwYWdlIGZvciB0aGUgZmlyc3QgMi80TUIgb2YgbWVtb3J5Ci0JICogYmVjYXVzZSB0aGVyZSBhcmUgb2Z0ZW4gZml4ZWQgc2l6ZSBNVFJScyBpbiB0aGVyZQotCSAqIGFuZCBvdmVybGFwcGluZyBNVFJScyBpbnRvIGxhcmdlIHBhZ2VzIGNhbiBjYXVzZQotCSAqIHNsb3dkb3ducy4KLQkgKi8KLQliaWdfcGFnZV9zdGFydCA9IFBNRF9TSVpFOwotCi0JaWYgKHN0YXJ0IDwgYmlnX3BhZ2Vfc3RhcnQpIHsKLQkJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9IG1pbihiaWdfcGFnZV9zdGFydD4+UEFHRV9TSElGVCwgZW5kPj5QQUdFX1NISUZUKTsKLQl9IGVsc2UgewotCQkvKiBoZWFkIGlzIG5vdCBiaWcgcGFnZSBhbGlnbm1lbnQgPyAqLwotCQlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwotCQllbmRfcGZuID0gKChzdGFydCArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQotCQkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JfQotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKQotCQlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF9iYXNlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCi0JLyogYmlnIHBhZ2UgcmFuZ2UgKi8KLQlzdGFydF9wZm4gPSAoKHN0YXJ0ICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCi0JCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChzdGFydF9wZm4gPCAoYmlnX3BhZ2Vfc3RhcnQgPj4gUEFHRV9TSElGVCkpCi0JCXN0YXJ0X3BmbiA9ICBiaWdfcGFnZV9zdGFydCA+PiBQQUdFX1NISUZUOwotCWVuZF9wZm4gPSAoZW5kPj5QTURfU0hJRlQpIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikKLQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLCBlbmRfcGZuLAotCQkJCQkgICAgIHVzZV9wc2UpOwotCi0JLyogdGFpbCBpcyBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8gKi8KLQlzdGFydF9wZm4gPSBlbmRfcGZuOwotCWlmIChzdGFydF9wZm4gPiAoYmlnX3BhZ2Vfc3RhcnQ+PlBBR0VfU0hJRlQpKSB7Ci0JCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKLQkJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pCi0JCQlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF9iYXNlLCBzdGFydF9wZm4sCi0JCQkJCQkJIGVuZF9wZm4sIDApOwotCX0KLQotCWVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHBnZF9iYXNlKTsKLQotCWxvYWRfY3IzKHN3YXBwZXJfcGdfZGlyKTsKLQotCV9fZmx1c2hfdGxiX2FsbCgpOwotCi0JaWYgKCFhZnRlcl9pbml0X2Jvb3RtZW0pCi0JCXJlc2VydmVfZWFybHkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJCQkgdGFibGVfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7Ci0KLQlpZiAoIWFmdGVyX2luaXRfYm9vdG1lbSkKLQkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKLQotCXJldHVybiBlbmQgPj4gUEFHRV9TSElGVDsKKwlhZnRlcl9ib290bWVtID0gMTsKIH0KIAotCiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcyAtIG5vdGUgdGhhdCB0aGUgZmlyc3QgOE1CIGFyZQogICogYWxyZWFkeSBtYXBwZWQgYnkgaGVhZC5TLgpAQCAtMTIxNywxMyArMTA5Miw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJpbml0cmQgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7Ci19Ci0jZW5kaWYKLQogaW50IF9faW5pdCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJCSAgIGludCBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCAwN2Y0NGQ0Li41NGVmYTU3ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vbnVtYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KIAogLyoKICAqIGVuZF9wZm4gb25seSBpbmNsdWRlcyBSQU0sIHdoaWxlIG1heF9wZm5fbWFwcGVkIGluY2x1ZGVzIGFsbCBlODIwIGVudHJpZXMuCkBAIC02MSwxMiArNjIsNiBAQAogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCi1pbnQgZGlyZWN0X2dicGFnZXMKLSNpZmRlZiBDT05GSUdfRElSRUNUX0dCUEFHRVMKLQkJCQk9IDEKLSNlbmRpZgotOwotCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9kaXJlY3RfZ2JwYWdlc19vZmYoY2hhciAqYXJnKQogewogCWRpcmVjdF9nYnBhZ2VzID0gMDsKQEAgLTg3LDEyICs4MiwxMCBAQAogICogYXJvdW5kIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHBnZCBldmVyeSB0aW1lLgogICovCiAKLWludCBhZnRlcl9ib290bWVtOwotCiBwdGV2YWxfdCBfX3N1cHBvcnRlZF9wdGVfbWFzayBfX3JlYWRfbW9zdGx5ID0gfl9QQUdFX0lPTUFQOwogRVhQT1JUX1NZTUJPTF9HUEwoX19zdXBwb3J0ZWRfcHRlX21hc2spOwogCi1zdGF0aWMgaW50IGRvX25vdF9ueCBfX2NwdWluaXRkYXRhOworc3RhdGljIGludCBkaXNhYmxlX254IF9fY3B1aW5pdGRhdGE7CiAKIC8qCiAgKiBub2V4ZWM9b258b2ZmCkBAIC0xMDcsOSArMTAwLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCFzdHJuY21wKHN0ciwgIm9uIiwgMikpIHsKIAkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfTlg7Ci0JCWRvX25vdF9ueCA9IDA7CisJCWRpc2FibGVfbnggPSAwOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAib2ZmIiwgMykpIHsKLQkJZG9fbm90X254ID0gMTsKKwkJZGlzYWJsZV9ueCA9IDE7CiAJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMjEsNyArMTE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGVmZXI7CiAKIAlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkb19ub3RfbngpCisJaWYgKCEoZWZlciAmIEVGRVJfTlgpIHx8IGRpc2FibGVfbngpCiAJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9OWDsKIH0KIApAQCAtMzI1LDEzICszMTgsOSBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB0YWJsZV9zdGFydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfZW5kOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV90b3A7Ci0KIHN0YXRpYyBfX3JlZiB2b2lkICphbGxvY19sb3dfcGFnZSh1bnNpZ25lZCBsb25nICpwaHlzKQogewotCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFibGVfZW5kKys7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBlODIwX3RhYmxlX2VuZCsrOwogCXZvaWQgKmFkcjsKIAogCWlmIChhZnRlcl9ib290bWVtKSB7CkBAIC0zNDEsNyArMzMwLDcgQEAKIAkJcmV0dXJuIGFkcjsKIAl9CiAKLQlpZiAocGZuID49IHRhYmxlX3RvcCkKKwlpZiAocGZuID49IGU4MjBfdGFibGVfdG9wKQogCQlwYW5pYygiYWxsb2NfbG93X3BhZ2U6IHJhbiBvdXQgb2YgbWVtb3J5Iik7CiAKIAlhZHIgPSBlYXJseV9tZW1yZW1hcChwZm4gKiBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CkBAIC01ODEsNTggKzU3MCwxMCBAQAogCXJldHVybiBwaHlzX3B1ZF9pbml0KHB1ZCwgYWRkciwgZW5kLCBwYWdlX3NpemVfbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSwKLQkJCQkJICBpbnQgdXNlX2dicGFnZXMpCi17Ci0JdW5zaWduZWQgbG9uZyBwdWRzLCBwbWRzLCBwdGVzLCB0YWJsZXMsIHN0YXJ0OwotCi0JcHVkcyA9IChlbmQgKyBQVURfU0laRSAtIDEpID4+IFBVRF9TSElGVDsKLQl0YWJsZXMgPSByb3VuZHVwKHB1ZHMgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpOwotCWlmICh1c2VfZ2JwYWdlcykgewotCQl1bnNpZ25lZCBsb25nIGV4dHJhOwotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QVURfU0hJRlQpIDw8IFBVRF9TSElGVCk7Ci0JCXBtZHMgPSAoZXh0cmEgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKLQl9IGVsc2UKLQkJcG1kcyA9IChlbmQgKyBQTURfU0laRSAtIDEpID4+IFBNRF9TSElGVDsKLQl0YWJsZXMgKz0gcm91bmR1cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKLQotCWlmICh1c2VfcHNlKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZXh0cmE7Ci0JCWV4dHJhID0gZW5kIC0gKChlbmQ+PlBNRF9TSElGVCkgPDwgUE1EX1NISUZUKTsKLQkJcHRlcyA9IChleHRyYSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JfSBlbHNlCi0JCXB0ZXMgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQl0YWJsZXMgKz0gcm91bmR1cChwdGVzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKLQotCS8qCi0JICogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCi0JICogY2F1c2UgYSBob3RzcG90IGFuZCBmaWxsIHVwIFpPTkVfRE1BLiBUaGUgcGFnZSB0YWJsZXMKLQkgKiBuZWVkIHJvdWdobHkgMC41S0IgcGVyIEdCLgotCSAqLwotCXN0YXJ0ID0gMHg4MDAwOwotCXRhYmxlX3N0YXJ0ID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgdGFibGVzLCBQQUdFX1NJWkUpOwotCWlmICh0YWJsZV9zdGFydCA9PSAtMVVMKQotCQlwYW5pYygiQ2Fubm90IGZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMiKTsKLQotCXRhYmxlX3N0YXJ0ID4+PSBQQUdFX1NISUZUOwotCXRhYmxlX2VuZCA9IHRhYmxlX3N0YXJ0OwotCXRhYmxlX3RvcCA9IHRhYmxlX3N0YXJ0ICsgKHRhYmxlcyA+PiBQQUdFX1NISUZUKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvICVseCBAICVseC0lbHhcbiIsCi0JCWVuZCwgdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwgdGFibGVfdG9wIDw8IFBBR0VfU0hJRlQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9nYnBhZ2VzKHZvaWQpCi17Ci0JaWYgKGRpcmVjdF9nYnBhZ2VzICYmIGNwdV9oYXNfZ2JwYWdlcykKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgR0IgcGFnZXMgZm9yIGRpcmVjdCBtYXBwaW5nXG4iKTsKLQllbHNlCi0JCWRpcmVjdF9nYnBhZ2VzID0gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCQkJdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKK3Vuc2lnbmVkIGxvbmcgX19pbml0CitrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrKQogewogCiAJdW5zaWduZWQgbG9uZyBuZXh0LCBsYXN0X21hcF9hZGRyID0gZW5kOwpAQCAtNjY5LDE3NiArNjEwLDYgQEAKIAlyZXR1cm4gbGFzdF9tYXBfYWRkcjsKIH0KIAotc3RydWN0IG1hcF9yYW5nZSB7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQl1bnNpZ25lZCBwYWdlX3NpemVfbWFzazsKLX07Ci0KLSNkZWZpbmUgTlJfUkFOR0VfTVIgNQotCi1zdGF0aWMgaW50IHNhdmVfbXIoc3RydWN0IG1hcF9yYW5nZSAqbXIsIGludCBucl9yYW5nZSwKLQkJICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbiwKLQkJICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKLXsKLQotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCWlmIChucl9yYW5nZSA+PSBOUl9SQU5HRV9NUikKLQkJCXBhbmljKCJydW4gb3V0IG9mIHJhbmdlIGZvciBpbml0X21lbW9yeV9tYXBwaW5nXG4iKTsKLQkJbXJbbnJfcmFuZ2VdLnN0YXJ0ID0gc3RhcnRfcGZuPDxQQUdFX1NISUZUOwotCQltcltucl9yYW5nZV0uZW5kICAgPSBlbmRfcGZuPDxQQUdFX1NISUZUOwotCQltcltucl9yYW5nZV0ucGFnZV9zaXplX21hc2sgPSBwYWdlX3NpemVfbWFzazsKLQkJbnJfcmFuZ2UrKzsKLQl9Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KLS8qCi0gKiBTZXR1cCB0aGUgZGlyZWN0IG1hcHBpbmcgb2YgdGhlIHBoeXNpY2FsIG1lbW9yeSBhdCBQQUdFX09GRlNFVC4KLSAqIFRoaXMgcnVucyBiZWZvcmUgYm9vdG1lbSBpcyBpbml0aWFsaXplZCBhbmQgZ2V0cyBwYWdlcyBkaXJlY3RseSBmcm9tCi0gKiB0aGUgcGh5c2ljYWwgbWVtb3J5LiBUbyBhY2Nlc3MgdGhlbSB0aGV5IGFyZSB0ZW1wb3JhcmlseSBtYXBwZWQuCi0gKi8KLXVuc2lnbmVkIGxvbmcgX19pbml0X3JlZm9rIGluaXRfbWVtb3J5X21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfYWRkciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzayA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyBwb3M7Ci0KLQlzdHJ1Y3QgbWFwX3JhbmdlIG1yW05SX1JBTkdFX01SXTsKLQlpbnQgbnJfcmFuZ2UsIGk7Ci0JaW50IHVzZV9wc2UsIHVzZV9nYnBhZ2VzOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9tZW1vcnlfbWFwcGluZzogJTAxNmx4LSUwMTZseFxuIiwgc3RhcnQsIGVuZCk7Ci0KLQkvKgotCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgotCSAqCi0JICogTGF0ZXIgd2Ugc2hvdWxkIGFsbG9jYXRlIHRoZXNlIHRhYmxlcyBpbiB0aGUgbG9jYWwgbm9kZSBvZiB0aGUKLQkgKiBtZW1vcnkgbWFwcGVkLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgZG9uZSBjdXJyZW50bHkgYmVmb3JlIHRoZQotCSAqIG5vZGVzIGFyZSBkaXNjb3ZlcmVkLgotCSAqLwotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJaW5pdF9nYnBhZ2VzKCk7Ci0KLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JLyoKLQkgKiBGb3IgQ09ORklHX0RFQlVHX1BBR0VBTExPQywgaWRlbnRpdHkgbWFwcGluZyB3aWxsIHVzZSBzbWFsbCBwYWdlcy4KLQkgKiBUaGlzIHdpbGwgc2ltcGxpZnkgY3BhKCksIHdoaWNoIG90aGVyd2lzZSBuZWVkcyB0byBzdXBwb3J0IHNwbGl0dGluZwotCSAqIGxhcmdlIHBhZ2VzIGludG8gc21hbGwgaW4gaW50ZXJydXB0IGNvbnRleHQsIGV0Yy4KLQkgKi8KLQl1c2VfcHNlID0gdXNlX2dicGFnZXMgPSAwOwotI2Vsc2UKLQl1c2VfcHNlID0gY3B1X2hhc19wc2U7Ci0JdXNlX2dicGFnZXMgPSBkaXJlY3RfZ2JwYWdlczsKLSNlbmRpZgotCi0JaWYgKHVzZV9nYnBhZ2VzKQotCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzFHOwotCWlmICh1c2VfcHNlKQotCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzJNOwotCi0JbWVtc2V0KG1yLCAwLCBzaXplb2YobXIpKTsKLQlucl9yYW5nZSA9IDA7Ci0KLQkvKiBoZWFkIGlmIG5vdCBiaWcgcGFnZSBhbGlnbm1lbnQgPyovCi0Jc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQlwb3MgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKLQllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSkgPj4gUE1EX1NISUZUKQotCQkJPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChlbmRfcGZuID4gKGVuZCA+PiBQQUdFX1NISUZUKSkKLQkJZW5kX3BmbiA9IGVuZCA+PiBQQUdFX1NISUZUOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7Ci0JCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQl9Ci0KLQkvKiBiaWcgcGFnZSAoMk0pIHJhbmdlKi8KLQlzdGFydF9wZm4gPSAoKHBvcyArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQotCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQllbmRfcGZuID0gKChwb3MgKyAoUFVEX1NJWkUgLSAxKSk+PlBVRF9TSElGVCkKLQkJCSA8PCAoUFVEX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JaWYgKGVuZF9wZm4gPiAoKGVuZD4+UE1EX1NISUZUKTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpKSkKLQkJZW5kX3BmbiA9ICgoZW5kPj5QTURfU0hJRlQpPDwoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkpOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogYmlnIHBhZ2UgKDFHKSByYW5nZSAqLwotCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCi0JCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWVuZF9wZm4gPSAoZW5kID4+IFBVRF9TSElGVCkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQlwYWdlX3NpemVfbWFzayAmCi0JCQkJICgoMTw8UEdfTEVWRUxfMk0pfCgxPDxQR19MRVZFTF8xRykpKTsKLQkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwotCX0KLQotCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlICgxRykgYWxpZ25tZW50ICovCi0Jc3RhcnRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JZW5kX3BmbiA9IChlbmQgPj4gUE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKLQkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLAotCQkJCXBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk7Ci0JCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQl9Ci0KLQkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMk0pIGFsaWdubWVudCAqLwotCXN0YXJ0X3BmbiA9IHBvcz4+UEFHRV9TSElGVDsKLQllbmRfcGZuID0gZW5kPj5QQUdFX1NISUZUOwotCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7Ci0KLQkvKiB0cnkgdG8gbWVyZ2Ugc2FtZSBwYWdlIHNpemUgYW5kIGNvbnRpbnVvdXMgKi8KLQlmb3IgKGkgPSAwOyBucl9yYW5nZSA+IDEgJiYgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0OwotCQlpZiAobXJbaV0uZW5kICE9IG1yW2krMV0uc3RhcnQgfHwKLQkJICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICE9IG1yW2krMV0ucGFnZV9zaXplX21hc2spCi0JCQljb250aW51ZTsKLQkJLyogbW92ZSBpdCAqLwotCQlvbGRfc3RhcnQgPSBtcltpXS5zdGFydDsKLQkJbWVtbW92ZSgmbXJbaV0sICZtcltpKzFdLAotCQkJIChucl9yYW5nZSAtIDEgLSBpKSAqIHNpemVvZiAoc3RydWN0IG1hcF9yYW5nZSkpOwotCQltcltpLS1dLnN0YXJ0ID0gb2xkX3N0YXJ0OwotCQlucl9yYW5nZS0tOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQlwcmludGsoS0VSTl9ERUJVRyAiICUwMTBseCAtICUwMTBseCBwYWdlICVzXG4iLAotCQkJCW1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCi0JCQkobXJbaV0ucGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMUcpKT8iMUciOigKLQkJCSAobXJbaV0ucGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMk0pKT8iMk0iOiI0ayIpKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQsIHVzZV9wc2UsIHVzZV9nYnBhZ2VzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQlsYXN0X21hcF9hZGRyID0ga2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCgKLQkJCQkJbXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKLQkJCQkJbXJbaV0ucGFnZV9zaXplX21hc2spOwotCi0JaWYgKCFhZnRlcl9ib290bWVtKQotCQltbXVfY3I0X2ZlYXR1cmVzID0gcmVhZF9jcjQoKTsKLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSAmJiB0YWJsZV9lbmQgPiB0YWJsZV9zdGFydCkKLQkJcmVzZXJ2ZV9lYXJseSh0YWJsZV9zdGFydCA8PCBQQUdFX1NISUZULAotCQkJCSB0YWJsZV9lbmQgPDwgUEFHRV9TSElGVCwgIlBHVEFCTEUiKTsKLQotCXByaW50ayhLRVJOX0lORk8gImxhc3RfbWFwX2FkZHI6ICVseCBlbmQ6ICVseFxuIiwKLQkJCSBsYXN0X21hcF9hZGRyLCBlbmQpOwotCi0JaWYgKCFhZnRlcl9ib290bWVtKQotCQllYXJseV9tZW10ZXN0KHN0YXJ0LCBlbmQpOwotCi0JcmV0dXJuIGxhc3RfbWFwX2FkZHIgPj4gUEFHRV9TSElGVDsKLX0KLQogI2lmbmRlZiBDT05GSUdfTlVNQQogdm9pZCBfX2luaXQgaW5pdG1lbV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7CkBAIC05MTAsMjggKzY4MSw2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KIAotLyoKLSAqIGRldm1lbV9pc19hbGxvd2VkKCkgY2hlY2tzIHRvIHNlZSBpZiAvZGV2L21lbSBhY2Nlc3MgdG8gYSBjZXJ0YWluIGFkZHJlc3MKLSAqIGlzIHZhbGlkLiBUaGUgYXJndW1lbnQgaXMgYSBwaHlzaWNhbCBwYWdlIG51bWJlci4KLSAqCi0gKgotICogT24geDg2LCBhY2Nlc3MgaGFzIHRvIGJlIGdpdmVuIHRvIHRoZSBmaXJzdCBtZWdhYnl0ZSBvZiByYW0gYmVjYXVzZSB0aGF0IGFyZWEKLSAqIGNvbnRhaW5zIGJpb3MgY29kZSBhbmQgZGF0YSByZWdpb25zIHVzZWQgYnkgWCBhbmQgZG9zZW11IGFuZCBzaW1pbGFyIGFwcHMuCi0gKiBBY2Nlc3MgaGFzIHRvIGJlIGdpdmVuIHRvIG5vbi1rZXJuZWwtcmFtIGFyZWFzIGFzIHdlbGwsIHRoZXNlIGNvbnRhaW4gdGhlIFBDSQotICogbW1pbyByZXNvdXJjZXMgYXMgd2VsbCBhcyBwb3RlbnRpYWwgYmlvcy9hY3BpIGRhdGEgcmVnaW9ucy4KLSAqLwotaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQotewotCWlmIChwYWdlbnIgPD0gMjU2KQotCQlyZXR1cm4gMTsKLQlpZiAoaW9tZW1faXNfZXhjbHVzaXZlKHBhZ2VuciA8PCBQQUdFX1NISUZUKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFwYWdlX2lzX3JhbShwYWdlbnIpKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jLCBrY29yZV9rZXJuZWwsCiAJCQkga2NvcmVfbW9kdWxlcywga2NvcmVfdnN5c2NhbGw7CiAKQEAgLTEwMTksMTMgKzc2OCw2IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi12b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlmcmVlX2luaXRfcGFnZXMoImluaXRyZCBtZW1vcnkiLCBzdGFydCwgZW5kKTsKLX0KLSNlbmRpZgotCiBpbnQgX19pbml0IHJlc2VydmVfYm9vdG1lbV9nZW5lcmljKHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQkJICAgaW50IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW9tYXBfMzIuYyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKaW5kZXggMDQxMDJkNC4uZTMzMWY3NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9tYXBfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3BhdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogaW50IGlzX2lvX21hcHBpbmdfcG9zc2libGUocmVzb3VyY2Vfc2l6ZV90IGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTMxLDE2ICszMiwyOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNfaW9fbWFwcGluZ19wb3NzaWJsZSk7CiAKLS8qIE1hcCAncGZuJyB1c2luZyBmaXhlZCBtYXAgJ3R5cGUnIGFuZCBwcm90ZWN0aW9ucyAncHJvdCcKLSAqLwotdm9pZCAqCi1pb21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KQordm9pZCAqa21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KQogewogCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDsKIAl1bnNpZ25lZCBsb25nIHZhZGRyOwogCiAJcGFnZWZhdWx0X2Rpc2FibGUoKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOworCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CisJc2V0X3B0ZShrbWFwX3B0ZSAtIGlkeCwgcGZuX3B0ZShwZm4sIHByb3QpKTsKKwlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworfQorCisvKgorICogTWFwICdwZm4nIHVzaW5nIGZpeGVkIG1hcCAndHlwZScgYW5kIHByb3RlY3Rpb25zICdwcm90JworICovCit2b2lkICoKK2lvbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCit7CiAJLyoKIAkgKiBGb3Igbm9uLVBBVCBzeXN0ZW1zLCBwcm9tb3RlIFBBR0VfS0VSTkVMX1dDIHRvIFBBR0VfS0VSTkVMX1VDX01JTlVTLgogCSAqIFBBR0VfS0VSTkVMX1dDIG1hcHMgdG8gUFdULCB3aGljaCB0cmFuc2xhdGVzIHRvIHVuY2FjaGVkIGlmIHRoZQpAQCAtNTAsMTIgKzYzLDcgQEAKIAlpZiAoIXBhdF9lbmFibGVkICYmIHBncHJvdF92YWwocHJvdCkgPT0gcGdwcm90X3ZhbChQQUdFX0tFUk5FTF9XQykpCiAJCXByb3QgPSBQQUdFX0tFUk5FTF9VQ19NSU5VUzsKIAotCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKLQl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwotCXNldF9wdGUoa21hcF9wdGUtaWR4LCBwZm5fcHRlKHBmbiwgcHJvdCkpOwotCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOwotCi0JcmV0dXJuICh2b2lkKikgdmFkZHI7CisJcmV0dXJuIGttYXBfYXRvbWljX3Byb3RfcGZuKHBmbiwgdHlwZSwgcHJvdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9hdG9taWNfcHJvdF9wZm4pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggNDMzZjdiZC4uMGRmYTA5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjIsMTMgKzIyLDE3IEBACiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vcGF0Lmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBoeXNfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBwaHlzX2FkZHJfdmFsaWQocmVzb3VyY2Vfc2l6ZV90IGFkZHIpCiB7Ci0JcmV0dXJuIGFkZHIgPCAoMVVMIDw8IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyk7CisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJcmV0dXJuICEoYWRkciA+PiBib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKIHsKIAlpZiAoeCA+PSBfX1NUQVJUX0tFUk5FTF9tYXApIHsKQEAgLTM4LDggKzQyLDcgQEAKIAl9IGVsc2UgewogCQlWSVJUVUFMX0JVR19PTih4IDwgUEFHRV9PRkZTRVQpOwogCQl4IC09IFBBR0VfT0ZGU0VUOwotCQlWSVJUVUFMX0JVR19PTihzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgPyB4ID4gTUFYTUVNIDoKLQkJCQkJIXBoeXNfYWRkcl92YWxpZCh4KSk7CisJCVZJUlRVQUxfQlVHX09OKCFwaHlzX2FkZHJfdmFsaWQoeCkpOwogCX0KIAlyZXR1cm4geDsKIH0KQEAgLTU2LDEwICs1OSw4IEBACiAJCWlmICh4IDwgUEFHRV9PRkZTRVQpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCXggLT0gUEFHRV9PRkZTRVQ7Ci0JCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgPwotCQkJCXggPiBNQVhNRU0gOiAhcGh5c19hZGRyX3ZhbGlkKHgpKSB7CisJCWlmICghcGh5c19hZGRyX3ZhbGlkKHgpKQogCQkJcmV0dXJuIGZhbHNlOwotCQl9CiAJfQogCiAJcmV0dXJuIHBmbl92YWxpZCh4ID4+IFBBR0VfU0hJRlQpOwpAQCAtNjgsMTggKzY5LDEyIEBACiAKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgaW50IHBoeXNfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfVklSVFVBTAogdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nIHgpCiB7Ci0JLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHM7IG5vdCBhdmFpbGFibGUgYXQgdGhlIGJvb3QgdGltZSAqLworCS8qIFZNQUxMT0NfKiBhcmVuJ3QgY29uc3RhbnRzICAqLwogCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7Ci0JVklSVFVBTF9CVUdfT04oc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HICYmCi0JCWlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSk7CisJVklSVFVBTF9CVUdfT04oX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpOwogCXJldHVybiB4IC0gUEFHRV9PRkZTRVQ7CiB9CiBFWFBPUlRfU1lNQk9MKF9fcGh5c19hZGRyKTsKQEAgLTg5LDcgKzg0LDkgQEAKIHsKIAlpZiAoeCA8IFBBR0VfT0ZGU0VUKQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fQk9PVElORyAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpCisJaWYgKF9fdm1hbGxvY19zdGFydF9zZXQgJiYgaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHggPj0gRklYQUREUl9TVEFSVCkKIAkJcmV0dXJuIGZhbHNlOwogCXJldHVybiBwZm5fdmFsaWQoKHggLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCk7CiB9CkBAIC01MDgsMTMgKzUwNSwxOSBAQAogCXJldHVybiAmYm1fcHRlW3B0ZV9pbmRleChhZGRyKV07CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsb3RfdmlydFtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOworCiB2b2lkIF9faW5pdCBlYXJseV9pb3JlbWFwX2luaXQodm9pZCkKIHsKIAlwbWRfdCAqcG1kOworCWludCBpOwogCiAJaWYgKGVhcmx5X2lvcmVtYXBfZGVidWcpCiAJCXByaW50ayhLRVJOX0lORk8gImVhcmx5X2lvcmVtYXBfaW5pdCgpXG4iKTsKIAorCWZvciAoaSA9IDA7IGkgPCBGSVhfQlRNQVBTX1NMT1RTOyBpKyspCisJCXNsb3RfdmlydFtpXSA9IF9fZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOIC0gTlJfRklYX0JUTUFQUyppKTsKKwogCXBtZCA9IGVhcmx5X2lvcmVtYXBfcG1kKGZpeF90b192aXJ0KEZJWF9CVE1BUF9CRUdJTikpOwogCW1lbXNldChibV9wdGUsIDAsIHNpemVvZihibV9wdGUpKTsKIAlwbWRfcG9wdWxhdGVfa2VybmVsKCZpbml0X21tLCBwbWQsIGJtX3B0ZSk7CkBAIC01ODEsNiArNTg0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pb21lbSAqcHJldl9tYXBbRklYX0JUTUFQU19TTE9UU10gX19pbml0ZGF0YTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZfc2l6ZVtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOworCiBzdGF0aWMgaW50IF9faW5pdCBjaGVja19lYXJseV9pb3JlbWFwX2xlYWsodm9pZCkKIHsKIAlpbnQgY291bnQgPSAwOwpAQCAtNjAyLDcgKzYwNiw4IEBACiB9CiBsYXRlX2luaXRjYWxsKGNoZWNrX2Vhcmx5X2lvcmVtYXBfbGVhayk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBfX2lvbWVtICpfX2Vhcmx5X2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2lvbWVtICoKK19fZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHI7CiAJdW5zaWduZWQgaW50IG5ycGFnZXM7CkBAIC02NjgsOSArNjczLDkgQEAKIAkJLS1ucnBhZ2VzOwogCX0KIAlpZiAoZWFybHlfaW9yZW1hcF9kZWJ1ZykKLQkJcHJpbnRrKEtFUk5fQ09OVCAiJTA4bHggKyAlMDhseFxuIiwgb2Zmc2V0LCBmaXhfdG9fdmlydChpZHgwKSk7CisJCXByaW50ayhLRVJOX0NPTlQgIiUwOGx4ICsgJTA4bHhcbiIsIG9mZnNldCwgc2xvdF92aXJ0W3Nsb3RdKTsKIAotCXByZXZfbWFwW3Nsb3RdID0gKHZvaWQgX19pb21lbSAqKShvZmZzZXQgKyBmaXhfdG9fdmlydChpZHgwKSk7CisJcHJldl9tYXBbc2xvdF0gPSAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIHNsb3RfdmlydFtzbG90XSk7CiAJcmV0dXJuIHByZXZfbWFwW3Nsb3RdOwogfQogCkBAIC03MzgsOCArNzQzLDMgQEAKIAl9CiAJcHJldl9tYXBbc2xvdF0gPSBOVUxMOwogfQotCi12b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCkKLXsKLQlXQVJOX09OKDEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21taW8uYyBiL2FyY2gveDg2L21tL2ttbWlvLmMKaW5kZXggNmE1MThkZC4uNGYxMTVlMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21taW8uYworKysgYi9hcmNoL3g4Ni9tbS9rbW1pby5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlzdHJ1Y3Qga21taW9fY29udGV4dCAqY3R4ID0gJmdldF9jcHVfdmFyKGttbWlvX2N0eCk7CiAKIAlpZiAoIWN0eC0+YWN0aXZlKSB7Ci0JCXByX3dhcm5pbmcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCisJCXByX2RlYnVnKCJrbW1pbzogc3B1cmlvdXMgZGVidWcgdHJhcCBvbiBDUFUgJWQuXG4iLAogCQkJCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL21lbXRlc3QuYyBiL2FyY2gveDg2L21tL21lbXRlc3QuYwppbmRleCAwYmNkNzg4Li42MDVjOGJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKKysrIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCkBAIC0xMDAsNiArMTAwLDkgQEAKIHsKIAlpZiAoYXJnKQogCQltZW10ZXN0X3BhdHRlcm4gPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOworCWVsc2UKKwkJbWVtdGVzdF9wYXR0ZXJuID0gQVJSQVlfU0laRShwYXR0ZXJucyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jIGIvYXJjaC94ODYvbW0vbnVtYV8zMi5jCmluZGV4IDQ1MWZlOTUuLjNkYWVmYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKQEAgLTQxNiwxMCArNDE2LDExIEBACiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKQogCQlwcm9wYWdhdGVfZTgyMF9tYXBfbm9kZShuaWQpOwogCi0JZm9yX2VhY2hfb25saW5lX25vZGUobmlkKQorCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQltZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpKTsKKwkJTk9ERV9EQVRBKG5pZCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhW25pZF07CisJfQogCi0JTk9ERV9EQVRBKDApLT5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVswXTsKIAlzZXR1cF9ib290bWVtX2FsbG9jYXRvcigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA5YzQyOTQ5Li5kNzFlMWI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgpAQCAtMzMsNiArMzQsNyBAQAogCXVuc2lnbmVkIGxvbmcJcGZuOwogCXVuc2lnbmVkCWZvcmNlX3NwbGl0IDogMTsKIAlpbnQJCWN1cnBhZ2U7CisJc3RydWN0IHBhZ2UJKipwYWdlczsKIH07CiAKIC8qCkBAIC00NSw2ICs0Nyw3IEBACiAKICNkZWZpbmUgQ1BBX0ZMVVNIVExCIDEKICNkZWZpbmUgQ1BBX0FSUkFZIDIKKyNkZWZpbmUgQ1BBX1BBR0VTX0FSUkFZIDQKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkaXJlY3RfcGFnZXNfY291bnRbUEdfTEVWRUxfTlVNXTsKQEAgLTk1LDcgKzk4LDcgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGhpZ2htYXBfZW5kX3Bmbih2b2lkKQogewotCXJldHVybiBfX3BhKHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpX2VuZCwgUE1EX1NJWkUpKSA+PiBQQUdFX1NISUZUOworCXJldHVybiBfX3BhKHJvdW5kdXAoX2Jya19lbmQsIFBNRF9TSVpFKSkgPj4gUEFHRV9TSElGVDsKIH0KIAogI2VuZGlmCkBAIC0yMDEsMTAgKzIwNCwxMCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FycmF5KHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCBpbnQgbnVtcGFnZXMsIGludCBjYWNoZSkKK3N0YXRpYyB2b2lkIGNwYV9mbHVzaF9hcnJheSh1bnNpZ25lZCBsb25nICpzdGFydCwgaW50IG51bXBhZ2VzLCBpbnQgY2FjaGUsCisJCQkgICAgaW50IGluX2ZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXVuc2lnbmVkIGludCBpLCBsZXZlbDsKLQl1bnNpZ25lZCBsb25nICphZGRyOwogCiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAKQEAgLTIyNSwxNCArMjI4LDIyIEBACiAJICogd2lsbCBjYXVzZSBhbGwgb3RoZXIgQ1BVcyB0byBmbHVzaCB0aGUgc2FtZQogCSAqIGNhY2hlbGluZXM6CiAJICovCi0JZm9yIChpID0gMCwgYWRkciA9IHN0YXJ0OyBpIDwgbnVtcGFnZXM7IGkrKywgYWRkcisrKSB7Ci0JCXB0ZV90ICpwdGUgPSBsb29rdXBfYWRkcmVzcygqYWRkciwgJmxldmVsKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcGFnZXM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCXB0ZV90ICpwdGU7CisKKwkJaWYgKGluX2ZsYWdzICYgQ1BBX1BBR0VTX0FSUkFZKQorCQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVsc2UKKwkJCWFkZHIgPSBzdGFydFtpXTsKKworCQlwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyLCAmbGV2ZWwpOwogCiAJCS8qCiAJCSAqIE9ubHkgZmx1c2ggcHJlc2VudCBhZGRyZXNzZXM6CiAJCSAqLwogCQlpZiAocHRlICYmIChwdGVfdmFsKCpwdGUpICYgX1BBR0VfUFJFU0VOVCkpCi0JCQljbGZsdXNoX2NhY2hlX3JhbmdlKCh2b2lkICopICphZGRyLCBQQUdFX1NJWkUpOworCQkJY2xmbHVzaF9jYWNoZV9yYW5nZSgodm9pZCAqKWFkZHIsIFBBR0VfU0laRSk7CiAJfQogfQogCkBAIC01ODQsNyArNTk1LDkgQEAKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7CiAJcHRlX3QgKmtwdGUsIG9sZF9wdGU7CiAKLQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwlpZiAoY3BhLT5mbGFncyAmIENQQV9QQUdFU19BUlJBWSkKKwkJYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhjcGEtPnBhZ2VzW2NwYS0+Y3VycGFnZV0pOworCWVsc2UgaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCiAJCWFkZHJlc3MgPSBjcGEtPnZhZGRyW2NwYS0+Y3VycGFnZV07CiAJZWxzZQogCQlhZGRyZXNzID0gKmNwYS0+dmFkZHI7CkBAIC02ODcsNyArNzAwLDkgQEAKIAkgKiBObyBuZWVkIHRvIHJlZG8sIHdoZW4gdGhlIHByaW1hcnkgY2FsbCB0b3VjaGVkIHRoZSBkaXJlY3QKIAkgKiBtYXBwaW5nIGFscmVhZHk6CiAJICovCi0JaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCisJaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfUEFHRVNfQVJSQVkpCisJCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNwYS0+cGFnZXNbY3BhLT5jdXJwYWdlXSk7CisJZWxzZSBpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKIAkJdmFkZHIgPSBjcGEtPnZhZGRyW2NwYS0+Y3VycGFnZV07CiAJZWxzZQogCQl2YWRkciA9ICpjcGEtPnZhZGRyOwpAQCAtNjk4LDcgKzcxMyw3IEBACiAJCWFsaWFzX2NwYSA9ICpjcGE7CiAJCXRlbXBfY3BhX3ZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIF9fdmEoY3BhLT5wZm4gPDwgUEFHRV9TSElGVCk7CiAJCWFsaWFzX2NwYS52YWRkciA9ICZ0ZW1wX2NwYV92YWRkcjsKLQkJYWxpYXNfY3BhLmZsYWdzICY9IH5DUEFfQVJSQVk7CisJCWFsaWFzX2NwYS5mbGFncyAmPSB+KENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSk7CiAKIAogCQlyZXQgPSBfX2NoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYWxpYXNfY3BhLCAwKTsKQEAgLTcxMSw3ICs3MjYsNyBAQAogCSAqIE5vIG5lZWQgdG8gcmVkbywgd2hlbiB0aGUgcHJpbWFyeSBjYWxsIHRvdWNoZWQgdGhlIGhpZ2gKIAkgKiBtYXBwaW5nIGFscmVhZHk6CiAJICovCi0JaWYgKHdpdGhpbih2YWRkciwgKHVuc2lnbmVkIGxvbmcpIF90ZXh0LCAodW5zaWduZWQgbG9uZykgX2VuZCkpCisJaWYgKHdpdGhpbih2YWRkciwgKHVuc2lnbmVkIGxvbmcpIF90ZXh0LCBfYnJrX2VuZCkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTcyNCw3ICs3MzksNyBAQAogCWFsaWFzX2NwYSA9ICpjcGE7CiAJdGVtcF9jcGFfdmFkZHIgPSAoY3BhLT5wZm4gPDwgUEFHRV9TSElGVCkgKyBfX1NUQVJUX0tFUk5FTF9tYXAgLSBwaHlzX2Jhc2U7CiAJYWxpYXNfY3BhLnZhZGRyID0gJnRlbXBfY3BhX3ZhZGRyOwotCWFsaWFzX2NwYS5mbGFncyAmPSB+Q1BBX0FSUkFZOworCWFsaWFzX2NwYS5mbGFncyAmPSB+KENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSk7CiAKIAkvKgogCSAqIFRoZSBoaWdoIG1hcHBpbmcgcmFuZ2UgaXMgaW1wcmVjaXNlLCBzbyBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZS4KQEAgLTc0NSw3ICs3NjAsNyBAQAogCQkgKi8KIAkJY3BhLT5udW1wYWdlcyA9IG51bXBhZ2VzOwogCQkvKiBmb3IgYXJyYXkgY2hhbmdlcywgd2UgY2FuJ3QgdXNlIGxhcmdlIHBhZ2UgKi8KLQkJaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCisJCWlmIChjcGEtPmZsYWdzICYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpCiAJCQljcGEtPm51bXBhZ2VzID0gMTsKIAogCQlpZiAoIWRlYnVnX3BhZ2VhbGxvYykKQEAgLTc2OSw3ICs3ODQsNyBAQAogCQkgKi8KIAkJQlVHX09OKGNwYS0+bnVtcGFnZXMgPiBudW1wYWdlcyk7CiAJCW51bXBhZ2VzIC09IGNwYS0+bnVtcGFnZXM7Ci0JCWlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQorCQlpZiAoY3BhLT5mbGFncyAmIChDUEFfUEFHRVNfQVJSQVkgfCBDUEFfQVJSQVkpKQogCQkJY3BhLT5jdXJwYWdlKys7CiAJCWVsc2UKIAkJCSpjcGEtPnZhZGRyICs9IGNwYS0+bnVtcGFnZXMgKiBQQUdFX1NJWkU7CkBAIC03ODYsNyArODAxLDggQEAKIAogc3RhdGljIGludCBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCSAgICBwZ3Byb3RfdCBtYXNrX3NldCwgcGdwcm90X3QgbWFza19jbHIsCi0JCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGFycmF5KQorCQkJCSAgICBpbnQgZm9yY2Vfc3BsaXQsIGludCBpbl9mbGFnLAorCQkJCSAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXN0cnVjdCBjcGFfZGF0YSBjcGE7CiAJaW50IHJldCwgY2FjaGUsIGNoZWNrYWxpYXM7CkBAIC04MDEsMTUgKzgxNyw3IEBACiAJCXJldHVybiAwOwogCiAJLyogRW5zdXJlIHdlIGFyZSBQQUdFX1NJWkUgYWxpZ25lZCAqLwotCWlmICghYXJyYXkpIHsKLQkJaWYgKCphZGRyICYgflBBR0VfTUFTSykgewotCQkJKmFkZHIgJj0gUEFHRV9NQVNLOwotCQkJLyoKLQkJCSAqIFBlb3BsZSBzaG91bGQgbm90IGJlIHBhc3NpbmcgaW4gdW5hbGlnbmVkIGFkZHJlc3NlczoKLQkJCSAqLwotCQkJV0FSTl9PTl9PTkNFKDEpOwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoaW5fZmxhZyAmIENQQV9BUlJBWSkgewogCQlpbnQgaTsKIAkJZm9yIChpID0gMDsgaSA8IG51bXBhZ2VzOyBpKyspIHsKIAkJCWlmIChhZGRyW2ldICYgflBBR0VfTUFTSykgewpAQCAtODE3LDYgKzgyNSwxOCBAQAogCQkJCVdBUk5fT05fT05DRSgxKTsKIAkJCX0KIAkJfQorCX0gZWxzZSBpZiAoIShpbl9mbGFnICYgQ1BBX1BBR0VTX0FSUkFZKSkgeworCQkvKgorCQkgKiBpbl9mbGFnIG9mIENQQV9QQUdFU19BUlJBWSBpbXBsaWVzIGl0IGlzIGFsaWduZWQuCisJCSAqIE5vIG5lZWQgdG8gY2VoY2sgaW4gdGhhdCBjYXNlCisJCSAqLworCQlpZiAoKmFkZHIgJiB+UEFHRV9NQVNLKSB7CisJCQkqYWRkciAmPSBQQUdFX01BU0s7CisJCQkvKgorCQkJICogUGVvcGxlIHNob3VsZCBub3QgYmUgcGFzc2luZyBpbiB1bmFsaWduZWQgYWRkcmVzc2VzOgorCQkJICovCisJCQlXQVJOX09OX09OQ0UoMSk7CisJCX0KIAl9CiAKIAkvKiBNdXN0IGF2b2lkIGFsaWFzaW5nIG1hcHBpbmdzIGluIHRoZSBoaWdobWVtIGNvZGUgKi8KQEAgLTgzMiw2ICs4NTIsNyBAQAogCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOwogCiAJY3BhLnZhZGRyID0gYWRkcjsKKwljcGEucGFnZXMgPSBwYWdlczsKIAljcGEubnVtcGFnZXMgPSBudW1wYWdlczsKIAljcGEubWFza19zZXQgPSBtYXNrX3NldDsKIAljcGEubWFza19jbHIgPSBtYXNrX2NscjsKQEAgLTgzOSw4ICs4NjAsOCBAQAogCWNwYS5jdXJwYWdlID0gMDsKIAljcGEuZm9yY2Vfc3BsaXQgPSBmb3JjZV9zcGxpdDsKIAotCWlmIChhcnJheSkKLQkJY3BhLmZsYWdzIHw9IENQQV9BUlJBWTsKKwlpZiAoaW5fZmxhZyAmIChDUEFfQVJSQVkgfCBDUEFfUEFHRVNfQVJSQVkpKQorCQljcGEuZmxhZ3MgfD0gaW5fZmxhZzsKIAogCS8qIE5vIGFsaWFzIGNoZWNraW5nIGZvciBfTlggYml0IG1vZGlmaWNhdGlvbnMgKi8KIAljaGVja2FsaWFzID0gKHBncHJvdF92YWwobWFza19zZXQpIHwgcGdwcm90X3ZhbChtYXNrX2NscikpICE9IF9QQUdFX05YOwpAQCAtODY2LDkgKzg4NywxMCBAQAogCSAqIHdiaW5kdik6CiAJICovCiAJaWYgKCFyZXQgJiYgY3B1X2hhc19jbGZsdXNoKSB7Ci0JCWlmIChjcGEuZmxhZ3MgJiBDUEFfQVJSQVkpCi0JCQljcGFfZmx1c2hfYXJyYXkoYWRkciwgbnVtcGFnZXMsIGNhY2hlKTsKLQkJZWxzZQorCQlpZiAoY3BhLmZsYWdzICYgKENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSkpIHsKKwkJCWNwYV9mbHVzaF9hcnJheShhZGRyLCBudW1wYWdlcywgY2FjaGUsCisJCQkJCWNwYS5mbGFncywgcGFnZXMpOworCQl9IGVsc2UKIAkJCWNwYV9mbHVzaF9yYW5nZSgqYWRkciwgbnVtcGFnZXMsIGNhY2hlKTsKIAl9IGVsc2UKIAkJY3BhX2ZsdXNoX2FsbChjYWNoZSk7CkBAIC04ODgsMTQgKzkxMCwyOCBAQAogCQkJCSAgICAgICBwZ3Byb3RfdCBtYXNrLCBpbnQgYXJyYXkpCiB7CiAJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihhZGRyLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsCi0JCWFycmF5KTsKKwkJKGFycmF5ID8gQ1BBX0FSUkFZIDogMCksIE5VTEwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaGFuZ2VfcGFnZV9hdHRyX2NsZWFyKHVuc2lnbmVkIGxvbmcgKmFkZHIsIGludCBudW1wYWdlcywKIAkJCQkJIHBncHJvdF90IG1hc2ssIGludCBhcnJheSkKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgbWFzaywgMCwKLQkJYXJyYXkpOworCQkoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwYV9zZXRfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLAorCQkJCSAgICAgICBwZ3Byb3RfdCBtYXNrKQoreworCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoTlVMTCwgbnVtcGFnZXMsIG1hc2ssIF9fcGdwcm90KDApLCAwLAorCQlDUEFfUEFHRVNfQVJSQVksIHBhZ2VzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3BhX2NsZWFyX3BhZ2VzX2FycmF5KHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBudW1wYWdlcywKKwkJCQkJIHBncHJvdF90IG1hc2spCit7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgX19wZ3Byb3QoMCksIG1hc2ssIDAsCisJCUNQQV9QQUdFU19BUlJBWSwgcGFnZXMpOwogfQogCiBpbnQgX3NldF9tZW1vcnlfdWModW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCkBAIC0xMDQzLDcgKzEwNzksNyBAQAogaW50IHNldF9tZW1vcnlfNGsodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpCiB7CiAJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscigmYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLAotCQkJCQlfX3BncHJvdCgwKSwgMSwgMCk7CisJCQkJCV9fcGdwcm90KDApLCAxLCAwLCBOVUxMKTsKIH0KIAogaW50IHNldF9wYWdlc191YyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKQpAQCAtMTA1NCw2ICsxMDkwLDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc191Yyk7CiAKK2ludCBzZXRfcGFnZXNfYXJyYXlfdWMoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJaW50IGk7CisJaW50IGZyZWVfaWR4OworCisJZm9yIChpID0gMDsgaSA8IGFkZHJpbmFycmF5OyBpKyspIHsKKwkJc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZXNbaV0pOworCQllbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKwkJaWYgKHJlc2VydmVfbWVtdHlwZShzdGFydCwgZW5kLCBfUEFHRV9DQUNIRV9VQ19NSU5VUywgTlVMTCkpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKGNwYV9zZXRfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LAorCQkJX19wZ3Byb3QoX1BBR0VfQ0FDSEVfVUNfTUlOVVMpKSA9PSAwKSB7CisJCXJldHVybiAwOyAvKiBTdWNjZXNzICovCisJfQorZXJyX291dDoKKwlmcmVlX2lkeCA9IGk7CisJZm9yIChpID0gMDsgaSA8IGZyZWVfaWR4OyBpKyspIHsKKwkJc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZXNbaV0pOworCQllbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKwkJZnJlZV9tZW10eXBlKHN0YXJ0LCBlbmQpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3VjKTsKKwogaW50IHNldF9wYWdlc193YihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKQEAgLTEwNjIsNiArMTEyNywyNiBAQAogfQogRVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfd2IpOwogCitpbnQgc2V0X3BhZ2VzX2FycmF5X3diKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBhZGRyaW5hcnJheSkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJaW50IGk7CisKKwlyZXR2YWwgPSBjcGFfY2xlYXJfcGFnZXNfYXJyYXkocGFnZXMsIGFkZHJpbmFycmF5LAorCQkJX19wZ3Byb3QoX1BBR0VfQ0FDSEVfTUFTSykpOworCisJZm9yIChpID0gMDsgaSA8IGFkZHJpbmFycmF5OyBpKyspIHsKKwkJc3RhcnQgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZXNbaV0pOworCQllbmQgPSBzdGFydCArIFBBR0VfU0laRTsKKwkJZnJlZV9tZW10eXBlKHN0YXJ0LCBlbmQpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKHNldF9wYWdlc19hcnJheV93Yik7CisKIGludCBzZXRfcGFnZXNfeChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC5jIGIvYXJjaC94ODYvbW0vcGF0LmMKaW5kZXggMmVkMzcxNS4uNjQwMzM5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0LmMKKysrIGIvYXJjaC94ODYvbW0vcGF0LmMKQEAgLTY3NywxMCArNjc3LDExIEBACiAJaXNfcmFtID0gcGF0X3BhZ2VyYW5nZV9pc19yYW0ocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAKIAkvKgotCSAqIHJlc2VydmVfcGZuX3JhbmdlKCkgZG9lc24ndCBzdXBwb3J0IFJBTSBwYWdlcy4KKwkgKiByZXNlcnZlX3Bmbl9yYW5nZSgpIGRvZXNuJ3Qgc3VwcG9ydCBSQU0gcGFnZXMuIE1haW50YWluIHRoZSBjdXJyZW50CisJICogYmVoYXZpb3Igd2l0aCBSQU0gcGFnZXMgYnkgcmV0dXJuaW5nIHN1Y2Nlc3MuCiAJICovCiAJaWYgKGlzX3JhbSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CiAKIAlyZXQgPSByZXNlcnZlX21lbXR5cGUocGFkZHIsIHBhZGRyICsgc2l6ZSwgd2FudF9mbGFncywgJmZsYWdzKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCmluZGV4IGYyZTQ3N2MuLjQ2Yzg4MzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAl9CiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7CiAJaWYgKHB0ZV92YWwocHRldmFsKSkKLQkJc2V0X3B0ZV9wcmVzZW50KCZpbml0X21tLCB2YWRkciwgcHRlLCBwdGV2YWwpOworCQlzZXRfcHRlX2F0KCZpbml0X21tLCB2YWRkciwgcHRlLCBwdGV2YWwpOwogCWVsc2UKIAkJcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwgcHRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vdGxiLmMgYi9hcmNoL3g4Ni9tbS90bGIuYwppbmRleCBhNjU0ZDU5Li44MjFlOTcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS90bGIuYworKysgYi9hcmNoL3g4Ni9tbS90bGIuYwpAQCAtMTg3LDExICsxODcsNiBAQAogCQkgICAgICAgY3B1bWFzaywgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKIAogCS8qCi0JICogTWFrZSB0aGUgYWJvdmUgbWVtb3J5IG9wZXJhdGlvbnMgZ2xvYmFsbHkgdmlzaWJsZSBiZWZvcmUKLQkgKiBzZW5kaW5nIHRoZSBJUEkuCi0JICovCi0Jc21wX21iKCk7Ci0JLyoKIAkgKiBXZSBoYXZlIHRvIHNlbmQgdGhlIElQSSBvbmx5IHRvCiAJICogQ1BVcyBhZmZlY3RlZC4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jb21tb24uYyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwppbmRleCA4MmQyMmZjLi44YzM2MmI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCkBAIC05MCw3ICs5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBjYW5fc2tpcF9wY2lwcm9iZV9kbWlfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGNhbl9za2lwX3BjaXByb2JlX2RtaV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogLyoKICAqIFN5c3RlbXMgd2hlcmUgUENJIElPIHJlc291cmNlIElTQSBhbGlnbm1lbnQgY2FuIGJlIHNraXBwZWQKICAqIHdoZW4gdGhlIElTQSBlbmFibGUgYml0IGluIHRoZSBicmlkZ2UgY29udHJvbCBpcyBub3Qgc2V0CkBAIC0xODMsNyArMTgzLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBwY2lwcm9iZV9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBwY2lwcm9iZV9kbWlfdGFibGVbXSA9IHsKICNpZmRlZiBfX2kzODZfXwogLyoKICAqIExhcHRvcHMgd2hpY2ggbmVlZCBwY2k9YXNzaWduLWJ1c3NlcyB0byBzZWUgQ2FyZGJ1cyBjYXJkcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2Vhcmx5LmMgYi9hcmNoL3g4Ni9wY2kvZWFybHkuYwppbmRleCBmNmFkZjJjLi5hYWYyNmFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvZWFybHkuYworKysgYi9hcmNoL3g4Ni9wY2kvZWFybHkuYwpAQCAtNjksMTEgKzY5LDEyIEBACiAJaW50IGo7CiAJdTMyIHZhbDsKIAotCXByaW50ayhLRVJOX0lORk8gIlBDSTogJTAyeDolMDJ4OiUwMngiLCBidXMsIHNsb3QsIGZ1bmMpOworCXByaW50ayhLRVJOX0lORk8gInBjaSAwMDAwOiUwMng6JTAyeC4lZCBjb25maWcgc3BhY2U6IiwKKwkgICAgICAgYnVzLCBzbG90LCBmdW5jKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gNCkgewogCQlpZiAoIShpICYgMHgwZikpCi0JCQlwcmludGsoIlxuJTA0eDoiLGkpOworCQkJcHJpbnRrKCJcbiAgJTAyeDoiLGkpOwogCiAJCXZhbCA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsIGkpOwogCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CkBAIC05NiwyMCArOTcsMjIgQEAKIAkJCWZvciAoZnVuYyA9IDA7IGZ1bmMgPCA4OyBmdW5jKyspIHsKIAkJCQl1MzIgY2xhc3M7CiAJCQkJdTggdHlwZTsKKwogCQkJCWNsYXNzID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgZnVuYywKIAkJCQkJCQlQQ0lfQ0xBU1NfUkVWSVNJT04pOwogCQkJCWlmIChjbGFzcyA9PSAweGZmZmZmZmZmKQotCQkJCQlicmVhazsKKwkJCQkJY29udGludWU7CiAKIAkJCQllYXJseV9kdW1wX3BjaV9kZXZpY2UoYnVzLCBzbG90LCBmdW5jKTsKIAotCQkJCS8qIE5vIG11bHRpLWZ1bmN0aW9uIGRldmljZT8gKi8KLQkJCQl0eXBlID0gcmVhZF9wY2lfY29uZmlnX2J5dGUoYnVzLCBzbG90LCBmdW5jLAorCQkJCWlmIChmdW5jID09IDApIHsKKwkJCQkJdHlwZSA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKGJ1cywgc2xvdCwKKwkJCQkJCQkJICAgIGZ1bmMsCiAJCQkJCQkJICAgICAgIFBDSV9IRUFERVJfVFlQRSk7Ci0JCQkJaWYgKCEodHlwZSAmIDB4ODApKQotCQkJCQlicmVhazsKKwkJCQkJaWYgKCEodHlwZSAmIDB4ODApKQorCQkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQogCQl9CiAJfQogfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvZml4dXAuYyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCmluZGV4IDdkMzg4ZDUuLjZkZDg5NTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CiAKIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgbXNpX2s4dF9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBtc2lfazh0X2RtaV90YWJsZVtdID0gewogCXsKIAkJLmlkZW50ID0gIk1TSS1LOFQtTmVvMkZpciIsCiAJCS5tYXRjaGVzID0gewpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKi8KIHN0YXRpYyB1MTYgdG9zaGliYV9saW5lX3NpemU7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHRvc2hpYmFfb2hjaTEzOTRfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0Y29uc3QgdG9zaGliYV9vaGNpMTM5NF9kbWlfdGFibGVbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJUb3NoaWJhIFBTNSBiYXNlZCBsYXB0b3AiLAogCQkubWF0Y2hlcyA9IHsKQEAgLTQ5NSwyNiArNDk1LDYgQEAKIAkJCSAgcGNpX3NpZW1lbnNfaW50ZXJydXB0X2NvbnRyb2xsZXIpOwogCiAvKgotICogUmVndWxhciBQQ0kgZGV2aWNlcyBoYXZlIDI1NiBieXRlcywgYnV0IEFNRCBGYW1pbHkgMTBoLzExaCBDUFVzIGhhdmUKLSAqIDQwOTYgYnl0ZXMgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgZWFjaCBmdW5jdGlvbiBvZiB0aGVpciBwcm9jZXNzb3IKLSAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCi0gKi8KLXN0YXRpYyB2b2lkIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JZGV2LT5jZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZV9leHQoZGV2KTsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMjAwLCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwMSwgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDIsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMjAzLCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwNCwgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEzMDAsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMzAxLCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTMwMiwgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEzMDMsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMzA0LCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci0KLS8qCiAgKiBTQjYwMDogRGlzYWJsZSBCQVIxIG9uIGRldmljZSAxNC4wIHRvIGF2b2lkIEhQRVQgcmVzb3VyY2VzIGZyb20KICAqIGNvbmZ1c2luZyB0aGUgUENJIGVuZ2luZToKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNWVhZDgwOC4uZjE4MTdmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC0yNTgsMjQgKzI1OCw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjaV91bm1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JZnJlZV9tZW10eXBlKGFkZHIsIGFkZHIgKyB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwotfQotCi1zdGF0aWMgdm9pZCBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXU2NCBhZGRyID0gKHU2NCl2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpCi0JCQkJCQkmIF9QQUdFX0NBQ0hFX01BU0s7Ci0KLQlyZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgZmxhZ3MsIE5VTEwpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKLQkub3BlbiAgPSBwY2lfdHJhY2tfbW1hcF9wYWdlX3JhbmdlLAotCS5jbG9zZSA9IHBjaV91bm1hcF9wYWdlX3JhbmdlLAogCS5hY2Nlc3MgPSBnZW5lcmljX2FjY2Vzc19waHlzLAogfTsKIApAQCAtMjgzLDExICsyNjYsNiBAQAogCQkJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSkKIHsKIAl1bnNpZ25lZCBsb25nIHByb3Q7Ci0JdTY0IGFkZHIgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIG5ld19mbGFnczsKLQlpbnQgcmV0dmFsOwogCiAJLyogSS9PIHNwYWNlIGNhbm5vdCBiZSBhY2Nlc3NlZCB2aWEgbm9ybWFsIHByb2Nlc3NvciBsb2FkcyBhbmQKIAkgKiBzdG9yZXMgb24gdGhpcyBwbGF0Zm9ybS4KQEAgLTMwOCwyNyArMjg2LDYgQEAKIAogCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CiAKLQlmbGFncyA9IHBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICYgX1BBR0VfQ0FDSEVfTUFTSzsKLQlyZXR2YWwgPSByZXNlcnZlX21lbXR5cGUoYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsICZuZXdfZmxhZ3MpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlpZiAoZmxhZ3MgIT0gbmV3X2ZsYWdzKSB7Ci0JCWlmICghaXNfbmV3X21lbXR5cGVfYWxsb3dlZChmbGFncywgbmV3X2ZsYWdzKSkgewotCQkJZnJlZV9tZW10eXBlKGFkZHIsIGFkZHIrbGVuKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWZsYWdzID0gbmV3X2ZsYWdzOwotCX0KLQotCWlmICgoKHZtYS0+dm1fcGdvZmYgPCBtYXhfbG93X3Bmbl9tYXBwZWQpIHx8Ci0JICAgICAodm1hLT52bV9wZ29mZiA+PSAoMVVMPDwoMzIgLSBQQUdFX1NISUZUKSkgJiYKLQkgICAgICB2bWEtPnZtX3Bnb2ZmIDwgbWF4X3Bmbl9tYXBwZWQpKSAmJgotCSAgICBpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEoYWRkciksIGxlbiwgZmxhZ3MpKSB7Ci0JCWZyZWVfbWVtdHlwZShhZGRyLCBhZGRyICsgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCiAJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAogCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwppbmRleCBmMTA2NWIxLi40MDYxYmIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKKysrIGIvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCkBAIC01MCw4ICs1MCw2IEBACiAJaWYgKHBjaV9yb290X2J1cykKIAkJcGNpX2J1c19hZGRfZGV2aWNlcyhwY2lfcm9vdF9idXMpOwogCi0JcGNpYmlvc19maXh1cF9wZWVyX2JyaWRnZXMoKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02Nyw2ICs2NSw3IEBACiAJcGNpX3Zpc3dzX2luaXQoKTsKICNlbmRpZgogCXBjaV9sZWdhY3lfaW5pdCgpOworCXBjaWJpb3NfZml4dXBfcGVlcl9icmlkZ2VzKCk7CiAJcGNpYmlvc19pcnFfaW5pdCgpOwogCXBjaWJpb3NfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggODliZjkyNC4uOTA1YmI1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KIApAQCAtMjQsMjQgKzI1LDQ5IEBACiAvKiBJbmRpY2F0ZSBpZiB0aGUgbW1jZmcgcmVzb3VyY2VzIGhhdmUgYmVlbiBwbGFjZWQgaW50byB0aGUgcmVzb3VyY2UgdGFibGUuICovCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgcGNpX21tY2ZnX3Jlc291cmNlc19pbnNlcnRlZDsKIAorc3RhdGljIF9faW5pdCBpbnQgZXh0ZW5kX21tY2ZnKGludCBudW0pCit7CisJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpuZXc7CisJaW50IG5ld19udW0gPSBwY2lfbW1jZmdfY29uZmlnX251bSArIG51bTsKKworCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICogbmV3X251bSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXcpCisJCXJldHVybiAtMTsKKworCWlmIChwY2lfbW1jZmdfY29uZmlnKSB7CisJCW1lbWNweShuZXcsIHBjaV9tbWNmZ19jb25maWcsCisJCQkgc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICogbmV3X251bSk7CisJCWtmcmVlKHBjaV9tbWNmZ19jb25maWcpOworCX0KKwlwY2lfbW1jZmdfY29uZmlnID0gbmV3OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBmaWxsX29uZV9tbWNmZyh1NjQgYWRkciwgaW50IHNlZ21lbnQsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaSA9IHBjaV9tbWNmZ19jb25maWdfbnVtOworCisJcGNpX21tY2ZnX2NvbmZpZ19udW0rKzsKKwlwY2lfbW1jZmdfY29uZmlnW2ldLmFkZHJlc3MgPSBhZGRyOworCXBjaV9tbWNmZ19jb25maWdbaV0ucGNpX3NlZ21lbnQgPSBzZWdtZW50OworCXBjaV9tbWNmZ19jb25maWdbaV0uc3RhcnRfYnVzX251bWJlciA9IHN0YXJ0OworCXBjaV9tbWNmZ19jb25maWdbaV0uZW5kX2J1c19udW1iZXIgPSBlbmQ7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcGNpX21tY2ZnX2U3NTIwKHZvaWQpCiB7CiAJdTMyIHdpbjsKIAlyYXdfcGNpX29wcy0+cmVhZCgwLCAwLCBQQ0lfREVWRk4oMCwgMCksIDB4Y2UsIDIsICZ3aW4pOwogCiAJd2luID0gd2luICYgMHhmMDAwOwotCWlmKHdpbiA9PSAweDAwMDAgfHwgd2luID09IDB4ZjAwMCkKLQkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOwotCWVsc2UgewotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDE7Ci0JCXBjaV9tbWNmZ19jb25maWcgPSBremFsbG9jKHNpemVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGNpX21tY2ZnX2NvbmZpZykKLQkJCXJldHVybiBOVUxMOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPSB3aW4gPDwgMTY7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0ucGNpX3NlZ21lbnQgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLnN0YXJ0X2J1c19udW1iZXIgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLmVuZF9idXNfbnVtYmVyID0gMjU1OwotCX0KKwlpZiAod2luID09IDB4MDAwMCB8fCB3aW4gPT0gMHhmMDAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJZmlsbF9vbmVfbW1jZmcod2luIDw8IDE2LCAwLCAwLCAyNTUpOwogCiAJcmV0dXJuICJJbnRlbCBDb3Jwb3JhdGlvbiBFNzUyMCBNZW1vcnkgQ29udHJvbGxlciBIdWIiOwogfQpAQCAtNTAsMTMgKzc2LDExIEBACiB7CiAJdTMyIHBjaWV4YmFyLCBtYXNrID0gMCwgbGVuID0gMDsKIAotCXBjaV9tbWNmZ19jb25maWdfbnVtID0gMTsKLQogCXJhd19wY2lfb3BzLT5yZWFkKDAsIDAsIFBDSV9ERVZGTigwLCAwKSwgMHg0OCwgNCwgJnBjaWV4YmFyKTsKIAogCS8qIEVuYWJsZSBiaXQgKi8KIAlpZiAoIShwY2lleGJhciAmIDEpKQotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDA7CisJCXJldHVybiBOVUxMOwogCiAJLyogU2l6ZSBiaXRzICovCiAJc3dpdGNoICgocGNpZXhiYXIgPj4gMSkgJiAzKSB7CkBAIC03MywyOCArOTcsMjMgQEAKIAkJbGVuICA9IDB4MDQwMDAwMDBVOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDA7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIEVycmF0YSAjMiwgdGhpbmdzIGJyZWFrIHdoZW4gbm90IGFsaWduZWQgb24gYSAyNTZNYiBib3VuZGFyeSAqLwogCS8qIENhbiBvbmx5IGhhcHBlbiBpbiA2NE0vMTI4TSBtb2RlICovCiAKIAlpZiAoKHBjaWV4YmFyICYgbWFzaykgJiAweDBmZmZmZmZmVSkKLQkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIERvbid0IGhpdCB0aGUgQVBJQyByZWdpc3RlcnMgYW5kIHRoZWlyIGZyaWVuZHMgKi8KIAlpZiAoKHBjaWV4YmFyICYgbWFzaykgPj0gMHhmMDAwMDAwMFUpCi0JCXBjaV9tbWNmZ19jb25maWdfbnVtID0gMDsKKwkJcmV0dXJuIE5VTEw7CiAKLQlpZiAocGNpX21tY2ZnX2NvbmZpZ19udW0pIHsKLQkJcGNpX21tY2ZnX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwY2lfbW1jZmdfY29uZmlnKQotCQkJcmV0dXJuIE5VTEw7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyA9IHBjaWV4YmFyICYgbWFzazsKLQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5wY2lfc2VnbWVudCA9IDA7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uc3RhcnRfYnVzX251bWJlciA9IDA7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uZW5kX2J1c19udW1iZXIgPSAobGVuID4+IDIwKSAtIDE7Ci0JfQorCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJZmlsbF9vbmVfbW1jZmcocGNpZXhiYXIgJiBtYXNrLCAwLCAwLCAobGVuID4+IDIwKSAtIDEpOwogCiAJcmV0dXJuICJJbnRlbCBDb3Jwb3JhdGlvbiA5NDVHL0daL1AvUEwgRXhwcmVzcyBNZW1vcnkgQ29udHJvbGxlciBIdWIiOwogfQpAQCAtMTM4LDIyICsxNTcsNzcgQEAKIAkJYnVzbmJpdHMgPSA4OwogCX0KIAotCXBjaV9tbWNmZ19jb25maWdfbnVtID0gKDEgPDwgc2VnbmJpdHMpOwotCXBjaV9tbWNmZ19jb25maWcgPSBremFsbG9jKHNpemVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSAqCi0JCQkJICAgcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOwotCWlmICghcGNpX21tY2ZnX2NvbmZpZykKKwlpZiAoZXh0ZW5kX21tY2ZnKDEgPDwgc2VnbmJpdHMpID09IC0xKQogCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBzZWduYml0cyk7IGkrKykgewotCQlwY2lfbW1jZmdfY29uZmlnW2ldLmFkZHJlc3MgPSBiYXNlICsgKDE8PDI4KSAqIGk7Ci0JCXBjaV9tbWNmZ19jb25maWdbaV0ucGNpX3NlZ21lbnQgPSBpOwotCQlwY2lfbW1jZmdfY29uZmlnW2ldLnN0YXJ0X2J1c19udW1iZXIgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnW2ldLmVuZF9idXNfbnVtYmVyID0gKDEgPDwgYnVzbmJpdHMpIC0gMTsKLQl9CisJZm9yIChpID0gMDsgaSA8ICgxIDw8IHNlZ25iaXRzKTsgaSsrKQorCQlmaWxsX29uZV9tbWNmZyhiYXNlICsgKDE8PDI4KSAqIGksIGksIDAsICgxIDw8IGJ1c25iaXRzKSAtIDEpOwogCiAJcmV0dXJuICJBTUQgRmFtaWx5IDEwaCBOQiI7CiB9CiAKK3N0YXRpYyBib29sIF9faW5pdGRhdGEgbWNwNTVfY2hlY2tlZDsKK3N0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcGNpX21tY2ZnX252aWRpYV9tY3A1NSh2b2lkKQoreworCWludCBidXM7CisJaW50IG1jcDU1X21tY29uZl9mb3VuZCA9IDA7CisKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19yZWdudW0JCT0gMHg5MDsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19yZWdzaXplCQk9IDQ7CisJc3RhdGljIGNvbnN0IHUzMiBleHRjZmdfZW5hYmxlX21hc2sJPSAxPDwzMTsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19zdGFydF9tYXNrCT0gMHhmZjw8MTY7CisJc3RhdGljIGNvbnN0IGludCBleHRjZmdfc3RhcnRfc2hpZnQJPSAxNjsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19zaXplX21hc2sJPSAweDM8PDI4OworCXN0YXRpYyBjb25zdCBpbnQgZXh0Y2ZnX3NpemVfc2hpZnQJPSAyODsKKwlzdGF0aWMgY29uc3QgaW50IGV4dGNmZ19zaXplYnVzW10JPSB7MHgxMDAsIDB4ODAsIDB4NDAsIDB4MjB9OworCXN0YXRpYyBjb25zdCB1MzIgZXh0Y2ZnX2Jhc2VfbWFza1tdCT0gezB4N2ZmOCwgMHg3ZmZjLCAweDdmZmUsIDB4N2ZmZn07CisJc3RhdGljIGNvbnN0IGludCBleHRjZmdfYmFzZV9sc2hpZnQJPSAyNTsKKworCS8qCisJICogZG8gY2hlY2sgaWYgYW1kIGZhbTEwaCBhbHJlYWR5IHRvb2sgb3ZlcgorCSAqLworCWlmICghYWNwaV9kaXNhYmxlZCB8fCBwY2lfbW1jZmdfY29uZmlnX251bSB8fCBtY3A1NV9jaGVja2VkKQorCQlyZXR1cm4gTlVMTDsKKworCW1jcDU1X2NoZWNrZWQgPSB0cnVlOworCWZvciAoYnVzID0gMDsgYnVzIDwgMjU2OyBidXMrKykgeworCQl1NjQgYmFzZTsKKwkJdTMyIGwsIGV4dGNmZzsKKwkJdTE2IHZlbmRvciwgZGV2aWNlOworCQlpbnQgc3RhcnQsIHNpemVfaW5kZXgsIGVuZDsKKworCQlyYXdfcGNpX29wcy0+cmVhZCgwLCBidXMsIFBDSV9ERVZGTigwLCAwKSwgMCwgNCwgJmwpOworCQl2ZW5kb3IgPSBsICYgMHhmZmZmOworCQlkZXZpY2UgPSAobCA+PiAxNikgJiAweGZmZmY7CisKKwkJaWYgKFBDSV9WRU5ET1JfSURfTlZJRElBICE9IHZlbmRvciB8fCAweDAzNjkgIT0gZGV2aWNlKQorCQkJY29udGludWU7CisKKwkJcmF3X3BjaV9vcHMtPnJlYWQoMCwgYnVzLCBQQ0lfREVWRk4oMCwgMCksIGV4dGNmZ19yZWdudW0sCisJCQkJICBleHRjZmdfcmVnc2l6ZSwgJmV4dGNmZyk7CisKKwkJaWYgKCEoZXh0Y2ZnICYgZXh0Y2ZnX2VuYWJsZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCQljb250aW51ZTsKKworCQlzaXplX2luZGV4ID0gKGV4dGNmZyAmIGV4dGNmZ19zaXplX21hc2spID4+IGV4dGNmZ19zaXplX3NoaWZ0OworCQliYXNlID0gZXh0Y2ZnICYgZXh0Y2ZnX2Jhc2VfbWFza1tzaXplX2luZGV4XTsKKwkJLyogYmFzZSBjb3VsZCA+IDRHICovCisJCWJhc2UgPDw9IGV4dGNmZ19iYXNlX2xzaGlmdDsKKwkJc3RhcnQgPSAoZXh0Y2ZnICYgZXh0Y2ZnX3N0YXJ0X21hc2spID4+IGV4dGNmZ19zdGFydF9zaGlmdDsKKwkJZW5kID0gc3RhcnQgKyBleHRjZmdfc2l6ZWJ1c1tzaXplX2luZGV4XSAtIDE7CisJCWZpbGxfb25lX21tY2ZnKGJhc2UsIDAsIHN0YXJ0LCBlbmQpOworCQltY3A1NV9tbWNvbmZfZm91bmQrKzsKKwl9CisKKwlpZiAoIW1jcDU1X21tY29uZl9mb3VuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gIm5WaWRpYSBNQ1A1NSI7Cit9CisKIHN0cnVjdCBwY2lfbW1jZmdfaG9zdGJyaWRnZV9wcm9iZSB7CiAJdTMyIGJ1czsKIAl1MzIgZGV2Zm47CkBAIC0xNzEsOCArMjQ1LDUyIEBACiAJICAweDEyMDAsIHBjaV9tbWNmZ19hbWRfZmFtMTBoIH0sCiAJeyAweGZmLCBQQ0lfREVWRk4oMCwgMCksIFBDSV9WRU5ET1JfSURfQU1ELAogCSAgMHgxMjAwLCBwY2lfbW1jZmdfYW1kX2ZhbTEwaCB9LAorCXsgMCwgUENJX0RFVkZOKDAsIDApLCBQQ0lfVkVORE9SX0lEX05WSURJQSwKKwkgIDB4MDM2OSwgcGNpX21tY2ZnX252aWRpYV9tY3A1NSB9LAogfTsKIAorc3RhdGljIGludCBfX2luaXQgY21wX21tY2ZnKGNvbnN0IHZvaWQgKngxLCBjb25zdCB2b2lkICp4MikKK3sKKwljb25zdCB0eXBlb2YocGNpX21tY2ZnX2NvbmZpZ1swXSkgKm0xID0geDE7CisJY29uc3QgdHlwZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICptMiA9IHgyOworCWludCBzdGFydDEsIHN0YXJ0MjsKKworCXN0YXJ0MSA9IG0xLT5zdGFydF9idXNfbnVtYmVyOworCXN0YXJ0MiA9IG0yLT5zdGFydF9idXNfbnVtYmVyOworCisJcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjaV9tbWNmZ19jaGVja19lbmRfYnVzX251bWJlcih2b2lkKQoreworCWludCBpOworCXR5cGVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSAqY2ZnLCAqY2ZneDsKKworCS8qIHNvcnQgdGhlbSBhdCBmaXJzdCAqLworCXNvcnQocGNpX21tY2ZnX2NvbmZpZywgcGNpX21tY2ZnX2NvbmZpZ19udW0sCisJCSBzaXplb2YocGNpX21tY2ZnX2NvbmZpZ1swXSksIGNtcF9tbWNmZywgTlVMTCk7CisKKwkvKiBsYXN0IG9uZSovCisJaWYgKHBjaV9tbWNmZ19jb25maWdfbnVtID4gMCkgeworCQlpID0gcGNpX21tY2ZnX2NvbmZpZ19udW0gLSAxOworCQljZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1tpXTsKKwkJaWYgKGNmZy0+ZW5kX2J1c19udW1iZXIgPCBjZmctPnN0YXJ0X2J1c19udW1iZXIpCisJCQljZmctPmVuZF9idXNfbnVtYmVyID0gMjU1OworCX0KKworCS8qIGRvbid0IG92ZXJsYXAgcGxlYXNlICovCisJZm9yIChpID0gMDsgaSA8IHBjaV9tbWNmZ19jb25maWdfbnVtIC0gMTsgaSsrKSB7CisJCWNmZyA9ICZwY2lfbW1jZmdfY29uZmlnW2ldOworCQljZmd4ID0gJnBjaV9tbWNmZ19jb25maWdbaSsxXTsKKworCQlpZiAoY2ZnLT5lbmRfYnVzX251bWJlciA8IGNmZy0+c3RhcnRfYnVzX251bWJlcikKKwkJCWNmZy0+ZW5kX2J1c19udW1iZXIgPSAyNTU7CisKKwkJaWYgKGNmZy0+ZW5kX2J1c19udW1iZXIgPj0gY2ZneC0+c3RhcnRfYnVzX251bWJlcikKKwkJCWNmZy0+ZW5kX2J1c19udW1iZXIgPSBjZmd4LT5zdGFydF9idXNfbnVtYmVyIC0gMTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9tbWNmZ19jaGVja19ob3N0YnJpZGdlKHZvaWQpCiB7CiAJdTMyIGw7CkBAIC0xODYsMzEgKzMwNCwzMyBAQAogCiAJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOwogCXBjaV9tbWNmZ19jb25maWcgPSBOVUxMOwotCW5hbWUgPSBOVUxMOwogCi0JZm9yIChpID0gMDsgIW5hbWUgJiYgaSA8IEFSUkFZX1NJWkUocGNpX21tY2ZnX3Byb2Jlcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9tbWNmZ19wcm9iZXMpOyBpKyspIHsKIAkJYnVzID0gIHBjaV9tbWNmZ19wcm9iZXNbaV0uYnVzOwogCQlkZXZmbiA9IHBjaV9tbWNmZ19wcm9iZXNbaV0uZGV2Zm47CiAJCXJhd19wY2lfb3BzLT5yZWFkKDAsIGJ1cywgZGV2Zm4sIDAsIDQsICZsKTsKIAkJdmVuZG9yID0gbCAmIDB4ZmZmZjsKIAkJZGV2aWNlID0gKGwgPj4gMTYpICYgMHhmZmZmOwogCisJCW5hbWUgPSBOVUxMOwogCQlpZiAocGNpX21tY2ZnX3Byb2Jlc1tpXS52ZW5kb3IgPT0gdmVuZG9yICYmCiAJCSAgICBwY2lfbW1jZmdfcHJvYmVzW2ldLmRldmljZSA9PSBkZXZpY2UpCiAJCQluYW1lID0gcGNpX21tY2ZnX3Byb2Jlc1tpXS5wcm9iZSgpOworCisJCWlmIChuYW1lKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGb3VuZCAlcyB3aXRoIE1NQ09ORklHIHN1cHBvcnQuXG4iLAorCQkJICAgICAgIG5hbWUpOwogCX0KIAotCWlmIChuYW1lKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogRm91bmQgJXMgJXMgTU1DT05GSUcgc3VwcG9ydC5cbiIsCi0JCSAgICAgICBuYW1lLCBwY2lfbW1jZmdfY29uZmlnX251bSA/ICJ3aXRoIiA6ICJ3aXRob3V0Iik7Ci0JfQorCS8qIHNvbWUgZW5kX2J1c19udW1iZXIgaXMgY3JhenksIGZpeCBpdCAqLworCXBjaV9tbWNmZ19jaGVja19lbmRfYnVzX251bWJlcigpOwogCi0JcmV0dXJuIG5hbWUgIT0gTlVMTDsKKwlyZXR1cm4gcGNpX21tY2ZnX2NvbmZpZ19udW0gIT0gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHBjaV9tbWNmZ19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCiB7Ci0jZGVmaW5lIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiAxOQorI2RlZmluZSBQQ0lfTU1DRkdfUkVTT1VSQ0VfTkFNRV9MRU4gMjQKIAlpbnQgaTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAljaGFyICpuYW1lczsKQEAgLTIyOCw5ICszNDgsMTAgQEAKIAkJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1tpXTsKIAkJbnVtX2J1c2VzID0gY2ZnLT5lbmRfYnVzX251bWJlciAtIGNmZy0+c3RhcnRfYnVzX251bWJlciArIDE7CiAJCXJlcy0+bmFtZSA9IG5hbWVzOwotCQlzbnByaW50ZihuYW1lcywgUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOLCAiUENJIE1NQ09ORklHICV1IiwKLQkJCSBjZmctPnBjaV9zZWdtZW50KTsKLQkJcmVzLT5zdGFydCA9IGNmZy0+YWRkcmVzczsKKwkJc25wcmludGYobmFtZXMsIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiwKKwkJCSAiUENJIE1NQ09ORklHICV1IFslMDJ4LSUwMnhdIiwgY2ZnLT5wY2lfc2VnbWVudCwKKwkJCSBjZmctPnN0YXJ0X2J1c19udW1iZXIsIGNmZy0+ZW5kX2J1c19udW1iZXIpOworCQlyZXMtPnN0YXJ0ID0gY2ZnLT5hZGRyZXNzICsgKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMCk7CiAJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIChudW1fYnVzZXMgPDwgMjApIC0gMTsKIAkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwogCQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOwpAQCAtMzU0LDggKzQ3NSw2IEBACiAJICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAotCWNmZyA9ICZwY2lfbW1jZmdfY29uZmlnWzBdOwotCiAJZm9yIChpID0gMDsgaSA8IHBjaV9tbWNmZ19jb25maWdfbnVtOyBpKyspIHsKIAkJaW50IHZhbGlkID0gMDsKIAkJdTY0IGFkZHIsIHNpemU7CkBAIC00MjMsMTAgKzU0MiwxMCBAQAogCQkJa25vd25fYnJpZGdlID0gMTsKIAl9CiAKLQlpZiAoIWtub3duX2JyaWRnZSkgeworCWlmICgha25vd25fYnJpZGdlKQogCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIGFjcGlfcGFyc2VfbWNmZyk7Ci0JCXBjaV9tbWNmZ19yZWplY3RfYnJva2VuKGVhcmx5KTsKLQl9CisKKwlwY2lfbW1jZmdfcmVqZWN0X2Jyb2tlbihlYXJseSk7CiAKIAlpZiAoKHBjaV9tbWNmZ19jb25maWdfbnVtID09IDApIHx8CiAJICAgIChwY2lfbW1jZmdfY29uZmlnID09IE5VTEwpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWdfNjQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCmluZGV4IDMwMDA3ZmYuLjk0MzQ5ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCkBAIC0xMTIsMTMgKzExMiwxOCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqIF9faW5pdCBtY2ZnX2lvcmVtYXAoc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmcpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwotCXUzMiBzaXplOworCXU2NCBzdGFydCwgc2l6ZTsKIAotCXNpemUgPSAoY2ZnLT5lbmRfYnVzX251bWJlciArIDEpIDw8IDIwOwotCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUoY2ZnLT5hZGRyZXNzLCBzaXplKTsKKwlzdGFydCA9IGNmZy0+c3RhcnRfYnVzX251bWJlcjsKKwlzdGFydCA8PD0gMjA7CisJc3RhcnQgKz0gY2ZnLT5hZGRyZXNzOworCXNpemUgPSBjZmctPmVuZF9idXNfbnVtYmVyICsgMSAtIGNmZy0+c3RhcnRfYnVzX251bWJlcjsKKwlzaXplIDw8PSAyMDsKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBzaXplKTsKIAlpZiAoYWRkcikgewogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIE1NQ09ORklHIGF0ICVMeCAtICVMeFxuIiwKLQkJICAgICAgIGNmZy0+YWRkcmVzcywgY2ZnLT5hZGRyZXNzICsgc2l6ZSAtIDEpOworCQkgICAgICAgc3RhcnQsIHN0YXJ0ICsgc2l6ZSAtIDEpOworCQlhZGRyIC09IGNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMDsKIAl9CiAJcmV0dXJuIGFkZHI7CiB9CkBAIC0xNTcsNyArMTYyLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgKytpKSB7CiAJCWlmIChwY2lfbW1jZmdfdmlydFtpXS52aXJ0KSB7Ci0JCQlpb3VubWFwKHBjaV9tbWNmZ192aXJ0W2ldLnZpcnQpOworCQkJaW91bm1hcChwY2lfbW1jZmdfdmlydFtpXS52aXJ0ICsgKHBjaV9tbWNmZ192aXJ0W2ldLmNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMCkpOwogCQkJcGNpX21tY2ZnX3ZpcnRbaV0udmlydCA9IE5VTEw7CiAJCQlwY2lfbW1jZmdfdmlydFtpXS5jZmcgPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9jcHVfMzIuYyBiL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCmluZGV4IDI3NGQwNjAuLmNlNzAyYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCisrKyBiL2FyY2gveDg2L3Bvd2VyL2NwdV8zMi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAjaW5jbHVkZSA8YXNtL3hjci5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc2F2ZWRfY29udGV4dCBzYXZlZF9jb250ZXh0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9jcHVfNjQuYyBiL2FyY2gveDg2L3Bvd2VyL2NwdV82NC5jCmluZGV4IGUzYjZjZjcuLjUzNDM1NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2NwdV82NC5jCisrKyBiL2FyY2gveDg2L3Bvd2VyL2NwdV82NC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS94Y3IuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiBzdGF0aWMgdm9pZCBmaXhfcHJvY2Vzc29yX2NvbnRleHQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV82NC5jIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlXzY0LmMKaW5kZXggNmRkMDAwZC4uNjVmZGM4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlXzY0LmMKKysrIGIvYXJjaC94ODYvcG93ZXIvaGliZXJuYXRlXzY0LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiAvKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcyAqLwogZXh0ZXJuIGNvbnN0IHZvaWQgX19ub3NhdmVfYmVnaW4sIF9fbm9zYXZlX2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBjYjZhZmE0Li5kYjM4MDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNzIzLDkgKzE3MjMsOSBAQAogewogCXBtZF90ICprZXJuZWxfcG1kOwogCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7CisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSArCisJCQkJICB4ZW5fc3RhcnRfaW5mby0+bnJfcHRfZnJhbWVzICogUEFHRV9TSVpFICsKKwkJCQkgIDUxMioxMDI0KTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBrZXJuZWxfcG1kLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKQEAgLTE4NzAsNyArMTg3MCw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IHhlbl9zZXRfcHRlX2F0b21pYywKLQkuc2V0X3B0ZV9wcmVzZW50ID0geGVuX3NldF9wdGVfYXQsCiAJLnB0ZV9jbGVhciA9IHhlbl9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IHhlbl9wbWRfY2xlYXIsCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL0tjb25maWcgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCmluZGV4IDk4MTIwMDguLmZhNmRjNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL0tjb25maWcKKysrIGIvYXJjaC94dGVuc2EvS2NvbmZpZwpAQCAtNCwxNiArNCwxMyBAQAogbWFpbm1lbnUgIkxpbnV4L1h0ZW5zYSBLZXJuZWwgQ29uZmlndXJhdGlvbiIKIAogY29uZmlnIEZSQU1FX1BPSU5URVIKLQlib29sCi0JZGVmYXVsdCBuCisJZGVmX2Jvb2wgbgogCiBjb25maWcgWk9ORV9ETUEKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgWFRFTlNBCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAlzZWxlY3QgSEFWRV9JREUKIAloZWxwCiAJICBYdGVuc2EgcHJvY2Vzc29ycyBhcmUgMzItYml0IFJJU0MgbWFjaGluZXMgZGVzaWduZWQgYnkgVGVuc2lsaWNhCkBAIC0yNCwyOCArMjEsMjUgQEAKIAkgIGEgaG9tZSBwYWdlIGF0IDxodHRwOi8veHRlbnNhLnNvdXJjZWZvcmdlLm5ldC8+LgogCiBjb25maWcgUldTRU1fWENIR0FERF9BTEdPUklUSE0KLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19GSU5EX05FWFRfQklUCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0hBUkRJUlFTCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKKworY29uZmlnIEdFTkVSSUNfR1BJTworCWRlZl9ib29sIHkKIAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1UzMgotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBBUkNIX0hBU19JTE9HMl9VNjQKLQlib29sCi0JZGVmYXVsdCBuCisJZGVmX2Jvb2wgbgogCiBjb25maWcgTk9fSU9QT1JUCiAJZGVmX2Jvb2wgeQpAQCAtNTQsOSArNDgsMTggQEAKIAlpbnQKIAlkZWZhdWx0IDEwMAogCitjb25maWcgR0VORVJJQ19USU1FCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKIAorY29uZmlnIE1NVQorCWRlZl9ib29sIG4KKworY29uZmlnIFZBUklBTlRfSVJRX1NXSVRDSAorCWRlZl9ib29sIG4KKwogbWVudSAiUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzIgogCiBjaG9pY2UKQEAgLTY1LDM4ICs2OCw0MSBAQAogCiBjb25maWcgWFRFTlNBX1ZBUklBTlRfRlNGCiAJYm9vbCAiZnNmIC0gZGVmYXVsdCAobm90IGdlbmVyaWMpIGNvbmZpZ3VyYXRpb24iCisJc2VsZWN0IE1NVQogCiBjb25maWcgWFRFTlNBX1ZBUklBTlRfREMyMzJCCiAJYm9vbCAiZGMyMzJiIC0gRGlhbW9uZCAyMzJMIFN0YW5kYXJkIENvcmUgUmV2LkIgKExFKSIKKwlzZWxlY3QgTU1VCiAJaGVscAotCVRoaXMgdmFyaWFudCByZWZlcnMgdG8gVGVuc2lsaWNhJ3MgRGlhbW9uZCAyMzJMIFN0YW5kYXJkIGNvcmUgUmV2LkIgKExFKS4KLWVuZGNob2ljZQorCSAgVGhpcyB2YXJpYW50IHJlZmVycyB0byBUZW5zaWxpY2EncyBEaWFtb25kIDIzMkwgU3RhbmRhcmQgY29yZSBSZXYuQiAoTEUpLgogCi1jb25maWcgTU1VCi0JYm9vbAotCWRlZmF1bHQgeQorY29uZmlnIFhURU5TQV9WQVJJQU5UX1M2MDAwCisJYm9vbCAiczYwMDAgLSBTdHJldGNoIHNvZnR3YXJlIGNvbmZpZ3VyYWJsZSBwcm9jZXNzb3IiCisJc2VsZWN0IFZBUklBTlRfSVJRX1NXSVRDSAorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorZW5kY2hvaWNlCiAKIGNvbmZpZyBYVEVOU0FfVU5BTElHTkVEX1VTRVIKIAlib29sICJVbmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB1c2Ugc3BhY2UiCi0JLS0taGVscC0tLQotCSAgIFRoZSBYdGVuc2EgYXJjaGl0ZWN0dXJlIGN1cnJlbnRseSBkb2VzIG5vdCBoYW5kbGUgdW5hbGlnbmVkCi0JICAgbWVtb3J5IGFjY2Vzc2VzIGluIGhhcmR3YXJlIGJ1dCB0aHJvdWdoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgotCSAgIFBlciBkZWZhdWx0LCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBkaXNhYmxlZCBpbiB1c2VyIHNwYWNlLgorCWhlbHAKKwkgIFRoZSBYdGVuc2EgYXJjaGl0ZWN0dXJlIGN1cnJlbnRseSBkb2VzIG5vdCBoYW5kbGUgdW5hbGlnbmVkCisJICBtZW1vcnkgYWNjZXNzZXMgaW4gaGFyZHdhcmUgYnV0IHRocm91Z2ggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCisJICBQZXIgZGVmYXVsdCwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZGlzYWJsZWQgaW4gdXNlciBzcGFjZS4KIAotCSAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIHVzZXIgc3BhY2UuCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB1c2VyIHNwYWNlLgogCiBjb25maWcgUFJFRU1QVAogCWJvb2wgIlByZWVtcHRpYmxlIEtlcm5lbCIKLQktLS1oZWxwLS0tCi0gICAgICAgICAgIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIGxhdGVuY3kgb2YgdGhlIGtlcm5lbCB3aGVuIHJlYWN0aW5nIHRvCi0gICAgICAgICAgIHJlYWwtdGltZSBvciBpbnRlcmFjdGl2ZSBldmVudHMgYnkgYWxsb3dpbmcgYSBsb3cgcHJpb3JpdHkgcHJvY2VzcyB0bwotICAgICAgICAgICBiZSBwcmVlbXB0ZWQgZXZlbiBpZiBpdCBpcyBpbiBrZXJuZWwgbW9kZSBleGVjdXRpbmcgYSBzeXN0ZW0gY2FsbC4KLSAgICAgICAgICAgVW5mb3J0dW5hdGVseSB0aGUga2VybmVsIGNvZGUgaGFzIHNvbWUgcmFjZSBjb25kaXRpb25zIGlmIGJvdGgKLSAgICAgICAgICAgQ09ORklHX1NNUCBhbmQgQ09ORklHX1BSRUVNUFQgYXJlIGVuYWJsZWQsIHNvIHRoaXMgb3B0aW9uIGlzCi0gICAgICAgICAgIGN1cnJlbnRseSBkaXNhYmxlZCBpZiB5b3UgYXJlIGJ1aWxkaW5nIGFuIFNNUCBrZXJuZWwuCisJaGVscAorICAgICAgICAgIFRoaXMgb3B0aW9uIHJlZHVjZXMgdGhlIGxhdGVuY3kgb2YgdGhlIGtlcm5lbCB3aGVuIHJlYWN0aW5nIHRvCisgICAgICAgICAgcmVhbC10aW1lIG9yIGludGVyYWN0aXZlIGV2ZW50cyBieSBhbGxvd2luZyBhIGxvdyBwcmlvcml0eSBwcm9jZXNzIHRvCisgICAgICAgICAgYmUgcHJlZW1wdGVkIGV2ZW4gaWYgaXQgaXMgaW4ga2VybmVsIG1vZGUgZXhlY3V0aW5nIGEgc3lzdGVtIGNhbGwuCisgICAgICAgICAgVW5mb3J0dW5hdGVseSB0aGUga2VybmVsIGNvZGUgaGFzIHNvbWUgcmFjZSBjb25kaXRpb25zIGlmIGJvdGgKKyAgICAgICAgICBDT05GSUdfU01QIGFuZCBDT05GSUdfUFJFRU1QVCBhcmUgZW5hYmxlZCwgc28gdGhpcyBvcHRpb24gaXMKKyAgICAgICAgICBjdXJyZW50bHkgZGlzYWJsZWQgaWYgeW91IGFyZSBidWlsZGluZyBhbiBTTVAga2VybmVsLgogCi0gICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAotICAgICAgICAgICBvciByZWFsLXRpbWUgc3lzdGVtLiAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCisgICAgICAgICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGEga2VybmVsIGZvciBhIGRlc2t0b3AsIGVtYmVkZGVkCisgICAgICAgICAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCiBjb25maWcgTUFUSF9FTVVMQVRJT04KIAlib29sICJNYXRoIGVtdWxhdGlvbiIKQEAgLTEwNSw2ICsxMTEsMzIgQEAKIAogZW5kbWVudQogCitjb25maWcgWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKKwlkZWZfYm9vbCBuCisJaGVscAorCSAgT24gc29tZSBwbGF0Zm9ybXMgKFhUMjAwMCwgZm9yIGV4YW1wbGUpLCB0aGUgQ1BVIGNsb2NrIHJhdGUgY2FuCisJICB2YXJ5LiAgVGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGV0ZXJtaW5lZCwgaG93ZXZlciwgYnkgbWVhc3VyaW5nCisJICBhZ2FpbnN0IGEgd2VsbCBrbm93biwgZml4ZWQgZnJlcXVlbmN5LCBzdWNoIGFzIGFuIFVBUlQgb3NjaWxsYXRvci4KKworY29uZmlnIFNFUklBTF9DT05TT0xFCisJZGVmX2Jvb2wgbgorCitjb25maWcgWFRFTlNBX0lTU19ORVRXT1JLCisJZGVmX2Jvb2wgbgorCittZW51ICJCdXMgb3B0aW9ucyIKKworY29uZmlnIFBDSQorCWJvb2wgIlBDSSBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEZpbmQgb3V0IHdoZXRoZXIgeW91IGhhdmUgYSBQQ0kgbW90aGVyYm9hcmQuIFBDSSBpcyB0aGUgbmFtZSBvZiBhCisJICBidXMgc3lzdGVtLCBpLmUuIHRoZSB3YXkgdGhlIENQVSB0YWxrcyB0byB0aGUgb3RoZXIgc3R1ZmYgaW5zaWRlCisJICB5b3VyIGJveC4gT3RoZXIgYnVzIHN5c3RlbXMgYXJlIElTQSwgRUlTQSwgTWljcm9DaGFubmVsIChNQ0EpIG9yCisJICBWRVNBLiBJZiB5b3UgaGF2ZSBQQ0ksIHNheSBZLCBvdGhlcndpc2UgTi4KKworc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgorCiBtZW51ICJQbGF0Zm9ybSBvcHRpb25zIgogCiBjaG9pY2UKQEAgLTExMywzMyArMTQ1LDM1IEBACiAKIGNvbmZpZyBYVEVOU0FfUExBVEZPUk1fSVNTCiAJYm9vbCAiSVNTIgorCXNlbGVjdCBYVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAorCXNlbGVjdCBTRVJJQUxfQ09OU09MRQorCXNlbGVjdCBYVEVOU0FfSVNTX05FVFdPUksKIAloZWxwCiAJICBJU1MgaXMgYW4gYWNyb255bSBmb3IgVGVuc2lsaWNhJ3MgSW5zdHJ1Y3Rpb24gU2V0IFNpbXVsYXRvci4KIAogY29uZmlnIFhURU5TQV9QTEFURk9STV9YVDIwMDAKIAlib29sICJYVDIwMDAiCisJc2VsZWN0IFhURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCisJc2VsZWN0IFBDSQogCWhlbHAKIAkgIFhUMjAwMCBpcyB0aGUgbmFtZSBvZiBUZW5zaWxpY2EncyBmZWF0dXJlLXJpY2ggZW11bGF0aW9uIHBsYXRmb3JtLgogCSAgVGhpcyBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgYSBmdWxsIExpbnV4IGRpc3RyaWJ1dGlvbi4KIAorY29uZmlnIFhURU5TQV9QTEFURk9STV9TNjEwNQorCWJvb2wgIlM2MTA1IgorCXNlbGVjdCBTRVJJQUxfQ09OU09MRQorCiBlbmRjaG9pY2UKIAogCi1jb25maWcgWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKLQlib29sICJBdXRvIGNhbGlicmF0aW9uIG9mIHRoZSBDUFUgY2xvY2sgcmF0ZSIKLQktLS1oZWxwLS0tCi0JICBPbiBzb21lIHBsYXRmb3JtcyAoWFQyMDAwLCBmb3IgZXhhbXBsZSksIHRoZSBDUFUgY2xvY2sgcmF0ZSBjYW4KLQkgIHZhcnkuICBUaGUgZnJlcXVlbmN5IGNhbiBiZSBkZXRlcm1pbmVkLCBob3dldmVyLCBieSBtZWFzdXJpbmcKLQkgIGFnYWluc3QgYSB3ZWxsIGtub3duLCBmaXhlZCBmcmVxdWVuY3ksIHN1Y2ggYXMgYW4gVUFSVCBvc2NpbGxhdG9yLgotCiBjb25maWcgWFRFTlNBX0NQVV9DTE9DSwogCWludCAiQ1BVIGNsb2NrIHJhdGUgW01Iel0iCiAJZGVwZW5kcyBvbiAhWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKLQlkZWZhdWx0ICIxNiIKKwlkZWZhdWx0IDE2CiAKIGNvbmZpZyBHRU5FUklDX0NBTElCUkFURV9ERUxBWQogCWJvb2wgIkF1dG8gY2FsaWJyYXRpb24gb2YgdGhlIEJvZ29NSVBTIHZhbHVlIgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBUaGUgQm9nb01JUFMgdmFsdWUgY2FuIGVhc2lseSBiZSBkZXJpdmVkIGZyb20gdGhlIENQVSBmcmVxdWVuY3kuCiAKIGNvbmZpZyBDTURMSU5FX0JPT0wKQEAgLTE1Niw1MiArMTkwLDI3IEBACiAJICB0aW1lIGJ5IGVudGVyaW5nIHRoZW0gaGVyZS4gQXMgYSBtaW5pbXVtLCB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlCiAJICBtZW1vcnkgc2l6ZSBhbmQgdGhlIHJvb3QgZGV2aWNlIChlLmcuLCBtZW09NjRNIHJvb3Q9L2Rldi9uZnMpLgogCi1jb25maWcgU0VSSUFMX0NPTlNPTEUKLQlib29sCi0JZGVwZW5kcyBvbiBYVEVOU0FfUExBVEZPUk1fSVNTCi0JZGVmYXVsdCB5Ci0KLWNvbmZpZyBYVEVOU0FfSVNTX05FVFdPUksKLQlib29sCi0JZGVwZW5kcyBvbiBYVEVOU0FfUExBVEZPUk1fSVNTCi0JZGVmYXVsdCB5Ci0KIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogZW5kbWVudQogCi1tZW51ICJCdXMgb3B0aW9ucyIKLQotY29uZmlnIFBDSQotCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiAhWFRFTlNBX1BMQVRGT1JNX0lTUwotCWRlcGVuZHMgb24gIVhURU5TQV9QTEFURk9STV9JU1MKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQotCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQotCSAgeW91ciBib3guIE90aGVyIGJ1cyBzeXN0ZW1zIGFyZSBJU0EsIEVJU0EsIE1pY3JvQ2hhbm5lbCAoTUNBKSBvcgotCSAgVkVTQS4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCi0KLXNvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKLQogY29uZmlnIEhPVFBMVUcKLQogCWJvb2wgIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyIKLQktLS1oZWxwLS0tCi0JU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBwbHVnIGRldmljZXMgaW50byB5b3VyIGNvbXB1dGVyIHdoaWxlCi0JdGhlIHN5c3RlbSBpcyBydW5uaW5nLCBhbmQgYmUgYWJsZSB0byB1c2UgdGhlbSBxdWlja2x5LiAgSW4gbWFueQotCWNhc2VzLCB0aGUgZGV2aWNlcyBjYW4gbGlrZXdpc2UgYmUgdW5wbHVnZ2VkIGF0IGFueSB0aW1lIHRvby4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHBsdWcgZGV2aWNlcyBpbnRvIHlvdXIgY29tcHV0ZXIgd2hpbGUKKwkgIHRoZSBzeXN0ZW0gaXMgcnVubmluZywgYW5kIGJlIGFibGUgdG8gdXNlIHRoZW0gcXVpY2tseS4gIEluIG1hbnkKKwkgIGNhc2VzLCB0aGUgZGV2aWNlcyBjYW4gbGlrZXdpc2UgYmUgdW5wbHVnZ2VkIGF0IGFueSB0aW1lIHRvby4KIAotCU9uZSB3ZWxsIGtub3duIGV4YW1wbGUgb2YgdGhpcyBpcyBQQ01DSUEtIG9yIFBDLWNhcmRzLCBjcmVkaXQtY2FyZAotCXNpemUgZGV2aWNlcyBzdWNoIGFzIG5ldHdvcmsgY2FyZHMsIG1vZGVtcyBvciBoYXJkIGRyaXZlcyB3aGljaCBhcmUKLQlwbHVnZ2VkIGludG8gc2xvdHMgZm91bmQgb24gYWxsIG1vZGVybiBsYXB0b3AgY29tcHV0ZXJzLiAgQW5vdGhlcgotCWV4YW1wbGUsIHVzZWQgb24gbW9kZXJuIGRlc2t0b3BzIGFzIHdlbGwgYXMgbGFwdG9wcywgaXMgVVNCLgorCSAgT25lIHdlbGwga25vd24gZXhhbXBsZSBvZiB0aGlzIGlzIFBDTUNJQS0gb3IgUEMtY2FyZHMsIGNyZWRpdC1jYXJkCisJICBzaXplIGRldmljZXMgc3VjaCBhcyBuZXR3b3JrIGNhcmRzLCBtb2RlbXMgb3IgaGFyZCBkcml2ZXMgd2hpY2ggYXJlCisJICBwbHVnZ2VkIGludG8gc2xvdHMgZm91bmQgb24gYWxsIG1vZGVybiBsYXB0b3AgY29tcHV0ZXJzLiAgQW5vdGhlcgorCSAgZXhhbXBsZSwgdXNlZCBvbiBtb2Rlcm4gZGVza3RvcHMgYXMgd2VsbCBhcyBsYXB0b3BzLCBpcyBVU0IuCiAKLQlFbmFibGUgSE9UUExVRyBhbmQgYnVpbGQgYSBtb2R1bGFyIGtlcm5lbC4gIEdldCBhZ2VudCBzb2Z0d2FyZQotCShmcm9tIDxodHRwOi8vbGludXgtaG90cGx1Zy5zb3VyY2Vmb3JnZS5uZXQvPikgYW5kIGluc3RhbGwgaXQuCi0JVGhlbiB5b3VyIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCBvdXQgdG8gYSB1c2VyIG1vZGUgInBvbGljeQotCWFnZW50IiAoL3NiaW4vaG90cGx1ZykgdG8gbG9hZCBtb2R1bGVzIGFuZCBzZXQgdXAgc29mdHdhcmUgbmVlZGVkCi0JdG8gdXNlIGRldmljZXMgYXMgeW91IGhvdHBsdWcgdGhlbS4KKwkgIEVuYWJsZSBIT1RQTFVHIGFuZCBidWlsZCBhIG1vZHVsYXIga2VybmVsLiAgR2V0IGFnZW50IHNvZnR3YXJlCisJICAoZnJvbSA8aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Lz4pIGFuZCBpbnN0YWxsIGl0LgorCSAgVGhlbiB5b3VyIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkgY2FsbCBvdXQgdG8gYSB1c2VyIG1vZGUgInBvbGljeQorCSAgYWdlbnQiICgvc2Jpbi9ob3RwbHVnKSB0byBsb2FkIG1vZHVsZXMgYW5kIHNldCB1cCBzb2Z0d2FyZSBuZWVkZWQKKwkgIHRvIHVzZSBkZXZpY2VzIGFzIHlvdSBob3RwbHVnIHRoZW0uCiAKIHNvdXJjZSAiZHJpdmVycy9wY21jaWEvS2NvbmZpZyIKIApAQCAtMjEzLDkgKzIyMiw4IEBACiAKICMgb25seSBlbGYgc3VwcG9ydGVkCiBjb25maWcgS0NPUkVfRUxGCi0gICAgICAgIGJvb2wKKwlkZWZfYm9vbCB5CiAgICAgICAgIGRlcGVuZHMgb24gUFJPQ19GUwotICAgICAgICBkZWZhdWx0IHkKICAgICAgICAgaGVscAogICAgICAgICAgIElmIHlvdSBlbmFibGVkIHN1cHBvcnQgZm9yIC9wcm9jIGZpbGUgc3lzdGVtIHRoZW4gdGhlIGZpbGUKICAgICAgICAgICAvcHJvYy9rY29yZSB3aWxsIGNvbnRhaW4gdGhlIGtlcm5lbCBjb3JlIGltYWdlIGluIEVMRiBmb3JtYXQuIFRoaXMKQEAgLTI0MCw3ICsyNDgsNyBAQAogbWVudSAiWHRlbnNhIGluaXRyZCBvcHRpb25zIgogCWRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkQKIAotCWNvbmZpZyBFTUJFRERFRF9SQU1ESVNLCitjb25maWcgRU1CRURERURfUkFNRElTSwogCWJvb2wgIkVtYmVkIHJvb3QgZmlsZXN5c3RlbSByYW1kaXNrIGludG8gdGhlIGtlcm5lbCIKIAogY29uZmlnIEVNQkVEREVEX1JBTURJU0tfSU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL01ha2VmaWxlIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKaW5kZXggMWRhNTVmZS4uNGNhZmZhYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvTWFrZWZpbGUKKysrIGIvYXJjaC94dGVuc2EvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAKIAogdmFyaWFudC0kKENPTkZJR19YVEVOU0FfVkFSSUFOVF9GU0YpCQk6PSBmc2YKIHZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfREMyMzJCKQkJOj0gZGMyMzJiCit2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX1M2MDAwKQkJOj0gczYwMDAKIHZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfTElOVVhfQ1VTVE9NKQk6PSBjdXN0b20KIAogVkFSSUFOVCA9ICQodmFyaWFudC15KQpAQCAtMjQsNiArMjUsNyBAQAogCiBwbGF0Zm9ybS0kKENPTkZJR19YVEVOU0FfUExBVEZPUk1fWFQyMDAwKQk6PSB4dDIwMDAKIHBsYXRmb3JtLSQoQ09ORklHX1hURU5TQV9QTEFURk9STV9JU1MpCQk6PSBpc3MKK3BsYXRmb3JtLSQoQ09ORklHX1hURU5TQV9QTEFURk9STV9TNjEwNSkJOj0gczYxMDUKIAogUExBVEZPUk0gPSAkKHBsYXRmb3JtLXkpCiBleHBvcnQgUExBVEZPUk0KQEAgLTYyLDIwICs2NCwyMyBAQAogICBlbmRpZgogZW5kaWYKIAotIworIyBPbmx5IGJ1aWxkIHZhcmlhbnQgYW5kL29yIHBsYXRmb3JtIGlmIGl0IGluY2x1ZGVzIGEgTWFrZWZpbGUKKworYnVpbGR2YXIgOj0gJChzaGVsbCB0ZXN0IC1hICQoc3JjdHJlZSkvYXJjaC94dGVuc2EvdmFyaWFudHMvJChWQVJJQU5UKS9NYWtlZmlsZSAmJiBlY2hvIGFyY2gveHRlbnNhL3ZhcmlhbnRzLyQoVkFSSUFOVCkvKQorYnVpbGRwbGYgOj0gJChzaGVsbCB0ZXN0IC1hICQoc3JjdHJlZSkvYXJjaC94dGVuc2EvcGxhdGZvcm1zLyQoUExBVEZPUk0pL01ha2VmaWxlICYmIGVjaG8gYXJjaC94dGVuc2EvcGxhdGZvcm1zLyQoUExBVEZPUk0pLykKKworIyBGaW5kIGxpYmdjYy5hCiAKIExJQkdDQyA6PSAkKHNoZWxsICQoQ0MpICQoS0JVSUxEX0NGTEFHUykgLXByaW50LWxpYmdjYy1maWxlLW5hbWUpCiAKIGhlYWQteQkJOj0gYXJjaC94dGVuc2Eva2VybmVsL2hlYWQubwogY29yZS15CQkrPSBhcmNoL3h0ZW5zYS9rZXJuZWwvIGFyY2gveHRlbnNhL21tLwotaWZuZXEgKCQoUExBVEZPUk0pLCkKLWNvcmUteQkJKz0gYXJjaC94dGVuc2EvcGxhdGZvcm1zLyQoUExBVEZPUk0pLwotZW5kaWYKK2NvcmUteQkJKz0gJChidWlsZHZhcikgJChidWlsZHBsZikKKwogbGlicy15CQkrPSBhcmNoL3h0ZW5zYS9saWIvICQoTElCR0NDKQogCiBib290CQk6PSBhcmNoL3h0ZW5zYS9ib290CiAKLQogYWxsOiB6SW1hZ2UKIAogYnpJbWFnZSA6IHpJbWFnZQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvY29uZmlncy9zNjEwNV9kZWZjb25maWcgYi9hcmNoL3h0ZW5zYS9jb25maWdzL3M2MTA1X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFkZWZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvY29uZmlncy9zNjEwNV9kZWZjb25maWcKQEAgLTAsMCArMSw1MzAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzctczYKKyMgVHVlIE1hciAxMCAxMTowOToyNiAyMDA5CisjCisjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfWFRFTlNBPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1U9eQorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNgorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NTVUgaXMgbm90IHNldAorQ09ORklHX1ZBUklBTlRfSVJRX1NXSVRDSD15CisKKyMKKyMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCisjCisjIENPTkZJR19YVEVOU0FfVkFSSUFOVF9GU0YgaXMgbm90IHNldAorIyBDT05GSUdfWFRFTlNBX1ZBUklBTlRfREMyMzJCIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfVkFSSUFOVF9TNjAwMD15CisjIENPTkZJR19YVEVOU0FfVU5BTElHTkVEX1VTRVIgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPTlNPTEU9eQorIyBDT05GSUdfWFRFTlNBX0lTU19ORVRXT1JLIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBvcHRpb25zCisjCisjIENPTkZJR19YVEVOU0FfUExBVEZPUk1fSVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hURU5TQV9QTEFURk9STV9YVDIwMDAgaXMgbm90IHNldAorQ09ORklHX1hURU5TQV9QTEFURk9STV9TNjEwNT15CitDT05GSUdfWFRFTlNBX0NQVV9DTE9DSz0zMDAKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMxLDM4NDAwIGRlYnVnIGJvb3RtZW1fZGVidWcgbG9nbGV2ZWw9NyIKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19WSVJUX1RPX0JVUz15CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19LQ09SRV9FTEY9eQorQ09ORklHX0JJTkZNVF9GTEFUPXkKKyMgQ09ORklHX0JJTkZNVF9aRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfU0hBUkVEX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBYdGVuc2EgaW5pdHJkIG9wdGlvbnMKKyMKKyMgQ09ORklHX0VNQkVEREVEX1JBTURJU0sgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19OT01NVV9SRUdJT05TPXkKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA5NGM0YzUzLi44ZmMxYzBjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC02NSwxMyArNjUsMTcgQEAKICMgZGVmaW5lIF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UocCxzKQlfX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHAscykKICNlbmRpZgogCi0jaWYgKERDQUNIRV9XQVlfU0laRSA+IFBBR0VfU0laRSkKKyNpZiBkZWZpbmVkKENPTkZJR19NTVUpICYmIChEQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpCiBleHRlcm4gdm9pZCBfX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX3BhZ2VfYWxpYXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfaW52YWxpZGF0ZV9kY2FjaGVfcGFnZV9hbGlhcyh1bnNpZ25lZCBsb25nIHZpcnQsCisJCQkJCQkJdW5zaWduZWQgbG9uZyBwaHlzKSB7IH0KICNlbmRpZgotI2lmIChJQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1VKSAmJiAoSUNBQ0hFX1dBWV9TSVpFID4gUEFHRV9TSVpFKQogZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlX2FsaWFzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogI2Vsc2UKLSMgZGVmaW5lIF9faW52YWxpZGF0ZV9pY2FjaGVfcGFnZV9hbGlhcyh2LHApCWRvIHsgfSB3aGlsZSgwKQorc3RhdGljIGlubGluZSB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfcGFnZV9hbGlhcyh1bnNpZ25lZCBsb25nIHZpcnQsCisJCQkJCQl1bnNpZ25lZCBsb25nIHBoeXMpIHsgfQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IGUzMGYzYWIuLjEzN2NhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC00NCw4ICs0NCw5IEBACiAgKgl0aGUgdmFsdWUgZGVzaXJlZCkuCiAgKi8KIAorI2lmbmRlZiBNQVhfRE1BX0FERFJFU1MKICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkoUEFHRV9PRkZTRVQgKyBYQ0hBTF9LSU9fU0laRSAtIDEpCi0KKyNlbmRpZgogCiAvKiBSZXNlcnZlIGFuZCByZWxlYXNlIGEgRE1BIGNoYW5uZWwgKi8KIGV4dGVybiBpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGRtYW5yLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2ZsYXQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGM0NGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZmxhdC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgX19BU01fWFRFTlNBX0ZMQVRfSAorI2RlZmluZSBfX0FTTV9YVEVOU0FfRkxBVF9ICisKKyNkZWZpbmUgZmxhdF9hcmd2cF9lbnZwX29uX3N0YWNrKCkJCQkwCisjZGVmaW5lIGZsYXRfb2xkX3JhbV9mbGFnKGZsYWdzKQkJCShmbGFncykKKyNkZWZpbmUgZmxhdF9yZWxvY192YWxpZChyZWxvYywgc2l6ZSkJCQkoKHJlbG9jKSA8PSAoc2l6ZSkpCisjZGVmaW5lIGZsYXRfZ2V0X2FkZHJfZnJvbV9ycChycCwgcmVsdmFsLCBmbGFncywgcCkJZ2V0X3VuYWxpZ25lZChycCkKKyNkZWZpbmUgZmxhdF9wdXRfYWRkcl9hdF9ycChycCwgdmFsLCByZWx2YWwJKQlwdXRfdW5hbGlnbmVkKHZhbCwgcnApCisjZGVmaW5lIGZsYXRfZ2V0X3JlbG9jYXRlX2FkZHIocmVsKQkJCShyZWwpCisjZGVmaW5lIGZsYXRfc2V0X3BlcnNpc3RlbnQocmVsdmFsLCBwKQkJCTAKKworI2VuZGlmIC8qIF9fQVNNX1hURU5TQV9GTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzYzYjA3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBHZW5lcmljIEdQSU8gQVBJIGltcGxlbWVudGF0aW9uIGZvciB4dGVuc2EuCisgKgorICogU3RvbGVuIGZyb20geDg2LCB3aGljaCBpcyBkZXJpdmVkIGZyb20gdGhlIGdlbmVyaWMgR1BJTyBBUEkgZm9yIHBvd2VycGM6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfQVNNX1hURU5TQV9HUElPX0gKKyNkZWZpbmUgX0FTTV9YVEVOU0FfR1BJT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCisvKgorICogSnVzdCBjYWxsIGdwaW9saWIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8sIGludCB2YWx1ZSkKK3sKKwlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19jYW5zbGVlcCh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gX19ncGlvX2NhbnNsZWVwKGdwaW8pOworfQorCisvKgorICogTm90IGltcGxlbWVudGVkLCB5ZXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogQ09ORklHX0dQSU9MSUIgKi8KKworI2VuZGlmIC8qIF9BU01fWFRFTlNBX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMDdiNzI5OS4uZDA0Y2QzYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCkBAIC02OSwyMSArNjksMjggQEAKIAogc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmIChvZmZzZXQgPj0gWENIQUxfS0lPX1BBRERSCiAJICAgICYmIG9mZnNldCA8IFhDSEFMX0tJT19QQUREUiArIFhDSEFMX0tJT19TSVpFKQogCQlyZXR1cm4gKHZvaWQqKShvZmZzZXQtWENIQUxfS0lPX1BBRERSK1hDSEFMX0tJT19CWVBBU1NfVkFERFIpOwotCiAJZWxzZQogCQlCVUcoKTsKKyNlbHNlCisJcmV0dXJuICh2b2lkICopb2Zmc2V0OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmIChvZmZzZXQgPj0gWENIQUxfS0lPX1BBRERSCiAJICAgICYmIG9mZnNldCA8IFhDSEFMX0tJT19QQUREUiArIFhDSEFMX0tJT19TSVpFKQogCQlyZXR1cm4gKHZvaWQqKShvZmZzZXQtWENIQUxfS0lPX1BBRERSK1hDSEFMX0tJT19DQUNIRURfVkFERFIpOwogCWVsc2UKIAkJQlVHKCk7CisjZWxzZQorCXJldHVybiAodm9pZCAqKW9mZnNldDsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW91bm1hcCh2b2lkICphZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCAxNjIwZDFlLi5kZmFjODJkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaApAQCAtMTQsNiArMTQsMTMgQEAKICNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogCisjaWZkZWYgQ09ORklHX1ZBUklBTlRfSVJRX1NXSVRDSAorI2luY2x1ZGUgPHZhcmlhbnQvaXJxLmg+CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZhcmlhbnRfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB2YXJpYW50X2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpIHsgfQorI2VuZGlmCisKICNpZm5kZWYgUExBVEZPUk1fTlJfSVJRUwogIyBkZWZpbmUgUExBVEZPUk1fTlJfSVJRUyAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggNDRjNWJiMC4uMDQ4OTBkNiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmgKQEAgLTExLDcgKzExLDEyIEBACiAjaWZuZGVmIF9YVEVOU0FfTU1VX0gKICNkZWZpbmUgX1hURU5TQV9NTVVfSAogCisjaWZuZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vbm9tbXUuaD4KKyNlbHNlCisKIC8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYJLyogX1hURU5TQV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYzBmZDhlNS4uZGJkODczMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC0xMywxNiArMTMsMjAgQEAKICNpZm5kZWYgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9YVEVOU0FfTU1VX0NPTlRFWFRfSAogCisjaWZuZGVmIENPTkZJR19NTVUKKyNpbmNsdWRlIDxhc20vbm9tbXVfY29udGV4dC5oPgorI2Vsc2UKKwogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKKyNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KKwogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgogCi0jZGVmaW5lIFhDSEFMX01NVV9BU0lEX0JJVFMJOAotCiAjaWYgKFhDSEFMX0hBVkVfVExCUyAhPSAxKQogIyBlcnJvciAiTGludXggbXVzdCBoYXZlIGFuIE1NVSEiCiAjZW5kaWYKQEAgLTEzMyw0ICsxMzcsNSBAQAogCiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYgLyogX1hURU5TQV9NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ub21tdS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2UyYzQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXUuaApAQCAtMCwwICsxLDMgQEAKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL25vbW11X2NvbnRleHQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL25vbW11X2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTllN2EyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXVfY29udGV4dC5oCkBAIC0wLDAgKzEsMjUgQEAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVhY3RpdmF0ZV9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMTFmN2RjMi4uMTdlMGM1MyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogCiAvKgogICogRml4ZWQgVExCIHRyYW5zbGF0aW9ucyBpbiB0aGUgcHJvY2Vzc29yLgpAQCAtMzIsOCArMzMsMTQgQEAKICNkZWZpbmUgUEFHRV9TSVpFCQkoX19YVEVOU0FfVUxfQ09OU1QoMSkgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCQkofihQQUdFX1NJWkUtMSkpCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIFBBR0VfT0ZGU0VUCQlYQ0hBTF9LU0VHX0NBQ0hFRF9WQUREUgogI2RlZmluZSBNQVhfTUVNX1BGTgkJWENIQUxfS1NFR19TSVpFCisjZWxzZQorI2RlZmluZSBQQUdFX09GRlNFVAkJMAorI2RlZmluZSBNQVhfTUVNX1BGTgkJKFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUICsgUExBVEZPUk1fREVGQVVMVF9NRU1fU0laRSkKKyNlbmRpZgorCiAjZGVmaW5lIFBHVEFCTEVfU1RBUlQJCTB4ODAwMDAwMDAKIAogLyoKQEAgLTE1MCw5ICsxNTcsMTEgQEAKICAqIGFkZHJlc3Nlcy4KICAqLwogCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJKFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUID4+IFBBR0VfU0hJRlQpCisKICNkZWZpbmUgX19wYSh4KQkJCSgodW5zaWduZWQgbG9uZykgKHgpIC0gUEFHRV9PRkZTRVQpCiAjZGVmaW5lIF9fdmEoeCkJCQkoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpICh4KSArIFBBR0VfT0ZGU0VUKSkKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgodW5zaWduZWQgbG9uZylwZm4gPCBtYXhfbWFwbnIpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmICgocGZuKSAtIEFSQ0hfUEZOX09GRlNFVCkgPCBtYXhfbWFwbnIpCiAjaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQogIyBlcnJvciBDT05GSUdfRElTQ09OVElHTUVNIG5vdCBzdXBwb3J0ZWQKICNlbmRpZgpAQCAtMTYyLDggKzE3MSw5IEBACiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikJcGZuX3ZhbGlkKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKQkocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKIAorI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgV0FOVF9QQUdFX1ZJUlRVQUwKLQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDgwMTRkOTYuLmExMzg3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4Myw3ICsxODMsMTUgQEAKIAogI2RlZmluZSBaRVJPX1BBR0UodmFkZHIpICh2aXJ0X3RvX3BhZ2UoZW1wdHlfemVyb19wYWdlKSkKIAorI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQQUdFX1NJWkUvc2l6ZW9mKHBnZF90KV07CitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKKyNlbHNlCisjIGRlZmluZSBzd2FwcGVyX3BnX2RpciBOVUxMCitzdGF0aWMgaW5saW5lIHZvaWQgcGFnaW5nX2luaXQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpIHsgfQorI2VuZGlmCiAKIC8qCiAgKiBUaGUgcG1kIGNvbnRhaW5zIHRoZSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBwdGUgcGFnZS4KQEAgLTM4Myw4ICszOTEsNiBAQAogCiAjZWxzZQogCi1leHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKLQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKIGV4dGVybiAgdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKQEAgLTM5OCw5ICs0MDQsNiBAQAogI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLGZyb20scGZuLHNpemUscHJvdCkgXAogICAgICAgICAgICAgICAgIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIGZyb20sIHBmbiwgc2l6ZSwgcHJvdCkKIAotCi1leHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7Ci0KIHR5cGVkZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CiAKICNlbmRpZiAvKiAhZGVmaW5lZCAoX19BU1NFTUJMWV9fKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGxhdGZvcm0uaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BsYXRmb3JtLmgKaW5kZXggZTNkNWE0OC4uN2Q5MzZlNSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGxhdGZvcm0uaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wbGF0Zm9ybS5oCkBAIC03NCwxNiArNzQsNSBAQAogICovCiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9jYWxpYnJhdGVfY2NvdW50ICh2b2lkKTsKIAotLyoKLSAqIHBsYXRmb3JtX2dldF9ydGNfdGltZSByZXR1cm5zIFJUQyBzZWNvbmRzIChyZXR1cm5zIDAgZm9yIG5vIGVycm9yKQotICovCi1leHRlcm4gaW50IHBsYXRmb3JtX2dldF9ydGNfdGltZSh0aW1lX3QqKTsKLQotLyoKLSAqIHBsYXRmb3JtX3NldF9ydGNfdGltZSBzZXQgUlRDIHNlY29uZHMgKHJldHVybnMgMCBmb3Igbm8gZXJyb3IpCi0gKi8KLWV4dGVybiBpbnQgcGxhdGZvcm1fc2V0X3J0Y190aW1lKHRpbWVfdCk7Ci0KLQogI2VuZGlmCS8qIF9YVEVOU0FfUExBVEZPUk1fSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDA3Mzg3ZDMuLjBlYTQ5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xMyw2ICsxMyw3IEBACiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KICNpbmNsdWRlIDxhc20vY29wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CkBAIC0yNSw2ICsyNiw4IEBACiAjIGVycm9yIExpbnV4IHJlcXVpcmVzIHRoZSBYdGVuc2EgV2luZG93ZWQgUmVnaXN0ZXJzIE9wdGlvbi4KICNlbmRpZgogCisjZGVmaW5lIEFSQ0hfU0xBQl9NSU5BTElHTglYQ0hBTF9EQVRBX1dJRFRICisKIC8qCiAgKiBVc2VyIHNwYWNlIHByb2Nlc3Mgc2l6ZTogMSBHQi4KICAqIFdpbmRvd2VkIGNhbGwgQUJJIHJlcXVpcmVzIGNhbGxlciBhbmQgY2FsbGVlIHRvIGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBzYW1lCkBAIC0zMyw3ICszNiwxMiBAQAogICogdGhlIDEgR0IgcmVxdWlyZW1lbnQgYXBwbGllcyB0byB0aGUgc3RhY2sgYXMgd2VsbC4KICAqLwogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBUQVNLX1NJWkUJX19YVEVOU0FfVUxfQ09OU1QoMHg0MDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIFRBU0tfU0laRQkoUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQgKyBQTEFURk9STV9ERUZBVUxUX01FTV9TSVpFKQorI2VuZGlmCisKICNkZWZpbmUgU1RBQ0tfVE9QCVRBU0tfU0laRQogI2RlZmluZSBTVEFDS19UT1BfTUFYCVNUQUNLX1RPUAogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCmluZGV4IGE1MWQzNmEuLjgwZDI0YzQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCkBAIC0xNDYzLDYgKzE0NjMsNyBAQAogCWNhbGx4MAlhMAkJIyBzaG91bGQgbm90IHJldHVybgogMToJagkxYgogCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4gQmFpbCBvdXQhCiAgKi8KQEAgLTE3NzUsNyArMTc3Niw3IEBACiAJYmJzaS5sCWEyLCBQU19VTV9CSVQsIDFmCiAJaglfa2VybmVsX2V4Y2VwdGlvbgogMToJaglfdXNlcl9leGNlcHRpb24KLQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAogLyoKICAqIFN5c3RlbSBDYWxscy4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCmluZGV4IDY3ZTY5MTMuLjA4MTdmOWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUwpAQCAtNTMsNyArNTMsNyBAQAogMjoJbDMycglhMCwgMWIKIAlqeAlhMAogCi0JLnRleHQKKwkuc2VjdGlvbiAuaW5pdC50ZXh0LCAiYXgiCiAJLmFsaWduIDQKIF9zdGFydHVwOgogCkBAIC0yMzUsOCArMjM1LDkgQEAKICAqLwogCQogLnNlY3Rpb24gIi5ic3MucGFnZV9hbGlnbmVkIiwgInciCisjaWZkZWYgQ09ORklHX01NVQogRU5UUlkoc3dhcHBlcl9wZ19kaXIpCiAJLmZpbGwJUEFHRV9TSVpFLCAxLCAwCisjZW5kaWYKIEVOVFJZKGVtcHR5X3plcm9fcGFnZSkKIAkuZmlsbAlQQUdFX1NJWkUsIDEsIDAKLQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IGYzYjY2ZmIuLmEzNmM4NWVkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCkBAIC0xMzIsNiArMTMyLDE4IEBACiAJc2V0X3NyIChjYWNoZWRfaXJxX21hc2ssIElOVEVOQUJMRSk7CiB9CiAKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJdmFyaWFudF9pcnFfZW5hYmxlKGlycSk7CisJeHRlbnNhX2lycV91bm1hc2soaXJxKTsKK30KKworc3RhdGljIHZvaWQgeHRlbnNhX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJeHRlbnNhX2lycV9tYXNrKGlycSk7CisJdmFyaWFudF9pcnFfZGlzYWJsZShpcnEpOworfQorCiBzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQogewogCXNldF9zcigxIDw8IGlycSwgSU5UQ0xFQVIpOwpAQCAtMTQ2LDYgKzE1OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgeHRlbnNhX2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJ4dGVuc2EiLAorCS5lbmFibGUJCT0geHRlbnNhX2lycV9lbmFibGUsCisJLmRpc2FibGUJPSB4dGVuc2FfaXJxX2Rpc2FibGUsCiAJLm1hc2sJCT0geHRlbnNhX2lycV9tYXNrLAogCS51bm1hc2sJCT0geHRlbnNhX2lycV91bm1hc2ssCiAJLmFjawkJPSB4dGVuc2FfaXJxX2FjaywKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9wbGF0Zm9ybS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKaW5kZXggNjk2NzVmMi4uMWI5MWE5NyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMKQEAgLTM2LDggKzM2LDYgQEAKIF9GKHZvaWQsIGlkbGUsICh2b2lkKSwgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIndhaXRpIDAiIDo6OiAibWVtb3J5Iik7IH0pOwogX0Yodm9pZCwgaGVhcnRiZWF0LCAodm9pZCksIHsgfSk7CiBfRihpbnQsICBwY2liaW9zX2ZpeHVwLCAodm9pZCksIHsgcmV0dXJuIDA7IH0pOwotX0YoaW50LCBnZXRfcnRjX3RpbWUsICh0aW1lX3QqIHQpLCB7IHJldHVybiAwOyB9KTsKLV9GKGludCwgc2V0X3J0Y190aW1lLCAodGltZV90IHQpLCB7IHJldHVybiAwOyB9KTsKIAogI2lmZGVmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAogX0Yodm9pZCwgY2FsaWJyYXRlX2Njb3VudCwgKHZvaWQpLApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTE4NTU5Ny4uMDMxZjM2NiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNzIsNyArMTcyLDcgQEAKICAqICAgICAgIGNoaWxkcmVncy4KICAqLwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAgICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3NldHVwLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwppbmRleCA0ZWMxNjMzLi4xZTVhMDM0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYwpAQCAtODQsNyArODQsMTMgQEAKIGludCBpbml0cmRfaXNfbWFwcGVkOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gdm9pZCBpbml0X21tdSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9tbXUodm9pZCkgeyB9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgem9uZXNfaW5pdCh2b2lkKTsKIAogLyoKICAqIEJvb3QgcGFyYW1ldGVyIHBhcnNpbmcuCkBAIC0yODYsNiArMjkyLDcgQEAKIAogCiAJcGFnaW5nX2luaXQoKTsKKwl6b25lc19pbml0KCk7CiAKICNpZmRlZiBDT05GSUdfVlQKICMgaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwppbmRleCA4ZGYxZTg0Li44ODQ4MTIwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNSwyNyArMjUsMzEgQEAKICNpbmNsdWRlIDxhc20vdGltZXguaD4KICNpbmNsdWRlIDxhc20vcGxhdGZvcm0uaD4KIAotCi1ERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwotRVhQT1JUX1NZTUJPTChydGNfbG9jayk7Ci0KLQogI2lmZGVmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAogdW5zaWduZWQgbG9uZyBjY291bnRfcGVyX2ppZmZ5OwkJLyogcGVyIDEvSFogKi8KIHVuc2lnbmVkIGxvbmcgbnNlY19wZXJfY2NvdW50OwkJLyogbnNlYyBwZXIgY2NvdW50IGluY3JlbWVudCAqLwogI2VuZGlmCiAKLXN0YXRpYyBsb25nIGxhc3RfcnRjX3VwZGF0ZSA9IDA7Ci0KLS8qCi0gKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltIGluIG5hbm9zZWMgdW5pdHMuCi0gKi8KLQotdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBjY291bnRfcmVhZCh2b2lkKQogewotCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKWppZmZpZXMgKiAoMTAwMDAwMDAwMCAvIEhaKTsKKwlyZXR1cm4gKGN5Y2xlX3QpZ2V0X2Njb3VudCgpOwogfQogCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNjb3VudF9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZSA9ICJjY291bnQiLAorCS5yYXRpbmcgPSAyMDAsCisJLnJlYWQgPSBjY291bnRfcmVhZCwKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS8qCisJICogV2l0aCBhIHNoaWZ0IG9mIDIyIHRoZSBsb3dlciBsaW1pdCBvZiB0aGUgY3B1IGNsb2NrIGlzCisJICogMU1Ieiwgd2hlcmUgTlNFQ19QRVJfQ0NPVU5UIGlzIDEwMDAgb3IgYSBiaXQgbGVzcyB0aGFuCisJICogMl4xMDogU2luY2Ugd2UgaGF2ZSAzMiBiaXRzIGFuZCB0aGUgbXVsdGlwbGljYXRvciBjYW4KKwkgKiBhbHJlYWR5IHRha2UgdXAgYXMgbXVjaCBhcyAxMCBiaXRzLCB0aGlzIGxlYXZlcyB1cyB3aXRoCisJICogcmVtYWluaW5nIHVwcGVyIDIyIGJpdHMuCisJICovCisJLnNoaWZ0ID0gMjIsCit9OworCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQl0aW1lcl9pbnRlcnJ1cHQsCkBAIC01NSwxMSArNTksMTEgQEAKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7Ci0JdGltZV90IHNlY19vLCBzZWNfbiA9IDA7CisJeHRpbWUudHZfbnNlYyA9IDA7CisJeHRpbWUudHZfc2VjID0gcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKCk7CiAKLQkvKiBUaGUgcGxhdGZvcm0gbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gdG8gY2FsaWJyYXRlIHRoZSBwcm9jZXNzb3IKLQkgKiBzcGVlZCBmb3IgdGhlIENBTElCUkFURS4KLQkgKi8KKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCisJCS14dGltZS50dl9zZWMsIC14dGltZS50dl9uc2VjKTsKIAogI2lmZGVmIENPTkZJR19YVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAogCXByaW50aygiQ2FsaWJyYXRpbmcgQ1BVIGZyZXF1ZW5jeSAiKTsKQEAgLTY3LDE5ICs3MSwxMCBAQAogCXByaW50aygiJWQuJTAyZCBNSHpcbiIsIChpbnQpY2NvdW50X3Blcl9qaWZmeS8oMTAwMDAwMC9IWiksCiAJCQkoaW50KShjY291bnRfcGVyX2ppZmZ5LygxMDAwMC9IWikpJTEwMCk7CiAjZW5kaWYKLQotCS8qIFNldCB0aW1lIGZyb20gUlRDIChpZiBwcm92aWRlZCkgKi8KLQotCWlmIChwbGF0Zm9ybV9nZXRfcnRjX3RpbWUoJnNlY19vKSA9PSAwKQotCQl3aGlsZSAocGxhdGZvcm1fZ2V0X3J0Y190aW1lKCZzZWNfbikpCi0JCQlpZiAoc2VjX28gIT0gc2VjX24pCi0JCQkJYnJlYWs7Ci0KLQl4dGltZS50dl9uc2VjID0gMDsKLQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMgPSBzZWNfbjsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLQkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOworCWNjb3VudF9jbG9ja3NvdXJjZS5tdWx0ID0KKwkJY2xvY2tzb3VyY2VfaHoybXVsdChDQ09VTlRfUEVSX0pJRkZZICogSFosCisJCQkJY2NvdW50X2Nsb2Nrc291cmNlLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2NvdW50X2Nsb2Nrc291cmNlKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGxpbnV4IHRpbWVyIGludGVycnVwdC4gKi8KIApAQCAtODcsNjkgKzgyLDYgQEAKIAlzZXRfbGludXhfdGltZXIoZ2V0X2Njb3VudCgpICsgQ0NPVU5UX1BFUl9KSUZGWSk7CiB9CiAKLQotaW50IGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXRpbWVfdCB3dG1fc2VjLCBzZWMgPSB0di0+dHZfc2VjOwotCWxvbmcgd3RtX25zZWMsIG5zZWMgPSB0di0+dHZfbnNlYzsKLQl1bnNpZ25lZCBsb25nIGRlbHRhOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0KLQkvKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgInh0aW1lIiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZQotCSAqIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2YKLQkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQotCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0KLQlkZWx0YSA9IENDT1VOVF9QRVJfSklGRlk7Ci0JZGVsdGEgKz0gZ2V0X2Njb3VudCgpIC0gZ2V0X2xpbnV4X3RpbWVyKCk7Ci0JbnNlYyAtPSBkZWx0YSAqIE5TRUNfUEVSX0NDT1VOVDsKLQotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLQotdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBzZWMsIHVzZWMsIGRlbHRhLCBzZXE7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCi0JCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQkJdXNlYyA9ICh4dGltZS50dl9uc2VjIC8gTlNFQ19QRVJfVVNFQyk7Ci0KLQkJZGVsdGEgPSBnZXRfbGludXhfdGltZXIoKSAtIGdldF9jY291bnQoKTsKLQotCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwotCi0JdXNlYyArPSAoKCh1bnNpZ25lZCBsb25nKSBDQ09VTlRfUEVSX0pJRkZZIC0gZGVsdGEpCi0JCSAqICh1bnNpZ25lZCBsb25nKSBOU0VDX1BFUl9DQ09VTlQpIC8gTlNFQ19QRVJfVVNFQzsKLQotCWZvciAoOyB1c2VjID49IDEwMDAwMDA7IHNlYysrLCB1c2VjIC09IDEwMDAwMDApCi0JCTsKLQotCXR2LT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7Ci0KIC8qCiAgKiBUaGUgdGltZXIgaW50ZXJydXB0IGlzIGNhbGxlZCBIWiB0aW1lcyBwZXIgc2Vjb25kLgogICovCkBAIC0xNzgsMTYgKzExMCw2IEBACiAJCW5leHQgKz0gQ0NPVU5UX1BFUl9KSUZGWTsKIAkJc2V0X2xpbnV4X3RpbWVyKG5leHQpOwogCi0JCWlmIChudHBfc3luY2VkKCkgJiYKLQkJICAgIHh0aW1lLnR2X3NlYyAtIGxhc3RfcnRjX3VwZGF0ZSA+PSA2NTkgJiYKLQkJICAgIGFicygoeHRpbWUudHZfbnNlYy8xMDAwKS0oMTAwMDAwMC0xMDAwMDAwL0haKSk8NTAwMDAwMC9IWikgewotCi0JCQlpZiAocGxhdGZvcm1fc2V0X3J0Y190aW1lKHh0aW1lLnR2X3NlYysxKSA9PSAwKQotCQkJCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYysxOwotCQkJZWxzZQotCQkJCS8qIERvIGl0IGFnYWluIGluIDYwIHMgKi8KLQkJCQlsYXN0X3J0Y191cGRhdGUgKz0gNjA7Ci0JCX0KIAkJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIAl9CiAKQEAgLTIxMyw0ICsxMzUsMyBAQAogCSAgICAgICAobG9vcHNfcGVyX2ppZmZ5LygxMDAwMC9IWikpICUgMTAwKTsKIH0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCmluZGV4IGM0NGY4MzAuLjlmMGI3MTEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICNlbmRpZgogeyBFWENDQVVTRV9VTkFMSUdORUQsCQlLUk5MLAkgICBmYXN0X3VuYWxpZ25lZCB9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX01NVQogeyBFWENDQVVTRV9JVExCX01JU1MsCQkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCiB7IEVYQ0NBVVNFX0lUTEJfTUlTUywJCVVTRVJ8S1JOTCwgZmFzdF9zZWNvbmRfbGV2ZWxfbWlzc30sCiB7IEVYQ0NBVVNFX0lUTEJfTVVMVElISVQsCQkwLAkgICBkb19tdWx0aWhpdCB9LApAQCAtMTE4LDYgKzExOSw3IEBACiB7IEVYQ0NBVVNFX1NUT1JFX0NBQ0hFX0FUVFJJQlVURSwJVVNFUnxLUk5MLCBmYXN0X3N0b3JlX3Byb2hpYml0ZWQgfSwKIHsgRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFLAkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCiB7IEVYQ0NBVVNFX0xPQURfQ0FDSEVfQVRUUklCVVRFLAkwLAkgICBkb19wYWdlX2ZhdWx0IH0sCisjZW5kaWYgLyogQ09ORklHX01NVSAqLwogLyogWENDSEFMX0VYQ0NBVVNFX0ZMT0FUSU5HX1BPSU5UIHVuaGFuZGxlZCAqLwogI2lmIFhURU5TQV9IQVZFX0NPUFJPQ0VTU09SKDApCiBDT1BST0NFU1NPUigwKSwKQEAgLTM3MiwxMSArMzc0LDEwIEBACiAJdW5zaWduZWQgbG9uZyBhMCwgYTEsIHBjOwogCXVuc2lnbmVkIGxvbmcgc3Bfc3RhcnQsIHNwX2VuZDsKIAotCWExID0gKHVuc2lnbmVkIGxvbmcpc3A7Ci0KLQlpZiAoYTEgPT0gMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YgJTAsIGExXG4iIDogIj1hIihhMSkpOwotCisJaWYgKHNwKQorCQlhMSA9ICh1bnNpZ25lZCBsb25nKXNwOworCWVsc2UKKwkJYTEgPSB0YXNrLT50aHJlYWQuc3A7CiAKIAlzcF9zdGFydCA9IGExICYgfihUSFJFQURfU0laRS0xKTsKIAlzcF9lbmQgPSBzcF9zdGFydCArIFRIUkVBRF9TSVpFOwpAQCAtNDE4LDkgKzQxOSw4IEBACiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGxvbmcgKnN0YWNrOwogCi0JaWYgKHNwID09IDApCi0JCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ICUwLCBhMVxuIiA6ICI9YSIoc3ApKTsKLQorCWlmICghc3ApCisJCXNwID0gKHVuc2lnbmVkIGxvbmcgKil0YXNrLT50aHJlYWQuc3A7CiAgCXN0YWNrID0gc3A7CiAKIAlwcmludGsoIlxuU3RhY2s6ICIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92ZWN0b3JzLlMKaW5kZXggZWIyZDdiYi4uNzRhNzUxOCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TCkBAIC0zMDksNiArMzA5LDcgQEAKIAkgKiBBbGwgb3RoZXIgZXhjZXB0aW9ucyBhcmUgdW5leHBlY3RlZCBhbmQgdGh1cyB1bnJlY292ZXJhYmxlIQogCSAqLwogCisjaWZkZWYgQ09ORklHX01NVQogCS5leHRlcm4gZmFzdF9zZWNvbmRfbGV2ZWxfbWlzc19kb3VibGVfa2VybmVsCiAKIC5Ma3NwOgkvKiBhMDogYTAsIGExOiBhMSwgYTI6IGEyLCBhMzogdHJhc2hlZCwgZGVwYzogZGVwYywgZXhjc2F2ZTogYTMgKi8KQEAgLTMxOSw2ICszMjAsOSBAQAogCWJuZXoJYTMsIC5MdW5yZWNvdmVyYWJsZQogMToJbW92aQlhMywgZmFzdF9zZWNvbmRfbGV2ZWxfbWlzc19kb3VibGVfa2VybmVsCiAJangJYTMKKyNlbHNlCisuZXF1CS5Ma3NwLAkuTHVucmVjb3ZlcmFibGUKKyNlbmRpZgogCiAJLyogQ3JpdGljYWwhIFdlIGNhbid0IGhhbmRsZSB0aGlzIHNpdHVhdGlvbi4gUEFOSUMhICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZDUwNjc3NC4uYzFiZTlhNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogCiAjaW5jbHVkZSA8dmFyaWFudC9jb3JlLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0vaGFyZHdhcmUuaD4KIE9VVFBVVF9BUkNIKHh0ZW5zYSkKIEVOVFJZKF9zdGFydCkKIApAQCAtMjYsNyArMjcsOSBAQAogamlmZmllcyA9IGppZmZpZXNfNjQ7CiAjZW5kaWYKIAorI2lmbmRlZiBLRVJORUxPRkZTRVQKICNkZWZpbmUgS0VSTkVMT0ZGU0VUIDB4ZDAwMDEwMDAKKyNlbmRpZgogCiAvKiBOb3RlOiBJbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgaXQgd291bGQgYmUgbmljZSB0byBzcGVjaWZ5IG9ubHkgdGhlCiAgICB2ZWN0b3IgbmFtZSBhbmQgc2VjdGlvbiBraW5kIGFuZCBjb25zdHJ1Y3QgInN5bSIgYW5kICJzZWN0aW9uIiB1c2luZwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9tbS9NYWtlZmlsZQppbmRleCA2NGUzMDRhLi5mMGI2NDZkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3h0ZW5zYS9tbS9NYWtlZmlsZQpAQCAtMiw0ICsyLDUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9YdGVuc2Etc3BlY2lmaWMgcGFydHMgb2YgdGhlIG1lbW9yeSBtYW5hZ2VyLgogIwogCi1vYmoteQkgOj0gaW5pdC5vIGZhdWx0Lm8gdGxiLm8gbWlzYy5vIGNhY2hlLm8KK29iai15CQkJOj0gaW5pdC5vIGNhY2hlLm8gbWlzYy5vCitvYmotJChDT05GSUdfTU1VKQkrPSBmYXVsdC5vIG1tdS5vIHRsYi5vCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMgYi9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKaW5kZXggMzQxNjNjZi4uNDI3ZTE0ZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vaW5pdC5jCisrKyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwpAQCAtMjQsMTUgKzI0LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgotI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0KLQotREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KIApAQCAtMTMwLDcgKzEyMyw4IEBACiAKIAkvKiBGaW5kIGFuIGFyZWEgdG8gdXNlIGZvciB0aGUgYm9vdG1lbSBiaXRtYXAuICovCiAKLQlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMobWF4X2xvd19wZm4pIDw8IFBBR0VfU0hJRlQ7CisJYm9vdG1hcF9zaXplID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKG1heF9sb3dfcGZuIC0gbWluX2xvd19wZm4pOworCWJvb3RtYXBfc2l6ZSA8PD0gUEFHRV9TSElGVDsKIAlib290bWFwX3N0YXJ0ID0gfjA7CiAKIAlmb3IgKGk9MDsgaTxzeXNtZW0ubnJfYmFua3M7IGkrKykKQEAgLTE0NSw4ICsxMzksOSBAQAogCS8qIFJlc2VydmUgdGhlIGJvb3RtZW0gYml0bWFwIGFyZWEgKi8KIAogCW1lbV9yZXNlcnZlKGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfc3RhcnQgKyBib290bWFwX3NpemUsIDEpOwotCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgbWluX2xvd19wZm4sCisJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLAogCQkJCQkgYm9vdG1hcF9zdGFydCA+PiBQQUdFX1NISUZULAorCQkJCQkgbWluX2xvd19wZm4sCiAJCQkJCSBtYXhfbG93X3Bmbik7CiAKIAkvKiBBZGQgYWxsIHJlbWFpbmluZyBtZW1vcnkgcGllY2VzIGludG8gdGhlIGJvb3RtZW0gbWFwICovCkBAIC0xNTgsMTQgKzE1MywxNCBAQAogfQogCiAKLXZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCit2b2lkIF9faW5pdCB6b25lc19pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107CiAJaW50IGk7CiAKIAkvKiBBbGwgcGFnZXMgYXJlIERNQS1hYmxlLCBzbyB3ZSBwdXQgdGhlbSBhbGwgaW4gdGhlIERNQSB6b25lLiAqLwogCi0Jem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfbG93X3BmbjsKKwl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuIC0gQVJDSF9QRk5fT0ZGU0VUOwogCWZvciAoaSA9IDE7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKIAkJem9uZXNfc2l6ZVtpXSA9IDA7CiAKQEAgLTE3Myw0MCArMTY4LDcgQEAKIAl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSBtYXhfcGZuIC0gbWF4X2xvd19wZm47CiAjZW5kaWYKIAotCS8qIEluaXRpYWxpemUgdGhlIGtlcm5lbCdzIHBhZ2UgdGFibGVzLiAqLwotCi0JbWVtc2V0KHN3YXBwZXJfcGdfZGlyLCAwLCBQQUdFX1NJWkUpOwotCi0JZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7Ci19Ci0KLS8qCi0gKiBGbHVzaCB0aGUgbW11IGFuZCByZXNldCBhc3NvY2lhdGVkIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWVzLgotICovCi0KLXZvaWQgX19pbml0IGluaXRfbW11ICh2b2lkKQotewotCS8qIFdyaXRpbmcgemVyb3MgdG8gdGhlIDx0PlRMQkNGRyBzcGVjaWFsIHJlZ2lzdGVycyBlbnN1cmUKLQkgKiB0aGF0IHZhbGlkIHZhbHVlcyBleGlzdCBpbiB0aGUgcmVnaXN0ZXIuICBGb3IgZXhpc3RpbmcKLQkgKiBQR1NaSUQ8dz4gZmllbGRzLCB6ZXJvIHNlbGVjdHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlCi0JICogcGFnZS1zaXplIGFycmF5LiAgRm9yIG5vbmV4aXN0ZW50IFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gaXMKLQkgKiB0aGUgYmVzdCB2YWx1ZSB0byB3cml0ZS4gIEFsc28sIHdoZW4gY2hhbmdpbmcgUEdTWklEPHc+Ci0JICogZmllbGRzLCB0aGUgY29ycmVzcG9uZGluZyBUTEIgbXVzdCBiZSBmbHVzaGVkLgotCSAqLwotCXNldF9pdGxiY2ZnX3JlZ2lzdGVyICgwKTsKLQlzZXRfZHRsYmNmZ19yZWdpc3RlciAoMCk7Ci0JZmx1c2hfdGxiX2FsbCAoKTsKLQotCS8qIFNldCByYXNpZCByZWdpc3RlciB0byBhIGtub3duIHZhbHVlLiAqLwotCi0Jc2V0X3Jhc2lkX3JlZ2lzdGVyIChBU0lEX1VTRVJfRklSU1QpOwotCi0JLyogU2V0IFBURVZBRERSIHNwZWNpYWwgcmVnaXN0ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYWdlCi0JICogdGFibGUsIHdoaWNoIGlzIGluIGtlcm5lbCBtYXBwYWJsZSBzcGFjZSAoaWUuIG5vdAotCSAqIHN0YXRpY2FsbHkgbWFwcGVkKS4gIFRoaXMgcmVnaXN0ZXIncyB2YWx1ZSBpcyB1bmRlZmluZWQgb24KLQkgKiByZXNldC4KLQkgKi8KLQlzZXRfcHRldmFkZHJfcmVnaXN0ZXIgKFBHVEFCTEVfU1RBUlQpOworCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgem9uZXNfc2l6ZSwgQVJDSF9QRk5fT0ZGU0VULCBOVUxMKTsKIH0KIAogLyoKQEAgLTIxOCw4ICsxODAsOCBAQAogCXVuc2lnbmVkIGxvbmcgY29kZXNpemUsIHJlc2VydmVkcGFnZXMsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAl1bnNpZ25lZCBsb25nIGhpZ2htZW1zaXplLCB0bXAsIHJhbTsKIAotCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXMgPSBtYXhfbG93X3BmbjsKLQloaWdoX21lbW9yeSA9ICh2b2lkICopIF9fdmEobWF4X21hcG5yIDw8IFBBR0VfU0hJRlQpOworCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXMgPSBtYXhfbG93X3BmbiAtIEFSQ0hfUEZOX09GRlNFVDsKKwloaWdoX21lbW9yeSA9ICh2b2lkICopIF9fdmEobWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7CiAJaGlnaG1lbXNpemUgPSAwOwogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTIyOSw3ICsxOTEsNyBAQAogCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW0oKTsKIAogCXJlc2VydmVkcGFnZXMgPSByYW0gPSAwOwotCWZvciAodG1wID0gMDsgdG1wIDwgbWF4X2xvd19wZm47IHRtcCsrKSB7CisJZm9yICh0bXAgPSAwOyB0bXAgPCBtYXhfbWFwbnI7IHRtcCsrKSB7CiAJCXJhbSsrOwogCQlpZiAoUGFnZVJlc2VydmVkKG1lbV9tYXArdG1wKSkKIAkJCXJlc2VydmVkcGFnZXMrKzsKQEAgLTI3OSwyMyArMjQxLDMgQEAKIAlwcmludGsoIkZyZWVpbmcgdW51c2VkIGtlcm5lbCBtZW1vcnk6ICVkayBmcmVlZFxuIiwKIAkgICAgICAgKCZfX2luaXRfZW5kIC0gJl9faW5pdF9iZWdpbikgPj4gMTApOwogfQotCi1zdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZSBfX3JlYWRfbW9zdGx5OwotCi1zdGF0aWMgdm9pZCBwZ2RfY3Rvcih2b2lkKiBhZGRyKQotewotCXB0ZV90KiBwdGVwID0gKHB0ZV90KilhZGRyOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKywgcHRlcCsrKQotCQlwdGVfY2xlYXIoTlVMTCwgMCwgcHRlcCk7Ci0KLX0KLQotdm9pZCBfX2luaXQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCi17Ci0JcGd0YWJsZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwZ2QiLAotCQkJUEFHRV9TSVpFLCBQQUdFX1NJWkUsCi0JCQlTTEFCX0hXQ0FDSEVfQUxJR04sCi0JCQlwZ2RfY3Rvcik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9taXNjLlMgYi9hcmNoL3h0ZW5zYS9tbS9taXNjLlMKaW5kZXggYzg4NTY2NC4uYjA0ODQwNiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vbWlzYy5TCisrKyBiL2FyY2gveHRlbnNhL21tL21pc2MuUwpAQCAtODQsNiArODQsNyBAQAogCiAJcmV0dwogCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIElmIHdlIGhhdmUgdG8gZGVhbCB3aXRoIGNhY2hlIGFsaWFzaW5nLCB3ZSB1c2UgdGVtcG9yYXJ5IG1lbW9yeSBtYXBwaW5ncwogICogdG8gZW5zdXJlIHRoYXQgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcGFnZXMgaGF2ZSB0aGUgc2FtZSBjb2xvciBhcwpAQCAtMzExLDYgKzMxMiw3IEBACiAvKiBFbmQgb2Ygc3BlY2lhbCB0cmVhdG1lbnQgaW4gdGxiIG1pc3MgZXhjZXB0aW9uICovCiAKIEVOVFJZKF9fdGxidGVtcF9tYXBwaW5nX2VuZCkKKyNlbmRpZiAvKiBDT05GSUdfTU1VCiAKIC8qCiAgKiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfcGFnZSh1bG9uZyBzdGFydCkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL21tdS5jIGIvYXJjaC94dGVuc2EvbW0vbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiOTFhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL21tL21tdS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiB4dGVuc2EgbW11IHN0dWZmCisgKgorICogRXh0cmFjdGVkIGZyb20gaW5pdC5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKwordm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3sKKwltZW1zZXQoc3dhcHBlcl9wZ19kaXIsIDAsIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBGbHVzaCB0aGUgbW11IGFuZCByZXNldCBhc3NvY2lhdGVkIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWVzLgorICovCit2b2lkIF9faW5pdCBpbml0X21tdSh2b2lkKQoreworCS8qIFdyaXRpbmcgemVyb3MgdG8gdGhlIDx0PlRMQkNGRyBzcGVjaWFsIHJlZ2lzdGVycyBlbnN1cmUKKwkgKiB0aGF0IHZhbGlkIHZhbHVlcyBleGlzdCBpbiB0aGUgcmVnaXN0ZXIuICBGb3IgZXhpc3RpbmcKKwkgKiBQR1NaSUQ8dz4gZmllbGRzLCB6ZXJvIHNlbGVjdHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlCisJICogcGFnZS1zaXplIGFycmF5LiAgRm9yIG5vbmV4aXN0ZW50IFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gaXMKKwkgKiB0aGUgYmVzdCB2YWx1ZSB0byB3cml0ZS4gIEFsc28sIHdoZW4gY2hhbmdpbmcgUEdTWklEPHc+CisJICogZmllbGRzLCB0aGUgY29ycmVzcG9uZGluZyBUTEIgbXVzdCBiZSBmbHVzaGVkLgorCSAqLworCXNldF9pdGxiY2ZnX3JlZ2lzdGVyKDApOworCXNldF9kdGxiY2ZnX3JlZ2lzdGVyKDApOworCWZsdXNoX3RsYl9hbGwoKTsKKworCS8qIFNldCByYXNpZCByZWdpc3RlciB0byBhIGtub3duIHZhbHVlLiAqLworCisJc2V0X3Jhc2lkX3JlZ2lzdGVyKEFTSURfVVNFUl9GSVJTVCk7CisKKwkvKiBTZXQgUFRFVkFERFIgc3BlY2lhbCByZWdpc3RlciB0byB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UKKwkgKiB0YWJsZSwgd2hpY2ggaXMgaW4ga2VybmVsIG1hcHBhYmxlIHNwYWNlIChpZS4gbm90CisJICogc3RhdGljYWxseSBtYXBwZWQpLiAgVGhpcyByZWdpc3RlcidzIHZhbHVlIGlzIHVuZGVmaW5lZCBvbgorCSAqIHJlc2V0LgorCSAqLworCXNldF9wdGV2YWRkcl9yZWdpc3RlcihQR1RBQkxFX1NUQVJUKTsKK30KKworc3RydWN0IGttZW1fY2FjaGUgKnBndGFibGVfY2FjaGUgX19yZWFkX21vc3RseTsKKworc3RhdGljIHZvaWQgcGdkX2N0b3Iodm9pZCAqYWRkcikKK3sKKwlwdGVfdCAqcHRlcCA9IChwdGVfdCAqKWFkZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrLCBwdGVwKyspCisJCXB0ZV9jbGVhcihOVUxMLCAwLCBwdGVwKTsKKworfQorCit2b2lkIF9faW5pdCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKK3sKKwlwZ3RhYmxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsCisJCQlQQUdFX1NJWkUsIFBBR0VfU0laRSwKKwkJCVNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCXBnZF9jdG9yKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvY29uc29sZS5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9jb25zb2xlLmMKaW5kZXggMjVkNDZjOC4uNGM1NTljZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9jb25zb2xlLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9jb25zb2xlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbFAuaD4KIApAQCAtMTc2LDIyICsxNzcsMjQgQEAKIAkvKiBTdHViLCBvbmNlIGFnYWluLi4gKi8KIH0KIAotc3RhdGljIGludCByc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCByc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwotCW9mZl90IGJlZ2luID0gMDsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKLQkqZW9mID0gMTsKLQotCWlmIChvZmYgPj0gbGVuICsgYmVnaW4pCi0JCXJldHVybiAwOwotCi0JKnN0YXJ0ID0gcGFnZSArIChvZmYgLSBiZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbiArIGxlbiAtIG9mZikgPyBjb3VudCA6IGJlZ2luICsgbGVuIC0gb2ZmKTsKKwlzZXFfcHJpbnRmKG0sICJzZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcnNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCiBzdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNlcmlhbF9vcHMgPSB7CiAJLm9wZW4gPSByc19vcGVuLApAQCAtMjAzLDcgKzIwNiw3IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9IHJzX2NoYXJzX2luX2J1ZmZlciwKIAkuaGFuZ3VwID0gcnNfaGFuZ3VwLAogCS53YWl0X3VudGlsX3NlbnQgPSByc193YWl0X3VudGlsX3NlbnQsCi0JLnJlYWRfcHJvYyA9IHJzX3JlYWRfcHJvYworCS5wcm9jX2ZvcHMgPSAmcnNfcHJvY19mb3BzLAogfTsKIAogaW50IF9faW5pdCByc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlNjE5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKyMgTWFrZWZpbGUgZm9yIHRoZSBTdHJldGNoIFM2MTA1IGV2YWwgYm9hcmQKKworb2JqLXkJCTo9IHNldHVwLm8gZGV2aWNlLm8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9kZXZpY2UuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGIwOGJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2RldmljZS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBzNjEwNSBwbGF0Zm9ybSBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IGVtbGl4IEdtYkgKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDx2YXJpYW50L2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgVUFSVF9JTlROVU0JCTQKKworc3RhdGljIGNvbnN0IHNpZ25lZCBjaGFyIHVhcnRfaXJxX21hcHBpbmdzW10gPSB7CisJUzZfSU5UQ19VQVJUKDApLAorCVM2X0lOVENfVUFSVCgxKSwKKwktMSwKK307CisKK2NvbnN0IHNpZ25lZCBjaGFyICpwbGF0Zm9ybV9pcnFfbWFwcGluZ3NbTlJfSVJRU10gPSB7CisJW1VBUlRfSU5UTlVNXSA9IHVhcnRfaXJxX21hcHBpbmdzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UgPSAodm9pZCAqKVM2X1JFR19VQVJUICsgMHgwMDAwLAorCQkubWFwYmFzZSA9IFM2X1JFR19VQVJUICsgMHgwMDAwLAorCQkuaXJxID0gVUFSVF9JTlROVU0sCisJCS51YXJ0Y2xrID0gUzZfU0NMSywKKwkJLnJlZ3NoaWZ0ID0gMiwKKwkJLmlvdHlwZSA9IFNFUklBTF9JT19NRU0sCisJCS5mbGFncyA9IEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QsCisJfSwKKwl7CisJCS5tZW1iYXNlID0gKHZvaWQgKilTNl9SRUdfVUFSVCArIDB4MTAwMCwKKwkJLm1hcGJhc2UgPSBTNl9SRUdfVUFSVCArIDB4MTAwMCwKKwkJLmlycSA9IFVBUlRfSU5UTlVNLAorCQkudWFydGNsayA9IFM2X1NDTEssCisJCS5yZWdzaGlmdCA9IDIsCisJCS5pb3R5cGUgPSBTRVJJQUxfSU9fTUVNLAorCQkuZmxhZ3MgPSBBU1lOQ19CT09UX0FVVE9DT05GIHwgQVNZTkNfU0tJUF9URVNULAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGxhdGZvcm1fZGV2aWNlc1tdID0geworCXsKKwkJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJCS5pZCA9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkJLmRldiA9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRldmljZV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKTsgaSsrKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBsYXRmb3JtX2RldmljZXNbaV0pOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbF9zeW5jKGRldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2dwaW8uaCBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTExYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vZ3Bpby5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX19BU01fWFRFTlNBX1M2MTA1X0dQSU9fSAorI2RlZmluZSBfX0FTTV9YVEVOU0FfUzYxMDVfR1BJT19ICisKKyNkZWZpbmUgR1BJT19CUF9URU1QX0FMQVJNCTAKKyNkZWZpbmUgR1BJT19QQl9SRVNFVF9JTgkxCisjZGVmaW5lIEdQSU9fRVhQX0lSUQkJMgorI2RlZmluZSBHUElPX1RSSUdHRVJfSVJRCTMKKyNkZWZpbmUgR1BJT19SVENfSVJRCQk0CisjZGVmaW5lIEdQSU9fUEhZX0lSUQkJNQorI2RlZmluZSBHUElPX0lNQUdFUl9SRVNFVAk2CisjZGVmaW5lIEdQSU9fU0RfSVJRCQk3CisjZGVmaW5lIEdQSU9fTUlOSV9CT09UX0lOSAk4CisjZGVmaW5lIEdQSU9fQk9BUkRfUkVTRVQJOQorI2RlZmluZSBHUElPX0VYUF9QUkVTRU5UCTEwCisjZGVmaW5lIEdQSU9fTEVEMV9OR1JFRU4JMTIKKyNkZWZpbmUgR1BJT19MRUQxX1JFRAkJMTMKKyNkZWZpbmUgR1BJT19MRUQwX05HUkVFTgkxNAorI2RlZmluZSBHUElPX0xFRDBfTlJFRAkJMTUKKyNkZWZpbmUgR1BJT19TUElfQ1MwCQkxNgorI2RlZmluZSBHUElPX1NQSV9DUzEJCTE3CisjZGVmaW5lIEdQSU9fU1BJX0NTMwkJMTkKKyNkZWZpbmUgR1BJT19TUElfQ1M0CQkyMAorI2RlZmluZSBHUElPX1NEX1dQCQkyMQorI2RlZmluZSBHUElPX0JQX1JFU0VUCQkyMgorI2RlZmluZSBHUElPX0FMQVJNX09VVAkJMjMKKworI2VuZGlmIC8qIF9fQVNNX1hURU5TQV9TNjEwNV9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmggYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MjhlZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19YVEVOU0FfUzYxMDVfSEFSRFdBUkVfSAorI2RlZmluZSBfX1hURU5TQV9TNjEwNV9IQVJEV0FSRV9ICisKKyNkZWZpbmUgUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQJMHg0MDAwMDAwMAorI2RlZmluZSBQTEFURk9STV9ERUZBVUxUX01FTV9TSVpFCTB4MDgwMDAwMDAKKworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCQkwCisKKyNkZWZpbmUgS0VSTkVMT0ZGU0VUCQkJKFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NUQVJUICsgMHgxMDAwKQorCisjZW5kaWYgLyogX19YVEVOU0FfUzYxMDVfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vc2VyaWFsLmggYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9zZXJpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGE3NzFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vc2VyaWFsLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fQVNNX1hURU5TQV9TNjEwNV9TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9YVEVOU0FfUzYxMDVfU0VSSUFMX0gKKworI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KKworI2RlZmluZSBCQVNFX0JBVUQgKFM2X1NDTEsgLyAxNikKKworI2VuZGlmIC8qIF9fQVNNX1hURU5TQV9TNjEwNV9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L3NldHVwLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA0MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L3NldHVwLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIHM2MTA1IGNvbnRyb2wgcm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgZW1saXggR21iSAorICovCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CisKKyNpbmNsdWRlIDx2YXJpYW50L2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0vZ3Bpby5oPgorCit2b2lkIHBsYXRmb3JtX2hhbHQodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXdoaWxlICgxKQorCQk7Cit9CisKK3ZvaWQgcGxhdGZvcm1fcG93ZXJfb2ZmKHZvaWQpCit7CisJcGxhdGZvcm1faGFsdCgpOworfQorCit2b2lkIHBsYXRmb3JtX3Jlc3RhcnQodm9pZCkKK3sKKwlwbGF0Zm9ybV9oYWx0KCk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRmb3JtX3NldHVwKGNoYXIgKipjbWRsaW5lKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gcmVhZGwoUzZfUkVHX0dSRUcxICsgUzZfR1JFRzFfQ0xLR0FURSk7CisJcmVnICY9IH4oMSA8PCBTNl9HUkVHMV9CTE9DS19TQik7CisJd3JpdGVsKHJlZywgUzZfUkVHX0dSRUcxICsgUzZfR1JFRzFfQ0xLR0FURSk7CisKKwlyZWcgPSByZWFkbChTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9CTE9DS0VOQSk7CisJcmVnIHw9IDEgPDwgUzZfR1JFRzFfQkxPQ0tfU0I7CisJd3JpdGVsKHJlZywgUzZfUkVHX0dSRUcxICsgUzZfR1JFRzFfQkxPQ0tFTkEpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJTNjEwNSBvbiBTdHJldGNoIFM2MDAwIC0gIgorCQkiQ29weXJpZ2h0IChDKSAyMDA5IGVtbGl4IEdtYkggPGluZm9AZW1saXguY29tPlxuIik7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRmb3JtX2luaXQoYnBfdGFnX3QgKmZpcnN0KQoreworCWdwaW9fcmVxdWVzdChHUElPX0xFRDFfTkdSRUVOLCAibGVkMV9ncmVlbiIpOworCWdwaW9fcmVxdWVzdChHUElPX0xFRDFfUkVELCAibGVkMV9yZWQiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19MRUQxX05HUkVFTiwgMSk7Cit9CisKK3ZvaWQgcGxhdGZvcm1faGVhcnRiZWF0KHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBjOworCisJaWYgKCEoKytjICYgMHg0RikpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xFRDFfUkVELCAhKGMgJiAweDEwKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMveHQyMDAwL2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaCBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy94dDIwMDAvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oCmluZGV4IDQxNDU5YWQuLjg4NmVmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy94dDIwMDAvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy94dDIwMDAvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9YVEVOU0FfWFQyMDAwX0hBUkRXQVJFX0gKIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiAKICAqIE1lbW9yeSBjb25maWd1cmF0aW9uLgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvTWFrZWZpbGUgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2IzOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACisjIHM2MDAwIE1ha2VmaWxlCisKK29iai15CQkrPSBpcnEubyBncGlvLm8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2dwaW8uYyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2E4ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvZ3Bpby5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBzNjAwMCBncGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBlbWxpeCBHbWJICisgKiBBdXRob3JzOglPc2thciBTY2hpcm1lciA8b3NAZW1saXguY29tPgorICoJCUpvaGFubmVzIFdlaW5lciA8andAZW1saXguY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8dmFyaWFudC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFM2X0dQSU9fREFUQQkJMHgwMDAKKyNkZWZpbmUgUzZfR1BJT19JUwkJMHg0MDQKKyNkZWZpbmUgUzZfR1BJT19JQkUJCTB4NDA4CisjZGVmaW5lIFM2X0dQSU9fSUVWCQkweDQwQworI2RlZmluZSBTNl9HUElPX0lFCQkweDQxMAorI2RlZmluZSBTNl9HUElPX1JJUwkJMHg0MTQKKyNkZWZpbmUgUzZfR1BJT19NSVMJCTB4NDE4CisjZGVmaW5lIFM2X0dQSU9fSUMJCTB4NDFDCisjZGVmaW5lIFM2X0dQSU9fQUZTRUwJCTB4NDIwCisjZGVmaW5lIFM2X0dQSU9fRElSCQkweDgwMAorI2RlZmluZSBTNl9HUElPX0JBTksobnIpCSgobnIpICogMHgxMDAwKQorI2RlZmluZSBTNl9HUElPX01BU0sobnIpCSg0IDw8IChucikpCisjZGVmaW5lIFM2X0dQSU9fT0ZGU0VUKG5yKSBcCisJCShTNl9HUElPX0JBTksoKG5yKSA+PiAzKSArIFM2X0dQSU9fTUFTSygobnIpICYgNykpCisKK3N0YXRpYyBpbnQgZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmYpCit7CisJd3JpdGViKDAsIFM2X1JFR19HUElPICsgUzZfR1BJT19ESVIgKyBTNl9HUElPX09GRlNFVChvZmYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gcmVhZGIoUzZfUkVHX0dQSU8gKyBTNl9HUElPX0RBVEEgKyBTNl9HUElPX09GRlNFVChvZmYpKTsKK30KKworc3RhdGljIGludCBkaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmYsIGludCB2YWwpCit7CisJdW5zaWduZWQgcmVsID0gUzZfR1BJT19PRkZTRVQob2ZmKTsKKwl3cml0ZWIofjAsIFM2X1JFR19HUElPICsgUzZfR1BJT19ESVIgKyByZWwpOworCXdyaXRlYih2YWwgPyB+MCA6IDAsIFM2X1JFR19HUElPICsgUzZfR1BJT19EQVRBICsgcmVsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmYsIGludCB2YWwpCit7CisJd3JpdGViKHZhbCA/IH4wIDogMCwgUzZfUkVHX0dQSU8gKyBTNl9HUElPX0RBVEEgKyBTNl9HUElPX09GRlNFVChvZmYpKTsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgZ3Bpb2NoaXAgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRpcmVjdGlvbl9pbnB1dCA9IGRpcmVjdGlvbl9pbnB1dCwKKwkuZ2V0ID0gZ2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0ID0gZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0ID0gc2V0LAorCS5iYXNlID0gMCwKKwkubmdwaW8gPSAyNCwKKwkuY2FuX3NsZWVwID0gMCwgLyogbm8gYmxvY2tpbmcgaW8gbmVlZGVkICovCisJLmV4cG9ydGVkID0gMCwgLyogbm8gZXhwb3J0aW5nIHRvIHVzZXJzcGFjZSAqLworfTsKKworc3RhdGljIGludCBncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZ3Bpb2NoaXBfYWRkKCZncGlvY2hpcCk7Cit9CitkZXZpY2VfaW5pdGNhbGwoZ3Bpb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9jb3JlLmggYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDA3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvY29yZS5oCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogWHRlbnNhIHByb2Nlc3NvciBjb3JlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggVGVuc2lsaWNhIEluYy4KKyAqLworCisjaWZuZGVmIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0gKKyNkZWZpbmUgX1hURU5TQV9DT1JFX0NPTkZJR1VSQVRJT05fSAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICAgIFBhcmFtZXRlcnMgVXNlZnVsIGZvciBBbnkgQ29kZSwgVVNFUiBvciBQUklWSUxFR0VECisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqICBOb3RlOiAgTWFjcm9zIG9mIHRoZSBmb3JtIFhDSEFMX0hBVkVfKioqIGhhdmUgYSB2YWx1ZSBvZiAxIGlmIHRoZSBvcHRpb24gaXMKKyAqICBjb25maWd1cmVkLCBhbmQgYSB2YWx1ZSBvZiAwIG90aGVyd2lzZS4gIFRoZXNlIG1hY3JvcyBhcmUgYWx3YXlzIGRlZmluZWQuCisgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlJU0EKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9CRQkJCTAJLyogYmlnLWVuZGlhbiBieXRlIG9yZGVyaW5nICovCisjZGVmaW5lIFhDSEFMX0hBVkVfV0lORE9XRUQJCTEJLyogd2luZG93ZWQgcmVnaXN0ZXJzIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9OVU1fQVJFR1MJCQk2NAkvKiBudW0gb2YgcGh5c2ljYWwgYWRkciByZWdzICovCisjZGVmaW5lIFhDSEFMX05VTV9BUkVHU19MT0cyCQk2CS8qIGxvZzIoWENIQUxfTlVNX0FSRUdTKSAqLworI2RlZmluZSBYQ0hBTF9NQVhfSU5TVFJVQ1RJT05fU0laRQk4CS8qIG1heCBpbnN0ciBieXRlcyAoMy4uOCkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ERUJVRwkJMQkvKiBkZWJ1ZyBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ERU5TSVRZCQkxCS8qIDE2LWJpdCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9MT09QUwkJMQkvKiB6ZXJvLW92ZXJoZWFkIGxvb3BzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTlNBCQkJMQkvKiBOU0EvTlNBVSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NSU5NQVgJCTEJLyogTUlOL01BWCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TRVhUCQkJMQkvKiBTRVhUIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0xBTVBTCQkxCS8qIENMQU1QUyBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01VTDE2CQkxCS8qIE1VTDE2Uy9NVUwxNlUgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMzIJCTEJLyogTVVMTCBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01VTDMyX0hJR0gJCTEJLyogTVVMVUgvTVVMU0ggaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRElWMzIJCTAJLyogUVVPUy9RVU9VL1JFTVMvUkVNVSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9MMzJSCQkJMQkvKiBMMzJSIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQUJTT0xVVEVfTElURVJBTFMJMQkvKiBub24tUEMtcmVsIChleHRlbmRlZCkgTDMyUiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NPTlNUMTYJCTAJLyogQ09OU1QxNiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FERFgJCQkxCS8qIEFERFgjL1NVQlgjIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1dJREVfQlJBTkNIRVMJMAkvKiBCKi5XMTggb3IgQiouVzE1IGluc3RyJ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9QUkVESUNURURfQlJBTkNIRVMJMAkvKiBCW0VRL0VRWi9ORS9ORVpdVCBpbnN0cidzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ0FMTDRBTkQxMgkJMQkvKiAob2Jzb2xldGUgb3B0aW9uKSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0FCUwkJCTEJLyogQUJTIGluc3RydWN0aW9uICovCisvKiNkZWZpbmUgWENIQUxfSEFWRV9QT1BDCQkwKi8JLyogUE9QQyBpbnN0cnVjdGlvbiAqLworLyojZGVmaW5lIFhDSEFMX0hBVkVfQ1JDCQkwKi8JLyogQ1JDIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUkVMRUFTRV9TWU5DCQkwCS8qIEwzMkFJL1MzMlJJIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1MzMkMxSQkJMAkvKiBTMzJDMUkgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9TUEVDVUxBVElPTgkJMAkvKiBzcGVjdWxhdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0ZVTExfUkVTRVQJCTAJLyogYWxsIHJlZ3Mvc3RhdGUgcmVzZXQgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0NPTlRFWFRTCQkxCS8qICovCisjZGVmaW5lIFhDSEFMX05VTV9NSVNDX1JFR1MJCTQJLyogbnVtIG9mIHNjcmF0Y2ggcmVncyAoMC4uNCkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9UQVBfTUFTVEVSCQkwCS8qIEpUQUcgVEFQIGNvbnRyb2wgaW5zdHIncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1BSSUQJCQkwCS8qIHByb2Nlc3NvciBJRCByZWdpc3RlciAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1RIUkVBRFBUUgkJMAkvKiBUSFJFQURQVFIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9CT09MRUFOUwkJMQkvKiBib29sZWFuIHJlZ2lzdGVycyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NQCQkJMQkvKiBDUEVOQUJMRSByZWcgKGNvcHJvY2Vzc29yKSAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVhDRkcJCQk4CS8qIG1heCBhbGxvd2VkIGNwIGlkIHBsdXMgb25lICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTUFDMTYJCTAJLyogTUFDMTYgcGFja2FnZSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RPUkZQVTIwMDUJMAkvKiB2ZWN0b3IgZmxvYXRpbmctcG9pbnQgcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRlAJCQkxCS8qIGZsb2F0aW5nIHBvaW50IHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQTEJCTAJLyogVmVjdHJhIEkgIHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ1RSQUxYCQkwCS8qIFZlY3RyYSBMWCBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUZJMgkJMAkvKiBIaUZpMiBBdWRpbyBFbmdpbmUgcGtnICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJTUlTQworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9OVU1fV1JJVEVCVUZGRVJfRU5UUklFUwk4CS8qIHNpemUgb2Ygd3JpdGUgYnVmZmVyICovCisjZGVmaW5lIFhDSEFMX0lOU1RfRkVUQ0hfV0lEVEgJCTgJLyogaW5zdHItZmV0Y2ggd2lkdGggaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfREFUQV9XSURUSAkJMTYJLyogZGF0YSB3aWR0aCBpbiBieXRlcyAqLworLyogIEluIFQxMDUwLCBhcHBsaWVzIHRvIHNlbGVjdGVkIGNvcmUgbG9hZCBhbmQgc3RvcmUgaW5zdHJ1Y3Rpb25zIChzZWUgSVNBKTogKi8KKyNkZWZpbmUgWENIQUxfVU5BTElHTkVEX0xPQURfRVhDRVBUSU9OCTEJLyogdW5hbGlnbmVkIGxvYWRzIGNhdXNlIGV4Yy4gKi8KKyNkZWZpbmUgWENIQUxfVU5BTElHTkVEX1NUT1JFX0VYQ0VQVElPTgkxCS8qIHVuYWxpZ25lZCBzdG9yZXMgY2F1c2UgZXhjLiovCisKKyNkZWZpbmUgWENIQUxfU1dfVkVSU0lPTgkJNzAxMDAxCS8qIHN3IHZlcnNpb24gb2YgdGhpcyBoZWFkZXIgKi8KKworI2RlZmluZSBYQ0hBTF9DT1JFX0lECQkJInN0cmV0Y2hfYmFsaSIJLyogYWxwaGFudW0gY29yZSBuYW1lCisJCQkJCQkgICAoQ29yZUlEKSBzZXQgaW4gdGhlIFh0ZW5zYQorCQkJCQkJICAgUHJvY2Vzc29yIEdlbmVyYXRvciAqLworCisjZGVmaW5lIFhDSEFMX0JVSUxEX1VOSVFVRV9JRAkJMHgwMDAxMDRCOQkvKiAyMi1iaXQgc3cgYnVpbGQgSUQgKi8KKworLyoKKyAqICBUaGVzZSBkZWZpbml0aW9ucyBkZXNjcmliZSB0aGUgaGFyZHdhcmUgdGFyZ2V0ZWQgYnkgdGhpcyBzb2Z0d2FyZS4KKyAqLworI2RlZmluZSBYQ0hBTF9IV19DT05GSUdJRDAJCTB4QzJGM0Y5RkUJLyogQ29uZmlnSUQgaGkgMzIgYml0cyovCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEMQkJMHgwNTQxMDRCOQkvKiBDb25maWdJRCBsbyAzMiBiaXRzKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9OQU1FCQkiTFgxLjAuMiIJLyogZnVsbCB2ZXJzaW9uIG5hbWUgKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9NQUpPUgkJMjEwMAkvKiBtYWpvciB2ZXIjIG9mIHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT05fTUlOT1IJCTIJLyogbWlub3IgdmVyIyBvZiB0YXJnZXRlZCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19WRVJTSU9OCQkyMTAwMDIJLyogbWFqb3IqMTAwK21pbm9yICovCisjZGVmaW5lIFhDSEFMX0hXX1JFTF9MWDEJCTEKKyNkZWZpbmUgWENIQUxfSFdfUkVMX0xYMV8wCQkxCisjZGVmaW5lIFhDSEFMX0hXX1JFTF9MWDFfMF8yCQkxCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEX1JFTElBQkxFCTEKKy8qICBJZiBzb2Z0d2FyZSB0YXJnZXRzIGEgKnJhbmdlKiBvZiBoYXJkd2FyZSB2ZXJzaW9ucywgdGhlc2UgYXJlIHRoZSBib3VuZHM6ICovCisjZGVmaW5lIFhDSEFMX0hXX01JTl9WRVJTSU9OX01BSk9SCTIxMDAJLyogbWFqb3IgdiBvZiBlYXJsaWVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUlOX1ZFUlNJT05fTUlOT1IJMgkvKiBtaW5vciB2IG9mIGVhcmxpZXN0IHRndCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NSU5fVkVSU0lPTgkJMjEwMDAyCS8qIGVhcmxpZXN0IHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OX01BSk9SCTIxMDAJLyogbWFqb3IgdiBvZiBsYXRlc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OX01JTk9SCTIJLyogbWlub3IgdiBvZiBsYXRlc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01BWF9WRVJTSU9OCQkyMTAwMDIJLyogbGF0ZXN0IHRhcmdldGVkIGh3ICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJQ0FDSEUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVTSVpFCQkxNgkvKiBJLWNhY2hlIGxpbmUgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORVNJWkUJCTE2CS8qIEQtY2FjaGUgbGluZSBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FV0lEVEgJCTQJLyogbG9nMihJIGxpbmUgc2l6ZSBpbiBieXRlcykgKi8KKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVXSURUSAkJNAkvKiBsb2cyKEQgbGluZSBzaXplIGluIGJ5dGVzKSAqLworCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9TSVpFCQkzMjc2OAkvKiBJLWNhY2hlIHNpemUgaW4gYnl0ZXMgb3IgMCAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfU0laRQkJMzI3NjgJLyogRC1jYWNoZSBzaXplIGluIGJ5dGVzIG9yIDAgKi8KKworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfSVNfV1JJVEVCQUNLCTEJLyogd3JpdGViYWNrIGZlYXR1cmUgKi8KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBQYXJhbWV0ZXJzIFVzZWZ1bCBmb3IgUFJJVklMRUdFRCAoU3VwZXJ2aXNvcnkgb3IgTm9uLVZpcnR1YWxpemVkKSBDb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIFhURU5TQV9IQUxfTk9OX1BSSVZJTEVHRURfT05MWQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlDQUNIRQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX1BJRgkJCTEJLyogYW55IG91dGJvdW5kIFBJRiBwcmVzZW50ICovCisKKy8qICBJZiBwcmVzZW50LCBjYWNoZSBzaXplIGluIGJ5dGVzID09ICh3YXlzICogMl4obGluZXdpZHRoICsgc2V0d2lkdGgpKS4gICovCisKKy8qICBOdW1iZXIgb2YgY2FjaGUgc2V0cyBpbiBsb2cyKGxpbmVzIHBlciB3YXkpOiAgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1NFVFdJRFRICQk5CisjZGVmaW5lIFhDSEFMX0RDQUNIRV9TRVRXSURUSAkJMTAKKworLyogIENhY2hlIHNldCBhc3NvY2lhdGl2aXR5IChudW1iZXIgb2Ygd2F5cyk6ICAqLworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfV0FZUwkJNAorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfV0FZUwkJMgorCisvKiAgQ2FjaGUgZmVhdHVyZXM6ICAqLworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfTElORV9MT0NLQUJMRQkxCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9MSU5FX0xPQ0tBQkxFCTAKKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0VDQ19QQVJJVFkJCTAKKyNkZWZpbmUgWENIQUxfRENBQ0hFX0VDQ19QQVJJVFkJCTAKKworLyogIE51bWJlciBvZiBlbmNvZGVkIGNhY2hlIGF0dHIgYml0cyAoc2VlIDx4dGVuc2EvaGFsLmg+IGZvciBkZWNvZGVkIGJpdHMpOiAgKi8KKyNkZWZpbmUgWENIQUxfQ0FfQklUUwkJCTQKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCUlOVEVSTkFMIEkvRCBSQU0vUk9NcyBhbmQgWExNSQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9OVU1fSU5TVFJPTQkJMAkvKiBudW1iZXIgb2YgY29yZSBpbnN0ci4gUk9NcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fSU5TVFJBTQkJMAkvKiBudW1iZXIgb2YgY29yZSBpbnN0ci4gUkFNcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREFUQVJPTQkJMAkvKiBudW1iZXIgb2YgY29yZSBkYXRhIFJPTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0RBVEFSQU0JCTEJLyogbnVtYmVyIG9mIGNvcmUgZGF0YSBSQU1zICovCisjZGVmaW5lIFhDSEFMX05VTV9VUkFNCQkJMAkvKiBudW1iZXIgb2YgY29yZSB1bmlmaWVkIFJBTXMqLworI2RlZmluZSBYQ0hBTF9OVU1fWExNSQkJCTEJLyogbnVtYmVyIG9mIGNvcmUgWExNSSBwb3J0cyAqLworCisvKiAgRGF0YSBSQU0gMDogICovCisjZGVmaW5lIFhDSEFMX0RBVEFSQU0wX1ZBRERSCQkweDNGRkYwMDAwCisjZGVmaW5lIFhDSEFMX0RBVEFSQU0wX1BBRERSCQkweDNGRkYwMDAwCisjZGVmaW5lIFhDSEFMX0RBVEFSQU0wX1NJWkUJCTY1NTM2CisjZGVmaW5lIFhDSEFMX0RBVEFSQU0wX0VDQ19QQVJJVFkJMAorCisvKiAgWExNSSBQb3J0IDA6ICAqLworI2RlZmluZSBYQ0hBTF9YTE1JMF9WQUREUgkJMHgzN0Y4MDAwMAorI2RlZmluZSBYQ0hBTF9YTE1JMF9QQUREUgkJMHgzN0Y4MDAwMAorI2RlZmluZSBYQ0hBTF9YTE1JMF9TSVpFCQkyNjIxNDQKKyNkZWZpbmUgWENIQUxfWExNSTBfRUNDX1BBUklUWQkwCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlJTlRFUlJVUFRTIGFuZCBUSU1FUlMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9JTlRFUlJVUFRTCQkxCS8qIGludGVycnVwdCBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ISUdIUFJJX0lOVEVSUlVQVFMJMQkvKiBtZWQvaGlnaC1wcmkuIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9OTUkJCQkxCS8qIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DQ09VTlQJCTEJLyogQ0NPVU5UIHJlZy4gKHRpbWVyIG9wdGlvbikgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1RJTUVSUwkJMwkvKiBudW1iZXIgb2YgQ0NPTVBBUkVuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVEVSUlVQVFMJCTI3CS8qIG51bWJlciBvZiBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlRFUlJVUFRTX0xPRzIJNQkvKiBjZWlsKGxvZzIoTlVNX0lOVEVSUlVQVFMpKSAqLworI2RlZmluZSBYQ0hBTF9OVU1fRVhUSU5URVJSVVBUUwkJMjAJLyogbnVtIG9mIGV4dGVybmFsIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVExFVkVMUwkJNAkvKiBudW1iZXIgb2YgaW50ZXJydXB0IGxldmVscworCQkJCQkJICAgKG5vdCBpbmNsdWRpbmcgbGV2ZWwgemVybykgKi8KKyNkZWZpbmUgWENIQUxfRVhDTV9MRVZFTAkJMQkvKiBsZXZlbCBtYXNrZWQgYnkgUFMuRVhDTSAqLworCS8qIChhbHdheXMgMSBpbiBYRUExOyBsZXZlbHMgMiAuLiBFWENNX0xFVkVMIGFyZSAibWVkaXVtIHByaW9yaXR5IikgKi8KKworLyogIE1hc2tzIG9mIGludGVycnVwdHMgYXQgZWFjaCBpbnRlcnJ1cHQgbGV2ZWw6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDFfTUFTSwkJMHgwMUYwN0ZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfTUFTSwkJMHgwMjAxODAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfTUFTSwkJMHgwNDA2MDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfTUFTSwkJMHgwMDA4MDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfTUFTSwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDdfTUFTSwkJMHgwMDAwMDAwMAorCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIHJhbmdlIDEuLm4gb2YgaW50ZXJydXB0IGxldmVsczogICovCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMV9BTkRCRUxPV19NQVNLCTB4MDFGMDdGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX0FOREJFTE9XX01BU0sJMHgwM0YxRkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfQU5EQkVMT1dfTUFTSwkweDA3RjdGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9BTkRCRUxPV19NQVNLCTB4MDdGN0ZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X0FOREJFTE9XX01BU0sJMHgwN0ZGRkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDZfQU5EQkVMT1dfTUFTSwkweDA3RkZGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMN19BTkRCRUxPV19NQVNLCTB4MDdGRkZGRkYKKworLyogIExldmVsIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDJfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ0X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDVfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UNl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ3X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDhfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UOV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxMV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxMl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxNF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQxNV9MRVZFTAkJMgorI2RlZmluZSBYQ0hBTF9JTlQxNl9MRVZFTAkJMgorI2RlZmluZSBYQ0hBTF9JTlQxN19MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxOF9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9JTlQxOV9MRVZFTAkJNQorI2RlZmluZSBYQ0hBTF9JTlQyMF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyMV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyMl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyM19MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyNF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQyNV9MRVZFTAkJMgorI2RlZmluZSBYQ0hBTF9JTlQyNl9MRVZFTAkJMworI2RlZmluZSBYQ0hBTF9ERUJVR0xFVkVMCQk0CS8qIGRlYnVnIGludGVycnVwdCBsZXZlbCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFQlVHX0VYVEVSTl9JTlQJMQkvKiBPQ0QgZXh0ZXJuYWwgZGIgaW50ZXJydXB0ICovCisjZGVmaW5lIFhDSEFMX05NSUxFVkVMCQkJNQkvKiBOTUkgImxldmVsIiAoZm9yIHVzZSB3aXRoCisJCQkJCQkgICBFWENTQVZFL0VQUy9FUENfbiwgUkZJIG4pICovCisKKy8qICBUeXBlIG9mIGVhY2ggaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UMF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDJfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UM19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ0X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDVfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UNl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ3X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDhfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UOV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxMF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxMV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxMl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxM19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxNF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxNV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxNl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxN19UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxOF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQxOV9UWVBFIAlYVEhBTF9JTlRUWVBFX05NSQorI2RlZmluZSBYQ0hBTF9JTlQyMF9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDIxX1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKKyNkZWZpbmUgWENIQUxfSU5UMjJfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQyM19UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDI0X1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKKyNkZWZpbmUgWENIQUxfSU5UMjVfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgorI2RlZmluZSBYQ0hBTF9JTlQyNl9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCisKKy8qICBNYXNrcyBvZiBpbnRlcnJ1cHRzIGZvciBlYWNoIHR5cGUgb2YgaW50ZXJydXB0OiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1VOQ09ORklHVVJFRAkweEY4MDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19TT0ZUV0FSRQkweDAwRjAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19FWFRFUk5fRURHRQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19FWFRFUk5fTEVWRUwJMHgwMDA3RkZGRgorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfVElNRVIJMHgwNzAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfTk1JCQkweDAwMDgwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19XUklURV9FUlJPUgkweDAwMDAwMDAwCisKKy8qICBJbnRlcnJ1cHQgbnVtYmVycyBhc3NpZ25lZCB0byBzcGVjaWZpYyBpbnRlcnJ1cHQgc291cmNlczogICovCisjZGVmaW5lIFhDSEFMX1RJTUVSMF9JTlRFUlJVUFQJCTI0CS8qIENDT01QQVJFMCAqLworI2RlZmluZSBYQ0hBTF9USU1FUjFfSU5URVJSVVBUCQkyNQkvKiBDQ09NUEFSRTEgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIyX0lOVEVSUlVQVAkJMjYJLyogQ0NPTVBBUkUyICovCisjZGVmaW5lIFhDSEFMX1RJTUVSM19JTlRFUlJVUFQJCVhUSEFMX1RJTUVSX1VOQ09ORklHVVJFRAorI2RlZmluZSBYQ0hBTF9OTUlfSU5URVJSVVBUCQkxOQkvKiBub24tbWFza2FibGUgaW50ZXJydXB0ICovCisKKy8qICBJbnRlcnJ1cHQgbnVtYmVycyBmb3IgbGV2ZWxzIGF0IHdoaWNoIG9ubHkgb25lIGludGVycnVwdCBpcyBjb25maWd1cmVkOiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X05VTQkJMTkKKy8qICAoVGhlcmUgYXJlIG1hbnkgaW50ZXJydXB0cyBlYWNoIGF0IGxldmVsKHMpIDEsIDIsIDMuKSAgKi8KKworCisvKgorICogIEV4dGVybmFsIGludGVycnVwdCB2ZWN0b3JzL2xldmVscy4KKyAqICBUaGVzZSBtYWNyb3MgZGVzY3JpYmUgaG93IFh0ZW5zYSBwcm9jZXNzb3IgaW50ZXJydXB0IG51bWJlcnMKKyAqICAoYXMgbnVtYmVyZWQgaW50ZXJuYWxseSwgZWcuIGluIElOVEVSUlVQVCBhbmQgSU5URU5BQkxFIHJlZ2lzdGVycykKKyAqICBtYXAgdG8gZXh0ZXJuYWwgQkludGVycnVwdDxuPiBwaW5zLCBmb3IgdGhvc2UgaW50ZXJydXB0cworICogIGNvbmZpZ3VyZWQgYXMgZXh0ZXJuYWwgKGxldmVsLXRyaWdnZXJlZCwgZWRnZS10cmlnZ2VyZWQsIG9yIE5NSSkuCisgKiAgU2VlIHRoZSBYdGVuc2EgcHJvY2Vzc29yIGRhdGFib29rIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogIENvcmUgaW50ZXJydXB0IG51bWJlcnMgbWFwcGVkIHRvIGVhY2ggRVhURVJOQUwgaW50ZXJydXB0IG51bWJlcjogICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDBfTlVNCQkwCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxX05VTQkJMQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMl9OVU0JCTIJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDNfTlVNCQkzCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ0X05VTQkJNAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UNV9OVU0JCTUJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDZfTlVNCQk2CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ3X05VTQkJNwkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UOF9OVU0JCTgJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDlfTlVNCQk5CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxMF9OVU0JCTEwCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxMV9OVU0JCTExCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxMl9OVU0JCTEyCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxM19OVU0JCTEzCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxNF9OVU0JCTE0CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxNV9OVU0JCTE1CS8qIChpbnRsZXZlbCAyKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxNl9OVU0JCTE2CS8qIChpbnRsZXZlbCAyKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxN19OVU0JCTE3CS8qIChpbnRsZXZlbCAzKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxOF9OVU0JCTE4CS8qIChpbnRsZXZlbCAzKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQxOV9OVU0JCTE5CS8qIChpbnRsZXZlbCA1KSAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJRVhDRVBUSU9OUyBhbmQgVkVDVE9SUworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9YRUFfVkVSU0lPTgkJMgkvKiBYdGVuc2EgRXhjZXB0aW9uIEFyY2hpdGVjdHVyZQorCQkJCQkJICAgbnVtYmVyOiAxID09IFhFQTEgKG9sZCkKKwkJCQkJCQkgICAyID09IFhFQTIgKG5ldykKKwkJCQkJCQkgICAwID09IFhFQVggKGV4dGVybikgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9YRUExCQkJMAkvKiBFeGNlcHRpb24gQXJjaGl0ZWN0dXJlIDEgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9YRUEyCQkJMQkvKiBFeGNlcHRpb24gQXJjaGl0ZWN0dXJlIDIgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9YRUFYCQkJMAkvKiBFeHRlcm5hbCBFeGNlcHRpb24gQXJjaC4gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9FWENFUFRJT05TCQkxCS8qIGV4Y2VwdGlvbiBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NRU1fRUNDX1BBUklUWQkwCS8qIGxvY2FsIG1lbW9yeSBFQ0MvcGFyaXR5ICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDVE9SX1NFTEVDVAkwCS8qIHJlbG9jYXRhYmxlIHZlY3RvcnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9WRUNCQVNFCQkwCS8qIHJlbG9jYXRhYmxlIHZlY3RvcnMgKi8KKworI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDVE9SX1ZBRERSCTB4M0ZGRTAzRDAKKyNkZWZpbmUgWENIQUxfUkVTRVRfVkVDVE9SX1BBRERSCTB4M0ZGRTAzRDAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNUT1JfVkFERFIJCTB4NDAwMDAyMjAKKyNkZWZpbmUgWENIQUxfVVNFUl9WRUNUT1JfUEFERFIJCTB4NDAwMDAyMjAKKyNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9LRVJORUxfVkVDVE9SX1ZBRERSCTB4NDAwMDAyMDAKKyNkZWZpbmUgWENIQUxfS0VSTkVMX1ZFQ1RPUl9QQUREUgkweDQwMDAwMjAwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9WQUREUgkweDQwMDAwMkEwCisjZGVmaW5lIFhDSEFMX0RPVUJMRUVYQ19WRUNUT1JfUEFERFIJMHg0MDAwMDJBMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0Y0X1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUY0X1ZFQ09GUwkJMHgwMDAwMDA0MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0Y4X1ZFQ09GUwkJMHgwMDAwMDA4MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUY4X1ZFQ09GUwkJMHgwMDAwMDBDMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfT0YxMl9WRUNPRlMJMHgwMDAwMDEwMAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVUYxMl9WRUNPRlMJMHgwMDAwMDE0MAorI2RlZmluZSBYQ0hBTF9XSU5ET1dfVkVDVE9SU19WQUREUgkweDQwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19WRUNUT1JTX1BBRERSCTB4NDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfVkVDVE9SX1ZBRERSCTB4NDAwMDAyNDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwyX1ZFQ1RPUl9QQUREUgkweDQwMDAwMjQwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX1ZFQ1RPUl9WQUREUgkweDQwMDAwMjYwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19WRUNUT1JfUEFERFIJMHg0MDAwMDI2MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNUT1JfVkFERFIJMHg0MDAwMDM5MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1BBRERSCTB4NDAwMDAzOTAKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDT0ZTCQlYQ0hBTF9JTlRMRVZFTDRfVkVDT0ZTCisjZGVmaW5lIFhDSEFMX0RFQlVHX1ZFQ1RPUl9WQUREUglYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1ZBRERSCisjZGVmaW5lIFhDSEFMX0RFQlVHX1ZFQ1RPUl9QQUREUglYQ0hBTF9JTlRMRVZFTDRfVkVDVE9SX1BBRERSCisjZGVmaW5lIFhDSEFMX05NSV9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfTk1JX1ZFQ1RPUl9WQUREUgkJMHg0MDAwMDNCMAorI2RlZmluZSBYQ0hBTF9OTUlfVkVDVE9SX1BBRERSCQkweDQwMDAwM0IwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9WRUNPRlMJCVhDSEFMX05NSV9WRUNPRlMKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X1ZFQ1RPUl9WQUREUglYQ0hBTF9OTUlfVkVDVE9SX1ZBRERSCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9WRUNUT1JfUEFERFIJWENIQUxfTk1JX1ZFQ1RPUl9QQUREUgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCURFQlVHCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX0hBVkVfT0NECQkJMQkvKiBPbkNoaXBEZWJ1ZyBvcHRpb24gKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lCUkVBSwkJMgkvKiBudW1iZXIgb2YgSUJSRUFLbiByZWdzICovCisjZGVmaW5lIFhDSEFMX05VTV9EQlJFQUsJCTIJLyogbnVtYmVyIG9mIERCUkVBS24gcmVncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX09DRF9ESVJfQVJSQVkJMQkvKiBmYXN0ZXIgT0NEIG9wdGlvbiAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCU1NVQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogIFNlZSBjb3JlLW1hdG1hcC5oIGhlYWRlciBmaWxlIGZvciBtb3JlIGRldGFpbHMuICAqLworCisjZGVmaW5lIFhDSEFMX0hBVkVfVExCUwkJCTEJLyogaW52ZXJzZSBvZiBIQVZFX0NBQ0hFQVRUUiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1NQQU5OSU5HX1dBWQkJMQkvKiBvbmUgd2F5IG1hcHMgSStEIDRHQiB2YWRkciAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0lERU5USVRZX01BUAkJMQkvKiB2YWRkciA9PSBwYWRkciBhbHdheXMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DQUNIRUFUVFIJCTAJLyogQ0FDSEVBVFRSIHJlZ2lzdGVyIHByZXNlbnQgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NSU1JQ19DQUNIRUFUVFIJMQkvKiByZWdpb24gcHJvdGVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1hMVF9DQUNIRUFUVFIJMAkvKiByZWdpb24gcHJvdC4gdy90cmFuc2xhdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1BUUF9NTVUJCTAJLyogZnVsbCBNTVUgKHdpdGggcGFnZSB0YWJsZQorCQkJCQkJICAgW2F1dG9yZWZpbGxdIGFuZCBwcm90ZWN0aW9uKQorCQkJCQkJICAgdXNhYmxlIGZvciBhbiBNTVUtYmFzZWQgT1MgKi8KKy8qICBJZiBub25lIG9mIHRoZSBhYm92ZSBsYXN0IDQgYXJlIHNldCwgaXQncyBhIGN1c3RvbSBUTEIgY29uZmlndXJhdGlvbi4gICovCisKKyNkZWZpbmUgWENIQUxfTU1VX0FTSURfQklUUwkJMAkvKiBudW1iZXIgb2YgYml0cyBpbiBBU0lEcyAqLworI2RlZmluZSBYQ0hBTF9NTVVfUklOR1MJCQkxCS8qIG51bWJlciBvZiByaW5ncyAoMS4uNCkgKi8KKyNkZWZpbmUgWENIQUxfTU1VX1JJTkdfQklUUwkJMAkvKiBudW0gb2YgYml0cyBpbiBSSU5HIGZpZWxkICovCisKKyNlbmRpZiAvKiAhWFRFTlNBX0hBTF9OT05fUFJJVklMRUdFRF9PTkxZICovCisKKworI2VuZGlmIC8qIF9YVEVOU0FfQ09SRV9DT05GSUdVUkFUSU9OX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2hhcmR3YXJlLmggYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDliYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2hhcmR3YXJlLmgKQEAgLTAsMCArMSwyNTkgQEAKKyNpZm5kZWYgX19YVEVOU0FfUzYwMDBfSEFSRFdBUkVfSAorI2RlZmluZSBfX1hURU5TQV9TNjAwMF9IQVJEV0FSRV9ICisKKyNkZWZpbmUgUzZfU0NMSwkJCTE4NDMyMDAKKworI2RlZmluZSBTNl9NRU1fUkVHICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFM2X01FTV9FRkkgICAgICAgICAgICAgIDB4MzNGMDAwMDAKKyNkZWZpbmUgUzZfTUVNX1BDSUVfREFUQVJBTTEgICAgMHgzNDAwMDAwMAorI2RlZmluZSBTNl9NRU1fWExNSSAgICAgICAgICAgICAweDM3RjgwMDAwCisjZGVmaW5lIFM2X01FTV9QSUZfREFUQVJBTTEgICAgIDB4MzdGRkMwMDAKKyNkZWZpbmUgUzZfTUVNX0dNQUMgICAgICAgICAgICAgMHgzODAwMDAwMAorI2RlZmluZSBTNl9NRU1fSTJTICAgICAgICAgICAgICAweDNBMDAwMDAwCisjZGVmaW5lIFM2X01FTV9FR0lCICAgICAgICAgICAgIDB4M0MwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX1BDSUVfQ0ZHICAgICAgICAgMHgzRTAwMDAwMAorI2RlZmluZSBTNl9NRU1fUElGX0RBVEFSQU0gICAgICAweDNGRkUwMDAwCisjZGVmaW5lIFM2X01FTV9YTE1JX0RBVEFSQU0gICAgIDB4M0ZGRjAwMDAKKyNkZWZpbmUgUzZfTUVNX0REUiAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBTNl9NRU1fUENJRV9BUEVSICAgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIFM2X01FTV9BVVggICAgICAgICAgICAgIDB4RjAwMDAwMDAKKworLyogRGV2aWNlIGFkZHJlc3NlcyAqLworCisjZGVmaW5lIFM2X1JFR19TQ0IgICAgICAgICAgICAgIFM2X01FTV9SRUcKKyNkZWZpbmUgUzZfUkVHX05CICAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDEwMDAwKQorI2RlZmluZSBTNl9SRUdfTE1TRE1BICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4MjAwMDApCisjZGVmaW5lIFM2X1JFR19OSSAgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHgzMDAwMCkKKyNkZWZpbmUgUzZfUkVHX05JRE1BICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDQwMDAwKQorI2RlZmluZSBTNl9SRUdfTlMgICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4NTAwMDApCisjZGVmaW5lIFM2X1JFR19ERFIgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg2MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0dSRUcxICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDcwMDAwKQorI2RlZmluZSBTNl9SRUdfRFAgICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4ODAwMDApCisjZGVmaW5lIFM2X1JFR19EUERNQSAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg5MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0VHSUIgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEEwMDAwKQorI2RlZmluZSBTNl9SRUdfUENJRSAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4QjAwMDApCisjZGVmaW5lIFM2X1JFR19JMlMgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhDMDAwMCkKKyNkZWZpbmUgUzZfUkVHX0dNQUMgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEQwMDAwKQorI2RlZmluZSBTNl9SRUdfSElGRE1BICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4RTAwMDApCisjZGVmaW5lIFM2X1JFR19HUkVHMiAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhGMDAwMCkKKworI2RlZmluZSBTNl9SRUdfQVBCICAgICAgICAgICAgICBTNl9SRUdfU0NCCisjZGVmaW5lIFM2X1JFR19VQVJUICAgICAgICAgICAgIChTNl9SRUdfQVBCICsgMHgwMDAwKQorI2RlZmluZSBTNl9SRUdfSU5UQyAgICAgICAgICAgICAoUzZfUkVHX0FQQiArIDB4MjAwMCkKKyNkZWZpbmUgUzZfUkVHX1NQSSAgICAgICAgICAgICAgKFM2X1JFR19BUEIgKyAweDMwMDApCisjZGVmaW5lIFM2X1JFR19JMkMgICAgICAgICAgICAgIChTNl9SRUdfQVBCICsgMHg0MDAwKQorI2RlZmluZSBTNl9SRUdfR1BJTyAgICAgICAgICAgICAoUzZfUkVHX0FQQiArIDB4ODAwMCkKKworLyogR2xvYmFsIHJlZ2lzdGVyIGJsb2NrICovCisKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tDTEVBUgkweDAwMAorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19TWVMJCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfSU8JCTEKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfQUlNCQkyCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX0RQMAkJMworI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19EUDIJCTQKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfRERSCQk1CisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLU1RBVAkweDAwNAorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS1NUQVRfQ1VSTE9DSwkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLU1RBVF9FVkVSVU5MQ0sJOAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUwJCTB4MDEwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU0JCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV9ERFIyCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fMzAwTUhaCQkxCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fMjQwTUhaCQkyCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fMjAwTUhaCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fMTUwTUhaCQk0CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fMTIwTUhaCQk1CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9BSU1fNDBNSFoJCTYKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV9QTExBSU1SRUYJCTcKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV9NQVNLCQk3CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFIJCTgKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl9IUwkJCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8zMzNNSFoJCTEKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8yNTBNSFoJCTIKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8yMDBNSFoJCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8xNjdNSFoJCTQKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8xMDBNSFoJCTUKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl8zM01IWgkJNgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSX1BMTElPUkVGCQk3CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfTUFTSwkJNworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQwkJMTYKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUNfMTI1TUhaCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDXzI1TUhaCQkxCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDXzI1MDBLSFoJCTIKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUNfRVhURVJOCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDX01BU0sJCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUkJCTE4CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJXzExMU1IWgkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSV9JT1JFRgkJMQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSV9OT05FCQkyCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJXzEyNU1IWgkJMworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSV9NQVNLCQkzCisjZGVmaW5lIFM2X0dSRUcxX1NZU1VOTE9DS0NOVAkweDAyMAorI2RlZmluZSBTNl9HUkVHMV9JT1VOTE9DS0NOVAkweDAyNAorI2RlZmluZSBTNl9HUkVHMV9BSU1VTkxPQ0tDTlQJMHgwMjgKKyNkZWZpbmUgUzZfR1JFRzFfRFAwVU5MT0NLQ05UCTB4MDJDCisjZGVmaW5lIFM2X0dSRUcxX0RQMlVOTE9DS0NOVAkweDAzMAorI2RlZmluZSBTNl9HUkVHMV9ERFJVTkxPQ0tDTlQJMHgwMzQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMAkweDA0MAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwwX0xTR0IJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMF9MU1BYCQk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDBfTUVNRE8JCTE2CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDBfSFNYVDEJCTI0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDEJMHgwNDQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMV9IU0lTRUYJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMV9IU05JCQk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDFfSFNOUwkJMTYKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMV9IU0lTRUZDRkcJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMgkweDA0OAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwyX0xTTkIJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMl9MU1NCCQk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDJfTFNSRVNUCQkyNAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwzCTB4MDRDCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDNfSVNFRlhBRAkwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDNfSVNFRkxNUwk4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDNfSVNFRklTRUYJMTYKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMM19ERFJERAkJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMNAkweDA1MAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUw0X0REUkRQCQkwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDRfRERSRE8JCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMNF9ERFJOQgkJMTYKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMNF9ERFJMTVMJCTI0CisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLRU5BCTB4MTAwCisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX0REUgkJMAorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19EUAkJMQorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19OU05JCQkyCisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX1BDSUUJCTMKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfR01BQwkJNAorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19JMlMJCTUKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfRUdJQgkJNgorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19TQgkJNworI2RlZmluZSBTNl9HUkVHMV9CTE9DS19YVDEJCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLR0FURQkweDEwNAorI2RlZmluZSBTNl9HUkVHMV9CR0FURV9BSU1OT1JUSAkJOQorI2RlZmluZSBTNl9HUkVHMV9CR0FURV9BSU1FQVNUCQkxMAorI2RlZmluZSBTNl9HUkVHMV9CR0FURV9BSU1XRVNUCQkxMQorI2RlZmluZSBTNl9HUkVHMV9CR0FURV9BSU1TT1VUSAkJMTIKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFJFUwkweDEwOAorI2RlZmluZSBTNl9HUkVHMV9DSElQUkVTX1NPRlRSRVMJMAorI2RlZmluZSBTNl9HUkVHMV9DSElQUkVTX0xPU1RMT0NLCTEKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRQkweDEwQworI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX1JFU0VUTgkwCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfR0xPQkFMCTEKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9XRE9HVElNRVIJMgorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX1NXQ0hJUAkzCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfUExMU1lTTE9TUwk0CisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfUENJRQk1CisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfQ1JFQVRFREdMT0IJNgorI2RlZmluZSBTNl9HUkVHMV9SRUZDTE9DS0NOVAkweDExMAorI2RlZmluZSBTNl9HUkVHMV9SRVNFVFRJTUVSCTB4MTE0CisjZGVmaW5lIFM2X0dSRUcxX05NSVRJTUVSCTB4MTE4CisjZGVmaW5lIFM2X0dSRUcxX0dMT0JBTF9USU1FUgkweDExQworI2RlZmluZSBTNl9HUkVHMV9USU1FUjAJCTB4MTgwCisjZGVmaW5lIFM2X0dSRUcxX1RJTUVSMQkJMHgxODQKKyNkZWZpbmUgUzZfR1JFRzFfVUFSVENMT0NLU0VMCTB4MjA0CisjZGVmaW5lIFM2X0dSRUcxX0NISVBWRVJTUEFDS0cJMHgyMDgKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFZFUlNQQUNLR19DSElQVklECTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFZFUlNQQUNLR19QQUNLU0VMCTgKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTAkweDIwQworI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX1dFU1QJMAorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX05PUlRICTIKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9FQVNUCTQKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9TT1VUSAk2CisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfTk9ORQkJMAorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMXzc1T0hNCQkyCisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfTUFTSwkJMworI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzAJMHgyMTAKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX0FJTVNUUk9ORwkxCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9NSU5JQk9PVERMCTIKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX09DREdQSU84U0VUCTUKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX09DREdQSU9FTkEJNgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfRE9XTlNUUkVBTQk3CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVYJOAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzMwME1IWgkxCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfMjQwTUhaCTIKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl8yMDBNSFoJMworI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzE1ME1IWgk0CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfMTIwTUhaCTUKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl80ME1IWgk2CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfTUFTSwk3CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9CQUxIU0xNUwkxMgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfQkFMSFNOQgkxOAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfQkFMSFNYQUQJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxCTB4MjE0CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9QQ0lFMUxBTkUJMQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfTVBMTFBSRVNDQUxFCTIKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX01QTExOQ1kJNAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfTVBMTE5DWTUJOQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfQkFMSFNSRVNUCTE0CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9CQUxIU1BTTUVNUwkyMAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfQkFMTFNHSQkyNgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzIJMHgyMTgKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcyX1BFSUQJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkczCTB4MjFDCisjZGVmaW5lIFM2X0dSRUcxX0RSQU1CVVNZSE9MRE9GCTB4MjIwCisjZGVmaW5lIFM2X0dSRUcxX0RSQU1CVVNZSE9MRE9GX1hUMAkwCisjZGVmaW5lIFM2X0dSRUcxX0RSQU1CVVNZSE9MRE9GX1hUMQk0CisjZGVmaW5lIFM2X0dSRUcxX0RSQU1CVVNZSE9MRE9GX1hUX01BU0sJCTcKKyNkZWZpbmUgUzZfR1JFRzFfUENJRUJBUjFTSVpFCTB4MjI0CisjZGVmaW5lIFM2X0dSRUcxX1BDSUVCQVIyU0laRQkweDIyOAorI2RlZmluZSBTNl9HUkVHMV9QQ0lFVkVORE9SCTB4MjJDCisjZGVmaW5lIFM2X0dSRUcxX1BDSUVERVZJQ0UJMHgyMzAKKyNkZWZpbmUgUzZfR1JFRzFfUENJRVJFVgkweDIzNAorI2RlZmluZSBTNl9HUkVHMV9QQ0lFQ0xBU1MJMHgyMzgKKyNkZWZpbmUgUzZfR1JFRzFfWFQxRENBQ0hFTUlTUwkweDI0MAorI2RlZmluZSBTNl9HUkVHMV9YVDFJQ0FDSEVNSVNTCTB4MjQ0CisjZGVmaW5lIFM2X0dSRUcxX0hXU0VNQVBIT1JFKG4pCSgweDQwMCArIDQgKiAobikpCisjZGVmaW5lIFM2X0dSRUcxX0hXU0VNQVBIT1JFX05CCQkxNgorCisvKiBwZXJpcGhlcmFsIGludGVycnVwdCBudW1iZXJzICovCisKKyNkZWZpbmUgUzZfSU5UQ19HUElPKG4pCQkJKG4pCQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfSTJDCQkJNAorI2RlZmluZSBTNl9JTlRDX1NQSQkJCTUKKyNkZWZpbmUgUzZfSU5UQ19OQl9FUlIJCQk2CisjZGVmaW5lIFM2X0lOVENfRE1BX0xNU0VSUgkJNworI2RlZmluZSBTNl9JTlRDX0RNQV9MTVNMT1dXTVJLKG4pCSg4ICsgKG4pKQkvKiAwLi4xMSAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9MTVNQRU5EQ05UKG4pCSgyMCArIChuKSkJLyogMC4uMTEgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUEgSE9TVExPV1dNUksobikJKDMyICsgKG4pKQkvKiAwLi42ICovCisjZGVmaW5lIFM2X0lOVENfRE1BX0hPU1RQRU5EQ05UKG4pCSgzOSArIChuKSkJLyogMC4uNiAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9IT1NURVJSCQk0NgorI2RlZmluZSBTNl9JTlRDX1VBUlQobikJCQkoNDcgKyAobikpCS8qIDAuLjEgKi8KKyNkZWZpbmUgUzZfSU5UQ19YQUQJCQk0OQorI2RlZmluZSBTNl9JTlRDX05JX0VSUgkJCTUwCisjZGVmaW5lIFM2X0lOVENfTklfSU5GSUZPRlVMTAkJNTEKKyNkZWZpbmUgUzZfSU5UQ19ETUFfTklFUlIJCTUyCisjZGVmaW5lIFM2X0lOVENfRE1BX05JTE9XV01SSyhuKQkoNTMgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfTklQRU5EQ05UKG4pCSg1NyArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX0REUgkJCTYxCisjZGVmaW5lIFM2X0lOVENfTlNfRVJSCQkJNjIKKyNkZWZpbmUgUzZfSU5UQ19FRklfQ0ZHRVJSCQk2MworI2RlZmluZSBTNl9JTlRDX0VGSV9JU0VGVEVTVAkJNjQKKyNkZWZpbmUgUzZfSU5UQ19FRklfV1JJVEVFUlIJCTY1CisjZGVmaW5lIFM2X0lOVENfTk1JX1RJTUVSCQk2NgorI2RlZmluZSBTNl9JTlRDX1BMTExPQ0tfU1lTCQk2NworI2RlZmluZSBTNl9JTlRDX1BMTExPQ0tfSU8JCTY4CisjZGVmaW5lIFM2X0lOVENfUExMTE9DS19BSU0JCTY5CisjZGVmaW5lIFM2X0lOVENfUExMTE9DS19EUDAJCTcwCisjZGVmaW5lIFM2X0lOVENfUExMTE9DS19EUDIJCTcxCisjZGVmaW5lIFM2X0lOVENfSTJTX0VSUgkJCTcyCisjZGVmaW5lIFM2X0lOVENfR01BQ19TVEFUCQk3MworI2RlZmluZSBTNl9JTlRDX0dNQUNfRVJSCQk3NAorI2RlZmluZSBTNl9JTlRDX0dJQl9FUlIJCQk3NQorI2RlZmluZSBTNl9JTlRDX1BDSUVfRVJSCQk3NgorI2RlZmluZSBTNl9JTlRDX1BDSUVfTVNJKG4pCQkoNzcgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX0lOVEEJCTgxCisjZGVmaW5lIFM2X0lOVENfUENJRV9JTlRCCQk4MgorI2RlZmluZSBTNl9JTlRDX1BDSUVfSU5UQwkJODMKKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX0lOVEQJCTg0CisjZGVmaW5lIFM2X0lOVENfU1cobikJCQkoODUgKyAobikpCS8qIDAuLjkgKi8KKyNkZWZpbmUgUzZfSU5UQ19TV19FTkFCTEUobikJCSg4NSArIDI1NiArIChuKSkKKyNkZWZpbmUgUzZfSU5UQ19ETUFfRFBfRVJSCQk5NQorI2RlZmluZSBTNl9JTlRDX0RNQV9EUExPV1dNUksobikJKDk2ICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfRE1BX0RQUEVORENOVChuKQkoMTAwICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfRE1BX0RQVEVSTUNOVChuKQkoMTA0ICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfVElNRVIwCQkJMTA4CisjZGVmaW5lIFM2X0lOVENfVElNRVIxCQkJMTA5CisjZGVmaW5lIFM2X0lOVENfRE1BX0hPU1RURVJNQ05UKG4pCSgxMTAgKyAobikpCS8qIDAuLjYgKi8KKworI2VuZGlmIC8qIF9fWFRFTlNBX1M2MDAwX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9pcnEuaCBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTAzMWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2lycS5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBfX1hURU5TQV9TNjAwMF9JUlFfSAorI2RlZmluZSBfX1hURU5TQV9TNjAwMF9JUlFfSAorCisjZGVmaW5lIE5PX0lSUQkJKC0xKQorCitleHRlcm4gdm9pZCB2YXJpYW50X2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSk7CitleHRlcm4gdm9pZCB2YXJpYW50X2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpOworCisjZW5kaWYgLyogX19YVEVOU0FfUzYwMDBfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUtYXNtLmggYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmQwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLWFzbS5oCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBjb250YWlucyBhc3NlbWJseS1sYW5ndWFnZSBkZWZpbml0aW9ucyAoYXNzZW1ibHkKKyAqIG1hY3JvcywgZXRjLikgZm9yIHRoaXMgc3BlY2lmaWMgWHRlbnNhIHByb2Nlc3NvcidzIFRJRSBleHRlbnNpb25zCisgKiBhbmQgb3B0aW9ucy4gIEl0IGlzIGN1c3RvbWl6ZWQgdG8gdGhpcyBYdGVuc2EgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDggVGVuc2lsaWNhIEluYy4KKyAqLworCisjaWZuZGVmIF9YVEVOU0FfQ09SRV9USUVfQVNNX0gKKyNkZWZpbmUgX1hURU5TQV9DT1JFX1RJRV9BU01fSAorCisvKiAgU2VsZWN0aW9uIHBhcmFtZXRlciB2YWx1ZXMgZm9yIHNhdmUtYXJlYSBzYXZlL3Jlc3RvcmUgbWFjcm9zOiAgKi8KKy8qICBPcHRpb24gdnMuIFRJRTogICovCisjZGVmaW5lIFhUSEFMX1NBU19USUUJMHgwMDAxCS8qIGN1c3RvbSBleHRlbnNpb24gb3IgY29wcm9jZXNzb3IgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX09QVAkweDAwMDIJLyogb3B0aW9uYWwgKGFuZCBub3QgYSBjb3Byb2Nlc3NvcikgKi8KKy8qICBXaGV0aGVyIHVzZWQgYXV0b21hdGljYWxseSBieSBjb21waWxlcjogICovCisjZGVmaW5lIFhUSEFMX1NBU19OT0NDCTB4MDAwNAkvKiBub3QgdXNlZCBieSBjb21waWxlciB3L28gc3BlY2lhbCBvcHRzL2NvZGUgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0NDCTB4MDAwOAkvKiB1c2VkIGJ5IGNvbXBpbGVyIHdpdGhvdXQgc3BlY2lhbCBvcHRzL2NvZGUgKi8KKy8qICBBQkkgaGFuZGxpbmcgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0NBTFIJMHgwMDEwCS8qIGNhbGxlci1zYXZlZCAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0FMRQkweDAwMjAJLyogY2FsbGVlLXNhdmVkICovCisjZGVmaW5lIFhUSEFMX1NBU19HTE9CCTB4MDA0MAkvKiBnbG9iYWwgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzIChpbiB0aHJlYWQpICovCisvKiAgTWlzYyAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0FMTAkweEZGRkYJLyogaW5jbHVkZSBhbGwgZGVmYXVsdCBOQ1AgY29udGVudHMgKi8KKworCisKKy8qIE1hY3JvIHRvIHNhdmUgYWxsIG5vbi1jb3Byb2Nlc3NvciAoZXh0cmEpIGN1c3RvbSBUSUUgYW5kIG9wdGlvbmFsIHN0YXRlCisgKiAobm90IGluY2x1ZGluZyB6ZXJvLW92ZXJoZWFkIGxvb3AgcmVnaXN0ZXJzKS4KKyAqIFNhdmUgYXJlYSBwdHIgKGNsb2JiZXJlZCk6ICBwdHIgICgxNiBieXRlIGFsaWduZWQpCisgKiBTY3JhdGNoIHJlZ3MgIChjbG9iYmVyZWQpOiAgYXQxLi5hdDQgIChvbmx5IGZpcnN0IFhDSEFMX05DUF9OVU1fQVRNUFMgbmVlZGVkKQorICovCisJLm1hY3JvIHhjaGFsX25jcF9zdG9yZSAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydAlcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX09QVCB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAxMDI0LTQsIDQsIDQKKwlyc3IJXGF0MSwgQlIJCS8vIGJvb2xlYW4gb3B0aW9uCisJczMyaQlcYXQxLCBccHRyLCAuTHhjaGFsX29mc18gKyAwCisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDQKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9uY3Bfc3RvcmUKKworLyogTWFjcm8gdG8gc2F2ZSBhbGwgbm9uLWNvcHJvY2Vzc29yIChleHRyYSkgY3VzdG9tIFRJRSBhbmQgb3B0aW9uYWwgc3RhdGUKKyAqIChub3QgaW5jbHVkaW5nIHplcm8tb3ZlcmhlYWQgbG9vcCByZWdpc3RlcnMpLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfTkNQX05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKwkubWFjcm8geGNoYWxfbmNwX2xvYWQgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQJXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19PUFQgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMTAyNC00LCA0LCA0CisJbDMyaQlcYXQxLCBccHRyLCAuTHhjaGFsX29mc18gKyAwCisJd3NyCVxhdDEsIEJSCQkvLyBib29sZWFuIG9wdGlvbgorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA0CisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfbmNwX2xvYWQKKworCisKKyNkZWZpbmUgWENIQUxfTkNQX05VTV9BVE1QUwkxCisKKworCisvKiBNYWNybyB0byBzYXZlIHRoZSBzdGF0ZSBvZiBUSUUgY29wcm9jZXNzb3IgRlBVLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfQ1AwX05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKyNkZWZpbmUgeGNoYWxfY3BfRlBVX3N0b3JlCXhjaGFsX2NwMF9zdG9yZQorLyogI2RlZmluZSB4Y2hhbF9jcF9GUFVfc3RvcmVfYTIJeGNoYWxfY3AwX3N0b3JlIGEyIGEzIGE0IGE1IGE2ICovCisJLm1hY3JvCXhjaGFsX2NwMF9zdG9yZSAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydCBcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX1RJRSB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAwLCAxLCAxNgorCXJ1cjIzMglcYXQxCQkvLyBGQ1IKKwlzMzJpCVxhdDEsIFxwdHIsIDAKKwlydXIyMzMJXGF0MQkJLy8gRlNSCisJczMyaQlcYXQxLCBccHRyLCA0CisJU1NJIGYwLCBccHRyLCAgOAorCVNTSSBmMSwgXHB0ciwgIDEyCisJU1NJIGYyLCBccHRyLCAgMTYKKwlTU0kgZjMsIFxwdHIsICAyMAorCVNTSSBmNCwgXHB0ciwgIDI0CisJU1NJIGY1LCBccHRyLCAgMjgKKwlTU0kgZjYsIFxwdHIsICAzMgorCVNTSSBmNywgXHB0ciwgIDM2CisJU1NJIGY4LCBccHRyLCAgNDAKKwlTU0kgZjksIFxwdHIsICA0NAorCVNTSSBmMTAsIFxwdHIsICA0OAorCVNTSSBmMTEsIFxwdHIsICA1MgorCVNTSSBmMTIsIFxwdHIsICA1NgorCVNTSSBmMTMsIFxwdHIsICA2MAorCVNTSSBmMTQsIFxwdHIsICA2NAorCVNTSSBmMTUsIFxwdHIsICA2OAorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA3MgorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX2NwMF9zdG9yZQorCisvKiBNYWNybyB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBUSUUgY29wcm9jZXNzb3IgRlBVLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfQ1AwX05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKyNkZWZpbmUgeGNoYWxfY3BfRlBVX2xvYWQJeGNoYWxfY3AwX2xvYWQKKy8qICNkZWZpbmUgeGNoYWxfY3BfRlBVX2xvYWRfYTIJeGNoYWxfY3AwX2xvYWQgYTIgYTMgYTQgYTUgYTYgKi8KKwkubWFjcm8JeGNoYWxfY3AwX2xvYWQgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQgXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19USUUgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMCwgMSwgMTYKKwlsMzJpCVxhdDEsIFxwdHIsIDAKKwl3dXIyMzIJXGF0MQkJLy8gRkNSCisJbDMyaQlcYXQxLCBccHRyLCA0CisJd3VyMjMzCVxhdDEJCS8vIEZTUgorCUxTSSBmMCwgXHB0ciwgIDgKKwlMU0kgZjEsIFxwdHIsICAxMgorCUxTSSBmMiwgXHB0ciwgIDE2CisJTFNJIGYzLCBccHRyLCAgMjAKKwlMU0kgZjQsIFxwdHIsICAyNAorCUxTSSBmNSwgXHB0ciwgIDI4CisJTFNJIGY2LCBccHRyLCAgMzIKKwlMU0kgZjcsIFxwdHIsICAzNgorCUxTSSBmOCwgXHB0ciwgIDQwCisJTFNJIGY5LCBccHRyLCAgNDQKKwlMU0kgZjEwLCBccHRyLCAgNDgKKwlMU0kgZjExLCBccHRyLCAgNTIKKwlMU0kgZjEyLCBccHRyLCAgNTYKKwlMU0kgZjEzLCBccHRyLCAgNjAKKwlMU0kgZjE0LCBccHRyLCAgNjQKKwlMU0kgZjE1LCBccHRyLCAgNjgKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNzIKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9jcDBfbG9hZAorCisjZGVmaW5lIFhDSEFMX0NQMF9OVU1fQVRNUFMJMQorCisvKiBNYWNybyB0byBzYXZlIHRoZSBzdGF0ZSBvZiBUSUUgY29wcm9jZXNzb3IgWEFELgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfQ1A2X05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKyNkZWZpbmUgeGNoYWxfY3BfWEFEX3N0b3JlCXhjaGFsX2NwNl9zdG9yZQorLyogI2RlZmluZSB4Y2hhbF9jcF9YQURfc3RvcmVfYTIJeGNoYWxfY3A2X3N0b3JlIGEyIGEzIGE0IGE1IGE2ICovCisJLm1hY3JvCXhjaGFsX2NwNl9zdG9yZSAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydCBcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX1RJRSB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAwLCAxLCAxNgorCXJ1cjAJXGF0MQkJLy8gTERDQkhJCisJczMyaQlcYXQxLCBccHRyLCAwCisJcnVyMQlcYXQxCQkvLyBMRENCTE8KKwlzMzJpCVxhdDEsIFxwdHIsIDQKKwlydXIyCVxhdDEJCS8vIFNUQ0JISQorCXMzMmkJXGF0MSwgXHB0ciwgOAorCXJ1cjMJXGF0MQkJLy8gU1RDQkxPCisJczMyaQlcYXQxLCBccHRyLCAxMgorCXJ1cjgJXGF0MQkJLy8gTERCUkJBU0UKKwlzMzJpCVxhdDEsIFxwdHIsIDE2CisJcnVyOQlcYXQxCQkvLyBMREJST0ZGCisJczMyaQlcYXQxLCBccHRyLCAyMAorCXJ1cjEwCVxhdDEJCS8vIExEQlJJTkMKKwlzMzJpCVxhdDEsIFxwdHIsIDI0CisJcnVyMTEJXGF0MQkJLy8gU1RCUkJBU0UKKwlzMzJpCVxhdDEsIFxwdHIsIDI4CisJcnVyMTIJXGF0MQkJLy8gU1RCUk9GRgorCXMzMmkJXGF0MSwgXHB0ciwgMzIKKwlydXIxMwlcYXQxCQkvLyBTVEJSSU5DCisJczMyaQlcYXQxLCBccHRyLCAzNgorCXJ1cjI0CVxhdDEJCS8vIFNDUkFUQ0gwCisJczMyaQlcYXQxLCBccHRyLCA0MAorCXJ1cjI1CVxhdDEJCS8vIFNDUkFUQ0gxCisJczMyaQlcYXQxLCBccHRyLCA0NAorCXJ1cjI2CVxhdDEJCS8vIFNDUkFUQ0gyCisJczMyaQlcYXQxLCBccHRyLCA0OAorCXJ1cjI3CVxhdDEJCS8vIFNDUkFUQ0gzCisJczMyaQlcYXQxLCBccHRyLCA1MgorCVdSQVMxMjhJIHdyYTAsIFxwdHIsICA2NAorCVdSQVMxMjhJIHdyYTEsIFxwdHIsICA4MAorCVdSQVMxMjhJIHdyYTIsIFxwdHIsICA5NgorCVdSQVMxMjhJIHdyYTMsIFxwdHIsICAxMTIKKwlXUkFTMTI4SSB3cmE0LCBccHRyLCAgMTI4CisJV1JBUzEyOEkgd3JhNSwgXHB0ciwgIDE0NAorCVdSQVMxMjhJIHdyYTYsIFxwdHIsICAxNjAKKwlXUkFTMTI4SSB3cmE3LCBccHRyLCAgMTc2CisJV1JBUzEyOEkgd3JhOCwgXHB0ciwgIDE5MgorCVdSQVMxMjhJIHdyYTksIFxwdHIsICAyMDgKKwlXUkFTMTI4SSB3cmExMCwgXHB0ciwgIDIyNAorCVdSQVMxMjhJIHdyYTExLCBccHRyLCAgMjQwCisJV1JBUzEyOEkgd3JhMTIsIFxwdHIsICAyNTYKKwlXUkFTMTI4SSB3cmExMywgXHB0ciwgIDI3MgorCVdSQVMxMjhJIHdyYTE0LCBccHRyLCAgMjg4CisJV1JBUzEyOEkgd3JhMTUsIFxwdHIsICAzMDQKKwlXUkJTMTI4SSB3cmIwLCBccHRyLCAgMzIwCisJV1JCUzEyOEkgd3JiMSwgXHB0ciwgIDMzNgorCVdSQlMxMjhJIHdyYjIsIFxwdHIsICAzNTIKKwlXUkJTMTI4SSB3cmIzLCBccHRyLCAgMzY4CisJV1JCUzEyOEkgd3JiNCwgXHB0ciwgIDM4NAorCVdSQlMxMjhJIHdyYjUsIFxwdHIsICA0MDAKKwlXUkJTMTI4SSB3cmI2LCBccHRyLCAgNDE2CisJV1JCUzEyOEkgd3JiNywgXHB0ciwgIDQzMgorCVdSQlMxMjhJIHdyYjgsIFxwdHIsICA0NDgKKwlXUkJTMTI4SSB3cmI5LCBccHRyLCAgNDY0CisJV1JCUzEyOEkgd3JiMTAsIFxwdHIsICA0ODAKKwlXUkJTMTI4SSB3cmIxMSwgXHB0ciwgIDQ5NgorCVdSQlMxMjhJIHdyYjEyLCBccHRyLCAgNTEyCisJV1JCUzEyOEkgd3JiMTMsIFxwdHIsICA1MjgKKwlXUkJTMTI4SSB3cmIxNCwgXHB0ciwgIDU0NAorCVdSQlMxMjhJIHdyYjE1LCBccHRyLCAgNTYwCisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDU3NgorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX2NwNl9zdG9yZQorCisvKiBNYWNybyB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBUSUUgY29wcm9jZXNzb3IgWEFELgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfQ1A2X05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKyNkZWZpbmUgeGNoYWxfY3BfWEFEX2xvYWQJeGNoYWxfY3A2X2xvYWQKKy8qICNkZWZpbmUgeGNoYWxfY3BfWEFEX2xvYWRfYTIJeGNoYWxfY3A2X2xvYWQgYTIgYTMgYTQgYTUgYTYgKi8KKwkubWFjcm8JeGNoYWxfY3A2X2xvYWQgIHB0ciBhdDEgYXQyIGF0MyBhdDQgIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD1YVEhBTF9TQVNfQUxMCisJeGNoYWxfc2Ffc3RhcnQgXGNvbnRpbnVlLCBcb2ZzCisJLmlmZXEgKFhUSEFMX1NBU19USUUgfCBYVEhBTF9TQVNfTk9DQyB8IFhUSEFMX1NBU19DQUxSKSAmIH5cc2VsZWN0CisJeGNoYWxfc2FfYWxpZ24JXHB0ciwgMCwgMCwgMSwgMTYKKwlsMzJpCVxhdDEsIFxwdHIsIDAKKwl3dXIwCVxhdDEJCS8vIExEQ0JISQorCWwzMmkJXGF0MSwgXHB0ciwgNAorCXd1cjEJXGF0MQkJLy8gTERDQkxPCisJbDMyaQlcYXQxLCBccHRyLCA4CisJd3VyMglcYXQxCQkvLyBTVENCSEkKKwlsMzJpCVxhdDEsIFxwdHIsIDEyCisJd3VyMwlcYXQxCQkvLyBTVENCTE8KKwlsMzJpCVxhdDEsIFxwdHIsIDE2CisJd3VyOAlcYXQxCQkvLyBMREJSQkFTRQorCWwzMmkJXGF0MSwgXHB0ciwgMjAKKwl3dXI5CVxhdDEJCS8vIExEQlJPRkYKKwlsMzJpCVxhdDEsIFxwdHIsIDI0CisJd3VyMTAJXGF0MQkJLy8gTERCUklOQworCWwzMmkJXGF0MSwgXHB0ciwgMjgKKwl3dXIxMQlcYXQxCQkvLyBTVEJSQkFTRQorCWwzMmkJXGF0MSwgXHB0ciwgMzIKKwl3dXIxMglcYXQxCQkvLyBTVEJST0ZGCisJbDMyaQlcYXQxLCBccHRyLCAzNgorCXd1cjEzCVxhdDEJCS8vIFNUQlJJTkMKKwlsMzJpCVxhdDEsIFxwdHIsIDQwCisJd3VyMjQJXGF0MQkJLy8gU0NSQVRDSDAKKwlsMzJpCVxhdDEsIFxwdHIsIDQ0CisJd3VyMjUJXGF0MQkJLy8gU0NSQVRDSDEKKwlsMzJpCVxhdDEsIFxwdHIsIDQ4CisJd3VyMjYJXGF0MQkJLy8gU0NSQVRDSDIKKwlsMzJpCVxhdDEsIFxwdHIsIDUyCisJd3VyMjcJXGF0MQkJLy8gU0NSQVRDSDMKKwlXUkJMMTI4SSB3cmIwLCBccHRyLCAgMzIwCisJV1JCTDEyOEkgd3JiMSwgXHB0ciwgIDMzNgorCVdSQkwxMjhJIHdyYjIsIFxwdHIsICAzNTIKKwlXUkJMMTI4SSB3cmIzLCBccHRyLCAgMzY4CisJV1JCTDEyOEkgd3JiNCwgXHB0ciwgIDM4NAorCVdSQkwxMjhJIHdyYjUsIFxwdHIsICA0MDAKKwlXUkJMMTI4SSB3cmI2LCBccHRyLCAgNDE2CisJV1JCTDEyOEkgd3JiNywgXHB0ciwgIDQzMgorCVdSQkwxMjhJIHdyYjgsIFxwdHIsICA0NDgKKwlXUkJMMTI4SSB3cmI5LCBccHRyLCAgNDY0CisJV1JCTDEyOEkgd3JiMTAsIFxwdHIsICA0ODAKKwlXUkJMMTI4SSB3cmIxMSwgXHB0ciwgIDQ5NgorCVdSQkwxMjhJIHdyYjEyLCBccHRyLCAgNTEyCisJV1JCTDEyOEkgd3JiMTMsIFxwdHIsICA1MjgKKwlXUkJMMTI4SSB3cmIxNCwgXHB0ciwgIDU0NAorCVdSQkwxMjhJIHdyYjE1LCBccHRyLCAgNTYwCisJV1JBTDEyOEkgd3JhMCwgXHB0ciwgIDY0CisJV1JBTDEyOEkgd3JhMSwgXHB0ciwgIDgwCisJV1JBTDEyOEkgd3JhMiwgXHB0ciwgIDk2CisJV1JBTDEyOEkgd3JhMywgXHB0ciwgIDExMgorCVdSQUwxMjhJIHdyYTQsIFxwdHIsICAxMjgKKwlXUkFMMTI4SSB3cmE1LCBccHRyLCAgMTQ0CisJV1JBTDEyOEkgd3JhNiwgXHB0ciwgIDE2MAorCVdSQUwxMjhJIHdyYTcsIFxwdHIsICAxNzYKKwlXUkFMMTI4SSB3cmE4LCBccHRyLCAgMTkyCisJV1JBTDEyOEkgd3JhOSwgXHB0ciwgIDIwOAorCVdSQUwxMjhJIHdyYTEwLCBccHRyLCAgMjI0CisJV1JBTDEyOEkgd3JhMTEsIFxwdHIsICAyNDAKKwlXUkFMMTI4SSB3cmExMiwgXHB0ciwgIDI1NgorCVdSQUwxMjhJIHdyYTEzLCBccHRyLCAgMjcyCisJV1JBTDEyOEkgd3JhMTQsIFxwdHIsICAyODgKKwlXUkFMMTI4SSB3cmExNSwgXHB0ciwgIDMwNAorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA1NzYKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9jcDZfbG9hZAorCisjZGVmaW5lIFhDSEFMX0NQNl9OVU1fQVRNUFMJMQorI2RlZmluZSBYQ0hBTF9TQV9OVU1fQVRNUFMJMQorCisJLyogIEVtcHR5IG1hY3JvcyBmb3IgdW5jb25maWd1cmVkIGNvcHJvY2Vzc29yczogICovCisJLm1hY3JvIHhjaGFsX2NwMV9zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3AxX2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwMl9zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3AyX2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwM19zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3AzX2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwNF9zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A0X2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwNV9zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A1X2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisJLm1hY3JvIHhjaGFsX2NwN19zdG9yZQlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A3X2xvYWQJcCBhIGIgYyBkIGNvbnRpbnVlPTAgb2ZzPS0xIHNlbGVjdD0tMSA7IC5lbmRtCisKKyNlbmRpZiAvKl9YVEVOU0FfQ09SRV9USUVfQVNNX0gqLworCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLmggYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvdGllLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZWE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUuaApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIFRoaXMgaGVhZGVyIGZpbGUgZGVzY3JpYmVzIHRoaXMgc3BlY2lmaWMgWHRlbnNhIHByb2Nlc3NvcidzIFRJRSBleHRlbnNpb25zCisgKiB0aGF0IGV4dGVuZCBiYXNpYyBYdGVuc2EgY29yZSBmdW5jdGlvbmFsaXR5LiAgSXQgaXMgY3VzdG9taXplZCB0byB0aGlzCisgKiBYdGVuc2EgcHJvY2Vzc29yIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDggVGVuc2lsaWNhIEluYy4KKyAqLworCisjaWZuZGVmIF9YVEVOU0FfQ09SRV9USUVfSAorI2RlZmluZSBfWFRFTlNBX0NPUkVfVElFX0gKKworI2RlZmluZSBYQ0hBTF9DUF9OVU0JCQkyCS8qIG51bWJlciBvZiBjb3Byb2Nlc3NvcnMgKi8KKyNkZWZpbmUgWENIQUxfQ1BfTUFYCQkJNwkvKiBtYXggQ1AgSUQgKyAxICgwIGlmIG5vbmUpICovCisjZGVmaW5lIFhDSEFMX0NQX01BU0sJCQkweDQxCS8qIGJpdG1hc2sgb2YgYWxsIENQcyBieSBJRCAqLworI2RlZmluZSBYQ0hBTF9DUF9QT1JUX01BU0sJCTB4MDAJLyogYml0bWFzayBvZiBvbmx5IHBvcnQgQ1BzICovCisKKy8qICBCYXNpYyBwYXJhbWV0ZXJzIG9mIGVhY2ggY29wcm9jZXNzb3I6ICAqLworI2RlZmluZSBYQ0hBTF9DUDBfTkFNRQkJCSJGUFUiCisjZGVmaW5lIFhDSEFMX0NQMF9JREVOVAkJCUZQVQorI2RlZmluZSBYQ0hBTF9DUDBfU0FfU0laRQkJNzIJLyogc2l6ZSBvZiBzdGF0ZSBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1AwX1NBX0FMSUdOCQk0CS8qIG1pbiBhbGlnbm1lbnQgb2Ygc2F2ZSBhcmVhICovCisjZGVmaW5lIFhDSEFMX0NQX0lEX0ZQVQkJCTAJLyogY29wcm9jZXNzb3IgSUQgKDAuLjcpICovCisjZGVmaW5lIFhDSEFMX0NQNl9OQU1FCQkJIlhBRCIKKyNkZWZpbmUgWENIQUxfQ1A2X0lERU5UCQkJWEFECisjZGVmaW5lIFhDSEFMX0NQNl9TQV9TSVpFCQk1NzYJLyogc2l6ZSBvZiBzdGF0ZSBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1A2X1NBX0FMSUdOCQkxNgkvKiBtaW4gYWxpZ25tZW50IG9mIHNhdmUgYXJlYSAqLworI2RlZmluZSBYQ0hBTF9DUF9JRF9YQUQJCQk2CS8qIGNvcHJvY2Vzc29yIElEICgwLi43KSAqLworCisvKiAgRmlsbGVyIGluZm8gZm9yIHVuYXNzaWduZWQgY29wcm9jZXNzb3JzLCB0byBzaW1wbGlmeSBhcnJheXMgZXRjOiAgKi8KKyNkZWZpbmUgWENIQUxfQ1AxX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDNfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDNfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDdfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDdfU0FfQUxJR04JCTEKKworLyogIFNhdmUgYXJlYSBmb3Igbm9uLWNvcHJvY2Vzc29yIG9wdGlvbmFsIGFuZCBjdXN0b20gKFRJRSkgc3RhdGU6ICAqLworI2RlZmluZSBYQ0hBTF9OQ1BfU0FfU0laRQkJNAorI2RlZmluZSBYQ0hBTF9OQ1BfU0FfQUxJR04JCTQKKworLyogIFRvdGFsIHNhdmUgYXJlYSBmb3Igb3B0aW9uYWwgYW5kIGN1c3RvbSBzdGF0ZSAoTkNQICsgQ1BuKTogICovCisjZGVmaW5lIFhDSEFMX1RPVEFMX1NBX1NJWkUJCTY3MgkvKiB3aXRoIDE2LWJ5dGUgYWxpZ24gcGFkZGluZyAqLworI2RlZmluZSBYQ0hBTF9UT1RBTF9TQV9BTElHTgkJMTYJLyogYWN0dWFsIG1pbmltdW0gYWxpZ25tZW50ICovCisKKy8qCisgKiBEZXRhaWxlZCBjb250ZW50cyBvZiBzYXZlIGFyZWFzLgorICogTk9URTogIGNhbGxlciBtdXN0IGRlZmluZSB0aGUgWENIQUxfU0FfUkVHIG1hY3JvIChub3QgZGVmaW5lZCBoZXJlKQorICogYmVmb3JlIGV4cGFuZGluZyB0aGUgWENIQUxfeHh4X1NBX0xJU1QoKSBtYWNyb3MuCisgKgorICogWENIQUxfU0FfUkVHKHMsY2N1c2VkLGFiaWtpbmQsa2luZCxvcHQsbmFtZSxnYWxpZ24sYWxpZ24sYXNpemUsCisgKgkJZGJudW0sYmFzZSxyZWdudW0sYml0c3osZ2Fwc3oscmVzZXQseC4uLikKKyAqCisgKglzID0gcGFzc2VkIGZyb20gWENIQUxfKl9MSVNUKHMpLCBlZy4gdG8gc2VsZWN0IGhvdyB0byBleHBhbmQKKyAqCWNjdXNlZCA9IHNldCBpZiB1c2VkIGJ5IGNvbXBpbGVyIHdpdGhvdXQgc3BlY2lhbCBvcHRpb25zIG9yIGNvZGUKKyAqCWFiaWtpbmQgPSAwIChjYWxsZXItc2F2ZWQpLCAxIChjYWxsZWUtc2F2ZWQpLCBvciAyICh0aHJlYWQtZ2xvYmFsKQorICoJa2luZCA9IDAgKHNwZWNpYWwgcmVnKSwgMSAoVElFIHVzZXIgcmVnKSwgb3IgMiAoVElFIHJlZ2ZpbGUgcmVnKQorICoJb3B0ID0gMCAoY3VzdG9tIFRJRSBleHRlbnNpb24gb3IgY29wcm9jZXNzb3IpLCBvciAxIChvcHRpb25hbCByZWcpCisgKgluYW1lID0gbG93ZXJjYXNlIHJlZyBuYW1lIChubyBxdW90ZXMpCisgKglnYWxpZ24gPSBncm91cCBieXRlIGFsaWdubWVudCAocG93ZXIgb2YgMikgKGdhbGlnbiA+PSBhbGlnbikKKyAqCWFsaWduID0gcmVnaXN0ZXIgYnl0ZSBhbGlnbm1lbnQgKHBvd2VyIG9mIDIpCisgKglhc2l6ZSA9IGFsbG9jYXRlZCBzaXplIGluIGJ5dGVzIChhc2l6ZSo4ID09IGJpdHN6ICsgZ2Fwc3ogKyBwYWRzeikKKyAqCSAgKG5vdCBpbmNsdWRpbmcgYW55IHBhZCBieXRlcyByZXF1aXJlZCB0byBnYWxpZ24gdGhpcyBvciBuZXh0IHJlZykKKyAqCWRibnVtID0gdW5pcXVlIHRhcmdldCBudW1iZXIgZi9kZWJ1ZyAoc2VlIDx4dGVuc2EtbGliZGItbWFjcm9zLmg+KQorICoJYmFzZSA9IHJlZyBzaG9ydG5hbWUgdy9vIGluZGV4IChvciBzcj1zcGVjaWFsLCB1cj1USUUgdXNlciByZWcpCisgKglyZWdudW0gPSByZWcgaW5kZXggaW4gcmVnZmlsZSwgb3Igc3BlY2lhbC9USUUtdXNlciByZWcgbnVtYmVyCisgKgliaXRzeiA9IG51bWJlciBvZiBzaWduaWZpY2FudCBiaXRzIChyZWdmaWxlIHdpZHRoLCBvciB1ci9zciBtYXNrIGJpdHMpCisgKglnYXBzeiA9IGludGVydmVuaW5nIGJpdHMsIGlmIGJpdHN6IGJpdHMgbm90IHN0b3JlZCBjb250aWd1b3VzbHkKKyAqCShwYWRzeiA9IHBhZCBiaXRzIGF0IGVuZCBbVElFIHJlZ2ZpbGVdIG9yIGF0IG1zYml0cyBbdXIsc3JdIG9mIGFzaXplKQorICoJcmVzZXQgPSByZWdpc3RlciByZXNldCB2YWx1ZSAob3IgMCBpZiB1bmRlZmluZWQgYXQgcmVzZXQpCisgKgl4ID0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKDAgdW50aWwgdGhlbikKKyAqCisgKiAgVG8gZmlsdGVyIG91dCBjZXJ0YWluIHJlZ2lzdGVycywgZS5nLiB0byBleHBhbmQgb25seSB0aGUgbm9uLWdsb2JhbAorICogIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBjb21waWxlciwgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorICoKKyAqICAjZGVmaW5lIFhDSEFMX1NBX1JFRyhzLGNjdXNlZCxwLi4uKQlTRUxDQyMjY2N1c2VkKHApCisgKiAgI2RlZmluZSBTRUxDQzAocC4uLikKKyAqICAjZGVmaW5lIFNFTENDMShhYmlraW5kLHAuLi4pCVNFTEFLIyNhYmlraW5kKHApCisgKiAgI2RlZmluZSBTRUxBSzAocC4uLikJCVJFRyhwKQorICogICNkZWZpbmUgU0VMQUsxKHAuLi4pCQlSRUcocCkKKyAqICAjZGVmaW5lIFNFTEFLMihwLi4uKQorICogICNkZWZpbmUgUkVHKGtpbmQsdGllLG5hbWUsZ2FsbixhbG4sYXN6LGNzeixkYm51bSxiYXNlLHJudW0sYnN6LHJzdCx4Li4uKSBcCisgKgkJLi4ud2hhdCB5b3Ugd2FudCB0byBleHBhbmQuLi4KKyAqLworCisjZGVmaW5lIFhDSEFMX05DUF9TQV9OVU0JMQorI2RlZmluZSBYQ0hBTF9OQ1BfU0FfTElTVChzKQlcCisgWENIQUxfU0FfUkVHKHMsMCwwLDAsMSwgICAgICAgICAgICAgYnIsIDQsIDQsIDQsMHgwMjA0LCAgc3IsNCAgLCAxNiwwLDAsMCkKKworI2RlZmluZSBYQ0hBTF9DUDBfU0FfTlVNCTE4CisjZGVmaW5lIFhDSEFMX0NQMF9TQV9MSVNUKHMpCVwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgICAgIGZjciwgNCwgNCwgNCwweDAzRTgsICB1ciwyMzIsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICAgICBmc3IsIDQsIDQsIDQsMHgwM0U5LCAgdXIsMjMzLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGYwLCA0LCA0LCA0LDB4MDAzMCwgICBmLDAgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmMSwgNCwgNCwgNCwweDAwMzEsICAgZiwxICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjIsIDQsIDQsIDQsMHgwMDMyLCAgIGYsMiAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGYzLCA0LCA0LCA0LDB4MDAzMywgICBmLDMgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmNCwgNCwgNCwgNCwweDAwMzQsICAgZiw0ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjUsIDQsIDQsIDQsMHgwMDM1LCAgIGYsNSAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY2LCA0LCA0LCA0LDB4MDAzNiwgICBmLDYgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmNywgNCwgNCwgNCwweDAwMzcsICAgZiw3ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjgsIDQsIDQsIDQsMHgwMDM4LCAgIGYsOCAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY5LCA0LCA0LCA0LDB4MDAzOSwgICBmLDkgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxMCwgNCwgNCwgNCwweDAwM0EsICAgZiwxMCAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTEsIDQsIDQsIDQsMHgwMDNCLCAgIGYsMTEgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjEyLCA0LCA0LCA0LDB4MDAzQywgICBmLDEyICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxMywgNCwgNCwgNCwweDAwM0QsICAgZiwxMyAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTQsIDQsIDQsIDQsMHgwMDNFLCAgIGYsMTQgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjE1LCA0LCA0LCA0LDB4MDAzRiwgICBmLDE1ICwgMzIsMCwwLDApCisKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQMV9TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQMl9TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQM19TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQNF9TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX05VTQkwCisjZGVmaW5lIFhDSEFMX0NQNV9TQV9MSVNUKHMpCS8qIGVtcHR5ICovCisKKyNkZWZpbmUgWENIQUxfQ1A2X1NBX05VTQk0NgorI2RlZmluZSBYQ0hBTF9DUDZfU0FfTElTVChzKQlcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICBsZGNiaGksMTYsIDQsIDQsMHgwMzAwLCAgdXIsMCAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgbGRjYmxvLCA0LCA0LCA0LDB4MDMwMSwgIHVyLDEgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgIHN0Y2JoaSwgNCwgNCwgNCwweDAzMDIsICB1ciwyICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICBzdGNibG8sIDQsIDQsIDQsMHgwMzAzLCAgdXIsMyAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIGxkYnJiYXNlLCA0LCA0LCA0LDB4MDMwOCwgIHVyLDggICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgbGRicm9mZiwgNCwgNCwgNCwweDAzMDksICB1ciw5ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgIGxkYnJpbmMsIDQsIDQsIDQsMHgwMzBBLCAgdXIsMTAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIHN0YnJiYXNlLCA0LCA0LCA0LDB4MDMwQiwgIHVyLDExICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgc3Ricm9mZiwgNCwgNCwgNCwweDAzMEMsICB1ciwxMiAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgIHN0YnJpbmMsIDQsIDQsIDQsMHgwMzBELCAgdXIsMTMgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIHNjcmF0Y2gwLCA0LCA0LCA0LDB4MDMxOCwgIHVyLDI0ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBzY3JhdGNoMSwgNCwgNCwgNCwweDAzMTksICB1ciwyNSAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgc2NyYXRjaDIsIDQsIDQsIDQsMHgwMzFBLCAgdXIsMjYgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIHNjcmF0Y2gzLCA0LCA0LCA0LDB4MDMxQiwgIHVyLDI3ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhMCwxNiwxNiwxNiwweDEwMTAsIHdyYSwwICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTEsMTYsMTYsMTYsMHgxMDExLCB3cmEsMSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmEyLDE2LDE2LDE2LDB4MTAxMiwgd3JhLDIgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhMywxNiwxNiwxNiwweDEwMTMsIHdyYSwzICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTQsMTYsMTYsMTYsMHgxMDE0LCB3cmEsNCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE1LDE2LDE2LDE2LDB4MTAxNSwgd3JhLDUgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhNiwxNiwxNiwxNiwweDEwMTYsIHdyYSw2ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTcsMTYsMTYsMTYsMHgxMDE3LCB3cmEsNyAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE4LDE2LDE2LDE2LDB4MTAxOCwgd3JhLDggICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhOSwxNiwxNiwxNiwweDEwMTksIHdyYSw5ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTAsMTYsMTYsMTYsMHgxMDFBLCB3cmEsMTAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTExLDE2LDE2LDE2LDB4MTAxQiwgd3JhLDExICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExMiwxNiwxNiwxNiwweDEwMUMsIHdyYSwxMiAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTMsMTYsMTYsMTYsMHgxMDFELCB3cmEsMTMgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTE0LDE2LDE2LDE2LDB4MTAxRSwgd3JhLDE0ICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExNSwxNiwxNiwxNiwweDEwMUYsIHdyYSwxNSAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjAsMTYsMTYsMTYsMHgxMDIwLCB3cmIsMCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmIxLDE2LDE2LDE2LDB4MTAyMSwgd3JiLDEgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiMiwxNiwxNiwxNiwweDEwMjIsIHdyYiwyICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjMsMTYsMTYsMTYsMHgxMDIzLCB3cmIsMyAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI0LDE2LDE2LDE2LDB4MTAyNCwgd3JiLDQgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiNSwxNiwxNiwxNiwweDEwMjUsIHdyYiw1ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjYsMTYsMTYsMTYsMHgxMDI2LCB3cmIsNiAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI3LDE2LDE2LDE2LDB4MTAyNywgd3JiLDcgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiOCwxNiwxNiwxNiwweDEwMjgsIHdyYiw4ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjksMTYsMTYsMTYsMHgxMDI5LCB3cmIsOSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjEwLDE2LDE2LDE2LDB4MTAyQSwgd3JiLDEwICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxMSwxNiwxNiwxNiwweDEwMkIsIHdyYiwxMSAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTIsMTYsMTYsMTYsMHgxMDJDLCB3cmIsMTIgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjEzLDE2LDE2LDE2LDB4MTAyRCwgd3JiLDEzICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxNCwxNiwxNiwxNiwweDEwMkUsIHdyYiwxNCAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTUsMTYsMTYsMTYsMHgxMDJGLCB3cmIsMTUgLDEyOCwwLDAsMCkKKworI2RlZmluZSBYQ0hBTF9DUDdfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A3X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworLyogQnl0ZSBsZW5ndGggb2YgaW5zdHJ1Y3Rpb24gZnJvbSBpdHMgZmlyc3QgbmliYmxlIChvcDAgZmllbGQpLCBwZXIgRkxJWC4gICovCisjZGVmaW5lIFhDSEFMX09QMF9GT1JNQVRfTEVOR1RIUwkzLDMsMywzLDMsMywzLDMsMiwyLDIsMiwyLDIsOCw4CisKKyNlbmRpZiAvKl9YVEVOU0FfQ09SRV9USUVfSCovCisKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2lycS5jIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1MWUzMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2lycS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBzNjAwMCBpcnEgY3Jvc3NiYXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgZW1saXggR21iSAorICogQXV0aG9yczoJSm9oYW5uZXMgV2VpbmVyIDxqd0BlbWxpeC5jb20+CisgKgkJT3NrYXIgU2NoaXJtZXIgPG9zQGVtbGl4LmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KKworLyogUzZfUkVHX0lOVEMgKi8KKyNkZWZpbmUgSU5UQ19TVEFUVVMJMHgwMDAKKyNkZWZpbmUgSU5UQ19SQVcJMHgwMTAKKyNkZWZpbmUgSU5UQ19TVEFUVVNfQUcJMHgxMDAKKyNkZWZpbmUgSU5UQ19DRkcobikJKDB4MjAwICsgNCAqIChuKSkKKworLyoKKyAqIFRoZSBzNjAwMCBoYXMgYSBjcm9zc2JhciB0aGF0IG11bHRpcGxleGVzIGludGVycnVwdCBvdXRwdXQgbGluZXMKKyAqIGZyb20gdGhlIHBlcmlwaGVyYWxzIHRvIGlucHV0IGxpbmVzIG9uIHRoZSB4dGVuc2EgY29yZS4KKyAqCisgKiBXZSBsZWF2ZSB0aGUgbWFwcGluZyBkZWNpc2lvbnMgdG8gdGhlIHBsYXRmb3JtIGFzIGl0IGRlcGVuZHMgb24gdGhlCisgKiBhY3R1YWxseSBjb25uZWN0ZWQgcGVyaXBoZXJhbHMgd2hpY2ggZGlzdHJpYnV0aW9uIG1ha2VzIHNlbnNlLgorICovCitleHRlcm4gY29uc3Qgc2lnbmVkIGNoYXIgKnBsYXRmb3JtX2lycV9tYXBwaW5nc1tOUl9JUlFTXTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2NwX3RvX2ludGNfZW5hYmxlW10gPSB7CisjZGVmaW5lCVRPX0lOVENfRU5BQkxFKG4pCSgoKG4pIDw8IDEpICsgMSkKKwlUT19JTlRDX0VOQUJMRSgwKSwKKwlUT19JTlRDX0VOQUJMRSgxKSwKKwlUT19JTlRDX0VOQUJMRSgyKSwKKwlUT19JTlRDX0VOQUJMRSgzKSwKKwlUT19JTlRDX0VOQUJMRSg0KSwKKwlUT19JTlRDX0VOQUJMRSg1KSwKKwlUT19JTlRDX0VOQUJMRSg2KSwKKwlUT19JTlRDX0VOQUJMRSg3KSwKKwlUT19JTlRDX0VOQUJMRSg4KSwKKwlUT19JTlRDX0VOQUJMRSg5KSwKKwlUT19JTlRDX0VOQUJMRSgxMCksCisJVE9fSU5UQ19FTkFCTEUoMTEpLAorCVRPX0lOVENfRU5BQkxFKDEyKSwKKwktMSwKKwktMSwKKwlUT19JTlRDX0VOQUJMRSgxMyksCisJLTEsCisJVE9fSU5UQ19FTkFCTEUoMTQpLAorCS0xLAorCVRPX0lOVENfRU5BQkxFKDE1KSwKKyN1bmRlZglUT19JTlRDX0VOQUJMRQorfTsKKworc3RhdGljIHZvaWQgaXJxX3NldCh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZW47CisJY29uc3Qgc2lnbmVkIGNoYXIgKm0gPSBwbGF0Zm9ybV9pcnFfbWFwcGluZ3NbaXJxXTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCWVuID0gZW5hYmxlID8gc2NwX3RvX2ludGNfZW5hYmxlW2lycV0gOiAwOworCXdoaWxlICgqbSA+PSAwKSB7CisJCXdyaXRlbChlbiwgUzZfUkVHX0lOVEMgKyBJTlRDX0NGRygqbSkpOworCQltKys7CisJfQorfQorCit2b2lkIHZhcmlhbnRfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycV9zZXQoaXJxLCAxKTsKK30KKwordm9pZCB2YXJpYW50X2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxX3NldChpcnEsIDApOworfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwppbmRleCBmMjExNDdmLi4wNmViNmNjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwpAQCAtMzAsNyArMzAsNyBAQAogI2lmZGVmIENPTkZJR19ETUFfRU5HSU5FCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY190eF9pbml0KHZvaWQpCiB7Ci0JZG1hZW5naW5lX2dldCgpOworCWFzeW5jX2RtYWVuZ2luZV9nZXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gImFzeW5jX3R4OiBhcGkgaW5pdGlhbGl6ZWQgKGFzeW5jKVxuIik7CiAKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3R4X2V4aXQodm9pZCkKIHsKLQlkbWFlbmdpbmVfcHV0KCk7CisJYXN5bmNfZG1hZW5naW5lX3B1dCgpOwogfQogCiAvKioKQEAgLTU2LDcgKzU2LDcgQEAKIAlpZiAoZGVwZW5kX3R4ICYmCiAJICAgIGRtYV9oYXNfY2FwKHR4X3R5cGUsIGRlcGVuZF90eC0+Y2hhbi0+ZGV2aWNlLT5jYXBfbWFzaykpCiAJCXJldHVybiBkZXBlbmRfdHgtPmNoYW47Ci0JcmV0dXJuIGRtYV9maW5kX2NoYW5uZWwodHhfdHlwZSk7CisJcmV0dXJuIGFzeW5jX2RtYV9maW5kX2NoYW5uZWwodHhfdHlwZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2FzeW5jX3R4X2ZpbmRfY2hhbm5lbCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IDU5NWI3ODYuLjk1ZmUyYzggMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTMwLDExICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCi0vKiBkb19hc3luY194b3IgLSBkbWEgbWFwIHRoZSBwYWdlcyBhbmQgcGVyZm9ybSB0aGUgeG9yIHdpdGggYW4gZW5naW5lLgotICogCVRoaXMgcm91dGluZSBpcyBtYXJrZWQgX19hbHdheXNfaW5saW5lIHNvIGl0IGNhbiBiZSBjb21waWxlZCBhd2F5Ci0gKiAJd2hlbiBDT05GSUdfRE1BX0VOR0lORT1uCi0gKi8KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKKy8qIGRvX2FzeW5jX3hvciAtIGRtYSBtYXAgdGhlIHBhZ2VzIGFuZCBwZXJmb3JtIHRoZSB4b3Igd2l0aCBhbiBlbmdpbmUgKi8KK3N0YXRpYyBfX2FzeW5jX2lubGluZSBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgogZG9fYXN5bmNfeG9yKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHBhZ2UgKmRlc3QsIHN0cnVjdCBwYWdlICoqc3JjX2xpc3QsCiAJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwKIAkgICAgIGVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3MsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhc2guYyBiL2NyeXB0by9zaGFzaC5jCmluZGV4IDdhNjU5NzMuLjJjY2M4YjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGFzaC5jCisrKyBiL2NyeXB0by9zaGFzaC5jCkBAIC03Nyw2ICs3Nyw5IEBACiAJdTggYnVmW3NoYXNoX2FsaWduX2J1ZmZlcl9zaXplKHVuYWxpZ25lZF9sZW4sIGFsaWdubWFzayldCiAJCV9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7CiAKKwlpZiAodW5hbGlnbmVkX2xlbiA+IGxlbikKKwkJdW5hbGlnbmVkX2xlbiA9IGxlbjsKKwogCW1lbWNweShidWYsIGRhdGEsIHVuYWxpZ25lZF9sZW4pOwogCiAJcmV0dXJuIHNoYXNoLT51cGRhdGUoZGVzYywgYnVmLCB1bmFsaWduZWRfbGVuKSA/OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3hvci5jIGIvY3J5cHRvL3hvci5jCmluZGV4IGIyZTZkYjAuLjk5NmI2ZWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by94b3IuYworKysgYi9jcnlwdG8veG9yLmMKQEAgLTE4LDggKzE4LDggQEAKIAogI2RlZmluZSBCSF9UUkFDRSAwCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQveG9yLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS94b3IuaD4KIAogLyogVGhlIHhvciByb3V0aW5lcyB0byB1c2UuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjLmMgYi9kcml2ZXJzL2FjcGkvYWMuYwppbmRleCA5YjkxN2RhLi44OGU0MmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWMuYworKysgYi9kcml2ZXJzL2FjcGkvYWMuYwpAQCAtMTkxLDcgKzE5MSw2IEBACiAJCQkJCQkgICAgIGFjcGlfYWNfZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKIAkvKiAnc3RhdGUnIFtSXSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggNjljYmM1Ny4uM2JjYjViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC03NjAsNyArNzYwLDYgQEAKIAkJCQkJCSAgICAgYWNwaV9iYXR0ZXJ5X2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfQkFUVEVSWV9OVU1GSUxFUzsgKytpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggMTcxZmQ5MS4uYzJmMDYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMjAwLDEyICsyMDAsMTAgQEAKIAogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PREVWOwotCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJYWNwaV9kZXZpY2VfZGlyKGRldmljZSkgPSBwcm9jX21rZGlyKGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLCBlbnRyeSk7CiAJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKEFDUElfQlVUVE9OX0ZJTEVfSU5GTywKQEAgLTUyMiw3ICs1MjAsNiBAQAogCWFjcGlfYnV0dG9uX2RpciA9IHByb2NfbWtkaXIoQUNQSV9CVVRUT05fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9idXR0b25fZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX2J1dHRvbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2J1dHRvbl9kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9mYW4uYyBiL2RyaXZlcnMvYWNwaS9mYW4uYwppbmRleCBlYWFlZTE2Li44YTAyOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZmFuLmMKKysrIGIvZHJpdmVycy9hY3BpL2Zhbi5jCkBAIC0xOTMsNyArMTkzLDYgQEAKIAkJCQkJCSAgICAgYWNwaV9mYW5fZGlyKTsKIAkJaWYgKCFhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKIAkvKiAnc3RhdHVzJyBbUi9XXSAqLwpAQCAtMzQ3LDcgKzM0Niw2IEBACiAJYWNwaV9mYW5fZGlyID0gcHJvY19ta2RpcihBQ1BJX0ZBTl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX2Zhbl9kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfZmFuX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKICNlbmRpZgogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2Zhbl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA1YjM4YTAyLi4xOTZmOTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtNjYsMTEgKzY2LDE4IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlOwogCXN0cnVjdCBhY3BpX3BjaV9pZCBpZDsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCisJdTMyIG9zY19zdXBwb3J0X3NldDsJLyogX09TQyBzdGF0ZSBvZiBzdXBwb3J0IGJpdHMgKi8KKwl1MzIgb3NjX2NvbnRyb2xfc2V0OwkvKiBfT1NDIHN0YXRlIG9mIGNvbnRyb2wgYml0cyAqLworCXUzMiBvc2NfY29udHJvbF9xcnk7CS8qIHRoZSBsYXRlc3QgX09TQyBxdWVyeSByZXN1bHQgKi8KKworCXUzMiBvc2NfcXVlcmllZDoxOwkvKiBoYXMgX09TQyBjb250cm9sIGJlZW4gcXVlcmllZD8gKi8KIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9wY2lfcm9vdHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfcGNpX2RyaXZlciAqc3ViX2RyaXZlcjsKK3N0YXRpYyBERUZJTkVfTVVURVgob3NjX2xvY2spOwogCiBpbnQgYWNwaV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBhY3BpX3BjaV9kcml2ZXIgKmRyaXZlcikKIHsKQEAgLTE4NSw2ICsxOTIsMTc1IEBACiAJCX0KIH0KIAorc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLAorCQkJICAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKKworc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcGNpX3J1bl9vc2MoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICBjb25zdCB1MzIgKmNhcGJ1ZiwgdTMyICpyZXR2YWwpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCXVuaW9uIGFjcGlfb2JqZWN0IGluX3BhcmFtc1s0XTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb3V0X29iajsKKwl1MzIgZXJyb3JzOworCisJLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCisJaW5wdXQuY291bnQgPSA0OworCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CisJaW5fcGFyYW1zWzBdLnR5cGUgCQk9IEFDUElfVFlQRV9CVUZGRVI7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggCT0gMTY7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyCT0gT1NDX1VVSUQ7CisJaW5fcGFyYW1zWzFdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX3BhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlIAk9IDE7CisJaW5fcGFyYW1zWzJdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX3BhcmFtc1syXS5pbnRlZ2VyLnZhbHVlCT0gMzsKKwlpbl9wYXJhbXNbM10udHlwZQkJPSBBQ1BJX1RZUEVfQlVGRkVSOworCWluX3BhcmFtc1szXS5idWZmZXIubGVuZ3RoIAk9IDEyOworCWluX3BhcmFtc1szXS5idWZmZXIucG9pbnRlciAJPSAodTggKiljYXBidWY7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIW91dHB1dC5sZW5ndGgpCisJCXJldHVybiBBRV9OVUxMX09CSkVDVDsKKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIGV2YWx1YXRpb24gcmV0dXJuZWQgd3JvbmcgdHlwZVxuIik7CisJCXN0YXR1cyA9IEFFX1RZUEU7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KKwkvKiBOZWVkIHRvIGlnbm9yZSB0aGUgYml0MCBpbiByZXN1bHQgY29kZSAqLworCWVycm9ycyA9ICooKHUzMiAqKW91dF9vYmotPmJ1ZmZlci5wb2ludGVyKSAmIH4oMSA8PCAwKTsKKwlpZiAoZXJyb3JzKSB7CisJCWlmIChlcnJvcnMgJiBPU0NfUkVRVUVTVF9FUlJPUikKKwkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1VVSURfRVJST1IpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIFVVSURcbiIpOworCQlpZiAoZXJyb3JzICYgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIHJldmlzaW9uXG4iKTsKKwkJaWYgKGVycm9ycyAmIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUikgeworCQkJaWYgKGNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gJiBPU0NfUVVFUllfRU5BQkxFKQorCQkJCWdvdG8gb3V0X3N1Y2Nlc3M7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJGaXJtd2FyZSBkaWQgbm90IGdyYW50IHJlcXVlc3RlZCBfT1NDIGNvbnRyb2xcbiIpOworCQkJc3RhdHVzID0gQUVfU1VQUE9SVDsKKwkJCWdvdG8gb3V0X2tmcmVlOworCQl9CisJCXN0YXR1cyA9IEFFX0VSUk9SOworCQlnb3RvIG91dF9rZnJlZTsKKwl9CitvdXRfc3VjY2VzczoKKwkqcmV0dmFsID0gKigodTMyICopKG91dF9vYmotPmJ1ZmZlci5wb2ludGVyICsgOCkpOworCXN0YXR1cyA9IEFFX09LOworCitvdXRfa2ZyZWU6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BjaV9xdWVyeV9vc2Moc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QsIHUzMiBmbGFncykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIHN1cHBvcnRfc2V0LCByZXN1bHQsIGNhcGJ1ZlszXTsKKworCS8qIGRvIF9PU0MgcXVlcnkgZm9yIGFsbCBwb3NzaWJsZSBjb250cm9scyAqLworCXN1cHBvcnRfc2V0ID0gcm9vdC0+b3NjX3N1cHBvcnRfc2V0IHwgKGZsYWdzICYgT1NDX1NVUFBPUlRfTUFTS1MpOworCWNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gPSBPU0NfUVVFUllfRU5BQkxFOworCWNhcGJ1ZltPU0NfU1VQUE9SVF9UWVBFXSA9IHN1cHBvcnRfc2V0OworCWNhcGJ1ZltPU0NfQ09OVFJPTF9UWVBFXSA9IE9TQ19DT05UUk9MX01BU0tTOworCisJc3RhdHVzID0gYWNwaV9wY2lfcnVuX29zYyhyb290LT5kZXZpY2UtPmhhbmRsZSwgY2FwYnVmLCAmcmVzdWx0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJcm9vdC0+b3NjX3N1cHBvcnRfc2V0ID0gc3VwcG9ydF9zZXQ7CisJCXJvb3QtPm9zY19jb250cm9sX3FyeSA9IHJlc3VsdDsKKwkJcm9vdC0+b3NjX3F1ZXJpZWQgPSAxOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wY2lfb3NjX3N1cHBvcnQoc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QsIHUzMiBmbGFncykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgdG1wOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKHJvb3QtPmRldmljZS0+aGFuZGxlLCAiX09TQyIsICZ0bXApOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKKwltdXRleF9sb2NrKCZvc2NfbG9jayk7CisJc3RhdHVzID0gYWNwaV9wY2lfcXVlcnlfb3NjKHJvb3QsIGZsYWdzKTsKKwltdXRleF91bmxvY2soJm9zY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IGFjcGlfcGNpX3Jvb3QgKmFjcGlfcGNpX2ZpbmRfcm9vdChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyb290LCAmYWNwaV9wY2lfcm9vdHMsIG5vZGUpIHsKKwkJaWYgKHJvb3QtPmRldmljZS0+aGFuZGxlID09IGhhbmRsZSkKKwkJCXJldHVybiByb290OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQgLSBjb21taXQgcmVxdWVzdGVkIGNvbnRyb2wgdG8gRmlybXdhcmUKKyAqIEBoYW5kbGU6IGFjcGlfaGFuZGxlIGZvciB0aGUgdGFyZ2V0IEFDUEkgb2JqZWN0CisgKiBAZmxhZ3M6IGRyaXZlcidzIHJlcXVlc3RlZCBjb250cm9sIGJpdHMKKyAqCisgKiBBdHRlbXB0IHRvIHRha2UgY29udHJvbCBmcm9tIEZpcm13YXJlIG9uIHJlcXVlc3RlZCBjb250cm9sIGJpdHMuCisgKiovCithY3BpX3N0YXR1cyBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXUzMiBjb250cm9sX3JlcSwgcmVzdWx0LCBjYXBidWZbM107CisJYWNwaV9oYW5kbGUgdG1wOworCXN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290OworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9PU0MiLCAmdG1wKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwljb250cm9sX3JlcSA9IChmbGFncyAmIE9TQ19DT05UUk9MX01BU0tTKTsKKwlpZiAoIWNvbnRyb2xfcmVxKQorCQlyZXR1cm4gQUVfVFlQRTsKKworCXJvb3QgPSBhY3BpX3BjaV9maW5kX3Jvb3QoaGFuZGxlKTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiBBRV9OT1RfRVhJU1Q7CisKKwltdXRleF9sb2NrKCZvc2NfbG9jayk7CisJLyogTm8gbmVlZCB0byBldmFsdWF0ZSBfT1NDIGlmIHRoZSBjb250cm9sIHdhcyBhbHJlYWR5IGdyYW50ZWQuICovCisJaWYgKChyb290LT5vc2NfY29udHJvbF9zZXQgJiBjb250cm9sX3JlcSkgPT0gY29udHJvbF9yZXEpCisJCWdvdG8gb3V0OworCisJLyogTmVlZCB0byBxdWVyeSBjb250cm9scyBmaXJzdCBiZWZvcmUgcmVxdWVzdGluZyB0aGVtICovCisJaWYgKCFyb290LT5vc2NfcXVlcmllZCkgeworCQlzdGF0dXMgPSBhY3BpX3BjaV9xdWVyeV9vc2Mocm9vdCwgcm9vdC0+b3NjX3N1cHBvcnRfc2V0KTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJZ290byBvdXQ7CisJfQorCWlmICgocm9vdC0+b3NjX2NvbnRyb2xfcXJ5ICYgY29udHJvbF9yZXEpICE9IGNvbnRyb2xfcmVxKSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRmlybXdhcmUgZGlkIG5vdCBncmFudCByZXF1ZXN0ZWQgX09TQyBjb250cm9sXG4iKTsKKwkJc3RhdHVzID0gQUVfU1VQUE9SVDsKKwkJZ290byBvdXQ7CisJfQorCisJY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IDA7CisJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdID0gcm9vdC0+b3NjX3N1cHBvcnRfc2V0OworCWNhcGJ1ZltPU0NfQ09OVFJPTF9UWVBFXSA9IHJvb3QtPm9zY19jb250cm9sX3NldCB8IGNvbnRyb2xfcmVxOworCXN0YXR1cyA9IGFjcGlfcGNpX3J1bl9vc2MoaGFuZGxlLCBjYXBidWYsICZyZXN1bHQpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcm9vdC0+b3NjX2NvbnRyb2xfc2V0ID0gcmVzdWx0Oworb3V0OgorCW11dGV4X3VubG9jaygmb3NjX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKGFjcGlfcGNpX29zY19jb250cm9sX3NldCk7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFjcGlfcGNpX3Jvb3RfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXN1bHQgPSAwOwpAQCAtMjE3LDcgKzM5Myw3IEBACiAJICogUENJIGRvbWFpbnMsIHNvIHdlIGluZGljYXRlIHRoaXMgaW4gX09TQyBzdXBwb3J0IGNhcGFiaWxpdGllcy4KIAkgKi8KIAlmbGFncyA9IGJhc2VfZmxhZ3MgPSBPU0NfUENJX1NFR01FTlRfR1JPVVBTX1NVUFBPUlQ7Ci0JcGNpX2FjcGlfb3NjX3N1cHBvcnQoZGV2aWNlLT5oYW5kbGUsIGZsYWdzKTsKKwlhY3BpX3BjaV9vc2Nfc3VwcG9ydChyb290LCBmbGFncyk7CiAKIAkvKiAKIAkgKiBTZWdtZW50CkBAIC0zNTMsNyArNTI5LDcgQEAKIAlpZiAocGNpX21zaV9lbmFibGVkKCkpCiAJCWZsYWdzIHw9IE9TQ19NU0lfU1VQUE9SVDsKIAlpZiAoZmxhZ3MgIT0gYmFzZV9mbGFncykKLQkJcGNpX2FjcGlfb3NjX3N1cHBvcnQoZGV2aWNlLT5oYW5kbGUsIGZsYWdzKTsKKwkJYWNwaV9wY2lfb3NjX3N1cHBvcnQocm9vdCwgZmxhZ3MpOwogCiAgICAgICBlbmQ6CiAJaWYgKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCAwY2MyZmQzLi5mYTJmNzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKEFDUElfUFJPQ0VTU09SX0ZJTEVfSU5GTywKQEAgLTExMzcsNyArMTEzNiw2IEBACiAJYWNwaV9wcm9jZXNzb3JfZGlyID0gcHJvY19ta2RpcihBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3Byb2Nlc3Nvcl9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWFjcGlfcHJvY2Vzc29yX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGUgc3lzdGVtIGlzIERNSSB0YWJsZS4gSWYgeWVzLCBPU1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggNjA1MGNlNC4uNTlhZmQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtNDg4LDcgKzQ4OCw2IEBACiAJCWlmICghKmRpcikgewogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KLQkJKCpkaXIpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCS8qICdpbmZvJyBbUl0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCmluZGV4IDBjMzBlYzAuLjFiYTlkNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTE1MDYsNyArMTUwNiw2IEBACiAJCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCS8qICdzdGF0ZScgW1JdICovCkBAIC0xODc1LDcgKzE4NzQsNiBAQAogCWFjcGlfdGhlcm1hbF9kaXIgPSBwcm9jX21rZGlyKEFDUElfVEhFUk1BTF9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3RoZXJtYWxfZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX3RoZXJtYWxfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3RoZXJtYWxfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBiYjVlZDA1Li42N2NjMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMTEyNSw4ICsxMTI1LDYgQEAKIAlpZiAoIWRldmljZV9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2aWNlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qICdpbmZvJyBbUl0gKi8KIAllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoImluZm8iLCBTX0lSVUdPLCBkZXZpY2VfZGlyLAogCQkJJmFjcGlfdmlkZW9fZGV2aWNlX2luZm9fZm9wcywgYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKTsKQEAgLTE0MDMsOCArMTQwMSw2IEBACiAJaWYgKCFkZXZpY2VfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldmljZV9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKCJpbmZvIiwgU19JUlVHTywgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fYnVzX2luZm9fZm9wcywKQEAgLTIxMzEsNyArMjEyNyw2IEBACiAJYWNwaV92aWRlb19kaXIgPSBwcm9jX21rZGlyKEFDUElfVklERU9fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV92aWRlb19kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfdmlkZW9fZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3ZpZGVvX2J1cyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV4ZGlzcGxheS9LY29uZmlnIGIvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcKaW5kZXggMTRiOWQ1Zi4uYzA3ZTcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcKKysrIGIvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcKQEAgLTYsNyArNiw2IEBACiAjCiAKIG1lbnVjb25maWcgQVVYRElTUExBWQotCWRlcGVuZHMgb24gUEFSUE9SVAogCWJvb2wgIkF1eGlsaWFyeSBEaXNwbGF5IHN1cHBvcnQiCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIGF1eGlsaWFyeSBkaXNwbGF5IGRyaXZlcnMuCkBAIC0xNCw3ICsxMyw3IEBACiAKIAkgIElmIHlvdSBzYXkgTiwgYWxsIG9wdGlvbnMgaW4gdGhpcyBzdWJtZW51IHdpbGwgYmUgc2tpcHBlZCBhbmQgZGlzYWJsZWQuCiAKLWlmIEFVWERJU1BMQVkgJiYgUEFSUE9SVAoraWYgQVVYRElTUExBWQogCiBjb25maWcgS1MwMTA4CiAJdHJpc3RhdGUgIktTMDEwOCBMQ0QgQ29udHJvbGxlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZlcnMvYmFzZS9jcHUuYwppbmRleCA1YjI1N2E1Li5lNjJhNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY3B1LmMKKysrIGIvZHJpdmVycy9iYXNlL2NwdS5jCkBAIC0xMTksNyArMTE5LDcgQEAKICNkZWZpbmUJcHJpbnRfY3B1c19mdW5jKHR5cGUpIFwKIHN0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfIyN0eXBlKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCVwKIHsJCQkJCQkJCQlcCi0JcmV0dXJuIHByaW50X2NwdXNfbWFwKGJ1ZiwgJmNwdV8jI3R5cGUjI19tYXApOwkJCVwKKwlyZXR1cm4gcHJpbnRfY3B1c19tYXAoYnVmLCBjcHVfIyN0eXBlIyNfbWFzayk7CQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjdHlwZSMjX21hcCA9IAkJXAogCV9TWVNERVZfQ0xBU1NfQVRUUih0eXBlLCAwNDQ0LCBwcmludF9jcHVzXyMjdHlwZSwgTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9pb21tdS5jIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKaW5kZXggNWUwMzlkNC4uOWYwZTY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2lvbW11LmMKKysrIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpb21tdV9vcHMgPSBvcHM7CiB9CiAKLWJvb2wgaW9tbXVfZm91bmQoKQorYm9vbCBpb21tdV9mb3VuZCh2b2lkKQogewogCXJldHVybiBpb21tdV9vcHMgIT0gTlVMTDsKIH0KQEAgLTk4LDMgKzk4LDEwIEBACiAJcmV0dXJuIGlvbW11X29wcy0+aW92YV90b19waHlzKGRvbWFpbiwgaW92YSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpb21tdV9pb3ZhX3RvX3BoeXMpOworCitpbnQgaW9tbXVfZG9tYWluX2hhc19jYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJIHVuc2lnbmVkIGxvbmcgY2FwKQoreworCXJldHVybiBpb21tdV9vcHMtPmRvbWFpbl9oYXNfY2FwKGRvbWFpbiwgY2FwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlvbW11X2RvbWFpbl9oYXNfY2FwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUyNTUzNDEuLjY5YjRkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgpAQCAtMzQ5LDcgKzM1MCw4IEBACiAgKglFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSAibm9pcnEgcmVzdW1lIiBjYWxsYmFjayBmb3IgYWxsIGRldmljZXMgbWFya2VkCiAgKglhcyBEUE1fT0ZGX0lSUS4KICAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIG9ubHkgb25lIENQVSBydW5uaW5nLgorICoJTXVzdCBiZSBjYWxsZWQgdW5kZXIgZHBtX2xpc3RfbXR4LiAgRGV2aWNlIGRyaXZlcnMgc2hvdWxkIG5vdCByZWNlaXZlCisgKglpbnRlcnJ1cHRzIHdoaWxlIGl0J3MgYmVpbmcgZXhlY3V0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGRwbV9wb3dlcl91cChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0zNzAsMTQgKzM3MiwxMyBAQAogICoJZGV2aWNlX3Bvd2VyX3VwIC0gVHVybiBvbiBhbGwgZGV2aWNlcyB0aGF0IG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uCiAgKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglQb3dlciBvbiBzeXN0ZW0gZGV2aWNlcywgdGhlbiBkZXZpY2VzIHRoYXQgcmVxdWlyZWQgd2Ugc2h1dCB0aGVtIGRvd24KLSAqCXdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKglDYWxsIHRoZSAiZWFybHkiIHJlc3VtZSBoYW5kbGVycyBhbmQgZW5hYmxlIGRldmljZSBkcml2ZXJzIHRvIHJlY2VpdmUKKyAqCWludGVycnVwdHMuCiAgKi8KIHZvaWQgZGV2aWNlX3Bvd2VyX3VwKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlkcG1fcG93ZXJfdXAoc3RhdGUpOworCXJlc3VtZV9kZXZpY2VfaXJxcygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3Bvd2VyX3VwKTsKIApAQCAtNjAyLDE2ICs2MDMsMTcgQEAKICAqCWRldmljZV9wb3dlcl9kb3duIC0gU2h1dCBkb3duIHNwZWNpYWwgZGV2aWNlcy4KICAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVBvd2VyIGRvd24gZGV2aWNlcyB0aGF0IHJlcXVpcmUgaW50ZXJydXB0cyB0byBiZSBkaXNhYmxlZC4KLSAqCVRoZW4gcG93ZXIgZG93biBzeXN0ZW0gZGV2aWNlcy4KKyAqCVByZXZlbnQgZGV2aWNlIGRyaXZlcnMgZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgImxhdGUiCisgKglzdXNwZW5kIGhhbmRsZXJzLgogICoKLSAqCU11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgb25seSBvbmUgQ1BVIHJ1bm5pbmcuCisgKglNdXN0IGJlIGNhbGxlZCB1bmRlciBkcG1fbGlzdF9tdHguCiAgKi8KIGludCBkZXZpY2VfcG93ZXJfZG93bihwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCBlcnJvciA9IDA7CiAKKwlzdXNwZW5kX2RldmljZV9pcnFzKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgewogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlX25vaXJxKGRldiwgc3RhdGUpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTYyMSw3ICs2MjMsNyBAQAogCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkZfSVJROwogCX0KIAlpZiAoZXJyb3IpCi0JCWRwbV9wb3dlcl91cChyZXN1bWVfZXZlbnQoc3RhdGUpKTsKKwkJZGV2aWNlX3Bvd2VyX3VwKHJlc3VtZV9ldmVudChzdGF0ZSkpOwogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCA2MjA2YWFhLi4zMjM2YjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogCkBAIC0zNjksNiArMzcwLDEzIEBACiAJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydiwgKmVycl9kcnY7CiAJaW50IHJldDsKIAorCXByX2RlYnVnKCJDaGVja2luZyB3YWtlLXVwIGludGVycnVwdHNcbiIpOworCisJLyogUmV0dXJuIGVycm9yIGNvZGUgaWYgdGhlcmUgYXJlIGFueSB3YWtlLXVwIGludGVycnVwdHMgcGVuZGluZyAqLworCXJldCA9IGNoZWNrX3dha2V1cF9pcnFzKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXByX2RlYnVnKCJTdXNwZW5kaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCmluZGV4IDQ1YzVhMzMuLjMxNjkzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL2FvZWNtZC5jCkBAIC00LDYgKzQsNyBAQAogICogRmlsZXN5c3RlbSByZXF1ZXN0IGhhbmRsaW5nIG1ldGhvZHMKICAqLwogCisjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTI2Nyw3ICsyNjgsNyBAQAogCQl3cml0ZWJpdCA9IDA7CiAJfQogCi0JYWgtPmNtZHN0YXQgPSBXSU5fUkVBRCB8IHdyaXRlYml0IHwgZXh0Yml0OworCWFoLT5jbWRzdGF0ID0gQVRBX0NNRF9QSU9fUkVBRCB8IHdyaXRlYml0IHwgZXh0Yml0OwogCiAJLyogbWFyayBhbGwgdHJhY2tpbmcgZmllbGRzIGFuZCBsb2FkIG91dCAqLwogCWJ1Zi0+bmZyYW1lc291dCArPSAxOwpAQCAtMzYyLDEwICszNjMsMTAgQEAKIAlzd2l0Y2ggKGFoLT5jbWRzdGF0KSB7CiAJZGVmYXVsdDoKIAkJYnJlYWs7Ci0JY2FzZSBXSU5fUkVBRDoKLQljYXNlIFdJTl9SRUFEX0VYVDoKLQljYXNlIFdJTl9XUklURToKLQljYXNlIFdJTl9XUklURV9FWFQ6CisJY2FzZSBBVEFfQ01EX1BJT19SRUFEOgorCWNhc2UgQVRBX0NNRF9QSU9fUkVBRF9FWFQ6CisJY2FzZSBBVEFfQ01EX1BJT19XUklURToKKwljYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDoKIAkJcHV0X2xiYShhaCwgZi0+bGJhKTsKIAogCQluID0gZi0+YmNudDsKQEAgLTgxMiw4ICs4MTMsOCBAQAogCQkJZC0+aHRndCA9IE5VTEw7CiAJCW4gPSBhaG91dC0+c2NudCA8PCA5OwogCQlzd2l0Y2ggKGFob3V0LT5jbWRzdGF0KSB7Ci0JCWNhc2UgV0lOX1JFQUQ6Ci0JCWNhc2UgV0lOX1JFQURfRVhUOgorCQljYXNlIEFUQV9DTURfUElPX1JFQUQ6CisJCWNhc2UgQVRBX0NNRF9QSU9fUkVBRF9FWFQ6CiAJCQlpZiAoc2tiLT5sZW4gLSBzaXplb2YgKmhpbiAtIHNpemVvZiAqYWhpbiA8IG4pIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImFvZTogJXMuICBza2ItPmxlbj0lZCBuZWVkPSVsZFxuIiwKQEAgLTgyMyw4ICs4MjQsOCBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJCW1lbWNweShmLT5idWZhZGRyLCBhaGluKzEsIG4pOwotCQljYXNlIFdJTl9XUklURToKLQkJY2FzZSBXSU5fV1JJVEVfRVhUOgorCQljYXNlIEFUQV9DTURfUElPX1dSSVRFOgorCQljYXNlIEFUQV9DTURfUElPX1dSSVRFX0VYVDoKIAkJCWlmcCA9IGdldGlmKHQsIHNrYi0+ZGV2KTsKIAkJCWlmIChpZnApIHsKIAkJCQlpZnAtPmxvc3QgPSAwOwpAQCAtODM4LDcgKzgzOSw3IEBACiAJCQkJZ290byB4bWl0OwogCQkJfQogCQkJYnJlYWs7Ci0JCWNhc2UgV0lOX0lERU5USUZZOgorCQljYXNlIEFUQV9DTURfSURfQVRBOgogCQkJaWYgKHNrYi0+bGVuIC0gc2l6ZW9mICpoaW4gLSBzaXplb2YgKmFoaW4gPCA1MTIpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJCSJhb2U6IHJ1bnQgZGF0YSBzaXplIGluIGF0YWlkLiAgc2tiLT5sZW49JWRcbiIsCkBAIC05MTQsNyArOTE1LDcgQEAKIAogCS8qIHNldCB1cCBhdGEgaGVhZGVyICovCiAJYWgtPnNjbnQgPSAxOwotCWFoLT5jbWRzdGF0ID0gV0lOX0lERU5USUZZOworCWFoLT5jbWRzdGF0ID0gQVRBX0NNRF9JRF9BVEE7CiAJYWgtPmxiYTMgPSAweGEwOwogCiAJc2tiLT5kZXYgPSB0LT5pZnAtPm5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYzJjOTVlNi4uMTMwMGRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0xNzcsNiArMTc3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JLyogZm9yIGludmFsaWRhdGVfYnVmZmVycygpICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIApAQCAtNDU5Nyw2ICs0NTk4LDEzIEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiZmQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorLyogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGdldCB1c2VkIG90aGVyIHRoYW4gZm9yIG1vZHVsZSBpbmZvcm1hdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkIGZsb3BweV9wbnBpZHNbXSA9IHsKKwl7ICJQTlAwNzAwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBmbG9wcHlfcG5waWRzKTsKKwogI2Vsc2UKIAogX19zZXR1cCgiZmxvcHB5PSIsIGZsb3BweV9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2hkLmMgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKaW5kZXggNDgyYzBjNC4uM2MxMWYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9oZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svaGQuYwpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKKyNkZWZpbmUgSERfSVJRIDE0CisKICNkZWZpbmUgUkVBTExZX1NMT1dfSU8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDI2MjFlZDIuLjQwYjE3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC0xMTkyLDYgKzExOTIsMzAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGxvb3Bfc2V0X2NhcGFjaXR5KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJaW50IGVycjsKKwlzZWN0b3JfdCBzZWM7CisJbG9mZl90IHN6OworCisJZXJyID0gLUVOWElPOworCWlmICh1bmxpa2VseShsby0+bG9fc3RhdGUgIT0gTG9fYm91bmQpKQorCQlnb3RvIG91dDsKKwllcnIgPSBmaWd1cmVfbG9vcF9zaXplKGxvKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byBvdXQ7CisJc2VjID0gZ2V0X2NhcGFjaXR5KGxvLT5sb19kaXNrKTsKKwkvKiB0aGUgd2lkdGggb2Ygc2VjdG9yX3QgbWF5IGJlIG5hcnJvdyBmb3IgYml0LXNoaWZ0ICovCisJc3ogPSBzZWM7CisJc3ogPDw9IDk7CisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWJkX3NldF9zaXplKGJkZXYsIHN6KTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKworIG91dDoKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGxvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTEyMjQsNiArMTI0OCwxMSBAQAogCWNhc2UgTE9PUF9HRVRfU1RBVFVTNjQ6CiAJCWVyciA9IGxvb3BfZ2V0X3N0YXR1czY0KGxvLCAoc3RydWN0IGxvb3BfaW5mbzY0IF9fdXNlciAqKSBhcmcpOwogCQlicmVhazsKKwljYXNlIExPT1BfU0VUX0NBUEFDSVRZOgorCQllcnIgPSAtRVBFUk07CisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSB8fCBjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJZXJyID0gbG9vcF9zZXRfY2FwYWNpdHkobG8sIGJkZXYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSBsby0+aW9jdGwgPyBsby0+aW9jdGwobG8sIGNtZCwgYXJnKSA6IC1FSU5WQUw7CiAJfQpAQCAtMTM3MSw2ICsxNDAwLDcgQEAKIAkJCWxvLCAoc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICopIGFyZyk7CiAJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJCWJyZWFrOworCWNhc2UgTE9PUF9TRVRfQ0FQQUNJVFk6CiAJY2FzZSBMT09QX0NMUl9GRDoKIAljYXNlIExPT1BfR0VUX1NUQVRVUzY0OgogCWNhc2UgTE9PUF9TRVRfU1RBVFVTNjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCA4Mjk5ZTJkLi40ZDZkZTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBOb3RlIHRoYXQgeW91IGNhbiBub3Qgc3dhcCBvdmVyIHRoaXMgdGhpbmcsIHlldC4gU2VlbXMgdG8gd29yayBidXQKICAqIGRlYWRsb2NrcyBzb21ldGltZXMgLSB5b3UgY2FuIG5vdCBzd2FwIG92ZXIgVENQIGluIGdlbmVyYWwuCiAgKiAKLSAqIENvcHlyaWdodCAxOTk3LTIwMDAgUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CisgKiBDb3B5cmlnaHQgMTk5Ny0yMDAwLCAyMDA4IFBhdmVsIE1hY2hlayA8cGF2ZWxAc3VzZS5jej4KICAqIFBhcnRzIGNvcHlyaWdodCAyMDAxIFN0ZXZlbiBXaGl0ZWhvdXNlIDxzdGV2ZUBjaHlnd3luLmNvbT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIuCkBAIC0yNzYsNyArMjc2LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgotCXJldHVybiAxOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgc3RydWN0IHJlcXVlc3QgKm5iZF9maW5kX3JlcXVlc3Qoc3RydWN0IG5iZF9kZXZpY2UgKmxvLApAQCAtNDY3LDkgKzQ2Nyw3IEBACiAJCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBBdHRlbXB0ZWQgc2VuZCBvbiBjbG9zZWQgc29ja2V0XG4iLAogCQkgICAgICAgbG8tPmRpc2stPmRpc2tfbmFtZSk7Ci0JCXJlcS0+ZXJyb3JzKys7Ci0JCW5iZF9lbmRfcmVxdWVzdChyZXEpOwotCQlyZXR1cm47CisJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAogCWxvLT5hY3RpdmVfcmVxID0gcmVxOwpAQCAtNTMxLDcgKzUyOSw3IEBACiAgKiAgIHsgcHJpbnRrKCAiV2FybmluZzogSWdub3JpbmcgcmVzdWx0IVxuIik7IG5iZF9lbmRfcmVxdWVzdCggcmVxICk7IH0KICAqLwogCi1zdGF0aWMgdm9pZCBkb19uYmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCitzdGF0aWMgdm9pZCBkb19uYmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCQpAQCAtNTY4LDI3ICs1NjYsMTcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKLQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggdHhfbG9jayBoZWxkICovCisKK3N0YXRpYyBpbnQgX19uYmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IG5iZF9kZXZpY2UgKmxvLAorCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IG5iZF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCWludCBlcnJvcjsKLQlzdHJ1Y3QgcmVxdWVzdCBzcmVxIDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKLQotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCUJVR19PTihsby0+bWFnaWMgIT0gTE9fTUFHSUMpOwotCi0JLyogQW55b25lIGNhcGFibGUgb2YgdGhpcyBzeXNjYWxsIGNhbiBkbyAqcmVhbCBiYWQqIHRoaW5ncyAqLwotCWRwcmludGsoREJHX0lPQ1RMLCAiJXM6IG5iZF9pb2N0bCBjbWQ9JXMoMHgleCkgYXJnPSVsdVxuIiwKLQkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIGlvY3RsX2NtZF90b19hc2NpaShjbWQpLCBjbWQsIGFyZyk7Ci0KIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTkJEX0RJU0NPTk5FQ1Q6CisJY2FzZSBOQkRfRElTQ09OTkVDVDogeworCQlzdHJ1Y3QgcmVxdWVzdCBzcmVxOworCiAJICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogTkJEX0RJU0NPTk5FQ1RcbiIsIGxvLT5kaXNrLT5kaXNrX25hbWUpOworCiAJCWJsa19ycV9pbml0KE5VTEwsICZzcmVxKTsKIAkJc3JlcS5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJCW5iZF9jbWQoJnNyZXEpID0gTkJEX0NNRF9ESVNDOwpAQCAtNTk5LDI5ICs1ODcsMjkgQEAKIAkJICovCiAJCXNyZXEuc2VjdG9yID0gMDsKIAkJc3JlcS5ucl9zZWN0b3JzID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWxvLT5zb2NrKQorCQlpZiAoIWxvLT5zb2NrKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKLSAgICAgICAgICAgICAgICBuYmRfc2VuZF9yZXEobG8sICZzcmVxKTsKLQkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisJCW5iZF9zZW5kX3JlcShsbywgJnNyZXEpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOworCX0KICAKLQljYXNlIE5CRF9DTEVBUl9TT0NLOgotCQllcnJvciA9IDA7Ci0JCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKKwljYXNlIE5CRF9DTEVBUl9TT0NLOiB7CisJCXN0cnVjdCBmaWxlICpmaWxlOworCiAJCWxvLT5zb2NrID0gTlVMTDsKLQkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CiAJCWZpbGUgPSBsby0+ZmlsZTsKIAkJbG8tPmZpbGUgPSBOVUxMOwogCQluYmRfY2xlYXJfcXVlKGxvKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZsby0+cXVldWVfaGVhZCkpOwogCQlpZiAoZmlsZSkKIAkJCWZwdXQoZmlsZSk7Ci0JCXJldHVybiBlcnJvcjsKLQljYXNlIE5CRF9TRVRfU09DSzoKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBOQkRfU0VUX1NPQ0s6IHsKKwkJc3RydWN0IGZpbGUgKmZpbGU7CiAJCWlmIChsby0+ZmlsZSkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCWVycm9yID0gLUVJTlZBTDsKIAkJZmlsZSA9IGZnZXQoYXJnKTsKIAkJaWYgKGZpbGUpIHsKIAkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtNjMwLDEyICs2MTgsMTQgQEAKIAkJCQlsby0+c29jayA9IFNPQ0tFVF9JKGlub2RlKTsKIAkJCQlpZiAobWF4X3BhcnQgPiAwKQogCQkJCQliZGV2LT5iZF9pbnZhbGlkYXRlZCA9IDE7Ci0JCQkJZXJyb3IgPSAwOworCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsKIAkJCQlmcHV0KGZpbGUpOwogCQkJfQogCQl9Ci0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2FzZSBOQkRfU0VUX0JMS1NJWkU6CiAJCWxvLT5ibGtzaXplID0gYXJnOwogCQlsby0+Ynl0ZXNpemUgJj0gfihsby0+Ymxrc2l6ZS0xKTsKQEAgLTY0MywzNSArNjMzLDUwIEBACiAJCXNldF9ibG9ja3NpemUoYmRldiwgbG8tPmJsa3NpemUpOwogCQlzZXRfY2FwYWNpdHkobG8tPmRpc2ssIGxvLT5ieXRlc2l6ZSA+PiA5KTsKIAkJcmV0dXJuIDA7CisKIAljYXNlIE5CRF9TRVRfU0laRToKIAkJbG8tPmJ5dGVzaXplID0gYXJnICYgfihsby0+Ymxrc2l6ZS0xKTsKIAkJYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IGxvLT5ieXRlc2l6ZTsKIAkJc2V0X2Jsb2Nrc2l6ZShiZGV2LCBsby0+Ymxrc2l6ZSk7CiAJCXNldF9jYXBhY2l0eShsby0+ZGlzaywgbG8tPmJ5dGVzaXplID4+IDkpOwogCQlyZXR1cm4gMDsKKwogCWNhc2UgTkJEX1NFVF9USU1FT1VUOgogCQlsby0+eG1pdF90aW1lb3V0ID0gYXJnICogSFo7CiAJCXJldHVybiAwOworCiAJY2FzZSBOQkRfU0VUX1NJWkVfQkxPQ0tTOgogCQlsby0+Ynl0ZXNpemUgPSAoKHU2NCkgYXJnKSAqIGxvLT5ibGtzaXplOwogCQliZGV2LT5iZF9pbm9kZS0+aV9zaXplID0gbG8tPmJ5dGVzaXplOwogCQlzZXRfYmxvY2tzaXplKGJkZXYsIGxvLT5ibGtzaXplKTsKIAkJc2V0X2NhcGFjaXR5KGxvLT5kaXNrLCBsby0+Ynl0ZXNpemUgPj4gOSk7CiAJCXJldHVybiAwOwotCWNhc2UgTkJEX0RPX0lUOgorCisJY2FzZSBOQkRfRE9fSVQ6IHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisJCXN0cnVjdCBmaWxlICpmaWxlOworCQlpbnQgZXJyb3I7CisKIAkJaWYgKGxvLT5waWQpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlpZiAoIWxvLT5maWxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisKIAkJdGhyZWFkID0ga3RocmVhZF9jcmVhdGUobmJkX3RocmVhZCwgbG8sIGxvLT5kaXNrLT5kaXNrX25hbWUpOwotCQlpZiAoSVNfRVJSKHRocmVhZCkpCisJCWlmIChJU19FUlIodGhyZWFkKSkgeworCQkJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCQkJcmV0dXJuIFBUUl9FUlIodGhyZWFkKTsKKwkJfQogCQl3YWtlX3VwX3Byb2Nlc3ModGhyZWFkKTsKIAkJZXJyb3IgPSBuYmRfZG9faXQobG8pOwogCQlrdGhyZWFkX3N0b3AodGhyZWFkKTsKKworCQltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJc29ja19zaHV0ZG93bihsbywgMSk7CisJCXNvY2tfc2h1dGRvd24obG8sIDApOwogCQlmaWxlID0gbG8tPmZpbGU7CiAJCWxvLT5maWxlID0gTlVMTDsKIAkJbmJkX2NsZWFyX3F1ZShsbyk7CkBAIC02ODQsNiArNjg5LDggQEAKIAkJaWYgKG1heF9wYXJ0ID4gMCkKIAkJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKIAkJcmV0dXJuIGxvLT5oYXJkZXJyb3I7CisJfQorCiAJY2FzZSBOQkRfQ0xFQVJfUVVFOgogCQkvKgogCQkgKiBUaGlzIGlzIGZvciBjb21wYXRpYmlsaXR5IG9ubHkuICBUaGUgcXVldWUgaXMgYWx3YXlzIGNsZWFyZWQKQEAgLTY5MSw2ICs2OTgsNyBAQAogCQkgKi8KIAkJQlVHX09OKCFsby0+c29jayAmJiAhbGlzdF9lbXB0eSgmbG8tPnF1ZXVlX2hlYWQpKTsKIAkJcmV0dXJuIDA7CisKIAljYXNlIE5CRF9QUklOVF9ERUJVRzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5leHQgPSAlcCwgcHJldiA9ICVwLCBoZWFkID0gJXBcbiIsCiAJCQliZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUsCkBAIC02OTgsNyArNzA2LDI5IEBACiAJCQkmbG8tPnF1ZXVlX2hlYWQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBpbnQgbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbmJkX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycm9yOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJQlVHX09OKGxvLT5tYWdpYyAhPSBMT19NQUdJQyk7CisKKwkvKiBBbnlvbmUgY2FwYWJsZSBvZiB0aGlzIHN5c2NhbGwgY2FuIGRvICpyZWFsIGJhZCogdGhpbmdzICovCisJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAorCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKKworCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKKwllcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIGxvLCBjbWQsIGFyZyk7CisJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wczN2cmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwppbmRleCAzOTNlZDY3Li44ZWRkZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYwpAQCAtNTUxLDggKzU1MSw2IEBACiAJCWRldl93YXJuKCZkZXYtPmNvcmUsICJmYWlsZWQgdG8gY3JlYXRlIC9wcm9jIGVudHJ5XG4iKTsKIAkJcmV0dXJuOwogCX0KLQotCXBkZS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwZGUtPmRhdGEgPSBwcml2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IDExOWJlMzQuLjZjY2NkYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpZiBkZWZpbmVkKENPTkZJR19PRikKQEAgLTIwOCw3ICsyMDksNyBAQAogCXN0cnVjdCBnZW5kaXNrICpnZDsKIAogCS8qIEluc2VydGVkIENGIGNhcmQgcGFyYW1ldGVycyAqLwotCXN0cnVjdCBoZF9kcml2ZWlkIGNmX2lkOworCXUxNiBjZl9pZFtBVEFfSURfV09SRFNdOwogfTsKIAogc3RhdGljIGludCBhY2VfbWFqb3I7CkBAIC00MDIsMjEgKzQwMywxNCBAQAogCQkgYWNlX2luMzIoYWNlLCBBQ0VfQ0ZHTEJBKSwgYWNlX2luKGFjZSwgQUNFX0ZBVFNUQVQpKTsKIH0KIAotdm9pZCBhY2VfZml4X2RyaXZlaWQoc3RydWN0IGhkX2RyaXZlaWQgKmlkKQordm9pZCBhY2VfZml4X2RyaXZlaWQodTE2ICppZCkKIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgKmJ1ZiA9ICh2b2lkICopaWQ7CiAJaW50IGk7CiAKIAkvKiBBbGwgaGFsZiB3b3JkcyBoYXZlIHdyb25nIGJ5dGUgb3JkZXI7IHN3YXAgdGhlIGJ5dGVzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCk7IGkgKz0gMiwgYnVmKyspCi0JCSpidWYgPSBsZTE2X3RvX2NwdSgqYnVmKTsKLQotCS8qIFNvbWUgb2YgdGhlIGRhdGEgdmFsdWVzIGFyZSAzMmJpdDsgc3dhcCB0aGUgaGFsZiB3b3JkcyAgKi8KLQlpZC0+bGJhX2NhcGFjaXR5ID0gKChpZC0+bGJhX2NhcGFjaXR5ID4+IDE2KSAmIDB4MDAwMEZGRkYpIHwKLQkgICAgKChpZC0+bGJhX2NhcGFjaXR5IDw8IDE2KSAmIDB4RkZGRjAwMDApOwotCWlkLT5zcGcgPSAoKGlkLT5zcGcgPj4gMTYpICYgMHgwMDAwRkZGRikgfAotCSAgICAoKGlkLT5zcGcgPDwgMTYpICYgMHhGRkZGMDAwMCk7CisJZm9yIChpID0gMDsgaSA8IEFUQV9JRF9XT1JEUzsgaSsrLCBpZCsrKQorCQkqaWQgPSBsZTE2X3RvX2NwdSgqaWQpOwogI2VuZGlmCiB9CiAKQEAgLTYxNCw3ICs2MDgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgQUNFX0ZTTV9TVEFURV9JREVOVElGWV9DT01QTEVURToKLQkJYWNlX2ZpeF9kcml2ZWlkKCZhY2UtPmNmX2lkKTsKKwkJYWNlX2ZpeF9kcml2ZWlkKCZhY2UtPmNmX2lkWzBdKTsKIAkJYWNlX2R1bXBfbWVtKCZhY2UtPmNmX2lkLCA1MTIpOwkvKiBEZWJ1ZzogRHVtcCBvdXQgZGlzayBJRCAqLwogCiAJCWlmIChhY2UtPmRhdGFfcmVzdWx0KSB7CkBAIC02MjcsOSArNjIxLDEwIEBACiAJCQlhY2UtPm1lZGlhX2NoYW5nZSA9IDA7CiAKIAkJCS8qIFJlY29yZCBkaXNrIHBhcmFtZXRlcnMgKi8KLQkJCXNldF9jYXBhY2l0eShhY2UtPmdkLCBhY2UtPmNmX2lkLmxiYV9jYXBhY2l0eSk7CisJCQlzZXRfY2FwYWNpdHkoYWNlLT5nZCwKKwkJCQlhdGFfaWRfdTMyKCZhY2UtPmNmX2lkLCBBVEFfSURfTEJBX0NBUEFDSVRZKSk7CiAJCQlkZXZfaW5mbyhhY2UtPmRldiwgImNhcGFjaXR5OiAlaSBzZWN0b3JzXG4iLAotCQkJCSBhY2UtPmNmX2lkLmxiYV9jYXBhY2l0eSk7CisJCQkJYXRhX2lkX3UzMigmYWNlLT5jZl9pZCwgQVRBX0lEX0xCQV9DQVBBQ0lUWSkpOwogCQl9CiAKIAkJLyogV2UncmUgZG9uZSwgZHJvcCB0byBJRExFIHN0YXRlIGFuZCBub3RpZnkgd2FpdGVycyAqLwpAQCAtOTI4LDEyICs5MjMsMTMgQEAKIHN0YXRpYyBpbnQgYWNlX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKIHsKIAlzdHJ1Y3QgYWNlX2RldmljZSAqYWNlID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXUxNiAqY2ZfaWQgPSAmYWNlLT5jZl9pZFswXTsKIAogCWRldl9kYmcoYWNlLT5kZXYsICJhY2VfZ2V0Z2VvKClcbiIpOwogCi0JZ2VvLT5oZWFkcyA9IGFjZS0+Y2ZfaWQuaGVhZHM7Ci0JZ2VvLT5zZWN0b3JzID0gYWNlLT5jZl9pZC5zZWN0b3JzOwotCWdlby0+Y3lsaW5kZXJzID0gYWNlLT5jZl9pZC5jeWxzOworCWdlby0+aGVhZHMJPSBjZl9pZFtBVEFfSURfSEVBRFNdOworCWdlby0+c2VjdG9ycwk9IGNmX2lkW0FUQV9JRF9TRUNUT1JTXTsKKwlnZW8tPmN5bGluZGVycwk9IGNmX2lkW0FUQV9JRF9DWUxTXTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCmluZGV4IGE1ODg2OWUuLmZkM2ViZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYworKysgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTE4MjUsMTQgKzE4MjYsMTMgQEAKICAqIC9wcm9jIGZzIHJvdXRpbmVzLi4uLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmVfaW5mbyhjaGFyICpidWYsIHN0cnVjdCBzZXJpYWxfc3RhdGUgKnN0YXRlKQorc3RhdGljIGlubGluZSB2b2lkIGxpbmVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzZXJpYWxfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCBhc3luY19zdHJ1Y3QgKmluZm8gPSBzdGF0ZS0+aW5mbywgc2NyX2luZm87CiAJY2hhcglzdGF0X2J1ZlszMF0sIGNvbnRyb2wsIHN0YXR1czsKLQlpbnQJcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkOiB1YXJ0OmFtaWdhX2J1aWx0aW4iLHN0YXRlLT5saW5lKTsKKwlzZXFfcHJpbnRmKG0sICIlZDogdWFydDphbWlnYV9idWlsdGluIixzdGF0ZS0+bGluZSk7CiAKIAkvKgogCSAqIEZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgUlMtMjMyIGxpbmVzCkBAIC0xODY0LDU1ICsxODY0LDQ5IEBACiAJCXN0cmNhdChzdGF0X2J1ZiwgInxDRCIpOwogCiAJaWYgKGluZm8tPnF1b3QpIHsKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBiYXVkOiVkIiwKLQkJCSAgICAgICBzdGF0ZS0+YmF1ZF9iYXNlIC8gaW5mby0+cXVvdCk7CisJCXNlcV9wcmludGYobSwgIiBiYXVkOiVkIiwgc3RhdGUtPmJhdWRfYmFzZSAvIGluZm8tPnF1b3QpOwogCX0KIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHg6JWQgcng6JWQiLAotCQkgICAgICBzdGF0ZS0+aWNvdW50LnR4LCBzdGF0ZS0+aWNvdW50LnJ4KTsKKwlzZXFfcHJpbnRmKG0sICIgdHg6JWQgcng6JWQiLCBzdGF0ZS0+aWNvdW50LnR4LCBzdGF0ZS0+aWNvdW50LnJ4KTsKIAogCWlmIChzdGF0ZS0+aWNvdW50LmZyYW1lKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGZlOiVkIiwgc3RhdGUtPmljb3VudC5mcmFtZSk7CisJCXNlcV9wcmludGYobSwgIiBmZTolZCIsIHN0YXRlLT5pY291bnQuZnJhbWUpOwogCiAJaWYgKHN0YXRlLT5pY291bnQucGFyaXR5KQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHBlOiVkIiwgc3RhdGUtPmljb3VudC5wYXJpdHkpOworCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLCBzdGF0ZS0+aWNvdW50LnBhcml0eSk7CiAKIAlpZiAoc3RhdGUtPmljb3VudC5icmspCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgYnJrOiVkIiwgc3RhdGUtPmljb3VudC5icmspOworCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgc3RhdGUtPmljb3VudC5icmspOwogCiAJaWYgKHN0YXRlLT5pY291bnQub3ZlcnJ1bikKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBvZTolZCIsIHN0YXRlLT5pY291bnQub3ZlcnJ1bik7CisJCXNlcV9wcmludGYobSwgIiBvZTolZCIsIHN0YXRlLT5pY291bnQub3ZlcnJ1bik7CiAKIAkvKgogCSAqIExhc3QgdGhpbmcgaXMgdGhlIFJTLTIzMiBzdGF0dXMgbGluZXMKIAkgKi8KLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKLQlyZXR1cm4gcmV0OworCXNlcV9wcmludGYobSwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CiB9CiAKLXN0YXRpYyBpbnQgcnNfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCQlpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgcnNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMCwgbDsKLQlvZmZfdAliZWdpbiA9IDA7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlLCAic2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBzZXJpYWxfdmVyc2lvbik7Ci0JbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCAmcnNfdGFibGVbMF0pOwotCWxlbiArPSBsOwotCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JICBnb3RvIGRvbmU7Ci0JaWYgKGxlbitiZWdpbiA8IG9mZikgewotCSAgYmVnaW4gKz0gbGVuOwotCSAgbGVuID0gMDsKLQl9Ci0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJc2VxX3ByaW50ZihtLCAic2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBzZXJpYWxfdmVyc2lvbik7CisJbGluZV9pbmZvKG0sICZyc190YWJsZVswXSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcnNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCByc19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHJzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogcnNfaW5pdCgpIGFuZCBmcmllbmRzCkBAIC0xOTUxLDkgKzE5NDUsOSBAQAogCS5icmVha19jdGwgPSByc19icmVhaywKIAkuc2VuZF94Y2hhciA9IHJzX3NlbmRfeGNoYXIsCiAJLndhaXRfdW50aWxfc2VudCA9IHJzX3dhaXRfdW50aWxfc2VudCwKLQkucmVhZF9wcm9jID0gcnNfcmVhZF9wcm9jLAogCS50aW9jbWdldCA9IHJzX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHJzX3Rpb2Ntc2V0LAorCS5wcm9jX2ZvcHMgPSAmcnNfcHJvY19mb3BzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggNmE1OWY3Mi4uMjcyZGIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTY1Nyw2ICs2NTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiBzdGF0aWMgdm9pZCBjeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGN5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CkBAIC04NjgsOCArODY5LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBkZXRlY3RfaXNhX2lycSh2b2lkIF9faW9tZW0gKik7CiAjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLwogCi1zdGF0aWMgaW50IGN5Y2xhZGVzX2dldF9wcm9jX2luZm8oY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKLQogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKIHN0YXRpYyB2b2lkIGN5el9wb2xsKHVuc2lnbmVkIGxvbmcpOwogCkBAIC01MjE2LDMxICs1MjE1LDIyIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQKLWN5Y2xhZGVzX2dldF9wcm9jX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwKLQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGN5Y2xhZGVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CiAJdW5zaWduZWQgaW50IGksIGo7Ci0JaW50IGxlbiA9IDA7Ci0Jb2ZmX3QgYmVnaW4gPSAwOwotCW9mZl90IHBvcyA9IDA7Ci0JaW50IHNpemU7CiAJX191MzIgY3VyX2ppZnMgPSBqaWZmaWVzOwogCi0Jc2l6ZSA9IHNwcmludGYoYnVmLCAiRGV2IFRpbWVPcGVuICAgQnl0ZXNPdXQgIElkbGVPdXQgICAgQnl0ZXNJbiAgICIKKwlzZXFfcHV0cyhtLCAiRGV2IFRpbWVPcGVuICAgQnl0ZXNPdXQgIElkbGVPdXQgICAgQnl0ZXNJbiAgICIKIAkJCSJJZGxlSW4gIE92ZXJydW5zICBMZGlzY1xuIik7CiAKLQlwb3MgKz0gc2l6ZTsKLQlsZW4gKz0gc2l6ZTsKLQogCS8qIE91dHB1dCBvbmUgbGluZSBmb3IgZWFjaCBrbm93biBwb3J0ICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCBjeV9jYXJkW2ldLm5wb3J0czsgaisrKSB7CiAJCQlpbmZvID0gJmN5X2NhcmRbaV0ucG9ydHNbal07CiAKIAkJCWlmIChpbmZvLT5wb3J0LmNvdW50KQotCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgorCQkJCXNlcV9wcmludGYobSwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgogCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsIGluZm8tPmxpbmUsCiAJCQkJCShjdXJfamlmcyAtIGluZm8tPmlkbGVfc3RhdHMuaW5fdXNlKSAvCiAJCQkJCUhaLCBpbmZvLT5pZGxlX3N0YXRzLnhtaXRfYnl0ZXMsCkBAIC01MjUxLDMwICs1MjQxLDI2IEBACiAJCQkJCS8qIEZJWE1FOiBkb3VibGUgY2hlY2sgbG9ja2luZyAqLwogCQkJCQkobG9uZylpbmZvLT5wb3J0LnR0eS0+bGRpc2Mub3BzLT5udW0pOwogCQkJZWxzZQotCQkJCXNpemUgPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgorCQkJCXNlcV9wcmludGYobSwgIiUzZCAlOGx1ICUxMGx1ICU4bHUgIgogCQkJCQkiJTEwbHUgJThsdSAlOWx1ICU2bGRcbiIsCiAJCQkJCWluZm8tPmxpbmUsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwsIDBMKTsKLQkJCWxlbiArPSBzaXplOwotCQkJcG9zID0gYmVnaW4gKyBsZW47Ci0KLQkJCWlmIChwb3MgPCBvZmZzZXQpIHsKLQkJCQlsZW4gPSAwOwotCQkJCWJlZ2luID0gcG9zOwotCQkJfQotCQkJaWYgKHBvcyA+IG9mZnNldCArIGxlbmd0aCkKLQkJCQlnb3RvIGRvbmU7CiAJCX0KLQkqZW9mID0gMTsKLWRvbmU6Ci0JKnN0YXJ0ID0gYnVmICsgKG9mZnNldCAtIGJlZ2luKTsJLyogU3RhcnQgb2Ygd2FudGVkIGRhdGEgKi8KLQlsZW4gLT0gKG9mZnNldCAtIGJlZ2luKTsJLyogU3RhcnQgc2xvcCAqLwotCWlmIChsZW4gPiBsZW5ndGgpCi0JCWxlbiA9IGxlbmd0aDsJLyogRW5kaW5nIHNsb3AgKi8KLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGN5Y2xhZGVzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY3ljbGFkZXNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3ljbGFkZXNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjeWNsYWRlc19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qIFRoZSBzZXJpYWwgZHJpdmVyIGJvb3QtdGltZSBpbml0aWFsaXphdGlvbiBjb2RlIQogICAgIEhhcmR3YXJlIEkvTyBwb3J0cyBhcmUgbWFwcGVkIHRvIGNoYXJhY3RlciBzcGVjaWFsIGRldmljZXMgb24gYQogICAgIGZpcnN0IGZvdW5kLCBmaXJzdCBhbGxvY2F0ZWQgbWFubmVyLiAgVGhhdCBpcywgdGhpcyBjb2RlIHNlYXJjaGVzCkBAIC01MzExLDkgKzUyOTcsOSBAQAogCS5oYW5ndXAgPSBjeV9oYW5ndXAsCiAJLmJyZWFrX2N0bCA9IGN5X2JyZWFrLAogCS53YWl0X3VudGlsX3NlbnQgPSBjeV93YWl0X3VudGlsX3NlbnQsCi0JLnJlYWRfcHJvYyA9IGN5Y2xhZGVzX2dldF9wcm9jX2luZm8sCiAJLnRpb2NtZ2V0ID0gY3lfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gY3lfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZjeWNsYWRlc19wcm9jX2ZvcHMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjeV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHBldC5jIGIvZHJpdmVycy9jaGFyL2hwZXQuYwppbmRleCAzMmI4YmJmLi41MGRmYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHBldC5jCisrKyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKQEAgLTcxMyw3ICs3MTMsNyBAQAogICovCiAjZGVmaW5lCVRJQ0tfQ0FMSUJSQVRFCSgxMDAwVUwpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfY2FsaWJyYXRlKHN0cnVjdCBocGV0cyAqaHBldHApCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2hwZXRfY2FsaWJyYXRlKHN0cnVjdCBocGV0cyAqaHBldHApCiB7CiAJc3RydWN0IGhwZXRfdGltZXIgX19pb21lbSAqdGltZXIgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgdCwgbSwgY291bnQsIGksIGZsYWdzLCBzdGFydDsKQEAgLTc1MCw2ICs3NTAsMjYgQEAKIAlyZXR1cm4gKG0gLSBzdGFydCkgLyBpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBocGV0X2NhbGlicmF0ZShzdHJ1Y3QgaHBldHMgKmhwZXRwKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gLTE7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkvKgorCSAqIFRyeSB0byBjYWxpYnJhdGUgdW50aWwgcmV0dXJuIHZhbHVlIGJlY29tZXMgc3RhYmxlIHNtYWxsIHZhbHVlLgorCSAqIElmIFNNSSBpbnRlcnJ1cHRpb24gb2NjdXJzIGluIGNhbGlicmF0aW9uIGxvb3AsIHRoZSByZXR1cm4gdmFsdWUKKwkgKiB3aWxsIGJlIGJpZy4gVGhpcyBhdm9pZHMgaXRzIGltcGFjdC4KKwkgKi8KKwlmb3IgKCA7IDsgKSB7CisJCXRtcCA9IF9faHBldF9jYWxpYnJhdGUoaHBldHApOworCQlpZiAocmV0IDw9IHRtcCkKKwkJCWJyZWFrOworCQlyZXQgPSB0bXA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogaW50IGhwZXRfYWxsb2Moc3RydWN0IGhwZXRfZGF0YSAqaGRwKQogewogCXU2NCBjYXAsIG1jZmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKaW5kZXggMTBhZDQxYi4uZGNkMzUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpAQCAtOTAsMTAgKzkwLDMwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHJlc291cmNlICpyZXMsICptZW07CiAJaW50IHJldDsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwkJCQkgcGRldi0+bmFtZSk7CisJaWYgKG1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG1lbSk7CisKIAl0aW1lcmlvbWVtX3JuZ19kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwl0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzID0gaW9yZW1hcChyZXMtPnN0YXJ0LAorCQkJCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCF0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCiAJaWYgKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCAhPSAwCiAJCSYmIHVzZWNzX3RvX2ppZmZpZXModGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKSA+IDApIHsKIAkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CkBAIC0xMDQsMjMgKzEyNCwzNCBAQAogCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOwogCiAJcmV0ID0gaHdybmdfcmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnaXN0ZXI7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiMzJiaXRzIGZyb20gMHglcCBAICVkdXNcbiIsCiAJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzLAogCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKIAogCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSByZWdpc3RlcmluZ1xuIik7CisJaW91bm1hcCh0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzKTsKK2Vycl9pb3JlbWFwOgorCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHRpbWVyaW9tZW1fcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJnRpbWVyaW9tZW1fcm5nX3RpbWVyKTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19vcHMpOwogCisJaW91bm1hcCh0aW1lcmlvbWVtX3JuZ19kYXRhLT5hZGRyZXNzKTsKKwlyZWxlYXNlX3Jlc291cmNlKG1lbSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwppbmRleCA3MGUwZWJjLi5hZmQ5MjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYworKysgYi9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXAybWVtX3Byb2NfZm9wczsKLXN0YXRpYyBpbnQgaXAyX3JlYWRfcHJvYyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICogKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwMl9wcm9jX2ZvcHM7CiAKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIFR5cGUgRGVmaW5pdGlvbnMgKi8KQEAgLTQ0Niw5ICs0NDYsOSBAQAogCS5zdG9wICAgICAgICAgICAgPSBpcDJfc3RvcCwKIAkuc3RhcnQgICAgICAgICAgID0gaXAyX3N0YXJ0LAogCS5oYW5ndXAgICAgICAgICAgPSBpcDJfaGFuZ3VwLAotCS5yZWFkX3Byb2MgICAgICAgPSBpcDJfcmVhZF9wcm9jLAogCS50aW9jbWdldAkgPSBpcDJfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CSA9IGlwMl90aW9jbXNldCwKKwkucHJvY19mb3BzCSA9ICZpcDJfcHJvY19mb3BzLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMwMjksMTkgKzMwMjksMTcgQEAKICAqIGRpZmZlcmVudCBzb3VyY2VzIGluY2x1ZGluZyBpcDJta2Rldi5jIGFuZCBhIGNvdXBsZSBvZiBvdGhlciBkcml2ZXJzLgogICogVGhlIGJ1Z3MgYXJlIGFsbCBtaW5lLiAgOi0pCT1taHc9CiAgKi8KLXN0YXRpYyBpbnQgaXAyX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBpcDJfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlpbnQJaSwgaiwgYm94OwotCWludAlsZW4gPSAwOwogCWludAlib3hlcyA9IDA7CiAJaW50CXBvcnRzID0gMDsKIAlpbnQJdHBvcnRzID0gMDsKLQlvZmZfdAliZWdpbiA9IDA7CiAJaTJlQm9yZFN0clB0ciAgcEI7CisJY2hhciAqc2VwOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgImlwMmluZm86IDEuMCBkcml2ZXI6ICVzXG4iLCBwY1ZlcnNpb24gKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIkRyaXZlcjogU01ham9yPSVkIENNYWpvcj0lZCBJTWFqb3I9JWQgTWF4Qm9hcmRzPSVkIE1heEJveGVzPSVkIE1heFBvcnRzPSVkXG4iLAorCXNlcV9wcmludGYobSwgImlwMmluZm86IDEuMCBkcml2ZXI6ICVzXG4iLCBwY1ZlcnNpb24pOworCXNlcV9wcmludGYobSwgIkRyaXZlcjogU01ham9yPSVkIENNYWpvcj0lZCBJTWFqb3I9JWQgTWF4Qm9hcmRzPSVkIE1heEJveGVzPSVkIE1heFBvcnRzPSVkXG4iLAogCQkJSVAyX1RUWV9NQUpPUiwgSVAyX0NBTExPVVRfTUFKT1IsIElQMl9JUExfTUFKT1IsCiAJCQlJUDJfTUFYX0JPQVJEUywgQUJTX01BWF9CT1hFUywgQUJTX0JJR0dFU1RfQk9YKTsKIApAQCAtMzA1Myw3ICszMDUxLDggQEAKIAkJCXN3aXRjaCggcEItPmkyZVBvbS5lLnBvcklEICYgflBPUl9JRF9SRVNFUlZFRCApIAogCQkJewogCQkJY2FzZSBQT1JfSURfRklJRVg6Ci0JCQkJbGVuICs9IHNwcmludGYoIHBhZ2UrbGVuLCAiQm9hcmQgJWQ6IEVYIHBvcnRzPSIsIGkgKTsKKwkJCQlzZXFfcHJpbnRmKG0sICJCb2FyZCAlZDogRVggcG9ydHM9IiwgaSk7CisJCQkJc2VwID0gIiI7CiAJCQkJZm9yKCBib3ggPSAwOyBib3ggPCBBQlNfTUFYX0JPWEVTOyArK2JveCApCiAJCQkJewogCQkJCQlwb3J0cyA9IDA7CkBAIC0zMDY1LDc5ICszMDY0LDc0IEBACiAJCQkJCQkJKytwb3J0czsKIAkJCQkJCX0KIAkJCQkJfQotCQkJCQlsZW4gKz0gc3ByaW50ZiggcGFnZStsZW4sICIlZCwiLCBwb3J0cyApOworCQkJCQlzZXFfcHJpbnRmKG0sICIlcyVkIiwgc2VwLCBwb3J0cyk7CisJCQkJCXNlcCA9ICIsIjsKIAkJCQkJdHBvcnRzICs9IHBvcnRzOwogCQkJCX0KLQotCQkJCS0tbGVuOwkvKiBCYWNrdXAgb3ZlciB0aGF0IGxhc3QgY29tbWEgKi8KLQotCQkJCWxlbiArPSBzcHJpbnRmKCBwYWdlK2xlbiwgIiBib3hlcz0lZCB3aWR0aD0lZCIsIGJveGVzLCBwQi0+aTJlRGF0YVdpZHRoMTYgPyAxNiA6IDggKTsKKwkJCQlzZXFfcHJpbnRmKG0sICIgYm94ZXM9JWQgd2lkdGg9JWQiLCBib3hlcywgcEItPmkyZURhdGFXaWR0aDE2ID8gMTYgOiA4KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQT1JfSURfSUlfNDoKLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIkJvYXJkICVkOiBJU0EtNCBwb3J0cz00IGJveGVzPTEiLCBpICk7CisJCQkJc2VxX3ByaW50ZihtLCAiQm9hcmQgJWQ6IElTQS00IHBvcnRzPTQgYm94ZXM9MSIsIGkpOwogCQkJCXRwb3J0cyA9IHBvcnRzID0gNDsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQT1JfSURfSUlfODoKLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIkJvYXJkICVkOiBJU0EtOC1zdGQgcG9ydHM9OCBib3hlcz0xIiwgaSApOworCQkJCXNlcV9wcmludGYobSwgIkJvYXJkICVkOiBJU0EtOC1zdGQgcG9ydHM9OCBib3hlcz0xIiwgaSk7CiAJCQkJdHBvcnRzID0gcG9ydHMgPSA4OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBPUl9JRF9JSV84UjoKLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIkJvYXJkICVkOiBJU0EtOC1SSjExIHBvcnRzPTggYm94ZXM9MSIsIGkgKTsKKwkJCQlzZXFfcHJpbnRmKG0sICJCb2FyZCAlZDogSVNBLTgtUkoxMSBwb3J0cz04IGJveGVzPTEiLCBpKTsKIAkJCQl0cG9ydHMgPSBwb3J0cyA9IDg7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJCb2FyZCAlZDogdW5rbm93biIsIGkgKTsKKwkJCQlzZXFfcHJpbnRmKG0sICJCb2FyZCAlZDogdW5rbm93biIsIGkpOwogCQkJCS8qIERvbid0IHRyeSBhbmQgcHJvYmUgZm9yIG1pbm9yIG51bWJlcnMgKi8KIAkJCQl0cG9ydHMgPSBwb3J0cyA9IDA7CiAJCQl9CiAKIAkJfSBlbHNlIHsKIAkJCS8qIERvbid0IHRyeSBhbmQgcHJvYmUgZm9yIG1pbm9yIG51bWJlcnMgKi8KLQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiQm9hcmQgJWQ6IHZhY2FudCIsIGkgKTsKKwkJCXNlcV9wcmludGYobSwgIkJvYXJkICVkOiB2YWNhbnQiLCBpKTsKIAkJCXRwb3J0cyA9IHBvcnRzID0gMDsKIAkJfQogCiAJCWlmKCB0cG9ydHMgKSB7Ci0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiBtaW5vcnM9IiApOwotCisJCQlzZXFfcHV0cyhtLCAiIG1pbm9ycz0iKTsKKwkJCXNlcCA9ICIiOwogCQkJZm9yICggYm94ID0gMDsgYm94IDwgQUJTX01BWF9CT1hFUzsgKytib3ggKQogCQkJewogCQkJCWZvciAoIGogPSAwOyBqIDwgQUJTX0JJR0dFU1RfQk9YOyArK2ogKQogCQkJCXsKIAkJCQkJaWYgKCBwQi0+aTJlQ2hhbm5lbE1hcFtib3hdICYgKDEgPDwgaikgKQogCQkJCQl7Ci0JCQkJCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sIiVkLCIsCisJCQkJCQlzZXFfcHJpbnRmKG0sICIlcyVkIiwgc2VwLAogCQkJCQkJCWogKyBBQlNfQklHR0VTVF9CT1ggKgogCQkJCQkJCShib3graSpBQlNfTUFYX0JPWEVTKSk7CisJCQkJCQlzZXAgPSAiLCI7CiAJCQkJCX0KIAkJCQl9CiAJCQl9Ci0KLQkJCXBhZ2VbIGxlbiAtIDEgXSA9ICdcbic7CS8qIE92ZXJ3cml0ZSB0aGF0IGxhc3QgY29tbWEgKi8KLQkJfSBlbHNlIHsKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwiXG4iICk7CiAJCX0KLQotCQlpZiAobGVuK2JlZ2luID4gb2ZmK2NvdW50KQotCQkJYnJlYWs7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCi0JaWYgKGkgPj0gSVAyX01BWF9CT0FSRFMpCi0JCSplb2YgPSAxOwotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQotCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbi1vZmYpID8gY291bnQgOiBiZWdpbitsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKICB9CisKK3N0YXRpYyBpbnQgaXAyX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaXAyX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwMl9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGlwMl9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAgCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRnVuY3Rpb246ICAgaXAydHJhY2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggN2E4OGRmZC4uZTkzZmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTE5NDQsNyArMTk0NCw3IEBACiAKIGludCBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpcG1pX3NtaV90IHNtaSwgY2hhciAqbmFtZSwKIAkJCSAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLAotCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQorCQkJICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50ICAgICAgICAgICAgICAgICAgICBydiA9IDA7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE5NzAsNyArMTk3MCw2IEBACiAJfSBlbHNlIHsKIAkJZmlsZS0+ZGF0YSA9IGRhdGE7CiAJCWZpbGUtPnJlYWRfcHJvYyA9IHJlYWRfcHJvYzsKLQkJZmlsZS0+b3duZXIgPSBvd25lcjsKIAogCQltdXRleF9sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CiAJCS8qIFN0aWNrIGl0IG9uIHRoZSBsaXN0LiAqLwpAQCAtMTk5MywyMyArMTk5MiwyMSBAQAogCXNtaS0+cHJvY19kaXIgPSBwcm9jX21rZGlyKHNtaS0+cHJvY19kaXJfbmFtZSwgcHJvY19pcG1pX3Jvb3QpOwogCWlmICghc21pLT5wcm9jX2RpcikKIAkJcnYgPSAtRU5PTUVNOwotCWVsc2UKLQkJc21pLT5wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChydiA9PSAwKQogCQlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KHNtaSwgInN0YXRzIiwKIAkJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJpcG1iIiwKIAkJCQkJICAgICBpcG1iX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJ2ZXJzaW9uIiwKIAkJCQkJICAgICB2ZXJzaW9uX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogCXJldHVybiBydjsKQEAgLTQyNjUsNyArNDI2Miw2IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogCX0KIAotCXByb2NfaXBtaV9yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIAlzZXR1cF90aW1lcigmaXBtaV90aW1lciwgaXBtaV90aW1lb3V0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMzAwMDEzNS4uZTU4ZWE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTI4OTksNyArMjg5OSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJ0eXBlIiwKIAkJCQkgICAgIHR5cGVfZmlsZV9yZWFkX3Byb2MsCi0JCQkJICAgICBuZXdfc21pLCBUSElTX01PRFVMRSk7CisJCQkJICAgICBuZXdfc21pKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaXBtaV9zaTogVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwKQEAgLTI5MDksNyArMjkwOSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJzaV9zdGF0cyIsCiAJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCSAgICAgbmV3X3NtaSwgVEhJU19NT0RVTEUpOworCQkJCSAgICAgbmV3X3NtaSk7CiAJaWYgKHJ2KSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImlwbWlfc2k6IFVuYWJsZSB0byBjcmVhdGUgcHJvYyBlbnRyeTogJWRcbiIsCkBAIC0yOTE5LDcgKzI5MTksNyBAQAogCiAJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShuZXdfc21pLT5pbnRmLCAicGFyYW1zIiwKIAkJCQkgICAgIHBhcmFtX3JlYWRfcHJvYywKLQkJCQkgICAgIG5ld19zbWksIFRISVNfTU9EVUxFKTsKKwkJCQkgICAgIG5ld19zbWkpOwogCWlmIChydikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJpcG1pX3NpOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnk6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IDVjM2RjNmIuLmZmZjE5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2RrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pc3RhbGxpb24uaD4KQEAgLTYxMyw3ICs2MTQsNiBAQAogc3RhdGljIHZvaWQJc3RsaV93YWl0dW50aWxzZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIHN0YXRpYyB2b2lkCXN0bGlfc2VuZHhjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogc3RhdGljIHZvaWQJc3RsaV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50CXN0bGlfcG9ydGluZm8oc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcyk7CiAKIHN0YXRpYyBpbnQJc3RsaV9icmRpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKIHN0YXRpYyBpbnQJc3RsaV9zdGFydGJyZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CkBAIC0xODkzLDIwICsxODkzLDEwIEBACiAJc3RsaV9jbWR3YWl0KGJyZHAsIHBvcnRwLCBBX1BPUlRDVFJMLCAmYWN0cmwsIHNpemVvZihhc3ljdHJsX3QpLCAwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lCU1BWExJTkUJCTgwCi0KLS8qCi0gKglGb3JtYXQgaW5mbyBmb3IgYSBzcGVjaWZpZWQgcG9ydC4gVGhlIGxpbmUgaXMgZGVsaWJlcmF0ZWx5IGxpbWl0ZWQKLSAqCXRvIDgwIGNoYXJhY3RlcnMuIChJZiBpdCBpcyB0b28gbG9uZyBpdCB3aWxsIGJlIHRydW5jYXRlZCwgaWYgdG9vCi0gKglzaG9ydCB0aGVuIHBhZGRlZCB3aXRoIHNwYWNlcykuCi0gKi8KLQotc3RhdGljIGludCBzdGxpX3BvcnRpbmZvKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBpbnQgcG9ydG5yLCBjaGFyICpwb3MpCitzdGF0aWMgdm9pZCBzdGxpX3BvcnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGludCBwb3J0bnIpCiB7Ci0JY2hhciAqc3AsICp1YXJ0OwotCWludCByYywgY250OworCWNoYXIgKnVhcnQ7CisJaW50IHJjOwogCiAJcmMgPSBzdGxpX3BvcnRjbWRzdGF0cyhOVUxMLCBwb3J0cCk7CiAKQEAgLTE5MTgsNDQgKzE5MDgsNTAgQEAKIAkJZGVmYXVsdDp1YXJ0ID0gIkNEMTQwMCI7IGJyZWFrOwogCQl9CiAJfQotCi0Jc3AgPSBwb3M7Ci0Jc3AgKz0gc3ByaW50ZihzcCwgIiVkOiB1YXJ0OiVzICIsIHBvcnRuciwgdWFydCk7CisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgIiwgcG9ydG5yLCB1YXJ0KTsKIAogCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfU1RBUlRFRCkgJiYgKHJjID49IDApKSB7Ci0JCXNwICs9IHNwcmludGYoc3AsICJ0eDolZCByeDolZCIsIChpbnQpIHN0bGlfY29tc3RhdHMudHh0b3RhbCwKKwkJY2hhciBzZXA7CisKKwkJc2VxX3ByaW50ZihtLCAidHg6JWQgcng6JWQiLCAoaW50KSBzdGxpX2NvbXN0YXRzLnR4dG90YWwsCiAJCQkoaW50KSBzdGxpX2NvbXN0YXRzLnJ4dG90YWwpOwogCiAJCWlmIChzdGxpX2NvbXN0YXRzLnJ4ZnJhbWluZykKLQkJCXNwICs9IHNwcmludGYoc3AsICIgZmU6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKIAkJCQkoaW50KSBzdGxpX2NvbXN0YXRzLnJ4ZnJhbWluZyk7CiAJCWlmIChzdGxpX2NvbXN0YXRzLnJ4cGFyaXR5KQotCQkJc3AgKz0gc3ByaW50ZihzcCwgIiBwZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLAogCQkJCShpbnQpIHN0bGlfY29tc3RhdHMucnhwYXJpdHkpOwogCQlpZiAoc3RsaV9jb21zdGF0cy5yeGJyZWFrcykKLQkJCXNwICs9IHNwcmludGYoc3AsICIgYnJrOiVkIiwKKwkJCXNlcV9wcmludGYobSwgIiBicms6JWQiLAogCQkJCShpbnQpIHN0bGlfY29tc3RhdHMucnhicmVha3MpOwogCQlpZiAoc3RsaV9jb21zdGF0cy5yeG92ZXJydW4pCi0JCQlzcCArPSBzcHJpbnRmKHNwLCAiIG9lOiVkIiwKKwkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsCiAJCQkJKGludCkgc3RsaV9jb21zdGF0cy5yeG92ZXJydW4pOwogCi0JCWNudCA9IHNwcmludGYoc3AsICIlcyVzJXMlcyVzICIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fUlRTKSA/ICJ8UlRTIiA6ICIiLAotCQkJKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0NUUykgPyAifENUUyIgOiAiIiwKLQkJCShzdGxpX2NvbXN0YXRzLnNpZ25hbHMgJiBUSU9DTV9EVFIpID8gInxEVFIiIDogIiIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fQ0QpID8gInxEQ0QiIDogIiIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fRFNSKSA/ICJ8RFNSIiA6ICIiKTsKLQkJKnNwID0gJyAnOwotCQlzcCArPSBjbnQ7CisJCXNlcCA9ICcgJzsKKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX1JUUykgeworCQkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIlJUUyIpOworCQkJc2VwID0gJ3wnOworCQl9CisJCWlmIChzdGxpX2NvbXN0YXRzLnNpZ25hbHMgJiBUSU9DTV9DVFMpIHsKKwkJCXNlcV9wcmludGYobSwgIiVjJXMiLCBzZXAsICJDVFMiKTsKKwkJCXNlcCA9ICd8JzsKKwkJfQorCQlpZiAoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fRFRSKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRFRSIik7CisJCQlzZXAgPSAnfCc7CisJCX0KKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0NEKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRENEIik7CisJCQlzZXAgPSAnfCc7CisJCX0KKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0RTUikgeworCQkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIkRTUiIpOworCQkJc2VwID0gJ3wnOworCQl9CiAJfQotCi0JZm9yIChjbnQgPSAoc3AgLSBwb3MpOyAoY250IDwgKE1BWExJTkUgLSAxKSk7IGNudCsrKQotCQkqc3ArKyA9ICcgJzsKLQlpZiAoY250ID49IE1BWExJTkUpCi0JCXBvc1soTUFYTElORSAtIDIpXSA9ICcrJzsKLQlwb3NbKE1BWExJTkUgLSAxKV0gPSAnXG4nOwotCi0JcmV0dXJuKE1BWExJTkUpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTY0LDI2ICsxOTYwLDE1IEBACiAgKglQb3J0IGluZm8sIHJlYWQgZnJvbSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3JlYWRwcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzdGxpX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKIAl1bnNpZ25lZCBpbnQgYnJkbnIsIHBvcnRuciwgdG90YWxwb3J0OwotCWludCBjdXJvZmYsIG1heG9mZjsKLQljaGFyICpwb3M7CiAKLQlwb3MgPSBwYWdlOwogCXRvdGFscG9ydCA9IDA7Ci0JY3Vyb2ZmID0gMDsKIAotCWlmIChvZmYgPT0gMCkgewotCQlwb3MgKz0gc3ByaW50Zihwb3MsICIlczogdmVyc2lvbiAlcyIsIHN0bGlfZHJ2dGl0bGUsCi0JCQlzdGxpX2RydnZlcnNpb24pOwotCQl3aGlsZSAocG9zIDwgKHBhZ2UgKyBNQVhMSU5FIC0gMSkpCi0JCQkqcG9zKysgPSAnICc7Ci0JCSpwb3MrKyA9ICdcbic7Ci0JfQotCWN1cm9mZiA9ICBNQVhMSU5FOworCXNlcV9wcmludGYobSwgIiVzOiB2ZXJzaW9uICVzXG4iLCBzdGxpX2RydnRpdGxlLCBzdGxpX2RydnZlcnNpb24pOwogCiAvKgogICoJV2Ugc2NhbiB0aHJvdWdoIGZvciBlYWNoIGJvYXJkLCBwYW5lbCBhbmQgcG9ydC4gVGhlIG9mZnNldCBpcwpAQCAtMTk5NiwzMyArMTk4MSwzMSBAQAogCQlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1heG9mZiA9IGN1cm9mZiArIChicmRwLT5ucnBvcnRzICogTUFYTElORSk7Ci0JCWlmIChvZmYgPj0gbWF4b2ZmKSB7Ci0JCQljdXJvZmYgPSBtYXhvZmY7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXRvdGFscG9ydCA9IGJyZG5yICogU1RMX01BWFBPUlRTOwogCQlmb3IgKHBvcnRuciA9IDA7IChwb3J0bnIgPCBicmRwLT5ucnBvcnRzKTsgcG9ydG5yKyssCiAJCSAgICB0b3RhbHBvcnQrKykgewogCQkJcG9ydHAgPSBicmRwLT5wb3J0c1twb3J0bnJdOwogCQkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0JCQlpZiAob2ZmID49IChjdXJvZmYgKz0gTUFYTElORSkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoKHBvcyAtIHBhZ2UgKyBNQVhMSU5FKSA+IGNvdW50KQotCQkJCWdvdG8gc3RsaV9yZWFkZG9uZTsKLQkJCXBvcyArPSBzdGxpX3BvcnRpbmZvKGJyZHAsIHBvcnRwLCB0b3RhbHBvcnQsIHBvcyk7CisJCQlzdGxpX3BvcnRpbmZvKG0sIGJyZHAsIHBvcnRwLCB0b3RhbHBvcnQpOwogCQl9CiAJfQotCi0JKmVvZiA9IDE7Ci0KLXN0bGlfcmVhZGRvbmU6Ci0JKnN0YXJ0ID0gcGFnZTsKLQlyZXR1cm4ocG9zIC0gcGFnZSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3RsaV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN0bGlfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RsaV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN0bGlfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC00NDI3LDkgKzQ0MTAsOSBAQAogCS5icmVha19jdGwgPSBzdGxpX2JyZWFrY3RsLAogCS53YWl0X3VudGlsX3NlbnQgPSBzdGxpX3dhaXR1bnRpbHNlbnQsCiAJLnNlbmRfeGNoYXIgPSBzdGxpX3NlbmR4Y2hhciwKLQkucmVhZF9wcm9jID0gc3RsaV9yZWFkcHJvYywKIAkudGlvY21nZXQgPSBzdGxpX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHN0bGlfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZzdGxpX3Byb2NfZm9wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBzdGxpX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IDU2MDhhMWUuLjE5ZDc5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTI2MTksMTMgKzI2MjAsMTIgQEAKICAqIC9wcm9jIGZzIHJvdXRpbmVzLi4uLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmVfaW5mbyhjaGFyICpidWYsIE1HU0xQQ19JTkZPICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkIGxpbmVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIE1HU0xQQ19JTkZPICppbmZvKQogewogCWNoYXIJc3RhdF9idWZbMzBdOwotCWludAlyZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IHNwcmludGYoYnVmLCAiJXM6aW86JTA0WCBpcnE6JWQiLAorCXNlcV9wcmludGYobSwgIiVzOmlvOiUwNFggaXJxOiVkIiwKIAkJICAgICAgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmlvX2Jhc2UsIGluZm8tPmlycV9sZXZlbCk7CiAKIAkvKiBvdXRwdXQgY3VycmVudCBzZXJpYWwgc2lnbmFsIHN0YXRlcyAqLwpAQCAtMjY0OSw3NSArMjY0OSw3MCBAQAogCQlzdHJjYXQoc3RhdF9idWYsICJ8UkkiKTsKIAogCWlmIChpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfSERMQykgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIEhETEMgdHhvazolZCByeG9rOiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiIEhETEMgdHhvazolZCByeG9rOiVkIiwKIAkJCSAgICAgIGluZm8tPmljb3VudC50eG9rLCBpbmZvLT5pY291bnQucnhvayk7CiAJCWlmIChpbmZvLT5pY291bnQudHh1bmRlcikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHh1bmRlcjolZCIsIGluZm8tPmljb3VudC50eHVuZGVyKTsKKwkJCXNlcV9wcmludGYobSwgIiB0eHVuZGVyOiVkIiwgaW5mby0+aWNvdW50LnR4dW5kZXIpOwogCQlpZiAoaW5mby0+aWNvdW50LnR4YWJvcnQpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHR4YWJvcnQ6JWQiLCBpbmZvLT5pY291bnQudHhhYm9ydCk7CisJCQlzZXFfcHJpbnRmKG0sICIgdHhhYm9ydDolZCIsIGluZm8tPmljb3VudC50eGFib3J0KTsKIAkJaWYgKGluZm8tPmljb3VudC5yeHNob3J0KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeHNob3J0OiVkIiwgaW5mby0+aWNvdW50LnJ4c2hvcnQpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhsb25nKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKIAkJaWYgKGluZm8tPmljb3VudC5yeG92ZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4Y3JjKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGNyYzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhjcmM6JWQiLCBpbmZvLT5pY291bnQucnhjcmMpOwogCX0gZWxzZSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgQVNZTkMgdHg6JWQgcng6JWQiLAorCQlzZXFfcHJpbnRmKG0sICIgQVNZTkMgdHg6JWQgcng6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4LCBpbmZvLT5pY291bnQucngpOwogCQlpZiAoaW5mby0+aWNvdW50LmZyYW1lKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICIgZmU6JWQiLCBpbmZvLT5pY291bnQuZnJhbWUpOwogCQlpZiAoaW5mby0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcGU6JWQiLCBpbmZvLT5pY291bnQucGFyaXR5KTsKKwkJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOwogCQlpZiAoaW5mby0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CisJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CiAJCWlmIChpbmZvLT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CiAJfQogCiAJLyogQXBwZW5kIHNlcmlhbCBzaWduYWwgc3RhdHVzIHRvIGVuZCAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgJXNcbiIsIHN0YXRfYnVmKzEpOworCXNlcV9wcmludGYobSwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAidHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAorCXNlcV9wcmludGYobSwgInR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKIAkJICAgICAgIGluZm8tPnR4X2FjdGl2ZSxpbmZvLT5iaF9yZXF1ZXN0ZWQsaW5mby0+YmhfcnVubmluZywKIAkJICAgICAgIGluZm8tPnBlbmRpbmdfYmgpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogLyogQ2FsbGVkIHRvIHByaW50IGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMKICAqLwotc3RhdGljIGludCBtZ3NscGNfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWdzbHBjX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDAsIGw7Ci0Jb2ZmX3QJYmVnaW4gPSAwOwogCU1HU0xQQ19JTkZPICppbmZvOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInN5bmNsaW5rIGRyaXZlcjolc1xuIiwgZHJpdmVyX3ZlcnNpb24pOworCXNlcV9wcmludGYobSwgInN5bmNsaW5rIGRyaXZlcjolc1xuIiwgZHJpdmVyX3ZlcnNpb24pOwogCiAJaW5mbyA9IG1nc2xwY19kZXZpY2VfbGlzdDsKIAl3aGlsZSggaW5mbyApIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCBpbmZvKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJbGluZV9pbmZvKG0sIGluZm8pOwogCQlpbmZvID0gaW5mby0+bmV4dF9kZXZpY2U7CiAJfQotCi0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWdzbHBjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWdzbHBjX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1nc2xwY19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1nc2xwY19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgcnhfYWxsb2NfYnVmZmVycyhNR1NMUENfSU5GTyAqaW5mbykKIHsKIAkvKiBlYWNoIGJ1ZmZlciBoYXMgaGVhZGVyIGFuZCBkYXRhICovCkBAIC0yODYxLDEzICsyODU2LDEzIEBACiAJLnNlbmRfeGNoYXIgPSBtZ3NscGNfc2VuZF94Y2hhciwKIAkuYnJlYWtfY3RsID0gbWdzbHBjX2JyZWFrLAogCS53YWl0X3VudGlsX3NlbnQgPSBtZ3NscGNfd2FpdF91bnRpbF9zZW50LAotCS5yZWFkX3Byb2MgPSBtZ3NscGNfcmVhZF9wcm9jLAogCS5zZXRfdGVybWlvcyA9IG1nc2xwY19zZXRfdGVybWlvcywKIAkuc3RvcCA9IHR4X3BhdXNlLAogCS5zdGFydCA9IHR4X3JlbGVhc2UsCiAJLmhhbmd1cCA9IG1nc2xwY19oYW5ndXAsCiAJLnRpb2NtZ2V0ID0gdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZtZ3NscGNfcHJvY19mb3BzLAogfTsKIAogc3RhdGljIHZvaWQgc3luY2xpbmtfY3NfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDdjNDNhZTcuLmY4MjRlZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTE0ODgsNyArMTQ4OCw4IEBACiAJa2V5cHRyLT5jb3VudCA9IChpcF9jbnQgJiBDT1VOVF9NQVNLKSA8PCBIQVNIX0JJVFM7CiAJc21wX3dtYigpOwogCWlwX2NudCsrOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmVrZXlfd29yaywgUkVLRVlfSU5URVJWQUwpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmVrZXlfd29yaywKKwkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoUkVLRVlfSU5URVJWQUwpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga2V5ZGF0YSAqZ2V0X2tleXB0cih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDk2YWRmMjguLjIwZDkwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTkwLDYgKzkwLDcgQEAKIAlibGtkZXZfcHV0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYyBiL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jCmluZGV4IGUxZTBkZDguLjJhZDgxM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NkMTQwMC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjMjYxOTguaD4KICNpbmNsdWRlIDxsaW51eC9jb21zdGF0cy5oPgpAQCAtMTM3OSw1MiArMTM4MCw0NyBAQAogCQlzdGxfcHV0Y2hhcih0dHksIGNoKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lCU1BWExJTkUJCTgwCi0KLS8qCi0gKglGb3JtYXQgaW5mbyBmb3IgYSBzcGVjaWZpZWQgcG9ydC4gVGhlIGxpbmUgaXMgZGVsaWJlcmF0ZWx5IGxpbWl0ZWQKLSAqCXRvIDgwIGNoYXJhY3RlcnMuIChJZiBpdCBpcyB0b28gbG9uZyBpdCB3aWxsIGJlIHRydW5jYXRlZCwgaWYgdG9vCi0gKglzaG9ydCB0aGVuIHBhZGRlZCB3aXRoIHNwYWNlcykuCi0gKi8KLQotc3RhdGljIGludCBzdGxfcG9ydGluZm8oc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcG9ydG5yLCBjaGFyICpwb3MpCitzdGF0aWMgdm9pZCBzdGxfcG9ydGluZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc3RscG9ydCAqcG9ydHAsIGludCBwb3J0bnIpCiB7Ci0JY2hhcgkqc3A7Ci0JaW50CXNpZ3MsIGNudDsKKwlpbnQJc2lnczsKKwljaGFyIHNlcDsKIAotCXNwID0gcG9zOwotCXNwICs9IHNwcmludGYoc3AsICIlZDogdWFydDolcyB0eDolZCByeDolZCIsCisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgdHg6JWQgcng6JWQiLAogCQlwb3J0bnIsIChwb3J0cC0+aHdpZCA9PSAxKSA/ICJTQzI2MTk4IiA6ICJDRDE0MDAiLAogCQkoaW50KSBwb3J0cC0+c3RhdHMudHh0b3RhbCwgKGludCkgcG9ydHAtPnN0YXRzLnJ4dG90YWwpOwogCiAJaWYgKHBvcnRwLT5zdGF0cy5yeGZyYW1pbmcpCi0JCXNwICs9IHNwcmludGYoc3AsICIgZmU6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhmcmFtaW5nKTsKKwkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwgKGludCkgcG9ydHAtPnN0YXRzLnJ4ZnJhbWluZyk7CiAJaWYgKHBvcnRwLT5zdGF0cy5yeHBhcml0eSkKLQkJc3AgKz0gc3ByaW50ZihzcCwgIiBwZTolZCIsIChpbnQpIHBvcnRwLT5zdGF0cy5yeHBhcml0eSk7CisJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIChpbnQpIHBvcnRwLT5zdGF0cy5yeHBhcml0eSk7CiAJaWYgKHBvcnRwLT5zdGF0cy5yeGJyZWFrcykKLQkJc3AgKz0gc3ByaW50ZihzcCwgIiBicms6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhicmVha3MpOworCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgKGludCkgcG9ydHAtPnN0YXRzLnJ4YnJlYWtzKTsKIAlpZiAocG9ydHAtPnN0YXRzLnJ4b3ZlcnJ1bikKLQkJc3AgKz0gc3ByaW50ZihzcCwgIiBvZTolZCIsIChpbnQpIHBvcnRwLT5zdGF0cy5yeG92ZXJydW4pOworCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhvdmVycnVuKTsKIAogCXNpZ3MgPSBzdGxfZ2V0c2lnbmFscyhwb3J0cCk7Ci0JY250ID0gc3ByaW50ZihzcCwgIiVzJXMlcyVzJXMgIiwKLQkJKHNpZ3MgJiBUSU9DTV9SVFMpID8gInxSVFMiIDogIiIsCi0JCShzaWdzICYgVElPQ01fQ1RTKSA/ICJ8Q1RTIiA6ICIiLAotCQkoc2lncyAmIFRJT0NNX0RUUikgPyAifERUUiIgOiAiIiwKLQkJKHNpZ3MgJiBUSU9DTV9DRCkgPyAifERDRCIgOiAiIiwKLQkJKHNpZ3MgJiBUSU9DTV9EU1IpID8gInxEU1IiIDogIiIpOwotCSpzcCA9ICcgJzsKLQlzcCArPSBjbnQ7Ci0KLQlmb3IgKGNudCA9IHNwIC0gcG9zOyBjbnQgPCAoTUFYTElORSAtIDEpOyBjbnQrKykKLQkJKnNwKysgPSAnICc7Ci0JaWYgKGNudCA+PSBNQVhMSU5FKQotCQlwb3NbKE1BWExJTkUgLSAyKV0gPSAnKyc7Ci0JcG9zWyhNQVhMSU5FIC0gMSldID0gJ1xuJzsKLQotCXJldHVybiBNQVhMSU5FOworCXNlcCA9ICcgJzsKKwlpZiAoc2lncyAmIFRJT0NNX1JUUykgeworCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiUlRTIik7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNpZ3MgJiBUSU9DTV9DVFMpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIkNUUyIpOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzaWdzICYgVElPQ01fRFRSKSB7CisJCXNlcV9wcmludGYobSwgIiVjJXMiLCBzZXAsICJEVFIiKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2lncyAmIFRJT0NNX0NEKSB7CisJCXNlcV9wcmludGYobSwgIiVjJXMiLCBzZXAsICJEQ0QiKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2lncyAmIFRJT0NNX0RTUikgeworCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRFNSIik7CisJCXNlcCA9ICd8JzsKKwl9CisJc2VxX3B1dGMobSwgJ1xuJyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0MzMsMzAgKzE0MjksMTcgQEAKICAqCVBvcnQgaW5mbywgcmVhZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS4KICAqLwogCi1zdGF0aWMgaW50IHN0bF9yZWFkcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgc3RsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHN0bGJyZAkqYnJkcDsKIAlzdHJ1Y3Qgc3RscGFuZWwJKnBhbmVscDsKIAlzdHJ1Y3Qgc3RscG9ydAkqcG9ydHA7CiAJdW5zaWduZWQgaW50CWJyZG5yLCBwYW5lbG5yLCBwb3J0bnI7Ci0JaW50CQl0b3RhbHBvcnQsIGN1cm9mZiwgbWF4b2ZmOwotCWNoYXIJCSpwb3M7CisJaW50CQl0b3RhbHBvcnQ7CiAKLQlwcl9kZWJ1Zygic3RsX3JlYWRwcm9jKHBhZ2U9JXAsc3RhcnQ9JXAsb2ZmPSVseCxjb3VudD0lZCxlb2Y9JXAsIgotCQkiZGF0YT0lcFxuIiwgcGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgZGF0YSk7Ci0KLQlwb3MgPSBwYWdlOwogCXRvdGFscG9ydCA9IDA7Ci0JY3Vyb2ZmID0gMDsKIAotCWlmIChvZmYgPT0gMCkgewotCQlwb3MgKz0gc3ByaW50Zihwb3MsICIlczogdmVyc2lvbiAlcyIsIHN0bF9kcnZ0aXRsZSwKLQkJCXN0bF9kcnZ2ZXJzaW9uKTsKLQkJd2hpbGUgKHBvcyA8IChwYWdlICsgTUFYTElORSAtIDEpKQotCQkJKnBvcysrID0gJyAnOwotCQkqcG9zKysgPSAnXG4nOwotCX0KLQljdXJvZmYgPSAgTUFYTElORTsKKwlzZXFfcHJpbnRmKG0sICIlczogdmVyc2lvbiAlc1xuIiwgc3RsX2RydnRpdGxlLCBzdGxfZHJ2dmVyc2lvbik7CiAKIC8qCiAgKglXZSBzY2FuIHRocm91Z2ggZm9yIGVhY2ggYm9hcmQsIHBhbmVsIGFuZCBwb3J0LiBUaGUgb2Zmc2V0IGlzCkBAIC0xNDY5LDQ2ICsxNDUyLDM3IEBACiAJCWlmIChicmRwLT5zdGF0ZSA9PSAwKQogCQkJY29udGludWU7CiAKLQkJbWF4b2ZmID0gY3Vyb2ZmICsgKGJyZHAtPm5ycG9ydHMgKiBNQVhMSU5FKTsKLQkJaWYgKG9mZiA+PSBtYXhvZmYpIHsKLQkJCWN1cm9mZiA9IG1heG9mZjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJdG90YWxwb3J0ID0gYnJkbnIgKiBTVExfTUFYUE9SVFM7CiAJCWZvciAocGFuZWxuciA9IDA7IHBhbmVsbnIgPCBicmRwLT5ucnBhbmVsczsgcGFuZWxucisrKSB7CiAJCQlwYW5lbHAgPSBicmRwLT5wYW5lbHNbcGFuZWxucl07CiAJCQlpZiAocGFuZWxwID09IE5VTEwpCiAJCQkJY29udGludWU7CiAKLQkJCW1heG9mZiA9IGN1cm9mZiArIChwYW5lbHAtPm5ycG9ydHMgKiBNQVhMSU5FKTsKLQkJCWlmIChvZmYgPj0gbWF4b2ZmKSB7Ci0JCQkJY3Vyb2ZmID0gbWF4b2ZmOwotCQkJCXRvdGFscG9ydCArPSBwYW5lbHAtPm5ycG9ydHM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCWZvciAocG9ydG5yID0gMDsgcG9ydG5yIDwgcGFuZWxwLT5ucnBvcnRzOyBwb3J0bnIrKywKIAkJCSAgICB0b3RhbHBvcnQrKykgewogCQkJCXBvcnRwID0gcGFuZWxwLT5wb3J0c1twb3J0bnJdOwogCQkJCWlmIChwb3J0cCA9PSBOVUxMKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAob2ZmID49IChjdXJvZmYgKz0gTUFYTElORSkpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmICgocG9zIC0gcGFnZSArIE1BWExJTkUpID4gY291bnQpCi0JCQkJCWdvdG8gc3RsX3JlYWRkb25lOwotCQkJCXBvcyArPSBzdGxfcG9ydGluZm8ocG9ydHAsIHRvdGFscG9ydCwgcG9zKTsKKwkJCQlzdGxfcG9ydGluZm8obSwgcG9ydHAsIHRvdGFscG9ydCk7CiAJCQl9CiAJCX0KIAl9Ci0KLQkqZW9mID0gMTsKLQotc3RsX3JlYWRkb25lOgotCSpzdGFydCA9IHBhZ2U7Ci0JcmV0dXJuIHBvcyAtIHBhZ2U7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3RsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3RsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0bF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN0bF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTI1NjYsOSArMjU0MCw5IEBACiAJLmJyZWFrX2N0bCA9IHN0bF9icmVha2N0bCwKIAkud2FpdF91bnRpbF9zZW50ID0gc3RsX3dhaXR1bnRpbHNlbnQsCiAJLnNlbmRfeGNoYXIgPSBzdGxfc2VuZHhjaGFyLAotCS5yZWFkX3Byb2MgPSBzdGxfcmVhZHByb2MsCiAJLnRpb2NtZ2V0ID0gc3RsX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHN0bF90aW9jbXNldCwKKwkucHJvY19mb3BzID0gJnN0bF9wcm9jX2ZvcHMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgc3RsX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCAwMDU3YThmLi5hZmQwYjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTM0NTksMTggKzM0NjAsMTcgQEAKICAqIC9wcm9jIGZzIHJvdXRpbmVzLi4uLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmVfaW5mbyhjaGFyICpidWYsIHN0cnVjdCBtZ3NsX3N0cnVjdCAqaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKmluZm8pCiB7CiAJY2hhcglzdGF0X2J1ZlszMF07Ci0JaW50CXJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGluZm8tPmJ1c190eXBlID09IE1HU0xfQlVTX1RZUEVfUENJKSB7Ci0JCXJldCA9IHNwcmludGYoYnVmLCAiJXM6UENJIGlvOiUwNFggaXJxOiVkIG1lbTolMDhYIGxjcjolMDhYIiwKKwkJc2VxX3ByaW50ZihtLCAiJXM6UENJIGlvOiUwNFggaXJxOiVkIG1lbTolMDhYIGxjcjolMDhYIiwKIAkJCWluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5pb19iYXNlLCBpbmZvLT5pcnFfbGV2ZWwsCiAJCQlpbmZvLT5waHlzX21lbW9yeV9iYXNlLCBpbmZvLT5waHlzX2xjcl9iYXNlKTsKIAl9IGVsc2UgewotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzOihFKUlTQSBpbzolMDRYIGlycTolZCBkbWE6JWQiLAorCQlzZXFfcHJpbnRmKG0sICIlczooRSlJU0EgaW86JTA0WCBpcnE6JWQgZG1hOiVkIiwKIAkJCWluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5pb19iYXNlLCAKIAkJCWluZm8tPmlycV9sZXZlbCwgaW5mby0+ZG1hX2xldmVsKTsKIAl9CkBAIC0zNDk3LDM3ICszNDk3LDM3IEBACiAKIAlpZiAoaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX0hETEMgfHwKIAkgICAgaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX1JBVyApIHsKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBIRExDIHR4b2s6JWQgcnhvazolZCIsCisJCXNlcV9wcmludGYobSwgIiBIRExDIHR4b2s6JWQgcnhvazolZCIsCiAJCQkgICAgICBpbmZvLT5pY291bnQudHhvaywgaW5mby0+aWNvdW50LnJ4b2spOwogCQlpZiAoaW5mby0+aWNvdW50LnR4dW5kZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgdHh1bmRlcjolZCIsIGluZm8tPmljb3VudC50eHVuZGVyKTsKIAkJaWYgKGluZm8tPmljb3VudC50eGFib3J0KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4YWJvcnQ6JWQiLCBpbmZvLT5pY291bnQudHhhYm9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhzaG9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsJCisJCQlzZXFfcHJpbnRmKG0sICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsKIAkJaWYgKGluZm8tPmljb3VudC5yeGxvbmcpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4b3ZlcikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CiAJCWlmIChpbmZvLT5pY291bnQucnhjcmMpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4Y3JjOiVkIiwgaW5mby0+aWNvdW50LnJ4Y3JjKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGNyYzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CiAJfSBlbHNlIHsKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBBU1lOQyB0eDolZCByeDolZCIsCisJCXNlcV9wcmludGYobSwgIiBBU1lOQyB0eDolZCByeDolZCIsCiAJCQkgICAgICBpbmZvLT5pY291bnQudHgsIGluZm8tPmljb3VudC5yeCk7CiAJCWlmIChpbmZvLT5pY291bnQuZnJhbWUpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGZlOiVkIiwgaW5mby0+aWNvdW50LmZyYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CiAJCWlmIChpbmZvLT5pY291bnQucGFyaXR5KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOworCQkJc2VxX3ByaW50ZihtLCAiIHBlOiVkIiwgaW5mby0+aWNvdW50LnBhcml0eSk7CiAJCWlmIChpbmZvLT5pY291bnQuYnJrKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBicms6JWQiLCBpbmZvLT5pY291bnQuYnJrKTsJCisJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CiAJCWlmIChpbmZvLT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CiAJfQogCQogCS8qIEFwcGVuZCBzZXJpYWwgc2lnbmFsIHN0YXR1cyB0byBlbmQgKi8KLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKKwlzZXFfcHJpbnRmKG0sICIgJXNcbiIsIHN0YXRfYnVmKzEpOwogCQotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJ0eGFjdGl2ZT0lZCBiaF9yZXE9JWQgYmhfcnVuPSVkIHBlbmRpbmdfYmg9JXhcbiIsCisJc2VxX3ByaW50ZihtLCAidHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAogCSBpbmZvLT50eF9hY3RpdmUsaW5mby0+YmhfcmVxdWVzdGVkLGluZm8tPmJoX3J1bm5pbmcsCiAJIGluZm8tPnBlbmRpbmdfYmgpOwogCSAKQEAgLTM1NDQsNjAgKzM1NDQsNDAgQEAKIAl1MTYgVG1yID0gdXNjX0luUmVnKCBpbmZvLCBUTVIgKTsKIAl1MTYgVGNjciA9IHVzY19JblJlZyggaW5mbywgVENDUiApOwogCXUxNiBDY2FyID0gaW53KCBpbmZvLT5pb19iYXNlICsgQ0NBUiApOwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJ0Y3NyPSUwNFggdGRtcj0lMDRYIHRpY3I9JTA0WCByY3NyPSUwNFggcmRtcj0lMDRYXG4iCisJc2VxX3ByaW50ZihtLCAidGNzcj0lMDRYIHRkbXI9JTA0WCB0aWNyPSUwNFggcmNzcj0lMDRYIHJkbXI9JTA0WFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgInJpY3I9JTA0WCBpY3IgPSUwNFggZGNjcj0lMDRYIHRtcj0lMDRYIHRjY3I9JTA0WCBjY2FyPSUwNFhcbiIsCiAJIAkJVGNzcixUZG1yLFRpY3IsUnNjcixSZG1yLFJpY3IsSWNyLERjY3IsVG1yLFRjY3IsQ2NhciApOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5pcnFfc3BpbmxvY2ssZmxhZ3MpOwotCQotCXJldHVybiByZXQ7Ci0JCi19CS8qIGVuZCBvZiBsaW5lX2luZm8oKSAqLworfQogCi0vKiBtZ3NsX3JlYWRfcHJvYygpCi0gKiAKLSAqIENhbGxlZCB0byBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2VzCi0gKiAKLSAqIEFyZ3VtZW50czoKLSAqIAlwYWdlCXBhZ2Ugb2YgbWVtb3J5IHRvIGhvbGQgcmV0dXJuZWQgaW5mbwotICogCXN0YXJ0CQotICogCW9mZgotICogCWNvdW50Ci0gKiAJZW9mCi0gKiAJZGF0YQotICogCQotICogUmV0dXJuIFZhbHVlOgotICovCi1zdGF0aWMgaW50IG1nc2xfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKKy8qIENhbGxlZCB0byBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2VzICovCitzdGF0aWMgaW50IG1nc2xfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMCwgbDsKLQlvZmZfdAliZWdpbiA9IDA7CiAJc3RydWN0IG1nc2xfc3RydWN0ICppbmZvOwogCQotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzeW5jbGluayBkcml2ZXI6JXNcbiIsIGRyaXZlcl92ZXJzaW9uKTsKKwlzZXFfcHJpbnRmKG0sICJzeW5jbGluayBkcml2ZXI6JXNcbiIsIGRyaXZlcl92ZXJzaW9uKTsKIAkKIAlpbmZvID0gbWdzbF9kZXZpY2VfbGlzdDsKIAl3aGlsZSggaW5mbyApIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCBpbmZvKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJbGluZV9pbmZvKG0sIGluZm8pOwogCQlpbmZvID0gaW5mby0+bmV4dF9kZXZpY2U7CiAJfQorCXJldHVybiAwOworfQogCi0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7Ci0JCi19CS8qIGVuZCBvZiBtZ3NsX3JlYWRfcHJvYygpICovCitzdGF0aWMgaW50IG1nc2xfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtZ3NsX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1nc2xfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtZ3NsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKIAogLyogbWdzbF9hbGxvY2F0ZV9kbWFfYnVmZmVycygpCiAgKiAKQEAgLTQzMzUsMTMgKzQzMTUsMTMgQEAKIAkuc2VuZF94Y2hhciA9IG1nc2xfc2VuZF94Y2hhciwKIAkuYnJlYWtfY3RsID0gbWdzbF9icmVhaywKIAkud2FpdF91bnRpbF9zZW50ID0gbWdzbF93YWl0X3VudGlsX3NlbnQsCi0gCS5yZWFkX3Byb2MgPSBtZ3NsX3JlYWRfcHJvYywKIAkuc2V0X3Rlcm1pb3MgPSBtZ3NsX3NldF90ZXJtaW9zLAogCS5zdG9wID0gbWdzbF9zdG9wLAogCS5zdGFydCA9IG1nc2xfc3RhcnQsCiAJLmhhbmd1cCA9IG1nc2xfaGFuZ3VwLAogCS50aW9jbWdldCA9IHRpb2NtZ2V0LAogCS50aW9jbXNldCA9IHRpb2Ntc2V0LAorCS5wcm9jX2ZvcHMgPSAmbWdzbF9wcm9jX2ZvcHMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCBlZmIzZGM5Li41ZTI1NjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMTU0LDcgKzE1NSw2IEBACiBzdGF0aWMgdm9pZCB0eF9yZWxlYXNlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBzdGF0aWMgaW50ICBpb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCAgcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsaW50ICplb2YsIHZvaWQgKmRhdGEpOwogc3RhdGljIGludCAgY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogc3RhdGljIHZvaWQgdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CkBAIC0yOTgsNiArMjk4LDcgQEAKIAogCXVuc2lnbmVkIGludCByYnVmX2ZpbGxfbGV2ZWw7CiAJdW5zaWduZWQgaW50IGlmX21vZGU7CisJdW5zaWduZWQgaW50IGJhc2VfY2xvY2s7CiAKIAkvKiBkZXZpY2Ugc3RhdHVzICovCiAKQEAgLTExNTYsMjIgKzExNTcsMjYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwotCWluZm8tPnBhcmFtcy5tb2RlICAgICAgICAgICAgPSB0bXBfcGFyYW1zLm1vZGU7Ci0JaW5mby0+cGFyYW1zLmxvb3BiYWNrICAgICAgICA9IHRtcF9wYXJhbXMubG9vcGJhY2s7Ci0JaW5mby0+cGFyYW1zLmZsYWdzICAgICAgICAgICA9IHRtcF9wYXJhbXMuZmxhZ3M7Ci0JaW5mby0+cGFyYW1zLmVuY29kaW5nICAgICAgICA9IHRtcF9wYXJhbXMuZW5jb2Rpbmc7Ci0JaW5mby0+cGFyYW1zLmNsb2NrX3NwZWVkICAgICA9IHRtcF9wYXJhbXMuY2xvY2tfc3BlZWQ7Ci0JaW5mby0+cGFyYW1zLmFkZHJfZmlsdGVyICAgICA9IHRtcF9wYXJhbXMuYWRkcl9maWx0ZXI7Ci0JaW5mby0+cGFyYW1zLmNyY190eXBlICAgICAgICA9IHRtcF9wYXJhbXMuY3JjX3R5cGU7Ci0JaW5mby0+cGFyYW1zLnByZWFtYmxlX2xlbmd0aCA9IHRtcF9wYXJhbXMucHJlYW1ibGVfbGVuZ3RoOwotCWluZm8tPnBhcmFtcy5wcmVhbWJsZSAgICAgICAgPSB0bXBfcGFyYW1zLnByZWFtYmxlOwotCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfcmF0ZTsKLQlpbmZvLT5wYXJhbXMuZGF0YV9iaXRzICAgICAgID0gdG1wX3BhcmFtcy5kYXRhX2JpdHM7Ci0JaW5mby0+cGFyYW1zLnN0b3BfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuc3RvcF9iaXRzOwotCWluZm8tPnBhcmFtcy5wYXJpdHkgICAgICAgICAgPSB0bXBfcGFyYW1zLnBhcml0eTsKKwlpZiAodG1wX3BhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9CQVNFX0NMT0NLKSB7CisJCWluZm8tPmJhc2VfY2xvY2sgPSB0bXBfcGFyYW1zLmNsb2NrX3NwZWVkOworCX0gZWxzZSB7CisJCWluZm8tPnBhcmFtcy5tb2RlICAgICAgICAgICAgPSB0bXBfcGFyYW1zLm1vZGU7CisJCWluZm8tPnBhcmFtcy5sb29wYmFjayAgICAgICAgPSB0bXBfcGFyYW1zLmxvb3BiYWNrOworCQlpbmZvLT5wYXJhbXMuZmxhZ3MgICAgICAgICAgID0gdG1wX3BhcmFtcy5mbGFnczsKKwkJaW5mby0+cGFyYW1zLmVuY29kaW5nICAgICAgICA9IHRtcF9wYXJhbXMuZW5jb2Rpbmc7CisJCWluZm8tPnBhcmFtcy5jbG9ja19zcGVlZCAgICAgPSB0bXBfcGFyYW1zLmNsb2NrX3NwZWVkOworCQlpbmZvLT5wYXJhbXMuYWRkcl9maWx0ZXIgICAgID0gdG1wX3BhcmFtcy5hZGRyX2ZpbHRlcjsKKwkJaW5mby0+cGFyYW1zLmNyY190eXBlICAgICAgICA9IHRtcF9wYXJhbXMuY3JjX3R5cGU7CisJCWluZm8tPnBhcmFtcy5wcmVhbWJsZV9sZW5ndGggPSB0bXBfcGFyYW1zLnByZWFtYmxlX2xlbmd0aDsKKwkJaW5mby0+cGFyYW1zLnByZWFtYmxlICAgICAgICA9IHRtcF9wYXJhbXMucHJlYW1ibGU7CisJCWluZm8tPnBhcmFtcy5kYXRhX3JhdGUgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfcmF0ZTsKKwkJaW5mby0+cGFyYW1zLmRhdGFfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuZGF0YV9iaXRzOworCQlpbmZvLT5wYXJhbXMuc3RvcF9iaXRzICAgICAgID0gdG1wX3BhcmFtcy5zdG9wX2JpdHM7CisJCWluZm8tPnBhcmFtcy5wYXJpdHkgICAgICAgICAgPSB0bXBfcGFyYW1zLnBhcml0eTsKKwl9CiAJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCi0gCWNoYW5nZV9wYXJhbXMoaW5mbyk7CisJcHJvZ3JhbV9odyhpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyOSwxMyArMTIzNCwxMiBAQAogLyoKICAqIHByb2MgZnMgc3VwcG9ydAogICovCi1zdGF0aWMgaW5saW5lIGludCBsaW5lX2luZm8oY2hhciAqYnVmLCBzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkIGxpbmVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBzbGd0X2luZm8gKmluZm8pCiB7CiAJY2hhciBzdGF0X2J1ZlszMF07Ci0JaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JcmV0ID0gc3ByaW50ZihidWYsICIlczogSU89JTA4WCBJUlE9JWQgTWF4RnJhbWVTaXplPSV1XG4iLAorCXNlcV9wcmludGYobSwgIiVzOiBJTz0lMDhYIElSUT0lZCBNYXhGcmFtZVNpemU9JXVcbiIsCiAJCSAgICAgIGluZm8tPmRldmljZV9uYW1lLCBpbmZvLT5waHlzX3JlZ19hZGRyLAogCQkgICAgICBpbmZvLT5pcnFfbGV2ZWwsIGluZm8tPm1heF9mcmFtZV9zaXplKTsKIApAQCAtMTI2MCw3NSArMTI2NCw3MCBAQAogCQlzdHJjYXQoc3RhdF9idWYsICJ8UkkiKTsKIAogCWlmIChpbmZvLT5wYXJhbXMubW9kZSAhPSBNR1NMX01PREVfQVNZTkMpIHsKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlx0SERMQyB0eG9rOiVkIHJ4b2s6JWQiLAorCQlzZXFfcHJpbnRmKG0sICJcdEhETEMgdHhvazolZCByeG9rOiVkIiwKIAkJCSAgICAgICBpbmZvLT5pY291bnQudHhvaywgaW5mby0+aWNvdW50LnJ4b2spOwogCQlpZiAoaW5mby0+aWNvdW50LnR4dW5kZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgdHh1bmRlcjolZCIsIGluZm8tPmljb3VudC50eHVuZGVyKTsKIAkJaWYgKGluZm8tPmljb3VudC50eGFib3J0KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4YWJvcnQ6JWQiLCBpbmZvLT5pY291bnQudHhhYm9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhzaG9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsKKwkJCXNlcV9wcmludGYobSwgIiByeHNob3J0OiVkIiwgaW5mby0+aWNvdW50LnJ4c2hvcnQpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4bG9uZykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4bG9uZyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4bG9uZyk7CiAJCWlmIChpbmZvLT5pY291bnQucnhvdmVyKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeG92ZXI6JWQiLCBpbmZvLT5pY291bnQucnhvdmVyKTsKKwkJCXNlcV9wcmludGYobSwgIiByeG92ZXI6JWQiLCBpbmZvLT5pY291bnQucnhvdmVyKTsKIAkJaWYgKGluZm8tPmljb3VudC5yeGNyYykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhjcmM6JWQiLCBpbmZvLT5pY291bnQucnhjcmMpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4Y3JjOiVkIiwgaW5mby0+aWNvdW50LnJ4Y3JjKTsKIAl9IGVsc2UgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXHRBU1lOQyB0eDolZCByeDolZCIsCisJCXNlcV9wcmludGYobSwgIlx0QVNZTkMgdHg6JWQgcng6JWQiLAogCQkJICAgICAgIGluZm8tPmljb3VudC50eCwgaW5mby0+aWNvdW50LnJ4KTsKIAkJaWYgKGluZm8tPmljb3VudC5mcmFtZSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgZmU6JWQiLCBpbmZvLT5pY291bnQuZnJhbWUpOworCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwgaW5mby0+aWNvdW50LmZyYW1lKTsKIAkJaWYgKGluZm8tPmljb3VudC5wYXJpdHkpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHBlOiVkIiwgaW5mby0+aWNvdW50LnBhcml0eSk7CisJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLCBpbmZvLT5pY291bnQucGFyaXR5KTsKIAkJaWYgKGluZm8tPmljb3VudC5icmspCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGJyazolZCIsIGluZm8tPmljb3VudC5icmspOworCQkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsIGluZm8tPmljb3VudC5icmspOwogCQlpZiAoaW5mby0+aWNvdW50Lm92ZXJydW4pCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIG9lOiVkIiwgaW5mby0+aWNvdW50Lm92ZXJydW4pOworCQkJc2VxX3ByaW50ZihtLCAiIG9lOiVkIiwgaW5mby0+aWNvdW50Lm92ZXJydW4pOwogCX0KIAogCS8qIEFwcGVuZCBzZXJpYWwgc2lnbmFsIHN0YXR1cyB0byBlbmQgKi8KLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKKwlzZXFfcHJpbnRmKG0sICIgJXNcbiIsIHN0YXRfYnVmKzEpOwogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlx0dHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAorCXNlcV9wcmludGYobSwgIlx0dHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAogCQkgICAgICAgaW5mby0+dHhfYWN0aXZlLGluZm8tPmJoX3JlcXVlc3RlZCxpbmZvLT5iaF9ydW5uaW5nLAogCQkgICAgICAgaW5mby0+cGVuZGluZ19iaCk7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAvKiBDYWxsZWQgdG8gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlcwogICovCi1zdGF0aWMgaW50IHJlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzeW5jbGlua19ndF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwLCBsOwotCW9mZl90CWJlZ2luID0gMDsKIAlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInN5bmNsaW5rX2d0IGRyaXZlclxuIik7CisJc2VxX3B1dHMobSwgInN5bmNsaW5rX2d0IGRyaXZlclxuIik7CiAKIAlpbmZvID0gc2xndF9kZXZpY2VfbGlzdDsKIAl3aGlsZSggaW5mbyApIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCBpbmZvKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJbGluZV9pbmZvKG0sIGluZm8pOwogCQlpbmZvID0gaW5mby0+bmV4dF9kZXZpY2U7CiAJfQotCi0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3luY2xpbmtfZ3RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzeW5jbGlua19ndF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jbGlua19ndF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN5bmNsaW5rX2d0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoKICAqIHJldHVybiBjb3VudCBvZiBieXRlcyBpbiB0cmFuc21pdCBidWZmZXIKICAqLwpAQCAtMjU2NSwxMCArMjU2NCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7Ci0JbWVtY3B5KCZpbmZvLT5wYXJhbXMsICZ0bXBfcGFyYW1zLCBzaXplb2YoTUdTTF9QQVJBTVMpKTsKKwlpZiAodG1wX3BhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9CQVNFX0NMT0NLKQorCQlpbmZvLT5iYXNlX2Nsb2NrID0gdG1wX3BhcmFtcy5jbG9ja19zcGVlZDsKKwllbHNlCisJCW1lbWNweSgmaW5mby0+cGFyYW1zLCAmdG1wX3BhcmFtcywgc2l6ZW9mKE1HU0xfUEFSQU1TKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCi0gCWNoYW5nZV9wYXJhbXMoaW5mbyk7CisJcHJvZ3JhbV9odyhpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQzOCw2ICszNDQwLDcgQEAKIAkJaW5mby0+bWFnaWMgPSBNR1NMX01BR0lDOwogCQlJTklUX1dPUksoJmluZm8tPnRhc2ssIGJoX2hhbmRsZXIpOwogCQlpbmZvLT5tYXhfZnJhbWVfc2l6ZSA9IDQwOTY7CisJCWluZm8tPmJhc2VfY2xvY2sgPSAxNDc0NTYwMDsKIAkJaW5mby0+cmJ1Zl9maWxsX2xldmVsID0gRE1BQlVGU0laRTsKIAkJaW5mby0+cG9ydC5jbG9zZV9kZWxheSA9IDUqSFovMTA7CiAJCWluZm8tPnBvcnQuY2xvc2luZ193YWl0ID0gMzAqSFo7CkBAIC0zNTYyLDEzICszNTY1LDEzIEBACiAJLnNlbmRfeGNoYXIgPSBzZW5kX3hjaGFyLAogCS5icmVha19jdGwgPSBzZXRfYnJlYWssCiAJLndhaXRfdW50aWxfc2VudCA9IHdhaXRfdW50aWxfc2VudCwKLSAJLnJlYWRfcHJvYyA9IHJlYWRfcHJvYywKIAkuc2V0X3Rlcm1pb3MgPSBzZXRfdGVybWlvcywKIAkuc3RvcCA9IHR4X2hvbGQsCiAJLnN0YXJ0ID0gdHhfcmVsZWFzZSwKIAkuaGFuZ3VwID0gaGFuZ3VwLAogCS50aW9jbWdldCA9IHRpb2NtZ2V0LAogCS50aW9jbXNldCA9IHRpb2Ntc2V0LAorCS5wcm9jX2ZvcHMgPSAmc3luY2xpbmtfZ3RfcHJvY19mb3BzLAogfTsKIAogc3RhdGljIHZvaWQgc2xndF9jbGVhbnVwKHZvaWQpCkBAIC0zNzg1LDcgKzM3ODgsNyBAQAogc3RhdGljIHZvaWQgc2V0X3JhdGUoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgdTMyIHJhdGUpCiB7CiAJdW5zaWduZWQgaW50IGRpdjsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9zYyA9IDE0NzQ1NjAwOworCXVuc2lnbmVkIGludCBvc2MgPSBpbmZvLT5iYXNlX2Nsb2NrOwogCiAJLyogZGl2ID0gb3NjL3JhdGUgLSAxCiAJICoKQEAgLTQwODksMTggKzQwOTIsMjcgQEAKIAkgKiAwNiAgQ1RTICAgICAgSVJRIGVuYWJsZQogCSAqIDA1ICBEQ0QgICAgICBJUlEgZW5hYmxlCiAJICogMDQgIFJJICAgICAgIElSUSBlbmFibGUKLQkgKiAwMyAgcmVzZXJ2ZWQsIG11c3QgYmUgemVybworCSAqIDAzICAwPTE2eCBzYW1wbGluZywgMT04eCBzYW1wbGluZwogCSAqIDAyICAxPXR4ZC0+cnhkIGludGVybmFsIGxvb3BiYWNrIGVuYWJsZQogCSAqIDAxICByZXNlcnZlZCwgbXVzdCBiZSB6ZXJvCiAJICogMDAgIDE9bWFzdGVyIElSUSBlbmFibGUKIAkgKi8KIAl2YWwgPSBCSVQxNSArIEJJVDE0ICsgQklUMDsKKwkvKiBKQ1JbOF0gOiAxID0geDggYXN5bmMgbW9kZSBmZWF0dXJlIGF2YWlsYWJsZSAqLworCWlmICgocmRfcmVnMzIoaW5mbywgSkNSKSAmIEJJVDgpICYmIGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgJiYKKwkgICAgKChpbmZvLT5iYXNlX2Nsb2NrIDwgKGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgKiAxNikpIHx8CisJICAgICAoaW5mby0+YmFzZV9jbG9jayAlIChpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogMTYpKSkpIHsKKwkJLyogdXNlIDh4IHNhbXBsaW5nICovCisJCXZhbCB8PSBCSVQzOworCQlzZXRfcmF0ZShpbmZvLCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogOCk7CisJfSBlbHNlIHsKKwkJLyogdXNlIDE2eCBzYW1wbGluZyAqLworCQlzZXRfcmF0ZShpbmZvLCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogMTYpOworCX0KIAl3cl9yZWcxNihpbmZvLCBTQ1IsIHZhbCk7CiAKIAlzbGd0X2lycV9vbihpbmZvLCBJUlFfUlhCUkVBSyB8IElSUV9SWE9WRVIpOwogCi0Jc2V0X3JhdGUoaW5mbywgaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAqIDE2KTsKLQogCWlmIChpbmZvLT5wYXJhbXMubG9vcGJhY2spCiAJCWVuYWJsZV9sb29wYmFjayhpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDhlYjZjODkuLjI2ZGU2MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtNTIwLDcgKzUyMSw2IEBACiBzdGF0aWMgdm9pZCB0eF9yZWxlYXNlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCiBzdGF0aWMgaW50ICBpb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCAgcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsaW50ICplb2YsIHZvaWQgKmRhdGEpOwogc3RhdGljIGludCAgY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogc3RhdGljIHZvaWQgdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CkBAIC0xMzU0LDEzICsxMzU0LDEyIEBACiAgKiAvcHJvYyBmcyByb3V0aW5lcy4uLi4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBsaW5lX2luZm8oY2hhciAqYnVmLCBTTE1QX0lORk8gKmluZm8pCitzdGF0aWMgaW5saW5lIHZvaWQgbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgU0xNUF9JTkZPICppbmZvKQogewogCWNoYXIJc3RhdF9idWZbMzBdOwotCWludAlyZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IHNwcmludGYoYnVmLCAiJXM6IFNDQUJhc2U9JTA4eCBNZW09JTA4WCBTdGF0dXNDb250cm9sPSUwOHggTENSPSUwOFhcbiIKKwlzZXFfcHJpbnRmKG0sICIlczogU0NBQmFzZT0lMDh4IE1lbT0lMDhYIFN0YXR1c0NvbnRyb2w9JTA4eCBMQ1I9JTA4WFxuIgogCQkgICAgICAgIlx0SVJRPSVkIE1heEZyYW1lU2l6ZT0ldVxuIiwKIAkJaW5mby0+ZGV2aWNlX25hbWUsCiAJCWluZm8tPnBoeXNfc2NhX2Jhc2UsCkBAIC0xMzkxLDc1ICsxMzkwLDcwIEBACiAJCXN0cmNhdChzdGF0X2J1ZiwgInxSSSIpOwogCiAJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9IRExDKSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcdEhETEMgdHhvazolZCByeG9rOiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiXHRIRExDIHR4b2s6JWQgcnhvazolZCIsCiAJCQkgICAgICBpbmZvLT5pY291bnQudHhvaywgaW5mby0+aWNvdW50LnJ4b2spOwogCQlpZiAoaW5mby0+aWNvdW50LnR4dW5kZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgdHh1bmRlcjolZCIsIGluZm8tPmljb3VudC50eHVuZGVyKTsKIAkJaWYgKGluZm8tPmljb3VudC50eGFib3J0KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4YWJvcnQ6JWQiLCBpbmZvLT5pY291bnQudHhhYm9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhzaG9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsKKwkJCXNlcV9wcmludGYobSwgIiByeHNob3J0OiVkIiwgaW5mby0+aWNvdW50LnJ4c2hvcnQpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4bG9uZykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4bG9uZyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4bG9uZyk7CiAJCWlmIChpbmZvLT5pY291bnQucnhvdmVyKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeG92ZXI6JWQiLCBpbmZvLT5pY291bnQucnhvdmVyKTsKKwkJCXNlcV9wcmludGYobSwgIiByeG92ZXI6JWQiLCBpbmZvLT5pY291bnQucnhvdmVyKTsKIAkJaWYgKGluZm8tPmljb3VudC5yeGNyYykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4Y3JjKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhjcmMpOwogCX0gZWxzZSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcdEFTWU5DIHR4OiVkIHJ4OiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiXHRBU1lOQyB0eDolZCByeDolZCIsCiAJCQkgICAgICBpbmZvLT5pY291bnQudHgsIGluZm8tPmljb3VudC5yeCk7CiAJCWlmIChpbmZvLT5pY291bnQuZnJhbWUpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGZlOiVkIiwgaW5mby0+aWNvdW50LmZyYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CiAJCWlmIChpbmZvLT5pY291bnQucGFyaXR5KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOworCQkJc2VxX3ByaW50ZihtLCAiIHBlOiVkIiwgaW5mby0+aWNvdW50LnBhcml0eSk7CiAJCWlmIChpbmZvLT5pY291bnQuYnJrKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBicms6JWQiLCBpbmZvLT5pY291bnQuYnJrKTsKKwkJCXNlcV9wcmludGYobSwgIiBicms6JWQiLCBpbmZvLT5pY291bnQuYnJrKTsKIAkJaWYgKGluZm8tPmljb3VudC5vdmVycnVuKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBvZTolZCIsIGluZm8tPmljb3VudC5vdmVycnVuKTsKKwkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsIGluZm8tPmljb3VudC5vdmVycnVuKTsKIAl9CiAKIAkvKiBBcHBlbmQgc2VyaWFsIHNpZ25hbCBzdGF0dXMgdG8gZW5kICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CisJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcdHR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKKwlzZXFfcHJpbnRmKG0sICJcdHR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKIAkgaW5mby0+dHhfYWN0aXZlLGluZm8tPmJoX3JlcXVlc3RlZCxpbmZvLT5iaF9ydW5uaW5nLAogCSBpbmZvLT5wZW5kaW5nX2JoKTsKLQotCXJldHVybiByZXQ7CiB9CiAKIC8qIENhbGxlZCB0byBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBkZXZpY2VzCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHN5bmNsaW5rbXBfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMCwgbDsKLQlvZmZfdAliZWdpbiA9IDA7CiAJU0xNUF9JTkZPICppbmZvOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInN5bmNsaW5rbXAgZHJpdmVyOiVzXG4iLCBkcml2ZXJfdmVyc2lvbik7CisJc2VxX3ByaW50ZihtLCAic3luY2xpbmttcCBkcml2ZXI6JXNcbiIsIGRyaXZlcl92ZXJzaW9uKTsKIAogCWluZm8gPSBzeW5jbGlua21wX2RldmljZV9saXN0OwogCXdoaWxlKCBpbmZvICkgewotCQlsID0gbGluZV9pbmZvKHBhZ2UgKyBsZW4sIGluZm8pOwotCQlsZW4gKz0gbDsKLQkJaWYgKGxlbitiZWdpbiA+IG9mZitjb3VudCkKLQkJCWdvdG8gZG9uZTsKLQkJaWYgKGxlbitiZWdpbiA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuOwotCQkJbGVuID0gMDsKLQkJfQorCQlsaW5lX2luZm8obSwgaW5mbyk7CiAJCWluZm8gPSBpbmZvLT5uZXh0X2RldmljZTsKIAl9Ci0KLQkqZW9mID0gMTsKLWRvbmU6Ci0JaWYgKG9mZiA+PSBsZW4rYmVnaW4pCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbi1vZmYpID8gY291bnQgOiBiZWdpbitsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzeW5jbGlua21wX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3luY2xpbmttcF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jbGlua21wX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc3luY2xpbmttcF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qIFJldHVybiB0aGUgY291bnQgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyCiAgKi8KIHN0YXRpYyBpbnQgY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0zOTA1LDEzICszODk5LDEzIEBACiAJLnNlbmRfeGNoYXIgPSBzZW5kX3hjaGFyLAogCS5icmVha19jdGwgPSBzZXRfYnJlYWssCiAJLndhaXRfdW50aWxfc2VudCA9IHdhaXRfdW50aWxfc2VudCwKLSAJLnJlYWRfcHJvYyA9IHJlYWRfcHJvYywKIAkuc2V0X3Rlcm1pb3MgPSBzZXRfdGVybWlvcywKIAkuc3RvcCA9IHR4X2hvbGQsCiAJLnN0YXJ0ID0gdHhfcmVsZWFzZSwKIAkuaGFuZ3VwID0gaGFuZ3VwLAogCS50aW9jbWdldCA9IHRpb2NtZ2V0LAogCS50aW9jbXNldCA9IHRpb2Ntc2V0LAorCS5wcm9jX2ZvcHMgPSAmc3luY2xpbmttcF9wcm9jX2ZvcHMsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeXNycS5jIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKaW5kZXggMzNhOTM1MS4uZWJlYTliMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5c3JxLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5c3JxLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvb29tLmg+CiAKQEAgLTM0Niw2ICszNDYsMTkgQEAKIAkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfU0lHTkFMLAogfTsKIAorI2lmZGVmIENPTkZJR19CTE9DSworc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3RoYXcoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwllbWVyZ2VuY3lfdGhhd19hbGwoKTsKK30KK3N0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3RoYXdfb3AgPSB7CisJLmhhbmRsZXIJPSBzeXNycV9oYW5kbGVfdGhhdywKKwkuaGVscF9tc2cJPSAidGhhdy1maWxlc3lzdGVtcyhKKSIsCisJLmFjdGlvbl9tc2cJPSAiRW1lcmdlbmN5IFRoYXcgb2YgYWxsIGZyb3plbiBmaWxlc3lzdGVtcyIsCisJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX1NJR05BTCwKK307CisjZW5kaWYKKwogc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX2tpbGwoaW50IGtleSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzZW5kX3NpZ19hbGwoU0lHS0lMTCk7CkBAIC0zOTYsOSArNDA5LDEzIEBACiAJJnN5c3JxX21vb21fb3AsCQkJLyogZiAqLwogCS8qIGc6IE1heSBiZSByZWdpc3RlcmVkIGJ5IHBwYyBmb3Iga2dkYiAqLwogCU5VTEwsCQkJCS8qIGcgKi8KLQlOVUxMLAkJCQkvKiBoICovCisJTlVMTCwJCQkJLyogaCAtIHJlc2VydmVkIGZvciBoZWxwICovCiAJJnN5c3JxX2tpbGxfb3AsCQkJLyogaSAqLworI2lmZGVmIENPTkZJR19CTE9DSworCSZzeXNycV90aGF3X29wLAkJCS8qIGogKi8KKyNlbHNlCiAJTlVMTCwJCQkJLyogaiAqLworI2VuZGlmCiAJJnN5c3JxX1NBS19vcCwJCQkvKiBrICovCiAjaWZkZWYgQ09ORklHX1NNUAogCSZzeXNycV9zaG93YWxsY3B1c19vcCwJCS8qIGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYyBiL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYwppbmRleCAzNGFiNmQ3Li41NWJhNmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jCkBAIC0xMCw4ICsxMCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KIAogc3RydWN0IHR0eV9hdWRpdF9idWYgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IDIyNGYyNzEuLjY2Yjk5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAkJfQogCX0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+d3JpdGVfd2FpdCwgUE9MTE9VVCk7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV93YWtldXApOwpAQCAtNTg3LDggKzU4Nyw4IEBACiAJICogRklYTUU6IE9uY2Ugd2UgdHJ1c3QgdGhlIExESVNDIGNvZGUgYmV0dGVyIHdlIGNhbiB3YWl0IGhlcmUgZm9yCiAJICogbGRpc2MgY29tcGxldGlvbiBhbmQgZml4IHRoZSBkcml2ZXIgY2FsbCByYWNlCiAJICovCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5yZWFkX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZ0dHktPndyaXRlX3dhaXQsIFBPTExPVVQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZ0dHktPnJlYWRfd2FpdCwgUE9MTElOKTsKIAkvKgogCSAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvCiAJICogTl9UVFkuCkBAIC04NzksNyArODc5LDcgQEAKIAlpZiAodHR5LT5saW5rICYmIHR0eS0+bGluay0+cGFja2V0KSB7CiAJCXR0eS0+Y3RybF9zdGF0dXMgJj0gflRJT0NQS1RfU1RBUlQ7CiAJCXR0eS0+Y3RybF9zdGF0dXMgfD0gVElPQ1BLVF9TVE9QOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+bGluay0+cmVhZF93YWl0KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+bGluay0+cmVhZF93YWl0LCBQT0xMSU4pOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmN0cmxfbG9jaywgZmxhZ3MpOwogCWlmICh0dHktPm9wcy0+c3RvcCkKQEAgLTkxMyw3ICs5MTMsNyBAQAogCWlmICh0dHktPmxpbmsgJiYgdHR5LT5saW5rLT5wYWNrZXQpIHsKIAkJdHR5LT5jdHJsX3N0YXR1cyAmPSB+VElPQ1BLVF9TVE9QOwogCQl0dHktPmN0cmxfc3RhdHVzIHw9IFRJT0NQS1RfU1RBUlQ7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5saW5rLT5yZWFkX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHR5LT5saW5rLT5yZWFkX3dhaXQsIFBPTExJTik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CiAJaWYgKHR0eS0+b3BzLT5zdGFydCkKQEAgLTk3MCw3ICs5NzAsNyBAQAogdm9pZCB0dHlfd3JpdGVfdW5sb2NrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJbXV0ZXhfdW5sb2NrKCZ0dHktPmF0b21pY193cml0ZV9sb2NrKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+d3JpdGVfd2FpdCwgUE9MTE9VVCk7CiB9CiAKIGludCB0dHlfd3JpdGVfbG9jayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbmRlbGF5KQpAQCAtMTYyMywyMSArMTYyMywyMSBAQAogCiAJCWlmICh0dHlfY2xvc2luZykgewogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnR0eS0+cmVhZF93YWl0KSkgewotCQkJCXdha2VfdXAoJnR0eS0+cmVhZF93YWl0KTsKKwkJCQl3YWtlX3VwX3BvbGwoJnR0eS0+cmVhZF93YWl0LCBQT0xMSU4pOwogCQkJCWRvX3NsZWVwKys7CiAJCQl9CiAJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdHR5LT53cml0ZV93YWl0KSkgewotCQkJCXdha2VfdXAoJnR0eS0+d3JpdGVfd2FpdCk7CisJCQkJd2FrZV91cF9wb2xsKCZ0dHktPndyaXRlX3dhaXQsIFBPTExPVVQpOwogCQkJCWRvX3NsZWVwKys7CiAJCQl9CiAJCX0KIAkJaWYgKG9fdHR5X2Nsb3NpbmcpIHsKIAkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZvX3R0eS0+cmVhZF93YWl0KSkgewotCQkJCXdha2VfdXAoJm9fdHR5LT5yZWFkX3dhaXQpOworCQkJCXdha2VfdXBfcG9sbCgmb190dHktPnJlYWRfd2FpdCwgUE9MTElOKTsKIAkJCQlkb19zbGVlcCsrOwogCQkJfQogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm9fdHR5LT53cml0ZV93YWl0KSkgewotCQkJCXdha2VfdXAoJm9fdHR5LT53cml0ZV93YWl0KTsKKwkJCQl3YWtlX3VwX3BvbGwoJm9fdHR5LT53cml0ZV93YWl0LCBQT0xMT1VUKTsKIAkJCQlkb19zbGVlcCsrOwogCQkJfQogCQl9CkBAIC0xNzU4LDcgKzE3NTgsNyBAQAogCXN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXI7CiAJaW50IGluZGV4OwogCWRldl90IGRldmljZSA9IGlub2RlLT5pX3JkZXY7Ci0JdW5zaWduZWQgc2hvcnQgc2F2ZWRfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOworCXVuc2lnbmVkIHNhdmVkX2ZsYWdzID0gZmlscC0+Zl9mbGFnczsKIAogCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogCkBAIC0yNjgxLDcgKzI2ODEsNyBAQAogCS8qIEtpbGwgdGhlIGVudGlyZSBzZXNzaW9uICovCiAJZG9fZWFjaF9waWRfdGFzayhzZXNzaW9uLCBQSURUWVBFX1NJRCwgcCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNBSzoga2lsbGVkIHByb2Nlc3MgJWQiCi0JCQkiICglcyk6IHRhc2tfc2Vzc2lvbl9ucihwKT09dHR5LT5zZXNzaW9uXG4iLAorCQkJIiAoJXMpOiB0YXNrX3Nlc3Npb24ocCk9PXR0eS0+c2Vzc2lvblxuIiwKIAkJCXRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgcCwgMSk7CiAJfSB3aGlsZV9lYWNoX3BpZF90YXNrKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKQEAgLTI2OTEsNyArMjY5MSw3IEBACiAJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQlpZiAocC0+c2lnbmFsLT50dHkgPT0gdHR5KSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNBSzoga2lsbGVkIHByb2Nlc3MgJWQiCi0JCQkgICAgIiAoJXMpOiB0YXNrX3Nlc3Npb25fbnIocCk9PXR0eS0+c2Vzc2lvblxuIiwKKwkJCSAgICAiICglcyk6IHRhc2tfc2Vzc2lvbihwKT09dHR5LT5zZXNzaW9uXG4iLAogCQkJICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJCXNlbmRfc2lnKFNJR0tJTEwsIHAsIDEpOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKaW5kZXggN2E4NGI0MC4uZjc4ZjViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2cHRzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaGlmbl83OTV4LmMgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwppbmRleCAwYzc5ZmU3Li40ZDg1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYworKysgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwpAQCAtMTg4Miw3ICsxODgyLDcgQEAKIAogc3RhdGljIHZvaWQgaGlmbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IGhpZm5fZGV2aWNlLCB3b3JrKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXNldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKaW5kZXggZDllNzUxYi4uYWY5NzYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAJdTMyIHBoeXNfYWRkcjsKIAl1MzIgX19yZXNlcnZlZFs0XTsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKm5leHQ7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwogfTsKIAogc3RydWN0IGNyeXB0X2N0bCB7CkBAIC0xMzIsMTQgKzEzMywxMCBAQAogc3RydWN0IGFibGtfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKnNyYzsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmRzdDsKLQl1bnNpZ25lZCBzcmNfbmVudHM7Ci0JdW5zaWduZWQgZHN0X25lbnRzOwogfTsKIAogc3RydWN0IGFlYWRfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCBhc3NvY19uZW50czsKLQl1bnNpZ25lZCBzaG9ydCBzcmNfbmVudHM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGl2bGlzdDsKIAkvKiB1c2VkIHdoZW4gdGhlIGhtYWMgaXMgbm90IG9uIG9uZSBzZyBlbnRyeSAqLwogCXU4ICpobWFjX3ZpcnQ7CkBAIC0zMTIsNyArMzA5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBidWZmZXJfZGVzYyAqYnVmLCB1MzIgcGh5cykKK3N0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsdTMyIHBoeXMpCiB7CiAJd2hpbGUgKGJ1ZikgewogCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZjE7CkBAIC0zMjAsNiArMzE3LDcgQEAKIAogCQlidWYxID0gYnVmLT5uZXh0OwogCQlwaHlzMSA9IGJ1Zi0+cGh5c19uZXh0OworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYnVmLT5waHlzX25leHQsIGJ1Zi0+YnVmX2xlbiwgYnVmLT5kaXIpOwogCQlkbWFfcG9vbF9mcmVlKGJ1ZmZlcl9wb29sLCBidWYsIHBoeXMpOwogCQlidWYgPSBidWYxOwogCQlwaHlzID0gcGh5czE7CkBAIC0zNDgsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4OwogCWludCBmYWlsZWQ7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCiAJZmFpbGVkID0gcGh5cyAmIDB4MSA/IC1FQkFETVNHIDogMDsKIAlwaHlzICY9IH4weDM7CkBAIC0zNTgsMTMgKzM1NSw4IEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FFQUQ6IHsKIAkJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWVhZF9yZXE7CiAJCXN0cnVjdCBhZWFkX2N0eCAqcmVxX2N0eCA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5hc3NvYywgcmVxX2N0eC0+YXNzb2NfbmVudHMsCi0JCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywKLQkJCQlETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CiAJCWlmIChyZXFfY3R4LT5obWFjX3ZpcnQpIHsKIAkJCWZpbmlzaF9zY2F0dGVyZWRfaG1hYyhjcnlwdCk7CiAJCX0KQEAgLTM3NCwxNiArMzY2LDExIEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FCTEs6IHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWJsa19yZXE7CiAJCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKLQkJaW50IG5lbnRzOworCiAJCWlmIChyZXFfY3R4LT5kc3QpIHsKLQkJCW5lbnRzID0gcmVxX2N0eC0+ZHN0X25lbnRzOwotCQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7Ci0JCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJCX0KLQkJbmVudHMgPSByZXFfY3R4LT5zcmNfbmVudHM7Ci0JCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+c3JjLCBuZW50cywgc3JjX2RpcmVjdGlvbik7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOworCQlmcmVlX2J1Zl9jaGFpbihkZXYsIHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOwogCQlyZXEtPmJhc2UuY29tcGxldGUoJnJlcS0+YmFzZSwgZmFpbGVkKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzUwLDU2ICs3MzcsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3VudF9zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmJ5dGVzKQorc3RhdGljIHN0cnVjdCBidWZmZXJfZGVzYyAqY2hhaW51cF9idWZmZXJzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywJdW5zaWduZWQgbmJ5dGVzLAorCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZiwgZ2ZwX3QgZmxhZ3MsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBuYnl0ZXMgPiAwOyBpKyssIHNnID0gc2dfbmV4dChzZykpCi0JCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOwotCXJldHVybiBpOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9kZXNjICpjaGFpbnVwX2J1ZmZlcnMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCXVuc2lnbmVkIG5ieXRlcywgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsIGdmcF90IGZsYWdzKQotewotCWludCBuZW50cyA9IDA7Ci0KLQl3aGlsZSAobmJ5dGVzID4gMCkgeworCWZvciAoO25ieXRlcyA+IDA7IHNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZykpIHsKKwkJdW5zaWduZWQgbGVuID0gbWluKG5ieXRlcywgc2ctPmxlbmd0aCk7CiAJCXN0cnVjdCBidWZmZXJfZGVzYyAqbmV4dF9idWY7CiAJCXUzMiBuZXh0X2J1Zl9waHlzOwotCQl1bnNpZ25lZCBsZW4gPSBtaW4obmJ5dGVzLCBzZ19kbWFfbGVuKHNnKSk7CisJCXZvaWQgKnB0cjsKIAotCQluZW50cysrOwogCQluYnl0ZXMgLT0gbGVuOwotCQlpZiAoIWJ1Zi0+cGh5c19hZGRyKSB7Ci0JCQlidWYtPnBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJCWJ1Zi0+YnVmX2xlbiA9IGxlbjsKLQkJCWJ1Zi0+bmV4dCA9IE5VTEw7Ci0JCQlidWYtPnBoeXNfbmV4dCA9IDA7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQkJLyogVHdvIGNvbnNlY3V0aXZlIGNodW5rcyBvbiBvbmUgcGFnZSBtYXkgYmUgaGFuZGxlZCBieSB0aGUgb2xkCi0JCSAqIGJ1ZmZlciBkZXNjcmlwdG9yLCBpbmNyZWFzZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG9uZQotCQkgKi8KLQkJaWYgKHNnX2RtYV9hZGRyZXNzKHNnKSA9PSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbikgewotCQkJYnVmLT5idWZfbGVuICs9IGxlbjsKLQkJCWdvdG8gbmV4dDsKLQkJfQorCQlwdHIgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJbmV4dF9idWYgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsICZuZXh0X2J1Zl9waHlzKTsKLQkJaWYgKCFuZXh0X2J1ZikKLQkJCXJldHVybiBOVUxMOworCQlpZiAoIW5leHRfYnVmKSB7CisJCQlidWYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwdHIsIGxlbiwgZGlyKTsKIAkJYnVmLT5uZXh0ID0gbmV4dF9idWY7CiAJCWJ1Zi0+cGh5c19uZXh0ID0gbmV4dF9idWZfcGh5czsKLQogCQlidWYgPSBuZXh0X2J1ZjsKLQkJYnVmLT5uZXh0ID0gTlVMTDsKLQkJYnVmLT5waHlzX25leHQgPSAwOworCiAJCWJ1Zi0+cGh5c19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlidWYtPmJ1Zl9sZW4gPSBsZW47Ci1uZXh0OgotCQlpZiAobmJ5dGVzID4gMCkgewotCQkJc2cgPSBzZ19uZXh0KHNnKTsKLQkJfQorCQlidWYtPmRpciA9IGRpcjsKIAl9CisJYnVmLT5uZXh0ID0gTlVMTDsKKwlidWYtPnBoeXNfbmV4dCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtODYwLDEyICs4MjYsMTIgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBpeHBfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAl1bnNpZ25lZCBpdnNpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUodGZtKTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgaXhfc2FfZGlyICpkaXI7CiAJc3RydWN0IGNyeXB0X2N0bCAqY3J5cHQ7Ci0JdW5zaWduZWQgaW50IG5ieXRlcyA9IHJlcS0+bmJ5dGVzLCBuZW50czsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gcmVxLT5uYnl0ZXM7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2Mgc3JjX2hvb2s7CiAJZ2ZwX3QgZmxhZ3MgPSByZXEtPmJhc2UuZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAgPwogCQkJCUdGUF9LRVJORUwgOiBHRlBfQVRPTUlDOwogCkBAIC04NzgsNyArODQ0LDcgQEAKIAogCWNyeXB0ID0gZ2V0X2NyeXB0X2Rlc2MoKTsKIAlpZiAoIWNyeXB0KQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCWNyeXB0LT5kYXRhLmFibGtfcmVxID0gcmVxOwogCWNyeXB0LT5jcnlwdG9fY3R4ID0gZGlyLT5ucGVfY3R4X3BoeXM7CkBAIC04OTEsNTMgKzg1Nyw0MSBAQAogCUJVR19PTihpdnNpemUgJiYgIXJlcS0+aW5mbyk7CiAJbWVtY3B5KGNyeXB0LT5pdiwgcmVxLT5pbmZvLCBpdnNpemUpOwogCWlmIChyZXEtPnNyYyAhPSByZXEtPmRzdCkgeworCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgZHN0X2hvb2s7CiAJCWNyeXB0LT5tb2RlIHw9IE5QRV9PUF9OT1RfSU5fUExBQ0U7Ci0JCW5lbnRzID0gY291bnRfc2cocmVxLT5kc3QsIG5ieXRlcyk7CiAJCS8qIFRoaXMgd2FzIG5ldmVyIHRlc3RlZCBieSBJbnRlbAogCQkgKiBmb3IgbW9yZSB0aGFuIG9uZSBkc3QgYnVmZmVyLCBJIHRoaW5rLiAqLwotCQlCVUdfT04obmVudHMgIT0gMSk7Ci0JCXJlcV9jdHgtPmRzdF9uZW50cyA9IG5lbnRzOwotCQlkbWFfbWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlyZXFfY3R4LT5kc3QgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsJmNyeXB0LT5kc3RfYnVmKTsKLQkJaWYgKCFyZXFfY3R4LT5kc3QpCi0JCQlnb3RvIHVubWFwX3NnX2Rlc3Q7Ci0JCXJlcV9jdHgtPmRzdC0+cGh5c19hZGRyID0gMDsKLQkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMocmVxLT5kc3QsIG5ieXRlcywgcmVxX2N0eC0+ZHN0LCBmbGFncykpCisJCUJVR19PTihyZXEtPmRzdC0+bGVuZ3RoIDwgbmJ5dGVzKTsKKwkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKKwkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmRzdCwgbmJ5dGVzLCAmZHN0X2hvb2ssCisJCQkJCWZsYWdzLCBETUFfRlJPTV9ERVZJQ0UpKQogCQkJZ290byBmcmVlX2J1Zl9kZXN0OwogCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJcmVxX2N0eC0+ZHN0ID0gZHN0X2hvb2submV4dDsKKwkJY3J5cHQtPmRzdF9idWYgPSBkc3RfaG9vay5waHlzX25leHQ7CiAJfSBlbHNlIHsKIAkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKLQkJcmVxX2N0eC0+ZHN0X25lbnRzID0gMDsKIAl9Ci0JbmVudHMgPSBjb3VudF9zZyhyZXEtPnNyYywgbmJ5dGVzKTsKLQlyZXFfY3R4LT5zcmNfbmVudHMgPSBuZW50czsKLQlkbWFfbWFwX3NnKGRldiwgcmVxLT5zcmMsIG5lbnRzLCBzcmNfZGlyZWN0aW9uKTsKLQotCXJlcV9jdHgtPnNyYyA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPnNyYykKLQkJZ290byB1bm1hcF9zZ19zcmM7Ci0JcmVxX2N0eC0+c3JjLT5waHlzX2FkZHIgPSAwOwotCWlmICghY2hhaW51cF9idWZmZXJzKHJlcS0+c3JjLCBuYnl0ZXMsIHJlcV9jdHgtPnNyYywgZmxhZ3MpKQorCXJlcV9jdHgtPnNyYyA9IE5VTEw7CisJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPnNyYywgbmJ5dGVzLCAmc3JjX2hvb2ssCisJCQkJZmxhZ3MsIHNyY19kaXJlY3Rpb24pKQogCQlnb3RvIGZyZWVfYnVmX3NyYzsKIAorCXJlcV9jdHgtPnNyYyA9IHNyY19ob29rLm5leHQ7CisJY3J5cHQtPnNyY19idWYgPSBzcmNfaG9vay5waHlzX25leHQ7CiAJY3J5cHQtPmN0bF9mbGFncyB8PSBDVExfRkxBR19QRVJGT1JNX0FCTEs7CiAJcW1ncl9wdXRfZW50cnkoU0VORF9RSUQsIGNyeXB0X3ZpcnQycGh5cyhjcnlwdCkpOwogCUJVR19PTihxbWdyX3N0YXRfb3ZlcmZsb3coU0VORF9RSUQpKTsKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwogCiBmcmVlX2J1Zl9zcmM6Ci0JZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+c3JjLCBjcnlwdC0+c3JjX2J1Zik7Ci11bm1hcF9zZ19zcmM6Ci0JZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywgc3JjX2RpcmVjdGlvbik7CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5zcmMsIGNyeXB0LT5zcmNfYnVmKTsKIGZyZWVfYnVmX2Rlc3Q6CiAJaWYgKHJlcS0+c3JjICE9IHJlcS0+ZHN0KSB7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPmRzdCwgY3J5cHQtPmRzdF9idWYpOwotdW5tYXBfc2dfZGVzdDoKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPmRzdF9uZW50cywKLQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJfQogCWNyeXB0LT5jdGxfZmxhZ3MgPSBDVExfRkxBR19VTlVTRUQ7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBhYmxrX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtOTg1LDcgKzkzOSw3IEBACiAJCQlicmVhazsKIAogCQlvZmZzZXQgKz0gc2ctPmxlbmd0aDsKLQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJc2cgPSBzY2F0dGVyd2Fsa19zZ19uZXh0KHNnKTsKIAl9CiAJcmV0dXJuIChzdGFydCArIG5ieXRlcyA+IG9mZnNldCArIHNnLT5sZW5ndGgpOwogfQpAQCAtOTk3LDExICs5NTEsMTAgQEAKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHRmbSk7CiAJdW5zaWduZWQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKHRmbSk7CiAJdW5zaWduZWQgYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pOwotCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBpeF9zYV9kaXIgKmRpcjsKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKLQl1bnNpZ25lZCBpbnQgY3J5cHRsZW4sIG5lbnRzOwotCXN0cnVjdCBidWZmZXJfZGVzYyAqYnVmOworCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1Ziwgc3JjX2hvb2s7CiAJc3RydWN0IGFlYWRfY3R4ICpyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOwogCWdmcF90IGZsYWdzID0gcmVxLT5iYXNlLmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQID8KIAkJCQlHRlBfS0VSTkVMIDogR0ZQX0FUT01JQzsKQEAgLTEwMjIsNyArOTc1LDcgQEAKIAl9CiAJY3J5cHQgPSBnZXRfY3J5cHRfZGVzYygpOwogCWlmICghY3J5cHQpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJY3J5cHQtPmRhdGEuYWVhZF9yZXEgPSByZXE7CiAJY3J5cHQtPmNyeXB0b19jdHggPSBkaXItPm5wZV9jdHhfcGh5czsKQEAgLTEwNDEsMzEgKzk5NCwyNyBAQAogCQlCVUcoKTsgLyogLUVOT1RTVVAgYmVjYXVzZSBvZiBteSBsYXp5bmVzcyAqLwogCX0KIAotCXJlcV9jdHgtPmJ1ZmZlciA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPmJ1ZmZlcikKLQkJZ290byBvdXQ7Ci0JcmVxX2N0eC0+YnVmZmVyLT5waHlzX2FkZHIgPSAwOwogCS8qIEFTU09DIGRhdGEgKi8KLQluZW50cyA9IGNvdW50X3NnKHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOwotCXJlcV9jdHgtPmFzc29jX25lbnRzID0gbmVudHM7Ci0JZG1hX21hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIG5lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbiwgcmVxX2N0eC0+YnVmZmVyLGZsYWdzKTsKKwlidWYgPSBjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuLCAmc3JjX2hvb2ssCisJCWZsYWdzLCBETUFfVE9fREVWSUNFKTsKKwlyZXFfY3R4LT5idWZmZXIgPSBzcmNfaG9vay5uZXh0OworCWNyeXB0LT5zcmNfYnVmID0gc3JjX2hvb2sucGh5c19uZXh0OwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX2Fzc29jOworCQlnb3RvIG91dDsKIAkvKiBJViAqLwogCXNnX2luaXRfdGFibGUoJnJlcV9jdHgtPml2bGlzdCwgMSk7CiAJc2dfc2V0X2J1ZigmcmVxX2N0eC0+aXZsaXN0LCBpdiwgaXZzaXplKTsKLQlkbWFfbWFwX3NnKGRldiwgJnJlcV9jdHgtPml2bGlzdCwgMSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCWJ1ZiA9IGNoYWludXBfYnVmZmVycygmcmVxX2N0eC0+aXZsaXN0LCBpdnNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIGl2c2l6ZSwgYnVmLCBmbGFncywKKwkJCURNQV9CSURJUkVDVElPTkFMKTsKIAlpZiAoIWJ1ZikKLQkJZ290byB1bm1hcF9zZ19pdjsKKwkJZ290byBmcmVlX2NoYWluOwogCWlmICh1bmxpa2VseShobWFjX2luY29uc2lzdGVudChyZXEtPnNyYywgY3J5cHRsZW4sIGF1dGhzaXplKSkpIHsKIAkJLyogVGhlIDEyIGhtYWMgYnl0ZXMgYXJlIHNjYXR0ZXJlZCwKIAkJICogd2UgbmVlZCB0byBjb3B5IHRoZW0gaW50byBhIHNhZmUgYnVmZmVyICovCiAJCXJlcV9jdHgtPmhtYWNfdmlydCA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywKIAkJCQkmY3J5cHQtPmljdl9yZXZfYWVzKTsKIAkJaWYgKHVubGlrZWx5KCFyZXFfY3R4LT5obWFjX3ZpcnQpKQotCQkJZ290byB1bm1hcF9zZ19pdjsKKwkJCWdvdG8gZnJlZV9jaGFpbjsKIAkJaWYgKCFlbmNyeXB0KSB7CiAJCQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmVxX2N0eC0+aG1hY192aXJ0LAogCQkJCXJlcS0+c3JjLCBjcnlwdGxlbiwgYXV0aHNpemUsIDApOwpAQCAtMTA3NSwzMyArMTAyNCwyOCBAQAogCQlyZXFfY3R4LT5obWFjX3ZpcnQgPSBOVUxMOwogCX0KIAkvKiBDcnlwdCAqLwotCW5lbnRzID0gY291bnRfc2cocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUpOwotCXJlcV9jdHgtPnNyY19uZW50cyA9IG5lbnRzOwotCWRtYV9tYXBfc2coZGV2LCByZXEtPnNyYywgbmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsIHJlcS0+c3JjLCBjcnlwdGxlbiArIGF1dGhzaXplLCBidWYsIGZsYWdzLAorCQkJRE1BX0JJRElSRUNUSU9OQUwpOwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX3NyYzsKKwkJZ290byBmcmVlX2htYWNfdmlydDsKIAlpZiAoIXJlcV9jdHgtPmhtYWNfdmlydCkgewogCQljcnlwdC0+aWN2X3Jldl9hZXMgPSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbiAtIGF1dGhzaXplOwogCX0KKwogCWNyeXB0LT5jdGxfZmxhZ3MgfD0gQ1RMX0ZMQUdfUEVSRk9STV9BRUFEOwogCXFtZ3JfcHV0X2VudHJ5KFNFTkRfUUlELCBjcnlwdF92aXJ0MnBoeXMoY3J5cHQpKTsKIAlCVUdfT04ocW1ncl9zdGF0X292ZXJmbG93KFNFTkRfUUlEKSk7CiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsKLXVubWFwX3NnX3NyYzoKLQlkbWFfdW5tYXBfc2coZGV2LCByZXEtPnNyYywgcmVxX2N0eC0+c3JjX25lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CitmcmVlX2htYWNfdmlydDoKIAlpZiAocmVxX2N0eC0+aG1hY192aXJ0KSB7CiAJCWRtYV9wb29sX2ZyZWUoYnVmZmVyX3Bvb2wsIHJlcV9jdHgtPmhtYWNfdmlydCwKIAkJCQljcnlwdC0+aWN2X3Jldl9hZXMpOwogCX0KLXVubWFwX3NnX2l2OgotCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLXVubWFwX3NnX2Fzc29jOgotCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIHJlcV9jdHgtPmFzc29jX25lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlmcmVlX2J1Zl9jaGFpbihyZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKK2ZyZWVfY2hhaW46CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKIG91dDoKIAljcnlwdC0+Y3RsX2ZsYWdzID0gQ1RMX0ZMQUdfVU5VU0VEOwotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgYWVhZF9zZXR1cChzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggNDhlYTU5ZS4uM2IzYzAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC05OCw2ICs5OCwxNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgZW5hYmxlZCBJTlRFTF9JT0FURE1BIG9yIEZTTF9ETUEsIG90aGVyd2lzZQogCSAgc2F5IE4uCiAKK2NvbmZpZyBBU1lOQ19UWF9ETUEKKwlib29sICJBc3luY190eDogT2ZmbG9hZCBzdXBwb3J0IGZvciB0aGUgYXN5bmNfdHggYXBpIgorCWRlcGVuZHMgb24gRE1BX0VOR0lORQorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRoZSBhc3luY190eCBhcGkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb2ZmbG9hZCBlbmdpbmVzIGZvcgorCSAgbWVtY3B5LCBtZW1zZXQsIHhvciwgYW5kIHJhaWQ2IHArcSBvcGVyYXRpb25zLiAgSWYgeW91ciBwbGF0Zm9ybSBoYXMKKwkgIGEgZG1hIGVuZ2luZSB0aGF0IGNhbiBwZXJmb3JtIHJhaWQgb3BlcmF0aW9ucyBhbmQgeW91IGhhdmUgZW5hYmxlZAorCSAgTURfUkFJRDQ1NiBzYXkgWS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIERNQVRFU1QKIAl0cmlzdGF0ZSAiRE1BIFRlc3QgY2xpZW50IgogCWRlcGVuZHMgb24gRE1BX0VOR0lORQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCAyODBhOWQyLi45MjQzOGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtNTA3LDYgKzUwNyw3IEBACiAJCQkgKiBwdWJsaXNoZWQgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IKIAkJCSAqLwogCQkJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spOworCQkJZGV2aWNlLT5wcml2YXRlY250Kys7CiAJCQllcnIgPSBkbWFfY2hhbl9nZXQoY2hhbik7CiAKIAkJCWlmIChlcnIgPT0gLUVOT0RFVikgewpAQCAtNTE4LDYgKzUxOSw4IEBACiAJCQkJICAgICAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGVycik7CiAJCQllbHNlCiAJCQkJYnJlYWs7CisJCQlpZiAoLS1kZXZpY2UtPnByaXZhdGVjbnQgPT0gMCkKKwkJCQlkbWFfY2FwX2NsZWFyKERNQV9QUklWQVRFLCBkZXZpY2UtPmNhcF9tYXNrKTsKIAkJCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCQkJY2hhbiA9IE5VTEw7CiAJCX0KQEAgLTUzNyw2ICs1NDAsOSBAQAogCVdBUk5fT05DRShjaGFuLT5jbGllbnRfY291bnQgIT0gMSwKIAkJICAiY2hhbiByZWZlcmVuY2UgY291bnQgJWQgIT0gMVxuIiwgY2hhbi0+Y2xpZW50X2NvdW50KTsKIAlkbWFfY2hhbl9wdXQoY2hhbik7CisJLyogZHJvcCBQUklWQVRFIGNhcCBlbmFibGVkIGJ5IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgpICovCisJaWYgKC0tY2hhbi0+ZGV2aWNlLT5wcml2YXRlY250ID09IDApCisJCWRtYV9jYXBfY2xlYXIoRE1BX1BSSVZBVEUsIGNoYW4tPmRldmljZS0+Y2FwX21hc2spOwogCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogfQpAQCAtNjAyLDYgKzYwOCwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFlbmdpbmVfcHV0KTsKIAorc3RhdGljIGludCBnZXRfZG1hX2lkKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJjOworCisgaWRyX3JldHJ5OgorCWlmICghaWRyX3ByZV9nZXQoJmRtYV9pZHIsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJcmMgPSBpZHJfZ2V0X25ldygmZG1hX2lkciwgTlVMTCwgJmRldmljZS0+ZGV2X2lkKTsKKwltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKKwlpZiAocmMgPT0gLUVBR0FJTikKKwkJZ290byBpZHJfcmV0cnk7CisJZWxzZSBpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVycyBETUEgZGV2aWNlcyBmb3VuZAogICogQGRldmljZTogJmRtYV9kZXZpY2UKQEAgLTY0MCwyNyArNjY0LDI1IEBACiAJaWRyX3JlZiA9IGttYWxsb2Moc2l6ZW9mKCppZHJfcmVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpZHJfcmVmKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwotIGlkcl9yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZkbWFfaWRyLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOwotCXJjID0gaWRyX2dldF9uZXcoJmRtYV9pZHIsIE5VTEwsICZkZXZpY2UtPmRldl9pZCk7Ci0JbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7Ci0JaWYgKHJjID09IC1FQUdBSU4pCi0JCWdvdG8gaWRyX3JldHJ5OwotCWVsc2UgaWYgKHJjICE9IDApCisJcmMgPSBnZXRfZG1hX2lkKGRldmljZSk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoaWRyX3JlZik7CiAJCXJldHVybiByYzsKKwl9CisKKwlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwogCiAJLyogcmVwcmVzZW50IGNoYW5uZWxzIGluIHN5c2ZzLiBQcm9iYWJseSB3YW50IGRldnMgdG9vICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmZGV2aWNlLT5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQljaGFuLT5sb2NhbCA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmNoYW4tPmxvY2FsKSk7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQotCQkJY29udGludWU7CisJCQlnb3RvIGVycl9vdXQ7CiAJCWNoYW4tPmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFuLT5kZXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNoYW4tPmRldiA9PSBOVUxMKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7Ci0JCQljb250aW51ZTsKKwkJCWNoYW4tPmxvY2FsID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCiAJCWNoYW4tPmNoYW5faWQgPSBjaGFuY250Kys7CkBAIC02NzcsNiArNjk5LDggQEAKIAkJaWYgKHJjKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7CiAJCQljaGFuLT5sb2NhbCA9IE5VTEw7CisJCQlrZnJlZShjaGFuLT5kZXYpOworCQkJYXRvbWljX2RlYyhpZHJfcmVmKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCQljaGFuLT5jbGllbnRfY291bnQgPSAwOwpAQCAtNzAxLDEyICs3MjUsMjMgQEAKIAkJCX0KIAkJfQogCWxpc3RfYWRkX3RhaWxfcmN1KCZkZXZpY2UtPmdsb2JhbF9ub2RlLCAmZG1hX2RldmljZV9saXN0KTsKKwlpZiAoZG1hX2hhc19jYXAoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spKQorCQlkZXZpY2UtPnByaXZhdGVjbnQrKzsJLyogQWx3YXlzIHByaXZhdGUgKi8KIAlkbWFfY2hhbm5lbF9yZWJhbGFuY2UoKTsKIAltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKIAogCXJldHVybiAwOwogCiBlcnJfb3V0OgorCS8qIGlmIHdlIG5ldmVyIHJlZ2lzdGVyZWQgYSBjaGFubmVsIGp1c3QgcmVsZWFzZSB0aGUgaWRyICovCisJaWYgKGF0b21pY19yZWFkKGlkcl9yZWYpID09IDApIHsKKwkJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlpZHJfcmVtb3ZlKCZkbWFfaWRyLCBkZXZpY2UtPmRldl9pZCk7CisJCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlrZnJlZShpZHJfcmVmKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmRldmljZS0+Y2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC04OTMsNiArOTI4LDcgQEAKIHsKIAl0eC0+Y2hhbiA9IGNoYW47CiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdHgtPnR4X2xpc3QpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGUxOTBkOGIuLmEyN2MwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTM4LDYgKzM4LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKG1heF9jaGFubmVscywKIAkJIk1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHVzZSAoZGVmYXVsdDogYWxsKSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHhvcl9zb3VyY2VzID0gMzsKK21vZHVsZV9wYXJhbSh4b3Jfc291cmNlcywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHhvcl9zb3VyY2VzLAorCQkiTnVtYmVyIG9mIHhvciBzb3VyY2UgYnVmZmVycyAoZGVmYXVsdDogMykiKTsKKwogLyoKICAqIEluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBBbGwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBidWZmZXIgaGFzIGJpdCA3CiAgKiBzZXQsIGFsbCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGhhcyBiaXQgNyBjbGVhcmVkLgpAQCAtNTksOCArNjQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CiAJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKLQl1OAkJCSpzcmNidWY7Ci0JdTgJCQkqZHN0YnVmOworCXU4CQkJKipzcmNzOworCXU4CQkJKipkc3RzOworCWVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgdHlwZTsKIH07CiAKIHN0cnVjdCBkbWF0ZXN0X2NoYW4gewpAQCAtOTgsMzAgKzEwNCwzNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9zcmNidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X3NyY3ModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFkKLQkJCXwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTs7Ci0JZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJZm9yICg7IChidWYgPSAqYnVmcyk7IGJ1ZnMrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTsKKwkJZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOzsKKwkJZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQorCQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlidWYrKzsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9kc3RidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X2RzdHModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCBQQVRURVJOX09WRVJXUklURQotCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOwotCWZvciAoIDsgaSA8IHRlc3RfYnVmX3NpemU7IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCWZvciAoOyAoYnVmID0gKmJ1ZnMpOyBidWZzKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHN0YXJ0OyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCWZvciAoIDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8IFBBVFRFUk5fT1ZFUldSSVRFCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlmb3IgKCA7IGkgPCB0ZXN0X2J1Zl9zaXplOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkbWF0ZXN0X21pc21hdGNoKHU4IGFjdHVhbCwgdTggcGF0dGVybiwgdW5zaWduZWQgaW50IGluZGV4LApAQCAtMTUwLDIzICsxNjMsMzAgQEAKIAkJCQl0aHJlYWRfbmFtZSwgaW5kZXgsIGV4cGVjdGVkLCBhY3R1YWwpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRtYXRlc3RfdmVyaWZ5KHU4ICpidWYsIHVuc2lnbmVkIGludCBzdGFydCwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG1hdGVzdF92ZXJpZnkodTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsCiAJCXVuc2lnbmVkIGludCBlbmQsIHVuc2lnbmVkIGludCBjb3VudGVyLCB1OCBwYXR0ZXJuLAogCQlib29sIGlzX3NyY2J1ZikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgZXJyb3JfY291bnQgPSAwOwogCXU4IGFjdHVhbDsKKwl1OCBleHBlY3RlZDsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGludCBjb3VudGVyX29yaWcgPSBjb3VudGVyOwogCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQlhY3R1YWwgPSBidWZbaV07Ci0JCWlmIChhY3R1YWwgIT0gKHBhdHRlcm4gfCAofmNvdW50ZXIgJiBQQVRURVJOX0NPVU5UX01BU0spKSkgewotCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCi0JCQkJZG1hdGVzdF9taXNtYXRjaChhY3R1YWwsIHBhdHRlcm4sIGksIGNvdW50ZXIsCi0JCQkJCQlpc19zcmNidWYpOwotCQkJZXJyb3JfY291bnQrKzsKKwlmb3IgKDsgKGJ1ZiA9ICpidWZzKTsgYnVmcysrKSB7CisJCWNvdW50ZXIgPSBjb3VudGVyX29yaWc7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKwkJCWFjdHVhbCA9IGJ1ZltpXTsKKwkJCWV4cGVjdGVkID0gcGF0dGVybiB8ICh+Y291bnRlciAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCQlpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSB7CisJCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCisJCQkJCWRtYXRlc3RfbWlzbWF0Y2goYWN0dWFsLCBwYXR0ZXJuLCBpLAorCQkJCQkJCSBjb3VudGVyLCBpc19zcmNidWYpOworCQkJCWVycm9yX2NvdW50Kys7CisJCQl9CisJCQljb3VudGVyKys7CiAJCX0KLQkJY291bnRlcisrOwogCX0KIAogCWlmIChlcnJvcl9jb3VudCA+IDMyKQpAQCAtMTc2LDEyICsxOTYsMTcgQEAKIAlyZXR1cm4gZXJyb3JfY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIGRtYXRlc3RfY2FsbGJhY2sodm9pZCAqY29tcGxldGlvbikKK3sKKwljb21wbGV0ZShjb21wbGV0aW9uKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB0ZXN0cyBETUEgdHJhbnNmZXJzIG9mIHZhcmlvdXMgbGVuZ3RocyBhbmQKLSAqIG9mZnNldHMgdW50aWwgaXQgaXMgdG9sZCB0byBleGl0IGJ5IGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUKLSAqIG11bHRpcGxlIHRocmVhZHMgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZQotICogY2hhbm5lbCwgYW5kIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBjaGFubmVscyBiZWluZyB0ZXN0ZWQgaW4KLSAqIHBhcmFsbGVsLgorICogb2Zmc2V0cyBmb3IgYSBnaXZlbiBvcGVyYXRpb24gdHlwZSB1bnRpbCBpdCBpcyB0b2xkIHRvIGV4aXQgYnkKKyAqIGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgdGhyZWFkcyBydW5uaW5nIHRoaXMgZnVuY3Rpb24KKyAqIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZSBjaGFubmVsLCBhbmQgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGNoYW5uZWxzCisgKiBiZWluZyB0ZXN0ZWQgaW4gcGFyYWxsZWwuCiAgKgogICogQmVmb3JlIGVhY2ggdGVzdCwgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVyIGlzIGluaXRpYWxpemVkCiAgKiB3aXRoIGEga25vd24gcGF0dGVybi4gVGhpcyBwYXR0ZXJuIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24KQEAgLTIwMSwyNSArMjI2LDU3IEBACiAJdW5zaWduZWQgaW50CQl0b3RhbF90ZXN0cyA9IDA7CiAJZG1hX2Nvb2tpZV90CQljb29raWU7CiAJZW51bSBkbWFfc3RhdHVzCQlzdGF0dXM7CisJZW51bSBkbWFfY3RybF9mbGFncyAJZmxhZ3M7CiAJaW50CQkJcmV0OworCWludAkJCXNyY19jbnQ7CisJaW50CQkJZHN0X2NudDsKKwlpbnQJCQlpOwogCiAJdGhyZWFkX25hbWUgPSBjdXJyZW50LT5jb21tOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0aHJlYWQtPnNyY2J1ZiA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0aHJlYWQtPnNyY2J1ZikKLQkJZ290byBlcnJfc3JjYnVmOwotCXRocmVhZC0+ZHN0YnVmID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRocmVhZC0+ZHN0YnVmKQotCQlnb3RvIGVycl9kc3RidWY7CiAKIAlzbXBfcm1iKCk7CiAJY2hhbiA9IHRocmVhZC0+Y2hhbjsKKwlpZiAodGhyZWFkLT50eXBlID09IERNQV9NRU1DUFkpCisJCXNyY19jbnQgPSBkc3RfY250ID0gMTsKKwllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1hPUikgeworCQlzcmNfY250ID0geG9yX3NvdXJjZXMgfCAxOyAvKiBmb3JjZSBvZGQgdG8gZW5zdXJlIGRzdCA9IHNyYyAqLworCQlkc3RfY250ID0gMTsKKwl9IGVsc2UKKwkJZ290byBlcnJfc3JjczsKKworCXRocmVhZC0+c3JjcyA9IGtjYWxsb2Moc3JjX2NudCsxLCBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOworCWlmICghdGhyZWFkLT5zcmNzKQorCQlnb3RvIGVycl9zcmNzOworCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKKwkJdGhyZWFkLT5zcmNzW2ldID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQtPnNyY3NbaV0pCisJCQlnb3RvIGVycl9zcmNidWY7CisJfQorCXRocmVhZC0+c3Jjc1tpXSA9IE5VTEw7CisKKwl0aHJlYWQtPmRzdHMgPSBrY2FsbG9jKGRzdF9jbnQrMSwgc2l6ZW9mKHU4ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZC0+ZHN0cykKKwkJZ290byBlcnJfZHN0czsKKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudDsgaSsrKSB7CisJCXRocmVhZC0+ZHN0c1tpXSA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGhyZWFkLT5kc3RzW2ldKQorCQkJZ290byBlcnJfZHN0YnVmOworCX0KKwl0aHJlYWQtPmRzdHNbaV0gPSBOVUxMOworCisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAxMCk7CisKKwlmbGFncyA9IERNQV9DVFJMX0FDSyB8IERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgfCBETUFfUFJFUF9JTlRFUlJVUFQ7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2aWNlOwotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OwotCQlkbWFfYWRkcl90IGRtYV9zcmMsIGRtYV9kZXN0OworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKKwkJZG1hX2FkZHJfdCBkbWFfc3Jjc1tzcmNfY250XTsKKwkJZG1hX2FkZHJfdCBkbWFfZHN0c1tkc3RfY250XTsKKwkJc3RydWN0IGNvbXBsZXRpb24gY21wOworCQl1bnNpZ25lZCBsb25nIHRtbyA9IG1zZWNzX3RvX2ppZmZpZXMoMzAwMCk7CiAKIAkJdG90YWxfdGVzdHMrKzsKIApAQCAtMjI3LDIyICsyODQsNDEgQEAKIAkJc3JjX29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAodGVzdF9idWZfc2l6ZSAtIGxlbiArIDEpOwogCQlkc3Rfb2ZmID0gZG1hdGVzdF9yYW5kb20oKSAlICh0ZXN0X2J1Zl9zaXplIC0gbGVuICsgMSk7CiAKLQkJZG1hdGVzdF9pbml0X3NyY2J1Zih0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwgbGVuKTsKLQkJZG1hdGVzdF9pbml0X2RzdGJ1Zih0aHJlYWQtPmRzdGJ1ZiwgZHN0X29mZiwgbGVuKTsKKwkJZG1hdGVzdF9pbml0X3NyY3ModGhyZWFkLT5zcmNzLCBzcmNfb2ZmLCBsZW4pOworCQlkbWF0ZXN0X2luaXRfZHN0cyh0aHJlYWQtPmRzdHMsIGRzdF9vZmYsIGxlbik7CiAKLQkJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPnNyY2J1ZiArIHNyY19vZmYsCi0JCQkJbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgeworCQkJdTggKmJ1ZiA9IHRocmVhZC0+c3Jjc1tpXSArIHNyY19vZmY7CisKKwkJCWRtYV9zcmNzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIGJ1ZiwgbGVuLAorCQkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJfQogCQkvKiBtYXAgd2l0aCBETUFfQklESVJFQ1RJT05BTCB0byBmb3JjZSB3cml0ZWJhY2svaW52YWxpZGF0ZSAqLwotCQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPmRzdGJ1ZiwKLQkJCQl0ZXN0X2J1Zl9zaXplLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWZvciAoaSA9IDA7IGkgPCBkc3RfY250OyBpKyspIHsKKwkJCWRtYV9kc3RzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIHRocmVhZC0+ZHN0c1tpXSwKKwkJCQkJCSAgICAgdGVzdF9idWZfc2l6ZSwKKwkJCQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQl9CiAKLQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QgKyBkc3Rfb2ZmLAotCQkJCWRtYV9zcmMsIGxlbiwKLQkJCQlETUFfQ1RSTF9BQ0sgfCBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKTsKKwkJaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfTUVNQ1BZKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwKKwkJCQkJCQkgZG1hX2RzdHNbMF0gKyBkc3Rfb2ZmLAorCQkJCQkJCSBkbWFfc3Jjc1swXSwgbGVuLAorCQkJCQkJCSBmbGFncyk7CisJCWVsc2UgaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfWE9SKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV94b3IoY2hhbiwKKwkJCQkJCSAgICAgIGRtYV9kc3RzWzBdICsgZHN0X29mZiwKKwkJCQkJCSAgICAgIGRtYV9zcmNzLCB4b3Jfc291cmNlcywKKwkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOworCiAJCWlmICghdHgpIHsKLQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9zcmMsIGxlbiwgRE1BX1RPX0RFVklDRSk7Ci0JCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZGVzdCwKLQkJCQkJdGVzdF9idWZfc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfc3Jjc1tpXSwgbGVuLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZHN0c1tpXSwKKwkJCQkJCSB0ZXN0X2J1Zl9zaXplLAorCQkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAkJCXByX3dhcm5pbmcoIiVzOiAjJXU6IHByZXAgZXJyb3Igd2l0aCBzcmNfb2ZmPTB4JXggIgogCQkJCQkiZHN0X29mZj0weCV4IGxlbj0weCV4XG4iLAogCQkJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMgLSAxLApAQCAtMjUxLDcgKzMyNywxMCBAQAogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQl0eC0+Y2FsbGJhY2sgPSBOVUxMOworCisJCWluaXRfY29tcGxldGlvbigmY21wKTsKKwkJdHgtPmNhbGxiYWNrID0gZG1hdGVzdF9jYWxsYmFjazsKKwkJdHgtPmNhbGxiYWNrX3BhcmFtID0gJmNtcDsKIAkJY29va2llID0gdHgtPnR4X3N1Ym1pdCh0eCk7CiAKIAkJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkgewpAQCAtMjYzLDQ0ICszNDIsNTAgQEAKIAkJCWZhaWxlZF90ZXN0cysrOwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKIAotCQlkbyB7Ci0JCQltc2xlZXAoMSk7Ci0JCQlzdGF0dXMgPSBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKAotCQkJCQljaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwotCQl9IHdoaWxlIChzdGF0dXMgPT0gRE1BX0lOX1BST0dSRVNTKTsKKwkJdG1vID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbXAsIHRtbyk7CisJCXN0YXR1cyA9IGRtYV9hc3luY19pc190eF9jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwogCi0JCWlmIChzdGF0dXMgPT0gRE1BX0VSUk9SKSB7Ci0JCQlwcl93YXJuaW5nKCIlczogIyV1OiBlcnJvciBkdXJpbmcgY29weVxuIiwKLQkJCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCWlmICh0bW8gPT0gMCkgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogdGVzdCB0aW1lZCBvdXRcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCQlmYWlsZWRfdGVzdHMrKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSBETUFfU1VDQ0VTUykgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogZ290IGNvbXBsZXRpb24gY2FsbGJhY2ssIgorCQkJCSAgICIgYnV0IHN0YXR1cyBpcyBcJyVzXCdcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSwKKwkJCQkgICBzdGF0dXMgPT0gRE1BX0VSUk9SID8gImVycm9yIiA6ICJpbiBwcm9ncmVzcyIpOwogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQorCiAJCS8qIFVubWFwIGJ5IG15c2VsZiAoc2VlIERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgYWJvdmUpICovCi0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kZXN0LAotCQkJCXRlc3RfYnVmX3NpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kc3RzW2ldLCB0ZXN0X2J1Zl9zaXplLAorCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJCWVycm9yX2NvdW50ID0gMDsKIAogCQlwcl9kZWJ1ZygiJXM6IHZlcmlmeWluZyBzb3VyY2UgYnVmZmVyLi4uXG4iLCB0aHJlYWRfbmFtZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+c3JjYnVmLCAwLCBzcmNfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY3MsIDAsIHNyY19vZmYsCiAJCQkJMCwgUEFUVEVSTl9TUkMsIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmLAogCQkJCXNyY19vZmYgKyBsZW4sIHNyY19vZmYsCiAJCQkJUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFksIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiArIGxlbiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmICsgbGVuLAogCQkJCXRlc3RfYnVmX3NpemUsIHNyY19vZmYgKyBsZW4sCiAJCQkJUEFUVEVSTl9TUkMsIHRydWUpOwogCiAJCXByX2RlYnVnKCIlczogdmVyaWZ5aW5nIGRlc3QgYnVmZmVyLi4uXG4iLAogCQkJCXRocmVhZC0+dGFzay0+Y29tbSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCAwLCBkc3Rfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIDAsIGRzdF9vZmYsCiAJCQkJMCwgUEFUVEVSTl9EU1QsIGZhbHNlKTsKLQkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5kc3RidWYsIGRzdF9vZmYsCisJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0cywgZHN0X29mZiwKIAkJCQlkc3Rfb2ZmICsgbGVuLCBzcmNfb2ZmLAogCQkJCVBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZLCBmYWxzZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCBkc3Rfb2ZmICsgbGVuLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIGRzdF9vZmYgKyBsZW4sCiAJCQkJdGVzdF9idWZfc2l6ZSwgZHN0X29mZiArIGxlbiwKIAkJCQlQQVRURVJOX0RTVCwgZmFsc2UpOwogCkBAIC0zMTksMTAgKzQwNCwxNiBAQAogCX0KIAogCXJldCA9IDA7Ci0Ja2ZyZWUodGhyZWFkLT5kc3RidWYpOworCWZvciAoaSA9IDA7IHRocmVhZC0+ZHN0c1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPmRzdHNbaV0pOwogZXJyX2RzdGJ1ZjoKLQlrZnJlZSh0aHJlYWQtPnNyY2J1Zik7CisJa2ZyZWUodGhyZWFkLT5kc3RzKTsKK2Vycl9kc3RzOgorCWZvciAoaSA9IDA7IHRocmVhZC0+c3Jjc1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPnNyY3NbaV0pOwogZXJyX3NyY2J1ZjoKKwlrZnJlZSh0aHJlYWQtPnNyY3MpOworZXJyX3NyY3M6CiAJcHJfbm90aWNlKCIlczogdGVybWluYXRpbmcgYWZ0ZXIgJXUgdGVzdHMsICV1IGZhaWx1cmVzIChzdGF0dXMgJWQpXG4iLAogCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTM0NCwxMSArNDM1LDU0IEBACiAJa2ZyZWUoZHRjKTsKIH0KIAorc3RhdGljIGludCBkbWF0ZXN0X2FkZF90aHJlYWRzKHN0cnVjdCBkbWF0ZXN0X2NoYW4gKmR0YywgZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXN0cnVjdCBkbWF0ZXN0X3RocmVhZCAqdGhyZWFkOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGR0Yy0+Y2hhbjsKKwljaGFyICpvcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh0eXBlID09IERNQV9NRU1DUFkpCisJCW9wID0gImNvcHkiOworCWVsc2UgaWYgKHR5cGUgPT0gRE1BX1hPUikKKwkJb3AgPSAieG9yIjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgeworCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQpIHsKKwkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtJXMldVxuIiwKKwkJCQkgICBkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisKKwkJCWJyZWFrOworCQl9CisJCXRocmVhZC0+Y2hhbiA9IGR0Yy0+Y2hhbjsKKwkJdGhyZWFkLT50eXBlID0gdHlwZTsKKwkJc21wX3dtYigpOworCQl0aHJlYWQtPnRhc2sgPSBrdGhyZWFkX3J1bihkbWF0ZXN0X2Z1bmMsIHRocmVhZCwgIiVzLSVzJXUiLAorCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIG9wLCBpKTsKKwkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7CisJCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy0lcyV1XG4iLAorCQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisJCQlrZnJlZSh0aHJlYWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzcmNidWYgYW5kIGRzdGJ1ZiBhcmUgYWxsb2NhdGVkIGJ5IHRoZSB0aHJlYWQgaXRzZWxmICovCisKKwkJbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT5ub2RlLCAmZHRjLT50aHJlYWRzKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKwogc3RhdGljIGludCBkbWF0ZXN0X2FkZF9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3QgZG1hdGVzdF9jaGFuCSpkdGM7Ci0Jc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7Ci0JdW5zaWduZWQgaW50CQlpOworCXN0cnVjdCBkbWFfZGV2aWNlCSpkbWFfZGV2ID0gY2hhbi0+ZGV2aWNlOworCXVuc2lnbmVkIGludAkJdGhyZWFkX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQJCWNudDsKIAogCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewpAQCAtMzU5LDMwICs0OTMsMTcgQEAKIAlkdGMtPmNoYW4gPSBjaGFuOwogCUlOSVRfTElTVF9IRUFEKCZkdGMtPnRocmVhZHMpOwogCi0JZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgewotCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aHJlYWQpIHsKLQkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtdGVzdCV1XG4iLAotCQkJCSAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdGhyZWFkLT5jaGFuID0gZHRjLT5jaGFuOwotCQlzbXBfd21iKCk7Ci0JCXRocmVhZC0+dGFzayA9IGt0aHJlYWRfcnVuKGRtYXRlc3RfZnVuYywgdGhyZWFkLCAiJXMtdGVzdCV1IiwKLQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBpKTsKLQkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7Ci0JCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy10ZXN0JXVcbiIsCi0JCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJa2ZyZWUodGhyZWFkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc3JjYnVmIGFuZCBkc3RidWYgYXJlIGFsbG9jYXRlZCBieSB0aGUgdGhyZWFkIGl0c2VsZiAqLwotCi0JCWxpc3RfYWRkX3RhaWwoJnRocmVhZC0+bm9kZSwgJmR0Yy0+dGhyZWFkcyk7CisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRtYV9kZXYtPmNhcF9tYXNrKSkgeworCQljbnQgPSBkbWF0ZXN0X2FkZF90aHJlYWRzKGR0YywgRE1BX01FTUNQWSk7CisJCXRocmVhZF9jb3VudCArPSBjbnQgPiAwID86IDA7CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfWE9SLCBkbWFfZGV2LT5jYXBfbWFzaykpIHsKKwkJY250ID0gZG1hdGVzdF9hZGRfdGhyZWFkcyhkdGMsIERNQV9YT1IpOworCQl0aHJlYWRfY291bnQgKz0gY250ID4gMCA/OiAwOwogCX0KIAotCXByX2luZm8oImRtYXRlc3Q6IFN0YXJ0ZWQgJXUgdGhyZWFkcyB1c2luZyAlc1xuIiwgaSwgZG1hX2NoYW5fbmFtZShjaGFuKSk7CisJcHJfaW5mbygiZG1hdGVzdDogU3RhcnRlZCAldSB0aHJlYWRzIHVzaW5nICVzXG4iLAorCQl0aHJlYWRfY291bnQsIGRtYV9jaGFuX25hbWUoY2hhbikpOwogCiAJbGlzdF9hZGRfdGFpbCgmZHRjLT5ub2RlLCAmZG1hdGVzdF9jaGFubmVscyk7CiAJbnJfY2hhbm5lbHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCAyMGFkM2QyLi45OGM5YTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0zNjMsNiArMzYzLDgyIEBACiAJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBiYWRfZGVzYyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDeWNsaWMgRE1BIEFQSSBleHRlbnNpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2lubGluZSBkbWFfYWRkcl90IGR3X2RtYV9nZXRfc3JjX2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbiAqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJcmV0dXJuIGNoYW5uZWxfcmVhZGwoZHdjLCBTQVIpOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfZ2V0X3NyY19hZGRyKTsKKworaW5saW5lIGRtYV9hZGRyX3QgZHdfZG1hX2dldF9kc3RfYWRkcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuICpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlyZXR1cm4gY2hhbm5lbF9yZWFkbChkd2MsIERBUik7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9nZXRfZHN0X2FkZHIpOworCisvKiBjYWxsZWQgd2l0aCBkd2MtPmxvY2sgaGVsZCBhbmQgYWxsIERNQUMgaW50ZXJydXB0cyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgZHdjX2hhbmRsZV9jeWNsaWMoc3RydWN0IGR3X2RtYSAqZHcsIHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLAorCQl1MzIgc3RhdHVzX2Jsb2NrLCB1MzIgc3RhdHVzX2VyciwgdTMyIHN0YXR1c194ZmVyKQoreworCWlmIChzdGF0dXNfYmxvY2sgJiBkd2MtPm1hc2spIHsKKwkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpwYXJhbSk7CisJCXZvaWQgKmNhbGxiYWNrX3BhcmFtOworCisJCWRldl92ZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibmV3IGN5Y2xpYyBwZXJpb2QgbGxwIDB4JTA4eFxuIiwKKwkJCQljaGFubmVsX3JlYWRsKGR3YywgTExQKSk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkJMT0NLLCBkd2MtPm1hc2spOworCisJCWNhbGxiYWNrID0gZHdjLT5jZGVzYy0+cGVyaW9kX2NhbGxiYWNrOworCQljYWxsYmFja19wYXJhbSA9IGR3Yy0+Y2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbTsKKwkJaWYgKGNhbGxiYWNrKSB7CisJCQlzcGluX3VubG9jaygmZHdjLT5sb2NrKTsKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKwkJfQorCX0KKworCS8qCisJICogRXJyb3IgYW5kIHRyYW5zZmVyIGNvbXBsZXRlIGFyZSBoaWdobHkgdW5saWtlbHksIGFuZCB3aWxsIG1vc3QKKwkgKiBsaWtlbHkgYmUgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBlcnJvciBieSB0aGUgdXNlci4KKwkgKi8KKwlpZiAodW5saWtlbHkoc3RhdHVzX2VyciAmIGR3Yy0+bWFzaykgfHwKKwkJCXVubGlrZWx5KHN0YXR1c194ZmVyICYgZHdjLT5tYXNrKSkgeworCQlpbnQgaTsKKworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIERNQSB1bmV4cGVjdGVkICVzICIKKwkJCQkiaW50ZXJydXB0LCBzdG9wcGluZyBETUEgdHJhbnNmZXJcbiIsCisJCQkJc3RhdHVzX3hmZXIgPyAieGZlciIgOiAiZXJyb3IiKTsKKwkJZGV2X2VycihjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCSIgIFNBUjogMHgleCBEQVI6IDB4JXggTExQOiAweCV4IENUTDogMHgleDolMDh4XG4iLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIFNBUiksCisJCQljaGFubmVsX3JlYWRsKGR3YywgREFSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBMTFApLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIENUTF9ISSksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0xPKSk7CisKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCQl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCQljcHVfcmVsYXgoKTsKKworCQkvKiBtYWtlIHN1cmUgRE1BIGRvZXMgbm90IHJlc3RhcnQgYnkgbG9hZGluZyBhIG5ldyBsaXN0ICovCisJCWNoYW5uZWxfd3JpdGVsKGR3YywgTExQLCAwKTsKKwkJY2hhbm5lbF93cml0ZWwoZHdjLCBDVExfTE8sIDApOworCQljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwkJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkVSUk9SLCBkd2MtPm1hc2spOworCQlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJCWZvciAoaSA9IDA7IGkgPCBkd2MtPmNkZXNjLT5wZXJpb2RzOyBpKyspCisJCQlkd2NfZHVtcF9sbGkoZHdjLCAmZHdjLT5jZGVzYy0+ZGVzY1tpXS0+bGxpKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIHZvaWQgZHdfZG1hX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBkd19kbWEgKmR3ID0gKHN0cnVjdCBkd19kbWEgKilkYXRhOwpAQCAtMzgyLDcgKzQ1OCwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBkdy0+ZG1hLmNoYW5jbnQ7IGkrKykgewogCQlkd2MgPSAmZHctPmNoYW5baV07CiAJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKLQkJaWYgKHN0YXR1c19lcnIgJiAoMSA8PCBpKSkKKwkJaWYgKHRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkKKwkJCWR3Y19oYW5kbGVfY3ljbGljKGR3LCBkd2MsIHN0YXR1c19ibG9jaywgc3RhdHVzX2VyciwKKwkJCQkJc3RhdHVzX3hmZXIpOworCQllbHNlIGlmIChzdGF0dXNfZXJyICYgKDEgPDwgaSkpCiAJCQlkd2NfaGFuZGxlX2Vycm9yKGR3LCBkd2MpOwogCQllbHNlIGlmICgoc3RhdHVzX2Jsb2NrIHwgc3RhdHVzX3hmZXIpICYgKDEgPDwgaSkpCiAJCQlkd2Nfc2Nhbl9kZXNjcmlwdG9ycyhkdywgZHdjKTsKQEAgLTgyNiw3ICs5MDUsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjLT50eGQsIGNoYW4pOwogCQlkZXNjLT50eGQudHhfc3VibWl0ID0gZHdjX3R4X3N1Ym1pdDsKIAkJZGVzYy0+dHhkLmZsYWdzID0gRE1BX0NUUkxfQUNLOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhkLnR4X2xpc3QpOwogCQlkZXNjLT50eGQucGh5cyA9IGRtYV9tYXBfc2luZ2xlKGNoYW4ycGFyZW50KGNoYW4pLCAmZGVzYy0+bGxpLAogCQkJCXNpemVvZihkZXNjLT5sbGkpLCBETUFfVE9fREVWSUNFKTsKIAkJZHdjX2Rlc2NfcHV0KGR3YywgZGVzYyk7CkBAIC04ODQsNiArOTYyLDI1NyBAQAogCWRldl92ZGJnKGNoYW4yZGV2KGNoYW4pLCAiZnJlZV9jaGFuX3Jlc291cmNlcyBkb25lXG4iKTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEN5Y2xpYyBETUEgQVBJIGV4dGVuc2lvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBkd19kbWFfY3ljbGljX3N0YXJ0IC0gc3RhcnQgdGhlIGN5Y2xpYyBETUEgdHJhbnNmZXIKKyAqIEBjaGFuOiB0aGUgRE1BIGNoYW5uZWwgdG8gc3RhcnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNvZnQgaW50ZXJydXB0cyBkaXNhYmxlZC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IKKyAqIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHdfZG1hX2N5Y2xpY19zdGFydChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSB0b19kd19kbWEoZHdjLT5jaGFuLmRldmljZSk7CisKKwlpZiAoIXRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibWlzc2luZyBwcmVwIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrKCZkd2MtPmxvY2spOworCisJLyogYXNzZXJ0IGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIkJVRzogQXR0ZW1wdGVkIHRvIHN0YXJ0IG5vbi1pZGxlIGNoYW5uZWxcbiIpOworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIiAgU0FSOiAweCV4IERBUjogMHgleCBMTFA6IDB4JXggQ1RMOiAweCV4OiUwOHhcbiIsCisJCQljaGFubmVsX3JlYWRsKGR3YywgU0FSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBEQVIpLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIExMUCksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0hJKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBDVExfTE8pKTsKKwkJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuRVJST1IsIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuWEZFUiwgZHdjLT5tYXNrKTsKKworCS8qIHNldHVwIERNQUMgY2hhbm5lbCByZWdpc3RlcnMgKi8KKwljaGFubmVsX3dyaXRlbChkd2MsIExMUCwgZHdjLT5jZGVzYy0+ZGVzY1swXS0+dHhkLnBoeXMpOworCWNoYW5uZWxfd3JpdGVsKGR3YywgQ1RMX0xPLCBEV0NfQ1RMTF9MTFBfRF9FTiB8IERXQ19DVExMX0xMUF9TX0VOKTsKKwljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwljaGFubmVsX3NldF9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHdfZG1hX2N5Y2xpY19zdGFydCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19zdG9wIC0gc3RvcCB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBzdG9wCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzb2Z0IGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3ZvaWQgZHdfZG1hX2N5Y2xpY19zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9IHRvX2R3X2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkd19kbWEJCSpkdyA9IHRvX2R3X2RtYShkd2MtPmNoYW4uZGV2aWNlKTsKKworCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKKwl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCWNwdV9yZWxheCgpOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfc3RvcCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19wcmVwIC0gcHJlcGFyZSB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBwcmVwYXJlCisgKiBAYnVmX2FkZHI6IHBoeXNpY2FsIERNQSBhZGRyZXNzIHdoZXJlIHRoZSBidWZmZXIgc3RhcnRzCisgKiBAYnVmX2xlbjogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZW50aXJlIGJ1ZmZlcgorICogQHBlcmlvZF9sZW46IG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBwZXJpb2QKKyAqIEBkaXJlY3Rpb246IHRyYW5zZmVyIGRpcmVjdGlvbiwgdG8gb3IgZnJvbSBkZXZpY2UKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdHJ5aW5nIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci4gUmV0dXJucyBhIHZhbGlkIHN0cnVjdAorICogZHdfY3ljbGljX2Rlc2MgaWYgc3VjY2Vzc2Z1bCBvciBhbiBFUlJfUFRSKC1lcnJubykgaWYgbm90IHN1Y2Nlc3NmdWwuCisgKi8KK3N0cnVjdCBkd19jeWNsaWNfZGVzYyAqZHdfZG1hX2N5Y2xpY19wcmVwKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2FkZHJfdCBidWZfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCBwZXJpb2RfbGVuLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCQkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqcmV0dmFsID0gTlVMTDsKKwlzdHJ1Y3QgZHdfZGVzYwkJCSpkZXNjOworCXN0cnVjdCBkd19kZXNjCQkJKmxhc3QgPSBOVUxMOworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSpkd3MgPSBjaGFuLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcJCQl3YXNfY3ljbGljOworCXVuc2lnbmVkIGludAkJCXJlZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZXJpb2RzOworCXVuc2lnbmVkIGludAkJCWk7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZkd2MtPnF1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmZHdjLT5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksCisJCQkJInF1ZXVlIGFuZC9vciBhY3RpdmUgbGlzdCBhcmUgbm90IGVtcHR5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwl3YXNfY3ljbGljID0gdGVzdF9hbmRfc2V0X2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKHdhc19jeWNsaWMpIHsKKwkJZGV2X2RiZyhjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCQkiY2hhbm5lbCBhbHJlYWR5IHByZXBhcmVkIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlyZXR2YWwgPSBFUlJfUFRSKC1FSU5WQUwpOworCXJlZ193aWR0aCA9IGR3cy0+cmVnX3dpZHRoOworCXBlcmlvZHMgPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKworCS8qIENoZWNrIGZvciB0b28gYmlnL3VuYWxpZ25lZCBwZXJpb2RzIGFuZCB1bmFsaWduZWQgRE1BIGJ1ZmZlci4gKi8KKwlpZiAocGVyaW9kX2xlbiA+IChEV0NfTUFYX0NPVU5UIDw8IHJlZ193aWR0aCkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkocGVyaW9kX2xlbiAmICgoMSA8PCByZWdfd2lkdGgpIC0gMSkpKQorCQlnb3RvIG91dF9lcnI7CisJaWYgKHVubGlrZWx5KGJ1Zl9hZGRyICYgKCgxIDw8IHJlZ193aWR0aCkgLSAxKSkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkoIShkaXJlY3Rpb24gJiAoRE1BX1RPX0RFVklDRSB8IERNQV9GUk9NX0RFVklDRSkpKSkKKwkJZ290byBvdXRfZXJyOworCisJcmV0dmFsID0gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChwZXJpb2RzID4gTlJfREVTQ1NfUEVSX0NIQU5ORUwpCisJCWdvdG8gb3V0X2VycjsKKworCWNkZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR3X2N5Y2xpY19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGVzYykKKwkJZ290byBvdXRfZXJyOworCisJY2Rlc2MtPmRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfZGVzYyAqKSAqIHBlcmlvZHMsIEdGUF9LRVJORUwpOworCWlmICghY2Rlc2MtPmRlc2MpCisJCWdvdG8gb3V0X2Vycl9hbGxvYzsKKworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2RzOyBpKyspIHsKKwkJZGVzYyA9IGR3Y19kZXNjX2dldChkd2MpOworCQlpZiAoIWRlc2MpCisJCQlnb3RvIG91dF9lcnJfZGVzY19nZXQ7CisKKwkJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwkJY2FzZSBETUFfVE9fREVWSUNFOgorCQkJZGVzYy0+bGxpLmRhciA9IGR3cy0+dHhfcmVnOworCQkJZGVzYy0+bGxpLnNhciA9IGJ1Zl9hZGRyICsgKHBlcmlvZF9sZW4gKiBpKTsKKwkJCWRlc2MtPmxsaS5jdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQkJCQl8IERXQ19DVExMX0RTVF9XSURUSChyZWdfd2lkdGgpCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfRklYCisJCQkJCXwgRFdDX0NUTExfU1JDX0lOQworCQkJCQl8IERXQ19DVExMX0ZDX00yUAorCQkJCQl8IERXQ19DVExMX0lOVF9FTik7CisJCQlicmVhazsKKwkJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCQlkZXNjLT5sbGkuZGFyID0gYnVmX2FkZHIgKyAocGVyaW9kX2xlbiAqIGkpOworCQkJZGVzYy0+bGxpLnNhciA9IGR3cy0+cnhfcmVnOworCQkJZGVzYy0+bGxpLmN0bGxvID0gKERXQ19ERUZBVUxUX0NUTExPCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfV0lEVEgocmVnX3dpZHRoKQorCQkJCQl8IERXQ19DVExMX0RTVF9JTkMKKwkJCQkJfCBEV0NfQ1RMTF9TUkNfRklYCisJCQkJCXwgRFdDX0NUTExfRkNfUDJNCisJCQkJCXwgRFdDX0NUTExfSU5UX0VOKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlkZXNjLT5sbGkuY3RsaGkgPSAocGVyaW9kX2xlbiA+PiByZWdfd2lkdGgpOworCQljZGVzYy0+ZGVzY1tpXSA9IGRlc2M7CisKKwkJaWYgKGxhc3QpIHsKKwkJCWxhc3QtPmxsaS5sbHAgPSBkZXNjLT50eGQucGh5czsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLAorCQkJCQlsYXN0LT50eGQucGh5cywgc2l6ZW9mKGxhc3QtPmxsaSksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQl9CisKKwkJbGFzdCA9IGRlc2M7CisJfQorCisJLyogbGV0cyBtYWtlIGEgY3ljbGljIGxpc3QgKi8KKwlsYXN0LT5sbGkubGxwID0gY2Rlc2MtPmRlc2NbMF0tPnR4ZC5waHlzOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLCBsYXN0LT50eGQucGh5cywKKwkJCXNpemVvZihsYXN0LT5sbGkpLCBETUFfVE9fREVWSUNFKTsKKworCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksICJjeWNsaWMgcHJlcGFyZWQgYnVmIDB4JTA4eCBsZW4gJXp1ICIKKwkJCSJwZXJpb2QgJXp1IHBlcmlvZHMgJWRcbiIsIGJ1Zl9hZGRyLCBidWZfbGVuLAorCQkJcGVyaW9kX2xlbiwgcGVyaW9kcyk7CisKKwljZGVzYy0+cGVyaW9kcyA9IHBlcmlvZHM7CisJZHdjLT5jZGVzYyA9IGNkZXNjOworCisJcmV0dXJuIGNkZXNjOworCitvdXRfZXJyX2Rlc2NfZ2V0OgorCXdoaWxlIChpLS0pCisJCWR3Y19kZXNjX3B1dChkd2MsIGNkZXNjLT5kZXNjW2ldKTsKK291dF9lcnJfYWxsb2M6CisJa2ZyZWUoY2Rlc2MpOworb3V0X2VycjoKKwljbGVhcl9iaXQoRFdfRE1BX0lTX0NZQ0xJQywgJmR3Yy0+ZmxhZ3MpOworCXJldHVybiAoc3RydWN0IGR3X2N5Y2xpY19kZXNjICopcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfY3ljbGljX3ByZXApOworCisvKioKKyAqIGR3X2RtYV9jeWNsaWNfZnJlZSAtIGZyZWUgYSBwcmVwYXJlZCBjeWNsaWMgRE1BIHRyYW5zZmVyCisgKiBAY2hhbjogdGhlIERNQSBjaGFubmVsIHRvIGZyZWUKKyAqLwordm9pZCBkd19kbWFfY3ljbGljX2ZyZWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2RtYQkJKmR3ID0gdG9fZHdfZG1hKGR3Yy0+Y2hhbi5kZXZpY2UpOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkqY2Rlc2MgPSBkd2MtPmNkZXNjOworCWludAkJCWk7CisKKwlkZXZfZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIGZyZWVcbiIpOworCisJaWYgKCFjZGVzYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCXdoaWxlIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykKKwkJY3B1X3JlbGF4KCk7CisKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5CTE9DSywgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5FUlJPUiwgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2Rlc2MtPnBlcmlvZHM7IGkrKykKKwkJZHdjX2Rlc2NfcHV0KGR3YywgY2Rlc2MtPmRlc2NbaV0pOworCisJa2ZyZWUoY2Rlc2MtPmRlc2MpOworCWtmcmVlKGNkZXNjKTsKKworCWNsZWFyX2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfZnJlZSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIGR3X2RtYV9vZmYoc3RydWN0IGR3X2RtYSAqZHcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjX3JlZ3MuaCBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCmluZGV4IGIyNTJiMjAuLjEzYTU4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCkBAIC0xMjYsNiArMTI2LDEwIEBACiAKICNkZWZpbmUgRFdfUkVHTEVOCQkweDQwMAogCitlbnVtIGR3X2RtYWNfZmxhZ3MgeworCURXX0RNQV9JU19DWUNMSUMgPSAwLAorfTsKKwogc3RydWN0IGR3X2RtYV9jaGFuIHsKIAlzdHJ1Y3QgZG1hX2NoYW4JCWNoYW47CiAJdm9pZCBfX2lvbWVtCQkqY2hfcmVnczsKQEAgLTEzNCwxMCArMTM4LDEyIEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCS8qIHRoZXNlIG90aGVyIGVsZW1lbnRzIGFyZSBhbGwgcHJvdGVjdGVkIGJ5IGxvY2sgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlkbWFfY29va2llX3QJCWNvbXBsZXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCSpjZGVzYzsKIAogCXVuc2lnbmVkIGludAkJZGVzY3NfYWxsb2NhdGVkOwogfTsKQEAgLTE1OCw3ICsxNjQsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGR3X2RtYV9jaGFuLCBjaGFuKTsKIH0KIAotCiBzdHJ1Y3QgZHdfZG1hIHsKIAlzdHJ1Y3QgZG1hX2RldmljZQlkbWE7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKaW5kZXggODZkNmRhNC4uZGE4YThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKQEAgLTM1NCw3ICszNTQsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjX3N3LT5hc3luY190eCwKIAkJCQkJCSZmc2xfY2hhbi0+Y29tbW9uKTsKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gZnNsX2RtYV90eF9zdWJtaXQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXNjX3N3LT5hc3luY190eC50eF9saXN0KTsKIAkJZGVzY19zdy0+YXN5bmNfdHgucGh5cyA9IHBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKaW5kZXggNTkwNWNkMy4uZTRmYzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCkBAIC02OTMsNyArNjkzLDYgQEAKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9hdDJfdHhfc3VibWl0OwogCQlicmVhazsKIAl9Ci0JSU5JVF9MSVNUX0hFQUQoJmRlc2Nfc3ctPmFzeW5jX3R4LnR4X2xpc3QpOwogCiAJZGVzY19zdy0+aHcgPSBkZXNjOwogCWRlc2Nfc3ctPmFzeW5jX3R4LnBoeXMgPSBwaHlzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKaW5kZXggMTZhZGJlNi4uMmYwNTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAkJc2xvdC0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9wX2FkbWFfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBpb3BfY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sOwogCQlzbG90LT5hc3luY190eC5waHlzID0KIAkJCShkbWFfYWRkcl90KSAmaHdfZGVzY1tpZHggKiBJT1BfQURNQV9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGRhNzgxZDEuLmUyMDJhNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTI4LDYgKzI4LDkgQEAKICNkZWZpbmUgRlNfVkZfSU5fVkFMSUQJMHgwMDAwMDAwMgogI2RlZmluZSBGU19FTkNfSU5fVkFMSUQJMHgwMDAwMDAwMQogCitzdGF0aWMgaW50IGlwdV9kaXNhYmxlX2NoYW5uZWwoc3RydWN0IGlkbWFjICppZG1hYywgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAorCQkJICAgICAgIGJvb2wgd2FpdF9mb3Jfc3RvcCk7CisKIC8qCiAgKiBUaGVyZSBjYW4gYmUgb25seSBvbmUsIHdlIGNvdWxkIGFsbG9jYXRlIGl0IGR5bmFtaWNhbGx5LCBidXQgdGhlbiB3ZSdkIGhhdmUKICAqIHRvIGFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgdG8gc29tZSBmdW5jdGlvbnMsIGFuZCB1c2Ugc29tZXRoaW5nIGFzIHVnbHkgYXMKQEAgLTEwNyw3ICsxMTAsNyBAQAogCX0KIH0KIAotLyogRW5hYmxlIC8gZGlzYWJsZSBkaXJlY3Qgd3JpdGUgdG8gbWVtb3J5IGJ5IHRoZSBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSAqLworLyogRW5hYmxlIGRpcmVjdCB3cml0ZSB0byBtZW1vcnkgYnkgdGhlIENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBpcHVfaWNfZW5hYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTEyNiw2ICsxMjksNyBAQAogCWlkbWFjX3dyaXRlX2ljcmVnKGlwdSwgaWNfY29uZiwgSUNfQ09ORik7CiB9CiAKKy8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaXB1X2RhdGEubG9jaykgKi8KIHN0YXRpYyB2b2lkIGlwdV9pY19kaXNhYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTQyMiw3ICs0MjYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGlwdV9kYXRhLmRldiwKLQkJCSJteGMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKKwkJCSJteDMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKIAkJYnJlYWs7CiAJfQogCkBAIC00MzMsMjAgKzQzNywyMCBAQAogCQkJCQl1aW50MTZfdCBidXJzdF9waXhlbHMpCiB7CiAJcGFyYW1zLT5wcC5ucGIgPSBidXJzdF9waXhlbHMgLSAxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9idWZmZXIodW5pb24gY2hhbl9wYXJhbV9tZW0gKnBhcmFtcywKIAkJCQkgICAgZG1hX2FkZHJfdCBidWYwLCBkbWFfYWRkcl90IGJ1ZjEpCiB7CiAJcGFyYW1zLT5wcC5lYmEwID0gYnVmMDsKIAlwYXJhbXMtPnBwLmViYTEgPSBidWYxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9yb3RhdGlvbih1bmlvbiBjaGFuX3BhcmFtX21lbSAqcGFyYW1zLAogCQkJCSAgICAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdGF0ZSkKIHsKIAlwYXJhbXMtPnBwLmJhbSA9IHJvdGF0ZTsKLX07Cit9CiAKIHN0YXRpYyB2b2lkIGlwdV93cml0ZV9wYXJhbV9tZW0odWludDMyX3QgYWRkciwgdWludDMyX3QgKmRhdGEsCiAJCQkJdWludDMyX3QgbnVtX3dvcmRzKQpAQCAtNTcxLDcgKzU3NSw3IEBACiB7CiAJLyogQ2hhbm5lbCBQYXJhbWV0ZXIgTWVtb3J5ICovCiAJcmV0dXJuIDB4MTAwMDAgfCAoZG1hX2NoIDw8IDQpOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoYW5uZWxfc2V0X3ByaW9yaXR5KHN0cnVjdCBpcHUgKmlwdSwgZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsLAogCQkJCSAgICAgYm9vbCBwcmlvKQpAQCAtNjExLDcgKzYxNSw4IEBACiAKIC8qKgogICogaXB1X2VuYWJsZV9jaGFubmVsKCkgLSBlbmFibGUgYW4gSVBVIGNoYW5uZWwuCi0gKiBAY2hhbm5lbDoJY2hhbm5lbCBJRC4KKyAqIEBpZG1hYzoJSVBVIERNQUMgY29udGV4dC4KKyAqIEBpY2hhbjoJSURNQUMgY2hhbm5lbC4KICAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgaXB1X2VuYWJsZV9jaGFubmVsKHN0cnVjdCBpZG1hYyAqaWRtYWMsIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbikKQEAgLTY0OSw3ICs2NTQsNyBAQAogCiAvKioKICAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgLSBpbml0aWFsaXplIGEgYnVmZmVyIGZvciBsb2dpY2FsIElQVSBjaGFubmVsLgotICogQGNoYW5uZWw6CWNoYW5uZWwgSUQuCisgKiBAaWNoYW46CUlETUFDIGNoYW5uZWwuCiAgKiBAcGl4ZWxfZm10OglwaXhlbCBmb3JtYXQgb2YgYnVmZmVyLiBQaXhlbCBmb3JtYXQgaXMgYSBGT1VSQ0MgQVNDSUkgY29kZS4KICAqIEB3aWR0aDoJd2lkdGggb2YgYnVmZmVyIGluIHBpeGVscy4KICAqIEBoZWlnaHQ6CWhlaWdodCBvZiBidWZmZXIgaW4gcGl4ZWxzLgpAQCAtNjg3LDcgKzY5Miw3IEBACiAJfQogCiAJLyogSUMgY2hhbm5lbCdzIHN0cmlkZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBwaXhlbHMgKi8KLQlpZiAoKGNoYW5uZWwgPD0gMTMpICYmIChzdHJpZGUgJSA4KSkgeworCWlmICgoY2hhbm5lbCA8PSBJRE1BQ19JQ18xMykgJiYgKHN0cmlkZSAlIDgpKSB7CiAJCWRldl9lcnIoaXB1LT5kZXYsICJTdHJpZGUgbXVzdCBiZSA4IHBpeGVsIG11bHRpcGxlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUyLDcgKzc1Nyw3IEBACiAKIC8qKgogICogaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcigpIC0gdXBkYXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBjaGFubmVsIGJ1ZmZlci4KLSAqIEBjaGFubmVsOgljaGFubmVsIElELgorICogQGljaGFuOglJRE1BQyBjaGFubmVsLgogICogQGJ1ZmZlcl9uOglidWZmZXIgbnVtYmVyIHRvIHVwZGF0ZS4KICAqCQkwIG9yIDEgYXJlIHRoZSBvbmx5IHZhbGlkIHZhbHVlcy4KICAqIEBwaHlhZGRyOglidWZmZXIgcGh5c2ljYWwgYWRkcmVzcy4KQEAgLTc2MCw5ICs3NjUsMTAgQEAKICAqICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGJ1ZmZlciBpcyBzZXQgdG8gcmVhZHkuCiAgKi8KIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2soX2lycXNhdmUpKCZpY2hhbi0+bG9jaykgKi8KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCitzdGF0aWMgaW50IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgaW50IGJ1ZmZlcl9uLCBkbWFfYWRkcl90IHBoeWFkZHIpCiB7CisJZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJdWludDMyX3QgcmVnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc3MSw4ICs3NzcsOCBAQAogCWlmIChidWZmZXJfbiA9PSAwKSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYwX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIDQ0LjMuMy4xLjkgLSBSb3cgTnVtYmVyIDEgKFdPUkQxLCBvZmZzZXQgMCkgKi8KQEAgLTc4Miw4ICs3ODgsOCBAQAogCX0gZWxzZSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIENoZWNrIGlmIGRvdWJsZS1idWZmZXJpbmcgaXMgYWxyZWFkeSBlbmFibGVkICovCkBAIC04MDUsNiArODExLDM5IEBACiB9CiAKIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2spICovCitzdGF0aWMgaW50IGlwdV9zdWJtaXRfYnVmZmVyKHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiwKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IGJ1Zl9pZHgpCit7CisJdW5zaWduZWQgaW50IGNoYW5faWQgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOworCWludCByZXQ7CisKKwlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKgorCSAqIE9uIGZpcnN0IGludm9jYXRpb24gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCB0aGUgY2FsbCB0bworCSAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgYWJvdmUgd2lsbCBzZXQgYWRkcmVzc2VzIGZvciB1cywgc28gd2UKKwkgKiBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsIG9uIHN0YXR1cyA+PSBJUFVfQ0hBTk5FTF9FTkFCTEVELCBidXQKKwkgKiBkb2luZyBpdCBhZ2FpbiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCisJICovCisJcmV0ID0gaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihpY2hhbiwgYnVmX2lkeCwKKwkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVXBkYXRpbmcgc2cgJXAgb24gY2hhbm5lbCAweCV4IGJ1ZmZlciAlZCBmYWlsZWQhXG4iLAorCQkJc2csIGNoYW5faWQsIGJ1Zl9pZHgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlwdV9zZWxlY3RfYnVmZmVyKGNoYW5faWQsIGJ1Zl9pZHgpOworCWRldl9kYmcoZGV2LCAiVXBkYXRlZCBzZyAlcCBvbiBjaGFubmVsIDB4JXggYnVmZmVyICVkXG4iLAorCQlzZywgY2hhbl9pZCwgYnVmX2lkeCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHVuZGVyIHNwaW5fbG9ja19pcnFzYXZlKCZpY2hhbi0+bG9jaykgKi8KIHN0YXRpYyBpbnQgaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjKQogewpAQCAtODE1LDIwICs4NTQsMTAgQEAKIAkJaWYgKCFpY2hhbi0+c2dbaV0pIHsKIAkJCWljaGFuLT5zZ1tpXSA9IHNnOwogCi0JCQkvKgotCQkJICogT24gZmlyc3QgaW52b2NhdGlvbiB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHRoZQotCQkJICogY2FsbCB0byBpcHVfaW5pdF9jaGFubmVsX2J1ZmZlcigpIGFib3ZlIHdpbGwgc2V0Ci0JCQkgKiBhZGRyZXNzZXMgZm9yIHVzLCBzbyB3ZSBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsCi0JCQkgKiBvbiBzdGF0dXMgPj0gSVBVX0NIQU5ORUxfRU5BQkxFRCwgYnV0IGRvaW5nIGl0IGFnYWluCi0JCQkgKiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCi0JCQkgKi8KLQkJCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGksCi0JCQkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCXJldCA9IGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjLCBzZywgaSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCi0JCQlpcHVfc2VsZWN0X2J1ZmZlcihpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCwgaSk7Ci0KIAkJCXNnID0gc2dfbmV4dChzZyk7CiAJCX0KIAl9CkBAIC04NDIsMTkgKzg3MSwyMiBAQAogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4odHgtPmNoYW4pOwogCXN0cnVjdCBpZG1hYyAqaWRtYWMgPSB0b19pZG1hYyh0eC0+Y2hhbi0+ZGV2aWNlKTsKIAlzdHJ1Y3QgaXB1ICppcHUgPSB0b19pcHUoaWRtYWMpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2U7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKIAkvKiBTYW5pdHkgY2hlY2sgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmRlc2MtPmxpc3QpKSB7CiAJCS8qIFRoZSBkZXNjcmlwdG9yIGRvZXNuJ3QgYmVsb25nIHRvIGNsaWVudCAqLwotCQlkZXZfZXJyKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsCi0JCQkiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CisJCWRldl9lcnIoZGV2LCAiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJbXV0ZXhfbG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCisJYXN5bmNfdHhfY2xlYXJfYWNrKHR4KTsKKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfUkVBRFkpIHsKIAkJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOwogCQkvKgpAQCAtODc4LDE2ICs5MTAsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCi0JY29va2llID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCWlmIChjb29raWUgPCAwKQotCQlnb3RvIG91dDsKKwlkZXZfZGJnKGRldiwgIlN1Ym1pdHRpbmcgc2cgJXBcbiIsICZkZXNjLT5zZ1swXSk7CiAKIAljb29raWUgPSBpY2hhbi0+ZG1hX2NoYW4uY29va2llOwogCkBAIC04OTcsMjQgKzkyMCw0MCBAQAogCS8qIGZyb20gZG1hZW5naW5lLmg6ICJsYXN0IGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB0byBjbGllbnQiICovCiAJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKIAl0eC0+Y29va2llID0gY29va2llOworCisJLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisKIAlsaXN0X2FkZF90YWlsKCZkZXNjLT5saXN0LCAmaWNoYW4tPnF1ZXVlKTsKKwkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCisJcmV0ID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAorCWlmIChyZXQgPCAwKSB7CisJCWNvb2tpZSA9IHJldDsKKwkJZ290byBkZXF1ZXVlOworCX0KKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfRU5BQkxFRCkgewotCQlpbnQgcmV0ID0gaXB1X2VuYWJsZV9jaGFubmVsKGlkbWFjLCBpY2hhbik7CisJCXJldCA9IGlwdV9lbmFibGVfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCQlpZiAocmV0IDwgMCkgewogCQkJY29va2llID0gcmV0OwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQlsaXN0X2RlbF9pbml0KCZkZXNjLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQl0eC0+Y29va2llID0gY29va2llOwotCQkJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKKwkJCWdvdG8gZGVxdWV1ZTsKIAkJfQogCX0KIAogCWR1bXBfaWRtYWNfcmVnKGlwdSk7CiAKK2RlcXVldWU6CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsX2luaXQoJmRlc2MtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOworCQl0eC0+Y29va2llID0gY29va2llOworCQlpY2hhbi0+ZG1hX2NoYW4uY29va2llID0gY29va2llOworCX0KKwogb3V0OgogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCkBAIC05NDQsOCArOTgzLDYgQEAKIAkJbWVtc2V0KHR4ZCwgMCwgc2l6ZW9mKCp0eGQpKTsKIAkJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCh0eGQsICZpY2hhbi0+ZG1hX2NoYW4pOwogCQl0eGQtPnR4X3N1Ym1pdAkJPSBpZG1hY190eF9zdWJtaXQ7Ci0JCXR4ZC0+Y2hhbgkJPSAmaWNoYW4tPmRtYV9jaGFuOwotCQlJTklUX0xJU1RfSEVBRCgmdHhkLT50eF9saXN0KTsKIAogCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCkBAIC0xMTYxLDYgKzExOTgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqaWRtYWNfc2dfbmV4dChzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4sCisJc3RydWN0IGlkbWFjX3R4X2Rlc2MgKipkZXNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2duZXcgPSBzZyA/IHNnX25leHQoc2cpIDogTlVMTDsKKworCWlmIChzZ25ldykKKwkJLyogbmV4dCBzZy1lbGVtZW50IGluIHRoaXMgbGlzdCAqLworCQlyZXR1cm4gc2duZXc7CisKKwlpZiAoKCpkZXNjKS0+bGlzdC5uZXh0ID09ICZpY2hhbi0+cXVldWUpCisJCS8qIE5vIG1vcmUgZGVzY3JpcHRvcnMgb24gdGhlIHF1ZXVlICovCisJCXJldHVybiBOVUxMOworCisJLyogRmV0Y2ggbmV4dCBkZXNjcmlwdG9yICovCisJKmRlc2MgPSBsaXN0X2VudHJ5KCgqZGVzYyktPmxpc3QubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCXJldHVybiAoKmRlc2MpLT5zZzsKK30KKwogLyoKICAqIFdlIGhhdmUgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIGhlcmU6CiAgKiBjdXJyZW50IEJVRgkJbmV4dCBCVUYKQEAgLTExNzYsMjMgKzEyMzEsNDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZG1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IGRldl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOwogCXVuc2lnbmVkIGludCBjaGFuX2lkID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2csICpzZ25leHQsICpzZ25ldyA9IE5VTEw7CiAJLyogTmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yICovCi0Jc3RydWN0IGlkbWFjX3R4X2Rlc2MgKmRlc2MgPSBOVUxMLCAqZGVzY25ldzsKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgKmRlc2NuZXc7CiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOwogCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwogCWJvb2wgZG9uZSA9IGZhbHNlOwotCXUzMglyZWFkeTAgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpLAotCQlyZWFkeTEgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMV9SRFkpLAotCQljdXJidWYgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQ1VSX0JVRik7CisJdTMyIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYsIGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogSURNQUMgaGFzIGNsZWFyZWQgdGhlIHJlc3BlY3RpdmUgQlVGeF9SRFkgYml0LCB3ZSBtYW5hZ2UgdGhlIGJ1ZmZlciAqLwogCi0JcHJfZGVidWcoIklETUFDIGlycSAlZFxuIiwgaXJxKTsKKwlkZXZfZGJnKGRldiwgIklETUFDIGlycSAlZCwgYnVmICVkXG4iLCBpcnEsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKKwlyZWFkeTAJPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpOworCXJlYWR5MQk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CisJY3VyYnVmCT0gaWRtYWNfcmVhZF9pcHVyZWcoJmlwdV9kYXRhLCBJUFVfQ0hBX0NVUl9CVUYpOworCWVycgk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0lOVF9TVEFUXzQpOworCisJaWYgKGVyciAmICgxIDw8IGNoYW5faWQpKSB7CisJCWlkbWFjX3dyaXRlX2lwdXJlZygmaXB1X2RhdGEsIDEgPDwgY2hhbl9pZCwgSVBVX0lOVF9TVEFUXzQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisJCS8qCisJCSAqIERvaW5nIHRoaXMKKwkJICogaWNoYW4tPnNnWzBdID0gaWNoYW4tPnNnWzFdID0gTlVMTDsKKwkJICogeW91IGNhbiBmb3JjZSBjaGFubmVsIHJlLWVuYWJsZSBvbiB0aGUgbmV4dCB0eF9zdWJtaXQoKSwgYnV0CisJCSAqIHRoaXMgaXMgZGlydHkgLSB0aGluayBhYm91dCBkZXNjcmlwdG9ycyB3aXRoIG11bHRpcGxlCisJCSAqIHNnIGVsZW1lbnRzLgorCQkgKi8KKwkJZGV2X3dhcm4oZGV2LCAiTkZCNEVPRiBvbiBjaGFubmVsICVkLCByZWFkeSAleCwgJXgsIGN1ciAleFxuIiwKKwkJCSBjaGFuX2lkLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKIAkvKiBPdGhlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzIGNoYW5uZWwgKi8KIAlzcGluX2xvY2soJmljaGFuLT5sb2NrKTsKLQogCWlmICh1bmxpa2VseShjaGFuX2lkICE9IElETUFDX1NEQ18wICYmIGNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKIAkJICAgICAoKGN1cmJ1ZiA+PiBjaGFuX2lkKSAmIDEpID09IGljaGFuLT5hY3RpdmVfYnVmZmVyKSkgewogCQlpbnQgaSA9IDEwMDsKQEAgLTEyMDcsMTkgKzEyODUsMjMgQEAKIAogCQlpZiAoIWkpIHsKIAkJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7Ci0JCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJCWRldl9kYmcoZGV2LAogCQkJCSJJUlEgb24gYWN0aXZlIGJ1ZmZlciBvbiBjaGFubmVsICV4LCBhY3RpdmUgIgogCQkJCSIlZCwgcmVhZHkgJXgsICV4LCBjdXJyZW50ICV4IVxuIiwgY2hhbl9pZCwKIAkJCQlpY2hhbi0+YWN0aXZlX2J1ZmZlciwgcmVhZHkwLCByZWFkeTEsIGN1cmJ1Zik7CiAJCQlyZXR1cm4gSVJRX05PTkU7Ci0JCX0KKwkJfSBlbHNlCisJCQlkZXZfZGJnKGRldiwKKwkJCQkiQnVmZmVyIGRlYWN0aXZhdGVkIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCisJCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXgsIHJlc3QgJWQhXG4iLCBjaGFuX2lkLAorCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmLCBpKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoKGljaGFuLT5hY3RpdmVfYnVmZmVyICYmIChyZWFkeTEgPj4gY2hhbl9pZCkgJiAxKSB8fAogCQkgICAgICghaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MCA+PiBjaGFuX2lkKSAmIDEpCiAJCSAgICAgKSkgewogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2RiZyhkZXYsCiAJCQkiSVJRIHdpdGggYWN0aXZlIGJ1ZmZlciBzdGlsbCByZWFkeSBvbiBjaGFubmVsICV4LCAiCiAJCQkiYWN0aXZlICVkLCByZWFkeSAleCwgJXghXG4iLCBjaGFuX2lkLAogCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxKTsKQEAgLTEyMjcsOCArMTMwOSw5IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkpKSB7CisJCWljaGFuLT5zZ1tpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBOVUxMOwogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2VycihkZXYsCiAJCQkiSVJRIHdpdGhvdXQgcXVldWVkIGJ1ZmZlcnMgb24gY2hhbm5lbCAleCwgYWN0aXZlICVkLCAiCiAJCQkicmVhZHkgJXgsICV4IVxuIiwgY2hhbl9pZCwKIAkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSk7CkBAIC0xMjQzLDQwICsxMzI2LDQ0IEBACiAJc2cgPSAmaWNoYW4tPnNnW2ljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAlzZ25leHQgPSBpY2hhbi0+c2dbIWljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAorCWlmICghKnNnKSB7CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCWRlc2NuZXcgPSBkZXNjOworCisJZGV2X2RiZyhkZXYsICJJRE1BQyBpcnEgJWQsIGRtYSAweCUwOHgsIG5leHQgZG1hIDB4JTA4eCwgY3VycmVudCAlZCwgY3VyYnVmIDB4JTA4eFxuIiwKKwkJaXJxLCBzZ19kbWFfYWRkcmVzcygqc2cpLCBzZ25leHQgPyBzZ19kbWFfYWRkcmVzcyhzZ25leHQpIDogMCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsIGN1cmJ1Zik7CisKKwkvKiBGaW5kIHRoZSBkZXNjcmlwdG9yIG9mIHNnbmV4dCAqLworCXNnbmV3ID0gaWRtYWNfc2dfbmV4dChpY2hhbiwgJmRlc2NuZXcsICpzZyk7CisJaWYgKHNnbmV4dCAhPSBzZ25ldykKKwkJZGV2X2VycihkZXYsICJTdWJtaXR0ZWQgYnVmZmVyICVwLCBuZXh0IGJ1ZmZlciAlcFxuIiwgc2duZXh0LCBzZ25ldyk7CisKIAkvKgogCSAqIGlmIHNnbmV4dCA9PSBOVUxMIHNnIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCBpbiBhIHNjYXR0ZXJsaXN0IGFuZAogCSAqIHF1ZXVlIG11c3QgYmUgZW1wdHkKIAkgKi8KIAlpZiAodW5saWtlbHkoIXNnbmV4dCkpIHsKLQkJaWYgKHVubGlrZWx5KHNnX25leHQoKnNnKSkpIHsKLQkJCWRldl9lcnIoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJCcm9rZW4gYnVmZmVyLXVwZGF0ZSBsb2NraW5nIG9uIGNoYW5uZWwgJXghXG4iLAotCQkJCWNoYW5faWQpOwotCQkJLyogV2UnbGwgbGV0IHRoZSB1c2VyIGNhdGNoIHVwICovCisJCWlmICghV0FSTl9PTihzZ19uZXh0KCpzZykpKQorCQkJZGV2X2RiZyhkZXYsICJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJaWNoYW4tPnNnWyFpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBzZ25ldzsKKworCQlpZiAodW5saWtlbHkoc2duZXcpKSB7CisJCQlpcHVfc3VibWl0X2J1ZmZlcihpY2hhbiwgZGVzY25ldywgc2duZXcsICFpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBVbmRlcnJ1biAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFuX2lkKTsKLQkJCWRldl9kYmcoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJCS8qIENvbnRpbnVlIHRvIGNoZWNrIGZvciBjb21wbGV0ZSBkZXNjcmlwdG9yICovCiAJCX0KIAl9CiAKLQlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOwotCi0JLyogRmlyc3QgY2FsY3VsYXRlIGFuZCBzdWJtaXQgdGhlIG5leHQgc2cgZWxlbWVudCAqLwotCWlmIChsaWtlbHkoc2duZXh0KSkKLQkJc2duZXcgPSBzZ19uZXh0KHNnbmV4dCk7Ci0KLQlpZiAodW5saWtlbHkoIXNnbmV3KSkgewotCQkvKiBTdGFydCBhIG5ldyBzY2F0dGVybGlzdCwgaWYgYW55IHF1ZXVlZCAqLwotCQlpZiAobGlrZWx5KGRlc2MtPmxpc3QubmV4dCAhPSAmaWNoYW4tPnF1ZXVlKSkgewotCQkJZGVzY25ldyA9IGxpc3RfZW50cnkoZGVzYy0+bGlzdC5uZXh0LAotCQkJCQkgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjLCBsaXN0KTsKLQkJCXNnbmV3ID0gJmRlc2NuZXctPnNnWzBdOwotCQl9Ci0JfQorCS8qIENhbGN1bGF0ZSBhbmQgc3VibWl0IHRoZSBuZXh0IHNnIGVsZW1lbnQgKi8KKwlzZ25ldyA9IGlkbWFjX3NnX25leHQoaWNoYW4sICZkZXNjbmV3LCBzZ25ldyk7CiAKIAlpZiAodW5saWtlbHkoIXNnX25leHQoKnNnKSkgfHwgIXNnbmV4dCkgewogCQkvKgpAQCAtMTI4OSwxNyArMTM3NiwxMyBAQAogCiAJKnNnID0gc2duZXc7CiAKLQlpZiAobGlrZWx5KHNnbmV3KSkgewotCQlpbnQgcmV0OwotCi0JCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsCi0JCQkJCQlzZ19kbWFfYWRkcmVzcygqc2cpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKLQkJCQkiRmFpbGVkIHRvIHVwZGF0ZSBidWZmZXIgb24gY2hhbm5lbCAleCBidWZmZXIgJWQhXG4iLAotCQkJCWNoYW5faWQsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKLQkJZWxzZQotCQkJaXB1X3NlbGVjdF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOworCWlmIChsaWtlbHkoc2duZXcpICYmCisJICAgIGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjbmV3LCBzZ25ldywgaWNoYW4tPmFjdGl2ZV9idWZmZXIpIDwgMCkgeworCQljYWxsYmFjayA9IGRlc2MtPnR4ZC5jYWxsYmFjazsKKwkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT50eGQuY2FsbGJhY2tfcGFyYW07CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7CiAJfQogCiAJLyogRmxpcCB0aGUgYWN0aXZlIGJ1ZmZlciAtIGV2ZW4gaWYgdXBkYXRlIGFib3ZlIGZhaWxlZCAqLwpAQCAtMTMyNywxMyArMTQxMCwyMCBAQAogCQlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBpcHUtPmNoYW5uZWwgKyBpOwogCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGo7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJCWludCBqLCBrOwogCiAJCWZvciAoaiA9IDA7IGogPCBpY2hhbi0+bl90eF9kZXNjOyBqKyspIHsKIAkJCWRlc2MgPSBpY2hhbi0+ZGVzYyArIGo7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+dHhkKSkgewogCQkJCWxpc3RfbW92ZSgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOworCQkJCWZvcl9lYWNoX3NnKGRlc2MtPnNnLCBzZywgZGVzYy0+c2dfbGVuLCBrKSB7CisJCQkJCWlmIChpY2hhbi0+c2dbMF0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMF0gPSBOVUxMOworCQkJCQllbHNlIGlmIChpY2hhbi0+c2dbMV0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMV0gPSBOVUxMOworCQkJCX0KIAkJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOwpAQCAtMTM0MSwxMyArMTQzMSw3IEBACiAJfQogfQogCi0vKgotICogQXQgdGhlIHRpbWUgLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcygpIG1ldGhvZCBpcyBjYWxsZWQsIHdlIGNhbm5vdCBrbm93LAotICogd2hldGhlciB0aGUgY2xpZW50IHdpbGwgYWNjZXB0IHRoZSBjaGFubmVsLiBUaHVzIHdlIG11c3Qgb25seSBjaGVjaywgaWYgd2UKLSAqIGNhbiBzYXRpc2Z5IGNsaWVudCdzIHJlcXVlc3QgYnV0IHRoZSBvbmx5IHJlYWwgY3JpdGVyaW9uIHRvIHZlcmlmeSwgd2hldGhlcgotICogdGhlIGNsaWVudCBoYXMgYWNjZXB0ZWQgb3VyIG9mZmVyIGlzIHRoZSBjbGllbnRfY291bnQuIFRoYXQncyB3aHkgd2UgaGF2ZSB0bwotICogcGVyZm9ybSB0aGUgcmVzdCBvZiBvdXIgYWxsb2NhdGlvbiB0YXNrcyBvbiB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICovCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIHRyYW5zZmVyIGRlc2NyaXB0b3IuICovCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICppZG1hY19wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19sZW4sCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyB0eF9mbGFncykKQEAgLTEzNTgsOCArMTQ0Miw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlIG9ubHkgY2FuIGhhbmRsZSB0aGVzZSB0aHJlZSBjaGFubmVscyBzbyBmYXIgKi8KLQlpZiAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzAgJiYgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKLQkgICAgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfSUNfNykKKwlpZiAoY2hhbi0+Y2hhbl9pZCAhPSBJRE1BQ19TRENfMCAmJiBjaGFuLT5jaGFuX2lkICE9IElETUFDX1NEQ18xICYmCisJICAgIGNoYW4tPmNoYW5faWQgIT0gSURNQUNfSUNfNykKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewpAQCAtMTQwMCw3ICsxNDg0LDcgQEAKIAogCS8qIFRoaXMgaXMgbm90IGFsd2F5cyBuZWVkZWQsIGJ1dCBkb2Vzbid0IGh1cnQgZWl0aGVyICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdS0+bG9jaywgZmxhZ3MpOwotCWlwdV9zZWxlY3RfYnVmZmVyKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkLCBpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CisJaXB1X3NlbGVjdF9idWZmZXIoY2hhbi0+Y2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdS0+bG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTE0MzIsOCArMTUxNiw3IEBACiAJCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYyA9IGljaGFuLT5kZXNjICsgaTsKIAkJCWlmIChsaXN0X2VtcHR5KCZkZXNjLT5saXN0KSkKIAkJCQkvKiBEZXNjcmlwdG9yIHdhcyBwcmVwYXJlZCwgYnV0IG5vdCBzdWJtaXR0ZWQgKi8KLQkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwKLQkJCQkJICZpY2hhbi0+ZnJlZV9saXN0KTsKKwkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCiAJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCX0KQEAgLTE0NTgsNiArMTU0MSwyOCBAQAogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogfQogCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpcnFyZXR1cm5fdCBpY19zb2ZfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBkZXZfaWQ7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdvdCBTT0YgSVJRICVkIG9uIENoYW5uZWwgJWRcbiIsCisJICAgICAgIGlycSwgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWRpc2FibGVfaXJxKGlycSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaWNfZW9mX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gZGV2X2lkOworCXByaW50ayhLRVJOX0RFQlVHICJHb3QgRU9GIElSUSAlZCBvbiBDaGFubmVsICVkXG4iLAorCSAgICAgICBpcnEsIGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlkaXNhYmxlX2lycShpcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBpY19zb2YgPSAtRUlOVkFMLCBpY19lb2YgPSAtRUlOVkFMOworI2VuZGlmCisKIHN0YXRpYyBpbnQgaWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CkBAIC0xNDcxLDMxICsxNTc2LDQ5IEBACiAJY2hhbi0+Y29va2llCQk9IDE7CiAJaWNoYW4tPmNvbXBsZXRlZAk9IC1FTlhJTzsKIAotCXJldCA9IGlwdV9pcnFfbWFwKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlyZXQgPSBpcHVfaXJxX21hcChjaGFuLT5jaGFuX2lkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaW1hcDsKIAogCWljaGFuLT5lb2ZfaXJxID0gcmV0OwotCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCi0JCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVyaXJxOworCisJLyoKKwkgKiBJbXBvcnRhbnQgdG8gZmlyc3QgZGlzYWJsZSB0aGUgY2hhbm5lbCwgYmVjYXVzZSBtYXliZSBzb21lb25lCisJICogdXNlZCBpdCBiZWZvcmUgdXMsIGUuZy4sIHRoZSBib290bG9hZGVyCisJICovCisJaXB1X2Rpc2FibGVfY2hhbm5lbChpZG1hYywgaWNoYW4sIHRydWUpOwogCiAJcmV0ID0gaXB1X2luaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpY2hhbjsKIAorCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCisJCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVyaXJxOworCisjaWZkZWYgREVCVUcKKwlpZiAoY2hhbi0+Y2hhbl9pZCA9PSBJRE1BQ19JQ183KSB7CisJCWljX3NvZiA9IGlwdV9pcnFfbWFwKDY5KTsKKwkJaWYgKGljX3NvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19zb2YsIGljX3NvZl9pcnEsIDAsICJJQyBTT0YiLCBpY2hhbik7CisJCWljX2VvZiA9IGlwdV9pcnFfbWFwKDcwKTsKKwkJaWYgKGljX2VvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19lb2YsIGljX2VvZl9pcnEsIDAsICJJQyBFT0YiLCBpY2hhbik7CisJfQorI2VuZGlmCisKIAlpY2hhbi0+c3RhdHVzID0gSVBVX0NIQU5ORUxfSU5JVElBTElaRUQ7CiAKLQlkZXZfZGJnKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsICJGb3VuZCBjaGFubmVsIDB4JXgsIGlycSAlZFxuIiwKLQkJaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGljaGFuLT5lb2ZfaXJxKTsKKwlkZXZfZGJnKCZjaGFuLT5kZXYtPmRldmljZSwgIkZvdW5kIGNoYW5uZWwgMHgleCwgaXJxICVkXG4iLAorCQljaGFuLT5jaGFuX2lkLCBpY2hhbi0+ZW9mX2lycSk7CiAKIAlyZXR1cm4gcmV0OwogCi1laWNoYW46Ci0JZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKIGVyaXJxOgotCWlwdV9pcnFfdW5tYXAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWlwdV91bmluaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOworZWljaGFuOgorCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiBlaW1hcDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxMCw4ICsxNjMzLDIyIEBACiAJX19pZG1hY190ZXJtaW5hdGVfYWxsKGNoYW4pOwogCiAJaWYgKGljaGFuLT5zdGF0dXMgPiBJUFVfQ0hBTk5FTF9GUkVFKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKGNoYW4tPmNoYW5faWQgPT0gSURNQUNfSUNfNykgeworCQkJaWYgKGljX3NvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19zb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDY5KTsKKwkJCQlpY19zb2YgPSAtRUlOVkFMOworCQkJfQorCQkJaWYgKGljX2VvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19lb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDcwKTsKKwkJCQlpY19lb2YgPSAtRUlOVkFMOworCQkJfQorCQl9CisjZW5kaWYKIAkJZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKLQkJaXB1X2lycV91bm1hcChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCk7CisJCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiAJfQogCiAJaWNoYW4tPnN0YXR1cyA9IElQVV9DSEFOTkVMX0ZSRUU7CkBAIC0xNTczLDcgKzE3MTAsNyBAQAogCQlkbWFfY2hhbi0+ZGV2aWNlCT0gJmlkbWFjLT5kbWE7CiAJCWRtYV9jaGFuLT5jb29raWUJPSAxOwogCQlkbWFfY2hhbi0+Y2hhbl9pZAk9IGk7Ci0JCWxpc3RfYWRkX3RhaWwoJmljaGFuLT5kbWFfY2hhbi5kZXZpY2Vfbm9kZSwgJmRtYS0+Y2hhbm5lbHMpOworCQlsaXN0X2FkZF90YWlsKCZkbWFfY2hhbi0+ZGV2aWNlX25vZGUsICZkbWEtPmNoYW5uZWxzKTsKIAl9CiAKIAlpZG1hY193cml0ZV9pY3JlZyhpcHUsIDB4MDAwMDAwNzAsIElETUFDX0NPTkYpOwpAQCAtMTU4MSw3ICsxNzE4LDcgQEAKIAlyZXR1cm4gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmaWRtYWMtPmRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdV9pZG1hY19leGl0KHN0cnVjdCBpcHUgKmlwdSkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHVfaWRtYWNfZXhpdChzdHJ1Y3QgaXB1ICppcHUpCiB7CiAJaW50IGk7CiAJc3RydWN0IGlkbWFjICppZG1hYyA9ICZpcHUtPmlkbWFjOwpAQCAtMTYwMCw3ICsxNzM3LDcgQEAKICAqIElQVSBjb21tb24gcHJvYmUgLyByZW1vdmUKICAqLwogCi1zdGF0aWMgaW50IGlwdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgaXB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtX2lwdSwgKm1lbV9pYzsKQEAgLTE3MDAsNyArMTgzNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdSAqaXB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTE3MjUsNyArMTg2Miw3IEBACiAJCS5uYW1lCT0gImlwdS1jb3JlIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKLQkucmVtb3ZlCQk9IGlwdV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChpcHVfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pcnEuYwppbmRleCA4M2Y1MzJjLi5kZDhlYmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaXJxLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogfTsKIAogLyogSW5zdGFsbCB0aGUgSVJRIGhhbmRsZXIgKi8KLWludCBpcHVfaXJxX2F0dGFjaF9pcnEoc3RydWN0IGlwdSAqaXB1LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitpbnQgX19pbml0IGlwdV9pcnFfYXR0YWNoX2lycShzdHJ1Y3QgaXB1ICppcHUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgaXJxLCBpcnFfYmFzZSwgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL212X3hvci5jIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKaW5kZXggY2I3ZjI2Zi4uZGRhYjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbXZfeG9yLmMKKysrIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKQEAgLTYzMiw3ICs2MzIsNiBAQAogCQlzbG90LT5hc3luY190eC50eF9zdWJtaXQgPSBtdl94b3JfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBtdl9jaGFuLT5kZXZpY2UtPmRtYV9kZXNjX3Bvb2w7CiAJCXNsb3QtPmFzeW5jX3R4LnBoeXMgPQogCQkJKGRtYV9hZGRyX3QpICZod19kZXNjW2lkeCAqIE1WX1hPUl9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCBlZWU0N2ZkLi5lNWY1YzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtMSwxMyArMSwxMiBAQAogIwogIwlFREFDIEtjb25maWcKLSMJQ29weXJpZ2h0IChjKSAyMDAzIExpbnV4IE5ldHdvcngKKyMJQ29weXJpZ2h0IChjKSAyMDA4IERvdWcgVGhvbXBzb24gd3d3LnNvZnR3YXJlYml0bWFrZXIuY29tCiAjCUxpY2Vuc2VkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMCiAjCiAKIG1lbnVjb25maWcgRURBQwotCWJvb2wgIkVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmciCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gWDg2IHx8IFBQQwogCWhlbHAKIAkgIEVEQUMgaXMgZGVzaWduZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY29yZSBzeXN0ZW0uCkBAIC00MCw2ICszOSwxNCBAQAogCSAgdGhlcmUncmUgZm91ciBkZWJ1ZyBsZXZlbHMgKHg9MCwxLDIsMyBmcm9tIGxvdyB0byBoaWdoKS4KIAkgIFVzdWFsbHkgeW91IHNob3VsZCBzZWxlY3QgJ04nLgogCitjb25maWcgRURBQ19ERUJVR19WRVJCT1NFCisJYm9vbCAiTW9yZSB2ZXJib3NlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVEQUNfREVCVUcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBtYWtlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbW9yZSB2ZXJib3NlLgorCSAgU291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgZGVidWdnaW5nIG1lc3NhZ2UKKwkgIHByaW50ZWQgd2lsbCBiZSBhZGRlZCB0byBkZWJ1Z2dpbmcgbWVzc2FnZS4KKwogY29uZmlnIEVEQUNfTU1fRURBQwogCXRyaXN0YXRlICJNYWluIE1lbW9yeSBFREFDIChFcnJvciBEZXRlY3Rpb24gQW5kIENvcnJlY3Rpb24pIHJlcG9ydGluZyIKIAlkZWZhdWx0IHkKQEAgLTE3NCw0ICsxODEsMjcgQEAKIAkgIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBpbnRlcm5hbCBtZW1vcnkgY29udHJvbGxlcgogCSAgb24gcGxhdGZvcm0gd2l0aG91dCBhIGh5cGVydmlzb3IKIAorY29uZmlnIEVEQUNfUFBDNFhYCisJdHJpc3RhdGUgIlBQQzR4eCBJQk0gRERSMiBNZW1vcnkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiA0eHgKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRURBQyBvbiB0aGUgRUNDIG1lbW9yeSB1c2VkCisJICB3aXRoIHRoZSBJQk0gRERSMiBtZW1vcnkgY29udHJvbGxlciBmb3VuZCBpbiB2YXJpb3VzCisJICBQb3dlclBDIDR4eCBlbWJlZGRlZCBwcm9jZXNzb3JzIHN1Y2ggYXMgdGhlIDQwNUVYW3JdLAorCSAgNDQwU1AsIDQ0MFNQZSwgNDYwRVgsIDQ2MEdUIGFuZCA0NjBTWC4KKworY29uZmlnIEVEQUNfQU1EODEzMQorCXRyaXN0YXRlICJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBjaGlwLgorCitjb25maWcgRURBQ19BTUQ4MTExCisJdHJpc3RhdGUgIkFNRDgxMTEgSHlwZXJUcmFuc3BvcnQgSS9PIEh1YiIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTExIEh5cGVyVHJhbnNwb3J0IEkvTyBIdWIgY2hpcC4KKwogZW5kaWYgIyBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggYjc1MTk2OS4uYTVmZGNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtMzQsNCArMzQsNCBAQAogb2JqLSQoQ09ORklHX0VEQUNfTVBDODVYWCkJCSs9IG1wYzg1eHhfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19NVjY0WDYwKQkJKz0gbXY2NHg2MF9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX0NFTEwpCQkJKz0gY2VsbF9lZGFjLm8KLQorb2JqLSQoQ09ORklHX0VEQUNfUFBDNFhYKQkJKz0gcHBjNHh4X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDY5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmMKQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuYywgQU1EODExMSBIeXBlciBUcmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgorI2luY2x1ZGUgImFtZDgxMTFfZWRhYy5oIgorCisjZGVmaW5lIEFNRDgxMTFfRURBQ19SRVZJU0lPTgkiIFZlcjogMS4wLjAgIiBfX0RBVEVfXworI2RlZmluZSBBTUQ4MTExX0VEQUNfTU9EX1NUUgkiYW1kODExMV9lZGFjIgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAorc3RhdGljIGludCBlZGFjX2Rldl9pZHg7CisKK2VudW0gYW1kODExMV9lZGFjX2RldnMgeworCUxQQ19CUklER0UgPSAwLAorfTsKKworZW51bSBhbWQ4MTExX2VkYWNfcGNpcyB7CisJUENJX0JSSURHRSA9IDAsCit9OworCisvKiBXcmFwcGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCitzdGF0aWMgaW50IGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV9yZWFkX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTggKnZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcmVnLCB2YWw4KTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiBBTUQ4MTExX0VEQUNfTU9EX1NUUgorCQkJIiBQQ0kgQWNjZXNzIFJlYWQgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZWRhY19wY2lfd3JpdGVfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyIHZhbDMyKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV93cml0ZV9ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHU4IHZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHJlZywgdmFsOCk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCisvKgorICogZGV2aWNlLXNwZWNpZmljIG1ldGhvZHMgZm9yIGFtZDgxMTEgUENJIEJyaWRnZSBDb250cm9sbGVyCisgKgorICogRXJyb3IgUmVwb3J0aW5nIGFuZCBIYW5kbGluZyBmb3IgYW1kODExMSBjaGlwc2V0IGNvdWxkIGJlIGZvdW5kCisgKiBpbiBpdHMgZGF0YXNoZWV0IDMuMS4yIHNlY3Rpb24sIFAzNworICovCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfaW5pdChzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfaW5mby0+ZGV2OworCisJLyogRmlyc3QgY2xlYXIgZXJyb3IgZGV0ZWN0aW9uIGZsYWdzIG9uIHRoZSBob3N0IGludGVyZmFjZSAqLworCisJLyogQ2xlYXIgU1NFL1NNQS9TVEEgZmxhZ3MgaW4gdGhlIGdsb2JhbCBzdGF0dXMgcmVnaXN0ZXIqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfU1RTQ01EX0NMRUFSX01BU0spCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCS8qIENsZWFyIENSQyBhbmQgTGluayBGYWlsIGZsYWdzIGluIEhUIExpbmsgQ29udHJvbCByZWcgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssICZ2YWwzMik7CisJaWYgKHZhbDMyICYgSFRfTElOS19DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkvKiBTZWNvbmQgY2xlYXIgYWxsIGZhdWx0IG9uIHRoZSBzZWNvbmRhcnkgaW50ZXJmYWNlICovCisKKwkvKiBDbGVhciBlcnJvciBmbGFncyBpbiB0aGUgbWVtb3J5LWJhc2UgbGltaXQgcmVnLiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBFeHBpcmVkIGZsYWcgaW4gSW50ZXJydXB0L0JyaWRnZSBDb250cm9sIHJlZyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKworCS8qIExhc3QgZW5hYmxlIGVycm9yIGRldGVjdGlvbnMgKi8KKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBFbmFibGUgU3lzdGVtIEVycm9yIHJlcG9ydGluZyBpbiBnbG9iYWwgc3RhdHVzIHJlZ2lzdGVyICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwkJdmFsMzIgfD0gUENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBFbmFibGUgQ1JDIFN5bmMgZmxvb2QgcGFja2V0cyB0byBIeXBlclRyYW5zcG9ydCBMaW5rICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgfD0gSFRfTElOS19DUkNGRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssIHZhbDMyKTsKKworCQkvKiBFbmFibGUgU1NFIHJlcG9ydGluZyBldGMgaW4gSW50ZXJydXB0IGNvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiB8PSBQQ0lfSU5UQlJHX0NUUkxfUE9MTF9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX2JyaWRnZV9leGl0KHN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbykKK3sKKwl1MzIgdmFsMzI7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBEaXNhYmxlIFN5c3RlbSBFcnJvciByZXBvcnRpbmcgKi8KKwkJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBEaXNhYmxlIENSQyBmbG9vZCBwYWNrZXRzICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgJj0gfkhUX0xJTktfQ1JDRkVOOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJLyogRGlzYWJsZSBEVFNFUlJFTi9NQVJTUC9TRVJSRU4gaW4gSW50ZXJydXB0IENvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX0lOVEJSR19DVFJMX1BPTExfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCB2YWwzMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfY2hlY2soc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldikKK3sKKwlzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8gPSBlZGFjX2Rldi0+cHZ0X2luZm87CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisJdTMyIHZhbDMyOworCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgU3RhdHVzIGFuZCBDb21tYW5kIFJlZ2lzdGVyICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9TVFNDTURfQ0xFQVJfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBQQ0kgYnJpZGdlIHN0YXR1cyBhbmQgY29tbWFuZCIKKwkJCSJyZWdpc3RlciBvbiBkZXZpY2UgJXNcbiIsIHBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIlNTRTogJWQsIFJNQTogJWQsIFJUQTogJWRcbiIsCisJCQkodmFsMzIgJiBQQ0lfU1RTQ01EX1NTRSkgIT0gMCwKKwkJCSh2YWwzMiAmIFBDSV9TVFNDTURfUk1BKSAhPSAwLAorCQkJKHZhbDMyICYgUENJX1NUU0NNRF9SVEEpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9TVFNDTURfQ0xFQVJfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IEh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBIVF9MSU5LX0xLRkFJTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBoeXBlcnRyYW5zcG9ydCBsaW5rIGNvbnRyb2wiCisJCQkicmVnaXN0ZXIgb24gZGV2aWNlICVzXG4iLCBwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJMS0ZBSUw6ICVkXG4iLAorCQkJKHZhbDMyICYgSFRfTElOS19MS0ZBSUwpICE9IDApOworCisJCXZhbDMyIHw9IEhUX0xJTktfTEtGQUlMOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBvdXQgUENJIEludGVycnVwdCBhbmQgQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIFBDSSBpbnRlcnJ1cHQgYW5kIGJyaWRnZSBjb250cm9sIgorCQkJInJlZ2lzdGVyIG9uIGRldmljZSAlc1xuIiwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFRTVEFUOiAlZFxuIiwKKwkJCSh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQ7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTUVNX0xJTUlUX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIG1lbSBsaW1pdCByZWdpc3RlciBvbiAlcyBkZXZpY2VcbiIsCisJCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJEUEU6ICVkLCBSU0U6ICVkLCBSTUE6ICVkXG4iCisJCQkiUlRBOiAlZCwgU1RBOiAlZCwgTURQRTogJWRcbiIsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfRFBFKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9SU0UpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX1JNQSkgICE9IDAsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfUlRBKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9TVEEpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX01EUEUpICE9IDApOworCisJCXZhbDMyIHw9IE1FTV9MSU1JVF9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19NRU1fTElNLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmxlZ2FjeV9pb19yZXM7CitzdGF0aWMgaW50IGF0X2NvbXBhdF9yZWdfYnJva2VuOworI2RlZmluZSBMRUdBQ1lfTlJfUE9SVFMJMQorCisvKiBkZXZpY2Utc3BlY2lmaWMgbWV0aG9kcyBmb3IgYW1kODExMSBMUEMgQnJpZGdlIGRldmljZSAqLworc3RhdGljIHZvaWQgYW1kODExMV9scGNfYnJpZGdlX2luaXQoc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXU4IHZhbDg7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRldl9pbmZvLT5kZXY7CisKKwkvKiBGaXJzdCBjbGVhciBSRUdfQVRfQ09NUEFUW1NFUlIsIElPQ0hLXSBpZiBuZWNlc3NhcnkgKi8KKwlsZWdhY3lfaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTLAorCQkJCQlBTUQ4MTExX0VEQUNfTU9EX1NUUik7CisJaWYgKCFsZWdhY3lfaW9fcmVzKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIHJlcXVlc3QgbGVnYWN5IEkvTyByZWdpb24gIgorCQkJInN0YXJ0ICVkLCBsZW4gJWRcbiIsIF9fZnVuY19fLAorCQkJUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTKTsKKwllbHNlIHsKKwkJdmFsOCA9IF9fZG9faW5iKFJFR19BVF9DT01QQVQpOworCQlpZiAodmFsOCA9PSAweGZmKSB7IC8qIGJ1Z2d5IHBvcnQgKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwb3J0ICVkIGlzIGJ1Z2d5LCBub3Qgc3VwcG9ydGVkIgorCQkJCSIgYnkgaGFyZHdhcmU/XG4iLCBfX2Z1bmNfXywgUkVHX0FUX0NPTVBBVCk7CisJCQlhdF9jb21wYXRfcmVnX2Jyb2tlbiA9IDE7CisJCQlyZWxlYXNlX3JlZ2lvbihSRUdfQVRfQ09NUEFULCBMRUdBQ1lfTlJfUE9SVFMpOworCQkJbGVnYWN5X2lvX3JlcyA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQl1OCBvdXQ4ID0gMDsKKwkJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQkJb3V0OCA9IEFUX0NPTVBBVF9DTFJTRVJSOworCQkJaWYgKHZhbDggJiBBVF9DT01QQVRfSU9DSEspCisJCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCQlpZiAob3V0OCA+IDApCisJCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQl9CisJfQorCisJLyogU2Vjb25kIGNsZWFyIGVycm9yIGZsYWdzIG9uIExQQyBicmlkZ2UgKi8KKwllZGFjX3BjaV9yZWFkX2J5dGUoZGV2LCBSRUdfSU9fQ1RSTF8xLCAmdmFsOCk7CisJaWYgKHZhbDggJiBJT19DVFJMXzFfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfYnl0ZShkZXYsIFJFR19JT19DVFJMXzEsIHZhbDgpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdChzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJaWYgKGxlZ2FjeV9pb19yZXMpCisJCXJlbGVhc2VfcmVnaW9uKFJFR19BVF9DT01QQVQsIExFR0FDWV9OUl9QT1JUUyk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfbHBjX2JyaWRnZV9jaGVjayhzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1OCB2YWw4OworCisJZWRhY19wY2lfcmVhZF9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgJnZhbDgpOworCWlmICh2YWw4ICYgSU9fQ1RSTF8xX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIElPIGNvbnRyb2wgcmVnaXN0ZXIgb24gJXMgZGV2aWNlXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTFBDIEVSUjogJWQsIFBXMkxQQzogJWRcbiIsCisJCQkodmFsOCAmIElPX0NUUkxfMV9MUENfRVJSKSAhPSAwLAorCQkJKHZhbDggJiBJT19DVFJMXzFfUFcyTFBDKSAhPSAwKTsKKworCQl2YWw4IHw9IElPX0NUUkxfMV9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgdmFsOCk7CisKKwkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCWlmIChhdF9jb21wYXRfcmVnX2Jyb2tlbiA9PSAwKSB7CisJCXU4IG91dDggPSAwOworCQl2YWw4ID0gX19kb19pbmIoUkVHX0FUX0NPTVBBVCk7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQlvdXQ4ID0gQVRfQ09NUEFUX0NMUlNFUlI7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX0lPQ0hLKQorCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCWlmIChvdXQ4ID4gMCkgeworCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLAorCQkJCQkJZWRhY19kZXYtPmN0bF9uYW1lKTsKKwkJfQorCX0KK30KKworLyogR2VuZXJhbCBkZXZpY2VzIHJlcHJlc2VudGVkIGJ5IGVkYWNfZGV2aWNlX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gYW1kODExMV9kZXZpY2VzW10gPSB7CisJW0xQQ19CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfTFBDLAorCQkuY3RsX25hbWUgPSAibHBjIiwKKwkJLmluaXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfaW5pdCwKKwkJLmV4aXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdCwKKwkJLmNoZWNrID0gYW1kODExMV9scGNfYnJpZGdlX2NoZWNrLAorCX0sCisJezB9LAorfTsKKworLyogUENJIGNvbnRyb2xsZXJzIHJlcHJlc2VudGVkIGJ5IGVkYWNfcGNpX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gYW1kODExMV9wY2lzW10gPSB7CisJW1BDSV9CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJLAorCQkuY3RsX25hbWUgPSAiQU1EODExMV9QQ0lfQ29udHJvbGxlciIsCisJCS5pbml0ID0gYW1kODExMV9wY2lfYnJpZGdlX2luaXQsCisJCS5leGl0ID0gYW1kODExMV9wY2lfYnJpZGdlX2V4aXQsCisJCS5jaGVjayA9IGFtZDgxMTFfcGNpX2JyaWRnZV9jaGVjaywKKwl9LAorCXswfSwKK307CisKK3N0YXRpYyBpbnQgYW1kODExMV9kZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvID0gJmFtZDgxMTFfZGV2aWNlc1tpZC0+ZHJpdmVyX2RhdGFdOworCisJZGV2X2luZm8tPmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAorCQkJCQlkZXZfaW5mby0+ZXJyX2RldiwgTlVMTCk7CisKKwlpZiAoIWRldl9pbmZvLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFREFDIGRldmljZSBub3QgZm91bmQ6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9pbmZvLT5kZXYpKSB7CisJCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBlbmFibGU6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyoKKwkgKiB3ZSBkbyBub3QgYWxsb2NhdGUgZXh0cmEgcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yCisJICogZWRhY19kZXZpY2VfY3RsX2luZm8sIGJ1dCBtYWtlIHVzZSBvZiBleGlzdGluZworCSAqIG9uZSBpbnN0ZWFkLgorCSovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19kZXZfaWR4Kys7CisJZGV2X2luZm8tPmVkYWNfZGV2ID0KKwkJZWRhY19kZXZpY2VfYWxsb2NfY3RsX2luZm8oMCwgZGV2X2luZm8tPmN0bF9uYW1lLCAxLAorCQkJCQkgICBOVUxMLCAwLCAwLAorCQkJCQkgICBOVUxMLCAwLCBkZXZfaW5mby0+ZWRhY19pZHgpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMTFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gZGV2X2luZm8tPmNoZWNrOworCisJaWYgKGRldl9pbmZvLT5pbml0KQorCQlkZXZfaW5mby0+aW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19kZXZpY2VfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19kZXYgZm9yICVzXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhkZXZfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19kZXYgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfZGV2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbzsKKworCWZvciAoZGV2X2luZm8gPSBhbWQ4MTExX2RldmljZXM7IGRldl9pbmZvLT5lcnJfZGV2OyBkZXZfaW5mbysrKQorCQlpZiAoZGV2X2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIWRldl9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChkZXZfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19kZXZpY2VfZGVsX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfZGV2aWNlX2ZyZWVfY3RsX2luZm8oZGV2X2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAoZGV2X2luZm8tPmV4aXQpCisJCWRldl9pbmZvLT5leGl0KGRldl9pbmZvKTsKKworCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworfQorCitzdGF0aWMgaW50IGFtZDgxMTFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbyA9ICZhbWQ4MTExX3BjaXNbaWQtPmRyaXZlcl9kYXRhXTsKKworCXBjaV9pbmZvLT5kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCQkJcGNpX2luZm8tPmVycl9kZXYsIE5VTEwpOworCisJaWYgKCFwY2lfaW5mby0+ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRURBQyBkZXZpY2Ugbm90IGZvdW5kOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfaW5mby0+ZGV2KSkgeworCQlwY2lfZGV2X3B1dChwY2lfaW5mby0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZW5hYmxlOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogd2UgZG8gbm90IGFsbG9jYXRlIGV4dHJhIHByaXZhdGUgc3RydWN0dXJlIGZvcgorCSAqIGVkYWNfcGNpX2N0bF9pbmZvLCBidXQgbWFrZSB1c2Ugb2YgZXhpc3RpbmcKKwkgKiBvbmUgaW5zdGVhZC4KKwkqLworCXBjaV9pbmZvLT5lZGFjX2lkeCA9IGVkYWNfcGNpX2FsbG9jX2luZGV4KCk7CisJcGNpX2luZm8tPmVkYWNfZGV2ID0gZWRhY19wY2lfYWxsb2NfY3RsX2luZm8oMCwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwlpZiAoIXBjaV9pbmZvLT5lZGFjX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfaW5mby0+ZWRhY19kZXYtPnB2dF9pbmZvID0gcGNpX2luZm87CisJcGNpX2luZm8tPmVkYWNfZGV2LT5kZXYgPSAmcGNpX2luZm8tPmRldi0+ZGV2OworCXBjaV9pbmZvLT5lZGFjX2Rldi0+bW9kX25hbWUgPSBBTUQ4MTExX0VEQUNfTU9EX1NUUjsKKwlwY2lfaW5mby0+ZWRhY19kZXYtPmN0bF9uYW1lID0gcGNpX2luZm8tPmN0bF9uYW1lOworCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZGV2X25hbWUgPSBwY2lfaW5mby0+ZGV2LT5kZXYuYnVzX2lkOworCisJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpCisJCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZWRhY19jaGVjayA9IHBjaV9pbmZvLT5jaGVjazsKKworCWlmIChwY2lfaW5mby0+aW5pdCkKKwkJcGNpX2luZm8tPmluaXQocGNpX2luZm8pOworCisJaWYgKGVkYWNfcGNpX2FkZF9kZXZpY2UocGNpX2luZm8tPmVkYWNfZGV2LCBwY2lfaW5mby0+ZWRhY19pZHgpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19wY2kgZm9yICVzXG4iLAorCQkJcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19wY2lfZnJlZV9jdGxfaW5mbyhwY2lfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19wY2kgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIHBjaV9pbmZvLT5lcnJfZGV2LAorCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbzsKKworCWZvciAocGNpX2luZm8gPSBhbWQ4MTExX3BjaXM7IHBjaV9pbmZvLT5lcnJfZGV2OyBwY2lfaW5mbysrKQorCQlpZiAocGNpX2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIXBjaV9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChwY2lfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19wY2lfZGVsX2RldmljZShwY2lfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfcGNpX2ZyZWVfY3RsX2luZm8ocGNpX2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAocGNpX2luZm8tPmV4aXQpCisJCXBjaV9pbmZvLT5leGl0KHBjaV9pbmZvKTsKKworCXBjaV9kZXZfcHV0KHBjaV9pbmZvLT5kZXYpOworfQorCisvKiBQQ0kgRGV2aWNlIElEIHRhbGJlIGZvciBnZW5lcmFsIEVEQUMgZGV2aWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX2Rldl90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9MUEMpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IExQQ19CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19kZXZfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19kZXZfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19ERVYiLAorCS5wcm9iZSA9IGFtZDgxMTFfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX2Rldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX2Rldl90YmwsCit9OworCisvKiBQQ0kgRGV2aWNlIElEIHRhYmxlIGZvciBFREFDIFBDSSBjb250cm9sbGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX3BjaV90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9QQ0kpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IFBDSV9CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19wY2lfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19QQ0kiLAorCS5wcm9iZSA9IGFtZDgxMTFfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX3BjaV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTExX2VkYWNfaW5pdCh2b2lkKQoreworCWludCB2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJBTUQ4MTExIEVEQUMgZHJpdmVyICIJQU1EODExMV9FREFDX1JFVklTSU9OICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlx0KGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuXG4iKTsKKworCS8qIE9ubHkgUE9MTCBtb2RlIHN1cHBvcnRlZCBzbyBmYXIgKi8KKwllZGFjX29wX3N0YXRlID0gRURBQ19PUFNUQVRFX1BPTEw7CisKKwl2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTExX2VkYWNfZGV2X2RyaXZlcik7CisJdmFsIHw9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDgxMTFfZWRhY19wY2lfZHJpdmVyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbWQ4MTExX2VkYWNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX3BjaV9kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX2Rldl9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KGFtZDgxMTFfZWRhY19pbml0KTsKK21vZHVsZV9leGl0KGFtZDgxMTFfZWRhY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+XG4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EODExMSBIeXBlclRyYW5zcG9ydCBJL08gSHViIEVEQUMga2VybmVsIG1vZHVsZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Nzk0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuaCwgRURBQyBkZWZzIGZvciBBTUQ4MTExIGh5cGVydHJhbnNwb3J0IGNoaXAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BTUQ4MTExX0VEQUNfSF8KKyNkZWZpbmUgX0FNRDgxMTFfRURBQ19IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfUENJX1NUU0NNRAkweDA0CitlbnVtIHBjaV9zdHNjbWRfYml0cyB7CisJUENJX1NUU0NNRF9TU0UJCT0gQklUKDMwKSwKKwlQQ0lfU1RTQ01EX1JNQQkJPSBCSVQoMjkpLAorCVBDSV9TVFNDTURfUlRBCQk9IEJJVCgyOCksCisJUENJX1NUU0NNRF9TRVJSRU4JPSBCSVQoOCksCisJUENJX1NUU0NNRF9DTEVBUl9NQVNLCT0gKFBDSV9TVFNDTURfU1NFIHwKKwkJCQkgICBQQ0lfU1RTQ01EX1JNQSB8CisJCQkJICAgUENJX1NUU0NNRF9SVEEpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIE1lbW9yeSBCYXNlLUxpbWl0IFJlZ2lzdGVyLCBEZXZBOjB4MWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19NRU1fTElNICAgICAweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFICAgPSBCSVQoMzEpLAorCU1FTV9MSU1JVF9SU0UgICA9IEJJVCgzMCksCisJTUVNX0xJTUlUX1JNQSAgID0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBICAgPSBCSVQoMjgpLAorCU1FTV9MSU1JVF9TVEEgICA9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUgID0gQklUKDI0KSwKKwlNRU1fTElNSVRfQ0xFQVJfTUFTSyAgPSAoTUVNX0xJTUlUX0RQRSB8CisJCQkJIE1FTV9MSU1JVF9SU0UgfAorCQkJCSBNRU1fTElNSVRfUk1BIHwKKwkJCQkgTUVNX0xJTUlUX1JUQSB8CisJCQkJIE1FTV9MSU1JVF9TVEEgfAorCQkJCSBNRU1fTElNSVRfTURQRSkKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCUh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciwgRGV2QToweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfSFRfTElOSwkweGM0CitlbnVtIGh0X2xpbmtfYml0cyB7CisJSFRfTElOS19MS0ZBSUwJPSBCSVQoNCksCisJSFRfTElOS19DUkNGRU4JPSBCSVQoMSksCisJSFRfTElOS19DTEVBUl9NQVNLID0gKEhUX0xJTktfTEtGQUlMKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJIEJyaWRnZSBJbnRlcnJ1cHQgYW5kIEJyaWRnZSBDb250cm9sLCBEZXZBOjB4M2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19QQ0lfSU5UQlJHX0NUUkwJMHgzYworZW51bSBwY2lfaW50YnJnX2N0cmxfYml0cyB7CisJUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOCT0gQklUKDI3KSwKKwlQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUCQk9IEJJVCgyNiksCisJUENJX0lOVEJSR19DVFJMX01BUlNQCQk9IEJJVCgyMSksCisJUENJX0lOVEJSR19DVFJMX1NFUlJFTgkJPSBCSVQoMTcpLAorCVBDSV9JTlRCUkdfQ1RSTF9QRVJFTgkJPSBCSVQoMTYpLAorCVBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLCT0gKFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpLAorCVBDSV9JTlRCUkdfQ1RSTF9QT0xMX01BU0sJPSAoUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX01BUlNQIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX1NFUlJFTikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlJL08gQ29udHJvbCAxIFJlZ2lzdGVyLCBEZXZCOjB4NDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JT19DVFJMXzEgMHg0MAorZW51bSBpb19jdHJsXzFfYml0cyB7CisJSU9fQ1RSTF8xX05NSU9ORVJSCT0gQklUKDcpLAorCUlPX0NUUkxfMV9MUENfRVJSCT0gQklUKDYpLAorCUlPX0NUUkxfMV9QVzJMUEMJPSBCSVQoMSksCisJSU9fQ1RSTF8xX0NMRUFSX01BU0sJPSAoSU9fQ1RSTF8xX0xQQ19FUlIgfCBJT19DVFJMXzFfUFcyTFBDKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCUxlZ2FjeSBJL08gU3BhY2UgUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfQVRfQ09NUEFUIDB4NjEKK2VudW0gYXRfY29tcGF0X2JpdHMgeworCUFUX0NPTVBBVF9TRVJSCQk9IEJJVCg3KSwKKwlBVF9DT01QQVRfSU9DSEsJCT0gQklUKDYpLAorCUFUX0NPTVBBVF9DTFJJT0NISwk9IEJJVCgzKSwKKwlBVF9DT01QQVRfQ0xSU0VSUgk9IEJJVCgyKSwKK307CisKK3N0cnVjdCBhbWQ4MTExX2Rldl9pbmZvIHsKKwl1MTYgZXJyX2RldjsJLyogUENJIERldmljZSBJRCAqLworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGVkYWNfaWR4OwkvKiBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2OworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCitzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyB7CisJdTE2IGVycl9kZXY7CS8qIFBDSSBEZXZpY2UgSUQgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBlZGFjX2lkeDsJLyogcGNpIGluZGV4ICovCisJY29uc3QgY2hhciAqY3RsX25hbWU7CisJc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldjsKKwl2b2lkICgqaW5pdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqY2hlY2spKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19kZXYpOworfTsKKworI2VuZGlmIC8qIF9BTUQ4MTExX0VEQUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgzYjMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogYW1kODEzMV9lZGFjLmMsIEFNRDgxMzEgaHlwZXJ0cmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKworI2luY2x1ZGUgImVkYWNfY29yZS5oIgorI2luY2x1ZGUgImVkYWNfbW9kdWxlLmgiCisjaW5jbHVkZSAiYW1kODEzMV9lZGFjLmgiCisKKyNkZWZpbmUgQU1EODEzMV9FREFDX1JFVklTSU9OCSIgVmVyOiAxLjAuMCAiIF9fREFURV9fCisjZGVmaW5lIEFNRDgxMzFfRURBQ19NT0RfU1RSCSJhbWQ4MTMxX2VkYWMiCisKKy8qIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODEzMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3dyaXRlX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHUzMiB2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgdmFsMzIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSIEFNRDgxMzFfRURBQ19NT0RfU1RSCisJCQkiIFBDSSBBY2Nlc3MgV3JpdGUgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIGNoYXIgKiBjb25zdCBicmlkZ2Vfc3RyW10gPSB7CisJW05PUlRIX0FdID0gIk5PUlRIIEEiLAorCVtOT1JUSF9CXSA9ICJOT1JUSCBCIiwKKwlbU09VVEhfQV0gPSAiU09VVEggQSIsCisJW1NPVVRIX0JdID0gIlNPVVRIIEIiLAorCVtOT19CUklER0VdID0gIk5PIEJSSURHRSIsCit9OworCisvKiBTdXBwb3J0IHVwIHRvIHR3byBBTUQ4MTMxIGNoaXBzZXRzIG9uIGEgcGxhdGZvcm0gKi8KK3N0YXRpYyBzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyBhbWQ4MTMxX2RldmljZXNbXSA9IHsKKwl7CisJLmluc3QgPSBOT1JUSF9BLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX05PUlRIX0EsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9OT1JUSF9BIiwKKwl9LAorCXsKKwkuaW5zdCA9IE5PUlRIX0IsCisJLmRldmZuID0gREVWRk5fUENJWF9CUklER0VfTk9SVEhfQiwKKwkuY3RsX25hbWUgPSAiQU1EODEzMV9QQ0lYX05PUlRIX0IiLAorCX0sCisJeworCS5pbnN0ID0gU09VVEhfQSwKKwkuZGV2Zm4gPSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BLAorCS5jdGxfbmFtZSA9ICJBTUQ4MTMxX1BDSVhfU09VVEhfQSIsCisJfSwKKwl7CisJLmluc3QgPSBTT1VUSF9CLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9TT1VUSF9CIiwKKwl9LAorCXsuaW5zdCA9IE5PX0JSSURHRSx9LAorfTsKKworc3RhdGljIHZvaWQgYW1kODEzMV9wY2l4X2luaXQoc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXUzMiB2YWwzMjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKworCS8qIEZpcnN0IGNsZWFyIGVycm9yIGRldGVjdGlvbiBmbGFncyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBUaW1lZG91dCBmbGFnICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBDbGVhciBDUkMgRXJyb3IgZmxhZyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgdmFsMzIpOworCisJLyogQ2xlYXIgQ1JDIEVycm9yIGZsYWcgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTE5LX0NUUkxfQ1JDRVJSX0IpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsIHZhbDMyKTsKKworCS8qCisJICogVGhlbiBlbmFibGUgYWxsIGVycm9yIGRldGVjdGlvbnMuCisJICoKKwkgKiBTZXR1cCBEaXNjYXJkIFRpbWVyIFN5bmMgRmxvb2QgRW5hYmxlLAorCSAqIFN5c3RlbSBFcnJvciBFbmFibGUgYW5kIFBhcml0eSBFcnJvciBFbmFibGUuCisJICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0U7CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsIHZhbDMyKTsKKworCS8qIEVuYWJsZSBvdmVyYWxsIFNFUlIgRXJyb3IgZGV0ZWN0aW9uICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19TVFNfQ01ELCAmdmFsMzIpOworCXZhbDMyIHw9IFNUU19DTURfU0VSUkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1NUU19DTUQsIHZhbDMyKTsKKworCS8qIFNldHVwIENSQyBGbG9vZCBFbmFibGUgZm9yIGxpbmsgc2lkZSBBICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCAmdmFsMzIpOworCXZhbDMyIHw9IExOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCB2YWwzMik7CisKKwkvKiBTZXR1cCBDUkMgRmxvb2QgRW5hYmxlIGZvciBsaW5rIHNpZGUgQiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBMTktfQ1RSTF9DUkNGRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTMxX3BjaXhfZXhpdChzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkZXZfaW5mby0+ZGV2OworCisJLyogRGlzYWJsZSBTRVJSLCBQRVJSIGFuZCBEVFNFIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsICZ2YWwzMik7CisJdmFsMzIgJj0gfihJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0UpOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBEaXNhYmxlIG92ZXJhbGwgU3lzdGVtIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+U1RTX0NNRF9TRVJSRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgdmFsMzIpOworCisJLyogRGlzYWJsZSBDUkMgU3luYyBGbG9vZCBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+TE5LX0NUUkxfQ1JDRkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCS8qIERpc2FibGUgQ1JDIFN5bmMgRmxvb2Qgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJdmFsMzIgJj0gfkxOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCB2YWwzMik7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcGNpeF9jaGVjayhzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1MzIgdmFsMzI7CisKKwkvKiBDaGVjayBQQ0ktWCBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgZm9yIGVycm9ycyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBtZW0gbGltaXQgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFBFOiAlZCwgUlNFOiAlZCwgUk1BOiAlZFxuIgorCQkJIlJUQTogJWQsIFNUQTogJWQsIE1EUEU6ICVkXG4iLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfRFBFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlNFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUk1BLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlRBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfU1RBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfTURQRSk7CisKKwkJdmFsMzIgfD0gTUVNX0xJTUlUX01BU0s7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIERpc2NhcmQgVGltZXIgdGltZWQgb3V0ICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRXJyb3IocykgaW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHJlZ2lzdGVyICIKKwkJCSJvbiAlcyBicmlkZ2VcbiIsIGRldl9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIkRUUzogJWRcbiIsIHZhbDMyICYgSU5UX0NUTFJfRFRTKTsKKworCQl2YWwzMiB8PSBJTlRfQ1RMUl9EVFM7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBpZiBDUkMgZXJyb3IgaGFwcGVucyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBsaW5rIGNvbmYgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JDRVJSOiAlZFxuIiwgdmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSk7CisKKwkJdmFsMzIgfD0gTE5LX0NUUkxfQ1JDRVJSX0E7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIENSQyBlcnJvciBoYXBwZW5zIG9uIGxpbmsgc2lkZSBCICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIGxpbmsgY29uZiBhbmQgY29udHJvbCByZWdpc3RlciAiCisJCQkib24gJXMgYnJpZGdlXG4iLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJDUkNFUlI6ICVkXG4iLCB2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKTsKKworCQl2YWwzMiB8PSBMTktfQ1RSTF9DUkNFUlJfQjsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGFtZDgxMzFfaW5mbyBhbWQ4MTMxX2NoaXBzZXQgPSB7CisJLmVycl9kZXYgPSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMsCisJLmRldmljZXMgPSBhbWQ4MTMxX2RldmljZXMsCisJLmluaXQgPSBhbWQ4MTMxX3BjaXhfaW5pdCwKKwkuZXhpdCA9IGFtZDgxMzFfcGNpeF9leGl0LAorCS5jaGVjayA9IGFtZDgxMzFfcGNpeF9jaGVjaywKK307CisKKy8qCisgKiBUaGVyZSBhcmUgNCBQQ0lYIEJyaWRnZXMgb24gQVRDQS02MTAxIHRoYXQgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCwKKyAqIHNvIGFtZDgxMzFfcHJvYmUoKSB3b3VsZCBiZSBjYWxsZWQgYnkga2VybmVsIDQgdGltZXMsIHdpdGggZGlmZmVyZW50CisgKiBhZGRyZXNzIG9mIHBjaV9kZXYgZm9yIGVhY2ggb2YgdGhlbSBlYWNoIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgYW1kODEzMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogV2UgY2FuJ3QgY2FsbCBwY2lfZ2V0X2RldmljZSgpIGFzIHdlIGFyZSB1c2VkIHRvIGRvIGJlY2F1c2UKKwkgKiB0aGVyZSBhcmUgNCBvZiB0aGVtIGJ1dCBwY2lfZGV2X2dldCgpIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmRldiA9IHBjaV9kZXZfZ2V0KGRldik7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2luZm8tPmRldikpIHsKKwkJcGNpX2Rldl9wdXQoZGV2X2luZm8tPmRldik7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGVuYWJsZToiCisJCQkidmVuZG9yICV4LCBkZXZpY2UgJXgsIGRldmZuICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGFtZDgxMzFfY2hpcHNldC5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIHdlIGRvIG5vdCBhbGxvY2F0ZSBleHRyYSBwcml2YXRlIHN0cnVjdHVyZSBmb3IKKwkgKiBlZGFjX3BjaV9jdGxfaW5mbywgYnV0IG1ha2UgdXNlIG9mIGV4aXN0aW5nCisJICogb25lIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19wY2lfYWxsb2NfaW5kZXgoKTsKKwlkZXZfaW5mby0+ZWRhY19kZXYgPSBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbygwLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMzFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gYW1kODEzMV9jaGlwc2V0LmNoZWNrOworCisJaWYgKGFtZDgxMzFfY2hpcHNldC5pbml0KQorCQlhbWQ4MTMxX2NoaXBzZXQuaW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19wY2lfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYsIGRldl9pbmZvLT5lZGFjX2lkeCkgPiAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIGVkYWNfcGNpX2FkZF9kZXZpY2UoKSBmb3IgJXNcbiIsCisJCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImFkZGVkIG9uZSBkZXZpY2Ugb24gQU1EODEzMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgZGV2Zm4gJXgsIG5hbWUgJXNcbiIsCisJCVBDSV9WRU5ET1JfSURfQU1ELCBhbWQ4MTMxX2NoaXBzZXQuZXJyX2RldiwKKwkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm47CisKKwlpZiAoZGV2X2luZm8tPmVkYWNfZGV2KSB7CisJCWVkYWNfcGNpX2RlbF9kZXZpY2UoZGV2X2luZm8tPmVkYWNfZGV2LT5kZXYpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJfQorCisJaWYgKGFtZDgxMzFfY2hpcHNldC5leGl0KQorCQlhbWQ4MTMxX2NoaXBzZXQuZXhpdChkZXZfaW5mbyk7CisKKwlwY2lfZGV2X3B1dChkZXZfaW5mby0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDgxMzFfZWRhY19wY2lfdGJsW10gPSB7CisJeworCVBDSV9WRU5EX0RFVihBTUQsIDgxMzFfQlJJREdFKSwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkuY2xhc3MgPSAwLAorCS5jbGFzc19tYXNrID0gMCwKKwkuZHJpdmVyX2RhdGEgPSAwLAorCX0sCisJeworCTAsCisJfQkJCS8qIHRhYmxlIGlzIE5VTEwtdGVybWluYXRlZCAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTMxX2VkYWNfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ4MTMxX2VkYWNfZHJpdmVyID0geworCS5uYW1lID0gQU1EODEzMV9FREFDX01PRF9TVFIsCisJLnByb2JlID0gYW1kODEzMV9wcm9iZSwKKwkucmVtb3ZlID0gYW1kODEzMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODEzMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTMxX2VkYWNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkFNRDgxMzEgRURBQyBkcml2ZXIgIiBBTUQ4MTMxX0VEQUNfUkVWSVNJT04gIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXHQoYykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy5cbiIpOworCisJLyogT25seSBQT0xMIG1vZGUgc3VwcG9ydGVkIHNvIGZhciAqLworCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtZDgxMzFfZWRhY19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYW1kODEzMV9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQoYW1kODEzMV9lZGFjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDYW8gUWluZ3RhbyA8cWluZ3Rhby5jYW9Ad2luZHJpdmVyLmNvbT5cbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBFREFDIGtlcm5lbCBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUwZDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogYW1kODEzMV9lZGFjLmgsIEVEQUMgZGVmcyBmb3IgQU1EODEzMSBoeXBlcnRyYW5zcG9ydCBjaGlwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIEF1dGhvcnM6CUNhbyBRaW5ndGFvIDxxaW5ndGFvLmNhb0B3aW5kcml2ZXIuY29tPgorICogCQlCZW5qYW1pbiBXYWxzaCA8YmVuamFtaW4ud2Fsc2hAd2luZHJpdmVyLmNvbT4KKyAqIAkJSHUgWW9uZ3FpIDx5b25ncWkuaHVAd2luZHJpdmVyLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQU1EODEzMV9FREFDX0hfCisjZGVmaW5lIF9BTUQ4MTMxX0VEQUNfSF8KKworI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9OT1JUSF9BCTgKKyNkZWZpbmUgREVWRk5fUENJWF9CUklER0VfTk9SVEhfQgkxNgorI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BCTI0CisjZGVmaW5lIERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IJMzIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJLVggQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfU1RTX0NNRAkweDA0CitlbnVtIHN0c19jbWRfYml0cyB7CisJU1RTX0NNRF9TU0UJPSBCSVQoMzApLAorCVNUU19DTURfU0VSUkVOCT0gQklUKDgpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0ktWCBCcmlkZ2UgSW50ZXJydXB0IGFuZCBCcmlkZ2UgQ29udHJvbCBSZWdpc3RlciwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JTlRfQ1RMUgkweDNjCitlbnVtIGludF9jdGxyX2JpdHMgeworCUlOVF9DVExSX0RUU0UJPSBCSVQoMjcpLAorCUlOVF9DVExSX0RUUwk9IEJJVCgyNiksCisJSU5UX0NUTFJfU0VSUgk9IEJJVCgxNyksCisJSU5UX0NUTFJfUEVSUgk9IEJJVCgxNikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVBDSS1YIEJyaWRnZSBNZW1vcnkgQmFzZS1MaW1pdCBSZWdpc3RlciwgRGV2QToweDFDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfTUVNX0xJTQkweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFIAk9IEJJVCgzMSksCisJTUVNX0xJTUlUX1JTRSAJPSBCSVQoMzApLAorCU1FTV9MSU1JVF9STUEgCT0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBIAk9IEJJVCgyOCksCisJTUVNX0xJTUlUX1NUQQk9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUJPSBCSVQoMjQpLAorCU1FTV9MSU1JVF9NQVNLCT0gTUVNX0xJTUlUX0RQRXxNRU1fTElNSVRfUlNFfE1FTV9MSU1JVF9STUF8CisJCQkJTUVNX0xJTUlUX1JUQXxNRU1fTElNSVRfU1RBfE1FTV9MSU1JVF9NRFBFCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0EJMHhjNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0IgIDB4YzgKKworZW51bSBsbmtfY3RybF9iaXRzIHsKKwlMTktfQ1RSTF9DUkNFUlJfQQk9IEJJVCg5KSwKKwlMTktfQ1RSTF9DUkNFUlJfQgk9IEJJVCg4KSwKKwlMTktfQ1RSTF9DUkNGRU4JCT0gQklUKDEpCit9OworCitlbnVtIHBjaXhfYnJpZGdlX2luc3QgeworCU5PUlRIX0EgPSAwLAorCU5PUlRIX0IgPSAxLAorCVNPVVRIX0EgPSAyLAorCVNPVVRIX0IgPSAzLAorCU5PX0JSSURHRSA9IDQKK307CisKK3N0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvIHsKKwlpbnQgZGV2Zm47CisJZW51bSBwY2l4X2JyaWRnZV9pbnN0IGluc3Q7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZWRhY19pZHg7CS8qIHBjaSBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2OworfTsKKworLyoKKyAqIEFNRDgxMzEgY2hpcHNldCBoYXMgdHdvIHBhaXJzIG9mIFBDSVggQnJpZGdlIGFuZCByZWxhdGVkIElPQVBJQworICogQ29udHJvbGVyLCBhbmQgQVRDQS02MTAxIGhhcyB0d28gQU1EODEzMSBjaGlwc2V0cywgc28gdGhlcmUgYXJlCisgKiBmb3VyIFBDSVggQnJpZGdlcyBvbiBBVENBLTYxMDEgYWx0b2dldGhlci4KKyAqCisgKiBUaGVzZSBQQ0lYIEJyaWRnZXMgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCBhbmQgYXJlIGFsbCBvZgorICogRnVuY3Rpb24gWmVybywgdGhleSBjb3VsZCBiZSBkaXNjcmltYXRlZCBieSB0aGVpciBwY2lfZGV2LT5kZXZmbi4KKyAqIFRoZXkgc2hhcmUgdGhlIHNhbWUgc2V0IG9mIGluaXQvY2hlY2svZXhpdCBtZXRob2RzLCBhbmQgdGhlaXIKKyAqIHByaXZhdGUgc3RydWN0dXJlcyBhcmUgY29sbGVjdGVkIGluIHRoZSBkZXZpY2VzW10gYXJyYXkuCisgKi8KK3N0cnVjdCBhbWQ4MTMxX2luZm8geworCXUxNiBlcnJfZGV2OwkvKiBQQ0kgRGV2aWNlIElEIGZvciBBTUQ4MTMxIEFQSUMqLworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZpY2VzOworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCisjZW5kaWYgLyogX0FNRDgxMzFfRURBQ19IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggNGI1NWVjNi4uMjhmMmMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtNDksNiArNDksMTAgQEAKICNkZWZpbmUgZWRhY19wcmludGsobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiBmbXQsICMjYXJnKQogCisjZGVmaW5lIGVkYWNfcHJpbnRrX3ZlcmJvc2UobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiAiaW4gJXMsIGxpbmUgYXQgJWQ6ICIgZm10LAlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgIyNhcmcpCisKICNkZWZpbmUgZWRhY19tY19wcmludGsobWNpLCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgTUMlZDogIiBmbXQsIG1jaS0+bWNfaWR4LCAjI2FyZykKIApAQCAtNzEsMTEgKzc1LDIwIEBACiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIGV4dGVybiBpbnQgZWRhY19kZWJ1Z19sZXZlbDsKIAorI2lmbmRlZiBDT05GSUdfRURBQ19ERUJVR19WRVJCT1NFCiAjZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlpZiAobGV2ZWwgPD0gZWRhY19kZWJ1Z19sZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX0RFQlVHLCBmbXQsICMjYXJnKTsgXAotCX0gd2hpbGUoMCkKKwl9IHdoaWxlICgwKQorI2Vsc2UgIC8qIENPTkZJR19FREFDX0RFQlVHX1ZFUkJPU0UgKi8KKyNkZWZpbmUgZWRhY19kZWJ1Z19wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChsZXZlbCA8PSBlZGFjX2RlYnVnX2xldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWVkYWNfcHJpbnRrX3ZlcmJvc2UoS0VSTl9ERUJVRywgRURBQ19ERUJVRywgZm10LCBcCisJCQkJCSAgICAjI2FyZyk7CQkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKIAogI2RlZmluZSBkZWJ1Z2YwKCAuLi4gKSBlZGFjX2RlYnVnX3ByaW50aygwLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIGRlYnVnZjEoIC4uLiApIGVkYWNfZGVidWdfcHJpbnRrKDEsIF9fVkFfQVJHU19fICkKQEAgLTgzMSw2ICs4NDQsNyBAQAogZXh0ZXJuIHZvaWQgZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLAogCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpOwogCitleHRlcm4gaW50IGVkYWNfcGNpX2FsbG9jX2luZGV4KHZvaWQpOwogZXh0ZXJuIGludCBlZGFjX3BjaV9hZGRfZGV2aWNlKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLCBpbnQgZWRhY19pZHgpOwogZXh0ZXJuIHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19wY2lfZGVsX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2kuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCmluZGV4IDVkM2M4MDguLjViMTUwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCkBAIC0zMCw2ICszMCw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZWRhY19wY2lfY3Rsc19tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGVkYWNfcGNpX2xpc3QpOworc3RhdGljIGF0b21pY190IHBjaV9pbmRleGVzID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qCiAgKiBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbwpAQCAtMzE4LDYgKzMxOSwxOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKTsKIAogLyoKKyAqIGVkYWNfcGNpX2FsbG9jX2luZGV4OiBBbGxvY2F0ZSBhIHVuaXF1ZSBQQ0kgaW5kZXggbnVtYmVyCisgKgorICogUmV0dXJuOgorICogICAgICBhbGxvY2F0ZWQgaW5kZXggbnVtYmVyCisgKgorICovCitpbnQgZWRhY19wY2lfYWxsb2NfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJnBjaV9pbmRleGVzKSAtIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZGFjX3BjaV9hbGxvY19pbmRleCk7CisKKy8qCiAgKiBlZGFjX3BjaV9hZGRfZGV2aWNlOiBJbnNlcnQgdGhlICdlZGFjX2Rldicgc3RydWN0dXJlIGludG8gdGhlCiAgKiBlZGFjX3BjaSBnbG9iYWwgbGlzdCBhbmQgY3JlYXRlIHN5c2ZzIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoCiAgKiBlZGFjX3BjaSBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwpAQCAtMCwwICsxLDE0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGNyLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJwcGM0eHhfZWRhYy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBkcml2ZXIgZm9yIG1vbml0b3JpbmcgYW5kIGhhbmRsaW5nIGV2ZW50cworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBJTUIgRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgQU1DQy9JQk0KKyAqIDQwNUVYW3JdLCA0NDBTUCwgNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIEFzIHJlYWxpemVkIGluIHRoZSA0MDVFWFtyXSwgdGhpcyBjb250cm9sbGVyIGZlYXR1cmVzOgorICoKKyAqICAgLSBTdXBwb3J0IGZvciByZWdpc3RlcmVkLSBhbmQgbm9uLXJlZ2lzdGVyZWQgRERSMSBhbmQgRERSMiBtZW1vcnkuCisgKiAgIC0gMzItYml0IG9yIDE2LWJpdCBtZW1vcnkgaW50ZXJmYWNlIHdpdGggb3B0aW9uYWwgRUNDLgorICoKKyAqICAgICBvIEVDQyBzdXBwb3J0IGluY2x1ZGVzOgorICoKKyAqICAgICAgIC0gNC1iaXQgU0VDL0RFRAorICogICAgICAgLSBBbGlnbmVkLW5pYmJsZSBlcnJvciBkZXRlY3QKKyAqICAgICAgIC0gQnlwYXNzIG1vZGUKKyAqCisgKiAgIC0gVHdvICgyKSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMSBHaUIgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZSBhbmQgdXAgdG8gNTEyIE1pQiBwZXIKKyAqICAgICBiYW5rL3JhbmsgaW4gMTYtYml0IG1vZGUuCisgKgorICogQXMgcmVhbGl6ZWQgaW4gdGhlIDQ0MFNQIGFuZCA0NDBTUGUsIHRoaXMgY29udHJvbGxlciBjaGFuZ2VzL2FkZHM6CisgKgorICogICAtIDY0LWJpdCBvciAzMi1iaXQgbWVtb3J5IGludGVyZmFjZSB3aXRoIG9wdGlvbmFsIEVDQy4KKyAqCisgKiAgICAgbyBFQ0Mgc3VwcG9ydCBpbmNsdWRlczoKKyAqCisgKiAgICAgICAtIDgtYml0IFNFQy9ERUQKKyAqICAgICAgIC0gQWxpZ25lZC1uaWJibGUgZXJyb3IgZGV0ZWN0CisgKiAgICAgICAtIEJ5cGFzcyBtb2RlCisgKgorICogICAtIFVwIHRvIDQgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDIgR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBcyByZWFsaXplZCBpbiB0aGUgNDYwRVggYW5kIDQ2MEdULCB0aGlzIGNvbnRyb2xsZXIgY2hhbmdlcy9hZGRzOgorICoKKyAqICAgLSA2NC1iaXQgb3IgMzItYml0IG1lbW9yeSBpbnRlcmZhY2Ugd2l0aCBvcHRpb25hbCBFQ0MuCisgKgorICogICAgIG8gRUNDIHN1cHBvcnQgaW5jbHVkZXM6CisgKgorICogICAgICAgLSA4LWJpdCBTRUMvREVECisgKiAgICAgICAtIEFsaWduZWQtbmliYmxlIGVycm9yIGRldGVjdAorICogICAgICAgLSBCeXBhc3MgbW9kZQorICoKKyAqICAgLSBGb3VyICg0KSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMTYgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDggR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBdCBwcmVzZW50LCB0aGlzIGRyaXZlciBoYXMgT05MWSBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoZSBjb250cm9sbGVyCisgKiByZWFsaXphdGlvbiBpbiB0aGUgNDA1RVhbcl0gb24gdGhlIEFNQ0MgS2lsYXVlYSBhbmQgSGFsZWFrYWxhCisgKiBib2FyZHMgKDI1NiBNaUIgdy9vIEVDQyBtZW1vcnkgc29sZGVyZWQgb250byB0aGUgYm9hcmQpIGFuZCBhCisgKiBwcm9wcmlldGFyeSBib2FyZCBiYXNlZCBvbiB0aG9zZSBkZXNpZ25zICgxMjggTWlCIEVDQyBtZW1vcnksIGFsc28KKyAqIHNvbGRlcmVkIG9udG8gdGhlIGJvYXJkKS4KKyAqCisgKiBEeW5hbWljIGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyBuZWVkcyB0byBiZSBhZGRlZCBmb3IgdGhlCisgKiBvdGhlciByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGxpc3RlZCBhYm92ZS4KKyAqCisgKiBFdmVudHVhbGx5LCB0aGlzIGRyaXZlciB3aWxsIGxpa2VseSBiZSBhZGFwdGVkIHRvIHRoZSBhYm92ZSB2YXJpYW50CisgKiByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGFzIHdlbGwgYXMgYnJva2VuIGFwYXJ0IHRvIGhhbmRsZQorICogdGhlIG90aGVyIGtub3duIEVDQy1jYXBhYmxlIGNvbnRyb2xsZXJzIHByZXZhbGVudCBpbiBvdGhlciA0eHgKKyAqIHByb2Nlc3NvcnM6CisgKgorICogICAtIElCTSBTRFJBTSAoNDA1R1AsIDQwNUNSIGFuZCA0MDVFUCkgImlibSxzZHJhbS00eHgiCisgKiAgIC0gSUJNIEREUjEgKDQ0MEdQLCA0NDBHWCwgNDQwRVAgYW5kIDQ0MEdSKSAiaWJtLHNkcmFtLTR4eC1kZHIiCisgKiAgIC0gRGVuYWxpIEREUjEvRERSMiAoNDQwRVBYIGFuZCA0NDBHUlgpICJkZW5hbGksc2RyYW0tNHh4LWRkcjIiCisgKgorICogRm9yIHRoaXMgY29udHJvbGxlciwgdW5mb3J0dW5hdGVseSwgY29ycmVjdGFibGUgZXJyb3JzIHJlcG9ydAorICogbm90aGluZyBtb3JlIHRoYW4gdGhlIGJlYXQvY3ljbGUgYW5kIGJ5dGUvbGFuZSB0aGUgY29ycmVjdGlvbgorICogb2NjdXJyZWQgb24gYW5kIHRoZSBjaGVjayBiaXQgZ3JvdXAgdGhhdCBjb3ZlcmVkIHRoZSBlcnJvci4KKyAqCisgKiBJbiBjb250cmFzdCwgdW5jb3JyZWN0YWJsZSBlcnJvcnMgYWxzbyByZXBvcnQgdGhlIGZhaWxpbmcgYWRkcmVzcywKKyAqIHRoZSBidXMgbWFzdGVyIGFuZCB0aGUgdHJhbnNhY3Rpb24gZGlyZWN0aW9uIChpLmUuIHJlYWQgb3Igd3JpdGUpCisgKgorICogUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlcnJvciBpcyBhIENFIG9yIGEgVUUsIHdlIHJlcG9ydCB0aGUKKyAqIGZvbGxvd2luZyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGRyaXZlci11bmlxdWUgbWVzc2FnZSB0byB0aGUKKyAqIEVEQUMgc3Vic3lzdGVtOgorICoKKyAqICAgLSBEZXZpY2UgdHJlZSBwYXRoCisgKiAgIC0gQmFuayhzKQorICogICAtIENoZWNrIGJpdCBlcnJvciBncm91cAorICogICAtIEJlYXQocykvbGFuZShzKQorICovCisKKy8qIFByZXByb2Nlc3NvciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEVEQUNfT1BTVEFURV9JTlRfU1RSCQkiaW50ZXJydXB0IgorI2RlZmluZSBFREFDX09QU1RBVEVfUE9MTF9TVFIJCSJwb2xsZWQiCisjZGVmaW5lIEVEQUNfT1BTVEFURV9VTktOT1dOX1NUUgkidW5rbm93biIKKworI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRQkJInBwYzR4eF9lZGFjIgorI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04JInYxLjAuMCAiIF9fREFURV9fCisKKyNkZWZpbmUgUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFCTI1NgorCisvKgorICogS2VybmVsIGxvZ2dpbmcgd2l0aG91dCBhbiBFREFDIGluc3RhbmNlCisgKi8KKyNkZWZpbmUgcHBjNHh4X2VkYWNfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfcHJpbnRrKGxldmVsLCAiUFBDNHh4IE1DIiwgZm10LCAjI2FyZykKKworLyoKKyAqIEtlcm5lbCBsb2dnaW5nIHdpdGggYW4gRURBQyBpbnN0YW5jZQorICovCisjZGVmaW5lIHBwYzR4eF9lZGFjX21jX3ByaW50ayhsZXZlbCwgbWNpLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfbWNfY2hpcHNldF9wcmludGsobWNpLCBsZXZlbCwgIlBQQzR4eCIsIGZtdCwgIyNhcmcpCisKKy8qCisgKiBNYWNyb3MgdG8gY29udmVydCBiYW5rIGNvbmZpZ3VyYXRpb24gc2l6ZSBlbnVtZXJhdGlvbnMgaW50byBNaUIgYW5kCisgKiBwYWdlIHZhbHVlcy4KKyAqLworI2RlZmluZSBTRFJBTV9NQkNGX1NaX01pQl9NSU4JCTQKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19NaUIobikJCShTRFJBTV9NQkNGX1NaX01pQl9NSU4gXAorCQkJCQkgPDwgKFNEUkFNX01CQ0ZfU1pfREVDT0RFKG4pKSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhuKQkoU0RSQU1fTUJDRl9TWl9NaUJfTUlOIFwKKwkJCQkJIDw8ICgyMCAtIFBBR0VfU0hJRlQgKyBcCisJCQkJCSAgICAgU0RSQU1fTUJDRl9TWl9ERUNPREUobikpKQorCisvKgorICogVGhlIGlibSxzZHJhbS00eHgtZGRyMiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKERDUnMpIGFyZQorICogaW5kaXJlY3RseSBhY2NjZXNzZWQgYW5kIGhhdmUgYSBiYXNlIGFuZCBsZW5ndGggZGVmaW5lZCBieSB0aGUKKyAqIGRldmljZSB0cmVlLiBUaGUgYmFzZSBjYW4gYmUgYW55dGhpbmc7IGhvd2V2ZXIsIHdlIGV4cGVjdCB0aGUKKyAqIGxlbmd0aCB0byBiZSBwcmVjaXNlbHkgdHdvIHJlZ2lzdGVycywgdGhlIGZpcnN0IGZvciB0aGUgYWRkcmVzcworICogd2luZG93IGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgZGF0YSB3aW5kb3cuCisgKi8KKyNkZWZpbmUgU0RSQU1fRENSX1JFU09VUkNFX0xFTgkJMgorI2RlZmluZSBTRFJBTV9EQ1JfQUREUl9PRkZTRVQJCTAKKyNkZWZpbmUgU0RSQU1fRENSX0RBVEFfT0ZGU0VUCQkxCisKKy8qCisgKiBEZXZpY2UgdHJlZSBpbnRlcnJ1cHQgaW5kaWNlcworICovCisjZGVmaW5lIElOVE1BUF9FQ0NERURfSU5ERVgJCTAJLyogRG91YmxlLWJpdCBFcnJvciBEZXRlY3QgKi8KKyNkZWZpbmUgSU5UTUFQX0VDQ1NFQ19JTkRFWAkJMQkvKiBTaW5nbGUtYml0IEVycm9yIENvcnJlY3QgKi8KKworLyogVHlwZSBEZWZpbml0aW9ucyAqLworCisvKgorICogUFBDNHh4IFNEUkFNIG1lbW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YQorICovCitzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgeworCWRjcl9ob3N0X3QgZGNyX2hvc3Q7CS8qIEluZGlyZWN0IERDUiBhZGRyZXNzL2RhdGEgd2luZG93IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgeworCQlpbnQgc2VjOwkvKiBTaW5nbGUtYml0IGNvcnJlY3RhYmxlIGVycm9yIElSUSBhc3NpZ25lZCAqLworCQlpbnQgZGVkOwkvKiBEb3VibGUtYml0IGRldGVjdGFibGUgZXJyb3IgSVJRIGFzc2lnbmVkICovCisJfSBpcnFzOworfTsKKworLyoKKyAqIFZhcmlvdXMgc3RhdHVzIGRhdGEgZ2F0aGVyZWQgYW5kIG1hbmlwdWxhdGVkIHdoZW4gY2hlY2tpbmcgYW5kCisgKiByZXBvcnRpbmcgRUNDIHN0YXR1cy4KKyAqLworc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHsKKwl1MzIgZWNjZXM7CisJdTMyIGJlc3I7CisJdTMyIGJlYXJoOworCXUzMiBiZWFybDsKKwl1MzIgd21pcnE7Cit9OworCisvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCisKK3N0YXRpYyBpbnQgcHBjNHh4X2VkYWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpkZXZpY2VfaWQpOworc3RhdGljIGludCBwcGM0eHhfZWRhY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlKTsKKworLyogR2xvYmFsIFZhcmlhYmxlcyAqLworCisvKgorICogRGV2aWNlIHRyZWUgbm9kZSB0eXBlIGFuZCBjb21wYXRpYmxlIHR1cGxlcyB0aGlzIGRyaXZlciBjYW4gbWF0Y2gKKyAqIG9uLgorICovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwcGM0eHhfZWRhY19tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUJPSAiaWJtLHNkcmFtLTR4eC1kZHIyIgorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBwcGM0eHhfZWRhY19kcml2ZXIgPSB7CisJLm1hdGNoX3RhYmxlCQk9IHBwYzR4eF9lZGFjX21hdGNoLAorCS5wcm9iZQkJCT0gcHBjNHh4X2VkYWNfcHJvYmUsCisJLnJlbW92ZQkJCT0gcHBjNHh4X2VkYWNfcmVtb3ZlLAorCS5kcml2ZXIJCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gUFBDNFhYX0VEQUNfTU9EVUxFX05BTUUKKwl9Cit9OworCisvKgorICogVE9ETzogVGhlIHJvdyBhbmQgY2hhbm5lbCBwYXJhbWV0ZXJzIGxpa2VseSBuZWVkIHRvIGJlIGR5bmFtaWNhbGx5CisgKiBzZXQgYmFzZWQgb24gdGhlIGFmb3JlbWVudGlvbmVkIHZhcmlhbnQgY29udHJvbGxlciByZWFsaXphdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBwcGM0eHhfZWRhY19ucl9jc3Jvd3MgPSAyOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBwYzR4eF9lZGFjX25yX2NoYW5zID0gMTsKKworLyoKKyAqIFN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIFBMQiBtYXN0ZXIgSURzIGNhcGFibGUgb2YgYmVpbmcgcG9zdGVkIGluCisgKiBTRFJBTV9CRVNSIG9yIFNEUkFNX1dNSVJRIG9uIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcGM0eHhfcGxiX21hc3RlcnNbOV0gPSB7CisJW1NEUkFNX1BMQl9NMElEX0lDVV0JPSAiSUNVIiwKKwlbU0RSQU1fUExCX00wSURfUENJRTBdCT0gIlBDSS1FIDAiLAorCVtTRFJBTV9QTEJfTTBJRF9QQ0lFMV0JPSAiUENJLUUgMSIsCisJW1NEUkFNX1BMQl9NMElEX0RNQV0JPSAiRE1BIiwKKwlbU0RSQU1fUExCX00wSURfRENVXQk9ICJEQ1UiLAorCVtTRFJBTV9QTEJfTTBJRF9PUEJdCT0gIk9QQiIsCisJW1NEUkFNX1BMQl9NMElEX01BTF0JPSAiTUFMIiwKKwlbU0RSQU1fUExCX00wSURfU0VDXQk9ICJTRUMiLAorCVtTRFJBTV9QTEJfTTBJRF9BSEJdCT0gIkFIQiIKK307CisKKy8qKgorICogbWZzZHJhbSAtIHJlYWQgYW5kIHJldHVybiBjb250cm9sbGVyIHJlZ2lzdGVyIGRhdGEKKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgbWFwcGluZy4KKyAqIEBpZGNyX246IFRoZSBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIgdG8gcmVhZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYW5kIHJldHVybnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogY29udHJvbGxlcidzIHNwZWNpZmllZCBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIuCisgKgorICogUmV0dXJucyB0aGUgcmVhZCBkYXRhLgorICovCitzdGF0aWMgaW5saW5lIHUzMgorbWZzZHJhbShjb25zdCBkY3JfaG9zdF90ICpkY3JfaG9zdCwgdW5zaWduZWQgaW50IGlkY3JfbikKK3sKKwlyZXR1cm4gX19tZmRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3Jfbik7Cit9CisKKy8qKgorICogbXRzZHJhbSAtIHdyaXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXIgZGF0YQorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBtYXBwaW5nLgorICogQGlkY3JfbjogVGhlIGluZGlyZWN0IERDUiByZWdpc3RlciB0byB3cml0ZS4KKyAqIEB2YWx1ZTogVGhlIGRhdGEgdG8gd3JpdGUuCisgKgorICogVGhpcyByb3V0aW5lIHdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byB0aGUgY29udHJvbGxlcidzIHNwZWNpZmllZAorICogaW5kaXJlY3QgRENSIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK210c2RyYW0oY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsIHVuc2lnbmVkIGludCBpZGNyX24sIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gX19tdGRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3JfbiwKKwkJCXZhbHVlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yIC0gY2hlY2sgYSBiYW5rIGZvciBhbiBFQ0MgYmFuayBlcnJvcgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSB0byBjaGVjayBmb3IgYW4KKyAqICAgICAgICAgIEVDQyBiYW5rIGVycm9yLgorICogQGJhbms6IFRoZSBiYW5rIHRvIGNoZWNrIGZvciBhbiBFQ0MgZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGRldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGJhbmsgaGFzIGFuIEVDQworICogZXJyb3IuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYmFuayBoYXMgYW4gRUNDIGVycm9yOyBvdGhlcndpc2UsCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wKK3BwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3IoY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkgICAgIHVuc2lnbmVkIGludCBiYW5rKQoreworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJcmV0dXJuIHN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19CSzBFUjsKKwljYXNlIDE6CisJCXJldHVybiBzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQksxRVI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9iYW5rX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgYmFuayBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJhbmsgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTW0JLTkVSXQorICogZmllbGQgb2YgdGhlIHNwZWNpZmllZCBFQ0Mgc3RhdHVzLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdlbmVyYXRlZCBvbiBzdWNjZXNzOyBvdGhlcndpc2UsIDwKKyAqIDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCWludCBuLCB0b3RhbCA9IDA7CisJdW5zaWduZWQgaW50IHJvdywgcm93czsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICIlczogQmFua3M6ICIsIG1jaS0+ZGV2X25hbWUpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKHJvd3MgPSAwLCByb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspIHsKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKSB7CisJCQluID0gc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMldSIsCisJCQkJCShyb3dzKysgPyAiLCAiIDogIiIpLCByb3cpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCByb3dzID8gIiIgOiAiTm9uZSIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKyBmYWlsOgorCXJldHVybiB0b3RhbDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9jaGVja2JpdF9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIGNoZWNrYml0IG1lc3NhZ2UKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZSBhc3NvY2lhdGVkCisgKiAgICAgICB3aXRoIHRoZSBjaGVja2JpdCBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQ0tCRVJdCisgKiBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfY2hlY2tiaXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICAgICAgY2hhciAqYnVmZmVyLAorCQkJCSAgICAgIHNpemVfdCBzaXplKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGNoYXIgKmNrYmVyID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdHVzLT5lY2NlcyAmIFNEUkFNX0VDQ0VTX0NLQkVSX01BU0spIHsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSX05PTkU6CisJCWNrYmVyID0gIk5vbmUiOworCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzM6CisJCWNrYmVyID0gIkVDQzA6MyI7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fRUNDRVNfQ0tCRVJfMzJfRUNDXzRfODoKKwkJc3dpdGNoIChtZnNkcmFtKCZwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX01DT1BUMSkgJgorCQkJU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzE2OgorCQkJY2tiZXIgPSAiRUNDMDozIjsKKwkJCWJyZWFrOworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzMyOgorCQkJY2tiZXIgPSAiRUNDNDo4IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2tiZXIgPSAiVW5rbm93biI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzg6CisJCWNrYmVyID0gIkVDQzA6OCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNrYmVyID0gIlVua25vd24iOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ2hlY2tiaXQgRXJyb3I6ICVzIiwgY2tiZXIpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX2xhbmVfbWVzc2FnZSAtIGdlbmVyYXRlIGludGVycHJldHRlZCBieXRlIGxhbmUgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJ5dGUgbGFuZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQk5DRV0KKyAqIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICBjaGFyICpidWZmZXIsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBsYW5lLCBsYW5lczsKKwljb25zdCB1bnNpZ25lZCBpbnQgZmlyc3RfbGFuZSA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IGxhbmVfY291bnQgPSAxNjsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICI7IEJ5dGUgTGFuZSBFcnJvcnM6ICIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKGxhbmVzID0gMCwgbGFuZSA9IGZpcnN0X2xhbmU7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspIHsKKwkJaWYgKChzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQk5DRV9FTkNPREUobGFuZSkpICE9IDApIHsKKwkJCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkJICAgICAiJXMldSIsCisJCQkJICAgICAobGFuZXMrKyA/ICIsICIgOiAiIiksIGxhbmUpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCBsYW5lcyA/ICIiIDogIk5vbmUiKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisgZmFpbDoKKwlyZXR1cm4gdG90YWw7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgRUNDIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgRUNDRVMgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTIHJlZ2lzdGVyIG9mCisgKiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgY2hhciAqYnVmZmVyLAorCQkJCSBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2NoZWNrYml0X21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworIGZhaWw6CisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIFBMQiBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIFBMQiBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQTEItcmVsYXRlZCBCRVNSCisgKiBhbmQvb3IgV01JUlEgcmVnaXN0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9wbGJfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzLAorCQkJCSBjaGFyICpidWZmZXIsCisJCQkJIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGludCBtYXN0ZXI7CisJYm9vbCByZWFkOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX01BU0spID09IDApCisJCXJldHVybiAwOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX00wRVRfTUFTSykgPT0gU0RSQU1fQkVTUl9NMEVUX05PTkUpCisJCXJldHVybiAwOworCisJcmVhZCA9ICgoc3RhdHVzLT5iZXNyICYgU0RSQU1fQkVTUl9NMFJXX01BU0spID09IFNEUkFNX0JFU1JfTTBSV19SRUFEKTsKKworCW1hc3RlciA9IFNEUkFNX0JFU1JfTTBJRF9ERUNPREUoc3RhdHVzLT5iZXNyKTsKKworCXJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkiJXMgZXJyb3Igdy8gUExCIG1hc3RlciAldSBcIiVzXCI7ICIsCisJCQkocmVhZCA/ICJSZWFkIiA6ICJXcml0ZSIpLAorCQkJbWFzdGVyLAorCQkJKCgobWFzdGVyID49IFNEUkFNX1BMQl9NMElEX0ZJUlNUKSAmJgorCQkJICAobWFzdGVyIDw9IFNEUkFNX1BMQl9NMElEX0xBU1QpKSA/CisJCQkgcHBjNHh4X3BsYl9tYXN0ZXJzW21hc3Rlcl0gOiAiVU5LTk9XTiIpKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgZHJpdmVyLXVuaXF1ZQorICogRURBQyByZXBvcnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCSAgICAgY2hhciAqYnVmZmVyLAorCQkJICAgICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbjsKKworCWlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IDApCisJCXJldHVybjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9lY2NfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCXJldHVybjsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlKG1jaSwgc3RhdHVzLCBidWZmZXIsIHNpemUpOworfQorCisjaWZkZWYgREVCVUcKKy8qKgorICogcHBjNHh4X2VjY19kdW1wX3N0YXR1cyAtIGR1bXAgY29udHJvbGxlciBFQ0Mgc3RhdHVzIHJlZ2lzdGVycworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyBkdW1wZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgZHVtcCBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0byB0aGUga2VybmVsIGxvZyBidWZmZXIgdGhlIHJhdyBhbmQKKyAqIGludGVycHJldHRlZCBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZHVtcF9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fSU5GTywgbWNpLAorCQkJICAgICAgIlxuIgorCQkJICAgICAgIlx0RUNDRVM6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0V01JUlE6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVTUjogIDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVBUjogIDB4JTA4eCUwOHhcbiIKKwkJCSAgICAgICJcdCVzXG4iLAorCQkJICAgICAgc3RhdHVzLT5lY2NlcywKKwkJCSAgICAgIHN0YXR1cy0+d21pcnEsCisJCQkgICAgICBzdGF0dXMtPmJlc3IsCisJCQkgICAgICBzdGF0dXMtPmJlYXJoLAorCQkJICAgICAgc3RhdHVzLT5iZWFybCwKKwkJCSAgICAgIG1lc3NhZ2UpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qKgorICogcHBjNHh4X2VjY19nZXRfc3RhdHVzIC0gZ2V0IGNvbnRyb2xsZXIgRUNDIHN0YXR1cworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyByZXRyaWV2ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIHBvcHVsYXRlIHRoZQorICogICAgICAgICAgRUNDIHN0YXR1cyB3aXRoLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhbmQgbWFza3MsIGFzIGFwcHJvcHJpYXRlLCBhbGwgdGhlIHJlbGV2YW50CisgKiBzdGF0dXMgcmVnaXN0ZXJzIHRoYXQgZGVhbCB3aXRoIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICogV2hpbGUgd2UgcmVhZCBhbGwgb2YgdGhlbSwgZm9yIGNvcnJlY3RhYmxlIGVycm9ycywgd2Ugb25seSBleHBlY3QKKyAqIHRvIGRlYWwgd2l0aCBFQ0NFUy4gRm9yIHVuY29ycmVjdGFibGUgZXJyb3JzLCB3ZSBleHBlY3QgdG8gZGVhbAorICogd2l0aCBhbGwgb2YgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGRjcl9ob3N0X3QgKmRjcl9ob3N0ID0gJnBkYXRhLT5kY3JfaG9zdDsKKworCXN0YXR1cy0+ZWNjZXMgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9FQ0NFUykgJiBTRFJBTV9FQ0NFU19NQVNLOworCXN0YXR1cy0+d21pcnEgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSkgJiBTRFJBTV9XTUlSUV9NQVNLOworCXN0YXR1cy0+YmVzciAgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9CRVNSKSAgJiBTRFJBTV9CRVNSX01BU0s7CisJc3RhdHVzLT5iZWFybCA9IG1mc2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJMKTsKKwlzdGF0dXMtPmJlYXJoID0gbWZzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkgpOworfQorCisvKioKKyAqIHBwYzR4eF9lY2NfY2xlYXJfc3RhdHVzIC0gY2xlYXIgY29udHJvbGxlciBFQ0Mgc3RhdHVzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGJlaW5nIGNsZWFyZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlCisgKiAgICAgICAgICB2YWx1ZXMgdG8gd3JpdGUgdG8gY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVGhpcyByb3V0aW5lIGNsZWFycy0tYnkgd3JpdGluZyB0aGUgbWFza2VkIChhcyBhcHByb3ByaWF0ZSkgc3RhdHVzCisgKiB2YWx1ZXMgYmFjayB0by0tdGhlIHN0YXR1cyByZWdpc3RlcnMgdGhhdCBkZWFsIHdpdGgKKyAqIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VjY19jbGVhcl9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3Qgc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisJY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QgPSAmcGRhdGEtPmRjcl9ob3N0OworCisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fRUNDRVMsCXN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19NQVNLKTsKKwltdHNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSwJc3RhdHVzLT53bWlycSAmIFNEUkFNX1dNSVJRX01BU0spOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFU1IsCXN0YXR1cy0+YmVzciAmIFNEUkFNX0JFU1JfTUFTSyk7CisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkwsCTApOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJILAkwKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfY2UgLSBoYW5kbGUgY29udHJvbGxlciBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKENFKQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlY3RhYmxlIGVycm9yIGJlaW5nIGhhbmRsZWQgYW5kIHJlcG9ydGVkLgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICAgICAgIHRoZSBjb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZCByZXBvcnRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBhbiBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBFQ0MKKyAqIGNvcnJlY3RhYmxlIGVycm9yLiBQZXIgdGhlIGFmb3JlbWVudGlvbmVkIGRpc2N1c3Npb24sIHRoZXJlJ3Mgbm90CisgKiBlbm91Z2ggc3RhdHVzIGF2YWlsYWJsZSB0byB1c2UgdGhlIGZ1bGwgRURBQyBjb3JyZWN0YWJsZSBlcnJvcgorICogaW50ZXJmYWNlLCBzbyB3ZSBqdXN0IHBhc3MgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIHRvIHRoZSAibm8gaW5mbyIKKyAqIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2hhbmRsZV9jZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWludCByb3c7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJZm9yIChyb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspCisJCWlmIChwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yKHN0YXR1cywgcm93KSkKKwkJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBtZXNzYWdlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfdWUgLSBoYW5kbGUgY29udHJvbGxlciB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvciAoVUUpCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5jb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZAorICogICAgICAgcmVwb3J0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAorICogICAgICAgICAgdGhlIHVuY29ycmVjdGFibGUgZXJyb3IgYmVpbmcgaGFuZGxlZCBhbmQgcmVwb3J0ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgYW4gaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgRUNDCisgKiB1bmNvcnJlY3RhYmxlIGVycm9yLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VkYWNfaGFuZGxlX3VlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3QgdTY0IGJlYXIgPSAoKHU2NClzdGF0dXMtPmJlYXJoIDw8IDMyIHwgc3RhdHVzLT5iZWFybCk7CisJY29uc3QgdW5zaWduZWQgbG9uZyBwYWdlID0gYmVhciA+PiBQQUdFX1NISUZUOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYmVhciAmIH5QQUdFX01BU0s7CisJaW50IHJvdzsKKwljaGFyIG1lc3NhZ2VbUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFXTsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UobWNpLCBzdGF0dXMsIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKQorCQkJZWRhY19tY19oYW5kbGVfdWUobWNpLCBwYWdlLCBvZmZzZXQsIHJvdywgbWVzc2FnZSk7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfY2hlY2sgLSBjaGVjayBjb250cm9sbGVyIGZvciBFQ0MgZXJyb3JzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgYmVpbmcKKyAqICAgICAgIGNoZWNrZWQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2hlY2sgYW5kIHBvc3QgRUNDIGVycm9ycyBhbmQgaXMgY2FsbGVkIGJ5CisgKiBib3RoIHRoZSBFREFDIHBvbGxpbmcgdGhyZWFkIGFuZCB0aGlzIGRyaXZlcidzIENFIGFuZCBVRSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwcGM0eHhfZWRhY19jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisjaWZkZWYgREVCVUcKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50OworI2VuZGlmCisJc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHN0YXR1czsKKworCXBwYzR4eF9lY2NfZ2V0X3N0YXR1cyhtY2ksICZzdGF0dXMpOworCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQrKyAlIDMwID09IDApCisJCXBwYzR4eF9lY2NfZHVtcF9zdGF0dXMobWNpLCAmc3RhdHVzKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cy5lY2NlcyAmIFNEUkFNX0VDQ0VTX1VFKQorCQlwcGM0eHhfZWRhY19oYW5kbGVfdWUobWNpLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMuZWNjZXMgJiBTRFJBTV9FQ0NFU19DRSkKKwkJcHBjNHh4X2VkYWNfaGFuZGxlX2NlKG1jaSwgJnN0YXR1cyk7CisKKwlwcGM0eHhfZWNjX2NsZWFyX3N0YXR1cyhtY2ksICZzdGF0dXMpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2lzciAtIFNFQyAoQ0UpIGFuZCBERUQgKFVFKSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKiBAaXJxOiAgICBUaGUgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVyIGJlaW5nIHNlcnZpY2VkLgorICogQGRldl9pZDogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVycnVwdCBiZWluZyBoYW5kbGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYm90aCBjb3JyZWN0YWJsZQorICogKENFKSBhbmQgdW5jb3JyZWN0YWJsZSAoVUUpIEVDQyBlcnJvcnMgZm9yIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIKKyAqIGNvbnRyb2xsZXIuIEl0IHNpbXBseSBjYWxscyB0aHJvdWdoIHRvIHRoZSBzYW1lIHJvdXRpbmUgdXNlZCBkdXJpbmcKKyAqIHBvbGxpbmcgdG8gY2hlY2ssIHJlcG9ydCBhbmQgY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgSVJRX0hBTkRMRUQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcHBjNHh4X2VkYWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBkZXZfaWQ7CisKKwlwcGM0eHhfZWRhY19jaGVjayhtY2kpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9kdHlwZSAtIHJldHVybiB0aGUgY29udHJvbGxlciBtZW1vcnkgd2lkdGgKKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIHRoZSB3aWR0aAorICogICAgICAgICAgaXMgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgKiBjdXJyZW50IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUT0RPOiBUaGlzIG5lZWRzIHRvIGJlIGNvbmRpdGlvbmVkIGR5bmFtaWNhbGx5IHRocm91Z2ggZmVhdHVyZQorICogZmxhZ3Mgb3Igc29tZSBzdWNoIHdoZW4gb3RoZXIgY29udHJvbGxlciB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFzCisgKiB0aGUgNDA1RVhbcl0gaXMgMTYtLzMyLWJpdCBhbmQgdGhlIG90aGVycyBhcmUgMzItLzY0LWJpdCB3aXRoIHRoZQorICogMTYtIGFuZCA2NC1iaXQgZmllbGQgZGVmaW5pdGlvbi92YWx1ZS9lbnVtZXJhdGlvbiAoYjEpIG92ZXJsb2FkZWQKKyAqIGFtb25nIHRoZW0uCisgKgorICogUmV0dXJucyBhIGRldmljZSB0eXBlIHdpZHRoIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBkZXZfdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9kdHlwZSh1MzIgbWNvcHQxKQoreworCXN3aXRjaCAobWNvcHQxICYgU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX1dEVEhfMTY6CisJCXJldHVybiBERVZfWDI7CisJY2FzZSBTRFJBTV9NQ09QVDFfV0RUSF8zMjoKKwkJcmV0dXJuIERFVl9YNDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gREVWX1VOS05PV047CisJfQorfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9tdHlwZSAtIHJldHVybiBjb250cm9sbGVyIG1lbW9yeSB0eXBlCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCB0aGUgbWVtb3J5IHR5cGUKKyAqICAgICAgICAgIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZQorICogY3VycmVudCBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJucyBhIG1lbW9yeSB0eXBlIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBtZW1fdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9tdHlwZSh1MzIgbWNvcHQxKQoreworCWJvb2wgcmRlbiA9ICgobWNvcHQxICYgU0RSQU1fTUNPUFQxX1JERU5fTUFTSykgPT0gU0RSQU1fTUNPUFQxX1JERU4pOworCisJc3dpdGNoIChtY29wdDEgJiBTRFJBTV9NQ09QVDFfRERSX1RZUEVfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX0REUjJfVFlQRToKKwkJcmV0dXJuIHJkZW4gPyBNRU1fUkREUjIgOiBNRU1fRERSMjsKKwljYXNlIFNEUkFNX01DT1BUMV9ERFIxX1RZUEU6CisJCXJldHVybiByZGVuID8gTUVNX1JERFIgOiBNRU1fRERSOworCWRlZmF1bHQ6CisJCXJldHVybiBNRU1fVU5LTk9XTjsKKwl9Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3MgLSBpbnRpYWxpemUgZHJpdmVyIGluc3RhbmNlIHJvd3MKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIHRoZSBjc3Jvd3MgKGkuZS4gYmFua3MvcmFua3MpIGFyZSBiZWluZyBpbml0aWFsaXplZC4KKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIGJhbmsgd2lkdGgKKyAqICAgICAgICAgIGFuZCBtZW1vcnkgdHlwIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGludGlhbGl6ZXMgdGhlIHZpcnR1YWwgImNoaXAgc2VsZWN0IHJvd3MiIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UuIEFuIGlibSxzZHJhbS00eHgtZGRyMgorICogY29udHJvbGxlciBiYW5rL3JhbmsgaXMgbWFwcGVkIHRvIGEgcm93LgorICoKKyAqIFJldHVybnMgMCBpZiBPSzsgb3RoZXJ3aXNlLCAtRUlOVkFMIGlmIHRoZSBtZW1vcnkgYmFuayBzaXplCisgKiBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MzIgbWNvcHQxKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWludCBzdGF0dXMgPSAwOworCWVudW0gbWVtX3R5cGUgbXR5cGU7CisJZW51bSBkZXZfdHlwZSBkdHlwZTsKKwllbnVtIGVkYWNfdHlwZSBlZGFjX21vZGU7CisJaW50IHJvdzsKKwl1MzIgbWJ4Y2YsIHNpemU7CisJc3RhdGljIHUzMiBwcGM0eHhfbGFzdF9wYWdlOworCisJLyogRXN0YWJsaXNoIHRoZSBtZW1vcnkgdHlwZSBhbmQgd2lkdGggKi8KKworCW10eXBlID0gcHBjNHh4X2VkYWNfZ2V0X210eXBlKG1jb3B0MSk7CisJZHR5cGUgPSBwcGM0eHhfZWRhY19nZXRfZHR5cGUobWNvcHQxKTsKKworCS8qIEVzdGFibGlzaCBFREFDIG1vZGUgKi8KKworCWlmIChtY2ktPmVkYWNfY2FwICYgRURBQ19GTEFHX1NFQ0RFRCkKKwkJZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CisJZWxzZSBpZiAobWNpLT5lZGFjX2NhcCAmIEVEQUNfRkxBR19FQykKKwkJZWRhY19tb2RlID0gRURBQ19FQzsKKwllbHNlCisJCWVkYWNfbW9kZSA9IEVEQUNfTk9ORTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBlYWNoIGNoaXAgc2VsZWN0IHJvdyBzdHJ1Y3R1cmUgd2hpY2ggY29ycmVzcG9uZAorCSAqIDE6MSB3aXRoIGEgY29udHJvbGxlciBiYW5rL3JhbmsuCisJICovCisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykgeworCQlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3NpID0gJm1jaS0+Y3Nyb3dzW3Jvd107CisKKwkJLyoKKwkJICogR2V0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGlzCisJCSAqIHJvdy9iYW5rL3JhbmsgYW5kIHNraXAgZGlzYWJsZWQgYmFua3MuCisJCSAqLworCisJCW1ieGNmID0gbWZzZHJhbSgmcGRhdGEtPmRjcl9ob3N0LCBTRFJBTV9NQlhDRihyb3cpKTsKKworCQlpZiAoKG1ieGNmICYgU0RSQU1fTUJDRl9CRV9NQVNLKSAhPSBTRFJBTV9NQkNGX0JFX0VOQUJMRSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1hcCB0aGUgYmFuayBjb25maWd1cmF0aW9uIHNpemUgc2V0dGluZyB0byBwYWdlcy4gKi8KKworCQlzaXplID0gbWJ4Y2YgJiBTRFJBTV9NQkNGX1NaX01BU0s7CisKKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xNk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfMzJNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzY0TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xMjhNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzI1Nk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfNTEyTUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8yR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80R0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84R0I6CisJCQljc2ktPm5yX3BhZ2VzID0gU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhzaXplKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJCSAgICAgICJVbnJlY29nbml6ZWQgbWVtb3J5IGJhbmsgJWQgIgorCQkJCQkgICAgICAic2l6ZSAweCUwOHhcbiIsCisJCQkJCSAgICAgIHJvdywgU0RSQU1fTUJDRl9TWl9ERUNPREUoc2l6ZSkpOworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNzaS0+Zmlyc3RfcGFnZSA9IHBwYzR4eF9sYXN0X3BhZ2U7CisJCWNzaS0+bGFzdF9wYWdlCT0gY3NpLT5maXJzdF9wYWdlICsgY3NpLT5ucl9wYWdlcyAtIDE7CisJCWNzaS0+cGFnZV9tYXNrCT0gMDsKKworCQkvKgorCQkgKiBJdCdzIHVuY2xlYXIgZXhhY3RseSB3aGF0IGdyYWluIHNob3VsZCBiZSBzZXQgdG8KKwkJICogaGVyZS4gVGhlIFNEUkFNX0VDQ0VTIHJlZ2lzdGVyIGFsbG93cyByZXNvbHV0aW9uIG9mCisJCSAqIGFuIGVycm9yIGRvd24gdG8gYSBuaWJibGUgd2hpY2ggd291bGQgcG90ZW50aWFsbHkKKwkJICogYXJndWUgZm9yIGEgZ3JhaW4gb2YgJzEnIGJ5dGUsIGV2ZW4gdGhvdWdoIHdlIG9ubHkKKwkJICoga25vdyB0aGUgYXNzb2NpYXRlZCBhZGRyZXNzIGZvciB1bmNvcnJlY3RhYmxlCisJCSAqIGVycm9ycy4gVGhpcyB2YWx1ZSBpcyBub3QgdXNlZCBhdCBwcmVzZW50IGZvcgorCQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIGVycm9yIHJlcG9ydGluZyBzbyBnZXR0aW5nIGl0CisJCSAqIHdyb25nIHNob3VsZCBiZSBvZiBsaXR0bGUgY29uc2VxdWVuY2UuIE90aGVyCisJCSAqIHBvc3NpYmxlIHZhbHVlcyB3b3VsZCBiZSB0aGUgUExCIHdpZHRoICgxNiksIHRoZQorCQkgKiBwYWdlIHNpemUgKFBBR0VfU0laRSkgb3IgdGhlIG1lbW9yeSB3aWR0aCAoMiBvciA0KS4KKwkJICovCisKKwkJY3NpLT5ncmFpbgk9IDE7CisKKwkJY3NpLT5tdHlwZQk9IG10eXBlOworCQljc2ktPmR0eXBlCT0gZHR5cGU7CisKKwkJY3NpLT5lZGFjX21vZGUJPSBlZGFjX21vZGU7CisKKwkJcHBjNHh4X2xhc3RfcGFnZSArPSBjc2ktPm5yX3BhZ2VzOworCX0KKworIGRvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tY19pbml0IC0gaW50aWFsaXplIGRyaXZlciBpbnN0YW5jZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGJlaW5nCisgKiAgICAgICBpbml0aWFsaXplZC4KKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIGJvdW5kIHRvLgorICogQG1hdGNoOiBBIHBvaW50ZXIgdG8gdGhlIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBtYXRjaAorICogICAgICAgICBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlCisgKiAgICAgICAgIGlzIGJvdW5kIHRvLgorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBkYXRhIGNvbnRhaW5pbmcgdGhlIERDUiBtYXBwaW5nCisgKiAgICAgICAgICAgIGZvciB0aGlzIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCBFQ0MgY2FwYWJpbGl0aWVzCisgKiAgICAgICAgICBhbmQgc2NydWIgbW9kZSBhcmUgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIKKyAqIGluc3RhbmNlIGFuZCByZWxhdGVkIGRyaXZlci1wcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogaWJtLHNkcmFtLTR4eC1kZHIyIG1lbW9yeSBjb250cm9sbGVyIHRoZSBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgPCAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfbWNfaW5pdChzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoLAorCQkgICAgY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsCisJCSAgICB1MzIgbWNvcHQxKQoreworCWludCBzdGF0dXMgPSAwOworCWNvbnN0IHUzMiBtZW1jaGVjayA9IChtY29wdDEgJiBTRFJBTV9NQ09QVDFfTUNIS19NQVNLKTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlpZiAobWF0Y2ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJbml0aWFsIGRyaXZlciBwb2ludGVycyBhbmQgcHJpdmF0ZSBkYXRhICovCisKKwltY2ktPmRldgkJPSAmb3AtPmRldjsKKworCWRldl9zZXRfZHJ2ZGF0YShtY2ktPmRldiwgbWNpKTsKKworCXBkYXRhCQkJPSBtY2ktPnB2dF9pbmZvOworCisJcGRhdGEtPmRjcl9ob3N0CQk9ICpkY3JfaG9zdDsKKwlwZGF0YS0+aXJxcy5zZWMJCT0gTk9fSVJROworCXBkYXRhLT5pcnFzLmRlZAkJPSBOT19JUlE7CisKKwkvKiBJbml0aWFsaXplIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uICovCisKKwltY2ktPm10eXBlX2NhcAkJPSAoTUVNX0ZMQUdfRERSIHwgTUVNX0ZMQUdfUkREUiB8CisJCQkJICAgTUVNX0ZMQUdfRERSMiB8IE1FTV9GTEFHX1JERFIyKTsKKworCW1jaS0+ZWRhY19jdGxfY2FwCT0gKEVEQUNfRkxBR19OT05FIHwKKwkJCQkgICBFREFDX0ZMQUdfRUMgfAorCQkJCSAgIEVEQUNfRkxBR19TRUNERUQpOworCisJbWNpLT5zY3J1Yl9jYXAJCT0gU0NSVUJfTk9ORTsKKwltY2ktPnNjcnViX21vZGUJCT0gU0NSVUJfTk9ORTsKKworCS8qCisJICogVXBkYXRlIHRoZSBhY3R1YWwgY2FwYWJpbGl0ZXMgYmFzZWQgb24gdGhlIE1DT1BUMVtNQ0hLXQorCSAqIHNldHRpbmdzLiBTY3J1YmJpbmcgaXMgb25seSB1c2VmdWwgaWYgcmVwb3J0aW5nIGlzIGVuYWJsZWQuCisJICovCisKKwlzd2l0Y2ggKG1lbWNoZWNrKSB7CisJY2FzZSBTRFJBTV9NQ09QVDFfTUNIS19DSEs6CisJCW1jaS0+ZWRhY19jYXAJPSBFREFDX0ZMQUdfRUM7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUDoKKwkJbWNpLT5lZGFjX2NhcAk9IChFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEKTsKKwkJbWNpLT5zY3J1Yl9tb2RlCT0gU0NSVUJfU1dfU1JDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltY2ktPmVkYWNfY2FwCT0gRURBQ19GTEFHX05PTkU7CisJCWJyZWFrOworCX0KKworCS8qIEluaXRpYWxpemUgc3RyaW5ncyAqLworCisJbWNpLT5tb2RfbmFtZQkJPSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRTsKKwltY2ktPm1vZF92ZXIJCT0gUFBDNFhYX0VEQUNfTU9EVUxFX1JFVklTSU9OOworCW1jaS0+Y3RsX25hbWUJCT0gbWF0Y2gtPmNvbXBhdGlibGUsCisJbWNpLT5kZXZfbmFtZQkJPSBucC0+ZnVsbF9uYW1lOworCisJLyogSW5pdGlhbGl6ZSBjYWxsYmFja3MgKi8KKworCW1jaS0+ZWRhY19jaGVjawkJPSBwcGM0eHhfZWRhY19jaGVjazsKKwltY2ktPmN0bF9wYWdlX3RvX3BoeXMJPSBOVUxMOworCisJLyogSW5pdGlhbGl6ZSBjaGlwIHNlbGVjdCByb3dzICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19pbml0X2Nzcm93cyhtY2ksIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKQorCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgcm93cyFcbiIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEgLSBzZXR1cCBhbmQgcmVnaXN0ZXIgY29udHJvbGxlciBpbnRlcnJ1cHRzCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIHRoaXMgRURBQyBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIGludGVycnVwdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQuCisgKgorICogVGhpcyByb3V0aW5lIHBhcnNlcyB0aGUgY29ycmVjdGFibGUgKENFKSBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvciAoVUUpCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZSB0cmVlIG5vZGUgYW5kIG1hcHMgYW5kIGFzc2lnbnMgdGhlbSB0bworICogdGhlIGFzc29jaWF0ZWQgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgLUVOT0RFViBpZiB0aGUgaW50ZXJydXB0cyBjb3VsZCBub3QgYmUKKyAqIG1hcHBlZCBhbmQgYXNzaWduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEoc3RydWN0IG9mX2RldmljZSAqb3AsIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgZGVkX2lycSwgc2VjX2lycTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gbWNpLT5wdnRfaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlkZWRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIElOVE1BUF9FQ0NERURfSU5ERVgpOworCXNlY19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgSU5UTUFQX0VDQ1NFQ19JTkRFWCk7CisKKwlpZiAoZGVkX2lycSA9PSBOT19JUlEgfHwgc2VjX2lycSA9PSBOT19JUlEpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIlVuYWJsZSB0byBtYXAgaW50ZXJydXB0cy5cbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoZGVkX2lycSwKKwkJCSAgICAgcHBjNHh4X2VkYWNfaXNyLAorCQkJICAgICBJUlFGX0RJU0FCTEVELAorCQkJICAgICAiW0VEQUNdIE1DIEVDQ0RFRCIsCisJCQkgICAgIG1jaSk7CisKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkIGZvciBFQ0MgREVEIiwKKwkJCQkgICAgICBkZWRfaXJxKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzZWNfaXJxLAorCQkJICAgICBwcGM0eHhfZWRhY19pc3IsCisJCQkgICAgIElSUUZfRElTQUJMRUQsCisJCQkgICAgICJbRURBQ10gTUMgRUNDU0VDIiwKKwkJCSAgICAgbWNpKTsKKworCWlmIChzdGF0dXMgPCAwKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJVbmFibGUgdG8gcmVxdWVzdCBpcnEgJWQgZm9yIEVDQyBTRUMiLAorCQkJCSAgICAgIHNlY19pcnEpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWwyOworCX0KKworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ0RFRCBpcnEgaXMgJWRcbiIsIGRlZF9pcnEpOworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ1NFQyBpcnEgaXMgJWRcbiIsIHNlY19pcnEpOworCisJcGRhdGEtPmlycXMuZGVkID0gZGVkX2lycTsKKwlwZGF0YS0+aXJxcy5zZWMgPSBzZWNfaXJxOworCisJcmV0dXJuIDA7CisKKyBmYWlsMjoKKwlmcmVlX2lycShzZWNfaXJxLCBtY2kpOworCisgZmFpbDE6CisJZnJlZV9pcnEoZGVkX2lycSwgbWNpKTsKKworIGZhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tYXBfZGNycyAtIGxvY2F0ZSBhbmQgbWFwIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKiBAbnA6IEEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBEQ1IKKyAqICAgICAgcmVzb3VyY2VzIHRvIG1hcC4KKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgZGF0YSB0byBwb3B1bGF0ZSB3aXRoIHRoZQorICogICAgICAgICAgICBEQ1IgbWFwcGluZy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gbG9jYXRlIGluIHRoZSBkZXZpY2UgdHJlZSBhbmQgbWFwIHRoZSBEQ1IKKyAqIHJlZ2lzdGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIncyBpbmRpcmVjdCBEQ1IKKyAqIGFkZHJlc3MgYW5kIGRhdGEgd2luZG93cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIERDUnMgd2VyZSBzdWNjZXNzZnVsbHkgbWFwcGVkOyBvdGhlcndpc2UsIDwgMCBvbgorICogZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19tYXBfZGNycyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBkY3JfaG9zdF90ICpkY3JfaG9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgZGNyX2Jhc2UsIGRjcl9sZW47CisKKwlpZiAobnAgPT0gTlVMTCB8fCBkY3JfaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgRENSIHJlc291cmNlIGV4dGVudCBhbmQgc2FuaXR5IGNoZWNrIHRoZSB2YWx1ZXMuICovCisKKwlkY3JfYmFzZSA9IGRjcl9yZXNvdXJjZV9zdGFydChucCwgMCk7CisJZGNyX2xlbiA9IGRjcl9yZXNvdXJjZV9sZW4obnAsIDApOworCisJaWYgKGRjcl9iYXNlID09IDAgfHwgZGNyX2xlbiA9PSAwKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0VSUiwKKwkJCQkgICAiRmFpbGVkIHRvIG9idGFpbiBEQ1IgcHJvcGVydHkuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRjcl9sZW4gIT0gU0RSQU1fRENSX1JFU09VUkNFX0xFTikgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsCisJCQkJICAgIlVuZXhwZWN0ZWQgRENSIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQuXG4iLAorCQkJCSAgIGRjcl9sZW4sIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiAgQXR0ZW1wdCB0byBtYXAgdGhlIERDUiBleHRlbnQuICovCisKKwkqZGNyX2hvc3QgPSBkY3JfbWFwKG5wLCBkY3JfYmFzZSwgZGNyX2xlbik7CisKKwlpZiAoIURDUl9NQVBfT0soKmRjcl9ob3N0KSkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCAiRmFpbGVkIHRvIG1hcCBEQ1JzLlxuIik7CisJCSAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19wcm9iZSAtIGNoZWNrIGNvbnRyb2xsZXIgYW5kIGJpbmQgZHJpdmVyCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIGJlaW5nIHByb2JlZCBmb3IgZHJpdmVyIGJpbmRpbmcuCisgKiBAbWF0Y2g6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG1hdGNoCisgKiAgICAgICAgIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udHJvbGxlciBiZWluZyBwcm9iZWQKKyAqICAgICAgICAgZm9yIGRyaXZlciBiaW5kaW5nLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9iZXMgYSBzcGVjaWZpYyBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlcgorICogaW5zdGFuY2UgZm9yIGJpbmRpbmcgd2l0aCB0aGUgZHJpdmVyLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIHRoZQorICogZHJpdmVyOyBvdGhlcndpc2UsIDwgMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3BwYzR4eF9lZGFjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgbWNvcHQxLCBtZW1jaGVjazsKKwlkY3JfaG9zdF90IGRjcl9ob3N0OworCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBOVUxMOworCXN0YXRpYyBpbnQgcHBjNHh4X2VkYWNfaW5zdGFuY2U7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIG9ubHkgc3VwcG9ydCB0aGUgY29udHJvbGxlciByZWFsaXplZCBvbgorCSAqIHRoZSBBTUNDIFBQQyA0MDVFWFtyXS4gUmVqZWN0IGFueXRoaW5nIGVsc2UuCisJICovCisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4IikgJiYKKwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4ciIpKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX05PVElDRSwKKwkJCQkgICAiT25seSB0aGUgUFBDNDA1RVhbcl0gaXMgc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogTmV4dCwgZ2V0IHRoZSBEQ1IgcHJvcGVydHkgYW5kIGF0dGVtcHQgdG8gbWFwIGl0IHNvIHRoYXQgd2UKKwkgKiBjYW4gcHJvYmUgdGhlIGNvbnRyb2xsZXIuCisJICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tYXBfZGNycyhucCwgJmRjcl9ob3N0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZpcnN0IGRldGVybWluZSB3aGV0aGVyIEVDQyBpcyBlbmFibGVkIGF0IGFsbC4gSWYgbm90LAorCSAqIHRoZXJlIGlzIG5vIHVzZWZ1bCBjaGVja2luZyBvciBtb25pdG9yaW5nIHRoYXQgY2FuIGJlIGRvbmUKKwkgKiBmb3IgdGhpcyBjb250cm9sbGVyLgorCSAqLworCisJbWNvcHQxID0gbWZzZHJhbSgmZGNyX2hvc3QsIFNEUkFNX01DT1BUMSk7CisJbWVtY2hlY2sgPSAobWNvcHQxICYgU0RSQU1fTUNPUFQxX01DSEtfTUFTSyk7CisKKwlpZiAobWVtY2hlY2sgPT0gU0RSQU1fTUNPUFQxX01DSEtfTk9OKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICIlczogTm8gRUNDIG1lbW9yeSBkZXRlY3RlZCBvciAiCisJCQkJICAgIkVDQyBpcyBkaXNhYmxlZC5cbiIsIG5wLT5mdWxsX25hbWUpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IEVDQyBpcyBlbmFibGVkLCBhbGxvY2F0ZSBhbiBFREFDCisJICogY29udHJvbGxlciBpbnN0YW5jZSBhbmQgcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUKKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKi8KKworCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSksCisJCQkgICAgcHBjNHh4X2VkYWNfbnJfY3Nyb3dzLAorCQkJICAgIHBwYzR4eF9lZGFjX25yX2NoYW5zLAorCQkJICAgIHBwYzR4eF9lZGFjX2luc3RhbmNlKTsKKworCWlmIChtY2kgPT0gTlVMTCkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsICIlczogIgorCQkJCSAgICJGYWlsZWQgdG8gYWxsb2NhdGUgRURBQyBNQyBpbnN0YW5jZSFcbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tY19pbml0KG1jaSwgb3AsIG1hdGNoLCAmZGNyX2hvc3QsIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpbnN0YW5jZSFcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGEgdmFsaWQsIGluaXRpYWxpemVkIEVEQUMgaW5zdGFuY2UgYm91bmQgdG8gdGhlCisJICogY29udHJvbGxlci4gQXR0ZW1wdCB0byByZWdpc3RlciBpdCB3aXRoIHRoZSBFREFDIHN1YnN5c3RlbQorCSAqIGFuZCwgaWYgbmVjZXNzYXJ5LCByZWdpc3RlciBpbnRlcnJ1cHRzLgorCSAqLworCisJaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIkZhaWxlZCB0byBhZGQgaW5zdGFuY2UhXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9JTlQpIHsKKwkJc3RhdHVzID0gcHBjNHh4X2VkYWNfcmVnaXN0ZXJfaXJxKG9wLCBtY2kpOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZhaWwxOworCX0KKworCXBwYzR4eF9lZGFjX2luc3RhbmNlKys7CisKKwlyZXR1cm4gMDsKKworIGZhaWwxOgorCWVkYWNfbWNfZGVsX21jKG1jaS0+ZGV2KTsKKworIGZhaWw6CisJZWRhY19tY19mcmVlKG1jaSk7CisKKyBkb25lOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfcmVtb3ZlIC0gdW5iaW5kIGRyaXZlciBmcm9tIGNvbnRyb2xsZXIKKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIHRvIGJlIHVuYm91bmQvcmVtb3ZlZAorICogICAgICBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSB1bmJpbmRzIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHNwZWNpZmllZCBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBkZXNjcmliZWQgYnkgdGhlCisgKiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgMC4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSB7CisJCWZyZWVfaXJxKHBkYXRhLT5pcnFzLnNlYywgbWNpKTsKKwkJZnJlZV9pcnEocGRhdGEtPmlycXMuZGVkLCBtY2kpOworCX0KKworCWRjcl91bm1hcChwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCisJZWRhY19tY19kZWxfbWMobWNpLT5kZXYpOworCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfb3BzdGF0ZV9pbml0IC0gaW5pdGlhbGl6ZSBFREFDIHJlcG9ydGluZyBtZXRob2QKKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5zdXJlcyB0aGF0IHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIHJlcG9ydGluZworICogbWV0aG9kIGlzIG1hcHBlZCB0byBhIHNhbmUgdmFsdWUgYXMgdGhlIEVEQUMgY29yZSBkZWZpbmVzIHRoZSB2YWx1ZQorICogdG8gRURBQ19PUFNUQVRFX0lOVkFMIGJ5IGRlZmF1bHQuIFdlIGRvbid0IGNhbGwgdGhlIGdsb2JhbAorICogb3BzdGF0ZV9pbml0IGFzIHRoYXQgZGVmYXVsdHMgdG8gcG9sbGluZyBhbmQgd2Ugd2FudCBpbnRlcnJ1cHQgYXMKKyAqIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0CitwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGVkYWNfb3Bfc3RhdGUpIHsKKwljYXNlIEVEQUNfT1BTVEFURV9QT0xMOgorCWNhc2UgRURBQ19PUFNUQVRFX0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9JTlQ7CisJCWJyZWFrOworCX0KKworCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICJSZXBvcnRpbmcgdHlwZTogJXNcbiIsCisJCQkgICAoKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpID8KKwkJCSAgICBFREFDX09QU1RBVEVfUE9MTF9TVFIgOgorCQkJICAgICgoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSA/CisJCQkgICAgIEVEQUNfT1BTVEFURV9JTlRfU1RSIDoKKwkJCSAgICAgRURBQ19PUFNUQVRFX1VOS05PV05fU1RSKSkpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2luaXQgLSBkcml2ZXIvbW9kdWxlIGluc2VydGlvbiBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSBpbnNlcnRpb24gZW50cnkgcG9pbnQuIEl0CisgKiBpbml0aWFsaXplcyB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciByZXBvcnRpbmcgc3RhdGUgYW5kCisgKiByZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3BwYzR4eF9lZGFjX2luaXQodm9pZCkKK3sKKwlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04gIlxuIik7CisKKwlwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQoKTsKKworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZXhpdCAtIGRyaXZlci9tb2R1bGUgcmVtb3ZhbCBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSByZW1vdmFsIGVudHJ5IHBvaW50LiBJdAorICogdW5yZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgX19leGl0CitwcGM0eHhfZWRhY19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBwYzR4eF9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQocHBjNHh4X2VkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkdyYW50IEVyaWNrc29uIDxnZXJpY2tzb25AbnVvdmF0aW9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVEQUMgTUMgRHJpdmVyIGZvciB0aGUgUFBDNHh4IElCTSBERFIyIE1lbW9yeSBDb250cm9sbGVyIik7Cittb2R1bGVfcGFyYW0oZWRhY19vcF9zdGF0ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZWRhY19vcF9zdGF0ZSwgIkVEQUMgRXJyb3IgUmVwb3J0aW5nIFN0YXRlOiAiCisJCSAiMD0iIEVEQUNfT1BTVEFURV9QT0xMX1NUUiAiLCAyPSIgRURBQ19PUFNUQVRFX0lOVF9TVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE1NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBwcm9jZXNzb3IgbW5lbW9uaWNzIGZvciBhY2Nlc3NpbmcgYW5kIG1hbmFnaW5nCisgKiB0aGUgSUJNIEREUjEvRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgNDA1RVhbcl0sIDQ0MFNQLAorICogNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1BQQzRYWF9FREFDX0gKKyNkZWZpbmUgX19QUEM0WFhfRURBQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogTWFjcm8gZm9yIGdlbmVyYXRpbmcgcmVnaXN0ZXIgZmllbGQgbW5lbW9uaWNzCisgKi8KKyNkZWZpbmUgUFBDX1JFR19CSVRTCQkJMzIKKyNkZWZpbmUgUFBDX1JFR19WQUwoYml0LCB2YWwpCQkoKHZhbCkgPDwgKChQUENfUkVHX0JJVFMgLSAxKSAtIChiaXQpKSkKKyNkZWZpbmUgUFBDX1JFR19ERUNPREUoYml0LCB2YWwpCSgodmFsKSA+PiAoKFBQQ19SRUdfQklUUyAtIDEpIC0gKGJpdCkpKQorCisvKgorICogSUJNIDR4eCBERFIxL0REUjIgU0RSQU0gbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIChhdCBsZWFzdCB0aG9zZQorICogcmVsZXZhbnQgdG8gRUNDKQorICovCisjZGVmaW5lIFNEUkFNX0JFU1IJCQkweDAwCS8qIEVycm9yIHN0YXR1cyAocmVhZC9jbGVhcikgKi8KKyNkZWZpbmUgU0RSQU1fQkVTUlQJCQkweDAxCS8qIEVycm9yIHN0YXR1c3MgKHRlc3Qvc2V0KSAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkwJCQkweDAyCS8qIEVycm9yIGFkZHJlc3MgbG93CSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkgJCQkweDAzCS8qIEVycm9yIGFkZHJlc3MgaGlnaAkgICAgICovCisjZGVmaW5lIFNEUkFNX1dNSVJRCQkJMHgwNgkvKiBXcml0ZSBtYXN0ZXIgKHJlYWQvY2xlYXIpICovCisjZGVmaW5lIFNEUkFNX1dNSVJRVAkJCTB4MDcJLyogV3JpdGUgbWFzdGVyICh0ZXN0L3NldCkgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDEJCQkweDIwCS8qIENvbnRyb2xsZXIgb3B0aW9ucyAxCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUJYQ0ZfQkFTRQkJMHg0MAkvKiBCYW5rIG4gY29uZmlndXJhdGlvbiBiYXNlICovCisjZGVmaW5lCVNEUkFNX01CWENGKG4pCQkJKFNEUkFNX01CWENGX0JBU0UgKyAoNCAqIChuKSkpCisjZGVmaW5lIFNEUkFNX01CMENGCQkJU0RSQU1fTUJYQ0YoMCkKKyNkZWZpbmUgU0RSQU1fTUIxQ0YJCQlTRFJBTV9NQlhDRigxKQorI2RlZmluZSBTRFJBTV9NQjJDRgkJCVNEUkFNX01CWENGKDIpCisjZGVmaW5lIFNEUkFNX01CM0NGCQkJU0RSQU1fTUJYQ0YoMykKKyNkZWZpbmUgU0RSQU1fRUNDQ1IJCQkweDk4CS8qIEVDQyBlcnJvciBzdGF0dXMJICAgICAqLworI2RlZmluZSBTRFJBTV9FQ0NFUwkJCVNEUkFNX0VDQ0NSCisKKy8qCisgKiBQTEIgTWFzdGVyIElEcworICovCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0ZJUlNUCQkwCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0lDVQkJU0RSQU1fUExCX00wSURfRklSU1QKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTAJCTEKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTEJCTIKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfRE1BCQkzCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0RDVQkJNAorI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9PUEIJCTUKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfTUFMCQk2CisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX1NFQwkJNworI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9BSEIJCTgKKyNkZWZpbmUgU0RSQU1fUExCX00wSURfTEFTVAkJU0RSQU1fUExCX00wSURfQUhCCisjZGVmaW5lIFNEUkFNX1BMQl9NMElEX0NPVU5UCQkoU0RSQU1fUExCX00wSURfTEFTVCAtIFwKKwkJCQkJIFNEUkFNX1BMQl9NMElEX0ZJUlNUICsgMSkKKworLyoKKyAqIE1lbW9yeSBDb250cm9sbGVyIEJ1cyBFcnJvciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9CRVNSX01BU0sJCQlQUENfUkVHX1ZBTCg3LCAweEZGKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfTUFTSwkJUFBDX1JFR19WQUwoMywgMHhGKQorI2RlZmluZQlTRFJBTV9CRVNSX00wSURfREVDT0RFKG4pCVBQQ19SRUdfREVDT0RFKDMsIG4pCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9JQ1UJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0lDVSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUwCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMCkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUxCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX0RNQQkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfRE1BKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfRENVCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9EQ1UpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9PUEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX09QQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX01BTAkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfTUFMKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfU0VDCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9TRUMpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9BSEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0FIQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX01BU0sJCVBQQ19SRUdfVkFMKDYsIDB4NykKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX05PTkUJCVBQQ19SRUdfVkFMKDYsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBFVF9FQ0MJCVBQQ19SRUdfVkFMKDYsIDEpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19NQVNLCQlQUENfUkVHX1ZBTCg3LCAxKQorI2RlZmluZSBTRFJBTV9CRVNSX00wUldfV1JJVEUJCVBQQ19SRUdfVkFMKDcsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19SRUFECQlQUENfUkVHX1ZBTCg3LCAxKQorCisvKgorICogTWVtb3J5IENvbnRyb2xsZXIgUExCIFdyaXRlIE1hc3RlciBJbnRlcnJ1cHQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9XTUlSUV9NQVNLCQlQUENfUkVHX1ZBTCg4LCAweDFGRikKKyNkZWZpbmUJU0RSQU1fV01JUlFfRU5DT0RFKGlkKQkJUFBDX1JFR19WQUwoKGlkICUgXAorCQkJCQkJICAgICBTRFJBTV9QTEJfTTBJRF9DT1VOVCksIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0lDVQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0lDVSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfUENJRTAJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX1BDSUUwLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9QQ0lFMQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfUENJRTEsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0RNQQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0RNQSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfRENVCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfRENVLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9PUEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9PUEIsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX01BTAkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX01BTCwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfU0VDCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfU0VDLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9BSEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9BSEIsIDEpCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDEgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19NQVNLCSAgICBQUENfUkVHX1ZBTCgzLCAweDMpCSAvKiBFQ0MgbWFzawkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX05PTgkgICAgUFBDX1JFR19WQUwoMywgMHgwKQkgLyogTm8gRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0dFTgkgICAgUFBDX1JFR19WQUwoMywgMHgyKQkgLyogRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0NISwkgICAgUFBDX1JFR19WQUwoMywgMHgxKQkgLyogRUNDIGdlbiBhbmQgY2hrICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19DSEtfUkVQICAgUFBDX1JFR19WQUwoMywgMHgzKQkgLyogRUNDIGdlbi9jaGsvcnB0ICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19ERUNPREUobikgKCgoKHUzMikobikpID4+IDI4KSAmIDB4MykKKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1JERU5fTUFTSwkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gbWFzayAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfUkRFTgkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gZW5ibCAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF9NQVNLCSAgICBQUENfUkVHX1ZBTCg3LCAweDEpCSAvKiBXaWR0aCBtYXNrCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1dEVEhfMzIJICAgIFBQQ19SRUdfVkFMKDcsIDB4MCkJIC8qIDMyIGJpdHMJICAgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF8xNgkgICAgUFBDX1JFR19WQUwoNywgMHgxKQkgLyogMTYgYml0cwkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFJfVFlQRV9NQVNLICBQUENfUkVHX1ZBTCgxMSwgMHgxKSAvKiBERFIgdHlwZSBtYXNrICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIxX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDApIC8qIEREUjEgdHlwZQkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIyX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDEpIC8qIEREUjIgdHlwZQkgICAgICovCisKKy8qCisgKiBNZW1vcnkgQmFuayAwIC0gbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0RSQU1fTUJDRl9CQV9NQVNLCQlQUENfUkVHX1ZBTCgxMiwgMHgxRkZGKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaX01BU0sJCVBQQ19SRUdfVkFMKDE5LCAweEYpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfREVDT0RFKG1ieGNmKQlQUENfUkVHX0RFQ09ERSgxOSwgbWJ4Y2YpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNE1CCQlQUENfUkVHX1ZBTCgxOSwgMHgwKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzhNQgkJUFBDX1JFR19WQUwoMTksIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xNk1CCQlQUENfUkVHX1ZBTCgxOSwgMHgyKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzMyTUIJCVBQQ19SRUdfVkFMKDE5LCAweDMpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNjRNQgkJUFBDX1JFR19WQUwoMTksIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xMjhNQgkJUFBDX1JFR19WQUwoMTksIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8yNTZNQgkJUFBDX1JFR19WQUwoMTksIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl81MTJNQgkJUFBDX1JFR19WQUwoMTksIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xR0IJCVBQQ19SRUdfVkFMKDE5LCAweDgpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfMkdCCQlQUENfUkVHX1ZBTCgxOSwgMHg5KQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzRHQgkJUFBDX1JFR19WQUwoMTksIDB4QSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl84R0IJCVBQQ19SRUdfVkFMKDE5LCAweEIpCisjZGVmaW5lIFNEUkFNX01CQ0ZfQU1fTUFTSwkJUFBDX1JFR19WQUwoMjMsIDB4RikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMAkJUFBDX1JFR19WQUwoMjMsIDB4MCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMQkJUFBDX1JFR19WQUwoMjMsIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMgkJUFBDX1JFR19WQUwoMjMsIDB4MikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMwkJUFBDX1JFR19WQUwoMjMsIDB4MykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNAkJUFBDX1JFR19WQUwoMjMsIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNQkJUFBDX1JFR19WQUwoMjMsIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNgkJUFBDX1JFR19WQUwoMjMsIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNwkJUFBDX1JFR19WQUwoMjMsIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOAkJUFBDX1JFR19WQUwoMjMsIDB4OCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOQkJUFBDX1JFR19WQUwoMjMsIDB4OSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9CRV9NQVNLCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorI2RlZmluZSBTRFJBTV9NQkNGX0JFX0RJU0FCTEUJCVBQQ19SRUdfVkFMKDMxLCAweDApCisjZGVmaW5lIFNEUkFNX01CQ0ZfQkVfRU5BQkxFCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorCisvKgorICogRUNDIEVycm9yIFN0YXR1cworICovCisjZGVmaW5lIFNEUkFNX0VDQ0VTX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDNGRkZGRikKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQk5DRV9NQVNLCQlQUENfUkVHX1ZBTCgxNSwgMHhGRkZGKQorI2RlZmluZSBTRFJBTV9FQ0NFU19CTkNFX0VOQ09ERShsYW5lKQlQUENfUkVHX1ZBTCgoKGxhbmUpICYgMHhGKSwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTUFTSwkJUFBDX1JFR19WQUwoMTcsIDB4MykKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTk9ORQkJUFBDX1JFR19WQUwoMTcsIDApCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzE2X0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ180XzgJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzgJUFBDX1JFR19WQUwoMTcsIDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NFCQkJUFBDX1JFR19WQUwoMTgsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX1VFCQkJUFBDX1JFR19WQUwoMTksIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLTkVSX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLMEVSCQlQUENfUkVHX1ZBTCgyMCwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQksxRVIJCVBQQ19SRUdfVkFMKDIxLCAxKQorCisjZW5kaWYgLyogX19QUEM0WFhfRURBQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggOGYwZjdjNC4uNWYxYjU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtNjgsNyArNjgsOCBAQAogICoJcG9pbnRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgcGxhY2UgZm9yIGV4YW1wbGUKICAqLwogc3RhdGljIHZvaWQgZG1pX3RhYmxlKHU4ICpidWYsIGludCBsZW4sIGludCBudW0sCi0JCSAgICAgIHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQorCQkgICAgICB2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLCB2b2lkICopLAorCQkgICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmRhdGEgPSBidWY7CiAJaW50IGkgPSAwOwpAQCAtODksNyArOTAsNyBAQAogCQl3aGlsZSAoKGRhdGEgLSBidWYgPCBsZW4gLSAxKSAmJiAoZGF0YVswXSB8fCBkYXRhWzFdKSkKIAkJCWRhdGErKzsKIAkJaWYgKGRhdGEgLSBidWYgPCBsZW4gLSAxKQotCQkJZGVjb2RlKGRtKTsKKwkJCWRlY29kZShkbSwgcHJpdmF0ZV9kYXRhKTsKIAkJZGF0YSArPSAyOwogCQlpKys7CiAJfQpAQCAtOTksNyArMTAwLDggQEAKIHN0YXRpYyB1MTYgZG1pX2xlbjsKIHN0YXRpYyB1MTYgZG1pX251bTsKIAotc3RhdGljIGludCBfX2luaXQgZG1pX3dhbGtfZWFybHkodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpCitzdGF0aWMgaW50IF9faW5pdCBkbWlfd2Fsa19lYXJseSh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLAorCQl2b2lkICopKQogewogCXU4ICpidWY7CiAKQEAgLTEwNyw3ICsxMDksNyBAQAogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZG1pX3RhYmxlKGJ1ZiwgZG1pX2xlbiwgZG1pX251bSwgZGVjb2RlKTsKKwlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUsIE5VTEwpOwogCiAJZG1pX2lvdW5tYXAoYnVmLCBkbWlfbGVuKTsKIAlyZXR1cm4gMDsKQEAgLTI5NSw3ICsyOTcsNyBAQAogICoJYW5kIG1hY2hpbmUgZW50cmllcy4gRm9yIDIuNSB3ZSBzaG91bGQgcHVsbCB0aGUgc21idXMgY29udHJvbGxlciBpbmZvCiAgKglvdXQgb2YgaGVyZS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQorc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB2b2lkICpkdW1teSkKIHsKIAlzd2l0Y2goZG0tPnR5cGUpIHsKIAljYXNlIDA6CQkvKiBCSU9TIEluZm9ybWF0aW9uICovCkBAIC01OTgsMTAgKzYwMCwxMiBAQAogLyoqCiAgKglkbWlfd2FsayAtIFdhbGsgdGhlIERNSSB0YWJsZSBhbmQgZ2V0IGNhbGxlZCBiYWNrIGZvciBldmVyeSByZWNvcmQKICAqCUBkZWNvZGU6IENhbGxiYWNrIGZ1bmN0aW9uCisgKglAcHJpdmF0ZV9kYXRhOiBQcml2YXRlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICoKICAqCVJldHVybnMgLTEgd2hlbiB0aGUgRE1JIHRhYmxlIGNhbid0IGJlIHJlYWNoZWQsIDAgb24gc3VjY2Vzcy4KICAqLwotaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQoraW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICosIHZvaWQgKiksCisJICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmJ1ZjsKIApAQCAtNjEyLDcgKzYxNiw3IEBACiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUpOworCWRtaV90YWJsZShidWYsIGRtaV9sZW4sIGRtaV9udW0sIGRlY29kZSwgcHJpdmF0ZV9kYXRhKTsKIAogCWlvdW5tYXAoYnVmKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDQyZmIyZmQuLjUxYThkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjksMjAgKzY5LDI0IEBACiAgKiB0aG9zZSBjYWxscyBoYXZlIG5vIHRlZXRoKSB3ZSBjYW4ndCBhdm9pZCBhdXRvcmVxdWVzdGluZy4gIFRoaXMgbmFnCiAgKiBtZXNzYWdlIHNob3VsZCBtb3RpdmF0ZSBzd2l0Y2hpbmcgdG8gZXhwbGljaXQgcmVxdWVzdHMuLi4gc28gc2hvdWxkCiAgKiB0aGUgd2Vha2VyIGNsZWFudXAgYWZ0ZXIgZmF1bHRzLCBjb21wYXJlZCB0byBncGlvX3JlcXVlc3QoKS4KKyAqCisgKiBOT1RFOiB0aGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGlzIGdvaW5nIGF3YXk7IGF0IHRoaXMgcG9pbnQgaXQncworICogb25seSAibGVnYWwiIGluIHRoZSBzZW5zZSB0aGF0IChvbGQpIGNvZGUgdXNpbmcgaXQgd29uJ3QgYnJlYWsgeWV0LAorICogYnV0IGluc3RlYWQgb25seSB0cmlnZ2VycyBhIFdBUk4oKSBzdGFjayBkdW1wLgogICovCiBzdGF0aWMgaW50IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCkgewotCQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKLQkJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OworCWNvbnN0IHN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBkZXNjLT5jaGlwOworCWNvbnN0IGludCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKIAorCWlmIChXQVJOKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCwKKwkJCSJhdXRvcmVxdWVzdCBHUElPLSVkXG4iLCBncGlvKSkgewogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNoaXAtPm93bmVyKSkgewogCQkJcHJfZXJyKCJHUElPLSVkOiBtb2R1bGUgY2FuJ3QgYmUgZ290dGVuIFxuIiwgZ3Bpbyk7CiAJCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CiAJCQkvKiBsb3NlICovCiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlwcl93YXJuaW5nKCJHUElPLSVkIGF1dG9yZXF1ZXN0ZWRcbiIsIGdwaW8pOwogCQlkZXNjX3NldF9sYWJlbChkZXNjLCAiW2F1dG9dIik7CiAJCS8qIGNhbGxlciBtdXN0IGNoaXAtPnJlcXVlc3QoKSB3L28gc3BpbmxvY2sgKi8KIAkJaWYgKGNoaXAtPnJlcXVlc3QpCkBAIC00MzgsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOwogCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisJY2hhcgkJCSppb25hbWUgPSBOVUxMOwogCiAJLyogY2FuJ3QgZXhwb3J0IHVudGlsIHN5c2ZzIGlzIGF2YWlsYWJsZSAuLi4gKi8KIAlpZiAoIWdwaW9fY2xhc3MucCkgewpAQCAtNDYxLDExICs0NjYsMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKKwlpZiAoZGVzYy0+Y2hpcC0+bmFtZXMgJiYgZGVzYy0+Y2hpcC0+bmFtZXNbZ3BpbyAtIGRlc2MtPmNoaXAtPmJhc2VdKQorCQlpb25hbWUgPSBkZXNjLT5jaGlwLT5uYW1lc1tncGlvIC0gZGVzYy0+Y2hpcC0+YmFzZV07CisKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3RydWN0IGRldmljZQkqZGV2OwogCiAJCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJCWRlc2MsICJncGlvJWQiLCBncGlvKTsKKwkJCQkgICAgZGVzYywgaW9uYW1lID8gaW9uYW1lIDogImdwaW8lZCIsIGdwaW8pOwogCQlpZiAoZGV2KSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCkBAIC01MTMsNiArNTIxLDcgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOworCiAJaWYgKHRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBkZXZpY2UJKmRldiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKaW5kZXggYzUzM2QwYy4uNjI4ZWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCWlmICghZW50cnktPmJ1c2FkZHJbaV0pCiAJCQkJYnJlYWs7CiAJCQlwY2lfdW5tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5idXNhZGRyW2ldLAotCQkJCQkgUEFHRV9TSVpFLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJfQogCiAJCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pCkBAIC05NSwxMyArOTUsMTQgQEAKIAogaW50IGRybV9hdGlfcGNpZ2FydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKQogeworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSAmZ2FydF9pbmZvLT5tYXBwaW5nOwogCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7CiAJdm9pZCAqYWRkcmVzcyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBwYWdlczsKLQl1MzIgKnBjaV9nYXJ0LCBwYWdlX2Jhc2U7CisJdTMyICpwY2lfZ2FydCA9IE5VTEwsIHBhZ2VfYmFzZSwgZ2FydF9pZHg7CiAJZG1hX2FkZHJfdCBidXNfYWRkcmVzcyA9IDA7CiAJaW50IGksIGosIHJldCA9IDA7Ci0JaW50IG1heF9wYWdlczsKKwlpbnQgbWF4X2F0aV9wYWdlcywgbWF4X3JlYWxfcGFnZXM7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCURSTV9FUlJPUigibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIik7CkBAIC0xMTcsNiArMTE4LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCisJCXBjaV9nYXJ0ID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT5idXNhZGRyOwogCX0gZWxzZSB7CkBAIC0xMjcsMTggKzEyOSwyMyBAQAogCQkJICAodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKIAl9CiAKLQlwY2lfZ2FydCA9ICh1MzIgKikgYWRkcmVzczsKIAotCW1heF9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7Ci0JcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKLQkgICAgPyBlbnRyeS0+cGFnZXMgOiBtYXhfcGFnZXM7CisJbWF4X2F0aV9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7CisJbWF4X3JlYWxfcGFnZXMgPSBtYXhfYXRpX3BhZ2VzIC8gKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7CisJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9yZWFsX3BhZ2VzKQorCSAgICA/IGVudHJ5LT5wYWdlcyA6IG1heF9yZWFsX3BhZ2VzOwogCi0JbWVtc2V0KHBjaV9nYXJ0LCAwLCBtYXhfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikgeworCQltZW1zZXQocGNpX2dhcnQsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0X2lvKCh2b2lkIF9faW9tZW0gKiltYXAtPmhhbmRsZSwgMCwgbWF4X2F0aV9wYWdlcyAqIHNpemVvZih1MzIpKTsKKwl9CiAKKwlnYXJ0X2lkeCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKIAkJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwogCQllbnRyeS0+YnVzYWRkcltpXSA9IHBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5wYWdlbGlzdFtpXSwKLQkJCQkJCSAwLCBQQUdFX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJIDAsIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKIAkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CiAJCQlkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CkBAIC0xNDksMTkgKzE1NiwyNiBAQAogCQlwYWdlX2Jhc2UgPSAodTMyKSBlbnRyeS0+YnVzYWRkcltpXTsKIAogCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJdTMyIHZhbDsKKwogCQkJc3dpdGNoKGdhcnRfaW5mby0+Z2FydF9yZWdfaWYpIHsKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX0lHUDoKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlKSB8IDB4Yyk7CisJCQkJdmFsID0gcGFnZV9iYXNlIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJY2FzZSBEUk1fQVRJX0dBUlRfUENJRToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlID4+IDgpIHwgMHhjKTsKKwkJCQl2YWwgPSAocGFnZV9iYXNlID4+IDgpIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX1BDSToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMihwYWdlX2Jhc2UpOworCQkJCXZhbCA9IHBhZ2VfYmFzZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXBjaV9nYXJ0Kys7CisJCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09CisJCQkgICAgRFJNX0FUSV9HQVJUX01BSU4pCisJCQkJcGNpX2dhcnRbZ2FydF9pZHhdID0gY3B1X3RvX2xlMzIodmFsKTsKKwkJCWVsc2UKKwkJCQlEUk1fV1JJVEUzMihtYXAsIGdhcnRfaWR4ICogc2l6ZW9mKHUzMiksIHZhbCk7CisJCQlnYXJ0X2lkeCsrOwogCQkJcGFnZV9iYXNlICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggMTI3MTVkMy4uNmQ4MGQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTM0LDE1ICszNCwxNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKK3Jlc291cmNlX3NpemVfdCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKIHsKIAlyZXR1cm4gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KTsKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX2xlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpCityZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQogewogCXJldHVybiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQpAQCAtNTAsMjQgKzUyLDQ0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2VfbGVuKTsKIAogc3RhdGljIHN0cnVjdCBkcm1fbWFwX2xpc3QgKmRybV9maW5kX21hdGNoaW5nX21hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkgICAgIGRybV9sb2NhbF9tYXBfdCAqbWFwKQorCQkJCQkJICBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmVudHJ5OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKLQkJaWYgKGVudHJ5LT5tYXAgJiYgKGVudHJ5LT5tYXN0ZXIgPT0gZGV2LT5wcmltYXJ5LT5tYXN0ZXIpICYmIChtYXAtPnR5cGUgPT0gZW50cnktPm1hcC0+dHlwZSkgJiYKLQkJICAgICgoZW50cnktPm1hcC0+b2Zmc2V0ID09IG1hcC0+b2Zmc2V0KSB8fAotCQkgICAgICgobWFwLT50eXBlID09IF9EUk1fU0hNKSAmJiAobWFwLT5mbGFncyZfRFJNX0NPTlRBSU5TX0xPQ0spKSkpIHsKKwkJLyoKKwkJICogQmVjYXVzZSB0aGUga2VybmVsLXVzZXJzcGFjZSBBQkkgaXMgZml4ZWQgYXQgYSAzMi1iaXQgb2Zmc2V0CisJCSAqIHdoaWxlIFBDSSByZXNvdXJjZXMgbWF5IGxpdmUgYWJvdmUgdGhhdCwgd2UgaWdub3JlIHRoZSBtYXAKKwkJICogb2Zmc2V0IGZvciBtYXBzIG9mIHR5cGUgX0RSTV9GUkFNRUJVRkZFUiBvciBfRFJNX1JFR0lTVEVSUy4KKwkJICogSXQgaXMgYXNzdW1lZCB0aGF0IGVhY2ggZHJpdmVyIHdpbGwgaGF2ZSBvbmx5IG9uZSByZXNvdXJjZSBvZgorCQkgKiBlYWNoIHR5cGUuCisJCSAqLworCQlpZiAoIWVudHJ5LT5tYXAgfHwKKwkJICAgIG1hcC0+dHlwZSAhPSBlbnRyeS0+bWFwLT50eXBlIHx8CisJCSAgICBlbnRyeS0+bWFzdGVyICE9IGRldi0+cHJpbWFyeS0+bWFzdGVyKQorCQkJY29udGludWU7CisJCXN3aXRjaCAobWFwLT50eXBlKSB7CisJCWNhc2UgX0RSTV9TSE06CisJCQlpZiAobWFwLT5mbGFncyAhPSBfRFJNX0NPTlRBSU5TX0xPQ0spCisJCQkJYnJlYWs7CisJCWNhc2UgX0RSTV9SRUdJU1RFUlM6CisJCWNhc2UgX0RSTV9GUkFNRV9CVUZGRVI6CiAJCQlyZXR1cm4gZW50cnk7CisJCWRlZmF1bHQ6IC8qIE1ha2UgZ2NjIGhhcHB5ICovCisJCQk7CiAJCX0KKwkJaWYgKGVudHJ5LT5tYXAtPm9mZnNldCA9PSBtYXAtPm9mZnNldCkKKwkJCXJldHVybiBlbnRyeTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBkcm1fbWFwX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaCwKLQkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSkKKwkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSwgaW50IHNobSkKIHsKLQlpbnQgdXNlX2hhc2hlZF9oYW5kbGU7CisJaW50IHVzZV9oYXNoZWRfaGFuZGxlLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQogCXVzZV9oYXNoZWRfaGFuZGxlID0gKCh1c2VyX3Rva2VuICYgMHhGRkZGRkZGRjAwMDAwMDAwVUwpIHx8IGhhc2hlZF9oYW5kbGUpOwogI2VsaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCkBAIC04MywzMCArMTA1LDQ3IEBACiAJCWlmIChyZXQgIT0gLUVJTlZBTCkKIAkJCXJldHVybiByZXQ7CiAJfQorCisJc2hpZnQgPSAwOworCWFkZCA9IERSTV9NQVBfSEFTSF9PRkZTRVQgPj4gUEFHRV9TSElGVDsKKwlpZiAoc2htICYmIChTSE1MQkEgPiBQQUdFX1NJWkUpKSB7CisJCWludCBiaXRzID0gaWxvZzIoU0hNTEJBID4+IFBBR0VfU0hJRlQpICsgMTsKKworCQkvKiBGb3Igc2hhcmVkIG1lbW9yeSwgd2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgU0hNTEJBCisJCSAqIGJpdHMgb2YgdGhlIGV2ZW50dWFsIHZtYS0+dm1fcGdvZmYgdmFsdWUgZHVyaW5nCisJCSAqIG1tYXAoKS4gIE90aGVyd2lzZSB3ZSBydW4gaW50byBjYWNoZSBhbGlhc2luZyBwcm9ibGVtcworCQkgKiBvbiBzb21lIHBsYXRmb3Jtcy4gIE9uIHRoZXNlIHBsYXRmb3JtcywgdGhlIHBnb2ZmIG9mCisJCSAqIGEgbW1hcCgpIHJlcXVlc3QgaXMgdXNlZCB0byBwaWNrIGEgc3VpdGFibGUgdmlydHVhbAorCQkgKiBhZGRyZXNzIGZvciB0aGUgbW1hcCgpIHJlZ2lvbiBzdWNoIHRoYXQgaXQgd2lsbCBub3QKKwkJICogY2F1c2UgY2FjaGUgYWxpYXNpbmcgcHJvYmxlbXMuCisJCSAqCisJCSAqIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBTSE1MQkEgcmVsZXZhbnQgYml0cyBvZiB0aGUKKwkJICogaGFzaCB2YWx1ZSB3ZSB1c2UgYXJlIGVxdWFsIHRvIHRob3NlIGluIHRoZSBvcmlnaW5hbAorCQkgKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorCQkgKi8KKwkJc2hpZnQgPSBiaXRzOworCQlhZGQgfD0gKCh1c2VyX3Rva2VuID4+IFBBR0VfU0hJRlQpICYgKCgxVUwgPDwgYml0cykgLSAxVUwpKTsKKwl9CisKIAlyZXR1cm4gZHJtX2h0X2p1c3RfaW5zZXJ0X3BsZWFzZSgmZGV2LT5tYXBfaGFzaCwgaGFzaCwKIAkJCQkJIHVzZXJfdG9rZW4sIDMyIC0gUEFHRV9TSElGVCAtIDMsCi0JCQkJCSAwLCBEUk1fTUFQX0hBU0hfT0ZGU0VUID4+IFBBR0VfU0hJRlQpOworCQkJCQkgc2hpZnQsIGFkZCk7CiB9CiAKIC8qKgotICogSW9jdGwgdG8gc3BlY2lmeSBhIHJhbmdlIG9mIG1lbW9yeSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhIG5vbi1yb290IHByb2Nlc3MuCi0gKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIGRybV9tYXAgc3RydWN0dXJlLgotICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KKyAqIENvcmUgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhCisgKiBub24tcm9vdCBwcm9jZXNzLgogICoKICAqIEFkanVzdHMgdGhlIG1lbW9yeSBvZmZzZXQgdG8gaXRzIGFic29sdXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbWFwcGluZwogICogdHlwZS4gIEFkZHMgdGhlIG1hcCB0byB0aGUgbWFwIGxpc3QgZHJtX2RldmljZTo6bWFwbGlzdC4gQWRkcyBNVFJSJ3Mgd2hlcmUKICAqIGFwcGxpY2FibGUgYW5kIGlmIHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgogICovCi1zdGF0aWMgaW50IGRybV9hZGRtYXBfY29yZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK3N0YXRpYyBpbnQgZHJtX2FkZG1hcF9jb3JlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkJICAgdW5zaWduZWQgaW50IHNpemUsIGVudW0gZHJtX21hcF90eXBlIHR5cGUsCiAJCQkgICBlbnVtIGRybV9tYXBfZmxhZ3MgZmxhZ3MsCiAJCQkgICBzdHJ1Y3QgZHJtX21hcF9saXN0ICoqIG1hcGxpc3QpCiB7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJZHJtX2RtYV9oYW5kbGVfdCAqZG1haDsKIAl1bnNpZ25lZCBsb25nIHVzZXJfdG9rZW47CkBAIC0xMjksOSArMTY4LDkgQEAKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlEUk1fREVCVUcoIm9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCi0JCSAgbWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgbWFwLT50eXBlKTsKLQlpZiAoKG1hcC0+b2Zmc2V0ICYgKH5QQUdFX01BU0spKSB8fCAobWFwLT5zaXplICYgKH5QQUdFX01BU0spKSkgeworCURSTV9ERUJVRygib2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPm9mZnNldCwgbWFwLT5zaXplLCBtYXAtPnR5cGUpOworCWlmICgobWFwLT5vZmZzZXQgJiAofihyZXNvdXJjZV9zaXplX3QpUEFHRV9NQVNLKSkgfHwgKG1hcC0+c2l6ZSAmICh+UEFHRV9NQVNLKSkpIHsKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1OSw3ICsyOTgsOCBAQAogCQkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCURSTV9ERUJVRygiQUdQIG9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4XG4iLCBtYXAtPm9mZnNldCwgbWFwLT5zaXplKTsKKwkJRFJNX0RFQlVHKCJBR1Agb2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOwogCiAJCWJyZWFrOwogCWNhc2UgX0RSTV9HRU06CkBAIC0zMDksNyArMzQ5LDggQEAKIAkvKiBXZSBkbyBpdCBoZXJlIHNvIHRoYXQgZGV2LT5zdHJ1Y3RfbXV0ZXggcHJvdGVjdHMgdGhlIGluY3JlbWVudCAqLwogCXVzZXJfdG9rZW4gPSAobWFwLT50eXBlID09IF9EUk1fU0hNKSA/ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlIDoKIAkJbWFwLT5vZmZzZXQ7Ci0JcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCk7CisJcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCwKKwkJCSAgICAgKG1hcC0+dHlwZSA9PSBfRFJNX1NITSkpOwogCWlmIChyZXQpIHsKIAkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lTVEVSUykKIAkJCWlvdW5tYXAobWFwLT5oYW5kbGUpOwpAQCAtMzI3LDkgKzM2OCw5IEBACiAJcmV0dXJuIDA7CiAJfQogCi1pbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2ludCBkcm1fYWRkbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBkcm1fbWFwX3R5cGUgdHlwZSwKLQkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiogbWFwX3B0cikKKwkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqKiBtYXBfcHRyKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJaW50IHJjOwpAQCAtMzQyLDYgKzM4MywxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9hZGRtYXApOwogCisvKioKKyAqIElvY3RsIHRvIHNwZWNpZnkgYSByYW5nZSBvZiBtZW1vcnkgdGhhdCBpcyBhdmFpbGFibGUgZm9yIG1hcHBpbmcgYnkgYQorICogbm9uLXJvb3QgcHJvY2Vzcy4KKyAqCisgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgorICogXHBhcmFtIGZpbGVfcHJpdiBEUk0gZmlsZSBwcml2YXRlLgorICogXHBhcmFtIGNtZCBjb21tYW5kLgorICogXHBhcmFtIGFyZyBwb2ludGVyIHRvIGEgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICoKKyAqLwogaW50IGRybV9hZGRtYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTM2NywxOSArNDE5LDEzIEBACiAgKiBSZW1vdmUgYSBtYXAgcHJpdmF0ZSBmcm9tIGxpc3QgYW5kIGRlYWxsb2NhdGUgcmVzb3VyY2VzIGlmIHRoZSBtYXBwaW5nCiAgKiBpc24ndCBpbiB1c2UuCiAgKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIHN0cnVjdCBkcm1fbWFwIHN0cnVjdHVyZS4KLSAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCi0gKgogICogU2VhcmNoZXMgdGhlIG1hcCBvbiBkcm1fZGV2aWNlOjptYXBsaXN0LCByZW1vdmVzIGl0IGZyb20gdGhlIGxpc3QsIHNlZSBpZgogICogaXRzIGJlaW5nIHVzZWQsIGFuZCBmcmVlIGFueSBhc3NvY2lhdGUgcmVzb3VyY2UgKHN1Y2ggYXMgTVRSUidzKSBpZiBpdCdzIG5vdAogICogYmVpbmcgb24gdXNlLgogICoKICAqIFxzYSBkcm1fYWRkbWFwCiAgKi8KLWludCBkcm1fcm1tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKQoraW50IGRybV9ybW1hcF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QgPSBOVUxMLCAqbGlzdF90OwogCWRybV9kbWFfaGFuZGxlX3QgZG1haDsKQEAgLTQ0Miw3ICs0ODgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fcm1tYXBfbG9ja2VkKTsKIAotaW50IGRybV9ybW1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCkKK2ludCBkcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjIsMTIgKzUwOCwxOCBAQAogICogT25lIHVzZSBjYXNlIG1pZ2h0IGJlIGFmdGVyIGFkZG1hcCBpcyBhbGxvd2VkIGZvciBub3JtYWwgdXNlcnMgZm9yIFNITSBhbmQKICAqIGdldHMgdXNlZCBieSBkcml2ZXJzIHRoYXQgdGhlIHNlcnZlciBkb2Vzbid0IG5lZWQgdG8gY2FyZSBhYm91dC4gIFRoaXMgc2VlbXMKICAqIHVubGlrZWx5LgorICoKKyAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCisgKiBccGFyYW0gZmlsZV9wcml2IERSTSBmaWxlIHByaXZhdGUuCisgKiBccGFyYW0gY21kIGNvbW1hbmQuCisgKiBccGFyYW0gYXJnIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgogICovCiBpbnQgZHJtX3JtbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0JZHJtX2xvY2FsX21hcF90ICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSBOVUxMOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKIAlpbnQgcmV0OwogCkBAIC0xNTM0LDcgKzE1ODYsNyBAQAogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfU0cpKQogCQkgICAgfHwgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRkJfRE1BKQogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfRkIpKSkgewotCQkJc3RydWN0IGRybV9tYXAgKm1hcCA9IGRldi0+YWdwX2J1ZmZlcl9tYXA7CisJCQlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gZGV2LT5hZ3BfYnVmZmVyX21hcDsKIAkJCXVuc2lnbmVkIGxvbmcgdG9rZW4gPSBkZXYtPmFncF9idWZmZXJfdG9rZW47CiAKIAkJCWlmICghbWFwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCmluZGV4IDgwOWVjMGYuLjdkMWU1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwICpyZXF1ZXN0ID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqX2VudHJ5OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IE5VTEw7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0ID0gTlVMTDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCAxYzNhOGM1Li5hMDQ2MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC00Miw2ICs0MiwyNiBAQAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAogfTsKIAorc3RhdGljIHZvaWQgZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnQ7CisKKwlpZiAoZmxhZ3MgPT0gKERSTV9NT0RFX0ZMQUdfREJMU0NBTiB8IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgJiYKKwkJCQkhKGZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQorCQkJbW9kZS0+c3RhdHVzID0gTU9ERV9OT19JTlRFUkxBQ0U7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pICYmCisJCQkJIShmbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpCisJCQltb2RlLT5zdGF0dXMgPSBNT0RFX05PX0RCTEVTQ0FOOworCX0KKworCXJldHVybjsKK30KKwogLyoqCiAgKiBkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyAtIGdldCBjb21wbGV0ZSBzZXQgb2YgZGlzcGxheSBtb2RlcwogICogQGRldjogRFJNIGRldmljZQpAQCAtNzIsNiArOTIsNyBAQAogCXN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0KIAkJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZTsKIAlpbnQgY291bnQgPSAwOworCWludCBtb2RlX2ZsYWdzID0gMDsKIAogCURSTV9ERUJVRygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJLyogc2V0IGFsbCBtb2RlcyB0byB0aGUgdW52ZXJpZmllZCBzdGF0ZSAqLwpAQCAtOTYsNiArMTE3LDEzIEBACiAJaWYgKG1heFggJiYgbWF4WSkKIAkJZHJtX21vZGVfdmFsaWRhdGVfc2l6ZShkZXYsICZjb25uZWN0b3ItPm1vZGVzLCBtYXhYLAogCQkJCSAgICAgICBtYXhZLCAwKTsKKworCWlmIChjb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkKQorCQltb2RlX2ZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCWlmIChjb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCkKKwkJbW9kZV9mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CisJZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhjb25uZWN0b3IsIG1vZGVfZmxhZ3MpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CiAJCWlmIChtb2RlLT5zdGF0dXMgPT0gTU9ERV9PSykKIAkJCW1vZGUtPnN0YXR1cyA9IGNvbm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxpZChjb25uZWN0b3IsCkBAIC04ODUsNyArOTEzLDYgQEAKIC8qKgogICogZHJtX2luaXRpYWxfY29uZmlnIC0gc2V0dXAgYSBzYW5lIGluaXRpYWwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24KICAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBjYW5fZ3JvdzogdGhpcyBjb25maWd1cmF0aW9uIGlzIGdyb3dhYmxlCiAgKgogICogTE9DS0lORzoKICAqIENhbGxlZCBhdCBpbml0IHRpbWUsIG11c3QgdGFrZSBtb2RlIGNvbmZpZyBsb2NrLgpAQCAtODk3LDcgKzkyNCw3IEBACiAgKiBSRVRVUk5TOgogICogWmVybyBpZiBldmVyeXRoaW5nIHdlbnQgb2ssIG5vbnplcm8gb3RoZXJ3aXNlLgogICovCi1ib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBjYW5fZ3JvdykKK2Jvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50IGNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGVkMzJlZGIuLmM0YWRhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMjU0LDE1ICsyNTQsMTkgQEAKIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQ7CiAJaW50IGk7CiAKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5kZXZpY2VfbGlzdCk7CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkKKwkJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisKKwkvKiBJZiBub3QgdXNpbmcgS01TLCBmYWxsIGJhY2sgdG8gc3RlYWx0aCBtb2RlIG1hbnVhbCBzY2FubmluZy4gKi8KIAlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgewotCQlwaWQgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKikmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOworCQlwaWQgPSAmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOwogCiAJCS8qIExvb3AgYXJvdW5kIHNldHRpbmcgdXAgYSBEUk0gZGV2aWNlIGZvciBlYWNoIFBDSSBkZXZpY2UKIAkJICogbWF0Y2hpbmcgb3VyIElEIGFuZCBkZXZpY2UgY2xhc3MuICBJZiB3ZSBoYWQgdGhlIGludGVybmFsCkBAIC0yODcsNjggKzI5MSwxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pbml0KTsKIAotLyoqCi0gKiBDYWxsZWQgdmlhIGNsZWFudXBfbW9kdWxlKCkgYXQgbW9kdWxlIHVubG9hZCB0aW1lLgotICoKLSAqIENsZWFucyB1cCBhbGwgRFJNIGRldmljZSwgY2FsbGluZyBkcm1fbGFzdGNsb3NlKCkuCi0gKgotICogXHNhIGRybV9pbml0Ci0gKi8KLXN0YXRpYyB2b2lkIGRybV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQotewotCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdCwgKmxpc3RfdGVtcDsKLQlEUk1fREVCVUcoIlxuIik7Ci0KLQlpZiAoIWRldikgewotCQlEUk1fRVJST1IoImNsZWFudXAgY2FsbGVkIG5vIGRldlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKLQotCWRybV9sYXN0Y2xvc2UoZGV2KTsKLQotCWlmIChkcm1fY29yZV9oYXNfTVRSUihkZXYpICYmIGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgotCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+YWdwX210cnIgPj0gMCkgewotCQlpbnQgcmV0dmFsOwotCQlyZXR2YWwgPSBtdHJyX2RlbChkZXYtPmFncC0+YWdwX210cnIsCi0JCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAotCQkJCSAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQgKiAxMDI0KTsKLQkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsKTsKLQl9Ci0KLQlpZiAoZGV2LT5kcml2ZXItPnVubG9hZCkKLQkJZGV2LT5kcml2ZXItPnVubG9hZChkZXYpOwotCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgewotCQlkcm1fZnJlZShkZXYtPmFncCwgc2l6ZW9mKCpkZXYtPmFncCksIERSTV9NRU1fQUdQTElTVFMpOwotCQlkZXYtPmFncCA9IE5VTEw7Ci0JfQotCi0JZHJtX2h0X3JlbW92ZSgmZGV2LT5tYXBfaGFzaCk7Ci0JZHJtX2N0eGJpdG1hcF9jbGVhbnVwKGRldik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocl9saXN0LCBsaXN0X3RlbXAsICZkZXYtPm1hcGxpc3QsIGhlYWQpCi0JCWRybV9ybW1hcChkZXYsIHJfbGlzdC0+bWFwKTsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOwotCi0JaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQotCQlkcm1fZ2VtX2Rlc3Ryb3koZGV2KTsKLQotCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7Ci0JaWYgKGRybV9wdXRfZGV2KGRldikpCi0JCURSTV9FUlJPUigiQ2Fubm90IHVubG9hZCBtb2R1bGVcbiIpOwotfQotCiB2b2lkIGRybV9leGl0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgKnRtcDsKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkcml2ZXItPmRldmljZV9saXN0LCBkcml2ZXJfaXRlbSkKLQkJZHJtX2NsZWFudXAoZGV2KTsKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkgeworCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisJfSBlbHNlIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmZHJpdmVyLT5kZXZpY2VfbGlzdCwgZHJpdmVyX2l0ZW0pCisJCQlkcm1fcHV0X2RldihkZXYpOworCX0KIAogCURSTV9JTkZPKCJNb2R1bGUgdW5sb2FkZWRcbiIpOwogfQpAQCAtNDY4LDYgKzQyMSw3IEBACiAJZHJtX2lvY3RsX3QgKmZ1bmM7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CiAJaW50IHJldGNvZGUgPSAtRUlOVkFMOworCWNoYXIgc3RhY2tfa2RhdGFbMTI4XTsKIAljaGFyICprZGF0YSA9IE5VTEw7CiAKIAlhdG9taWNfaW5jKCZkZXYtPmlvY3RsX2NvdW50KTsKQEAgLTUwNiwxMCArNDYwLDE0IEBACiAJCXJldGNvZGUgPSAtRUFDQ0VTOwogCX0gZWxzZSB7CiAJCWlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkpIHsKLQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWtkYXRhKSB7Ci0JCQkJcmV0Y29kZSA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJfaTE7CisJCQlpZiAoX0lPQ19TSVpFKGNtZCkgPD0gc2l6ZW9mKHN0YWNrX2tkYXRhKSkgeworCQkJCWtkYXRhID0gc3RhY2tfa2RhdGE7CisJCQl9IGVsc2UgeworCQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFrZGF0YSkgeworCQkJCQlyZXRjb2RlID0gLUVOT01FTTsKKwkJCQkJZ290byBlcnJfaTE7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTUzMCw3ICs0ODgsNyBAQAogCX0KIAogICAgICAgZXJyX2kxOgotCWlmIChrZGF0YSkKKwlpZiAoa2RhdGEgIT0gc3RhY2tfa2RhdGEpCiAJCWtmcmVlKGtkYXRhKTsKIAlhdG9taWNfZGVjKCZkZXYtPmlvY3RsX2NvdW50KTsKIAlpZiAocmV0Y29kZSkKQEAgLTU0MCw3ICs0OTgsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pb2N0bCk7CiAKLWRybV9sb2NhbF9tYXBfdCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqZW50cnk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYTgzOWEyOC4uY2E5YzYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEyNSwxMCArMTI1LDggQEAKIAkJRFJNX0VSUk9SKCJFRElEIGhhcyBtYWpvciB2ZXJzaW9uICVkLCBpbnN0ZWFkIG9mIDFcbiIsIGVkaWQtPnZlcnNpb24pOwogCQlnb3RvIGJhZDsKIAl9Ci0JaWYgKGVkaWQtPnJldmlzaW9uID4gMykgewotCQlEUk1fRVJST1IoIkVESUQgaGFzIG1pbm9yIHZlcnNpb24gJWQsIHdoaWNoIGlzIG5vdCBiZXR3ZWVuIDAtM1xuIiwgZWRpZC0+cmV2aXNpb24pOwotCQlnb3RvIGJhZDsKLQl9CisJaWYgKGVkaWQtPnJldmlzaW9uID4gNCkKKwkJRFJNX0RFQlVHKCJFRElEIG1pbm9yID4gNCwgYXNzdW1pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRURJRF9MRU5HVEg7IGkrKykKIAkJY3N1bSArPSByYXdfZWRpZFtpXTsKQEAgLTE2Miw3ICsxNjAsNyBAQAogCWVkaWRfdmVuZG9yWzBdID0gKChlZGlkLT5tZmdfaWRbMF0gJiAweDdjKSA+PiAyKSArICdAJzsKIAllZGlkX3ZlbmRvclsxXSA9ICgoKGVkaWQtPm1mZ19pZFswXSAmIDB4MykgPDwgMykgfAogCQkJICAoKGVkaWQtPm1mZ19pZFsxXSAmIDB4ZTApID4+IDUpKSArICdAJzsKLQllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMl0gJiAweDFmKSArICdAJzsKKwllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMV0gJiAweDFmKSArICdAJzsKIAogCXJldHVybiAhc3RybmNtcChlZGlkX3ZlbmRvciwgdmVuZG9yLCAzKTsKIH0KQEAgLTU1MCwxMSArNTQ4LDIwIEBACiB9CiAKICNkZWZpbmUgRERDX0FERFIgMHg1MAotCi11bnNpZ25lZCBjaGFyICpkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbiB2aWEgSTJDLgorICoKKyAqIFxwYXJhbSBhZGFwdGVyIDogaTJjIGRldmljZSBhZGFwdG9yCisgKiBccGFyYW0gYnVmICAgICA6IEVESUQgZGF0YSBidWZmZXIgdG8gYmUgZmlsbGVkCisgKiBccGFyYW0gbGVuICAgICA6IEVESUQgZGF0YSBidWZmZXIgbGVuZ3RoCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLgorICoKKyAqIFRyeSB0byBmZXRjaCBFRElEIGluZm9ybWF0aW9uIGJ5IGNhbGxpbmcgaTJjIGRyaXZlciBmdW5jdGlvbi4KKyAqLworaW50IGRybV9kb19wcm9iZV9kZGNfZWRpZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXJ0ID0gMHgwOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKIAkJewogCQkJLmFkZHIJPSBERENfQUREUiwKQEAgLTU2NCwzMSArNTcxLDM2IEBACiAJCX0sIHsKIAkJCS5hZGRyCT0gRERDX0FERFIsCiAJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKLQkJCS5sZW4JPSBFRElEX0xFTkdUSCwKKwkJCS5sZW4JPSBsZW4sCiAJCQkuYnVmCT0gYnVmLAogCQl9CiAJfTsKIAotCWlmICghYnVmKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBFRElEICIKLQkJCSAiYmxvY2suXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQotCQlyZXR1cm4gYnVmOworCQlyZXR1cm4gMDsKIAogCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gcmVhZCBFRElEIGJsb2NrLlxuIik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9kb19wcm9iZV9kZGNfZWRpZCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpkcm1fZGRjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbi4KKyAqCisgKiBccGFyYW0gYWRhcHRlciA6IGkyYyBkZXZpY2UgYWRhcHRvci4KKyAqIFxwYXJhbSBidWYgICAgIDogRURJRCBkYXRhIGJ1ZmZlciB0byBiZSBmaWxsZWQKKyAqIFxwYXJhbSBsZW4gICAgIDogRURJRCBkYXRhIGJ1ZmZlciBsZW5ndGgKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuCisgKgorICogSW5pdGlhbGl6ZSBEREMsIHRoZW4gZmV0Y2ggRURJRCBpbmZvcm1hdGlvbgorICogYnkgY2FsbGluZyBkcm1fZG9fcHJvYmVfZGRjX2VkaWQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFsZ29fZGF0YSA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKLQl1bnNpZ25lZCBjaGFyICplZGlkID0gTlVMTDsKIAlpbnQgaSwgajsKKwlpbnQgcmV0ID0gLTE7CiAKIAlhbGdvX2RhdGEtPnNldHNjbChhbGdvX2RhdGEtPmRhdGEsIDEpOwogCkBAIC02MTYsNyArNjI4LDcgQEAKIAkJbXNsZWVwKDE1KTsKIAogCQkvKiBEbyB0aGUgcmVhbCB3b3JrICovCi0JCWVkaWQgPSBkcm1fZG9fcHJvYmVfZGRjX2VkaWQoYWRhcHRlcik7CisJCXJldCA9IGRybV9kb19wcm9iZV9kZGNfZWRpZChhZGFwdGVyLCBidWYsIGxlbik7CiAJCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCWFsZ29fZGF0YS0+c2V0c2NsKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCW1zbGVlcCgxNSk7CkBAIC02MzIsNyArNjQ0LDcgQEAKIAkJbXNsZWVwKDE1KTsKIAkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAwKTsKIAkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAwKTsKLQkJaWYgKGVkaWQpCisJCWlmIChyZXQgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAkvKiBSZWxlYXNlIHRoZSBEREMgbGluZXMgd2hlbiBkb25lIG9yIHRoZSBBcHBsZSBDaW5lbWEgSEQgZGlzcGxheQpAQCAtNjQxLDkgKzY1MywzMSBAQAogCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMSk7CiAJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAxKTsKIAotCXJldHVybiBlZGlkOworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9kZGNfcmVhZChhZGFwdGVyLCBidWYsIGxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9pbmZvKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IG5vIEVESUQgZGF0YVxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKCFlZGlkX2lzX3ZhbGlkKChzdHJ1Y3QgZWRpZCAqKWJ1ZikpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogRURJRCBpbnZhbGlkLlxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlyZXQgPSAtMTsKKwl9CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfRURJRF9FWFRfTlVNIDQKIC8qKgogICogZHJtX2dldF9lZGlkIC0gZ2V0IEVESUQgZGF0YSwgaWYgYXZhaWxhYmxlCiAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3Igd2UncmUgcHJvYmluZwpAQCAtNjU2LDI3ICs2OTAsMTE4IEBACiBzdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBlZGlkICplZGlkOwogCi0JZWRpZCA9IChzdHJ1Y3QgZWRpZCAqKWRybV9kZGNfcmVhZChhZGFwdGVyKTsKLQlpZiAoIWVkaWQpIHsKLQkJZGV2X2luZm8oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogbm8gRURJRCBkYXRhXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCXJldHVybiBOVUxMOworCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKE1BWF9FRElEX0VYVF9OVU0gKyAxKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChlZGlkID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBFRElEXG4iKTsKKwkJZ290byBlbmQ7CiAJfQotCWlmICghZWRpZF9pc192YWxpZChlZGlkKSkgewotCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwgIiVzOiBFRElEIGludmFsaWQuXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCWtmcmVlKGVkaWQpOwotCQlyZXR1cm4gTlVMTDsKKworCS8qIFJlYWQgZmlyc3QgRURJRCBibG9jayAqLworCXJldCA9IGRybV9kZGNfcmVhZF9lZGlkKGNvbm5lY3RvciwgYWRhcHRlciwKKwkJCQkodW5zaWduZWQgY2hhciAqKWVkaWQsIEVESURfTEVOR1RIKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gY2xlYW5fdXA7CisKKwkvKiBUaGVyZSBhcmUgRURJRCBleHRlbnNpb25zIHRvIGJlIHJlYWQgKi8KKwlpZiAoZWRpZC0+ZXh0ZW5zaW9ucyAhPSAwKSB7CisJCWludCBlZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zOworCisJCWlmIChlZGlkX2V4dF9udW0gPiBNQVhfRURJRF9FWFRfTlVNKSB7CisJCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwKKwkJCQkgIlRoZSBudW1iZXIgb2YgZXh0ZW5zaW9uKCVkKSBpcyAiCisJCQkJICJvdmVyIG1heCAoJWQpLCBhY3R1YWxseSByZWFkIG51bWJlciAoJWQpXG4iLAorCQkJCSBlZGlkX2V4dF9udW0sIE1BWF9FRElEX0VYVF9OVU0sCisJCQkJIE1BWF9FRElEX0VYVF9OVU0pOworCQkJLyogUmVzZXQgRURJRCBleHRlbnNpb24gbnVtYmVyIHRvIGJlIHJlYWQgKi8KKwkJCWVkaWRfZXh0X251bSA9IE1BWF9FRElEX0VYVF9OVU07CisJCX0KKwkJLyogUmVhZCBFRElEIGluY2x1ZGluZyBleHRlbnNpb25zIHRvbyAqLworCQlyZXQgPSBkcm1fZGRjX3JlYWRfZWRpZChjb25uZWN0b3IsIGFkYXB0ZXIsIChjaGFyICopZWRpZCwKKwkJCQkJRURJRF9MRU5HVEggKiAoZWRpZF9leHRfbnVtICsgMSkpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFuX3VwOworCiAJfQogCiAJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSAoY2hhciAqKWVkaWQ7CisJZ290byBlbmQ7CiAKK2NsZWFuX3VwOgorCWtmcmVlKGVkaWQpOworCWVkaWQgPSBOVUxMOworZW5kOgogCXJldHVybiBlZGlkOworCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfZWRpZCk7CiAKKyNkZWZpbmUgSERNSV9JREVOVElGSUVSIDB4MDAwQzAzCisjZGVmaW5lIFZFTkRPUl9CTE9DSyAgICAweDAzCisvKioKKyAqIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yIC0gZGV0ZWN0IHdoZXRoZXIgbW9uaXRvciBpcyBoZG1pLgorICogQGVkaWQ6IG1vbml0b3IgRURJRCBpbmZvcm1hdGlvbgorICoKKyAqIFBhcnNlIHRoZSBDRUEgZXh0ZW5zaW9uIGFjY29yZGluZyB0byBDRUEtODYxLUIuCisgKiBSZXR1cm4gdHJ1ZSBpZiBIRE1JLCBmYWxzZSBpZiBub3Qgb3IgdW5rbm93bi4KKyAqLworYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwljaGFyICplZGlkX2V4dCA9IE5VTEw7CisJaW50IGksIGhkbWlfaWQsIGVkaWRfZXh0X251bTsKKwlpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OworCWJvb2wgaXNfaGRtaSA9IGZhbHNlOworCisJLyogTm8gRURJRCBvciBFRElEIGV4dGVuc2lvbnMgKi8KKwlpZiAoZWRpZCA9PSBOVUxMIHx8IGVkaWQtPmV4dGVuc2lvbnMgPT0gMCkKKwkJZ290byBlbmQ7CisKKwkvKiBDaG9zZSByZWFsIEVESUQgZXh0ZW5zaW9uIG51bWJlciAqLworCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBNQVhfRURJRF9FWFRfTlVNID8KKwkJICAgICAgIE1BWF9FRElEX0VYVF9OVU0gOiBlZGlkLT5leHRlbnNpb25zOworCisJLyogRmluZCBDRUEgZXh0ZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IGVkaWRfZXh0X251bTsgaSsrKSB7CisJCWVkaWRfZXh0ID0gKGNoYXIgKillZGlkICsgRURJRF9MRU5HVEggKiAoaSArIDEpOworCQkvKiBUaGlzIGJsb2NrIGlzIENFQSBleHRlbnNpb24gKi8KKwkJaWYgKGVkaWRfZXh0WzBdID09IDB4MDIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBlZGlkX2V4dF9udW0pCisJCWdvdG8gZW5kOworCisJLyogRGF0YSBibG9jayBvZmZzZXQgaW4gQ0VBIGV4dGVuc2lvbiBibG9jayAqLworCXN0YXJ0X29mZnNldCA9IDQ7CisJZW5kX29mZnNldCA9IGVkaWRfZXh0WzJdOworCisJLyoKKwkgKiBCZWNhdXNlIEhETUkgaWRlbnRpZmllciBpcyBpbiBWZW5kb3IgU3BlY2lmaWMgQmxvY2ssCisJICogc2VhcmNoIGl0IGZyb20gYWxsIGRhdGEgYmxvY2tzIG9mIENFQSBleHRlbnNpb24uCisJICovCisJZm9yIChpID0gc3RhcnRfb2Zmc2V0OyBpIDwgZW5kX29mZnNldDsKKwkJLyogSW5jcmVhc2VkIGJ5IGRhdGEgYmxvY2sgbGVuICovCisJCWkgKz0gKChlZGlkX2V4dFtpXSAmIDB4MWYpICsgMSkpIHsKKwkJLyogRmluZCB2ZW5kb3Igc3BlY2lmaWMgYmxvY2sgKi8KKwkJaWYgKChlZGlkX2V4dFtpXSA+PiA1KSA9PSBWRU5ET1JfQkxPQ0spIHsKKwkJCWhkbWlfaWQgPSBlZGlkX2V4dFtpICsgMV0gfCAoZWRpZF9leHRbaSArIDJdIDw8IDgpIHwKKwkJCQkgIGVkaWRfZXh0W2kgKyAzXSA8PCAxNjsKKwkJCS8qIEZpbmQgSERNSSBpZGVudGlmaWVyICovCisJCQlpZiAoaGRtaV9pZCA9PSBIRE1JX0lERU5USUZJRVIpCisJCQkJaXNfaGRtaSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworZW5kOgorCXJldHVybiBpc19oZG1pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcik7CisKIC8qKgogICogZHJtX2FkZF9lZGlkX21vZGVzIC0gYWRkIG1vZGVzIGZyb20gRURJRCBkYXRhLCBpZiBhdmFpbGFibGUKICAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB3ZSdyZSBwcm9iaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGUxM2NiNjIuLjA5YTM1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0yNzQsNiArMjc0LDcgQEAKIAkJLyogY3JlYXRlIGEgbmV3IG1hc3RlciAqLwogCQlwcml2LT5taW5vci0+bWFzdGVyID0gZHJtX21hc3Rlcl9jcmVhdGUocHJpdi0+bWlub3IpOwogCQlpZiAoIXByaXYtPm1pbm9yLT5tYXN0ZXIpIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IDg4ZDMzNjguLjQ5ODRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTAyLDEwICs1MDIsOSBAQAogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgZHJtX2dlbV9tbSAqbW0gPSBkZXYtPm1tX3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IE5VTEw7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9oYXNoX2l0ZW0gKmhhc2g7Ci0JdW5zaWduZWQgbG9uZyBwcm90OwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtNTM4LDExICs1MzcsNyBAQAogCXZtYS0+dm1fb3BzID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcC0+aGFuZGxlOwogCS8qIEZJWE1FOiB1c2UgcGdwcm90X3dyaXRlY29tYmluZSB3aGVuIGF2YWlsYWJsZSAqLwotCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0JcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKLSNlbmRpZgotCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKIAogCS8qIFRha2UgYSByZWYgZm9yIHRoaXMgbWFwcGluZyBvZiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSBmYXVsdAogCSAqIGhhbmRsZXIgY2FuIGRlcmVmZXJlbmNlIHRoZSBtbWFwIG9mZnNldCdzIHBvaW50ZXIgdG8gdGhlIG9iamVjdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKaW5kZXggMWI2OTk3Ni4uZjBmNmM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMKQEAgLTcyLDcgKzcyLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fbWFwICptYXA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcDsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3Q7CiAKIAkvKiBIYXJkY29kZWQgZnJvbSBfRFJNX0ZSQU1FX0JVRkZFUiwKQEAgLTk0LDkgKzk0LDkgQEAKIAkJZWxzZQogCQkJdHlwZSA9IHR5cGVzW21hcC0+dHlwZV07CiAKLQkJc2VxX3ByaW50ZihtLCAiJTRkIDB4JTA4bHggMHglMDhseCAlNC40cyAgMHglMDJ4IDB4JTA4bHggIiwKKwkJc2VxX3ByaW50ZihtLCAiJTRkIDB4JTAxNmxseCAweCUwOGx4ICU0LjRzICAweCUwMnggMHglMDhseCAiLAogCQkJICAgaSwKLQkJCSAgIG1hcC0+b2Zmc2V0LAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPm9mZnNldCwKIAkJCSAgIG1hcC0+c2l6ZSwgdHlwZSwgbWFwLT5mbGFncywKIAkJCSAgICh1bnNpZ25lZCBsb25nKSByX2xpc3QtPnVzZXJfdG9rZW4pOwogCQlpZiAobWFwLT5tdHJyIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwppbmRleCA5MjBiNzJmLi4yODJkOWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCkBAIC05NTQsNiArOTU0LDcgQEAKIAkJCSBEUk1fSU9DVExfU0dfRlJFRSwgKHVuc2lnbmVkIGxvbmcpcmVxdWVzdCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCiB0eXBlZGVmIHN0cnVjdCBkcm1fdXBkYXRlX2RyYXczMiB7CiAJZHJtX2RyYXdhYmxlX3QgaGFuZGxlOwogCXVuc2lnbmVkIGludCB0eXBlOwpAQCAtOTg0LDYgKzk4NSw3IEBACiAJCQlEUk1fSU9DVExfVVBEQVRFX0RSQVcsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogCXJldHVybiBlcnI7CiB9CisjZW5kaWYKIAogc3RydWN0IGRybV93YWl0X3ZibGFua19yZXF1ZXN0MzIgewogCWVudW0gZHJtX3ZibGFua19zZXFfdHlwZSB0eXBlOwpAQCAtMTA2Niw3ICsxMDY4LDkgQEAKICNlbmRpZgogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0FMTE9DMzIpXSA9IGNvbXBhdF9kcm1fc2dfYWxsb2MsCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfU0dfRlJFRTMyKV0gPSBjb21wYXRfZHJtX3NnX2ZyZWUsCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1VQREFURV9EUkFXMzIpXSA9IGNvbXBhdF9kcm1fdXBkYXRlX2RyYXcsCisjZW5kaWYKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9XQUlUX1ZCTEFOSzMyKV0gPSBjb21wYXRfZHJtX3dhaXRfdmJsYW5rLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKaW5kZXggYmNjODY5Yi4uMGM3MDdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogI2VuZGlmCQkJCS8qIGRlYnVnX21lbW9yeSAqLwogCi12b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3ZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYKIAkgICAgZGV2LT5hZ3AgJiYgZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlICYmIG1hcC0+dHlwZSA9PSBfRFJNX0FHUCkKQEAgLTE2OSw3ICsxNjksNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fY29yZV9pb3JlbWFwKTsKIAotdm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmCiAJICAgIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCkBAIC0xNzksNyArMTc5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfaW9yZW1hcF93Yyk7CiAKLXZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3ZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAoIW1hcC0+aGFuZGxlIHx8ICFtYXAtPnNpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKaW5kZXggOWIzYzVhZi4uYmFlNTM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbml0aWFsaXphdGlvbiwgZXRjLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwppbmRleCA0OGYzM2JlLi5kMDA5NjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYwpAQCAtMzgxLDYgKzM4MSw3IEBACiAJfQogCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJCXJldCA9IGRybV9nZXRfbWlub3IoZGV2LCAmZGV2LT5jb250cm9sLCBEUk1fTUlOT1JfQ09OVFJPTCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycl9nMjsKQEAgLTQwNCw5ICs0MDUsOSBAQAogCiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5kcml2ZXJfaXRlbSwgJmRyaXZlci0+ZGV2aWNlX2xpc3QpOwogCi0JRFJNX0lORk8oIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzIG9uIG1pbm9yICVkXG4iLAorCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBmb3IgJXMgb24gbWlub3IgJWRcbiIsCiAJCSBkcml2ZXItPm5hbWUsIGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3IsIGRyaXZlci0+cGF0Y2hsZXZlbCwKLQkJIGRyaXZlci0+ZGF0ZSwgZGV2LT5wcmltYXJ5LT5pbmRleCk7CisJCSBkcml2ZXItPmRhdGUsIHBjaV9uYW1lKHBkZXYpLCBkZXYtPnByaW1hcnktPmluZGV4KTsKIAogCXJldHVybiAwOwogCkBAIC00MTgsMjkgKzQxOSw3IEBACiAJZHJtX2ZyZWUoZGV2LCBzaXplb2YoKmRldiksIERSTV9NRU1fU1RVQik7CiAJcmV0dXJuIHJldDsKIH0KLQotLyoqCi0gKiBQdXQgYSBkZXZpY2UgbWlub3IgbnVtYmVyLgotICoKLSAqIFxwYXJhbSBkZXYgZGV2aWNlIGRhdGEgc3RydWN0dXJlCi0gKiBccmV0dXJuIGFsd2F5cyB6ZXJvCi0gKgotICogQ2xlYW5zIHVwIHRoZSBwcm9jIHJlc291cmNlcy4gSWYgaXQgaXMgdGhlIGxhc3QgbWlub3IgdGhlbiByZWxlYXNlIHRoZSBmb3JlaWduCi0gKiAiZHJtIiBkYXRhLCBvdGhlcndpc2UgdW5yZWdpc3RlcnMgdGhlICJkcm0iIGRhdGEsIGZyZWVzIHRoZSBkZXYgbGlzdCBhbmQKLSAqIHVucmVnaXN0ZXJzIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLgotICovCi1pbnQgZHJtX3B1dF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpCi17Ci0JRFJNX0RFQlVHKCJyZWxlYXNlIHByaW1hcnkgJXNcbiIsIGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUpOwotCi0JaWYgKGRldi0+ZGV2bmFtZSkgewotCQlkcm1fZnJlZShkZXYtPmRldm5hbWUsIHN0cmxlbihkZXYtPmRldm5hbWUpICsgMSwKLQkJCSBEUk1fTUVNX0RSSVZFUik7Ci0JCWRldi0+ZGV2bmFtZSA9IE5VTEw7Ci0JfQotCWRybV9mcmVlKGRldiwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOwotCXJldHVybiAwOwotfQorRVhQT1JUX1NZTUJPTChkcm1fZ2V0X2Rldik7CiAKIC8qKgogICogUHV0IGEgc2Vjb25kYXJ5IG1pbm9yIG51bWJlci4KQEAgLTQ3MiwzICs0NTEsNjcgQEAKIAkqbWlub3JfcCA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CisKKy8qKgorICogQ2FsbGVkIHZpYSBkcm1fZXhpdCgpIGF0IG1vZHVsZSB1bmxvYWQgdGltZSBvciB3aGVuIHBjaSBkZXZpY2UgaXMKKyAqIHVucGx1Z2dlZC4KKyAqCisgKiBDbGVhbnMgdXAgYWxsIERSTSBkZXZpY2UsIGNhbGxpbmcgZHJtX2xhc3RjbG9zZSgpLgorICoKKyAqIFxzYSBkcm1faW5pdAorICovCit2b2lkIGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOworCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdCwgKmxpc3RfdGVtcDsKKworCURSTV9ERUJVRygiXG4iKTsKKworCWlmICghZGV2KSB7CisJCURSTV9FUlJPUigiY2xlYW51cCBjYWxsZWQgbm8gZGV2XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRybV92YmxhbmtfY2xlYW51cChkZXYpOworCisJZHJtX2xhc3RjbG9zZShkZXYpOworCisJaWYgKGRybV9jb3JlX2hhc19NVFJSKGRldikgJiYgZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmCisJICAgIGRldi0+YWdwICYmIGRldi0+YWdwLT5hZ3BfbXRyciA+PSAwKSB7CisJCWludCByZXR2YWw7CisJCXJldHZhbCA9IG10cnJfZGVsKGRldi0+YWdwLT5hZ3BfbXRyciwKKwkJCQkgIGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX2Jhc2UsCisJCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9zaXplICogMTAyNCAqIDEwMjQpOworCQlEUk1fREVCVUcoIm10cnJfZGVsPSVkXG4iLCByZXR2YWwpOworCX0KKworCWlmIChkZXYtPmRyaXZlci0+dW5sb2FkKQorCQlkZXYtPmRyaXZlci0+dW5sb2FkKGRldik7CisKKwlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmIGRldi0+YWdwKSB7CisJCWRybV9mcmVlKGRldi0+YWdwLCBzaXplb2YoKmRldi0+YWdwKSwgRFJNX01FTV9BR1BMSVNUUyk7CisJCWRldi0+YWdwID0gTlVMTDsKKwl9CisKKwlkcm1faHRfcmVtb3ZlKCZkZXYtPm1hcF9oYXNoKTsKKwlkcm1fY3R4Yml0bWFwX2NsZWFudXAoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyX2xpc3QsIGxpc3RfdGVtcCwgJmRldi0+bWFwbGlzdCwgaGVhZCkKKwkJZHJtX3JtbWFwKGRldiwgcl9saXN0LT5tYXApOworCisJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCWRybV9wdXRfbWlub3IoJmRldi0+Y29udHJvbCk7CisKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQorCQlkcm1fZ2VtX2Rlc3Ryb3koZGV2KTsKKworCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7CisKKwlpZiAoZGV2LT5kZXZuYW1lKSB7CisJCWRybV9mcmVlKGRldi0+ZGV2bmFtZSwgc3RybGVuKGRldi0+ZGV2bmFtZSkgKyAxLAorCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJZGV2LT5kZXZuYW1lID0gTlVMTDsKKwl9CisJZHJtX2ZyZWUoZGV2LCBzaXplb2YoKmRldiksIERSTV9NRU1fU1RVQik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9wdXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCAxODZkMDgxLi5iYzBjNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC0zNSw3ICszNSw5IEBACiAJc3RydWN0IGRybV9taW5vciAqZHJtX21pbm9yID0gdG9fZHJtX21pbm9yKGRldik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcm1fbWlub3ItPmRldjsKIAotCWlmIChkcm1fbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSAmJiBkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQpCisJaWYgKGRybV9taW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZICYmCisJICAgICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRybV9kZXYsIERSSVZFUl9NT0RFU0VUKSAmJgorCSAgICBkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQpCiAJCXJldHVybiBkcm1fZGV2LT5kcml2ZXItPnN1c3BlbmQoZHJtX2Rldiwgc3RhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC01Myw3ICs1NSw5IEBACiAJc3RydWN0IGRybV9taW5vciAqZHJtX21pbm9yID0gdG9fZHJtX21pbm9yKGRldik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcm1fbWlub3ItPmRldjsKIAotCWlmIChkcm1fbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSAmJiBkcm1fZGV2LT5kcml2ZXItPnJlc3VtZSkKKwlpZiAoZHJtX21pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kgJiYKKwkgICAgIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZHJtX2RldiwgRFJJVkVSX01PREVTRVQpICYmCisJICAgIGRybV9kZXYtPmRyaXZlci0+cmVzdW1lKQogCQlyZXR1cm4gZHJtX2Rldi0+ZHJpdmVyLT5yZXN1bWUoZHJtX2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTExOCwyMCArMTIyLDYgQEAKIAljbGFzc19kZXN0cm95KGRybV9jbGFzcyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZHJpKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqZHJtX21pbm9yID0gdG9fZHJtX21pbm9yKGRldmljZSk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcm1fbWlub3ItPmRldjsKLQlpZiAoZHJtX2Rldi0+ZHJpdmVyLT5kcmlfbGlicmFyeV9uYW1lKQotCQlyZXR1cm4gZHJtX2Rldi0+ZHJpdmVyLT5kcmlfbGlicmFyeV9uYW1lKGRybV9kZXYsIGJ1Zik7Ci0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRybV9kZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldmljZV9hdHRyc1tdID0gewotCV9fQVRUUihkcmlfbGlicmFyeV9uYW1lLCBTX0lSVUdPLCBzaG93X2RyaSwgTlVMTCksCi19OwotCiAvKioKICAqIGRybV9zeXNmc19kZXZpY2VfcmVsZWFzZSAtIGRvIG5vdGhpbmcKICAqIEBkZXY6IExpbnV4IGRldmljZQpAQCAtNDYxLDYgKzQ1MSw3IEBACiAKIAlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+cHJpbWFyeS0+a2Rldi5rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CitFWFBPUlRfU1lNQk9MKGRybV9zeXNmc19ob3RwbHVnX2V2ZW50KTsKIAogLyoqCiAgKiBkcm1fc3lzZnNfZGV2aWNlX2FkZCAtIGFkZHMgYSBjbGFzcyBkZXZpY2UgdG8gc3lzZnMgZm9yIGEgY2hhcmFjdGVyIGRyaXZlcgpAQCAtNDc0LDcgKzQ2NSw2IEBACiBpbnQgZHJtX3N5c2ZzX2RldmljZV9hZGQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCiB7CiAJaW50IGVycjsKLQlpbnQgaSwgajsKIAljaGFyICptaW5vcl9zdHI7CiAKIAltaW5vci0+a2Rldi5wYXJlbnQgPSAmbWlub3ItPmRldi0+cGRldi0+ZGV2OwpAQCAtNDk2LDE4ICs0ODYsOCBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlX2F0dHJzKTsgaSsrKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbWlub3ItPmtkZXYsICZkZXZpY2VfYXR0cnNbaV0pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZpbGVzOwotCX0KLQogCXJldHVybiAwOwogCi1lcnJfb3V0X2ZpbGVzOgotCWlmIChpID4gMCkKLQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCWRldmljZV9yZW1vdmVfZmlsZSgmbWlub3ItPmtkZXYsICZkZXZpY2VfYXR0cnNbal0pOwogCWRldmljZV91bnJlZ2lzdGVyKCZtaW5vci0+a2Rldik7CiBlcnJfb3V0OgogCkBAIC01MjMsOSArNTAzLDUgQEAKICAqLwogdm9pZCBkcm1fc3lzZnNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZV9hdHRycyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZtaW5vci0+a2RldiwgJmRldmljZV9hdHRyc1tpXSk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1pbm9yLT5rZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwppbmRleCAzZmZhZTAyLi4yMmY3NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCkBAIC05MSw3ICs5MSw3IEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IE5VTEw7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCXN0cnVjdCBkcm1faGFzaF9pdGVtICpoYXNoOwogCkBAIC0xMTUsOSArMTE1LDkgQEAKIAkJICogVXNpbmcgdm1fcGdvZmYgYXMgYSBzZWxlY3RvciBmb3JjZXMgdXMgdG8gdXNlIHRoaXMgdW51c3VhbAogCQkgKiBhZGRyZXNzaW5nIHNjaGVtZS4KIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLQotCQkJCQkJCQl2bWEtPnZtX3N0YXJ0OwotCQl1bnNpZ25lZCBsb25nIGJhZGRyID0gbWFwLT5vZmZzZXQgKyBvZmZzZXQ7CisJCXJlc291cmNlX3NpemVfdCBvZmZzZXQgPSAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcyAtCisJCQl2bWEtPnZtX3N0YXJ0OworCQlyZXNvdXJjZV9zaXplX3QgYmFkZHIgPSBtYXAtPm9mZnNldCArIG9mZnNldDsKIAkJc3RydWN0IGRybV9hZ3BfbWVtICphZ3BtZW07CiAJCXN0cnVjdCBwYWdlICpwYWdlOwogCkBAIC0xNDksOCArMTQ5LDEwIEBACiAJCXZtZi0+cGFnZSA9IHBhZ2U7CiAKIAkJRFJNX0RFQlVHCi0JCSAgICAoImJhZGRyID0gMHglbHggcGFnZSA9IDB4JXAsIG9mZnNldCA9IDB4JWx4LCBjb3VudD0lZFxuIiwKLQkJICAgICBiYWRkciwgX192YShhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5W29mZnNldF0pLCBvZmZzZXQsCisJCSAgICAoImJhZGRyID0gMHglbGx4IHBhZ2UgPSAweCVwLCBvZmZzZXQgPSAweCVsbHgsIGNvdW50PSVkXG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmFkZHIsCisJCSAgICAgX192YShhZ3BtZW0tPm1lbW9yeS0+bWVtb3J5W29mZnNldF0pLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0LAogCQkgICAgIHBhZ2VfY291bnQocGFnZSkpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNzYsNyArMTc4LDcgQEAKICAqLwogc3RhdGljIGludCBkcm1fZG9fdm1fc2htX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gKHN0cnVjdCBkcm1fbWFwICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0yMDksNyArMjExLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgZHJtX3ZtYV9lbnRyeSAqcHQsICp0ZW1wOwotCXN0cnVjdCBkcm1fbWFwICptYXA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcDsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3Q7CiAJaW50IGZvdW5kX21hcHMgPSAwOwogCkBAIC0zMjIsNyArMzI0LDcgQEAKICAqLwogc3RhdGljIGludCBkcm1fZG9fdm1fc2dfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewotCXN0cnVjdCBkcm1fbWFwICptYXAgPSAoc3RydWN0IGRybV9tYXAgKikgdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwogCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7CkBAIC01MTIsMTQgKzUxNCwxNCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9tYXBfb2ZzKHN0cnVjdCBkcm1fbWFwICogbWFwKQorcmVzb3VyY2Vfc2l6ZV90IGRybV9jb3JlX2dldF9tYXBfb2ZzKHN0cnVjdCBkcm1fbG9jYWxfbWFwICogbWFwKQogewogCXJldHVybiBtYXAtPm9mZnNldDsKIH0KIAogRVhQT1JUX1NZTUJPTChkcm1fY29yZV9nZXRfbWFwX29mcyk7CiAKLXVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3Jlc291cmNlX3NpemVfdCBkcm1fY29yZV9nZXRfcmVnX29mcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogI2lmZGVmIF9fYWxwaGFfXwogCXJldHVybiBkZXYtPmhvc2UtPmRlbnNlX21lbV9iYXNlIC0gZGV2LT5ob3NlLT5tZW1fc3BhY2UtPnN0YXJ0OwpAQCAtNTQ3LDggKzU0OSw4IEBACiB7CiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fbWFwICptYXAgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gTlVMTDsKKwlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKIAogCURSTV9ERUJVRygic3RhcnQgPSAweCVseCwgZW5kID0gMHglbHgsIHBhZ2Ugb2Zmc2V0ID0gMHglbHhcbiIsCkBAIC02MjMsOSArNjI1LDkgQEAKIAkJCQkgICAgICAgdm1hLT52bV9wYWdlX3Byb3QpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCURSTV9ERUJVRygiICAgVHlwZSA9ICVkOyBzdGFydCA9IDB4JWx4LCBlbmQgPSAweCVseCwiCi0JCQkgICIgb2Zmc2V0ID0gMHglbHhcbiIsCisJCQkgICIgb2Zmc2V0ID0gMHglbGx4XG4iLAogCQkJICBtYXAtPnR5cGUsCi0JCQkgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBtYXAtPm9mZnNldCArIG9mZnNldCk7CisJCQkgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodW5zaWduZWQgbG9uZyBsb25nKShtYXAtPm9mZnNldCArIG9mZnNldCkpOwogCQl2bWEtPnZtX29wcyA9ICZkcm1fdm1fb3BzOwogCQlicmVhazsKIAljYXNlIF9EUk1fQ09OU0lTVEVOVDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oCmluZGV4IDAxMTg4NDkuLjIxZTI2OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuaApAQCAtNzcsOCArNzcsOCBAQAogfSBkcm1faTgxMF9yaW5nX2J1ZmZlcl90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTgxMF9wcml2YXRlIHsKLQlzdHJ1Y3QgZHJtX21hcCAqc2FyZWFfbWFwOwotCXN0cnVjdCBkcm1fbWFwICptbWlvX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqc2FyZWFfbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptbWlvX21hcDsKIAogCWRybV9pODEwX3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k4MTBfcmluZ19idWZmZXJfdCByaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmgKaW5kZXggYjViZjhjYy4uZGE4MmFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5oCkBAIC04NCw4ICs4NCw4IEBACiB9IGRybV9pODMwX3JpbmdfYnVmZmVyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGRybV9pODMwX3ByaXZhdGUgewotCXN0cnVjdCBkcm1fbWFwICpzYXJlYV9tYXA7Ci0Jc3RydWN0IGRybV9tYXAgKm1taW9fbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICpzYXJlYV9tYXA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1taW9fbWFwOwogCiAJZHJtX2k4MzBfc2FyZWFfdCAqc2FyZWFfcHJpdjsKIAlkcm1faTgzMF9yaW5nX2J1ZmZlcl90IHJpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBhODE4YjM3Li5jMjNiM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCSAqIFNvbWUgb2YgdGhlIHByZWFsbG9jYXRlZCBzcGFjZSBpcyB0YWtlbiBieSB0aGUgR1RUCiAJICogYW5kIHBvcHVwLiAgR1RUIGlzIDFLIHBlciBNQiBvZiBhcGVydHVyZSBzaXplLCBhbmQgcG9wdXAgaXMgNEsuCiAJICovCi0JaWYgKElTX0c0WChkZXYpKQorCWlmIChJU19HNFgoZGV2KSB8fCBJU19JR0QoZGV2KSkKIAkJb3ZlcmhlYWQgPSA0MDk2OwogCWVsc2UKIAkJb3ZlcmhlYWQgPSAoKmFwZXJ0dXJlX3NpemUgLyAxMDI0KSArIDQwOTY7CkBAIC0xMDMwLDEzICsxMDMwLDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKIAotCS8qIEZJWE1FOiByZS1hZGQgaG90cGx1ZyBzdXBwb3J0ICovCi0jaWYgMAotCXJldCA9IGRybV9ob3RwbHVnX2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKLSNlbmRpZgotCiAJLyogQWx3YXlzIHNhZmUgaW4gdGhlIG1vZGUgc2V0dGluZyBjYXNlLiAqLwogCS8qIEZJWE1FOiBkbyBwcmUvcG9zdC1tb2RlIHNldCBzdHVmZiBpbiBjb3JlIEtNUyBjb2RlICovCiAJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKQEAgLTEwNDksNyArMTA0Miw3IEBACiAKIAlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKIAotCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2LCBmYWxzZSk7CisJZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhkZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEwOTksNyArMTA5Miw3IEBACiBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOworCXJlc291cmNlX3NpemVfdCBiYXNlLCBzaXplOwogCWludCByZXQgPSAwLCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCiAJLyogaTkxNSBoYXMgNCBtb3JlIGNvdW50ZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBkY2I5MWY1Li4yYzAxNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQyLDYgKzQyLDggQEAKIHVuc2lnbmVkIGludCBpOTE1X2ZicGVyY3J0YyA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZmJwZXJjcnRjLCBpOTE1X2ZicGVyY3J0YywgaW50LCAwNDAwKTsKIAorc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCWk5MTVfUENJX0lEUwogfTsKQEAgLTExNyw2ICsxMTksMzYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9fZGV2aW5pdAoraTkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGRybV9nZXRfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRybV9wdXRfZGV2KGRldik7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfc3VzcGVuZChkZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludAoraTkxNV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gaTkxNV9yZXN1bWUoZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpOTE1X2dlbV92bV9vcHMgPSB7CiAJLmZhdWx0ID0gaTkxNV9nZW1fZmF1bHQsCiAJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCkBAIC0xNzQsNiArMjA2LDEyIEBACiAJLnBjaV9kcml2ZXIgPSB7CiAJCSAubmFtZSA9IERSSVZFUl9OQU1FLAogCQkgLmlkX3RhYmxlID0gcGNpaWRsaXN0LAorCQkgLnByb2JlID0gaTkxNV9wY2lfcHJvYmUsCisJCSAucmVtb3ZlID0gaTkxNV9wY2lfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCQkgLnJlc3VtZSA9IGk5MTVfcGNpX3Jlc3VtZSwKKwkJIC5zdXNwZW5kID0gaTkxNV9wY2lfc3VzcGVuZCwKKyNlbmRpZgogCX0sCiAKIAkubmFtZSA9IERSSVZFUl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggYzE2ODVkMC4uMzE3YjEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC0xNTksNiArMTU5LDkgQEAKIAl1MzIgaXJxX21hc2tfcmVnOwogCXUzMiBwaXBlc3RhdFsyXTsKIAorCXUzMiBob3RwbHVnX3N1cHBvcnRlZF9tYXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBob3RwbHVnX3dvcms7CisKIAlpbnQgdGV4X2xydV9sb2dfZ3JhbnVsYXJpdHk7CiAJaW50IGFsbG93X2JhdGNoYnVmZmVyOwogCXN0cnVjdCBtZW1fYmxvY2sgKmFncF9oZWFwOwpAQCAtMjk3LDYgKzMwMCw3IEBACiAJCSAqCiAJCSAqIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIGJ1ZmZlciB3aGlsZSBvbiB0aGlzIGxpc3QuCiAJCSAqLworCQlzcGlubG9ja190IGFjdGl2ZV9saXN0X2xvY2s7CiAJCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CiAKIAkJLyoqCkBAIC04MTAsNiArODE0LDcgQEAKICNkZWZpbmUgSEFTXzEyOF9CWVRFX1lfVElMSU5HKGRldikgKElTX0k5WFgoZGV2KSAmJiAhKElTX0k5MTVHKGRldikgfHwgXAogCQkJCQkJICAgICAgSVNfSTkxNUdNKGRldikpKQogI2RlZmluZSBTVVBQT1JUU19JTlRFR1JBVEVEX0hETUkoZGV2KQkoSVNfRzRYKGRldikpCisjZGVmaW5lIEk5MTVfSEFTX0hPVFBMVUcoZGV2KSAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1RyhkZXYpKQogCiAjZGVmaW5lIFBSSU1BUllfUklOR0JVRkZFUl9TSVpFICAgICAgICAgKDEyOCoxMDI0KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBiNTJjYmEwLi4xNDQ5YjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTQ0NiwxMyArNDQ2LDE2IEBACiAJCSBpbnQgbGVuZ3RoKQogewogCWNoYXIgX19pb21lbSAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyB1bndyaXR0ZW47CiAKIAl2YWRkciA9IGttYXBfYXRvbWljKHBhZ2VzW3BhZ2VfYmFzZSA+PiBQQUdFX1NISUZUXSwgS01fVVNFUjApOwogCWlmICh2YWRkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyICsgcGFnZV9vZmZzZXQsIGRhdGEsIGxlbmd0aCk7CisJdW53cml0dGVuID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2YWRkciArIHBhZ2Vfb2Zmc2V0LCBkYXRhLCBsZW5ndGgpOwogCWt1bm1hcF9hdG9taWModmFkZHIsIEtNX1VTRVIwKTsKIAorCWlmICh1bndyaXR0ZW4pCisJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCkBAIC0xMDY5LDYgKzEwNzIsNyBAQAogCWNhc2UgLUVBR0FJTjoKIAkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAljYXNlIC1FRkFVTFQ6CisJY2FzZSAtRUlOVkFMOgogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCWRlZmF1bHQ6CiAJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CkBAIC0xMDkzLDcgKzEwOTcsNyBAQAogCXN0cnVjdCBkcm1fZ2VtX21tICptbSA9IGRldi0+bW1fcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCWludCByZXQgPSAwOwogCiAJLyogU2V0IHRoZSBvYmplY3QgdXAgZm9yIG1tYXAnaW5nICovCkBAIC0xMzIxLDggKzEzMjUsMTAgQEAKIAkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CiAJfQogCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKIAkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gc2Vxbm87CiB9CiAKQEAgLTE0NjQsNiArMTQ3MCw3IEBACiAJLyogTW92ZSBhbnkgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGxpc3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKIAkgKiBieSB0aGUgcmluZ2J1ZmZlciB0byB0aGUgZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgYXMgYXBwcm9wcmlhdGUuCiAJICovCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0xNDc4LDcgKzE0ODUsNyBAQAogCQkgKiB0aGlzIHNlcW5vLgogCQkgKi8KIAkJaWYgKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyAhPSByZXF1ZXN0LT5zZXFubykKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCiAjaWYgV0FUQ0hfTFJVCiAJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCkBAIC0xNDkwLDYgKzE0OTcsOCBAQAogCQllbHNlCiAJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwogCX0KK291dDoKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogfQogCiAvKioKQEAgLTE5ODcsMjAgKzE5OTYsMjMgQEAKIAlpbnQgcmVnbnVtID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKIAl1aW50MzJfdCB2YWw7CiAJdWludDMyX3QgcGl0Y2hfdmFsOworCXVpbnQzMl90IGZlbmNlX3NpemVfYml0czsKIAotCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKSB8fAorCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKSB8fAogCSAgICAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAob2JqLT5zaXplIC0gMSkpKSB7Ci0JCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCAxTSBvciBzaXplIGFsaWduZWRcbiIsCisJCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCA1MTJLIG9yIHNpemUgYWxpZ25lZFxuIiwKIAkJICAgICBfX2Z1bmNfXywgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcGl0Y2hfdmFsID0gKG9ial9wcml2LT5zdHJpZGUgLyAxMjgpIC0gMTsKLQorCVdBUk5fT04ocGl0Y2hfdmFsICYgfjB4MDAwMDAwMGYpOwogCXZhbCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJdmFsIHw9IDEgPDwgSTgzMF9GRU5DRV9USUxJTkdfWV9TSElGVDsKLQl2YWwgfD0gSTgzMF9GRU5DRV9TSVpFX0JJVFMob2JqLT5zaXplKTsKKwlmZW5jZV9zaXplX2JpdHMgPSBJODMwX0ZFTkNFX1NJWkVfQklUUyhvYmotPnNpemUpOworCVdBUk5fT04oZmVuY2Vfc2l6ZV9iaXRzICYgfjB4MDAwMDBmMDApOworCXZhbCB8PSBmZW5jZV9zaXplX2JpdHM7CiAJdmFsIHw9IHBpdGNoX3ZhbCA8PCBJODMwX0ZFTkNFX1BJVENIX1NISUZUOwogCXZhbCB8PSBJODMwX0ZFTkNFX1JFR19WQUxJRDsKIApAQCAtMjE5MSw3ICsyMjAzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoYWxpZ25tZW50ID09IDApCiAJCWFsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KG9iaik7Ci0JaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCWlmIChhbGlnbm1lbnQgJiAoaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQob2JqKSAtIDEpKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgYWxpZ25tZW50IHJlcXVlc3RlZCAldVxuIiwgYWxpZ25tZW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjIwOCwxNSArMjIyMCwyMCBAQAogCQl9CiAJfQogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJYm9vbCBsaXN0c19lbXB0eTsKKwogCQkvKiBJZiB0aGUgZ3R0IGlzIGVtcHR5IGFuZCB3ZSdyZSBzdGlsbCBoYXZpbmcgdHJvdWJsZQogCQkgKiBmaXR0aW5nIG91ciBvYmplY3QgaW4sIHdlJ3JlIG91dCBvZiBtZW1vcnkuCiAJCSAqLwogI2lmIFdBVENIX0xSVQogCQlEUk1fSU5GTygiJXM6IEdUVCBmdWxsLCBldmljdGluZyBzb21ldGhpbmdcbiIsIF9fZnVuY19fKTsKICNlbmRpZgotCQlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpICYmCi0JCSAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkgJiYKLQkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisJCWxpc3RzX2VtcHR5ID0gKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOworCQlpZiAobGlzdHNfZW1wdHkpIHsKIAkJCURSTV9FUlJPUigiR1RUIGZ1bGwsIGJ1dCBMUlUgbGlzdCBlbXB0eVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMzY3Miw2ICszNjg5LDcgQEAKIAogCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJaWYgKCFkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CiAJCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQogCQkgKiB3YWl0ZWQgZm9yIGEgc2VxdWVuY2UgaGlnaGVyIHRoYW4gYW55IHBlbmRpbmcgZXhlY2J1ZmZlcgpAQCAtMzY5OCw2ICszNzE2LDcgQEAKIAkJb2JqX3ByaXYtPm9iai0+d3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKIAkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqX3ByaXYtPm9iaik7CiAJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0zOTQ2LDcgKzM5NjUsMTAgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKKwlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOwpAQCAtMzk5MCw2ICs0MDEyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKaW5kZXggMTMxYzA4OC4uOGQwYjk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0xMDUsMTIgKzEwNSwxNCBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdjsKIAogCURSTV9JTkZPKCJhY3RpdmUgbGlzdCAlcyB7XG4iLCB3aGVyZSk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKIAkJCSAgICBsaXN0KQogCXsKIAkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCiAJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKIAl9CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlEUk1fSU5GTygifVxuIik7CiAJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwppbmRleCA0NTVlYzk3Li5hMWFjMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCkBAIC02OSwxMCArNjksMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3BpbmxvY2tfdCAqbG9jayA9IE5VTEw7CiAKIAlzd2l0Y2ggKGxpc3QpIHsKIAljYXNlIEFDVElWRV9MSVNUOgogCQlzZXFfcHJpbnRmKG0sICJBY3RpdmU6XG4iKTsKKwkJbG9jayA9ICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jazsKKwkJc3Bpbl9sb2NrKGxvY2spOwogCQloZWFkID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdDsKIAkJYnJlYWs7CiAJY2FzZSBJTkFDVElWRV9MSVNUOgpAQCAtMTA0LDYgKzEwNyw5IEBACiAJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZFxuIiwgb2JqX3ByaXYtPmZlbmNlX3JlZyk7CiAJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQorCisJaWYgKGxvY2spCisJICAgIHNwaW5fdW5sb2NrKGxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDRjY2UxYWUuLjZiZTNmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0yMTYsNiArMjE2LDIyIEBACiAJZWxzZQogCQl0aWxlX3dpZHRoID0gNTEyOwogCisJLyogY2hlY2sgbWF4aW11bSBzdHJpZGUgJiBvYmplY3Qgc2l6ZSAqLworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCS8qIGk5NjUgc3RvcmVzIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgZ3R0IG1hcHBpbmcgaW4gdGhlIGZlbmNlCisJCSAqIHJlZywgc28gZG9udCBib3RoZXIgdG8gY2hlY2sgdGhlIHNpemUgKi8KKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk5NjVfRkVOQ0VfTUFYX1BJVENIX1ZBTCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgeworCQlpZiAoc3RyaWRlIC8gdGlsZV93aWR0aCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAyMCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAxOSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJLyogOTY1KyBqdXN0IG5lZWRzIG11bHRpcGxlcyBvZiB0aWxlIHdpZHRoICovCiAJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJaWYgKHN0cmlkZSAmICh0aWxlX3dpZHRoIC0gMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4N2I2YjYwLi5lZTdjZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTQ4LDEwICs0OCw2IEBACiAvKiogSW50ZXJydXB0cyB0aGF0IHdlIG1hc2sgYW5kIHVubWFzayBhdCBydW50aW1lLiAqLwogI2RlZmluZSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfVkFSIChJOTE1X1VTRVJfSU5URVJSVVBUKQogCi0vKiogVGhlc2UgYXJlIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KLSNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVggfCBcCi0JCQkJICAgIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVIpCi0KICNkZWZpbmUgSTkxNV9QSVBFX1ZCTEFOS19TVEFUVVMJKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfFwKIAkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUykKIApAQCAtMTg3LDYgKzE4MywxOSBAQAogCXJldHVybiBJOTE1X1JFQUQocmVnKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBob3RwbHVnIGV2ZW50cyBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBwcm9wZXIuCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBjb250YWluZXJfb2Yod29yaywgZHJtX2k5MTVfcHJpdmF0ZV90LAorCQkJCQkJICAgIGhvdHBsdWdfd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisKKwkvKiBKdXN0IGZpcmUgb2ZmIGEgdWV2ZW50IGFuZCBsZXQgdXNlcnNwYWNlIHRlbGwgdXMgd2hhdCB0byBkbyAqLworCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldik7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKQEAgLTI0NCw2ICsyNTMsMjAgQEAKIAogCQlyZXQgPSBJUlFfSEFORExFRDsKIAorCQkvKiBDb25zdW1lIHBvcnQuICBUaGVuIGNsZWFyIElJUiBvciB3ZSdsbCBtaXNzIGV2ZW50cyAqLworCQlpZiAoKEk5MTVfSEFTX0hPVFBMVUcoZGV2KSkgJiYKKwkJICAgIChpaXIgJiBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpKSB7CisJCQl1MzIgaG90cGx1Z19zdGF0dXMgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpOworCisJCQlEUk1fREVCVUcoImhvdHBsdWcgZXZlbnQgcmVjZWl2ZWQsIHN0YXQgMHglMDh4XG4iLAorCQkJCSAgaG90cGx1Z19zdGF0dXMpOworCQkJaWYgKGhvdHBsdWdfc3RhdHVzICYgZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2spCisJCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29yayk7CisKKwkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsIGhvdHBsdWdfc3RhdHVzKTsKKwkJCUk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCX0KKwogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCiAKQEAgLTUyOCwxNyArNTUxLDI0IEBACiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkLCAwKTsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKIAlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgMCk7CiAJSTkxNV9XUklURShQSVBFQlNUQVQsIDApOwogCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKIAlJOTE1X1dSSVRFKElFUiwgMHgwKTsKIAkodm9pZCkgSTkxNV9SRUFEKElFUik7CisJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Z193b3JrLCBpOTE1X2hvdHBsdWdfd29ya19mdW5jKTsKIH0KIAogaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGVuYWJsZV9tYXNrID0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX0ZJWCB8IEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVI7CiAKIAlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKIApAQCAtNTUwLDEzICs1ODAsMzUgQEAKIAlkZXZfcHJpdi0+cGlwZXN0YXRbMF0gPSAwOwogCWRldl9wcml2LT5waXBlc3RhdFsxXSA9IDA7CiAKKwlpZiAoSTkxNV9IQVNfSE9UUExVRyhkZXYpKSB7CisJCXUzMiBob3RwbHVnX2VuID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisKKwkJLyogTGVhdmUgb3RoZXIgYml0cyBhbG9uZSAqLworCQlob3RwbHVnX2VuIHw9IEhPVFBMVUdfRU5fTUFTSzsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIGhvdHBsdWdfZW4pOworCisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrID0gQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUyB8CisJCQlUVl9IT1RQTFVHX0lOVF9TVEFUVVMgfCBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTOworCQlpZiAoSVNfRzRYKGRldikpIHsKKwkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9CisJCQkJSERNSUJfSE9UUExVR19JTlRfU1RBVFVTIHwKKwkJCQlIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJCUhETUlEX0hPVFBMVUdfSU5UX1NUQVRVUzsKKwkJfQorCQkvKiBFbmFibGUgaW4gSUVSLi4uICovCisJCWVuYWJsZV9tYXNrIHw9IEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKKwkJLyogYW5kIHVubWFzayBpbiBJTVIgKi8KKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpOworCX0KKwogCS8qIERpc2FibGUgcGlwZSBpbnRlcnJ1cHQgZW5hYmxlcywgY2xlYXIgcGVuZGluZyBwaXBlIHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoUElQRUFTVEFULCBJOTE1X1JFQUQoUElQRUFTVEFUKSAmIDB4ODAwMGZmZmYpOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCBJOTE1X1JFQUQoUElQRUJTVEFUKSAmIDB4ODAwMGZmZmYpOwogCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoSUlSLCBJOTE1X1JFQUQoSUlSKSk7CiAKLQlJOTE1X1dSSVRFKElFUiwgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0spOworCUk5MTVfV1JJVEUoSUVSLCBlbmFibGVfbWFzayk7CiAJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOwogCSh2b2lkKSBJOTE1X1JFQUQoSUVSKTsKIApAQCAtNTc1LDYgKzYyNywxMSBAQAogCiAJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhmZmZmZmZmZik7CiAJSTkxNV9XUklURShQSVBFQVNUQVQsIDApOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDM3N2NjNTguLmU4MDViNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMTkwLDYgKzE5MCw4IEBACiAjZGVmaW5lICAgSTgzMF9GRU5DRV9TSVpFX0JJVFMoc2l6ZSkJKChmZnMoKHNpemUpID4+IDE5KSAtIDEpIDw8IDgpCiAjZGVmaW5lICAgSTgzMF9GRU5DRV9QSVRDSF9TSElGVAk0CiAjZGVmaW5lICAgSTgzMF9GRU5DRV9SRUdfVkFMSUQJCSgxPDwwKQorI2RlZmluZSAgIEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTAkweDEwCisjZGVmaW5lICAgSTgzMF9GRU5DRV9NQVhfU0laRV9WQUwJKDE8PDgpCiAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NUQVJUX01BU0sJCTB4MGZmMDAwMDAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NJWkVfQklUUyhzaXplKQkoKGZmcygoc2l6ZSkgPj4gMjApIC0gMSkgPDwgOCkKQEAgLTE5OCw2ICsyMDAsNyBAQAogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQJMgogI2RlZmluZSAgIEk5NjVfRkVOQ0VfVElMSU5HX1lfU0hJRlQJMQogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUkVHX1ZBTElECQkoMTw8MCkKKyNkZWZpbmUgICBJOTY1X0ZFTkNFX01BWF9QSVRDSF9WQUwJMHgwNDAwCiAKIC8qCiAgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncwpAQCAtNjQ4LDYgKzY1MSwxNCBAQAogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV8zMjVNVgkoMCA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV80NzVNVgkoMSA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19NQVNLCQkJKDB4M2ZjKSAvKiBCaXRzIDktMiAqLworI2RlZmluZSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLCQkJMHhmZmZmZmUxZgorI2RlZmluZSBIT1RQTFVHX0VOX01BU0sgKEhETUlCX0hPVFBMVUdfSU5UX0VOIHwgXAorCQkJIEhETUlDX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgSERNSURfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBTRFZPQl9IT1RQTFVHX0lOVF9FTiB8CSAgXAorCQkJIFNEVk9DX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgVFZfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBDUlRfSE9UUExVR19JTlRfRU4pCiAKIAogI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDJiNmQ0NDMuLjliZGQ5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAl0ZW1wID0gSTkxNV9SRUFEKEFEUEEpOwogCXRlbXAgJj0gfihBRFBBX0hTWU5DX0NOVExfRElTQUJMRSB8IEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFKTsKLQl0ZW1wICY9IH5BRFBBX0RBQ19FTkFCTEU7CisJdGVtcCB8PSBBRFBBX0RBQ19FTkFCTEU7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTE1OCw3ICsxNTgsNyBAQAogCWVsc2UKIAkJdHJpZXMgPSAxOwogCWhvdHBsdWdfZW4gPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKLQlob3RwbHVnX2VuICY9IH4oQ1JUX0hPVFBMVUdfTUFTSyk7CisJaG90cGx1Z19lbiAmPSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLOwogCWhvdHBsdWdfZW4gfD0gQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUOwogCiAJaWYgKElTX0dNNDUoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBkOWM1MGZmLi42NDc3M2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC02MzYsNyArNjM2LDcgQEAKIGludGVsX3dhaXRfZm9yX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCS8qIFdhaXQgZm9yIDIwbXMsIGkuZS4gb25lIGN5Y2xlIGF0IDUwaHouICovCi0JdWRlbGF5KDIwMDAwKTsKKwltZGVsYXkoMjApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTA2LDYgKzExMDYsMjYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU0RWTyBUViBoYXMgZml4ZWQgUExMIHZhbHVlcyBkZXBlbmQgb24gaXRzIGNsb2NrIHJhbmdlLAorCSAgIHRoaXMgbWlycm9ycyB2YmlvcyBzZXR0aW5nLiAqLworCWlmIChpc19zZHZvICYmIGlzX3R2KSB7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxMDAwMDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8IDE0MDUwMCkgeworCQkJY2xvY2sucDEgPSAyOworCQkJY2xvY2sucDIgPSAxMDsKKwkJCWNsb2NrLm4gPSAzOworCQkJY2xvY2subTEgPSAxNjsKKwkJCWNsb2NrLm0yID0gODsKKwkJfSBlbHNlIGlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxNDA1MDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8PSAyMDAwMDApIHsKKwkJCWNsb2NrLnAxID0gMTsKKwkJCWNsb2NrLnAyID0gMTA7CisJCQljbG9jay5uID0gNjsKKwkJCWNsb2NrLm0xID0gMTI7CisJCQljbG9jay5tMiA9IDg7CisJCX0KKwl9CisKIAlpZiAoSVNfSUdEKGRldikpCiAJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKaW5kZXggZTQyMDE5ZS4uMDdkN2VjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCkBAIC03Niw2ICs3Niw3IEBACiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmaW50ZWxfb3V0cHV0LT5iYXNlLAogCQkJCQkJCWVkaWQpOwogCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJmludGVsX291dHB1dC0+YmFzZSwgZWRpZCk7CisJCWludGVsX291dHB1dC0+YmFzZS5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOwogCQlrZnJlZShlZGlkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCBmYmU2ZjM5Li43YjMxZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0yNzMsMjAgKzI3MywyMCBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBXOiAlMDJYICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpLCBjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogVzogJTAyWCAiLCBTRFZPX05BTUUoc2R2b19wcml2KSwgY21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnc19sZW47IGkrKykKLQkJcHJpbnRrKCIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CiAJZm9yICg7IGkgPCA4OyBpKyspCi0JCXByaW50aygiICAgIik7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNkdm9fY21kX25hbWVzKSAvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSk7IGkrKykgewogCQlpZiAoY21kID09IHNkdm9fY21kX25hbWVzW2ldLmNtZCkgewotCQkJcHJpbnRrKCIoJXMpIiwgc2R2b19jbWRfbmFtZXNbaV0ubmFtZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiKCVzKSIsIHNkdm9fY21kX25hbWVzW2ldLm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGkgPT0gc2l6ZW9mKHNkdm9fY21kX25hbWVzKS8gc2l6ZW9mKHNkdm9fY21kX25hbWVzWzBdKSkKLQkJcHJpbnRrKCIoJTAyWCkiLGNtZCk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKCUwMlgpIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKIH0KICNlbHNlCiAjZGVmaW5lIGludGVsX3Nkdm9fZGVidWdfd3JpdGUobywgYywgYSwgbCkKQEAgLTMyMywxNyArMzIzLDE4IEBACiAJCQkJICAgICAgdTggc3RhdHVzKQogewogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CiAJZm9yIChpID0gMDsgaSA8IHJlc3BvbnNlX2xlbjsgaSsrKQotCQlwcmludGsoIiUwMlggIiwgKCh1OCAqKXJlc3BvbnNlKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilyZXNwb25zZSlbaV0pOwogCWZvciAoOyBpIDwgODsgaSsrKQotCQlwcmludGsoIiAgICIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIik7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKLQkJcHJpbnRrKCIoJXMpIiwgY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKLQkJcHJpbnRrKCIoPz8/ICVkKSIsIHN0YXR1cyk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKD8/PyAlZCkiLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwogfQogI2Vsc2UKICNkZWZpbmUgaW50ZWxfc2R2b19kZWJ1Z19yZXNwb25zZShvLCByLCBsLCBzKQpAQCAtNTg4LDkgKzU4OSwxMiBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByZWZlcnJlZF9pbnB1dF90aW1pbmdfYXJncyBhcmdzOwogCXVpbnQ4X3Qgc3RhdHVzOwogCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWFyZ3MuY2xvY2sgPSBjbG9jazsKIAlhcmdzLndpZHRoID0gd2lkdGg7CiAJYXJncy5oZWlnaHQgPSBoZWlnaHQ7CisJYXJncy5pbnRlcmxhY2UgPSAwOworCWFyZ3Muc2NhbGVkID0gMDsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0NSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HLAogCQkJICAgICAmYXJncywgc2l6ZW9mKGFyZ3MpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKQEAgLTY4Myw3ICs2ODcsNyBAQAogCWR0ZC0+cGFydDEudl9oaWdoID0gKCgoaGVpZ2h0ID4+IDgpICYgMHhmKSA8PCA0KSB8CiAJCSgodl9ibGFua19sZW4gPj4gOCkgJiAweGYpOwogCi0JZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmID0gaF9zeW5jX29mZnNldDsKKwlkdGQtPnBhcnQyLmhfc3luY19vZmYgPSBoX3N5bmNfb2Zmc2V0ICYgMHhmZjsKIAlkdGQtPnBhcnQyLmhfc3luY193aWR0aCA9IGhfc3luY19sZW4gJiAweGZmOwogCWR0ZC0+cGFydDIudl9zeW5jX29mZl93aWR0aCA9ICh2X3N5bmNfb2Zmc2V0ICYgMHhmKSA8PCA0IHwKIAkJKHZfc3luY19sZW4gJiAweGYpOwpAQCAtNzA1LDI3ICs3MDksMTAgQEAKIHN0YXRpYyB2b2lkIGludGVsX3Nkdm9fZ2V0X21vZGVfZnJvbV9kdGQoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiBtb2RlLAogCQkJCQkgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCiB7Ci0JdWludDE2X3Qgd2lkdGgsIGhlaWdodDsKLQl1aW50MTZfdCBoX2JsYW5rX2xlbiwgaF9zeW5jX2xlbiwgdl9ibGFua19sZW4sIHZfc3luY19sZW47Ci0JdWludDE2X3QgaF9zeW5jX29mZnNldCwgdl9zeW5jX29mZnNldDsKLQotCXdpZHRoID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQloZWlnaHQgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OwotCi0JLyogZG8gc29tZSBtb2RlIHRyYW5zbGF0aW9ucyAqLwotCWhfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0JaF9zeW5jX2xlbiA9IG1vZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQotCXZfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX2xlbiA9IG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQotCWhfc3luY19vZmZzZXQgPSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX29mZnNldCA9IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKLQogCW1vZGUtPmhkaXNwbGF5ID0gZHRkLT5wYXJ0MS5oX2FjdGl2ZTsKIAltb2RlLT5oZGlzcGxheSArPSAoKGR0ZC0+cGFydDEuaF9oaWdoID4+IDQpICYgMHgwZikgPDwgODsKIAltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmOwotCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGEwKSA8PCAyOworCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGMwKSA8PCAyOwogCW1vZGUtPmhzeW5jX2VuZCA9IG1vZGUtPmhzeW5jX3N0YXJ0ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfd2lkdGg7CiAJbW9kZS0+aHN5bmNfZW5kICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDMwKSA8PCA0OwogCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0MS5oX2JsYW5rOwpAQCAtNzM1LDcgKzcyMiw3IEBACiAJbW9kZS0+dmRpc3BsYXkgKz0gKChkdGQtPnBhcnQxLnZfaGlnaCA+PiA0KSAmIDB4MGYpIDw8IDg7CiAJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheTsKIAltb2RlLT52c3luY19zdGFydCArPSAoZHRkLT5wYXJ0Mi52X3N5bmNfb2ZmX3dpZHRoID4+IDQpICYgMHhmOwotCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBhKSA8PCAyOworCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBjKSA8PCAyOwogCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IGR0ZC0+cGFydDIudl9zeW5jX29mZl9oaWdoICYgMHhjMDsKIAltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArCiAJCShkdGQtPnBhcnQyLnZfc3luY19vZmZfd2lkdGggJiAweGYpOwpAQCAtNzQ1LDcgKzczMiw3IEBACiAKIAltb2RlLT5jbG9jayA9IGR0ZC0+cGFydDEuY2xvY2sgKiAxMDsKIAotCW1vZGUtPmZsYWdzICY9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwltb2RlLT5mbGFncyAmPSB+KERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpOwogCWlmIChkdGQtPnBhcnQyLmR0ZF9mbGFncyAmIDB4MikKIAkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CiAJaWYgKGR0ZC0+cGFydDIuZHRkX2ZsYWdzICYgMHg0KQpAQCAtOTI0LDYgKzkxMSwyNyBAQAogCQkJCVNEVk9fSEJVRl9UWF9WU1lOQyk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fc2V0X3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgKmZvcm1hdCwgdW5zZXQ7CisJdTggc3RhdHVzOworCisJZm9ybWF0ID0gJnNkdm9fcHJpdi0+dHZfZm9ybWF0OworCW1lbXNldCgmdW5zZXQsIDAsIHNpemVvZih1bnNldCkpOworCWlmIChtZW1jbXAoZm9ybWF0LCAmdW5zZXQsIHNpemVvZigqZm9ybWF0KSkpIHsKKwkJRFJNX0RFQlVHKCIlczogQ2hvb3NpbmcgZGVmYXVsdCBUViBmb3JtYXQgb2YgTlRTQy1NXG4iLAorCQkJCVNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJZm9ybWF0LT5udHNjX20gPSAxOworCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIGZvcm1hdCwKKwkJCQlzaXplb2YoKmZvcm1hdCkpOworCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJCURSTV9ERUJVRygiJXM6IEZhaWxlZCB0byBzZXQgVFYgZm9ybWF0XG4iLAorCQkJCQlTRFZPX05BTUUoc2R2b19wcml2KSk7CisJfQorfQorCiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKQEAgLTk2OCw2ICs5NzYsMTIgQEAKIAkJCQkJCQkgICAgICZpbnB1dF9kdGQpOwogCQkJaW50ZWxfc2R2b19nZXRfbW9kZV9mcm9tX2R0ZChhZGp1c3RlZF9tb2RlLCAmaW5wdXRfZHRkKTsKIAorCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOworCisJCQltb2RlLT5jbG9jayA9IGFkanVzdGVkX21vZGUtPmNsb2NrOworCisJCQlhZGp1c3RlZF9tb2RlLT5jbG9jayAqPQorCQkJCWludGVsX3Nkdm9fZ2V0X3BpeGVsX211bHRpcGxpZXIobW9kZSk7CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KQEAgLTEwMTIsNyArMTAyNiwxMiBAQAogCQlzZHZveCB8PSBTRFZPX0FVRElPX0VOQUJMRTsKIAl9CiAKLQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOworCS8qIFdlIGhhdmUgdHJpZWQgdG8gZ2V0IGlucHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLCBhbmQgZmlsbGVkIGludG8KKwkgICBhZGp1c3RlZF9tb2RlICovCisJaWYgKHNkdm9fcHJpdi0+aXNfdHYpCisJCWludGVsX3Nkdm9fZ2V0X2R0ZF9mcm9tX21vZGUoJmlucHV0X2R0ZCwgYWRqdXN0ZWRfbW9kZSk7CisJZWxzZQorCQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOwogCiAJLyogSWYgaXQncyBhIFRWLCB3ZSBhbHJlYWR5IHNldCB0aGUgb3V0cHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLgogCSAqIE90aGVyd2lzZSwgdGhlIG91dHB1dCB0aW1pbmcgaXMgZXF1YWwgdG8gdGhlIGlucHV0IHRpbWluZy4KQEAgLTEwMjcsNiArMTA0Niw5IEBACiAJLyogU2V0IHRoZSBpbnB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbi4gQXNzdW1lIGFsd2F5cyBpbnB1dCAwLiAqLwogCWludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dChvdXRwdXQsIHRydWUsIGZhbHNlKTsKIAorCWlmIChzZHZvX3ByaXYtPmlzX3R2KQorCQlpbnRlbF9zZHZvX3NldF90dl9mb3JtYXQob3V0cHV0KTsKKwogCS8qIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGludGVsX3Nkdm9fY3JlYXRlX3ByZWZlcnJlZF9pbnB1dF90aW1pbmcoKSB0bwogCSAqIHByb3ZpZGUgdGhlIGRldmljZSB3aXRoIGEgdGltaW5nIGl0IGNhbiBzdXBwb3J0LCBpZiBpdCBzdXBwb3J0cyB0aGF0CiAJICogZmVhdHVyZS4gIEhvd2V2ZXIsIHByZXN1bWFibHkgd2Ugd291bGQgbmVlZCB0byBhZGp1c3QgdGhlIENSVEMgdG8KQEAgLTEzOTUsNyArMTQxNyw3IEBACiBpbnRlbF9zZHZvX2NoZWNrX3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCiB7CiAJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqZGV2X3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQsIHVuc2V0OworCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQ7CiAJdWludDhfdCBzdGF0dXM7CiAKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwpAQCAtMTQwMywxNSArMTQyNSw3IEBACiAJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuOwogCi0JbWVtc2V0KCZ1bnNldCwgMCwgc2l6ZW9mKHVuc2V0KSk7Ci0JaWYgKG1lbWNtcCgmZm9ybWF0LCAmdW5zZXQsIHNpemVvZihmb3JtYXQpKSkgewotCQlEUk1fREVCVUcoIiVzOiBDaG9vc2luZyBkZWZhdWx0IFRWIGZvcm1hdCBvZiBOVFNDLU1cbiIsCi0JCQkgIFNEVk9fTkFNRShkZXZfcHJpdikpOwotCi0JCWZvcm1hdC5udHNjX20gPSB0cnVlOwotCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwotCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKLQl9CisJbWVtY3B5KCZkZXZfcHJpdi0+dHZfZm9ybWF0LCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CiB9CiAKIC8qCkBAIC0xNDIwLDY4ICsxNDM0LDcwIEBACiAgKiBYWFg6IGFsbCA2MEh6IHJlZnJlc2g/CiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNkdm9fdHZfbW9kZXNbXSA9IHsKLQl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTU2ODAsIDMyMSwgMzg0LCA0MTYsCi0JCSAgIDIwMCwgMCwgMjMyLCAyMDEsIDIzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTUsIDMyMCwgMzIxLCAzODQsCisJCSAgIDQxNiwgMCwgMjAwLCAyMDEsIDIzMiwgMjMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNDA4MCwgMzIxLCAzODQsIDQxNiwKLQkJICAgMjQwLCAwLCAyNzIsIDI0MSwgMjczLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNCwgMzIwLCAzMjEsIDM4NCwKKwkJICAgNDE2LCAwLCAyNDAsIDI0MSwgMjcyLCAyNzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwMDgwLCA0MDEsIDQ2NCwgNDk2LAotCQkgICAzMDAsIDAsIDMzMiwgMzAxLCAzMzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwLCA0MDAsIDQwMSwgNDY0LAorCQkgICA0OTYsIDAsIDMwMCwgMzAxLCAzMzIsIDMzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI2NDB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE2OTEzMjgwLCA2NDEsIDcwNCwgNzM2LAotCQkgICAzNTAsIDAsIDM4MiwgMzUxLCAzODMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNjQweDM1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNjkxMywgNjQwLCA2NDEsIDcwNCwKKwkJICAgNzM2LCAwLCAzNTAsIDM1MSwgMzgyLCAzODMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNjQweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxOTEyMTI4MCwgNjQxLCA3MDQsIDczNiwKLQkJICAgNDAwLCAwLCA0MzIsIDQwMSwgNDMzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEsIDY0MCwgNjQxLCA3MDQsCisJCSAgIDczNiwgMCwgNDAwLCA0MDEsIDQzMiwgNDMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEyODAsIDY0MSwgNzA0LCA3MzYsCi0JCSAgIDQwMCwgMCwgNDMyLCA0MDEsIDQzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIyNjU0LCA2NDAsIDY0MSwgNzA0LAorCQkgICA3MzYsIDAsIDQ4MCwgNDgxLCA1MTIsIDUxMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MDR4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI0NjI0MDAwLCA3MDUsIDc2OCwgODAwLAotCQkgICA0ODAsIDAsIDUxMiwgNDgxLCA1MTMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzA0eDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNDYyNCwgNzA0LCA3MDUsIDc2OCwKKwkJICAgODAwLCAwLCA0ODAsIDQ4MSwgNTEyLCA1MTMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzA0eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTIzMjAwMCwgNzA1LCA3NjgsIDgwMCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcwNHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjkyMzIsIDcwNCwgNzA1LCA3NjgsCisJCSAgIDgwMCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHgzNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTg3NTE2ODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDM1MCwgMCwgMzgyLCAzNTEsIDM4MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE4NzUxLCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDM1MCwgMzUxLCAzODIsIDM4MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NDAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIxMTk5NjgwLCA3MjEsIDc4NCwgODE2LAotCQkgICA0MDAsIDAsIDQzMiwgNDAxLCA0MzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTE5OSwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA0MDAsIDQwMSwgNDMyLCA0MzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzIweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNTExNjQ4MCwgNzIxLCA3ODQsIDgxNiwKLQkJICAgNDgwLCAwLCA1MTIsIDQ4MSwgNTEzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcyMHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUxMTYsIDcyMCwgNzIxLCA3ODQsCisJCSAgIDgxNiwgMCwgNDgwLCA0ODEsIDUxMiwgNTEzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHg1NDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjgwNTQwODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDU0MCwgMCwgNTcyLCA1NDEsIDU3MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4NTQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI4MDU0LCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDU0MCwgNTQxLCA1NzIsIDU3MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NTc2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI5ODE2NjQwLCA3MjEsIDc4NCwgODE2LAotCQkgICA1NzYsIDAsIDYwOCwgNTc3LCA2MDksIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTgxNiwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA1NzYsIDU3NywgNjA4LCA2MDksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzY4eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTU3MDU2MCwgNzY5LCA4MzIsIDg2NCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjc2OHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1NzAsIDc2OCwgNzY5LCA4MzIsCisJCSAgIDg2NCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzQwMzAwODAsIDgwMSwgODY0LCA4OTYsCi0JCSAgIDYwMCwgMCwgNjMyLCA2MDEsIDYzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM0MDMwLCA4MDAsIDgwMSwgODY0LAorCQkgICA4OTYsIDAsIDYwMCwgNjAxLCA2MzIsIDYzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI4MzJ4NjI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM2NTgxNzYwLCA4MzMsIDg5NiwgOTI4LAotCQkgICA2MjQsIDAsIDY1NiwgNjI1LCA2NTcsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiODMyeDYyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNjU4MSwgODMyLCA4MzMsIDg5NiwKKwkJICAgOTI4LCAwLCA2MjQsIDYyNSwgNjU2LCA2NTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiOTIweDc2NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0ODcwNzA0MCwgOTIxLCA5ODQsIDEwMTYsCi0JCSAgIDc2NiwgMCwgNzk4LCA3NjcsIDc5OSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI5MjB4NzY2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ4NzA3LCA5MjAsIDkyMSwgOTg0LAorCQkgICAxMDE2LCAwLCA3NjYsIDc2NywgNzk4LCA3OTksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTM4MjcyMDAsIDEwMjUsIDEwODgsIDExMjAsCi0JCSAgIDc2OCwgMCwgODAwLCA3NjksIDgwMSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MzgyNywgMTAyNCwgMTAyNSwgMTA4OCwKKwkJICAgMTEyMCwgMCwgNzY4LCA3NjksIDgwMCwgODAxLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA4NzI2NTkyMCwgMTI4MSwgMTM0NCwgMTM3NiwKLQkJICAgMTAyNCwgMCwgMTA1NiwgMTAyNSwgMTA1NywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMjgweDEwMjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgODcyNjUsIDEyODAsIDEyODEsIDEzNDQsCisJCSAgIDEzNzYsIDAsIDEwMjQsIDEwMjUsIDEwNTYsIDEwNTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2dldF90dl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKm91dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IG91dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcXVlc3QgdHZfcmVzOwogCXVpbnQzMl90IHJlcGx5ID0gMDsKIAl1aW50OF90IHN0YXR1czsKIAlpbnQgaSA9IDA7CkBAIC0xNDkxLDE1ICsxNTA3LDIyIEBACiAJLyogUmVhZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQgcmVzb2x1dGlvbnMgZm9yIHRoZSBzZWxlY3RlZCBUVgogCSAqIGZvcm1hdC4KIAkgKi8KKwltZW1zZXQoJnR2X3JlcywgMCwgc2l6ZW9mKHR2X3JlcykpOworCW1lbWNweSgmdHZfcmVzLCAmc2R2b19wcml2LT50dl9mb3JtYXQsIHNpemVvZih0dl9yZXMpKTsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVCwKLQkJCSAgICAgTlVMTCwgMCk7CisJCQkgICAgICZ0dl9yZXMsIHNpemVvZih0dl9yZXMpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCAmcmVwbHksIDMpOwogCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkdm9fdHZfbW9kZXMpOyBpKyspCi0JCWlmIChyZXBseSAmICgxIDw8IGkpKQotCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsICZzZHZvX3R2X21vZGVzW2ldKTsKKwkJaWYgKHJlcGx5ICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpubW9kZTsKKwkJCW5tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LAorCQkJCQkmc2R2b190dl9tb2Rlc1tpXSk7CisJCQlpZiAobm1vZGUpCisJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5tb2RlKTsKKwkJfQogfQogCiBzdGF0aWMgaW50IGludGVsX3Nkdm9fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCmluZGV4IDExMTdiOWMuLjE5MzkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCkBAIC0xMDAsNiArMTAwLDkgQEAKICAgICB1MTYgY2xvY2s7CiAgICAgdTE2IHdpZHRoOwogICAgIHUxNiBoZWlnaHQ7CisgICAgdTgJaW50ZXJsYWNlOjE7CisgICAgdTgJc2NhbGVkOjE7CisgICAgdTgJcGFkOjY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBJMkMgcmVnaXN0ZXJzIGZvciBTRFZPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCBjZWNhOTQ3Li5kMmMzMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTE1NzAsMzMgKzE1NzAsNDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOwogCWludCByZXQgPSAwOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCiAJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSkKKwlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSAmJgorCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5KQorCQljaGFuZ2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX1JJR0hUXSA9IHZhbDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpCisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSAhPSB2YWwpIHsKIAkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9UT1BdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkKKwkJY2hhbmdlZCA9IHRydWU7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkgJiYKKwkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9CT1RUT01dICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0JPVFRPTV0gPSB2YWw7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CiAJCWlmICh2YWwgPj0gTlVNX1RWX01PREVTKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKCFzdHJjbXAodHZfcHJpdi0+dHZfZm9ybWF0LCB0dl9tb2Rlc1t2YWxdLm5hbWUpKQorCQkJZ290byBvdXQ7CisKIAkJdHZfcHJpdi0+dHZfZm9ybWF0ID0gdHZfbW9kZXNbdmFsXS5uYW1lOwotCQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCQljaGFuZ2VkID0gdHJ1ZTsKIAl9IGVsc2UgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCWlmIChjaGFuZ2VkICYmIGNydGMpCisJCWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwgY3J0Yy0+eCwKKwkJCQljcnRjLT55LCBjcnRjLT5mYik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKaW5kZXggYjQ5YzVmZi4uN2E2YmY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTE0OCw4ICsxNDgsOCBAQAogCQlwcmltYXJ5LT5zcGFjZSA9IGhlYWQgLSB0YWlsOwogCX0KIAotCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsIGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KTsKLQlEUk1fREVCVUcoIiAgIHRhaWwgPSAweCUwNmx4XG4iLCB0YWlsIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CisJRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CisJRFJNX0RFQlVHKCIgICB0YWlsID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKHRhaWwgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CiAKIAltZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXByaW1hcnktPnNwYWNlID0gaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQ7CiAJfQogCi0JRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOwogCURSTV9ERUJVRygiICAgdGFpbCA9IDB4JTA2eFxuIiwgcHJpbWFyeS0+dGFpbCk7CiAJRFJNX0RFQlVHKCIgICB3cmFwID0gJWRcbiIsIHByaW1hcnktPmxhc3Rfd3JhcCk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CkBAIC0yMzksNyArMjM5LDcgQEAKIAlmb3IgKGVudHJ5ID0gZGV2X3ByaXYtPmhlYWQtPm5leHQ7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CiAJCURSTV9JTkZPKCIgICAlcCAgIGlkeD0lMmQgIGFnZT0weCV4IDB4JTA2bHhcbiIsCiAJCQkgZW50cnksIGVudHJ5LT5idWYtPmlkeCwgZW50cnktPmFnZS5oZWFkLAotCQkJIGVudHJ5LT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCQkJICh1bnNpZ25lZCBsb25nKShlbnRyeS0+YWdlLmhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJfQogCURSTV9JTkZPKCJcbiIpOwogfQpAQCAtMzQwLDEwICszNDAsMTAgQEAKIAogCURSTV9ERUJVRygiICAgdGFpbD0weCUwNmx4ICVkXG4iLAogCQkgIHRhaWwtPmFnZS5oZWFkID8KLQkJICB0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgOiAwLAorCQkgICh1bnNpZ25lZCBsb25nKSh0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpIDogMCwKIAkJICB0YWlsLT5hZ2Uud3JhcCk7CiAJRFJNX0RFQlVHKCIgICBoZWFkPTB4JTA2bHggJWRcbiIsCi0JCSAgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIHdyYXApOworCQkgICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCksIHdyYXApOwogCiAJaWYgKFRFU1RfQUdFKCZ0YWlsLT5hZ2UsIGhlYWQsIHdyYXApKSB7CiAJCXByZXYgPSBkZXZfcHJpdi0+dGFpbC0+cHJldjsKQEAgLTM2Niw4ICszNjYsOSBAQAogCWRybV9tZ2FfZnJlZWxpc3RfdCAqaGVhZCwgKmVudHJ5LCAqcHJldjsKIAogCURSTV9ERUJVRygiYWdlPTB4JTA2bHggd3JhcD0lZFxuIiwKLQkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgLQotCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCk7CisJCSAgKHVuc2lnbmVkIGxvbmcpKGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2UuaGVhZCAtCisJCQkJICBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSwKKwkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLndyYXApOwogCiAJZW50cnkgPSBidWZfcHJpdi0+bGlzdF9lbnRyeTsKIAloZWFkID0gZGV2X3ByaXYtPmhlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCmluZGV4IDg4MjU3YzIuLjNkMjY0ZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTEzLDggKzExMyw4IEBACiAJICogXHNhIGRybV9tZ2FfcHJpdmF0ZV90OjptbWlvCiAJICovCiAJLypAeyAqLwotCXUzMiBtbWlvX2Jhc2U7CQkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KLQl1MzIgbW1pb19zaXplOwkJICAgLyoqPCBTaXplIG9mIHRoZSBNTUlPIHJlZ2lvbi4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19iYXNlOwkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19zaXplOwkgICAvKio8IFNpemUgb2YgdGhlIE1NSU8gcmVnaW9uLiAqLwogCS8qQH0gKi8KIAogCXUzMiBjbGVhcl9jbWQ7CkBAIC0zMTcsOCArMzE3LDggQEAKIAkJRFJNX0lORk8oICJcbiIgKTsJCQkJCVwKIAkJRFJNX0lORk8oICIgICB0YWlsPTB4JTA2eCBoZWFkPTB4JTA2bHhcbiIsCQlcCiAJCQkgIGRldl9wcml2LT5wcmltLnRhaWwsCQkJCVwKLQkJCSAgTUdBX1JFQUQoIE1HQV9QUklNQUREUkVTUyApIC0JCQlcCi0JCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKTsJCQlcCisJCQkgICh1bnNpZ25lZCBsb25nKShNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpIC0JXAorCQkJCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsJXAogCX0JCQkJCQkJCVwKIAlpZiAoICF0ZXN0X2JpdCggMCwgJmRldl9wcml2LT5wcmltLndyYXBwZWQgKSApIHsJCVwKIAkJaWYgKCBkZXZfcHJpdi0+cHJpbS5zcGFjZSA8CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCmluZGV4IGMzMWFmYmQuLjMyZGU0Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYwpAQCAtNTI1LDExICs1MjUsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNjZV9yaW5nLT5oYW5kbGUgPSAodm9pZCAqKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OwogCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKIAkJZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlID0KLQkJICAgICh2b2lkICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0OworCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAJfQogCiAjaWYgX19PU19IQVNfQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCBmZWI1MjFlLi41MmNlNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubworcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubyByNjAwX2NwLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IGNhY2UzOTYuLmNiMmU0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKIAorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKwogI2RlZmluZSBSMzAwX1NJTVVMVEFORU9VU19DTElQUkVDVFMJCTQKIAogLyogVmFsdWVzIGZvciBSMzAwX1JFX0NMSVBSRUNUX0NOVEwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY2xpcHJlY3RzCkBAIC0yMDUsNiArMjA3LDEwIEBACiAJQUREX1JBTkdFKDB4NDJDMCwgMik7CiAJQUREX1JBTkdFKFIzMDBfUlNfQ05UTF8wLCAyKTsKIAorCUFERF9SQU5HRShSMzAwX1NVX1JFR19ERVNULCAxKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUzMCkKKwkJQUREX1JBTkdFKFJWNTMwX0ZHX1pCUkVHX0RFU1QsIDEpOworCiAJQUREX1JBTkdFKFIzMDBfU0NfSFlQRVJaLCAyKTsKIAlBRERfUkFOR0UoMHg0M0U4LCAxKTsKIApAQCAtMjMwLDYgKzIzNiw3IEBACiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhQSVRDSCwgMSk7CiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhDTEVBUlZBTFVFLCAxKTsKIAlBRERfUkFOR0UoUjMwMF9aQl9aTUFTS19PRkZTRVQsIDEzKTsKKwlBRERfUkFOR0UoUjMwMF9aQl9aUEFTU19EQVRBLCAyKTsgLyogWkJfWlBBU1NfREFUQSwgWkJfWlBBU1NfQUREUiAqLwogCiAJQUREX1JBTkdFKFIzMDBfVFhfRklMVEVSXzAsIDE2KTsKIAlBRERfUkFOR0UoUjMwMF9UWF9GSUxURVIxXzAsIDE2KTsKQEAgLTkxNyw2ICs5MjQsNyBAQAogewogCXUzMiAqcmVmX2FnZV9iYXNlOwogCXUzMiBpLCBidWZfaWR4LCBoX3BlbmRpbmc7CisJdTY0IHB0cl9hZGRyOwogCVJJTkdfTE9DQUxTOwogCiAJaWYgKGNtZGJ1Zi0+YnVmc3ogPApAQCAtOTMwLDcgKzkzOCw4IEBACiAKIAlkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10rKzsKIAotCXJlZl9hZ2VfYmFzZSA9ICAodTMyICopKHVuc2lnbmVkIGxvbmcpKigodWludDY0X3QgKiljbWRidWYtPmJ1Zik7CisJcHRyX2FkZHIgPSBnZXRfdW5hbGlnbmVkKCh1NjQgKiljbWRidWYtPmJ1Zik7CisJcmVmX2FnZV9iYXNlID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKXB0cl9hZGRyOwogCiAJY21kYnVmLT5idWYgKz0gc2l6ZW9mKHU2NCk7CiAJY21kYnVmLT5idWZzeiAtPSBzaXplb2YodTY0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCBlZTZmODExLi5iZGJjOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC0xNzcwLDQgKzE3NzAsOSBAQAogI2RlZmluZSBSNTAwX1JCM0RfQ09MT1JfQ0xFQVJfVkFMVUVfQVIgIDB4NDZjMAogI2RlZmluZSBSNTAwX1JCM0RfQ09OU1RBTlRfQ09MT1JfQVIgICAgIDB4NGVmOAogCisjZGVmaW5lIFIzMDBfU1VfUkVHX0RFU1QgICAgICAgICAgICAgICAgMHg0MmM4CisjZGVmaW5lIFJWNTMwX0ZHX1pCUkVHX0RFU1QgICAgICAgICAgICAgMHg0YmU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfREFUQSAgICAgICAgICAgICAgMHg0ZjU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfQUREUiAgICAgICAgICAgICAgMHg0ZjVjCisKICNlbmRpZiAvKiBfUjMwMF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzlkMDlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTAsMCArMSwyMjUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorICogICAgIEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCisKKyNpbmNsdWRlICJyNjAwX21pY3JvY29kZS5oIgorCisjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8KKyMgZGVmaW5lIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSwkJKH4oQVRJX1BDSUdBUlRfUEFHRV9TSVpFLTEpKQorCisjZGVmaW5lIFI2MDBfUFRFX1ZBTElEICAgICAoMSA8PCAwKQorI2RlZmluZSBSNjAwX1BURV9TWVNURU0gICAgKDEgPDwgMSkKKyNkZWZpbmUgUjYwMF9QVEVfU05PT1BFRCAgICgxIDw8IDIpCisjZGVmaW5lIFI2MDBfUFRFX1JFQURBQkxFICAoMSA8PCA1KQorI2RlZmluZSBSNjAwX1BURV9XUklURUFCTEUgKDEgPDwgNikKKworLyogTUFYIHZhbHVlcyB1c2VkIGZvciBnZnggaW5pdCAqLworI2RlZmluZSBSNlhYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjZYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjZYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI2WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjZYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSNlhYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI2WFhfTUFYX1NJTURTICAgICAgICAgICAgIDgKKyNkZWZpbmUgUjZYWF9NQVhfU0lNRFNfTUFTSyAgICAgICAgMHhmZgorI2RlZmluZSBSNlhYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI2WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworI2RlZmluZSBSN1hYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjdYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjdYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI3WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjdYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSN1hYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI3WFhfTUFYX1NJTURTICAgICAgICAgICAgIDE2CisjZGVmaW5lIFI3WFhfTUFYX1NJTURTX01BU0sgICAgICAgIDB4ZmZmZgorI2RlZmluZSBSN1hYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI3WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworc3RhdGljIGludCByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgZW50cmllcykKK3sKKwlpbnQgaTsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJaW50IHNsb3RzOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkKKwkJCXNsb3RzID0gKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpCisJCQkJICYgUjcwMF9DTURGSUZPX0FWQUlMX01BU0spOworCQllbHNlCisJCQlzbG90cyA9IChSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKQorCQkJCSAmIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLKTsKKwkJaWYgKHNsb3RzID49IGVudHJpZXMpCisJCQlyZXR1cm4gMDsKKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJRFJNX0lORk8oIndhaXQgZm9yIGZpZm8gZmFpbGVkIHN0YXR1cyA6IDB4JTA4WCAweCUwOFhcbiIsCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKSwKKwkJIFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMyKSk7CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IHI2MDBfZG9fd2FpdF9mb3JfaWRsZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIHJldDsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXQgPSByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYsIDgpOworCWVsc2UKKwkJcmV0ID0gcjYwMF9kb193YWl0X2Zvcl9maWZvKGRldl9wcml2LCAxNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWlmICghKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpICYgUjYwMF9HVUlfQUNUSVZFKSkKKwkJCXJldHVybiAwOworCQlEUk1fVURFTEFZKDEpOworCX0KKwlEUk1fSU5GTygid2FpdCBpZGxlIGZhaWxlZCBzdGF0dXMgOiAweCUwOFggMHglMDhYXG4iLAorCQkgUkFERU9OX1JFQUQoUjYwMF9HUkJNX1NUQVRVUyksCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTMikpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKwordm9pZCByNjAwX3BhZ2VfdGFibGVfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOworCWludCBtYXhfcGFnZXM7CisJaW50IHBhZ2VzOworCWludCBpOworCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJaWYgKGdhcnRfaW5mby0+YnVzX2FkZHIpIHsKKwkJbWF4X3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwkJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKKwkJICA/IGVudHJ5LT5wYWdlcyA6IG1heF9wYWdlczsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgeworCQkJaWYgKCFlbnRyeS0+YnVzYWRkcltpXSkKKwkJCQlicmVhazsKKwkJCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgZW50cnktPmJ1c2FkZHJbaV0sCisJCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJfQorCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKQorCQkJZ2FydF9pbmZvLT5idXNfYWRkciA9IDA7CisJfQorfQorCisvKiBSNjAwIGhhcyBwYWdlIHRhYmxlIHNldHVwICovCitpbnQgcjYwMF9wYWdlX3RhYmxlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9ICZnYXJ0X2luZm8tPm1hcHBpbmc7CisJc3RydWN0IGRybV9zZ19tZW0gKmVudHJ5ID0gZGV2LT5zZzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgajsKKwlpbnQgcGFnZXM7CisJdTY0IHBhZ2VfYmFzZTsKKwlkbWFfYWRkcl90IGVudHJ5X2FkZHI7CisJaW50IG1heF9hdGlfcGFnZXMsIG1heF9yZWFsX3BhZ2VzLCBnYXJ0X2lkeDsKKworCS8qIG9rYXkgcGFnZSB0YWJsZSBpcyBhdmFpbGFibGUgLSBsZXRzIHJvY2sgKi8KKwltYXhfYXRpX3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwltYXhfcmVhbF9wYWdlcyA9IG1heF9hdGlfcGFnZXMgLyAoUEFHRV9TSVpFIC8gQVRJX1BDSUdBUlRfUEFHRV9TSVpFKTsKKworCXBhZ2VzID0gKGVudHJ5LT5wYWdlcyA8PSBtYXhfcmVhbF9wYWdlcykgPworCQllbnRyeS0+cGFnZXMgOiBtYXhfcmVhbF9wYWdlczsKKworCW1lbXNldF9pbygodm9pZCBfX2lvbWVtICopbWFwLT5oYW5kbGUsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTY0KSk7CisKKwlnYXJ0X2lkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJZW50cnktPmJ1c2FkZHJbaV0gPSBwY2lfbWFwX3BhZ2UoZGV2LT5wZGV2LAorCQkJCQkJIGVudHJ5LT5wYWdlbGlzdFtpXSwgMCwKKwkJCQkJCSBQQUdFX1NJWkUsCisJCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKKwkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CisJCQlyNjAwX3BhZ2VfdGFibGVfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZW50cnlfYWRkciA9IGVudHJ5LT5idXNhZGRyW2ldOworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJcGFnZV9iYXNlID0gKHU2NCkgZW50cnlfYWRkciAmIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSzsKKwkJCXBhZ2VfYmFzZSB8PSBSNjAwX1BURV9WQUxJRCB8IFI2MDBfUFRFX1NZU1RFTSB8IFI2MDBfUFRFX1NOT09QRUQ7CisJCQlwYWdlX2Jhc2UgfD0gUjYwMF9QVEVfUkVBREFCTEUgfCBSNjAwX1BURV9XUklURUFCTEU7CisKKwkJCURSTV9XUklURTY0KG1hcCwgZ2FydF9pZHggKiBzaXplb2YodTY0KSwgcGFnZV9iYXNlKTsKKworCQkJZ2FydF9pZHgrKzsKKworCQkJaWYgKChpICUgMTI4KSA9PSAwKQorCQkJCURSTV9ERUJVRygicGFnZSBlbnRyeSAlZDogMHglMDE2bGx4XG4iLAorCQkJCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2VfYmFzZSk7CisJCQllbnRyeV9hZGRyICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKKwkJfQorCX0KKwlyZXQgPSAxOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2ZsdXNoX2dhcnRfcmFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZXNwLCBjb3VudGRvd24gPSAxMDAwOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIsIChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxKSA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSwgMik7CisKKwlkbyB7CisJCXJlc3AgPSBSQURFT05fUkVBRChSNjAwX1ZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UpOworCQljb3VudGRvd24tLTsKKwkJRFJNX1VERUxBWSgxKTsKKwl9IHdoaWxlICgoKHJlc3AgJiAweGYwKSA9PSAwKSAmJiBjb3VudGRvd24pOworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCS8qIGluaXRpYWxpc2UgdGhlIFZNIHRvIHVzZSB0aGUgcGFnZSB0YWJsZSB3ZSBjb25zdHJ1Y3RlZCB1cCB0aGVyZSAqLworCXUzMiB2bV9jMCwgaTsKKwl1MzIgbWNfcmRfYTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJLyogc2V0dXAgTUMgUkQgYSAqLworCW1jX3JkX2EgPSBSNjAwX01DRF9MMV9UTEIgfCBSNjAwX01DRF9MMV9GUkFHX1BST0MgfCBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkJUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfCBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfAorCQlSNjAwX01DRF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KSB8IFI2MDBfTUNEX1dBSVRfTDJfUVVFUlk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQV9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQl9DTlRMLCBtY19yZF9hKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9CX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0dGWF9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfR0ZYX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NZU19DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfU1lTX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0hEUF9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfTDFfU1RSSUNUX09SREVSSU5HKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfSERQX0NOVEwsIG1jX3JkX2EgLyp8IFI2MDBfTUNEX0wxX1NUUklDVF9PUkRFUklORyovKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9SRF9QRE1BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9QRE1BX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NFTV9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfU0VNQVBIT1JFX01PREUpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9TRU1fQ05UTCwgbWNfcmRfYSk7CisKKwl2bV9sMl9jbnRsID0gUjYwMF9WTV9MMl9DQUNIRV9FTiB8IFI2MDBfVk1fTDJfRlJBR19QUk9DIHwgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XOworCXZtX2wyX2NudGwgfD0gUjYwMF9WTV9MMl9DTlRMX1FVRVVFX1NJWkUoNyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTCwgdm1fbDJfY250bCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMiwgMCk7CisJdm1fbDJfY250bDMgPSAoUjYwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVF8wKDApIHwKKwkJICAgICAgIFI2MDBfVk1fTDJfQ05UTDNfQkFOS19TRUxFQ1RfMSgxKSB8CisJCSAgICAgICBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMywgdm1fbDJfY250bDMpOworCisJdm1fYzAgPSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUIHwgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9DTlRMLCB2bV9jMCk7CisKKwl2bV9jMCAmPSB+UjYwMF9WTV9FTkFCTEVfQ09OVEVYVDsKKworCS8qIGRpc2FibGUgYWxsIG90aGVyIGNvbnRleHRzICovCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKwkJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIHZtX2MwKTsKKworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCisJcjYwMF92bV9mbHVzaF9nYXJ0X3JhbmdlKGRldik7Cit9CisKKy8qIGxvYWQgcjYwMCBtaWNyb2NvZGUgKi8KK3N0YXRpYyB2b2lkIHI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpOworCisJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAorCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKKwkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUjYwMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSNjAwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFI2MDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUjYwMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSNjAwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSNjAwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MTApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYxMF9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjIwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYzNV9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjcwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2NzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlM3ODBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlM3ODBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlM3ODBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJTNzgwX3BmcF9taWNyb2NvZGVbaV0pOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fUkFERFIsIDApOworCit9CisKK3N0YXRpYyB2b2lkIHI3MDBfdm1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyogaW5pdGlhbGlzZSB0aGUgVk0gdG8gdXNlIHRoZSBwYWdlIHRhYmxlIHdlIGNvbnN0cnVjdGVkIHVwIHRoZXJlICovCisJdTMyIHZtX2MwLCBpOworCXUzMiBtY192bV9tZF9sMTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJbWNfdm1fbWRfbDEgPSBSNzAwX0VOQUJMRV9MMV9UTEIgfAorCSAgICBSNzAwX0VOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkgICAgUjcwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkgICAgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJICAgIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwKKwkgICAgUjcwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjNfQ05UTCwgbWNfdm1fbWRfbDEpOworCisJdm1fbDJfY250bCA9IFI2MDBfVk1fTDJfQ0FDSEVfRU4gfCBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyB8IFI2MDBfVk1fRU5BQkxFX1BURV9DQUNIRV9MUlVfVzsKKwl2bV9sMl9jbnRsIHw9IFI3MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKDcpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0wyX0NOVEwsIHZtX2wyX2NudGwpOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDIsIDApOworCXZtX2wyX2NudGwzID0gUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCgwKSB8IFI3MDBfVk1fTDJfQ05UTDNfQ0FDSEVfVVBEQVRFX01PREUoMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDMsIHZtX2wyX2NudGwzKTsKKworCXZtX2MwID0gUjYwMF9WTV9FTkFCTEVfQ09OVEVYVCB8IFI2MDBfVk1fUEFHRV9UQUJMRV9ERVBUSF9GTEFUOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCwgdm1fYzApOworCisJdm1fYzAgJj0gflI2MDBfVk1fRU5BQkxFX0NPTlRFWFQ7CisKKwkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCB2bV9jMCk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID4+IDEyKTsKKworCXI2MDBfdm1fZmx1c2hfZ2FydF9yYW5nZShkZXYpOworfQorCisvKiBsb2FkIHI2MDAgbWljcm9jb2RlICovCitzdGF0aWMgdm9pZCByNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwlpbnQgaTsKKworCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoMTUgPDwgOCkgfAorCQkgICAgICgzIDw8IDApKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKSkgeworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzcwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNzcwX3BmcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3NzAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBSVjc3MF9jcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjczMCkpIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjczMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjczMF9wZnBfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzMwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BNNF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwgUlY3MzBfY3BfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MTAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3MTBfcGZwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjcxMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzEwX2NwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1JBRERSLCAwKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX3Rlc3Rfd3JpdGViYWNrKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwl1MzIgdG1wOworCisJLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KKwlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKKworCS8qIFdyaXRlYmFjayBkb2Vzbid0IHNlZW0gdG8gd29yayBldmVyeXdoZXJlLCB0ZXN0IGl0IGhlcmUgYW5kIHBvc3NpYmx5CisJICogZW5hYmxlIGl0IGlmIGl0IGFwcGVhcnMgdG8gd29yaworCSAqLworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigxKSwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgeworCQl1MzIgdmFsOworCisJCXZhbCA9IHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpKTsKKwkJaWYgKHZhbCA9PSAweGRlYWRiZWVmKQorCQkJYnJlYWs7CisJCURSTV9VREVMQVkoMSk7CisJfQorCisJaWYgKHRtcCA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDE7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIHRtcCk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBmYWlsZWRcbiIpOworCX0KKwlpZiAocmFkZW9uX25vX3diID09IDEpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgZm9yY2VkIG9mZlxuIik7CisJfQorCisJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKSB7CisJCS8qIERpc2FibGUgd3JpdGViYWNrIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGJ1cyBtYXN0ZXIgdHJhbnNmZXIgKi8KKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8CisJCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworCQlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDApOworCX0KK30KKworaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgY3BfcHRyLCBjcF9tZV9jbnRsLCBjcF9yYl9jbnRsOworCisJRFJNX0lORk8oIlJlc2V0dGluZyBHUFVcbiIpOworCisJY3BfcHRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9XUFRSKTsKKwljcF9tZV9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9DUF9NRV9DTlRMKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBSNjAwX0NQX01FX0hBTFQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAweDdmZmYpOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDUwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFJfREVMQVksIDApOworCWNwX3JiX2NudGwgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFI2MDBfUkJfUlBUUl9XUl9FTkEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9XUiwgY3BfcHRyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCBjcF9wdHIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIGNwX3JiX2NudGwpOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIGNwX21lX2NudGwpOworCisJLyogUmVzZXQgdGhlIENQIHJpbmcgKi8KKwlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKworCS8qIFRoZSBDUCBpcyBubyBsb25nZXIgcnVubmluZyBhZnRlciBhbiBlbmdpbmUgcmVzZXQgKi8KKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyB2ZXJ0ZXgsIGluZGlyZWN0IGJ1ZmZlcnMgKi8KKwlyYWRlb25fZnJlZWxpc3RfcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB1MzIgcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJICAgICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkgICAgIHUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKK3sKKwl1MzIgYmFja2VuZF9tYXAgPSAwOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJdTMyIGN1cl9waXBlOworCXUzMiBzd2l6emxlX3BpcGVbUjZYWF9NQVhfUElQRVNdOworCXUzMiBjdXJfYmFja2VuZDsKKwl1MzIgaTsKKworCWlmIChudW1fdGlsZV9waXBlcyA+IFI2WFhfTUFYX1BJUEVTKQorCQludW1fdGlsZV9waXBlcyA9IFI2WFhfTUFYX1BJUEVTOworCWlmIChudW1fdGlsZV9waXBlcyA8IDEpCisJCW51bV90aWxlX3BpcGVzID0gMTsKKwlpZiAobnVtX2JhY2tlbmRzID4gUjZYWF9NQVhfQkFDS0VORFMpCisJCW51bV9iYWNrZW5kcyA9IFI2WFhfTUFYX0JBQ0tFTkRTOworCWlmIChudW1fYmFja2VuZHMgPCAxKQorCQludW1fYmFja2VuZHMgPSAxOworCisJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMDsKKwllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUjZYWF9NQVhfQkFDS0VORFM7ICsraSkgeworCQlpZiAoKChiYWNrZW5kX2Rpc2FibGVfbWFzayA+PiBpKSAmIDEpID09IDApIHsKKwkJCWVuYWJsZWRfYmFja2VuZHNfbWFzayB8PSAoMSA8PCBpKTsKKwkJCSsrZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwkJfQorCQlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSBudW1fYmFja2VuZHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSAwKSB7CisJCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDE7CisJCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAxOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKKwkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKworCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjZYWF9NQVhfUElQRVMpOworCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA1OworCQlzd2l6emxlX3BpcGVbNF0gPSAxOworCQlzd2l6emxlX3BpcGVbNV0gPSAzOworCQlicmVhazsKKwljYXNlIDc6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMTsKKwkJc3dpenpsZV9waXBlWzVdID0gMzsKKwkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJc3dpenpsZV9waXBlWzddID0gNzsKKwkJYnJlYWs7CisJfQorCisJY3VyX2JhY2tlbmQgPSAwOworCWZvciAoY3VyX3BpcGUgPSAwOyBjdXJfcGlwZSA8IG51bV90aWxlX3BpcGVzOyArK2N1cl9waXBlKSB7CisJCXdoaWxlICgoKDEgPDwgY3VyX2JhY2tlbmQpICYgZW5hYmxlZF9iYWNrZW5kc19tYXNrKSA9PSAwKQorCQkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCisJCWJhY2tlbmRfbWFwIHw9ICh1MzIpKCgoY3VyX2JhY2tlbmQgJiAzKSA8PCAoc3dpenpsZV9waXBlW2N1cl9waXBlXSAqIDIpKSk7CisKKwkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCX0KKworCXJldHVybiBiYWNrZW5kX21hcDsKK30KKworc3RhdGljIGludCByNjAwX2NvdW50X3BpcGVfYml0cyh1aW50MzJfdCB2YWwpCit7CisJaW50IGksIHJldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmV0ICs9IHZhbCAmIDE7CisJCXZhbCA+Pj0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcjYwMF9nZnhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIGosIG51bV9xZF9waXBlczsKKwl1MzIgc3hfZGVidWdfMTsKKwl1MzIgdGNfY250bDsKKwl1MzIgYXJiX3BvcDsKKwl1MzIgbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQ7CisJdTMyIHZndF9nc19wZXJfZXM7CisJdTMyIGdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMDsKKwl1MzIgc3FfbXNfZmlmb19zaXplczsKKwl1MzIgc3FfY29uZmlnOworCXUzMiBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IDA7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gMDsKKwl1MzIgaGRwX2hvc3RfcGF0aF9jbnRsOworCXUzMiBiYWNrZW5kX21hcDsKKwl1MzIgZ2JfdGlsaW5nX2NvbmZpZyA9IDA7CisJdTMyIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IDA7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IDA7CisJdTMyIHJhbWNmZzsKKworCS8qIHNldHVwIGNoaXAgc3BlY3MgKi8KKwlzd2l0Y2ggKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgeworCWNhc2UgQ0hJUF9SNjAwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDM7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JWNjIwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAxOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAxOTI7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCXJhbWNmZyA9IFJBREVPTl9SRUFEKFI2MDBfUkFNQ0ZHKTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDIpOworCQlicmVhazsKKwljYXNlIDg6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChyYW1jZmcgPj4gUjYwMF9OT09GQkFOS19TSElGVCkgJiBSNjAwX05PT0ZCQU5LX01BU0spOworCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0dST1VQX1NJWkUoMCk7CisKKwlpZiAoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spID4gMykgeworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUk9XX1RJTElORygzKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1NBTVBMRV9TUExJVCgzKTsKKwl9IGVsc2UgeworCQlnYl90aWxpbmdfY29uZmlnIHw9CisJCQlSNjAwX1JPV19USUxJTkcoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwl9CisKKwlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFOS19TV0FQUygxKTsKKworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcywKKwkJCQkJCQkoMHhmZiA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgMHhmZik7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJCVI2MDBfSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlSNjAwX0lOQUNUSVZFX1NJTURTKChSNlhYX01BWF9TSU1EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9zaW1kcykgJiBSNlhYX01BWF9TSU1EU19NQVNLKTsKKworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9CisJCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSNlhYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSNlhYX01BWF9CQUNLRU5EU19NQVNLKTsKKworCVJBREVPTl9XUklURShSNjAwX0dCX1RJTElOR19DT05GSUcsICAgICAgZ2JfdGlsaW5nX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfRENQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfSERQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKworCW51bV9xZF9waXBlcyA9CisJCVI2WFhfTUFYX0JBQ0tFTkRTIC0gcjYwMF9jb3VudF9waXBlX2JpdHMoY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnICYgUjYwMF9JTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCwgKG51bV9xZF9waXBlcyAqIDQpICYgUjYwMF9ERUFMTE9DX0RJU1RfTUFTSyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKG51bV9xZF9waXBlcyAqIDQpIC0gMikgJiBSNjAwX1ZUWF9SRVVTRV9ERVBUSF9NQVNLKTsKKworCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUVVFVUVfVEhSRVNIT0xEUywgKFI2MDBfUk9RX0lCMV9TVEFSVCgweDE2KSB8CisJCQkJCQlSNjAwX1JPUV9JQjJfU1RBUlQoMHgyYikpKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FUV9USFJFU0hPTERTLCAoUjYwMF9NRVFfRU5EKDB4NDApIHwKKwkJCQkJICAgICAgUjYwMF9ST1FfRU5EKDB4NDApKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9UQV9DTlRMX0FVWCwgKFI2MDBfRElTQUJMRV9DVUJFX0FOSVNPIHwKKwkJCQkJUjYwMF9TWU5DX0dSQURJRU5UIHwKKwkJCQkJUjYwMF9TWU5DX1dBTEtFUiB8CisJCQkJCVI2MDBfU1lOQ19BTElHTkVSKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjY3MCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfQVJCX0dERUNfUkRfQ05UTCwgMHgwMDAwMDAyMSk7CisKKwlzeF9kZWJ1Z18xID0gUkFERU9OX1JFQUQoUjYwMF9TWF9ERUJVR18xKTsKKwlzeF9kZWJ1Z18xIHw9IFI2MDBfU01YX0VWRU5UX1JFTEVBU0U7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUjYwMCkpCisJCXN4X2RlYnVnXzEgfD0gUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNjAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOworCWVsc2UKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfREJfV0FURVJNQVJLUywgKFI2MDBfREVQVEhfRlJFRSg0KSB8CisJCQkJCSAgUjYwMF9ERVBUSF9GTFVTSCgxNikgfAorCQkJCQkgIFI2MDBfREVQVEhfUEVORElOR19GUkVFKDQpIHwKKwkJCQkJICBSNjAwX0RFUFRIX0NBQ0hFTElORV9GUkVFKDE2KSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMXzEsIFI2MDBfVlRYX0RPTkVfREVMQVkoMCkpOworCisJc3FfbXNfZmlmb19zaXplcyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfTVNfRklGT19TSVpFUyk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApKSB7CisJCXNxX21zX2ZpZm9fc2l6ZXMgPSAoUjYwMF9DQUNIRV9GSUZPX1NJWkUoMHhhKSB8CisJCQkJICAgIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAorCQkJCSAgICBSNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKKwkJCQkgICAgUjYwMF9BTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlzcV9tc19maWZvX3NpemVzICY9IH5SNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZmYpOworCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHg0KTsKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfTVNfRklGT19TSVpFUywgc3FfbXNfZmlmb19zaXplcyk7CisKKwkvKiBTUV9DT05GSUcsIFNRX0dQUl9SRVNPVVJDRV9NR01ULCBTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVAorCSAqIHNob3VsZCBiZSBhZGp1c3RlZCBhcyBuZWVkZWQgYnkgdGhlIDJELzNEIGRyaXZlcnMuICBUaGlzIGp1c3Qgc2V0cyBkZWZhdWx0IHZhbHVlcworCSAqLworCXNxX2NvbmZpZyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfQ09ORklHKTsKKwlzcV9jb25maWcgJj0gfihSNjAwX1BTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9WU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfR1NfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX0VTX1BSSU8oMykpOworCXNxX2NvbmZpZyB8PSAoUjYwMF9EWDlfQ09OU1RTIHwKKwkJICAgICAgUjYwMF9WQ19FTkFCTEUgfAorCQkgICAgICBSNjAwX1BTX1BSSU8oMCkgfAorCQkgICAgICBSNjAwX1ZTX1BSSU8oMSkgfAorCQkgICAgICBSNjAwX0dTX1BSSU8oMikgfAorCQkgICAgICBSNjAwX0VTX1BSSU8oMykpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkgeworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoMTI0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUygxMjQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDQpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDApIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDApKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygxMzYpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg0OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUyg0KSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDEyOCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUygxMjgpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkgeworCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KKwkJc3FfY29uZmlnICY9IH5SNjAwX1ZDX0VOQUJMRTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfR1BSUygxNykgfAorCQkJCQkgIFI2MDBfTlVNX0VTX0dQUlMoMTcpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBSNjAwX05VTV9WU19USFJFQURTKDc4KSB8CisJCQkJCSAgIFI2MDBfTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBSNjAwX05VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDQwKSB8CisJCQkJCSAgICBSNjAwX05VTV9WU19TVEFDS19FTlRSSUVTKDQwKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19TVEFDS19FTlRSSUVTKDMyKSB8CisJCQkJCSAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKDE2KSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYzMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDIpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDE4KSB8CisJCQkJCSAgUjYwMF9OVU1fRVNfR1BSUygxOCkpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChSNjAwX05VTV9QU19USFJFQURTKDc5KSB8CisJCQkJCSAgIFI2MDBfTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgUjYwMF9OVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIFI2MDBfTlVNX0VTX1RIUkVBRFMoMzEpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoNDApIHwKKwkJCQkJICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNDApKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMzIpIHwKKwkJCQkJICAgIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoMTYpKTsKKwl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2NzApIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX0dQUlMoMTcpIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDE3KSk7CisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKFI2MDBfTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUyg2NCkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUyg2NCkpOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1NRX0NPTkZJRywgc3FfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfR1BSX1JFU09VUkNFX01HTVRfMiwgIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOworCVJBREVPTl9XUklURShSNjAwX1NRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgUjYwMF9DQUNIRV9JTlZBTElEQVRJT04oUjYwMF9UQ19PTkxZKSk7CisJZWxzZQorCQlSQURFT05fV1JJVEUoUjYwMF9WR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykpOworCisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfMlMsIChSNjAwX1MwX1goMHhjKSB8CisJCQkJCQkgICAgUjYwMF9TMF9ZKDB4NCkgfAorCQkJCQkJICAgIFI2MDBfUzFfWCgweDQpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1koMHhjKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzRTLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJICAgIFI2MDBfUzBfWSgweGUpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1goMHgyKSB8CisJCQkJCQkgICAgUjYwMF9TMV9ZKDB4MikgfAorCQkJCQkJICAgIFI2MDBfUzJfWCgweGEpIHwKKwkJCQkJCSAgICBSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkgICAgUjYwMF9TM19YKDB4NikgfAorCQkJCQkJICAgIFI2MDBfUzNfWSgweGEpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJCVI2MDBfUzBfWSgweGIpIHwKKwkJCQkJCQlSNjAwX1MxX1goMHg0KSB8CisJCQkJCQkJUjYwMF9TMV9ZKDB4YykgfAorCQkJCQkJCVI2MDBfUzJfWCgweDEpIHwKKwkJCQkJCQlSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkJUjYwMF9TM19YKDB4YSkgfAorCQkJCQkJCVI2MDBfUzNfWSgweGUpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QxLCAoUjYwMF9TNF9YKDB4NikgfAorCQkJCQkJCVI2MDBfUzRfWSgweDEpIHwKKwkJCQkJCQlSNjAwX1M1X1goMHgwKSB8CisJCQkJCQkJUjYwMF9TNV9ZKDB4MCkgfAorCQkJCQkJCVI2MDBfUzZfWCgweGIpIHwKKwkJCQkJCQlSNjAwX1M2X1koMHg0KSB8CisJCQkJCQkJUjYwMF9TN19YKDB4NykgfAorCQkJCQkJCVI2MDBfUzdfWSgweDgpKSk7CisKKworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1I2MDA6CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAzMjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19WRVJURVhfUkVVU0UsIDE2KTsKKworCS8qIG1vcmUgZGVmYXVsdCB2YWx1ZXMuIDJELzNEIGRyaXZlciBzaG91bGQgYWRqdXN0IGFzIG5lZWRlZCAqLworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfQ09ORklHLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg4KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg0KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1I2MDA6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCkgfCBSNjAwX0wyX0RJU0FCTEVfTEFURV9ISVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCk7CisJCWJyZWFrOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1RDX0NOVEwsIHRjX2NudGwpOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCWFyYl9wb3AgPSBSQURFT05fUkVBRChSNjAwX0FSQl9QT1ApOworCWFyYl9wb3AgfD0gUjYwMF9FTkFCTEVfVEMxMjg7CisJUkFERU9OX1dSSVRFKFI2MDBfQVJCX1BPUCwgYXJiX3BvcCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX0NMX0VOSEFOQ0UsIChSNjAwX0NMSVBfVlRYX1JFT1JERVJfRU5BIHwKKwkJCQkJICBSNjAwX05VTV9DTElQX1NFUSgzKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0VOSEFOQ0UsIFI2MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpKTsKKworfQorCitzdGF0aWMgdTMyIHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcCh1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCit7CisJdTMyIGJhY2tlbmRfbWFwID0gMDsKKwl1MzIgZW5hYmxlZF9iYWNrZW5kc19tYXNrOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCXUzMiBjdXJfcGlwZTsKKwl1MzIgc3dpenpsZV9waXBlW1I3WFhfTUFYX1BJUEVTXTsKKwl1MzIgY3VyX2JhY2tlbmQ7CisJdTMyIGk7CisKKwlpZiAobnVtX3RpbGVfcGlwZXMgPiBSN1hYX01BWF9QSVBFUykKKwkJbnVtX3RpbGVfcGlwZXMgPSBSN1hYX01BWF9QSVBFUzsKKwlpZiAobnVtX3RpbGVfcGlwZXMgPCAxKQorCQludW1fdGlsZV9waXBlcyA9IDE7CisJaWYgKG51bV9iYWNrZW5kcyA+IFI3WFhfTUFYX0JBQ0tFTkRTKQorCQludW1fYmFja2VuZHMgPSBSN1hYX01BWF9CQUNLRU5EUzsKKwlpZiAobnVtX2JhY2tlbmRzIDwgMSkKKwkJbnVtX2JhY2tlbmRzID0gMTsKKworCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDA7CisJZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFI3WFhfTUFYX0JBQ0tFTkRTOyArK2kpIHsKKwkJaWYgKCgoYmFja2VuZF9kaXNhYmxlX21hc2sgPj4gaSkgJiAxKSA9PSAwKSB7CisJCQllbmFibGVkX2JhY2tlbmRzX21hc2sgfD0gKDEgPDwgaSk7CisJCQkrK2VuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJCX0KKwkJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gbnVtX2JhY2tlbmRzKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gMCkgeworCQllbmFibGVkX2JhY2tlbmRzX21hc2sgPSAxOworCQllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMTsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCAhPSBudW1fYmFja2VuZHMpCisJCW51bV9iYWNrZW5kcyA9IGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisKKwltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKKwlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSAzOworCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQlicmVhazsKKwljYXNlIDU6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQlicmVhazsKKwljYXNlIDg6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDc7CisJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCWJyZWFrOworCX0KKworCWN1cl9iYWNrZW5kID0gMDsKKwlmb3IgKGN1cl9waXBlID0gMDsgY3VyX3BpcGUgPCBudW1fdGlsZV9waXBlczsgKytjdXJfcGlwZSkgeworCQl3aGlsZSAoKCgxIDw8IGN1cl9iYWNrZW5kKSAmIGVuYWJsZWRfYmFja2VuZHNfbWFzaykgPT0gMCkKKwkJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKworCQliYWNrZW5kX21hcCB8PSAodTMyKSgoKGN1cl9iYWNrZW5kICYgMykgPDwgKHN3aXp6bGVfcGlwZVtjdXJfcGlwZV0gKiAyKSkpOworCisJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKwl9CisKKwlyZXR1cm4gYmFja2VuZF9tYXA7Cit9CisKK3N0YXRpYyB2b2lkIHI3MDBfZ2Z4X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHN4X2RlYnVnXzE7CisJdTMyIHNteF9kY19jdGwwOworCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwl1MzIgdmd0X2dzX3Blcl9lczsKKwl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCXUzMiBzcV9tc19maWZvX3NpemVzOworCXUzMiBzcV9jb25maWc7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210OworCXUzMiBoZHBfaG9zdF9wYXRoX2NudGw7CisJdTMyIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzA7CisJdTMyIGJhY2tlbmRfbWFwOworCXUzMiBnYl90aWxpbmdfY29uZmlnID0gMDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gMDsKKwl1MzIgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gMDsKKwl1MzIgbWNfYXJiX3JhbWNmZzsKKwl1MzIgZGJfZGVidWc0OworCisJLyogc2V0dXAgY2hpcCBzcGVjcyAqLworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDEwOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAyNDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMTI7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgPSA3OworCQlkZXZfcHJpdi0+cjcwMF9zY19wcmltX2ZpZm9fc2l6ZSA9IDB4Rjk7CisJCWRldl9wcml2LT5yNzAwX3NjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCWRldl9wcml2LT5yNzAwX3NjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJCWRldl9wcml2LT5yNjAwX21heF9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3NpbWRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzID0gMjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF90aHJlYWRzID0gMjQ4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2h3X2NvbnRleHRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgPSAxNiAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDMyOworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMjI0OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweGY5OworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gOCAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTEyOworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAxOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweDQwOworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCW1jX2FyYl9yYW1jZmcgPSBSQURFT05fUkVBRChSNzAwX01DX0FSQl9SQU1DRkcpOworCisJc3dpdGNoIChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDApOworCQlicmVhazsKKwljYXNlIDI6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKDEpOworCWVsc2UKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRkJBTktfU0hJRlQpICYgUjcwMF9OT09GQkFOS19NQVNLKTsKKworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9HUk9VUF9TSVpFKDApOworCisJaWYgKCgobWNfYXJiX3JhbWNmZyA+PiBSNzAwX05PT0ZST1dTX1NISUZUKSAmIFI3MDBfTk9PRlJPV1NfTUFTSykgPiAzKSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9ST1dfVElMSU5HKDMpOworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfU0FNUExFX1NQTElUKDMpOworCX0gZWxzZSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0KKwkJCVI2MDBfUk9XX1RJTElORygoKG1jX2FyYl9yYW1jZmcgPj4gUjcwMF9OT09GUk9XU19TSElGVCkgJiBSNzAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRlJPV1NfU0hJRlQpICYgUjcwMF9OT09GUk9XU19NQVNLKSk7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfU1dBUFMoMSk7CisKKwliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcywKKwkJCQkJCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMsCisJCQkJCQkJKDB4ZmYgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIDB4ZmYpOworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CisKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCQlSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKChSN1hYX01BWF9QSVBFU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9waXBlcykgJiBSN1hYX01BWF9QSVBFU19NQVNLKTsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KKwkJUjYwMF9JTkFDVElWRV9TSU1EUygoUjdYWF9NQVhfU0lNRFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMpICYgUjdYWF9NQVhfU0lNRFNfTUFTSyk7CisKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPQorCQlSNjAwX0JBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9HQl9USUxJTkdfQ09ORklHLCAgICAgIGdiX3RpbGluZ19jb25maWcpOworCVJBREVPTl9XUklURShSNjAwX0RDUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfUkJfQkFDS0VORF9ESVNBQkxFLCAgICAgIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCAgIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9DQ19TWVNfUkJfQkFDS0VORF9ESVNBQkxFLCBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOworCVJBREVPTl9XUklURShSNzAwX0NHVFNfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfVENDX0RJU0FCTEUsIDApOworCisJbnVtX3FkX3BpcGVzID0KKwkJUjdYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBSNjAwX0RFQUxMT0NfRElTVF9NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0spOworCisJLyogc2V0IEhXIGRlZmF1bHRzIGZvciAzRCBlbmdpbmUgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTLCAoUjYwMF9ST1FfSUIxX1NUQVJUKDB4MTYpIHwKKwkJCQkJCVI2MDBfUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVRX1RIUkVTSE9MRFMsIFI3MDBfU1RRX1NQTElUKDB4MzApKTsKKworCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCAoUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gfAorCQkJCQlSNjAwX1NZTkNfR1JBRElFTlQgfAorCQkJCQlSNjAwX1NZTkNfV0FMS0VSIHwKKwkJCQkJUjYwMF9TWU5DX0FMSUdORVIpKTsKKworCXN4X2RlYnVnXzEgPSBSQURFT05fUkVBRChSNzAwX1NYX0RFQlVHXzEpOworCXN4X2RlYnVnXzEgfD0gUjcwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNzAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJc214X2RjX2N0bDAgPSBSQURFT05fUkVBRChSNjAwX1NNWF9EQ19DVEwwKTsKKwlzbXhfZGNfY3RsMCAmPSB+UjcwMF9DQUNIRV9ERVBUSCgweDFmZik7CisJc214X2RjX2N0bDAgfD0gUjcwMF9DQUNIRV9ERVBUSCgoZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgKiA2NCkgLSAxKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfU01YX0VWRU5UX0NUTCwgKFI3MDBfRVNfRkxVU0hfQ1RMKDQpIHwKKwkJCQkJICBSNzAwX0dTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCSAgUjcwMF9BQ0tfRkxVU0hfQ1RMKDMpIHwKKwkJCQkJICBSNzAwX1NZTkNfRkxVU0hfQ1RMKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJUkFERU9OX1dSSVRFKFI3MDBfREJfREVCVUczLCBSNzAwX0RCX0NMS19PRkZfREVMQVkoMHgxZikpOworCWVsc2UgeworCQlkYl9kZWJ1ZzQgPSBSQURFT05fUkVBRChSVjcwMF9EQl9ERUJVRzQpOworCQlkYl9kZWJ1ZzQgfD0gUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVI7CisJCVJBREVPTl9XUklURShSVjcwMF9EQl9ERUJVRzQsIGRiX2RlYnVnNCk7CisJfQorCisJUkFERU9OX1dSSVRFKFI2MDBfU1hfRVhQT1JUX0JVRkZFUl9TSVpFUywgKFI2MDBfQ09MT1JfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9QT1NJVElPTl9CVUZGRVJfU0laRSgoZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9TTVhfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9QQV9TQ19GSUZPX1NJWkVfUjdYWCwgKFI3MDBfU0NfUFJJTV9GSUZPX1NJWkUoZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfQ09ORklHX0NOVExfMSwgUjYwMF9WVFhfRE9ORV9ERUxBWSg0KSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRVJGTU9OX0NOVEwsIDApOworCisJc3FfbXNfZmlmb19zaXplcyA9IChSNjAwX0NBQ0hFX0ZJRk9fU0laRSgxNiAqIGRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cykgfAorCQkJICAgIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfAorCQkJICAgIFI2MDBfQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gUjYwMF9GRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwlkZWZhdWx0OgorCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4NCk7CisJCWJyZWFrOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9TUV9NU19GSUZPX1NJWkVTLCBzcV9tc19maWZvX3NpemVzKTsKKworCS8qIFNRX0NPTkZJRywgU1FfR1BSX1JFU09VUkNFX01HTVQsIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBTUV9TVEFDS19SRVNPVVJDRV9NR01UCisJICogc2hvdWxkIGJlIGFkanVzdGVkIGFzIG5lZWRlZCBieSB0aGUgMkQvM0QgZHJpdmVycy4gIFRoaXMganVzdCBzZXRzIGRlZmF1bHQgdmFsdWVzCisJICovCisJc3FfY29uZmlnID0gUkFERU9OX1JFQUQoUjYwMF9TUV9DT05GSUcpOworCXNxX2NvbmZpZyAmPSB+KFI2MDBfUFNfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX1ZTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9HU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfRVNfUFJJTygzKSk7CisJc3FfY29uZmlnIHw9IChSNjAwX0RYOV9DT05TVFMgfAorCQkgICAgICBSNjAwX1ZDX0VOQUJMRSB8CisJCSAgICAgIFI2MDBfRVhQT1JUX1NSQ19DIHwKKwkJICAgICAgUjYwMF9QU19QUklPKDApIHwKKwkJICAgICAgUjYwMF9WU19QUklPKDEpIHwKKwkJICAgICAgUjYwMF9HU19QUklPKDIpIHwKKwkJICAgICAgUjYwMF9FU19QUklPKDMpKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjcxMCkKKwkJLyogbm8gdmVydGV4IGNhY2hlICovCisJCXNxX2NvbmZpZyAmPSB+UjYwMF9WQ19FTkFCTEU7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9DT05GSUcsIHNxX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgKFI2MDBfTlVNX1BTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMjQpLzY0KSB8CisJCQkJCQkgICAgUjYwMF9OVU1fVlNfR1BSUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpLzIpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yLCAgKFI2MDBfTlVNX0dTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogNykvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9FU19HUFJTKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDcpLzY0KSkpOworCisJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiA0KS84KSB8CisJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAyKS84KSB8CisJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKS84KSk7CisJaWYgKCgoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKSAvIDgpID4gZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpCisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210IHw9IFI2MDBfTlVNX0dTX1RIUkVBRFMoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpOworCWVsc2UKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgfD0gUjYwMF9OVU1fR1NfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgKiAxKS84KTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUygoZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSB8CisJCQkJCQkgICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkpKTsKKworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkgfAorCQkJCQkJICAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKChkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpKSk7CisKKwlzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wID0gKFI3MDBfU0lNREFfUklORzAoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBSNzAwX1NJTURBX1JJTkcxKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDM4KS82NCkgfAorCQkJCSAgICAgUjcwMF9TSU1EQl9SSU5HMCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFI3MDBfU0lNREJfUklORzEoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8wLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8yLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8zLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl81LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl82LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKworCVJBREVPTl9XUklURShSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUywgKFI3MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpIHwKKwkJCQkJCSAgICAgUjcwMF9GT1JDRV9FT1ZfTUFYX1JFWl9DTlQoMjU1KSkpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1RDX09OTFkpIHwKKwkJCQkJCQkgICBSNzAwX0FVVE9fSU5WTERfRU4oUjcwMF9FU19BTkRfR1NfQVVUTykpKTsKKwllbHNlCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykgfAorCQkJCQkJCSAgIFI3MDBfQVVUT19JTlZMRF9FTihSNzAwX0VTX0FORF9HU19BVVRPKSkpOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDM4NDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCisJLyogbW9yZSBkZWZhdWx0IHZhbHVlcy4gMkQvM0QgZHJpdmVyIHNob3VsZCBhZGp1c3QgYXMgbmVlZGVkICovCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI3MDBfUEFfU0NfRURHRVJVTEUsIDB4YWFhYWFhYWEpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX0NPTkZJRywgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQ0xJUFJFQ1RfUlVMRSwgMHhmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfVENQX0NOVEwsIDApOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9DTF9FTkhBTkNFLCAoUjYwMF9DTElQX1ZUWF9SRU9SREVSX0VOQSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xJUF9TRVEoMykpKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX2NwX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CisJdTMyIHJpbmdfc3RhcnQ7CisJdTY0IHJwdHJfYWRkcjsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkpCisJCXI3MDBfZ2Z4X2luaXQoZGV2LCBkZXZfcHJpdik7CisJZWxzZQorCQlyNjAwX2dmeF9pbml0KGRldiwgZGV2X3ByaXYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCBSNjAwX1NPRlRfUkVTRVRfQ1ApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDE1MDAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCisKKwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfU0VNX1dBSVRfVElNRVIsIDB4NCk7CisKKwkvKiBTZXQgdGhlIHdyaXRlIHBvaW50ZXIgZGVsYXkgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICBSQURFT05fUkJfUlBUUl9XUl9FTkEgfAorCQkgICAgIChkZXZfcHJpdi0+cmluZy5ycHRyX3VwZGF0ZV9sMnF3IDw8IDgpIHwKKwkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcpOworI2Vsc2UKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUgfAorCQkgICAgIFJBREVPTl9SQl9SUFRSX1dSX0VOQSB8CisJCSAgICAgKGRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPDwgOCkgfAorCQkgICAgIGRldl9wcml2LT5yaW5nLnNpemVfbDJxdyk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX1dSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCAwKTsKKwlTRVRfUklOR19IRUFEKGRldl9wcml2LCAwKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gMDsKKworI2lmIF9fT1NfSEFTX0FHUAorCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXJwdHJfYWRkciA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldAorCQkJLSBkZXYtPmFncC0+YmFzZSArCisJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcnB0cl9hZGRyID0gZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0CisJCQktICgodW5zaWduZWQgbG9uZykgZGV2LT5zZy0+dmlydHVhbCkKKwkJCSsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJfQorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfQUREUiwKKwkJICAgICBycHRyX2FkZHIgJiAweGZmZmZmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX0FERFJfSEksCisJCSAgICAgdXBwZXJfMzJfYml0cyhycHRyX2FkZHIpKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJLyogWFhYICovCisJCXJhZGVvbl93cml0ZV9hZ3BfYmFzZShkZXZfcHJpdiwgZGV2LT5hZ3AtPmJhc2UpOworCisJCS8qIFhYWCAqLworCQlyYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRldl9wcml2LAorCQkJICAgICAoKChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKworCQkJCWRldl9wcml2LT5nYXJ0X3NpemUpICYgMHhmZmZmMDAwMCkgfAorCQkJICAgICAgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDE2KSkpOworCisJCXJpbmdfc3RhcnQgPSAoZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldAorCQkJICAgICAgLSBkZXYtPmFncC0+YmFzZQorCQkJICAgICAgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfSBlbHNlCisjZW5kaWYKKwkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0CisJCQkgICAgICAtICh1bnNpZ25lZCBsb25nKWRldi0+c2ctPnZpcnR1YWwKKwkJCSAgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQkFTRSwgcmluZ19zdGFydCA+PiA4KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIDB4ZmYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfREVCVUcsICgxIDw8IDI3KSB8ICgxIDw8IDI4KSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHBvaW50ZXIuICBUaGlzIHdpbGwgY2F1c2UKKwkgKiB0aGUgc2NyYXRjaCByZWdpc3RlciB2YWx1ZXMgdG8gYmUgd3JpdHRlbiBvdXQgdG8gbWVtb3J5CisJICogd2hlbmV2ZXIgdGhleSBhcmUgdXBkYXRlZC4KKwkgKgorCSAqIFdlIHNpbXBseSBwdXQgdGhpcyBiZWhpbmQgdGhlIHJpbmcgcmVhZCBwb2ludGVyLCB0aGlzIHdvcmtzCisJICogd2l0aCBQQ0kgR0FSVCBhcyB3ZWxsIGFzICh3aGF0ZXZlciBraW5kIG9mKSBBR1AgR0FSVAorCSAqLworCXsKKwkJdTY0IHNjcmF0Y2hfYWRkcjsKKworCQlzY3JhdGNoX2FkZHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUik7CisJCXNjcmF0Y2hfYWRkciB8PSAoKHU2NClSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSkpIDw8IDMyOworCQlzY3JhdGNoX2FkZHIgKz0gUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCXNjcmF0Y2hfYWRkciA+Pj0gODsKKwkJc2NyYXRjaF9hZGRyICY9IDB4ZmZmZmZmZmY7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfU0NSQVRDSF9BRERSLCAodWludDMyX3Qpc2NyYXRjaF9hZGRyKTsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDB4Nyk7CisKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKKworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigwKSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfTEFTVF9GUkFNRV9SRUcsIDApOworCisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9MQVNUX0RJU1BBVENIX1JFRywgMCk7CisKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSNjAwX1NDUkFUQ0hPRkYoMiksIDApOworCVJBREVPTl9XUklURShSNjAwX0xBU1RfQ0xFQVJfUkVHLCAwKTsKKworCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLworCW1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikgeworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSA9IDA7CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIgPSAwOworCX0KKworCXI2MDBfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CisKK30KKworaW50IHI2MDBfZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogTWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pbnN0YWxsIGlvY3RsCisJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQorCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgorCSAqLworCWlmIChkZXYtPmlycV9lbmFibGVkKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKGRldl9wcml2LT5jcF9yaW5nICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmNwX3JpbmcgPSBOVUxMOworCQl9CisJCWlmIChkZXZfcHJpdi0+cmluZ19ycHRyICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5yaW5nX3JwdHIsIGRldik7CisJCQlkZXZfcHJpdi0+cmluZ19ycHRyID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2LT5hZ3BfYnVmZmVyX21hcCAhPSBOVUxMKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCXsKKworCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkcikKKwkJCXI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pOworCisJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX0ZCKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gTlVMTDsKKwkJfQorCX0KKwkvKiBvbmx5IGNsZWFyIHRvIHRoZSBzdGFydCBvZiBmbGFncyAqLworCW1lbXNldChkZXZfcHJpdiwgMCwgb2Zmc2V0b2YoZHJtX3JhZGVvbl9wcml2YXRlX3QsIGZsYWdzKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogaWYgd2UgcmVxdWlyZSBuZXcgbWVtb3J5IG1hcCBidXQgd2UgZG9uJ3QgaGF2ZSBpdCBmYWlsICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fTkVXX01FTU1BUCkgJiYgIWRldl9wcml2LT5uZXdfbWVtbWFwKSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpc2UgRFJNIG9uIHRoaXMgY2FyZFxuVGhpcyBjYXJkIHJlcXVpcmVzIGEgbmV3IFgub3JnIEREWCBmb3IgM0RcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmlzX3BjaSAmJiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkpIHsKKwkJRFJNX0RFQlVHKCJGb3JjaW5nIEFHUCBjYXJkIHRvIFBDSSBtb2RlXG4iKTsKKwkJZGV2X3ByaXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkvKiBUaGUgd3JpdGViYWNrIHRlc3Qgc3VjY2VlZHMsIGJ1dCB3aGVuIHdyaXRlYmFjayBpcyBlbmFibGVkLAorCQkgKiB0aGUgcmluZyBidWZmZXIgcmVhZCBwdHIgdXBkYXRlIGZhaWxzIGFmdGVyIGZpcnN0IDEyOCBieXRlcy4KKwkJICovCisJCXJhZGVvbl9ub193YiA9IDE7CisJfSBlbHNlIGlmICghKGRldl9wcml2LT5mbGFncyAmIChSQURFT05fSVNfQUdQIHwgUkFERU9OX0lTX1BDSSB8IFJBREVPTl9JU19QQ0lFKSkKKwkJICYmICFpbml0LT5pc19wY2kpIHsKKwkJRFJNX0RFQlVHKCJSZXN0b3JpbmcgQUdQIGZsYWdcbiIpOworCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gUkFERU9OX0lTX0FHUDsKKwl9CisKKwlkZXZfcHJpdi0+dXNlY190aW1lb3V0ID0gaW5pdC0+dXNlY190aW1lb3V0OworCWlmIChkZXZfcHJpdi0+dXNlY190aW1lb3V0IDwgMSB8fAorCSAgICBkZXZfcHJpdi0+dXNlY190aW1lb3V0ID4gUkFERU9OX01BWF9VU0VDX1RJTUVPVVQpIHsKKwkJRFJNX0RFQlVHKCJUSU1FT1VUIHByb2JsZW0hXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuYWJsZSB2Ymxhbmsgb24gQ1JUQzEgZm9yIG9sZGVyIFggc2VydmVycworCSAqLworCWRldl9wcml2LT52YmxhbmtfY3J0YyA9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOworCisJZGV2X3ByaXYtPmNwX21vZGUgPSBpbml0LT5jcF9tb2RlOworCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIGJ1cy1tYXN0ZXJpbmcgcmluZyBtb2RlLAorCSAqIGJ1dCB0aGUgcmluZyBjYW4gYmUgaW4gZWl0aGVyIEFHUCBvciBQQ0kgc3BhY2UgZm9yIHRoZSByaW5nCisJICogcmVhZCBwb2ludGVyLgorCSAqLworCWlmICgoaW5pdC0+Y3BfbW9kZSAhPSBSQURFT05fQ1NRX1BSSUJNX0lORERJUykgJiYKKwkgICAgKGluaXQtPmNwX21vZGUgIT0gUkFERU9OX0NTUV9QUklCTV9JTkRCTSkpIHsKKwkJRFJNX0RFQlVHKCJCQUQgY3BfbW9kZSAoJXgpIVxuIiwgaW5pdC0+Y3BfbW9kZSk7CisJCXI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGluaXQtPmZiX2JwcCkgeworCWNhc2UgMTY6CisJCWRldl9wcml2LT5jb2xvcl9mbXQgPSBSQURFT05fQ09MT1JfRk9STUFUX1JHQjU2NTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwlkZWZhdWx0OgorCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4ODsKKwkJYnJlYWs7CisJfQorCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOworCisJZGV2X3ByaXYtPnJpbmdfb2Zmc2V0ID0gaW5pdC0+cmluZ19vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmdfcnB0cl9vZmZzZXQgPSBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0OworCWRldl9wcml2LT5idWZmZXJzX29mZnNldCA9IGluaXQtPmJ1ZmZlcnNfb2Zmc2V0OworCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzX29mZnNldCA9IGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0OworCisJbWFzdGVyX3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7CisJaWYgKCFtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzYXJlYSFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPmNwX3JpbmcgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19vZmZzZXQpOworCWlmICghZGV2X3ByaXYtPmNwX3JpbmcpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBjcCByaW5nIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5yaW5nX3JwdHIgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19ycHRyX29mZnNldCk7CisJaWYgKCFkZXZfcHJpdi0+cmluZ19ycHRyKSB7CisJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgcmluZyByZWFkIHBvaW50ZXIhXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKKwlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKKwlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBkbWEgYnVmZmVyIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSB7CisJCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzID0KKwkJICAgIGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5nYXJ0X3RleHR1cmVzX29mZnNldCk7CisJCWlmICghZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXMpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgR0FSVCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworI2lmIF9fT1NfSEFTX0FHUAorCS8qIFhYWCAqLworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPmNwX3JpbmcsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsKKwkJZHJtX2NvcmVfaW9yZW1hcF93YyhkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQlpZiAoIWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgfHwKKwkJICAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKKwkJICAgICFkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgaW9yZW1hcCBhZ3AgcmVnaW9ucyFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJeworCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0gKHZvaWQgKilkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQorCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSA9CisJCSAgICAodm9pZCAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKKworCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOworCQlEUk1fREVCVUcoImRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSAlcFxuIiwKKwkJCSAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlKTsKKwkJRFJNX0RFQlVHKCJkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSk7CisJfQorCisJZGV2X3ByaXYtPmZiX2xvY2F0aW9uID0gKHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRldl9wcml2KSAmIDB4ZmZmZikgPDwgMjQ7CisJZGV2X3ByaXYtPmZiX3NpemUgPQorCQkoKChyYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkZXZfcHJpdikgJiAweGZmZmYwMDAwdSkgPDwgOCkgKyAweDEwMDAwMDApCisJCS0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCisJZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5mcm9udF9waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCQkoKGRldl9wcml2LT5mcm9udF9vZmZzZXQKKwkJCQkJICArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5iYWNrX3BpdGNoIC8gNjQpIDw8IDIyKSB8CisJCQkJICAgICAgICgoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0CisJCQkJCSArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXQgPSAoKChkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggLyA2NCkgPDwgMjIpIHwKKwkJCQkJKChkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CisJCQkJCSAgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb24pID4+IDEwKSk7CisKKwlkZXZfcHJpdi0+Z2FydF9zaXplID0gaW5pdC0+Z2FydF9zaXplOworCisJLyogTmV3IGxldCdzIHNldCB0aGUgbWVtb3J5IG1hcCAuLi4gKi8KKwlpZiAoZGV2X3ByaXYtPm5ld19tZW1tYXApIHsKKwkJdTMyIGJhc2UgPSAwOworCisJCURSTV9JTkZPKCJTZXR0aW5nIEdBUlQgbG9jYXRpb24gYmFzZWQgb24gbmV3IG1lbW9yeSBtYXBcbiIpOworCisJCS8qIElmIHVzaW5nIEFHUCwgdHJ5IHRvIGxvY2F0ZSB0aGUgQUdQIGFwZXJ0dXJlIGF0IHRoZSBzYW1lCisJCSAqIGxvY2F0aW9uIGluIHRoZSBjYXJkIGFuZCBvbiB0aGUgYnVzLCB0aG91Z2ggd2UgaGF2ZSB0bworCQkgKiBhbGlnbiBpdCBkb3duLgorCQkgKi8KKyNpZiBfX09TX0hBU19BR1AKKwkJLyogWFhYICovCisJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQliYXNlID0gZGV2LT5hZ3AtPmJhc2U7CisJCQkvKiBDaGVjayBpZiB2YWxpZCAqLworCQkJaWYgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID49IGRldl9wcml2LT5mYl9sb2NhdGlvbiAmJgorCQkJICAgIGJhc2UgPCAoZGV2X3ByaXYtPmZiX2xvY2F0aW9uICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxKSkgeworCQkJCURSTV9JTkZPKCJDYW4ndCB1c2UgQUdQIGJhc2UgQDB4JTA4bHgsIHdvbid0IGZpdFxuIiwKKwkJCQkJIGRldi0+YWdwLT5iYXNlKTsKKwkJCQliYXNlID0gMDsKKwkJCX0KKwkJfQorI2VuZGlmCisJCS8qIElmIG5vdCBvciBpZiBBR1AgaXMgYXQgMCAoTWFjcyksIHRyeSB0byBwdXQgaXQgZWxzZXdoZXJlICovCisJCWlmIChiYXNlID09IDApIHsKKwkJCWJhc2UgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZTsKKwkJCWlmIChiYXNlIDwgZGV2X3ByaXYtPmZiX2xvY2F0aW9uIHx8CisJCQkgICAgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJiAweGZmZmZmZmZmdWwpIDwgYmFzZSkKKwkJCQliYXNlID0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uCisJCQkJCS0gZGV2X3ByaXYtPmdhcnRfc2l6ZTsKKwkJfQorCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA9IGJhc2UgJiAweGZmYzAwMDAwdTsKKwkJaWYgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICE9IGJhc2UpCisJCQlEUk1fSU5GTygiR0FSVCBhbGlnbmVkIGRvd24gZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAorCQkJCSBiYXNlLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfQorCisjaWYgX19PU19IQVNfQUdQCisJLyogWFhYICovCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCisJCWRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ID0gKGRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldAorCQkJCQkJIC0gZGV2LT5hZ3AtPmJhc2UKKwkJCQkJCSArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwllbHNlCisjZW5kaWYKKwkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0CisJCQkJCQkgLSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsCisJCQkJCQkgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisKKwlEUk1fREVCVUcoImZiIDB4JTA4eCBzaXplICVkXG4iLAorCQkgICh1bnNpZ25lZCBpbnQpIGRldl9wcml2LT5mYl9sb2NhdGlvbiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+ZmJfc2l6ZSk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9zaXplICVkXG4iLCBkZXZfcHJpdi0+Z2FydF9zaXplKTsKKwlEUk1fREVCVUcoImRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0IDB4JTA4eFxuIiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCAweCUwOGx4XG4iLAorCQkgIGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0KTsKKworCWRldl9wcml2LT5yaW5nLnN0YXJ0ID0gKHUzMiAqKSBkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlOworCWRldl9wcml2LT5yaW5nLmVuZCA9ICgodTMyICopIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUKKwkJCSAgICAgICsgaW5pdC0+cmluZ19zaXplIC8gc2l6ZW9mKHUzMikpOworCWRldl9wcml2LT5yaW5nLnNpemUgPSBpbml0LT5yaW5nX3NpemU7CisJZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3ID0gZHJtX29yZGVyKGluaXQtPnJpbmdfc2l6ZSAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGUgPSAvKiBpbml0LT5ycHRyX3VwZGF0ZSAqLyA0MDk2OworCWRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPSBkcm1fb3JkZXIoLyogaW5pdC0+cnB0cl91cGRhdGUgKi8gNDA5NiAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZSA9IC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzI7CisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZV9sMm93ID0gZHJtX29yZGVyKC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzIgLyAxNik7CisKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSAoZGV2X3ByaXYtPnJpbmcuc2l6ZSAvIHNpemVvZih1MzIpKSAtIDE7CisKKwlkZXZfcHJpdi0+cmluZy5oaWdoX21hcmsgPSBSQURFT05fUklOR19ISUdIX01BUks7CisKKyNpZiBfX09TX0hBU19BR1AKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQkvKiBYWFggdHVybiBvZmYgcGNpZSBnYXJ0ICovCisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJCS8qIGlmIHdlIGhhdmUgYW4gb2Zmc2V0IHNldCBmcm9tIHVzZXJzcGFjZSAqLworCQlpZiAoIWRldl9wcml2LT5wY2lnYXJ0X29mZnNldF9zZXQpIHsKKwkJCURSTV9FUlJPUigiTmVlZCBnYXJ0IG9mZnNldCBmcm9tIHVzZXJzcGFjZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJRFJNX0RFQlVHKCJVc2luZyBnYXJ0IG9mZnNldCAweCUwOGx4XG4iLCBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQpOworCisJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQorCQkJZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KKwkJCWRldl9wcml2LT5wY2lnYXJ0X29mZnNldCArIGRldl9wcml2LT5mYl9hcGVyX29mZnNldDsKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLnNpemUgPQorCQkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplOworCisJCWRybV9jb3JlX2lvcmVtYXBfd2MoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuaGFuZGxlKSB7CisJCQlEUk1fRVJST1IoImlvcmVtYXAgZmFpbGVkLlxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0KKwkJCWRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZy5oYW5kbGU7CisKKwkJRFJNX0RFQlVHKCJTZXR0aW5nIHBoeXNfcGNpX2dhcnQgdG8gJXAgJTA4bFhcbiIsCisJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYWRkciwKKwkJCSAgZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0KTsKKworCQlpZiAoIXI2MDBfcGFnZV90YWJsZV9pbml0KGRldikpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXQgR0FSVCB0YWJsZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSkKKwkJCXI3MDBfdm1faW5pdChkZXYpOworCQllbHNlCisJCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwl9CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKQorCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwllbHNlCisJCXI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOworCisJcjYwMF9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYsIGZpbGVfcHJpdik7CisKKwlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOworCisJcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlyNjAwX3Rlc3Rfd3JpdGViYWNrKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKSB7CisJCXI3MDBfdm1faW5pdChkZXYpOworCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwl9IGVsc2UgeworCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwkJcjYwMF9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CisJfQorCXI2MDBfY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOworCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogV2FpdCBmb3IgdGhlIENQIHRvIGdvIGlkbGUuCisgKi8KK2ludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCUJFR0lOX1JJTkcoNSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0VWRU5UX1dSSVRFLCAwKSk7CisJT1VUX1JJTkcoUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiB3YWl0IGZvciAzRCBpZGxlIGNsZWFuICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfV0FJVF9VTlRJTCAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhSQURFT05fV0FJVF8zRF9JRExFIHwgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKKworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7CisKKwlyZXR1cm4gcjYwMF9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKK30KKworLyogU3RhcnQgdGhlIENvbW1hbmQgUHJvY2Vzc29yLgorICovCit2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXUzMiBjcF9tZTsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlCRUdJTl9SSU5HKDcpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9NRV9JTklUSUFMSVpFLCA1KSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMSk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA8IENISVBfUlY3NzApKQorCQlPVVRfUklORygweDAwMDAwMDAzKTsKKwllbHNlCisJCU9VVF9SSU5HKDB4MDAwMDAwMDApOworCU9VVF9SSU5HKChkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgLSAxKSk7CisJT1VUX1JJTkcoUjYwMF9NRV9JTklUSUFMSVpFX0RFVklDRV9JRCgxKSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJQURWQU5DRV9SSU5HKCk7CisJQ09NTUlUX1JJTkcoKTsKKworCS8qIHNldCB0aGUgbXV4IGFuZCByZXNldCB0aGUgaGFsdCBiaXQgKi8KKwljcF9tZSA9IDB4ZmY7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfQ05UTCwgY3BfbWUpOworCisJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAxOworCit9CisKK3ZvaWQgcjYwMF9kb19jcF9yZXNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdTMyIGN1cl9yZWFkX3B0cjsKKwlEUk1fREVCVUcoIlxuIik7CisKKwljdXJfcmVhZF9wdHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGN1cl9yZWFkX3B0cik7CisJU0VUX1JJTkdfSEVBRChkZXZfcHJpdiwgY3VyX3JlYWRfcHRyKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOworfQorCit2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdWludDMyX3QgY3BfbWU7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwljcF9tZSA9IDB4ZmYgfCBSNjAwX0NQX01FX0hBTFQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBjcF9tZSk7CisKKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7Cit9CisKK2ludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlSSU5HX0xPQ0FMUzsKKworCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQKKwkJCQkJKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKKwkJaW50IGR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6ZW9mKHUzMik7CisKKwkJRFJNX0RFQlVHKCJkd29yZHM6JWRcbiIsIGR3b3Jkcyk7CisJCURSTV9ERUJVRygib2Zmc2V0IDB4JWx4XG4iLCBvZmZzZXQpOworCisKKwkJLyogSW5kaXJlY3QgYnVmZmVyIGRhdGEgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2IGR3b3Jkcy4KKwkJICogcGFkIHRoZSBkYXRhIHdpdGggYSBUeXBlLTIgQ1AgcGFja2V0LgorCQkgKi8KKwkJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQkJdTMyICpkYXRhID0gKHUzMiAqKQorCQkJICAgICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQorCQkJICAgICArIGJ1Zi0+b2Zmc2V0ICsgc3RhcnQpOworCQkJZGF0YVtkd29yZHMrK10gPSBSQURFT05fQ1BfUEFDS0VUMjsKKwkJfQorCisJCS8qIEZpcmUgb2ZmIHRoZSBpbmRpcmVjdCBidWZmZXIgKi8KKwkJQkVHSU5fUklORyg0KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0lORElSRUNUX0JVRkZFUiwgMikpOworCQlPVVRfUklORygob2Zmc2V0ICYgMHhmZmZmZmZmYykpOworCQlPVVRfUklORygodXBwZXJfMzJfYml0cyhvZmZzZXQpICYgMHhmZikpOworCQlPVVRfUklORyhkd29yZHMpOworCQlBRFZBTkNFX1JJTkcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhjOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX21pY3JvY29kZS5oCkBAIC0wLDAgKzEsMjMyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgUjYwMF9NSUNST0NPREVfSAorI2RlZmluZSBSNjAwX01JQ1JPQ09ERV9ICisKK3N0YXRpYyBjb25zdCBpbnQgTUVfSlVNUF9UQUJMRV9TVEFSVCA9IDE3NjQ7CitzdGF0aWMgY29uc3QgaW50IE1FX0pVTVBfVEFCTEVfRU5EICAgPSAxNzkyOworCisjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgorI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAorCitzdGF0aWMgY29uc3QgdTMyIFI2MDBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwODcgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWUxIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4YzA0MDM2MjAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDhmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA4ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlhIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5YyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWMgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMjggfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGM1IH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwY2YgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBjZSB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDAgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZDYgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWVhIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmMSB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGYxIH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmNiB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAzIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTBkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTEwIH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTI3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTUxIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNTEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxN2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTczIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxNmYgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE4NCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE4OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTI4IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA2MDBlMmQsIDB4MWFhIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNjAwZTJkLCAweDFhYSB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFhNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFjZCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxYzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFjNSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxYmUgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFkNiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDIgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTUgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDFmMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MWYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjA2IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxZmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjFjIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzNSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDJmZSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjY1IH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI0OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYWEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1YSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJkMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjNmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTI4IH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyODYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjMiB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmMyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWU0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzAxIH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDMzNCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzNkIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDM0OSB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzQ5IH0sCisgICAgeyAweDAwMDAyMTA0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2MCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzNzYgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4MCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5OCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzlhIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzhlIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYWIgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2JlIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzY2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2NmIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2Q1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZTIgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZWEgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NDQgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDRkIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NDQ5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NDRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDhhIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDQ4YiB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkzIH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGFlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NGFjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiMiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiOSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGJiIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGViIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGNlIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZTAwMDAwMDAsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDRmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYwMiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTQxIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NDkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTQ5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTU5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NTU0IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NTU3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU1ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2QgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4YiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTk5IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NTlmIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDViNyB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2EsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlMSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg1ZGMgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NWY5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2MTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjE0IH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMzMwNGVmLCAweDA1OWIwMjM5LCAweDAwMCB9LAorICAgIHsgMHgwMWIwMDE1OSwgMHgwNDI1MDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDIxMjAxZjYsIDB4MDIzOTAxNDIsIDB4MDAwIH0sCisgICAgeyAweDAyMTAwMjJlLCAweDAyODkwMjJhLCAweDAwMCB9LAorICAgIHsgMHgwM2MyMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDVjZDA1Y2UsIDB4MDMwODA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNWEwLCAweDAzMDkwMzI5LCAweDAwMCB9LAorICAgIHsgMHgwMzEzMDI2YiwgMHgwMzJiMDMxZCwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTJjLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwM2E1MDU5YiwgMHgwNGEyMDMyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ4MTA0MzMsIDB4MDQyMzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA0YmIwNGVkLCAweDA0MjcwNGM4LCAweDAwMCB9LAorICAgIHsgMHgwNDMzMDRmNCwgMHgwMzNhMDM2NSwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNWI5MDVhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDAwNzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDNlMzAzZDgsIDB4MDNmMzAzZjEsIDB4MDAwIH0sCisgICAgeyAweDAzZjkwM2Y1LCAweDAzZjcwM2ZiLCAweDAwMCB9LAorICAgIHsgMHgwNDA3MDQwMywgMHgwNDBmMDQwYiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxNzA0MTMsIDB4MDQxZjA0MWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjAwLCAweDA2MTkwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSNjAwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4ZDQwMDcxLAorMHhkNDAwNzIsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDgwMDAwMywKKzB4Y2EwNDAwLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDQsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWIsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwZCwKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBkLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDU0LAorMHhkNDAwNzMsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOSwKKzB4ZDRjMDFlLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAyLAorMHgwNjIwMDEsCisweGM2MDgzZSwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3YSwKKzB4ZDQyMDEzLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGUsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4M2UsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDQwMDczLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMWI5LAorMHgwNjIwMDEsCisweDBhMjAwMSwKKzB4ZDYwMDc0LAorMHhjNDA4MzYsCisweGM2MTA0MCwKKzB4OTg4MDA3LAorMHhjYzM4MzUsCisweDk1MDEwZiwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMiwKKzB4ZDQyMDYyLAorMHhjYzE0MzMsCisweDg0MDFiYywKKzB4ZDQwMDcwLAorMHhkNTQwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDRjMDFhLAorMHg4NDAxYmMsCisweGQ1MDAxYSwKKzB4Y2MwNDQzLAorMHgzNTEwMWYsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjksCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDQsCisweDk4NDAzYSwKKzB4Y2MyYzQ2LAorMHg5NTgwMDQsCisweGNjMDQ0NSwKKzB4ODAwMWI5LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMywKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYzLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNDcsCisweDlhODAwOSwKKzB4Y2MxNDQ4LAorMHg5ODQwZGEsCisweGQ0MDA2ZCwKKzB4Y2MxODQ0LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGNjLAorMHhkNTgwMWEsCisweDk2YzBkMywKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAyLAorMHhlYzAwN2YsCisweDlhYzBjYSwKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOSwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDljLAorMHhkNDAwNmQsCisweDk4NDA5YSwKKzB4ZDQwMDZlLAorMHhjYzA4NDcsCisweGNjMGM0OCwKKzB4Y2MxMDQ0LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTA0LAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDgsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiYywKKzB4MDAwMDAwLAorMHg4NDAxYmMsCisweGQ3ODA2ZiwKKzB4ODAwMDAyLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmFmLAorMHg3YzczOGIsCisweDg0MDFiYywKKzB4ZDc4MDZmLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTYsCisweDAwMDAwMCwKKzB4ODAwMTY0LAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDQ5LAorMHg5OTAwMDQsCisweGQ0MDA3MSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMWYsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4N2Q4MzgwLAorMHhkNTgwNmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4ODAwMWI5LAorMHhkNjAwNzQsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDIsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3NCwKKzB4MDIwMTdiLAorMHgwMzAwOTAsCisweDA0MDA4MCwKKzB4MDUwMDA1LAorMHgwNjAwNDAsCisweDA3MDAzMywKKzB4MDgwMTJmLAorMHgwOTAwNDcsCisweDBhMDAzNywKKzB4MTAwMWI3LAorMHgxNzAwYTQsCisweDIyMDEzZCwKKzB4MjMwMTRjLAorMHgyMDAwYjUsCisweDI0MDEyOCwKKzB4MjcwMDRlLAorMHgyODAwNmIsCisweDJhMDA2MSwKKzB4MmIwMDUzLAorMHgyZjAwNjYsCisweDMyMDA4OCwKKzB4MzQwMTgyLAorMHgzYzAxNTksCisweDNmMDA3MywKKzB4NDEwMThmLAorMHg0NDAxMzEsCisweDU1MDE3NiwKKzB4NTYwMTdkLAorMHg2MDAwMGMsCisweDYxMDAzNSwKKzB4NjIwMDM5LAorMHg2MzAwMzksCisweDY0MDAzOSwKKzB4NjUwMDM5LAorMHg2NjAwMzksCisweDY3MDAzOSwKKzB4NjgwMDNiLAorMHg2OTAwNDIsCisweDZhMDA0OSwKKzB4NmIwMDQ5LAorMHg2YzAwNDksCisweDZkMDA0OSwKKzB4NmUwMDQ5LAorMHg2ZjAwNDksCisweDczMDFiNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MTBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ1IH0sCisgICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTQgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhYyB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQwIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUzIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2NiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3YSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4ZiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWEwIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWUgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjEgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhZiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViZSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjNCB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVkMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUzIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDUgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGUgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2QgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjNiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjhiIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4Njk1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNTAyLCAweDA1YzAwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0OTA2NGEsIDB4MDMxZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWM1LCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNTUxLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDVjMCwgMHgwNGJiMDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5YTA0NTAsIDB4MDQzZDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA0ZDAwNWMwLCAweDA0NDEwNGRkLCAweDAwMCB9LAorICAgIHsgMHgwNDUwMDUwNywgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNjNmMDVjNywgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDAwNzA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA0MzgwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc5LCAweDA2OTcwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYxMF9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjIwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2IxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjUgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5YyB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5MCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTIgfSwKKyAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOWUgfSwKKyAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MwIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAorICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAorICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCisgICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NSB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDY2IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGE0IH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGIwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YWMgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YzcgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2UgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkMCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwMCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGVmIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlMyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUxOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCisgICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCisgICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjdiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1N2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGYgfSwKKyAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4ZCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhMCB9LAorICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTllIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIxIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWYgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YmUgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YzQgfSwKKyAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIxLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1ZDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwNDAzNjIxLCAweDVlMyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZTMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjA1IH0sCisgICAgeyAweDAwMDBhMDkyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwOTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDFmZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjBlIH0sCisgICAgeyAweDAwMDRhMDAzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTAwMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwNGEwMTAsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmIgfSwKKyAgICB7IDB4MDAwNGEwMTEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDExLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTcsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAwNjJkLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NjNkIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYzYiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2NDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg2MmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY4YiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY5MiB9LAorICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDUwMiwgMHgwNWMwMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNkNzA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA2NDkwNjRhLCAweDAzMWYwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjNSwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDU1MSwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNiYTA1YzAsIDB4MDRiYjAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OWEwNDUwLCAweDA0M2QwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNGQwMDVjMCwgMHgwNDQxMDRkZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ1MDA1MDcsIDB4MDM1MTAzNzUsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDYzZjA1YzcsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDAwMDcwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAorICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCisgICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNDM4MDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY3OSwgMHgwNjk3MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MjBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDVlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4ZCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhMSB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNiIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2QgfSwKKyAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZmQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlYyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTYzIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThjIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGEgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OWQgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5YiB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJiIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWMxIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWNkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwMiB9LAorICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwYiB9LAorICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEwIH0sCisgICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzYSB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2M2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2ODggfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhhIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGYgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA0ZmYsIDB4MDViZDAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNjQ2MDY0NywgMHgwMzFmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YzIsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCisgICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1NGUsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAzYmEwNWJkLCAweDA0YjgwMzQ0LCAweDAwMCB9LAorICAgIHsgMHgwNDk3MDQ0ZCwgMHgwNDNkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDRjZDA1YmQsIDB4MDQ0MTA0ZGEsIDB4MDAwIH0sCisgICAgeyAweDA0NGQwNTA0LCAweDAzNTEwMzc1LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA2M2MwNWM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwMDA3MDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDQzODA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2NzYsIDB4MDY5NDAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjMwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxYjgsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFhOCwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmYwLAorMHgwNDJjMDQsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDAzLAorMHg3Y2Q1ODAsCisweDI1OWMwMywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA1MywKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHhkNDgwNjAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4ZDQ4MDYxLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHhkNDgwMTYsCisweGQ0YzAxNiwKKzB4ZDQ4MDFlLAorMHg4MDAxYjgsCisweGQ0YzAxZSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4MDA0LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ZDQyMDEzLAorMHhkNTYwNjUsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhkNTYwMWMsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgzZjcsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHg4MDAwNzksCisweGQ0MjAxMywKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTg4M2VmLAorMHhjYTE0MDAsCisweGQ0MDA2NCwKKzB4ODAwMDhkLAorMHgwMDAwMDAsCisweGM0MTQzMiwKKzB4YzYxODQzLAorMHhjNDA4MmYsCisweDk1NDAwNSwKKzB4YzQwYzMwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg5NTgzZjUsCisweGM0MTAzMSwKKzB4ZDQ0MDMzLAorMHhkNTIwNjUsCisweGQ0YTAxYywKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGU0MDE1ZSwKKzB4ZDQwMDFlLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4Y2ExODAwLAorMHgwYTIwMDEsCisweGQ2MDA3NiwKKzB4YzQwODM2LAorMHg5ODgwMDcsCisweGM2MTA0NSwKKzB4OTUwMTEwLAorMHhkNDAwMWYsCisweGQ0NjA2MiwKKzB4ODAwMDAwLAorMHhkNDIwNjIsCisweGNjMzgzNSwKKzB4Y2MxNDMzLAorMHg4NDAxYmIsCisweGQ0MDA3MiwKKzB4ZDU0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTIwMDFhLAorMHg4NDAxYmIsCisweGUyMDAxYSwKKzB4Y2MxMDRiLAorMHhjYzA0NDcsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjgsCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDgsCisweDk4NDAzYSwKKzB4Y2MyYzRhLAorMHg5NTgwMDQsCisweGNjMDQ0OSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNGMsCisweDlhODAwOSwKKzB4Y2MxNDRkLAorMHg5ODQwZGMsCisweGQ0MDA2ZCwKKzB4Y2MxODQ4LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGM5LAorMHhkNTgwMWEsCisweDk2YzBkNSwKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAwLAorMHhlYzAwN2YsCisweDlhYzBjYywKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDllLAorMHhkNDAwNmQsCisweDk4NDA5YywKKzB4ZDQwMDZlLAorMHhjYzA4NGMsCisweGNjMGM0ZCwKKzB4Y2MxMDQ4LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTAxLAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDksCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiZCwKKzB4MDAwMDAwLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmIwLAorMHg3YzczOGIsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTcsCisweDAwMDAwMCwKKzB4ODAwMTYxLAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDRlLAorMHg5OTAwMDQsCisweGQ0MDA3MywKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMjEsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4MDQyODAyLAorMHg3ZDgzODAsCisweGQ1YTg2ZiwKKzB4ZDU4MDY2LAorMHhkNzQwMWUsCisweGVjMDA1ZSwKKzB4YzgyNDAyLAorMHhjODI0MDIsCisweDgwMDFiOCwKKzB4ZDYwMDc2LAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGQ0MDAxZiwKKzB4ODAwMDAwLAorMHhkNDAwMWYsCisweGQ0MDAxZiwKKzB4ODgwMDAwLAorMHhkNDAwMWYsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3MSwKKzB4MDIwMTc4LAorMHgwMzAwOGYsCisweDA0MDA3ZiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTJjLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWI2LAorMHgxNzAwYTIsCisweDIyMDEzYSwKKzB4MjMwMTQ5LAorMHgyMDAwYjQsCisweDI0MDEyNSwKKzB4MjcwMDRkLAorMHgyODAwNmEsCisweDJhMDA2MCwKKzB4MmIwMDUyLAorMHgyZjAwNjUsCisweDMyMDA4NywKKzB4MzQwMTdmLAorMHgzYzAxNTYsCisweDNmMDA3MiwKKzB4NDEwMThjLAorMHg0NDAxMmUsCisweDU1MDE3MywKKzB4NTYwMTdhLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MzVfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2MiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWJkIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDQ4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTEgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhOSB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNkIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGZkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTAyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NzggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2YiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3NyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4YyB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThhIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTlkIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWIgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YWUgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhYyB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjMSB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDIgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGIgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMCB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOCB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2EgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4Njg4IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4YSB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhmIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNGZmLCAweDA1YmQwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0NjA2NDcsIDB4MDMxZjA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWMyLCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNTRlLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDViZCwgMHgwNGI4MDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5NzA0NGQsIDB4MDQzZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA0Y2QwNWJkLCAweDA0NDEwNGRhLCAweDAwMCB9LAorICAgIHsgMHgwNDRkMDUwNCwgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNjNjMDVjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDAwNzA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA0MzgwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc2LCAweDA2OTQwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzNV9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjcwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjI0IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjIgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjYgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmMgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYWQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZiB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTQgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhNCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM4ZSB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5YSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2M0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2M5IH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2RhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2UwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZWQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZjUgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0OTcgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ5ZiB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMzIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGYzIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZTIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGQ2IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTBjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NmEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU1OSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YmMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkzIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTEgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhMiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViMSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDViNyB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWQ2IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZjggfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MDEgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwNiB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYxZSB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2MzAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjIwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2N2EgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjdjIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjdmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2ODEgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2ODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDRmNSwgMHgwNWIzMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzNTA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNjZDA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA2M2MwNjNkLCAweDAzMWYwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViOCwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDU0NCwgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDNiMjA1YjMsIDB4MDRhZTAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OGQwNDQzLCAweDA0MzMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNGMzMDViMywgMHgwNDM3MDRkMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ0MzA0ZmEsIDB4MDM1MTAzNzEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDYzMjA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDAwMDcwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAzZWUwM2UzLCAweDAzZmUwM2ZjLCAweDAwMCB9LAorICAgIHsgMHgwNDA0MDQwMCwgMHgwNDAyMDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxMjA0MGUsIDB4MDQxYTA0MTYsIDB4MDAwIH0sCisgICAgeyAweDA0MjIwNDFlLCAweDA0MmEwNDI2LCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNDJlMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY2OCwgMHgwNjg2MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2NzBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSUzc4MF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZjMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZjIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkMSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzU1IH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzY3IH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmEgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM2NyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3NiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I5IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTIgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2E0IH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNiNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MyIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4YzAzMDBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAzNDQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NyB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAyMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDZlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDk4IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0YTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWIgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGFjIH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YjQgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2IgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDYyNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0Y2YgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZDYgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkOCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwOCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGY3IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUyMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYxMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTZjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkyIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTAgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMjYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5ZSB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWI4IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWJlIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWMzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzMgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDVjZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg1Y2QgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWYzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NWVkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDYwNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjIwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDYyMiB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDYyNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjI3IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA1MGEsIDB4MDViYTAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0NDEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWUyMDVlMywgMHgwMzFmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMyMDA1YmYsIDB4MDMyMDAzNGEsIDB4MDAwIH0sCisgICAgeyAweDAzMzQwMjgyLCAweDAzNGMwMzNlLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1NTcsIDB4MDViYTAzMmEsIDB4MDAwIH0sCisgICAgeyAweDAzYmMwNWJhLCAweDA0YzMwMzRlLCAweDAwMCB9LAorICAgIHsgMHgwNGEyMDQ1NSwgMHgwNDNmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDRkODA1YmEsIDB4MDQ0MzA0ZTUsIDB4MDAwIH0sCisgICAgeyAweDA0NTUwNTBmLCAweDAzNWIwMzdiLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1ZDgwNWMxLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwMDA3MDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDQzYTA0MzgsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2MGUsIDB4MDYyYzAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJTNzgwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxZGIsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFjYiwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmUwLAorMHgwNDJjMDgsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDA3LAorMHg3Y2Q1ODAsCisweDI1OWMwNywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg4MDAxZGIsCisweGQ0ODAyNCwKKzB4Y2EwODAwLAorMHg3YzAwYzAsCisweGM4MTQyNSwKKzB4YzgxODI0LAorMHg3Yzk0ODgsCisweDdjOTg4MCwKKzB4YzIwMDAzLAorMHhkNDAwNzUsCisweDdjNzQ0YywKKzB4ODAwMDY0LAorMHhkNDQwMWUsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA2MiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDEsCisweGQ0ODA2MCwKKzB4OTRjMDAzLAorMHgwNDEwMDEsCisweDA0MTAwMiwKKzB4ZDUwMDI1LAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWRiLAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDljLAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDBiMCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWRlLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWRlLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWRiLAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFkYiwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAxMTMsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDExMywKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBlYywKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxZGIsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEyNCwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmI2LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyOWEsCisweDAwMDAwMCwKKzB4ODQwMWRlLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDI4ZCwKKzB4N2M3MzhiLAorMHg4NDAxZGUsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjc0LAorMHgwMDAwMDAsCisweDgwMDE4NCwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxZGIsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE5NCwKKzB4MDIwMTliLAorMHgwMzAwYjIsCisweDA0MDBhMiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTRmLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWQ5LAorMHgxNzAwYzUsCisweDIyMDE1ZCwKKzB4MjMwMTZjLAorMHgyMDAwZDcsCisweDI0MDE0OCwKKzB4MjYwMDRkLAorMHgyNzAwNWMsCisweDI4MDA4ZCwKKzB4MjkwMDUxLAorMHgyYTAwN2UsCisweDJiMDA2MSwKKzB4MmYwMDg4LAorMHgzMjAwYWEsCisweDM0MDFhMiwKKzB4MzYwMDZmLAorMHgzYzAxNzksCisweDNmMDA5NSwKKzB4NDEwMWFmLAorMHg0NDAxNTEsCisweDU1MDE5NiwKKzB4NTYwMTlkLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDczMDFkOSwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3NzBfY3BfbWljcm9jb2RlW10gPSB7CisweGNjMDAwM2VhLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAxLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDEsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGQsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4MDlkYzAwMDEsCisweDk1YzBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM5ZiwKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzOWYsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYzLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMTAsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDEyMCwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNSwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNSwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM5LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2QsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MSwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ1LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDksCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZSwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIxLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwM2EyLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyM2IsCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzksCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODIsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzYsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MiwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTYzLAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZiwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjMsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDQsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMiwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU5LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZjAsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOSwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4MDk1NDAwMDEsCisweDk1NDBmZmZmLAorMHhjODE0MDAxMSwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMzlmLAorMHhjY2MxYTJhNCwKKzB4N2M0MGMwMDAsCisweGNjNDAwMDBkLAorMHg5NGMwZmRmZiwKKzB4Y2M0MDAwMGUsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwNSwKKzB4MDhjYzAwMDEsCisweGM4MTQwMDA1LAorMHg5OTQwMDAxNCwKKzB4MDAwMDAwMDAsCisweDk4YzBmZmZiLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAwMDIsCisweDdkMDA4MDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDk5NDAwMDBjLAorMHhjODE4MDAwYywKKzB4N2M0MTAwMDAsCisweDk1ODBmZGVlLAorMHhjODIwMDAwZSwKKzB4YzgxYzAwMGQsCisweDY2MjAwMDIwLAorMHg3ZTFlMDAyYywKKzB4MjUyNDAwMDIsCisweDdlNjI0MDIwLAorMHg4MDAwMDAwMSwKKzB4Y2NlNjAwMDAsCisweDdjNDEwMDAwLAorMHhjYzAwMDA2YywKKzB4Y2MwMDAwNmQsCisweGM4MTgwMDFmLAorMHhjODFjMDAxZSwKKzB4NjU5ODAwMjAsCisweDdkZDljMDJjLAorMHg3Y2Q0YzAwYywKKzB4Y2NkZTAwMDAsCisweDQ1ZGMwMDA0LAorMHhjODI4MDAxNywKKzB4OTY4MDAwMGYsCisweGMwMGUwMDAxLAorMHgyODY4MDAwOCwKKzB4MmFhYzAwMTYsCisweDMyYTgwMGZmLAorMHgwZWIwMDA0OSwKKzB4N2YyZjAwMGIsCisweDk3MDAwMDA2LAorMHgwMDAwMDAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg4MDAwMDIyMywKKzB4N2M0MTAwMDAsCisweDgwMDAwMjI2LAorMHhkMDQwMDA3ZiwKKzB4ODQwMDAyM2IsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4OTQwMDAwMDAsCisweGM4M2MwMDFhLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGMwMzYxZjkwLAorMHhjMDM4N2ZmZiwKKzB4N2MwM2MwMTAsCisweDdmN2I0MDBjLAorMHhjZjQxMjE3YywKKzB4Y2ZjMTIxN2QsCisweGNjMDEyMTdlLAorMHhjMDNhMDAwNCwKKzB4MDQzNDIxN2YsCisweDdmN2I0MDBjLAorMHhjYzM1MDAwMCwKKzB4YzgzYzAwMDQsCisweDJiZmMwMDFmLAorMHgwNDM4MDAyMCwKKzB4OTdjMDAwMDUsCisweGNjMDAwMDYyLAorMHg5YjgwMDAwMCwKKzB4MGJiODAwMDEsCisweDgwMDAwMjQ3LAorMHhjYzAwMDA3MSwKKzB4Y2MwMWExZjQsCisweDA0MzgwMDE2LAorMHhjMDM2MDAwMiwKKzB4Y2Y4MWEyYTQsCisweDg4MDAwMDAwLAorMHhjZjQxMjAxMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDFjLAorMHg5NTAwMDAwNSwKKzB4MDRkNDAwMDEsCisweGNkNDAwMDY1LAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjgsCisweDA5NTQwMDAyLAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjYsCisweDg0MDAwMjZjLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDlkLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDJiLAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjYzAxYTFmNCwKKzB4ODQwMDAzYTIsCisweGNjMDAwMDQ2LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDg0MDAwMjdlLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDhiLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDE5LAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMjIsCisweGNmYzFhMmE0LAorMHg4NDAwMDNhMiwKKzB4Y2MwMDAwNDcsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTYsCisweDk5MDAwMDBkLAorMHhjYzQwMDA2NywKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjODE4MDNlYSwKKzB4OTk4MGZkNzcsCisweDdjNDBjMDAwLAorMHg5NGMwMDAwMywKKzB4YzgxMDAwMTYsCisweDk5MDAwMDA0LAorMHhjY2MwMDA2OCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAxNDgwMDAsCisweGNjMDAwMDQxLAorMHhjZDQxMzA0YSwKKzB4YzAxNDgwMDAsCisweDk5MDAwMDAwLAorMHhjODEwMDAxNiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjMDEyMDAwMSwKKzB4N2M1MTQwMGMsCisweDgwMDAwMDAxLAorMHhkMDU1MDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDI5MWMwMDFmLAorMHhjY2MwMDA0YSwKKzB4Y2QwMDAwNGIsCisweDk1YzAwMDAzLAorMHhjMDFjODAwMCwKKzB4Y2RjMTIwMTAsCisweGRkODMwMDAwLAorMHgwNTVjMjAwMCwKKzB4Y2MwMDAwNjIsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRjLAorMHhjZDAwMDA0ZCwKKzB4ZGQ4MzAwMDAsCisweDA1NWNhMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0ZSwKKzB4Y2QwMDAwNGYsCisweGRkODMwMDAwLAorMHgwNTVjYzAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTAsCisweGNkMDAwMDUxLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ZTAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUyLAorMHhjZDAwMDA1MywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmODgwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NCwKKzB4Y2QwMDAwNTUsCisweGRkODMwMDAwLAorMHgwNTVjZTAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTYsCisweGNkMDAwMDU3LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU4LAorMHhjZDAwMDA1OSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmM2ZjLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweGQwNDMyMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2MwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmOGUwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjg4MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2UwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjNmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4YzgxNDAzZTAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweDdkNDVjMDAwLAorMHhjZGMzMDAwMCwKKzB4ZDA0MzAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHhjODEwMDNlMiwKKzB4YzgxNDAzZTUsCisweGM4MTgwM2UzLAorMHhjODFjMDNlNCwKKzB4Y2Q4MTIxNjksCisweGNkYzEyMTZhLAorMHhjY2MxMjE2YiwKKzB4Y2MwMTIxNmMsCisweDA0MjAwMDA0LAorMHg3ZGExODAwMCwKKzB4N2Q5NjQwMDIsCisweDk2NDBmY2Q3LAorMHhjZDgwMDNlMywKKzB4MzEyODAwMDMsCisweGMwMmRmMDAwLAorMHgyNTE4MDAwOCwKKzB4N2RhZDgwMGIsCisweDdkYTk4MDBjLAorMHg4MDAwMDAwMSwKKzB4Y2Q4MDAzZTMsCisweDMwOGNmZmZmLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDlhNDAwMDEzLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjYzEyMTgwLAorMHhjZDAxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI5MTQwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1NDBmY2I5LAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDdjNDFjMDAwLAorMHg2NWI0MDAyMCwKKzB4N2Y1NzQwMmMsCisweGQ0Mzc4MTAwLAorMHg0Nzc0MDAwNCwKKzB4ZDQzNzgxMDAsCisweDQ3NzQwMDA0LAorMHhkNDM3ODEwMCwKKzB4NDc3NDAwMDQsCisweDA5ZGMwMDA0LAorMHhkNDM3ODEwMCwKKzB4OTljMGZmZjgsCisweDQ3NzQwMDA0LAorMHgyOTI0MDAxZiwKKzB4YzAzODAwMTksCisweDk2NDBmY2ExLAorMHhjMDNlMDAwNCwKKzB4Y2Y4MTIxZjgsCisweDM3ZTAyMWY5LAorMHhjYzIxMDAwMCwKKzB4YzgyMDAwMDQsCisweDJhMjAwMDE4LAorMHgzMjIwMDAwMSwKKzB4OWEwMGZmZmIsCisweGNmODEyMWY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxOCwKKzB4MzExMDAwMDEsCisweGMwMTYwMDgwLAorMHg5NTAwMDAwMywKKzB4YzAyYTAwMDQsCisweDdjZDRjMDBjLAorMHhjY2MxMjE3YywKKzB4Y2M0MTIxN2QsCisweGNjNDEyMTdlLAorMHg3YzQxODAwMCwKKzB4MWRiMDAwMDMsCisweDM2YTAyMTdmLAorMHg5YjAwMDAwMywKKzB4NDE5YzAwMDUsCisweDA0MWMwMDQwLAorMHg5OWMwMDAwMCwKKzB4MDlkYzAwMDEsCisweGNjMjEwMDAwLAorMHhjODI0MDAwNCwKKzB4MmE2YzAwMWYsCisweDQxOWMwMDA1LAorMHg5YWMwZmZmYSwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDA0ZDQwM2U2LAorMHg4MDAwMDAwMSwKKzB4Y2M1NDAwMDAsCisweDgwMDAwMzlmLAorMHhjYzQwMDNlYSwKKzB4YzAxYzgwMDAsCisweDA0NGNhMDAwLAorMHhjZGMxMjAxMCwKKzB4N2M0MTAwMDAsCisweGM4MTQwMDA5LAorMHgwNDE4MDAwMCwKKzB4MDQxYzAwMDgsCisweGNkODAwMDcxLAorMHgwOWRjMDAwMSwKKzB4MDU5ODAwMDEsCisweGNkMGQwMDAwLAorMHg5OWMwZmZmYywKKzB4Y2M4MDAwNjIsCisweDgwMDAwMzlmLAorMHhjZDQwMDA3MSwKKzB4YzAwZTAxMDAsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4YzgzYzAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMTAzMzMsCisweDAwMTAwMDA0LAorMHgwMDE3MDAwNiwKKzB4MDAyMTAwMDgsCisweDAwMjcwMDI4LAorMHgwMDI4MDAyMywKKzB4MDAyOTAwMjksCisweDAwMmEwMDI2LAorMHgwMDJiMDAyOSwKKzB4MDAyZDAwMzgsCisweDAwMmUwMDNmLAorMHgwMDJmMDA0YSwKKzB4MDAzNDAwNGMsCisweDAwMzYwMDMwLAorMHgwMDM5MDBhZiwKKzB4MDAzYTAwZDAsCisweDAwM2IwMGU1LAorMHgwMDNjMDBmZCwKKzB4MDAzZDAxNmMsCisweDAwM2YwMGFkLAorMHgwMDQxMDMzOCwKKzB4MDA0MzAzNmMsCisweDAwNDQwMThmLAorMHgwMDQ1MDBmZCwKKzB4MDA0NjAxYWQsCisweDAwNDcwMWFkLAorMHgwMDQ4MDIwMCwKKzB4MDA0OTAyMGUsCisweDAwNGEwMjU3LAorMHgwMDRiMDI4NCwKKzB4MDA1MjAyNjEsCisweDAwNTMwMjczLAorMHgwMDU0MDI4OSwKKzB4MDA1NzAyOWIsCisweDAwNjAwMjlmLAorMHgwMDYxMDJhZSwKKzB4MDA2MjAyYjgsCisweDAwNjMwMmMyLAorMHgwMDY0MDJjYywKKzB4MDA2NTAyZDYsCisweDAwNjYwMmUwLAorMHgwMDY3MDJlYSwKKzB4MDA2ODAyZjQsCisweDAwNjkwMmY4LAorMHgwMDZhMDJmYywKKzB4MDA2YjAzMDAsCisweDAwNmMwMzA0LAorMHgwMDZkMDMwOCwKKzB4MDA2ZTAzMGMsCisweDAwNmYwMzEwLAorMHgwMDcwMDMxNCwKKzB4MDA3MjAzODYsCisweDAwNzQwMzhjLAorMHgwMDc5MDM4YSwKKzB4MDA3YzAzMWUsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjc3MF9wZnBfbWljcm9jb2RlW10gPSB7CisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDgwMDAwMDAwLAorMHhkYzAzMDAwMCwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjODE4MDAwZSwKKzB4MzE5ODAwMDEsCisweDdjNDI0MDAwLAorMHg5NTgwMDI1MiwKKzB4N2M0MjgwMDAsCisweGM4MWMwMDFjLAorMHhjMDM3YzAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3Y2I0ODAwYiwKKzB4YzAzNjAwMDMsCisweDk5YzAwMDAwLAorMHhjODFjMDAxYywKKzB4N2NiNDgwMGMsCisweDI0ZDQwMDAyLAorMHg3ZDY1NDAwMCwKKzB4Y2Q0MDAwNDMsCisweGNlODAwMDQzLAorMHhjZDAwMDA0MywKKzB4Y2M4MDAwNDAsCisweGNlNDAwMDQwLAorMHhjZTgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmZkZSwKKzB4Y2QwMDAwNDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAxOCwKKzB4N2M0MTAwMDAsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHg4MDAwMDAwYywKKzB4MzE5ODAwMDIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHgyODhjMDAwOCwKKzB4MzBjYzAwMGYsCisweDM0MTAwMDAxLAorMHg3ZDBkMDAwOCwKKzB4ODAwMDAwMGMsCisweDdkOTE4MDBiLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4ZDQwMDAzYzAsCisweGQ0MDAwZmMwLAorMHhkNDAwMGZhMiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjYzQwMDNmOSwKKzB4ODAwMDAyNjEsCisweGNjNDAwM2Y4LAorMHhjODIwMDNmOCwKKzB4YzgxYzAzZjksCisweGM4MTgwM2ZiLAorMHhjMDM3ZmZmZiwKKzB4N2M0MTQwMDAsCisweGNmNDFhMjllLAorMHg2NjIwMDAyMCwKKzB4N2RlMWMwMmMsCisweDdkNThjMDA4LAorMHg3Y2RjYzAyMCwKKzB4NjhkMDAwMjAsCisweGMwMzYwMDAzLAorMHhjYzAwMDA1NCwKKzB4N2NiNDgwMGMsCisweDgwMDAwMDZhLAorMHhjYzgwMDA0MCwKKzB4N2M0MTgwMDAsCisweGNkODFhMjllLAorMHhjYzgwMDA0MCwKKzB4Y2Q4MDAwNDAsCisweDgwMDAwMDY4LAorMHhjYzAwMDA1NCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmQsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjYsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWYsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDQsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNWQsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYiwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNjEsCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVlLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZSwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMTgsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNiwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMTExLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDEwNywKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGQ4LAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwZDYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZiwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNjQsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEzLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNjQsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjYxLAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNjQsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOSwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGMsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYywKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlMywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiYywKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQzLAorMHhjYzRkMDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDk2NDAwMDBmLAorMHhjYzgwMDA0MCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4Y2NjMDAwNDMsCisweGNkMDAwMDQzLAorMHgzMWRjN2ZmZiwKKzB4Y2RjMDAwNDMsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4Y2Q0MDAwNDAsCisweGNkODAwMDQwLAorMHg4MDAwMDAwMCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDMwMjIzLAorMHgwMDA0MDIyYiwKKzB4MDAwNTAwYTAsCisweDAwMDIwMDAzLAorMHgwMDA2MDAzYywKKzB4MDAwNzAwMjcsCisweDAwMDgwMTkyLAorMHgwMDA5MDA0NCwKKzB4MDAwYTAwMmQsCisweDAwMTAwMjVmLAorMHgwMDE3MDBmMSwKKzB4MDAyMjAxZDgsCisweDAwMjMwMWU5LAorMHgwMDI2MDA0YywKKzB4MDAyNzAwNWYsCisweDAwMjAwMTFiLAorMHgwMDI4MDA5MywKKzB4MDAyOTAwNGYsCisweDAwMmEwMDg0LAorMHgwMDJiMDA2NSwKKzB4MDAyZjAwOGUsCisweDAwMzIwMGQ5LAorMHgwMDM0MDIzMywKKzB4MDAzNjAwNzUsCisweDAwMzkwMTBiLAorMHgwMDNjMDFmZCwKKzB4MDAzZjAwYTAsCisweDAwNDEwMjQ4LAorMHgwMDQ0MDE5NSwKKzB4MDA0ODAxOWUsCisweDAwNDkwMWM2LAorMHgwMDRhMDFkMCwKKzB4MDA1NTAyMjYsCisweDAwNTYwMjJlLAorMHgwMDYwMDAwYSwKKzB4MDA2MTAwMmEsCisweDAwNjIwMDMwLAorMHgwMDYzMDAzMCwKKzB4MDA2NDAwMzAsCisweDAwNjUwMDMwLAorMHgwMDY2MDAzMCwKKzB4MDA2NzAwMzAsCisweDAwNjgwMDM3LAorMHgwMDY5MDAzZiwKKzB4MDA2YTAwNDcsCisweDAwNmIwMDQ3LAorMHgwMDZjMDA0NywKKzB4MDA2ZDAwNDcsCisweDAwNmUwMDQ3LAorMHgwMDZmMDA0NywKKzB4MDA3MDAwNDcsCisweDAwNzMwMjVmLAorMHgwMDdiMDI0MSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MzBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzMwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQwNDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDEsCisweDdjNDBjMDAwLAorMHhjMDE2MDAwNCwKKzB4MzBkMDNmZmYsCisweDdkMTUwMDBjLAorMHhjYzExMDAwMCwKKzB4MjhkODAwMWUsCisweDMxOTgwMDAxLAorMHgyOGRjMDAxZiwKKzB4YzgyMDAwMDQsCisweDk1YzAwMDA2LAorMHg3YzQyNDAwMCwKKzB4Y2MwMDAwNjIsCisweDdlNTY4MDBjLAorMHhjYzI5MDAwMCwKKzB4YzgyNDAwMDQsCisweDdlMjYwMDBiLAorMHg5NTgwMDAwNiwKKzB4N2M0MmMwMDAsCisweGNjMDAwMDYyLAorMHg3ZWQ3MDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MmMwMDA0LAorMHg3ZTJlMDAwYywKKzB4Y2MwMDAwNjIsCisweDMxMTAzZmZmLAorMHg4MDAwMDAwMSwKKzB4Y2UxMTAwMDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDAsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1NywKKzB4N2M0MTgwMDAsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjYzQwMDA0NSwKKzB4Y2M0MDAwNDgsCisweDdjNDBjMDAwLAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDBjYTFmZCwKKzB4YzAxMjAwMDEsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4N2NkMGMwMGMsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1ZCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHhjMDJhMDAwMiwKKzB4N2M0MTAwMDAsCisweDdkMjkwMDBjLAorMHgzMDk0MDAwMSwKKzB4MzA5ODAwMDYsCisweDMwOWMwMzAwLAorMHgyOWRjMDAwOCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg5NTQwMDAwZiwKKzB4YzAyZTAwMDQsCisweDA1ZjAyMjU4LAorMHg3ZjJmMDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MjgwMDA0LAorMHhjY2MxMjE2OSwKKzB4Y2QwMTIxNmEsCisweGNlODEyMTZiLAorMHgwZGI0MDAwMiwKKzB4Y2MwMTIxNmMsCisweDk3NDAwMDBlLAorMHgwZGI0MDAwMCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHgwZGI0MDAwMiwKKzB4OTc0MDAwMDksCisweDBkYjQwMDAwLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4OTc0MDAwMDQsCisweDdlMDI4MDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDA0LAorMHg5NzQwZmY4YywKKzB4MDAwMDAwMDAsCisweGNlMDEyMTZkLAorMHhjZTQxMjE2ZSwKKzB4YzgyODAwMDMsCisweGM4MzQwMDBhLAorMHg5YjQwMDAwNCwKKzB4MDQzYzAwMDUsCisweDg0MDAwMjZiLAorMHhjYzAwMDA2MiwKKzB4MGRmNDAwMDAsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNiwKKzB4Y2U4MWEyYjcsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzQsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMSwKKzB4MGRmNDAwMDEsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNywKKzB4Y2U4MWEyYmIsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzUsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMiwKKzB4MGRmNDAwMDIsCisweDk3NDAwMDBiLAorMHhjODJjMDNlOCwKKzB4Y2U4MWEyYmYsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzYsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMywKKzB4YzgyYzAzZTksCisweGNlODFhMmMzLAorMHhjMDMwMDAwNiwKKzB4N2VmMzQwMjgsCisweGMwMzAwMDIwLAorMHg3ZjZiODAyMCwKKzB4N2ZiM2MwMjksCisweGNmODFhMmM3LAorMHg4MDAwMDAwMSwKKzB4Y2ZjMWEyZDQsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTE0MDAxZCwKKzB4MzE1NDAwMDEsCisweDk5NDAwMDBjLAorMHgzMTE4MTAwMCwKKzB4YzgxYzAwMTEsCisweDk1YzAwMDAwLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM3YywKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzN2MsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYyLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMGYsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDExZiwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNCwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNCwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM4LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2MsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MCwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ0LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDgsCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZCwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIyLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwMzdmLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyMzksCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzcsCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODMsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzcsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MSwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTY0LAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZCwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjIsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDMsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMSwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU4LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZWYsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOCwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDExLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAzN2MsCisweGNjYzFhMmE0LAorMHg3YzQwYzAwMCwKKzB4Y2M0MDAwMGQsCisweDk0YzBmZTAxLAorMHhjYzQwMDAwZSwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDA1LAorMHgwOGNjMDAwMSwKKzB4YzgxNDAwMDUsCisweDk5NDAwMDE0LAorMHgwMDAwMDAwMCwKKzB4OThjMGZmZmIsCisweDdjNDEwMDAwLAorMHg4MDAwMDAwMiwKKzB4N2QwMDgwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4OTk0MDAwMGMsCisweGM4MTgwMDBjLAorMHg3YzQxMDAwMCwKKzB4OTU4MGZkZjAsCisweGM4MjAwMDBlLAorMHhjODFjMDAwZCwKKzB4NjYyMDAwMjAsCisweDdlMWUwMDJjLAorMHgyNTI0MDAwMiwKKzB4N2U2MjQwMjAsCisweDgwMDAwMDAxLAorMHhjY2U2MDAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDZjLAorMHhjYzAwMDA2ZCwKKzB4YzgxODAwMWYsCisweGM4MWMwMDFlLAorMHg2NTk4MDAyMCwKKzB4N2RkOWMwMmMsCisweDdjZDRjMDBjLAorMHhjY2RlMDAwMCwKKzB4NDVkYzAwMDQsCisweGM4MjgwMDE3LAorMHg5NjgwMDAwZiwKKzB4YzAwZTAwMDEsCisweDI4NjgwMDA4LAorMHgyYWFjMDAxNiwKKzB4MzJhODAwZmYsCisweDBlYjAwMDQ5LAorMHg3ZjJmMDAwYiwKKzB4OTcwMDAwMDYsCisweDAwMDAwMDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDgwMDAwMjIxLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAyMjQsCisweGQwNDAwMDdmLAorMHg4NDAwMDIzOSwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHg5NDAwMDAwMCwKKzB4YzgzYzAwMWEsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4YzAzNjFmOTAsCisweGMwMzg3ZmZmLAorMHg3YzAzYzAxMCwKKzB4N2Y3YjQwMGMsCisweGNmNDEyMTdjLAorMHhjZmMxMjE3ZCwKKzB4Y2MwMTIxN2UsCisweGMwM2EwMDA0LAorMHgwNDM0MjE3ZiwKKzB4N2Y3YjQwMGMsCisweGNjMzUwMDAwLAorMHhjODNjMDAwNCwKKzB4MmJmYzAwMWYsCisweDA0MzgwMDIwLAorMHg5N2MwMDAwNSwKKzB4Y2MwMDAwNjIsCisweDliODAwMDAwLAorMHgwYmI4MDAwMSwKKzB4ODAwMDAyNDUsCisweGNjMDAwMDcxLAorMHhjYzAxYTFmNCwKKzB4MDQzODAwMTYsCisweGMwMzYwMDAyLAorMHhjZjgxYTJhNCwKKzB4ODgwMDAwMDAsCisweGNmNDEyMDEwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMWMsCisweDk1MDAwMDA1LAorMHgwNGQ0MDAwMSwKKzB4Y2Q0MDAwNjUsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2OCwKKzB4MDk1NDAwMDIsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2NiwKKzB4ODQwMDAyNmEsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOWYsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMmIsCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGNjMDFhMWY0LAorMHg4NDAwMDM3ZiwKKzB4Y2MwMDAwNDYsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4ODQwMDAyN2MsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOGQsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMTksCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAyMiwKKzB4Y2ZjMWEyYTQsCisweDg0MDAwMzdmLAorMHhjYzAwMDA0NywKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMGQsCisweGNjNDAwMDY3LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGM4MTgwM2VhLAorMHg5OTgwZmQ3OSwKKzB4N2M0MGMwMDAsCisweDk0YzAwMDAzLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMDQsCisweGNjYzAwMDY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDg0MDAwMjM5LAorMHhjMDE0ODAwMCwKKzB4Y2MwMDAwNDEsCisweGNkNDEzMDRhLAorMHhjMDE0ODAwMCwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE2LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGMwMTIwMDAxLAorMHg3YzUxNDAwYywKKzB4ODAwMDAwMDEsCisweGQwNTUwMDAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4MjkxYzAwMWYsCisweGNjYzAwMDRhLAorMHhjZDAwMDA0YiwKKzB4OTVjMDAwMDMsCisweGMwMWM4MDAwLAorMHhjZGMxMjAxMCwKKzB4ZGQ4MzAwMDAsCisweDA1NWMyMDAwLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGMsCisweGNkMDAwMDRkLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2EwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRlLAorMHhjZDAwMDA0ZiwKKzB4ZGQ4MzAwMDAsCisweDA1NWNjMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MCwKKzB4Y2QwMDAwNTEsCisweGRkODMwMDAwLAorMHgwNTVjZjhlMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTIsCisweGNkMDAwMDUzLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ODAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU0LAorMHhjZDAwMDA1NSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNlMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NiwKKzB4Y2QwMDAwNTcsCisweGRkODMwMDAwLAorMHgwNTVjZjAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTgsCisweGNkMDAwMDU5LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YzZmMsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4ZDA0MzIwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNhMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYzAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ZTAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmODgwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmM2ZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDNlMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4N2Q0NWMwMDAsCisweGNkYzMwMDAwLAorMHhkMDQzMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweGM4MTAwM2UyLAorMHhjODE0MDNlNSwKKzB4YzgxODAzZTMsCisweGM4MWMwM2U0LAorMHhjZDgxMjE2OSwKKzB4Y2RjMTIxNmEsCisweGNjYzEyMTZiLAorMHhjYzAxMjE2YywKKzB4MDQyMDAwMDQsCisweDdkYTE4MDAwLAorMHg3ZDk2NDAwMiwKKzB4OTY0MGZjZDksCisweGNkODAwM2UzLAorMHgzMTI4MDAwMywKKzB4YzAyZGYwMDAsCisweDI1MTgwMDA4LAorMHg3ZGFkODAwYiwKKzB4N2RhOTgwMGMsCisweDgwMDAwMDAxLAorMHhjZDgwMDNlMywKKzB4MzA4Y2ZmZmYsCisweGQwNGQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjNDEyMTgwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMTIxOGQsCisweGNjNDEyMTgxLAorMHgyOGQwMDAxZiwKKzB4MzQ1ODgwMDAsCisweGNkODEyMThjLAorMHg5NTAwZmNiZiwKKzB4Y2M0MTIxODIsCisweGM4MTQwMDIwLAorMHg5OTQwZmZmZiwKKzB4YzgxNDAwMjAsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDE4LAorMHgzMTEwMDAwMSwKKzB4YzAxNjAwODAsCisweDk1MDAwMDAzLAorMHhjMDJhMDAwNCwKKzB4N2NkNGMwMGMsCisweGNjYzEyMTdjLAorMHhjYzQxMjE3ZCwKKzB4Y2M0MTIxN2UsCisweDdjNDE4MDAwLAorMHgxZGIwMDAwMywKKzB4MzZhMDIxN2YsCisweDliMDAwMDAzLAorMHg0MTljMDAwNSwKKzB4MDQxYzAwNDAsCisweDk5YzAwMDAwLAorMHgwOWRjMDAwMSwKKzB4Y2MyMTAwMDAsCisweGM4MjQwMDA0LAorMHgyYTZjMDAxZiwKKzB4NDE5YzAwMDUsCisweDlhYzBmZmZhLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MDRkNDAzZTYsCisweDgwMDAwMDAxLAorMHhjYzU0MDAwMCwKKzB4ODAwMDAzN2MsCisweGNjNDAwM2VhLAorMHhjMDFjODAwMCwKKzB4MDQ0Y2EwMDAsCisweGNkYzEyMDEwLAorMHg3YzQxMDAwMCwKKzB4YzgxNDAwMDksCisweDA0MTgwMDAwLAorMHgwNDFjMDAwOCwKKzB4Y2Q4MDAwNzEsCisweDA5ZGMwMDAxLAorMHgwNTk4MDAwMSwKKzB4Y2QwZDAwMDAsCisweDk5YzBmZmZjLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAzN2MsCisweGNkNDAwMDcxLAorMHhjMDBlMDEwMCwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHhjODNjMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzAwMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMxLAorMHgwMDEwMDAwNCwKKzB4MDAxNzAwMDYsCisweDAwMjEwMDA4LAorMHgwMDI3MDAyOCwKKzB4MDAyODAwMjMsCisweDAwMjkwMDI5LAorMHgwMDJhMDAyNiwKKzB4MDAyYjAwMjksCisweDAwMmQwMDM4LAorMHgwMDJlMDAzZiwKKzB4MDAyZjAwNGEsCisweDAwMzQwMDRjLAorMHgwMDM2MDAzMCwKKzB4MDAzOTAwYWYsCisweDAwM2EwMGNmLAorMHgwMDNiMDBlNCwKKzB4MDAzYzAwZmMsCisweDAwM2QwMTZiLAorMHgwMDNmMDBhZCwKKzB4MDA0MTAzMzYsCisweDAwNDMwMzQ5LAorMHgwMDQ0MDE4ZSwKKzB4MDA0NTAwZmMsCisweDAwNDYwMWFjLAorMHgwMDQ3MDFhYywKKzB4MDA0ODAxZmUsCisweDAwNDkwMjBjLAorMHgwMDRhMDI1NSwKKzB4MDA0YjAyODIsCisweDAwNTIwMjVmLAorMHgwMDUzMDI3MSwKKzB4MDA1NDAyODcsCisweDAwNTcwMjk5LAorMHgwMDYwMDI5ZCwKKzB4MDA2MTAyYWMsCisweDAwNjIwMmI2LAorMHgwMDYzMDJjMCwKKzB4MDA2NDAyY2EsCisweDAwNjUwMmQ0LAorMHgwMDY2MDJkZSwKKzB4MDA2NzAyZTgsCisweDAwNjgwMmYyLAorMHgwMDY5MDJmNiwKKzB4MDA2YTAyZmEsCisweDAwNmIwMmZlLAorMHgwMDZjMDMwMiwKKzB4MDA2ZDAzMDYsCisweDAwNmUwMzBhLAorMHgwMDZmMDMwZSwKKzB4MDA3MDAzMTIsCisweDAwNzIwMzYzLAorMHgwMDc0MDM2OSwKKzB4MDA3OTAzNjcsCisweDAwN2MwMzFjLAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MTBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzEwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4MDQwODAwMDMsCisweGNjODAwMDQzLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAzLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3ZCwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2QsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdkLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAzLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDMsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGMsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4OTVjMDAwMDAsCisweGM4MWMwMDExLAorMHhjY2MxMjEwMCwKKzB4Y2QwMTIxMDEsCisweGNjYzEyMTAyLAorMHhjZDAxMjEwMywKKzB4MDQxODAwMDQsCisweDgwMDAwMzdlLAorMHhjZDgxYTJhNCwKKzB4YzAyYTAwMDQsCisweDk1ODAwMDA4LAorMHgzNmE4MjFhMywKKzB4Y2MyOTAwMDAsCisweGM4MjgwMDA0LAorMHhjODFjMDAxMSwKKzB4MGRlNDAwNDAsCisweDk2NDBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxNzAsCisweGNkMDEyMTcxLAorMHhjODIwMDAxMiwKKzB4OTYwMDAwMDAsCisweGM4MjAwMDEyLAorMHg4MDAwMDM3ZSwKKzB4Y2MwMDAwNjQsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg0MGQ0MDAwMywKKzB4Y2Q0MTIyNWMsCisweGNkMDFhMWZjLAorMHhjMDFhMDAwMSwKKzB4MDQxY2ExZmQsCisweDdkZDljMDBjLAorMHg3YzQyMDAwMCwKKzB4MDhjYzAwMDEsCisweDA2MjQwMDAxLAorMHgwNjI4MDAwMiwKKzB4Y2UxZDAwMDAsCisweGNlNWQwMDAwLAorMHg5OGMwZmZmYSwKKzB4Y2U5ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4MjhjYzAwMDEsCisweDdjNDE0MDAwLAorMHg5NTAwMDAwNiwKKzB4N2M0MTgwMDAsCisweGNkNDEyMTZkLAorMHhjZDgxMjE2ZSwKKzB4ODAwMDAwZjQsCisweGM4MWMwMDAzLAorMHhjMDIyMDAwNCwKKzB4N2UxNjAwMGMsCisweGNjMjEwMDAwLAorMHhjODFjMDAwNCwKKzB4N2M0MjQwMDAsCisweDk4YzAwMDA0LAorMHg3YzQyODAwMCwKKzB4ODAwMDAwMDMsCisweGNkZTUwMDAwLAorMHhjZTQxMjE2OSwKKzB4Y2U4MTIxNmEsCisweGNkYzEyMTZiLAorMHg4MDAwMDAwMywKKzB4Y2MwMTIxNmMsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OTY4MDAwMGEsCisweDdjMDIwMDAwLAorMHg3YzQyMDAwMCwKKzB4MWUzMDAwMDMsCisweGNjMDAwMDZhLAorMHg5YjAwMDAwMywKKzB4NDIyMDAwMDUsCisweDA0MjAwMDQwLAorMHg4MDAwMDExMSwKKzB4N2MwMjQwMDAsCisweDdlMDI0MDAwLAorMHg5YTQwMDAwMCwKKzB4MGE2NDAwMDEsCisweDMwZWMwMDEwLAorMHg5YWMwMDAwYSwKKzB4Y2MwMDAwNjIsCisweGMwMmEwMDA0LAorMHhjODJjMDAyMSwKKzB4N2U5MjgwMGMsCisweGNjMDAwMDQxLAorMHhjYzI5MDAwMCwKKzB4Y2VjMDAwMjEsCisweDgwMDAwMTIxLAorMHhjODMwMDAwNCwKKzB4Y2QwMTIxNmQsCisweGNkNDEyMTZlLAorMHhjODMwMDAwMywKKzB4N2YxZjAwMGIsCisweDMwZjQwMDA3LAorMHgyNzc4MDAwMSwKKzB4OTc0MDAwMmEsCisweDA3YjgwMTI2LAorMHg5ZjgwMDAwMCwKKzB4MDAwMDAwMDAsCisweDgwMDAwMTM2LAorMHg3ZjFiODAwNCwKKzB4ODAwMDAxM2EsCisweDdmMWI4MDA1LAorMHg4MDAwMDEzZSwKKzB4N2YxYjgwMDIsCisweDgwMDAwMTQyLAorMHg3ZjFiODAwMywKKzB4ODAwMDAxNDYsCisweDdmMWI4MDA3LAorMHg4MDAwMDE0YSwKKzB4N2YxYjgwMDYsCisweDgwMDAwMTRmLAorMHgyOGE0MDAwOCwKKzB4OWI4MDAwMTksCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDE1LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxMSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMGQsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDA5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OWE4MGZlYjIsCisweDI4ZWMwMDA4LAorMHg3YzQzNDAwMCwKKzB4N2M0MzgwMDAsCisweDdjNDNjMDAwLAorMHg5NmMwMDAwNywKKzB4Y2MwMDAwNjIsCisweGNmNDEyMTY5LAorMHhjZjgxMjE2YSwKKzB4Y2ZjMTIxNmIsCisweDgwMDAwMDAzLAorMHhjYzAxMjE2YywKKzB4ODAwMDAwMDMsCisweGNmZjUwMDAwLAorMHhjYzAwMDA2YiwKKzB4ODQwMDAzODEsCisweDBlNjgwMDNjLAorMHg5YTgwMDAwNCwKKzB4YzgyODAwMTUsCisweDgwMDAwMDAzLAorMHhkMDQwMDA3ZiwKKzB4OTY4MGZmYWIsCisweDdlMDI0MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAwZTAwMDIsCisweGNjMDAwMDQxLAorMHg4MDAwMDIzOSwKKzB4Y2NjMTMwNGEsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4YzAxZTAwMDEsCisweDI5MjQwMDEyLAorMHhjMDIyMDAwMiwKKzB4OTY0MDAwMDUsCisweGMwMjYwMDA0LAorMHhjMDI3ZmZmYiwKKzB4N2QyNTAwMGIsCisweGMwMjYwMDAwLAorMHg3ZGQyODAwYiwKKzB4N2UxMmMwMGIsCisweDdkMjUwMDBjLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzEyMTY5LAorMHg5YTgwMDAwYSwKKzB4Y2QwMTIxNmEsCisweGNkNDEyMTZiLAorMHg5NmMwZmU4MywKKzB4Y2Q4MTIxNmMsCisweGM4MzAwMDE4LAorMHg5NzAwMDAwMCwKKzB4YzgzMDAwMTgsCisweDgwMDAwMDAzLAorMHhjYzAwMDAxOCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODE0MDAxMywKKzB4YzgxODAwMTQsCisweGNkNDEyMTZiLAorMHg5NmMwZmU3NywKKzB4Y2Q4MTIxNmMsCisweDgwMDAwMTgzLAorMHhjODMwMDAxOCwKKzB4YzgwYzAwMDgsCisweDk4YzAwMDAwLAorMHhjODBjMDAwOCwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDAyLAorMHgwMDAwMDAwMCwKKzB4N2M0MTQwMDAsCisweGM4MjAwMDA5LAorMHhjYzQwMDA0MywKKzB4Y2UwMWExZjQsCisweGNjNDAwMDQ0LAorMHhjMDBlODAwMCwKKzB4N2M0MjQwMDAsCisweDdjNDI4MDAwLAorMHgyYWFjMDAxZiwKKzB4OTZjMGZlNjQsCisweGMwMzVmMDAwLAorMHhjZTQwMDNlMiwKKzB4MzI3ODAwMDMsCisweDI2N2MwMDA4LAorMHg3ZmY3YzAwYiwKKzB4N2ZmYmMwMGMsCisweDJhNzgwMDE4LAorMHhjZmMwMDNlMywKKzB4Y2Y4MDAzZTQsCisweDI2YjAwMDAyLAorMHg3ZjNmMDAwMCwKKzB4Y2YwMDAzZTUsCisweDgwMDAwMzFmLAorMHg3YzgwYzAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDA4LAorMHgzMTEwMDAwZiwKKzB4OTUwMDAwMGYsCisweDI1MjgwMDAxLAorMHgwNmE4MDFiNCwKKzB4OWU4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDFkNSwKKzB4YzAxMjA4MDAsCisweDgwMDAwMWUzLAorMHhjODE0MDAwZiwKKzB4ODAwMDAxZWEsCisweGM4MTQwMDEwLAorMHg4MDAwMDFmMSwKKzB4Y2NjMWEyYTQsCisweDgwMDAwMWZhLAorMHhjODE0MDAxMSwKKzB4MzBkMDAwM2YsCisweDBkMjgwMDE1LAorMHg5YTgwMDAxMiwKKzB4MGQyODAwMWUsCisweDlhODAwMDFlLAorMHgwZDI4MDAyMCwKKzB4OWE4MDAwMjMsCisweDBkMjQwMDBmLAorMHgwZDI4MDAxMCwKKzB4N2U2YTgwMGMsCisweDlhODAwMDI2LAorMHgwZDIwMDAwNCwKKzB4MGQyNDAwMTQsCisweDBkMjgwMDI4LAorMHg3ZTYyNDAwYywKKzB4N2VhNjgwMGMsCisweDlhODAwMDJhLAorMHhjODE0MDAxMSwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjMDEyMDgwMCwKKzB4N2M0MTQwMDAsCisweDdkMGNjMDBjLAorMHhjMDEyMDAwOCwKKzB4Mjk1ODAwMDMsCisweDI5NWMwMDBjLAorMHg3YzQyMDAwMCwKKzB4N2RkMWMwMGIsCisweDI2MjAwMDE0LAorMHg3ZTFlNDAwYywKKzB4N2U0ZTgwMGMsCisweGNlODFhMmE0LAorMHg4MDAwMDAwMywKKzB4Y2Q4MWExZmUsCisweGM4MTQwMDBmLAorMHgwNDEwMjEwZSwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDBmLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjODE0MDAxMCwKKzB4MDQxMDIxMDgsCisweDk1NDAwMDAwLAorMHhjODE0MDAxMCwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAzLAorMHhjY2MxYTJhNCwKKzB4Y2NjMWEyYTQsCisweDA0MTAwMDAxLAorMHhjZDAwMDAxOSwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODEwMDAxOSwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE5LAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDA0MTAyMTAwLAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTEsCisweGQwNTEwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2NjMWEyYTQsCisweDdjNDBjMDAwLAorMHhjYzQwMDAwZCwKKzB4OTRjMGZlMDEsCisweGNjNDAwMDBlLAorMHg3YzQxMDAwMCwKKzB4OTUwMDAwMDUsCisweDA4Y2MwMDAxLAorMHhjODE0MDAwNSwKKzB4OTk0MDAwMTQsCisweDAwMDAwMDAwLAorMHg5OGMwZmZmYiwKKzB4N2M0MTAwMDAsCisweDgwMDAwMDA0LAorMHg3ZDAwODAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg5OTQwMDAwYywKKzB4YzgxODAwMGMsCisweDdjNDEwMDAwLAorMHg5NTgwZmRmMCwKKzB4YzgyMDAwMGUsCisweGM4MWMwMDBkLAorMHg2NjIwMDAyMCwKKzB4N2UxZTAwMmMsCisweDI1MjQwMDAyLAorMHg3ZTYyNDAyMCwKKzB4ODAwMDAwMDMsCisweGNjZTYwMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNmMsCisweGNjMDAwMDZkLAorMHhjODE4MDAxZiwKKzB4YzgxYzAwMWUsCisweDY1OTgwMDIwLAorMHg3ZGQ5YzAyYywKKzB4N2NkNGMwMGMsCisweGNjZGUwMDAwLAorMHg0NWRjMDAwNCwKKzB4YzgyODAwMTcsCisweDk2ODAwMDBmLAorMHhjMDBlMDAwMSwKKzB4Mjg2ODAwMDgsCisweDJhYWMwMDE2LAorMHgzMmE4MDBmZiwKKzB4MGViMDAwNDksCisweDdmMmYwMDBiLAorMHg5NzAwMDAwNiwKKzB4MDAwMDAwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4ODAwMDAyMjMsCisweDdjNDEwMDAwLAorMHg4MDAwMDIyNiwKKzB4ZDA0MDAwN2YsCisweDg0MDAwMjNiLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweDk0MDAwMDAwLAorMHhjODNjMDAxYSwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjMDM2MWY5MCwKKzB4YzAzODdmZmYsCisweDdjMDNjMDEwLAorMHg3ZjdiNDAwYywKKzB4Y2Y0MTIxN2MsCisweGNmYzEyMTdkLAorMHhjYzAxMjE3ZSwKKzB4YzAzYTAwMDQsCisweDA0MzQyMTdmLAorMHg3ZjdiNDAwYywKKzB4Y2MzNTAwMDAsCisweGM4M2MwMDA0LAorMHgyYmZjMDAxZiwKKzB4MDQzODAwMjAsCisweDk3YzAwMDA1LAorMHhjYzAwMDA2MiwKKzB4OWI4MDAwMDAsCisweDBiYjgwMDAxLAorMHg4MDAwMDI0NywKKzB4Y2MwMDAwNzEsCisweGNjMDFhMWY0LAorMHgwNDM4MDAxNiwKKzB4YzAzNjAwMDIsCisweGNmODFhMmE0LAorMHg4ODAwMDAwMCwKKzB4Y2Y0MTIwMTAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxYywKKzB4OTUwMDAwMDUsCisweDA0ZDQwMDAxLAorMHhjZDQwMDA2NSwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY4LAorMHgwOTU0MDAwMiwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY2LAorMHg4NDAwMDI2YywKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ5ZiwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAyYiwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4Y2MwMWExZjQsCisweDg0MDAwMzgxLAorMHhjYzAwMDA0NiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHg4NDAwMDI3ZSwKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ4ZCwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAxOSwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDIyLAorMHhjZmMxYTJhNCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDQ3LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwZCwKKzB4Y2M0MDAwNjcsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzgxODAzZWEsCisweDk5ODBmZDc5LAorMHg3YzQwYzAwMCwKKzB4OTRjMDAwMDMsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwNCwKKzB4Y2NjMDAwNjgsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4ODQwMDAyM2IsCisweGMwMTQ4MDAwLAorMHhjYzAwMDA0MSwKKzB4Y2Q0MTMwNGEsCisweGMwMTQ4MDAwLAorMHg5OTAwMDAwMCwKKzB4YzgxMDAwMTYsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzAxMjAwMDEsCisweDdjNTE0MDBjLAorMHg4MDAwMDAwMywKKzB4ZDA1NTAwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHgyOTFjMDAxZiwKKzB4Y2NjMDAwNGEsCisweGNkMDAwMDRiLAorMHg5NWMwMDAwMywKKzB4YzAxYzgwMDAsCisweGNkYzEyMDEwLAorMHhkZDgzMDAwMCwKKzB4MDU1YzIwMDAsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0YywKKzB4Y2QwMDAwNGQsCisweGRkODMwMDAwLAorMHgwNTVjYTAwMCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGUsCisweGNkMDAwMDRmLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2MwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUwLAorMHhjZDAwMDA1MSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmOGUwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MiwKKzB4Y2QwMDAwNTMsCisweGRkODMwMDAwLAorMHgwNTVjZjg4MCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTQsCisweGNkMDAwMDU1LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2UwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU2LAorMHhjZDAwMDA1NywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmMDAwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1OCwKKzB4Y2QwMDAwNTksCisweGRkODMwMDAwLAorMHgwNTVjZjNmYywKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHhkMDQzMjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2EwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNjMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjhlMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ODAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNlMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YzZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwM2UwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHg3ZDQ1YzAwMCwKKzB4Y2RjMzAwMDAsCisweGQwNDMwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4YzgxMDAzZTIsCisweGM4MTQwM2U1LAorMHhjODE4MDNlMywKKzB4YzgxYzAzZTQsCisweGNkODEyMTY5LAorMHhjZGMxMjE2YSwKKzB4Y2NjMTIxNmIsCisweGNjMDEyMTZjLAorMHgwNDIwMDAwNCwKKzB4N2RhMTgwMDAsCisweDdkOTY0MDAyLAorMHg5NjQwZmNkOSwKKzB4Y2Q4MDAzZTMsCisweDMxMjgwMDAzLAorMHhjMDJkZjAwMCwKKzB4MjUxODAwMDgsCisweDdkYWQ4MDBiLAorMHg3ZGE5ODAwYywKKzB4ODAwMDAwMDMsCisweGNkODAwM2UzLAorMHgzMDhjZmZmZiwKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwMDIwLAorMHgxNTU4MDAwMiwKKzB4OTU4MGZmZmYsCisweGM4MTQwMDIwLAorMHhjYzAwMDA2ZSwKKzB4Y2M0MTIxODAsCisweDdjNDBjMDAwLAorMHhjY2MxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI4ZDAwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1MDBmY2JmLAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDQsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMTgsCisweDMxMTAwMDAxLAorMHhjMDE2MDA4MCwKKzB4OTUwMDAwMDMsCisweGMwMmEwMDA0LAorMHg3Y2Q0YzAwYywKKzB4Y2NjMTIxN2MsCisweGNjNDEyMTdkLAorMHhjYzQxMjE3ZSwKKzB4N2M0MTgwMDAsCisweDFkYjAwMDAzLAorMHgzNmEwMjE3ZiwKKzB4OWIwMDAwMDMsCisweDQxOWMwMDA1LAorMHgwNDFjMDA0MCwKKzB4OTljMDAwMDAsCisweDA5ZGMwMDAxLAorMHhjYzIxMDAwMCwKKzB4YzgyNDAwMDQsCisweDJhNmMwMDFmLAorMHg0MTljMDAwNSwKKzB4OWFjMGZmZmEsCisweGNjODAwMDYyLAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgwNGQ0MDNlNiwKKzB4ODAwMDAwMDMsCisweGNjNTQwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2M0MDAzZWEsCisweGMwMWM4MDAwLAorMHgwNDRjYTAwMCwKKzB4Y2RjMTIwMTAsCisweDdjNDEwMDAwLAorMHhjODE0MDAwOSwKKzB4MDQxODAwMDAsCisweDA0MWMwMDA4LAorMHhjZDgwMDA3MSwKKzB4MDlkYzAwMDEsCisweDA1OTgwMDAxLAorMHhjZDBkMDAwMCwKKzB4OTljMGZmZmMsCisweGNjODAwMDYyLAorMHg4MDAwMDM3ZSwKKzB4Y2Q0MDAwNzEsCisweGMwMGUwMTAwLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweGM4M2MwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDMsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMzLAorMHgwMDEwMDAwNiwKKzB4MDAxNzAwMDgsCisweDAwMjEwMDBhLAorMHgwMDI3MDAyYSwKKzB4MDAyODAwMjUsCisweDAwMjkwMDJiLAorMHgwMDJhMDAyOCwKKzB4MDAyYjAwMmIsCisweDAwMmQwMDNhLAorMHgwMDJlMDA0MSwKKzB4MDAyZjAwNGMsCisweDAwMzQwMDRlLAorMHgwMDM2MDAzMiwKKzB4MDAzOTAwYjEsCisweDAwM2EwMGQxLAorMHgwMDNiMDBlNiwKKzB4MDAzYzAwZmUsCisweDAwM2QwMTZkLAorMHgwMDNmMDBhZiwKKzB4MDA0MTAzMzgsCisweDAwNDMwMzRiLAorMHgwMDQ0MDE5MCwKKzB4MDA0NTAwZmUsCisweDAwNDYwMWFlLAorMHgwMDQ3MDFhZSwKKzB4MDA0ODAyMDAsCisweDAwNDkwMjBlLAorMHgwMDRhMDI1NywKKzB4MDA0YjAyODQsCisweDAwNTIwMjYxLAorMHgwMDUzMDI3MywKKzB4MDA1NDAyODksCisweDAwNTcwMjliLAorMHgwMDYwMDI5ZiwKKzB4MDA2MTAyYWUsCisweDAwNjIwMmI4LAorMHgwMDYzMDJjMiwKKzB4MDA2NDAyY2MsCisweDAwNjUwMmQ2LAorMHgwMDY2MDJlMCwKKzB4MDA2NzAyZWEsCisweDAwNjgwMmY0LAorMHgwMDY5MDJmOCwKKzB4MDA2YTAyZmMsCisweDAwNmIwMzAwLAorMHgwMDZjMDMwNCwKKzB4MDA2ZDAzMDgsCisweDAwNmUwMzBjLAorMHgwMDZmMDMxMCwKKzB4MDA3MDAzMTQsCisweDAwNzIwMzY1LAorMHgwMDc0MDM2YiwKKzB4MDA3OTAzNjksCisweDAwN2MwMzFlLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggOTI5NjVkYi4uNzdhN2E0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC00Myw2ICs0Myw3OCBAQAogc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBzdGF0aWMgdm9pZCByYWRlb25fZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKK3UzMiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmKQoreworCXUzMiB2YWw7CisKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQl2YWwgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5yaW5nX3JwdHIsIG9mZik7CisJfSBlbHNlIHsKKwkJdmFsID0gKigoKHZvbGF0aWxlIHUzMiAqKQorCQkJIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkJKG9mZiAvIHNpemVvZih1MzIpKSk7CisJCXZhbCA9IGxlMzJfdG9fY3B1KHZhbCk7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3UzMiByYWRlb25fZ2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MpCisJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIDApOworCWVsc2UgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJCWVsc2UKKwkJCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQorCit2b2lkIHJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmLCB1MzIgdmFsKQoreworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKQorCQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBvZmYsIHZhbCk7CisJZWxzZQorCQkqKCgodm9sYXRpbGUgdTMyICopIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkgIChvZmYgLyBzaXplb2YodTMyKSkpID0gY3B1X3RvX2xlMzIodmFsKTsKK30KKwordm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpCit7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgMCwgdmFsKTsKK30KKwordTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCkKK3sKKwlpZiAoZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwKKwkJCQkJCSAgICAgUjYwMF9TQ1JBVENIT0ZGKGluZGV4KSk7CisJCWVsc2UKKwkJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsCisJCQkJCQkgICAgIFJBREVPTl9TQ1JBVENIT0ZGKGluZGV4KSk7CisJfSBlbHNlIHsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldHVybiBSQURFT05fUkVBRChSNjAwX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCX0KK30KKwordTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCit7CisJdTMyIHJldDsKKworCWlmIChhZGRyIDwgMHgxMDAwMCkKKwkJcmV0ID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+bW1pbywgYWRkcik7CisJZWxzZSB7CisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fSU5ERVgsIGFkZHIpOworCQlyZXQgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBSNTAwX1JFQURfTUNJTkQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgYWRkcikKIHsKIAl1MzIgcmV0OwpAQCAtNzAsMTEgKzE0MiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgUlM2MDBfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQoreworCXUzMiByZXQ7CisJUkFERU9OX1dSSVRFKFJTNjAwX01DX0lOREVYLCAoKGFkZHIgJiBSUzYwMF9NQ19BRERSX01BU0spIHwKKwkJCQkgICAgICBSUzYwMF9NQ19JTkRfQ0lURl9BUkIwKSk7CisJcmV0ID0gUkFERU9OX1JFQUQoUlM2MDBfTUNfREFUQSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJcmV0dXJuIFJTNjAwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIFJTNDgwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogfQpAQCAtODIsMTEgKzE2NSwxNyBAQAogdTMyIHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjcwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjYwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfRkJfTE9DQVRJT04pOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCXJldHVybiBSUzYwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlCkBAIC05NSw0MiArMTg0LDY2IEBACiAKIHN0YXRpYyB2b2lkIHJhZGVvbl93cml0ZV9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBmYl9sb2MpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJUlM2MDBfV1JJVEVfTUNJTkQoUlM2MDBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZQogCQlSQURFT05fV1JJVEUoUkFERU9OX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIGFncF9sb2MpCit2b2lkIHJhZGVvbl93cml0ZV9hZ3BfbG9jYXRpb24oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgYWdwX2xvYykKIHsKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKKwkvKlI2eHgvUjd4eDogQUdQX1RPUCBhbmQgQk9UIGFyZSBhY3R1YWxseSAxOCBiaXRzIGVhY2ggKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkgeworCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQk9ULCBhZ3BfbG9jICYgMHhmZmZmKTsgLyogRklYIE1FICovCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0FHUF9UT1AsIChhZ3BfbG9jID4+IDE2KSAmIDB4ZmZmZik7CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fQUdQX0JPVCwgYWdwX2xvYyAmIDB4ZmZmZik7IC8qIEZJWCBNRSAqLworCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfVE9QLCAoYWdwX2xvYyA+PiAxNikgJiAweGZmZmYpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCVJTNjAwX1dSSVRFX01DSU5EKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlCiAJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9iYXNlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTY0IGFncF9iYXNlKQordm9pZCByYWRlb25fd3JpdGVfYWdwX2Jhc2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1NjQgYWdwX2Jhc2UpCiB7CiAJdTMyIGFncF9iYXNlX2hpID0gdXBwZXJfMzJfYml0cyhhZ3BfYmFzZSk7CiAJdTMyIGFncF9iYXNlX2xvID0gYWdwX2Jhc2UgJiAweGZmZmZmZmZmOworCXUzMiByNnh4X2FncF9iYXNlID0gKGFncF9iYXNlID4+IDIyKSAmIDB4M2ZmZmY7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgeworCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRyeSAqLworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CiAJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkgeworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CiAJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpIHsKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CkBAIC0xNDUsNiArMjU4LDI1IEBACiAJfQogfQogCit2b2lkIHJhZGVvbl9lbmFibGVfYm0oc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdTMyIHRtcDsKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgeworCQkvKiByczYwMC9yczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIDw9IENISVBfUlYzNTApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I0MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKKwkJLyogcjF4eCwgcjJ4eCwgcjMwMCwgcih2KTM1MCwgcjQyMC9yNDgxLCByczQwMC9yczQ4MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKKwl9IC8qIFBDSUUgY2FyZHMgYXBwZWFycyB0byBub3QgbmVlZCB0aGlzICovCit9CisKIHN0YXRpYyBpbnQgUkFERU9OX1JFQURfUExMKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgYWRkcikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzAyLDcgKzQzNCw3IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjUxNSkgewogCQlSQURFT05fV1JJVEVfUExMKFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSwgKDEgfCAoKGdiX3BpcGVfc2VsID4+IDgpICYgMHhmKSA8PCA0KSk7Ci0JCVJBREVPTl9XUklURShSNTAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CisJCVJBREVPTl9XUklURShSMzAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CiAJfQogCVJBREVPTl9XUklURShSMzAwX0dCX1RJTEVfQ09ORklHLCBnYl90aWxlX2NvbmZpZyk7CiAJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwpAQCAtMzgyLDYgKzUxNCwxNCBAQAogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjAwIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQl9CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjUyMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MzApIHx8CkBAIC01NjIsNyArNzAyLDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CiAJdTMyIHJpbmdfc3RhcnQsIGN1cl9yZWFkX3B0cjsKLQl1MzIgdG1wOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuIFdpdGggbmV3IG1lbW9yeSBtYXAsIHRoZSBmYiBsb2NhdGlvbgogCSAqIGlzIG5vdCBjaGFuZ2VkLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIGFscmVhZHkuIFBhcnQKQEAgLTYxMSwxNyArNzUwLDEwIEBACiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wX29mcywgcGFnZV9vZnM7Ci0KLQkJdG1wX29mcyA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldCAtCi0JCQkJKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKLQkJcGFnZV9vZnMgPSB0bXBfb2ZzID4+IFBBR0VfU0hJRlQ7Ci0KLQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsIGVudHJ5LT5idXNhZGRyW3BhZ2Vfb2ZzXSk7Ci0JCURSTV9ERUJVRygicmluZyBycHRyOiBvZmZzZXQ9MHglMDhseCBoYW5kbGU9MHglMDhseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1c2FkZHJbcGFnZV9vZnNdLAotCQkJICBlbnRyeS0+aGFuZGxlICsgdG1wX29mcyk7CisJCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfUlBUUl9BRERSLAorCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQKKwkJCSAgICAgLSAoKHVuc2lnbmVkIGxvbmcpIGRldi0+c2ctPnZpcnR1YWwpCisJCQkgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwogCX0KIAogCS8qIFNldCByaW5nIGJ1ZmZlciBzaXplICovCkBAIC02NDksMzQgKzc4MSwxNyBAQAogCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9BRERSLCBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUl9BRERSKQogCQkgICAgICsgUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaCA9ICgoX192b2xhdGlsZV9fIHUzMiAqKQotCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgKwotCQkJICAgICAoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCAvIHNpemVvZih1MzIpKSk7Ci0KIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAotCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKLQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7Ci0JCS8qIHJzNjAwL3JzNjkwL3JzNzQwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfQlVTX01BU1RFUl9ESVM7Ci0JCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPD0gQ0hJUF9SVjM1MCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8Ci0JCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewotCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDAwL3JzNDgwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKIAotCWRldl9wcml2LT5zY3JhdGNoWzBdID0gMDsKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigwKSwgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgMCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaFsxXSA9IDA7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9ESVNQQVRDSF9SRUcsIDApOwogCi0JZGV2X3ByaXYtPnNjcmF0Y2hbMl0gPSAwOworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDIpLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfQ0xFQVJfUkVHLCAwKTsKIAogCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLwpAQCAtNzA4LDEyICs4MjMsMTUgQEAKIAkvKiBXcml0ZWJhY2sgZG9lc24ndCBzZWVtIHRvIHdvcmsgZXZlcnl3aGVyZSwgdGVzdCBpdCBoZXJlIGFuZCBwb3NzaWJseQogCSAqIGVuYWJsZSBpdCBpZiBpdCBhcHBlYXJzIHRvIHdvcmsKIAkgKi8KLQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSwgMCk7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOworCiAJUkFERU9OX1dSSVRFKFJBREVPTl9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOwogCiAJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgewotCQlpZiAoRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSkgPT0KLQkJICAgIDB4ZGVhZGJlZWYpCisJCXUzMiB2YWw7CisKKwkJdmFsID0gcmFkZW9uX3JlYWRfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJCWlmICh2YWwgPT0gMHhkZWFkYmVlZikKIAkJCWJyZWFrOwogCQlEUk1fVURFTEFZKDEpOwogCX0KQEAgLTgwOSw2ICs5MjcsODIgQEAKIAl9CiB9CiAKKy8qIEVuYWJsZSBvciBkaXNhYmxlIElHUCBHQVJUIG9uIHRoZSBjaGlwICovCitzdGF0aWMgdm9pZCByczYwMF9zZXRfaWdwZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBvbikKK3sKKwl1MzIgdGVtcDsKKwlpbnQgaTsKKworCWlmIChvbikgeworCQlEUk1fREVCVUcoInByb2dyYW1taW5nIGlncCBnYXJ0ICUwOFggJTA4bFggJTA4WFxuIiwKKwkJCSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCwKKwkJCSAobG9uZylkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyLAorCQkJIGRldl9wcml2LT5nYXJ0X3NpemUpOworCisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfQ05UTCwgKFJTNjAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJCQkJCSAgICBSUzYwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOworCisJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJCQkoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAorCQkJCQkgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUyB8CisJCQkJCSBSUzYwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NUSFJPVUdIIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKDMpIHwKKwkJCQkJIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDMpKSk7CisKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLCAoUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgfAorCQkJCQkJCSAgICAgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKworCQkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICsgaSwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHBhZ2UgdGFibGUgYXBlcnR1cmUgKi8KKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIsCisJCQkJZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsCisJCQkJKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHN5c3RlbSBhcGVydHVyZSAqLworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQkoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkpOworCisJCS8qIGVuYWJsZSBwYWdlIHRhYmxlcyAqLworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX1BUMF9DTlRMKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCAodGVtcCB8IFJTNjAwX0VOQUJMRV9QVCkpOworCisJCXRlbXAgPSBJR1BfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2MDBfTUNfQ05UTDEpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsICh0ZW1wIHwgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTKSk7CisKKwkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCB8PSBSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwl9IGVsc2UgeworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NOVEwsIDApOworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX0NOVEwxKTsKKwkJdGVtcCAmPSB+UlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsIHRlbXApOworCX0KK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wY2llZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgb24pCiB7CiAJdTMyIHRtcCA9IFJBREVPTl9SRUFEX1BDSUUoZGV2X3ByaXYsIFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CkBAIC04NTAsNiArMTA0NCwxMSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApIHsKKwkJcnM2MDBfc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewogCQlyYWRlb25fc2V0X3BjaWVnYXJ0KGRldl9wcml2LCBvbik7CiAJCXJldHVybjsKQEAgLTg4MSw2ICsxMDgwLDQ2IEBACiAJfQogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zZXR1cF9wY2lnYXJ0X3N1cmZhY2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IHJhZGVvbl92aXJ0X3N1cmZhY2UgKnZwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVMgKiAyOyBpKyspIHsKKwkJaWYgKCFkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5maWxlX3ByaXYgfHwKKwkJICAgIGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSBQQ0lHQVJUX0ZJTEVfUFJJVikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykKKwkJcmV0dXJuIC1FTk9NRU07CisJdnAgPSAmZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCXN0cnVjdCByYWRlb25fc3VyZmFjZSAqc3AgPSAmZGV2X3ByaXYtPnN1cmZhY2VzW2ldOworCQlpZiAoc3AtPnJlZmNvdW50KQorCQkJY29udGludWU7CisKKwkJdnAtPnN1cmZhY2VfaW5kZXggPSBpOworCQl2cC0+bG93ZXIgPSBnYXJ0X2luZm8tPmJ1c19hZGRyOworCQl2cC0+dXBwZXIgPSB2cC0+bG93ZXIgKyBnYXJ0X2luZm8tPnRhYmxlX3NpemU7CisJCXZwLT5mbGFncyA9IDA7CisJCXZwLT5maWxlX3ByaXYgPSBQQ0lHQVJUX0ZJTEVfUFJJVjsKKworCQlzcC0+cmVmY291bnQgPSAxOworCQlzcC0+bG93ZXIgPSB2cC0+bG93ZXI7CisJCXNwLT51cHBlciA9IHZwLT51cHBlcjsKKwkJc3AtPmZsYWdzID0gMDsKKworCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX0lORk8gKyAxNiAqIGksIHNwLT5mbGFncyk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKyAxNiAqIGksIHNwLT5sb3dlcik7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfVVBQRVJfQk9VTkQgKyAxNiAqIGksIHNwLT51cHBlcik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X2NwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9yYWRlb25faW5pdF90ICppbml0LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTEwNjIsMTEgKzEzMDEsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9ICh2b2lkICopZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldDsKKwkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQ7CiAJCWRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSA9Ci0JCSAgICAodm9pZCAqKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKKwkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwogCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKIAogCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCiAJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOwpAQCAtMTE3MywxMSArMTQxMywxNCBAQAogCX0gZWxzZQogI2VuZGlmCiAJeworCQl1MzIgc2N0cmw7CisJCWludCByZXQ7CisKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJLyogaWYgd2UgaGF2ZSBhbiBvZmZzZXQgc2V0IGZyb20gdXNlcnNwYWNlICovCiAJCWlmIChkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXRfc2V0KSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0KLQkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJCQkJKHJlc291cmNlX3NpemVfdClkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KIAkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfYXBlcl9vZmZzZXQ7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuc2l6ZSA9CkBAIC0xMjE0LDEyICsxNDU3LDMxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9pbml0KGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKSB7CisJCXNjdHJsID0gUkFERU9OX1JFQUQoUkFERU9OX1NVUkZBQ0VfQ05UTCk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRV9DTlRMLCAwKTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQlyZXQgPSByNjAwX3BhZ2VfdGFibGVfaW5pdChkZXYpOworCQllbHNlCisJCQlyZXQgPSBkcm1fYXRpX3BjaWdhcnRfaW5pdChkZXYsICZkZXZfcHJpdi0+Z2FydF9pbmZvKTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFX0NOVEwsIHNjdHJsKTsKKworCQlpZiAoIXJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIpOwogCQkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKKwkJcmV0ID0gcmFkZW9uX3NldHVwX3BjaWdhcnRfc3VyZmFjZShkZXZfcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIEdBUlQgc3VyZmFjZSFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlCisJCQkJZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qIFR1cm4gb24gUENJIEdBUlQgKi8KIAkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAxKTsKIAl9CkBAIC0xMjY4LDE0ICsxNTMwLDE4IEBACiAJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKSB7CiAJCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwogCQkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAwKTsKLQkJCWlmICghZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbykpCi0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY2xlYW51cCBQQ0kgR0FSVCFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlIHsKKwkJCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKQorCQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBjbGVhbnVwIFBDSSBHQVJUIVxuIik7CisJCQl9CiAJCX0KIAogCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9GQikKIAkJewogCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKLQkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IDA7CisJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwogCQl9CiAJfQogCS8qIG9ubHkgY2xlYXIgdG8gdGhlIHN0YXJ0IG9mIGZsYWdzICovCkBAIC0xMzI2LDYgKzE1OTIsNyBAQAogCiBpbnQgcmFkZW9uX2NwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCA9IGRhdGE7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwpAQCAtMTMzOCw4ICsxNjA1LDEzIEBACiAJY2FzZSBSQURFT05fSU5JVF9SMjAwX0NQOgogCWNhc2UgUkFERU9OX0lOSVRfUjMwMF9DUDoKIAkJcmV0dXJuIHJhZGVvbl9kb19pbml0X2NwKGRldiwgaW5pdCwgZmlsZV9wcml2KTsKKwljYXNlIFJBREVPTl9JTklUX1I2MDBfQ1A6CisJCXJldHVybiByNjAwX2RvX2luaXRfY3AoZGV2LCBpbml0LCBmaWxlX3ByaXYpOwogCWNhc2UgUkFERU9OX0NMRUFOVVBfQ1A6Ci0JCXJldHVybiByYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQllbHNlCisJCQlyZXR1cm4gcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNjIsNyArMTYzNCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyYWRlb25fZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0YXJ0KGRldl9wcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5Myw3ICsxNjY4LDEwIEBACiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgogCSAqLwogCWlmIChzdG9wLT5pZGxlKSB7Ci0JCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJCWVsc2UKKwkJCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQwMiwxMCArMTY4MCwxNiBAQAogCSAqIHdlIHdpbGwgZ2V0IHNvbWUgZHJvcHBlZCB0cmlhbmdsZXMgYXMgdGhleSB3b24ndCBiZSBmdWxseQogCSAqIHJlbmRlcmVkIGJlZm9yZSB0aGUgQ1AgaXMgc2h1dCBkb3duLgogCSAqLwotCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJLyogUmVzZXQgdGhlIGVuZ2luZSAqLwotCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2VuZ2luZV9yZXNldChkZXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDE4LDI5ICsxNzAyLDQ3IEBACiAJaWYgKGRldl9wcml2KSB7CiAJCWlmIChkZXZfcHJpdi0+Y3BfcnVubmluZykgewogCQkJLyogU3RvcCB0aGUgY3AgKi8KLQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7Ci0JCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQl3aGlsZSAoKHJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdikpICE9IDApIHsKKwkJCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKICNpZmRlZiBfX2xpbnV4X18KLQkJCQlzY2hlZHVsZSgpOworCQkJCQlzY2hlZHVsZSgpOwogI2Vsc2UKLQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKwkJCQkJdHNsZWVwKCZyZXQsIFBaRVJPLCAicmRucmVsIiwgMSk7CiAjZW5kaWYKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7CisJCQkJCURSTV9ERUJVRygicmFkZW9uX2RvX2NwX2lkbGUgJWRcbiIsIHJldCk7CisjaWZkZWYgX19saW51eF9fCisJCQkJCXNjaGVkdWxlKCk7CisjZWxzZQorCQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKyNlbmRpZgorCQkJCX0KIAkJCX0KLQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKLQkJCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCQkJCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9IGVsc2UgeworCQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwkJCQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9CiAJCX0KIAotCQkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPCBDSElQX1I2MDApIHsKKwkJCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLworCQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLworCQkJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAotCQlpZiAoZGV2X3ByaXYtPm1taW8pIHsJLyogcmVtb3ZlIGFsbCBzdXJmYWNlcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykgewotCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7Ci0JCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArCi0JCQkJCSAgICAgMTYgKiBpLCAwKTsKLQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKLQkJCQkJICAgICAxNiAqIGksIDApOworCQkJaWYgKGRldl9wcml2LT5tbWlvKSB7CS8qIHJlbW92ZSBhbGwgc3VyZmFjZXMgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKworCQkJCQkJICAgICAxNiAqIGksIDApOworCQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKKwkJCQkJCSAgICAgMTYgKiBpLCAwKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTQ0OSw3ICsxNzUxLDEwIEBACiAJCXJhZGVvbl9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+ZmJfaGVhcCkpOwogCiAJCS8qIGRlYWxsb2NhdGUga2VybmVsIHJlc291cmNlcyAqLwotCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCWVsc2UKKwkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJfQogfQogCkBAIC0xNDY3LDcgKzE3NzIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmFkZW9uX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwllbHNlCisJCXJhZGVvbl9kb19jcF9yZXNldChkZXZfcHJpdik7CiAKIAkvKiBUaGUgQ1AgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAwOwpAQCAtMTQ4MiwyMyArMTc5MCwzNiBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCXJldHVybiByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJZWxzZQorCQlyZXR1cm4gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpOwogfQogCiAvKiBBZGRlZCBieSBDaGFybCBQLiBCb3RoYSB0byBjYWxsIHJhZGVvbl9kb19yZXN1bWVfY3AoKS4KICAqLwogaW50IHJhZGVvbl9jcF9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0JcmV0dXJuIHJhZGVvbl9kb19yZXN1bWVfY3AoZGV2LCBmaWxlX3ByaXYpOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKIH0KIAogaW50IHJhZGVvbl9lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JcmV0dXJuIHJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1NDgsNyArMTg2OSw3IEBACiAJc3RhcnQgPSBkZXZfcHJpdi0+bGFzdF9idWY7CiAKIAlmb3IgKHQgPSAwOyB0IDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgdCsrKSB7Ci0JCXUzMiBkb25lX2FnZSA9IEdFVF9TQ1JBVENIKDEpOworCQl1MzIgZG9uZV9hZ2UgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMSk7CiAJCURSTV9ERUJVRygiZG9uZV9hZ2UgPSAlZFxuIiwgZG9uZV9hZ2UpOwogCQlmb3IgKGkgPSBzdGFydDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKQEAgLTE1ODIsOCArMTkwMyw5IEBACiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKIAlpbnQgaSwgdDsKIAlpbnQgc3RhcnQ7Ci0JdTMyIGRvbmVfYWdlID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJdTMyIGRvbmVfYWdlOwogCisJZG9uZV9hZ2UgPSByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDEpKTsKIAlpZiAoKytkZXZfcHJpdi0+bGFzdF9idWYgPj0gZG1hLT5idWZfY291bnQpCiAJCWRldl9wcml2LT5sYXN0X2J1ZiA9IDA7CiAKQEAgLTE4NTQsMyArMjE3Niw0MSBAQAogCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwogfQorCit2b2lkIHJhZGVvbl9jb21taXRfcmluZyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGk7CisJdTMyICpyaW5nOworCWludCB0YWlsX2FsaWduZWQ7CisKKwkvKiBjaGVjayBpZiB0aGUgcmluZyBpcyBwYWRkZWQgb3V0IHRvIDE2LWR3b3JkIGFsaWdubWVudCAqLworCisJdGFpbF9hbGlnbmVkID0gZGV2X3ByaXYtPnJpbmcudGFpbCAmIDB4ZjsKKwlpZiAodGFpbF9hbGlnbmVkKSB7CisJCWludCBudW1fcDIgPSAxNiAtIHRhaWxfYWxpZ25lZDsKKworCQlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CisJCS8qIHBhZCB3aXRoIHNvbWUgQ1BfUEFDS0VUMiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3AyOyBpKyspCisJCQlyaW5nW2Rldl9wcml2LT5yaW5nLnRhaWwgKyBpXSA9IENQX1BBQ0tFVDIoKTsKKworCQlkZXZfcHJpdi0+cmluZy50YWlsICs9IGk7CisKKwkJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbnVtX3AyICogc2l6ZW9mKHUzMik7CisJfQorCisJZGV2X3ByaXYtPnJpbmcudGFpbCAmPSBkZXZfcHJpdi0+cmluZy50YWlsX21hc2s7CisKKwlEUk1fTUVNT1JZQkFSUklFUigpOworCUdFVF9SSU5HX0hFQUQoIGRldl9wcml2ICk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwpOworCQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCisJCVJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJfSBlbHNlIHsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9XUFRSLCBkZXZfcHJpdi0+cmluZy50YWlsKTsKKwkJLyogcmVhZCBmcm9tIFBDSSBidXMgdG8gZW5zdXJlIGNvcnJlY3QgcG9zdGluZyAqLworCQlSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBmZWYyMDc4Li4xM2E2MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNDEsMjMgKzQxLDE1IEBACiBNT0RVTEVfUEFSTV9ERVNDKG5vX3diLCAiRGlzYWJsZSBBR1Agd3JpdGViYWNrIGZvciBzY3JhdGNoIHJlZ2lzdGVycyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vX3diLCByYWRlb25fbm9fd2IsIGludCwgMDQ0NCk7CiAKLXN0YXRpYyBpbnQgZHJpX2xpYnJhcnlfbmFtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpidWYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgZmFtaWx5ID0gZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLOwotCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCi0JCSAgICAgICAgKGZhbWlseSA8IENISVBfUjIwMCkgPyAicmFkZW9uIiA6Ci0JCSAgICAgICAgKChmYW1pbHkgPCBDSElQX1IzMDApID8gInIyMDAiIDoKLQkJICAgICAgICAicjMwMCIpKTsKLX0KLQogc3RhdGljIGludCByYWRlb25fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiAwOworCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCXJldHVybiAwOwpAQCAtNjcsOCArNTksMTEgQEAKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIDA7CisKIAkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCBkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcpOwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwogCXJldHVybiAwOwpAQCAtOTUsNyArOTAsNiBAQAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCiAJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAotCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkubWFzdGVyX2NyZWF0ZSA9IHJhZGVvbl9tYXN0ZXJfY3JlYXRlLAogCS5tYXN0ZXJfZGVzdHJveSA9IHJhZGVvbl9tYXN0ZXJfZGVzdHJveSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA0OTBiYzdjLi5lZDRkMjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTI2LDYgKzEyNiw3IEBACiAJQ0hJUF9SVjQxMCwKIAlDSElQX1JTNDAwLAogCUNISVBfUlM0ODAsCisJQ0hJUF9SUzYwMCwKIAlDSElQX1JTNjkwLAogCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKQEAgLTEzNCw2ICsxMzUsMTYgQEAKIAlDSElQX1JWNTYwLAogCUNISVBfUlY1NzAsCiAJQ0hJUF9SNTgwLAorCUNISVBfUjYwMCwKKwlDSElQX1JWNjEwLAorCUNISVBfUlY2MzAsCisJQ0hJUF9SVjYyMCwKKwlDSElQX1JWNjM1LAorCUNISVBfUlY2NzAsCisJQ0hJUF9SUzc4MCwKKwlDSElQX1JWNzcwLAorCUNISVBfUlY3MzAsCisJQ0hJUF9SVjcxMCwKIAlDSElQX0xBU1QsCiB9OwogCkBAIC0xNjAsMTAgKzE3MSw2IEBACiAJUkFERU9OX0lTX0lHUEdBUlQgPSAweDAxMDAwMDAwVUwsCiB9OwogCi0jZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCShkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID8gXAotICAgICAgICBEUk1fUkVBRDMyKCAgKGRldl9wcml2KS0+cmluZ19ycHRyLCAwICkgOiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUikpCi0jZGVmaW5lIFNFVF9SSU5HX0hFQUQoZGV2X3ByaXYsdmFsKQlEUk1fV1JJVEUzMiggKGRldl9wcml2KS0+cmluZ19ycHRyLCAwLCAodmFsKSApCi0KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgewogCXVuc2lnbmVkIGludCBhZ2U7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTIyMSwxMCArMjI4LDExIEBACiAJdTMyIHVwcGVyOwogCXUzMiBmbGFnczsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKKyNkZWZpbmUgUENJR0FSVF9GSUxFX1BSSVYJKCh2b2lkICopIC0xTCkKIH07CiAKLSNkZWZpbmUgUkFERU9OX0ZMVVNIX0VNSVRFRAkoMSA8IDApCi0jZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPCAxKQorI2RlZmluZSBSQURFT05fRkxVU0hfRU1JVEVECSgxIDw8IDApCisjZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPDwgMSkKIAogc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgewogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7CkBAIC0yNDgsNyArMjU2LDYgQEAKIAlkcm1fcmFkZW9uX2ZyZWVsaXN0X3QgKmhlYWQ7CiAJZHJtX3JhZGVvbl9mcmVlbGlzdF90ICp0YWlsOwogCWludCBsYXN0X2J1ZjsKLQl2b2xhdGlsZSB1MzIgKnNjcmF0Y2g7CiAJaW50IHdyaXRlYmFja193b3JrczsKIAogCWludCB1c2VjX3RpbWVvdXQ7CkBAIC0zMTYsMTEgKzMyMywzMSBAQAogCiAJLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGFuIG9wZW4gKi8KIAl1aW50MzJfdCBmbGFnczsJCS8qIHNlZSByYWRlb25fY2hpcF9mbGFncyAqLwotCXVuc2lnbmVkIGxvbmcgZmJfYXBlcl9vZmZzZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IGZiX2FwZXJfb2Zmc2V0OwogCiAJaW50IG51bV9nYl9waXBlczsKIAlpbnQgdHJhY2tfZmx1c2g7CiAJZHJtX2xvY2FsX21hcF90ICptbWlvOworCisJLyogcjZ4eC9yN3h4IHBpcGUvc2hhZGVyIGNvbmZpZyAqLworCWludCByNjAwX21heF9waXBlczsKKwlpbnQgcjYwMF9tYXhfdGlsZV9waXBlczsKKwlpbnQgcjYwMF9tYXhfc2ltZHM7CisJaW50IHI2MDBfbWF4X2JhY2tlbmRzOworCWludCByNjAwX21heF9ncHJzOworCWludCByNjAwX21heF90aHJlYWRzOworCWludCByNjAwX21heF9zdGFja19lbnRyaWVzOworCWludCByNjAwX21heF9od19jb250ZXh0czsKKwlpbnQgcjYwMF9tYXhfZ3NfdGhyZWFkczsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NpemU7CisJaW50IHI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZTsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplOworCWludCByNjAwX3NxX251bV9jZl9pbnN0czsKKwlpbnQgcjcwMF9zeF9udW1fb2Zfc2V0czsKKwlpbnQgcjcwMF9zY19wcmltX2ZpZm9fc2l6ZTsKKwlpbnQgcjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemU7CisJaW50IHI3MDBfc2NfZWFybHl6X3RpbGVfZmlmb19maXplOworCiB9IGRybV9yYWRlb25fcHJpdmF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2J1Zl9wcml2IHsKQEAgLTMzOCw2ICszNjUsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgcmFkZW9uX2lvY3Rsc1tdOwogZXh0ZXJuIGludCByYWRlb25fbWF4X2lvY3RsOwogCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfcmluZ19oZWFkKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpOworCisjZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCXJhZGVvbl9nZXRfcmluZ19oZWFkKGRldl9wcml2KQorI2RlZmluZSBTRVRfUklOR19IRUFEKGRldl9wcml2LCB2YWwpIHJhZGVvbl9zZXRfcmluZ19oZWFkKGRldl9wcml2LCB2YWwpCisKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGhhcmR3YXJlIGFkZHJlc3MgaXMgaW5zaWRlIHRoZSBmcmFtZWJ1ZmZlciBvciB0aGUKICAqIEdBUlQgYXJlYS4KICAqLwpAQCAtMzY0LDYgKzM5Nyw5IEBACiBleHRlcm4gaW50IHJhZGVvbl9mdWxsc2NyZWVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2NwX2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHUzMiByYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBhZ3BfbG9jKTsKK2V4dGVybiB2b2lkIHJhZGVvbl93cml0ZV9hZ3BfYmFzZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHU2NCBhZ3BfYmFzZSk7CitleHRlcm4gdTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZnJlZWxpc3RfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHN0cnVjdCBkcm1fYnVmICpyYWRlb25fZnJlZWxpc3RfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKQEAgLTM4Myw2ICs0MTksMTAgQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKIAorZXh0ZXJuIHZvaWQgcmFkZW9uX2VuYWJsZV9ibShzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdTMyIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYsIHUzMiB2YWwpOworCiAJCQkJLyogcmFkZW9uX2lycS5jICovCiBleHRlcm4gdm9pZCByYWRlb25faXJxX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgbWFzaywgaW50IHN0YXRlKTsKIGV4dGVybiBpbnQgcmFkZW9uX2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKQEAgLTQyMyw2ICs0NjMsMjEgQEAKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkgICAgIGRybV9yYWRlb25fa2NtZF9idWZmZXJfdCAqY21kYnVmKTsKIAorLyogcjYwMF9jcC5jICovCitleHRlcm4gaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NsZWFudXBfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3BfcmVzZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIGludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpOworZXh0ZXJuIGludCByNjAwX3BhZ2VfdGFibGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKKwogLyogRmxhZ3MgZm9yIHN0YXRzLmJveGVzCiAgKi8KICNkZWZpbmUgUkFERU9OX0JPWF9ETUFfSURMRSAgICAgIDB4MQpAQCAtNDM0LDYgKzQ4OSw4IEBACiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucywgcmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyBhbmQgZHJtQWRkTWFwIGNvbnN0YW50cwogICogZm9yIFJhZGVvbiBrZXJuZWwgZHJpdmVyLgogICovCisjZGVmaW5lIFJBREVPTl9NTV9JTkRFWAkJICAgICAgICAweDAwMDAKKyNkZWZpbmUgUkFERU9OX01NX0RBVEEJCSAgICAgICAgMHgwMDA0CiAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5ECQkweDBmNjAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5EX1BDSV9DT05GSUcgICAweDAwNjAJLyogb2Zmc2V0IGluIFBDSSBjb25maWcgKi8KQEAgLTU1Niw2ICs2MTMsNTYgQEAKICNkZWZpbmUgUlM2OTBfTUNfQUdQX0JBU0UgICAgICAgICAgICAgICAweDEwMgogI2RlZmluZSBSUzY5MF9NQ19BR1BfQkFTRV8yICAgICAgICAgICAgIDB4MTAzCiAKKyNkZWZpbmUgUlM2MDBfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0FERFJfTUFTSyAgICAgICAgICAgICAgIDB4ZmZmZgorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMCAgICAgICAgICAgKDEgPDwgMTYpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAoMSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9TRVFfUkJTXzIgICAgICAgICAgICgxIDw8IDE4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMyAgICAgICAgICAgKDEgPDwgMTkpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9DSVRGX0FSQjAgICAgICAgICAgICgxIDw8IDIxKQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMSAgICAgICAgICAgKDEgPDwgMjIpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgUlM2MDBfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQKKworI2RlZmluZSBSUzYwMF9NQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JRExFICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSUzYwMF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIFJTNjAwX01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDUKKyNkZWZpbmUgUlM2MDBfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NgorI2RlZmluZSBSUzYwMF9BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lIFJTNjAwX01DX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAweDkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUyAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSBSUzYwMF9NQ19QVDBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QVCAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgKCh4KSA8PCAyMSkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgICAgICgxIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAweDEwMgorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1BBR0VfVEFCTEVfVFlQRV9GTEFUICAgICAgICgwIDw8IDEpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAweDExMgorI2RlZmluZSBSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgMHgxMTQKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0RFRkFVTFRfUkVBRF9BRERSIDB4MTFjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAweDEyYworI2RlZmluZSBSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSICAgMHgxM2MKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIgICAgIDB4MTRjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAweDE2YworIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU1RIUk9VR0ggICAgICAgICgwIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgICAgICAgKDEgPDwgMTApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDExKQorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgKDEgPDwgMTQpCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgKDEgPDwgMjApCisKICNkZWZpbmUgUjUyMF9NQ19JTkRfSU5ERVggMHg3MAogI2RlZmluZSBSNTIwX01DX0lORF9XUl9FTiAoMSA8PCAyNCkKICNkZWZpbmUgUjUyMF9NQ19JTkRfREFUQSAgMHg3NApAQCAtNTgwLDcgKzY4Nyw2IEBACiAvKiBwaXBlIGNvbmZpZyByZWdzICovCiAjZGVmaW5lIFI0MDBfR0JfUElQRV9TRUxFQ1QgICAgICAgICAgICAgMHg0MDJjCiAjZGVmaW5lIFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSAgICAgICAgMHgwMDBkIC8qIFBMTCAqLwotI2RlZmluZSBSNTAwX1NVX1JFR19ERVNUICAgICAgICAgICAgICAgIDB4NDJjOAogI2RlZmluZSBSMzAwX0dCX1RJTEVfQ09ORklHICAgICAgICAgICAgIDB4NDAxOAogIyAgICAgICBkZWZpbmUgUjMwMF9FTkFCTEVfVElMSU5HICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX1BJUEVfQ09VTlRfUlYzNTAgICAgKDAgPDwgMSkKQEAgLTYzOSw5ICs3NDUsMjIgQEAKIAogI2RlZmluZSBSQURFT05fU0NSQVRDSE9GRiggeCApCQkoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCArIDQqKHgpKQogCi0jZGVmaW5lIEdFVF9TQ1JBVENIKCB4ICkJKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MJCQlcCi0JCQkJPyBEUk1fUkVBRDMyKCBkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRih4KSApIFwKLQkJCQk6IFJBREVPTl9SRUFEKCBSQURFT05fU0NSQVRDSF9SRUcwICsgNCooeCkgKSApCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCk7CisKKyNkZWZpbmUgR0VUX1NDUkFUQ0goZGV2X3ByaXYsIHgpIHJhZGVvbl9nZXRfc2NyYXRjaChkZXZfcHJpdiwgeCkKKworI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMAkJMHg4NTAwCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUcxCQkweDg1MDQKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzIJCTB4ODUwOAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMwkJMHg4NTBjCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc0CQkweDg1MTAKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzUJCTB4ODUxNAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHNgkJMHg4NTE4CisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc3CQkweDg1MWMKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1VNU0sJCTB4ODU0MAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfQUREUgkJMHg4NTQ0CisKKyNkZWZpbmUgUjYwMF9TQ1JBVENIT0ZGKHgpCQkoUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQgKyA0Kih4KSkKIAogI2RlZmluZSBSQURFT05fR0VOX0lOVF9DTlRMCQkweDAwNDAKICMJZGVmaW5lIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLCQkoMSA8PCAwKQpAQCAtOTIyLDYgKzEwNDEsNyBAQAogI2RlZmluZSBSQURFT05fQ1BfUkJfQ05UTAkJMHgwNzA0CiAjCWRlZmluZSBSQURFT05fQlVGX1NXQVBfMzJCSVQJCSgyIDw8IDE2KQogIwlkZWZpbmUgUkFERU9OX1JCX05PX1VQREFURQkJKDEgPDwgMjcpCisjCWRlZmluZSBSQURFT05fUkJfUlBUUl9XUl9FTkEJCSgxIDw8IDMxKQogI2RlZmluZSBSQURFT05fQ1BfUkJfUlBUUl9BRERSCQkweDA3MGMKICNkZWZpbmUgUkFERU9OX0NQX1JCX1JQVFIJCTB4MDcxMAogI2RlZmluZSBSQURFT05fQ1BfUkJfV1BUUgkJMHgwNzE0CkBAIC05ODMsNiArMTEwMywxNCBAQAogIwlkZWZpbmUgUkFERU9OX0NOVExfQklUQkxUX01VTFRJCQkweDAwMDA5QjAwCiAjCWRlZmluZSBSQURFT05fQ05UTF9TRVRfU0NJU1NPUlMJCTB4QzAwMDFFMDAKIAorIwlkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVIJCTB4MDAwMDMyMDAKKyMJZGVmaW5lIFI2MDBfSVRfTUVfSU5JVElBTElaRQkJMHgwMDAwNDQwMAorIwkgICAgICAgZGVmaW5lIFI2MDBfTUVfSU5JVElBTElaRV9ERVZJQ0VfSUQoeCkgKCh4KSA8PCAxNikKKyMJZGVmaW5lIFI2MDBfSVRfRVZFTlRfV1JJVEUJCTB4MDAwMDQ2MDAKKyMJZGVmaW5lIFI2MDBfSVRfU0VUX0NPTkZJR19SRUcJCTB4MDAwMDY4MDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUICAgICAgIDB4MDAwMDgwMDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfRU5EICAgICAgICAgIDB4MDAwMGFjMDAKKwogI2RlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BU0sJCTB4QzAwMDAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLCTB4M2ZmZjAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDBfUkVHX01BU0sJMHgwMDAwMDdmZgpAQCAtMTE4MSw2ICsxMzA5LDQyMiBAQAogI2RlZmluZSBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQgKDEgPDwgNCkKICNkZWZpbmUgUjUwMF9EMl9WQkxBTktfSU5URVJSVVBUICgxIDw8IDUpCiAKKy8qIFI2eHgvUjd4eCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjYwMF9NQ19WTV9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MAorI2RlZmluZSBSNjAwX01DX1ZNX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTg0CisjZGVmaW5lIFI2MDBfTUNfVk1fQUdQX0JPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxODgKKyNkZWZpbmUgUjYwMF9NQ19WTV9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4YworI2RlZmluZSBSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiAgICAgICAgICAgICAgICAgICAgMHgyMTkwCisjZGVmaW5lIFI2MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgICAgICAgICAgICAgICAgICAweDIxOTQKKyNkZWZpbmUgUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSICAgICAgICAgICAgICAgIDB4MjE5OAorCisjZGVmaW5lIFI3MDBfTUNfVk1fRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMjQKKyNkZWZpbmUgUjcwMF9NQ19WTV9BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyOAorI2RlZmluZSBSNzAwX01DX1ZNX0FHUF9CT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDJjCisjZGVmaW5lIFI3MDBfTUNfVk1fQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMzAKKyNkZWZpbmUgUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgICAgICAgICAgICAgICAgIDB4MjAzNAorI2RlZmluZSBSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIgICAgICAgICAgICAgICAgICAgMHgyMDM4CisjZGVmaW5lIFI3MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiAgICAgICAgICAgICAgICAweDIwM2MKKworI2RlZmluZSBSNjAwX01DRF9SRF9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTljCisjZGVmaW5lIFI2MDBfTUNEX1JEX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTAKKworI2RlZmluZSBSNjAwX01DRF9XUl9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWE0CisjZGVmaW5lIFI2MDBfTUNEX1dSX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTgKKworI2RlZmluZSBSNjAwX01DRF9SRF9TWVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjAwCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NZU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTQKKworI2RlZmluZSBSNjAwX01DRF9SRF9HRlhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWZjCisjZGVmaW5lIFI2MDBfTUNEX1JEX0hEUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDQKKyNkZWZpbmUgUjYwMF9NQ0RfUkRfUERNQV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwOAorI2RlZmluZSBSNjAwX01DRF9SRF9TRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjBjCisjZGVmaW5lIFI2MDBfTUNEX1dSX0dGWF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTAKKyNkZWZpbmUgUjYwMF9NQ0RfV1JfSERQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIxOAorI2RlZmluZSBSNjAwX01DRF9XUl9QRE1BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjFjCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NFTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMjAKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX0wxX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9MMV9TVFJJQ1RfT1JERVJJTkcgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgNikKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfREVGQVVMVF9QQUdFICgxIDw8IDgpCisKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NFTUFQSE9SRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfV0FJVF9MMl9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkgICAgICAgICAgICAgKCh4KSA8PCAxNSkKKworI2RlZmluZSBSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjU0CisjZGVmaW5lIFI3MDBfTUNfVk1fTURfTDFfVExCMV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2NTgKKyNkZWZpbmUgUjcwMF9NQ19WTV9NRF9MMV9UTEIyX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY1YworCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCMF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMzQKKyNkZWZpbmUgUjcwMF9NQ19WTV9NQl9MMV9UTEIxX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIzOAorI2RlZmluZSBSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjNjCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCM19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyNDAKKworIyAgICAgICBkZWZpbmUgUjcwMF9FTkFCTEVfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgICAgICAgICAgICAgICAgICAoMiA8PCAzKQorIyAgICAgICBkZWZpbmUgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSAgKDAgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTUpCisjICAgICAgIGRlZmluZSBSNzAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDE4KQorCisjZGVmaW5lIFI3MDBfTUNfQVJCX1JBTUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3NjAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgUjYwMF9SQU1DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzCisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ0FDSEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTMpCisjICAgICAgIGRlZmluZSBSNzAwX1ZNX0wyX0NOVExfUVVFVUVfU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE0KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDJfSU5WQUxJREFURV9BTExfTDFfVExCUyAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwyX0lOVkFMSURBVEVfTDJfQ0FDSEUgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSNjAwX1ZNX0wyX0NOVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA4CisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzAoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzEoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKHgpICAgICAgICAgICAoKHgpIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19DQUNIRV9VUERBVEVfTU9ERSh4KSAgICAgICAgICAgKCh4KSA8PCA2KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MGMKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEwCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQgICAgICAgICAgICAgICAgICAgKDAgPDwgMSkKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSAgICAgICAgICAgICAgICAgICAgICAweDE0NzAKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9JTlZBTElEQVRJT05fTE9XX0FERFIgICAgICAgICAgICAgICAgIDB4MTQ5MAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIgICAgICAgICAgICAgICAgMHgxNGIwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAweDE1NzQKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIgICAgICAgICAgICAgICAgIDB4MTU5NAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIgICAgICAgICAgICAgICAgICAgMHgxNWI0CisKKyNkZWZpbmUgUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgIDB4MTUzYworI2RlZmluZSBSNzAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiAgICAgICAgICAgICAgICAgMHgxNTVjCisjZGVmaW5lIFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiAgICAgICAgICAgICAgICAgICAweDE1N2MKKworI2RlZmluZSBSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYzAwCisKKyNkZWZpbmUgUjYwMF9HUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9HUkJNX1JFQURfVElNRU9VVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYKKyMgICAgICAgZGVmaW5lIFI3MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZgorIyAgICAgICBkZWZpbmUgUjYwMF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTQKKyNkZWZpbmUgUjYwMF9HUkJNX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAyMAorIyAgICAgICBkZWZpbmUgUjYwMF9TT0ZUX1JFU0VUX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUjYwMF9XQUlUX1VOVElMCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisKKyNkZWZpbmUgUjYwMF9DUF9TRU1fV0FJVF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODViYworI2RlZmluZSBSNjAwX0NQX01FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NmQ4CisjICAgICAgIGRlZmluZSBSNjAwX0NQX01FX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc2MAorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIxX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIyX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorI2RlZmluZSBSNjAwX0NQX01FUV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjICAgICAgIGRlZmluZSBSNzAwX1NUUV9TUExJVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX01FUV9FTkQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfRU5EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjYwMF9DUF9QRVJGTU9OX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdmYworI2RlZmluZSBSNjAwX0NQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTAwCisjZGVmaW5lIFI2MDBfQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDQKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfTk9fVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9SUFRSX1dSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDgKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwYworI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTEwCisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMTQKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzExOAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTFjCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3MDAKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0RFTEFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcwNAorI2RlZmluZSBSNjAwX0NQX1BGUF9VQ09ERV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTUwCisjZGVmaW5lIFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNTQKKyNkZWZpbmUgUjYwMF9DUF9NRV9SQU1fUkFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzE1OAorI2RlZmluZSBSNjAwX0NQX01FX1JBTV9XQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTVjCisjZGVmaW5lIFI2MDBfQ1BfTUVfUkFNX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNjAKKyNkZWZpbmUgUjYwMF9DUF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzFmYworCisjZGVmaW5lIFI2MDBfUEFfQ0xfRU5IQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0xJUF9WVFhfUkVPUkRFUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9DTElQX1NFUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjZGVmaW5lIFI2MDBfUEFfU0NfTElORV9TVElQUExFX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiMTAKKyNkZWZpbmUgUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGIyMAorI2RlZmluZSBSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjI0CisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfUkVaX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzJTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjQwCisjZGVmaW5lIFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiNDQKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDAgICAgICAgICAgICAgICAgICAgICAgIDB4OGI0OAorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMSAgICAgICAgICAgICAgICAgICAgICAgMHg4YjRjCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDQpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9TMl9YKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfUzJfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjApCisjICAgICAgIGRlZmluZSBSNjAwX1MzX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TM19ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTIpCisjICAgICAgIGRlZmluZSBSNjAwX1M2X1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9TNl9ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzdfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjICAgICAgIGRlZmluZSBSNjAwX1M3X1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorI2RlZmluZSBSNjAwX1BBX1NDX0ZJRk9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmQwCisjICAgICAgIGRlZmluZSBSNjAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNzAwX1BBX1NDX0ZJRk9fU0laRV9SN1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmNjCisjICAgICAgIGRlZmluZSBSNzAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjcwMF9TQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUoeCkgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjYwMF9QQV9TQ19FTkhBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGJmMAorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX1RJTEVfQ05UKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMikKKyNkZWZpbmUgUjYwMF9QQV9TQ19DTElQUkVDVF9SVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMGMKKyNkZWZpbmUgUjcwMF9QQV9TQ19FREdFUlVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMzAKKyNkZWZpbmUgUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhMGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19NT0RFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhNGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjMDQKKworI2RlZmluZSBSNjAwX1NYX0VYUE9SVF9CVUZGRVJfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDBjCisjICAgICAgIGRlZmluZSBSNjAwX0NPTE9SX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9CVUZGRVJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX0RFQlVHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDU0CisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9FVkVOVF9SRUxFQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIFI3MDBfU1hfREVCVUdfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwNTgKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX05FV19TTVhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODM1MAorCisjZGVmaW5lIFI2MDBfREJfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk4MzAKKyMgICAgICAgZGVmaW5lIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBSNjAwX0RCX1dBVEVSTUFSS1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5ODM4CisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZSRUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZMVVNIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX1BFTkRJTkdfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9ERVBUSF9DQUNIRUxJTkVfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjcwMF9EQl9ERUJVRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThiMAorIyAgICAgICBkZWZpbmUgUjcwMF9EQl9DTEtfT0ZGX0RFTEFZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyNkZWZpbmUgUlY3MDBfREJfREVCVUc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OWI4YworIyAgICAgICBkZWZpbmUgUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVIgICAgICAgICAgKDEgPDwgNikKKworI2RlZmluZSBSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGM0CisjICAgICAgIGRlZmluZSBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNjAwX1RDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX0FORF9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0FVVE9fSU5WTERfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX05PX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FORF9HU19BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFI2MDBfVkdUX0dTX1BFUl9FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4YzgKKyNkZWZpbmUgUjYwMF9WR1RfRVNfUEVSX0dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhjYworI2RlZmluZSBSNjAwX1ZHVF9HU19QRVJfVlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGU4CisjZGVmaW5lIFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4ZDQKKyNkZWZpbmUgUjYwMF9WR1RfTlVNX0lOU1RBTkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk3NAorI2RlZmluZSBSNjAwX1ZHVF9TVFJNT1VUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGFiMAorI2RlZmluZSBSNjAwX1ZHVF9FVkVOVF9JTklUSUFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGE5MAorIyAgICAgICBkZWZpbmUgUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UICAgICAgICAgICAgICAgICAgKDB4MTYgPDwgMCkKKyNkZWZpbmUgUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNTgKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNWMKKyMgICAgICAgZGVmaW5lIFI2MDBfREVBTExPQ19ESVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YKKworI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SM19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0YworI2RlZmluZSBSNjAwX0NCX0NPTE9SNF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SN19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1YworI2RlZmluZSBSNjAwX0NCX0NPTE9SN19GUkFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBmYworCisjZGVmaW5lIFI2MDBfVENfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk2MDgKKyMgICAgICAgZGVmaW5lIFI2MDBfVENfTDJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI2MDBfTDJfRElTQUJMRV9MQVRFX0hJVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisKKyNkZWZpbmUgUjYwMF9BUkJfUE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQxOAorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfVEMxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIFI2MDBfQVJCX0dERUNfUkRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0NmMKKworI2RlZmluZSBSNjAwX1RBX0NOVExfQVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NTA4CisjICAgICAgIGRlZmluZSBSNjAwX0RJU0FCTEVfQ1VCRV9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyMgICAgICAgZGVmaW5lIFI3MDBfR0VUTE9EX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfU1lOQ19HUkFESUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TWU5DX1dBTEtFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCisjICAgICAgIGRlZmluZSBSNjAwX1NZTkNfQUxJR05FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI2MDBfQklMSU5FQVJfUFJFQ0lTSU9OXzZfQklUICAgICAgICAgICAgICAgICAgICgwIDw8IDMxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CSUxJTkVBUl9QUkVDSVNJT05fOF9CSVQgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisKKyNkZWZpbmUgUjcwMF9UQ1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYxMAorCisjZGVmaW5lIFI2MDBfU01YX0RDX0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGEwMjAKKyMgICAgICAgZGVmaW5lIFI3MDBfVVNFX0hBU0hfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0NBQ0hFX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX0ZMVVNIX0FMTF9PTl9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfU1RBTExfT05fRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBSNzAwX1NNWF9FVkVOVF9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMDJjCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDMpCisjICAgICAgIGRlZmluZSBSNzAwX0FDS19GTFVTSF9DVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX1NZTkNfRkxVU0hfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorCisjZGVmaW5lIFI2MDBfU1FfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0VYUE9SVF9TUkNfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9EWDlfQ09OU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfQUxVX0lOU1RfUFJFRkVSX1ZFQ1RPUiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjICAgICAgIGRlZmluZSBSNjAwX0RYMTBfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9DTEFVU0VfU0VRX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfVlNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX0dTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUjYwMF9FU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAzMCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwNAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI3MDBfRFlOX0dQUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fRVNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwYworIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfTVNfRklGT19TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjZjAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0FDSEVfRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjICAgICAgIGRlZmluZSBSNjAwX0FMVV9VUERBVEVfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGIwCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURCX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjcwMF9TSU1EQl9SSU5HMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRiNAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGI4CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYmMKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjMAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGM0CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNiAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYzgKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjYworCisjZGVmaW5lIFI2MDBfU1BJX1BTX0lOX0NPTlRST0xfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4NmNjCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9JTlRFUlAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9DRU5UUk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfUE9TSVRJT05fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTApCisjICAgICAgIGRlZmluZSBSNjAwX1BBUkFNX0dFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9QQVJBTV9HRU5fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFSWUNfU0FNUExFX0NOVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX1BFUlNQX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTElORUFSX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9TQU1QTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjICAgICAgIGRlZmluZSBSNjAwX0JBUllDX0FUX1NBTVBMRV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg2ZDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR0VOX0lOREVYX1BJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0dFTl9JTkRFWF9QSVhfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0NIQU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA5KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0FMTF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT0dfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFI2MDBfRklYRURfUFRfUE9TSVRJT05fRU5BICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9GSVhFRF9QVF9QT1NJVElPTl9BRERSKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfUE9TSVRJT05fVUxDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBSNjAwX1NQSV9JTlBVVF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODZkOAorCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR1BSX1dSSVRFX1BSSU9SSVRZKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRElTQUJMRV9JTlRFUlBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxM2MKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX0RPTkVfREVMQVkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5URVJQX09ORV9QUklNX1BFUl9ST1cgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgUjYwMF9HQl9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThmMAorIyAgICAgICBkZWZpbmUgUjYwMF9QSVBFX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9HUk9VUF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1dfVElMSU5HKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1NXQVBTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIFI2MDBfU0FNUExFX1NQTElUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTQpCisjICAgICAgIGRlZmluZSBSNjAwX0JBQ0tFTkRfTUFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX0RDUF9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2Y2EwCisjZGVmaW5lIFI2MDBfSERQX1RJTElOR19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJmM2MKKworI2RlZmluZSBSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OGY0CisjZGVmaW5lIFI3MDBfQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDNmODgKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFDS0VORF9ESVNBQkxFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisKKyNkZWZpbmUgUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk1MAorI2RlZmluZSBSNjAwX0dDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHg4OTU0CisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9JTkFDVElWRV9TSU1EUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5BQ1RJVkVfU0lNRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweGZmIDw8IDE2KQorCisjZGVmaW5lIFI3MDBfQ0dUU19TWVNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmOTAKKyNkZWZpbmUgUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2Y5NAorI2RlZmluZSBSNzAwX0NHVFNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ4CisjZGVmaW5lIFI3MDBfQ0dUU19VU0VSX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxNGMKKwogLyogQ29uc3RhbnRzICovCiAjZGVmaW5lIFJBREVPTl9NQVhfVVNFQ19USU1FT1VUCQkxMDAwMDAJLyogMTAwIG1zICovCiAKQEAgLTExOTAsNiArMTczNCwxMSBAQAogI2RlZmluZSBSQURFT05fTEFTVF9TV0lfUkVHCQlSQURFT05fU0NSQVRDSF9SRUczCiAjZGVmaW5lIFJBREVPTl9MQVNUX0RJU1BBVENICQkxCiAKKyNkZWZpbmUgUjYwMF9MQVNUX0ZSQU1FX1JFRwkJUjYwMF9TQ1JBVENIX1JFRzAKKyNkZWZpbmUgUjYwMF9MQVNUX0RJU1BBVENIX1JFRwkgICAgICAgIFI2MDBfU0NSQVRDSF9SRUcxCisjZGVmaW5lIFI2MDBfTEFTVF9DTEVBUl9SRUcJCVI2MDBfU0NSQVRDSF9SRUcyCisjZGVmaW5lIFI2MDBfTEFTVF9TV0lfUkVHCQlSNjAwX1NDUkFUQ0hfUkVHMworCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfQUdFCQkweDdmZmZmZmZmCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfVkVSVFMJCSgweGZmZmYpCiAKQEAgLTExOTgsNyArMTc0NywxNSBAQAogI2RlZmluZSBSQURFT05fUENJR0FSVF9UQUJMRV9TSVpFICAgICAgKDMyKjEwMjQpCiAKICNkZWZpbmUgUkFERU9OX1JFQUQocmVnKQlEUk1fUkVBRDMyKCAgZGV2X3ByaXYtPm1taW8sIChyZWcpICkKLSNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZyx2YWwpCURSTV9XUklURTMyKCBkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpICkKKyNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZywgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHJlZyA8IDB4MTAwMDApIHsJCQkJICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSk7CQlcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIFJBREVPTl9NTV9JTkRFWCwgKHJlZykpOwlcCisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSwgKHZhbCkpOwlcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCiAjZGVmaW5lIFJBREVPTl9SRUFEOChyZWcpCURSTV9SRUFEOCggIGRldl9wcml2LT5tbWlvLCAocmVnKSApCiAjZGVmaW5lIFJBREVPTl9XUklURTgocmVnLHZhbCkJRFJNX1dSSVRFOCggZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSApCiAKQEAgLTEyMzgsMTEgKzE3OTUsMTkgQEAKIAlSQURFT05fV1JJVEUoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CVwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgUlM2MDBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCitkbyB7CQkJCQkJCSAgICAgICAgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19JTkRFWCwgUlM2MDBfTUNfSU5EX1dSX0VOIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCB8ICgoYWRkcikgJiBSUzYwMF9NQ19BRERSX01BU0spKTsgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19EQVRBLCB2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBJR1BfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCiAJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKKwllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSAgXAorCQlSUzYwMF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiAJZWxzZQkJCQkJCQkJXAogCQlSUzQ4MF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTM0Niw3ICsxOTExLDExIEBACiAJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OwlcCiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CVwKIAlpZiAoIHNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPj0gUkFERU9OX01BWF9WQl9BR0UgKSB7CQlcCi0JCWludCBfX3JldCA9IHJhZGVvbl9kb19jcF9pZGxlKCBkZXZfcHJpdiApOwkJXAorCQlpbnQgX19yZXQ7CQkJCQkJXAorCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSBcCisJCQlfX3JldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX19yZXQgPSByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCiAJCWlmICggX19yZXQgKSByZXR1cm4gX19yZXQ7CQkJCVwKIAkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IDA7CQkJCVwKIAkJcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkZXYgKTsJCQkJXApAQCAtMTM2OCwyMSArMTkzNyw0MCBAQAogCU9VVF9SSU5HKCBhZ2UgKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIFI2MDBfRElTUEFUQ0hfQUdFKGFnZSkgZG8gewkJCQkJXAorCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgMSkpOwkJXAorCU9VVF9SSU5HKChSNjAwX0xBU1RfRElTUEFUQ0hfUkVHIC0gUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOyAgXAorCU9VVF9SSU5HKGFnZSk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUjYwMF9GUkFNRV9BR0UoYWdlKSBkbyB7CQkJCQlcCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CQlcCisJT1VUX1JJTkcoKFI2MDBfTEFTVF9GUkFNRV9SRUcgLSBSNjAwX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7ICBcCisJT1VUX1JJTkcoYWdlKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBSNjAwX0NMRUFSX0FHRShhZ2UpIGRvIHsJCQkJCVwKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTkZJR19SRUcsIDEpKTsJCVwKKwlPVVRfUklORygoUjYwMF9MQVNUX0NMRUFSX1JFRyAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsgIFwKKwlPVVRfUklORyhhZ2UpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBSaW5nIGNvbnRyb2wKICAqLwogCiAjZGVmaW5lIFJBREVPTl9WRVJCT1NFCTAKIAotI2RlZmluZSBSSU5HX0xPQ0FMUwlpbnQgd3JpdGUsIF9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKKyNkZWZpbmUgUklOR19MT0NBTFMJaW50IHdyaXRlLCBfbnIsIF9hbGlnbl9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKIAogI2RlZmluZSBCRUdJTl9SSU5HKCBuICkgZG8gewkJCQkJCVwKIAlpZiAoIFJBREVPTl9WRVJCT1NFICkgewkJCQkJCVwKIAkJRFJNX0lORk8oICJCRUdJTl9SSU5HKCAlZCApXG4iLCAobikpOwkJCVwKIAl9CQkJCQkJCQlcCi0JaWYgKCBkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAobikgKiBzaXplb2YodTMyKSApIHsJCVwKKwlfYWxpZ25fbnIgPSAobiArIDB4ZikgJiB+MHhmOwkJCQkJXAorCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAoX2FsaWduX25yICogc2l6ZW9mKHUzMikpKSB7CVwKICAgICAgICAgICAgICAgICBDT01NSVRfUklORygpOwkJCQkJCVwKLQkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIChuKSAqIHNpemVvZih1MzIpICk7CVwKKwkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIF9hbGlnbl9uciAqIHNpemVvZih1MzIpKTsJXAogCX0JCQkJCQkJCVwKIAlfbnIgPSBuOyBkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSAobikgKiBzaXplb2YodTMyKTsJCVwKIAlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CQkJCQlcCkBAIC0xMzk5LDE5ICsxOTg3LDE2IEBACiAJCURSTV9FUlJPUigJCQkJCQlcCiAJCQkiQURWQU5DRV9SSU5HKCk6IG1pc21hdGNoOiBucjogJXggd3JpdGU6ICV4IGxpbmU6ICVkXG4iLAlcCiAJCQkoKGRldl9wcml2LT5yaW5nLnRhaWwgKyBfbnIpICYgbWFzayksCQlcCi0JCQl3cml0ZSwgX19MSU5FX18pOwkJCQkJCVwKKwkJCXdyaXRlLCBfX0xJTkVfXyk7CQkJCVwKIAl9IGVsc2UJCQkJCQkJCVwKIAkJZGV2X3ByaXYtPnJpbmcudGFpbCA9IHdyaXRlOwkJCQlcCiB9IHdoaWxlICgwKQogCitleHRlcm4gdm9pZCByYWRlb25fY29tbWl0X3JpbmcoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKKwogI2RlZmluZSBDT01NSVRfUklORygpIGRvIHsJCQkJCQlcCi0JLyogRmx1c2ggd3JpdGVzIHRvIHJpbmcgKi8JCQkJCVwKLQlEUk1fTUVNT1JZQkFSUklFUigpOwkJCQkJCVwKLQlHRVRfUklOR19IRUFEKCBkZXZfcHJpdiApOwkJCQkJXAotCVJBREVPTl9XUklURSggUkFERU9OX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwgKTsJCVwKLQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCQlcCi0JUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9SUFRSICk7CQkJCVwKLX0gd2hpbGUgKDApCisJCXJhZGVvbl9jb21taXRfcmluZyhkZXZfcHJpdik7CQkJCVwKKwl9IHdoaWxlKDApCiAKICNkZWZpbmUgT1VUX1JJTkcoIHggKSBkbyB7CQkJCQkJXAogCWlmICggUkFERU9OX1ZFUkJPU0UgKSB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCA4Mjg5ZTE2Li45ODM2YzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtNjUsNyArNjUsNyBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCXN3aXRjaCAoY3J0YykgewogCQljYXNlIDA6CiAJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMU1PREVfSU5UX01BU0ssIDEpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApIHsKIAkJc3dpdGNoIChjcnRjKSB7CiAJCWNhc2UgMDoKIAkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMCk7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAl1MzIgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CiAKIAkqcjUwMF9kaXNwX2ludCA9IDA7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLwogCiAJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCWlmIChyNTAwX2Rpc3BfaW50ICYgUjUwMF9EMV9WQkxBTktfSU5URVJSVVBUKQogCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQlpZiAoY3J0YyA9PSAwKQogCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKIAkJZWxzZQpAQCAtMzI3LDcgKzMyNyw3IEBACiAJdTMyIGR1bW15OwogCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCBlZjk0MGEwLi5mYTcyOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTE1NTYsOSArMTU1NiwxNSBAQAogCWJ1Zl9wcml2LT5hZ2UgPSArK21hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoOwogCiAJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciBhZ2UgKi8KLQlCRUdJTl9SSU5HKDIpOwotCVJBREVPTl9ESVNQQVRDSF9BR0UoYnVmX3ByaXYtPmFnZSk7Ci0JQURWQU5DRV9SSU5HKCk7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkgeworCQlCRUdJTl9SSU5HKDMpOworCQlSNjAwX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfSBlbHNlIHsKKwkJQkVHSU5fUklORygyKTsKKwkJUkFERU9OX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfQogCiAJYnVmLT5wZW5kaW5nID0gMTsKIAlidWYtPnVzZWQgPSAwOwpAQCAtMTk4MCw3ICsxOTg2LDcgQEAKIAogCS8qIGZpbmQgYSB2aXJ0dWFsIHN1cmZhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMiAqIFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykKLQkJaWYgKGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSAwKQorCQlpZiAoZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV0uZmlsZV9wcml2ID09IE5VTEwpCiAJCQlicmVhazsKIAlpZiAoaSA9PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykgewogCQlyZXR1cm4gLTE7CkBAIC0yNDczLDI0ICsyNDc5LDI1IEBACiAKIAlidWYtPnVzZWQgPSBpbmRpcmVjdC0+ZW5kOwogCi0JLyogV2FpdCBmb3IgdGhlIDNEIHN0cmVhbSB0byBpZGxlIGJlZm9yZSB0aGUgaW5kaXJlY3QgYnVmZmVyCi0JICogY29udGFpbmluZyAyRCBhY2NlbGVyYXRpb24gY29tbWFuZHMgaXMgcHJvY2Vzc2VkLgotCSAqLwotCUJFR0lOX1JJTkcoMik7Ci0KLQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7Ci0KLQlBRFZBTkNFX1JJTkcoKTsKLQogCS8qIERpc3BhdGNoIHRoZSBpbmRpcmVjdCBidWZmZXIgZnVsbCBvZiBjb21tYW5kcyBmcm9tIHRoZQogCSAqIFggc2VydmVyLiAgVGhpcyBpcyBpbnNlY3VyZSBhbmQgaXMgdGh1cyBvbmx5IGF2YWlsYWJsZSB0bwogCSAqIHByaXZpbGVnZWQgY2xpZW50cy4KIAkgKi8KLQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7Ci0JaWYgKGluZGlyZWN0LT5kaXNjYXJkKSB7Ci0JCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CisJZWxzZSB7CisJCS8qIFdhaXQgZm9yIHRoZSAzRCBzdHJlYW0gdG8gaWRsZSBiZWZvcmUgdGhlIGluZGlyZWN0IGJ1ZmZlcgorCQkgKiBjb250YWluaW5nIDJEIGFjY2VsZXJhdGlvbiBjb21tYW5kcyBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlCRUdJTl9SSU5HKDIpOworCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CisJCUFEVkFOQ0VfUklORygpOworCQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CiAJfQogCisJaWYgKGluZGlyZWN0LT5kaXNjYXJkKQorCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKKwogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEwLDE0ICszMDE3LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0xBU1RfRlJBTUU6CiAJCWRldl9wcml2LT5zdGF0cy5sYXN0X2ZyYW1lX3JlYWRzKys7Ci0JCXZhbHVlID0gR0VUX1NDUkFUQ0goMCk7CisJCXZhbHVlID0gR0VUX1NDUkFUQ0goZGV2X3ByaXYsIDApOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9MQVNUX0RJU1BBVENIOgotCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDEpOworCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKGRldl9wcml2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fTEFTVF9DTEVBUjoKIAkJZGV2X3ByaXYtPnN0YXRzLmxhc3RfY2xlYXJfcmVhZHMrKzsKLQkJdmFsdWUgPSBHRVRfU0NSQVRDSCgyKTsKKwkJdmFsdWUgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKIAkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwpAQCAtMzA1Miw3ICszMDU5LDEwIEBACiAJY2FzZSBSQURFT05fUEFSQU1fU0NSQVRDSF9PRkZTRVQ6CiAJCWlmICghZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUOworCQllbHNlCisJCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0NBUkRfVFlQRToKIAkJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQpAQCAtMzE1NSw2ICszMTY1LDcgQEAKIAogdm9pZCByYWRlb25fZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXJhZGVvbl9zdXJmYWNlc19yZWxlYXNlKFBDSUdBUlRfRklMRV9QUklWLCBkZXYtPmRldl9wcml2YXRlKTsKIAlyYWRlb25fZG9fcmVsZWFzZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCmluZGV4IGQ0NjViMmYuLjQ1NmNkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCkBAIC01OTksOCArNTk5LDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMl0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzJdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAwKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCQl9CiAJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TVVBFUlNBVkFHRSAmJgogCQkgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TQVZBR0UyMDAwKSB7CkBAIC02MjAsOCArNjIwLDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMF0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzBdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJbW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCAwOTkzYjQ0Li5iYzJmNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtMjgsMTEgKzI4LDYgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotc3RhdGljIGludCBkcmlfbGlicmFyeV9uYW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJ1bmljaHJvbWUiKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXZpYWRydl9QQ0lfSURTCiB9OwpAQCAtNTIsNyArNDcsNiBAQAogCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLAogCS5pcnFfaGFuZGxlciA9IHZpYV9kcml2ZXJfaXJxX2hhbmRsZXIsCiAJLmRtYV9xdWllc2NlbnQgPSB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQsCi0JLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAogCS5yZWNsYWltX2J1ZmZlcnMgPSBkcm1fY29yZV9yZWNsYWltX2J1ZmZlcnMsCiAJLnJlY2xhaW1fYnVmZmVyc19sb2NrZWQgPSBOVUxMLAogCS5yZWNsYWltX2J1ZmZlcnNfaWRsZWxvY2tlZCA9IHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGI0ZWVhMDIuLmNlNTJiZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTM0MywxMiArMzQzLDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBmc2Nwb3MuCiAKIGNvbmZpZyBTRU5TT1JTX0ZTQ0hNRAotCXRyaXN0YXRlICJGU0MgUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLCBIZWltZGFsbCBhbmQgSGVyYWNsZXMiCisJdHJpc3RhdGUgIkZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgc2Vuc29yIGNoaXBzIgogCWRlcGVuZHMgb24gWDg2ICYmIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2YXJpb3VzIEZ1aml0c3UgU2llbWVucwotCSAgQ29tcHV0ZXJzIHNlbnNvciBjaGlwcywgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkCi0JICB3YXRjaGRvZy4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIEZ1aml0c3UKKwkgIFNpZW1lbnMgQ29tcHV0ZXJzIChGU0MpIHNlbnNvciBjaGlwczogUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLAorCSAgSGVpbWRhbGwsIEhlcmFjbGVzLCBIYWRlcyBhbmQgU3lsZXVzIGluY2x1ZGluZyBzdXBwb3J0IGZvciB0aGUKKwkgIGludGVncmF0ZWQgd2F0Y2hkb2cuCiAKIAkgIFRoaXMgaXMgYSBtZXJnZWQgZHJpdmVyIGZvciBGU0Mgc2Vuc29yIGNoaXBzIHJlcGxhY2luZyB0aGUgZnNjcG9zLAogCSAgZnNjc2N5IGFuZCBmc2NoZXIgZHJpdmVycyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHNldmVyYWwgb3RoZXIgRlNDCkBAIC01NzAsNiArNTcxLDE3IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkzLgogCitjb25maWcgU0VOU09SU19MVEM0MjE1CisJdHJpc3RhdGUgIkxpbmVhciBUZWNobm9sb2d5IExUQzQyMTUiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExpbmVhciBUZWNobm9sb2d5IExUQzQyMTUKKwkgIEhvdCBTd2FwIENvbnRyb2xsZXIgSTJDIGludGVyZmFjZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBsdGM0MjE1LgorCiBjb25maWcgU0VOU09SU19MVEM0MjQ1CiAJdHJpc3RhdGUgIkxpbmVhciBUZWNobm9sb2d5IExUQzQyNDUiCiAJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCkBAIC01ODEsNiArNTkzLDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIGx0YzQyNDUuCiAKK2NvbmZpZyBTRU5TT1JTX0xNOTUyNDEKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQxIHNlbnNvciBjaGlwIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExNOTUyNDEgc2Vuc29yIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyNDEuCisKIGNvbmZpZyBTRU5TT1JTX01BWDExMTEKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTExMSBNdWx0aWNoYW5uZWwsIFNlcmlhbCA4LWJpdCBBREMgY2hpcCIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKQEAgLTYzNSw2ICs2NTYsMjAgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHBjODc0MjcuCiAKK2NvbmZpZyBTRU5TT1JTX1BDRjg1OTEKKwl0cmlzdGF0ZSAiUGhpbGlwcyBQQ0Y4NTkxIEFEQy9EQUMiCisJZGVwZW5kcyBvbiBJMkMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTkxIDQtY2hhbm5lbAorCSAgQURDLCAxLWNoYW5uZWwgREFDIGNoaXBzLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBwY2Y4NTkxLgorCisJICBUaGVzZSBkZXZpY2VzIGFyZSBoYXJkIHRvIGRldGVjdCBhbmQgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KKwkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFNFTlNPUlNfU0lTNTU5NQogCXRyaXN0YXRlICJTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtcyBDb3JwLiBTaVM1NTk1IgogCWRlcGVuZHMgb24gUENJCkBAIC04MjcsNyArODYyLDcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHc4MzYyN2hmLgogCiBjb25maWcgU0VOU09SU19XODM2MjdFSEYKLQl0cmlzdGF0ZSAiV2luYm9uZCBXODM2MjdFSEYvREhHIgorCXRyaXN0YXRlICJXaW5ib25kIFc4MzYyN0VIRi9FSEcvREhHLCBXODM2NjdIRyIKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZQpAQCAtODM4LDYgKzg3Myw4IEBACiAJICBjaGlwIHN1aXRlZCBmb3Igc3BlY2lmaWMgSW50ZWwgcHJvY2Vzc29ycyB0aGF0IHVzZSBQRUNJIHN1Y2ggYXMKIAkgIHRoZSBDb3JlIDIgRHVvLgogCisJICBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBXODM2NjdIRyBjaGlwLgorCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCB3ODM2MjdlaGYuCiAKQEAgLTg5NSw2ICs5MzIsMjIgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5jZQogCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgbGlzM2x2MDJkLgogCitjb25maWcgU0VOU09SU19MSVMzX1NQSQorCXRyaXN0YXRlICJTVE1pY3JvZWxldHJvbmljcyBMSVMzTFYwMkR4IHRocmVlLWF4aXMgZGlnaXRhbCBhY2NlbGVyb21ldGVyIChTUEkpIgorCWRlcGVuZHMgb24gIUFDUEkgJiYgU1BJX01BU1RFUiAmJiBJTlBVVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzTFYwMkR4IGFjY2VsZXJvbWV0ZXIgY29ubmVjdGVkCisJICB2aWEgU1BJLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQorCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KKworCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCisJICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcy4gIElmIHNvLCB0aGUgY29yZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBTUEkgdHJhbnNwb3J0CisJICBpcyBjYWxsZWQgbGlzM2x2MDJkX3NwaS4KKwogY29uZmlnIFNFTlNPUlNfQVBQTEVTTUMKIAl0cmlzdGF0ZSAiQXBwbGUgU01DIChNb3Rpb24gc2Vuc29yLCBsaWdodCBzZW5zb3IsIGtleWJvYXJkIGJhY2tsaWdodCkiCiAJZGVwZW5kcyBvbiBJTlBVVCAmJiBYODYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IDJlODBmMzcuLjNhNmIxZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNTIsNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfSVQ4NykJKz0gaXQ4Ny5vCiBvYmotJChDT05GSUdfU0VOU09SU19LOFRFTVApCSs9IGs4dGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MSVMzTFYwMkQpICs9IGxpczNsdjAyZC5vIGhwX2FjY2VsLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0xJUzNfU1BJKQkrPSBsaXMzbHYwMmQubyBsaXMzbHYwMmRfc3BpLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNjMpCSs9IGxtNjMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MCkJKz0gbG03MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTc1KQkrPSBsbTc1Lm8KQEAgLTY0LDEyICs2NSwxNSBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE05MCkJKz0gbG05MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTkyKQkrPSBsbTkyLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNOTMpCSs9IGxtOTMubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTE05NTI0MSkJKz0gbG05NTI0MS5vCitvYmotJChDT05GSUdfU0VOU09SU19MVEM0MjE1KQkrPSBsdGM0MjE1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xUQzQyNDUpCSs9IGx0YzQyNDUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYMTExMSkJKz0gbWF4MTExMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19NQVgxNjE5KQkrPSBtYXgxNjE5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDY2NTApCSs9IG1heDY2NTAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0lTNTU5NSkJKz0gc2lzNTU5NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3KSs9IHNtc2M0N2IzOTcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEpCSs9IHNtc2M0N20xLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCmluZGV4IDc0MTUzODEuLjUzZjg4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKKysrIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwpAQCAtODEsNzEgKzgxLDg0IEBACiAJdTggY29uZjsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIH07CiAKLXN0YXRpYyBpbnQgZHMxNjIxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBkczE2MjFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGRzMTYyMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgc3RydWN0IGRzMTYyMV9kYXRhICpkczE2MjFfdXBkYXRlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMxNjIxX2lkW10gPSB7Ci0JeyAiZHMxNjIxIiwgZHMxNjIxIH0sCi0JeyAiZHMxNjI1IiwgZHMxNjIxIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRzMTYyMV9pZCk7Ci0KLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczE2MjFfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiZHMxNjIxIiwKLQl9LAotCS5wcm9iZQkJPSBkczE2MjFfcHJvYmUsCi0JLnJlbW92ZQkJPSBkczE2MjFfcmVtb3ZlLAotCS5pZF90YWJsZQk9IGRzMTYyMV9pZCwKLQkuZGV0ZWN0CQk9IGRzMTYyMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCi19OwotCi0vKiBBbGwgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLCBleGNlcHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorLyogVGVtcGVyYXR1cmUgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLgogICAgRFMxNjIxIHVzZXMgYSBoaWdoLWJ5dGUgZmlyc3QgY29udmVudGlvbiwgd2hpY2ggaXMgZXhhY3RseSBvcHBvc2l0ZSB0bwogICAgdGhlIFNNQnVzIHN0YW5kYXJkLiAqLwotc3RhdGljIGludCBkczE2MjFfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW50IGRzMTYyMV9yZWFkX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewotCWlmIChyZWcgPT0gRFMxNjIxX1JFR19DT05GKQotCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQllbHNlCi0JCXJldHVybiBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgcmVnKSk7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHN3YWIxNihyZXQpOwogfQogCi1zdGF0aWMgaW50IGRzMTYyMV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgZHMxNjIxX3dyaXRlX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCiB7Ci0JaWYgKHJlZyA9PSBEUzE2MjFfUkVHX0NPTkYpCi0JCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci0JZWxzZQotCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbHVlKSk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWx1ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmVnID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCXU4IGNvbmYsIG5ld19jb25mOworCisJbmV3X2NvbmYgPSBjb25mID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKIAkvKiBzd2l0Y2ggdG8gY29udGludW91cyBjb252ZXJzaW9uIG1vZGUgKi8KLQlyZWcgJj0gfiBEUzE2MjFfUkVHX0NPTkZJR18xU0hPVDsKKwluZXdfY29uZiAmPSB+RFMxNjIxX1JFR19DT05GSUdfMVNIT1Q7CiAKIAkvKiBzZXR1cCBvdXRwdXQgcG9sYXJpdHkgKi8KIAlpZiAocG9sYXJpdHkgPT0gMCkKLQkJcmVnICY9IH5EUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgJj0gfkRTMTYyMV9SRUdfQ09ORklHX1BPTEFSSVRZOwogCWVsc2UgaWYgKHBvbGFyaXR5ID09IDEpCi0JCXJlZyB8PSBEUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgfD0gRFMxNjIxX1JFR19DT05GSUdfUE9MQVJJVFk7CiAJCi0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCByZWcpOworCWlmIChjb25mICE9IG5ld19jb25mKQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCBuZXdfY29uZik7CiAJCiAJLyogc3RhcnQgY29udmVyc2lvbiAqLwogCWkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgRFMxNjIxX0NPTV9TVEFSVCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHMxNjIxX2RhdGEgKmRzMTYyMV91cGRhdGVfY2xpZW50KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IG5ld19jb25mOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCisJICAgIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgaTsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGRzMTYyMSB1cGRhdGVcbiIpOworCisJCWRhdGEtPmNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXApOyBpKyspCisJCQlkYXRhLT50ZW1wW2ldID0gZHMxNjIxX3JlYWRfdGVtcChjbGllbnQsCisJCQkJCQkJIERTMTYyMV9SRUdfVEVNUFtpXSk7CisKKwkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLworCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7CisJCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7CisJCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOworCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYsCisJCQkJCQkgIG5ld19jb25mKTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAogCQkJIGNoYXIgKmJ1ZikKIHsKQEAgLTE2MCwxMyArMTczLDEzIEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGRzMTYyMV91cGRhdGVfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTE2IHZhbCA9IExNNzVfVEVNUF9UT19SRUcoc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcFthdHRyLT5pbmRleF0gPSB2YWw7Ci0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19URU1QW2F0dHItPmluZGV4XSwKLQkJCSAgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKKwlkczE2MjFfd3JpdGVfdGVtcChjbGllbnQsIERTMTYyMV9SRUdfVEVNUFthdHRyLT5pbmRleF0sCisJCQkgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjgsMTMgKzI0MSwxNCBAQAogCQkvKiBUaGUgTlZCIGJpdCBzaG91bGQgYmUgbG93IGlmIG5vIEVFUFJPTSB3cml0ZSBoYXMgYmVlbiAKIAkJICAgcmVxdWVzdGVkIGR1cmluZyB0aGUgbGF0ZXN0IDEwbXMsIHdoaWNoIGlzIGhpZ2hseSAKIAkJICAgaW1wcm9iYWJsZSBpbiBvdXIgY2FzZS4gKi8KLQkJY29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQkJaWYgKGNvbmYgJiBEUzE2MjFfUkVHX0NPTkZJR19OVkIpCisJCWNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCQlpZiAoY29uZiA8IDAgfHwgY29uZiAmIERTMTYyMV9SRUdfQ09ORklHX05WQikKIAkJCXJldHVybiAtRU5PREVWOwogCQkvKiBUaGUgNyBsb3dlc3QgYml0cyBvZiBhIHRlbXBlcmF0dXJlIHNob3VsZCBhbHdheXMgYmUgMC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoRFMxNjIxX1JFR19URU1QKTsgaSsrKSB7Ci0JCQl0ZW1wID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX1RFTVBbaV0pOwotCQkJaWYgKHRlbXAgJiAweDAwN2YpCisJCQl0ZW1wID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwKKwkJCQkJCQlEUzE2MjFfUkVHX1RFTVBbaV0pOworCQkJaWYgKHRlbXAgPCAwIHx8ICh0ZW1wICYgMHg3ZjAwKSkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTI5NCw0NSArMzA4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkczE2MjFfaWRbXSA9IHsKKwl7ICJkczE2MjEiLCBkczE2MjEgfSwKKwl7ICJkczE2MjUiLCBkczE2MjEgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZHMxNjIxX2lkKTsKIAotc3RhdGljIHN0cnVjdCBkczE2MjFfZGF0YSAqZHMxNjIxX3VwZGF0ZV9jbGllbnQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggbmV3X2NvbmY7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKLQkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWludCBpOwotCi0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgZHMxNjIxIHVwZGF0ZVxuIik7Ci0KLQkJZGF0YS0+Y29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT50ZW1wKTsgaSsrKQotCQkJZGF0YS0+dGVtcFtpXSA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCQkgIERTMTYyMV9SRUdfVEVNUFtpXSk7Ci0KLQkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLwotCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7Ci0JCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7Ci0JCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOwotCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKLQkJCWRzMTYyMV93cml0ZV92YWx1ZShjbGllbnQsIERTMTYyMV9SRUdfQ09ORiwKLQkJCQkJICAgbmV3X2NvbmYpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBkYXRhOwotfQorLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTYyMV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkczE2MjEiLAorCX0sCisJLnByb2JlCQk9IGRzMTYyMV9wcm9iZSwKKwkucmVtb3ZlCQk9IGRzMTYyMV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gZHMxNjIxX2lkLAorCS5kZXRlY3QJCT0gZHMxNjIxX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGRzMTYyMV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBkMDdmNGVmLi5lYTk1NWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTEsNiArMSw2IEBACiAvKiBmc2NobWQuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAgKiAgTWVyZ2VkIEZ1aml0c3UgU2llbWVucyBod21vbiBkcml2ZXIsIHN1cHBvcnRpbmcgdGhlIFBvc2VpZG9uLCBIZXJtZXMsCi0gKiAgU2N5bGxhLCBIZXJhY2xlcyBhbmQgSGVpbWRhbGwgY2hpcHMKKyAqICBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgYW5kIFN5bGV1cyBjaGlwcwogICoKICAqICBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgMi40IGZzY3NjeSwgMi42IGZzY3BvcywgMi42IGZzY2hlciBhbmQgMi42CiAgKiAgKGNhbmRpZGF0ZSkgZnNjaG1kIGRyaXZlcnM6CkBAIC01Niw3ICs1Niw3IEBACiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKIAlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7Ci1JMkNfQ0xJRU5UX0lOU01PRF81KGZzY3BvcywgZnNjaGVyLCBmc2NzY3ksIGZzY2hyYywgZnNjaG1kKTsKK0kyQ19DTElFTlRfSU5TTU9EXzcoZnNjcG9zLCBmc2NoZXIsIGZzY3NjeSwgZnNjaHJjLCBmc2NobWQsIGZzY2hkcywgZnNjc3lsKTsKIAogLyoKICAqIFRoZSBGU0NITUQgcmVnaXN0ZXJzIGFuZCBvdGhlciBkZWZpbmVzCkBAIC03NSw5ICs3NSwxMiBAQAogI2RlZmluZSBGU0NITURfQ09OVFJPTF9BTEVSVF9MRUQJMHgwMQogCiAvKiB3YXRjaGRvZyAqLwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfUFJFU0VUCQkweDI4Ci0jZGVmaW5lIEZTQ0hNRF9SRUdfV0RPR19TVEFURQkJMHgyMwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfQ09OVFJPTAkJMHgyMQorc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MWzddID0KKwl7IDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjgsIDB4MjggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1dET0dfU1RBVEVbN10gPQorCXsgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyOSwgMHgyOSB9Oworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19QUkVTRVRbN10gPQorCXsgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyYSwgMHgyYSB9OwogCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUgkweDEwCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RBUlRFRAkweDEwIC8qIHRoZSBzYW1lIGFzIHRyaWdnZXIgKi8KQEAgLTg3LDcwICs5MCw5NSBAQAogI2RlZmluZSBGU0NITURfV0RPR19TVEFURV9DQVJEUkVTRVQJMHgwMgogCiAvKiB2b2x0YWdlcywgd2VpcmQgb3JkZXIgaXMgdG8ga2VlcCB0aGUgc2FtZSBvcmRlciBhcyB0aGUgb2xkIGRyaXZlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbM10gPSB7IDB4NDUsIDB4NDIsIDB4NDggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbN11bNl0gPSB7CisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIHBvcyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBoZXIgKi8KKwl7IDB4NDUsIDB4NDIsIDB4NDggfSwJCQkJLyogc2N5ICovCisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIGhyYyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBobWQgKi8KKwl7IDB4MjEsIDB4MjAsIDB4MjIgfSwJCQkJLyogaGRzICovCisJeyAweDIxLCAweDIwLCAweDIyLCAweDIzLCAweDI0LCAweDI1IH0sCQkvKiBzeWwgKi8KK307CisKK3N0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1ZPTFRfU0VOU09SU1s3XSA9IHsgMywgMywgMywgMywgMywgMywgNiB9OwogCiAvKiBtaW5pbXVtIHB3bSBhdCB3aGljaCB0aGUgZmFuIGlzIGRyaXZlbiAocHdtIGNhbiBieSBpbmNyZWFzZWQgZGVwZW5kaW5nIG9uCiAgICB0aGUgdGVtcC4gTm90aWNlIHRoYXQgZm9yIHRoZSBzY3kgc29tZSBmYW5zIHNoYXJlIHRoZXJlIG1pbmltdW0gc3BlZWQuCiAgICBBbHNvIG5vdGljZSB0aGF0IHdpdGggdGhlIHNjeSB0aGUgc2Vuc29yIG9yZGVyIGlzIGRpZmZlcmVudCB0aGFuIHdpdGggdGhlCiAgICBvdGhlciBjaGlwcywgdGhpcyBvcmRlciB3YXMgaW4gdGhlIDIuNCBkcml2ZXIgYW5kIGtlcHQgZm9yIGNvbnNpc3RlbmN5LiAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX01JTls1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9NSU5bN11bN10gPSB7CiAJeyAweDU1LCAweDY1IH0sCQkJCQkvKiBwb3MgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YjUgfSwJCQkJLyogaGVyICovCiAJeyAweDY1LCAweDY1LCAweDU1LCAweGE1LCAweDU1LCAweGE1IH0sCQkvKiBzY3kgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUsIDB4YzUgfSwJCS8qIGhtZCAqLworCXsgMHg1NSwgMHg2NSwgMHhhNSwgMHhiNSwgMHhjNSB9LAkJLyogaGRzICovCisJeyAweDU0LCAweDY0LCAweDc0LCAweDg0LCAweDk0LCAweGE0LCAweGI0IH0sCS8qIHN5bCAqLwogfTsKIAogLyogYWN0dWFsIGZhbiBzcGVlZCAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX0FDVFs1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9BQ1RbN11bN10gPSB7CiAJeyAweDBlLCAweDZiLCAweGFiIH0sCQkJCS8qIHBvcyAqLwogCXsgMHgwZSwgMHg2YiwgMHhiYiB9LAkJCQkvKiBoZXIgKi8KIAl7IDB4NmIsIDB4NmMsIDB4MGUsIDB4YWIsIDB4NWMsIDB4YmIgfSwJCS8qIHNjeSAqLwogCXsgMHgwZSwgMHg2YiwgMHhhYiwgMHhiYiB9LAkJCS8qIGhyYyAqLwogCXsgMHg1YiwgMHg2YiwgMHhhYiwgMHhiYiwgMHhjYiB9LAkJLyogaG1kICovCisJeyAweDViLCAweDZiLCAweGFiLCAweGJiLCAweGNiIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTcsIDB4NjcsIDB4NzcsIDB4ODcsIDB4OTcsIDB4YTcsIDB4YjcgfSwJLyogc3lsICovCiB9OwogCiAvKiBmYW4gc3RhdHVzIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzddWzddID0gewogCXsgMHgwZCwgMHg2MiwgMHhhMiB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YjIgfSwJCQkJLyogaGVyICovCiAJeyAweDYyLCAweDYxLCAweDBkLCAweGEyLCAweDUyLCAweGIyIH0sCQkvKiBzY3kgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YTIsIDB4YjIgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTIsIDB4NjIsIDB4YTIsIDB4YjIsIDB4YzIgfSwJCS8qIGhtZCAqLworCXsgMHg1MiwgMHg2MiwgMHhhMiwgMHhiMiwgMHhjMiB9LAkJLyogaGRzICovCisJeyAweDUwLCAweDYwLCAweDcwLCAweDgwLCAweDkwLCAweGEwLCAweGIwIH0sCS8qIHN5bCAqLwogfTsKIAogLyogZmFuIHJpcHBsZSAvIGRpdmlkZXIgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3QgdTggRlNDSE1EX1JFR19GQU5fUklQUExFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1JJUFBMRVs3XVs3XSA9IHsKIAl7IDB4MGYsIDB4NmYsIDB4YWYgfSwJCQkJLyogcG9zICovCiAJeyAweDBmLCAweDZmLCAweGJmIH0sCQkJCS8qIGhlciAqLwogCXsgMHg2ZiwgMHg2ZiwgMHgwZiwgMHhhZiwgMHgwZiwgMHhiZiB9LAkJLyogc2N5ICovCiAJeyAweDBmLCAweDZmLCAweGFmLCAweGJmIH0sCQkJLyogaHJjICovCiAJeyAweDVmLCAweDZmLCAweGFmLCAweGJmLCAweGNmIH0sCQkvKiBobWQgKi8KKwl7IDB4NWYsIDB4NmYsIDB4YWYsIDB4YmYsIDB4Y2YgfSwJCS8qIGhkcyAqLworCXsgMHg1NiwgMHg2NiwgMHg3NiwgMHg4NiwgMHg5NiwgMHhhNiwgMHhiNiB9LAkvKiBzeWwgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX0ZBTl9TRU5TT1JTWzVdID0geyAzLCAzLCA2LCA0LCA1IH07CitzdGF0aWMgY29uc3QgaW50IEZTQ0hNRF9OT19GQU5fU0VOU09SU1s3XSA9IHsgMywgMywgNiwgNCwgNSwgNSwgNyB9OwogCiAvKiBGYW4gc3RhdHVzIHJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIEZTQ0hNRF9GQU5fQUxBUk0JMHgwNCAvKiBjYWxsZWQgZmF1bHQgYnkgRlNDISAqLwotI2RlZmluZSBGU0NITURfRkFOX05PVF9QUkVTRU5UCTB4MDggLyogbm90IGRvY3VtZW50ZWQgKi8KKyNkZWZpbmUgRlNDSE1EX0ZBTl9OT1RfUFJFU0VOVAkweDA4CisjZGVmaW5lIEZTQ0hNRF9GQU5fRElTQUJMRUQJMHg4MAogCiAKIC8qIGFjdHVhbCB0ZW1wZXJhdHVyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfQUNUWzVdWzVdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9BQ1RbN11bMTFdID0gewogCXsgMHg2NCwgMHgzMiwgMHgzNSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NjQsIDB4MzIsIDB4MzUgfSwJCQkJLyogaGVyICovCiAJeyAweDY0LCAweEQwLCAweDMyLCAweDM1IH0sCQkJLyogc2N5ICovCiAJeyAweDY0LCAweDMyLCAweDM1IH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MCwgMHg4MCwgMHg5MCwgMHhkMCwgMHhlMCB9LAkJLyogaG1kICovCisJeyAweDcwLCAweDgwLCAweDkwLCAweGQwLCAweGUwIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTgsIDB4NjgsIDB4NzgsIDB4ODgsIDB4OTgsIDB4YTgsCQkvKiBzeWwgKi8KKwkgIDB4YjgsIDB4YzgsIDB4ZDgsIDB4ZTgsIDB4ZjggfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIHN0YXRlIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9TVEFURVs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfU1RBVEVbN11bMTFdID0gewogCXsgMHg3MSwgMHg4MSwgMHg5MSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NzEsIDB4ODEsIDB4OTEgfSwJCQkJLyogaGVyICovCiAJeyAweDcxLCAweGQxLCAweDgxLCAweDkxIH0sCQkJLyogc2N5ICovCiAJeyAweDcxLCAweDgxLCAweDkxIH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MSwgMHg4MSwgMHg5MSwgMHhkMSwgMHhlMSB9LAkJLyogaG1kICovCisJeyAweDcxLCAweDgxLCAweDkxLCAweGQxLCAweGUxIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTksIDB4NjksIDB4NzksIDB4ODksIDB4OTksIDB4YTksCQkvKiBzeWwgKi8KKwkgIDB4YjksIDB4YzksIDB4ZDksIDB4ZTksIDB4ZjkgfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIGhpZ2ggbGltaXQgcmVnaXN0ZXJzLCBGU0MgZG9lcyBub3QgZG9jdW1lbnQgdGhlc2UuIFByb3ZlbiB0byBiZQpAQCAtMTU4LDI0ICsxODYsMzEgQEAKICAgIGluIHRoZSBmc2NzY3kgMi40IGRyaXZlci4gRlNDIGhhcyBjb25maXJtZWQgdGhhdCB0aGUgZnNjaG1kIGhhcyByZWdpc3RlcnMKICAgIGF0IHRoZXNlIGFkZHJlc3NlcywgYnV0IGRvZXNuJ3Qgd2FudCB0byBjb25maXJtIHRoZXkgYXJlIHRoZSBzYW1lIGFzIHdpdGgKICAgIHRoZSBmc2NoZXI/PyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9MSU1JVFs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfTElNSVRbN11bMTFdID0gewogCXsgMCwgMCwgMCB9LAkJCQkJLyogcG9zICovCiAJeyAweDc2LCAweDg2LCAweDk2IH0sCQkJCS8qIGhlciAqLwogCXsgMHg3NiwgMHhkNiwgMHg4NiwgMHg5NiB9LAkJCS8qIHNjeSAqLwogCXsgMHg3NiwgMHg4NiwgMHg5NiB9LAkJCQkvKiBocmMgKi8KIAl7IDB4NzYsIDB4ODYsIDB4OTYsIDB4ZDYsIDB4ZTYgfSwJCS8qIGhtZCAqLworCXsgMHg3NiwgMHg4NiwgMHg5NiwgMHhkNiwgMHhlNiB9LAkJLyogaGRzICovCisJeyAweDVhLCAweDZhLCAweDdhLCAweDhhLCAweDlhLCAweGFhLAkJLyogc3lsICovCisJICAweGJhLCAweGNhLCAweGRhLCAweGVhLCAweGZhIH0sCiB9OwogCiAvKiBUaGVzZSB3ZXJlIGZvdW5kIHRocm91Z2ggZXhwZXJpbWVudGluZyB3aXRoIGFuIGZzY2hlciwgY3VycmVudGx5IHRoZXkgYXJlCiAgICBub3QgdXNlZCwgYnV0IHdlIGtlZXAgdGhlbSBhcm91bmQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgICBPbiB0aGUgZnNjc3lsIEFVVE9QMSBsaXZlcyBhdCAweCNjIChzbyAweDVjIGZvciBmYW4xLCAweDZjIGZvciBmYW4yLCBldGMpLAorICAgQVVUT1AyIGxpdmVzIGF0IDB4I2UsIGFuZCAweCMxIGlzIGEgYml0bWFzayBkZWZpbmluZyB3aGljaCB0ZW1wcyBpbmZsdWVuY2UKKyAgIHRoZSBmYW4gc3BlZWQuCiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMVtdID0JeyAweDczLCAweDgzLCAweDkzIH07CiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMltdID0JeyAweDc1LCAweDg1LCAweDk1IH07ICovCiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1RFTVBfU0VOU09SU1s1XSA9IHsgMywgMywgNCwgMywgNSB9Oworc3RhdGljIGNvbnN0IGludCBGU0NITURfTk9fVEVNUF9TRU5TT1JTWzddID0geyAzLCAzLCA0LCAzLCA1LCA1LCAxMSB9OwogCiAvKiB0ZW1wIHN0YXR1cyByZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBGU0NITURfVEVNUF9XT1JLSU5HCTB4MDEKICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxFUlQJMHgwMgorI2RlZmluZSBGU0NITURfVEVNUF9ESVNBQkxFRAkweDgwCiAvKiB0aGVyZSBvbmx5IHJlYWxseSBpcyBhbiBhbGFybSBpZiB0aGUgc2Vuc29yIGlzIHdvcmtpbmcgYW5kIGFsZXJ0ID09IDEgKi8KICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxBUk1fTUFTSyBcCiAJKEZTQ0hNRF9URU1QX1dPUktJTkcgfCBGU0NITURfVEVNUF9BTEVSVCkKQEAgLTIwMSw2ICsyMzYsOCBAQAogCXsgImZzY3NjeSIsIGZzY3NjeSB9LAogCXsgImZzY2hyYyIsIGZzY2hyYyB9LAogCXsgImZzY2htZCIsIGZzY2htZCB9LAorCXsgImZzY2hkcyIsIGZzY2hkcyB9LAorCXsgImZzY3N5bCIsIGZzY3N5bCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBmc2NobWRfaWQpOwpAQCAtMjQyLDE0ICsyNzksMTQgQEAKIAl1OCB3YXRjaGRvZ19jb250cm9sOyAgICAvKiB3YXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfc3RhdGU7ICAgICAgLyogd2F0Y2hkb2cgc3RhdHVzIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfcHJlc2V0OyAgICAgLyogd2F0Y2hkb2cgY291bnRlciBwcmVzZXQgb24gdHJpZ2dlciB2YWwgKi8KLQl1OCB2b2x0WzNdOwkJLyogMTIsIDUsIGJhdHRlcnkgdm9sdGFnZSAqLwotCXU4IHRlbXBfYWN0WzVdOwkJLyogdGVtcGVyYXR1cmUgKi8KLQl1OCB0ZW1wX3N0YXR1c1s1XTsJLyogc3RhdHVzIG9mIHNlbnNvciAqLwotCXU4IHRlbXBfbWF4WzVdOwkJLyogaGlnaCB0ZW1wIGxpbWl0LCBub3RpY2U6IHVuZG9jdW1lbnRlZCEgKi8KLQl1OCBmYW5fYWN0WzZdOwkJLyogZmFucyByZXZvbHV0aW9ucyBwZXIgc2Vjb25kICovCi0JdTggZmFuX3N0YXR1c1s2XTsJLyogZmFuIHN0YXR1cyAqLwotCXU4IGZhbl9taW5bNl07CQkvKiBmYW4gbWluIHZhbHVlIGZvciBycHMgKi8KLQl1OCBmYW5fcmlwcGxlWzZdOwkvKiBkaXZpZGVyIGZvciBycHMgKi8KKwl1OCB2b2x0WzZdOwkJLyogdm9sdGFnZSAqLworCXU4IHRlbXBfYWN0WzExXTsJLyogdGVtcGVyYXR1cmUgKi8KKwl1OCB0ZW1wX3N0YXR1c1sxMV07CS8qIHN0YXR1cyBvZiBzZW5zb3IgKi8KKwl1OCB0ZW1wX21heFsxMV07CS8qIGhpZ2ggdGVtcCBsaW1pdCwgbm90aWNlOiB1bmRvY3VtZW50ZWQhICovCisJdTggZmFuX2FjdFs3XTsJCS8qIGZhbnMgcmV2b2x1dGlvbnMgcGVyIHNlY29uZCAqLworCXU4IGZhbl9zdGF0dXNbN107CS8qIGZhbiBzdGF0dXMgKi8KKwl1OCBmYW5fbWluWzddOwkJLyogZmFuIG1pbiB2YWx1ZSBmb3IgcnBzICovCisJdTggZmFuX3JpcHBsZVs3XTsJLyogZGl2aWRlciBmb3IgcnBzICovCiB9OwogCiAvKiBHbG9iYWwgdmFyaWFibGVzIHRvIGhvbGQgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHNwZWNpYWwgRE1JIHRhYmxlcywgd2hpY2ggYXJlCkBAIC0yNTcsOCArMjk0LDggQEAKICAgIHByb3RlY3QgdGhlc2Ugd2l0aCBhIGxvY2sgYXMgdGhleSBhcmUgb25seSBtb2RpZmllZCBmcm9tIG91ciBhdHRhY2ggZnVuY3Rpb24KICAgIHdoaWNoIGFsd2F5cyBnZXRzIGNhbGxlZCB3aXRoIHRoZSBpMmMtY29yZSBsb2NrIGhlbGQgYW5kIG5ldmVyIGFjY2Vzc2VkCiAgICBiZWZvcmUgdGhlIGF0dGFjaCBmdW5jdGlvbiBpcyBkb25lIHdpdGggdGhlbS4gKi8KLXN0YXRpYyBpbnQgZG1pX211bHRbM10gPSB7IDQ5MCwgMjAwLCAxMDAgfTsKLXN0YXRpYyBpbnQgZG1pX29mZnNldFszXSA9IHsgMCwgMCwgMCB9Oworc3RhdGljIGludCBkbWlfbXVsdFs2XSA9IHsgNDkwLCAyMDAsIDEwMCwgMTAwLCAyMDAsIDEwMCB9Oworc3RhdGljIGludCBkbWlfb2Zmc2V0WzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CiBzdGF0aWMgaW50IGRtaV92cmVmID0gLTE7CiAKIC8qIFNvbWV3aGF0IHVnbHkgOiggZ2xvYmFsIGRhdGEgcG9pbnRlciBsaXN0IHdpdGggYWxsIGZzY2htZCBkZXZpY2VzLCBzbyB0aGF0CkBAIC00NTAsMTAgKzQ4NywxMSBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKLQlpbnQgdmFsID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KS0+ZmFuX21pbltpbmRleF07CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsID0gZGF0YS0+ZmFuX21pbltpbmRleF07CiAKLQkvKiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2YWwpCisJLyogMCA9IGFsbG93IHR1cm5pbmcgb2ZmIChleGNlcHQgb24gdGhlIHN5bCksIDEtMjU1ID0gNTAtMTAwJSAqLworCWlmICh2YWwgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKQogCQl2YWwgPSB2YWwgLyAyICsgMTI4OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CkBAIC00NjYsOCArNTA0LDggQEAKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCS8qIHJlZ2lzdGVyOiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2KSB7CisJLyogcmVnOiAwID0gYWxsb3cgdHVybmluZyBvZmYgKGV4Y2VwdCBvbiB0aGUgc3lsKSwgMS0yNTUgPSA1MC0xMDAlICovCisJaWYgKHYgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKSB7CiAJCXYgPSBTRU5TT1JTX0xJTUlUKHYsIDEyOCwgMjU1KTsKIAkJdiA9ICh2IC0gMTI4KSAqIDIgKyAxOwogCX0KQEAgLTUyMiwxMSArNTYwLDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoYWxlcnRfbGVkLCAwNjQ0LCBzaG93X2FsZXJ0X2xlZCwgc3RvcmVfYWxlcnRfbGVkKTsKKwogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfYXR0cltdID0gewogCVNFTlNPUl9BVFRSKGluMF9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIoaW4xX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAxKSwKIAlTRU5TT1JfQVRUUihpbjJfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKGFsZXJ0X2xlZCwgMDY0NCwgc2hvd19hbGVydF9sZWQsIHN0b3JlX2FsZXJ0X2xlZCwgMCksCisJU0VOU09SX0FUVFIoaW4zX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKGluNV9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgNSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGZzY2htZF90ZW1wX2F0dHJbXSA9IHsKQEAgLTU1MCw2ICs1OTIsMzAgQEAKIAlTRU5TT1JfQVRUUih0ZW1wNV9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDdfaW5wdXQsIDA0NDQsIHNob3dfdGVtcF92YWx1ZSwgTlVMTCwgNiksCisJU0VOU09SX0FUVFIodGVtcDdfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19hbGFybSwgMDQ0NCwgc2hvd190ZW1wX2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9pbnB1dCwgMDQ0NCwgc2hvd190ZW1wX3ZhbHVlLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA5X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKHRlbXA5X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDEwX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUih0ZW1wMTBfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOSksCisJU0VOU09SX0FUVFIodGVtcDExX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCAxMCksCisJU0VOU09SX0FUVFIodGVtcDExX2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfZmFuX2F0dHJbXSA9IHsKQEAgLTU4OSw2ICs2NTUsMTIgQEAKIAlTRU5TT1JfQVRUUihmYW42X2ZhdWx0LCAwNDQ0LCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgNSksCiAJU0VOU09SX0FUVFIocHdtNl9hdXRvX3BvaW50MV9wd20sIDA2NDQsIHNob3dfcHdtX2F1dG9fcG9pbnQxX3B3bSwKIAkJc3RvcmVfcHdtX2F1dG9fcG9pbnQxX3B3bSwgNSksCisJU0VOU09SX0FUVFIoZmFuN19pbnB1dCwgMDQ0NCwgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZGl2LCAgIDA2NDQsIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNiksCisJU0VOU09SX0FUVFIoZmFuN19hbGFybSwgMDQ0NCwgc2hvd19mYW5fYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZmF1bHQsIDA0NDQsIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihwd203X2F1dG9fcG9pbnQxX3B3bSwgMDY0NCwgc2hvd19wd21fYXV0b19wb2ludDFfcHdtLAorCQlzdG9yZV9wd21fYXV0b19wb2ludDFfcHdtLCA2KSwKIH07CiAKIApAQCAtNjI0LDEwICs2OTYsMTEgQEAKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBESVZfUk9VTkRfVVAodGltZW91dCwgcmVzb2x1dGlvbik7CiAKIAkvKiBXcml0ZSBuZXcgdGltZW91dCB2YWx1ZSAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LCBGU0NITURfUkVHX1dET0dfUFJFU0VULAotCQlkYXRhLT53YXRjaGRvZ19wcmVzZXQpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfUFJFU0VUW2RhdGEtPmtpbmRdLCBkYXRhLT53YXRjaGRvZ19wcmVzZXQpOwogCS8qIFdyaXRlIG5ldyBjb250cm9sIHJlZ2lzdGVyLCBkbyBub3QgdHJpZ2dlciEgKi8KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgRlNDSE1EX1JFR19XRE9HX0NPTlRST0wsCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsCisJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAogCQlkYXRhLT53YXRjaGRvZ19jb250cm9sICYgfkZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUik7CiAKIAlyZXQgPSBkYXRhLT53YXRjaGRvZ19wcmVzZXQgKiByZXNvbHV0aW9uOwpAQCAtNjYyLDggKzczNSw5IEBACiAJfQogCiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8PSBGU0NITURfV0RPR19DT05UUk9MX1RSSUdHRVI7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAotCQkJCQlkYXRhLT53YXRjaGRvZ19jb250cm9sKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwKKwkJCQkgIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAorCQkJCSAgZGF0YS0+d2F0Y2hkb2dfY29udHJvbCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC02ODIsNyArNzU2LDggQEAKIAlkYXRhLT53YXRjaGRvZ19jb250cm9sICY9IH5GU0NITURfV0RPR19DT05UUk9MX1NUQVJURUQ7CiAJLyogRG9uJ3Qgc3RvcmUgdGhlIHN0b3AgZmxhZyBpbiBvdXIgd2F0Y2hkb2cgY29udHJvbCByZWdpc3RlciBjb3B5LCBhcwogCSAgIGl0cyBhIHdyaXRlIG9ubHkgYml0IChyZWFkIGFsd2F5cyByZXR1cm5zIDApICovCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAorCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfQ09OVFJPTFtkYXRhLT5raW5kXSwKIAkJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8IEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RPUCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwpAQCAtODU2LDcgKzkzMSw3IEBACiAKIC8qIERNSSBkZWNvZGUgcm91dGluZSB0byByZWFkIHZvbHRhZ2Ugc2NhbGluZyBmYWN0b3JzIGZyb20gc3BlY2lhbCBETUkgdGFibGVzLAogICAgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbiBGU0MgbWFjaGluZXMgd2l0aCBhbiBmc2NoZXIgb3IgbGF0ZXIgY2hpcC4gKi8KLXN0YXRpYyB2b2lkIGZzY2htZF9kbWlfZGVjb2RlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpoZWFkZXIpCitzdGF0aWMgdm9pZCBmc2NobWRfZG1pX2RlY29kZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqaGVhZGVyLCB2b2lkICpkdW1teSkKIHsKIAlpbnQgaSwgbXVsdFszXSA9IHsgMCB9LCBvZmZzZXRbM10gPSB7IDAgfSwgdnJlZiA9IDAsIGZvdW5kID0gMDsKIApAQCAtOTEyLDYgKzk4NywxNSBAQAogCQkJZG1pX211bHRbaV0gPSBtdWx0W2ldICogMTA7CiAJCQlkbWlfb2Zmc2V0W2ldID0gb2Zmc2V0W2ldICogMTA7CiAJCX0KKwkJLyogQWNjb3JkaW5nIHRvIHRoZSBkb2NzIHRoZXJlIHNob3VsZCBiZSBzZXBhcmF0ZSBkbWkgZW50cmllcworCQkgICBmb3IgdGhlIG11bHQncyBhbmQgb2Zmc2V0cyBvZiBpbjMtNSBvZiB0aGUgc3lsLCBidXQgb24KKwkJICAgbXkgdGVzdCBtYWNoaW5lIHRoZXNlIGFyZSBub3QgcHJlc2VudCAqLworCQlkbWlfbXVsdFszXSA9IGRtaV9tdWx0WzJdOworCQlkbWlfbXVsdFs0XSA9IGRtaV9tdWx0WzFdOworCQlkbWlfbXVsdFs1XSA9IGRtaV9tdWx0WzJdOworCQlkbWlfb2Zmc2V0WzNdID0gZG1pX29mZnNldFsyXTsKKwkJZG1pX29mZnNldFs0XSA9IGRtaV9vZmZzZXRbMV07CisJCWRtaV9vZmZzZXRbNV0gPSBkbWlfb2Zmc2V0WzJdOwogCQlkbWlfdnJlZiA9IHZyZWY7CiAJfQogfQpAQCAtOTIwLDggKzEwMDQsNiBAQAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JY29uc3QgY2hhciAqIGNvbnN0IGNsaWVudF9uYW1lc1s1XSA9IHsgImZzY3BvcyIsICJmc2NoZXIiLCAiZnNjc2N5IiwKLQkJCQkJCSJmc2NocmMiLCAiZnNjaG1kIiB9OwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk0OCwxMSArMTAzMCwxNSBAQAogCQkJa2luZCA9IGZzY2hyYzsKIAkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhNRCIpKQogCQkJa2luZCA9IGZzY2htZDsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhEUyIpKQorCQkJa2luZCA9IGZzY2hkczsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIlNZTCIpKQorCQkJa2luZCA9IGZzY3N5bDsKIAkJZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZXNba2luZCAtIDFdLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIGZzY2htZF9pZFtraW5kIC0gMV0ubmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk2MSw4ICsxMDQ3LDggQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGE7Ci0JY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzWzVdID0geyAiUG9zZWlkb24iLCAiSGVybWVzIiwgIlNjeWxsYSIsCi0JCQkJCSJIZXJhY2xlcyIsICJIZWltZGFsbCIgfTsKKwljb25zdCBjaGFyICogY29uc3QgbmFtZXNbN10gPSB7ICJQb3NlaWRvbiIsICJIZXJtZXMiLCAiU2N5bGxhIiwKKwkJCQkiSGVyYWNsZXMiLCAiSGVpbWRhbGwiLCAiSGFkZXMiLCAiU3lsZXVzIiB9OwogCWNvbnN0IGludCB3YXRjaGRvZ19taW5vcnNbXSA9IHsgV0FUQ0hET0dfTUlOT1IsIDIxMiwgMjEzLCAyMTQsIDIxNSB9OwogCWludCBpLCBlcnI7CiAJZW51bSBjaGlwcyBraW5kID0gaWQtPmRyaXZlcl9kYXRhOwpAQCAtOTkxLDcgKzEwNzcsNyBAQAogCiAJLyogUmVhZCB0aGUgc3BlY2lhbCBETUkgdGFibGUgZm9yIGZzY2hlciBhbmQgbmV3ZXIgY2hpcHMgKi8KIAlpZiAoKGtpbmQgPT0gZnNjaGVyIHx8IGtpbmQgPj0gZnNjaHJjKSAmJiBkbWlfdnJlZiA9PSAtMSkgewotCQlkbWlfd2Fsayhmc2NobWRfZG1pX2RlY29kZSk7CisJCWRtaV93YWxrKGZzY2htZF9kbWlfZGVjb2RlLCBOVUxMKTsKIAkJaWYgKGRtaV92cmVmID09IC0xKSB7CiAJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCiAJCQkJIkNvdWxkbid0IGdldCB2b2x0YWdlIHNjYWxpbmcgZmFjdG9ycyBmcm9tICIKQEAgLTEwMDAsMjEgKzEwODYsMjUgQEAKIAkJfQogCX0KIAorCS8qIGkyYyBraW5kIGdvZXMgZnJvbSAxLTYsIHdlIHdhbnQgZnJvbSAwLTUgdG8gYWRkcmVzcyBhcnJheXMgKi8KKwlkYXRhLT5raW5kID0ga2luZCAtIDE7CisKIAkvKiBSZWFkIGluIHNvbWUgbmV2ZXIgY2hhbmdpbmcgcmVnaXN0ZXJzICovCiAJZGF0YS0+cmV2aXNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBGU0NITURfUkVHX1JFVklTSU9OKTsKIAlkYXRhLT5nbG9iYWxfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfQ09OVFJPTCk7CiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX0NPTlRST0xbZGF0YS0+a2luZF0pOwogCWRhdGEtPndhdGNoZG9nX3N0YXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFW2RhdGEtPmtpbmRdKTsKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQlGU0NITURfUkVHX1dET0dfUFJFU0VUKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1BSRVNFVFtkYXRhLT5raW5kXSk7CiAKLQkvKiBpMmMga2luZCBnb2VzIGZyb20gMS01LCB3ZSB3YW50IGZyb20gMC00IHRvIGFkZHJlc3MgYXJyYXlzICovCi0JZGF0YS0+a2luZCA9IGtpbmQgLSAxOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGVydF9sZWQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kZXRhY2g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9hdHRyW2ldLmRldl9hdHRyKTsKIAkJaWYgKGVycikKQEAgLTEwMjcsNiArMTExNywxNiBAQAogCQkJCXNob3dfdGVtcF9tYXgpCiAJCQljb250aW51ZTsKIAorCQlpZiAoa2luZCA9PSBmc2NzeWwpIHsKKwkJCWlmIChpICUgNCA9PSAwKQorCQkJCWRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX1RFTVBfU1RBVEUKKwkJCQkJCVtkYXRhLT5raW5kXVtpIC8gNF0pOworCQkJaWYgKGRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSAmIEZTQ0hNRF9URU1QX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF90ZW1wX2F0dHJbaV0uZGV2X2F0dHIpOwogCQlpZiAoZXJyKQpAQCAtMTA0MCw2ICsxMTQwLDE2IEBACiAJCQkJCSJwd20zX2F1dG9fcG9pbnQxX3B3bSIpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGtpbmQgPT0gZnNjc3lsKSB7CisJCQlpZiAoaSAlIDUgPT0gMCkKKwkJCQlkYXRhLT5mYW5fc3RhdHVzW2kgLyA1XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX0ZBTl9TVEFURQorCQkJCQkJW2RhdGEtPmtpbmRdW2kgLyA1XSk7CisJCQlpZiAoZGF0YS0+ZmFuX3N0YXR1c1tpIC8gNV0gJiBGU0NITURfRkFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9mYW5fYXR0cltpXS5kZXZfYXR0cik7CiAJCWlmIChlcnIpCkBAIC0xMTI2LDcgKzEyMzYsOCBAQAogCWlmIChkYXRhLT5od21vbl9kZXYpCiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxlcnRfbGVkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKEZTQ0hNRF9OT19WT0xUX1NFTlNPUlNbZGF0YS0+a2luZF0pOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZmc2NobWRfYXR0cltpXS5kZXZfYXR0cik7CiAJZm9yIChpID0gMDsgaSA8IChGU0NITURfTk9fVEVNUF9TRU5TT1JTW2RhdGEtPmtpbmRdICogNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKQEAgLTExNzEsNyArMTI4Miw3IEBACiAJCQkJCWRhdGEtPnRlbXBfYWN0W2ldIDwgZGF0YS0+dGVtcF9tYXhbaV0pCiAJCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfVEVNUF9TVEFURVtkYXRhLT5raW5kXVtpXSwKLQkJCQkJRlNDSE1EX1RFTVBfQUxFUlQpOworCQkJCQlkYXRhLT50ZW1wX3N0YXR1c1tpXSk7CiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgRlNDSE1EX05PX0ZBTl9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKQEAgLTExOTMsMTIgKzEzMDQsMTIgQEAKIAkJCQkJZGF0YS0+ZmFuX2FjdFtpXSkKIAkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkJRlNDSE1EX1JFR19GQU5fU1RBVEVbZGF0YS0+a2luZF1baV0sCi0JCQkJCUZTQ0hNRF9GQU5fQUxBUk0pOworCQkJCQlkYXRhLT5mYW5fc3RhdHVzW2ldKTsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspCiAJCQlkYXRhLT52b2x0W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUZTQ0hNRF9SRUdfVk9MVFtpXSk7CisJCQkJCSAgICAgICBGU0NITURfUkVHX1ZPTFRbZGF0YS0+a2luZF1baV0pOwogCiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKQEAgLTEyMjAsOCArMTMzMSw4IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzIGFuZCAiCi0JCQkiSGVpbWRhbGwgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgIgorCQkJImFuZCBTeWxldXMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGZzY2htZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCBhNGQ5MmQyLi5kMzYxMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC02NSw2ICs2NSwxMCBAQAogI2RlZmluZSBIREFQU19JTlBVVF9GVVpaCTQJLyogaW5wdXQgZXZlbnQgdGhyZXNob2xkICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZMQVQJNAogCisjZGVmaW5lIEhEQVBTX1hfQVhJUwkJKDEgPDwgMCkKKyNkZWZpbmUgSERBUFNfWV9BWElTCQkoMSA8PCAxKQorI2RlZmluZSBIREFQU19CT1RIX0FYRVMJCShIREFQU19YX0FYSVMgfCBIREFQU19ZX0FYSVMpCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owogc3RhdGljIHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpoZGFwc19pZGV2Owogc3RhdGljIHVuc2lnbmVkIGludCBoZGFwc19pbnZlcnQ7CkBAIC0xODIsMTEgKzE4NiwxMSBAQAogCWttX2FjdGl2aXR5ID0gaW5iKEhEQVBTX1BPUlRfS01BQ1QpOwogCV9fZGV2aWNlX2NvbXBsZXRlKCk7CiAKLQkvKiBpZiBoZGFwc19pbnZlcnQgaXMgc2V0LCBuZWdhdGUgdGhlIHR3byB2YWx1ZXMgKi8KLQlpZiAoaGRhcHNfaW52ZXJ0KSB7CisJLyogaGRhcHNfaW52ZXJ0IGlzIGEgYml0dmVjdG9yIHRvIG5lZ2F0ZSB0aGUgYXhlcyAqLworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19YX0FYSVMpCiAJCSp4ID0gLSp4OworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19ZX0FYSVMpCiAJCSp5ID0gLSp5OwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDM2LDcgKzQ0MCw4IEBACiB7CiAJaW50IGludmVydDsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaW52ZXJ0KSAhPSAxIHx8IChpbnZlcnQgIT0gMSAmJiBpbnZlcnQgIT0gMCkpCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZpbnZlcnQpICE9IDEgfHwKKwkgICAgaW52ZXJ0IDwgMCB8fCBpbnZlcnQgPiBIREFQU19CT1RIX0FYRVMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGRhcHNfaW52ZXJ0ID0gaW52ZXJ0OwpAQCAtNDgzLDU2ICs0ODgsNTIgQEAKIC8qIGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQgLSBmb3VuZCBhbiBpbnZlcnRlZCBtYXRjaC4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewotCWhkYXBzX2ludmVydCA9IDE7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGludmVydGluZyBheGlzIHJlYWRpbmdzLlxuIik7CisJaGRhcHNfaW52ZXJ0ID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBpbnZlcnRpbmcgYXhpcyAoJXUpIHJlYWRpbmdzLlxuIiwKKwkgICAgICAgaGRhcHNfaW52ZXJ0KTsKIAlyZXR1cm4gaGRhcHNfZG1pX21hdGNoKGlkKTsKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpIHsJCVwKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCBheGVzKSB7CVwKIAkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2gsCQkJXAorCS5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsCQlcCisJLmRyaXZlcl9kYXRhID0gKHZvaWQgKilheGVzLAkJCVwKIAkubWF0Y2hlcyA9IHsJCQkJCVwKIAkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIHZlbmRvciksCVwKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKQlcCiAJfQkJCQkJCVwKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfSU5WRVJUKHZlbmRvciwgbW9kZWwpIHsJCVwKLQkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0LAkJXAotCS5tYXRjaGVzID0gewkJCQkJXAotCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgdmVuZG9yKSwJXAotCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgbW9kZWwpCVwKLQl9CQkJCQkJXAotfQorI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpCQlcCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCAwKQogCiAvKiBOb3RlIHRoYXQgSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIikgd291bGQgbWF0Y2gKICAgICJUaGlua1BhZCBUNDJwIiwgc28gdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIG1hdHRlcnMuCiAgICBJZiB5b3VyIFRoaW5rUGFkIGlzIG5vdCByZWNvZ25pemVkLCBwbGVhc2UgdXBkYXRlIHRvIGxhdGVzdAogICAgQklPUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRoZSBjYXNlIGZvciBzb21lIFI1MiBUaGlua1BhZHMuICovCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBoZGFwc193aGl0ZWxpc3RbXSA9IHsKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgUjUwcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBSNTBwIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgUjUwIiksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFI1MSIpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBSNTIiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxaSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjEiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjFpIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBUNDJwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiSUJNIiwgIlRoaW5rUGFkIFQ0MnAiLCBIREFQU19CT1RIX0FYRVMpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBUNDIiKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgVDQzIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MCIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MSIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjAiLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgVDYxIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgWDQwIiksCi0JSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFg0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjAiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjEiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgWDQxIiwgSERBUFNfWV9BWElTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIsIEhEQVBTX0JPVEhfQVhFUyksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFg2MSIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFo2MG0iKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWjYxbSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFo2MW0iLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApAQCAtNjI3LDggKzYyOCw5IEBACiBtb2R1bGVfaW5pdChoZGFwc19pbml0KTsKIG1vZHVsZV9leGl0KGhkYXBzX2V4aXQpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQoaW52ZXJ0LCBoZGFwc19pbnZlcnQsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJpbnZlcnQgZGF0YSBhbG9uZyBlYWNoIGF4aXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChpbnZlcnQsIGhkYXBzX2ludmVydCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW52ZXJ0LCAiaW52ZXJ0IGRhdGEgYWxvbmcgZWFjaCBheGlzLiAxIGludmVydCB4LWF4aXMsICIKKwkJICIyIGludmVydCB5LWF4aXMsIDMgaW52ZXJ0IGJvdGggYXhlcy4iKTsKIAogTU9EVUxFX0FVVEhPUigiUm9iZXJ0IExvdmUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSUJNIEhhcmQgRHJpdmUgQWN0aXZlIFByb3RlY3Rpb24gU3lzdGVtIChIREFQUykgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKaW5kZXggMjljODNiNS4uNTVkM2RjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCisrKyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwpAQCAtODUsMjUgKzg1LDMxIEBACiAKIC8qKgogICogbGlzM2x2MDJkX2FjcGlfaW5pdCAtIEFDUEkgX0lOSSBtZXRob2Q6IGluaXRpYWxpemUgdGhlIGRldmljZS4KLSAqIEBoYW5kbGU6IHRoZSBoYW5kbGUgb2YgdGhlIGRldmljZQorICogQGxpczM6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QKICAqCi0gKiBSZXR1cm5zIEFFX09LIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwotYWNwaV9zdGF0dXMgbGlzM2x2MDJkX2FjcGlfaW5pdChhY3BpX2hhbmRsZSBoYW5kbGUpCitpbnQgbGlzM2x2MDJkX2FjcGlfaW5pdChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQogewotCXJldHVybiBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19JTkksIE5VTEwsIE5VTEwpOworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gbGlzMy0+YnVzX3ByaXY7CisJaWYgKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGRldi0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fSU5JLAorCQkJCSBOVUxMLCBOVUxMKSAhPSBBRV9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBsaXMzbHYwMmRfYWNwaV9yZWFkIC0gQUNQSSBBTFJEIG1ldGhvZDogcmVhZCBhIHJlZ2lzdGVyCi0gKiBAaGFuZGxlOiB0aGUgaGFuZGxlIG9mIHRoZSBkZXZpY2UKKyAqIEBsaXMzOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0CiAgKiBAcmVnOiAgICB0aGUgcmVnaXN0ZXIgdG8gcmVhZAogICogQHJldDogICAgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24KICAqCi0gKiBSZXR1cm5zIEFFX09LIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwotYWNwaV9zdGF0dXMgbGlzM2x2MDJkX2FjcGlfcmVhZChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcsIHU4ICpyZXQpCitpbnQgbGlzM2x2MDJkX2FjcGlfcmVhZChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCAqcmV0KQogeworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gbGlzMy0+YnVzX3ByaXY7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBscmV0OwpAQCAtMTExLDIxICsxMTcsMjIgQEAKIAogCWFyZzAuaW50ZWdlci52YWx1ZSA9IHJlZzsKIAotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJBTFJEIiwgJmFyZ3MsICZscmV0KTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2LT5oYW5kbGUsICJBTFJEIiwgJmFyZ3MsICZscmV0KTsKIAkqcmV0ID0gbHJldDsKLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiAoc3RhdHVzICE9IEFFX09LKSA/IC1FSU5WQUwgOiAwOwogfQogCiAvKioKICAqIGxpczNsdjAyZF9hY3BpX3dyaXRlIC0gQUNQSSBBTFdSIG1ldGhvZDogd3JpdGUgdG8gYSByZWdpc3RlcgotICogQGhhbmRsZTogdGhlIGhhbmRsZSBvZiB0aGUgZGV2aWNlCisgKiBAbGlzMzogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdAogICogQHJlZzogICAgdGhlIHJlZ2lzdGVyIHRvIHdyaXRlIHRvCiAgKiBAdmFsOiAgICB0aGUgdmFsdWUgdG8gd3JpdGUKICAqCi0gKiBSZXR1cm5zIEFFX09LIG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwotYWNwaV9zdGF0dXMgbGlzM2x2MDJkX2FjcGlfd3JpdGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcmVnLCB1OCB2YWwpCitpbnQgbGlzM2x2MDJkX2FjcGlfd3JpdGUoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZywgdTggdmFsKQogeworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gbGlzMy0+YnVzX3ByaXY7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJldDsgLyogTm90IHVzZWQgd2hlbiB3cml0dGluZyAqLwogCXVuaW9uIGFjcGlfb2JqZWN0IGluX29ialsyXTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAyLCBpbl9vYmogfTsKQEAgLTEzNSwxMiArMTQyLDE1IEBACiAJaW5fb2JqWzFdLnR5cGUgICAgICAgICAgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlpbl9vYmpbMV0uaW50ZWdlci52YWx1ZSA9IHZhbDsKIAotCXJldHVybiBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiQUxXUiIsICZhcmdzLCAmcmV0KTsKKwlpZiAoYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldi0+aGFuZGxlLCAiQUxXUiIsICZhcmdzLCAmcmV0KSAhPSBBRV9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBsaXMzbHYwMmRfZG1pX21hdGNoZWQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaSkKIHsKLQlhZGV2LmFjID0gKigoc3RydWN0IGF4aXNfY29udmVyc2lvbiAqKWRtaS0+ZHJpdmVyX2RhdGEpOworCWxpczNfZGV2LmFjID0gKigoc3RydWN0IGF4aXNfY29udmVyc2lvbiAqKWRtaS0+ZHJpdmVyX2RhdGEpOwogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogaGFyZHdhcmUgdHlwZSAlcyBmb3VuZC5cbiIsIGRtaS0+aWRlbnQpOwogCiAJcmV0dXJuIDE7CkBAIC0xODcsNiArMTk3LDcgQEAKIAlBWElTX0RNSV9NQVRDSCgiTkMyNTEwIiwgIkhQIENvbXBhcSAyNTEwIiwgeV9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DODUxMCIsICJIUCBDb21wYXEgODUxMCIsIHh5X3N3YXBfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJIUDIxMzMiLCAiSFAgMjEzMyIsIHh5X3JvdGF0ZWRfbGVmdCksCisJQVhJU19ETUlfTUFUQ0goIkhQMjE0MCIsICJIUCAyMTQwIiwgeHlfc3dhcF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUzeCIsICJIUCBDb21wYXEgNjUzIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjczeCIsICJIUCBDb21wYXEgNjczIiwgeHlfcm90YXRlZF9sZWZ0X3VzZCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjUxeHgiLCAiSFAgQ29tcGFxIDY1MSIsIHh5X3JvdGF0ZWRfcmlnaHQpLApAQCAtMjAxLDYgKzIxMiw4IEBACiAJCQlQUk9EVUNUX05BTUUsICJIUCBQYXZpbGlvbiBkdjUiLAogCQkJQk9BUkRfTkFNRSwgIjM2MDAiLAogCQkJeV9pbnZlcnRlZCksCisJQVhJU19ETUlfTUFUQ0goIkRWNyIsICJIUCBQYXZpbGlvbiBkdjciLCB4X2ludmVydGVkKSwKKwlBWElTX0RNSV9NQVRDSCgiSFA4NzEwIiwgIkhQIENvbXBhcSA4NzEwIiwgeV9pbnZlcnRlZCksCiAJeyBOVUxMLCB9CiAvKiBMYXB0b3AgbW9kZWxzIHdpdGhvdXQgYXhpcyBpbmZvICh5ZXQpOgogICogIk5DNjkxMCIgIkhQIENvbXBhcSA2OTEwIgpAQCAtMjE0LDcgKzIyNyw3IEBACiAKIHN0YXRpYyB2b2lkIGhwbGVkX3NldChzdHJ1Y3QgZGVsYXllZF9sZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQogewotCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGFkZXYuZGV2aWNlLT5oYW5kbGU7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBsaXMzX2Rldi5idXNfcHJpdjsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OyAvKiBOb3QgdXNlZCB3aGVuIHdyaXRpbmcgKi8KIAl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmpbMV07CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJncyA9IHsgMSwgaW5fb2JqIH07CkBAIC0yMjIsNyArMjM1LDcgQEAKIAlpbl9vYmpbMF0udHlwZSAgICAgICAgICA9IEFDUElfVFlQRV9JTlRFR0VSOwogCWluX29ialswXS5pbnRlZ2VyLnZhbHVlID0gISF2YWx1ZTsKIAotCWFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJBTEVEIiwgJmFyZ3MsICZyZXQpOworCWFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXYtPmhhbmRsZSwgIkFMRUQiLCAmYXJncywgJnJldCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGVsYXllZF9sZWRfY2xhc3NkZXYgaHBsZWRfbGVkID0gewpAQCAtMjU0LDI4ICsyNjcsMTEgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLAotCQkJCQlsaXMzbHYwMmRfZ2V0X3Jlc291cmNlLCAmYWRldi5pcnEpOworCQkJCQlsaXMzbHYwMmRfZ2V0X3Jlc291cmNlLCAmbGlzM19kZXYuaXJxKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEVycm9yIGdldHRpbmcgcmVzb3VyY2VzXG4iKTsKIH0KIAotc3RhdGljIHMxNiBsaXMzbHYwMmRfcmVhZF8xNihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcpCi17Ci0JdTggbG8sIGhpOwotCi0JYWRldi5yZWFkKGhhbmRsZSwgcmVnIC0gMSwgJmxvKTsKLQlhZGV2LnJlYWQoaGFuZGxlLCByZWcsICZoaSk7Ci0JLyogSW4gIjEyIGJpdCByaWdodCBqdXN0aWZpZWQiIG1vZGUsIGJpdCA2LCBiaXQgNywgYml0IDggPSBiaXQgNSAqLwotCXJldHVybiAoczE2KSgoaGkgPDwgOCkgfCBsbyk7Ci19Ci0KLXN0YXRpYyBzMTYgbGlzM2x2MDJkX3JlYWRfOChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcpCi17Ci0JczggbG87Ci0JYWRldi5yZWFkKGhhbmRsZSwgcmVnLCAmbG8pOwotCXJldHVybiBsbzsKLX0KLQogc3RhdGljIGludCBsaXMzbHYwMmRfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXQ7CkBAIC0yODMsNTEgKzI3OSwzNSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkZXYuZGV2aWNlID0gZGV2aWNlOwotCWFkZXYuaW5pdCA9IGxpczNsdjAyZF9hY3BpX2luaXQ7Ci0JYWRldi5yZWFkID0gbGlzM2x2MDJkX2FjcGlfcmVhZDsKLQlhZGV2LndyaXRlID0gbGlzM2x2MDJkX2FjcGlfd3JpdGU7CisJbGlzM19kZXYuYnVzX3ByaXYgPSBkZXZpY2U7CisJbGlzM19kZXYuaW5pdCA9IGxpczNsdjAyZF9hY3BpX2luaXQ7CisJbGlzM19kZXYucmVhZCA9IGxpczNsdjAyZF9hY3BpX3JlYWQ7CisJbGlzM19kZXYud3JpdGUgPSBsaXMzbHYwMmRfYWNwaV93cml0ZTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfTURQU19DTEFTUyk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9ICZhZGV2OworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSAmbGlzM19kZXY7CiAKLQlsaXMzbHYwMmRfYWNwaV9yZWFkKGRldmljZS0+aGFuZGxlLCBXSE9fQU1fSSwgJmFkZXYud2hvYW1pKTsKLQlzd2l0Y2ggKGFkZXYud2hvYW1pKSB7Ci0JY2FzZSBMSVNfRE9VQkxFX0lEOgotCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IDItYnl0ZSBzZW5zb3IgZm91bmRcbiIpOwotCQlhZGV2LnJlYWRfZGF0YSA9IGxpczNsdjAyZF9yZWFkXzE2OwotCQlhZGV2Lm1kcHNfbWF4X3ZhbCA9IDIwNDg7Ci0JCWJyZWFrOwotCWNhc2UgTElTX1NJTkdMRV9JRDoKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAxLWJ5dGUgc2Vuc29yIGZvdW5kXG4iKTsKLQkJYWRldi5yZWFkX2RhdGEgPSBsaXMzbHYwMmRfcmVhZF84OwotCQlhZGV2Lm1kcHNfbWF4X3ZhbCA9IDEyODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCi0JCQkiOiB1bmtub3duIHNlbnNvciB0eXBlIDB4JVhcbiIsIGFkZXYud2hvYW1pKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCS8qIG9idGFpbiBJUlEgbnVtYmVyIG9mIG91ciBkZXZpY2UgZnJvbSBBQ1BJICovCisJbGlzM2x2MDJkX2VudW1fcmVzb3VyY2VzKGRldmljZSk7CiAKIAkvKiBJZiBwb3NzaWJsZSB1c2UgYSAic3RhbmRhcmQiIGF4ZXMgb3JkZXIgKi8KIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShsaXMzbHYwMmRfZG1pX2lkcykgPT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGxhcHRvcCBtb2RlbCB1bmtub3duLCAiCiAJCQkJICJ1c2luZyBkZWZhdWx0IGF4ZXMgY29uZmlndXJhdGlvblxuIik7Ci0JCWFkZXYuYWMgPSBsaXMzbHYwMmRfYXhpc19ub3JtYWw7CisJCWxpczNfZGV2LmFjID0gbGlzM2x2MDJkX2F4aXNfbm9ybWFsOwogCX0KIAotCUlOSVRfV09SSygmaHBsZWRfbGVkLndvcmssIGRlbGF5ZWRfc2V0X3N0YXR1c193b3JrZXIpOwotCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmaHBsZWRfbGVkLmxlZF9jbGFzc2Rldik7CisJLyogY2FsbCB0aGUgY29yZSBsYXllciBkbyBpdHMgaW5pdCAqLworCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBvYnRhaW4gSVJRIG51bWJlciBvZiBvdXIgZGV2aWNlIGZyb20gQUNQSSAqLwotCWxpczNsdjAyZF9lbnVtX3Jlc291cmNlcyhhZGV2LmRldmljZSk7Ci0KLQlyZXQgPSBsaXMzbHYwMmRfaW5pdF9kZXZpY2UoJmFkZXYpOworCUlOSVRfV09SSygmaHBsZWRfbGVkLndvcmssIGRlbGF5ZWRfc2V0X3N0YXR1c193b3JrZXIpOworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihOVUxMLCAmaHBsZWRfbGVkLmxlZF9jbGFzc2Rldik7CiAJaWYgKHJldCkgeworCQlsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSgpOworCQlsaXMzbHYwMmRfcG93ZXJvZmYoJmxpczNfZGV2KTsKIAkJZmx1c2hfd29yaygmaHBsZWRfbGVkLndvcmspOwotCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmaHBsZWRfbGVkLmxlZF9jbGFzc2Rldik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zNDAsNyArMzIwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSgpOwotCWxpczNsdjAyZF9wb3dlcm9mZihkZXZpY2UtPmhhbmRsZSk7CisJbGlzM2x2MDJkX3Bvd2Vyb2ZmKCZsaXMzX2Rldik7CiAKIAlmbHVzaF93b3JrKCZocGxlZF9sZWQud29yayk7CiAJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmhwbGVkX2xlZC5sZWRfY2xhc3NkZXYpOwpAQCAtMzUzLDE5ICszMzMsMTkgQEAKIHN0YXRpYyBpbnQgbGlzM2x2MDJkX3N1c3BlbmQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBtYWtlIHN1cmUgdGhlIGRldmljZSBpcyBvZmYgd2hlbiB3ZSBzdXNwZW5kICovCi0JbGlzM2x2MDJkX3Bvd2Vyb2ZmKGRldmljZS0+aGFuZGxlKTsKKwlsaXMzbHYwMmRfcG93ZXJvZmYoJmxpczNfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBsaXMzbHYwMmRfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCS8qIHB1dCBiYWNrIHRoZSBkZXZpY2UgaW4gdGhlIHJpZ2h0IHN0YXRlIChBQ1BJIG1pZ2h0IHR1cm4gaXQgb24pICovCi0JbXV0ZXhfbG9jaygmYWRldi5sb2NrKTsKLQlpZiAoYWRldi51c2FnZSA+IDApCi0JCWxpczNsdjAyZF9wb3dlcm9uKGRldmljZS0+aGFuZGxlKTsKKwltdXRleF9sb2NrKCZsaXMzX2Rldi5sb2NrKTsKKwlpZiAobGlzM19kZXYudXNhZ2UgPiAwKQorCQlsaXMzbHYwMmRfcG93ZXJvbigmbGlzM19kZXYpOwogCWVsc2UKLQkJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGRldmljZS0+aGFuZGxlKTsKLQltdXRleF91bmxvY2soJmFkZXYubG9jayk7CisJCWxpczNsdjAyZF9wb3dlcm9mZigmbGlzM19kZXYpOworCW11dGV4X3VubG9jaygmbGlzM19kZXYubG9jayk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKaW5kZXggOGJiMjE1OC4uNzc4ZWI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYworKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSAibGlzM2x2MDJkLmgiCiAKQEAgLTUzLDEzICs1MiwzMCBAQAogICogam95c3RpY2suCiAgKi8KIAotc3RydWN0IGFjcGlfbGlzM2x2MDJkIGFkZXYgPSB7Ci0JLm1pc2Nfd2FpdCAgID0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoYWRldi5taXNjX3dhaXQpLAorc3RydWN0IGxpczNsdjAyZCBsaXMzX2RldiA9IHsKKwkubWlzY193YWl0ICAgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihsaXMzX2Rldi5taXNjX3dhaXQpLAogfTsKIAotRVhQT1JUX1NZTUJPTF9HUEwoYWRldik7CitFWFBPUlRfU1lNQk9MX0dQTChsaXMzX2Rldik7CiAKLXN0YXRpYyBpbnQgbGlzM2x2MDJkX2FkZF9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzgoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZykKK3sKKwlzOCBsbzsKKwlpZiAobGlzMy0+cmVhZChsaXMzLCByZWcsICZsbykgPCAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBsbzsKK30KKworc3RhdGljIHMxNiBsaXMzbHYwMmRfcmVhZF8xNihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnKQoreworCXU4IGxvLCBoaTsKKworCWxpczMtPnJlYWQobGlzMywgcmVnIC0gMSwgJmxvKTsKKwlsaXMzLT5yZWFkKGxpczMsIHJlZywgJmhpKTsKKwkvKiBJbiAiMTIgYml0IHJpZ2h0IGp1c3RpZmllZCIgbW9kZSwgYml0IDYsIGJpdCA3LCBiaXQgOCA9IGJpdCA1ICovCisJcmV0dXJuIChzMTYpKChoaSA8PCA4KSB8IGxvKTsKK30KIAogLyoqCiAgKiBsaXMzbHYwMmRfZ2V0X2F4aXMgLSBGb3IgdGhlIGdpdmVuIGF4aXMsIGdpdmUgdGhlIHZhbHVlIGNvbnZlcnRlZApAQCAtNzgsMzYgKzk0LDM2IEBACiAKIC8qKgogICogbGlzM2x2MDJkX2dldF94eXogLSBHZXQgWCwgWSBhbmQgWiBheGlzIHZhbHVlcyBmcm9tIHRoZSBhY2NlbGVyb21ldGVyCi0gKiBAaGFuZGxlOiB0aGUgaGFuZGxlIHRvIHRoZSBkZXZpY2UKLSAqIEB4OiAgICAgIHdoZXJlIHRvIHN0b3JlIHRoZSBYIGF4aXMgdmFsdWUKLSAqIEB5OiAgICAgIHdoZXJlIHRvIHN0b3JlIHRoZSBZIGF4aXMgdmFsdWUKLSAqIEB6OiAgICAgIHdoZXJlIHRvIHN0b3JlIHRoZSBaIGF4aXMgdmFsdWUKKyAqIEBsaXMzOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0CisgKiBAeDogICAgd2hlcmUgdG8gc3RvcmUgdGhlIFggYXhpcyB2YWx1ZQorICogQHk6ICAgIHdoZXJlIHRvIHN0b3JlIHRoZSBZIGF4aXMgdmFsdWUKKyAqIEB6OiAgICB3aGVyZSB0byBzdG9yZSB0aGUgWiBheGlzIHZhbHVlCiAgKgogICogTm90ZSB0aGF0IDQwSHogaW5wdXQgZGV2aWNlIGNhbiBlYXQgdXAgYWJvdXQgMTAlIENQVSBhdCA4MDBNSFoKICAqLwotc3RhdGljIHZvaWQgbGlzM2x2MDJkX2dldF94eXooYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKngsIGludCAqeSwgaW50ICp6KQorc3RhdGljIHZvaWQgbGlzM2x2MDJkX2dldF94eXooc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50ICp4LCBpbnQgKnksIGludCAqeikKIHsKIAlpbnQgcG9zaXRpb25bM107CiAKLQlwb3NpdGlvblswXSA9IGFkZXYucmVhZF9kYXRhKGhhbmRsZSwgT1VUWCk7Ci0JcG9zaXRpb25bMV0gPSBhZGV2LnJlYWRfZGF0YShoYW5kbGUsIE9VVFkpOwotCXBvc2l0aW9uWzJdID0gYWRldi5yZWFkX2RhdGEoaGFuZGxlLCBPVVRaKTsKKwlwb3NpdGlvblswXSA9IGxpczNfZGV2LnJlYWRfZGF0YShsaXMzLCBPVVRYKTsKKwlwb3NpdGlvblsxXSA9IGxpczNfZGV2LnJlYWRfZGF0YShsaXMzLCBPVVRZKTsKKwlwb3NpdGlvblsyXSA9IGxpczNfZGV2LnJlYWRfZGF0YShsaXMzLCBPVVRaKTsKIAotCSp4ID0gbGlzM2x2MDJkX2dldF9heGlzKGFkZXYuYWMueCwgcG9zaXRpb24pOwotCSp5ID0gbGlzM2x2MDJkX2dldF9heGlzKGFkZXYuYWMueSwgcG9zaXRpb24pOwotCSp6ID0gbGlzM2x2MDJkX2dldF9heGlzKGFkZXYuYWMueiwgcG9zaXRpb24pOworCSp4ID0gbGlzM2x2MDJkX2dldF9heGlzKGxpczNfZGV2LmFjLngsIHBvc2l0aW9uKTsKKwkqeSA9IGxpczNsdjAyZF9nZXRfYXhpcyhsaXMzX2Rldi5hYy55LCBwb3NpdGlvbik7CisJKnogPSBsaXMzbHYwMmRfZ2V0X2F4aXMobGlzM19kZXYuYWMueiwgcG9zaXRpb24pOwogfQogCi12b2lkIGxpczNsdjAyZF9wb3dlcm9mZihhY3BpX2hhbmRsZSBoYW5kbGUpCit2b2lkIGxpczNsdjAyZF9wb3dlcm9mZihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQogewotCWFkZXYuaXNfb24gPSAwOworCWxpczNfZGV2LmlzX29uID0gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9wb3dlcm9mZik7CiAKLXZvaWQgbGlzM2x2MDJkX3Bvd2Vyb24oYWNwaV9oYW5kbGUgaGFuZGxlKQordm9pZCBsaXMzbHYwMmRfcG93ZXJvbihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQogewotCWFkZXYuaXNfb24gPSAxOwotCWFkZXYuaW5pdChoYW5kbGUpOworCWxpczNfZGV2LmlzX29uID0gMTsKKwlsaXMzX2Rldi5pbml0KGxpczMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX3Bvd2Vyb24pOwogCkBAIC0xMTYsMTMgKzEzMiwxMyBAQAogICogZGV2aWNlIHdpbGwgYWx3YXlzIGJlIG9uIHVudGlsIGEgY2FsbCB0byBsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCkuIE5vdCB0byBiZQogICogdXNlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgogICovCi1zdGF0aWMgdm9pZCBsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKHN0cnVjdCBhY3BpX2xpczNsdjAyZCAqZGV2KQorc3RhdGljIHZvaWQgbGlzM2x2MDJkX2luY3JlYXNlX3VzZShzdHJ1Y3QgbGlzM2x2MDJkICpkZXYpCiB7CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPnVzYWdlKys7CiAJaWYgKGRldi0+dXNhZ2UgPT0gMSkgewogCQlpZiAoIWRldi0+aXNfb24pCi0JCQlsaXMzbHYwMmRfcG93ZXJvbihkZXYtPmRldmljZS0+aGFuZGxlKTsKKwkJCWxpczNsdjAyZF9wb3dlcm9uKGRldik7CiAJfQogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KQEAgLTEzMSwxMiArMTQ3LDEyIEBACiAgKiBUbyBiZSBjYWxsZWQgd2hlbmV2ZXIgYSB1c2FnZSBvZiB0aGUgZGV2aWNlIGlzIHN0b3BwZWQuCiAgKiBJdCB3aWxsIG1ha2Ugc3VyZSB0byB0dXJuIG9mZiB0aGUgZGV2aWNlIHdoZW4gdGhlcmUgaXMgbm90IHVzYWdlLgogICovCi1zdGF0aWMgdm9pZCBsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKHN0cnVjdCBhY3BpX2xpczNsdjAyZCAqZGV2KQorc3RhdGljIHZvaWQgbGlzM2x2MDJkX2RlY3JlYXNlX3VzZShzdHJ1Y3QgbGlzM2x2MDJkICpkZXYpCiB7CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPnVzYWdlLS07CiAJaWYgKGRldi0+dXNhZ2UgPT0gMCkKLQkJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGRldi0+ZGV2aWNlLT5oYW5kbGUpOworCQlsaXMzbHYwMmRfcG93ZXJvZmYoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKQEAgLTE0NywxMCArMTYzLDEwIEBACiAJICogdGhlIGxpZCBpcyBjbG9zZWQuIFRoaXMgbGVhZHMgdG8gaW50ZXJydXB0cyBhcyBzb29uIGFzIGEgbGl0dGxlIG1vdmUKIAkgKiBpcyBkb25lLgogCSAqLwotCWF0b21pY19pbmMoJmFkZXYuY291bnQpOworCWF0b21pY19pbmMoJmxpczNfZGV2LmNvdW50KTsKIAotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWRldi5taXNjX3dhaXQpOwotCWtpbGxfZmFzeW5jKCZhZGV2LmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZsaXMzX2Rldi5taXNjX3dhaXQpOworCWtpbGxfZmFzeW5jKCZsaXMzX2Rldi5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfSU4pOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTU4LDEwICsxNzQsMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmFkZXYubWlzY19vcGVuZWQpKQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZsaXMzX2Rldi5taXNjX29wZW5lZCkpCiAJCXJldHVybiAtRUJVU1k7IC8qIGFscmVhZHkgb3BlbiAqLwogCi0JYXRvbWljX3NldCgmYWRldi5jb3VudCwgMCk7CisJYXRvbWljX3NldCgmbGlzM19kZXYuY291bnQsIDApOwogCiAJLyoKIAkgKiBUaGUgc2Vuc29yIGNhbiBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGZvciBmcmVlLWZhbGwgYW5kIGRpcmVjdGlvbgpAQCAtMTc0LDI1ICsxOTAsMjUgQEAKIAkgKiBpby1hcGljIGlzIG5vdCBjb25maWd1cmFibGUgKGFuZCBnZW5lcmF0ZXMgYSB3YXJuaW5nKSBidXQgSSBrZWVwIGl0CiAJICogaW4gY2FzZSBvZiBzdXBwb3J0IGZvciBvdGhlciBoYXJkd2FyZS4KIAkgKi8KLQlyZXQgPSByZXF1ZXN0X2lycShhZGV2LmlycSwgbGlzMzAyZGxfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJICBEUklWRVJfTkFNRSwgJmFkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGxpczNfZGV2LmlycSwgbGlzMzAyZGxfaW50ZXJydXB0LCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICBEUklWRVJfTkFNRSwgJmxpczNfZGV2KTsKIAogCWlmIChyZXQpIHsKLQkJY2xlYXJfYml0KDAsICZhZGV2Lm1pc2Nfb3BlbmVkKTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IElSUSVkIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBhZGV2LmlycSk7CisJCWNsZWFyX2JpdCgwLCAmbGlzM19kZXYubWlzY19vcGVuZWQpOworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogSVJRJWQgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGxpczNfZGV2LmlycSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmFkZXYpOwotCXByaW50aygibGlzMzogcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgJWRcbiIsIGFkZXYuaXJxKTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZsaXMzX2Rldik7CisJcHJpbnRrKCJsaXMzOiByZWdpc3RlcmVkIGludGVycnVwdCAlZFxuIiwgbGlzM19kZXYuaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBsaXMzbHYwMmRfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWZhc3luY19oZWxwZXIoLTEsIGZpbGUsIDAsICZhZGV2LmFzeW5jX3F1ZXVlKTsKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKLQlmcmVlX2lycShhZGV2LmlycSwgJmFkZXYpOwotCWNsZWFyX2JpdCgwLCAmYWRldi5taXNjX29wZW5lZCk7IC8qIHJlbGVhc2UgdGhlIGRldmljZSAqLworCWZhc3luY19oZWxwZXIoLTEsIGZpbGUsIDAsICZsaXMzX2Rldi5hc3luY19xdWV1ZSk7CisJbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmbGlzM19kZXYpOworCWZyZWVfaXJxKGxpczNfZGV2LmlycSwgJmxpczNfZGV2KTsKKwljbGVhcl9iaXQoMCwgJmxpczNfZGV2Lm1pc2Nfb3BlbmVkKTsgLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNywxMCArMjIzLDEwIEBACiAJaWYgKGNvdW50IDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhZGRfd2FpdF9xdWV1ZSgmYWRldi5taXNjX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmbGlzM19kZXYubWlzY193YWl0LCAmd2FpdCk7CiAJd2hpbGUgKHRydWUpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJZGF0YSA9IGF0b21pY194Y2hnKCZhZGV2LmNvdW50LCAwKTsKKwkJZGF0YSA9IGF0b21pY194Y2hnKCZsaXMzX2Rldi5jb3VudCwgMCk7CiAJCWlmIChkYXRhKQogCQkJYnJlYWs7CiAKQEAgLTI0MCwyMiArMjU2LDIyIEBACiAKIG91dDoKIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmFkZXYubWlzY193YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmxpczNfZGV2Lm1pc2Nfd2FpdCwgJndhaXQpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBsaXMzbHYwMmRfbWlzY19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXBvbGxfd2FpdChmaWxlLCAmYWRldi5taXNjX3dhaXQsIHdhaXQpOwotCWlmIChhdG9taWNfcmVhZCgmYWRldi5jb3VudCkpCisJcG9sbF93YWl0KGZpbGUsICZsaXMzX2Rldi5taXNjX3dhaXQsIHdhaXQpOworCWlmIChhdG9taWNfcmVhZCgmbGlzM19kZXYuY291bnQpKQogCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBsaXMzbHYwMmRfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmFkZXYuYXN5bmNfcXVldWUpOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpczNfZGV2LmFzeW5jX3F1ZXVlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGlzM2x2MDJkX21pc2NfZm9wcyA9IHsKQEAgLTI4MywxMiArMjk5LDEyIEBACiAJaW50IHgsIHksIHo7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlsaXMzbHYwMmRfZ2V0X3h5eihhZGV2LmRldmljZS0+aGFuZGxlLCAmeCwgJnksICZ6KTsKLQkJaW5wdXRfcmVwb3J0X2FicyhhZGV2LmlkZXYsIEFCU19YLCB4IC0gYWRldi54Y2FsaWIpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGFkZXYuaWRldiwgQUJTX1ksIHkgLSBhZGV2LnljYWxpYik7Ci0JCWlucHV0X3JlcG9ydF9hYnMoYWRldi5pZGV2LCBBQlNfWiwgeiAtIGFkZXYuemNhbGliKTsKKwkJbGlzM2x2MDJkX2dldF94eXooJmxpczNfZGV2LCAmeCwgJnksICZ6KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhsaXMzX2Rldi5pZGV2LCBBQlNfWCwgeCAtIGxpczNfZGV2LnhjYWxpYik7CisJCWlucHV0X3JlcG9ydF9hYnMobGlzM19kZXYuaWRldiwgQUJTX1ksIHkgLSBsaXMzX2Rldi55Y2FsaWIpOworCQlpbnB1dF9yZXBvcnRfYWJzKGxpczNfZGV2LmlkZXYsIEFCU19aLCB6IC0gbGlzM19kZXYuemNhbGliKTsKIAotCQlpbnB1dF9zeW5jKGFkZXYuaWRldik7CisJCWlucHV0X3N5bmMobGlzM19kZXYuaWRldik7CiAKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQltc2xlZXBfaW50ZXJydXB0aWJsZShNRFBTX1BPTExfSU5URVJWQUwpOwpAQCAtMjk5LDExICszMTUsMTEgQEAKIAogc3RhdGljIGludCBsaXMzbHYwMmRfam95c3RpY2tfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKIHsKLQlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZhZGV2KTsKLQlhZGV2Lmt0aHJlYWQgPSBrdGhyZWFkX3J1bihsaXMzbHYwMmRfam95c3RpY2tfa3RocmVhZCwgTlVMTCwgImtsaXMzbHYwMmQiKTsKLQlpZiAoSVNfRVJSKGFkZXYua3RocmVhZCkpIHsKLQkJbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmYWRldik7Ci0JCXJldHVybiBQVFJfRVJSKGFkZXYua3RocmVhZCk7CisJbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmbGlzM19kZXYpOworCWxpczNfZGV2Lmt0aHJlYWQgPSBrdGhyZWFkX3J1bihsaXMzbHYwMmRfam95c3RpY2tfa3RocmVhZCwgTlVMTCwgImtsaXMzbHYwMmQiKTsKKwlpZiAoSVNfRVJSKGxpczNfZGV2Lmt0aHJlYWQpKSB7CisJCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmxpczNfZGV2KTsKKwkJcmV0dXJuIFBUUl9FUlIobGlzM19kZXYua3RocmVhZCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMTEsNDUgKzMyNyw0NiBAQAogCiBzdGF0aWMgdm9pZCBsaXMzbHYwMmRfam95c3RpY2tfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCiB7Ci0Ja3RocmVhZF9zdG9wKGFkZXYua3RocmVhZCk7Ci0JbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmYWRldik7CisJa3RocmVhZF9zdG9wKGxpczNfZGV2Lmt0aHJlYWQpOworCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmxpczNfZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGxpczNsdjAyZF9jYWxpYnJhdGVfam95c3RpY2sodm9pZCkKIHsKLQlsaXMzbHYwMmRfZ2V0X3h5eihhZGV2LmRldmljZS0+aGFuZGxlLCAmYWRldi54Y2FsaWIsICZhZGV2LnljYWxpYiwgJmFkZXYuemNhbGliKTsKKwlsaXMzbHYwMmRfZ2V0X3h5eigmbGlzM19kZXYsCisJCSZsaXMzX2Rldi54Y2FsaWIsICZsaXMzX2Rldi55Y2FsaWIsICZsaXMzX2Rldi56Y2FsaWIpOwogfQogCiBpbnQgbGlzM2x2MDJkX2pveXN0aWNrX2VuYWJsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoYWRldi5pZGV2KQorCWlmIChsaXMzX2Rldi5pZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkZXYuaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghYWRldi5pZGV2KQorCWxpczNfZGV2LmlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWxpczNfZGV2LmlkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJbGlzM2x2MDJkX2NhbGlicmF0ZV9qb3lzdGljaygpOwogCi0JYWRldi5pZGV2LT5uYW1lICAgICAgID0gIlNUIExJUzNMVjAyREwgQWNjZWxlcm9tZXRlciI7Ci0JYWRldi5pZGV2LT5waHlzICAgICAgID0gRFJJVkVSX05BTUUgIi9pbnB1dDAiOwotCWFkZXYuaWRldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCWFkZXYuaWRldi0+aWQudmVuZG9yICA9IDA7Ci0JYWRldi5pZGV2LT5kZXYucGFyZW50ID0gJmFkZXYucGRldi0+ZGV2OwotCWFkZXYuaWRldi0+b3BlbiAgICAgICA9IGxpczNsdjAyZF9qb3lzdGlja19vcGVuOwotCWFkZXYuaWRldi0+Y2xvc2UgICAgICA9IGxpczNsdjAyZF9qb3lzdGlja19jbG9zZTsKKwlsaXMzX2Rldi5pZGV2LT5uYW1lICAgICAgID0gIlNUIExJUzNMVjAyREwgQWNjZWxlcm9tZXRlciI7CisJbGlzM19kZXYuaWRldi0+cGh5cyAgICAgICA9IERSSVZFUl9OQU1FICIvaW5wdXQwIjsKKwlsaXMzX2Rldi5pZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJbGlzM19kZXYuaWRldi0+aWQudmVuZG9yICA9IDA7CisJbGlzM19kZXYuaWRldi0+ZGV2LnBhcmVudCA9ICZsaXMzX2Rldi5wZGV2LT5kZXY7CisJbGlzM19kZXYuaWRldi0+b3BlbiAgICAgICA9IGxpczNsdjAyZF9qb3lzdGlja19vcGVuOworCWxpczNfZGV2LmlkZXYtPmNsb3NlICAgICAgPSBsaXMzbHYwMmRfam95c3RpY2tfY2xvc2U7CiAKLQlzZXRfYml0KEVWX0FCUywgYWRldi5pZGV2LT5ldmJpdCk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoYWRldi5pZGV2LCBBQlNfWCwgLWFkZXYubWRwc19tYXhfdmFsLCBhZGV2Lm1kcHNfbWF4X3ZhbCwgMywgMyk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoYWRldi5pZGV2LCBBQlNfWSwgLWFkZXYubWRwc19tYXhfdmFsLCBhZGV2Lm1kcHNfbWF4X3ZhbCwgMywgMyk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoYWRldi5pZGV2LCBBQlNfWiwgLWFkZXYubWRwc19tYXhfdmFsLCBhZGV2Lm1kcHNfbWF4X3ZhbCwgMywgMyk7CisJc2V0X2JpdChFVl9BQlMsIGxpczNfZGV2LmlkZXYtPmV2Yml0KTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhsaXMzX2Rldi5pZGV2LCBBQlNfWCwgLWxpczNfZGV2Lm1kcHNfbWF4X3ZhbCwgbGlzM19kZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhsaXMzX2Rldi5pZGV2LCBBQlNfWSwgLWxpczNfZGV2Lm1kcHNfbWF4X3ZhbCwgbGlzM19kZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhsaXMzX2Rldi5pZGV2LCBBQlNfWiwgLWxpczNfZGV2Lm1kcHNfbWF4X3ZhbCwgbGlzM19kZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKIAotCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShhZGV2LmlkZXYpOworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShsaXMzX2Rldi5pZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGFkZXYuaWRldik7Ci0JCWFkZXYuaWRldiA9IE5VTEw7CisJCWlucHV0X2ZyZWVfZGV2aWNlKGxpczNfZGV2LmlkZXYpOworCQlsaXMzX2Rldi5pZGV2ID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzU4LDcxICszNzUsNDAgQEAKIAogdm9pZCBsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSh2b2lkKQogewotCWlmICghYWRldi5pZGV2KQorCWlmICghbGlzM19kZXYuaWRldikKIAkJcmV0dXJuOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZsaXMzbHYwMmRfbWlzY19kZXZpY2UpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFkZXYuaWRldik7Ci0JYWRldi5pZGV2ID0gTlVMTDsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShsaXMzX2Rldi5pZGV2KTsKKwlsaXMzX2Rldi5pZGV2ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKTsKIAotLyoKLSAqIEluaXRpYWxpc2UgdGhlIGFjY2VsZXJvbWV0ZXIgYW5kIHRoZSB2YXJpb3VzIHN1YnN5c3RlbXMuCi0gKiBTaG91bGQgYmUgcmF0aGVyIGluZGVwZW5kYW50IG9mIHRoZSBidXMgc3lzdGVtLgotICovCi1pbnQgbGlzM2x2MDJkX2luaXRfZGV2aWNlKHN0cnVjdCBhY3BpX2xpczNsdjAyZCAqZGV2KQotewotCW11dGV4X2luaXQoJmRldi0+bG9jayk7Ci0JbGlzM2x2MDJkX2FkZF9mcyhkZXYtPmRldmljZSk7Ci0JbGlzM2x2MDJkX2luY3JlYXNlX3VzZShkZXYpOwotCi0JaWYgKGxpczNsdjAyZF9qb3lzdGlja19lbmFibGUoKSkKLQkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IGpveXN0aWNrIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0KLQlwcmludGsoImxpczNfaW5pdF9kZXZpY2U6IGlycSAlZFxuIiwgZGV2LT5pcnEpOwotCi0JLyogaWYgd2UgZGlkIG5vdCBnZXQgYW4gSVJRIGZyb20gQUNQSSAtIHdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGRvICovCi0JaWYgKCFkZXYtPmlycSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKLQkJCSI6IE5vIElSUSBpbiBBQ1BJLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXByaW50aygibGlzMzogcmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKLQlpZiAobWlzY19yZWdpc3RlcigmbGlzM2x2MDJkX21pc2NfZGV2aWNlKSkKLQkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IG1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLW91dDoKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKGRldik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChsaXMzbHYwMmRfaW5pdF9kZXZpY2UpOwotCiAvKiBTeXNmcyBzdHVmZiAqLwogc3RhdGljIHNzaXplX3QgbGlzM2x2MDJkX3Bvc2l0aW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IHgsIHksIHo7CiAKLQlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZhZGV2KTsKLQlsaXMzbHYwMmRfZ2V0X3h5eihhZGV2LmRldmljZS0+aGFuZGxlLCAmeCwgJnksICZ6KTsKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZsaXMzX2Rldik7CisJbGlzM2x2MDJkX2dldF94eXooJmxpczNfZGV2LCAmeCwgJnksICZ6KTsKKwlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZsaXMzX2Rldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiKCVkLCVkLCVkKVxuIiwgeCwgeSwgeik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxpczNsdjAyZF9jYWxpYnJhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIoJWQsJWQsJWQpXG4iLCBhZGV2LnhjYWxpYiwgYWRldi55Y2FsaWIsIGFkZXYuemNhbGliKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIoJWQsJWQsJWQpXG4iLCBsaXMzX2Rldi54Y2FsaWIsIGxpczNfZGV2LnljYWxpYiwgbGlzM19kZXYuemNhbGliKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbGlzM2x2MDJkX2NhbGlicmF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmYWRldik7CisJbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmbGlzM19kZXYpOwogCWxpczNsdjAyZF9jYWxpYnJhdGVfam95c3RpY2soKTsKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKKwlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZsaXMzX2Rldik7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00MzQsOSArNDIwLDkgQEAKIAl1OCBjdHJsOwogCWludCB2YWw7CiAKLQlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZhZGV2KTsKLQlhZGV2LnJlYWQoYWRldi5kZXZpY2UtPmhhbmRsZSwgQ1RSTF9SRUcxLCAmY3RybCk7Ci0JbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmYWRldik7CisJbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmbGlzM19kZXYpOworCWxpczNfZGV2LnJlYWQoJmxpczNfZGV2LCBDVFJMX1JFRzEsICZjdHJsKTsKKwlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZsaXMzX2Rldik7CiAJdmFsID0gKGN0cmwgJiAoQ1RSTDFfREYwIHwgQ1RSTDFfREYxKSkgPj4gNDsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGlzM2x2MDJkbF9kZl92YWxbdmFsXSk7CiB9CkBAIC00NTgsMjMgKzQ0NCw3MyBAQAogfTsKIAogCi1zdGF0aWMgaW50IGxpczNsdjAyZF9hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGxpczNsdjAyZF9hZGRfZnMoc3RydWN0IGxpczNsdjAyZCAqbGlzMykKIHsKLQlhZGV2LnBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSSVZFUl9OQU1FLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihhZGV2LnBkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihhZGV2LnBkZXYpOworCWxpczNfZGV2LnBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKERSSVZFUl9OQU1FLCAtMSwgTlVMTCwgMCk7CisJaWYgKElTX0VSUihsaXMzX2Rldi5wZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIobGlzM19kZXYucGRldik7CiAKLQlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZhZGV2LnBkZXYtPmRldi5rb2JqLCAmbGlzM2x2MDJkX2F0dHJpYnV0ZV9ncm91cCk7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmbGlzM19kZXYucGRldi0+ZGV2LmtvYmosICZsaXMzbHYwMmRfYXR0cmlidXRlX2dyb3VwKTsKIH0KIAogaW50IGxpczNsdjAyZF9yZW1vdmVfZnModm9pZCkKIHsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmFkZXYucGRldi0+ZGV2LmtvYmosICZsaXMzbHYwMmRfYXR0cmlidXRlX2dyb3VwKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhZGV2LnBkZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbGlzM19kZXYucGRldi0+ZGV2LmtvYmosICZsaXMzbHYwMmRfYXR0cmlidXRlX2dyb3VwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihsaXMzX2Rldi5wZGV2KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9yZW1vdmVfZnMpOwogCisvKgorICogSW5pdGlhbGlzZSB0aGUgYWNjZWxlcm9tZXRlciBhbmQgdGhlIHZhcmlvdXMgc3Vic3lzdGVtcy4KKyAqIFNob3VsZCBiZSByYXRoZXIgaW5kZXBlbmRhbnQgb2YgdGhlIGJ1cyBzeXN0ZW0uCisgKi8KK2ludCBsaXMzbHYwMmRfaW5pdF9kZXZpY2Uoc3RydWN0IGxpczNsdjAyZCAqZGV2KQoreworCWRldi0+d2hvYW1pID0gbGlzM2x2MDJkX3JlYWRfOChkZXYsIFdIT19BTV9JKTsKKworCXN3aXRjaCAoZGV2LT53aG9hbWkpIHsKKwljYXNlIExJU19ET1VCTEVfSUQ6CisJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogMi1ieXRlIHNlbnNvciBmb3VuZFxuIik7CisJCWRldi0+cmVhZF9kYXRhID0gbGlzM2x2MDJkX3JlYWRfMTY7CisJCWRldi0+bWRwc19tYXhfdmFsID0gMjA0ODsKKwkJYnJlYWs7CisJY2FzZSBMSVNfU0lOR0xFX0lEOgorCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IDEtYnl0ZSBzZW5zb3IgZm91bmRcbiIpOworCQlkZXYtPnJlYWRfZGF0YSA9IGxpczNsdjAyZF9yZWFkXzg7CisJCWRldi0+bWRwc19tYXhfdmFsID0gMTI4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJCSI6IHVua25vd24gc2Vuc29yIHR5cGUgMHglWFxuIiwgbGlzM19kZXYud2hvYW1pKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlsaXMzbHYwMmRfYWRkX2ZzKGRldik7CisJbGlzM2x2MDJkX2luY3JlYXNlX3VzZShkZXYpOworCisJaWYgKGxpczNsdjAyZF9qb3lzdGlja19lbmFibGUoKSkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IGpveXN0aWNrIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisKKwlwcmludGsoImxpczNfaW5pdF9kZXZpY2U6IGlycSAlZFxuIiwgZGV2LT5pcnEpOworCisJLyogYmFpbCBpZiB3ZSBkaWQgbm90IGdldCBhbiBJUlEgZnJvbSB0aGUgYnVzIGxheWVyICovCisJaWYgKCFkZXYtPmlycSkgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKKwkJCSI6IE5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcmludGsoImxpczM6IHJlZ2lzdGVyaW5nIGRldmljZVxuIik7CisJaWYgKG1pc2NfcmVnaXN0ZXIoJmxpczNsdjAyZF9taXNjX2RldmljZSkpCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBtaXNjX3JlZ2lzdGVyIGZhaWxlZFxuIik7CitvdXQ6CisJbGlzM2x2MDJkX2RlY3JlYXNlX3VzZShkZXYpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX2luaXRfZGV2aWNlKTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTVCBMSVMzTFYwMkR4IHRocmVlLWF4aXMgZGlnaXRhbCBhY2NlbGVyb21ldGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiWWFuIEJ1cm1hbiwgRXJpYyBQaWVsLCBQYXZlbCBNYWNoZWsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmggYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCmluZGV4IDc1OTcyYmYuLjc0NWVjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKKysrIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaApAQCAtMTU5LDE0ICsxNTksMTQgQEAKIAlzOAl6OwogfTsKIAotc3RydWN0IGFjcGlfbGlzM2x2MDJkIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UJKmRldmljZTsgICAvKiBUaGUgQUNQSSBkZXZpY2UgKi8KLQlhY3BpX3N0YXR1cyAoKmluaXQpIChhY3BpX2hhbmRsZSBoYW5kbGUpOwotCWFjcGlfc3RhdHVzICgqd3JpdGUpIChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcsIHU4IHZhbCk7Ci0JYWNwaV9zdGF0dXMgKCpyZWFkKSAoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcmVnLCB1OCAqcmV0KTsKK3N0cnVjdCBsaXMzbHYwMmQgeworCXZvaWQJCQkqYnVzX3ByaXY7IC8qIHVzZWQgYnkgdGhlIGJ1cyBsYXllciBvbmx5ICovCisJaW50ICgqaW5pdCkgKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpOworCWludCAoKndyaXRlKSAoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZywgdTggdmFsKTsKKwlpbnQgKCpyZWFkKSAoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZywgdTggKnJldCk7CiAKIAl1OAkJCXdob2FtaTsgICAgLyogM0FoOiAyLWJ5dGUgcmVnaXN0cmllcywgM0JoOiAxLWJ5dGUgcmVnaXN0cmllcyAqLwotCXMxNiAoKnJlYWRfZGF0YSkgKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZyk7CisJczE2ICgqcmVhZF9kYXRhKSAoc3RydWN0IGxpczNsdjAyZCAqbGlzMywgaW50IHJlZyk7CiAJaW50CQkJbWRwc19tYXhfdmFsOwogCiAJc3RydWN0IGlucHV0X2RldgkqaWRldjsgICAgIC8qIGlucHV0IGRldmljZSAqLwpAQCAtMTg3LDExICsxODcsMTEgQEAKIAl1bnNpZ25lZCBsb25nCQltaXNjX29wZW5lZDsgLyogYml0MDogd2hldGhlciB0aGUgZGV2aWNlIGlzIG9wZW4gKi8KIH07CiAKLWludCBsaXMzbHYwMmRfaW5pdF9kZXZpY2Uoc3RydWN0IGFjcGlfbGlzM2x2MDJkICpkZXYpOworaW50IGxpczNsdjAyZF9pbml0X2RldmljZShzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKTsKIGludCBsaXMzbHYwMmRfam95c3RpY2tfZW5hYmxlKHZvaWQpOwogdm9pZCBsaXMzbHYwMmRfam95c3RpY2tfZGlzYWJsZSh2b2lkKTsKLXZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKGFjcGlfaGFuZGxlIGhhbmRsZSk7Ci12b2lkIGxpczNsdjAyZF9wb3dlcm9uKGFjcGlfaGFuZGxlIGhhbmRsZSk7Cit2b2lkIGxpczNsdjAyZF9wb3dlcm9mZihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKTsKK3ZvaWQgbGlzM2x2MDJkX3Bvd2Vyb24oc3RydWN0IGxpczNsdjAyZCAqbGlzMyk7CiBpbnQgbGlzM2x2MDJkX3JlbW92ZV9mcyh2b2lkKTsKIAotZXh0ZXJuIHN0cnVjdCBhY3BpX2xpczNsdjAyZCBhZGV2OworZXh0ZXJuIHN0cnVjdCBsaXMzbHYwMmQgbGlzM19kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YWU3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYwpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIGxpczNsdjAyZF9zcGkgLSBTUEkgZ2x1ZSBsYXllciBmb3IgbGlzM2x2MDJkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgImxpczNsdjAyZC5oIgorCisjZGVmaW5lIERSVl9OQU1FIAkibGlzM2x2MDJkX3NwaSIKKyNkZWZpbmUgTElTM19TUElfUkVBRAkweDgwCisKK3N0YXRpYyBpbnQgbGlzM19zcGlfcmVhZChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCAqdikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbGlzMy0+YnVzX3ByaXY7CisJaW50IHJldCA9IHNwaV93OHI4KHNwaSwgcmVnIHwgTElTM19TUElfUkVBRCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJKnYgPSAodTgpIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaXMzX3NwaV93cml0ZShzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCB2YWwpCit7CisJdTggdG1wWzJdID0geyByZWcsIHZhbCB9OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBsaXMzLT5idXNfcHJpdjsKKwlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgdG1wLCBzaXplb2YodG1wKSk7Cit9CisKK3N0YXRpYyBpbnQgbGlzM19zcGlfaW5pdChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQoreworCXU4IHJlZzsKKwlpbnQgcmV0OworCisJLyogcG93ZXIgdXAgdGhlIGRldmljZSAqLworCXJldCA9IGxpczMtPnJlYWQobGlzMywgQ1RSTF9SRUcxLCAmcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJlZyB8PSBDVFJMMV9QRDA7CisJcmV0dXJuIGxpczMtPndyaXRlKGxpczMsIENUUkxfUkVHMSwgcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCBheGlzX2NvbnZlcnNpb24gbGlzM2x2MDJkX2F4aXNfbm9ybWFsID0geyAxLCAyLCAzIH07CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGxpczMwMmRsX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCByZXQ7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlsaXMzX2Rldi5idXNfcHJpdiA9IHNwaTsKKwlsaXMzX2Rldi5pbml0ID0gbGlzM19zcGlfaW5pdDsKKwlsaXMzX2Rldi5yZWFkID0gbGlzM19zcGlfcmVhZDsKKwlsaXMzX2Rldi53cml0ZSA9IGxpczNfc3BpX3dyaXRlOworCWxpczNfZGV2LmlycSA9IHNwaS0+aXJxOworCWxpczNfZGV2LmFjID0gbGlzM2x2MDJkX2F4aXNfbm9ybWFsOworCXNwaV9zZXRfZHJ2ZGF0YShzcGksICZsaXMzX2Rldik7CisKKwlyZXQgPSBsaXMzbHYwMmRfaW5pdF9kZXZpY2UoJmxpczNfZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaXMzMDJkbF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOworCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7CisJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGxpczMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbGlzMzAyZGxfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyCSA9IHsKKwkJLm5hbWUgICA9IERSVl9OQU1FLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBsaXMzMDJkbF9zcGlfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGxpczMwMmRsX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbGlzMzAyZGxfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZsaXMzMDJkbF9zcGlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxpczMwMmRsX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJmxpczMwMmRsX3NwaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChsaXMzMDJkbF9pbml0KTsKK21vZHVsZV9leGl0KGxpczMwMmRsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJsaXMzbHYwMmQgU1BJIGdsdWUgbGF5ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTk1MjQxLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTUyNDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTFkOTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9sbTk1MjQxLmMKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBsbTk1MjQxLmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZQorICogICAgICAgICAgICAgbW9uaXRvcmluZworICogQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkZSBSaXp6byA8ZWxwYS1yaXp6b0BnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gdGhlIG1heDE2MTkgZHJpdmVyLiBUaGUgTE05NTI0MSBpcyBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwKKyAqICAgU2VtaWNvbmR1Y3RvcnMuCisgKiBJdCByZXBvcnRzIHVwIHRvIHRocmVlIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCisgKiB0d28gZXh0ZXJuYWwgb25lcykuIENvbXBsZXRlIGRhdGFzaGVldCBjYW4gYmUKKyAqIG9idGFpbmVkIGZyb20gTmF0aW9uYWwncyB3ZWJzaXRlIGF0OgorICogICBodHRwOi8vd3d3Lm5hdGlvbmFsLmNvbS9kcy5jZ2kvTE0vTE05NTI0MS5wZGYKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKKwkweDE5LCAweDJhLCAweDJiLCBJMkNfQ0xJRU5UX0VORH07CisKKy8qIEluc21vZCBwYXJhbWV0ZXJzICovCitJMkNfQ0xJRU5UX0lOU01PRF8xKGxtOTUyNDEpOworCisvKiBMTTk1MjQxIHJlZ2lzdGVycyAqLworI2RlZmluZSBMTTk1MjQxX1JFR19SX01BTl9JRAkJMHhGRQorI2RlZmluZSBMTTk1MjQxX1JFR19SX0NISVBfSUQJCTB4RkYKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9TVEFUVVMJCTB4MDIKKyNkZWZpbmUgTE05NTI0MV9SRUdfUldfQ09ORklHCQkweDAzCisjZGVmaW5lIExNOTUyNDFfUkVHX1JXX1JFTV9GSUxURVIJMHgwNgorI2RlZmluZSBMTTk1MjQxX1JFR19SV19UUlVUSEVSTQkJMHgwNworI2RlZmluZSBMTTk1MjQxX1JFR19XX09ORV9TSE9UICAJMHgwRgorI2RlZmluZSBMTTk1MjQxX1JFR19SX0xPQ0FMX1RFTVBICTB4MTAKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9SRU1PVEUxX1RFTVBICTB4MTEKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9SRU1PVEUyX1RFTVBICTB4MTIKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9MT0NBTF9URU1QTAkweDIwCisjZGVmaW5lIExNOTUyNDFfUkVHX1JfUkVNT1RFMV9URU1QTAkweDIxCisjZGVmaW5lIExNOTUyNDFfUkVHX1JfUkVNT1RFMl9URU1QTAkweDIyCisjZGVmaW5lIExNOTUyNDFfUkVHX1JXX1JFTU9URV9NT0RFTAkweDMwCisKKy8qIExNOTUyNDEgc3BlY2lmaWMgYml0ZmllbGRzICovCisjZGVmaW5lIENGR19TVE9QIDB4NDAKKyNkZWZpbmUgQ0ZHX0NSMDA3NiAweDAwCisjZGVmaW5lIENGR19DUjAxODIgMHgxMAorI2RlZmluZSBDRkdfQ1IxMDAwIDB4MjAKKyNkZWZpbmUgQ0ZHX0NSMjcwMCAweDMwCisjZGVmaW5lIFIxTVNfU0hJRlQgMAorI2RlZmluZSBSMk1TX1NISUZUIDIKKyNkZWZpbmUgUjFNU19NQVNLICgweDAxIDw8IChSMU1TX1NISUZUKSkKKyNkZWZpbmUgUjJNU19NQVNLICgweDAxIDw8IChSMk1TX1NISUZUKSkKKyNkZWZpbmUgUjFERl9TSElGVCAxCisjZGVmaW5lIFIyREZfU0hJRlQgMgorI2RlZmluZSBSMURGX01BU0sgKDB4MDEgPDwgKFIxREZfU0hJRlQpKQorI2RlZmluZSBSMkRGX01BU0sgKDB4MDEgPDwgKFIyREZfU0hJRlQpKQorI2RlZmluZSBSMUZFX01BU0sgMHgwMQorI2RlZmluZSBSMkZFX01BU0sgMHgwNQorI2RlZmluZSBUVDFfU0hJRlQgMAorI2RlZmluZSBUVDJfU0hJRlQgNAorI2RlZmluZSBUVF9PRkYgMAorI2RlZmluZSBUVF9PTiAxCisjZGVmaW5lIFRUX01BU0sgNworI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQgMHgwMQorI2RlZmluZSBERUZBVUxUX1JFVklTSU9OIDB4QTQKKworLyogQ29udmVyc2lvbnMgYW5kIHZhcmlvdXMgbWFjcm9zICovCisjZGVmaW5lIFRFTVBfRlJPTV9SRUcodmFsX2gsIHZhbF9sKSAoKCh2YWxfaCkgJiAweDgwID8gKHZhbF9oKSAtIDB4MTAwIDogXAorICAgICh2YWxfaCkpICogMTAwMCArICh2YWxfbCkgKiAxMDAwIC8gMjU2KQorCisvKiBGdW5jdGlvbnMgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBpbnQgbG05NTI0MV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBsbTk1MjQxX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAorCQkJICBpbnQga2luZCk7CitzdGF0aWMgdm9pZCBsbTk1MjQxX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIGludCBsbTk1MjQxX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgc3RydWN0IGxtOTUyNDFfZGF0YSAqbG05NTI0MV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qIERyaXZlciBkYXRhIChjb21tb24gdG8gYWxsIGNsaWVudHMpICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG05NTI0MV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgICA9ICJsbTk1MjQxIiwKKwl9LAorCS5hdHRhY2hfYWRhcHRlciA9IGxtOTUyNDFfYXR0YWNoX2FkYXB0ZXIsCisJLmRldGFjaF9jbGllbnQgID0gbG05NTI0MV9kZXRhY2hfY2xpZW50LAorfTsKKworLyogQ2xpZW50IGRhdGEgKGVhY2ggY2xpZW50IGdldHMgaXRzIG93bikgKi8KK3N0cnVjdCBsbTk1MjQxX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkLCByYXRlOyAvKiBpbiBqaWZmaWVzICovCisJY2hhciB2YWxpZDsgLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KKwl1OCBsb2NhbF9oLCBsb2NhbF9sOyAvKiBsb2NhbCAqLworCXU4IHJlbW90ZTFfaCwgcmVtb3RlMV9sOyAvKiByZW1vdGUxICovCisJdTggcmVtb3RlMl9oLCByZW1vdGUyX2w7IC8qIHJlbW90ZTIgKi8KKwl1OCBjb25maWcsIG1vZGVsLCB0cnV0aGVybTsKK307CisKKy8qIFN5c2ZzIHN0dWZmICovCisjZGVmaW5lIHNob3dfdGVtcCh2YWx1ZSkgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBsbTk1MjQxX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAorCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgIiVkXG4iLCBcCisJCVRFTVBfRlJPTV9SRUcoZGF0YS0+dmFsdWUjI19oLCBkYXRhLT52YWx1ZSMjX2wpKTsgXAorCXJldHVybiBzdHJsZW4oYnVmKTsgXAorfQorc2hvd190ZW1wKGxvY2FsKTsKK3Nob3dfdGVtcChyZW1vdGUxKTsKK3Nob3dfdGVtcChyZW1vdGUyKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBsbTk1MjQxX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKworCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgIiVsdVxuIiwgMTAwMCAqIGRhdGEtPnJhdGUgLyBIWik7CisJcmV0dXJuIHN0cmxlbihidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZkYXRhLT5yYXRlKTsKKwlkYXRhLT5yYXRlID0gZGF0YS0+cmF0ZSAqIEhaIC8gMTAwMDsKKworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBzaG93X3R5cGUoZmxhZykgXAorc3RhdGljIHNzaXplX3Qgc2hvd190eXBlIyNmbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKK1wKKwlzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDEsIFwKKwkJZGF0YS0+bW9kZWwgJiBSIyNmbGFnIyNNU19NQVNLID8gIjFcbiIgOiAiMlxuIik7IFwKKwlyZXR1cm4gc3RybGVuKGJ1Zik7IFwKK30KK3Nob3dfdHlwZSgxKTsKK3Nob3dfdHlwZSgyKTsKKworI2RlZmluZSBzaG93X21pbihmbGFnKSBcCitzdGF0aWMgc3NpemVfdCBzaG93X21pbiMjZmxhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKyAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCitcCisJc25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAxLCBcCisJCWRhdGEtPmNvbmZpZyAmIFIjI2ZsYWcjI0RGX01BU0sgPwlcCisJCSItMTI3MDAwXG4iIDogIjBcbiIpOyBcCisJcmV0dXJuIHN0cmxlbihidWYpOyBcCit9CitzaG93X21pbigxKTsKK3Nob3dfbWluKDIpOworCisjZGVmaW5lIHNob3dfbWF4KGZsYWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWF4IyNmbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKK1wKKwlzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDEsIFwKKwkJZGF0YS0+Y29uZmlnICYgUiMjZmxhZyMjREZfTUFTSyA/IFwKKwkJIjEyNzAwMFxuIiA6ICIyNTUwMDBcbiIpOyBcCisJcmV0dXJuIHN0cmxlbihidWYpOyBcCit9CitzaG93X21heCgxKTsKK3Nob3dfbWF4KDIpOworCisjZGVmaW5lIHNldF90eXBlKGZsYWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNldF90eXBlIyNmbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7IFwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCitcCisJbG9uZyB2YWw7IFwKKwlzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOyBcCitcCisJaWYgKCh2YWwgPT0gMSkgfHwgKHZhbCA9PSAyKSkgeyBcCitcCisJCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorXAorCQlkYXRhLT50cnV0aGVybSAmPSB+KFRUX01BU0sgPDwgVFQjI2ZsYWcjI19TSElGVCk7IFwKKwkJaWYgKHZhbCA9PSAxKSB7IFwKKwkJCWRhdGEtPm1vZGVsIHw9IFIjI2ZsYWcjI01TX01BU0s7IFwKKwkJCWRhdGEtPnRydXRoZXJtIHw9IChUVF9PTiA8PCBUVCMjZmxhZyMjX1NISUZUKTsgXAorCQl9IFwKKwkJZWxzZSB7IFwKKwkJCWRhdGEtPm1vZGVsICY9IH5SIyNmbGFnIyNNU19NQVNLOyBcCisJCQlkYXRhLT50cnV0aGVybSB8PSAoVFRfT0ZGIDw8IFRUIyNmbGFnIyNfU0hJRlQpOyBcCisJCX0gXAorXAorCQlkYXRhLT52YWxpZCA9IDA7IFwKK1wKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX1JFTU9URV9NT0RFTCwgXAorCQkJCQkgIGRhdGEtPm1vZGVsKTsgXAorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0MV9SRUdfUldfVFJVVEhFUk0sIFwKKwkJCQkJICBkYXRhLT50cnV0aGVybSk7IFwKK1wKKwkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKK1wKKwl9IFwKKwlyZXR1cm4gY291bnQ7IFwKK30KK3NldF90eXBlKDEpOworc2V0X3R5cGUoMik7CisKKyNkZWZpbmUgc2V0X21pbihmbGFnKSBcCitzdGF0aWMgc3NpemVfdCBzZXRfbWluIyNmbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoreyBcCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAorCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorXAorCWxvbmcgdmFsOyBcCisJc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsgXAorXAorCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorXAorCWlmICh2YWwgPCAwKSBcCisJCWRhdGEtPmNvbmZpZyB8PSBSIyNmbGFnIyNERl9NQVNLOyBcCisJZWxzZSBcCisJCWRhdGEtPmNvbmZpZyAmPSB+UiMjZmxhZyMjREZfTUFTSzsgXAorXAorCWRhdGEtPnZhbGlkID0gMDsgXAorXAorCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQxX1JFR19SV19DT05GSUcsIFwKKwkJZGF0YS0+Y29uZmlnKTsgXAorXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCitcCisJcmV0dXJuIGNvdW50OyBcCit9CitzZXRfbWluKDEpOworc2V0X21pbigyKTsKKworI2RlZmluZSBzZXRfbWF4KGZsYWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNldF9tYXgjI2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7IFwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCitcCisJbG9uZyB2YWw7IFwKKwlzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOyBcCitcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCitcCisJaWYgKHZhbCA8PSAxMjcwMDApIFwKKwkJZGF0YS0+Y29uZmlnIHw9IFIjI2ZsYWcjI0RGX01BU0s7IFwKKwllbHNlIFwKKwkJZGF0YS0+Y29uZmlnICY9IH5SIyNmbGFnIyNERl9NQVNLOyBcCitcCisJZGF0YS0+dmFsaWQgPSAwOyBcCitcCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX0NPTkZJRywgXAorCQlkYXRhLT5jb25maWcpOyBcCitcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKK1wKKwlyZXR1cm4gY291bnQ7IFwKK30KK3NldF9tYXgoMSk7CitzZXRfbWF4KDIpOworCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfbG9jYWwsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3JlbW90ZTEsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3JlbW90ZTIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX3R5cGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3R5cGUxLCBzZXRfdHlwZTEpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAzX3R5cGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3R5cGUyLCBzZXRfdHlwZTIpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWluMSwgc2V0X21pbjEpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAzX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWluMiwgc2V0X21pbjIpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWF4MSwgc2V0X21heDEpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAzX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbWF4Miwgc2V0X21heDIpOworc3RhdGljIERFVklDRV9BVFRSKHJhdGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3JhdGUsIHNldF9yYXRlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTUyNDFfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl90eXBlLmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfbWF4LmF0dHIsCisJJmRldl9hdHRyX3JhdGUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTk1MjQxX2dyb3VwID0geworCS5hdHRycyA9IGxtOTUyNDFfYXR0cmlidXRlcywKK307CisKKy8qIEluaXQvZXhpdCBjb2RlICovCitzdGF0aWMgaW50IGxtOTUyNDFfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmICghKGFkYXB0ZXItPmNsYXNzICYgSTJDX0NMQVNTX0hXTU9OKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBsbTk1MjQxX2RldGVjdCk7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGRvZXMgbW9yZSB0aGFuIGp1c3QgZGV0ZWN0aW9uLiBJZiBkZXRlY3Rpb24KKyAqIHN1Y2NlZWRzLCBpdCBhbHNvIHJlZ2lzdGVycyB0aGUgbmV3IGNoaXAuCisgKi8KK3N0YXRpYyBpbnQgbG05NTI0MV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7CisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YTsKKwlpbnQgZXJyID0gMDsKKwljb25zdCBjaGFyICpuYW1lID0gIiI7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCWdvdG8gZXhpdDsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbG05NTI0MV9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBUaGUgY29tbW9uIEkyQyBjbGllbnQgZGF0YSBpcyBwbGFjZWQgcmlnaHQgYmVmb3JlIHRoZQorCSAgIExNOTUyNDEtc3BlY2lmaWMgZGF0YS4gKi8KKwluZXdfY2xpZW50ID0gJmRhdGEtPmNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7CisJbmV3X2NsaWVudC0+YWRkciA9IGFkZHJlc3M7CisJbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJbmV3X2NsaWVudC0+ZHJpdmVyID0gJmxtOTUyNDFfZHJpdmVyOworCW5ld19jbGllbnQtPmZsYWdzID0gMDsKKworCS8qCisJICogTm93IHdlIGRvIHRoZSByZW1haW5pbmcgZGV0ZWN0aW9uLiBBIG5lZ2F0aXZlIGtpbmQgbWVhbnMgdGhhdAorCSAqIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCB3aXRoIG5vIGZvcmNlIHBhcmFtZXRlciAoZGVmYXVsdCksIHNvIHdlCisJICogbXVzdCBib3RoIGRldGVjdCBhbmQgaWRlbnRpZnkgdGhlIGNoaXAuIEEgemVybyBraW5kIG1lYW5zIHRoYXQKKwkgKiB0aGUgZHJpdmVyIHdhcyBsb2FkZWQgd2l0aCB0aGUgZm9yY2UgcGFyYW1ldGVyLCB0aGUgZGV0ZWN0aW9uCisJICogc3RlcCBzaGFsbCBiZSBza2lwcGVkLiBBIHBvc2l0aXZlIGtpbmQgbWVhbnMgdGhhdCB0aGUgZHJpdmVyCisJICogd2FzIGxvYWRlZCB3aXRoIHRoZSBmb3JjZSBwYXJhbWV0ZXIgYW5kIGEgZ2l2ZW4ga2luZCBvZiBjaGlwIGlzCisJICogcmVxdWVzdGVkLCBzbyBib3RoIHRoZSBkZXRlY3Rpb24gYW5kIHRoZSBpZGVudGlmaWNhdGlvbiBzdGVwcworCSAqIGFyZSBza2lwcGVkLgorCSAqLworCWlmIChraW5kIDwgMCkgewkvKiBkZXRlY3Rpb24gKi8KKwkJaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9NQU5fSUQpCisJCSAgICAgIT0gTUFOVUZBQ1RVUkVSX0lEKQorCQl8fCAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDFfUkVHX1JfQ0hJUF9JRCkKKwkJICAgIDwgREVGQVVMVF9SRVZJU0lPTikpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPmRldiwKKwkJCQkiTE05NTI0MSBkZXRlY3Rpb24gZmFpbGVkIGF0IDB4JTAyeC5cbiIsCisJCQkJYWRkcmVzcyk7CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCX0KKworCWlmIChraW5kIDw9IDApIHsgLyogaWRlbnRpZmljYXRpb24gKi8KKwkJaWYgKChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9NQU5fSUQpCisJCSAgICAgPT0gTUFOVUZBQ1RVUkVSX0lEKQorCQkmJiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKG5ld19jbGllbnQsIExNOTUyNDFfUkVHX1JfQ0hJUF9JRCkKKwkJICAgID49IERFRkFVTFRfUkVWSVNJT04pKSB7CisKKwkJCWtpbmQgPSBsbTk1MjQxOworCisJCQlpZiAoa2luZCA8PSAwKSB7IC8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLworCQkJCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJVbnN1cHBvcnRlZCBjaGlwXG4iKTsKKwkJCQlnb3RvIGV4aXRfZnJlZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChraW5kID09IGxtOTUyNDEpCisJCW5hbWUgPSAibG05NTI0MSI7CisKKwkvKiBXZSBjYW4gZmlsbCBpbiB0aGUgcmVtYWluaW5nIGNsaWVudCBmaWVsZHMgKi8KKwlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIG5hbWUsIEkyQ19OQU1FX1NJWkUpOworCWRhdGEtPnZhbGlkID0gMDsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCisJZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWU7CisKKwkvKiBJbml0aWFsaXplIHRoZSBMTTk1MjQxIGNoaXAgKi8KKwlsbTk1MjQxX2luaXRfY2xpZW50KG5ld19jbGllbnQpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05NTI0MV9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05NTI0MV9ncm91cCk7CitleGl0X2RldGFjaDoKKwlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbG05NTI0MV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRhdGEtPnJhdGUgPSBIWjsgICAgLyogMSBzZWMgZGVmYXVsdCAqLworCWRhdGEtPnZhbGlkID0gMDsKKwlkYXRhLT5jb25maWcgPSBDRkdfQ1IwMDc2OworCWRhdGEtPm1vZGVsID0gMDsKKwlkYXRhLT50cnV0aGVybSA9IChUVF9PRkYgPDwgVFQxX1NISUZUKSB8IChUVF9PRkYgPDwgVFQyX1NISUZUKTsKKworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQxX1JFR19SV19DT05GSUcsCisJCQkJICBkYXRhLT5jb25maWcpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQxX1JFR19SV19SRU1fRklMVEVSLAorCQkJCSAgUjFGRV9NQVNLIHwgUjJGRV9NQVNLKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0MV9SRUdfUldfVFJVVEhFUk0sCisJCQkJICBkYXRhLT50cnV0aGVybSk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX1JFTU9URV9NT0RFTCwKKwkJCQkgIGRhdGEtPm1vZGVsKTsKK30KKworc3RhdGljIGludCBsbTk1MjQxX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGVycjsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG05NTI0MV9ncm91cCk7CisKKwllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsbTk1MjQxX2RhdGEgKmxtOTUyNDFfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBkYXRhLT5yYXRlKSB8fAorCSAgICAhZGF0YS0+dmFsaWQpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJVcGRhdGluZyBsbTk1MjQxIGRhdGEuXG4iKTsKKwkJZGF0YS0+bG9jYWxfaCA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJIExNOTUyNDFfUkVHX1JfTE9DQUxfVEVNUEgpOworCQlkYXRhLT5sb2NhbF9sID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9MT0NBTF9URU1QTCk7CisJCWRhdGEtPnJlbW90ZTFfaCA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJIExNOTUyNDFfUkVHX1JfUkVNT1RFMV9URU1QSCk7CisJCWRhdGEtPnJlbW90ZTFfbCA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJIExNOTUyNDFfUkVHX1JfUkVNT1RFMV9URU1QTCk7CisJCWRhdGEtPnJlbW90ZTJfaCA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJIExNOTUyNDFfUkVHX1JfUkVNT1RFMl9URU1QSCk7CisJCWRhdGEtPnJlbW90ZTJfbCA9CisJCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJIExNOTUyNDFfUkVHX1JfUkVNT1RFMl9URU1QTCk7CisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX2xtOTUyNDFfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmbG05NTI0MV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2Vuc29yc19sbTk1MjQxX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbG05NTI0MV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJEYXZpZGUgUml6em8gPGVscGEtcml6em9AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMTTk1MjQxIHNlbnNvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoc2Vuc29yc19sbTk1MjQxX2luaXQpOworbW9kdWxlX2V4aXQoc2Vuc29yc19sbTk1MjQxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzg2ZTJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjE1LmMKQEAgLTAsMCArMSwzNjQgQEAKKy8qCisgKiBEcml2ZXIgZm9yIExpbmVhciBUZWNobm9sb2d5IExUQzQyMTUgSTJDIEhvdCBTd2FwIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogRGF0YXNoZWV0OgorICogaHR0cDovL3d3dy5saW5lYXIuY29tL3BjL2Rvd25sb2FkRG9jdW1lbnQuZG8/bmF2SWQ9SDAsQzEsQzEwMDMsQzEwMDYsQzExNjMsUDE3NTcyLEQxMjY5NworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKKworLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KK0kyQ19DTElFTlRfSU5TTU9EXzEobHRjNDIxNSk7CisKKy8qIEhlcmUgYXJlIG5hbWVzIG9mIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzIChhLmsuYS4gY29tbWFuZHMpICovCitlbnVtIGx0YzQyMTVfY21kIHsKKwlMVEM0MjE1X0NPTlRST0wJCQk9IDB4MDAsIC8qIHJ3ICovCisJTFRDNDIxNV9BTEVSVAkJCT0gMHgwMSwgLyogcncgKi8KKwlMVEM0MjE1X1NUQVRVUwkJCT0gMHgwMiwgLyogcm8gKi8KKwlMVEM0MjE1X0ZBVUxUCQkJPSAweDAzLCAvKiBydyAqLworCUxUQzQyMTVfU0VOU0UJCQk9IDB4MDQsIC8qIHJ3ICovCisJTFRDNDIxNV9TT1VSQ0UJCQk9IDB4MDUsIC8qIHJ3ICovCisJTFRDNDIxNV9BRElOCQkJPSAweDA2LCAvKiBydyAqLworfTsKKworc3RydWN0IGx0YzQyMTVfZGF0YSB7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworCisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWJvb2wgdmFsaWQ7CisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KKworCS8qIFJlZ2lzdGVycyAqLworCXU4IHJlZ3NbN107Cit9OworCitzdGF0aWMgc3RydWN0IGx0YzQyMTVfZGF0YSAqbHRjNDIxNV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsdGM0MjE1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzMzIgdmFsOworCWludCBpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogVGhlIGNoaXAncyBBL0QgdXBkYXRlcyAxMCB0aW1lcyBwZXIgc2Vjb25kICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogLyAxMCkgfHwgIWRhdGEtPnZhbGlkKSB7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTdGFydGluZyBsdGM0MjE1IHVwZGF0ZVxuIik7CisKKwkJLyogUmVhZCBhbGwgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnJlZ3MpOyBpKyspIHsKKwkJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpOworCQkJaWYgKHVubGlrZWx5KHZhbCA8IDApKQorCQkJCWRhdGEtPnJlZ3NbaV0gPSAwOworCQkJZWxzZQorCQkJCWRhdGEtPnJlZ3NbaV0gPSB2YWw7CisJCX0KKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyogUmV0dXJuIHRoZSB2b2x0YWdlIGZyb20gdGhlIGdpdmVuIHJlZ2lzdGVyIGluIG1pbGxpdm9sdHMgKi8KK3N0YXRpYyBpbnQgbHRjNDIxNV9nZXRfdm9sdGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IHJlZykKK3sKKwlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhID0gbHRjNDIxNV91cGRhdGVfZGV2aWNlKGRldik7CisJY29uc3QgdTggcmVndmFsID0gZGF0YS0+cmVnc1tyZWddOworCXUzMiB2b2x0YWdlID0gMDsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBMVEM0MjE1X1NFTlNFOgorCQkvKiAxNTEgdVYgcGVyIGluY3JlbWVudCAqLworCQl2b2x0YWdlID0gcmVndmFsICogMTUxIC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBMVEM0MjE1X1NPVVJDRToKKwkJLyogNjAuNSBtViBwZXIgaW5jcmVtZW50ICovCisJCXZvbHRhZ2UgPSByZWd2YWwgKiA2MDUgLyAxMDsKKwkJYnJlYWs7CisJY2FzZSBMVEM0MjE1X0FESU46CisJCS8qIFRoZSBBRElOIGlucHV0IGlzIGRpdmlkZWQgYnkgMTIuNSwgYW5kIGhhcyA0LjgyIG1WCisJCSAqIHBlciBpbmNyZW1lbnQsIHNvIHdlIGhhdmUgdGhlIGFkZGl0aW9uYWwgbXVsdGlwbHkgKi8KKwkJdm9sdGFnZSA9IHJlZ3ZhbCAqIDQ4MiAqIDEyNSAvIDEwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIElmIHdlIGdldCBoZXJlLCB0aGUgZGV2ZWxvcGVyIG1lc3NlZCB1cCAqLworCQlXQVJOX09OX09OQ0UoMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiB2b2x0YWdlOworfQorCisvKiBSZXR1cm4gdGhlIGN1cnJlbnQgZnJvbSB0aGUgc2Vuc2UgcmVzaXN0b3IgaW4gbUEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHRjNDIxNV9nZXRfY3VycmVudChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YSA9IGx0YzQyMTVfdXBkYXRlX2RldmljZShkZXYpOworCisJLyogVGhlIHN0cmFuZ2UgbG9va2luZyBjb252ZXJzaW9ucyB0aGF0IGZvbGxvdyBhcmUgZml4ZWQtcG9pbnQKKwkgKiBtYXRoLCBzaW5jZSB3ZSBjYW5ub3QgZG8gZmxvYXRpbmcgcG9pbnQgaW4gdGhlIGtlcm5lbC4KKwkgKgorCSAqIFN0ZXAgMTogY29udmVydCBzZW5zZSByZWdpc3RlciB0byBtaWNyb1ZvbHRzCisJICogU3RlcCAyOiBjb252ZXJ0IHZvbHRhZ2UgdG8gbWlsbGlBbXBlcmVzCisJICoKKwkgKiBJZiB5b3UgcGxheSBhcm91bmQgd2l0aCB0aGUgVj1JUiBlcXVhdGlvbiwgeW91IGNvbWUgdXAgd2l0aAorCSAqIHRoZSBmb2xsb3dpbmc6IFggdVYgLyBZIG1PaG0gPT0gWiBtQQorCSAqCisJICogV2l0aCB0aGUgcmVzaXN0b3JzIHRoYXQgYXJlIGZyYWN0aW9ucyBvZiBhIG1pbGxpT2htLCB3ZSBtdWx0aXBseQorCSAqIHRoZSB2b2x0YWdlIGFuZCByZXNpc3RhbmNlIGJ5IDEwLCB0byBzaGlmdCB0aGUgZGVjaW1hbCBwb2ludC4KKwkgKiBOb3cgd2UgY2FuIHVzZSB0aGUgbm9ybWFsIGRpdmlzaW9uIG9wZXJhdG9yIGFnYWluLgorCSAqLworCisJLyogQ2FsY3VsYXRlIHZvbHRhZ2UgaW4gbWljcm9Wb2x0cyAoMTUxIHVWIHBlciBpbmNyZW1lbnQpICovCisJY29uc3QgdW5zaWduZWQgaW50IHZvbHRhZ2UgPSBkYXRhLT5yZWdzW0xUQzQyMTVfU0VOU0VdICogMTUxOworCisJLyogQ2FsY3VsYXRlIGN1cnJlbnQgaW4gbWlsbGlBbXBlcmVzICg0IG1pbGxpT2htIHNlbnNlIHJlc2lzdG9yKSAqLworCWNvbnN0IHVuc2lnbmVkIGludCBjdXJyID0gdm9sdGFnZSAvIDQ7CisKKwlyZXR1cm4gY3VycjsKK30KKworc3RhdGljIHNzaXplX3QgbHRjNDIxNV9zaG93X3ZvbHRhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOworCWNvbnN0IGludCB2b2x0YWdlID0gbHRjNDIxNV9nZXRfdm9sdGFnZShkZXYsIGF0dHItPmluZGV4KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2b2x0YWdlKTsKK30KKworc3RhdGljIHNzaXplX3QgbHRjNDIxNV9zaG93X2N1cnJlbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY3VyciA9IGx0YzQyMTVfZ2V0X2N1cnJlbnQoZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBjdXJyKTsKK30KKworc3RhdGljIHNzaXplX3QgbHRjNDIxNV9zaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCQkgIGNoYXIgKmJ1ZikKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY3VyciA9IGx0YzQyMTVfZ2V0X2N1cnJlbnQoZGV2KTsKKwljb25zdCBpbnQgb3V0cHV0X3ZvbHRhZ2UgPSBsdGM0MjE1X2dldF92b2x0YWdlKGRldiwgTFRDNDIxNV9BRElOKTsKKworCS8qIGN1cnJlbnQgaW4gbUEgKiB2b2x0YWdlIGluIG1WID09IHBvd2VyIGluIHVXICovCisJY29uc3QgdW5zaWduZWQgaW50IHBvd2VyID0gYWJzKG91dHB1dF92b2x0YWdlICogY3Vycik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgcG93ZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBsdGM0MjE1X3Nob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihkYSk7CisJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YSA9IGx0YzQyMTVfdXBkYXRlX2RldmljZShkZXYpOworCWNvbnN0IHU4IHJlZyA9IGRhdGEtPnJlZ3NbYXR0ci0+aW5kZXhdOworCWNvbnN0IHUzMiBtYXNrID0gYXR0ci0+bnI7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgKHJlZyAmIG1hc2spID8gMSA6IDApOworfQorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgYmVsb3cgaW4gY29uc3RydWN0aW5nIGRldmljZSBhdHRyaWJ1dGUgb2JqZWN0cworICogZm9yIHVzZSB3aXRoIHN5c2ZzX2NyZWF0ZV9ncm91cCgpIHRvIG1ha2UgYSBzeXNmcyBkZXZpY2UgZmlsZQorICogZm9yIGVhY2ggcmVnaXN0ZXIuCisgKi8KKworI2RlZmluZSBMVEM0MjE1X1ZPTFRBR0UobmFtZSwgbHRjNDIxNV9jbWRfaWR4KSBcCisJc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBcCisJbHRjNDIxNV9zaG93X3ZvbHRhZ2UsIE5VTEwsIGx0YzQyMTVfY21kX2lkeCkKKworI2RlZmluZSBMVEM0MjE1X0NVUlJFTlQobmFtZSkgXAorCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgXAorCWx0YzQyMTVfc2hvd19jdXJyZW50LCBOVUxMLCAwKTsKKworI2RlZmluZSBMVEM0MjE1X1BPV0VSKG5hbWUpIFwKKwlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIFwKKwlsdGM0MjE1X3Nob3dfcG93ZXIsIE5VTEwsIDApOworCisjZGVmaW5lIExUQzQyMTVfQUxBUk0obmFtZSwgbWFzaywgcmVnKSBcCisJc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKG5hbWUsIFNfSVJVR08sIFwKKwlsdGM0MjE1X3Nob3dfYWxhcm0sIE5VTEwsIChtYXNrKSwgcmVnKQorCisvKiBDb25zdHJ1Y3QgYSBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggcmVnaXN0ZXIgKi8KKworLyogQ3VycmVudCAqLworTFRDNDIxNV9DVVJSRU5UKGN1cnIxX2lucHV0KTsKK0xUQzQyMTVfQUxBUk0oY3VycjFfbWF4X2FsYXJtLAkoMSA8PCAyKSwJTFRDNDIxNV9TVEFUVVMpOworCisvKiBQb3dlciAodmlydHVhbCkgKi8KK0xUQzQyMTVfUE9XRVIocG93ZXIxX2lucHV0KTsKK0xUQzQyMTVfQUxBUk0ocG93ZXIxX2FsYXJtLAkoMSA8PCAzKSwJTFRDNDIxNV9TVEFUVVMpOworCisvKiBJbnB1dCBWb2x0YWdlICovCitMVEM0MjE1X1ZPTFRBR0UoaW4xX2lucHV0LAkJCUxUQzQyMTVfQURJTik7CitMVEM0MjE1X0FMQVJNKGluMV9tYXhfYWxhcm0sCSgxIDw8IDApLAlMVEM0MjE1X1NUQVRVUyk7CitMVEM0MjE1X0FMQVJNKGluMV9taW5fYWxhcm0sCSgxIDw8IDEpLAlMVEM0MjE1X1NUQVRVUyk7CisKKy8qIE91dHB1dCBWb2x0YWdlICovCitMVEM0MjE1X1ZPTFRBR0UoaW4yX2lucHV0LAkJCUxUQzQyMTVfU09VUkNFKTsKKworLyogRmluYWxseSwgY29uc3RydWN0IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG1lbWJlcnMgb2YgdGhlIGFib3ZlIG9iamVjdHMsCisgKiBhcyByZXF1aXJlZCBmb3Igc3lzZnNfY3JlYXRlX2dyb3VwKCkKKyAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmx0YzQyMTVfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfY3VycjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2N1cnIxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHRjNDIxNV9ncm91cCA9IHsKKwkuYXR0cnMgPSBsdGM0MjE1X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IGx0YzQyMTVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2t6YWxsb2M7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogSW5pdGlhbGl6ZSB0aGUgTFRDNDIxNSBjaGlwICovCisJLyogVE9ETyAqLworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsdGM0MjE1X2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zeXNmc19jcmVhdGVfZ3JvdXA7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIG91dF9od21vbl9kZXZpY2VfcmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9od21vbl9kZXZpY2VfcmVnaXN0ZXI6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbHRjNDIxNV9ncm91cCk7CitvdXRfc3lzZnNfY3JlYXRlX2dyb3VwOgorCWtmcmVlKGRhdGEpOworb3V0X2t6YWxsb2M6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdGM0MjE1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsdGM0MjE1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbHRjNDIxNV9ncm91cCk7CisKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0YzQyMTVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGludCBraW5kLAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KKwkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCisKKwkJLyoKKwkJICogUmVnaXN0ZXIgMHgwMSBiaXQgYjcgaXMgcmVzZXJ2ZWQsIGV4cGVjdCAwCisJCSAqIFJlZ2lzdGVyIDB4MDMgYml0IGI2IGFuZCBiNyBhcmUgcmVzZXJ2ZWQsIGV4cGVjdCAwCisJCSAqLworCQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDIxNV9BTEVSVCk7CisJCWlmICh2IDwgMCB8fCAodiAmICgxIDw8IDcpKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9ERVY7CisKKwkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfRkFVTFQpOworCQlpZiAodiA8IDAgfHwgKHYgJiAoKDEgPDwgNikgfCAoMSA8PCA3KSkpICE9IDApCisJCQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3RybGNweShpbmZvLT50eXBlLCAibHRjNDIxNSIsIEkyQ19OQU1FX1NJWkUpOworCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJsdGM0MjE1ICVzIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAorCQkJa2luZCA8IDAgPyAicHJvYmVkIiA6ICJmb3JjZWQiLAorCQkJY2xpZW50LT5hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjNDIxNV9pZFtdID0geworCXsgImx0YzQyMTUiLCBsdGM0MjE1IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyMTVfaWQpOworCisvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDIxNV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJsdGM0MjE1IiwKKwl9LAorCS5wcm9iZQkJPSBsdGM0MjE1X3Byb2JlLAorCS5yZW1vdmUJCT0gbHRjNDIxNV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gbHRjNDIxNV9pZCwKKwkuZGV0ZWN0CQk9IGx0YzQyMTVfZGV0ZWN0LAorCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbHRjNDIxNV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZsdGM0MjE1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsdGM0MjE1X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmbHRjNDIxNV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJJcmEgVy4gU255ZGVyIDxpd3NAb3Zyby5jYWx0ZWNoLmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTFRDNDIxNSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQobHRjNDIxNV9pbml0KTsKK21vZHVsZV9leGl0KGx0YzQyMTVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMKcmVuYW1lIHRvIGRyaXZlcnMvaHdtb24vcGNmODU5MS5jCmluZGV4IDE2Y2UzZTEuLjFkN2ZmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1OTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PgotICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoIAorICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoCiAgICAgdGhlIGhlbHAgb2YgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDEsMTMgKzQxLDEzIEBACiAJIiAzID0gdHdvIGRpZmZlcmVudGlhbCBpbnB1dHNcbiIpOwogCiAvKiBUaGUgUENGODU5MSBjb250cm9sIGJ5dGUKLSAgICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMCAgCisgICAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKICAgIHwgIDAgfEFPRUZ8ICAgQUlQICAgfCAgMCB8QUlOQ3wgIEFJQ0ggICB8ICovCiAKIC8qIEFuYWxvZyBPdXRwdXQgRW5hYmxlIEZsYWcgKGFuYWxvZyBvdXRwdXQgYWN0aXZlIGlmIDEpICovCiAjZGVmaW5lIFBDRjg1OTFfQ09OVFJPTF9BT0VGCQkweDQwCi0JCQkJCQotLyogQW5hbG9nIElucHV0IFByb2dyYW1taW5nIAorCisvKiBBbmFsb2cgSW5wdXQgUHJvZ3JhbW1pbmcKICAgIDB4MDAgPSBmb3VyIHNpbmdsZSBlbmRlZCBpbnB1dHMKICAgIDB4MTAgPSB0aHJlZSBkaWZmZXJlbnRpYWwgaW5wdXRzCiAgICAweDIwID0gc2luZ2xlIGVuZGVkIGFuZCBkaWZmZXJlbnRpYWwgbWl4ZWQKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgUENGODU5MV9DT05UUk9MX0FJTkMJCTB4MDQKIAogLyogQ2hhbm5lbCBzZWxlY3Rpb24KLSAgIDB4MDAgPSBjaGFubmVsIDAgCisgICAweDAwID0gY2hhbm5lbCAwCiAgICAweDAxID0gY2hhbm5lbCAxCiAgICAweDAyID0gY2hhbm5lbCAyCiAgICAweDAzID0gY2hhbm5lbCAzICovCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG91dDBfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgCitzdGF0aWMgREVWSUNFX0FUVFIob3V0MF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X291dDBfb3VwdXQsIHNldF9vdXQwX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfb3V0MF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIob3V0MF9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCAKK3N0YXRpYyBERVZJQ0VfQVRUUihvdXQwX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIHNob3dfb3V0MF9lbmFibGUsIHNldF9vdXQwX2VuYWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y4NTkxX2F0dHJpYnV0ZXNbXSA9IHsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQotCQorCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC0yNDksOCArMjQ5LDggQEAKIAlkYXRhLT5hb3V0ID0gUENGODU5MV9JTklUX0FPVVQ7CiAKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgZGF0YS0+Y29udHJvbCwgZGF0YS0+YW91dCk7Ci0JCi0JLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiB0aGUgCisKKwkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mIHRoZQogCSAgIHByZXZpb3VzIHJlYWQgY3ljbGUuIEZMVVNIIElUISAqLwogCWkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KQEAgLTI2Nyw4ICsyNjcsOCBAQAogCQlkYXRhLT5jb250cm9sID0gKGRhdGEtPmNvbnRyb2wgJiB+UENGODU5MV9DT05UUk9MX0FJQ0hfTUFTSykKIAkJCSAgICAgIHwgY2hhbm5lbDsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBkYXRhLT5jb250cm9sKTsKLQkKLQkJLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiAKKworCQkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mCiAJCSAgIHRoZSBwcmV2aW91cyByZWFkIGN5Y2xlLiBGTFVTSCBJVCEgKi8KIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCmluZGV4IGZlYWU3NDMuLmU2NGI0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYwpAQCAtMzYsNiArMzYsNyBAQAogICAgIHc4MzYyN2VoZiAgIDEwICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAweDg4NTAgMHg4OCAgICAweDVjYTMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODYwIDB4YTEKICAgICB3ODM2MjdkaGcgICAgOSAgICAgIDUgICAgICAgNCAgICAgICAzICAgICAgMHhhMDIwIDB4YzEgICAgMHg1Y2EzCisgICAgdzgzNjY3aGcgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgMyAgICAgIDB4YTUxMCAweGMxICAgIDB4NWNhMwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTIsMTIgKzUzLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAibG03NS5oIgogCi1lbnVtIGtpbmRzIHsgdzgzNjI3ZWhmLCB3ODM2MjdkaGcgfTsKK2VudW0ga2luZHMgeyB3ODM2MjdlaGYsIHc4MzYyN2RoZywgdzgzNjY3aGcgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbZGF0YS0+c2lvX2tpbmRdICovCiBzdGF0aWMgY29uc3QgY2hhciAqIHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbXSA9IHsKIAkidzgzNjI3ZWhmIiwKIAkidzgzNjI3ZGhnIiwKKwkidzgzNjY3aGciLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGZvcmNlX2lkOwpAQCAtNzEsNiArNzMsNyBAQAogICovCiAKICNkZWZpbmUgVzgzNjI3RUhGX0xEX0hXTQkweDBiCisjZGVmaW5lIFc4MzY2N0hHX0xEX1ZJRCAJMHgwZAogCiAjZGVmaW5lIFNJT19SRUdfTERTRUwJCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCiAjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICgyIGJ5dGVzKSAqLwpAQCAtODMsNiArODYsNyBAQAogI2RlZmluZSBTSU9fVzgzNjI3RUhGX0lECTB4ODg1MAogI2RlZmluZSBTSU9fVzgzNjI3RUhHX0lECTB4ODg2MAogI2RlZmluZSBTSU9fVzgzNjI3REhHX0lECTB4YTAyMAorI2RlZmluZSBTSU9fVzgzNjY3SEdfSUQgCTB4YTUxMAogI2RlZmluZSBTSU9fSURfTUFTSwkJMHhGRkYwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjg5LDYgKzI5Myw3IEBACiAJdTggcHdtX21vZGVbNF07IC8qIDAtPkRDIHZhcmlhYmxlIHZvbHRhZ2UsIDEtPlBXTSB2YXJpYWJsZSBkdXR5IGN5Y2xlICovCiAJdTggcHdtX2VuYWJsZVs0XTsgLyogMS0+bWFudWFsCiAJCQkgICAgIDItPnRoZXJtYWwgY3J1aXNlIChhbHNvIGNhbGxlZCBTbWFydEZhbiBJKSAqLworCXU4IHB3bV9udW07CQkvKiBudW1iZXIgb2YgcHdtICovCiAJdTggcHdtWzRdOwogCXU4IHRhcmdldF90ZW1wWzRdOwogCXU4IHRvbGVyYW5jZVs0XTsKQEAgLTI5OCw2ICszMDMsOSBAQAogCiAJdTggdmlkOwogCXU4IHZybTsKKworCXU4IHRlbXAzX2Rpc2FibGU7CisJdTggaW42X3NraXA7CiB9OwogCiBzdHJ1Y3QgdzgzNjI3ZWhmX3Npb19kYXRhIHsKQEAgLTg2NiwyNSArODc0LDM3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfaW5wdXRbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heFtdID0gewogCVNFTlNPUl9BVFRSKHRlbXAxX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDFfbWF4LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4LCAwKSwKIAlTRU5TT1JfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4LAogCQkgICAgc3RvcmVfdGVtcF9tYXgsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcF9tYXgsCiAJCSAgICBzdG9yZV90ZW1wX21heCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heF9oeXN0W10gPSB7CiAJU0VOU09SX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAxX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4X2h5c3QsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAyX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcF9tYXhfaHlzdCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4X2h5c3QsCiAJCSAgICBzdG9yZV90ZW1wX21heF9oeXN0LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfYWxhcm1bXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCksCiAJU0VOU09SX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDUpLAogCVNFTlNPUl9BVFRSKHRlbXAzX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMyksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3R5cGVbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV90eXBlLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDEpLAogCVNFTlNPUl9BVFRSKHRlbXAzX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAyKSwKQEAgLTExODEsNiArMTIwMSw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmM19hcnJheXNfZmFuNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbl9udW07IGkrKykgeworCQlpZiAoKGkgPT0gNikgJiYgZGF0YS0+aW42X3NraXApCisJCQljb250aW51ZTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9pbl9pbnB1dFtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2luX21pbltpXS5kZXZfYXR0cik7CkBAIC0xMTkyLDE1ICsxMjE0LDIyIEBACiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX2RpdltpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX21pbltpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cHdtX251bTsgaSsrKSB7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtW2ldLmRldl9hdHRyKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9wd21fbW9kZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtX2VuYWJsZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGFyZ2V0X3RlbXBbaV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RvbGVyYW5jZVtpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RlbXBbaV0uZGV2X2F0dHIpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX2lucHV0W2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX21heFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9hbGFybVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF90eXBlW2ldLmRldl9hdHRyKTsKKwl9CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKQEAgLTEyMjIsNiArMTI1MSw4IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl0bXAgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkgICBXODM2MjdFSEZfUkVHX1RFTVBfQ09ORklHW2ldKTsKKwkJaWYgKChpID09IDEpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKIAkJaWYgKHRtcCAmIDB4MDEpCiAJCQl3ODM2MjdlaGZfd3JpdGVfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgVzgzNjI3RUhGX1JFR19URU1QX0NPTkZJR1tpXSwKQEAgLTEyNzIsOCArMTMwMywxNyBAQAogCWRhdGEtPm5hbWUgPSB3ODM2MjdlaGZfZGV2aWNlX25hbWVzW3Npb19kYXRhLT5raW5kXTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IERIRyBoYXMgOSAqLwotCWRhdGEtPmluX251bSA9IChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdkaGcpID8gOSA6IDEwOworCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IDYyN0RIRyBhbmQgNjY3SEcgaGF2ZSA5ICovCisJZGF0YS0+aW5fbnVtID0gKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgPyAxMCA6IDk7CisJLyogNjY3SEcgaGFzIDMgcHdtcyAqLworCWRhdGEtPnB3bV9udW0gPSAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpID8gMyA6IDQ7CisKKwkvKiBDaGVjayB0ZW1wMyBjb25maWd1cmF0aW9uIGJpdCBmb3IgNjY3SEcgKi8KKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZGF0YS0+dGVtcDNfZGlzYWJsZSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCVc4MzYyN0VIRl9SRUdfVEVNUF9DT05GSUdbMV0pICYgMHgwMTsKKwkJZGF0YS0+aW42X3NraXAgPSAhZGF0YS0+dGVtcDNfZGlzYWJsZTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJdzgzNjI3ZWhmX2luaXRfZGV2aWNlKGRhdGEpOwpAQCAtMTI4MSw0NCArMTMyMSw2NCBAQAogCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAlzdXBlcmlvX2VudGVyKHNpb19kYXRhLT5zaW9yZWcpOwogCS8qIFJlYWQgVklEIHZhbHVlICovCi0Jc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjI3RUhGX0xEX0hXTSk7Ci0JaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgewotCQkvKiBTZXQgVklEIGlucHV0IHNlbnNpYmlsaXR5IGlmIG5lZWRlZC4gSW4gdGhlb3J5IHRoZSBCSU9TCi0JCSAgIHNob3VsZCBoYXZlIHNldCBpdCwgYnV0IGluIHByYWN0aWNlIGl0J3Mgbm90IGFsd2F5cyB0aGUKLQkJICAgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcgYmVjYXVzZSB0aGUKLQkJICAgVzgzNjI3REhHIGlzIG1vcmUgY29tcGxleCBpbiB0aGlzIHJlc3BlY3QuICovCi0JCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKLQkJCWVuX3ZybTEwID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywKLQkJCQkJICAgICAgIFNJT19SRUdfRU5fVlJNMTApOwotCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgewotCQkJCWRldl93YXJuKGRldiwgIlNldHRpbmcgVklEIGlucHV0IHZvbHRhZ2UgdG8gIgotCQkJCQkgIlRUTFxuIik7Ci0JCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfRU5fVlJNMTAsCi0JCQkJCSAgICAgZW5fdnJtMTAgJiB+MHgwOCk7Ci0JCQl9IGVsc2UgaWYgKCEoZW5fdnJtMTAgJiAweDA4KSAmJiBkYXRhLT52cm0gPT0gMTAwKSB7Ci0JCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgdm9sdGFnZSB0byAiCi0JCQkJCSAiVlJNMTBcbiIpOwotCQkJCXN1cGVyaW9fb3V0YihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX0VOX1ZSTTEwLAotCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7Ci0JCQl9Ci0JCX0KLQotCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX1ZJRF9EQVRBKTsKLQkJaWYgKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgLyogNiBWSUQgcGlucyBvbmx5ICovCi0JCQlkYXRhLT52aWQgJj0gMHgzZjsKLQorCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2NjdoZykgeworCQkvKiBXODM2NjdIRyBoYXMgZGlmZmVyZW50IHBpbnMgZm9yIFZJRCBpbnB1dCBhbmQgb3V0cHV0LCBzbworCQl3ZSBjYW4gZ2V0IHRoZSBWSUQgaW5wdXQgdmFsdWVzIGRpcmVjdGx5IGF0IGxvZ2ljYWwgZGV2aWNlIEQKKwkJMHhlMy4gKi8KKwkJc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjY3SEdfTERfVklEKTsKKwkJZGF0YS0+dmlkID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywgMHhlMyk7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGV4aXRfcmVsZWFzZTsKIAl9IGVsc2UgewotCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgotCQkJICJhdmFpbGFibGVcbiIpOworCQlzdXBlcmlvX3NlbGVjdChzaW9fZGF0YS0+c2lvcmVnLCBXODM2MjdFSEZfTERfSFdNKTsKKwkJaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgeworCQkJLyogU2V0IFZJRCBpbnB1dCBzZW5zaWJpbGl0eSBpZiBuZWVkZWQuIEluIHRoZW9yeSB0aGUKKwkJCSAgIEJJT1Mgc2hvdWxkIGhhdmUgc2V0IGl0LCBidXQgaW4gcHJhY3RpY2UgaXQncyBub3QKKwkJCSAgIGFsd2F5cyB0aGUgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcKKwkJCSAgIGJlY2F1c2UgdGhlIFc4MzYyN0RIRyBpcyBtb3JlIGNvbXBsZXggaW4gdGhpcworCQkJICAgcmVzcGVjdC4gKi8KKwkJCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKKwkJCQllbl92cm0xMCA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgICAgU0lPX1JFR19FTl9WUk0xMCk7CisJCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgeworCQkJCQlkZXZfd2FybihkZXYsICJTZXR0aW5nIFZJRCBpbnB1dCAiCisJCQkJCQkgInZvbHRhZ2UgdG8gVFRMXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwICYgfjB4MDgpOworCQkJCX0gZWxzZSBpZiAoIShlbl92cm0xMCAmIDB4MDgpCisJCQkJCSAgICYmIGRhdGEtPnZybSA9PSAxMDApIHsKKwkJCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgIgorCQkJCQkJICJ2b2x0YWdlIHRvIFZSTTEwXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7CisJCQkJfQorCQkJfQorCisJCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLAorCQkJCQkJU0lPX1JFR19WSURfREFUQSk7CisJCQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjI3ZWhmKSAvKiA2IFZJRCBwaW5zIG9ubHkgKi8KKwkJCQlkYXRhLT52aWQgJj0gMHgzZjsKKworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3JlbGVhc2U7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgorCQkJCSAiYXZhaWxhYmxlXG4iKTsKKwkJfQogCX0KIAogCS8qIGZhbjQgYW5kIGZhbjUgc2hhcmUgc29tZSBwaW5zIHdpdGggdGhlIEdQSU8gYW5kIHNlcmlhbCBmbGFzaCAqLwotCi0JZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjQpICYgMHgyOwotCWZhbjRwaW4gPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4NjsKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHgyMDsKKwkJZmFuNHBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHg0MDsKKwl9IGVsc2UgeworCQlmYW41cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI0KSAmIDB4MDIpOworCQlmYW40cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4MDYpOworCX0KIAlzdXBlcmlvX2V4aXQoc2lvX2RhdGEtPnNpb3JlZyk7CiAKIAkvKiBJdCBsb29rcyBsaWtlIGZhbjQgYW5kIGZhbjUgcGlucyBjYW4gYmUgYWx0ZXJuYXRpdmVseSB1c2VkCkBAIC0xMzI5LDkgKzEzODksOSBAQAogCiAJZGF0YS0+aGFzX2ZhbiA9IDB4MDc7IC8qIGZhbjEsIGZhbjIgYW5kIGZhbjMgKi8KIAlpID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNjI3RUhGX1JFR19GQU5ESVYxKTsKLQlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgKCFmYW40cGluKSkKKwlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgZmFuNHBpbikKIAkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCAzKTsKLQlpZiAoIShpICYgKDEgPDwgMSkpICYmICghZmFuNXBpbikpCisJaWYgKCEoaSAmICgxIDw8IDEpKSAmJiBmYW41cGluKQogCQlkYXRhLT5oYXNfZmFuIHw9ICgxIDw8IDQpOwogCiAJLyogUmVhZCBmYW4gY2xvY2sgZGl2aWRlcnMgaW1tZWRpYXRlbHkgKi8KQEAgLTEzNDQsMTQgKzE0MDQsMTYgQEAKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CiAKIAkvKiBpZiBmYW40IGlzIGVuYWJsZWQgY3JlYXRlIHRoZSBzZjMgZmlsZXMgZm9yIGl0ICovCi0JaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkKKwlpZiAoKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkgJiYgZGF0YS0+cHdtX251bSA+PSA0KQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5c19mYW40KTsgaSsrKSB7CiAJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5fbnVtOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluX251bTsgaSsrKSB7CisJCWlmICgoaSA9PSA2KSAmJiBkYXRhLT5pbjZfc2tpcCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpKQogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9hbGFybVtpXS5kZXZfYXR0cikpCkBAIC0xMzYwLDYgKzE0MjIsNyBAQAogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9tYXhbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGkpKSB7CkBAIC0xMzcyLDcgKzE0MzUsNyBAQAogCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX2Zhbl9taW5baV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwotCQkJaWYgKGkgPCA0ICYmIC8qIHc4MzYyN2VoZiBvbmx5IGhhcyA0IHB3bSAqLworCQkJaWYgKGkgPCBkYXRhLT5wd21fbnVtICYmCiAJCQkJKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX3B3bVtpXS5kZXZfYXR0cikpCiAJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCkBAIC0xMzg3LDkgKzE0NTAsMjEgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcFtpXS5kZXZfYXR0cikpKQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9pbnB1dFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfbWF4W2ldLmRldl9hdHRyKSkKKwkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV90ZW1wX3R5cGVbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOwogCWlmIChlcnIpCkBAIC0xNDQyLDYgKzE1MTcsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjI3RUhGW10gPSAiVzgzNjI3RUhGIjsKIAlzdGF0aWMgY29uc3QgY2hhciBfX2luaXRkYXRhIHNpb19uYW1lX1c4MzYyN0VIR1tdID0gIlc4MzYyN0VIRyI7CiAJc3RhdGljIGNvbnN0IGNoYXIgX19pbml0ZGF0YSBzaW9fbmFtZV9XODM2MjdESEdbXSA9ICJXODM2MjdESEciOworCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjY3SEdbXSA9ICJXODM2NjdIRyI7CiAKIAl1MTYgdmFsOwogCWNvbnN0IGNoYXIgKnNpb19uYW1lOwpAQCAtMTQ2Niw2ICsxNTQyLDEwIEBACiAJCXNpb19kYXRhLT5raW5kID0gdzgzNjI3ZGhnOwogCQlzaW9fbmFtZSA9IHNpb19uYW1lX1c4MzYyN0RIRzsKIAkJYnJlYWs7CisJY2FzZSBTSU9fVzgzNjY3SEdfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gdzgzNjY3aGc7CisJCXNpb19uYW1lID0gc2lvX25hbWVfVzgzNjY3SEc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh2YWwgIT0gMHhmZmZmKQogCQkJcHJfZGVidWcoRFJWTkFNRSAiOiB1bnN1cHBvcnRlZCBjaGlwIElEOiAweCUwNHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDIzMDIzOGQuLjEwNDExODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIC8qIEk4MDEgU01CdXMgYWRkcmVzcyBvZmZzZXRzICovCiAjZGVmaW5lIFNNQkhTVFNUUwkoMCArIGk4MDFfc21iYSkKQEAgLTYxNiwxMCArNjE3LDgxIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5wdXRfYXBhbmVsX2luaXQodm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITUQgfHwgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITURfTU9EVUxFCitzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTggdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcjsKKwljb25zdCBjaGFyICppMmNfdHlwZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8gX19kZXZpbml0ZGF0YSBkbWlfZGV2aWNlc1tdID0geworCXsgIlN5bGV1cyIsIERNSV9ERVZfVFlQRV9PVEhFUiwgMHg3MywgImZzY3N5bCIgfSwKKwl7ICJIZXJtZXMiLCBETUlfREVWX1RZUEVfT1RIRVIsIDB4NzMsICJmc2NoZXIiIH0sCisJeyAiSGFkZXMiLCAgRE1JX0RFVl9UWVBFX09USEVSLCAweDczLCAiZnNjaGRzIiB9LAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZSh1OCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCWludCBpOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1pX2RldmljZXMpOyBpKyspIHsKKwkJLyogJiB+MHg4MCwgaWdub3JlIGVuYWJsZWQvZGlzYWJsZWQgYml0ICovCisJCWlmICgodHlwZSAmIH4weDgwKSAhPSBkbWlfZGV2aWNlc1tpXS50eXBlKQorCQkJY29udGludWU7CisJCWlmIChzdHJjbXAobmFtZSwgZG1pX2RldmljZXNbaV0ubmFtZSkpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJaW5mby5hZGRyID0gZG1pX2RldmljZXNbaV0uaTJjX2FkZHI7CisJCXN0cmxjcHkoaW5mby50eXBlLCBkbWlfZGV2aWNlc1tpXS5pMmNfdHlwZSwgSTJDX05BTUVfU0laRSk7CisJCWkyY19uZXdfZGV2aWNlKGFkYXAsICZpbmZvKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBXZSB1c2Ugb3VyIG93biBmdW5jdGlvbiB0byBjaGVjayBmb3Igb25ib2FyZCBkZXZpY2VzIGluc3RlYWQgb2YKKyAgIGRtaV9maW5kX2RldmljZSgpIGFzIHNvbWUgYnVnZ3kgQklPUydzIGhhdmUgdGhlIGRldmljZXMgd2UgYXJlIGludGVyZXN0ZWQKKyAgIGluIG1hcmtlZCBhcyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZXMoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLAorCQkJCQkJdm9pZCAqYWRhcCkKK3sKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAoZG0tPnR5cGUgIT0gMTApCisJCXJldHVybjsKKworCWNvdW50ID0gKGRtLT5sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRtaV9oZWFkZXIpKSAvIDI7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY29uc3QgdTggKmQgPSAoY2hhciAqKShkbSArIDEpICsgKGkgKiAyKTsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICgoY2hhciAqKSBkbSkgKyBkbS0+bGVuZ3RoOworCQl1OCB0eXBlID0gZFswXTsKKwkJdTggcyA9IGRbMV07CisKKwkJaWYgKCFzKQorCQkJY29udGludWU7CisJCXMtLTsKKwkJd2hpbGUgKHMgPiAwICYmIG5hbWVbMF0pIHsKKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCXMtLTsKKwkJfQorCQlpZiAobmFtZVswXSA9PSAwKSAvKiBCb2d1cyBzdHJpbmcgcmVmZXJlbmNlICovCisJCQljb250aW51ZTsKKworCQlkbWlfY2hlY2tfb25ib2FyZF9kZXZpY2UodHlwZSwgbmFtZSwgYWRhcCk7CisJfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyOworI2lmIGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EIHx8IGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EX01PRFVMRQorCWNvbnN0IGNoYXIgKnZlbmRvcjsKKyNlbmRpZgogCiAJSTgwMV9kZXYgPSBkZXY7CiAJaTgwMV9mZWF0dXJlcyA9IDA7CkBAIC03MTIsNiArNzg0LDExIEBACiAJCWkyY19uZXdfZGV2aWNlKCZpODAxX2FkYXB0ZXIsICZpbmZvKTsKIAl9CiAjZW5kaWYKKyNpZiBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCB8fCBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRF9NT0RVTEUKKwl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRU5ET1IpOworCWlmICh2ZW5kb3IgJiYgIXN0cmNtcCh2ZW5kb3IsICJGVUpJVFNVIFNJRU1FTlMiKSkKKwkJZG1pX3dhbGsoZG1pX2NoZWNrX29uYm9hcmRfZGV2aWNlcywgJmk4MDFfYWRhcHRlcik7CisjZW5kaWYKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwppbmRleCAyYjg0N2Q4Li4yNmJmMzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJLyogUmVhZCBhZ2FpbiB0byBhbGxvdyByZWdpc3RlciB0byBzdGFiaWxpc2UgKi8KIAkJaTJjLT5pbnRlcnJ1cHQgPSByZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmkyYy0+cXVldWUpOworCQl3YWtlX3VwKCZpMmMtPnF1ZXVlKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTE1LDEzICsxMTUsMTAgQEAKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwogCX0gZWxzZSB7CiAJCS8qIEludGVycnVwdCBtb2RlICovCi0JCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCXJlc3VsdCA9IHdhaXRfZXZlbnRfdGltZW91dChpMmMtPnF1ZXVlLAogCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQpOwogCi0JCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgewotCQkJcHJfZGVidWcoIkkyQzogd2FpdCBpbnRlcnJ1cHRlZFxuIik7Ci0JCQl3cml0ZWNjcihpMmMsIDApOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKKwkJaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKIAkJCXByX2RlYnVnKCJJMkM6IHdhaXQgdGltZW91dFxuIik7CiAJCQl3cml0ZWNjcihpMmMsIDApOwogCQkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IGM4MDMxMmMuLjhmOGM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtNjQsMTkgKzY0LDYgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBzb29uLiBVc2UKIAkgIGRyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgaW5zdGVhZC4KIAotY29uZmlnIFNFTlNPUlNfUENGODU5MQotCXRyaXN0YXRlICJQaGlsaXBzIFBDRjg1OTEiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTkxIGNoaXBzLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBwY2Y4NTkxLgotCi0JICBUaGVzZSBkZXZpY2VzIGFyZSBoYXJkIHRvIGRldGVjdCBhbmQgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KLQkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNFTlNPUlNfTUFYNjg3NQogCXRyaXN0YXRlICJNYXhpbSBNQVg2ODc1IFBvd2VyIHN1cHBseSBzdXBlcnZpc29yIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCmluZGV4IGQxNDJmMjMuLjU1YTM3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfU0VOU09SU19QQ0E5NTM5KQkrPSBwY2E5NTM5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1NzQpCSs9IHBjZjg1NzQubwogb2JqLSQoQ09ORklHX1BDRjg1NzUpCQkrPSBwY2Y4NTc1Lm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggNjQwYzk5Mi4uY2YwNjQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC0yMjIsNyArMjIyLDggQEAKIAogY29uZmlnIElERV9HRU5FUklDCiAJdHJpc3RhdGUgImdlbmVyaWMvZGVmYXVsdCBJREUgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUxQSEEgfHwgWDg2IHx8IElBNjQgfHwgTTMyUiB8fCBNSVBTCisJZGVwZW5kcyBvbiBBTFBIQSB8fCBYODYgfHwgSUE2NCB8fCBNMzJSIHx8IE1JUFMgfHwgQVJDSF9SUEMgfHwgQVJDSF9TSEFSSworCWRlZmF1bHQgQVJNICYmIChBUkNIX1JQQyB8fCBBUkNIX1NIQVJLKQogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGdlbmVyaWMgSURFIGRyaXZlci4gIFRoaXMgZHJpdmVyIGF0dGFjaGVzIHRvIHRoZQogCSAgZml4ZWQgbGVnYWN5IHBvcnRzIChlLmcuIG9uIFBDcyAweDFmMC8weDE3MCwgMHgxZTgvMHgxNjggYW5kCkBAIC02ODAsNyArNjgxLDcgQEAKICMgVE9ETzogQkxLX0RFVl9JREVETUFfUENJIC0+IEJMS19ERVZfSURFRE1BX1NGRgogY29uZmlnIEJMS19ERVZfSURFX1BNQUMKIAl0cmlzdGF0ZSAiUG93ZXJNYWMgb24tYm9hcmQgSURFIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBJREU9eQorCWRlcGVuZHMgb24gUFBDX1BNQUMKIAlzZWxlY3QgSURFX1RJTUlOR1MKIAlzZWxlY3QgQkxLX0RFVl9JREVETUFfUENJCiAJaGVscApAQCAtNzMxLDExICs3MzIsNiBAQAogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfQVQ5MSAmJiAhQVJDSF9BVDkxUk05MjAwICYmICFBUkNIX0FUOTFYNDAKIAlzZWxlY3QgSURFX1RJTUlOR1MKIAotY29uZmlnIElERV9BUk0KLQl0cmlzdGF0ZSAiQVJNIElERSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJNICYmIChBUkNIX1JQQyB8fCBBUkNIX1NIQVJLKQotCWRlZmF1bHQgeQotCiBjb25maWcgQkxLX0RFVl9JREVfSUNTSURFCiAJdHJpc3RhdGUgIklDUyBJREUgaW50ZXJmYWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9BQ09STgpAQCAtNzc0LDI4ICs3NzAsMjEgQEAKIAkgIFRoaXMgaW5jbHVkZXMgb24tYm9hcmQgSURFIGludGVyZmFjZXMgb24gc29tZSBBbWlnYSBtb2RlbHMgKEE2MDAsCiAJICBBMTIwMCwgQTQwMDAsIGFuZCBBNDAwMFQpLCBhbmQgSURFIGludGVyZmFjZXMgb24gdGhlIFpvcnJvIGV4cGFuc2lvbgogCSAgYnVzIChNLVRlY2ggRS1NYXRyaXggNTMwIGV4cGFuc2lvbiBjYXJkKS4KLQkgIFNheSBZIGlmIHlvdSBoYXZlIGFuIEFtaWdhIHdpdGggYSBHYXlsZSBJREUgaW50ZXJmYWNlIGFuZCB3YW50IHRvIHVzZQotCSAgSURFIGRldmljZXMgKGhhcmQgZGlza3MsIENELVJPTSBkcml2ZXMsIGV0Yy4pIHRoYXQgYXJlIGNvbm5lY3RlZCB0bwotCSAgaXQuCi0JICBOb3RlIHRoYXQgeW91IGFsc28gaGF2ZSB0byBlbmFibGUgWm9ycm8gYnVzIHN1cHBvcnQgaWYgeW91IHdhbnQgdG8KLQkgIHVzZSBHYXlsZSBJREUgaW50ZXJmYWNlcyBvbiB0aGUgWm9ycm8gZXhwYW5zaW9uIGJ1cy4KIAotY29uZmlnIEJMS19ERVZfSURFRE9VQkxFUgotCWJvb2wgIkFtaWdhIElERSBEb3VibGVyIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0dBWUxFICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgZmVhdHVyZSBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgc28tY2FsbGVkIGBJREUgZG91YmxlcnMnIChtYWRlCisJICBJdCBhbHNvIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBzby1jYWxsZWQgYElERSBkb3VibGVycycgKG1hZGUKIAkgIGJ5IHZhcmlvdXMgbWFudWZhY3R1cmVycywgZS5nLiBFeWV0ZWNoKSB0aGF0IGNhbiBiZSBjb25uZWN0ZWQgdG8KIAkgIHRoZSBvbi1ib2FyZCBJREUgaW50ZXJmYWNlIG9mIHNvbWUgQW1pZ2EgbW9kZWxzLiBVc2luZyBzdWNoIGFuIElERQogCSAgZG91YmxlciwgeW91IGNhbiBjb25uZWN0IHVwIHRvIGZvdXIgaW5zdGVhZCBvZiB0d28gSURFIGRldmljZXMgdG8KLQkgIHRoZSBBbWlnYSdzIG9uLWJvYXJkIElERSBpbnRlcmZhY2UuCi0KLQkgIE5vdGUgdGhhdCB0aGUgbm9ybWFsIEFtaWdhIEdheWxlIElERSBkcml2ZXIgbWF5IG5vdCB3b3JrIGNvcnJlY3RseQotCSAgaWYgeW91IGhhdmUgYW4gSURFIGRvdWJsZXIgYW5kIGRvbid0IGVuYWJsZSB0aGlzIGZlYXR1cmUhCi0KLQkgIFNheSBZIGlmIHlvdSBoYXZlIGFuIElERSBkb3VibGVyLiAgVGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBhdCBrZXJuZWwKKwkgIHRoZSBBbWlnYSdzIG9uLWJvYXJkIElERSBpbnRlcmZhY2UuIFRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYXQga2VybmVsCiAJICBydW50aW1lIHVzaW5nIHRoZSAiZ2F5bGUuZG91YmxlciIga2VybmVsIGJvb3QgcGFyYW1ldGVyLgogCisJICBTYXkgWSBpZiB5b3UgaGF2ZSBhbiBBbWlnYSB3aXRoIGEgR2F5bGUgSURFIGludGVyZmFjZSBhbmQgd2FudCB0byB1c2UKKwkgIElERSBkZXZpY2VzIChoYXJkIGRpc2tzLCBDRC1ST00gZHJpdmVzLCBldGMuKSB0aGF0IGFyZSBjb25uZWN0ZWQgdG8KKwkgIGl0LgorCisJICBOb3RlIHRoYXQgeW91IGFsc28gaGF2ZSB0byBlbmFibGUgWm9ycm8gYnVzIHN1cHBvcnQgaWYgeW91IHdhbnQgdG8KKwkgIHVzZSBHYXlsZSBJREUgaW50ZXJmYWNlcyBvbiB0aGUgWm9ycm8gZXhwYW5zaW9uIGJ1cy4KKwogY29uZmlnIEJMS19ERVZfQlVEREhBCiAJdHJpc3RhdGUgIkJ1ZGRoYS9DYXR3ZWFzZWwvWC1TdXJmIElERSBpbnRlcmZhY2Ugc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFpPUlJPICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvTWFrZWZpbGUgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQppbmRleCA5YjRiYmUxLi44MWRmOTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lkZS9NYWtlZmlsZQpAQCAtMjEsOCArMjEsNiBAQAogCiBvYmotJChDT05GSUdfSURFKQkJCSs9IGlkZS1jb3JlLm8KIAotb2JqLSQoQ09ORklHX0lERV9BUk0pCQkJKz0gaWRlX2FybS5vCi0KIG9iai0kKENPTkZJR19CTEtfREVWX0FMSTE0WFgpCQkrPSBhbGkxNHh4Lm8KIG9iai0kKENPTkZJR19CTEtfREVWX1VNQzg2NzIpCQkrPSB1bWM4NjcyLm8KIG9iai0kKENPTkZJR19CTEtfREVWX0RUQzIyNzgpCQkrPSBkdGMyMjc4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCmluZGV4IGQzNTEzYjYuLjUzN2RhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwpAQCAtMTg5LDE5ICsxODksMjAgQEAKIH0KIAogLyoqCi0gKglhbGkxNXgzX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCisgKglhbGlfZG1hX2NoZWNrCS0JRE1BIGNoZWNrCiAgKglAZHJpdmU6CXRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglSZXR1cm5zIDEgaWYgdGhlIERNQSBjYW5ub3QgYmUgcGVyZm9ybWVkLCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBhbGkxNXgzX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGFsaV9kbWFfY2hlY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlmIChtNTIyOV9yZXZpc2lvbiA8IDB4QzIgJiYgZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7Ci0JCWlmIChycV9kYXRhX2Rpcihkcml2ZS0+aHdpZi0+cnEpKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJCXJldHVybiAxOwkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCiAJfQotCXJldHVybiBpZGVfZG1hX3NldHVwKGRyaXZlKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC01MDIsMTMgKzUwMywxMyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGFsaV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IGFsaTE1eDNfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKKwkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX2NoZWNrCQk9IGFsaV9kbWFfY2hlY2ssCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMgYi9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCmluZGV4IDFiYjUwZjQuLjhlZGE1NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJc2V0X3NtY190aW1pbmdzKGNoaXBzZWxlY3QsIGN5Y2xlLCBzZXR1cCwgcHVsc2UsIGRhdGFfZmxvYXQsIHVzZV9pb3JkeSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdDkxX2lkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtMTU2LDExICsxNTYsMTEgQEAKIAlsZW4rKzsKIAogCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwotCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKSBpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCXJlYWRzdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKIAlsZWF2ZV8xNmJpdChjaGlwc2VsZWN0LCBtb2RlKTsKIH0KIAotc3RhdGljIHZvaWQgYXQ5MV9pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdDkxX2lkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0xNzEsNyArMTcxLDcgQEAKIAlwZGJnKCJjcyAldSBidWYgJXAgbGVuICVkXG4iLCBjaGlwc2VsZWN0LCAgYnVmLCBsZW4pOwogCiAJZW50ZXJfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7Ci0JX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKSBpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCXdyaXRlc3coKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiAJbGVhdmVfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7CiB9CiAKQEAgLTE4NSw5MSArMTg1LDc3IEBACiAJd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJdTggSElISSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQlhdDkxX2lkZV9vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgJmRhdGEsIDIpOwotCX0KLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCWlkZV9tbV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJaWRlX21tX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQlpZGVfbW1fb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCWlkZV9tbV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LCBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCWF0OTFfaWRlX2lucHV0X2RhdGEoZHJpdmUsIE5VTEwsICZkYXRhLCAyKTsKLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCWlkZV9tbV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJaWRlX21tX291dGIoQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlpZGVfbW1fb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJaWRlX21tX291dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0VSUk9SKQorCQkJdGYtPmhvYl9lcnJvciA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKQEAgLTI5NSw4ICsyODEsOSBAQAogCS5leGVjX2NvbW1hbmQJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCi0JLnNldF9pcnEJPSBpZGVfc2V0X2lycSwKKwkud3JpdGVfZGV2Y3RsCT0gaWRlX3dyaXRlX2RldmN0bCwKIAorCS5kZXZfc2VsZWN0CT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJPSBhdDkxX2lkZV90Zl9sb2FkLAogCS50Zl9yZWFkCT0gYXQ5MV9pZGVfdGZfcmVhZCwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCmluZGV4IDE1NGVjMmMuLjQ2MDEzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEpCiAKLXZvaWQgYXVpZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWlkZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdTMyIGNvdW50KQogewogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCWNoYW5fdGFiX3QgKmN0cDsKQEAgLTY4LDcgKzY4LDcgQEAKIAljdHAtPmN1cl9wdHIgPSBhdTF4eHhfZGRtYV9nZXRfbmV4dHB0cl92aXJ0KGRwKTsKIH0KIAotdm9pZCBhdWlkZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWlkZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAljaGFuX3RhYl90ICpjdHA7CkBAIC04NiwxMyArODYsMTMgQEAKIAljdHAtPmN1cl9wdHIgPSBhdTF4eHhfZGRtYV9nZXRfbmV4dHB0cl92aXJ0KGRwKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdTF4eHhfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJYXVpZGVfaW5zdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBhdTF4eHhfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBhdTF4eHhfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlhdWlkZV9vdXRzdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwpAQCAtMjA5LDIzICsyMDksMTcgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQotc3RhdGljIGludCBhdWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGF1aWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpbnQgaSwgaXN3cml0ZSwgY291bnQgPSAwOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpID0gY21kLT5zZ19uZW50cywgY291bnQgPSAwOworCWludCBpc3dyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpc3dyaXRlID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSk7CiAJLyogU2F2ZSBmb3IgaW50ZXJydXB0IGNvbnRleHQgKi8KIAlhaHdpZi0+ZHJpdmUgPSBkcml2ZTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBmaWxsIHRoZSBkZXNjcmlwdG9ycyAqLwogCXNnID0gaHdpZi0+c2dfdGFibGU7CiAJd2hpbGUgKGkgJiYgc2dfZG1hX2xlbihzZykpIHsKQEAgLTI0Miw3ICsyMzYsNyBAQAogCQkJaWYgKCsrY291bnQgPj0gUFJEX0VOVFJJRVMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRhYmxlIHRvbyBzbWFsbFxuIiwKIAkJCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCQkJCXJldHVybiAwOwogCQkJfQogCiAJCQkvKiBMZXRzIGVuYWJsZSBpbnRyIGZvciB0aGUgbGFzdCBkZXNjcmlwdG9yIG9ubHkgKi8KQEAgLTI3OCwyMSArMjcyLDExIEBACiAJaWYgKGNvdW50KQogCQlyZXR1cm4gMTsKIAotIHVzZV9waW9faW5zdGVhZDoKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gMDsgLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKIHN0YXRpYyBpbnQgYXVpZGVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKGh3aWYtPnNnX25lbnRzKSB7Ci0JCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAwOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0zMDEsMjMgKzI4NSwxMSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGF1aWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCitzdGF0aWMgaW50IGF1aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JLyogaXNzdWUgY21kIHRvIGRyaXZlICovCi0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwKLQkJCSAgICAoMipXQUlUX0NNRCksIE5VTEwpOwotfQotCi1zdGF0aWMgaW50IGF1aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCi0JaWYgKCFhdWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChhdWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKQogCQlyZXR1cm4gMTsKLQl9CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzQyLDE2ICszMTQsMTEgQEAKIAogc3RhdGljIHZvaWQgYXVpZGVfZGRtYV90eF9jYWxsYmFjayhpbnQgaXJxLCB2b2lkICpwYXJhbSkKIHsKLQlfYXVpZGVfaHdpZiAqYWh3aWYgPSAoX2F1aWRlX2h3aWYqKXBhcmFtOwotCWFod2lmLT5kcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIH0KIAogc3RhdGljIHZvaWQgYXVpZGVfZGRtYV9yeF9jYWxsYmFjayhpbnQgaXJxLCB2b2lkICpwYXJhbSkKIHsKLQlfYXVpZGVfaHdpZiAqYWh3aWYgPSAoX2F1aWRlX2h3aWYqKXBhcmFtOwotCWFod2lmLT5kcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIH0KLQogI2VuZGlmIC8qIGVuZCBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BICovCiAKIHN0YXRpYyB2b2lkIGF1aWRlX2luaXRfZGJkbWFfZGV2KGRiZGV2X3RhYl90ICpkZXYsIHUzMiBkZXZfaWQsIHUzMiB0c2l6ZSwgdTMyIGRldndpZHRoLCB1MzIgZmxhZ3MpCkBAIC0zNjksMTIgKzMzNiwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBhdTF4eHhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGF1aWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGF1aWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGF1aWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGF1aWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBhdWlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gYXVpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogfTsKIAogc3RhdGljIGludCBhdWlkZV9kZG1hX2luaXQoaWRlX2h3aWZfdCAqaHdpZiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCkBAIC01MDIsOSArNDY3LDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2J1ZGRoYS5jIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKaW5kZXggYzVhM2M5ZS4uZDAyOGY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYnVkZGhhLmMKKysrIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKQEAgLTE0Myw2ICsxNDMsMTEgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYnVkZGhhX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKK307CisKICAgICAvKgogICAgICAqICBQcm9iZSBmb3IgYSBCdWRkaGEgb3IgQ2F0d2Vhc2VsIElERSBpbnRlcmZhY2UKICAgICAgKi8KQEAgLTE3MiwxMCArMTc3LDYgQEAKIAkJCiAJCWJvYXJkID0gei0+cmVzb3VyY2Uuc3RhcnQ7CiAKLS8qCi0gKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtbWlvIHYvcyBpb21pbyB0cmFuc3BvcnRzLgotICovCi0KIAkJaWYodHlwZSAhPSBCT0FSRF9YU1VSRikgewogCQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYm9hcmQrQlVEREhBX0JBU0UxLCAweDgwMCwgIklERSIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjI0LDcgKzIyNSw3IEBACiAJCQlod3NbaV0gPSAmaHdbaV07CiAJCX0KIAotCQlpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJaWRlX2hvc3RfYWRkKCZidWRkaGFfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCBhZWVlMDM2Li44MGI3NzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzE4LDcgKzMxOCw2IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXU4IGRtYV9zdGF0ID0gMCwgZG1hX2NtZCA9IDA7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkvKiBnZXQgRE1BIHN0YXR1cyAqLwogCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogCS8qIHJlYWQgRE1BIGNvbW1hbmQgc3RhdGUgKi8KQEAgLTMyNyw4ICszMjYsNiBAQAogCW91dGIoZG1hX2NtZCAmIH4xLCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KIAlvdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7Ci0JLyogYW5kIGZyZWUgYW55IERNQSByZXNvdXJjZXMgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwogfQpAQCAtMzc5LDM2ICszNzYsMzMgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjR4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gY21kNjR4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBjbWQ2NDZfcmV2MV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBjbWQ2NDZfMV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBjbWQ2NDhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gY21kNjQ4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBjbWQ2NDhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IDhlOGIzNWEuLjQwYmYwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC05Miw4ICs5Miw3IEBACiAJCWlmICgobWF0ZWlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiA0KSAmJgogCQkgICAgKG1hdGVpZFtBVEFfSURfVURNQV9NT0RFU10gJiA3KSkKIAkJCWdvdG8gb3V0OwotCQlpZiAoKG1hdGVpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgJiYKLQkJICAgIChtYXRlaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDcpKQorCQlpZiAobWF0ZWlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiA3KQogCQkJbWFzayA9IDA7CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTM2LmMgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwppbmRleCA3YTYyZGI3Li4zNTNhMzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MzYuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwpAQCAtMjMxLDEyICsyMzEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY3M1NTM2X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBjczU1MzZfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNzNTUzNl9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBjczU1MzZfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKaW5kZXggYmFjYjExOS4uZjE1M2I5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAkucG9ydF9vcHMJCT0gJmRlbGtpbl9jYl9wb3J0X29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfCBJREVfSEZMQUdfVU5NQVNLX0lSUVMgfAogCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogCS5pbml0X2NoaXBzZXQJCT0gZGVsa2luX2NiX2luaXRfY2hpcHNldCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2R0YzIyNzguYyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwppbmRleCA2ODliMmU0Li5jNmIxMzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9kdGMyMjc4LmMKKysrIGIvZHJpdmVycy9pZGUvZHRjMjI3OC5jCkBAIC0xMDAsNyArMTAwLDggQEAKIAkJCQkgIElERV9IRkxBR19JT18zMkJJVCB8CiAJCQkJICAvKiBkaXNhbGxvdyAtPmlvXzMyYml0IGNoYW5nZXMgKi8KIAkJCQkgIElERV9IRkxBR19OT19JT18zMkJJVCB8Ci0JCQkJICBJREVfSEZMQUdfTk9fRE1BLAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSB8CisJCQkJICBJREVfSEZMQUdfRFRDMjI3OCwKIAkucGlvX21hc2sJCT0gQVRBX1BJTzQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYyBiL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCmluZGV4IGE2MzhlOTUuLmFmYTJhZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2ZhbGNvbmlkZS5jCkBAIC00MCwyOSArNDAsNDggQEAKICAgICAgKiAgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBkcml2ZXJzLgogICAgICAqLwogCi1pbnQgZmFsY29uaWRlX2ludHJfbG9jazsKLUVYUE9SVF9TWU1CT0woZmFsY29uaWRlX2ludHJfbG9jayk7CitzdGF0aWMgaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7CiAKLXN0YXRpYyB2b2lkIGZhbGNvbmlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgZmFsY29uaWRlX3JlbGVhc2VfbG9jayh2b2lkKQoreworCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVnXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJZmFsY29uaWRlX2ludHJfbG9jayA9IDA7CisJc3RkbWFfcmVsZWFzZSgpOworfQorCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfZ2V0X2xvY2soaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB2b2lkICpkYXRhKQoreworCWlmIChmYWxjb25pZGVfaW50cl9sb2NrID09IDApIHsKKwkJaWYgKGluX2ludGVycnVwdCgpID4gMCkKKwkJCXBhbmljKCJGYWxjb24gSURFIGhhc24ndCBTVC1ETUEgbG9jayBpbiBpbnRlcnJ1cHQiKTsKKwkJc3RkbWFfbG9jayhoYW5kbGVyLCBkYXRhKTsKKwkJZmFsY29uaWRlX2ludHJfbG9jayA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CiAKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIGNtZCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykpCiAJCXJldHVybiBpbnN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCWluc3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19pbnN3X3N3YXB3KCh1MTYgKilkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIGZhbGNvbmlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGZhbGNvbmlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gb3V0c3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0Jb3V0c3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19vdXRzd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCiAvKiBBdGFyaSBoYXMgYSBieXRlLXN3YXBwZWQgSURFIGludGVyZmFjZSAqLwpAQCAtNzAsOSArODksOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKIApAQCAtODEsOCArMTAwLDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZmFsY29uaWRlX3BvcnRfaW5mbyA9IHsKKwkuZ2V0X2xvY2sJCT0gZmFsY29uaWRlX2dldF9sb2NrLAorCS5yZWxlYXNlX2xvY2sJCT0gZmFsY29uaWRlX3JlbGVhc2VfbG9jaywKIAkudHBfb3BzCQkJPSAmZmFsY29uaWRlX3RwX29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BIHwgSURFX0hGTEFHX1NFUklBTElaRSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19TRVJJQUxJWkUgfAorCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGZhbGNvbmlkZV9zZXR1cF9wb3J0cyhod19yZWdzX3QgKmh3KQpAQCAtMTMyLDkgKzE1NSw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWlkZV9nZXRfbG9jayhOVUxMLCBOVUxMKTsKKwlmYWxjb25pZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7CiAJcmMgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCAmZmFsY29uaWRlX3BvcnRfaW5mbywgaHdzKTsKLQlpZGVfcmVsZWFzZV9sb2NrKCk7CisJZmFsY29uaWRlX3JlbGVhc2VfbG9jaygpOwogCiAJaWYgKHJjKQogCQlnb3RvIGVycl9mcmVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZ2F5bGUuYyBiL2RyaXZlcnMvaWRlL2dheWxlLmMKaW5kZXggNTliZDBiZS4uYzcxMTk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZ2F5bGUuYworKysgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCkBAIC01MywxMSArNTMsNiBAQAogCiAjZGVmaW5lIEdBWUxFX05FWFRfUE9SVAkweDEwMDAKIAotI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSCi0jZGVmaW5lIEdBWUxFX05VTV9IV0lGUwkJMQotI2RlZmluZSBHQVlMRV9OVU1fUFJPQkVfSFdJRlMJR0FZTEVfTlVNX0hXSUZTCi0jZGVmaW5lIEdBWUxFX0hBU19DT05UUk9MX1JFRwkxCi0jZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSICovCiAjZGVmaW5lIEdBWUxFX05VTV9IV0lGUwkJMgogI2RlZmluZSBHQVlMRV9OVU1fUFJPQkVfSFdJRlMJKGlkZV9kb3VibGVyID8gR0FZTEVfTlVNX0hXSUZTIDogXAogCQkJCQkgICAgICAgR0FZTEVfTlVNX0hXSUZTLTEpCkBAIC02Niw4ICs2MSw2IEBACiBzdGF0aWMgaW50IGlkZV9kb3VibGVyOwogbW9kdWxlX3BhcmFtX25hbWVkKGRvdWJsZXIsIGlkZV9kb3VibGVyLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG91YmxlciwgImVuYWJsZSBzdXBwb3J0IGZvciBJREUgZG91YmxlcnMiKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSICovCi0KIAogICAgIC8qCiAgICAgICogIENoZWNrIGFuZCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IHN0YXR1cwpAQCAtMTE4LDcgKzExMSw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBnYXlsZV9wb3J0X2luZm8gPSB7Ci0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfU0VSSUFMSVpFIHwKKwkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKICAgICAvKgpAQCAtMTQ5LDEwICsxNDQsNyBAQAogZm91bmQ6CiAJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBHYXlsZSBJREUgY29udHJvbGxlciAoQSVkIHN0eWxlJXMpXG4iLAogCQkJIGE0MDAwID8gNDAwMCA6IDEyMDAsCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE9VQkxFUgotCQkJIGlkZV9kb3VibGVyID8gIiwgSURFIGRvdWJsZXIiIDoKLSNlbmRpZgotCQkJICIiKTsKKwkJCSBpZGVfZG91YmxlciA/ICIsIElERSBkb3VibGVyIiA6ICIiKTsKIAogCWlmIChhNDAwMCkgewogCSAgICBwaHlzX2Jhc2UgPSBHQVlMRV9CQVNFXzQwMDA7CkBAIC0xNjMsOSArMTU1LDYgQEAKIAkgICAgaXJxcG9ydCA9ICh1bnNpZ25lZCBsb25nKVpUV09fVkFERFIoR0FZTEVfSVJRXzEyMDApOwogCSAgICBhY2tfaW50ciA9IGdheWxlX2Fja19pbnRyX2ExMjAwOwogCX0KLS8qCi0gKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtb2RlcyBiZXR3ZWVuIG1taW8gdi9zIGlvbWlvCi0gKi8KIAogCXJlc19zdGFydCA9ICgodW5zaWduZWQgbG9uZylwaHlzX2Jhc2UpICYgfihHQVlMRV9ORVhUX1BPUlQtMSk7CiAJcmVzX24gPSBHQVlMRV9JREVSRUdfU0laRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKaW5kZXggZDNiM2U4Mi4uYTBlYjg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvaHB0MzY2LmMKQEAgLTgzNSwxMiArODM1LDYgQEAKIAlyZXR1cm4gaWRlX2RtYV9lbmQoZHJpdmUpOwogfQogCi1zdGF0aWMgdm9pZCBocHQzNzBfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7Ci0JaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKLX0KLQogLyogcmV0dXJucyAxIGlmIERNQSBJUlEgaXNzdWVkLCAwIG90aGVyd2lzZSAqLwogc3RhdGljIGludCBocHQzNzRfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTE0MTgsMzYgKzE0MTIsMzQgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgaHB0Mzd4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGhwdDM3NF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaHB0Mzc0X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBocHQzNzBfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGhwdDM3MF9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaHB0MzcwX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaHB0MzcwX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAorCS5kbWFfY2xlYXIJCT0gaHB0MzcwX2lycV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM2eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBocHQzNjZfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2h0NjU2MGIuYwppbmRleCBjN2U1YzIyLi4yZmIwZjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9odDY1NjBiLmMKKysrIGIvZHJpdmVycy9pZGUvaHQ2NTYwYi5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCBmcm9tIGlkZS5jIHRvIHByZXBhcmUgZm9yIGFjY2VzcyB0byBhIGdpdmVuIGRyaXZlLgogICovCi1zdGF0aWMgdm9pZCBodDY1NjBiX3NlbGVjdHByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIGh0NjU2MGJfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNDMsNiArMTQzLDggQEAKICNlbmRpZgogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlvdXRiKGRyaXZlLT5zZWxlY3QgfCBBVEFfREVWSUNFX09CUywgaHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOwogfQogCiAvKgpAQCAtMzA1LDE1ICszMDcsMjkgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChwcm9iZSwgcHJvYmVfaHQ2NTYwYiwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2JlLCAicHJvYmUgZm9yIEhUNjU2MEIgY2hpcHNldCIpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgaHQ2NTYwYl90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCisKKwkuZGV2X3NlbGVjdAkJPSBodDY1NjBiX2Rldl9zZWxlY3QsCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgaHQ2NTYwYl9wb3J0X29wcyA9IHsKIAkuaW5pdF9kZXYJCT0gaHQ2NTYwYl9pbml0X2RldiwKIAkuc2V0X3Bpb19tb2RlCQk9IGh0NjU2MGJfc2V0X3Bpb19tb2RlLAotCS5zZWxlY3Rwcm9jCQk9IGh0NjU2MGJfc2VsZWN0cHJvYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBodDY1NjBiX3BvcnRfaW5mbyBfX2luaXRkYXRhID0gewogCS5uYW1lCQkJPSBEUlZfTkFNRSwKIAkuY2hpcHNldAkJPSBpZGVfaHQ2NTYwYiwKKwkudHBfb3BzIAkJPSAmaHQ2NTYwYl90cF9vcHMsCiAJLnBvcnRfb3BzCQk9ICZodDY1NjBiX3BvcnRfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19TRVJJQUxJWkUgfCAvKiBpcyB0aGlzIG5lZWRlZD8gKi8KIAkJCQkgIElERV9IRkxBR19OT19ETUEgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWNzaWRlLmMgYi9kcml2ZXJzL2lkZS9pY3NpZGUuYwppbmRleCA0MTVkN2UyLi40ZTE2Y2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pY3NpZGUuYworKysgYi9kcml2ZXJzL2lkZS9pY3NpZGUuYwpAQCAtMjg3LDEzICsyODcsOCBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGh3aWYtPmRldik7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQogCWRpc2FibGVfZG1hKGVjLT5kbWEpOwogCi0JLyogVGVhcmRvd24gbWFwcGluZ3MgYWZ0ZXIgRE1BIGhhcyBjb21wbGV0ZWQuICovCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJcmV0dXJuIGdldF9kbWFfcmVzaWR1ZShlYy0+ZG1hKSAhPSAwOwogfQogCkBAIC0zMDcsMTUgKzMwMiwxNCBAQAogCWVuYWJsZV9kbWEoZWMtPmRtYSk7CiB9CiAKLXN0YXRpYyBpbnQgaWNzaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGljc2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGh3aWYtPmRldik7CiAJc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUgPSBlY2FyZF9nZXRfZHJ2ZGF0YShlYyk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IGRtYV9tb2RlOwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJZG1hX21vZGUgPSBETUFfTU9ERV9XUklURTsKIAllbHNlCiAJCWRtYV9tb2RlID0gRE1BX01PREVfUkVBRDsKQEAgLTMyNSw4ICszMTksNiBAQAogCSAqLwogCUJVR19PTihkbWFfY2hhbm5lbF9hY3RpdmUoZWMtPmRtYSkpOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IGludGVycnVwdCByb3V0ZWQuCiAJICovCkBAIC0zNDYsMjAgKzMzOCwxMiBAQAogCSAqIFRlbGwgdGhlIERNQSBlbmdpbmUgYWJvdXQgdGhlIFNHIHRhYmxlIGFuZAogCSAqIGRhdGEgZGlyZWN0aW9uLgogCSAqLwotCXNldF9kbWFfc2coZWMtPmRtYSwgaHdpZi0+c2dfdGFibGUsIGh3aWYtPnNnX25lbnRzKTsKKwlzZXRfZG1hX3NnKGVjLT5kbWEsIGh3aWYtPnNnX3RhYmxlLCBjbWQtPnNnX25lbnRzKTsKIAlzZXRfZG1hX21vZGUoZWMtPmRtYSwgZG1hX21vZGUpOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjbWQsIGlkZV9kbWFfaW50ciwgMiAqIFdBSVRfQ01ELCBOVUxMKTsKLX0KLQogc3RhdGljIGludCBpY3NpZGVfZG1hX3Rlc3RfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0zODMsMTEgKzM2Nyw5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGljc2lkZV92Nl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWNzaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGljc2lkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpY3NpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWNzaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpY3NpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGljc2lkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiB9OwogI2Vsc2UKQEAgLTQxOSw2ICs0MDEsMTAgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9hY29ybjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGljc2lkZV92NV9wb3J0X2luZm8gPSB7CisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBpY3NpZGVfcmVnaXN0ZXJfdjUoc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CkBAIC00NDUsNyArNDMxLDcgQEAKIAogCWljc2lkZV9zZXR1cF9wb3J0cygmaHcsIGJhc2UsICZpY3NpZGVfY2FyZGluZm9fdjUsIGVjKTsKIAotCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhOVUxMLCBod3MpOworCWhvc3QgPSBpZGVfaG9zdF9hbGxvYygmaWNzaWRlX3Y1X3BvcnRfaW5mbywgaHdzKTsKIAlpZiAoaG9zdCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNDUzLDcgKzQzOSw3IEBACiAKIAllY2FyZF9zZXRfZHJ2ZGF0YShlYywgc3RhdGUpOwogCi0JcmV0ID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgTlVMTCwgaHdzKTsKKwlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCAmaWNzaWRlX3Y1X3BvcnRfaW5mbywgaHdzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9mcmVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtNGRyaXZlcy5jIGIvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYwppbmRleCA5ZTg1YjFlLi43OGFjYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtNGRyaXZlcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMKQEAgLTIzLDcgKzIzLDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZV80ZHJpdmVzX3BvcnRfaW5mbyA9IHsKIAkucG9ydF9vcHMJCT0gJmlkZV80ZHJpdmVzX3BvcnRfb3BzLAotCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19TRVJJQUxJWkUgfCBJREVfSEZMQUdfTk9fRE1BLAorCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19TRVJJQUxJWkUgfCBJREVfSEZMQUdfTk9fRE1BIHwKKwkJCQkgIElERV9IRkxBR180RFJJVkVTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaWRlXzRkcml2ZXNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggNWI3MDRmMS4uMTJmNDM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAkvKiBzZW5kIGFsbCB0YXNrZmlsZSByZWdpc3RlcnMgKDB4MWYxLTB4MWY3KSAqaW4qdGhhdCpvcmRlciogKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBndGZfY291bnQ7IGl4KyspIHsKIAkJdTggKmd0ZiA9ICh1OCAqKShndGZfYWRkcmVzcyArIGl4ICogUkVHU19QRVJfR1RGKTsKLQkJaWRlX3Rhc2tfdCB0YXNrOworCQlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKIAkJREVCUFJJTlQoIigweDFmMS0xZjcpOiAiCiAJCQkgImhleDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKQEAgLTMxNywxMSArMzE3LDExIEBACiAJCX0KIAogCQkvKiBjb252ZXJ0IEdURiB0byB0YXNrZmlsZSAqLwotCQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0JCW1lbWNweSgmdGFzay50Zl9hcnJheVs3XSwgZ3RmLCBSRUdTX1BFUl9HVEYpOwotCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwkJbWVtY3B5KCZjbWQudGZfYXJyYXlbN10sIGd0ZiwgUkVHU19QRVJfR1RGKTsKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCQllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCQllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlkZV9ub19kYXRhX3Rhc2tmaWxlIGZhaWxlZDogJXVcbiIsCiAJCQkJCV9fZnVuY19fLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwppbmRleCA2YWRjNWI0Li4zZTQzYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwpAQCAtNiw2ICs2LDggQEAKICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKwogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogCiAjaWZkZWYgREVCVUcKQEAgLTY5LDU2ICs3MSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfY2hlY2tfYXRhcGlfZGV2aWNlKTsKIAotLyogUElPIGRhdGEgdHJhbnNmZXIgcm91dGluZSB1c2luZyB0aGUgc2NhdHRlciBnYXRoZXIgdGFibGUuICovCi1pbnQgaWRlX2lvX2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKLQkJICAgIHVuc2lnbmVkIGludCBiY291bnQsIGludCB3cml0ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKLQl4ZmVyX2Z1bmNfdCAqeGYgPSB3cml0ZSA/IHRwX29wcy0+b3V0cHV0X2RhdGEgOiB0cF9vcHMtPmlucHV0X2RhdGE7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IHBjLT5zZzsKLQljaGFyICpidWY7Ci0JaW50IGNvdW50LCBkb25lID0gMDsKLQotCXdoaWxlIChiY291bnQpIHsKLQkJY291bnQgPSBtaW4oc2ctPmxlbmd0aCAtIHBjLT5iX2NvdW50LCBiY291bnQpOwotCi0JCWlmIChQYWdlSGlnaE1lbShzZ19wYWdlKHNnKSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJCWJ1ZiA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9JUlEwKSArIHNnLT5vZmZzZXQ7Ci0JCQl4Zihkcml2ZSwgTlVMTCwgYnVmICsgcGMtPmJfY291bnQsIGNvdW50KTsKLQkJCWt1bm1hcF9hdG9taWMoYnVmIC0gc2ctPm9mZnNldCwgS01fSVJRMCk7Ci0JCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCX0gZWxzZSB7Ci0JCQlidWYgPSBzZ192aXJ0KHNnKTsKLQkJCXhmKGRyaXZlLCBOVUxMLCBidWYgKyBwYy0+Yl9jb3VudCwgY291bnQpOwotCQl9Ci0KLQkJYmNvdW50IC09IGNvdW50OwotCQlwYy0+Yl9jb3VudCArPSBjb3VudDsKLQkJZG9uZSArPSBjb3VudDsKLQotCQlpZiAocGMtPmJfY291bnQgPT0gc2ctPmxlbmd0aCkgewotCQkJaWYgKCEtLXBjLT5zZ19jbnQpCi0JCQkJYnJlYWs7Ci0JCQlwYy0+c2cgPSBzZyA9IHNnX25leHQoc2cpOwotCQkJcGMtPmJfY291bnQgPSAwOwotCQl9Ci0JfQotCi0JaWYgKGJjb3VudCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlZCBsZWZ0b3ZlciBieXRlcywgJXNcbiIsIGRyaXZlLT5uYW1lLAotCQkJYmNvdW50LCB3cml0ZSA/ICJwYWRkaW5nIHdpdGggemVyb3MiCi0JCQkJICAgICAgOiAiZGlzY2FyZGluZyBkYXRhIik7Ci0JCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBiY291bnQpOwotCX0KLQotCXJldHVybiBkb25lOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lvX2J1ZmZlcnMpOwotCiB2b2lkIGlkZV9pbml0X3BjKHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCW1lbXNldChwYywgMCwgc2l6ZW9mKCpwYykpOwpAQCAtMzAyLDE2ICsyNTQsMTYgQEAKIAogdm9pZCBpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oaWRlX2RyaXZlX3QgKmRyaXZlLCB1MTYgKmJjb3VudCwgdTggKmlyZWFzb24pCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8Ci0JCQlJREVfVEZMQUdfSU5fTlNFQ1Q7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKKwkJICAgICAgIElERV9URkxBR19JTl9OU0VDVDsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCSpiY291bnQgPSAodGFzay50Zi5sYmFoIDw8IDgpIHwgdGFzay50Zi5sYmFtOwotCSppcmVhc29uID0gdGFzay50Zi5uc2VjdCAmIDM7CisJKmJjb3VudCA9IChjbWQudGYubGJhaCA8PCA4KSB8IGNtZC50Zi5sYmFtOworCSppcmVhc29uID0gY21kLnRmLm5zZWN0ICYgMzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbik7CiAKQEAgLTMyNCwyOSArMjc2LDMxIEBACiB7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJeGZlcl9mdW5jX3QgKnhmZXJmdW5jOwotCXVuc2lnbmVkIGludCB0aW1lb3V0LCB0ZW1wOworCXVuc2lnbmVkIGludCB0aW1lb3V0LCBkb25lOwogCXUxNiBiY291bnQ7CiAJdTggc3RhdCwgaXJlYXNvbiwgZHNjID0gMDsKKwl1OCB3cml0ZSA9ICEhKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORyk7CiAKIAlkZWJ1Z19sb2coIkVudGVyICVzIC0gaW50ZXJydXB0IGhhbmRsZXJcbiIsIF9fZnVuY19fKTsKIAogCXRpbWVvdXQgPSAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpID8gV0FJVF9GTE9QUFlfQ01ECiAJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAKLQlpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgewotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX0lOX1BST0dSRVNTKSB7Ci0JCWlmIChod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKSB8fAotCQkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAoc3RhdCAmIEFUQV9FUlIpKSkgeworCQlpbnQgcmM7CisKKwkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CisJCXJjID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CisKKwkJaWYgKHJjIHx8IChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUgJiYgKHN0YXQgJiBBVEFfRVJSKSkpIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgJXMgZXJyb3JcbiIsCiAJCQkJCWRyaXZlLT5uYW1lLCBycV9kYXRhX2RpcihwYy0+cnEpCkBAIC0zNjIsNiArMzE2LDkgQEAKIAogCS8qIE5vIG1vcmUgaW50ZXJydXB0cyAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKKwkJaW50IHVwdG9kYXRlLCBlcnJvcjsKKwkJdW5zaWduZWQgaW50IGRvbmU7CisKIAkJZGVidWdfbG9nKCJQYWNrZXQgY29tbWFuZCBjb21wbGV0ZWQsICVkIGJ5dGVzIHRyYW5zZmVycmVkXG4iLAogCQkJICBwYy0+eGZlcnJlZCk7CiAKQEAgLTQwMCw4ICszNTcsMzEgQEAKIAkJCWRzYyA9IDE7CiAKIAkJLyogQ29tbWFuZCBmaW5pc2hlZCAtIENhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uICovCi0JCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgZHNjKTsKKwkJdXB0b2RhdGUgPSBkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIGRzYyk7CiAKKwkJaWYgKHVwdG9kYXRlID09IDApCisJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKworCQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAwOworCQkJZG9uZSA9IGJsa19ycV9ieXRlcyhycSk7CisJCQllcnJvciA9IDA7CisJCX0gZWxzZSB7CisKKwkJCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiB1cHRvZGF0ZSA8PSAwKSB7CisJCQkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKKwkJCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCQl9CisKKwkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCisJCQkJZG9uZSA9IGlkZV9ycV9ieXRlcyhycSk7IC8qIEZJWE1FICovCisJCQllbHNlCisJCQkJZG9uZSA9IGJsa19ycV9ieXRlcyhycSk7CisKKwkJCWVycm9yID0gdXB0b2RhdGUgPyAwIDogLUVJTzsKKwkJfQorCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgZXJyb3IsIGRvbmUpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC00MjEsOCArNDAxLDcgQEAKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJfQogCi0JaWYgKCgoaXJlYXNvbiAmIEFUQVBJX0lPKSA9PSBBVEFQSV9JTykgPT0KLQkJISEocGMtPmZsYWdzICYgUENfRkxBR19XUklUSU5HKSkgeworCWlmICgoKGlyZWFzb24gJiBBVEFQSV9JTykgPT0gQVRBUElfSU8pID09IHdyaXRlKSB7CiAJCS8qIEhvcGVmdWxseSwgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXZSB3YW50ZWQgdG8gJXMsIGJ1dCB0aGUgZGV2aWNlIHdhbnRzIHVzICIKIAkJCQkidG8gJXMhXG4iLCBkcml2ZS0+bmFtZSwKQEAgLTQzMSw3OCArNDEwLDU3IEBACiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCX0KIAotCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORykpIHsKLQkJLyogUmVhZGluZyAtIENoZWNrIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KLQkJdGVtcCA9IHBjLT54ZmVycmVkICsgYmNvdW50OwotCQlpZiAodGVtcCA+IHBjLT5yZXFfeGZlcikgewotCQkJaWYgKHRlbXAgPiBwYy0+YnVmX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgZGV2aWNlIHdhbnRzIHRvIHNlbmQgIgotCQkJCQkJInVzIG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkIC0gIgotCQkJCQkJImRpc2NhcmRpbmcgZGF0YVxuIiwKLQkJCQkJCWRyaXZlLT5uYW1lKTsKKwl4ZmVyZnVuYyA9IHdyaXRlID8gdHBfb3BzLT5vdXRwdXRfZGF0YSA6IHRwX29wcy0+aW5wdXRfZGF0YTsKIAotCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIGJjb3VudCk7Ci0JCQkJZ290byBuZXh0X2lycTsKLQkJCX0KLQkJCWRlYnVnX2xvZygiVGhlIGRldmljZSB3YW50cyB0byBzZW5kIHVzIG1vcmUgZGF0YSB0aGFuICIKLQkJCQkgICJleHBlY3RlZCAtIGFsbG93aW5nIHRyYW5zZmVyXG4iKTsKLQkJfQotCQl4ZmVyZnVuYyA9IHRwX29wcy0+aW5wdXRfZGF0YTsKLQl9IGVsc2UKLQkJeGZlcmZ1bmMgPSB0cF9vcHMtPm91dHB1dF9kYXRhOwotCi0JaWYgKChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSAmJiAhcGMtPmJ1ZikgfHwKLQkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiBwYy0+YmgpKSB7Ci0JCWludCBkb25lID0gZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsCi0JCQkJICAhIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKTsKLQotCQkvKiBGSVhNRTogZG9uJ3QgZG8gcGFydGlhbCBjb21wbGV0aW9ucyAqLwotCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpCi0JCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIGRvbmUgPj4gOSk7Ci0JfSBlbHNlCi0JCXhmZXJmdW5jKGRyaXZlLCBOVUxMLCBwYy0+Y3VyX3BvcywgYmNvdW50KTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkgJiYgcGMtPmJ1ZiA9PSBOVUxMKSB7CisJCWRvbmUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJjb3VudCwgY21kLT5ubGVmdCk7CisJCWlkZV9waW9fYnl0ZXMoZHJpdmUsIGNtZCwgd3JpdGUsIGRvbmUpOworCX0gZWxzZSBpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlICYmIHBjLT5iaCkgeworCQlkb25lID0gZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsIHdyaXRlKTsKKwl9IGVsc2UgeworCQlkb25lID0gbWluX3QodW5zaWduZWQgaW50LCBiY291bnQsIHBjLT5yZXFfeGZlciAtIHBjLT54ZmVycmVkKTsKKwkJeGZlcmZ1bmMoZHJpdmUsIE5VTEwsIHBjLT5jdXJfcG9zLCBkb25lKTsKKwl9CiAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KLQlwYy0+eGZlcnJlZCArPSBiY291bnQ7Ci0JcGMtPmN1cl9wb3MgKz0gYmNvdW50OworCXBjLT54ZmVycmVkICs9IGRvbmU7CisJcGMtPmN1cl9wb3MgKz0gZG9uZTsKIAotCWRlYnVnX2xvZygiW2NtZCAleF0gdHJhbnNmZXJyZWQgJWQgYnl0ZXMgb24gdGhhdCBpbnRyLlxuIiwKLQkJICBycS0+Y21kWzBdLCBiY291bnQpOwotbmV4dF9pcnE6CisJYmNvdW50IC09IGRvbmU7CisKKwlpZiAoYmNvdW50KQorCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCB3cml0ZSwgYmNvdW50KTsKKworCWRlYnVnX2xvZygiW2NtZCAleF0gdHJhbnNmZXJyZWQgJWQgYnl0ZXMsIHBhZGRlZCAlZCBieXRlc1xuIiwKKwkJICBycS0+Y21kWzBdLCBkb25lLCBiY291bnQpOworCiAJLyogQW5kIHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0LCBOVUxMKTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3N0YXRpYyB2b2lkIGlkZV9pbml0X3BhY2tldF9jbWQoc3RydWN0IGlkZV9jbWQgKmNtZCwgdTMyIHRmX2ZsYWdzLAorCQkJCXUxNiBiY291bnQsIHU4IGRtYSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXU4IGRtYSA9IGRyaXZlLT5kbWE7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJY21kLT5wcm90b2NvbCAgPSBkbWEgPyBBVEFQSV9QUk9UX0RNQSA6IEFUQVBJX1BST1RfUElPOworCWNtZC0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1BBQ0tFVDsKKwljbWQtPnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCWNtZC0+dGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJY21kLT50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CiB9CiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJmNtZCk7CiAKLQlyZXR1cm4gdGFzay50Zi5uc2VjdCAmIDM7CisJcmV0dXJuIGNtZC50Zi5uc2VjdCAmIDM7CiB9CiAKIHN0YXRpYyB1OCBpZGVfd2FpdF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggaXJlYXNvbikKQEAgLTU5NywxMSArNTU1LDE3IEBACiAJCX0KIAl9CiAKKwlod2lmLT5leHBpcnkgPSBleHBpcnk7CisKIAkvKiBTZXQgdGhlIGludGVycnVwdCByb3V0aW5lICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLAogCQkJKGRldl9pc19pZGVjZChkcml2ZSkgPyBkcml2ZS0+aXJxX2hhbmRsZXIKIAkJCQkJICAgICA6IGlkZV9wY19pbnRyKSwKLQkJCXRpbWVvdXQsIGV4cGlyeSk7CisJCQl0aW1lb3V0KTsKKworCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KKwlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpID09IDApCisJCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIHJxLT5jbWQsIGNtZF9sZW4pOwogCiAJLyogQmVnaW4gRE1BLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZGV2X2lzX2lkZWNkKGRyaXZlKSkgewpAQCAtNjE0LDMwICs1NzgsMjggQEAKIAkJfQogCX0KIAotCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KLQlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpID09IDApCi0JCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIHJxLT5jbWQsIGNtZF9sZW4pOwotCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKK2lkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJdTMyIHRmX2ZsYWdzOwogCXUxNiBiY291bnQ7CisJdTggZHJxX2ludCA9ICEhKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKTsKIAogCWlmIChkZXZfaXNfaWRlY2QoZHJpdmUpKSB7CiAJCXRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9OU0VDVCB8IElERV9URkxBR19PVVRfTEJBTDsKLQkJYmNvdW50ID0gaWRlX2NkX2dldF94ZmVybGVuKGh3aWYtPnJxKTsKKwkJYmNvdW50ID0gaWRlX2NkX2dldF94ZmVybGVuKHJxKTsKIAkJZXhwaXJ5ID0gaWRlX2NkX2V4cGlyeTsKIAkJdGltZW91dCA9IEFUQVBJX1dBSVRfUEM7CiAKIAkJaWYgKGRyaXZlLT5kbWEpCi0JCQlkcml2ZS0+ZG1hID0gIWh3aWYtPmRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSk7CisJCQlkcml2ZS0+ZG1hID0gIWlkZV9kbWFfcHJlcGFyZShkcml2ZSwgY21kKTsKIAl9IGVsc2UgewogCQlwYyA9IGRyaXZlLT5wYzsKIApAQCAtNjU1LDkgKzYxNyw4IEBACiAJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJCX0KIAotCQlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSAmJgotCQkgICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpCi0JCQlkcml2ZS0+ZG1hID0gIWh3aWYtPmRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSk7CisJCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykKKwkJCWRyaXZlLT5kbWEgPSAhaWRlX2RtYV9wcmVwYXJlKGRyaXZlLCBjbWQpOwogCiAJCWlmICghZHJpdmUtPmRtYSkKIAkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19ETUFfT0s7CkBAIC02NjYsMTggKzYyNywxOCBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOworCWlkZV9pbml0X3BhY2tldF9jbWQoY21kLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKIAotCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgeworCSh2b2lkKWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBjbWQpOworCisJaWYgKGRycV9pbnQpIHsKIAkJaWYgKGRyaXZlLT5kbWEpCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgQVRBX0NNRF9QQUNLRVQsIGlkZV90cmFuc2Zlcl9wYywKLQkJCQkgICAgdGltZW91dCwgZXhwaXJ5KTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0gZWxzZSB7Ci0JCWlkZV9leGVjdXRlX3BrdF9jbWQoZHJpdmUpOwotCQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZXhwaXJ5OwogCX0KKworCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX3RyYW5zZmVyX3BjLCB0aW1lb3V0KTsKKworCXJldHVybiBkcnFfaW50ID8gaWRlX3N0YXJ0ZWQgOiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lzc3VlX3BjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMjE3N2NkMS4uMzU3MjlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiAgIFNjb3R0IFNueWRlciA8c255ZGVyQGZuYWxkMC5mbmFsLmdvdj4KICAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4ICAgRXJpayBBbmRlcnNlbiA8YW5kZXJzZWVAZGViaWFuLm9yZz4KICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwICAgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNyAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LTIwMDkgIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCkBAIC0xMiwxMiArMTIsOSBAQAogICogU2VlIERvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkIGZvciB1c2FnZSBpbmZvcm1hdGlvbi4KICAqCiAgKiBTdWdnZXN0aW9ucyBhcmUgd2VsY29tZS4gUGF0Y2hlcyB0aGF0IHdvcmsgYXJlIG1vcmUgd2VsY29tZSB0aG91Z2guIDstKQotICogRm9yIHRob3NlIHdpc2hpbmcgdG8gd29yayBvbiB0aGlzIGRyaXZlciwgcGxlYXNlIGJlIHN1cmUgeW91IGRvd25sb2FkCi0gKiBhbmQgY29tcGx5IHdpdGggdGhlIGxhdGVzdCBNdC4gRnVqaSAoU0ZGODA5MCB2ZXJzaW9uIDQpIGFuZCBBVEFQSQotICogKFNGRi04MDIwaSByZXYgMi42KSBzdGFuZGFyZHMuIFRoZXNlIGRvY3VtZW50cyBjYW4gYmUgb2J0YWluZWQgYnkKLSAqIGFub255bW91cyBmdHAgZnJvbToKLSAqIGZ0cDovL2Zpc3Npb24uZHQud2RjLmNvbS9wdWIvc3RhbmRhcmRzL1NGRl9hdGFwaS9zcGVjL1NGRjgwMjAtcjIuNi9QUy84MDIwcjI2LnBzCi0gKiBmdHA6Ly9mdHAuYXZjLXBpb25lZXIuY29tL010ZnVqaTQvU3BlYy9GdWppNHIxMC5wZGYKKyAqCisgKiBEb2N1bWVudGF0aW9uOgorICoJTXQuIEZ1amkgKFNGRjgwOTAgdmVyc2lvbiA0KSBhbmQgQVRBUEkgKFNGRi04MDIwaSByZXYgMi42KSBzdGFuZGFyZHMuCiAgKgogICogRm9yIGhpc3RvcmljYWwgY2hhbmdlbG9nIHBsZWFzZSBzZWU6CiAgKglEb2N1bWVudGF0aW9uL2lkZS9DaGFuZ2VMb2cuaWRlLWNkLjE5OTQtMjAwNApAQCAtMTAwLDggKzk3LDcgQEAKIHsKIAlpbnQgbG9nID0gMDsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIkNhbGwgJXMsIHNlbnNlX2tleTogMHgleFxuIiwgX19mdW5jX18sCi0JCSAgICAgIHNlbnNlLT5zZW5zZV9rZXkpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgInNlbnNlX2tleTogMHgleCIsIHNlbnNlLT5zZW5zZV9rZXkpOwogCiAJaWYgKCFzZW5zZSB8fCAhcnEgfHwgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQlyZXR1cm4gMDsKQEAgLTE1MSwxMyArMTQ3LDEyIEBACiAJdW5zaWduZWQgbG9uZyBiaW9fc2VjdG9yczsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIkNhbGwgJXMsIGVycm9yX2NvZGU6IDB4JXgsICIKLQkJCSJzZW5zZV9rZXk6IDB4JXhcbiIsIF9fZnVuY19fLCBzZW5zZS0+ZXJyb3JfY29kZSwKLQkJCXNlbnNlLT5zZW5zZV9rZXkpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImVycm9yX2NvZGU6IDB4JXgsIHNlbnNlX2tleTogMHgleCIsCisJCQkJICAgICBzZW5zZS0+ZXJyb3JfY29kZSwgc2Vuc2UtPnNlbnNlX2tleSk7CiAKIAlpZiAoZmFpbGVkX2NvbW1hbmQpCi0JCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgIiVzOiBmYWlsZWQgY21kOiAweCV4XG4iLAotCQkJCV9fZnVuY19fLCBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkIGNtZDogMHgleCIsCisJCQkJCSAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CiAKIAlpZiAoIWNkcm9tX2xvZ19zZW5zZShkcml2ZSwgZmFpbGVkX2NvbW1hbmQsIHNlbnNlKSkKIAkJcmV0dXJuOwpAQCAtMjE1LDkgKzIxMCw5IEBACiAJCQkJICAgICAgc3RydWN0IHJlcXVlc3QgKmZhaWxlZF9jb21tYW5kKQogewogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvCQk9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEJCT0gJmluZm8tPnJlcXVlc3Rfc2Vuc2VfcmVxdWVzdDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEJCT0gJmRyaXZlLT5yZXF1ZXN0X3NlbnNlX3JxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImVudGVyIik7CiAKIAlpZiAoc2Vuc2UgPT0gTlVMTCkKIAkJc2Vuc2UgPSAmaW5mby0+c2Vuc2VfZGF0YTsKQEAgLTIzOSw3OSArMjM0LDQyIEBACiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kOwogCiAJaWYgKGZhaWxlZF9jb21tYW5kKQotCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAotCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXgiLAorCQkJCQkgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCiAJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKIAogCWVsdl9hZGRfcmVxdWVzdChkcml2ZS0+cXVldWUsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwogfQogCi1zdGF0aWMgdm9pZCBjZHJvbV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSkKK3N0YXRpYyB2b2lkIGlkZV9jZF9jb21wbGV0ZV9mYWlsZWRfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWludCBuc2VjdG9ycyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzOworCS8qCisJICogRm9yIFJFUV9UWVBFX1NFTlNFLCAicnEtPmJ1ZmZlciIgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAorCSAqIGZhaWxlZCByZXF1ZXN0CisJICovCisJc3RydWN0IHJlcXVlc3QgKmZhaWxlZCA9IChzdHJ1Y3QgcmVxdWVzdCAqKXJxLT5idWZmZXI7CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CisJdm9pZCAqc2Vuc2UgPSAmaW5mby0+c2Vuc2VfZGF0YTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgY21kOiAweCV4LCB1cHRvZGF0ZTogMHgleCwgIgotCQkgICAgICAibnNlY3RvcnM6ICVkXG4iLCBfX2Z1bmNfXywgcnEtPmNtZFswXSwgdXB0b2RhdGUsCi0JCSAgICAgIG5zZWN0b3JzKTsKKwlpZiAoZmFpbGVkKSB7CisJCWlmIChmYWlsZWQtPnNlbnNlKSB7CisJCQlzZW5zZSA9IGZhaWxlZC0+c2Vuc2U7CisJCQlmYWlsZWQtPnNlbnNlX2xlbiA9IHJxLT5zZW5zZV9sZW47CisJCX0KKwkJY2Ryb21fYW5hbHl6ZV9zZW5zZV9kYXRhKGRyaXZlLCBmYWlsZWQsIHNlbnNlKTsKIAotCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgJiYgdXB0b2RhdGUpIHsKLQkJLyoKLQkJICogRm9yIFJFUV9UWVBFX1NFTlNFLCAicnEtPmJ1ZmZlciIgcG9pbnRzIHRvIHRoZSBvcmlnaW5hbAotCQkgKiBmYWlsZWQgcmVxdWVzdAotCQkgKi8KLQkJc3RydWN0IHJlcXVlc3QgKmZhaWxlZCA9IChzdHJ1Y3QgcmVxdWVzdCAqKSBycS0+YnVmZmVyOwotCQlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQkJdm9pZCAqc2Vuc2UgPSAmaW5mby0+c2Vuc2VfZGF0YTsKLQotCQlpZiAoZmFpbGVkKSB7Ci0JCQlpZiAoZmFpbGVkLT5zZW5zZSkgewotCQkJCXNlbnNlID0gZmFpbGVkLT5zZW5zZTsKLQkJCQlmYWlsZWQtPnNlbnNlX2xlbiA9IHJxLT5zZW5zZV9sZW47Ci0JCQl9Ci0JCQljZHJvbV9hbmFseXplX3NlbnNlX2RhdGEoZHJpdmUsIGZhaWxlZCwgc2Vuc2UpOwotCQkJLyoKLQkJCSAqIG5vdyBlbmQgdGhlIGZhaWxlZCByZXF1ZXN0Ci0JCQkgKi8KLQkJCWlmIChibGtfZnNfcmVxdWVzdChmYWlsZWQpKSB7Ci0JCQkJaWYgKGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChkcml2ZSwgZmFpbGVkLCAwLAotCQkJCQkJZmFpbGVkLT5oYXJkX25yX3NlY3RvcnMpKQotCQkJCQlCVUcoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGJsa19lbmRfcmVxdWVzdChmYWlsZWQsIC1FSU8sCi0JCQkJCQkgICAgZmFpbGVkLT5kYXRhX2xlbikpCi0JCQkJCUJVRygpOwotCQkJfQotCQl9IGVsc2UKLQkJCWNkcm9tX2FuYWx5emVfc2Vuc2VfZGF0YShkcml2ZSwgTlVMTCwgc2Vuc2UpOwotCX0KLQotCWlmICghcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyAmJiBibGtfZnNfcmVxdWVzdChycSkpCi0JCXVwdG9kYXRlID0gMTsKLQkvKiBtYWtlIHN1cmUgaXQncyBmdWxseSBlbmRlZCAqLwotCWlmIChibGtfcGNfcmVxdWVzdChycSkpCi0JCW5zZWN0b3JzID0gKHJxLT5kYXRhX2xlbiArIDUxMSkgPj4gOTsKLQlpZiAoIW5zZWN0b3JzKQotCQluc2VjdG9ycyA9IDE7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkV4aXQgJXMsIHVwdG9kYXRlOiAweCV4LCBuc2VjdG9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCB1cHRvZGF0ZSwgbnNlY3RvcnMpOwotCi0JaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnNlY3RvcnMpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfZHVtcF9zdGF0dXNfbm9fc2Vuc2UoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCBjaGFyICptc2csIHU4IHN0KQotewotCWlmIChzdCAmIDB4ODApCi0JCXJldHVybjsKLQlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIG1zZywgc3QpOworCQlpZiAoaWRlX2VuZF9ycShkcml2ZSwgZmFpbGVkLCAtRUlPLCBibGtfcnFfYnl0ZXMoZmFpbGVkKSkpCisJCQlCVUcoKTsKKwl9IGVsc2UKKwkJY2Ryb21fYW5hbHl6ZV9zZW5zZV9kYXRhKGRyaXZlLCBOVUxMLCBzZW5zZSk7CiB9CiAKIC8qCiAgKiBSZXR1cm5zOgogICogMDogaWYgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIGNvbnRpbnVlZC4KLSAqIDE6IGlmIHRoZSByZXF1ZXN0IHdhcyBlbmRlZC4KKyAqIDE6IGlmIHRoZSByZXF1ZXN0IHdpbGwgYmUgZ29pbmcgdGhyb3VnaCBlcnJvciByZWNvdmVyeS4KKyAqIDI6IGlmIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBlbmRlZC4KICAqLwogc3RhdGljIGludCBjZHJvbV9kZWNvZGVfc3RhdHVzKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGdvb2Rfc3RhdCwgaW50ICpzdGF0X3JldCkKIHsKQEAgLTMzMiwxNSArMjkwLDEwIEBACiAJZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwogCXNlbnNlX2tleSA9IGVyciA+PiA0OwogCi0JaWYgKHJxID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG1pc3NpbmcgcnEgaW4gJXNcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiJXM6IHN0YXQ6IDB4JXgsIGdvb2Rfc3RhdDogMHgleCwgIgotCQkgICAgICAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCBnb29kX3N0YXQsIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgZXJyKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJzdGF0OiAweCV4LCBnb29kX3N0YXQ6IDB4JXgsIGNtZFswXTogMHgleCwgIgorCQkJCSAgInJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4IiwKKwkJCQkgIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAorCQkJCSAgZXJyKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkpIHsKIAkJLyoKQEAgLTM0OSwxMCArMzAyLDcgQEAKIAkJICogSnVzdCBnaXZlIHVwLgogCQkgKi8KIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7Ci0JCWlkZV9lcnJvcihkcml2ZSwgInJlcXVlc3Qgc2Vuc2UgZmFpbHVyZSIsIHN0YXQpOwotCQlyZXR1cm4gMTsKLQorCQlyZXR1cm4gMjsKIAl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSB8fCBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1BDKSB7CiAJCS8qIEFsbCBvdGhlciBmdW5jdGlvbnMsIGV4Y2VwdCBmb3IgUkVBRC4gKi8KIApAQCAtNDU1LDIxICs0MDUsMTkgQEAKIAkJCSAqIE5vIHBvaW50IGluIHJldHJ5aW5nIGFmdGVyIGFuIGlsbGVnYWwgcmVxdWVzdCBvciBkYXRhCiAJCQkgKiBwcm90ZWN0IGVycm9yLgogCQkJICovCi0JCQlpZGVfZHVtcF9zdGF0dXNfbm9fc2Vuc2UoZHJpdmUsICJjb21tYW5kIGVycm9yIiwgc3RhdCk7CisJCQlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJjb21tYW5kIGVycm9yIiwgc3RhdCk7CiAJCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCX0gZWxzZSBpZiAoc2Vuc2Vfa2V5ID09IE1FRElVTV9FUlJPUikgewogCQkJLyoKIAkJCSAqIE5vIHBvaW50IGluIHJlLXRyeWluZyBhIHppbGxpb24gdGltZXMgb24gYSBiYWQKIAkJCSAqIHNlY3Rvci4gSWYgd2UgZ290IGhlcmUgdGhlIGVycm9yIGlzIG5vdCBjb3JyZWN0YWJsZS4KIAkJCSAqLwotCQkJaWRlX2R1bXBfc3RhdHVzX25vX3NlbnNlKGRyaXZlLAotCQkJCQkJICJtZWRpYSBlcnJvciAoYmFkIHNlY3RvcikiLAotCQkJCQkJIHN0YXQpOworCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgKGJhZCBzZWN0b3IpIiwKKwkJCQkJc3RhdCk7CiAJCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCX0gZWxzZSBpZiAoc2Vuc2Vfa2V5ID09IEJMQU5LX0NIRUNLKSB7CiAJCQkvKiBkaXNrIGFwcGVhcnMgYmxhbmsgPz8gKi8KLQkJCWlkZV9kdW1wX3N0YXR1c19ub19zZW5zZShkcml2ZSwgIm1lZGlhIGVycm9yIChibGFuaykiLAotCQkJCQkJIHN0YXQpOworCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgKGJsYW5rKSIsIHN0YXQpOwogCQkJZG9fZW5kX3JlcXVlc3QgPSAxOwogCQl9IGVsc2UgaWYgKChlcnIgJiB+QVRBX0FCT1JURUQpICE9IDApIHsKIAkJCS8qIGdvIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIG90aGVyIGVycm9ycyAqLwpAQCAtNDk0LDE0ICs0NDIsMTIgQEAKIAkJICovCiAJCWlmIChzdGF0ICYgQVRBX0VSUikKIAkJCWNkcm9tX3F1ZXVlX3JlcXVlc3Rfc2Vuc2UoZHJpdmUsIE5VTEwsIE5VTEwpOworCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJiYWQgcnEiKTsKLQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOworCQlyZXR1cm4gMjsKIAl9CiAKLQkvKiByZXRyeSwgb3IgaGFuZGxlIHRoZSBuZXh0IHJlcXVlc3QgKi8KLQlyZXR1cm4gMTsKLQogZW5kX3JlcXVlc3Q6CiAJaWYgKHN0YXQgJiBBVEFfRVJSKSB7CiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwpAQCAtNTE0LDEwICs0NjAsOSBAQAogCQlod2lmLT5ycSA9IE5VTEw7CiAKIAkJY2Ryb21fcXVldWVfcmVxdWVzdF9zZW5zZShkcml2ZSwgcnEtPnNlbnNlLCBycSk7CisJCXJldHVybiAxOwogCX0gZWxzZQotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7Ci0KLQlyZXR1cm4gMTsKKwkJcmV0dXJuIDI7CiB9CiAKIC8qCkBAIC01MzAsOCArNDc1LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGlyZWFzb246IDB4JXgsIHJ3OiAweCV4XG4iLAotCQkgICAgICBfX2Z1bmNfXywgaXJlYXNvbiwgcncpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiaXJlYXNvbjogMHgleCwgcnc6IDB4JXgiLCBpcmVhc29uLCBydyk7CiAKIAkvKgogCSAqIGlyZWFzb24gPT0gMDogdGhlIGRyaXZlIHdhbnRzIHRvIHJlY2VpdmUgZGF0YSBmcm9tIHVzCkBAIC01NjIsMTE1ICs1MDYsMjggQEAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCi0JY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwogCXJldHVybiAtMTsKIH0KIAotLyoKLSAqIEFzc3VtZSB0aGF0IHRoZSBkcml2ZSB3aWxsIGFsd2F5cyBwcm92aWRlIGRhdGEgaW4gbXVsdGlwbGVzIG9mIGF0IGxlYXN0Ci0gKiBTRUNUT1JfU0laRSwgYXMgaXQgZ2V0cyBoYWlyeSB0byBrZWVwIHRyYWNrIG9mIHRoZSB0cmFuc2ZlcnMgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGxlbjogJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+cnE7CiAKLQlpZiAoKGxlbiAlIFNFQ1RPUl9TSVpFKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogQmFkIHRyYW5zZmVyIHNpemUgJWRcbiIsIGRyaXZlLT5uYW1lLAotCQkJX19mdW5jX18sIGxlbik7Ci0KLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRoaXMgZHJpdmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzICIKLQkJCQkidmVyc2lvbiBvZiB0aGUgZHJpdmVyXG4iKTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVHJ5aW5nIHRvIGxpbWl0IHRyYW5zZmVyIHNpemVzXG4iKTsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19MSU1JVF9ORlJBTUVTOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzOiBycS0+Y21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywKLQkJICAgICAgcnEtPmNtZF9mbGFncyk7Ci0KLQlpZiAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpIHsKLQkJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQotCQkJcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTOwotCQlpbnQgbnNraXAgPSBycS0+c2VjdG9yICYgKHNlY3RvcnNfcGVyX2ZyYW1lIC0gMSk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIHJlcXVlc3RlZCBzZWN0b3IgZG9lc24ndCBzdGFydCBvbiBhIGZyYW1lIGJvdW5kYXJ5LAotCQkgKiB3ZSBtdXN0IGFkanVzdCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zZmVyIHNvIHRoYXQgaXQgZG9lcywKLQkJICogYW5kIHJlbWVtYmVyIHRvIHNraXAgdGhlIGZpcnN0IGZldyBzZWN0b3JzLgotCQkgKgotCQkgKiBJZiB0aGUgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyBmaWVsZCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZQotCQkgKiBvZiB0aGUgYnVmZmVyLCBpdCB3aWxsIG1lYW4gdGhhdCB3ZSdyZSB0byBza2lwIGEgbnVtYmVyIG9mCi0JCSAqIHNlY3RvcnMgZXF1YWwgdG8gdGhlIGFtb3VudCBieSB3aGljaCBycS0+Y3VycmVudF9ucl9zZWN0b3JzCi0JCSAqIGlzIGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZS4KLQkJICovCi0JCWlmIChuc2tpcCA+IDApIHsKLQkJCS8qIHNhbml0eSBjaGVjay4uLiAqLwotCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgIT0KLQkJCSAgICBiaW9fY3VyX3NlY3RvcnMocnEtPmJpbykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IGJ1ZmZlciBib3RjaCAoJXUpXG4iLAotCQkJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLAotCQkJCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7Ci0JCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJCX0KLQkJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgKz0gbnNraXA7Ci0JCX0KLQl9Ci0KLQkvKiBzZXQgdXAgdGhlIGNvbW1hbmQgKi8KLQlycS0+dGltZW91dCA9IEFUQVBJX1dBSVRfUEM7Ci0KLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBGaXggdXAgYSBwb3NzaWJseSBwYXJ0aWFsbHktcHJvY2Vzc2VkIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gc3RhcnQgaXQgb3ZlcgotICogZW50aXJlbHksIG9yIGV2ZW4gcHV0IGl0IGJhY2sgb24gdGhlIHJlcXVlc3QgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmIChycS0+YnVmZmVyICE9IGJpb19kYXRhKHJxLT5iaW8pKSB7Ci0JCXNlY3Rvcl90IG4gPQotCQkJKHJxLT5idWZmZXIgLSAoY2hhciAqKWJpb19kYXRhKHJxLT5iaW8pKSAvIFNFQ1RPUl9TSVpFOwotCi0JCXJxLT5idWZmZXIgPSBiaW9fZGF0YShycS0+YmlvKTsKLQkJcnEtPm5yX3NlY3RvcnMgKz0gbjsKLQkJcnEtPnNlY3RvciAtPSBuOwotCX0KLQlycS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2N1cl9zZWN0b3JzKHJxLT5iaW8pOwotCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9yczsKLQlycS0+aGFyZF9ucl9zZWN0b3JzID0gcnEtPm5yX3NlY3RvcnM7Ci0JcnEtPmhhcmRfc2VjdG9yID0gcnEtPnNlY3RvcjsKLQlycS0+cS0+cHJlcF9ycV9mbihycS0+cSwgcnEpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgInJxLT5jbWRbMF06IDB4JXgiLCBycS0+Y21kWzBdKTsKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdHJhaWxpbmcgcmVxdWVzdCBzZW5zZSBmaWVsZHMgYXJlIG9wdGlvbmFsLAogCSAqIGFuZCBzb21lIGRyaXZlcyBkb24ndCBzZW5kIHRoZW0uICBTaWdoLgogCSAqLwogCWlmIChycS0+Y21kWzBdID09IEdQQ01EX1JFUVVFU1RfU0VOU0UgJiYKLQkgICAgcnEtPmRhdGFfbGVuID4gMCAmJiBycS0+ZGF0YV9sZW4gPD0gNSkKLQkJd2hpbGUgKHJxLT5kYXRhX2xlbiA+IDApIHsKLQkJCSoodTggKilycS0+ZGF0YSsrID0gMDsKLQkJCS0tcnEtPmRhdGFfbGVuOworCSAgICBjbWQtPm5sZWZ0ID4gMCAmJiBjbWQtPm5sZWZ0IDw9IDUpIHsKKwkJdW5zaWduZWQgaW50IG9mcyA9IGNtZC0+bmJ5dGVzIC0gY21kLT5ubGVmdDsKKworCQl3aGlsZSAoY21kLT5ubGVmdCA+IDApIHsKKwkJCSooKHU4ICopcnEtPmRhdGEgKyBvZnMrKykgPSAwOworCQkJY21kLT5ubGVmdC0tOwogCQl9CisJfQogfQogCiBpbnQgaWRlX2NkX3F1ZXVlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqY21kLApAQCAtNjg2LDkgKzU0Myw5IEBACiAJaWYgKCFzZW5zZSkKIAkJc2Vuc2UgPSAmbG9jYWxfc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCi0JCSAgICAgICJ0aW1lb3V0OiAlZCwgY21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgY21kWzBdLCB3cml0ZSwKLQkJICAgICAgdGltZW91dCwgY21kX2ZsYWdzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCB0aW1lb3V0OiAlZCwgIgorCQkJCSAgImNtZF9mbGFnczogMHgleCIsCisJCQkJICBjbWRbMF0sIHdyaXRlLCB0aW1lb3V0LCBjbWRfZmxhZ3MpOwogCiAJLyogc3RhcnQgb2YgcmV0cnkgbG9vcCAqLwogCWRvIHsKQEAgLTc1MCwzNiArNjA3LDQwIEBACiAJcmV0dXJuIChmbGFncyAmIFJFUV9GQUlMRUQpID8gLUVJTyA6IDA7CiB9CiAKLS8qCi0gKiBDYWxsZWQgZnJvbSBibGtfZW5kX3JlcXVlc3RfY2FsbGJhY2soKSBhZnRlciB0aGUgZGF0YSBvZiB0aGUgcmVxdWVzdCBpcwotICogY29tcGxldGVkIGFuZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXRzZWxmIGlzIGNvbXBsZXRlZC4gQnkgcmV0dXJuaW5nIHZhbHVlICcxJywKLSAqIGJsa19lbmRfcmVxdWVzdF9jYWxsYmFjaygpIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCBjb21wbGV0aW5nIGl0LgotICovCi1zdGF0aWMgaW50IGNkcm9tX25ld3BjX2ludHJfZHVtbXlfY2Ioc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHZvaWQgaWRlX2NkX2Vycm9yX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JcmV0dXJuIDE7CisJdW5zaWduZWQgaW50IG5yX2J5dGVzID0gY21kLT5uYnl0ZXMgLSBjbWQtPm5sZWZ0OworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCisJCW5yX2J5dGVzIC09IGNtZC0+bGFzdF94ZmVyX2xlbjsKKworCWlmIChucl9ieXRlcyA+IDApCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgbnJfYnl0ZXMpOwogfQogCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGNkcm9tX25ld3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl4ZmVyX2Z1bmNfdCAqeGZlcmZ1bmM7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkgPSBOVUxMOwogCWludCBkbWFfZXJyb3IgPSAwLCBkbWEsIHN0YXQsIHRoaXNsZW4sIHVwdG9kYXRlID0gMDsKLQlpbnQgd3JpdGUgPSAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKSA/IDEgOiAwOworCWludCB3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpID8gMSA6IDAsIHJjLCBuc2VjdG9yczsKKwlpbnQgc2Vuc2UgPSBibGtfc2Vuc2VfcmVxdWVzdChycSk7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJdTE2IGxlbjsKIAl1OCBpcmVhc29uOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgd3JpdGU6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiY21kWzBdOiAweCV4LCB3cml0ZTogMHgleCIsCisJCQkJICBycS0+Y21kWzBdLCB3cml0ZSk7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCiAJZG1hID0gZHJpdmUtPmRtYTsKIAlpZiAoZG1hKSB7CiAJCWRyaXZlLT5kbWEgPSAwOworCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkJZG1hX2Vycm9yID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CiAJCWlmIChkbWFfZXJyb3IpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBETUEgJXMgZXJyb3JcbiIsIGRyaXZlLT5uYW1lLAogCQkJCQl3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOwpAQCAtNzg3LDMxICs2NDgsMjkgQEAKIAkJfQogCX0KIAotCWlmIChjZHJvbV9kZWNvZGVfc3RhdHVzKGRyaXZlLCAwLCAmc3RhdCkpCisJcmMgPSBjZHJvbV9kZWNvZGVfc3RhdHVzKGRyaXZlLCAwLCAmc3RhdCk7CisJaWYgKHJjKSB7CisJCWlmIChyYyA9PSAyKQorCQkJZ290byBvdXRfZW5kOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQogCiAJLyogdXNpbmcgZG1hLCB0cmFuc2ZlciBpcyBjb21wbGV0ZSBub3cgKi8KIAlpZiAoZG1hKSB7CiAJCWlmIChkbWFfZXJyb3IpCiAJCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIGVycm9yIiwgc3RhdCk7Ci0JCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMgJiYgIXJxLT5iaW8pIHsKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMSk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCX0KLQkJZ290byBlbmRfcmVxdWVzdDsKKwkJdXB0b2RhdGUgPSAxOworCQlnb3RvIG91dF9lbmQ7CiAJfQogCiAJaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGRyaXZlLCAmbGVuLCAmaXJlYXNvbik7CiAKLQl0aGlzbGVuID0gYmxrX2ZzX3JlcXVlc3QocnEpID8gbGVuIDogcnEtPmRhdGFfbGVuOworCXRoaXNsZW4gPSBibGtfZnNfcmVxdWVzdChycSkgPyBsZW4gOiBjbWQtPm5sZWZ0OwogCWlmICh0aGlzbGVuID4gbGVuKQogCQl0aGlzbGVuID0gbGVuOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiJXM6IERSUTogc3RhdDogMHgleCwgdGhpc2xlbjogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCB0aGlzbGVuKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJEUlE6IHN0YXQ6IDB4JXgsIHRoaXNsZW46ICVkIiwKKwkJCQkgIHN0YXQsIHRoaXNsZW4pOwogCiAJLyogSWYgRFJRIGlzIGNsZWFyLCB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLiAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKQEAgLTgyMSwxMzUgKzY4MCw2MiBAQAogCQkJICogT3RoZXJ3aXNlLCBjb21wbGV0ZSB0aGUgY29tbWFuZCBub3JtYWxseS4KIAkJCSAqLwogCQkJdXB0b2RhdGUgPSAxOwotCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPiAwKSB7CisJCQlpZiAoY21kLT5ubGVmdCA+IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IGRhdGEgdW5kZXJydW4gIgotCQkJCQkJIiglZCBibG9ja3MpXG4iLAotCQkJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLAotCQkJCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CisJCQkJCSIoJXUgYnl0ZXMpXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18sCisJCQkJCWNtZC0+bmxlZnQpOwogCQkJCWlmICghd3JpdGUpCiAJCQkJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKIAkJCQl1cHRvZGF0ZSA9IDA7CiAJCQl9Ci0JCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKCFibGtfcGNfcmVxdWVzdChycSkpIHsKLQkJCWlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGRyaXZlLCBycSk7CisJCQlpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChkcml2ZSwgY21kKTsKIAkJCS8qIGNvbXBsYWluIGlmIHdlIHN0aWxsIGhhdmUgZGF0YSBsZWZ0IHRvIHRyYW5zZmVyICovCi0JCQl1cHRvZGF0ZSA9IHJxLT5kYXRhX2xlbiA/IDAgOiAxOworCQkJdXB0b2RhdGUgPSBjbWQtPm5sZWZ0ID8gMCA6IDE7CisJCQlpZiAodXB0b2RhdGUgPT0gMCkKKwkJCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRUQ7CiAJCX0KLQkJZ290byBlbmRfcmVxdWVzdDsKKwkJZ290byBvdXRfZW5kOwogCX0KIAogCS8qIGNoZWNrIHdoaWNoIHdheSB0byB0cmFuc2ZlciBkYXRhICovCi0JaWYgKGlkZV9jZF9jaGVja19pcmVhc29uKGRyaXZlLCBycSwgbGVuLCBpcmVhc29uLCB3cml0ZSkpCi0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwlyYyA9IGlkZV9jZF9jaGVja19pcmVhc29uKGRyaXZlLCBycSwgbGVuLCBpcmVhc29uLCB3cml0ZSk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9lbmQ7CiAKLQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCWlmICh3cml0ZSA9PSAwKSB7Ci0JCQlpbnQgbnNraXA7CisJY21kLT5sYXN0X3hmZXJfbGVuID0gMDsKIAotCQkJaWYgKGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGRyaXZlLCBsZW4pKSB7Ci0JCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEZpcnN0LCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gYml0LWJ1Y2tldAotCQkJICogYW55IG9mIHRoZSBsZWFkaW5nIHNlY3RvcnMuCi0JCQkgKi8KLQkJCW5za2lwID0gbWluX3QoaW50LCBycS0+Y3VycmVudF9ucl9zZWN0b3JzCi0JCQkJCSAgIC0gYmlvX2N1cl9zZWN0b3JzKHJxLT5iaW8pLAotCQkJCQkgICB0aGlzbGVuID4+IDkpOwotCQkJaWYgKG5za2lwID4gMCkgewotCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBuc2tpcCA8PCA5KTsKLQkJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IG5za2lwOwotCQkJCXRoaXNsZW4gLT0gKG5za2lwIDw8IDkpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGlyZWFzb24gPT0gMCkgewotCQl3cml0ZSA9IDE7Ci0JCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YTsKLQl9IGVsc2UgewotCQl3cml0ZSA9IDA7Ci0JCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhOwotCX0KLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIiVzOiBkYXRhIHRyYW5zZmVyLCBycS0+Y21kX3R5cGU6IDB4JXgsICIKLQkJICAgICAgImlyZWFzb246IDB4JXhcbiIsIF9fZnVuY19fLCBycS0+Y21kX3R5cGUsIGlyZWFzb24pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgImRhdGEgdHJhbnNmZXIsIHJxLT5jbWRfdHlwZTogMHgleCwgIgorCQkJCSAgImlyZWFzb246IDB4JXgiLAorCQkJCSAgcnEtPmNtZF90eXBlLCBpcmVhc29uKTsKIAogCS8qIHRyYW5zZmVyIGRhdGEgKi8KIAl3aGlsZSAodGhpc2xlbiA+IDApIHsKLQkJdTggKnB0ciA9IGJsa19mc19yZXF1ZXN0KHJxKSA/IE5VTEwgOiBycS0+ZGF0YTsKLQkJaW50IGJsZW4gPSBycS0+ZGF0YV9sZW47CisJCWludCBibGVuID0gbWluX3QoaW50LCB0aGlzbGVuLCBjbWQtPm5sZWZ0KTsKIAotCQkvKiBiaW8gYmFja2VkPyAqLwotCQlpZiAocnEtPmJpbykgewotCQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewotCQkJCXB0ciA9IHJxLT5idWZmZXI7Ci0JCQkJYmxlbiA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPDwgOTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHRyID0gYmlvX2RhdGEocnEtPmJpbyk7Ci0JCQkJYmxlbiA9IGJpb19pb3ZlYyhycS0+YmlvKS0+YnZfbGVuOwotCQkJfQotCQl9Ci0KLQkJaWYgKCFwdHIpIHsKLQkJCWlmIChibGtfZnNfcmVxdWVzdChycSkgJiYgIXdyaXRlKQotCQkJCS8qCi0JCQkJICogSWYgdGhlIGJ1ZmZlcnMgYXJlIGZ1bGwsIHBpcGUgdGhlIHJlc3QgaW50bwotCQkJCSAqIG9ibGl2aW9uLgotCQkJCSAqLwotCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIHRoaXNsZW4pOwotCQkJZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNvbmZ1c2VkLCBtaXNzaW5nIGRhdGFcbiIsCi0JCQkJCQlkcml2ZS0+bmFtZSk7Ci0JCQkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIHJxX2RhdGFfZGlyKHJxKQotCQkJCQkJICA/ICJjZHJvbV9uZXdwY19pbnRyLCB3cml0ZSIKLQkJCQkJCSAgOiAiY2Ryb21fbmV3cGNfaW50ciwgcmVhZCIpOwotCQkJfQorCQlpZiAoY21kLT5ubGVmdCA9PSAwKQogCQkJYnJlYWs7Ci0JCX0KIAotCQlpZiAoYmxlbiA+IHRoaXNsZW4pCi0JCQlibGVuID0gdGhpc2xlbjsKLQotCQl4ZmVyZnVuYyhkcml2ZSwgTlVMTCwgcHRyLCBibGVuKTsKKwkJaWRlX3Bpb19ieXRlcyhkcml2ZSwgY21kLCB3cml0ZSwgYmxlbik7CisJCWNtZC0+bGFzdF94ZmVyX2xlbiArPSBibGVuOwogCiAJCXRoaXNsZW4gLT0gYmxlbjsKIAkJbGVuIC09IGJsZW47CiAKLQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewotCQkJcnEtPmJ1ZmZlciArPSBibGVuOwotCQkJcnEtPm5yX3NlY3RvcnMgLT0gKGJsZW4gPj4gOSk7Ci0JCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IChibGVuID4+IDkpOwotCQkJcnEtPnNlY3RvciArPSAoYmxlbiA+PiA5KTsKLQotCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPT0gMCAmJiBycS0+bnJfc2VjdG9ycykKLQkJCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlycS0+ZGF0YV9sZW4gLT0gYmxlbjsKLQotCQkJLyoKLQkJCSAqIFRoZSByZXF1ZXN0IGNhbid0IGJlIGNvbXBsZXRlZCB1bnRpbCBEUlEgaXMgY2xlYXJlZC4KLQkJCSAqIFNvIGNvbXBsZXRlIHRoZSBkYXRhLCBidXQgZG9uJ3QgY29tcGxldGUgdGhlIHJlcXVlc3QKLQkJCSAqIHVzaW5nIHRoZSBkdW1teSBmdW5jdGlvbiBmb3IgdGhlIGNhbGxiYWNrIGZlYXR1cmUKLQkJCSAqIG9mIGJsa19lbmRfcmVxdWVzdF9jYWxsYmFjaygpLgotCQkJICovCi0JCQlpZiAocnEtPmJpbykKLQkJCQlibGtfZW5kX3JlcXVlc3RfY2FsbGJhY2socnEsIDAsIGJsZW4sCi0JCQkJCQkgY2Ryb21fbmV3cGNfaW50cl9kdW1teV9jYik7Ci0JCQllbHNlCi0JCQkJcnEtPmRhdGEgKz0gYmxlbjsKLQkJfQotCQlpZiAoIXdyaXRlICYmIGJsa19zZW5zZV9yZXF1ZXN0KHJxKSkKKwkJaWYgKHNlbnNlICYmIHdyaXRlID09IDApCiAJCQlycS0+c2Vuc2VfbGVuICs9IGJsZW47CiAJfQogCiAJLyogcGFkLCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSAmJiBsZW4gPiAwKQotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCB3cml0ZSwgbGVuKTsKKwlpZiAobGVuID4gMCkgeworCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgfHwgd3JpdGUgPT0gMCkKKwkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBsZW4pOworCQllbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb25mdXNlZCwgbWlzc2luZyBkYXRhXG4iLAorCQkJCWRyaXZlLT5uYW1lKTsKKwkJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiY2Ryb21fbmV3cGNfaW50ciIpOworCQl9CisJfQogCiAJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQl0aW1lb3V0ID0gcnEtPnRpbWVvdXQ7CkBAIC05NTksMjQgKzc0NSw1NCBAQAogCQkJZXhwaXJ5ID0gaWRlX2NkX2V4cGlyeTsKIAl9CiAKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGNkcm9tX25ld3BjX2ludHIsIHRpbWVvdXQsIGV4cGlyeSk7CisJaHdpZi0+ZXhwaXJ5ID0gZXhwaXJ5OworCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgY2Ryb21fbmV3cGNfaW50ciwgdGltZW91dCk7CiAJcmV0dXJuIGlkZV9zdGFydGVkOwogCi1lbmRfcmVxdWVzdDoKLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CitvdXRfZW5kOgorCWlmIChibGtfcGNfcmVxdWVzdChycSkgJiYgcmMgPT0gMCkgewogCQl1bnNpZ25lZCBpbnQgZGxlbiA9IHJxLT5kYXRhX2xlbjsKIAotCQlpZiAoZG1hKQotCQkJcnEtPmRhdGFfbGVuID0gMDsKKwkJcnEtPmRhdGFfbGVuID0gMDsKIAogCQlpZiAoYmxrX2VuZF9yZXF1ZXN0KHJxLCAwLCBkbGVuKSkKIAkJCUJVRygpOwogCiAJCWh3aWYtPnJxID0gTlVMTDsKIAl9IGVsc2UgewotCQlpZiAoIXVwdG9kYXRlKQotCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUpOworCQlpZiAoc2Vuc2UgJiYgdXB0b2RhdGUpCisJCQlpZGVfY2RfY29tcGxldGVfZmFpbGVkX3JxKGRyaXZlLCBycSk7CisKKwkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgeworCQkJaWYgKGNtZC0+bmxlZnQgPT0gMCkKKwkJCQl1cHRvZGF0ZSA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAodXB0b2RhdGUgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCX0KKworCQlpZiAodXB0b2RhdGUgPT0gMCkKKwkJCWlkZV9jZF9lcnJvcl9jbWQoZHJpdmUsIGNtZCk7CisKKwkJLyogbWFrZSBzdXJlIGl0J3MgZnVsbHkgZW5kZWQgKi8KKwkJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJCW5zZWN0b3JzID0gKHJxLT5kYXRhX2xlbiArIDUxMSkgPj4gOTsKKwkJZWxzZQorCQkJbnNlY3RvcnMgPSBycS0+aGFyZF9ucl9zZWN0b3JzOworCisJCWlmIChuc2VjdG9ycyA9PSAwKQorCQkJbnNlY3RvcnMgPSAxOworCisJCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCkgeworCQkJcnEtPmRhdGFfbGVuIC09IChjbWQtPm5ieXRlcyAtIGNtZC0+bmxlZnQpOworCQkJaWYgKHVwdG9kYXRlID09IDAgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpKQorCQkJCXJxLT5kYXRhX2xlbiArPSBjbWQtPmxhc3RfeGZlcl9sZW47CisJCX0KKworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIHVwdG9kYXRlID8gMCA6IC1FSU8sIG5zZWN0b3JzIDw8IDkpOworCisJCWlmIChzZW5zZSAmJiByYyA9PSAyKQorCQkJaWRlX2Vycm9yKGRyaXZlLCAicmVxdWVzdCBzZW5zZSBmYWlsdXJlIiwgc3RhdCk7CiAJfQogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTk4NCw1MSArODAwLDQ4IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGNkcm9tX3N0YXJ0X3J3KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBjZHJvbV9pbmZvICpjZCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKIAlpbnQgd3JpdGUgPSBycV9kYXRhX2RpcihycSkgPT0gV1JJVEU7CiAJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQotCQlxdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSkgPj4gU0VDVE9SX0JJVFM7CisJCXF1ZXVlX2hhcmRzZWN0X3NpemUocSkgPj4gU0VDVE9SX0JJVFM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJDYWxsICVzLCBycS0+Y21kWzBdOiAweCV4LCB3cml0ZTogMHgleCwgIgotCQkgICAgICAic2Vjc19wZXJfZnJhbWU6ICV1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX2ZsYWdzOiAweCV4LCAiCisJCQkJICAic2Vjc19wZXJfZnJhbWU6ICV1IiwKKwkJCQkgIHJxLT5jbWRbMF0sIHJxLT5jbWRfZmxhZ3MsIHNlY3RvcnNfcGVyX2ZyYW1lKTsKIAogCWlmICh3cml0ZSkgewogCQkvKiBkaXNrIGhhcyBiZWNvbWUgd3JpdGUgcHJvdGVjdGVkICovCi0JCWlmIChnZXRfZGlza19ybyhjZC0+ZGlzaykpIHsKLQkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKKwkJaWYgKGdldF9kaXNrX3JvKGNkLT5kaXNrKSkKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfQogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFdlIG1heSBiZSByZXRyeWluZyB0aGlzIHJlcXVlc3QgYWZ0ZXIgYW4gZXJyb3IuICBGaXggdXAgYW55CiAJCSAqIHdlaXJkbmVzcyB3aGljaCBtaWdodCBiZSBwcmVzZW50IGluIHRoZSByZXF1ZXN0IHBhY2tldC4KIAkJICovCi0JCWlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoZHJpdmUsIHJxKTsKKwkJcS0+cHJlcF9ycV9mbihxLCBycSk7CiAJfQogCi0JLyogdXNlIERNQSwgaWYgcG9zc2libGUgLyB3cml0ZXMgKm11c3QqIGJlIGhhcmR3YXJlIGZyYW1lIGFsaWduZWQgKi8KKwkvKiBmcyByZXF1ZXN0cyAqbXVzdCogYmUgaGFyZHdhcmUgZnJhbWUgYWxpZ25lZCAqLwogCWlmICgocnEtPm5yX3NlY3RvcnMgJiAoc2VjdG9yc19wZXJfZnJhbWUgLSAxKSkgfHwKLQkgICAgKHJxLT5zZWN0b3IgJiAoc2VjdG9yc19wZXJfZnJhbWUgLSAxKSkpIHsKLQkJaWYgKHdyaXRlKSB7Ci0JCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JCX0KLQkJZHJpdmUtPmRtYSA9IDA7Ci0JfSBlbHNlCi0JCWRyaXZlLT5kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CisJICAgIChycS0+c2VjdG9yICYgKHNlY3RvcnNfcGVyX2ZyYW1lIC0gMSkpKQorCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisKKwkvKiB1c2UgRE1BLCBpZiBwb3NzaWJsZSAqLworCWRyaXZlLT5kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKIAlpZiAod3JpdGUpCiAJCWNkLT5kZXZpbmZvLm1lZGlhX3dyaXR0ZW4gPSAxOwogCisJcnEtPnRpbWVvdXQgPSBBVEFQSV9XQUlUX1BDOworCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCiBzdGF0aWMgdm9pZCBjZHJvbV9kb19ibG9ja19wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsICIKLQkJICAgICAgInJxLT5jbWRfdHlwZTogMHgleFxuIiwgX19mdW5jX18sIHJxLT5jbWRbMF0sCi0JCSAgICAgIHJxLT5jbWRfdHlwZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF90eXBlOiAweCV4IiwKKwkJCQkgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSk7CiAKIAlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQogCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUlFVDsKQEAgLTEwNjcsMTcgKzg4MCwxOCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7Ci0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4LCBibG9jazogJWxsdVxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CisJc3RydWN0IGlkZV9jbWQgY21kOworCWludCB1cHRvZGF0ZSA9IDAsIG5zZWN0b3JzOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiY21kOiAweCV4LCBibG9jazogJWxsdSIsCisJCQkJICBycS0+Y21kWzBdLCAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKworCWlmIChkcml2ZS0+ZGVidWdfbWFzayAmIElERV9EQkdfUlEpCisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlX2NkX2RvX3JlcXVlc3QiKTsKIAogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKGNkcm9tX3N0YXJ0X3J3KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCi0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0KLQkJaWYgKGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoZHJpdmUsIHJxKSA9PSBpZGVfc3RvcHBlZCkKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJCWdvdG8gb3V0X2VuZDsKIAl9IGVsc2UgaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSB8fCBibGtfcGNfcmVxdWVzdChycSkgfHwKIAkJICAgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykgewogCQlpZiAoIXJxLT50aW1lb3V0KQpAQCAtMTA4NiwxNSArOTAwLDM4IEBACiAJCWNkcm9tX2RvX2Jsb2NrX3BjKGRyaXZlLCBycSk7CiAJfSBlbHNlIGlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQkvKiByaWdodCBub3cgdGhpcyBjYW4gb25seSBiZSBhIHJlc2V0Li4uICovCi0JCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAxKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQl1cHRvZGF0ZSA9IDE7CisJCWdvdG8gb3V0X2VuZDsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgRFJWX05BTUUgIiBiYWQgZmxhZ3MiKTsKLQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCWlmIChycS0+ZXJyb3JzID09IDApCisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJZ290byBvdXRfZW5kOwogCX0KIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCisJY21kLnJxID0gcnE7CisKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IHJxLT5kYXRhX2xlbikgeworCQlpZGVfaW5pdF9zZ19jbWQoJmNtZCwgYmxrX2ZzX3JlcXVlc3QocnEpID8gKHJxLT5ucl9zZWN0b3JzIDw8IDkpCisJCQkJCQkJIDogcnEtPmRhdGFfbGVuKTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CisJfQorCisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgJmNtZCk7CitvdXRfZW5kOgorCW5zZWN0b3JzID0gcnEtPmhhcmRfbnJfc2VjdG9yczsKKworCWlmIChuc2VjdG9ycyA9PSAwKQorCQluc2VjdG9ycyA9IDE7CisKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIHVwdG9kYXRlID8gMCA6IC1FSU8sIG5zZWN0b3JzIDw8IDkpOworCisJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCiAvKgpAQCAtMTExOSw3ICs5NTYsNyBAQAogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpID0gJmluZm8tPmRldmluZm87CiAJdW5zaWduZWQgY2hhciBjbWRbQkxLX01BWF9DREJdOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJbWVtc2V0KGNtZCwgMCwgQkxLX01BWF9DREIpOwogCWNtZFswXSA9IEdQQ01EX1RFU1RfVU5JVF9SRUFEWTsKQEAgLTExNDcsNyArOTg0LDcgQEAKIAl1bnNpZ25lZCBsZW4gPSBzaXplb2YoY2FwYnVmKTsKIAl1MzIgYmxvY2tsZW47CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZOwpAQCAtMTE3OSw4ICsxMDE2LDggQEAKIAkqY2FwYWNpdHkgPSAxICsgYmUzMl90b19jcHUoY2FwYnVmLmxiYSk7CiAJKnNlY3RvcnNfcGVyX2ZyYW1lID0gYmxvY2tsZW4gPj4gU0VDVE9SX0JJVFM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCAqY2FwYWNpdHksICpzZWN0b3JzX3Blcl9mcmFtZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHUiLAorCQkJCSAgICAgKmNhcGFjaXR5LCAqc2VjdG9yc19wZXJfZnJhbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTkxLDcgKzEwMjgsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIApAQCAtMTIyMSw3ICsxMDU4LDcgQEAKIAlsb25nIGxhc3Rfd3JpdHRlbjsKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnNfcGVyX2ZyYW1lID0gU0VDVE9SU19QRVJfRlJBTUU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAodG9jID09IE5VTEwpIHsKIAkJLyogdHJ5IHRvIGFsbG9jYXRlIHNwYWNlICovCkBAIC0xMzgzLDcgKzEyMjAsNyBAQAogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJaW50IHN0YXQsIGF0dGVtcHRzID0gMywgc2l6ZSA9IEFUQVBJX0NBUEFCSUxJVElFU19QQUdFX1NJWkU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GVUxMX0NBUFNfUEFHRSkgPT0gMCkKIAkJc2l6ZSAtPSBBVEFQSV9DQVBBQklMSVRJRVNfUEFHRV9QQURfU0laRTsKQEAgLTE0MDMsNyArMTI0MCw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXUxNiBjdXJzcGVlZCwgbWF4c3BlZWQ7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xFX1NQRUVEX0ZJRUxEUykgewogCQljdXJzcGVlZCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1Zls4ICsgMTRdKTsKQEAgLTE0MTMsOCArMTI1MCw4IEBACiAJCW1heHNwZWVkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyA4XSk7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGN1cnNwZWVkOiAldSwgbWF4c3BlZWQ6ICV1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgY3Vyc3BlZWQsIG1heHNwZWVkKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldSIsCisJCQkJICAgICBjdXJzcGVlZCwgbWF4c3BlZWQpOwogCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIAljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CkBAIC0xNDQ4LDcgKzEyODUsNyBAQAogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqZGV2aW5mbyA9ICZpbmZvLT5kZXZpbmZvOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgbnNsb3RzOiAlZFxuIiwgX19mdW5jX18sIG5zbG90cyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAibnNsb3RzOiAlZCIsIG5zbG90cyk7CiAKIAlkZXZpbmZvLT5vcHMgPSAmaWRlX2Nkcm9tX2RvcHM7CiAJZGV2aW5mby0+c3BlZWQgPSBpbmZvLT5jdXJyZW50X3NwZWVkOwpAQCAtMTQ3MSw5ICsxMzA4LDggQEAKIAltZWNodHlwZV90IG1lY2h0eXBlOwogCWludCBuc2xvdHMgPSAxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgZHJpdmUtPm1lZGlhOiAweCV4LCAiCi0JCSAgICAgICJkcml2ZS0+YXRhcGlfZmxhZ3M6IDB4JWx4XG4iLCBfX2Z1bmNfXywgZHJpdmUtPm1lZGlhLAotCQkgICAgICBkcml2ZS0+YXRhcGlfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIm1lZGlhOiAweCV4LCBhdGFwaV9mbGFnczogMHglbHgiLAorCQkJCSAgICAgZHJpdmUtPm1lZGlhLCBkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCiAJY2RpLT5tYXNrID0gKENEQ19DRF9SIHwgQ0RDX0NEX1JXIHwgQ0RDX0RWRCB8IENEQ19EVkRfUiB8CiAJCSAgICAgQ0RDX0RWRF9SQU0gfCBDRENfU0VMRUNUX0RJU0MgfCBDRENfUExBWV9BVURJTyB8CkBAIC0xNjg3LDkgKzE1MjMsNiBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2RfbGlzdF9lbnRyeSBpZGVfY2RfcXVpcmtzX2xpc3RbXSA9IHsKLQkvKiBMaW1pdCB0cmFuc2ZlciBzaXplIHBlciBpbnRlcnJ1cHQuICovCi0JeyAiU0FNU1VORyBDRC1ST00gU0NSLTI0MzAiLCBOVUxMLCAgIElERV9BRkxBR19MSU1JVF9ORlJBTUVTCSAgICAgfSwKLQl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMjQzMiIsIE5VTEwsICAgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMJICAgICB9LAogCS8qIFNDUi0zMjMxIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgU0VUX0NEX1NQRUVEIGNvbW1hbmQuICovCiAJeyAiU0FNU1VORyBDRC1ST00gU0NSLTMyMzEiLCBOVUxMLCAgIElERV9BRkxBR19OT19TUEVFRF9TRUxFQ1QJICAgICB9LAogCS8qIE9sZCBORUMyNjAgKG5vdCBSKSB3YXMgcmVsZWFzZWQgYmVmb3JlIEFUQVBJIDEuMiBzcGVjLiAqLwpAQCAtMTc1MCwxOCArMTU4MywxOCBAQAogewogCXN0cnVjdCBjZHJvbV9pbmZvICpjZCA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY2Ryb21fZGV2aWNlX2luZm8gKmNkaSA9ICZjZC0+ZGV2aW5mbzsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWNoYXIgKmZ3X3JldiA9IChjaGFyICopJmlkW0FUQV9JRF9GV19SRVZdOwogCWludCBuc2xvdHM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiZW50ZXIiKTsKIAotCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgaWRlX2Nkcm9tX3ByZXBfZm4pOwotCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KGRyaXZlLT5xdWV1ZSwgMzEpOwotCWJsa19xdWV1ZV91cGRhdGVfZG1hX3BhZChkcml2ZS0+cXVldWUsIDE1KTsKLQlkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSA9ICgxICogSFopIC8gMTAwMDsKLQlpZiAoIWRyaXZlLT5xdWV1ZS0+dW5wbHVnX2RlbGF5KQotCQlkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSA9IDE7CisJYmxrX3F1ZXVlX3ByZXBfcnEocSwgaWRlX2Nkcm9tX3ByZXBfZm4pOworCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHEsIDMxKTsKKwlibGtfcXVldWVfdXBkYXRlX2RtYV9wYWQocSwgMTUpOworCisJcS0+dW5wbHVnX2RlbGF5ID0gbWF4KCgxICogSFopIC8gMTAwMCwgMSk7CiAKIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19NRURJQV9DSEFOR0VEOwogCWRyaXZlLT5hdGFwaV9mbGFncyA9IElERV9BRkxBR19OT19FSkVDVCB8IGlkZV9jZF9mbGFncyhpZCk7CkBAIC0xNzc5LDggKzE2MTIsNyBAQAogCiAJbnNsb3RzID0gaWRlX2Nkcm9tX3Byb2JlX2NhcGFiaWxpdGllcyhkcml2ZSk7CiAKLQkvKiBzZXQgY29ycmVjdCBibG9jayBzaXplICovCi0JYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlLCBDRF9GUkFNRVNJWkUpOworCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKHEsIENEX0ZSQU1FU0laRSk7CiAKIAlpZiAoaWRlX2Nkcm9tX3JlZ2lzdGVyKGRyaXZlLCBuc2xvdHMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlcyBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIHdpdGggdGhlIgpAQCAtMTc5Nyw3ICsxNjI5LDcgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpbmZvLT5kcml2ZXIpOwogCWRldmljZV9kZWwoJmluZm8tPmRldik7CkBAIC0xODE1LDcgKzE2NDcsNyBAQAogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGluZm8tPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gaW5mby0+ZGlzazsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWtmcmVlKGluZm8tPnRvYyk7CiAJaWYgKGRldmluZm8tPmhhbmRsZSA9PSBkcml2ZSkKQEAgLTE4MzksNyArMTY3MSw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX2NkX3JlbW92ZSwKIAkudmVyc2lvbgkJPSBJREVDRF9WRVJTSU9OLAogCS5kb19yZXF1ZXN0CQk9IGlkZV9jZF9kb19yZXF1ZXN0LAotCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfY2RfcHJvY19lbnRyaWVzLAogCS5wcm9jX2RldnNldHMJCT0gaWRlX2NkX3Byb2NfZGV2c2V0cywKQEAgLTE5NjAsOSArMTc5MSw2IEBACiB9OwogCiAvKiBtb2R1bGUgb3B0aW9ucyAqLwotc3RhdGljIGNoYXIgKmlnbm9yZTsKLW1vZHVsZV9wYXJhbShpZ25vcmUsIGNoYXJwLCAwNDAwKTsKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKIG1vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CiAKQEAgLTE5NzQsOSArMTgwMiw4IEBACiAJc3RydWN0IGdlbmRpc2sgKmc7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBkcml2ZS0+ZHJpdmVyX3JlcTogJXMsICIKLQkJICAgICAgImRyaXZlLT5tZWRpYTogMHgleFxuIiwgX19mdW5jX18sIGRyaXZlLT5kcml2ZXJfcmVxLAotCQkgICAgICBkcml2ZS0+bWVkaWEpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgImRyaXZlcl9yZXE6ICVzLCBtZWRpYTogMHgleCIsCisJCQkJICAgICBkcml2ZS0+ZHJpdmVyX3JlcSwgZHJpdmUtPm1lZGlhKTsKIAogCWlmICghc3Ryc3RyKCJpZGUtY2Ryb20iLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCiAJCWdvdG8gZmFpbGVkOwpAQCAtMTk4NCwxNSArMTgxMSw2IEBACiAJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfY2Ryb20gJiYgZHJpdmUtPm1lZGlhICE9IGlkZV9vcHRpY2FsKQogCQlnb3RvIGZhaWxlZDsKIAotCS8qIHNraXAgZHJpdmVzIHRoYXQgd2Ugd2VyZSB0b2xkIHRvIGlnbm9yZSAqLwotCWlmIChpZ25vcmUgIT0gTlVMTCkgewotCQlpZiAoc3Ryc3RyKGlnbm9yZSwgZHJpdmUtPm5hbWUpKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaWdub3JpbmcgZHJpdmUgJXNcbiIsCi0JCQkJCSBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQotCX0KLQogCWRyaXZlLT5kZWJ1Z19tYXNrID0gZGVidWdfbWFzazsKIAlkcml2ZS0+aXJxX2hhbmRsZXIgPSBjZHJvbV9uZXdwY19pbnRyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1jZC5oCmluZGV4IGM4NzhiZmMuLjFkOTcxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5oCkBAIC0xMSw3ICsxMSw3IEBACiAjZGVmaW5lIElERUNEX0RFQlVHX0xPRwkJMAogCiAjaWYgSURFQ0RfREVCVUdfTE9HCi0jZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncykKKyNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCAjIyBhcmdzKQogI2Vsc2UKICNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKQEAgLTkxLDggKzkxLDYgQEAKIAkgICBvbiB0aGlzIGRldmljZS4gKi8KIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZV9kYXRhOwogCi0Jc3RydWN0IHJlcXVlc3QgcmVxdWVzdF9zZW5zZV9yZXF1ZXN0OwotCiAJdTggbWF4X3NwZWVkOwkJLyogTWF4IHNwZWVkIG9mIHRoZSBkcml2ZS4gKi8KIAl1OCBjdXJyZW50X3NwZWVkOwkvKiBDdXJyZW50IHNwZWVkIG9mIHRoZSBkcml2ZS4gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9pZGUtY3MuYwppbmRleCBmNTAyMTBmLi45ZTQ3ZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY3MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY3MuYwpAQCAtMTU0LDYgKzE1NCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlY3NfcG9ydF9pbmZvID0gewogCS5wb3J0X29wcwkJPSAmaWRlY3NfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogc3RhdGljIHN0cnVjdCBpZGVfaG9zdCAqaWRlY3NfcmVnaXN0ZXIodW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBjdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwppbmRleCA3YzM5NTM0Li41YmY5NThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKQEAgLTE4Myw4ICsxODMsNiBAQAogCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOwogCWlmIChlcnIpCiAJCXJxLT5lcnJvcnMgPSBlcnI7Ci0JZWxzZQotCQllcnIgPSAxOwotCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciwgaWRlX3JxX2J5dGVzKHJxKSk7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggODA2NzYwZC4uYzk5OGNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CkBAIC01MywzMyArNTIsMjYgQEAKIAlBVEFfQ01EX1dSSVRFX0VYVCwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBpZGVfZGF0YV9waGFzZXNbXSA9IHsKLQlUQVNLRklMRV9NVUxUSV9JTiwKLQlUQVNLRklMRV9NVUxUSV9PVVQsCi0JVEFTS0ZJTEVfSU4sCi0JVEFTS0ZJTEVfT1VULAotCVRBU0tGSUxFX0lOX0RNQSwKLQlUQVNLRklMRV9PVVRfRE1BLAotfTsKLQotc3RhdGljIHZvaWQgaWRlX3RmX3NldF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrLCB1OCBkbWEpCitzdGF0aWMgdm9pZCBpZGVfdGZfc2V0X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IGRtYSkKIHsKIAl1OCBpbmRleCwgbGJhNDgsIHdyaXRlOwogCi0JbGJhNDggPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMiA6IDA7Ci0Jd3JpdGUgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpID8gMSA6IDA7CisJbGJhNDggPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAyIDogMDsKKwl3cml0ZSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAwOwogCi0JaWYgKGRtYSkKKwlpZiAoZG1hKSB7CisJCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9ETUE7CiAJCWluZGV4ID0gODsKLQllbHNlCi0JCWluZGV4ID0gZHJpdmUtPm11bHRfY291bnQgPyAwIDogNDsKKwl9IGVsc2UgeworCQljbWQtPnByb3RvY29sID0gQVRBX1BST1RfUElPOworCQlpZiAoZHJpdmUtPm11bHRfY291bnQpIHsKKwkJCWNtZC0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX01VTFRJX1BJTzsKKwkJCWluZGV4ID0gMDsKKwkJfSBlbHNlCisJCQlpbmRleCA9IDQ7CisJfQogCi0JdGFzay0+dGYuY29tbWFuZCA9IGlkZV9yd19jbWRzW2luZGV4ICsgbGJhNDggKyB3cml0ZV07Ci0KLQlpZiAoZG1hKQotCQlpbmRleCA9IDg7IC8qIGZpeHVwIGluZGV4ICovCi0KLQl0YXNrLT5kYXRhX3BoYXNlID0gaWRlX2RhdGFfcGhhc2VzW2luZGV4IC8gMiArIHdyaXRlXTsKKwljbWQtPnRmLmNvbW1hbmQgPSBpZGVfcndfY21kc1tpbmRleCArIGxiYTQ4ICsgd3JpdGVdOwogfQogCiAvKgpAQCAtOTMsOCArODUsOCBAQAogCXUxNiBuc2VjdG9ycwkJPSAodTE2KXJxLT5ucl9zZWN0b3JzOwogCXU4IGxiYTQ4CQk9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpOwogCXU4IGRtYQkJCT0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwotCWlkZV90YXNrX3QJCXRhc2s7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZQkqdGYgPSAmdGFzay50ZjsKKwlzdHJ1Y3QgaWRlX2NtZAkJY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUJKnRmID0gJmNtZC50ZjsKIAlpZGVfc3RhcnRzdG9wX3QJCXJjOwogCiAJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkgJiYgbGJhNDggJiYgZG1hKSB7CkBAIC0xMDQsMTMgKzk2LDggQEAKIAkJCWxiYTQ4ID0gMDsKIAl9CiAKLQlpZiAoIWRtYSkgewotCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOwotCX0KLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkEpIHsKIAkJaWYgKGxiYTQ4KSB7CkBAIC0xMjksNyArMTE2LDcgQEAKIAkJCXRmLT5sYmFtICAgPSAodTgpKGJsb2NrID4+ICA4KTsKIAkJCXRmLT5sYmFoICAgPSAodTgpKGJsb2NrID4+IDE2KTsKIAotCQkJdGFzay50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisJCQljbWQudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOwogCQl9IGVsc2UgewogCQkJdGYtPm5zZWN0ICA9IG5zZWN0b3JzICYgMHhmZjsKIAkJCXRmLT5sYmFsICAgPSBibG9jazsKQEAgLTE1NiwyMyArMTQzLDI3IEBACiAJCXRmLT5kZXZpY2UgPSBoZWFkOwogCX0KIAorCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfRlM7CisKIAlpZiAocnFfZGF0YV9kaXIocnEpKQotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKIAotCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmdGFzaywgZG1hKTsKLQlpZiAoIWRtYSkKLQkJaHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZTsKLQl0YXNrLnJxID0gcnE7CisJaWRlX3RmX3NldF9jbWQoZHJpdmUsICZjbWQsIGRtYSk7CisJY21kLnJxID0gcnE7CiAKLQlyYyA9IGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJaWYgKGRtYSA9PSAwKSB7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBuc2VjdG9ycyA8PCA5KTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CisJfQorCisJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAocmMgPT0gaWRlX3N0b3BwZWQgJiYgZG1hKSB7CiAJCS8qIGZhbGxiYWNrIHRvIFBJTyAqLwotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLOwotCQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJnRhc2ssIDApOwotCQlod2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlOwotCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0RNQV9QSU9fRkFMTEJBQ0s7CisJCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmY21kLCAwKTsKKwkJaWRlX2luaXRfc2dfY21kKCZjbWQsIG5zZWN0b3JzIDw8IDkpOworCQlyYyA9IGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC0xOTMsNyArMTg0LDkgQEAKIAogCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlX2RvX3J3X2Rpc2sgLSBiYWQgY29tbWFuZCIpOwotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQlpZiAocnEtPmVycm9ycyA9PSAwKQorCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgaWRlX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTIxNiwyNSArMjA5LDI1IEBACiAgKi8KIHN0YXRpYyB1NjQgaWRlZGlza19yZWFkX25hdGl2ZV9tYXhfYWRkcmVzcyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBsYmE0OCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXU2NCBhZGRyID0gMDsKIAotCS8qIENyZWF0ZSBJREUvQVRBIGNvbW1hbmQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAobGJhNDgpCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9SRUFEX05BVElWRV9NQVhfRVhUOwogCWVsc2UKIAkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1JFQURfTkFUSVZFX01BWDsKIAl0Zi0+ZGV2aWNlICA9IEFUQV9MQkE7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCWlmIChsYmE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7Ci0JLyogc3VibWl0IGNvbW1hbmQgcmVxdWVzdCAqLwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisKKwlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KLQlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQorCWlmICghKHRmLT5zdGF0dXMgJiBBVEFfRVJSKSkKIAkJYWRkciA9IGlkZV9nZXRfbGJhX2FkZHIodGYsIGxiYTQ4KSArIDE7CiAKIAlyZXR1cm4gYWRkcjsKQEAgLTI0NiwxMyArMjM5LDEzIEBACiAgKi8KIHN0YXRpYyB1NjQgaWRlZGlza19zZXRfbWF4X2FkZHJlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCB1NjQgYWRkcl9yZXEsIGludCBsYmE0OCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXU2NCBhZGRyX3NldCA9IDA7CiAKIAlhZGRyX3JlcS0tOwotCS8qIENyZWF0ZSBJREUvQVRBIGNvbW1hbmQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5sYmFsICAgICA9IChhZGRyX3JlcSA+PiAgMCkgJiAweGZmOwogCXRmLT5sYmFtICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwogCXRmLT5sYmFoICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwpAQCAtMjY2LDEzICsyNTksMTUgQEAKIAkJdGYtPmNvbW1hbmQgID0gQVRBX0NNRF9TRVRfTUFYOwogCX0KIAl0Zi0+ZGV2aWNlIHw9IEFUQV9MQkE7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCWlmIChsYmE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7Ci0JLyogc3VibWl0IGNvbW1hbmQgcmVxdWVzdCAqLwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisKKwlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CisKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KLQlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQorCWlmICghKHRmLT5zdGF0dXMgJiBBVEFfRVJSKSkKIAkJYWRkcl9zZXQgPSBpZGVfZ2V0X2xiYV9hZGRyKHRmLCBsYmE0OCkgKyAxOwogCiAJcmV0dXJuIGFkZHJfc2V0OwpAQCAtMzg5LDI0ICszODQsMjQgQEAKIHN0YXRpYyB2b2lkIGlkZWRpc2tfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlkZV9kcml2ZV90ICpkcml2ZSA9IHEtPnF1ZXVlZGF0YTsKLQlpZGVfdGFza190ICp0YXNrID0ga21hbGxvYyhzaXplb2YoKnRhc2spLCBHRlBfQVRPTUlDKTsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0ga21hbGxvYyhzaXplb2YoKmNtZCksIEdGUF9BVE9NSUMpOwogCiAJLyogRklYTUU6IG1hcCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlIG9uIHJxLT5jbWRbXSAqLwotCUJVR19PTih0YXNrID09IE5VTEwpOworCUJVR19PTihjbWQgPT0gTlVMTCk7CiAKLQltZW1zZXQodGFzaywgMCwgc2l6ZW9mKCp0YXNrKSk7CisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoYXRhX2lkX2ZsdXNoX2V4dF9lbmFibGVkKGRyaXZlLT5pZCkgJiYKIAkgICAgKGRyaXZlLT5jYXBhY2l0eTY0ID49ICgxVUwgPDwgMjgpKSkKLQkJdGFzay0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKIAllbHNlCi0JCXRhc2stPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOwotCXRhc2stPnRmX2ZsYWdzCSA9IElERV9URkxBR19PVVRfVEYgfCBJREVfVEZMQUdfT1VUX0RFVklDRSB8Ci0JCQkgICBJREVfVEZMQUdfRFlOOwotCXRhc2stPmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCQljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOworCWNtZC0+dGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX09VVF9ERVZJQ0UgfAorCQkJSURFX1RGTEFHX0RZTjsKKwljbWQtPnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwogCiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFOwogCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOwotCXJxLT5zcGVjaWFsID0gdGFzazsKKwlycS0+c3BlY2lhbCA9IGNtZDsKIH0KIAogaWRlX2RldnNldF9nZXQobXVsdGNvdW50LCBtdWx0X2NvdW50KTsKQEAgLTQ1NiwxNSArNDUxLDE1IEBACiAKIHN0YXRpYyBpbnQgaWRlX2RvX3NldGZlYXR1cmUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBmZWF0dXJlLCB1OCBuc2VjdCkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGYuZmVhdHVyZSA9IGZlYXR1cmU7Ci0JdGFzay50Zi5uc2VjdCAgID0gbnNlY3Q7Ci0JdGFzay50Zi5jb21tYW5kID0gQVRBX0NNRF9TRVRfRkVBVFVSRVM7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGYuZmVhdHVyZSA9IGZlYXR1cmU7CisJY21kLnRmLm5zZWN0ICAgPSBuc2VjdDsKKwljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfU0VUX0ZFQVRVUkVTOworCWNtZC50Zl9mbGFncyAgID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJnRhc2spOworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9vcmRlcmVkKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTUzMSwxNSArNTI2LDE2IEBACiAKIHN0YXRpYyBpbnQgZG9faWRlZGlza19mbHVzaGNhY2hlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJaWYgKGF0YV9pZF9mbHVzaF9leHRfZW5hYmxlZChkcml2ZS0+aWQpKQotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKIAllbHNlCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogaWRlX2RldnNldF9nZXQoYWNvdXN0aWMsIGFjb3VzdGljKTsKQEAgLTcxMSwxNyArNzA3LDE3IEBACiBzdGF0aWMgaW50IGlkZV9kaXNrX3NldF9kb29ybG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBnZW5kaXNrICpkaXNrLAogCQkJCSBpbnQgb24pCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAlpbnQgcmV0OwogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0RPT1JMT0NLSU5HKSA9PSAwKQogCQlyZXR1cm4gMDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBvbiA/IEFUQV9DTURfTUVESUFfTE9DSyA6IEFUQV9DTURfTUVESUFfVU5MT0NLOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLmNvbW1hbmQgPSBvbiA/IEFUQV9DTURfTUVESUFfTE9DSyA6IEFUQV9DTURfTUVESUFfVU5MT0NLOworCWNtZC50Zl9mbGFncyAgID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCXJldCA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJcmV0ID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJaWYgKHJldCkKIAkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0RPT1JMT0NLSU5HOwpAQCAtNzM3LDYgKzczMyw1IEBACiAJLmluaXRfbWVkaWEJPSBpZGVfZGlza19pbml0X21lZGlhLAogCS5zZXRfZG9vcmxvY2sJPSBpZGVfZGlza19zZXRfZG9vcmxvY2ssCiAJLmRvX3JlcXVlc3QJPSBpZGVfZG9fcndfZGlzaywKLQkuZW5kX3JlcXVlc3QJPSBpZGVfZW5kX3JlcXVlc3QsCiAJLmlvY3RsCQk9IGlkZV9kaXNrX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYwppbmRleCAxZjg2ZGNiLi5lYWVhM2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCkBAIC0xLDM4ICsxLDM4IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KIAogI2luY2x1ZGUgImlkZS1kaXNrLmgiCiAKIHN0YXRpYyBpbnQgc21hcnRfZW5hYmxlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJdGYtPmZlYXR1cmUgPSBBVEFfU01BUlRfRU5BQkxFOwogCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKIAl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7CiAJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogfQogCiBzdGF0aWMgaW50IGdldF9zbWFydF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZiwgdTggc3ViX2NtZCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJdGYtPmZlYXR1cmUgPSBzdWJfY21kOwogCXRmLT5uc2VjdCAgID0gMHgwMTsKIAl0Zi0+bGJhbSAgICA9IEFUQV9TTUFSVF9MQkFNX1BBU1M7CiAJdGYtPmxiYWggICAgPSBBVEFfU01BUlRfTEJBSF9QQVNTOwogCXRmLT5jb21tYW5kID0gQVRBX0NNRF9TTUFSVDsKLQlhcmdzLnRmX2ZsYWdzCT0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlhcmdzLmRhdGFfcGhhc2UJPSBUQVNLRklMRV9JTjsKLQkodm9pZCkgc21hcnRfZW5hYmxlKGRyaXZlKTsKLQlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmFyZ3MsIGJ1ZiwgMSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisKKwlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmNtZCwgYnVmLCAxKTsKIH0KIAogc3RhdGljIGludCBwcm9jX2lkZWRpc2tfcmVhZF9jYWNoZQpAQCAtNjcsNiArNjcsOCBAQAogCWlkZV9kcml2ZV90CSpkcml2ZSA9IChpZGVfZHJpdmVfdCAqKWRhdGE7CiAJaW50CQlsZW4gPSAwLCBpID0gMDsKIAorCSh2b2lkKXNtYXJ0X2VuYWJsZShkcml2ZSk7CisKIAlpZiAoZ2V0X3NtYXJ0X2RhdGEoZHJpdmUsIHBhZ2UsIHN1Yl9jbWQpID09IDApIHsKIAkJdW5zaWduZWQgc2hvcnQgKnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBwYWdlOwogCQljaGFyICpvdXQgPSAoY2hhciAqKXZhbCArIFNFQ1RPUl9TSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKaW5kZXggMTIzZDM5My4uMTZmYzQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCkBAIC0zOCwxMCArMzgsOSBAQAogCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzIG1vZGUyIERNQQogCSAqIChtdWx0aSBvciBzaW5nbGUpIGVuYWJsZWQKIAkgKi8KLQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpCS8qIHJlZ3VsYXIgRE1BICovCi0JCWlmICgoaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCB8fAotCQkgICAgKGlkW0FUQV9JRF9TV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQpCi0JCQlyZXR1cm4gMTsKKwlpZiAoKGlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQgfHwKKwkgICAgKGlkW0FUQV9JRF9TV0RNQV9NT0RFU10gJiAweDQwNCkgPT0gMHg0MDQpCisJCXJldHVybiAxOwogCiAJLyogQ29uc3VsdCB0aGUgbGlzdCBvZiBrbm93biAiZ29vZCIgZHJpdmVzICovCiAJaWYgKGlkZV9kbWFfZ29vZF9kcml2ZShkcml2ZSkpCkBAIC0xMTEsNyArMTEwLDcgQEAKICAqCU1heSBhbHNvIGJlIGludm9rZWQgZnJvbSB0cm0yOTAuYwogICovCiAKLWludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitpbnQgaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJX19sZTMyICp0YWJsZSA9IChfX2xlMzIgKilod2lmLT5kbWF0YWJsZV9jcHU7CkBAIC0xMjAsMTEgKzExOSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAl1OCBpc190cm0yOTAgPSAhIShod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1RSTTI5MCk7CiAKLQlod2lmLT5zZ19uZW50cyA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQlpZiAoaHdpZi0+c2dfbmVudHMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3JfZWFjaF9zZyhod2lmLT5zZ190YWJsZSwgc2csIGh3aWYtPnNnX25lbnRzLCBpKSB7CisJZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBjbWQtPnNnX25lbnRzLCBpKSB7CiAJCXUzMiBjdXJfYWRkciwgY3VyX2xlbiwgeGNvdW50LCBiY291bnQ7CiAKIAkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CkBAIC0xNzAsOCArMTY1LDYgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiAlc1xuIiwgZHJpdmUtPm5hbWUsCiAJCWNvdW50ID8gIkRNQSB0YWJsZSB0b28gc21hbGwiIDogImVtcHR5IERNQSB0YWJsZT8iKTsKIAotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQogCXJldHVybiAwOyAvKiByZXZlcnQgdG8gUElPIGZvciB0aGlzIHJlcXVlc3QgKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9idWlsZF9kbWF0YWJsZSk7CkBAIC0xNzksNiArMTcyLDcgQEAKIC8qKgogICoJaWRlX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCiAgKglAZHJpdmU6IHRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglCdWlsZCBhbiBJREUgRE1BIFBSRCAoSURFIHNwZWFrIGZvciBzY2F0dGVyIGdhdGhlciB0YWJsZSkKICAqCWFuZCB0aGVuIHNldCB1cCB0aGUgRE1BIHRyYW5zZmVyIHJlZ2lzdGVycyBmb3IgYSBkZXZpY2UKQEAgLTE4OSwxNyArMTgzLDE2IEBACiAgKglpcyByZXR1cm5lZC4KICAqLwogCi1pbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwotCXVuc2lnbmVkIGludCByZWFkaW5nID0gcnFfZGF0YV9kaXIocnEpID8gMCA6IEFUQV9ETUFfV1I7CiAJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisJdTggcncgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAwIDogQVRBX0RNQV9XUjsKIAl1OCBkbWFfc3RhdDsKIAogCS8qIGZhbGwgYmFjayB0byBwaW8hICovCi0JaWYgKCFpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjEyLDkgKzIwNSw5IEBACiAKIAkvKiBzcGVjaWZ5IHIvdyAqLwogCWlmIChtbWlvKQotCQl3cml0ZWIocmVhZGluZywgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CisJCXdyaXRlYihydywgKHZvaWQgX19pb21lbSAqKShod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKSk7CiAJZWxzZQotCQlvdXRiKHJlYWRpbmcsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOworCQlvdXRiKHJ3LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAogCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwpAQCAtMjIyLDEzICsyMTUsMTIgQEAKIAkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAlpZGVfZG1hX3NmZl93cml0ZV9zdGF0dXMoaHdpZiwgZG1hX3N0YXQgfCBBVEFfRE1BX0VSUiB8IEFUQV9ETUFfSU5UUik7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2V0dXApOwogCiAvKioKLSAqCWRtYV90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAorICoJaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGEgRE1BIHRpbWVvdXQKICAqCUBkcml2ZTogRHJpdmUgdGhhdCB0aW1lZCBvdXQKICAqCiAgKglBbiBJREUgRE1BIHRyYW5zZmVyIHRpbWVkIG91dC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIHdlIGFzawpAQCAtMjQxLDcgKzIzMyw3IEBACiAgKglUaGlzIGNhbiBvY2N1ciBpZiBhbiBpbnRlcnJ1cHQgaXMgbG9zdCBvciBkdWUgdG8gaGFuZyBvciBidWdzLgogICovCiAKLXN0YXRpYyBpbnQgZG1hX3RpbWVyX2V4cGlyeShpZGVfZHJpdmVfdCAqZHJpdmUpCitpbnQgaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwpAQCAtMjY1LDE0ICsyNTcsNyBAQAogCiAJcmV0dXJuIDA7CS8qIFN0YXR1cyBpcyB1bmtub3duIC0tIHJlc2V0IHRoZSBidXMgKi8KIH0KLQotdm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsCi0JCQkgICAgZG1hX3RpbWVyX2V4cGlyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2V4ZWNfY21kKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSk7CiAKIHZvaWQgaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0zMDMsOCArMjg4LDYgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMCwgbWFzazsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCiAJLyogc3RvcCBETUEgKi8KIAlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSB7CiAJCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKQEAgLTMyMSw4ICszMDQsNiBAQAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBiaXRzICovCiAJaWRlX2RtYV9zZmZfd3JpdGVfc3RhdHVzKGh3aWYsIGRtYV9zdGF0IHwgQVRBX0RNQV9FUlIgfCBBVEFfRE1BX0lOVFIpOwogCi0JLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwogCXdtYigpOwogCiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwpAQCAtMzQ2LDEyICszMjcsMTEgQEAKIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoc2ZmX2RtYV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IGE4NzhmNDcuLmEwYjhjYWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC04OSwxNiArODksMjEgQEAKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAl1OCBzdGF0ID0gMCwgZG1hX3N0YXQgPSAwOwogCisJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAJZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwlpZGVfZG1hX3VubWFwX3NnKGRyaXZlLCBjbWQpOwogCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKE9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQgfCBBVEFfRFJRKSkgewogCQlpZiAoIWRtYV9zdGF0KSB7Ci0JCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQotCQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOworCQkJaWYgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSA9PSAwKQorCQkJCWlkZV9maW5pc2hfY21kKGRyaXZlLCBjbWQsIHN0YXQpOworCQkJZWxzZQorCQkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwKKwkJCQkJCWNtZC0+cnEtPm5yX3NlY3RvcnMgPDwgOSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IGJhZCBETUEgc3RhdHVzICgweCUwMngpXG4iLApAQCAtMTA2LDcgKzExMSw2IEBACiAJfQogCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsICJkbWFfaW50ciIsIHN0YXQpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9pbnRyKTsKIAogaW50IGlkZV9kbWFfZ29vZF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0xMTQsOSArMTE4LDkgQEAKIH0KIAogLyoqCi0gKglpZGVfYnVpbGRfc2dsaXN0CS0JbWFwIElERSBzY2F0dGVyIGdhdGhlciBmb3IgRE1BIEkvTwotICoJQGRyaXZlOiB0aGUgZHJpdmUgdG8gYnVpbGQgdGhlIERNQSB0YWJsZSBmb3IKLSAqCUBycTogdGhlIHJlcXVlc3QgaG9sZGluZyB0aGUgc2cgbGlzdAorICoJaWRlX2RtYV9tYXBfc2cJLQltYXAgSURFIHNjYXR0ZXIgZ2F0aGVyIGZvciBETUEgSS9PCisgKglAZHJpdmU6IHRoZSBkcml2ZSB0byBtYXAgdGhlIERNQSB0YWJsZSBmb3IKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglQZXJmb3JtIHRoZSBETUEgbWFwcGluZyBtYWdpYyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBzb3VyY2Ugb3IKICAqCXRhcmdldCBidWZmZXJzIG9mIGEgcmVxdWVzdCB2aWEgRE1BLiAgVGhlIGxvd2VyIGxheWVycyBvZiB0aGUKQEAgLTEyNCwzMSArMTI4LDI4IEBACiAgKglvcGVyYXRlIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KICAqLwogCi1pbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgaWRlX2RtYV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAJaW50IGk7CiAKLQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7Ci0KLQlpZiAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpCi0JCWh3aWYtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCisJCWNtZC0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJZWxzZQotCQlod2lmLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJY21kLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCi0JaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgaHdpZi0+c2dfbmVudHMsIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCWkgPSBkbWFfbWFwX3NnKGh3aWYtPmRldiwgc2csIGNtZC0+c2dfbmVudHMsIGNtZC0+c2dfZG1hX2RpcmVjdGlvbik7CiAJaWYgKGkpIHsKLQkJaHdpZi0+b3JpZ19zZ19uZW50cyA9IGh3aWYtPnNnX25lbnRzOwotCQlod2lmLT5zZ19uZW50cyA9IGk7CisJCWNtZC0+b3JpZ19zZ19uZW50cyA9IGNtZC0+c2dfbmVudHM7CisJCWNtZC0+c2dfbmVudHMgPSBpOwogCX0KIAogCXJldHVybiBpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX3NnbGlzdCk7CiAKIC8qKgotICoJaWRlX2Rlc3Ryb3lfZG1hdGFibGUJLQljbGVhbiB1cCBETUEgbWFwcGluZworICoJaWRlX2RtYV91bm1hcF9zZwktCWNsZWFuIHVwIERNQSBtYXBwaW5nCiAgKglAZHJpdmU6IFRoZSBkcml2ZSB0byB1bm1hcAogICoKICAqCVRlYXJkb3duIG1hcHBpbmdzIGFmdGVyIERNQSBoYXMgY29tcGxldGVkLiBUaGlzIG11c3QgYmUgY2FsbGVkCkBAIC0xNTgsMTQgKzE1OSwxNCBAQAogICoJdGltZS4KICAqLwogCi12b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSkKK3ZvaWQgaWRlX2RtYV91bm1hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCi0JZG1hX3VubWFwX3NnKGh3aWYtPmRldiwgaHdpZi0+c2dfdGFibGUsIGh3aWYtPm9yaWdfc2dfbmVudHMsCi0JCSAgICAgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7CisJZG1hX3VubWFwX3NnKGh3aWYtPmRldiwgaHdpZi0+c2dfdGFibGUsIGNtZC0+b3JpZ19zZ19uZW50cywKKwkJICAgICBjbWQtPnNnX2RtYV9kaXJlY3Rpb24pOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Rlc3Ryb3lfZG1hdGFibGUpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV91bm1hcF9zZyk7CiAKIC8qKgogICoJaWRlX2RtYV9vZmZfcXVpZXRseQktCUdlbmVyaWMgRE1BIGtpbGwKQEAgLTI0NCwxMiArMjQ1LDExIEBACiAJY2FzZSBYRkVSX1VETUFfMDoKIAkJaWYgKChpZFtBVEFfSURfRklFTERfVkFMSURdICYgNCkgPT0gMCkKIAkJCWJyZWFrOwotCisJCW1hc2sgPSBpZFtBVEFfSURfVURNQV9NT0RFU107CiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+dWRtYV9maWx0ZXIpCi0JCQltYXNrID0gcG9ydF9vcHMtPnVkbWFfZmlsdGVyKGRyaXZlKTsKKwkJCW1hc2sgJj0gcG9ydF9vcHMtPnVkbWFfZmlsdGVyKGRyaXZlKTsKIAkJZWxzZQotCQkJbWFzayA9IGh3aWYtPnVsdHJhX21hc2s7Ci0JCW1hc2sgJj0gaWRbQVRBX0lEX1VETUFfTU9ERVNdOworCQkJbWFzayAmPSBod2lmLT51bHRyYV9tYXNrOwogCiAJCS8qCiAJCSAqIGF2b2lkIGZhbHNlIGNhYmxlIHdhcm5pbmcgZnJvbSBlaWdodHlfbmludHlfdGhyZWUoKQpAQCAtMjYwLDE4ICsyNjAsMjMgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFhGRVJfTVdfRE1BXzA6Ci0JCWlmICgoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpID09IDApCi0JCQlicmVhazsKKwkJbWFzayA9IGlkW0FUQV9JRF9NV0RNQV9NT0RFU107CisKKwkJLyogQWxzbyBsb29rIGZvciB0aGUgQ0Ygc3BlY2lmaWMgTVdETUEgbW9kZXMuLi4gKi8KKwkJaWYgKGF0YV9pZF9pc19jZmEoaWQpICYmIChpZFtBVEFfSURfQ0ZBX01PREVTXSAmIDB4MzgpKSB7CisJCQl1OCBtb2RlID0gKChpZFtBVEFfSURfQ0ZBX01PREVTXSAmIDB4MzgpID4+IDMpIC0gMTsKKworCQkJbWFzayB8PSAoKDIgPDwgbW9kZSkgLSAxKSA8PCAzOworCQl9CisKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5tZG1hX2ZpbHRlcikKLQkJCW1hc2sgPSBwb3J0X29wcy0+bWRtYV9maWx0ZXIoZHJpdmUpOworCQkJbWFzayAmPSBwb3J0X29wcy0+bWRtYV9maWx0ZXIoZHJpdmUpOwogCQllbHNlCi0JCQltYXNrID0gaHdpZi0+bXdkbWFfbWFzazsKLQkJbWFzayAmPSBpZFtBVEFfSURfTVdETUFfTU9ERVNdOworCQkJbWFzayAmPSBod2lmLT5td2RtYV9tYXNrOwogCQlicmVhazsKIAljYXNlIFhGRVJfU1dfRE1BXzA6Ci0JCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewotCQkJbWFzayA9IGlkW0FUQV9JRF9TV0RNQV9NT0RFU10gJiBod2lmLT5zd2RtYV9tYXNrOwotCQl9IGVsc2UgaWYgKGlkW0FUQV9JRF9PTERfRE1BX01PREVTXSA+PiA4KSB7CisJCW1hc2sgPSBpZFtBVEFfSURfU1dETUFfTU9ERVNdOworCQlpZiAoIShtYXNrICYgQVRBX1NXRE1BMikgJiYgKGlkW0FUQV9JRF9PTERfRE1BX01PREVTXSA+PiA4KSkgewogCQkJdTggbW9kZSA9IGlkW0FUQV9JRF9PTERfRE1BX01PREVTXSA+PiA4OwogCiAJCQkvKgpAQCAtMjc5LDggKzI4NCw5IEBACiAJCQkgKiAodGhlIG1heGltdW0gYWxsb3dlZCBtb2RlIGlzIFhGRVJfU1dfRE1BXzIpCiAJCQkgKi8KIAkJCWlmIChtb2RlIDw9IDIpCi0JCQkJbWFzayA9ICgoMiA8PCBtb2RlKSAtIDEpICYgaHdpZi0+c3dkbWFfbWFzazsKKwkJCQltYXNrID0gKDIgPDwgbW9kZSkgLSAxOwogCQl9CisJCW1hc2sgJj0gaHdpZi0+c3dkbWFfbWFzazsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC0zOTcsMTEgKzQwMywxMCBAQAogCQlpZiAoKGlkW0FUQV9JRF9VRE1BX01PREVTXSA+PiA4KSAmJgogCQkgICAgKGlkW0FUQV9JRF9NV0RNQV9NT0RFU10gPj4gOCkpCiAJCQlnb3RvIGVycl9vdXQ7Ci0JfSBlbHNlIGlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewotCQlpZiAoKGlkW0FUQV9JRF9NV0RNQV9NT0RFU10gPj4gOCkgJiYKLQkJICAgIChpZFtBVEFfSURfU1dETUFfTU9ERVNdID4+IDgpKQotCQkJZ290byBlcnJfb3V0OwotCX0KKwl9IGVsc2UgaWYgKChpZFtBVEFfSURfTVdETUFfTU9ERVNdID4+IDgpICYmCisJCSAgIChpZFtBVEFfSURfU1dETUFfTU9ERVNdID4+IDgpKQorCQlnb3RvIGVycl9vdXQ7CisKIAlyZXR1cm4gMDsKIGVycl9vdXQ6CiAJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIERNQSBpbmZvIGluIGlkZW50aWZ5IGJsb2NrXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC00NTUsMjEgKzQ2MCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2xvc3RfaXJxKTsKIAotdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iLCBkcml2ZS0+bmFtZSk7Ci0KLQlpZiAoaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKSkKLQkJcmV0dXJuOwotCi0JaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAiRE1BIHRpbWVvdXQiLCBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpKTsKLQotCWh3aWYtPmRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90aW1lb3V0KTsKLQogLyoKICAqIHVuLWJ1c3kgdGhlIHBvcnQgZXRjLCBhbmQgY2xlYXIgYW55IHBlbmRpbmcgRE1BIHN0YXR1cy4gd2Ugd2FudCB0bwogICogcmV0cnkgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbiBwaW8gbW9kZSBpbnN0ZWFkIG9mIHJpc2tpbmcgdG9zc2luZyBpdApAQCAtNDc4LDYgKzQ2OCw4IEBACiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGVycm9yKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBod2lmLT5kbWFfb3BzOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpZGVfc3RhcnRzdG9wX3QgcmV0ID0gaWRlX3N0b3BwZWQ7CiAKQEAgLTQ4NywxMiArNDc5LDIzIEBACiAKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOwotCQkodm9pZClod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CisJCSh2b2lkKWRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOworCQlpZGVfZG1hX3VubWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXQgPSBpZGVfZXJyb3IoZHJpdmUsICJkbWEgdGltZW91dCBlcnJvciIsCiAJCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERNQSB0aW1lb3V0IHJldHJ5XG4iLCBkcml2ZS0+bmFtZSk7Ci0JCWh3aWYtPmRtYV9vcHMtPmRtYV90aW1lb3V0KGRyaXZlKTsKKwkJaWYgKGRtYV9vcHMtPmRtYV9jbGVhcikKKwkJCWRtYV9vcHMtPmRtYV9jbGVhcihkcml2ZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgRE1BXG4iLCBkcml2ZS0+bmFtZSk7CisJCWlmIChkbWFfb3BzLT5kbWFfdGVzdF9pcnEoZHJpdmUpID09IDApIHsKKwkJCWlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgIkRNQSB0aW1lb3V0IiwKKwkJCQkJaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7CisJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKKwkJCSh2b2lkKWRtYV9vcHMtPmRtYV9lbmQoZHJpdmUpOworCQkJaWRlX2RtYV91bm1hcF9zZyhkcml2ZSwgY21kKTsKKwkJfQogCX0KIAogCS8qCkBAIC01NjIsMyArNTY1LDI1IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZSk7CisKK2ludCBpZGVfZG1hX3ByZXBhcmUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQoreworCWNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyAqZG1hX29wcyA9IGRyaXZlLT5od2lmLT5kbWFfb3BzOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCB8fAorCSAgICAoZG1hX29wcy0+ZG1hX2NoZWNrICYmIGRtYV9vcHMtPmRtYV9jaGVjayhkcml2ZSwgY21kKSkpCisJCWdvdG8gb3V0OworCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CisJaWYgKGlkZV9kbWFfbWFwX3NnKGRyaXZlLCBjbWQpID09IDApCisJCWdvdG8gb3V0X21hcDsKKwlpZiAoZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpKQorCQlnb3RvIG91dF9kbWFfdW5tYXA7CisJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CisJcmV0dXJuIDA7CitvdXRfZG1hX3VubWFwOgorCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CitvdXRfbWFwOgorCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CitvdXQ6CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZWguYyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCmluZGV4IDEyMzFiNWUuLjVkNWZiOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1laC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCkBAIC0xMjMsOCArMTIzLDE4IEBACiAKIAkvKiByZXRyeSBvbmx5ICJub3JtYWwiIEkvTzogKi8KIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewotCQlycS0+ZXJyb3JzID0gMTsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7CisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CisJCQlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gcnEtPnNwZWNpYWw7CisKKwkJCWlmIChjbWQpCisJCQkJaWRlX2NvbXBsZXRlX2NtZChkcml2ZSwgY21kLCBzdGF0LCBlcnIpOworCQl9IGVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgeworCQkJcnEtPmVycm9ycyA9IDE7CisJCQlpZGVfY29tcGxldGVfcG1fcnEoZHJpdmUsIHJxKTsKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfQorCQlycS0+ZXJyb3JzID0gZXJyOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IC1FSU8gOiAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIApAQCAtMTM2LDggKzE0NiwxMSBAQAogewogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKIAotCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKKwlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpIHsKKwkJaWYgKGVyciA8PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IGVyciA6IDAsIGlkZV9ycV9ieXRlcyhycSkpOworCX0KIH0KIAogLyogbmVlZGVkIGJlbG93ICovCkBAIC0xNTIsMTggKzE2NSwxOCBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBhdGFwaV9yZXNldF9wb2xsZnVuYyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJdTggc3RhdDsKIAotCVNFTEVDVF9EUklWRShkcml2ZSk7CisJdHBfb3BzLT5kZXZfc2VsZWN0KGRyaXZlKTsKIAl1ZGVsYXkoMTApOwotCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQogCQlwcmludGsoS0VSTl9JTkZPICIlczogQVRBUEkgcmVzZXQgY29tcGxldGVcbiIsIGRyaXZlLT5uYW1lKTsKIAllbHNlIHsKIAkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwKLQkJCQkJTlVMTCk7CisJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZhdGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjApOwogCQkJLyogY29udGludWUgcG9sbGluZyAqLwogCQkJcmV0dXJuIGlkZV9zdGFydGVkOwogCQl9CkBAIC0yMjUsNyArMjM4LDcgQEAKIAogCWlmICghT0tfU1RBVCh0bXAsIDAsIEFUQV9CVVNZKSkgewogCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCk7CiAJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCX0KQEAgLTMzNiwxMyArMzQ5LDEzIEBACiAJLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3QgdHJ5IGFuIEFUQVBJIFNSU1QuICovCiAJaWYgKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzayAmJiAhZG9fbm90X3RyeV9hdGFwaSkgewogCQlwcmVfcmVzZXQoZHJpdmUpOwotCQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCQl0cF9vcHMtPmRldl9zZWxlY3QoZHJpdmUpOwogCQl1ZGVsYXkoMjApOwogCQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX0RFVl9SRVNFVCk7CiAJCW5kZWxheSg0MDApOwogCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJCWh3aWYtPnBvbGxpbmcgPSAxOwotCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfQpAQCAtMzg5LDIwICs0MDIsMTkgQEAKIAkgKiBpbW1lZGlhdGUgaW50ZXJydXB0IGR1ZSB0byB0aGUgZWRnZSB0cmFuc2l0aW9uIGl0IHByb2R1Y2VzLgogCSAqIFRoaXMgc2luZ2xlIGludGVycnVwdCBnaXZlcyB1cyBhICJmYXN0IHBvbGwiIGZvciBkcml2ZXMgdGhhdAogCSAqIHJlY292ZXIgZnJvbSByZXNldCB2ZXJ5IHF1aWNrbHksIHNhdmluZyB1cyB0aGUgZmlyc3QgNTBtcyB3YWl0IHRpbWUuCi0JICoKLQkgKiBUT0RPOiBhZGQgLT5zb2Z0cmVzZXQgbWV0aG9kIGFuZCBzdG9wIGFidXNpbmcgLT5zZXRfaXJxCiAJICovCiAJLyogc2V0IFNSU1QgYW5kIG5JRU4gKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7CisJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX1NSU1QgfCBBVEFfTklFTiB8IEFUQV9ERVZDVExfT0JTKTsKIAkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KIAl1ZGVsYXkoMTApOwogCS8qIGNsZWFyIFNSU1QsIGxlYXZlIG5JRU4gKHVubGVzcyBkZXZpY2UgaXMgb24gdGhlIHF1aXJrIGxpc3QpICovCi0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIGRyaXZlLT5xdWlya19saXN0ID09IDIpOworCXRwX29wcy0+d3JpdGVfZGV2Y3RsKGh3aWYsIChkcml2ZS0+cXVpcmtfbGlzdCA9PSAyID8gMCA6IEFUQV9OSUVOKSB8CisJCQkgICAgIEFUQV9ERVZDVExfT0JTKTsKIAkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KIAl1ZGVsYXkoMTApOwogCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKIAlod2lmLT5wb2xsaW5nID0gMTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjApOwogCiAJLyoKIAkgKiBTb21lIHdlaXJkIGNvbnRyb2xsZXIgbGlrZSByZXNldHRpbmcgdGhlbXNlbHZlcyB0byBhIHN0cmFuZ2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwppbmRleCAzMTdlYzYyLi4yYjQ4NjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCkBAIC02MSw3MyArNjEsMjAgQEAKICAqLwogI2RlZmluZSBJREVGTE9QUFlfUENfREVMQVkJKEhaLzIwKQkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLwogCi0vKiBFcnJvciBjb2RlIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lCUlERUZMT1BQWV9FUlJPUl9HRU5FUkFMCQkxMDEKLQotLyoKLSAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKLSAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLSAqLwotc3RhdGljIGludCBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQlpbnQgZXJyb3I7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6Ci0JCWVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyb3IgPSB1cHRvZGF0ZTsKLQl9Ci0KLQlpZiAoZXJyb3IpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkvKiBXaHkgZG9lcyB0aGlzIGhhcHBlbj8gKi8KLQlpZiAoIXJxKQotCQlyZXR1cm4gMDsKLQlpZiAoIWJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7Ci0JCS8qIG91ciByZWFsIGxvY2FsIGVuZCByZXF1ZXN0IGZ1bmN0aW9uICovCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWNzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJxLT5lcnJvcnMgPSBlcnJvcjsKLQkvKiBmaXhtZTogbmVlZCB0byBtb3ZlIHRoaXMgbG9jYWwgYWxzbyAqLwotCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCAwLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwYy0+cnE7Ci0Jc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKLQotCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkKLQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQorc3RhdGljIGludCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gcGMtPnJxOwogCWludCB1cHRvZGF0ZSA9IHBjLT5lcnJvciA/IDAgOiAxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCi0JaWYgKGZsb3BweS0+ZmFpbGVkX3BjID09IHBjKQotCQlmbG9wcHktPmZhaWxlZF9wYyA9IE5VTEw7CisJaWYgKGRyaXZlLT5mYWlsZWRfcGMgPT0gcGMpCisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCiAJaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFQURfMTAgfHwgcGMtPmNbMF0gPT0gR1BDTURfV1JJVEVfMTAgfHwKLQkgICAgKHBjLT5ycSAmJiBibGtfcGNfcmVxdWVzdChwYy0+cnEpKSkKKwkgICAgKHJxICYmIGJsa19wY19yZXF1ZXN0KHJxKSkpCiAJCXVwdG9kYXRlID0gMTsgLyogRklYTUUgKi8KIAllbHNlIGlmIChwYy0+Y1swXSA9PSBHUENNRF9SRVFVRVNUX1NFTlNFKSB7CiAJCXU4ICpidWYgPSBwYy0+YnVmOwpAQCAtMTM5LDE5ICs4NiwyMiBAQAogCQkJZmxvcHB5LT5wcm9ncmVzc19pbmRpY2F0aW9uID0gYnVmWzE1XSAmIDB4ODAgPwogCQkJCSh1MTYpZ2V0X3VuYWxpZ25lZCgodTE2ICopJmJ1ZlsxNl0pIDogMHgxMDAwMDsKIAotCQkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjKQotCQkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgInBjID0gJXgsICIsCi0JCQkJCSAgICAgIGZsb3BweS0+ZmFpbGVkX3BjLT5jWzBdKTsKKwkJCWlmIChkcml2ZS0+ZmFpbGVkX3BjKQorCQkJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgInBjID0gJXgiLAorCQkJCQkgICAgICBkcml2ZS0+ZmFpbGVkX3BjLT5jWzBdKTsKIAogCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAic2Vuc2Uga2V5ID0gJXgsIGFzYyA9ICV4LCIKLQkJCQkgICAgICAiYXNjcSA9ICV4XG4iLCBmbG9wcHktPnNlbnNlX2tleSwKKwkJCQkgICAgICAiYXNjcSA9ICV4IiwgZmxvcHB5LT5zZW5zZV9rZXksCiAJCQkJICAgICAgZmxvcHB5LT5hc2MsIGZsb3BweS0+YXNjcSk7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3IgaW4gUkVRVUVTVCBTRU5TRSBpdHNlbGYgLSAiCiAJCQkgICAgICAgIkFib3J0aW5nIHJlcXVlc3QhXG4iKTsKIAl9CiAKLQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CisJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKQorCQlycS0+ZXJyb3JzID0gdXB0b2RhdGUgPyAwIDogSURFX0RSVl9FUlJPUl9HRU5FUkFMOworCisJcmV0dXJuIHVwdG9kYXRlOwogfQogCiBzdGF0aWMgdm9pZCBpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHksCkBAIC0xNzAsMTQgKzEyMCwxNSBAQAogCiB9CiAKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlZmxvcHB5X2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9mbG9wcHlfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgICBzdHJ1Y3QgaWRlX2NtZCAqY21kLAorCQkJCQkgICBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMgPT0gTlVMTCAmJgorCWlmIChkcml2ZS0+ZmFpbGVkX3BjID09IE5VTEwgJiYKIAkgICAgcGMtPmNbMF0gIT0gR1BDTURfUkVRVUVTVF9TRU5TRSkKLQkJZmxvcHB5LT5mYWlsZWRfcGMgPSBwYzsKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IHBjOwogCiAJLyogU2V0IHRoZSBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCiAJZHJpdmUtPnBjID0gcGM7CkBAIC0xODYsMTggKzEzNywxOCBAQAogCQlpZiAoIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1NVUFBSRVNTX0VSUk9SKSkKIAkJCWlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGZsb3BweSwgcGMpOwogCQkvKiBHaXZpbmcgdXAgKi8KLQkJcGMtPmVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7CisJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAotCQlmbG9wcHktPmZhaWxlZF9wYyA9IE5VTEw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogUmV0cnkgIyVkXG4iLCBfX2Z1bmNfXywgcGMtPnJldHJpZXMpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAicmV0cnkgIyVkIiwgcGMtPnJldHJpZXMpOwogCiAJcGMtPnJldHJpZXMrKzsKIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUpOworCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsIGNtZCk7CiB9CiAKIHZvaWQgaWRlX2Zsb3BweV9jcmVhdGVfcmVhZF9jYXBhY2l0eV9jbWQoc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMpCkBAIC0yNDIsOCArMTkzLDcgQEAKIAlpbnQgYmxvY2tzID0gcnEtPm5yX3NlY3RvcnMgLyBmbG9wcHktPmJzX2ZhY3RvcjsKIAlpbnQgY21kID0gcnFfZGF0YV9kaXIocnEpOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogYmxvY2s6ICVkLCBibG9ja3M6ICVkXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgYmxvY2ssIGJsb2Nrcyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJibG9jazogJWQsIGJsb2NrczogJWQiLCBibG9jaywgYmxvY2tzKTsKIAogCWlkZV9pbml0X3BjKHBjKTsKIAlwYy0+Y1swXSA9IGNtZCA9PSBSRUFEID8gR1BDTURfUkVBRF8xMCA6IEdQQ01EX1dSSVRFXzEwOwpAQCAtMjUzLDcgKzIwMyw2IEBACiAJbWVtY3B5KHJxLT5jbWQsIHBjLT5jLCAxMik7CiAKIAlwYy0+cnEgPSBycTsKLQlwYy0+Yl9jb3VudCA9IDA7CiAJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUlcpCiAJCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dSSVRJTkc7CiAJcGMtPmJ1ZiA9IE5VTEw7CkBAIC0yNjcsNyArMjE2LDYgQEAKIAlpZGVfaW5pdF9wYyhwYyk7CiAJbWVtY3B5KHBjLT5jLCBycS0+Y21kLCBzaXplb2YocGMtPmMpKTsKIAlwYy0+cnEgPSBycTsKLQlwYy0+Yl9jb3VudCA9IDA7CiAJaWYgKHJxLT5kYXRhX2xlbiAmJiBycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpCiAJCXBjLT5mbGFncyB8PSBQQ19GTEFHX1dSSVRJTkc7CiAJcGMtPmJ1ZiA9IHJxLT5kYXRhOwpAQCAtMjg0LDM1ICsyMzIsMzYgQEAKIAkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHNlY3Rvcl90IGJsb2NrKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKLQkJICAgICAgImVycm9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIsCi0JCSAgICAgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgcnEtPmVycm9ycyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciwgY21kOiAweCV4XG4iLCBycS0+Y21kWzBdKTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiJXM6IHNlY3RvcjogJWxkLCBucl9zZWN0b3JzOiAlbGQsICIKLQkJICAgICAgImN1cnJlbnRfbnJfc2VjdG9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCAobG9uZylycS0+c2VjdG9yLCBycS0+bnJfc2VjdG9ycywKLQkJICAgICAgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CisJaWYgKGRyaXZlLT5kZWJ1Z19tYXNrICYgSURFX0RCR19SUSkKKwkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIChycS0+cnFfZGlzaworCQkJCQk/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUKKwkJCQkJOiAiZGV2PyIpKTsKIAogCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgewotCQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMpCi0JCQlpZGVfZmxvcHB5X3JlcG9ydF9lcnJvcihmbG9wcHksIGZsb3BweS0+ZmFpbGVkX3BjKTsKLQkJZWxzZQorCQlpZiAoZHJpdmUtPmZhaWxlZF9wYykgeworCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBkcml2ZS0+ZmFpbGVkX3BjKTsKKwkJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCQl9IGVsc2UKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBJL08gZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKIAotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAwOworCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKKwkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJfSBlbHNlCisJCQlnb3RvIG91dF9lbmQ7CiAJfQogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKCgobG9uZylycS0+c2VjdG9yICUgZmxvcHB5LT5ic19mYWN0b3IpIHx8CiAJCSAgICAocnEtPm5yX3NlY3RvcnMgJSBmbG9wcHktPmJzX2ZhY3RvcikpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bnN1cHBvcnRlZCByL3cgcnEgc2l6ZVxuIiwKIAkJCQlkcml2ZS0+bmFtZSk7Ci0JCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJCWdvdG8gb3V0X2VuZDsKIAkJfQogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKIAkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZHJpdmUsIHBjLCBycSwgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwpAQCAtMzIzLDIxICsyNzIsMzAgQEAKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJ1bnN1cHBvcnRlZCBjb21tYW5kIGluIHF1ZXVlIik7Ci0JCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCWdvdG8gb3V0X2VuZDsKIAl9CiAKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKworCWNtZC5ycSA9IHJxOworCiAJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSB8fCBwYy0+cmVxX3hmZXIpIHsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJaWRlX2luaXRfc2dfY21kKCZjbWQsIHBjLT5yZXFfeGZlcik7CisJCWlkZV9tYXBfc2coZHJpdmUsICZjbWQpOwogCX0KIAotCXBjLT5zZyA9IGh3aWYtPnNnX3RhYmxlOwotCXBjLT5zZ19jbnQgPSBod2lmLT5zZ19uZW50czsKLQogCXBjLT5ycSA9IHJxOwogCi0JcmV0dXJuIGlkZWZsb3BweV9pc3N1ZV9wYyhkcml2ZSwgcGMpOworCXJldHVybiBpZGVfZmxvcHB5X2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CitvdXRfZW5kOgorCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCXJxLT5lcnJvcnMgPSAtRUlPOworCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgaWRlX3JxX2J5dGVzKHJxKSk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCiAvKgpAQCAtNDEzLDkgKzM3MSwxMSBAQAogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKmNhcF9kZXNjOwotCXU4IGhlYWRlcl9sZW4sIGRlc2NfY250OworCXU4IHBjX2J1ZlsyNTZdLCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgcmMgPSAxLCBibG9ja3MsIGxlbmd0aDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKKwogCWRyaXZlLT5iaW9zX2N5bCA9IDA7CiAJZHJpdmUtPmJpb3NfaGVhZCA9IGRyaXZlLT5iaW9zX3NlY3QgPSAwOwogCWZsb3BweS0+YmxvY2tzID0gMDsKQEAgLTQyMyw2ICszODMsOSBAQAogCWRyaXZlLT5jYXBhY2l0eTY0ID0gMDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKCZwYyk7CisJcGMuYnVmID0gJnBjX2J1ZlswXTsKKwlwYy5idWZfc2l6ZSA9IHNpemVvZihwY19idWYpOworCiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBkaXNrLCAmcGMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGdldCBmbG9wcHkgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAxOwpAQCAtNDM4LDggKzQwMSw5IEBACiAJCWxlbmd0aCA9IGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJnBjLmJ1ZltkZXNjX3N0YXJ0ICsgNl0pOwogCiAJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkRlc2NyaXB0b3IgJWQ6ICVka0IsICVkIGJsb2NrcywgIgotCQkJICAgICAgIiVkIHNlY3RvciBzaXplXG4iLAotCQkJICAgICAgaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwgYmxvY2tzLCBsZW5ndGgpOworCQkJCQkgICAgICIlZCBzZWN0b3Igc2l6ZSIsCisJCQkJCSAgICAgaSwgYmxvY2tzICogbGVuZ3RoIC8gMTAyNCwKKwkJCQkJICAgICBibG9ja3MsIGxlbmd0aCk7CiAKIAkJaWYgKGkpCiAJCQljb250aW51ZTsKQEAgLTQ5NSw4ICs0NTksOCBAQAogCQkJCSJpbiBkcml2ZVxuIiwgZHJpdmUtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KLQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiRGVzY3JpcHRvciAwIENvZGU6ICVkXG4iLAotCQkJICAgICAgcGMuYnVmW2Rlc2Nfc3RhcnQgKyA0XSAmIDB4MDMpOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yIDAgQ29kZTogJWQiLAorCQkJCQkgICAgIHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKTsKIAl9CiAKIAkvKiBDbGlrISBkaXNrIGRvZXMgbm90IHN1cHBvcnQgZ2V0X2ZsZXhpYmxlX2Rpc2tfcGFnZSAqLwpAQCAtNTEyLDggKzQ3Niw2IEBACiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAogCWRyaXZlLT5wY19jYWxsYmFjawkgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwotCWRyaXZlLT5wY191cGRhdGVfYnVmZmVycyA9IGlkZWZsb3BweV91cGRhdGVfYnVmZmVyczsKLQlkcml2ZS0+cGNfaW9fYnVmZmVycwkgPSBpZGVfaW9fYnVmZmVyczsKIAogCS8qCiAJICogV2UgdXNlZCB0byBjaGVjayByZXZpc2lvbnMgaGVyZS4gQXQgdGhpcyBwb2ludCBob3dldmVyIEknbSBnaXZpbmcgdXAuCkBAIC01NzUsNiArNTM3LDUgQEAKIAkuaW5pdF9tZWRpYQk9IGlkZV9mbG9wcHlfaW5pdF9tZWRpYSwKIAkuc2V0X2Rvb3Jsb2NrCT0gaWRlX3NldF9tZWRpYV9sb2NrLAogCS5kb19yZXF1ZXN0CT0gaWRlX2Zsb3BweV9kb19yZXF1ZXN0LAotCS5lbmRfcmVxdWVzdAk9IGlkZV9mbG9wcHlfZW5kX3JlcXVlc3QsCiAJLmlvY3RsCQk9IGlkZV9mbG9wcHlfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCmluZGV4IDhmOGJlODUuLmNkOGE0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKQEAgLTM2LDkgKzM2LDkgQEAKIAkJCQkJICAgIGludCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JdTggaGVhZGVyX2xlbiwgZGVzY19jbnQ7CiAJaW50IGksIGJsb2NrcywgbGVuZ3RoLCB1X2FycmF5X3NpemUsIHVfaW5kZXg7CiAJaW50IF9fdXNlciAqYXJncDsKKwl1OCBwY19idWZbMjU2XSwgaGVhZGVyX2xlbiwgZGVzY19jbnQ7CiAKIAlpZiAoZ2V0X3VzZXIodV9hcnJheV9zaXplLCBhcmcpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ3LDYgKzQ3LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChwYyk7CisJcGMtPmJ1ZiA9ICZwY19idWZbMF07CisJcGMtPmJ1Zl9zaXplID0gc2l6ZW9mKHBjX2J1Zik7CisKIAlpZiAoaWRlX3F1ZXVlX3BjX3RhaWwoZHJpdmUsIGZsb3BweS0+ZGlzaywgcGMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLWZsb3BweTogQ2FuJ3QgZ2V0IGZsb3BweSBwYXJhbWV0ZXJzXG4iKTsKIAkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCmluZGV4IDA0NzEwOTQuLjFhZWJkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZG9fcmVxdWVzdChkcml2ZSwgcnEsIHNlY3Rvcik7CiB9CiAKLXN0YXRpYyBpbnQgaWRlX2dkX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKQotewotCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmVuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnJzZWNzKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpZGVfZHJpdmVyIGlkZV9nZF9kcml2ZXIgPSB7CiAJLmdlbl9kcml2ZXIgPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTE2Miw3ICsxNTcsNiBAQAogCS5zaHV0ZG93bgkJPSBpZGVfZ2Rfc2h1dGRvd24sCiAJLnZlcnNpb24JCT0gSURFX0dEX1ZFUlNJT04sCiAJLmRvX3JlcXVlc3QJCT0gaWRlX2dkX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZV9nZF9lbmRfcmVxdWVzdCwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKIAkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKQEAgLTE4Miw3ICsxNzYsNyBAQAogCiAJZHJpdmUgPSBpZGtwLT5kcml2ZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlka3AtPm9wZW5lcnMrKzsKIApAQCAtMjMyLDcgKzIyNiw3IEBACiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKIAkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCmluZGV4IGI2MDRiZGQuLjU1OTcwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBJREVfR0RfREVCVUdfTE9HCTAKIAogI2lmIElERV9HRF9ERUJVR19MT0cKLSNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMjAsOCArMjAsNiBAQAogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAl1bnNpZ25lZCBpbnQJCW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwogCi0JLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CiAJLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCmluZGV4IDgxYTUyODIuLjc4MTJjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwpAQCAtMSwyNyArMSwyMiBAQAogLyoKICAqIGdlbmVyaWMvZGVmYXVsdCBJREUgaG9zdCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LTIwMDkgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICogVGhpcyBjb2RlIHdhcyBzcGxpdCBvZmYgZnJvbSBpZGUuYy4gIFNlZSBpdCBmb3Igb3JpZ2luYWwgY29weXJpZ2h0cy4KICAqCiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgKi8KIAotLyoKLSAqIEZvciBzcGVjaWFsIGNhc2VzIG5ldyBpbnRlcmZhY2VzIG1heSBiZSBhZGRlZCB1c2luZyBzeXNmcywgaS5lLgotICoKLSAqCWVjaG8gLW4gIjB4MTY4OjB4MzZlOjEwIiA+IC9zeXMvY2xhc3MvaWRlX2dlbmVyaWMvYWRkCi0gKgotICogd2lsbCBhZGQgYW4gaW50ZXJmYWNlIHVzaW5nIEkvTyBwb3J0cyAweDE2OC0weDE2Zi8weDM2ZSBhbmQgSVJRIDEwLgotICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogCi0vKiBGSVhNRTogY29udmVydCBtMzJyIHRvIHVzZSBpZGVfcGxhdGZvcm0gaG9zdCBkcml2ZXIgKi8KKy8qIEZJWE1FOiBjb252ZXJ0IGFybSBhbmQgbTMyciB0byB1c2UgaWRlX3BsYXRmb3JtIGhvc3QgZHJpdmVyICovCisjaWZkZWYgQ09ORklHX0FSTQorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNlbmRpZgogI2lmZGVmIENPTkZJR19NMzJSCiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNlbmRpZgpAQCAtMzIsNjIgKzI3LDE1IEBACiBtb2R1bGVfcGFyYW0ocHJvYmVfbWFzaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocHJvYmVfbWFzaywgInByb2JlIG1hc2sgZm9yIGxlZ2FjeSBJU0EgSURFIHBvcnRzIik7CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2FkZChzdHJ1Y3QgY2xhc3MgKmNscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKLXsKLQl1bnNpZ25lZCBpbnQgYmFzZSwgY3RsOwotCWludCBpcnEsIHJjOwotCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLQotCWlmIChzc2NhbmYoYnVmLCAiJXg6JXg6JWQiLCAmYmFzZSwgJmN0bCwgJmlycSkgIT0gMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlLCBjdGwpOwotCWh3LmlycSA9IGlycTsKLQlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7Ci0KLQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIG47CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlX2dlbmVyaWNfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBpZGVfZ2VuZXJpY19jbGFzc19hdHRyc1tdID0gewotCV9fQVRUUihhZGQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2FkZCksCi0JX19BVFRSX05VTEwKLX07Ci0KLXN0YXRpYyB2b2lkIGlkZV9nZW5lcmljX2NsYXNzX3JlbGVhc2Uoc3RydWN0IGNsYXNzICpjbHMpCi17Ci0Ja2ZyZWUoY2xzKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaWRlX2dlbmVyaWNfc3lzZnNfaW5pdCh2b2lkKQotewotCXN0cnVjdCBjbGFzcyAqY2xzOwotCWludCByYzsKLQotCWNscyA9IGt6YWxsb2Moc2l6ZW9mKCpjbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNscykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbHMtPm5hbWUgPSBEUlZfTkFNRTsKLQljbHMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY2xzLT5jbGFzc19yZWxlYXNlID0gaWRlX2dlbmVyaWNfY2xhc3NfcmVsZWFzZTsKLQljbHMtPmNsYXNzX2F0dHJzID0gaWRlX2dlbmVyaWNfY2xhc3NfYXR0cnM7Ci0KLQlyYyA9IGNsYXNzX3JlZ2lzdGVyKGNscyk7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGNscyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCisjaWZkZWYgQ09ORklHX0FSTQorc3RhdGljIGNvbnN0IHUxNiBsZWdhY3lfYmFzZXNbXSA9IHsgMHgxZjAgfTsKK3N0YXRpYyBjb25zdCBpbnQgbGVnYWN5X2lycXNbXSAgPSB7IElSUV9IQVJERElTSyB9OworI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX1BMQVRfT1BTUFVUKQogc3RhdGljIGNvbnN0IHUxNiBsZWdhY3lfYmFzZXNbXSA9IHsgMHgxZjAgfTsKIHN0YXRpYyBjb25zdCBpbnQgbGVnYWN5X2lycXNbXSAgPSB7IFBMRF9JUlFfQ0ZJUkVRIH07CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMykKQEAgLTEwMywxMSArNTEsMTEgQEAKIAogc3RhdGljIHZvaWQgaWRlX2dlbmVyaWNfY2hlY2tfcGNpX2xlZ2FjeV9pb2Jhc2VzKGludCAqcHJpbWFyeSwgaW50ICpzZWNvbmRhcnkpCiB7CisjaWZkZWYgQ09ORklHX1BDSQogCXN0cnVjdCBwY2lfZGV2ICpwID0gTlVMTDsKIAl1MTYgdmFsOwogCiAJZm9yX2VhY2hfcGNpX2RldihwKSB7Ci0KIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwLCAwKSA9PSAweDFmMCkKIAkJCSpwcmltYXJ5ID0gMTsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwLCAyKSA9PSAweDE3MCkKQEAgLTEyMiw3ICs3MCw2IEBACiAJCS8qIEludGVsIE1QSUlYIC0gUElPIEFUQSBvbiBub24gUENJIHNpZGUgb2YgYnJpZGdlICovCiAJCWlmIChwLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJgogCQkgICAgcC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFNWCkgewotCiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwLCAweDZDLCAmdmFsKTsKIAkJCWlmICh2YWwgJiAweDgwMDApIHsKIAkJCQkvKiBBVEEgcG9ydCBlbmFibGVkICovCkBAIC0xMzMsNiArODAsNyBAQAogCQkJfQogCQl9CiAJfQorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV9nZW5lcmljX2luaXQodm9pZCkKQEAgLTE2NCw2ICsxMTIsNyBAQAogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEkvTyByZXNvdXJjZSAweCVsWC0weCVsWCAiCiAJCQkJCQkibm90IGZyZWUuXG4iLAogCQkJCQkJRFJWX05BTUUsIGlvX2FkZHIsIGlvX2FkZHIgKyA3KTsKKwkJCQlyYyA9IC1FQlVTWTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTcyLDYgKzEyMSw3IEBACiAJCQkJCQkibm90IGZyZWUuXG4iLAogCQkJCQkJRFJWX05BTUUsIGlvX2FkZHIgKyAweDIwNik7CiAJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7CisJCQkJcmMgPSAtRUJVU1k7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTE4NCw3ICsxMzQsNyBAQAogI2VuZGlmCiAJCQlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQkJCXJjID0gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgTlVMTCk7CisJCQlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX2dlbmVyaWNfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCQkJaWYgKHJjKSB7CiAJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciArIDB4MjA2LCAxKTsKIAkJCQlyZWxlYXNlX3JlZ2lvbihpb19hZGRyLCA4KTsKQEAgLTE5MiwxMCArMTQyLDYgQEAKIAkJfQogCX0KIAotCWlmIChpZGVfZ2VuZXJpY19zeXNmc19pbml0KCkpCi0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGlkZV9nZW5lcmljICIKLQkJCQkJICJjbGFzc1xuIik7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jIGIvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKaW5kZXggOTI3MGQzMi4uZGFjOWE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKQEAgLTQ0LDg4ICs0NCw3OCBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGg4MzAwX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJdTggSElISSA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkKLQkJbW1fb3V0dygodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCW91dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQogCQlvdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlvdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCiAJCW91dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCW91dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQogCQlvdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCW91dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQogCQlvdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgaDgzMDBfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSBtbV9pbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCW91dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwlvdXRiKEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSBpbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQlvdXRiKEFUQV9IT0IgfCBBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKQEAgLTE0MywxMyArMTMzLDEzIEBACiAJCSpicCA9IGJzd2FwKCoodm9sYXRpbGUgdTE2ICopYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBoODMwMF9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCW1tX2luc3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgaDgzMDBfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBoODMwMF9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJbW1fb3V0c3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKQEAgLTE1OSw5ICsxNDksOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBoODMwMF90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IGg4MzAwX3RmX3JlYWQsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwppbmRleCA0NWI0M2RkLi45Y2FjMjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCkBAIC0yLDYgKzIsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykKKyNpbmNsdWRlIDxhc20vaWRlLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+CisjZW5kaWYKKwogLyoKICAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKICAqLwpAQCAtNTcsODMgKzY0LDc3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOwogCi12b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKK3ZvaWQgaWRlX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICpod2lmLCB1OCBjdGwpCiB7Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCiAJCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CiAJZWxzZQogCQlvdXRiKGN0bCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3dyaXRlX2RldmN0bCk7CiAKLXZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQordm9pZCBpZGVfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IHNlbGVjdCA9IGRyaXZlLT5zZWxlY3QgfCBBVEFfREVWSUNFX09CUzsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihzZWxlY3QsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5kZXZpY2VfYWRkcik7CisJZWxzZQorCQlvdXRiKHNlbGVjdCwgaHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2Rldl9zZWxlY3QpOworCit2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAogCWlmIChtbWlvKQogCQl0Zl9vdXRiID0gaWRlX21tX291dGI7CiAJZWxzZQogCQl0Zl9vdXRiID0gaWRlX291dGI7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwotCi0JCWlmIChtbWlvKQotCQkJd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQkJZWxzZQotCQkJb3V0dyhkYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQl9Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXRmX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQogCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCiAJCXRmX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJdGZfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQogCQl0Zl9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKIAkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKIAkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQogCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXRmX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCiAJCQkgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV90Zl9sb2FkKTsKIAotdm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit2b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKIAl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKQEAgLTE0Niw0NyArMTQ3LDM1IEBACiAJCXRmX2luYiAgPSBpZGVfaW5iOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCWlmIChtbWlvKQotCQkJZGF0YSA9IHJlYWR3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQkJZWxzZQotCQkJZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQotCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCXRmX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSB0Zl9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0Zl9vdXRiKEFUQV9IT0IgfCBBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJCXRmLT5ob2JfbGJhbSAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7CkBAIC0yMTIsMTcgKzIwMSwxNiBAQAogICogc28gaWYgYW4gb2RkIGxlbiBpcyBzcGVjaWZpZWQsIGJlIHN1cmUgdGhhdCB0aGVyZSdzIGF0IGxlYXN0IG9uZQogICogZXh0cmEgYnl0ZSBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIuCiAgKi8KLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKK3ZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB2b2lkICpidWYsCiAJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdW5zaWduZWQgaW50IHdvcmRzID0gKGxlbiArIDEpID4+IDE7CiAJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CiAJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CiAKLQlsZW4rKzsKLQogCWlmIChpb18zMmJpdCkgewogCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKIApAQCAtMjMxLDQ0ICsyMTksNDIgQEAKIAkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCX0KIAorCQl3b3JkcyA+Pj0gMTsKIAkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwogCQllbHNlCi0JCQlpbnNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJCWluc2woZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKIAogCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQkJaWYgKChsZW4gJiAzKSA+PSAyKSB7Ci0JCQlpZiAobW1pbykKLQkJCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlpbnN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobW1pbykKLQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWlmICgoKGxlbiArIDEpICYgMykgPCAyKQorCQkJcmV0dXJuOworCisJCWJ1ZiArPSBsZW4gJiB+MzsKKwkJd29yZHMgPSAxOwogCX0KKworCWlmIChtbWlvKQorCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOworCWVsc2UKKwkJaW5zdyhkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lucHV0X2RhdGEpOwogCiAvKgogICogVGhpcyBpcyB1c2VkIGZvciBtb3N0IFBJTyBkYXRhIHRyYW5zZmVycyAqdG8qIHRoZSBJREUgaW50ZXJmYWNlCiAgKi8KLXZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHZvaWQgKmJ1ZiwKIAkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdW5zaWduZWQgaW50IHdvcmRzID0gKGxlbiArIDEpID4+IDE7CiAJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CiAJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CiAKLQlsZW4rKzsKLQogCWlmIChpb18zMmJpdCkgewogCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKIApAQCAtMjc3LDI3ICsyNjMsMjYgQEAKIAkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCX0KIAorCQl3b3JkcyA+Pj0gMTsKIAkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CiAJCWVsc2UKLQkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CiAKIAkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JCWlmICgobGVuICYgMykgPj0gMikgewotCQkJaWYgKG1taW8pCi0JCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlvdXRzdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlvdXRzdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWlmICgoKGxlbiArIDEpICYgMykgPCAyKQorCQkJcmV0dXJuOworCisJCWJ1ZiArPSBsZW4gJiB+MzsKKwkJd29yZHMgPSAxOwogCX0KKworCWlmIChtbWlvKQorCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKKwllbHNlCisJCW91dHN3KGRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOwogCkBAIC0zMDUsOSArMjkwLDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggMmU5MjQ5Ny4uMWRlYjZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CkBAIC01NSwyNSArNTQsOSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBpbnQgX19pZGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIGludCB1cHRvZGF0ZSwgdW5zaWduZWQgaW50IG5yX2J5dGVzLCBpbnQgZGVxdWV1ZSkKK2ludCBpZGVfZW5kX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IsCisJICAgICAgIHVuc2lnbmVkIGludCBucl9ieXRlcykKIHsKLQlpbnQgcmV0ID0gMTsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKHVwdG9kYXRlIDw9IDApCi0JCWVycm9yID0gdXB0b2RhdGUgPyB1cHRvZGF0ZSA6IC1FSU87Ci0KLQkvKgotCSAqIGlmIGZhaWxmYXN0IGlzIHNldCBvbiBhIHJlcXVlc3QsIG92ZXJyaWRlIG51bWJlciBvZiBzZWN0b3JzIGFuZAotCSAqIGNvbXBsZXRlIHRoZSB3aG9sZSByZXF1ZXN0IHJpZ2h0IG5vdwotCSAqLwotCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSAmJiBlcnJvcikKLQkJbnJfYnl0ZXMgPSBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDk7Ci0KLQlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSAmJiBlcnJvciAmJiAhcnEtPmVycm9ycykKLQkJcnEtPmVycm9ycyA9IC1FSU87Ci0KIAkvKgogCSAqIGRlY2lkZSB3aGV0aGVyIHRvIHJlZW5hYmxlIERNQSAtLSAzIGlzIGEgcmFuZG9tIG1hZ2ljIGZvciBub3csCiAJICogaWYgd2UgRE1BIHRpbWVvdXQgbW9yZSB0aGFuIDMgdGltZXMsIGp1c3Qgc3RheSBpbiBQSU8KQEAgLTg0LDEyNyArNjcsOTYgQEAKIAkJaWRlX2RtYV9vbihkcml2ZSk7CiAJfQogCi0JaWYgKCFibGtfZW5kX3JlcXVlc3QocnEsIGVycm9yLCBucl9ieXRlcykpCi0JCXJldCA9IDA7Ci0KLQlpZiAocmV0ID09IDAgJiYgZGVxdWV1ZSkKLQkJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGJsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIG5yX2J5dGVzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9lbmRfcnEpOwogCi0vKioKLSAqCWlkZV9lbmRfcmVxdWVzdAkJLQljb21wbGV0ZSBhbiBJREUgSS9PCi0gKglAZHJpdmU6IElERSBkZXZpY2UgZm9yIHRoZSBJL08KLSAqCUB1cHRvZGF0ZToKLSAqCUBucl9zZWN0b3JzOiBudW1iZXIgb2Ygc2VjdG9ycyBjb21wbGV0ZWQKLSAqCi0gKglUaGlzIGlzIG91ciBlbmRfcmVxdWVzdCB3cmFwcGVyIGZ1bmN0aW9uLiBXZSBjb21wbGV0ZSB0aGUgSS9PCi0gKgl1cGRhdGUgcmFuZG9tIG51bWJlciBpbnB1dCBhbmQgZGVxdWV1ZSB0aGUgcmVxdWVzdCwgd2hpY2ggaWYKLSAqCWl0IHdhcyB0YWdnZWQgbWF5IGJlIG91dCBvZiBvcmRlci4KLSAqLwotCi1pbnQgaWRlX2VuZF9yZXF1ZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCit2b2lkIGlkZV9jb21wbGV0ZV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1OCBzdGF0LCB1OCBlcnIpCiB7Ci0JdW5zaWduZWQgaW50IG5yX2J5dGVzID0gbnJfc2VjdG9ycyA8PCA5OwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gZHJpdmUtPmh3aWYtPnRwX29wczsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+cnE7CisJdTggdGZfY21kID0gdGYtPmNvbW1hbmQ7CiAKLQlpZiAoIW5yX2J5dGVzKSB7Ci0JCWlmIChibGtfcGNfcmVxdWVzdChycSkpCi0JCQlucl9ieXRlcyA9IHJxLT5kYXRhX2xlbjsKLQkJZWxzZQotCQkJbnJfYnl0ZXMgPSBycS0+aGFyZF9jdXJfc2VjdG9ycyA8PCA5OworCXRmLT5lcnJvciA9IGVycjsKKwl0Zi0+c3RhdHVzID0gc3RhdDsKKworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgeworCQl1OCBkYXRhWzJdOworCisJCXRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgY21kLCBkYXRhLCAyKTsKKworCQl0Zi0+ZGF0YSA9IGRhdGFbMF07CisJCXRmLT5ob2JfZGF0YSA9IGRhdGFbMV07CiAJfQogCi0JcmV0dXJuIF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX2J5dGVzLCAxKTsKKwl0cF9vcHMtPnRmX3JlYWQoZHJpdmUsIGNtZCk7CisKKwlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVIpICYmCisJICAgIHRmX2NtZCA9PSBBVEFfQ01EX0lETEVJTU1FRElBVEUpIHsKKwkJaWYgKHRmLT5sYmFsICE9IDB4YzQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGhlYWQgdW5sb2FkIGZhaWxlZCFcbiIsCisJCQkgICAgICAgZHJpdmUtPm5hbWUpOworCQkJaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsIHRmKTsKKwkJfSBlbHNlCisJCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QQVJLRUQ7CisJfQorCisJaWYgKHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpCisJCW1lbWNweShycS0+c3BlY2lhbCwgY21kLCBzaXplb2YoKmNtZCkpOworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRFlOKQorCQlrZnJlZShjbWQpOwogfQotRVhQT1JUX1NZTUJPTChpZGVfZW5kX3JlcXVlc3QpOwogCi0vKioKLSAqCWlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdAktCWNvbXBsZXRlIGFuIElERSBJL08KLSAqCUBkcml2ZTogSURFIGRldmljZSBmb3IgdGhlIEkvTwotICoJQHVwdG9kYXRlOgotICoJQG5yX3NlY3RvcnM6IG51bWJlciBvZiBzZWN0b3JzIGNvbXBsZXRlZAotICoKLSAqCUNvbXBsZXRlIGFuIEkvTyB0aGF0IGlzIG5vIGxvbmdlciBvbiB0aGUgcmVxdWVzdCBxdWV1ZS4gVGhpcwotICoJdHlwaWNhbGx5IG9jY3VycyB3aGVuIHdlIHB1bGwgdGhlIHJlcXVlc3QgYW5kIGlzc3VlIGEgUkVRVUVTVF9TRU5TRS4KLSAqCVdlIG11c3Qgc3RpbGwgZmluaXNoIHRoZSBvbGQgcmVxdWVzdCBidXQgd2UgbXVzdCBub3QgdGFtcGVyIHdpdGggdGhlCi0gKglxdWV1ZSBpbiB0aGUgbWVhbnRpbWUuCi0gKgotICoJTk9URTogVGhpcyBwYXRoIGRvZXMgbm90IGhhbmRsZSBiYXJyaWVyLCBidXQgYmFycmllciBpcyBub3Qgc3VwcG9ydGVkCi0gKglvbiBpZGUtY2QgYW55d2F5LgotICovCi0KLWludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCisvKiBvYnNvbGV0ZSwgYmxrX3JxX2J5dGVzKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCAqLwordW5zaWduZWQgaW50IGlkZV9ycV9ieXRlcyhzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JQlVHX09OKCFibGtfcnFfc3RhcnRlZChycSkpOwotCi0JcmV0dXJuIF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX3NlY3RvcnMgPDwgOSwgMCk7CisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwkJcmV0dXJuIHJxLT5kYXRhX2xlbjsKKwllbHNlCisJCXJldHVybiBycS0+aGFyZF9jdXJfc2VjdG9ycyA8PCA5OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9ycV9ieXRlcyk7CiAKLS8qKgotICoJaWRlX2VuZF9kcml2ZV9jbWQJLQllbmQgYW4gZXhwbGljaXQgZHJpdmUgY29tbWFuZAotICoJQGRyaXZlOiBjb21tYW5kIAotICoJQHN0YXQ6IHN0YXR1cyBiaXRzCi0gKglAZXJyOiBlcnJvciBiaXRzCi0gKgotICoJQ2xlYW4gdXAgYWZ0ZXIgc3VjY2Vzcy9mYWlsdXJlIG9mIGFuIGV4cGxpY2l0IGRyaXZlIGNvbW1hbmQuCi0gKglUaGVzZSBnZXQgdGhyb3duIG9udG8gdGhlIHF1ZXVlIHNvIHRoZXkgYXJlIHN5bmNocm9uaXplZCB3aXRoCi0gKglyZWFsIEkvTyBvcGVyYXRpb25zIG9uIHRoZSBkcml2ZS4KLSAqCi0gKglJbiBMQkE0OCBtb2RlIHdlIGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIgc2V0IHR3aWNlIHRvIGdldAotICoJYWxsIHRoZSBleHRyYSBpbmZvcm1hdGlvbiBvdXQuCi0gKi8KLSAKLXZvaWQgaWRlX2VuZF9kcml2ZV9jbWQgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3RhdCwgdTggZXJyKQoraW50IGlkZV9jb21wbGV0ZV9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvciwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKwlpbnQgcmM7CiAKLQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewotCQlpZGVfdGFza190ICp0YXNrID0gKGlkZV90YXNrX3QgKilycS0+c3BlY2lhbDsKKwkvKgorCSAqIGlmIGZhaWxmYXN0IGlzIHNldCBvbiBhIHJlcXVlc3QsIG92ZXJyaWRlIG51bWJlciBvZiBzZWN0b3JzCisJICogYW5kIGNvbXBsZXRlIHRoZSB3aG9sZSByZXF1ZXN0IHJpZ2h0IG5vdworCSAqLworCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSAmJiBlcnJvciA8PSAwKQorCQlucl9ieXRlcyA9IHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOTsKIAotCQlpZiAodGFzaykgewotCQkJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJcmMgPSBpZGVfZW5kX3JxKGRyaXZlLCBycSwgZXJyb3IsIG5yX2J5dGVzKTsKKwlpZiAocmMgPT0gMCkKKwkJaHdpZi0+cnEgPSBOVUxMOwogCi0JCQl0Zi0+ZXJyb3IgPSBlcnI7Ci0JCQl0Zi0+c3RhdHVzID0gc3RhdDsKLQotCQkJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgdGFzayk7Ci0KLQkJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19EWU4pCi0JCQkJa2ZyZWUodGFzayk7Ci0JCX0KLQl9IGVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgewotCQlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKLQotCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOwotCQlpZiAocG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKLQkJCWlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0KGRyaXZlLCBycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlod2lmLT5ycSA9IE5VTEw7Ci0KLQlycS0+ZXJyb3JzID0gZXJyOwotCi0JaWYgKHVubGlrZWx5KGJsa19lbmRfcmVxdWVzdChycSwgKHJxLT5lcnJvcnMgPyAtRUlPIDogMCksCi0JCQkJICAgICBibGtfcnFfYnl0ZXMocnEpKSkpCi0JCUJVRygpOworCXJldHVybiByYzsKIH0KLUVYUE9SVF9TWU1CT0woaWRlX2VuZF9kcml2ZV9jbWQpOworRVhQT1JUX1NZTUJPTChpZGVfY29tcGxldGVfcnEpOwogCiB2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChycS0+cnFfZGlzaykgewotCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OworCXU4IGRydl9yZXEgPSBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+cnFfZGlzazsKKwl1OCBtZWRpYSA9IGRyaXZlLT5tZWRpYTsKIAotCQlkcnYgPSAqKHN0cnVjdCBpZGVfZHJpdmVyICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JCWRydi0+ZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwotCX0gZWxzZQotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOworCisJaWYgKChtZWRpYSA9PSBpZGVfZmxvcHB5IHx8IG1lZGlhID09IGlkZV90YXBlKSAmJiBkcnZfcmVxKSB7CisJCXJxLT5lcnJvcnMgPSAwOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGJsa19ycV9ieXRlcyhycSkpOworCX0gZWxzZSB7CisJCWlmIChtZWRpYSA9PSBpZGVfdGFwZSkKKwkJCXJxLT5lcnJvcnMgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisJCWVsc2UgaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmKQpAQCAtMjMyLDIwICsxODQsMjAgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Rpc2tfc3BlY2lhbChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3BlY2lhbF90ICpzID0gJmRyaXZlLT5zcGVjaWFsOwotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7Ci0JYXJncy5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKIAogCWlmIChzLT5iLnNldF9nZW9tZXRyeSkgewogCQlzLT5iLnNldF9nZW9tZXRyeSA9IDA7Ci0JCWlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoZHJpdmUsICZhcmdzLnRmKTsKKwkJaWRlX3RmX3NldF9zcGVjaWZ5X2NtZChkcml2ZSwgJmNtZC50Zik7CiAJfSBlbHNlIGlmIChzLT5iLnJlY2FsaWJyYXRlKSB7CiAJCXMtPmIucmVjYWxpYnJhdGUgPSAwOwotCQlpZGVfdGZfc2V0X3Jlc3RvcmVfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfcmVzdG9yZV9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+Yi5zZXRfbXVsdG1vZGUpIHsKIAkJcy0+Yi5zZXRfbXVsdG1vZGUgPSAwOwotCQlpZGVfdGZfc2V0X3NldG11bHRfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfc2V0bXVsdF9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+YWxsKSB7CiAJCWludCBzcGVjaWFsID0gcy0+YWxsOwogCQlzLT5hbGwgPSAwOwpAQCAtMjUzLDEwICsyMDUsMTAgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFIHwKLQkJCUlERV9URkxBR19DVVNUT01fSEFORExFUjsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFIHwKKwkJICAgICAgIElERV9URkxBR19DVVNUT01fSEFORExFUjsKIAotCWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJZG9fcndfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQpAQCAtMjg2LDMzICsyMzgsMjkgQEAKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKLXZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX21hcF9zZyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBjbWQtPnJxOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKIAkJc2dfaW5pdF9vbmUoc2csIHJxLT5idWZmZXIsIHJxLT5ucl9zZWN0b3JzICogU0VDVE9SX1NJWkUpOwotCQlod2lmLT5zZ19uZW50cyA9IDE7CisJCWNtZC0+c2dfbmVudHMgPSAxOwogCX0gZWxzZSBpZiAoIXJxLT5iaW8pIHsKIAkJc2dfaW5pdF9vbmUoc2csIHJxLT5kYXRhLCBycS0+ZGF0YV9sZW4pOwotCQlod2lmLT5zZ19uZW50cyA9IDE7Ci0JfSBlbHNlIHsKLQkJaHdpZi0+c2dfbmVudHMgPSBibGtfcnFfbWFwX3NnKGRyaXZlLT5xdWV1ZSwgcnEsIHNnKTsKLQl9CisJCWNtZC0+c2dfbmVudHMgPSAxOworCX0gZWxzZQorCQljbWQtPnNnX25lbnRzID0gYmxrX3JxX21hcF9zZyhkcml2ZS0+cXVldWUsIHJxLCBzZyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9tYXBfc2cpOwogCi12b2lkIGlkZV9pbml0X3NnX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2luaXRfc2dfY21kKHN0cnVjdCBpZGVfY21kICpjbWQsIHVuc2lnbmVkIGludCBucl9ieXRlcykKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlod2lmLT5uc2VjdCA9IGh3aWYtPm5sZWZ0ID0gcnEtPm5yX3NlY3RvcnM7Ci0JaHdpZi0+Y3Vyc2dfb2ZzID0gMDsKLQlod2lmLT5jdXJzZyA9IE5VTEw7CisJY21kLT5uYnl0ZXMgPSBjbWQtPm5sZWZ0ID0gbnJfYnl0ZXM7CisJY21kLT5jdXJzZ19vZnMgPSAwOworCWNtZC0+Y3Vyc2cgPSBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5pdF9zZ19jbWQpOwogCiAvKioKQEAgLTMzMCwyNCArMjc4LDE1IEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGV4ZWN1dGVfZHJpdmVfY21kIChpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCXN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCAqdGFzayA9IHJxLT5zcGVjaWFsOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBycS0+c3BlY2lhbDsKIAotCWlmICh0YXNrKSB7Ci0JCWh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLT5kYXRhX3BoYXNlOwotCi0JCXN3aXRjaCAoaHdpZi0+ZGF0YV9waGFzZSkgewotCQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQkJY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JCWNhc2UgVEFTS0ZJTEVfSU46Ci0JCQlpZGVfaW5pdF9zZ19jbWQoZHJpdmUsIHJxKTsKLQkJCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCWlmIChjbWQpIHsKKwkJaWYgKGNtZC0+cHJvdG9jb2wgPT0gQVRBX1BST1RfUElPKSB7CisJCQlpZGVfaW5pdF9zZ19jbWQoY21kLCBycS0+bnJfc2VjdG9ycyA8PCA5KTsKKwkJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCX0KIAotCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIHRhc2spOworCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGNtZCk7CiAJfQogCiAgCS8qCkBAIC0zNTcsOCArMjk2LDggQEAKICNpZmRlZiBERUJVRwogIAlwcmludGsoIiVzOiBEUklWRV9DTUQgKG51bGwpXG4iLCBkcml2ZS0+bmFtZSk7CiAjZW5kaWYKLQlpZGVfZW5kX2RyaXZlX2NtZChkcml2ZSwgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSwKLQkJCSAgaWRlX3JlYWRfZXJyb3IoZHJpdmUpKTsKKwlycS0+ZXJyb3JzID0gMDsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGJsa19ycV9ieXRlcyhycSkpOwogCiAgCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KQEAgLTM3Niw5ICszMTUsNyBAQAogCWNhc2UgUkVRX0RSSVZFX1JFU0VUOgogCQlyZXR1cm4gaWRlX2RvX3Jlc2V0KGRyaXZlKTsKIAlkZWZhdWx0OgotCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9zcGVjaWFsX3JxIC0gYmFkIHJlcXVlc3QiKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlCVUcoKTsKIAl9CiB9CiAKQEAgLTQxMSw3ICszNDgsNyBAQAogCWlmIChibGtfcG1fcmVxdWVzdChycSkpCiAJCWlkZV9jaGVja19wbV9zdGF0ZShkcml2ZSwgcnEpOwogCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT5kZXZfc2VsZWN0KGRyaXZlKTsKIAlpZiAoaWRlX3dhaXRfc3RhdCgmc3RhcnRzdG9wLCBkcml2ZSwgZHJpdmUtPnJlYWR5X3N0YXQsCiAJCQkgIEFUQV9CVVNZIHwgQVRBX0RSUSwgV0FJVF9SRUFEWSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZHJpdmUgbm90IHJlYWR5IGZvciBjb21tYW5kXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC00MzgsNyArMzc1LDcgQEAKIAkJCXN0YXJ0c3RvcCA9IGlkZV9zdGFydF9wb3dlcl9zdGVwKGRyaXZlLCBycSk7CiAJCQlpZiAoc3RhcnRzdG9wID09IGlkZV9zdG9wcGVkICYmCiAJCQkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKLQkJCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOworCQkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOwogCQkJcmV0dXJuIHN0YXJ0c3RvcDsKIAkJfSBlbHNlIGlmICghcnEtPnJxX2Rpc2sgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCiAJCQkvKgpAQCAtNTAxLDggKzQzOCw4IEBACiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7CiAJCXJjID0gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCQlpZiAocmMgPT0gMCkgewotCQkJLyogZm9yIGF0YXJpIG9ubHkgKi8KLQkJCWlkZV9nZXRfbG9jayhpZGVfaW50ciwgaHdpZik7CisJCQlpZiAoaG9zdC0+Z2V0X2xvY2spCisJCQkJaG9zdC0+Z2V0X2xvY2soaWRlX2ludHIsIGh3aWYpOwogCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTUxMSw4ICs0NDgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGlkZV91bmxvY2tfaG9zdChzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QpCiB7CiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCS8qIGZvciBhdGFyaSBvbmx5ICovCi0JCWlkZV9yZWxlYXNlX2xvY2soKTsKKwkJaWYgKGhvc3QtPnJlbGVhc2VfbG9jaykKKwkJCWhvc3QtPnJlbGVhc2VfbG9jaygpOwogCQljbGVhcl9iaXRfdW5sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCX0KIH0KQEAgLTU1NCwxMSArNDkxLDEwIEBACiAJCXByZXZfcG9ydCA9IGh3aWYtPmhvc3QtPmN1cl9wb3J0OwogCQlod2lmLT5ycSA9IE5VTEw7CiAKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfU0xFRVBJTkcpIHsKLQkJCWlmICh0aW1lX2JlZm9yZShkcml2ZS0+c2xlZXAsIGppZmZpZXMpKSB7Ci0JCQkJaWRlX3VubG9ja19wb3J0KGh3aWYpOwotCQkJCWdvdG8gcGx1Z19kZXZpY2U7Ci0JCQl9CisJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NMRUVQSU5HICYmCisJCSAgICB0aW1lX2FmdGVyKGRyaXZlLT5zbGVlcCwgamlmZmllcykpIHsKKwkJCWlkZV91bmxvY2tfcG9ydChod2lmKTsKKwkJCWdvdG8gcGx1Z19kZXZpY2U7CiAJCX0KIAogCQlpZiAoKGh3aWYtPmhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSAmJgpAQCAtNTY4LDcgKzUwNCw5IEBACiAJCQkgKiBxdWlya19saXN0IG1heSBub3QgbGlrZSBpbnRyIHNldHVwcy9jbGVhbnVwcwogCQkJICovCiAJCQlpZiAocHJldl9wb3J0ICYmIHByZXZfcG9ydC0+Y3VyX2Rldi0+cXVpcmtfbGlzdCA9PSAwKQotCQkJCXByZXZfcG9ydC0+dHBfb3BzLT5zZXRfaXJxKHByZXZfcG9ydCwgMCk7CisJCQkJcHJldl9wb3J0LT50cF9vcHMtPndyaXRlX2RldmN0bChwcmV2X3BvcnQsCisJCQkJCQkJCUFUQV9OSUVOIHwKKwkJCQkJCQkJQVRBX0RFVkNUTF9PQlMpOwogCiAJCQlod2lmLT5ob3N0LT5jdXJfcG9ydCA9IGh3aWY7CiAJCX0KQEAgLTcyNCw2ICs2NjIsNyBAQAogCQkJfQogCQl9CiAJCWh3aWYtPmhhbmRsZXIgPSBOVUxMOworCQlod2lmLT5leHBpcnkgPSBOVUxMOwogCQkvKgogCQkgKiBXZSBuZWVkIHRvIHNpbXVsYXRlIGEgcmVhbCBpbnRlcnJ1cHQgd2hlbiBpbnZva2luZwogCQkgKiB0aGUgaGFuZGxlcigpIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvCkBAIC03MzksNyArNjc4LDggQEAKIAkJfSBlbHNlIGlmIChkcml2ZV9pc19yZWFkeShkcml2ZSkpIHsKIAkJCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQogCQkJCWh3aWYtPmRtYV9vcHMtPmRtYV9sb3N0X2lycShkcml2ZSk7Ci0JCQkodm9pZClpZGVfYWNrX2ludHIoaHdpZik7CisJCQlpZiAoaHdpZi0+YWNrX2ludHIpCisJCQkJaHdpZi0+YWNrX2ludHIoaHdpZik7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG9zdCBpbnRlcnJ1cHRcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwogCQkJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSk7CkBAIC04NDAsNiArNzgwLDcgQEAKIGlycXJldHVybl90IGlkZV9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IChpZGVfaHdpZl90ICopZGV2X2lkOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGh3aWYtPmhvc3Q7CiAJaWRlX2RyaXZlX3QgKnVuaW5pdGlhbGl6ZWRfdmFyKGRyaXZlKTsKIAlpZGVfaGFuZGxlcl90ICpoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NDcsMTQgKzc4OCwxNCBAQAogCWlycXJldHVybl90IGlycV9yZXQgPSBJUlFfTk9ORTsKIAlpbnQgcGx1Z19kZXZpY2UgPSAwOwogCi0JaWYgKGh3aWYtPmhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCWlmIChod2lmICE9IGh3aWYtPmhvc3QtPmN1cl9wb3J0KQorCWlmIChob3N0LT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFUklBTElaRSkgeworCQlpZiAoaHdpZiAhPSBob3N0LT5jdXJfcG9ydCkKIAkJCWdvdG8gb3V0X2Vhcmx5OwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWlkZV9hY2tfaW50cihod2lmKSkKKwlpZiAoaHdpZi0+YWNrX2ludHIgJiYgaHdpZi0+YWNrX2ludHIoaHdpZikgPT0gMCkKIAkJZ290byBvdXQ7CiAKIAloYW5kbGVyID0gaHdpZi0+aGFuZGxlcjsKQEAgLTg3MSwyNyArODEyLDE5IEBACiAJCSAqCiAJCSAqIEZvciBQQ0ksIHdlIGNhbm5vdCB0ZWxsIHRoZSBkaWZmZXJlbmNlLAogCQkgKiBzbyBpbiB0aGF0IGNhc2Ugd2UganVzdCBpZ25vcmUgaXQgYW5kIGhvcGUgaXQgZ29lcyBhd2F5LgotCQkgKgotCQkgKiBGSVhNRTogdW5leHBlY3RlZF9pbnRyIHNob3VsZCBiZSBod2lmLT4gdGhlbiB3ZSBjYW4KLQkJICogcmVtb3ZlIGFsbCB0aGUgaWZkZWYgUENJIGNyYXAKIAkJICovCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0JCWlmIChod2lmLT5jaGlwc2V0ICE9IGlkZV9wY2kpCi0jZW5kaWYJLyogQ09ORklHX0JMS19ERVZfSURFUENJICovCi0JCXsKKwkJaWYgKChob3N0LT5pcnFfZmxhZ3MgJiBJUlFGX1NIQVJFRCkgPT0gMCkgewogCQkJLyoKIAkJCSAqIFByb2JhYmx5IG5vdCBhIHNoYXJlZCBQQ0kgaW50ZXJydXB0LAogCQkJICogc28gd2UgY2FuIHNhZmVseSB0cnkgdG8gZG8gc29tZXRoaW5nIGFib3V0IGl0OgogCQkJICovCiAJCQl1bmV4cGVjdGVkX2ludHIoaXJxLCBod2lmKTsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBXaGFjayB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBqdXN0IGluIGNhc2UKIAkJCSAqIHdlIGhhdmUgYSBsZWZ0b3ZlciBwZW5kaW5nIElSUS4KIAkJCSAqLwogCQkJKHZvaWQpaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVQQ0kgKi8KIAkJfQogCQlnb3RvIG91dDsKIAl9CkBAIC05MDksNiArODQyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlod2lmLT5oYW5kbGVyID0gTlVMTDsKKwlod2lmLT5leHBpcnkgPSBOVUxMOwogCWh3aWYtPnJlcV9nZW4rKzsKIAlkZWxfdGltZXIoJmh3aWYtPnRpbWVyKTsKIAlzcGluX3VubG9jaygmaHdpZi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKaW5kZXggMWJlMjYzZS4uNzcwMTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwpAQCAtMTExLDEzICsxMTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVfY21kX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgaWRlX2NtZF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXU4ICpidWYgPSBOVUxMOwogCWludCBidWZzaXplID0gMCwgZXJyID0gMDsKIAl1OCBhcmdzWzRdLCB4ZmVyX3JhdGUgPSAwOwotCWlkZV90YXNrX3QgdGZhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAKIAlpZiAoTlVMTCA9PSAodm9pZCAqKSBhcmcpIHsKQEAgLTEzNCwyNCArMTM0LDI0IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgNCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbWVtc2V0KCZ0ZmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IGFyZ3NbMl07CiAJaWYgKGFyZ3NbMF0gPT0gQVRBX0NNRF9TTUFSVCkgewogCQl0Zi0+bnNlY3QgPSBhcmdzWzNdOwogCQl0Zi0+bGJhbCAgPSBhcmdzWzFdOwogCQl0Zi0+bGJhbSAgPSAweDRmOwogCQl0Zi0+bGJhaCAgPSAweGMyOwotCQl0ZmFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOwogCX0gZWxzZSB7CiAJCXRmLT5uc2VjdCA9IGFyZ3NbMV07Ci0JCXRmYXJncy50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8Ci0JCQkJICBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUIHwKKwkJCSAgICAgICBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAJfQogCXRmLT5jb21tYW5kID0gYXJnc1swXTsKLQl0ZmFyZ3MuZGF0YV9waGFzZSA9IGFyZ3NbM10gPyBUQVNLRklMRV9JTiA6IFRBU0tGSUxFX05PX0RBVEE7CisJY21kLnByb3RvY29sID0gYXJnc1szXSA/IEFUQV9QUk9UX1BJTyA6IEFUQV9QUk9UX05PREFUQTsKIAogCWlmIChhcmdzWzNdKSB7Ci0JCXRmYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CiAJCWJ1ZnNpemUgPSBTRUNUT1JfU0laRSAqIGFyZ3NbM107CiAJCWJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYgPT0gTlVMTCkKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJnRmYXJncywgYnVmLCBhcmdzWzNdKTsKKwllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIGFyZ3NbM10pOwogCiAJYXJnc1swXSA9IHRmLT5zdGF0dXM7CiAJYXJnc1sxXSA9IHRmLT5lcnJvcjsKQEAgLTE5NCwyNSArMTk0LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpZGVfdGFza19pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGlkZV90YXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVyciA9IDA7CiAJdTggYXJnc1s3XTsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsIHAsIDcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBhcmdzWzBdOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJbWVtY3B5KCZjbWQudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKKwljbWQudGYuY29tbWFuZCA9IGFyZ3NbMF07CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCi0JYXJnc1swXSA9IHRhc2sudGYuY29tbWFuZDsKLQltZW1jcHkoJmFyZ3NbMV0sICZ0YXNrLnRmX2FycmF5WzddLCA2KTsKKwlhcmdzWzBdID0gY21kLnRmLmNvbW1hbmQ7CisJbWVtY3B5KCZhcmdzWzFdLCAmY21kLnRmX2FycmF5WzddLCA2KTsKIAogCWlmIChjb3B5X3RvX3VzZXIocCwgYXJncywgNykpCiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yNjIsMTcgKzI2MiwxNyBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKKwkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGFyZyk7CiAJCXJldHVybiAtRU5PTVNHOwogI2VuZGlmCiAJY2FzZSBIRElPX0RSSVZFX0NNRDoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBhcmcpOwogCWNhc2UgSERJT19EUklWRV9UQVNLOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIGlkZV90YXNrX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfdGFza19pb2N0bChkcml2ZSwgYXJnKTsKIAljYXNlIEhESU9fRFJJVkVfUkVTRVQ6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggMzE3YzVkYS4uMjdiYjcwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0yNywyMSArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnNlbGVjdHByb2MpCi0JCXBvcnRfb3BzLT5zZWxlY3Rwcm9jKGRyaXZlKTsKLQotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9ERVZJQ0U7Ci0KLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Ci19Ci0KIHZvaWQgU0VMRUNUX01BU0soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKIHsKIAljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKQEAgLTUyLDE0ICszNywxNCBAQAogCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0ZFQVRVUkU7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRVJST1I7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJmNtZCk7CiAKLQlyZXR1cm4gdGFzay50Zi5lcnJvcjsKKwlyZXR1cm4gY21kLnRmLmVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfZXJyb3IpOwogCkBAIC0zMDYsNiArMjkxLDcgQEAKIAlkcml2ZS0+aWRbQVRBX0lEX1VETUFfTU9ERVNdICA9IGlkW0FUQV9JRF9VRE1BX01PREVTXTsKIAlkcml2ZS0+aWRbQVRBX0lEX01XRE1BX01PREVTXSA9IGlkW0FUQV9JRF9NV0RNQV9NT0RFU107CiAJZHJpdmUtPmlkW0FUQV9JRF9TV0RNQV9NT0RFU10gPSBpZFtBVEFfSURfU1dETUFfTU9ERVNdOworCWRyaXZlLT5pZFtBVEFfSURfQ0ZBX01PREVTXSAgID0gaWRbQVRBX0lEX0NGQV9NT0RFU107CiAJLyogYW55dGhpbmcgbW9yZSA/ICovCiAKIAlrZnJlZShpZCk7CkBAIC0zMjksNyArMzE1LDcgQEAKIAl1MTYgKmlkID0gZHJpdmUtPmlkLCBpOwogCWludCBlcnJvciA9IDA7CiAJdTggc3RhdDsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCiAJaWYgKGh3aWYtPmRtYV9vcHMpCS8qIGNoZWNrIGlmIGhvc3Qgc3VwcG9ydHMgRE1BICovCkBAIC0zNTYsMjIgKzM0MiwyMiBAQAogCWRpc2FibGVfaXJxX25vc3luYyhod2lmLT5pcnEpOwogCiAJdWRlbGF5KDEpOwotCVNFTEVDVF9EUklWRShkcml2ZSk7CisJdHBfb3BzLT5kZXZfc2VsZWN0KGRyaXZlKTsKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CiAJdWRlbGF5KDEpOwotCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKKwl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfTklFTiB8IEFUQV9ERVZDVExfT0JTKTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKLQl0YXNrLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOwotCXRhc2sudGYubnNlY3QgICA9IHNwZWVkOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKKwljbWQudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJY21kLnRmLm5zZWN0ICAgPSBzcGVlZDsKIAotCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJmNtZCk7CiAKIAl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1NFVF9GRUFUVVJFUyk7CiAKIAlpZiAoZHJpdmUtPnF1aXJrX2xpc3QgPT0gMikKLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCQl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfREVWQ1RMX09CUyk7CiAKIAllcnJvciA9IF9faWRlX3dhaXRfc3RhdChkcml2ZSwgZHJpdmUtPnJlYWR5X3N0YXQsCiAJCQkJQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUiwKQEAgLTM4Niw5ICszNzIsMTQgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlkW0FUQV9JRF9VRE1BX01PREVTXSAgJj0gfjB4RkYwMDsKLQlpZFtBVEFfSURfTVdETUFfTU9ERVNdICY9IH4weDBGMDA7Ci0JaWRbQVRBX0lEX1NXRE1BX01PREVTXSAmPSB+MHgwRjAwOworCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKSB7CisJCWlkW0FUQV9JRF9VRE1BX01PREVTXSAgJj0gfjB4RkYwMDsKKwkJaWRbQVRBX0lEX01XRE1BX01PREVTXSAmPSB+MHgwNzAwOworCQlpZFtBVEFfSURfU1dETUFfTU9ERVNdICY9IH4weDA3MDA7CisJCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSkKKwkJCWlkW0FUQV9JRF9DRkFfTU9ERVNdICY9IH4weDBFMDA7CisJfSBlbHNlCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSkKKwkJaWRbQVRBX0lEX0NGQV9NT0RFU10gJj0gfjB4MDFDMDsKIAogIHNraXA6CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCkBAIC00MDEsMTIgKzM5MiwxOCBAQAogCWlmIChzcGVlZCA+PSBYRkVSX1VETUFfMCkgewogCQlpID0gMSA8PCAoc3BlZWQgLSBYRkVSX1VETUFfMCk7CiAJCWlkW0FUQV9JRF9VRE1BX01PREVTXSB8PSAoaSA8PCA4IHwgaSk7CisJfSBlbHNlIGlmIChhdGFfaWRfaXNfY2ZhKGlkKSAmJiBzcGVlZCA+PSBYRkVSX01XX0RNQV8zKSB7CisJCWkgPSBzcGVlZCAtIFhGRVJfTVdfRE1BXzI7CisJCWlkW0FUQV9JRF9DRkFfTU9ERVNdIHw9IGkgPDwgOTsKIAl9IGVsc2UgaWYgKHNwZWVkID49IFhGRVJfTVdfRE1BXzApIHsKIAkJaSA9IDEgPDwgKHNwZWVkIC0gWEZFUl9NV19ETUFfMCk7CiAJCWlkW0FUQV9JRF9NV0RNQV9NT0RFU10gfD0gKGkgPDwgOCB8IGkpOwogCX0gZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCkgewogCQlpID0gMSA8PCAoc3BlZWQgLSBYRkVSX1NXX0RNQV8wKTsKIAkJaWRbQVRBX0lEX1NXRE1BX01PREVTXSB8PSAoaSA8PCA4IHwgaSk7CisJfSBlbHNlIGlmIChhdGFfaWRfaXNfY2ZhKGlkKSAmJiBzcGVlZCA+PSBYRkVSX1BJT181KSB7CisJCWkgPSBzcGVlZCAtIFhGRVJfUElPXzQ7CisJCWlkW0FUQV9JRF9DRkFfTU9ERVNdIHw9IGkgPDwgNjsKIAl9CiAKIAlpZiAoIWRyaXZlLT5pbml0X3NwZWVkKQpAQCAtNDI1LDI2ICs0MjIsMjUgQEAKICAqIFNlZSBhbHNvIGlkZV9leGVjdXRlX2NvbW1hbmQKICAqLwogdm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKIAlCVUdfT04oaHdpZi0+aGFuZGxlcik7CiAJaHdpZi0+aGFuZGxlcgkJPSBoYW5kbGVyOwotCWh3aWYtPmV4cGlyeQkJPSBleHBpcnk7CiAJaHdpZi0+dGltZXIuZXhwaXJlcwk9IGppZmZpZXMgKyB0aW1lb3V0OwogCWh3aWYtPnJlcV9nZW5fdGltZXIJPSBod2lmLT5yZXFfZ2VuOwogCWFkZF90aW1lcigmaHdpZi0+dGltZXIpOwogfQogCi12b2lkIGlkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCisJCSAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0LCBleHBpcnkpOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9zZXRfaGFuZGxlcik7CkBAIC00NTIsMTAgKzQ0OCw5IEBACiAvKioKICAqCWlkZV9leGVjdXRlX2NvbW1hbmQJLQlleGVjdXRlIGFuIElERSBjb21tYW5kCiAgKglAZHJpdmU6IElERSBkcml2ZSB0byBpc3N1ZSB0aGUgY29tbWFuZCBhZ2FpbnN0Ci0gKglAY29tbWFuZDogY29tbWFuZCBieXRlIHRvIHdyaXRlCisgKglAY21kOiBjb21tYW5kCiAgKglAaGFuZGxlcjogaGFuZGxlciBmb3IgbmV4dCBwaGFzZQogICoJQHRpbWVvdXQ6IHRpbWVvdXQgZm9yIGNvbW1hbmQKLSAqCUBleHBpcnk6ICBoYW5kbGVyIHRvIHJ1biBvbiB0aW1lb3V0CiAgKgogICoJSGVscGVyIGZ1bmN0aW9uIHRvIGlzc3VlIGFuIElERSBjb21tYW5kLiBUaGlzIGhhbmRsZXMgdGhlCiAgKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZQpAQCAtNDYzLDE1ICs0NTgsMTggQEAKICAqCXNob3VsZCBnbyB2aWEgdGhpcyBmdW5jdGlvbiBvciBkbyBlcXVpdmFsZW50IGxvY2tpbmcuCiAgKi8KIAotdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkJIHVuc2lnbmVkIHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCSBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCB0aW1lb3V0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKLQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBjbWQpOworCWlmICgoY21kLT5wcm90b2NvbCAhPSBBVEFQSV9QUk9UX0RNQSAmJgorCSAgICAgY21kLT5wcm90b2NvbCAhPSBBVEFQSV9QUk9UX1BJTykgfHwKKwkgICAgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSkKKwkJX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQpOworCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIGNtZC0+dGYuY29tbWFuZCk7CiAJLyoKIAkgKiBEcml2ZSB0YWtlcyA0MDBuUyB0byByZXNwb25kLCB3ZSBtdXN0IGF2b2lkIHRoZSBJUlEgYmVpbmcKIAkgKiBzZXJ2aWNlZCBiZWZvcmUgdGhhdC4KQEAgLTQ4MSwxOSArNDc5LDYgQEAKIAluZGVsYXkoNDAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGlkZV9leGVjdXRlX2NvbW1hbmQpOwotCi12b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1BBQ0tFVCk7Ci0JbmRlbGF5KDQwMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2V4ZWN1dGVfcGt0X2NtZCk7CiAKIC8qCiAgKiBpZGVfd2FpdF9ub3RfYnVzeSgpIHdhaXRzIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGRldmljZSBvbiB0aGUgaHdpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCmluZGV4IGY2YzY4M2QuLjIxN2I3ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKQEAgLTM0LDE5ICszNCwxOSBAQAogc3RhdGljIHZvaWQgaWRlX2R1bXBfb3Bjb2RlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaWRlX3Rhc2tfdCAqdGFzayA9IE5VTEw7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9IE5VTEw7CiAKIAlpZiAoIXJxKQogCQlyZXR1cm47CiAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkKLQkJdGFzayA9IHJxLT5zcGVjaWFsOworCQljbWQgPSBycS0+c3BlY2lhbDsKIAogCXByaW50ayhLRVJOX0VSUiAiaWRlOiBmYWlsZWQgb3Bjb2RlIHdhczogIik7Ci0JaWYgKHRhc2sgPT0gTlVMTCkKKwlpZiAoY21kID09IE5VTEwpCiAJCXByaW50ayhLRVJOX0NPTlQgInVua25vd25cbiIpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAiMHglMDJ4XG4iLCB0YXNrLT50Zi5jb21tYW5kKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiMHglMDJ4XG4iLCBjbWQtPnRmLmNvbW1hbmQpOwogfQogCiB1NjQgaWRlX2dldF9sYmFfYWRkcihzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiwgaW50IGxiYTQ4KQpAQCAtNjYsMTggKzY2LDE4IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9kdW1wX3NlY3RvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAl1OCBsYmE0OCA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJaWYgKGxiYTQ4KQotCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9IT0JfTEJBIHwKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9IT0JfTEJBIHwKIAkJCQlJREVfVEZMQUdfTEJBNDg7CiAJZWxzZQotCQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQSB8IElERV9URkxBR19JTl9ERVZJQ0U7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fREVWSUNFOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCiAJaWYgKGxiYTQ4IHx8ICh0Zi0+ZGV2aWNlICYgQVRBX0xCQSkpCiAJCXByaW50ayhLRVJOX0NPTlQgIiwgTEJBc2VjdD0lbGx1IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCmluZGV4IGYzMGU1MjEuLjk0OTBiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIApAQCAtNjMsMTAgKzYyLDEwIEBACiAKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWlmIChycS0+Y21kWzBdID09IFJFUV9QQVJLX0hFQURTKSB7CiAJCWRyaXZlLT5zbGVlcCA9ICoodW5zaWduZWQgbG9uZyAqKXJxLT5zcGVjaWFsOwogCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19TTEVFUElORzsKQEAgLTc1LDE0ICs3NCwxNiBAQAogCQl0Zi0+bGJhbCA9IDB4NGM7CiAJCXRmLT5sYmFtID0gMHg0ZTsKIAkJdGYtPmxiYWggPSAweDU1OwotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAl9IGVsc2UJCS8qIGNtZCA9PSBSRVFfVU5QQVJLX0hFQURTICovCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9DSEtfUE9XRVI7CiAKLQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JdGFzay5ycSA9IHJxOwotCWRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID0gdGFzay5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKKworCWNtZC5ycSA9IHJxOworCisJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogc3NpemVfdCBpZGVfcGFya19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG0uYyBiL2RyaXZlcnMvaWRlL2lkZS1wbS5jCmluZGV4IDYwNTM4ZDkuLmJiNzg1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wbS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbS5jCkBAIC0xLDYgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKIGludCBnZW5lcmljX2lkZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CkBAIC04LDcgKzcsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCByZXQ7CiAKIAkvKiBjYWxsIEFDUEkgX0dUTSBvbmx5IG9uY2UgKi8KQEAgLTE2LDEwICsxNSwxMCBAQAogCQlpZGVfYWNwaV9nZXRfdGltaW5nKGh3aWYpOwogCiAJbWVtc2V0KCZycXBtLCAwLCBzaXplb2YocnFwbSkpOwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXJxID0gYmxrX2dldF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgUkVBRCwgX19HRlBfV0FJVCk7CiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfUE1fU1VTUEVORDsKLQlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5zcGVjaWFsID0gJmNtZDsKIAlycS0+ZGF0YSA9ICZycXBtOwogCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9TVVNQRU5EOwogCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX1BSRVRIQVcpCkBAIC00Miw3ICs0MSw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSBycXBtOwotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJaW50IGVycjsKIAogCS8qIGNhbGwgQUNQSSBfUFMwIC8gX1NUTSBvbmx5IG9uY2UgKi8KQEAgLTU0LDExICs1MywxMSBAQAogCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAogCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1JFU1VNRTsKIAlycS0+Y21kX2ZsYWdzIHw9IFJFUV9QUkVFTVBUOwotCXJxLT5zcGVjaWFsID0gJmFyZ3M7CisJcnEtPnNwZWNpYWwgPSAmY21kOwogCXJxLT5kYXRhID0gJnJxcG07CiAJcnFwbS5wbV9zdGVwID0gSURFX1BNX1NUQVJUX1JFU1VNRTsKIAlycXBtLnBtX3N0YXRlID0gUE1fRVZFTlRfT047CkBAIC0xMDksOSArMTA4LDkgQEAKIGlkZV9zdGFydHN0b3BfdCBpZGVfc3RhcnRfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKLQlpZGVfdGFza190ICphcmdzID0gcnEtPnNwZWNpYWw7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9IHJxLT5zcGVjaWFsOwogCi0JbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigqYXJncykpOworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CiAKIAlzd2l0Y2ggKHBtLT5wbV9zdGVwKSB7CiAJY2FzZSBJREVfUE1fRkxVU0hfQ0FDSEU6CS8qIFN1c3BlbmQgc3RlcCAxIChmbHVzaCBjYWNoZSkgKi8KQEAgLTEyNCwxMiArMTIzLDEyIEBACiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJaWYgKGF0YV9pZF9mbHVzaF9leHRfZW5hYmxlZChkcml2ZS0+aWQpKQotCQkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CiAJCWVsc2UKLQkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOworCQkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fU1RBTkRCWToJCS8qIFN1c3BlbmQgc3RlcCAyIChzdGFuZGJ5KSAqLwotCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKKwkJY21kLT50Zi5jb21tYW5kID0gQVRBX0NNRF9TVEFOREJZTk9XMTsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fUkVTVE9SRV9QSU86CS8qIFJlc3VtZSBzdGVwIDEgKHJlc3RvcmUgUElPKSAqLwogCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOwpAQCAtMTQyLDcgKzE0MSw3IEBACiAJCQlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJY2FzZSBJREVfUE1fSURMRToJCS8qIFJlc3VtZSBzdGVwIDIgKGlkbGUpICovCi0JCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfSURMRUlNTUVESUFURTsKIAkJZ290byBvdXRfZG9fdGY7CiAJY2FzZSBJREVfUE1fUkVTVE9SRV9ETUE6CS8qIFJlc3VtZSBzdGVwIDMgKHJlc3RvcmUgRE1BKSAqLwogCQkvKgpAQCAtMTYwLDI3ICsxNTksMzQgQEAKIAl9CiAKIAlwbS0+cG1fc3RlcCA9IElERV9QTV9DT01QTEVURUQ7CisKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAKIG91dF9kb190ZjoKLQlhcmdzLT50Zl9mbGFncwkgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWFyZ3MtPmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOwotCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgYXJncyk7CisJY21kLT50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX05PREFUQTsKKworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgY21kKTsKIH0KIAogLyoqCi0gKglpZGVfY29tcGxldGVfcG1fcmVxdWVzdCAtIGVuZCB0aGUgY3VycmVudCBQb3dlciBNYW5hZ2VtZW50IHJlcXVlc3QKKyAqCWlkZV9jb21wbGV0ZV9wbV9ycSAtIGVuZCB0aGUgY3VycmVudCBQb3dlciBNYW5hZ2VtZW50IHJlcXVlc3QKICAqCUBkcml2ZTogdGFyZ2V0IGRyaXZlCiAgKglAcnE6IHJlcXVlc3QKICAqCiAgKglUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgY3VycmVudCBQTSByZXF1ZXN0IGFuZCBzdG9wcyB0aGUgcXVldWUKICAqCWlmIG5lY2Vzc2FyeS4KICAqLwotdm9pZCBpZGVfY29tcGxldGVfcG1fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgaWRlX2NvbXBsZXRlX3BtX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZGVfY29tcGxldGVfcG93ZXJfc3RlcChkcml2ZSwgcnEpOworCWlmIChwbS0+cG1fc3RlcCAhPSBJREVfUE1fQ09NUExFVEVEKQorCQlyZXR1cm47CisKICNpZmRlZiBERUJVR19QTQogCXByaW50aygiJXM6IGNvbXBsZXRpbmcgUE0gcmVxdWVzdCwgJXNcbiIsIGRyaXZlLT5uYW1lLAogCSAgICAgICBibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSA/ICJzdXNwZW5kIiA6ICJyZXN1bWUiKTsKQEAgLTIxNyw2ICsyMjMsNyBAQAogCQkgKiBwb2ludC4KIAkJICovCiAJCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwkJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkcml2ZS0+cXVldWU7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCByYzsKQEAgLTIyNiw4ICsyMzMsOCBAQAogCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDM1MDAwKTsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1cyBub3QgcmVhZHkgb24gd2FrZXVwXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwkJdHBfb3BzLT5kZXZfc2VsZWN0KGRyaXZlKTsKKwkJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX0RFVkNUTF9PQlMpOwogCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDEwMDAwMCk7CiAJCWlmIChyYykKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZSBub3QgcmVhZHkgb24gd2FrZXVwXG4iLCBkcml2ZS0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggYmFjOWIzOS4uNmU4MGI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtMjcsNiArMjcsMTAgQEAKIAl7LmlkID0gIiJ9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlX3BucF9wb3J0X2luZm8gPSB7CisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKK307CisKIHN0YXRpYyBpbnQgaWRlcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNjAsNyArNjQsNyBAQAogCWh3LmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsICZob3N0KTsKKwlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX3BucF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggOTc0MDY3MC4uZDhjMWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTIyOCwxNSArMjI4LDkgQEAKIAltW0FUQV9JRF9QUk9EX0xFTiAtIDFdID0gJ1wwJzsKIAogCWlmIChzdHJzdHIobSwgIkUgWCBBIEIgWSBUIEUgTiBFIFMgVCIpKQotCQlnb3RvIGVycl9taXNjOwotCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKLQotCXJldHVybjsKLWVycl9taXNjOgotCWtmcmVlKGlkKTsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogfQogCiAvKioKQEAgLTI2Niw3ICsyNjAsNyBAQAogCSAqIGR1cmluZyB0aGUgaWRlbnRpZnkgcGhhc2UgdGhhdCB0aGUgSVJRIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgogCSAqLwogCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCi0JCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKKwkJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX05JRU4gfCBBVEFfREVWQ1RMX09CUyk7CiAKIAkvKiB0YWtlIGEgZGVlcCBicmVhdGggKi8KIAltc2xlZXAoNTApOwpAQCAtMjg5LDEzICsyODMsMTMgQEAKIAkgKiBpZGVudGlmeSBjb21tYW5kIHRvIGJlIHN1cmUgb2YgcmVwbHkKIAkgKi8KIAlpZiAoY21kID09IEFUQV9DTURfSURfQVRBUEkpIHsKLQkJaWRlX3Rhc2tfdCB0YXNrOworCQlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCQkvKiBkaXNhYmxlIERNQSAmIG92ZXJsYXAgKi8KLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRTsKKwkJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFOwogCi0JCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZjbWQpOwogCX0KIAogCS8qIGFzayBkcml2ZSBmb3IgSUQgKi8KQEAgLTM0MywxNCArMzM3LDE0IEBACiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9kZXZpY2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fREVWSUNFOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCi0JcmV0dXJuIHRhc2sudGYuZGV2aWNlOworCXJldHVybiBjbWQudGYuZGV2aWNlOwogfQogCiAvKioKQEAgLTM5NiwxMyArMzkwLDEzIEBACiAJICogKGUuZy4gY3J3OTYyNCBhcyBkcml2ZTAgd2l0aCBkaXNrIGFzIHNsYXZlKQogCSAqLwogCW1zbGVlcCg1MCk7Ci0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwl0cF9vcHMtPmRldl9zZWxlY3QoZHJpdmUpOwogCW1zbGVlcCg1MCk7CiAKIAlpZiAoaWRlX3JlYWRfZGV2aWNlKGRyaXZlKSAhPSBkcml2ZS0+c2VsZWN0ICYmIHByZXNlbnQgPT0gMCkgewogCQlpZiAoZHJpdmUtPmRuICYgMSkgewogCQkJLyogZXhpdCB3aXRoIGRyaXZlMCBzZWxlY3RlZCAqLwotCQkJU0VMRUNUX0RSSVZFKGh3aWYtPmRldmljZXNbMF0pOworCQkJdHBfb3BzLT5kZXZfc2VsZWN0KGh3aWYtPmRldmljZXNbMF0pOwogCQkJLyogYWxsb3cgQVRBX0JVU1kgdG8gYXNzZXJ0ICYgY2xlYXIgKi8KIAkJCW1zbGVlcCg1MCk7CiAJCX0KQEAgLTQyOCw3ICs0MjIsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcmVzcG9uc2UgKHN0YXR1cyA9IDB4JTAyeCksICIKIAkJCQkJInJlc2V0dGluZyBkcml2ZVxuIiwgZHJpdmUtPm5hbWUsIHN0YXQpOwogCQkJbXNsZWVwKDUwKTsKLQkJCVNFTEVDVF9EUklWRShkcml2ZSk7CisJCQl0cF9vcHMtPmRldl9zZWxlY3QoZHJpdmUpOwogCQkJbXNsZWVwKDUwKTsKIAkJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKIAkJCSh2b2lkKWlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAwKTsKQEAgLTQ0Nyw3ICs0NDEsNyBAQAogCX0KIAlpZiAoZHJpdmUtPmRuICYgMSkgewogCQkvKiBleGl0IHdpdGggZHJpdmUwIHNlbGVjdGVkICovCi0JCVNFTEVDVF9EUklWRShod2lmLT5kZXZpY2VzWzBdKTsKKwkJdHBfb3BzLT5kZXZfc2VsZWN0KGh3aWYtPmRldmljZXNbMF0pOwogCQltc2xlZXAoNTApOwogCQkvKiBlbnN1cmUgZHJpdmUgaXJxIGlzIGNsZWFyICovCiAJCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CkBAIC01MDUsOCArNDk5LDcgQEAKIAkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJLyogZHJpdmUgbm90IGZvdW5kICovCi0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAKIAkJLyogaWRlbnRpZmljYXRpb24gZmFpbGVkPyAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTMwLDcgKzUyMyw3IEBACiAJfQogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9mcmVlOwogCiAJLyogVGhlIGRyaXZlIHdhc24ndCBiZWluZyBoZWxwZnVsLiBBZGQgZ2VuZXJpYyBpbmZvIG9ubHkgKi8KIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTQzLDcgKzUzNiwxMCBAQAogCQlpZGVfZGlza19pbml0X211bHRfY291bnQoZHJpdmUpOwogCX0KIAotCXJldHVybiAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpOworCXJldHVybiAxOworb3V0X2ZyZWU6CisJa2ZyZWUoZHJpdmUtPmlkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02MDksNiArNjA1LDcgQEAKIAogc3RhdGljIGludCBpZGVfcG9ydF93YWl0X3JlYWR5KGlkZV9od2lmX3QgKmh3aWYpCiB7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IGksIHJjOwogCkBAIC02MzEsOCArNjI4LDggQEAKIAkJLyogSWdub3JlIGRpc2tzIHRoYXQgd2Ugd2lsbCBub3QgcHJvYmUgZm9yIGxhdGVyLiAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9QUk9CRSkgPT0gMCB8fAogCQkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkpIHsKLQkJCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JCQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CisJCQl0cF9vcHMtPmRldl9zZWxlY3QoZHJpdmUpOworCQkJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX0RFVkNUTF9PQlMpOwogCQkJbWRlbGF5KDIpOwogCQkJcmMgPSBpZGVfd2FpdF9ub3RfYnVzeShod2lmLCAzNTAwMCk7CiAJCQlpZiAocmMpCkBAIC02NDQsNyArNjQxLDcgQEAKIG91dDoKIAkvKiBFeGl0IGZ1bmN0aW9uIHdpdGggbWFzdGVyIHJlc2VsZWN0ZWQgKGxldCdzIGJlIHNhbmUpICovCiAJaWYgKGkpCi0JCVNFTEVDVF9EUklWRShod2lmLT5kZXZpY2VzWzBdKTsKKwkJdHBfb3BzLT5kZXZfc2VsZWN0KGh3aWYtPmRldmljZXNbMF0pOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtODQxLDM0ICs4MzgsMTkgQEAKIHN0YXRpYyBpbnQgaW5pdF9pcnEgKGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0JaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcjsKLQlpbnQgc2EgPSAwOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGh3aWYtPmhvc3Q7CisJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlciA9IGhvc3QtPmlycV9oYW5kbGVyOworCWludCBzYSA9IGhvc3QtPmlycV9mbGFnczsKIAotCWlycV9oYW5kbGVyID0gaHdpZi0+aG9zdC0+aXJxX2hhbmRsZXI7CiAJaWYgKGlycV9oYW5kbGVyID09IE5VTEwpCiAJCWlycV9oYW5kbGVyID0gaWRlX2ludHI7CiAKLSNpZiBkZWZpbmVkKF9fbWM2ODAwMF9fKQotCXNhID0gSVJRRl9TSEFSRUQ7Ci0jZW5kaWYgLyogX19tYzY4MDAwX18gKi8KLQotCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV9wY2kpCi0JCXNhID0gSVJRRl9TSEFSRUQ7Ci0KIAlpZiAoaW9fcG9ydHMtPmN0bF9hZGRyKQotCQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CisJCWh3aWYtPnRwX29wcy0+d3JpdGVfZGV2Y3RsKGh3aWYsIEFUQV9ERVZDVExfT0JTKTsKIAogCWlmIChyZXF1ZXN0X2lycShod2lmLT5pcnEsIGlycV9oYW5kbGVyLCBzYSwgaHdpZi0+bmFtZSwgaHdpZikpCiAJCWdvdG8gb3V0X3VwOwogCi0JaWYgKCFod2lmLT5ycXNpemUpIHsKLQkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KSB8fAotCQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSkKLQkJCWh3aWYtPnJxc2l6ZSA9IDI1NjsKLQkJZWxzZQotCQkJaHdpZi0+cnFzaXplID0gNjU1MzY7Ci0JfQotCiAjaWYgIWRlZmluZWQoX19tYzY4MDAwX18pCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgMHglMDNseC0weCUwM2x4LDB4JTAzbHggb24gaXJxICVkIiwgaHdpZi0+bmFtZSwKIAkJaW9fcG9ydHMtPmRhdGFfYWRkciwgaW9fcG9ydHMtPnN0YXR1c19hZGRyLApAQCAtOTYxLDIwICs5NDMsMTYgQEAKIHN0YXRpYyB2b2lkIGRyaXZlX3JlbGVhc2VfZGV2IChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gY29udGFpbmVyX29mKGRldiwgaWRlX2RyaXZlX3QsIGdlbmRldik7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCiAJaWRlX3Byb2NfdW5yZWdpc3Rlcl9kZXZpY2UoZHJpdmUpOwogCi0Jc3Bpbl9sb2NrX2lycSgmaHdpZi0+bG9jayk7CisJYmxrX2NsZWFudXBfcXVldWUoZHJpdmUtPnF1ZXVlKTsKKwlkcml2ZS0+cXVldWUgPSBOVUxMOworCiAJa2ZyZWUoZHJpdmUtPmlkKTsKIAlkcml2ZS0+aWQgPSBOVUxMOworCiAJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7Ci0JLyogTWVzc2VkIHVwIGxvY2tpbmcgLi4uICovCi0Jc3Bpbl91bmxvY2tfaXJxKCZod2lmLT5sb2NrKTsKLQlibGtfY2xlYW51cF9xdWV1ZShkcml2ZS0+cXVldWUpOwotCXNwaW5fbG9ja19pcnEoJmh3aWYtPmxvY2spOwotCWRyaXZlLT5xdWV1ZSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZod2lmLT5sb2NrKTsKIAogCWNvbXBsZXRlKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKIH0KQEAgLTEwODAsNyArMTA1OCw3IEBACiAJCWh3aWYtPnRwX29wcyA9IGQtPnRwX29wczsKIAogCS8qIC0+c2V0X3Bpb19tb2RlIGZvciBEVEMyMjc4IGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvIHBvcnQgMCAqLwotCWlmIChod2lmLT5jaGlwc2V0ICE9IGlkZV9kdGMyMjc4IHx8IGh3aWYtPmNoYW5uZWwgPT0gMCkKKwlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfRFRDMjI3OCkgPT0gMCB8fCBod2lmLT5jaGFubmVsID09IDApCiAJCWh3aWYtPnBvcnRfb3BzID0gZC0+cG9ydF9vcHM7CiAKIAlod2lmLT5zd2RtYV9tYXNrID0gZC0+c3dkbWFfbWFzazsKQEAgLTExMTQsNiArMTA5MiwxMyBAQAogCiAJaWYgKGQtPm1heF9zZWN0b3JzKQogCQlod2lmLT5ycXNpemUgPSBkLT5tYXhfc2VjdG9yczsKKwllbHNlIHsKKwkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KSB8fAorCQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSkKKwkJCWh3aWYtPnJxc2l6ZSA9IDI1NjsKKwkJZWxzZQorCQkJaHdpZi0+cnFzaXplID0gNjU1MzY7CisJfQogCiAJLyogY2FsbCBjaGlwc2V0IHNwZWNpZmljIHJvdXRpbmUgZm9yIGVhY2ggZW5hYmxlZCBwb3J0ICovCiAJaWYgKGQtPmluaXRfaHdpZikKQEAgLTEzMjYsNiArMTMxMSw4IEBACiAKIAlpZiAoZCkgewogCQlob3N0LT5pbml0X2NoaXBzZXQgPSBkLT5pbml0X2NoaXBzZXQ7CisJCWhvc3QtPmdldF9sb2NrICAgICA9IGQtPmdldF9sb2NrOworCQlob3N0LT5yZWxlYXNlX2xvY2sgPSBkLT5yZWxlYXNlX2xvY2s7CiAJCWhvc3QtPmhvc3RfZmxhZ3MgPSBkLT5ob3N0X2ZsYWdzOwogCX0KIApAQCAtMTM3MiwyMCArMTM1OSwxNSBAQAogCQlpZGVfaW5pdF9wb3J0X2h3KGh3aWYsIGh3c1tpXSk7CiAJCWlkZV9wb3J0X2FwcGx5X3BhcmFtcyhod2lmKTsKIAotCQlpZiAoZCA9PSBOVUxMKSB7Ci0JCQltYXRlID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaSAmIDEpICYmIG1hdGUpIHsKLQkJCQlod2lmLT5tYXRlID0gbWF0ZTsKLQkJCQltYXRlLT5tYXRlID0gaHdpZjsKLQkJCX0KLQotCQkJbWF0ZSA9IChpICYgMSkgPyBOVUxMIDogaHdpZjsKLQotCQkJaWRlX2luaXRfcG9ydChod2lmLCBpICYgMSwgZCk7Ci0JCQlpZGVfcG9ydF9jYWJsZV9kZXRlY3QoaHdpZik7CisJCWlmICgoaSAmIDEpICYmIG1hdGUpIHsKKwkJCWh3aWYtPm1hdGUgPSBtYXRlOworCQkJbWF0ZS0+bWF0ZSA9IGh3aWY7CiAJCX0KIAorCQltYXRlID0gKGkgJiAxKSA/IE5VTEwgOiBod2lmOworCisJCWlkZV9pbml0X3BvcnQoaHdpZiwgaSAmIDEsIGQpOworCQlpZGVfcG9ydF9jYWJsZV9kZXRlY3QoaHdpZik7CiAJCWlkZV9wb3J0X2luaXRfZGV2aWNlcyhod2lmKTsKIAl9CiAKQEAgLTEzOTYsOCArMTM3OCw4IEBACiAJCWlmIChpZGVfcHJvYmVfcG9ydChod2lmKSA9PSAwKQogCQkJaHdpZi0+cHJlc2VudCA9IDE7CiAKLQkJaWYgKGh3aWYtPmNoaXBzZXQgIT0gaWRlXzRkcml2ZXMgfHwgIWh3aWYtPm1hdGUgfHwKLQkJICAgICFod2lmLT5tYXRlLT5wcmVzZW50KSB7CisJCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR180RFJJVkVTKSA9PSAwIHx8CisJCSAgICBod2lmLT5tYXRlID09IE5VTEwgfHwgaHdpZi0+bWF0ZS0+cHJlc2VudCA9PSAwKSB7CiAJCQlpZiAoaWRlX3JlZ2lzdGVyX3BvcnQoaHdpZikpIHsKIAkJCQlpZGVfZGlzYWJsZV9wb3J0KGh3aWYpOwogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggNDE3Y2RlNS4uMTBhODhiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0xOTQsMjAgKzE5NCwyMCBAQAogCiBzdGF0aWMgaW50IHNldF94ZmVyX3JhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCBlcnI7CiAKIAlpZiAoYXJnIDwgWEZFUl9QSU9fMCB8fCBhcmcgPiBYRkVSX1VETUFfNikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zi5jb21tYW5kID0gQVRBX0NNRF9TRVRfRkVBVFVSRVM7Ci0JdGFzay50Zi5mZWF0dXJlID0gU0VURkVBVFVSRVNfWEZFUjsKLQl0YXNrLnRmLm5zZWN0ICAgPSAodTgpYXJnOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUIHwKLQkJCUlERV9URkxBR19JTl9OU0VDVDsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9TRVRfRkVBVFVSRVM7CisJY21kLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOworCWNtZC50Zi5uc2VjdCAgID0gKHU4KWFyZzsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8IElERV9URkxBR19PVVRfTlNFQ1QgfAorCQkJIElERV9URkxBR19JTl9OU0VDVDsKIAotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJaWYgKCFlcnIpIHsKIAkJaWRlX3NldF94ZmVyX3JhdGUoZHJpdmUsICh1OCkgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDRlNjE4MWMuLmNiOTQyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTUyLDExICsxNTIsNiBAQAogI2RlZmluZSBJREVUQVBFX0xVX1JFVEVOU0lPTl9NQVNLCTIKICNkZWZpbmUgSURFVEFQRV9MVV9FT1RfTUFTSwkJNAogCi0vKiBFcnJvciBjb2RlcyByZXR1cm5lZCBpbiBycS0+ZXJyb3JzIHRvIHRoZSBoaWdoZXIgcGFydCBvZiB0aGUgZHJpdmVyLiAqLwotI2RlZmluZSBJREVUQVBFX0VSUk9SX0dFTkVSQUwJCTEwMQotI2RlZmluZSBJREVUQVBFX0VSUk9SX0ZJTEVNQVJLCQkxMDIKLSNkZWZpbmUgSURFVEFQRV9FUlJPUl9FT0QJCTEwMwotCiAvKiBTdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIFNFTEVDVCBTRU5TRSAvIE1PREUgU0VOU0UgcGFja2V0IGNvbW1hbmRzLiAqLwogI2RlZmluZSBJREVUQVBFX0JMT0NLX0RFU0NSSVBUT1IJMAogI2RlZmluZSBJREVUQVBFX0NBUEFCSUxJVElFU19QQUdFCTB4MmEKQEAgLTE3MSwxNCArMTY2LDYgQEAKIAlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CiAJc3RydWN0IGRldmljZQkJZGV2OwogCi0JLyoKLQkgKglmYWlsZWRfcGMgcG9pbnRzIHRvIHRoZSBsYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCwgb3IgY29udGFpbnMKLQkgKglOVUxMIGlmIHdlIGRvIG5vdCBuZWVkIHRvIHJldHJ5IGFueSBwYWNrZXQgY29tbWFuZC4gVGhpcyBpcwotCSAqCXJlcXVpcmVkIHNpbmNlIGFuIGFkZGl0aW9uYWwgcGFja2V0IGNvbW1hbmQgaXMgbmVlZGVkIGJlZm9yZSB0aGUKLQkgKglyZXRyeSwgdG8gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHdoYXQgd2VudCB3cm9uZy4KLQkgKi8KLQkvKiBMYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKIAkvKiB1c2VkIGJ5IFJFUV9JREVUQVBFX3tSRUFELFdSSVRFfSByZXF1ZXN0cyAqLwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcXVldWVkX3BjOwogCkBAIC0yNDUsOSArMjMyLDYgQEAKIAkvKiBXYXN0ZWQgc3BhY2UgaW4gZWFjaCBzdGFnZSAqLwogCWludCBleGNlc3NfYmhfc2l6ZTsKIAotCS8qIHByb3RlY3RzIHRoZSBpZGUtdGFwZSBxdWV1ZSAqLwotCXNwaW5sb2NrX3QgbG9jazsKLQogCS8qIE1lYXN1cmVzIGF2ZXJhZ2UgdGFwZSBzcGVlZCAqLwogCXVuc2lnbmVkIGxvbmcgYXZnX3RpbWU7CiAJaW50IGF2Z19zaXplOwpAQCAtMzEzLDE5ICsyOTcsMTUgQEAKIAlyZXR1cm4gdGFwZTsKIH0KIAotc3RhdGljIHZvaWQgaWRldGFwZV9pbnB1dF9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCitzdGF0aWMgaW50IGlkZXRhcGVfaW5wdXRfYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCSAgdW5zaWduZWQgaW50IGJjb3VudCkKIHsKIAlzdHJ1Y3QgaWRldGFwZV9iaCAqYmggPSBwYy0+Ymg7CiAJaW50IGNvdW50OwogCiAJd2hpbGUgKGJjb3VudCkgewotCQlpZiAoYmggPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogYmggPT0gTlVMTCBpbiAiCi0JCQkJImlkZXRhcGVfaW5wdXRfYnVmZmVyc1xuIik7Ci0JCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCAwLCBiY291bnQpOwotCQkJcmV0dXJuOwotCQl9CisJCWlmIChiaCA9PSBOVUxMKQorCQkJYnJlYWs7CiAJCWNvdW50ID0gbWluKAogCQkJKHVuc2lnbmVkIGludCkoYmgtPmJfc2l6ZSAtIGF0b21pY19yZWFkKCZiaC0+Yl9jb3VudCkpLAogCQkJYmNvdW50KTsKQEAgLTMzOSwyMSArMzE5LDIxIEBACiAJCQkJYXRvbWljX3NldCgmYmgtPmJfY291bnQsIDApOwogCQl9CiAJfQorCiAJcGMtPmJoID0gYmg7CisKKwlyZXR1cm4gYmNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX291dHB1dF9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCitzdGF0aWMgaW50IGlkZXRhcGVfb3V0cHV0X2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKIAkJCQkgICB1bnNpZ25lZCBpbnQgYmNvdW50KQogewogCXN0cnVjdCBpZGV0YXBlX2JoICpiaCA9IHBjLT5iaDsKIAlpbnQgY291bnQ7CiAKIAl3aGlsZSAoYmNvdW50KSB7Ci0JCWlmIChiaCA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBiaCA9PSBOVUxMIGluICVzXG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKGJoID09IE5VTEwpCisJCQlicmVhazsKIAkJY291bnQgPSBtaW4oKHVuc2lnbmVkIGludClwYy0+Yl9jb3VudCwgKHVuc2lnbmVkIGludCliY291bnQpOwogCQlkcml2ZS0+aHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgcGMtPmJfZGF0YSwgY291bnQpOwogCQliY291bnQgLT0gY291bnQ7CkBAIC0zNjgsNiArMzQ4LDggQEAKIAkJCX0KIAkJfQogCX0KKworCXJldHVybiBiY291bnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfdXBkYXRlX2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKQEAgLTQwMCw3ICszODIsNyBAQAogc3RhdGljIHZvaWQgaWRldGFwZV9hbmFseXplX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKnNlbnNlKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gdGFwZS0+ZmFpbGVkX3BjOworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gZHJpdmUtPmZhaWxlZF9wYzsKIAogCXRhcGUtPnNlbnNlX2tleSA9IHNlbnNlWzJdICYgMHhGOwogCXRhcGUtPmFzYyAgICAgICA9IHNlbnNlWzEyXTsKQEAgLTQzMywxOSArNDE1LDE5IEBACiAJCX0KIAl9CiAJaWYgKHBjLT5jWzBdID09IFJFQURfNiAmJiAoc2Vuc2VbMl0gJiAweDgwKSkgewotCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0ZJTEVNQVJLOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0ZJTEVNQVJLOwogCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAl9CiAJaWYgKHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKChzZW5zZVsyXSAmIDB4NDApIHx8ICh0YXBlLT5zZW5zZV9rZXkgPT0gMHhkCiAJCSAgICAgJiYgdGFwZS0+YXNjID09IDB4MCAmJiB0YXBlLT5hc2NxID09IDB4MikpIHsKLQkJCXBjLT5lcnJvciA9IElERVRBUEVfRVJST1JfRU9EOworCQkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9FT0Q7CiAJCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19BQk9SVDsKIAkJfQogCX0KIAlpZiAocGMtPmNbMF0gPT0gUkVBRF82IHx8IHBjLT5jWzBdID09IFdSSVRFXzYpIHsKIAkJaWYgKHRhcGUtPnNlbnNlX2tleSA9PSA4KSB7Ci0JCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0VPRDsKKwkJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfRU9EOwogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJCX0KIAkJaWYgKCEocGMtPmZsYWdzICYgUENfRkxBR19BQk9SVCkgJiYKQEAgLTQ3Nyw1MiArNDU5LDIzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlkZXRhcGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0cykKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyb3I7Ci0KLQlkZWJ1Z19sb2coREJHX1BST0NTLCAiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6CWVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOyBicmVhazsKLQljYXNlIDE6IGVycm9yID0gMDsgYnJlYWs7Ci0JZGVmYXVsdDogZXJyb3IgPSB1cHRvZGF0ZTsKLQl9Ci0JcnEtPmVycm9ycyA9IGVycm9yOwotCWlmIChlcnJvcikKLQkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKLQotCWlmICghYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnJfc2VjdHMpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwotCi0JaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIDAsIDApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFwZS0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBpZGVfdGFwZV9oYW5kbGVfZHNjKGlkZV9kcml2ZV90ICopOwogCi1zdGF0aWMgdm9pZCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCitzdGF0aWMgaW50IGlkZV90YXBlX2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CisJaW50IGVyciA9IHVwdG9kYXRlID8gMCA6IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAogCWRlYnVnX2xvZyhEQkdfUFJPQ1MsICJFbnRlciAlc1xuIiwgX19mdW5jX18pOwogCiAJaWYgKGRzYykKIAkJaWRlX3RhcGVfaGFuZGxlX2RzYyhkcml2ZSk7CiAKLQlpZiAodGFwZS0+ZmFpbGVkX3BjID09IHBjKQotCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjID09IHBjKQorCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAogCWlmIChwYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CiAJCWlmICh1cHRvZGF0ZSkKQEAgLTUzMSw3ICs0ODQsNiBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogRXJyb3IgaW4gUkVRVUVTVCBTRU5TRSAiCiAJCQkJCSJpdHNlbGYgLSBBYm9ydGluZyByZXF1ZXN0IVxuIik7CiAJfSBlbHNlIGlmIChwYy0+Y1swXSA9PSBSRUFEXzYgfHwgcGMtPmNbMF0gPT0gV1JJVEVfNikgewotCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAJCWludCBibG9ja3MgPSBwYy0+eGZlcnJlZCAvIHRhcGUtPmJsa19zaXplOwogCiAJCXRhcGUtPmF2Z19zaXplICs9IGJsb2NrcyAqIHRhcGUtPmJsa19zaXplOwpAQCAtNTQ2LDggKzQ5OCwxMCBAQAogCQl0YXBlLT5maXJzdF9mcmFtZSArPSBibG9ja3M7CiAJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgLT0gYmxvY2tzOwogCi0JCWlmIChwYy0+ZXJyb3IpCi0JCQl1cHRvZGF0ZSA9IHBjLT5lcnJvcjsKKwkJaWYgKHBjLT5lcnJvcikgeworCQkJdXB0b2RhdGUgPSAwOworCQkJZXJyID0gcGMtPmVycm9yOworCQl9CiAJfSBlbHNlIGlmIChwYy0+Y1swXSA9PSBSRUFEX1BPU0lUSU9OICYmIHVwdG9kYXRlKSB7CiAJCXU4ICpyZWFkcG9zID0gcGMtPmJ1ZjsKIApAQCAtNTYxLDYgKzUxNSw3IEBACiAJCQkJCSAidG8gdGhlIHRhcGVcbiIpOwogCQkJY2xlYXJfYml0KElERV9BRkxBR19BRERSRVNTX1ZBTElELCAmZHJpdmUtPmF0YXBpX2ZsYWdzKTsKIAkJCXVwdG9kYXRlID0gMDsKKwkJCWVyciA9IElERV9EUlZfRVJST1JfR0VORVJBTDsKIAkJfSBlbHNlIHsKIAkJCWRlYnVnX2xvZyhEQkdfU0VOU0UsICJCbG9jayBMb2NhdGlvbiAtICV1XG4iLAogCQkJCQliZTMyX3RvX2NwdXAoKF9fYmUzMiAqKSZyZWFkcG9zWzRdKSk7CkBAIC01NzEsNyArNTI2LDkgQEAKIAkJfQogCX0KIAotCWlkZXRhcGVfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlycS0+ZXJyb3JzID0gZXJyOworCisJcmV0dXJuIHVwdG9kYXRlOwogfQogCiAvKgpAQCAtNjA0LDEyICs1NjEsMTQgQEAKIHN0YXRpYyBpbnQgaWRlX3RhcGVfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCXVuc2lnbmVkIGludCBiY291bnQsIGludCB3cml0ZSkKIHsKLQlpZiAod3JpdGUpCi0JCWlkZXRhcGVfb3V0cHV0X2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQpOwotCWVsc2UKLQkJaWRldGFwZV9pbnB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKwl1bnNpZ25lZCBpbnQgYmxlZnQ7CiAKLQlyZXR1cm4gYmNvdW50OworCWlmICh3cml0ZSkKKwkJYmxlZnQgPSBpZGV0YXBlX291dHB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKwllbHNlCisJCWJsZWZ0ID0gaWRldGFwZV9pbnB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKworCXJldHVybiBiY291bnQgLSBibGVmdDsKIH0KIAogLyoKQEAgLTYyMSw3ICs1ODAsNyBAQAogICoKICAqIFRoZSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgaW4gdGhyZWUgc3RhZ2VzOgogICoKLSAqIDEuIGlkZXRhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAorICogMS4gaWRlX3RhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAogICogdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGlkZV9wY19pbnRyLgogICoKICAqIDIuIE9uIGVhY2ggaW50ZXJydXB0LCBpZGVfcGNfaW50ciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBzdGVwIHdpbGwgYmUKQEAgLTY0OSw4ICs2MDgsOSBAQAogICogcmVxdWVzdC4KICAqLwogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXRhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3RhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCQkJIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCkBAIC02NjAsOCArNjIwLDggQEAKIAkJCSJUd28gcmVxdWVzdCBzZW5zZSBpbiBzZXJpYWwgd2VyZSBpc3N1ZWRcbiIpOwogCX0KIAotCWlmICh0YXBlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJiBwYy0+Y1swXSAhPSBSRVFVRVNUX1NFTlNFKQotCQl0YXBlLT5mYWlsZWRfcGMgPSBwYzsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBOVUxMICYmIHBjLT5jWzBdICE9IFJFUVVFU1RfU0VOU0UpCisJCWRyaXZlLT5mYWlsZWRfcGMgPSBwYzsKIAogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCWRyaXZlLT5wYyA9IHBjOwpAQCAtNjg1LDkgKzY0NSw5IEBACiAJCQkJCQl0YXBlLT5hc2NxKTsKIAkJCX0KIAkJCS8qIEdpdmluZyB1cCAqLwotCQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOworCQkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwogCQl9Ci0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQpAQCAtNjk1LDcgKzY1NSw3IEBACiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgY21kKTsKIH0KIAogLyogQSBtb2RlIHNlbnNlIGNvbW1hbmQgaXMgdXNlZCB0byAic2Vuc2UiIHRhcGUgcGFyYW1ldGVycy4gKi8KQEAgLTc0Niw4ICs3MDYsOCBAQAogCQl9CiAJCXBjLT5lcnJvciA9IDA7CiAJfSBlbHNlIHsKLQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOwotCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCX0KIAlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCXJldHVybiBpZGVfc3RvcHBlZDsKQEAgLTc5MCw2ICs3NTAsNyBAQAogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxID0gdGFwZS0+cG9zdHBvbmVkX3JxOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAl1OCBzdGF0OwogCiAJZGVidWdfbG9nKERCR19TRU5TRSwgInNlY3RvcjogJWxsdSwgbnJfc2VjdG9yczogJWx1LCIKQEAgLTgwMSwxMyArNzYyLDE1IEBACiAJCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGJ1ZmZlciBjYWNoZSBvcmlnaW5hdGVkIHJlcXVlc3RzLiAqLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgImlkZS10YXBlOiAlczogVW5zdXBwb3J0ZWQgcmVxdWVzdCBpbiAiCiAJCQkicmVxdWVzdCBxdWV1ZSAoJWQpXG4iLCBkcml2ZS0+bmFtZSwgcnEtPmNtZF90eXBlKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCiAJLyogUmV0cnkgYSBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlpZiAodGFwZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7Ci0JCXBjID0gdGFwZS0+ZmFpbGVkX3BjOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCXBjID0gZHJpdmUtPmZhaWxlZF9wYzsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC04MTUsNyArNzc4LDkgQEAKIAkJaWYgKHJxICE9IHBvc3Rwb25lZF9ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogaWRlLXRhcGUuYyBidWcgLSAiCiAJCQkJCSJUd28gRFNDIHJlcXVlc3RzIHdlcmUgcXVldWVkXG4iKTsKLQkJCWlkZXRhcGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIApAQCAtODgxLDcgKzg0NiwxNCBAQAogCUJVRygpOwogCiBvdXQ6Ci0JcmV0dXJuIGlkZXRhcGVfaXNzdWVfcGMoZHJpdmUsIHBjKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKworCWNtZC5ycSA9IHJxOworCisJcmV0dXJuIGlkZV90YXBlX2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CiB9CiAKIC8qCkBAIC0xMjI2LDcgKzExOTgsNyBAQAogCiAJaWYgKHRhcGUtPm1lcmdlX2JoKQogCQlpZGV0YXBlX2luaXRfbWVyZ2VfYnVmZmVyKHRhcGUpOwotCWlmIChlcnJvcnMgPT0gSURFVEFQRV9FUlJPUl9HRU5FUkFMKQorCWlmIChlcnJvcnMgPT0gSURFX0RSVl9FUlJPUl9HRU5FUkFMKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA0Miw5ICsyMDE0LDEzIEBACiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyBwYzsKKwl1OCBwY19idWZbMjU2XTsKIAljaGFyIGZ3X3Jldls0XSwgdmVuZG9yX2lkWzhdLCBwcm9kdWN0X2lkWzE2XTsKIAogCWlkZXRhcGVfY3JlYXRlX2lucXVpcnlfY21kKCZwYyk7CisJcGMuYnVmID0gJnBjX2J1ZlswXTsKKwlwYy5idWZfc2l6ZSA9IHNpemVvZihwY19idWYpOworCiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCB0YXBlLT5kaXNrLCAmcGMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6ICVzOiBjYW4ndCBnZXQgSU5RVUlSWSByZXN1bHRzXG4iLAogCQkJCXRhcGUtPm5hbWUpOwpAQCAtMjE5Miw4ICsyMTY4LDYgQEAKIAlkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMgPSBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzOwogCWRyaXZlLT5wY19pb19idWZmZXJzCSA9IGlkZV90YXBlX2lvX2J1ZmZlcnM7CiAKLQlzcGluX2xvY2tfaW5pdCgmdGFwZS0+bG9jayk7Ci0KIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAogCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19EU0MpIHsKQEAgLTIzMjUsNyArMjI5OSw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX3RhcGVfcmVtb3ZlLAogCS52ZXJzaW9uCQk9IElERVRBUEVfVkVSU0lPTiwKIAkuZG9fcmVxdWVzdAkJPSBpZGV0YXBlX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZXRhcGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfdGFwZV9wcm9jX2VudHJpZXMsCiAJLnByb2NfZGV2c2V0cwkJPSBpZGVfdGFwZV9wcm9jX2RldnNldHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDE2MTM4YmMuLjI0MzQyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC0zOSw4OCArMzksOTAgQEAKIAogaW50IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZikKIHsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MudGYubnNlY3QgPSAweDAxOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLm5zZWN0ID0gMHgwMTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKIAllbHNlCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7Ci0JYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47Ci0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisKKwlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmNtZCwgYnVmLCAxKTsKIH0KIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX25vX2RhdGFfaW50cihpZGVfZHJpdmVfdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqKTsKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfcGlvX2ludHIoaWRlX2RyaXZlX3QgKik7CiAKLWlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoraWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKm9yaWdfY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXIgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzICpkbWFfb3BzID0gaHdpZi0+ZG1hX29wczsKIAotCWlmICh0YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX01VTFRJX0lOIHx8Ci0JICAgIHRhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfTVVMVElfT1VUKSB7Ci0JCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG11bHRpbW9kZSBub3Qgc2V0IVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9CisJaWYgKG9yaWdfY21kLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8gJiYKKwkgICAgKG9yaWdfY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pICYmCisJICAgIGRyaXZlLT5tdWx0X2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbXVsdGltb2RlIG5vdCBzZXQhXG4iLCBkcml2ZS0+bmFtZSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJdGFzay0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTOworCWlmIChvcmlnX2NtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQorCQlvcmlnX2NtZC0+ZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfU0VUX0lOX0ZMQUdTOwogCi0JbWVtY3B5KCZod2lmLT50YXNrLCB0YXNrLCBzaXplb2YoKnRhc2spKTsKKwltZW1jcHkoY21kLCBvcmlnX2NtZCwgc2l6ZW9mKCpjbWQpKTsKIAotCWlmICgodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSykgPT0gMCkgeworCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CiAJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7Ci0JCXRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwkJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX0RFVkNUTF9PQlMpOwogCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgdGFzayk7CisKKwkJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgeworCQkJdTggZGF0YVsyXSA9IHsgdGYtPmRhdGEsIHRmLT5ob2JfZGF0YSB9OworCisJCQl0cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBjbWQsIGRhdGEsIDIpOworCQl9CisJCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgY21kKTsKIAl9CiAKLQlzd2l0Y2ggKHRhc2stPmRhdGFfcGhhc2UpIHsKLQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKLQljYXNlIFRBU0tGSUxFX09VVDoKLQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgdGYtPmNvbW1hbmQpOwotCQluZGVsYXkoNDAwKTsJLyogRklYTUUgKi8KLQkJcmV0dXJuIHByZV90YXNrX291dF9pbnRyKGRyaXZlLCB0YXNrLT5ycSk7Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9JTjoKLQljYXNlIFRBU0tGSUxFX0lOOgotCQloYW5kbGVyID0gdGFza19pbl9pbnRyOworCXN3aXRjaCAoY21kLT5wcm90b2NvbCkgeworCWNhc2UgQVRBX1BST1RfUElPOgorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgeworCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgdGYtPmNvbW1hbmQpOworCQkJbmRlbGF5KDQwMCk7CS8qIEZJWE1FICovCisJCQlyZXR1cm4gcHJlX3Rhc2tfb3V0X2ludHIoZHJpdmUsIGNtZCk7CisJCX0KKwkJaGFuZGxlciA9IHRhc2tfcGlvX2ludHI7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwotCWNhc2UgVEFTS0ZJTEVfTk9fREFUQToKKwljYXNlIEFUQV9QUk9UX05PREFUQToKIAkJaWYgKGhhbmRsZXIgPT0gTlVMTCkKIAkJCWhhbmRsZXIgPSB0YXNrX25vX2RhdGFfaW50cjsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgdGYtPmNvbW1hbmQsIGhhbmRsZXIsCi0JCQkJICAgIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBoYW5kbGVyLCBXQUlUX1dPUlNUQ0FTRSk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKLQlkZWZhdWx0OgotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwIHx8Ci0JCSAgICBkbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUpKQorCWNhc2UgQVRBX1BST1RfRE1BOgorCQlpZiAoaWRlX2RtYV9wcmVwYXJlKGRyaXZlLCBjbWQpKQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQlkbWFfb3BzLT5kbWFfZXhlY19jbWQoZHJpdmUsIHRmLT5jb21tYW5kKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZG1hX29wcy0+ZG1hX3RpbWVyX2V4cGlyeTsKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBpZGVfZG1hX2ludHIsIDIgKiBXQUlUX0NNRCk7CiAJCWRtYV9vcHMtPmRtYV9zdGFydChkcml2ZSk7CisJZGVmYXVsdDoKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRvX3J3X3Rhc2tmaWxlKTsKIAotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmRzIHdpdGhvdXQgYSBkYXRhIHBoYXNlCi0gKi8KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190ICp0YXNrID0gJmh3aWYtPnRhc2s7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JaW50IGN1c3RvbSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCWludCBjdXN0b20gPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKIAlpbnQgcmV0cmllcyA9IChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpID8gNSA6IDE7CiAJdTggc3RhdDsKIApAQCAtMTQyLDI4ICsxNDQsMjYgQEAKIAkJfSBlbHNlIGlmIChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpIHsKIAkJCWlmICgoc3RhdCAmIChBVEFfRVJSIHwgQVRBX0RSUSkpID09IDApIHsKIAkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX25vX2RhdGFfaW50ciwKLQkJCQkJCVdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJCQkJCVdBSVRfV09SU1RDQVNFKTsKIAkJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCQl9CiAJCX0KIAkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7Ci0JCS8qIGNhbGxzIGlkZV9lbmRfZHJpdmVfY21kICovCiAJfQogCi0JaWYgKCFjdXN0b20pCi0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBpZGVfcmVhZF9lcnJvcihkcml2ZSkpOwotCWVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgewotCQlod2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOwotCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKLQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOwotCQl9IGVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7Ci0JfSBlbHNlIGlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9NVUxUSSkKKwlpZiAoY3VzdG9tICYmIHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKQogCQlkcml2ZS0+bXVsdF9jb3VudCA9IGRyaXZlLT5tdWx0X3JlcTsKIAorCWlmIChjdXN0b20gPT0gMCB8fCB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lETEVJTU1FRElBVEUgfHwKKwkgICAgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9DSEtfUE9XRVIpIHsKKwkJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisKKwkJaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkKKwkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOworCQllbHNlCisJCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKKwl9CisKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKQEAgLTE5MiwyMzkgKzE5MiwxODggQEAKIAlyZXR1cm4gc3RhdDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3Bpb19zZWN0b3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkgICB1bnNpZ25lZCBpbnQgd3JpdGUpCit2b2lkIGlkZV9waW9fYnl0ZXMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAorCQkgICB1bnNpZ25lZCBpbnQgd3JpdGUsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnID0gaHdpZi0+Y3Vyc2c7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZyA9IGNtZC0+Y3Vyc2c7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1OCAqYnVmOwogCi0JY3Vyc2cgPSBod2lmLT5jdXJzZzsKLQlpZiAoIWN1cnNnKSB7Ci0JCWN1cnNnID0gc2c7Ci0JCWh3aWYtPmN1cnNnID0gc2c7CisJY3Vyc2cgPSBjbWQtPmN1cnNnOworCWlmIChjdXJzZyA9PSBOVUxMKQorCQljdXJzZyA9IGNtZC0+Y3Vyc2cgPSBzZzsKKworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgbnJfYnl0ZXMgPSBtaW4obGVuLCBjdXJzZy0+bGVuZ3RoIC0gY21kLT5jdXJzZ19vZnMpOworCisJCWlmIChucl9ieXRlcyA+IFBBR0VfU0laRSkKKwkJCW5yX2J5dGVzID0gUEFHRV9TSVpFOworCisJCXBhZ2UgPSBzZ19wYWdlKGN1cnNnKTsKKwkJb2Zmc2V0ID0gY3Vyc2ctPm9mZnNldCArIGNtZC0+Y3Vyc2dfb2ZzOworCisJCS8qIGdldCB0aGUgY3VycmVudCBwYWdlIGFuZCBvZmZzZXQgKi8KKwkJcGFnZSA9IG50aF9wYWdlKHBhZ2UsIChvZmZzZXQgPj4gUEFHRV9TSElGVCkpOworCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCisJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBvZmZzZXQ7CisKKwkJY21kLT5ubGVmdCAtPSBucl9ieXRlczsKKwkJY21kLT5jdXJzZ19vZnMgKz0gbnJfYnl0ZXM7CisKKwkJaWYgKGNtZC0+Y3Vyc2dfb2ZzID09IGN1cnNnLT5sZW5ndGgpIHsKKwkJCWN1cnNnID0gY21kLT5jdXJzZyA9IHNnX25leHQoY21kLT5jdXJzZyk7CisJCQljbWQtPmN1cnNnX29mcyA9IDA7CisJCX0KKworCQkvKiBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KKwkJaWYgKHdyaXRlKQorCQkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgY21kLCBidWYsIG5yX2J5dGVzKTsKKwkJZWxzZQorCQkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBjbWQsIGJ1ZiwgbnJfYnl0ZXMpOworCisJCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9CSU9fU1JDX0lSUSk7CisKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWxlbiAtPSBucl9ieXRlczsKIAl9Ci0KLQlwYWdlID0gc2dfcGFnZShjdXJzZyk7Ci0Jb2Zmc2V0ID0gY3Vyc2ctPm9mZnNldCArIGh3aWYtPmN1cnNnX29mcyAqIFNFQ1RPUl9TSVpFOwotCi0JLyogZ2V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIG9mZnNldCAqLwotCXBhZ2UgPSBudGhfcGFnZShwYWdlLCAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpKTsKLQlvZmZzZXQgJT0gUEFHRV9TSVpFOwotCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0jZW5kaWYKLQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBvZmZzZXQ7Ci0KLQlod2lmLT5ubGVmdC0tOwotCWh3aWYtPmN1cnNnX29mcysrOwotCi0JaWYgKChod2lmLT5jdXJzZ19vZnMgKiBTRUNUT1JfU0laRSkgPT0gY3Vyc2ctPmxlbmd0aCkgewotCQlod2lmLT5jdXJzZyA9IHNnX25leHQoaHdpZi0+Y3Vyc2cpOwotCQlod2lmLT5jdXJzZ19vZnMgPSAwOwotCX0KLQotCS8qIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciAqLwotCWlmICh3cml0ZSkKLQkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgcnEsIGJ1ZiwgU0VDVE9SX1NJWkUpOwotCWVsc2UKLQkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7Ci0KLQlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fQklPX1NSQ19JUlEpOwotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCiB9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGlvX2J5dGVzKTsKIAotc3RhdGljIHZvaWQgaWRlX3Bpb19tdWx0aShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgdW5zaWduZWQgaW50IHdyaXRlKQorc3RhdGljIHZvaWQgaWRlX3Bpb19kYXRhYmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IHdyaXRlKQogewotCXVuc2lnbmVkIGludCBuc2VjdDsKKwl1bnNpZ25lZCBpbnQgbnJfYnl0ZXM7CiAKLQluc2VjdCA9IG1pbl90KHVuc2lnbmVkIGludCwgZHJpdmUtPmh3aWYtPm5sZWZ0LCBkcml2ZS0+bXVsdF9jb3VudCk7Ci0Jd2hpbGUgKG5zZWN0LS0pCi0JCWlkZV9waW9fc2VjdG9yKGRyaXZlLCBycSwgd3JpdGUpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfcGlvX2RhdGFibG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB3cml0ZSkKLXsKIAl1OCBzYXZlZF9pb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKIAotCWlmIChycS0+YmlvKQkvKiBmcyByZXF1ZXN0ICovCi0JCXJxLT5lcnJvcnMgPSAwOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKQorCQljbWQtPnJxLT5lcnJvcnMgPSAwOwogCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJaWRlX3Rhc2tfdCAqdGFzayA9IHJxLT5zcGVjaWFsOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JT18xNkJJVCkKLQkJCWRyaXZlLT5pb18zMmJpdCA9IDA7Ci0JfQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lPXzE2QklUKQorCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCi0Jc3dpdGNoIChkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSkgewotCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCWlkZV9waW9fbXVsdGkoZHJpdmUsIHJxLCB3cml0ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlkZV9waW9fc2VjdG9yKGRyaXZlLCBycSwgd3JpdGUpOwotCQlicmVhazsKLQl9CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKQorCQlucl9ieXRlcyA9IG1pbl90KHVuc2lnbmVkLCBjbWQtPm5sZWZ0LCBkcml2ZS0+bXVsdF9jb3VudCA8PCA5KTsKKwllbHNlCisJCW5yX2J5dGVzID0gU0VDVE9SX1NJWkU7CisKKwlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBucl9ieXRlcyk7CiAKIAlkcml2ZS0+aW9fMzJiaXQgPSBzYXZlZF9pb18zMmJpdDsKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJCSAgY29uc3QgY2hhciAqcywgdTggc3RhdCkKK3N0YXRpYyB2b2lkIGlkZV9lcnJvcl9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCWlmIChycS0+YmlvKSB7Ci0JCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQkJaW50IHNlY3RvcnMgPSBod2lmLT5uc2VjdCAtIGh3aWYtPm5sZWZ0OworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSB7CisJCWludCBucl9ieXRlcyA9IGNtZC0+bmJ5dGVzIC0gY21kLT5ubGVmdDsKIAotCQlzd2l0Y2ggKGh3aWYtPmRhdGFfcGhhc2UpIHsKLQkJY2FzZSBUQVNLRklMRV9JTjoKLQkJCWlmIChod2lmLT5ubGVmdCkKLQkJCQlicmVhazsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIFRBU0tGSUxFX09VVDoKLQkJCXNlY3RvcnMtLTsKLQkJCWJyZWFrOwotCQljYXNlIFRBU0tGSUxFX01VTFRJX0lOOgotCQkJaWYgKGh3aWYtPm5sZWZ0KQotCQkJCWJyZWFrOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgVEFTS0ZJTEVfTVVMVElfT1VUOgotCQkJc2VjdG9ycyAtPSBkcml2ZS0+bXVsdF9jb3VudDsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQlpZiAoY21kLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8gJiYKKwkJICAgICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgfHwgY21kLT5ubGVmdCA9PSAwKSkgeworCQkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKQorCQkJCW5yX2J5dGVzIC09IGRyaXZlLT5tdWx0X2NvdW50IDw8IDk7CisJCQllbHNlCisJCQkJbnJfYnl0ZXMgLT0gU0VDVE9SX1NJWkU7CiAJCX0KIAotCQlpZiAoc2VjdG9ycyA+IDApIHsKLQkJCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7Ci0KLQkJCWRydiA9ICooc3RydWN0IGlkZV9kcml2ZXIgKiopcnEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQkJCWRydi0+ZW5kX3JlcXVlc3QoZHJpdmUsIDEsIHNlY3RvcnMpOwotCQl9CisJCWlmIChucl9ieXRlcyA+IDApCisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIG5yX2J5dGVzKTsKIAl9Ci0JcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgcywgc3RhdCk7CiB9CiAKLXZvaWQgdGFza19lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCkKK3ZvaWQgaWRlX2ZpbmlzaF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1OCBzdGF0KQogewotCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7Ci0JCXU4IGVyciA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CisJdTggZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwogCi0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHJxLT5ycV9kaXNrKSB7Ci0JCXN0cnVjdCBpZGVfZHJpdmVyICpkcnY7Ci0KLQkJZHJ2ID0gKihzdHJ1Y3QgaWRlX2RyaXZlciAqKilycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOzsKLQkJZHJ2LT5lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOwotCX0gZWxzZQotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIHJxLT5ucl9zZWN0b3JzKTsKKwlpZGVfY29tcGxldGVfY21kKGRyaXZlLCBjbWQsIHN0YXQsIGVycik7CisJcnEtPmVycm9ycyA9IGVycjsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IC1FSU8gOiAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIH0KIAogLyoKLSAqIFdlIGdvdCBhbiBpbnRlcnJ1cHQgb24gYSB0YXNrX2luIGNhc2UsIGJ1dCBubyBlcnJvcnMgYW5kIG5vIERSUS4KLSAqCi0gKiBJdCBtaWdodCBiZSBhIHNwdXJpb3VzIGlycSAoc2hhcmVkIGlycSksIGJ1dCBpdCBtaWdodCBiZSBhCi0gKiBjb21tYW5kIHRoYXQgaGFkIG5vIG91dHB1dC4KKyAqIEhhbmRsZXIgZm9yIGNvbW1hbmQgd2l0aCBQSU8gZGF0YSBwaGFzZS4KICAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX2luX3VuZXhwZWN0ZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQpCi17Ci0JLyogQ29tbWFuZCBhbGwgZG9uZT8gKi8KLQlpZiAoT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQVRBX0JVU1kpKSB7Ci0JCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCS8qIEFzc3VtZSBpdCB3YXMgYSBzcHVyaW91cyBpcnEgKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX2luX2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBIYW5kbGVyIGZvciBjb21tYW5kIHdpdGggUElPIGRhdGEtaW4gcGhhc2UgKFJlYWQvUmVhZCBNdWx0aXBsZSkuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19pbl9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19waW9faW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmZHJpdmUtPmh3aWYtPmNtZDsKIAl1OCBzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKwl1OCB3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JLyogRXJyb3I/ICovCi0JaWYgKHN0YXQgJiBBVEFfRVJSKQotCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fZnVuY19fLCBzdGF0KTsKKwlpZiAod3JpdGUgPT0gMCkgeworCQkvKiBFcnJvcj8gKi8KKwkJaWYgKHN0YXQgJiBBVEFfRVJSKQorCQkJZ290byBvdXRfZXJyOwogCi0JLyogRGlkbid0IHdhbnQgYW55IGRhdGE/IE9kZC4gKi8KLQlpZiAoKHN0YXQgJiBBVEFfRFJRKSA9PSAwKQotCQlyZXR1cm4gdGFza19pbl91bmV4cGVjdGVkKGRyaXZlLCBycSwgc3RhdCk7CisJCS8qIERpZG4ndCB3YW50IGFueSBkYXRhPyBPZGQuICovCisJCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKKwkJCS8qIENvbW1hbmQgYWxsIGRvbmU/ICovCisJCQlpZiAoT0tfU1RBVChzdGF0LCBBVEFfRFJEWSwgQVRBX0JVU1kpKQorCQkJCWdvdG8gb3V0X2VuZDsKIAotCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBycSwgMCk7CisJCQkvKiBBc3N1bWUgaXQgd2FzIGEgc3B1cmlvdXMgaXJxICovCisJCQlnb3RvIG91dF93YWl0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0KSkKKwkJCWdvdG8gb3V0X2VycjsKKworCQkvKiBEZWFsIHdpdGggdW5leHBlY3RlZCBBVEEgZGF0YSBwaGFzZS4gKi8KKwkJaWYgKCgoc3RhdCAmIEFUQV9EUlEpID09IDApIF4gKGNtZC0+bmxlZnQgPT0gMCkpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJaWYgKHdyaXRlICYmIGNtZC0+bmxlZnQgPT0gMCkKKwkJZ290byBvdXRfZW5kOworCisJLyogU3RpbGwgZGF0YSBsZWZ0IHRvIHRyYW5zZmVyLiAqLworCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBjbWQsIHdyaXRlKTsKIAogCS8qIEFyZSB3ZSBkb25lPyBDaGVjayBzdGF0dXMgYW5kIGZpbmlzaCB0cmFuc2Zlci4gKi8KLQlpZiAoIWh3aWYtPm5sZWZ0KSB7CisJaWYgKHdyaXRlID09IDAgJiYgY21kLT5ubGVmdCA9PSAwKSB7CiAJCXN0YXQgPSB3YWl0X2RyaXZlX25vdF9idXN5KGRyaXZlKTsKIAkJaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKLQkJCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOwotCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJCWdvdG8gb3V0X2VycjsKKworCQlnb3RvIG91dF9lbmQ7CiAJfQotCitvdXRfd2FpdDoKIAkvKiBTdGlsbCBkYXRhIGxlZnQgdG8gdHJhbnNmZXIuICovCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19pbl9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0KKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX3Bpb19pbnRyLCBXQUlUX1dPUlNUQ0FTRSk7CiAJcmV0dXJuIGlkZV9zdGFydGVkOworb3V0X2VuZDoKKwlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpID09IDApCisJCWlkZV9maW5pc2hfY21kKGRyaXZlLCBjbWQsIHN0YXQpOworCWVsc2UKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBjbWQtPnJxLT5ucl9zZWN0b3JzIDw8IDkpOworCXJldHVybiBpZGVfc3RvcHBlZDsKK291dF9lcnI6CisJaWRlX2Vycm9yX2NtZChkcml2ZSwgY21kKTsKKwlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCBfX2Z1bmNfXywgc3RhdCk7CiB9CiAKLS8qCi0gKiBIYW5kbGVyIGZvciBjb21tYW5kIHdpdGggUElPIGRhdGEtb3V0IHBoYXNlIChXcml0ZS9Xcml0ZSBNdWx0aXBsZSkuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19vdXRfaW50ciAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1OCBzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVChzdGF0LCBEUklWRV9SRUFEWSwgZHJpdmUtPmJhZF93c3RhdCkpCi0JCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOwotCi0JLyogRGVhbCB3aXRoIHVuZXhwZWN0ZWQgQVRBIGRhdGEgcGhhc2UuICovCi0JaWYgKCgoc3RhdCAmIEFUQV9EUlEpID09IDApIF4gIWh3aWYtPm5sZWZ0KQotCQlyZXR1cm4gdGFza19lcnJvcihkcml2ZSwgcnEsIF9fZnVuY19fLCBzdGF0KTsKLQotCWlmICghaHdpZi0+bmxlZnQpIHsKLQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyogU3RpbGwgZGF0YSBsZWZ0IHRvIHRyYW5zZmVyLiAqLwotCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBycSwgMSk7Ci0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19vdXRfaW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCi0JcmV0dXJuIGlkZV9zdGFydGVkOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHByZV90YXNrX291dF9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCBwcmVfdGFza19vdXRfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAKIAlpZiAoaWRlX3dhaXRfc3RhdCgmc3RhcnRzdG9wLCBkcml2ZSwgQVRBX0RSUSwKIAkJCSAgZHJpdmUtPmJhZF93c3RhdCwgV0FJVF9EUlEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIERSUSBhZnRlciBpc3N1aW5nICVzV1JJVEUlc1xuIiwKLQkJCWRyaXZlLT5uYW1lLCBkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA/ICJNVUxUIiA6ICIiLAorCQkJZHJpdmUtPm5hbWUsCisJCQkoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pID8gIk1VTFQiIDogIiIsCiAJCQkoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkgPyAiX0VYVCIgOiAiIik7CiAJCXJldHVybiBzdGFydHN0b3A7CiAJfQpAQCAtNDMyLDEzICszODEsMTUgQEAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVU5NQVNLKSA9PSAwKQogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19vdXRfaW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCWlkZV9waW9fZGF0YWJsb2NrKGRyaXZlLCBycSwgMSk7CisJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmdGFza19waW9faW50ciwgV0FJVF9XT1JTVENBU0UpOworCisJaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIGNtZCwgMSk7CiAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLWludCBpZGVfcmF3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaywgdTggKmJ1ZiwgdTE2IG5zZWN0KQoraW50IGlkZV9yYXdfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1OCAqYnVmLAorCQkgICAgIHUxNiBuc2VjdCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaW50IGVycm9yOwpAQCAtNDU2LDExICs0MDcsMTEgQEAKIAlycS0+aGFyZF9ucl9zZWN0b3JzID0gcnEtPm5yX3NlY3RvcnMgPSBuc2VjdDsKIAlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnMgPSBuc2VjdDsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUlc7CiAKLQlycS0+c3BlY2lhbCA9IHRhc2s7Ci0JdGFzay0+cnEgPSBycTsKKwlycS0+c3BlY2lhbCA9IGNtZDsKKwljbWQtPnJxID0gcnE7CiAKIAllcnJvciA9IGJsa19leGVjdXRlX3JxKGRyaXZlLT5xdWV1ZSwgTlVMTCwgcnEsIDApOwogCWJsa19wdXRfcmVxdWVzdChycSk7CkBAIC00NzAsMTkgKzQyMSwxOSBAQAogCiBFWFBPUlRfU1lNQk9MKGlkZV9yYXdfdGFza2ZpbGUpOwogCi1pbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoraW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQl0YXNrLT5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKKwljbWQtPnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwogCi0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsIHRhc2ssIE5VTEwsIDApOworCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCBjbWQsIE5VTEwsIDApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX25vX2RhdGFfdGFza2ZpbGUpOwogCiAjaWZkZWYgQ09ORklHX0lERV9UQVNLX0lPQ1RMCi1pbnQgaWRlX3Rhc2tmaWxlX2lvY3RsIChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoraW50IGlkZV90YXNrZmlsZV9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWlkZV90YXNrX3JlcXVlc3RfdAkqcmVxX3Rhc2s7Ci0JaWRlX3Rhc2tfdAkJYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZAkJY21kOwogCXU4ICpvdXRidWYJCT0gTlVMTDsKIAl1OCAqaW5idWYJCT0gTlVMTDsKIAl1OCAqZGF0YV9idWYJCT0gTlVMTDsKQEAgLTUzNiw1MyArNDg3LDYzIEBACiAJCX0KIAl9CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAotCW1lbWNweSgmYXJncy50Zl9hcnJheVswXSwgcmVxX3Rhc2stPmhvYl9wb3J0cywgSERJT19EUklWRV9IT0JfSERSX1NJWkUgLSAyKTsKLQltZW1jcHkoJmFyZ3MudGZfYXJyYXlbNl0sIHJlcV90YXNrLT5pb19wb3J0cywgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFKTsKKwltZW1jcHkoJmNtZC50Zl9hcnJheVswXSwgcmVxX3Rhc2stPmhvYl9wb3J0cywKKwkgICAgICAgSERJT19EUklWRV9IT0JfSERSX1NJWkUgLSAyKTsKKwltZW1jcHkoJmNtZC50Zl9hcnJheVs2XSwgcmVxX3Rhc2stPmlvX3BvcnRzLAorCSAgICAgICBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOwogCi0JYXJncy5kYXRhX3BoYXNlID0gcmVxX3Rhc2stPmRhdGFfcGhhc2U7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfSU9fMTZCSVQgfCBJREVfVEZMQUdfREVWSUNFIHwKKwkJCSBJREVfVEZMQUdfSU5fVEY7CiAKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lPXzE2QklUIHwgSURFX1RGTEFHX0RFVklDRSB8Ci0JCQlJREVfVEZMQUdfSU5fVEY7CiAJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBNDgpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19JTl9IT0IpOworCQljbWQudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19JTl9IT0IpOwogCiAJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYWxsKSB7Ci0JCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZMQUdHRUQ7CisJCWNtZC5mdGZfZmxhZ3MgfD0gSURFX0ZURkxBR19GTEFHR0VEOwogCiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuZGF0YSkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9EQVRBOworCQkJY21kLmZ0Zl9mbGFncyB8PSBJREVfRlRGTEFHX09VVF9EQVRBOwogCiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIubnNlY3Rvcl9ob2IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX05TRUNUOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX05TRUNUOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLnNlY3Rvcl9ob2IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQUw7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBTDsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5sY3lsX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBTTsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFNOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmhjeWxfaG9iKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFIOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQUg7CiAKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5lcnJvcl9mZWF0dXJlKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9GRUFUVVJFOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLm5zZWN0b3IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTlNFQ1Q7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9OU0VDVDsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5zZWN0b3IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBTDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUw7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIubGN5bCkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFNOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBTTsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5oY3lsKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUg7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFIOwogCX0gZWxzZSB7Ci0JCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9URjsKLQkJaWYgKGFyZ3MudGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9COworCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9URjsKKwkJaWYgKGNtZC50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQjsKIAl9CiAKIAlpZiAocmVxX3Rhc2stPmluX2ZsYWdzLmIuZGF0YSkKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU5fREFUQTsKKwkJY21kLmZ0Zl9mbGFncyB8PSBJREVfRlRGTEFHX0lOX0RBVEE7CiAKLQlzd2l0Y2gocmVxX3Rhc2stPmRhdGFfcGhhc2UpIHsKKwlpZiAocmVxX3Rhc2stPnJlcV9jbWQgPT0gSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFKSB7CisJCS8qIGZpeHVwIGRhdGEgcGhhc2UgaWYgbmVlZGVkICovCisJCWlmIChyZXFfdGFzay0+ZGF0YV9waGFzZSA9PSBUQVNLRklMRV9JTl9ETUFRIHx8CisJCSAgICByZXFfdGFzay0+ZGF0YV9waGFzZSA9PSBUQVNLRklMRV9JTl9ETUEpCisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCX0KKworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX0RNQTsKKworCXN3aXRjaCAocmVxX3Rhc2stPmRhdGFfcGhhc2UpIHsKIAkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6CiAJCQlpZiAoIWRyaXZlLT5tdWx0X2NvdW50KSB7CiAJCQkJLyogKGhzKTogZ2l2ZSB1cCBpZiBtdWx0Y291bnQgaXMgbm90IHNldCAqLwpAQCAtNTkyLDExICs1NTMsMTQgQEAKIAkJCQllcnIgPSAtRVBFUk07CiAJCQkJZ290byBhYm9ydDsKIAkJCX0KKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfTVVMVElfUElPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgVEFTS0ZJTEVfT1VUOgorCQkJY21kLnByb3RvY29sID0gQVRBX1BST1RfUElPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgVEFTS0ZJTEVfT1VUX0RNQVE6CiAJCWNhc2UgVEFTS0ZJTEVfT1VUX0RNQToKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CiAJCQluc2VjdCA9IHRhc2tvdXQgLyBTRUNUT1JfU0laRTsKIAkJCWRhdGFfYnVmID0gb3V0YnVmOwogCQkJYnJlYWs7CkBAIC02MDksOCArNTczLDEwIEBACiAJCQkJZXJyID0gLUVQRVJNOwogCQkJCWdvdG8gYWJvcnQ7CiAJCQl9CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX01VTFRJX1BJTzsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFRBU0tGSUxFX0lOOgorCQkJY21kLnByb3RvY29sID0gQVRBX1BST1RfUElPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgVEFTS0ZJTEVfSU5fRE1BUToKIAkJY2FzZSBUQVNLRklMRV9JTl9ETUE6CkBAIC02MTgsNiArNTg0LDcgQEAKIAkJCWRhdGFfYnVmID0gaW5idWY7CiAJCQlicmVhazsKIAkJY2FzZSBUQVNLRklMRV9OT19EQVRBOgorCQkJY21kLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtNjI3LDcgKzU5NCw3IEBACiAJaWYgKHJlcV90YXNrLT5yZXFfY21kID09IElERV9EUklWRV9UQVNLX05PX0RBVEEpCiAJCW5zZWN0ID0gMDsKIAllbHNlIGlmICghbnNlY3QpIHsKLQkJbnNlY3QgPSAoYXJncy50Zi5ob2JfbnNlY3QgPDwgOCkgfCBhcmdzLnRmLm5zZWN0OworCQluc2VjdCA9IChjbWQudGYuaG9iX25zZWN0IDw8IDgpIHwgY21kLnRmLm5zZWN0OwogCiAJCWlmICghbnNlY3QpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGluL291dCBjb21tYW5kIHdpdGhvdXQgZGF0YVxuIiwKQEAgLTYzNywxNSArNjA0LDE0IEBACiAJCX0KIAl9CiAKLQlpZiAocmVxX3Rhc2stPnJlcV9jbWQgPT0gSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFKQotCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKwllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBkYXRhX2J1ZiwgbnNlY3QpOwogCi0JZXJyID0gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmFyZ3MsIGRhdGFfYnVmLCBuc2VjdCk7CisJbWVtY3B5KHJlcV90YXNrLT5ob2JfcG9ydHMsICZjbWQudGZfYXJyYXlbMF0sCisJICAgICAgIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFIC0gMik7CisJbWVtY3B5KHJlcV90YXNrLT5pb19wb3J0cywgJmNtZC50Zl9hcnJheVs2XSwKKwkgICAgICAgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFKTsKIAotCW1lbWNweShyZXFfdGFzay0+aG9iX3BvcnRzLCAmYXJncy50Zl9hcnJheVswXSwgSERJT19EUklWRV9IT0JfSERSX1NJWkUgLSAyKTsKLQltZW1jcHkocmVxX3Rhc2stPmlvX3BvcnRzLCAmYXJncy50Zl9hcnJheVs2XSwgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFKTsKLQotCWlmICgoYXJncy50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEX1NFVF9JTl9GTEFHUykgJiYKKwlpZiAoKGNtZC5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX1NFVF9JTl9GTEFHUykgJiYKIAkgICAgcmVxX3Rhc2stPmluX2ZsYWdzLmFsbCA9PSAwKSB7CiAJCXJlcV90YXNrLT5pbl9mbGFncy5hbGwgPSBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTOwogCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGltaW5ncy5jCmluZGV4IDgxZjUyN2EuLjAwMWE1NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRpbWluZ3MuYwpAQCAtNDMsNiArNDMsOCBAQAogCXsgWEZFUl9VRE1BXzEsICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgODAgfSwKIAl7IFhGRVJfVURNQV8wLCAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgMTIwIH0sCiAKKwl7IFhGRVJfTVdfRE1BXzQsICAyNSwgICAwLCAgIDAsICAgMCwgIDU1LCAgMjAsICA4MCwgICAwIH0sCisJeyBYRkVSX01XX0RNQV8zLCAgMjUsICAgMCwgICAwLCAgIDAsICA2NSwgIDI1LCAxMDAsICAgMCB9LAogCXsgWEZFUl9NV19ETUFfMiwgIDI1LCAgIDAsICAgMCwgICAwLCAgNzAsICAyNSwgMTIwLCAgIDAgfSwKIAl7IFhGRVJfTVdfRE1BXzEsICA0NSwgICAwLCAgIDAsICAgMCwgIDgwLCAgNTAsIDE1MCwgICAwIH0sCiAJeyBYRkVSX01XX0RNQV8wLCAgNjAsICAgMCwgICAwLCAgIDAsIDIxNSwgMjE1LCA0ODAsICAgMCB9LApAQCAtNTEsNyArNTMsOCBAQAogCXsgWEZFUl9TV19ETUFfMSwgIDkwLCAgIDAsICAgMCwgICAwLCAyNDAsIDI0MCwgNDgwLCAgIDAgfSwKIAl7IFhGRVJfU1dfRE1BXzAsIDEyMCwgICAwLCAgIDAsICAgMCwgNDgwLCA0ODAsIDk2MCwgICAwIH0sCiAKLQl7IFhGRVJfUElPXzUsICAgICAyMCwgIDUwLCAgMzAsIDEwMCwgIDUwLCAgMzAsIDEwMCwgICAwIH0sCisJeyBYRkVSX1BJT182LCAgICAgMTAsICA1NSwgIDIwLCAgODAsICA1NSwgIDIwLCAgODAsICAgMCB9LAorCXsgWEZFUl9QSU9fNSwgICAgIDE1LCAgNjUsICAyNSwgMTAwLCAgNjUsICAyNSwgMTAwLCAgIDAgfSwKIAl7IFhGRVJfUElPXzQsICAgICAyNSwgIDcwLCAgMjUsIDEyMCwgIDcwLCAgMjUsIDEyMCwgICAwIH0sCiAJeyBYRkVSX1BJT18zLCAgICAgMzAsICA4MCwgIDcwLCAxODAsICA4MCwgIDcwLCAxODAsICAgMCB9LAogCkBAIC05MCw2ICs5MywxMCBAQAogCQkvKiBjb25zZXJ2YXRpdmUgImRvd25ncmFkZSIgZm9yIGFsbCBwcmUtQVRBMiBkcml2ZXMgKi8KIAkJaWYgKHBpbyA8IDMgJiYgY3ljbGUgPCB0LT5jeWNsZSkKIAkJCWN5Y2xlID0gMDsgLyogdXNlIHN0YW5kYXJkIHRpbWluZyAqLworCisJCS8qIFVzZSB0aGUgc3RhbmRhcmQgdGltaW5nIGZvciB0aGUgQ0Ygc3BlY2lmaWMgbW9kZXMgdG9vICovCisJCWlmIChwaW8gPiA0ICYmIGF0YV9pZF9pc19jZmEoaWQpKQorCQkJY3ljbGUgPSAwOwogCX0KIAogCXJldHVybiBjeWNsZSA/IGN5Y2xlIDogdC0+Y3ljbGU7CkBAIC0xNjEsNyArMTY4LDggQEAKIAogCQlpZiAoc3BlZWQgPD0gWEZFUl9QSU9fMikKIAkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPXTsKLQkJZWxzZSBpZiAoc3BlZWQgPD0gWEZFUl9QSU9fNSkKKwkJZWxzZSBpZiAoKHNwZWVkIDw9IFhGRVJfUElPXzQpIHx8CisJCQkgKHNwZWVkID09IFhGRVJfUElPXzUgJiYgIWF0YV9pZF9pc19jZmEoaWQpKSkKIAkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPX0lPUkRZXTsKIAkJZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKQogCQkJcC5jeWNsZSA9IGlkW0FUQV9JRF9FSURFX0RNQV9NSU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCmluZGV4IDY5MTBmNmEuLmFmNDRiZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKQEAgLTksMTEgKzksMTEgQEAKIAkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKIAkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9Ci0JeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07CisJeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiLCAiTVdETUEzIiwgIk1XRE1BNCIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9CiAJeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KLQl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKKwl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIsICJQSU82IiB9OwogCiAvKioKICAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKQEAgLTMwLDExICszMCwxMSBAQAogCiAJaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKIAkJcyA9IHVkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfNCkKIAkJcyA9IG13ZG1hX3N0cltpXTsKIAllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQogCQlzID0gc3dkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNikKIAkJcyA9IHBpb19zdHJbaSAmIDB4N107CiAJZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQogCQlzID0gIlBJTyBTTE9XIjsKQEAgLTc5LDcgKzc5LDEwIEBACiAJCX0KIAogCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJICAgICAgLyogQVRBMj8gKi8KLQkJCWlmIChhdGFfaWRfaGFzX2lvcmR5KGlkKSkgeworCQkJaWYgKGF0YV9pZF9pc19jZmEoaWQpICYmIChpZFtBVEFfSURfQ0ZBX01PREVTXSAmIDcpKQorCQkJCXBpb19tb2RlID0gNCArIG1pbl90KGludCwgMiwKKwkJCQkJCSAgICAgaWRbQVRBX0lEX0NGQV9NT0RFU10gJiA3KTsKKwkJCWVsc2UgaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7CiAJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgewogCQkJCQlvdmVycmlkZGVuID0gMDsKIAkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKQEAgLTIzOSw3ICsyNDIsNyBAQAogCiAJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKIAotCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQorCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT182KQogCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CiAKIAlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGVfYXJtLmMgYi9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkY2FjOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvaWRlX2FybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIEFSTSBkZWZhdWx0IElERSBob3N0IGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Ci0gKiBCYXNlZCBvbiBjb2RlIGJ5OiBSdXNzZWxsIEtpbmcsIElhbiBNb2x0b24gYW5kIEFsZXhhbmRlciBTY2h1bHouCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImlkZV9hcm0iCi0KLSNkZWZpbmUgSURFX0FSTV9JTwkweDFmMAotI2RlZmluZSBJREVfQVJNX0lSUQlJUlFfSEFSRERJU0sKLQotc3RhdGljIGludCBfX2luaXQgaWRlX2FybV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gSURFX0FSTV9JTywgY3RsID0gSURFX0FSTV9JTyArIDB4MjA2OwotCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oYmFzZSwgOCwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEkvTyByZXNvdXJjZSAweCVsWC0weCVsWCBub3QgZnJlZS5cbiIsCi0JCQkJRFJWX05BTUUsIGJhc2UsIGJhc2UgKyA3KTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGN0bCwgMSwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEkvTyByZXNvdXJjZSAweCVsWCBub3QgZnJlZS5cbiIsCi0JCQkJRFJWX05BTUUsIGN0bCk7Ci0JCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDgpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOwotCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIGJhc2UsIGN0bCk7Ci0JaHcuaXJxID0gSURFX0FSTV9JUlE7Ci0JaHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOwotCi0JcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOwotfQotCi1tb2R1bGVfaW5pdChpZGVfYXJtX2luaXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pdDgyMXguYyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCmluZGV4IDZiOWZjOTUuLjUxYWE3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL2l0ODIxeC5jCkBAIC01MDgsMTIgKzUwOCwxMSBAQAogc3RhdGljIHN0cnVjdCBpZGVfZG1hX29wcyBpdDgyMXhfcGFzc190aHJvdWdoX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpdDgyMXhfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGl0ODIxeF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWFjaWRlLmMgYi9kcml2ZXJzL2lkZS9tYWNpZGUuYwppbmRleCAzYzYwMDY0Li40YjE3MThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9tYWNpZGUuYworKysgYi9kcml2ZXJzL2lkZS9tYWNpZGUuYwpAQCAtODAsNiArODAsMTEgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gbWFjaWRlX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKK307CisKIHN0YXRpYyBjb25zdCBjaGFyICptYWNfaWRlX25hbWVbXSA9CiAJeyAiUXVhZHJhIiwgIlBvd2VyYm9vayIsICJQb3dlcmJvb2sgQmFib29uIiB9OwogCkBAIC0xMjIsNyArMTI3LDcgQEAKIAogCW1hY2lkZV9zZXR1cF9wb3J0cygmaHcsIGJhc2UsIGlycSwgYWNrX2ludHIpOwogCi0JcmV0dXJuIGlkZV9ob3N0X2FkZChOVUxMLCBod3MsIE5VTEwpOworCXJldHVybiBpZGVfaG9zdF9hZGQoJm1hY2lkZV9wb3J0X2luZm8sIGh3cywgTlVMTCk7CiB9CiAKIG1vZHVsZV9pbml0KG1hY2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL25zODc0MTUuYyBiL2RyaXZlcnMvaWRlL25zODc0MTUuYwppbmRleCBlYTQ4YTNlLi43MWEzOWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCkBAIC02MSw1NyArNjEsNTIgQEAKIAlyZXR1cm4gc3VwZXJpb19pZGVfaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogfQogCi1zdGF0aWMgdm9pZCBzdXBlcmlvX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgc3VwZXJpb190Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZkcml2ZS0+aHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YSA9IGludyhpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQorCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0Jb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCW91dGIoQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0VSUk9SKQorCQl0Zi0+ZXJyb3IgID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHN1cGVyaW9faWRlX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCW91dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJCW91dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKLQkJCXRmLT5ob2JfbnNlY3QgICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9FUlJPUikKKwkJCXRmLT5ob2JfZXJyb3IgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJCXRmLT5ob2JfbGJhbCAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQkJdGYtPmhvYl9sYmFtICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIAorc3RhdGljIHZvaWQgbnM4NzQxNV9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBzdXBlcmlvX3RwX29wcyA9IHsKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IHN1cGVyaW9fcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IG5zODc0MTVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBzdXBlcmlvX3RmX3JlYWQsCiAKQEAgLTE5MCwxMCArMTg1LDE4IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBuczg3NDE1X3NlbGVjdHByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIG5zODc0MTVfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLAogCQkJICAgICAgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKTsKKworCW91dGIoZHJpdmUtPnNlbGVjdCB8IEFUQV9ERVZJQ0VfT0JTLCBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBuczg3NDE1X2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKKwlpZGVfZG1hX3N0YXJ0KGRyaXZlKTsKIH0KIAogc3RhdGljIGludCBuczg3NDE1X2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtMjAxLDcgKzIwNCw2IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXU4IGRtYV9zdGF0ID0gMCwgZG1hX2NtZCA9IDA7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAlkbWFfc3RhdCA9IGh3aWYtPmRtYV9vcHMtPmRtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CiAJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KIAlkbWFfY21kID0gaW5iKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwpAQCAtMjEwLDIzICsyMTIsMTMgQEAKIAkvKiBmcm9tIEVSUkFUQTogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKIAlvdXRiKGRtYV9jbWQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKLQkvKiBhbmQgZnJlZSBhbnkgRE1BIHJlc291cmNlcyAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKKworCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7CisKIAkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CiB9CiAKLXN0YXRpYyBpbnQgbnM4NzQxNV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCS8qIHNlbGVjdCBETUEgeGZlciAqLwotCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMSk7Ci0JaWYgKCFpZGVfZG1hX3NldHVwKGRyaXZlKSkKLQkJcmV0dXJuIDA7Ci0JLyogRE1BIGZhaWxlZDogc2VsZWN0IFBJTyB4ZmVyICovCi0JbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9uczg3NDE1IChpZGVfaHdpZl90ICpod2lmKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CkBAIC0yNDIsNyArMjM0LDcgQEAKIAkgKiBBbHNvLCBsZWF2ZSBJUlEgbWFza2VkIGR1cmluZyBkcml2ZSBwcm9iaW5nLCB0byBwcmV2ZW50IGluZmluaXRlCiAJICogaW50ZXJydXB0cyBmcm9tIGEgcG90ZW50aWFsbHkgZmxvYXRpbmcgSU5UQS4uCiAJICoKLQkgKiBJUlFzIGdldCB1bm1hc2tlZCBpbiBzZWxlY3Rwcm9jIHdoZW4gZHJpdmUgaXMgZmlyc3QgdXNlZC4KKwkgKiBJUlFzIGdldCB1bm1hc2tlZCBpbiBkZXZfc2VsZWN0KCkgd2hlbiBkcml2ZSBpcyBmaXJzdCB1c2VkLgogCSAqLwogCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDQwLCAmY3RybCk7CiAJKHZvaWQpIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHgwOSwgJnByb2dpZik7CkBAIC0yNzAsNyArMjYyLDcgQEAKICNpZmRlZiBfX3NwYXJjX3Y5X18KIAkJLyoKIAkJICogWFhYOiBSZXNldCB0aGUgZGV2aWNlLCBpZiB3ZSBkb24ndCBpdCB3aWxsIG5vdCByZXNwb25kIHRvCi0JCSAqICAgICAgU0VMRUNUX0RSSVZFKCkgcHJvcGVybHkgZHVyaW5nIGZpcnN0IGlkZV9wcm9iZV9wb3J0KCkuCisJCSAqICAgICAgZGV2X3NlbGVjdCgpIHByb3Blcmx5IGR1cmluZyBmaXJzdCBpZGVfcHJvYmVfcG9ydCgpLgogCQkgKi8KIAkJdGltZW91dCA9IDEwMDAwOwogCQlvdXRiKDEyLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CkBAIC0yOTQsMjYgKzI4NiwzNSBAQAogCW91dGIoMHg2MCwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIG5zODc0MTVfcG9ydF9vcHMgPSB7Ci0JLnNlbGVjdHByb2MJCT0gbnM4NzQxNV9zZWxlY3Rwcm9jLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIG5zODc0MTVfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAorCisJLmRldl9zZWxlY3QJCT0gbnM4NzQxNV9kZXZfc2VsZWN0LAorCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgbnM4NzQxNV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKLQkuZG1hX3NldHVwCQk9IG5zODc0MTVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKLQkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfc3RhcnQJCT0gbnM4NzQxNV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gbnM4NzQxNV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHN1cGVyaW9fZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBuczg3NDE1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX25zODc0MTUsCi0JLnBvcnRfb3BzCT0gJm5zODc0MTVfcG9ydF9vcHMsCisJLnRwX29wcyAJPSAmbnM4NzQxNV90cF9vcHMsCiAJLmRtYV9vcHMJPSAmbnM4NzQxNV9kbWFfb3BzLAogCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CiAJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jIGIvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYwppbmRleCBmMzhhYWM3Li5jN2FjY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXN0cnVjdCBjbGsgKmNsazsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlycTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgcmF0ZSwgbWVtX3NpemU7CiAJaW50IGksIHJjOwogCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKIApAQCAtMzc0LDEzICszNzQsMTggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCBtZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxLAotCQkJICAgICAgICJwYWxtX2JrMzcxMCIpID09IE5VTEwpIHsKKwltZW1fc2l6ZSA9IG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDE7CisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCBtZW1fc2l6ZSwgInBhbG1fYmszNzEwIikgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWJhc2UgPSBJT19BRERSRVNTKG1lbS0+c3RhcnQpOworCWJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKKwlpZiAoIWJhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gbWFwIElPIG1lbW9yeVxuIik7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCBtZW1fc2l6ZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qIENvbmZpZ3VyZSB0aGUgUGFsbSBDaGlwIGNvbnRyb2xsZXIgKi8KIAlwYWxtX2JrMzcxMF9jaGlwaW5pdChiYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKaW5kZXggY2JhNjZlYi4uMjQ4YTU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKQEAgLTI1OCwxMiArMjU4LDYgQEAKIAlpZGVfZG1hX2xvc3RfaXJxKGRyaXZlKTsKIH0KIAotc3RhdGljIHZvaWQgcGRjMjAyeHhfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCXBkYzIwMnh4X3Jlc2V0KGRyaXZlKTsKLQlpZGVfZG1hX3RpbWVvdXQoZHJpdmUpOwotfQotCiBzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGMyMDJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZG1hYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwpAQCAtMzMxLDI0ICszMjUsMjQgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNDZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwZGMyMDJ4eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBwZGMyMDJ4eF9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IHBkYzIwMnh4X2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAorCS5kbWFfY2xlYXIJCT0gcGRjMjAyeHhfcmVzZXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNnhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IHBkYzIwMnh4X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBwZGMyMDJ4eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gcGRjMjAyeHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gcGRjMjAyeHhfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBwZGMyMDJ4eF9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKKwkuZG1hX2NsZWFyCQk9IHBkYzIwMnh4X3Jlc2V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wbWFjLmMKaW5kZXggNzQ2MjVlOC4uMDUyYjliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BtYWMuYwpAQCAtNDA0LDkgKzQwNCw2IEBACiAjZGVmaW5lIElERV9XQUtFVVBfREVMQVkJKDEqSFopCiAKIHN0YXRpYyBpbnQgcG1hY19pZGVfaW5pdF9kbWEoaWRlX2h3aWZfdCAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqKTsKLXN0YXRpYyBpbnQgcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwotc3RhdGljIHZvaWQgcG1hY19pZGVfc2VsZWN0cHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpOwotc3RhdGljIHZvaWQgcG1hY19pZGVfa2F1YWlfc2VsZWN0cHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpOwogCiAjZGVmaW5lIFBNQUNfSURFX1JFRyh4KSBcCiAJKCh2b2lkIF9faW9tZW0gKikoKGRyaXZlKS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyICsgKHgpKSkKQEAgLTQxNiw4ICs0MTMsNyBAQAogICogdGltaW5nIHJlZ2lzdGVyIHdoZW4gc2VsZWN0aW5nIHRoYXQgdW5pdC4gVGhpcyB2ZXJzaW9uIGlzIGZvcgogICogQVNJQ3Mgd2l0aCBhIHNpbmdsZSB0aW1pbmcgcmVnaXN0ZXIKICAqLwotc3RhdGljIHZvaWQKLXBtYWNfaWRlX3NlbGVjdHByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgcG1hY19pZGVfYXBwbHlfdGltaW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CkBAIC00MzUsOCArNDMxLDcgQEAKICAqIHRpbWluZyByZWdpc3RlciB3aGVuIHNlbGVjdGluZyB0aGF0IHVuaXQuIFRoaXMgdmVyc2lvbiBpcyBmb3IKICAqIEFTSUNzIHdpdGggYSBkdWFsIHRpbWluZyByZWdpc3RlciAoS2F1YWkpCiAgKi8KLXN0YXRpYyB2b2lkCi1wbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIHBtYWNfaWRlX2thdWFpX2FwcGx5X3RpbWluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQpAQCAtNDY1LDkgKzQ2MCwyNSBAQAogCWlmIChwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfc2hfYXRhNiB8fAogCSAgICBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfdW5fYXRhNiB8fAogCSAgICBwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfazJfYXRhNikKLQkJcG1hY19pZGVfa2F1YWlfc2VsZWN0cHJvYyhkcml2ZSk7CisJCXBtYWNfaWRlX2thdWFpX2FwcGx5X3RpbWluZ3MoZHJpdmUpOwogCWVsc2UKLQkJcG1hY19pZGVfc2VsZWN0cHJvYyhkcml2ZSk7CisJCXBtYWNfaWRlX2FwcGx5X3RpbWluZ3MoZHJpdmUpOworfQorCitzdGF0aWMgdm9pZCBwbWFjX2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCXBtYWNfaWRlX2FwcGx5X3RpbWluZ3MoZHJpdmUpOworCisJd3JpdGViKGRyaXZlLT5zZWxlY3QgfCBBVEFfREVWSUNFX09CUywKKwkgICAgICAgKHZvaWQgX19pb21lbSAqKWRyaXZlLT5od2lmLT5pb19wb3J0cy5kZXZpY2VfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIHBtYWNfa2F1YWlfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcG1hY19pZGVfa2F1YWlfYXBwbHlfdGltaW5ncyhkcml2ZSk7CisKKwl3cml0ZWIoZHJpdmUtPnNlbGVjdCB8IEFUQV9ERVZJQ0VfT0JTLAorCSAgICAgICAodm9pZCBfX2lvbWVtICopZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKIH0KIAogc3RhdGljIHZvaWQgcG1hY19leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQpAQCAtNDc3LDE3ICs0ODgsOCBAQAogCQkJCSAgICAgKyBJREVfVElNSU5HX0NPTkZJRykpOwogfQogCi1zdGF0aWMgdm9pZCBwbWFjX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQorc3RhdGljIHZvaWQgcG1hY193cml0ZV9kZXZjdGwoaWRlX2h3aWZfdCAqaHdpZiwgdTggY3RsKQogewotCXU4IGN0bCA9IEFUQV9ERVZDVExfT0JTOwotCi0JaWYgKG9uID09IDQpIHsgLyogaGFjayBmb3IgU1JTVCAqLwotCQljdGwgfD0gNDsKLQkJb24gJj0gfjQ7Ci0JfQotCi0JY3RsIHw9IG9uID8gMCA6IDI7Ci0KIAl3cml0ZWIoY3RsLCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwogCSh2b2lkKXJlYWRsKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyCiAJCQkJICAgICArIElERV9USU1JTkdfQ09ORklHKSk7CkBAIC05MTcsMTAgKzkxOSwxOCBAQAogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwbWlmLT5ub2RlOwogCWNvbnN0IGNoYXIgKmNhYmxlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2FibGUtdHlwZSIsIE5VTEwpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJY29uc3QgY2hhciAqbW9kZWwgPSBvZl9nZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7CiAKIAkvKiBHZXQgY2FibGUgdHlwZSBmcm9tIGRldmljZS10cmVlLiAqLwotCWlmIChjYWJsZSAmJiAhc3RybmNtcChjYWJsZSwgIjgwLSIsIDMpKQotCQlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CisJaWYgKGNhYmxlICYmICFzdHJuY21wKGNhYmxlLCAiODAtIiwgMykpIHsKKwkJLyogU29tZSBkcml2ZXMgZmFpbCB0byBkZXRlY3QgODBjIGNhYmxlIGluIFBvd2VyQm9vayAqLworCQkvKiBUaGVzZSBtYWNoaW5lIHVzZSBwcm9wcmlldGFyeSBzaG9ydCBJREUgY2FibGUgYW55d2F5ICovCisJCWlmICghc3RybmNtcChtb2RlbCwgIlBvd2VyQm9vayIsIDkpKQorCQkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCQllbHNlCisJCQlyZXR1cm4gQVRBX0NCTF9QQVRBODA7CisJfQogCiAJLyoKIAkgKiBHNSdzIHNlZW0gdG8gaGF2ZSBpbmNvcnJlY3QgY2FibGUgdHlwZSBpbiBkZXZpY2UtdHJlZS4KQEAgLTk1NSw5ICs5NjUsOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gcG1hY19leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gcG1hY193cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBwbWFjX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBwbWFjX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCiAKQEAgLTk2NSwxOSArOTc1LDI0IEBACiAJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBtYWNfaWRlX2F0YTZfcG9ydF9vcHMgPSB7Ci0JLmluaXRfZGV2CQk9IHBtYWNfaWRlX2luaXRfZGV2LAotCS5zZXRfcGlvX21vZGUJCT0gcG1hY19pZGVfc2V0X3Bpb19tb2RlLAotCS5zZXRfZG1hX21vZGUJCT0gcG1hY19pZGVfc2V0X2RtYV9tb2RlLAotCS5zZWxlY3Rwcm9jCQk9IHBtYWNfaWRlX2thdWFpX3NlbGVjdHByb2MsCi0JLmNhYmxlX2RldGVjdAkJPSBwbWFjX2lkZV9jYWJsZV9kZXRlY3QsCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgcG1hY19hdGE2X3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IHBtYWNfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IHBtYWNfd3JpdGVfZGV2Y3RsLAorCisJLmRldl9zZWxlY3QJCT0gcG1hY19rYXVhaV9kZXZfc2VsZWN0LAorCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHBtYWNfaWRlX2F0YTRfcG9ydF9vcHMgPSB7CiAJLmluaXRfZGV2CQk9IHBtYWNfaWRlX2luaXRfZGV2LAogCS5zZXRfcGlvX21vZGUJCT0gcG1hY19pZGVfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gcG1hY19pZGVfc2V0X2RtYV9tb2RlLAotCS5zZWxlY3Rwcm9jCQk9IHBtYWNfaWRlX3NlbGVjdHByb2MsCiAJLmNhYmxlX2RldGVjdAkJPSBwbWFjX2lkZV9jYWJsZV9kZXRlY3QsCiB9OwogCkBAIC05ODUsNyArMTAwMCw2IEBACiAJLmluaXRfZGV2CQk9IHBtYWNfaWRlX2luaXRfZGV2LAogCS5zZXRfcGlvX21vZGUJCT0gcG1hY19pZGVfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gcG1hY19pZGVfc2V0X2RtYV9tb2RlLAotCS5zZWxlY3Rwcm9jCQk9IHBtYWNfaWRlX3NlbGVjdHByb2MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHBtYWNfZG1hX29wczsKQEAgLTEwMjIsMTUgKzEwMzYsMTggQEAKIAlwbWlmLT5icm9rZW5fZG1hID0gcG1pZi0+YnJva2VuX2RtYV93YXJuID0gMDsKIAlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzaGFzdGEtYXRhIikpIHsKIAkJcG1pZi0+a2luZCA9IGNvbnRyb2xsZXJfc2hfYXRhNjsKLQkJZC5wb3J0X29wcyA9ICZwbWFjX2lkZV9hdGE2X3BvcnRfb3BzOworCQlkLnRwX29wcyA9ICZwbWFjX2F0YTZfdHBfb3BzOworCQlkLnBvcnRfb3BzID0gJnBtYWNfaWRlX2F0YTRfcG9ydF9vcHM7CiAJCWQudWRtYV9tYXNrID0gQVRBX1VETUE2OwogCX0gZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJrYXVhaS1hdGEiKSkgewogCQlwbWlmLT5raW5kID0gY29udHJvbGxlcl91bl9hdGE2OwotCQlkLnBvcnRfb3BzID0gJnBtYWNfaWRlX2F0YTZfcG9ydF9vcHM7CisJCWQudHBfb3BzID0gJnBtYWNfYXRhNl90cF9vcHM7CisJCWQucG9ydF9vcHMgPSAmcG1hY19pZGVfYXRhNF9wb3J0X29wczsKIAkJZC51ZG1hX21hc2sgPSBBVEFfVURNQTU7CiAJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIksyLVVBVEEiKSkgewogCQlwbWlmLT5raW5kID0gY29udHJvbGxlcl9rMl9hdGE2OwotCQlkLnBvcnRfb3BzID0gJnBtYWNfaWRlX2F0YTZfcG9ydF9vcHM7CisJCWQudHBfb3BzID0gJnBtYWNfYXRhNl90cF9vcHM7CisJCWQucG9ydF9vcHMgPSAmcG1hY19pZGVfYXRhNF9wb3J0X29wczsKIAkJZC51ZG1hX21hc2sgPSBBVEFfVURNQTU7CiAJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImtleWxhcmdvLWF0YSIpKSB7CiAJCWlmIChzdHJjbXAobnAtPm5hbWUsICJhdGEtNCIpID09IDApIHsKQEAgLTE0MjIsMTcgKzE0MzksMTYgQEAKICAqIHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlIGJ1aWxkcyB0aGUgREJETUEgY29tbWFuZCBsaXN0CiAgKiBmb3IgYSB0cmFuc2ZlciBhbmQgc2V0cyB0aGUgREJETUEgY2hhbm5lbCB0byBwb2ludCB0byBpdC4KICAqLwotc3RhdGljIGludAotcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaW50IHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgZGJkbWFfY21kICp0YWJsZTsKLQlpbnQgaSwgY291bnQgPSAwOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IHdyID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSk7CisJaW50IHdyID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CisJaW50IGkgPSBjbWQtPnNnX25lbnRzLCBjb3VudCA9IDA7CiAKIAkvKiBETUEgdGFibGUgaXMgYWxyZWFkeSBhbGlnbmVkICovCiAJdGFibGUgPSAoc3RydWN0IGRiZG1hX2NtZCAqKSBwbWlmLT5kbWFfdGFibGVfY3B1OwpAQCAtMTQ0MiwxMSArMTQ1OCw2IEBACiAJd2hpbGUgKHJlYWRsKCZkbWEtPnN0YXR1cykgJiBSVU4pCiAJCXVkZWxheSgxKTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBCdWlsZCBEQkRNQSBjb21tYW5kcyBsaXN0ICovCiAJc2cgPSBod2lmLT5zZ190YWJsZTsKIAl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgewpAQCAtMTQ2Miw3ICsxNDczLDcgQEAKIAkJCQkgICAgICAgInN3aXRjaGluZyB0byBQSU8gb24gT2hhcmUgY2hpcHNldFxuIiwgZHJpdmUtPm5hbWUpOwogCQkJCXBtaWYtPmJyb2tlbl9kbWFfd2FybiA9IDE7CiAJCQl9Ci0JCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKKwkJCXJldHVybiAwOwogCQl9CiAJCXdoaWxlIChjdXJfbGVuKSB7CiAJCQl1bnNpZ25lZCBpbnQgdGMgPSAoY3VyX2xlbiA8IDB4ZmUwMCk/IGN1cl9sZW46IDB4ZmUwMDsKQEAgLTE0NzAsNyArMTQ4MSw3IEBACiAJCQlpZiAoY291bnQrKyA+PSBNQVhfRENNRFMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRhYmxlIHRvbyBzbWFsbFxuIiwKIAkJCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCQkJCXJldHVybiAwOwogCQkJfQogCQkJc3RfbGUxNigmdGFibGUtPmNvbW1hbmQsIHdyPyBPVVRQVVRfTU9SRTogSU5QVVRfTU9SRSk7CiAJCQlzdF9sZTE2KCZ0YWJsZS0+cmVxX2NvdW50LCB0Yyk7CkBAIC0xNDk5LDkgKzE1MTAsNiBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlbXB0eSBETUEgdGFibGU/XG4iLCBkcml2ZS0+bmFtZSk7CiAKLXVzZV9waW9faW5zdGVhZDoKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gMDsgLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKQEAgLTE1MDksMzkgKzE1MTcsMjcgQEAKICAqIFByZXBhcmUgYSBETUEgdHJhbnNmZXIuIFdlIGJ1aWxkIHRoZSBETUEgdGFibGUsIGFkanVzdCB0aGUgdGltaW5ncyBmb3IKICAqIGEgcmVhZCBvbiBLZXlMYXJnbyBBVEEvNjYgYW5kIG1hcmsgdXMgYXMgd2FpdGluZyBmb3IgRE1BIGNvbXBsZXRpb24KICAqLwotc3RhdGljIGludAotcG1hY19pZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgcG1hY19pZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgYXRhNCA9IChwbWlmLT5raW5kID09IGNvbnRyb2xsZXJfa2xfYXRhNCk7CisJdTggd3JpdGUgPSAhIShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKTsKIAotCWlmICghcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAxOwotCX0KIAogCS8qIEFwcGxlIGFkZHMgNjBucyB0byB3ckRhdGFTZXR1cCBvbiByZWFkcyAqLwogCWlmIChhdGE0ICYmIChwbWlmLT50aW1pbmdzW3VuaXRdICYgVFJfNjZfVURNQV9FTikpIHsKLQkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbdW5pdF0gKyAoIXJxX2RhdGFfZGlyKHJxKSA/IDB4MDA4MDAwMDBVTCA6IDApLAorCQl3cml0ZWwocG1pZi0+dGltaW5nc1t1bml0XSArICh3cml0ZSA/IDAgOiAweDAwODAwMDAwVUwpLAogCQkJUE1BQ19JREVfUkVHKElERV9USU1JTkdfQ09ORklHKSk7CiAJCSh2b2lkKXJlYWRsKFBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwogCX0KIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1wbWFjX2lkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQotewotCS8qIGlzc3VlIGNtZCB0byBkcml2ZSAqLwotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNvbW1hbmQsICZpZGVfZG1hX2ludHIsIDIqV0FJVF9DTUQsIE5VTEwpOwotfQotCiAvKgogICogS2ljayB0aGUgRE1BIGNvbnRyb2xsZXIgaW50byBsaWZlIGFmdGVyIHRoZSBETUEgY29tbWFuZCBoYXMgYmVlbiBpc3N1ZWQKICAqIHRvIHRoZSBkcml2ZS4KQEAgLTE1NzMsMTIgKzE1NjksOSBAQAogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCXUzMiBkc3RhdDsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCWRzdGF0ID0gcmVhZGwoJmRtYS0+c3RhdHVzKTsKIAl3cml0ZWwoKChSVU58V0FLRXxERUFEKSA8PCAxNiksICZkbWEtPmNvbnRyb2wpOwogCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJLyogdmVyaWZ5IGdvb2QgZG1hIHN0YXR1cy4gd2UgZG9uJ3QgY2hlY2sgZm9yIEFDVElWRSBiZWVpbmcgMC4gV2Ugc2hvdWxkLi4uCiAJICogaW4gdGhlb3J5LCBidXQgd2l0aCBBVEFQSSBkZWNpY2VzIGRvaW5nIGJ1ZmZlciB1bmRlcnJ1bnMsIHRoYXQgd291bGQKIAkgKiBjYXVzZSB1cyB0byBkaXNhYmxlIERNQSwgd2hpY2ggaXNuJ3Qgd2hhdCB3ZSB3YW50CkBAIC0xNjYyLDExICsxNjU1LDkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcG1hY19kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gcG1hY19pZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gcG1hY19pZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gcG1hY19pZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gcG1hY19pZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHBtYWNfaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwbWFjX2lkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IHBtYWNfaWRlX2RtYV9sb3N0X2lycSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3E0MGlkZS5jIGIvZHJpdmVycy9pZGUvcTQwaWRlLmMKaW5kZXggOWY5YzBiMy4uZDAwN2U3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcTQwaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvcTQwaWRlLmMKQEAgLTcyLDI2ICs3MiwyNiBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKLXN0YXRpYyB2b2lkIHE0MGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgcTQwaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIGluc3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0JaW5zd19zd2FwdyhkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CisJcmF3X2luc3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgcTQwaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgcTQwaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gb3V0c3coZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogCi0Jb3V0c3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19vdXRzd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCiAvKiBRNDAgaGFzIGEgYnl0ZS1zd2FwcGVkIElERSBpbnRlcmZhY2UgKi8KQEAgLTk5LDkgKzk5LDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCiAKQEAgLTExMSw3ICsxMTEsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcTQwaWRlX3BvcnRfaW5mbyA9IHsKIAkudHBfb3BzCQkJPSAmcTQwaWRlX3RwX29wcywKLQkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogfTsKIAogLyogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9xZDY1eHguYyBiL2RyaXZlcnMvaWRlL3FkNjV4eC5jCmluZGV4IDA4YzRmYTMuLmM5YTEzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3FkNjV4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3FkNjV4eC5jCkBAIC05MCwxMyArOTAsMTUgQEAKICAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvIHByZXBhcmUgZm9yIGFjY2VzcyB0byBhIGdpdmVuIGRyaXZlLgogICovCiAKLXN0YXRpYyB2b2lkIHFkNjV4eF9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgcWQ2NXh4X2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXU4IGluZGV4ID0gKCgJKFFEX1RJTVJFRyhkcml2ZSkpICYgMHg4MCApID4+IDcpIHwKIAkJCShRRF9USU1SRUcoZHJpdmUpICYgMHgwMik7CiAKIAlpZiAodGltaW5nc1tpbmRleF0gIT0gUURfVElNSU5HKGRyaXZlKSkKIAkJb3V0Yih0aW1pbmdzW2luZGV4XSA9IFFEX1RJTUlORyhkcml2ZSksIFFEX1RJTVJFRyhkcml2ZSkpOworCisJb3V0Yihkcml2ZS0+c2VsZWN0IHwgQVRBX0RFVklDRV9PQlMsIGRyaXZlLT5od2lmLT5pb19wb3J0cy5kZXZpY2VfYWRkcik7CiB9CiAKIC8qCkBAIC0zMDksMjAgKzMxMSwzMyBAQAogCWRyaXZlLT5kcml2ZV9kYXRhID0gKGRyaXZlLT5kbiAmIDEpID8gdDIgOiB0MTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHFkNjV4eF90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCisKKwkuZGV2X3NlbGVjdAkJPSBxZDY1eHhfZGV2X3NlbGVjdCwKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBxZDY1MDBfcG9ydF9vcHMgPSB7CiAJLmluaXRfZGV2CQk9IHFkNjUwMF9pbml0X2RldiwKIAkuc2V0X3Bpb19tb2RlCQk9IHFkNjUwMF9zZXRfcGlvX21vZGUsCi0JLnNlbGVjdHByb2MJCT0gcWQ2NXh4X3NlbGVjdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHFkNjU4MF9wb3J0X29wcyA9IHsKIAkuaW5pdF9kZXYJCT0gcWQ2NTgwX2luaXRfZGV2LAogCS5zZXRfcGlvX21vZGUJCT0gcWQ2NTgwX3NldF9waW9fbW9kZSwKLQkuc2VsZWN0cHJvYwkJPSBxZDY1eHhfc2VsZWN0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHFkNjV4eF9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKIAkubmFtZQkJCT0gRFJWX05BTUUsCisJLnRwX29wcyAJCT0gJnFkNjV4eF90cF9vcHMsCiAJLmNoaXBzZXQJCT0gaWRlX3FkNjV4eCwKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfSU9fMzJCSVQgfAogCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjMTIwMC5jIGIvZHJpdmVycy9pZGUvc2MxMjAwLmMKaW5kZXggZGJkZDI5OC4uZDQ2NzQ3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2MxMjAwLmMKKysrIGIvZHJpdmVycy9pZGUvc2MxMjAwLmMKQEAgLTExNSw4ICsxMTUsNyBAQAogCQlpZiAoKG1hdGVpZFtBVEFfSURfRklFTERfVkFMSURdICYgNCkgJiYKIAkJICAgIChtYXRlaWRbQVRBX0lEX1VETUFfTU9ERVNdICYgNykpCiAJCQlnb3RvIG91dDsKLQkJaWYgKChtYXRlaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpICYmCi0JCSAgICAobWF0ZWlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiA3KSkKKwkJaWYgKG1hdGVpZFtBVEFfSURfTVdETUFfTU9ERVNdICYgNykKIAkJCW1hc2sgPSAwOwogCX0KIG91dDoKQEAgLTE4Myw5ICsxODIsNiBAQAogCW91dGIoZG1hX3N0YXR8MHgxYiwgZG1hX2Jhc2UrMik7CS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwogCW91dGIoaW5iKGRtYV9iYXNlKSZ+MSwgZG1hX2Jhc2UpOwkvKiAhISBETyBUSElTIEhFUkUgISEgc3RvcCBETUEgKi8KIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsJCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwotCiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CQkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiB9CiAKQEAgLTI4NiwxMiArMjgyLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNjMTIwMF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBzYzEyMDBfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCmluZGV4IDhkMjMxNGIuLjZkOGRiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvc2NjX3BhdGEuYwpAQCAtMTQ4LDE3ICsxNDgsOCBAQAogCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKShod2lmLT5kbWFfYmFzZSArIDQpKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQorc3RhdGljIHZvaWQgc2NjX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICpod2lmLCB1OCBjdGwpCiB7Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQogCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIsIGN0bCk7CiAJZWllaW8oKTsKIAlpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKQEAgLTMwMyw4ICsyOTQsOSBAQAogfQogCiAvKioKLSAqCXNjY19pZGVfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKKyAqCXNjY19kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQogICoJQGRyaXZlOiB0YXJnZXQgZGV2aWNlCisgKglAY21kOiBjb21tYW5kCiAgKgogICoJQnVpbGQgYW4gSURFIERNQSBQUkQgKElERSBzcGVhayBmb3Igc2NhdHRlciBnYXRoZXIgdGFibGUpCiAgKglhbmQgdGhlbiBzZXQgdXAgdGhlIERNQSB0cmFuc2ZlciByZWdpc3RlcnMuCkBAIC0zMTMsMzYgKzMwNSwyOCBAQAogICoJaXMgcmV0dXJuZWQuCiAgKi8KIAotc3RhdGljIGludCBzY2NfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgc2NjX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwotCXVuc2lnbmVkIGludCByZWFkaW5nOworCXUzMiBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCXU4IGRtYV9zdGF0OwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJcmVhZGluZyA9IDA7Ci0JZWxzZQotCQlyZWFkaW5nID0gMSA8PCAzOwotCiAJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KLQlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAoaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAxOwotCX0KIAogCS8qIFBSRCB0YWJsZSAqLwogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKIAogCS8qIHNwZWNpZnkgci93ICovCi0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlLCByZWFkaW5nKTsKKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UsIHJ3KTsKIAogCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJZG1hX3N0YXQgPSBzY2NfZG1hX3NmZl9yZWFkX3N0YXR1cyhod2lmKTsKIAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLwogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSwgZG1hX3N0YXQgfCA2KTsKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNjEsNyArMzQ1LDYgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQsIGRtYV9jbWQ7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwogCWRtYV9jbWQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSk7CiAJLyogc3RvcCBETUEgKi8KQEAgLTM3MCw4ICszNTMsNiBAQAogCWRtYV9zdGF0ID0gc2NjX2RtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CiAJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJc2NjX2lkZV9vdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKLQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCXdtYigpOwogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOwpAQCAtNjY2LDkxICs2NDcsODAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIHNjY190Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHNjY190Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZkcml2ZS0+aHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RBVEEpCi0JCW91dF9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkciwKLQkJCSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEpOwotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gKHUxNilpbl9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCXNjY19pZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCXNjY19pZGVfb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJCXNjY19pZGVfb3V0YihBVEFfSE9CIHwgQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9FUlJPUikKKwkJCXRmLT5ob2JfZXJyb3IgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQkJdGYtPmhvYl9uc2VjdCA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQkJdGYtPmhvYl9sYmFtICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJCXRmLT5ob2JfbGJhaCAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNjY19pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgc2NjX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKQEAgLTc2Niw3ICs3MzYsNyBAQAogCQlzY2NfaWRlX2luc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBzY2Nfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCAgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgc2NjX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKQEAgLTg1Myw5ICs4MjMsOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gc2NjX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gc2NjX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBzY2NfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBzY2Nfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gc2NjX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBzY2NfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBzY2NfdGZfcmVhZCwKIApAQCAtODczLDMwICs4NDMsMjUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2NjX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBzY2NfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gc2NjX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzY2NfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHNjY19kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2NjX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHNjY19kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAotI2RlZmluZSBERUNMQVJFX1NDQ19ERVYobmFtZV9zdHIpCQkJXAotICB7CQkJCQkJCVwKLSAgICAgIC5uYW1lCQk9IG5hbWVfc3RyLAkJCVwKLSAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAotICAgICAgLmluaXRfZG1hCQk9IHNjY19pbml0X2RtYSwJCQlcCi0gICAgICAuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywJCVwKLSAgICAgIC50cF9vcHMJCT0gJnNjY190cF9vcHMsCQlcCi0gICAgICAucG9ydF9vcHMJCT0gJnNjY19wb3J0X29wcywJCVwKLSAgICAgIC5kbWFfb3BzCQk9ICZzY2NfZG1hX29wcywJCQlcCi0gICAgICAuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCQlcCi0gICAgICAucGlvX21hc2sJCT0gQVRBX1BJTzQsCQkJXAotICB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCS8qIDAgKi8gREVDTEFSRV9TQ0NfREVWKCJzY2NJREUiKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworCS5uYW1lCQk9ICJzY2NJREUiLAorCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAorCS5pbml0X2RtYQk9IHNjY19pbml0X2RtYSwKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywKKwkudHBfb3BzCQk9ICZzY2NfdHBfb3BzLAorCS5wb3J0X29wcwk9ICZzY2NfcG9ydF9vcHMsCisJLmRtYV9vcHMJPSAmc2NjX2RtYV9vcHMsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAorCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCwKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKIH07CiAKIC8qKgpAQCAtOTEwLDcgKzg3NSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JcmV0dXJuIGluaXRfc2V0dXBfc2NjKGRldiwgJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKKwlyZXR1cm4gaW5pdF9zZXR1cF9zY2MoZGV2LCAmc2NjX2NoaXBzZXQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggMjRiYzg4NC4uYTE5ZGJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTU1OCw2ICs1NTgsOCBAQAogCiAJaG9zdC0+aG9zdF9wcml2ID0gcHJpdjsKIAorCWhvc3QtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQsIDEpOwpAQCAtNjA2LDYgKzYwOCw4IEBACiAKIAlob3N0LT5ob3N0X3ByaXYgPSBwcml2OwogCisJaG9zdC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldlswXSwgaG9zdCk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXZbMV0sIGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKaW5kZXggZmRiOWQ3MC4uZTVkMmE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3NnaWlvYzQuYwpAQCAtMjU4LDkgKzI1OCw2IEBACiAJCX0KIAl9CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gZG1hX3N0YXQ7CiB9CiAKQEAgLTI4MCwxMCArMjc3LDEyIEBACiAJCXNnaWlvYzRfY2xlYXJpcnEoZHJpdmUpOwogfQogCi1zdGF0aWMgdm9pZAotc2dpaW9jNF9yZXNldHByb2MoaWRlX2RyaXZlX3QgKiBkcml2ZSkKK3N0YXRpYyB2b2lkIHNnaWlvYzRfcmVzZXRwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmRyaXZlLT5od2lmLT5jbWQ7CisKIAlzZ2lpb2M0X2RtYV9lbmQoZHJpdmUpOworCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CiAJc2dpaW9jNF9jbGVhcmlycShkcml2ZSk7CiB9CiAKQEAgLTQxMiw3ICs0MTEsNiBAQAogCXdyaXRlbChlbmRpbmdfZG1hX2FkZHIsICh2b2lkIF9faW9tZW0gKikoZG1hX2Jhc2UgKyBJT0M0X0RNQV9FTkRfQUREUiAqIDQpKTsKIAogCXdyaXRlbChkbWFfZGlyZWN0aW9uLCAodm9pZCBfX2lvbWVtICopaW9jNF9kbWFfYWRkcik7Ci0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiB9CiAKIC8qIElPQzQgU2NhdHRlciBHYXRoZXIgbGlzdCBGb3JtYXQgCQkJCQkgKi8KQEAgLTQyNCwyMCArNDIyLDEzIEBACiAvKiB8IFVwcGVyIDMyIGJpdHMgLSBaZXJvCSAgICB8RU9MfCAxNSB1bnVzZWQgICAgIHwgMTYgQml0IExlbmd0aHwgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogQ3JlYXRlcyB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdCwgRE1BIFRhYmxlICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zZ2lpb2M0X2J1aWxkX2RtYV90YWJsZShpZGVfZHJpdmVfdCAqIGRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBkZGlyKQorc3RhdGljIGludCBzZ2lpb2M0X2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdW5zaWduZWQgaW50ICp0YWJsZSA9IGh3aWYtPmRtYXRhYmxlX2NwdTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwLCBpID0gMTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIGkgPSBjbWQtPnNnX25lbnRzOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBod2lmLT5zZ190YWJsZTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7CS8qIHNnbGlzdCBvZiBsZW5ndGggWmVybyAqLwotCi0Jc2cgPSBod2lmLT5zZ190YWJsZTsKIAl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgewogCQlkbWFfYWRkcl90IGN1cl9hZGRyOwogCQlpbnQgY3VyX2xlbjsKQEAgLTQ0OSw3ICs0NDAsNyBAQAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkgICAgICAgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLAogCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7CisJCQkJcmV0dXJuIDA7CiAJCQl9IGVsc2UgewogCQkJCXUzMiBiY291bnQgPQogCQkJCSAgICAweDEwMDAwIC0gKGN1cl9hZGRyICYgMHhmZmZmKTsKQEAgLTQ4NCwzMCArNDc1LDE5IEBACiAJCXJldHVybiBjb3VudDsKIAl9CiAKLXVzZV9waW9faW5zdGVhZDoKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gMDsJCS8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogCi1zdGF0aWMgaW50IHNnaWlvYzRfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWludCBkZGlyOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKLQllbHNlCi0JCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7Ci0KLQlpZiAoIShjb3VudCA9IHNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGRyaXZlLCBycSwgZGRpcikpKSB7CisJaWYgKHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkKIAkJLyogdHJ5IFBJTyBpbnN0ZWFkIG9mIERNQSAqLwotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CiAJCXJldHVybiAxOwotCX0KIAotCWlmIChycV9kYXRhX2RpcihycSkpCisJaWYgKHdyaXRlKQogCQkvKiBXcml0ZXMgVE8gdGhlIElPQzQgRlJPTSBNYWluIE1lbW9yeSAqLwogCQlkZGlyID0gSU9DNF9ETUFfUkVBRDsKIAllbHNlCkBAIC01MjMsOSArNTAzLDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IHNnaWlvYzRfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAogCkBAIC01NDYsNyArNTI2LDYgQEAKIAkuZG1hX2VuZAkJPSBzZ2lpb2M0X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBzZ2lpb2M0X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IHNnaWlvYzRfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2dpaW9jNF9wb3J0X2luZm8gX19kZXZpbml0Y29uc3QgPSB7CkBAIC01NTcsNiArNTM2LDcgQEAKIAkucG9ydF9vcHMJCT0gJnNnaWlvYzRfcG9ydF9vcHMsCiAJLmRtYV9vcHMJCT0gJnNnaWlvYzRfZG1hX29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTywKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAogCS5td2RtYV9tYXNrCQk9IEFUQV9NV0RNQTJfT05MWSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwppbmRleCAxODExYWU5Li5lNDk3M2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCkBAIC03MTEsMTEgKzcxMSwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzaWxfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBzaWltYWdlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCmluZGV4IGRiYTIxM2MuLmIwYTQ2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwpAQCAtNjEsNyArNjEsOCBAQAogCWlmIChjbWRfb2ZmID09IDApCiAJCWNtZF9vZmYgPSAxOwogCi0JaWYgKHBpbyA+IDIgfHwgYXRhX2lkX2hhc19pb3JkeShkcml2ZS0+aWQpKQorCWlmICgocGlvID4gMiB8fCBhdGFfaWRfaGFzX2lvcmR5KGRyaXZlLT5pZCkpICYmCisJICAgICEocGlvID4gNCAmJiBhdGFfaWRfaXNfY2ZhKGRyaXZlLT5pZCkpKQogCQlpb3JkeSA9IDB4NDA7CiAKIAlyZXR1cm4gKGNtZF9vbiAtIDEpIDw8IDggfCAoY21kX29mZiAtIDEpIHwgaW9yZHk7CkBAIC0xODksMTQgKzE5MCwxMyBAQAogCWlkZV9kbWFfc3RhcnQoZHJpdmUpOwogfQogCi1zdGF0aWMgdm9pZCBzbDgyYzEwNV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBzbDgyYzEwNV9kbWFfY2xlYXIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOwogCi0JREJHKCgic2w4MmMxMDVfZG1hX3RpbWVvdXQoZHJpdmU6JXMpXG4iLCBkcml2ZS0+bmFtZSkpOworCURCRygoInNsODJjMTA1X2RtYV9jbGVhcihkcml2ZTolcylcbiIsIGRyaXZlLT5uYW1lKSk7CiAKIAlzbDgyYzEwNV9yZXNldF9ob3N0KGRldik7Ci0JaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKIH0KIAogc3RhdGljIGludCBzbDgyYzEwNV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTI5MywxMiArMjkzLDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNsODJjMTA1X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzbDgyYzEwNV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gc2w4MmMxMDVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBzbDgyYzEwNV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IHNsODJjMTA1X2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAorCS5kbWFfY2xlYXIJCT0gc2w4MmMxMDVfZG1hX2NsZWFyLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvdGM4NmMwMDEuYwppbmRleCA4NDEwOWY1Li5iNGNmNDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKQEAgLTE4MiwxMiArMTgyLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHRjODZjMDAxX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSB0Yzg2YzAwMV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90cm0yOTAuYyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCmluZGV4IDFjMDllNTQuLjRiNDJjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCkBAIC0xNzEsNTggKzE3MSw1MSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgdHJtMjkwX3NlbGVjdHByb2MgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIHRybTI5MF9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKTsKKworCW91dGIoZHJpdmUtPnNlbGVjdCB8IEFUQV9ERVZJQ0VfT0JTLCBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCB0cm0yOTBfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKK3N0YXRpYyBpbnQgdHJtMjkwX2RtYV9jaGVjayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgV0FJVF9DTUQsIE5VTEwpOwotfQotCi1zdGF0aWMgaW50IHRybTI5MF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgY291bnQsIHJ3OwotCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSB7CiAjaWZkZWYgVFJNMjkwX05PX0RNQV9XUklURVMKIAkJLyogYWx3YXlzIHVzZSBQSU8gZm9yIHdyaXRlcyAqLwotCQl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7CS8qIHNlbGVjdCBQSU8geGZlciAqLwogCQlyZXR1cm4gMTsKICNlbmRpZgotCQlydyA9IDE7Ci0JfSBlbHNlCi0JCXJ3ID0gMjsKLQotCWlmICghKGNvdW50ID0gaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpKSB7Ci0JCS8qIHRyeSBQSU8gaW5zdGVhZCBvZiBETUEgKi8KLQkJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOyAvKiBzZWxlY3QgUElPIHhmZXIgKi8KLQkJcmV0dXJuIDE7CiAJfQotCS8qIHNlbGVjdCBETUEgeGZlciAqLwotCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cm0yOTBfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdW5zaWduZWQgaW50IGNvdW50LCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAyOworCisJY291bnQgPSBpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCk7CisJaWYgKGNvdW50ID09IDApCisJCS8qIHRyeSBQSU8gaW5zdGVhZCBvZiBETUEgKi8KKwkJcmV0dXJuIDE7CisKIAlvdXRsKGh3aWYtPmRtYXRhYmxlX2RtYSB8IHJ3LCBod2lmLT5kbWFfYmFzZSk7Ci0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiAJLyogc3RhcnQgRE1BICovCiAJb3V0dyhjb3VudCAqIDIgLSAxLCBod2lmLT5kbWFfYmFzZSArIDIpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHRybTI5MF9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKIH0KIAogc3RhdGljIGludCB0cm0yOTBfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JdTE2IHN0YXR1czsKKwl1MTYgc3RhdHVzID0gaW53KGRyaXZlLT5od2lmLT5kbWFfYmFzZSArIDIpOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0JLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCXN0YXR1cyA9IGludyhkcml2ZS0+aHdpZi0+ZG1hX2Jhc2UgKyAyKTsKKwl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7CiAKIAlyZXR1cm4gc3RhdHVzICE9IDB4MDBmZjsKIH0KQEAgLTMwNywyNSArMzAwLDM0IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgdHJtMjkwX3BvcnRfb3BzID0gewotCS5zZWxlY3Rwcm9jCQk9IHRybTI5MF9zZWxlY3Rwcm9jLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHRybTI5MF90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCisKKwkuZGV2X3NlbGVjdAkJPSB0cm0yOTBfZGV2X3NlbGVjdCwKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIHRybTI5MF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gdHJtMjkwX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwIAkJPSB0cm0yOTBfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gdHJtMjkwX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0IAkJPSB0cm0yOTBfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHRybTI5MF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gdHJtMjkwX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX2NoZWNrCQk9IHRybTI5MF9kbWFfY2hlY2ssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gdHJtMjkwX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3RybTI5MCwKLQkucG9ydF9vcHMJPSAmdHJtMjkwX3BvcnRfb3BzLAorCS50cF9vcHMgCT0gJnRybTI5MF90cF9vcHMsCiAJLmRtYV9vcHMJPSAmdHJtMjkwX2RtYV9vcHMsCiAJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJNMjkwIHwKIAkJCSAgSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCmluZGV4IGQ5MDk1MzQuLjRjYjc5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaWRlLmg+CiAjaW5jbHVkZSA8YXNtL3R4eDkvdHg0OTM4Lmg+CiAKIHN0YXRpYyB2b2lkIHR4NDkzOGlkZV90dW5lX2VidXNjKHVuc2lnbmVkIGludCBlYnVzX2NoLApAQCAtODAsOTkgKzgyLDgyIEBACiAJX19yYXdfd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9IHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQkvKiBubyBlbmRpYW4gc3dhcCAqLwotCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCX0KLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXR4NDkzOGlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0KLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQkvKiBubyBlbmRpYW4gc3dhcCAqLwotCQlkYXRhID0gX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQorCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0JdHg0OTM4aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwl0eDQ5MzhpZGVfb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0VSUk9SKQorCQl0Zi0+ZXJyb3IgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCXR4NDkzOGlkZV9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCQl0eDQ5MzhpZGVfb3V0YihBVEFfSE9CIHwgQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0KLQkJCQl0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9FUlJPUikKKwkJCXRmLT5ob2JfZXJyb3IgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCQl0Zi0+aG9iX25zZWN0ID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQkJdGYtPmhvYl9sYmFsICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQkJdGYtPmhvYl9sYmFtICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQkJdGYtPmhvYl9sYmFoICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzhpZGVfaW5wdXRfZGF0YV9zd2FwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgdHg0OTM4aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CkBAIC0xODQsNyArMTY5LDcgQEAKIAlfX2lkZV9mbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYnVmLCByb3VuZHVwKGxlbiwgMikpOwogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV9vdXRwdXRfZGF0YV9zd2FwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKQEAgLTIwMiw5ICsxODcsOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSB0eDQ5MzhpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSB0eDQ5MzhpZGVfdGZfcmVhZCwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMgYi9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYwppbmRleCA0MGIwODEyLi4wMDQwYTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYworKysgYi9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAorI2luY2x1ZGUgPGFzbS9pZGUuaD4KKwogI2RlZmluZSBNT0ROQU1FCSJ0eDQ5MzlpZGUiCiAKIC8qIEFUQSBTaGFkb3cgUmVnaXN0ZXJzICg4LWJpdCBleGNlcHQgZm9yIERhdGEgd2hpY2ggaXMgMTYtYml0KSAqLwpAQCAtMjMwLDcgKzIzMiw3IEBACiAKICNpZmRlZiBfX0JJR19FTkRJQU4KIC8qIGN1c3RvbSBpZGVfYnVpbGRfZG1hdGFibGUgdG8gaGFuZGxlIHN3YXBwZWQgbGF5b3V0ICovCi1zdGF0aWMgaW50IHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTMyICp0YWJsZSA9ICh1MzIgKilod2lmLT5kbWF0YWJsZV9jcHU7CkBAIC0yMzgsMTEgKzI0MCw3IEBACiAJaW50IGk7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAotCWh3aWYtPnNnX25lbnRzID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCWlmIChod2lmLT5zZ19uZW50cyA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgaHdpZi0+c2dfbmVudHMsIGkpIHsKKwlmb3JfZWFjaF9zZyhod2lmLT5zZ190YWJsZSwgc2csIGNtZC0+c2dfbmVudHMsIGkpIHsKIAkJdTMyIGN1cl9hZGRyLCBjdXJfbGVuLCBiY291bnQ7CiAKIAkJY3VyX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CkBAIC0yODEsNDggKzI3OSwzNiBAQAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkcml2ZS0+bmFtZSwKIAkJY291bnQgPyAiRE1BIHRhYmxlIHRvbyBzbWFsbCIgOiAiZW1wdHkgRE1BIHRhYmxlPyIpOwogCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogI2Vsc2UKICNkZWZpbmUgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlCWlkZV9idWlsZF9kbWF0YWJsZQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgdHg0OTM5aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IHR4NDkzOWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl1OCByZWFkaW5nOwotCWludCBuZW50OwotCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJcmVhZGluZyA9IDA7Ci0JZWxzZQotCQlyZWFkaW5nID0gQVRBX0RNQV9XUjsKKwl1OCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCiAJLyogZmFsbCBiYWNrIHRvIFBJTyEgKi8KLQluZW50ID0gdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSk7Ci0JaWYgKCFuZW50KSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAodHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAxOwotCX0KIAogCS8qIFBSRCB0YWJsZSAqLwogCXR4NDkzOWlkZV93cml0ZWwoaHdpZi0+ZG1hdGFibGVfZG1hLCBiYXNlLCBUWDQ5MzlJREVfUFJEX1B0cik7CiAKIAkvKiBzcGVjaWZ5IHIvdyAqLwotCXR4NDkzOWlkZV93cml0ZWIocmVhZGluZywgYmFzZSwgVFg0OTM5SURFX0RNQV9DbWQpOworCXR4NDkzOWlkZV93cml0ZWIocncsIGJhc2UsIFRYNDkzOUlERV9ETUFfQ21kKTsKIAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLwogCXR4NDkzOWlkZV9jbGVhcl9kbWFfc3RhdHVzKGJhc2UpOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Ci0KIAl0eDQ5MzlpZGVfd3JpdGV3KFNFQ1RPUl9TSVpFIC8gMiwgYmFzZSwgZHJpdmUtPmRuID8KIAkJCSBUWDQ5MzlJREVfWGZlcl9DbnRfMiA6IFRYNDkzOUlERV9YZmVyX0NudF8xKTsKLQl0eDQ5MzlpZGVfd3JpdGV3KHJxLT5ucl9zZWN0b3JzLCBiYXNlLCBUWDQ5MzlJREVfU2VjX0NudCk7CisKKwl0eDQ5MzlpZGVfd3JpdGV3KGNtZC0+cnEtPm5yX3NlY3RvcnMsIGJhc2UsIFRYNDkzOUlERV9TZWNfQ250KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMzMsOCArMzE5LDYgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKIAl1MTYgY3RsID0gdHg0OTM5aWRlX3JlYWR3KGJhc2UsIFRYNDkzOUlERV9JbnRfQ3RsKTsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCiAJLyogZ2V0IERNQSBjb21tYW5kIG1vZGUgKi8KIAlkbWFfY21kID0gdHg0OTM5aWRlX3JlYWRiKGJhc2UsIFRYNDkzOUlERV9ETUFfQ21kKTsKIAkvKiBzdG9wIERNQSAqLwpAQCAtMzQzLDExICszMjcsOSBAQAogCS8qIHJlYWQgYW5kIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwogCWRtYV9zdGF0ID0gdHg0OTM5aWRlX2NsZWFyX2RtYV9zdGF0dXMoYmFzZSk7CiAKLQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0JLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCXdtYigpOwogCisJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCWlmICgoZG1hX3N0YXQgJiAoQVRBX0RNQV9JTlRSIHwgQVRBX0RNQV9FUlIgfCBBVEFfRE1BX0FDVElWRSkpID09IDAgJiYKIAkgICAgKGN0bCAmIChUWDQ5MzlJREVfSU5UX1hGRVJFTkQgfCBUWDQ5MzlJREVfSU5UX0hPU1QpKSA9PQogCSAgICAoVFg0OTM5SURFX0lOVF9YRkVSRU5EIHwgVFg0OTM5SURFX0lOVF9IT1NUKSkKQEAgLTQzNyw3ICs0MTksNyBAQAogCXJldHVybiBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKQEAgLTQ0Nyw3ICs0MjksNyBAQAogCSAqIEZpeCBBVEExMDAgQ09SRSBTeXN0ZW0gQ29udHJvbCBSZWdpc3Rlci4gKFRoZSB3cml0ZSB0byB0aGUKIAkgKiBEZXZpY2UvSGVhZCByZWdpc3RlciBtYXkgd3JpdGUgd3JvbmcgZGF0YSB0byB0aGUgU3lzdGVtCiAJICogQ29udHJvbCBSZWdpc3RlcikKLQkgKiBXaGlsZSBTeXNfQ3RsIGlzIHdyaXR0ZW4gaGVyZSwgc2VsZWN0cHJvYyBpcyBub3QgbmVlZGVkLgorCSAqIFdoaWxlIFN5c19DdGwgaXMgd3JpdHRlbiBoZXJlLCBkZXZfc2VsZWN0KCkgaXMgbm90IG5lZWRlZC4KIAkgKi8KIAl0eDQ5MzlpZGVfd3JpdGV3KHN5c2N0bCwgYmFzZSwgVFg0OTM5SURFX1N5c19DdGwpOwogfQpAQCAtNDY1LDk3ICs0NDcsODAgQEAKIAlfX3Jhd193cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKilwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gdGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSBjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhOwotCi0JCS8qIG5vIGVuZGlhbiBzd2FwICovCi0JCV9fcmF3X3dyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JfQotCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX2xiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9GRUFUVVJFKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJdHg0OTM5aWRlX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKIAkJdHg0OTM5aWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJdHg0OTM5aWRlX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKSB7CiAJCXR4NDkzOWlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Ci0JCXR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGRyaXZlLCB0YXNrKTsKKwkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCS8qIG5vIGVuZGlhbiBzd2FwICovCi0JCWRhdGEgPSBfX3Jhd19yZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7Ci0JCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQl9CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQl0eDQ5MzlpZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCXR4NDkzOWlkZV9vdXRiKEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRVJST1IpCisJCXRmLT5lcnJvciAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJCXR4NDkzOWlkZV9vdXRiKEFUQV9IT0IgfCBBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPQotCQkJCXR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQotCQkJdGYtPmhvYl9sYmFtICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0VSUk9SKQorCQkJdGYtPmhvYl9lcnJvciA9CXR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJCXRmLT5ob2JfbnNlY3QgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCQl0Zi0+aG9iX2xiYWwgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCQl0Zi0+aG9iX2xiYWggID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKQEAgLTU4OSw5ICs1NTQsOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSB0eDQ5MzlpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSB0eDQ5MzlpZGVfdGZfcmVhZCwKIApAQCAtNjAxLDIwICs1NjYsMjEgQEAKIAogI2Vsc2UJLyogX19MSVRUTEVfRU5ESUFOICovCiAKLXN0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpZGVfdGZfbG9hZChkcml2ZSwgdGFzayk7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCi0JCXR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGRyaXZlLCB0YXNrKTsKKwlpZGVfdGZfbG9hZChkcml2ZSwgY21kKTsKKworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJCXR4NDkzOWlkZV90Zl9sb2FkX2ZpeHVwKGRyaXZlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHR4NDkzOWlkZV90cF9vcHMgPSB7CiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCQk9IHR4NDkzOWlkZV90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAogCkBAIC02MzQsMTIgKzYwMCwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyB0eDQ5MzlpZGVfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IHR4NDkzOWlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSB0eDQ5MzlpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gdHg0OTM5aWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSB0eDQ5MzlpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gdHg0OTM5aWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggMTczMGQ3My4uZWMzZGIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtOTAzLDggKzkwMyw2IEBACiAJaWYgKCFwcm9jX2J1c19pbnB1dF9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJvY19idXNfaW5wdXRfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIHByb2NfYnVzX2lucHV0X2RpciwKIAkJCSAgICAmaW5wdXRfZGV2aWNlc19maWxlb3BzKTsKIAlpZiAoIWVudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwppbmRleCA4MWU2ZWJmLi41NWNkMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAKIHN0YXRpYyB2b2lkIGhncGtfcmVjYWxpYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKncgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgaGdwa19kYXRhLCByZWNhbGliX3dxKTsKIAlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSA9IHByaXYtPnBzbW91c2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCAzZTQ2OGQyLi4yZDgzNTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0xMzMxLDEyICsxMzMxLDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IGNhcGluY190dHlfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqY2FwaW5jX3R0eV9kcml2ZXI7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgY2FwaW5jX29wcyA9IHsKQEAgLTEzNTgsNyArMTM1Miw2IEBACiAJLmZsdXNoX2J1ZmZlciA9IGNhcGluY190dHlfZmx1c2hfYnVmZmVyLAogCS5zZXRfbGRpc2MgPSBjYXBpbmNfdHR5X3NldF9sZGlzYywKIAkuc2VuZF94Y2hhciA9IGNhcGluY190dHlfc2VuZF94Y2hhciwKLQkucmVhZF9wcm9jID0gY2FwaW5jX3R0eV9yZWFkX3Byb2MsCiB9OwogCiBzdGF0aWMgaW50IGNhcGluY190dHlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCmluZGV4IGY0OTY5ZmUuLjY5ZTcxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogCQlyZXR1cm4gKDApOwogCiAJdW1faWRpX3Byb2NfZW50cnktPnJlYWRfcHJvYyA9IHVtX2lkaV9wcm9jX3JlYWQ7Ci0JdW1faWRpX3Byb2NfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm4gKDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvY29yZS5jIGIvZHJpdmVycy9sZ3Vlc3QvY29yZS5jCmluZGV4IDYwMTU2ZGYuLjQ4NDVmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2NvcmUuYworKysgYi9kcml2ZXJzL2xndWVzdC9jb3JlLmMKQEAgLTE1Miw4ICsxNTIsOCBAQAogICogY29kZS4gIFdlIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgcmFuZ2UgaXMgYmVsb3cgdGhlIHBmbl9saW1pdCB0aGUgTGF1bmNoZXIKICAqIGdhdmUgdXMuICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IGFkZHIgKyBsZW4gZG9lc24ndCBnaXZlIHVzIGEgZmFsc2UKICAqIHBvc2l0aXZlIGJ5IG92ZXJmbG93aW5nLCB0b28uICovCi1pbnQgbGd1ZXN0X2FkZHJlc3Nfb2soY29uc3Qgc3RydWN0IGxndWVzdCAqbGcsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCitib29sIGxndWVzdF9hZGRyZXNzX29rKGNvbnN0IHN0cnVjdCBsZ3Vlc3QgKmxnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlyZXR1cm4gKGFkZHIrbGVuKSAvIFBBR0VfU0laRSA8IGxnLT5wZm5fbGltaXQgJiYgKGFkZHIrbGVuID49IGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKaW5kZXggNDE1ZmFiMC4uNmU5OWFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYworKysgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCkBAIC0zNCw3ICszNCw3IEBACiB9CiAKIC8qIEFuIElEVCBlbnRyeSBjYW4ndCBiZSB1c2VkIHVubGVzcyB0aGUgInByZXNlbnQiIGJpdCBpcyBzZXQuICovCi1zdGF0aWMgaW50IGlkdF9wcmVzZW50KHUzMiBsbywgdTMyIGhpKQorc3RhdGljIGJvb2wgaWR0X3ByZXNlbnQodTMyIGxvLCB1MzIgaGkpCiB7CiAJcmV0dXJuIChoaSAmIDB4ODAwMCk7CiB9CkBAIC02MCw3ICs2MCw4IEBACiAgKiBXZSBzZXQgdXAgdGhlIHN0YWNrIGp1c3QgbGlrZSB0aGUgQ1BVIGRvZXMgZm9yIGEgcmVhbCBpbnRlcnJ1cHQsIHNvIGl0J3MKICAqIGlkZW50aWNhbCBmb3IgdGhlIEd1ZXN0IChhbmQgdGhlIHN0YW5kYXJkICJpcmV0IiBpbnN0cnVjdGlvbiB3aWxsIHVuZG8KICAqIGl0KS4gKi8KLXN0YXRpYyB2b2lkIHNldF9ndWVzdF9pbnRlcnJ1cHQoc3RydWN0IGxnX2NwdSAqY3B1LCB1MzIgbG8sIHUzMiBoaSwgaW50IGhhc19lcnIpCitzdGF0aWMgdm9pZCBzZXRfZ3Vlc3RfaW50ZXJydXB0KHN0cnVjdCBsZ19jcHUgKmNwdSwgdTMyIGxvLCB1MzIgaGksCisJCQkJYm9vbCBoYXNfZXJyKQogewogCXVuc2lnbmVkIGxvbmcgZ3N0YWNrLCBvcmlnc3RhY2s7CiAJdTMyIGVmbGFncywgc3MsIGlycV9lbmFibGU7CkBAIC0xODQsNyArMTg1LDcgQEAKIAkJLyogc2V0X2d1ZXN0X2ludGVycnVwdCgpIHRha2VzIHRoZSBpbnRlcnJ1cHQgZGVzY3JpcHRvciBhbmQgYQogCQkgKiBmbGFnIHRvIHNheSB3aGV0aGVyIHRoaXMgaW50ZXJydXB0IHB1c2hlcyBhbiBlcnJvciBjb2RlIG9udG8KIAkJICogdGhlIHN0YWNrIGFzIHdlbGw6IHZpcnR1YWwgaW50ZXJydXB0cyBuZXZlciBkby4gKi8KLQkJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGlkdC0+YSwgaWR0LT5iLCAwKTsKKwkJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGlkdC0+YSwgaWR0LT5iLCBmYWxzZSk7CiAJfQogCiAJLyogRXZlcnkgdGltZSB3ZSBkZWxpdmVyIGFuIGludGVycnVwdCwgd2UgdXBkYXRlIHRoZSB0aW1lc3RhbXAgaW4gdGhlCkBAIC0yNDQsMjYgKzI0NSwyNiBAQAogLypIOjIyMCBOb3cgd2UndmUgZ290IHRoZSByb3V0aW5lcyB0byBkZWxpdmVyIGludGVycnVwdHMsIGRlbGl2ZXJpbmcgdHJhcHMgbGlrZQogICogcGFnZSBmYXVsdCBpcyBlYXN5LiAgVGhlIG9ubHkgdHJpY2sgaXMgdGhhdCBJbnRlbCBkZWNpZGVkIHRoYXQgc29tZSB0cmFwcwogICogc2hvdWxkIGhhdmUgZXJyb3IgY29kZXM6ICovCi1zdGF0aWMgaW50IGhhc19lcnIodW5zaWduZWQgaW50IHRyYXApCitzdGF0aWMgYm9vbCBoYXNfZXJyKHVuc2lnbmVkIGludCB0cmFwKQogewogCXJldHVybiAodHJhcCA9PSA4IHx8ICh0cmFwID49IDEwICYmIHRyYXAgPD0gMTQpIHx8IHRyYXAgPT0gMTcpOwogfQogCiAvKiBkZWxpdmVyX3RyYXAoKSByZXR1cm5zIHRydWUgaWYgaXQgY291bGQgZGVsaXZlciB0aGUgdHJhcC4gKi8KLWludCBkZWxpdmVyX3RyYXAoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBpbnQgbnVtKQorYm9vbCBkZWxpdmVyX3RyYXAoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBpbnQgbnVtKQogewogCS8qIFRyYXAgbnVtYmVycyBhcmUgYWx3YXlzIDggYml0LCBidXQgd2Ugc2V0IGFuIGltcG9zc2libGUgdHJhcCBudW1iZXIKIAkgKiBmb3IgdHJhcHMgaW5zaWRlIHRoZSBTd2l0Y2hlciwgc28gY2hlY2sgdGhhdCBoZXJlLiAqLwogCWlmIChudW0gPj0gQVJSQVlfU0laRShjcHUtPmFyY2guaWR0KSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qIEVhcmx5IG9uIHRoZSBHdWVzdCBoYXNuJ3Qgc2V0IHRoZSBJRFQgZW50cmllcyAob3IgbWF5YmUgaXQgcHV0IGEKIAkgKiBib2d1cyBvbmUgaW4pOiBpZiB3ZSBmYWlsIGhlcmUsIHRoZSBHdWVzdCB3aWxsIGJlIGtpbGxlZC4gKi8KIAlpZiAoIWlkdF9wcmVzZW50KGNwdS0+YXJjaC5pZHRbbnVtXS5hLCBjcHUtPmFyY2guaWR0W251bV0uYikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAJc2V0X2d1ZXN0X2ludGVycnVwdChjcHUsIGNwdS0+YXJjaC5pZHRbbnVtXS5hLAogCQkJICAgIGNwdS0+YXJjaC5pZHRbbnVtXS5iLCBoYXNfZXJyKG51bSkpOwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAvKkg6MjUwIEhlcmUncyB0aGUgaGFyZCBwYXJ0OiByZXR1cm5pbmcgdG8gdGhlIEhvc3QgZXZlcnkgdGltZSBhIHRyYXAgaGFwcGVucwpAQCAtMjc5LDE4ICsyODAsMTkgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgaW5kaWNhdGVzIGlmIGEgcGFydGljdWxhciB0cmFwIG51bWJlciBjb3VsZCBiZSBkZWxpdmVyZWQKICAqIGRpcmVjdGx5LiAqLwotc3RhdGljIGludCBkaXJlY3RfdHJhcCh1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIGJvb2wgZGlyZWN0X3RyYXAodW5zaWduZWQgaW50IG51bSkKIHsKIAkvKiBIYXJkd2FyZSBpbnRlcnJ1cHRzIGRvbid0IGdvIHRvIHRoZSBHdWVzdCBhdCBhbGwgKGV4Y2VwdCBzeXN0ZW0KIAkgKiBjYWxsKS4gKi8KIAlpZiAobnVtID49IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiAmJiAhY291bGRfYmVfc3lzY2FsbChudW0pKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogVGhlIEhvc3QgbmVlZHMgdG8gc2VlIHBhZ2UgZmF1bHRzIChmb3Igc2hhZG93IHBhZ2luZyBhbmQgdG8gc2F2ZSB0aGUKIAkgKiBmYXVsdCBhZGRyZXNzKSwgZ2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0cyAoaW4vb3V0IGVtdWxhdGlvbikgYW5kCi0JICogZGV2aWNlIG5vdCBhdmFpbGFibGUgKFRTIGhhbmRsaW5nKSwgYW5kIG9mIGNvdXJzZSwgdGhlIGh5cGVyY2FsbAotCSAqIHRyYXAuICovCi0JcmV0dXJuIG51bSAhPSAxNCAmJiBudW0gIT0gMTMgJiYgbnVtICE9IDcgJiYgbnVtICE9IExHVUVTVF9UUkFQX0VOVFJZOworCSAqIGRldmljZSBub3QgYXZhaWxhYmxlIChUUyBoYW5kbGluZyksIGludmFsaWQgb3Bjb2RlIGZhdWx0IChrdm0gaGNhbGwpLAorCSAqIGFuZCBvZiBjb3Vyc2UsIHRoZSBoeXBlcmNhbGwgdHJhcC4gKi8KKwlyZXR1cm4gbnVtICE9IDE0ICYmIG51bSAhPSAxMyAmJiBudW0gIT0gNyAmJgorCQkJbnVtICE9IDYgJiYgbnVtICE9IExHVUVTVF9UUkFQX0VOVFJZOwogfQogLyo6Ki8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGcuaCBiL2RyaXZlcnMvbGd1ZXN0L2xnLmgKaW5kZXggZjJjNjQxZS4uYWM4YTRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvbGcuaAorKysgYi9kcml2ZXJzL2xndWVzdC9sZy5oCkBAIC0xMDksOCArMTA5LDggQEAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggbGd1ZXN0X2xvY2s7CiAKIC8qIGNvcmUuYzogKi8KLWludCBsZ3Vlc3RfYWRkcmVzc19vayhjb25zdCBzdHJ1Y3QgbGd1ZXN0ICpsZywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7Citib29sIGxndWVzdF9hZGRyZXNzX29rKGNvbnN0IHN0cnVjdCBsZ3Vlc3QgKmxnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7CiB2b2lkIF9fbGdyZWFkKHN0cnVjdCBsZ19jcHUgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7CiB2b2lkIF9fbGd3cml0ZShzdHJ1Y3QgbGdfY3B1ICosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpOwogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogLyogaW50ZXJydXB0c19hbmRfdHJhcHMuYzogKi8KIHZvaWQgbWF5YmVfZG9faW50ZXJydXB0KHN0cnVjdCBsZ19jcHUgKmNwdSk7Ci1pbnQgZGVsaXZlcl90cmFwKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgaW50IG51bSk7Citib29sIGRlbGl2ZXJfdHJhcChzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGludCBudW0pOwogdm9pZCBsb2FkX2d1ZXN0X2lkdF9lbnRyeShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGludCBpLAogCQkJICB1MzIgbG93LCB1MzIgaGkpOwogdm9pZCBndWVzdF9zZXRfc3RhY2soc3RydWN0IGxnX2NwdSAqY3B1LCB1MzIgc2VnLCB1MzIgZXNwLCB1bnNpZ25lZCBpbnQgcGFnZXMpOwpAQCAtMTczLDcgKzE3Myw3IEBACiB2b2lkIGd1ZXN0X3NldF9wdGUoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBsb25nIGdwZ2RpciwKIAkJICAgdW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgdmFsKTsKIHZvaWQgbWFwX3N3aXRjaGVyX2luX2d1ZXN0KHN0cnVjdCBsZ19jcHUgKmNwdSwgc3RydWN0IGxndWVzdF9wYWdlcyAqcGFnZXMpOwotaW50IGRlbWFuZF9wYWdlKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgbG9uZyBjcjIsIGludCBlcnJjb2RlKTsKK2Jvb2wgZGVtYW5kX3BhZ2Uoc3RydWN0IGxnX2NwdSAqY3B1LCB1bnNpZ25lZCBsb25nIGNyMiwgaW50IGVycmNvZGUpOwogdm9pZCBwaW5fcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdW5zaWduZWQgbG9uZyBndWVzdF9wYShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpOwogdm9pZCBwYWdlX3RhYmxlX2d1ZXN0X2RhdGFfaW5pdChzdHJ1Y3QgbGdfY3B1ICpjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jIGIvZHJpdmVycy9sZ3Vlc3QvbGd1ZXN0X2RldmljZS5jCmluZGV4IDgxMzI1MzMuLmRmNDRkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF9kZXZpY2UuYworKysgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfZGV2aWNlLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAJLyogV2Ugc2V0IHRoZSBzdGF0dXMuICovCiAJdG9fbGdkZXYodmRldiktPmRlc2MtPnN0YXR1cyA9IHN0YXR1czsKLQloY2FsbChMSENBTExfTk9USUZZLCAobWF4X3Bmbjw8UEFHRV9TSElGVCkgKyBvZmZzZXQsIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9OT1RJRlksIChtYXhfcGZuIDw8IFBBR0VfU0hJRlQpICsgb2Zmc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgbGdfc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKQpAQCAtMjA5LDcgKzIwOSw3IEBACiAJICogdmlydHF1ZXVlIHN0cnVjdHVyZS4gKi8KIAlzdHJ1Y3QgbGd1ZXN0X3ZxX2luZm8gKmx2cSA9IHZxLT5wcml2OwogCi0JaGNhbGwoTEhDQUxMX05PVElGWSwgbHZxLT5jb25maWcucGZuIDw8IFBBR0VfU0hJRlQsIDAsIDApOworCWt2bV9oeXBlcmNhbGwxKExIQ0FMTF9OT1RJRlksIGx2cS0+Y29uZmlnLnBmbiA8PCBQQUdFX1NISUZUKTsKIH0KIAogLyogQW4gZXh0ZXJuIGRlY2xhcmF0aW9uIGluc2lkZSBhIEMgZmlsZSBpcyBiYWQgZm9ybS4gIERvbid0IGRvIGl0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYyBiL2RyaXZlcnMvbGd1ZXN0L3BhZ2VfdGFibGVzLmMKaW5kZXggNTc2YTgzMS4uYTA1OWNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvcGFnZV90YWJsZXMuYworKysgYi9kcml2ZXJzL2xndWVzdC9wYWdlX3RhYmxlcy5jCkBAIC0xOTksNyArMTk5LDcgQEAKICAqCiAgKiBJZiB3ZSBmaXhlZCB1cCB0aGUgZmF1bHQgKGllLiB3ZSBtYXBwZWQgdGhlIGFkZHJlc3MpLCB0aGlzIHJvdXRpbmUgcmV0dXJucwogICogdHJ1ZS4gIE90aGVyd2lzZSwgaXQgd2FzIGEgcmVhbCBmYXVsdCBhbmQgd2UgbmVlZCB0byB0ZWxsIHRoZSBHdWVzdC4gKi8KLWludCBkZW1hbmRfcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBlcnJjb2RlKQorYm9vbCBkZW1hbmRfcGFnZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBlcnJjb2RlKQogewogCXBnZF90IGdwZ2Q7CiAJcGdkX3QgKnNwZ2Q7CkBAIC0yMTEsNyArMjExLDcgQEAKIAlncGdkID0gbGdyZWFkKGNwdSwgZ3BnZF9hZGRyKGNwdSwgdmFkZHIpLCBwZ2RfdCk7CiAJLyogVG9wbGV2ZWwgbm90IHByZXNlbnQ/ICBXZSBjYW4ndCBtYXAgaXQgaW4uICovCiAJaWYgKCEocGdkX2ZsYWdzKGdwZ2QpICYgX1BBR0VfUFJFU0VOVCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBOb3cgbG9vayBhdCB0aGUgbWF0Y2hpbmcgc2hhZG93IGVudHJ5LiAqLwogCXNwZ2QgPSBzcGdkX2FkZHIoY3B1LCBjcHUtPmNwdV9wZ2QsIHZhZGRyKTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkgKiBzaW1wbGUgZm9yIHRoaXMgY29ybmVyIGNhc2UuICovCiAJCWlmICghcHRlcGFnZSkgewogCQkJa2lsbF9ndWVzdChjcHUsICJvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgcHRlIHBhZ2UiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCS8qIFdlIGNoZWNrIHRoYXQgdGhlIEd1ZXN0IHBnZCBpcyBPSy4gKi8KIAkJY2hlY2tfZ3BnZChjcHUsIGdwZ2QpOwpAQCAtMjM4LDE2ICsyMzgsMTYgQEAKIAogCS8qIElmIHRoaXMgcGFnZSBpc24ndCBpbiB0aGUgR3Vlc3QgcGFnZSB0YWJsZXMsIHdlIGNhbid0IHBhZ2UgaXQgaW4uICovCiAJaWYgKCEocHRlX2ZsYWdzKGdwdGUpICYgX1BBR0VfUFJFU0VOVCkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBDaGVjayB0aGV5J3JlIG5vdCB0cnlpbmcgdG8gd3JpdGUgdG8gYSBwYWdlIHRoZSBHdWVzdCB3YW50cwogCSAqIHJlYWQtb25seSAoYml0IDIgb2YgZXJyY29kZSA9PSB3cml0ZSkuICovCiAJaWYgKChlcnJjb2RlICYgMikgJiYgIShwdGVfZmxhZ3MoZ3B0ZSkgJiBfUEFHRV9SVykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBVc2VyIGFjY2VzcyB0byBhIGtlcm5lbC1vbmx5IHBhZ2U/IChiaXQgMyA9PSB1c2VyIGFjY2VzcykgKi8KIAlpZiAoKGVycmNvZGUgJiA0KSAmJiAhKHB0ZV9mbGFncyhncHRlKSAmIF9QQUdFX1VTRVIpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgR3Vlc3QgUFRFIGZsYWdzIGFyZSBPSywgYW5kIHRoZSBwYWdlIG51bWJlciBpcyBiZWxvdwogCSAqIHRoZSBwZm5fbGltaXQgKGllLiBub3QgbWFwcGluZyB0aGUgTGF1bmNoZXIgYmluYXJ5KS4gKi8KQEAgLTI4Myw3ICsyODMsNyBAQAogCSAqIG1hbmlwdWxhdGVkLCB0aGUgcmVzdWx0IHJldHVybmVkIGFuZCB0aGUgY29kZSBjb21wbGV0ZS4gIEEgc21hbGwKIAkgKiBkZWxheSBhbmQgYSB0cmFjZSBvZiBhbGxpdGVyYXRpb24gYXJlIHRoZSBvbmx5IGluZGljYXRpb25zIHRoZSBHdWVzdAogCSAqIGhhcyB0aGF0IGEgcGFnZSBmYXVsdCBvY2N1cnJlZCBhdCBhbGwuICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qSDozNjAKQEAgLTI5Niw3ICsyOTYsNyBAQAogICoKICAqIFRoaXMgaXMgYSBxdWljayB2ZXJzaW9uIHdoaWNoIGFuc3dlcnMgdGhlIHF1ZXN0aW9uOiBpcyB0aGlzIHZpcnR1YWwgYWRkcmVzcwogICogbWFwcGVkIGJ5IHRoZSBzaGFkb3cgcGFnZSB0YWJsZXMsIGFuZCBpcyBpdCB3cml0YWJsZT8gKi8KLXN0YXRpYyBpbnQgcGFnZV93cml0YWJsZShzdHJ1Y3QgbGdfY3B1ICpjcHUsIHVuc2lnbmVkIGxvbmcgdmFkZHIpCitzdGF0aWMgYm9vbCBwYWdlX3dyaXRhYmxlKHN0cnVjdCBsZ19jcHUgKmNwdSwgdW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAlwZ2RfdCAqc3BnZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJLyogTG9vayBhdCB0aGUgY3VycmVudCB0b3AgbGV2ZWwgZW50cnk6IGlzIGl0IHByZXNlbnQ/ICovCiAJc3BnZCA9IHNwZ2RfYWRkcihjcHUsIGNwdS0+Y3B1X3BnZCwgdmFkZHIpOwogCWlmICghKHBnZF9mbGFncygqc3BnZCkgJiBfUEFHRV9QUkVTRU5UKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCS8qIENoZWNrIHRoZSBmbGFncyBvbiB0aGUgcHRlIGVudHJ5IGl0c2VsZjogaXQgbXVzdCBiZSBwcmVzZW50IGFuZAogCSAqIHdyaXRhYmxlLiAqLwpAQCAtMzczLDggKzM3MywxMCBAQAogCS8qIEZpcnN0IHN0ZXA6IGdldCB0aGUgdG9wLWxldmVsIEd1ZXN0IHBhZ2UgdGFibGUgZW50cnkuICovCiAJZ3BnZCA9IGxncmVhZChjcHUsIGdwZ2RfYWRkcihjcHUsIHZhZGRyKSwgcGdkX3QpOwogCS8qIFRvcGxldmVsIG5vdCBwcmVzZW50PyAgV2UgY2FuJ3QgbWFwIGl0IGluLiAqLwotCWlmICghKHBnZF9mbGFncyhncGdkKSAmIF9QQUdFX1BSRVNFTlQpKQorCWlmICghKHBnZF9mbGFncyhncGdkKSAmIF9QQUdFX1BSRVNFTlQpKSB7CiAJCWtpbGxfZ3Vlc3QoY3B1LCAiQmFkIGFkZHJlc3MgJSNseCIsIHZhZGRyKTsKKwkJcmV0dXJuIC0xVUw7CisJfQogCiAJZ3B0ZSA9IGxncmVhZChjcHUsIGdwdGVfYWRkcihncGdkLCB2YWRkciksIHB0ZV90KTsKIAlpZiAoIShwdGVfZmxhZ3MoZ3B0ZSkgJiBfUEFHRV9QUkVTRU5UKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMgYi9kcml2ZXJzL2xndWVzdC9zZWdtZW50cy5jCmluZGV4IGVjNmFhM2YuLjRmMTU0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3NlZ21lbnRzLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3Qvc2VnbWVudHMuYwpAQCAtNDUsNyArNDUsNyBAQAogICogIlRhc2sgU3RhdGUgU2VnbWVudCIgd2hpY2ggY29udHJvbHMgYWxsIGtpbmRzIG9mIGRlbGljYXRlIHRoaW5ncy4gIFRoZQogICogTEdVRVNUX0NTIGFuZCBMR1VFU1RfRFMgZW50cmllcyBhcmUgcmVzZXJ2ZWQgZm9yIHRoZSBTd2l0Y2hlciwgYW5kIHRoZQogICogdGhlIEd1ZXN0IGNhbid0IGJlIHRydXN0ZWQgdG8gZGVhbCB3aXRoIGRvdWJsZSBmYXVsdHMuICovCi1zdGF0aWMgaW50IGlnbm9yZWRfZ2R0KHVuc2lnbmVkIGludCBudW0pCitzdGF0aWMgYm9vbCBpZ25vcmVkX2dkdCh1bnNpZ25lZCBpbnQgbnVtKQogewogCXJldHVybiAobnVtID09IEdEVF9FTlRSWV9UU1MKIAkJfHwgbnVtID09IEdEVF9FTlRSWV9MR1VFU1RfQ1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMgYi9kcml2ZXJzL2xndWVzdC94ODYvY29yZS5jCmluZGV4IGJmNzk0MjMuLmE2YjcxNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L3g4Ni9jb3JlLmMKKysrIGIvZHJpdmVycy9sZ3Vlc3QveDg2L2NvcmUuYwpAQCAtMjkwLDYgKzI5MCw1NyBAQAogCXJldHVybiAxOwogfQogCisvKiBPdXIgaHlwZXJjYWxscyBtZWNoYW5pc20gdXNlZCB0byBiZSBiYXNlZCBvbiBkaXJlY3Qgc29mdHdhcmUgaW50ZXJydXB0cy4KKyAqIEFmdGVyIEFudGhvbnkncyAiUmVmYWN0b3IgaHlwZXJjYWxsIGluZnJhc3RydWN0dXJlIiBrdm0gcGF0Y2gsIHdlIGRlY2lkZWQgdG8KKyAqIGNoYW5nZSBvdmVyIHRvIHVzaW5nIGt2bSBoeXBlcmNhbGxzLgorICoKKyAqIEtWTV9IWVBFUkNBTEwgaXMgYWN0dWFsbHkgYSAidm1jYWxsIiBpbnN0cnVjdGlvbiwgd2hpY2ggZ2VuZXJhdGVzIGFuIGludmFsaWQKKyAqIG9wY29kZSBmYXVsdCAoZmF1bHQgNikgb24gbm9uLVZUIGNwdXMsIHNvIHRoZSBlYXNpZXN0IHNvbHV0aW9uIHNlZW1lZCB0byBiZQorICogYW4gKmVtdWxhdGlvbiBhcHByb2FjaCo6IGlmIHRoZSBmYXVsdCB3YXMgcmVhbGx5IHByb2R1Y2VkIGJ5IGFuIGh5cGVyY2FsbAorICogKGlzX2h5cGVyY2FsbCgpIGRvZXMgZXhhY3RseSB0aGlzIGNoZWNrKSwgd2UgY2FuIGp1c3QgY2FsbCB0aGUgY29ycmVzcG9uZGluZworICogaHlwZXJjYWxsIGhvc3QgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uCisgKgorICogQnV0IHRoZXNlIGludmFsaWQgb3Bjb2RlIGZhdWx0cyBhcmUgbm90YWJseSBzbG93ZXIgdGhhbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzLgorICogU28gd2UgaW1wbGVtZW50ZWQgdGhlICpwYXRjaGluZyAob3IgcmV3cml0aW5nKSBhcHByb2FjaCo6IGV2ZXJ5IHRpbWUgd2UgaGl0CisgKiB0aGUgS1ZNX0hZUEVSQ0FMTCBvcGNvZGUgaW4gR3Vlc3QgY29kZSwgd2UgcGF0Y2ggaXQgdG8gdGhlIG9sZCAiaW50IDB4MWYiCisgKiBvcGNvZGUsIHNvIG5leHQgdGltZSB0aGUgR3Vlc3QgY2FsbHMgdGhpcyBoeXBlcmNhbGwgaXQgd2lsbCB1c2UgdGhlCisgKiBmYXN0ZXIgdHJhcCBtZWNoYW5pc20uCisgKgorICogTWF0aWFzIGV2ZW4gYmVuY2htYXJrZWQgaXQgdG8gY29udmluY2UgeW91OiB0aGlzIHNob3dzIHRoZSBhdmVyYWdlIGN5Y2xlCisgKiBjb3N0IG9mIGEgaHlwZXJjYWxsLiAgRm9yIGVhY2ggYWx0ZXJuYXRpdmUgc29sdXRpb24gbWVudGlvbmVkIGFib3ZlIHdlJ3ZlCisgKiBtYWRlIDUgcnVucyBvZiB0aGUgYmVuY2htYXJrOgorICoKKyAqIDEpIGRpcmVjdCBzb2Z0d2FyZSBpbnRlcnJ1cHQ6IDI5MTUsIDI3ODksIDI3NjQsIDI3MjEsIDI4OTgKKyAqIDIpIGVtdWxhdGlvbiB0ZWNobmlxdWU6IDM0MTAsIDM2ODEsIDM0NjYsIDMzOTIsIDM3ODAKKyAqIDMpIHBhdGNoaW5nIChyZXdyaXRlKSB0ZWNobmlxdWU6IDI5NzcsIDI5NzUsIDI4OTEsIDI2MzcsIDI4ODQKKyAqCisgKiBPbmUgdHdvLWxpbmUgZnVuY3Rpb24gaXMgd29ydGggYSAyMCUgaHlwZXJjYWxsIHNwZWVkIGJvb3N0IQorICovCitzdGF0aWMgdm9pZCByZXdyaXRlX2h5cGVyY2FsbChzdHJ1Y3QgbGdfY3B1ICpjcHUpCit7CisJLyogVGhpcyBhcmUgdGhlIG9wY29kZXMgd2UgdXNlIHRvIHBhdGNoIHRoZSBHdWVzdC4gIFRoZSBvcGNvZGUgZm9yICJpbnQKKwkgKiAkMHgxZiIgaXMgIjB4Y2QgMHgxZiIgYnV0IHZtY2FsbCBpbnN0cnVjdGlvbiBpcyAzIGJ5dGVzIGxvbmcsIHNvIHdlCisJICogY29tcGxldGUgdGhlIHNlcXVlbmNlIHdpdGggYSBOT1AgKDB4OTApLiAqLworCXU4IGluc25bM10gPSB7MHhjZCwgMHgxZiwgMHg5MH07CisKKwlfX2xnd3JpdGUoY3B1LCBndWVzdF9wYShjcHUsIGNwdS0+cmVncy0+ZWlwKSwgaW5zbiwgc2l6ZW9mKGluc24pKTsKK30KKworc3RhdGljIGJvb2wgaXNfaHlwZXJjYWxsKHN0cnVjdCBsZ19jcHUgKmNwdSkKK3sKKwl1OCBpbnNuWzNdOworCisJLyogVGhpcyBtdXN0IGJlIHRoZSBHdWVzdCBrZXJuZWwgdHJ5aW5nIHRvIGRvIHNvbWV0aGluZy4KKwkgKiBUaGUgYm90dG9tIHR3byBiaXRzIG9mIHRoZSBDUyBzZWdtZW50IHJlZ2lzdGVyIGFyZSB0aGUgcHJpdmlsZWdlCisJICogbGV2ZWwuICovCisJaWYgKChjcHUtPnJlZ3MtPmNzICYgMykgIT0gR1VFU1RfUEwpCisJCXJldHVybiBmYWxzZTsKKworCS8qIElzIGl0IGEgdm1jYWxsPyAqLworCV9fbGdyZWFkKGNwdSwgaW5zbiwgZ3Vlc3RfcGEoY3B1LCBjcHUtPnJlZ3MtPmVpcCksIHNpemVvZihpbnNuKSk7CisJcmV0dXJuIGluc25bMF0gPT0gMHgwZiAmJiBpbnNuWzFdID09IDB4MDEgJiYgaW5zblsyXSA9PSAweGMxOworfQorCiAvKkg6MDUwIE9uY2Ugd2UndmUgcmUtZW5hYmxlZCBpbnRlcnJ1cHRzLCB3ZSBsb29rIGF0IHdoeSB0aGUgR3Vlc3QgZXhpdGVkLiAqLwogdm9pZCBsZ3Vlc3RfYXJjaF9oYW5kbGVfdHJhcChzdHJ1Y3QgbGdfY3B1ICpjcHUpCiB7CkBAIC0zMzcsNyArMzg4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSAzMiAuLi4gMjU1OgogCQkvKiBUaGVzZSB2YWx1ZXMgbWVhbiBhIHJlYWwgaW50ZXJydXB0IG9jY3VycmVkLCBpbiB3aGljaCBjYXNlCi0JCSAqIHRoZSBIb3N0IGhhbmRsZXIgaGFzIGFscmVhZHkgYmVlbiBydW4uICBXZSBqdXN0IGRvIGEKKwkJICogdGhlIEhvc3QgaGFuZGxlciBoYXMgYWxyZWFkeSBiZWVuIHJ1bi4gV2UganVzdCBkbyBhCiAJCSAqIGZyaWVuZGx5IGNoZWNrIGlmIGFub3RoZXIgcHJvY2VzcyBzaG91bGQgbm93IGJlIHJ1biwgdGhlbgogCQkgKiByZXR1cm4gdG8gcnVuIHRoZSBHdWVzdCBhZ2FpbiAqLwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTM0Nyw2ICszOTgsMTUgQEAKIAkJICogdXAgdGhlIHBvaW50ZXIgbm93IHRvIGluZGljYXRlIGEgaHlwZXJjYWxsIGlzIHBlbmRpbmcuICovCiAJCWNwdS0+aGNhbGwgPSAoc3RydWN0IGhjYWxsX2FyZ3MgKiljcHUtPnJlZ3M7CiAJCXJldHVybjsKKwljYXNlIDY6CisJCS8qIGt2bSBoeXBlcmNhbGxzIHRyaWdnZXIgYW4gaW52YWxpZCBvcGNvZGUgZmF1bHQgKDYpLgorCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGlmIHJpbmcgPT0gR1VFU1RfUEwgYW5kCisJCSAqIGZhdWx0aW5nIGluc3RydWN0aW9uID09IHZtY2FsbC4gKi8KKwkJaWYgKGlzX2h5cGVyY2FsbChjcHUpKSB7CisJCQlyZXdyaXRlX2h5cGVyY2FsbChjcHUpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOwogCX0KIAogCS8qIFdlIGRpZG4ndCBoYW5kbGUgdGhlIHRyYXAsIHNvIGl0IG5lZWRzIHRvIGdvIHRvIHRoZSBHdWVzdC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYwppbmRleCA4MjYwN2FkLi5jMDYyMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCkBAIC00OTgsOCArNDk4LDggQEAKICNkZWZpbmUgQlVJTERfU1RPUkVfRlVOQ19JTlQobmFtZSwgZGF0YSkJCQlcCiBzdGF0aWMgc3NpemVfdCBzdG9yZV8jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikgXAogewkJCQkJCQkJXAotCXUzMiB2YWw7CQkJCQkJXAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKKwlpbnQgdmFsOwkJCQkJCVwKKwl2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwkJCVwKIAlpZiAodmFsIDwgMCB8fCB2YWwgPiAyNTUpCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBzcGVjaWZpZWQgZmFuIHNwZWVkIHRvICVkXG4iLCB2YWwpOwlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL0tjb25maWcgYi9kcml2ZXJzL21kL0tjb25maWcKaW5kZXggMjI4MWI1MC4uMzZlMDY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWQvS2NvbmZpZwpAQCAtMTIxLDYgKzEyMSw3IEBACiBjb25maWcgTURfUkFJRDQ1NgogCXRyaXN0YXRlICJSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlIgogCWRlcGVuZHMgb24gQkxLX0RFVl9NRAorCXNlbGVjdCBNRF9SQUlENl9QUQogCXNlbGVjdCBBU1lOQ19NRU1DUFkKIAlzZWxlY3QgQVNZTkNfWE9SCiAJLS0taGVscC0tLQpAQCAtMTUxLDM0ICsxNTIsOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCi1jb25maWcgTURfUkFJRDVfUkVTSEFQRQotCWJvb2wgIlN1cHBvcnQgYWRkaW5nIGRyaXZlcyB0byBhIHJhaWQtNSBhcnJheSIKLQlkZXBlbmRzIG9uIE1EX1JBSUQ0NTYKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBBIFJBSUQtNSBzZXQgY2FuIGJlIGV4cGFuZGVkIGJ5IGFkZGluZyBleHRyYSBkcml2ZXMuIFRoaXMKLQkgIHJlcXVpcmVzICJyZXN0cmlwaW5nIiB0aGUgYXJyYXkgd2hpY2ggbWVhbnMgKGFsbW9zdCkgZXZlcnkKLQkgIGJsb2NrIG11c3QgYmUgd3JpdHRlbiB0byBhIGRpZmZlcmVudCBwbGFjZS4KLQotICAgICAgICAgIFRoaXMgb3B0aW9uIGFsbG93cyBzdWNoIHJlc3RyaXBpbmcgdG8gYmUgZG9uZSB3aGlsZSB0aGUgYXJyYXkKLQkgIGlzIG9ubGluZS4KLQotCSAgWW91IHdpbGwgbmVlZCBtZGFkbSB2ZXJzaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCi0JICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcwotCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCi0JICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCi0JICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KLQkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KLQotCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KLQkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02Ci0JICB0byBncm93ICcvZGV2L21kMScgdG8gaGF2aW5nIDYgZGlza3MuCi0KLQkgIE5vdGU6IFRoZSBhcnJheSBjYW4gb25seSBiZSBleHBhbmRlZCwgbm90IGNvbnRyYWN0ZWQuCi0JICBUaGVyZSBzaG91bGQgYmUgZW5vdWdoIHNwYXJlcyBhbHJlYWR5IHByZXNlbnQgdG8gbWFrZSB0aGUgbmV3Ci0JICBhcnJheSB3b3JrYWJsZS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KK2NvbmZpZyBNRF9SQUlENl9QUQorCXRyaXN0YXRlCiAKIGNvbmZpZyBNRF9NVUxUSVBBVEgKIAl0cmlzdGF0ZSAiTXVsdGlwYXRoIEkvTyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKaW5kZXggNzI4ODBiNy4uNDVjYzU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL01ha2VmaWxlCkBAIC0yLDIwICsyLDIxIEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIHNvZnR3YXJlIFJBSUQgYW5kIExWTSBkcml2ZXJzLgogIwogCi1kbS1tb2Qtb2Jqcwk6PSBkbS5vIGRtLXRhYmxlLm8gZG0tdGFyZ2V0Lm8gZG0tbGluZWFyLm8gZG0tc3RyaXBlLm8gXAorZG0tbW9kLXkJKz0gZG0ubyBkbS10YWJsZS5vIGRtLXRhcmdldC5vIGRtLWxpbmVhci5vIGRtLXN0cmlwZS5vIFwKIAkJICAgZG0taW9jdGwubyBkbS1pby5vIGRtLWtjb3B5ZC5vIGRtLXN5c2ZzLm8KLWRtLW11bHRpcGF0aC1vYmpzIDo9IGRtLXBhdGgtc2VsZWN0b3IubyBkbS1tcGF0aC5vCi1kbS1zbmFwc2hvdC1vYmpzIDo9IGRtLXNuYXAubyBkbS1leGNlcHRpb24tc3RvcmUubyBkbS1zbmFwLXRyYW5zaWVudC5vIFwKK2RtLW11bHRpcGF0aC15CSs9IGRtLXBhdGgtc2VsZWN0b3IubyBkbS1tcGF0aC5vCitkbS1zbmFwc2hvdC15CSs9IGRtLXNuYXAubyBkbS1leGNlcHRpb24tc3RvcmUubyBkbS1zbmFwLXRyYW5zaWVudC5vIFwKIAkJICAgIGRtLXNuYXAtcGVyc2lzdGVudC5vCi1kbS1taXJyb3Itb2Jqcwk6PSBkbS1yYWlkMS5vCi1tZC1tb2Qtb2JqcyAgICAgOj0gbWQubyBiaXRtYXAubwotcmFpZDQ1Ni1vYmpzCTo9IHJhaWQ1Lm8gcmFpZDZhbGdvcy5vIHJhaWQ2cmVjb3YubyByYWlkNnRhYmxlcy5vIFwKK2RtLW1pcnJvci15CSs9IGRtLXJhaWQxLm8KK21kLW1vZC15CSs9IG1kLm8gYml0bWFwLm8KK3JhaWQ0NTYteQkrPSByYWlkNS5vCityYWlkNl9wcS15CSs9IHJhaWQ2YWxnb3MubyByYWlkNnJlY292Lm8gcmFpZDZ0YWJsZXMubyBcCiAJCSAgIHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIFwKIAkJICAgcmFpZDZpbnQ4Lm8gcmFpZDZpbnQxNi5vIHJhaWQ2aW50MzIubyBcCiAJCSAgIHJhaWQ2YWx0aXZlYzEubyByYWlkNmFsdGl2ZWMyLm8gcmFpZDZhbHRpdmVjNC5vIFwKIAkJICAgcmFpZDZhbHRpdmVjOC5vIFwKIAkJICAgcmFpZDZtbXgubyByYWlkNnNzZTEubyByYWlkNnNzZTIubwotaG9zdHByb2dzLXkJOj0gbWt0YWJsZXMKK2hvc3Rwcm9ncy15CSs9IG1rdGFibGVzCiAKICMgTm90ZTogbGluayBvcmRlciBpcyBpbXBvcnRhbnQuICBBbGwgcmFpZCBwZXJzb25hbGl0aWVzCiAjIGFuZCBtdXN0IGNvbWUgYmVmb3JlIG1kLm8sIGFzIHRoZXkgZWFjaCBpbml0aWFsaXNlIApAQCAtMjYsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX01EX1JBSUQwKQkJKz0gcmFpZDAubwogb2JqLSQoQ09ORklHX01EX1JBSUQxKQkJKz0gcmFpZDEubwogb2JqLSQoQ09ORklHX01EX1JBSUQxMCkJCSs9IHJhaWQxMC5vCitvYmotJChDT05GSUdfTURfUkFJRDZfUFEpCSs9IHJhaWQ2X3BxLm8KIG9iai0kKENPTkZJR19NRF9SQUlENDU2KQkrPSByYWlkNDU2Lm8KIG9iai0kKENPTkZJR19NRF9NVUxUSVBBVEgpCSs9IG11bHRpcGF0aC5vCiBvYmotJChDT05GSUdfTURfRkFVTFRZKQkJKz0gZmF1bHR5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IDcxOTk0MzcuLmY4YTlmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtMTYsNiArMTYsNyBAQAogICogd2FpdCBpZiBjb3VudCBnZXRzIHRvbyBoaWdoLCB3YWtlIHdoZW4gaXQgZHJvcHMgdG8gaGFsZi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yNiw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAvKiBkZWJ1ZyBtYWNyb3MgKi8KIApAQCAtMTExLDkgKzExMiwxMCBAQAogCXVuc2lnbmVkIGNoYXIgKm1hcHBhZ2U7CiAKIAlpZiAocGFnZSA+PSBiaXRtYXAtPnBhZ2VzKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUCi0JCQkiJXM6IGludmFsaWQgYml0bWFwIHBhZ2UgcmVxdWVzdDogJWx1ICg+ICVsdSlcbiIsCi0JCQlibW5hbWUoYml0bWFwKSwgcGFnZSwgYml0bWFwLT5wYWdlcy0xKTsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIGlmIGJpdG1hcF9zdGFydF9zeW5jIGdvZXMgYmV5b25kCisJCSAqIEVuZC1vZi1kZXZpY2Ugd2hpbGUgbG9va2luZyBmb3IgYSB3aG9sZSBwYWdlLgorCQkgKiBJdCBpcyBoYXJtbGVzcy4KKwkJICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjY1LDcgKzI2Nyw2IEBACiAJbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCAmbWRkZXYtPmRpc2tzKSB7CiAJCXJkZXYgPSBsaXN0X2VudHJ5KHBvcywgbWRrX3JkZXZfdCwgc2FtZV9zZXQpOwogCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKLQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKIAkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCS8qIHRoaXMgaXMgYSB1c2FibGUgZGV2aWNlcyAqLwogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC0yOTcsNyArMjk4LDcgQEAKIAkJCQkgICAgKyBzaXplLzUxMiA+IDApCiAJCQkJCS8qIGJpdG1hcCBydW5zIGluIHRvIG1ldGFkYXRhICovCiAJCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKLQkJCQlpZiAocmRldi0+ZGF0YV9vZmZzZXQgKyBtZGRldi0+c2l6ZSoyCisJCQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPmRldl9zZWN0b3JzCiAJCQkJICAgID4gcmRldi0+c2Jfc3RhcnQgKyBiaXRtYXAtPm9mZnNldCkKIAkJCQkJLyogZGF0YSBydW5zIGluIHRvIGJpdG1hcCAqLwogCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7CkBAIC01NzAsNyArNTcxLDcgQEAKIAllbHNlIGlmIChsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikgPCBCSVRNQVBfTUFKT1JfTE8gfHwKIAkJIGxlMzJfdG9fY3B1KHNiLT52ZXJzaW9uKSA+IEJJVE1BUF9NQUpPUl9ISSkKIAkJcmVhc29uID0gInVucmVjb2duaXplZCBzdXBlcmJsb2NrIHZlcnNpb24iOwotCWVsc2UgaWYgKGNodW5rc2l6ZSA8IFBBR0VfU0laRSkKKwllbHNlIGlmIChjaHVua3NpemUgPCA1MTIpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIHRvbyBzbWFsbCI7CiAJZWxzZSBpZiAoKDEgPDwgZmZ6KH5jaHVua3NpemUpKSAhPSBjaHVua3NpemUpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIG5vdCBhIHBvd2VyIG9mIDIiOwpAQCAtMTMwNiw2ICsxMzA3LDkgQEAKIAkJUFJJTlRLKEtFUk5fREVCVUcgImRlYyB3cml0ZS1iZWhpbmQgY291bnQgJWQvJWRcbiIsCiAJCSAgYXRvbWljX3JlYWQoJmJpdG1hcC0+YmVoaW5kX3dyaXRlcyksIGJpdG1hcC0+bWF4X3dyaXRlX2JlaGluZCk7CiAJfQorCWlmIChiaXRtYXAtPm1kZGV2LT5kZWdyYWRlZCkKKwkJLyogTmV2ZXIgY2xlYXIgYml0cyBvciB1cGRhdGUgZXZlbnRzX2NsZWFyZWQgd2hlbiBkZWdyYWRlZCAqLworCQlzdWNjZXNzID0gMDsKIAogCXdoaWxlIChzZWN0b3JzKSB7CiAJCWludCBibG9ja3M7CkBAIC0xMzQ1LDggKzEzNDksOCBAQAogCX0KIH0KIAotaW50IGJpdG1hcF9zdGFydF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgKmJsb2NrcywKLQkJCWludCBkZWdyYWRlZCkKK3N0YXRpYyBpbnQgX19iaXRtYXBfc3RhcnRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCisJCQkgICAgICAgaW50IGRlZ3JhZGVkKQogewogCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKIAlpbnQgcnY7CkBAIC0xMzc0LDYgKzEzNzgsMjkgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK2ludCBiaXRtYXBfc3RhcnRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCisJCSAgICAgIGludCBkZWdyYWRlZCkKK3sKKwkvKiBiaXRtYXBfc3RhcnRfc3luYyBtdXN0IGFsd2F5cyByZXBvcnQgb24gbXVsdGlwbGVzIG9mIHdob2xlCisJICogcGFnZXMsIG90aGVyd2lzZSByZXN5bmMgKHdoaWNoIGlzIHZlcnkgUEFHRV9TSVpFIGJhc2VkKSB3aWxsCisJICogZ2V0IGNvbmZ1c2VkLgorCSAqIFNvIGNhbGwgX19iaXRtYXBfc3RhcnRfc3luYyByZXBlYXRlZGx5IChpZiBuZWVkZWQpIHVudGlsCisJICogQXQgbGVhc3QgUEFHRV9TSVpFPj45IGJsb2NrcyBhcmUgY292ZXJlZC4KKwkgKiBSZXR1cm4gdGhlICdvcicgb2YgdGhlIHJlc3VsdC4KKwkgKi8KKwlpbnQgcnYgPSAwOworCWludCBibG9ja3MxOworCisJKmJsb2NrcyA9IDA7CisJd2hpbGUgKCpibG9ja3MgPCAoUEFHRV9TSVpFPj45KSkgeworCQlydiB8PSBfX2JpdG1hcF9zdGFydF9zeW5jKGJpdG1hcCwgb2Zmc2V0LAorCQkJCQkgICZibG9ja3MxLCBkZWdyYWRlZCk7CisJCW9mZnNldCArPSBibG9ja3MxOworCQkqYmxvY2tzICs9IGJsb2NrczE7CisJfQorCXJldHVybiBydjsKK30KKwogdm9pZCBiaXRtYXBfZW5kX3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzLCBpbnQgYWJvcnRlZCkKIHsKIAliaXRtYXBfY291bnRlcl90ICpibWM7CkBAIC0xNDQzLDYgKzE0NzAsOCBAQAogCXdhaXRfZXZlbnQoYml0bWFwLT5tZGRldi0+cmVjb3Zlcnlfd2FpdCwKIAkJICAgYXRvbWljX3JlYWQoJmJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkgPT0gMCk7CiAKKwliaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSBiaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luYzsKKwlzZXRfYml0KE1EX0NIQU5HRV9DTEVBTiwgJmJpdG1hcC0+bWRkZXYtPmZsYWdzKTsKIAlzZWN0b3IgJj0gfigoMVVMTCA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApKSAtIDEpOwogCXMgPSAwOwogCXdoaWxlIChzIDwgc2VjdG9yICYmIHMgPCBiaXRtYXAtPm1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApyZW5hbWUgdG8gZHJpdmVycy9tZC9iaXRtYXAuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oIGIvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCmluZGV4IGQ0NTA5YmUuLjM0NTA5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaAorKysgYi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKQEAgLTUyLDYgKzUyLDE2IEBACiAJYmwtPnRhaWwgPSBiaW87CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaW9fbGlzdF9hZGRfaGVhZChzdHJ1Y3QgYmlvX2xpc3QgKmJsLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmlvLT5iaV9uZXh0ID0gYmwtPmhlYWQ7CisKKwlibC0+aGVhZCA9IGJpbzsKKworCWlmICghYmwtPnRhaWwpCisJCWJsLT50YWlsID0gYmlvOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2xpc3RfbWVyZ2Uoc3RydWN0IGJpb19saXN0ICpibCwgc3RydWN0IGJpb19saXN0ICpibDIpCiB7CiAJaWYgKCFibDItPmhlYWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJpby1yZWNvcmQuaCBiL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCmluZGV4IGQzZWMyMTcuLjNhOGNmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCisrKyBiL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCkBAIC0xNiwzMCArMTYsNTYgQEAKICAqIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgaGVscCB0aGUgdGFyZ2V0IHJlY29yZCBhbmQgcmVzdG9yZSB0aGUKICAqIG9yaWdpbmFsIGJpbyBzdGF0ZS4KICAqLworCitzdHJ1Y3QgZG1fYmlvX3ZlY19kZXRhaWxzIHsKKyNpZiBQQUdFX1NJWkUgPCA2NTUzNgorCV9fdTE2IGJ2X2xlbjsKKwlfX3UxNiBidl9vZmZzZXQ7CisjZWxzZQorCXVuc2lnbmVkIGJ2X2xlbjsKKwl1bnNpZ25lZCBidl9vZmZzZXQ7CisjZW5kaWYKK307CisKIHN0cnVjdCBkbV9iaW9fZGV0YWlscyB7CiAJc2VjdG9yX3QgYmlfc2VjdG9yOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJpX2JkZXY7CiAJdW5zaWduZWQgaW50IGJpX3NpemU7CiAJdW5zaWduZWQgc2hvcnQgYmlfaWR4OwogCXVuc2lnbmVkIGxvbmcgYmlfZmxhZ3M7CisJc3RydWN0IGRtX2Jpb192ZWNfZGV0YWlscyBiaV9pb192ZWNbQklPX01BWF9QQUdFU107CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3JlY29yZChzdHJ1Y3QgZG1fYmlvX2RldGFpbHMgKmJkLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CisJdW5zaWduZWQgaTsKKwogCWJkLT5iaV9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAliZC0+YmlfYmRldiA9IGJpby0+YmlfYmRldjsKIAliZC0+Ymlfc2l6ZSA9IGJpby0+Ymlfc2l6ZTsKIAliZC0+YmlfaWR4ID0gYmlvLT5iaV9pZHg7CiAJYmQtPmJpX2ZsYWdzID0gYmlvLT5iaV9mbGFnczsKKworCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQ7IGkrKykgeworCQliZC0+YmlfaW9fdmVjW2ldLmJ2X2xlbiA9IGJpby0+YmlfaW9fdmVjW2ldLmJ2X2xlbjsKKwkJYmQtPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQgPSBiaW8tPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQ7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jlc3RvcmUoc3RydWN0IGRtX2Jpb19kZXRhaWxzICpiZCwgc3RydWN0IGJpbyAqYmlvKQogeworCXVuc2lnbmVkIGk7CisKIAliaW8tPmJpX3NlY3RvciA9IGJkLT5iaV9zZWN0b3I7CiAJYmlvLT5iaV9iZGV2ID0gYmQtPmJpX2JkZXY7CiAJYmlvLT5iaV9zaXplID0gYmQtPmJpX3NpemU7CiAJYmlvLT5iaV9pZHggPSBiZC0+YmlfaWR4OwogCWJpby0+YmlfZmxhZ3MgPSBiZC0+YmlfZmxhZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmlvLT5iaV92Y250OyBpKyspIHsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfbGVuID0gYmQtPmJpX2lvX3ZlY1tpXS5idl9sZW47CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X29mZnNldCA9IGJkLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0OworCX0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYmZlZmQwNy4uNTMzOTRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMTE1Niw4ICsxMTU2LDcgQEAKIAljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKHRmbSk7CiBiYWRfY2lwaGVyOgogCS8qIE11c3QgemVybyBrZXkgbWF0ZXJpYWwgYmVmb3JlIGZyZWVpbmcgKi8KLQltZW1zZXQoY2MsIDAsIHNpemVvZigqY2MpICsgY2MtPmtleV9zaXplICogc2l6ZW9mKHU4KSk7Ci0Ja2ZyZWUoY2MpOworCWt6ZnJlZShjYyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTExODMsOCArMTE4Miw3IEBACiAJZG1fcHV0X2RldmljZSh0aSwgY2MtPmRldik7CiAKIAkvKiBNdXN0IHplcm8ga2V5IG1hdGVyaWFsIGJlZm9yZSBmcmVlaW5nICovCi0JbWVtc2V0KGNjLCAwLCBzaXplb2YoKmNjKSArIGNjLT5rZXlfc2l6ZSAqIHNpemVvZih1OCkpOwotCWtmcmVlKGNjKTsKKwlremZyZWUoY2MpOwogfQogCiBzdGF0aWMgaW50IGNyeXB0X21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKaW5kZXggZGNjYmZiMC4uYTJlMjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYworKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTE0LDYgKzE1LDI1NyBAQAogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInNuYXBzaG90IGV4Y2VwdGlvbiBzdG9yZXMiCiAKK3N0YXRpYyBMSVNUX0hFQUQoX2V4Y2VwdGlvbl9zdG9yZV90eXBlcyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqX19maW5kX2V4Y2VwdGlvbl9zdG9yZV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eXBlLCAmX2V4Y2VwdGlvbl9zdG9yZV90eXBlcywgbGlzdCkKKwkJaWYgKCFzdHJjbXAobmFtZSwgdHlwZS0+bmFtZSkpCisJCQlyZXR1cm4gdHlwZTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICpfZ2V0X2V4Y2VwdGlvbl9zdG9yZV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCisJc3Bpbl9sb2NrKCZfbG9jayk7CisKKwl0eXBlID0gX19maW5kX2V4Y2VwdGlvbl9zdG9yZV90eXBlKG5hbWUpOworCisJaWYgKHR5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm1vZHVsZSkpCisJCXR5cGUgPSBOVUxMOworCisJc3Bpbl91bmxvY2soJl9sb2NrKTsKKworCXJldHVybiB0eXBlOworfQorCisvKgorICogZ2V0X3R5cGUKKyAqIEB0eXBlX25hbWUKKyAqCisgKiBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBieSBuYW1lLiAgSWYgbm90IGFscmVhZHkKKyAqIGF2YWlsYWJsZSwgYXR0ZW1wdCB0byBsb2FkIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUuCisgKgorICogRXhzdG9yZSBtb2R1bGVzIGFyZSBuYW1lZCAiZG0tZXhzdG9yZS0iIGZvbGxvd2VkIGJ5IHRoZSAndHlwZV9uYW1lJy4KKyAqIE1vZHVsZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgdHlwZXMuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRoZSBtb2R1bGUgImRtLWV4c3RvcmUtPHR5cGVfbmFtZT4iLAorICogdGhlbiB0cnVuY2F0ZSAndHlwZV9uYW1lJyBvbiB0aGUgbGFzdCAnLScgYW5kIHRyeSBhZ2Fpbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgdHlwZV9uYW1lIHdhcyAiY2x1c3RlcmVkLXNoYXJlZCIsIGl0IHdvdWxkIHNlYXJjaAorICogJ2RtLWV4c3RvcmUtY2x1c3RlcmVkLXNoYXJlZCcgdGhlbiAnZG0tZXhzdG9yZS1jbHVzdGVyZWQnLgorICoKKyAqICdkbS1leGNlcHRpb24tc3RvcmUtPHR5cGVfbmFtZT4nIGlzIHRvbyBsb25nIG9mIGEgbmFtZSBpbiBteQorICogb3Bpbmlvbiwgd2hpY2ggaXMgd2h5IEkndmUgY2hvc2VuIHRvIGhhdmUgdGhlIGZpbGVzCisgKiBjb250YWluaW5nIGV4Y2VwdGlvbiBzdG9yZSBpbXBsZW1lbnRhdGlvbnMgYmUgJ2RtLWV4c3RvcmUtPHR5cGVfbmFtZT4nLgorICogSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgYXV0b2xvYWRlZCwgeW91IHdpbGwgZm9sbG93IHRoaXMKKyAqIG5hbWluZyBjb252ZW50aW9uLgorICoKKyAqIFJldHVybnM6IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlKiBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqZ2V0X3R5cGUoY29uc3QgY2hhciAqdHlwZV9uYW1lKQoreworCWNoYXIgKnAsICp0eXBlX25hbWVfZHVwOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKworCXR5cGUgPSBfZ2V0X2V4Y2VwdGlvbl9zdG9yZV90eXBlKHR5cGVfbmFtZSk7CisJaWYgKHR5cGUpCisJCXJldHVybiB0eXBlOworCisJdHlwZV9uYW1lX2R1cCA9IGtzdHJkdXAodHlwZV9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR5cGVfbmFtZV9kdXApIHsKKwkJRE1FUlIoIk5vIG1lbW9yeSBsZWZ0IHRvIGF0dGVtcHQgbG9hZCBmb3IgXCIlc1wiIiwgdHlwZV9uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJd2hpbGUgKHJlcXVlc3RfbW9kdWxlKCJkbS1leHN0b3JlLSVzIiwgdHlwZV9uYW1lX2R1cCkgfHwKKwkgICAgICAgISh0eXBlID0gX2dldF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlX25hbWUpKSkgeworCQlwID0gc3RycmNocih0eXBlX25hbWVfZHVwLCAnLScpOworCQlpZiAoIXApCisJCQlicmVhazsKKwkJcFswXSA9ICdcMCc7CisJfQorCisJaWYgKCF0eXBlKQorCQlETVdBUk4oIk1vZHVsZSBmb3IgZXhzdG9yZSB0eXBlIFwiJXNcIiBub3QgZm91bmQuIiwgdHlwZV9uYW1lKTsKKworCWtmcmVlKHR5cGVfbmFtZV9kdXApOworCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF90eXBlKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSkKK3sKKwlzcGluX2xvY2soJl9sb2NrKTsKKwltb2R1bGVfcHV0KHR5cGUtPm1vZHVsZSk7CisJc3Bpbl91bmxvY2soJl9sb2NrKTsKK30KKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSkKK3sKKwlpbnQgciA9IDA7CisKKwlzcGluX2xvY2soJl9sb2NrKTsKKwlpZiAoIV9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlLT5uYW1lKSkKKwkJbGlzdF9hZGQoJnR5cGUtPmxpc3QsICZfZXhjZXB0aW9uX3N0b3JlX3R5cGVzKTsKKwllbHNlCisJCXIgPSAtRUVYSVNUOworCXNwaW5fdW5sb2NrKCZfbG9jayk7CisKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIpOworCitpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpCit7CisJc3Bpbl9sb2NrKCZfbG9jayk7CisKKwlpZiAoIV9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlLT5uYW1lKSkgeworCQlzcGluX3VubG9jaygmX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaXN0X2RlbCgmdHlwZS0+bGlzdCk7CisKKwlzcGluX3VubG9jaygmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIpOworCisvKgorICogUm91bmQgYSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgJ3NpemUnIGJvdW5kYXJ5LiAgc2l6ZSBtdXN0CisgKiBiZSBhIHBvd2VyIG9mIDIuCisgKi8KK3N0YXRpYyB1bG9uZyByb3VuZF91cCh1bG9uZyBuLCB1bG9uZyBzaXplKQoreworCXNpemUtLTsKKwlyZXR1cm4gKG4gKyBzaXplKSAmIH5zaXplOworfQorCitzdGF0aWMgaW50IHNldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJICBjb25zdCBjaGFyICpjaHVua19zaXplX2FyZywgY2hhciAqKmVycm9yKQoreworCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZzsKKwljaGFyICp2YWx1ZTsKKworCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJCSplcnJvciA9ICJJbnZhbGlkIGNodW5rIHNpemUiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWNodW5rX3NpemVfdWxvbmcpIHsKKwkJc3RvcmUtPmNodW5rX3NpemUgPSBzdG9yZS0+Y2h1bmtfbWFzayA9IHN0b3JlLT5jaHVua19zaGlmdCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQ2h1bmsgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFNpbGVudGx5CisJICogcm91bmQgdXAgaWYgaXQncyBub3QuCisJICovCisJY2h1bmtfc2l6ZV91bG9uZyA9IHJvdW5kX3VwKGNodW5rX3NpemVfdWxvbmcsIFBBR0VfU0laRSA+PiA5KTsKKworCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLworCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfaGFyZHNlY3Rfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgeworCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBkZXZpY2UgYmxvY2tzaXplIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOworCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7CisJc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKworCXJldHVybiAwOworfQorCitpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorCQkJICAgICAgdW5zaWduZWQgKmFyZ3NfdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKipzdG9yZSkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnRtcF9zdG9yZTsKKwljaGFyIHBlcnNpc3RlbnQ7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJdGktPmVycm9yID0gIkluc3VmZmljaWVudCBleGNlcHRpb24gc3RvcmUgYXJndW1lbnRzIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG1wX3N0b3JlID0ga21hbGxvYyhzaXplb2YoKnRtcF9zdG9yZSksIEdGUF9LRVJORUwpOworCWlmICghdG1wX3N0b3JlKSB7CisJCXRpLT5lcnJvciA9ICJFeGNlcHRpb24gc3RvcmUgYWxsb2NhdGlvbiBmYWlsZWQiOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwZXJzaXN0ZW50ID0gdG91cHBlcigqYXJndlsxXSk7CisJaWYgKHBlcnNpc3RlbnQgIT0gJ1AnICYmIHBlcnNpc3RlbnQgIT0gJ04nKSB7CisJCXRpLT5lcnJvciA9ICJQZXJzaXN0ZW50IGZsYWcgaXMgbm90IFAgb3IgTiI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXR5cGUgPSBnZXRfdHlwZShhcmd2WzFdKTsKKwlpZiAoIXR5cGUpIHsKKwkJdGktPmVycm9yID0gIkV4Y2VwdGlvbiBzdG9yZSB0eXBlIG5vdCByZWNvZ25pc2VkIjsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gYmFkX3R5cGU7CisJfQorCisJdG1wX3N0b3JlLT50eXBlID0gdHlwZTsKKwl0bXBfc3RvcmUtPnRpID0gdGk7CisKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgMCwgMCwKKwkJCSAgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLCAmdG1wX3N0b3JlLT5jb3cpOworCWlmIChyKSB7CisJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IENPVyBkZXZpY2UiOworCQlnb3RvIGJhZF9jb3c7CisJfQorCisJciA9IHNldF9jaHVua19zaXplKHRtcF9zdG9yZSwgYXJndlsyXSwgJnRpLT5lcnJvcik7CisJaWYgKHIpCisJCWdvdG8gYmFkX2NvdzsKKworCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiRXhjZXB0aW9uIHN0b3JlIHR5cGUgY29uc3RydWN0b3IgZmFpbGVkIjsKKwkJZ290byBiYWRfY3RyOworCX0KKworCSphcmdzX3VzZWQgPSAzOworCSpzdG9yZSA9IHRtcF9zdG9yZTsKKwlyZXR1cm4gMDsKKworYmFkX2N0cjoKKwlkbV9wdXRfZGV2aWNlKHRpLCB0bXBfc3RvcmUtPmNvdyk7CitiYWRfY293OgorCXB1dF90eXBlKHR5cGUpOworYmFkX3R5cGU6CisJa2ZyZWUodG1wX3N0b3JlKTsKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZSk7CisKK3ZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCit7CisJc3RvcmUtPnR5cGUtPmR0cihzdG9yZSk7CisJZG1fcHV0X2RldmljZShzdG9yZS0+dGksIHN0b3JlLT5jb3cpOworCXB1dF90eXBlKHN0b3JlLT50eXBlKTsKKwlrZnJlZShzdG9yZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KTsKKwogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9pbml0KHZvaWQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAppbmRleCBiYjlmMzNkLi4wYTJlNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKQEAgLTM3LDExICszNywxOCBAQAogICogQWJzdHJhY3Rpb24gdG8gaGFuZGxlIHRoZSBtZXRhL2xheW91dCBvZiBleGNlcHRpb24gc3RvcmVzICh0aGUKICAqIENPVyBkZXZpY2UpLgogICovCi1zdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlIHsKK3N0cnVjdCBkbV9leGNlcHRpb25fc3RvcmU7CitzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCisJaW50ICgqY3RyKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCSAgICB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndik7CisKIAkvKgogCSAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0IHdoZW4geW91J3ZlIGZpbmlzaGVkIHdpdGggaXQuCiAJICovCi0Jdm9pZCAoKmRlc3Ryb3kpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CisJdm9pZCAoKmR0cikgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKIAogCS8qCiAJICogVGhlIHRhcmdldCBzaG91bGRuJ3QgcmVhZCB0aGUgQ09XIGRldmljZSB1bnRpbCB0aGlzIGlzCkBAIC03Miw4ICs3OSw5IEBACiAJICovCiAJdm9pZCAoKmRyb3Bfc25hcHNob3QpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CiAKLQlpbnQgKCpzdGF0dXMpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwgc3RhdHVzX3R5cGVfdCBzdGF0dXMsCi0JCSAgICAgICBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pOworCXVuc2lnbmVkICgqc3RhdHVzKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgICAgc3RhdHVzX3R5cGVfdCBzdGF0dXMsIGNoYXIgKnJlc3VsdCwKKwkJCSAgICB1bnNpZ25lZCBtYXhsZW4pOwogCiAJLyoKIAkgKiBSZXR1cm4gaG93IGZ1bGwgdGhlIHNuYXBzaG90IGlzLgpAQCAtODIsNyArOTAsMjEgQEAKIAkJCSAgICAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLAogCQkJICAgICAgIHNlY3Rvcl90ICpkZW5vbWluYXRvcik7CiAKLQlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CisJLyogRm9yIGludGVybmFsIGRldmljZS1tYXBwZXIgdXNlIG9ubHkuICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSB7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCXN0cnVjdCBkbV90YXJnZXQgKnRpOworCisJc3RydWN0IGRtX2RldiAqY293OworCisJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCisJY2h1bmtfdCBjaHVua19zaXplOworCWNodW5rX3QgY2h1bmtfbWFzazsKKwljaHVua190IGNodW5rX3NoaWZ0OworCiAJdm9pZCAqY29udGV4dDsKIH07CiAKQEAgLTEyOSw2ICsxNTEsMjggQEAKIAogIyAgZW5kaWYKIAorLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgaW4gdGhlIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSBzZWN0b3JfdCBnZXRfZGV2X3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBTRUNUT1JfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2h1bmtfdCBzZWN0b3JfdG9fY2h1bmsoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkJICAgICAgc2VjdG9yX3Qgc2VjdG9yKQoreworCXJldHVybiAoc2VjdG9yICYgfnN0b3JlLT5jaHVua19tYXNrKSA+PiBzdG9yZS0+Y2h1bmtfc2hpZnQ7Cit9CisKK2ludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpOworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKKwkJCSAgICAgIHVuc2lnbmVkICphcmdzX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICoqc3RvcmUpOwordm9pZCBkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CisKIGludCBkbV9leGNlcHRpb25fc3RvcmVfaW5pdCh2b2lkKTsKIHZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQodm9pZCk7CiAKQEAgLTE0MSw4ICsxODUsNCBAQAogaW50IGRtX3RyYW5zaWVudF9zbmFwc2hvdF9pbml0KHZvaWQpOwogdm9pZCBkbV90cmFuc2llbnRfc25hcHNob3RfZXhpdCh2b2lkKTsKIAotaW50IGRtX2NyZWF0ZV9wZXJzaXN0ZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKLQotaW50IGRtX2NyZWF0ZV90cmFuc2llbnQoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOwotCiAjZW5kaWYgLyogX0xJTlVYX0RNX0VYQ0VQVElPTl9TVE9SRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby5jIGIvZHJpdmVycy9tZC9kbS1pby5jCmluZGV4IDM2ZTJiNWUuLmU3M2FhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW8uYworKysgYi9kcml2ZXJzL21kL2RtLWlvLmMKQEAgLTM3MCwxNiArMzcwLDEzIEBACiAJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCi0JCWlmICghYXRvbWljX3JlYWQoJmlvLmNvdW50KSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJaWYgKCFhdG9taWNfcmVhZCgmaW8uY291bnQpKQogCQkJYnJlYWs7CiAKIAkJaW9fc2NoZWR1bGUoKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCWlmIChhdG9taWNfcmVhZCgmaW8uY291bnQpKQotCQlyZXR1cm4gLUVJTlRSOwotCiAJaWYgKGVycm9yX2JpdHMpCiAJCSplcnJvcl9iaXRzID0gaW8uZXJyb3JfYml0czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNzM3OTYxZi4uYmUyMzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC0xNiw0MCArMTYsMjkgQEAKIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJkaXJ0eSByZWdpb24gbG9nIgogCi1zdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGU7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JbG9uZyB1c2U7Ci19OwotCiBzdGF0aWMgTElTVF9IRUFEKF9sb2dfdHlwZXMpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpfX2ZpbmRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKl9fZmluZF9kaXJ0eV9sb2dfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKmxvZ190eXBlOworCXN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqbG9nX3R5cGU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvZ190eXBlLCAmX2xvZ190eXBlcywgbGlzdCkKLQkJaWYgKCFzdHJjbXAobmFtZSwgbG9nX3R5cGUtPnR5cGUtPm5hbWUpKQorCQlpZiAoIXN0cmNtcChuYW1lLCBsb2dfdHlwZS0+bmFtZSkpCiAJCQlyZXR1cm4gbG9nX3R5cGU7CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKl9nZXRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKl9nZXRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmxvZ190eXBlOwogCiAJc3Bpbl9sb2NrKCZfbG9jayk7CiAKIAlsb2dfdHlwZSA9IF9fZmluZF9kaXJ0eV9sb2dfdHlwZShuYW1lKTsKLQlpZiAobG9nX3R5cGUpIHsKLQkJaWYgKCFsb2dfdHlwZS0+dXNlICYmICF0cnlfbW9kdWxlX2dldChsb2dfdHlwZS0+dHlwZS0+bW9kdWxlKSkKLQkJCWxvZ190eXBlID0gTlVMTDsKLQkJZWxzZQotCQkJbG9nX3R5cGUtPnVzZSsrOwotCX0KKwlpZiAobG9nX3R5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KGxvZ190eXBlLT5tb2R1bGUpKQorCQlsb2dfdHlwZSA9IE5VTEw7CiAKIAlzcGluX3VubG9jaygmX2xvY2spOwogCkBAIC03NiwxNCArNjUsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmdldF90eXBlKGNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKIHsKIAljaGFyICpwLCAqdHlwZV9uYW1lX2R1cDsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmxvZ190eXBlOwogCiAJaWYgKCF0eXBlX25hbWUpCiAJCXJldHVybiBOVUxMOwogCiAJbG9nX3R5cGUgPSBfZ2V0X2RpcnR5X2xvZ190eXBlKHR5cGVfbmFtZSk7CiAJaWYgKGxvZ190eXBlKQotCQlyZXR1cm4gbG9nX3R5cGUtPnR5cGU7CisJCXJldHVybiBsb2dfdHlwZTsKIAogCXR5cGVfbmFtZV9kdXAgPSBrc3RyZHVwKHR5cGVfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0eXBlX25hbWVfZHVwKSB7CkBAIC0xMDUsNTYgKzk0LDMzIEBACiAKIAlrZnJlZSh0eXBlX25hbWVfZHVwKTsKIAotCXJldHVybiBsb2dfdHlwZSA/IGxvZ190eXBlLT50eXBlIDogTlVMTDsKKwlyZXR1cm4gbG9nX3R5cGU7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90eXBlKHN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZSkKIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKLQogCWlmICghdHlwZSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZfbG9jayk7Ci0JbG9nX3R5cGUgPSBfX2ZpbmRfZGlydHlfbG9nX3R5cGUodHlwZS0+bmFtZSk7Ci0JaWYgKCFsb2dfdHlwZSkKKwlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIS0tbG9nX3R5cGUtPnVzZSkKLQkJbW9kdWxlX3B1dCh0eXBlLT5tb2R1bGUpOwotCi0JQlVHX09OKGxvZ190eXBlLT51c2UgPCAwKTsKKwltb2R1bGVfcHV0KHR5cGUtPm1vZHVsZSk7CiAKIG91dDoKIAlzcGluX3VubG9jaygmX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqX2FsbG9jX2RpcnR5X2xvZ190eXBlKHN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZSkKLXsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZSA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dfdHlwZSksCi0JCQkJCQkJIEdGUF9LRVJORUwpOwotCi0JaWYgKGxvZ190eXBlKQotCQlsb2dfdHlwZS0+dHlwZSA9IHR5cGU7Ci0KLQlyZXR1cm4gbG9nX3R5cGU7Ci19Ci0KIGludCBkbV9kaXJ0eV9sb2dfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGUgPSBfYWxsb2NfZGlydHlfbG9nX3R5cGUodHlwZSk7CiAJaW50IHIgPSAwOwogCi0JaWYgKCFsb2dfdHlwZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlzcGluX2xvY2soJl9sb2NrKTsKIAlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkKLQkJbGlzdF9hZGQoJmxvZ190eXBlLT5saXN0LCAmX2xvZ190eXBlcyk7Ci0JZWxzZSB7Ci0JCWtmcmVlKGxvZ190eXBlKTsKKwkJbGlzdF9hZGQoJnR5cGUtPmxpc3QsICZfbG9nX3R5cGVzKTsKKwllbHNlCiAJCXIgPSAtRUVYSVNUOwotCX0KIAlzcGluX3VubG9jaygmX2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0xNjMsMjUgKzEyOSwxNiBAQAogCiBpbnQgZG1fZGlydHlfbG9nX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGU7Ci0KIAlzcGluX2xvY2soJl9sb2NrKTsKIAotCWxvZ190eXBlID0gX19maW5kX2RpcnR5X2xvZ190eXBlKHR5cGUtPm5hbWUpOwotCWlmICghbG9nX3R5cGUpIHsKKwlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkgewogCQlzcGluX3VubG9jaygmX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAobG9nX3R5cGUtPnVzZSkgewotCQlzcGluX3VubG9jaygmX2xvY2spOwotCQlyZXR1cm4gLUVUWFRCU1k7Ci0JfQotCi0JbGlzdF9kZWwoJmxvZ190eXBlLT5saXN0KTsKKwlsaXN0X2RlbCgmdHlwZS0+bGlzdCk7CiAKIAlzcGluX3VubG9jaygmX2xvY2spOwotCWtmcmVlKGxvZ190eXBlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMgYi9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYwppbmRleCA5NmVhMjI2Li40MmMwNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYworKysgYi9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYwpAQCAtMTcsOSArMTcsNyBAQAogCiBzdHJ1Y3QgcHNfaW50ZXJuYWwgewogCXN0cnVjdCBwYXRoX3NlbGVjdG9yX3R5cGUgcHN0OwotCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWxvbmcgdXNlOwogfTsKIAogI2RlZmluZSBwc3RfdG9fcHNpKF9fcHN0KSBjb250YWluZXJfb2YoKF9fcHN0KSwgc3RydWN0IHBzX2ludGVybmFsLCBwc3QpCkBAIC00NSwxMiArNDMsOCBAQAogCiAJZG93bl9yZWFkKCZfcHNfbG9jayk7CiAJcHNpID0gX19maW5kX3BhdGhfc2VsZWN0b3JfdHlwZShuYW1lKTsKLQlpZiAocHNpKSB7Ci0JCWlmICgocHNpLT51c2UgPT0gMCkgJiYgIXRyeV9tb2R1bGVfZ2V0KHBzaS0+cHN0Lm1vZHVsZSkpCi0JCQlwc2kgPSBOVUxMOwotCQllbHNlCi0JCQlwc2ktPnVzZSsrOwotCX0KKwlpZiAocHNpICYmICF0cnlfbW9kdWxlX2dldChwc2ktPnBzdC5tb2R1bGUpKQorCQlwc2kgPSBOVUxMOwogCXVwX3JlYWQoJl9wc19sb2NrKTsKIAogCXJldHVybiBwc2k7CkBAIC04NCwxMSArNzgsNyBAQAogCWlmICghcHNpKQogCQlnb3RvIG91dDsKIAotCWlmICgtLXBzaS0+dXNlID09IDApCi0JCW1vZHVsZV9wdXQocHNpLT5wc3QubW9kdWxlKTsKLQotCUJVR19PTihwc2ktPnVzZSA8IDApOwotCisJbW9kdWxlX3B1dChwc2ktPnBzdC5tb2R1bGUpOwogb3V0OgogCXVwX3JlYWQoJl9wc19sb2NrKTsKIH0KQEAgLTEzNiwxMSArMTI2LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHBzaS0+dXNlKSB7Ci0JCXVwX3dyaXRlKCZfcHNfbG9jayk7Ci0JCXJldHVybiAtRVRYVEJTWTsKLQl9Ci0KIAlsaXN0X2RlbCgmcHNpLT5saXN0KTsKIAogCXVwX3dyaXRlKCZfcHNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKaW5kZXggNGQ2YmMxMC4uNTM2ZWYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwpAQCAtMTQ1LDYgKzE0NSw4IEBACiAJc3RydWN0IGRtX2Jpb19kZXRhaWxzIGRldGFpbHM7CiB9OwogCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKl9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZTsKKwogLyoKICAqIEV2ZXJ5IG1pcnJvciBzaG91bGQgbG9vayBsaWtlIHRoaXMgb25lLgogICovCkBAIC01ODYsNiArNTg4LDkgQEAKIAlpbnQgc3RhdGU7CiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBiaW9fbGlzdCBzeW5jLCBub3N5bmMsIHJlY292ZXIsICp0aGlzX2xpc3QgPSBOVUxMOworCXN0cnVjdCBiaW9fbGlzdCByZXF1ZXVlOworCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IGRtX3JoX2RpcnR5X2xvZyhtcy0+cmgpOworCXJlZ2lvbl90IHJlZ2lvbjsKIAogCWlmICghd3JpdGVzLT5oZWFkKQogCQlyZXR1cm47CkBAIC01OTYsMTAgKzYwMSwxOCBAQAogCWJpb19saXN0X2luaXQoJnN5bmMpOwogCWJpb19saXN0X2luaXQoJm5vc3luYyk7CiAJYmlvX2xpc3RfaW5pdCgmcmVjb3Zlcik7CisJYmlvX2xpc3RfaW5pdCgmcmVxdWV1ZSk7CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCh3cml0ZXMpKSkgewotCQlzdGF0ZSA9IGRtX3JoX2dldF9zdGF0ZShtcy0+cmgsCi0JCQkJCWRtX3JoX2Jpb190b19yZWdpb24obXMtPnJoLCBiaW8pLCAxKTsKKwkJcmVnaW9uID0gZG1fcmhfYmlvX3RvX3JlZ2lvbihtcy0+cmgsIGJpbyk7CisKKwkJaWYgKGxvZy0+dHlwZS0+aXNfcmVtb3RlX3JlY292ZXJpbmcgJiYKKwkJICAgIGxvZy0+dHlwZS0+aXNfcmVtb3RlX3JlY292ZXJpbmcobG9nLCByZWdpb24pKSB7CisJCQliaW9fbGlzdF9hZGQoJnJlcXVldWUsIGJpbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0YXRlID0gZG1fcmhfZ2V0X3N0YXRlKG1zLT5yaCwgcmVnaW9uLCAxKTsKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIERNX1JIX0NMRUFOOgogCQljYXNlIERNX1JIX0RJUlRZOgpAQCAtNjE5LDYgKzYzMiwxNiBAQAogCX0KIAogCS8qCisJICogQWRkIGJpb3MgdGhhdCBhcmUgZGVsYXllZCBkdWUgdG8gcmVtb3RlIHJlY292ZXJ5CisJICogYmFjayBvbiB0byB0aGUgd3JpdGUgcXVldWUKKwkgKi8KKwlpZiAodW5saWtlbHkocmVxdWV1ZS5oZWFkKSkgeworCQlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CisJCWJpb19saXN0X21lcmdlKCZtcy0+d3JpdGVzLCAmcmVxdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOworCX0KKworCS8qCiAJICogSW5jcmVtZW50IHRoZSBwZW5kaW5nIGNvdW50cyBmb3IgYW55IHJlZ2lvbnMgdGhhdCB3aWxsCiAJICogYmUgd3JpdHRlbiB0byAod3JpdGVzIHRvIHJlY292ZXIgcmVnaW9ucyBhcmUgZ29pbmcgdG8KIAkgKiBiZSBkZWxheWVkKS4KQEAgLTc2NCw5ICs3ODcsOSBAQAogCWF0b21pY19zZXQoJm1zLT5zdXNwZW5kLCAwKTsKIAlhdG9taWNfc2V0KCZtcy0+ZGVmYXVsdF9taXJyb3IsIERFRkFVTFRfTUlSUk9SKTsKIAotCWxlbiA9IHNpemVvZihzdHJ1Y3QgZG1fcmFpZDFfcmVhZF9yZWNvcmQpOwotCW1zLT5yZWFkX3JlY29yZF9wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKE1JTl9SRUFEX1JFQ09SRFMsCi0JCQkJCQkJICAgbGVuKTsKKwltcy0+cmVhZF9yZWNvcmRfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fUkVBRF9SRUNPUkRTLAorCQkJCQkJX2RtX3JhaWQxX3JlYWRfcmVjb3JkX2NhY2hlKTsKKwogCWlmICghbXMtPnJlYWRfcmVjb3JkX3Bvb2wpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGNyZWF0aW5nIG1pcnJvciByZWFkX3JlY29yZF9wb29sIjsKIAkJa2ZyZWUobXMpOwpAQCAtMTI3OSwxNiArMTMwMiwzMSBAQAogewogCWludCByOwogCi0JciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmbWlycm9yX3RhcmdldCk7Ci0JaWYgKHIgPCAwKQotCQlETUVSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcnJvciB0YXJnZXQiKTsKKwlfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUgPSBLTUVNX0NBQ0hFKGRtX3JhaWQxX3JlYWRfcmVjb3JkLCAwKTsKKwlpZiAoIV9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZSkgeworCQlETUVSUigiQ2FuJ3QgYWxsb2NhdGUgZG1fcmFpZDFfcmVhZF9yZWNvcmQgY2FjaGUiKTsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gYmFkX2NhY2hlOworCX0KIAorCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJm1pcnJvcl90YXJnZXQpOworCWlmIChyIDwgMCkgeworCQlETUVSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcnJvciB0YXJnZXQiKTsKKwkJZ290byBiYWRfdGFyZ2V0OworCX0KKworCXJldHVybiAwOworCitiYWRfdGFyZ2V0OgorCWttZW1fY2FjaGVfZGVzdHJveShfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUpOworYmFkX2NhY2hlOgogCXJldHVybiByOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG1fbWlycm9yX2V4aXQodm9pZCkKIHsKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmbWlycm9yX3RhcmdldCk7CisJa21lbV9jYWNoZV9kZXN0cm95KF9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZSk7CiB9CiAKIC8qIE1vZHVsZSBob29rcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKaW5kZXggOTM2YjM0ZS4uZTc1YzZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1zbmFwLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTg5LDcgKzg4LDcgQEAKICAqIFRoZSB0b3AgbGV2ZWwgc3RydWN0dXJlIGZvciBhIHBlcnNpc3RlbnQgZXhjZXB0aW9uIHN0b3JlLgogICovCiBzdHJ1Y3QgcHN0b3JlIHsKLQlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CS8qIHVwIHBvaW50ZXIgdG8gbXkgc25hcHNob3QgKi8KKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZTsKIAlpbnQgdmVyc2lvbjsKIAlpbnQgdmFsaWQ7CiAJdWludDMyX3QgZXhjZXB0aW9uc19wZXJfYXJlYTsKQEAgLTE0MSw3ICsxNDAsNyBAQAogCWludCByID0gLUVOT01FTTsKIAlzaXplX3QgbGVuOwogCi0JbGVuID0gcHMtPnNuYXAtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUOworCWxlbiA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQ7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBjaHVua19zaXplIGJsb2NrIG9mIG1lbW9yeSB0aGF0IHdpbGwgaG9sZApAQCAtMTYzLDkgKzE2MiwxMiBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX2FyZWEoc3RydWN0IHBzdG9yZSAqcHMpCiB7Ci0JdmZyZWUocHMtPmFyZWEpOworCWlmIChwcy0+YXJlYSkKKwkJdmZyZWUocHMtPmFyZWEpOwogCXBzLT5hcmVhID0gTlVMTDsKLQl2ZnJlZShwcy0+emVyb19hcmVhKTsKKworCWlmIChwcy0+emVyb19hcmVhKQorCQl2ZnJlZShwcy0+emVyb19hcmVhKTsKIAlwcy0+emVyb19hcmVhID0gTlVMTDsKIH0KIApAQCAtMTg5LDkgKzE5MSw5IEBACiBzdGF0aWMgaW50IGNodW5rX2lvKHN0cnVjdCBwc3RvcmUgKnBzLCBjaHVua190IGNodW5rLCBpbnQgcncsIGludCBtZXRhZGF0YSkKIHsKIAlzdHJ1Y3QgZG1faW9fcmVnaW9uIHdoZXJlID0gewotCQkuYmRldiA9IHBzLT5zbmFwLT5jb3ctPmJkZXYsCi0JCS5zZWN0b3IgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAqIGNodW5rLAotCQkuY291bnQgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSwKKwkJLmJkZXYgPSBwcy0+c3RvcmUtPmNvdy0+YmRldiwKKwkJLnNlY3RvciA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSAqIGNodW5rLAorCQkuY291bnQgPSBwcy0+c3RvcmUtPmNodW5rX3NpemUsCiAJfTsKIAlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CiAJCS5iaV9ydyA9IHJ3LApAQCAtMjQ3LDE1ICsyNDksMTUgQEAKIAogc3RhdGljIHZvaWQgemVyb19tZW1vcnlfYXJlYShzdHJ1Y3QgcHN0b3JlICpwcykKIHsKLQltZW1zZXQocHMtPmFyZWEsIDAsIHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CisJbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUKTsKIH0KIAogc3RhdGljIGludCB6ZXJvX2Rpc2tfYXJlYShzdHJ1Y3QgcHN0b3JlICpwcywgY2h1bmtfdCBhcmVhKQogewogCXN0cnVjdCBkbV9pb19yZWdpb24gd2hlcmUgPSB7Ci0JCS5iZGV2ID0gcHMtPnNuYXAtPmNvdy0+YmRldiwKLQkJLnNlY3RvciA9IHBzLT5zbmFwLT5jaHVua19zaXplICogYXJlYV9sb2NhdGlvbihwcywgYXJlYSksCi0JCS5jb3VudCA9IHBzLT5zbmFwLT5jaHVua19zaXplLAorCQkuYmRldiA9IHBzLT5zdG9yZS0+Y293LT5iZGV2LAorCQkuc2VjdG9yID0gcHMtPnN0b3JlLT5jaHVua19zaXplICogYXJlYV9sb2NhdGlvbihwcywgYXJlYSksCisJCS5jb3VudCA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwKIAl9OwogCXN0cnVjdCBkbV9pb19yZXF1ZXN0IGlvX3JlcSA9IHsKIAkJLmJpX3J3ID0gV1JJVEUsCkBAIC0yNzgsMTUgKzI4MCwxNSBAQAogCS8qCiAJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCiAJICovCi0JaWYgKCFwcy0+c25hcC0+Y2h1bmtfc2l6ZSkgewotCQlwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKLQkJICAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShwcy0+c25hcC0+Y293LT5iZGV2KSA+PiA5KTsKLQkJcHMtPnNuYXAtPmNodW5rX21hc2sgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAtIDE7Ci0JCXBzLT5zbmFwLT5jaHVua19zaGlmdCA9IGZmcyhwcy0+c25hcC0+Y2h1bmtfc2l6ZSkgLSAxOworCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CisJCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKKwkJICAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShwcy0+c3RvcmUtPmNvdy0+YmRldikgPj4gOSk7CisJCXBzLT5zdG9yZS0+Y2h1bmtfbWFzayA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSAtIDE7CisJCXBzLT5zdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMocHMtPnN0b3JlLT5jaHVua19zaXplKSAtIDE7CiAJCWNodW5rX3NpemVfc3VwcGxpZWQgPSAwOwogCX0KIAotCXBzLT5pb19jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPgorCXBzLT5pb19jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKHNlY3RvcnNfdG9fcGFnZXMocHMtPnN0b3JlLT4KIAkJCQkJCQkgICAgIGNodW5rX3NpemUpKTsKIAlpZiAoSVNfRVJSKHBzLT5pb19jbGllbnQpKQogCQlyZXR1cm4gUFRSX0VSUihwcy0+aW9fY2xpZW50KTsKQEAgLTMxNywyMiArMzE5LDIyIEBACiAJcHMtPnZlcnNpb24gPSBsZTMyX3RvX2NwdShkaC0+dmVyc2lvbik7CiAJY2h1bmtfc2l6ZSA9IGxlMzJfdG9fY3B1KGRoLT5jaHVua19zaXplKTsKIAotCWlmICghY2h1bmtfc2l6ZV9zdXBwbGllZCB8fCBwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9PSBjaHVua19zaXplKQorCWlmICghY2h1bmtfc2l6ZV9zdXBwbGllZCB8fCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPT0gY2h1bmtfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAlETVdBUk4oImNodW5rIHNpemUgJWxsdSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKIAkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJWxsdS4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHMtPnNuYXAtPmNodW5rX3NpemUpOworCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAkvKiBXZSBoYWQgYSBib2d1cyBjaHVua19zaXplLiBGaXggc3R1ZmYgdXAuICovCiAJZnJlZV9hcmVhKHBzKTsKIAotCXBzLT5zbmFwLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKLQlwcy0+c25hcC0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemUgLSAxOwotCXBzLT5zbmFwLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7CisJcHMtPnN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKKwlwcy0+c3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlwcy0+c3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemUpIC0gMTsKIAotCXIgPSBkbV9pb19jbGllbnRfcmVzaXplKHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPmNodW5rX3NpemUpLAorCXIgPSBkbV9pb19jbGllbnRfcmVzaXplKHNlY3RvcnNfdG9fcGFnZXMocHMtPnN0b3JlLT5jaHVua19zaXplKSwKIAkJCQlwcy0+aW9fY2xpZW50KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0zNDksMTMgKzM1MSwxMyBAQAogewogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7CiAKLQltZW1zZXQocHMtPmFyZWEsIDAsIHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CisJbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUKTsKIAogCWRoID0gKHN0cnVjdCBkaXNrX2hlYWRlciAqKSBwcy0+YXJlYTsKIAlkaC0+bWFnaWMgPSBjcHVfdG9fbGUzMihTTkFQX01BR0lDKTsKIAlkaC0+dmFsaWQgPSBjcHVfdG9fbGUzMihwcy0+dmFsaWQpOwogCWRoLT52ZXJzaW9uID0gY3B1X3RvX2xlMzIocHMtPnZlcnNpb24pOwotCWRoLT5jaHVua19zaXplID0gY3B1X3RvX2xlMzIocHMtPnNuYXAtPmNodW5rX3NpemUpOworCWRoLT5jaHVua19zaXplID0gY3B1X3RvX2xlMzIocHMtPnN0b3JlLT5jaHVua19zaXplKTsKIAogCXJldHVybiBjaHVua19pbyhwcywgMCwgV1JJVEUsIDEpOwogfQpAQCAtNDc0LDE4ICs0NzYsMjUgQEAKIHN0YXRpYyB2b2lkIHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCQkgICAgIHNlY3Rvcl90ICpudW1lcmF0b3IsIHNlY3Rvcl90ICpkZW5vbWluYXRvcikKIHsKLQkqbnVtZXJhdG9yID0gZ2V0X2luZm8oc3RvcmUpLT5uZXh0X2ZyZWUgKiBzdG9yZS0+c25hcC0+Y2h1bmtfc2l6ZTsKLQkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPnNuYXAtPmNvdy0+YmRldik7CisJKm51bWVyYXRvciA9IGdldF9pbmZvKHN0b3JlKS0+bmV4dF9mcmVlICogc3RvcmUtPmNodW5rX3NpemU7CisJKmRlbm9taW5hdG9yID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJzaXN0ZW50X2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCitzdGF0aWMgdm9pZCBwZXJzaXN0ZW50X2R0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKIHsKIAlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHBzLT5tZXRhZGF0YV93cSk7Ci0JZG1faW9fY2xpZW50X2Rlc3Ryb3kocHMtPmlvX2NsaWVudCk7Ci0JdmZyZWUocHMtPmNhbGxiYWNrcyk7CisKKwkvKiBDcmVhdGVkIGluIHJlYWRfaGVhZGVyICovCisJaWYgKHBzLT5pb19jbGllbnQpCisJCWRtX2lvX2NsaWVudF9kZXN0cm95KHBzLT5pb19jbGllbnQpOwogCWZyZWVfYXJlYShwcyk7CisKKwkvKiBBbGxvY2F0ZWQgaW4gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhICovCisJaWYgKHBzLT5jYWxsYmFja3MpCisJCXZmcmVlKHBzLT5jYWxsYmFja3MpOworCiAJa2ZyZWUocHMpOwogfQogCkBAIC01MDcsNyArNTE2LDcgQEAKIAkvKgogCSAqIE5vdyB3ZSBrbm93IGNvcnJlY3QgY2h1bmtfc2l6ZSwgY29tcGxldGUgdGhlIGluaXRpYWxpc2F0aW9uLgogCSAqLwotCXBzLT5leGNlcHRpb25zX3Blcl9hcmVhID0gKHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCkgLworCXBzLT5leGNlcHRpb25zX3Blcl9hcmVhID0gKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpIC8KIAkJCQkgIHNpemVvZihzdHJ1Y3QgZGlza19leGNlcHRpb24pOwogCXBzLT5jYWxsYmFja3MgPSBkbV92Y2FsbG9jKHBzLT5leGNlcHRpb25zX3Blcl9hcmVhLAogCQkJc2l6ZW9mKCpwcy0+Y2FsbGJhY2tzKSk7CkBAIC01NjQsMTAgKzU3MywxMCBAQAogCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOwogCXVpbnQzMl90IHN0cmlkZTsKIAljaHVua190IG5leHRfZnJlZTsKLQlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5zbmFwLT5jb3ctPmJkZXYpOworCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiAKIAkvKiBJcyB0aGVyZSBlbm91Z2ggcm9vbSA/ICovCi0JaWYgKHNpemUgPCAoKHBzLT5uZXh0X2ZyZWUgKyAxKSAqIHN0b3JlLT5zbmFwLT5jaHVua19zaXplKSkKKwlpZiAoc2l6ZSA8ICgocHMtPm5leHRfZnJlZSArIDEpICogc3RvcmUtPmNodW5rX3NpemUpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWUtPm5ld19jaHVuayA9IHBzLT5uZXh0X2ZyZWU7CkBAIC02NTYsMTYgKzY2NSwxNyBAQAogCQlETVdBUk4oIndyaXRlIGhlYWRlciBmYWlsZWQiKTsKIH0KIAotaW50IGRtX2NyZWF0ZV9wZXJzaXN0ZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQorc3RhdGljIGludCBwZXJzaXN0ZW50X2N0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCSAgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IHBzdG9yZSAqcHM7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgcHN0b3JlICovCi0JcHMgPSBrbWFsbG9jKHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTsKKwlwcyA9IGt6YWxsb2Moc2l6ZW9mKCpwcyksIEdGUF9LRVJORUwpOwogCWlmICghcHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHMtPnNuYXAgPSBzdG9yZS0+c25hcDsKKwlwcy0+c3RvcmUgPSBzdG9yZTsKIAlwcy0+dmFsaWQgPSAxOwogCXBzLT52ZXJzaW9uID0gU05BUFNIT1RfRElTS19WRVJTSU9OOwogCXBzLT5hcmVhID0gTlVMTDsKQEAgLTY4MywyMiArNjkzLDc3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXN0b3JlLT5kZXN0cm95ID0gcGVyc2lzdGVudF9kZXN0cm95OwotCXN0b3JlLT5yZWFkX21ldGFkYXRhID0gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhOwotCXN0b3JlLT5wcmVwYXJlX2V4Y2VwdGlvbiA9IHBlcnNpc3RlbnRfcHJlcGFyZV9leGNlcHRpb247Ci0Jc3RvcmUtPmNvbW1pdF9leGNlcHRpb24gPSBwZXJzaXN0ZW50X2NvbW1pdF9leGNlcHRpb247Ci0Jc3RvcmUtPmRyb3Bfc25hcHNob3QgPSBwZXJzaXN0ZW50X2Ryb3Bfc25hcHNob3Q7Ci0Jc3RvcmUtPmZyYWN0aW9uX2Z1bGwgPSBwZXJzaXN0ZW50X2ZyYWN0aW9uX2Z1bGw7CiAJc3RvcmUtPmNvbnRleHQgPSBwczsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgcGVyc2lzdGVudF9zdGF0dXMoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkJICBzdGF0dXNfdHlwZV90IHN0YXR1cywgY2hhciAqcmVzdWx0LAorCQkJCSAgdW5zaWduZWQgbWF4bGVuKQoreworCXVuc2lnbmVkIHN6ID0gMDsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBTVEFUVVNUWVBFX0lORk86CisJCWJyZWFrOworCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKKwkJRE1FTUlUKCIgJXMgUCAlbGx1Iiwgc3RvcmUtPmNvdy0+bmFtZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RvcmUtPmNodW5rX3NpemUpOworCX0KKworCXJldHVybiBzejsKK30KKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfcGVyc2lzdGVudF90eXBlID0geworCS5uYW1lID0gInBlcnNpc3RlbnQiLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuY3RyID0gcGVyc2lzdGVudF9jdHIsCisJLmR0ciA9IHBlcnNpc3RlbnRfZHRyLAorCS5yZWFkX21ldGFkYXRhID0gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhLAorCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHBlcnNpc3RlbnRfcHJlcGFyZV9leGNlcHRpb24sCisJLmNvbW1pdF9leGNlcHRpb24gPSBwZXJzaXN0ZW50X2NvbW1pdF9leGNlcHRpb24sCisJLmRyb3Bfc25hcHNob3QgPSBwZXJzaXN0ZW50X2Ryb3Bfc25hcHNob3QsCisJLmZyYWN0aW9uX2Z1bGwgPSBwZXJzaXN0ZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnN0YXR1cyA9IHBlcnNpc3RlbnRfc3RhdHVzLAorfTsKKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfcGVyc2lzdGVudF9jb21wYXRfdHlwZSA9IHsKKwkubmFtZSA9ICJQIiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmN0ciA9IHBlcnNpc3RlbnRfY3RyLAorCS5kdHIgPSBwZXJzaXN0ZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSwKKwkucHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uLAorCS5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uLAorCS5kcm9wX3NuYXBzaG90ID0gcGVyc2lzdGVudF9kcm9wX3NuYXBzaG90LAorCS5mcmFjdGlvbl9mdWxsID0gcGVyc2lzdGVudF9mcmFjdGlvbl9mdWxsLAorCS5zdGF0dXMgPSBwZXJzaXN0ZW50X3N0YXR1cywKK307CisKIGludCBkbV9wZXJzaXN0ZW50X3NuYXBzaG90X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gMDsKKwlpbnQgcjsKKworCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcigmX3BlcnNpc3RlbnRfdHlwZSk7CisJaWYgKHIpIHsKKwkJRE1FUlIoIlVuYWJsZSB0byByZWdpc3RlciBwZXJzaXN0ZW50IGV4Y2VwdGlvbiBzdG9yZSB0eXBlIik7CisJCXJldHVybiByOworCX0KKworCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcigmX3BlcnNpc3RlbnRfY29tcGF0X3R5cGUpOworCWlmIChyKSB7CisJCURNRVJSKCJVbmFibGUgdG8gcmVnaXN0ZXIgb2xkLXN0eWxlIHBlcnNpc3RlbnQgZXhjZXB0aW9uICIKKwkJICAgICAgInN0b3JlIHR5cGUiKTsKKwkJZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcigmX3BlcnNpc3RlbnRfdHlwZSk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiByOwogfQogCiB2b2lkIGRtX3BlcnNpc3RlbnRfc25hcHNob3RfZXhpdCh2b2lkKQogeworCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl9wZXJzaXN0ZW50X3R5cGUpOworCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl9wZXJzaXN0ZW50X2NvbXBhdF90eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYwppbmRleCA3ZjZlMmU2Li5jZGU1YWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtdHJhbnNpZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXRyYW5zaWVudC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1zbmFwLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTIzLDcgKzIyLDcgQEAKIAlzZWN0b3JfdCBuZXh0X2ZyZWU7CiB9OwogCi1zdGF0aWMgdm9pZCB0cmFuc2llbnRfZGVzdHJveShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKK3N0YXRpYyB2b2lkIHRyYW5zaWVudF9kdHIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCiB7CiAJa2ZyZWUoc3RvcmUtPmNvbnRleHQpOwogfQpAQCAtMzksMTQgKzM4LDE0IEBACiBzdGF0aWMgaW50IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCQkgICAgICAgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKQogewotCXN0cnVjdCB0cmFuc2llbnRfYyAqdGMgPSAoc3RydWN0IHRyYW5zaWVudF9jICopIHN0b3JlLT5jb250ZXh0OwotCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPnNuYXAtPmNvdy0+YmRldik7CisJc3RydWN0IHRyYW5zaWVudF9jICp0YyA9IHN0b3JlLT5jb250ZXh0OworCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiAKLQlpZiAoc2l6ZSA8ICh0Yy0+bmV4dF9mcmVlICsgc3RvcmUtPnNuYXAtPmNodW5rX3NpemUpKQorCWlmIChzaXplIDwgKHRjLT5uZXh0X2ZyZWUgKyBzdG9yZS0+Y2h1bmtfc2l6ZSkpCiAJCXJldHVybiAtMTsKIAotCWUtPm5ld19jaHVuayA9IHNlY3Rvcl90b19jaHVuayhzdG9yZS0+c25hcCwgdGMtPm5leHRfZnJlZSk7Ci0JdGMtPm5leHRfZnJlZSArPSBzdG9yZS0+c25hcC0+Y2h1bmtfc2l6ZTsKKwllLT5uZXdfY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc3RvcmUsIHRjLT5uZXh0X2ZyZWUpOworCXRjLT5uZXh0X2ZyZWUgKz0gc3RvcmUtPmNodW5rX3NpemU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0LDIwICs2MywxNCBAQAogCQkJCSAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLCBzZWN0b3JfdCAqZGVub21pbmF0b3IpCiB7CiAJKm51bWVyYXRvciA9ICgoc3RydWN0IHRyYW5zaWVudF9jICopIHN0b3JlLT5jb250ZXh0KS0+bmV4dF9mcmVlOwotCSpkZW5vbWluYXRvciA9IGdldF9kZXZfc2l6ZShzdG9yZS0+c25hcC0+Y293LT5iZGV2KTsKKwkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiB9CiAKLWludCBkbV9jcmVhdGVfdHJhbnNpZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQorc3RhdGljIGludCB0cmFuc2llbnRfY3RyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0cmFuc2llbnRfYyAqdGM7CiAKLQlzdG9yZS0+ZGVzdHJveSA9IHRyYW5zaWVudF9kZXN0cm95OwotCXN0b3JlLT5yZWFkX21ldGFkYXRhID0gdHJhbnNpZW50X3JlYWRfbWV0YWRhdGE7Ci0Jc3RvcmUtPnByZXBhcmVfZXhjZXB0aW9uID0gdHJhbnNpZW50X3ByZXBhcmVfZXhjZXB0aW9uOwotCXN0b3JlLT5jb21taXRfZXhjZXB0aW9uID0gdHJhbnNpZW50X2NvbW1pdF9leGNlcHRpb247Ci0Jc3RvcmUtPmRyb3Bfc25hcHNob3QgPSBOVUxMOwotCXN0b3JlLT5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGw7Ci0KIAl0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFuc2llbnRfYyksIEdGUF9LRVJORUwpOwogCWlmICghdGMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODgsMTEgKzgxLDcwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCB0cmFuc2llbnRfc3RhdHVzKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCSBzdGF0dXNfdHlwZV90IHN0YXR1cywgY2hhciAqcmVzdWx0LAorCQkJCSB1bnNpZ25lZCBtYXhsZW4pCit7CisJdW5zaWduZWQgc3ogPSAwOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRVU1RZUEVfSU5GTzoKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgorCQlETUVNSVQoIiAlcyBOICVsbHUiLCBzdG9yZS0+Y293LT5uYW1lLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9yZS0+Y2h1bmtfc2l6ZSk7CisJfQorCisJcmV0dXJuIHN6OworfQorCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlIF90cmFuc2llbnRfdHlwZSA9IHsKKwkubmFtZSA9ICJ0cmFuc2llbnQiLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuY3RyID0gdHJhbnNpZW50X2N0ciwKKwkuZHRyID0gdHJhbnNpZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHRyYW5zaWVudF9yZWFkX21ldGFkYXRhLAorCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbiwKKwkuY29tbWl0X2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uLAorCS5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnN0YXR1cyA9IHRyYW5zaWVudF9zdGF0dXMsCit9OworCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlIF90cmFuc2llbnRfY29tcGF0X3R5cGUgPSB7CisJLm5hbWUgPSAiTiIsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5jdHIgPSB0cmFuc2llbnRfY3RyLAorCS5kdHIgPSB0cmFuc2llbnRfZHRyLAorCS5yZWFkX21ldGFkYXRhID0gdHJhbnNpZW50X3JlYWRfbWV0YWRhdGEsCisJLnByZXBhcmVfZXhjZXB0aW9uID0gdHJhbnNpZW50X3ByZXBhcmVfZXhjZXB0aW9uLAorCS5jb21taXRfZXhjZXB0aW9uID0gdHJhbnNpZW50X2NvbW1pdF9leGNlcHRpb24sCisJLmZyYWN0aW9uX2Z1bGwgPSB0cmFuc2llbnRfZnJhY3Rpb25fZnVsbCwKKwkuc3RhdHVzID0gdHJhbnNpZW50X3N0YXR1cywKK307CisKIGludCBkbV90cmFuc2llbnRfc25hcHNob3RfaW5pdCh2b2lkKQogewotCXJldHVybiAwOworCWludCByOworCisJciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKCZfdHJhbnNpZW50X3R5cGUpOworCWlmIChyKSB7CisJCURNV0FSTigiVW5hYmxlIHRvIHJlZ2lzdGVyIHRyYW5zaWVudCBleGNlcHRpb24gc3RvcmUgdHlwZSIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoJl90cmFuc2llbnRfY29tcGF0X3R5cGUpOworCWlmIChyKSB7CisJCURNV0FSTigiVW5hYmxlIHRvIHJlZ2lzdGVyIG9sZC1zdHlsZSB0cmFuc2llbnQgIgorCQkgICAgICAgImV4Y2VwdGlvbiBzdG9yZSB0eXBlIik7CisJCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl90cmFuc2llbnRfdHlwZSk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiByOwogfQogCiB2b2lkIGRtX3RyYW5zaWVudF9zbmFwc2hvdF9leGl0KHZvaWQpCiB7CisJZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcigmX3RyYW5zaWVudF90eXBlKTsKKwlkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKCZfdHJhbnNpZW50X2NvbXBhdF90eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNjVmZjgyZi4uOTgxYTA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTcsNyArNyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTIwLDkgKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWtjb3B5ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCi0jaW5jbHVkZSAiZG0tc25hcC5oIgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAic25hcHNob3RzIgpAQCAtNDcsOSArNDYsNzYgQEAKICAqLwogI2RlZmluZSBNSU5fSU9TIDI1NgogCisjZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFCTE2CisjZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSCh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpICYgXAorCQkJCQkgKERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFIC0gMSkpCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGUgeworCXVpbnQzMl90IGhhc2hfbWFzazsKKwl1bnNpZ25lZCBoYXNoX3NoaWZ0OworCXN0cnVjdCBsaXN0X2hlYWQgKnRhYmxlOworfTsKKworc3RydWN0IGRtX3NuYXBzaG90IHsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7CisKKwlzdHJ1Y3QgZG1fZGV2ICpvcmlnaW47CisKKwkvKiBMaXN0IG9mIHNuYXBzaG90cyBwZXIgT3JpZ2luICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogWW91IGNhbid0IHVzZSBhIHNuYXBzaG90IGlmIHRoaXMgaXMgMCAoZS5nLiBpZiBmdWxsKSAqLworCWludCB2YWxpZDsKKworCS8qIE9yaWdpbiB3cml0ZXMgZG9uJ3QgdHJpZ2dlciBleGNlcHRpb25zIHVudGlsIHRoaXMgaXMgc2V0ICovCisJaW50IGFjdGl2ZTsKKworCW1lbXBvb2xfdCAqcGVuZGluZ19wb29sOworCisJYXRvbWljX3QgcGVuZGluZ19leGNlcHRpb25zX2NvdW50OworCisJc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBwZW5kaW5nOworCXN0cnVjdCBleGNlcHRpb25fdGFibGUgY29tcGxldGU7CisKKwkvKgorCSAqIHBlX2xvY2sgcHJvdGVjdHMgYWxsIHBlbmRpbmdfZXhjZXB0aW9uIG9wZXJhdGlvbnMgYW5kIGFjY2VzcworCSAqIGFzIHdlbGwgYXMgdGhlIHNuYXBzaG90X2Jpb3MgbGlzdC4KKwkgKi8KKwlzcGlubG9ja190IHBlX2xvY2s7CisKKwkvKiBUaGUgb24gZGlzayBtZXRhZGF0YSBoYW5kbGVyICovCisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7CisKKwlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqa2NvcHlkX2NsaWVudDsKKworCS8qIFF1ZXVlIG9mIHNuYXBzaG90IHdyaXRlcyBmb3Iga3NuYXBkIHRvIGZsdXNoICovCisJc3RydWN0IGJpb19saXN0IHF1ZXVlZF9iaW9zOworCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZWRfYmlvc193b3JrOworCisJLyogQ2h1bmtzIHdpdGggb3V0c3RhbmRpbmcgcmVhZHMgKi8KKwltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKKwlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOworfTsKKwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc25hcGQ7CiBzdGF0aWMgdm9pZCBmbHVzaF9xdWV1ZWRfYmlvcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCitzdGF0aWMgc2VjdG9yX3QgY2h1bmtfdG9fc2VjdG9yKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCWNodW5rX3QgY2h1bmspCit7CisJcmV0dXJuIGNodW5rIDw8IHN0b3JlLT5jaHVua19zaGlmdDsKK30KKworc3RhdGljIGludCBiZGV2X2VxdWFsKHN0cnVjdCBibG9ja19kZXZpY2UgKmxocywgc3RydWN0IGJsb2NrX2RldmljZSAqcmhzKQoreworCS8qCisJICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgYmxvY2sKKwkgKiBkZXZpY2Ugc28gd2UgY2FuIGNvbXBhcmUgcG9pbnRlcnMgc2FmZWx5LgorCSAqLworCXJldHVybiBsaHMgPT0gcmhzOworfQorCiBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiB7CiAJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uIGU7CiAKQEAgLTQ3NiwxMSArNTQyLDExIEBACiAJICogQ2FsY3VsYXRlIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBvcmlnaW5hbCB2b2x1bWUgb3IKIAkgKiB0aGUgQ09XIHZvbHVtZS4uLgogCSAqLwotCWNvd19kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5jb3ctPmJkZXYpOworCWNvd19kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5zdG9yZS0+Y293LT5iZGV2KTsKIAlvcmlnaW5fZGV2X3NpemUgPSBnZXRfZGV2X3NpemUocy0+b3JpZ2luLT5iZGV2KTsKIAltYXhfYnVja2V0cyA9IGNhbGNfbWF4X2J1Y2tldHMoKTsKIAotCWhhc2hfc2l6ZSA9IG1pbihvcmlnaW5fZGV2X3NpemUsIGNvd19kZXZfc2l6ZSkgPj4gcy0+Y2h1bmtfc2hpZnQ7CisJaGFzaF9zaXplID0gbWluKG9yaWdpbl9kZXZfc2l6ZSwgY293X2Rldl9zaXplKSA+PiBzLT5zdG9yZS0+Y2h1bmtfc2hpZnQ7CiAJaGFzaF9zaXplID0gbWluKGhhc2hfc2l6ZSwgbWF4X2J1Y2tldHMpOwogCiAJaGFzaF9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oaGFzaF9zaXplKTsKQEAgLTUwNSw1OCArNTcxLDYgQEAKIH0KIAogLyoKLSAqIFJvdW5kIGEgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0ICdzaXplJyBib3VuZGFyeS4gIHNpemUgbXVzdAotICogYmUgYSBwb3dlciBvZiAyLgotICovCi1zdGF0aWMgdWxvbmcgcm91bmRfdXAodWxvbmcgbiwgdWxvbmcgc2l6ZSkKLXsKLQlzaXplLS07Ci0JcmV0dXJuIChuICsgc2l6ZSkgJiB+c2l6ZTsKLX0KLQotc3RhdGljIGludCBzZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLAotCQkJICBjaGFyICoqZXJyb3IpCi17Ci0JdW5zaWduZWQgbG9uZyBjaHVua19zaXplOwotCWNoYXIgKnZhbHVlOwotCi0JY2h1bmtfc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKGNodW5rX3NpemVfYXJnLCAmdmFsdWUsIDEwKTsKLQlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcpIHsKLQkJKmVycm9yID0gIkludmFsaWQgY2h1bmsgc2l6ZSI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY2h1bmtfc2l6ZSkgewotCQlzLT5jaHVua19zaXplID0gcy0+Y2h1bmtfbWFzayA9IHMtPmNodW5rX3NoaWZ0ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplID0gcm91bmRfdXAoY2h1bmtfc2l6ZSwgUEFHRV9TSVpFID4+IDkpOwotCi0JLyogQ2hlY2sgY2h1bmtfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZSkpIHsKLQkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFZhbGlkYXRlIHRoZSBjaHVuayBzaXplIGFnYWluc3QgdGhlIGRldmljZSBibG9jayBzaXplICovCi0JaWYgKGNodW5rX3NpemUgJSAoYmRldl9oYXJkc2VjdF9zaXplKHMtPmNvdy0+YmRldikgPj4gOSkpIHsKLQkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXMtPmNodW5rX3NpemUgPSBjaHVua19zaXplOwotCXMtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKLQlzLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIENvbnN0cnVjdCBhIHNuYXBzaG90IG1hcHBpbmc6IDxvcmlnaW5fZGV2PiA8Q09XLWRldj4gPHAvbj4gPGNodW5rLXNpemU+CiAgKi8KIHN0YXRpYyBpbnQgc25hcHNob3RfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC01NjQsOTEgKzU3OCw2OCBAQAogCXN0cnVjdCBkbV9zbmFwc2hvdCAqczsKIAlpbnQgaTsKIAlpbnQgciA9IC1FSU5WQUw7Ci0JY2hhciBwZXJzaXN0ZW50OwogCWNoYXIgKm9yaWdpbl9wYXRoOwotCWNoYXIgKmNvd19wYXRoOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlOworCXVuc2lnbmVkIGFyZ3NfdXNlZDsKIAogCWlmIChhcmdjICE9IDQpIHsKIAkJdGktPmVycm9yID0gInJlcXVpcmVzIGV4YWN0bHkgNCBhcmd1bWVudHMiOwogCQlyID0gLUVJTlZBTDsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9hcmdzOwogCX0KIAogCW9yaWdpbl9wYXRoID0gYXJndlswXTsKLQljb3dfcGF0aCA9IGFyZ3ZbMV07Ci0JcGVyc2lzdGVudCA9IHRvdXBwZXIoKmFyZ3ZbMl0pOworCWFyZ3YrKzsKKwlhcmdjLS07CiAKLQlpZiAocGVyc2lzdGVudCAhPSAnUCcgJiYgcGVyc2lzdGVudCAhPSAnTicpIHsKLQkJdGktPmVycm9yID0gIlBlcnNpc3RlbnQgZmxhZyBpcyBub3QgUCBvciBOIjsKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZSh0aSwgYXJnYywgYXJndiwgJmFyZ3NfdXNlZCwgJnN0b3JlKTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3QgY3JlYXRlIGV4Y2VwdGlvbiBzdG9yZSI7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDE7CisJCWdvdG8gYmFkX2FyZ3M7CiAJfQogCisJYXJndiArPSBhcmdzX3VzZWQ7CisJYXJnYyAtPSBhcmdzX3VzZWQ7CisKIAlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKSB7CisJaWYgKCFzKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgYWxsb2NhdGUgc25hcHNob3QgY29udGV4dCBwcml2YXRlICIKIAkJICAgICJzdHJ1Y3R1cmUiOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9zbmFwOwogCX0KIAogCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBvcmlnaW5fcGF0aCwgMCwgdGktPmxlbiwgRk1PREVfUkVBRCwgJnMtPm9yaWdpbik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgb3JpZ2luIGRldmljZSI7Ci0JCWdvdG8gYmFkMjsKKwkJZ290byBiYWRfb3JpZ2luOwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBjb3dfcGF0aCwgMCwgMCwKLQkJCSAgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLCAmcy0+Y293KTsKLQlpZiAocikgewotCQlkbV9wdXRfZGV2aWNlKHRpLCBzLT5vcmlnaW4pOwotCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGdldCBDT1cgZGV2aWNlIjsKLQkJZ290byBiYWQyOwotCX0KLQotCXIgPSBzZXRfY2h1bmtfc2l6ZShzLCBhcmd2WzNdLCAmdGktPmVycm9yKTsKLQlpZiAocikKLQkJZ290byBiYWQzOwotCi0Jcy0+dHlwZSA9IHBlcnNpc3RlbnQ7Ci0KKwlzLT5zdG9yZSA9IHN0b3JlOwogCXMtPnZhbGlkID0gMTsKIAlzLT5hY3RpdmUgPSAwOwogCWF0b21pY19zZXQoJnMtPnBlbmRpbmdfZXhjZXB0aW9uc19jb3VudCwgMCk7CiAJaW5pdF9yd3NlbSgmcy0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPnBlX2xvY2spOwotCXMtPnRpID0gdGk7CiAKIAkvKiBBbGxvY2F0ZSBoYXNoIHRhYmxlIGZvciBDT1cgZGF0YSAqLwogCWlmIChpbml0X2hhc2hfdGFibGVzKHMpKSB7CiAJCXRpLT5lcnJvciA9ICJVbmFibGUgdG8gYWxsb2NhdGUgaGFzaCB0YWJsZSBzcGFjZSI7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGJhZDM7Ci0JfQotCi0Jcy0+c3RvcmUuc25hcCA9IHM7Ci0KLQlpZiAocGVyc2lzdGVudCA9PSAnUCcpCi0JCXIgPSBkbV9jcmVhdGVfcGVyc2lzdGVudCgmcy0+c3RvcmUpOwotCWVsc2UKLQkJciA9IGRtX2NyZWF0ZV90cmFuc2llbnQoJnMtPnN0b3JlKTsKLQotCWlmIChyKSB7Ci0JCXRpLT5lcnJvciA9ICJDb3VsZG4ndCBjcmVhdGUgZXhjZXB0aW9uIHN0b3JlIjsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkNDsKKwkJZ290byBiYWRfaGFzaF90YWJsZXM7CiAJfQogCiAJciA9IGRtX2tjb3B5ZF9jbGllbnRfY3JlYXRlKFNOQVBTSE9UX1BBR0VTLCAmcy0+a2NvcHlkX2NsaWVudCk7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNvdWxkIG5vdCBjcmVhdGUga2NvcHlkIGNsaWVudCI7Ci0JCWdvdG8gYmFkNTsKKwkJZ290byBiYWRfa2NvcHlkOwogCX0KIAogCXMtPnBlbmRpbmdfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBwZW5kaW5nX2NhY2hlKTsKIAlpZiAoIXMtPnBlbmRpbmdfcG9vbCkgewogCQl0aS0+ZXJyb3IgPSAiQ291bGQgbm90IGFsbG9jYXRlIG1lbXBvb2wgZm9yIHBlbmRpbmcgZXhjZXB0aW9ucyI7Ci0JCWdvdG8gYmFkNjsKKwkJZ290byBiYWRfcGVuZGluZ19wb29sOwogCX0KIAogCXMtPnRyYWNrZWRfY2h1bmtfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLApAQCAtNjY1LDcgKzY1Niw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJnMtPnRyYWNrZWRfY2h1bmtfbG9jayk7CiAKIAkvKiBNZXRhZGF0YSBtdXN0IG9ubHkgYmUgbG9hZGVkIGludG8gb25lIHRhYmxlIGF0IG9uY2UgKi8KLQlyID0gcy0+c3RvcmUucmVhZF9tZXRhZGF0YSgmcy0+c3RvcmUsIGRtX2FkZF9leGNlcHRpb24sICh2b2lkICopcyk7CisJciA9IHMtPnN0b3JlLT50eXBlLT5yZWFkX21ldGFkYXRhKHMtPnN0b3JlLCBkbV9hZGRfZXhjZXB0aW9uLAorCQkJCQkgICh2b2lkICopcyk7CiAJaWYgKHIgPCAwKSB7CiAJCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gcmVhZCBzbmFwc2hvdCBtZXRhZGF0YSI7CiAJCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOwpAQCAtNjg2LDM0ICs2NzgsMzMgQEAKIAl9CiAKIAl0aS0+cHJpdmF0ZSA9IHM7Ci0JdGktPnNwbGl0X2lvID0gcy0+Y2h1bmtfc2l6ZTsKKwl0aS0+c3BsaXRfaW8gPSBzLT5zdG9yZS0+Y2h1bmtfc2l6ZTsKIAogCXJldHVybiAwOwogCi0gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOgorYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOgogCW1lbXBvb2xfZGVzdHJveShzLT50cmFja2VkX2NodW5rX3Bvb2wpOwogCi0gYmFkX3RyYWNrZWRfY2h1bmtfcG9vbDoKK2JhZF90cmFja2VkX2NodW5rX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KHMtPnBlbmRpbmdfcG9vbCk7CiAKLSBiYWQ2OgorYmFkX3BlbmRpbmdfcG9vbDoKIAlkbV9rY29weWRfY2xpZW50X2Rlc3Ryb3kocy0+a2NvcHlkX2NsaWVudCk7CiAKLSBiYWQ1OgotCXMtPnN0b3JlLmRlc3Ryb3koJnMtPnN0b3JlKTsKLQotIGJhZDQ6CitiYWRfa2NvcHlkOgogCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5wZW5kaW5nLCBwZW5kaW5nX2NhY2hlKTsKIAlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7CiAKLSBiYWQzOgotCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CitiYWRfaGFzaF90YWJsZXM6CiAJZG1fcHV0X2RldmljZSh0aSwgcy0+b3JpZ2luKTsKIAotIGJhZDI6CitiYWRfb3JpZ2luOgogCWtmcmVlKHMpOwogCi0gYmFkMToKK2JhZF9zbmFwOgorCWRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHN0b3JlKTsKKworYmFkX2FyZ3M6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTcyNCw4ICs3MTUsNiBAQAogCiAJZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPnBlbmRpbmcsIHBlbmRpbmdfY2FjaGUpOwogCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5jb21wbGV0ZSwgZXhjZXB0aW9uX2NhY2hlKTsKLQotCXMtPnN0b3JlLmRlc3Ryb3koJnMtPnN0b3JlKTsKIH0KIAogc3RhdGljIHZvaWQgc25hcHNob3RfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnRpKQpAQCAtNzYxLDcgKzc1MCw4IEBACiAJbWVtcG9vbF9kZXN0cm95KHMtPnBlbmRpbmdfcG9vbCk7CiAKIAlkbV9wdXRfZGV2aWNlKHRpLCBzLT5vcmlnaW4pOwotCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CisKKwlkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzLT5zdG9yZSk7CiAKIAlrZnJlZShzKTsKIH0KQEAgLTgyMCwxMiArODEwLDEyIEBACiAJZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pCiAJCURNRVJSKCJJbnZhbGlkYXRpbmcgc25hcHNob3Q6IFVuYWJsZSB0byBhbGxvY2F0ZSBleGNlcHRpb24uIik7CiAKLQlpZiAocy0+c3RvcmUuZHJvcF9zbmFwc2hvdCkKLQkJcy0+c3RvcmUuZHJvcF9zbmFwc2hvdCgmcy0+c3RvcmUpOworCWlmIChzLT5zdG9yZS0+dHlwZS0+ZHJvcF9zbmFwc2hvdCkKKwkJcy0+c3RvcmUtPnR5cGUtPmRyb3Bfc25hcHNob3Qocy0+c3RvcmUpOwogCiAJcy0+dmFsaWQgPSAwOwogCi0JZG1fdGFibGVfZXZlbnQocy0+dGktPnRhYmxlKTsKKwlkbV90YWJsZV9ldmVudChzLT5zdG9yZS0+dGktPnRhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X3BlbmRpbmdfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZSkKQEAgLTk0Myw4ICs5MzMsOCBAQAogCiAJZWxzZQogCQkvKiBVcGRhdGUgdGhlIG1ldGFkYXRhIGlmIHdlIGFyZSBwZXJzaXN0ZW50ICovCi0JCXMtPnN0b3JlLmNvbW1pdF9leGNlcHRpb24oJnMtPnN0b3JlLCAmcGUtPmUsIGNvbW1pdF9jYWxsYmFjaywKLQkJCQkJICBwZSk7CisJCXMtPnN0b3JlLT50eXBlLT5jb21taXRfZXhjZXB0aW9uKHMtPnN0b3JlLCAmcGUtPmUsCisJCQkJCQkgY29tbWl0X2NhbGxiYWNrLCBwZSk7CiB9CiAKIC8qCkBAIC05NjAsMTEgKzk1MCwxMSBAQAogCWRldl9zaXplID0gZ2V0X2Rldl9zaXplKGJkZXYpOwogCiAJc3JjLmJkZXYgPSBiZGV2OwotCXNyYy5zZWN0b3IgPSBjaHVua190b19zZWN0b3IocywgcGUtPmUub2xkX2NodW5rKTsKLQlzcmMuY291bnQgPSBtaW4ocy0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKKwlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5vbGRfY2h1bmspOworCXNyYy5jb3VudCA9IG1pbihzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKIAotCWRlc3QuYmRldiA9IHMtPmNvdy0+YmRldjsKLQlkZXN0LnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLCBwZS0+ZS5uZXdfY2h1bmspOworCWRlc3QuYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CisJZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm5ld19jaHVuayk7CiAJZGVzdC5jb3VudCA9IHNyYy5jb3VudDsKIAogCS8qIEhhbmQgb3ZlciB0byBrY29weWQgKi8KQEAgLTk3Miw2ICs5NjIsMTcgQEAKIAkJICAgICZzcmMsIDEsICZkZXN0LCAwLCBjb3B5X2NhbGxiYWNrLCBwZSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqCitfX2xvb2t1cF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCit7CisJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24sIGUpOworfQorCiAvKgogICogTG9va3MgdG8gc2VlIGlmIHRoaXMgc25hcHNob3QgYWxyZWFkeSBoYXMgYSBwZW5kaW5nIGV4Y2VwdGlvbgogICogZm9yIHRoaXMgY2h1bmssIG90aGVyd2lzZSBpdCBhbGxvY2F0ZXMgYSBuZXcgb25lIGFuZCBpbnNlcnRzCkBAIC05ODEsNDAgKzk4MiwxNSBAQAogICogdGhpcy4KICAqLwogc3RhdGljIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICoKLV9fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHN0cnVjdCBiaW8gKmJpbykKK19fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsCisJCQkgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlLCBjaHVua190IGNodW5rKQogewotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZTsKLQlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGU7Ci0JY2h1bmtfdCBjaHVuayA9IHNlY3Rvcl90b19jaHVuayhzLCBiaW8tPmJpX3NlY3Rvcik7CisJc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlMjsKIAotCS8qCi0JICogSXMgdGhlcmUgYSBwZW5kaW5nIGV4Y2VwdGlvbiBmb3IgdGhpcyBhbHJlYWR5ID8KLQkgKi8KLQllID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOwotCWlmIChlKSB7Ci0JCS8qIGNhc3QgdGhlIGV4Y2VwdGlvbiB0byBhIHBlbmRpbmcgZXhjZXB0aW9uICovCi0JCXBlID0gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uLCBlKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBDcmVhdGUgYSBuZXcgcGVuZGluZyBleGNlcHRpb24sIHdlIGRvbid0IHdhbnQKLQkgKiB0byBob2xkIHRoZSBsb2NrIHdoaWxlIHdlIGRvIHRoaXMuCi0JICovCi0JdXBfd3JpdGUoJnMtPmxvY2spOwotCXBlID0gYWxsb2NfcGVuZGluZ19leGNlcHRpb24ocyk7Ci0JZG93bl93cml0ZSgmcy0+bG9jayk7Ci0KLQlpZiAoIXMtPnZhbGlkKSB7CisJcGUyID0gX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24ocywgY2h1bmspOworCWlmIChwZTIpIHsKIAkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzLT5wZW5kaW5nLCBjaHVuayk7Ci0JaWYgKGUpIHsKLQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7Ci0JCXBlID0gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uLCBlKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiBwZTI7CiAJfQogCiAJcGUtPmUub2xkX2NodW5rID0gY2h1bms7CkBAIC0xMDI0LDcgKzEwMDAsNyBAQAogCWF0b21pY19zZXQoJnBlLT5yZWZfY291bnQsIDApOwogCXBlLT5zdGFydGVkID0gMDsKIAotCWlmIChzLT5zdG9yZS5wcmVwYXJlX2V4Y2VwdGlvbigmcy0+c3RvcmUsICZwZS0+ZSkpIHsKKwlpZiAocy0+c3RvcmUtPnR5cGUtPnByZXBhcmVfZXhjZXB0aW9uKHMtPnN0b3JlLCAmcGUtPmUpKSB7CiAJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMDMyLDE3ICsxMDA4LDE4IEBACiAJZ2V0X3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKIAlpbnNlcnRfZXhjZXB0aW9uKCZzLT5wZW5kaW5nLCAmcGUtPmUpOwogCi0gb3V0OgogCXJldHVybiBwZTsKIH0KIAogc3RhdGljIHZvaWQgcmVtYXBfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplLAogCQkJICAgIHN0cnVjdCBiaW8gKmJpbywgY2h1bmtfdCBjaHVuaykKIHsKLQliaW8tPmJpX2JkZXYgPSBzLT5jb3ctPmJkZXY7Ci0JYmlvLT5iaV9zZWN0b3IgPSBjaHVua190b19zZWN0b3IocywgZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKwotCQkJIChjaHVuayAtIGUtPm9sZF9jaHVuaykpICsKLQkJCSAoYmlvLT5iaV9zZWN0b3IgJiBzLT5jaHVua19tYXNrKTsKKwliaW8tPmJpX2JkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLAorCQkJCQkgZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKworCQkJCQkgKGNodW5rIC0gZS0+b2xkX2NodW5rKSkgKworCQkJCQkgKGJpby0+Ymlfc2VjdG9yICYKKwkJCQkJICBzLT5zdG9yZS0+Y2h1bmtfbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgc25hcHNob3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCkBAIC0xMDU0LDcgKzEwMzEsNyBAQAogCWNodW5rX3QgY2h1bms7CiAJc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlID0gTlVMTDsKIAotCWNodW5rID0gc2VjdG9yX3RvX2NodW5rKHMsIGJpby0+Ymlfc2VjdG9yKTsKKwljaHVuayA9IHNlY3Rvcl90b19jaHVuayhzLT5zdG9yZSwgYmlvLT5iaV9zZWN0b3IpOwogCiAJLyogRnVsbCBzbmFwc2hvdHMgYXJlIG5vdCB1c2FibGUgKi8KIAkvKiBUbyBnZXQgaGVyZSB0aGUgdGFibGUgbXVzdCBiZSBsaXZlIHNvIHMtPmFjdGl2ZSBpcyBhbHdheXMgc2V0LiAqLwpAQCAtMTA4MywxMSArMTA2MCwzMSBAQAogCSAqIHdyaXRlYWJsZS4KIAkgKi8KIAlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpIHsKLQkJcGUgPSBfX2ZpbmRfcGVuZGluZ19leGNlcHRpb24ocywgYmlvKTsKKwkJcGUgPSBfX2xvb2t1cF9wZW5kaW5nX2V4Y2VwdGlvbihzLCBjaHVuayk7CiAJCWlmICghcGUpIHsKLQkJCV9faW52YWxpZGF0ZV9zbmFwc2hvdChzLCAtRU5PTUVNKTsKLQkJCXIgPSAtRUlPOwotCQkJZ290byBvdXRfdW5sb2NrOworCQkJdXBfd3JpdGUoJnMtPmxvY2spOworCQkJcGUgPSBhbGxvY19wZW5kaW5nX2V4Y2VwdGlvbihzKTsKKwkJCWRvd25fd3JpdGUoJnMtPmxvY2spOworCisJCQlpZiAoIXMtPnZhbGlkKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJciA9IC1FSU87CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCisJCQllID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+Y29tcGxldGUsIGNodW5rKTsKKwkJCWlmIChlKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJcmVtYXBfZXhjZXB0aW9uKHMsIGUsIGJpbywgY2h1bmspOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKworCQkJcGUgPSBfX2ZpbmRfcGVuZGluZ19leGNlcHRpb24ocywgcGUsIGNodW5rKTsKKwkJCWlmICghcGUpIHsKKwkJCQlfX2ludmFsaWRhdGVfc25hcHNob3QocywgLUVOT01FTSk7CisJCQkJciA9IC1FSU87CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQogCQl9CiAKIAkJcmVtYXBfZXhjZXB0aW9uKHMsICZwZS0+ZSwgYmlvLCBjaHVuayk7CkBAIC0xMTM3LDI0ICsxMTM0LDI1IEBACiBzdGF0aWMgaW50IHNuYXBzaG90X3N0YXR1cyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RhdHVzX3R5cGVfdCB0eXBlLAogCQkJICAgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQogeworCXVuc2lnbmVkIHN6ID0gMDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAgPSB0aS0+cHJpdmF0ZTsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlpZiAoIXNuYXAtPnZhbGlkKQotCQkJc25wcmludGYocmVzdWx0LCBtYXhsZW4sICJJbnZhbGlkIik7CisJCQlETUVNSVQoIkludmFsaWQiKTsKIAkJZWxzZSB7Ci0JCQlpZiAoc25hcC0+c3RvcmUuZnJhY3Rpb25fZnVsbCkgeworCQkJaWYgKHNuYXAtPnN0b3JlLT50eXBlLT5mcmFjdGlvbl9mdWxsKSB7CiAJCQkJc2VjdG9yX3QgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKLQkJCQlzbmFwLT5zdG9yZS5mcmFjdGlvbl9mdWxsKCZzbmFwLT5zdG9yZSwKLQkJCQkJCQkgICZudW1lcmF0b3IsCi0JCQkJCQkJICAmZGVub21pbmF0b3IpOwotCQkJCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiJWxsdS8lbGx1IiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyludW1lcmF0b3IsCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGVub21pbmF0b3IpOworCQkJCXNuYXAtPnN0b3JlLT50eXBlLT5mcmFjdGlvbl9mdWxsKHNuYXAtPnN0b3JlLAorCQkJCQkJCQkgJm51bWVyYXRvciwKKwkJCQkJCQkJICZkZW5vbWluYXRvcik7CisJCQkJRE1FTUlUKCIlbGx1LyVsbHUiLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bWVyYXRvciwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZW5vbWluYXRvcik7CiAJCQl9CiAJCQllbHNlCi0JCQkJc25wcmludGYocmVzdWx0LCBtYXhsZW4sICJVbmtub3duIik7CisJCQkJRE1FTUlUKCJVbmtub3duIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTExNjQsMTAgKzExNjIsOSBAQAogCQkgKiB0byBtYWtlIHByaXZhdGUgY29waWVzIGlmIHRoZSBvdXRwdXQgaXMgdG8KIAkJICogbWFrZSBzZW5zZS4KIAkJICovCi0JCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiJXMgJXMgJWMgJWxsdSIsCi0JCQkgc25hcC0+b3JpZ2luLT5uYW1lLCBzbmFwLT5jb3ctPm5hbWUsCi0JCQkgc25hcC0+dHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNuYXAtPmNodW5rX3NpemUpOworCQlETUVNSVQoIiVzIiwgc25hcC0+b3JpZ2luLT5uYW1lKTsKKwkJc25hcC0+c3RvcmUtPnR5cGUtPnN0YXR1cyhzbmFwLT5zdG9yZSwgdHlwZSwgcmVzdWx0ICsgc3osCisJCQkJCSAgbWF4bGVuIC0gc3opOwogCQlicmVhazsKIAl9CiAKQEAgLTExOTYsMTQgKzExOTMsMTQgQEAKIAkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKIAogCQkvKiBOb3RoaW5nIHRvIGRvIGlmIHdyaXRpbmcgYmV5b25kIGVuZCBvZiBzbmFwc2hvdCAqLwotCQlpZiAoYmlvLT5iaV9zZWN0b3IgPj0gZG1fdGFibGVfZ2V0X3NpemUoc25hcC0+dGktPnRhYmxlKSkKKwkJaWYgKGJpby0+Ymlfc2VjdG9yID49IGRtX3RhYmxlX2dldF9zaXplKHNuYXAtPnN0b3JlLT50aS0+dGFibGUpKQogCQkJZ290byBuZXh0X3NuYXBzaG90OwogCiAJCS8qCiAJCSAqIFJlbWVtYmVyLCBkaWZmZXJlbnQgc25hcHNob3RzIGNhbiBoYXZlCiAJCSAqIGRpZmZlcmVudCBjaHVuayBzaXplcy4KIAkJICovCi0JCWNodW5rID0gc2VjdG9yX3RvX2NodW5rKHNuYXAsIGJpby0+Ymlfc2VjdG9yKTsKKwkJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc25hcC0+c3RvcmUsIGJpby0+Ymlfc2VjdG9yKTsKIAogCQkvKgogCQkgKiBDaGVjayBleGNlcHRpb24gdGFibGUgdG8gc2VlIGlmIGJsb2NrCkBAIC0xMjE3LDEwICsxMjE0LDI4IEBACiAJCWlmIChlKQogCQkJZ290byBuZXh0X3NuYXBzaG90OwogCi0JCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXAsIGJpbyk7CisJCXBlID0gX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24oc25hcCwgY2h1bmspOwogCQlpZiAoIXBlKSB7Ci0JCQlfX2ludmFsaWRhdGVfc25hcHNob3Qoc25hcCwgLUVOT01FTSk7Ci0JCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl1cF93cml0ZSgmc25hcC0+bG9jayk7CisJCQlwZSA9IGFsbG9jX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXApOworCQkJZG93bl93cml0ZSgmc25hcC0+bG9jayk7CisKKwkJCWlmICghc25hcC0+dmFsaWQpIHsKKwkJCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKKwkJCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl9CisKKwkJCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzbmFwLT5jb21wbGV0ZSwgY2h1bmspOworCQkJaWYgKGUpIHsKKwkJCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKKwkJCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl9CisKKwkJCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXAsIHBlLCBjaHVuayk7CisJCQlpZiAoIXBlKSB7CisJCQkJX19pbnZhbGlkYXRlX3NuYXBzaG90KHNuYXAsIC1FTk9NRU0pOworCQkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKKwkJCX0KIAkJfQogCiAJCWlmICghcHJpbWFyeV9wZSkgewpAQCAtMTM2MCw3ICsxMzc1LDggQEAKIAlvID0gX19sb29rdXBfb3JpZ2luKGRldi0+YmRldik7CiAJaWYgKG8pCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHNuYXAsICZvLT5zbmFwc2hvdHMsIGxpc3QpCi0JCQljaHVua19zaXplID0gbWluX25vdF96ZXJvKGNodW5rX3NpemUsIHNuYXAtPmNodW5rX3NpemUpOworCQkJY2h1bmtfc2l6ZSA9IG1pbl9ub3RfemVybyhjaHVua19zaXplLAorCQkJCQkJICBzbmFwLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAJdXBfcmVhZCgmX29yaWdpbnNfbG9jayk7CiAKIAl0aS0+c3BsaXRfaW8gPSBjaHVua19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmggYi9kcml2ZXJzL21kL2RtLXNuYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllNjJiNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgU2lzdGluYSBTb2Z0d2FyZSAoVUspIExpbWl0ZWQuCi0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCi0gKi8KLQotI2lmbmRlZiBETV9TTkFQU0hPVF9ICi0jZGVmaW5lIERNX1NOQVBTSE9UX0gKLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KLSNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1iaW8tbGlzdC5oIgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi1zdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHsKLQl1aW50MzJfdCBoYXNoX21hc2s7Ci0JdW5zaWduZWQgaGFzaF9zaGlmdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0YWJsZTsKLX07Ci0KLSNkZWZpbmUgRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkUJMTYKLSNkZWZpbmUgRE1fVFJBQ0tFRF9DSFVOS19IQVNIKHgpCSgodW5zaWduZWQgbG9uZykoeCkgJiBcCi0JCQkJCSAoRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkUgLSAxKSkKLQotc3RydWN0IGRtX3NuYXBzaG90IHsKLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7Ci0Jc3RydWN0IGRtX3RhcmdldCAqdGk7Ci0KLQlzdHJ1Y3QgZG1fZGV2ICpvcmlnaW47Ci0Jc3RydWN0IGRtX2RldiAqY293OwotCi0JLyogTGlzdCBvZiBzbmFwc2hvdHMgcGVyIE9yaWdpbiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIFNpemUgb2YgZGF0YSBibG9ja3Mgc2F2ZWQgLSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwotCWNodW5rX3QgY2h1bmtfc2l6ZTsKLQljaHVua190IGNodW5rX21hc2s7Ci0JY2h1bmtfdCBjaHVua19zaGlmdDsKLQotCS8qIFlvdSBjYW4ndCB1c2UgYSBzbmFwc2hvdCBpZiB0aGlzIGlzIDAgKGUuZy4gaWYgZnVsbCkgKi8KLQlpbnQgdmFsaWQ7Ci0KLQkvKiBPcmlnaW4gd3JpdGVzIGRvbid0IHRyaWdnZXIgZXhjZXB0aW9ucyB1bnRpbCB0aGlzIGlzIHNldCAqLwotCWludCBhY3RpdmU7Ci0KLQkvKiBVc2VkIGZvciBkaXNwbGF5IG9mIHRhYmxlICovCi0JY2hhciB0eXBlOwotCi0JbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7Ci0KLQlhdG9taWNfdCBwZW5kaW5nX2V4Y2VwdGlvbnNfY291bnQ7Ci0KLQlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7Ci0Jc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKLQotCS8qCi0JICogcGVfbG9jayBwcm90ZWN0cyBhbGwgcGVuZGluZ19leGNlcHRpb24gb3BlcmF0aW9ucyBhbmQgYWNjZXNzCi0JICogYXMgd2VsbCBhcyB0aGUgc25hcHNob3RfYmlvcyBsaXN0LgotCSAqLwotCXNwaW5sb2NrX3QgcGVfbG9jazsKLQotCS8qIFRoZSBvbiBkaXNrIG1ldGFkYXRhIGhhbmRsZXIgKi8KLQlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlIHN0b3JlOwotCi0Jc3RydWN0IGRtX2tjb3B5ZF9jbGllbnQgKmtjb3B5ZF9jbGllbnQ7Ci0KLQkvKiBRdWV1ZSBvZiBzbmFwc2hvdCB3cml0ZXMgZm9yIGtzbmFwZCB0byBmbHVzaCAqLwotCXN0cnVjdCBiaW9fbGlzdCBxdWV1ZWRfYmlvczsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcXVldWVkX2Jpb3Nfd29yazsKLQotCS8qIENodW5rcyB3aXRoIG91dHN0YW5kaW5nIHJlYWRzICovCi0JbWVtcG9vbF90ICp0cmFja2VkX2NodW5rX3Bvb2w7Ci0Jc3BpbmxvY2tfdCB0cmFja2VkX2NodW5rX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgdHJhY2tlZF9jaHVua19oYXNoW0RNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFXTsKLX07Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWN0b3JzIGluIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZ2V0X2Rldl9zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0JcmV0dXJuIGJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gU0VDVE9SX1NISUZUOwotfQotCi1zdGF0aWMgaW5saW5lIGNodW5rX3Qgc2VjdG9yX3RvX2NodW5rKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywgc2VjdG9yX3Qgc2VjdG9yKQotewotCXJldHVybiAoc2VjdG9yICYgfnMtPmNodW5rX21hc2spID4+IHMtPmNodW5rX3NoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIHNlY3Rvcl90IGNodW5rX3RvX3NlY3RvcihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCi17Ci0JcmV0dXJuIGNodW5rIDw8IHMtPmNodW5rX3NoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBiZGV2X2VxdWFsKHN0cnVjdCBibG9ja19kZXZpY2UgKmxocywgc3RydWN0IGJsb2NrX2RldmljZSAqcmhzKQotewotCS8qCi0JICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgYmxvY2sKLQkgKiBkZXZpY2Ugc28gd2UgY2FuIGNvbXBhcmUgcG9pbnRlcnMgc2FmZWx5LgotCSAqLwotCXJldHVybiBsaHMgPT0gcmhzOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCAyZmQ2NmMzLi5lODM2MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC0zOTksMjggKzM5OSwzMCBAQAogfQogCiAvKgotICogVGhpcyB1cGdyYWRlcyB0aGUgbW9kZSBvbiBhbiBhbHJlYWR5IG9wZW4gZG1fZGV2LiAgQmVpbmcKKyAqIFRoaXMgdXBncmFkZXMgdGhlIG1vZGUgb24gYW4gYWxyZWFkeSBvcGVuIGRtX2RldiwgYmVpbmcKICAqIGNhcmVmdWwgdG8gbGVhdmUgdGhpbmdzIGFzIHRoZXkgd2VyZSBpZiB3ZSBmYWlsIHRvIHJlb3BlbiB0aGUKLSAqIGRldmljZS4KKyAqIGRldmljZSBhbmQgbm90IHRvIHRvdWNoIHRoZSBleGlzdGluZyBiZGV2IGZpZWxkIGluIGNhc2UKKyAqIGl0IGlzIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBpbnNpZGUgZG1fdGFibGVfYW55X2Nvbmdlc3RlZCgpLgogICovCiBzdGF0aWMgaW50IHVwZ3JhZGVfbW9kZShzdHJ1Y3QgZG1fZGV2X2ludGVybmFsICpkZCwgZm1vZGVfdCBuZXdfbW9kZSwKIAkJCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAlpbnQgcjsKLQlzdHJ1Y3QgZG1fZGV2X2ludGVybmFsIGRkX2NvcHk7Ci0JZGV2X3QgZGV2ID0gZGQtPmRtX2Rldi5iZGV2LT5iZF9kZXY7CisJc3RydWN0IGRtX2Rldl9pbnRlcm5hbCBkZF9uZXcsIGRkX29sZDsKIAotCWRkX2NvcHkgPSAqZGQ7CisJZGRfbmV3ID0gZGRfb2xkID0gKmRkOworCisJZGRfbmV3LmRtX2Rldi5tb2RlIHw9IG5ld19tb2RlOworCWRkX25ldy5kbV9kZXYuYmRldiA9IE5VTEw7CisKKwlyID0gb3Blbl9kZXYoJmRkX25ldywgZGQtPmRtX2Rldi5iZGV2LT5iZF9kZXYsIG1kKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKIAlkZC0+ZG1fZGV2Lm1vZGUgfD0gbmV3X21vZGU7Ci0JZGQtPmRtX2Rldi5iZGV2ID0gTlVMTDsKLQlyID0gb3Blbl9kZXYoZGQsIGRldiwgbWQpOwotCWlmICghcikKLQkJY2xvc2VfZGV2KCZkZF9jb3B5LCBtZCk7Ci0JZWxzZQotCQkqZGQgPSBkZF9jb3B5OworCWNsb3NlX2RldigmZGRfb2xkLCBtZCk7CiAKLQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMgYi9kcml2ZXJzL21kL2RtLXRhcmdldC5jCmluZGV4IDdkZWNmMTAuLjA0ZmVjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKKysrIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwpAQCAtMTQsNDUgKzE0LDM0IEBACiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAidGFyZ2V0IgogCi1zdHJ1Y3QgdHRfaW50ZXJuYWwgewotCXN0cnVjdCB0YXJnZXRfdHlwZSB0dDsKLQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlsb25nIHVzZTsKLX07Ci0KIHN0YXRpYyBMSVNUX0hFQUQoX3RhcmdldHMpOwogc3RhdGljIERFQ0xBUkVfUldTRU0oX2xvY2spOwogCiAjZGVmaW5lIERNX01PRF9OQU1FX1NJWkUgMzIKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHRfaW50ZXJuYWwgKl9fZmluZF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFyZ2V0X3R5cGUgKl9fZmluZF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkgKHRpLCAmX3RhcmdldHMsIGxpc3QpCi0JCWlmICghc3RyY21wKG5hbWUsIHRpLT50dC5uYW1lKSkKLQkJCXJldHVybiB0aTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0LCAmX3RhcmdldHMsIGxpc3QpCisJCWlmICghc3RyY21wKG5hbWUsIHR0LT5uYW1lKSkKKwkJCXJldHVybiB0dDsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHR0X2ludGVybmFsICpnZXRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgKmdldF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAogCWRvd25fcmVhZCgmX2xvY2spOwogCi0JdGkgPSBfX2ZpbmRfdGFyZ2V0X3R5cGUobmFtZSk7Ci0JaWYgKHRpKSB7Ci0JCWlmICgodGktPnVzZSA9PSAwKSAmJiAhdHJ5X21vZHVsZV9nZXQodGktPnR0Lm1vZHVsZSkpCi0JCQl0aSA9IE5VTEw7Ci0JCWVsc2UKLQkJCXRpLT51c2UrKzsKLQl9CisJdHQgPSBfX2ZpbmRfdGFyZ2V0X3R5cGUobmFtZSk7CisJaWYgKHR0ICYmICF0cnlfbW9kdWxlX2dldCh0dC0+bW9kdWxlKSkKKwkJdHQgPSBOVUxMOwogCiAJdXBfcmVhZCgmX2xvY2spOwotCXJldHVybiB0aTsKKwlyZXR1cm4gdHQ7CiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCkBAIC02Miw5MiArNTEsNTkgQEAKIAogc3RydWN0IHRhcmdldF90eXBlICpkbV9nZXRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOworCXN0cnVjdCB0YXJnZXRfdHlwZSAqdHQgPSBnZXRfdGFyZ2V0X3R5cGUobmFtZSk7CiAKLQlpZiAoIXRpKSB7CisJaWYgKCF0dCkgewogCQlsb2FkX21vZHVsZShuYW1lKTsKLQkJdGkgPSBnZXRfdGFyZ2V0X3R5cGUobmFtZSk7CisJCXR0ID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOwogCX0KIAotCXJldHVybiB0aSA/ICZ0aS0+dHQgOiBOVUxMOworCXJldHVybiB0dDsKIH0KIAotdm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0KQordm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0dCkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gKHN0cnVjdCB0dF9pbnRlcm5hbCAqKSB0OwotCiAJZG93bl9yZWFkKCZfbG9jayk7Ci0JaWYgKC0tdGktPnVzZSA9PSAwKQotCQltb2R1bGVfcHV0KHRpLT50dC5tb2R1bGUpOwotCi0JQlVHX09OKHRpLT51c2UgPCAwKTsKKwltb2R1bGVfcHV0KHR0LT5tb2R1bGUpOwogCXVwX3JlYWQoJl9sb2NrKTsKLQotCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCB0dF9pbnRlcm5hbCAqYWxsb2NfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdCkKLXsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0ga3phbGxvYyhzaXplb2YoKnRpKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAodGkpCi0JCXRpLT50dCA9ICp0OwotCi0JcmV0dXJuIHRpOwotfQotCi0KIGludCBkbV90YXJnZXRfaXRlcmF0ZSh2b2lkICgqaXRlcl9mdW5jKShzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0LAogCQkJCQl2b2lkICpwYXJhbSksIHZvaWQgKnBhcmFtKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAogCWRvd25fcmVhZCgmX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkgKHRpLCAmX3RhcmdldHMsIGxpc3QpCi0JCWl0ZXJfZnVuYygmdGktPnR0LCBwYXJhbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dCwgJl90YXJnZXRzLCBsaXN0KQorCQlpdGVyX2Z1bmModHQsIHBhcmFtKTsKIAl1cF9yZWFkKCZfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRtX3JlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpCitpbnQgZG1fcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpCiB7CiAJaW50IHJ2ID0gMDsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gYWxsb2NfdGFyZ2V0KHQpOwotCi0JaWYgKCF0aSkKLQkJcmV0dXJuIC1FTk9NRU07CiAKIAlkb3duX3dyaXRlKCZfbG9jayk7Ci0JaWYgKF9fZmluZF90YXJnZXRfdHlwZSh0LT5uYW1lKSkKKwlpZiAoX19maW5kX3RhcmdldF90eXBlKHR0LT5uYW1lKSkKIAkJcnYgPSAtRUVYSVNUOwogCWVsc2UKLQkJbGlzdF9hZGQoJnRpLT5saXN0LCAmX3RhcmdldHMpOworCQlsaXN0X2FkZCgmdHQtPmxpc3QsICZfdGFyZ2V0cyk7CiAKIAl1cF93cml0ZSgmX2xvY2spOwotCWlmIChydikKLQkJa2ZyZWUodGkpOwogCXJldHVybiBydjsKIH0KIAotdm9pZCBkbV91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpCit2b2lkIGRtX3VucmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpCiB7Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aTsKLQogCWRvd25fd3JpdGUoJl9sb2NrKTsKLQlpZiAoISh0aSA9IF9fZmluZF90YXJnZXRfdHlwZSh0LT5uYW1lKSkpIHsKLQkJRE1DUklUKCJVbnJlZ2lzdGVyaW5nIHVucmVjb2duaXNlZCB0YXJnZXQ6ICVzIiwgdC0+bmFtZSk7CisJaWYgKCFfX2ZpbmRfdGFyZ2V0X3R5cGUodHQtPm5hbWUpKSB7CisJCURNQ1JJVCgiVW5yZWdpc3RlcmluZyB1bnJlY29nbmlzZWQgdGFyZ2V0OiAlcyIsIHR0LT5uYW1lKTsKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHRpLT51c2UpIHsKLQkJRE1DUklUKCJBdHRlbXB0IHRvIHVucmVnaXN0ZXIgdGFyZ2V0IHN0aWxsIGluIHVzZTogJXMiLAotCQkgICAgICAgdC0+bmFtZSk7Ci0JCUJVRygpOwotCX0KLQotCWxpc3RfZGVsKCZ0aS0+bGlzdCk7Ci0Ja2ZyZWUodGkpOworCWxpc3RfZGVsKCZ0dC0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX2xvY2spOwogfQpAQCAtMTU2LDE3ICsxMTIsMTcgQEAKICAqIGlvLWVycjogYWx3YXlzIGZhaWxzIGFuIGlvLCB1c2VmdWwgZm9yIGJyaW5naW5nCiAgKiB1cCBMVnMgdGhhdCBoYXZlIGhvbGVzIGluIHRoZW0uCiAgKi8KLXN0YXRpYyBpbnQgaW9fZXJyX2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQorc3RhdGljIGludCBpb19lcnJfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnR0LCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlvX2Vycl9kdHIoc3RydWN0IGRtX3RhcmdldCAqdGkpCitzdGF0aWMgdm9pZCBpb19lcnJfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnR0KQogewogCS8qIGVtcHR5ICovCiB9CiAKLXN0YXRpYyBpbnQgaW9fZXJyX21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLAorc3RhdGljIGludCBpb19lcnJfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnR0LCBzdHJ1Y3QgYmlvICpiaW8sCiAJCSAgICAgIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCkKIHsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA4ZDQwZjI3Li43ODhiYTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC05OSwxOSArOTksOSBAQAogLyoKICAqIFdvcmsgcHJvY2Vzc2VkIGJ5IHBlci1kZXZpY2Ugd29ya3F1ZXVlLgogICovCi1zdHJ1Y3QgZG1fd3FfcmVxIHsKLQllbnVtIHsKLQkJRE1fV1FfRkxVU0hfREVGRVJSRUQsCi0JfSB0eXBlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKLQl2b2lkICpjb250ZXh0OwotfTsKLQogc3RydWN0IG1hcHBlZF9kZXZpY2UgewogCXN0cnVjdCByd19zZW1hcGhvcmUgaW9fbG9jazsKIAlzdHJ1Y3QgbXV0ZXggc3VzcGVuZF9sb2NrOwotCXNwaW5sb2NrX3QgcHVzaGJhY2tfbG9jazsKIAlyd2xvY2tfdCBtYXBfbG9jazsKIAlhdG9taWNfdCBob2xkZXJzOwogCWF0b21pY190IG9wZW5fY291bnQ7CkBAIC0xMjksOCArMTE5LDkgQEAKIAkgKi8KIAlhdG9taWNfdCBwZW5kaW5nOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGJpb19saXN0IGRlZmVycmVkOwotCXN0cnVjdCBiaW9fbGlzdCBwdXNoYmFjazsKKwlzcGlubG9ja190IGRlZmVycmVkX2xvY2s7CiAKIAkvKgogCSAqIFByb2Nlc3NpbmcgcXVldWUgKGZsdXNoL2JhcnJpZXJzKQpAQCAtNDUzLDcgKzQ0NCw5IEBACiAJCXJldHVybiAxOwogCX0KIAorCXNwaW5fbG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKIAliaW9fbGlzdF9hZGQoJm1kLT5kZWZlcnJlZCwgYmlvKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKIAogCXVwX3dyaXRlKCZtZC0+aW9fbG9jayk7CiAJcmV0dXJuIDA7CQkvKiBkZWZlcnJlZCBzdWNjZXNzZnVsbHkgKi8KQEAgLTUzNywxNiArNTMwLDE0IEBACiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewogCQkJLyoKIAkJCSAqIFRhcmdldCByZXF1ZXN0ZWQgcHVzaGluZyBiYWNrIHRoZSBJL08uCi0JCQkgKiBUaGlzIG11c3QgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIHNsZWVwZXIgb24KLQkJCSAqIHN1c3BlbmQgcXVldWUgbWVyZ2VzIHRoZSBwdXNoYmFjayBsaXN0LgogCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+ZGVmZXJyZWRfbG9jaywgZmxhZ3MpOwogCQkJaWYgKF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkKLQkJCQliaW9fbGlzdF9hZGQoJm1kLT5wdXNoYmFjaywgaW8tPmJpbyk7CisJCQkJYmlvX2xpc3RfYWRkKCZtZC0+ZGVmZXJyZWQsIGlvLT5iaW8pOwogCQkJZWxzZQogCQkJCS8qIG5vZmx1c2ggc3VzcGVuZCB3YXMgaW50ZXJydXB0ZWQuICovCiAJCQkJaW8tPmVycm9yID0gLUVJTzsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+ZGVmZXJyZWRfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZW5kX2lvX2FjY3QoaW8pOwpAQCAtODM0LDIwICs4MjUsMjIgQEAKIH0KIAogLyoKLSAqIFNwbGl0IHRoZSBiaW8gaW50byBzZXZlcmFsIGNsb25lcy4KKyAqIFNwbGl0IHRoZSBiaW8gaW50byBzZXZlcmFsIGNsb25lcyBhbmQgc3VibWl0IGl0IHRvIHRhcmdldHMuCiAgKi8KLXN0YXRpYyBpbnQgX19zcGxpdF9iaW8oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgY2xvbmVfaW5mbyBjaTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJY2kubWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKLQlpZiAodW5saWtlbHkoIWNpLm1hcCkpCi0JCXJldHVybiAtRUlPOworCWlmICh1bmxpa2VseSghY2kubWFwKSkgeworCQliaW9faW9fZXJyb3IoYmlvKTsKKwkJcmV0dXJuOworCX0KIAlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSAmJiAhZG1fdGFibGVfYmFycmllcl9vayhjaS5tYXApKSkgewogCQlkbV90YWJsZV9wdXQoY2kubWFwKTsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAljaS5tZCA9IG1kOwogCWNpLmJpbyA9IGJpbzsKQEAgLTg2Nyw4ICs4NjAsNiBAQAogCS8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSBjb3VudCAqLwogCWRlY19wZW5kaW5nKGNpLmlvLCBlcnJvcik7CiAJZG1fdGFibGVfcHV0KGNpLm1hcCk7Ci0KLQlyZXR1cm4gMDsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENSVUQgRU5ECkBAIC05NTksOCArOTUwLDkgQEAKIAkJZG93bl9yZWFkKCZtZC0+aW9fbG9jayk7CiAJfQogCi0JciA9IF9fc3BsaXRfYmlvKG1kLCBiaW8pOworCV9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKG1kLCBiaW8pOwogCXVwX3JlYWQoJm1kLT5pb19sb2NrKTsKKwlyZXR1cm4gMDsKIAogb3V0X3JlcToKIAlpZiAociA8IDApCkBAIC0xMDc0LDYgKzEwNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzOwogCitzdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIGJsYW5rIGRldmljZSB3aXRoIGEgZ2l2ZW4gbWlub3IuCiAgKi8KQEAgLTExMDEsNyArMTA5NSw3IEBACiAKIAlpbml0X3J3c2VtKCZtZC0+aW9fbG9jayk7CiAJbXV0ZXhfaW5pdCgmbWQtPnN1c3BlbmRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1kLT5wdXNoYmFja19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWQtPmRlZmVycmVkX2xvY2spOwogCXJ3bG9ja19pbml0KCZtZC0+bWFwX2xvY2spOwogCWF0b21pY19zZXQoJm1kLT5ob2xkZXJzLCAxKTsKIAlhdG9taWNfc2V0KCZtZC0+b3Blbl9jb3VudCwgMCk7CkBAIC0xMTE4LDYgKzExMTIsNyBAQAogCW1kLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSBkbV9hbnlfY29uZ2VzdGVkOwogCW1kLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kOwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWQtPnF1ZXVlLCBkbV9yZXF1ZXN0KTsKKwlibGtfcXVldWVfb3JkZXJlZChtZC0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobWQtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJbWQtPnF1ZXVlLT51bnBsdWdfZm4gPSBkbV91bnBsdWdfYWxsOwogCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kLT5xdWV1ZSwgZG1fbWVyZ2VfYnZlYyk7CkBAIC0xMTQwLDYgKzExMzUsNyBAQAogCiAJYXRvbWljX3NldCgmbWQtPnBlbmRpbmcsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kLT53YWl0KTsKKwlJTklUX1dPUksoJm1kLT53b3JrLCBkbV93cV93b3JrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+ZXZlbnRxKTsKIAogCW1kLT5kaXNrLT5tYWpvciA9IF9tYWpvcjsKQEAgLTEzNzksMTggKzEzNzUsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX3B1dCk7CiAKLXN0YXRpYyBpbnQgZG1fd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgaW50IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgaW50ZXJydXB0aWJsZSkKIHsKIAlpbnQgciA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlkbV91bnBsdWdfYWxsKG1kLT5xdWV1ZSk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKIAogCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNldF9jdXJyZW50X3N0YXRlKGludGVycnVwdGlibGUpOwogCiAJCXNtcF9tYigpOwogCQlpZiAoIWF0b21pY19yZWFkKCZtZC0+cGVuZGluZykpCiAJCQlicmVhazsKIAotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJaWYgKGludGVycnVwdGlibGUgPT0gVEFTS19JTlRFUlJVUFRJQkxFICYmCisJCSAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJciA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzk5LDY3ICsxNDAxLDQwIEBACiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKKwogCXJldHVybiByOwogfQogCiAvKgogICogUHJvY2VzcyB0aGUgZGVmZXJyZWQgYmlvcwogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2RlZmVycmVkX2lvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0YXRpYyB2b2lkIGRtX3dxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWFwcGVkX2RldmljZSwKKwkJCQkJCXdvcmspOwogCXN0cnVjdCBiaW8gKmM7CiAKLQl3aGlsZSAoKGMgPSBiaW9fbGlzdF9wb3AoJm1kLT5kZWZlcnJlZCkpKSB7Ci0JCWlmIChfX3NwbGl0X2JpbyhtZCwgYykpCi0JCQliaW9faW9fZXJyb3IoYyk7CisJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOworCituZXh0X2JpbzoKKwlzcGluX2xvY2tfaXJxKCZtZC0+ZGVmZXJyZWRfbG9jayk7CisJYyA9IGJpb19saXN0X3BvcCgmbWQtPmRlZmVycmVkKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKKworCWlmIChjKSB7CisJCV9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKG1kLCBjKTsKKwkJZ290byBuZXh0X2JpbzsKIAl9CiAKIAljbGVhcl9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKTsKLX0KIAotc3RhdGljIHZvaWQgX19tZXJnZV9wdXNoYmFja19saXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOwotCWJpb19saXN0X21lcmdlX2hlYWQoJm1kLT5kZWZlcnJlZCwgJm1kLT5wdXNoYmFjayk7Ci0JYmlvX2xpc3RfaW5pdCgmbWQtPnB1c2hiYWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZG1fd3FfcmVxICpyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtX3dxX3JlcSwgd29yayk7Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcmVxLT5tZDsKLQotCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKLQlzd2l0Y2ggKHJlcS0+dHlwZSkgewotCWNhc2UgRE1fV1FfRkxVU0hfREVGRVJSRUQ6Ci0JCV9fZmx1c2hfZGVmZXJyZWRfaW8obWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlETUVSUigiZG1fd3Ffd29yazogdW5yZWNvZ25pc2VkIHdvcmsgdHlwZSAlZCIsIHJlcS0+dHlwZSk7Ci0JCUJVRygpOwotCX0KIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBkbV93cV9xdWV1ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGludCB0eXBlLCB2b2lkICpjb250ZXh0LAotCQkJc3RydWN0IGRtX3dxX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgZG1fcXVldWVfZmx1c2goc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXJlcS0+dHlwZSA9IHR5cGU7Ci0JcmVxLT5tZCA9IG1kOwotCXJlcS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JSU5JVF9XT1JLKCZyZXEtPndvcmssIGRtX3dxX3dvcmspOwotCXF1ZXVlX3dvcmsobWQtPndxLCAmcmVxLT53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgZG1fcXVldWVfZmx1c2goc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZG1fd3FfcmVxIHJlcTsKLQotCWRtX3dxX3F1ZXVlKG1kLCB0eXBlLCBjb250ZXh0LCAmcmVxKTsKKwlxdWV1ZV93b3JrKG1kLT53cSwgJm1kLT53b3JrKTsKIAlmbHVzaF93b3JrcXVldWUobWQtPndxKTsKIH0KIApAQCAtMTUzNCw3ICsxNTA5LDYgQEAKIGludCBkbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKIHsKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJaW50IHIgPSAwOwogCWludCBkb19sb2NrZnMgPSBzdXNwZW5kX2ZsYWdzICYgRE1fU1VTUEVORF9MT0NLRlNfRkxBRyA/IDEgOiAwOwogCWludCBub2ZsdXNoID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHID8gMSA6IDA7CkBAIC0xNTg0LDI4ICsxNTU4LDIyIEBACiAJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOwogCXNldF9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKTsKIAotCWFkZF93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCXVwX3dyaXRlKCZtZC0+aW9fbG9jayk7CiAKLQkvKiB1bnBsdWcgKi8KLQlpZiAobWFwKQotCQlkbV90YWJsZV91bnBsdWdfYWxsKG1hcCk7Ci0KIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBhbHJlYWR5LW1hcHBlZCBpb3MgdG8gY29tcGxldGUuCiAJICovCi0JciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQpOworCXIgPSBkbV93YWl0X2Zvcl9jb21wbGV0aW9uKG1kLCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCiAJaWYgKG5vZmx1c2gpCi0JCV9fbWVyZ2VfcHVzaGJhY2tfbGlzdChtZCk7CisJCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCiAJLyogd2VyZSB3ZSBpbnRlcnJ1cHRlZCA/ICovCiAJaWYgKHIgPCAwKSB7Ci0JCWRtX3F1ZXVlX2ZsdXNoKG1kLCBETV9XUV9GTFVTSF9ERUZFUlJFRCwgTlVMTCk7CisJCWRtX3F1ZXVlX2ZsdXNoKG1kKTsKIAogCQl1bmxvY2tfZnMobWQpOwogCQlnb3RvIG91dDsgLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KQEAgLTE2NDUsNyArMTYxMyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG1fcXVldWVfZmx1c2gobWQsIERNX1dRX0ZMVVNIX0RFRkVSUkVELCBOVUxMKTsKKwlkbV9xdWV1ZV9mbHVzaChtZCk7CiAKIAl1bmxvY2tfZnMobWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmggYi9kcml2ZXJzL21kL2RtLmgKaW5kZXggMjAxOTRlMC4uYjQ4Mzk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5oCisrKyBiL2RyaXZlcnMvbWQvZG0uaApAQCAtNjAsNyArNjAsNyBAQAogaW50IGRtX3RhcmdldF9pbml0KHZvaWQpOwogdm9pZCBkbV90YXJnZXRfZXhpdCh2b2lkKTsKIHN0cnVjdCB0YXJnZXRfdHlwZSAqZG1fZ2V0X3RhcmdldF90eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0KTsKK3ZvaWQgZG1fcHV0X3RhcmdldF90eXBlKHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpOwogaW50IGRtX3RhcmdldF9pdGVyYXRlKHZvaWQgKCppdGVyX2Z1bmMpKHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQsCiAJCQkJCXZvaWQgKnBhcmFtKSwgdm9pZCAqcGFyYW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCA4NmQ5YWRmLi44Njk1ODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTYyLDcgKzYyLDEwIEBACiAjZGVmaW5lCU1vZGVTaGlmdAk1CiAKICNkZWZpbmUgTWF4RmF1bHQJNTAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAKIHN0YXRpYyB2b2lkIGZhdWx0eV9mYWlsKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQpAQCAtMjgwLDYgKzI4MywxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc2VjdG9yX3QgZmF1bHR5X3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCVdBUk5fT05DRShyYWlkX2Rpc2tzLAorCQkgICIlcyBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyaWMgcmVzaGFwZVxuIiwgX19mdW5jX18pOworCisJaWYgKHNlY3RvcnMgPT0gMCkKKwkJcmV0dXJuIG1kZGV2LT5kZXZfc2VjdG9yczsKKworCXJldHVybiBzZWN0b3JzOworfQorCiBzdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtMjk4LDcgKzMxMiw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJY29uZi0+cmRldiA9IHJkZXY7CiAKLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgZmF1bHR5X3NpemUobWRkZXYsIDAsIDApKTsKIAltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CiAKIAlyZWNvbmZpZyhtZGRldiwgbWRkZXYtPmxheW91dCwgLTEpOwpAQCAtMzI1LDYgKzMzOSw3IEBACiAJLnN0b3AJCT0gc3RvcCwKIAkuc3RhdHVzCQk9IHN0YXR1cywKIAkucmVjb25maWcJPSByZWNvbmZpZywKKwkuc2l6ZQkJPSBmYXVsdHlfc2l6ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJhaWRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggMDk2NThiMi4uN2EzNmUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNiw3ICsxNiwxMSBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL2xpbmVhci5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJsaW5lYXIuaCIKIAogLyoKICAqIGZpbmQgd2hpY2ggZGV2aWNlIGhvbGRzIGEgcGFydGljdWxhciBvZmZzZXQgCkBAIC05Nyw2ICsxMDEsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc2VjdG9yX3QgbGluZWFyX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCWxpbmVhcl9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCVdBUk5fT05DRShzZWN0b3JzIHx8IHJhaWRfZGlza3MsCisJCSAgIiVzIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyByZXNoYXBlXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gY29uZi0+YXJyYXlfc2VjdG9yczsKK30KKwogc3RhdGljIGxpbmVhcl9jb25mX3QgKmxpbmVhcl9jb25mKG1kZGV2X3QgKm1kZGV2LCBpbnQgcmFpZF9kaXNrcykKIHsKIAlsaW5lYXJfY29uZl90ICpjb25mOwpAQCAtMTM1LDggKzE0OSw4IEBACiAJCSAgICBtZGRldi0+cXVldWUtPm1heF9zZWN0b3JzID4gKFBBR0VfU0laRT4+OSkpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCi0JCWRpc2stPm51bV9zZWN0b3JzID0gcmRldi0+c2l6ZSAqIDI7Ci0JCWNvbmYtPmFycmF5X3NlY3RvcnMgKz0gcmRldi0+c2l6ZSAqIDI7CisJCWRpc2stPm51bV9zZWN0b3JzID0gcmRldi0+c2VjdG9yczsKKwkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zZWN0b3JzOwogCiAJCWNudCsrOwogCX0KQEAgLTI0OSw3ICsyNjMsNyBAQAogCWlmICghY29uZikKIAkJcmV0dXJuIDE7CiAJbWRkZXYtPnByaXZhdGUgPSBjb25mOwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gY29uZi0+YXJyYXlfc2VjdG9yczsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgbGluZWFyX3NpemUobWRkZXYsIDAsIDApKTsKIAogCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kZGV2LT5xdWV1ZSwgbGluZWFyX21lcmdlYWJsZV9idmVjKTsKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IGxpbmVhcl91bnBsdWc7CkBAIC0yODMsNyArMjk3LDcgQEAKIAluZXdjb25mLT5wcmV2ID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAJbWRkZXYtPnByaXZhdGUgPSBuZXdjb25mOwogCW1kZGV2LT5yYWlkX2Rpc2tzKys7Ci0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBuZXdjb25mLT5hcnJheV9zZWN0b3JzOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCBsaW5lYXJfc2l6ZShtZGRldiwgMCwgMCkpOwogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzgxLDYgKzM5NSw3IEBACiAJLnN0b3AJCT0gbGluZWFyX3N0b3AsCiAJLnN0YXR1cwkJPSBsaW5lYXJfc3RhdHVzLAogCS5ob3RfYWRkX2Rpc2sJPSBsaW5lYXJfYWRkLAorCS5zaXplCQk9IGxpbmVhcl9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbGluZWFyX2luaXQgKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmggYi9kcml2ZXJzL21kL2xpbmVhci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaApyZW5hbWUgdG8gZHJpdmVycy9tZC9saW5lYXIuaAppbmRleCBmMzhiOWM1Li5iZjgxNzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbGluZWFyLmgKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX0xJTkVBUl9ICiAjZGVmaW5lIF9MSU5FQVJfSAogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCiBzdHJ1Y3QgZGV2X2luZm8gewogCW1ka19yZGV2X3QJKnJkZXY7CiAJc2VjdG9yX3QJbnVtX3NlY3RvcnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggYTMwN2Y4Ny4uZWQ1NzI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzMsOSArMzMsOSBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIGZvciBpbnZhbGlkYXRlX2JkZXYgKi8KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KQEAgLTQ1LDExICs0NSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jZGVmaW5lIE1BSk9SX05SIE1EX01BSk9SCi0KLS8qIDYzIHBhcnRpdGlvbnMgd2l0aCB0aGUgYWx0ZXJuYXRlIG1ham9yIG51bWJlciAobWRwKSAqLwotI2RlZmluZSBNZHBNaW5vclNoaWZ0IDYKKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3AuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAjZGVmaW5lIERFQlVHIDAKICNkZWZpbmUgZHByaW50ayh4Li4uKSAoKHZvaWQpKERFQlVHICYmIHByaW50ayh4KSkpCkBAIC0yMDIsMTIgKzIwMSw2OCBAQAogCQkpCiAKIAotc3RhdGljIGludCBtZF9mYWlsX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKKy8qIFJhdGhlciB0aGFuIGNhbGxpbmcgZGlyZWN0bHkgaW50byB0aGUgcGVyc29uYWxpdHkgbWFrZV9yZXF1ZXN0IGZ1bmN0aW9uLAorICogSU8gcmVxdWVzdHMgY29tZSBoZXJlIGZpcnN0IHNvIHRoYXQgd2UgY2FuIGNoZWNrIGlmIHRoZSBkZXZpY2UgaXMKKyAqIGJlaW5nIHN1c3BlbmRlZCBwZW5kaW5nIGEgcmVjb25maWd1cmF0aW9uLgorICogV2UgaG9sZCBhIHJlZmNvdW50IG92ZXIgdGhlIGNhbGwgdG8gLT5tYWtlX3JlcXVlc3QuICBCeSB0aGUgdGltZSB0aGF0CisgKiBjYWxsIGhhcyBmaW5pc2hlZCwgdGhlIGJpbyBoYXMgYmVlbiBsaW5rZWQgaW50byBzb21lIGludGVybmFsIHN0cnVjdHVyZQorICogYW5kIHNvIGlzIHZpc2libGUgdG8gLT5xdWllc2NlKCksIHNvIHdlIGRvbid0IG5lZWQgdGhlIHJlZmNvdW50IGFueSBtb3JlLgorICovCitzdGF0aWMgaW50IG1kX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQogewotCWJpb19pb19lcnJvcihiaW8pOwotCXJldHVybiAwOworCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOworCWludCBydjsKKwlpZiAobWRkZXYgPT0gTlVMTCB8fCBtZGRldi0+cGVycyA9PSBOVUxMKSB7CisJCWJpb19pb19lcnJvcihiaW8pOworCQlyZXR1cm4gMDsKKwl9CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChtZGRldi0+c3VzcGVuZGVkKSB7CisJCURFRklORV9XQUlUKF9fd2FpdCk7CisJCWZvciAoOzspIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmbWRkZXYtPnNiX3dhaXQsICZfX3dhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICghbWRkZXYtPnN1c3BlbmRlZCkKKwkJCQlicmVhazsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJc2NoZWR1bGUoKTsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJfQorCQlmaW5pc2hfd2FpdCgmbWRkZXYtPnNiX3dhaXQsICZfX3dhaXQpOworCX0KKwlhdG9taWNfaW5jKCZtZGRldi0+YWN0aXZlX2lvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlydiA9IG1kZGV2LT5wZXJzLT5tYWtlX3JlcXVlc3QocSwgYmlvKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbWRkZXYtPmFjdGl2ZV9pbykgJiYgbWRkZXYtPnN1c3BlbmRlZCkKKwkJd2FrZV91cCgmbWRkZXYtPnNiX3dhaXQpOworCisJcmV0dXJuIHJ2OwogfQogCitzdGF0aWMgdm9pZCBtZGRldl9zdXNwZW5kKG1kZGV2X3QgKm1kZGV2KQoreworCUJVR19PTihtZGRldi0+c3VzcGVuZGVkKTsKKwltZGRldi0+c3VzcGVuZGVkID0gMTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBhdG9taWNfcmVhZCgmbWRkZXYtPmFjdGl2ZV9pbykgPT0gMCk7CisJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDEpOworCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kZGV2LT50aHJlYWQgPSBOVUxMOworCS8qIHdlIG5vdyBrbm93IHRoYXQgbm8gY29kZSBpcyBleGVjdXRpbmcgaW4gdGhlIHBlcnNvbmFsaXR5IG1vZHVsZSwKKwkgKiBleGNlcHQgcG9zc2libHkgdGhlIHRhaWwgZW5kIG9mIGEgLT5iaV9lbmRfaW8gZnVuY3Rpb24sIGJ1dCB0aGF0CisJICogaXMgY2VydGFpbiB0byBjb21wbGV0ZSBiZWZvcmUgdGhlIG1vZHVsZSBoYXMgYSBjaGFuY2UgdG8gZ2V0CisJICogdW5sb2FkZWQKKwkgKi8KK30KKworc3RhdGljIHZvaWQgbWRkZXZfcmVzdW1lKG1kZGV2X3QgKm1kZGV2KQoreworCW1kZGV2LT5zdXNwZW5kZWQgPSAwOworCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKKwltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMCk7Cit9CisKKwogc3RhdGljIGlubGluZSBtZGRldl90ICptZGRldl9nZXQobWRkZXZfdCAqbWRkZXYpCiB7CiAJYXRvbWljX2luYygmbWRkZXYtPmFjdGl2ZSk7CkBAIC0zMTAsNiArMzY1LDcgQEAKIAlpbml0X3RpbWVyKCZuZXctPnNhZmVtb2RlX3RpbWVyKTsKIAlhdG9taWNfc2V0KCZuZXctPmFjdGl2ZSwgMSk7CiAJYXRvbWljX3NldCgmbmV3LT5vcGVuZXJzLCAwKTsKKwlhdG9taWNfc2V0KCZuZXctPmFjdGl2ZV9pbywgMCk7CiAJc3Bpbl9sb2NrX2luaXQoJm5ldy0+d3JpdGVfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbmV3LT5zYl93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZXctPnJlY292ZXJ5X3dhaXQpOwpAQCAtMzI2LDYgKzM4MiwxMSBAQAogCXJldHVybiBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG1kZGV2X2lzX2xvY2tlZChtZGRldl90ICptZGRldikKK3sKKwlyZXR1cm4gbXV0ZXhfaXNfbG9ja2VkKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBtZGRldl90cnlsb2NrKG1kZGV2X3QgKiBtZGRldikKIHsKIAlyZXR1cm4gbXV0ZXhfdHJ5bG9jaygmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKQEAgLTQwOSw3ICs0NzAsNyBAQAogCQlyZGV2LT5zYl9sb2FkZWQgPSAwOwogCQlyZGV2LT5zYl9wYWdlID0gTlVMTDsKIAkJcmRldi0+c2Jfc3RhcnQgPSAwOwotCQlyZGV2LT5zaXplID0gMDsKKwkJcmRldi0+c2VjdG9ycyA9IDA7CiAJfQogfQogCkBAIC03NzUsOSArODM2LDkgQEAKIAkJZWxzZSAKIAkJCXJldCA9IDA7CiAJfQotCXJkZXYtPnNpemUgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIHNiLT5jaHVua19zaXplKSAvIDI7CisJcmRldi0+c2VjdG9ycyA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgc2ItPmNodW5rX3NpemUpOwogCi0JaWYgKHJkZXYtPnNpemUgPCBzYi0+c2l6ZSAmJiBzYi0+bGV2ZWwgPiAxKQorCWlmIChyZGV2LT5zZWN0b3JzIDwgc2ItPnNpemUgKiAyICYmIHNiLT5sZXZlbCA+IDEpCiAJCS8qICJ0aGlzIGNhbm5vdCBwb3NzaWJseSBoYXBwZW4iIC4uLiAqLwogCQlyZXQgPSAtRUlOVkFMOwogCkBAIC04MTIsNyArODczLDcgQEAKIAkJbWRkZXYtPmNsZXZlbFswXSA9IDA7CiAJCW1kZGV2LT5sYXlvdXQgPSBzYi0+bGF5b3V0OwogCQltZGRldi0+cmFpZF9kaXNrcyA9IHNiLT5yYWlkX2Rpc2tzOwotCQltZGRldi0+c2l6ZSA9IHNiLT5zaXplOworCQltZGRldi0+ZGV2X3NlY3RvcnMgPSBzYi0+c2l6ZSAqIDI7CiAJCW1kZGV2LT5ldmVudHMgPSBldjE7CiAJCW1kZGV2LT5iaXRtYXBfb2Zmc2V0ID0gMDsKIAkJbWRkZXYtPmRlZmF1bHRfYml0bWFwX29mZnNldCA9IE1EX1NCX0JZVEVTID4+IDk7CkBAIC05MjYsNyArOTg3LDcgQEAKIAogCXNiLT5jdGltZSA9IG1kZGV2LT5jdGltZTsKIAlzYi0+bGV2ZWwgPSBtZGRldi0+bGV2ZWw7Ci0Jc2ItPnNpemUgID0gbWRkZXYtPnNpemU7CisJc2ItPnNpemUgPSBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyOwogCXNiLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CiAJc2ItPm1kX21pbm9yID0gbWRkZXYtPm1kX21pbm9yOwogCXNiLT5ub3RfcGVyc2lzdGVudCA9IDA7CkBAIC0xMDI0LDcgKzEwODUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZwogc3VwZXJfOTBfcmRldl9zaXplX2NoYW5nZShtZGtfcmRldl90ICpyZGV2LCBzZWN0b3JfdCBudW1fc2VjdG9ycykKIHsKLQlpZiAobnVtX3NlY3RvcnMgJiYgbnVtX3NlY3RvcnMgPCByZGV2LT5tZGRldi0+c2l6ZSAqIDIpCisJaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPmRldl9zZWN0b3JzKQogCQlyZXR1cm4gMDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwogCWlmIChyZGV2LT5tZGRldi0+Yml0bWFwX29mZnNldCkKIAkJcmV0dXJuIDA7IC8qIGNhbid0IG1vdmUgYml0bWFwICovCkBAIC0xMTgwLDE2ICsxMjQxLDE3IEBACiAJCQlyZXQgPSAwOwogCX0KIAlpZiAobWlub3JfdmVyc2lvbikKLQkJcmRldi0+c2l6ZSA9ICgocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZT4+OSkgLSBsZTY0X3RvX2NwdShzYi0+ZGF0YV9vZmZzZXQpKSAvIDI7CisJCXJkZXYtPnNlY3RvcnMgPSAocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSAtCisJCQlsZTY0X3RvX2NwdShzYi0+ZGF0YV9vZmZzZXQpOwogCWVsc2UKLQkJcmRldi0+c2l6ZSA9IHJkZXYtPnNiX3N0YXJ0IC8gMjsKLQlpZiAocmRldi0+c2l6ZSA8IGxlNjRfdG9fY3B1KHNiLT5kYXRhX3NpemUpLzIpCisJCXJkZXYtPnNlY3RvcnMgPSByZGV2LT5zYl9zdGFydDsKKwlpZiAocmRldi0+c2VjdG9ycyA8IGxlNjRfdG9fY3B1KHNiLT5kYXRhX3NpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZGV2LT5zaXplID0gbGU2NF90b19jcHUoc2ItPmRhdGFfc2l6ZSkvMjsKKwlyZGV2LT5zZWN0b3JzID0gbGU2NF90b19jcHUoc2ItPmRhdGFfc2l6ZSk7CiAJaWYgKGxlMzJfdG9fY3B1KHNiLT5jaHVua3NpemUpKQotCQlyZGV2LT5zaXplICY9IH4oKHNlY3Rvcl90KWxlMzJfdG9fY3B1KHNiLT5jaHVua3NpemUpLzIgLSAxKTsKKwkJcmRldi0+c2VjdG9ycyAmPSB+KChzZWN0b3JfdClsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKSAtIDEpOwogCi0JaWYgKGxlNjRfdG9fY3B1KHNiLT5zaXplKSA+IHJkZXYtPnNpemUqMikKKwlpZiAobGU2NF90b19jcHUoc2ItPnNpemUpID4gcmRldi0+c2VjdG9ycykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyMTYsNyArMTI3OCw3IEBACiAJCW1kZGV2LT5jbGV2ZWxbMF0gPSAwOwogCQltZGRldi0+bGF5b3V0ID0gbGUzMl90b19jcHUoc2ItPmxheW91dCk7CiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gbGUzMl90b19jcHUoc2ItPnJhaWRfZGlza3MpOwotCQltZGRldi0+c2l6ZSA9IGxlNjRfdG9fY3B1KHNiLT5zaXplKS8yOworCQltZGRldi0+ZGV2X3NlY3RvcnMgPSBsZTY0X3RvX2NwdShzYi0+c2l6ZSk7CiAJCW1kZGV2LT5ldmVudHMgPSBldjE7CiAJCW1kZGV2LT5iaXRtYXBfb2Zmc2V0ID0gMDsKIAkJbWRkZXYtPmRlZmF1bHRfYml0bWFwX29mZnNldCA9IDEwMjQgPj4gOTsKQEAgLTEzMTIsNyArMTM3NCw3IEBACiAJc2ItPmNudF9jb3JyZWN0ZWRfcmVhZCA9IGNwdV90b19sZTMyKGF0b21pY19yZWFkKCZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzKSk7CiAKIAlzYi0+cmFpZF9kaXNrcyA9IGNwdV90b19sZTMyKG1kZGV2LT5yYWlkX2Rpc2tzKTsKLQlzYi0+c2l6ZSA9IGNwdV90b19sZTY0KG1kZGV2LT5zaXplPDwxKTsKKwlzYi0+c2l6ZSA9IGNwdV90b19sZTY0KG1kZGV2LT5kZXZfc2VjdG9ycyk7CiAKIAlpZiAobWRkZXYtPmJpdG1hcCAmJiBtZGRldi0+Yml0bWFwX2ZpbGUgPT0gTlVMTCkgewogCQlzYi0+Yml0bWFwX29mZnNldCA9IGNwdV90b19sZTMyKChfX3UzMiltZGRldi0+Yml0bWFwX29mZnNldCk7CkBAIC0xMzIwLDEwICsxMzgyLDE1IEBACiAJfQogCiAJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCi0JICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCi0JICAgIHJkZXYtPnJlY292ZXJ5X29mZnNldCA+IDApIHsKLQkJc2ItPmZlYXR1cmVfbWFwIHw9IGNwdV90b19sZTMyKE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUKTsKLQkJc2ItPnJlY292ZXJ5X29mZnNldCA9IGNwdV90b19sZTY0KHJkZXYtPnJlY292ZXJ5X29mZnNldCk7CisJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7CisJCWlmIChtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID4gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQorCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKKwkJaWYgKHJkZXYtPnJlY292ZXJ5X29mZnNldCA+IDApIHsKKwkJCXNiLT5mZWF0dXJlX21hcCB8PQorCQkJCWNwdV90b19sZTMyKE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUKTsKKwkJCXNiLT5yZWNvdmVyeV9vZmZzZXQgPQorCQkJCWNwdV90b19sZTY0KHJkZXYtPnJlY292ZXJ5X29mZnNldCk7CisJCX0KIAl9CiAKIAlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7CkBAIC0xMzY1LDcgKzE0MzIsNyBAQAogewogCXN0cnVjdCBtZHBfc3VwZXJibG9ja18xICpzYjsKIAlzZWN0b3JfdCBtYXhfc2VjdG9yczsKLQlpZiAobnVtX3NlY3RvcnMgJiYgbnVtX3NlY3RvcnMgPCByZGV2LT5tZGRldi0+c2l6ZSAqIDIpCisJaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPmRldl9zZWN0b3JzKQogCQlyZXR1cm4gMDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwogCWlmIChyZGV2LT5zYl9zdGFydCA8IHJkZXYtPmRhdGFfb2Zmc2V0KSB7CiAJCS8qIG1pbm9yIHZlcnNpb25zIDEgYW5kIDI7IHN1cGVyYmxvY2sgYmVmb3JlIGRhdGEgKi8KQEAgLTEzODEsNyArMTQ0OCw3IEBACiAJCXNlY3Rvcl90IHNiX3N0YXJ0OwogCQlzYl9zdGFydCA9IChyZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpIC0gOCoyOwogCQlzYl9zdGFydCAmPSB+KHNlY3Rvcl90KSg0KjIgLSAxKTsKLQkJbWF4X3NlY3RvcnMgPSByZGV2LT5zaXplICogMiArIHNiX3N0YXJ0IC0gcmRldi0+c2Jfc3RhcnQ7CisJCW1heF9zZWN0b3JzID0gcmRldi0+c2VjdG9ycyArIHNiX3N0YXJ0IC0gcmRldi0+c2Jfc3RhcnQ7CiAJCWlmICghbnVtX3NlY3RvcnMgfHwgbnVtX3NlY3RvcnMgPiBtYXhfc2VjdG9ycykKIAkJCW51bV9zZWN0b3JzID0gbWF4X3NlY3RvcnM7CiAJCXJkZXYtPnNiX3N0YXJ0ID0gc2Jfc3RhcnQ7CkBAIC0xNDMzLDYgKzE1MDAsMzggQEAKIAogc3RhdGljIExJU1RfSEVBRChwZW5kaW5nX3JhaWRfZGlza3MpOwogCitzdGF0aWMgdm9pZCBtZF9pbnRlZ3JpdHlfY2hlY2sobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpCit7CisJc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcGVycyA9IG1kZGV2LT5wZXJzOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbWRkZXYtPmdlbmRpc2s7CisJc3RydWN0IGJsa19pbnRlZ3JpdHkgKmJpX3JkZXYgPSBiZGV2X2dldF9pbnRlZ3JpdHkocmRldi0+YmRldik7CisJc3RydWN0IGJsa19pbnRlZ3JpdHkgKmJpX21kZGV2ID0gYmxrX2dldF9pbnRlZ3JpdHkoZGlzayk7CisKKwkvKiBEYXRhIGludGVncml0eSBwYXNzdGhyb3VnaCBub3Qgc3VwcG9ydGVkIG9uIFJBSUQgNCwgNSBhbmQgNiAqLworCWlmIChwZXJzICYmIHBlcnMtPmxldmVsID49IDQgJiYgcGVycy0+bGV2ZWwgPD0gNikKKwkJcmV0dXJuOworCisJLyogSWYgcmRldiBpcyBpbnRlZ3JpdHkgY2FwYWJsZSwgcmVnaXN0ZXIgcHJvZmlsZSBmb3IgbWRkZXYgKi8KKwlpZiAoIWJpX21kZGV2ICYmIGJpX3JkZXYpIHsKKwkJaWYgKGJsa19pbnRlZ3JpdHlfcmVnaXN0ZXIoZGlzaywgYmlfcmRldikpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBDb3VsZCBub3QgcmVnaXN0ZXIgaW50ZWdyaXR5IVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgZGlzay0+ZGlza19uYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJFbmFibGluZyBkYXRhIGludGVncml0eSBvbiAlc1xuIiwKKwkJCSAgICAgICBkaXNrLT5kaXNrX25hbWUpOworCQlyZXR1cm47CisJfQorCisJLyogQ2hlY2sgdGhhdCBtZGRldiBhbmQgcmRldiBoYXZlIG1hdGNoaW5nIHByb2ZpbGVzICovCisJaWYgKGJsa19pbnRlZ3JpdHlfY29tcGFyZShkaXNrLCByZGV2LT5iZGV2LT5iZF9kaXNrKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMvJXMgaW50ZWdyaXR5IG1pc21hdGNoIVxuIiwgX19mdW5jX18sCisJCSAgICAgICBkaXNrLT5kaXNrX25hbWUsIHJkZXYtPmJkZXYtPmJkX2Rpc2stPmRpc2tfbmFtZSk7CisJCXByaW50ayhLRVJOX05PVElDRSAiRGlzYWJsaW5nIGRhdGEgaW50ZWdyaXR5IG9uICVzXG4iLAorCQkgICAgICAgZGlzay0+ZGlza19uYW1lKTsKKwkJYmxrX2ludGVncml0eV91bnJlZ2lzdGVyKGRpc2spOworCX0KK30KKwogc3RhdGljIGludCBiaW5kX3JkZXZfdG9fYXJyYXkobWRrX3JkZXZfdCAqIHJkZXYsIG1kZGV2X3QgKiBtZGRldikKIHsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CkBAIC0xNDQ5LDggKzE1NDgsOSBAQAogCWlmIChmaW5kX3JkZXYobWRkZXYsIHJkZXYtPmJkZXYtPmJkX2RldikpCiAJCXJldHVybiAtRUVYSVNUOwogCi0JLyogbWFrZSBzdXJlIHJkZXYtPnNpemUgZXhjZWVkcyBtZGRldi0+c2l6ZSAqLwotCWlmIChyZGV2LT5zaXplICYmIChtZGRldi0+c2l6ZSA9PSAwIHx8IHJkZXYtPnNpemUgPCBtZGRldi0+c2l6ZSkpIHsKKwkvKiBtYWtlIHN1cmUgcmRldi0+c2VjdG9ycyBleGNlZWRzIG1kZGV2LT5kZXZfc2VjdG9ycyAqLworCWlmIChyZGV2LT5zZWN0b3JzICYmIChtZGRldi0+ZGV2X3NlY3RvcnMgPT0gMCB8fAorCQkJcmRldi0+c2VjdG9ycyA8IG1kZGV2LT5kZXZfc2VjdG9ycykpIHsKIAkJaWYgKG1kZGV2LT5wZXJzKSB7CiAJCQkvKiBDYW5ub3QgY2hhbmdlIHNpemUsIHNvIGZhaWwKIAkJCSAqIElmIG1kZGV2LT5sZXZlbCA8PSAwLCB0aGVuIHdlIGRvbid0IGNhcmUKQEAgLTE0NTksNyArMTU1OSw3IEBACiAJCQlpZiAobWRkZXYtPmxldmVsID4gMCkKIAkJCQlyZXR1cm4gLUVOT1NQQzsKIAkJfSBlbHNlCi0JCQltZGRldi0+c2l6ZSA9IHJkZXYtPnNpemU7CisJCQltZGRldi0+ZGV2X3NlY3RvcnMgPSByZGV2LT5zZWN0b3JzOwogCX0KIAogCS8qIFZlcmlmeSByZGV2LT5kZXNjX25yIGlzIHVuaXF1ZS4KQEAgLTE1MDMsNiArMTYwMyw4IEBACiAKIAkvKiBNYXkgYXMgd2VsbCBhbGxvdyByZWNvdmVyeSB0byBiZSByZXRyaWVkIG9uY2UgKi8KIAltZGRldi0+cmVjb3ZlcnlfZGlzYWJsZWQgPSAwOworCisJbWRfaW50ZWdyaXR5X2NoZWNrKHJkZXYsIG1kZGV2KTsKIAlyZXR1cm4gMDsKIAogIGZhaWw6CkBAIC0xNzEzLDggKzE4MTUsOCBAQAogc3RhdGljIHZvaWQgcHJpbnRfcmRldihtZGtfcmRldl90ICpyZGV2LCBpbnQgbWFqb3JfdmVyc2lvbikKIHsKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHJkZXYgJXMsIFNaOiUwOGxsdSBGOiVkIFM6JWQgRE46JXVcbiIsCi0JCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2l6ZSwKKwlwcmludGsoS0VSTl9JTkZPICJtZDogcmRldiAlcywgU2VjdDolMDhsbHUgRjolZCBTOiVkIEROOiV1XG4iLAorCQliZGV2bmFtZShyZGV2LT5iZGV2LCBiKSwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zZWN0b3JzLAogCSAgICAgICAgdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpLCB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpLAogCSAgICAgICAgcmRldi0+ZGVzY19ucik7CiAJaWYgKHJkZXYtPnNiX2xvYWRlZCkgewpAQCAtMjE1Myw3ICsyMjU1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJkZXYtPm1kZGV2LT5wZXJzICYmIHJkZXYtPnJhaWRfZGlzayA+PSAwKQogCQlyZXR1cm4gLUVCVVNZOwotCWlmIChyZGV2LT5zaXplICYmIHJkZXYtPm1kZGV2LT5leHRlcm5hbCkKKwlpZiAocmRldi0+c2VjdG9ycyAmJiByZGV2LT5tZGRldi0+ZXh0ZXJuYWwpCiAJCS8qIE11c3Qgc2V0IG9mZnNldCBiZWZvcmUgc2l6ZSwgc28gb3ZlcmxhcCBjaGVja3MKIAkJICogY2FuIGJlIHNhbmUgKi8KIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTIxNjcsNyArMjI2OSw3IEBACiBzdGF0aWMgc3NpemVfdAogcmRldl9zaXplX3Nob3cobWRrX3JkZXZfdCAqcmRldiwgY2hhciAqcGFnZSkKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplKTsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zZWN0b3JzIC8gMik7CiB9CiAKIHN0YXRpYyBpbnQgb3ZlcmxhcHMoc2VjdG9yX3QgczEsIHNlY3Rvcl90IGwxLCBzZWN0b3JfdCBzMiwgc2VjdG9yX3QgbDIpCkBAIC0yMTgwLDM0ICsyMjgyLDUyIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGNvbnN0IGNoYXIgKmJ1Ziwgc2VjdG9yX3QgKnNlY3RvcnMpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrczsKKwlzZWN0b3JfdCBuZXc7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMTAsICZibG9ja3MpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYmxvY2tzICYgMVVMTCA8PCAoOCAqIHNpemVvZihibG9ja3MpIC0gMSkpCisJCXJldHVybiAtRUlOVkFMOyAvKiBzZWN0b3IgY29udmVyc2lvbiBvdmVyZmxvdyAqLworCisJbmV3ID0gYmxvY2tzICogMjsKKwlpZiAobmV3ICE9IGJsb2NrcyAqIDIpCisJCXJldHVybiAtRUlOVkFMOyAvKiB1bnNpZ25lZCBsb25nIGxvbmcgdG8gc2VjdG9yX3Qgb3ZlcmZsb3cgKi8KKworCSpzZWN0b3JzID0gbmV3OworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3NpemVfdAogcmRldl9zaXplX3N0b3JlKG1ka19yZGV2X3QgKnJkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGxvbmcgb2xkc2l6ZSA9IHJkZXYtPnNpemU7CiAJbWRkZXZfdCAqbXlfbWRkZXYgPSByZGV2LT5tZGRldjsKKwlzZWN0b3JfdCBvbGRzZWN0b3JzID0gcmRldi0+c2VjdG9yczsKKwlzZWN0b3JfdCBzZWN0b3JzOwogCi0JaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDEwLCAmc2l6ZSkgPCAwKQorCWlmIChzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoYnVmLCAmc2VjdG9ycykgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXlfbWRkZXYtPnBlcnMgJiYgcmRldi0+cmFpZF9kaXNrID49IDApIHsKIAkJaWYgKG15X21kZGV2LT5wZXJzaXN0ZW50KSB7Ci0JCQlzaXplID0gc3VwZXJfdHlwZXNbbXlfbWRkZXYtPm1ham9yX3ZlcnNpb25dLgotCQkJCXJkZXZfc2l6ZV9jaGFuZ2UocmRldiwgc2l6ZSAqIDIpOwotCQkJaWYgKCFzaXplKQorCQkJc2VjdG9ycyA9IHN1cGVyX3R5cGVzW215X21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KKwkJCQlyZGV2X3NpemVfY2hhbmdlKHJkZXYsIHNlY3RvcnMpOworCQkJaWYgKCFzZWN0b3JzKQogCQkJCXJldHVybiAtRUJVU1k7Ci0JCX0gZWxzZSBpZiAoIXNpemUpIHsKLQkJCXNpemUgPSAocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiAxMCk7Ci0JCQlzaXplIC09IHJkZXYtPmRhdGFfb2Zmc2V0LzI7Ci0JCX0KKwkJfSBlbHNlIGlmICghc2VjdG9ycykKKwkJCXNlY3RvcnMgPSAocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSAtCisJCQkJcmRldi0+ZGF0YV9vZmZzZXQ7CiAJfQotCWlmIChzaXplIDwgbXlfbWRkZXYtPnNpemUpCisJaWYgKHNlY3RvcnMgPCBteV9tZGRldi0+ZGV2X3NlY3RvcnMpCiAJCXJldHVybiAtRUlOVkFMOyAvKiBjb21wb25lbnQgbXVzdCBmaXQgZGV2aWNlICovCiAKLQlyZGV2LT5zaXplID0gc2l6ZTsKLQlpZiAoc2l6ZSA+IG9sZHNpemUgJiYgbXlfbWRkZXYtPmV4dGVybmFsKSB7CisJcmRldi0+c2VjdG9ycyA9IHNlY3RvcnM7CisJaWYgKHNlY3RvcnMgPiBvbGRzZWN0b3JzICYmIG15X21kZGV2LT5leHRlcm5hbCkgewogCQkvKiBuZWVkIHRvIGNoZWNrIHRoYXQgYWxsIG90aGVyIHJkZXZzIHdpdGggdGhlIHNhbWUgLT5iZGV2CiAJCSAqIGRvIG5vdCBvdmVybGFwLiAgV2UgbmVlZCB0byB1bmxvY2sgdGhlIG1kZGV2IHRvIGF2b2lkCi0JCSAqIGEgZGVhZGxvY2suICBXZSBoYXZlIGFscmVhZHkgY2hhbmdlZCByZGV2LT5zaXplLCBhbmQgaWYKKwkJICogYSBkZWFkbG9jay4gIFdlIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHJkZXYtPnNlY3RvcnMsIGFuZCBpZgogCQkgKiB3ZSBoYXZlIHRvIGNoYW5nZSBpdCBiYWNrLCB3ZSB3aWxsIGhhdmUgdGhlIGxvY2sgYWdhaW4uCiAJCSAqLwogCQltZGRldl90ICptZGRldjsKQEAgLTIyMjMsOSArMjM0Myw5IEBACiAJCQkJaWYgKHRlc3RfYml0KEFsbFJlc2VydmVkLCAmcmRldjItPmZsYWdzKSB8fAogCQkJCSAgICAocmRldi0+YmRldiA9PSByZGV2Mi0+YmRldiAmJgogCQkJCSAgICAgcmRldiAhPSByZGV2MiAmJgotCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNpemUgKiAyLAorCQkJCSAgICAgb3ZlcmxhcHMocmRldi0+ZGF0YV9vZmZzZXQsIHJkZXYtPnNlY3RvcnMsCiAJCQkJCSAgICAgIHJkZXYyLT5kYXRhX29mZnNldCwKLQkJCQkJICAgICAgcmRldjItPnNpemUgKiAyKSkpIHsKKwkJCQkJICAgICAgcmRldjItPnNlY3RvcnMpKSkgewogCQkJCQlvdmVybGFwID0gMTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMjIzOSwxMSArMjM1OSwxMSBAQAogCQlpZiAob3ZlcmxhcCkgewogCQkJLyogU29tZW9uZSBlbHNlIGNvdWxkIGhhdmUgc2xpcHBlZCBpbiBhIHNpemUKIAkJCSAqIGNoYW5nZSBoZXJlLCBidXQgZG9pbmcgc28gaXMganVzdCBzaWxseS4KLQkJCSAqIFdlIHB1dCBvbGRzaXplIGJhY2sgYmVjYXVzZSB3ZSAqa25vdyogaXQgaXMKKwkJCSAqIFdlIHB1dCBvbGRzZWN0b3JzIGJhY2sgYmVjYXVzZSB3ZSAqa25vdyogaXQgaXMKIAkJCSAqIHNhZmUsIGFuZCB0cnVzdCB1c2Vyc3BhY2Ugbm90IHRvIHJhY2Ugd2l0aAogCQkJICogaXRzZWxmCiAJCQkgKi8KLQkJCXJkZXYtPnNpemUgPSBvbGRzaXplOworCQkJcmRldi0+c2VjdG9ycyA9IG9sZHNlY3RvcnM7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQpAQCAtMjU0NywxOCArMjY2NywxMDEgQEAKIHN0YXRpYyBzc2l6ZV90CiBsZXZlbF9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogeworCWNoYXIgbGV2ZWxbMTZdOwogCXNzaXplX3QgcnYgPSBsZW47Ci0JaWYgKG1kZGV2LT5wZXJzKQorCXN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnBlcnM7CisJdm9pZCAqcHJpdjsKKworCWlmIChtZGRldi0+cGVycyA9PSBOVUxMKSB7CisJCWlmIChsZW4gPT0gMCkKKwkJCXJldHVybiAwOworCQlpZiAobGVuID49IHNpemVvZihtZGRldi0+Y2xldmVsKSkKKwkJCXJldHVybiAtRU5PU1BDOworCQlzdHJuY3B5KG1kZGV2LT5jbGV2ZWwsIGJ1ZiwgbGVuKTsKKwkJaWYgKG1kZGV2LT5jbGV2ZWxbbGVuLTFdID09ICdcbicpCisJCQlsZW4tLTsKKwkJbWRkZXYtPmNsZXZlbFtsZW5dID0gMDsKKwkJbWRkZXYtPmxldmVsID0gTEVWRUxfTk9ORTsKKwkJcmV0dXJuIHJ2OworCX0KKworCS8qIHJlcXVlc3QgdG8gY2hhbmdlIHRoZSBwZXJzb25hbGl0eS4gIE5lZWQgdG8gZW5zdXJlOgorCSAqICAtIGFycmF5IGlzIG5vdCBlbmdhZ2VkIGluIHJlc3luYy9yZWNvdmVyeS9yZXNoYXBlCisJICogIC0gb2xkIHBlcnNvbmFsaXR5IGNhbiBiZSBzdXNwZW5kZWQKKwkgKiAgLSBuZXcgcGVyc29uYWxpdHkgd2lsbCBhY2Nlc3Mgb3RoZXIgYXJyYXkuCisJICovCisKKwlpZiAobWRkZXYtPnN5bmNfdGhyZWFkIHx8IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAobGVuID09IDApCi0JCXJldHVybiAwOwotCWlmIChsZW4gPj0gc2l6ZW9mKG1kZGV2LT5jbGV2ZWwpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQlzdHJuY3B5KG1kZGV2LT5jbGV2ZWwsIGJ1ZiwgbGVuKTsKLQlpZiAobWRkZXYtPmNsZXZlbFtsZW4tMV0gPT0gJ1xuJykKKworCWlmICghbWRkZXYtPnBlcnMtPnF1aWVzY2UpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6ICVzOiAlcyBkb2VzIG5vdCBzdXBwb3J0IG9ubGluZSBwZXJzb25hbGl0eSBjaGFuZ2VcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBtZGRldi0+cGVycy0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE5vdyBmaW5kIHRoZSBuZXcgcGVyc29uYWxpdHkgKi8KKwlpZiAobGVuID09IDAgfHwgbGVuID49IHNpemVvZihsZXZlbCkpCisJCXJldHVybiAtRUlOVkFMOworCXN0cm5jcHkobGV2ZWwsIGJ1ZiwgbGVuKTsKKwlpZiAobGV2ZWxbbGVuLTFdID09ICdcbicpCiAJCWxlbi0tOwotCW1kZGV2LT5jbGV2ZWxbbGVuXSA9IDA7Ci0JbWRkZXYtPmxldmVsID0gTEVWRUxfTk9ORTsKKwlsZXZlbFtsZW5dID0gMDsKKworCXJlcXVlc3RfbW9kdWxlKCJtZC0lcyIsIGxldmVsKTsKKwlzcGluX2xvY2soJnBlcnNfbG9jayk7CisJcGVycyA9IGZpbmRfcGVycyhMRVZFTF9OT05FLCBsZXZlbCk7CisJaWYgKCFwZXJzIHx8ICF0cnlfbW9kdWxlX2dldChwZXJzLT5vd25lcikpIHsKKwkJc3Bpbl91bmxvY2soJnBlcnNfbG9jayk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiBwZXJzb25hbGl0eSAlcyBub3QgbG9hZGVkXG4iLCBsZXZlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX3VubG9jaygmcGVyc19sb2NrKTsKKworCWlmIChwZXJzID09IG1kZGV2LT5wZXJzKSB7CisJCS8qIE5vdGhpbmcgdG8gZG8hICovCisJCW1vZHVsZV9wdXQocGVycy0+b3duZXIpOworCQlyZXR1cm4gcnY7CisJfQorCWlmICghcGVycy0+dGFrZW92ZXIpIHsKKwkJbW9kdWxlX3B1dChwZXJzLT5vd25lcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiAlczogJXMgZG9lcyBub3Qgc3VwcG9ydCBwZXJzb25hbGl0eSB0YWtlb3ZlclxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIGxldmVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogLT50YWtlb3ZlciBtdXN0IHNldCBuZXdfKiBhbmQvb3IgZGVsdGFfZGlza3MKKwkgKiBpZiBpdCBzdWNjZWVkcywgYW5kIG1heSBzZXQgdGhlbSB3aGVuIGl0IGZhaWxzLgorCSAqLworCXByaXYgPSBwZXJzLT50YWtlb3ZlcihtZGRldik7CisJaWYgKElTX0VSUihwcml2KSkgeworCQltZGRldi0+bmV3X2xldmVsID0gbWRkZXYtPmxldmVsOworCQltZGRldi0+bmV3X2xheW91dCA9IG1kZGV2LT5sYXlvdXQ7CisJCW1kZGV2LT5uZXdfY2h1bmsgPSBtZGRldi0+Y2h1bmtfc2l6ZTsKKwkJbWRkZXYtPnJhaWRfZGlza3MgLT0gbWRkZXYtPmRlbHRhX2Rpc2tzOworCQltZGRldi0+ZGVsdGFfZGlza3MgPSAwOworCQltb2R1bGVfcHV0KHBlcnMtPm93bmVyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibWQ6ICVzOiAlcyB3b3VsZCBub3QgYWNjZXB0IGFycmF5XG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbGV2ZWwpOworCQlyZXR1cm4gUFRSX0VSUihwcml2KTsKKwl9CisKKwkvKiBMb29rcyBsaWtlIHdlIGhhdmUgYSB3aW5uZXIgKi8KKwltZGRldl9zdXNwZW5kKG1kZGV2KTsKKwltZGRldi0+cGVycy0+c3RvcChtZGRldik7CisJbW9kdWxlX3B1dChtZGRldi0+cGVycy0+b3duZXIpOworCW1kZGV2LT5wZXJzID0gcGVyczsKKwltZGRldi0+cHJpdmF0ZSA9IHByaXY7CisJc3RybGNweShtZGRldi0+Y2xldmVsLCBwZXJzLT5uYW1lLCBzaXplb2YobWRkZXYtPmNsZXZlbCkpOworCW1kZGV2LT5sZXZlbCA9IG1kZGV2LT5uZXdfbGV2ZWw7CisJbWRkZXYtPmxheW91dCA9IG1kZGV2LT5uZXdfbGF5b3V0OworCW1kZGV2LT5jaHVua19zaXplID0gbWRkZXYtPm5ld19jaHVuazsKKwltZGRldi0+ZGVsdGFfZGlza3MgPSAwOworCXBlcnMtPnJ1bihtZGRldik7CisJbWRkZXZfcmVzdW1lKG1kZGV2KTsKKwlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKKwlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CisJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTI1ODYsMTIgKzI3ODksMTggQEAKIAlpZiAoISpidWYgfHwgKCplICYmICplICE9ICdcbicpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtZGRldi0+cGVycykKLQkJcmV0dXJuIC1FQlVTWTsKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKQorCWlmIChtZGRldi0+cGVycykgeworCQlpbnQgZXJyOworCQlpZiAobWRkZXYtPnBlcnMtPnJlY29uZmlnID09IE5VTEwpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBtZGRldi0+cGVycy0+cmVjb25maWcobWRkZXYsIG4sIC0xKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKIAkJbWRkZXYtPm5ld19sYXlvdXQgPSBuOwotCWVsc2UKLQkJbWRkZXYtPmxheW91dCA9IG47CisJCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCQltZGRldi0+bGF5b3V0ID0gbjsKKwl9CiAJcmV0dXJuIGxlbjsKIH0KIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfbGF5b3V0ID0KQEAgLTI2NDgsMTkgKzI4NTcsMjQgQEAKIHN0YXRpYyBzc2l6ZV90CiBjaHVua19zaXplX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7Ci0JLyogY2FuIG9ubHkgc2V0IGNodW5rX3NpemUgaWYgYXJyYXkgaXMgbm90IHlldCBhY3RpdmUgKi8KIAljaGFyICplOwogCXVuc2lnbmVkIGxvbmcgbiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmUsIDEwKTsKIAogCWlmICghKmJ1ZiB8fCAoKmUgJiYgKmUgIT0gJ1xuJykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG1kZGV2LT5wZXJzKQotCQlyZXR1cm4gLUVCVVNZOwotCWVsc2UgaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikKKwlpZiAobWRkZXYtPnBlcnMpIHsKKwkJaW50IGVycjsKKwkJaWYgKG1kZGV2LT5wZXJzLT5yZWNvbmZpZyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZXJyID0gbWRkZXYtPnBlcnMtPnJlY29uZmlnKG1kZGV2LCAtMSwgbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CiAJCW1kZGV2LT5uZXdfY2h1bmsgPSBuOwotCWVsc2UKLQkJbWRkZXYtPmNodW5rX3NpemUgPSBuOworCQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQkJbWRkZXYtPmNodW5rX3NpemUgPSBuOworCX0KIAlyZXR1cm4gbGVuOwogfQogc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9jaHVua19zaXplID0KQEAgLTI2NjksNiArMjg4Myw4IEBACiBzdGF0aWMgc3NpemVfdAogcmVzeW5jX3N0YXJ0X3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7CisJaWYgKG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJub25lXG4iKTsKIAlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+cmVjb3ZlcnlfY3ApOwogfQogCkBAIC0yNzY2LDcgKzI5ODIsNyBAQAogCWVsc2UgewogCQlpZiAobGlzdF9lbXB0eSgmbWRkZXYtPmRpc2tzKSAmJgogCQkgICAgbWRkZXYtPnJhaWRfZGlza3MgPT0gMCAmJgotCQkgICAgbWRkZXYtPnNpemUgPT0gMCkKKwkJICAgIG1kZGV2LT5kZXZfc2VjdG9ycyA9PSAwKQogCQkJc3QgPSBjbGVhcjsKIAkJZWxzZQogCQkJc3QgPSBpbmFjdGl2ZTsKQEAgLTI5NzMsNyArMzE4OSw4IEBACiBzdGF0aWMgc3NpemVfdAogc2l6ZV9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQogewotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5zaXplKTsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+ZGV2X3NlY3RvcnMgLyAyKTsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3QgbnVtX3NlY3RvcnMpOwpAQCAtMjk4NSwyMCArMzIwMiwxOCBAQAogCSAqIG5vdCBpbmNyZWFzZSBpdCAoZXhjZXB0IGZyb20gMCkuCiAJICogSWYgYXJyYXkgaXMgYWN0aXZlLCB3ZSBjYW4gdHJ5IGFuIG9uLWxpbmUgcmVzaXplCiAJICovCi0JY2hhciAqZTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsbChidWYsICZlLCAxMCk7Ci0JaWYgKCEqYnVmIHx8ICpidWYgPT0gJ1xuJyB8fAotCSAgICAoKmUgJiYgKmUgIT0gJ1xuJykpCi0JCXJldHVybiAtRUlOVkFMOworCXNlY3Rvcl90IHNlY3RvcnM7CisJaW50IGVyciA9IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhidWYsICZzZWN0b3JzKTsKIAorCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmIChtZGRldi0+cGVycykgewotCQllcnIgPSB1cGRhdGVfc2l6ZShtZGRldiwgc2l6ZSAqIDIpOworCQllcnIgPSB1cGRhdGVfc2l6ZShtZGRldiwgc2VjdG9ycyk7CiAJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAJfSBlbHNlIHsKLQkJaWYgKG1kZGV2LT5zaXplID09IDAgfHwKLQkJICAgIG1kZGV2LT5zaXplID4gc2l6ZSkKLQkJCW1kZGV2LT5zaXplID0gc2l6ZTsKKwkJaWYgKG1kZGV2LT5kZXZfc2VjdG9ycyA9PSAwIHx8CisJCSAgICBtZGRldi0+ZGV2X3NlY3RvcnMgPiBzZWN0b3JzKQorCQkJbWRkZXYtPmRldl9zZWN0b3JzID0gc2VjdG9yczsKIAkJZWxzZQogCQkJZXJyID0gLUVOT1NQQzsKIAl9CkBAIC0zMjUxLDYgKzM0NjYsOCBAQAogc3luY19zcGVlZF9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQogewogCXVuc2lnbmVkIGxvbmcgcmVzeW5jLCBkdCwgZGI7CisJaWYgKG1kZGV2LT5jdXJyX3Jlc3luYyA9PSAwKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAibm9uZVxuIik7CiAJcmVzeW5jID0gbWRkZXYtPmN1cnJfbWFya19jbnQgLSBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSk7CiAJZHQgPSAoamlmZmllcyAtIG1kZGV2LT5yZXN5bmNfbWFyaykgLyBIWjsKIAlpZiAoIWR0KSBkdCsrOwpAQCAtMzI2MywxNSArMzQ4MCwxNSBAQAogc3RhdGljIHNzaXplX3QKIHN5bmNfY29tcGxldGVkX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXhfYmxvY2tzLCByZXN5bmM7CisJdW5zaWduZWQgbG9uZyBtYXhfc2VjdG9ycywgcmVzeW5jOwogCiAJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKQotCQltYXhfYmxvY2tzID0gbWRkZXYtPnJlc3luY19tYXhfc2VjdG9yczsKKwkJbWF4X3NlY3RvcnMgPSBtZGRldi0+cmVzeW5jX21heF9zZWN0b3JzOwogCWVsc2UKLQkJbWF4X2Jsb2NrcyA9IG1kZGV2LT5zaXplIDw8IDE7CisJCW1heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCiAJcmVzeW5jID0gKG1kZGV2LT5jdXJyX3Jlc3luYyAtIGF0b21pY19yZWFkKCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlKSk7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVsdSAvICVsdVxuIiwgcmVzeW5jLCBtYXhfYmxvY2tzKTsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWx1IC8gJWx1XG4iLCByZXN5bmMsIG1heF9zZWN0b3JzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9zeW5jX2NvbXBsZXRlZCA9IF9fQVRUUl9STyhzeW5jX2NvbXBsZXRlZCk7CkBAIC0zNDMxLDYgKzM2NDgsNTcgQEAKIF9fQVRUUihyZXNoYXBlX3Bvc2l0aW9uLCBTX0lSVUdPfFNfSVdVU1IsIHJlc2hhcGVfcG9zaXRpb25fc2hvdywKICAgICAgICByZXNoYXBlX3Bvc2l0aW9uX3N0b3JlKTsKIAorc3RhdGljIHNzaXplX3QKK2FycmF5X3NpemVfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKK3sKKwlpZiAobWRkZXYtPmV4dGVybmFsX3NpemUpCisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbGx1XG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPmFycmF5X3NlY3RvcnMvMik7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiZGVmYXVsdFxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CithcnJheV9zaXplX3N0b3JlKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc2VjdG9yX3Qgc2VjdG9yczsKKworCWlmIChzdHJuY21wKGJ1ZiwgImRlZmF1bHQiLCA3KSA9PSAwKSB7CisJCWlmIChtZGRldi0+cGVycykKKwkJCXNlY3RvcnMgPSBtZGRldi0+cGVycy0+c2l6ZShtZGRldiwgMCwgMCk7CisJCWVsc2UKKwkJCXNlY3RvcnMgPSBtZGRldi0+YXJyYXlfc2VjdG9yczsKKworCQltZGRldi0+ZXh0ZXJuYWxfc2l6ZSA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhidWYsICZzZWN0b3JzKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1kZGV2LT5wZXJzICYmIG1kZGV2LT5wZXJzLT5zaXplKG1kZGV2LCAwLCAwKSA8IHNlY3RvcnMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZGRldi0+ZXh0ZXJuYWxfc2l6ZSA9IDE7CisJfQorCisJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBzZWN0b3JzOworCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOworCWlmIChtZGRldi0+cGVycykgeworCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gYmRnZXRfZGlzayhtZGRldi0+Z2VuZGlzaywgMCk7CisKKwkJaWYgKGJkZXYpIHsKKwkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwKKwkJCQkgICAgIChsb2ZmX3QpbWRkZXYtPmFycmF5X3NlY3RvcnMgPDwgOSk7CisJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCWJkcHV0KGJkZXYpOworCQl9CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBtZF9zeXNmc19lbnRyeSBtZF9hcnJheV9zaXplID0KK19fQVRUUihhcnJheV9zaXplLCBTX0lSVUdPfFNfSVdVU1IsIGFycmF5X3NpemVfc2hvdywKKyAgICAgICBhcnJheV9zaXplX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1kX2RlZmF1bHRfYXR0cnNbXSA9IHsKIAkmbWRfbGV2ZWwuYXR0ciwKQEAgLTM0NDQsNiArMzcxMiw3IEBACiAJJm1kX3NhZmVfZGVsYXkuYXR0ciwKIAkmbWRfYXJyYXlfc3RhdGUuYXR0ciwKIAkmbWRfcmVzaGFwZV9wb3NpdGlvbi5hdHRyLAorCSZtZF9hcnJheV9zaXplLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTM2MDIsMTAgKzM4NzEsMTIgQEAKIAkJbWRkZXZfcHV0KG1kZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW1kZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gbWRkZXY7CisKIAkvKiBDYW4gYmUgdW5sb2NrZWQgYmVjYXVzZSB0aGUgcXVldWUgaXMgbmV3OiBubyBjb25jdXJyZW5jeSAqLwogCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfQ0xVU1RFUiwgbWRkZXYtPnF1ZXVlKTsKIAotCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWRkZXYtPnF1ZXVlLCBtZF9mYWlsX3JlcXVlc3QpOworCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWRkZXYtPnF1ZXVlLCBtZF9tYWtlX3JlcXVlc3QpOwogCiAJZGlzayA9IGFsbG9jX2Rpc2soMSA8PCBzaGlmdCk7CiAJaWYgKCFkaXNrKSB7CkBAIC0zNzMxLDEzICs0MDAyLDEzIEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpCiAJCQkJY29udGludWU7Ci0JCQlpZiAocmRldi0+c2l6ZSA8IGNodW5rX3NpemUgLyAxMDI0KSB7CisJCQlpZiAocmRldi0+c2VjdG9ycyA8IGNodW5rX3NpemUgLyA1MTIpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJCSJtZDogRGV2ICVzIHNtYWxsZXIgdGhhbiBjaHVua19zaXplOiIKLQkJCQkJIiAlbGx1ayA8ICVka1xuIiwKKwkJCQkJIiAlbGx1IDwgJWRcbiIsCiAJCQkJCWJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2l6ZSwKLQkJCQkJY2h1bmtfc2l6ZSAvIDEwMjQpOworCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNlY3RvcnMsCisJCQkJCWNodW5rX3NpemUgLyA1MTIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CkBAIC0zNzYxLDExICs0MDMyLDExIEBACiAKIAkJLyogcGVyZm9ybSBzb21lIGNvbnNpc3RlbmN5IHRlc3RzIG9uIHRoZSBkZXZpY2UuCiAJCSAqIFdlIGRvbid0IHdhbnQgdGhlIGRhdGEgdG8gb3ZlcmxhcCB0aGUgbWV0YWRhdGEsCi0JCSAqIEludGVybmFsIEJpdG1hcCBpc3N1ZXMgaGFzIGhhbmRsZWQgZWxzZXdoZXJlLgorCQkgKiBJbnRlcm5hbCBCaXRtYXAgaXNzdWVzIGhhdmUgYmVlbiBoYW5kbGVkIGVsc2V3aGVyZS4KIAkJICovCiAJCWlmIChyZGV2LT5kYXRhX29mZnNldCA8IHJkZXYtPnNiX3N0YXJ0KSB7Ci0JCQlpZiAobWRkZXYtPnNpemUgJiYKLQkJCSAgICByZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5zaXplKjIKKwkJCWlmIChtZGRldi0+ZGV2X3NlY3RvcnMgJiYKKwkJCSAgICByZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5kZXZfc2VjdG9ycwogCQkJICAgID4gcmRldi0+c2Jfc3RhcnQpIHsKIAkJCQlwcmludGsoIm1kOiAlczogZGF0YSBvdmVybGFwcyBtZXRhZGF0YVxuIiwKIAkJCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CkBAIC0zODAxLDkgKzQwNzIsMTYgQEAKIAl9CiAJbWRkZXYtPnBlcnMgPSBwZXJzOwogCXNwaW5fdW5sb2NrKCZwZXJzX2xvY2spOwotCW1kZGV2LT5sZXZlbCA9IHBlcnMtPmxldmVsOworCWlmIChtZGRldi0+bGV2ZWwgIT0gcGVycy0+bGV2ZWwpIHsKKwkJbWRkZXYtPmxldmVsID0gcGVycy0+bGV2ZWw7CisJCW1kZGV2LT5uZXdfbGV2ZWwgPSBwZXJzLT5sZXZlbDsKKwl9CiAJc3RybGNweShtZGRldi0+Y2xldmVsLCBwZXJzLT5uYW1lLCBzaXplb2YobWRkZXYtPmNsZXZlbCkpOwogCisJaWYgKHBlcnMtPmxldmVsID49IDQgJiYgcGVycy0+bGV2ZWwgPD0gNikKKwkJLyogQ2Fubm90IHN1cHBvcnQgaW50ZWdyaXR5ICh5ZXQpICovCisJCWJsa19pbnRlZ3JpdHlfdW5yZWdpc3RlcihtZGRldi0+Z2VuZGlzayk7CisKIAlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yICYmCiAJICAgIHBlcnMtPnN0YXJ0X3Jlc2hhcGUgPT0gTlVMTCkgewogCQkvKiBUaGlzIHBlcnNvbmFsaXR5IGNhbm5vdCBoYW5kbGUgcmVzaGFwaW5nLi4uICovCkBAIC0zODQzLDcgKzQxMjEsOSBAQAogCX0KIAogCW1kZGV2LT5yZWNvdmVyeSA9IDA7Ci0JbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5zaXplIDw8IDE7IC8qIG1heSBiZSBvdmVyLXJpZGRlbiBieSBwZXJzb25hbGl0eSAqLworCS8qIG1heSBiZSBvdmVyLXJpZGRlbiBieSBwZXJzb25hbGl0eSAqLworCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CisKIAltZGRldi0+YmFycmllcnNfd29yayA9IDE7CiAJbWRkZXYtPm9rX3N0YXJ0X2RlZ3JhZGVkID0gc3RhcnRfZGlydHlfZGVncmFkZWQ7CiAKQEAgLTM4NTMsNyArNDEzMywxNyBAQAogCWVyciA9IG1kZGV2LT5wZXJzLT5ydW4obWRkZXYpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAibWQ6IHBlcnMtPnJ1bigpIGZhaWxlZCAuLi5cbiIpOwotCWVsc2UgaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKKwllbHNlIGlmIChtZGRldi0+cGVycy0+c2l6ZShtZGRldiwgMCwgMCkgPCBtZGRldi0+YXJyYXlfc2VjdG9ycykgeworCQlXQVJOX09OQ0UoIW1kZGV2LT5leHRlcm5hbF9zaXplLCAiJXM6IGRlZmF1bHQgc2l6ZSB0b28gc21hbGwsIgorCQkJICAiIGJ1dCAnZXh0ZXJuYWxfc2l6ZScgbm90IGluIGVmZmVjdD9cbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibWQ6IGludmFsaWQgYXJyYXlfc2l6ZSAlbGx1ID4gZGVmYXVsdCBzaXplICVsbHVcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5hcnJheV9zZWN0b3JzIC8gMiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPnBlcnMtPnNpemUobWRkZXYsIDAsIDApIC8gMik7CisJCWVyciA9IC1FSU5WQUw7CisJCW1kZGV2LT5wZXJzLT5zdG9wKG1kZGV2KTsKKwl9CisJaWYgKGVyciA9PSAwICYmIG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKIAkJZXJyID0gYml0bWFwX2NyZWF0ZShtZGRldik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgYml0bWFwICglZClcbiIsCkBAIC0zODk5LDE2ICs0MTg5LDYgQEAKIAogCXNldF9jYXBhY2l0eShkaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAKLQkvKiBJZiB3ZSBjYWxsIGJsa19xdWV1ZV9tYWtlX3JlcXVlc3QgaGVyZSwgaXQgd2lsbAotCSAqIHJlLWluaXRpYWxpc2UgbWF4X3NlY3RvcnMgZXRjIHdoaWNoIG1heSBoYXZlIGJlZW4KLQkgKiByZWZpbmVkIGluc2lkZSAtPiBydW4uICBTbyBqdXN0IHNldCB0aGUgYml0cyB3ZSBuZWVkIHRvIHNldC4KLQkgKiBNb3N0IGluaXRpYWxpc2F0aW9uIGhhcHBlbmRlZCB3aGVuIHdlIGNhbGxlZAotCSAqIGJsa19xdWV1ZV9tYWtlX3JlcXVlc3QoLi4uLCBtZF9mYWlsX3JlcXVlc3QpCi0JICogZWFybGllci4KLQkgKi8KLQltZGRldi0+cXVldWUtPnF1ZXVlZGF0YSA9IG1kZGV2OwotCW1kZGV2LT5xdWV1ZS0+bWFrZV9yZXF1ZXN0X2ZuID0gbWRkZXYtPnBlcnMtPm1ha2VfcmVxdWVzdDsKLQogCS8qIElmIHRoZXJlIGlzIGEgcGFydGlhbGx5LXJlY292ZXJlZCBkcml2ZSB3ZSBuZWVkIHRvCiAJICogc3RhcnQgcmVjb3ZlcnkgaGVyZS4gIElmIHdlIGxlYXZlIGl0IHRvIG1kX2NoZWNrX3JlY292ZXJ5LAogCSAqIGl0IHdpbGwgcmVtb3ZlIHRoZSBkcml2ZXMgYW5kIG5vdCBkbyB0aGUgcmlnaHQgdGhpbmcKQEAgLTQwMzgsNyArNDMxOCw3IEBACiAJCQltZF9zdXBlcl93YWl0KG1kZGV2KTsKIAkJCWlmIChtZGRldi0+cm8pCiAJCQkJc2V0X2Rpc2tfcm8oZGlzaywgMCk7Ci0JCQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG1kZGV2LT5xdWV1ZSwgbWRfZmFpbF9yZXF1ZXN0KTsKKwogCQkJbWRkZXYtPnBlcnMtPnN0b3AobWRkZXYpOwogCQkJbWRkZXYtPnF1ZXVlLT5tZXJnZV9idmVjX2ZuID0gTlVMTDsKIAkJCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gTlVMTDsKQEAgLTQwOTUsNyArNDM3NSw4IEBACiAJCWV4cG9ydF9hcnJheShtZGRldik7CiAKIAkJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSAwOwotCQltZGRldi0+c2l6ZSA9IDA7CisJCW1kZGV2LT5leHRlcm5hbF9zaXplID0gMDsKKwkJbWRkZXYtPmRldl9zZWN0b3JzID0gMDsKIAkJbWRkZXYtPnJhaWRfZGlza3MgPSAwOwogCQltZGRldi0+cmVjb3ZlcnlfY3AgPSAwOwogCQltZGRldi0+cmVzeW5jX21pbiA9IDA7CkBAIC00MTM1LDYgKzQ0MTYsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICJtZDogJXMgc3dpdGNoZWQgdG8gcmVhZC1vbmx5IG1vZGUuXG4iLAogCQkJbWRuYW1lKG1kZGV2KSk7CiAJZXJyID0gMDsKKwlibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoZGlzayk7CiAJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19zdGF0ZSk7CiBvdXQ6CkBAIC00MzAwLDggKzQ1ODIsOCBAQAogCWluZm8ucGF0Y2hfdmVyc2lvbiA9IE1EX1BBVENITEVWRUxfVkVSU0lPTjsKIAlpbmZvLmN0aW1lICAgICAgICAgPSBtZGRldi0+Y3RpbWU7CiAJaW5mby5sZXZlbCAgICAgICAgID0gbWRkZXYtPmxldmVsOwotCWluZm8uc2l6ZSAgICAgICAgICA9IG1kZGV2LT5zaXplOwotCWlmIChpbmZvLnNpemUgIT0gbWRkZXYtPnNpemUpIC8qIG92ZXJmbG93ICovCisJaW5mby5zaXplICAgICAgICAgID0gbWRkZXYtPmRldl9zZWN0b3JzIC8gMjsKKwlpZiAoaW5mby5zaXplICE9IG1kZGV2LT5kZXZfc2VjdG9ycyAvIDIpIC8qIG92ZXJmbG93ICovCiAJCWluZm8uc2l6ZSA9IC0xOwogCWluZm8ubnJfZGlza3MgICAgICA9IG5yOwogCWluZm8ucmFpZF9kaXNrcyAgICA9IG1kZGV2LT5yYWlkX2Rpc2tzOwpAQCAtNDQ4MCw2ICs0NzYyLDggQEAKIAkJY2xlYXJfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7IC8qIGp1c3QgdG8gYmUgc3VyZSAqLwogCQlpZiAoaW5mby0+c3RhdGUgJiAoMTw8TURfRElTS19XUklURU1PU1RMWSkpCiAJCQlzZXRfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOworCQllbHNlCisJCQljbGVhcl9iaXQoV3JpdGVNb3N0bHksICZyZGV2LT5mbGFncyk7CiAKIAkJcmRldi0+cmFpZF9kaXNrID0gLTE7CiAJCWVyciA9IGJpbmRfcmRldl90b19hcnJheShyZGV2LCBtZGRldik7CkBAIC00NTQzLDcgKzQ4MjcsNyBAQAogCQkJcmRldi0+c2Jfc3RhcnQgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplIC8gNTEyOwogCQl9IGVsc2UgCiAJCQlyZGV2LT5zYl9zdGFydCA9IGNhbGNfZGV2X3Nib2Zmc2V0KHJkZXYtPmJkZXYpOwotCQlyZGV2LT5zaXplID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBtZGRldi0+Y2h1bmtfc2l6ZSkgLyAyOworCQlyZGV2LT5zZWN0b3JzID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBtZGRldi0+Y2h1bmtfc2l6ZSk7CiAKIAkJZXJyID0gYmluZF9yZGV2X3RvX2FycmF5KHJkZXYsIG1kZGV2KTsKIAkJaWYgKGVycikgewpAQCAtNDYxMyw3ICs0ODk3LDcgQEAKIAllbHNlCiAJCXJkZXYtPnNiX3N0YXJ0ID0gcmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSAvIDUxMjsKIAotCXJkZXYtPnNpemUgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIG1kZGV2LT5jaHVua19zaXplKSAvIDI7CisJcmRldi0+c2VjdG9ycyA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgbWRkZXYtPmNodW5rX3NpemUpOwogCiAJaWYgKHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIApAQCAtNDc0OSw3ICs1MDMzLDcgQEAKIAogCW1kZGV2LT5sZXZlbCAgICAgICAgID0gaW5mby0+bGV2ZWw7CiAJbWRkZXYtPmNsZXZlbFswXSAgICAgPSAwOwotCW1kZGV2LT5zaXplICAgICAgICAgID0gaW5mby0+c2l6ZTsKKwltZGRldi0+ZGV2X3NlY3RvcnMgICA9IDIgKiAoc2VjdG9yX3QpaW5mby0+c2l6ZTsKIAltZGRldi0+cmFpZF9kaXNrcyAgICA9IGluZm8tPnJhaWRfZGlza3M7CiAJLyogZG9uJ3Qgc2V0IG1kX21pbm9yLCBpdCBpcyBkZXRlcm1pbmVkIGJ5IHdoaWNoIC9kZXYvbWQqIHdhcwogCSAqIG9wZW5uZWQKQEAgLTQ3ODgsNiArNTA3MiwxNyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIG1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBhcnJheV9zZWN0b3JzKQoreworCVdBUk4oIW1kZGV2X2lzX2xvY2tlZChtZGRldiksICIlczogdW5sb2NrZWQgbWRkZXYhXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAobWRkZXYtPmV4dGVybmFsX3NpemUpCisJCXJldHVybjsKKworCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gYXJyYXlfc2VjdG9yczsKK30KK0VYUE9SVF9TWU1CT0wobWRfc2V0X2FycmF5X3NlY3RvcnMpOworCiBzdGF0aWMgaW50IHVwZGF0ZV9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBudW1fc2VjdG9ycykKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtNDgxNCw4ICs1MTA5LDcgQEAKIAkJICovCiAJCXJldHVybiAtRUJVU1k7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgewotCQlzZWN0b3JfdCBhdmFpbDsKLQkJYXZhaWwgPSByZGV2LT5zaXplICogMjsKKwkJc2VjdG9yX3QgYXZhaWwgPSByZGV2LT5zZWN0b3JzOwogCiAJCWlmIChmaXQgJiYgKG51bV9zZWN0b3JzID09IDAgfHwgbnVtX3NlY3RvcnMgPiBhdmFpbCkpCiAJCQludW1fc2VjdG9ycyA9IGF2YWlsOwpAQCAtNDg4NywxMiArNTE4MSwxOCBAQAogCQkpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIENoZWNrIHRoZXJlIGlzIG9ubHkgb25lIGNoYW5nZSAqLwotCWlmIChpbmZvLT5zaXplID49IDAgJiYgbWRkZXYtPnNpemUgIT0gaW5mby0+c2l6ZSkgY250Kys7Ci0JaWYgKG1kZGV2LT5yYWlkX2Rpc2tzICE9IGluZm8tPnJhaWRfZGlza3MpIGNudCsrOwotCWlmIChtZGRldi0+bGF5b3V0ICE9IGluZm8tPmxheW91dCkgY250Kys7Ci0JaWYgKChzdGF0ZSBeIGluZm8tPnN0YXRlKSAmICgxPDxNRF9TQl9CSVRNQVBfUFJFU0VOVCkpIGNudCsrOwotCWlmIChjbnQgPT0gMCkgcmV0dXJuIDA7Ci0JaWYgKGNudCA+IDEpIHJldHVybiAtRUlOVkFMOworCWlmIChpbmZvLT5zaXplID49IDAgJiYgbWRkZXYtPmRldl9zZWN0b3JzIC8gMiAhPSBpbmZvLT5zaXplKQorCQljbnQrKzsKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgIT0gaW5mby0+cmFpZF9kaXNrcykKKwkJY250Kys7CisJaWYgKG1kZGV2LT5sYXlvdXQgIT0gaW5mby0+bGF5b3V0KQorCQljbnQrKzsKKwlpZiAoKHN0YXRlIF4gaW5mby0+c3RhdGUpICYgKDE8PE1EX1NCX0JJVE1BUF9QUkVTRU5UKSkKKwkJY250Kys7CisJaWYgKGNudCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY250ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobWRkZXYtPmxheW91dCAhPSBpbmZvLT5sYXlvdXQpIHsKIAkJLyogQ2hhbmdlIGxheW91dApAQCAtNDkwNCw3ICs1MjA0LDcgQEAKIAkJZWxzZQogCQkJcmV0dXJuIG1kZGV2LT5wZXJzLT5yZWNvbmZpZyhtZGRldiwgaW5mby0+bGF5b3V0LCAtMSk7CiAJfQotCWlmIChpbmZvLT5zaXplID49IDAgJiYgbWRkZXYtPnNpemUgIT0gaW5mby0+c2l6ZSkKKwlpZiAoaW5mby0+c2l6ZSA+PSAwICYmIG1kZGV2LT5kZXZfc2VjdG9ycyAvIDIgIT0gaW5mby0+c2l6ZSkKIAkJcnYgPSB1cGRhdGVfc2l6ZShtZGRldiwgKHNlY3Rvcl90KWluZm8tPnNpemUgKiAyKTsKIAogCWlmIChtZGRldi0+cmFpZF9kaXNrcyAgICAhPSBpbmZvLT5yYWlkX2Rpc2tzKQpAQCAtNTMzMSw2ICs1NjMxLDggQEAKIAogdm9pZCBtZF91bnJlZ2lzdGVyX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCkKIHsKKwlpZiAoIXRocmVhZCkKKwkJcmV0dXJuOwogCWRwcmludGsoImludGVycnVwdGluZyBNRC10aHJlYWQgcGlkICVkXG4iLCB0YXNrX3BpZF9ucih0aHJlYWQtPnRzaykpOwogCiAJa3RocmVhZF9zdG9wKHRocmVhZC0+dHNrKTsKQEAgLTU0MDQsNyArNTcwNiw3IEBACiAJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKQogCQltYXhfYmxvY2tzID0gbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA+PiAxOwogCWVsc2UKLQkJbWF4X2Jsb2NrcyA9IG1kZGV2LT5zaXplOworCQltYXhfYmxvY2tzID0gbWRkZXYtPmRldl9zZWN0b3JzIC8gMjsKIAogCS8qCiAJICogU2hvdWxkIG5vdCBoYXBwZW4uCkBAIC01NTM3LDcgKzU4MzksNyBAQAogc3RhdGljIGludCBtZF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAltZGRldl90ICptZGRldiA9IHY7Ci0Jc2VjdG9yX3Qgc2l6ZTsKKwlzZWN0b3JfdCBzZWN0b3JzOwogCW1ka19yZGV2X3QgKnJkZXY7CiAJc3RydWN0IG1kc3RhdF9pbmZvICptaSA9IHNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYml0bWFwICpiaXRtYXA7CkBAIC01NTczLDcgKzU4NzUsNyBAQAogCQkJc2VxX3ByaW50ZihzZXEsICIgJXMiLCBtZGRldi0+cGVycy0+bmFtZSk7CiAJCX0KIAotCQlzaXplID0gMDsKKwkJc2VjdG9ycyA9IDA7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAkJCXNlcV9wcmludGYoc2VxLCAiICVzWyVkXSIsCkBAIC01NTg1LDcgKzU4ODcsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPCAwKQogCQkJCXNlcV9wcmludGYoc2VxLCAiKFMpIik7IC8qIHNwYXJlICovCi0JCQlzaXplICs9IHJkZXYtPnNpemU7CisJCQlzZWN0b3JzICs9IHJkZXYtPnNlY3RvcnM7CiAJCX0KIAogCQlpZiAoIWxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykpIHsKQEAgLTU1OTUsNyArNTg5Nyw3IEBACiAJCQkJCSAgIG1kZGV2LT5hcnJheV9zZWN0b3JzIC8gMik7CiAJCQllbHNlCiAJCQkJc2VxX3ByaW50ZihzZXEsICJcbiAgICAgICVsbHUgYmxvY2tzIiwKLQkJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKwkJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWN0b3JzIC8gMik7CiAJCX0KIAkJaWYgKG1kZGV2LT5wZXJzaXN0ZW50KSB7CiAJCQlpZiAobWRkZXYtPm1ham9yX3ZlcnNpb24gIT0gMCB8fApAQCAtNTcyMiwxOSArNjAyNCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlzX21kZGV2X2lkbGUobWRkZXZfdCAqbWRkZXYpCitzdGF0aWMgaW50IGlzX21kZGV2X2lkbGUobWRkZXZfdCAqbWRkZXYsIGludCBpbml0KQogewogCW1ka19yZGV2X3QgKiByZGV2OwogCWludCBpZGxlOwotCWxvbmcgY3Vycl9ldmVudHM7CisJaW50IGN1cnJfZXZlbnRzOwogCiAJaWRsZSA9IDE7CiAJcmN1X3JlYWRfbG9jaygpOwogCXJkZXZfZm9yX2VhY2hfcmN1KHJkZXYsIG1kZGV2KSB7CiAJCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcmRldi0+YmRldi0+YmRfY29udGFpbnMtPmJkX2Rpc2s7Ci0JCWN1cnJfZXZlbnRzID0gcGFydF9zdGF0X3JlYWQoJmRpc2stPnBhcnQwLCBzZWN0b3JzWzBdKSArCi0JCQkJcGFydF9zdGF0X3JlYWQoJmRpc2stPnBhcnQwLCBzZWN0b3JzWzFdKSAtCi0JCQkJYXRvbWljX3JlYWQoJmRpc2stPnN5bmNfaW8pOworCQljdXJyX2V2ZW50cyA9IChpbnQpcGFydF9zdGF0X3JlYWQoJmRpc2stPnBhcnQwLCBzZWN0b3JzWzBdKSArCisJCQkgICAgICAoaW50KXBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1sxXSkgLQorCQkJICAgICAgYXRvbWljX3JlYWQoJmRpc2stPnN5bmNfaW8pOwogCQkvKiBzeW5jIElPIHdpbGwgY2F1c2Ugc3luY19pbyB0byBpbmNyZWFzZSBiZWZvcmUgdGhlIGRpc2tfc3RhdHMKIAkJICogYXMgc3luY19pbyBpcyBjb3VudGVkIHdoZW4gYSByZXF1ZXN0IHN0YXJ0cywgYW5kCiAJCSAqIGRpc2tfc3RhdHMgaXMgY291bnRlZCB3aGVuIGl0IGNvbXBsZXRlcy4KQEAgLTU3NTcsNyArNjA1OSw3IEBACiAJCSAqIGFsd2F5cyBtYWtlIGN1cnJfZXZlbnRzIGxlc3MgdGhhbiBsYXN0X2V2ZW50cy4KIAkJICoKIAkJICovCi0JCWlmIChjdXJyX2V2ZW50cyAtIHJkZXYtPmxhc3RfZXZlbnRzID4gNDA5NikgeworCQlpZiAoaW5pdCB8fCBjdXJyX2V2ZW50cyAtIHJkZXYtPmxhc3RfZXZlbnRzID4gNjQpIHsKIAkJCXJkZXYtPmxhc3RfZXZlbnRzID0gY3Vycl9ldmVudHM7CiAJCQlpZGxlID0gMDsKIAkJfQpAQCAtNTk4MCwxMCArNjI4MiwxMCBAQAogCQkJaiA9IG1kZGV2LT5yZWNvdmVyeV9jcDsKIAogCX0gZWxzZSBpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVTSEFQRSwgJm1kZGV2LT5yZWNvdmVyeSkpCi0JCW1heF9zZWN0b3JzID0gbWRkZXYtPnNpemUgPDwgMTsKKwkJbWF4X3NlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJZWxzZSB7CiAJCS8qIHJlY292ZXJ5IGZvbGxvd3MgdGhlIHBoeXNpY2FsIHNpemUgb2YgZGV2aWNlcyAqLwotCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5zaXplIDw8IDE7CisJCW1heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlqID0gTWF4U2VjdG9yOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQogCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCkBAIC02MDAwLDcgKzYzMDIsNyBAQAogCSAgICAgICAiKGJ1dCBub3QgbW9yZSB0aGFuICVkIEtCL3NlYykgZm9yICVzLlxuIiwKIAkgICAgICAgc3BlZWRfbWF4KG1kZGV2KSwgZGVzYyk7CiAKLQlpc19tZGRldl9pZGxlKG1kZGV2KTsgLyogdGhpcyBhbHNvIGluaXRpYWxpemVzIElPIGV2ZW50IGNvdW50ZXJzICovCisJaXNfbWRkZXZfaWRsZShtZGRldiwgMSk7IC8qIHRoaXMgaW5pdGlhbGl6ZXMgSU8gZXZlbnQgY291bnRlcnMgKi8KIAogCWlvX3NlY3RvcnMgPSAwOwogCWZvciAobSA9IDA7IG0gPCBTWU5DX01BUktTOyBtKyspIHsKQEAgLTYwNDAsNiArNjM0MiwxOCBAQAogCQl9CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQlnb3RvIGludGVycnVwdGVkOworCisJCWlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPiBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkICYmCisJCSAgICAobWRkZXYtPmN1cnJfcmVzeW5jIC0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCkKKwkJICAgID4gKG1heF9zZWN0b3JzID4+IDQpKSB7CisJCQkvKiB0aW1lIHRvIHVwZGF0ZSBjdXJyX3Jlc3luY19jb21wbGV0ZWQgKi8KKwkJCWJsa191bnBsdWcobWRkZXYtPnF1ZXVlKTsKKwkJCXdhaXRfZXZlbnQobWRkZXYtPnJlY292ZXJ5X3dhaXQsCisJCQkJICAgYXRvbWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpID09IDApOworCQkJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9CisJCQkJbWRkZXYtPmN1cnJfcmVzeW5jOworCQkJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpOworCQl9CiAJCXNlY3RvcnMgPSBtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KG1kZGV2LCBqLCAmc2tpcHBlZCwKIAkJCQkJCSAgY3VycnNwZWVkIDwgc3BlZWRfbWluKG1kZGV2KSk7CiAJCWlmIChzZWN0b3JzID09IDApIHsKQEAgLTYxMDIsNyArNjQxNiw3IEBACiAKIAkJaWYgKGN1cnJzcGVlZCA+IHNwZWVkX21pbihtZGRldikpIHsKIAkJCWlmICgoY3VycnNwZWVkID4gc3BlZWRfbWF4KG1kZGV2KSkgfHwKLQkJCQkJIWlzX21kZGV2X2lkbGUobWRkZXYpKSB7CisJCQkJCSFpc19tZGRldl9pZGxlKG1kZGV2LCAwKSkgewogCQkJCW1zbGVlcCg1MDApOwogCQkJCWdvdG8gcmVwZWF0OwogCQkJfQpAQCAtNjE3Myw2ICs2NDg3LDggQEAKIAltZGtfcmRldl90ICpyZGV2OwogCWludCBzcGFyZXMgPSAwOwogCisJbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA9IDA7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQogCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKIAkJICAgICF0ZXN0X2JpdChCbG9ja2VkLCAmcmRldi0+ZmxhZ3MpICYmCkBAIC02MzI3LDYgKzY2NDMsOSBAQAogCQkJCQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLAogCQkJCQkJICAgICAiZGVncmFkZWQiKTsKIAkJCX0KKwkJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVNIQVBFLCAmbWRkZXYtPnJlY292ZXJ5KSAmJgorCQkJICAgIG1kZGV2LT5wZXJzLT5maW5pc2hfcmVzaGFwZSkKKwkJCQltZGRldi0+cGVycy0+ZmluaXNoX3Jlc2hhcGUobWRkZXYpOwogCQkJbWRfdXBkYXRlX3NiKG1kZGV2LCAxKTsKIAogCQkJLyogaWYgYXJyYXkgaXMgbm8tbG9uZ2VyIGRlZ3JhZGVkLCB0aGVuIGFueSBzYXZlZF9yYWlkX2Rpc2sKQEAgLTY0NzAsMTMgKzY3ODksMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgbWRfaW5pdCh2b2lkKQogewotCWlmIChyZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsICJtZCIpKQorCWlmIChyZWdpc3Rlcl9ibGtkZXYoTURfTUFKT1IsICJtZCIpKQogCQlyZXR1cm4gLTE7CiAJaWYgKChtZHBfbWFqb3I9cmVnaXN0ZXJfYmxrZGV2KDAsICJtZHAiKSk8PTApIHsKLQkJdW5yZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsICJtZCIpOworCQl1bnJlZ2lzdGVyX2Jsa2RldihNRF9NQUpPUiwgIm1kIik7CiAJCXJldHVybiAtMTsKIAl9Ci0JYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihNQUpPUl9OUiwgMCksIDFVTDw8TUlOT1JCSVRTLCBUSElTX01PRFVMRSwKKwlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKE1EX01BSk9SLCAwKSwgMVVMPDxNSU5PUkJJVFMsIFRISVNfTU9EVUxFLAogCQkJICAgIG1kX3Byb2JlLCBOVUxMLCBOVUxMKTsKIAlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKG1kcF9tYWpvciwgMCksIDFVTDw8TUlOT1JCSVRTLCBUSElTX01PRFVMRSwKIAkJCSAgICBtZF9wcm9iZSwgTlVMTCwgTlVMTCk7CkBAIC02NTYyLDEwICs2ODgxLDEwIEBACiAJbWRkZXZfdCAqbWRkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCi0JYmxrX3VucmVnaXN0ZXJfcmVnaW9uKE1LREVWKE1BSk9SX05SLDApLCAxVSA8PCBNSU5PUkJJVFMpOworCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihNRF9NQUpPUiwwKSwgMVUgPDwgTUlOT1JCSVRTKTsKIAlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYobWRwX21ham9yLDApLCAxVSA8PCBNSU5PUkJJVFMpOwogCi0JdW5yZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIsIm1kIik7CisJdW5yZWdpc3Rlcl9ibGtkZXYoTURfTUFKT1IsIm1kIik7CiAJdW5yZWdpc3Rlcl9ibGtkZXYobWRwX21ham9yLCAibWRwIik7CiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm1kX25vdGlmaWVyKTsKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShyYWlkX3RhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oIGIvZHJpdmVycy9tZC9tZC5oCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWQvbWQuaAppbmRleCA5NzQzZTRkLi5lOWI3ZjU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCisrKyBiL2RyaXZlcnMvbWQvbWQuaApAQCAtMTUsMjEgKzE1LDggQEAKICNpZm5kZWYgX01EX0tfSAogI2RlZmluZSBfTURfS19ICiAKLS8qIGFuZCBkbS1iaW8tbGlzdC5oIGlzIG5vdCB1bmRlciBpbmNsdWRlL2xpbnV4IGJlY2F1c2UuLi4uID8/PyAqLwotI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCIKLQogI2lmZGVmIENPTkZJR19CTE9DSwogCi0jZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQotI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKLSNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCi0KLS8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKLSAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCi0gKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKLSAqLwotI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCi0KICNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCiAKIHR5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKQEAgLTQ5LDkgKzM2LDkgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNhbWVfc2V0OwkvKiBSQUlEIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIHNldCAqLwogCi0Jc2VjdG9yX3Qgc2l6ZTsJCQkvKiBEZXZpY2Ugc2l6ZSAoaW4gYmxvY2tzKSAqLworCXNlY3Rvcl90IHNlY3RvcnM7CQkvKiBEZXZpY2Ugc2l6ZSAoaW4gNTEyYnl0ZXMgc2VjdG9ycykgKi8KIAltZGRldl90ICptZGRldjsJCQkvKiBSQUlEIGFycmF5IGlmIHJ1bm5pbmcgKi8KLQlsb25nIGxhc3RfZXZlbnRzOwkJLyogSU8gZXZlbnQgdGltZXN0YW1wICovCisJaW50IGxhc3RfZXZlbnRzOwkJLyogSU8gZXZlbnQgdGltZXN0YW1wICovCiAKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwkvKiBibG9jayBkZXZpY2UgaGFuZGxlICovCiAKQEAgLTEzMiw2ICsxMTksOCBAQAogI2RlZmluZSBNRF9DSEFOR0VfQ0xFQU4gMQkvKiB0cmFuc2l0aW9uIHRvIG9yIGZyb20gJ2NsZWFuJyAqLwogI2RlZmluZSBNRF9DSEFOR0VfUEVORElORyAyCS8qIHN1cGVyYmxvY2sgdXBkYXRlIGluIHByb2dyZXNzICovCiAKKwlpbnQJCQkJc3VzcGVuZGVkOworCWF0b21pY190CQkJYWN0aXZlX2lvOwogCWludAkJCQlybzsKIAogCXN0cnVjdCBnZW5kaXNrCQkJKmdlbmRpc2s7CkBAIC0xNTUsOCArMTQ0LDExIEBACiAJY2hhcgkJCQljbGV2ZWxbMTZdOwogCWludAkJCQlyYWlkX2Rpc2tzOwogCWludAkJCQltYXhfZGlza3M7Ci0Jc2VjdG9yX3QJCQlzaXplOyAvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMgKi8KKwlzZWN0b3JfdAkJCWRldl9zZWN0b3JzOyAJLyogdXNlZCBzaXplIG9mCisJCQkJCQkJICogY29tcG9uZW50IGRldmljZXMgKi8KIAlzZWN0b3JfdAkJCWFycmF5X3NlY3RvcnM7IC8qIGV4cG9ydGVkIGFycmF5IHNpemUgKi8KKwlpbnQJCQkJZXh0ZXJuYWxfc2l6ZTsgLyogc2l6ZSBtYW5hZ2VkCisJCQkJCQkJKiBleHRlcm5hbGx5ICovCiAJX191NjQJCQkJZXZlbnRzOwogCiAJY2hhcgkJCQl1dWlkWzE2XTsKQEAgLTE3Miw2ICsxNjQsMTMgQEAKIAlzdHJ1Y3QgbWRrX3RocmVhZF9zCQkqdGhyZWFkOwkvKiBtYW5hZ2VtZW50IHRocmVhZCAqLwogCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSpzeW5jX3RocmVhZDsJLyogZG9pbmcgcmVzeW5jIG9yIHJlY29uc3RydWN0ICovCiAJc2VjdG9yX3QJCQljdXJyX3Jlc3luYzsJLyogbGFzdCBibG9jayBzY2hlZHVsZWQgKi8KKwkvKiBBcyByZXN5bmMgcmVxdWVzdHMgY2FuIGNvbXBsZXRlIG91dCBvZiBvcmRlciwgd2UgY2Fubm90IGVhc2lseSB0cmFjaworCSAqIGhvdyBtdWNoIHJlc3luYyBoYXMgYmVlbiBjb21wbGV0ZWQuICBTbyB3ZSBvY2Nhc2lvbmFsbHkgcGF1c2UgdW50aWwKKwkgKiBldmVyeXRoaW5nIGNvbXBsZXRlcywgdGhlbiBzZXQgY3Vycl9yZXN5bmNfY29tcGxldGVkIHRvIGN1cnJfcmVzeW5jLgorCSAqIEFzIHN1Y2ggaXQgbWF5IGJlIHdlbGwgYmVoaW5kIHRoZSByZWFsIHJlc3luYyBtYXJrLCBidXQgaXQgaXMgYSB2YWx1ZQorCSAqIHdlIGFyZSBjZXJ0YWluIG9mLgorCSAqLworCXNlY3Rvcl90CQkJY3Vycl9yZXN5bmNfY29tcGxldGVkOwogCXVuc2lnbmVkIGxvbmcJCQlyZXN5bmNfbWFyazsJLyogYSByZWNlbnQgdGltZXN0YW1wICovCiAJc2VjdG9yX3QJCQlyZXN5bmNfbWFya19jbnQ7LyogYmxvY2tzIHdyaXR0ZW4gYXQgcmVzeW5jX21hcmsgKi8KIAlzZWN0b3JfdAkJCWN1cnJfbWFya19jbnQ7IC8qIGJsb2NrcyBzY2hlZHVsZWQgbm93ICovCkBAIC0zMTUsOCArMzE0LDEwIEBACiAJaW50ICgqc3BhcmVfYWN0aXZlKSAobWRkZXZfdCAqbWRkZXYpOwogCXNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpOwogCWludCAoKnJlc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKKwlzZWN0b3JfdCAoKnNpemUpIChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpOwogCWludCAoKmNoZWNrX3Jlc2hhcGUpIChtZGRldl90ICptZGRldik7CiAJaW50ICgqc3RhcnRfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKKwl2b2lkICgqZmluaXNoX3Jlc2hhcGUpIChtZGRldl90ICptZGRldik7CiAJaW50ICgqcmVjb25maWcpIChtZGRldl90ICptZGRldiwgaW50IGxheW91dCwgaW50IGNodW5rX3NpemUpOwogCS8qIHF1aWVzY2UgbW92ZXMgYmV0d2VlbiBxdWllc2NlbmNlIHN0YXRlcwogCSAqIDAgLSBmdWxseSBhY3RpdmUKQEAgLTMyNCw2ICszMjUsMTYgQEAKIAkgKiBvdGhlcnMgLSByZXNlcnZlZAogCSAqLwogCXZvaWQgKCpxdWllc2NlKSAobWRkZXZfdCAqbWRkZXYsIGludCBzdGF0ZSk7CisJLyogdGFrZW92ZXIgaXMgdXNlZCB0byB0cmFuc2l0aW9uIGFuIGFycmF5IGZyb20gb25lCisJICogcGVyc29uYWxpdHkgdG8gYW5vdGhlci4gIFRoZSBuZXcgcGVyc29uYWxpdHkgbXVzdCBiZSBhYmxlCisJICogdG8gaGFuZGxlIHRoZSBkYXRhIGluIHRoZSBjdXJyZW50IGxheW91dC4KKwkgKiBlLmcuIDJkcml2ZSByYWlkMSAtPiAyZHJpdmUgcmFpZDUKKwkgKiAgICAgIG5kcml2ZSByYWlkNSAtPiBkZWdyYWRlZCBuKzFkcml2ZSByYWlkNiB3aXRoIHNwZWNpYWwgbGF5b3V0CisJICogSWYgdGhlIHRha2VvdmVyIHN1Y2NlZWRzLCBhIG5ldyAncHJpdmF0ZScgc3RydWN0dXJlIGlzIHJldHVybmVkLgorCSAqIFRoaXMgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFuZCB0aGVuIC0+cnVuIHVzZWQgdG8gYWN0aXZhdGUgdGhlCisJICogYXJyYXkuCisJICovCisJdm9pZCAqKCp0YWtlb3ZlcikgKG1kZGV2X3QgKm1kZGV2KTsKIH07CiAKIApAQCAtNDAwLDMgKzQxMSwyNiBAQAogI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogI2VuZGlmCiAKKworZXh0ZXJuIGludCByZWdpc3Rlcl9tZF9wZXJzb25hbGl0eShzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9tZF9wZXJzb25hbGl0eShzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwKTsKK2V4dGVybiBtZGtfdGhyZWFkX3QgKiBtZF9yZWdpc3Rlcl90aHJlYWQodm9pZCAoKnJ1bikgKG1kZGV2X3QgKm1kZGV2KSwKKwkJCQltZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBtZF91bnJlZ2lzdGVyX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CitleHRlcm4gdm9pZCBtZF93YWtldXBfdGhyZWFkKG1ka190aHJlYWRfdCAqdGhyZWFkKTsKK2V4dGVybiB2b2lkIG1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3dyaXRlX3N0YXJ0KG1kZGV2X3QgKm1kZGV2LCBzdHJ1Y3QgYmlvICpiaSk7CitleHRlcm4gdm9pZCBtZF93cml0ZV9lbmQobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfZG9uZV9zeW5jKG1kZGV2X3QgKm1kZGV2LCBpbnQgYmxvY2tzLCBpbnQgb2spOworZXh0ZXJuIHZvaWQgbWRfZXJyb3IobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOworCitleHRlcm4gdm9pZCBtZF9zdXBlcl93cml0ZShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldiwKKwkJCSAgIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIG1kX3N1cGVyX3dhaXQobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIGludCBzeW5jX3BhZ2VfaW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgc2l6ZSwKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcncpOworZXh0ZXJuIHZvaWQgbWRfZG9fc3luYyhtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9uZXdfZXZlbnQobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIGludCBtZF9hbGxvd193cml0ZShtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF93YWl0X2Zvcl9ibG9ja2VkX3JkZXYobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IGFycmF5X3NlY3RvcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9ta3RhYmxlcy5jIGIvZHJpdmVycy9tZC9ta3RhYmxlcy5jCmluZGV4IGI2MWQ1NzYuLjNiMTUwMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWt0YWJsZXMuYworKysgYi9kcml2ZXJzL21kL21rdGFibGVzLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAl1aW50OF90IHY7CiAJdWludDhfdCBleHB0YmxbMjU2XSwgaW52dGJsWzI1Nl07CiAKLQlwcmludGYoIiNpbmNsdWRlIFwicmFpZDYuaFwiXG4iKTsKKwlwcmludGYoIiNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+XG4iKTsKIAogCS8qIENvbXB1dGUgbXVsdGlwbGljYXRpb24gdGFibGUgKi8KIAlwcmludGYoIlxuY29uc3QgdTggIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpXG4iCkBAIC03Niw2ICs3Niw5IEBACiAJCXByaW50ZigiXHR9LFxuIik7CiAJfQogCXByaW50ZigifTtcbiIpOworCXByaW50ZigiI2lmZGVmIF9fS0VSTkVMX19cbiIpOworCXByaW50ZigiRVhQT1JUX1NZTUJPTChyYWlkNl9nZm11bCk7XG4iKTsKKwlwcmludGYoIiNlbmRpZlxuIik7CiAKIAkvKiBDb21wdXRlIHBvd2VyLW9mLTIgdGFibGUgKGV4cG9uZW50KSAqLwogCXYgPSAxOwpAQCAtOTIsNiArOTUsOSBAQAogCQl9CiAJfQogCXByaW50ZigifTtcbiIpOworCXByaW50ZigiI2lmZGVmIF9fS0VSTkVMX19cbiIpOworCXByaW50ZigiRVhQT1JUX1NZTUJPTChyYWlkNl9nZmV4cCk7XG4iKTsKKwlwcmludGYoIiNlbmRpZlxuIik7CiAKIAkvKiBDb21wdXRlIGludmVyc2UgdGFibGUgeF4tMSA9PSB4XjI1NCAqLwogCXByaW50ZigiXG5jb25zdCB1OCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKVxuIgpAQCAtMTA0LDYgKzExMCw5IEBACiAJCX0KIAl9CiAJcHJpbnRmKCJ9O1xuIik7CisJcHJpbnRmKCIjaWZkZWYgX19LRVJORUxfX1xuIik7CisJcHJpbnRmKCJFWFBPUlRfU1lNQk9MKHJhaWQ2X2dmaW52KTtcbiIpOworCXByaW50ZigiI2VuZGlmXG4iKTsKIAogCS8qIENvbXB1dGUgaW52KDJeeCArIDEpIChleHBvbmVudC14b3ItaW52ZXJzZSkgdGFibGUgKi8KIAlwcmludGYoIlxuY29uc3QgdTggX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSlcbiIKQEAgLTExNSw2ICsxMjQsOSBAQAogCQkJICAgICAgIChqID09IDcpID8gJ1xuJyA6ICcgJyk7CiAJfQogCXByaW50ZigifTtcbiIpOworCXByaW50ZigiI2lmZGVmIF9fS0VSTkVMX19cbiIpOworCXByaW50ZigiRVhQT1JUX1NZTUJPTChyYWlkNl9nZmV4aSk7XG4iKTsKKwlwcmludGYoIiNlbmRpZlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCmluZGV4IGY2ZDA4ZjIuLjQxY2VkMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwpAQCAtMTksNyArMTksMTEgQEAKICAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL211bHRpcGF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJtdWx0aXBhdGguaCIKIAogI2RlZmluZSBNQVhfV09SS19QRVJfRElTSyAxMjgKIApAQCAtNDAyLDYgKzQwNiwxNCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBzZWN0b3JfdCBtdWx0aXBhdGhfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJV0FSTl9PTkNFKHNlY3RvcnMgfHwgcmFpZF9kaXNrcywKKwkJICAiJXMgZG9lcyBub3Qgc3VwcG9ydCBnZW5lcmljIHJlc2hhcGVcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBtZGRldi0+ZGV2X3NlY3RvcnM7Cit9CisKIHN0YXRpYyBpbnQgbXVsdGlwYXRoX3J1biAobWRkZXZfdCAqbWRkZXYpCiB7CiAJbXVsdGlwYXRoX2NvbmZfdCAqY29uZjsKQEAgLTQ5OCw3ICs1MTAsNyBAQAogCS8qCiAJICogT2ssIGV2ZXJ5dGhpbmcgaXMganVzdCBmaW5lIG5vdwogCSAqLwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gbWRkZXYtPnNpemUgKiAyOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCBtdWx0aXBhdGhfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSBtdWx0aXBhdGhfdW5wbHVnOwogCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSBtdWx0aXBhdGhfY29uZ2VzdGVkOwpAQCAtNTQzLDYgKzU1NSw3IEBACiAJLmVycm9yX2hhbmRsZXIJPSBtdWx0aXBhdGhfZXJyb3IsCiAJLmhvdF9hZGRfZGlzawk9IG11bHRpcGF0aF9hZGRfZGlzaywKIAkuaG90X3JlbW92ZV9kaXNrPSBtdWx0aXBhdGhfcmVtb3ZlX2Rpc2ssCisJLnNpemUJCT0gbXVsdGlwYXRoX3NpemUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtdWx0aXBhdGhfaW5pdCAodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9tdWx0aXBhdGguaCBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9yYWlkL211bHRpcGF0aC5oCnJlbmFtZSB0byBkcml2ZXJzL21kL211bHRpcGF0aC5oCmluZGV4IDZmNTNmYzEuLjZmYTcwYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tdWx0aXBhdGguaAorKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfTVVMVElQQVRIX0gKICNkZWZpbmUgX01VTFRJUEFUSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KIHN0cnVjdCBtdWx0aXBhdGhfaW5mbyB7CiAJbWRrX3JkZXZfdAkqcmRldjsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggYzYwNWJhOC4uYzA4ZDc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtMTgsNyArMTgsMTAgQEAKICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCiAqLwogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9yYWlkMC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJyYWlkMC5oIgogCiBzdGF0aWMgdm9pZCByYWlkMF91bnBsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC03MywxNiArNzYsMTUgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiAgIGNvbXBhcmluZyAlcyglbGx1KSIsCiAJCQkgICAgICAgYmRldm5hbWUocmRldjEtPmJkZXYsYiksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2MS0+c2l6ZSk7CisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2MS0+c2VjdG9ycyk7CiAJCQlwcmludGsoS0VSTl9JTkZPICIgd2l0aCAlcyglbGx1KVxuIiwKIAkJCSAgICAgICBiZGV2bmFtZShyZGV2Mi0+YmRldixiKSwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYyLT5zaXplKTsKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYyLT5zZWN0b3JzKTsKIAkJCWlmIChyZGV2MiA9PSByZGV2MSkgewogCQkJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiAgIEVORFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAocmRldjItPnNpemUgPT0gcmRldjEtPnNpemUpCi0JCQl7CisJCQlpZiAocmRldjItPnNlY3RvcnMgPT0gcmRldjEtPnNlY3RvcnMpIHsKIAkJCQkvKgogCQkJCSAqIE5vdCB1bmlxdWUsIGRvbid0IGNvdW50IGl0IGFzIGEgbmV3CiAJCQkJICogZ3JvdXAKQEAgLTE0NSw3ICsxNDcsNyBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2l6ZSA8c21hbGxlc3QtPnNpemUpKQorCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSkKIAkJCXNtYWxsZXN0ID0gcmRldjE7CiAJCWNudCsrOwogCX0KQEAgLTE1NSwxMCArMTU3LDEwIEBACiAJCWdvdG8gYWJvcnQ7CiAJfQogCXpvbmUtPm5iX2RldiA9IGNudDsKLQl6b25lLT5zZWN0b3JzID0gc21hbGxlc3QtPnNpemUgKiBjbnQgKiAyOworCXpvbmUtPnNlY3RvcnMgPSBzbWFsbGVzdC0+c2VjdG9ycyAqIGNudDsKIAl6b25lLT56b25lX3N0YXJ0ID0gMDsKIAotCWN1cnJlbnRfc3RhcnQgPSBzbWFsbGVzdC0+c2l6ZSAqIDI7CisJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zZWN0b3JzOwogCWN1cnJfem9uZV9zdGFydCA9IHpvbmUtPnNlY3RvcnM7CiAKIAkvKiBub3cgZG8gdGhlIG90aGVyIHpvbmVzICovCkBAIC0xNzcsMjkgKzE3OSwyOSBAQAogCQkJcmRldiA9IGNvbmYtPnN0cmlwX3pvbmVbMF0uZGV2W2pdOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDA6IGNoZWNraW5nICVzIC4uLiIsCiAJCQkJYmRldm5hbWUocmRldi0+YmRldiwgYikpOwotCQkJaWYgKHJkZXYtPnNpemUgPiBjdXJyZW50X3N0YXJ0IC8gMikgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiBjb250YWluZWQgYXMgZGV2aWNlICVkXG4iLAotCQkJCQljKTsKLQkJCQl6b25lLT5kZXZbY10gPSByZGV2OwotCQkJCWMrKzsKLQkJCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2LT5zaXplIDxzbWFsbGVzdC0+c2l6ZSkpIHsKLQkJCQkJc21hbGxlc3QgPSByZGV2OwotCQkJCQlwcmludGsoS0VSTl9JTkZPICIgICglbGx1KSBpcyBzbWFsbGVzdCEuXG4iLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplKTsKLQkJCQl9Ci0JCQl9IGVsc2UKKwkJCWlmIChyZGV2LT5zZWN0b3JzIDw9IGN1cnJlbnRfc3RhcnQpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIgbm9wZS5cbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiIGNvbnRhaW5lZCBhcyBkZXZpY2UgJWRcbiIsIGMpOworCQkJem9uZS0+ZGV2W2NdID0gcmRldjsKKwkJCWMrKzsKKwkJCWlmICghc21hbGxlc3QgfHwgcmRldi0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSB7CisJCQkJc21hbGxlc3QgPSByZGV2OworCQkJCXByaW50ayhLRVJOX0lORk8gIiAgKCVsbHUpIGlzIHNtYWxsZXN0IS5cbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2VjdG9ycyk7CisJCQl9CiAJCX0KIAogCQl6b25lLT5uYl9kZXYgPSBjOwotCQl6b25lLT5zZWN0b3JzID0gKHNtYWxsZXN0LT5zaXplICogMiAtIGN1cnJlbnRfc3RhcnQpICogYzsKKwkJem9uZS0+c2VjdG9ycyA9IChzbWFsbGVzdC0+c2VjdG9ycyAtIGN1cnJlbnRfc3RhcnQpICogYzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDA6IHpvbmUtPm5iX2RldjogJWQsIHNlY3RvcnM6ICVsbHVcbiIsCiAJCQl6b25lLT5uYl9kZXYsICh1bnNpZ25lZCBsb25nIGxvbmcpem9uZS0+c2VjdG9ycyk7CiAKIAkJem9uZS0+em9uZV9zdGFydCA9IGN1cnJfem9uZV9zdGFydDsKIAkJY3Vycl96b25lX3N0YXJ0ICs9IHpvbmUtPnNlY3RvcnM7CiAKLQkJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zaXplICogMjsKKwkJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zZWN0b3JzOwogCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMDogY3VycmVudCB6b25lIHN0YXJ0OiAlbGx1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50X3N0YXJ0KTsKIAl9CkBAIC0yNjEsMTIgKzI2MywyNSBAQAogCQlyZXR1cm4gbWF4OwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDBfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJc2VjdG9yX3QgYXJyYXlfc2VjdG9ycyA9IDA7CisJbWRrX3JkZXZfdCAqcmRldjsKKworCVdBUk5fT05DRShzZWN0b3JzIHx8IHJhaWRfZGlza3MsCisJCSAgIiVzIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyByZXNoYXBlXG4iLCBfX2Z1bmNfXyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQlhcnJheV9zZWN0b3JzICs9IHJkZXYtPnNlY3RvcnM7CisKKwlyZXR1cm4gYXJyYXlfc2VjdG9yczsKK30KKwogc3RhdGljIGludCByYWlkMF9ydW4gKG1kZGV2X3QgKm1kZGV2KQogewogCXVuc2lnbmVkICBjdXI9MCwgaT0wLCBuYl96b25lOwogCXM2NCBzZWN0b3JzOwogCXJhaWQwX2NvbmZfdCAqY29uZjsKLQltZGtfcmRldl90ICpyZGV2OwogCiAJaWYgKG1kZGV2LT5jaHVua19zaXplID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMDogbm9uLXplcm8gY2h1bmsgc2l6ZSByZXF1aXJlZC5cbiIpOwpAQCAtMjkxLDE2ICszMDYsMTQgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCiAJLyogY2FsY3VsYXRlIGFycmF5IGRldmljZSBzaXplICovCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCW1kZGV2LT5hcnJheV9zZWN0b3JzICs9IHJkZXYtPnNpemUgKiAyOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkMF9zaXplKG1kZGV2LCAwLCAwKSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJyYWlkMCA6IG1kX3NpemUgaXMgJWxsdSBzZWN0b3JzLlxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDAgOiBjb25mLT5zcGFjaW5nIGlzICVsbHUgc2VjdG9ycy5cbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uZi0+c3BhY2luZyk7CiAJewotCQlzZWN0b3JfdCBzID0gbWRkZXYtPmFycmF5X3NlY3RvcnM7CisJCXNlY3Rvcl90IHMgPSByYWlkMF9zaXplKG1kZGV2LCAwLCAwKTsKIAkJc2VjdG9yX3Qgc3BhY2UgPSBjb25mLT5zcGFjaW5nOwogCQlpbnQgcm91bmQ7CiAJCWNvbmYtPnNlY3Rvcl9zaGlmdCA9IDA7CkBAIC01MDksNiArNTIyLDcgQEAKIAkucnVuCQk9IHJhaWQwX3J1biwKIAkuc3RvcAkJPSByYWlkMF9zdG9wLAogCS5zdGF0dXMJCT0gcmFpZDBfc3RhdHVzLAorCS5zaXplCQk9IHJhaWQwX3NpemUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByYWlkMF9pbml0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmggYi9kcml2ZXJzL21kL3JhaWQwLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWQvcmFpZDAuaAppbmRleCBmZDQyYWE4Li44MjRiMTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDAuaAorKysgYi9kcml2ZXJzL21kL3JhaWQwLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9SQUlEMF9ICiAjZGVmaW5lIF9SQUlEMF9ICiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KIHN0cnVjdCBzdHJpcF96b25lCiB7CiAJc2VjdG9yX3Qgem9uZV9zdGFydDsJLyogWm9uZSBvZmZzZXQgaW4gbWRfZGV2IChpbiBzZWN0b3JzKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGUyNDY2NDIuLmI0ZjRiYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTMxLDEwICszMSwxMyBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlICJyYWlkMS5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAjZGVmaW5lIERFQlVHIDAKICNpZiBERUJVRwpAQCAtMTcyMyw3ICsxNzI2LDcgQEAKIAkJCXJldHVybiAwOwogCX0KIAotCW1heF9zZWN0b3IgPSBtZGRldi0+c2l6ZSA8PCAxOworCW1heF9zZWN0b3IgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CiAJCS8qIElmIHdlIGFib3J0ZWQsIHdlIG5lZWQgdG8gYWJvcnQgdGhlCiAJCSAqIHN5bmMgb24gdGhlICdjdXJyZW50JyBiaXRtYXAgY2h1bmsgKHRoZXJlIHdpbGwKQEAgLTE5MTksNiArMTkyMiwxNCBAQAogCXJldHVybiBucl9zZWN0b3JzOwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDFfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJaWYgKHNlY3RvcnMpCisJCXJldHVybiBzZWN0b3JzOworCisJcmV0dXJuIG1kZGV2LT5kZXZfc2VjdG9yczsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJY29uZl90ICpjb25mOwpAQCAtMjA0OCw3ICsyMDU5LDcgQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSByYWlkMV91bnBsdWc7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQxX2Nvbmdlc3RlZDsKQEAgLTIwODksNiArMjEwMCw5IEBACiAJCS8qIG5lZWQgdG8ga2ljayBzb21ldGhpbmcgaGVyZSB0byBtYWtlIHN1cmUgSS9PIGdvZXM/ICovCiAJfQogCisJcmFpc2VfYmFycmllcihjb25mKTsKKwlsb3dlcl9iYXJyaWVyKGNvbmYpOworCiAJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCkBAIC0yMTEwLDE1ICsyMTI0LDE3IEBACiAJICogYW55IGlvIGluIHRoZSByZW1vdmVkIHNwYWNlIGNvbXBsZXRlcywgYnV0IGl0IGhhcmRseSBzZWVtcwogCSAqIHdvcnRoIGl0LgogCSAqLwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9yczsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgc2VjdG9ycywgMCkpOworCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyA+IHJhaWQxX3NpemUobWRkZXYsIHNlY3RvcnMsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAltZGRldi0+Y2hhbmdlZCA9IDE7Ci0JaWYgKG1kZGV2LT5hcnJheV9zZWN0b3JzIC8gMiA+IG1kZGV2LT5zaXplICYmCisJaWYgKHNlY3RvcnMgPiBtZGRldi0+ZGV2X3NlY3RvcnMgJiYKIAkgICAgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewotCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOworCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAl9Ci0JbWRkZXYtPnNpemUgPSBtZGRldi0+YXJyYXlfc2VjdG9ycyAvIDI7CisJbWRkZXYtPmRldl9zZWN0b3JzID0gc2VjdG9yczsKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gc2VjdG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNjQsNiArMjI4MCw3IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQxX3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDFfcmVzaXplLAorCS5zaXplCQk9IHJhaWQxX3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkMV9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDFfcXVpZXNjZSwKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2RyaXZlcnMvbWQvcmFpZDEuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaApyZW5hbWUgdG8gZHJpdmVycy9tZC9yYWlkMS5oCmluZGV4IDBhOWJhN2MuLjE2MjBlZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX1JBSUQxX0gKICNkZWZpbmUgX1JBSUQxX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQogdHlwZWRlZiBzdHJ1Y3QgbWlycm9yX2luZm8gbWlycm9yX2luZm9fdDsKIAogc3RydWN0IG1pcnJvcl9pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDczMDE2MzEuLmUyOTNkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMTgsMTAgKzE4LDEzIEBACiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDEwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlICJyYWlkMTAuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKIAogLyoKICAqIFJBSUQxMCBwcm92aWRlcyBhIGNvbWJpbmF0aW9uIG9mIFJBSUQwIGFuZCBSQUlEMSBmdW5jdGlvbmFsaXR5LgpAQCAtMTY5NSw3ICsxNjk4LDcgQEAKIAkJCXJldHVybiAwOwogCiAgc2tpcHBlZDoKLQltYXhfc2VjdG9yID0gbWRkZXYtPnNpemUgPDwgMTsKKwltYXhfc2VjdG9yID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWF4X3NlY3RvciA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CkBAIC0yMDIwLDYgKzIwMjMsMjUgQEAKIAlnb3RvIHNraXBwZWQ7CiB9CiAKK3N0YXRpYyBzZWN0b3JfdAorcmFpZDEwX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCXNlY3Rvcl90IHNpemU7CisJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisKKwlpZiAoIXJhaWRfZGlza3MpCisJCXJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAoIXNlY3RvcnMpCisJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CisKKwlzaXplID0gc2VjdG9ycyA+PiBjb25mLT5jaHVua19zaGlmdDsKKwlzZWN0b3JfZGl2KHNpemUsIGNvbmYtPmZhcl9jb3BpZXMpOworCXNpemUgPSBzaXplICogcmFpZF9kaXNrczsKKwlzZWN0b3JfZGl2KHNpemUsIGNvbmYtPm5lYXJfY29waWVzKTsKKworCXJldHVybiBzaXplIDw8IGNvbmYtPmNodW5rX3NoaWZ0OworfQorCiBzdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKIHsKIAljb25mX3QgKmNvbmY7CkBAIC0yMDc2LDcgKzIwOTgsNyBAQAogCWNvbmYtPmZhcl9vZmZzZXQgPSBmbzsKIAljb25mLT5jaHVua19tYXNrID0gKHNlY3Rvcl90KShtZGRldi0+Y2h1bmtfc2l6ZT4+OSktMTsKIAljb25mLT5jaHVua19zaGlmdCA9IGZmeih+bWRkZXYtPmNodW5rX3NpemUpIC0gOTsKLQlzaXplID0gbWRkZXYtPnNpemUgPj4gKGNvbmYtPmNodW5rX3NoaWZ0LTEpOworCXNpemUgPSBtZGRldi0+ZGV2X3NlY3RvcnMgPj4gY29uZi0+Y2h1bmtfc2hpZnQ7CiAJc2VjdG9yX2RpdihzaXplLCBmYyk7CiAJc2l6ZSA9IHNpemUgKiBjb25mLT5yYWlkX2Rpc2tzOwogCXNlY3Rvcl9kaXYoc2l6ZSwgbmMpOwpAQCAtMjA4OSw3ICsyMTExLDcgQEAKIAkgKi8KIAlzdHJpZGUgKz0gY29uZi0+cmFpZF9kaXNrcyAtIDE7CiAJc2VjdG9yX2RpdihzdHJpZGUsIGNvbmYtPnJhaWRfZGlza3MpOwotCW1kZGV2LT5zaXplID0gc3RyaWRlICA8PCAoY29uZi0+Y2h1bmtfc2hpZnQtMSk7CisJbWRkZXYtPmRldl9zZWN0b3JzID0gc3RyaWRlIDw8IGNvbmYtPmNodW5rX3NoaWZ0OwogCiAJaWYgKGZvKQogCQlzdHJpZGUgPSAxOwpAQCAtMjE3MSw4ICsyMTkzLDggQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNpemUgPDwgY29uZi0+Y2h1bmtfc2hpZnQ7Ci0JbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHNpemUgPDwgY29uZi0+Y2h1bmtfc2hpZnQ7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQxMF9zaXplKG1kZGV2LCAwLCAwKSk7CisJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHJhaWQxMF9zaXplKG1kZGV2LCAwLCAwKTsKIAogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDEwX3VucGx1ZzsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDEwX2Nvbmdlc3RlZDsKQEAgLTIyMDgsNiArMjIzMCw5IEBACiB7CiAJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAKKwlyYWlzZV9iYXJyaWVyKGNvbmYsIDApOworCWxvd2VyX2JhcnJpZXIoY29uZik7CisKIAltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZGRldi0+dGhyZWFkID0gTlVMTDsKIAlibGtfc3luY19xdWV1ZShtZGRldi0+cXVldWUpOyAvKiB0aGUgdW5wbHVnIGZuIHJlZmVyZW5jZXMgJ2NvbmYnKi8KQEAgLTIyNTUsNiArMjI4MCw3IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQxMF9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucXVpZXNjZQk9IHJhaWQxMF9xdWllc2NlLAorCS5zaXplCQk9IHJhaWQxMF9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFpZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmggYi9kcml2ZXJzL21kL3JhaWQxMC5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvcmFpZC9yYWlkMTAuaApyZW5hbWUgdG8gZHJpdmVycy9tZC9yYWlkMTAuaAppbmRleCBlOTA5MWNmLi4yNDRkYmU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmgKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuaApAQCAtMSw4ICsxLDYgQEAKICNpZm5kZWYgX1JBSUQxMF9ICiAjZGVmaW5lIF9SQUlEMTBfSAogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCiB0eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OwogCiBzdHJ1Y3QgbWlycm9yX2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGE1YmEwODAuLjNiYmM2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTQzLDExICs0MywxNCBAQAogICogbWlzcyBhbnkgYml0cy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgInJhaWQ2LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJyYWlkNS5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAvKgogICogU3RyaXBlIGNhY2hlCkBAIC05MSwxMSArOTQsNiBAQAogCiAjZGVmaW5lIHByaW50a19ybChhcmdzLi4uKSAoKHZvaWQpIChwcmludGtfcmF0ZWxpbWl0KCkgJiYgcHJpbnRrKGFyZ3MpKSkKIAotI2lmICFSQUlENl9VU0VfRU1QVFlfWkVST19QQUdFCi0vKiBJbiAuYnNzIHNvIGl0J3MgemVyb2VkICovCi1jb25zdCBjaGFyIHJhaWQ2X2VtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOwotI2VuZGlmCi0KIC8qCiAgKiBXZSBtYWludGFpbiBhIGJpYXNlZCBjb3VudCBvZiBhY3RpdmUgc3RyaXBlcyBpbiB0aGUgYm90dG9tIDE2IGJpdHMgb2YKICAqIGJpX3BoeXNfc2VnbWVudHMsIGFuZCBhIGNvdW50IG9mIHByb2Nlc3NlZCBzdHJpcGVzIGluIHRoZSB1cHBlciAxNiBiaXRzCkBAIC0xMzAsMTIgKzEyOCw0MiBAQAogCWJpby0+YmlfcGh5c19zZWdtZW50cyA9IHJhaWQ1X2JpX3BoeXNfc2VnbWVudHMoYmlvKSB8fCAoY250IDw8IDE2KTsKIH0KIAorLyogRmluZCBmaXJzdCBkYXRhIGRpc2sgaW4gYSByYWlkNiBzdHJpcGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHJhaWQ2X2QwKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCit7CisJaWYgKHNoLT5kZGZfbGF5b3V0KQorCQkvKiBkZGYgYWx3YXlzIHN0YXJ0IGZyb20gZmlyc3QgZGV2aWNlICovCisJCXJldHVybiAwOworCS8qIG1kIHN0YXJ0cyBqdXN0IGFmdGVyIFEgYmxvY2sgKi8KKwlpZiAoc2gtPnFkX2lkeCA9PSBzaC0+ZGlza3MgLSAxKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiBzaC0+cWRfaWR4ICsgMTsKK30KIHN0YXRpYyBpbmxpbmUgaW50IHJhaWQ2X25leHRfZGlzayhpbnQgZGlzaywgaW50IHJhaWRfZGlza3MpCiB7CiAJZGlzaysrOwogCXJldHVybiAoZGlzayA8IHJhaWRfZGlza3MpID8gZGlzayA6IDA7CiB9CiAKKy8qIFdoZW4gd2Fsa2luZyB0aHJvdWdoIHRoZSBkaXNrcyBpbiBhIHJhaWQ1LCBzdGFydGluZyBhdCByYWlkNl9kMCwKKyAqIFdlIG5lZWQgdG8gbWFwIGVhY2ggZGlzayB0byBhICdzbG90Jywgd2hlcmUgdGhlIGRhdGEgZGlza3MgYXJlIHNsb3QKKyAqIDAgLi4gcmFpZF9kaXNrcy0zLCB0aGUgcGFyaXR5IGRpc2sgaXMgcmFpZF9kaXNrcy0yIGFuZCB0aGUgUSBkaXNrCisgKiBpcyByYWlkX2Rpc2tzLTEuICBUaGlzIGhlbHAgZG9lcyB0aGF0IG1hcHBpbmcuCisgKi8KK3N0YXRpYyBpbnQgcmFpZDZfaWR4X3RvX3Nsb3QoaW50IGlkeCwgc3RydWN0IHN0cmlwZV9oZWFkICpzaCwKKwkJCSAgICAgaW50ICpjb3VudCwgaW50IHN5bmRyb21lX2Rpc2tzKQoreworCWludCBzbG90OworCisJaWYgKGlkeCA9PSBzaC0+cGRfaWR4KQorCQlyZXR1cm4gc3luZHJvbWVfZGlza3M7CisJaWYgKGlkeCA9PSBzaC0+cWRfaWR4KQorCQlyZXR1cm4gc3luZHJvbWVfZGlza3MgKyAxOworCXNsb3QgPSAoKmNvdW50KSsrOworCXJldHVybiBzbG90OworfQorCiBzdGF0aWMgdm9pZCByZXR1cm5faW8oc3RydWN0IGJpbyAqcmV0dXJuX2JpKQogewogCXN0cnVjdCBiaW8gKmJpID0gcmV0dXJuX2JpOwpAQCAtMTkzLDYgKzIyMSw3IEBACiAJCX0KIAl9CiB9CisKIHN0YXRpYyB2b2lkIHJlbGVhc2Vfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKQEAgLTI3MCw5ICsyOTksMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpOworc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGksIGludCBwcmV2aW91cyk7CitzdGF0aWMgdm9pZCBzdHJpcGVfc2V0X2lkeChzZWN0b3JfdCBzdHJpcGUsIHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IHByZXZpb3VzLAorCQkJICAgIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpOwogCi1zdGF0aWMgdm9pZCBpbml0X3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzZWN0b3JfdCBzZWN0b3IsIGludCBwZF9pZHgsIGludCBkaXNrcykKK3N0YXRpYyB2b2lkIGluaXRfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHNlY3Rvcl90IHNlY3RvciwgaW50IHByZXZpb3VzKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGk7CkBAIC0yODcsMTEgKzMxOCwxMiBAQAogCiAJcmVtb3ZlX2hhc2goc2gpOwogCisJc2gtPmdlbmVyYXRpb24gPSBjb25mLT5nZW5lcmF0aW9uIC0gcHJldmlvdXM7CisJc2gtPmRpc2tzID0gcHJldmlvdXMgPyBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIDogY29uZi0+cmFpZF9kaXNrczsKIAlzaC0+c2VjdG9yID0gc2VjdG9yOwotCXNoLT5wZF9pZHggPSBwZF9pZHg7CisJc3RyaXBlX3NldF9pZHgoc2VjdG9yLCBjb25mLCBwcmV2aW91cywgc2gpOwogCXNoLT5zdGF0ZSA9IDA7CiAKLQlzaC0+ZGlza3MgPSBkaXNrczsKIAogCWZvciAoaSA9IHNoLT5kaXNrczsgaS0tOyApIHsKIAkJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKQEAgLTMwNSwxMiArMzM3LDEzIEBACiAJCQlCVUcoKTsKIAkJfQogCQlkZXYtPmZsYWdzID0gMDsKLQkJcmFpZDVfYnVpbGRfYmxvY2soc2gsIGkpOworCQlyYWlkNV9idWlsZF9ibG9jayhzaCwgaSwgcHJldmlvdXMpOwogCX0KIAlpbnNlcnRfaGFzaChjb25mLCBzaCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKl9fZmluZF9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsIGludCBkaXNrcykKK3N0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKl9fZmluZF9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsCisJCQkJCSBzaG9ydCBnZW5lcmF0aW9uKQogewogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJc3RydWN0IGhsaXN0X25vZGUgKmhuOwpAQCAtMzE4LDcgKzM1MSw3IEBACiAJQ0hFQ0tfREVWTE9DSygpOwogCXByX2RlYnVnKCJfX2ZpbmRfc3RyaXBlLCBzZWN0b3IgJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzZWN0b3IpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNoLCBobiwgc3RyaXBlX2hhc2goY29uZiwgc2VjdG9yKSwgaGFzaCkKLQkJaWYgKHNoLT5zZWN0b3IgPT0gc2VjdG9yICYmIHNoLT5kaXNrcyA9PSBkaXNrcykKKwkJaWYgKHNoLT5zZWN0b3IgPT0gc2VjdG9yICYmIHNoLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb24pCiAJCQlyZXR1cm4gc2g7CiAJcHJfZGVidWcoIl9fc3RyaXBlICVsbHUgbm90IGluIGNhY2hlXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXNlY3Rvcik7CiAJcmV0dXJuIE5VTEw7CkBAIC0zMjcsOCArMzYwLDkgQEAKIHN0YXRpYyB2b2lkIHVucGx1Z19zbGF2ZXMobWRkZXZfdCAqbWRkZXYpOwogc3RhdGljIHZvaWQgcmFpZDVfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKmdldF9hY3RpdmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgZGlza3MsCi0JCQkJCSAgICAgaW50IHBkX2lkeCwgaW50IG5vYmxvY2spCitzdGF0aWMgc3RydWN0IHN0cmlwZV9oZWFkICoKK2dldF9hY3RpdmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc2VjdG9yX3Qgc2VjdG9yLAorCQkgIGludCBwcmV2aW91cywgaW50IG5vYmxvY2spCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIApAQCAtMzQwLDcgKzM3NCw3IEBACiAJCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9mb3Jfc3RyaXBlLAogCQkJCSAgICBjb25mLT5xdWllc2NlID09IDAsCiAJCQkJICAgIGNvbmYtPmRldmljZV9sb2NrLCAvKiBub3RoaW5nICovKTsKLQkJc2ggPSBfX2ZpbmRfc3RyaXBlKGNvbmYsIHNlY3RvciwgZGlza3MpOworCQlzaCA9IF9fZmluZF9zdHJpcGUoY29uZiwgc2VjdG9yLCBjb25mLT5nZW5lcmF0aW9uIC0gcHJldmlvdXMpOwogCQlpZiAoIXNoKSB7CiAJCQlpZiAoIWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQpCiAJCQkJc2ggPSBnZXRfZnJlZV9zdHJpcGUoY29uZik7CkBAIC0zNTgsMTAgKzM5MiwxMSBAQAogCQkJCQkpOwogCQkJCWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQgPSAwOwogCQkJfSBlbHNlCi0JCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcGRfaWR4LCBkaXNrcyk7CisJCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcHJldmlvdXMpOwogCQl9IGVsc2UgewogCQkJaWYgKGF0b21pY19yZWFkKCZzaC0+Y291bnQpKSB7Ci0JCQkgIEJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkpOworCQkJCUJVR19PTighbGlzdF9lbXB0eSgmc2gtPmxydSkKKwkJCQkgICAgJiYgIXRlc3RfYml0KFNUUklQRV9FWFBBTkRJTkcsICZzaC0+c3RhdGUpKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKCF0ZXN0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKSkKIAkJCQkJYXRvbWljX2luYygmY29uZi0+YWN0aXZlX3N0cmlwZXMpOwpAQCAtODk1LDggKzkzMCwxMCBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpzYzsKIAlpbnQgZGV2cyA9IGNvbmYtPnJhaWRfZGlza3M7CiAKLQlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sICJyYWlkNS0lcyIsIG1kbmFtZShjb25mLT5tZGRldikpOwotCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVsxXSwgInJhaWQ1LSVzLWFsdCIsIG1kbmFtZShjb25mLT5tZGRldikpOworCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwKKwkJInJhaWQlZC0lcyIsIGNvbmYtPmxldmVsLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsKKwlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMV0sCisJCSJyYWlkJWQtJXMtYWx0IiwgY29uZi0+bGV2ZWwsIG1kbmFtZShjb25mLT5tZGRldikpOwogCWNvbmYtPmFjdGl2ZV9uYW1lID0gMDsKIAlzYyA9IGttZW1fY2FjaGVfY3JlYXRlKGNvbmYtPmNhY2hlX25hbWVbY29uZi0+YWN0aXZlX25hbWVdLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLApAQCAtOTExLDcgKzk0OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQogc3RhdGljIGludCByZXNpemVfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBuZXdzaXplKQogewogCS8qIE1ha2UgYWxsIHRoZSBzdHJpcGVzIGFibGUgdG8gaG9sZCAnbmV3c2l6ZScgZGV2aWNlcy4KQEAgLTEwMzYsNyArMTA3Miw2IEBACiAJY29uZi0+cG9vbF9zaXplID0gbmV3c2l6ZTsKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgZHJvcF9vbmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKQEAgLTEwNjYsNyArMTEwMSw3IEBACiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3Qoc3RydWN0IGJpbyAqIGJpLCBpbnQgZXJyb3IpCiB7Ci0gCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gYmktPmJpX3ByaXZhdGU7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CiAJaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKTsKQEAgLTExNDgsNyArMTE4Myw3IEBACiAKIHN0YXRpYyB2b2lkIHJhaWQ1X2VuZF93cml0ZV9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpLCBpbnQgZXJyb3IpCiB7Ci0gCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoID0gYmktPmJpX3ByaXZhdGU7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CiAJaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmktPmJpX2ZsYWdzKTsKQEAgLTExNzYsOSArMTIxMSw5IEBACiB9CiAKIAotc3RhdGljIHNlY3Rvcl90IGNvbXB1dGVfYmxvY2tucihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CitzdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpLCBpbnQgcHJldmlvdXMpOwogCQotc3RhdGljIHZvaWQgcmFpZDVfYnVpbGRfYmxvY2soc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGkpCitzdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSwgaW50IHByZXZpb3VzKQogewogCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAKQEAgLTExOTQsNyArMTIyOSw3IEBACiAJZGV2LT5yZXEuYmlfcHJpdmF0ZSA9IHNoOwogCiAJZGV2LT5mbGFncyA9IDA7Ci0JZGV2LT5zZWN0b3IgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGkpOworCWRldi0+c2VjdG9yID0gY29tcHV0ZV9ibG9ja25yKHNoLCBpLCBwcmV2aW91cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KQpAQCAtMTIyNywxNSArMTI2MiwyMyBAQAogICogSW5wdXQ6IGEgJ2JpZycgc2VjdG9yIG51bWJlciwKICAqIE91dHB1dDogaW5kZXggb2YgdGhlIGRhdGEgYW5kIHBhcml0eSBkaXNrLCBhbmQgdGhlIHNlY3RvciAjIGluIHRoZW0uCiAgKi8KLXN0YXRpYyBzZWN0b3JfdCByYWlkNV9jb21wdXRlX3NlY3RvcihzZWN0b3JfdCByX3NlY3RvciwgdW5zaWduZWQgaW50IHJhaWRfZGlza3MsCi0JCQl1bnNpZ25lZCBpbnQgZGF0YV9kaXNrcywgdW5zaWduZWQgaW50ICogZGRfaWR4LAotCQkJdW5zaWduZWQgaW50ICogcGRfaWR4LCByYWlkNV9jb25mX3QgKmNvbmYpCitzdGF0aWMgc2VjdG9yX3QgcmFpZDVfY29tcHV0ZV9zZWN0b3IocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCByX3NlY3RvciwKKwkJCQkgICAgIGludCBwcmV2aW91cywgaW50ICpkZF9pZHgsCisJCQkJICAgICBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoKQogewogCWxvbmcgc3RyaXBlOwogCXVuc2lnbmVkIGxvbmcgY2h1bmtfbnVtYmVyOwogCXVuc2lnbmVkIGludCBjaHVua19vZmZzZXQ7CisJaW50IHBkX2lkeCwgcWRfaWR4OworCWludCBkZGZfbGF5b3V0ID0gMDsKIAlzZWN0b3JfdCBuZXdfc2VjdG9yOwotCWludCBzZWN0b3JzX3Blcl9jaHVuayA9IGNvbmYtPmNodW5rX3NpemUgPj4gOTsKKwlpbnQgYWxnb3JpdGhtID0gcHJldmlvdXMgPyBjb25mLT5wcmV2X2FsZ28KKwkJCQkgOiBjb25mLT5hbGdvcml0aG07CisJaW50IHNlY3RvcnNfcGVyX2NodW5rID0gcHJldmlvdXMgPyAoY29uZi0+cHJldl9jaHVuayA+PiA5KQorCQkJCQkgOiAoY29uZi0+Y2h1bmtfc2l6ZSA+PiA5KTsKKwlpbnQgcmFpZF9kaXNrcyA9IHByZXZpb3VzID8gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcworCQkJCSAgOiBjb25mLT5yYWlkX2Rpc2tzOworCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAogCS8qIEZpcnN0IGNvbXB1dGUgdGhlIGluZm9ybWF0aW9uIG9uIHRoaXMgc2VjdG9yICovCiAKQEAgLTEyNTksNjggKzEzMDIsMTcwIEBACiAJLyoKIAkgKiBTZWxlY3QgdGhlIHBhcml0eSBkaXNrIGJhc2VkIG9uIHRoZSB1c2VyIHNlbGVjdGVkIGFsZ29yaXRobS4KIAkgKi8KKwlwZF9pZHggPSBxZF9pZHggPSB+MDsKIAlzd2l0Y2goY29uZi0+bGV2ZWwpIHsKIAljYXNlIDQ6Ci0JCSpwZF9pZHggPSBkYXRhX2Rpc2tzOworCQlwZF9pZHggPSBkYXRhX2Rpc2tzOwogCQlicmVhazsKIAljYXNlIDU6Ci0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCWlmICgqZGRfaWR4ID49ICpwZF9pZHgpCisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKIAkJCQkoKmRkX2lkeCkrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7Ci0JCQlpZiAoKmRkX2lkeCA+PSAqcGRfaWR4KQorCQkJcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKIAkJCQkoKmRkX2lkeCkrKzsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMSArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAxICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJcGRfaWR4ID0gMDsKKwkJCSgqZGRfaWR4KSsrOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQkJcGRfaWR4ID0gZGF0YV9kaXNrczsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCQkJYWxnb3JpdGhtKTsKKwkJCUJVRygpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgNjoKIAotCQkvKioqKiBGSVggVEhJUyAqKioqLwotCQlzd2l0Y2ggKGNvbmYtPmFsZ29yaXRobSkgeworCQlzd2l0Y2ggKGFsZ29yaXRobSkgewogCQljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7Ci0JCQlpZiAoKnBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpCi0JCQkJKCpkZF9pZHgpKys7IAkvKiBRIEQgRCBEIFAgKi8KLQkJCWVsc2UgaWYgKCpkZF9pZHggPj0gKnBkX2lkeCkKKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gcGRfaWR4ICsgMTsKKwkJCWlmIChwZF9pZHggPT0gcmFpZF9kaXNrcy0xKSB7CisJCQkJKCpkZF9pZHgpKys7CS8qIFEgRCBEIEQgUCAqLworCQkJCXFkX2lkeCA9IDA7CisJCQl9IGVsc2UgaWYgKCpkZF9pZHggPj0gcGRfaWR4KQogCQkJCSgqZGRfaWR4KSArPSAyOyAvKiBEIEQgUCBRIEQgKi8KIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7Ci0JCQlpZiAoKnBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpCi0JCQkJKCpkZF9pZHgpKys7IAkvKiBRIEQgRCBEIFAgKi8KLQkJCWVsc2UgaWYgKCpkZF9pZHggPj0gKnBkX2lkeCkKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7CisJCQlxZF9pZHggPSBwZF9pZHggKyAxOworCQkJaWYgKHBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpIHsKKwkJCQkoKmRkX2lkeCkrKzsJLyogUSBEIEQgRCBQICovCisJCQkJcWRfaWR4ID0gMDsKKwkJCX0gZWxzZSBpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCiAJCQkJKCpkZF9pZHgpICs9IDI7IC8qIEQgRCBQIFEgRCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOwotCQkJKmRkX2lkeCA9ICgqcGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIDEpICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCSpkZF9pZHggPSAoKnBkX2lkeCArIDIgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIDEpICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKIAkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJcGRfaWR4ID0gMDsKKwkJCXFkX2lkeCA9IDE7CisJCQkoKmRkX2lkeCkgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJCXBkX2lkeCA9IGRhdGFfZGlza3M7CisJCQlxZF9pZHggPSBkYXRhX2Rpc2tzICsgMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX1pFUk9fUkVTVEFSVDoKKwkJCS8qIEV4YWN0bHkgdGhlIHNhbWUgYXMgUklHSFRfQVNZTU1FVFJJQywgYnV0IG9yCisJCQkgKiBvZiBibG9ja3MgZm9yIGNvbXB1dGluZyBRIGlzIGRpZmZlcmVudC4KKwkJCSAqLworCQkJcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCXFkX2lkeCA9IHBkX2lkeCArIDE7CisJCQlpZiAocGRfaWR4ID09IHJhaWRfZGlza3MtMSkgeworCQkJCSgqZGRfaWR4KSsrOwkvKiBRIEQgRCBEIFAgKi8KKwkJCQlxZF9pZHggPSAwOworCQkJfSBlbHNlIGlmICgqZGRfaWR4ID49IHBkX2lkeCkKKwkJCQkoKmRkX2lkeCkgKz0gMjsgLyogRCBEIFAgUSBEICovCisJCQlkZGZfbGF5b3V0ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fUkVTVEFSVDoKKwkJCS8qIFNhbWUgYSBsZWZ0X2FzeW1tZXRyaWMsIGJ5IGZpcnN0IHN0cmlwZSBpcworCQkJICogRCBEIEQgUCBRICByYXRoZXIgdGhhbgorCQkJICogUSBEIEQgRCBQCisJCQkgKi8KKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKChzdHJpcGUgKyAxKSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gcGRfaWR4ICsgMTsKKwkJCWlmIChwZF9pZHggPT0gcmFpZF9kaXNrcy0xKSB7CisJCQkJKCpkZF9pZHgpKys7CS8qIFEgRCBEIEQgUCAqLworCQkJCXFkX2lkeCA9IDA7CisJCQl9IGVsc2UgaWYgKCpkZF9pZHggPj0gcGRfaWR4KQorCQkJCSgqZGRfaWR4KSArPSAyOyAvKiBEIEQgUCBRIEQgKi8KKwkJCWRkZl9sYXlvdXQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9DT05USU5VRToKKwkJCS8qIFNhbWUgYXMgbGVmdF9zeW1tZXRyaWMgYnV0IFEgaXMgYmVmb3JlIFAgKi8KKwkJCXBkX2lkeCA9IHJhaWRfZGlza3MgLSAxIC0gKHN0cmlwZSAlIHJhaWRfZGlza3MpOworCQkJcWRfaWR4ID0gKHBkX2lkeCArIHJhaWRfZGlza3MgLSAxKSAlIHJhaWRfZGlza3M7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlkZGZfbGF5b3V0ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgorCQkJLyogUkFJRDUgbGVmdF9hc3ltbWV0cmljLCB3aXRoIFEgb24gbGFzdCBkZXZpY2UgKi8KKwkJCXBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSAocmFpZF9kaXNrcy0xKTsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKKwkJCQkoKmRkX2lkeCkrKzsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgorCQkJcGRfaWR4ID0gc3RyaXBlICUgKHJhaWRfZGlza3MtMSk7CisJCQlpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCisJCQkJKCpkZF9pZHgpKys7CisJCQlxZF9pZHggPSByYWlkX2Rpc2tzIC0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzIC0gc3RyaXBlICUgKHJhaWRfZGlza3MtMSk7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIChyYWlkX2Rpc2tzLTEpOworCQkJcWRfaWR4ID0gcmFpZF9kaXNrcyAtIDE7CisJCQlicmVhazsKKworCQljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIChyYWlkX2Rpc2tzLTEpOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAxICsgKmRkX2lkeCkgJSAocmFpZF9kaXNrcy0xKTsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzBfNjoKKwkJCXBkX2lkeCA9IDA7CisJCQkoKmRkX2lkeCkrKzsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAl9CiAKKwlpZiAoc2gpIHsKKwkJc2gtPnBkX2lkeCA9IHBkX2lkeDsKKwkJc2gtPnFkX2lkeCA9IHFkX2lkeDsKKwkJc2gtPmRkZl9sYXlvdXQgPSBkZGZfbGF5b3V0OworCX0KIAkvKgogCSAqIEZpbmFsbHksIGNvbXB1dGUgdGhlIG5ldyBzZWN0b3IgbnVtYmVyCiAJICovCkBAIC0xMzI5LDE3ICsxNDc0LDIxIEBACiB9CiAKIAotc3RhdGljIHNlY3Rvcl90IGNvbXB1dGVfYmxvY2tucihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSkKK3N0YXRpYyBzZWN0b3JfdCBjb21wdXRlX2Jsb2NrbnIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGksIGludCBwcmV2aW91cykKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCByYWlkX2Rpc2tzID0gc2gtPmRpc2tzOwogCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlzZWN0b3JfdCBuZXdfc2VjdG9yID0gc2gtPnNlY3RvciwgY2hlY2s7Ci0JaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OworCWludCBzZWN0b3JzX3Blcl9jaHVuayA9IHByZXZpb3VzID8gKGNvbmYtPnByZXZfY2h1bmsgPj4gOSkKKwkJCQkJIDogKGNvbmYtPmNodW5rX3NpemUgPj4gOSk7CisJaW50IGFsZ29yaXRobSA9IHByZXZpb3VzID8gY29uZi0+cHJldl9hbGdvCisJCQkJIDogY29uZi0+YWxnb3JpdGhtOwogCXNlY3Rvcl90IHN0cmlwZTsKIAlpbnQgY2h1bmtfb2Zmc2V0OwotCWludCBjaHVua19udW1iZXIsIGR1bW15MSwgZHVtbXkyLCBkZF9pZHggPSBpOworCWludCBjaHVua19udW1iZXIsIGR1bW15MSwgZGRfaWR4ID0gaTsKIAlzZWN0b3JfdCByX3NlY3RvcjsKKwlzdHJ1Y3Qgc3RyaXBlX2hlYWQgc2gyOwogCiAKIAljaHVua19vZmZzZXQgPSBzZWN0b3JfZGl2KG5ld19zZWN0b3IsIHNlY3RvcnNfcGVyX2NodW5rKTsKQEAgLTEzNTEsNyArMTUwMCw3IEBACiAJc3dpdGNoKGNvbmYtPmxldmVsKSB7CiAJY2FzZSA0OiBicmVhazsKIAljYXNlIDU6Ci0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQzoKIAkJCWlmIChpID4gc2gtPnBkX2lkeCkKQEAgLTEzNjMsMTkgKzE1MTIsMjcgQEAKIAkJCQlpICs9IHJhaWRfZGlza3M7CiAJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CiAJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCQlpIC09IDE7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAljYXNlIDY6Ci0JCWlmIChpID09IHJhaWQ2X25leHRfZGlzayhzaC0+cGRfaWR4LCByYWlkX2Rpc2tzKSkKKwkJaWYgKGkgPT0gc2gtPnFkX2lkeCkKIAkJCXJldHVybiAwOyAvKiBJdCBpcyB0aGUgUSBkaXNrICovCi0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQzoKLQkJICAJaWYgKHNoLT5wZF9pZHggPT0gcmFpZF9kaXNrcy0xKQotCQkJCWktLTsgCS8qIFEgRCBEIEQgUCAqLworCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19aRVJPX1JFU1RBUlQ6CisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fUkVTVEFSVDoKKwkJCWlmIChzaC0+cGRfaWR4ID09IHJhaWRfZGlza3MtMSkKKwkJCQlpLS07CS8qIFEgRCBEIEQgUCAqLwogCQkJZWxzZSBpZiAoaSA+IHNoLT5wZF9pZHgpCiAJCQkJaSAtPSAyOyAvKiBEIEQgUCBRIEQgKi8KIAkJCWJyZWFrOwpAQCAtMTM5MCw5ICsxNTQ3LDM1IEBACiAJCQkJaSAtPSAoc2gtPnBkX2lkeCArIDIpOwogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQkJaSAtPSAyOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fQ09OVElOVUU6CisJCQlpZiAoc2gtPnBkX2lkeCA9PSAwKQorCQkJCWktLTsJLyogUCBEIEQgRCBRICovCisJCQllbHNlIGlmIChpID4gc2gtPnBkX2lkeCkKKwkJCQlpIC09IDI7IC8qIEQgRCBRIFAgRCAqLworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgorCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CisJCQlpZiAoaSA+IHNoLT5wZF9pZHgpCisJCQkJaS0tOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OgorCQkJaWYgKGkgPCBzaC0+cGRfaWR4KQorCQkJCWkgKz0gZGF0YV9kaXNrcyArIDE7CisJCQlpIC09IChzaC0+cGRfaWR4ICsgMSk7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzBfNjoKKwkJCWkgLT0gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fQ1JJVCAicmFpZDY6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSAlZFxuIiwKLQkJCSAgICAgICBjb25mLT5hbGdvcml0aG0pOworCQkJICAgICAgIGFsZ29yaXRobSk7CisJCQlCVUcoKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNDAwLDggKzE1ODMsMTAgQEAKIAljaHVua19udW1iZXIgPSBzdHJpcGUgKiBkYXRhX2Rpc2tzICsgaTsKIAlyX3NlY3RvciA9IChzZWN0b3JfdCljaHVua19udW1iZXIgKiBzZWN0b3JzX3Blcl9jaHVuayArIGNodW5rX29mZnNldDsKIAotCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3Iocl9zZWN0b3IsIHJhaWRfZGlza3MsIGRhdGFfZGlza3MsICZkdW1teTEsICZkdW1teTIsIGNvbmYpOwotCWlmIChjaGVjayAhPSBzaC0+c2VjdG9yIHx8IGR1bW15MSAhPSBkZF9pZHggfHwgZHVtbXkyICE9IHNoLT5wZF9pZHgpIHsKKwljaGVjayA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIHJfc2VjdG9yLAorCQkJCSAgICAgcHJldmlvdXMsICZkdW1teTEsICZzaDIpOworCWlmIChjaGVjayAhPSBzaC0+c2VjdG9yIHx8IGR1bW15MSAhPSBkZF9pZHggfHwgc2gyLnBkX2lkeCAhPSBzaC0+cGRfaWR4CisJCXx8IHNoMi5xZF9pZHggIT0gc2gtPnFkX2lkeCkgewogCQlwcmludGsoS0VSTl9FUlIgImNvbXB1dGVfYmxvY2tucjogbWFwIG5vdCBjb3JyZWN0XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ2OCwxNCArMTY1MywxNiBAQAogCiBzdGF0aWMgdm9pZCBjb21wdXRlX3Bhcml0eTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IG1ldGhvZCkKIHsKLQlyYWlkNl9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwotCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4LCBxZF9pZHgsIGQwX2lkeCwgZGlza3MgPSBzaC0+ZGlza3MsIGNvdW50OworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CisJaW50IGksIHBkX2lkeCwgcWRfaWR4LCBkMF9pZHgsIGRpc2tzID0gc2gtPmRpc2tzLCBjb3VudDsKKwlpbnQgc3luZHJvbWVfZGlza3MgPSBzaC0+ZGRmX2xheW91dCA/IGRpc2tzIDogKGRpc2tzIC0gMik7CiAJc3RydWN0IGJpbyAqY2hvc2VuOwogCS8qKioqIEZJWCBUSElTOiBUaGlzIGNvdWxkIGJlIHZlcnkgYmFkIGlmIGRpc2tzIGlzIGNsb3NlIHRvIDI1NiAqKioqLwotCXZvaWQgKnB0cnNbZGlza3NdOworCXZvaWQgKnB0cnNbc3luZHJvbWVfZGlza3MrMl07CiAKLQlxZF9pZHggPSByYWlkNl9uZXh0X2Rpc2socGRfaWR4LCBkaXNrcyk7Ci0JZDBfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHFkX2lkeCwgZGlza3MpOworCXBkX2lkeCA9IHNoLT5wZF9pZHg7CisJcWRfaWR4ID0gc2gtPnFkX2lkeDsKKwlkMF9pZHggPSByYWlkNl9kMChzaCk7CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9wYXJpdHksIHN0cmlwZSAlbGx1LCBtZXRob2QgJWRcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgbWV0aG9kKTsKQEAgLTE1MTMsMjQgKzE3MDAsMjkgQEAKIAkJCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKTsKIAkJfQogCi0vLwlzd2l0Y2gobWV0aG9kKSB7Ci0vLwljYXNlIFJFQ09OU1RSVUNUX1dSSVRFOgotLy8JY2FzZSBDSEVDS19QQVJJVFk6Ci0vLwljYXNlIFVQREFURV9QQVJJVFk6Ci0JCS8qIE5vdGUgdGhhdCB1bmxpa2UgUkFJRC01LCB0aGUgb3JkZXJpbmcgb2YgdGhlIGRpc2tzIG1hdHRlcnMgZ3JlYXRseS4gKi8KLQkJLyogRklYOiBJcyB0aGlzIG9yZGVyaW5nIG9mIGRyaXZlcyBldmVuIHJlbW90ZWx5IG9wdGltYWw/ICovCi0JCWNvdW50ID0gMDsKLQkJaSA9IGQwX2lkeDsKLQkJZG8gewotCQkJcHRyc1tjb3VudCsrXSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2ldLnBhZ2UpOwotCQkJaWYgKGNvdW50IDw9IGRpc2tzLTIgJiYgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncykpCi0JCQkJcHJpbnRrKCJibG9jayAlZC8lZCBub3QgdXB0b2RhdGUgb24gcGFyaXR5IGNhbGNcbiIsIGksY291bnQpOwotCQkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7Ci0JCX0gd2hpbGUgKCBpICE9IGQwX2lkeCApOwotLy8JCWJyZWFrOwotLy8JfQorCS8qIE5vdGUgdGhhdCB1bmxpa2UgUkFJRC01LCB0aGUgb3JkZXJpbmcgb2YgdGhlIGRpc2tzIG1hdHRlcnMgZ3JlYXRseS4qLwogCi0JcmFpZDZfY2FsbC5nZW5fc3luZHJvbWUoZGlza3MsIFNUUklQRV9TSVpFLCBwdHJzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKKwkJcHRyc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCisJY291bnQgPSAwOworCWkgPSBkMF9pZHg7CisJZG8geworCQlpbnQgc2xvdCA9IHJhaWQ2X2lkeF90b19zbG90KGksIHNoLCAmY291bnQsIHN5bmRyb21lX2Rpc2tzKTsKKworCQlwdHJzW3Nsb3RdID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbaV0ucGFnZSk7CisJCWlmIChzbG90IDwgc3luZHJvbWVfZGlza3MgJiYKKwkJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImJsb2NrICVkLyVkIG5vdCB1cHRvZGF0ZSAiCisJCQkgICAgICAgIm9uIHBhcml0eSBjYWxjXG4iLCBpLCBjb3VudCk7CisJCQlCVUcoKTsKKwkJfQorCisJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOworCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKKwlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOworCisJcmFpZDZfY2FsbC5nZW5fc3luZHJvbWUoc3luZHJvbWVfZGlza3MrMiwgU1RSSVBFX1NJWkUsIHB0cnMpOwogCiAJc3dpdGNoKG1ldGhvZCkgewogCWNhc2UgUkVDT05TVFJVQ1RfV1JJVEU6CkBAIC0xNTUyLDggKzE3NDQsNyBAQAogewogCWludCBpLCBjb3VudCwgZGlza3MgPSBzaC0+ZGlza3M7CiAJdm9pZCAqcHRyW01BWF9YT1JfQkxPQ0tTXSwgKmRlc3QsICpwOwotCWludCBwZF9pZHggPSBzaC0+cGRfaWR4OwotCWludCBxZF9pZHggPSByYWlkNl9uZXh0X2Rpc2socGRfaWR4LCBkaXNrcyk7CisJaW50IHFkX2lkeCA9IHNoLT5xZF9pZHg7CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9ibG9ja18xLCBzdHJpcGUgJWxsdSwgaWR4ICVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIGRkX2lkeCk7CkBAIC0xNTg5LDYzICsxNzgwLDY1IEBACiBzdGF0aWMgdm9pZCBjb21wdXRlX2Jsb2NrXzIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGRkX2lkeDEsIGludCBkZF9pZHgyKQogewogCWludCBpLCBjb3VudCwgZGlza3MgPSBzaC0+ZGlza3M7Ci0JaW50IHBkX2lkeCA9IHNoLT5wZF9pZHg7Ci0JaW50IHFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKLQlpbnQgZDBfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHFkX2lkeCwgZGlza3MpOwotCWludCBmYWlsYSwgZmFpbGI7CisJaW50IHN5bmRyb21lX2Rpc2tzID0gc2gtPmRkZl9sYXlvdXQgPyBkaXNrcyA6IGRpc2tzLTI7CisJaW50IGQwX2lkeCA9IHJhaWQ2X2QwKHNoKTsKKwlpbnQgZmFpbGEgPSAtMSwgZmFpbGIgPSAtMTsKKwkvKioqKiBGSVggVEhJUzogVGhpcyBjb3VsZCBiZSB2ZXJ5IGJhZCBpZiBkaXNrcyBpcyBjbG9zZSB0byAyNTYgKioqKi8KKwl2b2lkICpwdHJzW3N5bmRyb21lX2Rpc2tzKzJdOwogCi0JLyogZmFpbGEgYW5kIGZhaWxiIGFyZSBkaXNrIG51bWJlcnMgcmVsYXRpdmUgdG8gZDBfaWR4ICovCi0JLyogcGRfaWR4IGJlY29tZSBkaXNrcy0yIGFuZCBxZF9pZHggYmVjb21lIGRpc2tzLTEgKi8KLQlmYWlsYSA9IChkZF9pZHgxIDwgZDBfaWR4KSA/IGRkX2lkeDErKGRpc2tzLWQwX2lkeCkgOiBkZF9pZHgxLWQwX2lkeDsKLQlmYWlsYiA9IChkZF9pZHgyIDwgZDBfaWR4KSA/IGRkX2lkeDIrKGRpc2tzLWQwX2lkeCkgOiBkZF9pZHgyLWQwX2lkeDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MgOyBpKyspCisJCXB0cnNbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwljb3VudCA9IDA7CisJaSA9IGQwX2lkeDsKKwlkbyB7CisJCWludCBzbG90ID0gcmFpZDZfaWR4X3RvX3Nsb3QoaSwgc2gsICZjb3VudCwgc3luZHJvbWVfZGlza3MpOworCisJCXB0cnNbc2xvdF0gPSBwYWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsKKworCQlpZiAoaSA9PSBkZF9pZHgxKQorCQkJZmFpbGEgPSBzbG90OworCQlpZiAoaSA9PSBkZF9pZHgyKQorCQkJZmFpbGIgPSBzbG90OworCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKKwl9IHdoaWxlIChpICE9IGQwX2lkeCk7CisJQlVHX09OKGNvdW50ICE9IHN5bmRyb21lX2Rpc2tzKTsKIAogCUJVR19PTihmYWlsYSA9PSBmYWlsYik7CiAJaWYgKCBmYWlsYiA8IGZhaWxhICkgeyBpbnQgdG1wID0gZmFpbGE7IGZhaWxhID0gZmFpbGI7IGZhaWxiID0gdG1wOyB9CiAKIAlwcl9kZWJ1ZygiY29tcHV0ZV9ibG9ja18yLCBzdHJpcGUgJWxsdSwgaWR4ICVkLCVkICglZCwlZClcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgZGRfaWR4MSwgZGRfaWR4MiwgZmFpbGEsIGZhaWxiKTsKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgZGRfaWR4MSwgZGRfaWR4MiwKKwkJIGZhaWxhLCBmYWlsYik7CiAKLQlpZiAoIGZhaWxiID09IGRpc2tzLTEgKSB7CisJaWYgKGZhaWxiID09IHN5bmRyb21lX2Rpc2tzKzEpIHsKIAkJLyogUSBkaXNrIGlzIG9uZSBvZiB0aGUgbWlzc2luZyBkaXNrcyAqLwotCQlpZiAoIGZhaWxhID09IGRpc2tzLTIgKSB7CisJCWlmIChmYWlsYSA9PSBzeW5kcm9tZV9kaXNrcykgewogCQkJLyogTWlzc2luZyBQK1EsIGp1c3QgcmVjb21wdXRlICovCiAJCQljb21wdXRlX3Bhcml0eTYoc2gsIFVQREFURV9QQVJJVFkpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJLyogV2UncmUgbWlzc2luZyBEK1E7IHJlY29tcHV0ZSBEIGZyb20gUCAqLwotCQkJY29tcHV0ZV9ibG9ja18xKHNoLCAoZGRfaWR4MSA9PSBxZF9pZHgpID8gZGRfaWR4MiA6IGRkX2lkeDEsIDApOworCQkJY29tcHV0ZV9ibG9ja18xKHNoLCAoKGRkX2lkeDEgPT0gc2gtPnFkX2lkeCkgPworCQkJCQkgICAgIGRkX2lkeDIgOiBkZF9pZHgxKSwKKwkJCQkJMCk7CiAJCQljb21wdXRlX3Bhcml0eTYoc2gsIFVQREFURV9QQVJJVFkpOyAvKiBJcyB0aGlzIG5lY2Vzc2FyeT8gKi8KIAkJCXJldHVybjsKIAkJfQogCX0KIAotCS8qIFdlJ3JlIG1pc3NpbmcgRCtQIG9yIEQrRDsgYnVpbGQgcG9pbnRlciB0YWJsZSAqLwotCXsKLQkJLyoqKiogRklYIFRISVM6IFRoaXMgY291bGQgYmUgdmVyeSBiYWQgaWYgZGlza3MgaXMgY2xvc2UgdG8gMjU2ICoqKiovCi0JCXZvaWQgKnB0cnNbZGlza3NdOwotCi0JCWNvdW50ID0gMDsKLQkJaSA9IGQwX2lkeDsKLQkJZG8gewotCQkJcHRyc1tjb3VudCsrXSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2ldLnBhZ2UpOwotCQkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7Ci0JCQlpZiAoaSAhPSBkZF9pZHgxICYmIGkgIT0gZGRfaWR4MiAmJgotCQkJICAgICF0ZXN0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpKQotCQkJCXByaW50aygiY29tcHV0ZV8yIHdpdGggbWlzc2luZyBibG9jayAlZC8lZFxuIiwgY291bnQsIGkpOwotCQl9IHdoaWxlICggaSAhPSBkMF9pZHggKTsKLQotCQlpZiAoIGZhaWxiID09IGRpc2tzLTIgKSB7Ci0JCQkvKiBXZSdyZSBtaXNzaW5nIEQrUC4gKi8KLQkJCXJhaWQ2X2RhdGFwX3JlY292KGRpc2tzLCBTVFJJUEVfU0laRSwgZmFpbGEsIHB0cnMpOwotCQl9IGVsc2UgewotCQkJLyogV2UncmUgbWlzc2luZyBEK0QuICovCi0JCQlyYWlkNl8yZGF0YV9yZWNvdihkaXNrcywgU1RSSVBFX1NJWkUsIGZhaWxhLCBmYWlsYiwgcHRycyk7Ci0JCX0KLQotCQkvKiBCb3RoIHRoZSBhYm92ZSB1cGRhdGUgYm90aCBtaXNzaW5nIGJsb2NrcyAqLwotCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltkZF9pZHgxXS5mbGFncyk7Ci0JCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2RkX2lkeDJdLmZsYWdzKTsKKwkvKiBXZSdyZSBtaXNzaW5nIEQrUCBvciBEK0Q7ICovCisJaWYgKGZhaWxiID09IHN5bmRyb21lX2Rpc2tzKSB7CisJCS8qIFdlJ3JlIG1pc3NpbmcgRCtQLiAqLworCQlyYWlkNl9kYXRhcF9yZWNvdihzeW5kcm9tZV9kaXNrcysyLCBTVFJJUEVfU0laRSwgZmFpbGEsIHB0cnMpOworCX0gZWxzZSB7CisJCS8qIFdlJ3JlIG1pc3NpbmcgRCtELiAqLworCQlyYWlkNl8yZGF0YV9yZWNvdihzeW5kcm9tZV9kaXNrcysyLCBTVFJJUEVfU0laRSwgZmFpbGEsIGZhaWxiLAorCQkJCSAgcHRycyk7CiAJfQorCisJLyogQm90aCB0aGUgYWJvdmUgdXBkYXRlIGJvdGggbWlzc2luZyBibG9ja3MgKi8KKwlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltkZF9pZHgxXS5mbGFncyk7CisJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbZGRfaWR4Ml0uZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTgwMCwxNyArMTk5MywyMSBAQAogCQltZW1jbXAoYSwgYSs0LCBTVFJJUEVfU0laRS00KT09MCk7CiB9CiAKLXN0YXRpYyBpbnQgc3RyaXBlX3RvX3BkaWR4KHNlY3Rvcl90IHN0cmlwZSwgcmFpZDVfY29uZl90ICpjb25mLCBpbnQgZGlza3MpCitzdGF0aWMgdm9pZCBzdHJpcGVfc2V0X2lkeChzZWN0b3JfdCBzdHJpcGUsIHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IHByZXZpb3VzLAorCQkJICAgIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7Ci0JaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OwotCWludCBwZF9pZHgsIGRkX2lkeDsKKwlpbnQgc2VjdG9yc19wZXJfY2h1bmsgPQorCQlwcmV2aW91cyA/IChjb25mLT5wcmV2X2NodW5rID4+IDkpCisJCQkgOiAoY29uZi0+Y2h1bmtfc2l6ZSA+PiA5KTsKKwlpbnQgZGRfaWR4OwogCWludCBjaHVua19vZmZzZXQgPSBzZWN0b3JfZGl2KHN0cmlwZSwgc2VjdG9yc19wZXJfY2h1bmspOworCWludCBkaXNrcyA9IHByZXZpb3VzID8gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyA6IGNvbmYtPnJhaWRfZGlza3M7CiAKLQlyYWlkNV9jb21wdXRlX3NlY3RvcihzdHJpcGUgKiAoZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpCisJcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwKKwkJCSAgICAgc3RyaXBlICogKGRpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKQogCQkJICAgICAqc2VjdG9yc19wZXJfY2h1bmsgKyBjaHVua19vZmZzZXQsCi0JCQkgICAgIGRpc2tzLCBkaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCwKLQkJCSAgICAgJmRkX2lkeCwgJnBkX2lkeCwgY29uZik7Ci0JcmV0dXJuIHBkX2lkeDsKKwkJCSAgICAgcHJldmlvdXMsCisJCQkgICAgICZkZF9pZHgsIHNoKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIxODEsNyArMjM3OCw3IEBACiAJCXN0cnVjdCByNl9zdGF0ZSAqcjZzLCBpbnQgZGlza3MpCiB7CiAJaW50IHJjdyA9IDAsIG11c3RfY29tcHV0ZSA9IDAsIHBkX2lkeCA9IHNoLT5wZF9pZHgsIGk7Ci0JaW50IHFkX2lkeCA9IHI2cy0+cWRfaWR4OworCWludCBxZF9pZHggPSBzaC0+cWRfaWR4OwogCWZvciAoaSA9IGRpc2tzOyBpLS07ICkgewogCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOwogCQkvKiBXb3VsZCBJIGhhdmUgdG8gcmVhZCB0aGlzIGJ1ZmZlciBmb3IgcmVjb25zdHJ1Y3Rfd3JpdGUgKi8KQEAgLTIzNzEsNyArMjU2OCw3IEBACiAJaW50IHVwZGF0ZV9wID0gMCwgdXBkYXRlX3EgPSAwOwogCXN0cnVjdCByNWRldiAqZGV2OwogCWludCBwZF9pZHggPSBzaC0+cGRfaWR4OwotCWludCBxZF9pZHggPSByNnMtPnFkX2lkeDsKKwlpbnQgcWRfaWR4ID0gc2gtPnFkX2lkeDsKIAogCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAKQEAgLTI0NjcsMTcgKzI2NjQsMTQgQEAKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKIAljbGVhcl9iaXQoU1RSSVBFX0VYUEFORF9TT1VSQ0UsICZzaC0+c3RhdGUpOwogCWZvciAoaSA9IDA7IGkgPCBzaC0+ZGlza3M7IGkrKykKLQkJaWYgKGkgIT0gc2gtPnBkX2lkeCAmJiAoIXI2cyB8fCBpICE9IHI2cy0+cWRfaWR4KSkgewotCQkJaW50IGRkX2lkeCwgcGRfaWR4LCBqOworCQlpZiAoaSAhPSBzaC0+cGRfaWR4ICYmIGkgIT0gc2gtPnFkX2lkeCkgeworCQkJaW50IGRkX2lkeCwgajsKIAkJCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2gyOwogCi0JCQlzZWN0b3JfdCBibiA9IGNvbXB1dGVfYmxvY2tucihzaCwgaSk7Ci0JCQlzZWN0b3JfdCBzID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoYm4sIGNvbmYtPnJhaWRfZGlza3MsCi0JCQkJCQljb25mLT5yYWlkX2Rpc2tzIC0KLQkJCQkJCWNvbmYtPm1heF9kZWdyYWRlZCwgJmRkX2lkeCwKLQkJCQkJCSZwZF9pZHgsIGNvbmYpOwotCQkJc2gyID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgcywgY29uZi0+cmFpZF9kaXNrcywKLQkJCQkJCXBkX2lkeCwgMSk7CisJCQlzZWN0b3JfdCBibiA9IGNvbXB1dGVfYmxvY2tucihzaCwgaSwgMSk7CisJCQlzZWN0b3JfdCBzID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgYm4sIDAsCisJCQkJCQkJICAmZGRfaWR4LCBOVUxMKTsKKwkJCXNoMiA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHMsIDAsIDEpOwogCQkJaWYgKHNoMiA9PSBOVUxMKQogCQkJCS8qIHNvIGZhciBvbmx5IHRoZSBlYXJseSBibG9ja3Mgb2YgdGhpcyBzdHJpcGUKIAkJCQkgKiBoYXZlIGJlZW4gcmVxdWVzdGVkLiAgV2hlbiBsYXRlciBibG9ja3MKQEAgLTI1MDAsOCArMjY5NCw3IEBACiAJCQlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gyLT5kZXZbZGRfaWR4XS5mbGFncyk7CiAJCQlmb3IgKGogPSAwOyBqIDwgY29uZi0+cmFpZF9kaXNrczsgaisrKQogCQkJCWlmIChqICE9IHNoMi0+cGRfaWR4ICYmCi0JCQkJICAgICghcjZzIHx8IGogIT0gcmFpZDZfbmV4dF9kaXNrKHNoMi0+cGRfaWR4LAotCQkJCQkJCQkgc2gyLT5kaXNrcykpICYmCisJCQkJICAgICghcjZzIHx8IGogIT0gc2gyLT5xZF9pZHgpICYmCiAJCQkJICAgICF0ZXN0X2JpdChSNV9FeHBhbmRlZCwgJnNoMi0+ZGV2W2pdLmZsYWdzKSkKIAkJCQkJYnJlYWs7CiAJCQlpZiAoaiA9PSBjb25mLT5yYWlkX2Rpc2tzKSB7CkBAIC0yNzUwLDYgKzI5NDMsMjMgQEAKIAogCS8qIEZpbmlzaCByZWNvbnN0cnVjdCBvcGVyYXRpb25zIGluaXRpYXRlZCBieSB0aGUgZXhwYW5zaW9uIHByb2Nlc3MgKi8KIAlpZiAoc2gtPnJlY29uc3RydWN0X3N0YXRlID09IHJlY29uc3RydWN0X3N0YXRlX3Jlc3VsdCkgeworCQlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoMgorCQkJPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzaC0+c2VjdG9yLCAxLCAxKTsKKwkJaWYgKHNoMiAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoMi0+c3RhdGUpKSB7CisJCQkvKiBzaCBjYW5ub3QgYmUgd3JpdHRlbiB1bnRpbCBzaDIgaGFzIGJlZW4gcmVhZC4KKwkJCSAqIHNvIGFycmFuZ2UgZm9yIHNoIHRvIGJlIGRlbGF5ZWQgYSBsaXR0bGUKKwkJCSAqLworCQkJc2V0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7CisJCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwKKwkJCQkJICAgICAgJnNoMi0+c3RhdGUpKQorCQkJCWF0b21pY19pbmMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOworCQkJcmVsZWFzZV9zdHJpcGUoc2gyKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWlmIChzaDIpCisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCiAJCXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSA9IHJlY29uc3RydWN0X3N0YXRlX2lkbGU7CiAJCWNsZWFyX2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKTsKIAkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrczsgaS0tOyApIHsKQEAgLTI3NjMsOCArMjk3Myw3IEBACiAJICAgICFzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUpIHsKIAkJLyogTmVlZCB0byB3cml0ZSBvdXQgYWxsIGJsb2NrcyBhZnRlciBjb21wdXRpbmcgcGFyaXR5ICovCiAJCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCXNoLT5wZF9pZHggPSBzdHJpcGVfdG9fcGRpZHgoc2gtPnNlY3RvciwgY29uZiwKLQkJCWNvbmYtPnJhaWRfZGlza3MpOworCQlzdHJpcGVfc2V0X2lkeChzaC0+c2VjdG9yLCBjb25mLCAwLCBzaCk7CiAJCXNjaGVkdWxlX3JlY29uc3RydWN0aW9uNShzaCwgJnMsIDEsIDEpOwogCX0gZWxzZSBpZiAocy5leHBhbmRlZCAmJiAhc2gtPnJlY29uc3RydWN0X3N0YXRlICYmIHMubG9ja2VkID09IDApIHsKIAkJY2xlYXJfYml0KFNUUklQRV9FWFBBTkRfUkVBRFksICZzaC0+c3RhdGUpOwpAQCAtMjc5NiwyMCArMzAwNSwxOSBAQAogCiBzdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlNihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2UpCiB7Ci0JcmFpZDZfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrczsKIAlzdHJ1Y3QgYmlvICpyZXR1cm5fYmkgPSBOVUxMOwotCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4OworCWludCBpLCBwZF9pZHggPSBzaC0+cGRfaWR4LCBxZF9pZHggPSBzaC0+cWRfaWR4OwogCXN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSBzOwogCXN0cnVjdCByNl9zdGF0ZSByNnM7CiAJc3RydWN0IHI1ZGV2ICpkZXYsICpwZGV2LCAqcWRldjsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXYgPSBOVUxMOwogCi0JcjZzLnFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKIAlwcl9kZWJ1ZygiaGFuZGxpbmcgc3RyaXBlICVsbHUsIHN0YXRlPSUjbHggY250PSVkLCAiCiAJCSJwZF9pZHg9JWQsIHFkX2lkeD0lZFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBzaC0+c3RhdGUsCi0JICAgICAgIGF0b21pY19yZWFkKCZzaC0+Y291bnQpLCBwZF9pZHgsIHI2cy5xZF9pZHgpOworCSAgICAgICBhdG9taWNfcmVhZCgmc2gtPmNvdW50KSwgcGRfaWR4LCBxZF9pZHgpOwogCW1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKIAogCXNwaW5fbG9jaygmc2gtPmxvY2spOwpAQCAtMjkyMCw5ICszMTI4LDkgQEAKIAlwZGV2ID0gJnNoLT5kZXZbcGRfaWR4XTsKIAlyNnMucF9mYWlsZWQgPSAocy5mYWlsZWQgPj0gMSAmJiByNnMuZmFpbGVkX251bVswXSA9PSBwZF9pZHgpCiAJCXx8IChzLmZhaWxlZCA+PSAyICYmIHI2cy5mYWlsZWRfbnVtWzFdID09IHBkX2lkeCk7Ci0JcWRldiA9ICZzaC0+ZGV2W3I2cy5xZF9pZHhdOwotCXI2cy5xX2ZhaWxlZCA9IChzLmZhaWxlZCA+PSAxICYmIHI2cy5mYWlsZWRfbnVtWzBdID09IHI2cy5xZF9pZHgpCi0JCXx8IChzLmZhaWxlZCA+PSAyICYmIHI2cy5mYWlsZWRfbnVtWzFdID09IHI2cy5xZF9pZHgpOworCXFkZXYgPSAmc2gtPmRldltxZF9pZHhdOworCXI2cy5xX2ZhaWxlZCA9IChzLmZhaWxlZCA+PSAxICYmIHI2cy5mYWlsZWRfbnVtWzBdID09IHFkX2lkeCkKKwkJfHwgKHMuZmFpbGVkID49IDIgJiYgcjZzLmZhaWxlZF9udW1bMV0gPT0gcWRfaWR4KTsKIAogCWlmICggcy53cml0dGVuICYmCiAJICAgICAoIHI2cy5wX2ZhaWxlZCB8fCAoKHRlc3RfYml0KFI1X0luc3luYywgJnBkZXYtPmZsYWdzKQpAQCAtMjk4MCwxMCArMzE4OCwyNiBAQAogCQl9CiAKIAlpZiAocy5leHBhbmRlZCAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKSkgeworCQlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoMgorCQkJPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzaC0+c2VjdG9yLCAxLCAxKTsKKwkJaWYgKHNoMiAmJiB0ZXN0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoMi0+c3RhdGUpKSB7CisJCQkvKiBzaCBjYW5ub3QgYmUgd3JpdHRlbiB1bnRpbCBzaDIgaGFzIGJlZW4gcmVhZC4KKwkJCSAqIHNvIGFycmFuZ2UgZm9yIHNoIHRvIGJlIGRlbGF5ZWQgYSBsaXR0bGUKKwkJCSAqLworCQkJc2V0X2JpdChTVFJJUEVfREVMQVlFRCwgJnNoLT5zdGF0ZSk7CisJCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNUUklQRV9QUkVSRUFEX0FDVElWRSwKKwkJCQkJICAgICAgJnNoMi0+c3RhdGUpKQorCQkJCWF0b21pY19pbmMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOworCQkJcmVsZWFzZV9zdHJpcGUoc2gyKTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWlmIChzaDIpCisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCiAJCS8qIE5lZWQgdG8gd3JpdGUgb3V0IGFsbCBibG9ja3MgYWZ0ZXIgY29tcHV0aW5nIFAmUSAqLwogCQlzaC0+ZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQlzaC0+cGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KHNoLT5zZWN0b3IsIGNvbmYsCi0JCQkJCSAgICAgY29uZi0+cmFpZF9kaXNrcyk7CisJCXN0cmlwZV9zZXRfaWR4KHNoLT5zZWN0b3IsIGNvbmYsIDAsIHNoKTsKIAkJY29tcHV0ZV9wYXJpdHk2KHNoLCBSRUNPTlNUUlVDVF9XUklURSk7CiAJCWZvciAoaSA9IGNvbmYtPnJhaWRfZGlza3MgOyBpLS0gOyAgKSB7CiAJCQlzZXRfYml0KFI1X0xPQ0tFRCwgJnNoLT5kZXZbaV0uZmxhZ3MpOwpAQCAtMzEzNCw2ICszMzU4LDggQEAKIAlpZiAoKGJ2bS0+YmlfcncgJiAxKSA9PSBXUklURSkKIAkJcmV0dXJuIGJpb3ZlYy0+YnZfbGVuOyAvKiBhbHdheXMgYWxsb3cgd3JpdGVzIHRvIGJlIG1lcmdlYWJsZSAqLwogCisJaWYgKG1kZGV2LT5uZXdfY2h1bmsgPCBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmsgPj4gOTsKIAltYXggPSAgKGNodW5rX3NlY3RvcnMgLSAoKHNlY3RvciAmIChjaHVua19zZWN0b3JzIC0gMSkpICsgYmlvX3NlY3RvcnMpKSA8PCA5OwogCWlmIChtYXggPCAwKSBtYXggPSAwOwogCWlmIChtYXggPD0gYmlvdmVjLT5idl9sZW4gJiYgYmlvX3NlY3RvcnMgPT0gMCkKQEAgLTMxNDksNiArMzM3NSw4IEBACiAJdW5zaWduZWQgaW50IGNodW5rX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2l6ZSA+PiA5OwogCXVuc2lnbmVkIGludCBiaW9fc2VjdG9ycyA9IGJpby0+Ymlfc2l6ZSA+PiA5OwogCisJaWYgKG1kZGV2LT5uZXdfY2h1bmsgPCBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmsgPj4gOTsKIAlyZXR1cm4gIGNodW5rX3NlY3RvcnMgPj0KIAkJKChzZWN0b3IgJiAoY2h1bmtfc2VjdG9ycyAtIDEpKSArIGJpb19zZWN0b3JzKTsKIH0KQEAgLTMyNTUsOSArMzQ4Myw3IEBACiB7CiAJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCWNvbnN0IHVuc2lnbmVkIGludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKLQl1bnNpZ25lZCBpbnQgZGRfaWR4LCBwZF9pZHg7CisJdW5zaWduZWQgaW50IGRkX2lkeDsKIAlzdHJ1Y3QgYmlvKiBhbGlnbl9iaTsKIAltZGtfcmRldl90ICpyZGV2OwogCkBAIC0zMjY2LDcgKzM0OTIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAJLyoKLSAJICogdXNlIGJpb19jbG9uZSB0byBtYWtlIGEgY29weSBvZiB0aGUgYmlvCisJICogdXNlIGJpb19jbG9uZSB0byBtYWtlIGEgY29weSBvZiB0aGUgYmlvCiAJICovCiAJYWxpZ25fYmkgPSBiaW9fY2xvbmUocmFpZF9iaW8sIEdGUF9OT0lPKTsKIAlpZiAoIWFsaWduX2JpKQpAQCAtMzI4MCwxMiArMzUwNiw5IEBACiAJLyoKIAkgKgljb21wdXRlIHBvc2l0aW9uCiAJICovCi0JYWxpZ25fYmktPmJpX3NlY3RvciA9ICByYWlkNV9jb21wdXRlX3NlY3RvcihyYWlkX2Jpby0+Ymlfc2VjdG9yLAotCQkJCQlyYWlkX2Rpc2tzLAotCQkJCQlkYXRhX2Rpc2tzLAotCQkJCQkmZGRfaWR4LAotCQkJCQkmcGRfaWR4LAotCQkJCQljb25mKTsKKwlhbGlnbl9iaS0+Ymlfc2VjdG9yID0gIHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIHJhaWRfYmlvLT5iaV9zZWN0b3IsCisJCQkJCQkgICAgMCwKKwkJCQkJCSAgICAmZGRfaWR4LCBOVUxMKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2RkX2lkeF0ucmRldik7CkBAIC0zMzc3LDcgKzM2MDAsNyBAQAogewogCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOwogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCXVuc2lnbmVkIGludCBkZF9pZHgsIHBkX2lkeDsKKwlpbnQgZGRfaWR4OwogCXNlY3Rvcl90IG5ld19zZWN0b3I7CiAJc2VjdG9yX3QgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CkBAIC0zNDAwLDcgKzM2MjMsNyBAQAogCWlmIChydyA9PSBSRUFEICYmCiAJICAgICBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IgJiYKIAkgICAgIGNodW5rX2FsaWduZWRfcmVhZChxLGJpKSkKLSAgICAgICAgICAgIAlyZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAKIAlsb2dpY2FsX3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsKIAlsYXN0X3NlY3RvciA9IGJpLT5iaV9zZWN0b3IgKyAoYmktPmJpX3NpemU+PjkpOwpAQCAtMzQxMCwyNiArMzYzMywzMSBAQAogCWZvciAoO2xvZ2ljYWxfc2VjdG9yIDwgbGFzdF9zZWN0b3I7IGxvZ2ljYWxfc2VjdG9yICs9IFNUUklQRV9TRUNUT1JTKSB7CiAJCURFRklORV9XQUlUKHcpOwogCQlpbnQgZGlza3MsIGRhdGFfZGlza3M7CisJCWludCBwcmV2aW91czsKIAogCXJldHJ5OgorCQlwcmV2aW91cyA9IDA7CisJCWRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAkJcHJlcGFyZV90b193YWl0KCZjb25mLT53YWl0X2Zvcl9vdmVybGFwLCAmdywgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlpZiAobGlrZWx5KGNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9PSBNYXhTZWN0b3IpKQotCQkJZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQllbHNlIHsKLQkJCS8qIHNwaW5sb2NrIGlzIG5lZWRlZCBhcyBleHBhbmRfcHJvZ3Jlc3MgbWF5IGJlCisJCWlmICh1bmxpa2VseShjb25mLT5yZXNoYXBlX3Byb2dyZXNzICE9IE1heFNlY3RvcikpIHsKKwkJCS8qIHNwaW5sb2NrIGlzIG5lZWRlZCBhcyByZXNoYXBlX3Byb2dyZXNzIG1heSBiZQogCQkJICogNjRiaXQgb24gYSAzMmJpdCBwbGF0Zm9ybSwgYW5kIHNvIGl0IG1pZ2h0IGJlCiAJCQkgKiBwb3NzaWJsZSB0byBzZWUgYSBoYWxmLXVwZGF0ZWQgdmFsdWUKLQkJCSAqIE9mY291cnNlIGV4cGFuZF9wcm9ncmVzcyBjb3VsZCBjaGFuZ2UgYWZ0ZXIKKwkJCSAqIE9mY291cnNlIHJlc2hhcGVfcHJvZ3Jlc3MgY291bGQgY2hhbmdlIGFmdGVyCiAJCQkgKiB0aGUgbG9jayBpcyBkcm9wcGVkLCBzbyBvbmNlIHdlIGdldCBhIHJlZmVyZW5jZQogCQkJICogdG8gdGhlIHN0cmlwZSB0aGF0IHdlIHRoaW5rIGl0IGlzLCB3ZSB3aWxsIGhhdmUKIAkJCSAqIHRvIGNoZWNrIGFnYWluLgogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCQlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCQlpZiAobG9naWNhbF9zZWN0b3IgPj0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzKQorCQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkJCSAgICA/IGxvZ2ljYWxfc2VjdG9yIDwgY29uZi0+cmVzaGFwZV9wcm9ncmVzcworCQkJICAgIDogbG9naWNhbF9zZWN0b3IgPj0gY29uZi0+cmVzaGFwZV9wcm9ncmVzcykgewogCQkJCWRpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQkJCWVsc2UgewotCQkJCWlmIChsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5leHBhbmRfbG8pIHsKKwkJCQlwcmV2aW91cyA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwCisJCQkJICAgID8gbG9naWNhbF9zZWN0b3IgPCBjb25mLT5yZXNoYXBlX3NhZmUKKwkJCQkgICAgOiBsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5yZXNoYXBlX3NhZmUpIHsKIAkJCQkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQkJCXNjaGVkdWxlKCk7CiAJCQkJCWdvdG8gcmV0cnk7CkBAIC0zNDM5LDE1ICszNjY3LDE3IEBACiAJCX0KIAkJZGF0YV9kaXNrcyA9IGRpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwogCi0gCQluZXdfc2VjdG9yID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IobG9naWNhbF9zZWN0b3IsIGRpc2tzLCBkYXRhX2Rpc2tzLAotCQkJCQkJICAmZGRfaWR4LCAmcGRfaWR4LCBjb25mKTsKKwkJbmV3X3NlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIGxvZ2ljYWxfc2VjdG9yLAorCQkJCQkJICBwcmV2aW91cywKKwkJCQkJCSAgJmRkX2lkeCwgTlVMTCk7CiAJCXByX2RlYnVnKCJyYWlkNTogbWFrZV9yZXF1ZXN0LCBzZWN0b3IgJWxsdSBsb2dpY2FsICVsbHVcbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW5ld19zZWN0b3IsIAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylsb2dpY2FsX3NlY3Rvcik7CiAKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBuZXdfc2VjdG9yLCBkaXNrcywgcGRfaWR4LCAoYmktPmJpX3J3JlJXQV9NQVNLKSk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgbmV3X3NlY3RvciwgcHJldmlvdXMsCisJCQkJICAgICAgIChiaS0+YmlfcncmUldBX01BU0spKTsKIAkJaWYgKHNoKSB7Ci0JCQlpZiAodW5saWtlbHkoY29uZi0+ZXhwYW5kX3Byb2dyZXNzICE9IE1heFNlY3RvcikpIHsKKwkJCWlmICh1bmxpa2VseShwcmV2aW91cykpIHsKIAkJCQkvKiBleHBhbnNpb24gbWlnaHQgaGF2ZSBtb3ZlZCBvbiB3aGlsZSB3YWl0aW5nIGZvciBhCiAJCQkJICogc3RyaXBlLCBzbyB3ZSBtdXN0IGRvIHRoZSByYW5nZSBjaGVjayBhZ2Fpbi4KIAkJCQkgKiBFeHBhbnNpb24gY291bGQgc3RpbGwgbW92ZSBwYXN0IGFmdGVyIHRoaXMKQEAgLTM0NTgsOCArMzY4OCw5IEBACiAJCQkJICovCiAJCQkJaW50IG11c3RfcmV0cnkgPSAwOwogCQkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJCQlpZiAobG9naWNhbF9zZWN0b3IgPCAgY29uZi0+ZXhwYW5kX3Byb2dyZXNzICYmCi0JCQkJICAgIGRpc2tzID09IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkJCQkgICAgPyBsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzCisJCQkJICAgIDogbG9naWNhbF9zZWN0b3IgPCBjb25mLT5yZXNoYXBlX3Byb2dyZXNzKQogCQkJCQkvKiBtaXNtYXRjaCwgbmVlZCB0byB0cnkgYWdhaW4gKi8KIAkJCQkJbXVzdF9yZXRyeSA9IDE7CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CkBAIC0zNTE0LDYgKzM3NDUsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpOworCiBzdGF0aWMgc2VjdG9yX3QgcmVzaGFwZV9yZXF1ZXN0KG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCAqc2tpcHBlZCkKIHsKIAkvKiByZXNoYXBpbmcgaXMgcXVpdGUgZGlmZmVyZW50IHRvIHJlY292ZXJ5L3Jlc3luYyBzbyBpdCBpcwpAQCAtMzUyNyw2MSArMzc2MCwxMTggQEAKIAkgKi8KIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7Ci0JaW50IHBkX2lkeDsKIAlzZWN0b3JfdCBmaXJzdF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCWludCByYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKIAlpbnQgZGF0YV9kaXNrcyA9IHJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CiAJaW50IG5ld19kYXRhX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlpbnQgaTsKIAlpbnQgZGRfaWR4OwotCXNlY3Rvcl90IHdyaXRlcG9zLCBzYWZlcG9zLCBnYXA7CisJc2VjdG9yX3Qgd3JpdGVwb3MsIHJlYWRwb3MsIHNhZmVwb3M7CisJc2VjdG9yX3Qgc3RyaXBlX2FkZHI7CisJaW50IHJlc2hhcGVfc2VjdG9yczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmlwZXM7CiAKLQlpZiAoc2VjdG9yX25yID09IDAgJiYKLQkgICAgY29uZi0+ZXhwYW5kX3Byb2dyZXNzICE9IDApIHsKLQkJLyogcmVzdGFydGluZyBpbiB0aGUgbWlkZGxlLCBza2lwIHRoZSBpbml0aWFsIHNlY3RvcnMgKi8KLQkJc2VjdG9yX25yID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCWlmIChzZWN0b3JfbnIgPT0gMCkgeworCQkvKiBJZiByZXN0YXJ0aW5nIGluIHRoZSBtaWRkbGUsIHNraXAgdGhlIGluaXRpYWwgc2VjdG9ycyAqLworCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCAmJgorCQkgICAgY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA8IHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKSB7CisJCQlzZWN0b3JfbnIgPSByYWlkNV9zaXplKG1kZGV2LCAwLCAwKQorCQkJCS0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKKwkJfSBlbHNlIGlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwICYmCisJCQkgICBjb25mLT5yZXNoYXBlX3Byb2dyZXNzID4gMCkKKwkJCXNlY3Rvcl9uciA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CiAJCXNlY3Rvcl9kaXYoc2VjdG9yX25yLCBuZXdfZGF0YV9kaXNrcyk7Ci0JCSpza2lwcGVkID0gMTsKLQkJcmV0dXJuIHNlY3Rvcl9ucjsKKwkJaWYgKHNlY3Rvcl9ucikgeworCQkJKnNraXBwZWQgPSAxOworCQkJcmV0dXJuIHNlY3Rvcl9ucjsKKwkJfQogCX0KIAorCS8qIFdlIG5lZWQgdG8gcHJvY2VzcyBhIGZ1bGwgY2h1bmsgYXQgYSB0aW1lLgorCSAqIElmIG9sZCBhbmQgbmV3IGNodW5rIHNpemVzIGRpZmZlciwgd2UgbmVlZCB0byBwcm9jZXNzIHRoZQorCSAqIGxhcmdlc3Qgb2YgdGhlc2UKKwkgKi8KKwlpZiAobWRkZXYtPm5ld19jaHVuayA+IG1kZGV2LT5jaHVua19zaXplKQorCQlyZXNoYXBlX3NlY3RvcnMgPSBtZGRldi0+bmV3X2NodW5rIC8gNTEyOworCWVsc2UKKwkJcmVzaGFwZV9zZWN0b3JzID0gbWRkZXYtPmNodW5rX3NpemUgLyA1MTI7CisKIAkvKiB3ZSB1cGRhdGUgdGhlIG1ldGFkYXRhIHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIDNNZWcKIAkgKiBpbiB0aGUgYmxvY2sgcmFuZ2UgKHRoYXQgaXMgcmF0aGVyIGFyYml0cmFyeSwgc2hvdWxkCiAJICogcHJvYmFibHkgYmUgdGltZSBiYXNlZCkgb3Igd2hlbiB0aGUgZGF0YSBhYm91dCB0byBiZQogCSAqIGNvcGllZCB3b3VsZCBvdmVyLXdyaXRlIHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGEgYXQKIAkgKiB0aGUgZnJvbnQgb2YgdGhlIHJhbmdlLgotCSAqIGkuZS4gb25lIG5ld19zdHJpcGUgZm9yd2FyZCBmcm9tIGV4cGFuZF9wcm9ncmVzcyBuZXdfbWFwcwotCSAqIHRvIGFmdGVyIHdoZXJlIGV4cGFuZF9sbyBvbGRfbWFwcyB0bworCSAqIGkuZS4gb25lIG5ld19zdHJpcGUgYWxvbmcgZnJvbSByZXNoYXBlX3Byb2dyZXNzIG5ld19tYXBzCisJICogdG8gYWZ0ZXIgd2hlcmUgcmVzaGFwZV9zYWZlIG9sZF9tYXBzIHRvCiAJICovCi0Jd3JpdGVwb3MgPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgKwotCQljb25mLT5jaHVua19zaXplLzUxMioobmV3X2RhdGFfZGlza3MpOworCXdyaXRlcG9zID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAlzZWN0b3JfZGl2KHdyaXRlcG9zLCBuZXdfZGF0YV9kaXNrcyk7Ci0Jc2FmZXBvcyA9IGNvbmYtPmV4cGFuZF9sbzsKKwlyZWFkcG9zID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKKwlzZWN0b3JfZGl2KHJlYWRwb3MsIGRhdGFfZGlza3MpOworCXNhZmVwb3MgPSBjb25mLT5yZXNoYXBlX3NhZmU7CiAJc2VjdG9yX2RpdihzYWZlcG9zLCBkYXRhX2Rpc2tzKTsKLQlnYXAgPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgLSBjb25mLT5leHBhbmRfbG87CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJd3JpdGVwb3MgLT0gcmVzaGFwZV9zZWN0b3JzOworCQlyZWFkcG9zICs9IHJlc2hhcGVfc2VjdG9yczsKKwkJc2FmZXBvcyArPSByZXNoYXBlX3NlY3RvcnM7CisJfSBlbHNlIHsKKwkJd3JpdGVwb3MgKz0gcmVzaGFwZV9zZWN0b3JzOworCQlyZWFkcG9zIC09IHJlc2hhcGVfc2VjdG9yczsKKwkJc2FmZXBvcyAtPSByZXNoYXBlX3NlY3RvcnM7CisJfQogCi0JaWYgKHdyaXRlcG9zID49IHNhZmVwb3MgfHwKLQkgICAgZ2FwID4gKG5ld19kYXRhX2Rpc2tzKSozMDAwKjIgLyozTWVnKi8pIHsKKwkvKiAnd3JpdGVwb3MnIGlzIHRoZSBtb3N0IGFkdmFuY2VkIGRldmljZSBhZGRyZXNzIHdlIG1pZ2h0IHdyaXRlLgorCSAqICdyZWFkcG9zJyBpcyB0aGUgbGVhc3QgYWR2YW5jZWQgZGV2aWNlIGFkZHJlc3Mgd2UgbWlnaHQgcmVhZC4KKwkgKiAnc2FmZXBvcycgaXMgdGhlIGxlYXN0IGFkZHJlc3MgcmVjb3JkZWQgaW4gdGhlIG1ldGFkYXRhIGFzIGhhdmluZworCSAqICAgICBiZWVuIHJlc2hhcGVkLgorCSAqIElmICdyZWFkcG9zJyBpcyBiZWhpbmQgJ3dyaXRlcG9zJywgdGhlbiB0aGVyZSBpcyBubyB3YXkgdGhhdCB3ZSBjYW4KKwkgKiBlbnN1cmUgc2FmZXR5IGluIHRoZSBmYWNlIG9mIGEgY3Jhc2ggLSB0aGF0IG11c3QgYmUgZG9uZSBieSB1c2Vyc3BhY2UKKwkgKiBtYWtpbmcgYSBiYWNrdXAgb2YgdGhlIGRhdGEuICBTbyBpbiB0aGF0IGNhc2UgdGhlcmUgaXMgbm8gcGFydGljdWxhcgorCSAqIHJ1c2ggdG8gdXBkYXRlIG1ldGFkYXRhLgorCSAqIE90aGVyd2lzZSBpZiAnc2FmZXBvcycgaXMgYmVoaW5kICd3cml0ZXBvcycsIHRoZW4gd2UgcmVhbGx5IG5lZWQgdG8KKwkgKiB1cGRhdGUgdGhlIG1ldGFkYXRhIHRvIGFkdmFuY2UgJ3NhZmVwb3MnIHRvIG1hdGNoICdyZWFkcG9zJyBzbyB0aGF0CisJICogd2UgY2FuIGJlIHNhZmUgaW4gdGhlIGV2ZW50IG9mIGEgY3Jhc2guCisJICogU28gd2UgaW5zaXN0IG9uIHVwZGF0aW5nIG1ldGFkYXRhIGlmIHNhZmVwb3MgaXMgYmVoaW5kIHdyaXRlcG9zIGFuZAorCSAqIHJlYWRwb3MgaXMgYmV5b25kIHdyaXRlcG9zLgorCSAqIEluIGFueSBjYXNlLCB1cGRhdGUgdGhlIG1ldGFkYXRhIGV2ZXJ5IDEwIHNlY29uZHMuCisJICogTWF5YmUgdGhhdCBudW1iZXIgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSwgYnV0IEknbSBub3Qgc3VyZSBpdCBpcworCSAqIHdvcnRoIGl0Li4uLiBtYXliZSBpdCBjb3VsZCBiZSBhIG11bHRpcGxlIG9mIHNhZmVtb2RlX2RlbGF5Pz8/CisJICovCisJaWYgKChtZGRldi0+ZGVsdGFfZGlza3MgPCAwCisJICAgICA/IChzYWZlcG9zID4gd3JpdGVwb3MgJiYgcmVhZHBvcyA8IHdyaXRlcG9zKQorCSAgICAgOiAoc2FmZXBvcyA8IHdyaXRlcG9zICYmIHJlYWRwb3MgPiB3cml0ZXBvcykpIHx8CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgY29uZi0+cmVzaGFwZV9jaGVja3BvaW50ICsgMTAqSFopKSB7CiAJCS8qIENhbm5vdCBwcm9jZWVkIHVudGlsIHdlJ3ZlIHVwZGF0ZWQgdGhlIHN1cGVyYmxvY2suLi4gKi8KIAkJd2FpdF9ldmVudChjb25mLT53YWl0X2Zvcl9vdmVybGFwLAogCQkJICAgYXRvbWljX3JlYWQoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcyk9PTApOwotCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzczsKKwkJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCQljb25mLT5yZXNoYXBlX2NoZWNrcG9pbnQgPSBqaWZmaWVzOwogCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKIAkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgbWRkZXYtPmZsYWdzID09IDAgfHwKIAkJCSAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJY29uZi0+ZXhwYW5kX2xvID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CisJCWNvbmYtPnJlc2hhcGVfc2FmZSA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJd2FrZV91cCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CiAJfQogCi0JZm9yIChpPTA7IGkgPCBjb25mLT5jaHVua19zaXplLzUxMjsgaSs9IFNUUklQRV9TRUNUT1JTKSB7CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJQlVHX09OKGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgPT0gMCk7CisJCXN0cmlwZV9hZGRyID0gd3JpdGVwb3M7CisJCUJVR19PTigobWRkZXYtPmRldl9zZWN0b3JzICYKKwkJCX4oKHNlY3Rvcl90KXJlc2hhcGVfc2VjdG9ycyAtIDEpKQorCQkgICAgICAgLSByZXNoYXBlX3NlY3RvcnMgLSBzdHJpcGVfYWRkcgorCQkgICAgICAgIT0gc2VjdG9yX25yKTsKKwl9IGVsc2UgeworCQlCVUdfT04od3JpdGVwb3MgIT0gc2VjdG9yX25yICsgcmVzaGFwZV9zZWN0b3JzKTsKKwkJc3RyaXBlX2FkZHIgPSBzZWN0b3JfbnI7CisJfQorCUlOSVRfTElTVF9IRUFEKCZzdHJpcGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVzaGFwZV9zZWN0b3JzOyBpICs9IFNUUklQRV9TRUNUT1JTKSB7CiAJCWludCBqOwogCQlpbnQgc2tpcHBlZCA9IDA7Ci0JCXBkX2lkeCA9IHN0cmlwZV90b19wZGlkeChzZWN0b3JfbnIraSwgY29uZiwgY29uZi0+cmFpZF9kaXNrcyk7Ci0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yX25yK2ksCi0JCQkJICAgICAgIGNvbmYtPnJhaWRfZGlza3MsIHBkX2lkeCwgMCk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc3RyaXBlX2FkZHIraSwgMCwgMCk7CiAJCXNldF9iaXQoU1RSSVBFX0VYUEFORElORywgJnNoLT5zdGF0ZSk7CiAJCWF0b21pY19pbmMoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcyk7CiAJCS8qIElmIGFueSBvZiB0aGlzIHN0cmlwZSBpcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgb2xkCkBAIC0zNTkyLDEwICszODgyLDEwIEBACiAJCQlpZiAoaiA9PSBzaC0+cGRfaWR4KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNvbmYtPmxldmVsID09IDYgJiYKLQkJCSAgICBqID09IHJhaWQ2X25leHRfZGlzayhzaC0+cGRfaWR4LCBzaC0+ZGlza3MpKQorCQkJICAgIGogPT0gc2gtPnFkX2lkeCkKIAkJCQljb250aW51ZTsKLQkJCXMgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGopOwotCQkJaWYgKHMgPCBtZGRldi0+YXJyYXlfc2VjdG9ycykgeworCQkJcyA9IGNvbXB1dGVfYmxvY2tucihzaCwgaiwgMCk7CisJCQlpZiAocyA8IHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKSB7CiAJCQkJc2tpcHBlZCA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0zNjA3LDEwICszODk3LDEzIEBACiAJCQlzZXRfYml0KFNUUklQRV9FWFBBTkRfUkVBRFksICZzaC0+c3RhdGUpOwogCQkJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAkJfQotCQlyZWxlYXNlX3N0cmlwZShzaCk7CisJCWxpc3RfYWRkKCZzaC0+bHJ1LCAmc3RyaXBlcyk7CiAJfQogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSAoc2VjdG9yX25yICsgaSkgKiBuZXdfZGF0YV9kaXNrczsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCkKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyAtPSByZXNoYXBlX3NlY3RvcnMgKiBuZXdfZGF0YV9kaXNrczsKKwllbHNlCisJCWNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgKz0gcmVzaGFwZV9zZWN0b3JzICogbmV3X2RhdGFfZGlza3M7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJLyogT2ssIHRob3NlIHN0cmlwZSBhcmUgcmVhZHkuIFdlIGNhbiBzdGFydCBzY2hlZHVsaW5nCiAJICogcmVhZHMgb24gdGhlIHNvdXJjZSBzdHJpcGVzLgpAQCAtMzYxOCw0NiArMzkxMSw1MCBAQAogCSAqIGJsb2NrIG9uIHRoZSBkZXN0aW5hdGlvbiBzdHJpcGVzLgogCSAqLwogCWZpcnN0X3NlY3RvciA9Ci0JCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKHNlY3Rvcl9ucioobmV3X2RhdGFfZGlza3MpLAotCQkJCSAgICAgcmFpZF9kaXNrcywgZGF0YV9kaXNrcywKLQkJCQkgICAgICZkZF9pZHgsICZwZF9pZHgsIGNvbmYpOworCQlyYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLCBzdHJpcGVfYWRkcioobmV3X2RhdGFfZGlza3MpLAorCQkJCSAgICAgMSwgJmRkX2lkeCwgTlVMTCk7CiAJbGFzdF9zZWN0b3IgPQotCQlyYWlkNV9jb21wdXRlX3NlY3Rvcigoc2VjdG9yX25yK2NvbmYtPmNodW5rX3NpemUvNTEyKQotCQkJCSAgICAgKihuZXdfZGF0YV9kaXNrcykgLTEsCi0JCQkJICAgICByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLAotCQkJCSAgICAgJmRkX2lkeCwgJnBkX2lkeCwgY29uZik7Ci0JaWYgKGxhc3Rfc2VjdG9yID49IChtZGRldi0+c2l6ZTw8MSkpCi0JCWxhc3Rfc2VjdG9yID0gKG1kZGV2LT5zaXplPDwxKS0xOworCQlyYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLCAoKHN0cmlwZV9hZGRyK2NvbmYtPmNodW5rX3NpemUvNTEyKQorCQkJCQkgICAgKihuZXdfZGF0YV9kaXNrcykgLSAxKSwKKwkJCQkgICAgIDEsICZkZF9pZHgsIE5VTEwpOworCWlmIChsYXN0X3NlY3RvciA+PSBtZGRldi0+ZGV2X3NlY3RvcnMpCisJCWxhc3Rfc2VjdG9yID0gbWRkZXYtPmRldl9zZWN0b3JzIC0gMTsKIAl3aGlsZSAoZmlyc3Rfc2VjdG9yIDw9IGxhc3Rfc2VjdG9yKSB7Ci0JCXBkX2lkeCA9IHN0cmlwZV90b19wZGlkeChmaXJzdF9zZWN0b3IsIGNvbmYsCi0JCQkJCSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBmaXJzdF9zZWN0b3IsCi0JCQkJICAgICAgIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsIHBkX2lkeCwgMCk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgZmlyc3Rfc2VjdG9yLCAxLCAwKTsKIAkJc2V0X2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoLT5zdGF0ZSk7CiAJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CiAJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAkJZmlyc3Rfc2VjdG9yICs9IFNUUklQRV9TRUNUT1JTOwogCX0KKwkvKiBOb3cgdGhhdCB0aGUgc291cmNlcyBhcmUgY2xlYXJseSBtYXJrZWQsIHdlIGNhbiByZWxlYXNlCisJICogdGhlIGRlc3RpbmF0aW9uIHN0cmlwZXMKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0cmlwZXMpKSB7CisJCXNoID0gbGlzdF9lbnRyeShzdHJpcGVzLm5leHQsIHN0cnVjdCBzdHJpcGVfaGVhZCwgbHJ1KTsKKwkJbGlzdF9kZWxfaW5pdCgmc2gtPmxydSk7CisJCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwl9CiAJLyogSWYgdGhpcyB0YWtlcyB1cyB0byB0aGUgcmVzeW5jX21heCBwb2ludCB3aGVyZSB3ZSBoYXZlIHRvIHBhdXNlLAogCSAqIHRoZW4gd2UgbmVlZCB0byB3cml0ZSBvdXQgdGhlIHN1cGVyYmxvY2suCiAJICovCi0Jc2VjdG9yX25yICs9IGNvbmYtPmNodW5rX3NpemU+Pjk7CisJc2VjdG9yX25yICs9IHJlc2hhcGVfc2VjdG9yczsKIAlpZiAoc2VjdG9yX25yID49IG1kZGV2LT5yZXN5bmNfbWF4KSB7CiAJCS8qIENhbm5vdCBwcm9jZWVkIHVudGlsIHdlJ3ZlIHVwZGF0ZWQgdGhlIHN1cGVyYmxvY2suLi4gKi8KIAkJd2FpdF9ldmVudChjb25mLT53YWl0X2Zvcl9vdmVybGFwLAogCQkJICAgYXRvbWljX3JlYWQoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcykgPT0gMCk7Ci0JCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CisJCWNvbmYtPnJlc2hhcGVfY2hlY2twb2ludCA9IGppZmZpZXM7CiAJCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LAogCQkJICAgIXRlc3RfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKQogCQkJICAgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQljb25mLT5leHBhbmRfbG8gPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJY29uZi0+cmVzaGFwZV9zYWZlID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAl9Ci0JcmV0dXJuIGNvbmYtPmNodW5rX3NpemU+Pjk7CisJcmV0dXJuIHJlc2hhcGVfc2VjdG9yczsKIH0KIAogLyogRklYTUUgZ29fZmFzdGVyIGlzbid0IHVzZWQgKi8KQEAgLTM2NjUsOSArMzk2Miw3IEBACiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwotCWludCBwZF9pZHg7Ci0JaW50IHJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCXNlY3Rvcl90IG1heF9zZWN0b3IgPSBtZGRldi0+c2l6ZSA8PCAxOworCXNlY3Rvcl90IG1heF9zZWN0b3IgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJaW50IHN5bmNfYmxvY2tzOwogCWludCBzdGlsbF9kZWdyYWRlZCA9IDA7CiAJaW50IGk7CkBAIC0zNjc1LDYgKzM5NzAsNyBAQAogCWlmIChzZWN0b3JfbnIgPj0gbWF4X3NlY3RvcikgewogCQkvKiBqdXN0IGJlaW5nIHRvbGQgdG8gZmluaXNoIHVwIC4uIG5vdGhpbmcgbXVjaCB0byBkbyAqLwogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKKwogCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVTSEFQRSwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKIAkJCWVuZF9yZXNoYXBlKGNvbmYpOwogCQkJcmV0dXJuIDA7CkBAIC0zNzA1LDcgKzQwMDEsNyBAQAogCSAqLwogCWlmIChtZGRldi0+ZGVncmFkZWQgPj0gY29uZi0+bWF4X2RlZ3JhZGVkICYmCiAJICAgIHRlc3RfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpKSB7Ci0JCXNlY3Rvcl90IHJ2ID0gKG1kZGV2LT5zaXplIDw8IDEpIC0gc2VjdG9yX25yOworCQlzZWN0b3JfdCBydiA9IG1kZGV2LT5kZXZfc2VjdG9ycyAtIHNlY3Rvcl9ucjsKIAkJKnNraXBwZWQgPSAxOwogCQlyZXR1cm4gcnY7CiAJfQpAQCAtMzcyMSwxMCArNDAxNyw5IEBACiAKIAliaXRtYXBfY29uZF9lbmRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIpOwogCi0JcGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KHNlY3Rvcl9uciwgY29uZiwgcmFpZF9kaXNrcyk7Ci0Jc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIsIHJhaWRfZGlza3MsIHBkX2lkeCwgMSk7CisJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIsIDAsIDEpOwogCWlmIChzaCA9PSBOVUxMKSB7Ci0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yX25yLCByYWlkX2Rpc2tzLCBwZF9pZHgsIDApOworCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3Rvcl9uciwgMCwgMCk7CiAJCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBzd2FtcCB0aGUgc3RyaXBlIGNhY2hlIGlmIHNvbWVvbmUgZWxzZQogCQkgKiBpcyB0cnlpbmcgdG8gZ2V0IGFjY2VzcwogCQkgKi8KQEAgLTM3NjYsMTkgKzQwNjEsMTUgQEAKIAkgKiBpdCB3aWxsIGJlIG9ubHkgb25lICdkZF9pZHgnIGFuZCBvbmx5IG5lZWQgb25lIGNhbGwgdG8gcmFpZDVfY29tcHV0ZV9zZWN0b3IuCiAJICovCiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKLQlpbnQgZGRfaWR4LCBwZF9pZHg7CisJaW50IGRkX2lkeDsKIAlzZWN0b3JfdCBzZWN0b3IsIGxvZ2ljYWxfc2VjdG9yLCBsYXN0X3NlY3RvcjsKIAlpbnQgc2NudCA9IDA7CiAJaW50IHJlbWFpbmluZzsKIAlpbnQgaGFuZGxlZCA9IDA7CiAKIAlsb2dpY2FsX3NlY3RvciA9IHJhaWRfYmlvLT5iaV9zZWN0b3IgJiB+KChzZWN0b3JfdClTVFJJUEVfU0VDVE9SUy0xKTsKLQlzZWN0b3IgPSByYWlkNV9jb21wdXRlX3NlY3RvcigJbG9naWNhbF9zZWN0b3IsCi0JCQkJCWNvbmYtPnJhaWRfZGlza3MsCi0JCQkJCWNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQsCi0JCQkJCSZkZF9pZHgsCi0JCQkJCSZwZF9pZHgsCi0JCQkJCWNvbmYpOworCXNlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIGxvZ2ljYWxfc2VjdG9yLAorCQkJCSAgICAgIDAsICZkZF9pZHgsIE5VTEwpOwogCWxhc3Rfc2VjdG9yID0gcmFpZF9iaW8tPmJpX3NlY3RvciArIChyYWlkX2Jpby0+Ymlfc2l6ZT4+OSk7CiAKIAlmb3IgKDsgbG9naWNhbF9zZWN0b3IgPCBsYXN0X3NlY3RvcjsKQEAgLTM3OTAsNyArNDA4MSw3IEBACiAJCQkvKiBhbHJlYWR5IGRvbmUgdGhpcyBzdHJpcGUgKi8KIAkJCWNvbnRpbnVlOwogCi0JCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yLCBjb25mLT5yYWlkX2Rpc2tzLCBwZF9pZHgsIDEpOworCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3RvciwgMCwgMSk7CiAKIAkJaWYgKCFzaCkgewogCQkJLyogZmFpbGVkIHRvIGdldCBhIHN0cmlwZSAtIG11c3Qgd2FpdCAqLwpAQCAtMzk5Miw4OSArNDI4Myw2OSBAQAogCS5hdHRycyA9IHJhaWQ1X2F0dHJzLAogfTsKIAotc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCitzdGF0aWMgc2VjdG9yX3QKK3JhaWQ1X3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCisJaWYgKCFzZWN0b3JzKQorCQlzZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOworCWlmICghcmFpZF9kaXNrcykgeworCQkvKiBzaXplIGlzIGRlZmluZWQgYnkgdGhlIHNtYWxsZXN0IG9mIHByZXZpb3VzIGFuZCBuZXcgc2l6ZSAqLworCQlpZiAoY29uZi0+cmFpZF9kaXNrcyA8IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQlyYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKKwkJZWxzZQorCQkJcmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7CisJfQorCisJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2l6ZS81MTIgLSAxKTsKKwlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5uZXdfY2h1bmsvNTEyIC0gMSk7CisJcmV0dXJuIHNlY3RvcnMgKiAocmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCk7Cit9CisKK3N0YXRpYyByYWlkNV9jb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwogCWludCByYWlkX2Rpc2ssIG1lbW9yeTsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBkaXNrX2luZm8gKmRpc2s7Ci0JaW50IHdvcmtpbmdfZGlza3MgPSAwOwogCi0JaWYgKG1kZGV2LT5sZXZlbCAhPSA1ICYmIG1kZGV2LT5sZXZlbCAhPSA0ICYmIG1kZGV2LT5sZXZlbCAhPSA2KSB7CisJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgIT0gNQorCSAgICAmJiBtZGRldi0+bmV3X2xldmVsICE9IDQKKwkgICAgJiYgbWRkZXYtPm5ld19sZXZlbCAhPSA2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6ICVzOiByYWlkIGxldmVsIG5vdCBzZXQgdG8gNC81LzYgKCVkKVxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5sZXZlbCk7Ci0JCXJldHVybiAtRUlPOworCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPm5ld19sZXZlbCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlpZiAoKG1kZGV2LT5uZXdfbGV2ZWwgPT0gNQorCSAgICAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNShtZGRldi0+bmV3X2xheW91dCkpIHx8CisJICAgIChtZGRldi0+bmV3X2xldmVsID09IDYKKwkgICAgICYmICFhbGdvcml0aG1fdmFsaWRfcmFpZDYobWRkZXYtPm5ld19sYXlvdXQpKSkgeworCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogbGF5b3V0ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBtZGRldi0+bmV3X2xheW91dCk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlpZiAobWRkZXYtPm5ld19sZXZlbCA9PSA2ICYmIG1kZGV2LT5yYWlkX2Rpc2tzIDwgNCkgeworCQlwcmludGsoS0VSTl9FUlIgInJhaWQ2OiBub3QgZW5vdWdoIGNvbmZpZ3VyZWQgZGV2aWNlcyBmb3IgJXMgKCVkLCBtaW5pbXVtIDQpXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnJhaWRfZGlza3MpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAobWRkZXYtPmNodW5rX3NpemUgPCBQQUdFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkNTogY2h1bmtfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0ICIKLQkJICAgICAgICJQQUdFX1NJWkUgYnV0ICVkIDwgJWxkXG4iLAotCQkgICAgICAgbWRkZXYtPmNodW5rX3NpemUsIFBBR0VfU0laRSk7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmICghbWRkZXYtPm5ld19jaHVuayB8fCBtZGRldi0+bmV3X2NodW5rICUgUEFHRV9TSVpFKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6IGludmFsaWQgY2h1bmsgc2l6ZSAlZCBmb3IgJXNcbiIsCisJCQltZGRldi0+bmV3X2NodW5rLCBtZG5hbWUobWRkZXYpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgewotCQkvKiBDaGVjayB0aGF0IHdlIGNhbiBjb250aW51ZSB0aGUgcmVzaGFwZS4KLQkJICogQ3VycmVudGx5IG9ubHkgZGlza3MgY2FuIGNoYW5nZSwgaXQgbXVzdAotCQkgKiBpbmNyZWFzZSwgYW5kIHdlIG11c3QgYmUgcGFzdCB0aGUgcG9pbnQgd2hlcmUKLQkJICogYSBzdHJpcGUgb3Zlci13cml0ZXMgaXRzZWxmCi0JCSAqLwotCQlzZWN0b3JfdCBoZXJlX25ldywgaGVyZV9vbGQ7Ci0JCWludCBvbGRfZGlza3M7Ci0JCWludCBtYXhfZGVncmFkZWQgPSAobWRkZXYtPmxldmVsID09IDUgPyAxIDogMik7Ci0KLQkJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgIT0gbWRkZXYtPmxldmVsIHx8Ci0JCSAgICBtZGRldi0+bmV3X2xheW91dCAhPSBtZGRldi0+bGF5b3V0IHx8Ci0JCSAgICBtZGRldi0+bmV3X2NodW5rICE9IG1kZGV2LT5jaHVua19zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogdW5zdXBwb3J0ZWQgcmVzaGFwZSAiCi0JCQkgICAgICAgInJlcXVpcmVkIC0gYWJvcnRpbmcuXG4iLAotCQkJICAgICAgIG1kbmFtZShtZGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogdW5zdXBwb3J0ZWQgcmVzaGFwZSAiCi0JCQkgICAgICAgIihyZWR1Y2UgZGlza3MpIHJlcXVpcmVkIC0gYWJvcnRpbmcuXG4iLAotCQkJICAgICAgIG1kbmFtZShtZGRldikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJb2xkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0JCS8qIHJlc2hhcGVfcG9zaXRpb24gbXVzdCBiZSBvbiBhIG5ldy1zdHJpcGUgYm91bmRhcnksIGFuZCBvbmUKLQkJICogZnVydGhlciB1cCBpbiBuZXcgZ2VvbWV0cnkgbXVzdCBtYXAgYWZ0ZXIgaGVyZSBpbiBvbGQKLQkJICogZ2VvbWV0cnkuCi0JCSAqLwotCQloZXJlX25ldyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOwotCQlpZiAoc2VjdG9yX2RpdihoZXJlX25ldywgKG1kZGV2LT5jaHVua19zaXplPj45KSoKLQkJCSAgICAgICAobWRkZXYtPnJhaWRfZGlza3MgLSBtYXhfZGVncmFkZWQpKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiBub3QgIgotCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KLQkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKLQkJc2VjdG9yX2RpdihoZXJlX29sZCwgKG1kZGV2LT5jaHVua19zaXplPj45KSoKLQkJCSAgIChvbGRfZGlza3MtbWF4X2RlZ3JhZGVkKSk7Ci0JCS8qIGhlcmVfb2xkIGlzIHRoZSBmaXJzdCBzdHJpcGUgdGhhdCB3ZSBtaWdodCBuZWVkIHRvIHJlYWQKLQkJICogZnJvbSAqLwotCQlpZiAoaGVyZV9uZXcgPj0gaGVyZV9vbGQpIHsKLQkJCS8qIFJlYWRpbmcgZnJvbSB0aGUgc2FtZSBzdHJpcGUgYXMgd3JpdGluZyB0byAtIGJhZCAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiB0b28gZWFybHkgZm9yICIKLQkJCSAgICAgICAiYXV0by1yZWNvdmVyeSAtIGFib3J0aW5nLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogcmVzaGFwZSB3aWxsIGNvbnRpbnVlXG4iKTsKLQkJLyogT0ssIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRpbnVlOyAqLwotCX0KLQotCi0JbWRkZXYtPnByaXZhdGUgPSBremFsbG9jKHNpemVvZiAocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKChjb25mID0gbWRkZXYtPnByaXZhdGUpID09IE5VTEwpCisJY29uZiA9IGt6YWxsb2Moc2l6ZW9mKHJhaWQ1X2NvbmZfdCksIEdGUF9LRVJORUwpOworCWlmIChjb25mID09IE5VTEwpCiAJCWdvdG8gYWJvcnQ7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikgewotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCX0gZWxzZSB7Ci0JCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKworCWNvbmYtPnJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CisJZWxzZQogCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0JfQogCiAJY29uZi0+ZGlza3MgPSBremFsbG9jKGNvbmYtPnJhaWRfZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2tfaW5mbyksCiAJCQkgICAgICBHRlBfS0VSTkVMKTsKQEAgLTQwODYsMTMgKzQzNTcsMTIgQEAKIAlpZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlnb3RvIGFib3J0OwogCi0JaWYgKG1kZGV2LT5sZXZlbCA9PSA2KSB7CisJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgPT0gNikgewogCQljb25mLT5zcGFyZV9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKCFjb25mLT5zcGFyZV9wYWdlKQogCQkJZ290byBhYm9ydDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJmNvbmYtPmRldmljZV9sb2NrKTsKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29uZi0+d2FpdF9mb3Jfc3RyaXBlKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAlJTklUX0xJU1RfSEVBRCgmY29uZi0+aGFuZGxlX2xpc3QpOwpAQCAtNDEyMSw0NyArNDM5MSwxMzQgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBkZXZpY2UgJXMgb3BlcmF0aW9uYWwgYXMgcmFpZCIKIAkJCQkiIGRpc2sgJWRcbiIsIGJkZXZuYW1lKHJkZXYtPmJkZXYsYiksCiAJCQkJcmFpZF9kaXNrKTsKLQkJCXdvcmtpbmdfZGlza3MrKzsKIAkJfSBlbHNlCiAJCQkvKiBDYW5ub3QgcmVseSBvbiBiaXRtYXAgdG8gY29tcGxldGUgcmVjb3ZlcnkgKi8KIAkJCWNvbmYtPmZ1bGxzeW5jID0gMTsKIAl9CiAKLQkvKgotCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBvciAyIGZvciBhIGRlZ3JhZGVkIGFycmF5LgotCSAqLwotCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOwotCWNvbmYtPm1kZGV2ID0gbWRkZXY7Ci0JY29uZi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5jaHVua19zaXplOwotCWNvbmYtPmxldmVsID0gbWRkZXYtPmxldmVsOworCWNvbmYtPmNodW5rX3NpemUgPSBtZGRldi0+bmV3X2NodW5rOworCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKIAlpZiAoY29uZi0+bGV2ZWwgPT0gNikKIAkJY29uZi0+bWF4X2RlZ3JhZGVkID0gMjsKIAllbHNlCiAJCWNvbmYtPm1heF9kZWdyYWRlZCA9IDE7Ci0JY29uZi0+YWxnb3JpdGhtID0gbWRkZXYtPmxheW91dDsKKwljb25mLT5hbGdvcml0aG0gPSBtZGRldi0+bmV3X2xheW91dDsKIAljb25mLT5tYXhfbnJfc3RyaXBlcyA9IE5SX1NUUklQRVM7Ci0JY29uZi0+ZXhwYW5kX3Byb2dyZXNzID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CisJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOworCWlmIChjb25mLT5yZXNoYXBlX3Byb2dyZXNzICE9IE1heFNlY3RvcikgeworCQljb25mLT5wcmV2X2NodW5rID0gbWRkZXYtPmNodW5rX3NpemU7CisJCWNvbmYtPnByZXZfYWxnbyA9IG1kZGV2LT5sYXlvdXQ7CisJfQogCi0JLyogZGV2aWNlIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGNodW5rIHNpemUgKi8KLQltZGRldi0+c2l6ZSAmPSB+KG1kZGV2LT5jaHVua19zaXplLzEwMjQgLTEpOwotCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOworCW1lbW9yeSA9IGNvbmYtPm1heF9ucl9zdHJpcGVzICogKHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpICsKKwkJIGNvbmYtPnJhaWRfZGlza3MgKiAoKHNpemVvZihzdHJ1Y3QgYmlvKSArIFBBR0VfU0laRSkpKSAvIDEwMjQ7CisJaWYgKGdyb3dfc3RyaXBlcyhjb25mLCBjb25mLT5tYXhfbnJfc3RyaXBlcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkicmFpZDU6IGNvdWxkbid0IGFsbG9jYXRlICVka0IgZm9yIGJ1ZmZlcnNcbiIsIG1lbW9yeSk7CisJCWdvdG8gYWJvcnQ7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBhbGxvY2F0ZWQgJWRrQiBmb3IgJXNcbiIsCisJCQltZW1vcnksIG1kbmFtZShtZGRldikpOwogCi0JaWYgKGNvbmYtPmxldmVsID09IDYgJiYgY29uZi0+cmFpZF9kaXNrcyA8IDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNjogbm90IGVub3VnaCBjb25maWd1cmVkIGRldmljZXMgZm9yICVzICglZCwgbWluaW11bSA0KVxuIiwKLQkJICAgICAgIG1kbmFtZShtZGRldiksIGNvbmYtPnJhaWRfZGlza3MpOworCWNvbmYtPnRocmVhZCA9IG1kX3JlZ2lzdGVyX3RocmVhZChyYWlkNWQsIG1kZGV2LCAiJXNfcmFpZDUiKTsKKwlpZiAoIWNvbmYtPnRocmVhZCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgdGhyZWFkIGZvciAlc1xuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldikpOwogCQlnb3RvIGFib3J0OwogCX0KLQlpZiAoIWNvbmYtPmNodW5rX3NpemUgfHwgY29uZi0+Y2h1bmtfc2l6ZSAlIDQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogaW52YWxpZCBjaHVuayBzaXplICVkIGZvciAlc1xuIiwKLQkJCWNvbmYtPmNodW5rX3NpemUsIG1kbmFtZShtZGRldikpOwotCQlnb3RvIGFib3J0OworCisJcmV0dXJuIGNvbmY7CisKKyBhYm9ydDoKKwlpZiAoY29uZikgeworCQlzaHJpbmtfc3RyaXBlcyhjb25mKTsKKwkJc2FmZV9wdXRfcGFnZShjb25mLT5zcGFyZV9wYWdlKTsKKwkJa2ZyZWUoY29uZi0+ZGlza3MpOworCQlrZnJlZShjb25mLT5zdHJpcGVfaGFzaHRibCk7CisJCWtmcmVlKGNvbmYpOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9IGVsc2UKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyBpbnQgcnVuKG1kZGV2X3QgKm1kZGV2KQoreworCXJhaWQ1X2NvbmZfdCAqY29uZjsKKwlpbnQgd29ya2luZ19kaXNrcyA9IDA7CisJbWRrX3JkZXZfdCAqcmRldjsKKworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpIHsKKwkJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gY29udGludWUgdGhlIHJlc2hhcGUuCisJCSAqIEN1cnJlbnRseSBvbmx5IGRpc2tzIGNhbiBjaGFuZ2UsIGl0IG11c3QKKwkJICogaW5jcmVhc2UsIGFuZCB3ZSBtdXN0IGJlIHBhc3QgdGhlIHBvaW50IHdoZXJlCisJCSAqIGEgc3RyaXBlIG92ZXItd3JpdGVzIGl0c2VsZgorCQkgKi8KKwkJc2VjdG9yX3QgaGVyZV9uZXcsIGhlcmVfb2xkOworCQlpbnQgb2xkX2Rpc2tzOworCQlpbnQgbWF4X2RlZ3JhZGVkID0gKG1kZGV2LT5sZXZlbCA9PSA2ID8gMiA6IDEpOworCisJCWlmIChtZGRldi0+bmV3X2xldmVsICE9IG1kZGV2LT5sZXZlbCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogJXM6IHVuc3VwcG9ydGVkIHJlc2hhcGUgIgorCQkJICAgICAgICJyZXF1aXJlZCAtIGFib3J0aW5nLlxuIiwKKwkJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW9sZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWRkZXYtPmRlbHRhX2Rpc2tzOworCQkvKiByZXNoYXBlX3Bvc2l0aW9uIG11c3QgYmUgb24gYSBuZXctc3RyaXBlIGJvdW5kYXJ5LCBhbmQgb25lCisJCSAqIGZ1cnRoZXIgdXAgaW4gbmV3IGdlb21ldHJ5IG11c3QgbWFwIGFmdGVyIGhlcmUgaW4gb2xkCisJCSAqIGdlb21ldHJ5LgorCQkgKi8KKwkJaGVyZV9uZXcgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJaWYgKHNlY3Rvcl9kaXYoaGVyZV9uZXcsIChtZGRldi0+bmV3X2NodW5rPj45KSoKKwkJCSAgICAgICAobWRkZXYtPnJhaWRfZGlza3MgLSBtYXhfZGVncmFkZWQpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiBub3QgIgorCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KKwkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJc2VjdG9yX2RpdihoZXJlX29sZCwgKG1kZGV2LT5jaHVua19zaXplPj45KSoKKwkJCSAgIChvbGRfZGlza3MtbWF4X2RlZ3JhZGVkKSk7CisJCS8qIGhlcmVfb2xkIGlzIHRoZSBmaXJzdCBzdHJpcGUgdGhhdCB3ZSBtaWdodCBuZWVkIHRvIHJlYWQKKwkJICogZnJvbSAqLworCQlpZiAoaGVyZV9uZXcgPj0gaGVyZV9vbGQpIHsKKwkJCS8qIFJlYWRpbmcgZnJvbSB0aGUgc2FtZSBzdHJpcGUgYXMgd3JpdGluZyB0byAtIGJhZCAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogcmVzaGFwZV9wb3NpdGlvbiB0b28gZWFybHkgZm9yICIKKwkJCSAgICAgICAiYXV0by1yZWNvdmVyeSAtIGFib3J0aW5nLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogcmVzaGFwZSB3aWxsIGNvbnRpbnVlXG4iKTsKKwkJLyogT0ssIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNvbnRpbnVlOyAqLworCX0gZWxzZSB7CisJCUJVR19PTihtZGRldi0+bGV2ZWwgIT0gbWRkZXYtPm5ld19sZXZlbCk7CisJCUJVR19PTihtZGRldi0+bGF5b3V0ICE9IG1kZGV2LT5uZXdfbGF5b3V0KTsKKwkJQlVHX09OKG1kZGV2LT5jaHVua19zaXplICE9IG1kZGV2LT5uZXdfY2h1bmspOworCQlCVUdfT04obWRkZXYtPmRlbHRhX2Rpc2tzICE9IDApOwogCX0KLQlpZiAoY29uZi0+YWxnb3JpdGhtID4gQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQykgewotCQlwcmludGsoS0VSTl9FUlIgCi0JCQkicmFpZDU6IHVuc3VwcG9ydGVkIHBhcml0eSBhbGdvcml0aG0gJWQgZm9yICVzXG4iLAotCQkJY29uZi0+YWxnb3JpdGhtLCBtZG5hbWUobWRkZXYpKTsKLQkJZ290byBhYm9ydDsKLQl9CisKKwlpZiAobWRkZXYtPnByaXZhdGUgPT0gTlVMTCkKKwkJY29uZiA9IHNldHVwX2NvbmYobWRkZXYpOworCWVsc2UKKwkJY29uZiA9IG1kZGV2LT5wcml2YXRlOworCisJaWYgKElTX0VSUihjb25mKSkKKwkJcmV0dXJuIFBUUl9FUlIoY29uZik7CisKKwltZGRldi0+dGhyZWFkID0gY29uZi0+dGhyZWFkOworCWNvbmYtPnRocmVhZCA9IE5VTEw7CisJbWRkZXYtPnByaXZhdGUgPSBjb25mOworCisJLyoKKwkgKiAwIGZvciBhIGZ1bGx5IGZ1bmN0aW9uYWwgYXJyYXksIDEgb3IgMiBmb3IgYSBkZWdyYWRlZCBhcnJheS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCisJCQl3b3JraW5nX2Rpc2tzKys7CisKKwltZGRldi0+ZGVncmFkZWQgPSBjb25mLT5yYWlkX2Rpc2tzIC0gd29ya2luZ19kaXNrczsKKwogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKIAkJCSIgKCVkLyVkIGZhaWxlZClcbiIsCkBAIC00MTY5LDYgKzQ1MjYsMTAgQEAKIAkJZ290byBhYm9ydDsKIAl9CiAKKwkvKiBkZXZpY2Ugc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSAqLworCW1kZGV2LT5kZXZfc2VjdG9ycyAmPSB+KG1kZGV2LT5jaHVua19zaXplIC8gNTEyIC0gMSk7CisJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKKwogCWlmIChtZGRldi0+ZGVncmFkZWQgPiAwICYmCiAJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpIHsKIAkJaWYgKG1kZGV2LT5va19zdGFydF9kZWdyYWRlZCkKQEAgLTQxODQsNDMgKzQ1NDUsMjIgQEAKIAkJfQogCX0KIAotCXsKLQkJbWRkZXYtPnRocmVhZCA9IG1kX3JlZ2lzdGVyX3RocmVhZChyYWlkNWQsIG1kZGV2LCAiJXNfcmFpZDUiKTsKLQkJaWYgKCFtZGRldi0+dGhyZWFkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgCi0JCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSB0aHJlYWQgZm9yICVzXG4iLAotCQkJCW1kbmFtZShtZGRldikpOwotCQkJZ290byBhYm9ydDsKLQkJfQotCX0KLQltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3RydWN0IHN0cmlwZV9oZWFkKSArCi0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OwotCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29uZi0+bWF4X25yX3N0cmlwZXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAKLQkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKLQkJc2hyaW5rX3N0cmlwZXMoY29uZik7Ci0JCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCQlnb3RvIGFib3J0OwotCX0gZWxzZQotCQlwcmludGsoS0VSTl9JTkZPICJyYWlkNTogYWxsb2NhdGVkICVka0IgZm9yICVzXG4iLAotCQkJbWVtb3J5LCBtZG5hbWUobWRkZXYpKTsKLQogCWlmIChtZGRldi0+ZGVncmFkZWQgPT0gMCkKIAkJcHJpbnRrKCJyYWlkNTogcmFpZCBsZXZlbCAlZCBzZXQgJXMgYWN0aXZlIHdpdGggJWQgb3V0IG9mICVkIgotCQkJIiBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLCBtZG5hbWUobWRkZXYpLCAKLQkJCW1kZGV2LT5yYWlkX2Rpc2tzLW1kZGV2LT5kZWdyYWRlZCwgbWRkZXYtPnJhaWRfZGlza3MsCi0JCQljb25mLT5hbGdvcml0aG0pOworCQkgICAgICAgIiBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLCBtZG5hbWUobWRkZXYpLAorCQkgICAgICAgbWRkZXYtPnJhaWRfZGlza3MtbWRkZXYtPmRlZ3JhZGVkLCBtZGRldi0+cmFpZF9kaXNrcywKKwkJICAgICAgIG1kZGV2LT5uZXdfbGF5b3V0KTsKIAllbHNlCiAJCXByaW50ayhLRVJOX0FMRVJUICJyYWlkNTogcmFpZCBsZXZlbCAlZCBzZXQgJXMgYWN0aXZlIHdpdGggJWQiCiAJCQkiIG91dCBvZiAlZCBkZXZpY2VzLCBhbGdvcml0aG0gJWRcbiIsIGNvbmYtPmxldmVsLAogCQkJbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVncmFkZWQsCi0JCQltZGRldi0+cmFpZF9kaXNrcywgY29uZi0+YWxnb3JpdGhtKTsKKwkJCW1kZGV2LT5yYWlkX2Rpc2tzLCBtZGRldi0+bmV3X2xheW91dCk7CiAKIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCi0JaWYgKGNvbmYtPmV4cGFuZF9wcm9ncmVzcyAhPSBNYXhTZWN0b3IpIHsKKwlpZiAoY29uZi0+cmVzaGFwZV9wcm9ncmVzcyAhPSBNYXhTZWN0b3IpIHsKIAkJcHJpbnRrKCIuLi5vayBzdGFydCByZXNoYXBlIHRocmVhZFxuIik7Ci0JCWNvbmYtPmV4cGFuZF9sbyA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzczsKKwkJY29uZi0+cmVzaGFwZV9zYWZlID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJYXRvbWljX3NldCgmY29uZi0+cmVzaGFwZV9zdHJpcGVzLCAwKTsKIAkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX1NZTkMsICZtZGRldi0+cmVjb3ZlcnkpOwogCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfQ0hFQ0ssICZtZGRldi0+cmVjb3ZlcnkpOwpAQCAtNDI0NywxOCArNDU4NywyMiBAQAogCQkgICAgICAgInJhaWQ1OiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXMgZm9yICVzXG4iLAogCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CiAKKwltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CisKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19kZXZpY2U7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKIAotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMiAqIG1kZGV2LT5zaXplICogKGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgLQotCQkJCQkgICAgY29uZi0+bWF4X2RlZ3JhZGVkKTsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJYmxrX3F1ZXVlX21lcmdlX2J2ZWMobWRkZXYtPnF1ZXVlLCByYWlkNV9tZXJnZWFibGVfYnZlYyk7CiAKIAlyZXR1cm4gMDsKIGFib3J0OgorCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCW1kZGV2LT50aHJlYWQgPSBOVUxMOwogCWlmIChjb25mKSB7CisJCXNocmlua19zdHJpcGVzKGNvbmYpOwogCQlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCQlzYWZlX3B1dF9wYWdlKGNvbmYtPnNwYXJlX3BhZ2UpOwogCQlrZnJlZShjb25mLT5kaXNrcyk7CkBAIC00Mzk2LDYgKzQ3NDAsMTAgQEAKIAlwcmludF9yYWlkNV9jb25mKGNvbmYpOwogCXJkZXYgPSBwLT5yZGV2OwogCWlmIChyZGV2KSB7CisJCWlmIChudW1iZXIgPj0gY29uZi0+cmFpZF9kaXNrcyAmJgorCQkgICAgY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9PSBNYXhTZWN0b3IpCisJCQljbGVhcl9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwogCQlpZiAodGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSB8fAogCQkgICAgYXRvbWljX3JlYWQoJnJkZXYtPm5yX3BlbmRpbmcpKSB7CiAJCQllcnIgPSAtRUJVU1k7CkBAIC00NDA1LDcgKzQ3NTMsOCBAQAogCQkgKiBpc24ndCBwb3NzaWJsZS4KIAkJICovCiAJCWlmICghdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmCi0JCSAgICBtZGRldi0+ZGVncmFkZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkKSB7CisJCSAgICBtZGRldi0+ZGVncmFkZWQgPD0gY29uZi0+bWF4X2RlZ3JhZGVkICYmCisJCSAgICBudW1iZXIgPCBjb25mLT5yYWlkX2Rpc2tzKSB7CiAJCQllcnIgPSAtRUJVU1k7CiAJCQlnb3RvIGFib3J0OwogCQl9CkBAIC00NDcyLDM2ICs0ODIxLDQ4IEBACiAJICogYW55IGlvIGluIHRoZSByZW1vdmVkIHNwYWNlIGNvbXBsZXRlcywgYnV0IGl0IGhhcmRseSBzZWVtcwogCSAqIHdvcnRoIGl0LgogCSAqLwotCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+Y2h1bmtfc2l6ZS81MTIgLSAxKTsKLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNlY3RvcnMgKiAobWRkZXYtPnJhaWRfZGlza3MKLQkJCQkJICAtIGNvbmYtPm1heF9kZWdyYWRlZCk7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQ1X3NpemUobWRkZXYsIHNlY3RvcnMsCisJCQkJCSAgICAgICBtZGRldi0+cmFpZF9kaXNrcykpOworCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyA+CisJICAgIHJhaWQ1X3NpemUobWRkZXYsIHNlY3RvcnMsIG1kZGV2LT5yYWlkX2Rpc2tzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJbWRkZXYtPmNoYW5nZWQgPSAxOwotCWlmIChzZWN0b3JzLzIgID4gbWRkZXYtPnNpemUgJiYgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewotCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOworCWlmIChzZWN0b3JzID4gbWRkZXYtPmRldl9zZWN0b3JzICYmIG1kZGV2LT5yZWNvdmVyeV9jcCA9PSBNYXhTZWN0b3IpIHsKKwkJbWRkZXYtPnJlY292ZXJ5X2NwID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJfQotCW1kZGV2LT5zaXplID0gc2VjdG9ycyAvMjsKKwltZGRldi0+ZGV2X3NlY3RvcnMgPSBzZWN0b3JzOwogCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBzZWN0b3JzOwogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUKIHN0YXRpYyBpbnQgcmFpZDVfY2hlY2tfcmVzaGFwZShtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKLQlpbnQgZXJyOwogCi0JaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAgfHwKLQkgICAgbWRkZXYtPm5ld19sZXZlbCAhPSBtZGRldi0+bGV2ZWwpCi0JCXJldHVybiAtRUlOVkFMOyAvKiBDYW5ub3Qgc2hyaW5rIGFycmF5IG9yIGNoYW5nZSBsZXZlbCB5ZXQgKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID09IDApCi0JCXJldHVybiAwOyAvKiBub3RoaW5nIHRvIGRvICovCisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA9PSAwICYmCisJICAgIG1kZGV2LT5uZXdfbGF5b3V0ID09IG1kZGV2LT5sYXlvdXQgJiYKKwkgICAgbWRkZXYtPm5ld19jaHVuayA9PSBtZGRldi0+Y2h1bmtfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAlpZiAobWRkZXYtPmJpdG1hcCkKIAkJLyogQ2Fubm90IGdyb3cgYSBiaXRtYXAgeWV0ICovCiAJCXJldHVybiAtRUJVU1k7CisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApIHsKKwkJLyogV2UgbWlnaHQgYmUgYWJsZSB0byBzaHJpbmssIGJ1dCB0aGUgZGV2aWNlcyBtdXN0CisJCSAqIGJlIG1hZGUgYmlnZ2VyIGZpcnN0LgorCQkgKiBGb3IgcmFpZDYsIDQgaXMgdGhlIG1pbmltdW0gc2l6ZS4KKwkJICogT3RoZXJ3aXNlIDIgaXMgdGhlIG1pbmltdW0KKwkJICovCisJCWludCBtaW4gPSAyOworCQlpZiAobWRkZXYtPmxldmVsID09IDYpCisJCQltaW4gPSA0OworCQlpZiAobWRkZXYtPnJhaWRfZGlza3MgKyBtZGRldi0+ZGVsdGFfZGlza3MgPCBtaW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBDYW4gb25seSBwcm9jZWVkIGlmIHRoZXJlIGFyZSBwbGVudHkgb2Ygc3RyaXBlX2hlYWRzLgogCSAqIFdlIG5lZWQgYSBtaW5pbXVtIG9mIG9uZSBmdWxsIHN0cmlwZSwsIGFuZCBmb3Igc2Vuc2libGUgcHJvZ3Jlc3MKQEAgLTQ1MTQsMTggKzQ4NzUsMTIgQEAKIAlpZiAoKG1kZGV2LT5jaHVua19zaXplIC8gU1RSSVBFX1NJWkUpICogNCA+IGNvbmYtPm1heF9ucl9zdHJpcGVzIHx8CiAJICAgIChtZGRldi0+bmV3X2NodW5rIC8gU1RSSVBFX1NJWkUpICogNCA+IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhaWQ1OiByZXNoYXBlOiBub3QgZW5vdWdoIHN0cmlwZXMuICBOZWVkZWQgJWx1XG4iLAotCQkgICAgICAgKG1kZGV2LT5jaHVua19zaXplIC8gU1RSSVBFX1NJWkUpKjQpOworCQkgICAgICAgKG1heChtZGRldi0+Y2h1bmtfc2l6ZSwgbWRkZXYtPm5ld19jaHVuaykKKwkJCS8gU1RSSVBFX1NJWkUpKjQpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQllcnIgPSByZXNpemVfc3RyaXBlcyhjb25mLCBjb25mLT5yYWlkX2Rpc2tzICsgbWRkZXYtPmRlbHRhX2Rpc2tzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JLyogbG9va3MgbGlrZSB3ZSBtaWdodCBiZSBhYmxlIHRvIG1hbmFnZSB0aGlzICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc2l6ZV9zdHJpcGVzKGNvbmYsIGNvbmYtPnJhaWRfZGlza3MgKyBtZGRldi0+ZGVsdGFfZGlza3MpOwogfQogCiBzdGF0aWMgaW50IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUobWRkZXZfdCAqbWRkZXYpCkBAIC00NTUwLDEyICs0OTA1LDMxIEBACiAJCSAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFJlZnVzZSB0byByZWR1Y2Ugc2l6ZSBvZiB0aGUgYXJyYXkuICBBbnkgcmVkdWN0aW9ucyBpbgorCSAqIGFycmF5IHNpemUgbXVzdCBiZSB0aHJvdWdoIGV4cGxpY2l0IHNldHRpbmcgb2YgYXJyYXlfc2l6ZQorCSAqIGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAocmFpZDVfc2l6ZShtZGRldiwgMCwgY29uZi0+cmFpZF9kaXNrcyArIG1kZGV2LT5kZWx0YV9kaXNrcykKKwkgICAgPCBtZGRldi0+YXJyYXlfc2VjdG9ycykgeworCQlwcmludGsoS0VSTl9FUlIgIm1kOiAlczogYXJyYXkgc2l6ZSBtdXN0IGJlIHJlZHVjZWQgIgorCQkgICAgICAgImJlZm9yZSBudW1iZXIgb2YgZGlza3NcbiIsIG1kbmFtZShtZGRldikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlhdG9taWNfc2V0KCZjb25mLT5yZXNoYXBlX3N0cmlwZXMsIDApOwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAljb25mLT5yYWlkX2Rpc2tzICs9IG1kZGV2LT5kZWx0YV9kaXNrczsKLQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSAwOwotCWNvbmYtPmV4cGFuZF9sbyA9IDA7CisJY29uZi0+cHJldl9jaHVuayA9IGNvbmYtPmNodW5rX3NpemU7CisJY29uZi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5uZXdfY2h1bms7CisJY29uZi0+cHJldl9hbGdvID0gY29uZi0+YWxnb3JpdGhtOworCWNvbmYtPmFsZ29yaXRobSA9IG1kZGV2LT5uZXdfbGF5b3V0OworCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwKQorCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gcmFpZDVfc2l6ZShtZGRldiwgMCwgMCk7CisJZWxzZQorCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gMDsKKwljb25mLT5yZXNoYXBlX3NhZmUgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCWNvbmYtPmdlbmVyYXRpb24rKzsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAogCS8qIEFkZCBzb21lIG5ldyBkcml2ZXMsIGFzIG1hbnkgYXMgd2lsbCBmaXQuCkBAIC00NTgwLDkgKzQ5NTQsMTIgQEAKIAkJCQlicmVhazsKIAkJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7Ci0JbWRkZXYtPmRlZ3JhZGVkID0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKSAtIGFkZGVkX2RldmljZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwkJbWRkZXYtPmRlZ3JhZGVkID0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJLSBhZGRlZF9kZXZpY2VzOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCX0KIAltZGRldi0+cmFpZF9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSAwOwogCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwpAQCAtNDU5Nyw1MiArNDk3NCw4NiBAQAogCQltZGRldi0+cmVjb3ZlcnkgPSAwOwogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3M7Ci0JCWNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9IE1heFNlY3RvcjsKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IE1heFNlY3RvcjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KKwljb25mLT5yZXNoYXBlX2NoZWNrcG9pbnQgPSBqaWZmaWVzOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnN5bmNfdGhyZWFkKTsKIAltZF9uZXdfZXZlbnQobWRkZXYpOwogCXJldHVybiAwOwogfQotI2VuZGlmCiAKKy8qIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHJlc2hhcGUgdGhyZWFkIGFuZCBzaG91bGQgbWFrZSBhbnkKKyAqIGNoYW5nZXMgbmVlZGVkIGluICdjb25mJworICovCiBzdGF0aWMgdm9pZCBlbmRfcmVzaGFwZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKIAogCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJmNvbmYtPm1kZGV2LT5yZWNvdmVyeSkpIHsKLQkJY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMgPSAyICogY29uZi0+bWRkZXYtPnNpemUgKgotCQkJKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpOwotCQlzZXRfY2FwYWNpdHkoY29uZi0+bWRkZXYtPmdlbmRpc2ssIGNvbmYtPm1kZGV2LT5hcnJheV9zZWN0b3JzKTsKLQkJY29uZi0+bWRkZXYtPmNoYW5nZWQgPSAxOwogCi0JCWJkZXYgPSBiZGdldF9kaXNrKGNvbmYtPm1kZGV2LT5nZW5kaXNrLCAwKTsKLQkJaWYgKGJkZXYpIHsKLQkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwKLQkJCQkgICAgIChsb2ZmX3QpY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMgPDwgOSk7Ci0JCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKLQkJCWJkcHV0KGJkZXYpOwotCQl9CiAJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJY29uZi0+ZXhwYW5kX3Byb2dyZXNzID0gTWF4U2VjdG9yOworCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9IE1heFNlY3RvcjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCWNvbmYtPm1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOworCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAogCQkvKiByZWFkLWFoZWFkIHNpemUgbXVzdCBjb3ZlciB0d28gd2hvbGUgc3RyaXBlcywgd2hpY2ggaXMKIAkJICogMiAqIChkYXRhZGlza3MpICogY2h1bmtzaXplIHdoZXJlICduJyBpcyB0aGUgbnVtYmVyIG9mIHJhaWQgZGV2aWNlcwogCQkgKi8KIAkJewotCQkJaW50IGRhdGFfZGlza3MgPSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwotCQkJaW50IHN0cmlwZSA9IGRhdGFfZGlza3MgKgotCQkJCShjb25mLT5tZGRldi0+Y2h1bmtfc2l6ZSAvIFBBR0VfU0laRSk7CisJCQlpbnQgZGF0YV9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CisJCQlpbnQgc3RyaXBlID0gZGF0YV9kaXNrcyAqIChjb25mLT5jaHVua19zaXplCisJCQkJCQkgICAvIFBBR0VfU0laRSk7CiAJCQlpZiAoY29uZi0+bWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzIDwgMiAqIHN0cmlwZSkKIAkJCQljb25mLT5tZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPSAyICogc3RyaXBlOwogCQl9CiAJfQogfQogCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHRoZSByYWlkNWQgdGhyZWFkIHdpdGggbWRkZXZfbG9jayBoZWxkLgorICogSXQgbWFrZXMgY29uZmlnIGNoYW5nZXMgdG8gdGhlIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcmFpZDVfZmluaXNoX3Jlc2hhcGUobWRkZXZfdCAqbWRkZXYpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCWlmICghdGVzdF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSkpIHsKKworCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQkJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQ1X3NpemUobWRkZXYsIDAsIDApKTsKKwkJCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOworCQkJbWRkZXYtPmNoYW5nZWQgPSAxOworCisJCQliZGV2ID0gYmRnZXRfZGlzayhtZGRldi0+Z2VuZGlzaywgMCk7CisJCQlpZiAoYmRldikgeworCQkJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsCisJCQkJCSAgICAgKGxvZmZfdCltZGRldi0+YXJyYXlfc2VjdG9ycyA8PCA5KTsKKwkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJCQliZHB1dChiZGV2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBkOworCQkJbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrczsKKwkJCWZvciAoZCA9IDA7IGQgPCBjb25mLT5yYWlkX2Rpc2tzIDsgZCsrKQorCQkJCWlmIChjb25mLT5kaXNrc1tkXS5yZGV2ICYmCisJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsCisJCQkJCSAgICAgJmNvbmYtPmRpc2tzW2RdLnJkZXYtPmZsYWdzKSkKKwkJCQkJbWRkZXYtPmRlZ3JhZGVkLS07CisJCQlmb3IgKGQgPSBjb25mLT5yYWlkX2Rpc2tzIDsKKwkJCSAgICAgZCA8IGNvbmYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJCQkgICAgIGQrKykKKwkJCQlyYWlkNV9yZW1vdmVfZGlzayhtZGRldiwgZCk7CisJCX0KKwkJbWRkZXYtPmxheW91dCA9IGNvbmYtPmFsZ29yaXRobTsKKwkJbWRkZXYtPmNodW5rX3NpemUgPSBjb25mLT5jaHVua19zaXplOworCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IE1heFNlY3RvcjsKKwkJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHJhaWQ1X3F1aWVzY2UobWRkZXZfdCAqbWRkZXYsIGludCBzdGF0ZSkKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKQEAgLTQ2NzIsNiArNTA4MywyMTIgQEAKIAl9CiB9CiAKKworc3RhdGljIHZvaWQgKnJhaWQ1X3Rha2VvdmVyX3JhaWQxKG1kZGV2X3QgKm1kZGV2KQoreworCWludCBjaHVua3NlY3Q7CisKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgIT0gMiB8fAorCSAgICBtZGRldi0+ZGVncmFkZWQgPiAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIFNob3VsZCBjaGVjayBpZiB0aGVyZSBhcmUgd3JpdGUtYmVoaW5kIGRldmljZXM/ICovCisKKwljaHVua3NlY3QgPSA2NCoyOyAvKiA2NEsgYnkgZGVmYXVsdCAqLworCisJLyogVGhlIGFycmF5IG11c3QgYmUgYW4gZXhhY3QgbXVsdGlwbGUgb2YgY2h1bmtzaXplICovCisJd2hpbGUgKGNodW5rc2VjdCAmJiAobWRkZXYtPmFycmF5X3NlY3RvcnMgJiAoY2h1bmtzZWN0LTEpKSkKKwkJY2h1bmtzZWN0ID4+PSAxOworCisJaWYgKChjaHVua3NlY3Q8PDkpIDwgU1RSSVBFX1NJWkUpCisJCS8qIGFycmF5IHNpemUgZG9lcyBub3QgYWxsb3cgYSBzdWl0YWJsZSBjaHVuayBzaXplICovCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJbWRkZXYtPm5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM7CisJbWRkZXYtPm5ld19jaHVuayA9IGNodW5rc2VjdCA8PCA5OworCisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCitzdGF0aWMgdm9pZCAqcmFpZDVfdGFrZW92ZXJfcmFpZDYobWRkZXZfdCAqbWRkZXYpCit7CisJaW50IG5ld19sYXlvdXQ7CisKKwlzd2l0Y2ggKG1kZGV2LT5sYXlvdXQpIHsKKwljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQ182OgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wXzY6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fUEFSSVRZXzA7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCW1kZGV2LT5kZWx0YV9kaXNrcyA9IC0xOworCW1kZGV2LT5yYWlkX2Rpc2tzIC09IDE7CisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCisKK3N0YXRpYyBpbnQgcmFpZDVfcmVjb25maWcobWRkZXZfdCAqbWRkZXYsIGludCBuZXdfbGF5b3V0LCBpbnQgbmV3X2NodW5rKQoreworCS8qIEZvciBhIDItZHJpdmUgYXJyYXksIHRoZSBsYXlvdXQgYW5kIGNodW5rIHNpemUgY2FuIGJlIGNoYW5nZWQKKwkgKiBpbW1lZGlhdGVseSBhcyBub3QgcmVzdHJpcGluZyBpcyBuZWVkZWQuCisJICogRm9yIGxhcmdlciBhcnJheXMgd2UgcmVjb3JkIHRoZSBuZXcgdmFsdWUgLSBhZnRlciB2YWxpZGF0aW9uCisJICogdG8gYmUgdXNlZCBieSBhIHJlc2hhcGUgcGFzcy4KKwkgKi8KKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCWlmIChuZXdfbGF5b3V0ID49IDAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNShuZXdfbGF5b3V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ld19jaHVuayA+IDApIHsKKwkJaWYgKG5ld19jaHVuayAmIChuZXdfY2h1bmstMSkpCisJCQkvKiBub3QgYSBwb3dlciBvZiAyICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG5ld19jaHVuayA8IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRkZXYtPmFycmF5X3NlY3RvcnMgJiAoKG5ld19jaHVuaz4+OSktMSkpCisJCQkvKiBub3QgZmFjdG9yIG9mIGFycmF5IHNpemUgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoZXkgbG9vayB2YWxpZCAqLworCisJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzID09IDIpIHsKKworCQlpZiAobmV3X2xheW91dCA+PSAwKSB7CisJCQljb25mLT5hbGdvcml0aG0gPSBuZXdfbGF5b3V0OworCQkJbWRkZXYtPmxheW91dCA9IG1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwkJfQorCQlpZiAobmV3X2NodW5rID4gMCkgeworCQkJY29uZi0+Y2h1bmtfc2l6ZSA9IG5ld19jaHVuazsKKwkJCW1kZGV2LT5jaHVua19zaXplID0gbWRkZXYtPm5ld19jaHVuayA9IG5ld19jaHVuazsKKwkJfQorCQlzZXRfYml0KE1EX0NIQU5HRV9ERVZTLCAmbWRkZXYtPmZsYWdzKTsKKwkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwl9IGVsc2UgeworCQlpZiAobmV3X2xheW91dCA+PSAwKQorCQkJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCQlpZiAobmV3X2NodW5rID4gMCkKKwkJCW1kZGV2LT5uZXdfY2h1bmsgPSBuZXdfY2h1bms7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhaWQ2X3JlY29uZmlnKG1kZGV2X3QgKm1kZGV2LCBpbnQgbmV3X2xheW91dCwgaW50IG5ld19jaHVuaykKK3sKKwlpZiAobmV3X2xheW91dCA+PSAwICYmICFhbGdvcml0aG1fdmFsaWRfcmFpZDYobmV3X2xheW91dCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChuZXdfY2h1bmsgPiAwKSB7CisJCWlmIChuZXdfY2h1bmsgJiAobmV3X2NodW5rLTEpKQorCQkJLyogbm90IGEgcG93ZXIgb2YgMiAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChuZXdfY2h1bmsgPCBQQUdFX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1kZGV2LT5hcnJheV9zZWN0b3JzICYgKChuZXdfY2h1bms+PjkpLTEpKQorCQkJLyogbm90IGZhY3RvciBvZiBhcnJheSBzaXplICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBUaGV5IGxvb2sgdmFsaWQgKi8KKworCWlmIChuZXdfbGF5b3V0ID49IDApCisJCW1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwlpZiAobmV3X2NodW5rID4gMCkKKwkJbWRkZXYtPm5ld19jaHVuayA9IG5ld19jaHVuazsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqcmFpZDVfdGFrZW92ZXIobWRkZXZfdCAqbWRkZXYpCit7CisJLyogcmFpZDUgY2FuIHRha2Ugb3ZlcjoKKwkgKiAgcmFpZDAgLSBpZiBhbGwgZGV2aWNlcyBhcmUgdGhlIHNhbWUgLSBtYWtlIGl0IGEgcmFpZDQgbGF5b3V0CisJICogIHJhaWQxIC0gaWYgdGhlcmUgYXJlIHR3byBkcml2ZXMuICBXZSBuZWVkIHRvIGtub3cgdGhlIGNodW5rIHNpemUKKwkgKiAgcmFpZDQgLSB0cml2aWFsIC0ganVzdCB1c2UgYSByYWlkNCBsYXlvdXQuCisJICogIHJhaWQ2IC0gUHJvdmlkaW5nIGl0IGlzIGEgKl82IGxheW91dAorCSAqCisJICogRm9yIG5vdywganVzdCBkbyByYWlkMQorCSAqLworCisJaWYgKG1kZGV2LT5sZXZlbCA9PSAxKQorCQlyZXR1cm4gcmFpZDVfdGFrZW92ZXJfcmFpZDEobWRkZXYpOworCWlmIChtZGRldi0+bGV2ZWwgPT0gNCkgeworCQltZGRldi0+bmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKKwkJbWRkZXYtPm5ld19sZXZlbCA9IDU7CisJCXJldHVybiBzZXR1cF9jb25mKG1kZGV2KTsKKwl9CisJaWYgKG1kZGV2LT5sZXZlbCA9PSA2KQorCQlyZXR1cm4gcmFpZDVfdGFrZW92ZXJfcmFpZDYobWRkZXYpOworCisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKKworc3RhdGljIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgcmFpZDVfcGVyc29uYWxpdHk7CisKK3N0YXRpYyB2b2lkICpyYWlkNl90YWtlb3ZlcihtZGRldl90ICptZGRldikKK3sKKwkvKiBDdXJyZW50bHkgY2FuIG9ubHkgdGFrZSBvdmVyIGEgcmFpZDUuICBXZSBtYXAgdGhlCisJICogcGVyc29uYWxpdHkgdG8gYW4gZXF1aXZhbGVudCByYWlkNiBwZXJzb25hbGl0eQorCSAqIHdpdGggdGhlIFEgYmxvY2sgYXQgdGhlIGVuZC4KKwkgKi8KKwlpbnQgbmV3X2xheW91dDsKKworCWlmIChtZGRldi0+cGVycyAhPSAmcmFpZDVfcGVyc29uYWxpdHkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChtZGRldi0+ZGVncmFkZWQgPiAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgPiAyNTMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChtZGRldi0+cmFpZF9kaXNrcyA8IDMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc3dpdGNoIChtZGRldi0+bGF5b3V0KSB7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMDoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfMF82OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCW1kZGV2LT5uZXdfbGV2ZWwgPSA2OworCW1kZGV2LT5uZXdfbGF5b3V0ID0gbmV3X2xheW91dDsKKwltZGRldi0+ZGVsdGFfZGlza3MgPSAxOworCW1kZGV2LT5yYWlkX2Rpc2tzICs9IDE7CisJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5IHJhaWQ2X3BlcnNvbmFsaXR5ID0KIHsKIAkubmFtZQkJPSAicmFpZDYiLApAQCAtNDY4NywxMSArNTMwNCwxMyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkNV9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucmVzaXplCQk9IHJhaWQ1X3Jlc2l6ZSwKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQorCS5zaXplCQk9IHJhaWQ1X3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkNV9jaGVja19yZXNoYXBlLAogCS5zdGFydF9yZXNoYXBlICA9IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUsCi0jZW5kaWYKKwkuZmluaXNoX3Jlc2hhcGUgPSByYWlkNV9maW5pc2hfcmVzaGFwZSwKIAkucXVpZXNjZQk9IHJhaWQ1X3F1aWVzY2UsCisJLnRha2VvdmVyCT0gcmFpZDZfdGFrZW92ZXIsCisJLnJlY29uZmlnCT0gcmFpZDZfcmVjb25maWcsCiB9Owogc3RhdGljIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgcmFpZDVfcGVyc29uYWxpdHkgPQogewpAQCAtNDcwOCwxMSArNTMyNywxMyBAQAogCS5zcGFyZV9hY3RpdmUJPSByYWlkNV9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucmVzaXplCQk9IHJhaWQ1X3Jlc2l6ZSwKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQorCS5zaXplCQk9IHJhaWQ1X3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkNV9jaGVja19yZXNoYXBlLAogCS5zdGFydF9yZXNoYXBlICA9IHJhaWQ1X3N0YXJ0X3Jlc2hhcGUsCi0jZW5kaWYKKwkuZmluaXNoX3Jlc2hhcGUgPSByYWlkNV9maW5pc2hfcmVzaGFwZSwKIAkucXVpZXNjZQk9IHJhaWQ1X3F1aWVzY2UsCisJLnRha2VvdmVyCT0gcmFpZDVfdGFrZW92ZXIsCisJLnJlY29uZmlnCT0gcmFpZDVfcmVjb25maWcsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1ka19wZXJzb25hbGl0eSByYWlkNF9wZXJzb25hbGl0eSA9CkBAIC00NzMwLDIwICs1MzUxLDE1IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQ1X3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDVfcmVzaXplLAotI2lmZGVmIENPTkZJR19NRF9SQUlENV9SRVNIQVBFCisJLnNpemUJCT0gcmFpZDVfc2l6ZSwKIAkuY2hlY2tfcmVzaGFwZQk9IHJhaWQ1X2NoZWNrX3Jlc2hhcGUsCiAJLnN0YXJ0X3Jlc2hhcGUgID0gcmFpZDVfc3RhcnRfcmVzaGFwZSwKLSNlbmRpZgorCS5maW5pc2hfcmVzaGFwZSA9IHJhaWQ1X2ZpbmlzaF9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDVfcXVpZXNjZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJhaWQ1X2luaXQodm9pZCkKIHsKLQlpbnQgZTsKLQotCWUgPSByYWlkNl9zZWxlY3RfYWxnbygpOwotCWlmICggZSApCi0JCXJldHVybiBlOwogCXJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KCZyYWlkNl9wZXJzb25hbGl0eSk7CiAJcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoJnJhaWQ1X3BlcnNvbmFsaXR5KTsKIAlyZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSgmcmFpZDRfcGVyc29uYWxpdHkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmggYi9kcml2ZXJzL21kL3JhaWQ1LmgKc2ltaWxhcml0eSBpbmRleCA4MSUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmgKcmVuYW1lIHRvIGRyaXZlcnMvbWQvcmFpZDUuaAppbmRleCAzYjI2NzI3Li41MmJhOTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9SQUlENV9ICiAjZGVmaW5lIF9SQUlENV9ICiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KIAogLyoKQEAgLTE5NywxNSArMTk2LDE5IEBACiAKIHN0cnVjdCBzdHJpcGVfaGVhZCB7CiAJc3RydWN0IGhsaXN0X25vZGUJaGFzaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxydTsJCQkvKiBpbmFjdGl2ZV9saXN0IG9yIGhhbmRsZV9saXN0ICovCi0Jc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YQkqcmFpZF9jb25mOwotCXNlY3Rvcl90CQlzZWN0b3I7CQkJLyogc2VjdG9yIG9mIHRoaXMgcm93ICovCi0JaW50CQkJcGRfaWR4OwkJCS8qIHBhcml0eSBkaXNrIGluZGV4ICovCi0JdW5zaWduZWQgbG9uZwkJc3RhdGU7CQkJLyogc3RhdGUgZmxhZ3MgKi8KLQlhdG9taWNfdAkJY291bnQ7CQkJLyogbnIgb2YgYWN0aXZlIHRocmVhZC9yZXF1ZXN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQJbHJ1OwkgICAgICAvKiBpbmFjdGl2ZV9saXN0IG9yIGhhbmRsZV9saXN0ICovCisJc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSAqcmFpZF9jb25mOworCXNob3J0CQkJZ2VuZXJhdGlvbjsJLyogaW5jcmVtZW50cyB3aXRoIGV2ZXJ5CisJCQkJCQkgKiByZXNoYXBlICovCisJc2VjdG9yX3QJCXNlY3RvcjsJCS8qIHNlY3RvciBvZiB0aGlzIHJvdyAqLworCXNob3J0CQkJcGRfaWR4OwkJLyogcGFyaXR5IGRpc2sgaW5kZXggKi8KKwlzaG9ydAkJCXFkX2lkeDsJCS8qICdRJyBkaXNrIGluZGV4IGZvciByYWlkNiAqLworCXNob3J0CQkJZGRmX2xheW91dDsvKiB1c2UgRERGIG9yZGVyaW5nIHRvIGNhbGN1bGF0ZSBRICovCisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CQkvKiBzdGF0ZSBmbGFncyAqLworCWF0b21pY190CQljb3VudDsJICAgICAgLyogbnIgb2YgYWN0aXZlIHRocmVhZC9yZXF1ZXN0cyAqLwogCXNwaW5sb2NrX3QJCWxvY2s7CiAJaW50CQkJYm1fc2VxOwkvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIGJpdG1hcCBmbHVzaGVzICovCi0JaW50CQkJZGlza3M7CQkJLyogZGlza3MgaW4gc3RyaXBlICovCisJaW50CQkJZGlza3M7CQkvKiBkaXNrcyBpbiBzdHJpcGUgKi8KIAllbnVtIGNoZWNrX3N0YXRlcwljaGVja19zdGF0ZTsKIAllbnVtIHJlY29uc3RydWN0X3N0YXRlcyByZWNvbnN0cnVjdF9zdGF0ZTsKIAkvKiBzdHJpcGVfb3BlcmF0aW9ucwpAQCAtMjM4LDcgKzI0MSw3IEBACiAKIC8qIHI2X3N0YXRlIC0gZXh0cmEgc3RhdGUgZGF0YSBvbmx5IHJlbGV2YW50IHRvIHI2ICovCiBzdHJ1Y3QgcjZfc3RhdGUgewotCWludCBwX2ZhaWxlZCwgcV9mYWlsZWQsIHFkX2lkeCwgZmFpbGVkX251bVsyXTsKKwlpbnQgcF9mYWlsZWQsIHFfZmFpbGVkLCBmYWlsZWRfbnVtWzJdOwogfTsKIAogLyogRmxhZ3MgKi8KQEAgLTI2OCw2ICsyNzEsOCBAQAogI2RlZmluZSBSRUFEX01PRElGWV9XUklURQkyCiAvKiBub3QgYSB3cml0ZSBtZXRob2QsIGJ1dCBhIGNvbXB1dGVfcGFyaXR5IG1vZGUgKi8KICNkZWZpbmUJQ0hFQ0tfUEFSSVRZCQkzCisvKiBBZGRpdGlvbmFsIGNvbXB1dGVfcGFyaXR5IG1vZGUgLS0gdXBkYXRlcyB0aGUgcGFyaXR5IHcvbyBMT0NLSU5HICovCisjZGVmaW5lIFVQREFURV9QQVJJVFkJCTQKIAogLyoKICAqIFN0cmlwZSBzdGF0ZQpAQCAtMzE5LDcgKzMyNCw3IEBACiAgKiBQUkVSRUFEX0FDVElWRSBpcyBzZXQsIGVsc2Ugd2Ugc2V0IERFTEFZRUQgd2hpY2ggd2lsbCBzZW5kIGl0IHRvIHRoZSBkZWxheWVkIHF1ZXVlLgogICogSEFORExFIGdldHMgY2xlYXJlZCBpZiBzdHJpcGVfaGFuZGxlIGxlYXZlIG5vdGhpbmcgbG9ja2VkLgogICovCi0gCisKIAogc3RydWN0IGRpc2tfaW5mbyB7CiAJbWRrX3JkZXZfdAkqcmRldjsKQEAgLTMzNCwxMiArMzM5LDIxIEBACiAJaW50CQkJcmFpZF9kaXNrczsKIAlpbnQJCQltYXhfbnJfc3RyaXBlczsKIAotCS8qIHVzZWQgZHVyaW5nIGFuIGV4cGFuZCAqLwotCXNlY3Rvcl90CQlleHBhbmRfcHJvZ3Jlc3M7CS8qIE1heFNlY3RvciB3aGVuIG5vIGV4cGFuZCBoYXBwZW5pbmcgKi8KLQlzZWN0b3JfdAkJZXhwYW5kX2xvOyAvKiBmcm9tIGhlcmUgdXAgdG8gZXhwYW5kX3Byb2dyZXNzIGl0IG91dC1vZi1ib3VuZHMKLQkJCQkJICAgICogYXMgd2UgaGF2ZW4ndCBmbHVzaGVkIHRoZSBtZXRhZGF0YSB5ZXQKLQkJCQkJICAgICovCisJLyogcmVzaGFwZV9wcm9ncmVzcyBpcyB0aGUgbGVhZGluZyBlZGdlIG9mIGEgJ3Jlc2hhcGUnCisJICogSXQgaGFzIHZhbHVlIE1heFNlY3RvciB3aGVuIG5vIHJlc2hhcGUgaXMgaGFwcGVuaW5nCisJICogSWYgZGVsdGFfZGlza3MgPCAwLCBpdCBpcyB0aGUgbGFzdCBzZWN0b3Igd2Ugc3RhcnRlZCB3b3JrIG9uLAorCSAqIGVsc2UgaXMgaXQgdGhlIG5leHQgc2VjdG9yIHRvIHdvcmsgb24uCisJICovCisJc2VjdG9yX3QJCXJlc2hhcGVfcHJvZ3Jlc3M7CisJLyogcmVzaGFwZV9zYWZlIGlzIHRoZSB0cmFpbGluZyBlZGdlIG9mIGEgcmVzaGFwZS4gIFdlIGtub3cgdGhhdAorCSAqIGJlZm9yZSAob3IgYWZ0ZXIpIHRoaXMgYWRkcmVzcywgYWxsIHJlc2hhcGUgaGFzIGNvbXBsZXRlZC4KKwkgKi8KKwlzZWN0b3JfdAkJcmVzaGFwZV9zYWZlOwogCWludAkJCXByZXZpb3VzX3JhaWRfZGlza3M7CisJaW50CQkJcHJldl9jaHVuaywgcHJldl9hbGdvOworCXNob3J0CQkJZ2VuZXJhdGlvbjsgLyogaW5jcmVtZW50cyB3aXRoIGV2ZXJ5IHJlc2hhcGUgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXNoYXBlX2NoZWNrcG9pbnQ7IC8qIFRpbWUgd2UgbGFzdCB1cGRhdGVkCisJCQkJCQkgICAgICogbWV0YWRhdGEgKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQJaGFuZGxlX2xpc3Q7IC8qIHN0cmlwZXMgbmVlZGluZyBoYW5kbGluZyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaG9sZF9saXN0OyAvKiBwcmVyZWFkIHJlYWR5IHN0cmlwZXMgKi8KQEAgLTM4NSw2ICszOTksMTEgQEAKIAlpbnQJCQlwb29sX3NpemU7IC8qIG51bWJlciBvZiBkaXNrcyBpbiBzdHJpcGVoZWFkcyBpbiBwb29sICovCiAJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CiAJc3RydWN0IGRpc2tfaW5mbwkqZGlza3M7CisKKwkvKiBXaGVuIHRha2luZyBvdmVyIGFuIGFycmF5IGZyb20gYSBkaWZmZXJlbnQgcGVyc29uYWxpdHksIHdlIHN0b3JlCisJICogdGhlIG5ldyB0aHJlYWQgaGVyZSB1bnRpbCB3ZSBmdWxseSBhY3RpdmF0ZSB0aGUgYXJyYXkuCisJICovCisJc3RydWN0IG1ka190aHJlYWRfcwkqdGhyZWFkOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgcmFpZDVfcHJpdmF0ZV9kYXRhIHJhaWQ1X2NvbmZfdDsKQEAgLTM5NCw5ICs0MTMsNjIgQEAKIC8qCiAgKiBPdXIgc3VwcG9ydGVkIGFsZ29yaXRobXMKICAqLwotI2RlZmluZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDCTAKLSNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUMJMQotI2RlZmluZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUMJMgotI2RlZmluZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDCTMKKyNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQwkwIC8qIFJvdGF0aW5nIFBhcml0eSBOIHdpdGggRGF0YSBSZXN0YXJ0ICovCisjZGVmaW5lIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDCTEgLyogUm90YXRpbmcgUGFyaXR5IDAgd2l0aCBEYXRhIFJlc3RhcnQgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDCTIgLyogUm90YXRpbmcgUGFyaXR5IE4gd2l0aCBEYXRhIENvbnRpbnVhdGlvbiAqLworI2RlZmluZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDCTMgLyogUm90YXRpbmcgUGFyaXR5IDAgd2l0aCBEYXRhIENvbnRpbnVhdGlvbiAqLwogCisvKiBEZWZpbmUgbm9uLXJvdGF0aW5nIChyYWlkNCkgYWxnb3JpdGhtcy4gIFRoZXNlIGFsbG93CisgKiBjb252ZXJzaW9uIG9mIHJhaWQ0IHRvIHJhaWQ1LgorICovCisjZGVmaW5lIEFMR09SSVRITV9QQVJJVFlfMAkJNCAvKiBQIG9yIFAsUSBhcmUgaW5pdGlhbCBkZXZpY2VzICovCisjZGVmaW5lIEFMR09SSVRITV9QQVJJVFlfTgkJNSAvKiBQIG9yIFAsUSBhcmUgZmluYWwgZGV2aWNlcy4gKi8KKworLyogRERGIFJBSUQ2IGxheW91dHMgZGlmZmVyIGZyb20gbWQvcmFpZDYgbGF5b3V0cyBpbiB0d28gd2F5cy4KKyAqIEZpcnN0bHksIHRoZSBleGFjdCBwb3NpdGlvbmluZyBvZiB0aGUgcGFyaXR5IGJsb2NrIGlzIHNsaWdodGx5CisgKiBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgJ0xFRlRfKicgbW9kZXMgb2YgbWQgYW5kIHRoZSAiX05fKiIgbW9kZXMKKyAqIG9mIERERi4KKyAqIFNlY29uZGx5LCBvciBvcmRlciBvZiBkYXRhYmxvY2tzIG92ZXIgd2hpY2ggdGhlIFEgc3luZHJvbWUgaXMgY29tcHV0ZWQKKyAqIGlzIGRpZmZlcmVudC4KKyAqIENvbnNlcXVlbnRseSB3ZSBoYXZlIGRpZmZlcmVudCBsYXlvdXRzIGZvciBEREYvcmFpZDYgdGhhbiBtZC9yYWlkNi4KKyAqIFRoZXNlIGxheW91dHMgYXJlIGZyb20gdGhlIERERnYxLjIgc3BlYy4KKyAqIEludGVyZXN0aW5nbHkgRERGdjEuMi1FcnJhdGEtQSBkb2VzIG5vdCBzcGVjaWZ5IE5fQ09OVElOVUUgYnV0CisgKiBsZWF2ZXMgUkxRPTMgYXMgJ1ZlbmRvciBTcGVjaWZpYycKKyAqLworCisjZGVmaW5lIEFMR09SSVRITV9ST1RBVElOR19aRVJPX1JFU1RBUlQJOCAvKiBEREYgUFJMPTYgUkxRPTEgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1JPVEFUSU5HX05fUkVTVEFSVAk5IC8qIERERiBQUkw9NiBSTFE9MiAqLworI2RlZmluZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9DT05USU5VRQkxMCAvKkRERiBQUkw9NiBSTFE9MyAqLworCisKKy8qIEZvciBldmVyeSBSQUlENSBhbGdvcml0aG0gd2UgZGVmaW5lIGEgUkFJRDYgYWxnb3JpdGhtCisgKiB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgbGF5b3V0IGZvciBkYXRhIGFuZCBwYXJpdHksIGFuZAorICogd2l0aCB0aGUgUSBibG9jayBhbHdheXMgb24gdGhlIGxhc3QgZGV2aWNlIChOLTEpLgorICogVGhpcyBhbGxvd3MgdHJpdmlhbCBjb252ZXJzaW9uIGZyb20gUkFJRDUgdG8gUkFJRDYKKyAqLworI2RlZmluZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzYJMTYKKyNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNgkxNworI2RlZmluZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNgkxOAorI2RlZmluZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDXzYJMTkKKyNkZWZpbmUgQUxHT1JJVEhNX1BBUklUWV8wXzYJCTIwCisjZGVmaW5lIEFMR09SSVRITV9QQVJJVFlfTl82CQlBTEdPUklUSE1fUEFSSVRZX04KKworc3RhdGljIGlubGluZSBpbnQgYWxnb3JpdGhtX3ZhbGlkX3JhaWQ1KGludCBsYXlvdXQpCit7CisJcmV0dXJuIChsYXlvdXQgPj0gMCkgJiYKKwkJKGxheW91dCA8PSA1KTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGFsZ29yaXRobV92YWxpZF9yYWlkNihpbnQgbGF5b3V0KQoreworCXJldHVybiAobGF5b3V0ID49IDAgJiYgbGF5b3V0IDw9IDUpCisJCXx8CisJCShsYXlvdXQgPT0gOCB8fCBsYXlvdXQgPT0gMTApCisJCXx8CisJCShsYXlvdXQgPj0gMTYgJiYgbGF5b3V0IDw9IDIwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWxnb3JpdGhtX2lzX0RERihpbnQgbGF5b3V0KQoreworCXJldHVybiBsYXlvdXQgPj0gOCAmJiBsYXlvdXQgPD0gMTA7Cit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jIGIvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMKaW5kZXggMjE5ODdlMy4uODY2MjE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTYsMTMgKzE2LDIwIEBACiAgKiBBbGdvcml0aG0gbGlzdCBhbmQgYWxnb3JpdGhtIHNlbGVjdGlvbiBmb3IgUkFJRC02CiAgKi8KIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogI2lmbmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2Vsc2UKKyNpZiAhUkFJRDZfVVNFX0VNUFRZX1pFUk9fUEFHRQorLyogSW4gLmJzcyBzbyBpdCdzIHplcm9lZCAqLworY29uc3QgY2hhciByYWlkNl9lbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKK0VYUE9SVF9TWU1CT0wocmFpZDZfZW1wdHlfemVyb19wYWdlKTsKKyNlbmRpZgogI2VuZGlmCiAKIHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9jYWxsOworRVhQT1JUX1NZTUJPTF9HUEwocmFpZDZfY2FsbCk7CiAKIC8qIFZhcmlvdXMgcm91dGluZSBzZXRzICovCiBleHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2ludHgxOwpAQCAtNzksNiArODYsNyBAQAogI2Vsc2UKIC8qIE5lZWQgbW9yZSB0aW1lIHRvIGJlIHN0YWJsZSBpbiB1c2Vyc3BhY2UgKi8KICNkZWZpbmUgUkFJRDZfVElNRV9KSUZGSUVTX0xHMgk5CisjZGVmaW5lIHRpbWVfYmVmb3JlKHgsIHkpICgoeCkgPCAoeSkpCiAjZW5kaWYKIAogLyogVHJ5IHRvIHBpY2sgdGhlIGJlc3QgYWxnb3JpdGhtICovCkBAIC0xNTIsMyArMTYwLDEyIEBACiAKIAlyZXR1cm4gYmVzdCA/IDAgOiAtRUlOVkFMOwogfQorCitzdGF0aWMgdm9pZCByYWlkNl9leGl0KHZvaWQpCit7CisJZG8geyB9IHdoaWxlICgwKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHJhaWQ2X3NlbGVjdF9hbGdvKTsKK21vZHVsZV9leGl0KHJhaWQ2X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwppbmRleCBiOWFmZDM1Li42OTlkZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMiw3ICsyMiw3IEBACiAgKiBicmFja2VkIHRoaXMgd2l0aCBwcmVlbXB0X2Rpc2FibGUvZW5hYmxlIG9yIGluIGEgbG9jaykKICAqLwogCi0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjIGIvZHJpdmVycy9tZC9yYWlkNmludC51YwppbmRleCBhZDAwNGNlLi5mOWJmOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTgsNyArMTgsNyBAQAogICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCiAgKi8KIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogCiAvKgogICogVGhpcyBpcyB0aGUgQyBkYXRhIHR5cGUgdG8gdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2bW14LmMgYi9kcml2ZXJzL21kL3JhaWQ2bW14LmMKaW5kZXggZDRlNGExYi4uZTdmNmMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNm1teC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZtbXguYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xOCw3ICsxOCw3IEBACiAKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX2FyY2hfdW1fXykKIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogI2luY2x1ZGUgInJhaWQ2eDg2LmgiCiAKIC8qIFNoYXJlZCB3aXRoIHJhaWQ2c3NlMS5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2cmVjb3YuYyBiL2RyaXZlcnMvbWQvcmFpZDZyZWNvdi5jCmluZGV4IGE4YzRkOTQuLjI2MDlmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZyZWNvdi5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZyZWNvdi5jCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE4LDcgKzE4LDcgQEAKICAqIHRoZSBzeW5kcm9tZS4pCiAgKi8KIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogCiAvKiBSZWNvdmVyIHR3byBmYWlsZWQgZGF0YSBibG9ja3MuICovCiB2b2lkIHJhaWQ2XzJkYXRhX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKQEAgLTYzLDkgKzYzLDcgQEAKIAkJcCsrOyBxKys7CiAJfQogfQotCi0KLQorRVhQT1JUX1NZTUJPTF9HUEwocmFpZDZfMmRhdGFfcmVjb3YpOwogCiAvKiBSZWNvdmVyIGZhaWx1cmUgb2Ygb25lIGRhdGEgYmxvY2sgcGx1cyB0aGUgUCBibG9jayAqLwogdm9pZCByYWlkNl9kYXRhcF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCB2b2lkICoqcHRycykKQEAgLTk3LDkgKzk1LDEwIEBACiAJCXErKzsgZHErKzsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyYWlkNl9kYXRhcF9yZWNvdik7CiAKLQotI2lmbmRlZiBfX0tFUk5FTF9fCQkvKiBUZXN0aW5nIG9ubHkgKi8KKyNpZm5kZWYgX19LRVJORUxfXworLyogVGVzdGluZyBvbmx5ICovCiAKIC8qIFJlY292ZXIgdHdvIGZhaWxlZCBibG9ja3MuICovCiB2b2lkIHJhaWQ2X2R1YWxfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLCB2b2lkICoqcHRycykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZzc2UxLmMgYi9kcml2ZXJzL21kL3JhaWQ2c3NlMS5jCmluZGV4IDA2NjYyMzcuLmIyNzRkZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZzc2UxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNnNzZTEuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMyw3ICsyMyw3IEBACiAKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX2FyY2hfdW1fXykKIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogI2luY2x1ZGUgInJhaWQ2eDg2LmgiCiAKIC8qIERlZmluZWQgaW4gcmFpZDZtbXguYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnNzZTIuYyBiL2RyaXZlcnMvbWQvcmFpZDZzc2UyLmMKaW5kZXggYjAzNGFkOC4uNmVkNmM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnNzZTIuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2c3NlMi5jCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE5LDcgKzE5LDcgQEAKIAogI2lmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSAmJiAhZGVmaW5lZChfX2FyY2hfdW1fXykKIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogI2luY2x1ZGUgInJhaWQ2eDg2LmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmFpZDZfc3NlX2NvbnN0YW50cyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCmluZGV4IDc4ZTAzOTYuLjU4ZmZkZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogCiBDQwkgPSBnY2MKIE9QVEZMQUdTID0gLU8yCQkJIyBBZGp1c3QgYXMgZGVzaXJlZAotQ0ZMQUdTCSA9IC1JLi4gLWcgJChPUFRGTEFHUykKK0NGTEFHUwkgPSAtSS4uIC1JIC4uLy4uLy4uL2luY2x1ZGUgLWcgJChPUFRGTEFHUykKIExECSA9IGxkCiBQRVJMCSA9IHBlcmwKIEFSCSA9IGFyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC90ZXN0LmMgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC90ZXN0LmMKaW5kZXggNTU5Y2M0MS4uN2E5MzAzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvdGVzdC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L3Rlc3QuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAicmFpZDYuaCIKKyNpbmNsdWRlIDxsaW51eC9yYWlkL3BxLmg+CiAKICNkZWZpbmUgTkRJU0tTCQkxNgkvKiBJbmNsdWRpbmcgUCBhbmQgUSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2eDg2LmggYi9kcml2ZXJzL21kL3JhaWQ2eDg2LmgKaW5kZXggOTlmZWE3YS4uNGMyMmMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNng4Ni5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZ4ODYuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKaW5kZXggOTNlYTIwMS4uMjIzYzM2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwpAQCAtMTE3LDcgKzExNyw3IEBACiBjb25maWcgREFCCiAJYm9vbGVhbiAiREFCIGFkYXB0ZXJzIgogCS0tLWhlbHAtLS0KLQkgIEFsbG93IHNlbGVjdGluZyBzdXBwb3J0IGZvciBmb3IgRGlnaXRhbCBBdWRpbyBCcm9hZGNhc3RpbmcgKERBQikKKwkgIEFsbG93IHNlbGVjdGluZyBzdXBwb3J0IGZvciBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKQogCSAgUmVjZWl2ZXIgYWRhcHRlcnMuCiAKIGlmIERBQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCmluZGV4IGQ4MjI5YTAuLjNmZTE1OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKQEAgLTE1Myw2ICsxNTMsNjUgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWEpOwogCisvKiBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4gKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgwMF0gPSBLRVlfUE9XRVIsCisJWzB4MDFdID0gS0VZX1RVTkVSLAkJLyogVFYvRk0gKi8KKwlbMHgwM10gPSBLRVlfVEVYVCwJCS8qIFRlbGV0ZXh0ICovCisJWzB4MDRdID0gS0VZX0VQRywKKwlbMHgwNV0gPSBLRVlfMSwKKwlbMHgwNl0gPSBLRVlfMiwKKwlbMHgwN10gPSBLRVlfMywKKwlbMHgwOF0gPSBLRVlfQVVESU8sCisJWzB4MDldID0gS0VZXzQsCisJWzB4MGFdID0gS0VZXzUsCisJWzB4MGJdID0gS0VZXzYsCisJWzB4MGNdID0gS0VZX1pPT00sCQkvKiBGdWxsIHNjcmVlbiAqLworCVsweDBkXSA9IEtFWV83LAorCVsweDBlXSA9IEtFWV84LAorCVsweDBmXSA9IEtFWV85LAorCVsweDEwXSA9IEtFWV9QQUdFVVAsCQkvKiAxNi1DSCBQUkVWICovCisJWzB4MTFdID0gS0VZXzAsCisJWzB4MTJdID0gS0VZX0lORk8sCisJWzB4MTNdID0gS0VZX0FHQUlOLAkJLyogQ0ggUlROIC0gY2hhbm5lbCByZXR1cm4gKi8KKwlbMHgxNF0gPSBLRVlfTVVURSwKKwlbMHgxNV0gPSBLRVlfRURJVCwJCS8qIEF1dG9zY2FuICovCisJWzB4MTddID0gS0VZX1NBVkUsCQkvKiBTY3JlZW5zaG90ICovCisJWzB4MThdID0gS0VZX1BMQVlQQVVTRSwKKwlbMHgxOV0gPSBLRVlfUkVDT1JELAorCVsweDFhXSA9IEtFWV9QTEFZLAorCVsweDFiXSA9IEtFWV9TVE9QLAorCVsweDFjXSA9IEtFWV9GQVNURk9SV0FSRCwKKwlbMHgxZF0gPSBLRVlfUkVXSU5ELAorCVsweDFlXSA9IEtFWV9WT0xVTUVET1dOLAorCVsweDFmXSA9IEtFWV9WT0xVTUVVUCwKKwlbMHgyMl0gPSBLRVlfU0xFRVAsCQkvKiBTbGVlcCAqLworCVsweDIzXSA9IEtFWV9aT09NLAkJLyogQXNwZWN0ICovCisJWzB4MjZdID0gS0VZX1NDUkVFTiwJCS8qIFBvcyAqLworCVsweDI3XSA9IEtFWV9BTkdMRSwJCS8qIFNpemUgKi8KKwlbMHgyOF0gPSBLRVlfU0VMRUNULAkJLyogU2VsZWN0ICovCisJWzB4MjldID0gS0VZX0JMVUUsCQkvKiBCbHVlL1BpY3R1cmUgKi8KKwlbMHgyYV0gPSBLRVlfQkFDS1NQQUNFLAkvKiBCYWNrICovCisJWzB4MmJdID0gS0VZX01FRElBLAkJLyogUElQIChQaWN0dXJlLWluLXBpY3R1cmUpICovCisJWzB4MmNdID0gS0VZX0RPV04sCisJWzB4MmVdID0gS0VZX0RPVCwKKwlbMHgyZl0gPSBLRVlfVFYsCQkvKiBMaXZlIFRWICovCisJWzB4MzJdID0gS0VZX0xFRlQsCisJWzB4MzNdID0gS0VZX0NMRUFSLAkJLyogQ2xlYXIgKi8KKwlbMHgzNV0gPSBLRVlfUkVELAkJLyogUmVkL1RWICovCisJWzB4MzZdID0gS0VZX1VQLAorCVsweDM3XSA9IEtFWV9IT01FLAkJLyogSG9tZSAqLworCVsweDM5XSA9IEtFWV9HUkVFTiwJCS8qIEdyZWVuL1ZpZGVvICovCisJWzB4M2RdID0gS0VZX1lFTExPVywJCS8qIFllbGxvdy9NdXNpYyAqLworCVsweDNlXSA9IEtFWV9PSywJCS8qIE9rICovCisJWzB4M2ZdID0gS0VZX1JJR0hULAorCVsweDQwXSA9IEtFWV9ORVhULAkJLyogTmV4dCAqLworCVsweDQxXSA9IEtFWV9QUkVWSU9VUywJLyogUHJldmlvdXMgKi8KKwlbMHg0Ml0gPSBLRVlfQ0hBTk5FTERPV04sCS8qIENoYW5uZWwgZG93biAqLworCVsweDQzXSA9IEtFWV9DSEFOTkVMVVAJLyogQ2hhbm5lbCB1cCAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzKTsKKwogLyogQXR0aWxhIEtvbmRvcm9zIDxhdHRpbGEua29uZG9yb3NAY2hlbGxvLmh1PiAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXBhY192aWV3Y29tcFtJUl9LRVlUQUJfU0laRV0gPSB7CiAKQEAgLTI0NTIsNiArMjUxMSw1NSBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZyk7CiAKKy8qIEthaW9teSBUVm5QQyBVMgorICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2thaW9teVtJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4NDNdID0gS0VZX1BPV0VSMiwKKwlbMHgwMV0gPSBLRVlfTElTVCwKKwlbMHgwYl0gPSBLRVlfWk9PTSwKKwlbMHgwM10gPSBLRVlfUE9XRVIsCisKKwlbMHgwNF0gPSBLRVlfMSwKKwlbMHgwOF0gPSBLRVlfMiwKKwlbMHgwMl0gPSBLRVlfMywKKworCVsweDBmXSA9IEtFWV80LAorCVsweDA1XSA9IEtFWV81LAorCVsweDA2XSA9IEtFWV82LAorCisJWzB4MGNdID0gS0VZXzcsCisJWzB4MGRdID0gS0VZXzgsCisJWzB4MGFdID0gS0VZXzksCisKKwlbMHgxMV0gPSBLRVlfMCwKKworCVsweDA5XSA9IEtFWV9DSEFOTkVMVVAsCisJWzB4MDddID0gS0VZX0NIQU5ORUxET1dOLAorCisJWzB4MGVdID0gS0VZX1ZPTFVNRVVQLAorCVsweDEzXSA9IEtFWV9WT0xVTUVET1dOLAorCisJWzB4MTBdID0gS0VZX0hPTUUsCisJWzB4MTJdID0gS0VZX0VOVEVSLAorCisJWzB4MTRdID0gS0VZX1JFQ09SRCwKKwlbMHgxNV0gPSBLRVlfU1RPUCwKKwlbMHgxNl0gPSBLRVlfUExBWSwKKwlbMHgxN10gPSBLRVlfTVVURSwKKworCVsweDE4XSA9IEtFWV9VUCwKKwlbMHgxOV0gPSBLRVlfRE9XTiwKKwlbMHgxYV0gPSBLRVlfTEVGVCwKKwlbMHgxYl0gPSBLRVlfUklHSFQsCisKKwlbMHgxY10gPSBLRVlfUkVELAorCVsweDFkXSA9IEtFWV9HUkVFTiwKKwlbMHgxZV0gPSBLRVlfWUVMTE9XLAorCVsweDFmXSA9IEtFWV9CTFVFLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2thaW9teSk7CisKIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9hMTZkW0lSX0tFWVRBQl9TSVpFXSA9IHsKIAlbMHgyMF0gPSBLRVlfTElTVCwKIAlbMHgwMF0gPSBLRVlfUE9XRVIsCkBAIC0yNjA0LDMgKzI3MTIsNDEgQEAKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F0aV90dl93b25kZXJfaGRfNjAwKTsKKworLyogRFZCV29ybGQgcmVtb3RlcworICAgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBtZS5ieT4KKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfZG0xMTA1X25lY1tJUl9LRVlUQUJfU0laRV0gPSB7CisJWzB4MGFdID0gS0VZX1EsCQkvKnBvd2VyKi8KKwlbMHgwY10gPSBLRVlfTSwJCS8qbXV0ZSovCisJWzB4MTFdID0gS0VZXzEsCisJWzB4MTJdID0gS0VZXzIsCisJWzB4MTNdID0gS0VZXzMsCisJWzB4MTRdID0gS0VZXzQsCisJWzB4MTVdID0gS0VZXzUsCisJWzB4MTZdID0gS0VZXzYsCisJWzB4MTddID0gS0VZXzcsCisJWzB4MThdID0gS0VZXzgsCisJWzB4MTldID0gS0VZXzksCisJWzB4MTBdID0gS0VZXzAsCisJWzB4MWNdID0gS0VZX1BBR0VVUCwJLypjaCsqLworCVsweDBmXSA9IEtFWV9QQUdFRE9XTiwJLypjaC0qLworCVsweDFhXSA9IEtFWV9PLAkJLyp2b2wrKi8KKwlbMHgwZV0gPSBLRVlfWiwJCS8qdm9sLSovCisJWzB4MDRdID0gS0VZX1IsCQkvKnJlYyovCisJWzB4MDldID0gS0VZX0QsCQkvKmZhdiovCisJWzB4MDhdID0gS0VZX0JBQ0tTUEFDRSwJLypyZXdpbmQqLworCVsweDA3XSA9IEtFWV9BLAkJLypmYXN0Ki8KKwlbMHgwYl0gPSBLRVlfUCwJCS8qcGF1c2UqLworCVsweDAyXSA9IEtFWV9FU0MsCS8qY2FuY2VsKi8KKwlbMHgwM10gPSBLRVlfRywJCS8qdGFiKi8KKwlbMHgwMF0gPSBLRVlfVVAsCS8qdXAqLworCVsweDFmXSA9IEtFWV9FTlRFUiwJLypvayovCisJWzB4MDFdID0gS0VZX0RPV04sCS8qZG93biovCisJWzB4MDVdID0gS0VZX0MsCQkvKmNhcCovCisJWzB4MDZdID0gS0VZX1MsCQkvKnN0b3AqLworCVsweDQwXSA9IEtFWV9GLAkJLypmdWxsKi8KKwlbMHgxZV0gPSBLRVlfVywJCS8qdHZtb2RlKi8KKwlbMHgxYl0gPSBLRVlfQiwJCS8qcmVjYWxsKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19kbTExMDVfbmVjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKaW5kZXggZDU5OWQzNi4uOTgyZjAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMKQEAgLTQ1Miw4ICs0NTIsNiBAQAogCUlORk8oKCJmb3VuZCBzYWE3MTQ2IEAgbWVtICVwIChyZXZpc2lvbiAlZCwgaXJxICVkKSAoMHglMDR4LDB4JTA0eCkuXG4iLCBkZXYtPm1lbSwgZGV2LT5yZXZpc2lvbiwgcGNpLT5pcnEsIHBjaS0+c3Vic3lzdGVtX3ZlbmRvciwgcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSk7CiAJZGV2LT5leHQgPSBleHQ7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpLCBkZXYpOwotCiAJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5pbnRfc2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKQEAgLTQ3Nyw4ICs0NzUsMTIgQEAKIAogCWlmIChleHQtPmF0dGFjaChkZXYsIHBjaV9leHQpKSB7CiAJCURFQl9EKCgiZXh0LT5hdHRhY2goKSBmYWlsZWQgZm9yICVwLiBza2lwcGluZyBkZXZpY2UuXG4iLGRldikpOwotCQlnb3RvIGVycl91bnByb2JlOworCQlnb3RvIGVycl9mcmVlX2kyYzsKIAl9CisJLyogVjRMIGV4dGVuc2lvbnMgd2lsbCBzZXQgdGhlIHBjaSBkcnZkYXRhIHRvIHRoZSB2NGwyX2RldmljZSBpbiB0aGUKKwkgICBhdHRhY2goKSBhYm92ZS4gU28gZm9yIHRob3NlIGNhcmRzIHRoYXQgZG8gbm90IHVzZSBWNEwgd2UgaGF2ZSB0bworCSAgIHNldCBpdCBleHBsaWNpdGx5LiAqLworCXBjaV9zZXRfZHJ2ZGF0YShwY2ksICZkZXYtPnY0bDJfZGV2KTsKIAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPml0ZW0pOwogCWxpc3RfYWRkX3RhaWwoJmRldi0+aXRlbSwmc2FhNzE0Nl9kZXZpY2VzKTsKQEAgLTQ4OCw4ICs0OTAsNiBAQAogb3V0OgogCXJldHVybiBlcnI7CiAKLWVycl91bnByb2JlOgotCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwogZXJyX2ZyZWVfaTJjOgogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGNpLCBTQUE3MTQ2X1JQU19NRU0sIGRldi0+ZF9pMmMuY3B1X2FkZHIsCiAJCQkgICAgZGV2LT5kX2kyYy5kbWFfaGFuZGxlKTsKQEAgLTUxNCw3ICs1MTQsOCBAQAogCiBzdGF0aWMgdm9pZCBzYWE3MTQ2X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IHRvX3NhYTcxNDZfZGV2KHY0bDJfZGV2KTsKIAlzdHJ1Y3QgewogCQl2b2lkICphZGRyOwogCQlkbWFfYWRkcl90IGRtYTsKQEAgLTUyOCw2ICs1MjksOCBAQAogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIAogCWRldi0+ZXh0LT5kZXRhY2goZGV2KTsKKwkvKiBaZXJvIHRoZSBQQ0kgZHJ2ZGF0YSBhZnRlciB1c2UuICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJLyogc2h1dCBkb3duIGFsbCB2aWRlbyBkbWEgdHJhbnNmZXJzICovCiAJc2FhNzE0Nl93cml0ZShkZXYsIE1DMSwgMHgwMGZmMDAwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2ZvcHMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCmluZGV4IGNmMDZmNGQuLjYyMGY2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jCkBAIC0zMDgsMTQgKzMwOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGZvcHNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotLyoKLQlERUJfRUUoKCJmaWxlOiVwLCBjbWQ6JWQsIGFyZzolbGlcbiIsIGZpbGUsIGNtZCwgYXJnKSk7Ci0qLwotCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7Ci19Ci0KIHN0YXRpYyBpbnQgZm9wc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCiB7CiAJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtNDI1LDcgKzQxNyw3IEBACiAJLndyaXRlCQk9IGZvcHNfd3JpdGUsCiAJLnBvbGwJCT0gZm9wc19wb2xsLAogCS5tbWFwCQk9IGZvcHNfbW1hcCwKLQkuaW9jdGwJCT0gZm9wc19pb2N0bCwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIAogc3RhdGljIHZvaWQgdnZfY2FsbGJhY2soc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgc3RhdHVzKQpAQCAtNDUyLDE5ICs0NDQsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGRldmljZV90ZW1wbGF0ZSA9Ci17Ci0JLmZvcHMJCT0gJnZpZGVvX2ZvcHMsCi0JLm1pbm9yCQk9IC0xLAotfTsKLQogaW50IHNhYTcxNDZfdnZfaW5pdChzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiwgc3RydWN0IHNhYTcxNDZfZXh0X3Z2ICpleHRfdnYpCiB7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0ga3phbGxvYyAoc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3Z2KSxHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSB2diApIHsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnY7CisJaW50IGVycjsKKworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPnBjaS0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodnYgPT0gTlVMTCkgewogCQlFUlIoKCJvdXQgb2YgbWVtb3J5LiBhYm9ydGluZy5cbiIpKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJZXh0X3Z2LT5vcHMgPSBzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wczsKKwlleHRfdnYtPmNvcmVfb3BzID0gJnNhYTcxNDZfdmlkZW9faW9jdGxfb3BzOwogCiAJREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwogCkBAIC01MDcsNiArNTAyLDcgQEAKIAogCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wY2ksIFNBQTcxNDZfQ0xJUFBJTkdfTUVNLCB2di0+ZF9jbGlwcGluZy5jcHVfYWRkciwgdnYtPmRfY2xpcHBpbmcuZG1hX2hhbmRsZSk7CiAJa2ZyZWUodnYpOwogCWRldi0+dnZfZGF0YSA9IE5VTEw7CkBAIC01MjEsNiArNTE3LDggQEAKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCWludCBlcnI7CisJaW50IGk7CiAKIAlERUJfRUUoKCJkZXY6JXAsIG5hbWU6JyVzJywgdHlwZTolZFxuIixkZXYsbmFtZSx0eXBlKSk7CiAKQEAgLTUyOSwxNiArNTI3LDIwIEBACiAJaWYgKHZmZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweSh2ZmQsICZkZXZpY2VfdGVtcGxhdGUsIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0Jc3RybGNweSh2ZmQtPm5hbWUsIG5hbWUsIHNpemVvZih2ZmQtPm5hbWUpKTsKKwl2ZmQtPmZvcHMgPSAmdmlkZW9fZm9wczsKKwl2ZmQtPmlvY3RsX29wcyA9ICZkZXYtPmV4dF92dl9kYXRhLT5vcHM7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmZkLT50dm5vcm1zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKKwkJdmZkLT50dm5vcm1zIHw9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQ7CisJc3RybGNweSh2ZmQtPm5hbWUsIG5hbWUsIHNpemVvZih2ZmQtPm5hbWUpKTsKIAl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CiAKLQkvLyBmaXhtZTogLTEgc2hvdWxkIGJlIGFuIGluc21vZCBwYXJhbWV0ZXIgKmZvciB0aGUgZXh0ZW5zaW9uKiAobGlrZSAidmlkZW9fbnIiKTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgdHlwZSwgLTEpIDwgMCkgeworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIHR5cGUsIC0xKTsKKwlpZiAoZXJyIDwgMCkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBlcnI7CiAJfQogCiAJaWYoIFZGTF9UWVBFX0dSQUJCRVIgPT0gdHlwZSApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCmluZGV4IGMxMWRhNGQuLjdlOGY1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYwpAQCAtMjkzLDcgKzI5Myw2IEBACiAJaW50IGkgPSAwLCBjb3VudCA9IDA7CiAJX19sZTMyICpidWZmZXIgPSBkZXYtPmRfaTJjLmNwdV9hZGRyOwogCWludCBlcnIgPSAwOwotCWludCBhZGRyZXNzX2VyciA9IDA7CiAJaW50IHNob3J0X2RlbGF5ID0gMDsKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+aTJjX2xvY2spKQpAQCAtMzMzLDE3ICszMzIsMTAgQEAKIAkJCQkgICBpMmMgYWRkcmVzcyBwcm9iaW5nLCBob3dldmVyLCBhbmQgYWRkcmVzcyBlcnJvcnMgaW5kaWNhdGUgdGhhdCBhCiAJCQkJICAgZGV2aWNlIGlzIHJlYWxseSAqbm90KiB0aGVyZS4gcmV0cnlpbmcgaW4gdGhhdCBjYXNlCiAJCQkJICAgaW5jcmVhc2VzIHRoZSB0aW1lIHRoZSBkZXZpY2UgbmVlZHMgdG8gcHJvYmUgZ3JlYXRseSwgc28KLQkJCQkgICBpdCBzaG91bGQgYmUgYXZvaWRlZC4gYmVjYXVzZSBvZiB0aGUgZmFjdCwgdGhhdCBvbmx5Ci0JCQkJICAgYW5hbG9nIGJhc2VkIGNhcmRzIHVzZSBpcnEgYmFzZWQgaTJjIHRyYW5zYWN0aW9ucyAoZm9yIGR2YgotCQkJCSAgIGNhcmRzLCB0aGlzIHNjcmV3ZXMgdXAgb3RoZXIgaW50ZXJydXB0IHNvdXJjZXMpLCB3ZSBiYWlsIG91dAotCQkJCSAgIGNvbXBsZXRlbHkgZm9yIGFuYWxvZyBjYXJkcyBhZnRlciBhbiBhZGRyZXNzIGVycm9yIGFuZCB0cnVzdAotCQkJCSAgIHRoZSBzYWE3MTQ2IGFkZHJlc3MgZXJyb3IgZGV0ZWN0aW9uLiAqLwotCQkJCWlmICggLUVSRU1PVEVJTyA9PSBlcnIgKSB7Ci0JCQkJCWlmKCAwICE9IChTQUE3MTQ2X1VTRV9JMkNfSVJRICYgZGV2LT5leHQtPmZsYWdzKSkgewotCQkJCQkJZ290byBvdXQ7Ci0JCQkJCX0KLQkJCQkJYWRkcmVzc19lcnIrKzsKLQkJCQl9CisJCQkJICAgaXQgc2hvdWxkIGJlIGF2b2lkZWQuIFNvIHdlIGJhaWwgb3V0IGluIGlycSBtb2RlIGFmdGVyIGFuCisJCQkJICAgYWRkcmVzcyBlcnJvciBhbmQgdHJ1c3QgdGhlIHNhYTcxNDYgYWRkcmVzcyBlcnJvciBkZXRlY3Rpb24uICovCisJCQkJaWYgKC1FUkVNT1RFSU8gPT0gZXJyICYmIDAgIT0gKFNBQTcxNDZfVVNFX0kyQ19JUlEgJiBkZXYtPmV4dC0+ZmxhZ3MpKQorCQkJCQlnb3RvIG91dDsKIAkJCQlERUJfSTJDKCgiZXJyb3Igd2hpbGUgc2VuZGluZyBtZXNzYWdlKHMpLiBzdGFydGluZyBhZ2Fpbi5cbiIpKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM1OCwxMCArMzUwLDkgQEAKIAogCX0gd2hpbGUgKGVyciAhPSBudW0gJiYgcmV0cmllcy0tKTsKIAotCS8qIGlmIGV2ZXJ5IHJldHJ5IGhhZCBhbiBhZGRyZXNzIGVycm9yLCBleGl0IHJpZ2h0IGF3YXkgKi8KLQlpZiAoYWRkcmVzc19lcnIgPT0gcmV0cmllcykgeworCS8qIHF1aXQgaWYgYW55IGVycm9yIG9jY3VycmVkICovCisJaWYgKGVyciAhPSBudW0pCiAJCWdvdG8gb3V0OwotCX0KIAogCS8qIGlmIGFueSB0aGluZ3MgaGFkIHRvIGJlIHJlYWQsIGdldCB0aGUgcmVzdWx0cyAqLwogCWlmICggMCAhPSBzYWE3MTQ2X2kyY19tc2dfY2xlYW51cChtc2dzLCBudW0sIGJ1ZmZlcikpIHsKQEAgLTM5MCw3ICszODEsOCBAQAogLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgc2FhNzE0Nl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2csIGludCBudW0pCiB7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gdG9fc2FhNzE0Nl9kZXYodjRsMl9kZXYpOwogCiAJLyogdXNlIGhlbHBlciBmdW5jdGlvbiB0byB0cmFuc2ZlciBkYXRhICovCiAJcmV0dXJuIHNhYTcxNDZfaTJjX3RyYW5zZmVyKGRldiwgbXNnLCBudW0sIGFkYXB0ZXItPnJldHJpZXMpOwpAQCAtNDE3LDkgKzQwOSw4IEBACiAJZGV2LT5pMmNfYml0cmF0ZSA9IGJpdHJhdGU7CiAJc2FhNzE0Nl9pMmNfcmVzZXQoZGV2KTsKIAotCWlmKCBOVUxMICE9IGkyY19hZGFwdGVyICkgewotCQlCVUdfT04oIWkyY19hZGFwdGVyLT5jbGFzcyk7Ci0JCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIsZGV2KTsKKwlpZiAoaTJjX2FkYXB0ZXIpIHsKKwkJaTJjX3NldF9hZGFwZGF0YShpMmNfYWRhcHRlciwgJmRldi0+djRsMl9kZXYpOwogCQlpMmNfYWRhcHRlci0+ZGV2LnBhcmVudCAgICA9ICZkZXYtPnBjaS0+ZGV2OwogCQlpMmNfYWRhcHRlci0+YWxnbwkgICA9ICZzYWE3MTQ2X2FsZ287CiAJCWkyY19hZGFwdGVyLT5hbGdvX2RhdGEgICAgID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYwppbmRleCA0N2ZlZTA1Li41NTJkYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxNDZfdnYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KIAogc3RhdGljIGludCBtYXhfbWVtb3J5ID0gMzI7CiAKQEAgLTk3LDE3MiArOTgsMTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBnX2ZtdChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JREVCX0VFKCgiZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlmLT5mbXQucGl4ID0gZmgtPnZpZGVvX2ZtdDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCWYtPmZtdC53aW4gPSBmaC0+b3Yud2luOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JewotCQlmLT5mbXQudmJpID0gZmgtPnZiaV9mbXQ7Ci0JCXJldHVybiAwOwotCX0KLQlkZWZhdWx0OgotCQlERUJfRCgoImludmFsaWQgZm9ybWF0IHR5cGUgJyVkJy5cbiIsZi0+dHlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgdHJ5X3dpbihzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHY0bDJfd2luZG93ICp3aW4pCi17Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKLQlpbnQgbWF4dywgbWF4aDsKLQotCURFQl9FRSgoImRldjolcFxuIixkZXYpKTsKLQotCWlmIChOVUxMID09IHZ2LT5vdl9mYi5iYXNlKSB7Ci0JCURFQl9EKCgibm8gZmIgYmFzZSBzZXQuXG4iKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoTlVMTCA9PSB2di0+b3ZfZm10KSB7Ci0JCURFQl9EKCgibm8gZmIgZm10IHNldC5cbiIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh3aW4tPncud2lkdGggPCA0OCB8fCB3aW4tPncuaGVpZ2h0IDwgIDMyKSB7Ci0JCURFQl9EKCgibWluIHdpZHRoL2hlaWdodC4gKCVkLCVkKVxuIix3aW4tPncud2lkdGgsd2luLT53LmhlaWdodCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHdpbi0+Y2xpcGNvdW50ID4gMTYpIHsKLQkJREVCX0QoKCJjbGlwY291bnQgdG9vIGJpZy5cbiIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmllbGQgPSB3aW4tPmZpZWxkOwotCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7Ci0JbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKLQotCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgewotCQlmaWVsZCA9ICh3aW4tPncuaGVpZ2h0ID4gbWF4aC8yKQotCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKLQkJCTogVjRMMl9GSUVMRF9UT1A7Ci0JCX0KLQlzd2l0Y2ggKGZpZWxkKSB7Ci0JY2FzZSBWNEwyX0ZJRUxEX1RPUDoKLQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgotCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6Ci0JCW1heGggPSBtYXhoIC8gMjsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IHsKLQkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLGZpZWxkKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl9Ci0KLQl3aW4tPmZpZWxkID0gZmllbGQ7Ci0JaWYgKHdpbi0+dy53aWR0aCA+IG1heHcpCi0JCXdpbi0+dy53aWR0aCA9IG1heHc7Ci0JaWYgKHdpbi0+dy5oZWlnaHQgPiBtYXhoKQotCQl3aW4tPncuaGVpZ2h0ID0gbWF4aDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRyeV9mbXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JewotCQlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKLQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCQlpbnQgbWF4dywgbWF4aDsKLQkJaW50IGNhbGNfYnBsOwotCi0JCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKLQotCQlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldixmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQkJaWYgKE5VTEwgPT0gZm10KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKLQkJbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKLQkJbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKLQotCQlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKLQkJCWZpZWxkID0gKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aC8yKQotCQkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECi0JCQkJOiBWNEwyX0ZJRUxEX0JPVFRPTTsKLQkJfQotCQlzd2l0Y2ggKGZpZWxkKSB7Ci0JCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6IHsKLQkJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9UT1A7Ci0JCQltYXhoID0gbWF4aCAvIDI7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIFY0TDJfRklFTERfVE9QOgotCQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgotCQkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQltYXhoID0gbWF4aCAvIDI7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiB7Ci0JCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsZmllbGQpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCX0KLQotCQlmLT5mbXQucGl4LmZpZWxkID0gZmllbGQ7Ci0JCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKLQkJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OwotCQlpZiAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoKQotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSBtYXhoOwotCi0JCWNhbGNfYnBsID0gKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKS84OwotCi0JCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA8IGNhbGNfYnBsKQotCQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKLQotCQlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPiAoMipQQUdFX1NJWkUgKiBmbXQtPmRlcHRoKS84KSAvKiBhcmJpdHJhcnkgY29uc3RyYWludCAqLwotCQkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKLQotCQlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lICogZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JCURFQl9EKCgidzolZCwgaDolZCwgYnl0ZXNwZXJsaW5lOiVkLCBzaXplaW1hZ2U6JWRcbiIsZi0+Zm10LnBpeC53aWR0aCxmLT5mbXQucGl4LmhlaWdodCxmLT5mbXQucGl4LmJ5dGVzcGVybGluZSxmLT5mbXQucGl4LnNpemVpbWFnZSkpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQllcnIgPSB0cnlfd2luKGRldiwmZi0+Zm10Lndpbik7Ci0JCWlmICgwICE9IGVycikgewotCQkJcmV0dXJuIGVycjsKLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlERUJfRUUoKCJ1bmtub3duIGZvcm1hdCB0eXBlICclZCdcbiIsZi0+dHlwZSkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19CitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKTsKIAogaW50IHNhYTcxNDZfc3RhcnRfcHJldmlldyhzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgpCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwogCWludCByZXQgPSAwLCBlcnIgPSAwOwogCiAJREVCX0VFKCgiZGV2OiVwLCBmaDolcFxuIixkZXYsZmgpKTsKQEAgLTI5NCwxMiArMTM2LDEzIEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZXJyID0gdHJ5X3dpbihkZXYsJmZoLT5vdi53aW4pOworCWZtdC5mbXQud2luID0gZmgtPm92LndpbjsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheShOVUxMLCBmaCwgJmZtdCk7CiAJaWYgKDAgIT0gZXJyKSB7CiAJCXNhYTcxNDZfcmVzX2ZyZWUodnYtPnZpZGVvX2ZoLCBSRVNPVVJDRV9ETUExX0hQU3xSRVNPVVJDRV9ETUEyX0NMUCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCisJZmgtPm92LndpbiA9IGZtdC5mbXQud2luOwogCXZ2LT5vdl9kYXRhID0gJmZoLT5vdjsKIAogCURFQl9EKCgiJWR4JWQrJWQrJWQgJXMgZmllbGQ9JXNcbiIsCkBAIC0zNTUsNTggKzE5OCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzYWE3MTQ2X3N0b3BfcHJldmlldyk7CiAKLXN0YXRpYyBpbnQgc19mbXQoc3RydWN0IHNhYTcxNDZfZmggKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWludCBlcnI7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCURFQl9FRSgoInN0cmVhbWluZyBjYXB0dXJlIGlzIGFjdGl2ZVxuIikpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCQllcnIgPSB0cnlfZm10KGZoLGYpOwotCQlpZiAoMCAhPSBlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlmaC0+dmlkZW9fZm10ID0gZi0+Zm10LnBpeDsKLQkJREVCX0VFKCgic2V0IHRvIHBpeGVsZm9ybWF0ICclNC40cydcbiIsKGNoYXIgKikmZmgtPnZpZGVvX2ZtdC5waXhlbGZvcm1hdCkpOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCQllcnIgPSB0cnlfd2luKGRldiwmZi0+Zm10Lndpbik7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JCWZoLT5vdi53aW4gICAgPSBmLT5mbXQud2luOwotCQlmaC0+b3YubmNsaXBzID0gZi0+Zm10Lndpbi5jbGlwY291bnQ7Ci0JCWlmIChmaC0+b3YubmNsaXBzID4gMTYpCi0JCQlmaC0+b3YubmNsaXBzID0gMTY7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihmaC0+b3YuY2xpcHMsZi0+Zm10Lndpbi5jbGlwcyxzaXplb2Yoc3RydWN0IHY0bDJfY2xpcCkqZmgtPm92Lm5jbGlwcykpIHsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJLyogZmgtPm92LmZoIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHZhbGlkIG92ZXJsYXkgaW5mb3JtYXRpb25zLCB0b28gKi8KLQkJZmgtPm92LmZoID0gZmg7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JCS8qIGNoZWNrIGlmIG91ciBjdXJyZW50IG92ZXJsYXkgaXMgYWN0aXZlICovCi0JCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwotCQkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlERUJfRCgoInVua25vd24gZm9ybWF0IHR5cGUgJyVkJ1xuIixmLT50eXBlKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZGV2aWNlIGNvbnRyb2xzICovCiAKQEAgLTQxOSw2ICsyMTAsNyBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDEyOCwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLmZsYWdzIAkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSx7CiAJCS5pZAkJPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLm5hbWUJCT0gIkNvbnRyYXN0IiwKQEAgLTQyNyw2ICsyMTksNyBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDY0LAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkuZmxhZ3MgCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCiAJCS5uYW1lCQk9ICJTYXR1cmF0aW9uIiwKQEAgLTQzNSwxNSArMjI4LDE2IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gNjQsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5mbGFncyAJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sewogCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCi0JCS5uYW1lCQk9ICJWZXJ0aWNhbCBmbGlwIiwKKwkJLm5hbWUJCT0gIlZlcnRpY2FsIEZsaXAiLAogCQkubWluaW11bQk9IDAsCiAJCS5tYXhpbXVtCT0gMSwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAotCQkubmFtZQkJPSAiSG9yaXpvbnRhbCBmbGlwIiwKKwkJLm5hbWUJCT0gIkhvcml6b250YWwgRmxpcCIsCiAJCS5taW5pbXVtCT0gMCwKIAkJLm1heGltdW0JPSAxLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLApAQCAtNDYzLDEzMiArMjU3LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBnZXRfY29udHJvbChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCogY3RybDsKLQl1MzIgdmFsdWUgPSAwOwotCi0JY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOwotCWlmIChOVUxMID09IGN0cmwpCi0JCXJldHVybiAtRUlOVkFMOwotCXN3aXRjaCAoYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4ZmYgJiAodmFsdWUgPj4gMjQpOwotCQlERUJfRCgoIlY0TDJfQ0lEX0JSSUdIVE5FU1M6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMTYpOwotCQlERUJfRCgoIlY0TDJfQ0lEX0NPTlRSQVNUOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMCk7Ci0JCURFQl9EKCgiVjRMMl9DSURfU0FUVVJBVElPTjogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJYy0+dmFsdWUgPSB2di0+dmZsaXA7Ci0JCURFQl9EKCgiVjRMMl9DSURfVkZMSVA6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfSEZMSVA6Ci0JCWMtPnZhbHVlID0gdnYtPmhmbGlwOwotCQlERUJfRCgoIlY0TDJfQ0lEX0hGTElQOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZXRfY29udHJvbChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKLQotCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCogY3RybDsKLQotCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKLQlpZiAoTlVMTCA9PSBjdHJsKSB7Ci0JCURFQl9EKCgidW5rbm93biBjb250cm9sICVkXG4iLGMtPmlkKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46Ci0JY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgotCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKLQkJaWYgKGMtPnZhbHVlIDwgY3RybC0+bWluaW11bSkKLQkJCWMtPnZhbHVlID0gY3RybC0+bWluaW11bTsKLQkJaWYgKGMtPnZhbHVlID4gY3RybC0+bWF4aW11bSkKLQkJCWMtPnZhbHVlID0gY3RybC0+bWF4aW11bTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLzsKLQl9OwotCi0Jc3dpdGNoIChjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogewotCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCXZhbHVlICY9IDB4MDBmZmZmZmY7Ci0JCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAyNCk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNiApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogewotCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCXZhbHVlICY9IDB4ZmYwMGZmZmY7Ci0JCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAxNik7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNiApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7Ci0JCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJdmFsdWUgJj0gMHhmZmZmZmYwMDsKLQkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDApOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYgKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9DSURfSEZMSVA6Ci0JCS8qIGZpeG1lOiB3ZSBjYW4gc3VwcG9ydCBjaGFuZ2luZyBWRkxJUCBhbmQgSEZMSVAgaGVyZS4uLiAqLwotCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCURFQl9EKCgiVjRMMl9DSURfSEZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2di0+aGZsaXAgPSBjLT52YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdnYtPnZmbGlwID0gYy0+dmFsdWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6IHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7Ci0JCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjb21tb24gcGFnZXRhYmxlIGZ1bmN0aW9ucyAqLwogCkBAIC04MjksMjMxICs0OTcsNDQ2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIF9ub3RfIGNhbGxlZCBkaXJlY3RseSwgYnV0IGZyb20KLSAqIHZpZGVvX2dlbmVyaWNfaW9jdGwgKGFuZCBtYXliZSBvdGhlcnMpLiAgdXNlcnNwYWNlCi0gKiBjb3B5aW5nIGlzIGRvbmUgYWxyZWFkeSwgYXJnIGlzIGEga2VybmVsIHBvaW50ZXIuCi0gKi8KLQotbG9uZyBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKworCXN0cmNweSgoY2hhciAqKWNhcC0+ZHJpdmVyLCAic2FhNzE0NiB2NGwyIik7CisJc3RybGNweSgoY2hhciAqKWNhcC0+Y2FyZCwgZGV2LT5leHQtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlzcHJpbnRmKChjaGFyICopY2FwLT5idXNfaW5mbywgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7CisJY2FwLT52ZXJzaW9uID0gU0FBNzE0Nl9WRVJTSU9OX0NPREU7CisJY2FwLT5jYXBhYmlsaXRpZXMgPQorCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8CisJCVY0TDJfQ0FQX1JFQURXUklURSB8CisJCVY0TDJfQ0FQX1NUUkVBTUlORzsKKwljYXAtPmNhcGFiaWxpdGllcyB8PSBkZXYtPmV4dF92dl9kYXRhLT5jYXBhYmlsaXRpZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKIAlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CiAKLQlsb25nIGVyciA9IDA7Ci0JaW50IHJlc3VsdCA9IDAsIGVlID0gMDsKKwkqZmIgPSB2di0+b3ZfZmI7CisJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7CisJcmV0dXJuIDA7Cit9CiAKLQlzdHJ1Y3Qgc2FhNzE0Nl91c2Vfb3BzICpvcHM7Ci0Jc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxOworc3RhdGljIGludCB2aWRpb2Nfc19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKIAotCS8qIGNoZWNrIGlmIGV4dGVuc2lvbiBoYW5kbGVzIHRoZSBjb21tYW5kICovCi0JZm9yKGVlID0gMDsgZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5mbGFncyAhPSAwOyBlZSsrKSB7Ci0JCWlmKCBjbWQgPT0gZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5jbWQgKQotCQkJYnJlYWs7Ci0JfQorCURFQl9FRSgoIlZJRElPQ19TX0ZCVUZcbiIpKTsKIAotCWlmKCAwICE9IChkZXYtPmV4dF92dl9kYXRhLT5pb2N0bHNbZWVdLmZsYWdzICYgU0FBNzE0Nl9FWENMVVNJVkUpICkgewotCQlERUJfRCgoImV4dGVuc2lvbiBoYW5kbGVzIGlvY3RsIGV4Y2x1c2l2ZS5cbiIpKTsKLQkJcmVzdWx0ID0gZGV2LT5leHRfdnZfZGF0YS0+aW9jdGwoZmgsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0JaWYoIDAgIT0gKGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3Rsc1tlZV0uZmxhZ3MgJiBTQUE3MTQ2X0JFRk9SRSkgKSB7Ci0JCURFQl9EKCgiZXh0ZW5zaW9uIGhhbmRsZXMgaW9jdGwgYmVmb3JlLlxuIikpOwotCQlyZXN1bHQgPSBkZXYtPmV4dF92dl9kYXRhLT5pb2N0bChmaCwgY21kLCBhcmcpOwotCQlpZiggLUVBR0FJTiAhPSByZXN1bHQgKSB7Ci0JCQlyZXR1cm4gcmVzdWx0OworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCS8qIGNoZWNrIGFyZ3MgKi8KKwlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGRldiwgZmItPmZtdC5waXhlbGZvcm1hdCk7CisJaWYgKE5VTEwgPT0gZm10KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHBsYW5hciBmb3JtYXRzIGFyZSBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheSB2aWRlbywgY2xpcHBpbmcgYW5kIHZpZGVvIGRtYSB3b3VsZCBjbGFzaCAqLworCWlmIChmbXQtPmZsYWdzICYgRk9STUFUX0lTX1BMQU5BUikKKwkJREVCX1MoKCJwbGFuYXIgcGl4ZWxmb3JtYXQgJyU0LjRzJyBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheVxuIiwKKwkJCQkJKGNoYXIgKikmZm10LT5waXhlbGZvcm1hdCkpOworCisJLyogY2hlY2sgaWYgb3ZlcmxheSBpcyBydW5uaW5nICovCisJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CisJCWlmICh2di0+dmlkZW9fZmggIT0gZmgpIHsKKwkJCURFQl9EKCgicmVmdXNpbmcgdG8gY2hhbmdlIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9ucyB3aGlsZSBvdmVybGF5IGlzIGFjdGl2ZSBpbiBhbm90aGVyIG9wZW4uXG4iKSk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQogCi0JLyogZml4bWU6IGFkZCBoYW5kbGUgImFmdGVyIiBjYXNlIChpcyBpdCBzdGlsbCBuZWVkZWQ/KSAqLworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlzd2l0Y2ggKGZoLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJb3BzID0gJnNhYTcxNDZfdmlkZW9fdW9wczsKLQkJcSA9ICZmaC0+dmlkZW9fcTsKKwkvKiBvaywgYWNjZXB0IGl0ICovCisJdnYtPm92X2ZiID0gKmZiOworCXZ2LT5vdl9mbXQgPSBmbXQ7CisJaWYgKDAgPT0gdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUpCisJCXZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lID0KKwkJCXZ2LT5vdl9mYi5mbXQud2lkdGggKiBmbXQtPmRlcHRoIC8gODsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKGYtPmluZGV4ID49IE5VTV9GT1JNQVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJsY3B5KChjaGFyICopZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbZi0+aW5kZXhdLm5hbWUsCisJCQlzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbZi0+aW5kZXhdLnBpeGVsZm9ybWF0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCit7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJaWYgKChjLT5pZCA8ICBWNEwyX0NJRF9CQVNFIHx8CisJICAgICBjLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpICYmCisJICAgIChjLT5pZCA8ICBWNEwyX0NJRF9QUklWQVRFX0JBU0UgfHwKKwkgICAgIGMtPmlkID49IFY0TDJfQ0lEX1BSSVZBVEVfTEFTVFAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7CisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlERUJfRUUoKCJWSURJT0NfUVVFUllDVFJMOiBpZDolZFxuIiwgYy0+aWQpKTsKKwkqYyA9ICpjdHJsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7CisJdTMyIHZhbHVlID0gMDsKKworCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKKwlpZiAoTlVMTCA9PSBjdHJsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKGMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJYy0+dmFsdWUgPSAweGZmICYgKHZhbHVlID4+IDI0KTsKKwkJREVCX0QoKCJWNEwyX0NJRF9CUklHSFRORVNTOiAlZFxuIiwgYy0+dmFsdWUpKTsKIAkJYnJlYWs7Ci0JCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6IHsKLQkJb3BzID0gJnNhYTcxNDZfdmJpX3VvcHM7Ci0JCXEgPSAmZmgtPnZiaV9xOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMTYpOworCQlERUJfRCgoIlY0TDJfQ0lEX0NPTlRSQVNUOiAlZFxuIiwgYy0+dmFsdWUpKTsKIAkJYnJlYWs7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQljLT52YWx1ZSA9IDB4N2YgJiAodmFsdWUgPj4gMCk7CisJCURFQl9EKCgiVjRMMl9DSURfU0FUVVJBVElPTjogJWRcbiIsIGMtPnZhbHVlKSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWMtPnZhbHVlID0gdnYtPnZmbGlwOworCQlERUJfRCgoIlY0TDJfQ0lEX1ZGTElQOiAlZFxuIiwgYy0+dmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJYy0+dmFsdWUgPSB2di0+aGZsaXA7CisJCURFQl9EKCgiVjRMMl9DSURfSEZMSVA6ICVkXG4iLCBjLT52YWx1ZSkpOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOworCisJY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOworCWlmIChOVUxMID09IGN0cmwpIHsKKwkJREVCX0QoKCJ1bmtub3duIGNvbnRyb2wgJWRcbiIsIGMtPmlkKSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfUVVFUllDQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0JCW1lbXNldChjYXAsMCxzaXplb2YoKmNhcCkpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQkJREVCX0VFKCgiVklESU9DX1FVRVJZQ0FQXG4iKSk7Ci0KLQkJc3RyY3B5KChjaGFyICopY2FwLT5kcml2ZXIsICJzYWE3MTQ2IHY0bDIiKTsKLQkJc3RybGNweSgoY2hhciAqKWNhcC0+Y2FyZCwgZGV2LT5leHQtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKLQkJc3ByaW50ZigoY2hhciAqKWNhcC0+YnVzX2luZm8sIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGNpKSk7Ci0JCWNhcC0+dmVyc2lvbiA9IFNBQTcxNDZfVkVSU0lPTl9DT0RFOwotCQljYXAtPmNhcGFiaWxpdGllcyA9Ci0JCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKLQkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgfAotCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKLQkJCVY0TDJfQ0FQX1NUUkVBTUlORzsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gZGV2LT5leHRfdnZfZGF0YS0+Y2FwYWJpbGl0aWVzOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU46CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJaWYgKGMtPnZhbHVlIDwgY3RybC0+bWluaW11bSkKKwkJCWMtPnZhbHVlID0gY3RybC0+bWluaW11bTsKKwkJaWYgKGMtPnZhbHVlID4gY3RybC0+bWF4aW11bSkKKwkJCWMtPnZhbHVlID0gY3RybC0+bWF4aW11bTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogbm90aGluZyAqLzsKIAl9Ci0JY2FzZSBWSURJT0NfR19GQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwogCi0JCURFQl9FRSgoIlZJRElPQ19HX0ZCVUZcbiIpKTsKLQotCQkqZmIgPSB2di0+b3ZfZmI7Ci0JCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiB7CisJCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJdmFsdWUgJj0gMHgwMGZmZmZmZjsKKwkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDI0KTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2KTsKKwkJYnJlYWs7CiAJfQotCWNhc2UgVklESU9DX1NfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpmbXQ7Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfRkJVRlxuIikpOwotCi0JCWlmKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmCi0JCSAgICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCQkvKiBjaGVjayBhcmdzICovCi0JCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LGZiLT5mbXQucGl4ZWxmb3JtYXQpOwotCQlpZiAoTlVMTCA9PSBmbXQpIHsKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQl2YWx1ZSAmPSAweGZmMDBmZmZmOworCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMTYpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7CisJCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKKwkJdmFsdWUgJj0gMHhmZmZmZmYwMDsKKwkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDApOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJLyogZml4bWU6IHdlIGNhbiBzdXBwb3J0IGNoYW5naW5nIFZGTElQIGFuZCBIRkxJUCBoZXJlLi4uICovCisJCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgeworCQkJREVCX0QoKCJWNEwyX0NJRF9IRkxJUCB3aGlsZSBhY3RpdmUgY2FwdHVyZS5cbiIpKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQotCQkvKiBwbGFuYXIgZm9ybWF0cyBhcmUgbm90IGFsbG93ZWQgZm9yIG92ZXJsYXkgdmlkZW8sIGNsaXBwaW5nIGFuZCB2aWRlbyBkbWEgd291bGQgY2xhc2ggKi8KLQkJaWYgKDAgIT0gKGZtdC0+ZmxhZ3MgJiBGT1JNQVRfSVNfUExBTkFSKSkgewotCQkJREVCX1MoKCJwbGFuYXIgcGl4ZWxmb3JtYXQgJyU0LjRzJyBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheVxuIiwoY2hhciAqKSZmbXQtPnBpeGVsZm9ybWF0KSk7CisJCXZ2LT5oZmxpcCA9IGMtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJCURFQl9EKCgiVjRMMl9DSURfVkZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7CisJCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0KLQkJLyogY2hlY2sgaWYgb3ZlcmxheSBpcyBydW5uaW5nICovCi0JCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgewotCQkJaWYgKHZ2LT52aWRlb19maCAhPSBmaCkgewotCQkJCURFQl9EKCgicmVmdXNpbmcgdG8gY2hhbmdlIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9ucyB3aGlsZSBvdmVybGF5IGlzIGFjdGl2ZSBpbiBhbm90aGVyIG9wZW4uXG4iKSk7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQkJfQotCi0JCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0KLQkJLyogb2ssIGFjY2VwdCBpdCAqLwotCQl2di0+b3ZfZmIgPSAqZmI7Ci0JCXZ2LT5vdl9mbXQgPSBmbXQ7Ci0JCWlmICgwID09IHZ2LT5vdl9mYi5mbXQuYnl0ZXNwZXJsaW5lKQotCQkJdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUgPQotCQkJCXZ2LT5vdl9mYi5mbXQud2lkdGgqZm10LT5kZXB0aC84OwotCisJCXZ2LT52ZmxpcCA9IGMtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgogCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYgPSBhcmc7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCi0JCXN3aXRjaCAoZi0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlpZiAoZi0+aW5kZXggPj0gTlVNX0ZPUk1BVFMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlzdHJsY3B5KChjaGFyICopZi0+ZGVzY3JpcHRpb24sIGZvcm1hdHNbZi0+aW5kZXhdLm5hbWUsCi0JCQkJCXNpemVvZihmLT5kZXNjcmlwdGlvbikpOwotCQkJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2YtPmluZGV4XS5waXhlbGZvcm1hdDsKLQkJCWYtPmZsYWdzID0gMDsKLQkJCW1lbXNldChmLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKGYtPnJlc2VydmVkKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChJU19PVkVSTEFZX0FDVElWRShmaCkgIT0gMCkgeworCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7CisJCXNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKworCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IDE7CisJdjRsMl92aWRlb19zdGRfZnJhbWVfcGVyaW9kKHZ2LT5zdGFuZGFyZC0+aWQsCisJCQkJICAgICZwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlmLT5mbXQucGl4ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+dmlkZW9fZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlmLT5mbXQud2luID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+b3Yud2luOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWYtPmZtdC52YmkgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT52YmlfZm10OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdCAqZm10OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgbWF4dywgbWF4aDsKKwlpbnQgY2FsY19icGw7CisKKwlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IGRldjolcCwgZmg6JXBcbiIsIGRldiwgZmgpKTsKKworCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LCBmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSBmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCW1heHcgID0gdnYtPnN0YW5kYXJkLT5oX21heF9vdXQ7CisJbWF4aCAgPSB2di0+c3RhbmRhcmQtPnZfbWF4X291dDsKKworCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCQlmaWVsZCA9IChmLT5mbXQucGl4LmhlaWdodCA+IG1heGggLyAyKQorCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKKwkJCTogVjRMMl9GSUVMRF9CT1RUT007CisJfQorCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOgorCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfVE9QOworCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6CisJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsIGZpZWxkKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKKwlpZiAoZi0+Zm10LnBpeC53aWR0aCA+IG1heHcpCisJCWYtPmZtdC5waXgud2lkdGggPSBtYXh3OworCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCisJCWYtPmZtdC5waXguaGVpZ2h0ID0gbWF4aDsKKworCWNhbGNfYnBsID0gKGYtPmZtdC5waXgud2lkdGggKiBmbXQtPmRlcHRoKSAvIDg7CisKKwlpZiAoZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPCBjYWxjX2JwbCkKKwkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBjYWxjX2JwbDsKKworCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA+ICgyICogUEFHRV9TSVpFICogZm10LT5kZXB0aCkgLyA4KSAvKiBhcmJpdHJhcnkgY29uc3RyYWludCAqLworCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNhbGNfYnBsOworCisJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmJ5dGVzcGVybGluZSAqIGYtPmZtdC5waXguaGVpZ2h0OworCURFQl9EKCgidzolZCwgaDolZCwgYnl0ZXNwZXJsaW5lOiVkLCBzaXplaW1hZ2U6JWRcbiIsIGYtPmZtdC5waXgud2lkdGgsCisJCQlmLT5mbXQucGl4LmhlaWdodCwgZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUsIGYtPmZtdC5waXguc2l6ZWltYWdlKSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbiA9ICZmLT5mbXQud2luOworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgbWF4dywgbWF4aDsKKworCURFQl9FRSgoImRldjolcFxuIiwgZGV2KSk7CisKKwlpZiAoTlVMTCA9PSB2di0+b3ZfZmIuYmFzZSkgeworCQlERUJfRCgoIm5vIGZiIGJhc2Ugc2V0LlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKE5VTEwgPT0gdnYtPm92X2ZtdCkgeworCQlERUJfRCgoIm5vIGZiIGZtdCBzZXQuXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAod2luLT53LndpZHRoIDwgNDggfHwgd2luLT53LmhlaWdodCA8IDMyKSB7CisJCURFQl9EKCgibWluIHdpZHRoL2hlaWdodC4gKCVkLCVkKVxuIiwgd2luLT53LndpZHRoLCB3aW4tPncuaGVpZ2h0KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAod2luLT5jbGlwY291bnQgPiAxNikgeworCQlERUJfRCgoImNsaXBjb3VudCB0b28gYmlnLlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmaWVsZCA9IHdpbi0+ZmllbGQ7CisJbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKKwltYXhoICA9IHZ2LT5zdGFuZGFyZC0+dl9tYXhfb3V0OworCisJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJCWZpZWxkID0gKHdpbi0+dy5oZWlnaHQgPiBtYXhoIC8gMikKKwkJCT8gVjRMMl9GSUVMRF9JTlRFUkxBQ0VECisJCQk6IFY0TDJfRklFTERfVE9QOwogCQl9Ci0KLQkJREVCX0VFKCgiVklESU9DX0VOVU1fRk1UOiB0eXBlOiVkLCBpbmRleDolZFxuIixmLT50eXBlLGYtPmluZGV4KSk7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006CisJY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCX0QoKCJubyBrbm93biBmaWVsZCBtb2RlICclZCcuXG4iLCBmaWVsZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsOwotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMgPSBhcmc7CiAKLQkJaWYgKChjLT5pZCA8ICBWNEwyX0NJRF9CQVNFIHx8Ci0JCSAgICAgYy0+aWQgPj0gVjRMMl9DSURfTEFTVFAxKSAmJgotCQkgICAgKGMtPmlkIDwgIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSB8fAotCQkgICAgIGMtPmlkID49IFY0TDJfQ0lEX1BSSVZBVEVfTEFTVFAxKSkKLQkJCXJldHVybiAtRUlOVkFMOworCXdpbi0+ZmllbGQgPSBmaWVsZDsKKwlpZiAod2luLT53LndpZHRoID4gbWF4dykKKwkJd2luLT53LndpZHRoID0gbWF4dzsKKwlpZiAod2luLT53LmhlaWdodCA+IG1heGgpCisJCXdpbi0+dy5oZWlnaHQgPSBtYXhoOwogCi0JCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKLQkJaWYoIE5VTEwgPT0gY3RybCApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotLyoKLQkJCWMtPmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7Ci0JCQlyZXR1cm4gMDsKLSovCi0JCX0KKwlyZXR1cm4gMDsKK30KIAotCQlERUJfRUUoKCJWSURJT0NfUVVFUllDVFJMOiBpZDolZFxuIixjLT5pZCkpOwotCQkqYyA9ICpjdHJsOwotCQlyZXR1cm4gMDsKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIiwgZGV2LCBmaCkpOworCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgeworCQlERUJfRUUoKCJzdHJlYW1pbmcgY2FwdHVyZSBpcyBhY3RpdmVcbiIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOiB7Ci0JCURFQl9FRSgoIlZJRElPQ19HX0NUUkxcbiIpKTsKLQkJcmV0dXJuIGdldF9jb250cm9sKGZoLGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQl7Ci0JCURFQl9FRSgoIlZJRElPQ19TX0NUUkxcbiIpKTsKLQkJZXJyID0gc2V0X2NvbnRyb2woZmgsYXJnKTsKKwllcnIgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKKwlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CisJZmgtPnZpZGVvX2ZtdCA9IGYtPmZtdC5waXg7CisJREVCX0VFKCgic2V0IHRvIHBpeGVsZm9ybWF0ICclNC40cydcbiIsIChjaGFyICopJmZoLT52aWRlb19mbXQucGl4ZWxmb3JtYXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWTogZGV2OiVwLCBmaDolcFxuIiwgZGV2LCBmaCkpOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KGZpbGUsIGZoLCBmKTsKKwlpZiAoMCAhPSBlcnIpCisJCXJldHVybiBlcnI7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmaC0+b3Yud2luICAgID0gZi0+Zm10LndpbjsKKwlmaC0+b3YubmNsaXBzID0gZi0+Zm10Lndpbi5jbGlwY291bnQ7CisJaWYgKGZoLT5vdi5uY2xpcHMgPiAxNikKKwkJZmgtPm92Lm5jbGlwcyA9IDE2OworCWlmIChjb3B5X2Zyb21fdXNlcihmaC0+b3YuY2xpcHMsIGYtPmZtdC53aW4uY2xpcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogZmgtPm92Lm5jbGlwcykpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JY2FzZSBWSURJT0NfR19QQVJNOgotCXsKLQkJc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybSA9IGFyZzsKLQkJaWYoIHBhcm0tPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbWVtc2V0KCZwYXJtLT5wYXJtLmNhcHR1cmUsMCxzaXplb2Yoc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0pKTsKLQkJcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMTsKLQkJLy8gZml4bWU6IG9ubHkgZm9yIFBBTCEKLQkJcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwotCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gMjU7Ci0JCXJldHVybiAwOworCisJLyogZmgtPm92LmZoIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHZhbGlkIG92ZXJsYXkgaW5mb3JtYXRpb25zLCB0b28gKi8KKwlmaC0+b3YuZmggPSBmaDsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCS8qIGNoZWNrIGlmIG91ciBjdXJyZW50IG92ZXJsYXkgaXMgYWN0aXZlICovCisJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CisJCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKKwkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKIAl9Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19HX0ZNVFxuIikpOwotCQlyZXR1cm4gZ19mbXQoZmgsZik7Ci0JfQotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfU19GTVRcbiIpKTsKLQkJcmV0dXJuIHNfZm10KGZoLGYpOwotCX0KLQljYXNlIFZJRElPQ19UUllfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlERUJfRUUoKCJWSURJT0NfVFJZX0ZNVFxuIikpOwotCQlyZXR1cm4gdHJ5X2ZtdChmaCxmKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19TVEQ6Ci0JewotCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19HX1NURFxuIikpOwotCQkqaWQgPSB2di0+c3RhbmRhcmQtPmlkOwotCQlyZXR1cm4gMDsKLQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKm5vcm0pCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCisJKm5vcm0gPSB2di0+c3RhbmRhcmQtPmlkOworCXJldHVybiAwOworfQorCiAJLyogdGhlIHNhYTcxNDYgc3VwZmhydHMgKHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgc2FhNzExMWEgZm9yIGV4YW1wbGUpCiAJICAgUEFMIC8gTlRTQyAvIFNFQ0FNLiBpZiB5b3VyIGhhcmR3YXJlIGRvZXMgbm90IChvciBkb2VzIG1vcmUpCiAJICAgLS0gb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpbiB5b3VyIGV4dGVuc2lvbiAqLworLyoKIAljYXNlIFZJRElPQ19FTlVNU1REOgogCXsKIAkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKmUgPSBhcmc7CkBAIC0xMDY2LDE2MyArOTQ5LDI0NiBAQAogCQl9CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJaW50IGZvdW5kID0gMDsKLQkJaW50IGk7CisJKi8KIAotCQlERUJfRUUoKCJWSURJT0NfU19TVERcbiIpKTsKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKmlkKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlpbnQgZm91bmQgPSAwOworCWludCBlcnIsIGk7CiAKLQkJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX0NBUFRVUkUpID09IFNUQVRVU19DQVBUVVJFKSB7Ci0JCQlERUJfRCgoImNhbm5vdCBjaGFuZ2UgdmlkZW8gc3RhbmRhcmQgd2hpbGUgc3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9CisJREVCX0VFKCgiVklESU9DX1NfU1REXG4iKSk7CiAKLQkJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX09WRVJMQVkpICE9IDApIHsKLQkJCXZ2LT5vdl9zdXNwZW5kID0gdnYtPnZpZGVvX2ZoOwotCQkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcodnYtPnZpZGVvX2ZoKTsgLyogc2lkZSBlZmZlY3Q6IHZpZGVvX3N0YXR1cyBpcyBub3cgMCwgdmlkZW9fZmggaXMgTlVMTCAqLwotCQkJaWYgKDAgIT0gZXJyKSB7Ci0JCQkJREVCX0QoKCJzdXNwZW5kaW5nIHZpZGVvIGZhaWxlZC4gYWJvcnRpbmdcbiIpKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQotCQlmb3IoaSA9IDA7IGkgPCBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkczsgaSsrKQotCQkJaWYgKCppZCAmIGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQpCi0JCQkJYnJlYWs7Ci0JCWlmIChpICE9IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzKSB7Ci0JCQl2di0+c3RhbmRhcmQgPSAmZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXTsKLQkJCWlmKCBOVUxMICE9IGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZF9jYWxsYmFjayApCi0JCQkJZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKGRldiwgdnYtPnN0YW5kYXJkKTsKLQkJCWZvdW5kID0gMTsKLQkJfQotCi0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCQlpZiAodnYtPm92X3N1c3BlbmQgIT0gTlVMTCkgewotCQkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHZ2LT5vdl9zdXNwZW5kKTsKLQkJCXZ2LT5vdl9zdXNwZW5kID0gTlVMTDsKLQkJfQotCi0JCWlmKCAwID09IGZvdW5kICkgewotCQkJREVCX0VFKCgiVklESU9DX1NfU1REOiBzdGFuZGFyZCBub3QgZm91bmQuXG4iKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19TX1NURDogc2V0IHRvIHN0YW5kYXJkIHRvICclcydcbiIsdnYtPnN0YW5kYXJkLT5uYW1lKSk7Ci0JCXJldHVybiAwOworCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSA9PSBTVEFUVVNfQ0FQVFVSRSkgeworCQlERUJfRCgoImNhbm5vdCBjaGFuZ2UgdmlkZW8gc3RhbmRhcmQgd2hpbGUgc3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7CisJCXJldHVybiAtRUJVU1k7CiAJfQotCWNhc2UgVklESU9DX09WRVJMQVk6Ci0JewotCQlpbnQgb24gPSAqKGludCAqKWFyZzsKIAotCQlERUJfRCgoIlZJRElPQ19PVkVSTEFZIG9uOiVkXG4iLG9uKSk7Ci0JCWlmIChvbiAhPSAwKSB7Ci0JCQllcnIgPSBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOwotCQl9IGVsc2UgewotCQkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWNhc2UgVklESU9DX1JFUUJVRlM6IHsKLQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfUkVRQlVGUywgdHlwZTolZFxuIixyZXEtPnR5cGUpKTsKLQkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMocSxyZXEpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjogewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfUVVFUllCVUYsIHR5cGU6JWQsIG9mZnNldDolZFxuIixidWYtPnR5cGUsYnVmLT5tLm9mZnNldCkpOwotCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYocSxidWYpOwotCX0KLQljYXNlIFZJRElPQ19RQlVGOiB7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmV0ID0gMDsKLQkJcmV0ID0gdmlkZW9idWZfcWJ1ZihxLGJ1Zik7Ci0JCURFQl9EKCgiVklESU9DX1FCVUY6IHJldDolZCwgaW5kZXg6JWRcbiIscmV0LGJ1Zi0+aW5kZXgpKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JY2FzZSBWSURJT0NfRFFCVUY6IHsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXQgPSAwOwotCQlyZXQgPSB2aWRlb2J1Zl9kcWJ1ZihxLGJ1ZixmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JCURFQl9EKCgiVklESU9DX0RRQlVGOiByZXQ6JWQsIGluZGV4OiVkXG4iLHJldCxidWYtPmluZGV4KSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWNhc2UgVklESU9DX1NUUkVBTU9OOiB7Ci0JCWludCAqdHlwZSA9IGFyZzsKLQkJREVCX0QoKCJWSURJT0NfU1RSRUFNT04sIHR5cGU6JWRcbiIsKnR5cGUpKTsKLQotCQllcnIgPSB2aWRlb19iZWdpbihmaCk7Ci0JCWlmKCAwICE9IGVycikgewotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vbihxKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7Ci0JCWludCAqdHlwZSA9IGFyZzsKLQotCQlERUJfRCgoIlZJRElPQ19TVFJFQU1PRkYsIHR5cGU6JWRcbiIsKnR5cGUpKTsKLQotCQkvKiB1Z2x5OiB3ZSBuZWVkIHRvIGNvcHkgc29tZSBjaGVja3MgZnJvbSB2aWRlb19lbmQoKSwKLQkJICAgYmVjYXVzZSB2aWRlb2J1Zl9zdHJlYW1vZmYoKSByZWxpZXMgb24gdGhlIGNhcHR1cmUgcnVubmluZy4KLQkJICAgY2hlY2sgYW5kIGZpeCB0aGlzICovCi0JCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSAhPSBTVEFUVVNfQ0FQVFVSRSkgewotCQkJREVCX1MoKCJub3QgY2FwdHVyaW5nLlxuIikpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7Ci0JCQlERUJfUygoImNhcHR1cmluZywgYnV0IGluIGFub3RoZXIgb3Blbi5cbiIpKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYocSk7CisJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX09WRVJMQVkpICE9IDApIHsKKwkJdnYtPm92X3N1c3BlbmQgPSB2di0+dmlkZW9fZmg7CisJCWVyciA9IHNhYTcxNDZfc3RvcF9wcmV2aWV3KHZ2LT52aWRlb19maCk7IC8qIHNpZGUgZWZmZWN0OiB2aWRlb19zdGF0dXMgaXMgbm93IDAsIHZpZGVvX2ZoIGlzIE5VTEwgKi8KIAkJaWYgKDAgIT0gZXJyKSB7Ci0JCQlERUJfRCgoIndhcm5pbmc6IHZpZGVvYnVmX3N0cmVhbW9mZigpIGZhaWxlZC5cbiIpKTsKLQkJCXZpZGVvX2VuZChmaCwgZmlsZSk7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSB2aWRlb19lbmQoZmgsIGZpbGUpOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJLyogZml4bWU6IG51bWJlciBvZiBjYXB0dXJlIGJ1ZmZlcnMgYW5kIHNpemVzIGZvciB2NGwgYXBwcyAqLwotCQlpbnQgZ2J1ZmZlcnMgPSAyOwotCQlpbnQgZ2J1ZnNpemUgPSA3NjgqNTc2KjQ7Ci0KLQkJREVCX0QoKCJWSURJT0NHTUJVRiBcbiIpKTsKLQotCQlxID0gJmZoLT52aWRlb19xOwotCQllcnIgPSB2aWRlb2J1Zl9tbWFwX3NldHVwKHEsZ2J1ZmZlcnMsZ2J1ZnNpemUsCi0JCQkJCSAgVjRMMl9NRU1PUllfTU1BUCk7Ci0JCWlmIChlcnIgPCAwKQorCQkJREVCX0QoKCJzdXNwZW5kaW5nIHZpZGVvIGZhaWxlZC4gYWJvcnRpbmdcbiIpKTsKIAkJCXJldHVybiBlcnI7CisJCX0KKwl9CiAKLQkJZ2J1ZmZlcnMgPSBlcnI7Ci0JCW1lbXNldChtYnVmLDAsc2l6ZW9mKCptYnVmKSk7Ci0JCW1idWYtPmZyYW1lcyA9IGdidWZmZXJzOwotCQltYnVmLT5zaXplICAgPSBnYnVmZmVycyAqIGdidWZzaXplOwotCQlmb3IgKGkgPSAwOyBpIDwgZ2J1ZmZlcnM7IGkrKykKLQkJCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7Ci0JCXJldHVybiAwOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHM7IGkrKykKKwkJaWYgKCppZCAmIGRldi0+ZXh0X3Z2X2RhdGEtPnN0ZHNbaV0uaWQpCisJCQlicmVhazsKKwlpZiAoaSAhPSBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkcykgeworCQl2di0+c3RhbmRhcmQgPSAmZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXTsKKwkJaWYgKE5VTEwgIT0gZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKQorCQkJZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrKGRldiwgdnYtPnN0YW5kYXJkKTsKKwkJZm91bmQgPSAxOwogCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChmaWxlLCBjbWQsIGFyZywKLQkJCQkJCSAgc2FhNzE0Nl92aWRlb19kb19pb2N0bCk7CisKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlpZiAodnYtPm92X3N1c3BlbmQgIT0gTlVMTCkgeworCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcodnYtPm92X3N1c3BlbmQpOworCQl2di0+b3Zfc3VzcGVuZCA9IE5VTEw7CiAJfQorCisJaWYgKCFmb3VuZCkgeworCQlERUJfRUUoKCJWSURJT0NfU19TVEQ6IHN0YW5kYXJkIG5vdCBmb3VuZC5cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX1NfU1REOiBzZXQgdG8gc3RhbmRhcmQgdG8gJyVzJ1xuIiwgdnYtPnN0YW5kYXJkLT5uYW1lKSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgb24pCit7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX09WRVJMQVkgb246JWRcbiIsIG9uKSk7CisJaWYgKG9uKQorCQllcnIgPSBzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOworCWVsc2UKKwkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpiKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisKKwlpZiAoYi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmlkZW9fcSwgYik7CisJaWYgKGItPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52YmlfcSwgYik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZpZGVvX3EsIGJ1Zik7CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52YmlfcSwgYnVmKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZpZGVvX3EsIGJ1Zik7CisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZmgtPnZiaV9xLCBidWYpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52aWRlb19xLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiaV9xLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX1NUUkVBTU9OLCB0eXBlOiVkXG4iLCB0eXBlKSk7CisKKwllcnIgPSB2aWRlb19iZWdpbihmaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZpZGVvX3EpOworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiaV9xKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJaW50IGVycjsKKworCURFQl9EKCgiVklESU9DX1NUUkVBTU9GRiwgdHlwZTolZFxuIiwgdHlwZSkpOworCisJLyogdWdseTogd2UgbmVlZCB0byBjb3B5IHNvbWUgY2hlY2tzIGZyb20gdmlkZW9fZW5kKCksCisJICAgYmVjYXVzZSB2aWRlb2J1Zl9zdHJlYW1vZmYoKSByZWxpZXMgb24gdGhlIGNhcHR1cmUgcnVubmluZy4KKwkgICBjaGVjayBhbmQgZml4IHRoaXMgKi8KKwlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfQ0FQVFVSRSkgIT0gU1RBVFVTX0NBUFRVUkUpIHsKKwkJREVCX1MoKCJub3QgY2FwdHVyaW5nLlxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7CisJCURFQl9TKCgiY2FwdHVyaW5nLCBidXQgaW4gYW5vdGhlciBvcGVuLlxuIikpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQllcnIgPSB2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52aWRlb19xKTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiaV9xKTsKKwlpZiAoMCAhPSBlcnIpIHsKKwkJREVCX0QoKCJ3YXJuaW5nOiB2aWRlb2J1Zl9zdHJlYW1vZmYoKSBmYWlsZWQuXG4iKSk7CisJCXZpZGVvX2VuZChmaCwgZmlsZSk7CisJfSBlbHNlIHsKKwkJZXJyID0gdmlkZW9fZW5kKGZoLCBmaWxlKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKwlpZiAoY2hpcC0+bWF0Y2gudHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAmJiAhY2hpcC0+bWF0Y2guYWRkcikgeworCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzE0NjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmZGV2LT52NGwyX2RldiwgMCwKKwkJCWNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52aWRlb19xOworCWludCBlcnIsIGk7CisKKwkvKiBmaXhtZTogbnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycyBhbmQgc2l6ZXMgZm9yIHY0bCBhcHBzICovCisJaW50IGdidWZmZXJzID0gMjsKKwlpbnQgZ2J1ZnNpemUgPSA3NjggKiA1NzYgKiA0OworCisJREVCX0QoKCJWSURJT0NHTUJVRiBcbiIpKTsKKworCXEgPSAmZmgtPnZpZGVvX3E7CisJZXJyID0gdmlkZW9idWZfbW1hcF9zZXR1cChxLCBnYnVmZmVycywgZ2J1ZnNpemUsCisJCQlWNEwyX01FTU9SWV9NTUFQKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWdidWZmZXJzID0gZXJyOworCW1lbXNldChtYnVmLCAwLCBzaXplb2YoKm1idWYpKTsKKwltYnVmLT5mcmFtZXMgPSBnYnVmZmVyczsKKwltYnVmLT5zaXplICAgPSBnYnVmZmVycyAqIGdidWZzaXplOworCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQorCQltYnVmLT5vZmZzZXRzW2ldID0gaSAqIGdidWZzaXplOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2NvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBzYWE3MTQ2X3ZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICAgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdmVybGF5ID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5ICAgID0gdmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSAgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5ICAgID0gdmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZ19mbXRfdmJpX2NhcCAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX2dfY2hpcF9pZGVudCAgICAgICAgID0gdmlkaW9jX2dfY2hpcF9pZGVudCwKKworCS52aWRpb2Nfb3ZlcmxheSAJICAgICA9IHZpZGlvY19vdmVybGF5LAorCS52aWRpb2NfZ19mYnVmICAJICAgICA9IHZpZGlvY19nX2ZidWYsCisJLnZpZGlvY19zX2ZidWYgIAkgICAgID0gdmlkaW9jX3NfZmJ1ZiwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX2dfc3RkICAgICAgICAgICAgICAgID0gdmlkaW9jX2dfc3RkLAorCS52aWRpb2Nfc19zdGQgICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgICAgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2dfcGFybSAJCSAgICAgPSB2aWRpb2NfZ19wYXJtLAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICAgPSB2aWRpb2NnbWJ1ZiwKKyNlbmRpZgorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKaW5kZXggZGEwNThjMS4uNjA3ZDMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcKQEAgLTIxLDE2ICsyMSwxNyBAQAogCXRyaXN0YXRlCiAJZGVmYXVsdCBWSURFT19NRURJQSAmJiBJMkMKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwWFggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjcgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE5ODg3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMFhYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9URUE1NzY3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBOTg4NyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01DNDRTODAzIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAotbWVudWNvbmZpZyBNRURJQV9UVU5FUl9DVVNUT01JWkUKK21lbnVjb25maWcgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJYm9vbCAiQ3VzdG9taXplIGFuYWxvZyBhbmQgaHlicmlkIHR1bmVyIG1vZHVsZXMgdG8gYnVpbGQiCiAJZGVwZW5kcyBvbiBNRURJQV9UVU5FUgogCWRlZmF1bHQgbgpAQCAtNDMsMTMgKzQ0LDEzIEBACiAKIAkgIElmIHVuc3VyZSBzYXkgTi4KIAotaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCitpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAogY29uZmlnIE1FRElBX1RVTkVSX1NJTVBMRQogCXRyaXN0YXRlICJTaW1wbGUgdHVuZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE5ODg3Ci0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdmFyaW91cyBzaW1wbGUgdHVuZXJzLgogCkBAIC01OCwyOCArNTksMjggQEAKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBUREE4MjkwKzgyNzUoYSkgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9UREE4MjdYCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBODI3WCBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCBzaWxpY29uIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9UREExODI3MQogCXRyaXN0YXRlICJOWFAgVERBMTgyNzEgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgc2lsaWNvbiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVERBOTg4NwogCXRyaXN0YXRlICJUREEgOTg4NS82LzcgYW5hbG9nIElGIGRlbW9kdWxhdG9yIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBUREE5ODg1LzYvNwogCSAgYW5hbG9nIElGIGRlbW9kdWxhdG9yLgpAQCAtODgsNjMgKzg5LDYzIEBACiAJdHJpc3RhdGUgIlRFQSA1NzYxIHJhZGlvIHR1bmVyIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBURUE1NzYxIHJhZGlvIHR1bmVyLgogCiBjb25maWcgTUVESUFfVFVORVJfVEVBNTc2NwogCXRyaXN0YXRlICJURUEgNTc2NyByYWRpbyB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFRFQTU3NjcgcmFkaW8gdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIwWFgKIAl0cmlzdGF0ZSAiTWljcm90dW5lIDIwMzIgLyAyMDUwIHR1bmVycyIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBNVDIwMzIgLyBNVDIwNTAgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIwNjAKIAl0cmlzdGF0ZSAiTWljcm90dW5lIE1UMjA2MCBzaWxpY29uIElGIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIElGIHR1bmVyIE1UMjA2MCBmcm9tIE1pY3JvdHVuZS4KIAogY29uZmlnIE1FRElBX1RVTkVSX01UMjI2NgogCXRyaXN0YXRlICJNaWNyb3R1bmUgTVQyMjY2IHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gYmFzZWJhbmQgdHVuZXIgTVQyMjY2IGZyb20gTWljcm90dW5lLgogCiBjb25maWcgTUVESUFfVFVORVJfTVQyMTMxCiAJdHJpc3RhdGUgIk1pY3JvdHVuZSBNVDIxMzEgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBiYXNlYmFuZCB0dW5lciBNVDIxMzEgZnJvbSBNaWNyb3R1bmUuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9RVDEwMTAKIAl0cmlzdGF0ZSAiUXVhbnRlayBRVDEwMTAgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBRVDEwMTAgZnJvbSBRdWFudGVrLgogCiBjb25maWcgTUVESUFfVFVORVJfWEMyMDI4CiAJdHJpc3RhdGUgIlhDZWl2ZSB4YzIwMjgveGMzMDI4IHR1bmVycyIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSB4YzIwMjgveGMzMDI4IHR1bmVycy4KIAogY29uZmlnIE1FRElBX1RVTkVSX1hDNTAwMAogCXRyaXN0YXRlICJYY2VpdmUgWEM1MDAwIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgWEM1MDAwIGZyb20gWGNlaXZlLgogCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9nZXRoZXIgd2l0aCBhCkBAIC0xNTMsMTUgKzE1NCwyMiBAQAogY29uZmlnIE1FRElBX1RVTkVSX01YTDUwMDVTCiAJdHJpc3RhdGUgIk1heExpbmVhciBNU0w1MDA1UyBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIHR1bmVyIE1YTDUwMDVTIGZyb20gTWF4TGluZWFyLgogCiBjb25maWcgTUVESUFfVFVORVJfTVhMNTAwN1QKIAl0cmlzdGF0ZSAiTWF4TGluZWFyIE14TDUwMDdUIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gdHVuZXIgTXhMNTAwN1QgZnJvbSBNYXhMaW5lYXIuCiAKLWVuZGlmICMgTUVESUFfVFVORVJfQ1VTVE9NSVpFCitjb25maWcgTUVESUFfVFVORVJfTUM0NFM4MDMKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCB0dW5lcnMiCisJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBGcmVlc2NhbGUgTUM0NFM4MDMgYmFzZWQgdHVuZXJzCisKK2VuZGlmICMgTUVESUFfVFVORVJfQ1VTVE9NSVNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUKaW5kZXggNGRmYmU1Yi4uNDEzMmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNyBAQAogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01UMjEzMSkgKz0gbXQyMTMxLm8KIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1UykgKz0gbXhsNTAwNXMubwogb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUKSArPSBteGw1MDA3dC5vCitvYmotJChDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDMpICs9IG1jNDRzODAzLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGM0NDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmMKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUM0NFM4MDMgTG93IFBvd2VyIENNT1MgQnJvYWRiYW5kIFR1bmVyCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpbmNsdWRlICJtYzQ0czgwMy5oIgorI2luY2x1ZGUgIm1jNDRzODAzX3ByaXYuaCIKKworI2RlZmluZSBtY19wcmludGsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKQlcCisJcHJpbnRrKGxldmVsICJtYzQ0czgwMzogIiBmb3JtYXQgLCAjIyBhcmcpCisKKy8qIFdyaXRlcyBhIHNpbmdsZSByZWdpc3RlciAqLworc3RhdGljIGludCBtYzQ0czgwM193cml0ZXJlZyhzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiwgdTMyIHZhbCkKK3sKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAzCisJfTsKKworCWJ1ZlswXSA9ICh2YWwgJiAweGZmMDAwMCkgPj4gMTY7CisJYnVmWzFdID0gKHZhbCAmIDB4ZmYwMCkgPj4gODsKKwlidWZbMl0gPSAodmFsICYgMHhmZik7CisKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZywgMSkgIT0gMSkgeworCQltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSTJDIHdyaXRlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUmVhZHMgYSBzaW5nbGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgbWM0NHM4MDNfcmVhZHJlZyhzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdiwgdTggcmVnLCB1MzIgKnZhbCkKK3sKKwl1MzIgd3ZhbDsKKwl1OCBidWZbM107CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkgIC5idWYgPSBidWYsIC5sZW4gPSAzIH0sCisJfTsKKworCXd2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RBVEFSRUcsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICAgTUM0NFM4MDNfUkVHX1NNKHJlZywgTUM0NFM4MDNfRCk7CisKKwlyZXQgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB3dmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsIG1zZywgMSkgIT0gMSkgeworCQltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSTJDIHJlYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCisJKnZhbCA9IChidWZbMF0gPDwgMTYpIHwgKGJ1ZlsxXSA8PCA4KSB8IGJ1ZlsyXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlrZnJlZShwcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisvKiBSZXNldCBjaGlwICovCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRVNFVCwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19SUyk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVTRVQsIE1DNDRTODAzX0FERFIpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFBvd2VyIFVwIGFuZCBTdGFydCBPc2MgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVGT1NDLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4QzAsIE1DNDRTODAzX1JFRk9TQykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19PU0NTRUwpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1BPV0VSLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MjAwLCBNQzQ0UzgwM19QT1dFUik7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCW1zbGVlcCgxMCk7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFRk9TQywgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDQwLCBNQzQ0UzgwM19SRUZPU0MpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfT1NDU0VMKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJbXNsZWVwKDIwKTsKKworLyogU2V0dXAgTWl4ZXIgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfTUlYRVIsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfVFJJX1NUQVRFKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4N0YsIE1DNDRTODAzX01JWEVSX1JFUyk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworLyogU2V0dXAgQ2lycXVpdCBBZGp1c3QgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfQ0lSQ0FESiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HMykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDMsIE1DNDRTODAzX0NJUkNBREpfUkVTKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0c2KSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKHByaXYtPmNmZy0+ZGlnX291dCwgTUM0NFM4MDNfUzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19MUCkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19DTFJGKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0NMSUYpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0NJUkNBREosIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzMpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19DSVJDQURKX1JFUykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HNikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShwcml2LT5jZmctPmRpZ19vdXQsIE1DNDRTODAzX1MxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MywgTUM0NFM4MDNfTFApOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFNldHVwIERpZ3R1bmUgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfRElHVFVORSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgzLCBNQzQ0UzgwM19YT0QpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFNldHVwIEFHQyAqLworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19MTkFBR0MsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FUMikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BR0NfQU5fRElHKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FHQ19SRUFEX0VOKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0xOQTApOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCXJldHVybiAwOworCitleGl0OgorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSS9PIEVycm9yXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1MzIgcjEsIHIyLCBuMSwgbjIsIGxvMSwgbG8yLCBmcmVxLCB2YWw7CisJaW50IGVycjsKKworCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OworCisJcjEgPSBNQzQ0UzgwM19PU0MgLyAxMDAwMDAwOworCXIyID0gTUM0NFM4MDNfT1NDIC8gIDEwMDAwMDsKKworCW4xID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICsgTUM0NFM4MDNfSUYxICsgNTAwMDAwKSAvIDEwMDAwMDA7CisJZnJlcSA9IE1DNDRTODAzX09TQyAvIHIxICogbjE7CisJbG8xID0gKCg2MCAqIG4xKSArIChyMSAvIDIpKSAvIHIxOworCWZyZXEgPSBmcmVxIC0gcGFyYW1zLT5mcmVxdWVuY3k7CisKKwluMiA9IChmcmVxIC0gTUM0NFM4MDNfSUYyICsgNTAwMDApIC8gMTAwMDAwOworCWxvMiA9ICgoNjAgKiBuMikgKyAocjIgLyAyKSkgLyByMjsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFRkRJViwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShyMS0xLCBNQzQ0UzgwM19SMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShyMi0xLCBNQzQ0UzgwM19SMikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19SRUZCVUZfRU4pOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0xPMSwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShuMS0yLCBNQzQ0UzgwM19MTzEpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0xPMiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShuMi0yLCBNQzQ0UzgwM19MTzIpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RJR1RVTkUsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfREEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00obG8xLCBNQzQ0UzgwM19MT19SRUYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RJR1RVTkUsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMiwgTUM0NFM4MDNfREEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00obG8yLCBNQzQ0UzgwM19MT19SRUYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQVQpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJcmV0dXJuIDA7CisKK2V4aXQ6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCW1jX3ByaW50ayhLRVJOX1dBUk5JTkcsICJJL08gRXJyb3JcbiIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWM0NHM4MDNfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwkqZnJlcXVlbmN5ID0gcHJpdi0+ZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgbWM0NHM4MDNfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSAgICAgICAgICAgPSAiRnJlZXNjYWxlIE1DNDRTODAzIiwKKwkJLmZyZXF1ZW5jeV9taW4gID0gICA0ODAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggID0gMTAwMDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gICAgIDEwMDAwMCwKKwl9LAorCisJLnJlbGVhc2UgICAgICAgPSBtYzQ0czgwM19yZWxlYXNlLAorCS5pbml0ICAgICAgICAgID0gbWM0NHM4MDNfaW5pdCwKKwkuc2V0X3BhcmFtcyAgICA9IG1jNDRzODAzX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBtYzQ0czgwM19nZXRfZnJlcXVlbmN5Cit9OworCisvKiBUaGlzIGZ1bmN0aW9ucyB0cmllcyB0byBpZGVudGlmeSBhIE1DNDRTODAzIHR1bmVyIGJ5IHJlYWRpbmcgdGhlIElECisgICByZWdpc3Rlci4gVGhpcyBpcyBoYXN0eS4gKi8KK3N0cnVjdCBkdmJfZnJvbnRlbmQgKm1jNDRzODAzX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtYzQ0czgwM19jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgbWM0NHM4MDNfcHJpdiAqcHJpdjsKKwl1MzIgcmVnOworCXU4IGlkOworCWludCByZXQ7CisKKwlyZWcgPSAwOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYzQ0czgwM19wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5jZmcgPSBjZmc7CisJcHJpdi0+aTJjID0gaTJjOworCXByaXYtPmZlICA9IGZlOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gbWM0NHM4MDNfcmVhZHJlZyhwcml2LCBNQzQ0UzgwM19SRUdfSUQsICZyZWcpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisKKwlpZCA9IE1DNDRTODAzX1JFR19NUyhyZWcsIE1DNDRTODAzX0lEKTsKKworCWlmIChpZCAhPSAweDE0KSB7CisJCW1jX3ByaW50ayhLRVJOX0VSUiwgInVuc3VwcG9ydGVkIElEICIKKwkJICAgICAgICIoJXggc2hvdWxkIGJlIDB4MTQpXG4iLCBpZCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbWNfcHJpbnRrKEtFUk5fSU5GTywgInN1Y2Nlc3NmdWxseSBpZGVudGlmaWVkIChJRCA9ICV4KVxuIiwgaWQpOworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZtYzQ0czgwM190dW5lcl9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCisJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiBmZTsKKworZXJyb3I6CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCWtmcmVlKHByaXYpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChtYzQ0czgwM19hdHRhY2gpOworCitNT0RVTEVfQVVUSE9SKCJKb2NoZW4gRnJpZWRyaWNoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNQzQ0UzgwMyBzaWxpY29uIHR1bmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGYzODkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzQ0UzgwMyBMb3cgUG93ZXIgQ01PUyBCcm9hZGJhbmQgVHVuZXIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEpvY2hlbiBGcmllZHJpY2ggPGpvY2hlbkBzY3JhbS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS49CisgKi8KKworI2lmbmRlZiBNQzQ0UzgwM19ICisjZGVmaW5lIE1DNDRTODAzX0gKKworc3RydWN0IGR2Yl9mcm9udGVuZDsKK3N0cnVjdCBpMmNfYWRhcHRlcjsKKworc3RydWN0IG1jNDRzODAzX2NvbmZpZyB7CisJdTggaTJjX2FkZHJlc3M7CisJdTggZGlnX291dDsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMykgfHwgXAorICAgIChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwM19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYzQ0czgwM19hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbWM0NHM4MDNfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG1jNDRzODAzX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwM19wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDNfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTkyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDNfcHJpdi5oCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCBUdW5lcgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSm9jaGVuIEZyaWVkcmljaCA8am9jaGVuQHNjcmFtLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIE1DNDRTODAzX1BSSVZfSAorI2RlZmluZSBNQzQ0UzgwM19QUklWX0gKKworLyogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgZGF0YXNoZWV0CisgICBodHRwOi8vd3d3LmZyZWVzY2FsZS5jb20vZmlsZXMvcmZfaWYvZG9jL2RhdGFfc2hlZXQvTUM0NFM4MDMucGRmCisKKyAgIFNQSSBvciBJMkMgQWRkcmVzcyA6IDB4YzAtMHhjNgorCisgICBSZWcuTm8gfCBGdW5jdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIDAwIHwgUG93ZXIgRG93bgorICAgICAgIDAxIHwgUmVmZXJlbmNlIE9zemlsbGF0b3IKKyAgICAgICAwMiB8IFJlZmVyZW5jZSBEaXZpZGVycworICAgICAgIDAzIHwgTWl4ZXIgYW5kIFJlZmVyZW5jZSBCdWZmZXIKKyAgICAgICAwNCB8IFJlc2V0L1NlcmlhbCBPdXQKKyAgICAgICAwNSB8IExPIDEKKyAgICAgICAwNiB8IExPIDIKKyAgICAgICAwNyB8IENpcmN1aXQgQWRqdXN0CisgICAgICAgMDggfCBUZXN0CisgICAgICAgMDkgfCBEaWdpdGFsIFR1bmUKKyAgICAgICAwQSB8IExOQSBBR0MKKyAgICAgICAwQiB8IERhdGEgUmVnaXN0ZXIgQWRkcmVzcworICAgICAgIDBDIHwgUmVndWxhdG9yIFRlc3QKKyAgICAgICAwRCB8IFZDTyBUZXN0CisgICAgICAgMEUgfCBMTkEgR2Fpbi9JbnB1dCBQb3dlcgorICAgICAgIDBGIHwgSUQgQml0cworCisqLworCisjZGVmaW5lIE1DNDRTODAzX09TQyAyNjAwMDAwMAkvKiAyNiBNSHogKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUYxIDEwODYwMDAwMDAgLyogMTA4NiBNSHogKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUYyIDM2MTI1MDAwCS8qIDM2LjEyNSBNSHogKi8KKworI2RlZmluZSBNQzQ0UzgwM19SRUdfUE9XRVIJMAorI2RlZmluZSBNQzQ0UzgwM19SRUdfUkVGT1NDCTEKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFRkRJVgkyCisjZGVmaW5lIE1DNDRTODAzX1JFR19NSVhFUgkzCisjZGVmaW5lIE1DNDRTODAzX1JFR19SRVNFVAk0CisjZGVmaW5lIE1DNDRTODAzX1JFR19MTzEJNQorI2RlZmluZSBNQzQ0UzgwM19SRUdfTE8yCTYKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0NJUkNBREoJNworI2RlZmluZSBNQzQ0UzgwM19SRUdfVEVTVAk4CisjZGVmaW5lIE1DNDRTODAzX1JFR19ESUdUVU5FCTkKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0xOQUFHQwkweDBBCisjZGVmaW5lIE1DNDRTODAzX1JFR19EQVRBUkVHCTB4MEIKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFR1RFU1QJMHgwQworI2RlZmluZSBNQzQ0UzgwM19SRUdfVkNPVEVTVAkweDBECisjZGVmaW5lIE1DNDRTODAzX1JFR19MTkFHQUlOCTB4MEUKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0lECQkweDBGCisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1DNDRTODAzX0FERFIJCTB4MEYKKyNkZWZpbmUgTUM0NFM4MDNfQUREUl9TCQkwCisvKiBSRUdfUE9XRVIgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUE9XRVIJCTB4RkZGRkYwCisjZGVmaW5lIE1DNDRTODAzX1BPV0VSX1MJNAorLyogUkVHX1JFRk9TQyAqLworI2RlZmluZSBNQzQ0UzgwM19SRUZPU0MJCTB4MUZGMAorI2RlZmluZSBNQzQ0UzgwM19SRUZPU0NfUwk0CisjZGVmaW5lIE1DNDRTODAzX09TQ1NFTAkJMHgyMDAwCisjZGVmaW5lIE1DNDRTODAzX09TQ1NFTF9TCTEzCisvKiBSRUdfUkVGRElWICovCisjZGVmaW5lIE1DNDRTODAzX1IyCQkweDFGRjAKKyNkZWZpbmUgTUM0NFM4MDNfUjJfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19SRUZCVUZfRU4JMHgyMDAwCisjZGVmaW5lIE1DNDRTODAzX1JFRkJVRl9FTl9TCTEzCisjZGVmaW5lIE1DNDRTODAzX1IxCQkweDdDMDAwCisjZGVmaW5lIE1DNDRTODAzX1IxX1MJCTE0CisvKiBSRUdfTUlYRVIgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUjMJCTB4NzAKKyNkZWZpbmUgTUM0NFM4MDNfUjNfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19NVVgzCQkweDgwCisjZGVmaW5lIE1DNDRTODAzX01VWDNfUwkJNworI2RlZmluZSBNQzQ0UzgwM19NVVg0CQkweDEwMAorI2RlZmluZSBNQzQ0UzgwM19NVVg0X1MJCTgKKyNkZWZpbmUgTUM0NFM4MDNfT1NDX1NDUgkweDIwMAorI2RlZmluZSBNQzQ0UzgwM19PU0NfU0NSX1MJOQorI2RlZmluZSBNQzQ0UzgwM19UUklfU1RBVEUJMHg0MDAKKyNkZWZpbmUgTUM0NFM4MDNfVFJJX1NUQVRFX1MJMTAKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0dBSU4JMHg4MDAKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0dBSU5fUwkxMQorI2RlZmluZSBNQzQ0UzgwM19CVUZfSU8JCTB4MTAwMAorI2RlZmluZSBNQzQ0UzgwM19CVUZfSU9fUwkxMgorI2RlZmluZSBNQzQ0UzgwM19NSVhFUl9SRVMJMHhGRTAwMAorI2RlZmluZSBNQzQ0UzgwM19NSVhFUl9SRVNfUwkxMworLyogUkVHX1JFU0VUICovCisjZGVmaW5lIE1DNDRTODAzX1JTCQkweDEwCisjZGVmaW5lIE1DNDRTODAzX1JTX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfU08JCTB4MjAKKyNkZWZpbmUgTUM0NFM4MDNfU09fUwkJNQorLyogUkVHX0xPMSAqLworI2RlZmluZSBNQzQ0UzgwM19MTzEJCTB4RkZGMAorI2RlZmluZSBNQzQ0UzgwM19MTzFfUwkJNAorLyogUkVHX0xPMiAqLworI2RlZmluZSBNQzQ0UzgwM19MTzIJCTB4N0ZGRjAKKyNkZWZpbmUgTUM0NFM4MDNfTE8yX1MJCTQKKy8qIFJFR19DSVJDQURKICovCisjZGVmaW5lIE1DNDRTODAzX0cxCQkweDIwCisjZGVmaW5lIE1DNDRTODAzX0cxX1MJCTUKKyNkZWZpbmUgTUM0NFM4MDNfRzMJCTB4ODAKKyNkZWZpbmUgTUM0NFM4MDNfRzNfUwkJNworI2RlZmluZSBNQzQ0UzgwM19DSVJDQURKX1JFUwkweDMwMAorI2RlZmluZSBNQzQ0UzgwM19DSVJDQURKX1JFU19TCTgKKyNkZWZpbmUgTUM0NFM4MDNfRzYJCTB4NDAwCisjZGVmaW5lIE1DNDRTODAzX0c2X1MJCTEwCisjZGVmaW5lIE1DNDRTODAzX0c3CQkweDgwMAorI2RlZmluZSBNQzQ0UzgwM19HN19TCQkxMQorI2RlZmluZSBNQzQ0UzgwM19TMQkJMHgxMDAwCisjZGVmaW5lIE1DNDRTODAzX1MxX1MJCTEyCisjZGVmaW5lIE1DNDRTODAzX0xQCQkweDdFMDAwCisjZGVmaW5lIE1DNDRTODAzX0xQX1MJCTEzCisjZGVmaW5lIE1DNDRTODAzX0NMUkYJCTB4ODAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQ0xSRl9TCQkxOQorI2RlZmluZSBNQzQ0UzgwM19DTElGCQkweDEwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19DTElGX1MJCTIwCisvKiBSRUdfVEVTVCAqLworLyogUkVHX0RJR1RVTkUgKi8KKyNkZWZpbmUgTUM0NFM4MDNfREEJCTB4RjAKKyNkZWZpbmUgTUM0NFM4MDNfREFfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19YT0QJCTB4MzAwCisjZGVmaW5lIE1DNDRTODAzX1hPRF9TCQk4CisjZGVmaW5lIE1DNDRTODAzX1JTVAkJMHgxMDAwMAorI2RlZmluZSBNQzQ0UzgwM19SU1RfUwkJMTYKKyNkZWZpbmUgTUM0NFM4MDNfTE9fUkVGCQkweDFGRkYwMAorI2RlZmluZSBNQzQ0UzgwM19MT19SRUZfUwk4CisjZGVmaW5lIE1DNDRTODAzX0FUCQkweDIwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVF9TCQkyMQorI2RlZmluZSBNQzQ0UzgwM19NVAkJMHg0MDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTVRfUwkJMjIKKy8qIFJFR19MTkFBR0MgKi8KKyNkZWZpbmUgTUM0NFM4MDNfRwkJMHgzRjAKKyNkZWZpbmUgTUM0NFM4MDNfR19TCQk0CisjZGVmaW5lIE1DNDRTODAzX0FUMQkJMHg0MDAKKyNkZWZpbmUgTUM0NFM4MDNfQVQxX1MJCTEwCisjZGVmaW5lIE1DNDRTODAzX0FUMgkJMHg4MDAKKyNkZWZpbmUgTUM0NFM4MDNfQVQyX1MJCTExCisjZGVmaW5lIE1DNDRTODAzX0hMX0dSX0VOCTB4ODAwMAorI2RlZmluZSBNQzQ0UzgwM19ITF9HUl9FTl9TCTE1CisjZGVmaW5lIE1DNDRTODAzX0FHQ19BTl9ESUcJMHgxMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BR0NfQU5fRElHX1MJMTYKKyNkZWZpbmUgTUM0NFM4MDNfQVRURU5fRU4JMHgyMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVFRFTl9FTl9TCTE3CisjZGVmaW5lIE1DNDRTODAzX0FHQ19SRUFEX0VOCTB4NDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1JFQURfRU5fUwkxOAorI2RlZmluZSBNQzQ0UzgwM19MTkEwCQkweDgwMDAwCisjZGVmaW5lIE1DNDRTODAzX0xOQTBfUwkJMTkKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1NFTAkweDEwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BR0NfU0VMX1MJMjAKKyNkZWZpbmUgTUM0NFM4MDNfQVQwCQkweDIwMDAwMAorI2RlZmluZSBNQzQ0UzgwM19BVDBfUwkJMjEKKyNkZWZpbmUgTUM0NFM4MDNfQgkJMHhDMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQl9TCQkyMgorLyogUkVHX0RBVEFSRUcgKi8KKyNkZWZpbmUgTUM0NFM4MDNfRAkJMHhGMAorI2RlZmluZSBNQzQ0UzgwM19EX1MJCTQKKy8qIFJFR19SRUdURVNUICovCisvKiBSRUdfVkNPVEVTVCAqLworLyogUkVHX0xOQUdBSU4gKi8KKyNkZWZpbmUgTUM0NFM4MDNfSUZfUFdSCQkweDcwMAorI2RlZmluZSBNQzQ0UzgwM19JRl9QV1JfUwk4CisjZGVmaW5lIE1DNDRTODAzX1JGX1BXUgkJMHgzODAwCisjZGVmaW5lIE1DNDRTODAzX1JGX1BXUl9TCTExCisjZGVmaW5lIE1DNDRTODAzX0xOQV9HQUlOCTB4RkMwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTE5BX0dBSU5fUwkxNAorLyogUkVHX0lEICovCisjZGVmaW5lIE1DNDRTODAzX0lECQkweDNFMDAKKyNkZWZpbmUgTUM0NFM4MDNfSURfUwkJOQorCisvKiBTb21lIG1hY3JvcyB0byByZWFkL3dyaXRlIGZpZWxkcyAqLworCisvKiBGaXJzdCBzaGlmdCwgdGhlbiBtYXNrICovCisjZGVmaW5lIE1DNDRTODAzX1JFR19TTShfdmFsLCBfcmVnKQkJCQkJXAorCSgoKF92YWwpIDw8IF9yZWcjI19TKSAmIChfcmVnKSkKKworLyogRmlyc3QgbWFzaywgdGhlbiBzaGlmdCAqLworI2RlZmluZSBNQzQ0UzgwM19SRUdfTVMoX3ZhbCwgX3JlZykJCQkJCVwKKwkoKChfdmFsKSAmIChfcmVnKSkgPj4gX3JlZyMjX1MpCisKK3N0cnVjdCBtYzQ0czgwM19wcml2IHsKKwlzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmc7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CisKKwl1MzIgZnJlcXVlbmN5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKaW5kZXggMTIyMDZkNy4uYzdhYmUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJd2hpbGUgKGkrKyA8IDEwICYmIG10MjA2MF9yZWFkcmVnKHByaXYsIFJFR19NSVNDX1NUQVQsICZiKSA9PSAwICYmIChiICYgKDEgPDwgNikpID09IDApCiAJCW1zbGVlcCgyMCk7CiAKLQlpZiAoaSA8IDEwKSB7CisJaWYgKGkgPD0gMTApIHsKIAkJbXQyMDYwX3JlYWRyZWcocHJpdiwgUkVHX0ZNX0ZSRVEsICZwcml2LT5mbWZyZXEpOyAvLyBub3cgZmluZCBvdXQsIHdoYXQgaXMgZm1yZXEgdXNlZCBmb3IgOikKIAkJZHByaW50aygiY2FsaWJyYXRpb24gd2FzIHN1Y2Nlc3NmdWw6ICVkIiwgKGludClwcml2LT5mbWZyZXEpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jCmluZGV4IDM1Yjc2M2EuLjQ0NjA4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIweHguYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMHh4LmMKQEAgLTYsNyArNiw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAibXQyMHh4LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKaW5kZXggMzE1MjJkMi4uMDgwM2RhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDVzLmMKQEAgLTQwMDMsMTIgKzQwMDMsMTEgQEAKIAkvKiBDaGFuZ2UgdHVuZXIgZm9yIG5ldyBtb2R1bGF0aW9uIHR5cGUgaWYgcmVxZCAqLwogCWlmIChyZXFfbW9kZSAhPSBzdGF0ZS0+Y3VycmVudF9tb2RlKSB7CiAJCXN3aXRjaCAocmVxX21vZGUpIHsKLQkJY2FzZSBWU0JfODoKLQkJY2FzZSBRQU1fNjQ6Ci0JCWNhc2UgUUFNXzI1NjoKLQkJY2FzZSBRQU1fQVVUTzoKKwkJY2FzZSBNWExfQVRTQzoKKwkJY2FzZSBNWExfUUFNOgogCQkJcmVxX2J3ICA9IE1YTDUwMDVTX0JBTkRXSURUSF82TUhaOwogCQkJYnJlYWs7CisJCWNhc2UgTVhMX0RWQlQ6CiAJCWRlZmF1bHQ6CiAJCQkvKiBBc3N1bWUgRFZCLVQgKi8KIAkJCXN3aXRjaCAocGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCmluZGV4IDNlYzI4OTQuLjJkMDI2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA3dC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBteGw1MDA3dC5jIC0gZHJpdmVyIGZvciB0aGUgTWF4TGluZWFyIE14TDUwMDdUIHNpbGljb24gdHVuZXIKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjYsMjIgKzY2LDE3IEBACiAjZGVmaW5lIE1IeiAxMDAwMDAwCiAKIGVudW0gbXhsNTAwN3RfbW9kZSB7Ci0JTXhMX01PREVfT1RBX0RWQlRfQVRTQyAgICAgICAgPSAgICAwLAotCU14TF9NT0RFX09UQV9OVFNDX1BBTF9HSCAgICAgID0gICAgMSwKLQlNeExfTU9ERV9PVEFfUEFMX0lCICAgICAgICAgICA9ICAgIDIsCi0JTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMICAgPSAgICAzLAotCU14TF9NT0RFX09UQV9JU0RCVCAgICAgICAgICAgID0gICAgNCwKLQlNeExfTU9ERV9DQUJMRV9ESUdJVEFMICAgICAgICA9IDB4MTAsCi0JTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0ggICAgPSAweDExLAotCU14TF9NT0RFX0NBQkxFX1BBTF9JQiAgICAgICAgID0gMHgxMiwKLQlNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTCA9IDB4MTMsCi0JTXhMX01PREVfQ0FCTEVfU0NURTQwICAgICAgICAgPSAweDE0LAorCU14TF9NT0RFX0lTREJUICAgICA9ICAgIDAsCisJTXhMX01PREVfRFZCVCAgICAgID0gICAgMSwKKwlNeExfTU9ERV9BVFNDICAgICAgPSAgICAyLAorCU14TF9NT0RFX0NBQkxFICAgICA9IDB4MTAsCiB9OwogCiBlbnVtIG14bDUwMDd0X2NoaXBfdmVyc2lvbiB7CiAJTXhMX1VOS05PV05fSUQgICAgID0gMHgwMCwKIAlNeExfNTAwN19WMV9GMSAgICAgPSAweDExLAogCU14TF81MDA3X1YxX0YyICAgICA9IDB4MTIsCisJTXhMXzUwMDdfVjQgICAgICAgID0gMHgxNCwKIAlNeExfNTAwN19WMl8xMDBfRjEgPSAweDIxLAogCU14TF81MDA3X1YyXzEwMF9GMiA9IDB4MjIsCiAJTXhMXzUwMDdfVjJfMjAwX0YxID0gMHgyMywKQEAgLTk2LDY3ICs5MSw2MSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgc3RydWN0IHJlZ19wYWlyX3QgaW5pdF90YWJbXSA9IHsKLQl7IDB4MGIsIDB4NDQgfSwgLyogWFRBTCAqLwotCXsgMHgwYywgMHg2MCB9LCAvKiBJRiAqLwotCXsgMHgxMCwgMHgwMCB9LCAvKiBNSVNDICovCi0JeyAweDEyLCAweGNhIH0sIC8qIElEQUMgKi8KLQl7IDB4MTYsIDB4OTAgfSwgLyogTU9ERSAqLwotCXsgMHgzMiwgMHgzOCB9LCAvKiBNT0RFIEFuYWxvZy9EaWdpdGFsICovCi0JeyAweGQ4LCAweDE4IH0sIC8qIENMS19PVVRfRU5BQkxFICovCi0JeyAweDJjLCAweDM0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDRkLCAweDQwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdmLCAweDAyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDlhLCAweDUyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDQ4LCAweDVhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDc2LCAweDFhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDZhLCAweDQ4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY0LCAweDI4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY2LCAweGU2IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM1LCAweDBlIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdlLCAweDAxIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDgzLCAweDAwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA0LCAweDBiIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA1LCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCisJeyAweDAyLCAweDA2IH0sCisJeyAweDAzLCAweDQ4IH0sCisJeyAweDA1LCAweDA0IH0sCisJeyAweDA2LCAweDEwIH0sCisJeyAweDJlLCAweDE1IH0sIC8qIE9WRVJSSURFICovCisJeyAweDMwLCAweDEwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ1LCAweDU4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ4LCAweDE5IH0sIC8qIE9WRVJSSURFICovCisJeyAweDUyLCAweDAzIH0sIC8qIE9WRVJSSURFICovCisJeyAweDUzLCAweDQ0IH0sIC8qIE9WRVJSSURFICovCisJeyAweDZhLCAweDRiIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc4LCAweDE4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDdhLCAweDE3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDg1LCAweDA2IH0sIC8qIE9WRVJSSURFICovCisJeyAweDAxLCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCiAJeyAwLCAwIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVnX3BhaXJfdCBpbml0X3RhYl9jYWJsZVtdID0gewotCXsgMHgwYiwgMHg0NCB9LCAvKiBYVEFMICovCi0JeyAweDBjLCAweDYwIH0sIC8qIElGICovCi0JeyAweDEwLCAweDAwIH0sIC8qIE1JU0MgKi8KLQl7IDB4MTIsIDB4Y2EgfSwgLyogSURBQyAqLwotCXsgMHgxNiwgMHg5MCB9LCAvKiBNT0RFICovCi0JeyAweDMyLCAweDM4IH0sIC8qIE1PREUgQS9EICovCi0JeyAweDcxLCAweDNmIH0sIC8qIFRPUDEgKi8KLQl7IDB4NzIsIDB4M2YgfSwgLyogVE9QMiAqLwotCXsgMHg3NCwgMHgzZiB9LCAvKiBUT1AzICovCi0JeyAweGQ4LCAweDE4IH0sIC8qIENMS19PVVRfRU5BQkxFICovCi0JeyAweDJjLCAweDM0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDRkLCAweDQwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdmLCAweDAyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDlhLCAweDUyIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDQ4LCAweDVhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDc2LCAweDFhIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDZhLCAweDQ4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY0LCAweDI4IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY2LCAweGU2IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM1LCAweDBlIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDdlLCAweDAxIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA0LCAweDBiIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDY4LCAweGI0IH0sIC8qIE9WRVJSSURFICovCi0JeyAweDM2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCi0JeyAweDA1LCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCisJeyAweDAyLCAweDA2IH0sCisJeyAweDAzLCAweDQ4IH0sCisJeyAweDA1LCAweDA0IH0sCisJeyAweDA2LCAweDEwIH0sCisJeyAweDA5LCAweDNmIH0sCisJeyAweDBhLCAweDNmIH0sCisJeyAweDBiLCAweDNmIH0sCisJeyAweDJlLCAweDE1IH0sIC8qIE9WRVJSSURFICovCisJeyAweDMwLCAweDEwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ1LCAweDU4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDQ4LCAweDE5IH0sIC8qIE9WRVJSSURFICovCisJeyAweDUyLCAweDAzIH0sIC8qIE9WRVJSSURFICovCisJeyAweDUzLCAweDQ0IH0sIC8qIE9WRVJSSURFICovCisJeyAweDZhLCAweDRiIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc2LCAweDAwIH0sIC8qIE9WRVJSSURFICovCisJeyAweDc4LCAweDE4IH0sIC8qIE9WRVJSSURFICovCisJeyAweDdhLCAweDE3IH0sIC8qIE9WRVJSSURFICovCisJeyAweDg1LCAweDA2IH0sIC8qIE9WRVJSSURFICovCisJeyAweDAxLCAweDAxIH0sIC8qIFRPUF9NQVNURVJfRU5BQkxFICovCiAJeyAwLCAwIH0KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCByZWdfcGFpcl90IHJlZ19wYWlyX3JmdHVuZVtdID0gewotCXsgMHgxMSwgMHgwMCB9LCAvKiBhYm9ydCB0dW5lICovCi0JeyAweDEzLCAweDE1IH0sCi0JeyAweDE0LCAweDQwIH0sCi0JeyAweDE1LCAweDBlIH0sCi0JeyAweDExLCAweDAyIH0sIC8qIHN0YXJ0IHR1bmUgKi8KKwl7IDB4MGYsIDB4MDAgfSwgLyogYWJvcnQgdHVuZSAqLworCXsgMHgwYywgMHgxNSB9LAorCXsgMHgwZCwgMHg0MCB9LAorCXsgMHgwZSwgMHgwZSB9LAorCXsgMHgxZiwgMHg4NyB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMCwgMHgxZiB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMSwgMHg4NyB9LCAvKiBPVkVSUklERSAqLworCXsgMHgyMiwgMHgxZiB9LCAvKiBPVkVSUklERSAqLworCXsgMHg4MCwgMHgwMSB9LCAvKiBmcmVxIGRlcGVuZGVudCAqLworCXsgMHgwZiwgMHgwMSB9LCAvKiBzdGFydCB0dW5lICovCiAJeyAwLCAwIH0KIH07CiAKQEAgLTIyNyw2MyArMjE2LDIwIEBACiAJCQkJICAgczMyIGlmX2RpZmZfb3V0X2xldmVsKQogewogCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTXhMX01PREVfT1RBX0RWQlRfQVRTQzoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHgwZiwgMHgwNik7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzUsIDB4ZmYsIDB4MGUpOworCWNhc2UgTXhMX01PREVfQVRTQzoKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNiwgMHgxZiwgMHgxMik7CiAJCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX0lTREJUOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweDBmLCAweDA2KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzNSwgMHhmZiwgMHgxMik7CisJY2FzZSBNeExfTU9ERV9EVkJUOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA2LCAweDFmLCAweDExKTsKIAkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MDApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKKwljYXNlIE14TF9NT0RFX0lTREJUOgorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA2LCAweDFmLCAweDEwKTsKIAkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9PVEFfUEFMX0lCOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDEwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX1BBTF9EX1NFQ0FNX0tMOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDIwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfRElHSVRBTDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCisJY2FzZSBNeExfTU9ERV9DQUJMRToKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHgwOSwgMHhmZiwgMHhjMSk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MGEsIDB4ZmYsCiAJCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDAwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9QQUxfSUI6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTYsIDB4NzAsIDB4MTApOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDMyLCAweGZmLCAweDg1KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDIwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9TQ1RFNDA6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MzYsIDB4ZmYsIDB4MDgpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDY4LCAweGZmLCAweGJjKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MSwgMHhmZiwgMHgwMSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzIsIDB4ZmYsCi0JCQkgICAgIDggLSBpZl9kaWZmX291dF9sZXZlbCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzQsIDB4ZmYsIDB4MTcpOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDBiLCAweGZmLCAweDE3KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CkBAIC0zMDIsNDMgKzI0OCw0MyBAQAogCQl2YWwgPSAweDAwOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80XzVfTUhaOgotCQl2YWwgPSAweDIwOworCQl2YWwgPSAweDAyOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80XzU3X01IWjoKLQkJdmFsID0gMHgzMDsKKwkJdmFsID0gMHgwMzsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNV9NSFo6Ci0JCXZhbCA9IDB4NDA7CisJCXZhbCA9IDB4MDQ7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzVfMzhfTUhaOgotCQl2YWwgPSAweDUwOworCQl2YWwgPSAweDA1OwogCQlicmVhazsKIAljYXNlIE14TF9JRl82X01IWjoKLQkJdmFsID0gMHg2MDsKKwkJdmFsID0gMHgwNjsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNl8yOF9NSFo6Ci0JCXZhbCA9IDB4NzA7CisJCXZhbCA9IDB4MDc7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzlfMTkxNV9NSFo6Ci0JCXZhbCA9IDB4ODA7CisJCXZhbCA9IDB4MDg7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzM1XzI1X01IWjoKLQkJdmFsID0gMHg5MDsKKwkJdmFsID0gMHgwOTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfMzZfMTVfTUhaOgotCQl2YWwgPSAweGEwOworCQl2YWwgPSAweDBhOwogCQlicmVhazsKIAljYXNlIE14TF9JRl80NF9NSFo6Ci0JCXZhbCA9IDB4YjA7CisJCXZhbCA9IDB4MGI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW14bF9mYWlsKC1FSU5WQUwpOwogCQlyZXR1cm47CiAJfQotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MGMsIDB4ZjAsIHZhbCk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMiwgMHgwZiwgdmFsKTsKIAogCS8qIHNldCBpbnZlcnRlZCBJRiBvciBub3JtYWwgSUYgKi8KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDBjLCAweDA4LCBpbnZlcnRfaWYgPyAweDA4IDogMHgwMCk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMiwgMHgxMCwgaW52ZXJ0X2lmID8gMHgxMCA6IDB4MDApOwogCiAJcmV0dXJuOwogfQpAQCAtMzQ2LDU2ICsyOTIsNjggQEAKIHN0YXRpYyB2b2lkIG14bDUwMDd0X3NldF94dGFsX2ZyZXFfYml0cyhzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlLAogCQkJCQllbnVtIG14bDUwMDd0X3h0YWxfZnJlcSB4dGFsX2ZyZXEpCiB7Ci0JdTggdmFsOwotCiAJc3dpdGNoICh4dGFsX2ZyZXEpIHsKIAljYXNlIE14TF9YVEFMXzE2X01IWjoKLQkJdmFsID0gMHgwMDsgLyogc2VsZWN0IHh0YWwgZnJlcSAmIFJlZiBGcmVxICovCisJCS8qIHNlbGVjdCB4dGFsIGZyZXEgJiByZWYgZnJlcSAqLworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDAwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMCk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfTUhaOgotCQl2YWwgPSAweDExOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDEwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfMjVfTUhaOgotCQl2YWwgPSAweDIyOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDIwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMik7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjBfNDhfTUhaOgotCQl2YWwgPSAweDMzOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDMwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwMyk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjRfTUhaOgotCQl2YWwgPSAweDQ0OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDQwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNCk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjVfTUhaOgotCQl2YWwgPSAweDU1OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDUwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjVfMTRfTUhaOgotCQl2YWwgPSAweDY2OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDYwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNik7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjdfTUhaOgotCQl2YWwgPSAweDc3OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDcwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwNyk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMjhfOF9NSFo6Ci0JCXZhbCA9IDB4ODg7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4ODApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA4KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF8zMl9NSFo6Ci0JCXZhbCA9IDB4OTk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4OTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDA5KTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80MF9NSFo6Ci0JCXZhbCA9IDB4YWE7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YTApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBhKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80NF9NSFo6Ci0JCXZhbCA9IDB4YmI7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YjApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBiKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80OF9NSFo6Ci0JCXZhbCA9IDB4Y2M7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4YzApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBjKTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfWFRBTF80OV8zODExX01IWjoKLQkJdmFsID0gMHhkZDsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHhkMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlteGxfZmFpbCgtRUlOVkFMKTsKIAkJcmV0dXJuOwogCX0KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDBiLCAweGZmLCB2YWwpOwogCiAJcmV0dXJuOwogfQpAQCAtNDEyLDE2ICszNzAsMTEgQEAKIAlteGw1MDA3dF9zZXRfaWZfZnJlcV9iaXRzKHN0YXRlLCBjZmctPmlmX2ZyZXFfaHosIGNmZy0+aW52ZXJ0X2lmKTsKIAlteGw1MDA3dF9zZXRfeHRhbF9mcmVxX2JpdHMoc3RhdGUsIGNmZy0+eHRhbF9mcmVxX2h6KTsKIAotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTAsIDB4NDAsIGNmZy0+bG9vcF90aHJ1X2VuYWJsZSA8PCA2KTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA0LCAweDAxLCBjZmctPmxvb3BfdGhydV9lbmFibGUpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4MDgsIGNmZy0+Y2xrX291dF9lbmFibGUgPDwgMyk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHgwNywgY2ZnLT5jbGtfb3V0X2FtcCk7CiAKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweGQ4LCAweDA4LCBjZmctPmNsa19vdXRfZW5hYmxlIDw8IDMpOwotCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxMCwgMHgwNywgY2ZnLT5jbGtfb3V0X2FtcCk7Ci0KLQkvKiBzZXQgSURBQyB0byBhdXRvbWF0aWMgbW9kZSBjb250cm9sIGJ5IEFHQyAqLwotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTIsIDB4ODAsIDB4MDApOwotCi0JaWYgKG1vZGUgPj0gTXhMX01PREVfQ0FCTEVfRElHSVRBTCkgeworCWlmIChtb2RlID49IE14TF9NT0RFX0NBQkxFKSB7CiAJCWNvcHlfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCBzdGF0ZS0+dGFiX2luaXRfY2FibGUpOwogCQlyZXR1cm4gc3RhdGUtPnRhYl9pbml0X2NhYmxlOwogCX0gZWxzZQpAQCAtNDQ3LDcgKzQwMCw3IEBACiAJCQkgICAgICogYW5kIERJR19NT0RFSU5ERVhfQ1NGICovCiAJCWJyZWFrOwogCWNhc2UgTXhMX0JXXzdNSHo6Ci0JCXZhbCA9IDB4MjE7CisJCXZhbCA9IDB4MmE7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0JXXzhNSHo6CiAJCXZhbCA9IDB4M2Y7CkBAIC00NTYsNyArNDA5LDcgQEAKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDEzLCAweDNmLCB2YWwpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgwYywgMHgzZiwgdmFsKTsKIAogCXJldHVybjsKIH0KQEAgLTQ5Myw4ICs0NDYsMTEgQEAKIAlpZiAodGVtcCA+IDc4MTIpCiAJCWRpZ19yZl9mcmVxKys7CiAKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MTQsIDB4ZmYsICh1OClkaWdfcmZfZnJlcSk7Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDE1LCAweGZmLCAodTgpKGRpZ19yZl9mcmVxID4+IDgpKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MGQsIDB4ZmYsICh1OCkgZGlnX3JmX2ZyZXEpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgwZSwgMHhmZiwgKHU4KSAoZGlnX3JmX2ZyZXEgPj4gOCkpOworCisJaWYgKHJmX2ZyZXEgPj0gMzMzMDAwMDAwKQorCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4ODAsIDB4NDAsIDB4NDApOwogCiAJcmV0dXJuIHN0YXRlLT50YWJfcmZ0dW5lOwogfQpAQCAtNTUxLDkgKzUwNywxMCBAQAogc3RhdGljIGludCBteGw1MDA3dF9zb2Z0X3Jlc2V0KHN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUpCiB7CiAJdTggZCA9IDB4ZmY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5pMmNfcHJvcHMuYWRkciwgLmZsYWdzID0gMCwKLQkJCSAgICAgICAuYnVmID0gJmQsIC5sZW4gPSAxIH07Ci0KKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmkyY19wcm9wcy5hZGRyLCAuZmxhZ3MgPSAwLAorCQkuYnVmID0gJmQsIC5sZW4gPSAxCisJfTsKIAlpbnQgcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfcHJvcHMuYWRhcCwgJm1zZywgMSk7CiAKIAlpZiAocmV0ICE9IDEpIHsKQEAgLTU4MCw5ICs1MzcsNiBAQAogCWlmIChteGxfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CiAJbWRlbGF5KDEpOwotCi0JcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDJjLCAweDM1KTsKLQlteGxfZmFpbChyZXQpOwogZmFpbDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjE1LDcgKzU2OSw3IEBACiAJKnJmX2xvY2tlZCA9IDA7CiAJKnJlZl9sb2NrZWQgPSAwOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4Y2YsICZkKTsKKwlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhkOCwgJmQpOwogCWlmIChteGxfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTYyOCwzNyArNTgyLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBteGw1MDA3dF9jaGVja19yZl9pbnB1dF9wb3dlcihzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlLAotCQkJCQkgczMyICpyZl9pbnB1dF9sZXZlbCkKLXsKLQl1OCBkMSwgZDI7Ci0JaW50IHJldDsKLQotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGI3LCAmZDEpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhiZiwgJmQyKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JZDIgPSBkMiA+PiA0OwotCWlmIChkMiA+IDcpCi0JCWQyICs9IDB4ZjA7Ci0KLQkqcmZfaW5wdXRfbGV2ZWwgPSAoczMyKShkMSArIGQyIC0gMTEzKTsKLWZhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IG14bDUwMDd0X2dldF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqc3RhdHVzKQogewogCXN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKLQlpbnQgcmZfbG9ja2VkLCByZWZfbG9ja2VkOwotCXMzMiByZl9pbnB1dF9sZXZlbCA9IDA7Ci0JaW50IHJldDsKKwlpbnQgcmZfbG9ja2VkLCByZWZfbG9ja2VkLCByZXQ7CisKKwkqc3RhdHVzID0gMDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CkBAIC02NjksMTAgKzYwMCw4IEBACiAJbXhsX2RlYnVnKCIlcyVzIiwgcmZfbG9ja2VkID8gInJmIGxvY2tlZCAiIDogIiIsCiAJCSAgcmVmX2xvY2tlZCA/ICJyZWYgbG9ja2VkIiA6ICIiKTsKIAotCXJldCA9IG14bDUwMDd0X2NoZWNrX3JmX2lucHV0X3Bvd2VyKHN0YXRlLCAmcmZfaW5wdXRfbGV2ZWwpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0JbXhsX2RlYnVnKCJyZiBpbnB1dCBwb3dlcjogJWQiLCByZl9pbnB1dF9sZXZlbCk7CisJaWYgKChyZl9sb2NrZWQpIHx8IChyZWZfbG9ja2VkKSkKKwkJKnN0YXR1cyB8PSBUVU5FUl9TVEFUVVNfTE9DS0VEOwogZmFpbDoKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwpAQCAtNjk1LDExICs2MjQsMTEgQEAKIAkJc3dpdGNoIChwYXJhbXMtPnUudnNiLm1vZHVsYXRpb24pIHsKIAkJY2FzZSBWU0JfODoKIAkJY2FzZSBWU0JfMTY6Ci0JCQltb2RlID0gTXhMX01PREVfT1RBX0RWQlRfQVRTQzsKKwkJCW1vZGUgPSBNeExfTU9ERV9BVFNDOwogCQkJYnJlYWs7CiAJCWNhc2UgUUFNXzY0OgogCQljYXNlIFFBTV8yNTY6Ci0JCQltb2RlID0gTXhMX01PREVfQ0FCTEVfRElHSVRBTDsKKwkJCW1vZGUgPSBNeExfTU9ERV9DQUJMRTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJbXhsX2VycigibW9kdWxhdGlvbiBub3Qgc2V0ISIpOwpAQCAtNzIxLDcgKzY1MCw3IEBACiAJCQlteGxfZXJyKCJiYW5kd2lkdGggbm90IHNldCEiKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1vZGUgPSBNeExfTU9ERV9PVEFfRFZCVF9BVFNDOworCQltb2RlID0gTXhMX01PREVfRFZCVDsKIAl9IGVsc2UgewogCQlteGxfZXJyKCJtb2R1bGF0aW9uIHR5cGUgbm90IHN1cHBvcnRlZCEiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTIsOTYgKzY4MSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXhsNTAwN3Rfc2V0X2FuYWxvZ19wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCQkJICAgICAgc3RydWN0IGFuYWxvZ19wYXJhbWV0ZXJzICpwYXJhbXMpCi17Ci0Jc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwotCWVudW0gbXhsNTAwN3RfYndfbWh6IGJ3ID0gMDsgLyogRklYTUUgKi8KLQllbnVtIG14bDUwMDd0X21vZGUgY2JsX21vZGU7Ci0JZW51bSBteGw1MDA3dF9tb2RlIG90YV9tb2RlOwotCWNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgcmV0OwotCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKLQotI2RlZmluZSBjYWJsZSAxCi0JaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfTU4pIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g7Ci0JCW1vZGVfbmFtZSA9ICJNTiI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX0IpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfSUI7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9JQjsKLQkJbW9kZV9uYW1lID0gIkIiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9HSCkgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDsKLQkJbW9kZV9uYW1lID0gIkdIIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfUEFMX0kpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfSUI7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX1BBTF9JQjsKLQkJbW9kZV9uYW1lID0gIkkiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9ESykgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkRLIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTCkgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkwiOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9TRUNBTV9MQykgewotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX1BBTF9EX1NFQ0FNX0tMOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDsKLQkJbW9kZV9uYW1lID0gIkwnIjsKLQl9IGVsc2UgewotCQltb2RlX25hbWUgPSAieHgiOwotCQkvKiBGSVhNRSAqLwotCQljYmxfbW9kZSA9IE14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9OVFNDX1BBTF9HSDsKLQl9Ci0JbXhsX2RlYnVnKCJzZXR0aW5nIG14bDUwMDcgdG8gc3lzdGVtICVzIiwgbW9kZV9uYW1lKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bG9jayk7Ci0KLQlyZXQgPSBteGw1MDA3dF90dW5lcl9pbml0KHN0YXRlLCBjYWJsZSA/IGNibF9tb2RlIDogb3RhX21vZGUpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF90dW5lcl9yZl90dW5lKHN0YXRlLCBmcmVxLCBidyk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXN0YXRlLT5mcmVxdWVuY3kgPSBmcmVxOwotCXN0YXRlLT5iYW5kd2lkdGggPSAwOwotZmFpbDoKLQltdXRleF91bmxvY2soJnN0YXRlLT5sb2NrKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgbXhsNTAwN3RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CiAJaW50IHJldDsKLQl1OCBkOwogCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKIAotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweDA1LCAmZCk7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwNSwgZCB8IDB4MDEpOworCS8qIHdha2UgZnJvbSBzdGFuZGJ5ICovCisJcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAweDAxKTsKIAlteGxfZmFpbChyZXQpOwotZmFpbDoKKwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAKQEAgLTg1MiwxOCArNzA1LDE2IEBACiB7CiAJc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCWludCByZXQ7Ci0JdTggZDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHgwNSwgJmQpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MDUsIGQgJiB+MHgwMSk7CisJLyogZW50ZXIgc3RhbmRieSBtb2RlICovCisJcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDAxLCAweDAwKTsKIAlteGxfZmFpbChyZXQpOwotZmFpbDoKKwlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MGYsIDB4MDApOworCW14bF9mYWlsKHJldCk7CisKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCkBAIC05MTEsNyArNzYyLDYgQEAKIAkuaW5pdCAgICAgICAgICAgICAgPSBteGw1MDA3dF9pbml0LAogCS5zbGVlcCAgICAgICAgICAgICA9IG14bDUwMDd0X3NsZWVwLAogCS5zZXRfcGFyYW1zICAgICAgICA9IG14bDUwMDd0X3NldF9wYXJhbXMsCi0JLnNldF9hbmFsb2dfcGFyYW1zID0gbXhsNTAwN3Rfc2V0X2FuYWxvZ19wYXJhbXMsCiAJLmdldF9zdGF0dXMgICAgICAgID0gbXhsNTAwN3RfZ2V0X3N0YXR1cywKIAkuZ2V0X2ZyZXF1ZW5jeSAgICAgPSBteGw1MDA3dF9nZXRfZnJlcXVlbmN5LAogCS5nZXRfYmFuZHdpZHRoICAgICA9IG14bDUwMDd0X2dldF9iYW5kd2lkdGgsCkBAIC05MjQsNyArNzc0LDcgQEAKIAlpbnQgcmV0OwogCXU4IGlkOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4ZDMsICZpZCk7CisJcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4ZDksICZpZCk7CiAJaWYgKG14bF9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKIApAQCAtOTQ3LDggKzc5NywxMiBAQAogCWNhc2UgTXhMXzUwMDdfVjJfMjAwX0YyOgogCQluYW1lID0gIk14TDUwMDcudjIuMjAwLmYyIjsKIAkJYnJlYWs7CisJY2FzZSBNeExfNTAwN19WNDoKKwkJbmFtZSA9ICJNeEw1MDA3VC52NCI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW5hbWUgPSAiTXhMNTAwN1QiOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5rbm93biByZXYgKCUwMngpXG4iLCBfX2Z1bmNfXywgaWQpOwogCQlpZCA9IE14TF9VTktOT1dOX0lEOwogCX0KIAlzdGF0ZS0+Y2hpcF9pZCA9IGlkOwpAQCAtOTc1LDcgKzgyOSw3IEBACiAJbXV0ZXhfbG9jaygmbXhsNTAwN3RfbGlzdF9tdXRleCk7CiAJaW5zdGFuY2UgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUsIHN0YXRlLAogCQkJCQkgICAgICBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCwKLQkJCQkJICAgICAgaTJjLCBhZGRyLCAibXhsNTAwNyIpOworCQkJCQkgICAgICBpMmMsIGFkZHIsICJteGw1MDA3dCIpOwogCXN3aXRjaCAoaW5zdGFuY2UpIHsKIAljYXNlIDA6CiAJCWdvdG8gZmFpbDsKQEAgLTEwMTgsNyArODcyLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTWF4TGluZWFyIE14TDUwMDdUIFNpbGljb24gSUMgdHVuZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjIiKTsKIAogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IDZmYjViNDUuLmZjNzZjMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTQ5MCw5ICs0OTAsOSBAQAogCQl0ZGFfZGJnKCJzbSA9ICVkLCBzbV9sdCA9ICVkLCBzbV94dCA9ICVkXG4iLCBzbSwgc21fbHQsIHNtX3h0KTsKIAogCXJlZ3NbUl9FUDNdICAmPSB+MHhlMDsgLyogY2xlYXIgc20sIHNtX2x0LCBzbV94dCAqLwotCXJlZ3NbUl9FUDNdICB8PSBzbSAgICA/ICgxIDw8IDcpIDogMCB8Ci0JCQlzbV9sdCA/ICgxIDw8IDYpIDogMCB8Ci0JCQlzbV94dCA/ICgxIDw8IDUpIDogMDsKKwlyZWdzW1JfRVAzXSAgfD0gKHNtICAgID8gKDEgPDwgNykgOiAwKSB8CisJCQkoc21fbHQgPyAoMSA8PCA2KSA6IDApIHwKKwkJCShzbV94dCA/ICgxIDw8IDUpIDogMCk7CiAKIAlyZXR1cm4gdGRhMTgyNzFfd3JpdGVfcmVncyhmZSwgUl9FUDMsIDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwppbmRleCAxYjQ4YjVkLi5iMTA5MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYwpAQCAtODE4LDYgKzgxOCwzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IHRkYTE4MjcxX2FnYyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhMTgyNzFfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwcml2LT5jb25maWcpIHsKKwljYXNlIDA6CisJCS8qIG5vIExOQSAqLworCQl0ZGFfZGJnKCJubyBhZ2MgY29uZmlndXJhdGlvbiBwcm92aWRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJLyogc3dpdGNoIHdpdGggR1BJTyBvZiBzYWE3MTN4ICovCisJCXRkYV9kYmcoImludm9raW5nIGNhbGxiYWNrXG4iKTsKKwkJaWYgKGZlLT5jYWxsYmFjaykKKwkJCXJldCA9IGZlLT5jYWxsYmFjayhwcml2LT5pMmNfcHJvcHMuYWRhcC0+YWxnb19kYXRhLAorCQkJCQkgICBEVkJfRlJPTlRFTkRfQ09NUE9ORU5UX1RVTkVSLAorCQkJCQkgICBUREExODI3MV9DQUxMQkFDS19DTURfQUdDX0VOQUJMRSwKKwkJCQkJICAgcHJpdi0+bW9kZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwljYXNlIDI6CisJZGVmYXVsdDoKKwkJLyogbi9hIC0gY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KKwkJdGRhX2VycigidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbjogJWRcbiIsIHByaXYtPmNvbmZpZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHRkYTE4MjcxX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXBfaXRlbSAqbWFwLCB1MzIgZnJlcSwgdTMyIGJ3KQogewpAQCAtODI3LDYgKzg1OSwxMCBAQAogCXRkYV9kYmcoImZyZXEgPSAlZCwgaWZjID0gJWQsIGJ3ID0gJWQsIGFnY19tb2RlID0gJWQsIHN0ZCA9ICVkXG4iLAogCQlmcmVxLCBtYXAtPmlmX2ZyZXEsIGJ3LCBtYXAtPmFnY19tb2RlLCBtYXAtPnN0ZCk7CiAKKwlyZXQgPSB0ZGExODI3MV9hZ2MoZmUpOworCWlmICh0ZGFfZmFpbChyZXQpKQorCQl0ZGFfd2FybigiZmFpbGVkIHRvIGNvbmZpZ3VyZSBhZ2NcbiIpOworCiAJcmV0ID0gdGRhMTgyNzFfaW5pdChmZSk7CiAJaWYgKHRkYV9mYWlsKHJldCkpCiAJCWdvdG8gZmFpbDsKQEAgLTExNTksNiArMTE5NSw3IEBACiAJCS8qIG5ldyB0dW5lciBpbnN0YW5jZSAqLwogCQlwcml2LT5nYXRlID0gKGNmZykgPyBjZmctPmdhdGUgOiBUREExODI3MV9HQVRFX0FVVE87CiAJCXByaXYtPnJvbGUgPSAoY2ZnKSA/IGNmZy0+cm9sZSA6IFREQTE4MjcxX01BU1RFUjsKKwkJcHJpdi0+Y29uZmlnID0gKGNmZykgPyBjZmctPmNvbmZpZyA6IDA7CiAJCXByaXYtPmNhbF9pbml0aWFsaXplZCA9IGZhbHNlOwogCQltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaCBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKaW5kZXggODFhNzM5My4uNzRiZWIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCkBAIC05MSwxMSArOTEsNiBAQAogCVREQTE4MjcxX0NBTF9QTEwsCiB9OwogCi1lbnVtIHRkYTE4MjcxX21vZGUgewotCVREQTE4MjcxX0FOQUxPRywKLQlUREExODI3MV9ESUdJVEFMLAotfTsKLQogc3RydWN0IHRkYTE4MjcxX21hcF9sYXlvdXQ7CiAKIGVudW0gdGRhMTgyNzFfdmVyIHsKQEAgLTExNCw2ICsxMDksNyBAQAogCWVudW0gdGRhMTgyNzFfaTJjX2dhdGUgZ2F0ZTsKIAllbnVtIHRkYTE4MjcxX3ZlciBpZDsKIAorCXVuc2lnbmVkIGludCBjb25maWc7IC8qIGludGVyZmFjZSB0byBzYWE3MTN4IC8gdGRhODI5eCAqLwogCXVuc2lnbmVkIGludCB0bV9yZmNhbDsKIAl1bnNpZ25lZCBpbnQgY2FsX2luaXRpYWxpemVkOjE7CiAJdW5zaWduZWQgaW50IHNtYWxsX2kyYzoxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAppbmRleCA3ZGI5ODMxLi41M2E5ODkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEuaApAQCAtNzksNiArNzksMTYgQEAKIAogCS8qIHNvbWUgaTJjIHByb3ZpZGVycyBjYW50IHdyaXRlIGFsbCAzOSByZWdpc3RlcnMgYXQgb25jZSAqLwogCXVuc2lnbmVkIGludCBzbWFsbF9pMmM6MTsKKworCS8qIGludGVyZmFjZSB0byBzYWE3MTN4IC8gdGRhODI5eCAqLworCXVuc2lnbmVkIGludCBjb25maWc7Cit9OworCisjZGVmaW5lIFREQTE4MjcxX0NBTExCQUNLX0NNRF9BR0NfRU5BQkxFIDAKKworZW51bSB0ZGExODI3MV9tb2RlIHsKKwlUREExODI3MV9BTkFMT0cgPSAwLAorCVREQTE4MjcxX0RJR0lUQUwsCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEpIHx8IChkZWZpbmVkKENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCmluZGV4IGY0ZDkzMWYuLjM2YTdiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYwpAQCAtMTMyLDExICsxMzIsMzEgQEAKIAl7IC5sb21heCA9ICAgICAgICAgMCwgLnNwZCA9IDAsIC5icyA9IDAsIC5icCA9IDAsIC5jcCA9IDAsIC5nYzMgPSAwLCAuZGl2MXA1ID0gMH0KIH07CiAKK3N0YXRpYyBpbnQgdHVuZXJfdHJhbnNmZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgIHN0cnVjdCBpMmNfbXNnICptc2csCisJCQkgIGNvbnN0IGludCBzaXplKQoreworCWludCByYzsKKwlzdHJ1Y3QgdGRhODI3eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCBtc2csIHNpemUpOworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwlpZiAocmMgPj0gMCAmJiByYyAhPSBzaXplKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGludCB0ZGE4Mjd4b19zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAl1OCBidWZbMTRdOworCWludCByYzsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKQEAgLTE4MywyNyArMjAzLDI5IEBACiAJYnVmWzEzXSA9IDB4NDA7CiAKIAltc2cubGVuID0gMTQ7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7Ci0JCXByaW50aygiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgcHJpdi0+aTJjX2FkZHIgPDwgMSk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKKwogCW1zbGVlcCg1MDApOwogCS8qIGNvcnJlY3QgQ1AgdmFsdWUgKi8KIAlidWZbMF0gPSAweDMwOwogCWJ1ZlsxXSA9IDB4NTAgKyB0ZGE4Mjd4X3RhYmxlW2ldLmNwOwogCW1zZy5sZW4gPSAyOwogCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAJcHJpdi0+YmFuZHdpZHRoID0gKGZlLT5vcHMuaW5mby50eXBlID09IEZFX09GRE0pID8gcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoIDogMDsKIAogCXJldHVybiAwOworCitlcnI6CisJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IHdyaXRlIHRvIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKKwkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCB0ZGE4Mjd4b19zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKQEAgLTIxNCw5ICsyMzYsNyBAQAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCiAJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCWlmIChwcml2LT5jZmcgJiYgcHJpdi0+Y2ZnLT5zbGVlcCkKIAkJcHJpdi0+Y2ZnLT5zbGVlcChmZSk7CkBAIC0yNjYsNDQgKzI4Niw0NCBAQAogCiAJbXNnLmJ1ZiA9IHR1bmVyX3JlZzsKIAltc2cubGVuID0gODsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zZy5idWYgPSByZWcyOwogCW1zZy5sZW4gPSAyOwogCXJlZzJbMF0gPSAweDgwOwogCXJlZzJbMV0gPSAwOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcmVnMlswXSA9IDB4NjA7CiAJcmVnMlsxXSA9IDB4YmY7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgMHg4MDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCgxKTsKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdICsgNDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCgxKTsKIAlyZWcyWzBdID0gMHgzMDsKIAlyZWcyWzFdID0gdHVuZXJfcmVnWzRdOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNsZWVwKDU1MCk7CiAJcmVnMlswXSA9IDB4MzA7CiAJcmVnMlsxXSA9ICh0dW5lcl9yZWdbNF0gJiAweGZjKSArIHRkYTgyN3hfdGFibGVbaV0uY3A7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHg2MDsKIAlyZWcyWzFdID0gMHgzZjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXJlZzJbMF0gPSAweDgwOwogCXJlZzJbMV0gPSAweDA4OyAgIC8qIFZzeW5jIGVuICovCi0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIApAQCAtMzE3LDcgKzMzNyw3IEBACiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgIC5idWYgPSBkYXRhLCAubGVuID0gMn07CiAKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMzEsNyArMzUxLDcgQEAKIAl1OCAgZ2MzOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCB0ZGE4Mjd4YV9kYXRhIHRkYTgyN3hhX2R2YnRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9kdmJ0W10gPSB7CiAJeyAubG9tYXggPSAgNTY4NzUwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LAogCXsgLmxvbWF4ID0gIDY3MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKIAl7IC5sb21heCA9ICA4MTI1MDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCkBAIC0zNjEsNiArMzgxLDM2IEBACiAJeyAubG9tYXggPSAgICAgICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9CiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfZHZiY1tdID0geworCXsgLmxvbWF4ID0gIDUwMTI1MDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSA0LCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA1ODUwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gNCwgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAgNjkyNTAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gIDgzNjI1MDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA5NzUwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAxMDAyNTAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTE3MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDEzODUwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxNjcyNTAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTg3MDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDIwMDUwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAyMzQwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMiwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gMjc3MDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDIsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDMyNTAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAzMzQ1MDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMywgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gNDAxMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDQ2ODAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA1MzUwMDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNTU0MDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDYzODAwMDAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA2NjkwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAyLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNzIwMDAwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDgwMjAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA4MzUwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gODg1MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDkxMTAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAgICAgICAgIDAsIC5zdmNvID0gMCwgLnNwZCA9IDAsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDB9Cit9OworCiBzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfYW5hbG9nW10gPSB7CiAJeyAubG9tYXggPSAgNTY4NzUwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDN9LAogCXsgLmxvbWF4ID0gIDY3MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAzfSwKQEAgLTM5OCwxMyArNDQ4LDggQEAKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKIAogCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOwotCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlpZiAocHJpdi0+Y2ZnICYmIHByaXYtPmNmZy0+c2xlZXApCiAJCXByaXYtPmNmZy0+c2xlZXAoZmUpOwpAQCAtNDU1LDcgKzUwMCw3IEBACiAJCWJ1ZlsxXSA9IGhpZ2ggPyAwIDogMTsKIAkJaWYgKHByaXYtPmNmZy0+Y29uZmlnID09IDIpCiAJCQlidWZbMV0gPSBoaWdoID8gMSA6IDA7Ci0JCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSAzOiAvKiBzd2l0Y2ggd2l0aCBHUElPIG9mIHNhYTcxM3ggKi8KIAkJaWYgKGZlLT5jYWxsYmFjaykKQEAgLTQ2OSwxMiArNTE0LDEzIEBACiAJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CiAJc3RydWN0IHRkYTgyN3hfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXN0cnVjdCB0ZGE4Mjd4YV9kYXRhICpmcmVxdWVuY3lfbWFwID0gdGRhODI3eGFfZHZidDsKIAl1OCBidWZbMTFdOwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJICAgICAgIC5idWYgPSBidWYsIC5sZW4gPSBzaXplb2YoYnVmKSB9OwogCi0JaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXE7CisJaW50IGksIHR1bmVyX2ZyZXEsIGlmX2ZyZXEsIHJjOwogCXUzMiBOOwogCiAJZHByaW50aygiJXM6XG4iLCBfX2Z1bmNfXyk7CkBAIC00OTUsNTYgKzU0MSw1OCBAQAogCX0KIAl0dW5lcl9mcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKyBpZl9mcmVxOwogCisJaWYgKGZlLT5vcHMuaW5mby50eXBlID09IEZFX1FBTSkgeworCQlkcHJpbnRrKCIlcyBzZWxlY3QgdGRhODI3eGFfZHZiY1xuIiwgX19mdW5jX18pOworCQlmcmVxdWVuY3lfbWFwID0gdGRhODI3eGFfZHZiYzsKKwl9CisKIAlpID0gMDsKLQl3aGlsZSAodGRhODI3eGFfZHZidFtpXS5sb21heCA8IHR1bmVyX2ZyZXEpIHsKLQkJaWYodGRhODI3eGFfZHZidFtpICsgMV0ubG9tYXggPT0gMCkKKwl3aGlsZSAoZnJlcXVlbmN5X21hcFtpXS5sb21heCA8IHR1bmVyX2ZyZXEpIHsKKwkJaWYgKGZyZXF1ZW5jeV9tYXBbaSArIDFdLmxvbWF4ID09IDApCiAJCQlicmVhazsKIAkJaSsrOwogCX0KIAotCU4gPSAoKHR1bmVyX2ZyZXEgKyAzMTI1MCkgLyA2MjUwMCkgPDwgdGRhODI3eGFfZHZidFtpXS5zcGQ7CisJTiA9ICgodHVuZXJfZnJlcSArIDMxMjUwKSAvIDYyNTAwKSA8PCBmcmVxdWVuY3lfbWFwW2ldLnNwZDsKIAlidWZbMF0gPSAwOyAgICAgICAgICAgIC8vIHN1YmFkZHJlc3MKIAlidWZbMV0gPSBOID4+IDg7CiAJYnVmWzJdID0gTiAmIDB4ZmY7CiAJYnVmWzNdID0gMDsKIAlidWZbNF0gPSAweDE2OwotCWJ1Zls1XSA9ICh0ZGE4Mjd4YV9kdmJ0W2ldLnNwZCA8PCA1KSArICh0ZGE4Mjd4YV9kdmJ0W2ldLnN2Y28gPDwgMykgKwotCQkJdGRhODI3eGFfZHZidFtpXS5zYnM7Ci0JYnVmWzZdID0gMHg0YiArICh0ZGE4Mjd4YV9kdmJ0W2ldLmdjMyA8PCA0KTsKKwlidWZbNV0gPSAoZnJlcXVlbmN5X21hcFtpXS5zcGQgPDwgNSkgKyAoZnJlcXVlbmN5X21hcFtpXS5zdmNvIDw8IDMpICsKKwkJCWZyZXF1ZW5jeV9tYXBbaV0uc2JzOworCWJ1Zls2XSA9IDB4NGIgKyAoZnJlcXVlbmN5X21hcFtpXS5nYzMgPDwgNCk7CiAJYnVmWzddID0gMHgxYzsKIAlidWZbOF0gPSAweDA2OwogCWJ1Zls5XSA9IDB4MjQ7CiAJYnVmWzEwXSA9IDB4MDA7CiAJbXNnLmxlbiA9IDExOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgewotCQlwcmludGsoIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAotCQkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CisKIAlidWZbMF0gPSAweDkwOwogCWJ1ZlsxXSA9IDB4ZmY7CiAJYnVmWzJdID0gMHg2MDsKIAlidWZbM10gPSAweDAwOwogCWJ1Zls0XSA9IDB4NTk7ICAvLyBscHNlbCwgZm9yIDZNSHogKyAyCiAJbXNnLmxlbiA9IDU7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJYnVmWzBdID0gMHhhMDsKIAlidWZbMV0gPSAweDQwOwogCW1zZy5sZW4gPSAyOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCW1zbGVlcCgxMSk7CiAJbXNnLmZsYWdzID0gSTJDX01fUkQ7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCW1zZy5mbGFncyA9IDA7CiAKIAlidWZbMV0gPj49IDQ7CkBAIC01NTMsNDkgKzYwMSw1NSBAQAogCQl0ZGE4Mjd4YV9sbmFfZ2FpbihmZSwgMCwgTlVMTCk7CiAJCWJ1ZlswXSA9IDB4NjA7CiAJCWJ1ZlsxXSA9IDB4MGM7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCQlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZXJyOwogCX0KIAogCWJ1ZlswXSA9IDB4YzA7CiAJYnVmWzFdID0gMHg5OTsgICAgLy8gbHBzZWwsIGZvciA2TUh6ICsgMgotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCWJ1ZlswXSA9IDB4NjA7CiAJYnVmWzFdID0gMHgzYzsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAkvKiBjb3JyZWN0IENQIHZhbHVlICovCiAJYnVmWzBdID0gMHgzMDsKLQlidWZbMV0gPSAweDEwICsgdGRhODI3eGFfZHZidFtpXS5zY3I7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSA9IDB4MTAgKyBmcmVxdWVuY3lfbWFwW2ldLnNjcjsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCW1zbGVlcCgxNjMpOwogCWJ1ZlswXSA9IDB4YzA7CiAJYnVmWzFdID0gMHgzOTsgIC8vIGxwc2VsLCBmb3IgNk1IeiArIDIKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAltc2xlZXAoMyk7CiAJLyogZnJlZXplIEFHQzEgKi8KIAlidWZbMF0gPSAweDUwOwotCWJ1ZlsxXSA9IDB4NGYgKyAodGRhODI3eGFfZHZidFtpXS5nYzMgPDwgNCk7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCWJ1ZlsxXSA9IDB4NGYgKyAoZnJlcXVlbmN5X21hcFtpXS5nYzMgPDwgNCk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIAlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOwogCisKIAlyZXR1cm4gMDsKKworZXJyOgorCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCisJICAgICAgIF9fZnVuY19fLCBwcml2LT5pMmNfYWRkciA8PCAxKTsKKwlyZXR1cm4gcmM7CiB9CiAKIApAQCAtNjQzLDcgKzY5Nyw3IEBACiAJdHVuZXJfcmVnWzldID0gMHgyMDsKIAl0dW5lcl9yZWdbMTBdID0gMHgwMDsKIAltc2cubGVuID0gMTE7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweDkwOwogCXR1bmVyX3JlZ1sxXSA9IDB4ZmY7CkBAIC02NTEsMTkgKzcwNSwxOSBAQAogCXR1bmVyX3JlZ1szXSA9IDA7CiAJdHVuZXJfcmVnWzRdID0gMHg5OSArIChwcml2LT5scHNlbCA8PCAxKTsKIAltc2cubGVuID0gNTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YTA7CiAJdHVuZXJfcmVnWzFdID0gMHhjMDsKIAltc2cubGVuID0gMjsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4MzA7CiAJdHVuZXJfcmVnWzFdID0gMHgxMCArIHRkYTgyN3hhX2FuYWxvZ1tpXS5zY3I7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2cuZmxhZ3MgPSBJMkNfTV9SRDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAltc2cuZmxhZ3MgPSAwOwogCXR1bmVyX3JlZ1sxXSA+Pj0gNDsKIAlkcHJpbnRrKCJBR0MyIGdhaW4gaXM6ICVkXG4iLCB0dW5lcl9yZWdbMV0pOwpAQCAtNjczLDI0ICs3MjcsMjQgQEAKIAltc2xlZXAoMTAwKTsKIAl0dW5lcl9yZWdbMF0gPSAweDYwOwogCXR1bmVyX3JlZ1sxXSA9IDB4M2M7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2xlZXAoMTYzKTsKIAl0dW5lcl9yZWdbMF0gPSAweDUwOwogCXR1bmVyX3JlZ1sxXSA9IDB4OGYgKyAodGRhODI3eGFfYW5hbG9nW2ldLmdjMyA8PCA0KTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4ODA7CiAJdHVuZXJfcmVnWzFdID0gMHgyODsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YjA7CiAJdHVuZXJfcmVnWzFdID0gMHgwMTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXR1bmVyX3JlZ1swXSA9IDB4YzA7CiAJdHVuZXJfcmVnWzFdID0gMHgxOSArIChwcml2LT5scHNlbCA8PCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OwogCkBAIC03MDMsNyArNzU3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbXSA9IHsweDgwLCAweDJjfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgIC5idWYgPSBkYXRhLCAubGVuID0gMn07Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNzkyLDE2ICs4NDYsMTkgQEAKIH07CiAKIHN0YXRpYyBpbnQgdGRhODI3eF9wcm9iZV92ZXJzaW9uKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewl1OCBkYXRhOworeworCXU4IGRhdGE7CisJaW50IHJjOwogCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELAogCQkJICAgICAgIC5idWYgPSAmZGF0YSwgLmxlbiA9IDEgfTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKKworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCisJaWYgKHJjIDwgMCkgewogCQlwcmludGsoIiVzOiBjb3VsZCBub3QgcmVhZCBmcm9tIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBtc2cuYWRkciA8PCAxKTsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiByYzsKIAl9CiAJaWYgKChkYXRhICYgMHgzYykgPT0gMCkgewogCQlkcHJpbnRrKCJ0ZGE4Mjd4IHR1bmVyIGZvdW5kXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCmluZGV4IDRiODY2MmUuLjA2NGQxNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwpAQCAtMjIsNyArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgInRkYTgyOTAuaCIKICNpbmNsdWRlICJ0ZGE4Mjd4LmgiCkBAIC01NjYsOCArNTY2LDExIEBACiAJdTggZGF0YTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gJmRhdGEsIC5sZW4gPSAxIH07CiAKLQlpZiAoTlVMTCA9PSBhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKQorCWlmICghYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybCkgeworCQlwcmludGsoS0VSTl9FUlIgInRkYTgyOTA6IG5vIGdhdGUgY29udHJvbCB3ZXJlIHByb3ZpZGVkIVxuIik7CisKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybChmZSwgMSk7CiAKQEAgLTYxNSwxMSArNjE4LDEzIEBACiAKIAlpZiAocmV0ICE9IDEpIHsKIAkJdHVuZXJfd2FybigidHVuZXIgYWNjZXNzIGZhaWxlZCFcbiIpOworCQlhbmFsb2dfb3BzLT5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCiAJaWYgKChkYXRhID09IDB4ODMpIHx8IChkYXRhID09IDB4ODQpKSB7CiAJCXByaXYtPnZlciB8PSBUREExODI3MTsKKwkJdGRhODI5eF90ZGExODI3MV9jb25maWcuY29uZmlnID0gcHJpdi0+Y2ZnLmNvbmZpZzsKIAkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlLCBwcml2LT50ZGE4Mjd4X2FkZHIsCiAJCQkgICBwcml2LT5pMmNfcHJvcHMuYWRhcCwgJnRkYTgyOXhfdGRhMTgyNzFfY29uZmlnKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzYxLmMKaW5kZXggYjIzZGFkZS4uNjBlZDg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2MS5jCkBAIC05LDcgKzksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAidGVhNTc2MS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzY3LmMKaW5kZXggMWY1NjQ2My4uMjIzYTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2Ny5jCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSAidHVuZXItaTJjLmgiCiAjaW5jbHVkZSAidGVhNTc2Ny5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKaW5kZXggNDkzY2U5My4uYjU0NTk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYwpAQCAtNzM5LDcgKzczOSwxMCBAQAogCWRwcmludGsoMSwgIiVzKCkgZnJlcXVlbmN5PSVkIChpbiB1bml0cyBvZiA2Mi41a2h6KVxuIiwKIAkJX19mdW5jX18sIHBhcmFtcy0+ZnJlcXVlbmN5KTsKIAotCXByaXYtPnJmX21vZGUgPSBYQ19SRl9NT0RFX0NBQkxFOyAvKiBGaXggbWU6IGl0IGNvdWxkIGJlIGFpci4gKi8KKwkvKiBGaXggbWU6IGl0IGNvdWxkIGJlIGFpci4gKi8KKwlwcml2LT5yZl9tb2RlID0gcGFyYW1zLT5tb2RlOworCWlmIChwYXJhbXMtPm1vZGUgPiBYQ19SRl9NT0RFX0NBQkxFKQorCQlwcml2LT5yZl9tb2RlID0gWENfUkZfTU9ERV9DQUJMRTsKIAogCS8qIHBhcmFtcy0+ZnJlcXVlbmN5IGlzIGluIHVuaXRzIG9mIDYyLjVraHogKi8KIAlwcml2LT5mcmVxX2h6ID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKQEAgLTk3MCw4ICs5NzMsNiBAQAogCWNhc2UgMToKIAkJLyogbmV3IHR1bmVyIGluc3RhbmNlICovCiAJCXByaXYtPmJhbmR3aWR0aCA9IEJBTkRXSURUSF82X01IWjsKLQkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7Ci0KIAkJZmUtPnR1bmVyX3ByaXYgPSBwcml2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTgwLDYgKzk4MSwxMyBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAocHJpdi0+aWZfa2h6ID09IDApIHsKKwkJLyogSWYgdGhlIElGIGhhc24ndCBiZWVuIHNldCB5ZXQsIHVzZSB0aGUgdmFsdWUgcHJvdmlkZWQgYnkKKwkJICAgdGhlIGNhbGxlciAob2NjdXJzIGluIGh5YnJpZCBkZXZpY2VzIHdoZXJlIHRoZSBhbmFsb2cKKwkJICAgY2FsbCB0byB4YzUwMDBfYXR0YWNoIG9jY3VycyBiZWZvcmUgdGhlIGRpZ2l0YWwgc2lkZSkgKi8KKwkJcHJpdi0+aWZfa2h6ID0gY2ZnLT5pZl9raHo7CisJfQorCiAJLyogQ2hlY2sgaWYgZmlybXdhcmUgaGFzIGJlZW4gbG9hZGVkLiBJdCBpcyBwb3NzaWJsZSB0aGF0IGFub3RoZXIKIAkgICBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyIGhhcyBsb2FkZWQgdGhlIGZpcm13YXJlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGE4YzYyNDkuLjllNTc4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTEzLDcgKzEzLDcgQEAKIAlzZWxlY3QgRFZCX1RVTkVSX0lURDEwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMjMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVTkVSX0NYMjQxMTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgZGlnaXRhbCBUViByZWNlaXZlciBjaGlwIG1hZGUgYnkgQjJDMiBJbmMuIGluY2x1ZGVkIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZQppbmRleCBkOWRiMDY2Li5iOTdjZjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUKQEAgLTIsNyArMiw2IEBACiAJZmxleGNvcC1zcmFtLm8gZmxleGNvcC1lZXByb20ubyBmbGV4Y29wLW1pc2MubyBmbGV4Y29wLWh3LWZpbHRlci5vCiBvYmotJChDT05GSUdfRFZCX0IyQzJfRkxFWENPUCkgKz0gYjJjMi1mbGV4Y29wLm8KIAotCiBpZm5lcSAoJChDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0kpLCkKIGIyYzItZmxleGNvcC1vYmpzICs9IGZsZXhjb3AtZG1hLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKaW5kZXggOGNlMDYzMy4uM2UxYzQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaApAQCAtMjgsMTEgKzI4LDE0IEBACiAKIC8qIFN0ZWFsIGZyb20gdXNiLmggKi8KICN1bmRlZiBlcnIKLSNkZWZpbmUgZXJyKGZvcm1hdCwgIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICAgICBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCiAjdW5kZWYgaW5mbwotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICAgIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKKyNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0lORk8gRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQogI3VuZGVmIHdhcm4KLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9XQVJOSU5HIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKIAogc3RydWN0IGZsZXhjb3BfZG1hIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTkxLDE2ICs5NCwxNCBAQAogCWludCBmdWxsdHNfc3RyZWFtaW5nX3N0YXRlOwogCiAJLyogYnVzIHNwZWNpZmljIGNhbGxiYWNrcyAqLwotCWZsZXhjb3BfaWJpX3ZhbHVlICgqcmVhZF9pYmlfcmVnKSAgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLCBmbGV4Y29wX2liaV9yZWdpc3Rlcik7Ci0JaW50ICAgICAgICAgICAgICAgKCp3cml0ZV9pYmlfcmVnKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosIGZsZXhjb3BfaWJpX3JlZ2lzdGVyLCBmbGV4Y29wX2liaV92YWx1ZSk7Ci0KLQotCWludCAoKmkyY19yZXF1ZXN0KSAoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIqLAorCWZsZXhjb3BfaWJpX3ZhbHVlKCpyZWFkX2liaV9yZWcpIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwKKwkJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyKTsKKwlpbnQgKCp3cml0ZV9pYmlfcmVnKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosCisJCQlmbGV4Y29wX2liaV9yZWdpc3RlciwgZmxleGNvcF9pYmlfdmFsdWUpOworCWludCAoKmkyY19yZXF1ZXN0KSAoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKiwKIAkJZmxleGNvcF9hY2Nlc3Nfb3BfdCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pOwotCWludCAoKnN0cmVhbV9jb250cm9sKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlKiwgaW50KTsKLQorCWludCAoKnN0cmVhbV9jb250cm9sKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosIGludCk7CiAJaW50ICgqZ2V0X21hY19hZGRyKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IGV4dGVuZGVkKTsKLQogCXZvaWQgKmJ1c19zcGVjaWZpYzsKIH07CiAKQEAgLTExMSwyMiArMTEyLDI4IEBACiB2b2lkIGZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1OCAqYnVmLCB1MzIgbm8pOwogCiBzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZsZXhjb3BfZGV2aWNlX2ttYWxsb2Moc2l6ZV90IGJ1c19zcGVjaWZpY19sZW4pOwotdm9pZCBmbGV4Y29wX2RldmljZV9rZnJlZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UqKTsKK3ZvaWQgZmxleGNvcF9kZXZpY2Vfa2ZyZWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICopOwogCi1pbnQgIGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGZsZXhjb3BfZGV2aWNlKik7CitpbnQgZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKik7CiB2b2lkIGZsZXhjb3BfZGV2aWNlX2V4aXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7Ci0KIHZvaWQgZmxleGNvcF9yZXNldF9ibG9ja18zMDAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiAKIC8qIGZyb20gZmxleGNvcC1kbWEuYyAqLwotaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpOworaW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpOwogdm9pZCBmbGV4Y29wX2RtYV9mcmVlKHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hKTsKIAotaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7Ci1pbnQgZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOwotaW50IGZsZXhjb3BfZG1hX2NvbmZpZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4KTsKLWludCBmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCBmbGV4Y29wX2RtYV9hZGRyX2luZGV4X3QgaW5kZXgsIGludCBvbm9mZik7Ci1pbnQgZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgdTggY3ljbGVzKTsKK2ludCBmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOworaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBubywgaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX2RtYV9jb25maWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCk7CitpbnQgZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgZmxleGNvcF9kbWFfYWRkcl9pbmRleF90IGluZGV4LAorCQlpbnQgb25vZmYpOworaW50IGZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIHU4IGN5Y2xlcyk7CiAKIC8qIGZyb20gZmxleGNvcC1lZXByb20uYyAqLwogLyogdGhlIFBDSSBwYXJ0IHVzZXMgdGhpcyBjYWxsIHRvIGdldCB0aGUgTUFDIGFkZHJlc3MsIHRoZSBVU0IgcGFydCBoYXMgaXRzIG93biAqLwpAQCAtMTQxLDEzICsxNDgsMTUgQEAKIAl1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbik7CiAKIC8qIGZyb20gZmxleGNvcC1zcmFtLmMgKi8KLWludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LCBmbGV4Y29wX3NyYW1fZGVzdF90YXJnZXRfdCB0YXJnZXQpOworaW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsCisJZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KTsKIHZvaWQgZmxleGNvcF93YW5fc2V0X3NwZWVkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfd2FuX3NwZWVkX3Qgcyk7Ci12b2lkIGZsZXhjb3Bfc3JhbV9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCB1c2Jfd2FuLCBpbnQgc3JhbWRtYSwgaW50IG1heGltdW1maWxsKTsKK3ZvaWQgZmxleGNvcF9zcmFtX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJaW50IHVzYl93YW4sIGludCBzcmFtZG1hLCBpbnQgbWF4aW11bWZpbGwpOwogCiAvKiBnbG9iYWwgcHJvdG90eXBlcyBmb3IgdGhlIGZsZXhjb3AtY2hpcCAqLwogLyogZnJvbSBmbGV4Y29wLWZlLXR1bmVyLmMgKi8KLWludCBmbGV4Y29wX2Zyb250ZW5kX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpjYXJkKTsKK2ludCBmbGV4Y29wX2Zyb250ZW5kX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiB2b2lkIGZsZXhjb3BfZnJvbnRlbmRfZXhpdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIAogLyogZnJvbSBmbGV4Y29wLWkyYy5jICovCkBAIC0xNTksMTEgKzE2OCwxNCBAQAogCiAvKiBmcm9tIGZsZXhjb3AtbWlzYy5jICovCiB2b2lkIGZsZXhjb3BfZGV0ZXJtaW5lX3JldmlzaW9uKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwotdm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsY29uc3QgY2hhciAqcHJlZml4LGNvbnN0IGNoYXIgKnN1ZmZpeCk7Ci12b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKTsKK3ZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQljb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7Cit2b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKTsKIAogLyogZnJvbSBmbGV4Y29wLWh3LWZpbHRlci5jICovCi1pbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpOwogdm9pZCBmbGV4Y29wX2h3X2ZpbHRlcl9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogCiB2b2lkIGZsZXhjb3Bfc21jX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYwppbmRleCAyNmYwMDExLi4yODgxZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCkBAIC0xLDEzICsxLDEyIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLWRtYS5jIC0gbWV0aG9kcyBmb3IgY29uZmlndXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZSBETUEgb2YgdGhlIEZsZXhDb3AuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtZG1hLmMgLSBjb25maWd1cmluZyBhbmQgY29udHJvbGxpbmcgdGhlIERNQSBvZiB0aGUgRmxleENvcAorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKLWludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKQoraW50IGZsZXhjb3BfZG1hX2FsbG9jYXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSwgdTMyIHNpemUpCiB7CiAJdTggKnRjcHU7CiAJZG1hX2FkZHJfdCB0ZG1hID0gMDsKQEAgLTMyLDcgKzMxLDggQEAKIAogdm9pZCBmbGV4Y29wX2RtYV9mcmVlKHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hKQogewotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG1hLT5wZGV2LCBkbWEtPnNpemUqMixkbWEtPmNwdV9hZGRyMCwgZG1hLT5kbWFfYWRkcjApOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoZG1hLT5wZGV2LCBkbWEtPnNpemUqMiwKKwkJCWRtYS0+Y3B1X2FkZHIwLCBkbWEtPmRtYV9hZGRyMCk7CiAJbWVtc2V0KGRtYSwwLHNpemVvZihzdHJ1Y3QgZmxleGNvcF9kbWEpKTsKIH0KIEVYUE9SVF9TWU1CT0woZmxleGNvcF9kbWFfZnJlZSk7CkBAIC00NCw4ICs0NCw4IEBACiAJZmxleGNvcF9pYmlfdmFsdWUgdjB4MCx2MHg0LHYweGM7CiAJdjB4MC5yYXcgPSB2MHg0LnJhdyA9IHYweGMucmF3ID0gMDsKIAotCXYweDAuZG1hXzB4MC5kbWFfYWRkcmVzczAgICAgICAgID0gZG1hLT5kbWFfYWRkcjAgPj4gMjsKLQl2MHhjLmRtYV8weGMuZG1hX2FkZHJlc3MxICAgICAgICA9IGRtYS0+ZG1hX2FkZHIxID4+IDI7CisJdjB4MC5kbWFfMHgwLmRtYV9hZGRyZXNzMCA9IGRtYS0+ZG1hX2FkZHIwID4+IDI7CisJdjB4Yy5kbWFfMHhjLmRtYV9hZGRyZXNzMSA9IGRtYS0+ZG1hX2FkZHIxID4+IDI7CiAJdjB4NC5kbWFfMHg0X3dyaXRlLmRtYV9hZGRyX3NpemUgPSBkbWEtPnNpemUgLyA0OwogCiAJaWYgKChkbWFfaWR4ICYgRkNfRE1BXzEpID09IGRtYV9pZHgpIHsKQEAgLTU3LDcgKzU3LDggQEAKIAkJZmMtPndyaXRlX2liaV9yZWcoZmMsZG1hMl8wMTQsdjB4NCk7CiAJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTJfMDFjLHYweGMpOwogCX0gZWxzZSB7Ci0JCWVycigiZWl0aGVyIERNQTEgb3IgRE1BMiBjYW4gYmUgY29uZmlndXJlZCBhdCB0aGUgd2l0aGluIG9uZSBmbGV4Y29wX2RtYV9jb25maWcgY2FsbC4iKTsKKwkJZXJyKCJlaXRoZXIgRE1BMSBvciBETUEyIGNhbiBiZSBjb25maWd1cmVkIHdpdGhpbiBvbmUgIgorCQkJImZsZXhjb3BfZG1hX2NvbmZpZyBjYWxsLiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgxLDcgKzgyLDggQEAKIAkJcjB4MCA9IGRtYTJfMDEwOwogCQlyMHhjID0gZG1hMl8wMWM7CiAJfSBlbHNlIHsKLQkJZXJyKCJlaXRoZXIgdHJhbnNmZXIgRE1BMSBvciBETUEyIGNhbiBiZSBzdGFydGVkIHdpdGhpbiBvbmUgZmxleGNvcF9kbWFfeGZlcl9jb250cm9sIGNhbGwuIik7CisJCWVycigiZWl0aGVyIHRyYW5zZmVyIERNQTEgb3IgRE1BMiBjYW4gYmUgc3RhcnRlZCB3aXRoaW4gb25lICIKKwkJCSJmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2wgY2FsbC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTQsOCArMTU2LDcgQEAKIAogLyogMSBjeWNsZXMgPSAxLjk3IG1zZWMgKi8KIGludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKLQkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LAotCQl1OCBjeWNsZXMpCisJCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgdTggY3ljbGVzKQogewogCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIgPSAoZG1hX2lkeCAmIEZDX0RNQV8xKSA/IGRtYTFfMDA0IDogZG1hMl8wMTQ7CiAJZmxleGNvcF9pYmlfdmFsdWUgdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMscik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMKaW5kZXggOGE4YWU4YS4uYTI1MzczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1lZXByb20uYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtZWVwcm9tLmMgLSBlZXByb20gYWNjZXNzIG1ldGhvZHMgKGN1cnJlbnRseSBvbmx5IE1BQyBhZGRyZXNzIHJlYWRpbmcgaXMgdXNlZCkKLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1lZXByb20uYyAtIGVlcHJvbSBhY2Nlc3MgbWV0aG9kcyAoY3VycmVudGx5IG9ubHkgTUFDIGFkZHJlc3MgcmVhZGluZykKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCkBAIC0xNCwxNyArMTIsMTcgQEAKIAlyZXR1cm4gZmxleF9pMmNfd3JpdGUoYWRhcHRlciwgMHgyMDAwMDAwMCwgMHg1MCwgYWRkciwgYnVmLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IGVlcHJvbV9scmNfd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1MzIgbGVuLCB1OCAqd2J1ZiwgdTggKnJidWYsIGludCByZXRyaWVzKQorc3RhdGljIGludCBlZXByb21fbHJjX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwKKwkJdTMyIGxlbiwgdTggKndidWYsIHU4ICpyYnVmLCBpbnQgcmV0cmllcykKIHsKLQlpbnQgaTsKK2ludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHJldHJpZXM7IGkrKykgewotCQlpZiAoZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHdidWYsIGxlbikgPT0gbGVuKSB7Ci0JCQlpZiAoZWVwcm9tX2xyY19yZWFkKGFkYXB0ZXIsIGFkZHIsIGxlbiwgcmJ1ZiwgcmV0cmllcykgPT0gMSkKLQkJCQlyZXR1cm4gMTsKK2ZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKKwlpZiAoZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHdidWYsIGxlbikgPT0gbGVuKSB7CisJCWlmIChlZXByb21fbHJjX3JlYWQoYWRhcHRlciwgYWRkciwgbGVuLCByYnVmLCByZXRyaWVzKSA9PSAxKQorCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzksMTIgKzM3LDEwIEBACiAJCXJldHVybiAwOwogCiAJbWVtY3B5KHdidWYsIGtleSwgbGVuKTsKLQogCXdidWZbMTZdID0gMDsKIAl3YnVmWzE3XSA9IDA7CiAJd2J1ZlsxOF0gPSAwOwogCXdidWZbMTldID0gY2FsY19scmMod2J1ZiwgMTkpOwotCiAJcmV0dXJuIGVlcHJvbV9scmNfd3JpdGUoYWRhcHRlciwgMHgzZTQsIDIwLCB3YnVmLCByYnVmLCA0KTsKIH0KIApAQCAtNTksNyArNTUsNiBAQAogCQlyZXR1cm4gMDsKIAogCW1lbWNweShrZXksIGJ1ZiwgbGVuKTsKLQogCXJldHVybiAxOwogfQogCkBAIC03NCw5ICs2OSw3IEBACiAJCXRtcFszXSA9IG1hY1s1XTsKIAkJdG1wWzRdID0gbWFjWzZdOwogCQl0bXBbNV0gPSBtYWNbN107Ci0KIAl9IGVsc2UgewotCiAJCXRtcFswXSA9IG1hY1swXTsKIAkJdG1wWzFdID0gbWFjWzFdOwogCQl0bXBbMl0gPSBtYWNbMl07CkBAIC05MCwxMSArODMsMTEgQEAKIAogCWlmIChlZXByb21fd3JpdGUoYWRhcHRlciwgMHgzZjgsIHRtcCwgOCkgPT0gOCkKIAkJcmV0dXJuIDE7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQorc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQogewogCXJldHVybiBmYy0+aTJjX3JlcXVlc3QoZmMsRkNfUkVBRCxGQ19JMkNfUE9SVF9FRVBST00sMHg1MCxhZGRyLGJ1ZixsZW4pOwogfQpAQCAtMTEwLDcgKzEwMyw4IEBACiAJcmV0dXJuIHN1bTsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9yZXF1ZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKK3N0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKIHsKIAlpbnQgaSxyZXQgPSAwOwogCXU4IGNoaXBhZGRyID0gIDB4NTAgfCAoKGFkZHIgPj4gOCkgJiAzKTsKQEAgLTEyMyw3ICsxMTcsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fbHJjX3JlYWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4sIGludCByZXRyaWVzKQorc3RhdGljIGludCBmbGV4Y29wX2VlcHJvbV9scmNfcmVhZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgYWRkciwKKwkJdTggKmJ1ZiwgdTE2IGxlbiwgaW50IHJldHJpZXMpCiB7CiAJaW50IHJldCA9IGZsZXhjb3BfZWVwcm9tX3JlcXVlc3QoZmMsIEZDX1JFQUQsIGFkZHIsIGJ1ZiwgbGVuLCByZXRyaWVzKTsKIAlpZiAocmV0ID09IDApCkBAIC0xMzMsOCArMTI4LDcgQEAKIH0KIAogLyogSkoncyBjb21tZW50IGFib3V0IGV4dGVuZGVkID09IDE6IGl0IGlzIG5vdCBwcmVzZW50bHkgdXNlZCBhbnl3aGVyZSBidXQgd2FzCi0gKiBhZGRlZCB0byB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcG9zc2libGUgc3VwcG9ydCBvZiBFVUk2NAotICovCisgKiBhZGRlZCB0byB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcG9zc2libGUgc3VwcG9ydCBvZiBFVUk2NCAqLwogaW50IGZsZXhjb3BfZWVwcm9tX2NoZWNrX21hY19hZGRyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBleHRlbmRlZCkKIHsKIAl1OCBidWZbOF07CkBAIC0xNDIsMTIgKzEzNiw5IEBACiAKIAlpZiAoKHJldCA9IGZsZXhjb3BfZWVwcm9tX2xyY19yZWFkKGZjLDB4M2Y4LGJ1Ziw4LDQpKSA9PSAwKSB7CiAJCWlmIChleHRlbmRlZCAhPSAwKSB7Ci0JCQllcnIoIlRPRE86IGV4dGVuZGVkIChFVUk2NCkgTUFDIGFkZHJlc3NlcyBhcmVuJ3QgY29tcGxldGVseSBzdXBwb3J0ZWQgeWV0Iik7CisJCQllcnIoIlRPRE86IGV4dGVuZGVkIChFVUk2NCkgTUFDIGFkZHJlc3NlcyBhcmVuJ3QgIgorCQkJCSJjb21wbGV0ZWx5IHN1cHBvcnRlZCB5ZXQiKTsKIAkJCXJldCA9IC1FSU5WQUw7Ci0vKgkJCW1lbWNweShmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLGJ1ZiwzKTsKLQkJCW1hY1szXSA9IDB4ZmU7Ci0JCQltYWNbNF0gPSAweGZmOwotCQkJbWVtY3B5KCZmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjWzNdLCZidWZbNV0sMyk7ICovCiAJCX0gZWxzZQogCQkJbWVtY3B5KGZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsYnVmLDYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKaW5kZXggNWNkZWQzNy4uZjdhZmFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWZlLXR1bmVyLmMKQEAgLTU5MiwxNCArNTkyLDE0IEBACiAJCWZjLT5mZV9zbGVlcCA9IG9wcy0+c2xlZXA7CiAJCW9wcy0+c2xlZXAgPSBmbGV4Y29wX3NsZWVwOwogCi0JCWZjLT5kZXZfdHlwZSA9IEZDX1NLWTsKKwkJZmMtPmRldl90eXBlID0gRkNfU0tZX1JFVjI2OwogCQlnb3RvIGZlX2ZvdW5kOwogCX0KIAogCS8qIHRyeSB0aGUgYWlyIGR2Yi10IChtdDM1Mi9TYW1zdW5nIHRkdGM5MjUxZGgwKD8/KSkgKi8KIAlmYy0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnNhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCBpMmMpOwogCWlmIChmYy0+ZmUgIT0gTlVMTCkgewotCQlmYy0+ZGV2X3R5cGUgPSBGQ19BSVJfRFZCOworCQlmYy0+ZGV2X3R5cGUgPSBGQ19BSVJfRFZCVDsKIAkJZmMtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IHNhbXN1bmdfdGR0YzkyNTFkaDBfY2FsY19yZWdzOwogCQlnb3RvIGZlX2ZvdW5kOwogCX0KQEAgLTY1Myw3ICs2NTMsNyBAQAogCQlmYy0+ZmVfc2xlZXAgICAgICAgICAgICAgICAgPSBvcHMtPnNsZWVwOwogCQlvcHMtPnNsZWVwICAgICAgICAgICAgICAgICAgPSBmbGV4Y29wX3NsZWVwOwogCi0JCWZjLT5kZXZfdHlwZSAgICAgICAgICAgICAgICA9IEZDX1NLWV9PTEQ7CisJCWZjLT5kZXZfdHlwZSAgICAgICAgICAgICAgICA9IEZDX1NLWV9SRVYyMzsKIAkJZ290byBmZV9mb3VuZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwppbmRleCA0NTE5NzRiLi43N2U0NTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCkBAIC0xLDMzICsxLDMwIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLWh3LWZpbHRlci5jIC0gcGlkIGFuZCBtYWMgYWRkcmVzcyBmaWx0ZXJpbmcgYW5kIGNvcnJlc3BvbmRpbmcgY29udHJvbCBmdW5jdGlvbnMuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtaHctZmlsdGVyLmMgLSBwaWQgYW5kIG1hYyBhZGRyZXNzIGZpbHRlcmluZyBhbmQgY29udHJvbCBmdW5jdGlvbnMKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCiBzdGF0aWMgdm9pZCBmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCxSY3ZfRGF0YV9zaWcsb25vZmYpOwotCi0JZGViX3RzKCJyY3ZfZGF0YSBpcyBub3c6ICclcydcbiIsb25vZmYgPyAib24iIDogIm9mZiIpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgUmN2X0RhdGFfc2lnLCBvbm9mZik7CisJZGViX3RzKCJyY3ZfZGF0YSBpcyBub3c6ICclcydcbiIsIG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKIH0KIAogdm9pZCBmbGV4Y29wX3NtY19jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsU01DX0VuYWJsZV9zaWcsb25vZmYpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgU01DX0VuYWJsZV9zaWcsIG9ub2ZmKTsKIH0KIAogc3RhdGljIHZvaWQgZmxleGNvcF9udWxsX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTnVsbF9maWx0ZXJfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIE51bGxfZmlsdGVyX3NpZywgb25vZmYpOwogfQogCiB2b2lkIGZsZXhjb3Bfc2V0X21hY19maWx0ZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTggbWFjWzZdKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHY0MTgsdjQxYzsKLQl2NDFjID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxtYWNfYWRkcmVzc180MWMpOworCWZsZXhjb3BfaWJpX3ZhbHVlIHY0MTgsIHY0MWM7CisJdjQxYyA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIG1hY19hZGRyZXNzXzQxYyk7CiAKIAl2NDE4Lm1hY19hZGRyZXNzXzQxOC5NQUMxID0gbWFjWzBdOwogCXY0MTgubWFjX2FkZHJlc3NfNDE4Lk1BQzIgPSBtYWNbMV07CkBAIC0zNiwyNyArMzMsMjggQEAKIAl2NDFjLm1hY19hZGRyZXNzXzQxYy5NQUM3ID0gbWFjWzRdOwogCXY0MWMubWFjX2FkZHJlc3NfNDFjLk1BQzggPSBtYWNbNV07CiAKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxtYWNfYWRkcmVzc180MTgsdjQxOCk7Ci0JZmMtPndyaXRlX2liaV9yZWcoZmMsbWFjX2FkZHJlc3NfNDFjLHY0MWMpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBtYWNfYWRkcmVzc180MTgsIHY0MTgpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBtYWNfYWRkcmVzc180MWMsIHY0MWMpOwogfQogCiB2b2lkIGZsZXhjb3BfbWFjX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTUFDX2ZpbHRlcl9Nb2RlX3NpZyxvbm9mZik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBNQUNfZmlsdGVyX01vZGVfc2lnLCBvbm9mZik7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCB1MTYgbWFzaykKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCB1MTYgbWFzaykKIHsKIAkvKiBpbmRleF9yZWdfMzEwLmV4dHJhX2luZGV4X3JlZyBuZWVkIHRvIDAgb3IgNyB0byB3b3JrICovCiAJZmxleGNvcF9pYmlfdmFsdWUgdjMwYzsKIAl2MzBjLnBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMF83Lkdyb3VwX1BJRCA9IHBpZDsKIAl2MzBjLnBpZF9maWx0ZXJfMzBjX2V4dF9pbmRfMF83Lkdyb3VwX21hc2sgPSBtYXNrOwotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHBpZF9maWx0ZXJfMzBjLHYzMGMpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBwaWRfZmlsdGVyXzMwYywgdjMwYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsTWFza19maWx0ZXJfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIE1hc2tfZmlsdGVyX3NpZywgb25vZmYpOwogfQogCiAvKiB0aGlzIGZhbmN5IGRlZmluZSByZWR1Y2VzIHRoZSBjb2RlIHNpemUgb2YgdGhlIHF1aXRlIHNpbWlsYXIgUElEIGNvbnRyb2xsaW5nIG9mCkBAIC02NSw5MSArNjMsMTEyIEBACiAKICNkZWZpbmUgcGlkX2N0cmwodnJlZ25hbWUsZmllbGQsZW5hYmxlZmllbGQsdHJhbnNfZmllbGQsdHJhbnN2YWwpIFwKIAlmbGV4Y29wX2liaV92YWx1ZSB2cGlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgdnJlZ25hbWUpLCBcCi0JCQkJCSAgdjIwOCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KTsgXAotXAotCXZwaWQudnJlZ25hbWUuZmllbGQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsgXAotCXZwaWQudnJlZ25hbWUudHJhbnNfZmllbGQgPSB0cmFuc3ZhbDsgXAotCXYyMDguY3RybF8yMDguZW5hYmxlZmllbGQgPSBvbm9mZjsgXAotXAotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHZyZWduYW1lLHZwaWQpOyBcCi0JZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsdjIwOCk7Cit2MjA4ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgY3RybF8yMDgpOyBcCit2cGlkLnZyZWduYW1lLmZpZWxkID0gb25vZmYgPyBwaWQgOiAweDFmZmY7IFwKK3ZwaWQudnJlZ25hbWUudHJhbnNfZmllbGQgPSB0cmFuc3ZhbDsgXAordjIwOC5jdHJsXzIwOC5lbmFibGVmaWVsZCA9IG9ub2ZmOyBcCitmYy0+d3JpdGVfaWJpX3JlZyhmYywgdnJlZ25hbWUsIHZwaWQpOyBcCitmYy0+d3JpdGVfaWJpX3JlZyhmYywgY3RybF8yMDgsIHYyMDgpOwogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTFfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLFN0cmVhbTFfUElELFN0cmVhbTFfZmlsdGVyX3NpZyxTdHJlYW0xX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLCBTdHJlYW0xX1BJRCwgU3RyZWFtMV9maWx0ZXJfc2lnLAorCQkJU3RyZWFtMV90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfU3RyZWFtMl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsU3RyZWFtMl9QSUQsU3RyZWFtMl9maWx0ZXJfc2lnLFN0cmVhbTJfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDAsIFN0cmVhbTJfUElELCBTdHJlYW0yX2ZpbHRlcl9zaWcsCisJCQlTdHJlYW0yX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1BDUl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsUENSX1BJRCxQQ1JfZmlsdGVyX3NpZyxQQ1JfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsIFBDUl9QSUQsIFBDUl9maWx0ZXJfc2lnLCBQQ1JfdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9QTVRfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUE1UX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCxQTVRfUElELFBNVF9maWx0ZXJfc2lnLFBNVF90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwNCwgUE1UX1BJRCwgUE1UX2ZpbHRlcl9zaWcsIFBNVF90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VNTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LEVNTV9QSUQsRU1NX2ZpbHRlcl9zaWcsRU1NX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LCBFTU1fUElELCBFTU1fZmlsdGVyX3NpZywgRU1NX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VDTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsRUNNX1BJRCxFQ01fZmlsdGVyX3NpZyxFQ01fdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDgsIEVDTV9QSUQsIEVDTV9maWx0ZXJfc2lnLCBFQ01fdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBpbmRleCwgdTE2IHBpZCxpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWludCBpbmRleCwgdTE2IHBpZCwgaW50IG9ub2ZmKQogewogCWlmIChwaWQgPT0gMHgyMDAwKQogCQlyZXR1cm47CiAKLQlkZWJfdHMoInNldHRpbmcgcGlkOiAlNWQgJTA0eCBhdCBpbmRleCAlZCAnJXMnXG4iLHBpZCxwaWQsaW5kZXgsb25vZmYgPyAib24iIDogIm9mZiIpOworCWRlYl90cygic2V0dGluZyBwaWQ6ICU1ZCAlMDR4IGF0IGluZGV4ICVkICclcydcbiIsCisJCQlwaWQsIHBpZCwgaW5kZXgsIG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKIAogCS8qIFdlIGNvdWxkIHVzZSBiaXQgbWFnaWMgaGVyZSB0byByZWR1Y2Ugc291cmNlIGNvZGUgc2l6ZS4KIAkgKiBJIGRlY2lkZWQgYWdhaW5zdCBpdCwgYnV0IHRvIHVzZSB0aGUgcmVhbCByZWdpc3RlciBuYW1lcyAqLwogCXN3aXRjaCAoaW5kZXgpIHsKLQkJY2FzZSAwOiBmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDE6IGZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgMjogZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDM6IGZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSA0OiBmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgNToJZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWYgKGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciAmJiBpbmRleCA8IDM4KSB7Ci0JCQkJZmxleGNvcF9pYmlfdmFsdWUgdnBpZCx2aWQ7CisJY2FzZSAwOgorCQlmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmbGV4Y29wX3BpZF9TdHJlYW0yX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmbGV4Y29wX3BpZF9QQ1JfUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDM6CisJCWZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZmxleGNvcF9waWRfRU1NX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlmbGV4Y29wX3BpZF9FQ01fUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoZmMtPmhhc18zMl9od19waWRfZmlsdGVyICYmIGluZGV4IDwgMzgpIHsKKwkJCWZsZXhjb3BfaWJpX3ZhbHVlIHZwaWQsIHZpZDsKIAotCQkJCS8qIHNldCB0aGUgaW5kZXggKi8KLQkJCQl2aWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGluZGV4X3JlZ18zMTApOwotCQkJCXZpZC5pbmRleF9yZWdfMzEwLmluZGV4X3JlZyA9IGluZGV4IC0gNjsKLQkJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxpbmRleF9yZWdfMzEwLCB2aWQpOworCQkJLyogc2V0IHRoZSBpbmRleCAqLworCQkJdmlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgaW5kZXhfcmVnXzMxMCk7CisJCQl2aWQuaW5kZXhfcmVnXzMxMC5pbmRleF9yZWcgPSBpbmRleCAtIDY7CisJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYywgaW5kZXhfcmVnXzMxMCwgdmlkKTsKIAotCQkJCXZwaWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHBpZF9uX3JlZ18zMTQpOwotCQkJCXZwaWQucGlkX25fcmVnXzMxNC5QSUQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsKLQkJCQl2cGlkLnBpZF9uX3JlZ18zMTQuUElEX2VuYWJsZV9iaXQgPSBvbm9mZjsKLQkJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxwaWRfbl9yZWdfMzE0LCB2cGlkKTsKLQkJCX0KLQkJCWJyZWFrOworCQkJdnBpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHBpZF9uX3JlZ18zMTQpOworCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRCA9IG9ub2ZmID8gcGlkIDogMHgxZmZmOworCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRF9lbmFibGVfYml0ID0gb25vZmY7CisJCQlmYy0+d3JpdGVfaWJpX3JlZyhmYywgcGlkX25fcmVnXzMxNCwgdnBpZCk7CisJCX0KKwkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyxpbnQgb25vZmYpCitzdGF0aWMgaW50IGZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgaW50IG9ub2ZmKQogewogCWlmIChmYy0+ZnVsbHRzX3N0cmVhbWluZ19zdGF0ZSAhPSBvbm9mZikgewogCQlkZWJfdHMoIiVzIGZ1bGwgVFMgdHJhbnNmZXJcbiIsb25vZmYgPyAiZW5hYmxpbmciIDogImRpc2FibGluZyIpOwogCQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXIoZmMsIDAsIDB4MWZlMCAqICghb25vZmYpKTsKLQkJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoZmMsb25vZmYpOworCQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywgb25vZmYpOwogCQlmYy0+ZnVsbHRzX3N0cmVhbWluZ19zdGF0ZSA9IG9ub2ZmOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZikKK2ludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpCiB7CiAJaW50IG1heF9waWRfZmlsdGVyID0gNiArIGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciozMjsKIApAQCAtMTY0LDI0ICsxODMsMjUgQEAKIAkgKiAgIC0gb3IgdGhlIHJlcXVlc3RlZCBwaWQgaXMgMHgyMDAwICovCiAKIAlpZiAoIWZjLT5waWRfZmlsdGVyaW5nICYmIGZjLT5mZWVkY291bnQgPT0gb25vZmYpCi0JCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsb25vZmYpOworCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCBvbm9mZik7CiAKIAlpZiAoZmMtPnBpZF9maWx0ZXJpbmcpIHsKLQkJZmxleGNvcF9waWRfY29udHJvbChmYyxkdmJkbXhmZWVkLT5pbmRleCxkdmJkbXhmZWVkLT5waWQsb25vZmYpOworCQlmbGV4Y29wX3BpZF9jb250cm9sIFwKKwkJCShmYywgZHZiZG14ZmVlZC0+aW5kZXgsIGR2YmRteGZlZWQtPnBpZCwgb25vZmYpOwogCiAJCWlmIChmYy0+ZXh0cmFfZmVlZGNvdW50ID4gMCkKLQkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsMSk7CisJCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLCAxKTsKIAkJZWxzZSBpZiAoZHZiZG14ZmVlZC0+cGlkID09IDB4MjAwMCkKLQkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsb25vZmYpOworCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgb25vZmYpOwogCQllbHNlCi0JCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLDApOworCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgMCk7CiAJfQogCiAJLyogaWYgaXQgd2FzIHRoZSBmaXJzdCBvciBsYXN0IGZlZWQgcmVxdWVzdCBjaGFuZ2UgdGhlIHN0cmVhbS1zdGF0dXMgKi8KIAlpZiAoZmMtPmZlZWRjb3VudCA9PSBvbm9mZikgewotCQlmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoZmMsb25vZmYpOworCQlmbGV4Y29wX3Jjdl9kYXRhX2N0cmwoZmMsIG9ub2ZmKTsKIAkJaWYgKGZjLT5zdHJlYW1fY29udHJvbCkgLyogZGV2aWNlIHNwZWNpZmljIHN0cmVhbSBjb250cm9sICovCi0JCQlmYy0+c3RyZWFtX2NvbnRyb2woZmMsb25vZmYpOworCQkJZmMtPnN0cmVhbV9jb250cm9sKGZjLCBvbm9mZik7CiAKIAkJLyogZmVlZGluZyBzdG9wcGVkIC0+IHJlc2V0IHRoZSBmbGV4Y29wIGZpbHRlciovCiAJCWlmIChvbm9mZiA9PSAwKSB7CkBAIC0xODksNyArMjA5LDYgQEAKIAkJCWZsZXhjb3BfaHdfZmlsdGVyX2luaXQoZmMpOwogCQl9CiAJfQotCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbCk7CkBAIC0xOTksMTUgKzIxOCwxNSBAQAogCWludCBpOwogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CiAJZm9yIChpID0gMDsgaSA8IDYgKyAzMipmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXI7IGkrKykKLQkJZmxleGNvcF9waWRfY29udHJvbChmYyxpLDB4MWZmZiwwKTsKKwkJZmxleGNvcF9waWRfY29udHJvbChmYywgaSwgMHgxZmZmLCAwKTsKIAogCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcihmYywgMCwgMHgxZmUwKTsKLQlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywwKTsKKwlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChmYywgMCk7CiAKLQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxwaWRfZmlsdGVyXzMwOCk7CisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHBpZF9maWx0ZXJfMzA4KTsKIAl2LnBpZF9maWx0ZXJfMzA4LkVNTV9maWx0ZXJfNCA9IDE7CiAJdi5waWRfZmlsdGVyXzMwOC5FTU1fZmlsdGVyXzYgPSAwOwotCWZjLT53cml0ZV9pYmlfcmVnKGZjLHBpZF9maWx0ZXJfMzA4LHYpOworCWZjLT53cml0ZV9pYmlfcmVnKGZjLCBwaWRfZmlsdGVyXzMwOCwgdik7CiAKIAlmbGV4Y29wX251bGxfZmlsdGVyX2N0cmwoZmMsIDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jCmluZGV4IGYxMzc4M2YuLmUyYmVkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCiAgKiBmbGV4Y29wLWkyYy5jIC0gZmxleGNvcCBpbnRlcm5hbCAyV2lyZSBidXMgKEkyQykgYW5kIGR2YiBpMmMgaW5pdGlhbGl6YXRpb24KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAogI2RlZmluZSBGQ19NQVhfSTJDX1JFVFJJRVMgMTAwMDAwCiAKLS8qICNkZWZpbmUgRFVNUF9JMkNfTUVTU0FHRVMgKi8KLQotc3RhdGljIGludCBmbGV4Y29wX2kyY19vcGVyYXRpb24oc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfdmFsdWUgKnIxMDApCitzdGF0aWMgaW50IGZsZXhjb3BfaTJjX29wZXJhdGlvbihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV92YWx1ZSAqcjEwMCkKIHsKIAlpbnQgaTsKIAlmbGV4Y29wX2liaV92YWx1ZSByOwpAQCAtMjYsNyArMjMsNyBAQAogCQlyID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgdHdfc21fY18xMDApOwogCiAJCWlmICghci50d19zbV9jXzEwMC5ub19iYXNlX2FkZHJfYWNrX2Vycm9yKSB7Ci0JCQlpZiAoci50d19zbV9jXzEwMC5zdF9kb25lKSB7ICAvKiAmJiAhci50d19zbV9jXzEwMC53b3JraW5nX3N0YXJ0ICovCisJCQlpZiAoci50d19zbV9jXzEwMC5zdF9kb25lKSB7CiAJCQkJKnIxMDAgPSByOwogCQkJCWRlYl9pMmMoImkyYyBzdWNjZXNzXG4iKTsKIAkJCQlyZXR1cm4gMDsKQEAgLTM2LDE3ICszMywzMSBAQAogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAl9Ci0JZGViX2kyYygidHJpZWQgJWQgdGltZXMgaTJjIG9wZXJhdGlvbiwgbmV2ZXIgZmluaXNoZWQgb3IgdG9vIG1hbnkgYWNrIGVycm9ycy5cbiIsaSk7CisJZGViX2kyYygidHJpZWQgJWQgdGltZXMgaTJjIG9wZXJhdGlvbiwgIgorCQkJIm5ldmVyIGZpbmlzaGVkIG9yIHRvbyBtYW55IGFjayBlcnJvcnMuXG4iLCBpKTsKIAlyZXR1cm4gLUVSRU1PVEVJTzsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX2kyY19yZWFkNChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjLAotCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCisJCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgcjEwNDsKLQlpbnQgbGVuID0gcjEwMC50d19zbV9jXzEwMC50b3RhbF9ieXRlcywgLyogcmVtZW1iZXIgdG90YWxfYnl0ZXMgaXMgYnVmbGVuLTEgKi8KKwlpbnQgbGVuID0gcjEwMC50d19zbV9jXzEwMC50b3RhbF9ieXRlcywKKwkJLyogcmVtZW1iZXIgdG90YWxfYnl0ZXMgaXMgYnVmbGVuLTEgKi8KIAkJcmV0OwogCisJLyogd29yay1hcm91bmQgdG8gaGF2ZSBDYWJsZVN0YXIyIGFuZCBTa3lTdGFyMiByZXYgMi43IHdvcmsKKwkgKiBjb3JyZWN0bHk6CisJICoKKwkgKiB0aGUgSVREMTAwMCBpcyBiZWhpbmQgYW4gaTJjLWdhdGUgd2hpY2ggY2xvc2VzIGF1dG9tYXRpY2FsbHkKKwkgKiBhZnRlciBhbiBpMmMtdHJhbnNhY3Rpb24gdGhlIFNUVjAyOTcgbmVlZHMgMiBjb25zZWN1dGl2ZSByZWFkcworCSAqIG9uZSB3aXRoIG5vX2Jhc2VfYWRkciA9IDAgYW5kIG9uZSB3aXRoIDEKKwkgKgorCSAqIHRob3NlIHR3byB3b3JrLWFyb3VuZHMgYXJlIGNvbmZsaWN0aW46IHdlIGNoZWNrIGZvciB0aGUgY2FyZAorCSAqIHR5cGUsIGl0IGlzIHNldCB3aGVuIHByb2JpbmcgdGhlIElURDEwMDAgKi8KKwlpZiAoaTJjLT5mYy0+ZGV2X3R5cGUgPT0gRkNfU0tZX1JFVjI3KQorCQlyMTAwLnR3X3NtX2NfMTAwLm5vX2Jhc2VfYWRkcl9hY2tfZXJyb3IgPSBpMmMtPm5vX2Jhc2VfYWRkcjsKKwogCXJldCA9IGZsZXhjb3BfaTJjX29wZXJhdGlvbihpMmMtPmZjLCAmcjEwMCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRlYl9pMmMoIlJldHJ5aW5nIG9wZXJhdGlvblxuIik7CkBAIC02OSwxMSArODAsMTEgQEAKIAkJaWYgKGxlbiA+IDEpIGJ1ZlsyXSA9IHIxMDQudHdfc21fY18xMDQuZGF0YTNfcmVnOwogCQlpZiAobGVuID4gMikgYnVmWzNdID0gcjEwNC50d19zbV9jXzEwNC5kYXRhNF9yZWc7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9pMmNfd3JpdGU0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3ZhbHVlIHIxMDAsIHU4ICpidWYpCitzdGF0aWMgaW50IGZsZXhjb3BfaTJjX3dyaXRlNChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV92YWx1ZSByMTAwLCB1OCAqYnVmKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDQ7CiAJaW50IGxlbiA9IHIxMDAudHdfc21fY18xMDAudG90YWxfYnl0ZXM7IC8qIHJlbWVtYmVyIHRvdGFsX2J5dGVzIGlzIGJ1Zmxlbi0xICovCkBAIC04MSw3ICs5Miw2IEBACiAKIAkvKiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYnl0ZSwgb3RoZXJ3aXNlIHdlIHdvdWxkbid0IGJlIGhlcmUgKi8KIAlyMTAwLnR3X3NtX2NfMTAwLmRhdGExX3JlZyA9IGJ1ZlswXTsKLQogCXIxMDQudHdfc21fY18xMDQuZGF0YTJfcmVnID0gbGVuID4gMCA/IGJ1ZlsxXSA6IDA7CiAJcjEwNC50d19zbV9jXzEwNC5kYXRhM19yZWcgPSBsZW4gPiAxID8gYnVmWzJdIDogMDsKIAlyMTA0LnR3X3NtX2NfMTA0LmRhdGE0X3JlZyA9IGxlbiA+IDIgPyBidWZbM10gOiAwOwpAQCAtOTQsNyArMTA0LDcgQEAKIH0KIAogaW50IGZsZXhjb3BfaTJjX3JlcXVlc3Qoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKmkyYywKLQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKKwkJZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJaW50IHJldDsKIApAQCAtMTE3LDcgKzEyNyw2IEBACiAJCXByaW50aygicmQoIik7CiAJZWxzZQogCQlwcmludGsoIndyKCIpOwotCiAJcHJpbnRrKCIlMDJ4KTogJTAyeCAiLCBjaGlwYWRkciwgYWRkcik7CiAjZW5kaWYKIApAQCAtMTYzLDcgKzE3Miw4IEBACiBFWFBPUlRfU1lNQk9MKGZsZXhjb3BfaTJjX3JlcXVlc3QpOwogCiAvKiBtYXN0ZXIgeGZlciBjYWxsYmFjayBmb3IgZGVtb2R1bGF0b3IgKi8KLXN0YXRpYyBpbnQgZmxleGNvcF9tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCitzdGF0aWMgaW50IGZsZXhjb3BfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQogewogCXN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTE4MiwxMiArMTkyLDEzIEBACiAJCS8qIHJlYWRpbmcgKi8KIAkJaWYgKGkrMSA8IG51bSAmJiAobXNnc1tpKzFdLmZsYWdzID09IEkyQ19NX1JEKSkgewogCQkJcmV0ID0gaTJjLT5mYy0+aTJjX3JlcXVlc3QoaTJjLCBGQ19SRUFELCBtc2dzW2ldLmFkZHIsCi0JCQkJbXNnc1tpXS5idWZbMF0sIG1zZ3NbaSsxXS5idWYsIG1zZ3NbaSsxXS5sZW4pOworCQkJCQltc2dzW2ldLmJ1ZlswXSwgbXNnc1tpKzFdLmJ1ZiwKKwkJCQkJbXNnc1tpKzFdLmxlbik7CiAJCQlpKys7IC8qIHNraXAgdGhlIGZvbGxvd2luZyBtZXNzYWdlICovCiAJCX0gZWxzZSAvKiB3cml0aW5nICovCiAJCQlyZXQgPSBpMmMtPmZjLT5pMmNfcmVxdWVzdChpMmMsIEZDX1dSSVRFLCBtc2dzW2ldLmFkZHIsCi0JCQkJbXNnc1tpXS5idWZbMF0sICZtc2dzW2ldLmJ1ZlsxXSwKLQkJCQltc2dzW2ldLmxlbiAtIDEpOworCQkJCQltc2dzW2ldLmJ1ZlswXSwgJm1zZ3NbaV0uYnVmWzFdLAorCQkJCQltc2dzW2ldLmxlbiAtIDEpOwogCQlpZiAocmV0IDwgMCkgewogCQkJZXJyKCJpMmMgbWFzdGVyX3hmZXIgZmFpbGVkIik7CiAJCQlicmVhazsKQEAgLTIxNCwyMyArMjI1LDIxIEBACiBpbnQgZmxleGNvcF9pMmNfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewogCWludCByZXQ7Ci0KIAltdXRleF9pbml0KCZmYy0+aTJjX211dGV4KTsKIAogCWZjLT5mY19pMmNfYWRhcFswXS5mYyA9IGZjOwogCWZjLT5mY19pMmNfYWRhcFsxXS5mYyA9IGZjOwogCWZjLT5mY19pMmNfYWRhcFsyXS5mYyA9IGZjOwotCiAJZmMtPmZjX2kyY19hZGFwWzBdLnBvcnQgPSBGQ19JMkNfUE9SVF9ERU1PRDsKIAlmYy0+ZmNfaTJjX2FkYXBbMV0ucG9ydCA9IEZDX0kyQ19QT1JUX0VFUFJPTTsKIAlmYy0+ZmNfaTJjX2FkYXBbMl0ucG9ydCA9IEZDX0kyQ19QT1JUX1RVTkVSOwogCiAJc3RybGNweShmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAubmFtZSwgIkIyQzIgRmxleENvcCBJMkMgdG8gZGVtb2QiLAotCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLm5hbWUpKTsKKwkJCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXAubmFtZSkpOwogCXN0cmxjcHkoZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwLm5hbWUsICJCMkMyIEZsZXhDb3AgSTJDIHRvIGVlcHJvbSIsCi0JCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAubmFtZSkpOworCQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcC5uYW1lKSk7CiAJc3RybGNweShmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAubmFtZSwgIkIyQzIgRmxleENvcCBJMkMgdG8gdHVuZXIiLAotCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzJdLmkyY19hZGFwLm5hbWUpKTsKKwkJCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMl0uaTJjX2FkYXAubmFtZSkpOwogCiAJaTJjX3NldF9hZGFwZGF0YSgmZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLCAmZmMtPmZjX2kyY19hZGFwWzBdKTsKIAlpMmNfc2V0X2FkYXBkYXRhKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAsICZmYy0+ZmNfaTJjX2FkYXBbMV0pOwpAQCAtMjY4LDcgKzI3Nyw2IEBACiAJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXApOwogYWRhcF8xX2ZhaWxlZDoKIAlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzksNiArMjg3LDUgQEAKIAkJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXApOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcCk7CiAJfQotCiAJZmMtPmluaXRfc3RhdGUgJj0gfkZDX1NUQVRFX0kyQ19JTklUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKaW5kZXggOTNkMjBlNS4uZTU2NjI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1taXNjLmMgLSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1taXNjLmMgLSBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKQEAgLTEyLDM5ICsxMCw0MyBAQAogCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLG1pc2NfMjA0KTsKIAogCXN3aXRjaCAodi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpIHsKLQkJY2FzZSAweDI6Ci0JCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUkuXG4iKTsKLQkJCWZjLT5yZXYgPSBGTEVYQ09QX0lJOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgzOgotCQkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJYi5cbiIpOwotCQkJZmMtPnJldiA9IEZMRVhDT1BfSUlCOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwOgotCQkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJSS5cbiIpOwotCQkJZmMtPnJldiA9IEZMRVhDT1BfSUlJOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIoInVua293biBGbGV4Q29wIFJldmlzaW9uOiAleC4gUGxlYXNlIHJlcG9ydCB0aGUgbGludXgtZHZiQGxpbnV4dHYub3JnLiIsdi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpOwotCQkJYnJlYWs7CisJY2FzZSAweDI6CisJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSS5cbiIpOworCQlmYy0+cmV2ID0gRkxFWENPUF9JSTsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSWIuXG4iKTsKKwkJZmMtPnJldiA9IEZMRVhDT1BfSUlCOworCQlicmVhazsKKwljYXNlIDB4MDoKKwkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJSS5cbiIpOworCQlmYy0+cmV2ID0gRkxFWENPUF9JSUk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycigidW5rbm93biBGbGV4Q29wIFJldmlzaW9uOiAleC4gUGxlYXNlIHJlcG9ydCB0aGlzIHRvICIKKwkJCQkibGludXgtZHZiQGxpbnV4dHYub3JnLiIsCisJCQkJdi5taXNjXzIwNC5SZXZfTl9zaWdfcmV2aXNpb25faGkpOworCQlicmVhazsKIAl9CiAKIAlpZiAoKGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciA9IHYubWlzY18yMDQuUmV2X05fc2lnX2NhcHMpKQotCQlkZWJfaW5mbygidGhpcyBGbGV4Q29wIGhhcyB0aGUgYWRkaXRpb25hbCAzMiBoYXJkd2FyZSBwaWQgZmlsdGVyLlxuIik7CisJCWRlYl9pbmZvKCJ0aGlzIEZsZXhDb3AgaGFzICIKKwkJCQkidGhlIGFkZGl0aW9uYWwgMzIgaGFyZHdhcmUgcGlkIGZpbHRlci5cbiIpOwogCWVsc2UKLQkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgb25seSB0aGUgNiBiYXNpYyBtYWluIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKKwkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgIgorCQkJCSJ0aGUgNiBiYXNpYyBtYWluIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKIAkvKiBidXMgcGFydHMgaGF2ZSB0byBkZWNpZGUgaWYgaHcgcGlkIGZpbHRlcmluZyBpcyB1c2VkIG9yIG5vdC4gKi8KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKmZsZXhjb3BfcmV2aXNpb25fbmFtZXNbXSA9IHsKLQkiVW5rb3duIGNoaXAiLAorCSJVbmtub3duIGNoaXAiLAogCSJGbGV4Q29wSUkiLAogCSJGbGV4Q29wSUliIiwKIAkiRmxleENvcElJSSIsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqZmxleGNvcF9kZXZpY2VfbmFtZXNbXSA9IHsKLQkiVW5rb3duIGRldmljZSIsCisJIlVua25vd24gZGV2aWNlIiwKIAkiQWlyMlBDL0FpclN0YXIgMiBEVkItVCIsCiAJIkFpcjJQQy9BaXJTdGFyIDIgQVRTQyAxc3QgZ2VuZXJhdGlvbiIsCiAJIkFpcjJQQy9BaXJTdGFyIDIgQVRTQyAybmQgZ2VuZXJhdGlvbiIsCkBAIC02MSwyMSArNjMsMjMgQEAKIAkiUENJIiwKIH07CiAKLXZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLGNvbnN0IGNoYXIgKnByZWZpeCxjb25zdAotCQljaGFyICpzdWZmaXgpCit2b2lkIGZsZXhjb3BfZGV2aWNlX25hbWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCiB7Ci0JaW5mbygiJXMgJyVzJyBhdCB0aGUgJyVzJyBidXMgY29udHJvbGxlZCBieSBhICclcycgJXMiLHByZWZpeCwKLQkJCWZsZXhjb3BfZGV2aWNlX25hbWVzW2ZjLT5kZXZfdHlwZV0sZmxleGNvcF9idXNfbmFtZXNbZmMtPmJ1c190eXBlXSwKLQkJCWZsZXhjb3BfcmV2aXNpb25fbmFtZXNbZmMtPnJldl0sc3VmZml4KTsKKwlpbmZvKCIlcyAnJXMnIGF0IHRoZSAnJXMnIGJ1cyBjb250cm9sbGVkIGJ5IGEgJyVzJyAlcyIsCisJCQlwcmVmaXgsCWZsZXhjb3BfZGV2aWNlX25hbWVzW2ZjLT5kZXZfdHlwZV0sCisJCQlmbGV4Y29wX2J1c19uYW1lc1tmYy0+YnVzX3R5cGVdLAorCQkJZmxleGNvcF9yZXZpc2lvbl9uYW1lc1tmYy0+cmV2XSwgc3VmZml4KTsKIH0KIAotdm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSkKK3ZvaWQgZmxleGNvcF9kdW1wX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGludCBudW0pCiB7CiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMscmVnKzQqaSk7Ci0JCWRlYl9yZHVtcCgiMHglMDN4OiAlMDh4LCAiLHJlZys0KmksIHYucmF3KTsKKwkJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHJlZys0KmkpOworCQlkZWJfcmR1bXAoIjB4JTAzeDogJTA4eCwgIiwgcmVnKzQqaSwgdi5yYXcpOwogCX0KIAlkZWJfcmR1bXAoIlxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKaW5kZXggNzZlMzdmZC4uMjI3YzAyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtcGNpLmMgLSBjb3ZlcnMgdGhlIFBDSSBwYXJ0IGluY2x1ZGluZyBETUEgdHJhbnNmZXJzLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLXBjaS5jIC0gY292ZXJzIHRoZSBQQ0kgcGFydCBpbmNsdWRpbmcgRE1BIHRyYW5zZmVycworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KIAogI2RlZmluZSBGQ19MT0dfUFJFRklYICJmbGV4Y29wLXBjaSIKQEAgLTExLDcgKzksOCBAQAogCiBzdGF0aWMgaW50IGVuYWJsZV9waWRfZmlsdGVyaW5nID0gMTsKIG1vZHVsZV9wYXJhbShlbmFibGVfcGlkX2ZpbHRlcmluZywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3BpZF9maWx0ZXJpbmcsICJlbmFibGUgaGFyZHdhcmUgcGlkIGZpbHRlcmluZzogc3VwcG9ydGVkIHZhbHVlczogMCAoZnVsbHRzKSwgMSIpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfcGlkX2ZpbHRlcmluZywKKwkiZW5hYmxlIGhhcmR3YXJlIHBpZCBmaWx0ZXJpbmc6IHN1cHBvcnRlZCB2YWx1ZXM6IDAgKGZ1bGx0cyksIDEiKTsKIAogc3RhdGljIGludCBpcnFfY2hrX2ludHYgPSAxMDA7CiBtb2R1bGVfcGFyYW0oaXJxX2Noa19pbnR2LCBpbnQsIDA2NDQpOwpAQCAtMjYsMTcgKzI1LDE3IEBACiAjZGVmaW5lIERFQlNUQVRVUyAiIChkZWJ1Z2dpbmcgaXMgbm90IGVuYWJsZWQpIgogI2VuZGlmCiAKLSNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgIGRwcmludGsoMHgwMSxhcmdzKQotI2RlZmluZSBkZWJfcmVnKGFyZ3MuLi4pICAgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKDB4MDQsYXJncykKLSNkZWZpbmUgZGViX2lycShhcmdzLi4uKSAgIGRwcmludGsoMHgwOCxhcmdzKQotI2RlZmluZSBkZWJfY2hrKGFyZ3MuLi4pICAgZHByaW50aygweDEwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSBkcHJpbnRrKDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSBkcHJpbnRrKDB4MDQsIGFyZ3MpCisjZGVmaW5lIGRlYl9pcnEoYXJncy4uLikgZHByaW50aygweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfY2hrKGFyZ3MuLi4pIGRwcmludGsoMHgxMCwgYXJncykKIAogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsCiAJInNldCBkZWJ1ZyBsZXZlbCAoMT1pbmZvLDI9cmVncyw0PVRTLDg9aXJxZG1hLDE2PWNoZWNrICh8LWFibGUpKS4iCi0JIERFQlNUQVRVUyk7CisJREVCU1RBVFVTKTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgogI2RlZmluZSBEUklWRVJfTkFNRSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIERpZ2l0YWwgVFYgUENJIERyaXZlciIKQEAgLTUxLDMwICs1MCwzMCBAQAogCiAJdm9pZCBfX2lvbWVtICppb19tZW07CiAJdTMyIGlycTsKLS8qIGJ1ZmZlcnNpemUgKGF0IGxlYXN0IGZvciBETUExLCBuZWVkIHRvIGJlICUgMTg4ID09IDAsCi0gKiB0aGlzIGxvZ2ljIGlzIHJlcXVpcmVkICovCisJLyogYnVmZmVyc2l6ZSAoYXQgbGVhc3QgZm9yIERNQTEsIG5lZWQgdG8gYmUgJSAxODggPT0gMCwKKwkgKiB0aGlzIGxvZ2ljIGlzIHJlcXVpcmVkICovCiAjZGVmaW5lIEZDX0RFRkFVTFRfRE1BMV9CVUZTSVpFICgxMjgwICogMTg4KQogI2RlZmluZSBGQ19ERUZBVUxUX0RNQTJfQlVGU0laRSAoMTAgKiAxODgpCiAJc3RydWN0IGZsZXhjb3BfZG1hIGRtYVsyXTsKIAogCWludCBhY3RpdmVfZG1hMV9hZGRyOyAvKiAwID0gYWRkcjAgb2YgZG1hMTsgMSA9IGFkZHIxIG9mIGRtYTEgKi8KLQl1MzIgbGFzdF9kbWExX2N1cl9wb3M7IC8qIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIGxhc3QgdGltZSB0aGUgdGltZXIvcGFja2V0IGlycSBvY2N1cmVkICovCisJdTMyIGxhc3RfZG1hMV9jdXJfcG9zOworCS8qIHBvc2l0aW9uIG9mIHRoZSBwb2ludGVyIGxhc3QgdGltZSB0aGUgdGltZXIvcGFja2V0IGlycSBvY2N1cmVkICovCiAJaW50IGNvdW50OwogCWludCBjb3VudF9wcmV2OwogCWludCBzdHJlYW1fcHJvYmxlbTsKIAogCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0KIAl1bnNpZ25lZCBsb25nIGxhc3RfaXJxOwogCiAJc3RydWN0IGRlbGF5ZWRfd29yayBpcnFfY2hlY2tfd29yazsKLQogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmNfZGV2OwogfTsKIAotc3RhdGljIGludCBsYXN0d3JlZyxsYXN0d3ZhbCxsYXN0cnJlZyxsYXN0cnZhbDsKK3N0YXRpYyBpbnQgbGFzdHdyZWcsIGxhc3R3dmFsLCBsYXN0cnJlZywgbGFzdHJ2YWw7CiAKLXN0YXRpYyBmbGV4Y29wX2liaV92YWx1ZSBmbGV4Y29wX3BjaV9yZWFkX2liaV9yZWcgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIpCitzdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF9wY2lfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIpCiB7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CkBAIC04MiwxOSArODEsMjAgQEAKIAogCWlmIChsYXN0cnJlZyAhPSByIHx8IGxhc3RydmFsICE9IHYucmF3KSB7CiAJCWxhc3RycmVnID0gcjsgbGFzdHJ2YWwgPSB2LnJhdzsKLQkJZGViX3JlZygibmV3IHJkOiAlM3g6ICUwOHhcbiIscix2LnJhdyk7CisJCWRlYl9yZWcoIm5ldyByZDogJTN4OiAlMDh4XG4iLCByLCB2LnJhdyk7CiAJfQogCiAJcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9wY2lfd3JpdGVfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByLCBmbGV4Y29wX2liaV92YWx1ZSB2KQorc3RhdGljIGludCBmbGV4Y29wX3BjaV93cml0ZV9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHIsIGZsZXhjb3BfaWJpX3ZhbHVlIHYpCiB7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCiAJaWYgKGxhc3R3cmVnICE9IHIgfHwgbGFzdHd2YWwgIT0gdi5yYXcpIHsKIAkJbGFzdHdyZWcgPSByOyBsYXN0d3ZhbCA9IHYucmF3OwotCQlkZWJfcmVnKCJuZXcgd3I6ICUzeDogJTA4eFxuIixyLHYucmF3KTsKKwkJZGViX3JlZygibmV3IHdyOiAlM3g6ICUwOHhcbiIsIHIsIHYucmF3KTsKIAl9CiAKIAl3cml0ZWwodi5yYXcsIGZjX3BjaS0+aW9fbWVtICsgcik7CkBAIC0xMTMsMTUgKzExMywxNiBAQAogCQkJZGViX2Noaygibm8gSVJRIHNpbmNlIHRoZSBsYXN0IGNoZWNrXG4iKTsKIAkJCWlmIChmY19wY2ktPnN0cmVhbV9wcm9ibGVtKysgPT0gMykgewogCQkJCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZDsKKwkJCQlkZWJfaW5mbygiZmxleGNvcC1wY2k6IHN0cmVhbSBwcm9ibGVtLCByZXNldHRpbmcgcGlkIGZpbHRlclxuIik7CiAKIAkJCQlzcGluX2xvY2tfaXJxKCZmYy0+ZGVtdXgubG9jayk7CiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmZWVkLCAmZmMtPmRlbXV4LmZlZWRfbGlzdCwKLQkJCQkJbGlzdF9oZWFkKSB7CisJCQkJCQlsaXN0X2hlYWQpIHsKIAkJCQkJZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBmZWVkLCAwKTsKIAkJCQl9CiAKIAkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZlZWQsICZmYy0+ZGVtdXguZmVlZF9saXN0LAotCQkJCQlsaXN0X2hlYWQpIHsKKwkJCQkJCWxpc3RfaGVhZCkgewogCQkJCQlmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsIGZlZWQsIDEpOwogCQkJCX0KIAkJCQlzcGluX3VubG9ja19pcnEoJmZjLT5kZW11eC5sb2NrKTsKQEAgLTE0OSwxMSArMTUwLDEwIEBACiAJZmxleGNvcF9pYmlfdmFsdWUgdjsKIAlpcnFyZXR1cm5fdCByZXQgPSBJUlFfSEFORExFRDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmY19wY2ktPmlycV9sb2NrLGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmNfcGNpLT5pcnFfbG9jaywgZmxhZ3MpOworCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBpcnFfMjBjKTsKIAotCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLGlycV8yMGMpOwotCi0gICAvKiBlcnJvcnMgKi8KKwkvKiBlcnJvcnMgKi8KIAlpZiAodi5pcnFfMjBjLkRhdGFfcmVjZWl2ZXJfZXJyb3IpCiAJCWRlYl9jaGsoImRhdGEgcmVjZWl2ZXIgZXJyb3JcbiIpOwogCWlmICh2LmlycV8yMGMuQ29udGludWl0eV9lcnJvcl9mbGFnKQpAQCAtMTY0LDI0ICsxNjQsMjkgQEAKIAkJZGViX2NoaygiVHJhbnNwb3J0IGVycm9yXG4iKTsKIAogCWlmICgoZmNfcGNpLT5jb3VudCAlIDEwMDApID09IDApCi0JCWRlYl9jaGsoIiVkIHZhbGlkIGlycSB0b29rIHBsYWNlIHNvIGZhclxuIixmY19wY2ktPmNvdW50KTsKKwkJZGViX2NoaygiJWQgdmFsaWQgaXJxIHRvb2sgcGxhY2Ugc28gZmFyXG4iLCBmY19wY2ktPmNvdW50KTsKIAogCWlmICh2LmlycV8yMGMuRE1BMV9JUlFfU3RhdHVzID09IDEpIHsKIAkJaWYgKGZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkciA9PSAwKQotCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LGZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCxmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKKwkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldiwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwLAorCQkJCQlmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKIAkJZWxzZQotCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3BjaS0+ZmNfZGV2LGZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMSxmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKKwkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldiwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIxLAorCQkJCQlmY19wY2ktPmRtYVswXS5zaXplIC8gMTg4KTsKIAogCQlkZWJfaXJxKCJwYWdlIGNoYW5nZSB0byBwYWdlOiAlZFxuIiwhZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyKTsKIAkJZmNfcGNpLT5hY3RpdmVfZG1hMV9hZGRyID0gIWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkcjsKLQl9IGVsc2UgaWYgKHYuaXJxXzIwYy5ETUExX1RpbWVyX1N0YXR1cyA9PSAxKSB7CiAJCS8qIGZvciB0aGUgdGltZXIgSVJRIHdlIG9ubHkgY2FuIHVzZSBidWZmZXIgZG14IGZlZWRpbmcsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQogCQkgKiBjb21wbGV0ZSBUUyBwYWNrZXRzIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBETUEgbWVtb3J5ICovCisJfSBlbHNlIGlmICh2LmlycV8yMGMuRE1BMV9UaW1lcl9TdGF0dXMgPT0gMSkgewogCQlkbWFfYWRkcl90IGN1cl9hZGRyID0KIAkJCWZjLT5yZWFkX2liaV9yZWcoZmMsZG1hMV8wMDgpLmRtYV8weDguZG1hX2N1cl9hZGRyIDw8IDI7CiAJCXUzMiBjdXJfcG9zID0gY3VyX2FkZHIgLSBmY19wY2ktPmRtYVswXS5kbWFfYWRkcjA7CiAKLQkJZGViX2lycSgiJXUgaXJxOiAlMDh4IGN1cl9hZGRyOiAlbGx4OiBjdXJfcG9zOiAlMDh4LCBsYXN0X2N1cl9wb3M6ICUwOHggIiwKKwkJZGViX2lycSgiJXUgaXJxOiAlMDh4IGN1cl9hZGRyOiAlbGx4OiBjdXJfcG9zOiAlMDh4LCAiCisJCQkibGFzdF9jdXJfcG9zOiAlMDh4ICIsCiAJCQkJamlmZmllc190b191c2VjcyhqaWZmaWVzIC0gZmNfcGNpLT5sYXN0X2lycSksCiAJCQkJdi5yYXcsICh1bnNpZ25lZCBsb25nIGxvbmcpY3VyX2FkZHIsIGN1cl9wb3MsCiAJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CkBAIC0xOTEsMzAgKzE5NiwzNiBAQAogCQkgKiBwYXNzIHRoZSBkYXRhIGZyb20gbGFzdF9jdXJfcG9zIHRvIHRoZSBidWZmZXIgZW5kIHRvIHRoZSBkZW11eAogCQkgKi8KIAkJaWYgKGN1cl9wb3MgPCBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKSB7Ci0JCQlkZWJfaXJxKCIgZW5kIHdhcyByZWFjaGVkOiBwYXNzaW5nICVkIGJ5dGVzICIsKGZjX3BjaS0+ZG1hWzBdLnNpemUqMiAtIDEpIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQlkZWJfaXJxKCIgZW5kIHdhcyByZWFjaGVkOiBwYXNzaW5nICVkIGJ5dGVzICIsCisJCQkJKGZjX3BjaS0+ZG1hWzBdLnNpemUqMiAtIDEpIC0KKwkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJCWZsZXhjb3BfcGFzc19kbXhfZGF0YShmY19wY2ktPmZjX2RldiwKLQkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsgZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKLQkJCQkJKGZjX3BjaS0+ZG1hWzBdLnNpemUqMikgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKKwkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKworCQkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAorCQkJCShmY19wY2ktPmRtYVswXS5zaXplKjIpIC0KKwkJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CiAJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zID0gMDsKIAkJfQogCiAJCWlmIChjdXJfcG9zID4gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcykgewotCQkJZGViX2lycSgiIHBhc3NpbmcgJWQgYnl0ZXMgIixjdXJfcG9zIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQlkZWJfaXJxKCIgcGFzc2luZyAlZCBieXRlcyAiLAorCQkJCWN1cl9wb3MgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJCWZsZXhjb3BfcGFzc19kbXhfZGF0YShmY19wY2ktPmZjX2RldiwKLQkJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsgZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKLQkJCQkJY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCArCisJCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MsCisJCQkJY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQl9CiAJCWRlYl9pcnEoIlxuIik7CiAKIAkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IGN1cl9wb3M7CiAJCWZjX3BjaS0+Y291bnQrKzsKIAl9IGVsc2UgewotCQlkZWJfaXJxKCJpc3IgZm9yIGZsZXhjb3AgY2FsbGVkLCBhcHBhcmVudGx5IHdpdGhvdXQgcmVhc29uICglMDh4KVxuIix2LnJhdyk7CisJCWRlYl9pcnEoImlzciBmb3IgZmxleGNvcCBjYWxsZWQsICIKKwkJCSJhcHBhcmVudGx5IHdpdGhvdXQgcmVhc29uICglMDh4KVxuIiwgdi5yYXcpOwogCQlyZXQgPSBJUlFfTk9ORTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmY19wY2ktPmlycV9sb2NrLGZsYWdzKTsKLQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjX3BjaS0+aXJxX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjIsNTIgKzIzMyw0OCBAQAogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlpZiAob25vZmYpIHsKLQkJZmxleGNvcF9kbWFfY29uZmlnKGZjLCZmY19wY2ktPmRtYVswXSxGQ19ETUFfMSk7Ci0JCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywmZmNfcGNpLT5kbWFbMV0sRkNfRE1BXzIpOwotCi0JCWZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihmYyxGQ19ETUFfMSwwKTsKLQotCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsRkNfRE1BXzEsRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsMSk7CisJCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywgJmZjX3BjaS0+ZG1hWzBdLCBGQ19ETUFfMSk7CisJCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywgJmZjX3BjaS0+ZG1hWzFdLCBGQ19ETUFfMik7CisJCWZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihmYywgRkNfRE1BXzEsIDApOworCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsIEZDX0RNQV8xLAorCQkJCUZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLCAxKTsKIAkJZGViX2lycSgiRE1BIHhmZXIgZW5hYmxlZFxuIik7CiAKIAkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IDA7Ci0JCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLEZDX0RNQV8xLDEpOworCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYywgRkNfRE1BXzEsIDEpOwogCQlkZWJfaXJxKCJJUlEgZW5hYmxlZFxuIik7Ci0KIAkJZmNfcGNpLT5jb3VudF9wcmV2ID0gZmNfcGNpLT5jb3VudDsKLQotLy8JCWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkciA9IDA7Ci0vLwkJZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShmYyxGQ19ETUFfMSwxKTsKLQogCX0gZWxzZSB7Ci0JCWZsZXhjb3BfZG1hX2NvbnRyb2xfdGltZXJfaXJxKGZjLEZDX0RNQV8xLDApOworCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYywgRkNfRE1BXzEsIDApOwogCQlkZWJfaXJxKCJJUlEgZGlzYWJsZWRcbiIpOwogCi0vLwkJZmxleGNvcF9kbWFfY29udHJvbF9zaXplX2lycShmYyxGQ19ETUFfMSwwKTsKLQotCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsRkNfRE1BXzEsRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsMCk7CisJCWZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChmYywgRkNfRE1BXzEsCisJCQkgRkNfRE1BX1NVQkFERFJfMCB8IEZDX0RNQV9TVUJBRERSXzEsIDApOwogCQlkZWJfaXJxKCJETUEgeGZlciBkaXNhYmxlZFxuIik7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9wY2lfZG1hX2luaXQoc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2kpCiB7CiAJaW50IHJldDsKLQlpZiAoKHJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwmZmNfcGNpLT5kbWFbMF0sRkNfREVGQVVMVF9ETUExX0JVRlNJWkUpKSAhPSAwKQorCXJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwgJmZjX3BjaS0+ZG1hWzBdLAorCQkJRkNfREVGQVVMVF9ETUExX0JVRlNJWkUpOworCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gZmxleGNvcF9kbWFfYWxsb2NhdGUoZmNfcGNpLT5wZGV2LCZmY19wY2ktPmRtYVsxXSxGQ19ERUZBVUxUX0RNQTJfQlVGU0laRSkpICE9IDApIHsKKwlyZXQgPSBmbGV4Y29wX2RtYV9hbGxvY2F0ZShmY19wY2ktPnBkZXYsICZmY19wY2ktPmRtYVsxXSwKKwkJCUZDX0RFRkFVTFRfRE1BMl9CVUZTSVpFKTsKKwlpZiAocmV0ICE9IDApIHsKIAkJZmxleGNvcF9kbWFfZnJlZSgmZmNfcGNpLT5kbWFbMF0pOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldixGQ19TUkFNX0RFU1RfTUVESUEgfCBGQ19TUkFNX0RFU1RfTkVULCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTEpOwotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldixGQ19TUkFNX0RFU1RfQ0FPICAgfCBGQ19TUkFNX0RFU1RfQ0FJLCBGQ19TUkFNX0RFU1RfVEFSR0VUX0RNQTIpOwotCisJZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3BjaS0+ZmNfZGV2LCBGQ19TUkFNX0RFU1RfTUVESUEgfAorCQkJRkNfU1JBTV9ERVNUX05FVCwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUExKTsKKwlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsIEZDX1NSQU1fREVTVF9DQU8gfAorCQkJRkNfU1JBTV9ERVNUX0NBSSwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUEyKTsKIAlmY19wY2ktPmluaXRfc3RhdGUgfD0gRkNfUENJX0RNQV9JTklUOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjkwLDEyICsyOTcsOCBAQAogCiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShmY19wY2ktPnBkZXYpKSAhPSAwKQogCQlyZXR1cm4gcmV0OwotCiAJcGNpX3NldF9tYXN0ZXIoZmNfcGNpLT5wZGV2KTsKIAotCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JLy8gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDZjLCAweDgwMDApOwotCiAJaWYgKChyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGZjX3BjaS0+cGRldiwgRFJJVkVSX05BTUUpKSAhPSAwKQogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXZpY2U7CiAKQEAgLTMzOCw4ICszNDEsOCBAQAogCWZjX3BjaS0+aW5pdF9zdGF0ZSAmPSB+RkNfUENJX0lOSVQ7CiB9CiAKLQotc3RhdGljIGludCBmbGV4Y29wX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgZmxleGNvcF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYzsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaTsKQEAgLTM1MCw3ICszNTMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCisJLyogZ2VuZXJhbCBmbGV4Y29wIGluaXQgKi8KIAlmY19wY2kgPSBmYy0+YnVzX3NwZWNpZmljOwogCWZjX3BjaS0+ZmNfZGV2ID0gZmM7CiAKQEAgLTM1OCw3ICszNjEsNiBAQAogCWZjLT53cml0ZV9pYmlfcmVnID0gZmxleGNvcF9wY2lfd3JpdGVfaWJpX3JlZzsKIAlmYy0+aTJjX3JlcXVlc3QgPSBmbGV4Y29wX2kyY19yZXF1ZXN0OwogCWZjLT5nZXRfbWFjX2FkZHIgPSBmbGV4Y29wX2VlcHJvbV9jaGVja19tYWNfYWRkcjsKLQogCWZjLT5zdHJlYW1fY29udHJvbCA9IGZsZXhjb3BfcGNpX3N0cmVhbV9jb250cm9sOwogCiAJaWYgKGVuYWJsZV9waWRfZmlsdGVyaW5nKQpAQCAtMzY4LDI5ICszNzAsMjkgQEAKIAogCWZjLT5waWRfZmlsdGVyaW5nID0gZW5hYmxlX3BpZF9maWx0ZXJpbmc7CiAJZmMtPmJ1c190eXBlID0gRkNfUENJOwotCiAJZmMtPmRldiA9ICZwZGV2LT5kZXY7CiAJZmMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCisJLyogYnVzIHNwZWNpZmljIHBhcnQgKi8KIAlmY19wY2ktPnBkZXYgPSBwZGV2OwogCWlmICgocmV0ID0gZmxleGNvcF9wY2lfaW5pdChmY19wY2kpKSAhPSAwKQogCQlnb3RvIGVycl9rZnJlZTsKIAotLyogaW5pdCBmbGV4Y29wICovCisJLyogaW5pdCBmbGV4Y29wICovCiAJaWYgKChyZXQgPSBmbGV4Y29wX2RldmljZV9pbml0aWFsaXplKGZjKSkgIT0gMCkKIAkJZ290byBlcnJfcGNpX2V4aXQ7CiAKLS8qIGluaXQgZG1hICovCisJLyogaW5pdCBkbWEgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfcGNpX2RtYV9pbml0KGZjX3BjaSkpICE9IDApCiAJCWdvdG8gZXJyX2ZjX2V4aXQ7CiAKIAlJTklUX0RFTEFZRURfV09SSygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywgZmxleGNvcF9wY2lfaXJxX2NoZWNrX3dvcmspOwogCi0JCWlmIChpcnFfY2hrX2ludHYgPiAwKQotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZmY19wY2ktPmlycV9jaGVja193b3JrLAotCQltc2Vjc190b19qaWZmaWVzKGlycV9jaGtfaW50diA8IDEwMCA/IDEwMCA6IGlycV9jaGtfaW50dikpOwotCisJaWYgKGlycV9jaGtfaW50diA+IDApCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKGlycV9jaGtfaW50diA8IDEwMCA/CisJCQkJCTEwMCA6CisJCQkJCWlycV9jaGtfaW50dikpOwogCXJldHVybiByZXQ7CiAKIGVycl9mY19leGl0OgpAQCAtNDIwLDcgKzQyMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmbGV4Y29wX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxM2QwLCAweDIxMDMpIH0sCi0vKgl7IFBDSV9ERVZJQ0UoMHgxM2QwLCAweDIyMDApIH0sID8gKi8KIAl7IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKaW5kZXggNzU5OWZjYy4uZGM0NTI4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaApAQCAtMSwxNCArMSwxMSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKICAqIGZsZXhjb3AtcmVnLmggLSByZWdpc3RlciBhYnN0cmFjdGlvbiBmb3IgRmxleENvcElJLCBGbGV4Q29wSUliIGFuZCBGbGV4Q29wSUlJCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpZm5kZWYgX19GTEVYQ09QX1JFR19IX18KICNkZWZpbmUgX19GTEVYQ09QX1JFR19IX18KIAotCiB0eXBlZGVmIGVudW0gewogCUZMRVhDT1BfVU5LID0gMCwKIAlGTEVYQ09QX0lJLApAQCAtMTgsMTMgKzE1LDEzIEBACiAKIHR5cGVkZWYgZW51bSB7CiAJRkNfVU5LID0gMCwKLQlGQ19BSVJfRFZCLAorCUZDX0NBQkxFLAorCUZDX0FJUl9EVkJULAogCUZDX0FJUl9BVFNDMSwKIAlGQ19BSVJfQVRTQzIsCi0JRkNfU0tZLAotCUZDX1NLWV9PTEQsCi0JRkNfQ0FCTEUsCiAJRkNfQUlSX0FUU0MzLAorCUZDX1NLWV9SRVYyMywKKwlGQ19TS1lfUkVWMjYsCiAJRkNfU0tZX1JFVjI3LAogCUZDX1NLWV9SRVYyOCwKIH0gZmxleGNvcF9kZXZpY2VfdHlwZV90OwpAQCAtMzYsMTIgKzMzLDEyIEBACiAKIC8qIEZsZXhDb3AgSUJJIFJlZ2lzdGVycyAqLwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9sZS5oIgorI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgiCiAjZWxzZQogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCSNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9iZS5oIgorI2luY2x1ZGUgImZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgiCiAjZWxzZQotCSNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAorI2Vycm9yIG5vIGVuZGlhbiBkZWZpbmVkCiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXNyYW0uYwppbmRleCBjZGE2OTUyLi5mMjE5OWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1zcmFtLmMKQEAgLTEsNDUgKzEsNDMgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3Atc3JhbS5jIC0gZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgU1JBTS4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1zcmFtLmMgLSBmdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBTUkFNCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAotc3RhdGljIHZvaWQgZmxleGNvcF9zcmFtX3NldF9jaGlwIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fdHlwZV90IHR5cGUpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3NyYW1fc2V0X2NoaXAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9zcmFtX3R5cGVfdCB0eXBlKQogewotCWZsZXhjb3Bfc2V0X2liaV92YWx1ZSh3YW5fY3RybF9yZWdfNzFjLHNyYW1fY2hpcCx0eXBlKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUod2FuX2N0cmxfcmVnXzcxYywgc3JhbV9jaGlwLCB0eXBlKTsKIH0KIAogaW50IGZsZXhjb3Bfc3JhbV9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7CiAJc3dpdGNoIChmYy0+cmV2KSB7Ci0JCWNhc2UgRkxFWENPUF9JSToKLQkJY2FzZSBGTEVYQ09QX0lJQjoKLQkJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYyxGQ19TUkFNXzFfMzJLQik7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEVYQ09QX0lJSToKLQkJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYyxGQ19TUkFNXzFfNDhLQik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgRkxFWENPUF9JSToKKwljYXNlIEZMRVhDT1BfSUlCOgorCQlmbGV4Y29wX3NyYW1fc2V0X2NoaXAoZmMsIEZDX1NSQU1fMV8zMktCKTsKKwkJYnJlYWs7CisJY2FzZSBGTEVYQ09QX0lJSToKKwkJZmxleGNvcF9zcmFtX3NldF9jaGlwKGZjLCBGQ19TUkFNXzFfNDhLQik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotaW50IGZsZXhjb3Bfc3JhbV9zZXRfZGVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3NyYW1fZGVzdF90IGRlc3QsIGZsZXhjb3Bfc3JhbV9kZXN0X3RhcmdldF90IHRhcmdldCkKK2ludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LAorCQkgZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7Ci0KLQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxzcmFtX2Rlc3RfcmVnXzcxNCk7CisJdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHNyYW1fZGVzdF9yZWdfNzE0KTsKIAogCWlmIChmYy0+cmV2ICE9IEZMRVhDT1BfSUlJICYmIHRhcmdldCA9PSBGQ19TUkFNX0RFU1RfVEFSR0VUX0ZDM19DQSkgewogCQllcnIoIlNSQU0gZGVzdGluYXRpb24gdGFyZ2V0IHRvIGF2YWlsYWJsZSBvbiBGbGV4Q29wSUkoYilcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlkZWJfc3JhbSgic3JhbSBkZXN0OiAleCB0YXJnZXQ6ICV4XG4iLGRlc3QsIHRhcmdldCk7CisJZGViX3NyYW0oInNyYW0gZGVzdDogJXggdGFyZ2V0OiAleFxuIiwgZGVzdCwgdGFyZ2V0KTsKIAogCWlmIChkZXN0ICYgRkNfU1JBTV9ERVNUX05FVCkKIAkJdi5zcmFtX2Rlc3RfcmVnXzcxNC5ORVRfRGVzdCA9IHRhcmdldDsKQEAgLTE1NCwxNCArMTUyLDEyIEBACiAJCWVsc2UKIAkJCWJhbmsgPSAweDEwMDAwMDAwOwogCX0KLQogCWZsZXhfc3JhbV93cml0ZShhZGFwdGVyLCBiYW5rLCBhZGRyICYgMHg3ZmZmLCBidWYsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNyYW1fcmVhZF9jaHVuayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJdTMyIGJhbms7Ci0KIAliYW5rID0gMDsKIAogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkgewpAQCAtMTc0LDI2ICsxNzAsMjIgQEAKIAkJZWxzZQogCQkJYmFuayA9IDB4MTAwMDAwMDA7CiAJfQotCiAJZmxleF9zcmFtX3JlYWQoYWRhcHRlciwgYmFuaywgYWRkciAmIDB4N2ZmZiwgYnVmLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBzcmFtX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQogewogCXUzMiBsZW5ndGg7Ci0KIAl3aGlsZSAobGVuICE9IDApIHsKIAkJbGVuZ3RoID0gbGVuOwotCi0JCS8vIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKLQkJLy8gMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHJlYWQgZnJvbQotCQkvLyBvbmUgY2hpcCBhdCBhIHRpbWUuCisJCS8qIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKKwkJICogMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHJlYWQKKwkJICogZnJvbSBvbmUgY2hpcCBhdCBhIHRpbWUgKi8KIAkJaWYgKChhZGRyID4+IDB4MGYpICE9ICgoYWRkciArIGxlbiAtIDEpID4+IDB4MGYpKSB7CiAJCQlsZW5ndGggPSAoKChhZGRyID4+IDB4MGYpICsgMSkgPDwgMHgwZikgLSBhZGRyOwogCQl9CiAKIAkJc3JhbV9yZWFkX2NodW5rKGFkYXB0ZXIsIGFkZHIsIGJ1ZiwgbGVuZ3RoKTsKLQogCQlhZGRyID0gYWRkciArIGxlbmd0aDsKIAkJYnVmID0gYnVmICsgbGVuZ3RoOwogCQlsZW4gPSBsZW4gLSBsZW5ndGg7CkBAIC0yMDMsMTkgKzE5NSwxNyBAQAogc3RhdGljIHZvaWQgc3JhbV93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsIHU4ICpidWYsIHUzMiBsZW4pCiB7CiAJdTMyIGxlbmd0aDsKLQogCXdoaWxlIChsZW4gIT0gMCkgewogCQlsZW5ndGggPSBsZW47CiAKLQkJLy8gY2hlY2sgaWYgdGhlIGFkZHJlc3MgcmFuZ2UgYmVsb25ncyB0byB0aGUgc2FtZQotCQkvLyAzMksgbWVtb3J5IGNoaXAuIElmIG5vdCwgdGhlIGRhdGEgaXMgd3JpdHRlbiB0bwotCQkvLyBvbmUgY2hpcCBhdCBhIHRpbWUuCisJCS8qIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKKwkJICogMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzCisJCSAqIHdyaXR0ZW4gdG8gb25lIGNoaXAgYXQgYSB0aW1lICovCiAJCWlmICgoYWRkciA+PiAweDBmKSAhPSAoKGFkZHIgKyBsZW4gLSAxKSA+PiAweDBmKSkgewogCQkJbGVuZ3RoID0gKCgoYWRkciA+PiAweDBmKSArIDEpIDw8IDB4MGYpIC0gYWRkcjsKIAkJfQogCiAJCXNyYW1fd3JpdGVfY2h1bmsoYWRhcHRlciwgYWRkciwgYnVmLCBsZW5ndGgpOwotCiAJCWFkZHIgPSBhZGRyICsgbGVuZ3RoOwogCQlidWYgPSBidWYgKyBsZW5ndGg7CiAJCWxlbiA9IGxlbiAtIGxlbmd0aDsKQEAgLTIyNCwzOSArMjE0LDI5IEBACiAKIHN0YXRpYyB2b2lkIHNyYW1fc2V0X3NpemUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtYXNrKQogewotCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgKG1hc2sgfCAofjB4MzAwMDAgJiByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykpKSk7CisJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLAorCQkJKG1hc2sgfCAofjB4MzAwMDAgJiByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykpKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNyYW1faW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgdG1wOwotCiAJdG1wID0gcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpOwotCiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAxKTsKIAogCWlmIChyZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYykgIT0gMCkgewogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIHRtcCk7Ci0KIAkJYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gdG1wICYgMHgzMDAwMDsKLQogCQlkZHByaW50aygiJXM6IGR3X3NyYW1fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKLQogCX0gZWxzZSB7Ci0KIAkJYWRhcHRlci0+ZHdfc3JhbV90eXBlID0gMHgxMDAwMDsKLQogCQlkZHByaW50aygiJXM6IGR3X3NyYW1fdHlwZSA9ICV4XG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+ZHdfc3JhbV90eXBlKTsKIAl9Ci0KLQkvKiByZXR1cm4gdmFsdWUgaXMgbmV2ZXIgdXNlZD8gKi8KLS8qCXJldHVybiBhZGFwdGVyLT5kd19zcmFtX3R5cGU7ICovCiB9CiAKIHN0YXRpYyBpbnQgc3JhbV90ZXN0X2xvY2F0aW9uKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbWFzaywgdTMyIGFkZHIpCiB7CiAJdTggdG1wMSwgdG1wMjsKLQogCWRwcmludGsoIiVzOiBtYXNrID0gJXgsIGFkZHIgPSAleFxuIiwgX19mdW5jX18sIG1hc2ssIGFkZHIpOwogCiAJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCBtYXNrKTsKQEAgLTI2OSw3ICsyNDksNiBAQAogCXNyYW1fd3JpdGUoYWRhcHRlciwgYWRkciArIDQsICZ0bXAxLCAxKTsKIAogCXRtcDIgPSAwOwotCiAJbWRlbGF5KDIwKTsKIAogCXNyYW1fcmVhZChhZGFwdGVyLCBhZGRyLCAmdG1wMiwgMSk7CkBAIC0yODcsNyArMjY2LDYgQEAKIAlzcmFtX3dyaXRlKGFkYXB0ZXIsIGFkZHIgKyA0LCAmdG1wMSwgMSk7CiAKIAl0bXAyID0gMDsKLQogCW1kZWxheSgyMCk7CiAKIAlzcmFtX3JlYWQoYWRhcHRlciwgYWRkciwgJnRtcDIsIDEpOwpAQCAtMjk3LDI2ICsyNzUsMjQgQEAKIAogCWlmICh0bXAyICE9IDB4NWEpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB1MzIgc3JhbV9sZW5ndGgoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDEwMDAwKQotCQlyZXR1cm4gMzI3Njg7CS8vICAzMksKKwkJcmV0dXJuIDMyNzY4OyAvKiAzMksgKi8KIAlpZiAoYWRhcHRlci0+ZHdfc3JhbV90eXBlID09IDB4MDAwMDApCi0JCXJldHVybiA2NTUzNjsJLy8gIDY0SworCQlyZXR1cm4gNjU1MzY7IC8qIDY0SyAqLwogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgyMDAwMCkKLQkJcmV0dXJuIDEzMTA3MjsJLy8gMTI4SwotCi0JcmV0dXJuIDMyNzY4OwkJLy8gMzJLCisJCXJldHVybiAxMzEwNzI7IC8qIDEyOEsgKi8KKwlyZXR1cm4gMzI3Njg7IC8qIDMySyAqLwogfQogCiAvKiBGbGV4Y29wSUkgY2FuIHdvcmsgd2l0aCAzMkssIDY0SyBvciAxMjhLIG9mIGV4dGVybmFsIFNSQU0gbWVtb3J5LgotICAgIC0gZm9yIDEyOEsgdGhlcmUgYXJlIDR4MzJLIGNoaXBzIGF0IGJhbmsgMCwxLDIsMy4KLSAgICAtIGZvciAgNjRLIHRoZXJlIGFyZSAyeDMySyBjaGlwcyBhdCBiYW5rIDEsMi4KLSAgICAtIGZvciAgMzJLIHRoZXJlIGlzIG9uZSAzMksgY2hpcCBhdCBiYW5rIDAuCisgICAtIGZvciAxMjhLIHRoZXJlIGFyZSA0eDMySyBjaGlwcyBhdCBiYW5rIDAsMSwyLDMuCisgICAtIGZvciAgNjRLIHRoZXJlIGFyZSAyeDMySyBjaGlwcyBhdCBiYW5rIDEsMi4KKyAgIC0gZm9yICAzMksgdGhlcmUgaXMgb25lIDMySyBjaGlwIGF0IGJhbmsgMC4KIAogICAgRmxleENvcCB3b3JrcyBvbmx5IHdpdGggb25lIGJhbmsgYXQgYSB0aW1lLiBUaGUgYmFuayBpcyBzZWxlY3RlZAogICAgYnkgYml0cyAyOC0yOSBvZiB0aGUgMHg3MDAgcmVnaXN0ZXIuCkBAIC0zMjQsMjQgKzMwMCwxOCBAQAogICAgYmFuayAwIGNvdmVycyBhZGRyZXNzZXMgMHgwMDAwMC0weDA3ZmZmCiAgICBiYW5rIDEgY292ZXJzIGFkZHJlc3NlcyAweDA4MDAwLTB4MGZmZmYKICAgIGJhbmsgMiBjb3ZlcnMgYWRkcmVzc2VzIDB4MTAwMDAtMHgxN2ZmZgotICAgYmFuayAzIGNvdmVycyBhZGRyZXNzZXMgMHgxODAwMC0weDFmZmZmCi0qLworICAgYmFuayAzIGNvdmVycyBhZGRyZXNzZXMgMHgxODAwMC0weDFmZmZmICovCiAKIHN0YXRpYyBpbnQgZmxleGNvcF9zcmFtX2RldGVjdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHIyMDgscjcxY18wLHZyNzFjXzE7Ci0KKwlmbGV4Y29wX2liaV92YWx1ZSByMjA4LCByNzFjXzAsIHZyNzFjXzE7CiAJcjIwOCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYywgY3RybF8yMDgsIGliaV96ZXJvKTsKIAogCXI3MWNfMCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHdhbl9jdHJsX3JlZ183MWMpOwotCiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCAxKTsKLQogCXRtcDMgPSByZWFkX3JlZ19kdyhhZGFwdGVyLCAweDcxYyk7Ci0KIAlkcHJpbnRrKCIlczogdG1wMyA9ICV4XG4iLCBfX2Z1bmNfXywgdG1wMyk7Ci0KIAl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIHRtcDIpOwogCiAJLy8gY2hlY2sgZm9yIGludGVybmFsIFNSQU0gPz8/CkBAIC0zNTAsOSArMzIwLDcgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDMyS1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiAzMjsKIAl9CiAKQEAgLTM2MCw5ICszMjgsNyBAQAogCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MjAwMDApOwogCQlzcmFtX2luaXQoYWRhcHRlcik7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gMTI4S1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiAxMjg7CiAJfQogCkBAIC0zNzAsOSArMzM2LDcgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDAwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDY0S1xuIiwgX19mdW5jX18pOwotCiAJCXJldHVybiA2NDsKIAl9CiAKQEAgLTM4MCwxOCArMzQ0LDE0IEBACiAJCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgxMDAwMCk7CiAJCXNyYW1faW5pdChhZGFwdGVyKTsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSAzMktcbiIsIF9fZnVuY19fKTsKLQogCQlyZXR1cm4gMzI7CiAJfQogCiAJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDEwMDAwKTsKIAlzcmFtX2luaXQoYWRhcHRlcik7CiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJZHByaW50aygiJXM6IFNSQU0gZGV0ZWN0aW9uIGZhaWxlZC4gU2V0IHRvIDMySyBcbiIsIF9fZnVuY19fKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKaW5kZXggYWUwZDc2YS4uYmVkY2ZiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYwpAQCAtMSwxMSArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLXVzYi5jIC0gY292ZXJzIHRoZSBVU0IgcGFydC4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC11c2IuYyAtIGNvdmVycyB0aGUgVVNCIHBhcnQKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCi0KICNkZWZpbmUgRkNfTE9HX1BSRUZJWCAiZmxleGNvcF91c2IiCiAjaW5jbHVkZSAiZmxleGNvcC11c2IuaCIKICNpbmNsdWRlICJmbGV4Y29wLWNvbW1vbi5oIgpAQCAtMTgsNDIgKzE1LDQ3IEBACiAvKiBkZWJ1ZyAqLwogI2lmZGVmIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QX0RFQlVHCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikgXAotCSAgICBkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRlYnVnX2R1bXAoYixsLG1ldGhvZCkge1wKKwlkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHByaW50ayhhcmdzKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJ1Z19kdW1wKGIsIGwsIG1ldGhvZCkgZG8ge1wKIAlpbnQgaTsgXAotCWZvciAoaSA9IDA7IGkgPCBsOyBpKyspIG1ldGhvZCgiJTAyeCAiLCBiW2ldKTsgXAotCW1ldGhvZCgiXG4iKTtcCi19CisJZm9yIChpID0gMDsgaSA8IGw7IGkrKykgXAorCQltZXRob2QoIiUwMnggIiwgYltpXSk7IFwKKwltZXRob2QoIlxuIik7IFwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgREVCU1RBVFVTICIiCiAjZWxzZQotI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pCi0jZGVmaW5lIGRlYnVnX2R1bXAoYixsLG1ldGhvZCkKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgYXJncy4uLikKKyNkZWZpbmUgZGVidWdfZHVtcChiLCBsLCBtZXRob2QpCiAjZGVmaW5lIERFQlNUQVRVUyAiIChkZWJ1Z2dpbmcgaXMgbm90IGVuYWJsZWQpIgogI2VuZGlmCiAKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLHRzPTIsY3RybD00LGkyYz04LHY4bWVtPTE2IChvci1hYmxlKSkuIiBERUJTVEFUVVMpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyx0cz0yLCIKKwkJImN0cmw9NCxpMmM9OCx2OG1lbT0xNiAob3ItYWJsZSkpLiIgREVCU1RBVFVTKTsKICN1bmRlZiBERUJTVEFUVVMKIAotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pICAgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9jdHJsKGFyZ3MuLi4pIGRwcmludGsoMHgwNCxhcmdzKQotI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX3Y4KGFyZ3MuLi4pICAgZHByaW50aygweDEwLGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pIGRwcmludGsoMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX2N0cmwoYXJncy4uLikgZHByaW50aygweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pIGRwcmludGsoMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX3Y4KGFyZ3MuLi4pIGRwcmludGsoMHgxMCwgYXJncykKIAogLyogSkxQIDExMTcwMDogd2Ugd2lsbCBpbmNsdWRlIHRoZSAxIGJpdCBnYXAgYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIDMgYml0cwogICogaW4gdGhlIElCSSBhZGRyZXNzLCB0byBtYWtlIHRoZSBWOCBjb2RlIHNpbXBsZXIuCi0gKiBQQ0kgQUREUkVTUyBGT1JNQVQ6IDB4NzFDIC0+IDAwMDAgMDExMSAwMDAxIDExMDAgKHRoZXNlIGFyZSB0aGUgc2l4IGJpdHMgdXNlZCkKKyAqIFBDSSBBRERSRVNTIEZPUk1BVDogMHg3MUMgLT4gMDAwMCAwMTExIDAwMDEgMTEwMCAodGhlIHNpeCBiaXRzIHVzZWQpCiAgKiAgICAgICAgICAgICAgICAgIGluIGdlbmVyYWw6IDAwMDAgMEhISCAwMDBMIExMMDAKICAqIElCSSBBRERSRVNTIEZPUk1BVDogICAgICAgICAgICAgICAgICAgIFJISEggQkxMTAogICoKICAqIHdoZXJlIFIgaXMgdGhlIHJlYWQoMSkvd3JpdGUoMCkgYml0LCBCIGlzIHRoZSBidXN5IGJpdAogICogYW5kIEhISCBhbmQgTExMIGFyZSB0aGUgdHdvIHNldHMgb2YgdGhyZWUgYml0cyBmcm9tIHRoZSBQQ0kgYWRkcmVzcy4KICAqLwotI2RlZmluZSBCMkMyX0ZMRVhfUENJT0ZGU0VUX1RPX0lOVEVSTkFMQUREUih1c1BDSSkgKHU4KSAoKCh1c1BDSSA+PiAyKSAmIDB4MDcpICsgKCh1c1BDSSA+PiA0KSAmIDB4NzApKQotI2RlZmluZSBCMkMyX0ZMRVhfSU5URVJOQUxBRERSX1RPX1BDSU9GRlNFVCh1Y0FkZHIpICh1MTYpICgoKHVjQWRkciAmIDB4MDcpIDw8IDIpICsgKCh1Y0FkZHIgJiAweDcwKSA8PCA0KSkKKyNkZWZpbmUgQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIodXNQQ0kpICh1OCkgXAorCSgoKHVzUENJID4+IDIpICYgMHgwNykgKyAoKHVzUENJID4+IDQpICYgMHg3MCkpCisjZGVmaW5lIEIyQzJfRkxFWF9JTlRFUk5BTEFERFJfVE9fUENJT0ZGU0VUKHVjQWRkcikgKHUxNikgXAorCSgoKHVjQWRkciAmIDB4MDcpIDw8IDIpICsgKCh1Y0FkZHIgJiAweDcwKSA8PCA0KSkKIAogLyoKICAqIERLVCAwMjAyMjgKQEAgLTY5LDEyICs3MSwxMyBAQAogCXN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiID0gZmMtPmJ1c19zcGVjaWZpYzsKIAl1OCByZXF1ZXN0ID0gcmVhZCA/IEIyQzJfVVNCX1JFQURfUkVHIDogQjJDMl9VU0JfV1JJVEVfUkVHOwogCXU4IHJlcXVlc3RfdHlwZSA9IChyZWFkID8gVVNCX0RJUl9JTiA6IFVTQl9ESVJfT1VUKSB8IFVTQl9UWVBFX1ZFTkRPUjsKLQl1OCB3QWRkcmVzcyA9IEIyQzJfRkxFWF9QQ0lPRkZTRVRfVE9fSU5URVJOQUxBRERSKHdSZWdPZmZzUENJKSB8IChyZWFkID8gMHg4MCA6IDApOworCXU4IHdBZGRyZXNzID0gQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIod1JlZ09mZnNQQ0kpIHwKKwkJKHJlYWQgPyAweDgwIDogMCk7CiAKIAlpbnQgbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldiwKIAkJCXJlYWQgPyBCMkMyX1VTQl9DVFJMX1BJUEVfSU4gOiBCMkMyX1VTQl9DVFJMX1BJUEVfT1VULAogCQkJcmVxdWVzdCwKLQkJCXJlcXVlc3RfdHlwZSwgIC8qIDB4YzAgcmVhZCBvciAweDQwIHdyaXRlKi8KKwkJCXJlcXVlc3RfdHlwZSwgLyogMHhjMCByZWFkIG9yIDB4NDAgd3JpdGUgKi8KIAkJCXdBZGRyZXNzLAogCQkJMCwKIAkJCXZhbCwKQEAgLTgyLDU1ICs4NSw0OSBAQAogCQkJQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUkRXICogSFopOwogCiAJaWYgKGxlbiAhPSBzaXplb2YodTMyKSkgewotCQllcnIoImVycm9yIHdoaWxlICVzIGR3b3JkIGZyb20gJWQgKCVkKS4iLHJlYWQgPyAicmVhZGluZyIgOiAid3JpdGluZyIsCi0JCQl3QWRkcmVzcyx3UmVnT2Zmc1BDSSk7CisJCWVycigiZXJyb3Igd2hpbGUgJXMgZHdvcmQgZnJvbSAlZCAoJWQpLiIsIHJlYWQgPyAicmVhZGluZyIgOgorCQkJCSJ3cml0aW5nIiwgd0FkZHJlc3MsIHdSZWdPZmZzUENJKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwogfQotCiAvKgogICogREtUIDAxMDgxNyAtIGFkZCBzdXBwb3J0IGZvciBWOCBtZW1vcnkgcmVhZC93cml0ZSBhbmQgZmxhc2ggdXBkYXRlCiAgKi8KIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfdjhfbWVtb3J5X3JlcShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKIAkJZmxleGNvcF91c2JfcmVxdWVzdF90IHJlcSwgdTggcGFnZSwgdTE2IHdBZGRyZXNzLAotCQl1OCAqcGJCdWZmZXIsdTMyIGJ1ZmxlbikKKwkJdTggKnBiQnVmZmVyLCB1MzIgYnVmbGVuKQogewotLy8JdTggZHdSZXF1ZXN0VHlwZTsKIAl1OCByZXF1ZXN0X3R5cGUgPSBVU0JfVFlQRV9WRU5ET1I7CiAJdTE2IHdJbmRleDsKLQlpbnQgbldhaXRUaW1lLHBpcGUsbGVuOwotCisJaW50IG5XYWl0VGltZSwgcGlwZSwgbGVuOwogCXdJbmRleCA9IHBhZ2UgPDwgODsKIAogCXN3aXRjaCAocmVxKSB7Ci0JCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06Ci0JCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFJFQUQ7Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfUkVBRF9WOF9NRU1PUlk7Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOworCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06CisJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRDsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47CiAJCWJyZWFrOwotCQljYXNlIEIyQzJfVVNCX1dSSVRFX1Y4X01FTToKLQkJCXdJbmRleCB8PSBwYkJ1ZmZlclswXTsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKLQkJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4V1JJVEU7Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX1dSSVRFX1Y4X01FTU9SWTsKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOworCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgorCQl3SW5kZXggfD0gcGJCdWZmZXJbMF07CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKKwkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURTsKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CiAJCWJyZWFrOwotCQljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOgotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOwotCQkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSDsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfV1JJVEVfVjhfRkxBU0g7Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKKwljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOgorCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7CisJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4RkxBU0g7CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOwogCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZvciB2OF9tZW1fcmVxICV4LlxuIixyZXEpOworCWRlZmF1bHQ6CisJCWRlYl9pbmZvKCJ1bnN1cHBvcnRlZCByZXF1ZXN0IGZvciB2OF9tZW1fcmVxICV4LlxuIiwgcmVxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWRlYl92OCgidjhtZW06ICUwMnggJTAyeCAlMDR4ICUwNHgsIGxlbjogJWRcbiIscmVxdWVzdF90eXBlLHJlcSwKLQkJCXdBZGRyZXNzLHdJbmRleCxidWZsZW4pOworCWRlYl92OCgidjhtZW06ICUwMnggJTAyeCAlMDR4ICUwNHgsIGxlbjogJWRcbiIsIHJlcXVlc3RfdHlwZSwgcmVxLAorCQkJd0FkZHJlc3MsIHdJbmRleCwgYnVmbGVuKTsKIAotCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYscGlwZSwKKwlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LCBwaXBlLAogCQkJcmVxLAogCQkJcmVxdWVzdF90eXBlLAogCQkJd0FkZHJlc3MsCkBAIC0xMzksMzkgKzEzNiw1MyBAQAogCQkJYnVmbGVuLAogCQkJbldhaXRUaW1lICogSFopOwogCi0JZGVidWdfZHVtcChwYkJ1ZmZlcixsZW4sZGViX3Y4KTsKLQorCWRlYnVnX2R1bXAocGJCdWZmZXIsIGxlbiwgZGViX3Y4KTsKIAlyZXR1cm4gbGVuID09IGJ1ZmxlbiA/IDAgOiAtRUlPOwogfQogCiAjZGVmaW5lIGJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKHBhZGRyLGJ1ZmxlbikgXAotCQkJKChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpID4gYnVmbGVuIFwKLQkJCT8gYnVmbGVuIDogKFY4X01FTU9SWV9QQUdFX1NJWkUgLSAocGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSkpCisJKChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpID4gYnVmbGVuIFwKKwkgPyBidWZsZW4gOiAoVjhfTUVNT1JZX1BBR0VfU0laRSAtIChwYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spKSkKIAotc3RhdGljIGludCBmbGV4Y29wX3VzYl9tZW1vcnlfcmVxKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLGZsZXhjb3BfdXNiX3JlcXVlc3RfdCByZXEsCi0JCWZsZXhjb3BfdXNiX21lbV9wYWdlX3QgcGFnZV9zdGFydCwgdTMyIGFkZHIsIGludCBleHRlbmRlZCwgdTggKmJ1ZiwgdTMyIGxlbikKK3N0YXRpYyBpbnQgZmxleGNvcF91c2JfbWVtb3J5X3JlcShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKKwkJZmxleGNvcF91c2JfcmVxdWVzdF90IHJlcSwgZmxleGNvcF91c2JfbWVtX3BhZ2VfdCBwYWdlX3N0YXJ0LAorCQl1MzIgYWRkciwgaW50IGV4dGVuZGVkLCB1OCAqYnVmLCB1MzIgbGVuKQogewogCWludCBpLHJldCA9IDA7CiAJdTE2IHdNYXg7CiAJdTMyIHBhZ2VjaHVuayA9IDA7CiAKIAlzd2l0Y2gocmVxKSB7Ci0JCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06ICB3TWF4ID0gVVNCX01FTV9SRUFEX01BWDsgYnJlYWs7Ci0JCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgl3TWF4ID0gVVNCX01FTV9XUklURV9NQVg7IGJyZWFrOwotCQljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOiAgd01heCA9IFVTQl9GTEFTSF9NQVg7IGJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBCMkMyX1VTQl9SRUFEX1Y4X01FTToKKwkJd01heCA9IFVTQl9NRU1fUkVBRF9NQVg7CisJCWJyZWFrOworCWNhc2UgQjJDMl9VU0JfV1JJVEVfVjhfTUVNOgorCQl3TWF4ID0gVVNCX01FTV9XUklURV9NQVg7CisJCWJyZWFrOworCWNhc2UgQjJDMl9VU0JfRkxBU0hfQkxPQ0s6CisJCXdNYXggPSBVU0JfRkxBU0hfTUFYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7Ci0JCXBhZ2VjaHVuayA9IHdNYXggPCBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLGxlbikgPyB3TWF4IDogYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UoYWRkcixsZW4pOwotCQlkZWJfaW5mbygiJXhcbiIsKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8IChWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpKTsKLQkJaWYgKChyZXQgPSBmbGV4Y29wX3VzYl92OF9tZW1vcnlfcmVxKGZjX3VzYixyZXEsCi0JCQkJcGFnZV9zdGFydCArIChhZGRyIC8gVjhfTUVNT1JZX1BBR0VfU0laRSksIC8qIGFjdHVhbCBwYWdlICovCi0JCQkJKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8IChWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpLAotCQkJCSZidWZbaV0scGFnZWNodW5rKSkgPCAwKQotCQkJcmV0dXJuIHJldDsKKwkJcGFnZWNodW5rID0KKwkJCXdNYXggPCBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLCBsZW4pID8KKwkJCQl3TWF4IDoKKwkJCQlieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShhZGRyLCBsZW4pOworCQlkZWJfaW5mbygiJXhcbiIsCisJCQkoYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spIHwKKwkJCQkoVjhfTUVNT1JZX0VYVEVOREVEKmV4dGVuZGVkKSk7CiAKKwkJcmV0ID0gZmxleGNvcF91c2JfdjhfbWVtb3J5X3JlcShmY191c2IsIHJlcSwKKwkJCXBhZ2Vfc3RhcnQgKyAoYWRkciAvIFY4X01FTU9SWV9QQUdFX1NJWkUpLAorCQkJKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8CisJCQkJKFY4X01FTU9SWV9FWFRFTkRFRCpleHRlbmRlZCksCisJCQkmYnVmW2ldLCBwYWdlY2h1bmspOworCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKIAkJYWRkciArPSBwYWdlY2h1bms7CiAJCWxlbiAtPSBwYWdlY2h1bms7CiAJfQpAQCAtMTgwLDggKzE5MSw5IEBACiAKIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfZ2V0X21hY19hZGRyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBleHRlbmRlZCkKIHsKLQlyZXR1cm4gZmxleGNvcF91c2JfbWVtb3J5X3JlcShmYy0+YnVzX3NwZWNpZmljLEIyQzJfVVNCX1JFQURfVjhfTUVNLAotCQkJVjhfTUVNT1JZX1BBR0VfRkxBU0gsMHgxZjAxMCwxLGZjLT5kdmJfYWRhcHRlci5wcm9wb3NlZF9tYWMsNik7CisJcmV0dXJuIGZsZXhjb3BfdXNiX21lbW9yeV9yZXEoZmMtPmJ1c19zcGVjaWZpYywgQjJDMl9VU0JfUkVBRF9WOF9NRU0sCisJCVY4X01FTU9SWV9QQUdFX0ZMQVNILCAweDFmMDEwLCAxLAorCQlmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLCA2KTsKIH0KIAogI2lmIDAKQEAgLTE5MSwxMSArMjAzLDggQEAKIHsKIAl1MTYgd1ZhbHVlOwogCXU4IHJlcXVlc3RfdHlwZSA9IChzZXQgPyBVU0JfRElSX09VVCA6IFVTQl9ESVJfSU4pIHwgVVNCX1RZUEVfVkVORE9SOwotLy8JdTggZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfR0VORVJJQywKIAlpbnQgbldhaXRUaW1lID0gMiwKLQkJcGlwZSA9IHNldCA/IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQgOiBCMkMyX1VTQl9DVFJMX1BJUEVfSU4sCi0JCWxlbjsKLQorCSAgICBwaXBlID0gc2V0ID8gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVCA6IEIyQzJfVVNCX0NUUkxfUElQRV9JTiwgbGVuOwogCXdWYWx1ZSA9IChmdW5jIDw8IDgpIHwgZXh0cmE7CiAKIAlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LHBpcGUsCkBAIC0yMTgsMzYgKzIyNywzNSBAQAogCXN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiID0gaTJjLT5mYy0+YnVzX3NwZWNpZmljOwogCXUxNiB3VmFsdWUsIHdJbmRleDsKIAlpbnQgbldhaXRUaW1lLHBpcGUsbGVuOwotLy8JdTggZHdSZXF1ZXN0VHlwZTsKIAl1OCByZXF1ZXN0X3R5cGUgPSBVU0JfVFlQRV9WRU5ET1I7CiAKIAlzd2l0Y2ggKGZ1bmMpIHsKLQkJY2FzZSBVU0JfRlVOQ19JMkNfV1JJVEU6Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX01VTFRJV1JJVEU6Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX1JFUEVBVFdSSVRFOgorCWNhc2UgVVNCX0ZVTkNfSTJDX1dSSVRFOgorCWNhc2UgVVNCX0ZVTkNfSTJDX01VTFRJV1JJVEU6CisJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUV1JJVEU6CiAJCS8qIERLVCAwMjAyMDggLSBhZGQgdGhpcyB0byBzdXBwb3J0IHNwZWNpYWwgY2FzZSBvZiBEaVNFcUMgKi8KLQkJY2FzZSBVU0JfRlVOQ19JMkNfQ0hFQ0tXUklURToKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOwotCQkJbldhaXRUaW1lID0gMjsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfR0VORVJJQzsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKKwljYXNlIFVTQl9GVU5DX0kyQ19DSEVDS1dSSVRFOgorCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKKwkJbldhaXRUaW1lID0gMjsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOwogCQlicmVhazsKLQkJY2FzZSBVU0JfRlVOQ19JMkNfUkVBRDoKLQkJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUUkVBRDoKLQkJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfSU47Ci0JCQluV2FpdFRpbWUgPSAyOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9HRU5FUklDOwotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47CisJY2FzZSBVU0JfRlVOQ19JMkNfUkVBRDoKKwljYXNlIFVTQl9GVU5DX0kyQ19SRVBFQVRSRUFEOgorCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOworCQluV2FpdFRpbWUgPSAyOworCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9JTjsKIAkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgZnVuY3Rpb24gZm9yIGkyY19yZXEgJXhcbiIsZnVuYyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgZnVuY3Rpb24gZm9yIGkyY19yZXEgJXhcbiIsIGZ1bmMpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJd1ZhbHVlID0gKGZ1bmMgPDwgOCkgfCAoaTJjLT5wb3J0IDw8IDQpOwogCXdJbmRleCA9IChjaGlwYWRkciA8PCA4ICkgfCBhZGRyOwogCi0JZGViX2kyYygiaTJjICUyZDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsZnVuYyxyZXF1ZXN0X3R5cGUscmVxLAotCQl3VmFsdWUgJiAweGZmLCB3VmFsdWUgPj4gOCwgd0luZGV4ICYgMHhmZiwgd0luZGV4ID4+IDgpOworCWRlYl9pMmMoImkyYyAlMmQ6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkJZnVuYywgcmVxdWVzdF90eXBlLCByZXEsCisJCQl3VmFsdWUgJiAweGZmLCB3VmFsdWUgPj4gOCwKKwkJCXdJbmRleCAmIDB4ZmYsIHdJbmRleCA+PiA4KTsKIAogCWxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYscGlwZSwKIAkJCXJlcSwKQEAgLTI1Nyw0NCArMjY1LDQ5IEBACiAJCQlidWYsCiAJCQlidWZsZW4sCiAJCQluV2FpdFRpbWUgKiBIWik7Ci0KIAlyZXR1cm4gbGVuID09IGJ1ZmxlbiA/IDAgOiAtRVJFTU9URUlPOwogfQogCi0vKiBhY3R1YWwgYnVzIHNwZWNpZmljIGFjY2VzcyBmdW5jdGlvbnMsIG1ha2Ugc3VyZSBwcm90b3R5cGUgYXJlL3dpbGwgYmUgZXF1YWwgdG8gcGNpICovCi1zdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF91c2JfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZykKKy8qIGFjdHVhbCBidXMgc3BlY2lmaWMgYWNjZXNzIGZ1bmN0aW9ucywKKyAgIG1ha2Ugc3VyZSBwcm90b3R5cGUgYXJlL3dpbGwgYmUgZXF1YWwgdG8gcGNpICovCitzdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF91c2JfcmVhZF9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHZhbDsKIAl2YWwucmF3ID0gMDsKLQlmbGV4Y29wX3VzYl9yZWFkd3JpdGVfZHcoZmMscmVnLCAmdmFsLnJhdywgMSk7CisJZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLCByZWcsICZ2YWwucmF3LCAxKTsKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfdXNiX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBmbGV4Y29wX2liaV92YWx1ZSB2YWwpCitzdGF0aWMgaW50IGZsZXhjb3BfdXNiX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBmbGV4Y29wX2liaV92YWx1ZSB2YWwpCiB7Ci0JcmV0dXJuIGZsZXhjb3BfdXNiX3JlYWR3cml0ZV9kdyhmYyxyZWcsICZ2YWwucmF3LCAwKTsKKwlyZXR1cm4gZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLCByZWcsICZ2YWwucmF3LCAwKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX3VzYl9pMmNfcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjLAotCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQorCQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKIHsKIAlpZiAob3AgPT0gRkNfUkVBRCkKIAkJcmV0dXJuIGZsZXhjb3BfdXNiX2kyY19yZXEoaTJjLCBCMkMyX1VTQl9JMkNfUkVRVUVTVCwKLQkJCVVTQl9GVU5DX0kyQ19SRUFELCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOworCQkJCVVTQl9GVU5DX0kyQ19SRUFELCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOwogCWVsc2UKIAkJcmV0dXJuIGZsZXhjb3BfdXNiX2kyY19yZXEoaTJjLCBCMkMyX1VTQl9JMkNfUkVRVUVTVCwKLQkJCVVTQl9GVU5DX0kyQ19XUklURSwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgbGVuKTsKKwkJCQlVU0JfRlVOQ19JMkNfV1JJVEUsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGxlbik7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfdXNiX3Byb2Nlc3NfZnJhbWUoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsIHU4ICpidWZmZXIsIGludCBidWZmZXJfbGVuZ3RoKQorc3RhdGljIHZvaWQgZmxleGNvcF91c2JfcHJvY2Vzc19mcmFtZShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiwKKwl1OCAqYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCkKIHsKIAl1OCAqYjsKIAlpbnQgbDsKIAotCWRlYl90cygidG1wX2J1ZmZlcl9sZW5ndGg9JWQsIGJ1ZmZlcl9sZW5ndGg9JWRcbiIsIGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlcl9sZW5ndGgpOworCWRlYl90cygidG1wX2J1ZmZlcl9sZW5ndGg9JWQsIGJ1ZmZlcl9sZW5ndGg9JWRcbiIsCisJCWZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlcl9sZW5ndGgpOwogCiAJaWYgKGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGggPiAwKSB7Ci0JCW1lbWNweShmY191c2ItPnRtcF9idWZmZXIrZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCwgYnVmZmVyLCBidWZmZXJfbGVuZ3RoKTsKKwkJbWVtY3B5KGZjX3VzYi0+dG1wX2J1ZmZlcitmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoLCBidWZmZXIsCisJCQkJYnVmZmVyX2xlbmd0aCk7CiAJCWZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGggKz0gYnVmZmVyX2xlbmd0aDsKIAkJYiA9IGZjX3VzYi0+dG1wX2J1ZmZlcjsKIAkJbCA9IGZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGg7CkBAIC0zMDQsMjMgKzMxNywyNiBAQAogCX0KIAogCXdoaWxlIChsID49IDE5MCkgewotCQlpZiAoKmIgPT0gMHhmZikKKwkJaWYgKCpiID09IDB4ZmYpIHsKIAkJCXN3aXRjaCAoKihiKzEpICYgMHgwMykgewotCQkJCWNhc2UgMHgwMTogLyogbWVkaWEgcGFja2V0ICovCi0JCQkJCWlmICggKihiKzIpID09IDB4NDcgKQotCQkJCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKGZjX3VzYi0+ZmNfZGV2LCBiKzIsIDEpOwotCQkJCQllbHNlCi0JCQkJCQlkZWJfdHMoIm5vdCB0cyBwYWNrZXQgJTAyeCAlMDJ4ICUwMnggJTAyeCBcbiIsICooYisyKSwgKihiKzMpLCAqKGIrNCksICooYis1KSApOwotCi0JCQkJCWIgKz0gMTkwOwotCQkJCQlsIC09IDE5MDsKKwkJCWNhc2UgMHgwMTogLyogbWVkaWEgcGFja2V0ICovCisJCQkJaWYgKCooYisyKSA9PSAweDQ3KQorCQkJCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoCisJCQkJCQkJZmNfdXNiLT5mY19kZXYsIGIrMiwgMSk7CisJCQkJZWxzZQorCQkJCQlkZWJfdHMoCisJCQkJCSJub3QgdHMgcGFja2V0ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLAorCQkJCQkJKihiKzIpLCAqKGIrMyksCisJCQkJCQkqKGIrNCksICooYis1KSk7CisJCQkJYiArPSAxOTA7CisJCQkJbCAtPSAxOTA7CiAJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZGViX3RzKCJ3cm9uZyBwYWNrZXQgdHlwZVxuIik7Ci0JCQkJCWwgPSAwOworCQkJZGVmYXVsdDoKKwkJCQlkZWJfdHMoIndyb25nIHBhY2tldCB0eXBlXG4iKTsKKwkJCQlsID0gMDsKIAkJCQlicmVhazsKIAkJCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQlkZWJfdHMoIndyb25nIGhlYWRlclxuIik7CiAJCQlsID0gMDsKIAkJfQpAQCAtMzM3LDIzICszNTMsMjYgQEAKIAlpbnQgaTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKQotCQlkZWJfdHMoInVyYiBjb21wbGV0ZWQsIGJ1ZnNpemU6ICVkIGFjdGxlbjsgJWRcbiIsdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQlkZWJfdHMoInVyYiBjb21wbGV0ZWQsIGJ1ZnNpemU6ICVkIGFjdGxlbjsgJWRcbiIsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CiAJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA8IDApIHsKLQkJCWVycigiaXNvIGZyYW1lIGRlc2NyaXB0b3IgJWQgaGFzIGFuIGVycm9yOiAlZFxuIixpLHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCWVycigiaXNvIGZyYW1lIGRlc2NyaXB0b3IgJWQgaGFzIGFuIGVycm9yOiAlZFxuIiwgaSwKKwkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CiAJCX0gZWxzZQogCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+IDApIHsKLQkJCQlkZWJfdHMoInBhc3NlZCAlZCBieXRlcyB0byB0aGUgZGVtdXhcbiIsdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoKTsKKwkJCQlkZWJfdHMoInBhc3NlZCAlZCBieXRlcyB0byB0aGUgZGVtdXhcbiIsCisJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7CiAKIAkJCQlmbGV4Y29wX3VzYl9wcm9jZXNzX2ZyYW1lKGZjX3VzYiwKLQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgKworCQkJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQsCiAJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7Ci0JCX0KKwkJCX0KIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOwogCX0KLQogCXVzYl9zdWJtaXRfdXJiKHVyYixHRlBfQVRPTUlDKTsKIH0KIApAQCAtMzc0LDM1ICszOTMsNDcgQEAKIAkJfQogCiAJaWYgKGZjX3VzYi0+aXNvX2J1ZmZlciAhPSBOVUxMKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KE5VTEwsZmNfdXNiLT5idWZmZXJfc2l6ZSwgZmNfdXNiLT5pc29fYnVmZmVyLCBmY191c2ItPmRtYV9hZGRyKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChOVUxMLAorCQkJZmNfdXNiLT5idWZmZXJfc2l6ZSwgZmNfdXNiLT5pc29fYnVmZmVyLAorCQkJZmNfdXNiLT5kbWFfYWRkcik7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfdHJhbnNmZXJfaW5pdChzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYikKIHsKLQl1MTYgZnJhbWVfc2l6ZSA9IGxlMTZfdG9fY3B1KGZjX3VzYi0+dWludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKLQlpbnQgYnVmc2l6ZSA9IEIyQzJfVVNCX05VTV9JU09fVVJCICogQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08gKiBmcmFtZV9zaXplLGksaixyZXQ7CisJdTE2IGZyYW1lX3NpemUgPSBsZTE2X3RvX2NwdSgKKwkJZmNfdXNiLT51aW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2Mud01heFBhY2tldFNpemUpOworCWludCBidWZzaXplID0gQjJDMl9VU0JfTlVNX0lTT19VUkIgKiBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyAqCisJCWZyYW1lX3NpemUsIGksIGosIHJldDsKIAlpbnQgYnVmZmVyX29mZnNldCA9IDA7CiAKLQlkZWJfdHMoImNyZWF0aW5nICVkIGlzby11cmJzIHdpdGggJWQgZnJhbWVzIGVhY2ggb2YgJWQgYnl0ZXMgc2l6ZSA9ICVkLlxuIiwKLQkJCUIyQzJfVVNCX05VTV9JU09fVVJCLCBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTywgZnJhbWVfc2l6ZSxidWZzaXplKTsKKwlkZWJfdHMoImNyZWF0aW5nICVkIGlzby11cmJzIHdpdGggJWQgZnJhbWVzICIKKwkJCSJlYWNoIG9mICVkIGJ5dGVzIHNpemUgPSAlZC5cbiIsIEIyQzJfVVNCX05VTV9JU09fVVJCLAorCQkJQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sIGZyYW1lX3NpemUsIGJ1ZnNpemUpOwogCi0JZmNfdXNiLT5pc29fYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCxidWZzaXplLCZmY191c2ItPmRtYV9hZGRyKTsKKwlmY191c2ItPmlzb19idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChOVUxMLAorCQkJYnVmc2l6ZSwgJmZjX3VzYi0+ZG1hX2FkZHIpOwogCWlmIChmY191c2ItPmlzb19idWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisKIAltZW1zZXQoZmNfdXNiLT5pc29fYnVmZmVyLCAwLCBidWZzaXplKTsKIAlmY191c2ItPmJ1ZmZlcl9zaXplID0gYnVmc2l6ZTsKIAogCS8qIGNyZWF0aW5nIGlzbyB1cmJzICovCi0JZm9yIChpID0gMDsgaSA8IEIyQzJfVVNCX05VTV9JU09fVVJCOyBpKyspCi0JCWlmICghKGZjX3VzYi0+aXNvX3VyYltpXSA9IHVzYl9hbGxvY191cmIoQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sR0ZQX0FUT01JQykpKSB7CisJZm9yIChpID0gMDsgaSA8IEIyQzJfVVNCX05VTV9JU09fVVJCOyBpKyspIHsKKwkJZmNfdXNiLT5pc29fdXJiW2ldID0gdXNiX2FsbG9jX3VyYihCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTywKKwkJCUdGUF9BVE9NSUMpOworCQlpZiAoZmNfdXNiLT5pc29fdXJiW2ldID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIHVyYl9lcnJvcjsKIAkJfQorCX0KKwogCS8qIGluaXRpYWxpc2luZyBhbmQgc3VibWl0dGluZyBpc28gdXJicyAqLwogCWZvciAoaSA9IDA7IGkgPCBCMkMyX1VTQl9OVU1fSVNPX1VSQjsgaSsrKSB7CiAJCWludCBmcmFtZV9vZmZzZXQgPSAwOwogCQlzdHJ1Y3QgdXJiICp1cmIgPSBmY191c2ItPmlzb191cmJbaV07Ci0JCWRlYl90cygiaW5pdGlhbGl6aW5nIGFuZCBzdWJtaXR0aW5nIHVyYiBuby4gJWQgKGJ1Zl9vZmZzZXQ6ICVkKS5cbiIsaSxidWZmZXJfb2Zmc2V0KTsKKwkJZGViX3RzKCJpbml0aWFsaXppbmcgYW5kIHN1Ym1pdHRpbmcgdXJiIG5vLiAlZCAiCisJCQkiKGJ1Zl9vZmZzZXQ6ICVkKS5cbiIsIGksIGJ1ZmZlcl9vZmZzZXQpOwogCiAJCXVyYi0+ZGV2ID0gZmNfdXNiLT51ZGV2OwogCQl1cmItPmNvbnRleHQgPSBmY191c2I7CkBAIC00MTYsMjYgKzQ0NywyNiBAQAogCiAJCWJ1ZmZlcl9vZmZzZXQgKz0gZnJhbWVfc2l6ZSAqIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPOwogCQlmb3IgKGogPSAwOyBqIDwgQjJDMl9VU0JfRlJBTUVTX1BFUl9JU087IGorKykgewotCQkJZGViX3RzKCJ1cmIgbm86ICVkLCBmcmFtZTogJWQsIGZyYW1lX29mZnNldDogJWRcbiIsaSxqLGZyYW1lX29mZnNldCk7CisJCQlkZWJfdHMoInVyYiBubzogJWQsIGZyYW1lOiAlZCwgZnJhbWVfb2Zmc2V0OiAlZFxuIiwKKwkJCQkJaSwgaiwgZnJhbWVfb2Zmc2V0KTsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gZnJhbWVfb2Zmc2V0OwogCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBmcmFtZV9zaXplOwogCQkJZnJhbWVfb2Zmc2V0ICs9IGZyYW1lX3NpemU7CiAJCX0KIAogCQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGZjX3VzYi0+aXNvX3VyYltpXSxHRlBfQVRPTUlDKSkpIHsKLQkJCWVycigic3VibWl0dGluZyB1cmIgJWQgZmFpbGVkIHdpdGggJWQuIixpLHJldCk7CisJCQllcnIoInN1Ym1pdHRpbmcgdXJiICVkIGZhaWxlZCB3aXRoICVkLiIsIGksIHJldCk7CiAJCQlnb3RvIHVyYl9lcnJvcjsKIAkJfQogCQlkZWJfdHMoInN1Ym1pdHRlZCB1cmIgbm8uICVkLlxuIixpKTsKIAl9CiAKLS8qIFNSQU0gKi8KLQotCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY191c2ItPmZjX2RldixGQ19TUkFNX0RFU1RfTUVESUEgfCBGQ19TUkFNX0RFU1RfTkVUIHwKLQkJCUZDX1NSQU1fREVTVF9DQU8gfCBGQ19TUkFNX0RFU1RfQ0FJLCBGQ19TUkFNX0RFU1RfVEFSR0VUX1dBTl9VU0IpOwotCWZsZXhjb3Bfd2FuX3NldF9zcGVlZChmY191c2ItPmZjX2RldixGQ19XQU5fU1BFRURfOE1CSVRTKTsKLQlmbGV4Y29wX3NyYW1fY3RybChmY191c2ItPmZjX2RldiwxLDEsMSk7Ci0KKwkvKiBTUkFNICovCisJZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3VzYi0+ZmNfZGV2LCBGQ19TUkFNX0RFU1RfTUVESUEgfAorCQkJRkNfU1JBTV9ERVNUX05FVCB8IEZDX1NSQU1fREVTVF9DQU8gfCBGQ19TUkFNX0RFU1RfQ0FJLAorCQkJRkNfU1JBTV9ERVNUX1RBUkdFVF9XQU5fVVNCKTsKKwlmbGV4Y29wX3dhbl9zZXRfc3BlZWQoZmNfdXNiLT5mY19kZXYsIEZDX1dBTl9TUEVFRF84TUJJVFMpOworCWZsZXhjb3Bfc3JhbV9jdHJsKGZjX3VzYi0+ZmNfZGV2LCAxLCAxLCAxKTsKIAlyZXR1cm4gMDsKIAogdXJiX2Vycm9yOgpAQCAtNDQ4LDIwICs0NzksMjAgQEAKIAkvKiB1c2UgdGhlIGFsdGVybmF0ZSBzZXR0aW5nIHdpdGggdGhlIGxhcmdlcyBidWZmZXIgKi8KIAl1c2Jfc2V0X2ludGVyZmFjZShmY191c2ItPnVkZXYsMCwxKTsKIAlzd2l0Y2ggKGZjX3VzYi0+dWRldi0+c3BlZWQpIHsKLQkJY2FzZSBVU0JfU1BFRURfTE9XOgotCQkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHRvIHNMT1cuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWJyZWFrOwotCQljYXNlIFVTQl9TUEVFRF9GVUxMOgotCQkJaW5mbygicnVubmluZyBhdCBGVUxMIHNwZWVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1NQRUVEX0hJR0g6Ci0JCQlpbmZvKCJydW5uaW5nIGF0IEhJR0ggc3BlZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjogLyogZmFsbCB0aHJvdWdoICovCi0JCWRlZmF1bHQ6Ci0JCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdW5rb3duLiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSBVU0JfU1BFRURfTE9XOgorCQllcnIoImNhbm5vdCBoYW5kbGUgVVNCIHNwZWVkIGJlY2F1c2UgaXQgaXMgdG9vIHNsb3cuIik7CisJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9GVUxMOgorCQlpbmZvKCJydW5uaW5nIGF0IEZVTEwgc3BlZWQuIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0hJR0g6CisJCWluZm8oInJ1bm5pbmcgYXQgSElHSCBzcGVlZC4iKTsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVU5LTk9XTjogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHVua25vd24uIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAl1c2Jfc2V0X2ludGZkYXRhKGZjX3VzYi0+dWludGYsIGZjX3VzYik7CiAJcmV0dXJuIDA7CkBAIC00ODUsNyArNTE2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0vKiBnZW5lcmFsIGZsZXhjb3AgaW5pdCAqLworCS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCiAJZmNfdXNiID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlmY191c2ItPmZjX2RldiA9IGZjOwogCkBAIC01MDIsMjEgKzUzMywyMSBAQAogCWZjLT5kZXYgPSAmdWRldi0+ZGV2OwogCWZjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0vKiBidXMgc3BlY2lmaWMgcGFydCAqLworCS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCiAJZmNfdXNiLT51ZGV2ID0gdWRldjsKIAlmY191c2ItPnVpbnRmID0gaW50ZjsKIAlpZiAoKHJldCA9IGZsZXhjb3BfdXNiX2luaXQoZmNfdXNiKSkgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWU7CiAKLS8qIGluaXQgZmxleGNvcCAqLworCS8qIGluaXQgZmxleGNvcCAqLwogCWlmICgocmV0ID0gZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShmYykpICE9IDApCiAJCWdvdG8gZXJyX3VzYl9leGl0OwogCi0vKiB4ZmVyIGluaXQgKi8KKwkvKiB4ZmVyIGluaXQgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfdXNiX3RyYW5zZmVyX2luaXQoZmNfdXNiKSkgIT0gMCkKIAkJZ290byBlcnJfZmNfZXhpdDsKIAotCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsRFJJVkVSX05BTUUpOworCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgY29ubmVjdGVkLiIsIERSSVZFUl9OQU1FKTsKIAlyZXR1cm4gMDsKIAogZXJyX2ZjX2V4aXQ6CkBAIC01MzUsMTIgKzU2NiwxMiBAQAogCWZsZXhjb3BfZGV2aWNlX2V4aXQoZmNfdXNiLT5mY19kZXYpOwogCWZsZXhjb3BfdXNiX2V4aXQoZmNfdXNiKTsKIAlmbGV4Y29wX2RldmljZV9rZnJlZShmY191c2ItPmZjX2Rldik7Ci0JaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGRlaW5pdGlhbGl6ZWQgYW5kIGRpc2Nvbm5lY3RlZC4iLERSSVZFUl9OQU1FKTsKKwlpbmZvKCIlcyBzdWNjZXNzZnVsbHkgZGVpbml0aWFsaXplZCBhbmQgZGlzY29ubmVjdGVkLiIsIERSSVZFUl9OQU1FKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGZsZXhjb3BfdXNiX3RhYmxlIFtdID0gewotCSAgICB7IFVTQl9ERVZJQ0UoMHgwYWY3LCAweDAxMDEpIH0sCi0JICAgIHsgfQorCXsgVVNCX0RFVklDRSgweDBhZjcsIDB4MDEwMSkgfSwKKwl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGZsZXhjb3BfdXNiX3RhYmxlKTsKIApAQCAtNTU3LDEwICs1ODgsOSBAQAogewogCWludCByZXN1bHQ7CiAJaWYgKChyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmZsZXhjb3BfdXNiX2RyaXZlcikpKSB7Ci0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gKCVkKSIscmVzdWx0KTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiAoJWQpIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oCmluZGV4IDYzMGU2NDcuLjkyNTI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmgKQEAgLTEsMTUgKzEsMjAgQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC11c2IuaCAtIGhlYWRlciBmaWxlIGZvciB0aGUgVVNCIHBhcnQKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgorICovCiAjaWZuZGVmIF9fRkxFWENPUF9VU0JfSF9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9VU0JfSF9JTkNMVURFRF9fCiAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAogLyogdHJhbnNmZXIgcGFyYW1ldGVycyAqLwotI2RlZmluZSBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTwkJNAotI2RlZmluZSBCMkMyX1VTQl9OVU1fSVNPX1VSQgkJNAorI2RlZmluZSBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTyA0CisjZGVmaW5lIEIyQzJfVVNCX05VTV9JU09fVVJCIDQKIAotI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfSU4JCXVzYl9yY3ZjdHJscGlwZShmY191c2ItPnVkZXYsMCkKLSNkZWZpbmUgQjJDMl9VU0JfQ1RSTF9QSVBFX09VVAkJdXNiX3NuZGN0cmxwaXBlKGZjX3VzYi0+dWRldiwwKQotI2RlZmluZSBCMkMyX1VTQl9EQVRBX1BJUEUJCQl1c2JfcmN2aXNvY3BpcGUoZmNfdXNiLT51ZGV2LDB4ODEpCisjZGVmaW5lIEIyQzJfVVNCX0NUUkxfUElQRV9JTiB1c2JfcmN2Y3RybHBpcGUoZmNfdXNiLT51ZGV2LCAwKQorI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUIHVzYl9zbmRjdHJscGlwZShmY191c2ItPnVkZXYsIDApCisjZGVmaW5lIEIyQzJfVVNCX0RBVEFfUElQRSB1c2JfcmN2aXNvY3BpcGUoZmNfdXNiLT51ZGV2LCAweDgxKQogCiBzdHJ1Y3QgZmxleGNvcF91c2IgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwpAQCAtMTgsOCArMjMsOCBAQAogCXU4ICppc29fYnVmZmVyOwogCWludCBidWZmZXJfc2l6ZTsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCXN0cnVjdCB1cmIgKmlzb191cmJbQjJDMl9VU0JfTlVNX0lTT19VUkJdOwogCisJc3RydWN0IHVyYiAqaXNvX3VyYltCMkMyX1VTQl9OVU1fSVNPX1VSQl07CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmY19kZXY7CiAKIAl1OCB0bXBfYnVmZmVyWzEwMjMrMTkwXTsKQEAgLTMwLDE0ICszNSw2IEBACiAvKiByZXF1ZXN0IHR5cGVzIFRPRE8gV2hhdCBpcyBpdHMgdXNlPyovCiB0eXBlZGVmIGVudW0gewogCi0vKiBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB0aGlzIHBhcnQKLQlSVFlQRV9SRUFEX0RXICAgICAgICAgPSAoMSA8PCA2KSwKLQlSVFlQRV9XUklURV9EV18xICAgICAgPSAoMyA8PCA2KSwKLQlSVFlQRV9SRUFEX1Y4X01FTU9SWSAgPSAoNiA8PCA2KSwKLQlSVFlQRV9XUklURV9WOF9NRU1PUlkgPSAoNyA8PCA2KSwKLQlSVFlQRV9XUklURV9WOF9GTEFTSCAgPSAoOCA8PCA2KSwKLQlSVFlQRV9HRU5FUklDICAgICAgICAgPSAoOSA8PCA2KSwKLSovCiB9IGZsZXhjb3BfdXNiX3JlcXVlc3RfdHlwZV90OwogI2VuZGlmCiAKQEAgLTQ3LDcgKzQ0LDYgQEAKIAlCMkMyX1VTQl9SRUFEX1Y4X01FTSAgPSAweDA1LAogCUIyQzJfVVNCX1JFQURfUkVHICAgICA9IDB4MDgsCiAJQjJDMl9VU0JfV1JJVEVfUkVHICAgID0gMHgwQSwKLS8qCUIyQzJfVVNCX1dSSVRFUkVHTE8gICA9IDB4MEEsICovCiAJQjJDMl9VU0JfV1JJVEVSRUdISSAgID0gMHgwQiwKIAlCMkMyX1VTQl9GTEFTSF9CTE9DSyAgPSAweDEwLAogCUIyQzJfVVNCX0kyQ19SRVFVRVNUICA9IDB4MTEsCkBAIC02MiwxNSArNTgsMTMgQEAKIAlVU0JfRlVOQ19JMkNfUkVQRUFUV1JJVEUgPSAweDA0LAogCVVTQl9GVU5DX0dFVF9ERVNDUklQVE9SICA9IDB4MDUsCiAJVVNCX0ZVTkNfSTJDX1JFUEVBVFJFQUQgID0gMHgwNiwKLS8qIERLVCAwMjAyMDggLSBhZGQgdGhpcyB0byBzdXBwb3J0IHNwZWNpYWwgY2FzZSBvZiBEaVNFcUMgKi8KKwkvKiBES1QgMDIwMjA4IC0gYWRkIHRoaXMgdG8gc3VwcG9ydCBzcGVjaWFsIGNhc2Ugb2YgRGlTRXFDICovCiAJVVNCX0ZVTkNfSTJDX0NIRUNLV1JJVEUgID0gMHgwNywKIAlVU0JfRlVOQ19JMkNfQ0hFQ0tSRVNVTFQgPSAweDA4LAogfSBmbGV4Y29wX3VzYl9pMmNfZnVuY3Rpb25fdDsKIAotLyoKLSAqIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFVUSUxJVFkgcmVxdWVzdCAweDEyCi0gKiBES1QgMDIwMzA0IC0gbmV3IHV0aWxpdHkgZnVuY3Rpb24KLSAqLworLyogZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgVVRJTElUWSByZXF1ZXN0IDB4MTIKKyAqIERLVCAwMjAzMDQgLSBuZXcgdXRpbGl0eSBmdW5jdGlvbiAqLwogdHlwZWRlZiBlbnVtIHsKIAlVVElMSVRZX1NFVF9GSUxURVIgICAgICAgICAgPSAweDAxLAogCVVUSUxJVFlfREFUQV9FTkFCTEUgICAgICAgICA9IDB4MDIsCkBAIC04NCw3ICs3OCw3IEBACiAJVVRJTElUWV9EQVRBX1JFU0VUICAgICAgICAgID0gMHgwQSwKIAlVVElMSVRZX0dFVF9EQVRBX1NUQVRVUyAgICAgPSAweDEwLAogCVVUSUxJVFlfR0VUX1Y4X1JFRyAgICAgICAgICA9IDB4MTEsCi0vKiBES1QgMDIwMzI2IC0gYWRkIGZ1bmN0aW9uIGZvciB2MS4xNCAqLworCS8qIERLVCAwMjAzMjYgLSBhZGQgZnVuY3Rpb24gZm9yIHYxLjE0ICovCiAJVVRJTElUWV9TUkFNX1dSSVRFICAgICAgICAgID0gMHgxMiwKIAlVVElMSVRZX1NSQU1fUkVBRCAgICAgICAgICAgPSAweDEzLAogCVVUSUxJVFlfU1JBTV9URVNURklMTCAgICAgICA9IDB4MTQsCkBAIC05MiwxMyArODYsMTMgQEAKIAlVVElMSVRZX1NSQU1fVEVTVFZFUklGWSAgICAgPSAweDE2LAogfSBmbGV4Y29wX3VzYl91dGlsaXR5X2Z1bmN0aW9uX3Q7CiAKLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUlcgIDEqSFogICAgICAgLyogMSBzICovCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JEVyAzKkhaICAgICAgIC8qIDMgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9XRFcgMSpIWiAgICAgICAvKiAxIHMgKi8KKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fUlcgKDEqSFopCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JEVyAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fV0RXICgxKkhaKQogCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRCAgIDMqSFogIC8qIDMgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFdSSVRFICAzKkhaICAvKiAzIHMgKi8KLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSCAgMypIWiAgLyogMyBzICovCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4UkVBRCAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURSAoMypIWikKKyNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhGTEFTSCAoMypIWikKIAogdHlwZWRlZiBlbnVtIHsKIAlWOF9NRU1PUllfUEFHRV9EVkJfQ0kgPSAweDIwLApAQCAtMTA3LDEzICsxMDEsMTEgQEAKIAlWOF9NRU1PUllfUEFHRV9GTEFTSCAgPSAweDgwCiB9IGZsZXhjb3BfdXNiX21lbV9wYWdlX3Q7CiAKLSNkZWZpbmUgVjhfTUVNT1JZX0VYVEVOREVEICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgVVNCX01FTV9SRUFEX01BWCAgICAgICAgICAgICAgICAzMgotI2RlZmluZSBVU0JfTUVNX1dSSVRFX01BWCAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVVNCX0ZMQVNIX01BWCAgICAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgVjhfTUVNT1JZX1BBR0VfU0laRSAgICAgMHg4MDAwICAgICAgLy8gMzJLCi0jZGVmaW5lIFY4X01FTU9SWV9QQUdFX01BU0sgICAgIDB4N0ZGRgorI2RlZmluZSBWOF9NRU1PUllfRVhURU5ERUQgKDEgPDwgMTUpCisjZGVmaW5lIFVTQl9NRU1fUkVBRF9NQVggICAzMgorI2RlZmluZSBVU0JfTUVNX1dSSVRFX01BWCAgIDEKKyNkZWZpbmUgVVNCX0ZMQVNIX01BWCAgICAgICA4CisjZGVmaW5lIFY4X01FTU9SWV9QQUdFX1NJWkUgMHg4MDAwIC8qIDMySyAqLworI2RlZmluZSBWOF9NRU1PUllfUEFHRV9NQVNLIDB4N0ZGRgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKaW5kZXggOTEwNjg5NS4uMmRmMWIwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmMKQEAgLTEsMjIgKzEsMjAgQEAKIC8qCi0gKiBmbGV4Y29wLmMgLSBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPgotICoKLSAqIGJhc2VkIG9uIHRoZSBza3lzdGFyMi1kcml2ZXIKLSAqIENvcHlyaWdodCAoQykgMjAwMyBWYWRpbSBDYXRhbmEsIHNreXN0YXJAbW9sZG92YS5jYworICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AuYyAtIG1haW4gbW9kdWxlIHBhcnQKKyAqIENvcHlyaWdodCAoQykgMjAwNC05IFBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPgorICogYmFzZWQgb24gc2t5c3RhcjItZHJpdmVyIENvcHlyaWdodCAoQykgMjAwMyBWYWRpbSBDYXRhbmEsIHNreXN0YXJAbW9sZG92YS5jYwogICoKICAqIEFja25vd2xlZGdlbWVudHM6Ci0gKiAgICAgSm9obiBKdXJyaXVzIGZyb20gQkJUSSwgSW5jLiBmb3IgZXh0ZW5zaXZlIHN1cHBvcnQgd2l0aAotICogICAgICAgICBjb2RlIGV4YW1wbGVzIGFuZCBkYXRhIGJvb2tzCi0gKgotICogICAgIEJqYXJuZSBTdGVpbnNibywgYmphcm5lIGF0IHN0ZWluc2JvLmNvbSAoc29tZSBpZGVhcyBmb3IgcmV3cml0aW5nKQorICogICBKb2huIEp1cnJpdXMgZnJvbSBCQlRJLCBJbmMuIGZvciBleHRlbnNpdmUgc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgIHdpdGggY29kZSBleGFtcGxlcyBhbmQgZGF0YSBib29rcworICogICBCamFybmUgU3RlaW5zYm8sIGJqYXJuZSBhdCBzdGVpbnNiby5jb20gKHNvbWUgaWRlYXMgZm9yIHJld3JpdGluZykKICAqCiAgKiBDb250cmlidXRpb25zIHRvIHRoZSBza3lzdGFyMi1kcml2ZXIgaGF2ZSBiZWVuIGRvbmUgYnkKLSAqICAgICBWaW5jZW56byBEaSBNYXNzYSwgaGF3ay5pdCBhdCB0aXNjYWxpbmV0Lml0IChzZXZlcmFsIERpU0VxQyBmaXhlcykKLSAqICAgICBSb2JlcnRvIFJhZ3VzYSwgci5yYWd1c2EgYXQgbGliZXJvLml0IChwb2xpc2hpbmcsIHJlc3R5bGluZyB0aGUgY29kZSkKLSAqICAgICBOaWtsYXMgUGVpbmVja2UsIHBlaW5lY2tlIGF0IGdkdi51bmktaGFubm92ZXIuZGUgKGhhcmR3YXJlIHBpZC9tYWMgZmlsdGVyaW5nKQotICoKKyAqICAgVmluY2Vuem8gRGkgTWFzc2EsIGhhd2suaXQgYXQgdGlzY2FsaW5ldC5pdCAoc2V2ZXJhbCBEaVNFcUMgZml4ZXMpCisgKiAgIFJvYmVydG8gUmFndXNhLCByLnJhZ3VzYSBhdCBsaWJlcm8uaXQgKHBvbGlzaGluZywgcmVzdHlsaW5nIHRoZSBjb2RlKQorICogICBVd2UgQnVnbGEsIHV3ZS5idWdsYSBhdCBnbXguZGUgKGRvaW5nIHRlc3RzLCByZXN0eWxpbmcgY29kZSwgd3JpdGluZyBkb2N1KQorICogICBOaWtsYXMgUGVpbmVja2UsIHBlaW5lY2tlIGF0IGdkdi51bmktaGFubm92ZXIuZGUgKGhhcmR3YXJlIHBpZC9tYWMKKyAqICAgICAgICAgICAgICAgZmlsdGVyaW5nKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNDYsNyArNDQsMTAgQEAKIAogaW50IGIyYzJfZmxleGNvcF9kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYjJjMl9mbGV4Y29wX2RlYnVnLCAgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXR1bmVyLDQ9aTJjLDg9dHMsMTY9c3JhbSwzMj1yZWcgKHwtYWJsZSkpLiIgREVCU1RBVFVTKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsCisJCSJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXR1bmVyLDQ9aTJjLDg9dHMsIgorCQkiMTY9c3JhbSwzMj1yZWcgKHwtYWJsZSkpLiIKKwkJREVCU1RBVFVTKTsKICN1bmRlZiBERUJTVEFUVVMKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CkBAIC01NywzNyArNTgsMzYgQEAKIHN0YXRpYyBpbnQgZmxleGNvcF9kdmJfc3RhcnRfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQpCiB7CiAJc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGR2YmRteGZlZWQtPmRlbXV4LT5wcml2OwotCXJldHVybiBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsZHZiZG14ZmVlZCwxKTsKKwlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBkdmJkbXhmZWVkLCAxKTsKIH0KIAogc3RhdGljIGludCBmbGV4Y29wX2R2Yl9zdG9wX2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQogewogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBkdmJkbXhmZWVkLT5kZW11eC0+cHJpdjsKLQlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLGR2YmRteGZlZWQsMCk7CisJcmV0dXJuIGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYywgZHZiZG14ZmVlZCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9kdmJfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewogCWludCByZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZmMtPmR2Yl9hZGFwdGVyLAotCQkJCSAgICAgICAiRmxleENvcCBEaWdpdGFsIFRWIGRldmljZSIsIGZjLT5vd25lciwKLQkJCQkgICAgICAgZmMtPmRldiwgYWRhcHRlcl9ucik7CisJCQkiRmxleENvcCBEaWdpdGFsIFRWIGRldmljZSIsIGZjLT5vd25lciwKKwkJCWZjLT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKSB7CiAJCWVycigiZXJyb3IgcmVnaXN0ZXJpbmcgRFZCIGFkYXB0ZXIiKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZmMtPmR2Yl9hZGFwdGVyLnByaXYgPSBmYzsKIAotCWZjLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfCBETVhfU0VDVElPTl9GSUxURVJJTkcgfCBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CisJZmMtPmRlbXV4LmRteC5jYXBhYmlsaXRpZXMgPSAoRE1YX1RTX0ZJTFRFUklORyB8IERNWF9TRUNUSU9OX0ZJTFRFUklORworCQkJfCBETVhfTUVNT1JZX0JBU0VEX0ZJTFRFUklORyk7CiAJZmMtPmRlbXV4LnByaXYgPSBmYzsKLQogCWZjLT5kZW11eC5maWx0ZXJudW0gPSBmYy0+ZGVtdXguZmVlZG51bSA9IEZDX01BWF9GRUVEOwotCiAJZmMtPmRlbXV4LnN0YXJ0X2ZlZWQgPSBmbGV4Y29wX2R2Yl9zdGFydF9mZWVkOwogCWZjLT5kZW11eC5zdG9wX2ZlZWQgPSBmbGV4Y29wX2R2Yl9zdG9wX2ZlZWQ7CiAJZmMtPmRlbXV4LndyaXRlX3RvX2RlY29kZXIgPSBOVUxMOwogCiAJaWYgKChyZXQgPSBkdmJfZG14X2luaXQoJmZjLT5kZW11eCkpIDwgMCkgewotCQllcnIoImR2Yl9kbXggZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJkdmJfZG14IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXg7CiAJfQogCkBAIC05NywyMyArOTcsMjMgQEAKIAlmYy0+ZG14ZGV2LmRlbXV4ID0gJmZjLT5kZW11eC5kbXg7CiAJZmMtPmRteGRldi5jYXBhYmlsaXRpZXMgPSAwOwogCWlmICgocmV0ID0gZHZiX2RteGRldl9pbml0KCZmYy0+ZG14ZGV2LCAmZmMtPmR2Yl9hZGFwdGVyKSkgPCAwKSB7Ci0JCWVycigiZHZiX2RteGRldl9pbml0IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiZHZiX2RteGRldl9pbml0IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXhfZGV2OwogCX0KIAogCWlmICgocmV0ID0gZmMtPmRlbXV4LmRteC5hZGRfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+aHdfZnJvbnRlbmQpKSA8IDApIHsKLQkJZXJyKCJhZGRpbmcgaHdfZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiYWRkaW5nIGh3X2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfZG14X2FkZF9od19mcm9udGVuZDsKIAl9CiAKIAlmYy0+bWVtX2Zyb250ZW5kLnNvdXJjZSA9IERNWF9NRU1PUllfRkU7CiAJaWYgKChyZXQgPSBmYy0+ZGVtdXguZG14LmFkZF9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5tZW1fZnJvbnRlbmQpKSA8IDApIHsKLQkJZXJyKCJhZGRpbmcgbWVtX2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImFkZGluZyBtZW1fZnJvbnRlbmQgdG8gZG14IGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9kbXhfYWRkX21lbV9mcm9udGVuZDsKIAl9CiAKIAlpZiAoKHJldCA9IGZjLT5kZW11eC5kbXguY29ubmVjdF9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5od19mcm9udGVuZCkpIDwgMCkgewotCQllcnIoImNvbm5lY3QgZnJvbnRlbmQgZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJjb25uZWN0IGZyb250ZW5kIGZhaWxlZDogZXJyb3IgJWQiLCByZXQpOwogCQlnb3RvIGVycl9jb25uZWN0X2Zyb250ZW5kOwogCX0KIApAQCAtMTIzLDkgKzEyMyw5IEBACiAJcmV0dXJuIDA7CiAKIGVycl9jb25uZWN0X2Zyb250ZW5kOgotCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+bWVtX2Zyb250ZW5kKTsKKwlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5tZW1fZnJvbnRlbmQpOwogZXJyX2RteF9hZGRfbWVtX2Zyb250ZW5kOgotCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+aHdfZnJvbnRlbmQpOworCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPmh3X2Zyb250ZW5kKTsKIGVycl9kbXhfYWRkX2h3X2Zyb250ZW5kOgogCWR2Yl9kbXhkZXZfcmVsZWFzZSgmZmMtPmRteGRldik7CiBlcnJfZG14X2RldjoKQEAgLTE0MSwxMiArMTQxLDEzIEBACiAJCWR2Yl9uZXRfcmVsZWFzZSgmZmMtPmR2Ym5ldCk7CiAKIAkJZmMtPmRlbXV4LmRteC5jbG9zZSgmZmMtPmRlbXV4LmRteCk7Ci0JCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+bWVtX2Zyb250ZW5kKTsKLQkJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsJmZjLT5od19mcm9udGVuZCk7CisJCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LAorCQkJJmZjLT5tZW1fZnJvbnRlbmQpOworCQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwKKwkJCSZmYy0+aHdfZnJvbnRlbmQpOwogCQlkdmJfZG14ZGV2X3JlbGVhc2UoJmZjLT5kbXhkZXYpOwogCQlkdmJfZG14X3JlbGVhc2UoJmZjLT5kZW11eCk7CiAJCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmZjLT5kdmJfYWRhcHRlcik7Ci0KIAkJZGViX2luZm8oImRlaW5pdGlhbGl6ZWQgZHZiIHN0dWZmXG4iKTsKIAl9CiAJZmMtPmluaXRfc3RhdGUgJj0gfkZDX1NUQVRFX0RWQl9JTklUOwpAQCAtMTY4LDkgKzE2OSw5IEBACiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfcmVzZXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKLQlmbGV4Y29wX2liaV92YWx1ZSB2MjEwLHYyMDQ7CisJZmxleGNvcF9pYmlfdmFsdWUgdjIxMCwgdjIwNDsKIAotLyogcmVzZXQgdGhlIGZsZXhjb3AgaXRzZWxmICovCisJLyogcmVzZXQgdGhlIGZsZXhjb3AgaXRzZWxmICovCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsaWJpX3plcm8pOwogCiAJdjIxMC5yYXcgPSAwOwpAQCAtMTgzLDEzICsxODQsMTEgQEAKIAl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja182MDAgPSAxOwogCXYyMTAuc3dfcmVzZXRfMjEwLnJlc2V0X2Jsb2NrXzcwMCA9IDE7CiAJdjIxMC5zd19yZXNldF8yMTAuQmxvY2tfcmVzZXRfZW5hYmxlID0gMHhiMjsKLQogCXYyMTAuc3dfcmVzZXRfMjEwLlNwZWNpYWxfY29udHJvbHMgPSAweGMyNTk7Ci0KIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxzd19yZXNldF8yMTAsdjIxMCk7CiAJbXNsZWVwKDEpOwogCi0vKiByZXNldCB0aGUgcGVyaXBoaWNhbCBkZXZpY2VzICovCisJLyogcmVzZXQgdGhlIHBlcmlwaGljYWwgZGV2aWNlcyAqLwogCiAJdjIwNCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsbWlzY18yMDQpOwogCXYyMDQubWlzY18yMDQuUGVyX3Jlc2V0X3NpZyA9IDA7CkBAIC0yMDEsMjUgKzIwMCwyNCBAQAogCiB2b2lkIGZsZXhjb3BfcmVzZXRfYmxvY2tfMzAwKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdjIwOF9zYXZlID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxjdHJsXzIwOCksCi0JCQkJCSAgdjIxMCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwKTsKKwlmbGV4Y29wX2liaV92YWx1ZSB2MjA4X3NhdmUgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBjdHJsXzIwOCksCisJCQkgIHYyMTAgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBzd19yZXNldF8yMTApOwogCi0JZGViX3JkdW1wKCIyMDg6ICUwOHgsIDIxMDogJTA4eFxuIix2MjA4X3NhdmUucmF3LHYyMTAucmF3KTsKLQorCWRlYl9yZHVtcCgiMjA4OiAlMDh4LCAyMTA6ICUwOHhcbiIsIHYyMDhfc2F2ZS5yYXcsIHYyMTAucmF3KTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCxpYmlfemVybyk7CiAKIAl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja18zMDAgPSAxOwogCXYyMTAuc3dfcmVzZXRfMjEwLkJsb2NrX3Jlc2V0X2VuYWJsZSA9IDB4YjI7CiAKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxzd19yZXNldF8yMTAsdjIxMCk7Ci0JdWRlbGF5KDEwMDApOwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LHYyMDhfc2F2ZSk7CiB9CiAKIHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmxleGNvcF9kZXZpY2Vfa21hbGxvYyhzaXplX3QgYnVzX3NwZWNpZmljX2xlbikKIHsKIAl2b2lkICpidXM7Ci0Jc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmbGV4Y29wX2RldmljZSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UpLAorCQkJCUdGUF9LRVJORUwpOwogCWlmICghZmMpIHsKIAkJZXJyKCJubyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNTQsNyArMjUyLDYgQEAKIAlmbGV4Y29wX2RldGVybWluZV9yZXZpc2lvbihmYyk7CiAJZmxleGNvcF9zcmFtX2luaXQoZmMpOwogCWZsZXhjb3BfaHdfZmlsdGVyX2luaXQoZmMpOwotCiAJZmxleGNvcF9zbWNfY3RybChmYywgMCk7CiAKIAlpZiAoKHJldCA9IGZsZXhjb3BfZHZiX2luaXQoZmMpKSkKQEAgLTI3OSw3ICsyNzYsNiBAQAogCQlnb3RvIGVycm9yOwogCiAJZmxleGNvcF9kZXZpY2VfbmFtZShmYywiaW5pdGlhbGl6YXRpb24gb2YiLCJjb21wbGV0ZSIpOwotCiAJcmV0dXJuIDA7CiAKIGVycm9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaAppbmRleCAwY2ViZTFkLi44OTdiMTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuaApAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AuaCAtIHByaXZhdGUgaGVhZGVyIGZpbGUgZm9yIGFsbCBmbGV4Y29wLWNoaXAtc291cmNlIGZpbGVzLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLmggLSBwcml2YXRlIGhlYWRlciBmaWxlIGZvciBhbGwgZmxleGNvcC1jaGlwLXNvdXJjZSBmaWxlcworICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpZm5kZWYgX19GTEVYQ09QX0hfXwogI2RlZmluZSBfX0ZMRVhDT1BfSF9fXwpAQCAtMjEsMTEgKzE5LDExIEBACiAjZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikKICNlbmRpZgogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3R1bmVyKGFyZ3MuLi4pIGRwcmludGsoMHgwMixhcmdzKQotI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICAgZHByaW50aygweDA0LGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgICBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX3NyYW0oYXJncy4uLikgIGRwcmludGsoMHgxMCxhcmdzKQotI2RlZmluZSBkZWJfcmR1bXAoYXJncy4uLikgIGRwcmludGsoMHgyMCxhcmdzKQorI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl90dW5lcihhcmdzLi4uKSBkcHJpbnRrKDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgZHByaW50aygweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfdHMoYXJncy4uLikgZHByaW50aygweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfc3JhbShhcmdzLi4uKSBkcHJpbnRrKDB4MTAsIGFyZ3MpCisjZGVmaW5lIGRlYl9yZHVtcChhcmdzLi4uKSBkcHJpbnRrKDB4MjAsIGFyZ3MpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oCmluZGV4IGVkOWE2NzUuLjhmNjRiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgKQEAgLTEsMTAgKzEsNyBAQAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisvKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogcmVnaXN0ZXIgZGVzY3JpcHRpb25zCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KLQogLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCB0aGluZ3MgaGVyZS4gKi8KICNpZm5kZWYgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oCmluZGV4IDQ5ZjIzMTUuLmM3NTgzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfbGUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgKQEAgLTEsMTAgKzEsNyBAQAotLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisvKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogcmVnaXN0ZXIgZGVzY3JpcHRpb25zCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KLQogLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCB0aGluZ3MgaGVyZS4gKi8KICNpZm5kZWYgX19GTEVYQ09QX0lCSV9WQUxVRV9JTkNMVURFRF9fCiAjZGVmaW5lIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKaW5kZXggMjdlZGIwZS4uODY2OGU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCkBAIC04LDcgKzgsNyBAQAogCXNlbGVjdCBEVkJfT1I1MTIxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIEJ0OHh4IFBDSSBicmlkZ2UuIEV4YW1wbGVzIGFyZQogCSAgdGhlIE5lYnVsYSBjYXJkcywgdGhlIFBpbm5hY2xlIFBDVFYgY2FyZHMsIHRoZSBUd2luaGFuIERTVCBjYXJkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKaW5kZXggMDI1ODQ1MS4uNDYwMWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKQEAgLTU1MiwxNiArNTUyLDE5IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBkc3RfY2FfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgaW9jdGxfYXJnKQorc3RhdGljIGxvbmcgZHN0X2NhX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGlvY3RsX2FyZykKIHsKLQlzdHJ1Y3QgZHZiX2RldmljZSogZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkc3Rfc3RhdGUqIHN0YXRlID0gKHN0cnVjdCBkc3Rfc3RhdGUqKSBkdmJkZXYtPnByaXY7CisJc3RydWN0IGR2Yl9kZXZpY2UgKmR2YmRldjsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgY2Ffc2xvdF9pbmZvICpwX2NhX3Nsb3RfaW5mbzsKIAlzdHJ1Y3QgY2FfY2FwcyAqcF9jYV9jYXBzOwogCXN0cnVjdCBjYV9tc2cgKnBfY2FfbWVzc2FnZTsKIAl2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQgX191c2VyICopaW9jdGxfYXJnOwogCWludCByZXN1bHQgPSAwOwogCisJbG9ja19rZXJuZWwoKTsKKwlkdmJkZXYgPSAoc3RydWN0IGR2Yl9kZXZpY2UgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RhdGUgPSAoc3RydWN0IGRzdF9zdGF0ZSAqKWR2YmRldi0+cHJpdjsKIAlwX2NhX21lc3NhZ2UgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX21zZyksIEdGUF9LRVJORUwpOwogCXBfY2Ffc2xvdF9pbmZvID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9zbG90X2luZm8pLCBHRlBfS0VSTkVMKTsKIAlwX2NhX2NhcHMgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IGNhX2NhcHMpLCBHRlBfS0VSTkVMKTsKQEAgLTY0Nyw2ICs2NTAsNyBAQAogCWtmcmVlIChwX2NhX3Nsb3RfaW5mbyk7CiAJa2ZyZWUgKHBfY2FfY2Fwcyk7CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNjgyLDkgKzY4Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzdF9jYV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHN0X2NhX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmlvY3RsID0gZHN0X2NhX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGRzdF9jYV9pb2N0bCwKIAkub3BlbiA9IGRzdF9jYV9vcGVuLAogCS5yZWxlYXNlID0gZHN0X2NhX3JlbGVhc2UsCiAJLnJlYWQgPSBkc3RfY2FfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKaW5kZXggNDg3NjJhMi4uYjE4NTdjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCiAJbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7CiAJY2FyZC0+YnR0dl9uciA9IHN1Yi0+Y29yZS0+bnI7Ci0Jc3RybmNweShjYXJkLT5jYXJkX25hbWUsIHN1Yi0+Y29yZS0+bmFtZSwgc2l6ZW9mKHN1Yi0+Y29yZS0+bmFtZSkpOworCXN0cmxjcHkoY2FyZC0+Y2FyZF9uYW1lLCBzdWItPmNvcmUtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjYXJkLT5jYXJkX25hbWUpKTsKIAljYXJkLT5pMmNfYWRhcHRlciA9ICZzdWItPmNvcmUtPmkyY19hZGFwOwogCiAJc3dpdGNoKHN1Yi0+Y29yZS0+dHlwZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwppbmRleCA0M2Y0ZDQ0Li5kZTNlZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIAlzZWxlY3QgRFZCX1NUQjYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NJMjFYWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBWSURFT19JUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZSBTRE1DIERNMTEwNSBQQ0kgY2hpcCBsaWtlCiAJICBEdmJXb3JsZCAyMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKaW5kZXggZjQ4ZjczYS4uNWIyMGNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYwpAQCAtMTU2LDQ2ICsxNTYsMTIgQEAKIAogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKLXN0YXRpYyB1MTYgaXJfY29kZXNfZG0xMTA1X25lY1sxMjhdID0gewotCVsweDBhXSA9IEtFWV9RLAkJLypwb3dlciovCi0JWzB4MGNdID0gS0VZX00sCQkvKm11dGUqLwotCVsweDExXSA9IEtFWV8xLAotCVsweDEyXSA9IEtFWV8yLAotCVsweDEzXSA9IEtFWV8zLAotCVsweDE0XSA9IEtFWV80LAotCVsweDE1XSA9IEtFWV81LAotCVsweDE2XSA9IEtFWV82LAotCVsweDE3XSA9IEtFWV83LAotCVsweDE4XSA9IEtFWV84LAotCVsweDE5XSA9IEtFWV85LAotCVsweDEwXSA9IEtFWV8wLAotCVsweDFjXSA9IEtFWV9QQUdFVVAsCS8qY2grKi8KLQlbMHgwZl0gPSBLRVlfUEFHRURPV04sCS8qY2gtKi8KLQlbMHgxYV0gPSBLRVlfTywJCS8qdm9sKyovCi0JWzB4MGVdID0gS0VZX1osCQkvKnZvbC0qLwotCVsweDA0XSA9IEtFWV9SLAkJLypyZWMqLwotCVsweDA5XSA9IEtFWV9ELAkJLypmYXYqLwotCVsweDA4XSA9IEtFWV9CQUNLU1BBQ0UsCS8qcmV3aW5kKi8KLQlbMHgwN10gPSBLRVlfQSwJCS8qZmFzdCovCi0JWzB4MGJdID0gS0VZX1AsCQkvKnBhdXNlKi8KLQlbMHgwMl0gPSBLRVlfRVNDLAkvKmNhbmNlbCovCi0JWzB4MDNdID0gS0VZX0csCQkvKnRhYiovCi0JWzB4MDBdID0gS0VZX1VQLAkvKnVwKi8KLQlbMHgxZl0gPSBLRVlfRU5URVIsCS8qb2sqLwotCVsweDAxXSA9IEtFWV9ET1dOLAkvKmRvd24qLwotCVsweDA1XSA9IEtFWV9DLAkJLypjYXAqLwotCVsweDA2XSA9IEtFWV9TLAkJLypzdG9wKi8KLQlbMHg0MF0gPSBLRVlfRiwJCS8qZnVsbCovCi0JWzB4MWVdID0gS0VZX1csCQkvKnR2bW9kZSovCi0JWzB4MWJdID0gS0VZX0IsCQkvKnJlY2FsbCovCi19OwotCiAvKiBpbmZyYXJlZCByZW1vdGUgY29udHJvbCAqLwogc3RydWN0IGluZnJhcmVkIHsKLQl1MTYJa2V5X21hcFsxMjhdOwogCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0X2RldjsKKwlzdHJ1Y3QgaXJfaW5wdXRfc3RhdGUJaXI7CiAJY2hhcgkJCWlucHV0X3BoeXNbMzJdOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlpcl90YXNrbGV0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCXUzMgkJCWlyX2NvbW1hbmQ7CiB9OwogCkBAIC0yMjAsMTAgKzE4NiwxNCBAQAogCS8qIGkyYyAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAorCS8qIGlycSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCiAJLyogZG1hICovCiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAl1bnNpZ25lZCBjaGFyICp0c19idWY7CiAJdTMyIHdycDsKKwl1MzIgbmV4dHdycDsKIAl1MzIgYnVmZmVyX3NpemU7CiAJdW5zaWduZWQgaW50CVBhY2tldEVycm9yQ291bnQ7CiAJdW5zaWduZWQgaW50IGRtYXJzdDsKQEAgLTIzMyw4ICsyMDMsNiBAQAogCiAjZGVmaW5lIGRtX2lvX21lbShyZWcpCSgodW5zaWduZWQgbG9uZykoJmRtMTEwNWR2Yi0+aW9fbWVtW3JlZ10pKQogCi1zdGF0aWMgc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiX2xvY2FsOwotCiBzdGF0aWMgaW50IGRtMTEwNV9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAogCQkJICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewpAQCAtNDA3LDM4ICszNzUsNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogaXIgdGFza2xldCAqLwotc3RhdGljIHZvaWQgZG0xMTA1X2VtaXRfa2V5KHVuc2lnbmVkIGxvbmcgcGFybSkKKy8qIGlyIHdvcmsgaGFuZGxlciAqLworc3RhdGljIHZvaWQgZG0xMTA1X2VtaXRfa2V5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgaW5mcmFyZWQgKmlyID0gKHN0cnVjdCBpbmZyYXJlZCAqKSBwYXJtOworCXN0cnVjdCBpbmZyYXJlZCAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGluZnJhcmVkLCB3b3JrKTsKIAl1MzIgaXJjb20gPSBpci0+aXJfY29tbWFuZDsKIAl1OCBkYXRhOwotCXUxNiBrZXljb2RlOworCisJaWYgKGlyX2RlYnVnKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgYnl0ZSAweCUwNHhcbiIsIF9fZnVuY19fLCBpcmNvbSk7CiAKIAlkYXRhID0gKGlyY29tID4+IDgpICYgMHg3ZjsKIAotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1JBVywgKDB4MDAwMGY4IDw8IDE2KSB8IGRhdGEpOwotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGRhdGEpOwotCWtleWNvZGUgPSBpci0+a2V5X21hcFtkYXRhXTsKKwlpcl9pbnB1dF9rZXlkb3duKGlyLT5pbnB1dF9kZXYsICZpci0+aXIsIGRhdGEsIGRhdGEpOworCWlyX2lucHV0X25va2V5KGlyLT5pbnB1dF9kZXYsICZpci0+aXIpOworfQogCi0JaWYgKCFrZXljb2RlKQotCQlyZXR1cm47CisvKiB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIGRtMTEwNV9kbXhfYnVmZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPQorCQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZG0xMTA1ZHZiLCB3b3JrKTsKKwl1bnNpZ25lZCBpbnQgbmJwYWNrZXRzOworCXUzMiBvbGR3cnAgPSBkbTExMDVkdmItPndycDsKKwl1MzIgbmV4dHdycCA9IGRtMTEwNWR2Yi0+bmV4dHdycDsKIAotCWlucHV0X2V2ZW50KGlyLT5pbnB1dF9kZXYsIEVWX0tFWSwga2V5Y29kZSwgMSk7Ci0JaW5wdXRfc3luYyhpci0+aW5wdXRfZGV2KTsKLQlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsIDApOwotCWlucHV0X3N5bmMoaXItPmlucHV0X2Rldik7CisJaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKKwkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCisJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4ICogMl0gPT0gMHg0NykpKSB7CisJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOworCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCisJCWlmICgoZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID49IDIpICYmCisJCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7CisJCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7CisJCQlkbTExMDVkdmItPndycCA9IDA7CisJCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOworCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOworCQkJcmV0dXJuOworCQl9CisJfQogCisJaWYgKG5leHR3cnAgPCBvbGR3cnApIHsKKwkJbWVtY3B5KGRtMTEwNWR2Yi0+dHNfYnVmICsgZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSwKKwkJCQkJCWRtMTEwNWR2Yi0+dHNfYnVmLCBuZXh0d3JwKTsKKwkJbmJwYWNrZXRzID0gKChkbTExMDVkdmItPmJ1ZmZlcl9zaXplIC0gb2xkd3JwKSArIG5leHR3cnApIC8gMTg4OworCX0gZWxzZQorCQluYnBhY2tldHMgPSAobmV4dHdycCAtIG9sZHdycCkgLyAxODg7CisKKwlkbTExMDVkdmItPndycCA9IG5leHR3cnA7CisJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LAorCQkJCQkmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGRtMTEwNWR2Yl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2YiA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgcGllY2U7Ci0JdW5zaWduZWQgaW50IG5icGFja2V0czsKLQl1MzIgY29tbWFuZDsKLQl1MzIgbmV4dHdycDsKLQl1MzIgb2xkd3JwOwogCiAJLyogUmVhZC1Xcml0ZSBJTlNUUyBBY2sncyBJbnRlcnJ1cHQgZm9yIERNMTEwNSBjaGlwIDE2LjAzLjIwMDggKi8KIAl1bnNpZ25lZCBpbnQgaW50c3RzID0gaW5iKGRtX2lvX21lbShETTExMDVfSU5UU1RTKSk7CkBAIC00NDcsNzEgKzQzOCwyNSBAQAogCXN3aXRjaCAoaW50c3RzKSB7CiAJY2FzZSBJTlRTVFNfVFNJUlE6CiAJY2FzZSAoSU5UU1RTX1RTSVJRIHwgSU5UU1RTX0lSKToKLQkJbmV4dHdycCA9IGlubChkbV9pb19tZW0oRE0xMTA1X1dSUCkpIC0KLQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSkgOwotCQlvbGR3cnAgPSBkbTExMDVkdmItPndycDsKLQkJc3Bpbl9sb2NrKCZkbTExMDVkdmItPmxvY2spOwotCQlpZiAoISgoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSA9PSAweDQ3KSAmJgotCQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODhdID09IDB4NDcpICYmCi0JCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgewotCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50Kys7Ci0JCQkvKiBiYWQgcGFja2V0IGZvdW5kICovCi0JCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgotCQkJCQkoZG0xMTA1ZHZiLT5kbWFyc3QgPT0gMCkpIHsKLQkJCQlvdXRiKDEsIGRtX2lvX21lbShETTExMDVfUlNUKSk7Ci0JCQkJZG0xMTA1ZHZiLT53cnAgPSAwOwotCQkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA9IDA7Ci0JCQkJZG0xMTA1ZHZiLT5kbWFyc3QgPSAwOwotCQkJCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOwotCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCX0KLQkJfQotCQlpZiAobmV4dHdycCA8IG9sZHdycCkgewotCQkJcGllY2UgPSBkbTExMDVkdmItPmJ1ZmZlcl9zaXplIC0gb2xkd3JwOwotCQkJbWVtY3B5KGRtMTEwNWR2Yi0+dHNfYnVmICsgZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSwgZG0xMTA1ZHZiLT50c19idWYsIG5leHR3cnApOwotCQkJbmJwYWNrZXRzID0gKHBpZWNlICsgbmV4dHdycCkvMTg4OwotCQl9IGVsc2UJewotCQkJbmJwYWNrZXRzID0gKG5leHR3cnAgLSBvbGR3cnApLzE4ODsKLQkJfQotCQlkdmJfZG14X3N3ZmlsdGVyX3BhY2tldHMoJmRtMTEwNWR2Yi0+ZGVtdXgsICZkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdLCBuYnBhY2tldHMpOwotCQlkbTExMDVkdmItPndycCA9IG5leHR3cnA7Ci0JCXNwaW5fdW5sb2NrKCZkbTExMDVkdmItPmxvY2spOworCQlkbTExMDVkdmItPm5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCisJCQkJCWlubChkbV9pb19tZW0oRE0xMTA1X1NUQURSKSk7CisJCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+d29yayk7CiAJCWJyZWFrOwogCWNhc2UgSU5UU1RTX0lSOgotCQljb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7Ci0JCWlmIChpcl9kZWJ1ZykKLQkJCXByaW50aygiZG0xMTA1OiByZWNlaXZlZCBieXRlIDB4JTA0eFxuIiwgY29tbWFuZCk7Ci0KLQkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gY29tbWFuZDsKLQkJdGFza2xldF9zY2hlZHVsZSgmZG0xMTA1ZHZiLT5pci5pcl90YXNrbGV0KTsKKwkJZG0xMTA1ZHZiLT5pci5pcl9jb21tYW5kID0gaW5sKGRtX2lvX21lbShETTExMDVfSVJDT0RFKSk7CisJCXNjaGVkdWxlX3dvcmsoJmRtMTEwNWR2Yi0+aXIud29yayk7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKLQotCi19Ci0KLS8qIHJlZ2lzdGVyIHdpdGggaW5wdXQgbGF5ZXIgKi8KLXN0YXRpYyB2b2lkIGlucHV0X3JlZ2lzdGVyX2tleXMoc3RydWN0IGluZnJhcmVkICppcikKLXsKLQlpbnQgaTsKLQotCW1lbXNldChpci0+aW5wdXRfZGV2LT5rZXliaXQsIDAsIHNpemVvZihpci0+aW5wdXRfZGV2LT5rZXliaXQpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyLT5rZXlfbWFwKTsgaSsrKQotCQkJc2V0X2JpdChpci0+a2V5X21hcFtpXSwgaXItPmlucHV0X2Rldi0+a2V5Yml0KTsKLQotCWlyLT5pbnB1dF9kZXYtPmtleWNvZGUgPSBpci0+a2V5X21hcDsKLQlpci0+aW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihpci0+a2V5X21hcFswXSk7Ci0JaXItPmlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoaXItPmtleV9tYXApOwogfQogCiBpbnQgX19kZXZpbml0IGRtMTEwNV9pcl9pbml0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IGVycjsKLQotCWRtMTEwNWR2Yl9sb2NhbCA9IGRtMTEwNTsKKwlJUl9LRVlUQUJfVFlQRSAqaXJfY29kZXMgPSBpcl9jb2Rlc19kbTExMDVfbmVjOworCWludCBpcl90eXBlID0gSVJfVFlQRV9PVEhFUjsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaW5wdXRfZGV2KQpAQCAtNTIxLDEyICs0NjYsMTEgQEAKIAlzbnByaW50ZihkbTExMDUtPmlyLmlucHV0X3BoeXMsIHNpemVvZihkbTExMDUtPmlyLmlucHV0X3BoeXMpLAogCQkicGNpLSVzL2lyMCIsIHBjaV9uYW1lKGRtMTEwNS0+cGRldikpOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlyX2lucHV0X2luaXQoaW5wdXRfZGV2LCAmZG0xMTA1LT5pci5pciwgaXJfdHlwZSwgaXJfY29kZXMpOwogCWlucHV0X2Rldi0+bmFtZSA9ICJEVkIgb24tY2FyZCBJUiByZWNlaXZlciI7Ci0KIAlpbnB1dF9kZXYtPnBoeXMgPSBkbTExMDUtPmlyLmlucHV0X3BoeXM7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX1BDSTsKLQlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAyOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDE7CiAJaWYgKGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcikgewogCQlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKIAkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwpAQCAtNTM0LDI1ICs0NzgsMjIgQEAKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnZlbmRvcjsKIAkJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gZG0xMTA1LT5wZGV2LT5kZXZpY2U7CiAJfQorCiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRtMTEwNS0+cGRldi0+ZGV2OwotCS8qIGluaXRpYWwga2V5bWFwICovCi0JbWVtY3B5KGRtMTEwNS0+aXIua2V5X21hcCwgaXJfY29kZXNfZG0xMTA1X25lYywgc2l6ZW9mIGRtMTEwNS0+aXIua2V5X21hcCk7Ci0JaW5wdXRfcmVnaXN0ZXJfa2V5cygmZG0xMTA1LT5pcik7CisKKwlJTklUX1dPUksoJmRtMTEwNS0+aXIud29yaywgZG0xMTA1X2VtaXRfa2V5KTsKKwogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOwogCWlmIChlcnIpIHsKIAkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQl0YXNrbGV0X2luaXQoJmRtMTEwNS0+aXIuaXJfdGFza2xldCwgZG0xMTA1X2VtaXRfa2V5LCAodW5zaWduZWQgbG9uZykgJmRtMTEwNS0+aXIpOwotCiAJcmV0dXJuIDA7CiB9CiAKLQogdm9pZCBfX2RldmV4aXQgZG0xMTA1X2lyX2V4aXQoc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1KQogewotCXRhc2tsZXRfa2lsbCgmZG0xMTA1LT5pci5pcl90YXNrbGV0KTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkbTExMDUtPmlyLmlucHV0X2Rldik7CiAKIH0KQEAgLTcxMCw3ICs2NTEsNyBAQAogCiAJZG0xMTA1ZHZiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtMTEwNWR2YiksIEdGUF9LRVJORUwpOwogCWlmICghZG0xMTA1ZHZiKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkbTExMDVkdmItPnBkZXYgPSBwZGV2OwogCWRtMTEwNWR2Yi0+YnVmZmVyX3NpemUgPSA1ICogRE0xMTA1X0RNQV9CWVRFUzsKQEAgLTc0MCwxMyArNjgxLDkgQEAKIAlzcGluX2xvY2tfaW5pdCgmZG0xMTA1ZHZiLT5sb2NrKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZG0xMTA1ZHZiKTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBkbTExMDVkdmIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKLQogCXJldCA9IGRtMTEwNWR2Yl9od19pbml0KGRtMTEwNWR2Yik7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOworCQlnb3RvIGVycl9wY2lfaW91bm1hcDsKIAogCS8qIGkyYyAqLwogCWkyY19zZXRfYWRhcGRhdGEoJmRtMTEwNWR2Yi0+aTJjX2FkYXAsIGRtMTEwNWR2Yik7CkBAIC04MTMsOCArNzUwLDE1IEBACiAKIAlkdmJfbmV0X2luaXQoZHZiX2FkYXB0ZXIsICZkbTExMDVkdmItPmR2Ym5ldCwgZG14KTsKIAlkbTExMDVfaXJfaW5pdChkbTExMDVkdmIpOwotb3V0OgotCXJldHVybiByZXQ7CisKKwlJTklUX1dPUksoJmRtMTEwNWR2Yi0+d29yaywgZG0xMTA1X2RteF9idWZmZXIpOworCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbTExMDVkdmJfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCQkJCURSSVZFUl9OQU1FLCBkbTExMDVkdmIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCXJldHVybiAwOwogCiBlcnJfZGlzY29ubmVjdF9mcm9udGVuZDoKIAlkbXgtPmRpc2Nvbm5lY3RfZnJvbnRlbmQoZG14KTsKQEAgLTg0Myw3ICs3ODcsNyBAQAogZXJyX2tmcmVlOgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkbTExMDVkdmIpOwotCWdvdG8gb3V0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkbTExMDVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwppbmRleCAwNjlkODQ3Li5jMzVmYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZGVtdXhfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kZW11eF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gZHZiX2RlbXV4X3JlYWQsCiAJLmlvY3RsID0gZHZiX2RlbXV4X2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKaW5kZXggN2UzYWVhYS4uY2IyMmRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCkBAIC0xNjA3LDcgKzE2MDcsNyBAQAogRVhQT1JUX1NZTUJPTChkdmJfY2FfZW41MDIyMV9pbml0KTsKIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gZHZiX2NhX2VuNTAyMjFfaW9fcmVhZCwKIAkud3JpdGUgPSBkdmJfY2FfZW41MDIyMV9pb193cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKaW5kZXggOGRjYjNmYi4uZWJjNzgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTE4NzUsNyArMTg3NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2Zyb250ZW5kX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZnJvbnRlbmRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5wb2xsCQk9IGR2Yl9mcm9udGVuZF9wb2xsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IGY2YmE4NDYuLjgyODBmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTE0NTksNyArMTQ1OSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX25ldF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX25ldF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCA9IGR2Yl9uZXRfaW9jdGwsCiAJLm9wZW4gPQlkdmJfZ2VuZXJpY19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwppbmRleCA2YTMyNjgwLi5hNDU0ZWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuYwpAQCAtMjI4LDggKzIyOCw4IEBACiAJZHZiZGV2LT5mb3BzID0gZHZiZGV2Zm9wczsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkICgmZHZiZGV2LT53YWl0X3F1ZXVlKTsKIAotCW1lbWNweShkdmJkZXYtPmZvcHMsIHRlbXBsYXRlLT5mb3BzLCBzaXplb2Yoc3RydWN0IGZpbGVfb3BlcmF0aW9ucykpOwotCWR2YmRldi0+Zm9wcy0+b3duZXIgPSBhZGFwLT5tb2R1bGU7CisJbWVtY3B5KGR2YmRldmZvcHMsIHRlbXBsYXRlLT5mb3BzLCBzaXplb2Yoc3RydWN0IGZpbGVfb3BlcmF0aW9ucykpOworCWR2YmRldmZvcHMtPm93bmVyID0gYWRhcC0+bW9kdWxlOwogCiAJbGlzdF9hZGRfdGFpbCAoJmR2YmRldi0+bGlzdF9oZWFkLCAmYWRhcC0+ZGV2aWNlX2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCmluZGV4IGRjYTQ5Y2YuLjc5OTI3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oCkBAIC03MSw3ICs3MSw3IEBACiAKIHN0cnVjdCBkdmJfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKLQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CiAJc3RydWN0IGR2Yl9hZGFwdGVyICphZGFwdGVyOwogCWludCB0eXBlOwogCWludCBtaW5vcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwppbmRleCA0OWY3YjIwLi42MTAzY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCkBAIC0yNSw3ICsyNSw3IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQVZlck1lZGlhIEF2ZXJUViBEVkItVCBVU0IgMi4wIChBODAwKSByZWNlaXZlci4KIApAQCAtMzQsNyArMzQsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUIzMDAwTUIKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IgMS4xIGFuZCAyLjAgRFZCLVQgcmVjZWl2ZXJzIGJhc2VkIG9uIHJlZmVyZW5jZSBkZXNpZ25zIG1hZGUgYnkKIAkgIERpQmNvbSAoPGh0dHA6Ly93d3cuZGliY29tLmZyPikgZXF1aXBwZWQgd2l0aCBhIERpQjMwMDBNLUIgZGVtb2R1bGF0b3IuCkBAIC01NSw3ICs1NSw3IEBACiAJdHJpc3RhdGUgIkRpQmNvbSBVU0IgRFZCLVQgZGV2aWNlcyAoYmFzZWQgb24gdGhlIERpQjMwMDBNLUMvUCkgKHNlZSBoZWxwIGZvciBkZXZpY2UgbGlzdCkiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IyLjAgRFZCLVQgcmVjZWl2ZXJzIGJhc2VkIG9uIHJlZmVyZW5jZSBkZXNpZ25zIG1hZGUgYnkKIAkgIERpQmNvbSAoPGh0dHA6Ly93d3cuZGliY29tLmZyPikgZXF1aXBwZWQgd2l0aCBhIERpQjMwMDBNLUMvUCBkZW1vZHVsYXRvci4KQEAgLTY5LDE1ICs2OSwxNyBAQAogY29uZmlnIERWQl9VU0JfRElCMDcwMAogCXRyaXN0YXRlICJEaUJjb20gRGlCMDcwMCBVU0IgRFZCIGRldmljZXMgKHNlZSBoZWxwIGZvciBzdXBwb3J0ZWQgZGV2aWNlcykiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCi0Jc2VsZWN0IERWQl9ESUI3MDAwUAotCXNlbGVjdCBEVkJfRElCNzAwME0KLQlzZWxlY3QgRFZCX0RJQjMwMDBNQworCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0RJQjcwMDBNIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9ESUIzMDAwTUMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMjY2IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjI2NiBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDdUIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciBVU0IyLjAvMS4xIERWQiByZWNlaXZlcnMgYmFzZWQgb24gdGhlIERpQjA3MDAgVVNCIGJyaWRnZS4gVGhlCiAJICBVU0IgYnJpZGdlIGlzIGFsc28gcHJlc2VudCBpbiBkZXZpY2VzIGhhdmluZyB0aGUgRGlCNzcwMCBEVkItVC1VU0IKQEAgLTk1LDcgKzk3LDggQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCMzAwME1DCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSGFuZlRlayBVTVQtMDEwIFVTQjIuMCBzdGljay1zaXplZCBEVkItVCByZWNlaXZlci4KIApAQCAtMTA4LDEwICsxMTEsMTEgQEAKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9ESUI3MDAwUCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTEdTOEdMNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIENvbmV4YW50IFVTQjIuMCBoeWJyaWQgcmVmZXJlbmNlIGRlc2lnbi4KIAkgIEN1cnJlbnRseSwgb25seSBEVkIgYW5kIEFUU0MgbW9kZXMgYXJlIHN1cHBvcnRlZCwgYW5hbG9nIG1vZGUKQEAgLTEyNSw4ICsxMjksOCBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDRYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1TSSBNZWdhIFNreSA1ODAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgogCSAgQ3VycmVudGx5LCBvbmx5IGRldmljZXMgd2l0aCBhIHByb2R1Y3QgaWQgb2YKQEAgLTEzNyw3ICsxNDEsNyBAQAogCXRyaXN0YXRlICJHZW5lc3lzIExvZ2ljIEdMODYxIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTVNJIE1lZ2Fza3kgNTgwICg1NTgwMSkgRFZCLVQgVVNCMi4wCiAJICByZWNlaXZlciB3aXRoIFVTQiBJRCAwZGIwOjU1ODEuCkBAIC0xNDYsNyArMTUwLDcgQEAKIAl0cmlzdGF0ZSAiQWxjb3IgTWljcm8gQVU2NjEwIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgU2lnbWF0ZWsgRFZCLTExMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAKQEAgLTE5OSw3ICsyMDMsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhdXBwYXVnZSBXaW5UVi1OT1ZBLVQgdXNiMiBEVkItVCBVU0IyLjAgcmVjZWl2ZXIuCiAKQEAgLTIzNSw4ICsyMzksOCBAQAogY29uZmlnIERWQl9VU0JfQUY5MDA1CiAJdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDA1IERWQi1UIFVTQjEuMSBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQiAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFmYXRlY2ggQUY5MDA1IGJhc2VkIERWQi1UIFVTQjEuMSByZWNlaXZlcgogCSAgYW5kIHRoZSBUZXJyYVRlYyBDaW5lcmd5IFQgVVNCIFhFIChSZXYuMSkKQEAgLTI4NCw3ICsyODgsNyBAQAogCXRyaXN0YXRlICJBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBTUUgRFRWLTUxMDAgVVNCMi4wIERWQi1UIHJlY2VpdmVyLgogCkBAIC0yOTMsOSArMjk3LDE4IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBEVkJfQUY5MDEzCiAJc2VsZWN0IERWQl9QTEwgICAgICAgICAgICAgIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCAgIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgICBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NQzQ0UzgwMyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBZmF0ZWNoIEFGOTAxNSBiYXNlZCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKworY29uZmlnIERWQl9VU0JfQ0U2MjMwCisJdHJpc3RhdGUgIkludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIERWQl9VU0IgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IERWQl9aTDEwMzUzCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCmluZGV4IDMxMjJiN2MuLmY5MjczNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQpAQCAtNzYsNiArNzYsOCBAQAogZHZiLXVzYi1jaW5lcmd5VDItb2JqcyA9IGNpbmVyZ3lUMi1jb3JlLm8gY2luZXJneVQyLWZlLm8KIG9iai0kKENPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDIpICs9IGR2Yi11c2ItY2luZXJneVQyLm8KIAorZHZiLXVzYi1jZTYyMzAtb2JqcyA9IGNlNjIzMC5vCitvYmotJChDT05GSUdfRFZCX1VTQl9DRTYyMzApICs9IGR2Yi11c2ItY2U2MjMwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvIC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzLwogIyBkdWUgdG8gdHVuZXIteGMzMDI4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYwppbmRleCA2YTk3YTQwLi5mMGJhOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKQEAgLTI3LDkgKzI3LDcgQEAKICNpbmNsdWRlICJxdDEwMTAuaCIKICNpbmNsdWRlICJ0ZGExODI3MS5oIgogI2luY2x1ZGUgIm14bDUwMDVzLmgiCi0jaWYgMAotI2luY2x1ZGUgIm1jNDRzODB4LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJtYzQ0czgwMy5oIgogCiBzdGF0aWMgaW50IGR2Yl91c2JfYWY5MDE1X2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkdmJfdXNiX2FmOTAxNV9kZWJ1ZywgaW50LCAwNjQ0KTsKQEAgLTM3LDkgKzM1LDYgQEAKIHN0YXRpYyBpbnQgZHZiX3VzYl9hZjkwMTVfcmVtb3RlOwogbW9kdWxlX3BhcmFtX25hbWVkKHJlbW90ZSwgZHZiX3VzYl9hZjkwMTVfcmVtb3RlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhyZW1vdGUsICJzZWxlY3QgcmVtb3RlIik7Ci1zdGF0aWMgaW50IGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkdWFsX21vZGUsIGR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZHVhbF9tb2RlLCAiZW5hYmxlIGR1YWwgbW9kZSIpOwogRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYWY5MDE1X3VzYl9tdXRleCk7CkBAIC0yODMsNiArMjc4LDIxIEBACiAJCQlyZXEuZGF0YSA9ICZtc2dbaSsxXS5idWZbMF07CiAJCQlyZXQgPSBhZjkwMTVfY3RybF9tc2coZCwgJnJlcSk7CiAJCQlpICs9IDI7CisJCX0gZWxzZSBpZiAobXNnW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1swXS5kZW1vZF9hZGRyZXNzKQorCQkJCWdvdG8gZXJyb3I7CisJCQllbHNlCisJCQkJcmVxLmNtZCA9IFJFQURfSTJDOworCQkJcmVxLmkyY19hZGRyID0gbXNnW2ldLmFkZHI7CisJCQlyZXEuYWRkciA9IGFkZHI7CisJCQlyZXEubWJveCA9IG1ib3g7CisJCQlyZXEuYWRkcl9sZW4gPSBhZGRyX2xlbjsKKwkJCXJlcS5kYXRhX2xlbiA9IG1zZ1tpXS5sZW47CisJCQlyZXEuZGF0YSA9ICZtc2dbaV0uYnVmWzBdOworCQkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOworCQkJaSArPSAxOwogCQl9IGVsc2UgewogCQkJaWYgKG1zZ1tpXS5hZGRyID09CiAJCQkJYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcykKQEAgLTc0OCw2ICs3NTgsMTYgQEAKIAkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQogCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfZGlnaXR0cmFkZSk7CiAJCQkJYnJlYWs7CisJCQljYXNlIEFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTOgorCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXAgPQorCQkJCSAgYWY5MDE1X3JjX2tleXNfYXZlcm1lZGlhOworCQkJCWFmOTAxNV9wcm9wZXJ0aWVzW2ldLnJjX2tleV9tYXBfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYSk7CisJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZSA9CisJCQkJICBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGVfc2l6ZSA9CisJCQkJICBBUlJBWV9TSVpFKGFmOTAxNV9pcl90YWJsZV9hdmVybWVkaWFfa3MpOworCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewogCQkJc3dpdGNoIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSkgewpAQCAtODM2LDkgKzg1Niw2IEBACiAJCWdvdG8gZXJyb3I7CiAJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSB2YWw7CiAJZGViX2luZm8oIiVzOiBUUyBtb2RlOiVkXG4iLCBfX2Z1bmNfXywgYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUpOwotCS8qIGRpc2FibGUgZHVhbCBtb2RlIGJ5IGRlZmF1bHQgYmVjYXVzZSBpdCBpcyBidWdneSAqLwotCWlmICghZHZiX3VzYl9hZjkwMTVfZHVhbF9tb2RlKQotCQlhZjkwMTVfY29uZmlnLmR1YWxfbW9kZSA9IDA7CiAKIAkvKiBTZXQgYWRhcHRlcjAgYnVmZmVyIHNpemUgYWNjb3JkaW5nIHRvIFVTQiBwb3J0IHNwZWVkLCBhZGFwdGVyMSBidWZmZXIKIAkgICBzaXplIGNhbiBiZSBzdGF0aWMgYmVjYXVzZSBpdCBpcyBlbmFibGVkIG9ubHkgVVNCMi4wICovCkBAIC05MzUsNyArOTUyLDYgQEAKIAkJc3dpdGNoICh2YWwpIHsKIAkJY2FzZSBBRjkwMTNfVFVORVJfRU5WNzdIMTFENToKIAkJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwOgotCQljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKIAkJY2FzZSBBRjkwMTNfVFVORVJfUVQxMDEwOgogCQljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgogCQljYXNlIEFGOTAxM19UVU5FUl9NVDIwNjBfMjoKQEAgLTk0OCw2ICs5NjQsMTAgQEAKIAkJY2FzZSBBRjkwMTNfVFVORVJfTVhMNTAwNVI6CiAJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDA7CiAJCQlicmVhazsKKwkJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5ncGlvWzFdID0gQUY5MDEzX0dQSU9fTE87CisJCQlhZjkwMTVfYWY5MDEzX2NvbmZpZ1tpXS5yZl9zcGVjX2ludiA9IDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXdhcm4oInR1bmVyIGlkOiVkIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSByZXBvcnQhIiwgdmFsKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtMTEzNSw2ICsxMTU1LDExIEBACiAJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCiB9OwogCitzdGF0aWMgc3RydWN0IG1jNDRzODAzX2NvbmZpZyBhZjkwMTVfbWM0NHM4MDNfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyA9IDB4YzAsCisJLmRpZ19vdXQgPSAxLAorfTsKKwogc3RhdGljIGludCBhZjkwMTVfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IGFmOTAxNV9zdGF0ZSAqc3RhdGUgPSBhZGFwLT5kZXYtPnByaXY7CkBAIC0xMTc5LDE1ICsxMjA0LDggQEAKIAkJCURWQl9QTExfVERBNjY1WCkgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9NQzQ0UzgwMzoKLSNpZiAwCi0JCXJldCA9IGR2Yl9hdHRhY2gobWM0NHM4MHhfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXApCi0JCQk9PSBOVUxMID8gLUVOT0RFViA6IDA7Ci0jZWxzZQotCQlyZXQgPSAtRU5PREVWOwotCQlpbmZvKCJGcmVlc2NhbGUgTUM0NFM4MDMgdHVuZXIgZm91bmQgYnV0IG5vIGRyaXZlciBmb3IgdGhhdCIgXAotCQkJInR1bmVyLiBMb29rIGF0IHRoZSBMaW51eHR2Lm9yZyBmb3IgdHVuZXIgZHJpdmVyIiBcCi0JCQkic3RhdHVzLiIpOwotI2VuZGlmCisJCXJldCA9IGR2Yl9hdHRhY2gobWM0NHM4MDNfYXR0YWNoLCBhZGFwLT5mZSwgaTJjX2FkYXAsCisJCQkmYWY5MDE1X21jNDRzODAzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogCQlicmVhazsKIAljYXNlIEFGOTAxM19UVU5FUl9VTktOT1dOOgogCWRlZmF1bHQ6CkBAIC0xMjE4LDYgKzEyMzYsNyBAQAogCXtVU0JfREVWSUNFKFVTQl9WSURfQVZFUk1FRElBLCBVU0JfUElEX0FWRVJNRURJQV9BMzA5KX0sCiAvKiAxNSAqL3tVU0JfREVWSUNFKFVTQl9WSURfTVNJXzIsICAgICBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJSSl9LAogCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTVVKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgIFVTQl9QSURfS1dPUkxEXzM5NVVfMil9LAogCXswfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgYWY5MDE1X3VzYl90YWJsZSk7CkBAIC0xNDE3LDcgKzE0MzYsOCBAQAogCQkJewogCQkJCS5uYW1lID0gIktXb3JsZCBVU0IgRFZCLVQgVFYgU3RpY2sgSUkgIiBcCiAJCQkJCSIoVlMtRFZCLVQgMzk1VSkiLAotCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNl0sIE5VTEx9LAorCQkJCS5jb2xkX2lkcyA9IHsmYWY5MDE1X3VzYl90YWJsZVsxNl0sCisJCQkJCSAgICAgJmFmOTAxNV91c2JfdGFibGVbMTddLCBOVUxMfSwKIAkJCQkud2FybV9pZHMgPSB7TlVMTH0sCiAJCQl9LAogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAppbmRleCAyMWM3NzgyLi4wMGUyNTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKQEAgLTEyNCw2ICsxMjQsNyBAQAogCUFGOTAxNV9SRU1PVEVfTVNJX0RJR0lWT1hfTUlOSV9JSV9WMywKIAlBRjkwMTVfUkVNT1RFX01ZR0lDVFZfVTcxOCwKIAlBRjkwMTVfUkVNT1RFX0RJR0lUVFJBREVfRFZCX1QsCisJQUY5MDE1X1JFTU9URV9BVkVSTUVESUFfS1MsCiB9OwogCiAvKiBMZWFkdGVrIFdpbkZhc3QgRFRWIERvbmdsZSBHb2xkICovCkBAIC01OTcsNiArNTk4LDM2IEBACiAJMHgwMywgMHhmYywgMHgwMywgMHhmYywgMHgwZSwgMHgwNSwgMHgwMCwKIH07CiAKK3N0YXRpYyB1OCBhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzW10gPSB7CisJMHgwNSwgMHhmYSwgMHgwMSwgMHhmZSwgMHgxMiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDAyLCAweGZkLCAweDBlLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDMsIDB4ZmMsIDB4MGQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNCwgMHhmYiwgMHgyZSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA1LCAweGZhLCAweDJkLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDYsIDB4ZjksIDB4MTAsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNywgMHhmOCwgMHgwZiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA4LCAweGY3LCAweDNkLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDksIDB4ZjYsIDB4MWUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwYSwgMHhmNSwgMHgxZiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBiLCAweGY0LCAweDIwLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGMsIDB4ZjMsIDB4MjEsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwZCwgMHhmMiwgMHgyMiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBlLCAweGYxLCAweDIzLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGYsIDB4ZjAsIDB4MjQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMCwgMHhlZiwgMHgyNSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDExLCAweGVlLCAweDI2LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTIsIDB4ZWQsIDB4MjcsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMywgMHhlYywgMHgwNCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE1LCAweGVhLCAweDBhLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTYsIDB4ZTksIDB4MTEsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxNywgMHhlOCwgMHgxNSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE4LCAweGU3LCAweDE2LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MWMsIDB4ZTMsIDB4MDUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxZCwgMHhlMiwgMHgwOSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDRkLCAweGIyLCAweDNmLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4NTYsIDB4YTksIDB4M2UsIDB4MDUsIDB4MDAKK307CisKIC8qIERpZ2l0dHJhZGUgRFZCLVQgVVNCIFN0aWNrICovCiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcmNfa2V5IGFmOTAxNV9yY19rZXlzX2RpZ2l0dHJhZGVbXSA9IHsKIAl7IDB4MDEsIDB4MGYsIEtFWV9MQVNUIH0sCS8qIFJFVFVSTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2MjgyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiBEVkIgVVNCIExpbnV4IGRyaXZlciBmb3IgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCByZWNlaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNlNjIzMC5oIgorI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJteGw1MDA1cy5oIgorCisvKiBkZWJ1ZyAqLworc3RhdGljIGludCBkdmJfdXNiX2NlNjIzMF9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9jZTYyMzBfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCIgRFZCX1VTQl9ERUJVR19TVEFUVVMpOworRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7CisKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY2U2MjMwX3psMTAzNTNfY29uZmlnOworCitzdGF0aWMgaW50IGNlNjIzMF9yd191ZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgcmVxX3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBwaXBlOworCXU4IHJlcXVlc3Q7CisJdTggcmVxdWVzdHR5cGU7CisJdTE2IHZhbHVlOworCXUxNiBpbmRleDsKKwl1OCBidWZbcmVxLT5kYXRhX2xlbl07CisKKwlyZXF1ZXN0ID0gcmVxLT5jbWQ7CisJdmFsdWUgPSByZXEtPnZhbHVlOworCWluZGV4ID0gcmVxLT5pbmRleDsKKworCXN3aXRjaCAocmVxLT5jbWQpIHsKKwljYXNlIEkyQ19SRUFEOgorCWNhc2UgREVNT0RfUkVBRDoKKwljYXNlIFJFR19SRUFEOgorCQlyZXF1ZXN0dHlwZSA9IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOKTsKKwkJYnJlYWs7CisJY2FzZSBJMkNfV1JJVEU6CisJY2FzZSBERU1PRF9XUklURToKKwljYXNlIFJFR19XUklURToKKwkJcmVxdWVzdHR5cGUgPSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gY29tbWFuZDolMDJ4IiwgcmVxLT5jbWQpOworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHJlcXVlc3R0eXBlID09IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCkpIHsKKwkJLyogd3JpdGUgKi8KKwkJbWVtY3B5KGJ1ZiwgcmVxLT5kYXRhLCByZXEtPmRhdGFfbGVuKTsKKwkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKKwl9IGVsc2UgeworCQkvKiByZWFkICovCisJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCk7CisJfQorCisJbXNsZWVwKDEpOyAvKiBhdm9pZCBJMkMgZXJyb3JzICovCisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwgcmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwKKwkJCQlidWYsIHNpemVvZihidWYpLCBDRTYyMzBfVVNCX1RJTUVPVVQpOworCisJY2U2MjMwX2RlYnVnX2R1bXAocmVxdWVzdCwgcmVxdWVzdHR5cGUsIHZhbHVlLCBpbmRleCwgYnVmLAorCQlyZXEtPmRhdGFfbGVuLCBkZWJfeGZlcik7CisKKwlpZiAocmV0IDwgMCkKKwkJZGViX2luZm8oIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkOiVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwllbHNlCisJCXJldCA9IDA7CisKKwkvKiByZWFkIHJlcXVlc3QsIGNvcHkgcmV0dXJuZWQgZGF0YSB0byByZXR1cm4gYnVmICovCisJaWYgKCFyZXQgJiYgcmVxdWVzdHR5cGUgPT0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4pKQorCQltZW1jcHkocmVxLT5kYXRhLCBidWYsIHJlcS0+ZGF0YV9sZW4pOworCitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNlNjIzMF9jdHJsX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHN0cnVjdCByZXFfdCAqcmVxKQoreworCXJldHVybiBjZTYyMzBfcndfdWRldihkLT51ZGV2LCByZXEpOworfQorCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgY2U2MjMwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnW10sCisJCQkgICBpbnQgbnVtKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGkgPSAwOworCXN0cnVjdCByZXFfdCByZXE7CisJaW50IHJldCA9IDA7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZigmcmVxKSk7CisKKwlpZiAobnVtID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwl3aGlsZSAoaSA8IG51bSkgeworCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQljZTYyMzBfemwxMDM1M19jb25maWcuZGVtb2RfYWRkcmVzcykgeworCQkJCXJlcS5jbWQgPSBERU1PRF9SRUFEOworCQkJCXJlcS52YWx1ZSA9IG1zZ1tpXS5hZGRyID4+IDE7CisJCQkJcmVxLmluZGV4ID0gbXNnW2ldLmJ1ZlswXTsKKwkJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaSsxXS5sZW47CisJCQkJcmVxLmRhdGEgPSAmbXNnW2krMV0uYnVmWzBdOworCQkJCXJldCA9IGNlNjIzMF9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJyKCJpMmMgcmVhZCBub3QgaW1wbGVtZW50ZWQiKTsKKwkJCQlyZXQgPSAtRVBFUk07CisJCQl9CisJCQlpICs9IDI7CisJCX0gZWxzZSB7CisJCQlpZiAobXNnW2ldLmFkZHIgPT0KKwkJCQljZTYyMzBfemwxMDM1M19jb25maWcuZGVtb2RfYWRkcmVzcykgeworCQkJCXJlcS5jbWQgPSBERU1PRF9XUklURTsKKwkJCQlyZXEudmFsdWUgPSBtc2dbaV0uYWRkciA+PiAxOworCQkJCXJlcS5pbmRleCA9IG1zZ1tpXS5idWZbMF07CisJCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbi0xOworCQkJCXJlcS5kYXRhID0gJm1zZ1tpXS5idWZbMV07CisJCQkJcmV0ID0gY2U2MjMwX2N0cmxfbXNnKGQsICZyZXEpOworCQkJfSBlbHNlIHsKKwkJCQlyZXEuY21kID0gSTJDX1dSSVRFOworCQkJCXJlcS52YWx1ZSA9IDB4MjAwMCArIChtc2dbaV0uYWRkciA+PiAxKTsKKwkJCQlyZXEuaW5kZXggPSAweDAwMDA7CisJCQkJcmVxLmRhdGFfbGVuID0gbXNnW2ldLmxlbjsKKwkJCQlyZXEuZGF0YSA9ICZtc2dbaV0uYnVmWzBdOworCQkJCXJldCA9IGNlNjIzMF9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCX0KKwkJCWkgKz0gMTsKKwkJfQorCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkLT5pMmNfbXV0ZXgpOworCXJldHVybiByZXQgPyByZXQgOiBpOworfQorCitzdGF0aWMgdTMyIGNlNjIzMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGNlNjIzMF9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgICA9IGNlNjIzMF9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGNlNjIzMF9pMmNfZnVuYywKK307CisKKy8qIENhbGxiYWNrcyBmb3IgRFZCIFVTQiAqLworc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjZTYyMzBfemwxMDM1M19jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDFlLAorCS5hZGNfY2xvY2sgPSA0NTAwMDAsCisJLmlmMiA9IDQ1NzAwLAorCS5ub190dW5lciA9IDEsCisJLnBhcmFsbGVsX3RzID0gMSwKKwkuY2xvY2tfY3RsXzEgPSAweDM0LAorCS5wbGxfMCA9IDB4MGUsCit9OworCitzdGF0aWMgaW50IGNlNjIzMF96bDEwMzUzX2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsICZjZTYyMzBfemwxMDM1M19jb25maWcsCisJCSZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKwlpZiAoYWRhcC0+ZmUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwNXNfY29uZmlnIGNlNjIzMF9teGw1MDAzc19jb25maWcgPSB7CisJLmkyY19hZGRyZXNzICAgICA9IDB4YzYsCisJLmlmX2ZyZXEgICAgICAgICA9IElGX0ZSRVFfNDU3MDAwMEhaLAorCS54dGFsX2ZyZXEgICAgICAgPSBDUllTVEFMX0ZSRVFfMTYwMDAwMDBIWiwKKwkuYWdjX21vZGUgICAgICAgID0gTVhMX1NJTkdMRV9BR0MsCisJLnRyYWNraW5nX2ZpbHRlciA9IE1YTF9URl9ERUZBVUxULAorCS5yc3NpX2VuYWJsZSAgICAgPSBNWExfUlNTSV9FTkFCTEUsCisJLmNhcF9zZWxlY3QgICAgICA9IE1YTF9DQVBfU0VMX0VOQUJMRSwKKwkuZGl2X291dCAgICAgICAgID0gTVhMX0RJVl9PVVRfNCwKKwkuY2xvY2tfb3V0ICAgICAgID0gTVhMX0NMT0NLX09VVF9ESVNBQkxFLAorCS5vdXRwdXRfbG9hZCAgICAgPSBNWEw1MDA1U19JRl9PVVRQVVRfTE9BRF8yMDBfT0hNLAorCS50b3AJCSA9IE1YTDUwMDVTX1RPUF8yNVAyLAorCS5tb2RfbW9kZSAgICAgICAgPSBNWExfRElHSVRBTF9NT0RFLAorCS5pZl9tb2RlICAgICAgICAgPSBNWExfWkVST19JRiwKKwkuQWdjTWFzdGVyQnl0ZSAgID0gMHgwMCwKK307CisKK3N0YXRpYyBpbnQgY2U2MjMwX214bDUwMDNzX3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCXJldCA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZSwgJmFkYXAtPmRldi0+aTJjX2FkYXAsCisJCQkmY2U2MjMwX214bDUwMDNzX2NvbmZpZykgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2U2MjMwX3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJaW50IHJldDsKKwlkZWJfaW5mbygiJXM6IG9ub2ZmOiVkXG4iLCBfX2Z1bmNfXywgb25vZmYpOworCisJLyogSW50ZXJmYWNlTnVtYmVyIDEgLyBBbHRlcm5hdGVTZXR0aW5nIDAgICAgIGlkbGUKKwkgICBJbnRlcmZhY2VOdW1iZXIgMSAvIEFsdGVybmF0ZVNldHRpbmcgMSAgICAgc3RyZWFtaW5nICovCisJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZC0+dWRldiwgMSwgb25vZmYpOworCWlmIChyZXQpCisJCWVycigidXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkIHdpdGggZXJyb3I6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogRFZCIFVTQiBEcml2ZXIgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBjZTYyMzBfcHJvcGVydGllczsKKworc3RhdGljIGludCBjZTYyMzBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gTlVMTDsKKworCWRlYl9pbmZvKCIlczogaW50ZXJmYWNlOiVkXG4iLCBfX2Z1bmNfXywKKwkJaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisKKwlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAxKSB7CisJCXJldCA9IGR2Yl91c2JfZGV2aWNlX2luaXQoaW50ZiwgJmNlNjIzMF9wcm9wZXJ0aWVzLCBUSElTX01PRFVMRSwKKwkJCSZkLCBhZGFwdGVyX25yKTsKKwkJaWYgKHJldCkKKwkJCWVycigiaW5pdCBmYWlsZWQgd2l0aCBlcnJvcjolZFxuIiwgcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2U2MjMwX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WSURfSU5URUwsIFVTQl9QSURfSU5URUxfQ0U5NTAwKSB9LAorCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjZTYyMzBfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY2U2MjMwX3Byb3BlcnRpZXMgPSB7CisJLmNhcHMgPSBEVkJfVVNCX0lTX0FOX0kyQ19BREFQVEVSLAorCisJLnVzYl9jdHJsID0gREVWSUNFX1NQRUNJRklDLAorCS5ub19yZWNvbm5lY3QgPSAxLAorCisJLnNpemVfb2ZfcHJpdiA9IDAsCisKKwkubnVtX2FkYXB0ZXJzID0gMSwKKwkuYWRhcHRlciA9IHsKKwkJeworCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBjZTYyMzBfemwxMDM1M19mcm9udGVuZF9hdHRhY2gsCisJCQkudHVuZXJfYXR0YWNoICAgICA9IGNlNjIzMF9teGw1MDAzc190dW5lcl9hdHRhY2gsCisJCQkuc3RyZWFtID0geworCQkJCS50eXBlID0gVVNCX0JVTEssCisJCQkJLmNvdW50ID0gNiwKKwkJCQkuZW5kcG9pbnQgPSAweDgyLAorCQkJCS51ID0geworCQkJCQkuYnVsayA9IHsKKwkJCQkJCS5idWZmZXJzaXplID0gNTEyLAorCQkJCQl9CisJCQkJfQorCQkJfSwKKwkJfQorCX0sCisKKwkucG93ZXJfY3RybCA9IGNlNjIzMF9wb3dlcl9jdHJsLAorCisJLmkyY19hbGdvID0gJmNlNjIzMF9pMmNfYWxnbywKKworCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKKwkuZGV2aWNlcyA9IHsKKwkJeworCQkJLm5hbWUgPSAiSW50ZWwgQ0U5NTAwIHJlZmVyZW5jZSBkZXNpZ24iLAorCQkJLmNvbGRfaWRzID0ge05VTEx9LAorCQkJLndhcm1faWRzID0geyZjZTYyMzBfdGFibGVbMF0sIE5VTEx9LAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBjZTYyMzBfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gImR2Yl91c2JfY2U2MjMwIiwKKwkucHJvYmUgICAgICA9IGNlNjIzMF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGR2Yl91c2JfZGV2aWNlX2V4aXQsCisJLmlkX3RhYmxlICAgPSBjZTYyMzBfdGFibGUsCit9OworCisvKiBtb2R1bGUgc3R1ZmYgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNlNjIzMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOlxuIiwgX19mdW5jX18pOworCXJldCA9IHVzYl9yZWdpc3RlcigmY2U2MjMwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3I6JWQiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNlNjIzMF9tb2R1bGVfZXhpdCh2b2lkKQoreworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmY2U2MjMwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNlNjIzMF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjZTYyMzBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M0MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0RWQl9VU0JfQ0U2MjMwX0hfCisjZGVmaW5lIF9EVkJfVVNCX0NFNjIzMF9IXworCisjZGVmaW5lIERWQl9VU0JfTE9HX1BSRUZJWCAiY2U2MjMwIgorI2luY2x1ZGUgImR2Yi11c2IuaCIKKworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfcmMoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfcmVnKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDA4LCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDEwLCBhcmdzKQorI2RlZmluZSBkZWJfZncoYXJncy4uLikgICBkcHJpbnRrKGR2Yl91c2JfY2U2MjMwX2RlYnVnLCAweDIwLCBhcmdzKQorCisjZGVmaW5lIGNlNjIzMF9kZWJ1Z19kdW1wKHIsIHQsIHYsIGksIGIsIGwsIGZ1bmMpIHsgXAorCWludCBsb29wXzsgXAorCWZ1bmMoIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsIFwKKwkJdCwgciwgdiAmIDB4ZmYsIHYgPj4gOCwgaSAmIDB4ZmYsIGkgPj4gOCwgbCAmIDB4ZmYsIGwgPj4gOCk7IFwKKwlpZiAodCA9PSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpKSBcCisJCWZ1bmMoIiA+Pj4gIik7IFwKKwllbHNlIFwKKwkJZnVuYygiIDw8PCAiKTsgXAorCWZvciAobG9vcF8gPSAwOyBsb29wXyA8IGw7IGxvb3BfKyspIFwKKwkJZnVuYygiJTAyeCAiLCBiW2xvb3BfXSk7IFwKKwlmdW5jKCJcbiIpO1wKK30KKworI2RlZmluZSBDRTYyMzBfVVNCX1RJTUVPVVQgMTAwMAorCitzdHJ1Y3QgcmVxX3QgeworCXU4ICBjbWQ7ICAgICAgIC8qIFsxXSAqLworCXUxNiB2YWx1ZTsgICAgIC8qIFsyfDNdICovCisJdTE2IGluZGV4OyAgICAgLyogWzR8NV0gKi8KKwl1MTYgZGF0YV9sZW47ICAvKiBbNnw3XSAqLworCXU4ICAqZGF0YTsKK307CisKK2VudW0gY2U2MjMwX2NtZCB7CisJQ09ORklHX1JFQUQgICAgICAgICAgPSAweGQwLCAvKiByZCAwICh1bmNsZWFyKSAqLworCVVOS05PV05fV1JJVEUgICAgICAgID0gMHhjNywgLyogd3IgNyAodW5jbGVhcikgKi8KKwlJMkNfUkVBRCAgICAgICAgICAgICA9IDB4ZDksIC8qIHJkIDkgKHVuY2xlYXIpICovCisJSTJDX1dSSVRFICAgICAgICAgICAgPSAweGNhLCAvKiB3ciBhICovCisJREVNT0RfUkVBRCAgICAgICAgICAgPSAweGRiLCAvKiByZCBiICovCisJREVNT0RfV1JJVEUgICAgICAgICAgPSAweGNjLCAvKiB3ciBjICovCisJUkVHX1JFQUQgICAgICAgICAgICAgPSAweGRlLCAvKiByZCBlICovCisJUkVHX1dSSVRFICAgICAgICAgICAgPSAweGNmLCAvKiB3ciBmICovCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCmluZGV4IDIwMGIyMTUuLmRiN2Y3ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwpAQCAtMTU4LDYgKzE1OCwxMCBAQAogCQkJCWVycigiaTJjIHJlYWQgZXJyb3IgKHN0YXR1cyA9ICVkKVxuIiwgcmVzdWx0KTsKIAkJCQlicmVhazsKIAkJCX0KKworCQkJZGViX2RhdGEoIjw8PCAiKTsKKwkJCWRlYnVnX2R1bXAobXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbiwgZGViX2RhdGEpOworCiAJCX0gZWxzZSB7CiAJCQkvKiBXcml0ZSByZXF1ZXN0ICovCiAJCQlidWZbMF0gPSBSRVFVRVNUX05FV19JMkNfV1JJVEU7CkBAIC0xNjksNiArMTczLDkgQEAKIAkJCS8qIFRoZSBBY3R1YWwgaTJjIHBheWxvYWQgKi8KIAkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKIAorCQkJZGViX2RhdGEoIj4+PiAiKTsKKwkJCWRlYnVnX2R1bXAoYnVmLCBtc2dbaV0ubGVuICsgNCwgZGViX2RhdGEpOworCiAJCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwKIAkJCQkJCSB1c2Jfc25kY3RybHBpcGUoZC0+dWRldiwgMCksCiAJCQkJCQkgUkVRVUVTVF9ORVdfSTJDX1dSSVRFLApAQCAtMjExLDcgKzIxOCw4IEBACiAKIAkJCS8qIHNwZWNpYWwgdGhpbmcgaW4gdGhlIGN1cnJlbnQgZmlybXdhcmU6IHdoZW4gbGVuZ3RoIGlzIHplcm8gdGhlIHJlYWQtZmFpbGVkICovCiAJCQlpZiAoKGxlbiA9IGRpYjA3MDBfY3RybF9yZChkLCBidWYsIG1zZ1tpXS5sZW4gKyAyLCBtc2dbaSsxXS5idWYsIG1zZ1tpKzFdLmxlbikpIDw9IDApIHsKLQkJCQlkZWJfaW5mbygiSTJDIHJlYWQgZmFpbGVkIG9uIGFkZHJlc3MgJXhcbiIsIG1zZ1tpXS5hZGRyKTsKKwkJCQlkZWJfaW5mbygiSTJDIHJlYWQgZmFpbGVkIG9uIGFkZHJlc3MgMHglMDJ4XG4iLAorCQkJCQkgbXNnW2ldLmFkZHIpOwogCQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYwppbmRleCA2MzVkMzBhLi44ZGRiYWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlICJ4YzUwMDAuaCIKICNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAiZGliMDA3MC5oIgorI2luY2x1ZGUgImxnZHQzMzA1LmgiCisjaW5jbHVkZSAibXhsNTAwN3QuaCIKIAogc3RhdGljIGludCBmb3JjZV9sbmFfYWN0aXZhdGlvbjsKIG1vZHVsZV9wYXJhbShmb3JjZV9sbmFfYWN0aXZhdGlvbiwgaW50LCAwNjQ0KTsKQEAgLTI2Miw3ICsyNjQsMTIgQEAKIAkJbXNsZWVwKDEwKTsKIAkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8xMCwgR1BJT19PVVQsIDEpOwogCQltc2xlZXAoMTApOwotCQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsMSwxOCxzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKTsKKwkJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCisJCQkJCSAgICAgc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZykKKwkJICAgICE9IDApIHsKKwkJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CiAJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsMHg4MCsoYWRhcC0+aWQgPDwgMSksCkBAIC0yODQsNyArMjkxLDEyIEBACiAJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKIAkJbXNsZWVwKDEwKTsKIAkJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7Ci0JCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwyLDE4LHN0azc3MDBkX2RpYjcwMDBwX210MjI2Nl9jb25maWcpOworCQlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAyLCAxOCwKKwkJCQkJICAgICBzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKQorCQkgICAgIT0gMCkgeworCQkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KIAl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwweDgwKyhhZGFwLT5pZCA8PCAxKSwKQEAgLTQyMSw4ICs0MzMsMTIgQEAKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAltc2xlZXAoMTApOwogCi0JZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKLQkJJnN0azc3MDBwaF9kaWI3NzAwX3hjMzAyOF9jb25maWcpOworCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAorCQkJCSAgICAgJnN0azc3MDBwaF9kaWI3NzAwX3hjMzAyOF9jb25maWcpICE9IDApIHsKKwkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCiAJCSZzdGs3NzAwcGhfZGliNzcwMF94YzMwMjhfY29uZmlnKTsKQEAgLTExODcsOCArMTIwMywxMiBAQAogCW1zbGVlcCgxMCk7CiAJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CiAKLQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAotCQkmZGliNzA3MHBfZGliNzAwMHBfY29uZmlnKTsKKwlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkgICAgICZkaWI3MDcwcF9kaWI3MDAwcF9jb25maWcpICE9IDApIHsKKwkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsCiAJCSZkaWI3MDcwcF9kaWI3MDAwcF9jb25maWcpOwpAQCAtMTI0NCw3ICsxMjY0LDEyIEBACiAJbXNsZWVwKDEwKTsKIAlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzAsIEdQSU9fT1VULCAxKTsKIAotCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMiwgMTgsIHN0azcwNzBwZF9kaWI3MDAwcF9jb25maWcpOworCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDIsIDE4LAorCQkJCSAgICAgc3RrNzA3MHBkX2RpYjcwMDBwX2NvbmZpZykgIT0gMCkgeworCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLAorCQkgICAgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlhZGFwLT5mZSA9IGR2Yl9hdHRhY2goZGliNzAwMHBfYXR0YWNoLCAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg4MCwgJnN0azcwNzBwZF9kaWI3MDAwcF9jb25maWdbMF0pOwogCXJldHVybiBhZGFwLT5mZSA9PSBOVUxMID8gLUVOT0RFViA6IDA7CkBAIC0xMzQ3LDYgKzEzNzIsNzIgQEAKIAkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwogfQogCitzdGF0aWMgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyBoY3dfbGdkdDMzMDVfY29uZmlnID0geworCS5pMmNfYWRkciAgICAgICAgICAgPSAweDBlLAorCS5tcGVnX21vZGUgICAgICAgICAgPSBMR0RUMzMwNV9NUEVHX1BBUkFMTEVMLAorCS50cGNsa19lZGdlICAgICAgICAgPSBMR0RUMzMwNV9UUENMS19GQUxMSU5HX0VER0UsCisJLnRwdmFsaWRfcG9sYXJpdHkgICA9IExHRFQzMzA1X1RQX1ZBTElEX0xPVywKKwkuZGVueV9pMmNfcnB0ciAgICAgID0gMCwKKwkuc3BlY3RyYWxfaW52ZXJzaW9uID0gMSwKKwkucWFtX2lmX2toeiAgICAgICAgID0gNjAwMCwKKwkudnNiX2lmX2toeiAgICAgICAgID0gNjAwMCwKKwkudXNyZWZfOHZzYiAgICAgICAgID0gMHgwNTAwLAorfTsKKworc3RhdGljIHN0cnVjdCBteGw1MDA3dF9jb25maWcgaGN3X214bDUwMDd0X2NvbmZpZyA9IHsKKwkueHRhbF9mcmVxX2h6ID0gTXhMX1hUQUxfMjVfTUhaLAorCS5pZl9mcmVxX2h6ID0gTXhMX0lGXzZfTUhaLAorCS5pbnZlcnRfaWYgPSAxLAorfTsKKworLyogVElHRVItQVRTQyBtYXA6CisgICBHUElPMCAgLSBMTkFfQ1RSICAoSDogTE5BIHBvd2VyIGVuYWJsZWQsIEw6IExOQSBwb3dlciBkaXNhYmxlZCkKKyAgIEdQSU8xICAtIEFOVF9TRUwgIChIOiBWUEEsIEw6IE1DWCkKKyAgIEdQSU80ICAtIFNDTDIKKyAgIEdQSU82ICAtIEVOX1RVTkVSCisgICBHUElPNyAgLSBTREEyCisgICBHUElPMTAgLSBERU1fUlNUCisKKyAgIE1YTCBpcyBiZWhpbmQgTEcncyBpMmMgcmVwZWF0ZXIuICBMRyBpcyBvbiBTQ0wyL1NEQTIgZ3Bpb3Mgb24gdGhlIERJQgorICovCitzdGF0aWMgaW50IGxnZHQzMzA1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBkaWIwNzAwX3N0YXRlICpzdCA9IGFkYXAtPmRldi0+cHJpdjsKKworCS8qIE1ha2UgdXNlIG9mIHRoZSBuZXcgaTJjIGZ1bmN0aW9ucyBmcm9tIEZXIDEuMjAgKi8KKwlzdC0+ZndfdXNlX25ld19pMmNfYXBpID0gMTsKKworCXN0LT5kaXNhYmxlX3N0cmVhbWluZ19tYXN0ZXJfbW9kZSA9IDE7CisKKwkvKiBmZSBwb3dlciBlbmFibGUgKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPNiwgR1BJT19PVVQsIDEpOworCW1zbGVlcCgzMCk7CisKKwkvKiBkZW1vZCByZXNldCAqLworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAwKTsKKwltc2xlZXAoMzApOworCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMzApOworCisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzA1X2F0dGFjaCwKKwkJCSAgICAgICZoY3dfbGdkdDMzMDVfY29uZmlnLAorCQkJICAgICAgJmFkYXAtPmRldi0+aTJjX2FkYXApOworCisJcmV0dXJuIGFkYXAtPmZlID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworc3RhdGljIGludCBteGw1MDA3dF90dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gZHZiX2F0dGFjaChteGw1MDA3dF9hdHRhY2gsIGFkYXAtPmZlLAorCQkJICAmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMHg2MCwKKwkJCSAgJmhjd19teGw1MDA3dF9jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKK30KKworCiAvKiBEVkItVVNCIGFuZCBVU0Igc3R1ZmYgZm9sbG93cyAqLwogc3RydWN0IHVzYl9kZXZpY2VfaWQgZGliMDcwMF91c2JfaWRfdGFibGVbXSA9IHsKIC8qIDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLCAgICBVU0JfUElEX0RJQkNPTV9TVEs3NzAwUCkgfSwKQEAgLTEzOTYsNiArMTQ4NywxMiBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAlVU0JfUElEX1RFUlJBVEVDX0NJTkVSR1lfVF9FWFBSRVNTKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLAogCQkJVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX0RUX1hTX0RJVkVSU0lUWV8yKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1NPTlksCVVTQl9QSURfU09OWV9QTEFZVFYpIH0sCisvKiA0NSAqL3sgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sICAgICAgVVNCX1BJRF9ZVUFOX1BEMzc4UykgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9IQVVQUEFVR0UsIFVTQl9QSURfSEFVUFBBVUdFX1RJR0VSX0FUU0MpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDX0IyMTApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfWVVBTiwJVVNCX1BJRF9ZVUFOX01DNzcwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0VMR0FUTywJVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUKSB9LAogCXsgMCB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkaWIwNzAwX3VzYl9pZF90YWJsZSk7CkBAIC0xNTk1LDcgKzE2OTIsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDksCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMTEsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzA3MFAgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTVdLCBOVUxMIH0sCkBAIC0xNjMzLDYgKzE3MzAsMTQgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIkVsZ2F0byBFeWVUViBEVFQiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ5XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiWXVhbiBQRDM3OFMiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ1XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKIAkJfSwKIAogCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCkBAIC0xNjYxLDcgKzE3NjYsNyBAQAogCQkJfQogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gNSwKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSA2LAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQRCByZWZlcmVuY2UgZGVzaWduIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsxN10sIE5VTEwgfSwKQEAgLTE2ODIsOCArMTc4NywxNiBAQAogCQkJeyAgIlRlcnJhdGVjIENpbmVyZ3kgRFQgVVNCIFhTIERpdmVyc2l0eSIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDNdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCisJCQl9LAorCQkJeyAgIlNvbnkgUGxheVRWIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0NF0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKIAkJCX0KLQkJfQorCQl9LAorCQkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCisJCS5yY19rZXlfbWFwICAgICAgID0gZGliMDcwMF9yY19rZXlzLAorCQkucmNfa2V5X21hcF9zaXplICA9IEFSUkFZX1NJWkUoZGliMDcwMF9yY19rZXlzKSwKKwkJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWIwNzAwX3JjX3F1ZXJ5CiAJfSwgeyBESUIwNzAwX0RFRkFVTFRfREVWSUNFX1BST1BFUlRJRVMsCiAKIAkJLm51bV9hZGFwdGVycyA9IDEsCkBAIC0xNjk5LDcgKzE4MTIsNyBAQAogCQkJfSwKIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDUsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNywKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgSFQgVVNCIFhFIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVsyN10sIE5VTEwgfSwKQEAgLTE3MjUsNiArMTgzOCwxMCBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKKwkJCXsgICAiWVVBTiBIaWdoLVRlY2ggTUM3NzAiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ4XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKIAkJfSwKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKQEAgLTE3NTksNiArMTg3NiwzMSBAQAogCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKIAkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCiAJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQorCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAorCQkubnVtX2FkYXB0ZXJzID0gMSwKKwkJLmFkYXB0ZXIgPSB7CisJCQl7CisJCQkJLmZyb250ZW5kX2F0dGFjaCAgPSBsZ2R0MzMwNV9mcm9udGVuZF9hdHRhY2gsCisJCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBteGw1MDA3dF90dW5lcl9hdHRhY2gsCisKKwkJCQlESUIwNzAwX0RFRkFVTFRfU1RSRUFNSU5HX0NPTkZJRygweDAyKSwKKworCQkJCS5zaXplX29mX3ByaXYgPSBzaXplb2Yoc3RydWN0CisJCQkJCQlkaWIwNzAwX2FkYXB0ZXJfc3RhdGUpLAorCQkJfSwKKwkJfSwKKworCQkubnVtX2RldmljZV9kZXNjcyA9IDIsCisJCS5kZXZpY2VzID0geworCQkJeyAgICJIYXVwcGF1Z2UgQVRTQyBNaW5pQ2FyZCAoQjIwMCkiLAorCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQ2XSwgTlVMTCB9LAorCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICAiSGF1cHBhdWdlIEFUU0MgTWluaUNhcmQgKEIyMTApIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0N10sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCX0sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCAwZGIwYzA2Li5kYzdlYTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0yNywxMiArMjcsMTQgQEAKICNkZWZpbmUgVVNCX1ZJRF9ESUJDT00JCQkJMHgxMGI4CiAjZGVmaW5lIFVTQl9WSURfRFBPU0gJCQkJMHgxNDk4CiAjZGVmaW5lIFVTQl9WSURfRFZJQ08JCQkJMHgwZmU5CisjZGVmaW5lIFVTQl9WSURfRUxHQVRPCQkJCTB4MGZkOQogI2RlZmluZSBVU0JfVklEX0VNUElBCQkJCTB4ZWIxYQogI2RlZmluZSBVU0JfVklEX0dFTlBJWAkJCQkweDA5YzAKICNkZWZpbmUgVVNCX1ZJRF9HUkFORFRFQwkJCTB4NTAzMgogI2RlZmluZSBVU0JfVklEX0hBTkZURUsJCQkJMHgxNWY0CiAjZGVmaW5lIFVTQl9WSURfSEFVUFBBVUdFCQkJMHgyMDQwCiAjZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJMHgxMDI1CisjZGVmaW5lIFVTQl9WSURfSU5URUwJCQkJMHg4MDg2CiAjZGVmaW5lIFVTQl9WSURfS1dPUkxECQkJCTB4ZWIyYQogI2RlZmluZSBVU0JfVklEX0tXT1JMRF8yCQkJMHgxYjgwCiAjZGVmaW5lIFVTQl9WSURfS1lFCQkJCTB4MDQ1OApAQCAtNDgsNiArNTAsNyBAQAogI2RlZmluZSBVU0JfVklEX1RFUlJBVEVDCQkJMHgwY2NkCiAjZGVmaW5lIFVTQl9WSURfVEVMRVNUQVIJCQkweDEwYjkKICNkZWZpbmUgVVNCX1ZJRF9WSVNJT05QTFVTCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfU09OWQkJCQkweDE0MTUKICNkZWZpbmUgVVNCX1ZJRF9UV0lOSEFOCQkJCTB4MTgyMgogI2RlZmluZSBVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDCQkweDA1ZDgKICNkZWZpbmUgVVNCX1ZJRF9VTklXSUxMCQkJCTB4MTU4NApAQCAtOTUsOCArOTgsMTAgQEAKICNkZWZpbmUgVVNCX1BJRF9VTklXSUxMX1NUSzc3MDBQCQkJMHg2MDAzCiAjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfQ09MRAkJCTB4MGZhMAogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX1dBUk0JCQkweDBmYTEKKyNkZWZpbmUgVVNCX1BJRF9JTlRFTF9DRTk1MDAJCQkJMHg5NTAwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5OVUJCQkJMHhlMzk5CiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5NVUJCQkJMHhlMzk2CisjZGVmaW5lIFVTQl9QSURfS1dPUkxEXzM5NVVfMgkJCQkweGUzOWIKICNkZWZpbmUgVVNCX1BJRF9LV09STERfUEMxNjBfMlQJCQkJMHhjMTYwCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1ZTVFJFQU1fQ09MRAkJCTB4MTdkZQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX1dBUk0JCQkweDE3ZGYKQEAgLTE0OSw2ICsxNTQsOCBAQAogI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9NWVRWX1QJCQkweDcwODAKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDSwkJCTB4OTU4MAogI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9OT1ZBX1REX1NUSUNLXzUyMDA5CQkweDUyMDAKKyNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfVElHRVJfQVRTQwkJCTB4YjIwMAorI2RlZmluZSBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDX0IyMTAJCTB4YjIxMAogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9FWFBSRVNTCQkJMHhiNTY4CiAjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX1ZPTEFSCQkJCTB4YTgwNwogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUl8yCQkJMHhiODA4CkBAIC0yMzIsOSArMjM5LDEzIEBACiAjZGVmaW5lIFVTQl9QSURfQVNVU19VMzEwMAkJCQkweDE3M2YKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX0VDMzcyUwkJCQkweDFlZGMKICNkZWZpbmUgVVNCX1BJRF9ZVUFOX1NUSzc3MDBQSAkJCQkweDFmMDgKKyNkZWZpbmUgVVNCX1BJRF9ZVUFOX1BEMzc4UwkJCQkweDJlZGMKKyNkZWZpbmUgVVNCX1BJRF9ZVUFOX01DNzcwCQkJCTB4MDg3MQogI2RlZmluZSBVU0JfUElEX0RXMjEwMgkJCQkJMHgyMTAyCiAjZGVmaW5lIFVTQl9QSURfWFRFTlNJT05TX1hEXzM4MAkJCTB4MDM4MQogI2RlZmluZSBVU0JfUElEX1RFTEVTVEFSX1NUQVJTVElDS18yCQkJMHg4MDAwCiAjZGVmaW5lIFVTQl9QSURfTVNJX0RJR0lfVk9YX01JTklfSUlJICAgICAgICAgICAgICAgICAgIDB4ODgwNworI2RlZmluZSBVU0JfUElEX1NPTllfUExBWVRWCQkJCTB4MDAwMworI2RlZmluZSBVU0JfUElEX0VMR0FUT19FWUVUVl9EVFQJCQkweDAwMjEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCmluZGV4IGIxZGUwZjcuLjJkNTM1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpbnQgZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQ7CiAKIAlpbnQgbnVtX2RldmljZV9kZXNjczsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gZGV2aWNlc1s5XTsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gZGV2aWNlc1sxMV07CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IDMyNTI2ZjEuLjEyZjc3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJCXN1YnVuaXRfdHlwZSA9IGRhdGFbMV0gPj4gMzsKIAkJc3VidW5pdF9pZCA9IGRhdGFbMV0gJiA3OwogCQlvcCA9IHN1YnVuaXRfdHlwZSA9PSAweDFlIHx8IHN1YnVuaXRfaWQgPT0gNSA/IH4wIDogZGF0YVsyXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXNzdT0leC4leCBsPSVkOiAlLThzIC0gJXNcbiIsCisJCXByaW50ayhLRVJOX0lORk8gIiVzc3U9JXguJXggbD0lenU6ICUtOHMgLSAlc1xuIiwKIAkJICAgICAgIHByZWZpeCwgc3VidW5pdF90eXBlLCBzdWJ1bml0X2lkLCBsZW5ndGgsCiAJCSAgICAgICBkZWJ1Z19mY3BfY3R5cGUoZGF0YVswXSksCiAJCSAgICAgICBkZWJ1Z19mY3Bfb3Bjb2RlKG9wLCBkYXRhLCBsZW5ndGgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggYmFmODA4ZS4uYTQ4NmE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTEsMTcgKzEsMjEgQEAKLW1lbnUgIkN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKLQogY29uZmlnIERWQl9GRV9DVVNUT01JU0UKIAlib29sICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQogCWRlZmF1bHQgTgogCWhlbHAKLQkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGRlc2VsZWN0IGZyb250ZW5kIGRyaXZlcnMgdW5uZWNlc3NhcnkKLQkgIGZvciB0aGVpciBoYXJkd2FyZSBmcm9tIHRoZSBidWlsZC4gVXNlIHRoaXMgb3B0aW9uIHdpdGggY2FyZQotCSAgYXMgZGVzZWxlY3RpbmcgZnJvbnRlbmRzIHdoaWNoIGFyZSBpbiBmYWN0IG5lY2Vzc2FyeSB3aWxsIHJlc3VsdAotCSAgaW4gRFZCIGRldmljZXMgd2hpY2ggY2Fubm90IGJlIHR1bmVkIGR1ZSB0byBsYWNrIG9mIGRyaXZlciBzdXBwb3J0LgorCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0L2Rlc2VsZWN0IGZyb250ZW5kIGRyaXZlcnMgZm9yIHRoZWlyCisJICBoYXJkd2FyZSBmcm9tIHRoZSBidWlsZC4KKworCSAgVXNlIHRoaXMgb3B0aW9uIHdpdGggY2FyZSBhcyBkZXNlbGVjdGluZyBmcm9udGVuZHMgd2hpY2ggYXJlIGluIGZhY3QKKwkgIG5lY2Vzc2FyeSB3aWxsIHJlc3VsdCBpbiBEVkIgZGV2aWNlcyB3aGljaCBjYW5ub3QgYmUgdHVuZWQgZHVlIHRvIGxhY2sKKwkgIG9mIGRyaXZlciBzdXBwb3J0LgogCiAJICBJZiB1bnN1cmUgc2F5IE4uCiAKK2lmIERWQl9GRV9DVVNUT01JU0UKKworbWVudSAiQ3VzdG9taXNlIERWQiBGcm9udGVuZHMiCisKIGNvbW1lbnQgIk11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtNTUsNiArNTksMTMgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfWkwxMDAzNgorCXRyaXN0YXRlICJaYXJsaW5rIFpMMTAwMzYgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1M1SDE0MjAKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNUgxNDIwIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC04Myw2ICs5NCwyMCBAQAogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9TVFY2MTEwCisJdHJpc3RhdGUgIlNUIFNUVjYxMTAgc2lsaWNvbiB0dW5lciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJICBoZWxwCisJICBBIERWQi1TIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KKworY29uZmlnIERWQl9TVFYwOTAwCisJdHJpc3RhdGUgIlNUIFNUVjA5MDAgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMvUzIgZGVtb2R1bGF0b3IuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1REQTgwODMKIAl0cmlzdGF0ZSAiUGhpbGlwcyBUREE4MDgzIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC0yODgsNiArMzEzLDEzIEBACiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX0FGOTAxMworCXRyaXN0YXRlICJBZmF0ZWNoIEFGOTAxMyBkZW1vZHVsYXRvciIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCisKIGNvbW1lbnQgIkRWQi1DIChjYWJsZSkgZnJvbnRlbmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUKIApAQCAtMzg3LDYgKzQxOSwxNCBAQAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfTEdEVDMzMDUKKwl0cmlzdGF0ZSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDUgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAorCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb25maWcgRFZCX1M1SDE0MDkKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNUgxNDA5IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCkBAIC0zOTcsNyArNDM3LDcgQEAKIAogY29uZmlnIERWQl9BVTg1MjIKIAl0cmlzdGF0ZSAiQXV2aXRlayBBVTg1MjIgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQyAmJiBWSURFT19WNEwyCiAJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKQEAgLTQ0NiwxMSArNDg2LDExIEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCiBjb25maWcgRFZCX0xOQlAyMQotCXRyaXN0YXRlICJMTkJQMjEgU0VDIGNvbnRyb2xsZXIiCisJdHJpc3RhdGUgIkxOQlAyMS9MTkJIMjQgU0VDIGNvbnRyb2xsZXJzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCi0JICBBbiBTRUMgY29udHJvbCBjaGlwLgorCSAgQW4gU0VDIGNvbnRyb2wgY2hpcHMuCiAKIGNvbmZpZyBEVkJfSVNMNjQwNQogCXRyaXN0YXRlICJJU0w2NDA1IFNFQyBjb250cm9sbGVyIgpAQCAtNDc4LDExICs1MTgsNiBAQAogY29uZmlnIERWQl9EVU1NWV9GRQogCXRyaXN0YXRlICJEdW1teSBmcm9udGVuZCBkcml2ZXIiCiAJZGVmYXVsdCBuCi0KLWNvbmZpZyBEVkJfQUY5MDEzCi0JdHJpc3RhdGUgIkFmYXRlY2ggQUY5MDEzIGRlbW9kdWxhdG9yIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKLQloZWxwCi0JICBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIGVuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCBhZjdiZGYwLi42NWEzMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC03LDYgKzcsOCBAQAogCiBzOTIxLW9ianMgOj0gczkyMV9tb2R1bGUubyBzOTIxX2NvcmUubwogc3RiMDg5OS1vYmpzID0gc3RiMDg5OV9kcnYubyBzdGIwODk5X2FsZ28ubworc3R2MDkwMC1vYmpzID0gc3R2MDkwMF9jb3JlLm8gc3R2MDkwMF9zdy5vCithdTg1MjItb2JqcyA9IGF1ODUyMl9kaWcubyBhdTg1MjJfZGVjb2Rlci5vCiAKIG9iai0kKENPTkZJR19EVkJfUExMKSArPSBkdmItcGxsLm8KIG9iai0kKENPTkZJR19EVkJfU1RWMDI5OSkgKz0gc3R2MDI5OS5vCkBAIC0yOCw2ICszMCw3IEBACiBvYmotJChDT05GSUdfRFZCX1NQODg3WCkgKz0gc3A4ODd4Lm8KIG9iai0kKENPTkZJR19EVkJfTlhUNjAwMCkgKz0gbnh0NjAwMC5vCiBvYmotJChDT05GSUdfRFZCX01UMzUyKSArPSBtdDM1Mi5vCitvYmotJChDT05GSUdfRFZCX1pMMTAwMzYpICs9IHpsMTAwMzYubwogb2JqLSQoQ09ORklHX0RWQl9aTDEwMzUzKSArPSB6bDEwMzUzLm8KIG9iai0kKENPTkZJR19EVkJfQ1gyMjcwMikgKz0gY3gyMjcwMi5vCiBvYmotJChDT05GSUdfRFZCX0RSWDM5N1hEKSArPSBkcngzOTd4RC5vCkBAIC00MSw2ICs0NCw3IEBACiBvYmotJChDT05GSUdfRFZCX1M1SDE0MjApICs9IHM1aDE0MjAubwogb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwWCkgKz0gbGdkdDMzMHgubwogb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwNCkgKz0gbGdkdDMzMDQubworb2JqLSQoQ09ORklHX0RWQl9MR0RUMzMwNSkgKz0gbGdkdDMzMDUubwogb2JqLSQoQ09ORklHX0RWQl9DWDI0MTIzKSArPSBjeDI0MTIzLm8KIG9iai0kKENPTkZJR19EVkJfTE5CUDIxKSArPSBsbmJwMjEubwogb2JqLSQoQ09ORklHX0RWQl9JU0w2NDA1KSArPSBpc2w2NDA1Lm8KQEAgLTY0LDQgKzY4LDYgQEAKIG9iai0kKENPTkZJR19EVkJfU1RWMDI4OCkgKz0gc3R2MDI4OC5vCiBvYmotJChDT05GSUdfRFZCX1NUQjYwMDApICs9IHN0YjYwMDAubwogb2JqLSQoQ09ORklHX0RWQl9TOTIxKSArPSBzOTIxLm8KK29iai0kKENPTkZJR19EVkJfU1RWNjExMCkgKz0gc3R2NjExMC5vCitvYmotJChDT05GSUdfRFZCX1NUVjA5MDApICs9IHN0djA5MDAubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKaW5kZXggN2I5NGY1NS4uNTY1ZGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaApAQCAtNzQsNiArNzQsMjIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfRFZCX0FVODUyMiAqLwogCisvKiBPdGhlciBtb2RlcyBtYXkgbmVlZCB0byBiZSBhZGRlZCBsYXRlciAqLworZW51bSBhdTg1MjJfdmlkZW9faW5wdXQgeworCUFVODUyMl9DT01QT1NJVEVfQ0gxID0gMSwKKwlBVTg1MjJfQ09NUE9TSVRFX0NIMiwKKwlBVTg1MjJfQ09NUE9TSVRFX0NIMywKKwlBVTg1MjJfQ09NUE9TSVRFX0NINCwKKwlBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYsCisJQVU4NTIyX1NWSURFT19DSDEzLAorCUFVODUyMl9TVklERU9fQ0gyNCwKK307CisKK2VudW0gYXU4NTIyX2F1ZGlvX2lucHV0IHsKKwlBVTg1MjJfQVVESU9fTk9ORSwKKwlBVTg1MjJfQVVESU9fU0lGLAorfTsKKwogI2VuZGlmIC8qIF9fQVU4NTIyX0hfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RlY29kZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNlMTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKQEAgLTAsMCArMSw4MzUgQEAKKy8qCisgKiBBdXZpdGVrIEFVODUyMiBRQU0vOFZTQiBkZW1vZHVsYXRvciBkcml2ZXIgYW5kIHZpZGVvIGRlY29kZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEF1dml0ZWsgSW50ZXJuYXRpb25hbCwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBBcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBEZXZlbG9wZXIgbm90ZXM6CisgKgorICogVkJJIHN1cHBvcnQgaXMgbm90IHlldCB3b3JraW5nCisgKiBTYXR1cmF0aW9uIGFuZCBodWUgc2V0dGluZyBhcmUgbm90IHlldCB3b3JraW5nCisgKiBFbm91Z2ggaXMgaW1wbGVtZW50ZWQgaGVyZSBmb3IgQ1ZCUyBhbmQgUy1WaWRlbyBpbnB1dHMsIGJ1dCB0aGUgYWN0dWFsCisgKiAgYW5hbG9nIGRlbW9kdWxhdG9yIGNvZGUgaXNuJ3QgaW1wbGVtZW50ZWQgKG5vdCBuZWVkZWQgZm9yIHhjNTAwMCBzaW5jZSBpdAorICogIGhhcyBpdHMgb3duIGRlbW9kdWxhdG9yIGFuZCBvdXRwdXRzIENWQlMpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSAiYXU4NTIyLmgiCisjaW5jbHVkZSAiYXU4NTIyX3ByaXYuaCIKKworTU9EVUxFX0FVVEhPUigiRGV2aW4gSGVpdG11ZWxsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBhdTg1MjJfYW5hbG9nX2RlYnVnOworCisKK21vZHVsZV9wYXJhbV9uYW1lZChhbmFsb2dfZGVidWcsIGF1ODUyMl9hbmFsb2dfZGVidWcsIGludCwgMDY0NCk7CisKK01PRFVMRV9QQVJNX0RFU0MoYW5hbG9nX2RlYnVnLAorCQkgIkFuYWxvZyBkZWJ1Z2dpbmcgbWVzc2FnZXMgWzA9T2ZmIChkZWZhdWx0KSAxPU9uXSIpOworCitzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZyB7CisJdTE2IHJlZ19uYW1lOworCXU4IHJlZ192YWxbOF07Cit9OworCisKKy8qIFZpZGVvIERlY29kZXIgRmlsdGVyIENvZWZmaWNpZW50cworICAgVGhlIHZhbHVlcyBhcmUgYXMgZm9sbG93cyBmcm9tIGxlZnQgdG8gcmlnaHQKKyAgIDA9IkFUViBSRiIgMT0iQVRWIFJGMTMiIDI9IkNWQlMiIDM9IlMtVmlkZW8iIDQ9IlBBTCIgNT1DVkJTMTMiIDY9IlNWaWRlbzEzIgorKi8KK3N0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnIGZpbHRlcl9jb2VmW10gPSB7CisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDEwLCB7MHgyNSwgMHgwMCwgMHgyNSwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTEsIHsweDIwLCAweDAwLCAweDIwLCAweDIwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMiwgezB4MDMsIDB4MDAsIDB4MDMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDEzLCB7MHhlNiwgMHgwMCwgMHhlNiwgMHhlNiwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTQsIHsweDQwLCAweDAwLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxNSwgezB4MWIsIDB4MDAsIDB4MWIsIDB4MWIsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE2LCB7MHhjMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTcsIHsweDA0LCAweDAwLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxOCwgezB4OGMsIDB4MDAsIDB4OGMsIDB4OGMsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE5LCB7MHhhMCwgMHg0MCwgMHhhMCwgMHhhMCwgMHg0MCwgMHg0MCwgMHg0MH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUEsIHsweDIxLCAweDA5LCAweDIxLCAweDIxLCAweDA5LCAweDA5LCAweDA5fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxQiwgezB4NmMsIDB4MzgsIDB4NmMsIDB4NmMsIDB4MzgsIDB4MzgsIDB4Mzh9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFDLCB7MHgwMywgMHhmZiwgMHgwMywgMHgwMywgMHhmZiwgMHhmZiwgMHhmZn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUQsIHsweGJmLCAweGM3LCAweGJmLCAweGJmLCAweGM3LCAweGM3LCAweGM3fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxRSwgezB4YTAsIDB4ZGYsIDB4YTAsIDB4YTAsIDB4ZGYsIDB4ZGYsIDB4ZGZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFGLCB7MHgxMCwgMHgwNiwgMHgxMCwgMHgxMCwgMHgwNiwgMHgwNiwgMHgwNn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjAsIHsweGFlLCAweDMwLCAweGFlLCAweGFlLCAweDMwLCAweDMwLCAweDMwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyMSwgezB4YzQsIDB4MDEsIDB4YzQsIDB4YzQsIDB4MDEsIDB4MDEsIDB4MDF9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDIyLCB7MHg1NCwgMHhkZCwgMHg1NCwgMHg1NCwgMHhkZCwgMHhkZCwgMHhkZH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjMsIHsweGQwLCAweGFmLCAweGQwLCAweGQwLCAweGFmLCAweGFmLCAweGFmfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNCwgezB4MWMsIDB4ZjcsIDB4MWMsIDB4MWMsIDB4ZjcsIDB4ZjcsIDB4Zjd9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI1LCB7MHg3NiwgMHhkYiwgMHg3NiwgMHg3NiwgMHhkYiwgMHhkYiwgMHhkYn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjYsIHsweDYxLCAweGMwLCAweDYxLCAweDYxLCAweGMwLCAweGMwLCAweGMwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNywgezB4ZDEsIDB4MmYsIDB4ZDEsIDB4ZDEsIDB4MmYsIDB4MmYsIDB4MmZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI4LCB7MHg4NCwgMHhkOCwgMHg4NCwgMHg4NCwgMHhkOCwgMHhkOCwgMHhkOH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjksIHsweDA2LCAweGZiLCAweDA2LCAweDA2LCAweGZiLCAweGZiLCAweGZifSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyQSwgezB4MjEsIDB4ZDUsIDB4MjEsIDB4MjEsIDB4ZDUsIDB4ZDUsIDB4ZDV9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDJCLCB7MHgwYSwgMHgzZSwgMHgwYSwgMHgwYSwgMHgzZSwgMHgzZSwgMHgzZX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkMsIHsweGU2LCAweDE1LCAweGU2LCAweGU2LCAweDE1LCAweDE1LCAweDE1fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyRCwgezB4MDEsIDB4MzQsIDB4MDEsIDB4MDEsIDB4MzQsIDB4MzQsIDB4MzR9IH0sCisKK307CisjZGVmaW5lIE5VTV9GSUxURVJfQ09FRiAoc2l6ZW9mKGZpbHRlcl9jb2VmKVwKKwkJCSAvIHNpemVvZihzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZykpCisKKworLyogUmVnaXN0ZXJzIDB4MDYwYiB0aHJvdWdoIDB4MDY1MiBhcmUgdGhlIExQIEZpbHRlciBjb2VmZmljaWVudHMKKyAgIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MgZnJvbSBsZWZ0IHRvIHJpZ2h0CisgICAwPSJTSUYiIDE9IkFUVlJGL0FUVlJGMTMiCisgICBOb3RlOiB0aGUgIkFUVlJGL0FUVlJGMTMiIG1vZGUgaGFzIG5ldmVyIGJlZW4gdGVzdGVkCisqLworc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgbHBmaWx0ZXJfY29lZltdID0geworCXsweDA2MGIsIHsweDIxLCAweDBifSB9LAorCXsweDA2MGMsIHsweGFkLCAweGFkfSB9LAorCXsweDA2MGQsIHsweDcwLCAweGYwfSB9LAorCXsweDA2MGUsIHsweGVhLCAweGU5fSB9LAorCXsweDA2MGYsIHsweGRkLCAweGRkfSB9LAorCXsweDA2MTAsIHsweDA4LCAweDY0fSB9LAorCXsweDA2MTEsIHsweDYwLCAweDYwfSB9LAorCXsweDA2MTIsIHsweGY4LCAweGIyfSB9LAorCXsweDA2MTMsIHsweDAxLCAweDAyfSB9LAorCXsweDA2MTQsIHsweGU0LCAweGI0fSB9LAorCXsweDA2MTUsIHsweDE5LCAweDAyfSB9LAorCXsweDA2MTYsIHsweGFlLCAweDJlfSB9LAorCXsweDA2MTcsIHsweGVlLCAweGM1fSB9LAorCXsweDA2MTgsIHsweDU2LCAweDU2fSB9LAorCXsweDA2MTksIHsweDMwLCAweDU4fSB9LAorCXsweDA2MWEsIHsweGY5LCAweGY4fSB9LAorCXsweDA2MWIsIHsweDI0LCAweDY0fSB9LAorCXsweDA2MWMsIHsweDA3LCAweDA3fSB9LAorCXsweDA2MWQsIHsweDMwLCAweDMwfSB9LAorCXsweDA2MWUsIHsweGE5LCAweGVkfSB9LAorCXsweDA2MWYsIHsweDA5LCAweDBifSB9LAorCXsweDA2MjAsIHsweDQyLCAweGMyfSB9LAorCXsweDA2MjEsIHsweDFkLCAweDJhfSB9LAorCXsweDA2MjIsIHsweGQ2LCAweDU2fSB9LAorCXsweDA2MjMsIHsweDk1LCAweDhifSB9LAorCXsweDA2MjQsIHsweDJiLCAweDJifSB9LAorCXsweDA2MjUsIHsweDMwLCAweDI0fSB9LAorCXsweDA2MjYsIHsweDNlLCAweDNlfSB9LAorCXsweDA2MjcsIHsweDYyLCAweGUyfSB9LAorCXsweDA2MjgsIHsweGU5LCAweGY1fSB9LAorCXsweDA2MjksIHsweDk5LCAweDE5fSB9LAorCXsweDA2MmEsIHsweGQ0LCAweDExfSB9LAorCXsweDA2MmIsIHsweDAzLCAweDA0fSB9LAorCXsweDA2MmMsIHsweGI1LCAweDg1fSB9LAorCXsweDA2MmQsIHsweDFlLCAweDIwfSB9LAorCXsweDA2MmUsIHsweDJhLCAweGVhfSB9LAorCXsweDA2MmYsIHsweGQ3LCAweGQyfSB9LAorCXsweDA2MzAsIHsweDE1LCAweDE1fSB9LAorCXsweDA2MzEsIHsweGEzLCAweGE5fSB9LAorCXsweDA2MzIsIHsweDFmLCAweDFmfSB9LAorCXsweDA2MzMsIHsweGY5LCAweGQxfSB9LAorCXsweDA2MzQsIHsweGMwLCAweGMzfSB9LAorCXsweDA2MzUsIHsweDRkLCAweDhkfSB9LAorCXsweDA2MzYsIHsweDIxLCAweDMxfSB9LAorCXsweDA2MzcsIHsweDgzLCAweDgzfSB9LAorCXsweDA2MzgsIHsweDA4LCAweDhjfSB9LAorCXsweDA2MzksIHsweDE5LCAweDE5fSB9LAorCXsweDA2M2EsIHsweDQ1LCAweGE1fSB9LAorCXsweDA2M2IsIHsweGVmLCAweGVjfSB9LAorCXsweDA2M2MsIHsweDhhLCAweDhhfSB9LAorCXsweDA2M2QsIHsweGY0LCAweGY2fSB9LAorCXsweDA2M2UsIHsweDhmLCAweDhmfSB9LAorCXsweDA2M2YsIHsweDQ0LCAweDBjfSB9LAorCXsweDA2NDAsIHsweGVmLCAweGYwfSB9LAorCXsweDA2NDEsIHsweDY2LCAweDY2fSB9LAorCXsweDA2NDIsIHsweGNjLCAweGQyfSB9LAorCXsweDA2NDMsIHsweDQxLCAweDQxfSB9LAorCXsweDA2NDQsIHsweDYzLCAweDkzfSB9LAorCXsweDA2NDUsIHsweDhlLCAweDhlfSB9LAorCXsweDA2NDYsIHsweGEyLCAweDQyfSB9LAorCXsweDA2NDcsIHsweDdiLCAweDdifSB9LAorCXsweDA2NDgsIHsweDA0LCAweDA0fSB9LAorCXsweDA2NDksIHsweDAwLCAweDAwfSB9LAorCXsweDA2NGEsIHsweDQwLCAweDQwfSB9LAorCXsweDA2NGIsIHsweDhjLCAweDk4fSB9LAorCXsweDA2NGMsIHsweDAwLCAweDAwfSB9LAorCXsweDA2NGQsIHsweDYzLCAweGMzfSB9LAorCXsweDA2NGUsIHsweDA0LCAweDA0fSB9LAorCXsweDA2NGYsIHsweDIwLCAweDIwfSB9LAorCXsweDA2NTAsIHsweDAwLCAweDAwfSB9LAorCXsweDA2NTEsIHsweDQwLCAweDQwfSB9LAorCXsweDA2NTIsIHsweDAxLCAweDAxfSB9LAorfTsKKyNkZWZpbmUgTlVNX0xQRklMVEVSX0NPRUYgKHNpemVvZihscGZpbHRlcl9jb2VmKVwKKwkJCSAgIC8gc2l6ZW9mKHN0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnKSkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXU4NTIyX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBhdTg1MjJfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfdmJpKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCBpbnQgYXVkX2lucHV0KQoreworCWludCBpOworCisJLyogVGhlc2UgYXJlIHNldCB0byB6ZXJvIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBtb2RlIHdlJ3JlIGluICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9MX1JFRzAxOEgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RPVEFMX0JJVFNfUkVHMDE5SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfSF9SRUcwMUFILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UVU5JVF9MX1JFRzAxQkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RIUkVTSDFfUkVHMDFDSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMl9SRUcwMUVILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQxX1JFRzAxRkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDBfUkVHMDIwSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzJfUkVHMDIxSCwKKwkJCTB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0sxX1JFRzAyMkgsCisJCQkweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMF9SRUcwMjNILAorCQkJMHgwMCk7CisKKwkvKiBTZXR1cCB0aGUgVkJJIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDB4MzA7IGkgPCAweDYwOyBpKyspCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgaSwgMHg0MCk7CisKKwkvKiBGb3Igc29tZSByZWFzb24sIGV2ZXJ5IHJlZ2lzdGVyIGlzIDB4NDAgZXhjZXB0IHJlZ2lzdGVyIDB4NDQKKwkgICAoY29uZmlybWVkIHZpYSB0aGUgSFZSLTk1MHEgVVNCIGNhcHR1cmUpICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDQ0LCAweDYwKTsKKworCS8qIEVuYWJsZSBWQkkgKHdlIGFsd2F5cyBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdXNlciBpcworCSAgIHZpZXdpbmcgY2xvc2VkIGNhcHRpb24gaW5mbykgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0gsCisJCQlBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdIX0NDT04pOworCit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2RlY29kZXJfZGVmYXVsdHMoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHU4IGlucHV0X21vZGUpCit7CisJaW50IGk7CisJaW50IGZpbHRlcl9jb2VmX3R5cGU7CisKKwkvKiBQcm92aWRlIHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIHBpY3R1cmUgdHVuaW5nIHZhbHVlcyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1NIQVJQTkVTU1JFRzAwOUgsIDB4MDcpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0JSSUdIVE5FU1NfUkVHMDBBSCwgMHhlZCk7CisJc3RhdGUtPmJyaWdodG5lc3MgPSAweGVkIC0gMTI4OworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkgsIDB4NzkpOworCXN0YXRlLT5jb250cmFzdCA9IDB4Nzk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DQl9SRUcwMENILCAweDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NSX1JFRzAwREgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0hVRV9IX1JFRzAwRUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0hVRV9MX1JFRzAwRkgsIDB4MDApOworCisJLyogT3RoZXIgZGVjb2RlciByZWdpc3RlcnMgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19JTlRfTUFTS19SRUcwMTBILCAweDAwKTsKKworCWlmIChpbnB1dF9tb2RlID09IDB4MjMpIHsKKwkJLyogUy1WaWRlbyBpbnB1dCBtYXBwaW5nICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSCwgMHgwNCk7CisJfSBlbHNlIHsKKwkJLyogQWxsIG90aGVyIG1vZGVzIChDVkJTL0FUVlJGIGV0Yy4pICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSCwgMHgwMCk7CisJfQorCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkgsCisJCQlBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSCwKKwkJCUFVODUyMl9UVkRFRF9EQkdfTU9ERV9SRUcwNjBIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFILAorCQkJQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFIX0NWQlMxMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkgsCisJCQlBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkhfQ1ZCUzEzKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSCwKKwkJCUFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SCwKKwkJCUFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMV9SRUcwNjVILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIzX1JFRzA2N0gsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX05PVENIX1RIUl9SRUcwNjhILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0gsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZILAorCQkJQVU4NTIyX1RWREVDX1VWX1NFUF9USFJfUkVHMDZGSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDcxSCwgQVU4NTIyX1JFRzA3MUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDcySCwgQVU4NTIyX1JFRzA3MkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIyX05UU0NfUkVHMDczSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3NEgsIEFVODUyMl9SRUcwNzRIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3NUgsIEFVODUyMl9SRUcwNzVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0RDQUdDX0NUUkxfUkVHMDc3SCwKKwkJCUFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfUElDX1NUQVJUX0FESl9SRUcwNzhILAorCQkJQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19BR0NfSElHSF9MSU1JVF9SRUcwNzlILAorCQkJQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1lOQ19USFJfUkVHMDdBSCwKKwkJCUFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSCwKKwkJCUFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRILAorCQkJQVU4NTIyX1RWREVDX0FHQ19MT1dfTElNSVRfUkVHMEU0SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SCwKKwkJCUFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwMTZILCBBVTg1MjJfUkVHMDE2SF9DVkJTKTsKKworCXNldHVwX3ZiaShzdGF0ZSwgMCk7CisKKwlpZiAoaW5wdXRfbW9kZSA9PSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDEzIHx8CisJICAgIGlucHV0X21vZGUgPT0gQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gyNCkgeworCQkvKiBEZXNwaXRlIHdoYXQgdGhlIHRhYmxlIHNheXMsIGZvciB0aGUgSFZSLTk1MHEgd2Ugc3RpbGwgbmVlZAorCQkgICB0byBiZSBpbiBDVkJTIG1vZGUgZm9yIHRoZSBTLVZpZGVvIGlucHV0IChyZWFzb24gdWtub3duKS4gKi8KKwkJLyogZmlsdGVyX2NvZWZfdHlwZSA9IDM7ICovCisJCWZpbHRlcl9jb2VmX3R5cGUgPSA1OworCX0gZWxzZSB7CisJCWZpbHRlcl9jb2VmX3R5cGUgPSA1OworCX0KKworCS8qIExvYWQgdGhlIFZpZGVvIERlY29kZXIgRmlsdGVyIENvZWZmaWNpZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fRklMVEVSX0NPRUY7IGkrKykgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIGZpbHRlcl9jb2VmW2ldLnJlZ19uYW1lLAorCQkJCWZpbHRlcl9jb2VmW2ldLnJlZ192YWxbZmlsdGVyX2NvZWZfdHlwZV0pOworCX0KKworCS8qIEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhlc2UgcmVnaXN0ZXJzIGFyZSBmb3IsIGJ1dCB0aGV5IGFyZSBhbHdheXMKKwkgICBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgcmVnYXJkbGVzcyBvZiB3aGF0IG1vZGUgd2UncmUgaW4gKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MkVILCAweDg3KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MkZILCAweGEyKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzBILCAweGJmKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzFILCAweGNiKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzJILCAweGExKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzNILCAweDQxKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzRILCAweDg4KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzVILCAweGMyKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUc0MzZILCAweDNjKTsKK30KKworc3RhdGljIHZvaWQgYXU4NTIyX3NldHVwX2N2YnNfbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwkvKiBoZXJlIHdlJ3JlIGdvaW5nIHRvIHRyeSB0aGUgcHJlLXByb2dyYW1tZWQgcm91dGUgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQ1ZCUyk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MGUpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MTApOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMSk7CisKKwlzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gxKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworc3RhdGljIHZvaWQgYXU4NTIyX3NldHVwX2N2YnNfdHVuZXJfbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwkvKiBoZXJlIHdlJ3JlIGdvaW5nIHRvIHRyeSB0aGUgcHJlLXByb2dyYW1tZWQgcm91dGUgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfQ1ZCUyk7CisKKwkvKiBJdCdzIG5vdCBjbGVhciB3aHkgdGhleSB0dXJuIG9mZiB0aGUgUEdBIGJlZm9yZSBlbmFibGluZyB0aGUgY2xhbXAKKwkgICBjb250cm9sLCBidXQgdGhlIFdpbmRvd3MgdHJhY2UgZG9lcyBpdCBzbyB3ZSB3aWxsIHRvby4uLiAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MDApOworCisJLyogRW5hYmxlIGNsYW1waW5nIGNvbnRyb2wgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MGUpOworCisJLyogVHVybiBvbiB0aGUgUEdBICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgxMCk7CisKKwkvKiBTZXQgaW5wdXQgbW9kZSB0byBDVkJTIG9uIGNoYW5uZWwgNCB3aXRoIFNJRiBhdWRpbyBpbnB1dCBlbmFibGVkICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NINF9TSUYpOworCisJc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdGF0ZSwKKwkJCSAgICAgICBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0g0X1NJRik7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ODUyMl9zZXR1cF9zdmlkZW9fbW9kZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNILAorCQkJQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfU1ZJREVPKTsKKworCS8qIFNldCBpbnB1dCB0byBZIG9uIENoYW5uZTEsIEMgb24gQ2hhbm5lbCAzICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFILAorCQkJQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyk7CisKKwkvKiBEaXNhYmxlIGNsYW1waW5nIGNvbnRyb2wgKHJlcXVpcmVkIGZvciBTLXZpZGVvKSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSCwgMHgwMCk7CisKKwlzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0YXRlLAorCQkJICAgICAgIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCBkaXNhYmxlX2F1ZGlvX2lucHV0KHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlKQoreworCS8qIFRoaXMgY2FuIHByb2JhYmx5IGJlIG9wdGltaXplZCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcxX1JFRzA5MUgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzBfUkVHMDkwSCwgMHg4NCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9FTkFfVVNCX1JFRzEwMUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzBGOUgsIEFVODUyMl9SRUcwRjlIX0FVRElPKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19NT0RFX1JFRzBGMUgsIDB4NDApOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfR1BJT19EQVRBX1JFRzBFMkgsIDB4MTEpOworCW1zbGVlcCg1KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9HUElPX0RBVEFfUkVHMEUySCwgMHgwMCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVILCAweDA0KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCwgMHgwMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJTX0NUUkxfMl9SRUcxMTJILCAweDAyKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworLyogMD1kaXNhYmxlLCAxPVNJRiAqLworc3RhdGljIHZvaWQgc2V0X2F1ZGlvX2lucHV0KHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCBpbnQgYXVkX2lucHV0KQoreworCWludCBpOworCisJLyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHNldHRpbmcKKwkgICB0aGUgaW5wdXQgcm91dGluZyB2aWEgcmVnaXN0ZXIgMHg4MSAqLworCisJaWYgKGF1ZF9pbnB1dCA9PSBBVTg1MjJfQVVESU9fTk9ORSkgeworCQlkaXNhYmxlX2F1ZGlvX2lucHV0KHN0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhdWRfaW5wdXQgIT0gQVU4NTIyX0FVRElPX1NJRikgeworCQkvKiBUaGUgY2FsbGVyIGFza2VkIGZvciBhIG1vZGUgd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICJVbnN1cHBvcnRlZCBhdWRpbyBtb2RlIHJlcXVlc3RlZCEgbW9kZT0lZFxuIiwKKwkJICAgICAgIGF1ZF9pbnB1dCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMb2FkIHRoZSBBdWRpbyBEZWNvZGVyIEZpbHRlciBDb2VmZmljaWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0xQRklMVEVSX0NPRUY7IGkrKykgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIGxwZmlsdGVyX2NvZWZbaV0ucmVnX25hbWUsCisJCQkJbHBmaWx0ZXJfY29lZltpXS5yZWdfdmFsWzBdKTsKKwl9CisKKwkvKiBTZXR1cCBhdWRpbyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcxX1JFRzA5MUgsIDB4ODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzBfUkVHMDkwSCwgMHg4NCk7CisJbXNsZWVwKDE1MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwgMHgwMCk7CisJbXNsZWVwKDEpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsIDB4OWQpOworCW1zbGVlcCg1MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JFRzBGNEgsIDB4ZmYpOworCW1zbGVlcCg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX0xfUkVHMEYySCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fVk9MVU1FX1JfUkVHMEYzSCwgMHg3Rik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMEY5SCwgQVU4NTIyX1JFRzBGOUhfQVVESU8pOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX01PREVfUkVHMEYxSCwgMHg4Mik7CisJbXNsZWVwKDcwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVILCAweDA5KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCwgMHgwMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJTX0NUUkxfMl9SRUcxMTJILCAweGMyKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhdTg1MjJfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlzdGF0ZS0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19CUklHSFRORVNTX1JFRzAwQUgsCisJCQkJY3RybC0+dmFsdWUgLSAxMjgpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlzdGF0ZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSCwKKwkJCQljdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCS8qIE5vdGUgdGhhdCB3ZSBhcmUgdXNpbmcgdmFsdWVzIGNhY2hlZCBpbiB0aGUgc3RhdGUgc3RydWN0dXJlIGluc3RlYWQKKwkgICBvZiByZWFkaW5nIHRoZSByZWdpc3RlcnMgZHVlIHRvIGlzc3VlcyB3aXRoIGkyYyByZWFkcyBub3Qgd29ya2luZworCSAgIHByb3Blcmx5L2NvbnNpc3RlbnRseSB5ZXQgb24gdGhlIEhWUi05NTBxICovCisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5icmlnaHRuZXNzOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkvKiBOb3QgeWV0IHN1cHBvcnRlZCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGF1ODUyMl9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzd2l0Y2ggKGZtdC0+dHlwZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3dpdGNoIChmbXQtPnR5cGUpIHsKKwljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgYXU4NTIyX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+dmFsID0gYXU4NTIyX3JlYWRyZWcoc3RhdGUsIHJlZy0+cmVnICYgMHhmZmZmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCByZWctPnJlZywgcmVnLT52YWwgJiAweGZmKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGF1ODUyMl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGVuYWJsZSkgeworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJCTB4MDEpOworCQltc2xlZXAoMSk7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7CisJfSBlbHNlIHsKKwkJLyogVGhpcyBkb2VzIG5vdCBjb21wbGV0ZWx5IHBvd2VyIGRvd24gdGhlIGRldmljZQorCQkgICAoaXQgb25seSByZWR1Y2VzIGl0IGZyb20gYXJvdW5kIDE0MG1hIHRvIDgwbWEpICovCisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQkJMSA8PCA1KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsCisJCQkJCSAgICBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSF9DVkJTKTsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXFjLT50eXBlID0gMDsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBhdTg1MjJfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHhhNCwgMSA8PCA1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9zX3ZpZGVvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJYXU4NTIyX3Jlc2V0KHNkLCAwKTsKKworCS8qIEphbSBvcGVuIHRoZSBpMmMgZ2F0ZSB0byB0aGUgdHVuZXIuICBXZSBkbyB0aGlzIGhlcmUgdG8gaGFuZGxlIHRoZQorCSAgIGNhc2Ugd2hlcmUgdGhlIHVzZXIgd2VudCBpbnRvIGRpZ2l0YWwgbW9kZSAoY2F1c2luZyB0aGUgZ2F0ZSB0byBiZQorCSAgIGNsb3NlZCksIGFuZCB0aGVuIGNhbWUgYmFjayB0byBhbmFsb2cgbW9kZSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHgxMDYsIDEpOworCisJaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfQ09NUE9TSVRFX0NIMSkgeworCQlhdTg1MjJfc2V0dXBfY3Zic19tb2RlKHN0YXRlKTsKKwl9IGVsc2UgaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfU1ZJREVPX0NIMTMpIHsKKwkJYXU4NTIyX3NldHVwX3N2aWRlb19tb2RlKHN0YXRlKTsKKwl9IGVsc2UgaWYgKHJvdXRlLT5pbnB1dCA9PSBBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYpIHsKKwkJYXU4NTIyX3NldHVwX2N2YnNfdHVuZXJfbW9kZShzdGF0ZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdTg1MjIgbW9kZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzZXRfYXVkaW9faW5wdXQoc3RhdGUsIHJvdXRlLT5pbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCWludCB2YWwgPSAwOworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4IGxvY2tfc3RhdHVzOworCisJLyogSW50ZXJyb2dhdGUgdGhlIGRlY29kZXIgdG8gc2VlIGlmIHdlIGFyZSBnZXR0aW5nIGEgcmVhbCBzaWduYWwgKi8KKwlsb2NrX3N0YXR1cyA9IGF1ODUyMl9yZWFkcmVnKHN0YXRlLCAweDAwKTsKKwlpZiAobG9ja19zdGF0dXMgPT0gMHhhMikKKwkJdnQtPnNpZ25hbCA9IDB4MDE7CisJZWxzZQorCQl2dC0+c2lnbmFsID0gMHgwMDsKKworCXZ0LT5jYXBhYmlsaXR5IHw9CisJCVY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKKwkJVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7CisKKwl2YWwgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCXZ0LT5yeHN1YmNoYW5zID0gdmFsOworCXZ0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgc3RhdGUtPmlkLCBzdGF0ZS0+cmV2KTsKK30KKworc3RhdGljIGludCBhdTg1MjJfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCS8qIEZJWE1FOiBBZGQgc29tZSBzdGF0dXMgaW5mbyBoZXJlICovCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYXU4NTIyX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gYXU4NTIyX2xvZ19zdGF0dXMsCisJLmdfY2hpcF9pZGVudCA9IGF1ODUyMl9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGF1ODUyMl9nX2N0cmwsCisJLnNfY3RybCA9IGF1ODUyMl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IGF1ODUyMl9xdWVyeWN0cmwsCisJLnJlc2V0ID0gYXU4NTIyX3Jlc2V0LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IGF1ODUyMl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gYXU4NTIyX3NfcmVnaXN0ZXIsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGF1ODUyMl90dW5lcl9vcHMgPSB7CisJLmdfdHVuZXIgPSBhdTg1MjJfZ190dW5lciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGF1ODUyMl9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGF1ODUyMl9zX2F1ZGlvX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhdTg1MjJfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBhdTg1MjJfc192aWRlb19yb3V0aW5nLAorCS5nX2ZtdCA9IGF1ODUyMl9nX2ZtdCwKKwkuc19mbXQgPSBhdTg1MjJfc19mbXQsCisJLnNfc3RyZWFtID0gYXU4NTIyX3Nfc3RyZWFtLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYXU4NTIyX29wcyA9IHsKKwkuY29yZSA9ICZhdTg1MjJfY29yZV9vcHMsCisJLnR1bmVyID0gJmF1ODUyMl90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmF1ODUyMl9hdWRpb19vcHMsCisJLnZpZGVvID0gJmF1ODUyMl92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGF1ODUyMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCWludCBpbnN0YW5jZTsKKwlzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqZGVtb2RfY29uZmlnOworCisJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLworCWluc3RhbmNlID0gYXU4NTIyX2dldF9zdGF0ZSgmc3RhdGUsIGNsaWVudC0+YWRhcHRlciwgY2xpZW50LT5hZGRyKTsKKwlzd2l0Y2ggKGluc3RhbmNlKSB7CisJY2FzZSAwOgorCQlwcmludGsoS0VSTl9FUlIgImF1ODUyMl9kZWNvZGVyIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJY2FzZSAxOgorCQkvKiBuZXcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXU4NTIyX2RlY29kZXIgY3JlYXRpbmcgbmV3IGluc3RhbmNlLi4uXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZXhpc3RpbmcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXU4NTIyX2RlY29kZXIgYXR0YWNoIGV4aXN0aW5nIGluc3RhbmNlLlxuIik7CisJCWJyZWFrOworCX0KKworCWRlbW9kX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdTg1MjJfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJZGVtb2RfY29uZmlnLT5kZW1vZF9hZGRyZXNzID0gMHg4ZSA+PiAxOworCisJc3RhdGUtPmNvbmZpZyA9IGRlbW9kX2NvbmZpZzsKKwlzdGF0ZS0+aTJjID0gY2xpZW50LT5hZGFwdGVyOworCisJc2QgPSAmc3RhdGUtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhdTg1MjJfb3BzKTsKKworCXN0YXRlLT5jID0gY2xpZW50OworCXN0YXRlLT52aWRfaW5wdXQgPSBBVTg1MjJfQ09NUE9TSVRFX0NIMTsKKwlzdGF0ZS0+YXVkX2lucHV0ID0gQVU4NTIyX0FVRElPX05PTkU7CisJc3RhdGUtPmlkID0gODUyMjsKKwlzdGF0ZS0+cmV2ID0gMDsKKworCS8qIEphbSBvcGVuIHRoZSBpMmMgZ2F0ZSB0byB0aGUgdHVuZXIgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4MTA2LCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWF1ODUyMl9yZWxlYXNlX3N0YXRlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhdTg1MjJfaWRbXSA9IHsKKwl7ImF1ODUyMiIsIDB9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYXU4NTIyX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gImF1ODUyMiIsCisJLnByb2JlID0gYXU4NTIyX3Byb2JlLAorCS5yZW1vdmUgPSBhdTg1MjJfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGF1ODUyMl9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX2RpZy5jCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuYwpyZW5hbWUgdG8gZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwppbmRleCBlYWJmOWE2Li4zNTczMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwpAQCAtMjcsMzUgKzI3LDI1IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJhdTg1MjIuaCIKLQotc3RydWN0IGF1ODUyMl9zdGF0ZSB7Ci0KLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKLQotCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KLQljb25zdCBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqY29uZmlnOwotCi0Jc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKLQotCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKLQlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOwotCi0JdTMyIGZlX3N0YXR1czsKLQl1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOwotfTsKKyNpbmNsdWRlICJhdTg1MjJfcHJpdi5oIgogCiBzdGF0aWMgaW50IGRlYnVnOwogCi0jZGVmaW5lIGRwcmludGsoYXJnLi4uKSBkbyB7CQlcCi0JaWYgKGRlYnVnKSAJCQlcCi0JCSBwcmludGsoYXJnKTsgCQlcCisvKiBEZXNwaXRlIHRoZSBuYW1lICJoeWJyaWRfdHVuZXIiLCB0aGUgZnJhbWV3b3JrIHdvcmtzIGp1c3QgYXMgd2VsbCBmb3IKKyAgIGh5YnJpZCBkZW1vZHVsYXRvcnMgYXMgd2VsbC4uLiAqLworc3RhdGljIExJU1RfSEVBRChoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGF1ODUyMl9saXN0X211dGV4KTsKKworI2RlZmluZSBkcHJpbnRrKGFyZy4uLilcCisJZG8geyBpZiAoZGVidWcpXAorCQlwcmludGsoYXJnKTtcCiAJfSB3aGlsZSAoMCkKIAogLyogMTYgYml0IHJlZ2lzdGVycywgOCBiaXQgdmFsdWVzICovCi1zdGF0aWMgaW50IGF1ODUyMl93cml0ZXJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggZGF0YSkKK2ludCBhdTg1MjJfd3JpdGVyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IGRhdGEpCiB7CiAJaW50IHJldDsKLQl1OCBidWYgW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmLCBkYXRhIH07CisJdTggYnVmW10gPSB7IChyZWcgPj4gOCkgfCAweDgwLCByZWcgJiAweGZmLCBkYXRhIH07CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywKIAkJCSAgICAgICAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMyB9OwpAQCAtNjksMTMgKzU5LDEzIEBACiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtMSA6IDA7CiB9CiAKLXN0YXRpYyB1OCBhdTg1MjJfcmVhZHJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3U4IGF1ODUyMl9yZWFkcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQogewogCWludCByZXQ7Ci0JdTggYjAgW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07Ci0JdTggYjEgW10gPSB7IDAgfTsKKwl1OCBiMFtdID0geyAocmVnID4+IDgpIHwgMHg0MCwgcmVnICYgMHhmZiB9OworCXU4IGIxW10gPSB7IDAgfTsKIAotCXN0cnVjdCBpMmNfbXNnIG1zZyBbXSA9IHsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsCiAJCSAgLmJ1ZiA9IGIwLCAubGVuID0gMiB9LAogCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCkBAIC01MjgsNyArNTE4LDcgQEAKIAogLyogUmVzZXQgdGhlIGRlbW9kIGhhcmR3YXJlIGFuZCByZXNldCBhbGwgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCiAgICB0byBhIGRlZmF1bHQgc3RhdGUuICovCi1zdGF0aWMgaW50IGF1ODUyMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoraW50IGF1ODUyMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAJZHByaW50aygiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtNjI0LDcgKzYxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXU4NTIyX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoraW50IGF1ODUyMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTYzMiw2ICs2MjIsOSBAQAogCS8qIHR1cm4gb2ZmIGxlZCAqLwogCWF1ODUyMl9sZWRfY3RybChzdGF0ZSwgMCk7CiAKKwkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweGE0LCAxIDw8IDUpOworCiAJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gMDsKIAogCXJldHVybiAwOwpAQCAtNzk4LDIzICs3OTEsNTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGF1ODUyMl9vcHM7CisKK2ludCBhdTg1MjJfZ2V0X3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKipzdGF0ZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCSAgICAgdTggY2xpZW50X2FkZHJlc3MpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmF1ODUyMl9saXN0X211dGV4KTsKKwlyZXQgPSBoeWJyaWRfdHVuZXJfcmVxdWVzdF9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlLCAoKnN0YXRlKSwKKwkJCQkJIGh5YnJpZF90dW5lcl9pbnN0YW5jZV9saXN0LAorCQkJCQkgaTJjLCBjbGllbnRfYWRkcmVzcywgImF1ODUyMiIpOworCW11dGV4X3VubG9jaygmYXU4NTIyX2xpc3RfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwltdXRleF9sb2NrKCZhdTg1MjJfbGlzdF9tdXRleCk7CisJaWYgKHN0YXRlICE9IE5VTEwpCisJCWh5YnJpZF90dW5lcl9yZWxlYXNlX3N0YXRlKHN0YXRlKTsKKwltdXRleF91bmxvY2soJmF1ODUyMl9saXN0X211dGV4KTsKK30KKworCiBzdGF0aWMgdm9pZCBhdTg1MjJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWtmcmVlKHN0YXRlKTsKKwlhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdGF0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhdTg1MjJfb3BzOwotCiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICphdTg1MjJfYXR0YWNoKGNvbnN0IHN0cnVjdCBhdTg1MjJfY29uZmlnICpjb25maWcsCiAJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCBpbnN0YW5jZTsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXU4NTIyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN0YXRlID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7CisJaW5zdGFuY2UgPSBhdTg1MjJfZ2V0X3N0YXRlKCZzdGF0ZSwgaTJjLCBjb25maWctPmRlbW9kX2FkZHJlc3MpOworCXN3aXRjaCAoaW5zdGFuY2UpIHsKKwljYXNlIDA6CisJCWRwcmludGsoIiVzIHN0YXRlIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJLyogbmV3IGRlbW9kIGluc3RhbmNlICovCisJCWRwcmludGsoIiVzIHVzaW5nIG5ldyBpbnN0YW5jZVxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBleGlzdGluZyBkZW1vZCBpbnN0YW5jZSAqLworCQlkcHJpbnRrKCIlcyB1c2luZyBleGlzdGluZyBpbnN0YW5jZVxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwl9CiAKIAkvKiBzZXR1cCB0aGUgc3RhdGUgKi8KIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwpAQCAtODM2LDcgKzg2NCw3IEBACiAJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CiAKIGVycm9yOgotCWtmcmVlKHN0YXRlKTsKKwlhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdGF0ZSk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGF1ODUyMl9hdHRhY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI4ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgICAgQXV2aXRlayBBVTg1MjIgUUFNLzhWU0IgZGVtb2R1bGF0b3IgZHJpdmVyCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwOCBEZXZpbiBIZWl0bXVlbGxlciA8ZGhlaXRtdWVsbGVyQGxpbnV4dHYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEF1dml0ZWsgSW50ZXJuYXRpb25hbCwgTHRkLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKyNpbmNsdWRlICJhdTg1MjIuaCIKKyNpbmNsdWRlICJ0dW5lci1pMmMuaCIKKworc3RydWN0IGF1ODUyMl9zdGF0ZSB7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisKKwkvKiBVc2VkIGZvciBzaGFyaW5nIG9mIHRoZSBzdGF0ZSBiZXR3ZWVuIGFuYWxvZyBhbmQgZGlnaXRhbCBtb2RlICovCisJc3RydWN0IHR1bmVyX2kyY19wcm9wcyBpMmNfcHJvcHM7CisJc3RydWN0IGxpc3RfaGVhZCBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdDsKKworCS8qIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwljb25zdCBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqY29uZmlnOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKKworCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKKwlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOworCisJdTMyIGZlX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgbGVkX3N0YXRlOworCisJLyogQW5hbG9nIHNldHRpbmdzICovCisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXY0bDJfc3RkX2lkIHN0ZDsKKwlpbnQgdmlkX2lucHV0OworCWludCBhdWRfaW5wdXQ7CisJdTMyIGlkOworCXUzMiByZXY7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKK307CisKKy8qIFRoZXNlIGFyZSByb3V0aW5lcyBzaGFyZWQgYnkgYm90aCB0aGUgVlNCL1FBTSBkZW1vZHVsYXRvciBhbmQgdGhlIGFuYWxvZworICAgZGVjb2RlciAqLworaW50IGF1ODUyMl93cml0ZXJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggZGF0YSk7Cit1OCBhdTg1MjJfcmVhZHJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZyk7CitpbnQgYXU4NTIyX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworaW50IGF1ODUyMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKK2ludCBhdTg1MjJfZ2V0X3N0YXRlKHN0cnVjdCBhdTg1MjJfc3RhdGUgKipzdGF0ZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCSAgICAgdTggY2xpZW50X2FkZHJlc3MpOwordm9pZCBhdTg1MjJfcmVsZWFzZV9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSk7CisKKy8qIFJFR0lTVEVSUyAqLworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFICQkJMHgwODEKKyNkZWZpbmUgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgJCQkweDA4MgorI2RlZmluZSBBVTg1MjJfQ0xBTVBJTkdfQ09OVFJPTF9SRUcwODNICQkJMHgwODMKKworI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSAkJMHgwQTMKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgJCTB4MEE0CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVICQkweDBBNQorI2RlZmluZSBBVTg1MjJfQUdDX0NPTlRST0xfUkFOR0VfUkVHMEE2SAkJMHgwQTYKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9HQUlOX0NPTlRST0xfUkVHMEE3SAkJMHgwQTcKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19SRl9TVE9QX1JFRzBBOEggIAkJMHgwQTgKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19SRl9TVEFSVF9SRUcwQTlICQkweDBBOQorI2RlZmluZSBBVTg1MjJfVFVORVJfUkZfQUdDX0RFRkFVTFRfUkVHMEFBSAkJMHgwQUEKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19JRl9TVE9QX1JFRzBBQkgJCTB4MEFCCisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfSUZfU1RBUlRfUkVHMEFDSAkJMHgwQUMKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0FHQ19JRl9ERUZBVUxUX1JFRzBBREgJCTB4MEFECisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfU1RFUF9SRUcwQUVICQkJMHgwQUUKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX0dBSU5fU1RFUF9SRUcwQUZICQkJMHgwQUYKKworLyogUmVjZWl2ZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9GUk1SRUdUSFJEMV9SRUcwQjBICQkJMHgwQjAKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0FHQzFIX1JFRzBCMUggCQkJMHgwQjEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1NISUZUMV9SRUcwQjJIIAkJCTB4MEIyCisjZGVmaW5lIEFVODUyMl9UT1JFR0FHQzFfUkVHMEIzSCAJCQkweDBCMworI2RlZmluZSBBVTg1MjJfVE9SRUdBU0hJRlQxX1JFRzBCNEggCQkJMHgwQjQKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0JCSF9SRUcwQjVICQkJMHgwQjUKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0JCTV9SRUcwQjZIIAkJCTB4MEI2CisjZGVmaW5lIEFVODUyMl9GUk1SRUdCQkxfUkVHMEI3SCAgICAgCQkJMHgwQjcKKy8qIDB4QjggVE8gMHhENyBhcmUgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1RIUkQyX1JFRzBEOEggCQkJMHgwRDgKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0FHQzJIX1JFRzBEOUggCQkJMHgwRDkKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQUdDMl9SRUcwREFIIAkJCTB4MERBCisjZGVmaW5lIEFVODUyMl9UT1JFR1NISUZUMl9SRUcwREJIIAkJCTB4MERCCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVEhfUkVHMERDSAkJCTB4MERDCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVE1fUkVHMERESAkJCTB4MERECisjZGVmaW5lIEFVODUyMl9GUk1SRUdQSUxPVExfUkVHMERFSAkJCTB4MERFCisjZGVmaW5lIEFVODUyMl9UT1JFR0ZSRVFfUkVHMERGSAkJCTB4MERGCisKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9SRk9VVF9SRUcwRUJICQkJMHgwRUIKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9JRk9VVF9SRUcwRUNICQkJMHgwRUMKKyNkZWZpbmUgQVU4NTIyX1JYX1BHQV9QR0FPVVRfUkVHMEVESAkJCTB4MEVECisKKyNkZWZpbmUgQVU4NTIyX0NISVBfTU9ERV9SRUcwRkVICQkJMHgwRkUKKworLyogSTJDIGJ1cyBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMF9SRUcwOTBIICAgIAkJMHgwOTAKKyNkZWZpbmUgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzFfUkVHMDkxSCAgICAJCTB4MDkxCisjZGVmaW5lIEFVODUyMl9JMkNfU1RBVFVTX1JFRzA5MkggICAgICAgICAgCQkweDA5MgorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEwX1JFRzA5M0gJCQkweDA5MworI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEExX1JFRzA5NEgJCQkweDA5NAorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEyX1JFRzA5NUgJCQkweDA5NQorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEEzX1JFRzA5NkgJCQkweDA5NgorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE0X1JFRzA5N0gJCQkweDA5NworI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE1X1JFRzA5OEgJCQkweDA5OAorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE2X1JFRzA5OUgJCQkweDA5OQorI2RlZmluZSBBVTg1MjJfSTJDX1dSX0RBVEE3X1JFRzA5QUgJCQkweDA5QQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEwX1JFRzA5QkgJCQkweDA5QgorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEExX1JFRzA5Q0gJCQkweDA5QworI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEyX1JFRzA5REgJCQkweDA5RAorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEEzX1JFRzA5RUgJCQkweDA5RQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE0X1JFRzA5RkgJCQkweDA5RgorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE1X1JFRzBBMEgJCQkweDBBMAorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE2X1JFRzBBMUgJCQkweDBBMQorI2RlZmluZSBBVTg1MjJfSTJDX1JEX0RBVEE3X1JFRzBBMkgJCQkweDBBMgorCisjZGVmaW5lIEFVODUyMl9FTkFfVVNCX1JFRzEwMUgJCQkJMHgxMDEKKworI2RlZmluZSBBVTg1MjJfSTJTX0NUUkxfMF9SRUcxMTBIICAJCQkweDExMAorI2RlZmluZSBBVTg1MjJfSTJTX0NUUkxfMV9SRUcxMTFIIAkJCTB4MTExCisjZGVmaW5lIEFVODUyMl9JMlNfQ1RSTF8yX1JFRzExMkggCQkJMHgxMTIKKworI2RlZmluZSBBVTg1MjJfRlJNUkVHRkZFQ09OVFJPTF9SRUcxMjFIICAgIAkJMHgxMjEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0RGRUNPTlRST0xfUkVHMTIySCAgICAJCTB4MTIyCisKKyNkZWZpbmUgQVU4NTIyX0NBUlJGUkVRT0ZGU0VUMF9SRUcyMDFIIAkJCTB4MjAxCisjZGVmaW5lIEFVODUyMl9DQVJSRlJFUU9GRlNFVDFfUkVHMjAySAkJCTB4MjAyCisKKyNkZWZpbmUgQVU4NTIyX0RFQ0lNQVRJT05fR0FJTl9SRUcyMUFICQkJMHgyMUEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0lGU0xQX1JFRzIxQkggCQkJMHgyMUIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR1RIUkRMMl9SRUcyMUNIIAkJCTB4MjFDCisjZGVmaW5lIEFVODUyMl9GUk1SRUdTVEVQM0RCX1JFRzIxREggCQkJMHgyMUQKKyNkZWZpbmUgQVU4NTIyX0RBR0NfR0FJTl9BREpVU1RNRU5UX1JFRzIxRUgJCTB4MjFFCisjZGVmaW5lIEFVODUyMl9GUk1SRUdQTExNT0RFX1JFRzIxRkggCQkJMHgyMUYKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NTVEhSRF9SRUcyMjBIIAkJCTB4MjIwCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0tETUFYX1JFRzIyMUggCQkweDIyMQorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JQRVJJT0RNQVNLX1JFRzIyMkggCQkweDIyMgorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMFRISF9SRUcyMjNIIAkJMHgyMjMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DSzFUSEhfUkVHMjI0SCAJCTB4MjI0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0swVEhMX1JFRzIyNUggCQkweDIyNQorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMVRITF9SRUcyMjZIIAkJMHgyMjYKKyNkZWZpbmUgQVVfRlJNUkVHUExMQUNRUEhBU0VTQ0xfUkVHMjI3SAkJCTB4MjI3CisjZGVmaW5lIEFVODUyMl9GUk1SRUdGUkVRRkJDVFJMX1JFRzIyOEggCQkweDIyOAorCisvKiBBbmFsb2cgVFYgRGVjb2RlciAqLworI2RlZmluZSBBVTg1MjJfVFZERUNfU1RBVFVTX1JFRzAwMEgJCQkweDAwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfSU5UX1NUQVRVU19SRUcwMDFICQkJMHgwMDEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NUQVRVU19SRUcwMDJIIAkweDAwMgorI2RlZmluZSBBVTg1MjJfVFZERUNfU0hBUlBORVNTUkVHMDA5SAkJCTB4MDA5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19CUklHSFRORVNTX1JFRzAwQUgJCQkweDAwQQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09OVFJBU1RfUkVHMDBCSAkJCTB4MDBCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NCX1JFRzAwQ0gJCTB4MDBDCisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NSX1JFRzAwREgJCTB4MDBECisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfSF9SRUcwMEVICQkJMHgwMEUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0hVRV9MX1JFRzAwRkggICAgICAgICAgICAgICAgICAgCTB4MDBGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRfTUFTS19SRUcwMTBICQkJMHgwMTAKKyNkZWZpbmUgQVU4NTIyX1ZJREVPX01PREVfUkVHMDExSAkJCTB4MDExCisjZGVmaW5lIEFVODUyMl9UVkRFQ19QR0FfUkVHMDEySAkJCTB4MDEyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX01PREVfUkVHMDE1SAkJCTB4MDE1CisjZGVmaW5lIEFVODUyMl9SRUcwMTZIICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAxNgorI2RlZmluZSBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSAkJCTB4MDYwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSAkJMHgwNjEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMl9SRUcwNjJICQkweDA2MgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9MTElNX1JFRzA2M0gJCTB4MDYzCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0hMSU1fUkVHMDY0SAkJMHgwNjQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUgJCTB4MDY1CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMl9SRUcwNjZICQkweDA2NgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SAkJMHgwNjcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEgJCTB4MDY4CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMV9SRUcwNjlIICAgCQkweDA2OQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSAkJMHgwNkEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkggICAJCTB4MDZCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDRElGX1RIUjFfUkVHMDZDSCAgCQkweDA2QworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REggCQkweDA2RAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUggICAgICAgCTB4MDZFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkggIAkJMHgwNkYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMV9OVFNDX1JFRzA3MEgJCTB4MDcwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNICQkweDA3MworI2RlZmluZSBBVTg1MjJfVFZERUNfRENBR0NfQ1RSTF9SRUcwNzdICQkJMHgwNzcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SAkJMHgwNzgKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUgJCTB4MDc5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FICTB4MDdBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkgJCQkweDA3QgorI2RlZmluZSBBVTg1MjJfVFZERUNfUExMX1NUQVRVU19SRUcwN0VICQkJMHgwN0UKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZTQ19GUkVRX1JFRzA3RkgJCQkweDA3RgorCisjZGVmaW5lIEFVODUyMl9UVkRFQ19BR0NfTE9XX0xJTUlUX1JFRzBFNEgJCTB4MEU0CisjZGVmaW5lIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SAkJCTB4MEU1CisKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NIUk9NQV9BR0NfUkVHNDAxSAkJMHg0MDEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NIUk9NQV9TRlRfUkVHNDAySAkJMHg0MDIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTAgICAgIAkJMHg0MTAKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTEgICAgIAkJMHg0MTEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTIgICAgIAkJMHg0MTIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTMgICAgIAkJMHg0MTMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTQgICAgIAkJMHg0MTQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTUgICAgIAkJMHg0MTUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTYgICAgIAkJMHg0MTYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTcgICAgIAkJMHg0MTcKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTggICAgIAkJMHg0MTgKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTkgICAgIAkJMHg0MTkKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUEgICAgIAkJMHg0MUEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUIgICAgIAkJMHg0MUIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUMgICAgIAkJMHg0MUMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUQgICAgIAkJMHg0MUQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUUgICAgIAkJMHg0MUUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUYgICAgIAkJMHg0MUYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjAgICAgIAkJMHg0MjAKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjEgICAgIAkJMHg0MjEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjIgICAgIAkJMHg0MjIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjMgICAgIAkJMHg0MjMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjQgICAgIAkJMHg0MjQKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjUgICAgIAkJMHg0MjUKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjYgICAgIAkJMHg0MjYKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjcgICAgIAkJMHg0MjcKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjggICAgIAkJMHg0MjgKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjkgICAgIAkJMHg0MjkKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkEgICAgIAkJMHg0MkEKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkIgICAgIAkJMHg0MkIKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkMgICAgIAkJMHg0MkMKKyNkZWZpbmUgQVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkQgICAgIAkJMHg0MkQKKworLyogVkJJIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfUlhfRklGT19DT05UQUlOX1JFRzAwNEggIAkweDAwNAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1RYX0ZJRk9fQ09OVEFJTl9SRUcwMDVIICAJMHgwMDUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9SWF9GSUZPX1JFQURfUkVHMDA2SCAgICAgIAkweDAwNgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0ZJRk9fU1RBVFVTX1JFRzAwN0ggICAgICAgCTB4MDA3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0gJCQkweDAxNworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0NUUkxfTF9SRUcwMThICQkJMHgwMTgKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RPVEFMX0JJVFNfUkVHMDE5SAkweDAxOQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfSF9SRUcwMUFICQkweDAxQQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfTF9SRUcwMUJICQkweDAxQgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVEhSRVNIMV9SRUcwMUNICQkweDAxQworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMl9SRUcwMUVICTB4MDFFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQxX1JFRzAxRkggICAJMHgwMUYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDBfUkVHMDIwSCAgIAkweDAyMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzJfUkVHMDIxSCAJMHgwMjEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0sxX1JFRzAyMkggIAkweDAyMgorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzBfUkVHMDIzSAkweDAyMworCisjZGVmaW5lIEFVODUyMl9SRUcwNzFICQkJCQkweDA3MQorI2RlZmluZSBBVTg1MjJfUkVHMDcySAkJCQkJMHgwNzIKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NEgJCQkJCTB4MDc0CisjZGVmaW5lIEFVODUyMl9SRUcwNzVICQkJCQkweDA3NQorCisvKiBEaWdpdGFsIERlbW9kdWxhdG9yIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfRlJBTUVfQ09VTlQwX1JFRzA4NEgJCQkweDA4NAorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0cwX1JFRzA4NUgJCQkweDA4NQorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0IwX1JFRzA4NkgJCQkweDA4NgorI2RlZmluZSBBVTg1MjJfUlNfU1RBVFVTX0VfUkVHMDg3SAkJCTB4MDg3CisjZGVmaW5lIEFVODUyMl9ERU1PRFVMQVRJT05fU1RBVFVTX1JFRzA4OEgJCTB4MDg4CisjZGVmaW5lIEFVODUyMl9UT1JFR1RSRVNUQVRVU19SRUcwRTZICQkJMHgwRTYKKyNkZWZpbmUgQVU4NTIyX1RTUE9SVF9DT05UUk9MX1JFRzEwQkgJCQkweDEwQgorI2RlZmluZSBBVTg1MjJfVFNUSEVTX1JFRzEwQ0gJCQkJMHgxMEMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0RGRUtFRVBfUkVHMzAxSAkJCTB4MzAxCisjZGVmaW5lIEFVODUyMl9ERkVfQVZFUkFHRV9SRUczMDJICQkJMHgzMDIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0VRTEVSUldJTl9SRUczMDNICQkJMHgzMDMKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0ZGRUtFRVBfUkVHMzA0SAkJCTB4MzA0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdERkVDT05UUk9MMV9SRUczMDVICQkweDMwNQorI2RlZmluZSBBVTg1MjJfRlJNUkVHRVFMRVJSTE9XX1JFRzMwNkgJCQkweDMwNgorCisjZGVmaW5lIEFVODUyMl9SRUc0MkVICQkJCTB4NDJFCisjZGVmaW5lIEFVODUyMl9SRUc0MkZICQkJCTB4NDJGCisjZGVmaW5lIEFVODUyMl9SRUc0MzBICQkJCTB4NDMwCisjZGVmaW5lIEFVODUyMl9SRUc0MzFICQkJCTB4NDMxCisjZGVmaW5lIEFVODUyMl9SRUc0MzJICQkJCTB4NDMyCisjZGVmaW5lIEFVODUyMl9SRUc0MzNICQkJCTB4NDMzCisjZGVmaW5lIEFVODUyMl9SRUc0MzRICQkJCTB4NDM0CisjZGVmaW5lIEFVODUyMl9SRUc0MzVICQkJCTB4NDM1CisjZGVmaW5lIEFVODUyMl9SRUc0MzZICQkJCTB4NDM2CisKKy8qIEdQSU8gUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9HUElPX0NPTlRST0xfUkVHMEUwSAkJCTB4MEUwCisjZGVmaW5lIEFVODUyMl9HUElPX1NUQVRVU19SRUcwRTFICQkJMHgwRTEKKyNkZWZpbmUgQVU4NTIyX0dQSU9fREFUQV9SRUcwRTJICQkJMHgwRTIKKworLyogQXVkaW8gQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0FVRElPQUdDX1JFRzBFRUggCQkJMHgwRUUKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1NUQVRVU19SRUcwRjBIIAkJCTB4MEYwCisjZGVmaW5lIEFVODUyMl9BVURJT19NT0RFX1JFRzBGMUggCQkJMHgwRjEKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkggCQkJMHgwRjIKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0ggCQkJMHgwRjMKKyNkZWZpbmUgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRIIAkJCTB4MEY0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdBVVBIQVNFX1JFRzBGN0ggCQkJMHgwRjcKKyNkZWZpbmUgQVU4NTIyX1JFRzBGOUgJCQkJCTB4MEY5CisKKyNkZWZpbmUgQVU4NTIyX0FVRElPQUdDMl9SRUc2MDVIIAkJCTB4NjA1CisjZGVmaW5lIEFVODUyMl9BVURJT0ZSRVFfUkVHNjA2SCAJCQkweDYwNgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUU0MgICAgICAgICAgICAgICAJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUVlJGCQkJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0FUVlJGMTMJCQkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfSjgzQjY0ICAgICAgICAgICAgIAkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfSjgzQjI1NiAgICAgICAgICAgIAkweEM0CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCUyAgICAgICAgICAgICAgIAkweDIwCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDEJCQkweEEyCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDIJCQkweEEwCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDMJCQkweDY5CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDQJCQkweDY4CisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDRfU0lGICAgICAgICAJMHgyOAorLyogQ0gxIEFTIFksQ0gzIEFTIEMgKi8KKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyAgICAgICAgCTB4MjMKKy8qIENIMiBBUyBZLENINCBBUyBDICovCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMjQgICAgICAgIAkweDIwCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUU0MgICAgICAgIAkweDBDCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0o4M0I2NCAgICAgIAkweDA5CisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0o4M0IyNTYgICAgCQkweDA5CisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0NWQlMgICAgICAgIAkweDEyCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUVlJGICAgICAgIAkweDFBCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0FUVlJGMTMJCTB4MUEKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0hfU1ZJREVPCQkweDAyCisKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ0xFQVIJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfU1ZJREVPCQkweDlDCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMgICAgIAkweDlECisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0FUU0MJCTB4RTgKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfSjgzQjI1NiAJCTB4Q0EKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfSjgzQjY0ICAJCTB4Q0EKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQVRWUkYgICAJCTB4REQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQVRWUkYxMwkJMHhERAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9QQUwJCTB4REQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfRk0JCTB4REQKKworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9BVFNDCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0o4M0IyNTYgCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0o4M0I2NCAgCQkweDgwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0RPTkdMRV9BVFNDCTB4NDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0o4M0IyNTYJMHg0MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9ET05HTEVfSjgzQjY0CTB4NDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0NMRUFSCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQVRWUkYJCTB4MDEKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQVRWUkYxMwkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9TVklERU8gIAkJMHgwNAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9DVkJTCQkweDAxCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX1BXTSAgICAgCQkweDAzCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0lJUyAgICAgIAkweDA5CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX1BBTAkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9GTQkJMHgwMQorCisvKiBTVElMTCBORUVEIFRPIEJFIFJFRkFDVE9SRUQgQEBAQEBAQEBAQEBAQEAgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkhfQ1ZCUwkJCTB4NzkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ0JfUkVHMDBDSF9DVkJTCQkJMHg4MAorI2RlZmluZSBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DUl9SRUcwMERIX0NWQlMJCQkweDgwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfSF9SRUcwMEVIX0NWQlMJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfSFVFX0xfUkVHMDBGSF9DVkJTCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BHQV9SRUcwMTJIX0NWQlMJCQkJMHgwRgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUhfQ1ZCUwkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1JFRzAxNkhfQ1ZCUwkJCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSF9DVkJTCQkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUhfQ1ZCUwkJCTB4MEIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFIX0NWQlMxMwkJMHgwMworI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwyX1JFRzA2MkhfQ1ZCUzEzCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQ1JfREVUX0xMSU1fUkVHMDYzSF9DVkJTCQkJMHgxOQorI2RlZmluZSBBVTg1MjJfUkVHMEY5SF9BVURJTwkJCQkJMHgyMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9ITElNX1JFRzA2NEhfQ1ZCUwkJCTB4QTcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIxX1JFRzA2NUhfQ1ZCUwkJMHgwQQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SF9DVkJTCQkweDMyCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSM19SRUcwNjdIX0NWQlMJCTB4MTkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTk9UQ0hfVEhSX1JFRzA2OEhfQ1ZCUwkJMHgyMworI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SF9DVkJTCQkweDQxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMl9SRUcwNkFIX0NWQlMJCTB4MEEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIzX1JFRzA2QkhfQ1ZCUwkJMHgzMgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0hfQ1ZCUwkJMHgzNAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIyX1JFRzA2REhfQ1ZCUwkJMHgwNQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIzX1JFRzA2RUhfQ1ZCUwkJMHg2RQorI2RlZmluZSBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZIX0NWQlMJCQkweDBGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBIX0NWQlMJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1JFRzA3MUhfQ1ZCUwkJCQkJMHgxOAorI2RlZmluZSBBVTg1MjJfUkVHMDcySF9DVkJTCQkJCQkweDMwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjJfTlRTQ19SRUcwNzNIX0NWQlMJCTB4RjAKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NEhfQ1ZCUwkJCQkJMHg4MAorI2RlZmluZSBBVTg1MjJfUkVHMDc1SF9DVkJTCQkJCQkweEYwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0hfQ1ZCUwkJCTB4RkIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SF9DVkJTCQkJMHgwNAorI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0hJR0hfTElNSVRfUkVHMDc5SF9DVkJTCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TWU5DX1RIUl9SRUcwN0FIX0NWQlMJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0lOVFJQX0NUUkxfUkVHMDdCSF9DVkJTCQkJMHhFRQorI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRIX0NWQlMJCQkweEZFCisjZGVmaW5lIEFVODUyMl9UT1JFR0FBR0NfUkVHMEU1SF9DVkJTCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSTZBX1JFRzAzNUhfQ1ZCUwkJCQkweDQwCisKKy8qIEVuYWJsZXMgQ2xvc2VkIGNhcHRpb25pbmcgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SF9DQ09OCQkJMHgyMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKaW5kZXggZjZlN2IwMy4uZTRmZDUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCkBAIC01NTksNyArNTU5LDcgQEAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpbnQgcmM7CiAJaWYgKHN0YXRlID09IE5VTEwpIHsKLQkJZXJyKCJVbmFibGUgdG8ga21hbGxvY1xuIik7CisJCWVycigiVW5hYmxlIHRvIGt6YWxsb2NcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKaW5kZXggMjhhZDYwOS4uOWI5ZjU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCkBAIC0xNSw2ICsxNSw5IEBACiAJU2VwdGVtYmVyLCA5dGggMjAwOAogCSAgICBGaXhlZCBsb2NraW5nIG9uIGhpZ2ggc3ltYm9sIHJhdGVzICg+MzAwMDApLgogCSAgICBJbXBsZW1lbnQgTVBFRyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIuCisJSmFudWFyeSwgMTd0aCAyMDA5CisJICAgIEZpbGwgc2V0X3ZvbHRhZ2Ugd2l0aCBhY3R1YWxseSBjb250cm9sIHZvbHRhZ2UgY29kZS4KKwkgICAgQ29ycmVjdCBzZXQgdG9uZSB0byBub3QgYWZmZWN0IHZvbHRhZ2UuCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNDYsNyArMTQ5LDcgQEAKIAlDTURfR0VUQUdDICAgICAgPSAweDE5LAogCUNNRF9MTkJDT05GSUcgICA9IDB4MjAsCiAJQ01EX0xOQlNFTkQgICAgID0gMHgyMSwgLyogRm9ybWVybHkgQ01EX1NFTkRfRElTRVFDICovCi0JQ01EX1NFVF9UT05FUFJFID0gMHgyMiwKKwlDTURfTE5CRENMRVZFTCAgPSAweDIyLAogCUNNRF9TRVRfVE9ORSAgICA9IDB4MjMsCiAJQ01EX1VQREZXVkVSUyAgID0gMHgzNSwKIAlDTURfVFVORVJTTEVFUCAgPSAweDM2LApAQCAtNjY3LDE2ICs2NzAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQotewotCS8qIFRoZSBpc2w2NDIxIG1vZHVsZSB3aWxsIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaW4gdGhlIGZvcHMuICovCi0JZHByaW50aygiJXMoKSBUaGlzIHNob3VsZCBuZXZlciBhcHBlYXIgaWYgdGhlIGlzbDY0MjEgbW9kdWxlICIKLQkJImlzIGxvYWRlZCBjb3JyZWN0bHlcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQogc3RhdGljIGludCBjeDI0MTE2X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewogCXN0cnVjdCBjeDI0MTE2X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwpAQCAtODM3LDYgKzgzMCwzNCBAQAogCXJldHVybiAtRVRJTUVET1VUOyAvKiAtRUJVU1kgPyAqLwogfQogCitzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQoreworCXN0cnVjdCBjeDI0MTE2X2NtZCBjbWQ7CisJaW50IHJldDsKKworCWRwcmludGsoIiVzOiAlc1xuIiwgX19mdW5jX18sCisJCXZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTMgPyAiU0VDX1ZPTFRBR0VfMTMiIDoKKwkJdm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCA/ICJTRUNfVk9MVEFHRV8xOCIgOiAiPz8iKTsKKworCS8qIFdhaXQgZm9yIExOQiByZWFkeSAqLworCXJldCA9IGN4MjQxMTZfd2FpdF9mb3JfbG5iKGZlKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBXYWl0IGZvciB2b2x0YWdlL21pbiByZXBlYXQgZGVsYXkgKi8KKwltc2xlZXAoMTAwKTsKKworCWNtZC5hcmdzWzB4MDBdID0gQ01EX0xOQkRDTEVWRUw7CisJY21kLmFyZ3NbMHgwMV0gPSAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xOCA/IDB4MDEgOiAweDAwKTsKKwljbWQubGVuID0gMHgwMjsKKworCS8qIE1pbiBkZWxheSB0aW1lIGJlZm9yZSBEaVNFcUMgc2VuZCAqLworCW1zbGVlcCgxNSk7CisKKwlyZXR1cm4gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7Cit9CisKIHN0YXRpYyBpbnQgY3gyNDExNl9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAlmZV9zZWNfdG9uZV9tb2RlX3QgdG9uZSkKIHsKQEAgLTg1NywxNCArODc4LDYgQEAKIAkvKiBNaW4gZGVsYXkgdGltZSBhZnRlciBEaVNFcUMgc2VuZCAqLwogCW1zbGVlcCgxNSk7IC8qIFhYWCBkZXRlcm1pbmUgaXMgRlcgZG9lcyB0aGlzLCBzZWUgc2VuZF9kaXNlcWMvYnVyc3QgKi8KIAotCS8qIFRoaXMgaXMgYWx3YXlzIGRvbmUgYmVmb3JlIHRoZSB0b25lIGlzIHNldCAqLwotCWNtZC5hcmdzWzB4MDBdID0gQ01EX1NFVF9UT05FUFJFOwotCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKLQljbWQubGVuID0gMHgwMjsKLQlyZXQgPSBjeDI0MTE2X2NtZF9leGVjdXRlKGZlLCAmY21kKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KIAkvKiBOb3cgd2Ugc2V0IHRoZSB0b25lICovCiAJY21kLmFyZ3NbMHgwMF0gPSBDTURfU0VUX1RPTkU7CiAJY21kLmFyZ3NbMHgwMV0gPSAweDAwOwpAQCAtMTA5OSwxMyArMTExMiwxMCBAQAogCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCWdvdG8gZXJyb3IxOwogCi0JLyogc2V0dXAgdGhlIHN0YXRlICovCi0JbWVtc2V0KHN0YXRlLCAwLCBzaXplb2Yoc3RydWN0IGN4MjQxMTZfc3RhdGUpKTsKLQogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKIApAQCAtMTE1NCw3ICsxMTY0LDEyIEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGN4MjQxMTZfZGlzZXFjX2luaXQoZmUpOworCXJldCA9IGN4MjQxMTZfZGlzZXFjX2luaXQoZmUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEhWUi00MDAwIG5lZWRzIHRoaXMgKi8KKwlyZXR1cm4gY3gyNDExNl9zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfMTMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKaW5kZXggMWE4YzM2Zi4uMDU5MmYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCkBAIC0xMDY5LDEzICsxMDY5LDEzIEBACiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcgKmNvbmZpZywKIAkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPQogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDEyM19zdGF0ZSksIEdGUF9LRVJORUwpOwogCiAJZHByaW50aygiXG4iKTsKLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCWlmIChzdGF0ZSA9PSBOVUxMKSB7Ci0JCWVycigiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQllcnIoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCmluZGV4IDIxZjJjNTEuLjk2NzBmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaApAQCAtNTgsNiArNTgsNCBAQAogfQogI2VuZGlmCiAKLWV4dGVybiB2b2lkIGRpYjAwNzBfY3RybF9hZ2NfZmlsdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdWludDhfdCBvcGVuKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKaW5kZXggNDE0MmVkNy4uZDc1ZmZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaApAQCAtMzksMjAgKzM5LDQ0IEBACiAjZGVmaW5lIERFRkFVTFRfRElCMzAwME1DX0kyQ19BRERSRVNTIDE2CiAjZGVmaW5lIERFRkFVTFRfRElCMzAwMFBfSTJDX0FERFJFU1MgIDI0CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQ19NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZyk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUNfTU9EVUxFKSAmJiBcCisJCQkJICAgICAgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJICAgICB1OCBpMmNfYWRkciwKKwkJCQkJICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkgICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCQkgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKTsKK2V4dGVybgorc3RydWN0IGkyY19hZGFwdGVyICpkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsCisJCQkJCQkgICBpbnQgZ2F0aW5nKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKiBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKQorc3RhdGljIGlubGluZQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwKKwkJCQkgICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqY2ZnKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCSAgICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCSAgICAgIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwKKwkJCQkJCSAgIGludCBnYXRpbmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLy8gQ09ORklHX0RWQl9ESUIzMDAwTUMKIAotZXh0ZXJuIGludCBkaWIzMDAwbWNfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdKTsKLQotZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgaW50IGdhdGluZyk7Ci0KIGV4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9jb250cm9sKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaW5kZXgsIGludCBwaWQsaW50IG9ub2ZmKTsKIGV4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9wYXJzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaAppbmRleCA1OTdlOWNjLi4xMTM4MTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMG0uaApAQCAtMzgsOCArMzgsMzIgQEAKIAogI2RlZmluZSBERUZBVUxUX0RJQjcwMDBNX0kyQ19BRERSRVNTIDE4CiAKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliNzAwMG1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpOwotZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjcwMDBtX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsIGludCk7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBNKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBNX01PRFVMRSkgJiYgXAorCQkJCSAgICAgZGVmaW5lZChNT0RVTEUpKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCQkgICAgdTggaTJjX2FkZHIsCisJCQkJCSAgICBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpOworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLAorCQkJCQkJICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UsCisJCQkJCQkgICBpbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCSAgICAgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWI3MDAwbV9jb25maWcgKmNmZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGkyY19hZGFwdGVyICpkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwKKwkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsCisJCQkJCSAgICBpbnQgZ2F0aW5nKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCiAKIC8qIFRPRE8KIGV4dGVybiBJTlQgZGliNzAwMG1fc2V0X2dwaW8oc3RydWN0IGRpYkRlbW9kICpkZW1vZCwgVUNIQVIgbnVtLCBVQ0hBUiBkaXIsIFVDSEFSIHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCmluZGV4IGFhYjgxMTIuLjAyYTRjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5oCkBAIC0zNyw3ICszNyw4IEBACiAKICNkZWZpbmUgREVGQVVMVF9ESUI3MDAwUF9JMkNfQUREUkVTUyAxOAogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RJQjcwMDBQX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUF9NT0RVTEUpICYmIFwKKwkJCQkgICAgIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCQkJICAgIHU4IGkyY19hZGRyLAogCQkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyAqY2ZnKTsKQEAgLTQ5LDEwICs1MCwxMSBAQAogCQkJCSAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKTsKIGV4dGVybiBpbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKTsKIGV4dGVybiBpbnQgZGliNzAwMHBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1MTYgdmFsdWUpOworZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMHBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCi0JCQkJCQkgICB1OCBpMmNfYWRkciwKLQkJCQkJCSAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgKmNmZykKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwKKwkJCQkgICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgKmNmZykKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTYwLDM2ICs2MiwzOSBAQAogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjcwMDBwX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCQkgICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaSwgaW50IHgpCisJCQkJCSAgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpLAorCQkJCQkgICAgaW50IHgpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLWludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCi0JCQkJICAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKLQkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSkKK3N0YXRpYyBpbmxpbmUgaW50IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJICAgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorCQkJCQkgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnIGNmZ1tdKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW5saW5lCi1pbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcF9zZXRfZ3BpbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGlubGluZQotaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBkaWI3MDAwcGNfZGV0ZWN0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaAppbmRleCA4MjEwZjE5Li4xZmNiOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5oCkBAIC0yNSw4ICsyNSwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RVTU1ZX0ZFKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0RVTU1ZX0ZFX01PRFVMRSkgJiYgXAorZGVmaW5lZChNT0RVTEUpKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9vZmRtX2F0dGFjaCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkdmJfZHVtbXlfZmVfcXBza19hdHRhY2godm9pZCk7CiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX3FhbV9hdHRhY2godm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfZHVtbXlfZmVfb2ZkbV9hdHRhY2godm9pZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX2R1bW15X2ZlX3Fwc2tfYXR0YWNoKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9xYW1fYXR0YWNoKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0RWQl9EVU1NWV9GRSAqLwogCiAjZW5kaWYgLy8gRFZCX0RVTU1ZX0ZFX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaAppbmRleCA4Y2RjNTRlLi4wOGNhODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMF9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDBfcHJpdi5oCkBAIC0zMSw3ICszMSw3IEBACiAJLyogdWdseSB3b3JrYXJvdW5kIGZvciBmbGV4Y29wJ3MgaW5jYXBhYmxlIGkyYy1jb250cm9sbGVyCiAJICogRklYTUUsIGlmIHBvc3NpYmxlCiAJICovCi0JdTggc2hhZG93WzI1NV07CisJdTggc2hhZG93WzI1Nl07CiB9OwogCiBlbnVtIGl0ZDEwMDBfcmVnaXN0ZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwppbmRleCAzYmIwYzQzLi5lYjcyYTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDQuYwpAQCAtMzYzLDcgKzM2Myw2IEBACiAKIAlzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUgKnN0YXRlOwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnZHQzMzA0X3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHN0YXRlLCAweDAsIHNpemVvZihzdHJ1Y3QgbGdkdDMzMDRfc3RhdGUpKTsKIAlzdGF0ZS0+YWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CiAJc3RhdGUtPmkyYyA9IGkyYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTJkMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmMKQEAgLTAsMCArMSwxMDg3IEBACisvKgorICogICAgU3VwcG9ydCBmb3IgTEdEVDMzMDUgLSBWU0IvUUFNCisgKgorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX21hdGguaCIKKyNpbmNsdWRlICJsZ2R0MzMwNS5oIgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCByZWc9MiAob3ItYWJsZSkpIik7CisKKyNkZWZpbmUgREJHX0lORk8gMQorI2RlZmluZSBEQkdfUkVHICAyCisKKyNkZWZpbmUgbGdfcHJpbnRrKGtlcm4sIGZtdCwgYXJnLi4uKQkJCQkJXAorCXByaW50ayhrZXJuICIlczogIiBmbXQsIF9fZnVuY19fLCAjI2FyZykKKworI2RlZmluZSBsZ19pbmZvKGZtdCwgYXJnLi4uKQlwcmludGsoS0VSTl9JTkZPICJsZ2R0MzMwNTogIiBmbXQsICMjYXJnKQorI2RlZmluZSBsZ193YXJuKGZtdCwgYXJnLi4uKQlsZ19wcmludGsoS0VSTl9XQVJOSU5HLCAgICAgICBmbXQsICMjYXJnKQorI2RlZmluZSBsZ19lcnIoZm10LCBhcmcuLi4pCWxnX3ByaW50ayhLRVJOX0VSUiwgICAgICAgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX2RiZyhmbXQsIGFyZy4uLikgaWYgKGRlYnVnICYgREJHX0lORk8pCQkJXAorCQkJCWxnX3ByaW50ayhLRVJOX0RFQlVHLCAgICAgICAgIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxnX3JlZyhmbXQsIGFyZy4uLikgaWYgKGRlYnVnICYgREJHX1JFRykJCQlcCisJCQkJbGdfcHJpbnRrKEtFUk5fREVCVUcsICAgICAgICAgZm10LCAjI2FyZykKKworI2RlZmluZSBsZ19mYWlsKHJldCkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0OwkJCQkJCQlcCisJX19yZXQgPSAocmV0IDwgMCk7CQkJCQkJXAorCWlmIChfX3JldCkJCQkJCQkJXAorCQlsZ19lcnIoImVycm9yICVkIG9uIGxpbmUgJWRcbiIsCXJldCwgX19MSU5FX18pOwkJXAorCV9fcmV0OwkJCQkJCQkJXAorfSkKKworc3RydWN0IGxnZHQzMzA1X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCWNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNmZzsKKworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwlmZV9tb2R1bGF0aW9uX3QgY3VycmVudF9tb2R1bGF0aW9uOworCXUzMiBjdXJyZW50X2ZyZXF1ZW5jeTsKKwl1MzIgc25yOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMSAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMiAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfMyAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgTEdEVDMzMDVfR0VOX0NUUkxfNCAgICAgICAgICAgICAgICAgICAweDAwMGEKKyNkZWZpbmUgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzEgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIgICAgICAgICAgICAgICAweDAwMTMKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSAgICAgICAgICAgICAgICAweDAxMDYKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMiAgICAgICAgICAgICAgICAweDAxMDcKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMyAgICAgICAgICAgICAgICAweDAxMDgKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfNCAgICAgICAgICAgICAgICAweDAxMDkKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDAxMWIKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDAxMWMKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfTE9DS19TVEFUVVMgICAgICAgICAgICAgICAweDAxMWQKKyNkZWZpbmUgTEdEVDMzMDVfQ1JfQ1RSTF83ICAgICAgICAgICAgICAgICAgICAweDAxMjYKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yICAgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzEgICAgICAgICAgICAgICAweDAzMDIKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIgICAgICAgICAgICAgICAweDAzMDMKKyNkZWZpbmUgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEgICAgICAgICAweDAzMDYKKyNkZWZpbmUgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzIgICAgICAgICAweDAzMDcKKyNkZWZpbmUgTEdEVDMzMDVfSUZCV18xICAgICAgICAgICAgICAgICAgICAgICAweDAzMDgKKyNkZWZpbmUgTEdEVDMzMDVfSUZCV18yICAgICAgICAgICAgICAgICAgICAgICAweDAzMDkKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0NUUkxfMSAgICAgICAgICAgICAgICAgICAweDAzMGMKKyNkZWZpbmUgTEdEVDMzMDVfQUdDX0NUUkxfNCAgICAgICAgICAgICAgICAgICAweDAzMTQKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDA0MTMKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDA0MTQKKyNkZWZpbmUgTEdEVDMzMDVfRVFfTVNFXzMgICAgICAgICAgICAgICAgICAgICAweDA0MTUKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzEgICAgICAgICAgICAgICAgICAgICAweDA0MTcKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzIgICAgICAgICAgICAgICAgICAgICAweDA0MTgKKyNkZWZpbmUgTEdEVDMzMDVfUFRfTVNFXzMgICAgICAgICAgICAgICAgICAgICAweDA0MTkKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX0JMT0NLX0NUUkwgICAgICAgICAgICAgICAweDA1MDQKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAweDA1MGEKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMSAgICAgICAgICAgICAgICAweDA1MGMKKyNkZWZpbmUgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMiAgICAgICAgICAgICAgICAweDA1MGQKKyNkZWZpbmUgTEdEVDMzMDVfVFBfQ1RSTF8xICAgICAgICAgICAgICAgICAgICAweDA1MGUKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9QRVJJT0QgICAgICAgICAgICAgICAgICAweDA4MDEKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8xICAgICAgICAgICAweDA4MGEKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8yICAgICAgICAgICAweDA4MGIKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF8zICAgICAgICAgICAweDA4MGMKKyNkZWZpbmUgTEdEVDMzMDVfQkVSVF9FUlJPUl9DT1VOVF80ICAgICAgICAgICAweDA4MGQKKworc3RhdGljIGludCBsZ2R0MzMwNV93cml0ZV9yZWcoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggdmFsKQoreworCWludCByZXQ7CisJdTggYnVmW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmLCB2YWwgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCisJCS5idWYgPSBidWYsIC5sZW4gPSAzLAorCX07CisKKwlsZ19yZWcoInJlZzogMHglMDR4LCB2YWw6IDB4JTAyeFxuIiwgcmVnLCB2YWwpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfYWRhcCwgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJbGdfZXJyKCJlcnJvciAoYWRkciAlMDJ4ICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAorCQkgICAgICAgbXNnLmJ1ZlswXSwgbXNnLmJ1ZlsxXSwgbXNnLmJ1ZlsyXSwgcmV0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQllbHNlCisJCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9yZWcoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTggKnZhbCkKK3sKKwlpbnQgcmV0OworCXU4IHJlZ19idWZbXSA9IHsgcmVnID4+IDgsIHJlZyAmIDB4ZmYgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyLAorCQkgIC5mbGFncyA9IDAsIC5idWYgPSByZWdfYnVmLCAubGVuID0gMiB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNmZy0+aTJjX2FkZHIsCisJCSAgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSB2YWwsIC5sZW4gPSAxIH0sCisJfTsKKworCWxnX3JlZygicmVnOiAweCUwNHhcbiIsIHJlZyk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoc3RhdGUtPmkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCWxnX2VycigiZXJyb3IgKGFkZHIgJTAyeCByZWcgJTA0eCBlcnJvciAocmV0ID09ICVpKVxuIiwKKwkJICAgICAgIHN0YXRlLT5jZmctPmkyY19hZGRyLCByZWcsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIHJlYWRfcmVnKHN0YXRlLCByZWcpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdTggX192YWw7CQkJCQkJCVwKKwlpbnQgcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIHJlZywgJl9fdmFsKTsJCVwKKwlpZiAobGdfZmFpbChyZXQpKQkJCQkJCVwKKwkJX192YWwgPSAwOwkJCQkJCVwKKwlfX3ZhbDsJCQkJCQkJCVwKK30pCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQl1MTYgcmVnLCBpbnQgYml0LCBpbnQgb25vZmYpCit7CisJdTggdmFsOworCWludCByZXQ7CisKKwlsZ19yZWcoInJlZzogMHglMDR4LCBiaXQ6ICVkLCBsZXZlbDogJWRcbiIsIHJlZywgYml0LCBvbm9mZik7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgcmVnLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwl2YWwgJj0gfigxIDw8IGJpdCk7CisJdmFsIHw9IChvbm9mZiAmIDEpIDw8IGJpdDsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgcmVnLCB2YWwpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgbGdkdDMzMDVfcmVnIHsKKwl1MTYgcmVnOworCXU4IHZhbDsKK307CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfd3JpdGVfcmVncyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBsZ2R0MzMwNV9yZWcgKnJlZ3MsIGludCBsZW4pCit7CisJaW50IGksIHJldDsKKworCWxnX3JlZygid3JpdGluZyAlZCByZWdpc3RlcnMuLi5cbiIsIGxlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7CisJCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgcmVnc1tpXS5yZWcsIHJlZ3NbaV0udmFsKTsKKwkJaWYgKGxnX2ZhaWwocmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9zb2Z0X3Jlc2V0KHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHJldDsKKworCWxnX2RiZygiXG4iKTsKKworCXJldCA9IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCAwLCAwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwltc2xlZXAoMjApOworCXJldCA9IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCAwLCAxKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGdkdDMzMDVfbXBlZ19tb2RlKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICBlbnVtIGxnZHQzMzA1X21wZWdfbW9kZSBtb2RlKQoreworCWxnX2RiZygiKCVkKVxuIiwgbW9kZSk7CisJcmV0dXJuIGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9UUF9DVFJMXzEsIDUsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBlbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgZWRnZSwKKwkJCQkgICAgICAgZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB2YWxpZCkKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKworCWxnX2RiZygiZWRnZSA9ICVkLCB2YWxpZCA9ICVkXG4iLCBlZGdlLCB2YWxpZCk7CisKKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwl2YWwgJj0gfjB4MDk7CisKKwlpZiAoZWRnZSkKKwkJdmFsIHw9IDB4MDg7CisJaWYgKHZhbGlkKQorCQl2YWwgfD0gMHgwMTsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCB2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NvZnRfcmVzZXQoc3RhdGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9tb2R1bGF0aW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1OCBvcGVybW9kZTsKKwlpbnQgcmV0OworCisJbGdfZGJnKCJcbiIpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzEsICZvcGVybW9kZSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJb3Blcm1vZGUgJj0gfjB4MDM7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJb3Blcm1vZGUgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCW9wZXJtb2RlIHw9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzI1NjoKKwkJb3Blcm1vZGUgfD0gMHgwMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMSwgb3Blcm1vZGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9maWx0ZXJfZXh0ZW5zaW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCWludCB2YWw7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQl2YWwgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbGdfZGJnKCJ2YWwgPSAlZFxuIiwgdmFsKTsKKworCXJldHVybiBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgMHgwNDNmLCAyLCB2YWwpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9wYXNzYmFuZF9kaWdpdGFsX2FnYyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgYWdjX3JlZjsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlhZ2NfcmVmID0gMHgzMmM0OworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJYWdjX3JlZiA9IDB4MmEwMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMjU2OgorCQlhZ2NfcmVmID0gMHgyYTgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsZ19kYmcoImFnYyByZWY6IDB4JTA0eFxuIiwgYWdjX3JlZik7CisKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0RHVExfQUdDX1JFRl8xLCBhZ2NfcmVmID4+IDgpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfREdUTF9BR0NfUkVGXzIsIGFnY19yZWYgJiAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JmYWdjX2xvb3Aoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiBpZmJ3LCByZmJ3LCBhZ2NkZWxheTsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlhZ2NkZWxheSA9IDB4MDRjMDsKKwkJcmZidyAgICAgPSAweDgwMDA7CisJCWlmYncgICAgID0gMHg4MDAwOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWFnY2RlbGF5ID0gMHgwNDZiOworCQlyZmJ3ICAgICA9IDB4ODg4OTsKKwkJaWZidyAgICAgPSAweDg4ODg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdGF0ZS0+Y2ZnLT5yZl9hZ2NfbG9vcCkgeworCQlsZ19kYmcoImFnY2RlbGF5OiAweCUwNHgsIHJmYnc6IDB4JTA0eFxuIiwgYWdjZGVsYXksIHJmYncpOworCisJCS8qIHJmIGFnYyBsb29wIGZpbHRlciBiYW5kd2lkdGggKi8KKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMSwKKwkJCQkgICBhZ2NkZWxheSA+PiA4KTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMiwKKwkJCQkgICBhZ2NkZWxheSAmIDB4ZmYpOworCisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzEsCisJCQkJICAgcmZidyA+PiA4KTsKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMiwKKwkJCQkgICByZmJ3ICYgMHhmZik7CisJfSBlbHNlIHsKKwkJbGdfZGJnKCJpZmJ3OiAweCUwNHhcbiIsIGlmYncpOworCisJCS8qIGlmIGFnYyBsb29wIGZpbHRlciBiYW5kd2lkdGggKi8KKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9JRkJXXzEsIGlmYncgPj4gOCk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfSUZCV18yLCBpZmJ3ICYgMHhmZik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfYWdjX3NldHVwKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCWludCBsb2NrZHRlbiwgYWNxZW47CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJbG9ja2R0ZW4gPSAwOworCQlhY3FlbiA9IDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJbG9ja2R0ZW4gPSAxOworCQlhY3FlbiA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxnX2RiZygibG9ja2R0ZW4gPSAlZCwgYWNxZW4gPSAlZFxuIiwgbG9ja2R0ZW4sIGFjcWVuKTsKKworCS8qIGNvbnRyb2wgYWdjIGZ1bmN0aW9uICovCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfQ1RSTF80LCAweGUxIHwgbG9ja2R0ZW4gPDwgMSk7CisJbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0FHQ19DVFJMXzEsIDIsIGFjcWVuKTsKKworCXJldHVybiBsZ2R0MzMwNV9yZmFnY19sb29wKHN0YXRlLCBwYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X2FnY19wb3dlcl9yZWYoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXUxNiB1c3JlZiA9IDA7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJaWYgKHN0YXRlLT5jZmctPnVzcmVmXzh2c2IpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmXzh2c2I7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQlpZiAoc3RhdGUtPmNmZy0+dXNyZWZfcWFtNjQpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmX3FhbTY0OworCQlicmVhazsKKwljYXNlIFFBTV8yNTY6CisJCWlmIChzdGF0ZS0+Y2ZnLT51c3JlZl9xYW0yNTYpCisJCQl1c3JlZiA9IHN0YXRlLT5jZmctPnVzcmVmX3FhbTI1NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVzcmVmKSB7CisJCWxnX2RiZygic2V0IG1hbnVhbCBtb2RlOiAweCUwNHhcbiIsIHVzcmVmKTsKKworCQlsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfMSwgMywgMSk7CisKKwkJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzEsCisJCQkJICAgMHhmZiAmICh1c3JlZiA+PiA4KSk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yLAorCQkJCSAgIDB4ZmYgJiAodXNyZWYgPj4gMCkpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc3BlY3RyYWxfaW52ZXJzaW9uKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0sCisJCQkJICAgICAgIGludCBpbnZlcnNpb24pCit7CisJaW50IHJldDsKKworCWxnX2RiZygiKCVkKVxuIiwgaW52ZXJzaW9uKTsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUkxfNywKKwkJCQkJIGludmVyc2lvbiA/IDB4ZjkgOiAweDc5KTsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0ZFQ19CTE9DS19DVFJMLAorCQkJCQkgaW52ZXJzaW9uID8gMHhmZCA6IDB4ZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9pZihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgaWZfZnJlcV9raHo7CisJdTggbmNvMSwgbmNvMiwgbmNvMywgbmNvNDsKKwl1NjQgbmNvOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWlmX2ZyZXFfa2h6ID0gc3RhdGUtPmNmZy0+dnNiX2lmX2toejsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlpZl9mcmVxX2toeiA9IHN0YXRlLT5jZmctPnFhbV9pZl9raHo7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5jbyA9IGlmX2ZyZXFfa2h6IC8gMTA7CisKKyNkZWZpbmUgTEdEVDMzMDVfNjRCSVRfRElWSVNJT05fRU5BQkxFRCAwCisJLyogRklYTUU6IDY0Yml0IGRpdmlzaW9uIGRpc2FibGVkIHRvIGF2b2lkIGxpbmtpbmcgZXJyb3I6CisJICogV0FSTklORzogIl9fdWRpdmRpMyIgW2xnZHQzMzA1LmtvXSB1bmRlZmluZWQhCisJICovCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisjaWYgTEdEVDMzMDVfNjRCSVRfRElWSVNJT05fRU5BQkxFRAorCQluY28gPDw9IDI0OworCQluY28gLz0gNjI1OworI2Vsc2UKKwkJbmNvICo9ICgoMSA8PCAyNCkgLyA2MjUpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKyNpZiBMR0RUMzMwNV82NEJJVF9ESVZJU0lPTl9FTkFCTEVECisJCW5jbyA8PD0gMjg7CisJCW5jbyAvPSA2MjU7CisjZWxzZQorCQluY28gKj0gKCgxIDw8IDI4KSAvIDYyNSk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmNvMSA9IChuY28gPj4gMjQpICYgMHgzZjsKKwluY28xIHw9IDB4NDA7CisJbmNvMiA9IChuY28gPj4gMTYpICYgMHhmZjsKKwluY28zID0gKG5jbyA+PiA4KSAmIDB4ZmY7CisJbmNvNCA9IG5jbyAmIDB4ZmY7CisKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsIG5jbzEpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMiwgbmNvMik7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zLCBuY28zKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzQsIG5jbzQpOworCisJbGdfZGJnKCIlZCBLSHogLT4gWyUwMnglMDJ4JTAyeCUwMnhdXG4iLAorCSAgICAgICBpZl9mcmVxX2toeiwgbmNvMSwgbmNvMiwgbmNvMywgbmNvNCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlpZiAoc3RhdGUtPmNmZy0+ZGVueV9pMmNfcnB0cikKKwkJcmV0dXJuIDA7CisKKwlsZ19kYmcoIiglZClcbiIsIGVuYWJsZSk7CisKKwlyZXR1cm4gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzIsIDUsCisJCQkJICAgIGVuYWJsZSA/IDAgOiAxKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggZ2VuX2N0cmxfMywgZ2VuX2N0cmxfNDsKKworCWxnX2RiZygiXG4iKTsKKworCWdlbl9jdHJsXzMgPSByZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMyk7CisJZ2VuX2N0cmxfNCA9IHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF80KTsKKworCS8qIGhvbGQgaW4gc29mdHdhcmUgcmVzZXQgd2hpbGUgc2xlZXBpbmcgKi8KKwlnZW5fY3RybF8zICY9IH4weDAxOworCS8qIHRyaXN0YXRlIHRoZSBJRi1BR0MgcGluICovCisJZ2VuX2N0cmxfMyB8PSAgMHgwMjsKKwkvKiB0cmlzdGF0ZSB0aGUgUkYtQUdDIHBpbiAqLworCWdlbl9jdHJsXzMgfD0gIDB4MDQ7CisKKwkvKiBkaXNhYmxlIHZzYi9xYW0gbW9kdWxlICovCisJZ2VuX2N0cmxfNCAmPSB+MHgwMTsKKwkvKiBkaXNhYmxlIGFkYyBtb2R1bGUgKi8KKwlnZW5fY3RybF80ICY9IH4weDAyOworCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8zLCBnZW5fY3RybF8zKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzQsIGdlbl9jdHJsXzQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCXN0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfcmVnIGxnZHQzMzA1X2luaXRfZGF0YVtdID0geworCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8xLAorCQkgIC52YWwgPSAweDAzLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8yLAorCQkgIC52YWwgPSAweGIwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ1RSTF8zLAorCQkgIC52YWwgPSAweDAxLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9HRU5fQ09OVFJPTCwKKwkJICAudmFsID0gMHg2ZiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfNCwKKwkJICAudmFsID0gMHgwMywgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfREdUTF9BR0NfUkVGXzEsCisJCSAgLnZhbCA9IDB4MzIsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0RHVExfQUdDX1JFRl8yLAorCQkgIC52YWwgPSAweGM0LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8yLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV8zLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJfRlJFUV80LAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9DUl9DVFJMXzcsCisJCSAgLnZhbCA9IDB4NzksIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMSwKKwkJICAudmFsID0gMHgzMiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8yLAorCQkgIC52YWwgPSAweGM0LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfREVMQVlfUFRfMSwKKwkJICAudmFsID0gMHgwZCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIsCisJCSAgLnZhbCA9IDB4MzAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18xLAorCQkgIC52YWwgPSAweDgwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMiwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfSUZCV18xLAorCQkgIC52YWwgPSAweDgwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9JRkJXXzIsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19DVFJMXzEsCisJCSAgLnZhbCA9IDB4MzAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19DVFJMXzQsCisJCSAgLnZhbCA9IDB4NjEsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0ZFQ19CTE9DS19DVFJMLAorCQkgIC52YWwgPSAweGZmLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9UUF9DVFJMXzEsCisJCSAgLnZhbCA9IDB4MWIsIH0sCisJfTsKKworCWxnX2RiZygiXG4iKTsKKworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZ3Moc3RhdGUsIGxnZHQzMzA1X2luaXRfZGF0YSwKKwkJCQkgIEFSUkFZX1NJWkUobGdkdDMzMDVfaW5pdF9kYXRhKSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfc29mdF9yZXNldChzdGF0ZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2V0X3BhcmFtZXRlcnMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJaW50IHJldDsKKworCWxnX2RiZygiKCVkLCAlZClcbiIsIHBhcmFtLT5mcmVxdWVuY3ksIHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CisJCXJldCA9IGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIHBhcmFtKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisJCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IHBhcmFtLT5mcmVxdWVuY3k7CisJfQorCisJcmV0ID0gbGdkdDMzMDVfc2V0X21vZHVsYXRpb24oc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9wYXNzYmFuZF9kaWdpdGFsX2FnYyhzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfYWdjX3Bvd2VyX3JlZihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9hZ2Nfc2V0dXAoc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBsb3cgaWYgKi8KKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DT05UUk9MLCAweDJmKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzEsIDYsIDEpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NldF9pZihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV9zcGVjdHJhbF9pbnZlcnNpb24oc3RhdGUsIHBhcmFtLAorCQkJCQkgIHN0YXRlLT5jZmctPnNwZWN0cmFsX2ludmVyc2lvbgorCQkJCQkgID8gMSA6IDApOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NldF9maWx0ZXJfZXh0ZW5zaW9uKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uOworCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlKHN0YXRlLCBzdGF0ZS0+Y2ZnLT5tcGVnX21vZGUpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCS8qIGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eSBjYWxscyBsZ2R0MzMwNV9zb2Z0X3Jlc2V0ICovCisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0YXRlLAorCQkJCQkgIHN0YXRlLT5jZmctPnRwY2xrX2VkZ2UsCisJCQkJCSAgc3RhdGUtPmNmZy0+dHB2YWxpZF9wb2xhcml0eSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWxnX2RiZygiXG4iKTsKKworCXBhcmFtLT51LnZzYi5tb2R1bGF0aW9uID0gc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbjsKKwlwYXJhbS0+ZnJlcXVlbmN5ID0gc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5OworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX2NyX2xvY2tfc3RhdHVzKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCWludCAqbG9ja2VkKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCWNoYXIgKmNyX2xvY2tfc3RhdGUgPSAiIjsKKworCSpsb2NrZWQgPSAwOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0xPQ0tfU1RBVFVTLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8yNTY6CisJY2FzZSBRQU1fNjQ6CisJCWlmICh2YWwgJiAoMSA8PCAxKSkKKwkJCSpsb2NrZWQgPSAxOworCisJCXN3aXRjaCAodmFsICYgMHgwNykgeworCQljYXNlIDA6CisJCQljcl9sb2NrX3N0YXRlID0gIlFBTSBVTkxPQ0siOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIDFzdExvY2siOworCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIDJuZExvY2siOworCQkJYnJlYWs7CisJCWNhc2UgNzoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiUUFNIEZpbmFsTG9jayI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNyX2xvY2tfc3RhdGUgPSAiQ0xPQ0tRQU0tSU5WQUxJRCEiOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwkJaWYgKHZhbCAmICgxIDw8IDcpKSB7CisJCQkqbG9ja2VkID0gMTsKKwkJCWNyX2xvY2tfc3RhdGUgPSAiQ0xPQ0tWU0IiOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWxnX2RiZygiKCVkKSAlc1xuIiwgKmxvY2tlZCwgY3JfbG9ja19zdGF0ZSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9mZWNfbG9ja19zdGF0dXMoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkJIGludCAqbG9ja2VkKQoreworCXU4IHZhbDsKKwlpbnQgcmV0LCBtcGVnX2xvY2ssIGZlY19sb2NrLCB2aXRlcmJpX2xvY2s7CisKKwkqbG9ja2VkID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsCisJCQkJCUxHRFQzMzA1X0ZFQ19MT0NLX1NUQVRVUywgJnZhbCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJbXBlZ19sb2NrICAgID0gKHZhbCAmICgxIDw8IDApKSA/IDEgOiAwOworCQlmZWNfbG9jayAgICAgPSAodmFsICYgKDEgPDwgMikpID8gMSA6IDA7CisJCXZpdGVyYmlfbG9jayA9ICh2YWwgJiAoMSA8PCAzKSkgPyAxIDogMDsKKworCQkqbG9ja2VkID0gbXBlZ19sb2NrICYmIGZlY19sb2NrICYmIHZpdGVyYmlfbG9jazsKKworCQlsZ19kYmcoIiglZCkgJXMlcyVzXG4iLCAqbG9ja2VkLAorCQkgICAgICAgbXBlZ19sb2NrICAgID8gIm1wZWcgbG9jayAgIiAgOiAiIiwKKwkJICAgICAgIGZlY19sb2NrICAgICA/ICJmZWMgbG9jayAgIiAgIDogIiIsCisJCSAgICAgICB2aXRlcmJpX2xvY2sgPyAidml0ZXJiaSBsb2NrIiA6ICIiKTsKKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdmFsOworCWludCByZXQsIHNpZ25hbCwgaW5sb2NrLCBub2ZlY2Vyciwgc25yZ29vZCwKKwkJY3JfbG9jaywgZmVjX2xvY2ssIHN5bmNfbG9jazsKKworCSpzdGF0dXMgPSAwOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9TVEFUVVMsICZ2YWwpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXNpZ25hbCAgICA9ICh2YWwgJiAoMSA8PCA0KSkgPyAxIDogMDsKKwlpbmxvY2sgICAgPSAodmFsICYgKDEgPDwgMykpID8gMCA6IDE7CisJc3luY19sb2NrID0gKHZhbCAmICgxIDw8IDIpKSA/IDEgOiAwOworCW5vZmVjZXJyICA9ICh2YWwgJiAoMSA8PCAxKSkgPyAxIDogMDsKKwlzbnJnb29kICAgPSAodmFsICYgKDEgPDwgMCkpID8gMSA6IDA7CisKKwlsZ19kYmcoIiVzJXMlcyVzJXNcbiIsCisJICAgICAgIHNpZ25hbCAgICA/ICJTSUdOQUxFWElTVCAiIDogIiIsCisJICAgICAgIGlubG9jayAgICA/ICJJTkxPQ0sgIiAgICAgIDogIiIsCisJICAgICAgIHN5bmNfbG9jayA/ICJTWU5DTE9DSyAiICAgIDogIiIsCisJICAgICAgIG5vZmVjZXJyICA/ICJOT0ZFQ0VSUiAiICAgIDogIiIsCisJICAgICAgIHNucmdvb2QgICA/ICJTTlJHT09EICIgICAgIDogIiIpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9jcl9sb2NrX3N0YXR1cyhzdGF0ZSwgJmNyX2xvY2spOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCWlmIChzaWduYWwpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAoY3JfbG9jaykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAobm9mZWNlcnIpCisJCSpzdGF0dXMgfD0gRkVfSEFTX1ZJVEVSQkk7CisJaWYgKHN5bmNfbG9jaykKKwkJKnN0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgUUFNXzI1NjoKKwljYXNlIFFBTV82NDoKKwkJcmV0ID0gbGdkdDMzMDVfcmVhZF9mZWNfbG9ja19zdGF0dXMoc3RhdGUsICZmZWNfbG9jayk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJaWYgKGZlY19sb2NrKQorCQkJKnN0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBWU0JfODoKKwkJaWYgKGlubG9jaykKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYm9ycm93ZWQgZnJvbSBsZ2R0MzMweC5jICovCitzdGF0aWMgdTMyIGNhbGN1bGF0ZV9zbnIodTMyIG1zZSwgdTMyIGMpCit7CisJaWYgKG1zZSA9PSAwKSAvKiBubyBzaWduYWwgKi8KKwkJcmV0dXJuIDA7CisKKwltc2UgPSBpbnRsb2cxMChtc2UpOworCWlmIChtc2UgPiBjKSB7CisJCS8qIE5lZ2F0aXZlIFNOUiwgd2hpY2ggaXMgcG9zc2libGUsIGJ1dCByZWFsaXN0aWNseSB0aGUKKwkJZGVtb2Qgd2lsbCBsb3NlIGxvY2sgYmVmb3JlIHRoZSBzaWduYWwgZ2V0cyB0aGlzIGJhZC4gIFRoZQorCQlBUEkgb25seSBhbGxvd3MgZm9yIHVuc2lnbmVkIHZhbHVlcywgc28ganVzdCByZXR1cm4gMCAqLworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDEwKihjIC0gbXNlKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUzMiBub2lzZTsJLyogbm9pc2UgdmFsdWUgKi8KKwl1MzIgYzsJCS8qIHBlci1tb2R1bGF0aW9uIFNOUiBjYWxjdWxhdGlvbiBjb25zdGFudCAqLworCisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKyNpZmRlZiBVU0VfUFRNU0UKKwkJLyogVXNlIFBoYXNlIFRyYWNrZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgKi8KKwkJLyogU05SIGZvciByYW5nZXMgZnJvbSAtMTMuMTEgdG8gKzQ0LjA4ICovCisJCW5vaXNlID0JKChyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzEpICYgMHgwNykgPDwgMTYpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzIpIDw8IDgpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUFRfTVNFXzMpICYgMHhmZik7CisJCWMgPSA3Mzk1Nzk5NDsgLyogbG9nMTAoMjUqMzJeMikqMl4yNCAqLworI2Vsc2UKKwkJLyogVXNlIEVxdWFsaXplciBNZWFuLVNxdWFyZSBFcnJvciBSZWdpc3RlciAqLworCQkvKiBTTlIgZm9yIHJhbmdlcyBmcm9tIC0xNi4xMiB0byArNDQuMDggKi8KKwkJbm9pc2UgPQkoKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMSkgJiAweDBmKSA8PCAxNikgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMikgPDwgOCkgfAorCQkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9FUV9NU0VfMykgJiAweGZmKTsKKwkJYyA9IDczOTU3OTk0OyAvKiBsb2cxMCgyNSozMl4yKSoyXjI0ICovCisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlub2lzZSA9IChyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfTVNFXzEpIDw8IDgpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfTVNFXzIpICYgMHhmZik7CisKKwkJYyA9IChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID09IFFBTV82NCkgPworCQkJOTc5Mzk4MzcgOiA5ODAyNjA2NjsKKwkJLyogbG9nMTAoNjg4MTI4KSoyXjI0IGFuZCBsb2cxMCg2OTYzMjApKjJeMjQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXN0YXRlLT5zbnIgPSBjYWxjdWxhdGVfc25yKG5vaXNlLCBjKTsKKwkvKiByZXBvcnQgU05SIGluIGRCICogMTAgKi8KKwkqc25yID0gKHN0YXRlLT5zbnIgLyAoKDEgPDwgMjQpIC8gMTApKTsKKwlsZ19kYmcoIm5vaXNlID0gMHglMDh4LCBzbnIgPSAlZC4lMDJkIGRCXG4iLCBub2lzZSwKKwkgICAgICAgc3RhdGUtPnNuciA+PiAyNCwgKCgoc3RhdGUtPnNuciA+PiA4KSAmIDB4ZmZmZikgKiAxMDApID4+IDE2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkgdTE2ICpzdHJlbmd0aCkKK3sKKwkvKiBib3Jyb3dlZCBmcm9tIGxnZHQzMzB4LmMKKwkgKgorCSAqIENhbGN1bGF0ZSBzdHJlbmd0aCBmcm9tIFNOUiB1cCB0byAzNWRCCisJICogRXZlbiB0aG91Z2ggdGhlIFNOUiBjYW4gZ28gaGlnaGVyIHRoYW4gMzVkQiwKKwkgKiB0aGVyZSBpcyBzb21lIGNvbWZvcnQgZmFjdG9yIGluIGhhdmluZyBhIHJhbmdlIG9mCisJICogc3Ryb25nIHNpZ25hbHMgdGhhdCBjYW4gc2hvdyBhdCAxMDAlCisJICovCisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBzbnI7CisJaW50IHJldDsKKworCSpzdHJlbmd0aCA9IDA7CisKKwlyZXQgPSBmZS0+b3BzLnJlYWRfc25yKGZlLCAmc25yKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJLyogUmF0aGVyIHRoYW4gdXNlIHRoZSA4LjggdmFsdWUgc25yLCB1c2Ugc3RhdGUtPnNuciB3aGljaCBpcyA4LjI0ICovCisJLyogc2NhbGUgdGhlIHJhbmdlIDAgLSAzNSoyXjI0IGludG8gMCAtIDY1NTM1ICovCisJaWYgKHN0YXRlLT5zbnIgPj0gODk2MCAqIDB4MTAwMDApCisJCSpzdHJlbmd0aCA9IDB4ZmZmZjsKKwllbHNlCisJCSpzdHJlbmd0aCA9IHN0YXRlLT5zbnIgLyA4OTYwOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJKmJlciA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF91Y2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICp1Y2Jsb2NrcykKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwkqdWNibG9ja3MgPQorCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0ZFQ19QS1RfRVJSXzEpIDw8IDgpIHwKKwkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9GRUNfUEtUX0VSUl8yKSAmIDB4ZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF90dW5lX3NldHRpbmdzCisJCQkJCSpmZV90dW5lX3NldHRpbmdzKQoreworCWZlX3R1bmVfc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDUwMDsKKwlsZ19kYmcoIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxnZHQzMzA1X3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWxnX2RiZygiXG4iKTsKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBsZ2R0MzMwNV9vcHM7CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxnZHQzMzA1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCByZXQ7CisJdTggdmFsOworCisJbGdfZGJnKCIoJWQtJTA0eClcbiIsCisJICAgICAgIGkyY19hZGFwID8gaTJjX2FkYXB0ZXJfaWQoaTJjX2FkYXApIDogMCwKKwkgICAgICAgY29uZmlnID8gY29uZmlnLT5pMmNfYWRkciA6IDApOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmNmZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjX2FkYXAgPSBpMmNfYWRhcDsKKworCW1lbWNweSgmc3RhdGUtPmZyb250ZW5kLm9wcywgJmxnZHQzMzA1X29wcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJc3RhdGUtPmZyb250ZW5kLmRlbW9kdWxhdG9yX3ByaXYgPSBzdGF0ZTsKKworCS8qIHZlcmlmeSB0aGF0IHdlJ3JlIHRhbGtpbmcgdG8gYSBsZyBkdDMzMDUgKi8KKwlyZXQgPSBsZ2R0MzMwNV9yZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMiwgJnZhbCk7CisJaWYgKChsZ19mYWlsKHJldCkpIHwgKHZhbCA9PSAwKSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgMHgwODA4LCAweDgwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIDB4MDgwOCwgJnZhbCk7CisJaWYgKChsZ19mYWlsKHJldCkpIHwgKHZhbCAhPSAweDgwKSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgMHgwODA4LCAweDAwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgPSAtMTsKKwlzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uID0gLTE7CisKKwlyZXR1cm4gJnN0YXRlLT5mcm9udGVuZDsKK2ZhaWw6CisJbGdfd2FybigidW5hYmxlIHRvIGRldGVjdCBMR0RUMzMwNSBoYXJkd2FyZVxuIik7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChsZ2R0MzMwNV9hdHRhY2gpOworCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDVfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwNSBWU0IvUUFNIEZyb250ZW5kIiwKKwkJLnR5cGUgICAgICAgICAgICAgICA9IEZFX0FUU0MsCisJCS5mcmVxdWVuY3lfbWluICAgICAgPSA1NDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggICAgICA9IDg1ODAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwc2l6ZSA9IDYyNTAwLAorCQkuY2FwcyA9IEZFX0NBTl9RQU1fNjQgfCBGRV9DQU5fUUFNXzI1NiB8IEZFX0NBTl84VlNCCisJfSwKKwkuaTJjX2dhdGVfY3RybCAgICAgICAgPSBsZ2R0MzMwNV9pMmNfZ2F0ZV9jdHJsLAorCS5pbml0ICAgICAgICAgICAgICAgICA9IGxnZHQzMzA1X2luaXQsCisJLnNsZWVwICAgICAgICAgICAgICAgID0gbGdkdDMzMDVfc2xlZXAsCisJLnNldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDVfc2V0X3BhcmFtZXRlcnMsCisJLmdldF9mcm9udGVuZCAgICAgICAgID0gbGdkdDMzMDVfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyAgICA9IGxnZHQzMzA1X2dldF90dW5lX3NldHRpbmdzLAorCS5yZWFkX3N0YXR1cyAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlciAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGxnZHQzMzA1X3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NuciAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlYWRfc25yLAorCS5yZWFkX3VjYmxvY2tzICAgICAgICA9IGxnZHQzMzA1X3JlYWRfdWNibG9ja3MsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gbGdkdDMzMDVfcmVsZWFzZSwKK307CisKK01PRFVMRV9ERVNDUklQVElPTigiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDUgQVRTQy9RQU0tQiBEZW1vZHVsYXRvciBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oIjAuMSIpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE2ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICAgIFN1cHBvcnQgZm9yIExHRFQzMzA1IC0gVlNCL1FBTQorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfTEdEVDMzMDVfSF8KKyNkZWZpbmUgX0xHRFQzMzA1X0hfCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworCitlbnVtIGxnZHQzMzA1X21wZWdfbW9kZSB7CisJTEdEVDMzMDVfTVBFR19QQVJBTExFTCA9IDAsCisJTEdEVDMzMDVfTVBFR19TRVJJQUwgPSAxLAorfTsKKworZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIHsKKwlMR0RUMzMwNV9UUENMS19SSVNJTkdfRURHRSA9IDAsCisJTEdEVDMzMDVfVFBDTEtfRkFMTElOR19FREdFID0gMSwKK307CisKK2VudW0gbGdkdDMzMDVfdHBfdmFsaWRfcG9sYXJpdHkgeworCUxHRFQzMzA1X1RQX1ZBTElEX0xPVyA9IDAsCisJTEdEVDMzMDVfVFBfVkFMSURfSElHSCA9IDEsCit9OworCitzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIHsKKwl1OCBpMmNfYWRkcjsKKworCS8qIHVzZXIgZGVmaW5lZCBJRiBmcmVxdWVuY3kgaW4gS0h6ICovCisJdTE2IHFhbV9pZl9raHo7CisJdTE2IHZzYl9pZl9raHo7CisKKwkvKiBBR0MgUG93ZXIgcmVmZXJlbmNlIC0gZGVmYXVsdHMgYXJlIHVzZWQgaWYgbGVmdCB1bnNldCAqLworCXUxNiB1c3JlZl84dnNiOyAgIC8qIGRlZmF1bHQ6IDB4MzJjNCAqLworCXUxNiB1c3JlZl9xYW02NDsgIC8qIGRlZmF1bHQ6IDB4NTQwMCAqLworCXUxNiB1c3JlZl9xYW0yNTY7IC8qIGRlZmF1bHQ6IDB4MmE4MCAqLworCisJLyogZGlzYWJsZSBpMmMgcmVwZWF0ZXIgLSAwOnJlcGVhdGVyIGVuYWJsZWQgMTpyZXBlYXRlciBkaXNhYmxlZCAqLworCWludCBkZW55X2kyY19ycHRyOjE7CisKKwkvKiBzcGVjdHJhbCBpbnZlcnNpb24gLSAwOmRpc2FibGVkIDE6ZW5hYmxlZCAqLworCWludCBzcGVjdHJhbF9pbnZlcnNpb246MTsKKworCS8qIHVzZSBSRiBBR0MgbG9vcCAtIDA6ZGlzYWJsZWQgMTplbmFibGVkICovCisJaW50IHJmX2FnY19sb29wOjE7CisKKwllbnVtIGxnZHQzMzA1X21wZWdfbW9kZSBtcGVnX21vZGU7CisJZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIHRwY2xrX2VkZ2U7CisJZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB0cHZhbGlkX3BvbGFyaXR5OworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwNV9NT0RVTEUpICYmIFwKKwkJCQkgICAgIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybgorc3RydWN0IGR2Yl9mcm9udGVuZCAqbGdkdDMzMDVfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxnZHQzMzA1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfTEdEVDMzMDUgKi8KKworI2VuZGlmIC8qIF9MR0RUMzMwNV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYmgyNC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYmgyNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNTliMTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5iaDI0LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIGxuYmgyNC5oIC0gZHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYmgyNAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTE5CSDI0X0gKKyNkZWZpbmUgX0xOQkgyNF9ICisKKy8qIHN5c3RlbSByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIExOQkgyNF9PTEYJMHgwMQorI2RlZmluZSBMTkJIMjRfT1RGCTB4MDIKKyNkZWZpbmUgTE5CSDI0X0VOCTB4MDQKKyNkZWZpbmUgTE5CSDI0X1ZTRUwJMHgwOAorI2RlZmluZSBMTkJIMjRfTExDCTB4MTAKKyNkZWZpbmUgTE5CSDI0X1RFTgkweDIwCisjZGVmaW5lIExOQkgyNF9UVFgJMHg0MAorI2RlZmluZSBMTkJIMjRfUENMCTB4ODAKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjFfTU9EVUxFKSBcCisJCQkJCQkJJiYgZGVmaW5lZChNT0RVTEUpKQorLyogb3ZlcnJpZGVfc2V0IGFuZCBvdmVycmlkZV9jbGVhciBjb250cm9sIHdoaWNoCisgICBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYmgyNF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5iaDI0X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyLCB1OCBpMmNfYWRkcikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwppbmRleCA3NmY5MzVkLi4xZGNjNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIGxuYnAyMS5oIC0gZHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYnAyMQorICogbG5icDIxLmMgLSBkcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE9saXZlciBFbmRyaXNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzMsMTggKzM0LDIxIEBACiAKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJsbmJwMjEuaCIKKyNpbmNsdWRlICJsbmJoMjQuaCIKIAogc3RydWN0IGxuYnAyMSB7CiAJdTgJCQljb25maWc7CiAJdTgJCQlvdmVycmlkZV9vcjsKIAl1OAkJCW92ZXJyaWRlX2FuZDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyYzsKKwl1OAkJCWkyY19hZGRyOwogfTsKIAotc3RhdGljIGludCBsbmJwMjFfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQgbG5icDIxX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPnNlY19wcml2OwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAorCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSBsbmJwMjEtPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAogCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKIApAQCAtNzIsNyArNzYsNyBAQAogc3RhdGljIGludCBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGxvbmcgYXJnKQogewogCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5zZWNfcHJpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gbG5icDIxLT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCQkuYnVmID0gJmxuYnAyMS0+Y29uZmlnLAogCQkJCS5sZW4gPSBzaXplb2YobG5icDIxLT5jb25maWcpIH07CiAKQEAgLTk3LDE1ICsxMDEsMTggQEAKIAlmZS0+c2VjX3ByaXYgPSBOVUxMOwogfQogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJ4MnhfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIsIHU4IGkyY19hZGRyLCB1OCBjb25maWcpCiB7CiAJc3RydWN0IGxuYnAyMSAqbG5icDIxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxuYnAyMSksIEdGUF9LRVJORUwpOwogCWlmICghbG5icDIxKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCWxuYnAyMS0+Y29uZmlnID0gTE5CUDIxX0lTRUw7CisJbG5icDIxLT5jb25maWcgPSBjb25maWc7CiAJbG5icDIxLT5pMmMgPSBpMmM7CisJbG5icDIxLT5pMmNfYWRkciA9IGkyY19hZGRyOwogCWZlLT5zZWNfcHJpdiA9IGxuYnAyMTsKIAogCS8qIGJpdHMgd2hpY2ggc2hvdWxkIGJlIGZvcmNlZCB0byAnMScgKi8KQEAgLTEyNiwxMSArMTMzLDI5IEBACiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGxuYnAyMV9zZXRfdm9sdGFnZTsKIAlmZS0+b3BzLmVuYWJsZV9oaWdoX2xuYl92b2x0YWdlID0gbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlOworCXByaW50ayhLRVJOX0lORk8gIkxOQngyeCBhdHRhY2hlZCBvbiBhZGRyPSV4IiwgbG5icDIxLT5pMmNfYWRkcik7CiAKIAlyZXR1cm4gZmU7CiB9CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYmgyNF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIpCit7CisJcmV0dXJuIGxuYngyeF9hdHRhY2goZmUsIGkyYywgb3ZlcnJpZGVfc2V0LCBvdmVycmlkZV9jbGVhciwKKwkJCQkJCQlpMmNfYWRkciwgTE5CSDI0X1RUWCk7Cit9CitFWFBPUlRfU1lNQk9MKGxuYmgyNF9hdHRhY2gpOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIpCit7CisJcmV0dXJuIGxuYngyeF9hdHRhY2goZmUsIGkyYywgb3ZlcnJpZGVfc2V0LCBvdmVycmlkZV9jbGVhciwKKwkJCQkJCQkweDA4LCBMTkJQMjFfSVNFTCk7Cit9CiBFWFBPUlRfU1lNQk9MKGxuYnAyMV9hdHRhY2gpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEiKTsKLU1PRFVMRV9BVVRIT1IoIk9saXZlciBFbmRyaXNzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEsIGxuYmgyNCIpOworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEVuZHJpc3MsIElnb3IgTS4gTGlwbGlhbmluIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKaW5kZXggOGZlMDk0Yi4uZmNkZjFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaApAQCAtMjgsMjYgKzI4LDQ4IEBACiAjZGVmaW5lIF9MTkJQMjFfSAogCiAvKiBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAqLworLyogW1JPXSAwPU9LOyAxPW92ZXIgY3VycmVudCBsaW1pdCBmbGFnICovCiAjZGVmaW5lIExOQlAyMV9PTEYJMHgwMQorLyogW1JPXSAwPU9LOyAxPW92ZXIgdGVtcGVyYXR1cmUgZmxhZyAoMTUwIEMpICovCiAjZGVmaW5lIExOQlAyMV9PVEYJMHgwMgorLyogW1JXXSAwPWRpc2FibGUgTE5CIHBvd2VyLCBlbmFibGUgbG9vcHRocm91Z2gKKwkxPWVuYWJsZSBMTkIgcG93ZXIsIGRpc2FibGUgbG9vcHRocm91Z2ggKi8KICNkZWZpbmUgTE5CUDIxX0VOCTB4MDQKKy8qIFtSV10gMD1sb3cgdm9sdGFnZSAoMTMvMTRWLCB2ZXJ0IHBvbCkKKwkxPWhpZ2ggdm9sdGFnZSAoMTgvMTlWLGhvcml6IHBvbCkgKi8KICNkZWZpbmUgTE5CUDIxX1ZTRUwJMHgwOAorLyogW1JXXSBpbmNyZWFzZSBMTkIgdm9sdGFnZSBieSAxVjoKKwkwPTEzLzE4VjsgMT0xNC8xOVYgKi8KICNkZWZpbmUgTE5CUDIxX0xMQwkweDEwCisvKiBbUlddIDA9dG9uZSBjb250cm9sbGVkIGJ5IERTUUlOIHBpbgorCTE9dG9uZSBlbmFibGUsIGRpc2FibGUgRFNRSU4gKi8KICNkZWZpbmUgTE5CUDIxX1RFTgkweDIwCisvKiBbUlddIGN1cnJlbnQgbGltaXQgc2VsZWN0OgorCTA6SW91dD01MDAtNjUwbUEgSXNjPTMwMG1BCisJMTpJb3V0PTQwMC01NTBtQSBJc2M9MjAwbUEgKi8KICNkZWZpbmUgTE5CUDIxX0lTRUwJMHg0MAorLyogW1JXXSBzaG9ydC1jaXJjdWl0IHByb3RlY3Q6CisJMD1wdWxzZWQgKGR5bmFtaWMpIGN1cnIgbGltaXRpbmcKKwkxPXN0YXRpYyBjdXJyIGxpbWl0aW5nICovCiAjZGVmaW5lIExOQlAyMV9QQ0wJMHg4MAogCiAjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKLS8qIG92ZXJyaWRlX3NldCBhbmQgb3ZlcnJpZGVfY2xlYXIgY29udHJvbCB3aGljaCBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLwotZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKTsKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCisvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2gKKyBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhcik7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmIC8vIENPTkZJR19EVkJfTE5CUDIxCisjZW5kaWYKIAotI2VuZGlmIC8vIF9MTkJQMjFfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCmluZGV4IDg5MmFmOGMuLjNmNWEwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zOTIxX21vZHVsZS5jCkBAIC0xNjksNyArMTY5LDYgQEAKIAogCXN0cnVjdCBzOTIxX3N0YXRlICpzdGF0ZTsKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzOTIxX3N0YXRlKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KHN0YXRlLCAweDAsIHNpemVvZihzdHJ1Y3QgczkyMV9zdGF0ZSkpOwogCiAJc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXN0YXRlLT5pMmMgPSBpMmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCmluZGV4IGQzMTMzNDAuLjYzMTRkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdGI2MTAwX2NmZy5oCkBAIC0zNiw3ICszNiw2IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCSpmcmVxdWVuY3kgPSB0X3N0YXRlLmZyZXF1ZW5jeTsKLQkJcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5mcmVxdWVuY3kpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU5LDcgKzU4LDYgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCkBAIC04MSw3ICs3OSw2IEBACiAJCX0KIAkJKmJhbmR3aWR0aCA9IHRfc3RhdGUuYmFuZHdpZHRoOwogCX0KLQlwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmJhbmR3aWR0aCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMyw2ICsxMDAsNSBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQlwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCB0X3N0YXRlLmJhbmR3aWR0aCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTEzMzJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogc3R2MDkwMC5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9ICisjZGVmaW5lIFNUVjA5MDBfSAorCisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKK3N0cnVjdCBzdHYwOTAwX2NvbmZpZyB7CisJdTggZGVtb2RfYWRkcmVzczsKKwl1MzIgeHRhbDsKKwl1OCBjbGttb2RlOy8qIDAgZm9yIENMS0ksICAyIGZvciBYVEFMSSAqLworCisJdTggZGlzZXFjX21vZGU7CisKKwl1OCBwYXRoMV9tb2RlOworCXU4IHBhdGgyX21vZGU7CisKKwl1OCB0dW4xX21hZGRyZXNzOy8qIDAsIDEsIDIsIDMgZm9yIDB4YzAsIDB4YzIsIDB4YzQsIDB4YzYgKi8KKwl1OCB0dW4yX21hZGRyZXNzOworCXU4IHR1bjFfYWRjOy8qIDEgZm9yIHN0djYxMTAsIDIgZm9yIHN0YjYxMDAgKi8KKwl1OCB0dW4yX2FkYzsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWMDkwMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFYwOTAwX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwOTAwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBkZW1vZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwOTAwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIGludCBkZW1vZCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTliY2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9jb3JlLmMKQEAgLTAsMCArMSwxOTQ5IEBACisvKgorICogc3R2MDkwMF9jb3JlLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgInN0djA5MDAuaCIKKyNpbmNsdWRlICJzdHYwOTAwX3JlZy5oIgorI2luY2x1ZGUgInN0djA5MDBfcHJpdi5oIgorI2luY2x1ZGUgInN0djA5MDBfaW5pdC5oIgorCitzdGF0aWMgaW50IHN0dmRlYnVnID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc3R2ZGVidWcsIGludCwgMDY0NCk7CisKKy8qIGludGVybmFsIHBhcmFtcyBub2RlICovCitzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBzdHYwOTAwX2lub2RlCQkqbmV4dF9pbm9kZTsKK307CisKKy8qIGZpcnN0IGludGVybmFsIHBhcmFtcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2lub2RlICpzdHYwOTAwX2ZpcnN0X2lub2RlOworCisvKiBmaW5kIGNoaXAgYnkgaTJjIGFkYXB0ZXIgYW5kIGkyYyBhZGRyZXNzICovCitzdGF0aWMgc3RydWN0IHN0djA5MDBfaW5vZGUgKmZpbmRfaW5vZGUoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJCQl1OCBpMmNfYWRkcikKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqdGVtcF9jaGlwID0gc3R2MDkwMF9maXJzdF9pbm9kZTsKKworCWlmICh0ZW1wX2NoaXAgIT0gTlVMTCkgeworCQkvKgorCQkgU2VhcmNoIG9mIHRoZSBsYXN0IHN0djA5MDAgY2hpcCBvcgorCQkgZmluZCBpdCBieSBpMmMgYWRhcHRlciBhbmQgaTJjIGFkZHJlc3MgKi8KKwkJd2hpbGUgKCh0ZW1wX2NoaXAgIT0gTlVMTCkgJiYKKwkJCSgodGVtcF9jaGlwLT5pbnRlcm5hbC0+aTJjX2FkYXAgIT0gaTJjX2FkYXApIHx8CisJCQkodGVtcF9jaGlwLT5pbnRlcm5hbC0+aTJjX2FkZHIgIT0gaTJjX2FkZHIpKSkKKworCQkJdGVtcF9jaGlwID0gdGVtcF9jaGlwLT5uZXh0X2lub2RlOworCisJfQorCisJcmV0dXJuIHRlbXBfY2hpcDsKK30KKworLyogZGVhbGxvY2F0aW5nIGNoaXAgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9pbm9kZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKnByZXZfbm9kZSA9IHN0djA5MDBfZmlyc3RfaW5vZGU7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKmRlbF9ub2RlID0gZmluZF9pbm9kZShpbnRlcm5hbC0+aTJjX2FkYXAsCisJCQkJCQlpbnRlcm5hbC0+aTJjX2FkZHIpOworCisJaWYgKGRlbF9ub2RlICE9IE5VTEwpIHsKKwkJaWYgKGRlbF9ub2RlID09IHN0djA5MDBfZmlyc3RfaW5vZGUpIHsKKwkJCXN0djA5MDBfZmlyc3RfaW5vZGUgPSBkZWxfbm9kZS0+bmV4dF9pbm9kZTsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChwcmV2X25vZGUtPm5leHRfaW5vZGUgIT0gZGVsX25vZGUpCisJCQkJcHJldl9ub2RlID0gcHJldl9ub2RlLT5uZXh0X2lub2RlOworCisJCQlpZiAoZGVsX25vZGUtPm5leHRfaW5vZGUgPT0gTlVMTCkKKwkJCQlwcmV2X25vZGUtPm5leHRfaW5vZGUgPSBOVUxMOworCQkJZWxzZQorCQkJCXByZXZfbm9kZS0+bmV4dF9pbm9kZSA9CisJCQkJCXByZXZfbm9kZS0+bmV4dF9pbm9kZS0+bmV4dF9pbm9kZTsKKwkJfQorCisJCWtmcmVlKGRlbF9ub2RlKTsKKwl9Cit9CisKKy8qIGFsbG9jYXRpbmcgbmV3IGNoaXAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqYXBwZW5kX2ludGVybmFsKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRlcm5hbCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqbmV3X25vZGUgPSBzdHYwOTAwX2ZpcnN0X2lub2RlOworCisJaWYgKG5ld19ub2RlID09IE5VTEwpIHsKKwkJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSksIEdGUF9LRVJORUwpOworCQlzdHYwOTAwX2ZpcnN0X2lub2RlID0gbmV3X25vZGU7CisJfSBlbHNlIHsKKwkJd2hpbGUgKG5ld19ub2RlLT5uZXh0X2lub2RlICE9IE5VTEwpCisJCQluZXdfbm9kZSA9IG5ld19ub2RlLT5uZXh0X2lub2RlOworCisJCW5ld19ub2RlLT5uZXh0X2lub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW5vZGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld19ub2RlLT5uZXh0X2lub2RlICE9IE5VTEwpCisJCQluZXdfbm9kZSA9IG5ld19ub2RlLT5uZXh0X2lub2RlOworCQllbHNlCisJCQluZXdfbm9kZSA9IE5VTEw7CisJfQorCisJaWYgKG5ld19ub2RlICE9IE5VTEwpIHsKKwkJbmV3X25vZGUtPmludGVybmFsID0gaW50ZXJuYWw7CisJCW5ld19ub2RlLT5uZXh0X2lub2RlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gbmV3X25vZGU7Cit9CisKK3MzMiBnZTJjb21wKHMzMiBhLCBzMzIgd2lkdGgpCit7CisJaWYgKHdpZHRoID09IDMyKQorCQlyZXR1cm4gYTsKKwllbHNlCisJCXJldHVybiAoYSA+PSAoMSA8PCAod2lkdGggLSAxKSkpID8gKGEgLSAoMSA8PCB3aWR0aCkpIDogYTsKK30KKwordm9pZCBzdHYwOTAwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUxNiByZWdfYWRkciwKKwkJCQkJCQkJdTggcmVnX2RhdGEpCit7CisJdTggZGF0YVszXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIGkyY21zZyA9IHsKKwkJLmFkZHIgID0gaV9wYXJhbXMtPmkyY19hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuICAgPSAzLAorCQkuYnVmICAgPSBkYXRhLAorCX07CisKKwlkYXRhWzBdID0gTVNCKHJlZ19hZGRyKTsKKwlkYXRhWzFdID0gTFNCKHJlZ19hZGRyKTsKKwlkYXRhWzJdID0gcmVnX2RhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaV9wYXJhbXMtPmkyY19hZGFwLCAmaTJjbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOworfQorCit1OCBzdHYwOTAwX3JlYWRfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTE2IHJlZ19hZGRyKQoreworCXU4IGRhdGFbMl07CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBpMmNtc2cgPSB7CisJCS5hZGRyICA9IGlfcGFyYW1zLT5pMmNfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiAgID0gMiwKKwkJLmJ1ZiAgID0gZGF0YSwKKwl9OworCisJZGF0YVswXSA9IE1TQihyZWdfYWRkcik7CisJZGF0YVsxXSA9IExTQihyZWdfYWRkcik7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaV9wYXJhbXMtPmkyY19hZGFwLCAmaTJjbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCWRwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCisJaTJjbXNnLmZsYWdzID0gSTJDX01fUkQ7CisJaTJjbXNnLmxlbiA9IDE7CisJcmV0ID0gaTJjX3RyYW5zZmVyKGlfcGFyYW1zLT5pMmNfYWRhcCwgJmkyY21zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiBkYXRhWzBdOworfQorCit2b2lkIGV4dHJhY3RfbWFza19wb3ModTMyIGxhYmVsLCB1OCAqbWFzaywgdTggKnBvcykKK3sKKwl1OCBwb3NpdGlvbiA9IDAsIGkgPSAwOworCisJKCptYXNrKSA9IGxhYmVsICYgMHhmZjsKKworCXdoaWxlICgocG9zaXRpb24gPT0gMCkgJiYgKGkgPCA4KSkgeworCQlwb3NpdGlvbiA9ICgoKm1hc2spID4+IGkpICYgMHgwMTsKKwkJaSsrOworCX0KKworCSgqcG9zKSA9IChpIC0gMSk7Cit9CisKK3ZvaWQgc3R2MDkwMF93cml0ZV9iaXRzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIGxhYmVsLCB1OCB2YWwpCit7CisJdTggcmVnLCBtYXNrLCBwb3M7CisKKwlyZWcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCAobGFiZWwgPj4gMTYpICYgMHhmZmZmKTsKKwlleHRyYWN0X21hc2tfcG9zKGxhYmVsLCAmbWFzaywgJnBvcyk7CisKKwl2YWwgPSBtYXNrICYgKHZhbCA8PCBwb3MpOworCisJcmVnID0gKHJlZyAmICh+bWFzaykpIHwgdmFsOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCAobGFiZWwgPj4gMTYpICYgMHhmZmZmLCByZWcpOworCit9CisKK3U4IHN0djA5MDBfZ2V0X2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbGFiZWwpCit7CisJdTggdmFsID0gMHhmZjsKKwl1OCBtYXNrLCBwb3M7CisKKwlleHRyYWN0X21hc2tfcG9zKGxhYmVsLCAmbWFzaywgJnBvcyk7CisKKwl2YWwgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBsYWJlbCA+PiAxNik7CisJdmFsID0gKHZhbCAmIG1hc2spID4+IHBvczsKKworCXJldHVybiB2YWw7Cit9CisKK2VudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRpYWxpemUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zKQoreworCXMzMiBpOworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvcjsKKworCWlmIChpX3BhcmFtcyAhPSBOVUxMKSB7CisJCWlfcGFyYW1zLT5jaGlwX2lkID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfTUlEKTsKKwkJaWYgKGlfcGFyYW1zLT5lcnJzID09IFNUVjA5MDBfTk9fRVJST1IpIHsKKwkJCS8qU3RhcnR1cCBzZXF1ZW5jZSovCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NWMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ROUkNGRywgMHg2Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE5SQ0ZHLCAweDZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9JMkNSUFQsIDB4MjQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0kyQ1JQVCwgMHgyNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfTkNPQVJTRSwgMHgxMyk7CisJCQltc2xlZXAoMyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfSTJDQ0ZHLCAweDA4KTsKKworCQkJc3dpdGNoIChpX3BhcmFtcy0+Y2xrbW9kZSkgeworCQkJY2FzZSAwOgorCQkJY2FzZSAyOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMAorCQkJCQkJfCBpX3BhcmFtcy0+Y2xrbW9kZSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIHByZXNlcnZlIFNFTE9TQ0kgYml0ICovCisJCQkJaSA9IDB4MDIgJiBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9TWU5UQ1RSTCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1NZTlRDVFJMLCAweDIwIHwgaSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW1zbGVlcCgzKTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxODI7IGkrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgU1RWMDkwMF9Jbml0VmFsW2ldWzBdLCBTVFYwOTAwX0luaXRWYWxbaV1bMV0pOworCisJCQlpZiAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfTUlEKSA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTCwgMHgwYyk7CisJCQkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsW2ldWzBdLCBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsW2ldWzFdKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0ZTUFlDRkcsIDB4NmMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0ZTUFlDRkcsIDB4NmMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTVFJFUzAsIDB4ODApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTVFJFUzAsIDB4MDApOworCQl9CisJCWVycm9yID0gaV9wYXJhbXMtPmVycnM7CisJfSBlbHNlCisJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKworCXJldHVybiBlcnJvcjsKKworfQorCit1MzIgc3R2MDkwMF9nZXRfbWNsa19mcmVxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIGV4dF9jbGspCit7CisJdTMyIG1jbGsgPSA5MDAwMDAwMCwgZGl2ID0gMCwgYWRfZGl2ID0gMDsKKworCWRpdiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX01fRElWKTsKKwlhZF9kaXYgPSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NFTFgxUkFUSU8pID09IDEpID8gNCA6IDYpOworCisJbWNsayA9IChkaXYgKyAxKSAqIGV4dF9jbGsgLyBhZF9kaXY7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENhbGN1bGF0ZWQgTWNsayA9ICVkXG4iLCBfX2Z1bmNfXywgbWNsayk7CisKKwlyZXR1cm4gbWNsazsKK30KKworZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc2V0X21jbGsoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbWNsaykKK3sKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCXUzMiBtX2RpdiwgY2xrX3NlbDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogTWNsayBzZXQgdG8gJWQsIFF1YXJ0eiA9ICVkXG4iLCBfX2Z1bmNfXywgbWNsaywKKwkJCWlfcGFyYW1zLT5xdWFydHopOworCisJaWYgKGlfcGFyYW1zID09IE5VTEwpCisJCWVycm9yID0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRTsKKwllbHNlIHsKKwkJaWYgKGlfcGFyYW1zLT5lcnJzKQorCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJZWxzZSB7CisJCQljbGtfc2VsID0gKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TRUxYMVJBVElPKSA9PSAxKSA/IDQgOiA2KTsKKwkJCW1fZGl2ID0gKChjbGtfc2VsICogbWNsaykgLyBpX3BhcmFtcy0+cXVhcnR6KSAtIDE7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX01fRElWLCBtX2Rpdik7CisJCQlpX3BhcmFtcy0+bWNsayA9IHN0djA5MDBfZ2V0X21jbGtfZnJlcShpX3BhcmFtcywKKwkJCQkJCQlpX3BhcmFtcy0+cXVhcnR6KTsKKworCQkJLypTZXQgdGhlIERpc2VxQyBmcmVxdWVuY3kgdG8gMjJLSHogKi8KKwkJCS8qCisJCQkJRm9ybXVsYToKKwkJCQlEaXNlcUNfVFhfRnJlcT0gTWFzdGVyQ2xvY2svKDMyKkYyMlRYX1JlZykKKwkJCQlEaXNlcUNfUlhfRnJlcT0gTWFzdGVyQ2xvY2svKDMyKkYyMlJYX1JlZykKKwkJCSovCisJCQltX2RpdiA9IGlfcGFyYW1zLT5tY2xrIC8gNzA0MDAwOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0YyMlRYLCBtX2Rpdik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRjIyUlgsIG1fZGl2KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0YyMlRYLCBtX2Rpdik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRjIyUlgsIG1fZGl2KTsKKworCQkJaWYgKChpX3BhcmFtcy0+ZXJycykpCisJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJfQorCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordTMyIHN0djA5MDBfZ2V0X2Vycl9jb3VudChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIGludCBjbnRyLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiBsc2IsIG1zYiwgaHNiLCBlcnJfdmFsOworCXMzMiBlcnIxZmllbGRfaHNiLCBlcnIxZmllbGRfbXNiLCBlcnIxZmllbGRfbHNiOworCXMzMiBlcnIyZmllbGRfaHNiLCBlcnIyZmllbGRfbXNiLCBlcnIyZmllbGRfbHNiOworCisJZG1kX3JlZyhlcnIxZmllbGRfaHNiLCBGMDkwMF9QMV9FUlJfQ05UMTIsIEYwOTAwX1AyX0VSUl9DTlQxMik7CisJZG1kX3JlZyhlcnIxZmllbGRfbXNiLCBGMDkwMF9QMV9FUlJfQ05UMTEsIEYwOTAwX1AyX0VSUl9DTlQxMSk7CisJZG1kX3JlZyhlcnIxZmllbGRfbHNiLCBGMDkwMF9QMV9FUlJfQ05UMTAsIEYwOTAwX1AyX0VSUl9DTlQxMCk7CisKKwlkbWRfcmVnKGVycjJmaWVsZF9oc2IsIEYwOTAwX1AxX0VSUl9DTlQyMiwgRjA5MDBfUDJfRVJSX0NOVDIyKTsKKwlkbWRfcmVnKGVycjJmaWVsZF9tc2IsIEYwOTAwX1AxX0VSUl9DTlQyMSwgRjA5MDBfUDJfRVJSX0NOVDIxKTsKKwlkbWRfcmVnKGVycjJmaWVsZF9sc2IsIEYwOTAwX1AxX0VSUl9DTlQyMCwgRjA5MDBfUDJfRVJSX0NOVDIwKTsKKworCXN3aXRjaCAoY250cikgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQloc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIxZmllbGRfaHNiKTsKKwkJbXNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMWZpZWxkX21zYik7CisJCWxzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjFmaWVsZF9sc2IpOworCQlicmVhazsKKwljYXNlIDE6CisJCWhzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjJmaWVsZF9oc2IpOworCQltc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIyZmllbGRfbXNiKTsKKwkJbHNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMmZpZWxkX2xzYik7CisJCWJyZWFrOworCX0KKworCWVycl92YWwgPSAoaHNiIDw8IDE2KSArIChtc2IgPDwgOCkgKyAobHNiKTsKKworCXJldHVybiBlcnJfdmFsOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfaTJjX2dhdGVfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXUzMiBmaTJjOworCisJZG1kX3JlZyhmaTJjLCBGMDkwMF9QMV9JMkNUX09OLCBGMDkwMF9QMl9JMkNUX09OKTsKKwlpZiAoZW5hYmxlKQorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIGZpMmMsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3RzX3BhcmFsbGVsX3NlcmlhbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlIHBhdGgxX3RzLAorCQkJCQllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZSBwYXRoMl90cykKK3sKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJc3dpdGNoIChwYXRoMV90cykgeworCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwsCisJCQkJCQkJMHgwMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTCwKKwkJCQkJCQkweDA2KTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9UU0ZJRk9fTUFOU1BFRUQsIDMpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1RTRklGT19NQU5TUEVFRCwgMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMV9UU1NQRUVELCAweDE0KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AyX1RTU1BFRUQsIDB4MjgpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfVFNHRU5FUkFMLCAweDBDKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1RTR0VORVJBTCwgMHgwQSk7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiAweDBhXG4iLCBfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAocGF0aDFfdHMpIHsKKwkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQkJZGVmYXVsdDoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTDFYLAorCQkJCQkJCTB4MTYpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1RTRklGT19NQU5TUEVFRCwgMyk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfVFNGSUZPX01BTlNQRUVELCAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVFNTUEVFRCwKKwkJCQkJCQkweDE0KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVFNTUEVFRCwKKwkJCQkJCQkweDI4KTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAocGF0aDJfdHMpIHsKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCQlkZWZhdWx0OgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwxWCwKKwkJCQkJCQkweDE0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9EVkJDSV9DTE9DSzoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxMik7CisJCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiAweDEyXG4iLCBfX2Z1bmNfXyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChwYXRoMV90cykgeworCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChwYXRoMl90cykgeworCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMLCAweDAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UU0ZJRk9fRFZCQ0ksIDB4MDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SU1RfSFdBUkUsIDEpOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlNUX0hXQVJFLCAwKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JTVF9IV0FSRSwgMSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDApOworfQorCit2b2lkIHN0djA5MDBfc2V0X3R1bmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5LAorCQkJCQkJCXUzMiBiYW5kd2lkdGgpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCisJaWYgKHR1bmVyX29wcy0+c2V0X2ZyZXF1ZW5jeSkgeworCQlpZiAoKHR1bmVyX29wcy0+c2V0X2ZyZXF1ZW5jeShmZSwgZnJlcXVlbmN5KSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCBmcmVxdWVuY3kpOworCisJfQorCisJaWYgKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aCkgeworCQlpZiAoKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aChmZSwgYmFuZHdpZHRoKSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCBiYW5kd2lkdGgpOworCisJfQorfQorCit2b2lkIHN0djA5MDBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqdHVuZXJfb3BzID0gTlVMTDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisKKwlpZiAoJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzKQorCQl0dW5lcl9vcHMgPSAmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHM7CisKKwlpZiAodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKSB7CisJCWlmICgodHVuZXJfb3BzLT5zZXRfYmFuZHdpZHRoKGZlLCBiYW5kd2lkdGgpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEJhbmR3aWR0aD0lZFxuIiwgX19mdW5jX18sIGJhbmR3aWR0aCk7CisKKwl9Cit9CisKK3N0YXRpYyBzMzIgc3R2MDkwMF9nZXRfcmZfbGV2ZWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlICpsb29rdXAsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgYWdjX2dhaW4gPSAwLAorCQlpbWluLAorCQlpbWF4LAorCQlpLAorCQlyZl9sdmwgPSAwOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoKGxvb2t1cCAhPSBOVUxMKSAmJiBsb29rdXAtPnNpemUpIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWFnY19nYWluID0gTUFLRVdPUkQoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUdDSVFfVkFMVUUxKSwKKwkJCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMCkpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJYWdjX2dhaW4gPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BR0NJUV9WQUxVRTEpLAorCQkJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUdDSVFfVkFMVUUwKSk7CisJCQlicmVhazsKKwkJfQorCisJCWltaW4gPSAwOworCQlpbWF4ID0gbG9va3VwLT5zaXplIC0gMTsKKwkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsIGFnY19nYWluLCBsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbCkpIHsKKwkJCXdoaWxlICgoaW1heCAtIGltaW4pID4gMSkgeworCQkJCWkgPSAoaW1heCArIGltaW4pID4+IDE7CisKKwkJCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwgYWdjX2dhaW4sIGxvb2t1cC0+dGFibGVbaV0ucmVndmFsKSkKKwkJCQkJaW1heCA9IGk7CisJCQkJZWxzZQorCQkJCQlpbWluID0gaTsKKwkJCX0KKworCQkJcmZfbHZsID0gKCgoczMyKWFnY19nYWluIC0gbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpCisJCQkJCSogKGxvb2t1cC0+dGFibGVbaW1heF0ucmVhbHZhbCAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbCkKKwkJCQkJLyAobG9va3VwLT50YWJsZVtpbWF4XS5yZWd2YWwgLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkpCisJCQkJCSsgbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsOworCQl9IGVsc2UgaWYgKGFnY19nYWluID4gbG9va3VwLT50YWJsZVswXS5yZWd2YWwpCisJCQlyZl9sdmwgPSA1OworCQllbHNlIGlmIChhZ2NfZ2FpbiA8IGxvb2t1cC0+dGFibGVbbG9va3VwLT5zaXplLTFdLnJlZ3ZhbCkKKwkJCXJmX2x2bCA9IC0xMDA7CisKKwl9CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJGTGV2ZWwgPSAlZFxuIiwgX19mdW5jX18sIHJmX2x2bCk7CisKKwlyZXR1cm4gcmZfbHZsOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludGVybmFsID0gc3RhdGUtPmludGVybmFsOworCXMzMiByZmxldmVsID0gc3R2MDkwMF9nZXRfcmZfbGV2ZWwoaW50ZXJuYWwsICZzdHYwOTAwX3JmLAorCQkJCQkJCQlzdGF0ZS0+ZGVtb2QpOworCisJKnN0cmVuZ3RoID0gKHJmbGV2ZWwgKyAxMDApICogKDE2MzgzIC8gMTA1KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzMzIgc3R2MDkwMF9jYXJyX2dldF9xdWFsaXR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIGNfbiA9IC0xMDAsCisJCXJlZ3ZhbCwgaW1pbiwgaW1heCwKKwkJaSwKKwkJbG9ja19mbGFnX2ZpZWxkLAorCQlub2lzZV9maWVsZDEsCisJCW5vaXNlX2ZpZWxkMDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhsb2NrX2ZsYWdfZmllbGQsIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGLAorCQkJCQlGMDkwMF9QMl9MT0NLX0RFRklOSVRJRik7CisJaWYgKHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkZW1vZCkgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMSwgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQxLAorCQkJCQlGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDEpOworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMCwgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQwLAorCQkJCQlGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDApOworCX0gZWxzZSB7CisJCWRtZF9yZWcobm9pc2VfZmllbGQxLCBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQxLAorCQkJCQlGMDkwMF9QMl9OT1NEQVRBVF9OT1JNRUQxKTsKKwkJZG1kX3JlZyhub2lzZV9maWVsZDAsIEYwOTAwX1AxX05PU0RBVEFUX05PUk1FRDAsCisJCQkJCUYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDApOworCX0KKworCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZsYWdfZmllbGQpKSB7CisJCWlmICgobG9va3VwICE9IE5VTEwpICYmIGxvb2t1cC0+c2l6ZSkgeworCQkJcmVndmFsID0gMDsKKwkJCW1zbGVlcCg1KTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQkJcmVndmFsICs9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsCisJCQkJCQkJCW5vaXNlX2ZpZWxkMSksCisJCQkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLAorCQkJCQkJCQlub2lzZV9maWVsZDApKTsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisKKwkJCXJlZ3ZhbCAvPSAxNjsKKwkJCWltaW4gPSAwOworCQkJaW1heCA9IGxvb2t1cC0+c2l6ZSAtIDE7CisJCQlpZiAoSU5SQU5HRShsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCwKKwkJCQkJcmVndmFsLAorCQkJCQlsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbCkpIHsKKwkJCQl3aGlsZSAoKGltYXggLSBpbWluKSA+IDEpIHsKKwkJCQkJaSA9IChpbWF4ICsgaW1pbikgPj4gMTsKKwkJCQkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsCisJCQkJCQkgICAgcmVndmFsLAorCQkJCQkJICAgIGxvb2t1cC0+dGFibGVbaV0ucmVndmFsKSkKKwkJCQkJCWltYXggPSBpOworCQkJCQllbHNlCisJCQkJCQlpbWluID0gaTsKKwkJCQl9CisKKwkJCQljX24gPSAoKHJlZ3ZhbCAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKQorCQkJCQkJKiAobG9va3VwLT50YWJsZVtpbWF4XS5yZWFsdmFsCisJCQkJCQktIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbCkKKwkJCQkJCS8gKGxvb2t1cC0+dGFibGVbaW1heF0ucmVndmFsCisJCQkJCQktIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKSkKKwkJCQkJCSsgbG9va3VwLT50YWJsZVtpbWluXS5yZWFsdmFsOworCQkJfSBlbHNlIGlmIChyZWd2YWwgPCBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkKKwkJCQljX24gPSAxMDAwOworCQl9CisJfQorCisJcmV0dXJuIGNfbjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3sKKwkqc25yID0gc3R2MDkwMF9jYXJyX2dldF9xdWFsaXR5KGZlLAorCQkJKGNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlICopJnN0djA5MDBfczJfY24pOworCSpzbnIgKz0gMzA7CisJKnNuciAqPSAoMTYzODMgLyAxMDMwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X2JlcihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgYmVyID0gMTAwMDAwMDAsIGk7CisJczMyIGRtZF9zdGF0ZV9yZWc7CisJczMyIGRlbW9kX3N0YXRlOworCXMzMiB2c3RhdHVzX3JlZzsKKwlzMzIgcHJ2aXRfZmllbGQ7CisJczMyIHBkZWxfc3RhdHVzX3JlZzsKKwlzMzIgcGRlbF9sb2NrX2ZpZWxkOworCisJZG1kX3JlZyhkbWRfc3RhdGVfcmVnLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcodnN0YXR1c19yZWcsIFIwOTAwX1AxX1ZTVEFUVVNWSVQsIFIwOTAwX1AyX1ZTVEFUVVNWSVQpOworCWRtZF9yZWcocHJ2aXRfZmllbGQsIEYwOTAwX1AxX1BSRlZJVCwgRjA5MDBfUDJfUFJGVklUKTsKKwlkbWRfcmVnKHBkZWxfc3RhdHVzX3JlZywgUjA5MDBfUDFfUERFTFNUQVRVUzEsIFIwOTAwX1AyX1BERUxTVEFUVVMxKTsKKwlkbWRfcmVnKHBkZWxfbG9ja19maWVsZCwgRjA5MDBfUDFfUEtUREVMSU5fTE9DSywKKwkJCQlGMDkwMF9QMl9QS1RERUxJTl9MT0NLKTsKKworCWRlbW9kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZG1kX3N0YXRlX3JlZyk7CisKKwlzd2l0Y2ggKGRlbW9kX3N0YXRlKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCWRlZmF1bHQ6CisJCWJlciA9IDEwMDAwMDAwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJYmVyID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJbXNsZWVwKDUpOworCQkJYmVyICs9IHN0djA5MDBfZ2V0X2Vycl9jb3VudChpX3BhcmFtcywgMCwgZGVtb2QpOworCQl9CisKKwkJYmVyIC89IDU7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBwcnZpdF9maWVsZCkpIHsKKwkJCWJlciAqPSA5NzY2OworCQkJYmVyID0gYmVyID4+IDEzOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQliZXIgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQltc2xlZXAoNSk7CisJCQliZXIgKz0gc3R2MDkwMF9nZXRfZXJyX2NvdW50KGlfcGFyYW1zLCAwLCBkZW1vZCk7CisJCX0KKworCQliZXIgLz0gNTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHBkZWxfbG9ja19maWVsZCkpIHsKKwkJCWJlciAqPSA5NzY2OworCQkJYmVyID0gYmVyID4+IDEzOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGJlcjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwgPSBzdGF0ZS0+aW50ZXJuYWw7CisKKwkqYmVyID0gc3R2MDkwMF9nZXRfYmVyKGludGVybmFsLCBzdGF0ZS0+ZGVtb2QpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsIHMzMiB0aW1lX291dCkKK3sKKwlzMzIgdGltZXIgPSAwLAorCQlsb2NrID0gMCwKKwkJaGVhZGVyX2ZpZWxkLAorCQlsb2NrX2ZpZWxkOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZQlkbWRfc3RhdGU7CisKKwlkbWRfcmVnKGhlYWRlcl9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKGxvY2tfZmllbGQsIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGLCBGMDkwMF9QMl9MT0NLX0RFRklOSVRJRik7CisJd2hpbGUgKCh0aW1lciA8IHRpbWVfb3V0KSAmJiAobG9jayA9PSAwKSkgeworCQlkbWRfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBoZWFkZXJfZmllbGQpOworCQlkcHJpbnRrKCJEZW1vZCBTdGF0ZSA9ICVkXG4iLCBkbWRfc3RhdGUpOworCQlzd2l0Y2ggKGRtZF9zdGF0ZSkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIOgorCQljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCQlkZWZhdWx0OgorCQkJbG9jayA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX0ZPVU5EOgorCQljYXNlIFNUVjA5MDBfRFZCU19GT1VORDoKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZpZWxkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxvY2sgPT0gMCkKKwkJCW1zbGVlcCgxMCk7CisKKwkJdGltZXIgKz0gMTA7CisJfQorCisJaWYgKGxvY2spCisJCWRwcmludGsoIkRFTU9EIExPQ0sgT0tcbiIpOworCWVsc2UKKwkJZHByaW50aygiREVNT0QgTE9DSyBGQUlMXG4iKTsKKworCXJldHVybiBsb2NrOworfQorCit2b2lkIHN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiByZWdmbGlzdCwKKwlpOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHJlZ2ZsaXN0LCBSMDkwMF9QMV9NT0RDT0RMU1QwLCBSMDkwMF9QMl9NT0RDT0RMU1QwKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnZmxpc3QgKyBpLCAweGZmKTsKK30KKwordm9pZCBzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIG1hdHlwZSwKKwltb2RfY29kZSwKKwlmbW9kLAorCXJlZ19pbmRleCwKKwlmaWVsZF9pbmRleDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJbXNsZWVwKDUpOworCisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQltb2RfY29kZSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfUExITU9EQ09EKTsKKwkJCW1hdHlwZSA9IG1vZF9jb2RlICYgMHgzOworCQkJbW9kX2NvZGUgPSAobW9kX2NvZGUgJiAweDdmKSA+PiAyOworCisJCQlyZWdfaW5kZXggPSBSMDkwMF9QMV9NT0RDT0RMU1RGIC0gbW9kX2NvZGUgLyAyOworCQkJZmllbGRfaW5kZXggPSBtb2RfY29kZSAlIDI7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQltb2RfY29kZSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfUExITU9EQ09EKTsKKwkJCW1hdHlwZSA9IG1vZF9jb2RlICYgMHgzOworCQkJbW9kX2NvZGUgPSAobW9kX2NvZGUgJiAweDdmKSA+PiAyOworCisJCQlyZWdfaW5kZXggPSBSMDkwMF9QMl9NT0RDT0RMU1RGIC0gbW9kX2NvZGUgLyAyOworCQkJZmllbGRfaW5kZXggPSBtb2RfY29kZSAlIDI7CisJCQlicmVhazsKKwkJfQorCisKKwkJc3dpdGNoIChtYXR5cGUpIHsKKwkJY2FzZSAwOgorCQlkZWZhdWx0OgorCQkJZm1vZCA9IDE0OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWZtb2QgPSAxMzsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlmbW9kID0gMTE7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZm1vZCA9IDc7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoSU5SQU5HRShTVFYwOTAwX1FQU0tfMTIsIG1vZF9jb2RlLCBTVFYwOTAwXzhQU0tfOTEwKSkKKwkJCQkJCQkmJiAobWF0eXBlIDw9IDEpKSB7CisJCQlpZiAoZmllbGRfaW5kZXggPT0gMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnX2luZGV4LAorCQkJCQkJCTB4ZjAgfCBmbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcmVnX2luZGV4LAorCQkJCQkJCShmbW9kIDw8IDQpIHwgMHhmKTsKKwkJfQorCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgxMikgeworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA3OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNUMCArIHJlZ19pbmRleCwgMHhmZik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1RFLCAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1RGLCAweGNmKTsKKwkJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgODsgcmVnX2luZGV4KyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDcgKyByZWdfaW5kZXgsIDB4Y2MpOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDc7IHJlZ19pbmRleCsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1QwICsgcmVnX2luZGV4LCAweGZmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEUsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEYsIDB4Y2YpOworCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA4OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUNyArIHJlZ19pbmRleCwgMHhjYyk7CisKKwkJCWJyZWFrOworCQl9CisKKwl9Cit9CisKK3ZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIHJlZ19pbmRleDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1QwLCAweGZmKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDEsIDB4ZjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNURiwgMHgwZik7CisJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgMTM7IHJlZ19pbmRleCsrKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCVIwOTAwX1AxX01PRENPRExTVDIgKyByZWdfaW5kZXgsIDApOworCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUMCwgMHhmZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1QxLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVEYsIDB4MGYpOworCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDEzOyByZWdfaW5kZXgrKykKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQlSMDkwMF9QMl9NT0RDT0RMU1QyICsgcmVnX2luZGV4LCAwKTsKKworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBlbnVtIGR2YmZlX2FsZ28gc3R2MDkwMF9mcm9udGVuZF9hbGdvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXJldHVybiBEVkJGRV9BTEdPX0NVU1RPTTsKK30KKworc3RhdGljIGludCBzdGIwOTAwX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHR2X3Byb3BlcnR5ICp0dnApCit7CisJZHByaW50ayhLRVJOX0lORk8gIiVzKC4uKVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RiMDkwMF9nZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQoreworCWRwcmludGsoS0VSTl9JTkZPICIlcyguLilcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHN0djA5MDBfc3RhcnRfc2VhcmNoKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MWYpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEVYUCwgMHhhYSk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4NTUpOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSQ0ZHLCAweDQ0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJVUDEsIDB4MGYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUlVQMCwgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSTE9XMSwgMHhmMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSTE9XMCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NjgpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkNGRywgMHhjNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NDQpOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCAwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GRkVDRkcsIDB4NDEpOworCisJCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1MxUzJfU0VRVUVOVElBTCwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVEMsIDB4ODgpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDM5KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDQwKTsKKwkJCX0KKworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg0Yyk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHgyMCk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDRiKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDIwKTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4ZWYpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVkKTsKKwkJfQorCisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvKSB7CisJCWNhc2UgU1RWMDkwMF9XQVJNX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQ09MRF9TVEFSVDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MWYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUsIDB4MWYpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxFWFAsIDB4YWEpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDU1KTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkNGRywgMHg0NCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSVVAxLCAweDBmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJVUDAsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUkxPVzEsIDB4ZjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUkxPVzAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDY4KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJDRkcsIDB4YzQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDQ0KTsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgMCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUVVBTENGRywgMHg0MSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRkZFQ0ZHLCAweDQxKTsKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EU1MpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WSVRTQ0FMRSwgMHg4Mik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZBVlNSVklULCAweDApOworCQkJfQorCQl9CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweGUwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUzFTMl9TRVFVRU5USUFMLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQywgMHg4OCk7CisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAyMDAwMDAwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4MzkpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4NDApOworCQkJfQorCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDRjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDIwKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NGIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4MjApOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHhlZik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCQl9CisKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28pIHsKKwkJY2FzZSBTVFYwOTAwX1dBUk1fU1RBUlQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9DT0xEX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwl9Cit9CisKK3U4IHN0djA5MDBfZ2V0X29wdGltX2NhcnJfbG9vcChzMzIgc3JhdGUsIGVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIG1vZGNvZGUsCisJCQkJCQkJczMyIHBpbG90LCB1OCBjaGlwX2lkKQoreworCXU4IGFjbGNfdmFsdWUgPSAweDI5OworCXMzMglpOworCWNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltICpjYXJfbG9vcF9zMjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGNoaXBfaWQgPD0gMHgxMikKKwkJY2FyX2xvb3BfczIgPSBGRV9TVFYwOTAwX1MyQ2FyTG9vcDsKKwllbHNlIGlmIChjaGlwX2lkID09IDB4MjApCisJCWNhcl9sb29wX3MyID0gRkVfU1RWMDkwMF9TMkNhckxvb3BDdXQyMDsKKwllbHNlCisJCWNhcl9sb29wX3MyID0gRkVfU1RWMDkwMF9TMkNhckxvb3A7CisKKwlpZiAobW9kY29kZSA8IFNUVjA5MDBfUVBTS18xMikgeworCQlpID0gMDsKKwkJd2hpbGUgKChpIDwgMykgJiYgKG1vZGNvZGUgIT0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLm1vZGNvZGUpKQorCQkJaSsrOworCisJCWlmIChpID49IDMpCisJCQlpID0gMjsKKwl9IGVsc2UgeworCQlpID0gMDsKKwkJd2hpbGUgKChpIDwgMTQpICYmIChtb2Rjb2RlICE9IGNhcl9sb29wX3MyW2ldLm1vZGNvZGUpKQorCQkJaSsrOworCisJCWlmIChpID49IDE0KSB7CisJCQlpID0gMDsKKwkJCXdoaWxlICgoaSA8IDExKSAmJiAobW9kY29kZSAhPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5tb2Rjb2RlKSkKKwkJCQlpKys7CisKKwkJCWlmIChpID49IDExKQorCQkJCWkgPSAxMDsKKwkJfQorCX0KKworCWlmIChtb2Rjb2RlIDw9IFNUVjA5MDBfUVBTS18yNSkgeworCQlpZiAocGlsb3QpIHsKKwkJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8xMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCQl9IGVsc2UgeworCQkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzEwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKwkJfQorCisJfSBlbHNlIGlmIChtb2Rjb2RlIDw9IFNUVjA5MDBfOFBTS185MTApIHsKKwkJaWYgKHBpbG90KSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fNTsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQkJZWxzZQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb25fMzA7CisJCX0gZWxzZSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yMDsKKwkJCWVsc2UKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKwkJfQorCisJfSBlbHNlIHsKKwkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8xMDsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCQllbHNlCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCX0KKworCXJldHVybiBhY2xjX3ZhbHVlOworfQorCit1OCBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3AoczMyIHNyYXRlLCBlbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiBtb2R1bGF0aW9uLCB1OCBjaGlwX2lkKQoreworCXMzMiBtb2RfaW5kZXggPSAwOworCisJdTggYWNsY192YWx1ZSA9IDB4MGI7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAobW9kdWxhdGlvbikgeworCWNhc2UgU1RWMDkwMF9RUFNLOgorCWRlZmF1bHQ6CisJCW1vZF9pbmRleCA9IDA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF84UFNLOgorCQltb2RfaW5kZXggPSAxOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMTZBUFNLOgorCQltb2RfaW5kZXggPSAyOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMzJBUFNLOgorCQltb2RfaW5kZXggPSAzOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNoaXBfaWQpIHsKKwljYXNlIDB4MjA6CisJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8yOworCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF81OworCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfMTA7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8yMDsKKwkJZWxzZQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQyMF8zMDsKKworCQlicmVhazsKKwljYXNlIDB4MTI6CisJZGVmYXVsdDoKKwkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzI7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzU7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl8xMDsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzIwOworCQllbHNlCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDEyXzMwOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBhY2xjX3ZhbHVlOworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2Vycm9yIHN0djA5MDBfc3RfZHZiczJfc2luZ2xlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUgTERQQ19Nb2RlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoTERQQ19Nb2RlKSB7CisJY2FzZSBTVFYwOTAwX0RVQUw6CisJZGVmYXVsdDoKKwkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX0RVQUwpCisJCQl8fCAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfRERFTU9EKSAhPSAxKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0dFTkNGRywgMHgxZCk7CisKKwkJCWlfcGFyYW1zLT5kZW1vZF9tb2RlID0gU1RWMDkwMF9EVUFMOworCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9GUkVTRkVDLCAwKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TSU5HTEU6CisJCWlmIChkZW1vZCA9PSBTVFYwOTAwX0RFTU9EXzIpCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfR0VOQ0ZHLCAweDA2KTsKKwkJZWxzZQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0dFTkNGRywgMHgwNCk7CisKKwkJaV9wYXJhbXMtPmRlbW9kX21vZGUgPSBTVFYwOTAwX1NJTkdMRTsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX0ZSRVNGRUMsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX2luaXRfaW50ZXJuYWwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBzdHYwOTAwX2luaXRfcGFyYW1zICpwX2luaXQpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZGVtb2RFcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisJaW50IHNlbG9zY2k7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqdGVtcF9pbnQgPSBmaW5kX2lub2RlKHN0YXRlLT5pMmNfYWRhcCwKKwkJCQkJCXN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MpOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAodGVtcF9pbnQgIT0gTlVMTCkgeworCQlzdGF0ZS0+aW50ZXJuYWwgPSB0ZW1wX2ludC0+aW50ZXJuYWw7CisJCShzdGF0ZS0+aW50ZXJuYWwtPmRtZHNfdXNlZCkrKzsKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBGaW5kIEludGVybmFsIFN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFNUVjA5MDBfTk9fRVJST1I7CisJfSBlbHNlIHsKKwkJc3RhdGUtPmludGVybmFsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwpLCBHRlBfS0VSTkVMKTsKKwkJdGVtcF9pbnQgPSBhcHBlbmRfaW50ZXJuYWwoc3RhdGUtPmludGVybmFsKTsKKwkJc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQgPSAxOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGFwID0gc3RhdGUtPmkyY19hZGFwOworCQlzdGF0ZS0+aW50ZXJuYWwtPmkyY19hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwkJc3RhdGUtPmludGVybmFsLT5jbGttb2RlID0gc3RhdGUtPmNvbmZpZy0+Y2xrbW9kZTsKKwkJc3RhdGUtPmludGVybmFsLT5lcnJzID0gU1RWMDkwMF9OT19FUlJPUjsKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBDcmVhdGUgTmV3IEludGVybmFsIFN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlpZiAoc3RhdGUtPmludGVybmFsICE9IE5VTEwpIHsKKwkJZGVtb2RFcnJvciA9IHN0djA5MDBfaW5pdGlhbGl6ZShzdGF0ZS0+aW50ZXJuYWwpOworCQlpZiAoZGVtb2RFcnJvciA9PSBTVFYwOTAwX05PX0VSUk9SKSB7CisJCQkJZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCQl9IGVsc2UgeworCQkJaWYgKGRlbW9kRXJyb3IgPT0gU1RWMDkwMF9JTlZBTElEX0hBTkRMRSkKKwkJCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJfQorCisJCWlmIChzdGF0ZS0+aW50ZXJuYWwgIT0gTlVMTCkgeworCQkJaWYgKGVycm9yID09IFNUVjA5MDBfTk9fRVJST1IpIHsKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX21vZGUgPSBwX2luaXQtPmRlbW9kX21vZGU7CisKKwkJCQlzdHYwOTAwX3N0X2R2YnMyX3NpbmdsZShzdGF0ZS0+aW50ZXJuYWwsIHN0YXRlLT5pbnRlcm5hbC0+ZGVtb2RfbW9kZSwgU1RWMDkwMF9ERU1PRF8xKTsKKworCQkJCXN0YXRlLT5pbnRlcm5hbC0+Y2hpcF9pZCA9IHN0djA5MDBfcmVhZF9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9NSUQpOworCQkJCXN0YXRlLT5pbnRlcm5hbC0+cm9sbG9mZiA9IHBfaW5pdC0+cm9sbG9mZjsKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPnF1YXJ0eiA9IHBfaW5pdC0+ZG1kX3JlZl9jbGs7CisKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsIHBfaW5pdC0+cm9sbG9mZik7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MLCBwX2luaXQtPnJvbGxvZmYpOworCisJCQkJc3R2MDkwMF9zZXRfdHNfcGFyYWxsZWxfc2VyaWFsKHN0YXRlLT5pbnRlcm5hbCwgcF9pbml0LT5wYXRoMV90c19jbG9jaywgcF9pbml0LT5wYXRoMl90c19jbG9jayk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDFfVFVOX01BRERSRVNTLCBwX2luaXQtPnR1bjFfbWFkZHJlc3MpOworCQkJCXN3aXRjaCAocF9pbml0LT50dW5lcjFfYWRjKSB7CisJCQkJY2FzZSAxOgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1RTVFROUjEsIDB4MjYpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMl9UVU5fTUFERFJFU1MsIHBfaW5pdC0+dHVuMl9tYWRkcmVzcyk7CisJCQkJc3dpdGNoIChwX2luaXQtPnR1bmVyMl9hZGMpIHsKKwkJCQljYXNlIDE6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfVFNUVE5SMywgMHgyNik7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AxX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMV9pcV9pbnZlcnNpb24pOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AyX1RVTl9JUVNXQVAsIHBfaW5pdC0+dHVuMl9pcV9pbnZlcnNpb24pOworCQkJCXN0djA5MDBfc2V0X21jbGsoc3RhdGUtPmludGVybmFsLCAxMzUwMDAwMDApOworCQkJCW1zbGVlcCgzKTsKKworCQkJCXN3aXRjaCAoc3RhdGUtPmludGVybmFsLT5jbGttb2RlKSB7CisJCQkJY2FzZSAwOgorCQkJCWNhc2UgMjoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMCB8IHN0YXRlLT5pbnRlcm5hbC0+Y2xrbW9kZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXNlbG9zY2kgPSAweDAyICYgc3R2MDkwMF9yZWFkX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1NZTlRDVFJMKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMCB8IHNlbG9zY2kpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJbXNsZWVwKDMpOworCisJCQkJc3RhdGUtPmludGVybmFsLT5tY2xrID0gc3R2MDkwMF9nZXRfbWNsa19mcmVxKHN0YXRlLT5pbnRlcm5hbCwgc3RhdGUtPmludGVybmFsLT5xdWFydHopOworCQkJCWlmIChzdGF0ZS0+aW50ZXJuYWwtPmVycnMpCisJCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCQl9CisJCX0gZWxzZSB7CisJCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zdGF0dXMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhdGUgZGVtb2Rfc3RhdGU7CisJczMyIG1vZGVfZmllbGQsIGRlbGluX2ZpZWxkLCBsb2NrX2ZpZWxkLCBmaWZvX2ZpZWxkLCBsb2NrZWR2aXRfZmllbGQ7CisJaW50IGxvY2tlZCA9IEZBTFNFOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcobG9ja19maWVsZCwgRjA5MDBfUDFfTE9DS19ERUZJTklUSUYsIEYwOTAwX1AyX0xPQ0tfREVGSU5JVElGKTsKKwlkbWRfcmVnKGRlbGluX2ZpZWxkLCBGMDkwMF9QMV9QS1RERUxJTl9MT0NLLCBGMDkwMF9QMl9QS1RERUxJTl9MT0NLKTsKKwlkbWRfcmVnKGZpZm9fZmllbGQsIEYwOTAwX1AxX1RTRklGT19MSU5FT0ssIEYwOTAwX1AyX1RTRklGT19MSU5FT0spOworCWRtZF9yZWcobG9ja2Vkdml0X2ZpZWxkLCBGMDkwMF9QMV9MT0NLRURWSVQsIEYwOTAwX1AyX0xPQ0tFRFZJVCk7CisKKwlkZW1vZF9zdGF0ZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQpOworCXN3aXRjaCAoZGVtb2Rfc3RhdGUpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIOgorCWNhc2UgU1RWMDkwMF9QTEhfREVURUNURUQ6CisJZGVmYXVsdDoKKwkJbG9ja2VkID0gRkFMU0U7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJbG9ja2VkID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja19maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBkZWxpbl9maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBmaWZvX2ZpZWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCWxvY2tlZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfZmllbGQpICYmCisJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja2Vkdml0X2ZpZWxkKSAmJgorCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGZpZm9fZmllbGQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbG9ja2VkOworfQorCitzdGF0aWMgZW51bSBkdmJmZV9zZWFyY2ggc3R2MDkwMF9zZWFyY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKworCXN0cnVjdCBzdHYwOTAwX3NlYXJjaF9wYXJhbXMgcF9zZWFyY2g7CisJc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8gcF9yZXN1bHQ7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiAiLCBfX2Z1bmNfXyk7CisKKwlwX3Jlc3VsdC5sb2NrZWQgPSBGQUxTRTsKKwlwX3NlYXJjaC5wYXRoID0gc3RhdGUtPmRlbW9kOworCXBfc2VhcmNoLmZyZXF1ZW5jeSA9IGMtPmZyZXF1ZW5jeTsKKwlwX3NlYXJjaC5zeW1ib2xfcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCXBfc2VhcmNoLnNlYXJjaF9yYW5nZSA9IDEwMDAwMDAwOworCXBfc2VhcmNoLmZlYyA9IFNUVjA5MDBfRkVDX1VOS05PV047CisJcF9zZWFyY2guc3RhbmRhcmQgPSBTVFYwOTAwX0FVVE9fU0VBUkNIOworCXBfc2VhcmNoLmlxX2ludmVyc2lvbiA9IFNUVjA5MDBfSVFfQVVUTzsKKwlwX3NlYXJjaC5zZWFyY2hfYWxnbyA9IFNUVjA5MDBfQkxJTkRfU0VBUkNIOworCisJaWYgKChJTlJBTkdFKDEwMDAwMCwgcF9zZWFyY2guc3ltYm9sX3JhdGUsIDcwMDAwMDAwKSkgJiYKKwkJCShJTlJBTkdFKDEwMDAwMCwgcF9zZWFyY2guc2VhcmNoX3JhbmdlLCA1MDAwMDAwMCkpKSB7CisJCXN3aXRjaCAocF9zZWFyY2gucGF0aCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPSBwX3NlYXJjaC5zdGFuZGFyZDsKKwkJCWlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlID0gcF9zZWFyY2guc3ltYm9sX3JhdGU7CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlID0gcF9zZWFyY2guc2VhcmNoX3JhbmdlOworCQkJaV9wYXJhbXMtPnR1bmVyMV9mcmVxID0gcF9zZWFyY2guZnJlcXVlbmN5OworCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID0gcF9zZWFyY2guc2VhcmNoX2FsZ287CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX2lxX2ludiA9IHBfc2VhcmNoLmlxX2ludmVyc2lvbjsKKwkJCWlfcGFyYW1zLT5kbWQxX2ZlYyA9IHBfc2VhcmNoLmZlYzsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPSBwX3NlYXJjaC5zdGFuZGFyZDsKKwkJCWlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlID0gcF9zZWFyY2guc3ltYm9sX3JhdGU7CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlID0gcF9zZWFyY2guc2VhcmNoX3JhbmdlOworCQkJaV9wYXJhbXMtPnR1bmVyMl9mcmVxID0gcF9zZWFyY2guZnJlcXVlbmN5OworCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID0gcF9zZWFyY2guc2VhcmNoX2FsZ287CisJCQlpX3BhcmFtcy0+ZG1kMl9zcmNoX2lxX2ludiA9IHBfc2VhcmNoLmlxX2ludmVyc2lvbjsKKwkJCWlfcGFyYW1zLT5kbWQyX2ZlYyA9IHBfc2VhcmNoLmZlYzsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChzdHYwOTAwX2FsZ28oZmUpID09IFNUVjA5MDBfUkFOR0VPSykgJiYKKwkJCQkJKGlfcGFyYW1zLT5lcnJzID09IFNUVjA5MDBfTk9fRVJST1IpKSB7CisJCQlzd2l0Y2ggKHBfc2VhcmNoLnBhdGgpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlwX3Jlc3VsdC5sb2NrZWQgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQ7CisJCQkJcF9yZXN1bHQuc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZDsKKwkJCQlwX3Jlc3VsdC5mcmVxdWVuY3kgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3k7CisJCQkJcF9yZXN1bHQuc3ltYm9sX3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZTsKKwkJCQlwX3Jlc3VsdC5mZWMgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mZWM7CisJCQkJcF9yZXN1bHQubW9kY29kZSA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGU7CisJCQkJcF9yZXN1bHQucGlsb3QgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5waWxvdDsKKwkJCQlwX3Jlc3VsdC5mcmFtZV9sZW5ndGggPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmFtZV9sZW5ndGg7CisJCQkJcF9yZXN1bHQuc3BlY3RydW0gPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zcGVjdHJ1bTsKKwkJCQlwX3Jlc3VsdC5yb2xsb2ZmID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMucm9sbG9mZjsKKwkJCQlwX3Jlc3VsdC5tb2R1bGF0aW9uID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCXBfcmVzdWx0LmxvY2tlZCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZDsKKwkJCQlwX3Jlc3VsdC5zdGFuZGFyZCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkOworCQkJCXBfcmVzdWx0LmZyZXF1ZW5jeSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeTsKKwkJCQlwX3Jlc3VsdC5zeW1ib2xfcmF0ZSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlOworCQkJCXBfcmVzdWx0LmZlYyA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZlYzsKKwkJCQlwX3Jlc3VsdC5tb2Rjb2RlID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZTsKKwkJCQlwX3Jlc3VsdC5waWxvdCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnBpbG90OworCQkJCXBfcmVzdWx0LmZyYW1lX2xlbmd0aCA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyYW1lX2xlbmd0aDsKKwkJCQlwX3Jlc3VsdC5zcGVjdHJ1bSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLnNwZWN0cnVtOworCQkJCXBfcmVzdWx0LnJvbGxvZmYgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5yb2xsb2ZmOworCQkJCXBfcmVzdWx0Lm1vZHVsYXRpb24gPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uOworCQkJCWJyZWFrOworCQkJfQorCisJCX0gZWxzZSB7CisJCQlwX3Jlc3VsdC5sb2NrZWQgPSBGQUxTRTsKKwkJCXN3aXRjaCAocF9zZWFyY2gucGF0aCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9lcnIpIHsKKwkJCQljYXNlIFNUVjA5MDBfSTJDX0VSUk9SOgorCQkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfTk9fRVJST1I6CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX1NFQVJDSF9GQUlMRUQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfZXJyKSB7CisJCQkJY2FzZSBTVFYwOTAwX0kyQ19FUlJPUjoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVFYwOTAwX05PX0VSUk9SOgorCQkJCWRlZmF1bHQ6CisJCQkJCWVycm9yID0gU1RWMDkwMF9TRUFSQ0hfRkFJTEVEOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0gZWxzZQorCQllcnJvciA9IFNUVjA5MDBfQkFEX1BBUkFNRVRFUjsKKworCWlmICgocF9yZXN1bHQubG9ja2VkID09IFRSVUUpICYmIChlcnJvciA9PSBTVFYwOTAwX05PX0VSUk9SKSkgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAiU2VhcmNoIFN1Y2Nlc3NcbiIpOworCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlkcHJpbnRrKEtFUk5fSU5GTyAiU2VhcmNoIEZhaWxcbiIpOworCQlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfRkFJTEVEOworCX0KKworCXJldHVybiBEVkJGRV9BTEdPX1NFQVJDSF9FUlJPUjsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBlbnVtIGZlX3N0YXR1cyAqc3RhdHVzKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50aygiJXM6ICIsIF9fZnVuY19fKTsKKworCWlmICgoc3R2MDkwMF9zdGF0dXMoc3RhdGUtPmludGVybmFsLCBzdGF0ZS0+ZGVtb2QpKSA9PSBUUlVFKSB7CisJCWRwcmludGsoIkRFTU9EIExPQ0sgT0tcbiIpOworCQkqc3RhdHVzID0gRkVfSEFTX0NBUlJJRVIKKwkJCXwgRkVfSEFTX1ZJVEVSQkkKKwkJCXwgRkVfSEFTX1NZTkMKKwkJCXwgRkVfSEFTX0xPQ0s7CisJfSBlbHNlCisJCWRwcmludGsoIkRFTU9EIExPQ0sgRkFJTFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3RyYWNrKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc3RvcF90cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHN0b3BfdHMpCit7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlzMzIgcnN0X2ZpZWxkOworCisJZG1kX3JlZyhyc3RfZmllbGQsIEYwOTAwX1AxX1JTVF9IV0FSRSwgRjA5MDBfUDJfUlNUX0hXQVJFKTsKKworCWlmIChzdG9wX3RzID09IFRSVUUpCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcnN0X2ZpZWxkLCAxKTsKKwllbHNlCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcnN0X2ZpZWxkLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfZGlzZXFjX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIG1vZGVfZmllbGQsIHJlc2V0X2ZpZWxkOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9ESVNUWF9NT0RFLCBGMDkwMF9QMl9ESVNUWF9NT0RFKTsKKwlkbWRfcmVnKHJlc2V0X2ZpZWxkLCBGMDkwMF9QMV9ESVNFUUNfUkVTRVQsIEYwOTAwX1AyX0RJU0VRQ19SRVNFVCk7CisKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIHN0YXRlLT5jb25maWctPmRpc2VxY19tb2RlKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAxKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN0djA5MDBfc3RvcF90cyhmZSwgMSk7CisJc3R2MDkwMF9kaXNlcWNfaW5pdChmZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2Rpc2VxY19zZW5kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyAsIHU4ICpEYXRhLAorCQkJCXUzMiBOYkRhdGEsIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGkgPSAwOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRElTX1BSRUNIQVJHRSwgMSk7CisJCXdoaWxlIChpIDwgTmJEYXRhKSB7CisJCQl3aGlsZSAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRklGT19GVUxMKSkKKwkJCQk7LyogY2hlY2twYXRjaCBjb21wbGFpbnMgKi8KKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ESVNUWERBVEEsIERhdGFbaV0pOworCQkJaSsrOworCQl9CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ESVNfUFJFQ0hBUkdFLCAwKTsKKwkJaSA9IDA7CisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFhfSURMRSkgIT0gMSkgJiYgKGkgPCAxMCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpKys7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ESVNfUFJFQ0hBUkdFLCAxKTsKKworCQl3aGlsZSAoaSA8IE5iRGF0YSkgeworCQkJd2hpbGUgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0ZJRk9fRlVMTCkpCisJCQkJOy8qIGNoZWNrcGF0Y2ggY29tcGxhaW5zICovCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRElTVFhEQVRBLCBEYXRhW2ldKTsKKwkJCWkrKzsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRElTX1BSRUNIQVJHRSwgMCk7CisJCWkgPSAwOworCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RYX0lETEUpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZW5kX21hc3Rlcl9jbWQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXN0cnVjdCBkdmJfZGlzZXFjX21hc3Rlcl9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCXJldHVybiBzdHYwOTAwX2Rpc2VxY19zZW5kKHN0YXRlLT5pbnRlcm5hbCwKKwkJCQljbWQtPm1zZywKKwkJCQljbWQtPm1zZ19sZW4sCisJCQkJc3RhdGUtPmRlbW9kKTsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY19taW5pX2NtZF90IGJ1cnN0KQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXMzMiBtb2RlX2ZpZWxkOworCXUzMiBkaXNlcWNfZmlmbzsKKworCWRtZF9yZWcobW9kZV9maWVsZCwgRjA5MDBfUDFfRElTVFhfTU9ERSwgRjA5MDBfUDJfRElTVFhfTU9ERSk7CisJZG1kX3JlZyhkaXNlcWNfZmlmbywgUjA5MDBfUDFfRElTVFhEQVRBLCBSMDkwMF9QMl9ESVNUWERBVEEpOworCisJc3dpdGNoIChidXJzdCkgeworCWNhc2UgU0VDX01JTklfQToKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCAzKTsvKiBVbm1vZHVsYXRlZCAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZGlzZXFjX2ZpZm8sIDB4MDApOworCQlicmVhazsKKwljYXNlIFNFQ19NSU5JX0I6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgMik7LyogTW9kdWxhdGVkICovCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBkaXNlcWNfZmlmbywgMHhmZik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfcmVjdl9zbGF2ZV9yZXBseShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgZHZiX2Rpc2VxY19zbGF2ZV9yZXBseSAqcmVwbHkpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCXMzMiBpID0gMDsKKworCXN3aXRjaCAoc3RhdGUtPmRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJcmVwbHktPm1zZ19sZW4gPSAwOworCisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlhfRU5EKSAhPSAxKSAmJiAoaSA8IDEwKSkgeworCQkJbXNsZWVwKDEwKTsKKwkJCWkrKzsKKwkJfQorCisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SWF9FTkQpKSB7CisJCQlyZXBseS0+bXNnX2xlbiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0ZJRk9fQllURU5CUik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBseS0+bXNnX2xlbjsgaSsrKQorCQkJCXJlcGx5LT5tc2dbaV0gPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ESVNSWERBVEEpOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlyZXBseS0+bXNnX2xlbiA9IDA7CisKKwkJd2hpbGUgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SWF9FTkQpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JYX0VORCkpIHsKKwkJCXJlcGx5LT5tc2dfbGVuID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRklGT19CWVRFTkJSKTsKKworCQkJZm9yIChpID0gMDsgaSA8IHJlcGx5LT5tc2dfbGVuOyBpKyspCisJCQkJcmVwbHktPm1zZ1tpXSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RJU1JYREFUQSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIG1vZGVfZmllbGQsIHJlc2V0X2ZpZWxkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgX19mdW5jX18sICgodG9uZSA9PSAwKSA/ICJPZmYiIDogIk9uIikpOworCisJZG1kX3JlZyhtb2RlX2ZpZWxkLCBGMDkwMF9QMV9ESVNUWF9NT0RFLCBGMDkwMF9QMl9ESVNUWF9NT0RFKTsKKwlkbWRfcmVnKHJlc2V0X2ZpZWxkLCBGMDkwMF9QMV9ESVNFUUNfUkVTRVQsIEYwOTAwX1AyX0RJU0VRQ19SRVNFVCk7CisKKwlpZiAodG9uZSkgeworCQkvKlNldCB0aGUgRGlzZXFDIG1vZGUgdG8gMjJLaHogY29udGludWVzIHRvbmUqLworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAxKTsKKwkJLypyZWxlYXNlIERpc2VxQyByZXNldCB0byBlbmFibGUgdGhlIDIyS0h6IHRvbmUqLworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAwKTsKKwl9IGVsc2UgeworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDApOworCQkvKm1haW50YWluIHRoZSBEaXNlcUMgcmVzZXQgdG8gZGlzYWJsZSB0aGUgMjJLSHogdG9uZSovCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcmVzZXRfZmllbGQsIDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmICgoLS0oc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQpKSA8PSAwKSB7CisKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBBY3R1YWxseSByZW1vdmluZ1xuIiwgX19mdW5jX18pOworCisJCXJlbW92ZV9pbm9kZShzdGF0ZS0+aW50ZXJuYWwpOworCQlrZnJlZShzdGF0ZS0+aW50ZXJuYWwpOworCX0KKworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHN0djA5MDBfb3BzID0geworCisJLmluZm8gPSB7CisJCS5uYW1lCQkJPSAiU1RWMDkwMCBmcm9udGVuZCIsCisJCS50eXBlCQkJPSBGRV9RUFNLLAorCQkuZnJlcXVlbmN5X21pbgkJPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4CQk9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUJPSAxMjUsCisJCS5mcmVxdWVuY3lfdG9sZXJhbmNlCT0gMCwKKwkJLnN5bWJvbF9yYXRlX21pbgk9IDEwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV9tYXgJPSA0NTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX3RvbGVyYW5jZQk9IDUwMCwKKwkJLmNhcHMJCQk9IEZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfAorCQkJCQkgIEZFX0NBTl9GRUNfM180IHwgRkVfQ0FOX0ZFQ181XzYgfAorCQkJCQkgIEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX1FQU0sgICAgfAorCQkJCQkgIEZFX0NBTl8yR19NT0RVTEFUSU9OIHwKKwkJCQkJICBGRV9DQU5fRkVDX0FVVE8KKwl9LAorCS5yZWxlYXNlCQkJPSBzdHYwOTAwX3JlbGVhc2UsCisJLmluaXQJCQkJPSBzdHYwOTAwX2luaXQsCisJLmdldF9mcm9udGVuZF9hbGdvCQk9IHN0djA5MDBfZnJvbnRlbmRfYWxnbywKKwkuaTJjX2dhdGVfY3RybAkJCT0gc3R2MDkwMF9pMmNfZ2F0ZV9jdHJsLAorCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kCQk9IHN0djA5MDBfc2VuZF9tYXN0ZXJfY21kLAorCS5kaXNlcWNfc2VuZF9idXJzdAkJPSBzdHYwOTAwX3NlbmRfYnVyc3QsCisJLmRpc2VxY19yZWN2X3NsYXZlX3JlcGx5CT0gc3R2MDkwMF9yZWN2X3NsYXZlX3JlcGx5LAorCS5zZXRfdG9uZQkJCT0gc3R2MDkwMF9zZXRfdG9uZSwKKwkuc2V0X3Byb3BlcnR5CQkJPSBzdGIwOTAwX3NldF9wcm9wZXJ0eSwKKwkuZ2V0X3Byb3BlcnR5CQkJPSBzdGIwOTAwX2dldF9wcm9wZXJ0eSwKKwkuc2VhcmNoCQkJCT0gc3R2MDkwMF9zZWFyY2gsCisJLnRyYWNrCQkJCT0gc3R2MDkwMF90cmFjaywKKwkucmVhZF9zdGF0dXMJCQk9IHN0djA5MDBfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyCQkJPSBzdHYwOTAwX3JlYWRfYmVyLAorCS5yZWFkX3NpZ25hbF9zdHJlbmd0aAkJPSBzdHYwOTAwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoLAorCS5yZWFkX3NucgkJCT0gc3R2MDkwMF9yZWFkX3NuciwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djA5MDBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzdHYwOTAwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywKKwkJCQkJaW50IGRlbW9kKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJc3RydWN0IHN0djA5MDBfaW5pdF9wYXJhbXMgaW5pdF9wYXJhbXM7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycl9zdHYwOTAwOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmIChzdGF0ZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3RhdGUtPmRlbW9kCQk9IGRlbW9kOworCXN0YXRlLT5jb25maWcJCT0gY29uZmlnOworCXN0YXRlLT5pMmNfYWRhcAkJPSBpMmM7CisKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZzdHYwOTAwX29wcywKKwkJCXNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJaW5pdF9wYXJhbXMuZG1kX3JlZl9jbGsgIAk9IGNvbmZpZy0+eHRhbDsKKwkJaW5pdF9wYXJhbXMuZGVtb2RfbW9kZQkJPSBTVFYwOTAwX0RVQUw7CisJCWluaXRfcGFyYW1zLnJvbGxvZmYJCT0gU1RWMDkwMF8zNTsKKwkJaW5pdF9wYXJhbXMucGF0aDFfdHNfY2xvY2sJPSBjb25maWctPnBhdGgxX21vZGU7CisJCWluaXRfcGFyYW1zLnR1bjFfbWFkZHJlc3MJPSBjb25maWctPnR1bjFfbWFkZHJlc3M7CisJCWluaXRfcGFyYW1zLnR1bjFfaXFfaW52ZXJzaW9uCT0gU1RWMDkwMF9JUV9OT1JNQUw7CisJCWluaXRfcGFyYW1zLnR1bmVyMV9hZGMJCT0gY29uZmlnLT50dW4xX2FkYzsKKwkJaW5pdF9wYXJhbXMucGF0aDJfdHNfY2xvY2sJPSBjb25maWctPnBhdGgyX21vZGU7CisJCWluaXRfcGFyYW1zLnR1bjJfbWFkZHJlc3MJPSBjb25maWctPnR1bjJfbWFkZHJlc3M7CisJCWluaXRfcGFyYW1zLnR1bmVyMl9hZGMJCT0gY29uZmlnLT50dW4yX2FkYzsKKwkJaW5pdF9wYXJhbXMudHVuMl9pcV9pbnZlcnNpb24JPSBTVFYwOTAwX0lRX1NXQVBQRUQ7CisKKwkJZXJyX3N0djA5MDAgPSBzdHYwOTAwX2luaXRfaW50ZXJuYWwoJnN0YXRlLT5mcm9udGVuZCwKKwkJCQkJCQkmaW5pdF9wYXJhbXMpOworCisJCWlmIChlcnJfc3R2MDkwMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisJfQorCisJZHByaW50aygiJXM6IEF0dGFjaGluZyBTVFYwOTAwIGRlbW9kdWxhdG9yKCVkKSBcbiIsIF9fZnVuY19fLCBkZW1vZCk7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CisKK2Vycm9yOgorCWRwcmludGsoIiVzOiBGYWlsZWQgdG8gYXR0YWNoIFNUVjA5MDAgZGVtb2R1bGF0b3IoJWQpIFxuIiwKKwkJX19mdW5jX18sIGRlbW9kKTsKKwlrZnJlZShzdGF0ZSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHN0djA5MDBfYXR0YWNoKTsKKworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlNldCBkZWJ1ZyIpOworCitNT0RVTEVfQVVUSE9SKCJJZ29yIE0uIExpcGxpYW5pbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVCBTVFYwOTAwIGZyb250ZW5kIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9pbml0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzODhiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2luaXQuaApAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqIHN0djA5MDBfaW5pdC5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgU1RWMDkwMF9JTklUX0gKKyNkZWZpbmUgU1RWMDkwMF9JTklUX0gKKworI2luY2x1ZGUgInN0djA5MDBfcHJpdi5oIgorCisvKiBEVkJTMiBDL04gTG9vay1VcCB0YWJsZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX3RhYmxlIHN0djA5MDBfczJfY24gPSB7CisJNTUsCisJeworCQl7IC0zMCwJMTMzNDggfSwgLypDL049LTNkQiovCisJCXsgLTIwLAkxMjY0MCB9LCAvKkMvTj0tMmRCKi8KKwkJeyAtMTAsCTExODgzIH0sIC8qQy9OPS0xZEIqLworCQl7IDAsCTExMTAxIH0sIC8qQy9OPS0wZEIqLworCQl7IDUsCTEwNzE4IH0sIC8qQy9OPTAuNWRCKi8KKwkJeyAxMCwJMTAzMzkgfSwgLypDL049MS4wZEIqLworCQl7IDE1LAk5OTQ3IH0sIC8qQy9OPTEuNWRCKi8KKwkJeyAyMCwJOTU1MiB9LCAvKkMvTj0yLjBkQiovCisJCXsgMjUsCTkxODMgfSwgLypDL049Mi41ZEIqLworCQl7IDMwLAk4Nzk5IH0sIC8qQy9OPTMuMGRCKi8KKwkJeyAzNSwJODQyMiB9LCAvKkMvTj0zLjVkQiovCisJCXsgNDAsCTgwNjIgfSwgLypDL049NC4wZEIqLworCQl7IDQ1LAk3NzA3IH0sIC8qQy9OPTQuNWRCKi8KKwkJeyA1MCwJNzM1MyB9LCAvKkMvTj01LjBkQiovCisJCXsgNTUsCTcwMjUgfSwgLypDL049NS41ZEIqLworCQl7IDYwLAk2Njg0IH0sIC8qQy9OPTYuMGRCKi8KKwkJeyA2NSwJNjMzMSB9LCAvKkMvTj02LjVkQiovCisJCXsgNzAsCTYwMzYgfSwgLypDL049Ny4wZEIqLworCQl7IDc1LAk1NzI3IH0sIC8qQy9OPTcuNWRCKi8KKwkJeyA4MCwJNTQzNyB9LCAvKkMvTj04LjBkQiovCisJCXsgODUsCTUxNjQgfSwgLypDL049OC41ZEIqLworCQl7IDkwLAk0OTAyIH0sIC8qQy9OPTkuMGRCKi8KKwkJeyA5NSwJNDY1MyB9LCAvKkMvTj05LjVkQiovCisJCXsgMTAwLAk0NDA4IH0sIC8qQy9OPTEwLjBkQiovCisJCXsgMTA1LAk0MTg3IH0sIC8qQy9OPTEwLjVkQiovCisJCXsgMTEwLAkzOTYxIH0sIC8qQy9OPTExLjBkQiovCisJCXsgMTE1LAkzNzUxIH0sIC8qQy9OPTExLjVkQiovCisJCXsgMTIwLAkzNTU4IH0sIC8qQy9OPTEyLjBkQiovCisJCXsgMTI1LAkzMzY4IH0sIC8qQy9OPTEyLjVkQiovCisJCXsgMTMwLAkzMTkxIH0sIC8qQy9OPTEzLjBkQiovCisJCXsgMTM1LAkzMDE3IH0sIC8qQy9OPTEzLjVkQiovCisJCXsgMTQwLAkyODYyIH0sIC8qQy9OPTE0LjBkQiovCisJCXsgMTQ1LAkyNzEwIH0sIC8qQy9OPTE0LjVkQiovCisJCXsgMTUwLAkyNTY1IH0sIC8qQy9OPTE1LjBkQiovCisJCXsgMTYwLAkyMzAwIH0sIC8qQy9OPTE2LjBkQiovCisJCXsgMTcwLAkyMDU4IH0sIC8qQy9OPTE3LjBkQiovCisJCXsgMTgwLAkxODQ5IH0sIC8qQy9OPTE4LjBkQiovCisJCXsgMTkwLAkxNjYzIH0sIC8qQy9OPTE5LjBkQiovCisJCXsgMjAwLAkxNDk1IH0sIC8qQy9OPTIwLjBkQiovCisJCXsgMjEwLAkxMzQ5IH0sIC8qQy9OPTIxLjBkQiovCisJCXsgMjIwLAkxMjIyIH0sIC8qQy9OPTIyLjBkQiovCisJCXsgMjMwLAkxMTEwIH0sIC8qQy9OPTIzLjBkQiovCisJCXsgMjQwLAkxMDExIH0sIC8qQy9OPTI0LjBkQiovCisJCXsgMjUwLAk5MjUgfSwgLypDL049MjUuMGRCKi8KKwkJeyAyNjAsCTg1MyB9LCAvKkMvTj0yNi4wZEIqLworCQl7IDI3MCwJNzg5IH0sIC8qQy9OPTI3LjBkQiovCisJCXsgMjgwLAk3MzQgfSwgLypDL049MjguMGRCKi8KKwkJeyAyOTAsCTY5MCB9LCAvKkMvTj0yOS4wZEIqLworCQl7IDMwMCwJNjUwIH0sIC8qQy9OPTMwLjBkQiovCisJCXsgMzEwLAk2MTkgfSwgLypDL049MzEuMGRCKi8KKwkJeyAzMjAsCTU5MyB9LCAvKkMvTj0zMi4wZEIqLworCQl7IDMzMCwJNTcxIH0sIC8qQy9OPTMzLjBkQiovCisJCXsgNDAwLAk0OTggfSwgLypDL049NDAuMGRCKi8KKwkJeyA0NTAsCTQ4NCB9LCAvKkMvTj00NS4wZEIqLworCQl7IDUwMCwJNDgxIH0gIC8qQy9OPTUwLjBkQiovCisJfQorfTsKKworLyogUkYgbGV2ZWwgQy9OIExvb2stVXAgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSBzdHYwOTAwX3JmID0geworCTE0LAorCXsKKwkJeyAtNSwgMHhDQUExIH0sIC8qLTVkQm0qLworCQl7IC0xMCwgMHhDMjI5IH0sIC8qLTEwZEJtKi8KKwkJeyAtMTUsIDB4QkIwOCB9LCAvKi0xNWRCbSovCisJCXsgLTIwLCAweEI0QkMgfSwgLyotMjBkQm0qLworCQl7IC0yNSwgMHhBRDVBIH0sIC8qLTI1ZEJtKi8KKwkJeyAtMzAsIDB4QTI5OCB9LCAvKi0zMGRCbSovCisJCXsgLTM1LCAweDk4QTggfSwgLyotMzVkQm0qLworCQl7IC00MCwgMHg4Mzg5IH0sIC8qLTQwZEJtKi8KKwkJeyAtNDUsIDB4NTlCRSB9LCAvKi00NWRCbSovCisJCXsgLTUwLCAweDNBMTQgfSwgLyotNTBkQm0qLworCQl7IC01NSwgMHgyRDExIH0sIC8qLTU1ZEJtKi8KKwkJeyAtNjAsIDB4MjEwRCB9LCAvKi02MGRCbSovCisJCXsgLTY1LCAweEExNEYgfSwgLyotNjVkQm0qLworCQl7IC03MCwgMHg3QUEgfQkvKi03MGRCbSovCisJfQorfTsKKworc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0geworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlIG1vZGNvZGU7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzI7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8yOworCXU4IGNhcl9sb29wX3BpbG90c19vbl81OworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfNTsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMTA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8xMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMjA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8yMDsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fMzA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29mZl8zMDsKKworfTsKKworc3RydWN0IHN0djA5MDBfc2hvcnRfZnJhbWVzX2Nhcl9sb29wX29wdGltIHsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiBtb2R1bGF0aW9uOworCXU4IGNhcl9sb29wX2N1dDEyXzI7ICAgIC8qIEN1dCAxLjIsICAgU1I8PTNtc3BzICAgICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzI7ICAgIC8qIEN1dCAyLjAsICAgU1I8M21zcHMgICAgICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzU7ICAgIC8qIEN1dCAxLjIsICAgMzxTUjw9N21zcHMgICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzU7ICAgIC8qIEN1dCAyLjAsICAgMzxTUjw9N21zcHMgICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzEwOyAgIC8qIEN1dCAxLjIsICAgNzxTUjw9MTVtc3BzICAqLworCXU4IGNhcl9sb29wX2N1dDIwXzEwOyAgIC8qIEN1dCAyLjAsICAgNzxTUjw9MTVtc3BzICAqLworCXU4IGNhcl9sb29wX2N1dDEyXzIwOyAgIC8qIEN1dCAxLjIsICAgMTA8U1I8PTI1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDIwXzIwOyAgIC8qIEN1dCAyLjAsICAgMTA8U1I8PTI1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDEyXzMwOyAgIC8qIEN1dCAxLjIsICAgMjU8U1I8PTQ1bXNwcyAqLworCXU4IGNhcl9sb29wX2N1dDIwXzMwOyAgIC8qIEN1dCAyLjAsICAgMTA8U1I8PTQ1bXNwcyAqLworCit9OworCisvKiBDdXQgMS54IFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIFFQU0sgMS8yIHRvIDhQU0sgOS8xMCBsb25nIEZyYW1lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0JRkVfU1RWMDkwMF9TMkNhckxvb3BbMTRdID0geworCS8qTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfUVBTS18xMiwJMHgxQywJMHgwRCwJMHgxQiwJMHgyQywJMHgzQSwJMHgxQywJMHgyQSwJMHgzQiwJMHgyQSwJMHgxQiB9LAorCXsgU1RWMDkwMF9RUFNLXzM1LAkweDJDLAkweDBELAkweDJCLAkweDJDLAkweDNBLAkweDBDLAkweDNBLAkweDJCLAkweDJBLAkweDBCIH0sCisJeyBTVFYwOTAwX1FQU0tfMjMsCTB4MkMsCTB4MEQsCTB4MkIsCTB4MkMsCTB4MEIsCTB4MEMsCTB4M0EsCTB4MUIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS18zNCwJMHgzQywJMHgwRCwJMHgzQiwJMHgxQywJMHgwQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzQ1LAkweDNDLAkweDBELAkweDNCLAkweDFDLAkweDBCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfNTYsCTB4MEQsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MEIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS184OSwJMHgwRCwJMHgwRCwJMHgzQiwJMHgxQywJMHgxQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzkxMCwJMHgxRCwJMHgwRCwJMHgzQiwJMHgxQywJMHgxQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF84UFNLXzM1LAkweDI5LAkweDNCLAkweDA5LAkweDJCLAkweDM4LAkweDBCLAkweDE4LAkweDFBLAkweDA4LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfMjMsCTB4MEEsCTB4M0IsCTB4MjksCTB4MkIsCTB4MTksCTB4MEIsCTB4MzgsCTB4MUEsCTB4MTgsCTB4MEEgfSwKKwl7IFNUVjA5MDBfOFBTS18zNCwJMHgzQSwJMHgzQiwJMHgyQSwJMHgyQiwJMHgzOSwJMHgwQiwJMHgxOSwJMHgxQSwJMHgzOCwJMHgwQSB9LAorCXsgU1RWMDkwMF84UFNLXzU2LAkweDFCLAkweDNCLAkweDBCLAkweDJCLAkweDFBLAkweDBCLAkweDM5LAkweDFBLAkweDE5LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfODksCTB4M0IsCTB4M0IsCTB4MEIsCTB4MkIsCTB4MkEsCTB4MEIsCTB4MzksCTB4MUEsCTB4MjksCTB4MzkgfSwKKwl7IFNUVjA5MDBfOFBTS185MTAsCTB4M0IsCTB4M0IsIAkweDBCLAkweDJCLCAJMHgyQSwJMHgwQiwJMHgzOSwJMHgxQSwJMHgyOSwJMHgzOSB9Cit9OworCisKKy8qIEN1dCAyLjAgVHJhY2tpbmcgY2FycmllciBsb29wIGNhcnJpZXIgUVBTSyAxLzIgdG8gOFBTSyA5LzEwIGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbQlGRV9TVFYwOTAwX1MyQ2FyTG9vcEN1dDIwWzE0XQk9IHsKKwkvKiBNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF9RUFNLXzEyLAkweDFGLAkweDNGLAkweDFFLAkweDNGLAkweDNELAkweDFGLAkweDNELAkweDNFLAkweDNELAkweDFFIH0sCisJeyBTVFYwOTAwX1FQU0tfMzUsCTB4MkYsCTB4M0YsCTB4MkUsCTB4MkYsCTB4M0QsCTB4MEYsCTB4MEUsCTB4MkUsCTB4M0QsCTB4MEUgfSwKKwl7IFNUVjA5MDBfUVBTS18yMywJMHgyRiwJMHgzRiwJMHgyRSwJMHgyRiwJMHgwRSwJMHgwRiwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzM0LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDBFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfNDUsCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MEUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS181NiwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgwRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzg5LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDFFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfOTEwLAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDFFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwXzhQU0tfMzUsCTB4M2MsCTB4MGMsCTB4MWMsCTB4M2IsCTB4MGMsCTB4M2IsCTB4MmIsCTB4MmIsCTB4MWIsCTB4MmIgfSwKKwl7IFNUVjA5MDBfOFBTS18yMywJMHgxZCwJMHgwYywJMHgzYywJMHgwYywJMHgyYywJMHgzYiwJMHgwYywJMHgyYiwJMHgyYiwJMHgyYiB9LAorCXsgU1RWMDkwMF84UFNLXzM0LAkweDBlLAkweDFjLAkweDNkLAkweDBjLAkweDBkLAkweDNiLAkweDJjLAkweDNiLAkweDBjLAkweDJiIH0sCisJeyBTVFYwOTAwXzhQU0tfNTYsCTB4MmUsCTB4M2UsCTB4MWUsCTB4MmUsCTB4MmQsCTB4MWUsCTB4M2MsCTB4MmQsCTB4MmMsCTB4MWQgfSwKKwl7IFNUVjA5MDBfOFBTS184OSwJMHgzZSwJMHgzZSwJMHgxZSwJMHgyZSwJMHgzZCwJMHgxZSwJMHgwZCwJMHgyZCwJMHgzYywJMHgxZCB9LAorCXsgU1RWMDkwMF84UFNLXzkxMCwJMHgzZSwJMHgzZSwgCTB4MWUsCTB4MmUsIAkweDNkLAkweDFlLAkweDFkLAkweDJkLAkweDBkLAkweDFkIH0KK307CisKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIDE2QVBTSyAyLzMgdG8gMzJBUFNLIDkvMTAgbG9uZyBGcmFtZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltIEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwWzExXSA9IHsKKwkvKiBNb2Rjb2QJCTJNUG9uIAkyTVBvZmYJNU1Qb24gCTVNUG9mZgkxME1Qb24gCTEwTVBvZmYJMjBNUG9uIAkyME1Qb2ZmCTMwTVBvbiAJMzBNUG9mZiAqLworCXsgU1RWMDkwMF8xNkFQU0tfMjMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MUQsCTB4MEMsCTB4M0MsCTB4MEMsCTB4MkMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzM0LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBFLAkweDBDLAkweDJELAkweDBDLAkweDFELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS180NSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgxRSwJMHgwQywJMHgzRCwJMHgwQywJMHgyRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfNTYsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MUUsCTB4MEMsCTB4M0QsCTB4MEMsCTB4MkQsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzg5LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDJFLAkweDBDLAkweDBFLAkweDBDLAkweDNELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS185MTAsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MkUsCTB4MEMsCTB4MEUsCTB4MEMsCTB4M0QsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzM0LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS180NSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfNTYsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzg5LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS185MTAsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfQorfTsKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIFFQU0sgMS80IHRvIFFQU0sgMi81IGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbM10gPSB7CisJLyogTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfUVBTS18xNCwJMHgwRiwJMHgzRiwJMHgwRSwJMHgzRiwJMHgyRCwJMHgyRiwJMHgyRCwJMHgxRiwJMHgzRCwJMHgzRSB9LAorCXsgU1RWMDkwMF9RUFNLXzEzLAkweDBGLAkweDNGLAkweDBFLAkweDNGLAkweDJELAkweDJGLAkweDNELAkweDBGLAkweDNELAkweDJFIH0sCisJeyBTVFYwOTAwX1FQU0tfMjUsCTB4MUYsCTB4M0YsCTB4MUUsCTB4M0YsCTB4M0QsCTB4MUYsCTB4M0QsCTB4M0UsCTB4M0QsCTB4MkUgfQorfTsKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyICBzaG9ydCBGcmFtZSwgY3V0IDEuMiBhbmQgMi4wICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfc2hvcnRfZnJhbWVzX2Nhcl9sb29wX29wdGltIEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbNF0JPSB7CisJLypNb2QJMk1fY3V0MS4yIDJNX2N1dDIuMCA1TV9jdXQxLjIgNU1fY3V0Mi4wIDEwTV9jdXQxLjIgMTBNX2N1dDIuMCAyME1fY3V0MS4yIDIwTV9jdXQyLjAgMzBNX2N1dDEuMiAzME1fY3V0Mi4wICovCisJeyBTVFYwOTAwX1FQU0ssCQkweDNDLAkweDJGLAkweDJCLAkweDJFLAkweDBCLAkweDBFLAkweDNBLAkweDBFLAkweDJBLAkweDNEIH0sCisJeyBTVFYwOTAwXzhQU0ssCQkweDBCLAkweDNFLAkweDJBLAkweDBFLAkweDBBLAkweDJELAkweDE5LAkweDBELAkweDA5LAkweDNDIH0sCisJeyBTVFYwOTAwXzE2QVBTSywJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgxQiwJMHgxRSwJMHgzQSwJMHgzRCwJMHgyQSwJMHgyRCB9LAorCXsgU1RWMDkwMF8zMkFQU0ssCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4M0EsCTB4M0QsCTB4MkEsCTB4MkQgfQorfTsKKworc3RhdGljIGNvbnN0IHUxNiBTVFYwOTAwX0luaXRWYWxbMTgyXVsyXSA9IHsKKwl7IFIwOTAwX09VVENGRwkJLCAweDAwCX0sCisJeyBSMDkwMF9NT0RFQ0ZHCQksIDB4ZmYJfSwKKwl7IFIwOTAwX0FHQ1JGMUNGRwksIDB4MTEJfSwKKwl7IFIwOTAwX0FHQ1JGMkNGRwksIDB4MTMJfSwKKwl7IFIwOTAwX1RTR0VORVJBTDFYCSwgMHgxNAl9LAorCXsgUjA5MDBfVFNUVE5SMgkJLCAweDIxCX0sCisJeyBSMDkwMF9UU1RUTlI0CQksIDB4MjEJfSwKKwl7IFIwOTAwX1AyX0RJU1RYQ1RMCSwgMHgyMgl9LAorCXsgUjA5MDBfUDJfRjIyVFgJLCAweGMwCX0sCisJeyBSMDkwMF9QMl9GMjJSWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AyX0RJU1JYQ1RMCSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfVE5SU1RFUFMJLCAweDg3CX0sCisJeyBSMDkwMF9QMl9UTlJHQUlOCSwgMHgwOQl9LAorCXsgUjA5MDBfUDJfRE1EQ0ZHTUQJLCAweEY5CX0sCisJeyBSMDkwMF9QMl9ERU1PRAksIDB4MDgJfSwKKwl7IFIwOTAwX1AyX0RNRENGRzMJLCAweGM0CX0sCisJeyBSMDkwMF9QMl9DQVJGUkVRCSwgMHhlZAl9LAorCXsgUjA5MDBfUDJfVE5SQ0ZHMgksIDB4MDIJfSwKKwl7IFIwOTAwX1AyX1ROUkNGRzMJLCAweDAyCX0sCisJeyBSMDkwMF9QMl9MRFQJCSwgMHhkMAl9LAorCXsgUjA5MDBfUDJfTERUMgkJLCAweGI4CX0sCisJeyBSMDkwMF9QMl9UTUdDRkcJLCAweGQyCX0sCisJeyBSMDkwMF9QMl9UTUdUSFJJU0UJLCAweDIwCX0sCisJeyBSMDkwMF9QMl9UTUdUSEZBTEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9GRUNTUFkJLCAweDg4CX0sCisJeyBSMDkwMF9QMl9GU1BZREFUQQksIDB4M2EJfSwKKwl7IFIwOTAwX1AyX0ZCRVJDUFQ0CSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfRlNQWUJFUgksIDB4MTAJfSwKKwl7IFIwOTAwX1AyX0VSUkNUUkwxCSwgMHgzNQl9LAorCXsgUjA5MDBfUDJfRVJSQ1RSTDIJLCAweGMxCX0sCisJeyBSMDkwMF9QMl9DRlJJQ0ZHCSwgMHhmOAl9LAorCXsgUjA5MDBfUDJfTk9TQ0ZHCSwgMHgxYwl9LAorCXsgUjA5MDBfUDJfRE1EVDBNCSwgMHgyMAl9LAorCXsgUjA5MDBfUDJfQ09SUkVMTUFOVAksIDB4NzAJfSwKKwl7IFIwOTAwX1AyX0NPUlJFTEFCUwksIDB4ODgJfSwKKwl7IFIwOTAwX1AyX0FHQzJPCSwgMHg1Ygl9LAorCXsgUjA5MDBfUDJfQUdDMlJFRgksIDB4MzgJfSwKKwl7IFIwOTAwX1AyX0NBUkNGRwksIDB4ZTQJfSwKKwl7IFIwOTAwX1AyX0FDTEMJCSwgMHgxQQl9LAorCXsgUjA5MDBfUDJfQkNMQwkJLCAweDA5CX0sCisJeyBSMDkwMF9QMl9DQVJIRFIJLCAweDA4CX0sCisJeyBSMDkwMF9QMl9LUkVGVE1HCSwgMHhjMQl9LAorCXsgUjA5MDBfUDJfU0ZSVVBSQVRJTwksIDB4ZjAJfSwKKwl7IFIwOTAwX1AyX1NGUkxPV1JBVElPCSwgMHg3MAl9LAorCXsgUjA5MDBfUDJfU0ZSU1RFUAksIDB4NTgJfSwKKwl7IFIwOTAwX1AyX1RNR0NGRzIJLCAweDAxCX0sCisJeyBSMDkwMF9QMl9DQVIyQ0ZHCSwgMHgyNgl9LAorCXsgUjA5MDBfUDJfQkNMQzJTMlEJLCAweDg2CX0sCisJeyBSMDkwMF9QMl9CQ0xDMlMyOAksIDB4ODYJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNwksIDB4NzcJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNgksIDB4ODUJfSwKKwl7IFIwOTAwX1AyX1NNQVBDT0VGNQksIDB4NzcJfSwKKwl7IFIwOTAwX1AyX1RTQ0ZHTAksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX0RNRENGRzIJLCAweDNiCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QwCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUMQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDIJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QzCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNAksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDUJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q2CSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNwksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDgJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q5CSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUQQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEIJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RDCSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNURAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEUJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RGCSwgMHhjZgl9LAorCXsgUjA5MDBfUDFfRElTVFhDVEwJLCAweDIyCX0sCisJeyBSMDkwMF9QMV9GMjJUWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AxX0YyMlJYCSwgMHhjMAl9LAorCXsgUjA5MDBfUDFfRElTUlhDVEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9UTlJTVEVQUwksIDB4ODcJfSwKKwl7IFIwOTAwX1AxX1ROUkdBSU4JLCAweDA5CX0sCisJeyBSMDkwMF9QMV9ETURDRkdNRAksIDB4ZjkJfSwKKwl7IFIwOTAwX1AxX0RFTU9ECSwgMHgwOAl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHMwksIDB4YzQJfSwKKwl7IFIwOTAwX1AxX0RNRFQwTQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0NBUkZSRVEJLCAweGVkCX0sCisJeyBSMDkwMF9QMV9UTlJDRkcyCSwgMHg4Mgl9LAorCXsgUjA5MDBfUDFfVE5SQ0ZHMwksIDB4MDIJfSwKKwl7IFIwOTAwX1AxX0xEVAkJLCAweGQwCX0sCisJeyBSMDkwMF9QMV9MRFQyCQksIDB4YjgJfSwKKwl7IFIwOTAwX1AxX1RNR0NGRwksIDB4ZDIJfSwKKwl7IFIwOTAwX1AxX1RNR1RIUklTRQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX1RNR1RIRkFMTAksIDB4MDAJfSwKKwl7IFIwOTAwX1AxX1NGUlVQUkFUSU8JLCAweGYwCX0sCisJeyBSMDkwMF9QMV9TRlJMT1dSQVRJTwksIDB4NzAJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHTAksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0ZFQ1NQWQksIDB4ODgJfSwKKwl7IFIwOTAwX1AxX0ZTUFlEQVRBCSwgMHgzYQl9LAorCXsgUjA5MDBfUDFfRkJFUkNQVDQJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9GU1BZQkVSCSwgMHgxMAl9LAorCXsgUjA5MDBfUDFfRVJSQ1RSTDEJLCAweDM1CX0sCisJeyBSMDkwMF9QMV9FUlJDVFJMMgksIDB4YzEJfSwKKwl7IFIwOTAwX1AxX0NGUklDRkcJLCAweGY4CX0sCisJeyBSMDkwMF9QMV9OT1NDRkcJLCAweDFjCX0sCisJeyBSMDkwMF9QMV9DT1JSRUxNQU5UCSwgMHg3MAl9LAorCXsgUjA5MDBfUDFfQ09SUkVMQUJTCSwgMHg4OAl9LAorCXsgUjA5MDBfUDFfQUdDMk8JLCAweDViCX0sCisJeyBSMDkwMF9QMV9BR0MyUkVGCSwgMHgzOAl9LAorCXsgUjA5MDBfUDFfQ0FSQ0ZHCSwgMHhlNAl9LAorCXsgUjA5MDBfUDFfQUNMQwkJLCAweDFBCX0sCisJeyBSMDkwMF9QMV9CQ0xDCQksIDB4MDkJfSwKKwl7IFIwOTAwX1AxX0NBUkhEUgksIDB4MDgJfSwKKwl7IFIwOTAwX1AxX0tSRUZUTUcJLCAweGMxCX0sCisJeyBSMDkwMF9QMV9TRlJTVEVQCSwgMHg1OAl9LAorCXsgUjA5MDBfUDFfVE1HQ0ZHMgksIDB4MDEJfSwKKwl7IFIwOTAwX1AxX0NBUjJDRkcJLCAweDI2CX0sCisJeyBSMDkwMF9QMV9CQ0xDMlMyUQksIDB4ODYJfSwKKwl7IFIwOTAwX1AxX0JDTEMyUzI4CSwgMHg4Ngl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY3CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY2CSwgMHg4NQl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY1CSwgMHg3Nwl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHMgksIDB4M2IJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDAJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1QxCSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUMgksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDMJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q0CSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUNQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDYJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q3CSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUOAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDkJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RBCSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUQgksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEMJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RECSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNURQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEYJLCAweGNmCX0sCisJeyBSMDkwMF9HRU5DRkcJCSwgMHgxZAl9LAorCXsgUjA5MDBfTkJJVEVSX05GNAksIDB4MzcJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjUJLCAweDI5CX0sCisJeyBSMDkwMF9OQklURVJfTkY2CSwgMHgzNwl9LAorCXsgUjA5MDBfTkJJVEVSX05GNwksIDB4MzMJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjgJLCAweDMxCX0sCisJeyBSMDkwMF9OQklURVJfTkY5CSwgMHgyZgl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTAJLCAweDM5CX0sCisJeyBSMDkwMF9OQklURVJfTkYxMQksIDB4M2EJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjEyCSwgMHgyOQl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTMJLCAweDM3CX0sCisJeyBSMDkwMF9OQklURVJfTkYxNAksIDB4MzMJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjE1CSwgMHgyZgl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTYJLCAweDM5CX0sCisJeyBSMDkwMF9OQklURVJfTkYxNwksIDB4M2EJfSwKKwl7IFIwOTAwX05CSVRFUk5PRVJSCSwgMHgwNAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjQJLCAweDBDCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNQksIDB4MEYJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY2CSwgMHgxMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjcJLCAweDE0CX0sCisJeyBSMDkwMF9HQUlOTExSX05GOAksIDB4MTcJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY5CSwgMHgxOQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEwCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjExCSwgMHgyMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEyCSwgMHgwRAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEzCSwgMHgwRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE0CSwgMHgxMwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE1CSwgMHgxQQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE2CSwgMHgxRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE3CSwgMHgyMQl9LAorCXsgUjA5MDBfUkNDRkdICQksIDB4MjAJfSwKKwl7IFIwOTAwX1AxX0ZFQ00JCSwgMHgwMQl9LCAvKmRpc2FibGUgRFNTIG1vZGVzKi8KKwl7IFIwOTAwX1AyX0ZFQ00JCSwgMHgwMQl9LCAvKmRpc2FibGUgRFNTIG1vZGVzKi8KKwl7IFIwOTAwX1AxX1BSVklUCSwgMHgyRgl9LCAvKmRpc2FibGUgcHVuY3R1cmUgcmF0ZSA2LzcqLworCXsgUjA5MDBfUDJfUFJWSVQJLCAweDJGCX0sIC8qZGlzYWJsZSBwdW5jdHVyZSByYXRlIDYvNyovCisJeyBSMDkwMF9TVFJPVVQxQ0ZHCSwgMHg0Ywl9LAorCXsgUjA5MDBfU1RST1VUMkNGRwksIDB4NGMJfSwKKwl7IFIwOTAwX0NMS09VVDFDRkcJLCAweDUwCX0sCisJeyBSMDkwMF9DTEtPVVQyQ0ZHCSwgMHg1MAl9LAorCXsgUjA5MDBfRFBOMUNGRwkJLCAweDRhCX0sCisJeyBSMDkwMF9EUE4yQ0ZHCQksIDB4NGEJfSwKKwl7IFIwOTAwX0RBVEE3MUNGRwksIDB4NTIJfSwKKwl7IFIwOTAwX0RBVEE3MkNGRwksIDB4NTIJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHTQksIDB4YzAJfSwKKwl7IFIwOTAwX1AyX1RTQ0ZHTQksIDB4YzAJfSwKKwl7IFIwOTAwX1AxX1RTQ0ZHSAksIDB4ZTAJfSwgLyogRFZCLUNJIHRpbWluZ3MgKi8KKwl7IFIwOTAwX1AyX1RTQ0ZHSAksIDB4ZTAJfSwgLyogRFZCLUNJIHRpbWluZ3MgKi8KKwl7IFIwOTAwX1AxX1RTU1BFRUQJLCAweDQwCX0sCisJeyBSMDkwMF9QMl9UU1NQRUVECSwgMHg0MAl9LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBTVFYwOTAwX0N1dDIwX0FkZE9uVmFsWzMyXVsyXSA9IHsKKwl7IFIwOTAwX1AyX0RNRENGRzMJLCAweGU4CX0sCisJeyBSMDkwMF9QMl9ETURDRkc0CSwgMHgxMAl9LAorCXsgUjA5MDBfUDJfQ0FSRlJFUQksIDB4MzgJfSwKKwl7IFIwOTAwX1AyX0NBUkhEUgksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX0tSRUZUTUcJLCAweDVhCX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjcJLCAweDA2CX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjYJLCAweDAwCX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjUJLCAweDA0CX0sCisJeyBSMDkwMF9QMl9OT1NDRkcJLCAweDBjCX0sCisJeyBSMDkwMF9QMV9ETURDRkczCSwgMHhlOAl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHNAksIDB4MTAJfSwKKwl7IFIwOTAwX1AxX0NBUkZSRVEJLCAweDM4CX0sCisJeyBSMDkwMF9QMV9DQVJIRFIJLCAweDIwCX0sCisJeyBSMDkwMF9QMV9LUkVGVE1HCSwgMHg1YQl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY3CSwgMHgwNgl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY2CSwgMHgwMAl9LAorCXsgUjA5MDBfUDFfU01BUENPRUY1CSwgMHgwNAl9LAorCXsgUjA5MDBfUDFfTk9TQ0ZHCSwgMHgwYwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjQJLCAweDIxCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNQksIDB4MjEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY2CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjcJLCAweDFGCX0sCisJeyBSMDkwMF9HQUlOTExSX05GOAksIDB4MUUJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY5CSwgMHgxRQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEwCSwgMHgxRAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjExCSwgMHgxQgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEyCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjEzCSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE0CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE1CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE2CSwgMHgyMAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjE3CSwgMHgyMQl9CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmQ1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9wcml2LmgKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBzdHYwOTAwX3ByaXYuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfUFJJVl9ICisjZGVmaW5lIFNUVjA5MDBfUFJJVl9ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2RlZmluZSBBQlMoWCkgKChYKSA8IDAgPyAoLTEgKiAoWCkpIDogKFgpKQorI2RlZmluZSBJTlJBTkdFKFgsIFksIFopICgoKChYKSA8PSAoWSkpICYmICgoWSkgPD0gKFopKSkgXAorCQl8fCAoKChaKSA8PSAoWSkpICYmICgoWSkgPD0gKFgpKSkgPyAxIDogMCkKKworI2lmbmRlZiBNQUtFV09SRAorI2RlZmluZSBNQUtFV09SRChYLCBZKSAoKChYKSA8PCA4KSArIChZKSkKKyNlbmRpZgorCisjZGVmaW5lIExTQihYKSAoKChYKSAmIDB4RkYpKQorI2RlZmluZSBNU0IoWSkgKCgoWSkgPj4gOCkgJiAweEZGKQorCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRSAoMSA9PSAxKQorI2VuZGlmCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFICghVFJVRSkKKyNlbmRpZgorCisjZGVmaW5lCWRtZF9yZWcoYSwgYiwgYykgXAorCWRvIHsgXAorCQlhID0gMDsgXAorCQlzd2l0Y2ggKGRlbW9kKSB7IFwKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6IFwKKwkJZGVmYXVsdDogXAorCQkJYSA9IGI7IFwKKwkJCWJyZWFrOyBcCisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOiBcCisJCQlhID0gYzsgXAorCQkJYnJlYWs7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkbWRfY2hvb3NlKGEsIGIpCShkZW1vZCA9IFNUVjA5MDBfREVNT0RfMiA/IGIgOiBhKSkKKworc3RhdGljIGludCBzdHZkZWJ1ZzsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHN0dmRlYnVnKSBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RWMDkwMF9NQVhMT09LVVBTSVpFIDUwMAorI2RlZmluZSBTVFYwOTAwX0JMSU5EX1NFQVJDSF9BR0MyX1RIIDcwMAorCisvKiBPbmUgcG9pbnQgb2YgdGhlIGxvb2t1cCB0YWJsZSAqLworc3RydWN0IHN0djAwMF9sb29rcG9pbnQgeworCXMzMiByZWFsdmFsOy8qIHJlYWwgdmFsdWUgKi8KKwlzMzIgcmVndmFsOy8qIGJpbmFyeSB2YWx1ZSAqLworfTsKKworLyogTG9va3VwIHRhYmxlIGRlZmluaXRpb24gKi8KK3N0cnVjdCBzdHYwOTAwX3RhYmxleworCXMzMiBzaXplOy8qIFNpemUgb2YgdGhlIGxvb2t1cCB0YWJsZSAqLworCXN0cnVjdCBzdHYwMDBfbG9va3BvaW50IHRhYmxlW1NUVjA5MDBfTUFYTE9PS1VQU0laRV07LyogTG9va3VwIHRhYmxlICovCit9OworCitlbnVtIGZlX3N0djA5MDBfZXJyb3IgeworCVNUVjA5MDBfTk9fRVJST1IgPSAwLAorCVNUVjA5MDBfSU5WQUxJRF9IQU5ETEUsCisJU1RWMDkwMF9CQURfUEFSQU1FVEVSLAorCVNUVjA5MDBfSTJDX0VSUk9SLAorCVNUVjA5MDBfU0VBUkNIX0ZBSUxFRCwKK307CisKK2VudW0gZmVfc3R2MDkwMF9jbG9ja190eXBlIHsKKwlTVFYwOTAwX1VTRV9SRUdJU1RFUlNfREVGQVVMVCwKKwlTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSywvKlNlcmlhbCBwdW5jdHVyZWQgY2xvY2sgKi8KKwlTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCVNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0ssLypQYXJhbGxlbCBwdW5jdHVyZWQgY2xvY2sgKi8KKwlTVFYwOTAwX0RWQkNJX0NMT0NLLypQYXJhbGxlbCBjb250aW51ZXMgY2xvY2sgOiBEVkJDSSAqLworfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZSB7CisJU1RWMDkwMF9TRUFSQ0ggPSAwLAorCVNUVjA5MDBfUExIX0RFVEVDVEVELAorCVNUVjA5MDBfRFZCUzJfRk9VTkQsCisJU1RWMDkwMF9EVkJTX0ZPVU5ECisKK307CisKK2VudW0gZmVfc3R2MDkwMF9sZHBjX3N0YXRlIHsKKwlTVFYwOTAwX1BBVEgxX09GRl9QQVRIMl9PRkYgPSAwLAorCVNUVjA5MDBfUEFUSDFfT05fUEFUSDJfT0ZGID0gMSwKKwlTVFYwOTAwX1BBVEgxX09GRl9QQVRIMl9PTiA9IDIsCisJU1RWMDkwMF9QQVRIMV9PTl9QQVRIMl9PTiA9IDMKK307CisKK2VudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSB7CisJU1RWMDkwMF9OT0FHQzEgPSAwLAorCVNUVjA5MDBfQUdDMU9LLAorCVNUVjA5MDBfTk9USU1JTkcsCisJU1RWMDkwMF9BTkFMT0dDQVJSSUVSLAorCVNUVjA5MDBfVElNSU5HT0ssCisJU1RWMDkwMF9OT0FHQzIsCisJU1RWMDkwMF9BR0MyT0ssCisJU1RWMDkwMF9OT0NBUlJJRVIsCisJU1RWMDkwMF9DQVJSSUVST0ssCisJU1RWMDkwMF9OT0RBVEEsCisJU1RWMDkwMF9EQVRBT0ssCisJU1RWMDkwMF9PVVRPRlJBTkdFLAorCVNUVjA5MDBfUkFOR0VPSworfTsKKworZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSB7CisJU1RWMDkwMF9ERU1PRF8xLAorCVNUVjA5MDBfREVNT0RfMgorfTsKKworZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHsKKwlTVFYwOTAwX0RWQlMxX1NUQU5EQVJELC8qIEZvdW5kIFN0YW5kYXJkKi8KKwlTVFYwOTAwX0RWQlMyX1NUQU5EQVJELAorCVNUVjA5MDBfRFNTX1NUQU5EQVJELAorCVNUVjA5MDBfVFVSQk9DT0RFX1NUQU5EQVJELAorCVNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRAorfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZCB7CisJU1RWMDkwMF9BVVRPX1NFQVJDSCwKKwlTVFYwOTAwX1NFQVJDSF9EVkJTMSwvKiBTZWFyY2ggU3RhbmRhcmQqLworCVNUVjA5MDBfU0VBUkNIX0RWQlMyLAorCVNUVjA5MDBfU0VBUkNIX0RTUywKKwlTVFYwOTAwX1NFQVJDSF9UVVJCT0NPREUKK307CisKK2VudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbyB7CisJU1RWMDkwMF9CTElORF9TRUFSQ0gsLyogb2Zmc2V0IGZyZXEgYW5kIFNSIGFyZSBVbmtub3duICovCisJU1RWMDkwMF9DT0xEX1NUQVJULC8qIG9ubHkgdGhlIFNSIGlzIGtub3duICovCisJU1RWMDkwMF9XQVJNX1NUQVJULyogb2Zmc2V0IGZyZXEgYW5kIFNSIGFyZSBrbm93biAqLworfTsKKworZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24geworCVNUVjA5MDBfUVBTSywKKwlTVFYwOTAwXzhQU0ssCisJU1RWMDkwMF8xNkFQU0ssCisJU1RWMDkwMF8zMkFQU0ssCisJU1RWMDkwMF9VTktOT1dOCit9OworCitlbnVtIGZlX3N0djA5MDBfbW9kY29kZSB7CisJU1RWMDkwMF9EVU1NWV9QTEYsCisJU1RWMDkwMF9RUFNLXzE0LAorCVNUVjA5MDBfUVBTS18xMywKKwlTVFYwOTAwX1FQU0tfMjUsCisJU1RWMDkwMF9RUFNLXzEyLAorCVNUVjA5MDBfUVBTS18zNSwKKwlTVFYwOTAwX1FQU0tfMjMsCisJU1RWMDkwMF9RUFNLXzM0LAorCVNUVjA5MDBfUVBTS180NSwKKwlTVFYwOTAwX1FQU0tfNTYsCisJU1RWMDkwMF9RUFNLXzg5LAorCVNUVjA5MDBfUVBTS185MTAsCisJU1RWMDkwMF84UFNLXzM1LAorCVNUVjA5MDBfOFBTS18yMywKKwlTVFYwOTAwXzhQU0tfMzQsCisJU1RWMDkwMF84UFNLXzU2LAorCVNUVjA5MDBfOFBTS184OSwKKwlTVFYwOTAwXzhQU0tfOTEwLAorCVNUVjA5MDBfMTZBUFNLXzIzLAorCVNUVjA5MDBfMTZBUFNLXzM0LAorCVNUVjA5MDBfMTZBUFNLXzQ1LAorCVNUVjA5MDBfMTZBUFNLXzU2LAorCVNUVjA5MDBfMTZBUFNLXzg5LAorCVNUVjA5MDBfMTZBUFNLXzkxMCwKKwlTVFYwOTAwXzMyQVBTS18zNCwKKwlTVFYwOTAwXzMyQVBTS180NSwKKwlTVFYwOTAwXzMyQVBTS181NiwKKwlTVFYwOTAwXzMyQVBTS184OSwKKwlTVFYwOTAwXzMyQVBTS185MTAsCisJU1RWMDkwMF9NT0RDT0RFX1VOS05PV04KK307CisKK2VudW0gZmVfc3R2MDkwMF9mZWMgey8qRFZCUzEsIERTUyBhbmQgdHVyYm8gY29kZSBwdW5jdHVyZSByYXRlKi8KKwlTVFYwOTAwX0ZFQ18xXzIgPSAwLAorCVNUVjA5MDBfRkVDXzJfMywKKwlTVFYwOTAwX0ZFQ18zXzQsCisJU1RWMDkwMF9GRUNfNF81LC8qZm9yIHR1cmJvIGNvZGUgb25seSovCisJU1RWMDkwMF9GRUNfNV82LAorCVNUVjA5MDBfRkVDXzZfNywvKmZvciBEU1Mgb25seSAqLworCVNUVjA5MDBfRkVDXzdfOCwKKwlTVFYwOTAwX0ZFQ184XzksLypmb3IgdHVyYm8gY29kZSBvbmx5Ki8KKwlTVFYwOTAwX0ZFQ19VTktOT1dOCit9OworCitlbnVtIGZlX3N0djA5MDBfZnJhbWVfbGVuZ3RoIHsKKwlTVFYwOTAwX0xPTkdfRlJBTUUsCisJU1RWMDkwMF9TSE9SVF9GUkFNRQorfTsKKworZW51bSBmZV9zdHYwOTAwX3BpbG90IHsKKwlTVFYwOTAwX1BJTE9UU19PRkYsCisJU1RWMDkwMF9QSUxPVFNfT04KK307CisKK2VudW0gZmVfc3R2MDkwMF9yb2xsb2ZmIHsKKwlTVFYwOTAwXzM1LAorCVNUVjA5MDBfMjUsCisJU1RWMDkwMF8yMAorfTsKKworZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcSB7CisJU1RWMDkwMF9JUV9BVVRPLAorCVNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QsCisJU1RWMDkwMF9JUV9GT1JDRV9OT1JNQUwsCisJU1RWMDkwMF9JUV9GT1JDRV9TV0FQUEVECit9OworCitlbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uIHsKKwlTVFYwOTAwX0lRX05PUk1BTCwKKwlTVFYwOTAwX0lRX1NXQVBQRUQKK307CisKK2VudW0gZmVfc3R2MDkwMF9kaXNlcWNfbW9kZSB7CisJU1RWMDkwMF8yMktIWl9Db250aW51ZXMgPSAwLAorCVNUVjA5MDBfRElTRVFDXzJfM19QV00gPSAyLAorCVNUVjA5MDBfRElTRVFDXzNfM19QV00gPSAzLAorCVNUVjA5MDBfRElTRVFDXzJfM19FTlZFTE9QID0gNCwKKwlTVFYwOTAwX0RJU0VRQ18zXzNfRU5WRUxPUCA9IDUKK307CisKK2VudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlIHsKKwlTVFYwOTAwX1NJTkdMRSA9IDAsCisJU1RWMDkwMF9EVUFMCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9pbml0X3BhcmFtc3sKKwl1MzIJZG1kX3JlZl9jbGs7LyogUmVmcmVuY2UsSW5wdXQgY2xvY2sgZm9yIHRoZSBkZW1vZCBpbiBIeiAqLworCisJLyogRGVtb2R1bGF0b3IgVHlwZSAoc2luZ2xlIGRlbW9kIG9yIGR1YWwgZGVtb2QpICovCisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUJZGVtb2RfbW9kZTsKKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZgkJcm9sbG9mZjsKKwllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZQlwYXRoMV90c19jbG9jazsKKworCXU4CXR1bjFfbWFkZHJlc3M7CisJaW50CXR1bmVyMV9hZGM7CisKKwkvKiBJUSBmcm9tIHRoZSB0dW5lcjEgdG8gdGhlIGRlbW9kICovCisJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4xX2lxX2ludmVyc2lvbjsKKwllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZQlwYXRoMl90c19jbG9jazsKKworCXU4CXR1bjJfbWFkZHJlc3M7CisJaW50CXR1bmVyMl9hZGM7CisKKwkvKiBJUSBmcm9tIHRoZSB0dW5lcjIgdG8gdGhlIGRlbW9kICovCisJZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbgl0dW4yX2lxX2ludmVyc2lvbjsKK307CisKK3N0cnVjdCBzdHYwOTAwX3NlYXJjaF9wYXJhbXMgeworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0JcGF0aDsvKiBQYXRoIFVzZWQgZGVtb2QxIG9yIDIgKi8KKworCXUzMglmcmVxdWVuY3k7LyogVHJhbnNwb25kZXIgZnJlcXVlbmN5IChpbiBLSHopICovCisJdTMyCXN5bWJvbF9yYXRlOy8qIFRyYW5zcG9uZGVyIHN5bWJvbCByYXRlICAoaW4gYmRzKSovCisJdTMyCXNlYXJjaF9yYW5nZTsvKiBSYW5nZSBvZiB0aGUgc2VhcmNoIChpbiBIeikgKi8KKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJc3RhbmRhcmQ7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlmZWM7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUJCW1vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9pcQlpcV9pbnZlcnNpb247CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCXNlYXJjaF9hbGdvOworCit9OworCitzdHJ1Y3Qgc3R2MDkwMF9zaWduYWxfaW5mbyB7CisJaW50CWxvY2tlZDsvKiBUcmFuc3BvbmRlciBsb2NrZWQgKi8KKwl1MzIJZnJlcXVlbmN5Oy8qIFRyYW5zcG9uZGVyIGZyZXF1ZW5jeSAoaW4gS0h6KSAqLworCXUzMglzeW1ib2xfcmF0ZTsvKiBUcmFuc3BvbmRlciBzeW1ib2wgcmF0ZSAgKGluIE1iZHMpICovCisKKwllbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQJc3RhbmRhcmQ7CisJZW51bSBmZV9zdHYwOTAwX2ZlYwkJCWZlYzsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJCW1vZGNvZGU7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24JCW1vZHVsYXRpb247CisJZW51bSBmZV9zdHYwOTAwX3BpbG90CQkJcGlsb3Q7CisJZW51bSBmZV9zdHYwOTAwX2ZyYW1lX2xlbmd0aAkJZnJhbWVfbGVuZ3RoOworCWVudW0gc3R2MDkwMF9pcV9pbnZlcnNpb24JCXNwZWN0cnVtOworCWVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmCQkJcm9sbG9mZjsKKworCXMzMiBQb3dlcjsvKiBQb3dlciBvZiB0aGUgUkYgc2lnbmFsIChkQm0pICovCisJczMyIENfTjsvKiBDYXJyaWVyIHRvIG5vaXNlIHJhdGlvIChkQiB4MTApKi8KKwl1MzIgQkVSOy8qIEJpdCBlcnJvciByYXRlICh4MTBeNykgKi8KKworfTsKKworc3RydWN0IHN0djA5MDBfaW50ZXJuYWx7CisJczMyCXF1YXJ0ejsKKwlzMzIJbWNsazsKKwkvKiBtYW51YWwgUm9sbE9mZiBmb3IgRFZCUzEvRFNTIG9ubHkgKi8KKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZgkJcm9sbG9mZjsKKwkvKiBEZW1vZHVsYXRvciB1c2UgZm9yIHNpbmdsZSBkZW1vZCBvciBmb3IgZHVhbCBkZW1vZCkgKi8KKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbW9kZQlkZW1vZF9tb2RlOworCisJLypEZW1vZCAxKi8KKwlzMzIJdHVuZXIxX2ZyZXE7CisJczMyCXR1bmVyMV9idzsKKwlzMzIJZG1kMV9zeW1ib2xfcmF0ZTsKKwlzMzIJZG1kMV9zcmNoX3JhbmdlOworCisJLyogYWxnb3JpdGhtIGZvciBzZWFyY2ggQmxpbmQsIENvbGQgb3IgV2FybSovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCWRtZDFfc3JjaF9hbGdvOworCS8qIHNlYXJjaCBzdGFuZGFyZDogQXV0bywgRFZCUzEvRFNTIG9ubHkgb3IgRFZCUzIgb25seSovCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZAlkbWQxX3NyY2hfc3RhbmRhcmQ7CisJLyogaW52ZXJzaW9uIHNlYXJjaCA6IGF1dG8sIGF1dG8gbm9ybWEgZmlyc3QsIG5vcm1hbCBvciBpbnZlcnRlZCAqLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEJZG1kMV9zcmNoX2lxX2ludjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJZG1kMV9tb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCWRtZDFfbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlkbWQxX2ZlYzsKKworCXN0cnVjdCBzdHYwOTAwX3NpZ25hbF9pbmZvCWRtZDFfcnNsdHM7CisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlCWRtZDFfc3RhdGU7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJCWRtZDFfZXJyOworCisJLypEZW1vZCAyKi8KKwlzMzIJdHVuZXIyX2ZyZXE7CisJczMyCXR1bmVyMl9idzsKKwlzMzIJZG1kMl9zeW1ib2xfcmF0ZTsKKwlzMzIJZG1kMl9zcmNoX3JhbmdlOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvCWRtZDJfc3JjaF9hbGdvOworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJZG1kMl9zcmNoX3N0bmRyZDsKKwkvKiBpbnZlcnNpb24gc2VhcmNoIDogYXV0bywgYXV0byBub3JtYWwgZmlyc3QsIG5vcm1hbCBvciBpbnZlcnRlZCAqLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEJZG1kMl9zcmNoX2lxX2ludjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZQkJZG1kMl9tb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCWRtZDJfbW9kdWxhdGlvbjsKKwllbnVtIGZlX3N0djA5MDBfZmVjCQlkbWQyX2ZlYzsKKworCS8qIHJlc3VsdHMgb2YgdGhlIHNlYXJjaCovCisJc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8JZG1kMl9yc2x0czsKKwkvKiBjdXJyZW50IHN0YXRlIG9mIHRoZSBzZWFyY2ggYWxnb3JpdGhtICovCisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlCWRtZDJfc3RhdGU7CisKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJCWRtZDJfZXJyOworCisJc3RydWN0IGkyY19hZGFwdGVyCSppMmNfYWRhcDsKKwl1OAkJCWkyY19hZGRyOworCXU4CQkJY2xrbW9kZTsvKiAwIGZvciBDTEtJLCAyIGZvciBYVEFMSSAqLworCXU4CQkJY2hpcF9pZDsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IJZXJyczsKKwlpbnQgZG1kc191c2VkOworfTsKKworLyogc3RhdGUgZm9yIGVhY2ggZGVtb2QgKi8KK3N0cnVjdCBzdHYwOTAwX3N0YXRlIHsKKwkvKiBwb2ludGVyIGZvciBpbnRlcm5hbCBwYXJhbXMsIG9uZSBmb3IgZWFjaCBwYWlyIG9mIGRlbW9kcyAqLworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsCQkqaW50ZXJuYWw7CisJc3RydWN0IGkyY19hZGFwdGVyCQkqaTJjX2FkYXA7CisJY29uc3Qgc3RydWN0IHN0djA5MDBfY29uZmlnCSpjb25maWc7CisJc3RydWN0IGR2Yl9mcm9udGVuZAkJZnJvbnRlbmQ7CisJaW50IGRlbW9kOworfTsKKworZXh0ZXJuIHMzMiBnZTJjb21wKHMzMiBhLCBzMzIgd2lkdGgpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3dyaXRlX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJdTE2IHJlZ19hZGRyLCB1OCByZWdfZGF0YSk7CisKK2V4dGVybiB1OCBzdHYwOTAwX3JlYWRfcmVnKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQl1MTYgcmVnX2FkZHIpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3dyaXRlX2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUzMiBsYWJlbCwgdTggdmFsKTsKKworZXh0ZXJuIHU4IHN0djA5MDBfZ2V0X2JpdHMoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUzMiBsYWJlbCk7CisKK2V4dGVybiBpbnQgc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCwgczMyIHRpbWVfb3V0KTsKK2V4dGVybiBpbnQgc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2Uoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfc2V0X3R1bmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5LAorCQkJCXUzMiBiYW5kd2lkdGgpOworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9zdGFydF9zZWFyY2goc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gdTggc3R2MDkwMF9nZXRfb3B0aW1fY2Fycl9sb29wKHMzMiBzcmF0ZSwKKwkJCQllbnVtIGZlX3N0djA5MDBfbW9kY29kZSBtb2Rjb2RlLAorCQkJCXMzMiBwaWxvdCwgdTggY2hpcF9pZCk7CisKK2V4dGVybiB1OCBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3AoczMyIHNyYXRlLAorCQkJCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uIG1vZHVsYXRpb24sCisJCQkJdTggY2hpcF9pZCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiBlbnVtIGZlX3N0djA5MDBfdHJhY2tpbmdfc3RhbmRhcmQgc3R2MDkwMF9nZXRfc3RhbmRhcmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRmOWNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKQEAgLTAsMCArMSwzNzg3IEBACisvKgorICogc3R2MDkwMF9yZWcuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfUkVHX0gKKyNkZWZpbmUgU1RWMDkwMF9SRUdfSAorCisvKk1JRCovCisjZGVmaW5lIFIwOTAwX01JRCAgMHhmMTAwCisjZGVmaW5lIEYwOTAwX01DSElQX0lERU5UICAweGYxMDAwMGYwCisjZGVmaW5lIEYwOTAwX01SRUxFQVNFICAweGYxMDAwMDBmCisKKy8qREFDUjEqLworI2RlZmluZSBSMDkwMF9EQUNSMSAgMHhmMTEzCisjZGVmaW5lIEYwOTAwX0RBQ19NT0RFICAweGYxMTMwMGUwCisjZGVmaW5lIEYwOTAwX0RBQ19WQUxVRTEgIDB4ZjExMzAwMGYKKworLypEQUNSMiovCisjZGVmaW5lIFIwOTAwX0RBQ1IyICAweGYxMTQKKyNkZWZpbmUgRjA5MDBfREFDX1ZBTFVFMCAgMHhmMTE0MDBmZgorCisvKk9VVENGRyovCisjZGVmaW5lIFIwOTAwX09VVENGRyAgMHhmMTFjCisjZGVmaW5lIEYwOTAwX0lOVl9EQVRBNiAgMHhmMTFjMDA4MAorI2RlZmluZSBGMDkwMF9PVVRTRVJSUzFfSFogIDB4ZjExYzAwNDAKKyNkZWZpbmUgRjA5MDBfT1VUU0VSUlMyX0haICAweGYxMWMwMDIwCisjZGVmaW5lIEYwOTAwX09VVFNFUlJTM19IWiAgMHhmMTFjMDAxMAorI2RlZmluZSBGMDkwMF9PVVRQQVJSUzNfSFogIDB4ZjExYzAwMDgKKyNkZWZpbmUgRjA5MDBfT1VUSFozX0NPTlRST0wgIDB4ZjExYzAwMDcKKworLypNT0RFQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfTU9ERUNGRyAgMHhmMTFkCisjZGVmaW5lIEYwOTAwX0ZFQ1NQWV9TRUxfMiAgMHhmMTFkMDAyMAorI2RlZmluZSBGMDkwMF9IV0FSRV9TRUxfMiAgMHhmMTFkMDAxMAorI2RlZmluZSBGMDkwMF9QS1RERUxfU0VMXzIgIDB4ZjExZDAwMDgKKyNkZWZpbmUgRjA5MDBfRElTRVFDX1NFTF8yICAweGYxMWQwMDA0CisjZGVmaW5lIEYwOTAwX1ZJVF9TRUxfMiAgMHhmMTFkMDAwMgorI2RlZmluZSBGMDkwMF9ERU1PRF9TRUxfMiAgMHhmMTFkMDAwMQorCisvKklSUVNUQVRVUzMqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMzICAweGYxMjAKKyNkZWZpbmUgRjA5MDBfU1BMTF9MT0NLICAweGYxMjAwMDIwCisjZGVmaW5lIEYwOTAwX1NTVFJFQU1fTENLXzMgIDB4ZjEyMDAwMTAKKyNkZWZpbmUgRjA5MDBfU1NUUkVBTV9MQ0tfMiAgMHhmMTIwMDAwOAorI2RlZmluZSBGMDkwMF9TU1RSRUFNX0xDS18xICAweGYxMjAwMDA0CisjZGVmaW5lIEYwOTAwX1NEVkJTMV9QUkZfMiAgMHhmMTIwMDAwMgorI2RlZmluZSBGMDkwMF9TRFZCUzFfUFJGXzEgIDB4ZjEyMDAwMDEKKworLypJUlFTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfSVJRU1RBVFVTMiAgMHhmMTIxCisjZGVmaW5lIEYwOTAwX1NTUFlfRU5EU0lNXzMgIDB4ZjEyMTAwODAKKyNkZWZpbmUgRjA5MDBfU1NQWV9FTkRTSU1fMiAgMHhmMTIxMDA0MAorI2RlZmluZSBGMDkwMF9TU1BZX0VORFNJTV8xICAweGYxMjEwMDIwCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfRVJST1JfMiAgMHhmMTIxMDAxMAorI2RlZmluZSBGMDkwMF9TUEtUREVMX0xPQ0tCXzIgIDB4ZjEyMTAwMDgKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLXzIgIDB4ZjEyMTAwMDQKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9FUlJPUl8xICAweGYxMjEwMDAyCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfTE9DS0JfMSAgMHhmMTIxMDAwMQorCisvKklSUVNUQVRVUzEqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMxICAweGYxMjIKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLXzEgIDB4ZjEyMjAwODAKKyNkZWZpbmUgRjA5MDBfU0VYVFBJTkIyICAweGYxMjIwMDQwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU4yICAweGYxMjIwMDIwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU5CMSAgMHhmMTIyMDAxMAorI2RlZmluZSBGMDkwMF9TRVhUUElOMSAgMHhmMTIyMDAwOAorI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS0JfMiAgMHhmMTIyMDAwNAorI2RlZmluZSBGMDkwMF9TREVNT0RfTE9DS18yICAweGYxMjIwMDAyCisjZGVmaW5lIEYwOTAwX1NERU1PRF9JUlFfMiAgMHhmMTIyMDAwMQorCisvKklSUVNUQVRVUzAqLworI2RlZmluZSBSMDkwMF9JUlFTVEFUVVMwICAweGYxMjMKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tCXzEgIDB4ZjEyMzAwODAKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tfMSAgMHhmMTIzMDA0MAorI2RlZmluZSBGMDkwMF9TREVNT0RfSVJRXzEgIDB4ZjEyMzAwMjAKKyNkZWZpbmUgRjA5MDBfU0JDSF9FUlJGTEFHICAweGYxMjMwMDEwCisjZGVmaW5lIEYwOTAwX1NESVNFUUMyUlhfSVJRICAweGYxMjMwMDA4CisjZGVmaW5lIEYwOTAwX1NESVNFUUMyVFhfSVJRICAweGYxMjMwMDA0CisjZGVmaW5lIEYwOTAwX1NESVNFUUMxUlhfSVJRICAweGYxMjMwMDAyCisjZGVmaW5lIEYwOTAwX1NESVNFUUMxVFhfSVJRICAweGYxMjMwMDAxCisKKy8qSVJRTUFTSzMqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMyAgMHhmMTI0CisjZGVmaW5lIEYwOTAwX01QTExfTE9DSyAgMHhmMTI0MDAyMAorI2RlZmluZSBGMDkwMF9NU1RSRUFNX0xDS18zICAweGYxMjQwMDEwCisjZGVmaW5lIEYwOTAwX01TVFJFQU1fTENLXzIgIDB4ZjEyNDAwMDgKKyNkZWZpbmUgRjA5MDBfTVNUUkVBTV9MQ0tfMSAgMHhmMTI0MDAwNAorI2RlZmluZSBGMDkwMF9NRFZCUzFfUFJGXzIgIDB4ZjEyNDAwMDIKKyNkZWZpbmUgRjA5MDBfTURWQlMxX1BSRl8xICAweGYxMjQwMDAxCisKKy8qSVJRTUFTSzIqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMiAgMHhmMTI1CisjZGVmaW5lIEYwOTAwX01TUFlfRU5EU0lNXzMgIDB4ZjEyNTAwODAKKyNkZWZpbmUgRjA5MDBfTVNQWV9FTkRTSU1fMiAgMHhmMTI1MDA0MAorI2RlZmluZSBGMDkwMF9NU1BZX0VORFNJTV8xICAweGYxMjUwMDIwCisjZGVmaW5lIEYwOTAwX01QS1RERUxfRVJST1JfMiAgMHhmMTI1MDAxMAorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tCXzIgIDB4ZjEyNTAwMDgKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9MT0NLXzIgIDB4ZjEyNTAwMDQKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9FUlJPUl8xICAweGYxMjUwMDAyCisjZGVmaW5lIEYwOTAwX01QS1RERUxfTE9DS0JfMSAgMHhmMTI1MDAwMQorCisvKklSUU1BU0sxKi8KKyNkZWZpbmUgUjA5MDBfSVJRTUFTSzEgIDB4ZjEyNgorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tfMSAgMHhmMTI2MDA4MAorI2RlZmluZSBGMDkwMF9NRVhUUElOQjIgIDB4ZjEyNjAwNDAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTjIgIDB4ZjEyNjAwMjAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTkIxICAweGYxMjYwMDEwCisjZGVmaW5lIEYwOTAwX01FWFRQSU4xICAweGYxMjYwMDA4CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLQl8yICAweGYxMjYwMDA0CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLXzIgIDB4ZjEyNjAwMDIKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0lSUV8yICAweGYxMjYwMDAxCisKKy8qSVJRTUFTSzAqLworI2RlZmluZSBSMDkwMF9JUlFNQVNLMCAgMHhmMTI3CisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLQl8xICAweGYxMjcwMDgwCisjZGVmaW5lIEYwOTAwX01ERU1PRF9MT0NLXzEgIDB4ZjEyNzAwNDAKKyNkZWZpbmUgRjA5MDBfTURFTU9EX0lSUV8xICAweGYxMjcwMDIwCisjZGVmaW5lIEYwOTAwX01CQ0hfRVJSRkxBRyAgMHhmMTI3MDAxMAorI2RlZmluZSBGMDkwMF9NRElTRVFDMlJYX0lSUSAgMHhmMTI3MDAwOAorI2RlZmluZSBGMDkwMF9NRElTRVFDMlRYX0lSUSAgMHhmMTI3MDAwNAorI2RlZmluZSBGMDkwMF9NRElTRVFDMVJYX0lSUSAgMHhmMTI3MDAwMgorI2RlZmluZSBGMDkwMF9NRElTRVFDMVRYX0lSUSAgMHhmMTI3MDAwMQorCisvKkkyQ0NGRyovCisjZGVmaW5lIFIwOTAwX0kyQ0NGRyAgMHhmMTI5CisjZGVmaW5lIEYwOTAwX0kyQzJfRkFTVE1PREUgIDB4ZjEyOTAwODAKKyNkZWZpbmUgRjA5MDBfU1RBVFVTX1dSMiAgMHhmMTI5MDA0MAorI2RlZmluZSBGMDkwMF9JMkMyQUREUl9JTkMgIDB4ZjEyOTAwMzAKKyNkZWZpbmUgRjA5MDBfSTJDX0ZBU1RNT0RFICAweGYxMjkwMDA4CisjZGVmaW5lIEYwOTAwX1NUQVRVU19XUiAgMHhmMTI5MDAwNAorI2RlZmluZSBGMDkwMF9JMkNBRERSX0lOQyAgMHhmMTI5MDAwMworCisvKlAxX0kyQ1JQVCovCisjZGVmaW5lIFIwOTAwX1AxX0kyQ1JQVCAgMHhmMTJhCisjZGVmaW5lIEYwOTAwX1AxX0kyQ1RfT04gIDB4ZjEyYTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRU5BUlBUX0xFVkVMICAweGYxMmEwMDcwCisjZGVmaW5lIEYwOTAwX1AxX1NDTFRfREVMQVkgIDB4ZjEyYTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9FTkFCTEUgIDB4ZjEyYTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9TREFUMlNEQSAgMHhmMTJhMDAwMgorCisvKlAyX0kyQ1JQVCovCisjZGVmaW5lIFIwOTAwX1AyX0kyQ1JQVCAgMHhmMTJiCisjZGVmaW5lIEYwOTAwX1AyX0kyQ1RfT04gIDB4ZjEyYjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRU5BUlBUX0xFVkVMICAweGYxMmIwMDcwCisjZGVmaW5lIEYwOTAwX1AyX1NDTFRfREVMQVkgIDB4ZjEyYjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9FTkFCTEUgIDB4ZjEyYjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9TREFUMlNEQSAgMHhmMTJiMDAwMgorCisvKkNMS0kyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLSTJDRkcgIDB4ZjE0MAorI2RlZmluZSBGMDkwMF9DTEtJMl9PUEQgIDB4ZjE0MDAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLSTJfQ09ORklHICAweGYxNDAwMDdlCisjZGVmaW5lIEYwOTAwX0NMS0kyX1hPUiAgMHhmMTQwMDAwMQorCisvKkdQSU8xQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzFDRkcgIDB4ZjE0MQorI2RlZmluZSBGMDkwMF9HUElPMV9PUEQgIDB4ZjE0MTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzFfQ09ORklHICAweGYxNDEwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xX1hPUiAgMHhmMTQxMDAwMQorCisvKkdQSU8yQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzJDRkcgIDB4ZjE0MgorI2RlZmluZSBGMDkwMF9HUElPMl9PUEQgIDB4ZjE0MjAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzJfQ09ORklHICAweGYxNDIwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8yX1hPUiAgMHhmMTQyMDAwMQorCisvKkdQSU8zQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzNDRkcgIDB4ZjE0MworI2RlZmluZSBGMDkwMF9HUElPM19PUEQgIDB4ZjE0MzAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzNfQ09ORklHICAweGYxNDMwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8zX1hPUiAgMHhmMTQzMDAwMQorCisvKkdQSU80Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzRDRkcgIDB4ZjE0NAorI2RlZmluZSBGMDkwMF9HUElPNF9PUEQgIDB4ZjE0NDAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzRfQ09ORklHICAweGYxNDQwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU80X1hPUiAgMHhmMTQ0MDAwMQorCisvKkdQSU81Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzVDRkcgIDB4ZjE0NQorI2RlZmluZSBGMDkwMF9HUElPNV9PUEQgIDB4ZjE0NTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzVfQ09ORklHICAweGYxNDUwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU81X1hPUiAgMHhmMTQ1MDAwMQorCisvKkdQSU82Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzZDRkcgIDB4ZjE0NgorI2RlZmluZSBGMDkwMF9HUElPNl9PUEQgIDB4ZjE0NjAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzZfQ09ORklHICAweGYxNDYwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU82X1hPUiAgMHhmMTQ2MDAwMQorCisvKkdQSU83Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzdDRkcgIDB4ZjE0NworI2RlZmluZSBGMDkwMF9HUElPN19PUEQgIDB4ZjE0NzAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzdfQ09ORklHICAweGYxNDcwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU83X1hPUiAgMHhmMTQ3MDAwMQorCisvKkdQSU84Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzhDRkcgIDB4ZjE0OAorI2RlZmluZSBGMDkwMF9HUElPOF9PUEQgIDB4ZjE0ODAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzhfQ09ORklHICAweGYxNDgwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU84X1hPUiAgMHhmMTQ4MDAwMQorCisvKkdQSU85Q0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzlDRkcgIDB4ZjE0OQorI2RlZmluZSBGMDkwMF9HUElPOV9PUEQgIDB4ZjE0OTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzlfQ09ORklHICAweGYxNDkwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU85X1hPUiAgMHhmMTQ5MDAwMQorCisvKkdQSU8xMENGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xMENGRyAgMHhmMTRhCisjZGVmaW5lIEYwOTAwX0dQSU8xMF9PUEQgIDB4ZjE0YTAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzEwX0NPTkZJRyAgMHhmMTRhMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTBfWE9SICAweGYxNGEwMDAxCisKKy8qR1BJTzExQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzExQ0ZHICAweGYxNGIKKyNkZWZpbmUgRjA5MDBfR1BJTzExX09QRCAgMHhmMTRiMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMTFfQ09ORklHICAweGYxNGIwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xMV9YT1IgIDB4ZjE0YjAwMDEKKworLypHUElPMTJDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMTJDRkcgIDB4ZjE0YworI2RlZmluZSBGMDkwMF9HUElPMTJfT1BEICAweGYxNGMwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xMl9DT05GSUcgIDB4ZjE0YzAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzEyX1hPUiAgMHhmMTRjMDAwMQorCisvKkdQSU8xM0NGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xM0NGRyAgMHhmMTRkCisjZGVmaW5lIEYwOTAwX0dQSU8xM19PUEQgIDB4ZjE0ZDAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzEzX0NPTkZJRyAgMHhmMTRkMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTNfWE9SICAweGYxNGQwMDAxCisKKy8qQ1MwQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ1MwQ0ZHICAweGYxNGUKKyNkZWZpbmUgRjA5MDBfQ1MwX09QRCAgMHhmMTRlMDA4MAorI2RlZmluZSBGMDkwMF9DUzBfQ09ORklHICAweGYxNGUwMDdlCisjZGVmaW5lIEYwOTAwX0NTMF9YT1IgIDB4ZjE0ZTAwMDEKKworLypDUzFDRkcqLworI2RlZmluZSBSMDkwMF9DUzFDRkcgIDB4ZjE0ZgorI2RlZmluZSBGMDkwMF9DUzFfT1BEICAweGYxNGYwMDgwCisjZGVmaW5lIEYwOTAwX0NTMV9DT05GSUcgIDB4ZjE0ZjAwN2UKKyNkZWZpbmUgRjA5MDBfQ1MxX1hPUiAgMHhmMTRmMDAwMQorCisvKlNUREJZQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1REQllDRkcgIDB4ZjE1MAorI2RlZmluZSBGMDkwMF9TVERCWV9PUEQgIDB4ZjE1MDAwODAKKyNkZWZpbmUgRjA5MDBfU1REQllfQ09ORklHICAweGYxNTAwMDdlCisjZGVmaW5lIEYwOTAwX1NUQkRZX1hPUiAgMHhmMTUwMDAwMQorCisvKkRJUkNMS0NGRyovCisjZGVmaW5lIFIwOTAwX0RJUkNMS0NGRyAgMHhmMTUxCisjZGVmaW5lIEYwOTAwX0RJUkNMS19PUEQgIDB4ZjE1MTAwODAKKyNkZWZpbmUgRjA5MDBfRElSQ0xLX0NPTkZJRyAgMHhmMTUxMDA3ZQorI2RlZmluZSBGMDkwMF9ESVJDTEtfWE9SICAweGYxNTEwMDAxCisKKy8qQUdDUkYxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQUdDUkYxQ0ZHICAweGYxNTIKKyNkZWZpbmUgRjA5MDBfQUdDUkYxX09QRCAgMHhmMTUyMDA4MAorI2RlZmluZSBGMDkwMF9BR0NSRjFfQ09ORklHICAweGYxNTIwMDdlCisjZGVmaW5lIEYwOTAwX0FHQ1JGMV9YT1IgIDB4ZjE1MjAwMDEKKworLypTREFUMUNGRyovCisjZGVmaW5lIFIwOTAwX1NEQVQxQ0ZHICAweGYxNTMKKyNkZWZpbmUgRjA5MDBfU0RBVDFfT1BEICAweGYxNTMwMDgwCisjZGVmaW5lIEYwOTAwX1NEQVQxX0NPTkZJRyAgMHhmMTUzMDA3ZQorI2RlZmluZSBGMDkwMF9TREFUMV9YT1IgIDB4ZjE1MzAwMDEKKworLypTQ0xUMUNGRyovCisjZGVmaW5lIFIwOTAwX1NDTFQxQ0ZHICAweGYxNTQKKyNkZWZpbmUgRjA5MDBfU0NMVDFfT1BEICAweGYxNTQwMDgwCisjZGVmaW5lIEYwOTAwX1NDTFQxX0NPTkZJRyAgMHhmMTU0MDA3ZQorI2RlZmluZSBGMDkwMF9TQ0xUMV9YT1IgIDB4ZjE1NDAwMDEKKworLypESVNFUUNPMUNGRyovCisjZGVmaW5lIFIwOTAwX0RJU0VRQ08xQ0ZHICAweGYxNTUKKyNkZWZpbmUgRjA5MDBfRElTRVFDTzFfT1BEICAweGYxNTUwMDgwCisjZGVmaW5lIEYwOTAwX0RJU0VRQ08xX0NPTkZJRyAgMHhmMTU1MDA3ZQorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1hPUiAgMHhmMTU1MDAwMQorCisvKkFHQ1JGMkNGRyovCisjZGVmaW5lIFIwOTAwX0FHQ1JGMkNGRyAgMHhmMTU2CisjZGVmaW5lIEYwOTAwX0FHQ1JGMl9PUEQgIDB4ZjE1NjAwODAKKyNkZWZpbmUgRjA5MDBfQUdDUkYyX0NPTkZJRyAgMHhmMTU2MDA3ZQorI2RlZmluZSBGMDkwMF9BR0NSRjJfWE9SICAweGYxNTYwMDAxCisKKy8qU0RBVDJDRkcqLworI2RlZmluZSBSMDkwMF9TREFUMkNGRyAgMHhmMTU3CisjZGVmaW5lIEYwOTAwX1NEQVQyX09QRCAgMHhmMTU3MDA4MAorI2RlZmluZSBGMDkwMF9TREFUMl9DT05GSUcgIDB4ZjE1NzAwN2UKKyNkZWZpbmUgRjA5MDBfU0RBVDJfWE9SICAweGYxNTcwMDAxCisKKy8qU0NMVDJDRkcqLworI2RlZmluZSBSMDkwMF9TQ0xUMkNGRyAgMHhmMTU4CisjZGVmaW5lIEYwOTAwX1NDTFQyX09QRCAgMHhmMTU4MDA4MAorI2RlZmluZSBGMDkwMF9TQ0xUMl9DT05GSUcgIDB4ZjE1ODAwN2UKKyNkZWZpbmUgRjA5MDBfU0NMVDJfWE9SICAweGYxNTgwMDAxCisKKy8qRElTRVFDTzJDRkcqLworI2RlZmluZSBSMDkwMF9ESVNFUUNPMkNGRyAgMHhmMTU5CisjZGVmaW5lIEYwOTAwX0RJU0VRQ08yX09QRCAgMHhmMTU5MDA4MAorI2RlZmluZSBGMDkwMF9ESVNFUUNPMl9DT05GSUcgIDB4ZjE1OTAwN2UKKyNkZWZpbmUgRjA5MDBfRElTRVFDMl9YT1IgIDB4ZjE1OTAwMDEKKworLypDTEtPVVQyN0NGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDI3Q0ZHICAweGYxNWEKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMjdfT1BEICAweGYxNWEwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDI3X0NPTkZJRyAgMHhmMTVhMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQyN19YT1IgIDB4ZjE1YTAwMDEKKworLypFUlJPUjFDRkcqLworI2RlZmluZSBSMDkwMF9FUlJPUjFDRkcgIDB4ZjE1YgorI2RlZmluZSBGMDkwMF9FUlJPUjFfT1BEICAweGYxNWIwMDgwCisjZGVmaW5lIEYwOTAwX0VSUk9SMV9DT05GSUcgIDB4ZjE1YjAwN2UKKyNkZWZpbmUgRjA5MDBfRVJST1IxX1hPUiAgMHhmMTViMDAwMQorCisvKkRQTjFDRkcqLworI2RlZmluZSBSMDkwMF9EUE4xQ0ZHICAweGYxNWMKKyNkZWZpbmUgRjA5MDBfRFBOMV9PUEQgIDB4ZjE1YzAwODAKKyNkZWZpbmUgRjA5MDBfRFBOMV9DT05GSUcgIDB4ZjE1YzAwN2UKKyNkZWZpbmUgRjA5MDBfRFBOMV9YT1IgIDB4ZjE1YzAwMDEKKworLypTVFJPVVQxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1RST1VUMUNGRyAgMHhmMTVkCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfT1BEICAweGYxNWQwMDgwCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfQ09ORklHICAweGYxNWQwMDdlCisjZGVmaW5lIEYwOTAwX1NUUk9VVDFfWE9SICAweGYxNWQwMDAxCisKKy8qQ0xLT1VUMUNGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDFDRkcgIDB4ZjE1ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQxX09QRCAgMHhmMTVlMDA4MAorI2RlZmluZSBGMDkwMF9DTEtPVVQxX0NPTkZJRyAgMHhmMTVlMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQxX1hPUiAgMHhmMTVlMDAwMQorCisvKkRBVEE3MUNGRyovCisjZGVmaW5lIFIwOTAwX0RBVEE3MUNGRyAgMHhmMTVmCisjZGVmaW5lIEYwOTAwX0RBVEE3MV9PUEQgIDB4ZjE1ZjAwODAKKyNkZWZpbmUgRjA5MDBfREFUQTcxX0NPTkZJRyAgMHhmMTVmMDA3ZQorI2RlZmluZSBGMDkwMF9EQVRBNzFfWE9SICAweGYxNWYwMDAxCisKKy8qRVJST1IyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRVJST1IyQ0ZHICAweGYxNjAKKyNkZWZpbmUgRjA5MDBfRVJST1IyX09QRCAgMHhmMTYwMDA4MAorI2RlZmluZSBGMDkwMF9FUlJPUjJfQ09ORklHICAweGYxNjAwMDdlCisjZGVmaW5lIEYwOTAwX0VSUk9SMl9YT1IgIDB4ZjE2MDAwMDEKKworLypEUE4yQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRFBOMkNGRyAgMHhmMTYxCisjZGVmaW5lIEYwOTAwX0RQTjJfT1BEICAweGYxNjEwMDgwCisjZGVmaW5lIEYwOTAwX0RQTjJfQ09ORklHICAweGYxNjEwMDdlCisjZGVmaW5lIEYwOTAwX0RQTjJfWE9SICAweGYxNjEwMDAxCisKKy8qU1RST1VUMkNGRyovCisjZGVmaW5lIFIwOTAwX1NUUk9VVDJDRkcgIDB4ZjE2MgorI2RlZmluZSBGMDkwMF9TVFJPVVQyX09QRCAgMHhmMTYyMDA4MAorI2RlZmluZSBGMDkwMF9TVFJPVVQyX0NPTkZJRyAgMHhmMTYyMDA3ZQorI2RlZmluZSBGMDkwMF9TVFJPVVQyX1hPUiAgMHhmMTYyMDAwMQorCisvKkNMS09VVDJDRkcqLworI2RlZmluZSBSMDkwMF9DTEtPVVQyQ0ZHICAweGYxNjMKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9PUEQgIDB4ZjE2MzAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9DT05GSUcgIDB4ZjE2MzAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMl9YT1IgIDB4ZjE2MzAwMDEKKworLypEQVRBNzJDRkcqLworI2RlZmluZSBSMDkwMF9EQVRBNzJDRkcgIDB4ZjE2NAorI2RlZmluZSBGMDkwMF9EQVRBNzJfT1BEICAweGYxNjQwMDgwCisjZGVmaW5lIEYwOTAwX0RBVEE3Ml9DT05GSUcgIDB4ZjE2NDAwN2UKKyNkZWZpbmUgRjA5MDBfREFUQTcyX1hPUiAgMHhmMTY0MDAwMQorCisvKkVSUk9SM0NGRyovCisjZGVmaW5lIFIwOTAwX0VSUk9SM0NGRyAgMHhmMTY1CisjZGVmaW5lIEYwOTAwX0VSUk9SM19PUEQgIDB4ZjE2NTAwODAKKyNkZWZpbmUgRjA5MDBfRVJST1IzX0NPTkZJRyAgMHhmMTY1MDA3ZQorI2RlZmluZSBGMDkwMF9FUlJPUjNfWE9SICAweGYxNjUwMDAxCisKKy8qRFBOM0NGRyovCisjZGVmaW5lIFIwOTAwX0RQTjNDRkcgIDB4ZjE2NgorI2RlZmluZSBGMDkwMF9EUE4zX09QRCAgMHhmMTY2MDA4MAorI2RlZmluZSBGMDkwMF9EUE4zX0NPTkZJRyAgMHhmMTY2MDA3ZQorI2RlZmluZSBGMDkwMF9EUE4zX1hPUiAgMHhmMTY2MDAwMQorCisvKlNUUk9VVDNDRkcqLworI2RlZmluZSBSMDkwMF9TVFJPVVQzQ0ZHICAweGYxNjcKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19PUEQgIDB4ZjE2NzAwODAKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19DT05GSUcgIDB4ZjE2NzAwN2UKKyNkZWZpbmUgRjA5MDBfU1RST1VUM19YT1IgIDB4ZjE2NzAwMDEKKworLypDTEtPVVQzQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLT1VUM0NGRyAgMHhmMTY4CisjZGVmaW5lIEYwOTAwX0NMS09VVDNfT1BEICAweGYxNjgwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDNfQ09ORklHICAweGYxNjgwMDdlCisjZGVmaW5lIEYwOTAwX0NMS09VVDNfWE9SICAweGYxNjgwMDAxCisKKy8qREFUQTczQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfREFUQTczQ0ZHICAweGYxNjkKKyNkZWZpbmUgRjA5MDBfREFUQTczX09QRCAgMHhmMTY5MDA4MAorI2RlZmluZSBGMDkwMF9EQVRBNzNfQ09ORklHICAweGYxNjkwMDdlCisjZGVmaW5lIEYwOTAwX0RBVEE3M19YT1IgIDB4ZjE2OTAwMDEKKworLypGU0tURkMyKi8KKyNkZWZpbmUgUjA5MDBfRlNLVEZDMiAgMHhmMTcwCisjZGVmaW5lIEYwOTAwX0ZTS1RfS01PRCAgMHhmMTcwMDBmYworI2RlZmluZSBGMDkwMF9GU0tUX0NBUjIgIDB4ZjE3MDAwMDMKKworLypGU0tURkMxKi8KKyNkZWZpbmUgUjA5MDBfRlNLVEZDMSAgMHhmMTcxCisjZGVmaW5lIEYwOTAwX0ZTS1RfQ0FSMSAgMHhmMTcxMDBmZgorCisvKkZTS1RGQzAqLworI2RlZmluZSBSMDkwMF9GU0tURkMwICAweGYxNzIKKyNkZWZpbmUgRjA5MDBfRlNLVF9DQVIwICAweGYxNzIwMGZmCisKKy8qRlNLVERFTFRBRjEqLworI2RlZmluZSBSMDkwMF9GU0tUREVMVEFGMSAgMHhmMTczCisjZGVmaW5lIEYwOTAwX0ZTS1RfREVMVEFGMSAgMHhmMTczMDAwZgorCisvKkZTS1RERUxUQUYwKi8KKyNkZWZpbmUgUjA5MDBfRlNLVERFTFRBRjAgIDB4ZjE3NAorI2RlZmluZSBGMDkwMF9GU0tUX0RFTFRBRjAgIDB4ZjE3NDAwZmYKKworLypGU0tUQ1RSTCovCisjZGVmaW5lIFIwOTAwX0ZTS1RDVFJMICAweGYxNzUKKyNkZWZpbmUgRjA5MDBfRlNLVF9FTl9TR04gIDB4ZjE3NTAwNDAKKyNkZWZpbmUgRjA5MDBfRlNLVF9NT0RfU0dOICAweGYxNzUwMDIwCisjZGVmaW5lIEYwOTAwX0ZTS1RfTU9EX0VOICAweGYxNzUwMDFjCisjZGVmaW5lIEYwOTAwX0ZTS1RfREFDTU9ERSAgMHhmMTc1MDAwMworCisvKkZTS1JGQzIqLworI2RlZmluZSBSMDkwMF9GU0tSRkMyICAweGYxNzYKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERVRTR04gIDB4ZjE3NjAwNDAKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVRTR04gIDB4ZjE3NjAwMjAKKyNkZWZpbmUgRjA5MDBfRlNLUl9LQUdDICAweGYxNzYwMDFjCisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSMiAgMHhmMTc2MDAwMworCisvKkZTS1JGQzEqLworI2RlZmluZSBSMDkwMF9GU0tSRkMxICAweGYxNzcKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVIxICAweGYxNzcwMGZmCisKKy8qRlNLUkZDMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JGQzAgIDB4ZjE3OAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUjAgIDB4ZjE3ODAwZmYKKworLypGU0tSSzEqLworI2RlZmluZSBSMDkwMF9GU0tSSzEgIDB4ZjE3OQorI2RlZmluZSBGMDkwMF9GU0tSX0sxX0VYUCAgMHhmMTc5MDBlMAorI2RlZmluZSBGMDkwMF9GU0tSX0sxX01BTlQgIDB4ZjE3OTAwMWYKKworLypGU0tSSzIqLworI2RlZmluZSBSMDkwMF9GU0tSSzIgIDB4ZjE3YQorI2RlZmluZSBGMDkwMF9GU0tSX0syX0VYUCAgMHhmMTdhMDBlMAorI2RlZmluZSBGMDkwMF9GU0tSX0syX01BTlQgIDB4ZjE3YTAwMWYKKworLypGU0tSQUdDUiovCisjZGVmaW5lIFIwOTAwX0ZTS1JBR0NSICAweGYxN2IKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVRDVEwgIDB4ZjE3YjAwYzAKKyNkZWZpbmUgRjA5MDBfRlNLUl9BR0NfUkVGICAweGYxN2IwMDNmCisKKy8qRlNLUkFHQyovCisjZGVmaW5lIFIwOTAwX0ZTS1JBR0MgIDB4ZjE3YworI2RlZmluZSBGMDkwMF9GU0tSX0FHQ19BQ0NVICAweGYxN2MwMGZmCisKKy8qRlNLUkFMUEhBKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkFMUEhBICAweGYxN2QKKyNkZWZpbmUgRjA5MDBfRlNLUl9BTFBIQV9FWFAgIDB4ZjE3ZDAwMWMKKyNkZWZpbmUgRjA5MDBfRlNLUl9BTFBIQV9NICAweGYxN2QwMDAzCisKKy8qRlNLUlBMVEgxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUlBMVEgxICAweGYxN2UKKyNkZWZpbmUgRjA5MDBfRlNLUl9CRVRBICAweGYxN2UwMGYwCisjZGVmaW5lIEYwOTAwX0ZTS1JfUExMX1RSRVNIMSAgMHhmMTdlMDAwZgorCisvKkZTS1JQTFRIMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JQTFRIMCAgMHhmMTdmCisjZGVmaW5lIEYwOTAwX0ZTS1JfUExMX1RSRVNIMCAgMHhmMTdmMDBmZgorCisvKkZTS1JERjEqLworI2RlZmluZSBSMDkwMF9GU0tSREYxICAweGYxODAKKyNkZWZpbmUgRjA5MDBfRlNLUl9PVVQgIDB4ZjE4MDAwODAKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERUxUQUYxICAweGYxODAwMDFmCisKKy8qRlNLUkRGMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JERjAgIDB4ZjE4MQorI2RlZmluZSBGMDkwMF9GU0tSX0RFTFRBRjAgIDB4ZjE4MTAwZmYKKworLypGU0tSU1RFUFAqLworI2RlZmluZSBSMDkwMF9GU0tSU1RFUFAgIDB4ZjE4MgorI2RlZmluZSBGMDkwMF9GU0tSX1NURVBfUExVUyAgMHhmMTgyMDBmZgorCisvKkZTS1JTVEVQTSovCisjZGVmaW5lIFIwOTAwX0ZTS1JTVEVQTSAgMHhmMTgzCisjZGVmaW5lIEYwOTAwX0ZTS1JfU1RFUF9NSU5VUyAgMHhmMTgzMDBmZgorCisvKkZTS1JERVQxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRFVDEgIDB4ZjE4NAorI2RlZmluZSBGMDkwMF9GU0tSX0RFVEVDVCAgMHhmMTg0MDA4MAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9BQ0NVMSAgMHhmMTg0MDAwZgorCisvKkZTS1JERVQwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRFVDAgIDB4ZjE4NQorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9BQ0NVMCAgMHhmMTg1MDBmZgorCisvKkZTS1JEVEgxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRUSDEgIDB4ZjE4NgorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkxPU1NfVEhSRVNIMSAgMHhmMTg2MDBmMAorI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9USFJFU0gxICAweGYxODYwMDBmCisKKy8qRlNLUkRUSDAqLworI2RlZmluZSBSMDkwMF9GU0tSRFRIMCAgMHhmMTg3CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSREVUX1RIUkVTSDAgIDB4ZjE4NzAwZmYKKworLypGU0tSTE9TUyovCisjZGVmaW5lIFIwOTAwX0ZTS1JMT1NTICAweGYxODgKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJMT1NTX1RIUkVTSDAgIDB4ZjE4ODAwZmYKKworLypQMl9ESVNUWENUTCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1RYQ1RMICAweGYxOTAKKyNkZWZpbmUgRjA5MDBfUDJfVElNX09GRiAgMHhmMTkwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ESVNFUUNfUkVTRVQgIDB4ZjE5MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVElNX0NNRCAgMHhmMTkwMDAzMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUFJFQ0hBUkdFICAweGYxOTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RJU1RYX01PREUgIDB4ZjE5MDAwMDcKKworLypQMl9ESVNSWENUTCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYQ1RMICAweGYxOTEKKyNkZWZpbmUgRjA5MDBfUDJfUkVDRUlWRVJfT04gIDB4ZjE5MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfSUdOT19TSE9SVDIySyAgMHhmMTkxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9PTkVDSElQX1RSWCAgMHhmMTkxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9FWFRfRU5WRUxPUCAgMHhmMTkxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9QSU5fU0VMRUNUICAweGYxOTEwMDBjCisjZGVmaW5lIEYwOTAwX1AyX0lSUV9SWEVORCAgMHhmMTkxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUlFfNE5CWVRFUyAgMHhmMTkxMDAwMQorCisvKlAyX0RJU1JYX1NUMCovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYX1NUMCAgMHhmMTk0CisjZGVmaW5lIEYwOTAwX1AyX1JYX0VORCAgMHhmMTk0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9SWF9BQ1RJVkUgIDB4ZjE5NDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRfMjJLSFogIDB4ZjE5NDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ09OVF9UT05FICAweGYxOTQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fNEJSRUFEWSAgMHhmMTk0MDAwOAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX0VNUFRZICAweGYxOTQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0FCT1JUX0RJU1JYICAweGYxOTQwMDAxCisKKy8qUDJfRElTUlhfU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTUlhfU1QxICAweGYxOTUKKyNkZWZpbmUgRjA5MDBfUDJfUlhfRkFJTCAgMHhmMTk1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX1BBUklUWUZBSUwgIDB4ZjE5NTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfUlhfTk9OQllURSAgMHhmMTk1MDAyMAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX09WRVJGTE9XICAweGYxOTUwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fQllURU5CUiAgMHhmMTk1MDAwZgorCisvKlAyX0RJU1JYREFUQSovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYREFUQSAgMHhmMTk2CisjZGVmaW5lIEYwOTAwX1AyX0RJU1JYX0RBVEEgIDB4ZjE5NjAwZmYKKworLypQMl9ESVNUWERBVEEqLworI2RlZmluZSBSMDkwMF9QMl9ESVNUWERBVEEgIDB4ZjE5NworI2RlZmluZSBGMDkwMF9QMl9ESVNFUUNfRklGTyAgMHhmMTk3MDBmZgorCisvKlAyX0RJU1RYU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTVFhTVEFUVVMgIDB4ZjE5OAorI2RlZmluZSBGMDkwMF9QMl9UWF9GQUlMICAweGYxOTgwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZJRk9fRlVMTCAgMHhmMTk4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UWF9JRExFICAweGYxOTgwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0dBUF9CVVJTVCAgMHhmMTk4MDAxMAorI2RlZmluZSBGMDkwMF9QMl9UWEZJRk9fQllURVMgIDB4ZjE5ODAwMGYKKworLypQMl9GMjJUWCovCisjZGVmaW5lIFIwOTAwX1AyX0YyMlRYICAweGYxOTkKKyNkZWZpbmUgRjA5MDBfUDJfRjIyX1JFRyAgMHhmMTk5MDBmZgorCisvKlAyX0YyMlJYKi8KKyNkZWZpbmUgUjA5MDBfUDJfRjIyUlggIDB4ZjE5YQorI2RlZmluZSBGMDkwMF9QMl9GMjJSWF9SRUcgIDB4ZjE5YTAwZmYKKworLypQMl9BQ1JQUkVTQyovCisjZGVmaW5lIFIwOTAwX1AyX0FDUlBSRVNDICAweGYxOWMKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX0NPREZSRFkgIDB4ZjE5YzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX1BSRVNDICAweGYxOWMwMDA3CisKKy8qUDJfQUNSRElWKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNSRElWICAweGYxOWQKKyNkZWZpbmUgRjA5MDBfUDJfQUNSX0RJViAgMHhmMTlkMDBmZgorCisvKlAxX0RJU1RYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTVFhDVEwgIDB4ZjFhMAorI2RlZmluZSBGMDkwMF9QMV9USU1fT0ZGICAweGYxYTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RJU0VRQ19SRVNFVCAgMHhmMWEwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9USU1fQ01EICAweGYxYTAwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19QUkVDSEFSR0UgIDB4ZjFhMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRElTVFhfTU9ERSAgMHhmMWEwMDAwNworCisvKlAxX0RJU1JYQ1RMKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhDVEwgIDB4ZjFhMQorI2RlZmluZSBGMDkwMF9QMV9SRUNFSVZFUl9PTiAgMHhmMWExMDA4MAorI2RlZmluZSBGMDkwMF9QMV9JR05PX1NIT1JUMjJLICAweGYxYTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX09ORUNISVBfVFJYICAweGYxYTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0VYVF9FTlZFTE9QICAweGYxYTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1BJTl9TRUxFQ1QgIDB4ZjFhMTAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfSVJRX1JYRU5EICAweGYxYTEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0lSUV80TkJZVEVTICAweGYxYTEwMDAxCisKKy8qUDFfRElTUlhfU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhfU1QwICAweGYxYTQKKyNkZWZpbmUgRjA5MDBfUDFfUlhfRU5EICAweGYxYTQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1JYX0FDVElWRSAgMHhmMWE0MDA0MAorI2RlZmluZSBGMDkwMF9QMV9TSE9SVF8yMktIWiAgMHhmMWE0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9DT05UX1RPTkUgIDB4ZjFhNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT180QlJFQURZICAweGYxYTQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fRU1QVFkgIDB4ZjFhNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQUJPUlRfRElTUlggIDB4ZjFhNDAwMDEKKworLypQMV9ESVNSWF9TVDEqLworI2RlZmluZSBSMDkwMF9QMV9ESVNSWF9TVDEgIDB4ZjFhNQorI2RlZmluZSBGMDkwMF9QMV9SWF9GQUlMICAweGYxYTUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fUEFSSVRZRkFJTCAgMHhmMWE1MDA0MAorI2RlZmluZSBGMDkwMF9QMV9SWF9OT05CWVRFICAweGYxYTUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fT1ZFUkZMT1cgIDB4ZjFhNTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19CWVRFTkJSICAweGYxYTUwMDBmCisKKy8qUDFfRElTUlhEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhEQVRBICAweGYxYTYKKyNkZWZpbmUgRjA5MDBfUDFfRElTUlhfREFUQSAgMHhmMWE2MDBmZgorCisvKlAxX0RJU1RYREFUQSovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1RYREFUQSAgMHhmMWE3CisjZGVmaW5lIEYwOTAwX1AxX0RJU0VRQ19GSUZPICAweGYxYTcwMGZmCisKKy8qUDFfRElTVFhTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMV9ESVNUWFNUQVRVUyAgMHhmMWE4CisjZGVmaW5lIEYwOTAwX1AxX1RYX0ZBSUwgIDB4ZjFhODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRklGT19GVUxMICAweGYxYTgwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RYX0lETEUgIDB4ZjFhODAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfR0FQX0JVUlNUICAweGYxYTgwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RYRklGT19CWVRFUyAgMHhmMWE4MDAwZgorCisvKlAxX0YyMlRYKi8KKyNkZWZpbmUgUjA5MDBfUDFfRjIyVFggIDB4ZjFhOQorI2RlZmluZSBGMDkwMF9QMV9GMjJfUkVHICAweGYxYTkwMGZmCisKKy8qUDFfRjIyUlgqLworI2RlZmluZSBSMDkwMF9QMV9GMjJSWCAgMHhmMWFhCisjZGVmaW5lIEYwOTAwX1AxX0YyMlJYX1JFRyAgMHhmMWFhMDBmZgorCisvKlAxX0FDUlBSRVNDKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNSUFJFU0MgIDB4ZjFhYworI2RlZmluZSBGMDkwMF9QMV9BQ1JfQ09ERlJEWSAgMHhmMWFjMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BQ1JfUFJFU0MgIDB4ZjFhYzAwMDcKKworLypQMV9BQ1JESVYqLworI2RlZmluZSBSMDkwMF9QMV9BQ1JESVYgIDB4ZjFhZAorI2RlZmluZSBGMDkwMF9QMV9BQ1JfRElWICAweGYxYWQwMGZmCisKKy8qTkNPQVJTRSovCisjZGVmaW5lIFIwOTAwX05DT0FSU0UgIDB4ZjFiMworI2RlZmluZSBGMDkwMF9NX0RJViAgMHhmMWIzMDBmZgorCisvKlNZTlRDVFJMKi8KKyNkZWZpbmUgUjA5MDBfU1lOVENUUkwgIDB4ZjFiNgorI2RlZmluZSBGMDkwMF9TVEFOREJZICAweGYxYjYwMDgwCisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTENPUkUgIDB4ZjFiNjAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMWDFSQVRJTyAgMHhmMWI2MDAyMAorI2RlZmluZSBGMDkwMF9JMkNfVFVEICAweGYxYjYwMDEwCisjZGVmaW5lIEYwOTAwX1NUT1BfUExMICAweGYxYjYwMDA4CisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTEZTSyAgMHhmMWI2MDAwNAorI2RlZmluZSBGMDkwMF9TRUxPU0NJICAweGYxYjYwMDAyCisjZGVmaW5lIEYwOTAwX0JZUEFTU1BMTEFEQyAgMHhmMWI2MDAwMQorCisvKkZJTFRDVFJMKi8KKyNkZWZpbmUgUjA5MDBfRklMVENUUkwgIDB4ZjFiNworI2RlZmluZSBGMDkwMF9JTlZfQ0xLMTM1ICAweGYxYjcwMDgwCisjZGVmaW5lIEYwOTAwX1BFUk1fQllQRElTICAweGYxYjcwMDQwCisjZGVmaW5lIEYwOTAwX1NFTF9GU0tDS0RJViAgMHhmMWI3MDAwNAorI2RlZmluZSBGMDkwMF9JTlZfQ0xLRlNLICAweGYxYjcwMDAyCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BUFBMSSAgMHhmMWI3MDAwMQorCisvKlBMTFNUQVQqLworI2RlZmluZSBSMDkwMF9QTExTVEFUICAweGYxYjgKKyNkZWZpbmUgRjA5MDBfQUNNX1NFTCAgMHhmMWI4MDA4MAorI2RlZmluZSBGMDkwMF9EVFZfU0VMICAweGYxYjgwMDQwCisjZGVmaW5lIEYwOTAwX1BMTExPQ0sgIDB4ZjFiODAwMDEKKworLypTVE9QQ0xLMSovCisjZGVmaW5lIFIwOTAwX1NUT1BDTEsxICAweGYxYzIKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtQS0RUMiAgMHhmMWMyMDA0MAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1BLRFQxICAweGYxYzIwMDIwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLRkVDICAweGYxYzIwMDEwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLQURDSTIgIDB4ZjFjMjAwMDgKKyNkZWZpbmUgRjA5MDBfSU5WX0NMS0FEQ0kyICAweGYxYzIwMDA0CisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLQURDSTEgIDB4ZjFjMjAwMDIKKyNkZWZpbmUgRjA5MDBfSU5WX0NMS0FEQ0kxICAweGYxYzIwMDAxCisKKy8qU1RPUENMSzIqLworI2RlZmluZSBSMDkwMF9TVE9QQ0xLMiAgMHhmMWMzCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLU0FNUDIgIDB4ZjFjMzAwMTAKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtTQU1QMSAgMHhmMWMzMDAwOAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1ZJVDIgIDB4ZjFjMzAwMDQKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtWSVQxICAweGYxYzMwMDAyCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLVFMgIDB4ZjFjMzAwMDEKKworLypUU1RUTlIwKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMCAgMHhmMWRmCisjZGVmaW5lIEYwOTAwX1NFTF9GU0sgIDB4ZjFkZjAwODAKKyNkZWZpbmUgRjA5MDBfRlNLX1BPTiAgMHhmMWRmMDAwNAorI2RlZmluZSBGMDkwMF9GU0tfT1BFTkxPT1AgIDB4ZjFkZjAwMDIKKworLypUU1RUTlIxKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMSAgMHhmMWUwCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BREMxICAweGYxZTAwMDgwCisjZGVmaW5lIEYwOTAwX0lOVkFEQzFfQ0tPVVQgIDB4ZjFlMDAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMSVFTUkMxICAweGYxZTAwMDMwCisjZGVmaW5lIEYwOTAwX0FEQzFfUE9OICAweGYxZTAwMDAyCisjZGVmaW5lIEYwOTAwX0FEQzFfSU5NT0RFICAweGYxZTAwMDAxCisKKy8qVFNUVE5SMiovCisjZGVmaW5lIFIwOTAwX1RTVFROUjIgIDB4ZjFlMQorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1BPTiAgMHhmMWUxMDAyMAorI2RlZmluZSBGMDkwMF9ESVNFUUMxX1RFU1QgIDB4ZjFlMTAwMWYKKworLypUU1RUTlIzKi8KKyNkZWZpbmUgUjA5MDBfVFNUVE5SMyAgMHhmMWUyCisjZGVmaW5lIEYwOTAwX0JZUEFTU19BREMyICAweGYxZTIwMDgwCisjZGVmaW5lIEYwOTAwX0lOVkFEQzJfQ0tPVVQgIDB4ZjFlMjAwNDAKKyNkZWZpbmUgRjA5MDBfU0VMSVFTUkMyICAweGYxZTIwMDMwCisjZGVmaW5lIEYwOTAwX0FEQzJfUE9OICAweGYxZTIwMDAyCisjZGVmaW5lIEYwOTAwX0FEQzJfSU5NT0RFICAweGYxZTIwMDAxCisKKy8qVFNUVE5SNCovCisjZGVmaW5lIFIwOTAwX1RTVFROUjQgIDB4ZjFlMworI2RlZmluZSBGMDkwMF9ESVNFUUMyX1BPTiAgMHhmMWUzMDAyMAorI2RlZmluZSBGMDkwMF9ESVNFUUMyX1RFU1QgIDB4ZjFlMzAwMWYKKworLypQMl9JUUNPTlNUKi8KKyNkZWZpbmUgUjA5MDBfUDJfSVFDT05TVCAgMHhmMjAwCisjZGVmaW5lIEYwOTAwX1AyX0NPTlNURUxfU0VMRUNUICAweGYyMDAwMDYwCisjZGVmaW5lIEYwOTAwX1AyX0lRU1lNQl9TRUwgIDB4ZjIwMDAwMWYKKworLypQMl9OT1NDRkcqLworI2RlZmluZSBSMDkwMF9QMl9OT1NDRkcgIDB4ZjIwMQorI2RlZmluZSBGMDkwMF9QMl9EVU1NWVBMX05PU0RBVEEgIDB4ZjIwMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX0JFVEEgIDB4ZjIwMTAwMTgKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9CRVRBICAweGYyMDEwMDA3CisKKy8qUDJfSVNZTUIqLworI2RlZmluZSBSMDkwMF9QMl9JU1lNQiAgMHhmMjAyCisjZGVmaW5lIEYwOTAwX1AyX0lfU1lNQk9MICAweGYyMDIwMWZmCisKKy8qUDJfUVNZTUIqLworI2RlZmluZSBSMDkwMF9QMl9RU1lNQiAgMHhmMjAzCisjZGVmaW5lIEYwOTAwX1AyX1FfU1lNQk9MICAweGYyMDMwMWZmCisKKy8qUDJfQUdDMUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFDRkcgIDB4ZjIwNAorI2RlZmluZSBGMDkwMF9QMl9EQ19GUk9aRU4gIDB4ZjIwNDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRENfQ09SUkVDVCAgMHhmMjA0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9BTU1fRlJPWkVOICAweGYyMDQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0FNTV9DT1JSRUNUICAweGYyMDQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1FVQURfRlJPWkVOICAweGYyMDQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1FVQURfQ09SUkVDVCAgMHhmMjA0MDAwNAorI2RlZmluZSBGMDkwMF9QMl9EQ0NPTVBfU0xPVyAgMHhmMjA0MDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUU1JU01fU0xPVyAgMHhmMjA0MDAwMQorCisvKlAyX0FHQzFDTiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFDTiAgMHhmMjA2CisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfTE9DS0VEICAweGYyMDYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfT1ZFUkZMT1cgIDB4ZjIwNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9OT1NMT1dMSyAgMHhmMjA2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX01JTlBPV0VSICAweGYyMDYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0FHQ09VVF9GQVNUICAweGYyMDYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX0JFVEEgIDB4ZjIwNjAwMDcKKworLypQMl9BR0MxUkVGKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMVJFRiAgMHhmMjA3CisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX1JFRiAgMHhmMjA3MDBmZgorCisvKlAyX0lEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMl9JRENDT01QICAweGYyMDgKKyNkZWZpbmUgRjA5MDBfUDJfSUFWRVJBR0VfQURKICAweGYyMDgwMWZmCisKKy8qUDJfUURDQ09NUCovCisjZGVmaW5lIFIwOTAwX1AyX1FEQ0NPTVAgIDB4ZjIwOQorI2RlZmluZSBGMDkwMF9QMl9RQVZFUkFHRV9BREogIDB4ZjIwOTAxZmYKKworLypQMl9QT1dFUkkqLworI2RlZmluZSBSMDkwMF9QMl9QT1dFUkkgIDB4ZjIwYQorI2RlZmluZSBGMDkwMF9QMl9QT1dFUl9JICAweGYyMGEwMGZmCisKKy8qUDJfUE9XRVJRKi8KKyNkZWZpbmUgUjA5MDBfUDJfUE9XRVJRICAweGYyMGIKKyNkZWZpbmUgRjA5MDBfUDJfUE9XRVJfUSAgMHhmMjBiMDBmZgorCisvKlAyX0FHQzFBTU0qLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQU1NICAweGYyMGMKKyNkZWZpbmUgRjA5MDBfUDJfQU1NX1ZBTFVFICAweGYyMGMwMGZmCisKKy8qUDJfQUdDMVFVQUQqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxUVVBRCAgMHhmMjBkCisjZGVmaW5lIEYwOTAwX1AyX1FVQURfVkFMVUUgIDB4ZjIwZDAxZmYKKworLypQMl9BR0NJUUlOMSovCisjZGVmaW5lIFIwOTAwX1AyX0FHQ0lRSU4xICAweGYyMGUKKyNkZWZpbmUgRjA5MDBfUDJfQUdDSVFfVkFMVUUxICAweGYyMGUwMGZmCisKKy8qUDJfQUdDSVFJTjAqLworI2RlZmluZSBSMDkwMF9QMl9BR0NJUUlOMCAgMHhmMjBmCisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX1ZBTFVFMCAgMHhmMjBmMDBmZgorCisvKlAyX0RFTU9EKi8KKyNkZWZpbmUgUjA5MDBfUDJfREVNT0QgIDB4ZjIxMAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9TVE9QICAweGYyMTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCAgMHhmMjEwMDAzMAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9FTkFTQU1QICAweGYyMTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGICAweGYyMTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCAgMHhmMjEwMDAwMworCisvKlAyX0RNRE1PRENPRCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRE1PRENPRCAgMHhmMjExCisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9NT0RDT0QgIDB4ZjIxMTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTU9EQ09EICAweGYyMTEwMDdjCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX1RZUEUgIDB4ZjIxMTAwMDMKKworLypQMl9EU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfRFNUQVRVUyAgMHhmMjEyCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9MT0NLICAweGYyMTIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfUVVBTElUWSAgMHhmMjEyMDA2MAorI2RlZmluZSBGMDkwMF9QMl9TRFZCUzFfRU5BQkxFICAweGYyMTIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tfREVGSU5JVElGICAweGYyMTIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RJTUlOR19JU19MT0NLRUQgIDB4ZjIxMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX1RNR0xPQ0sgIDB4ZjIxMjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX0NBUkxPQ0sgIDB4ZjIxMjAwMDEKKworLypQMl9EU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AyX0RTVEFUVVMyICAweGYyMTMKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfREVMT0NLICAweGYyMTMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX1RJTUVPVVQgIDB4ZjIxMzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfTU9EQ09EUlFfU1lOQ1RBRyAgMHhmMjEzMDAyMAorI2RlZmluZSBGMDkwMF9QMl9QT0xZUEhfU0FURVZFTlQgIDB4ZjIxMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9OT1NJR05BTEFDSyAgMHhmMjEzMDAwOAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX09WRVJGTE9XICAweGYyMTMwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9PVkVSRkxPVyAgMHhmMjEzMDAwMgorI2RlZmluZSBGMDkwMF9QMl9HQU1NQV9PVkVSVU5ERVIgIDB4ZjIxMzAwMDEKKworLypQMl9ETURDRkdNRCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRENGR01EICAweGYyMTQKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJfRU5BQkxFICAweGYyMTQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSAgMHhmMjE0MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DRlJfQVVUT1NDQU4gIDB4ZjIxNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTl9FTkFCTEUgIDB4ZjIxNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0FVVE9TQ0FOICAweGYyMTQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX05PRk9SQ0VfUkVMT0NLICAweGYyMTQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9STkcgIDB4ZjIxNDAwMDMKKworLypQMl9ETURDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHMiAgMHhmMjE1CisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfV0FJVExPQ0sgIDB4ZjIxNTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUzFTMl9TRVFVRU5USUFMICAweGYyMTUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX09WRVJGTE9XX1RJTUVPVVQgIDB4ZjIxNTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTkZBSUxfVElNRU9VVCAgMHhmMjE1MDAxMAorI2RlZmluZSBGMDkwMF9QMl9ETURUT1VUX0JBQ0sgIDB4ZjIxNTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19TMUVOQUJMRSAgMHhmMjE1MDAwNAorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfTEszTU9ERSAgMHhmMjE1MDAwMgorI2RlZmluZSBGMDkwMF9QMl9DT0FSU0VfTEsyTU9ERSAgMHhmMjE1MDAwMQorCisvKlAyX0RNRElTVEFURSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRElTVEFURSAgMHhmMjE2CisjZGVmaW5lIEYwOTAwX1AyX0kyQ19OT1JFU0VURE1PREUgIDB4ZjIxNjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfRVRBUEVEICAweGYyMTYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NETURSU1RfRElSQ0xLICAweGYyMTYwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0kyQ19ERU1PRF9NT0RFICAweGYyMTYwMDFmCisKKy8qUDJfRE1EVDBNKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EVDBNICAweGYyMTcKKyNkZWZpbmUgRjA5MDBfUDJfRE1EVDBfTUlOICAweGYyMTcwMGZmCisKKy8qUDJfRE1EU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMl9ETURTVEFURSAgMHhmMjFiCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0xPQ0tFRCAgMHhmMjFiMDA4MAorI2RlZmluZSBGMDkwMF9QMl9IRUFERVJfTU9ERSAgMHhmMjFiMDA2MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9NT0RFICAweGYyMWIwMDFmCisKKy8qUDJfRE1ERkxZVyovCisjZGVmaW5lIFIwOTAwX1AyX0RNREZMWVcgIDB4ZjIxYworI2RlZmluZSBGMDkwMF9QMl9JMkNfSVJRVkFMICAweGYyMWMwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0ZMWVdIRUVMX0NQVCAgMHhmMjFjMDAwZgorCisvKlAyX0RTVEFUVVMzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRFNUQVRVUzMgIDB4ZjIxZAorI2RlZmluZSBGMDkwMF9QMl9DRlJfWklHWkFHICAweGYyMWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0NGR01PREUgIDB4ZjIxZDAwNjAKKyNkZWZpbmUgRjA5MDBfUDJfR0FNTUFfTE9XQkFVRFJBVEUgIDB4ZjIxZDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUkVMT0NLX01PREUgIDB4ZjIxZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfRkFJTCAgMHhmMjFkMDAwNAorI2RlZmluZSBGMDkwMF9QMl9FVEFQRTFBX0RWQlhNRU0gIDB4ZjIxZDAwMDMKKworLypQMl9ETURDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHMyAgMHhmMjFlCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMxX1RNR1dBSVQgIDB4ZjIxZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfTk9fQldDRU5URVJJTkcgIDB4ZjIxZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfSU5WX1NFUVNSQ0ggIDB4ZjIxZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1NGUlVQTE9XX1RSSyAgMHhmMjFlMDAxMAorI2RlZmluZSBGMDkwMF9QMl9OT1NUT1BfRklGT0ZVTEwgIDB4ZjIxZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfTE9DS1RJTUVfTU9ERSAgMHhmMjFlMDAwNworCisvKlAyX0RNRENGRzQqLworI2RlZmluZSBSMDkwMF9QMl9ETURDRkc0ICAweGYyMWYKKyNkZWZpbmUgRjA5MDBfUDJfVFVORVJfTlJFTEFVTkNIICAweGYyMWYwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RJU19DTEtFTkFCTEUgIDB4ZjIxZjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0hEUkRJVkxPQ0sgIDB4ZjIxZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfTk9fVE5SV0JJTklUICAweGYyMWYwMDAxCisKKy8qUDJfQ09SUkVMTUFOVCovCisjZGVmaW5lIFIwOTAwX1AyX0NPUlJFTE1BTlQgIDB4ZjIyMAorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfTUFOVCAgMHhmMjIwMDBmZgorCisvKlAyX0NPUlJFTEFCUyovCisjZGVmaW5lIFIwOTAwX1AyX0NPUlJFTEFCUyAgMHhmMjIxCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9BQlMgIDB4ZjIyMTAwZmYKKworLypQMl9DT1JSRUxFWFAqLworI2RlZmluZSBSMDkwMF9QMl9DT1JSRUxFWFAgIDB4ZjIyMgorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfQUJTRVhQICAweGYyMjIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0NPUlJFTF9FWFAgIDB4ZjIyMjAwMGYKKworLypQMl9QTEhNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMl9QTEhNT0RDT0QgIDB4ZjIyNAorI2RlZmluZSBGMDkwMF9QMl9TUEVDSU5WX0RFTU9EICAweGYyMjQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1BMSF9NT0RDT0QgIDB4ZjIyNDAwN2MKKyNkZWZpbmUgRjA5MDBfUDJfUExIX1RZUEUgIDB4ZjIyNDAwMDMKKworLypQMl9BR0NLMzIqLworI2RlZmluZSBSMDkwMF9QMl9BR0NLMzIgIDB4ZjIyYgorI2RlZmluZSBGMDkwMF9QMl9SM0FESk9GRl8zMkFQU0sgIDB4ZjIyYjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUjJBREpPRkZfMzJBUFNLICAweGYyMmIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1IxQURKT0ZGXzMyQVBTSyAgMHhmMjJiMDAyMAorI2RlZmluZSBGMDkwMF9QMl9SQURKXzMyQVBTSyAgMHhmMjJiMDAxZgorCisvKlAyX0FHQzJPKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMk8gIDB4ZjIyYworI2RlZmluZSBGMDkwMF9QMl9BR0MyUkVGX0FESlVTVElORyAgMHhmMjJjMDA4MAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0NPQVJTRUZBU1QgIDB4ZjIyYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS1NRUlQgIDB4ZjIyYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS01PREUgIDB4ZjIyYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9MS0VRVUEgIDB4ZjIyYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9DT0VGICAweGYyMmMwMDA3CisKKy8qUDJfQUdDMlJFRiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJSRUYgIDB4ZjIyZAorI2RlZmluZSBGMDkwMF9QMl9BR0MyX1JFRiAgMHhmMjJkMDBmZgorCisvKlAyX0FHQzFBREoqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQURKICAweGYyMmUKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMUFESl9NQU5VQUwgIDB4ZjIyZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9BREpVU1RFRCAgMHhmMjJlMDE3ZgorCisvKlAyX0FHQzJJMSovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJJMSAgMHhmMjM2CisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfSU5URUdSQVRPUjEgIDB4ZjIzNjAwZmYKKworLypQMl9BR0MySTAqLworI2RlZmluZSBSMDkwMF9QMl9BR0MySTAgIDB4ZjIzNworI2RlZmluZSBGMDkwMF9QMl9BR0MyX0lOVEVHUkFUT1IwICAweGYyMzcwMGZmCisKKy8qUDJfQ0FSQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSQ0ZHICAweGYyMzgKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSVVBMT1dfQVVUTyAgMHhmMjM4MDA4MAorI2RlZmluZSBGMDkwMF9QMl9DRlJVUExPV19URVNUICAweGYyMzgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0VOX0NBUjJDRU5URVIgIDB4ZjIzODAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSSERSX05PRElWOCAgMHhmMjM4MDAxMAorI2RlZmluZSBGMDkwMF9QMl9JMkNfUk9UQSAgMHhmMjM4MDAwOAorI2RlZmluZSBGMDkwMF9QMl9ST1RBT04gIDB4ZjIzODAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfUEhfREVUX0FMR08gIDB4ZjIzODAwMDMKKworLypQMl9BQ0xDKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQyAgMHhmMjM5CisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfUzJBTFBIQSAgMHhmMjM5MDBjMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQUxQSEFfTUFOVCAgMHhmMjM5MDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQUxQSEFfRVhQICAweGYyMzkwMDBmCisKKy8qUDJfQkNMQyovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMgIDB4ZjIzYQorI2RlZmluZSBGMDkwMF9QMl9TVE9QX1MyQkVUQSAgMHhmMjNhMDBjMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQkVUQV9NQU5UICAweGYyM2EwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9CRVRBX0VYUCAgMHhmMjNhMDAwZgorCisvKlAyX0NBUkZSRVEqLworI2RlZmluZSBSMDkwMF9QMl9DQVJGUkVRICAweGYyM2QKKyNkZWZpbmUgRjA5MDBfUDJfS0NfQ09BUlNFX0VYUCAgMHhmMjNkMDBmMAorI2RlZmluZSBGMDkwMF9QMl9CRVRBX0ZSRVEgIDB4ZjIzZDAwMGYKKworLypQMl9DQVJIRFIqLworI2RlZmluZSBSMDkwMF9QMl9DQVJIRFIgIDB4ZjIzZQorI2RlZmluZSBGMDkwMF9QMl9LX0ZSRVFfSERSICAweGYyM2UwMGZmCisKKy8qUDJfTERUKi8KKyNkZWZpbmUgUjA5MDBfUDJfTERUICAweGYyM2YKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19USFJFUyAgMHhmMjNmMDFmZgorCisvKlAyX0xEVDIqLworI2RlZmluZSBSMDkwMF9QMl9MRFQyICAweGYyNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSTE9DS19USFJFUzIgIDB4ZjI0MDAxZmYKKworLypQMl9DRlJJQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSUNGRyAgMHhmMjQxCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfVU5WQUxSTkcgIDB4ZjI0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9MVU5WQUxDUFQgIDB4ZjI0MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9BQk9SVERCTCAgMHhmMjQxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0FCT1JUUFJFRCAgMHhmMjQxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX1VOVkFMU0tJUCAgMHhmMjQxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX0NTVElOQyAgMHhmMjQxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9ORUdfQ0ZSU1RFUCAgMHhmMjQxMDAwMQorCisvKlAyX0NGUlVQMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUlVQMSAgMHhmMjQyCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9VUDEgIDB4ZjI0MjAxZmYKKworLypQMl9DRlJVUDAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJVUDAgIDB4ZjI0MworI2RlZmluZSBGMDkwMF9QMl9DRlJfVVAwICAweGYyNDMwMGZmCisKKy8qUDJfQ0ZSTE9XMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUkxPVzEgIDB4ZjI0NgorI2RlZmluZSBGMDkwMF9QMl9DRlJfTE9XMSAgMHhmMjQ2MDFmZgorCisvKlAyX0NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJMT1cwICAweGYyNDcKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0xPVzAgIDB4ZjI0NzAwZmYKKworLypQMl9DRlJJTklUMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklOSVQxICAweGYyNDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOSVQxICAweGYyNDgwMWZmCisKKy8qUDJfQ0ZSSU5JVDAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTklUMCAgMHhmMjQ5CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9JTklUMCAgMHhmMjQ5MDBmZgorCisvKlAyX0NGUklOQzEqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTkMxICAweGYyNGEKKyNkZWZpbmUgRjA5MDBfUDJfTUFOVUFMX0NGUklOQyAgMHhmMjRhMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DRlJfSU5DMSAgMHhmMjRhMDE3ZgorCisvKlAyX0NGUklOQzAqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTkMwICAweGYyNGIKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOQzAgIDB4ZjI0YjAwZjAKKworLypQMl9DRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMiAgMHhmMjRjCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9GUkVRMiAgMHhmMjRjMDFmZgorCisvKlAyX0NGUjEqLworI2RlZmluZSBSMDkwMF9QMl9DRlIxICAweGYyNGQKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0ZSRVExICAweGYyNGQwMGZmCisKKy8qUDJfQ0ZSMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjAgIDB4ZjI0ZQorI2RlZmluZSBGMDkwMF9QMl9DQVJfRlJFUTAgIDB4ZjI0ZTAwZmYKKworLypQMl9MREkqLworI2RlZmluZSBSMDkwMF9QMl9MREkgIDB4ZjI0ZgorI2RlZmluZSBGMDkwMF9QMl9MT0NLX0RFVF9JTlRFR1IgIDB4ZjI0ZjAxZmYKKworLypQMl9UTUdDRkcqLworI2RlZmluZSBSMDkwMF9QMl9UTUdDRkcgIDB4ZjI1MAorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0JFVEEgIDB4ZjI1MDAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfR1JPVVBERUxBWSAgMHhmMjUwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9ET19USU1JTkdfQ09SUiAgMHhmMjUwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9NQU5VQUxfU0NBTiAgMHhmMjUwMDAwYworI2RlZmluZSBGMDkwMF9QMl9UTUdfTUlORlJFUSAgMHhmMjUwMDAwMworCisvKlAyX1JUQyovCisjZGVmaW5lIFIwOTAwX1AyX1JUQyAgMHhmMjUxCisjZGVmaW5lIEYwOTAwX1AyX1RNR0FMUEhBX0VYUCAgMHhmMjUxMDBmMAorI2RlZmluZSBGMDkwMF9QMl9UTUdCRVRBX0VYUCAgMHhmMjUxMDAwZgorCisvKlAyX1JUQ1MyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUlRDUzIgIDB4ZjI1MgorI2RlZmluZSBGMDkwMF9QMl9UTUdBTFBIQVMyX0VYUCAgMHhmMjUyMDBmMAorI2RlZmluZSBGMDkwMF9QMl9UTUdCRVRBUzJfRVhQICAweGYyNTIwMDBmCisKKy8qUDJfVE1HVEhSSVNFKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HVEhSSVNFICAweGYyNTMKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19USFJJU0UgIDB4ZjI1MzAwZmYKKworLypQMl9UTUdUSEZBTEwqLworI2RlZmluZSBSMDkwMF9QMl9UTUdUSEZBTEwgIDB4ZjI1NAorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX1RIRkFMTCAgMHhmMjU0MDBmZgorCisvKlAyX1NGUlVQUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMl9TRlJVUFJBVElPICAweGYyNTUKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX1VQUkFUSU8gIDB4ZjI1NTAwZmYKKworLypQMl9TRlJMT1dSQVRJTyovCisjZGVmaW5lIFIwOTAwX1AyX1NGUkxPV1JBVElPICAweGYyNTYKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX0xPV1JBVElPICAweGYyNTYwMGZmCisKKy8qUDJfS1JFRlRNRyovCisjZGVmaW5lIFIwOTAwX1AyX0tSRUZUTUcgIDB4ZjI1OAorI2RlZmluZSBGMDkwMF9QMl9LUkVGX1RNRyAgMHhmMjU4MDBmZgorCisvKlAyX1NGUlNURVAqLworI2RlZmluZSBSMDkwMF9QMl9TRlJTVEVQICAweGYyNTkKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX1NDQU5TVEVQICAweGYyNTkwMGYwCisjZGVmaW5lIEYwOTAwX1AyX1NGUl9DRU5URVJTVEVQICAweGYyNTkwMDBmCisKKy8qUDJfVE1HQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AyX1RNR0NGRzIgIDB4ZjI1YQorI2RlZmluZSBGMDkwMF9QMl9ESVNfQVVUT1NBTVAgIDB4ZjI1YTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfU0NBTklOSVRfUVVBUlQgIDB4ZjI1YTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfRFZCUzFERVJBVCAgMHhmMjVhMDAwMgorI2RlZmluZSBGMDkwMF9QMl9TRlJSQVRJT19GSU5FICAweGYyNWEwMDAxCisKKy8qUDJfU0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJJTklUMSAgMHhmMjVlCisjZGVmaW5lIEYwOTAwX1AyX1NGUl9JTklUMSAgMHhmMjVlMDBmZgorCisvKlAyX1NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSSU5JVDAgIDB4ZjI1ZgorI2RlZmluZSBGMDkwMF9QMl9TRlJfSU5JVDAgIDB4ZjI1ZjAwZmYKKworLypQMl9TRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJVUDEgIDB4ZjI2MAorI2RlZmluZSBGMDkwMF9QMl9BVVRPX0dVUCAgMHhmMjYwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfVVAxICAweGYyNjAwMDdmCisKKy8qUDJfU0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSVVAwICAweGYyNjEKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRX1VQMCAgMHhmMjYxMDBmZgorCisvKlAyX1NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMl9TRlJMT1cxICAweGYyNjIKKyNkZWZpbmUgRjA5MDBfUDJfQVVUT19HTE9XICAweGYyNjIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUV9MT1cxICAweGYyNjIwMDdmCisKKy8qUDJfU0ZSTE9XMCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUkxPVzAgIDB4ZjI2MworI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfTE9XMCAgMHhmMjYzMDBmZgorCisvKlAyX1NGUjMqLworI2RlZmluZSBSMDkwMF9QMl9TRlIzICAweGYyNjQKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMyAgMHhmMjY0MDBmZgorCisvKlAyX1NGUjIqLworI2RlZmluZSBSMDkwMF9QMl9TRlIyICAweGYyNjUKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMiAgMHhmMjY1MDBmZgorCisvKlAyX1NGUjEqLworI2RlZmluZSBSMDkwMF9QMl9TRlIxICAweGYyNjYKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMSAgMHhmMjY2MDBmZgorCisvKlAyX1NGUjAqLworI2RlZmluZSBSMDkwMF9QMl9TRlIwICAweGYyNjcKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRMCAgMHhmMjY3MDBmZgorCisvKlAyX1RNR1JFRzIqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcyICAweGYyNjgKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMiAgMHhmMjY4MDBmZgorCisvKlAyX1RNR1JFRzEqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcxICAweGYyNjkKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMSAgMHhmMjY5MDBmZgorCisvKlAyX1RNR1JFRzAqLworI2RlZmluZSBSMDkwMF9QMl9UTUdSRUcwICAweGYyNmEKKyNkZWZpbmUgRjA5MDBfUDJfVE1HUkVHMCAgMHhmMjZhMDBmZgorCisvKlAyX1RNR0xPQ0sxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HTE9DSzEgIDB4ZjI2YgorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0xFVkVMMSAgMHhmMjZiMDFmZgorCisvKlAyX1RNR0xPQ0swKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HTE9DSzAgIDB4ZjI2YworI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX0xFVkVMMCAgMHhmMjZjMDBmZgorCisvKlAyX1RNR09CUyovCisjZGVmaW5lIFIwOTAwX1AyX1RNR09CUyAgMHhmMjZkCisjZGVmaW5lIEYwOTAwX1AyX1JPTExPRkZfU1RBVFVTICAweGYyNmQwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1NDQU5fU0lHTiAgMHhmMjZkMDAzMAorI2RlZmluZSBGMDkwMF9QMl9UTUdfU0NBTk5JTkcgIDB4ZjI2ZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0hDRU5URVJJTkdfTU9ERSAgMHhmMjZkMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UTUdfU0NBTkZBSUwgIDB4ZjI2ZDAwMDIKKworLypQMl9FUVVBTENGRyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFMQ0ZHICAweGYyNmYKKyNkZWZpbmUgRjA5MDBfUDJfTk9UTUdfTkVHQUxXQUlUICAweGYyNmYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMX09OICAweGYyNmYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NFTF9FUVVBTENPUiAgMHhmMjZmMDAzOAorI2RlZmluZSBGMDkwMF9QMl9NVV9FUVVBTERGRSAgMHhmMjZmMDAwNworCisvKlAyX0VRVUFJMSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJMSAgMHhmMjcwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTEgIDB4ZjI3MDAxZmYKKworLypQMl9FUVVBUTEqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTEgIDB4ZjI3MQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1ExICAweGYyNzEwMWZmCisKKy8qUDJfRVFVQUkyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUkyICAweGYyNzIKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJMiAgMHhmMjcyMDFmZgorCisvKlAyX0VRVUFRMiovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRMiAgMHhmMjczCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTIgIDB4ZjI3MzAxZmYKKworLypQMl9FUVVBSTMqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTMgIDB4ZjI3NAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0kzICAweGYyNzQwMWZmCisKKy8qUDJfRVFVQVEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVEzICAweGYyNzUKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRMyAgMHhmMjc1MDFmZgorCisvKlAyX0VRVUFJNCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNCAgMHhmMjc2CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTQgIDB4ZjI3NjAxZmYKKworLypQMl9FUVVBUTQqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTQgIDB4ZjI3NworI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E0ICAweGYyNzcwMWZmCisKKy8qUDJfRVFVQUk1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk1ICAweGYyNzgKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJNSAgMHhmMjc4MDFmZgorCisvKlAyX0VRVUFRNSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRNSAgMHhmMjc5CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTUgIDB4ZjI3OTAxZmYKKworLypQMl9FUVVBSTYqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTYgIDB4ZjI3YQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k2ICAweGYyN2EwMWZmCisKKy8qUDJfRVFVQVE2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE2ICAweGYyN2IKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRNiAgMHhmMjdiMDFmZgorCisvKlAyX0VRVUFJNyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNyAgMHhmMjdjCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTcgIDB4ZjI3YzAxZmYKKworLypQMl9FUVVBUTcqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTcgIDB4ZjI3ZAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E3ICAweGYyN2QwMWZmCisKKy8qUDJfRVFVQUk4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk4ICAweGYyN2UKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJOCAgMHhmMjdlMDFmZgorCisvKlAyX0VRVUFROCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFROCAgMHhmMjdmCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTggIDB4ZjI3ZjAxZmYKKworLypQMl9OTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEFUMSAgMHhmMjgwCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDEgIDB4ZjI4MDAwZmYKKworLypQMl9OTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEFUMCAgMHhmMjgxCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFUX05PUk1FRDAgIDB4ZjI4MTAwZmYKKworLypQMl9OTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQTEgIDB4ZjI4MgorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX05PUk1FRDEgIDB4ZjI4MjAwZmYKKworLypQMl9OTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TREFUQTAgIDB4ZjI4MworI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBX05PUk1FRDAgIDB4ZjI4MzAwZmYKKworLypQMl9OTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIVDEgIDB4ZjI4NAorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDEgIDB4ZjI4NDAwZmYKKworLypQMl9OTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIVDAgIDB4ZjI4NQorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhUX05PUk1FRDAgIDB4ZjI4NTAwZmYKKworLypQMl9OTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEgxICAweGYyODYKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX05PUk1FRDEgIDB4ZjI4NjAwZmYKKworLypQMl9OTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NQTEgwICAweGYyODcKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIX05PUk1FRDAgIDB4ZjI4NzAwZmYKKworLypQMl9OT1NEQVRBVDEqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBVDEgIDB4ZjI4OAorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9VTk5PUk1FRDEgIDB4ZjI4ODAwZmYKKworLypQMl9OT1NEQVRBVDAqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBVDAgIDB4ZjI4OQorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9VTk5PUk1FRDAgIDB4ZjI4OTAwZmYKKworLypQMl9OT1NEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEExICAweGYyOGEKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9VTk5PUk1FRDEgIDB4ZjI4YTAwZmYKKworLypQMl9OT1NEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU0RBVEEwICAweGYyOGIKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9VTk5PUk1FRDAgIDB4ZjI4YjAwZmYKKworLypQMl9OT1NQTEhUMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSFQxICAweGYyOGMKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9VTk5PUk1FRDEgIDB4ZjI4YzAwZmYKKworLypQMl9OT1NQTEhUMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSFQwICAweGYyOGQKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9VTk5PUk1FRDAgIDB4ZjI4ZDAwZmYKKworLypQMl9OT1NQTEgxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIMSAgMHhmMjhlCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9VTk5PUk1FRDEgIDB4ZjI4ZTAwZmYKKworLypQMl9OT1NQTEgwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TUExIMCAgMHhmMjhmCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9VTk5PUk1FRDAgIDB4ZjI4ZjAwZmYKKworLypQMl9DQVIyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSMkNGRyAgMHhmMjkwCisjZGVmaW5lIEYwOTAwX1AyX0RFU0NSQU1CX09GRiAgMHhmMjkwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9QTjRfU0VMRUNUICAweGYyOTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NGUjJfU1RPUERWQlMxICAweGYyOTAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfQ0ZSMlVQREFURSAgMHhmMjkwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9TVE9QX05DTzJVUERBVEUgIDB4ZjI5MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfUk9UQTJPTiAgMHhmMjkwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9QSF9ERVRfQUxHTzIgIDB4ZjI5MDAwMDMKKworLypQMl9BQ0xDMiovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyICAweGYyOTEKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9QVU5DVF9BREVSQVQgIDB4ZjI5MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9BTFBIQV9NQU5UICAweGYyOTEwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfQUxQSEFfRVhQICAweGYyOTEwMDBmCisKKy8qUDJfQkNMQzIqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMiAgMHhmMjkyCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyX05JUCAgMHhmMjkyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX1BVTkNUX0JERVJBVCAgMHhmMjkyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0JFVEFfTUFOVCAgMHhmMjkyMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0JFVEFfRVhQICAweGYyOTIwMDBmCisKKy8qUDJfQ0ZSMjIqLworI2RlZmluZSBSMDkwMF9QMl9DRlIyMiAgMHhmMjkzCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfRlJFUTIgIDB4ZjI5MzAxZmYKKworLypQMl9DRlIyMSovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjIxICAweGYyOTQKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9GUkVRMSAgMHhmMjk0MDBmZgorCisvKlAyX0NGUjIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMjAgIDB4ZjI5NQorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0ZSRVEwICAweGYyOTUwMGZmCisKKy8qUDJfQUNMQzJTMlEqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMlMyUSAgMHhmMjk3CisjZGVmaW5lIEYwOTAwX1AyX0VOQUJfU1BTS1NZTUIgIDB4ZjI5NzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FBREVSQVQgIDB4ZjI5NzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQUxQSF9NICAweGYyOTcwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0FMUEhfRSAgMHhmMjk3MDAwZgorCisvKlAyX0FDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMjggIDB4ZjI5OAorI2RlZmluZSBGMDkwMF9QMl9PTERJM1FfTU9ERSAgMHhmMjk4MDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOEFERVJBVCAgMHhmMjk4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOF9BTFBIX00gIDB4ZjI5ODAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQUxQSF9FICAweGYyOTgwMDBmCisKKy8qUDJfQUNMQzJTMjE2QSovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyUzIxNkEgIDB4ZjI5OQorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBREVSQVQgIDB4ZjI5OTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9BTFBIX00gIDB4ZjI5OTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QV9BTFBIX0UgIDB4ZjI5OTAwMGYKKworLypQMl9BQ0xDMlMyMzJBKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMjMyQSAgMHhmMjlhCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFERVJBVCAgMHhmMjlhMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0FMUEhfTSAgMHhmMjlhMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBX0FMUEhfRSAgMHhmMjlhMDAwZgorCisvKlAyX0JDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMlEgIDB4ZjI5YworI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyUV9OSVAgIDB4ZjI5YzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FCREVSQVQgIDB4ZjI5YzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyX1FfQkVUQV9NICAweGYyOWMwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0JFVEFfRSAgMHhmMjljMDAwZgorCisvKlAyX0JDTEMyUzI4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMjggIDB4ZjI5ZAorI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyOF9OSVAgIDB4ZjI5ZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhCREVSQVQgIDB4ZjI5ZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQkVUQV9NICAweGYyOWQwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84X0JFVEFfRSAgMHhmMjlkMDAwZgorCisvKlAyX0JDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMlMyMTZBICAweGYyOWUKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJTMjE2QV9OSVAgIDB4ZjI5ZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QkRFUkFUICAweGYyOWUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQkVUQV9NICAweGYyOWUwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQkVUQV9FICAweGYyOWUwMDBmCisKKy8qUDJfQkNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyUzIzMkEgIDB4ZjI5ZgorI2RlZmluZSBGMDkwMF9QMl9EVkJTMlMyMzJBX05JUCAgMHhmMjlmMDA4MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJCREVSQVQgIDB4ZjI5ZjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9CRVRBX00gIDB4ZjI5ZjAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9CRVRBX0UgIDB4ZjI5ZjAwMGYKKworLypQMl9QTFJPT1QyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUExST09UMiAgMHhmMmFjCisjZGVmaW5lIEYwOTAwX1AyX1NIT1JURlJfRElTQUJMRSAgMHhmMmFjMDA4MAorI2RlZmluZSBGMDkwMF9QMl9MT05HRlJfRElTQUJMRSAgMHhmMmFjMDA0MAorI2RlZmluZSBGMDkwMF9QMl9EVU1NWVBMX0RJU0FCTEUgIDB4ZjJhYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRGUl9BVk9JRCAgMHhmMmFjMDAxMAorI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9NT0RFICAweGYyYWMwMDBjCisjZGVmaW5lIEYwOTAwX1AyX1BMU0NSQU1CX1JPT1QyICAweGYyYWMwMDAzCisKKy8qUDJfUExST09UMSovCisjZGVmaW5lIFIwOTAwX1AyX1BMUk9PVDEgIDB4ZjJhZAorI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9ST09UMSAgMHhmMmFkMDBmZgorCisvKlAyX1BMUk9PVDAqLworI2RlZmluZSBSMDkwMF9QMl9QTFJPT1QwICAweGYyYWUKKyNkZWZpbmUgRjA5MDBfUDJfUExTQ1JBTUJfUk9PVDAgIDB4ZjJhZTAwZmYKKworLypQMl9NT0RDT0RMU1QwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMCAgMHhmMmIwCisjZGVmaW5lIEYwOTAwX1AyX0VOX1RPS0VOMzEgIDB4ZjJiMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ1RBR19TRUxFQ1QgIDB4ZjJiMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfTU9EQ09EUlFfTU9ERSAgMHhmMmIwMDAzMAorCisvKlAyX01PRENPRExTVDEqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1QxICAweGYyYjEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX01PRENPRDI5ICAweGYyYjEwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS185XzEwICAweGYyYjEwMDBmCisKKy8qUDJfTU9EQ09ETFNUMiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDIgIDB4ZjJiMgorI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfOF85ICAweGYyYjIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS181XzYgIDB4ZjJiMjAwMGYKKworLypQMl9NT0RDT0RMU1QzKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMyAgMHhmMmIzCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS180XzUgIDB4ZjJiMzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzNfNCAgMHhmMmIzMDAwZgorCisvKlAyX01PRENPRExTVDQqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q0ICAweGYyYjQKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzlfMTAgIDB4ZjJiNDAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzhfOSAgMHhmMmI0MDAwZgorCisvKlAyX01PRENPRExTVDUqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q1ICAweGYyYjUKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzVfNiAgMHhmMmI1MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfNF81ICAweGYyYjUwMDBmCisKKy8qUDJfTU9EQ09ETFNUNiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDYgIDB4ZjJiNgorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfM180ICAweGYyYjYwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS18yXzMgIDB4ZjJiNjAwMGYKKworLypQMl9NT0RDT0RMU1Q3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUNyAgMHhmMmI3CisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF85XzEwICAweGYyYjcwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF84XzkgIDB4ZjJiNzAwMGYKKworLypQMl9NT0RDT0RMU1Q4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUOCAgMHhmMmI4CisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF81XzYgIDB4ZjJiODAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzNfNCAgMHhmMmI4MDAwZgorCisvKlAyX01PRENPRExTVDkqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q5ICAweGYyYjkKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzJfMyAgMHhmMmI5MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfM181ICAweGYyYjkwMDBmCisKKy8qUDJfTU9EQ09ETFNUQSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEEgIDB4ZjJiYQorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfOV8xMCAgMHhmMmJhMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfOF85ICAweGYyYmEwMDBmCisKKy8qUDJfTU9EQ09ETFNUQiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEIgIDB4ZjJiYgorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfNV82ICAweGYyYmIwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF80XzUgIDB4ZjJiYjAwMGYKKworLypQMl9NT0RDT0RMU1RDKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUQyAgMHhmMmJjCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8zXzQgIDB4ZjJiYzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzJfMyAgMHhmMmJjMDAwZgorCisvKlAyX01PRENPRExTVEQqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1REICAweGYyYmQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzNfNSAgMHhmMmJkMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMV8yICAweGYyYmQwMDBmCisKKy8qUDJfTU9EQ09ETFNURSovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEUgIDB4ZjJiZQorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMl81ICAweGYyYmUwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8xXzMgIDB4ZjJiZTAwMGYKKworLypQMl9NT0RDT0RMU1RGKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNURiAgMHhmMmJmCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8xXzQgIDB4ZjJiZjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRERFTU9EX1NFVCAgMHhmMmJmMDAwMgorI2RlZmluZSBGMDkwMF9QMl9EREVNT0RfTUFTSyAgMHhmMmJmMDAwMQorCisvKlAyX0RNRFJFU0NGRyovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0NGRyAgMHhmMmM2CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19SRVNFVCAgMHhmMmM2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTk9JU0VTUVIgIDB4ZjJjNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX1NUUkFMTCAgMHhmMmM2MDAwOAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTkVXT05MWSAgMHhmMmM2MDAwNAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTk9TVE9SRSAgMHhmMmM2MDAwMgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfQUdDMk1FTSAgMHhmMmM2MDAwMQorCisvKlAyX0RNRFJFU0FEUiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0FEUiAgMHhmMmM3CisjZGVmaW5lIEYwOTAwX1AyX1NVU1BfUFJFRENBTkFMICAweGYyYzcwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19WQUxJRENGUiAgMHhmMmM3MDA0MAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfTUVNRlVMTCAgMHhmMmM3MDAzMAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfUkVTTkJSICAweGYyYzcwMDBmCisKKy8qUDJfRE1EUkVTREFUQTcqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNyAgMHhmMmM4CisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNyAgMHhmMmM4MDBmZgorCisvKlAyX0RNRFJFU0RBVEE2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTYgIDB4ZjJjOQorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTYgIDB4ZjJjOTAwZmYKKworLypQMl9ETURSRVNEQVRBNSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEE1ICAweGYyY2EKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEE1ICAweGYyY2EwMGZmCisKKy8qUDJfRE1EUkVTREFUQTQqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNCAgMHhmMmNiCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNCAgMHhmMmNiMDBmZgorCisvKlAyX0RNRFJFU0RBVEEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTMgIDB4ZjJjYworI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTMgIDB4ZjJjYzAwZmYKKworLypQMl9ETURSRVNEQVRBMiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEEyICAweGYyY2QKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEEyICAweGYyY2QwMGZmCisKKy8qUDJfRE1EUkVTREFUQTEqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBMSAgMHhmMmNlCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBMSAgMHhmMmNlMDBmZgorCisvKlAyX0RNRFJFU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTAgIDB4ZjJjZgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTAgIDB4ZjJjZjAwZmYKKworLypQMl9GRkVJMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUkxICAweGYyZDAKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0kxICAweGYyZDAwMWZmCisKKy8qUDJfRkZFUTEqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRMSAgMHhmMmQxCisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRMSAgMHhmMmQxMDFmZgorCisvKlAyX0ZGRUkyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFSTIgIDB4ZjJkMgorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDSTIgIDB4ZjJkMjAxZmYKKworLypQMl9GRkVRMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRVEyICAweGYyZDMKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ1EyICAweGYyZDMwMWZmCisKKy8qUDJfRkZFSTMqLworI2RlZmluZSBSMDkwMF9QMl9GRkVJMyAgMHhmMmQ0CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NJMyAgMHhmMmQ0MDFmZgorCisvKlAyX0ZGRVEzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFUTMgIDB4ZjJkNQorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDUTMgIDB4ZjJkNTAxZmYKKworLypQMl9GRkVJNCovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUk0ICAweGYyZDYKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0k0ICAweGYyZDYwMWZmCisKKy8qUDJfRkZFUTQqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRNCAgMHhmMmQ3CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRNCAgMHhmMmQ3MDFmZgorCisvKlAyX0ZGRUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUNGRyAgMHhmMmQ4CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMRkZFX09OICAweGYyZDgwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFMX1VTRURTWU1CICAweGYyZDgwMDMwCisjZGVmaW5lIEYwOTAwX1AyX01VX0VRVUFMRkZFICAweGYyZDgwMDA3CisKKy8qUDJfVE5SQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ0ZHICAweGYyZTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0FDS0ZBSUwgIDB4ZjJlMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1RZUEUgIDB4ZjJlMDAwNzAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1NFQ1NUT1AgIDB4ZjJlMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1ZDT1NSQ0ggIDB4ZjJlMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX01BRERSRVNTICAweGYyZTAwMDAzCisKKy8qUDJfVE5SQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNGRzIgIDB4ZjJlMQorI2RlZmluZSBGMDkwMF9QMl9UVU5fSVFTV0FQICAweGYyZTEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfU1RFUDJNSFogIDB4ZjJlMTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9EQkxJMkMgIDB4ZjJlMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0ZDQ0sgIDB4ZjJlMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0xQRU4gIDB4ZjJlMTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0JXQ0FMQyAgMHhmMmUxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TSE9SVF9XQUlUU1RBVEVTICAweGYyZTEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RJU18yQldBR0MxICAweGYyZTEwMDAxCisKKy8qUDJfVE5SWFRBTCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlhUQUwgIDB4ZjJlNAorI2RlZmluZSBGMDkwMF9QMl9UVU5fTUNMS0RFQ0lNQUwgIDB4ZjJlNDAwZTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1hUQUxGUkVRICAweGYyZTQwMDFmCisKKy8qUDJfVE5SU1RFUFMqLworI2RlZmluZSBSMDkwMF9QMl9UTlJTVEVQUyAgMHhmMmU3CisjZGVmaW5lIEYwOTAwX1AyX1RVTkVSX0JXMVA2ICAweGYyZTcwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0JXSU5DX09GRlNFVCAgMHhmMmU3MDA3MAorI2RlZmluZSBGMDkwMF9QMl9TT0ZUU1RFUF9STkcgIDB4ZjJlNzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0JXT0ZGU0VUICAweGYyZTcwMTA3CisKKy8qUDJfVE5SR0FJTiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkdBSU4gIDB4ZjJlOAorI2RlZmluZSBGMDkwMF9QMl9UVU5fS0RJVkVOICAweGYyZTgwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjZYMDBfT0NLICAweGYyZTgwMDMwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9HQUlOICAweGYyZTgwMDBmCisKKy8qUDJfVE5SUkYxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SUkYxICAweGYyZTkKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGRlJFUTIgIDB4ZjJlOTAwZmYKKworLypQMl9UTlJSRjAqLworI2RlZmluZSBSMDkwMF9QMl9UTlJSRjAgIDB4ZjJlYQorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZGUkVRMSAgMHhmMmVhMDBmZgorCisvKlAyX1ROUkJXKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQlcgIDB4ZjJlYgorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZGUkVRMCAgMHhmMmViMDBjMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQlcgIDB4ZjJlYjAwM2YKKworLypQMl9UTlJBREoqLworI2RlZmluZSBSMDkwMF9QMl9UTlJBREogIDB4ZjJlYworI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX1JDTEsgIDB4ZjJlYzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9DQUxUSU1FICAweGYyZWMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjZYMDBfRExCICAweGYyZWMwMDM4CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYwMDBfRkNMICAweGYyZWMwMDA3CisKKy8qUDJfVE5SQ1RMMiovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNUTDIgIDB4ZjJlZAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0xDUDFfUkNDS09GRiAgMHhmMmVkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0xDUDAgIDB4ZjJlZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9YVE9VVF9SRk9VVFMgIDB4ZjJlZDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9YVE9OX01DS0RWICAweGYyZWQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfQ0FMT0ZGX0RDT0ZGICAweGYyZWQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfTFBUICAweGYyZWQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfUlggIDB4ZjJlZDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjExMF9TWU4gIDB4ZjJlZDAwMDEKKworLypQMl9UTlJDRkczKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQ0ZHMyAgMHhmMmVlCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMjBfRElTQ1RSTDEgIDB4ZjJlZTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9JTlZPUkRFUiAgMHhmMmVlMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTIwX0VOQ1RSTDYgIDB4ZjJlZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1BMTEZSRVEgIDB4ZjJlZTAwMWMKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0kyQ0ZSRVFfTU9ERSAgMHhmMmVlMDAwMworCisvKlAyX1ROUkxBVU5DSCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkxBVU5DSCAgMHhmMmYwCisKKy8qUDJfVE5STEQqLworI2RlZmluZSBSMDkwMF9QMl9UTlJMRCAgMHhmMmYwCisjZGVmaW5lIEYwOTAwX1AyX1RVTkxEX1ZDT0lORyAgMHhmMmYwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHMUZBSUwgIDB4ZjJmMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzJGQUlMICAweGYyZjAwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUczRkFJTCAgMHhmMmYwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHNEZBSUwgIDB4ZjJmMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzVGQUlMICAweGYyZjAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9CV0lORyAgMHhmMmYwMDAwMgorI2RlZmluZSBGMDkwMF9QMl9UVU5fTE9DS0VEICAweGYyZjAwMDAxCisKKy8qUDJfVE5ST0JTTCovCisjZGVmaW5lIFIwOTAwX1AyX1ROUk9CU0wgIDB4ZjJmNgorI2RlZmluZSBGMDkwMF9QMl9UVU5fSTJDQUJPUlRFRCAgMHhmMmY2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fTFBFTiAgMHhmMmY2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UVU5fRkNDSyAgMHhmMmY2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fSTJDTE9DS0VEICAweGYyZjYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9QUk9HRE9ORSAgMHhmMmY2MDAwYworI2RlZmluZSBGMDkwMF9QMl9UVU5fUkZSRVNURTEgIDB4ZjJmNjAwMDMKKworLypQMl9UTlJSRVNURSovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlJFU1RFICAweGYyZjcKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGUkVTVEUwICAweGYyZjcwMGZmCisKKy8qUDJfU01BUENPRUY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfU01BUENPRUY3ICAweGYzMDAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FTQ0FMRSAgMHhmMzAwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TTUFQQ09FRl9RX0xMUjEyICAweGYzMDAwMTdmCisKKy8qUDJfU01BUENPRUY2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfU01BUENPRUY2ICAweGYzMDEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX05FV1NDQUxFICAweGYzMDEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FESl84UFNLTExSMSAgMHhmMzAxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9PTERfOFBTS0xMUjEgIDB4ZjMwMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0FCOFBTSyAgMHhmMzAxMDAwMQorCisvKlAyX1NNQVBDT0VGNSovCisjZGVmaW5lIFIwOTAwX1AyX1NNQVBDT0VGNSAgMHhmMzAyCisjZGVmaW5lIEYwOTAwX1AyX0RJU184U0NBTEUgIDB4ZjMwMjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU01BUENPRUZfOFBfTExSMjMgIDB4ZjMwMjAxN2YKKworLypQMl9ETURQTEhTVEFUKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUExIU1RBVCAgMHhmMzIwCisjZGVmaW5lIEYwOTAwX1AyX1BMSF9TVEFUSVNUSUMgIDB4ZjMyMDAwZmYKKworLypQMl9MT0NLVElNRTMqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTMgIDB4ZjMyMgorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTMgIDB4ZjMyMjAwZmYKKworLypQMl9MT0NLVElNRTIqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTIgIDB4ZjMyMworI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTIgIDB4ZjMyMzAwZmYKKworLypQMl9MT0NLVElNRTEqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTEgIDB4ZjMyNAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTEgIDB4ZjMyNDAwZmYKKworLypQMl9MT0NLVElNRTAqLworI2RlZmluZSBSMDkwMF9QMl9MT0NLVElNRTAgIDB4ZjMyNQorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLVElNRTAgIDB4ZjMyNTAwZmYKKworLypQMl9WSVRTQ0FMRSovCisjZGVmaW5lIFIwOTAwX1AyX1ZJVFNDQUxFICAweGYzMzIKKyNkZWZpbmUgRjA5MDBfUDJfTlZUSF9OT1NSQU5HRSAgMHhmMzMyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9WRVJST1JfTUFYTU9ERSAgMHhmMzMyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9LRElWX01PREUgIDB4ZjMzMjAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfTlNMT1dTTl9MT0NLRUQgIDB4ZjMzMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfREVMT0NLX1BSRkxPU1MgIDB4ZjMzMjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1JTRkxPQ0sgIDB4ZjMzMjAwMDIKKworLypQMl9GRUNNKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkVDTSAgMHhmMzMzCisjZGVmaW5lIEYwOTAwX1AyX0RTU19EVkIgIDB4ZjMzMzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfQllQQVNTICAweGYzMzMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NNUF9TTE9XTU9ERSAgMHhmMzMzMDAyMAorI2RlZmluZSBGMDkwMF9QMl9EU1NfU1JDSCAgMHhmMzMzMDAxMAorI2RlZmluZSBGMDkwMF9QMl9ESUZGX01PREVWSVQgIDB4ZjMzMzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ1ZJVCAgMHhmMzMzMDAwMgorI2RlZmluZSBGMDkwMF9QMl9JUUlOViAgMHhmMzMzMDAwMQorCisvKlAyX1ZUSDEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMTIgIDB4ZjMzNAorI2RlZmluZSBGMDkwMF9QMl9WVEgxMiAgMHhmMzM0MDBmZgorCisvKlAyX1ZUSDIzKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMjMgIDB4ZjMzNQorI2RlZmluZSBGMDkwMF9QMl9WVEgyMyAgMHhmMzM1MDBmZgorCisvKlAyX1ZUSDM0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRIMzQgIDB4ZjMzNgorI2RlZmluZSBGMDkwMF9QMl9WVEgzNCAgMHhmMzM2MDBmZgorCisvKlAyX1ZUSDU2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINTYgIDB4ZjMzNworI2RlZmluZSBGMDkwMF9QMl9WVEg1NiAgMHhmMzM3MDBmZgorCisvKlAyX1ZUSDY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINjcgIDB4ZjMzOAorI2RlZmluZSBGMDkwMF9QMl9WVEg2NyAgMHhmMzM4MDBmZgorCisvKlAyX1ZUSDc4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfVlRINzggIDB4ZjMzOQorI2RlZmluZSBGMDkwMF9QMl9WVEg3OCAgMHhmMzM5MDBmZgorCisvKlAyX1ZJVENVUlBVTiovCisjZGVmaW5lIFIwOTAwX1AyX1ZJVENVUlBVTiAgMHhmMzNhCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9NQVBQSU5HICAweGYzM2EwMGUwCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9DVVJQVU4gIDB4ZjMzYTAwMWYKKworLypQMl9WRVJST1IqLworI2RlZmluZSBSMDkwMF9QMl9WRVJST1IgIDB4ZjMzYgorI2RlZmluZSBGMDkwMF9QMl9SRUdFUlJfVklUICAweGYzM2IwMGZmCisKKy8qUDJfUFJWSVQqLworI2RlZmluZSBSMDkwMF9QMl9QUlZJVCAgMHhmMzNjCisjZGVmaW5lIEYwOTAwX1AyX0RJU19WVEhMT0NLICAweGYzM2MwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0U3XzhWSVQgIDB4ZjMzYzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRTZfN1ZJVCAgMHhmMzNjMDAxMAorI2RlZmluZSBGMDkwMF9QMl9FNV82VklUICAweGYzM2MwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0UzXzRWSVQgIDB4ZjMzYzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRTJfM1ZJVCAgMHhmMzNjMDAwMgorI2RlZmluZSBGMDkwMF9QMl9FMV8yVklUICAweGYzM2MwMDAxCisKKy8qUDJfVkFWU1JWSVQqLworI2RlZmluZSBSMDkwMF9QMl9WQVZTUlZJVCAgMHhmMzNkCisjZGVmaW5lIEYwOTAwX1AyX0FNVklUICAweGYzM2QwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZST1pFTlZJVCAgMHhmMzNkMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TTlZJVCAgMHhmMzNkMDAzMAorI2RlZmluZSBGMDkwMF9QMl9UT1ZWSVQgIDB4ZjMzZDAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfSFlQVklUICAweGYzM2QwMDAzCisKKy8qUDJfVlNUQVRVU1ZJVCovCisjZGVmaW5lIFIwOTAwX1AyX1ZTVEFUVVNWSVQgIDB4ZjMzZQorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX09OICAweGYzM2UwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VORF9MT09QVklUICAweGYzM2UwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1ZJVEVSQklfREVQUkYgIDB4ZjMzZTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfUFJGVklUICAweGYzM2UwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tFRFZJVCAgMHhmMzNlMDAwOAorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX0RFTE9DSyAgMHhmMzNlMDAwNAorI2RlZmluZSBGMDkwMF9QMl9WSVRfREVNT0RTRUwgIDB4ZjMzZTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVklURVJCSV9DT01QT1VUICAweGYzM2UwMDAxCisKKy8qUDJfVlRISU5VU0UqLworI2RlZmluZSBSMDkwMF9QMl9WVEhJTlVTRSAgMHhmMzNmCisjZGVmaW5lIEYwOTAwX1AyX1ZJVF9JTlVTRSAgMHhmMzNmMDBmZgorCisvKlAyX0tESVYxMiovCisjZGVmaW5lIFIwOTAwX1AyX0tESVYxMiAgMHhmMzQwCisjZGVmaW5lIEYwOTAwX1AyX0tESVYxMl9NQU5VQUwgIDB4ZjM0MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzEyICAweGYzNDAwMDdmCisKKy8qUDJfS0RJVjIzKi8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjIzICAweGYzNDEKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjIzX01BTlVBTCAgMHhmMzQxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfMjMgIDB4ZjM0MTAwN2YKKworLypQMl9LRElWMzQqLworI2RlZmluZSBSMDkwMF9QMl9LRElWMzQgIDB4ZjM0MgorI2RlZmluZSBGMDkwMF9QMl9LRElWMzRfTUFOVUFMICAweGYzNDIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl8zNCAgMHhmMzQyMDA3ZgorCisvKlAyX0tESVY1NiovCisjZGVmaW5lIFIwOTAwX1AyX0tESVY1NiAgMHhmMzQzCisjZGVmaW5lIEYwOTAwX1AyX0tESVY1Nl9NQU5VQUwgIDB4ZjM0MzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzU2ICAweGYzNDMwMDdmCisKKy8qUDJfS0RJVjY3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjY3ICAweGYzNDQKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjY3X01BTlVBTCAgMHhmMzQ0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfNjcgIDB4ZjM0NDAwN2YKKworLypQMl9LRElWNzgqLworI2RlZmluZSBSMDkwMF9QMl9LRElWNzggIDB4ZjM0NQorI2RlZmluZSBGMDkwMF9QMl9LRElWNzhfTUFOVUFMICAweGYzNDUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl83OCAgMHhmMzQ1MDA3ZgorCisvKlAyX1BERUxDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxDVFJMMSAgMHhmMzUwCisjZGVmaW5lIEYwOTAwX1AyX0lOVl9NSVNNQVNLICAweGYzNTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0FDQ0VQVEVEICAweGYzNTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0ZJTFRFUl9FTiAgMHhmMzUwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9QS1RERUxJTlVTRSAgMHhmMzUwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9IWVNURU4gIDB4ZjM1MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfSFlTVFNXUlNUICAweGYzNTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0VOX01JUzAwICAweGYzNTAwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0FMR09TV1JTVCAgMHhmMzUwMDAwMQorCisvKlAyX1BERUxDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxDVFJMMiAgMHhmMzUxCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0NPTlRJTlVPVVMgIDB4ZjM1MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUkVTRVRfVVBLT19DT1VOVCAgMHhmMzUxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9VU0VSX1BLVERFTElOX05CICAweGYzNTEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0xPQ0tFRCAgMHhmMzUxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9EQVRBX1VOQkJTQ1JBTSAgMHhmMzUxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9MT05HUEtUICAweGYzNTEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0ZSQU1FX01PREUgIDB4ZjM1MTAwMDIKKworLypQMl9IWVNUVEhSRVNIKi8KKyNkZWZpbmUgUjA5MDBfUDJfSFlTVFRIUkVTSCAgMHhmMzU0CisjZGVmaW5lIEYwOTAwX1AyX1VOTENLX1RIUkVTSCAgMHhmMzU0MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ERUxJTl9MQ0tfVEhSRVNIICAweGYzNTQwMDBmCisKKy8qUDJfSVNJRU5UUlkqLworI2RlZmluZSBSMDkwMF9QMl9JU0lFTlRSWSAgMHhmMzVlCisjZGVmaW5lIEYwOTAwX1AyX0lTSV9FTlRSWSAgMHhmMzVlMDBmZgorCisvKlAyX0lTSUJJVEVOQSovCisjZGVmaW5lIFIwOTAwX1AyX0lTSUJJVEVOQSAgMHhmMzVmCisjZGVmaW5lIEYwOTAwX1AyX0lTSV9CSVRfRU4gIDB4ZjM1ZjAwZmYKKworLypQMl9NQVRTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTUFUU1RSMSAgMHhmMzYwCisjZGVmaW5lIEYwOTAwX1AyX01BVFlQRV9DVVJSRU5UMSAgMHhmMzYwMDBmZgorCisvKlAyX01BVFNUUjAqLworI2RlZmluZSBSMDkwMF9QMl9NQVRTVFIwICAweGYzNjEKKyNkZWZpbmUgRjA5MDBfUDJfTUFUWVBFX0NVUlJFTlQwICAweGYzNjEwMGZmCisKKy8qUDJfVVBMU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX1VQTFNUUjEgIDB4ZjM2MgorI2RlZmluZSBGMDkwMF9QMl9VUExfQ1VSUkVOVDEgIDB4ZjM2MjAwZmYKKworLypQMl9VUExTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBMU1RSMCAgMHhmMzYzCisjZGVmaW5lIEYwOTAwX1AyX1VQTF9DVVJSRU5UMCAgMHhmMzYzMDBmZgorCisvKlAyX0RGTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMl9ERkxTVFIxICAweGYzNjQKKyNkZWZpbmUgRjA5MDBfUDJfREZMX0NVUlJFTlQxICAweGYzNjQwMGZmCisKKy8qUDJfREZMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AyX0RGTFNUUjAgIDB4ZjM2NQorI2RlZmluZSBGMDkwMF9QMl9ERkxfQ1VSUkVOVDAgIDB4ZjM2NTAwZmYKKworLypQMl9TWU5DU1RSKi8KKyNkZWZpbmUgUjA5MDBfUDJfU1lOQ1NUUiAgMHhmMzY2CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNfQ1VSUkVOVCAgMHhmMzY2MDBmZgorCisvKlAyX1NZTkNEU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX1NZTkNEU1RSMSAgMHhmMzY3CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNEX0NVUlJFTlQxICAweGYzNjcwMGZmCisKKy8qUDJfU1lOQ0RTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU1lOQ0RTVFIwICAweGYzNjgKKyNkZWZpbmUgRjA5MDBfUDJfU1lOQ0RfQ1VSUkVOVDAgIDB4ZjM2ODAwZmYKKworLypQMl9QREVMU1RBVFVTMSovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxTVEFUVVMxICAweGYzNjkKKyNkZWZpbmUgRjA5MDBfUDJfUEtUREVMSU5fREVMT0NLICAweGYzNjkwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTkNEVVBERkxfQkFEREZMICAweGYzNjkwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NPTlRJTlVPVVNfU1RSRUFNICAweGYzNjkwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1VOQUNDRVBURURfU1RSRUFNICAweGYzNjkwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0JDSF9FUlJPUl9GTEFHICAweGYzNjkwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0JCSENSQ0tPICAweGYzNjkwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1BLVERFTElOX0xPQ0sgIDB4ZjM2OTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRklSU1RfTE9DSyAgMHhmMzY5MDAwMQorCisvKlAyX1BERUxTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfUERFTFNUQVRVUzIgIDB4ZjM2YQorI2RlZmluZSBGMDkwMF9QMl9QS1RERUxfREVNT0RTRUwgIDB4ZjM2YTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRlJBTUVfTU9EQ09EICAweGYzNmEwMDdjCisjZGVmaW5lIEYwOTAwX1AyX0ZSQU1FX1RZUEUgIDB4ZjM2YTAwMDMKKworLypQMl9CQkZDUkNLTzEqLworI2RlZmluZSBSMDkwMF9QMl9CQkZDUkNLTzEgIDB4ZjM2YgorI2RlZmluZSBGMDkwMF9QMl9CQkhDUkNfS09DTlQxICAweGYzNmIwMGZmCisKKy8qUDJfQkJGQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkJGQ1JDS08wICAweGYzNmMKKyNkZWZpbmUgRjA5MDBfUDJfQkJIQ1JDX0tPQ05UMCAgMHhmMzZjMDBmZgorCisvKlAyX1VQQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBDUkNLTzEgIDB4ZjM2ZAorI2RlZmluZSBGMDkwMF9QMl9QS1RDUkNfS09DTlQxICAweGYzNmQwMGZmCisKKy8qUDJfVVBDUkNLTzAqLworI2RlZmluZSBSMDkwMF9QMl9VUENSQ0tPMCAgMHhmMzZlCisjZGVmaW5lIEYwOTAwX1AyX1BLVENSQ19LT0NOVDAgIDB4ZjM2ZTAwZmYKKworLypQMl9UU1NUQVRFTSovCisjZGVmaW5lIFIwOTAwX1AyX1RTU1RBVEVNICAweGYzNzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNESUxfT04gIDB4ZjM3MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNTS0lQUlNfT04gIDB4ZjM3MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNSU19PTiAgMHhmMzcwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0RFU0NSQU1CX09OICAweGYzNzAwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRlJBTUVfTU9ERSAgMHhmMzcwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU19ESVNBQkxFICAweGYzNzAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTQUNNX01PREUgIDB4ZjM3MDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNPVVRfTk9TWU5DICAweGYzNzAwMDAxCisKKy8qUDJfVFNDRkdIKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNDRkdIICAweGYzNzIKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RWQkNJICAweGYzNzIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19TRVJJQUwgIDB4ZjM3MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1RFSVVQREFURSAgMHhmMzcyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRFVUWTUwICAweGYzNzIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19IU0dOTE9VVCAgMHhmMzcyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRVJSTU9ERSAgMHhmMzcyMDAwNgorI2RlZmluZSBGMDkwMF9QMl9SU1RfSFdBUkUgIDB4ZjM3MjAwMDEKKworLypQMl9UU0NGR00qLworI2RlZmluZSBSMDkwMF9QMl9UU0NGR00gIDB4ZjM3MworI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTUFOU1BFRUQgIDB4ZjM3MzAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1BFUk1EQVRBICAweGYzNzMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OT05FV1NHTkwgIDB4ZjM3MzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0JJVFNQRUVEICAweGYzNzMwMDA4CisjZGVmaW5lIEYwOTAwX1AyX05QRF9TUEVDRFZCUzIgIDB4ZjM3MzAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX1NUT1BDS0RJUyAgMHhmMzczMDAwMgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fSU5WREFUQSAgMHhmMzczMDAwMQorCisvKlAyX1RTQ0ZHTCovCisjZGVmaW5lIFIwOTAwX1AyX1RTQ0ZHTCAgMHhmMzc0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CQ0xLREVMMUNLICAweGYzNzQwMGMwCisjZGVmaW5lIEYwOTAwX1AyX0JDSEVSUk9SX01PREUgIDB4ZjM3NDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX05TR05MMkRBVEEgIDB4ZjM3NDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0VNQklORFZCICAweGYzNzQwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EUFVOQUNUICAweGYzNzQwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OUERPRkYgIDB4ZjM3NDAwMDEKKworLypQMl9UU0lOU0RFTEgqLworI2RlZmluZSBSMDkwMF9QMl9UU0lOU0RFTEggIDB4ZjM3NgorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9TWU5DQllURSAgMHhmMzc2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9YWEhFQURFUiAgMHhmMzc2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9CQkhFQURFUiAgMHhmMzc2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0RFTF9EQVRBRklFTEQgIDB4ZjM3NjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfSVNDUiAgMHhmMzc2MDAwOAorI2RlZmluZSBGMDkwMF9QMl9UU0lOU0RFTF9OUEQgIDB4ZjM3NjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfUlNQQVJJVFkgIDB4ZjM3NjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfQ1JDOCAgMHhmMzc2MDAwMQorCisvKlAyX1RTU1BFRUQqLworI2RlZmluZSBSMDkwMF9QMl9UU1NQRUVEICAweGYzODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX09VVFNQRUVEICAweGYzODAwMGZmCisKKy8qUDJfVFNTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9UU1NUQVRVUyAgMHhmMzgxCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19MSU5FT0sgIDB4ZjM4MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0VSUk9SICAweGYzODEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EQVRBNyAgMHhmMzgxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTk9TWU5DICAweGYzODEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0lTQ1JfSU5JVElBTElaRUQgIDB4ZjM4MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfSVNDUl9VUERBVEVEICAweGYzODEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NPRkZJRk9fVU5SRUdVTCAgMHhmMzgxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9ESUxfUkVBRFkgIDB4ZjM4MTAwMDEKKworLypQMl9UU1NUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMl9UU1NUQVRVUzIgIDB4ZjM4MgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fREVNT0RTRUwgIDB4ZjM4MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPU1BFRURfU1RPUkUgIDB4ZjM4MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRElMWFhfUkVTRVQgIDB4ZjM4MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNTRVJJQUxfSU1QT1MgIDB4ZjM4MjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0xJTkVOT0sgIDB4ZjM4MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQklUU1BFRURfRVZFTlQgIDB4ZjM4MjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU0NSQU1CREVURUNUICAweGYzODIwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1VMRFRWNjdfRkFMU0VMT0NLICAweGYzODIwMDAxCisKKy8qUDJfVFNCSVRSQVRFMSovCisjZGVmaW5lIFIwOTAwX1AyX1RTQklUUkFURTEgIDB4ZjM4MworI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fQklUUkFURTEgIDB4ZjM4MzAwZmYKKworLypQMl9UU0JJVFJBVEUwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNCSVRSQVRFMCAgMHhmMzg0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CSVRSQVRFMCAgMHhmMzg0MDBmZgorCisvKlAyX0VSUkNUUkwxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ1RSTDEgIDB4ZjM5OAorI2RlZmluZSBGMDkwMF9QMl9FUlJfU09VUkNFMSAgMHhmMzk4MDBmMAorI2RlZmluZSBGMDkwMF9QMl9OVU1fRVZFTlQxICAweGYzOTgwMDA3CisKKy8qUDJfRVJSQ05UMTIqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQxMiAgMHhmMzk5CisjZGVmaW5lIEYwOTAwX1AyX0VSUkNOVDFfT0xEVkFMVUUgIDB4ZjM5OTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDEyICAweGYzOTkwMDdmCisKKy8qUDJfRVJSQ05UMTEqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQxMSAgMHhmMzlhCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQxMSAgMHhmMzlhMDBmZgorCisvKlAyX0VSUkNOVDEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMTAgIDB4ZjM5YgorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMTAgIDB4ZjM5YjAwZmYKKworLypQMl9FUlJDVFJMMiovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNUUkwyICAweGYzOWMKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX1NPVVJDRTIgIDB4ZjM5YzAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfTlVNX0VWRU5UMiAgMHhmMzljMDAwNworCisvKlAyX0VSUkNOVDIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMjIgIDB4ZjM5ZAorI2RlZmluZSBGMDkwMF9QMl9FUlJDTlQyX09MRFZBTFVFICAweGYzOWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQyMiAgMHhmMzlkMDA3ZgorCisvKlAyX0VSUkNOVDIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMjEgIDB4ZjM5ZQorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMjEgIDB4ZjM5ZTAwZmYKKworLypQMl9FUlJDTlQyMCovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDIwICAweGYzOWYKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDIwICAweGYzOWYwMGZmCisKKy8qUDJfRkVDU1BZKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkVDU1BZICAweGYzYTAKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0VOQUJMRSAgMHhmM2EwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9OT19TWU5DQllURSAgMHhmM2EwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TRVJJQUxfTU9ERSAgMHhmM2EwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9VTlVTVUFMX1BBQ0tFVCAgMHhmM2EwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9CRVJfUEFDS01PREUgIDB4ZjNhMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQkVSTUVURVJfTE1PREUgIDB4ZjNhMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQkVSTUVURVJfUkVTRVQgIDB4ZjNhMDAwMDEKKworLypQMl9GU1BZQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWUNGRyAgMHhmM2ExCisjZGVmaW5lIEYwOTAwX1AyX0ZFQ1NQWV9JTlBVVCAgMHhmM2ExMDBjMAorI2RlZmluZSBGMDkwMF9QMl9SU1RfT05fRVJST1IgIDB4ZjNhMTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfT05FX1NIT1QgIDB4ZjNhMTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX01PREUgIDB4ZjNhMTAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0hZU1RFUkVTSVMgIDB4ZjNhMTAwMDMKKworLypQMl9GU1BZREFUQSovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlEQVRBICAweGYzYTIKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX1NUVUZGSU5HICAweGYzYTIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX05PRVJST1JfUEtUSklUVEVSICAweGYzYTIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9DTlVMTFBLVCAgMHhmM2EyMDAyMAorI2RlZmluZSBGMDkwMF9QMl9TUFlfT1VUREFUQV9NT0RFICAweGYzYTIwMDFmCisKKy8qUDJfRlNQWU9VVCovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlPVVQgIDB4ZjNhMworI2RlZmluZSBGMDkwMF9QMl9GU1BZX0RJUkVDVCAgMHhmM2EzMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TUFlfT1VUREFUQV9CVVMgIDB4ZjNhMzAwMzgKKyNkZWZpbmUgRjA5MDBfUDJfU1RVRkZfTU9ERSAgMHhmM2EzMDAwNworCisvKlAyX0ZTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMl9GU1RBVFVTICAweGYzYTQKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX0VORFNJTSAgMHhmM2E0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9WQUxJRF9TSU0gIDB4ZjNhNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRk9VTkRfU0lHTkFMICAweGYzYTQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RTU19TWU5DQllURSAgMHhmM2E0MDAxMAorI2RlZmluZSBGMDkwMF9QMl9SRVNVTFRfU1RBVEUgIDB4ZjNhNDAwMGYKKworLypQMl9GQkVSQ1BUNCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQ0ICAweGYzYTgKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDQgIDB4ZjNhODAwZmYKKworLypQMl9GQkVSQ1BUMyovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQzICAweGYzYTkKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDMgIDB4ZjNhOTAwZmYKKworLypQMl9GQkVSQ1BUMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQyICAweGYzYWEKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDIgIDB4ZjNhYTAwZmYKKworLypQMl9GQkVSQ1BUMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQxICAweGYzYWIKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDEgIDB4ZjNhYjAwZmYKKworLypQMl9GQkVSQ1BUMCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJDUFQwICAweGYzYWMKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0NQVDAgIDB4ZjNhYzAwZmYKKworLypQMl9GQkVSRVJSMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIyICAweGYzYWQKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjIgIDB4ZjNhZDAwZmYKKworLypQMl9GQkVSRVJSMSovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIxICAweGYzYWUKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjEgIDB4ZjNhZTAwZmYKKworLypQMl9GQkVSRVJSMCovCisjZGVmaW5lIFIwOTAwX1AyX0ZCRVJFUlIwICAweGYzYWYKKyNkZWZpbmUgRjA5MDBfUDJfRkJFUk1FVEVSX0VSUjAgIDB4ZjNhZjAwZmYKKworLypQMl9GU1BZQkVSKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNQWUJFUiAgMHhmM2IyCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlPQlNfWE9SUkVBRCAgMHhmM2IyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX09CU01PREUgIDB4ZjNiMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWUJFUl9TWU5DQllURSAgMHhmM2IyMDAxMAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX1VOU1lOQyAgMHhmM2IyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9GU1BZQkVSX0NUSU1FICAweGYzYjIwMDA3CisKKy8qUDFfSVFDT05TVCovCisjZGVmaW5lIFIwOTAwX1AxX0lRQ09OU1QgIDB4ZjQwMAorI2RlZmluZSBGMDkwMF9QMV9DT05TVEVMX1NFTEVDVCAgMHhmNDAwMDA2MAorI2RlZmluZSBGMDkwMF9QMV9JUVNZTUJfU0VMICAweGY0MDAwMDFmCisKKy8qUDFfTk9TQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TQ0ZHICAweGY0MDEKKyNkZWZpbmUgRjA5MDBfUDFfRFVNTVlQTF9OT1NEQVRBICAweGY0MDEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9CRVRBICAweGY0MDEwMDE4CisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfQkVUQSAgMHhmNDAxMDAwNworCisvKlAxX0lTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVNZTUIgIDB4ZjQwMgorI2RlZmluZSBGMDkwMF9QMV9JX1NZTUJPTCAgMHhmNDAyMDFmZgorCisvKlAxX1FTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDFfUVNZTUIgIDB4ZjQwMworI2RlZmluZSBGMDkwMF9QMV9RX1NZTUJPTCAgMHhmNDAzMDFmZgorCisvKlAxX0FHQzFDRkcqLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQ0ZHICAweGY0MDQKKyNkZWZpbmUgRjA5MDBfUDFfRENfRlJPWkVOICAweGY0MDQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RDX0NPUlJFQ1QgIDB4ZjQwNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQU1NX0ZST1pFTiAgMHhmNDA0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9BTU1fQ09SUkVDVCAgMHhmNDA0MDAxMAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX0ZST1pFTiAgMHhmNDA0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX0NPUlJFQ1QgIDB4ZjQwNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRENDT01QX1NMT1cgIDB4ZjQwNDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfSVFNSVNNX1NMT1cgIDB4ZjQwNDAwMDEKKworLypQMV9BR0MxQ04qLworI2RlZmluZSBSMDkwMF9QMV9BR0MxQ04gIDB4ZjQwNgorI2RlZmluZSBGMDkwMF9QMV9BR0MxX0xPQ0tFRCAgMHhmNDA2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX09WRVJGTE9XICAweGY0MDYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTk9TTE9XTEsgIDB4ZjQwNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9NSU5QT1dFUiAgMHhmNDA2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9BR0NPVVRfRkFTVCAgMHhmNDA2MDAwOAorI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9CRVRBICAweGY0MDYwMDA3CisKKy8qUDFfQUdDMVJFRiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFSRUYgIDB4ZjQwNworI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9SRUYgIDB4ZjQwNzAwZmYKKworLypQMV9JRENDT01QKi8KKyNkZWZpbmUgUjA5MDBfUDFfSURDQ09NUCAgMHhmNDA4CisjZGVmaW5lIEYwOTAwX1AxX0lBVkVSQUdFX0FESiAgMHhmNDA4MDFmZgorCisvKlAxX1FEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMV9RRENDT01QICAweGY0MDkKKyNkZWZpbmUgRjA5MDBfUDFfUUFWRVJBR0VfQURKICAweGY0MDkwMWZmCisKKy8qUDFfUE9XRVJJKi8KKyNkZWZpbmUgUjA5MDBfUDFfUE9XRVJJICAweGY0MGEKKyNkZWZpbmUgRjA5MDBfUDFfUE9XRVJfSSAgMHhmNDBhMDBmZgorCisvKlAxX1BPV0VSUSovCisjZGVmaW5lIFIwOTAwX1AxX1BPV0VSUSAgMHhmNDBiCisjZGVmaW5lIEYwOTAwX1AxX1BPV0VSX1EgIDB4ZjQwYjAwZmYKKworLypQMV9BR0MxQU1NKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUFNTSAgMHhmNDBjCisjZGVmaW5lIEYwOTAwX1AxX0FNTV9WQUxVRSAgMHhmNDBjMDBmZgorCisvKlAxX0FHQzFRVUFEKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMVFVQUQgIDB4ZjQwZAorI2RlZmluZSBGMDkwMF9QMV9RVUFEX1ZBTFVFICAweGY0MGQwMWZmCisKKy8qUDFfQUdDSVFJTjEqLworI2RlZmluZSBSMDkwMF9QMV9BR0NJUUlOMSAgMHhmNDBlCisjZGVmaW5lIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMSAgMHhmNDBlMDBmZgorCisvKlAxX0FHQ0lRSU4wKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDSVFJTjAgIDB4ZjQwZgorI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9WQUxVRTAgIDB4ZjQwZjAwZmYKKworLypQMV9ERU1PRCovCisjZGVmaW5lIFIwOTAwX1AxX0RFTU9EICAweGY0MTAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfU1RPUCAgMHhmNDEwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wgIDB4ZjQxMDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfRU5BU0FNUCAgMHhmNDEwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiAgMHhmNDEwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wgIDB4ZjQxMDAwMDMKKworLypQMV9ETURNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMV9ETURNT0RDT0QgIDB4ZjQxMQorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfTU9EQ09EICAweGY0MTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX01PRENPRCAgMHhmNDExMDA3YworI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9UWVBFICAweGY0MTEwMDAzCisKKy8qUDFfRFNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AxX0RTVEFUVVMgIDB4ZjQxMgorI2RlZmluZSBGMDkwMF9QMV9DQVJfTE9DSyAgMHhmNDEyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX1FVQUxJVFkgIDB4ZjQxMjAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfU0RWQlMxX0VOQUJMRSAgMHhmNDEyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9MT0NLX0RFRklOSVRJRiAgMHhmNDEyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9USU1JTkdfSVNfTE9DS0VEICAweGY0MTIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9UTUdMT0NLICAweGY0MTIwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9DQVJMT0NLICAweGY0MTIwMDAxCisKKy8qUDFfRFNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMV9EU1RBVFVTMiAgMHhmNDEzCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0RFTE9DSyAgMHhmNDEzMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9USU1FT1VUICAweGY0MTMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX01PRENPRFJRX1NZTkNUQUcgIDB4ZjQxMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfUE9MWVBIX1NBVEVWRU5UICAweGY0MTMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTk9TSUdOQUxBQ0sgIDB4ZjQxMzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9PVkVSRkxPVyAgMHhmNDEzMDAwNAorI2RlZmluZSBGMDkwMF9QMV9DRlJfT1ZFUkZMT1cgIDB4ZjQxMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfR0FNTUFfT1ZFUlVOREVSICAweGY0MTMwMDAxCisKKy8qUDFfRE1EQ0ZHTUQqLworI2RlZmluZSBSMDkwMF9QMV9ETURDRkdNRCAgMHhmNDE0CisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSAgMHhmNDE0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9EVkJTMV9FTkFCTEUgIDB4ZjQxNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOICAweGY0MTQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NDQU5fRU5BQkxFICAweGY0MTQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9BVVRPU0NBTiAgMHhmNDE0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9OT0ZPUkNFX1JFTE9DSyAgMHhmNDE0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUk5HICAweGY0MTQwMDAzCisKKy8qUDFfRE1EQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGRzIgIDB4ZjQxNQorI2RlZmluZSBGMDkwMF9QMV9BR0MxX1dBSVRMT0NLICAweGY0MTUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1MxUzJfU0VRVUVOVElBTCAgMHhmNDE1MDA0MAorI2RlZmluZSBGMDkwMF9QMV9PVkVSRkxPV19USU1FT1VUICAweGY0MTUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NDQU5GQUlMX1RJTUVPVVQgIDB4ZjQxNTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EVE9VVF9CQUNLICAweGY0MTUwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfUzFFTkFCTEUgIDB4ZjQxNTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX0xLM01PREUgIDB4ZjQxNTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfQ09BUlNFX0xLMk1PREUgIDB4ZjQxNTAwMDEKKworLypQMV9ETURJU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMV9ETURJU1RBVEUgIDB4ZjQxNgorI2RlZmluZSBGMDkwMF9QMV9JMkNfTk9SRVNFVERNT0RFICAweGY0MTYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0VUQVBFRCAgMHhmNDE2MDA0MAorI2RlZmluZSBGMDkwMF9QMV9TRE1EUlNUX0RJUkNMSyAgMHhmNDE2MDAyMAorI2RlZmluZSBGMDkwMF9QMV9JMkNfREVNT0RfTU9ERSAgMHhmNDE2MDAxZgorCisvKlAxX0RNRFQwTSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFQwTSAgMHhmNDE3CisjZGVmaW5lIEYwOTAwX1AxX0RNRFQwX01JTiAgMHhmNDE3MDBmZgorCisvKlAxX0RNRFNUQVRFKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EU1RBVEUgIDB4ZjQxYgorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9MT0NLRUQgIDB4ZjQxYjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfSEVBREVSX01PREUgIDB4ZjQxYjAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTU9ERSAgMHhmNDFiMDAxZgorCisvKlAxX0RNREZMWVcqLworI2RlZmluZSBSMDkwMF9QMV9ETURGTFlXICAweGY0MWMKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX0lSUVZBTCAgMHhmNDFjMDBmMAorI2RlZmluZSBGMDkwMF9QMV9GTFlXSEVFTF9DUFQgIDB4ZjQxYzAwMGYKKworLypQMV9EU1RBVFVTMyovCisjZGVmaW5lIFIwOTAwX1AxX0RTVEFUVVMzICAweGY0MWQKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX1pJR1pBRyAgMHhmNDFkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9DRkdNT0RFICAweGY0MWQwMDYwCisjZGVmaW5lIEYwOTAwX1AxX0dBTU1BX0xPV0JBVURSQVRFICAweGY0MWQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1JFTE9DS19NT0RFICAweGY0MWQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0ZBSUwgIDB4ZjQxZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRVRBUEUxQV9EVkJYTUVNICAweGY0MWQwMDAzCisKKy8qUDFfRE1EQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGRzMgIDB4ZjQxZQorI2RlZmluZSBGMDkwMF9QMV9EVkJTMV9UTUdXQUlUICAweGY0MWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX05PX0JXQ0VOVEVSSU5HICAweGY0MWUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0lOVl9TRVFTUkNIICAweGY0MWUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19TRlJVUExPV19UUksgIDB4ZjQxZTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTk9TVE9QX0ZJRk9GVUxMICAweGY0MWUwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0xPQ0tUSU1FX01PREUgIDB4ZjQxZTAwMDcKKworLypQMV9ETURDRkc0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EQ0ZHNCAgMHhmNDFmCisjZGVmaW5lIEYwOTAwX1AxX1RVTkVSX05SRUxBVU5DSCAgMHhmNDFmMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ESVNfQ0xLRU5BQkxFICAweGY0MWYwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RJU19IRFJESVZMT0NLICAweGY0MWYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX05PX1ROUldCSU5JVCAgMHhmNDFmMDAwMQorCisvKlAxX0NPUlJFTE1BTlQqLworI2RlZmluZSBSMDkwMF9QMV9DT1JSRUxNQU5UICAweGY0MjAKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX01BTlQgIDB4ZjQyMDAwZmYKKworLypQMV9DT1JSRUxBQlMqLworI2RlZmluZSBSMDkwMF9QMV9DT1JSRUxBQlMgIDB4ZjQyMQorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfQUJTICAweGY0MjEwMGZmCisKKy8qUDFfQ09SUkVMRVhQKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ09SUkVMRVhQICAweGY0MjIKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX0FCU0VYUCAgMHhmNDIyMDBmMAorI2RlZmluZSBGMDkwMF9QMV9DT1JSRUxfRVhQICAweGY0MjIwMDBmCisKKy8qUDFfUExITU9EQ09EKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExITU9EQ09EICAweGY0MjQKKyNkZWZpbmUgRjA5MDBfUDFfU1BFQ0lOVl9ERU1PRCAgMHhmNDI0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9QTEhfTU9EQ09EICAweGY0MjQwMDdjCisjZGVmaW5lIEYwOTAwX1AxX1BMSF9UWVBFICAweGY0MjQwMDAzCisKKy8qUDFfQUdDSzMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDSzMyICAweGY0MmIKKyNkZWZpbmUgRjA5MDBfUDFfUjNBREpPRkZfMzJBUFNLICAweGY0MmIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1IyQURKT0ZGXzMyQVBTSyAgMHhmNDJiMDA0MAorI2RlZmluZSBGMDkwMF9QMV9SMUFESk9GRl8zMkFQU0sgIDB4ZjQyYjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfUkFESl8zMkFQU0sgIDB4ZjQyYjAwMWYKKworLypQMV9BR0MyTyovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzJPICAweGY0MmMKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMlJFRl9BREpVU1RJTkcgIDB4ZjQyYzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9DT0FSU0VGQVNUICAweGY0MmMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtTUVJUICAweGY0MmMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtNT0RFICAweGY0MmMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfTEtFUVVBICAweGY0MmMwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfQ09FRiAgMHhmNDJjMDAwNworCisvKlAxX0FHQzJSRUYqLworI2RlZmluZSBSMDkwMF9QMV9BR0MyUkVGICAweGY0MmQKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9SRUYgIDB4ZjQyZDAwZmYKKworLypQMV9BR0MxQURKKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUFESiAgMHhmNDJlCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFBREpfTUFOVUFMICAweGY0MmUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfQURKVVNURUQgIDB4ZjQyZTAxN2YKKworLypQMV9BR0MySTEqLworI2RlZmluZSBSMDkwMF9QMV9BR0MySTEgIDB4ZjQzNgorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0lOVEVHUkFUT1IxICAweGY0MzYwMGZmCisKKy8qUDFfQUdDMkkwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMkkwICAweGY0MzcKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9JTlRFR1JBVE9SMCAgMHhmNDM3MDBmZgorCisvKlAxX0NBUkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NBUkNGRyAgMHhmNDM4CisjZGVmaW5lIEYwOTAwX1AxX0NGUlVQTE9XX0FVVE8gIDB4ZjQzODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSVVBMT1dfVEVTVCAgMHhmNDM4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9FTl9DQVIyQ0VOVEVSICAweGY0MzgwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0NBUkhEUl9OT0RJVjggIDB4ZjQzODAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX1JPVEEgIDB4ZjQzODAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfUk9UQU9OICAweGY0MzgwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1BIX0RFVF9BTEdPICAweGY0MzgwMDAzCisKKy8qUDFfQUNMQyovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMgIDB4ZjQzOQorI2RlZmluZSBGMDkwMF9QMV9TVE9QX1MyQUxQSEEgIDB4ZjQzOTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0FMUEhBX01BTlQgIDB4ZjQzOTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0FMUEhBX0VYUCAgMHhmNDM5MDAwZgorCisvKlAxX0JDTEMqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDICAweGY0M2EKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9TMkJFVEEgIDB4ZjQzYTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0JFVEFfTUFOVCAgMHhmNDNhMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVJfQkVUQV9FWFAgIDB4ZjQzYTAwMGYKKworLypQMV9DQVJGUkVRKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSRlJFUSAgMHhmNDNkCisjZGVmaW5lIEYwOTAwX1AxX0tDX0NPQVJTRV9FWFAgIDB4ZjQzZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfQkVUQV9GUkVRICAweGY0M2QwMDBmCisKKy8qUDFfQ0FSSERSKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0FSSERSICAweGY0M2UKKyNkZWZpbmUgRjA5MDBfUDFfS19GUkVRX0hEUiAgMHhmNDNlMDBmZgorCisvKlAxX0xEVCovCisjZGVmaW5lIFIwOTAwX1AxX0xEVCAgMHhmNDNmCisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfVEhSRVMgIDB4ZjQzZjAxZmYKKworLypQMV9MRFQyKi8KKyNkZWZpbmUgUjA5MDBfUDFfTERUMiAgMHhmNDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUkxPQ0tfVEhSRVMyICAweGY0NDAwMWZmCisKKy8qUDFfQ0ZSSUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklDRkcgIDB4ZjQ0MQorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX1VOVkFMUk5HICAweGY0NDEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfTFVOVkFMQ1BUICAweGY0NDEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfQUJPUlREQkwgIDB4ZjQ0MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9BQk9SVFBSRUQgIDB4ZjQ0MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9VTlZBTFNLSVAgIDB4ZjQ0MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9DU1RJTkMgIDB4ZjQ0MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfTkVHX0NGUlNURVAgIDB4ZjQ0MTAwMDEKKworLypQMV9DRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJVUDEgIDB4ZjQ0MgorI2RlZmluZSBGMDkwMF9QMV9DRlJfVVAxICAweGY0NDIwMWZmCisKKy8qUDFfQ0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSVVAwICAweGY0NDMKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX1VQMCAgMHhmNDQzMDBmZgorCisvKlAxX0NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJMT1cxICAweGY0NDYKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0xPVzEgIDB4ZjQ0NjAxZmYKKworLypQMV9DRlJMT1cwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSTE9XMCAgMHhmNDQ3CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9MT1cwICAweGY0NDcwMGZmCisKKy8qUDFfQ0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJTklUMSAgMHhmNDQ4CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTklUMSAgMHhmNDQ4MDFmZgorCisvKlAxX0NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5JVDAgIDB4ZjQ0OQorI2RlZmluZSBGMDkwMF9QMV9DRlJfSU5JVDAgIDB4ZjQ0OTAwZmYKKworLypQMV9DRlJJTkMxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5DMSAgMHhmNDRhCisjZGVmaW5lIEYwOTAwX1AxX01BTlVBTF9DRlJJTkMgIDB4ZjQ0YTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0lOQzEgIDB4ZjQ0YTAxN2YKKworLypQMV9DRlJJTkMwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5DMCAgMHhmNDRiCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTkMwICAweGY0NGIwMGYwCisKKy8qUDFfQ0ZSMiovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIgIDB4ZjQ0YworI2RlZmluZSBGMDkwMF9QMV9DQVJfRlJFUTIgIDB4ZjQ0YzAxZmYKKworLypQMV9DRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMSAgMHhmNDRkCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9GUkVRMSAgMHhmNDRkMDBmZgorCisvKlAxX0NGUjAqLworI2RlZmluZSBSMDkwMF9QMV9DRlIwICAweGY0NGUKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0ZSRVEwICAweGY0NGUwMGZmCisKKy8qUDFfTERJKi8KKyNkZWZpbmUgUjA5MDBfUDFfTERJICAweGY0NGYKKyNkZWZpbmUgRjA5MDBfUDFfTE9DS19ERVRfSU5URUdSICAweGY0NGYwMWZmCisKKy8qUDFfVE1HQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HQ0ZHICAweGY0NTAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19CRVRBICAweGY0NTAwMGMwCisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX0dST1VQREVMQVkgIDB4ZjQ1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRE9fVElNSU5HX0NPUlIgIDB4ZjQ1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTUFOVUFMX1NDQU4gIDB4ZjQ1MDAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX01JTkZSRVEgIDB4ZjQ1MDAwMDMKKworLypQMV9SVEMqLworI2RlZmluZSBSMDkwMF9QMV9SVEMgIDB4ZjQ1MQorI2RlZmluZSBGMDkwMF9QMV9UTUdBTFBIQV9FWFAgIDB4ZjQ1MTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQkVUQV9FWFAgIDB4ZjQ1MTAwMGYKKworLypQMV9SVENTMiovCisjZGVmaW5lIFIwOTAwX1AxX1JUQ1MyICAweGY0NTIKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQUxQSEFTMl9FWFAgIDB4ZjQ1MjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQkVUQVMyX0VYUCAgMHhmNDUyMDAwZgorCisvKlAxX1RNR1RIUklTRSovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1RIUklTRSAgMHhmNDUzCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfVEhSSVNFICAweGY0NTMwMGZmCisKKy8qUDFfVE1HVEhGQUxMKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HVEhGQUxMICAweGY0NTQKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19USEZBTEwgIDB4ZjQ1NDAwZmYKKworLypQMV9TRlJVUFJBVElPKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSVVBSQVRJTyAgMHhmNDU1CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9VUFJBVElPICAweGY0NTUwMGZmCisKKy8qUDFfU0ZSTE9XUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMV9TRlJMT1dSQVRJTyAgMHhmNDU2CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9MT1dSQVRJTyAgMHhmNDU2MDBmZgorCisvKlAxX0tSRUZUTUcqLworI2RlZmluZSBSMDkwMF9QMV9LUkVGVE1HICAweGY0NTgKKyNkZWZpbmUgRjA5MDBfUDFfS1JFRl9UTUcgIDB4ZjQ1ODAwZmYKKworLypQMV9TRlJTVEVQKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSU1RFUCAgMHhmNDU5CisjZGVmaW5lIEYwOTAwX1AxX1NGUl9TQ0FOU1RFUCAgMHhmNDU5MDBmMAorI2RlZmluZSBGMDkwMF9QMV9TRlJfQ0VOVEVSU1RFUCAgMHhmNDU5MDAwZgorCisvKlAxX1RNR0NGRzIqLworI2RlZmluZSBSMDkwMF9QMV9UTUdDRkcyICAweGY0NWEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0FVVE9TQU1QICAweGY0NWEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1NDQU5JTklUX1FVQVJUICAweGY0NWEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX0RWQlMxREVSQVQgIDB4ZjQ1YTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSUkFUSU9fRklORSAgMHhmNDVhMDAwMQorCisvKlAxX1NGUklOSVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSSU5JVDEgIDB4ZjQ1ZQorI2RlZmluZSBGMDkwMF9QMV9TRlJfSU5JVDEgIDB4ZjQ1ZTAwZmYKKworLypQMV9TRlJJTklUMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUklOSVQwICAweGY0NWYKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX0lOSVQwICAweGY0NWYwMGZmCisKKy8qUDFfU0ZSVVAxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSVVAxICAweGY0NjAKKyNkZWZpbmUgRjA5MDBfUDFfQVVUT19HVVAgIDB4ZjQ2MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX1VQMSAgMHhmNDYwMDA3ZgorCisvKlAxX1NGUlVQMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUlVQMCAgMHhmNDYxCisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUV9VUDAgIDB4ZjQ2MTAwZmYKKworLypQMV9TRlJMT1cxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSTE9XMSAgMHhmNDYyCisjZGVmaW5lIEYwOTAwX1AxX0FVVE9fR0xPVyAgMHhmNDYyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVFfTE9XMSAgMHhmNDYyMDA3ZgorCisvKlAxX1NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMV9TRlJMT1cwICAweGY0NjMKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX0xPVzAgIDB4ZjQ2MzAwZmYKKworLypQMV9TRlIzKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMyAgMHhmNDY0CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTMgIDB4ZjQ2NDAwZmYKKworLypQMV9TRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMiAgMHhmNDY1CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTIgIDB4ZjQ2NTAwZmYKKworLypQMV9TRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMSAgMHhmNDY2CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTEgIDB4ZjQ2NjAwZmYKKworLypQMV9TRlIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSMCAgMHhmNDY3CisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUTAgIDB4ZjQ2NzAwZmYKKworLypQMV9UTUdSRUcyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMiAgMHhmNDY4CisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzIgIDB4ZjQ2ODAwZmYKKworLypQMV9UTUdSRUcxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMSAgMHhmNDY5CisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzEgIDB4ZjQ2OTAwZmYKKworLypQMV9UTUdSRUcwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HUkVHMCAgMHhmNDZhCisjZGVmaW5lIEYwOTAwX1AxX1RNR1JFRzAgIDB4ZjQ2YTAwZmYKKworLypQMV9UTUdMT0NLMSovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0xPQ0sxICAweGY0NmIKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19MRVZFTDEgIDB4ZjQ2YjAxZmYKKworLypQMV9UTUdMT0NLMCovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0xPQ0swICAweGY0NmMKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19MRVZFTDAgIDB4ZjQ2YzAwZmYKKworLypQMV9UTUdPQlMqLworI2RlZmluZSBSMDkwMF9QMV9UTUdPQlMgIDB4ZjQ2ZAorI2RlZmluZSBGMDkwMF9QMV9ST0xMT0ZGX1NUQVRVUyAgMHhmNDZkMDBjMAorI2RlZmluZSBGMDkwMF9QMV9TQ0FOX1NJR04gIDB4ZjQ2ZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX1NDQU5OSU5HICAweGY0NmQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0NIQ0VOVEVSSU5HX01PREUgIDB4ZjQ2ZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVE1HX1NDQU5GQUlMICAweGY0NmQwMDAyCisKKy8qUDFfRVFVQUxDRkcqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBTENGRyAgMHhmNDZmCisjZGVmaW5lIEYwOTAwX1AxX05PVE1HX05FR0FMV0FJVCAgMHhmNDZmMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTF9PTiAgMHhmNDZmMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TRUxfRVFVQUxDT1IgIDB4ZjQ2ZjAwMzgKKyNkZWZpbmUgRjA5MDBfUDFfTVVfRVFVQUxERkUgIDB4ZjQ2ZjAwMDcKKworLypQMV9FUVVBSTEqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTEgIDB4ZjQ3MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0kxICAweGY0NzAwMWZmCisKKy8qUDFfRVFVQVExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVExICAweGY0NzEKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRMSAgMHhmNDcxMDFmZgorCisvKlAxX0VRVUFJMiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJMiAgMHhmNDcyCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTIgIDB4ZjQ3MjAxZmYKKworLypQMV9FUVVBUTIqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTIgIDB4ZjQ3MworI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1EyICAweGY0NzMwMWZmCisKKy8qUDFfRVFVQUkzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUkzICAweGY0NzQKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJMyAgMHhmNDc0MDFmZgorCisvKlAxX0VRVUFRMyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRMyAgMHhmNDc1CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTMgIDB4ZjQ3NTAxZmYKKworLypQMV9FUVVBSTQqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTQgIDB4ZjQ3NgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k0ICAweGY0NzYwMWZmCisKKy8qUDFfRVFVQVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE0ICAweGY0NzcKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNCAgMHhmNDc3MDFmZgorCisvKlAxX0VRVUFJNSovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJNSAgMHhmNDc4CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTUgIDB4ZjQ3ODAxZmYKKworLypQMV9FUVVBUTUqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTUgIDB4ZjQ3OQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E1ICAweGY0NzkwMWZmCisKKy8qUDFfRVFVQUk2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk2ICAweGY0N2EKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJNiAgMHhmNDdhMDFmZgorCisvKlAxX0VRVUFRNiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRNiAgMHhmNDdiCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTYgIDB4ZjQ3YjAxZmYKKworLypQMV9FUVVBSTcqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTcgIDB4ZjQ3YworI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k3ICAweGY0N2MwMWZmCisKKy8qUDFfRVFVQVE3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE3ICAweGY0N2QKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNyAgMHhmNDdkMDFmZgorCisvKlAxX0VRVUFJOCovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJOCAgMHhmNDdlCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTggIDB4ZjQ3ZTAxZmYKKworLypQMV9FUVVBUTgqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTggIDB4ZjQ3ZgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E4ICAweGY0N2YwMWZmCisKKy8qUDFfTk5PU0RBVEFUMSovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBVDEgIDB4ZjQ4MAorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQxICAweGY0ODAwMGZmCisKKy8qUDFfTk5PU0RBVEFUMCovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBVDAgIDB4ZjQ4MQorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQwICAweGY0ODEwMGZmCisKKy8qUDFfTk5PU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEExICAweGY0ODIKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9OT1JNRUQxICAweGY0ODIwMGZmCisKKy8qUDFfTk5PU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU0RBVEEwICAweGY0ODMKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQV9OT1JNRUQwICAweGY0ODMwMGZmCisKKy8qUDFfTk5PU1BMSFQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSFQxICAweGY0ODQKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQxICAweGY0ODQwMGZmCisKKy8qUDFfTk5PU1BMSFQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSFQwICAweGY0ODUKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIVF9OT1JNRUQwICAweGY0ODUwMGZmCisKKy8qUDFfTk5PU1BMSDEqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIMSAgMHhmNDg2CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9OT1JNRUQxICAweGY0ODYwMGZmCisKKy8qUDFfTk5PU1BMSDAqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TUExIMCAgMHhmNDg3CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSF9OT1JNRUQwICAweGY0ODcwMGZmCisKKy8qUDFfTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQVQxICAweGY0ODgKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfVU5OT1JNRUQxICAweGY0ODgwMGZmCisKKy8qUDFfTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQVQwICAweGY0ODkKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfVU5OT1JNRUQwICAweGY0ODkwMGZmCisKKy8qUDFfTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBMSAgMHhmNDhhCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfVU5OT1JNRUQxICAweGY0OGEwMGZmCisKKy8qUDFfTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NEQVRBMCAgMHhmNDhiCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfVU5OT1JNRUQwICAweGY0OGIwMGZmCisKKy8qUDFfTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEhUMSAgMHhmNDhjCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfVU5OT1JNRUQxICAweGY0OGMwMGZmCisKKy8qUDFfTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEhUMCAgMHhmNDhkCisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfVU5OT1JNRUQwICAweGY0OGQwMGZmCisKKy8qUDFfTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSDEgIDB4ZjQ4ZQorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfVU5OT1JNRUQxICAweGY0OGUwMGZmCisKKy8qUDFfTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AxX05PU1BMSDAgIDB4ZjQ4ZgorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfVU5OT1JNRUQwICAweGY0OGYwMGZmCisKKy8qUDFfQ0FSMkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0NBUjJDRkcgIDB4ZjQ5MAorI2RlZmluZSBGMDkwMF9QMV9ERVNDUkFNQl9PRkYgIDB4ZjQ5MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUE40X1NFTEVDVCAgMHhmNDkwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DRlIyX1NUT1BEVkJTMSAgMHhmNDkwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9TVE9QX0NGUjJVUERBVEUgIDB4ZjQ5MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9OQ08yVVBEQVRFICAweGY0OTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1JPVEEyT04gIDB4ZjQ5MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfUEhfREVUX0FMR08yICAweGY0OTAwMDAzCisKKy8qUDFfQUNMQzIqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMiAgMHhmNDkxCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfUFVOQ1RfQURFUkFUICAweGY0OTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfQUxQSEFfTUFOVCAgMHhmNDkxMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0FMUEhBX0VYUCAgMHhmNDkxMDAwZgorCisvKlAxX0JDTEMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzIgIDB4ZjQ5MgorI2RlZmluZSBGMDkwMF9QMV9EVkJTMl9OSVAgIDB4ZjQ5MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9QVU5DVF9CREVSQVQgIDB4ZjQ5MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9CRVRBX01BTlQgIDB4ZjQ5MjAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9CRVRBX0VYUCAgMHhmNDkyMDAwZgorCisvKlAxX0NGUjIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMjIgIDB4ZjQ5MworI2RlZmluZSBGMDkwMF9QMV9DQVIyX0ZSRVEyICAweGY0OTMwMWZmCisKKy8qUDFfQ0ZSMjEqLworI2RlZmluZSBSMDkwMF9QMV9DRlIyMSAgMHhmNDk0CisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfRlJFUTEgIDB4ZjQ5NDAwZmYKKworLypQMV9DRlIyMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIwICAweGY0OTUKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9GUkVRMCAgMHhmNDk1MDBmZgorCisvKlAxX0FDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzJTMlEgIDB4ZjQ5NworI2RlZmluZSBGMDkwMF9QMV9FTkFCX1NQU0tTWU1CICAweGY0OTcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RQURFUkFUICAweGY0OTcwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0FMUEhfTSAgMHhmNDk3MDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9BTFBIX0UgIDB4ZjQ5NzAwMGYKKworLypQMV9BQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzI4ICAweGY0OTgKKyNkZWZpbmUgRjA5MDBfUDFfT0xESTNRX01PREUgIDB4ZjQ5ODAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhBREVSQVQgIDB4ZjQ5ODAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhfQUxQSF9NICAweGY0OTgwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0FMUEhfRSAgMHhmNDk4MDAwZgorCisvKlAxX0FDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMlMyMTZBICAweGY0OTkKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QURFUkFUICAweGY0OTkwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQUxQSF9NICAweGY0OTkwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFfQUxQSF9FICAweGY0OTkwMDBmCisKKy8qUDFfQUNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzIzMkEgIDB4ZjQ5YQorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBREVSQVQgIDB4ZjQ5YTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9BTFBIX00gIDB4ZjQ5YTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQV9BTFBIX0UgIDB4ZjQ5YTAwMGYKKworLypQMV9CQ0xDMlMyUSovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzJRICAweGY0OWMKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMlFfTklQICAweGY0OWMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RQkRFUkFUICAweGY0OWMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl9RX0JFVEFfTSAgMHhmNDljMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9CRVRBX0UgIDB4ZjQ5YzAwMGYKKworLypQMV9CQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzI4ICAweGY0OWQKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMjhfTklQICAweGY0OWQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84QkRFUkFUICAweGY0OWQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0JFVEFfTSAgMHhmNDlkMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOF9CRVRBX0UgIDB4ZjQ5ZDAwMGYKKworLypQMV9CQ0xDMlMyMTZBKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzJTMjE2QSAgMHhmNDllCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyUzIxNkFfTklQICAweGY0OWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkJERVJBVCAgMHhmNDllMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0JFVEFfTSAgMHhmNDllMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0JFVEFfRSAgMHhmNDllMDAwZgorCisvKlAxX0JDTEMyUzIzMkEqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMlMyMzJBICAweGY0OWYKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJTMjMyQV9OSVAgIDB4ZjQ5ZjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQkRFUkFUICAweGY0OWYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQkVUQV9NICAweGY0OWYwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQkVUQV9FICAweGY0OWYwMDBmCisKKy8qUDFfUExST09UMiovCisjZGVmaW5lIFIwOTAwX1AxX1BMUk9PVDIgIDB4ZjRhYworI2RlZmluZSBGMDkwMF9QMV9TSE9SVEZSX0RJU0FCTEUgIDB4ZjRhYzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTE9OR0ZSX0RJU0FCTEUgIDB4ZjRhYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRFVNTVlQTF9ESVNBQkxFICAweGY0YWMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NIT1JURlJfQVZPSUQgIDB4ZjRhYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfTU9ERSAgMHhmNGFjMDAwYworI2RlZmluZSBGMDkwMF9QMV9QTFNDUkFNQl9ST09UMiAgMHhmNGFjMDAwMworCisvKlAxX1BMUk9PVDEqLworI2RlZmluZSBSMDkwMF9QMV9QTFJPT1QxICAweGY0YWQKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfUk9PVDEgIDB4ZjRhZDAwZmYKKworLypQMV9QTFJPT1QwKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExST09UMCAgMHhmNGFlCisjZGVmaW5lIEYwOTAwX1AxX1BMU0NSQU1CX1JPT1QwICAweGY0YWUwMGZmCisKKy8qUDFfTU9EQ09ETFNUMCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDAgIDB4ZjRiMAorI2RlZmluZSBGMDkwMF9QMV9FTl9UT0tFTjMxICAweGY0YjAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NZTkNUQUdfU0VMRUNUICAweGY0YjAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX01PRENPRFJRX01PREUgIDB4ZjRiMDAwMzAKKworLypQMV9NT0RDT0RMU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUMSAgMHhmNGIxCisjZGVmaW5lIEYwOTAwX1AxX0RJU19NT0RDT0QyOSAgMHhmNGIxMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfOV8xMCAgMHhmNGIxMDAwZgorCisvKlAxX01PRENPRExTVDIqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1QyICAweGY0YjIKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzhfOSAgMHhmNGIyMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfNV82ICAweGY0YjIwMDBmCisKKy8qUDFfTU9EQ09ETFNUMyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDMgIDB4ZjRiMworI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfNF81ICAweGY0YjMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS18zXzQgIDB4ZjRiMzAwMGYKKworLypQMV9NT0RDT0RMU1Q0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNCAgMHhmNGI0CisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS185XzEwICAweGY0YjQwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS184XzkgIDB4ZjRiNDAwMGYKKworLypQMV9NT0RDT0RMU1Q1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNSAgMHhmNGI1CisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS181XzYgIDB4ZjRiNTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzRfNSAgMHhmNGI1MDAwZgorCisvKlAxX01PRENPRExTVDYqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q2ICAweGY0YjYKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzNfNCAgMHhmNGI2MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfMl8zICAweGY0YjYwMDBmCisKKy8qUDFfTU9EQ09ETFNUNyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDcgIDB4ZjRiNworI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfOV8xMCAgMHhmNGI3MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfOF85ICAweGY0YjcwMDBmCisKKy8qUDFfTU9EQ09ETFNUOCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDggIDB4ZjRiOAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfNV82ICAweGY0YjgwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF8zXzQgIDB4ZjRiODAwMGYKKworLypQMV9NT0RDT0RMU1Q5Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUOSAgMHhmNGI5CisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF8yXzMgIDB4ZjRiOTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzNfNSAgMHhmNGI5MDAwZgorCisvKlAxX01PRENPRExTVEEqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RBICAweGY0YmEKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzlfMTAgIDB4ZjRiYTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzhfOSAgMHhmNGJhMDAwZgorCisvKlAxX01PRENPRExTVEIqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RCICAweGY0YmIKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzVfNiAgMHhmNGJiMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfNF81ICAweGY0YmIwMDBmCisKKy8qUDFfTU9EQ09ETFNUQyovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEMgIDB4ZjRiYworI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfM180ICAweGY0YmMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8yXzMgIDB4ZjRiYzAwMGYKKworLypQMV9NT0RDT0RMU1REKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNURCAgMHhmNGJkCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8zXzUgIDB4ZjRiZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzFfMiAgMHhmNGJkMDAwZgorCisvKlAxX01PRENPRExTVEUqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RFICAweGY0YmUKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzJfNSAgMHhmNGJlMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMV8zICAweGY0YmUwMDBmCisKKy8qUDFfTU9EQ09ETFNURiovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEYgIDB4ZjRiZgorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMV80ICAweGY0YmYwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RERU1PRF9TRVQgIDB4ZjRiZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRERFTU9EX01BU0sgIDB4ZjRiZjAwMDEKKworLypQMV9ETURSRVNDRkcqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNDRkcgIDB4ZjRjNgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfUkVTRVQgIDB4ZjRjNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05PSVNFU1FSICAweGY0YzYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19TVFJBTEwgIDB4ZjRjNjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05FV09OTFkgIDB4ZjRjNjAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX05PU1RPUkUgIDB4ZjRjNjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0FHQzJNRU0gIDB4ZjRjNjAwMDEKKworLypQMV9ETURSRVNBRFIqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNBRFIgIDB4ZjRjNworI2RlZmluZSBGMDkwMF9QMV9TVVNQX1BSRURDQU5BTCAgMHhmNGM3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfVkFMSURDRlIgIDB4ZjRjNzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX01FTUZVTEwgIDB4ZjRjNzAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX1JFU05CUiAgMHhmNGM3MDAwZgorCisvKlAxX0RNRFJFU0RBVEE3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTcgIDB4ZjRjOAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTcgIDB4ZjRjODAwZmYKKworLypQMV9ETURSRVNEQVRBNiovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEE2ICAweGY0YzkKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEE2ICAweGY0YzkwMGZmCisKKy8qUDFfRE1EUkVTREFUQTUqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBNSAgMHhmNGNhCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBNSAgMHhmNGNhMDBmZgorCisvKlAxX0RNRFJFU0RBVEE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTQgIDB4ZjRjYgorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTQgIDB4ZjRjYjAwZmYKKworLypQMV9ETURSRVNEQVRBMyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEEzICAweGY0Y2MKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEEzICAweGY0Y2MwMGZmCisKKy8qUDFfRE1EUkVTREFUQTIqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBMiAgMHhmNGNkCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBMiAgMHhmNGNkMDBmZgorCisvKlAxX0RNRFJFU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTEgIDB4ZjRjZQorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTEgIDB4ZjRjZTAwZmYKKworLypQMV9ETURSRVNEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEEwICAweGY0Y2YKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEEwICAweGY0Y2YwMGZmCisKKy8qUDFfRkZFSTEqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJMSAgMHhmNGQwCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJMSAgMHhmNGQwMDFmZgorCisvKlAxX0ZGRVExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTEgIDB4ZjRkMQorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTEgIDB4ZjRkMTAxZmYKKworLypQMV9GRkVJMiovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUkyICAweGY0ZDIKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ0kyICAweGY0ZDIwMWZmCisKKy8qUDFfRkZFUTIqLworI2RlZmluZSBSMDkwMF9QMV9GRkVRMiAgMHhmNGQzCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NRMiAgMHhmNGQzMDFmZgorCisvKlAxX0ZGRUkzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFSTMgIDB4ZjRkNAorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDSTMgIDB4ZjRkNDAxZmYKKworLypQMV9GRkVRMyovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRVEzICAweGY0ZDUKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ1EzICAweGY0ZDUwMWZmCisKKy8qUDFfRkZFSTQqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJNCAgMHhmNGQ2CisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJNCAgMHhmNGQ2MDFmZgorCisvKlAxX0ZGRVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTQgIDB4ZjRkNworI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTQgIDB4ZjRkNzAxZmYKKworLypQMV9GRkVDRkcqLworI2RlZmluZSBSMDkwMF9QMV9GRkVDRkcgIDB4ZjRkOAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTEZGRV9PTiAgMHhmNGQ4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9FUVVBTF9VU0VEU1lNQiAgMHhmNGQ4MDAzMAorI2RlZmluZSBGMDkwMF9QMV9NVV9FUVVBTEZGRSAgMHhmNGQ4MDAwNworCisvKlAxX1ROUkNGRyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNGRyAgMHhmNGUwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9BQ0tGQUlMICAweGY0ZTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9UWVBFICAweGY0ZTAwMDcwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9TRUNTVE9QICAweGY0ZTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9WQ09TUkNIICAweGY0ZTAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9NQUREUkVTUyAgMHhmNGUwMDAwMworCisvKlAxX1ROUkNGRzIqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDRkcyICAweGY0ZTEKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0lRU1dBUCAgMHhmNGUxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX1NURVAyTUhaICAweGY0ZTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfREJMSTJDICAweGY0ZTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19GQ0NLICAweGY0ZTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19MUEVOICAweGY0ZTEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RJU19CV0NBTEMgIDB4ZjRlMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU0hPUlRfV0FJVFNUQVRFUyAgMHhmNGUxMDAwMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfMkJXQUdDMSAgMHhmNGUxMDAwMQorCisvKlAxX1ROUlhUQUwqLworI2RlZmluZSBSMDkwMF9QMV9UTlJYVEFMICAweGY0ZTQKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX01DTEtERUNJTUFMICAweGY0ZTQwMGUwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9YVEFMRlJFUSAgMHhmNGU0MDAxZgorCisvKlAxX1ROUlNURVBTKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SU1RFUFMgIDB4ZjRlNworI2RlZmluZSBGMDkwMF9QMV9UVU5FUl9CVzFQNiAgMHhmNGU3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9CV0lOQ19PRkZTRVQgIDB4ZjRlNzAwNzAKKyNkZWZpbmUgRjA5MDBfUDFfU09GVFNURVBfUk5HICAweGY0ZTcwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9CV09GRlNFVCAgMHhmNGU3MDEwNworCisvKlAxX1ROUkdBSU4qLworI2RlZmluZSBSMDkwMF9QMV9UTlJHQUlOICAweGY0ZTgKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0tESVZFTiAgMHhmNGU4MDBjMAorI2RlZmluZSBGMDkwMF9QMV9TVEI2WDAwX09DSyAgMHhmNGU4MDAzMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fR0FJTiAgMHhmNGU4MDAwZgorCisvKlAxX1ROUlJGMSovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlJGMSAgMHhmNGU5CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEyICAweGY0ZTkwMGZmCisKKy8qUDFfVE5SUkYwKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SUkYwICAweGY0ZWEKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTEgIDB4ZjRlYTAwZmYKKworLypQMV9UTlJCVyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkJXICAweGY0ZWIKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGRlJFUTAgIDB4ZjRlYjAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXICAweGY0ZWIwMDNmCisKKy8qUDFfVE5SQURKKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQURKICAweGY0ZWMKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9SQ0xLICAweGY0ZWMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfQ0FMVElNRSAgMHhmNGVjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2WDAwX0RMQiAgMHhmNGVjMDAzOAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MDAwX0ZDTCAgMHhmNGVjMDAwNworCisvKlAxX1ROUkNUTDIqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDVEwyICAweGY0ZWQKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9MQ1AxX1JDQ0tPRkYgIDB4ZjRlZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9MQ1AwICAweGY0ZWQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfWFRPVVRfUkZPVVRTICAweGY0ZWQwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfWFRPTl9NQ0tEViAgMHhmNGVkMDAxMAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX0NBTE9GRl9EQ09GRiAgMHhmNGVkMDAwOAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX0xQVCAgMHhmNGVkMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX1JYICAweGY0ZWQwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMTBfU1lOICAweGY0ZWQwMDAxCisKKy8qUDFfVE5SQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkNGRzMgIDB4ZjRlZQorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTIwX0RJU0NUUkwxICAweGY0ZWUwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfSU5WT1JERVIgIDB4ZjRlZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjEyMF9FTkNUUkw2ICAweGY0ZWUwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9QTExGUkVRICAweGY0ZWUwMDFjCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNGUkVRX01PREUgIDB4ZjRlZTAwMDMKKworLypQMV9UTlJMQVVOQ0gqLworI2RlZmluZSBSMDkwMF9QMV9UTlJMQVVOQ0ggIDB4ZjRmMAorCisvKlAxX1ROUkxEKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5STEQgIDB4ZjRmMAorI2RlZmluZSBGMDkwMF9QMV9UVU5MRF9WQ09JTkcgIDB4ZjRmMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzFGQUlMICAweGY0ZjAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUcyRkFJTCAgMHhmNGYwMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHM0ZBSUwgIDB4ZjRmMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzRGQUlMICAweGY0ZjAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUc1RkFJTCAgMHhmNGYwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQldJTkcgIDB4ZjRmMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0xPQ0tFRCAgMHhmNGYwMDAwMQorCisvKlAxX1ROUk9CU0wqLworI2RlZmluZSBSMDkwMF9QMV9UTlJPQlNMICAweGY0ZjYKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0FCT1JURUQgIDB4ZjRmNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0xQRU4gIDB4ZjRmNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0ZDQ0sgIDB4ZjRmNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0kyQ0xPQ0tFRCAgMHhmNGY2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUFJPR0RPTkUgIDB4ZjRmNjAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JGUkVTVEUxICAweGY0ZjYwMDAzCisKKy8qUDFfVE5SUkVTVEUqLworI2RlZmluZSBSMDkwMF9QMV9UTlJSRVNURSAgMHhmNGY3CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMCAgMHhmNGY3MDBmZgorCisvKlAxX1NNQVBDT0VGNyovCisjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNyAgMHhmNTAwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RU0NBTEUgIDB4ZjUwMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU01BUENPRUZfUV9MTFIxMiAgMHhmNTAwMDE3ZgorCisvKlAxX1NNQVBDT0VGNiovCisjZGVmaW5lIFIwOTAwX1AxX1NNQVBDT0VGNiAgMHhmNTAxCisjZGVmaW5lIEYwOTAwX1AxX0RJU19ORVdTQ0FMRSAgMHhmNTAxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BREpfOFBTS0xMUjEgIDB4ZjUwMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfT0xEXzhQU0tMTFIxICAweGY1MDEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RJU19BQjhQU0sgIDB4ZjUwMTAwMDEKKworLypQMV9TTUFQQ09FRjUqLworI2RlZmluZSBSMDkwMF9QMV9TTUFQQ09FRjUgIDB4ZjUwMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFNDQUxFICAweGY1MDIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NNQVBDT0VGXzhQX0xMUjIzICAweGY1MDIwMTdmCisKKy8qUDFfRE1EUExIU1RBVCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFBMSFNUQVQgIDB4ZjUyMAorI2RlZmluZSBGMDkwMF9QMV9QTEhfU1RBVElTVElDICAweGY1MjAwMGZmCisKKy8qUDFfTE9DS1RJTUUzKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUzICAweGY1MjIKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUzICAweGY1MjIwMGZmCisKKy8qUDFfTE9DS1RJTUUyKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUyICAweGY1MjMKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUyICAweGY1MjMwMGZmCisKKy8qUDFfTE9DS1RJTUUxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUxICAweGY1MjQKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUxICAweGY1MjQwMGZmCisKKy8qUDFfTE9DS1RJTUUwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTE9DS1RJTUUwICAweGY1MjUKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS1RJTUUwICAweGY1MjUwMGZmCisKKy8qUDFfVklUU0NBTEUqLworI2RlZmluZSBSMDkwMF9QMV9WSVRTQ0FMRSAgMHhmNTMyCisjZGVmaW5lIEYwOTAwX1AxX05WVEhfTk9TUkFOR0UgIDB4ZjUzMjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVkVSUk9SX01BWE1PREUgIDB4ZjUzMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVl9NT0RFICAweGY1MzIwMDMwCisjZGVmaW5lIEYwOTAwX1AxX05TTE9XU05fTE9DS0VEICAweGY1MzIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RFTE9DS19QUkZMT1NTICAweGY1MzIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RJU19SU0ZMT0NLICAweGY1MzIwMDAyCisKKy8qUDFfRkVDTSovCisjZGVmaW5lIFIwOTAwX1AxX0ZFQ00gIDB4ZjUzMworI2RlZmluZSBGMDkwMF9QMV9EU1NfRFZCICAweGY1MzMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0JZUEFTUyAgMHhmNTMzMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DTVBfU0xPV01PREUgIDB4ZjUzMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRFNTX1NSQ0ggIDB4ZjUzMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRElGRl9NT0RFVklUICAweGY1MzMwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNWSVQgIDB4ZjUzMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfSVFJTlYgIDB4ZjUzMzAwMDEKKworLypQMV9WVEgxMiovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDEyICAweGY1MzQKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMTIgIDB4ZjUzNDAwZmYKKworLypQMV9WVEgyMyovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDIzICAweGY1MzUKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMjMgIDB4ZjUzNTAwZmYKKworLypQMV9WVEgzNCovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDM0ICAweGY1MzYKKyNkZWZpbmUgRjA5MDBfUDFfVlRIMzQgIDB4ZjUzNjAwZmYKKworLypQMV9WVEg1NiovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDU2ICAweGY1MzcKKyNkZWZpbmUgRjA5MDBfUDFfVlRINTYgIDB4ZjUzNzAwZmYKKworLypQMV9WVEg2NyovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDY3ICAweGY1MzgKKyNkZWZpbmUgRjA5MDBfUDFfVlRINjcgIDB4ZjUzODAwZmYKKworLypQMV9WVEg3OCovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSDc4ICAweGY1MzkKKyNkZWZpbmUgRjA5MDBfUDFfVlRINzggIDB4ZjUzOTAwZmYKKworLypQMV9WSVRDVVJQVU4qLworI2RlZmluZSBSMDkwMF9QMV9WSVRDVVJQVU4gIDB4ZjUzYQorI2RlZmluZSBGMDkwMF9QMV9WSVRfTUFQUElORyAgMHhmNTNhMDBlMAorI2RlZmluZSBGMDkwMF9QMV9WSVRfQ1VSUFVOICAweGY1M2EwMDFmCisKKy8qUDFfVkVSUk9SKi8KKyNkZWZpbmUgUjA5MDBfUDFfVkVSUk9SICAweGY1M2IKKyNkZWZpbmUgRjA5MDBfUDFfUkVHRVJSX1ZJVCAgMHhmNTNiMDBmZgorCisvKlAxX1BSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDFfUFJWSVQgIDB4ZjUzYworI2RlZmluZSBGMDkwMF9QMV9ESVNfVlRITE9DSyAgMHhmNTNjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9FN184VklUICAweGY1M2MwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0U2XzdWSVQgIDB4ZjUzYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRTVfNlZJVCAgMHhmNTNjMDAwOAorI2RlZmluZSBGMDkwMF9QMV9FM180VklUICAweGY1M2MwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0UyXzNWSVQgIDB4ZjUzYzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRTFfMlZJVCAgMHhmNTNjMDAwMQorCisvKlAxX1ZBVlNSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDFfVkFWU1JWSVQgIDB4ZjUzZAorI2RlZmluZSBGMDkwMF9QMV9BTVZJVCAgMHhmNTNkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9GUk9aRU5WSVQgIDB4ZjUzZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU05WSVQgIDB4ZjUzZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVE9WVklUICAweGY1M2QwMDBjCisjZGVmaW5lIEYwOTAwX1AxX0hZUFZJVCAgMHhmNTNkMDAwMworCisvKlAxX1ZTVEFUVVNWSVQqLworI2RlZmluZSBSMDkwMF9QMV9WU1RBVFVTVklUICAweGY1M2UKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9PTiAgMHhmNTNlMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FTkRfTE9PUFZJVCAgMHhmNTNlMDA0MAorI2RlZmluZSBGMDkwMF9QMV9WSVRFUkJJX0RFUFJGICAweGY1M2UwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1BSRlZJVCAgMHhmNTNlMDAxMAorI2RlZmluZSBGMDkwMF9QMV9MT0NLRURWSVQgIDB4ZjUzZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9ERUxPQ0sgIDB4ZjUzZTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVklUX0RFTU9EU0VMICAweGY1M2UwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1ZJVEVSQklfQ09NUE9VVCAgMHhmNTNlMDAwMQorCisvKlAxX1ZUSElOVVNFKi8KKyNkZWZpbmUgUjA5MDBfUDFfVlRISU5VU0UgIDB4ZjUzZgorI2RlZmluZSBGMDkwMF9QMV9WSVRfSU5VU0UgIDB4ZjUzZjAwZmYKKworLypQMV9LRElWMTIqLworI2RlZmluZSBSMDkwMF9QMV9LRElWMTIgIDB4ZjU0MAorI2RlZmluZSBGMDkwMF9QMV9LRElWMTJfTUFOVUFMICAweGY1NDAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl8xMiAgMHhmNTQwMDA3ZgorCisvKlAxX0tESVYyMyovCisjZGVmaW5lIFIwOTAwX1AxX0tESVYyMyAgMHhmNTQxCisjZGVmaW5lIEYwOTAwX1AxX0tESVYyM19NQU5VQUwgIDB4ZjU0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzIzICAweGY1NDEwMDdmCisKKy8qUDFfS0RJVjM0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjM0ICAweGY1NDIKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjM0X01BTlVBTCAgMHhmNTQyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfMzQgIDB4ZjU0MjAwN2YKKworLypQMV9LRElWNTYqLworI2RlZmluZSBSMDkwMF9QMV9LRElWNTYgIDB4ZjU0MworI2RlZmluZSBGMDkwMF9QMV9LRElWNTZfTUFOVUFMICAweGY1NDMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl81NiAgMHhmNTQzMDA3ZgorCisvKlAxX0tESVY2NyovCisjZGVmaW5lIFIwOTAwX1AxX0tESVY2NyAgMHhmNTQ0CisjZGVmaW5lIEYwOTAwX1AxX0tESVY2N19NQU5VQUwgIDB4ZjU0NDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzY3ICAweGY1NDQwMDdmCisKKy8qUDFfS0RJVjc4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjc4ICAweGY1NDUKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjc4X01BTlVBTCAgMHhmNTQ1MDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfNzggIDB4ZjU0NTAwN2YKKworLypQMV9QREVMQ1RSTDEqLworI2RlZmluZSBSMDkwMF9QMV9QREVMQ1RSTDEgIDB4ZjU1MAorI2RlZmluZSBGMDkwMF9QMV9JTlZfTUlTTUFTSyAgMHhmNTUwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9BQ0NFUFRFRCAgMHhmNTUwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9GSUxURVJfRU4gIDB4ZjU1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfUEtUREVMSU5VU0UgIDB4ZjU1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSFlTVEVOICAweGY1NTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0hZU1RTV1JTVCAgMHhmNTUwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9FTl9NSVMwMCAgMHhmNTUwMDAwMgorI2RlZmluZSBGMDkwMF9QMV9BTEdPU1dSU1QgIDB4ZjU1MDAwMDEKKworLypQMV9QREVMQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMV9QREVMQ1RSTDIgIDB4ZjU1MQorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9DT05USU5VT1VTICAweGY1NTEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1JFU0VUX1VQS09fQ09VTlQgIDB4ZjU1MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVVNFUl9QS1RERUxJTl9OQiAgMHhmNTUxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9MT0NLRUQgIDB4ZjU1MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfREFUQV9VTkJCU0NSQU0gIDB4ZjU1MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfTE9OR1BLVCAgMHhmNTUxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9GUkFNRV9NT0RFICAweGY1NTEwMDAyCisKKy8qUDFfSFlTVFRIUkVTSCovCisjZGVmaW5lIFIwOTAwX1AxX0hZU1RUSFJFU0ggIDB4ZjU1NAorI2RlZmluZSBGMDkwMF9QMV9VTkxDS19USFJFU0ggIDB4ZjU1NDAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfREVMSU5fTENLX1RIUkVTSCAgMHhmNTU0MDAwZgorCisvKlAxX0lTSUVOVFJZKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVNJRU5UUlkgIDB4ZjU1ZQorI2RlZmluZSBGMDkwMF9QMV9JU0lfRU5UUlkgIDB4ZjU1ZTAwZmYKKworLypQMV9JU0lCSVRFTkEqLworI2RlZmluZSBSMDkwMF9QMV9JU0lCSVRFTkEgIDB4ZjU1ZgorI2RlZmluZSBGMDkwMF9QMV9JU0lfQklUX0VOICAweGY1NWYwMGZmCisKKy8qUDFfTUFUU1RSMSovCisjZGVmaW5lIFIwOTAwX1AxX01BVFNUUjEgIDB4ZjU2MAorI2RlZmluZSBGMDkwMF9QMV9NQVRZUEVfQ1VSUkVOVDEgIDB4ZjU2MDAwZmYKKworLypQMV9NQVRTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTUFUU1RSMCAgMHhmNTYxCisjZGVmaW5lIEYwOTAwX1AxX01BVFlQRV9DVVJSRU5UMCAgMHhmNTYxMDBmZgorCisvKlAxX1VQTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9VUExTVFIxICAweGY1NjIKKyNkZWZpbmUgRjA5MDBfUDFfVVBMX0NVUlJFTlQxICAweGY1NjIwMGZmCisKKy8qUDFfVVBMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX1VQTFNUUjAgIDB4ZjU2MworI2RlZmluZSBGMDkwMF9QMV9VUExfQ1VSUkVOVDAgIDB4ZjU2MzAwZmYKKworLypQMV9ERkxTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfREZMU1RSMSAgMHhmNTY0CisjZGVmaW5lIEYwOTAwX1AxX0RGTF9DVVJSRU5UMSAgMHhmNTY0MDBmZgorCisvKlAxX0RGTFNUUjAqLworI2RlZmluZSBSMDkwMF9QMV9ERkxTVFIwICAweGY1NjUKKyNkZWZpbmUgRjA5MDBfUDFfREZMX0NVUlJFTlQwICAweGY1NjUwMGZmCisKKy8qUDFfU1lOQ1NUUiovCisjZGVmaW5lIFIwOTAwX1AxX1NZTkNTVFIgIDB4ZjU2NgorI2RlZmluZSBGMDkwMF9QMV9TWU5DX0NVUlJFTlQgIDB4ZjU2NjAwZmYKKworLypQMV9TWU5DRFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9TWU5DRFNUUjEgIDB4ZjU2NworI2RlZmluZSBGMDkwMF9QMV9TWU5DRF9DVVJSRU5UMSAgMHhmNTY3MDBmZgorCisvKlAxX1NZTkNEU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX1NZTkNEU1RSMCAgMHhmNTY4CisjZGVmaW5lIEYwOTAwX1AxX1NZTkNEX0NVUlJFTlQwICAweGY1NjgwMGZmCisKKy8qUDFfUERFTFNUQVRVUzEqLworI2RlZmluZSBSMDkwMF9QMV9QREVMU1RBVFVTMSAgMHhmNTY5CisjZGVmaW5lIEYwOTAwX1AxX1BLVERFTElOX0RFTE9DSyAgMHhmNTY5MDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU5DRFVQREZMX0JBRERGTCAgMHhmNTY5MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DT05USU5VT1VTX1NUUkVBTSAgMHhmNTY5MDAyMAorI2RlZmluZSBGMDkwMF9QMV9VTkFDQ0VQVEVEX1NUUkVBTSAgMHhmNTY5MDAxMAorI2RlZmluZSBGMDkwMF9QMV9CQ0hfRVJST1JfRkxBRyAgMHhmNTY5MDAwOAorI2RlZmluZSBGMDkwMF9QMV9CQkhDUkNLTyAgMHhmNTY5MDAwNAorI2RlZmluZSBGMDkwMF9QMV9QS1RERUxJTl9MT0NLICAweGY1NjkwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0ZJUlNUX0xPQ0sgIDB4ZjU2OTAwMDEKKworLypQMV9QREVMU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AxX1BERUxTVEFUVVMyICAweGY1NmEKKyNkZWZpbmUgRjA5MDBfUDFfUEtUREVMX0RFTU9EU0VMICAweGY1NmEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZSQU1FX01PRENPRCAgMHhmNTZhMDA3YworI2RlZmluZSBGMDkwMF9QMV9GUkFNRV9UWVBFICAweGY1NmEwMDAzCisKKy8qUDFfQkJGQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkJGQ1JDS08xICAweGY1NmIKKyNkZWZpbmUgRjA5MDBfUDFfQkJIQ1JDX0tPQ05UMSAgMHhmNTZiMDBmZgorCisvKlAxX0JCRkNSQ0tPMCovCisjZGVmaW5lIFIwOTAwX1AxX0JCRkNSQ0tPMCAgMHhmNTZjCisjZGVmaW5lIEYwOTAwX1AxX0JCSENSQ19LT0NOVDAgIDB4ZjU2YzAwZmYKKworLypQMV9VUENSQ0tPMSovCisjZGVmaW5lIFIwOTAwX1AxX1VQQ1JDS08xICAweGY1NmQKKyNkZWZpbmUgRjA5MDBfUDFfUEtUQ1JDX0tPQ05UMSAgMHhmNTZkMDBmZgorCisvKlAxX1VQQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDFfVVBDUkNLTzAgIDB4ZjU2ZQorI2RlZmluZSBGMDkwMF9QMV9QS1RDUkNfS09DTlQwICAweGY1NmUwMGZmCisKKy8qUDFfVFNTVEFURU0qLworI2RlZmluZSBSMDkwMF9QMV9UU1NUQVRFTSAgMHhmNTcwCisjZGVmaW5lIEYwOTAwX1AxX1RTRElMX09OICAweGY1NzAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTU0tJUFJTX09OICAweGY1NzAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTUlNfT04gIDB4ZjU3MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERVNDUkFNQl9PTiAgMHhmNTcwMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZSQU1FX01PREUgIDB4ZjU3MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNfRElTQUJMRSAgMHhmNTcwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0FDTV9NT0RFICAweGY1NzAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTT1VUX05PU1lOQyAgMHhmNTcwMDAwMQorCisvKlAxX1RTQ0ZHSCovCisjZGVmaW5lIFIwOTAwX1AxX1RTQ0ZHSCAgMHhmNTcyCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19EVkJDSSAgMHhmNTcyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fU0VSSUFMICAweGY1NzIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19URUlVUERBVEUgIDB4ZjU3MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RVVFk1MCAgMHhmNTcyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fSFNHTkxPVVQgIDB4ZjU3MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0VSUk1PREUgIDB4ZjU3MjAwMDYKKyNkZWZpbmUgRjA5MDBfUDFfUlNUX0hXQVJFICAweGY1NzIwMDAxCisKKy8qUDFfVFNDRkdNKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNDRkdNICAweGY1NzMKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX01BTlNQRUVEICAweGY1NzMwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19QRVJNREFUQSAgMHhmNTczMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTk9ORVdTR05MICAweGY1NzMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19CSVRTUEVFRCAgMHhmNTczMDAwOAorI2RlZmluZSBGMDkwMF9QMV9OUERfU1BFQ0RWQlMyICAweGY1NzMwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19TVE9QQ0tESVMgIDB4ZjU3MzAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0lOVkRBVEEgIDB4ZjU3MzAwMDEKKworLypQMV9UU0NGR0wqLworI2RlZmluZSBSMDkwMF9QMV9UU0NGR0wgIDB4ZjU3NAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQkNMS0RFTDFDSyAgMHhmNTc0MDBjMAorI2RlZmluZSBGMDkwMF9QMV9CQ0hFUlJPUl9NT0RFICAweGY1NzQwMDMwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19OU0dOTDJEQVRBICAweGY1NzQwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19FTUJJTkRWQiAgMHhmNTc0MDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRFBVTkFDVCAgMHhmNTc0MDAwMgorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTlBET0ZGICAweGY1NzQwMDAxCisKKy8qUDFfVFNJTlNERUxIKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNJTlNERUxIICAweGY1NzYKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfU1lOQ0JZVEUgIDB4ZjU3NjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfWFhIRUFERVIgIDB4ZjU3NjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfQkJIRUFERVIgIDB4ZjU3NjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNERUxfREFUQUZJRUxEICAweGY1NzYwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX0lTQ1IgIDB4ZjU3NjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNJTlNERUxfTlBEICAweGY1NzYwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX1JTUEFSSVRZICAweGY1NzYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX0NSQzggIDB4ZjU3NjAwMDEKKworLypQMV9UU1NQRUVEKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTUEVFRCAgMHhmNTgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19PVVRTUEVFRCAgMHhmNTgwMDBmZgorCisvKlAxX1RTU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTVEFUVVMgIDB4ZjU4MQorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTElORU9LICAweGY1ODEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19FUlJPUiAgMHhmNTgxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fREFUQTcgIDB4ZjU4MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX05PU1lOQyAgMHhmNTgxMDAxMAorI2RlZmluZSBGMDkwMF9QMV9JU0NSX0lOSVRJQUxJWkVEICAweGY1ODEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0lTQ1JfVVBEQVRFRCAgMHhmNTgxMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TT0ZGSUZPX1VOUkVHVUwgIDB4ZjU4MTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRElMX1JFQURZICAweGY1ODEwMDAxCisKKy8qUDFfVFNTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTVEFUVVMyICAweGY1ODIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RFTU9EU0VMICAweGY1ODIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT1NQRUVEX1NUT1JFICAweGY1ODIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0RJTFhYX1JFU0VUICAweGY1ODIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTU0VSSUFMX0lNUE9TICAweGY1ODIwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19MSU5FTk9LICAweGY1ODIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0JJVFNQRUVEX0VWRU5UICAweGY1ODIwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NDUkFNQkRFVEVDVCAgMHhmNTgyMDAwMgorI2RlZmluZSBGMDkwMF9QMV9VTERUVjY3X0ZBTFNFTE9DSyAgMHhmNTgyMDAwMQorCisvKlAxX1RTQklUUkFURTEqLworI2RlZmluZSBSMDkwMF9QMV9UU0JJVFJBVEUxICAweGY1ODMKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0JJVFJBVEUxICAweGY1ODMwMGZmCisKKy8qUDFfVFNCSVRSQVRFMCovCisjZGVmaW5lIFIwOTAwX1AxX1RTQklUUkFURTAgIDB4ZjU4NAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQklUUkFURTAgIDB4ZjU4NDAwZmYKKworLypQMV9FUlJDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNUUkwxICAweGY1OTgKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX1NPVVJDRTEgIDB4ZjU5ODAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfTlVNX0VWRU5UMSAgMHhmNTk4MDAwNworCisvKlAxX0VSUkNOVDEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMTIgIDB4ZjU5OQorI2RlZmluZSBGMDkwMF9QMV9FUlJDTlQxX09MRFZBTFVFICAweGY1OTkwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQxMiAgMHhmNTk5MDA3ZgorCisvKlAxX0VSUkNOVDExKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMTEgIDB4ZjU5YQorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMTEgIDB4ZjU5YTAwZmYKKworLypQMV9FUlJDTlQxMCovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDEwICAweGY1OWIKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDEwICAweGY1OWIwMGZmCisKKy8qUDFfRVJSQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDVFJMMiAgMHhmNTljCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9TT1VSQ0UyICAweGY1OWMwMGYwCisjZGVmaW5lIEYwOTAwX1AxX05VTV9FVkVOVDIgIDB4ZjU5YzAwMDcKKworLypQMV9FUlJDTlQyMiovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDIyICAweGY1OWQKKyNkZWZpbmUgRjA5MDBfUDFfRVJSQ05UMl9PTERWQUxVRSAgMHhmNTlkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMjIgIDB4ZjU5ZDAwN2YKKworLypQMV9FUlJDTlQyMSovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDIxICAweGY1OWUKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDIxICAweGY1OWUwMGZmCisKKy8qUDFfRVJSQ05UMjAqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQyMCAgMHhmNTlmCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQyMCAgMHhmNTlmMDBmZgorCisvKlAxX0ZFQ1NQWSovCisjZGVmaW5lIFIwOTAwX1AxX0ZFQ1NQWSAgMHhmNWEwCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9FTkFCTEUgIDB4ZjVhMDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTk9fU1lOQ0JZVEUgIDB4ZjVhMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU0VSSUFMX01PREUgIDB4ZjVhMDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVU5VU1VBTF9QQUNLRVQgIDB4ZjVhMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQkVSX1BBQ0tNT0RFICAweGY1YTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0JFUk1FVEVSX0xNT0RFICAweGY1YTAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0JFUk1FVEVSX1JFU0VUICAweGY1YTAwMDAxCisKKy8qUDFfRlNQWUNGRyovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlDRkcgIDB4ZjVhMQorI2RlZmluZSBGMDkwMF9QMV9GRUNTUFlfSU5QVVQgIDB4ZjVhMTAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfUlNUX09OX0VSUk9SICAweGY1YTEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX09ORV9TSE9UICAweGY1YTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0kyQ19NT0RFICAweGY1YTEwMDBjCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9IWVNURVJFU0lTICAweGY1YTEwMDAzCisKKy8qUDFfRlNQWURBVEEqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZREFUQSAgMHhmNWEyCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9TVFVGRklORyAgMHhmNWEyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9OT0VSUk9SX1BLVEpJVFRFUiAgMHhmNWEyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TUFlfQ05VTExQS1QgIDB4ZjVhMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX09VVERBVEFfTU9ERSAgMHhmNWEyMDAxZgorCisvKlAxX0ZTUFlPVVQqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZT1VUICAweGY1YTMKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWV9ESVJFQ1QgIDB4ZjVhMzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX09VVERBVEFfQlVTICAweGY1YTMwMDM4CisjZGVmaW5lIEYwOTAwX1AxX1NUVUZGX01PREUgIDB4ZjVhMzAwMDcKKworLypQMV9GU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNUQVRVUyAgMHhmNWE0CisjZGVmaW5lIEYwOTAwX1AxX1NQWV9FTkRTSU0gIDB4ZjVhNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVkFMSURfU0lNICAweGY1YTQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0ZPVU5EX1NJR05BTCAgMHhmNWE0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9EU1NfU1lOQ0JZVEUgIDB4ZjVhNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUkVTVUxUX1NUQVRFICAweGY1YTQwMDBmCisKKy8qUDFfRkJFUkNQVDQqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUNCAgMHhmNWE4CisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQ0ICAweGY1YTgwMGZmCisKKy8qUDFfRkJFUkNQVDMqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMyAgMHhmNWE5CisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQzICAweGY1YTkwMGZmCisKKy8qUDFfRkJFUkNQVDIqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMiAgMHhmNWFhCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQyICAweGY1YWEwMGZmCisKKy8qUDFfRkJFUkNQVDEqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMSAgMHhmNWFiCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQxICAweGY1YWIwMGZmCisKKy8qUDFfRkJFUkNQVDAqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSQ1BUMCAgMHhmNWFjCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9DUFQwICAweGY1YWMwMGZmCisKKy8qUDFfRkJFUkVSUjIqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMiAgMHhmNWFkCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIyICAweGY1YWQwMGZmCisKKy8qUDFfRkJFUkVSUjEqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMSAgMHhmNWFlCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIxICAweGY1YWUwMGZmCisKKy8qUDFfRkJFUkVSUjAqLworI2RlZmluZSBSMDkwMF9QMV9GQkVSRVJSMCAgMHhmNWFmCisjZGVmaW5lIEYwOTAwX1AxX0ZCRVJNRVRFUl9FUlIwICAweGY1YWYwMGZmCisKKy8qUDFfRlNQWUJFUiovCisjZGVmaW5lIFIwOTAwX1AxX0ZTUFlCRVIgIDB4ZjViMgorI2RlZmluZSBGMDkwMF9QMV9GU1BZT0JTX1hPUlJFQUQgIDB4ZjViMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9PQlNNT0RFICAweGY1YjIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlCRVJfU1lOQ0JZVEUgIDB4ZjViMjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9VTlNZTkMgIDB4ZjViMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWUJFUl9DVElNRSAgMHhmNWIyMDAwNworCisvKlJDQ0ZHSCovCisjZGVmaW5lIFIwOTAwX1JDQ0ZHSCAgMHhmNjAwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX0RWQkNJICAweGY2MDAwMDgwCisjZGVmaW5lIEYwOTAwX1RTUkNGSUZPX1NFUklBTCAgMHhmNjAwMDA0MAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19ESVNBQkxFICAweGY2MDAwMDIwCisjZGVmaW5lIEYwOTAwX1RTRklGT18yVE9SQyAgMHhmNjAwMDAxMAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19IU0dOTE9VVCAgMHhmNjAwMDAwOAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19FUlJNT0RFICAweGY2MDAwMDA2CisKKy8qVFNHRU5FUkFMKi8KKyNkZWZpbmUgUjA5MDBfVFNHRU5FUkFMICAweGY2MzAKKyNkZWZpbmUgRjA5MDBfVFNGSUZPX0JDTEsxQUxMICAweGY2MzAwMDIwCisjZGVmaW5lIEYwOTAwX01VWFNUUkVBTV9PVVRNT0RFICAweGY2MzAwMDA4CisjZGVmaW5lIEYwOTAwX1RTRklGT19QRVJNUEFSQUwgIDB4ZjYzMDAwMDYKKyNkZWZpbmUgRjA5MDBfUlNUX1JFRURTT0xPICAweGY2MzAwMDAxCisKKy8qVFNHRU5FUkFMMVgqLworI2RlZmluZSBSMDkwMF9UU0dFTkVSQUwxWCAgMHhmNjcwCisjZGVmaW5lIEYwOTAwX1RTRklGTzFYX0JDTEsxQUxMICAweGY2NzAwMDIwCisjZGVmaW5lIEYwOTAwX01VWFNUUkVBTTFYX09VVE1PREUgIDB4ZjY3MDAwMDgKKyNkZWZpbmUgRjA5MDBfVFNGSUZPMVhfUEVSTVBBUkFMICAweGY2NzAwMDA2CisjZGVmaW5lIEYwOTAwX1JTVDFYX1JFRURTT0xPICAweGY2NzAwMDAxCisKKy8qTkJJVEVSX05GNCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjQgIDB4ZmEwMworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfMV8yICAweGZhMDMwMGZmCisKKy8qTkJJVEVSX05GNSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjUgIDB4ZmEwNAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfM181ICAweGZhMDQwMGZmCisKKy8qTkJJVEVSX05GNiovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjYgIDB4ZmEwNQorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfMl8zICAweGZhMDUwMGZmCisKKy8qTkJJVEVSX05GNyovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjcgIDB4ZmEwNgorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfM180ICAweGZhMDYwMGZmCisKKy8qTkJJVEVSX05GOCovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjggIDB4ZmEwNworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfNF81ICAweGZhMDcwMGZmCisKKy8qTkJJVEVSX05GOSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjkgIDB4ZmEwOAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfNV82ICAweGZhMDgwMGZmCisKKy8qTkJJVEVSX05GMTAqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxMCAgMHhmYTA5CisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF84XzkgIDB4ZmEwOTAwZmYKKworLypOQklURVJfTkYxMSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjExICAweGZhMGEKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzlfMTAgIDB4ZmEwYTAwZmYKKworLypOQklURVJfTkYxMiovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjEyICAweGZhMGIKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzNfNSAgMHhmYTBiMDBmZgorCisvKk5CSVRFUl9ORjEzKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTMgIDB4ZmEwYworI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfMl8zICAweGZhMGMwMGZmCisKKy8qTkJJVEVSX05GMTQqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNCAgMHhmYTBkCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF8zXzQgIDB4ZmEwZDAwZmYKKworLypOQklURVJfTkYxNSovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjE1ICAweGZhMGUKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzVfNiAgMHhmYTBlMDBmZgorCisvKk5CSVRFUl9ORjE2Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTYgIDB4ZmEwZgorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfOF85ICAweGZhMGYwMGZmCisKKy8qTkJJVEVSX05GMTcqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNyAgMHhmYTEwCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF85XzEwICAweGZhMTAwMGZmCisKKy8qTkJJVEVSTk9FUlIqLworI2RlZmluZSBSMDkwMF9OQklURVJOT0VSUiAgMHhmYTNmCisjZGVmaW5lIEYwOTAwX05CSVRFUl9TVE9QX0NSSVQgIDB4ZmEzZjAwMGYKKworLypHQUlOTExSX05GNCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY0ICAweGZhNDMKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8xXzIgIDB4ZmE0MzAwN2YKKworLypHQUlOTExSX05GNSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY1ICAweGZhNDQKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8zXzUgIDB4ZmE0NDAwN2YKKworLypHQUlOTExSX05GNiovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY2ICAweGZhNDUKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8yXzMgIDB4ZmE0NTAwN2YKKworLypHQUlOTExSX05GNyovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY3ICAweGZhNDYKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF8zXzQgIDB4ZmE0NjAwN2YKKworLypHQUlOTExSX05GOCovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY4ICAweGZhNDcKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF80XzUgIDB4ZmE0NzAwN2YKKworLypHQUlOTExSX05GOSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkY5ICAweGZhNDgKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF81XzYgIDB4ZmE0ODAwN2YKKworLypHQUlOTExSX05GMTAqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTAgIDB4ZmE0OQorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzhfOSAgMHhmYTQ5MDA3ZgorCisvKkdBSU5MTFJfTkYxMSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMSAgMHhmYTRhCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfOV8xMCAgMHhmYTRhMDA3ZgorCisvKkdBSU5MTFJfTkYxMiovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMiAgMHhmYTRiCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfM181ICAweGZhNGIwMDdmCisKKy8qR0FJTkxMUl9ORjEzKi8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjEzICAweGZhNGMKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF8yXzMgIDB4ZmE0YzAwN2YKKworLypHQUlOTExSX05GMTQqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTQgIDB4ZmE0ZAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzNfNCAgMHhmYTRkMDA3ZgorCisvKkdBSU5MTFJfTkYxNSovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxNSAgMHhmYTRlCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfNV82ICAweGZhNGUwMDdmCisKKy8qR0FJTkxMUl9ORjE2Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjE2ICAweGZhNGYKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF84XzkgIDB4ZmE0ZjAwN2YKKworLypHQUlOTExSX05GMTcqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTcgIDB4ZmE1MAorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzlfMTAgIDB4ZmE1MDAwN2YKKworLypDRkdFWFQqLworI2RlZmluZSBSMDkwMF9DRkdFWFQgIDB4ZmE4MAorI2RlZmluZSBGMDkwMF9TVEFHTU9ERSAgMHhmYTgwMDA4MAorI2RlZmluZSBGMDkwMF9CWVBCQ0ggIDB4ZmE4MDAwNDAKKyNkZWZpbmUgRjA5MDBfQllQTERQQyAgMHhmYTgwMDAyMAorI2RlZmluZSBGMDkwMF9MRFBDTU9ERSAgMHhmYTgwMDAxMAorI2RlZmluZSBGMDkwMF9JTlZMTFJTSUdOICAweGZhODAwMDA4CisjZGVmaW5lIEYwOTAwX1NIT1JUTVVMVCAgMHhmYTgwMDAwNAorI2RlZmluZSBGMDkwMF9FWFRFUk5UWCAgMHhmYTgwMDAwMQorCisvKkdFTkNGRyovCisjZGVmaW5lIFIwOTAwX0dFTkNGRyAgMHhmYTg2CisjZGVmaW5lIEYwOTAwX0JST0FEQ0FTVCAgMHhmYTg2MDAxMAorI2RlZmluZSBGMDkwMF9OT1NIRlJEMiAgMHhmYTg2MDAwOAorI2RlZmluZSBGMDkwMF9CQ0hFUlJGTEFHICAweGZhODYwMDA0CisjZGVmaW5lIEYwOTAwX1BSSU9SSVRZICAweGZhODYwMDAyCisjZGVmaW5lIEYwOTAwX0RERU1PRCAgMHhmYTg2MDAwMQorCisvKkxEUENFUlIxKi8KKyNkZWZpbmUgUjA5MDBfTERQQ0VSUjEgIDB4ZmE5NgorI2RlZmluZSBGMDkwMF9MRFBDX0VSUk9SU19DT1VOVEVSMSAgMHhmYTk2MDBmZgorCisvKkxEUENFUlIwKi8KKyNkZWZpbmUgUjA5MDBfTERQQ0VSUjAgIDB4ZmE5NworI2RlZmluZSBGMDkwMF9MRFBDX0VSUk9SU19DT1VOVEVSMCAgMHhmYTk3MDBmZgorCisvKkJDSEVSUiovCisjZGVmaW5lIFIwOTAwX0JDSEVSUiAgMHhmYTk4CisjZGVmaW5lIEYwOTAwX0VSUk9SRkxBRyAgMHhmYTk4MDAxMAorI2RlZmluZSBGMDkwMF9CQ0hfRVJST1JTX0NPVU5URVIgIDB4ZmE5ODAwMGYKKworLypUU1RSRVMwKi8KKyNkZWZpbmUgUjA5MDBfVFNUUkVTMCAgMHhmZjExCisjZGVmaW5lIEYwOTAwX0ZSRVNGRUMgIDB4ZmYxMTAwODAKKyNkZWZpbmUgRjA5MDBfRlJFU1RTICAweGZmMTEwMDQwCisjZGVmaW5lIEYwOTAwX0ZSRVNWSVQxICAweGZmMTEwMDIwCisjZGVmaW5lIEYwOTAwX0ZSRVNWSVQyICAweGZmMTEwMDEwCisjZGVmaW5lIEYwOTAwX0ZSRVNTWU0xICAweGZmMTEwMDA4CisjZGVmaW5lIEYwOTAwX0ZSRVNTWU0yICAweGZmMTEwMDA0CisjZGVmaW5lIEYwOTAwX0ZSRVNNQVMgIDB4ZmYxMTAwMDIKKyNkZWZpbmUgRjA5MDBfRlJFU0lOVCAgMHhmZjExMDAwMQorCisvKlAyX1RTVERJU1JYKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNURElTUlggIDB4ZmY2NQorI2RlZmluZSBGMDkwMF9QMl9FTl9ESVNSWCAgMHhmZjY1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU1RfQ1VSUlNSQyAgMHhmZjY1MDA0MAorI2RlZmluZSBGMDkwMF9QMl9JTl9ESUdTSUdOQUwgIDB4ZmY2NTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfSElaX0NVUlJFTlRTUkMgIDB4ZmY2NTAwMTAKKyNkZWZpbmUgRjA5MDBfVFNUX1AyX1BJTl9TRUxFQ1QgIDB4ZmY2NTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNUX0RJU1JYICAweGZmNjUwMDA3CisKKy8qUDFfVFNURElTUlgqLworI2RlZmluZSBSMDkwMF9QMV9UU1RESVNSWCAgMHhmZjY3CisjZGVmaW5lIEYwOTAwX1AxX0VOX0RJU1JYICAweGZmNjcwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTVF9DVVJSU1JDICAweGZmNjcwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0lOX0RJR1NJR05BTCAgMHhmZjY3MDAyMAorI2RlZmluZSBGMDkwMF9QMV9ISVpfQ1VSUkVOVFNSQyAgMHhmZjY3MDAxMAorI2RlZmluZSBGMDkwMF9UU1RfUDFfUElOX1NFTEVDVCAgMHhmZjY3MDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU1RfRElTUlggIDB4ZmY2NzAwMDcKKworI2RlZmluZSBTVFYwOTAwX05CUkVHUwkJNjg0CisjZGVmaW5lIFNUVjA5MDBfTkJGSUVMRFMJCTE3MDIKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3N3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YTMxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jCkBAIC0wLDAgKzEsMjg0NyBAQAorLyoKKyAqIHN0djA5MDBfc3cuYworICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAic3R2MDkwMC5oIgorI2luY2x1ZGUgInN0djA5MDBfcmVnLmgiCisjaW5jbHVkZSAic3R2MDkwMF9wcml2LmgiCisKK2ludCBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGNhcnJfb2Zmc2V0LAorCWFnYzJfaW50ZWdyLAorCW1heF9jYXJyaWVyOworCisJaW50IG5vX3NpZ25hbDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQljYXJyX29mZnNldCA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDFfQ0ZSMSk7CisJCWNhcnJfb2Zmc2V0ID0gZ2UyY29tcChjYXJyX29mZnNldCwgMTYpOworCQlhZ2MyX2ludGVnciA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTEpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMV9BR0MySTApOworCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJY2Fycl9vZmZzZXQgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AyX0NGUjEpOworCQljYXJyX29mZnNldCA9IGdlMmNvbXAoY2Fycl9vZmZzZXQsIDE2KTsKKwkJYWdjMl9pbnRlZ3IgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDJfQUdDMkkwKTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgKz0gKG1heF9jYXJyaWVyIC8gMTApOworCW1heF9jYXJyaWVyID0gNjU1MzYgKiAobWF4X2NhcnJpZXIgLyAyKTsKKwltYXhfY2FycmllciAvPSBpX3BhcmFtcy0+bWNsayAvIDEwMDA7CisJaWYgKG1heF9jYXJyaWVyID4gMHg0MDAwKQorCQltYXhfY2FycmllciA9IDB4NDAwMDsKKworCWlmICgoYWdjMl9pbnRlZ3IgPiAweDIwMDApCisJCQl8fCAoY2Fycl9vZmZzZXQgPiArIDIqbWF4X2NhcnJpZXIpCisJCQl8fCAoY2Fycl9vZmZzZXQgPCAtMiptYXhfY2FycmllcikpCisJCW5vX3NpZ25hbCA9IFRSVUU7CisJZWxzZQorCQlub19zaWduYWwgPSBGQUxTRTsKKworCXJldHVybiBub19zaWduYWw7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfZ2V0X3N3X2xvb3BfcGFyYW1zKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQlzMzIgKmZyZXF1ZW5jeV9pbmMsIHMzMiAqc3dfdGltZW91dCwKKwkJCQlzMzIgKnN0ZXBzLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHRpbWVvdXQsIGZyZXFfaW5jLCBtYXhfc3RlcHMsIHNyYXRlLCBtYXhfY2FycmllcjsKKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJc3RhbmRhcmQ7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gbWF4X2NhcnJpZXIgLyAxMDsKKwkJc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJbWF4X2NhcnJpZXIgKz0gbWF4X2NhcnJpZXIgLyAxMDsKKwkJc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZDsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgPSA2NTUzNiAqIChtYXhfY2FycmllciAvIDIpOworCW1heF9jYXJyaWVyIC89IGlfcGFyYW1zLT5tY2xrIC8gMTAwMDsKKworCWlmIChtYXhfY2FycmllciA+IDB4NDAwMCkKKwkJbWF4X2NhcnJpZXIgPSAweDQwMDA7CisKKwlmcmVxX2luYyA9IHNyYXRlOworCWZyZXFfaW5jIC89IGlfcGFyYW1zLT5tY2xrID4+IDEwOworCWZyZXFfaW5jID0gZnJlcV9pbmMgPDwgNjsKKworCXN3aXRjaCAoc3RhbmRhcmQpIHsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQlmcmVxX2luYyAqPSAzOworCQl0aW1lb3V0ID0gMjA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCWZyZXFfaW5jICo9IDQ7CisJCXRpbWVvdXQgPSAyNTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCWRlZmF1bHQ6CisJCWZyZXFfaW5jICo9IDM7CisJCXRpbWVvdXQgPSAyNTsKKwkJYnJlYWs7CisJfQorCisJZnJlcV9pbmMgLz0gMTAwOworCisJaWYgKChmcmVxX2luYyA+IG1heF9jYXJyaWVyKSB8fCAoZnJlcV9pbmMgPCAwKSkKKwkJZnJlcV9pbmMgPSBtYXhfY2FycmllciAvIDI7CisKKwl0aW1lb3V0ICo9IDI3NTAwOworCisJaWYgKHNyYXRlID4gMCkKKwkJdGltZW91dCAvPSBzcmF0ZSAvIDEwMDA7CisKKwlpZiAoKHRpbWVvdXQgPiAxMDApIHx8ICh0aW1lb3V0IDwgMCkpCisJCXRpbWVvdXQgPSAxMDA7CisKKwltYXhfc3RlcHMgPSAobWF4X2NhcnJpZXIgLyBmcmVxX2luYykgKyAxOworCisJaWYgKChtYXhfc3RlcHMgPiAxMDApIHx8IChtYXhfc3RlcHMgPCAwKSkgeworCQltYXhfc3RlcHMgPSAgMTAwOworCQlmcmVxX2luYyA9IG1heF9jYXJyaWVyIC8gbWF4X3N0ZXBzOworCX0KKworCSpmcmVxdWVuY3lfaW5jID0gZnJlcV9pbmM7CisJKnN3X3RpbWVvdXQgPSB0aW1lb3V0OworCSpzdGVwcyA9IG1heF9zdGVwczsKKworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc2VhcmNoX2NhcnJfc3dfbG9vcChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJczMyIEZyZXFJbmNyLCBzMzIgVGltZW91dCwgaW50IHppZ3phZywKKwkJCQlzMzIgTWF4U3RlcCwgZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlpbnQJbm9fc2lnbmFsLAorCQlsb2NrID0gRkFMU0U7CisJczMyCXN0ZXBDcHQsCisJCWZyZXFPZmZzZXQsCisJCW1heF9jYXJyaWVyOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IChtYXhfY2FycmllciAvIDEwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IChtYXhfY2FycmllciAvIDEwKTsKKwkJYnJlYWs7CisJfQorCisJbWF4X2NhcnJpZXIgPSA2NTUzNiAqIChtYXhfY2FycmllciAvIDIpOworCW1heF9jYXJyaWVyIC89IGlfcGFyYW1zLT5tY2xrIC8gMTAwMDsKKworCWlmIChtYXhfY2FycmllciA+IDB4NDAwMCkKKwkJbWF4X2NhcnJpZXIgPSAweDQwMDA7CisKKwlpZiAoemlnemFnID09IFRSVUUpCisJCWZyZXFPZmZzZXQgPSAwOworCWVsc2UKKwkJZnJlcU9mZnNldCA9IC1tYXhfY2FycmllciArIEZyZXFJbmNyOworCisJc3RlcENwdCA9IDA7CisKKwlkbyB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwKKwkJCQkJKGZyZXFPZmZzZXQgLyAyNTYpICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsCisJCQkJCSBmcmVxT2Zmc2V0ICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQUxHT1NXUlNULCAxKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTIpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9SU1RfSFdBUkUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AxX1JTVF9IV0FSRSwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwKKwkJCQkJKGZyZXFPZmZzZXQgLyAyNTYpICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsCisJCQkJCWZyZXFPZmZzZXQgJiAweEZGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMikgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1JTVF9IV0FSRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDJfUlNUX0hXQVJFLCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHppZ3phZyA9PSBUUlVFKSB7CisJCQlpZiAoZnJlcU9mZnNldCA+PSAwKQorCQkJCWZyZXFPZmZzZXQgPSAtZnJlcU9mZnNldCAtIDIgKiBGcmVxSW5jcjsKKwkJCWVsc2UKKwkJCQlmcmVxT2Zmc2V0ID0gLWZyZXFPZmZzZXQ7CisJCX0gZWxzZQorCQkJZnJlcU9mZnNldCArPSArIDIgKiBGcmVxSW5jcjsKKworCQlzdGVwQ3B0Kys7CisJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgVGltZW91dCk7CisJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwl9IHdoaWxlICgobG9jayA9PSBGQUxTRSkKKwkJCSYmIChub19zaWduYWwgPT0gRkFMU0UpCisJCQkmJiAoKGZyZXFPZmZzZXQgLSBGcmVxSW5jcikgPCAgbWF4X2NhcnJpZXIpCisJCQkmJiAoKGZyZXFPZmZzZXQgKyBGcmVxSW5jcikgPiAtbWF4X2NhcnJpZXIpCisJCQkmJiAoc3RlcENwdCA8IE1heFN0ZXApKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FMR09TV1JTVCwgMCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2NrOworfQorCitpbnQgc3R2MDkwMF9zd19hbGdvKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWludCBsb2NrID0gRkFMU0U7CisKKwlpbnQgbm9fc2lnbmFsLAorCXppZ3phZzsKKwlzMzIgZHZiczJfZmx5X3doZWVsOworCisJczMyIGZyZXFJbmNyZW1lbnQsIHNvZnRTdGVwVGltZW91dCwgdHJpYWxDb3VudGVyLCBtYXhfc3RlcHM7CisKKwlzdHYwOTAwX2dldF9zd19sb29wX3BhcmFtcyhpX3BhcmFtcywgJmZyZXFJbmNyZW1lbnQsICZzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCSZtYXhfc3RlcHMsIGRlbW9kKTsKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFNTOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkweDNCKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCTB4ZWYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EQ0ZHTUQsIDB4NDkpOworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkweDc5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJMHg2OCk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwKKwkJCQkJCTB4ODkpOworCisJCQl6aWd6YWcgPSBUUlVFOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHgzQik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDc5KTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHhlZik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDY4KTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRENGR01ELAorCQkJCQkJCTB4YzkpOworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCisJCXRyaWFsQ291bnRlciA9IDA7CisJCWRvIHsKKwkJCWxvY2sgPSBzdHYwOTAwX3NlYXJjaF9jYXJyX3N3X2xvb3AoaV9wYXJhbXMsCisJCQkJCQkJZnJlcUluY3JlbWVudCwKKwkJCQkJCQlzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCQkJemlnemFnLAorCQkJCQkJCW1heF9zdGVwcywKKwkJCQkJCQlkZW1vZCk7CisJCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywKKwkJCQkJCQkJZGVtb2QpOworCQkJdHJpYWxDb3VudGVyKys7CisJCQlpZiAoKGxvY2sgPT0gVFJVRSkKKwkJCQkJfHwgKG5vX3NpZ25hbCA9PSBUUlVFKQorCQkJCQl8fCAodHJpYWxDb3VudGVyID09IDIpKSB7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJCTB4NDkpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkJMHg5ZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCQkweGVkKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJCTB4ODgpOworCQkJCX0KKworCQkJCWlmICgobG9jayA9PSBUUlVFKSAmJiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCUzJfRk9VTkQpKSB7CisJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9GTFlXSEVFTF9DUFQpOworCisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRkxZV0hFRUxfQ1BUKTsKKwkJCQkJfQorCisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCWxvY2sgPSBGQUxTRTsKKworCQkJCQkJaWYgKHRyaWFsQ291bnRlciA8IDIpIHsKKwkJCQkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywgMHg3OSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDY4KTsKKworCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwgMHg4OSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJfSB3aGlsZSAoKGxvY2sgPT0gRkFMU0UpCisJCQkmJiAodHJpYWxDb3VudGVyIDwgMikKKwkJCSYmIChub19zaWduYWwgPT0gRkFMU0UpKTsKKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJMHgzYik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweGVmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELAorCQkJCQkJMHg0OSk7CisJCQl6aWd6YWcgPSBGQUxTRTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCTB4NzkpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDY4KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRENGR01ELCAweDg5KTsKKwkJCXppZ3phZyA9IFRSVUU7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkZWZhdWx0OgorCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCTB4M2IpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDc5KTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweGVmKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJMHg2OCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwgMHhjOSk7CisKKwkJCXppZ3phZyA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKworCQl0cmlhbENvdW50ZXIgPSAwOworCisJCWRvIHsKKwkJCWxvY2sgPSBzdHYwOTAwX3NlYXJjaF9jYXJyX3N3X2xvb3AoaV9wYXJhbXMsCisJCQkJCQkJZnJlcUluY3JlbWVudCwKKwkJCQkJCQlzb2Z0U3RlcFRpbWVvdXQsCisJCQkJCQkJemlnemFnLAorCQkJCQkJCW1heF9zdGVwcywKKwkJCQkJCQlkZW1vZCk7CisJCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywKKwkJCQkJCQkJZGVtb2QpOworCQkJdHJpYWxDb3VudGVyKys7CisJCQlpZiAoKGxvY2sgPT0gVFJVRSkKKwkJCQkJfHwgKG5vX3NpZ25hbCA9PSBUUlVFKQorCQkJCQl8fCAodHJpYWxDb3VudGVyID09IDIpKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCQkweDQ5KTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJCTB4OWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkJMHhlZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCQkweDg4KTsKKwkJCQl9CisKKwkJCQlpZiAoKGxvY2sgPT0gVFJVRSkgJiYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlMyX0ZPVU5EKSkgeworCQkJCQltc2xlZXAoc29mdFN0ZXBUaW1lb3V0KTsKKwkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRkxZV0hFRUxfQ1BUKTsKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbXNsZWVwKHNvZnRTdGVwVGltZW91dCk7CisJCQkJCQlkdmJzMl9mbHlfd2hlZWwgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9GTFlXSEVFTF9DUFQpOworCQkJCQl9CisKKwkJCQkJaWYgKGR2YnMyX2ZseV93aGVlbCA8IDB4ZCkgeworCQkJCQkJbG9jayA9IEZBTFNFOworCQkJCQkJaWYgKHRyaWFsQ291bnRlciA8IDIpIHsKKwkJCQkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg3OSk7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLCAweDY4KTsKKworCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwgMHg4OSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJfSB3aGlsZSAoKGxvY2sgPT0gRkFMU0UpICYmICh0cmlhbENvdW50ZXIgPCAyKSAmJiAobm9fc2lnbmFsID09IEZBTFNFKSk7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvY2s7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX2ZpZWxkMywgc2ZyX2ZpZWxkMiwgc2ZyX2ZpZWxkMSwgc2ZyX2ZpZWxkMCwKKwlyZW0xLCByZW0yLCBpbnR2YWwxLCBpbnR2YWwyLCBzcmF0ZTsKKworCWRtZF9yZWcoc2ZyX2ZpZWxkMywgRjA5MDBfUDFfU1lNQl9GUkVRMywgRjA5MDBfUDJfU1lNQl9GUkVRMyk7CisJZG1kX3JlZyhzZnJfZmllbGQyLCBGMDkwMF9QMV9TWU1CX0ZSRVEyLCBGMDkwMF9QMl9TWU1CX0ZSRVEyKTsKKwlkbWRfcmVnKHNmcl9maWVsZDEsIEYwOTAwX1AxX1NZTUJfRlJFUTEsIEYwOTAwX1AyX1NZTUJfRlJFUTEpOworCWRtZF9yZWcoc2ZyX2ZpZWxkMCwgRjA5MDBfUDFfU1lNQl9GUkVRMCwgRjA5MDBfUDJfU1lNQl9GUkVRMCk7CisKKwlzcmF0ZSA9IChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQzKSA8PCAyNCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMikgPDwgMTYpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDEpIDw8IDgpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDApKTsKKwlkcHJpbnRrKCJsb2NrOiBzcmF0ZT0lZCByMD0weCV4IHIxPTB4JXggcjI9MHgleCByMz0weCV4IFxuIiwKKwkJc3JhdGUsIHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDApLAorCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQxKSwKKwkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMiksCisJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDMpKTsKKworCWludHZhbDEgPSAobWNsaykgPj4gMTY7CisJaW50dmFsMiA9IChzcmF0ZSkgPj4gMTY7CisKKwlyZW0xID0gKG1jbGspICUgMHgxMDAwMDsKKwlyZW0yID0gKHNyYXRlKSAlIDB4MTAwMDA7CisJc3JhdGUgPQkoaW50dmFsMSAqIGludHZhbDIpICsKKwkJKChpbnR2YWwxICogcmVtMikgPj4gMTYpICsKKwkJKChpbnR2YWwyICogcmVtMSkgPj4gMTYpOworCisJcmV0dXJuIHNyYXRlOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBtY2xrLCB1MzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHNmcl9pbml0X3JlZzsKKwl1MzIgc3ltYjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogTWNsayAlZCwgU1IgJWQsIERtZCAlZFxuIiwgX19mdW5jX18sIG1jbGssCisJCQkJCQkJc3JhdGUsIGRlbW9kKTsKKworCWRtZF9yZWcoc2ZyX2luaXRfcmVnLCBSMDkwMF9QMV9TRlJJTklUMSwgUjA5MDBfUDJfU0ZSSU5JVDEpOworCisJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDQ7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTIpOworCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA2OworCQlzeW1iIC89IChtY2xrID4+IDEwKTsKKwl9IGVsc2UgeworCQlzeW1iID0gc3JhdGUgPDwgOTsKKwkJc3ltYiAvPSAobWNsayA+PiA3KTsKKwl9CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX2luaXRfcmVnLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfaW5pdF9yZWcgKyAxLCAoc3ltYiAmIDB4RkYpKTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIG1jbGssIHUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX21heF9yZWc7CisJdTMyIHN5bWI7CisKKwlkbWRfcmVnKHNmcl9tYXhfcmVnLCBSMDkwMF9QMV9TRlJVUDEsIFIwOTAwX1AyX1NGUlVQMSk7CisKKwlzcmF0ZSA9IDEwNSAqIChzcmF0ZSAvIDEwMCk7CisKKwlpZiAoc3JhdGUgPiA2MDAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNDsKKwkJc3ltYiAvPSAobWNsayA+PiAxMik7CisJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDY7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTApOworCX0gZWxzZSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA5OworCQlzeW1iIC89IChtY2xrID4+IDcpOworCX0KKworCWlmIChzeW1iIDwgMHg3ZmZmKSB7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWF4X3JlZywgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnICsgMSwgKHN5bWIgJiAweEZGKSk7CisJfSBlbHNlIHsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnLCAweDdGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9tYXhfcmVnICsgMSwgMHhGRik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywgdTMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBzZnJfbWluX3JlZzsKKwl1MzIJc3ltYjsKKworCWRtZF9yZWcoc2ZyX21pbl9yZWcsIFIwOTAwX1AxX1NGUkxPVzEsIFIwOTAwX1AyX1NGUkxPVzEpOworCisJc3JhdGUgPSA5NSAqIChzcmF0ZSAvIDEwMCk7CisJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDQ7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTIpOworCisJfSBlbHNlIGlmIChzcmF0ZSA+IDYwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDY7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTApOworCisJfSBlbHNlIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDk7CisJCXN5bWIgLz0gKG1jbGsgPj4gNyk7CisJfQorCisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9taW5fcmVnLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWluX3JlZyArIDEsIChzeW1iICYgMHhGRikpOworfQorCitzdGF0aWMgczMyIHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgdG1ncmVnLAorCXRpbWluZ29mZnNldDsKKworCWRtZF9yZWcodG1ncmVnLCBSMDkwMF9QMV9UTUdSRUcyLCBSMDkwMF9QMl9UTUdSRUcyKTsKKworCXRpbWluZ29mZnNldCA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCB0bWdyZWcpIDw8IDE2KSArCisJCSAgICAgICAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgdG1ncmVnICsgMSkgPDwgOCkgKworCQkgICAgICAgKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIHRtZ3JlZyArIDIpKTsKKworCXRpbWluZ29mZnNldCA9IGdlMmNvbXAodGltaW5nb2Zmc2V0LCAyNCk7CisKKworCWlmICh0aW1pbmdvZmZzZXQgPT0gMCkKKwkJdGltaW5nb2Zmc2V0ID0gMTsKKworCXRpbWluZ29mZnNldCA9ICgoczMyKXNyYXRlICogMTApIC8gKChzMzIpMHgxMDAwMDAwIC8gdGltaW5nb2Zmc2V0KTsKKwl0aW1pbmdvZmZzZXQgLz0gMzIwOworCisJcmV0dXJuIHRpbWluZ29mZnNldDsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfZHZiczJfcm9sbG9mZihzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHJvbGxvZmYsIG1hbl9mbGQsIG1hdHN0cl9yZWcsIHJvbGxvZmZfY3RsX2ZsZDsKKworCWRtZF9yZWcobWFuX2ZsZCwgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGKTsKKwlkbWRfcmVnKG1hdHN0cl9yZWcsIFIwOTAwX1AxX01BVFNUUjEsIFIwOTAwX1AyX01BVFNUUjEpOworCWRtZF9yZWcocm9sbG9mZl9jdGxfZmxkLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsCisJCQkJRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MKTsKKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKSB7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbWFuX2ZsZCwgMSk7CisJCXJvbGxvZmYgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBtYXRzdHJfcmVnKSAmIDB4MDM7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgcm9sbG9mZl9jdGxfZmxkLCByb2xsb2ZmKTsKKwl9IGVsc2UKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtYW5fZmxkLCAwKTsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2NhcnJpZXJfd2lkdGgodTMyIHNyYXRlLCBlbnVtIGZlX3N0djA5MDBfcm9sbG9mZiBybykKK3sKKwl1MzIgcm9sbG9mZjsKKworCXN3aXRjaCAocm8pIHsKKwljYXNlIFNUVjA5MDBfMjA6CisJCXJvbGxvZmYgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzI1OgorCQlyb2xsb2ZmID0gMjU7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF8zNToKKwlkZWZhdWx0OgorCQlyb2xsb2ZmID0gMzU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcmF0ZSAgKyAoc3JhdGUgKiByb2xsb2ZmKSAvIDEwMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2NoZWNrX3RpbWluZ19sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCWludCB0aW1pbmdMb2NrID0gRkFMU0U7CisJczMyIGksCisJdGltaW5nY3B0ID0gMDsKKwl1OCBjYXJGcmVxLAorCXRtZ1RIaGlnaCwKKwl0bWdUSExvdzsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQljYXJGcmVxID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSk7CisJCXRtZ1RIaGlnaCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSk7CisJCXRtZ1RITG93ID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHgyMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQywgMHg4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg0MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4NjUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJbXNsZWVwKDcpOworCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVE1HTE9DS19RVUFMSVRZKSA+PSAyKQorCQkJCXRpbWluZ2NwdCsrOworCisJCQltc2xlZXAoMSk7CisJCX0KKworCQlpZiAodGltaW5nY3B0ID49IDMpCisJCQl0aW1pbmdMb2NrID0gVFJVRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHgzOCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVEMsIDB4ODgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NjgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgY2FyRnJlcSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIHRtZ1RIaGlnaCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIHRtZ1RITG93KTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWNhckZyZXEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRKTsKKwkJdG1nVEhoaWdoID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFKTsKKwkJdG1nVEhMb3cgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweDIwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQywgMHg4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg0MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4NjUpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJbXNsZWVwKDUpOworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQl0aW1pbmdjcHQrKzsKKworCQkJbXNsZWVwKDEpOworCQl9CisKKwkJaWYgKHRpbWluZ2NwdCA+PSAzKQorCQkJdGltaW5nTG9jayA9IFRSVUU7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDLCAweDg4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQ1MyLCAweDY4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIGNhckZyZXEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCB0bWdUSGhpZ2gpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCB0bWdUSExvdyk7CisJCWJyZWFrOworCX0KKworCXJldHVybgl0aW1pbmdMb2NrOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfZ2V0X2RlbW9kX2NvbGRfbG9jayhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJczMyIGRlbW9kX3RpbWVvdXQpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlpbnQgbG9jayA9IEZBTFNFOworCXMzMiBzcmF0ZSwgc2VhcmNoX3JhbmdlLCBsb2NrdGltZW91dCwKKwkJY3Vycmllcl9zdGVwLCBuYl9zdGVwcywgY3VycmVudF9zdGVwLAorCQlkaXJlY3Rpb24sIHR1bmVyX2ZyZXEsIHRpbWVvdXQ7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKwkJc2VhcmNoX3JhbmdlID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZTsKKwkJYnJlYWs7CisKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3JhdGUgPSBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZTsKKwkJc2VhcmNoX3JhbmdlID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNyYXRlID49IDEwMDAwMDAwKQorCQlsb2NrdGltZW91dCA9IGRlbW9kX3RpbWVvdXQgLyAzOworCWVsc2UKKwkJbG9ja3RpbWVvdXQgPSBkZW1vZF90aW1lb3V0IC8gMjsKKworCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgbG9ja3RpbWVvdXQpOworCisJaWYgKGxvY2sgPT0gRkFMU0UpIHsKKwkJaWYgKHNyYXRlID49IDEwMDAwMDAwKSB7CisJCQlpZiAoc3R2MDkwMF9jaGVja190aW1pbmdfbG9jayhpX3BhcmFtcywgZGVtb2QpID09IFRSVUUpIHsKKwkJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJZGVmYXVsdDoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxZik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxZik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTUpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQpOworCQkJfSBlbHNlCisJCQkJbG9jayA9IEZBTFNFOworCQl9IGVsc2UgeworCQkJaWYgKHNyYXRlIDw9IDQwMDAwMDApCisJCQkJY3Vycmllcl9zdGVwID0gMTAwMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJY3Vycmllcl9zdGVwID0gMjAwMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDEwMDAwMDAwKQorCQkJCWN1cnJpZXJfc3RlcCA9IDMwMDA7CisJCQllbHNlCisJCQkJY3Vycmllcl9zdGVwID0gNTAwMDsKKworCQkJbmJfc3RlcHMgPSAoKHNlYXJjaF9yYW5nZSAvIDEwMDApIC8gY3Vycmllcl9zdGVwKTsKKwkJCW5iX3N0ZXBzIC89IDI7CisJCQluYl9zdGVwcyA9ICgyICogKG5iX3N0ZXBzICsgMSkpOworCQkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCQluYl9zdGVwcyA9IDI7CisJCQllbHNlIGlmIChuYl9zdGVwcyA+IDEyKQorCQkJCW5iX3N0ZXBzID0gMTI7CisKKwkJCWN1cnJlbnRfc3RlcCA9IDE7CisJCQlkaXJlY3Rpb24gPSAxOworCQkJdGltZW91dCA9IChkZW1vZF90aW1lb3V0IC8gMyk7CisJCQlpZiAodGltZW91dCA+IDEwMDApCisJCQkJdGltZW91dCA9IDEwMDA7CisKKwkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlpZiAobG9jayA9PSBGQUxTRSkgeworCQkJCQl0dW5lcl9mcmVxID0gaV9wYXJhbXMtPnR1bmVyMV9mcmVxOworCQkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZTsKKworCQkJCQl3aGlsZSAoKGN1cnJlbnRfc3RlcCA8PSBuYl9zdGVwcykgJiYgKGxvY2sgPT0gRkFMU0UpKSB7CisKKwkJCQkJCWlmIChkaXJlY3Rpb24gPiAwKQorCQkJCQkJCXR1bmVyX2ZyZXEgKz0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisJCQkJCQllbHNlCisJCQkJCQkJdHVuZXJfZnJlcSAtPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKworCQkJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjFfYncpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxQyk7CisJCQkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMikgeworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCQkJCX0KKworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgMCk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQkJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lb3V0KTsKKwkJCQkJCWRpcmVjdGlvbiAqPSAtMTsKKwkJCQkJCWN1cnJlbnRfc3RlcCsrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJaWYgKGxvY2sgPT0gRkFMU0UpIHsKKwkJCQkJdHVuZXJfZnJlcSA9IGlfcGFyYW1zLT50dW5lcjJfZnJlcTsKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgc3JhdGU7CisKKwkJCQkJd2hpbGUgKChjdXJyZW50X3N0ZXAgPD0gbmJfc3RlcHMpICYmIChsb2NrID09IEZBTFNFKSkgeworCisJCQkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJCQl0dW5lcl9mcmVxICs9IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCQkJCQkJZWxzZQorCQkJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUMpOworCQkJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMyKSB7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJCQkJfQorCisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIDApOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxNSk7CisJCQkJCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVvdXQpOworCQkJCQkJZGlyZWN0aW9uICo9IC0xOworCQkJCQkJY3VycmVudF9zdGVwKys7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4JbG9jazsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KHMzMiAqZGVtb2RfdGltZW91dCwgczMyICpmZWNfdGltZW91dCwKKwkJCQkJczMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28gYWxnbykKK3sKKwlzd2l0Y2ggKGFsZ28pIHsKKwljYXNlIFNUVjA5MDBfQkxJTkRfU0VBUkNIOgorCQlpZiAoc3JhdGUgPD0gMTUwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDE1MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDQwMDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMTAwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMzAwOworCQl9IGVsc2UgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDcwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTAwOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0NPTERfU1RBUlQ6CisJY2FzZSBTVFYwOTAwX1dBUk1fU1RBUlQ6CisJZGVmYXVsdDoKKwkJaWYgKHNyYXRlIDw9IDEwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAzMDAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxNzAwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDIwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAyNTAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMTAwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDUwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAxMDAwOworCQkJKCpmZWNfdGltZW91dCkgPSA1NTA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gMTAwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSA3MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDI1MDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSAyMDAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDQwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTMwOworCQl9CisKKwkJZWxzZSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMzAwOworCQkJKCpmZWNfdGltZW91dCkgPSAxMDA7CisJCX0KKworCQlicmVhazsKKworCX0KKworCWlmIChhbGdvID09IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJKCpkZW1vZF90aW1lb3V0KSAvPSAyOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCXMzMiB2dGhfcmVnOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHZ0aF9yZWcsIFIwOTAwX1AxX1ZUSDEyLCBSMDkwMF9QMl9WVEgxMik7CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweGQwKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDdkKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDUzKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDJGKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDI0KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDFGKTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJICAgZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGFuZGFyZCBTdGFuZGFyZCwKKwkJCQkgICBlbnVtIGZlX3N0djA5MDBfZmVjIFB1bmN0dXJlUmF0ZSwKKwkJCQkgICBlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCisJczMyIGZlY21SZWcsCisJcHJ2aXRSZWc7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFZpdGVyYmlTdGFuZGFyZCA9ICIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlmZWNtUmVnID0gUjA5MDBfUDFfRkVDTTsKKwkJcHJ2aXRSZWcgPSBSMDkwMF9QMV9QUlZJVDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWZlY21SZWcgPSBSMDkwMF9QMl9GRUNNOworCQlwcnZpdFJlZyA9IFIwOTAwX1AyX1BSVklUOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKFN0YW5kYXJkKSB7CisJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkcHJpbnRrKCJBdXRvXG4iKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGZlY21SZWcsIDB4MTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4M0YpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQlkcHJpbnRrKCJEVkJTMVxuIik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBmZWNtUmVnLCAweDAwKTsKKwkJc3dpdGNoIChQdW5jdHVyZVJhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX0ZFQ19VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDJGKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzFfMjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18yXzM6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDIpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfM180OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDA0KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzVfNjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwOCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ183Xzg6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MjApOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJZHByaW50aygiRFNTXG4iKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGZlY21SZWcsIDB4ODApOworCQlzd2l0Y2ggKFB1bmN0dXJlUmF0ZSkgeworCQljYXNlIFNUVjA5MDBfRkVDX1VOS05PV046CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MTMpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfMV8yOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDAxKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzJfMzoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMik7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ182Xzc6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MTApOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBzcmF0ZSwgcGlsb3RzLCBhY2xjLCBmcmVxMSwgZnJlcTAsCisJCWkgPSAwLCB0aW1lZCwgdGltZWYsIGJsaW5kVHVuU3cgPSAwOworCisJZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYgcm9sbG9mZjsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZSBmb3VuZE1vZGNvZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwlzcmF0ZSArPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIHNyYXRlLCBkZW1vZCk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX0NPTlRST0wsIGlfcGFyYW1zLT5yb2xsb2ZmKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDc1KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDApOworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyYW1lX2xlbmd0aCA9PSBTVFYwOTAwX0xPTkdfRlJBTUUpIHsKKwkJCQlmb3VuZE1vZGNvZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX01PRENPRCk7CisJCQkJcGlsb3RzID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfVFlQRSkgJiAweDAxOworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3Aoc3JhdGUsIGZvdW5kTW9kY29kLCBwaWxvdHMsIGlfcGFyYW1zLT5jaGlwX2lkKTsKKwkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCBhY2xjKTsKKwkJCQllbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzhQU0tfOTEwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfQorCisJCQkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9PSBTVFYwOTAwX1NJTkdMRSkgJiYgKGZvdW5kTW9kY29kID4gU1RWMDkwMF84UFNLXzkxMCkpIHsKKwkJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQkJfSBlbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzMyQVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJYWNsYyA9IHN0djA5MDBfZ2V0X29wdGltX3Nob3J0X2NhcnJfbG9vcChzcmF0ZSwgaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiwgaV9wYXJhbXMtPmNoaXBfaWQpOworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfUVBTSykKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCBhY2xjKTsKKworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF84UFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMTZBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8zMkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCX0KKworCQkJfQorCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkKKwkJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDY3KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKTsKKwkJZnJlcTAgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIxKTsKKwkJcm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JPTExPRkZfU1RBVFVTKTsKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TQ0FOX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCWJsaW5kVHVuU3cgPSAxOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFNTKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwYSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZJVFNDQUxFLCAweDApOworCQkJfQorCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4MDgpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEVYUCwgMHgwQSk7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCisJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkgfHwgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisKKwkJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJc3R2MDkwMF9zZXRfYmFuZHdpZHRoKGZlLCBpX3BhcmFtcy0+dHVuZXIxX2J3KTsKKwkJCX0KKworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkKKwkJCQltc2xlZXAoNTApOworCQkJZWxzZQorCQkJCW1zbGVlcCg1KTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZ0aW1lZCwgJnRpbWVmLCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKworCQkJaWYgKHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lZCAvIDIpID09IEZBTFNFKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQkJaSA9IDA7CisJCQkJd2hpbGUgKChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgJiYgKGkgPD0gMikpIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NDkpOworCisJCWlmICgoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkgfHwgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFNTX1NUQU5EQVJEKSkKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlicmVhazsKKworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9EVkJTMV9TVEFOREFSRDoKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCwgaV9wYXJhbXMtPnJvbGxvZmYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NzUpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0JDTEMsIDApOworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyYW1lX2xlbmd0aCA9PSBTVFYwOTAwX0xPTkdfRlJBTUUpIHsKKwkJCQlmb3VuZE1vZGNvZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX01PRENPRCk7CisJCQkJcGlsb3RzID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfVFlQRSkgJiAweDAxOworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3Aoc3JhdGUsIGZvdW5kTW9kY29kLCBwaWxvdHMsIGlfcGFyYW1zLT5jaGlwX2lkKTsKKwkJCQlpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCBhY2xjKTsKKwkJCQllbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzhQU0tfOTEwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfQorCisJCQkJaWYgKChpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9PSBTVFYwOTAwX1NJTkdMRSkgJiYgKGZvdW5kTW9kY29kID4gU1RWMDkwMF84UFNLXzkxMCkpIHsKKwkJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkgeworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQkJfSBlbHNlIGlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzMyQVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjMyQSwgYWNsYyk7CisJCQkJCX0KKworCQkJCX0KKworCQkJfSBlbHNlIHsKKwkJCQlhY2xjID0gc3R2MDkwMF9nZXRfb3B0aW1fc2hvcnRfY2Fycl9sb29wKHNyYXRlLAorCQkJCQkJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiwKKwkJCQkJCQkJCWlfcGFyYW1zLT5jaGlwX2lkKTsKKworCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfUVBTSykKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCBhY2xjKTsKKworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF84UFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyOCwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMTZBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMTZBLCBhY2xjKTsKKwkJCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPT0gU1RWMDkwMF8zMkFQU0spIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzJRLCAweDJhKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCX0KKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDY3KTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJEOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJYnJlYWs7CisJCX0KKworCQlmcmVxMSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjIpOworCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjEpOworCQlyb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUk9MTE9GRl9TVEFUVVMpOworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcyLCAweDAxKTsKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJYmxpbmRUdW5TdyA9IDE7CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMSkgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZBVlNSVklULCAweDBhKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVklUU0NBTEUsIDB4MCk7CisJCQl9CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHgwOCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMRVhQLCAweDBhKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHgzOCk7CisJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkgfHwgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChzcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisKKwkJCWlmICgoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgfHwgKGJsaW5kVHVuU3cgPT0gMSkpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvICE9IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJc3R2MDkwMF9zZXRfYmFuZHdpZHRoKGZlLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKwkJCX0KKworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkKKwkJCQltc2xlZXAoNTApOworCQkJZWxzZQorCQkJCW1zbGVlcCg1KTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZ0aW1lZCwgJnRpbWVmLCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKwkJCWlmIChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJCWkgPSAwOworCQkJCXdoaWxlICgoc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVkIC8gMikgPT0gRkFMU0UpICYmIChpIDw9IDIpKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTgpOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0OSk7CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEKSB8fCAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EU1NfU1RBTkRBUkQpKQorCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBzdHYwOTAwX2dldF9mZWNfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsIHMzMiB0aW1lX291dCkKK3sKKwlzMzIgdGltZXIgPSAwLCBsb2NrID0gMCwgaGVhZGVyX2ZpZWxkLCBwa3RkZWxpbl9maWVsZCwgbG9ja192aXRfZmllbGQ7CisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YXRlIGRtZF9zdGF0ZTsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhoZWFkZXJfZmllbGQsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyhwa3RkZWxpbl9maWVsZCwgRjA5MDBfUDFfUEtUREVMSU5fTE9DSywgRjA5MDBfUDJfUEtUREVMSU5fTE9DSyk7CisJZG1kX3JlZyhsb2NrX3ZpdF9maWVsZCwgRjA5MDBfUDFfTE9DS0VEVklULCBGMDkwMF9QMl9MT0NLRURWSVQpOworCisJZG1kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgaGVhZGVyX2ZpZWxkKTsKKworCXdoaWxlICgodGltZXIgPCB0aW1lX291dCkgJiYgKGxvY2sgPT0gMCkpIHsKKwkJc3dpdGNoIChkbWRfc3RhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwkJY2FzZSBTVFYwOTAwX1BMSF9ERVRFQ1RFRDoKKwkJZGVmYXVsdDoKKwkJCWxvY2sgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBwa3RkZWxpbl9maWVsZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCQlsb2NrID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja192aXRfZmllbGQpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAobG9jayA9PSAwKSB7CisJCQltc2xlZXAoMTApOworCQkJdGltZXIgKz0gMTA7CisJCX0KKwl9CisKKwlpZiAobG9jaykKKwkJZHByaW50aygiREVNT0QgRkVDIExPQ0sgT0tcbiIpOworCWVsc2UKKwkJZHByaW50aygiREVNT0QgRkVDIExPQ0sgRkFJTFxuIik7CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3dhaXRfZm9yX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsCisJCQkJczMyIGRtZF90aW1lb3V0LCBzMzIgZmVjX3RpbWVvdXQpCit7CisKKwlzMzIgdGltZXIgPSAwLCBsb2NrID0gMCwgc3RyX21lcmdfcnN0X2ZsZCwgc3RyX21lcmdfbG9ja19mbGQ7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcoc3RyX21lcmdfcnN0X2ZsZCwgRjA5MDBfUDFfUlNUX0hXQVJFLCBGMDkwMF9QMl9SU1RfSFdBUkUpOworCWRtZF9yZWcoc3RyX21lcmdfbG9ja19mbGQsIEYwOTAwX1AxX1RTRklGT19MSU5FT0ssIEYwOTAwX1AyX1RTRklGT19MSU5FT0spOworCisJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkbWRfdGltZW91dCk7CisKKwlpZiAobG9jaykKKwkJbG9jayA9IGxvY2sgJiYgc3R2MDkwMF9nZXRfZmVjX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBmZWNfdGltZW91dCk7CisKKwlpZiAobG9jaykgeworCQlsb2NrID0gMDsKKworCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRpbWVyID0gJWQsIHRpbWVfb3V0ID0gJWRcbiIsIF9fZnVuY19fLCB0aW1lciwgZmVjX3RpbWVvdXQpOworCisJCXdoaWxlICgodGltZXIgPCBmZWNfdGltZW91dCkgJiYgKGxvY2sgPT0gMCkpIHsKKwkJCWxvY2sgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzdHJfbWVyZ19sb2NrX2ZsZCk7CisJCQltc2xlZXAoMSk7CisJCQl0aW1lcisrOworCQl9CisJfQorCisJaWYgKGxvY2spCisJCWRwcmludGsoS0VSTl9JTkZPICIlczogREVNT0QgTE9DSyBPS1xuIiwgX19mdW5jX18pOworCWVsc2UKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBERU1PRCBMT0NLIEZBSUxcbiIsIF9fZnVuY19fKTsKKworCWlmIChsb2NrKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHN0djA5MDBfZ2V0X3N0YW5kYXJkKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIGZuZF9zdGFuZGFyZDsKKwlzMzIgc3RhdGVfZmllbGQsCisJZHNzX2R2Yl9maWVsZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhzdGF0ZV9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKGRzc19kdmJfZmllbGQsIEYwOTAwX1AxX0RTU19EVkIsIEYwOTAwX1AyX0RTU19EVkIpOworCisJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHN0YXRlX2ZpZWxkKSA9PSAyKQorCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOworCisJZWxzZSBpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc3RhdGVfZmllbGQpID09IDMpIHsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGRzc19kdmJfZmllbGQpID09IDEpCisJCQlmbmRfc3RhbmRhcmQgPSBTVFYwOTAwX0RTU19TVEFOREFSRDsKKwkJZWxzZQorCQkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRDsKKwl9IGVsc2UKKwkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9VTktOT1dOX1NUQU5EQVJEOworCisJcmV0dXJuIGZuZF9zdGFuZGFyZDsKK30KKworc3RhdGljIHMzMiBzdHYwOTAwX2dldF9jYXJyX2ZyZXEoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MzIgbWNsaywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgY2ZyX2ZpZWxkMiwgY2ZyX2ZpZWxkMSwgY2ZyX2ZpZWxkMCwKKwkJZGVyb3QsIHJlbTEsIHJlbTIsIGludHZhbDEsIGludHZhbDI7CisKKwlkbWRfcmVnKGNmcl9maWVsZDIsIEYwOTAwX1AxX0NBUl9GUkVRMiwgRjA5MDBfUDJfQ0FSX0ZSRVEyKTsKKwlkbWRfcmVnKGNmcl9maWVsZDEsIEYwOTAwX1AxX0NBUl9GUkVRMSwgRjA5MDBfUDJfQ0FSX0ZSRVExKTsKKwlkbWRfcmVnKGNmcl9maWVsZDAsIEYwOTAwX1AxX0NBUl9GUkVRMCwgRjA5MDBfUDJfQ0FSX0ZSRVEwKTsKKworCWRlcm90ID0gKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGNmcl9maWVsZDIpIDw8IDE2KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBjZnJfZmllbGQxKSA8PCA4KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBjZnJfZmllbGQwKSk7CisKKwlkZXJvdCA9IGdlMmNvbXAoZGVyb3QsIDI0KTsKKwlpbnR2YWwxID0gbWNsayA+PiAxMjsKKwlpbnR2YWwyID0gZGVyb3QgPj4gMTI7CisJcmVtMSA9IG1jbGsgJSAweDEwMDA7CisJcmVtMiA9IGRlcm90ICUgMHgxMDAwOworCWRlcm90ID0gKGludHZhbDEgKiBpbnR2YWwyKSArCisJCSgoaW50dmFsMSAqIHJlbTIpID4+IDEyKSArCisJCSgoaW50dmFsMiAqIHJlbTEpID4+IDEyKTsKKworCXJldHVybiBkZXJvdDsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2dldF90dW5lcl9mcmVxKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzCSpmcm9udGVuZF9vcHMgPSBOVUxMOworCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOworCXUzMiBmcmVxdWVuY3kgPSAwOworCisJaWYgKCZmZS0+b3BzKQorCQlmcm9udGVuZF9vcHMgPSAmZmUtPm9wczsKKworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKworCWlmICh0dW5lcl9vcHMtPmdldF9mcmVxdWVuY3kpIHsKKwkJaWYgKCh0dW5lcl9vcHMtPmdldF9mcmVxdWVuY3koZmUsICZmcmVxdWVuY3kpKSA8IDApCisJCQlkcHJpbnRrKCIlczogSW52YWxpZCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsKKwkJZWxzZQorCQkJZHByaW50aygiJXM6IEZyZXF1ZW5jeT0lZFxuIiwgX19mdW5jX18sIGZyZXF1ZW5jeSk7CisKKwl9CisKKwlyZXR1cm4gZnJlcXVlbmN5OworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX2ZlYyBzdHYwOTAwX2dldF92aXRfZmVjKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHJhdGVfZmxkLCB2aXRfY3VycHVuX2ZsZDsKKwllbnVtIGZlX3N0djA5MDBfZmVjIHByYXRlOworCisJZG1kX3JlZyh2aXRfY3VycHVuX2ZsZCwgRjA5MDBfUDFfVklUX0NVUlBVTiwgRjA5MDBfUDJfVklUX0NVUlBVTik7CisJcmF0ZV9mbGQgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCB2aXRfY3VycHVuX2ZsZCk7CisKKwlzd2l0Y2ggKHJhdGVfZmxkKSB7CisJY2FzZSAxMzoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMTg6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfMl8zOworCQlicmVhazsKKwljYXNlIDIxOgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzNfNDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ181XzY7CisJCWJyZWFrOworCWNhc2UgMjU6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfNl83OworCQlicmVhazsKKwljYXNlIDI2OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzdfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ19VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcHJhdGU7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJczMyIG9mZnNldEZyZXEsCisJc3JhdGVfb2Zmc2V0LAorCWkgPSAwOworCisJdTggdGltaW5nOworCisJbXNsZWVwKDUpOworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQl0aW1pbmcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdSRUcyKTsKKwkJCWkgPSAwOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlNURVAsIDB4NWMpOworCisJCQl3aGlsZSAoKGkgPD0gNTApICYmICh0aW1pbmcgIT0gMCkgJiYgKHRpbWluZyAhPSAweEZGKSkgeworCQkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1JFRzIpOworCQkJCW1zbGVlcCg1KTsKKwkJCQlpICs9IDU7CisJCQl9CisJCX0KKworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpIC8gMTAwMDsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJlcXVlbmN5ICs9IG9mZnNldEZyZXE7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCXNyYXRlX29mZnNldCA9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUgKz0gc3JhdGVfb2Zmc2V0OworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mZWMgPSBzdHYwOTAwX2dldF92aXRfZmVjKGlfcGFyYW1zLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9NT0RDT0QpOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX1RZUEUpICYgMHgwMTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJhbWVfbGVuZ3RoID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfVFlQRSkpID4+IDE7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX1NUQVRVUyk7CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0RFTU9EKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfUVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfUVBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF84UFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF84UFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzE2QVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMTZBUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzMyQVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMzJBUFNLOworCQkJZWxzZQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1VOS05PV047CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOgorCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9JUUlOVik7CisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpIHsKKwkJCW9mZnNldEZyZXEgPQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3kgLSBpX3BhcmFtcy0+dHVuZXIxX2ZyZXE7CisJCQlpX3BhcmFtcy0+dHVuZXIxX2ZyZXEgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMjAwMCkgKyA1MDApKQorCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJZWxzZQorCQkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDFfcnNsdHMucm9sbG9mZikgLyAyMDAwKSkKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQkJZWxzZQorCQkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKworCQl9IGVsc2UgeworCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAyMDAwKSArIDUwMCkpCisJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQllbHNlCisJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1JFRzIpOworCQkJaSA9IDA7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSU1RFUCwgMHg1Yyk7CisKKwkJCXdoaWxlICgoaSA8PSA1MCkgJiYgKHRpbWluZyAhPSAwKSAmJiAodGltaW5nICE9IDB4ZmYpKSB7CisJCQkJdGltaW5nID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HUkVHMik7CisJCQkJbXNsZWVwKDUpOworCQkJCWkgKz0gNTsKKwkJCX0KKwkJfQorCisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkID0gc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJlcXVlbmN5ID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisJCW9mZnNldEZyZXEgPSBzdHYwOTAwX2dldF9jYXJyX2ZyZXEoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCkgLyAxMDAwOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmVxdWVuY3kgKz0gb2Zmc2V0RnJlcTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJc3JhdGVfb2Zmc2V0ID0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZSArPSBzcmF0ZV9vZmZzZXQ7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZlYyA9IHN0djA5MDBfZ2V0X3ZpdF9mZWMoaV9wYXJhbXMsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX01PRENPRCk7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnBpbG90ID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfVFlQRSkgJiAweDAxOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmFtZV9sZW5ndGggPSAoKHUzMilzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9UWVBFKSkgPj4gMTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMucm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfU1RBVFVTKTsKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfREVNT0QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF9RUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzhQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzhQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMTZBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8xNkFQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfMzJBUFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF8zMkFQU0s7CisJCQllbHNlCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfVU5LTk9XTjsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisJCWNhc2UgU1RWMDkwMF9EU1NfU1RBTkRBUkQ6CisJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zcGVjdHJ1bSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0lRSU5WKTsKKwkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1FQU0s7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHx8IChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkgeworCQkJb2Zmc2V0RnJlcSA9CWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeSAtIGlfcGFyYW1zLT50dW5lcjJfZnJlcTsKKwkJCWlfcGFyYW1zLT50dW5lcjJfZnJlcSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9IChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQyX3JzbHRzLnJvbGxvZmYpIC8gMjAwMCkpCisJCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJCWVsc2UKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJCX0gZWxzZSB7CisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlyYW5nZSA9IFNUVjA5MDBfT1VUT0ZSQU5HRTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiByYW5nZTsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzdHYwOTAwX2R2YnMxX2FjcV93b3JrYXJvdW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJczMyIHNyYXRlLCBkZW1vZF90aW1lb3V0LAorCQlmZWNfdGltZW91dCwgZnJlcTEsIGZyZXEwOworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzaWduYWxfdHlwZSA9IFNUVjA5MDBfTk9EQVRBOzsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlNfRk9VTkQpIHsKKwkJCXNyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCQlzcmF0ZSArPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIHNyYXRlLCBkZW1vZCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIHNyYXRlLCBTVFYwOTAwX1dBUk1fU1RBUlQpOworCQkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlIyKTsKKwkJCWZyZXEwID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NQRUNJTlZfQ09OVFJPTCwgU1RWMDkwMF9JUV9GT1JDRV9TV0FQUEVEKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfTk9STUFMKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKwkJCQkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQkJCX0KKworCQkJfQorCisJCX0gZWxzZQorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCU19GT1VORCkgeworCQkJc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCXNyYXRlICs9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgc3JhdGUsIGRlbW9kKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKwkJCWZyZXExID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMik7CisJCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfU1dBUFBFRCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgZnJlcTEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKworCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfTk9STUFMKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFjKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKworCQkJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBUUlVFOworCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCQkJCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCQkJfQorCisJCQl9CisKKwkJfSBlbHNlCisJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc2lnbmFsX3R5cGU7Cit9CisKK3N0YXRpYyB1MTYgc3R2MDkwMF9ibGluZF9jaGVja19hZ2MyX21pbl9sZXZlbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIG1pbmFnYzJsZXZlbCA9IDB4ZmZmZiwKKwkJYWdjMmxldmVsLAorCQlpbml0X2ZyZXEsIGZyZXFfc3RlcDsKKworCXMzMiBpLCBqLCBuYl9zdGVwcywgZGlyZWN0aW9uOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDEpOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAweGMwKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMSwgMHg4Mik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAweGEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgwKTsKKworCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJbmJfc3RlcHMgPSAtMSArIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDAwMCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisKKwkJZGlyZWN0aW9uID0gMTsKKworCQlmcmVxX3N0ZXAgPSAoMTAwMDAwMCA8PCA4KSAvIChpX3BhcmFtcy0+bWNsayA+PiA4KTsKKworCQlpbml0X2ZyZXEgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBuYl9zdGVwczsgaSsrKSB7CisJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgKyAoZnJlcV9zdGVwICogaSk7CisJCQllbHNlCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxIC0gKGZyZXFfc3RlcCAqIGkpOworCisJCQlkaXJlY3Rpb24gKj0gLTE7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgKGluaXRfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBpbml0X2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDU4KTsKKwkJCW1zbGVlcCgxMCk7CisJCQlhZ2MybGV2ZWwgPSAwOworCisJCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKKwkJCQlhZ2MybGV2ZWwgKz0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkwKTsKKworCQkJYWdjMmxldmVsIC89IDEwOworCisJCQlpZiAoYWdjMmxldmVsIDwgbWluYWdjMmxldmVsKQorCQkJCW1pbmFnYzJsZXZlbCA9IGFnYzJsZXZlbDsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EVDBNLCAweDApOworCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJbmJfc3RlcHMgPSAtMSArIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMDAwMCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisKKwkJZGlyZWN0aW9uID0gMTsKKwkJZnJlcV9zdGVwID0gKDEwMDAwMDAgPDwgOCkgLyAoaV9wYXJhbXMtPm1jbGsgPj4gOCk7CisJCWluaXRfZnJlcSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuYl9zdGVwczsgaSsrKSB7CisJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQlpbml0X2ZyZXEgPSBpbml0X2ZyZXEgKyAoZnJlcV9zdGVwICogaSk7CisJCQllbHNlCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxIC0gKGZyZXFfc3RlcCAqIGkpOworCisJCQlkaXJlY3Rpb24gKj0gLTE7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NUMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAoaW5pdF9mcmVxID4+IDgpICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGluaXRfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NTgpOworCisJCQltc2xlZXAoMTApOworCQkJYWdjMmxldmVsID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCAxMDsgaisrKQorCQkJCWFnYzJsZXZlbCArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTApOworCisJCQlhZ2MybGV2ZWwgLz0gMTA7CisKKwkJCWlmIChhZ2MybGV2ZWwgPCBtaW5hZ2MybGV2ZWwpCisJCQkJbWluYWdjMmxldmVsID0gYWdjMmxldmVsOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAodTE2KW1pbmFnYzJsZXZlbDsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX3NlYXJjaF9zcmF0ZV9jb2Fyc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJaW50IHRpbWluZ0xvY2sgPSBGQUxTRTsKKwlzMzIgaSwgdGltaW5nY3B0ID0gMCwKKwkJZGlyZWN0aW9uID0gMSwKKwkJbmJfc3RlcHMsCisJCWN1cnJlbnRfc3RlcCA9IDAsCisJCXR1bmVyX2ZyZXE7CisKKwl1MzIgY29hcnNlX3NyYXRlID0gMCwgYWdjMl9pbnRlZ3IgPSAwLCBjdXJyaWVyX3N0ZXAgPSAxMjAwOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MUYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHLCAweDEyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHhmMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4ZTApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EVDBNLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMlJFRiwgMHg1MCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDZhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDk1KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVkKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDczKTsKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSAyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMTAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDIwMDA7CisJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDw9IDEyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMzAwMDsKKwkJZWxzZQorCQkJY3Vycmllcl9zdGVwID0gNTAwMDsKKworCQluYl9zdGVwcyA9IC0xICsgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMCkgLyBjdXJyaWVyX3N0ZXApOworCQluYl9zdGVwcyAvPSAyOworCQluYl9zdGVwcyA9ICgyICogbmJfc3RlcHMpICsgMTsKKworCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJbmJfc3RlcHMgPSAxOworCisJCWVsc2UgaWYgKG5iX3N0ZXBzID4gMTApIHsKKwkJCW5iX3N0ZXBzID0gMTE7CisJCQljdXJyaWVyX3N0ZXAgPSAoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDApIC8gMTA7CisJCX0KKworCQljdXJyZW50X3N0ZXAgPSAwOworCisJCWRpcmVjdGlvbiA9IDE7CisJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIxX2ZyZXE7CisKKwkJd2hpbGUgKCh0aW1pbmdMb2NrID09IEZBTFNFKSAmJiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVGKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUsIDB4MCk7CisKKwkJCW1zbGVlcCg1MCk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQkJdGltaW5nY3B0Kys7CisKKwkJCQlhZ2MyX2ludGVnciArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkxKSA8PCA4KSB8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMCk7CisKKwkJCX0KKworCQkJYWdjMl9pbnRlZ3IgLz0gMTA7CisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCWN1cnJlbnRfc3RlcCsrOworCQkJZGlyZWN0aW9uICo9IC0xOworCisJCQlkcHJpbnRrKCJsb2NrOiBJMkNfREVNT0RfTU9ERV9GSUVMRCA9MC4gU2VhcmNoIHN0YXJ0ZWQuIHR1bmVyIGZyZXE9JWQgYWdjMj0weCV4IHNyYXRlX2NvYXJzZT0lZCB0bWdfY3B0PSVkXG4iLCB0dW5lcl9mcmVxLCBhZ2MyX2ludGVnciwgY29hcnNlX3NyYXRlLCB0aW1pbmdjcHQpOworCisJCQlpZiAoKHRpbWluZ2NwdCA+PSA1KSAmJiAoYWdjMl9pbnRlZ3IgPCAweDFGMDApICYmIChjb2Fyc2Vfc3JhdGUgPCA1NTAwMDAwMCkgJiYgKGNvYXJzZV9zcmF0ZSA+IDg1MDAwMCkpIHsKKwkJCQl0aW1pbmdMb2NrID0gVFJVRTsKKwkJCX0KKworCQkJZWxzZSBpZiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpIHsKKwkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQllbHNlCisJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisJCQl9CisJCX0KKworCQlpZiAodGltaW5nTG9jayA9PSBGQUxTRSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9JMkNfREVNT0RfTU9ERSwgMHgxRik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcsIDB4MTIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhSSVNFLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU0NBTl9FTkFCTEUsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMSk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIDB4ODMpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzEsIDB4ODIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgMHhhMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDUwKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NmEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4OTUpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4NzMpOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDw9IDIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAxMDAwOworCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8PSA1MDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMjAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gMTIwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAzMDAwOworCQllbHNlCisJCQljdXJyaWVyX3N0ZXAgPSA1MDAwOworCisKKwkJbmJfc3RlcHMgPSAtMSArICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDApIC8gY3Vycmllcl9zdGVwKTsKKwkJbmJfc3RlcHMgLz0gMjsKKwkJbmJfc3RlcHMgPSAoMiAqIG5iX3N0ZXBzKSArIDE7CisKKwkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCW5iX3N0ZXBzID0gMTsKKwkJZWxzZSBpZiAobmJfc3RlcHMgPiAxMCkgeworCQkJbmJfc3RlcHMgPSAxMTsKKwkJCWN1cnJpZXJfc3RlcCA9IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3JhbmdlIC8gMTAwMCkgLyAxMDsKKwkJfQorCisJCWN1cnJlbnRfc3RlcCA9IDA7CisJCWRpcmVjdGlvbiA9IDE7CisJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIyX2ZyZXE7CisKKwkJd2hpbGUgKCh0aW1pbmdMb2NrID09IEZBTFNFKSAmJiAoY3VycmVudF9zdGVwIDwgbmJfc3RlcHMpKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDVGKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUsIDB4MCk7CisKKwkJCW1zbGVlcCg1MCk7CisJCQl0aW1pbmdjcHQgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQkJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UTUdMT0NLX1FVQUxJVFkpID49IDIpCisJCQkJCXRpbWluZ2NwdCsrOworCQkJCWFnYzJfaW50ZWdyICs9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTEpIDw8IDgpCisJCQkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkwKTsKKwkJCX0KKworCQkJYWdjMl9pbnRlZ3IgLz0gMjA7CisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJCWlmICgodGltaW5nY3B0ID49IDEwKSAmJiAoYWdjMl9pbnRlZ3IgPCAweDFGMDApICYmIChjb2Fyc2Vfc3JhdGUgPCA1NTAwMDAwMCkgJiYgKGNvYXJzZV9zcmF0ZSA+IDg1MDAwMCkpCisJCQkJdGltaW5nTG9jayA9IFRSVUU7CisJCQllbHNlIHsKKwkJCQljdXJyZW50X3N0ZXArKzsKKwkJCQlkaXJlY3Rpb24gKj0gLTE7CisKKwkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQllbHNlCisJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMl9idyk7CisJCQl9CisJCX0KKworCQlpZiAodGltaW5nTG9jayA9PSBGQUxTRSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UKKwkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29hcnNlX3NyYXRlOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfc2VhcmNoX3NyYXRlX2ZpbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJdTMyIGNvYXJzZV9zcmF0ZSwKKwljb2Fyc2VfZnJlcSwKKwlzeW1iOworCisJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJY29hcnNlX2ZyZXEgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMSk7CisJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisKKwkJaWYgKHN5bWIgPCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSkKKwkJCWNvYXJzZV9zcmF0ZSA9IDA7CisJCWVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSEZBTEwsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRywgMHhkMik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDQ5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHhlZCk7CisKKwkJCWlmIChjb2Fyc2Vfc3JhdGUgPiAzMDAwMDAwKSB7CisJCQkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxMyk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IChjb2Fyc2Vfc3JhdGUgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9IGVsc2UgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IDEwICogKGNvYXJzZV9zcmF0ZSAvIDE0KTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSSU5JVDEsIChzeW1iID4+IDgpICYgMHhGRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQwLCAoc3ltYiAmIDB4RkYpKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIChjb2Fyc2VfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBjb2Fyc2VfZnJlcSAgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQljb2Fyc2VfZnJlcSA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIyKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIxKTsKKworCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCisJCWlmIChzeW1iIDwgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUpCisJCQljb2Fyc2Vfc3JhdGUgPSAwOworCQllbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MUYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcsIDB4ZDIpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0OSk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWQpOworCisJCQlpZiAoY29hcnNlX3NyYXRlID4gMzAwMDAwMCkgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gMTAgKiAoY29hcnNlX3NyYXRlIC8gMTMpOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMSwgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSSU5JVDAsIChzeW1iICYgMHhGRikpOworCQkJfSBlbHNlIHsKKwkJCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxNCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gKGNvYXJzZV9zcmF0ZSAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAoY29hcnNlX2ZyZXEgPj4gOCkgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgY29hcnNlX2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiBjb2Fyc2Vfc3JhdGU7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9ibGluZF9zZWFyY2hfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwl1OCBrX3JlZl90bWcsIGtfcmVmX3RtZ19tYXgsIGtfcmVmX3RtZ19taW47CisJdTMyIGNvYXJzZV9zcmF0ZTsKKwlpbnQgbG9jayA9IEZBTFNFLCBjb2Fyc2VfZmFpbCA9IEZBTFNFOworCXMzMiBkZW1vZF90aW1lb3V0ID0gNTAwLCBmZWNfdGltZW91dCA9IDUwLCBrcmVmX3RtZ19yZWcsIGZhaWxfY3B0LCBpLCBhZ2MyX292ZXJmbG93OworCXUxNiBhZ2MyX2ludGVncjsKKwl1OCBkc3RhdHVzMjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkgeworCQlrX3JlZl90bWdfbWF4ID0gMjMzOworCQlrX3JlZl90bWdfbWluID0gMTQzOworCX0gZWxzZSB7CisJCWtfcmVmX3RtZ19tYXggPSAxMjA7CisJCWtfcmVmX3RtZ19taW4gPSAzMDsKKwl9CisKKwlhZ2MyX2ludGVnciA9IHN0djA5MDBfYmxpbmRfY2hlY2tfYWdjMl9taW5fbGV2ZWwoaV9wYXJhbXMsIGRlbW9kKTsKKworCWlmIChhZ2MyX2ludGVnciA+IFNUVjA5MDBfQkxJTkRfU0VBUkNIX0FHQzJfVEgpIHsKKwkJbG9jayA9IEZBTFNFOworCisJfSBlbHNlIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxFWFAsIDB4QUEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4NTUpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSQ0ZHLCAweEM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVENTMiwgMHg0NCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRkZFQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKworCQkJa3JlZl90bWdfcmVnID0gUjA5MDBfUDFfS1JFRlRNRzsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxFWFAsIDB4QUEpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4NTUpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSQ0ZHLCAweEM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg0NCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VRVUFMQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRkZFQ0ZHLCAweDQxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKworCQkJa3JlZl90bWdfcmVnID0gUjA5MDBfUDJfS1JFRlRNRzsKKwkJCWJyZWFrOworCQl9CisKKwkJa19yZWZfdG1nID0ga19yZWZfdG1nX21heDsKKworCQlkbyB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywga3JlZl90bWdfcmVnLCBrX3JlZl90bWcpOworCQkJaWYgKHN0djA5MDBfc2VhcmNoX3NyYXRlX2NvYXJzZShmZSkgIT0gMCkgeworCQkJCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfc2VhcmNoX3NyYXRlX2ZpbmUoZmUpOworCisJCQkJaWYgKGNvYXJzZV9zcmF0ZSAhPSAwKSB7CisJCQkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBjb2Fyc2Vfc3JhdGUsIFNUVjA5MDBfQkxJTkRfU0VBUkNIKTsKKwkJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0KTsKKwkJCQl9IGVsc2UKKwkJCQkJbG9jayA9IEZBTFNFOworCQkJfSBlbHNlIHsKKwkJCQlmYWlsX2NwdCA9IDA7CisJCQkJYWdjMl9vdmVyZmxvdyA9IDA7CisKKwkJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQkJZGVmYXVsdDoKKwkJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQkJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkKKwkJCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTApOworCisJCQkJCQlpZiAoYWdjMl9pbnRlZ3IgPj0gMHhmZjAwKQorCQkJCQkJCWFnYzJfb3ZlcmZsb3crKzsKKworCQkJCQkJZHN0YXR1czIgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9EU1RBVFVTMik7CisKKwkJCQkJCWlmICgoKGRzdGF0dXMyICYgMHgxKSA9PSAweDEpICYmICgoZHN0YXR1czIgPj4gNykgPT0gMSkpCisJCQkJCQkJZmFpbF9jcHQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCQkJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMSkgPDwgOCkKKwkJCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTApOworCisJCQkJCQlpZiAoYWdjMl9pbnRlZ3IgPj0gMHhmZjAwKQorCQkJCQkJCWFnYzJfb3ZlcmZsb3crKzsKKworCQkJCQkJZHN0YXR1czIgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9EU1RBVFVTMik7CisKKwkJCQkJCWlmICgoKGRzdGF0dXMyICYgMHgxKSA9PSAweDEpICYmICgoZHN0YXR1czIgPj4gNykgPT0gMSkpCisJCQkJCQkJZmFpbF9jcHQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoKGZhaWxfY3B0ID4gNykgfHwgKGFnYzJfb3ZlcmZsb3cgPiA3KSkKKwkJCQkJY29hcnNlX2ZhaWwgPSBUUlVFOworCisJCQkJbG9jayA9IEZBTFNFOworCQkJfQorCQkJa19yZWZfdG1nIC09IDMwOworCQl9IHdoaWxlICgoa19yZWZfdG1nID49IGtfcmVmX3RtZ19taW4pICYmIChsb2NrID09IEZBTFNFKSAmJiAoY29hcnNlX2ZhaWwgPT0gRkFMU0UpKTsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3Eoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiB2dGhfcmVnOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHZ0aF9yZWcsIFIwOTAwX1AxX1ZUSDEyLCBSMDkwMF9QMl9WVEgxMik7CisKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDk2KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDY0KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDM2KTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDIzKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDFFKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgdnRoX3JlZysrLCAweDE5KTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfc2VhcmNoX3N0YW5kYXJkKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCWludCBzc3RuZHJkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzc3RuZHJkID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZDsKKwlpZiAoZGVtb2QgPT0gMSkKKwkJc3N0bmRyZCA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkOworCisJc3dpdGNoIChzc3RuZHJkKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFZCUzFcbiIpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFNTXG4iKTsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQlicmVhazsKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gRFZCUzJcbiIpOworCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJTZWFyY2ggU3RhbmRhcmQgPSBBVVRPXG4iKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDEsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUjJDRkcsIDB4MjIpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywKKwkJCQkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQsCisJCQkJCQlpX3BhcmFtcy0+ZG1kMV9mZWMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkKKwkJCQkJc3R2MDkwMF9zdG9wX2FsbF9zMl9tb2Rjb2QoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCisJCQl9IGVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQxLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkgeworCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKQorCQkJCQlzdHYwOTAwX3N0b3BfYWxsX3MyX21vZGNvZChpX3BhcmFtcywgZGVtb2QpOworCQkJCWVsc2UKKwkJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCX0gZWxzZQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlID49IDIwMDAwMDApCisJCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQsIGlfcGFyYW1zLT5kbWQxX2ZlYywgZGVtb2QpOworCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQyLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVIyQ0ZHLCAweDIyKTsKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCwgaV9wYXJhbXMtPmRtZDJfZmVjLCBkZW1vZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQyLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVIyQ0ZHLCAweDI2KTsKKwkJCWlmIChpX3BhcmFtcy0+ZGVtb2RfbW9kZSAhPSBTVFYwOTAwX1NJTkdMRSkKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPj0gMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQsIGlfcGFyYW1zLT5kbWQyX2ZlYywgZGVtb2QpOworCisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCX0KK30KKworZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBkZW1vZF90aW1lb3V0ID0gNTAwLCBmZWNfdGltZW91dCA9IDUwLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkOworCisJaW50IGxvY2sgPSBGQUxTRSwgbG93X3NyID0gRkFMU0U7CisKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PQ0FSUklFUjsKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28gYWxnbzsKKwlpbnQgbm9fc2lnbmFsID0gRkFMU0U7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlhbGdvID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlNUX0hXQVJFLCAxKTsKKwkJc3RyZWFtX21lcmdlcl9maWVsZCA9IEYwOTAwX1AxX1JTVF9IV0FSRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDVDKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsIDB4OWUpOworCQllbHNlCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDg4KTsKKworCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IDIgKiAzNjAwMDAwMDsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRzIsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRywgMHhkMik7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDIwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTE1BTlQsIDB4NjMpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxNQU5ULCAweDcwKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfS1JFRlRNRywgMHg1YSk7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMDsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0tSRUZUTUcsIDB4YzEpOworCQkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSAoMTUgKiAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMCkpIC8gMTA7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcyLCAweDAxKTsKKworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPj0gMTAwMDAwMDApCisJCQkJbG93X3NyID0gRkFMU0U7CisJCQllbHNlCisJCQkJbG93X3NyID0gVFJVRTsKKworCQl9CisKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGlfcGFyYW1zLT50dW5lcjFfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wsIGlfcGFyYW1zLT5kbWQxX3NyY2hfaXFfaW52KTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiwgMSk7CisKKwkJc3R2MDkwMF9zZXRfc2VhcmNoX3N0YW5kYXJkKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyAhPSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCXN0djA5MDBfc3RhcnRfc2VhcmNoKGlfcGFyYW1zLCBkZW1vZCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlhbGdvID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlNUX0hXQVJFLCAxKTsKKworCQlzdHJlYW1fbWVyZ2VyX2ZpZWxkID0gRjA5MDBfUDJfUlNUX0hXQVJFOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4NUMpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg5ZSk7CisJCWVsc2UKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsIDB4ODgpOworCisJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gMiAqIDM2MDAwMDAwOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHMiwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMTUFOVCwgMHg3MCk7CisKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgMTAwMDAwMCwgZGVtb2QpOworCQl9IGVsc2UgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRFQwTSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHLCAweGQyKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMTUFOVCwgMHg2Myk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPj0gMTAwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDYwKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfS1JFRlRNRywgMHg1YSk7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQ09MRF9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsCisJCQkJCQkJaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDApKSAvIDEwOworCQkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCQkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsCisJCQkJCQkJaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9LUkVGVE1HLCAweGMxKTsKKwkJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gKDE1ICogKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwKKwkJCQkJCQkJCWlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDEpOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA+PSAxMDAwMDAwMCkKKwkJCQlsb3dfc3IgPSBGQUxTRTsKKwkJCWVsc2UKKwkJCQlsb3dfc3IgPSBUUlVFOworCisJCX0KKworCQlzdHYwOTAwX3NldF90dW5lcihmZSwgaV9wYXJhbXMtPnR1bmVyMl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIyX2J3KTsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NQRUNJTlZfQ09OVFJPTCwgaV9wYXJhbXMtPmRtZDJfc3JjaF9pcV9pbnYpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX01BTlVBTF9ST0xMT0ZGLCAxKTsKKworCQlzdHYwOTAwX3NldF9zZWFyY2hfc3RhbmRhcmQoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvICE9IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQkJc3R2MDkwMF9zdGFydF9zZWFyY2goaV9wYXJhbXMsIGRlbW9kKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTIpIHsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJbXNsZWVwKDMpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCX0KKworCWlmIChhbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKQorCQlsb2NrID0gc3R2MDkwMF9ibGluZF9zZWFyY2hfYWxnbyhmZSk7CisJZWxzZSBpZiAoYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpCisJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9jb2xkX2xvY2soZmUsIGRlbW9kX3RpbWVvdXQpOworCWVsc2UgaWYgKGFsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQpOworCisJaWYgKChsb2NrID09IEZBTFNFKSAmJiAoYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpKSB7CisJCWlmIChsb3dfc3IgPT0gRkFMU0UpIHsKKwkJCWlmIChzdHYwOTAwX2NoZWNrX3RpbWluZ19sb2NrKGlfcGFyYW1zLCBkZW1vZCkgPT0gVFJVRSkKKwkJCQlsb2NrID0gc3R2MDkwMF9zd19hbGdvKGlfcGFyYW1zLCBkZW1vZCk7CisJCX0KKwl9CisKKwlpZiAobG9jayA9PSBUUlVFKQorCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoZmUpOworCisJaWYgKChsb2NrID09IFRSVUUpICYmIChzaWduYWxfdHlwZSA9PSBTVFYwOTAwX1JBTkdFT0spKSB7CisJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJCWlmICgoc3R2MDkwMF9nZXRfc3RhbmRhcmQoZmUsIFNUVjA5MDBfREVNT0RfMSkgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkgJiYgKHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBTVFYwOTAwX0RFTU9EXzIpID09IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQpKSB7CisJCQkJbXNsZWVwKDIwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJCW1zbGVlcCgzKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCQl9CisJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgyMCkgeworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJCW1zbGVlcCgzKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQl9CisKKwkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGZlY190aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJbG9jayA9IFRSVUU7CisJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCWRlZmF1bHQ6CisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQkJCQlzdHYwOTAwX3NldF9kdmJzMl9yb2xsb2ZmKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9QREVMQ1RSTDIsIDB4NDApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUERFTENUUkwyLCAwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDY3KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NzUpOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GQkVSQ1BUNCwgMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwyLCAweGMxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRCkgeworCQkJCQlzdHYwOTAwX3NldF9kdmJzMl9yb2xsb2ZmKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9QREVMQ1RSTDIsIDB4NjApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUERFTENUUkwyLCAweDIwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDY3KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NzUpOworCQkJCX0KKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GQkVSQ1BUNCwgMCk7CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDIsIDB4YzEpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJbG9jayA9IEZBTFNFOworCQkJc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PREFUQTsKKwkJCW5vX3NpZ25hbCA9IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN3aXRjaCAoZGVtb2QpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJZGVmYXVsdDoKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKChzaWduYWxfdHlwZSA9PSBTVFYwOTAwX05PREFUQSkgJiYgKG5vX3NpZ25hbCA9PSBGQUxTRSkpIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQkJaWYgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSAmJgorCQkJCQkJKGlfcGFyYW1zLT5kbWQxX3NyY2hfaXFfaW52IDw9IFNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QpKQorCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZHZiczFfYWNxX3dvcmthcm91bmQoZmUpOworCQkJfSBlbHNlCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQkJaWYgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSAmJgorCQkJCQkJKGlfcGFyYW1zLT5kbWQyX3NyY2hfaXFfaW52IDw9IFNUVjA5MDBfSVFfQVVUT19OT1JNQUxfRklSU1QpKQorCQkJCQlzaWduYWxfdHlwZSA9IHN0djA5MDBfZHZiczFfYWNxX3dvcmthcm91bmQoZmUpOworCQkJfSBlbHNlCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzaWduYWxfdHlwZTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBlZmFjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBzdHY2MTEwLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjYxMTAgc2F0ZWxsaXRlIHR1bmVyIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgInN0djYxMTAuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RydWN0IHN0djYxMTBfcHJpdiB7CisJaW50IGkyY19hZGRyZXNzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCisJdTMyIG1jbGs7CisJdTggcmVnc1s4XTsKK307CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgczMyIGFic3N1YihzMzIgYSwgczMyIGIpCit7CisJaWYgKGEgPiBiKQorCQlyZXR1cm4gYSAtIGI7CisJZWxzZQorCQlyZXR1cm4gYiAtIGE7Cit9OworCitzdGF0aWMgaW50IHN0djYxMTBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfd3JpdGVfcmVncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggYnVmW10sCisJCQkJCQkJaW50IHN0YXJ0LCBpbnQgbGVuKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmM7CisJdTggY21kYnVmW2xlbiArIDFdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSBwcml2LT5pMmNfYWRkcmVzcywKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGNtZGJ1ZiwKKwkJLmxlbgk9IGxlbiArIDEKKwl9OworCisJZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChzdGFydCArIGxlbiA+IDgpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KCZjbWRidWZbMV0sIGJ1ZiwgbGVuKTsKKwljbWRidWZbMF0gPSBzdGFydDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpOworCWlmIChyYyAhPSAxKQorCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9yZWFkX3JlZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZ3NbXSwKKwkJCQkJCQlpbnQgc3RhcnQsIGludCBsZW4pCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCWludCByYzsKKwl1OCByZWdbXSA9IHsgc3RhcnQgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfd3IgPSB7CisJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSByZWcsCisJCS5sZW4JPSAxLAorCX07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dfcmQgPSB7CisJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCS5mbGFncwk9IEkyQ19NX1JELAorCQkuYnVmCT0gcmVncywKKwkJLmxlbgk9IGxlbiwKKwl9OworCS8qIHdyaXRlIHN1YmFkZHIgKi8KKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnX3dyLCAxKTsKKwlpZiAocmMgIT0gMSkKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwkvKiByZWFkIHJlZ2lzdGVycyAqLworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2dfcmQsIDEpOworCWlmIChyYyAhPSAxKQorCQlkcHJpbnRrKCIlczogaTJjIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJbWVtY3B5KCZwcml2LT5yZWdzW3N0YXJ0XSwgcmVncywgbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfcmVhZF9yZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBzdGFydCkKK3sKKwl1OCBidWZbXSA9IHsgMCB9OworCXN0djYxMTBfcmVhZF9yZWdzKGZlLCBidWYsIHN0YXJ0LCAxKTsKKworCXJldHVybiBidWZbMF07Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwl1OCByZWdbXSA9IHsgMCB9OworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgcmVnLCAwLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGNhcnJpZXJfd2lkdGgodTMyIHN5bWJvbF9yYXRlLCBmZV9yb2xsb2ZmX3Qgcm9sbG9mZikKK3sKKwl1MzIgcmxmOworCisJc3dpdGNoIChyb2xsb2ZmKSB7CisJY2FzZSBST0xMT0ZGXzIwOgorCQlybGYgPSAyMDsKKwkJYnJlYWs7CisJY2FzZSBST0xMT0ZGXzI1OgorCQlybGYgPSAyNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmxmID0gMzU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1ib2xfcmF0ZSAgKyAoKHN5bWJvbF9yYXRlICogcmxmKSAvIDEwMCk7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgYmFuZHdpZHRoKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCByOCwgcmV0ID0gMHgwNDsKKwlpbnQgaTsKKworCWlmICgoYmFuZHdpZHRoIC8gMikgPiAzNjAwMDAwMCkgLypCVy8yIG1heD0zMSs1PTM2IG1oeiBmb3Igcjg9MzEqLworCQlyOCA9IDMxOworCWVsc2UgaWYgKChiYW5kd2lkdGggLyAyKSA8IDUwMDAwMDApIC8qIEJXLzIgbWluPTVNaHogZm9yIEY9MCAqLworCQlyOCA9IDA7CisJZWxzZSAvKmlmIDUgPCBCVy8yIDwgMzYqLworCQlyOCA9IChiYW5kd2lkdGggLyAyKSAvIDEwMDAwMDAgLSA1OworCisJLyogY3RybDMsIFJDQ0xLT0ZGID0gMCBBY3RpdmF0ZSB0aGUgY2FsaWJyYXRpb24gQ2xvY2sgKi8KKwkvKiBjdHJsMywgQ0YgPSByOCBTZXQgdGhlIExQRiB2YWx1ZSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdICY9IH4oKDEgPDwgNikgfCAweDFmKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSB8PSAocjggJiAweDFmKTsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSwgUlNUVjYxMTBfQ1RSTDMsIDEpOworCS8qIHN0YXQxLCBDQUxSQ1NUUlQgPSAxIFN0YXJ0IExQRiBhdXRvIGNhbGlicmF0aW9uKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1NUQVQxXSB8PSAweDAyOworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfU1RBVDFdLCBSU1RWNjExMF9TVEFUMSwgMSk7CisKKwlpID0gMDsKKwkvKiBXYWl0IGZvciBDQUxSQ1NUUlQgPT0gMCAqLworCXdoaWxlICgoaSA8IDEwKSAmJiAocmV0ICE9IDApKSB7CisJCXJldCA9ICgoc3R2NjExMF9yZWFkX3JlZyhmZSwgUlNUVjYxMTBfU1RBVDEpKSAmIDB4MDIpOworCQltZGVsYXkoMSk7CS8qIHdhaXQgZm9yIExQRiBhdXRvIGNhbGlicmF0aW9uICovCisJCWkrKzsKKwl9CisKKwkvKiBSQ0NMS09GRiA9IDEgY2FsaWJyYXRpb24gZG9uZSwgZGVzYWN0aXZhdGUgdGhlIGNhbGlicmF0aW9uIENsb2NrICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10gfD0gKDEgPDwgNik7CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10sIFJTVFY2MTEwX0NUUkwzLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXU4IGJ1ZjBbXSA9IHsgMHgwNywgMHgxMSwgMHhkYywgMHg4NSwgMHgxNywgMHgwMSwgMHhlNiwgMHgxZSB9OworCisJbWVtY3B5KHByaXYtPnJlZ3MsIGJ1ZjAsIDgpOworCS8qIEsgPSAoUmVmZXJlbmNlIC8gMTAwMDAwMCkgLSAxNiAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdICY9IH4oMHgxZiA8PCAzKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSB8PQorCQkJCSgoKChwcml2LT5tY2xrIC8gMTAwMDAwMCkgLSAxNikgJiAweDFmKSA8PCAzKTsKKworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdLCBSU1RWNjExMF9DVFJMMSwgOCk7CisJbXNsZWVwKDEpOworCXN0djYxMTBfc2V0X2JhbmR3aWR0aChmZSwgNzIwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTMyIG5ic3RlcHMsIGRpdmlkZXIsIHBzZDIsIGZyZXE7CisJdTggcmVnc1tdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisKKwlzdHY2MTEwX3JlYWRfcmVncyhmZSwgcmVncywgMCwgOCk7CisJLypOKi8KKwlkaXZpZGVyID0gKHByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJiAweDBmKSA8PCA4OworCWRpdmlkZXIgKz0gcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcxXTsKKworCS8qUiovCisJbmJzdGVwcyAgPSAocHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSA+PiA2KSAmIDM7CisJLypwKi8KKwlwc2QyICA9IChwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdID4+IDQpICYgMTsKKworCWZyZXEgPSBkaXZpZGVyICogKHByaXYtPm1jbGsgLyAxMDAwKTsKKwlmcmVxIC89ICgxIDw8IChuYnN0ZXBzICsgcHNkMikpOworCWZyZXEgLz0gNDsKKworCSpmcmVxdWVuY3kgPSBmcmVxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5KQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwl1OCByZXQgPSAweDA0OworCXUzMiBkaXZpZGVyLCByZWYsIHAsIHByZXNjLCBpLCByZXN1bHRfZnJlcSwgdmNvX2ZyZXE7CisJczMyIHBfY2FsYywgcF9jYWxjX29wdCA9IDEwMDAsIHJfZGl2LCByX2Rpdl9vcHQgPSAwLCBwX3ZhbDsKKwlzMzIgc3JhdGU7IHU4IGdhaW47CisKKwlkcHJpbnRrKCIlcywgZnJlcT0lZCBrSHosIG1jbGs9JWQgSHpcbiIsIF9fZnVuY19fLAorCQkJCQkJZnJlcXVlbmN5LCBwcml2LT5tY2xrKTsKKworCS8qIEsgPSAoUmVmZXJlbmNlIC8gMTAwMDAwMCkgLSAxNiAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdICY9IH4oMHgxZiA8PCAzKTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSB8PQorCQkJCSgoKChwcml2LT5tY2xrIC8gMTAwMDAwMCkgLSAxNikgJiAweDFmKSA8PCAzKTsKKworCS8qIEJCX0dBSU4gPSBkYi8yICovCisJaWYgKGZlLT5vcHMuc2V0X3Byb3BlcnR5ICYmIGZlLT5vcHMuZ2V0X3Byb3BlcnR5KSB7CisJCXNyYXRlID0gYy0+c3ltYm9sX3JhdGU7CisJCWRwcmludGsoIiVzOiBHZXQgRnJvbnRlbmQgcGFyYW1ldGVyczogc3JhdGU9JWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHNyYXRlKTsKKwl9IGVsc2UKKwkJc3JhdGUgPSAxNTAwMDAwMDsKKworCWlmIChzcmF0ZSA+PSAxNTAwMDAwMCkKKwkJZ2FpbiA9IDM7IC8qICs2IGRCICovCisJZWxzZSBpZiAoc3JhdGUgPj0gNTAwMDAwMCkKKwkJZ2FpbiA9IDM7IC8qICs2IGRCICovCisJZWxzZQorCQlnYWluID0gMzsgLyogKzYgZEIgKi8KKworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdICY9IH4weDBmOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDJdIHw9IChnYWluICYgMHgwZik7CisKKwlpZiAoZnJlcXVlbmN5IDw9IDEwMjMwMDApIHsKKwkJcCA9IDE7CisJCXByZXNjID0gMDsKKwl9IGVsc2UgaWYgKGZyZXF1ZW5jeSA8PSAxMzAwMDAwKSB7CisJCXAgPSAxOworCQlwcmVzYyA9IDE7CisJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMjA0NjAwMCkgeworCQlwID0gMDsKKwkJcHJlc2MgPSAwOworCX0gZWxzZSB7CisJCXAgPSAwOworCQlwcmVzYyA9IDE7CisJfQorCS8qIERJVjRTRUwgPSBwKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4oMSA8PCA0KTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9IChwIDw8IDQpOworCisJLyogUFJFU0MzMk9OID0gcHJlc2MgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4oMSA8PCA1KTsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdIHw9IChwcmVzYyA8PCA1KTsKKworCXBfdmFsID0gKGludCkoMSA8PCAocCArIDEpKSAqIDEwOy8qIFAgPSAyIG9yIFAgPSA0ICovCisJZm9yIChyX2RpdiA9IDA7IHJfZGl2IDw9IDM7IHJfZGl2KyspIHsKKwkJcF9jYWxjID0gKHByaXYtPm1jbGsgLyAxMDAwMDApOworCQlwX2NhbGMgLz0gKDEgPDwgKHJfZGl2ICsgMSkpOworCQlpZiAoKGFic3N1YihwX2NhbGMsIHBfdmFsKSkgPCAoYWJzc3ViKHBfY2FsY19vcHQsIHBfdmFsKSkpCisJCQlyX2Rpdl9vcHQgPSByX2RpdjsKKworCQlwX2NhbGNfb3B0ID0gKHByaXYtPm1jbGsgLyAxMDAwMDApOworCQlwX2NhbGNfb3B0IC89ICgxIDw8IChyX2Rpdl9vcHQgKyAxKSk7CisJfQorCisJcmVmID0gcHJpdi0+bWNsayAvICgoMSA8PCAocl9kaXZfb3B0ICsgMSkpICAqICgxIDw8IChwICsgMSkpKTsKKwlkaXZpZGVyID0gKCgoZnJlcXVlbmN5ICogMTAwMCkgKyAocmVmID4+IDEpKSAvIHJlZik7CisKKwkvKiBSRElWID0gcl9kaXZfb3B0ICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmPSB+KDMgPDwgNik7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAoKChyX2Rpdl9vcHQpICYgMykgPDwgNik7CisKKwkvKiBORElWX01TQiA9IE1TQihkaXZpZGVyKSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJj0gfjB4MGY7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAoKChkaXZpZGVyKSA+PiA4KSAmIDB4MGYpOworCisJLyogTkRJVl9MU0IsIExTQihkaXZpZGVyKSAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMV0gPSAoZGl2aWRlciAmIDB4ZmYpOworCisJLyogQ0FMVkNPU1RSVCA9IDEgVkNPIEF1dG8gQ2FsaWJyYXRpb24gKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1NUQVQxXSB8PSAweDA0OworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDFdLAorCQkJCQkJUlNUVjYxMTBfQ1RSTDEsIDgpOworCisJaSA9IDA7CisJLyogV2FpdCBmb3IgQ0FMVkNPU1RSVCA9PSAwICovCisJd2hpbGUgKChpIDwgMTApICYmIChyZXQgIT0gMCkpIHsKKwkJcmV0ID0gKChzdHY2MTEwX3JlYWRfcmVnKGZlLCBSU1RWNjExMF9TVEFUMSkpICYgMHgwNCk7CisJCW1zbGVlcCgxKTsgLyogd2FpdCBmb3IgVkNPIGF1dG8gY2FsaWJyYXRpb24gKi8KKwkJaSsrOworCX0KKworCXJldCA9IHN0djYxMTBfcmVhZF9yZWcoZmUsIFJTVFY2MTEwX1NUQVQxKTsKKwlzdHY2MTEwX2dldF9mcmVxdWVuY3koZmUsICZyZXN1bHRfZnJlcSk7CisKKwl2Y29fZnJlcSA9IGRpdmlkZXIgKiAoKHByaXYtPm1jbGsgLyAxMDAwKSAvICgoMSA8PCAocl9kaXZfb3B0ICsgMSkpKSk7CisJZHByaW50aygiJXMsIHN0YXQxPSV4LCBsb19mcmVxPSVkIGtIeiwgdmNvX2ZyZWM9JWQga0h6XG4iLCBfX2Z1bmNfXywKKwkJCQkJCXJldCwgcmVzdWx0X2ZyZXEsIHZjb19mcmVxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOworCXUzMiBiYW5kd2lkdGggPSBjYXJyaWVyX3dpZHRoKGMtPnN5bWJvbF9yYXRlLCBjLT5yb2xsb2ZmKTsKKworCXN0djYxMTBfc2V0X2ZyZXF1ZW5jeShmZSwgYy0+ZnJlcXVlbmN5KTsKKwlzdHY2MTEwX3NldF9iYW5kd2lkdGgoZmUsIGJhbmR3aWR0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX2dldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCByOCA9IDA7CisJdTggcmVnc1tdID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisJc3R2NjExMF9yZWFkX3JlZ3MoZmUsIHJlZ3MsIDAsIDgpOworCisJLyogQ0YgKi8KKwlyOCA9IHByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdICYgMHgxZjsKKwkqYmFuZHdpZHRoID0gKHI4ICsgNSkgKiAyMDAwMDAwOy8qIHgyIGZvciBaSUYgdHVuZXIgQlcvMiA9IEYrNSBNaHogKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgc3R2NjExMF90dW5lcl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIlNUIFNUVjYxMTAiLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXAgPSAxMDAwLAorCX0sCisJLmluaXQgPSBzdHY2MTEwX2luaXQsCisJLnJlbGVhc2UgPSBzdHY2MTEwX3JlbGVhc2UsCisJLnNsZWVwID0gc3R2NjExMF9zbGVlcCwKKwkuc2V0X3BhcmFtcyA9IHN0djYxMTBfc2V0X3BhcmFtcywKKwkuZ2V0X2ZyZXF1ZW5jeSA9IHN0djYxMTBfZ2V0X2ZyZXF1ZW5jeSwKKwkuc2V0X2ZyZXF1ZW5jeSA9IHN0djYxMTBfc2V0X2ZyZXF1ZW5jeSwKKwkuZ2V0X2JhbmR3aWR0aCA9IHN0djYxMTBfZ2V0X2JhbmR3aWR0aCwKKwkuc2V0X2JhbmR3aWR0aCA9IHN0djYxMTBfc2V0X2JhbmR3aWR0aCwKKworfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2NjExMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWNvbnN0IHN0cnVjdCBzdHY2MTEwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCByZWcwW10gPSB7IDB4MDAsIDB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWUgfTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7CisJCQkuYWRkciA9IGNvbmZpZy0+aTJjX2FkZHJlc3MsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmJ1ZiA9IHJlZzAsCisJCQkubGVuID0gOQorCQl9CisJfTsKKwlpbnQgcmV0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMsIG1zZywgMSk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3R2NjExMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5pMmNfYWRkcmVzcyA9IGNvbmZpZy0+aTJjX2FkZHJlc3M7CisJcHJpdi0+aTJjID0gaTJjOworCXByaXYtPm1jbGsgPSBjb25maWctPm1jbGs7CisKKwltZW1jcHkoJnByaXYtPnJlZ3MsICZyZWcwWzFdLCA4KTsKKworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZzdHY2MTEwX3R1bmVyX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1RWNjExMCBhdHRhY2hlZCBvbiBhZGRyPSV4IVxuIiwgcHJpdi0+aTJjX2FkZHJlc3MpOworCisJcmV0dXJuIGZlOworfQorRVhQT1JUX1NZTUJPTChzdHY2MTEwX2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTVCBTVFY2MTEwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDMxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBzdHY2MTEwLmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjYxMTAgc2F0ZWxsaXRlIHR1bmVyIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0RWQl9TVFY2MTEwX0hfXworI2RlZmluZSBfX0RWQl9TVFY2MTEwX0hfXworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKy8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBSU1RWNjExMF9DVFJMMQkJMAorI2RlZmluZSBSU1RWNjExMF9DVFJMMgkJMQorI2RlZmluZSBSU1RWNjExMF9UVU5JTkcxCTIKKyNkZWZpbmUgUlNUVjYxMTBfVFVOSU5HMgkzCisjZGVmaW5lIFJTVFY2MTEwX0NUUkwzCQk0CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQxCQk1CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQyCQk2CisjZGVmaW5lIFJTVFY2MTEwX1NUQVQzCQk3CisKK3N0cnVjdCBzdHY2MTEwX2NvbmZpZyB7CisJdTggaTJjX2FkZHJlc3M7CisJdTMyIG1jbGs7CisJaW50IGlxX3dpcmluZzsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1RWNjExMCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9TVFY2MTEwX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHY2MTEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJY29uc3Qgc3RydWN0IHN0djYxMTBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djYxMTBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCmluZGV4IDE0NjVmZjcuLjQ5ODFjZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlpZiAocmV0ICE9IDIpIHsKIAkJZHByaW50aygiJXM6IGVycm9yIHJlZz0weCV4LCByZXQ9JWlcbiIsIF9fZnVuY19fLCByZWcsCiAJCQlyZXQpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWRwcmludGsoIiVzOiBzdWNjZXNzIHJlZz0weCV4LCBkYXRhPTB4JXgsIHJldD0laVxuIiwgX19mdW5jX18sCkBAIC00ODEsMTYgKzQ4MSwxOCBAQAogc3RhdGljIGludCB0ZGExMDA0Nl9md3VwbG9hZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdHJ1Y3QgdGRhMTAwNHhfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBjb25mYzQ7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAogCS8qIHJlc2V0ICsgd2FrZSB1cCBjaGlwICovCiAJaWYgKHN0YXRlLT5jb25maWctPnh0YWxfZnJlcSA9PSBUREExMDA0Nl9YVEFMXzRNKSB7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDApOworCQljb25mYzQgPSAwOwogCX0gZWxzZSB7CiAJCWRwcmludGsoIiVzOiAxNk1IeiBYdGFsLCByZWR1Y2luZyBJMkMgc3BlZWRcbiIsIF9fZnVuY19fKTsKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgMHg4MCk7CisJCWNvbmZjNCA9IDB4ODA7CiAJfQorCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIGNvbmZjNCk7CisKIAl0ZGExMDA0eF93cml0ZV9tYXNrKHN0YXRlLCBUREExMDA0NkhfQ09ORl9UUklTVEFURTEsIDEsIDApOwogCS8qIHNldCBHUElPIDEgYW5kIDMgKi8KIAlpZiAoc3RhdGUtPmNvbmZpZy0+Z3Bpb19jb25maWcgIT0gVERBMTAwNDZfR1BUUkkpIHsKQEAgLTUwOCwxMyArNTEwLDI5IEBACiAJaWYgKHRkYTEwMDR4X2NoZWNrX3VwbG9hZF9vayhzdGF0ZSkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAgIEZvciBpMmMgbm9ybWFsIHdvcmssIHdlIG5lZWQgdG8gc2xvdyBkb3duIHRoZSBidXMgc3BlZWQuCisJICAgSG93ZXZlciwgdGhlIHNsb3cgZG93biBicmVha3MgdGhlIGVlcHJvbSBmaXJtd2FyZSBsb2FkLgorCSAgIFNvLCB1c2Ugbm9ybWFsIHNwZWVkIGZvciBlZXByb20gYm9vdGluZyBhbmQgdGhlbiByZXN0b3JlIHRoZQorCSAgIGkyYyBzcGVlZCBhZnRlciB0aGF0LiBUZXN0ZWQgd2l0aCBNU0kgVFYgQG55d2FyZSBBL0QgYm9hcmQsCisJICAgdGhhdCBjb21lcyB3aXRoIGZpcm13YXJlIHZlcnNpb24gMjkgaW5zaWRlIHRoZWlyIGVlcHJvbS4KKworCSAgIEl0IHNob3VsZCBhbHNvIGJlIG5vdGljZWQgdGhhdCBubyBvdGhlciBJMkMgdHJhbnNmZXIgc2hvdWxkCisJICAgYmUgaW4gY291cnNlIHdoaWxlIGJvb3RpbmcgZnJvbSBlZXByb20sIG90aGVyd2lzZSwgdGRhMTAwNDYKKwkgICBnb2VzIGludG8gYW4gaW5zdGFibGUgc3RhdGUuIFNvLCBwcm9wZXIgbG9ja2luZyBhcmUgbmVlZGVkCisJICAgYXQgdGhlIGkyYyBidXMgbWFzdGVyLgorCSAqLwogCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiB0cnlpbmcgdG8gYm9vdCBmcm9tIGVlcHJvbVxuIik7Ci0JdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCA0LCA0KTsKKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCA0KTsKIAltc2xlZXAoMzAwKTsKLQkvKiBkb24ndCByZS11cGxvYWQgdW5sZXNzIG5lY2Vzc2FyeSAqLworCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIGNvbmZjNCk7CisKKwkvKiBDaGVja3MgaWYgZWVwcm9tIGZpcm13YXJlIHdlbnQgd2l0aG91dCB0cm91YmxlcyAqLwogCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUpID09IDApCiAJCXJldHVybiAwOwogCisJLyogZWVwcm9tIGZpcm13YXJlIGRpZG4ndCB3b3JrLiBMb2FkIG9uZSBtYW51YWxseS4gKi8KKwogCWlmIChzdGF0ZS0+Y29uZmlnLT5yZXF1ZXN0X2Zpcm13YXJlICE9IE5VTEwpIHsKIAkJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayB1bnRpbCBzb21lb25lIHVwbG9hZHMgaXQgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyAidGRhMTAwNHg6IHdhaXRpbmcgZm9yIGZpcm13YXJlIHVwbG9hZC4uLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjJhMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYwpAQCAtMCwwICsxLDUxOSBAQAorLyoqCisgKiBEcml2ZXIgZm9yIFphcmxpbmsgemwxMDAzNiBEVkItUyBzaWxpY29uIHR1bmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbm8gUmVpY2hhcmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBNYXR0aGlhcyBTY2h3YXJ6b3R0IDx6emFtQGdlbnRvby5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoqCisgKiBUaGUgZGF0YSBzaGVldCBmb3IgdGhpcyB0dW5lciBjYW4gYmUgZm91bmQgYXQ6CisgKiAgICBodHRwOi8vd3d3Lm1jbWlsay5kZS9wcm9qZWN0cy9kdmItY2FyZC9kYXRhc2hlZXRzL1pMMTAwMzYucGRmCisgKgorICogVGhpcyBvbmUgaXMgd29ya2luZzogKGF0IG15IEF2ZXJtZWRpYSBEVkItUyBQcm8pCisgKiAtIHpsMTAwMzYgKDQwcGluLCBGVEEpCisgKgorICogQSBkcml2ZXIgZm9yIHpsMTAwMzggc2hvdWxkIGJlIHZlcnkgc2ltaWxhci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpbmNsdWRlICJ6bDEwMDM2LmgiCisKK3N0YXRpYyBpbnQgemwxMDAzNl9kZWJ1ZzsKKyNkZWZpbmUgZHByaW50ayhsZXZlbCwgYXJncy4uLikgXAorCWRvIHsgaWYgKHpsMTAwMzZfZGVidWcgJiBsZXZlbCkgcHJpbnRrKEtFUk5fREVCVUcgInpsMTAwMzY6ICIgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl9pMmMoYXJncy4uLikgIGRwcmludGsoMHgwMiwgYXJncykKKworc3RydWN0IHpsMTAwMzZfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCWNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnOworCXUzMiBmcmVxdWVuY3k7CisJdTggYnIsIGJmOworfTsKKworCisvKiBUaGlzIGRyaXZlciBhc3N1bWVzIHRoZSB0dW5lciBpcyBkcml2ZW4gYnkgYSAxMC4xMTFNSHogQ3Jpc3RhbCAqLworI2RlZmluZSBfWFRBTCAxMDExMQorCisvKiBTb21lIG9mIHRoZSBwb3NzaWJsZSBkaXZpZGVyczoKKyAqICAgNjQsICh3cml0ZSAweDA1IHRvIHJlZyksIGZyZXEgc3RlcCBzaXplICAgMTU4a0h6CisgKiAgIDEwLCAod3JpdGUgMHgwYSB0byByZWcpLCBmcmVxIHN0ZXAgc2l6ZSAxLjAxMWtIeiAodXNlZCBoZXJlKQorICogICAgNSwgKHdyaXRlIDB4MDkgdG8gcmVnKSwgZnJlcSBzdGVwIHNpemUgMi4wMjJrSHoKKyAqLworCisjZGVmaW5lIF9SRElWIDEwCisjZGVmaW5lIF9SRElWX1JFRyAweDBhCisjZGVmaW5lIF9GUiAgIChfWFRBTC9fUkRJVikKKworI2RlZmluZSBTVEFUVVNfUE9SIDB4ODAgLyogUG93ZXIgb24gUmVzZXQgKi8KKyNkZWZpbmUgU1RBVFVTX0ZMICAweDQwIC8qIEZyZXF1ZW5jeSAmIFBoYXNlIExvY2sgKi8KKworLyogcmVhZC93cml0ZSBmb3IgemwxMDAzNiBhbmQgemwxMDAzOCAqLworCitzdGF0aWMgaW50IHpsMTAwMzZfcmVhZF9zdGF0dXNfcmVnKHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSkKK3sKKwl1OCBzdGF0dXM7CisJc3RydWN0IGkyY19tc2cgbXNnWzFdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+dHVuZXJfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsCisJCSAgLmJ1ZiA9ICZzdGF0dXMsIC5sZW4gPSBzaXplb2Yoc3RhdHVzKSB9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMSkgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgcmVhZCBmYWlsZWQgYXQgYWRkcj0lMDJ4XG4iLAorCQkJX19mdW5jX18sIHN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZWJfaTJjKCJSKHN0YXR1cyk6ICUwMnggIFtGTD0lZF1cbiIsIHN0YXR1cywKKwkJKHN0YXR1cyAmIFNUQVRVU19GTCkgPyAxIDogMCk7CisJaWYgKHN0YXR1cyAmIFNUQVRVU19QT1IpCisJCWRlYl9pbmZvKCIlczogUG93ZXItT24tUmVzZXQgYml0IGVuYWJsZWQgLSAiCisJCQkibmVlZCB0byBpbml0aWFsaXplIHRoZSB0dW5lclxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3dyaXRlKHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSwgdTggYnVmW10sIHU4IGNvdW50KQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIC5mbGFncyA9IDAsCisJCSAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IGNvdW50IH0sCisJfTsKKwl1OCByZWcgPSAwOworCWludCByZXQ7CisKKwlpZiAoemwxMDAzNl9kZWJ1ZyAmIDB4MDIpIHsKKwkJLyogZXZlcnkgOGJpdC12YWx1ZSBzYXRpc2lmZXMgdGhpcyEKKwkJICogc28gb25seSBjaGVjayBmb3IgZGVidWcgbG9nICovCisJCWlmICgoYnVmWzBdICYgMHg4MCkgPT0gMHgwMCkKKwkJCXJlZyA9IDI7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGMwKSA9PSAweDgwKQorCQkJcmVnID0gNDsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjApID09IDB4YzApCisJCQlyZWcgPSA2OworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhkMCkKKwkJCXJlZyA9IDg7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGYwKSA9PSAweGUwKQorCQkJcmVnID0gMTA7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGYwKSA9PSAweGYwKQorCQkJcmVnID0gMTI7CisKKwkJZGViX2kyYygiVyglZCk6IiwgcmVnKTsKKwkJeworCQkJaW50IGk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGJ1ZltpXSk7CisJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQl9CisJfQorCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyBlcnJvciwgcmV0PSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCWtmcmVlKHN0YXRlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJdTggYnVmW10gPSB7IDB4ZjAsIDB4ODAgfTsgLyogcmVncyAxMi8xMyAqLworCWludCByZXQ7CisKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcmVnaXN0ZXIgbWFwIG9mIHRoZSBaTDEwMDM2L1pMMTAwMzgKKyAqCisgKiByZWdbZGVmYXVsdF0gY29udGVudAorICogIDJbMHgwMF06ICAgMCB8IE4xNCB8IE4xMyB8IE4xMiB8IE4xMSB8IE4xMCB8ICBOOSB8ICBOOAorICogIDNbMHgwMF06ICBONyB8ICBONiB8ICBONSB8ICBONCB8ICBOMyB8ICBOMiB8ICBOMSB8ICBOMAorICogIDRbMHg4MF06ICAgMSB8ICAgMCB8IFJGRyB8IEJBMSB8IEJBMCB8IEJHMSB8IEJHMCB8IExFTgorICogIDVbMHgwMF06ICBQMCB8ICBDMSB8ICBDMCB8ICBSNCB8ICBSMyB8ICBSMiB8ICBSMSB8ICBSMAorICogIDZbMHhjMF06ICAgMSB8ICAgMSB8ICAgMCB8ICAgMCB8IFJTRCB8ICAgMCB8ICAgMCB8ICAgMAorICogIDdbMHgyMF06ICBQMSB8IEJGNiB8IEJGNSB8IEJGNCB8IEJGMyB8IEJGMiB8IEJGMSB8ICAgMAorICogIDhbMHhkYl06ICAgMSB8ICAgMSB8ICAgMCB8ICAgMSB8ICAgMCB8ICBDQyB8ICAgMSB8ICAgMQorICogIDlbMHgzMF06IFZTRCB8ICBWMiB8ICBWMSB8ICBWMCB8ICBTMyB8ICBTMiB8ICBTMSB8ICBTMAorICogMTBbMHhlMV06ICAgMSB8ICAgMSB8ICAgMSB8ICAgMCB8ICAgMCB8IExTMiB8IExTMSB8IExTMAorICogMTFbMHhmNV06ICBXUyB8IFdIMiB8IFdIMSB8IFdIMCB8IFdMMiB8IFdMMSB8IFdMMCB8IFdSRQorICogMTJbMHhmMF06ICAgMSB8ICAgMSB8ICAgMSB8ICAgMSB8ICAgMCB8ICAgMCB8ICAgMCB8ICAgMAorICogMTNbMHgyOF06ICBQRCB8IEJSNCB8IEJSMyB8IEJSMiB8IEJSMSB8IEJSMCB8IENMUiB8ICBUTAorICovCisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfZnJlcXVlbmN5KHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSwgdTMyIGZyZXF1ZW5jeSkKK3sKKwl1OCBidWZbMl07CisJdTMyIGRpdiwgZm9mZnNldDsKKworCWRpdiA9IChmcmVxdWVuY3kgKyBfRlIvMikgLyBfRlI7CisJc3RhdGUtPmZyZXF1ZW5jeSA9IGRpdiAqIF9GUjsKKworCWZvZmZzZXQgPSBmcmVxdWVuY3kgLSBzdGF0ZS0+ZnJlcXVlbmN5OworCisJYnVmWzBdID0gKGRpdiA+PiA4KSAmIDB4N2Y7CisJYnVmWzFdID0gKGRpdiA+PiAwKSAmIDB4ZmY7CisKKwlkZWJfaW5mbygiJXM6IGZ0b2RvPSV1IGZwcml2PSV1IGZlcnI9JWQgZGl2PSV1XG4iLCBfX2Z1bmNfXywKKwkJZnJlcXVlbmN5LCBzdGF0ZS0+ZnJlcXVlbmN5LCBmb2Zmc2V0LCBkaXYpOworCisJcmV0dXJuIHpsMTAwMzZfd3JpdGUoc3RhdGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsIHUzMiBmYncpCit7CisJLyogZmJ3IGlzIG1lYXN1cmVkIGluIGtIeiAqLworCXU4IGJyLCBiZjsKKwlpbnQgcmV0OworCXU4IGJ1Zl9iZltdID0geworCQkweGMwLCAweDAwLCAvKiAgIDYvNzogcnNkPTAgYmY9MCAqLworCX07CisJdTggYnVmX2JyW10gPSB7CisJCTB4ZjAsIDB4MDAsIC8qIDEyLzEzOiBicj0weGEgY2xyPTAgdGw9MCovCisJfTsKKwl1OCB6bDEwMDM2X3JzZF9vZmZbXSA9IHsgMHhjOCB9OyAvKiBzZXQgUlNEPTEgKi8KKworCS8qIGVuc3VyZSBjb3JyZWN0IHZhbHVlcyAqLworCWlmIChmYncgPiAzNTAwMCkKKwkJZmJ3ID0gMzUwMDA7CisJaWYgKGZidyA8ICA4MDAwKQorCQlmYncgPSAgODAwMDsKKworI2RlZmluZSBfQlJfTUFYSU1VTSAoX1hUQUwvNTc1KSAvKiBfWFRBTCAvIDU3NWtIeiA9IDE3ICovCisKKwkvKiA8PSAyOCw4MiBNSHogKi8KKwlpZiAoZmJ3IDw9IDI4ODIwKSB7CisJCWJyID0gX0JSX01BWElNVU07CisJfSBlbHNlIHsKKwkJLyoqCisJCSAqICBmKGJ3KT0zNCw2TUh6IGYoeHRhbCk9MTAuMTExTUh6CisJCSAqICBiciA9ICgxMDExMS8zNDYwMCkgKiA2MyAqIDEvSyA9IDE0OworCQkgKi8KKwkJYnIgPSAoKF9YVEFMICogMjEgKiAxMDAwKSAvIChmYncgKiA0MTkpKTsKKwl9CisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMgKi8KKwlpZiAoYnIgPCA0KQorCQliciA9IDQ7CisJaWYgKGJyID4gX0JSX01BWElNVU0pCisJCWJyID0gX0JSX01BWElNVU07CisKKwkvKgorCSAqIGsgPSAxLjI1NworCSAqIGJmID0gZmJ3L19YVEFMICogYnIgKiBrIC0gMSAqLworCisJYmYgPSAoZmJ3ICogYnIgKiAxMjU3KSAvIChfWFRBTCAqIDEwMDApIC0gMTsKKworCS8qIGVuc3VyZSBjb3JyZWN0IHZhbHVlcyAqLworCWlmIChiZiA+IDYyKQorCQliZiA9IDYyOworCisJYnVmX2JmWzFdID0gKGJmIDw8IDEpICYgMHg3ZTsKKwlidWZfYnJbMV0gPSAoYnIgPDwgMikgJiAweDdjOworCWRlYl9pbmZvKCIlczogQlc9JWQgYnI9JXUgYmY9JXVcbiIsIF9fZnVuY19fLCBmYncsIGJyLCBiZik7CisKKwlpZiAoYnIgIT0gc3RhdGUtPmJyKSB7CisJCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIGJ1Zl9iciwgc2l6ZW9mKGJ1Zl9icikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGJmICE9IHN0YXRlLT5iZikgeworCQlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWZfYmYsIHNpemVvZihidWZfYmYpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCS8qIHRpbWUgPSBici8oMzIqIGZ4dGFsKSAqLworCQkvKiBtaW5pbWFsIHNsZWVwIHRpbWUgdG8gYmUgY2FsY3VsYXRlZAorCQkgKiBtYXhpbXVtIGJyIGlzIDYzIC0+IG1heCB0aW1lID0gMiAvMTAgTUh6ID0gMmUtNyAqLworCQltc2xlZXAoMSk7CisKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgemwxMDAzNl9yc2Rfb2ZmLAorCQkJc2l6ZW9mKHpsMTAwMzZfcnNkX29mZikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJc3RhdGUtPmJyID0gYnI7CisJc3RhdGUtPmJmID0gYmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NldF9nYWluX3BhcmFtcyhzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsCisJaW50IGMpCit7CisJdTggYnVmWzJdOworCXU4IHJmZywgYmEsIGJnOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlyZmcgPSAwOyAvKiBlbmFibGUgd2hlbiB1c2luZyBhbiBsbmEgKi8KKwliYSA9IDE7CisJYmcgPSAxOworCisJLyogcmVnIDQgKi8KKwlidWZbMF0gPSAweDgwIHwgKChyZmcgPDwgNSkgJiAweDIwKQorCQl8ICgoYmEgIDw8IDMpICYgMHgxOCkgfCAoKGJnICA8PCAxKSAmIDB4MDYpOworCisJaWYgKCFzdGF0ZS0+Y29uZmlnLT5yZl9sb29wX2VuYWJsZSkKKwkJYnVmWzBdIHw9IDB4MDE7CisKKwkvKiBQMD0wICovCisJYnVmWzFdID0gX1JESVZfUkVHIHwgKChjIDw8IDUpICYgMHg2MCk7CisKKwlkZWJfaW5mbygiJXM6IGM9JXUgcmZnPSV1IGJhPSV1IGJnPSV1XG4iLCBfX2Z1bmNfXywgYywgcmZnLCBiYSwgYmcpOworCXJldHVybiB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCWludCByZXQgPSAwOworCXUzMiBmcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKKwl1MzIgZmJ3OworCWludCBpOworCXU4IGM7CisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMKKwkgKiBtYXliZSByZWR1bmRhbnQgYXMgY29yZSBhbHJlYWR5IGNoZWNrcyB0aGlzICovCisJaWYgKChmcmVxdWVuY3kgPCBmZS0+b3BzLmluZm8uZnJlcXVlbmN5X21pbikKKwl8fCAgKGZyZXF1ZW5jeSA+IGZlLT5vcHMuaW5mby5mcmVxdWVuY3lfbWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKioKKwkgKiBhbHBoYSA9IDEuMzUgZm9yIGR2Yi1zCisJICogZkJXID0gKGFscGhhKnN5bWJvbHJhdGUpLygyKjAuOCkKKwkgKiAxLjM1IC8gKDIqMC44KSA9IDI3IC8gMzIKKwkgKi8KKwlmYncgPSAoMjcgKiBwYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZSkgLyAzMjsKKworCS8qIHNjYWxlIHRvIGtIeiAqLworCWZidyAvPSAxMDAwOworCisJLyogQWRkIHNhZmUgbWFyZ2luIG9mIDNNSHogKi8KKwlmYncgKz0gMzAwMDsKKworCS8qIHNldHRpbmcgdGhlIGNoYXJnZSBwdW1wIC0gZ3Vlc3NlZCB2YWx1ZXMgKi8KKwlpZiAoZnJlcXVlbmN5IDwgOTUwMDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIGlmIChmcmVxdWVuY3kgPCAxMjUwMDAwKQorCQljID0gMDsKKwllbHNlIGlmIChmcmVxdWVuY3kgPCAxNzUwMDAwKQorCQljID0gMTsKKwllbHNlIGlmIChmcmVxdWVuY3kgPCAyMTc1MDAwKQorCQljID0gMjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gemwxMDAzNl9zZXRfZ2Fpbl9wYXJhbXMoc3RhdGUsIGMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gemwxMDAzNl9zZXRfZnJlcXVlbmN5KHN0YXRlLCBwYXJhbXMtPmZyZXF1ZW5jeSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSB6bDEwMDM2X3NldF9iYW5kd2lkdGgoc3RhdGUsIGZidyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiB3YWl0IGZvciB0dW5lciBsb2NrIC0gbm8gaWRlYSBpZiB0aGlzIGlzIHJlYWxseSBuZWVkZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQlyZXQgPSB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdGF0ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQkvKiBjaGVjayBGcmVxdWVuY3kgJiBQaGFzZSBMb2NrIEJpdCAqLworCQlpZiAocmV0ICYgU1RBVFVTX0ZMKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEwKTsKKwl9CisKK2Vycm9yOgorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisKKwkqZnJlcXVlbmN5ID0gc3RhdGUtPmZyZXF1ZW5jeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfaW5pdF9yZWdzKHN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJLyogY291bGQgYWxzbyBiZSBvbmUgYmxvY2sgZnJvbSByZWcgMiB0byAxMyBhbmQgYWRkaXRpb25hbCAxMC8xMSAqLworCXU4IHpsMTAwMzZfaW5pdF90YWJbXVsyXSA9IHsKKwkJeyAweDA0LCAweDAwIH0sCQkvKiAgIDIvMzogZGl2PTB4NDAwIC0gYXJiaXRyYXJ5IHZhbHVlICovCisJCXsgMHg4YiwgX1JESVZfUkVHIH0sCS8qICAgNC81OiByZmc9MCBiYT0xIGJnPTEgbGVuPT8gKi8KKwkJCQkJLyogICAgICAgIHAwPTAgYz0wIHI9X1JESVZfUkVHICovCisJCXsgMHhjMCwgMHgyMCB9LAkJLyogICA2Lzc6IHJzZD0wIGJmPTB4MTAgKi8KKwkJeyAweGQzLCAweDQwIH0sCQkvKiAgIDgvOTogZnJvbSBkYXRhc2hlZXQgKi8KKwkJeyAweGUzLCAweDViIH0sCQkvKiAxMC8xMTogbG9jayB3aW5kb3cgbGV2ZWwgKi8KKwkJeyAweGYwLCAweDI4IH0sCQkvKiAxMi8xMzogYnI9MHhhIGNscj0wIHRsPTAqLworCQl7IDB4ZTMsIDB4ZjkgfSwJCS8qIDEwLzExOiB1bmxvY2sgd2luZG93IGxldmVsICovCisJfTsKKworCS8qIGludmFsaWQgdmFsdWVzIHRvIHRyaWdnZXIgd3JpdGluZyAqLworCXN0YXRlLT5iciA9IDB4ZmY7CisJc3RhdGUtPmJmID0gMHhmZjsKKworCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCisJCXpsMTAwMzZfaW5pdF90YWJbMV1bMl0gfD0gMHgwMTsKKworCWRlYl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoemwxMDAzNl9pbml0X3RhYik7IGkrKykgeworCQlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCB6bDEwMDM2X2luaXRfdGFiW2ldLCAyKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IHpsMTAwMzZfcmVhZF9zdGF0dXNfcmVnKHN0YXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE9ubHkgaW5pdCBpZiBQb3dlci1vbi1SZXNldCBiaXQgaXMgc2V0PyAqLworCXJldCA9IHpsMTAwMzZfaW5pdF9yZWdzKHN0YXRlKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGR2Yl90dW5lcl9vcHMgemwxMDAzNl90dW5lcl9vcHMgPSB7CisJLmluZm8gPSB7CisJCS5uYW1lID0gIlphcmxpbmsgWkwxMDAzNiIsCisJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDIxNzUwMDAKKwl9LAorCS5pbml0ID0gemwxMDAzNl9pbml0LAorCS5yZWxlYXNlID0gemwxMDAzNl9yZWxlYXNlLAorCS5zbGVlcCA9IHpsMTAwMzZfc2xlZXAsCisJLnNldF9wYXJhbXMgPSB6bDEwMDM2X3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSB6bDEwMDM2X2dldF9mcmVxdWVuY3ksCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICp6bDEwMDM2X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHpsMTAwMzZfY29uZmlnICpjb25maWcsCisJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChOVUxMID09IGNvbmZpZykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBjb25maWcgc3BlY2lmaWVkIiwgX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpsMTAwMzZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOworCXN0YXRlLT5pMmMgPSBpMmM7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdGF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gemwxMDAzNiBmb3VuZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IHpsMTAwMzZfaW5pdF9yZWdzKHN0YXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0dW5lciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsgLyogY2xvc2UgaTJjX2dhdGUgKi8KKworCWZlLT50dW5lcl9wcml2ID0gc3RhdGU7CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmemwxMDAzNl90dW5lcl9vcHMsCisJCXNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiB0dW5lciBpbml0aWFsaXphdGlvbiAoJXMgYWRkcj0weCUwMngpIG9rXG4iLAorCQlfX2Z1bmNfXywgZmUtPm9wcy50dW5lcl9vcHMuaW5mby5uYW1lLCBjb25maWctPnR1bmVyX2FkZHJlc3MpOworCisJcmV0dXJuIGZlOworCitlcnJvcjoKKwl6bDEwMDM2X3JlbGVhc2UoZmUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTCh6bDEwMDM2X2F0dGFjaCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgemwxMDAzNl9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRFZCIFpMMTAwMzYgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUaW5vIFJlaWNoYXJkdCIpOworTU9EVUxFX0FVVEhPUigiTWF0dGhpYXMgU2Nod2Fyem90dCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0YjhmOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmgKQEAgLTAsMCArMSw1MyBAQAorLyoqCisgKiBEcml2ZXIgZm9yIFphcmxpbmsgWkwxMDAzNiBEVkItUyBzaWxpY29uIHR1bmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRpbm8gUmVpY2hhcmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBNYXR0aGlhcyBTY2h3YXJ6b3R0IDx6emFtQGdlbnRvby5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBEVkJfWkwxMDAzNl9ICisjZGVmaW5lIERWQl9aTDEwMDM2X0gKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisvKioKKyAqIEF0dGFjaCBhIHpsMTAwMzYgdHVuZXIgdG8gdGhlIHN1cHBsaWVkIGZyb250ZW5kIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW0gZmUgRnJvbnRlbmQgdG8gYXR0YWNoIHRvLgorICogQHBhcmFtIGNvbmZpZyB6bDEwMDM2X2NvbmZpZyBzdHJ1Y3R1cmUKKyAqIEByZXR1cm4gRkUgcG9pbnRlciBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KKworc3RydWN0IHpsMTAwMzZfY29uZmlnIHsKKwl1OCB0dW5lcl9hZGRyZXNzOworCWludCByZl9sb29wX2VuYWJsZTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDAzNikgfHwgXAorCShkZWZpbmVkKENPTkZJR19EVkJfWkwxMDAzNl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICp6bDEwMDM2X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwljb25zdCBzdHJ1Y3QgemwxMDAzNl9jb25maWcgKmNvbmZpZywgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqemwxMDAzNl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IHpsMTAwMzZfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBEVkJfWkwxMDAzNl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwppbmRleCBiMTUwZWQzLi4xNDhiNmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKQEAgLTU3Miw2ICs1NzIsMTAgQEAKIAkJemwxMDM1M19kdW1wX3JlZ3MoZmUpOwogCWlmIChzdGF0ZS0+Y29uZmlnLnBhcmFsbGVsX3RzKQogCQl6bDEwMzUzX3Jlc2V0X2F0dGFjaFsyXSAmPSB+MHgyMDsKKwlpZiAoc3RhdGUtPmNvbmZpZy5jbG9ja19jdGxfMSkKKwkJemwxMDM1M19yZXNldF9hdHRhY2hbM10gPSBzdGF0ZS0+Y29uZmlnLmNsb2NrX2N0bF8xOworCWlmIChzdGF0ZS0+Y29uZmlnLnBsbF8wKQorCQl6bDEwMzUzX3Jlc2V0X2F0dGFjaFs0XSA9IHN0YXRlLT5jb25maWcucGxsXzA7CiAKIAkvKiBEbyBhICJoYXJkIiByZXNldCBpZiBub3QgYWxyZWFkeSBkb25lICovCiAJaWYgKHpsMTAzNTNfcmVhZF9yZWdpc3RlcihzdGF0ZSwgMHg1MCkgIT0gemwxMDM1M19yZXNldF9hdHRhY2hbMV0gfHwKQEAgLTYxNCw2ICs2MTgsNyBAQAogCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKIHsKIAlzdHJ1Y3QgemwxMDM1M19zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCBpZDsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemwxMDM1M19zdGF0ZSksIEdGUF9LRVJORUwpOwpAQCAtNjI1LDcgKzYzMCw4IEBACiAJbWVtY3B5KCZzdGF0ZS0+Y29uZmlnLCBjb25maWcsIHNpemVvZihzdHJ1Y3QgemwxMDM1M19jb25maWcpKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLwotCWlmICh6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIENISVBfSUQpICE9IElEX1pMMTAzNTMpCisJaWQgPSB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIENISVBfSUQpOworCWlmICgoaWQgIT0gSURfWkwxMDM1MykgJiYgKGlkICE9IElEX0NFNjIzMCkgJiYgKGlkICE9IElEX0NFNjIzMSkpCiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaAppbmRleCAyMjg3YmFjLi42ZTNjYTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAKIAkvKiBzZXQgaWYgaTJjX2dhdGVfY3RybCBkaXNhYmxlIGlzIHJlcXVpcmVkICovCiAJdTggZGlzYWJsZV9pMmNfZ2F0ZV9jdHJsOjE7CisKKwkvKiBjbG9jayBjb250cm9sIHJlZ2lzdGVycyAoMHg1MS0weDU0KSAqLworCXU4IGNsb2NrX2N0bF8xOyAgLyogZGVmYXVsdDogMHg0NiAqLworCXU4IHBsbF8wOyAgICAgICAgLyogZGVmYXVsdDogMHgxNSAqLwogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzKSB8fCAoZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmgKaW5kZXggMDU1ZmYxZi4uZTBkZDFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaApAQCAtMjIsNyArMjIsOSBAQAogI2lmbmRlZiBfWkwxMDM1M19QUklWXwogI2RlZmluZSBfWkwxMDM1M19QUklWXwogCi0jZGVmaW5lIElEX1pMMTAzNTMJMHgxNAorI2RlZmluZSBJRF9aTDEwMzUzCTB4MTQgLyogWmFybGluayBaTDEwMzUzICovCisjZGVmaW5lIElEX0NFNjIzMAkweDE4IC8qIEludGVsIENFNjIzMCAqLworI2RlZmluZSBJRF9DRTYyMzEJMHgxOSAvKiBJbnRlbCBDRTYyMzEgKi8KIAogI2RlZmluZSBtc2IoeCkgKCgoeCkgPj4gOCkgJiAweGZmKQogI2RlZmluZSBsc2IoeCkgKCh4KSAmIDB4ZmYpCkBAIC01MCw2ICs1MiwxMCBAQAogCVRQU19SRUNFSVZFRF8wICAgICA9IDB4MUUsCiAJVFBTX0NVUlJFTlRfMSAgICAgID0gMHgxRiwKIAlUUFNfQ1VSUkVOVF8wICAgICAgPSAweDIwLAorCUNMT0NLX0NUTF8wICAgICAgICA9IDB4NTEsCisJQ0xPQ0tfQ1RMXzEgICAgICAgID0gMHg1MiwKKwlQTExfMCAgICAgICAgICAgICAgPSAweDUzLAorCVBMTF8xICAgICAgICAgICAgICA9IDB4NTQsCiAJUkVTRVQgICAgICAgICAgICAgID0gMHg1NSwKIAlBR0NfVEFSR0VUICAgICAgICAgPSAweDU2LAogCU1DTEtfUkFUSU8gICAgICAgICA9IDB4NUMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKaW5kZXggZDEwMWIzMC4uZWU4OTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYwpAQCAtMTE2LDYgKzExNiw3IEBACiAKIAkvKiBpcnEgKi8KIAl1bnNpZ25lZCBpbnQgb3ZlcmZsb3c7CisJdW5zaWduZWQgaW50IGRlYWQ7CiAKIAkvKiBkbWEgKi8KIAlkbWFfYWRkcl90IGRtYV9hZGRyOwpAQCAtMzM2LDggKzMzNywxMCBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAodHNjciA9PSAweGZmZmZmZmZmKSB7Ci0JCS8vIEZJWE1FOiBtYXliZSByZWNvdmVyIHNvbWVob3cKLQkJZGV2X2VycigmcGx1dG8tPnBkZXYtPmRldiwgImNhcmQgaHVuZyB1cCA6KFxuIik7CisJCWlmIChwbHV0by0+ZGVhZCA9PSAwKQorCQkJZGV2X2VycigmcGx1dG8tPnBkZXYtPmRldiwgImNhcmQgaGFzIGh1bmcgb3IgYmVlbiBlamVjdGVkLlxuIik7CisJCS8qIEl0J3MgZGVhZCBKaW0gKi8KKwkJcGx1dG8tPmRlYWQgPSAxOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL01ha2VmaWxlCmluZGV4IGVlMDczN2EuLmJjZjkzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL01ha2VmaWxlCkBAIC0xLDYgKzEsOCBAQAotc21zMXh4eC1vYmpzIDo9IHNtc2NvcmVhcGkubyBzbXN1c2IubyBzbXNkdmIubyBzbXMtY2FyZHMubworc21zMXh4eC1vYmpzIDo9IHNtc2NvcmVhcGkubyBzbXMtY2FyZHMubwogCiBvYmotJChDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFgpICs9IHNtczF4eHgubworb2JqLSQoQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYKSArPSBzbXN1c2Iubworb2JqLSQoQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYKSArPSBzbXNkdmIubwogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCmluZGV4IDQzMDdlNGUuLjYzZTRkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5jCkBAIC0xOSw1MCArMTksOSBAQAogCiAjaW5jbHVkZSAic21zLWNhcmRzLmgiCiAKLXN0cnVjdCB1c2JfZGV2aWNlX2lkIHNtc3VzYl9pZF90YWJsZVtdID0gewotI2lmZGVmIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWF9TTVNfSURTCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMDEwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMTAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0EgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDEpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQiB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVHQSB9LAotI2VuZGlmCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxNzAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfQ0FUQU1PVU5UIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0IgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwOSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDBhKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxOSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUxMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MjApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTMwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU4MCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1OTApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbXN1c2JfaWRfdGFibGUpOworc3RhdGljIGludCBzbXNfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGNhcmRzX2RiZywgc21zX2RiZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FyZHNfZGJnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIGFkdj0yIChvci1hYmxlKSkiKTsKIAogc3RhdGljIHN0cnVjdCBzbXNfYm9hcmQgc21zX2JvYXJkc1tdID0gewogCVtTTVNfQk9BUkRfVU5LTk9XTl0gPSB7CkBAIC0xMTUsNiArNzQsNyBAQAogCQkudHlwZQk9IFNNU19OT1ZBX0IwLAogCQkuZndbREVWSUNFX01PREVfRFZCVF9CREFdID0gInNtczF4eHgtaGN3LTU1eHh4LWR2YnQtMDIuZnciLAogCQkubG5hX2N0cmwgID0gMjksCisJCS5yZl9zd2l0Y2ggPSAxNywKIAl9LAogCVtTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMl0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBXaW5UViBNaW5pQ2FyZCIsCkBAIC0xMzAsNiArOTAsNyBAQAogCiAJcmV0dXJuICZzbXNfYm9hcmRzW2lkXTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19nZXRfYm9hcmQpOwogCiBzdGF0aWMgaW50IHNtc19zZXRfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IHBpbiwgaW50IGVuYWJsZSkKIHsKQEAgLTE4Miw2ICsxNDMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9zZXR1cCk7CiAKIGludCBzbXNfYm9hcmRfcG93ZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBvbm9mZikKIHsKQEAgLTE5NywxMiArMTU5LDEzIEBACiAJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMjoKIAljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEOgogCQkvKiBMTkEgKi8KLQkJc21zX3NldF9ncGlvKGNvcmVkZXYsCi0JCQkgICAgIGJvYXJkLT5sbmFfY3RybCwgb25vZmYgPyAxIDogMCk7CisJCWlmICghb25vZmYpCisJCQlzbXNfc2V0X2dwaW8oY29yZWRldiwgYm9hcmQtPmxuYV9jdHJsLCAwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX3Bvd2VyKTsKIAogaW50IHNtc19ib2FyZF9sZWRfZmVlZGJhY2soc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBsZWQpCiB7CkBAIC0yMjUsMyArMTg4LDQwIEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX2xlZF9mZWVkYmFjayk7CisKK2ludCBzbXNfYm9hcmRfbG5hX2NvbnRyb2woc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBvbm9mZikKK3sKKwlpbnQgYm9hcmRfaWQgPSBzbXNjb3JlX2dldF9ib2FyZF9pZChjb3JlZGV2KTsKKwlzdHJ1Y3Qgc21zX2JvYXJkICpib2FyZCA9IHNtc19nZXRfYm9hcmQoYm9hcmRfaWQpOworCisJc21zX2RlYnVnKCIlczogTE5BICVzIiwgX19mdW5jX18sIG9ub2ZmID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisKKwlzd2l0Y2ggKGJvYXJkX2lkKSB7CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMjoKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEOgorCQlzbXNfc2V0X2dwaW8oY29yZWRldiwKKwkJCSAgICAgYm9hcmQtPnJmX3N3aXRjaCwgb25vZmYgPyAxIDogMCk7CisJCXJldHVybiBzbXNfc2V0X2dwaW8oY29yZWRldiwKKwkJCQkgICAgYm9hcmQtPmxuYV9jdHJsLCBvbm9mZiA/IDEgOiAwKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfbG5hX2NvbnRyb2wpOworCitpbnQgc21zX2JvYXJkX2xvYWRfbW9kdWxlcyhpbnQgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfQ0FUQU1PVU5UOgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQToKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0I6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNOgorCQlyZXF1ZXN0X21vZHVsZSgic21zZHZiIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRvIG5vdGhpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX2xvYWRfbW9kdWxlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCmluZGV4IDhlMGZlOWYuLjY0ZDc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntcy1jYXJkcy5oCkBAIC00MCw3ICs0MCw3IEBACiAJY2hhciAqbmFtZSwgKmZ3W0RFVklDRV9NT0RFX01BWF07CiAKIAkvKiBncGlvcyAqLwotCWludCBsZWRfcG93ZXIsIGxlZF9oaSwgbGVkX2xvLCBsbmFfY3RybDsKKwlpbnQgbGVkX3Bvd2VyLCBsZWRfaGksIGxlZF9sbywgbG5hX2N0cmwsIHJmX3N3aXRjaDsKIH07CiAKIHN0cnVjdCBzbXNfYm9hcmQgKnNtc19nZXRfYm9hcmQoaW50IGlkKTsKQEAgLTUyLDcgKzUyLDggQEAKICNkZWZpbmUgU01TX0xFRF9ISSAgMgogaW50IHNtc19ib2FyZF9sZWRfZmVlZGJhY2soc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBsZWQpOwogaW50IHNtc19ib2FyZF9wb3dlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgaW50IG9ub2ZmKTsKK2ludCBzbXNfYm9hcmRfbG5hX2NvbnRyb2woc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBvbm9mZik7CiAKLWV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzbXN1c2JfaWRfdGFibGVbXTsKK2V4dGVybiBpbnQgc21zX2JvYXJkX2xvYWRfbW9kdWxlcyhpbnQgaWQpOwogCiAjZW5kaWYgLyogX19TTVNfQ0FSRFNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggY2Y2MTNmMi4uN2JkNGQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgVGhpcyBmaWxlIGNvbnRhaW5zIGltcGxlbWVudGF0aW9uIGZvciB0aGUgaW50ZXJmYWNlIHRvIHNtcyBjb3JlIGNvbXBvbmVudAogICoKLSAqICBhdXRob3I6IEFuYXRvbHkgR3JlZW5ibGF0CisgKiAgYXV0aG9yOiBVcmkgU2hrb2xuaWsKICAqCiAgKiAgQ29weXJpZ2h0IChjKSwgMjAwNS0yMDA4IFNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuCiAgKgpAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgInNtc2NvcmVhcGkuaCIKICNpbmNsdWRlICJzbXMtY2FyZHMuaCIKIAotaW50IHNtc19kZWJ1ZzsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RlYnVnLCBpbnQsIDA2NDQpOworc3RhdGljIGludCBzbXNfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGJnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CiAKIHN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90IHsKQEAgLTEwNSwxMSArMTA1LDEzIEBACiAJCWNvcmUtPmxlZF9zdGF0ZSA9IGxlZDsKIAlyZXR1cm4gY29yZS0+bGVkX3N0YXRlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9zZXRfYm9hcmRfaWQpOwogCiBpbnQgc21zY29yZV9nZXRfYm9hcmRfaWQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmUpCiB7CiAJcmV0dXJuIGNvcmUtPmJvYXJkX2lkOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9nZXRfYm9hcmRfaWQpOwogCiBzdHJ1Y3Qgc21zY29yZV9yZWdpc3RyeV9lbnRyeV90IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwpAQCAtMTcwLDYgKzE3Miw3IEBACiAKIAlyZXR1cm4gZGVmYXVsdF9tb2RlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3RyeV9nZXRtb2RlKTsKIAogc3RhdGljIGVudW0gc21zX2RldmljZV90eXBlX3N0IHNtc2NvcmVfcmVnaXN0cnlfZ2V0dHlwZShjaGFyICpkZXZwYXRoKQogewpAQCAtMjYxLDYgKzI2NCw3IEBACiAKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3JlZ2lzdGVyX2hvdHBsdWcpOwogCiAvKioKICAqIHVucmVnaXN0ZXIgYSBjbGllbnQgY2FsbGJhY2sgdGhhdCBjYWxsZWQgd2hlbiBkZXZpY2UgcGx1Z2dlZCBpbi91bnBsdWdnZWQKQEAgLTI4OSw2ICsyOTMsNyBAQAogCiAJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfdW5yZWdpc3Rlcl9ob3RwbHVnKTsKIAogc3RhdGljIHZvaWQgc21zY29yZV9ub3RpZnlfY2xpZW50cyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKIHsKQEAgLTQzMiw2ICs0MzcsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3JlZ2lzdGVyX2RldmljZSk7CiAKIC8qKgogICogc2V0cyBpbml0aWFsIGRldmljZSBtb2RlIGFuZCBub3RpZmllcyBjbGllbnQgaG90cGx1Z3MgdGhhdCBkZXZpY2UgaXMgcmVhZHkKQEAgLTQ2MCw2ICs0NjYsNyBAQAogCiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9zdGFydF9kZXZpY2UpOwogCiBzdGF0aWMgaW50IHNtc2NvcmVfc2VuZHJlcXVlc3RfYW5kX3dhaXQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCiAJCQkJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCkBAIC02ODgsNiArNjk1LDcgQEAKIAogCXNtc19pbmZvKCJkZXZpY2UgJXAgZGVzdHJveWVkIiwgY29yZWRldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3VucmVnaXN0ZXJfZGV2aWNlKTsKIAogc3RhdGljIGludCBzbXNjb3JlX2RldGVjdF9tb2RlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KQogewpAQCAtNzMyLDcgKzc0MCw3IEBACiAJLypEVkJIKi8KIAl7Im5vbmUiLCAiZHZiX25vdmFfMTJtaHouaW5wIiwgImR2Yl9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCiAJLypURE1CKi8KLQl7Im5vbmUiLCAidGRtYl9ub3ZhXzEybWh6LmlucCIsICJub25lIiwgIm5vbmUifSwKKwl7Im5vbmUiLCAidGRtYl9ub3ZhXzEybWh6LmlucCIsICJ0ZG1iX25vdmFfMTJtaHpfYjAuaW5wIiwgIm5vbmUifSwKIAkvKkRBQklQKi8KIAl7Im5vbmUiLCAibm9uZSIsICJub25lIiwgIm5vbmUifSwKIAkvKkJEQSovCkBAIC04NzksNiArODg3LDcgQEAKIHsKIAlyZXR1cm4gY29yZWRldi0+bW9kZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKTsKIAogLyoqCiAgKiBmaW5kIGNsaWVudCBieSByZXNwb25zZSBpZCAmIHR5cGUgd2l0aGluIHRoZSBjbGllbnRzIGxpc3QuCkBAIC0xMDA2LDYgKzEwMTUsNyBAQAogCQlzbXNjb3JlX3B1dGJ1ZmZlcihjb3JlZGV2LCBjYik7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9vbnJlc3BvbnNlKTsKIAogLyoqCiAgKiByZXR1cm4gcG9pbnRlciB0byBuZXh0IGZyZWUgYnVmZmVyIGRlc2NyaXB0b3IgZnJvbSBjb3JlIHBvb2wKQEAgLTEwMzEsNiArMTA0MSw3IEBACiAKIAlyZXR1cm4gY2I7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX2dldGJ1ZmZlcik7CiAKIC8qKgogICogcmV0dXJuIGJ1ZmZlciBkZXNjcmlwdG9yIHRvIGEgcG9vbApAQCAtMTA0NSw2ICsxMDU2LDcgQEAKIHsKIAlsaXN0X2FkZF9sb2NrZWQoJmNiLT5lbnRyeSwgJmNvcmVkZXYtPmJ1ZmZlcnMsICZjb3JlZGV2LT5idWZmZXJzbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3B1dGJ1ZmZlcik7CiAKIHN0YXRpYyBpbnQgc21zY29yZV92YWxpZGF0ZV9jbGllbnQoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCiAJCQkJICAgc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKmNsaWVudCwKQEAgLTExMjQsNiArMTEzNiw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcmVnaXN0ZXJfY2xpZW50KTsKIAogLyoqCiAgKiBmcmVlcyBzbXNjbGllbnQgb2JqZWN0IGFuZCBhbGwgc3ViY2xpZW50cyBhc3NvY2lhdGVkIHdpdGggaXQKQEAgLTExNTQsNiArMTE2Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3JlZGV2LT5jbGllbnRzbG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV91bnJlZ2lzdGVyX2NsaWVudCk7CiAKIC8qKgogICogdmVyaWZpZXMgdGhhdCBzb3VyY2UgaWQgaXMgbm90IHRha2VuIGJ5IGFub3RoZXIgY2xpZW50LApAQCAtMTE5Myw2ICsxMjA3LDcgQEAKIAogCXJldHVybiBjb3JlZGV2LT5zZW5kcmVxdWVzdF9oYW5kbGVyKGNvcmVkZXYtPmNvbnRleHQsIGJ1ZmZlciwgc2l6ZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjbGllbnRfc2VuZHJlcXVlc3QpOwogCiAKIGludCBzbXNjb3JlX2NvbmZpZ3VyZV9ncGlvKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCB1MzIgcGluLApAQCAtMTI3NiwxMiArMTI5MSwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZnX3Ntc2NvcmVfcmVnaXN0cnkpOwogCWttdXRleF9pbml0KCZnX3Ntc2NvcmVfcmVnaXN0cnlsb2NrKTsKIAotCS8qIFVTQiBSZWdpc3RlciAqLwotCXJjID0gc21zdXNiX3JlZ2lzdGVyKCk7CiAKLQkvKiBEVkIgUmVnaXN0ZXIgKi8KLQlyYyA9IHNtc2R2Yl9yZWdpc3RlcigpOwogCisKKworCisJcmV0dXJuIHJjOwogCXNtc19kZWJ1ZygicmMgJWQiLCByYyk7CiAKIAlyZXR1cm4gcmM7CkBAIC0xMjkwLDYgKzEzMDUsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbXNjb3JlX21vZHVsZV9leGl0KHZvaWQpCiB7CiAKKworCisKKwogCWttdXRleF9sb2NrKCZnX3Ntc2NvcmVfZGV2aWNlc2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZ19zbXNjb3JlX25vdGlmeWVlcykpIHsKIAkJc3RydWN0IHNtc2NvcmVfZGV2aWNlX25vdGlmeWVlX3QgKm5vdGlmeWVlID0KQEAgLTEzMTIsMTggKzEzMzEsMTIgQEAKIAl9CiAJa211dGV4X3VubG9jaygmZ19zbXNjb3JlX3JlZ2lzdHJ5bG9jayk7CiAKLQkvKiBEVkIgVW5SZWdpc3RlciAqLwotCXNtc2R2Yl91bnJlZ2lzdGVyKCk7Ci0KLQkvKiBVbnJlZ2lzdGVyIFVTQiAqLwotCXNtc3VzYl91bnJlZ2lzdGVyKCk7Ci0KIAlzbXNfZGVidWcoIiIpOwogfQogCiBtb2R1bGVfaW5pdChzbXNjb3JlX21vZHVsZV9pbml0KTsKIG1vZHVsZV9leGl0KHNtc2NvcmVfbW9kdWxlX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFNpYW5vIFNNUzFYWFggVVNCIGRvbmdsZSIpOwotTU9EVUxFX0FVVEhPUigiU2lhbm8gTW9iaWxlIFNpbGljb24sLCwgKGRvcm9uY0BzaWFuby1tcy5jb20pIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNpYW5vIE1EVFYgQ29yZSBtb2R1bGUiKTsKK01PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCBJbmMuICh1cmlzQHNpYW5vLW1zLmNvbSkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAppbmRleCA3NjBlMjMzLi41NDhkZTkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaApAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImRteGRldi5oIgogI2luY2x1ZGUgImR2YmRldi5oIgogI2luY2x1ZGUgImR2Yl9kZW11eC5oIgogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2RlZmluZSBrbXV0ZXhfaW5pdChfcF8pIG11dGV4X2luaXQoX3BfKQogI2RlZmluZSBrbXV0ZXhfbG9jayhfcF8pIG11dGV4X2xvY2soX3BfKQpAQCAtMzY5LDI3ICszNjksNiBAQAogCXU4IG91dHB1dGRyaXZpbmc7CiB9OwogCi1zdHJ1Y3Qgc21zZHZiX2NsaWVudF90IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwotCi0Jc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QJKmNvcmVkZXY7Ci0Jc3RydWN0IHNtc2NvcmVfY2xpZW50X3QJKnNtc2NsaWVudDsKLQotCXN0cnVjdCBkdmJfYWRhcHRlcglhZGFwdGVyOwotCXN0cnVjdCBkdmJfZGVtdXgJZGVtdXg7Ci0Jc3RydWN0IGRteGRldgkJZG14ZGV2OwotCXN0cnVjdCBkdmJfZnJvbnRlbmQJZnJvbnRlbmQ7Ci0KLQlmZV9zdGF0dXNfdAkJZmVfc3RhdHVzOwotCWludAkJCWZlX2JlciwgZmVfc25yLCBmZV91bmMsIGZlX3NpZ25hbF9zdHJlbmd0aDsKLQotCXN0cnVjdCBjb21wbGV0aW9uCXR1bmVfZG9uZSwgc3RhdF9kb25lOwotCi0JLyogdG9kbzogc2F2ZSBmcmVxL2JhbmQgaW5zdGVhZCB3aG9sZSBzdHJ1Y3QgKi8KLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVfcGFyYW1zOwotCi19OwotCiBleHRlcm4gdm9pZCBzbXNjb3JlX3JlZ2lzdHJ5X3NldG1vZGUoY2hhciAqZGV2cGF0aCwgaW50IG1vZGUpOwogZXh0ZXJuIGludCBzbXNjb3JlX3JlZ2lzdHJ5X2dldG1vZGUoY2hhciAqZGV2cGF0aCk7CiAKQEAgLTQxOCw2ICszOTcsMTMgQEAKIGV4dGVybiB2b2lkIHNtc2NvcmVfb25yZXNwb25zZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKIAkJCSAgICAgICBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpOwogCitleHRlcm4gaW50IHNtc2NvcmVfZ2V0X2NvbW1vbl9idWZmZXJfc2l6ZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldik7CitleHRlcm4gaW50IHNtc2NvcmVfbWFwX2NvbW1vbl9idWZmZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworZXh0ZXJuIGludCBzbXNjb3JlX2dldF9md19maWxlbmFtZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQkgICBpbnQgbW9kZSwgY2hhciAqZmlsZW5hbWUpOworZXh0ZXJuIGludCBzbXNjb3JlX3NlbmRfZndfZmlsZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwKKwkJCQl1OCAqdWZ3YnVmLCBpbnQgc2l6ZSk7CiAKIGV4dGVybgogc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKnNtc2NvcmVfZ2V0YnVmZmVyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2KTsKQEAgLTQzMywxOCArNDE5LDkgQEAKIAogaW50IHNtc2NvcmVfbGVkX3N0YXRlKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlLCBpbnQgbGVkKTsKIAotLyogc21zZHZiLmMgKi8KLWludCBzbXNkdmJfcmVnaXN0ZXIodm9pZCk7Ci12b2lkIHNtc2R2Yl91bnJlZ2lzdGVyKHZvaWQpOwotCi0vKiBzbXN1c2IuYyAqLwotaW50IHNtc3VzYl9yZWdpc3Rlcih2b2lkKTsKLXZvaWQgc21zdXNiX3VucmVnaXN0ZXIodm9pZCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1leHRlcm4gaW50IHNtc19kZWJ1ZzsKLQogI2RlZmluZSBEQkdfSU5GTyAxCiAjZGVmaW5lIERCR19BRFYgIDIKIApAQCAtNDUyLDcgKzQyOSw3IEBACiAJcHJpbnRrKGtlcm4gIiVzOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgIyNhcmcpCiAKICNkZWZpbmUgZHByaW50ayhrZXJuLCBsdmwsIGZtdCwgYXJnLi4uKSBkbyB7XAotCWlmIChzbXNfZGVidWcgJiBsdmwpIFwKKwlpZiAoc21zX2RiZyAmIGx2bCkgXAogCQlzbXNfcHJpbnRrKGtlcm4sIGZtdCwgIyNhcmcpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHNtc19sb2coZm10LCBhcmcuLi4pIHNtc19wcmludGsoS0VSTl9JTkZPLCBmbXQsICMjYXJnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwppbmRleCAyZGE5NTNhLi5iYTA4MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNkdmIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMXh4eCBVU0IgZG9uZ2xlCiAgKgotICogIGF1dGhvcjogQW5hdG9seSBHcmVlbmJsYXQKKyAqICBBdXRob3I6IFVyaSBTaGtvbG5pCiAgKgogICogIENvcHlyaWdodCAoYyksIDIwMDUtMjAwOCBTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgogICoKQEAgLTI3LDkgKzI3LDMzIEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCitzdHJ1Y3Qgc21zZHZiX2NsaWVudF90IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCisJc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXY7CisJc3RydWN0IHNtc2NvcmVfY2xpZW50X3QgKnNtc2NsaWVudDsKKworCXN0cnVjdCBkdmJfYWRhcHRlciAgICAgIGFkYXB0ZXI7CisJc3RydWN0IGR2Yl9kZW11eCAgICAgICAgZGVtdXg7CisJc3RydWN0IGRteGRldiAgICAgICAgICAgZG14ZGV2OworCXN0cnVjdCBkdmJfZnJvbnRlbmQgICAgIGZyb250ZW5kOworCisJZmVfc3RhdHVzX3QgICAgICAgICAgICAgZmVfc3RhdHVzOworCWludCAgICAgICAgICAgICAgICAgICAgIGZlX2JlciwgZmVfc25yLCBmZV91bmMsIGZlX3NpZ25hbF9zdHJlbmd0aDsKKworCXN0cnVjdCBjb21wbGV0aW9uICAgICAgIHR1bmVfZG9uZSwgc3RhdF9kb25lOworCisJLyogdG9kbzogc2F2ZSBmcmVxL2JhbmQgaW5zdGVhZCB3aG9sZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVfcGFyYW1zOworfTsKKwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZ19zbXNkdmJfY2xpZW50czsKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggZ19zbXNkdmJfY2xpZW50c2xvY2s7CiAKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RiZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOworCiBzdGF0aWMgaW50IHNtc2R2Yl9vbnJlc3BvbnNlKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpjYikKIHsKIAlzdHJ1Y3Qgc21zZHZiX2NsaWVudF90ICpjbGllbnQgPSAoc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqKSBjb250ZXh0OwpAQCAtMjYyLDYgKzI4Niw3IEBACiAJCXN0cnVjdCBTbXNNc2dIZHJfU1QJTXNnOwogCQl1MzIJCURhdGFbM107CiAJfSBNc2c7CisJaW50IHJldDsKIAogCU1zZy5Nc2cubXNnU3JjSWQgID0gRFZCVF9CREFfQ09OVFJPTF9NU0dfSUQ7CiAJTXNnLk1zZy5tc2dEc3RJZCAgPSBISUZfVEFTSzsKQEAgLTI4Miw2ICszMDcsMjQgQEAKIAlkZWZhdWx0OiByZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBEaXNhYmxlIExOQSwgaWYgYW55LiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBubyBMTkEgaXMgcHJlc2VudCAqLworCXJldCA9IHNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDApOworCWlmIChyZXQgPT0gMCkgeworCQlmZV9zdGF0dXNfdCBzdGF0dXM7CisKKwkJLyogdHVuZSB3aXRoIExOQSBvZmYgYXQgZmlyc3QgKi8KKwkJcmV0ID0gc21zZHZiX3NlbmRyZXF1ZXN0X2FuZF93YWl0KGNsaWVudCwgJk1zZywgc2l6ZW9mKE1zZyksCisJCQkJCQkgICZjbGllbnQtPnR1bmVfZG9uZSk7CisKKwkJc21zZHZiX3JlYWRfc3RhdHVzKGZlLCAmc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzICYgRkVfSEFTX0xPQ0spCisJCQlyZXR1cm4gcmV0OworCisJCS8qIHByZXZpb3VzIHR1bmUgZGlkbnQgbG9jayAtIGVuYWJsZSBMTkEgYW5kIHR1bmUgYWdhaW4gKi8KKwkJc21zX2JvYXJkX2xuYV9jb250cm9sKGNsaWVudC0+Y29yZWRldiwgMSk7CisJfQorCiAJcmV0dXJuIHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAogCQkJCQkgICAmY2xpZW50LT50dW5lX2RvbmUpOwogfQpAQCAtMzI5LDcgKzM3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzbXNkdmJfZmVfb3BzID0gewogCS5pbmZvID0gewotCQkubmFtZQkJCT0gIlNpYW5vIE1vYmlsZSBEaWdpdGFsIFNNUzF4eHgiLAorCQkubmFtZQkJCT0gIlNpYW5vIE1vYmlsZSBEaWdpdGFsIE1EVFYgUmVjZWl2ZXIiLAogCQkudHlwZQkJCT0gRkVfT0ZETSwKIAkJLmZyZXF1ZW5jeV9taW4JCT0gNDQyNTAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4CQk9IDg2NzI1MDAwMCwKQEAgLTM3MSw3ICs0MTQsNyBAQAogCWlmICghYXJyaXZhbCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikgIT0gNCkgeworCWlmIChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZShjb3JlZGV2KSAhPSBERVZJQ0VfTU9ERV9EVkJUX0JEQSkgewogCQlzbXNfZXJyKCJTTVMgRGV2aWNlIG1vZGUgaXMgbm90IHNldCBmb3IgIgogCQkJIkRWQiBvcGVyYXRpb24uIik7CiAJCXJldHVybiAwOwpAQCAtNDczLDcgKzUxNiw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgc21zZHZiX3JlZ2lzdGVyKHZvaWQpCitpbnQgc21zZHZiX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwogCkBAIC00ODcsNyArNTMwLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgc21zZHZiX3VucmVnaXN0ZXIodm9pZCkKK3ZvaWQgc21zZHZiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJc21zY29yZV91bnJlZ2lzdGVyX2hvdHBsdWcoc21zZHZiX2hvdHBsdWcpOwogCkBAIC00OTksMyArNTQyLDEwIEBACiAKIAlrbXV0ZXhfdW5sb2NrKCZnX3Ntc2R2Yl9jbGllbnRzbG9jayk7CiB9CisKK21vZHVsZV9pbml0KHNtc2R2Yl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChzbXNkdmJfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNNUyBEVkIgc3Vic3lzdGVtIGFkYXB0YXRpb24gbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwgSU5DLiAodXJpc0BzaWFuby1tcy5jb20pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCmluZGV4IDVkN2NhMzQuLjcxYzY1ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCkBAIC0yNyw2ICsyNywxMCBAQAogI2luY2x1ZGUgInNtc2NvcmVhcGkuaCIKICNpbmNsdWRlICJzbXMtY2FyZHMuaCIKIAorc3RhdGljIGludCBzbXNfZGJnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBzbXNfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CisKICNkZWZpbmUgVVNCMV9CVUZGRVJfU0laRQkJMHgxMDAwCiAjZGVmaW5lIFVTQjJfQlVGRkVSX1NJWkUJCTB4NDAwMAogCkBAIC00MjQsNiArNDI4LDcgQEAKIAogCXJjID0gc21zdXNiX2luaXRfZGV2aWNlKGludGYsIGlkLT5kcml2ZXJfaW5mbyk7CiAJc21zX2luZm8oInJjICVkIiwgcmMpOworCXNtc19ib2FyZF9sb2FkX21vZHVsZXMoaWQtPmRyaXZlcl9pbmZvKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQzNiw3ICs0NDEsNyBAQAogewogCXN0cnVjdCBzbXN1c2JfZGV2aWNlX3QgKmRldiA9CiAJCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlwcmludGsoS0VSTl9JTkZPICIlcyAgRW50ZXJpbmcgc3RhdHVzICVkLlxuIiwgX19mdW5jX18sIG1zZy5ldmVudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nIHN0YXR1cyAlZC5cbiIsIF9fZnVuY19fLCBtc2cuZXZlbnQpOwogCXNtc3VzYl9zdG9wX3N0cmVhbWluZyhkZXYpOwogCXJldHVybiAwOwogfQpAQCAtNDQ4LDcgKzQ1Myw3IEBACiAJCShzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICopdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcyAgRW50ZXJpbmcuXG4iLCBfX2Z1bmNfXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVudGVyaW5nLlxuIiwgX19mdW5jX18pOwogCXVzYl9jbGVhcl9oYWx0KHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDgxKSk7CiAJdXNiX2NsZWFyX2hhbHQodWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIDB4MDIpKTsKIApAQCAtNDYzLDkgKzQ2OCw4IEBACiAJCQkJICAgICAgIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLgogCQkJCSAgICAgICBiSW50ZXJmYWNlTnVtYmVyLCAwKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJICAgICAgICIlcyB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsIHJjICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyB1c2Jfc2V0X2ludGVyZmFjZSBmYWlsZWQsICIKKwkJCSAgICAgICAicmMgJWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CkBAIC00NzQsOCArNDc4LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHNtc3VzYl9pZF90YWJsZVtdID0geworI2lmZGVmIENPTkZJR19EVkJfU0lBTk9fU01TMVhYWF9TTVNfSURTCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMDEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19TVEVMTEFSIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0EgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAyMDEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX05PVkFfQiB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVHQSB9LAorI2VuZGlmCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxNzAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfQ0FUQU1PVU5UIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgxODAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfT0tFTU9fQSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0IgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwOSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEX1IyIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDBhKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxMSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDE5KSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUyMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MzApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTgwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU5MCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNtc3VzYl9pZF90YWJsZSk7CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzbXN1c2JfZHJpdmVyID0gewotCS5uYW1lCQkJPSAic21zMXh4eCIsCisJLm5hbWUJCQk9ICJzbXN1c2IiLAogCS5wcm9iZQkJCT0gc21zdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0CQk9IHNtc3VzYl9kaXNjb25uZWN0LAogCS5pZF90YWJsZQkJPSBzbXN1c2JfaWRfdGFibGUsCkBAIC00ODQsNyArNTM1LDcgQEAKIAkucmVzdW1lCQkJPSBzbXN1c2JfcmVzdW1lLAogfTsKIAotaW50IHNtc3VzYl9yZWdpc3Rlcih2b2lkKQoraW50IHNtc3VzYl9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByYyA9IHVzYl9yZWdpc3Rlcigmc21zdXNiX2RyaXZlcik7CiAJaWYgKHJjKQpAQCAtNDk1LDEwICs1NDYsMTYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgc21zdXNiX3VucmVnaXN0ZXIodm9pZCkKK3ZvaWQgc21zdXNiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJc21zX2RlYnVnKCIiKTsKIAkvKiBSZWd1bGFyIFVTQiBDbGVhbnVwICovCiAJdXNiX2RlcmVnaXN0ZXIoJnNtc3VzYl9kcml2ZXIpOwogfQogCittb2R1bGVfaW5pdChzbXN1c2JfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc21zdXNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBTaWFubyBTTVMxWFhYIFVTQiBkb25nbGUiKTsKK01PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCBJTkMuICh1cmlzQHNpYW5vLW1zLmNvbSkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCmluZGV4IGFiMGJjZDIuLjc3Mjk5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTEwMDIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzaW1wbGUgU0FBNzE0NiBiYXNlZCBEVkIgY2FyZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggYWExZmY1Mi4uNDYyNGNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTcyNSw3ICs3MjUsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9vc2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9vc2RfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5vcGVuCQk9IGR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCmluZGV4IGJkYzYyYWMuLmU0ZDA5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCkBAIC0xNDU2LDcgKzE0NTYsNyBAQAogICogZHJpdmVyIHJlZ2lzdHJhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX3ZpZGVvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfdmlkZW9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLndyaXRlCQk9IGR2Yl92aWRlb193cml0ZSwKIAkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCkBAIC0xNDc0LDcgKzE0NzQsNyBAQAogCS5rZXJuZWxfaW9jdGwJPSBkdmJfdmlkZW9faW9jdGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfYXVkaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9hdWRpb19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkud3JpdGUJCT0gZHZiX2F1ZGlvX3dyaXRlLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKaW5kZXggMjYxMTM1ZC4uYzdhNjViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMKQEAgLTM0NSw3ICszNDUsNyBAQAogCXJldHVybiBjaV9sbF9yZWFkKCZhdjcxMTAtPmNpX3JidWZmZXIsIGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9jYV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBkdmJfY2FfcmVhZCwKIAkud3JpdGUJCT0gZHZiX2NhX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCmluZGV4IGM1YjljNzAuLjIyMTBjZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKQEAgLTMxNiwyNTMgKzMxNiwyNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgYXY3MTEwX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQogewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCopIGRldi0+ZXh0X3ByaXY7Ci0JZHByaW50ayg0LCAic2FhNzE0Nl9kZXY6ICVwXG4iLCBkZXYpOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKwl1MTYgc3RlcmVvX2RldDsKKwlzOCBzdGVyZW87CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQkJdTE2IHN0ZXJlb19kZXQ7Ci0JCXM4IHN0ZXJlbzsKKwlkcHJpbnRrKDIsICJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKIAotCQlkcHJpbnRrKDIsICJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IHQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgdC0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKKwlzdHJjcHkoKGNoYXIgKil0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCi0JCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKLQkJc3RyY3B5KChjaGFyICopdC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCXQtPnJhbmdlbG93ID0gNzcyOwkvKiA0OC4yNSBNSFogLyA2Mi41IGtIeiA9IDc3Miwgc2VlIGZpMTIxNm1rMi1zcGVjcywgcGFnZSAyICovCisJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCisJLyogRklYTUU6IGFkZCB0aGUgcmVhbCBzaWduYWwgc3RyZW5ndGggaGVyZSAqLworCXQtPnNpZ25hbCA9IDB4ZmZmZjsKKwl0LT5hZmMgPSAwOwogCi0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAotCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKLQkJdC0+cmFuZ2Vsb3cgPSA3NzI7CS8qIDQ4LjI1IE1IWiAvIDYyLjUga0h6ID0gNzcyLCBzZWUgZmkxMjE2bWsyLXNwZWNzLCBwYWdlIDIgKi8KLQkJdC0+cmFuZ2VoaWdoID0gMTM2ODQ7CS8qIDg1NS4yNSBNSHogLyA2Mi41IGtIeiA9IDEzNjg0ICovCi0JCS8qIEZJWE1FOiBhZGQgdGhlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIGhlcmUgKi8KLQkJdC0+c2lnbmFsID0gMHhmZmZmOwotCQl0LT5hZmMgPSAwOworCS8qIEZJWE1FOiBzdGFuZGFyZCAvIHN0ZXJlbyBkZXRlY3Rpb24gaXMgc3RpbGwgYnJva2VuICovCisJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfREVNLCAweDAwN2UsICZzdGVyZW9fZGV0KTsKKwlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBUViBzdGFuZGFyZCBkZXRlY3Rpb246IDB4JTA0eFxuIiwgc3RlcmVvX2RldCk7CisJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfRFNQLCAweDAwMTgsICZzdGVyZW9fZGV0KTsKKwlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBzdGVyZW8gZGV0ZWN0aW9uOiAweCUwNHhcbiIsIHN0ZXJlb19kZXQpOworCXN0ZXJlbyA9IChzOCkoc3RlcmVvX2RldCA+PiA4KTsKKwlpZiAoc3RlcmVvID4gMHgxMCkgeworCQkvKiBzdGVyZW8gKi8KKwkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87CisJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCX0gZWxzZSBpZiAoc3RlcmVvIDwgLTB4MTApIHsKKwkJLyogYmlsaW5ndWFsICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOworCX0gZWxzZSAvKiBtb25vICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCi0JCS8vIEZJWE1FOiBzdGFuZGFyZCAvIHN0ZXJlbyBkZXRlY3Rpb24gaXMgc3RpbGwgYnJva2VuCi0JCW1zcF9yZWFkcmVnKGF2NzExMCwgTVNQX1JEX0RFTSwgMHgwMDdlLCAmc3RlcmVvX2RldCk7Ci0JCWRwcmludGsoMSwgIlZJRElPQ19HX1RVTkVSOiBtc3AzNDAwIFRWIHN0YW5kYXJkIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKLQkJbXNwX3JlYWRyZWcoYXY3MTEwLCBNU1BfUkRfRFNQLCAweDAwMTgsICZzdGVyZW9fZGV0KTsKLQkJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IG1zcDM0MDAgc3RlcmVvIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKLQkJc3RlcmVvID0gKHM4KShzdGVyZW9fZGV0ID4+IDgpOwotCQlpZiAoc3RlcmVvID4gMHgxMCkgewotCQkJLyogc3RlcmVvICovCi0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPIHwgVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCQl9Ci0JCWVsc2UgaWYgKHN0ZXJlbyA8IC0weDEwKSB7Ci0JCQkvKiBiaWxpbmd1YWwgKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOwotCQkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQkJfQotCQllbHNlIC8qIG1vbm8gKi8KLQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCXJldHVybiAwOworfQogCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCXUxNiBmbV9tYXRyaXgsIHNyYzsKLQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6ICVkXG4iLCB0LT5pbmRleCk7CitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCXUxNiBmbV9tYXRyaXgsIHNyYzsKKwlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogJWRcbiIsIHQtPmluZGV4KTsKIAotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3dpdGNoICh0LT5hdWRtb2RlKSB7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfU1RFUkVPXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMTsgLy8gc3RlcmVvCi0JCQlzcmMgPSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gYmlsaW5ndWFsCi0JCQlzcmMgPSAweDAwMjA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gbW9ubwotCQkJc3JjID0gMHgwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMlxuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDA7IC8vIG1vbm8KLQkJCXNyYyA9IDB4MDAxMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiBjYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POiAqLwotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFREQTk4NDBfU0VUX01PTk9cbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBtb25vCi0JCQlzcmMgPSAweDAwMzA7Ci0JCQlicmVhazsKLQkJfQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGUsIGZtX21hdHJpeCk7Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOCwgc3JjKTsKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA5LCBzcmMpOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMGEsIHNyYyk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7Ci0KLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCQlmLT5mcmVxdWVuY3kgPQlhdjcxMTAtPmN1cnJlbnRfZnJlcTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCXsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOwotCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwMCwgMHhmZmUwKTsgLy8gZmFzdCBtdXRlCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHhmZmUwKTsKLQotCQkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCi0JCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9WRVMxODIwKSB7Ci0JCQl2ZXMxODIwX3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKLQkJfSBlbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KSB7Ci0JCQlzdHYwMjk3X3NldF90dl9mcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKLQkJfQotCQlhdjcxMTAtPmN1cnJlbnRfZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAzZik7IC8vIHN0YXJ0IHN0ZXJlbyBkZXRlY3Rpb24KLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDE1LCAweDAwMDApOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4NGYwMCk7IC8vIGxvdWRzcGVha2VyICsgaGVhZHBob25lCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHg0ZjAwKTsgLy8gU0NBUlQgMSB2b2x1bWUKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19FTlVNSU5QVVQ6ICVkXG4iLCBpLT5pbmRleCk7Ci0KLQkJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKSB7Ci0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IDQpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaS0+aW5kZXggIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW1lbWNweShpLCAmaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gKGludCAqKWFyZzsKLQkJKmlucHV0ID0gYXY3MTEwLT5jdXJyZW50X2lucHV0OwotCQlkcHJpbnRrKDIsICJWSURJT0NfR19JTlBVVDogJWRcbiIsICppbnB1dCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50IGlucHV0ID0gKihpbnQgKilhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX1NfSU5QVVQ6ICVkXG4iLCBpbnB1dCk7Ci0KLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKLQkJCXJldHVybiAwOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWF2NzExMC0+Y3VycmVudF9pbnB1dCA9IGlucHV0OwotCQlyZXR1cm4gYXY3MTEwX2R2Yl9jX3N3aXRjaChmaCk7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfR19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKLQkJaWYgKGEtPmluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWVtY3B5KGEsICZtc3AzNDAwX3Y0bDJfYXVkaW8sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXN3aXRjaCAodC0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9TVEVSRU9cbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDE7IC8qIHN0ZXJlbyAqLworCQlzcmMgPSAweDAwMjA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBiaWxpbmd1YWwgKi8KKwkJc3JjID0gMHgwMDIwOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMVxuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMDsgLyogbW9ubyAqLworCQlzcmMgPSAweDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX0xBTkcyXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBtb25vICovCisJCXNyYyA9IDB4MDAxMDsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzogKi8KKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFREQTk4NDBfU0VUX01PTk9cbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDA7IC8qIG1vbm8gKi8KKwkJc3JjID0gMHgwMDMwOwogCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NfU19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfU19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKLQkJYnJlYWs7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBlLCBmbV9tYXRyaXgpOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOCwgc3JjKTsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDksIHNyYyk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBhLCBzcmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIGYtPmZyZXF1ZW5jeSk7CisKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZi0+ZnJlcXVlbmN5ID0JYXY3MTEwLT5jdXJyZW50X2ZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOworCisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4ZmZlMCk7IC8qIGZhc3QgbXV0ZSAqLworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHhmZmUwKTsKKworCS8qIHR1bmUgaW4gZGVzaXJlZCBmcmVxdWVuY3kgKi8KKwlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfVkVTMTgyMCkKKwkJdmVzMTgyMF9zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7CisJZWxzZSBpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfU1RWMDI5NykKKwkJc3R2MDI5N19zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7CisJYXY3MTEwLT5jdXJyZW50X2ZyZXEgPSBmLT5mcmVxdWVuY3k7CisKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAzZik7IC8qIHN0YXJ0IHN0ZXJlbyBkZXRlY3Rpb24gKi8KKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMTUsIDB4MDAwMCk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDAwLCAweDRmMDApOyAvKiBsb3Vkc3BlYWtlciArIGhlYWRwaG9uZSAqLworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwNywgMHg0ZjAwKTsgLyogU0NBUlQgMSB2b2x1bWUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19FTlVNSU5QVVQ6ICVkXG4iLCBpLT5pbmRleCk7CisKKwlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpIHsKKwkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKGktPmluZGV4ICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXAgPSBhcmc7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKLQkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mICpjYXApOwotCQlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApID49IDB4MjYyMykgewotCQkJY2FwLT5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJfQotCQlicmVhazsKKworCW1lbWNweShpLCAmaW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJKmlucHV0ID0gYXY3MTEwLT5jdXJyZW50X2lucHV0OworCWRwcmludGsoMiwgIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfU19JTlBVVDogJWRcbiIsIGlucHV0KTsKKworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpCisJCXJldHVybiAwOworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSA0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF2NzExMC0+Y3VycmVudF9pbnB1dCA9IGlucHV0OworCXJldHVybiBhdjcxMTBfZHZiX2Nfc3dpdGNoKGZoKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWRwcmludGsoMiwgIlZJRElPQ19HX0FVRElPOiAlZFxuIiwgYS0+aW5kZXgpOworCWlmIChhLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1jcHkoYSwgJm1zcDM0MDBfdjRsMl9hdWRpbywgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlkcHJpbnRrKDIsICJWSURJT0NfU19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOworCWlmIChjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA+PSAweDI2MjMpIHsKKwkJY2FwLT5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWNhcC0+c2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJZHByaW50aygyLCAiVklESU9DX0dfRk1UOlxuIik7Ci0JCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgfHwKLQkJICAgIEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKLQkJCXJldHVybiAtRUFHQUlOOyAvKiBoYW5kbGVkIGJ5IGNvcmUgZHJpdmVyICovCi0JCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQlpZiAoYXY3MTEwLT53c3NNb2RlKSB7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mIChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOwotCQl9Ci0JCWJyZWFrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfR19GTVQ6XG4iKTsKKwlpZiAoRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKKwlpZiAoYXY3MTEwLT53c3NNb2RlKSB7CisJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7CiAJfQotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfU19GTVRcbiIpOwotCQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUIHx8Ci0JCSAgICBGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMpCi0JCQlyZXR1cm4gLUVBR0FJTjsgLyogaGFuZGxlZCBieSBjb3JlIGRyaXZlciAqLwotCQlpZiAoZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1ICYmCi0JCSAgICBmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdICE9IFY0TDJfU0xJQ0VEX1dTU182MjUpIHsKLQkJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQkJLyogV1NTIGNvbnRyb2xsZWQgYnkgZmlybXdhcmUgKi8KLQkJCWF2NzExMC0+d3NzTW9kZSA9IDA7Ci0JCQlhdjcxMTAtPndzc0RhdGEgPSAwOwotCQkJcmV0dXJuIGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsCi0JCQkJCSAgICAgU2V0V1NTQ29uZmlnLCAxLCAwKTsKLQkJfSBlbHNlIHsKLQkJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mIGYtPmZtdC5zbGljZWQpOwotCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZiAoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKLQkJCS8qIFdTUyBjb250cm9sbGVkIGJ5IHVzZXJzcGFjZSAqLwotCQkJYXY3MTEwLT53c3NNb2RlID0gMTsKLQkJCWF2NzExMC0+d3NzRGF0YSA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXByaW50aygibm8gc3VjaCBpb2N0bFxuIik7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19TX0ZNVFxuIik7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgIT0gVjRMMl9TTElDRURfV1NTXzYyNSAmJgorCSAgICBmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdICE9IFY0TDJfU0xJQ0VEX1dTU182MjUpIHsKKwkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZi0+Zm10LnNsaWNlZCkpOworCQkvKiBXU1MgY29udHJvbGxlZCBieSBmaXJtd2FyZSAqLworCQlhdjcxMTAtPndzc01vZGUgPSAwOworCQlhdjcxMTAtPndzc0RhdGEgPSAwOworCQlyZXR1cm4gYXY3MTEwX2Z3X2NtZChhdjcxMTAsIENPTVRZUEVfRU5DT0RFUiwKKwkJCQkgICAgIFNldFdTU0NvbmZpZywgMSwgMCk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YoZi0+Zm10LnNsaWNlZCkpOworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOworCQkvKiBXU1MgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgKi8KKwkJYXY3MTEwLT53c3NNb2RlID0gMTsKKwkJYXY3MTEwLT53c3NEYXRhID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MDksMjIgKzYxNyw2IEBACiAgKiBJTklUSUFMSVpBVElPTgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzIGlvY3Rsc1tdID0gewotCXsgVklESU9DX0VOVU1JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19UVU5FUiwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1RVTkVSLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfQVVESU8sCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19BVURJTywJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQLCBTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfRk1ULAkJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0ZNVCwJCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyAwLCAwIH0KLX07Ci0KIHN0YXRpYyB1OCBzYWE3MTEzX2luaXRfcmVnc1tdID0gewogCTB4MDIsIDB4ZDAsCiAJMHgwMywgMHgyMywKQEAgLTc4OCwyMCArNzgwLDM0IEBACiBpbnQgYXY3MTEwX2luaXRfdjRsKHN0cnVjdCBhdjcxMTAgKmF2NzExMCkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiA9IGF2NzExMC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X2V4dF92diAqdnZfZGF0YTsKIAlpbnQgcmV0OwogCiAJLyogc3BlY2lhbCBjYXNlIERWQi1DOiB0aGVzZSBjYXJkcyBoYXZlIGFuIGFuYWxvZyB0dW5lcgogCSAgIHBsdXMgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcsIHNvIHdlIGhhdmUgc2VwYXJhdGUKIAkgICBzYWE3MTQ2X2V4dF92diBkYXRhIGZvciB0aGVzZS4uLiAqLwogCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykKLQkJcmV0ID0gc2FhNzE0Nl92dl9pbml0KGRldiwgJmF2NzExMF92dl9kYXRhX2MpOworCQl2dl9kYXRhID0gJmF2NzExMF92dl9kYXRhX2M7CiAJZWxzZQotCQlyZXQgPSBzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmYXY3MTEwX3Z2X2RhdGFfc3QpOworCQl2dl9kYXRhID0gJmF2NzExMF92dl9kYXRhX3N0OworCXJldCA9IHNhYTcxNDZfdnZfaW5pdChkZXYsIHZ2X2RhdGEpOwogCiAJaWYgKHJldCkgewogCQlFUlIoKCJjYW5ub3QgaW5pdCBjYXB0dXJlIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwl2dl9kYXRhLT5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfdHVuZXIgPSB2aWRpb2NfZ190dW5lcjsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lcjsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5OworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3k7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2F1ZGlvID0gdmlkaW9jX2dfYXVkaW87CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX2F1ZGlvID0gdmlkaW9jX3NfYXVkaW87CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX3NsaWNlZF92YmlfY2FwID0gdmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXA7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dCA9IHZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX291dDsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0ID0gdmlkaW9jX3NfZm10X3NsaWNlZF92Ymlfb3V0OwogCiAJaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZhdjcxMTAtPnY0bF9kZXYsIGRldiwgImF2NzExMCIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CiAJCUVSUigoImNhbm5vdCByZWdpc3RlciBjYXB0dXJlIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CkBAIC05MDAsOSArOTA2LDYgQEAKIAkubnVtX3N0ZHMJPSBBUlJBWV9TSVpFKHN0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKIAotCS5pb2N0bHMJCT0gJmlvY3Rsc1swXSwKLQkuaW9jdGwJCT0gYXY3MTEwX2lvY3RsLAotCiAJLnZiaV9mb3BzLm9wZW4JPSBhdjcxMTBfdmJpX3Jlc2V0LAogCS52YmlfZm9wcy5yZWxlYXNlID0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMud3JpdGUJPSBhdjcxMTBfdmJpX3dyaXRlLApAQCAtOTE4LDkgKzkyMSw2IEBACiAJLm51bV9zdGRzCT0gQVJSQVlfU0laRShzdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCiAKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IGF2NzExMF9pb2N0bCwKLQogCS52YmlfZm9wcy5vcGVuCT0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMucmVsZWFzZSA9IGF2NzExMF92YmlfcmVzZXQsCiAJLnZiaV9mb3BzLndyaXRlCT0gYXY3MTEwX3ZiaV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggNDE4MjEyMS4uODU1ZmU3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTE0MDQsNiArMTQwNCw0MSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNkZWZpbmUgS05DMV9JTlBVVFMgMgorc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IGtuYzFfaW5wdXRzW0tOQzFfSU5QVVRTXSA9IHsKKwl7MCwgIkNvbXBvc2l0ZSIsIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiwgMSwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKKwl7MSwgIlMtVmlkZW8iLCBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBLCAyLCAwLCBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9OVFNDX00sIDB9LAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppKQoreworCWRwcmludGsoMSwgIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCk7CisJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBLTkMxX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtY3B5KGksICZrbmMxX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBidWRnZXRfYXYgKmJ1ZGdldF9hdiA9IChzdHJ1Y3QgYnVkZ2V0X2F2ICopZGV2LT5leHRfcHJpdjsKKworCSppID0gYnVkZ2V0X2F2LT5jdXJfaW5wdXQ7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYgPSAoc3RydWN0IGJ1ZGdldF9hdiAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCAlZC5cbiIsIGlucHV0KTsKKwlyZXR1cm4gc2FhNzExM19zZXRpbnB1dChidWRnZXRfYXYsIGlucHV0KTsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiBzdGF0aWMgaW50IGJ1ZGdldF9hdl9hdHRhY2goc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbykKQEAgLTE0NDIsNiArMTQ3Nyw5IEBACiAJCQlFUlIoKCJjYW5ub3QgaW5pdCB2diBzdWJzeXN0ZW0uXG4iKSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CisJCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CisJCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAKIAkJaWYgKChlcnIgPSBzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmYnVkZ2V0X2F2LT52ZCwgZGV2LCAia25jMSIsIFZGTF9UWVBFX0dSQUJCRVIpKSkgewogCQkJLyogZml4bWU6IHByb3BlciBjbGVhbnVwIGhlcmUgKi8KQEAgLTE0ODAsNTQgKzE1MTgsNiBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEtOQzFfSU5QVVRTIDIKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBrbmMxX2lucHV0c1tLTkMxX0lOUFVUU10gPSB7Ci0JezAsICJDb21wb3NpdGUiLCBWNEwyX0lOUFVUX1RZUEVfVFVORVIsIDEsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCi0JezEsICJTLVZpZGVvIiwgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwgMiwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzIGlvY3Rsc1tdID0gewotCXtWSURJT0NfRU5VTUlOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0Je1ZJRElPQ19HX0lOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0Je1ZJRElPQ19TX0lOUFVULCBTQUE3MTQ2X0VYQ0xVU0lWRX0sCi0JezAsIDB9Ci19OwotCi1zdGF0aWMgbG9uZyBhdl9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGJ1ZGdldF9hdiAqYnVkZ2V0X2F2ID0gKHN0cnVjdCBidWRnZXRfYXYgKikgZGV2LT5leHRfcHJpdjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOnsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJZHByaW50aygxLCAiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KTsKLQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBLTkMxX0lOUFVUUykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbWVtY3B5KGksICZrbmMxX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDp7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQotCQkqaW5wdXQgPSBidWRnZXRfYXYtPmN1cl9pbnB1dDsKLQotCQlkcHJpbnRrKDEsICJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOnsKLQkJaW50IGlucHV0ID0gKihpbnQgKikgYXJnOwotCQlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCAlZC5cbiIsIGlucHV0KTsKLQkJcmV0dXJuIHNhYTcxMTNfc2V0aW5wdXQoYnVkZ2V0X2F2LCBpbnB1dCk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgc3RhbmRhcmRbXSA9IHsKIAl7Lm5hbWUgPSAiUEFMIiwuaWQgPSBWNEwyX1NURF9QQUwsCiAJIC52X29mZnNldCA9IDB4MTcsLnZfZmllbGQgPSAyODgsCkBAIC0xNTQ2LDggKzE1MzYsNiBAQAogCS5mbGFncyA9IDAsCiAJLnN0ZHMgPSAmc3RhbmRhcmRbMF0sCiAJLm51bV9zdGRzID0gQVJSQVlfU0laRShzdGFuZGFyZCksCi0JLmlvY3RscyA9ICZpb2N0bHNbMF0sCi0JLmlvY3RsID0gYXZfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCmluZGV4IGJjYmM1ZDQuLjM3MWE3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jaS5jCkBAIC0xMDc2LDYgKzEwNzYsMTAgQEAKIAkuZGVsdGFmID0gMHhhNTExLAogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGE4Mjd4X2NvbmZpZyB0ZGE4Mjd4X2NvbmZpZyA9IHsKKwkuY29uZmlnID0gMCwKK307CisKIC8qIFRUIFMyLTMyMDAgRFZCLVMgKFNUQjA4OTkpIEluaXR0YWIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RiMDg5OV9zMV9yZWcgdHQzMjAwX3N0YjA4OTlfczFfaW5pdF8xW10gPSB7CiAKQEAgLTE0MTQsNyArMTQxOCw3IEBACiAJY2FzZSAweDEwMWE6IC8qIFRUIEJ1ZGdldC1DLTE1MDEgKHBoaWxpcHMgdGRhMTAwMjMvcGhpbGlwcyB0ZGE4Mjc0QSkgKi8KIAkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDAyM19hdHRhY2gsICZ0ZGExMDAyM19jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgMHg0OCk7CiAJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpIHsKLQkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4NjEsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgTlVMTCkgPT0gTlVMTCkgeworCQkJaWYgKGR2Yl9hdHRhY2godGRhODI3eF9hdHRhY2gsIGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgMHg2MSwgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwLCAmdGRhODI3eF9jb25maWcpID09IE5VTEwpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyB0ZGE4Mjd4IGZvdW5kIVxuIiwgX19mdW5jX18pOwogCQkJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKIAkJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwppbmRleCAyMDE0ZWJjLi5jYzU0ZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpAQCAtMzkwLDkgKzM5MCwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlVTQiIpOworCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwpAQCAtNDUwLDcgKzQ1MiwxMCBAQAogCWlmIChyYWRpby0+cmVtb3ZlZCkKIAkJcmV0dXJuIC1FSU87CiAKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKIAlyZXR2YWwgPSBkc2JyMTAwX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJnJhZGlvLT51c2JkZXYtPmRldiwgIlNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKQEAgLTYwMSw3ICs2MDYsMTAgQEAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+dXNlcnMgPSAwOworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCiAJaWYgKCFyYWRpby0+cmVtb3ZlZCkgewogCQlyZXR2YWwgPSBkc2JyMTAwX3N0b3AocmFkaW8pOwogCQlpZiAocmV0dmFsIDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCBiZmExM2I4Li5hYzgyZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMzIsMTQgKzMyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTwkqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKK01PRFVMRV9BVVRIT1IoIk0uS2lya3dvb2QiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1JUUkFDS19QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19SVFJBQ0tfUE9SVCAtMQpAQCAtNDcsODYgKzQ4LDk1IEBACiAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CiAKLXN0cnVjdCBydF9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwZiBvciAweDMwZikiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBydHJhY2sKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCWludCBwb3J0OwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlpbnQgaW87CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IHJ0cmFjayBydHJhY2tfY2FyZDsKIAogLyogbG9jYWwgdGhpbmdzICovCiAKIHN0YXRpYyB2b2lkIHNsZWVwX2RlbGF5KGxvbmcgbikKIHsKIAkvKiBTbGVlcCBuaWNlbHkgZm9yICduJyB1UyAqLwotCWludCBkPW4vbXNlY3NfdG9famlmZmllcygxMDAwKTsKLQlpZighZCkKKwlpbnQgZCA9IG4gLyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCWlmICghZCkKIAkJdWRlbGF5KG4pOwogCWVsc2UKIAkJbXNsZWVwKGppZmZpZXNfdG9fbXNlY3MoZCkpOwogfQogCi1zdGF0aWMgdm9pZCBydF9kZWN2b2wodm9pZCkKK3N0YXRpYyB2b2lkIHJ0X2RlY3ZvbChzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlvdXRiKDB4NTgsIGlvKTsJCS8qIHZvbHVtZSBkb3duICsgc2lnc3RyICsgb24JKi8KKwlvdXRiKDB4NTgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgZG93biArIHNpZ3N0ciArIG9uCSovCiAJc2xlZXBfZGVsYXkoMTAwMDAwKTsKLQlvdXRiKDB4ZDgsIGlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLworCW91dGIoMHhkOCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLwogfQogCi1zdGF0aWMgdm9pZCBydF9pbmN2b2wodm9pZCkKK3N0YXRpYyB2b2lkIHJ0X2luY3ZvbChzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlvdXRiKDB4OTgsIGlvKTsJCS8qIHZvbHVtZSB1cCArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweDk4LCBydC0+aW8pOwkJLyogdm9sdW1lIHVwICsgc2lnc3RyICsgb24JKi8KIAlzbGVlcF9kZWxheSgxMDAwMDApOwotCW91dGIoMHhkOCwgaW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweGQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiB9CiAKLXN0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlkZXYtPm11dGVkID0gMTsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiKDB4ZDAsIGlvKTsJCQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlydC0+bXV0ZWQgPSAxOworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsKKwlvdXRiKDB4ZDAsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgcnRfc2V0dm9sKHN0cnVjdCBydF9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgcnRfc2V0dm9sKHN0cnVjdCBydHJhY2sgKnJ0LCBpbnQgdm9sKQogewogCWludCBpOwogCi0JbXV0ZXhfbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmcnQtPmxvY2spOwogCi0JaWYodm9sID09IGRldi0+Y3Vydm9sKSB7CS8qIHJlcXVlc3RlZCB2b2x1bWUgPSBjdXJyZW50ICovCi0JCWlmIChkZXYtPm11dGVkKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgICovCi0JCQlkZXYtPm11dGVkID0gMDsKLQkJCW91dGIgKDB4ZDgsIGlvKTsJLyogZW5hYmxlIGNhcmQgKi8KKwlpZiAodm9sID09IHJ0LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KKwkJaWYgKHJ0LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLworCQkJcnQtPm11dGVkID0gMDsKKwkJCW91dGIoMHhkOCwgcnQtPmlvKTsJLyogZW5hYmxlIGNhcmQgKi8KIAkJfQotCQltdXRleF91bmxvY2soJmxvY2spOworCQltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYodm9sID09IDApIHsJCQkvKiB2b2x1bWUgPSAwIG1lYW5zIG11dGUgdGhlIGNhcmQgKi8KLQkJb3V0YigweDQ4LCBpbyk7CQkvKiB2b2x1bWUgZG93biBidXQgc3RpbGwgIm9uIgkqLworCWlmICh2b2wgPT0gMCkgewkJCS8qIHZvbHVtZSA9IDAgbWVhbnMgbXV0ZSB0aGUgY2FyZCAqLworCQlvdXRiKDB4NDgsIHJ0LT5pbyk7CS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCiAJCXNsZWVwX2RlbGF5KDIwMDAwMDApOwkvKiBtYWtlIHN1cmUgaXQncyB0b3RhbGx5IGRvd24JKi8KLQkJb3V0YigweGQwLCBpbyk7CQkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCi0JCWRldi0+Y3Vydm9sID0gMDsJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KLQkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkJb3V0YigweGQwLCBydC0+aW8pOwkvKiB2b2x1bWUgc3RlYWR5LCBvZmYJCSovCisJCXJ0LT5jdXJ2b2wgPSAwOwkJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KKwkJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAotCWRldi0+bXV0ZWQgPSAwOwotCWlmKHZvbCA+IGRldi0+Y3Vydm9sKQotCQlmb3IoaSA9IGRldi0+Y3Vydm9sOyBpIDwgdm9sOyBpKyspCi0JCQlydF9pbmN2b2woKTsKKwlydC0+bXV0ZWQgPSAwOworCWlmICh2b2wgPiBydC0+Y3Vydm9sKQorCQlmb3IgKGkgPSBydC0+Y3Vydm9sOyBpIDwgdm9sOyBpKyspCisJCQlydF9pbmN2b2wocnQpOwogCWVsc2UKLQkJZm9yKGkgPSBkZXYtPmN1cnZvbDsgaSA+IHZvbDsgaS0tKQotCQkJcnRfZGVjdm9sKCk7CisJCWZvciAoaSA9IHJ0LT5jdXJ2b2w7IGkgPiB2b2w7IGktLSkKKwkJCXJ0X2RlY3ZvbChydCk7CiAKLQlkZXYtPmN1cnZvbCA9IHZvbDsKLQltdXRleF91bmxvY2soJmxvY2spOworCXJ0LT5jdXJ2b2wgPSB2b2w7CisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNSwxNTUgKzE0NSwxMzcgQEAKICAqIGFuZCBiaXQgNCAoKzE2KSBpcyB0byBrZWVwIHRoZSBzaWduYWwgc3RyZW5ndGggbWV0ZXIgZW5hYmxlZAogICovCiAKLXN0YXRpYyB2b2lkIHNlbmRfMF9ieXRlKGludCBwb3J0LCBzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZShzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlpZiAoKGRldi0+Y3Vydm9sID09IDApIHx8IChkZXYtPm11dGVkKSkgewotCQlvdXRiX3AoMTI4KzY0KzE2KyAgMSwgcG9ydCk7ICAgLyogd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNisyKzEsIHBvcnQpOyAgIC8qIGNsb2NrICovCisJaWYgKHJ0LT5jdXJ2b2wgPT0gMCB8fCBydC0+bXV0ZWQpIHsKKwkJb3V0Yl9wKDEyOCs2NCsxNisgIDEsIHJ0LT5pbyk7ICAgLyogd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNisyKzEsIHJ0LT5pbyk7ICAgLyogY2xvY2sgKi8KIAl9CiAJZWxzZSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrOCsgIDEsIHBvcnQpOyAgLyogb24gKyB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzgrMisxLCBwb3J0KTsgIC8qIGNsb2NrICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCsgIDEsIHJ0LT5pbyk7ICAvKiBvbiArIHdyLWVuYWJsZSArIGRhdGEgbG93ICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCsyKzEsIHJ0LT5pbyk7ICAvKiBjbG9jayAqLwogCX0KIAlzbGVlcF9kZWxheSgxMDAwKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUoaW50IHBvcnQsIHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMV9ieXRlKHN0cnVjdCBydHJhY2sgKnJ0KQogewotCWlmICgoZGV2LT5jdXJ2b2wgPT0gMCkgfHwgKGRldi0+bXV0ZWQpKSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrNCAgKzEsIHBvcnQpOyAgIC8qIHdyLWVuYWJsZStkYXRhIGhpZ2ggKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNis0KzIrMSwgcG9ydCk7ICAgLyogY2xvY2sgKi8KKwlpZiAocnQtPmN1cnZvbCA9PSAwIHx8IHJ0LT5tdXRlZCkgeworCQlvdXRiX3AoMTI4KzY0KzE2KzQgICsxLCBydC0+aW8pOyAgIC8qIHdyLWVuYWJsZStkYXRhIGhpZ2ggKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis0KzIrMSwgcnQtPmlvKTsgICAvKiBjbG9jayAqLwogCX0KIAllbHNlIHsKLQkJb3V0Yl9wKDEyOCs2NCsxNis4KzQgICsxLCBwb3J0KTsgLyogb24rd3ItZW5hYmxlK2RhdGEgaGlnaCAqLwotCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCsyKzEsIHBvcnQpOyAvKiBjbG9jayAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzgrNCAgKzEsIHJ0LT5pbyk7IC8qIG9uK3dyLWVuYWJsZStkYXRhIGhpZ2ggKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis4KzQrMisxLCBydC0+aW8pOyAvKiBjbG9jayAqLwogCX0KIAogCXNsZWVwX2RlbGF5KDEwMDApOwogfQogCi1zdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0cmFjayAqcnQsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKIAlpbnQgaTsKIAotCS8qIGFkYXB0ZWQgZnJvbSByYWRpby1henRlY2guYyAqLworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsJCQkvKiBTdG9wIG90aGVyIG9wcyBpbnRlcmZlcmluZyAqLworCisJcnQtPmN1cmZyZXEgPSBmcmVxOwogCiAJLyogbm93IHVzZXMgVklERU9fVFVORVJfTE9XIGZvciBmaW5lIHR1bmluZyAqLwogCiAJZnJlcSArPSAxNzEyMDA7CQkJLyogQWRkIDEwLjcgTUh6IElGIAkJKi8KIAlmcmVxIC89IDgwMDsJCQkvKiBDb252ZXJ0IHRvIDUwIGtIeiB1bml0cwkqLwogCi0JbXV0ZXhfbG9jaygmbG9jayk7CQkJLyogU3RvcCBvdGhlciBvcHMgaW50ZXJmZXJpbmcgKi8KLQotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5CQkqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5CQkqLwogCiAJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspCS8qICAgOiBmcmVxdWVuY3kgYml0cyAoMS0xMykJKi8KIAkJaWYgKGZyZXEgJiAoMSA8PCBpKSkKLQkJCXNlbmRfMV9ieXRlIChpbywgZGV2KTsKKwkJCXNlbmRfMV9ieXRlKHJ0KTsKIAkJZWxzZQotCQkJc2VuZF8wX2J5dGUgKGlvLCBkZXYpOworCQkJc2VuZF8wX2J5dGUocnQpOwogCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTQ6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTU6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KIAotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE2OiBiYW5kIGRhdGEgMCAtIGFsd2F5cyAwICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTc6IGJhbmQgZGF0YSAxIC0gYWx3YXlzIDAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxODogYmFuZCBkYXRhIDIgLSBhbHdheXMgMCAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxNzogYmFuZCBkYXRhIDEgLSBhbHdheXMgMCAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE4OiBiYW5kIGRhdGEgMiAtIGFsd2F5cyAwICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTk6IHRpbWUgYmFzZSAtIGFsd2F5cyAwICAgKi8KIAotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDIwOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCi0Jc2VuZF8xX2J5dGUgKGlvLCBkZXYpOwkJLyogMjE6IHNwYWNpbmcgKDEgPSAyNSBrSHopICAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChpbywgZGV2KTsJCS8qIDIzOiBBTS9GTSAoRk0gPSAxLCBhbHdheXMpICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShydCk7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUocnQpOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KIAotCWlmICgoZGV2LT5jdXJ2b2wgPT0gMCkgfHwgKGRldi0+bXV0ZWQpKQotCQlvdXRiICgweGQwLCBpbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKi8KKwlpZiAocnQtPmN1cnZvbCA9PSAwIHx8IHJ0LT5tdXRlZCkKKwkJb3V0YigweGQwLCBydC0+aW8pOwkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICovCiAJZWxzZQotCQlvdXRiICgweGQ4LCBpbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbiAqLworCQlvdXRiKDB4ZDgsIHJ0LT5pbyk7CS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbiAqLwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLwotfQorCWludCBzaWcgPSAxOwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMHhmZiwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsKKwlpZiAoaW5iKHJ0LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KKwkJc2lnID0gMDsKKwltdXRleF91bmxvY2soJnJ0LT5sb2NrKTsKKwlyZXR1cm4gc2lnOworfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1haW1zbGFiIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlJhZGlvVHJhY2siLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4ZmZmZipydF9nZXRzaWdzdHIocnQpOworCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIHJ0X2dldHNpZ3N0cihydCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlydC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlydF9zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CisJcnRfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0yOTMsMTQgKzI4NSwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmYsIDEsIDB4ZmYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMwOCwxNCArMjk3LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWN0cmwtPnZhbHVlID0gcnQtPm11dGVkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBydC0+Y3Vydm9sICogNjU1NDsKKwkJY3RybC0+dmFsdWUgPSBydC0+Y3Vydm9sOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjQsMzMgKzMxMywyMiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCiAJCQlydF9tdXRlKHJ0KTsKIAkJZWxzZQotCQkJcnRfc2V0dm9sKHJ0LHJ0LT5jdXJ2b2wpOworCQkJcnRfc2V0dm9sKHJ0LCBydC0+Y3Vydm9sKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJ0X3NldHZvbChydCxjdHJsLT52YWx1ZSk7CisJCXJ0X3NldHZvbChydCwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzU5LDM2ICszMzcsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcnRyYWNrX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRfZGV2aWNlIHJ0cmFja191bml0OwotCi1zdGF0aWMgaW50IHJ0cmFja19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcnRyYWNrX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHJ0cmFja19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJnJ0cmFja191bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcnRyYWNrX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHJ0cmFja19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBydHJhY2tfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gcnRyYWNrX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQwNyw2NCArMzg3LDY5IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBydHJhY2tfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlJhZGlvVHJhY2sgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZydHJhY2tfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZydHJhY2tfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBydHJhY2tfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gJnJ0cmFja19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmcnQtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAicnRyYWNrIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJcnQtPmlvID0gaW87CisKKwlpZiAocnQtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAieW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGYgb3IgMHgzMGZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicnRyYWNrIikpCi0JewotCQlwcmludGsoS0VSTl9FUlIgInJ0cmFjazogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihydC0+aW8sIDIsICJydHJhY2siKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgcnQtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmcnRyYWNrX3JhZGlvLCAmcnRyYWNrX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihydC0+aW8sIDIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnRyYWNrX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RybGNweShydC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHJ0LT52ZGV2Lm5hbWUpKTsKKwlydC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXJ0LT52ZGV2LmZvcHMgPSAmcnRyYWNrX2ZvcHM7CisJcnQtPnZkZXYuaW9jdGxfb3BzID0gJnJ0cmFja19pb2N0bF9vcHM7CisJcnQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZydC0+dmRldiwgcnQpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnQtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnJ0LT52NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKHJ0LT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJBSU1TbGFiIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBSU1TbGFiIFJhZGlvVHJhY2svUmFkaW9SZXZlYWwgY2FyZCBkcml2ZXIuXG4iKTsKIAogCS8qIFNldCB1cCB0aGUgSS9PIGxvY2tpbmcgKi8KIAotCW11dGV4X2luaXQoJmxvY2spOworCW11dGV4X2luaXQoJnJ0LT5sb2NrKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KIAogCS8qIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYWxsIHRoZSB3YXkgZG93biAgKi8KLQlvdXRiKDB4NDgsIGlvKTsJCS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCisJb3V0YigweDQ4LCBydC0+aW8pOwkJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KIAlzbGVlcF9kZWxheSgyMDAwMDAwKTsJLyogbWFrZSBzdXJlIGl0J3MgdG90YWxseSBkb3duCSovCi0Jb3V0YigweGMwLCBpbyk7CQkvKiBzdGVhZHkgdm9sdW1lLCBtdXRlIGNhcmQJKi8KLQlydHJhY2tfdW5pdC5jdXJ2b2wgPSAwOworCW91dGIoMHhjMCwgcnQtPmlvKTsJCS8qIHN0ZWFkeSB2b2x1bWUsIG11dGUgY2FyZAkqLwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIk0uS2lya3dvb2QiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwZiBvciAweDMwZikiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcnRyYWNrX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHJ0cmFja19leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFja19yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IHJ0cmFjayAqcnQgPSAmcnRyYWNrX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmcnQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnJ0LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24ocnQtPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQocnRyYWNrX2luaXQpOwotbW9kdWxlX2V4aXQoY2xlYW51cF9ydHJhY2tfbW9kdWxlKTsKK21vZHVsZV9leGl0KHJ0cmFja19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKaW5kZXggNTYwNGU4OC4uNDkyOTlmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCkBAIC0yOSwzMyArMjksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMHhmZiwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBenRlY2ggcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogYWNjZXB0YWJsZSBwb3J0czogMHgzNTAgKEpQMyBzaG9ydGVkKSwgMHgzNTggKEpQMyBvcGVuKSAqLwogCkBAIC02Niw1NSArNDgsNjQgQEAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fQVpURUNIX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiBzdGF0aWMgaW50IHJhZGlvX3dhaXRfdGltZSA9IDEwMDA7Ci1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7CiAKLXN0cnVjdCBhel9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgQXp0ZWNoIGNhcmQgKDB4MzUwIG9yIDB4MzU4KSIpOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IGF6dGVjaAogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBzdGVyZW87CisJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgc3RydWN0IGF6dGVjaCBhenRlY2hfY2FyZDsKKwogc3RhdGljIGludCB2b2xjb252ZXJ0KGludCBsZXZlbCkKIHsKLQlsZXZlbD4+PTE0OwkJLyogTWFwIDE2Yml0cyBkb3duIHRvIDIgYml0ICovCi0JbGV2ZWwmPTM7CisJbGV2ZWwgPj49IDE0OwkJLyogTWFwIDE2Yml0cyBkb3duIHRvIDIgYml0ICovCisJbGV2ZWwgJj0gMzsKIAogCS8qIGNvbnZlcnQgdG8gY2FyZC1mcmllbmRseSB2YWx1ZXMgKi8KLQlzd2l0Y2ggKGxldmVsKQotCXsKLQkJY2FzZSAwOgotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMToKLQkJCXJldHVybiAxOwotCQljYXNlIDI6Ci0JCQlyZXR1cm4gNDsKLQkJY2FzZSAzOgotCQkJcmV0dXJuIDU7CisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIDA7CisJY2FzZSAxOgorCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCXJldHVybiA0OworCWNhc2UgMzoKKwkJcmV0dXJuIDU7CiAJfQogCXJldHVybiAwOwkvKiBRdWlldGVuIGdjYyAqLwogfQogCi1zdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZSAoc3RydWN0IGF6X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2VuZF8wX2J5dGUoc3RydWN0IGF6dGVjaCAqYXopCiB7CiAJdWRlbGF5KHJhZGlvX3dhaXRfdGltZSk7Ci0Jb3V0Yl9wKDIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKLQlvdXRiX3AoNjQrMit2b2xjb252ZXJ0KGRldi0+Y3Vydm9sKSwgaW8pOworCW91dGJfcCgyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKKwlvdXRiX3AoNjQgKyAyICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF8xX2J5dGUgKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMV9ieXRlKHN0cnVjdCBhenRlY2ggKmF6KQogewogCXVkZWxheSAocmFkaW9fd2FpdF90aW1lKTsKLQlvdXRiX3AoMTI4KzIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKLQlvdXRiX3AoMTI4KzY0KzIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKKwlvdXRiX3AoMTI4ICsgMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CisJb3V0Yl9wKDEyOCArIDY0ICsgMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CiB9CiAKLXN0YXRpYyBpbnQgYXpfc2V0dm9sKHN0cnVjdCBhel9kZXZpY2UgKmRldiwgaW50IHZvbCkKK3N0YXRpYyBpbnQgYXpfc2V0dm9sKHN0cnVjdCBhenRlY2ggKmF6LCBpbnQgdm9sKQogewotCW11dGV4X2xvY2soJmxvY2spOwotCW91dGIgKHZvbGNvbnZlcnQodm9sKSwgaW8pOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCW91dGIodm9sY29udmVydCh2b2wpLCBhei0+aW8pOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjYsMTE2ICsxMTcsMTEwIEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgYXpfZ2V0c2lnc3RyKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXpfZ2V0c2lnc3RyKHN0cnVjdCBhenRlY2ggKmF6KQogewotCWlmIChpbmIoaW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50ICovCi0JCXJldHVybiAwOwotCXJldHVybiAxOwkJLyogc2lnbmFsIHByZXNlbnQgKi8KKwlpbnQgc2lnID0gMTsKKworCW11dGV4X2xvY2soJmF6LT5sb2NrKTsKKwlpZiAoaW5iKGF6LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQgKi8KKwkJc2lnID0gMDsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCi1zdGF0aWMgaW50IGF6X2dldHN0ZXJlbyhzdHJ1Y3QgYXpfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF6X2dldHN0ZXJlbyhzdHJ1Y3QgYXp0ZWNoICpheikKIHsKLQlpZiAoaW5iKGlvKSAmIDEpIAkvKiBiaXQgc2V0ID0gbW9ubyAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHN0ZXJlbyAqLworCWludCBzdGVyZW8gPSAxOworCisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCWlmIChpbmIoYXotPmlvKSAmIDEpIAkvKiBiaXQgc2V0ID0gbW9ubyAqLworCQlzdGVyZW8gPSAwOworCW11dGV4X3VubG9jaygmYXotPmxvY2spOworCXJldHVybiBzdGVyZW87CiB9CiAKLXN0YXRpYyBpbnQgYXpfc2V0ZnJlcShzdHJ1Y3QgYXpfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQorc3RhdGljIGludCBhel9zZXRmcmVxKHN0cnVjdCBhenRlY2ggKmF6LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKIAlpbnQgIGk7CiAKKwltdXRleF9sb2NrKCZhei0+bG9jayk7CisKKwlhei0+Y3VyZnJlcSA9IGZyZXF1ZW5jeTsKIAlmcmVxdWVuY3kgKz0gMTcxMjAwOwkJLyogQWRkIDEwLjcgTUh6IElGCQkqLwogCWZyZXF1ZW5jeSAvPSA4MDA7CQkvKiBDb252ZXJ0IHRvIDUwIGtIeiB1bml0cwkqLwogCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5ICAgICAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogIDA6IExTQiBvZiBmcmVxdWVuY3kgICAgICAgKi8KIAogCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQkvKiAgIDogZnJlcXVlbmN5IGJpdHMgKDEtMTMpICAqLwogCQlpZiAoZnJlcXVlbmN5ICYgKDEgPDwgaSkpCi0JCQlzZW5kXzFfYnl0ZSAoZGV2KTsKKwkJCXNlbmRfMV9ieXRlKGF6KTsKIAkJZWxzZQotCQkJc2VuZF8wX2J5dGUgKGRldik7CisJCQlzZW5kXzBfYnl0ZShheik7CiAKLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KLQlpZiAoZGV2LT5zdGVyZW8pCQkvKiAxNzogc3RlcmVvICgxIHRvIGVuYWJsZSkgICAqLwotCQlzZW5kXzFfYnl0ZSAoZGV2KTsKKwlzZW5kXzBfYnl0ZShheik7CQkvKiAxNDogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE1OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMTY6IGJhbmQgZGF0YSAwIC0gYWx3YXlzIDAgKi8KKwlpZiAoYXotPnN0ZXJlbykJCS8qIDE3OiBzdGVyZW8gKDEgdG8gZW5hYmxlKSAgICovCisJCXNlbmRfMV9ieXRlKGF6KTsKIAllbHNlCi0JCXNlbmRfMF9ieXRlIChkZXYpOworCQlzZW5kXzBfYnl0ZShheik7CiAKLQlzZW5kXzFfYnl0ZSAoZGV2KTsJCS8qIDE4OiBiYW5kIGRhdGEgMSAtIHVua25vd24gICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxOTogdGltZSBiYXNlIC0gYWx3YXlzIDAgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KLQlzZW5kXzFfYnl0ZSAoZGV2KTsJCS8qIDIxOiBzcGFjaW5nICgxID0gMjUga0h6KSAgICovCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChkZXYpOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KKwlzZW5kXzFfYnl0ZShheik7CQkvKiAxODogYmFuZCBkYXRhIDEgLSB1bmtub3duICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCisJc2VuZF8wX2J5dGUoYXopOwkJLyogMjA6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KKwlzZW5kXzFfYnl0ZShheik7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDIyOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUoYXopOwkJLyogMjM6IEFNL0ZNIChGTSA9IDEsIGFsd2F5cykgKi8KIAogCS8qIGxhdGNoIGZyZXF1ZW5jeSAqLwogCi0JdWRlbGF5IChyYWRpb193YWl0X3RpbWUpOwotCW91dGJfcCgxMjgrNjQrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKKwl1ZGVsYXkocmFkaW9fd2FpdF90aW1lKTsKKwlvdXRiX3AoMTI4ICsgNjQgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYXp0ZWNoIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQlzdHJsY3B5KHYtPmNhcmQsICJBenRlY2ggUmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWF6dGVjaCIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJBenRlY2ggUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCXYtPnJhbmdlbG93PSg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoPSgxMDgqMTYwMDApOwotCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmKGF6X2dldHN0ZXJlbyhheikpCisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYgKGF6X2dldHN0ZXJlbyhheikpCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbD0weEZGRkYqYXpfZ2V0c2lnc3RyKGF6KTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiBhel9nZXRzaWdzdHIoYXopOwogCiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCB2aWRpb2Nfc190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQpAQCAtMjQ2LDExMyArMjMxLDEwNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOwogfQogCi0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQorCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWF6LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWF6X3NldGZyZXEoYXosIGF6LT5jdXJmcmVxKTsKKwlhel9zZXRmcmVxKGF6LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuICgwKTsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmYsIDEsIDB4ZmYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWlmIChhei0+Y3Vydm9sPT0wKQotCQkJCWN0cmwtPnZhbHVlPTE7Ci0JCQllbHNlCi0JCQkJY3RybC0+dmFsdWU9MDsKLQkJCXJldHVybiAoMCk7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY3RybC0+dmFsdWU9YXotPmN1cnZvbCAqIDY1NTQ7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGF6LT5jdXJ2b2wgPT0gMCkKKwkJCWN0cmwtPnZhbHVlID0gMTsKKwkJZWxzZQorCQkJY3RybC0+dmFsdWUgPSAwOworCQlyZXR1cm4gMDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBhei0+Y3Vydm9sICogNjU1NDsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGF6X2RldmljZSAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJaWYgKGN0cmwtPnZhbHVlKSB7Ci0JCQkJYXpfc2V0dm9sKGF6LDApOwotCQkJfSBlbHNlIHsKLQkJCQlhel9zZXR2b2woYXosYXotPmN1cnZvbCk7Ci0JCQl9Ci0JCQlyZXR1cm4gKDApOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCWF6X3NldHZvbChheixjdHJsLT52YWx1ZSk7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKGN0cmwtPnZhbHVlKQorCQkJYXpfc2V0dm9sKGF6LCAwKTsKKwkJZWxzZQorCQkJYXpfc2V0dm9sKGF6LCBhei0+Y3Vydm9sKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWF6X3NldHZvbChheiwgY3RybC0+dmFsdWUpOworCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXpfZGV2aWNlIGF6dGVjaF91bml0OwotCi1zdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgYXp0ZWNoX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmF6dGVjaF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF6dGVjaF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgYXp0ZWNoX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZhenRlY2hfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGF6dGVjaF9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBhenRlY2hfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gYXp0ZWNoX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGF6dGVjaF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IGF6dGVjaF9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zNzEsNTcgKzM1MCw2MCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgYXp0ZWNoX3JhZGlvID0gewotCS5uYW1lCQk9ICJBenRlY2ggcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZhenRlY2hfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZhenRlY2hfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsYXp0ZWNoX3JhZGlvLmRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKLQogc3RhdGljIGludCBfX2luaXQgYXp0ZWNoX2luaXQodm9pZCkKIHsKLQlpZihpbz09LTEpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9ICZhenRlY2hfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmF6LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgImF6dGVjaCIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWF6LT5pbyA9IGlvOworCisJaWYgKGF6LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzUwIG9yIDB4MzU4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgImF6dGVjaCIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJhenRlY2g6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24oYXotPmlvLCAyLCAiYXp0ZWNoIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGF6LT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JbXV0ZXhfaW5pdCgmbG9jayk7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJmF6dGVjaF9yYWRpbywgJmF6dGVjaF91bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sMik7CisJbXV0ZXhfaW5pdCgmYXotPmxvY2spOworCXN0cmxjcHkoYXotPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihhei0+dmRldi5uYW1lKSk7CisJYXotPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlhei0+dmRldi5mb3BzID0gJmF6dGVjaF9mb3BzOworCWF6LT52ZGV2LmlvY3RsX29wcyA9ICZhenRlY2hfaW9jdGxfb3BzOworCWF6LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmYXotPnZkZXYsIGF6KTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmF6LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQXp0ZWNoIHJhZGlvIGNhcmQgZHJpdmVyIHYxLjAwLzE5OTkwMjI0IHJrcm9sbEBleHBsb2l0cy5vcmdcbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkF6dGVjaCByYWRpbyBjYXJkIGRyaXZlciB2MS4wMC8xOTk5MDIyNCBya3JvbGxAZXhwbG9pdHMub3JnXG4iKTsKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0Jb3V0YiAoMCwgaW8pOworCW91dGIoMCwgYXotPmlvKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBenRlY2ggcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBBenRlY2ggY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhenRlY2hfY2xlYW51cCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGF6dGVjaF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmF6dGVjaF9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IGF6dGVjaCAqYXogPSAmYXp0ZWNoX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmYXotPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmF6LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oYXotPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQoYXp0ZWNoX2luaXQpOwotbW9kdWxlX2V4aXQoYXp0ZWNoX2NsZWFudXApOworbW9kdWxlX2V4aXQoYXp0ZWNoX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IGNiMzA3NWEuLmQzMGZjMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKQEAgLTM1LDMzMyArMzUsMzE4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyogVjRMMiBBUEkgZGVmcwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCitNT0RVTEVfQVVUSE9SKCJGcmVkIEdsZWFzb24sIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgQURTIENhZGV0IEFNL0ZNL1JEUyByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IGlvID0gLTE7CQkvKiBkZWZhdWx0IHRvIGlzYXBucCBhY3RpdmF0aW9uICovCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiBDYWRldCBjYXJkICgweDMzMCwweDMzMiwweDMzNCwweDMzNiwweDMzOCwweDMzYSwweDMzYywweDMzZSkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBDQURFVF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDMsIDMpCiAKICNkZWZpbmUgUkRTX0JVRkZFUiAyNTYKICNkZWZpbmUgUkRTX1JYX0ZMQUcgMQogI2RlZmluZSBNQlNfUlhfRkxBRyAyCiAKLSNkZWZpbmUgQ0FERVRfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDMsMykKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQorc3RydWN0IGNhZGV0IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKKwlpbnQgdXNlcnM7CisJaW50IGN1cnR1bmVyOworCWludCB0dW5lc3RhdDsKKwlpbnQgc2lnc3RyZW5ndGg7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCByZWFkdGltZXI7CisJX191OCByZHNpbiwgcmRzb3V0LCByZHNzdGF0OworCXVuc2lnbmVkIGNoYXIgcmRzYnVmW1JEU19CVUZGRVJdOworCXN0cnVjdCBtdXRleCBsb2NrOworCWludCByZWFkaW5nOwogfTsKIAotc3RhdGljIGludCBpbz0tMTsJCS8qIGRlZmF1bHQgdG8gaXNhcG5wIGFjdGl2YXRpb24gKi8KLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBpbnQgdXNlcnM7Ci1zdGF0aWMgaW50IGN1cnR1bmVyOwotc3RhdGljIGludCB0dW5lc3RhdDsKLXN0YXRpYyBpbnQgc2lnc3RyZW5ndGg7Ci1zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF9xdWV1ZTsKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCByZWFkdGltZXI7Ci1zdGF0aWMgX191OCByZHNpbiwgcmRzb3V0LCByZHNzdGF0Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmRzYnVmW1JEU19CVUZGRVJdOwotc3RhdGljIHNwaW5sb2NrX3QgY2FkZXRfaW9fbG9jazsKLQotc3RhdGljIGludCBjYWRldF9wcm9iZSh2b2lkKTsKK3N0YXRpYyBzdHJ1Y3QgY2FkZXQgY2FkZXRfY2FyZDsKIAogLyoKICAqIFNpZ25hbCBTdHJlbmd0aCBUaHJlc2hvbGQgVmFsdWVzCiAgKiBUaGUgVjRMIEFQSSBzcGVjIGRvZXMgbm90IGRlZmluZSBhbnkgcGFydGljdWxhciB1bml0IGZvciB0aGUgc2lnbmFsCiAgKiBzdHJlbmd0aCB2YWx1ZS4gIFRoZXNlIHZhbHVlcyBhcmUgaW4gbWljcm92b2x0cyBvZiBSRiBhdCB0aGUgdHVuZXIncyBpbnB1dC4KICAqLwotc3RhdGljIF9fdTE2IHNpZ3RhYmxlWzJdWzRdPXt7NSwxMCwzMCwxNTB9LHsyOCw0MCw2MywxMDAwfX07CitzdGF0aWMgX191MTYgc2lndGFibGVbMl1bNF0gPSB7CisJeyAgNSwgMTAsIDMwLCAgMTUwIH0sCisJeyAyOCwgNDAsIDYzLCAxMDAwIH0KK307CiAKIAotc3RhdGljIGludAotY2FkZXRfZ2V0c3RlcmVvKHZvaWQpCitzdGF0aWMgaW50IGNhZGV0X2dldHN0ZXJlbyhzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgcmV0ID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQlpZihjdXJ0dW5lciAhPSAwKQkvKiBPbmx5IEZNIGhhcyBzdGVyZW8gY2FwYWJpbGl0eSEgKi8KKworCWlmIChkZXYtPmN1cnR1bmVyICE9IDApCS8qIE9ubHkgRk0gaGFzIHN0ZXJlbyBjYXBhYmlsaXR5ISAqLwogCQlyZXR1cm4gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0Jb3V0Yig3LGlvKTsgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQlpZiggKGluYihpbysxKSAmIDB4NDApID09IDApCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICgoaW5iKGRldi0+aW8gKyAxKSAmIDB4NDApID09IDApCiAJCXJldCA9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAotY2FkZXRfZ2V0dHVuZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNhZGV0X2dldHR1bmUoc3RydWN0IGNhZGV0ICpkZXYpCiB7Ci0JaW50IGN1cnZvbCxpOwotCXVuc2lnbmVkIGZpZm89MDsKKwlpbnQgY3Vydm9sLCBpOworCXVuc2lnbmVkIGZpZm8gPSAwOwogCiAJLyoKIAkgKiBQcmVwYXJlIGZvciByZWFkCiAJICovCiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlvdXRiKDcsaW8pOyAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWN1cnZvbD1pbmIoaW8rMSk7IC8qIFNhdmUgY3VycmVudCB2b2x1bWUvbXV0ZSBzZXR0aW5nICovCi0Jb3V0YigweDAwLGlvKzEpOyAgLyogRW5zdXJlIFdSSVRFLUVOQUJMRSBpcyBMT1cgKi8KLQl0dW5lc3RhdD0weGZmZmY7CisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwljdXJ2b2wgPSBpbmIoZGV2LT5pbyArIDEpOyAvKiBTYXZlIGN1cnJlbnQgdm9sdW1lL211dGUgc2V0dGluZyAqLworCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOyAgLyogRW5zdXJlIFdSSVRFLUVOQUJMRSBpcyBMT1cgKi8KKwlkZXYtPnR1bmVzdGF0ID0gMHhmZmZmOwogCiAJLyoKIAkgKiBSZWFkIHRoZSBzaGlmdCByZWdpc3RlcgogCSAqLwotCWZvcihpPTA7aTwyNTtpKyspIHsKLQkJZmlmbz0oZmlmbzw8MSl8KChpbmIoaW8rMSk+PjcpJjB4MDEpOwotCQlpZihpPDI0KSB7Ci0JCQlvdXRiKDB4MDEsaW8rMSk7Ci0JCQl0dW5lc3RhdCY9aW5iKGlvKzEpOwotCQkJb3V0YigweDAwLGlvKzEpOworCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CisJCWZpZm8gPSAoZmlmbyA8PCAxKSB8ICgoaW5iKGRldi0+aW8gKyAxKSA+PiA3KSAmIDB4MDEpOworCQlpZiAoaSA8IDI0KSB7CisJCQlvdXRiKDB4MDEsIGRldi0+aW8gKyAxKTsKKwkJCWRldi0+dHVuZXN0YXQgJj0gaW5iKGRldi0+aW8gKyAxKTsKKwkJCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOwogCQl9CiAJfQogCiAJLyoKIAkgKiBSZXN0b3JlIHZvbHVtZS9tdXRlIHNldHRpbmcKIAkgKi8KLQlvdXRiKGN1cnZvbCxpbysxKTsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJb3V0YihjdXJ2b2wsIGRldi0+aW8gKyAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAlyZXR1cm4gZmlmbzsKIH0KIAotc3RhdGljIHVuc2lnbmVkCi1jYWRldF9nZXRmcmVxKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2FkZXRfZ2V0ZnJlcShzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgaTsKLQl1bnNpZ25lZCBmcmVxPTAsdGVzdCxmaWZvPTA7CisJdW5zaWduZWQgZnJlcSA9IDAsIHRlc3QsIGZpZm8gPSAwOwogCiAJLyoKIAkgKiBSZWFkIGN1cnJlbnQgdHVuaW5nCiAJICovCi0JZmlmbz1jYWRldF9nZXR0dW5lKCk7CisJZmlmbyA9IGNhZGV0X2dldHR1bmUoZGV2KTsKIAogCS8qCiAJICogQ29udmVydCB0byBhY3R1YWwgZnJlcXVlbmN5CiAJICovCi0JaWYoY3VydHVuZXI9PTApIHsgICAgLyogRk0gKi8KLQkJdGVzdD0xMjUwMDsKLQkJZm9yKGk9MDtpPDE0O2krKykgewotCQkJaWYoKGZpZm8mMHgwMSkhPTApIHsKLQkJCQlmcmVxKz10ZXN0OwotCQkJfQotCQkJdGVzdD10ZXN0PDwxOwotCQkJZmlmbz1maWZvPj4xOworCWlmIChkZXYtPmN1cnR1bmVyID09IDApIHsgICAgLyogRk0gKi8KKwkJdGVzdCA9IDEyNTAwOworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaWYgKChmaWZvICYgMHgwMSkgIT0gMCkKKwkJCQlmcmVxICs9IHRlc3Q7CisJCQl0ZXN0ID0gdGVzdCA8PCAxOworCQkJZmlmbyA9IGZpZm8gPj4gMTsKIAkJfQotCQlmcmVxLT0xMDcwMDAwMDsgICAgICAgICAgIC8qIElGIGZyZXF1ZW5jeSBpcyAxMC43IE1IeiAqLwotCQlmcmVxPShmcmVxKjE2KS8xMDAwMDAwOyAgIC8qIE1ha2UgaXQgMS8xNiBNSHogKi8KKwkJZnJlcSAtPSAxMDcwMDAwMDsgICAgICAgICAgIC8qIElGIGZyZXF1ZW5jeSBpcyAxMC43IE1IeiAqLworCQlmcmVxID0gKGZyZXEgKiAxNikgLyAxMDAwMDAwOyAgIC8qIE1ha2UgaXQgMS8xNiBNSHogKi8KIAl9Ci0JaWYoY3VydHVuZXI9PTEpIHsgICAgLyogQU0gKi8KLQkJZnJlcT0oKGZpZm8mMHg3ZmZmKS0yMDEwKSoxNjsKLQl9CisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMSkgICAgLyogQU0gKi8KKwkJZnJlcSA9ICgoZmlmbyAmIDB4N2ZmZikgLSAyMDEwKSAqIDE2OwogCiAJcmV0dXJuIGZyZXE7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWRldF9zZXR0dW5lKHVuc2lnbmVkIGZpZm8pCitzdGF0aWMgdm9pZCBjYWRldF9zZXR0dW5lKHN0cnVjdCBjYWRldCAqZGV2LCB1bnNpZ25lZCBmaWZvKQogewogCWludCBpOwogCXVuc2lnbmVkIHRlc3Q7CiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCiAJLyoKIAkgKiBXcml0ZSB0aGUgc2hpZnQgcmVnaXN0ZXIKIAkgKi8KLQl0ZXN0PTA7Ci0JdGVzdD0oZmlmbz4+MjMpJjB4MDI7ICAgICAgLyogQWxpZ24gZGF0YSBmb3IgU0RPICovCi0JdGVzdHw9MHgxYzsgICAgICAgICAgICAgICAgLyogU0RNPTEsIFNXRT0xLCBTRU49MSwgU0NLPTAgKi8KLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCW91dGIodGVzdCxpbysxKTsgICAgICAgICAgIC8qIEluaXRpYWxpemUgZm9yIHdyaXRlICovCi0JZm9yKGk9MDtpPDI1O2krKykgewotCQl0ZXN0fD0weDAxOyAgICAgICAgICAgICAgLyogVG9nZ2xlIFNDSyBIaWdoICovCi0JCW91dGIodGVzdCxpbysxKTsKLQkJdGVzdCY9MHhmZTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgTG93ICovCi0JCW91dGIodGVzdCxpbysxKTsKLQkJZmlmbz1maWZvPDwxOyAgICAgICAgICAgIC8qIFByZXBhcmUgdGhlIG5leHQgYml0ICovCi0JCXRlc3Q9MHgxY3woKGZpZm8+PjIzKSYweDAyKTsKLQkJb3V0Yih0ZXN0LGlvKzEpOworCXRlc3QgPSAwOworCXRlc3QgPSAoZmlmbyA+PiAyMykgJiAweDAyOyAgICAgIC8qIEFsaWduIGRhdGEgZm9yIFNETyAqLworCXRlc3QgfD0gMHgxYzsgICAgICAgICAgICAgICAgLyogU0RNPTEsIFNXRT0xLCBTRU49MSwgU0NLPTAgKi8KKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOyAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3Igd3JpdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgeworCQl0ZXN0IHw9IDB4MDE7ICAgICAgICAgICAgICAvKiBUb2dnbGUgU0NLIEhpZ2ggKi8KKwkJb3V0Yih0ZXN0LCBkZXYtPmlvICsgMSk7CisJCXRlc3QgJj0gMHhmZTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgTG93ICovCisJCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOworCQlmaWZvID0gZmlmbyA8PCAxOyAgICAgICAgICAgIC8qIFByZXBhcmUgdGhlIG5leHQgYml0ICovCisJCXRlc3QgPSAweDFjIHwgKChmaWZvID4+IDIzKSAmIDB4MDIpOworCQlvdXRiKHRlc3QsIGRldi0+aW8gKyAxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQKLWNhZGV0X3NldGZyZXEodW5zaWduZWQgZnJlcSkKK3N0YXRpYyB2b2lkIGNhZGV0X3NldGZyZXEoc3RydWN0IGNhZGV0ICpkZXYsIHVuc2lnbmVkIGZyZXEpCiB7CiAJdW5zaWduZWQgZmlmbzsKLQlpbnQgaSxqLHRlc3Q7CisJaW50IGksIGosIHRlc3Q7CiAJaW50IGN1cnZvbDsKIAogCS8qCiAJICogRm9ybXVsYXRlIGEgZmlmbyBjb21tYW5kCiAJICovCi0JZmlmbz0wOwotCWlmKGN1cnR1bmVyPT0wKSB7ICAgIC8qIEZNICovCi0JCXRlc3Q9MTAyNDAwOwotCQlmcmVxPShmcmVxKjEwMDApLzE2OyAgICAgICAvKiBNYWtlIGl0IGtIeiAqLwotCQlmcmVxKz0xMDcwMDsgICAgICAgICAgICAgICAvKiBJRiBpcyAxMDcwMCBrSHogKi8KLQkJZm9yKGk9MDtpPDE0O2krKykgewotCQkJZmlmbz1maWZvPDwxOwotCQkJaWYoZnJlcT49dGVzdCkgewotCQkJCWZpZm98PTB4MDE7Ci0JCQkJZnJlcS09dGVzdDsKKwlmaWZvID0gMDsKKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAwKSB7ICAgIC8qIEZNICovCisJCXRlc3QgPSAxMDI0MDA7CisJCWZyZXEgPSAoZnJlcSAqIDEwMDApIC8gMTY7ICAgICAgIC8qIE1ha2UgaXQga0h6ICovCisJCWZyZXEgKz0gMTA3MDA7ICAgICAgICAgICAgICAgLyogSUYgaXMgMTA3MDAga0h6ICovCisJCWZvciAoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlmaWZvID0gZmlmbyA8PCAxOworCQkJaWYgKGZyZXEgPj0gdGVzdCkgeworCQkJCWZpZm8gfD0gMHgwMTsKKwkJCQlmcmVxIC09IHRlc3Q7CiAJCQl9Ci0JCQl0ZXN0PXRlc3Q+PjE7CisJCQl0ZXN0ID0gdGVzdCA+PiAxOwogCQl9CiAJfQotCWlmKGN1cnR1bmVyPT0xKSB7ICAgIC8qIEFNICovCi0JCWZpZm89KGZyZXEvMTYpKzIwMTA7ICAgICAgICAgICAgLyogTWFrZSBpdCBrSHogKi8KLQkJZmlmb3w9MHgxMDAwMDA7ICAgICAgICAgICAgLyogU2VsZWN0IEFNIEJhbmQgKi8KKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAxKSB7ICAgIC8qIEFNICovCisJCWZpZm8gPSAoZnJlcSAvIDE2KSArIDIwMTA7ICAgICAgICAgICAgLyogTWFrZSBpdCBrSHogKi8KKwkJZmlmbyB8PSAweDEwMDAwMDsgICAgICAgICAgICAvKiBTZWxlY3QgQU0gQmFuZCAqLwogCX0KIAogCS8qCiAJICogU2F2ZSBjdXJyZW50IHZvbHVtZS9tdXRlIHNldHRpbmcKIAkgKi8KIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQljdXJ2b2w9aW5iKGlvKzEpOwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJY3Vydm9sID0gaW5iKGRldi0+aW8gKyAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAkvKgogCSAqIFR1bmUgdGhlIGNhcmQKIAkgKi8KLQlmb3Ioaj0zO2o+LTE7ai0tKSB7Ci0JCWNhZGV0X3NldHR1bmUoZmlmb3woajw8MTYpKTsKKwlmb3IgKGogPSAzOyBqID4gLTE7IGotLSkgeworCQljYWRldF9zZXR0dW5lKGRldiwgZmlmbyB8IChqIDw8IDE2KSk7CiAKLQkJc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQkJb3V0Yig3LGlvKTsgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCQlvdXRiKGN1cnZvbCxpbysxKTsKLQkJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJCW91dGIoY3Vydm9sLCBkZXYtPmlvICsgMSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCQltc2xlZXAoMTAwKTsKIAotCQljYWRldF9nZXR0dW5lKCk7Ci0JCWlmKCh0dW5lc3RhdCAmIDB4NDApID09IDApIHsgICAvKiBUdW5lZCAqLwotCQkJc2lnc3RyZW5ndGg9c2lndGFibGVbY3VydHVuZXJdW2pdOworCQljYWRldF9nZXR0dW5lKGRldik7CisJCWlmICgoZGV2LT50dW5lc3RhdCAmIDB4NDApID09IDApIHsgICAvKiBUdW5lZCAqLworCQkJZGV2LT5zaWdzdHJlbmd0aCA9IHNpZ3RhYmxlW2Rldi0+Y3VydHVuZXJdW2pdOwogCQkJcmV0dXJuOwogCQl9CiAJfQotCXNpZ3N0cmVuZ3RoPTA7CisJZGV2LT5zaWdzdHJlbmd0aCA9IDA7CiB9CiAKIAotc3RhdGljIGludAotY2FkZXRfZ2V0dm9sKHZvaWQpCitzdGF0aWMgaW50IGNhZGV0X2dldHZvbChzdHJ1Y3QgY2FkZXQgKmRldikKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JaWYoKGluYihpbyArIDEpICYgMHgyMCkgIT0gMCkKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICgoaW5iKGRldi0+aW8gKyAxKSAmIDB4MjApICE9IDApCiAJCXJldCA9IDB4ZmZmZjsKIAotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgdm9pZAotY2FkZXRfc2V0dm9sKGludCB2b2wpCitzdGF0aWMgdm9pZCBjYWRldF9zZXR2b2woc3RydWN0IGNhZGV0ICpkZXYsIGludCB2b2wpCiB7Ci0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWlmKHZvbD4wKQotCQlvdXRiKDB4MjAsaW8rMSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWlmICh2b2wgPiAwKQorCQlvdXRiKDB4MjAsIGRldi0+aW8gKyAxKTsKIAllbHNlCi0JCW91dGIoMHgwMCxpbysxKTsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJCW91dGIoMHgwMCwgZGV2LT5pbyArIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQKLWNhZGV0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgY2FkZXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JLyoKLQkgKiBTZXJ2aWNlIHRoZSBSRFMgZmlmbwotCSAqLworCXN0cnVjdCBjYWRldCAqZGV2ID0gKHZvaWQgKilkYXRhOwogCi0JaWYoc3Bpbl90cnlsb2NrKCZjYWRldF9pb19sb2NrKSkKLQl7Ci0JCW91dGIoMHgzLGlvKTsgICAgICAgLyogU2VsZWN0IFJEUyBEZWNvZGVyIENvbnRyb2wgKi8KLQkJaWYoKGluYihpbysxKSYweDIwKSE9MCkgeworCS8qIFNlcnZpY2UgdGhlIFJEUyBmaWZvICovCisJaWYgKG11dGV4X3RyeWxvY2soJmRldi0+bG9jaykpIHsKKwkJb3V0YigweDMsIGRldi0+aW8pOyAgICAgICAvKiBTZWxlY3QgUkRTIERlY29kZXIgQ29udHJvbCAqLworCQlpZiAoKGluYihkZXYtPmlvICsgMSkgJiAweDIwKSAhPSAwKQogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiY2FkZXQ6IFJEUyBmaWZvIG92ZXJmbG93XG4iKTsKLQkJfQotCQlvdXRiKDB4ODAsaW8pOyAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLwotCQl3aGlsZSgoaW5iKGlvKSYweDgwKSE9MCkgewotCQkJcmRzYnVmW3Jkc2luXT1pbmIoaW8rMSk7Ci0JCQlpZihyZHNpbj09cmRzb3V0KQorCQlvdXRiKDB4ODAsIGRldi0+aW8pOyAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLworCQl3aGlsZSAoKGluYihkZXYtPmlvKSAmIDB4ODApICE9IDApIHsKKwkJCWRldi0+cmRzYnVmW2Rldi0+cmRzaW5dID0gaW5iKGRldi0+aW8gKyAxKTsKKwkJCWlmIChkZXYtPnJkc2luID09IGRldi0+cmRzb3V0KQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNhZGV0OiBSRFMgYnVmZmVyIG92ZXJmbG93XG4iKTsKIAkJCWVsc2UKLQkJCQlyZHNpbisrOworCQkJCWRldi0+cmRzaW4rKzsKIAkJfQotCQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAl9CiAKIAkvKgogCSAqIFNlcnZpY2UgcGVuZGluZyByZWFkCiAJICovCi0JaWYoIHJkc2luIT1yZHNvdXQpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmVhZF9xdWV1ZSk7CisJaWYgKGRldi0+cmRzaW4gIT0gZGV2LT5yZHNvdXQpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT5yZWFkX3F1ZXVlKTsKIAogCS8qCiAJICogQ2xlYW4gdXAgYW5kIGV4aXQKIAkgKi8KLQlpbml0X3RpbWVyKCZyZWFkdGltZXIpOwotCXJlYWR0aW1lci5mdW5jdGlvbj1jYWRldF9oYW5kbGVyOwotCXJlYWR0aW1lci5kYXRhPSh1bnNpZ25lZCBsb25nKTA7Ci0JcmVhZHRpbWVyLmV4cGlyZXM9amlmZmllcyttc2Vjc190b19qaWZmaWVzKDUwKTsKLQlhZGRfdGltZXIoJnJlYWR0aW1lcik7CisJaW5pdF90aW1lcigmZGV2LT5yZWFkdGltZXIpOworCWRldi0+cmVhZHRpbWVyLmZ1bmN0aW9uID0gY2FkZXRfaGFuZGxlcjsKKwlkZXYtPnJlYWR0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpMDsKKwlkZXYtPnJlYWR0aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCWFkZF90aW1lcigmZGV2LT5yZWFkdGltZXIpOwogfQogCiAKLQotc3RhdGljIHNzaXplX3QKLWNhZGV0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IGNhZGV0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgaT0wOworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBjaGFyIHJlYWRidWZbUkRTX0JVRkZFUl07CisJaW50IGkgPSAwOwogCi0JaWYocmRzc3RhdD09MCkgewotCQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCQlyZHNzdGF0PTE7Ci0JCW91dGIoMHg4MCxpbyk7ICAgICAgICAvKiBTZWxlY3QgUkRTIGZpZm8gKi8KLQkJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOwotCQlpbml0X3RpbWVyKCZyZWFkdGltZXIpOwotCQlyZWFkdGltZXIuZnVuY3Rpb249Y2FkZXRfaGFuZGxlcjsKLQkJcmVhZHRpbWVyLmRhdGE9KHVuc2lnbmVkIGxvbmcpMDsKLQkJcmVhZHRpbWVyLmV4cGlyZXM9amlmZmllcyttc2Vjc190b19qaWZmaWVzKDUwKTsKLQkJYWRkX3RpbWVyKCZyZWFkdGltZXIpOworCWlmIChkZXYtPnJkc3N0YXQgPT0gMCkgeworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlkZXYtPnJkc3N0YXQgPSAxOworCQlvdXRiKDB4ODAsIGRldi0+aW8pOyAgICAgICAgLyogU2VsZWN0IFJEUyBmaWZvICovCisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJaW5pdF90aW1lcigmZGV2LT5yZWFkdGltZXIpOworCQlkZXYtPnJlYWR0aW1lci5mdW5jdGlvbiA9IGNhZGV0X2hhbmRsZXI7CisJCWRldi0+cmVhZHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJCWRldi0+cmVhZHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MCk7CisJCWFkZF90aW1lcigmZGV2LT5yZWFkdGltZXIpOwogCX0KLQlpZihyZHNpbj09cmRzb3V0KSB7CisJaWYgKGRldi0+cmRzaW4gPT0gZGV2LT5yZHNvdXQpIHsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJcmV0dXJuIC1FV09VTERCTE9DSzsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmcmVhZF9xdWV1ZSk7CisJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmRldi0+cmVhZF9xdWV1ZSk7CiAJfQotCXdoaWxlKCBpPGNvdW50ICYmIHJkc2luIT1yZHNvdXQpCi0JCXJlYWRidWZbaSsrXT1yZHNidWZbcmRzb3V0KytdOworCXdoaWxlIChpIDwgY291bnQgJiYgZGV2LT5yZHNpbiAhPSBkZXYtPnJkc291dCkKKwkJcmVhZGJ1ZltpKytdID0gZGV2LT5yZHNidWZbZGV2LT5yZHNvdXQrK107CiAKLQlpZiAoY29weV90b191c2VyKGRhdGEscmVhZGJ1ZixpKSkKKwlpZiAoY29weV90b191c2VyKGRhdGEsIHJlYWRidWYsIGkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gaTsKIH0KQEAgLTM3MCwzOCArMzU1LDQwIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXYtPmNhcGFiaWxpdGllcyA9Ci0JCVY0TDJfQ0FQX1RVTkVSIHwKLQkJVjRMMl9DQVBfUkVBRFdSSVRFOworCXN0cmxjcHkodi0+ZHJpdmVyLCAiQURTIENhZGV0Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOworCXN0cmxjcHkodi0+Y2FyZCwgIkFEUyBDYWRldCIsIHNpemVvZih2LT5jYXJkKSk7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBDQURFVF9WRVJTSU9OOwotCXN0cmNweSh2LT5kcml2ZXIsICJBRFMgQ2FkZXQiKTsKLQlzdHJjcHkodi0+Y2FyZCwgIkFEUyBDYWRldCIpOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU8gfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJc3dpdGNoICh2LT5pbmRleCkgewogCWNhc2UgMDoKLQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU87CiAJCXYtPnJhbmdlbG93ID0gMTQwMDsgICAgIC8qIDg3LjUgTUh6ICovCiAJCXYtPnJhbmdlaGlnaCA9IDE3Mjg7ICAgIC8qIDEwOC4wIE1IeiAqLwotCQl2LT5yeHN1YmNoYW5zPWNhZGV0X2dldHN0ZXJlbygpOwotCQlzd2l0Y2ggKHYtPnJ4c3ViY2hhbnMpeworCQl2LT5yeHN1YmNoYW5zID0gY2FkZXRfZ2V0c3RlcmVvKGRldik7CisJCXN3aXRjaCAodi0+cnhzdWJjaGFucykgewogCQljYXNlIFY0TDJfVFVORVJfU1VCX01PTk86CiAJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJCQlicmVhazsKIAkJY2FzZSBWNEwyX1RVTkVSX1NVQl9TVEVSRU86CiAJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OiA7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIDE6Ci0JCXN0cmNweSh2LT5uYW1lLCAiQU0iKTsKKwkJc3RybGNweSh2LT5uYW1lLCAiQU0iLCBzaXplb2Yodi0+bmFtZSkpOwogCQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCQl2LT5yYW5nZWxvdyA9IDgzMjA7ICAgICAgLyogNTIwIGtIeiAqLwogCQl2LT5yYW5nZWhpZ2ggPSAyNjQwMDsgICAgLyogMTY1MCBrSHogKi8KQEAgLTQxMSwyNSArMzk4LDI5IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXYtPnNpZ25hbCA9IHNpZ3N0cmVuZ3RoOyAvKiBXZSBtaWdodCBuZWVkIHRvIG1vZGlmeSBzY2FsaW5nIG9mIHRoaXMgKi8KKwl2LT5zaWduYWwgPSBkZXYtPnNpZ3N0cmVuZ3RoOyAvKiBXZSBtaWdodCBuZWVkIHRvIG1vZGlmeSBzY2FsaW5nIG9mIHRoaXMgKi8KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZigodi0+aW5kZXggIT0gMCkmJih2LT5pbmRleCAhPSAxKSkKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlpZiAodi0+aW5kZXggIT0gMCAmJiB2LT5pbmRleCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKLQljdXJ0dW5lciA9IHYtPmluZGV4OworCWRldi0+Y3VydHVuZXIgPSB2LT5pbmRleDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCWYtPnR1bmVyID0gY3VydHVuZXI7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHVuZXIgPSBkZXYtPmN1cnR1bmVyOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IGNhZGV0X2dldGZyZXEoKTsKKwlmLT5mcmVxdWVuY3kgPSBjYWRldF9nZXRmcmVxKGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNywyNyArNDI4LDI2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYoKGN1cnR1bmVyPT0wKSYmKChmLT5mcmVxdWVuY3k8MTQwMCl8fChmLT5mcmVxdWVuY3k+MTcyOCkpKQorCWlmIChkZXYtPmN1cnR1bmVyID09IDAgJiYgKGYtPmZyZXF1ZW5jeSA8IDE0MDAgfHwgZi0+ZnJlcXVlbmN5ID4gMTcyOCkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmKChjdXJ0dW5lcj09MSkmJigoZi0+ZnJlcXVlbmN5PDgzMjApfHwoZi0+ZnJlcXVlbmN5PjI2NDAwKSkpCisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMSAmJiAoZi0+ZnJlcXVlbmN5IDwgODMyMCB8fCBmLT5mcmVxdWVuY3kgPiAyNjQwMCkpCiAJCXJldHVybiAtRUlOVkFMOwotCWNhZGV0X3NldGZyZXEoZi0+ZnJlcXVlbmN5KTsKKwljYWRldF9zZXRmcmVxKGRldiwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMHhmZiwgMSwgMHhmZik7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtNDY1LDEyICs0NTUsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN3aXRjaCAoY3RybC0+aWQpeworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IC8qIFRPRE86IEhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwotCQljdHJsLT52YWx1ZSA9IChjYWRldF9nZXR2b2woKSA9PSAwKTsKKwkJY3RybC0+dmFsdWUgPSAoY2FkZXRfZ2V0dm9sKGRldikgPT0gMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQljdHJsLT52YWx1ZSA9IGNhZGV0X2dldHZvbCgpOworCQljdHJsLT52YWx1ZSA9IGNhZGV0X2dldHZvbChkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ4MSwxNSArNDczLDE3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKXsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IC8qIFRPRE86IEhhbmRsZSB0aGlzIGNvcnJlY3RseSAqLwogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQljYWRldF9zZXR2b2woMCk7CisJCQljYWRldF9zZXR2b2woZGV2LCAwKTsKIAkJZWxzZQotCQkJY2FkZXRfc2V0dm9sKDB4ZmZmZik7CisJCQljYWRldF9zZXR2b2woZGV2LCAweGZmZmYpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY2FkZXRfc2V0dm9sKGN0cmwtPnZhbHVlKTsKKwkJY2FkZXRfc2V0dm9sKGRldiwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5NywxNiArNDkxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTUxNSw0MyArNDk5LDUyIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBjYWRldF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWRldi0+dXNlcnMrKzsKKwlpZiAoMSA9PSBkZXYtPnVzZXJzKQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnJlYWRfcXVldWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jYWRldF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjYWRldF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXVzZXJzKys7Ci0JaWYgKDEgPT0gdXNlcnMpIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnJlYWRfcXVldWUpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotc3RhdGljIGludAotY2FkZXRfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQl1c2Vycy0tOwotCWlmICgwID09IHVzZXJzKXsKLQkJZGVsX3RpbWVyX3N5bmMoJnJlYWR0aW1lcik7Ci0JCXJkc3N0YXQ9MDsKKwlkZXYtPnVzZXJzLS07CisJaWYgKDAgPT0gZGV2LT51c2VycykgeworCQlkZWxfdGltZXJfc3luYygmZGV2LT5yZWFkdGltZXIpOworCQlkZXYtPnJkc3N0YXQgPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotY2FkZXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCBjYWRldF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCiB7Ci0JcG9sbF93YWl0KGZpbGUsJnJlYWRfcXVldWUsd2FpdCk7Ci0JaWYocmRzaW4gIT0gcmRzb3V0KQorCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5yZWFkX3F1ZXVlLCB3YWl0KTsKKwlpZiAoZGV2LT5yZHNpbiAhPSBkZXYtPnJkc291dCkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CiAJcmV0dXJuIDA7CiB9CkBAIC01ODEsMTMgKzU3NCw2IEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgY2FkZXRfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIkNhZGV0IHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmY2FkZXRfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZjYWRldF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KICNpZmRlZiBDT05GSUdfUE5QCiAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2RldmljZV9pZCBjYWRldF9wbnBfZGV2aWNlc1tdID0gewpAQCAtNTk4LDcgKzU4NCw3IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBjYWRldF9wbnBfZGV2aWNlcyk7CiAKLXN0YXRpYyBpbnQgY2FkZXRfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICogZGV2LCBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQorc3RhdGljIGludCBjYWRldF9wbnBfcHJvYmUoc3RydWN0IHBucF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKIHsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MDYsMTMgKzU5MiwxMiBAQAogCWlmIChpbyA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAoIXBucF9wb3J0X3ZhbGlkKGRldiwgMCkpIHsKKwlpZiAoIXBucF9wb3J0X3ZhbGlkKGRldiwgMCkpCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCWlvID0gcG5wX3BvcnRfc3RhcnQoZGV2LCAwKTsKIAotCXByaW50ayAoInJhZGlvLWNhZGV0OiBQblAgcmVwb3J0cyBkZXZpY2UgYXQgJSN4XG4iLCBpbyk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tY2FkZXQ6IFBuUCByZXBvcnRzIGRldmljZSBhdCAlI3hcbiIsIGlvKTsKIAogCXJldHVybiBpbzsKIH0KQEAgLTYyOCwyMyArNjEzLDIzIEBACiBzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY2FkZXRfcG5wX2RyaXZlcjsKICNlbmRpZgogCi1zdGF0aWMgaW50IGNhZGV0X3Byb2JlKHZvaWQpCitzdGF0aWMgdm9pZCBjYWRldF9wcm9iZShzdHJ1Y3QgY2FkZXQgKmRldikKIHsKLQlzdGF0aWMgaW50IGlvdmFsc1s4XT17MHgzMzAsMHgzMzIsMHgzMzQsMHgzMzYsMHgzMzgsMHgzM2EsMHgzM2MsMHgzM2V9OworCXN0YXRpYyBpbnQgaW92YWxzWzhdID0geyAweDMzMCwgMHgzMzIsIDB4MzM0LCAweDMzNiwgMHgzMzgsIDB4MzNhLCAweDMzYywgMHgzM2UgfTsKIAlpbnQgaTsKIAotCWZvcihpPTA7aTw4O2krKykgewotCQlpbz1pb3ZhbHNbaV07Ci0JCWlmIChyZXF1ZXN0X3JlZ2lvbihpbywgMiwgImNhZGV0LXByb2JlIikpIHsKLQkJCWNhZGV0X3NldGZyZXEoMTQxMCk7Ci0JCQlpZihjYWRldF9nZXRmcmVxKCk9PTE0MTApIHsKLQkJCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7Ci0JCQkJcmV0dXJuIGlvOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZGV2LT5pbyA9IGlvdmFsc1tpXTsKKwkJaWYgKHJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDIsICJjYWRldC1wcm9iZSIpKSB7CisJCQljYWRldF9zZXRmcmVxKGRldiwgMTQxMCk7CisJCQlpZiAoY2FkZXRfZ2V0ZnJlcShkZXYpID09IDE0MTApIHsKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKIAkJfQogCX0KLQlyZXR1cm4gLTE7CisJZGV2LT5pbyA9IC0xOwogfQogCiAvKgpAQCAtNjU0LDU5ICs2MzksNjkgQEAKIAogc3RhdGljIGludCBfX2luaXQgY2FkZXRfaW5pdCh2b2lkKQogewotCXNwaW5fbG9ja19pbml0KCZjYWRldF9pb19sb2NrKTsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9ICZjYWRldF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwlpbnQgcmVzOwogCi0JLyoKLQkgKglJZiBhIHByb2JlIHdhcyByZXF1ZXN0ZWQgdGhlbiBwcm9iZSBJU0FQblAgZmlyc3QgKHNhZmVzdCkKLQkgKi8KKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiY2FkZXQiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCisJLyogSWYgYSBwcm9iZSB3YXMgcmVxdWVzdGVkIHRoZW4gcHJvYmUgSVNBUG5QIGZpcnN0IChzYWZlc3QpICovCiAJaWYgKGlvIDwgMCkKIAkJcG5wX3JlZ2lzdGVyX2RyaXZlcigmY2FkZXRfcG5wX2RyaXZlcik7Ci0JLyoKLQkgKglJZiB0aGF0IGZhaWxzIHRoZW4gcHJvYmUgdW5zYWZlbHkgaWYgcHJvYmUgaXMgcmVxdWVzdGVkCi0JICovCi0JaWYoaW8gPCAwKQotCQlpbyA9IGNhZGV0X3Byb2JlICgpOworCWRldi0+aW8gPSBpbzsKIAotCS8qCi0JICoJRWxzZSB3ZSBiYWlsIG91dAotCSAqLworCS8qIElmIHRoYXQgZmFpbHMgdGhlbiBwcm9iZSB1bnNhZmVseSBpZiBwcm9iZSBpcyByZXF1ZXN0ZWQgKi8KKwlpZiAoZGV2LT5pbyA8IDApCisJCWNhZGV0X3Byb2JlKGRldik7CiAKLQlpZihpbyA8IDApIHsKKwkvKiBFbHNlIHdlIGJhaWwgb3V0ICovCisJaWYgKGRldi0+aW8gPCAwKSB7CiAjaWZkZWYgTU9EVUxFCi0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzMwLCAweDMzMiwgMHgzMzQsXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICIweDMzNiwgMHgzMzgsIDB4MzNhLCAweDMzYyBvciAweDMzZVxuIik7CiAjZW5kaWYKIAkJZ290byBmYWlsOwogCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLDIsImNhZGV0IikpCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmlvLCAyLCAiY2FkZXQiKSkKIAkJZ290byBmYWlsOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhZGV0X3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIkFEUyBDYWRldCBSYWRpbyBDYXJkIGF0IDB4JXhcbiIsaW8pOworCisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJmNhZGV0X2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZjYWRldF9pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CisJCWdvdG8gZmFpbDsKKwl9CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQURTIENhZGV0IFJhZGlvIENhcmQgYXQgMHgleFxuIiwgZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiBmYWlsOgogCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY2FkZXRfcG5wX2RyaXZlcik7Ci0JcmV0dXJuIC0xOworCXJldHVybiAtRU5PREVWOwogfQogCi0KLQotTU9EVUxFX0FVVEhPUigiRnJlZCBHbGVhc29uLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEFEUyBDYWRldCBBTS9GTS9SRFMgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIENhZGV0IGNhcmQgKDB4MzMwLDB4MzMyLDB4MzM0LDB4MzM2LDB4MzM4LDB4MzNhLDB4MzNjLDB4MzNlKSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2FkZXRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWRldF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhZGV0X3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9ICZjYWRldF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjYWRldF9wbnBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY2FkZXRfaW5pdCk7Ci1tb2R1bGVfZXhpdChjYWRldF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChjYWRldF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwppbmRleCAwYzk2YmY4Li4wOTI2NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay1wY2kuYwpAQCAtNDUsMzQgKzQ1LDI1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIlZsYWRpbWlyIFNoZWJvcmRhZXYgPHZzaGVib3JkYWV2QG1haWwucnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBHZW10ZWsgUENJIFJhZGlvIENhcmQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CitzdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7CitzdGF0aWMgaW50IG14ID0gMTsKKworbW9kdWxlX3BhcmFtKG14LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXgsICJzaW5nbGUgZGlnaXQ6IDEgLSB0dXJuIG9mZiB0aGUgdHVybmVyIHVwb24gbW9kdWxlIGV4aXQgKGRlZmF1bHQpLCAwIC0gZG8gbm90Iik7Cittb2R1bGVfcGFyYW0obnJfcmFkaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5yX3JhZGlvLCAidmlkZW80bGludXggZGV2aWNlIG51bWJlciB0byB1c2UiKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCiAKICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9HRU1URUsKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HRU1URUsgMHg1MDQ2CkBAIC05MCw4ICs4MSwxMSBAQAogI2RlZmluZSBHRU1URUtfUENJX1JBTkdFX0hJR0ggKDEwOCoxNjAwMCkKICNlbmRpZgogCi1zdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb2RldjsKK3N0cnVjdCBnZW10ZWtfcGNpIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCiAJdTMyIGlvYmFzZTsKIAl1MzIgbGVuZ3RoOwpAQCAtMTAwLDExNiArOTQsMTMzIEBACiAJdTggIG11dGU7CiB9OwogCi1zdGF0aWMgaW50IG5yX3JhZGlvID0gLTE7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0KLXN0YXRpYyBpbmxpbmUgdTggZ2VtdGVrX3BjaV9vdXQoIHUxNiB2YWx1ZSwgdTMyIHBvcnQgKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZ2VtdGVrX3BjaSAqdG9fZ2VtdGVrX3BjaShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGdlbXRla19wY2ksIHY0bDJfZGV2KTsKK30KKworc3RhdGljIGlubGluZSB1OCBnZW10ZWtfcGNpX291dCh1MTYgdmFsdWUsIHUzMiBwb3J0KQoreworCW91dHcodmFsdWUsIHBvcnQpOwogCiAJcmV0dXJuICh1OCl2YWx1ZTsKIH0KIAotI2RlZmluZSBfYjAoIHYgKSAqKCh1OCAqKSZ2KQotc3RhdGljIHZvaWQgX19nZW10ZWtfcGNpX2NtZCggdTE2IHZhbHVlLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSwgaW50IGtlZXAgKQotewotCXJlZ2lzdGVyIHU4IGJ5dGUgPSAqbGFzdF9ieXRlOworI2RlZmluZSBfYjAodikgKCooKHU4ICopJnYpKQogCi0JaWYgKCAhdmFsdWUgKSB7Ci0JCWlmICggIWtlZXAgKQorc3RhdGljIHZvaWQgX19nZW10ZWtfcGNpX2NtZCh1MTYgdmFsdWUsIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlLCBpbnQga2VlcCkKK3sKKwl1OCBieXRlID0gKmxhc3RfYnl0ZTsKKworCWlmICghdmFsdWUpIHsKKwkJaWYgKCFrZWVwKQogCQkJdmFsdWUgPSAodTE2KXBvcnQ7CiAJCWJ5dGUgJj0gMHhmZDsKIAl9IGVsc2UKIAkJYnl0ZSB8PSAyOwogCi0JX2IwKCB2YWx1ZSApID0gYnl0ZTsKLQlvdXR3KCB2YWx1ZSwgcG9ydCApOworCV9iMCh2YWx1ZSkgPSBieXRlOworCW91dHcodmFsdWUsIHBvcnQpOwogCWJ5dGUgfD0gMTsKLQlfYjAoIHZhbHVlICkgPSBieXRlOwotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJX2IwKHZhbHVlKSA9IGJ5dGU7CisJb3V0dyh2YWx1ZSwgcG9ydCk7CiAJYnl0ZSAmPSAweGZlOwotCV9iMCggdmFsdWUgKSA9IGJ5dGU7Ci0Jb3V0dyggdmFsdWUsIHBvcnQgKTsKKwlfYjAodmFsdWUpID0gYnl0ZTsKKwlvdXR3KHZhbHVlLCBwb3J0KTsKIAogCSpsYXN0X2J5dGUgPSBieXRlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9uaWwoIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlICkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX25pbCh1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSkKIHsKLQlfX2dlbXRla19wY2lfY21kKCAweDAwLCBwb3J0LCBsYXN0X2J5dGUsIGZhbHNlICk7CisJX19nZW10ZWtfcGNpX2NtZCgweDAwLCBwb3J0LCBsYXN0X2J5dGUsIGZhbHNlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfY21kKCB1MTYgY21kLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSApCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9jbWQodTE2IGNtZCwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUpCiB7Ci0JX19nZW10ZWtfcGNpX2NtZCggY21kLCBwb3J0LCBsYXN0X2J5dGUsIHRydWUgKTsKKwlfX2dlbXRla19wY2lfY21kKGNtZCwgcG9ydCwgbGFzdF9ieXRlLCB0cnVlKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5ICkKK3N0YXRpYyB2b2lkIGdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkLCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKLQlyZWdpc3RlciBpbnQgaTsKLQlyZWdpc3RlciB1MzIgdmFsdWUgPSBmcmVxdWVuY3kgLyAyMDAgKyA4NTY7Ci0JcmVnaXN0ZXIgdTE2IG1hc2sgPSAweDgwMDA7CisJaW50IGk7CisJdTMyIHZhbHVlID0gZnJlcXVlbmN5IC8gMjAwICsgODU2OworCXUxNiBtYXNrID0gMHg4MDAwOwogCXU4IGxhc3RfYnl0ZTsKIAl1MzIgcG9ydCA9IGNhcmQtPmlvYmFzZTsKIAotCWxhc3RfYnl0ZSA9IGdlbXRla19wY2lfb3V0KCAweDA2LCBwb3J0ICk7CisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisJbGFzdF9ieXRlID0gZ2VtdGVrX3BjaV9vdXQoMHgwNiwgcG9ydCk7CiAKIAlpID0gMDsKIAlkbyB7Ci0JCWdlbXRla19wY2lfbmlsKCBwb3J0LCAmbGFzdF9ieXRlICk7CisJCWdlbXRla19wY2lfbmlsKHBvcnQsICZsYXN0X2J5dGUpOwogCQlpKys7Ci0JfSB3aGlsZSAoIGkgPCA5ICk7CisJfSB3aGlsZSAoaSA8IDkpOwogCiAJaSA9IDA7CiAJZG8gewotCQlnZW10ZWtfcGNpX2NtZCggdmFsdWUgJiBtYXNrLCBwb3J0LCAmbGFzdF9ieXRlICk7CisJCWdlbXRla19wY2lfY21kKHZhbHVlICYgbWFzaywgcG9ydCwgJmxhc3RfYnl0ZSk7CiAJCW1hc2sgPj49IDE7CiAJCWkrKzsKLQl9IHdoaWxlICggaSA8IDE2ICk7CisJfSB3aGlsZSAoaSA8IDE2KTsKIAotCW91dHcoIDB4MTAsIHBvcnQgKTsKKwlvdXR3KDB4MTAsIHBvcnQpOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiB9CiAKIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfbXV0ZSggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX211dGUoc3RydWN0IGdlbXRla19wY2kgKmNhcmQpCiB7Ci0Jb3V0YiggMHgxZiwgY2FyZC0+aW9iYXNlICk7CisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJb3V0YigweDFmLCBjYXJkLT5pb2Jhc2UpOwogCWNhcmQtPm11dGUgPSB0cnVlOworCW11dGV4X3VubG9jaygmY2FyZC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX3VubXV0ZSggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX3VubXV0ZShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKIHsKLQlpZiAoIGNhcmQtPm11dGUgKSB7Ci0JCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KCBjYXJkLCBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSApOworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOworCWlmIChjYXJkLT5tdXRlKSB7CisJCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KGNhcmQsIGNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5KTsKIAkJY2FyZC0+bXV0ZSA9IGZhbHNlOwogCX0KKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW10ZWtfcGNpX2dldHNpZ25hbCggc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCApCitzdGF0aWMgaW50IGdlbXRla19wY2lfZ2V0c2lnbmFsKHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkKQogewotCXJldHVybiAoIGluYiggY2FyZC0+aW9iYXNlICkgJiAweDA4ICkgPyAwIDogMTsKKwlpbnQgc2lnOworCisJbXV0ZXhfbG9jaygmY2FyZC0+bG9jayk7CisJc2lnID0gKGluYihjYXJkLT5pb2Jhc2UpICYgMHgwOCkgPyAwIDogMTsKKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tZ2VtdGVrLXBjaSIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJHZW1UZWsgUENJIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShjYXJkLT5wZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gR0VNVEVLX1BDSV9SQU5HRV9MT1c7CiAJdi0+cmFuZ2VoaWdoID0gR0VNVEVLX1BDSV9SQU5HRV9ISUdIOwpAQCAtMjIzLDIxICsyMzQsMTggQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWlmICggKGYtPmZyZXF1ZW5jeSA8IEdFTVRFS19QQ0lfUkFOR0VfTE9XKSB8fAotCQkJKGYtPmZyZXF1ZW5jeSA+IEdFTVRFS19QQ0lfUkFOR0VfSElHSCkgKQorCWlmIChmLT5mcmVxdWVuY3kgPCBHRU1URUtfUENJX1JBTkdFX0xPVyB8fAorCSAgICBmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpCiAJCXJldHVybiAtRUlOVkFMOwogCWdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KGNhcmQsIGYtPmZyZXF1ZW5jeSk7Ci0JY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kgPSBmLT5mcmVxdWVuY3k7CiAJY2FyZC0+bXV0ZSA9IGZhbHNlOwogCXJldHVybiAwOwogfQpAQCAtMjQ1LDcgKzI1Myw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5OwpAQCAtMjU1LDEzICsyNjMsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjY5LDcgKzI3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI4OCw3ICsyOTQsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMDcsMTcgKzMxMyw2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMjYsMTcgKzMyMSwyMiBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogZW51bSB7CkBAIC0zNTQsMjUgKzM1NCwyMiBAQAogCXsgMCB9CiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFKCBwY2ksIGdlbXRla19wY2lfaWQgKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBnZW10ZWtfcGNpX2lkKTsKIAotc3RhdGljIGludCBteCA9IDE7Ci0KLXN0YXRpYyBpbnQgZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBnZW10ZWtfcGNpX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGdlbXRla19wY2lfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gZ2VtdGVrX3BjaV9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBnZW10ZWtfcGNpX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGdlbXRla19wY2lfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBnZW10ZWtfcGNpX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTM5MSwxMDggKzM4OCwxMDAgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXZfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgICAgICAgICAgCT0gIkdlbXRlayBQQ0kgUmFkaW8iLAotCS5mb3BzICAgICAgICAgIAk9ICZnZW10ZWtfcGNpX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkICkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdlbXRla19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7Ci0Jc3RydWN0IGdlbXRla19wY2lfY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXZyYWRpbzsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OworCWludCByZXM7CiAKLQlpZiAoIChjYXJkID0ga3phbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICksIEdGUF9LRVJORUwgKSkgPT0gTlVMTCApIHsKLQkJcHJpbnRrKCBLRVJOX0VSUiAiZ2VtdGVrX3BjaTogb3V0IG9mIG1lbW9yeVxuIiApOworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ2VtdGVrX3BjaSksIEdGUF9LRVJORUwpOworCWlmIChjYXJkID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICggcGNpX2VuYWJsZV9kZXZpY2UoIHBjaV9kZXYgKSApCisJdjRsMl9kZXYgPSAmY2FyZC0+djRsMl9kZXY7CisJbXV0ZXhfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+cGRldiA9IHBkZXY7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiZ2VtdGVrX3BjaSIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiByZXM7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQogCQlnb3RvIGVycl9wY2k7CiAKLQljYXJkLT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoIHBjaV9kZXYsIDAgKTsKLQljYXJkLT5sZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKCBwY2lfZGV2LCAwICk7CisJY2FyZC0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOworCWNhcmQtPmxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAKLQlpZiAoIHJlcXVlc3RfcmVnaW9uKCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSApID09IE5VTEwgKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImdlbXRla19wY2k6IGkvbyBwb3J0IGFscmVhZHkgaW4gdXNlXG4iICk7CisJaWYgKHJlcXVlc3RfcmVnaW9uKGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoLCBjYXJkX25hbWVzW3BjaV9pZC0+ZHJpdmVyX2RhdGFdKSA9PSBOVUxMKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiaS9vIHBvcnQgYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlnb3RvIGVycl9wY2k7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKCBwY2lfZGV2LCBjYXJkICk7CisJc3RybGNweShjYXJkLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoY2FyZC0+dmRldi5uYW1lKSk7CisJY2FyZC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWNhcmQtPnZkZXYuZm9wcyA9ICZnZW10ZWtfcGNpX2ZvcHM7CisJY2FyZC0+dmRldi5pb2N0bF9vcHMgPSAmZ2VtdGVrX3BjaV9pb2N0bF9vcHM7CisJY2FyZC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmNhcmQtPnZkZXYsIGNhcmQpOwogCi0JaWYgKCAoZGV2cmFkaW8gPSBrbWFsbG9jKCBzaXplb2YoIHN0cnVjdCB2aWRlb19kZXZpY2UgKSwgR0ZQX0tFUk5FTCApKSA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJnZW10ZWtfcGNpOiBvdXQgb2YgbWVtb3J5XG4iICk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FyZC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIG5yX3JhZGlvKSA8IDApCiAJCWdvdG8gZXJyX3ZpZGVvOwotCX0KLQkqZGV2cmFkaW8gPSB2ZGV2X3RlbXBsYXRlOwogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXZyYWRpbywgVkZMX1RZUEVfUkFESU8sIG5yX3JhZGlvKSA8IDApIHsKLQkJa2ZyZWUoIGRldnJhZGlvICk7Ci0JCWdvdG8gZXJyX3ZpZGVvOwotCX0KKwlnZW10ZWtfcGNpX211dGUoY2FyZCk7CiAKLQljYXJkLT52aWRlb2RldiA9IGRldnJhZGlvOwotCXZpZGVvX3NldF9kcnZkYXRhKGRldnJhZGlvLCBjYXJkKTsKLQlnZW10ZWtfcGNpX211dGUoIGNhcmQgKTsKLQotCXByaW50ayggS0VSTl9JTkZPICJHZW10ZWsgUENJIFJhZGlvIChyZXYuICVkKSBmb3VuZCBhdCAweCUwNHgtMHglMDR4LlxuIiwKLQkJcGNpX2Rldi0+cmV2aXNpb24sIGNhcmQtPmlvYmFzZSwgY2FyZC0+aW9iYXNlICsgY2FyZC0+bGVuZ3RoIC0gMSApOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkdlbXRlayBQQ0kgUmFkaW8gKHJldi4gJWQpIGZvdW5kIGF0IDB4JTA0eC0weCUwNHguXG4iLAorCQlwZGV2LT5yZXZpc2lvbiwgY2FyZC0+aW9iYXNlLCBjYXJkLT5pb2Jhc2UgKyBjYXJkLT5sZW5ndGggLSAxKTsKIAogCXJldHVybiAwOwogCiBlcnJfdmlkZW86Ci0JcmVsZWFzZV9yZWdpb24oIGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoICk7CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgpOwogCiBlcnJfcGNpOgotCWtmcmVlKCBjYXJkICk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJa2ZyZWUoY2FyZCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBnZW10ZWtfcGNpX3JlbW92ZSggc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgKQorc3RhdGljIHZvaWQgX19kZXZleGl0IGdlbXRla19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoIHBjaV9kZXYgKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdG9fZ2VtdGVrX3BjaSh2NGwyX2Rldik7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSggY2FyZC0+dmlkZW9kZXYgKTsKLQlrZnJlZSggY2FyZC0+dmlkZW9kZXYgKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CiAKLQlyZWxlYXNlX3JlZ2lvbiggY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGggKTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCk7CiAKLQlpZiAoIG14ICkKLQkJZ2VtdGVrX3BjaV9tdXRlKCBjYXJkICk7CisJaWYgKG14KQorCQlnZW10ZWtfcGNpX211dGUoY2FyZCk7CiAKLQlrZnJlZSggY2FyZCApOwotCi0JcGNpX3NldF9kcnZkYXRhKCBwY2lfZGV2LCBOVUxMICk7CisJa2ZyZWUoY2FyZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBnZW10ZWtfcGNpX2RyaXZlciA9Ci17CitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ2VtdGVrX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImdlbXRla19wY2kiLAogCS5pZF90YWJsZQk9IGdlbXRla19wY2lfaWQsCiAJLnByb2JlCQk9IGdlbXRla19wY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChnZW10ZWtfcGNpX3JlbW92ZSksCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBnZW10ZWtfcGNpX2luaXRfbW9kdWxlKCB2b2lkICkKK3N0YXRpYyBpbnQgX19pbml0IGdlbXRla19wY2lfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCAmZ2VtdGVrX3BjaV9kcml2ZXIgKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZ2VtdGVrX3BjaV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZ2VtdGVrX3BjaV9jbGVhbnVwX21vZHVsZSggdm9pZCApCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2VtdGVrX3BjaV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZnZW10ZWtfcGNpX2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoICJWbGFkaW1pciBTaGVib3JkYWV2IDx2c2hlYm9yZGFldkBtYWlsLnJ1PiIgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggIlRoZSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSBHZW10ZWsgUENJIFJhZGlvIENhcmQiICk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShteCwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBteCwgInNpbmdsZSBkaWdpdDogMSAtIHR1cm4gb2ZmIHRoZSB0dXJuZXIgdXBvbiBtb2R1bGUgZXhpdCAoZGVmYXVsdCksIDAgLSBkbyBub3QiICk7Ci1tb2R1bGVfcGFyYW0obnJfcmFkaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKCBucl9yYWRpbywgInZpZGVvNGxpbnV4IGRldmljZSBudW1iZXIgdG8gdXNlIik7Ci0KLW1vZHVsZV9pbml0KCBnZW10ZWtfcGNpX2luaXRfbW9kdWxlICk7Ci1tb2R1bGVfZXhpdCggZ2VtdGVrX3BjaV9jbGVhbnVwX21vZHVsZSApOwotCittb2R1bGVfaW5pdChnZW10ZWtfcGNpX2luaXQpOworbW9kdWxlX2V4aXQoZ2VtdGVrX3BjaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCmluZGV4IDJiNjhiZTcuLjE1MDQ2NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwpAQCAtMjAsMTYgKzIwLDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDMpCi0jZGVmaW5lIFJBRElPX0JBTk5FUiAiR2VtVGVrIFJhZGlvIGNhcmQgZHJpdmVyOiB2MC4wLjMiCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDMpCiAKIC8qCiAgKiBNb2R1bGUgaW5mby4KQEAgLTU3LDcgKzU1LDYgQEAKIHN0YXRpYyBpbnQga2VlcG11dGVkCT0gMTsKIHN0YXRpYyBpbnQgaW5pdG11dGUJPSAxOwogc3RhdGljIGludCByYWRpb19ucgk9IC0xOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCiBtb2R1bGVfcGFyYW0oaW8sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlvLCAiRm9yY2UgSS9PIHBvcnQgZm9yIHRoZSBHZW1UZWsgUmFkaW8gY2FyZCBpZiBhdXRvbWF0aWMgIgpAQCAtMTEyLDEyICsxMDksMTkgQEAKICNkZWZpbmUgU0hPUlRfREVMQVkgNQkJLyogdXNlYyAqLwogI2RlZmluZSBMT05HX0RFTEFZIDc1CQkvKiB1c2VjICovCiAKLXN0cnVjdCBnZW10ZWtfZGV2aWNlIHsKK3N0cnVjdCBnZW10ZWsgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJdW5zaWduZWQgbG9uZyBsYXN0ZnJlcTsKIAlpbnQgbXV0ZWQ7CisJaW50IHZlcmlmaWVkOworCWludCBpbzsKIAl1MzIgYnUyNjE0ZGF0YTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZ2VtdGVrIGdlbXRla19jYXJkOworCiAjZGVmaW5lIEJVMjYxNF9GUkVRX0JJVFMgCTE2IC8qIEQwLi5EMTUsIEZyZXF1ZW5jeSBkYXRhCQkqLwogI2RlZmluZSBCVTI2MTRfUE9SVF9CSVRTCTMgLyogUDAuLlAyLCBPdXRwdXQgcG9ydCBjb250cm9sIGRhdGEJKi8KICNkZWZpbmUgQlUyNjE0X1ZPSURfQklUUwk0IC8qIHVudXNlZCAJCQkJKi8KQEAgLTE1MywxMCArMTU3LDYgQEAKICNkZWZpbmUgQlUyNjE0X0ZNVU5fTUFTSwlNS01BU0soRk1VTikKICNkZWZpbmUgQlUyNjE0X1RFU1RfTUFTSwlNS01BU0soVEVTVCkKIAotc3RhdGljIHN0cnVjdCBnZW10ZWtfZGV2aWNlIGdlbXRla191bml0OwotCi1zdGF0aWMgc3BpbmxvY2tfdCBsb2NrOwotCiAvKgogICogU2V0IGRhdGEgd2hpY2ggd2lsbCBiZSBzZW50IHRvIEJVMjYxNEZTLgogICovCkBAIC0xNjYsMzMgKzE2NiwzMyBAQAogLyoKICAqIFRyYW5zbWl0IHNldHRpbmdzIHRvIEJVMjYxNEZTIG92ZXIgR2VtVGVrIElDLgogICovCi1zdGF0aWMgdm9pZCBnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KHN0cnVjdCBnZW10ZWsgKmd0KQogewogCWludCBpLCBiaXQsIHEsIG11dGU7CiAKLQlzcGluX2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKIAotCW11dGUgPSBkZXYtPm11dGVkID8gR0VNVEVLX01UIDogMHgwMDsKKwltdXRlID0gZ3QtPm11dGVkID8gR0VNVEVLX01UIDogMHgwMDsKIAotCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBpbyk7CisJb3V0Yl9wKG11dGUgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CiAJdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShMT05HX0RFTEFZKTsKIAotCWZvciAoaSA9IDAsIHEgPSBkZXYtPmJ1MjYxNGRhdGE7IGkgPCAzMjsgaSsrLCBxID4+PSAxKSB7Ci0JICAgIGJpdCA9IChxICYgMSkgPyBHRU1URUtfREEgOiAwOwotCSAgICBvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCwgaW8pOwotCSAgICB1ZGVsYXkoU0hPUlRfREVMQVkpOwotCSAgICBvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCB8IEdFTVRFS19DSywgaW8pOwotCSAgICB1ZGVsYXkoU0hPUlRfREVMQVkpOworCWZvciAoaSA9IDAsIHEgPSBndC0+YnUyNjE0ZGF0YTsgaSA8IDMyOyBpKyssIHEgPj49IDEpIHsKKwkJYml0ID0gKHEgJiAxKSA/IEdFTVRFS19EQSA6IDA7CisJCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgYml0LCBndC0+aW8pOworCQl1ZGVsYXkoU0hPUlRfREVMQVkpOworCQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCB8IEdFTVRFS19DSywgZ3QtPmlvKTsKKwkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKIAl9CiAKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShTSE9SVF9ERUxBWSk7Ci0Jb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGlvKTsKKwlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgZ3QtPmlvKTsKIAl1ZGVsYXkoTE9OR19ERUxBWSk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCkBAIC0yMDYsMTA3ICsyMDYsMTA5IEBACiAvKgogICogU2V0IEZNLWZyZXF1ZW5jeS4KICAqLwotc3RhdGljIHZvaWQgZ2VtdGVrX3NldGZyZXEoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQorc3RhdGljIHZvaWQgZ2VtdGVrX3NldGZyZXEoc3RydWN0IGdlbXRlayAqZ3QsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKLQotCWlmIChrZWVwbXV0ZWQgJiYgaGFyZG11dGUgJiYgZGV2LT5tdXRlZCkKKwlpZiAoa2VlcG11dGVkICYmIGhhcmRtdXRlICYmIGd0LT5tdXRlZCkKIAkJcmV0dXJuOwogCi0JaWYgKGZyZXEgPCBHRU1URUtfTE9XRlJFUSkKLQkJZnJlcSA9IEdFTVRFS19MT1dGUkVROwotCWVsc2UgaWYgKGZyZXEgPiBHRU1URUtfSElHSEZSRVEpCi0JCWZyZXEgPSBHRU1URUtfSElHSEZSRVE7CisJZnJlcSA9IGNsYW1wX3ZhbChmcmVxLCBHRU1URUtfTE9XRlJFUSwgR0VNVEVLX0hJR0hGUkVRKTsKIAotCWRldi0+bGFzdGZyZXEgPSBmcmVxOwotCWRldi0+bXV0ZWQgPSAwOworCWd0LT5sYXN0ZnJlcSA9IGZyZXE7CisJZ3QtPm11dGVkID0gMDsKIAotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1BPUlQsIDApOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZNRVMsIDApOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCi0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1dBTCwgMCk7Ci0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1VTiwgMSk7CS8qIEdUIGJpdCBzZXQJKi8KLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9URVNULCAwKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1BPUlQsIDApOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1FUywgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dBTCwgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTVVOLCAxKTsJLyogR1QgYml0IHNldAkqLworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfVEVTVCwgMCk7CiAKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TVERGLCBHRU1URUtfU1RERl8zXzEyNV9LSFopOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZSRVEsIGdlbXRla19jb252ZnJlcShmcmVxKSk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TVERGLCBHRU1URUtfU1RERl8zXzEyNV9LSFopOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRlJFUSwgZ2VtdGVrX2NvbnZmcmVxKGZyZXEpKTsKIAotCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZGV2KTsKKwlnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KGd0KTsKIH0KIAogLyoKICAqIFNldCBtdXRlIGZsYWcuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla19tdXRlKHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBnZW10ZWtfbXV0ZShzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKIAlpbnQgaTsKLQlkZXYtPm11dGVkID0gMTsKKworCWd0LT5tdXRlZCA9IDE7CiAKIAlpZiAoaGFyZG11dGUpIHsKIAkJLyogVHVybiBvZmYgUExMLCBkaXNhYmxlIGRhdGEgb3V0cHV0ICovCi0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1BPUlQsIDApOwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GTUVTLCAwKTsJLyogQ1QgYml0IG9mZgkqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0FMLCAwKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1VTiwgMCk7CS8qIEdUIGJpdCBvZmYJKi8KLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfVEVTVCwgMCk7Ci0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NUREYsIEdFTVRFS19QTExfT0ZGKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRlJFUSwgMCk7Ci0JCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZGV2KTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2soJmxvY2spOwotCi0JCS8qIFJlYWQgYnVzIGNvbnRlbnRzIChDRSwgQ0sgYW5kIERBKS4gKi8KLQkJaSA9IGluYl9wKGlvKTsKLQkJLyogV3JpdGUgaXQgYmFjayB3aXRoIG11dGUgZmxhZyBzZXQuICovCi0JCW91dGJfcCgoaSA+PiA1KSB8IEdFTVRFS19NVCwgaW8pOwotCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCi0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9QT1JULCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9GTUVTLCAwKTsJLyogQ1QgYml0IG9mZgkqLworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NXSU4sIDApOwkvKiBGTS1tb2RlCSovCisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dBTCwgMCk7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1VTiwgMCk7CS8qIEdUIGJpdCBvZmYJKi8KKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9URVNULCAwKTsKKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TVERGLCBHRU1URUtfUExMX09GRik7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRlJFUSwgMCk7CisJCWdlbXRla19idTI2MTRfdHJhbnNtaXQoZ3QpOworCQlyZXR1cm47CiAJfQorCisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCisJLyogUmVhZCBidXMgY29udGVudHMgKENFLCBDSyBhbmQgREEpLiAqLworCWkgPSBpbmJfcChndC0+aW8pOworCS8qIFdyaXRlIGl0IGJhY2sgd2l0aCBtdXRlIGZsYWcgc2V0LiAqLworCW91dGJfcCgoaSA+PiA1KSB8IEdFTVRFS19NVCwgZ3QtPmlvKTsKKwl1ZGVsYXkoU0hPUlRfREVMQVkpOworCisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCiAgKiBVbnNldCBtdXRlIGZsYWcuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla191bm11dGUoc3RydWN0IGdlbXRla19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGdlbXRla191bm11dGUoc3RydWN0IGdlbXRlayAqZ3QpCiB7CiAJaW50IGk7Ci0JZGV2LT5tdXRlZCA9IDA7CiAKKwlndC0+bXV0ZWQgPSAwOwogCWlmIChoYXJkbXV0ZSkgewogCQkvKiBUdXJuIFBMTCBiYWNrIG9uLiAqLwotCQlnZW10ZWtfc2V0ZnJlcShkZXYsIGRldi0+bGFzdGZyZXEpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmbG9jayk7Ci0KLQkJaSA9IGluYl9wKGlvKTsKLQkJb3V0Yl9wKGkgPj4gNSwgaW8pOwotCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCi0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJZ2VtdGVrX3NldGZyZXEoZ3QsIGd0LT5sYXN0ZnJlcSk7CisJCXJldHVybjsKIAl9CisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCisJaSA9IGluYl9wKGd0LT5pbyk7CisJb3V0Yl9wKGkgPj4gNSwgZ3QtPmlvKTsKKwl1ZGVsYXkoU0hPUlRfREVMQVkpOworCisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CiB9CiAKIC8qCiAgKiBHZXQgc2lnbmFsIHN0cmVuZ3RoICg9IHN0ZXJlbyBzdGF0dXMpLgogICovCi1zdGF0aWMgaW5saW5lIGludCBnZW10ZWtfZ2V0c2lnc3RyKHZvaWQpCitzdGF0aWMgaW5saW5lIGludCBnZW10ZWtfZ2V0c2lnc3RyKHN0cnVjdCBnZW10ZWsgKmd0KQogewotCXJldHVybiBpbmJfcChpbykgJiBHRU1URUtfTlMgPyAwIDogMTsKKwlpbnQgc2lnOworCisJbXV0ZXhfbG9jaygmZ3QtPmxvY2spOworCXNpZyA9IGluYl9wKGd0LT5pbykgJiBHRU1URUtfTlMgPyAwIDogMTsKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCiAvKgogICogQ2hlY2sgaWYgcmVxdWVzdGVkIGNhcmQgYWN0cyBsaWtlIEdlbVRlayBSYWRpbyBjYXJkLgogICovCi1zdGF0aWMgaW50IGdlbXRla192ZXJpZnkoaW50IHBvcnQpCitzdGF0aWMgaW50IGdlbXRla192ZXJpZnkoc3RydWN0IGdlbXRlayAqZ3QsIGludCBwb3J0KQogewotCXN0YXRpYyBpbnQgdmVyaWZpZWQgPSAtMTsKIAlpbnQgaSwgcTsKIAotCWlmICh2ZXJpZmllZCA9PSBwb3J0KQorCWlmIChndC0+dmVyaWZpZWQgPT0gcG9ydCkKIAkJcmV0dXJuIDE7CiAKLQlzcGluX2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKIAogCXEgPSBpbmJfcChwb3J0KTsJLyogUmVhZCBidXMgY29udGVudHMgYmVmb3JlIHByb2JpbmcuICovCiAJLyogVHJ5IHRvIHR1cm4gb24gQ0UsIENLIGFuZCBEQSByZXNwZWN0aXZlbHkgYW5kIGNoZWNrIGlmIGNhcmQgcmVzcG9uZHMKQEAgLTMxNiwxNSArMzE4LDE1IEBACiAJCXVkZWxheShTSE9SVF9ERUxBWSk7CiAKIAkJaWYgKChpbmJfcChwb3J0KSAmICh+R0VNVEVLX05TKSkgIT0gKDB4MTcgfCAoMSA8PCAoaSArIDUpKSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAJb3V0Yl9wKHEgPj4gNSwgcG9ydCk7CS8qIFdyaXRlIGJ1cyBjb250ZW50cyBiYWNrLiAqLwogCXVkZWxheShTSE9SVF9ERUxBWSk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7Ci0JdmVyaWZpZWQgPSBwb3J0OworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOworCWd0LT52ZXJpZmllZCA9IHBvcnQ7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTMzMiw4MyArMzM0LDYxIEBACiAvKgogICogQXV0b21hdGljIHByb2JpbmcgZm9yIGNhcmQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VtdGVrX3Byb2JlKHZvaWQpCitzdGF0aWMgaW50IGdlbXRla19wcm9iZShzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmd0LT52NGwyX2RldjsKIAlpbnQgaW9wb3J0c1tdID0geyAweDIwYywgMHgzMGMsIDB4MjRjLCAweDM0YywgMHgyNDgsIDB4MjhjIH07CiAJaW50IGk7CiAKIAlpZiAoIXByb2JlKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBkaXNhYmxlZC5cbiIpOworCQl2NGwyX2luZm8odjRsMl9kZXYsICJBdXRvbWF0aWMgZGV2aWNlIHByb2JpbmcgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBlbmFibGVkLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQXV0b21hdGljIGRldmljZSBwcm9iaW5nIGVuYWJsZWQuXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvcG9ydHMpOyArK2kpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVHJ5aW5nIEkvTyBwb3J0IDB4JXguLi5cbiIsIGlvcG9ydHNbaV0pOworCQl2NGwyX2luZm8odjRsMl9kZXYsICJUcnlpbmcgSS9PIHBvcnQgMHgleC4uLlxuIiwgaW9wb3J0c1tpXSk7CiAKIAkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb3BvcnRzW2ldLCAxLCAiZ2VtdGVrLXByb2JlIikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBwb3J0IDB4JXggYnVzeSFcbiIsCisJCQl2NGwyX3dhcm4odjRsMl9kZXYsICJJL08gcG9ydCAweCV4IGJ1c3khXG4iLAogCQkJICAgICAgIGlvcG9ydHNbaV0pOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoZ2VtdGVrX3ZlcmlmeShpb3BvcnRzW2ldKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FyZCBmb3VuZCBmcm9tIEkvTyBwb3J0ICIKKwkJaWYgKGdlbXRla192ZXJpZnkoZ3QsIGlvcG9ydHNbaV0pKSB7CisJCQl2NGwyX2luZm8odjRsMl9kZXYsICJDYXJkIGZvdW5kIGZyb20gSS9PIHBvcnQgIgogCQkJICAgICAgICIweCV4IVxuIiwgaW9wb3J0c1tpXSk7CiAKIAkJCXJlbGVhc2VfcmVnaW9uKGlvcG9ydHNbaV0sIDEpOwotCi0JCQlpbyA9IGlvcG9ydHNbaV07Ci0JCQlyZXR1cm4gaW87CisJCQlndC0+aW8gPSBpb3BvcnRzW2ldOworCQkJcmV0dXJuIGd0LT5pbzsKIAkJfQogCiAJCXJlbGVhc2VfcmVnaW9uKGlvcG9ydHNbaV0sIDEpOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiQXV0b21hdGljIHByb2JpbmcgZmFpbGVkIVxuIik7Ci0KKwl2NGwyX2Vycih2NGwyX2RldiwgIkF1dG9tYXRpYyBwcm9iaW5nIGZhaWxlZCFcbiIpOwogCXJldHVybiAtMTsKIH0KIAogLyoKICAqIFZpZGVvIDQgTGludXggc3R1ZmYuCiAgKi8KLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgPSAiTXV0ZSIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LCB7Ci0JCS5pZCA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gPSAwLAotCQkubWF4aW11bSA9IDY1NTM1LAotCQkuc3RlcCA9IDY1NTM1LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OwotCi1zdGF0aWMgaW50IGdlbXRla19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdlbXRla19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGdlbXRla19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBnZW10ZWtfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UJPSBnZW10ZWtfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4JCT0gZ2VtdGVrX29wZW4sCisJLnJlbGVhc2UJPSBnZW10ZWtfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDE3LDIzICszOTcsMjUgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWdlbXRlayIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJHZW1UZWsiLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gR0VNVEVLX0xPV0ZSRVE7CiAJdi0+cmFuZ2VoaWdoID0gR0VNVEVLX0hJR0hGUkVROwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1cgfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU87Ci0Jdi0+c2lnbmFsID0gMHhmZmZmICogZ2VtdGVrX2dldHNpZ3N0cigpOworCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIGdlbXRla19nZXRzaWdzdHIoZ3QpOwogCWlmICh2LT5zaWduYWwpIHsKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CkBAIC00NDEsNjUgKzQyMyw1NiBAQAogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQorCXJldHVybiAodi0+aW5kZXggIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJaWYgKGYtPnR1bmVyICE9IDApCiAJCXJldHVybiAtRUlOVkFMOworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGd0LT5sYXN0ZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlnZW10ZWtfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKLXsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gcnQtPmxhc3RmcmVxOworCWlmIChmLT50dW5lciAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2VtdGVrX3NldGZyZXEoZ3QsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyArK2kpIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gcnQtPm11dGVkOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJaWYgKHJ0LT5tdXRlZCkKLQkJCWN0cmwtPnZhbHVlID0gMDsKLQkJZWxzZQotCQkJY3RybC0+dmFsdWUgPSA2NTUzNTsKKwkJY3RybC0+dmFsdWUgPSBndC0+bXV0ZWQ7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTUwOCwzNSArNDgxLDE5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkKLQkJCWdlbXRla19tdXRlKHJ0KTsKKwkJCWdlbXRla19tdXRlKGd0KTsKIAkJZWxzZQotCQkJZ2VtdGVrX3VubXV0ZShydCk7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlnZW10ZWtfdW5tdXRlKHJ0KTsKLQkJZWxzZQotCQkJZ2VtdGVrX211dGUocnQpOworCQkJZ2VtdGVrX3VubXV0ZShndCk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTU0NSwxNiArNTAyLDIwIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiAoaSAhPSAwKSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKGEtPmluZGV4ICE9IDApID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgZ2VtdGVrX2lvY3RsX29wcyA9IHsKQEAgLTU3Miw2MiArNTMzLDczIEBACiAJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZ2VtdGVrX3JhZGlvID0gewotCS5uYW1lCQk9ICJHZW1UZWsgUmFkaW8gY2FyZCIsCi0JLmZvcHMJCT0gJmdlbXRla19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmdlbXRla19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIC8qCiAgKiBJbml0aWFsaXphdGlvbiAvIGNsZWFudXAgcmVsYXRlZCBzdHVmZi4KICAqLwogCi0vKgotICogSW5pdGlsaXplIGNhcmQuCi0gKi8KIHN0YXRpYyBpbnQgX19pbml0IGdlbXRla19pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyBSQURJT19CQU5ORVIgIlxuIik7CisJc3RydWN0IGdlbXRlayAqZ3QgPSAmZ2VtdGVrX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZndC0+djRsMl9kZXY7CisJaW50IHJlczsKIAotCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiZ2VtdGVrIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CiAKLQlnZW10ZWtfcHJvYmUoKTsKLQlpZiAoaW8pIHsKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMSwgImdlbXRlayIpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2UuXG4iLCBpbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiR2VtVGVrIFJhZGlvIGNhcmQgZHJpdmVyOiB2MC4wLjNcbiIpOworCisJbXV0ZXhfaW5pdCgmZ3QtPmxvY2spOworCisJZ3QtPnZlcmlmaWVkID0gLTE7CisJZ3QtPmlvID0gaW87CisJZ2VtdGVrX3Byb2JlKGd0KTsKKwlpZiAoZ3QtPmlvKSB7CisJCWlmICghcmVxdWVzdF9yZWdpb24oZ3QtPmlvLCAxLCAiZ2VtdGVrIikpIHsKKwkJCXY0bDJfZXJyKHY0bDJfZGV2LCAiSS9PIHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZS5cbiIsIGd0LT5pbyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKLQkJaWYgKCFnZW10ZWtfdmVyaWZ5KGlvKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhcmQgYXQgSS9PIHBvcnQgMHgleCBkb2VzIG5vdCAiCisJCWlmICghZ2VtdGVrX3ZlcmlmeShndCwgZ3QtPmlvKSkKKwkJCXY0bDJfd2Fybih2NGwyX2RldiwgIkNhcmQgYXQgSS9PIHBvcnQgMHgleCBkb2VzIG5vdCAiCiAJCQkgICAgICAgInJlc3BvbmQgcHJvcGVybHksIGNoZWNrIHlvdXIgIgotCQkJICAgICAgICJjb25maWd1cmF0aW9uLlxuIiwgaW8pOworCQkJICAgICAgICJjb25maWd1cmF0aW9uLlxuIiwgZ3QtPmlvKTsKIAkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgSS9PIHBvcnQgMHgleC5cbiIsIGlvKTsKKwkJCXY0bDJfaW5mbyh2NGwyX2RldiwgIlVzaW5nIEkvTyBwb3J0IDB4JXguXG4iLCBndC0+aW8pOwogCX0gZWxzZSBpZiAocHJvYmUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQgYW5kIG5vICIKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQgYW5kIG5vICIKIAkJICAgICAgICJmaXhlZCBJL08gcG9ydCBkZWZpbmVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQXV0b21hdGljIHByb2JpbmcgZGlzYWJsZWQgYnV0IG5vIGZpeGVkICIKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJBdXRvbWF0aWMgcHJvYmluZyBkaXNhYmxlZCBidXQgbm8gZml4ZWQgIgogCQkgICAgICAgIkkvTyBwb3J0IGRlZmluZWQuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZnZW10ZWtfcmFkaW8sICZnZW10ZWtfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oZ3QtPmlvLCAxKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZnZW10ZWtfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAxKTsKKwlzdHJsY3B5KGd0LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZ3QtPnZkZXYubmFtZSkpOworCWd0LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZ3QtPnZkZXYuZm9wcyA9ICZnZW10ZWtfZm9wczsKKwlndC0+dmRldi5pb2N0bF9vcHMgPSAmZ2VtdGVrX2lvY3RsX29wczsKKwlndC0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmd0LT52ZGV2LCBndCk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZndC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGd0LT5pbywgMSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyogU2V0IGRlZmF1bHRzICovCi0JZ2VtdGVrX3VuaXQubGFzdGZyZXEgPSBHRU1URUtfTE9XRlJFUTsKLQlnZW10ZWtfdW5pdC5idTI2MTRkYXRhID0gMDsKKwlndC0+bGFzdGZyZXEgPSBHRU1URUtfTE9XRlJFUTsKKwlndC0+YnUyNjE0ZGF0YSA9IDA7CiAKIAlpZiAoaW5pdG11dGUpCi0JCWdlbXRla19tdXRlKCZnZW10ZWtfdW5pdCk7CisJCWdlbXRla19tdXRlKGd0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjM3LDE1ICs2MDksMTkgQEAKICAqLwogc3RhdGljIHZvaWQgX19leGl0IGdlbXRla19leGl0KHZvaWQpCiB7CisJc3RydWN0IGdlbXRlayAqZ3QgPSAmZ2VtdGVrX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZndC0+djRsMl9kZXY7CisKIAlpZiAoc2h1dGRvd24pIHsKIAkJaGFyZG11dGUgPSAxOwkvKiBUdXJuIG9mZiBQTEwgKi8KLQkJZ2VtdGVrX211dGUoJmdlbXRla191bml0KTsKKwkJZ2VtdGVrX211dGUoZ3QpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1vZHVsZSB1bmxvYWRlZCBidXQgY2FyZCBub3QgbXV0ZWQhXG4iKTsKKwkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiTW9kdWxlIHVubG9hZGVkIGJ1dCBjYXJkIG5vdCBtdXRlZCFcbiIpOwogCX0KIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZnZW10ZWtfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAxKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ3QtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmd0LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZ3QtPmlvLCAxKTsKIH0KIAogbW9kdWxlX2luaXQoZ2VtdGVrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwppbmRleCBiYTNhMTNhLi4wMWE2ZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwpAQCAtMjIsMjcgKzIyLDIyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDYpCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjA2IgorTU9EVUxFX0FVVEhPUigiQWRhbSBUbGFsa2EsIGF0bGthQHBnLmdkYS5wbCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBNYWVzdHJvIFBDSSBzb3VuZCBjYXJkIHJhZGlvLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfQotfTsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDYpCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjA2IgogCiAjZGVmaW5lIEdQSU9fREFUQQkweDYwICAgLyogcG9ydCBvZmZzZXQgZnJvbSBFU1NfSU9fQkFTRSAqLwogCkBAIC03Miw2MiArNjcsMjcgQEAKIAogI2RlZmluZSBCSVRTMkZSRVEoeCkJKCh4KSAqIEZSRVFfU1RFUCAtIEZSRVFfSUYpCiAKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKK3N0cnVjdCBtYWVzdHJvIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CisJdTE2CWlvOwkvKiBiYXNlIG9mIE1hZXN0cm8gY2FyZCByYWRpbyBpbyAoR1BJT19EQVRBKSovCisJdTE2CW11dGVkOwkvKiBWSURFT19BVURJT19NVVRFICovCisJdTE2CXN0ZXJlbzsJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCisJdTE2CXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLworfTsKIAotc3RhdGljIGludCBtYWVzdHJvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKLQotc3RhdGljIGludCBtYWVzdHJvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFlc3RybyAqdG9fbWFlc3RybyhzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgbWFlc3RybywgdjRsMl9kZXYpOwogfQogCi1zdGF0aWMgaW50IG1hZXN0cm9fZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdTMyIHJhZGlvX2JpdHNfZ2V0KHN0cnVjdCBtYWVzdHJvICpkZXYpCiB7Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBtYWVzdHJvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYWVzdHJvX3JfcGNpX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk2OCksCi0JCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCi0JCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzgpLAotCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAotCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCi0JeyAwIH0KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWFlc3Ryb19yX3BjaV90YmwpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFlc3Ryb19yX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibWFlc3Ryb19yYWRpbyIsCi0JLmlkX3RhYmxlCT0gbWFlc3Ryb19yX3BjaV90YmwsCi0JLnByb2JlCQk9IG1hZXN0cm9fcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYWVzdHJvX3JlbW92ZSksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG1hZXN0cm9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gbWFlc3Ryb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBtYWVzdHJvX2V4Y2x1c2l2ZV9yZWxlYXNlLAotCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdHJ1Y3QgcmFkaW9fZGV2aWNlIHsKLQl1MTYJaW8sCS8qIGJhc2Ugb2YgTWFlc3RybyBjYXJkIHJhZGlvIGlvIChHUElPX0RBVEEpKi8KLQkJbXV0ZWQsCS8qIFZJREVPX0FVRElPX01VVEUgKi8KLQkJc3RlcmVvLAkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KLQkJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCi19OwotCi1zdGF0aWMgdTMyIHJhZGlvX2JpdHNfZ2V0KHN0cnVjdCByYWRpb19kZXZpY2UgKmRldikKLXsKLQlyZWdpc3RlciB1MTYgaW89ZGV2LT5pbywgbCwgcmRhdGE7Ci0JcmVnaXN0ZXIgdTMyIGRhdGE9MDsKKwl1MTYgaW8gPSBkZXYtPmlvLCBsLCByZGF0YTsKKwl1MzIgZGF0YSA9IDA7CiAJdTE2IG9tYXNrOwogCiAJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKQEAgLTEzNSwyNSArOTUsMjMgQEAKIAlvdXR3KDAsIGlvKTsKIAl1ZGVsYXkoMTYpOwogCi0JZm9yIChsPTI0O2wtLTspIHsKKwlmb3IgKGwgPSAyNDsgbC0tOykgewogCQlvdXR3KFNUUl9DTEssIGlvKTsJCS8qIEhJIHN0YXRlICovCiAJCXVkZWxheSgyKTsKLQkJaWYoIWwpCisJCWlmICghbCkKIAkJCWRldi0+dHVuZWQgPSBpbncoaW8pICYgU1RSX01PU1QgPyAwIDogMHhmZmZmOwogCQlvdXR3KDAsIGlvKTsJCQkvKiBMTyBzdGF0ZSAqLwogCQl1ZGVsYXkoMik7CiAJCWRhdGEgPDw9IDE7CQkJLyogc2hpZnQgZGF0YSAqLwogCQlyZGF0YSA9IGludyhpbyk7Ci0JCWlmKCFsKQotCQkJZGV2LT5zdGVyZW8gPSAgcmRhdGEgJiBTVFJfTU9TVCA/Ci0JCQkwIDogMTsKLQkJZWxzZQotCQkJaWYocmRhdGEgJiBTVFJfREFUQSkKLQkJCQlkYXRhKys7CisJCWlmICghbCkKKwkJCWRldi0+c3RlcmVvID0gKHJkYXRhICYgU1RSX01PU1QpID8gIDAgOiAxOworCQllbHNlIGlmIChyZGF0YSAmIFNUUl9EQVRBKQorCQkJZGF0YSsrOwogCQl1ZGVsYXkoMik7CiAJfQogCi0JaWYoZGV2LT5tdXRlZCkKKwlpZiAoZGV2LT5tdXRlZCkKIAkJb3V0dyhTVFJfV1JFTiwgaW8pOwogCiAJdWRlbGF5KDQpOwpAQCAtMTYyLDE4ICsxMjAsMTggQEAKIAlyZXR1cm4gZGF0YSAmIDB4M2ZmZTsKIH0KIAotc3RhdGljIHZvaWQgcmFkaW9fYml0c19zZXQoc3RydWN0IHJhZGlvX2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3N0YXRpYyB2b2lkIHJhZGlvX2JpdHNfc2V0KHN0cnVjdCBtYWVzdHJvICpkZXYsIHUzMiBkYXRhKQogewotCXJlZ2lzdGVyIHUxNiBpbz1kZXYtPmlvLCBsLCBiaXRzOworCXUxNiBpbyA9IGRldi0+aW8sIGwsIGJpdHM7CiAJdTE2IG9tYXNrLCBvZGlyOwogCiAJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKLQlvZGlyICA9IChpbncoaW8gKyBJT19ESVIpICYgflNUUl9EQVRBKSB8IChTVFJfQ0xLIHwgU1RSX1dSRU4pOworCW9kaXIgPSAoaW53KGlvICsgSU9fRElSKSAmIH5TVFJfREFUQSkgfCAoU1RSX0NMSyB8IFNUUl9XUkVOKTsKIAlvdXR3KG9kaXIgfCBTVFJfREFUQSwgaW8gKyBJT19ESVIpOwogCW91dHcofihTVFJfREFUQSB8IFNUUl9DTEsgfCBTVFJfV1JFTiksIGlvICsgSU9fTUFTSyk7CiAJdWRlbGF5KDE2KTsKLQlmb3IgKGw9MjU7bDtsLS0pIHsKLQkJYml0cyA9ICgoZGF0YSA+PiAxOCkgJiBTVFJfREFUQSkgfCBTVFJfV1JFTiA7CisJZm9yIChsID0gMjU7IGw7IGwtLSkgeworCQliaXRzID0gKChkYXRhID4+IDE4KSAmIFNUUl9EQVRBKSB8IFNUUl9XUkVOOwogCQlkYXRhIDw8PSAxOwkJCS8qIHNoaWZ0IGRhdGEgKi8KIAkJb3V0dyhiaXRzLCBpbyk7CQkJLyogc3RhcnQgc3Ryb2JlICovCiAJCXVkZWxheSgyKTsKQEAgLTE4Myw3ICsxNDEsNyBAQAogCQl1ZGVsYXkoNCk7CiAJfQogCi0JaWYoIWRldi0+bXV0ZWQpCisJaWYgKCFkZXYtPm11dGVkKQogCQlvdXR3KDAsIGlvKTsKIAogCXVkZWxheSg0KTsKQEAgLTE5NSw3OCArMTUzLDc5IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCiB7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1hZXN0cm8iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiTWFlc3RybyBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlBDSSIpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSh2b2lkKXJhZGlvX2JpdHNfZ2V0KGNhcmQpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmFkaW9fYml0c19nZXQoZGV2KTsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOwogCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYoY2FyZC0+c3RlcmVvKQorCWlmIChkZXYtPnN0ZXJlbykKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gY2FyZC0+dHVuZWQ7CisJdi0+c2lnbmFsID0gZGV2LT50dW5lZDsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKGYtPmZyZXF1ZW5jeSA8IEZSRVFfTE8gfHwgZi0+ZnJlcXVlbmN5ID4gRlJFUV9ISSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmFkaW9fYml0c19zZXQoY2FyZCwgRlJFUTJCSVRTKGYtPmZyZXF1ZW5jeSkpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmFkaW9fYml0c19zZXQoZGV2LCBGUkVRMkJJVFMoZi0+ZnJlcXVlbmN5KSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gQklUUzJGUkVRKHJhZGlvX2JpdHNfZ2V0KGNhcmQpKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWYtPmZyZXF1ZW5jeSA9IEJJVFMyRlJFUShyYWRpb19iaXRzX2dldChkZXYpKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yNzQsMTEgKzIzMywxMSBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSBjYXJkLT5tdXRlZDsKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGVkOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODcsMzQgKzI0NiwyNiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXJlZ2lzdGVyIHUxNiBpbyA9IGNhcmQtPmlvOwotCXJlZ2lzdGVyIHUxNiBvbWFzayA9IGludyhpbyArIElPX01BU0spOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXUxNiBpbyA9IGRldi0+aW87CisJdTE2IG9tYXNrOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKIAkJb3V0dyh+U1RSX1dSRU4sIGlvICsgSU9fTUFTSyk7Ci0JCW91dHcoKGNhcmQtPm11dGVkID0gY3RybC0+dmFsdWUgKSA/Ci0JCQkJU1RSX1dSRU4gOiAwLCBpbyk7CisJCWRldi0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKKwkJb3V0dyhkZXYtPm11dGVkID8gU1RSX1dSRU4gOiAwLCBpbyk7CiAJCXVkZWxheSg0KTsKIAkJb3V0dyhvbWFzaywgaW8gKyBJT19NQVNLKTsKIAkJbXNsZWVwKDEyNSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzIzLDIwICsyNzQsNTcgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbWFlc3Ryb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTE2IF9fZGV2aW5pdCByYWRpb19wb3dlcl9vbihzdHJ1Y3QgcmFkaW9fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1hZXN0cm9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYWVzdHJvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IG1hZXN0cm9fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBtYWVzdHJvX3JlbGVhc2UsCisJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWFlc3Ryb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLAorCS52aWRpb2NfZ19hdWRpbyAgICAgPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8gICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19nX2lucHV0ICAgICA9IHZpZGlvY19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgPSB2aWRpb2Nfc19mcmVxdWVuY3ksCisJLnZpZGlvY19xdWVyeWN0cmwgICA9IHZpZGlvY19xdWVyeWN0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCit9OworCitzdGF0aWMgdTE2IF9fZGV2aW5pdCByYWRpb19wb3dlcl9vbihzdHJ1Y3QgbWFlc3RybyAqZGV2KQogewogCXJlZ2lzdGVyIHUxNiBpbyA9IGRldi0+aW87CiAJcmVnaXN0ZXIgdTMyIG9mcmVxOwpAQCAtMzYwLDMzICszNDgsMTEgQEAKIAlyZXR1cm4gKG9mcmVxID09IHJhZGlvX2JpdHNfZ2V0KGRldikpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG1hZXN0cm9faW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCi0JLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAotCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKLQkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCi0JLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAotCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAotCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAotCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAotCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWFlc3Ryb19yYWRpbyA9IHsKLQkubmFtZSAgICAgICAgICAgPSAiTWFlc3RybyByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJm1hZXN0cm9fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZtYWVzdHJvX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAotfTsKLQogc3RhdGljIGludCBfX2RldmluaXQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKnJhZGlvX3VuaXQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqbWFlc3Ryb19yYWRpb19pbnN0OworCXN0cnVjdCBtYWVzdHJvICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAlpbnQgcmV0dmFsOwogCiAJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0zOTcsNDYgKzM2Myw1MyBAQAogCiAJcmV0dmFsID0gLUVOT01FTTsKIAotCXJhZGlvX3VuaXQgPSBremFsbG9jKHNpemVvZigqcmFkaW9fdW5pdCksIEdGUF9LRVJORUwpOwotCWlmIChyYWRpb191bml0ID09IE5VTEwpIHsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0JcmFkaW9fdW5pdC0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkgKyBHUElPX0RBVEE7CisJdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWRldi0+cGRldiA9IHBkZXY7CiAKLQltYWVzdHJvX3JhZGlvX2luc3QgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAobWFlc3Ryb19yYWRpb19pbnN0ID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm90IGVub3VnaCBtZW1vcnlcbiIpOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJtYWVzdHJvIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCB2NGwyX2Rldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOwogCQlnb3RvIGVycmZyOwogCX0KIAotCW1lbWNweShtYWVzdHJvX3JhZGlvX2luc3QsICZtYWVzdHJvX3JhZGlvLCBzaXplb2YobWFlc3Ryb19yYWRpbykpOwotCXZpZGVvX3NldF9kcnZkYXRhKG1hZXN0cm9fcmFkaW9faW5zdCwgcmFkaW9fdW5pdCk7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIG1hZXN0cm9fcmFkaW9faW5zdCk7CisJZGV2LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSArIEdQSU9fREFUQTsKIAotCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShtYWVzdHJvX3JhZGlvX2luc3QsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucik7CisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJm1hZXN0cm9fZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJm1hZXN0cm9faW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKKworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKIAkJZ290byBlcnJmcjE7CiAJfQogCi0JaWYgKCFyYWRpb19wb3dlcl9vbihyYWRpb191bml0KSkgeworCWlmICghcmFkaW9fcG93ZXJfb24oZGV2KSkgewogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycnVucjsKIAl9CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICIgdGltZSAiIF9fVElNRV9fICIgICIKLQkJIF9fREFURV9fICJcbiIpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyYWRpbyBjaGlwIGluaXRpYWxpemVkXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAKIAlyZXR1cm4gMDsKIGVycnVucjoKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShtYWVzdHJvX3JhZGlvX2luc3QpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOwogZXJyZnIxOgotCXZpZGVvX2RldmljZV9yZWxlYXNlKG1hZXN0cm9fcmFkaW9faW5zdCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CiBlcnJmcjoKLQlrZnJlZShyYWRpb191bml0KTsKKwlrZnJlZShkZXYpOwogZXJyOgogCXJldHVybiByZXR2YWw7CiAKQEAgLTQ0NCwxMSArNDE3LDMxIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtYWVzdHJvX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG1hZXN0cm8gKmRldiA9IHRvX21hZXN0cm8odjRsMl9kZXYpOwogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmRldik7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtYWVzdHJvX3JfcGNpX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0VTUywgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk2OCksCisJCS5jbGFzcyA9IFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDw8IDgsCisJCS5jbGFzc19tYXNrID0gMHhmZmZmMDAgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzgpLAorCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWFlc3Ryb19yX3BjaV90YmwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFlc3Ryb19yX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibWFlc3Ryb19yYWRpbyIsCisJLmlkX3RhYmxlCT0gbWFlc3Ryb19yX3BjaV90YmwsCisJLnByb2JlCQk9IG1hZXN0cm9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYWVzdHJvX3JlbW92ZSksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBtYWVzdHJvX3JhZGlvX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbWFlc3Ryb19yX2RyaXZlcik7CkBAIC00NjYsNyArNDU5LDMgQEAKIAogbW9kdWxlX2luaXQobWFlc3Ryb19yYWRpb19pbml0KTsKIG1vZHVsZV9leGl0KG1hZXN0cm9fcmFkaW9fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFkYW0gVGxhbGthLCBhdGxrYUBwZy5nZGEucGwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgTWFlc3RybyBQQ0kgc291bmQgY2FyZCByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IGM1ZGMwMGEuLjI2MDZmMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtMzcsMzggKzM3LDMyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKK01PRFVMRV9BVVRIT1IoIkRpbWl0cm9tYW5vbGFraXMgQXBvc3RvbG9zLCBhcGRpbUBncmVjaWFuLm5ldCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSYWRpbyBkcml2ZXIgZm9yIHRoZSBHdWlsbGVtb3QgTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworc3RhdGljIGludCBkZWJ1ZzsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CisKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuNzciCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsNyw3KQorI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDcsIDcpCiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1heGlyYWRpb19yYWRpbzsKLQotI2RlZmluZSBkcHJpbnRrKG51bSwgZm10LCBhcmcuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCWlmIChtYXhpcmFkaW9fcmFkaW8uZGVidWcgPj0gbnVtKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCW1heGlyYWRpb19yYWRpby5uYW1lLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfQotfTsKKyNkZWZpbmUgZHByaW50ayhkZXYsIG51bSwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX2RiZyhudW0sIGRlYnVnLCAmZGV2LT52NGwyX2RldiwgZm10LCAjIyBhcmcpCiAKICNpZm5kZWYgUENJX1ZFTkRPUl9JRF9HVUlMTEVNT1QKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HVUlMTEVNT1QgMHg1MDQ2CkBAIC04MCw5MCArNzQsNzAgQEAKIAogCiAvKiBURUE1NzU3IHBpbiBtYXBwaW5ncyAqLwotc3RhdGljIGNvbnN0IGludCBjbGsgPSAxLCBkYXRhID0gMiwgd3JlbiA9IDQsIG1vX3N0ID0gOCwgcG93ZXIgPSAxNiA7CitzdGF0aWMgY29uc3QgaW50IGNsayA9IDEsIGRhdGEgPSAyLCB3cmVuID0gNCwgbW9fc3QgPSA4LCBwb3dlciA9IDE2OwogCi1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKLQotI2RlZmluZSBGUkVRX0xPCQkgNTAqMTYwMDAKLSNkZWZpbmUgRlJFUV9ISQkJMTUwKjE2MDAwCisjZGVmaW5lIEZSRVFfTE8JCSg1MCAqIDE2MDAwKQorI2RlZmluZSBGUkVRX0hJCQkoMTUwICogMTYwMDApCiAKICNkZWZpbmUgRlJFUV9JRiAgICAgICAgIDE3MTIwMCAvKiAxMC43KjE2MDAwICAgKi8KICNkZWZpbmUgRlJFUV9TVEVQICAgICAgIDIwMCAgICAvKiAxMi41KjE2ICAgICAgKi8KIAogLyogKHg9PWZtaHoqMTYqMTAwMCkgLT4gYml0cyAqLwotI2RlZmluZSBGUkVRMkJJVFMoeCkJKCgoICh1bnNpZ25lZCBpbnQpKHgpK0ZSRVFfSUYrKEZSRVFfU1RFUDw8MSkpIFwKLQkJCS8oRlJFUV9TVEVQPDwyKSk8PDIpCisjZGVmaW5lIEZSRVEyQklUUyh4KSBcCisgICgoKCh1bnNpZ25lZCBpbnQpKHgpICsgRlJFUV9JRiArIChGUkVRX1NURVAgPDwgMSkpIC8gKEZSRVFfU1RFUCA8PCAyKSkgPDwgMikKIAogI2RlZmluZSBCSVRTMkZSRVEoeCkJKCh4KSAqIEZSRVFfU1RFUCAtIEZSRVFfSUYpCiAKIAotc3RhdGljIGludCBtYXhpcmFkaW9fZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdHJ1Y3QgbWF4aXJhZGlvCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQorCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLXN0YXRpYyBpbnQgbWF4aXJhZGlvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYXhpcmFkaW9fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gbWF4aXJhZGlvX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IG1heGlyYWRpb19leGNsdXNpdmVfcmVsZWFzZSwKLQkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJhZGlvX2RldmljZQotewotCV9fdTE2CWlvLAkvKiBiYXNlIG9mIHJhZGlvIGlvICovCi0JCW11dGVkLAkvKiBWSURFT19BVURJT19NVVRFICovCi0JCXN0ZXJlbywJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCi0JCXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLworCXUxNglpbzsJLyogYmFzZSBvZiByYWRpbyBpbyAqLworCXUxNgltdXRlZDsJLyogVklERU9fQVVESU9fTVVURSAqLworCXUxNglzdGVyZW87CS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLworCXUxNgl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KIAogCXVuc2lnbmVkIGxvbmcgZnJlcTsKIAogCXN0cnVjdCBtdXRleCBsb2NrOwotfSByYWRpb191bml0ID0gewotCS5tdXRlZCA9MSwKLQkuZnJlcSA9IEZSRVFfTE8sCiB9OwogCi1zdGF0aWMgdm9pZCBvdXRiaXQodW5zaWduZWQgbG9uZyBiaXQsIF9fdTE2IGlvKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWF4aXJhZGlvICp0b19tYXhpcmFkaW8oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKLQlpZiAoYml0ICE9IDApCi0JCXsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGEgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGF8Y2xrICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVufGRhdGEgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJfQotCWVsc2UKLQkJewotCQkJb3V0YiggIHBvd2VyfHdyZW4gICAgICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW58Y2xrICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQkJb3V0YiggIHBvd2VyfHdyZW4gICAgICAgICAgLGlvKTsgdWRlbGF5KDQpOwotCQl9CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IG1heGlyYWRpbywgdjRsMl9kZXYpOwogfQogCi1zdGF0aWMgdm9pZCB0dXJuX3Bvd2VyKF9fdTE2IGlvLCBpbnQgcCkKK3N0YXRpYyB2b2lkIG91dGJpdCh1bnNpZ25lZCBsb25nIGJpdCwgdTE2IGlvKQoreworCWludCB2YWwgPSBwb3dlciB8IHdyZW4gfCAoYml0ID8gZGF0YSA6IDApOworCisJb3V0Yih2YWwsIGlvKTsKKwl1ZGVsYXkoNCk7CisJb3V0Yih2YWwgfCBjbGssIGlvKTsKKwl1ZGVsYXkoNCk7CisJb3V0Yih2YWwsIGlvKTsKKwl1ZGVsYXkoNCk7Cit9CisKK3N0YXRpYyB2b2lkIHR1cm5fcG93ZXIoc3RydWN0IG1heGlyYWRpbyAqZGV2LCBpbnQgcCkKIHsKIAlpZiAocCAhPSAwKSB7Ci0JCWRwcmludGsoMSwgIlJhZGlvIHBvd2VyZWQgb25cbiIpOwotCQlvdXRiKHBvd2VyLCBpbyk7CisJCWRwcmludGsoZGV2LCAxLCAiUmFkaW8gcG93ZXJlZCBvblxuIik7CisJCW91dGIocG93ZXIsIGRldi0+aW8pOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoMSwgIlJhZGlvIHBvd2VyZWQgb2ZmXG4iKTsKLQkJb3V0YigwLGlvKTsKKwkJZHByaW50ayhkZXYsIDEsICJSYWRpbyBwb3dlcmVkIG9mZlxuIik7CisJCW91dGIoMCwgZGV2LT5pbyk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfZnJlcShfX3UxNiBpbywgX191MzIgZnJlcSkKK3N0YXRpYyB2b2lkIHNldF9mcmVxKHN0cnVjdCBtYXhpcmFkaW8gKmRldiwgdTMyIGZyZXEpCiB7CiAJdW5zaWduZWQgbG9uZyBpbnQgc2k7CiAJaW50IGJsOworCWludCBpbyA9IGRldi0+aW87CiAJaW50IHZhbCA9IEZSRVEyQklUUyhmcmVxKTsKIAogCS8qIFRFQTU3NTcgc2hpZnQgcmVnaXN0ZXIgYml0cyAoc2VlIHBkZikgKi8KQEAgLTE4OCwxNCArMTYyLDE0IEBACiAJCXNpID4+PSAxOwogCX0KIAotCWRwcmludGsoMSwgIlJhZGlvIGZyZXEgc2V0IHRvICVkLiUwMmQgTUh6XG4iLAorCWRwcmludGsoZGV2LCAxLCAiUmFkaW8gZnJlcSBzZXQgdG8gJWQuJTAyZCBNSHpcbiIsCiAJCQkJZnJlcSAvIDE2MDAwLAogCQkJCWZyZXEgJSAxNjAwMCAqIDEwMCAvIDE2MDAwKTsKIAotCXR1cm5fcG93ZXIoaW8sIDEpOworCXR1cm5fcG93ZXIoZGV2LCAxKTsKIH0KIAotc3RhdGljIGludCBnZXRfc3RlcmVvKF9fdTE2IGlvKQorc3RhdGljIGludCBnZXRfc3RlcmVvKHUxNiBpbykKIHsKIAlvdXRiKHBvd2VyLGlvKTsKIAl1ZGVsYXkoNCk7CkBAIC0yMDMsNyArMTc3LDcgQEAKIAlyZXR1cm4gIShpbmIoaW8pICYgbW9fc3QpOwogfQogCi1zdGF0aWMgaW50IGdldF90dW5lKF9fdTE2IGlvKQorc3RhdGljIGludCBnZXRfdHVuZSh1MTYgaW8pCiB7CiAJb3V0Yihwb3dlcitjbGssaW8pOwogCXVkZWxheSg0KTsKQEAgLTIxMiw5NSArMTg2LDg0IEBACiB9CiAKIAotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewotCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbWF4aXJhZGlvIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKLQlzdHJsY3B5KHYtPmNhcmQsICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOwotCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1heGlyYWRpbyIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShkZXYtPnBkZXYpKTsKKwl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQotCXYtPnJhbmdlbG93PUZSRVFfTE87Ci0Jdi0+cmFuZ2VoaWdoPUZSRVFfSEk7Ci0Jdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYoZ2V0X3N0ZXJlbyhjYXJkLT5pbykpCisJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlpZiAoZ2V0X3N0ZXJlbyhkZXYtPmlvKSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsPTB4ZmZmZipnZXRfdHVuZShjYXJkLT5pbyk7CisJdi0+c2lnbmFsID0gMHhmZmZmICogZ2V0X3R1bmUoZGV2LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIkZNIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7CiB9CiAKLQotc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKSB7Ci0JCWRwcmludGsoMSwgInJhZGlvIGZyZXEgKCVkLiUwMmQgTUh6KSBvdXQgb2YgcmFuZ2UgKCVkLSVkKVxuIiwKKwkJZHByaW50ayhkZXYsIDEsICJyYWRpbyBmcmVxICglZC4lMDJkIE1Ieikgb3V0IG9mIHJhbmdlICglZC0lZClcbiIsCiAJCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAogCQkJCQlmLT5mcmVxdWVuY3kgJSAxNjAwMCAqIDEwMCAvIDE2MDAwLAogCQkJCQlGUkVRX0xPIC8gMTYwMDAsIEZSRVFfSEkgLyAxNjAwMCk7CkBAIC0zMDgsNzUgKzI3MSw5MSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljYXJkLT5mcmVxID0gZi0+ZnJlcXVlbmN5OwotCXNldF9mcmVxKGNhcmQtPmlvLCBjYXJkLT5mcmVxKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwlzZXRfZnJlcShkZXYsIGRldi0+ZnJlcSk7CiAJbXNsZWVwKDEyNSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gY2FyZC0+ZnJlcTsKKwlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQlkcHJpbnRrKDQsICJyYWRpbyBmcmVxIGlzICVkLiUwMmQgTUh6IiwKKwlkcHJpbnRrKGRldiwgNCwgInJhZGlvIGZyZXEgaXMgJWQuJTAyZCBNSHoiLAogCQkJCWYtPmZyZXF1ZW5jeSAvIDE2MDAwLAogCQkJCWYtPmZyZXF1ZW5jeSAlIDE2MDAwICogMTAwIC8gMTYwMDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuICgwKTsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOwogCX0KLQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWU9Y2FyZC0+bXV0ZWQ7Ci0JCQlyZXR1cm4gKDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGVkOworCQlyZXR1cm4gMDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQkJaWYoY2FyZC0+bXV0ZWQpCi0JCQkJdHVybl9wb3dlcihjYXJkLT5pbywgMCk7Ci0JCQllbHNlCi0JCQkJc2V0X2ZyZXEoY2FyZC0+aW8sIGNhcmQtPmZyZXEpOwotCQkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlkZXYtPm11dGVkID0gY3RybC0+dmFsdWU7CisJCWlmIChkZXYtPm11dGVkKQorCQkJdHVybl9wb3dlcihkZXYsIDApOworCQllbHNlCisJCQlzZXRfZnJlcShkZXYsIGRldi0+ZnJlcSk7CisJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgbWF4aXJhZGlvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4aXJhZGlvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWF4aXJhZGlvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgICAgICA9IG1heGlyYWRpb19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IG1heGlyYWRpb19yZWxlYXNlLAorCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWF4aXJhZGlvX2lvY3RsX29wcyA9IHsKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAogCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKQEAgLTM5Miw2MCArMzcxLDg0IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYXhpcmFkaW9fcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmbWF4aXJhZGlvX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmbWF4aXJhZGlvX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2RldmluaXQgbWF4aXJhZGlvX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewotCWlmKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJc3RydWN0IG1heGlyYWRpbyAqZGV2OworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5tdXRlZCA9IDE7CisJZGV2LT5mcmVxID0gRlJFUV9MTzsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJtYXhpcmFkaW8iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHY0bDJfZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCWdvdG8gZXJyZnI7CisJfQorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApLCAiTWF4aSBSYWRpbyBGTSAyMDAwIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1tYXhpcmFkaW86IGNhbid0IHJlc2VydmUgSS9PIHBvcnRzXG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjYW4ndCByZXNlcnZlIEkvTyBwb3J0c1xuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbjsKIAotCXJhZGlvX3VuaXQuaW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JbXV0ZXhfaW5pdCgmcmFkaW9fdW5pdC5sb2NrKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmbWF4aXJhZGlvX3JhZGlvLCAmcmFkaW9fdW5pdCk7CisJZGV2LT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmbWF4aXJhZGlvX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZtYXhpcmFkaW9faW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJm1heGlyYWRpb19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcHJpbnRrKCJyYWRpby1tYXhpcmFkaW86IGNhbid0IHJlZ2lzdGVyIGRldmljZSEiKTsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgZGV2aWNlISIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb247CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tbWF4aXJhZGlvOiB2ZXJzaW9uICIKLQkgICAgICAgRFJJVkVSX1ZFUlNJT04KLQkgICAgICAgIiB0aW1lICIKLQkgICAgICAgX19USU1FX18gIiAgIgotCSAgICAgICBfX0RBVEVfXwotCSAgICAgICAiXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJ2ZXJzaW9uICIgRFJJVkVSX1ZFUlNJT04KKwkJCSIgdGltZSAiIF9fVElNRV9fICIgICIgX19EQVRFX18gIlxuIik7CiAKLQlwcmludGsoS0VSTl9JTkZPICJyYWRpby1tYXhpcmFkaW86IGZvdW5kIEd1aWxsZW1vdCBNQVhJIFJhZGlvIGRldmljZSAoaW8gPSAweCV4KVxuIiwKLQkgICAgICAgcmFkaW9fdW5pdC5pbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiZm91bmQgR3VpbGxlbW90IE1BWEkgUmFkaW8gZGV2aWNlIChpbyA9IDB4JXgpXG4iLAorCSAgICAgICBkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX3JlZ2lvbjoKIAlyZWxlYXNlX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogZXJyX291dDoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKK2VycmZyOgorCWtmcmVlKGRldik7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBtYXhpcmFkaW9fcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmbWF4aXJhZGlvX3JhZGlvKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHRvX21heGlyYWRpbyh2NGwyX2Rldik7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAlyZWxlYXNlX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWF4aXJhZGlvX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfR1VJTExFTU9ULCBQQ0lfREVWSUNFX0lEX0dVSUxMRU1PVF9NQVhJUkFESU8sCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCi0JeyAwLH0KKwl7IDAgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1heGlyYWRpb19wY2lfdGJsKTsKQEAgLTQ2OSwxMCArNDcyLDMgQEAKIAogbW9kdWxlX2luaXQobWF4aXJhZGlvX3JhZGlvX2luaXQpOwogbW9kdWxlX2V4aXQobWF4aXJhZGlvX3JhZGlvX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJEaW1pdHJvbWFub2xha2lzIEFwb3N0b2xvcywgYXBkaW1AZ3JlY2lhbi5uZXQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgR3VpbGxlbW90IE1heGkgUmFkaW8gRk0yMDAwIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsbWF4aXJhZGlvX3JhZGlvLmRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwppbmRleCBmZGZjN2JmLi5kZWQyNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogLyoKLSAqIEJpZyB0aGFua3MgdG8gYXV0aG9ycyBvZiBkc2JyMTAwLmMgYW5kIHJhZGlvLXNpNDcweC5jCisgKiBCaWcgdGhhbmtzIHRvIGF1dGhvcnMgYW5kIGNvbnRyaWJ1dG9ycyBvZiBkc2JyMTAwLmMgYW5kIHJhZGlvLXNpNDcweC5jCiAgKgogICogV2hlbiB3b3JrIHdhcyBsb29rZWQgcHJldHR5IGdvb2QsIGkgZGlzY292ZXIgdGhpczoKICAqIGh0dHA6Ly9hdi11c2JyYWRpby5zb3VyY2Vmb3JnZS5uZXQvaW5kZXgucGhwCkBAIC0zMCwxOCArMzAsMjMgQEAKICAqIExhdGVzdCByZWxlYXNlIG9mIHRoZWlycyBwcm9qZWN0IHdhcyBpbiAyMDA1LgogICogUHJvYmFibHksIHRoaXMgZHJpdmVyIGNvdWxkIGJlIGltcHJvdmVkIHRyb3VnaCB1c2luZyB0aGVpcgogICogYWNoaWV2ZW1lbnRzIChzcGVjaWZpY2F0aW9ucyBnaXZlbikuCi0gKiBTbywgd2UgaGF2ZSBzbXRoIHRvIGJlZ2luIHdpdGguCisgKiBBbHNvLCBGYWlkb24gTGlhbWJvdGlzIDxwYXJhdm9pZEBkZWJpYW4ub3JnPiB3cm90ZSBuaWNlIGRyaXZlciBmb3IgdGhpcyByYWRpbworICogaW4gMjAwNy4gSGUgYWxsb3dlZCB0byB1c2UgaGlzIGRyaXZlciB0byBpbXByb3ZlIGN1cnJlbnQgbXI4MDAgcmFkaW8gZHJpdmVyLgorICogaHR0cDovL2tlcm5lbHRyYXAub3JnL21haWxhcmNoaXZlL2xpbnV4LXVzYi1kZXZlbC8yMDA3LzEwLzExLzM0MjQ5MgogICoKLSAqIEhpc3Rvcnk6CiAgKiBWZXJzaW9uIDAuMDE6CUZpcnN0IHdvcmtpbmcgdmVyc2lvbi4KICAqIAkJCUl0J3MgcmVxdWlyZWQgdG8gYmxhY2tsaXN0IEF2ZXJNZWRpYSBVU0IgUmFkaW8KICAqIAkJCWluIHVzYmhpZC9oaWQtcXVpcmtzLmMKKyAqIFZlcnNpb24gMC4xMDoJQSBsb3Qgb2YgY2xlYW51cHMgYW5kIGZpeGVzOiB1bnBsdWdpbmcgdGhlIGRldmljZSwKKyAqIAkJCWZldyBtdXRleCBsb2NrcyB3ZXJlIGFkZGVkLCBjb2RpbnN0eWxlIGlzc3VlcywgZXRjLgorICogCQkJQWRkZWQgc3RlcmVvIHN1cHBvcnQuIFRoYW5rcyB0bworICogCQkJRG91Z2xhcyBTY2hpbGxpbmcgTGFuZGdyYWYgPGRvdWdzbGFuZEBnbWFpbC5jb20+IGFuZAorICogCQkJRGF2aWQgRWxsaW5nc3dvcnRoIDxkYXZpZEBpZGVudGQuZHluZG5zLm9yZz4KKyAqIAkJCWZvciBkaXNjdXNzaW9uLCBoZWxwIGFuZCBzdXBwb3J0LgogICoKICAqIE1hbnkgdGhpbmdzIHRvIGRvOgogICogCS0gQ29ycmVjdCBwb3dlciBtYW5hZ21lbnQgb2YgZGV2aWNlIChzdXNwZW5kICYgcmVzdW1lKQotICogCS0gTWFrZSB4ODYgaW5kZXBlbmRhbmNlIChsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuIHN0dWZmKQogICogCS0gQWRkIGNvZGUgZm9yIHNjYW5uaW5nIGFuZCBzbW9vdGggdHVuaW5nCi0gKiAJLSBDaGVja2VkIGFuZCBhZGQgc3RlcmVvJm1vbm8gc3R1ZmYKICAqIAktIEFkZCBjb2RlIGZvciBzZW5zaXRpdml0eSB2YWx1ZQogICogCS0gQ29ycmVjdCBtaXN0YWtlcwogICogCS0gSW4gSmFwYW4gYW5vdGhlciBGUkVRX01JTiBhbmQgRlJFUV9NQVgKQEAgLTYyLDggKzY3LDggQEAKIC8qIGRyaXZlciBhbmQgbW9kdWxlIGRlZmluaXRpb25zICovCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkFsZXhleSBLbGltb3YgPGtsaW1vdi5saW51eEBnbWFpbC5jb20+IgogI2RlZmluZSBEUklWRVJfREVTQyAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gcmFkaW8gZHJpdmVyIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4wMSIKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAxKQorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xMCIKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAwKQogCiBNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKQEAgLTg3LDYgKzkyLDIyIEBACiAjZGVmaW5lIEZSRVFfTUFYIDEwOC4wCiAjZGVmaW5lIEZSRVFfTVVMIDE2MDAwCiAKKy8qCisgKiBDb21tYW5kcyB0aGF0IGRldmljZSBzaG91bGQgdW5kZXJzdGFuZAorICogTGlzdCBpc250IGZ1bGwgYW5kIHdpbGwgYmUgdXBkYXRlZCB3aXRoIGltcGxlbWVudGF0aW9uIG9mIG5ldyBmdW5jdGlvbnMKKyAqLworI2RlZmluZSBBTVJBRElPX1NFVF9GUkVRCTB4YTQKKyNkZWZpbmUgQU1SQURJT19TRVRfTVVURQkweGFiCisjZGVmaW5lIEFNUkFESU9fU0VUX01PTk8JMHhhZQorCisvKiBDb21mb3J0YWJsZSBkZWZpbmVzIGZvciBhbXJhZGlvX3NldF9tdXRlICovCisjZGVmaW5lIEFNUkFESU9fU1RBUlQJCTB4MDAKKyNkZWZpbmUgQU1SQURJT19TVE9QCQkweDAxCisKKy8qIENvbWZvcnRhYmxlIGRlZmluZXMgZm9yIGFtcmFkaW9fc2V0X3N0ZXJlbyAqLworI2RlZmluZSBXQU5UX1NURVJFTwkJMHgwMAorI2RlZmluZSBXQU5UX01PTk8JCTB4MDEKKwogLyogbW9kdWxlIHBhcmFtZXRlciAqLwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwpAQCAtMTY5LDQwICsxOTAsOCBAQAogCS5zdXBwb3J0c19hdXRvc3VzcGVuZAk9IDAsCiB9OwogCi0vKiBzd2l0Y2ggb24gcmFkaW8uIFNlbmQgOCBieXRlcyB0byBkZXZpY2UuICovCi1zdGF0aWMgaW50IGFtcmFkaW9fc3RhcnQoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKLXsKLQlpbnQgcmV0dmFsOwotCWludCBzaXplOwotCi0JbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwotCi0JcmFkaW8tPmJ1ZmZlclswXSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7Ci0JcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7Ci0JcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YWI7Ci0JcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7Ci0KLQlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCi0JCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmFkaW8tPm11dGVkID0gMDsKLQotCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyogc3dpdGNoIG9mZiByYWRpbyAqLwotc3RhdGljIGludCBhbXJhZGlvX3N0b3Aoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbykKKy8qIHN3aXRjaCBvbi9vZmYgdGhlIHJhZGlvLiBTZW5kIDggYnl0ZXMgdG8gZGV2aWNlICovCitzdGF0aWMgaW50IGFtcmFkaW9fc2V0X211dGUoc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbywgY2hhciBhcmd1bWVudCkKIHsKIAlpbnQgcmV0dmFsOwogCWludCBzaXplOwpAQCAtMjE3LDIwICsyMDYsMjAgQEAKIAlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKIAlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKIAlyYWRpby0+YnVmZmVyWzNdID0gMHgwMDsKLQlyYWRpby0+YnVmZmVyWzRdID0gMHhhYjsKLQlyYWRpby0+YnVmZmVyWzVdID0gMHgwMTsKKwlyYWRpby0+YnVmZmVyWzRdID0gQU1SQURJT19TRVRfTVVURTsKKwlyYWRpby0+YnVmZmVyWzVdID0gYXJndW1lbnQ7CiAJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CiAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcmFkaW8tPm11dGVkID0gMTsKKwlyYWRpby0+bXV0ZWQgPSBhcmd1bWVudDsKIAogCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCkBAIC0yNDIsNyArMjMxLDcgQEAKIHsKIAlpbnQgcmV0dmFsOwogCWludCBzaXplOwotCXVuc2lnbmVkIHNob3J0IGZyZXFfc2VuZCA9IDB4MTMgKyAoZnJlcSA+PiAzKSAvIDI1OworCXVuc2lnbmVkIHNob3J0IGZyZXFfc2VuZCA9IDB4MTAgKyAoZnJlcSA+PiAzKSAvIDI1OwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQpAQCAtMjU0LDcgKzI0Myw3IEBACiAJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CiAJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CiAJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDM7Ci0JcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YTQ7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IEFNUkFESU9fU0VUX0ZSRVE7CiAJcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CiAJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDg7CkBAIC0yNjIsNyArMjUxLDcgQEAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpAQCAtMjc5LDI0ICsyNjgsNTcgQEAKIAlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCiAJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKIAotCWlmIChyZXR2YWwpIHsKKwlpZiAocmV0dmFsIDwgMCB8fCBzaXplICE9IEJVRkZFUl9MRU5HVEgpIHsKIAkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JcmFkaW8tPnN0ZXJlbyA9IDA7Ci0KIAltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qIFVTQiBzdWJzeXN0ZW0gaW50ZXJmYWNlIGJlZ2lucyBoZXJlICovCitzdGF0aWMgaW50IGFtcmFkaW9fc2V0X3N0ZXJlbyhzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvLCBjaGFyIGFyZ3VtZW50KQoreworCWludCByZXR2YWw7CisJaW50IHNpemU7CiAKLS8qIGhhbmRsZSB1bnBsdWdnaW5nIG9mIHRoZSBkZXZpY2UsIHJlbGVhc2UgZGF0YSBzdHJ1Y3R1cmVzCi1pZiBub3RoaW5nIGtlZXBzIHVzIGZyb20gZG9pbmcgaXQuICBJZiBzb21ldGhpbmcgaXMgc3RpbGwKLWtlZXBpbmcgdXMgYnVzeSwgdGhlIHJlbGVhc2UgY2FsbGJhY2sgb2YgdjRsIHdpbGwgdGFrZSBjYXJlCi1vZiByZWxlYXNpbmcgaXQuICovCisJLyogc2FmZXR5IGNoZWNrICovCisJaWYgKHJhZGlvLT5yZW1vdmVkKQorCQlyZXR1cm4gLUVJTzsKKworCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKKworCXJhZGlvLT5idWZmZXJbMF0gPSAweDAwOworCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OworCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOworCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOworCXJhZGlvLT5idWZmZXJbNF0gPSBBTVJBRElPX1NFVF9NT05POworCXJhZGlvLT5idWZmZXJbNV0gPSBhcmd1bWVudDsKKwlyYWRpby0+YnVmZmVyWzZdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzddID0gMHgwMDsKKworCXJldHZhbCA9IHVzYl9idWxrX21zZyhyYWRpby0+dXNiZGV2LCB1c2Jfc25kaW50cGlwZShyYWRpby0+dXNiZGV2LCAyKSwKKwkJKHZvaWQgKikgKHJhZGlvLT5idWZmZXIpLCBCVUZGRVJfTEVOR1RILCAmc2l6ZSwgVVNCX1RJTUVPVVQpOworCisJaWYgKHJldHZhbCA8IDAgfHwgc2l6ZSAhPSBCVUZGRVJfTEVOR1RIKSB7CisJCXJhZGlvLT5zdGVyZW8gPSAtMTsKKwkJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmFkaW8tPnN0ZXJlbyA9IDE7CisKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIEhhbmRsZSB1bnBsdWdnaW5nIHRoZSBkZXZpY2UuCisgKiBXZSBjYWxsIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlIGluIGFueSBjYXNlLgorICogVGhlIGxhc3QgZnVuY3Rpb24gY2FsbGVkIGluIHRoaXMgcHJvY2VkdXJlIGlzCisgKiB1c2JfYW1yYWRpb19kZXZpY2VfcmVsZWFzZS4KKyAqLwogc3RhdGljIHZvaWQgdXNiX2FtcmFkaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKQEAgLTMxMyw5ICszMzUsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tcjgwMCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJBdmVyTWVkaWEgTVIgODAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIlVTQiIpOworCXVzYl9tYWtlX3BhdGgocmFkaW8tPnVzYmRldiwgdi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwogCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCXJldHVybiAwOwpAQCAtMzI2LDYgKzM1MCw3IEBACiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC0zMzcsNyArMzYyLDE2IEBACiAvKiBUT0RPOiBBZGQgZnVuY3Rpb24gd2hpY2ggbG9vayBpcyBzaWduYWwgc3RlcmVvIG9yIG5vdAogICogCWFtcmFkaW9fZ2V0c3RhdChyYWRpbyk7CiAgKi8KLQlyYWRpby0+c3RlcmVvID0gLTE7CisKKy8qIHdlIGNhbGwgYW1yYWRpb19zZXRfc3RlcmVvIHRvIHNldCByYWRpby0+c3RlcmVvCisgKiBIb25lc3RseSwgYW1yYWRpb19nZXRzdGF0IHNob3VsZCBjb3ZlciB0aGlzIGluIGZ1dHVyZSBhbmQKKyAqIGFtcmFkaW9fc2V0X3N0ZXJlbyBzaG91bGRuJ3QgYmUgaGVyZQorICovCisJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX1NURVJFTyk7CisJaWYgKHJldHZhbCA8IDApCisJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJInNldCBzdGVyZW8gZmFpbGVkXG4iKTsKKwogCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOICogRlJFUV9NVUw7CkBAIC0zNTgsNiArMzkyLDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKQEAgLTM2NSw2ICs0MDAsMjUgQEAKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOworCisJLyogbW9uby9zdGVyZW8gc2VsZWN0b3IgKi8KKwlzd2l0Y2ggKHYtPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgorCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9zdGVyZW8ocmFkaW8sIFdBTlRfTU9OTyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJInNldCBtb25vIGZhaWxlZFxuIik7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwkJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX1NURVJFTyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkJInNldCBzdGVyZW8gZmFpbGVkXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3MywxMyArNDI3LDE4IEBACiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQogCQlyZXR1cm4gLUVJTzsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlpZiAoYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSkgPCAwKQorCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCisJcmV0dmFsID0gYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisJaWYgKHJldHZhbCA8IDApCiAJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJInNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTQzOCw2ICs0OTcsNyBAQAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC00NDYsMTMgKzUwNiwxNSBAQAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJaWYgKGFtcmFkaW9fc3RvcChyYWRpbykgPCAwKSB7CisJCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUT1ApOworCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCQkJImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwkJCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RBUlQpOworCQkJaWYgKHJldHZhbCA8IDApIHsKIAkJCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCQkJImFtcmFkaW9fc3RhcnQgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLTE7CkBAIC01MDMsMjAgKzU2NSwyOSBAQAogc3RhdGljIGludCB1c2JfYW1yYWRpb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJbG9ja19rZXJuZWwoKTsKIAogCXJhZGlvLT51c2VycyA9IDE7CiAJcmFkaW8tPm11dGVkID0gMTsKIAotCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApIHsKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUQVJUKTsKKwlpZiAocmV0dmFsIDwgMCkgewogCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCSJyYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5XG4iKTsKIAkJcmFkaW8tPnVzZXJzID0gMDsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpIDwgMCkKKworCXJldHZhbCA9IGFtcmFkaW9fc2V0X3N0ZXJlbyhyYWRpbywgV0FOVF9TVEVSRU8pOworCWlmIChyZXR2YWwgPCAwKQorCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgc3RlcmVvIGZhaWxlZFxuIik7CisKKwlyZXR2YWwgPSBhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkic2V0IGZyZXF1ZW5jeSBmYWlsZWRcbiIpOwogCkBAIC01MzMsMTAgKzYwNCwxMiBAQAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRU5PREVWOwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT51c2VycyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlpZiAoIXJhZGlvLT5yZW1vdmVkKSB7Ci0JCXJldHZhbCA9IGFtcmFkaW9fc3RvcChyYWRpbyk7CisJCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RPUCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkJImFtcmFkaW9fc3RvcCBmYWlsZWRcbiIpOwpAQCAtNTQ5LDggKzYyMiwxMCBAQAogc3RhdGljIGludCB1c2JfYW1yYWRpb19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKGFtcmFkaW9fc3RvcChyYWRpbykgPCAwKQorCXJldHZhbCA9IGFtcmFkaW9fc2V0X211dGUocmFkaW8sIEFNUkFESU9fU1RPUCk7CisJaWYgKHJldHZhbCA8IDApCiAJCWRldl93YXJuKCZpbnRmLT5kZXYsICJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJnb2luZyBpbnRvIHN1c3BlbmQuLlxuIik7CkBAIC01NjIsOCArNjM3LDEwIEBACiBzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcmV0dmFsOwogCi0JaWYgKGFtcmFkaW9fc3RhcnQocmFkaW8pIDwgMCkKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUQVJUKTsKKwlpZiAocmV0dmFsIDwgMCkKIAkJZGV2X3dhcm4oJmludGYtPmRldiwgImFtcmFkaW9fc3RhcnQgZmFpbGVkXG4iKTsKIAogCWRldl9pbmZvKCZpbnRmLT5kZXYsICJjb21pbmcgb3V0IG9mIHN1c3BlbmQuLlxuIik7CkBAIC02MTQsMjggKzY5MSwzMiBAQAogCS5yZWxlYXNlCT0gdXNiX2FtcmFkaW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi0vKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZAotdXNiIGlmIGl0IGlzICovCisvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHJlZ2lzdGVyIHdpdGggdjRsIGFuZCB1c2IgaWYgaXQgaXMgKi8KIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW87CisJaW50IHJldHZhbDsKIAogCXJhZGlvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFtcmFkaW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIShyYWRpbykpCisJaWYgKCFyYWRpbykgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJrbWFsbG9jIGZvciBhbXJhZGlvX2RldmljZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyYWRpby0+YnVmZmVyID0ga21hbGxvYyhCVUZGRVJfTEVOR1RILCBHRlBfS0VSTkVMKTsKIAotCWlmICghKHJhZGlvLT5idWZmZXIpKSB7CisJaWYgKCFyYWRpby0+YnVmZmVyKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImttYWxsb2MgZm9yIHJhZGlvLT5idWZmZXIgZmFpbGVkXG4iKTsKIAkJa2ZyZWUocmFkaW8pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyYWRpby0+dmlkZW9kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKIAotCWlmICghKHJhZGlvLT52aWRlb2RldikpIHsKKwlpZiAoIXJhZGlvLT52aWRlb2RldikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJ2aWRlb19kZXZpY2VfYWxsb2MgZmFpbGVkXG4iKTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NDgsMTIgKzcyOSwxNCBAQAogCXJhZGlvLT51c2VycyA9IDA7CiAJcmFkaW8tPnVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJcmFkaW8tPmN1cmZyZXEgPSA5NS4xNiAqIEZSRVFfTVVMOworCXJhZGlvLT5zdGVyZW8gPSAtMTsKIAogCW11dGV4X2luaXQoJnJhZGlvLT5sb2NrKTsKIAogCXZpZGVvX3NldF9kcnZkYXRhKHJhZGlvLT52aWRlb2RldiwgcmFkaW8pOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpKSB7Ci0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UocmFkaW8tPnZpZGVvZGV2LAlWRkxfVFlQRV9SQURJTywJcmFkaW9fbnIpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmludGYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShyYWRpby0+dmlkZW9kZXYpOwogCQlrZnJlZShyYWRpby0+YnVmZmVyKTsKIAkJa2ZyZWUocmFkaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwppbmRleCAyNTg3MjI3Li5kMWU2YjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYwpAQCAtMTMsMzQgKzEzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDY1NTM1LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiQmVuIFBmYWZmIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgUmFkaW9UcmFjayBJSSByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1JUUkFDSzJfUE9SVCAtMQpAQCAtNDgsNzkgKzMwLDg4IEBACiAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fUlRSQUNLMl9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIHNwaW5sb2NrX3QgbG9jazsKIAotc3RydWN0IHJ0X2RldmljZQorbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBSYWRpb1RyYWNrIGNhcmQgKDB4MjBjIG9yIDB4MzBjKSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMikKKworc3RydWN0IHJ0cmFjazIKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgcG9ydDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIHN0cnVjdCBydHJhY2syIHJ0cmFjazJfY2FyZDsKKwogCiAvKiBsb2NhbCB0aGluZ3MgKi8KIAotc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBydF9tdXRlKHN0cnVjdCBydHJhY2syICpkZXYpCiB7Ci0JaWYoZGV2LT5tdXRlZCkKKwlpZiAoZGV2LT5tdXRlZCkKIAkJcmV0dXJuOwotCXNwaW5fbG9jaygmbG9jayk7Ci0Jb3V0YigxLCBpbyk7Ci0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJb3V0YigxLCBkZXYtPmlvKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJZGV2LT5tdXRlZCA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0X3VubXV0ZShzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBydF91bm11dGUoc3RydWN0IHJ0cmFjazIgKmRldikKIHsKIAlpZihkZXYtPm11dGVkID09IDApCiAJCXJldHVybjsKLQlzcGluX2xvY2soJmxvY2spOwotCW91dGIoMCwgaW8pOwotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoMCwgZGV2LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+bXV0ZWQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB6ZXJvKHZvaWQpCitzdGF0aWMgdm9pZCB6ZXJvKHN0cnVjdCBydHJhY2syICpkZXYpCiB7Ci0Jb3V0Yl9wKDEsIGlvKTsKLQlvdXRiX3AoMywgaW8pOwotCW91dGJfcCgxLCBpbyk7CisJb3V0Yl9wKDEsIGRldi0+aW8pOworCW91dGJfcCgzLCBkZXYtPmlvKTsKKwlvdXRiX3AoMSwgZGV2LT5pbyk7CiB9CiAKLXN0YXRpYyB2b2lkIG9uZSh2b2lkKQorc3RhdGljIHZvaWQgb25lKHN0cnVjdCBydHJhY2syICpkZXYpCiB7Ci0Jb3V0Yl9wKDUsIGlvKTsKLQlvdXRiX3AoNywgaW8pOwotCW91dGJfcCg1LCBpbyk7CisJb3V0Yl9wKDUsIGRldi0+aW8pOworCW91dGJfcCg3LCBkZXYtPmlvKTsKKwlvdXRiX3AoNSwgZGV2LT5pbyk7CiB9CiAKLXN0YXRpYyBpbnQgcnRfc2V0ZnJlcShzdHJ1Y3QgcnRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3N0YXRpYyBpbnQgcnRfc2V0ZnJlcShzdHJ1Y3QgcnRyYWNrMiAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7CiAJaW50IGk7CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+Y3VyZnJlcSA9IGZyZXE7CiAJZnJlcSA9IGZyZXEgLyAyMDAgKyA4NTY7CiAKLQlzcGluX2xvY2soJmxvY2spOwotCi0Jb3V0Yl9wKDB4YzgsIGlvKTsKLQlvdXRiX3AoMHhjOSwgaW8pOwotCW91dGJfcCgweGM5LCBpbyk7CisJb3V0Yl9wKDB4YzgsIGRldi0+aW8pOworCW91dGJfcCgweGM5LCBkZXYtPmlvKTsKKwlvdXRiX3AoMHhjOSwgZGV2LT5pbyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKLQkJemVybyAoKTsKKwkJemVybyhkZXYpOwogCiAJZm9yIChpID0gMTQ7IGkgPj0gMDsgaS0tKQogCQlpZiAoZnJlcSAmICgxIDw8IGkpKQotCQkJb25lICgpOworCQkJb25lKGRldik7CiAJCWVsc2UKLQkJCXplcm8gKCk7CisJCQl6ZXJvKGRldik7CiAKLQlvdXRiX3AoMHhjOCwgaW8pOworCW91dGJfcCgweGM4LCBkZXYtPmlvKTsKIAlpZiAoIWRldi0+bXV0ZWQpCi0JCW91dGJfcCgwLCBpbyk7CisJCW91dGJfcCgwLCBkZXYtPmlvKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyOSw2MSArMTIwLDYxIEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1ydHJhY2syIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlJhZGlvVHJhY2sgSUkiLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCi1zdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0X2dldHNpZ3N0cihzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCWlmIChpbmIoaW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCi0JCXJldHVybiAwOwotCXJldHVybiAxOwkJLyogc2lnbmFsIHByZXNlbnQJCSovCisJaW50IHNpZyA9IDE7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWlmIChpbmIoZGV2LT5pbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KKwkJc2lnID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIHNpZzsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4OCoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4OCAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4RkZGRipydF9nZXRzaWdzdHIocnQpOworCXYtPnNpZ25hbCA9IDB4RkZGRiAqIHJ0X2dldHNpZ3N0cihydCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXJ0X3NldGZyZXEocnQsIHJ0LT5jdXJmcmVxKTsKKwlydF9zZXRmcmVxKHJ0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBydC0+Y3VyZnJlcTsKQEAgLTE5MywxNCArMTg0LDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMDgsNyArMTk2LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTIyNyw3ICsyMTUsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMjQ2LDE3ICsyMzQsNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0yNjUsMzYgKzI0MiwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgcnRyYWNrMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0X2RldmljZSBydHJhY2syX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgcnRyYWNrMl9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcnRyYWNrMl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZydHJhY2syX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRyYWNrMl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJnJ0cmFjazJfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHJ0cmFjazJfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gcnRyYWNrMl9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBydHJhY2syX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHJ0cmFjazJfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBydHJhY2syX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTMxMyw2MiArMjkyLDYxIEBACiAJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcnRyYWNrMl9yYWRpbyA9IHsKLQkubmFtZQkJPSAiUmFkaW9UcmFjayBJSSByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJnJ0cmFjazJfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZydHJhY2syX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgcnRyYWNrMl9pbml0KHZvaWQpCiB7Ci0JaWYoaW89PS0xKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwYyBvciBpbz0weDMwY1xuIik7CisJc3RydWN0IHJ0cmFjazIgKmRldiA9ICZydHJhY2syX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAicnRyYWNrMiIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWRldi0+aW8gPSBpbzsKKwlpZiAoZGV2LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MjBjIG9yIGlvPTB4MzBjXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDQsICJydHJhY2syIikpCi0JewotCQlwcmludGsoS0VSTl9FUlIgInJ0cmFjazI6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5pbywgNCwgInJ0cmFjazIiKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgZGV2LT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnJ0cmFjazJfcmFkaW8sICZydHJhY2syX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA0KTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZydHJhY2syX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgNCk7CisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJnJ0cmFjazJfZm9wczsKKwlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJnJ0cmFjazJfaW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKKworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgNCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkFJTVNsYWIgUmFkaW90cmFjayBJSSBjYXJkIGRyaXZlci5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkFJTVNsYWIgUmFkaW90cmFjayBJSSBjYXJkIGRyaXZlci5cbiIpOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCW91dGIoMSwgaW8pOwotCXJ0cmFjazJfdW5pdC5tdXRlZCA9IDE7CisJb3V0YigxLCBkZXYtPmlvKTsKKwlkZXYtPm11dGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJCZW4gUGZhZmYiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBSYWRpb1RyYWNrIElJIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwYyBvciAweDMwYykiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IHJ0cmFjazJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBydHJhY2syX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmcnRyYWNrMl9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sNCk7CisJc3RydWN0IHJ0cmFjazIgKmRldiA9ICZydHJhY2syX2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA0KTsKIH0KIAogbW9kdWxlX2luaXQocnRyYWNrMl9pbml0KTsKLW1vZHVsZV9leGl0KHJ0cmFjazJfY2xlYW51cF9tb2R1bGUpOwotCi0vKgotICBMb2NhbCB2YXJpYWJsZXM6Ci0gIGNvbXBpbGUtY29tbWFuZDogIm1tYWtlIgotICBFbmQ6Ci0qLworbW9kdWxlX2V4aXQocnRyYWNrMl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKaW5kZXggZDM1OGU0OC4uZjQ3ODRmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMKQEAgLTIyLDExMyArMjIsMTA5IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0KLX07Ci0KLXN0cnVjdCBmbWlfZGV2aWNlCi17Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7Ci0JaW50IGN1cnZvbDsgLyogMSBvciAwICovCi0JdW5zaWduZWQgbG9uZyBjdXJmcmVxOyAvKiBmcmVxIGluIGtIeiAqLwotCV9fdTMyIGZsYWdzOwotfTsKK01PRFVMRV9BVVRIT1IoIlBldHIgVmFuZHJvdmVjLCB2YW5kcm92ZUB2Yy5jdnV0LmN6IGFuZCBNLiBLaXJrd29vZCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFNGMTZNSSByYWRpby4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBpbyA9IC0xOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIHN0cnVjdCBwbnBfZGV2ICpkZXYgPSBOVUxMOwotc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZNSSBjYXJkICgweDI4NCBvciAweDM4NCkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBmbWkKK3sKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKKwlpbnQgY3Vydm9sOyAvKiAxIG9yIDAgKi8KKwl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCisJX191MzIgZmxhZ3M7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IGZtaSBmbWlfY2FyZDsKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqZGV2OwogCiAvKiBmcmVxIGlzIGluIDEvMTYga0h6IHRvIGludGVybmFsIG51bWJlciwgaHcgcHJlY2lzaW9uIGlzIDUwIGtIeiAqLwogLyogSXQgaXMgb25seSB1c2VmdWwgdG8gZ2l2ZSBmcmVxIGluIGludGVydmFsbCBvZiA4MDAgKD0wLjA1TWh6KSwKICAqIG90aGVyIGJpdHMgd2lsbCBiZSB0cnVuY2F0ZWQsIGUuZyA5Mi43NDAwMDE2IC0+IDkyLjcsIGJ1dAogICogOTIuNzQwMDAxNyAtPiA5Mi43NQogICovCi0jZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpLzgwMCsyMTQpCi0jZGVmaW5lIFJTRjE2X01JTkZSRVEgODcqMTYwMDAKLSNkZWZpbmUgUlNGMTZfTUFYRlJFUSAxMDgqMTYwMDAKKyNkZWZpbmUgUlNGMTZfRU5DT0RFKHgpCSgoeCkgLyA4MDAgKyAyMTQpCisjZGVmaW5lIFJTRjE2X01JTkZSRVEgKDg3ICogMTYwMDApCisjZGVmaW5lIFJTRjE2X01BWEZSRVEgKDEwOCAqIDE2MDAwKQogCi1zdGF0aWMgdm9pZCBvdXRiaXRzKGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGF0YSwgaW50IHBvcnQpCitzdGF0aWMgdm9pZCBvdXRiaXRzKGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGF0YSwgaW50IGlvKQogewotCXdoaWxlKGJpdHMtLSkgewotCQlpZihkYXRhICYgMSkgewotCQkJb3V0Yig1LCBwb3J0KTsKKwl3aGlsZSAoYml0cy0tKSB7CisJCWlmIChkYXRhICYgMSkgeworCQkJb3V0Yig1LCBpbyk7CiAJCQl1ZGVsYXkoNik7Ci0JCQlvdXRiKDcsIHBvcnQpOworCQkJb3V0Yig3LCBpbyk7CiAJCQl1ZGVsYXkoNik7CiAJCX0gZWxzZSB7Ci0JCQlvdXRiKDEsIHBvcnQpOworCQkJb3V0YigxLCBpbyk7CiAJCQl1ZGVsYXkoNik7Ci0JCQlvdXRiKDMsIHBvcnQpOworCQkJb3V0YigzLCBpbyk7CiAJCQl1ZGVsYXkoNik7CiAJCX0KLQkJZGF0YT4+PTE7CisJCWRhdGEgPj49IDE7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1pX211dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1pX211dGUoc3RydWN0IGZtaSAqZm1pKQogewotCW11dGV4X2xvY2soJmxvY2spOwotCW91dGIoMHgwMCwgcG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZmbWktPmxvY2spOworCW91dGIoMHgwMCwgZm1pLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZmbWktPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1pX3VubXV0ZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbWlfdW5tdXRlKHN0cnVjdCBmbWkgKmZtaSkKIHsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiKDB4MDgsIHBvcnQpOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKKwlvdXRiKDB4MDgsIGZtaS0+aW8pOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1pX3NldGZyZXEoc3RydWN0IGZtaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IGZtaV9zZXRmcmVxKHN0cnVjdCBmbWkgKmZtaSwgdW5zaWduZWQgbG9uZyBmcmVxKQogewotCWludCBteXBvcnQgPSBkZXYtPnBvcnQ7Ci0JdW5zaWduZWQgbG9uZyBmcmVxID0gZGV2LT5jdXJmcmVxOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJZm1pLT5jdXJmcmVxID0gZnJlcTsKIAotCW11dGV4X2xvY2soJmxvY2spOwotCi0Jb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCBteXBvcnQpOwotCW91dGJpdHMoOCwgMHhDMCwgbXlwb3J0KTsKKwlvdXRiaXRzKDE2LCBSU0YxNl9FTkNPREUoZnJlcSksIGZtaS0+aW8pOworCW91dGJpdHMoOCwgMHhDMCwgZm1pLT5pbyk7CiAJbXNsZWVwKDE0Myk7CQkvKiB3YXMgc2NoZWR1bGVfdGltZW91dChIWi83KSAqLwotCW11dGV4X3VubG9jaygmbG9jayk7Ci0JaWYgKGRldi0+Y3Vydm9sKSBmbWlfdW5tdXRlKG15cG9ydCk7CisJbXV0ZXhfdW5sb2NrKCZmbWktPmxvY2spOworCWlmIChmbWktPmN1cnZvbCkKKwkJZm1pX3VubXV0ZShmbWkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmbWlfZ2V0c2lnc3RyKHN0cnVjdCBmbWlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBmbWlfZ2V0c2lnc3RyKHN0cnVjdCBmbWkgKmZtaSkKIHsKIAlpbnQgdmFsOwogCWludCByZXM7Ci0JaW50IG15cG9ydCA9IGRldi0+cG9ydDsKIAotCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0JdmFsID0gZGV2LT5jdXJ2b2wgPyAweDA4IDogMHgwMDsJLyogdW5tdXRlL211dGUgKi8KLQlvdXRiKHZhbCwgbXlwb3J0KTsKLQlvdXRiKHZhbCB8IDB4MTAsIG15cG9ydCk7CisJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKKwl2YWwgPSBmbWktPmN1cnZvbCA/IDB4MDggOiAweDAwOwkvKiB1bm11dGUvbXV0ZSAqLworCW91dGIodmFsLCBmbWktPmlvKTsKKwlvdXRiKHZhbCB8IDB4MTAsIGZtaS0+aW8pOwogCW1zbGVlcCgxNDMpOyAJCS8qIHdhcyBzY2hlZHVsZV90aW1lb3V0KEhaLzcpICovCi0JcmVzID0gKGludClpbmIobXlwb3J0KzEpOwotCW91dGIodmFsLCBteXBvcnQpOworCXJlcyA9IChpbnQpaW5iKGZtaS0+aW8gKyAxKTsKKwlvdXRiKHZhbCwgZm1pLT5pbyk7CiAKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKIAlyZXR1cm4gKHJlcyAmIDIpID8gMCA6IDB4RkZGRjsKIH0KIApAQCAtMTM3LDkgKzEzMyw5IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1zZjE2Zm1pIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlNGMTYtRk14IHJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NywxOCArMTQzLDE4IEBACiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCWludCBtdWx0OwotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJbXVsdCA9IChmbWktPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSA/IDEgOiAxMDAwOwotCXYtPnJhbmdlbG93ID0gUlNGMTZfTUlORlJFUS9tdWx0OwotCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEvbXVsdDsKKwl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEgLyBtdWx0OworCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEgLyBtdWx0OwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQl2LT5jYXBhYmlsaXR5ID0gZm1pLT5mbGFncyZWNEwyX1RVTkVSX0NBUF9MT1c7CisJdi0+Y2FwYWJpbGl0eSA9IGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJdi0+c2lnbmFsID0gZm1pX2dldHNpZ3N0cihmbWkpOwogCXJldHVybiAwOwpAQCAtMTY3LDMyICsxNjMsMjkgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIShmbWktPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSkKIAkJZi0+ZnJlcXVlbmN5ICo9IDEwMDA7CiAJaWYgKGYtPmZyZXF1ZW5jeSA8IFJTRjE2X01JTkZSRVEgfHwKLQkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEgKQorCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JLypyb3VuZGluZyBpbiBzdGVwcyBvZiA4MDAgdG8gbWF0Y2ggdGggZnJlcQotCXRoYXQgd2lsbCBiZSB1c2VkICovCi0JZm1pLT5jdXJmcmVxID0gKGYtPmZyZXF1ZW5jeS84MDApKjgwMDsKLQlmbWlfc2V0ZnJlcShmbWkpOworCS8qIHJvdW5kaW5nIGluIHN0ZXBzIG9mIDgwMCB0byBtYXRjaCB0aGUgZnJlcQorCSAgIHRoYXQgd2lsbCBiZSB1c2VkICovCisJZm1pX3NldGZyZXEoZm1pLCAoZi0+ZnJlcXVlbmN5IC8gODAwKSAqIDgwMCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IGZtaS0+Y3VyZnJlcTsKQEAgLTIwNCwxNCArMTk3LDkgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0yMTksNyArMjA3LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTIzMiwzMSArMjIwLDIwIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChjdHJsLT52YWx1ZSkKLQkJCWZtaV9tdXRlKGZtaS0+cG9ydCk7CisJCQlmbWlfbXV0ZShmbWkpOwogCQllbHNlCi0JCQlmbWlfdW5tdXRlKGZtaS0+cG9ydCk7CisJCQlmbWlfdW5tdXRlKGZtaSk7CiAJCWZtaS0+Y3Vydm9sID0gY3RybC0+dmFsdWU7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTI2NSwzNiArMjQyLDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IGZtaV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZtaV9kZXZpY2UgZm1pX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgZm1pX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBmbWlfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmZm1pX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgZm1pX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmZm1pX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBmbWlfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gZm1pX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGZtaV9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBmbWlfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBmbWlfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzEzLDEzICsyOTIsNiBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZm1pX3JhZGlvID0gewotCS5uYW1lCQk9ICJTRjE2Rk14IHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmZm1pX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmZm1pX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogLyogbGFkaXM6IHRoaXMgaXMgbXkgY2FyZC4gZG9lcyBhbnkgb3RoZXIgdHlwZXMgZXhpc3Q/ICovCiBzdGF0aWMgc3RydWN0IGlzYXBucF9kZXZpY2VfaWQgaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewogCXsJSVNBUE5QX0FOWV9JRCwgSVNBUE5QX0FOWV9JRCwKQEAgLTM0NCw3ICszMTYsNyBAQAogCWlmIChwbnBfZGV2aWNlX2F0dGFjaChkZXYpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAJaWYgKHBucF9hY3RpdmF0ZV9kZXYoZGV2KSA8IDApIHsKLQkJcHJpbnRrICgicmFkaW8tc2YxNmZtaTogUG5QIGNvbmZpZ3VyZSBmYWlsZWQgKG91dCBvZiByZXNvdXJjZXM/KVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogUG5QIGNvbmZpZ3VyZSBmYWlsZWQgKG91dCBvZiByZXNvdXJjZXM/KVxuIik7CiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTM1NCw1OSArMzI2LDcyIEBACiAJfQogCiAJaSA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMCk7Ci0JcHJpbnRrICgicmFkaW8tc2YxNmZtaTogUG5QIHJlcG9ydHMgY2FyZCBhdCAlI3hcbiIsIGkpOworCXByaW50ayhLRVJOX0lORk8gInJhZGlvLXNmMTZmbWk6IFBuUCByZXBvcnRzIGNhcmQgYXQgJSN4XG4iLCBpKTsKIAogCXJldHVybiBpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBmbWlfaW5pdCh2b2lkKQogeworCXN0cnVjdCBmbWkgKmZtaSA9ICZmbWlfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmZtaS0+djRsMl9kZXY7CisJaW50IHJlczsKKwogCWlmIChpbyA8IDApCiAJCWlvID0gaXNhcG5wX2ZtaV9wcm9iZSgpOwotCWlmIChpbyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1pOiBObyBQblAgY2FyZCBmb3VuZC5cbiIpOwotCQlyZXR1cm4gaW87CisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInNmMTZmbWkiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlmbWktPmlvID0gaW87CisJaWYgKGZtaS0+aW8gPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiTm8gUG5QIGNhcmQgZm91bmQuXG4iKTsKKwkJcmV0dXJuIGZtaS0+aW87CiAJfQogCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJyYWRpby1zZjE2Zm1pIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1pOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGZtaS0+aW8pOwogCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWZtaV91bml0LnBvcnQgPSBpbzsKLQlmbWlfdW5pdC5jdXJ2b2wgPSAwOwotCWZtaV91bml0LmN1cmZyZXEgPSAwOwotCWZtaV91bml0LmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCXZpZGVvX3NldF9kcnZkYXRhKCZmbWlfcmFkaW8sICZmbWlfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGZtaS0+aW8sIDIpOworCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQogCi0JbXV0ZXhfaW5pdCgmbG9jayk7CisJZm1pLT5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwlzdHJsY3B5KGZtaS0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGZtaS0+dmRldi5uYW1lKSk7CisJZm1pLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZm1pLT52ZGV2LmZvcHMgPSAmZm1pX2ZvcHM7CisJZm1pLT52ZGV2LmlvY3RsX29wcyA9ICZmbWlfaW9jdGxfb3BzOworCWZtaS0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmZtaS0+dmRldiwgZm1pKTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtaV9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCW11dGV4X2luaXQoJmZtaS0+bG9jayk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbWktPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihmbWktPmlvLCAyKTsKKwkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0YxNkZNeCByYWRpbyBjYXJkIGRyaXZlciBhdCAweCV4XG4iLCBpbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiY2FyZCBkcml2ZXIgYXQgMHgleFxuIiwgZm1pLT5pbyk7CiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCWZtaV9tdXRlKGlvKTsKKwlmbWlfbXV0ZShmbWkpOwogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJQZXRyIFZhbmRyb3ZlYywgdmFuZHJvdmVAdmMuY3Z1dC5jeiBhbmQgTS4gS2lya3dvb2QiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2TUkgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgU0YxNk1JIGNhcmQgKDB4Mjg0IG9yIDB4Mzg0KSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZm1pX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZm1pX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZm1pX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RydWN0IGZtaSAqZm1pID0gJmZtaV9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtaS0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZm1pLT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7CiAJaWYgKGRldikKIAkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKIH0KIAogbW9kdWxlX2luaXQoZm1pX2luaXQpOwotbW9kdWxlX2V4aXQoZm1pX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KGZtaV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwppbmRleCA5MmYxN2EzLi4wYmE5ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCkBAIC0xOCw0MCArMTgsMjggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7Ci0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCitNT0RVTEVfQVVUSE9SKCJaaWdsaW8gRnJlZGlhbm8sIGZyZWRkeTc3QGFuZ2VsZmlyZS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2Rk1SMiByYWRpby4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbyA9IDB4Mzg0Oworc3RhdGljIGludCByYWRpb19uciA9IC0xOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZGTVIyIGNhcmQgKHNob3VsZCBiZSAweDM4NCwgaWYgZG8gbm90IHdvcmsgdHJ5IDB4Mjg0KSIpOworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCiAjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCiAKICNkZWZpbmUgQVVEX1ZPTF9JTkRFWCAxCiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LAotCVtBVURfVk9MX0lOREVYXSA9IHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxNSwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDAsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OwotCiAjdW5kZWYgREVCVUcKIC8vI2RlZmluZSBERUJVRyAxCiAKQEAgLTYyLDE1NiArNTAsMTYwIEBACiAjZW5kaWYKIAogLyogdGhpcyBzaG91bGQgYmUgc3RhdGljIHZhcnMgZm9yIG1vZHVsZSBzaXplICovCi1zdHJ1Y3QgZm1yMl9kZXZpY2UKK3N0cnVjdCBmbXIyCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsgLyogMC0xNSAqLwogCWludCBtdXRlOwogCWludCBzdGVyZW87IC8qIGNhcmQgaXMgcHJvZHVjaW5nIHN0ZXJlbyBhdWRpbyAqLwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsgLyogZnJlcSBpbiBrSHogKi8KIAlpbnQgY2FyZF90eXBlOwotCV9fdTMyIGZsYWdzOworCXUzMiBmbGFnczsKIH07CiAKLXN0YXRpYyBpbnQgaW8gPSAweDM4NDsKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgZm1yMiBmbXIyX2NhcmQ7CiAKIC8qIGh3IHByZWNpc2lvbiBpcyAxMi41IGtIegogICogSXQgaXMgb25seSB1c2VmdWwgdG8gZ2l2ZSBmcmVxIGluIGludGVydmFsbCBvZiAyMDAgKD0wLjAxMjVNaHopLAogICogb3RoZXIgYml0cyB3aWxsIGJlIHRydW5jYXRlZAogICovCi0jZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpLzIwMCs4NTYpCi0jZGVmaW5lIFJTRjE2X01JTkZSRVEgODcqMTYwMDAKLSNkZWZpbmUgUlNGMTZfTUFYRlJFUSAxMDgqMTYwMDAKKyNkZWZpbmUgUlNGMTZfRU5DT0RFKHgpCSgoeCkgLyAyMDAgKyA4NTYpCisjZGVmaW5lIFJTRjE2X01JTkZSRVEgKDg3ICogMTYwMDApCisjZGVmaW5lIFJTRjE2X01BWEZSRVEgKDEwOCAqIDE2MDAwKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdChpbnQgbixpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0KGludCBuLCBpbnQgaW8pCiB7Ci0JZm9yICg7bjstLW4pIGluYihwb3J0KTsKKwlmb3IgKDsgbjsgLS1uKQorCQlpbmIoaW8pOwogfQogCi1zdGF0aWMgdm9pZCBvdXRiaXRzKGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGF0YSwgaW50IG5XYWl0LCBpbnQgcG9ydCkKK3N0YXRpYyB2b2lkIG91dGJpdHMoaW50IGJpdHMsIHVuc2lnbmVkIGludCBkYXRhLCBpbnQgbldhaXQsIGludCBpbykKIHsKIAlpbnQgYml0OwotCWZvcig7LS1iaXRzPj0wOykgewotCQliaXQgPSAoZGF0YT4+Yml0cykgJiAxOwotCQlvdXRiKGJpdCxwb3J0KTsKLQkJd2FpdChuV2FpdCxwb3J0KTsKLQkJb3V0YihiaXR8Mixwb3J0KTsKLQkJd2FpdChuV2FpdCxwb3J0KTsKLQkJb3V0YihiaXQscG9ydCk7Ci0JCXdhaXQobldhaXQscG9ydCk7CisKKwlmb3IgKDsgLS1iaXRzID49IDA7KSB7CisJCWJpdCA9IChkYXRhID4+IGJpdHMpICYgMTsKKwkJb3V0YihiaXQsIGlvKTsKKwkJd2FpdChuV2FpdCwgaW8pOworCQlvdXRiKGJpdCB8IDIsIGlvKTsKKwkJd2FpdChuV2FpdCwgaW8pOworCQlvdXRiKGJpdCwgaW8pOworCQl3YWl0KG5XYWl0LCBpbyk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1yMl9tdXRlKGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGZtcjJfbXV0ZShpbnQgaW8pCiB7Ci0Jb3V0YigweDAwLCBwb3J0KTsKLQl3YWl0KDQscG9ydCk7CisJb3V0YigweDAwLCBpbyk7CisJd2FpdCg0LCBpbyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX3VubXV0ZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX3VubXV0ZShpbnQgaW8pCiB7Ci0Jb3V0YigweDA0LCBwb3J0KTsKLQl3YWl0KDQscG9ydCk7CisJb3V0YigweDA0LCBpbyk7CisJd2FpdCg0LCBpbyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZtcjJfc3RlcmVvX21vZGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIGludCBmbXIyX3N0ZXJlb19tb2RlKGludCBpbykKIHsKLQlpbnQgbiA9IGluYihwb3J0KTsKLQlvdXRiKDYscG9ydCk7Ci0JaW5iKHBvcnQpOwotCW4gPSAoKG4+PjMpJjEpXjE7CisJaW50IG4gPSBpbmIoaW8pOworCisJb3V0Yig2LCBpbyk7CisJaW5iKGlvKTsKKwluID0gKChuID4+IDMpICYgMSkgXiAxOwogCWRlYnVnX3ByaW50KChLRVJOX0RFQlVHICJzdGVyZW86ICVkXG4iLCBuKSk7CiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgZm1yMl9wcm9kdWN0X2luZm8oc3RydWN0IGZtcjJfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGZtcjJfcHJvZHVjdF9pbmZvKHN0cnVjdCBmbXIyICpkZXYpCiB7Ci0JaW50IG4gPSBpbmIoZGV2LT5wb3J0KTsKKwlpbnQgbiA9IGluYihkZXYtPmlvKTsKKwogCW4gJj0gMHhDMTsKLQlpZiAobiA9PSAwKQotCXsKKwlpZiAobiA9PSAwKSB7CiAJCS8qIHRoaXMgc2hvdWxkIHN1cHBvcnQgdm9sdW1lIHNldCAqLwogCQlkZXYtPmNhcmRfdHlwZSA9IDEyOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogbm90IHZvbHVtZSAobWluZSBpcyAxMSkgKi8KLQlkZXYtPmNhcmRfdHlwZSA9IChuPT0xMjgpPzExOjA7CisJZGV2LT5jYXJkX3R5cGUgPSAobiA9PSAxMjgpID8gMTEgOiAwOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmbXIyX2dldHNpZ3N0cihzdHJ1Y3QgZm1yMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgaW50IGZtcjJfZ2V0c2lnc3RyKHN0cnVjdCBmbXIyICpkZXYpCiB7Ci0JLyogISEhIHdvcmsgb25seSBpZiBzY2FubmluZyBmcmVxICovCi0JaW50IHBvcnQgPSBkZXYtPnBvcnQsIHJlcyA9IDB4ZmZmZjsKLQlvdXRiKDUscG9ydCk7Ci0Jd2FpdCg0LHBvcnQpOwotCWlmICghKGluYihwb3J0KSYxKSkgcmVzID0gMDsKKwkvKiAhISEgd29ya3Mgb25seSBpZiBzY2FubmluZyBmcmVxICovCisJaW50IHJlcyA9IDB4ZmZmZjsKKworCW91dGIoNSwgZGV2LT5pbyk7CisJd2FpdCg0LCBkZXYtPmlvKTsKKwlpZiAoIShpbmIoZGV2LT5pbykgJiAxKSkKKwkJcmVzID0gMDsKIAlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAic2lnbmFsOiAlZFxuIiwgcmVzKSk7CiAJcmV0dXJuIHJlczsKIH0KIAogLyogc2V0IGZyZXF1ZW5jeSBhbmQgdW5tdXRlIGNhcmQgKi8KLXN0YXRpYyBpbnQgZm1yMl9zZXRmcmVxKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbXIyX3NldGZyZXEoc3RydWN0IGZtcjIgKmRldikKIHsKLQlpbnQgcG9ydCA9IGRldi0+cG9ydDsKIAl1bnNpZ25lZCBsb25nIGZyZXEgPSBkZXYtPmN1cmZyZXE7CiAKLQlmbXIyX211dGUocG9ydCk7CisJZm1yMl9tdXRlKGRldi0+aW8pOwogCiAJLyogMHg0MiBmb3IgbW9ubyBvdXRwdXQKIAkgKiAweDEwMiBmb3J3YXJkIHNjYW5uaW5nCiAJICogMHgxODIgc2NhbnNpb25lIGF2YW50aQogCSAqLwotCW91dGJpdHMoOSwweDIsMyxwb3J0KTsKLQlvdXRiaXRzKDE2LFJTRjE2X0VOQ09ERShmcmVxKSwyLHBvcnQpOworCW91dGJpdHMoOSwgMHgyLCAzLCBkZXYtPmlvKTsKKwlvdXRiaXRzKDE2LCBSU0YxNl9FTkNPREUoZnJlcSksIDIsIGRldi0+aW8pOwogCi0JZm1yMl91bm11dGUocG9ydCk7CisJZm1yMl91bm11dGUoZGV2LT5pbyk7CiAKIAkvKiB3YWl0IDAuMTEgc2VjICovCiAJbXNsZWVwKDExMCk7CiAKIAkvKiBOT1RFIGlmIG11dGUgdGhpcyBzdG9wIHJhZGlvCiAJICAgeW91IG11c3Qgc2V0IGZyZXEgb24gdW5tdXRlICovCi0JZGV2LT5zdGVyZW8gPSBmbXIyX3N0ZXJlb19tb2RlKHBvcnQpOworCWRldi0+c3RlcmVvID0gZm1yMl9zdGVyZW9fbW9kZShkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogISEhIG5vdCB0ZXN0ZWQsIGluIG15IGNhcmQgdGhpcyBkb2VzJ3Qgd29yayAhISEgKi8KLXN0YXRpYyBpbnQgZm1yMl9zZXR2b2x1bWUoc3RydWN0IGZtcjJfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGZtcjJfc2V0dm9sdW1lKHN0cnVjdCBmbXIyICpkZXYpCiB7CiAJaW50IHZvbFsxNl0gPSB7IDB4MDIxLCAweDA4NCwgMHgwOTAsIDB4MTA0LAogCQkJMHgxMTAsIDB4MjA0LCAweDIxMCwgMHg0MDIsCiAJCQkweDQwNCwgMHg0MDgsIDB4NDEwLCAweDgwMSwKIAkJCTB4ODAyLCAweDgwNCwgMHg4MDgsIDB4ODEwIH07Ci0JaW50IGksIGEsIHBvcnQgPSBkZXYtPnBvcnQ7CisJaW50IGksIGE7CiAJaW50IG4gPSB2b2xbZGV2LT5jdXJ2b2wgJiAweDBmXTsKIAogCWlmIChkZXYtPmNhcmRfdHlwZSAhPSAxMSkKIAkJcmV0dXJuIDE7CiAKIAlmb3IgKGkgPSAxMjsgLS1pID49IDA7ICkgewotCQlhID0gKChuID4+IGkpICYgMSkgPDwgNjsgLyogaWYgKGE9MCkgYT0gMDsgZWxzZSBhPSAweDQwOyAqLwotCQlvdXRiKGEgfCA0LCBwb3J0KTsKLQkJd2FpdCg0LCBwb3J0KTsKLQkJb3V0YihhIHwgMHgyNCwgcG9ydCk7Ci0JCXdhaXQoNCwgcG9ydCk7Ci0JCW91dGIoYSB8IDQsIHBvcnQpOwotCQl3YWl0KDQsIHBvcnQpOworCQlhID0gKChuID4+IGkpICYgMSkgPDwgNjsgLyogaWYgKGE9PTApIGEgPSAwOyBlbHNlIGEgPSAweDQwOyAqLworCQlvdXRiKGEgfCA0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKKwkJb3V0YihhIHwgMHgyNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CisJCW91dGIoYSB8IDQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOwogCX0KIAlmb3IgKGkgPSA2OyAtLWkgPj0gMDsgKSB7CiAJCWEgPSAoKDB4MTggPj4gaSkgJiAxKSA8PCA2OwotCQlvdXRiKGEgfCA0LCBwb3J0KTsKLQkJd2FpdCg0LHBvcnQpOwotCQlvdXRiKGEgfCAweDI0LCBwb3J0KTsKLQkJd2FpdCg0LHBvcnQpOwotCQlvdXRiKGF8NCwgcG9ydCk7Ci0JCXdhaXQoNCxwb3J0KTsKKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CisJCW91dGIoYSB8IDB4MjQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCA0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKIAl9Ci0Jd2FpdCg0LCBwb3J0KTsKLQlvdXRiKDB4MTQsIHBvcnQpOwotCisJd2FpdCg0LCBkZXYtPmlvKTsKKwlvdXRiKDB4MTQsIGRldi0+aW8pOwogCXJldHVybiAwOwogfQogCkBAIC0yMjAsOSArMjEyLDkgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXNmMTZmbXIyIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlNGMTYtRk1SMiByYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCkBAIC0yMzAsNTQgKzIyMiw1MiBAQAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlpbnQgbXVsdDsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAogCW11bHQgPSAoZm1yMi0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpID8gMSA6IDEwMDA7Ci0Jdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRL211bHQ7Ci0Jdi0+cmFuZ2VoaWdoID0gUlNGMTZfTUFYRlJFUS9tdWx0OworCXYtPnJhbmdlbG93ID0gUlNGMTZfTUlORlJFUSAvIG11bHQ7CisJdi0+cmFuZ2VoaWdoID0gUlNGMTZfTUFYRlJFUSAvIG11bHQ7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBmbXIyLT5mbGFncyZWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IGZtcjItPnN0ZXJlbyA/IFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CiAJCQkJVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0JbXV0ZXhfbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZm1yMi0+bG9jayk7CiAJdi0+c2lnbmFsID0gZm1yMl9nZXRzaWdzdHIoZm1yMik7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmZtcjItPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICghKGZtcjItPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSkKIAkJZi0+ZnJlcXVlbmN5ICo9IDEwMDA7CiAJaWYgKGYtPmZyZXF1ZW5jeSA8IFJTRjE2X01JTkZSRVEgfHwKLQkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEgKQorCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JLypyb3VuZGluZyBpbiBzdGVwcyBvZiAyMDAgdG8gbWF0Y2ggdGggZnJlcQotCXRoYXQgd2lsbCBiZSB1c2VkICovCi0JZm1yMi0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kvMjAwKSoyMDA7CisJLyogcm91bmRpbmcgaW4gc3RlcHMgb2YgMjAwIHRvIG1hdGNoIHRoZSBmcmVxCisJICAgdGhhdCB3aWxsIGJlIHVzZWQgKi8KKwlmbXIyLT5jdXJmcmVxID0gKGYtPmZyZXF1ZW5jeSAvIDIwMCkgKiAyMDA7CiAKIAkvKiBzZXQgY2FyZCBmcmVxIChpZiBub3QgbXV0ZWQpICovCiAJaWYgKGZtcjItPmN1cnZvbCAmJiAhZm1yMi0+bXV0ZSkgewotCQltdXRleF9sb2NrKCZsb2NrKTsKKwkJbXV0ZXhfbG9jaygmZm1yMi0+bG9jayk7CiAJCWZtcjJfc2V0ZnJlcShmbXIyKTsKLQkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yODUsNyArMjc1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBmbXIyLT5jdXJmcmVxOwpAQCAtMjk3LDEzICsyODcsMTYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmcmFkaW9fcWN0cmxbaV0sIHNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCS8qIE9ubHkgY2FyZF90eXBlID09IDExIGltcGxlbWVudHMgdm9sdW1lICovCisJCWlmIChmbXIyLT5jYXJkX3R5cGUgPT0gMTEpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDE1LCAxLCAwKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMTEsNyArMzA0LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMjcsMTggKzMyMCwxNCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJZm1yMi0+bXV0ZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJaWYgKGN0cmwtPnZhbHVlID4gcmFkaW9fcWN0cmxbQVVEX1ZPTF9JTkRFWF0ubWF4aW11bSkKLQkJCWZtcjItPmN1cnZvbCA9IHJhZGlvX3FjdHJsW0FVRF9WT0xfSU5ERVhdLm1heGltdW07Ci0JCWVsc2UKLQkJCWZtcjItPmN1cnZvbCA9IGN0cmwtPnZhbHVlOwotCisJCWZtcjItPmN1cnZvbCA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1MSwyNSArMzQwLDE0IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJtdXRlXG4iKTsKICNlbmRpZgogCi0JbXV0ZXhfbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZm1yMi0+bG9jayk7CiAJaWYgKGZtcjItPmN1cnZvbCAmJiAhZm1yMi0+bXV0ZSkgewogCQlmbXIyX3NldHZvbHVtZShmbXIyKTsKIAkJLyogU2V0IGZyZXF1ZW5jeSBhbmQgdW5tdXRlIGNhcmQgKi8KIAkJZm1yMl9zZXRmcmVxKGZtcjIpOwogCX0gZWxzZQotCQlmbXIyX211dGUoZm1yMi0+cG9ydCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwkJZm1yMl9tdXRlKGZtcjItPmlvKTsKKwltdXRleF91bmxvY2soJmZtcjItPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0zODEsMzYgKzM1OSwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBmbXIyX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZm1yMl9kZXZpY2UgZm1yMl91bml0OwotCi1zdGF0aWMgaW50IGZtcjJfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGZtcjJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmZm1yMl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IGZtcjJfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZmbXIyX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBmbXIyX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gZm1yMl9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBmbXIyX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IGZtcjJfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBmbXIyX3JlbGVhc2UsCiAJLmlvY3RsICAgICAgICAgID0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDI5LDY3ICs0MDksNjQgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGZtcjJfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlNGMTZGTVIyIHJhZGlvIiwKLQkuZm9wcwkJPSAmZm1yMl9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmZtcjJfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBmbXIyX2luaXQodm9pZCkKIHsKLQlmbXIyX3VuaXQucG9ydCA9IGlvOwotCWZtcjJfdW5pdC5jdXJ2b2wgPSAwOwotCWZtcjJfdW5pdC5tdXRlID0gMDsKLQlmbXIyX3VuaXQuY3VyZnJlcSA9IDA7Ci0JZm1yMl91bml0LnN0ZXJlbyA9IDE7Ci0JZm1yMl91bml0LmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCWZtcjJfdW5pdC5jYXJkX3R5cGUgPSAwOwotCXZpZGVvX3NldF9kcnZkYXRhKCZmbXIyX3JhZGlvLCAmZm1yMl91bml0KTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9ICZmbXIyX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZmbXIyLT52NGwyX2RldjsKKwlpbnQgcmVzOwogCi0JbXV0ZXhfaW5pdCgmbG9jayk7CisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInNmMTZmbXIyIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJZm1yMi0+aW8gPSBpbzsKKwlmbXIyLT5zdGVyZW8gPSAxOworCWZtcjItPmZsYWdzID0gVjRMMl9UVU5FUl9DQVBfTE9XOworCW11dGV4X2luaXQoJmZtcjItPmxvY2spOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInNmMTZmbXIyIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby1zZjE2Zm1yMjogcmVxdWVzdF9yZWdpb24gZmFpbGVkIVxuIik7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihmbXIyLT5pbywgMiwgInNmMTZmbXIyIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJyZXF1ZXN0X3JlZ2lvbiBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbXIyX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGZtcjItPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKworCXN0cmxjcHkoZm1yMi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGZtcjItPnZkZXYubmFtZSkpOworCWZtcjItPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlmbXIyLT52ZGV2LmZvcHMgPSAmZm1yMl9mb3BzOworCWZtcjItPnZkZXYuaW9jdGxfb3BzID0gJmZtcjJfaW9jdGxfb3BzOworCWZtcjItPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZmbXIyLT52ZGV2LCBmbXIyKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmZtcjItPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihmbXIyLT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNGMTZGTVIyIHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXguXG4iLCBpbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiU0YxNkZNUjIgcmFkaW8gY2FyZCBkcml2ZXIgYXQgMHgleC5cbiIsIGZtcjItPmlvKTsKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0JbXV0ZXhfbG9jaygmbG9jayk7Ci0JZm1yMl9tdXRlKGlvKTsKLQlmbXIyX3Byb2R1Y3RfaW5mbygmZm1yMl91bml0KTsKLQltdXRleF91bmxvY2soJmxvY2spOwotCWRlYnVnX3ByaW50KChLRVJOX0RFQlVHICJjYXJkX3R5cGUgJWRcbiIsIGZtcjJfdW5pdC5jYXJkX3R5cGUpKTsKLQotCS8qIE9ubHkgY2FyZF90eXBlID09IDExIGltcGxlbWVudHMgdm9sdW1lICovCi0JaWYgKGZtcjJfdW5pdC5jYXJkX3R5cGUgIT0gMTEpCi0JCXJhZGlvX3FjdHJsW0FVRF9WT0xfSU5ERVhdLm1heGltdW0gPSAxOwotCisJbXV0ZXhfbG9jaygmZm1yMi0+bG9jayk7CisJZm1yMl9tdXRlKGZtcjItPmlvKTsKKwlmbXIyX3Byb2R1Y3RfaW5mbyhmbXIyKTsKKwltdXRleF91bmxvY2soJmZtcjItPmxvY2spOworCWRlYnVnX3ByaW50KChLRVJOX0RFQlVHICJjYXJkX3R5cGUgJWRcbiIsIGZtcjItPmNhcmRfdHlwZSkpOwogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJaaWdsaW8gRnJlZGlhbm8sIGZyZWRkeTc3QGFuZ2VsZmlyZS5jb20iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2Rk1SMiByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2Rk1SMiBjYXJkIChzaG91bGQgYmUgMHgzODQsIGlmIGRvIG5vdCB3b3JrIHRyeSAweDI4NCkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGZtcjJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBmbXIyX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZm1yMl9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IGZtcjIgKmZtcjIgPSAmZm1yMl9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtcjItPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmZtcjItPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihmbXIyLT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KGZtcjJfaW5pdCk7Ci1tb2R1bGVfZXhpdChmbXIyX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KGZtcjJfZXhpdCk7CiAKICNpZm5kZWYgTU9EVUxFCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCmluZGV4IDRkZmVkNmEuLjcxM2UyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwpAQCAtNSw4ICs1LDkgQEAKICAqICAgLSBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24KICAqICAgLSBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKFJEWC0xNTUtRUYpCiAgKiAgIC0gS1dvcmxkIFVTQiBGTSBSYWRpbyBTbmFwTXVzaWMgTW9iaWxlIDcwMCAoRk03MDApCisgKiAgIC0gU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikKICAqCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA4IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjksNyArMzAsNyBAQAogICogMjAwOC0wMS0xMglUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAgKgkJVmVyc2lvbiAxLjAuMAogICoJCS0gRmlyc3Qgd29ya2luZyB2ZXJzaW9uCi0gKiAyMDA4LTAxLTEzICAgVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgorICogMjAwOC0wMS0xMwlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAgKgkJVmVyc2lvbiAxLjAuMQogICoJCS0gSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcsIGV2ZXJ5IGZ1bmN0aW9uIG5vdyByZXR1cm5zIGVycm5vCiAgKgkJLSBJbXByb3ZlZCBtdWx0aSB1c2VyIGFjY2VzcyAoc3RhcnQvbXV0ZS9zdG9wKQpAQCAtMTA0LDYgKzEwNSw3IEBACiAgKiAyMDA5LTAxLTMxCVJpY2sgQnJvbnNvbiA8cmlja0BlZm4ub3JnPgogICoJCVRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCQktIGFkZCBMRUQgc3RhdHVzIG91dHB1dAorICoJCS0gZ2V0IEhXL1NXIHZlcnNpb24gZnJvbSBzY3JhdGNocGFkCiAgKgogICogVG9EbzoKICAqIC0gYWRkIGZpcm13YXJlIGRvd25sb2FkL3VwZGF0ZSBzdXBwb3J0CkBAIC0xMTQsMTAgKzExNiwxMCBAQAogLyogZHJpdmVyIGRlZmluaXRpb25zICovCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4iCiAjZGVmaW5lIERSSVZFUl9OQU1FICJyYWRpby1zaTQ3MHgiCi0jZGVmaW5lIERSSVZFUl9LRVJORUxfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigxLCAwLCA4KQorI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgOSkKICNkZWZpbmUgRFJJVkVSX0NBUkQgIlNpbGljb24gTGFicyBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXIiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgcmFkaW8gZHJpdmVyIGZvciBTaTQ3MHggRk0gUmFkaW8gUmVjZWl2ZXJzIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wLjgiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIxLjAuOSIKIAogCiAvKiBrZXJuZWwgaW5jbHVkZXMgKi8KQEAgLTE0NSw3ICsxNDcsNyBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgwNmUxLCAweGExNTUsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogS1dvcmxkIFVTQiBGTSBSYWRpbyBTbmFwTXVzaWMgTW9iaWxlIDcwMCAoRk03MDApICovCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTygweDFiODAsIDB4ZDcwMCwgVVNCX0NMQVNTX0hJRCwgMCwgMCkgfSwKLQkvKiBEZWFsRXh0cmVtZSBVU0IgUmFkaW8gKi8KKwkvKiBTYW5laSBFbGVjdHJpYywgSW5jLiBGTSBVU0IgUmFkaW8gKHNvbGQgYXMgRGVhbEV4dHJlbWUuY29tIFBDZWFyKSAqLwogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMGM1LCAweDgxOWEsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCiAJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIAl7IH0KQEAgLTM0NSw3ICszNDcsNyBAQAogCiAvKiBSZXBvcnQgMTk6IHN0cmVhbSAqLwogI2RlZmluZSBTVFJFQU1fUkVQT1JUX1NJWkUJMwotI2RlZmluZQlTVFJFQU1fUkVQT1JUCQkxOQorI2RlZmluZSBTVFJFQU1fUkVQT1JUCQkxOQogCiAvKiBSZXBvcnQgMjA6IHNjcmF0Y2ggKi8KICNkZWZpbmUgU0NSQVRDSF9QQUdFX1NJWkUJNjMKQEAgLTM1Myw5ICszNTUsMTMgQEAKICNkZWZpbmUgU0NSQVRDSF9SRVBPUlQJCTIwCiAKIC8qIFJlcG9ydHMgMTktMjI6IGZsYXNoIHVwZ3JhZGUgb2YgdGhlIEM4MDUxRjMyMSAqLworI2RlZmluZSBXUklURV9SRVBPUlRfU0laRQk0CiAjZGVmaW5lIFdSSVRFX1JFUE9SVAkJMTkKKyNkZWZpbmUgRkxBU0hfUkVQT1JUX1NJWkUJNjQKICNkZWZpbmUgRkxBU0hfUkVQT1JUCQkyMAorI2RlZmluZSBDUkNfUkVQT1JUX1NJWkUJCTMKICNkZWZpbmUgQ1JDX1JFUE9SVAkJMjEKKyNkZWZpbmUgUkVTUE9OU0VfUkVQT1JUX1NJWkUJMgogI2RlZmluZSBSRVNQT05TRV9SRVBPUlQJCTIyCiAKIC8qIFJlcG9ydCAyMzogY3VycmVudGx5IHVudXNlZCwgYnV0IGNhbiBhY2NlcHQgNjAgYnl0ZSByZXBvcnRzIG9uIHRoZSBISUQgKi8KQEAgLTQxNCw3ICs0MjAsNyBAQAogCiAvKiBib290bG9hZGVyIGNvbW1hbmRzICovCiAjZGVmaW5lIEdFVF9TV19WRVJTSU9OX0NPTU1BTkQJMHgwMAotI2RlZmluZQlTRVRfUEFHRV9DT01NQU5ECTB4MDEKKyNkZWZpbmUgU0VUX1BBR0VfQ09NTUFORAkweDAxCiAjZGVmaW5lIEVSQVNFX1BBR0VfQ09NTUFORAkweDAyCiAjZGVmaW5lIFdSSVRFX1BBR0VfQ09NTUFORAkweDAzCiAjZGVmaW5lIENSQ19PTl9QQUdFX0NPTU1BTkQJMHgwNApAQCAtNDI4LDEyICs0MzQsNiBAQAogI2RlZmluZSBDT01NQU5EX0ZBSUxFRAkJMHgwMgogI2RlZmluZSBDT01NQU5EX1BFTkRJTkcJCTB4MDMKIAotLyogYnVmZmVyIHNpemVzICovCi0jZGVmaW5lIENPTU1BTkRfQlVGRkVSX1NJWkUJNAotI2RlZmluZSBSRVNQT05TRV9CVUZGRVJfU0laRQkyCi0jZGVmaW5lIEZMQVNIX0JVRkZFUl9TSVpFCTY0Ci0jZGVmaW5lIENSQ19CVUZGRVJfU0laRQkJMwotCiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NjUsNiArNDY1LDEwIEBACiAJdW5zaWduZWQgaW50IGJ1Zl9zaXplOwogCXVuc2lnbmVkIGludCByZF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgd3JfaW5kZXg7CisKKwkvKiBzY3JhdGNoIHBhZ2UgKi8KKwl1bnNpZ25lZCBjaGFyIHNvZnR3YXJlX3ZlcnNpb247CisJdW5zaWduZWQgY2hhciBoYXJkd2FyZV92ZXJzaW9uOwogfTsKIAogCkBAIC00ODAsNyArNDg0LDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucworICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gUkVHSVNURVJfUkVQT1JUcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgpAQCAtNTY2LDYwICs1NzAsNiBAQAogCiAKIC8qCi0gKiBzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMgLSByZWFkIGVudGlyZSByZWdpc3RlcnMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQotewotCXVuc2lnbmVkIGNoYXIgYnVmW0VOVElSRV9SRVBPUlRfU0laRV07Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyIHJlZ25yOwotCi0JYnVmWzBdID0gRU5USVJFX1JFUE9SVDsKLQotCXJldHZhbCA9IHNpNDcweF9nZXRfcmVwb3J0KHJhZGlvLCAodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSk7Ci0KLQlpZiAocmV0dmFsID49IDApCi0JCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJBRElPX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKLQkJCXJhZGlvLT5yZWdpc3RlcnNbcmVnbnJdID0gZ2V0X3VuYWxpZ25lZF9iZTE2KAotCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOwotCi0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwotfQotCi0KLS8qCi0gKiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnMgLSByZWFkIHJkcyByZWdpc3RlcnMKLSAqLwotc3RhdGljIGludCBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQotewotCXVuc2lnbmVkIGNoYXIgYnVmW1JEU19SRVBPUlRfU0laRV07Ci0JaW50IHJldHZhbDsKLQlpbnQgc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIHJlZ25yOwotCi0JYnVmWzBdID0gUkRTX1JFUE9SVDsKLQotCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKHJhZGlvLT51c2JkZXYsCi0JCXVzYl9yY3ZpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDEpLAotCQkodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSwgJnNpemUsIHVzYl90aW1lb3V0KTsKLQlpZiAoc2l6ZSAhPSBzaXplb2YoYnVmKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKLQkJCSJyZXR1cm4gc2l6ZSBkaWZmZXJzOiAlZCAhPSAlenVcbiIsIHNpemUsIHNpemVvZihidWYpKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3Jkc19yZWdpc3RlcnM6ICIKLQkJCSJ1c2JfaW50ZXJydXB0X21zZyByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKLQotCWlmIChyZXR2YWwgPj0gMCkKLQkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkRTX1JFR0lTVEVSX05VTTsgcmVnbnIrKykKLQkJCXJhZGlvLT5yZWdpc3RlcnNbU1RBVFVTUlNTSSArIHJlZ25yXSA9Ci0JCQkJZ2V0X3VuYWxpZ25lZF9iZTE2KAotCQkJCSZidWZbcmVnbnIgKiBSQURJT19SRUdJU1RFUl9TSVpFICsgMV0pOwotCi0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IC1FSU5WQUwgOiAwOwotfQotCi0KLS8qCiAgKiBzaTQ3MHhfc2V0X2NoYW4gLSBzZXQgdGhlIGNoYW5uZWwKICAqLwogc3RhdGljIGludCBzaTQ3MHhfc2V0X2NoYW4oc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvLCB1bnNpZ25lZCBzaG9ydCBjaGFuKQpAQCAtODg3LDYgKzgzNyw3MCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gRU5USVJFX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzIC0gcmVhZCBlbnRpcmUgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltFTlRJUkVfUkVQT1JUX1NJWkVdOworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciByZWducjsKKworCWJ1ZlswXSA9IEVOVElSRV9SRVBPUlQ7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA+PSAwKQorCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSQURJT19SRUdJU1RFUl9OVU07IHJlZ25yKyspCisJCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IGdldF91bmFsaWduZWRfYmUxNigKKwkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gUkRTX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzIC0gcmVhZCByZHMgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltSRFNfUkVQT1JUX1NJWkVdOworCWludCByZXR2YWw7CisJaW50IHNpemU7CisJdW5zaWduZWQgY2hhciByZWducjsKKworCWJ1ZlswXSA9IFJEU19SRVBPUlQ7CisKKwlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhyYWRpby0+dXNiZGV2LAorCQl1c2JfcmN2aW50cGlwZShyYWRpby0+dXNiZGV2LCAxKSwKKwkJKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZiksICZzaXplLCB1c2JfdGltZW91dCk7CisJaWYgKHNpemUgIT0gc2l6ZW9mKGJ1ZikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCisJCQkicmV0dXJuIHNpemUgZGlmZmVyczogJWQgIT0gJXp1XG4iLCBzaXplLCBzaXplb2YoYnVmKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCisJCQkidXNiX2ludGVycnVwdF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisKKwlpZiAocmV0dmFsID49IDApCisJCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJEU19SRUdJU1RFUl9OVU07IHJlZ25yKyspCisJCQlyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0kgKyByZWducl0gPQorCQkJCWdldF91bmFsaWduZWRfYmUxNigKKwkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gTEVEX1JFUE9SVAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC05MTEsNiArOTI1LDM1IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMgLSBTQ1JBVENIX1JFUE9SVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc2k0NzB4X2dldF9zY3JhdGNoX3ZlcnNpb25zIC0gZ2V0cyB0aGUgc2NyYXRjaCBwYWdlIGFuZCB2ZXJzaW9uIGluZm9zCisgKi8KK3N0YXRpYyBpbnQgc2k0NzB4X2dldF9zY3JhdGNoX3BhZ2VfdmVyc2lvbnMoc3RydWN0IHNpNDcweF9kZXZpY2UgKnJhZGlvKQoreworCXVuc2lnbmVkIGNoYXIgYnVmW1NDUkFUQ0hfUkVQT1JUX1NJWkVdOworCWludCByZXR2YWw7CisKKwlidWZbMF0gPSBTQ1JBVENIX1JFUE9SVDsKKworCXJldHZhbCA9IHNpNDcweF9nZXRfcmVwb3J0KHJhZGlvLCAodm9pZCAqKSAmYnVmLCBzaXplb2YoYnVmKSk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRSAiOiBzaTQ3MHhfZ2V0X3NjcmF0Y2g6ICIKKwkJCSJzaTQ3MHhfZ2V0X3JlcG9ydCByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKKwllbHNlIHsKKwkJcmFkaW8tPnNvZnR3YXJlX3ZlcnNpb24gPSBidWZbMV07CisJCXJhZGlvLT5oYXJkd2FyZV92ZXJzaW9uID0gYnVmWzJdOworCX0KKworCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUkRTIERyaXZlciBGdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTEyNCw2ICsxMTY3LDcgQEAKIAl9CiAKIAlpZiAocmFkaW8tPnVzZXJzID09IDEpIHsKKwkJLyogc3RhcnQgcmFkaW8gKi8KIAkJcmV0dmFsID0gc2k0NzB4X3N0YXJ0KHJhZGlvKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocmFkaW8tPmludGYpOwpAQCAtMTE2NSw2ICsxMjA5LDcgQEAKIAkJLyogY2FuY2VsIHJlYWQgcHJvY2Vzc2VzICovCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcmFkaW8tPnJlYWRfcXVldWUpOwogCisJCS8qIHN0b3AgcmFkaW8gKi8KIAkJcmV0dmFsID0gc2k0NzB4X3N0b3AocmFkaW8pOwogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocmFkaW8tPmludGYpOwogCX0KQEAgLTEyMjYsOSArMTI3MSwxMSBAQAogc3RhdGljIGludCBzaTQ3MHhfdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXBhYmlsaXR5KQogeworCXN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KGNhcGFiaWxpdHktPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihjYXBhYmlsaXR5LT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcGFiaWxpdHktPmNhcmQsIERSSVZFUl9DQVJELCBzaXplb2YoY2FwYWJpbGl0eS0+Y2FyZCkpOwotCXNwcmludGYoY2FwYWJpbGl0eS0+YnVzX2luZm8sICJVU0IiKTsKKwl1c2JfbWFrZV9wYXRoKHJhZGlvLT51c2JkZXYsIGNhcGFiaWxpdHktPmJ1c19pbmZvLCBzaXplb2YoY2FwYWJpbGl0eS0+YnVzX2luZm8pKTsKIAljYXBhYmlsaXR5LT52ZXJzaW9uID0gRFJJVkVSX0tFUk5FTF9WRVJTSU9OOwogCWNhcGFiaWxpdHktPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyB8CiAJCVY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CkBAIC0xNjM2LDcgKzE2ODMsNyBAQAogCQkJc2l6ZW9mKHNpNDcweF92aWRkZXZfdGVtcGxhdGUpKTsKIAl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKIAotCS8qIHNob3cgc29tZSBpbmZvcyBhYm91dCB0aGUgc3BlY2lmaWMgZGV2aWNlICovCisJLyogc2hvdyBzb21lIGluZm9zIGFib3V0IHRoZSBzcGVjaWZpYyBzaTQ3MHggZGV2aWNlICovCiAJaWYgKHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhyYWRpbykgPCAwKSB7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJyX2FsbDsKQEAgLTE2NDQsNyArMTY5MSwxNiBAQAogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogRGV2aWNlSUQ9MHglNC40aHggQ2hpcElEPTB4JTQuNGh4XG4iLAogCQkJcmFkaW8tPnJlZ2lzdGVyc1tERVZJQ0VJRF0sIHJhZGlvLT5yZWdpc3RlcnNbQ0hJUElEXSk7CiAKLQkvKiBjaGVjayBpZiBmaXJtd2FyZSBpcyBjdXJyZW50ICovCisJLyogZ2V0IHNvZnR3YXJlIGFuZCBoYXJkd2FyZSB2ZXJzaW9ucyAqLworCWlmIChzaTQ3MHhfZ2V0X3NjcmF0Y2hfcGFnZV92ZXJzaW9ucyhyYWRpbykgPCAwKSB7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX2FsbDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQorCQkJIjogc29mdHdhcmUgdmVyc2lvbiAlZCwgaGFyZHdhcmUgdmVyc2lvbiAlZFxuIiwKKwkJCXJhZGlvLT5zb2Z0d2FyZV92ZXJzaW9uLCByYWRpby0+aGFyZHdhcmVfdmVyc2lvbik7CisKKwkvKiBjaGVjayBpZiBkZXZpY2UgYW5kIGZpcm13YXJlIGlzIGN1cnJlbnQgKi8KIAlpZiAoKHJhZGlvLT5yZWdpc3RlcnNbQ0hJUElEXSAmIENISVBJRF9GSVJNV0FSRSkKIAkJCTwgUkFESU9fU1dfVkVSU0lPTl9DVVJSRU5UKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKQEAgLTE2NTcsNyArMTcxMyw3IEBACiAJCQkiOiBJZiB5b3UgaGF2ZSBzb21lIHRyb3VibGUgdXNpbmcgdGhpcyBkcml2ZXIsXG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQogCQkJIjogcGxlYXNlIHJlcG9ydCB0byBWNEwgTUwgYXQgIgotCQkJInZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CisJCQkibGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnXG4iKTsKIAl9CiAKIAkvKiBzZXQgaW5pdGlhbCBmcmVxdWVuY3kgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwppbmRleCAwNzk4ZDcxLi41YjAwN2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCkBAIC0yNywxNiArMjcsMjkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKK01PRFVMRV9BVVRIT1IoIlIuT0ZGRVJNQU5OUyAmIG90aGVycyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFRlcnJhVGVjIEFjdGl2ZVJhZGlvIFN0YW5kYWxvbmUgcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2lmbmRlZiBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVAorI2RlZmluZSBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVCAweDU5MAorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVDsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUZXJyYVRlYyBBY3RpdmVSYWRpbyBjYXJkICgweDU5MCBvciAweDU5MSkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKIAl7CkBAIC01NywxMyArNzAsNiBAQAogCX0KIH07CiAKLSNpZm5kZWYgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQKLSNkZWZpbmUgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQgMHg1OTAKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKiB0aGlzIG9uZXMgYXJlIGZvciB0aGUgdGVycmF0ZWMgKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgQkFTRVBPUlQgCTB4NTkwCi0jZGVmaW5lIFZPTFBPUlQgCTB4NTkxCiAjZGVmaW5lIFdSVF9ESVMgCTB4MDAKICNkZWZpbmUgQ0xLX09GRgkJMHgwMAogI2RlZmluZSBJSUNfREFUQQkweDAxCkBAIC03MSwxMzggKzc3LDEyNCBAQAogI2RlZmluZSBEQVRBCQkweDA0CiAjZGVmaW5lIENMS19PTiAJCTB4MDgKICNkZWZpbmUgV1JUX0VOCQkweDEwCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUOwotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIHNwaW5sb2NrX3QgbG9jazsKLQotc3RydWN0IHR0X2RldmljZQorc3RydWN0IHRlcnJhdGVjCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIHN0cnVjdCB0ZXJyYXRlYyB0ZXJyYXRlY19jYXJkOwogCiAvKiBsb2NhbCB0aGluZ3MgKi8KIAotc3RhdGljIHZvaWQgY2FyZFdyaXRlVm9sKGludCB2b2x1bWUpCitzdGF0aWMgdm9pZCB0dF93cml0ZV92b2woc3RydWN0IHRlcnJhdGVjICp0dCwgaW50IHZvbHVtZSkKIHsKIAlpbnQgaTsKLQl2b2x1bWUgPSB2b2x1bWUrKHZvbHVtZSAqIDMyKTsgLy8gY2hhbmdlIGJvdGggY2hhbm5lbHMKLQlzcGluX2xvY2soJmxvY2spOwotCWZvciAoaT0wO2k8ODtpKyspCi0JewotCQlpZiAodm9sdW1lICYgKDB4ODA+PmkpKQotCQkJb3V0YigweDgwLCBWT0xQT1JUKTsKLQkJZWxzZSBvdXRiKDB4MDAsIFZPTFBPUlQpOworCisJdm9sdW1lID0gdm9sdW1lICsgKHZvbHVtZSAqIDMyKTsgLyogY2hhbmdlIGJvdGggY2hhbm5lbHMgKi8KKwltdXRleF9sb2NrKCZ0dC0+bG9jayk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAodm9sdW1lICYgKDB4ODAgPj4gaSkpCisJCQlvdXRiKDB4ODAsIHR0LT5pbyArIDEpOworCQllbHNlCisJCQlvdXRiKDB4MDAsIHR0LT5pbyArIDEpOwogCX0KLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0dC0+bG9jayk7CiB9CiAKIAogCi1zdGF0aWMgdm9pZCB0dF9tdXRlKHN0cnVjdCB0dF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHR0X211dGUoc3RydWN0IHRlcnJhdGVjICp0dCkKIHsKLQlkZXYtPm11dGVkID0gMTsKLQljYXJkV3JpdGVWb2woMCk7CisJdHQtPm11dGVkID0gMTsKKwl0dF93cml0ZV92b2wodHQsIDApOwogfQogCi1zdGF0aWMgaW50IHR0X3NldHZvbChzdHJ1Y3QgdHRfZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgaW50IHR0X3NldHZvbChzdHJ1Y3QgdGVycmF0ZWMgKnR0LCBpbnQgdm9sKQogewotCi0vLwlwcmludGsoS0VSTl9FUlIgInNldHZvbCBjYWxsZWQsIHZvbCA9ICVkXG4iLCB2b2wpOwotCi0JaWYodm9sID09IGRldi0+Y3Vydm9sKSB7CS8qIHJlcXVlc3RlZCB2b2x1bWUgPSBjdXJyZW50ICovCi0JCWlmIChkZXYtPm11dGVkKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgICovCi0JCQlkZXYtPm11dGVkID0gMDsKLQkJCWNhcmRXcml0ZVZvbCh2b2wpOwkvKiBlbmFibGUgY2FyZCAqLworCWlmICh2b2wgPT0gdHQtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLworCQlpZiAodHQtPm11dGVkKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgICovCisJCQl0dC0+bXV0ZWQgPSAwOworCQkJdHRfd3JpdGVfdm9sKHR0LCB2b2wpOwkvKiBlbmFibGUgY2FyZCAqLwogCQl9Ci0KIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYodm9sID09IDApIHsJCQkvKiB2b2x1bWUgPSAwIG1lYW5zIG11dGUgdGhlIGNhcmQgKi8KLQkJY2FyZFdyaXRlVm9sKDApOwkvKiAidHVybiBvZmYgY2FyZCIgYnkgc2V0dGluZyB2b2wgdG8gMCAqLwotCQlkZXYtPmN1cnZvbCA9IHZvbDsJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KKwlpZiAodm9sID09IDApIHsJCQkvKiB2b2x1bWUgPSAwIG1lYW5zIG11dGUgdGhlIGNhcmQgKi8KKwkJdHRfd3JpdGVfdm9sKHR0LCAwKTsJLyogInR1cm4gb2ZmIGNhcmQiIGJ5IHNldHRpbmcgdm9sIHRvIDAgKi8KKwkJdHQtPmN1cnZvbCA9IHZvbDsJLyogdHJhY2sgdGhlIHZvbHVtZSBzdGF0ZSEJKi8KIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5tdXRlZCA9IDA7Ci0KLQljYXJkV3JpdGVWb2wodm9sKTsKLQotCWRldi0+Y3Vydm9sID0gdm9sOwotCisJdHQtPm11dGVkID0gMDsKKwl0dF93cml0ZV92b2wodHQsIHZvbCk7CisJdHQtPmN1cnZvbCA9IHZvbDsKIAlyZXR1cm4gMDsKLQogfQogCiAKIC8qIHRoaXMgaXMgdGhlIHdvcnN0IHBhcnQgaW4gdGhpcyBkcml2ZXIgKi8KIC8qIG1hbnkgbW9yZSBvciBsZXNzIHN0cmFuZ2UgdGhpbmdzIGFyZSBnb2luZyBvbiBoZXJlLCBidXQgaGV5LCBpdCB3b3JrcyA6KSAqLwogCi1zdGF0aWMgaW50IHR0X3NldGZyZXEoc3RydWN0IHR0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXExKQorc3RhdGljIGludCB0dF9zZXRmcmVxKHN0cnVjdCB0ZXJyYXRlYyAqdHQsIHVuc2lnbmVkIGxvbmcgZnJlcTEpCiB7CiAJaW50IGZyZXE7CiAJaW50IGk7CiAJaW50IHA7CiAJaW50ICB0ZW1wOwogCWxvbmcgcmVzdDsKLQogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzI1XTsJCS8qIHdlIGhhdmUgdG8gYml0IHNoaWZ0IDI1IHJlZ2lzdGVycyAqLwotCWZyZXEgPSBmcmVxMS8xNjA7CQkJLyogY29udmVydCB0aGUgZnJlcS4gdG8gYSBuaWNlIHRvIGhhbmRsZSB2YWx1ZSAqLwotCWZvcihpPTI0O2k+LTE7aS0tKQotCQlidWZmZXJbaV09MDsKIAotCXJlc3QgPSBmcmVxKjEwKzEwNzAwOwkJLyogaSBvbmNlIGhhZCB1bmRlcnN0b29kIHdoYXQgaXMgZ29pbmcgb24gaGVyZSAqLworCW11dGV4X2xvY2soJnR0LT5sb2NrKTsKKworCXR0LT5jdXJmcmVxID0gZnJlcTE7CisKKwlmcmVxID0gZnJlcTEgLyAxNjA7CQkJLyogY29udmVydCB0aGUgZnJlcS4gdG8gYSBuaWNlIHRvIGhhbmRsZSB2YWx1ZSAqLworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKworCXJlc3QgPSBmcmVxICogMTAgKyAxMDcwMDsJLyogSSBvbmNlIGhhZCB1bmRlcnN0b29kIHdoYXQgaXMgZ29pbmcgb24gaGVyZSAqLwogCQkJCQkvKiBtYXliZSBzb21lIHdpc2UgZ3V5IChmcmllZGhlbG0/KSBjYW4gY29tbWVudCB0aGlzIHN0dWZmICovCi0JaT0xMzsKLQlwPTEwOwotCXRlbXA9MTAyNDAwOwotCXdoaWxlIChyZXN0IT0wKQotCXsKLQkJaWYgKHJlc3QldGVtcCAgPT0gcmVzdCkKKwlpID0gMTM7CisJcCA9IDEwOworCXRlbXAgPSAxMDI0MDA7CisJd2hpbGUgKHJlc3QgIT0gMCkgeworCQlpZiAocmVzdCAlIHRlbXAgID09IHJlc3QpCiAJCQlidWZmZXJbaV0gPSAwOwotCQllbHNlCi0JCXsKKwkJZWxzZSB7CiAJCQlidWZmZXJbaV0gPSAxOwotCQkJcmVzdCA9IHJlc3QtdGVtcDsKKwkJCXJlc3QgPSByZXN0IC0gdGVtcDsKIAkJfQogCQlpLS07CiAJCXAtLTsKLQkJdGVtcCA9IHRlbXAvMjsKKwkJdGVtcCA9IHRlbXAgLyAyOwogCX0KIAotCXNwaW5fbG9jaygmbG9jayk7Ci0KLQlmb3IgKGk9MjQ7aT4tMTtpLS0pCQkJLyogYml0IHNoaWZ0IHRoZSB2YWx1ZXMgdG8gdGhlIHJhZGlvY2FyZCAqLwotCXsKLQkJaWYgKGJ1ZmZlcltpXT09MSkKLQkJewotCQkJb3V0YihXUlRfRU58REFUQSwgQkFTRVBPUlQpOwotCQkJb3V0YihXUlRfRU58REFUQXxDTEtfT04gICwgQkFTRVBPUlQpOwotCQkJb3V0YihXUlRfRU58REFUQSwgQkFTRVBPUlQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJb3V0YihXUlRfRU58MHgwMCwgQkFTRVBPUlQpOwotCQkJb3V0YihXUlRfRU58MHgwMHxDTEtfT04gICwgQkFTRVBPUlQpOworCWZvciAoaSA9IDI0OyBpID4gLTE7IGktLSkgewkvKiBiaXQgc2hpZnQgdGhlIHZhbHVlcyB0byB0aGUgcmFkaW9jYXJkICovCisJCWlmIChidWZmZXJbaV0gPT0gMSkgeworCQkJb3V0YihXUlRfRU4gfCBEQVRBLCB0dC0+aW8pOworCQkJb3V0YihXUlRfRU4gfCBEQVRBIHwgQ0xLX09OLCB0dC0+aW8pOworCQkJb3V0YihXUlRfRU4gfCBEQVRBLCB0dC0+aW8pOworCQl9IGVsc2UgeworCQkJb3V0YihXUlRfRU4gfCAweDAwLCB0dC0+aW8pOworCQkJb3V0YihXUlRfRU4gfCAweDAwIHwgQ0xLX09OLCB0dC0+aW8pOwogCQl9CiAJfQotCW91dGIoMHgwMCwgQkFTRVBPUlQpOworCW91dGIoMHgwMCwgdHQtPmlvKTsKIAotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJnR0LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR0X2dldHNpZ3N0cihzdHJ1Y3QgdHRfZGV2aWNlICpkZXYpCQkvKiBUT0RPICovCitzdGF0aWMgaW50IHR0X2dldHNpZ3N0cihzdHJ1Y3QgdGVycmF0ZWMgKnR0KQogewotCWlmIChpbmIoaW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCisJaWYgKGluYih0dC0+aW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCiAJCXJldHVybiAwOwogCXJldHVybiAxOwkJLyogc2lnbmFsIHByZXNlbnQJCSovCiB9CkBAIC0yMTIsNTMgKzIwNCw1MCBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tdGVycmF0ZWMiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiQWN0aXZlUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg3KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKKwl2LT5yYW5nZWxvdyA9IDg3ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CiAJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhGRkZGKnR0X2dldHNpZ3N0cih0dCk7CisJdi0+c2lnbmFsID0gMHhGRkZGICogdHRfZ2V0c2lnc3RyKHR0KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JdHQtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JdHRfc2V0ZnJlcSh0dCwgdHQtPmN1cmZyZXEpOworCXR0X3NldGZyZXEodHQsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gdHQtPmN1cmZyZXE7CkBAIC0yNzIsOCArMjYxLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CiAJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwgc2l6ZW9mKCpxYykpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yODMsNyArMjcxLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHRfZGV2aWNlICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzAyLDcgKzI5MCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMxOCwxNyArMzA2LDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMzNywzNiArMzE0LDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHRlcnJhdGVjX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHRfZGV2aWNlIHRlcnJhdGVjX3VuaXQ7Ci0KLXN0YXRpYyBpbnQgdGVycmF0ZWNfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHRlcnJhdGVjX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnRlcnJhdGVjX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGVycmF0ZWNfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZ0ZXJyYXRlY191bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGVycmF0ZWNfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdGVycmF0ZWNfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdGVycmF0ZWNfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gdGVycmF0ZWNfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB0ZXJyYXRlY19yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zODUsNjAgKzM2NCw2MyBAQAogCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlcnJhdGVjX3JhZGlvID0gewotCS5uYW1lCQk9ICJUZXJyYVRlYyBBY3RpdmVSYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJnRlcnJhdGVjX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmdGVycmF0ZWNfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCB0ZXJyYXRlY19pbml0KHZvaWQpCiB7Ci0JaWYoaW89PS0xKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9ICZ0ZXJyYXRlY19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmdHQtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAidGVycmF0ZWMiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwl0dC0+aW8gPSBpbzsKKwlpZiAodHQtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAieW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg1OTAgb3IgMHg1OTFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInRlcnJhdGVjIikpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIlRlcnJhVGVjOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHR0LT5pbywgMiwgInRlcnJhdGVjIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmdGVycmF0ZWNfcmFkaW8sICZ0ZXJyYXRlY191bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24odHQtPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCXNwaW5fbG9ja19pbml0KCZsb2NrKTsKKwlzdHJsY3B5KHR0LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodHQtPnZkZXYubmFtZSkpOworCXR0LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJdHQtPnZkZXYuZm9wcyA9ICZ0ZXJyYXRlY19mb3BzOworCXR0LT52ZGV2LmlvY3RsX29wcyA9ICZ0ZXJyYXRlY19pb2N0bF9vcHM7CisJdHQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZ0dC0+dmRldiwgdHQpOwogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdGVycmF0ZWNfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCW11dGV4X2luaXQoJnR0LT5sb2NrKTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnR0LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0dC0+djRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbih0dC0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJURVJSQVRFQyBBY3RpdlJhZGlvIFN0YW5kYWxvbmUgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJURVJSQVRFQyBBY3RpdlJhZGlvIFN0YW5kYWxvbmUgY2FyZCBkcml2ZXIuXG4iKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQotCS8qIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYWxsIHRoZSB3YXkgZG93biAgKi8KLQljYXJkV3JpdGVWb2woMCk7Ci0JdGVycmF0ZWNfdW5pdC5jdXJ2b2wgPSAwOwotCisJdHRfd3JpdGVfdm9sKHR0LCAwKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiUi5PRkZFUk1BTk5TICYgb3RoZXJzIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gU3RhbmRhbG9uZSByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUZXJyYVRlYyBBY3RpdmVSYWRpbyBjYXJkICgweDU5MCBvciAweDU5MSkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IHRlcnJhdGVjX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdGVycmF0ZWNfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0ZXJyYXRlY19yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyIHVubG9hZGVkLlxuIik7CisJc3RydWN0IHRlcnJhdGVjICp0dCA9ICZ0ZXJyYXRlY19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmdHQtPnY0bDJfZGV2OworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnR0LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0dC0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHR0LT5pbywgMik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyIHVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KHRlcnJhdGVjX2luaXQpOwotbW9kdWxlX2V4aXQodGVycmF0ZWNfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQodGVycmF0ZWNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwppbmRleCBiZGY5Y2I2Li5kMWJlNjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCkBAIC0xOSw0OSArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSAyMDQ4LAotCQkuZGVmYXVsdF92YWx1ZSA9IDY1NTM1LAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fQkFTUywKLQkJLm5hbWUgICAgICAgICAgPSAiQmFzcyIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA0MzcwLAotCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVFJFQkxFLAotCQkubmFtZSAgICAgICAgICA9ICJUcmVibGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNDM3MCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAzMjc2OCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sCi19OworTU9EVUxFX0FVVEhPUigiRXJpYyBMYW1tZXJ0cywgUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUcnVzdCBGTSBSYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBhY2NlcHRhYmxlIHBvcnRzOiAweDM1MCAoSlAzIHNob3J0ZWQpLCAweDM1OCAoSlAzIG9wZW4pICovCiAKQEAgLTcxLDI2ICszNyw0MSBAQAogCiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1RSVVNUX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgaW50IGlvdmFsID0gMHhmOwotc3RhdGljIF9fdTE2IGN1cnZvbDsKLXN0YXRpYyBfX3UxNiBjdXJiYXNzOwotc3RhdGljIF9fdTE2IGN1cnRyZWJsZTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cmZyZXE7Ci1zdGF0aWMgaW50IGN1cnN0ZXJlbzsKLXN0YXRpYyBpbnQgY3VybXV0ZTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUcnVzdCBGTSBSYWRpbyBjYXJkICgweDM1MCBvciAweDM1OCkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCB0cnVzdCB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CisJaW50IGlvdmFsOworCV9fdTE2IGN1cnZvbDsKKwlfX3UxNiBjdXJiYXNzOworCV9fdTE2IGN1cnRyZWJsZTsKKwlpbnQgbXV0ZWQ7CisJdW5zaWduZWQgbG9uZyBjdXJmcmVxOworCWludCBjdXJzdGVyZW87CisJaW50IGN1cm11dGU7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHRydXN0IHRydXN0X2NhcmQ7CiAKIC8qIGkyYyBhZGRyZXNzZXMgKi8KICNkZWZpbmUgVERBNzMxOF9BRERSIDB4ODgKICNkZWZpbmUgVFNBNjA2MFRfQUREUiAweGM0CiAKLSNkZWZpbmUgVFJfREVMQVkgZG8geyBpbmIoaW8pOyBpbmIoaW8pOyBpbmIoaW8pOyB9IHdoaWxlKDApCi0jZGVmaW5lIFRSX1NFVF9TQ0wgb3V0Yihpb3ZhbCB8PSAyLCBpbykKLSNkZWZpbmUgVFJfQ0xSX1NDTCBvdXRiKGlvdmFsICY9IDB4ZmQsIGlvKQotI2RlZmluZSBUUl9TRVRfU0RBIG91dGIoaW92YWwgfD0gMSwgaW8pCi0jZGVmaW5lIFRSX0NMUl9TREEgb3V0Yihpb3ZhbCAmPSAweGZlLCBpbykKKyNkZWZpbmUgVFJfREVMQVkgZG8geyBpbmIodHItPmlvKTsgaW5iKHRyLT5pbyk7IGluYih0ci0+aW8pOyB9IHdoaWxlICgwKQorI2RlZmluZSBUUl9TRVRfU0NMIG91dGIodHItPmlvdmFsIHw9IDIsIHRyLT5pbykKKyNkZWZpbmUgVFJfQ0xSX1NDTCBvdXRiKHRyLT5pb3ZhbCAmPSAweGZkLCB0ci0+aW8pCisjZGVmaW5lIFRSX1NFVF9TREEgb3V0Yih0ci0+aW92YWwgfD0gMSwgdHItPmlvKQorI2RlZmluZSBUUl9DTFJfU0RBIG91dGIodHItPmlvdmFsICY9IDB4ZmUsIHRyLT5pbykKIAotc3RhdGljIHZvaWQgd3JpdGVfaTJjKGludCBuLCAuLi4pCitzdGF0aWMgdm9pZCB3cml0ZV9pMmMoc3RydWN0IHRydXN0ICp0ciwgaW50IG4sIC4uLikKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbCwgbWFzazsKIAl2YV9saXN0IGFyZ3M7CkBAIC0xMzYsNjIgKzExNyw3NyBAQAogCXZhX2VuZChhcmdzKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0dm9sKF9fdTE2IHZvbCkKK3N0YXRpYyB2b2lkIHRyX3NldHZvbChzdHJ1Y3QgdHJ1c3QgKnRyLCBfX3UxNiB2b2wpCiB7Ci0JY3Vydm9sID0gdm9sIC8gMjA0ODsKLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCBjdXJ2b2wgXiAweDFmKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cnZvbCA9IHZvbCAvIDIwNDg7CisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIHRyLT5jdXJ2b2wgXiAweDFmKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCBiYXNzdHJlYmxlMmNoaXBbMTVdID0gewogCTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDE0LCAxMywgMTIsIDExLCAxMCwgOSwgOAogfTsKIAotc3RhdGljIHZvaWQgdHJfc2V0YmFzcyhfX3UxNiBiYXNzKQorc3RhdGljIHZvaWQgdHJfc2V0YmFzcyhzdHJ1Y3QgdHJ1c3QgKnRyLCBfX3UxNiBiYXNzKQogewotCWN1cmJhc3MgPSBiYXNzIC8gNDM3MDsKLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDYwIHwgYmFzc3RyZWJsZTJjaGlwW2N1cmJhc3NdKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cmJhc3MgPSBiYXNzIC8gNDM3MDsKKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHg2MCB8IGJhc3N0cmVibGUyY2hpcFt0ci0+Y3VyYmFzc10pOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB0cl9zZXR0cmVibGUoX191MTYgdHJlYmxlKQorc3RhdGljIHZvaWQgdHJfc2V0dHJlYmxlKHN0cnVjdCB0cnVzdCAqdHIsIF9fdTE2IHRyZWJsZSkKIHsKLQljdXJ0cmVibGUgPSB0cmVibGUgLyA0MzcwOwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4NzAgfCBiYXNzdHJlYmxlMmNoaXBbY3VydHJlYmxlXSk7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJ0cmVibGUgPSB0cmVibGUgLyA0MzcwOworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDcwIHwgYmFzc3RyZWJsZTJjaGlwW3RyLT5jdXJ0cmVibGVdKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0c3RlcmVvKGludCBzdGVyZW8pCitzdGF0aWMgdm9pZCB0cl9zZXRzdGVyZW8oc3RydWN0IHRydXN0ICp0ciwgaW50IHN0ZXJlbykKIHsKLQljdXJzdGVyZW8gPSAhIXN0ZXJlbzsKLQlpb3ZhbCA9IChpb3ZhbCAmIDB4ZmIpIHwgKCFjdXJzdGVyZW8gPDwgMik7Ci0Jb3V0Yihpb3ZhbCwgaW8pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3Vyc3RlcmVvID0gISFzdGVyZW87CisJdHItPmlvdmFsID0gKHRyLT5pb3ZhbCAmIDB4ZmIpIHwgKCF0ci0+Y3Vyc3RlcmVvIDw8IDIpOworCW91dGIodHItPmlvdmFsLCB0ci0+aW8pOworCW11dGV4X3VubG9jaygmdHItPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB0cl9zZXRtdXRlKGludCBtdXRlKQorc3RhdGljIHZvaWQgdHJfc2V0bXV0ZShzdHJ1Y3QgdHJ1c3QgKnRyLCBpbnQgbXV0ZSkKIHsKLQljdXJtdXRlID0gISFtdXRlOwotCWlvdmFsID0gKGlvdmFsICYgMHhmNykgfCAoY3VybXV0ZSA8PCAzKTsKLQlvdXRiKGlvdmFsLCBpbyk7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJtdXRlID0gISFtdXRlOworCXRyLT5pb3ZhbCA9ICh0ci0+aW92YWwgJiAweGY3KSB8ICh0ci0+Y3VybXV0ZSA8PCAzKTsKKwlvdXRiKHRyLT5pb3ZhbCwgdHItPmlvKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIGludCB0cl9nZXRzaWdzdHIodm9pZCkKK3N0YXRpYyBpbnQgdHJfZ2V0c2lnc3RyKHN0cnVjdCB0cnVzdCAqdHIpCiB7CiAJaW50IGksIHY7CiAKLQlmb3IoaSA9IDAsIHYgPSAwOyBpIDwgMTAwOyBpKyspIHYgfD0gaW5iKGlvKTsKLQlyZXR1cm4gKHYgJiAxKT8gMCA6IDB4ZmZmZjsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJZm9yIChpID0gMCwgdiA9IDA7IGkgPCAxMDA7IGkrKykKKwkJdiB8PSBpbmIodHItPmlvKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKKwlyZXR1cm4gKHYgJiAxKSA/IDAgOiAweGZmZmY7CiB9CiAKLXN0YXRpYyBpbnQgdHJfZ2V0c3RlcmVvKHZvaWQpCitzdGF0aWMgaW50IHRyX2dldHN0ZXJlbyhzdHJ1Y3QgdHJ1c3QgKnRyKQogewogCS8qIGRvbid0IGtub3cgaG93IHRvIGRldGVybWluZSBpdCwganVzdCByZXR1cm4gdGhlIHNldHRpbmcgKi8KLQlyZXR1cm4gY3Vyc3RlcmVvOworCXJldHVybiB0ci0+Y3Vyc3RlcmVvOwogfQogCi1zdGF0aWMgdm9pZCB0cl9zZXRmcmVxKHVuc2lnbmVkIGxvbmcgZikKK3N0YXRpYyB2b2lkIHRyX3NldGZyZXEoc3RydWN0IHRydXN0ICp0ciwgdW5zaWduZWQgbG9uZyBmKQogeworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VyZnJlcSA9IGY7CiAJZiAvPSAxNjA7CS8qIENvbnZlcnQgdG8gMTAga0h6IHVuaXRzCSovCi0JZiArPSAxMDcwOwkvKiBBZGQgMTAuNyBNSHogSUYJCQkqLwotCi0Jd3JpdGVfaTJjKDUsIFRTQTYwNjBUX0FERFIsIChmIDw8IDEpIHwgMSwgZiA+PiA3LCAweDYwIHwgKChmID4+IDE1KSAmIDEpLCAwKTsKKwlmICs9IDEwNzA7CS8qIEFkZCAxMC43IE1IeiBJRgkJKi8KKwl3cml0ZV9pMmModHIsIDUsIFRTQTYwNjBUX0FERFIsIChmIDw8IDEpIHwgMSwgZiA+PiA3LCAweDYwIHwgKChmID4+IDE1KSAmIDEpLCAwKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0xOTksNjggKzE5NSw3NSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tdHJ1c3QiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiVHJ1c3QgRk0gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4Ny41KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+cmFuZ2Vsb3cgPSA4Ny41ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQlpZiAodHJfZ2V0c3RlcmVvKCkpCisJaWYgKHRyX2dldHN0ZXJlbyh0cikpCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IHRyX2dldHNpZ3N0cigpOworCXYtPnNpZ25hbCA9IHRyX2dldHNpZ3N0cih0cik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKKwlpZiAodi0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCXRyX3NldHN0ZXJlbyh0ciwgdi0+YXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfU1RFUkVPKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCWN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JdHJfc2V0ZnJlcShjdXJmcmVxKTsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXRyX3NldGZyZXEodHIsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IGN1cmZyZXE7CisJZi0+ZnJlcXVlbmN5ID0gdHItPmN1cmZyZXE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCAyMDQ4LCA2NTUzNSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA0MzcwLCAzMjc2OCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjY4LDE4ICsyNzEsMjAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSBjdXJtdXRlOworCQljdHJsLT52YWx1ZSA9IHRyLT5jdXJtdXRlOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBjdXJ2b2wgKiAyMDQ4OworCQljdHJsLT52YWx1ZSA9IHRyLT5jdXJ2b2wgKiAyMDQ4OwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCWN0cmwtPnZhbHVlID0gY3VyYmFzcyAqIDQzNzA7CisJCWN0cmwtPnZhbHVlID0gdHItPmN1cmJhc3MgKiA0MzcwOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJY3RybC0+dmFsdWUgPSBjdXJ0cmVibGUgKiA0MzcwOworCQljdHJsLT52YWx1ZSA9IHRyLT5jdXJ0cmVibGUgKiA0MzcwOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0yODgsMzQgKzI5MywyNSBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQl0cl9zZXRtdXRlKGN0cmwtPnZhbHVlKTsKKwkJdHJfc2V0bXV0ZSh0ciwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJdHJfc2V0dm9sKGN0cmwtPnZhbHVlKTsKKwkJdHJfc2V0dm9sKHRyLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJdHJfc2V0YmFzcyhjdHJsLT52YWx1ZSk7CisJCXRyX3NldGJhc3ModHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXRyX3NldHRyZWJsZShjdHJsLT52YWx1ZSk7CisJCXRyX3NldHRyZWJsZSh0ciwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMyNCwzNCArMzIwLDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0cnVzdF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRydXN0X2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0cnVzdF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCB0cnVzdF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdHJ1c3RfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gdHJ1c3RfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdHJ1c3RfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gdHJ1c3Rfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSB0cnVzdF9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zNzAsNTkgKzM3MCw3MiBAQAogCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRydXN0X3JhZGlvID0gewotCS5uYW1lCQk9ICJUcnVzdCBGTSBSYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJnRydXN0X2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmdHJ1c3RfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCB0cnVzdF9pbml0KHZvaWQpCiB7Ci0JaWYoaW8gPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJc3RydWN0IHRydXN0ICp0ciA9ICZ0cnVzdF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmdHItPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAidHJ1c3QiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwl0ci0+aW8gPSBpbzsKKwl0ci0+aW92YWwgPSAweGY7CisJbXV0ZXhfaW5pdCgmdHItPmxvY2spOworCisJaWYgKHRyLT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MHgzNTAgb3IgMHgzNThcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAiVHJ1c3QgRk0gUmFkaW8iKSkgewotCQlwcmludGsoS0VSTl9FUlIgInRydXN0OiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHRyLT5pbywgMiwgIlRydXN0IEZNIFJhZGlvIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIHRyLT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnRydXN0X3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24odHItPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKworCXN0cmxjcHkodHItPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZih0ci0+dmRldi5uYW1lKSk7CisJdHItPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwl0ci0+dmRldi5mb3BzID0gJnRydXN0X2ZvcHM7CisJdHItPnZkZXYuaW9jdGxfb3BzID0gJnRydXN0X2lvY3RsX29wczsKKwl0ci0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJnRyLT52ZGV2LCB0cik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ci0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKHRyLT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlRydXN0IEZNIFJhZGlvIGNhcmQgZHJpdmVyIHYxLjAuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJUcnVzdCBGTSBSYWRpbyBjYXJkIGRyaXZlciB2MS4wLlxuIik7CiAKLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDgwKTsJLyogc3BlYWtlciBhdHQuIExGID0gMCBkQiAqLwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4YTApOwkvKiBzcGVha2VyIGF0dC4gUkYgPSAwIGRCICovCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHhjMCk7CS8qIHNwZWFrZXIgYXR0LiBMUiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweGUwKTsJLyogc3BlYWtlciBhdHQuIFJSID0gMCBkQiAqLwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4NDApOwkvKiBzdGVyZW8gMSBpbnB1dCwgZ2FpbiA9IDE4Ljc1IGRCICovCisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4ODApOwkvKiBzcGVha2VyIGF0dC4gTEYgPSAwIGRCICovCisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4YTApOwkvKiBzcGVha2VyIGF0dC4gUkYgPSAwIGRCICovCisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4YzApOwkvKiBzcGVha2VyIGF0dC4gTFIgPSAwIGRCICovCisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4ZTApOwkvKiBzcGVha2VyIGF0dC4gUlIgPSAwIGRCICovCisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4NDApOwkvKiBzdGVyZW8gMSBpbnB1dCwgZ2FpbiA9IDE4Ljc1IGRCICovCiAKLQl0cl9zZXR2b2woMHg4MDAwKTsKLQl0cl9zZXRiYXNzKDB4ODAwMCk7Ci0JdHJfc2V0dHJlYmxlKDB4ODAwMCk7Ci0JdHJfc2V0c3RlcmVvKDEpOworCXRyX3NldHZvbCh0ciwgMHhmZmZmKTsKKwl0cl9zZXRiYXNzKHRyLCAweDgwMDApOworCXRyX3NldHRyZWJsZSh0ciwgMHg4MDAwKTsKKwl0cl9zZXRzdGVyZW8odHIsIDEpOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCXRyX3NldG11dGUoMSk7CisJdHJfc2V0bXV0ZSh0ciwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiRXJpYyBMYW1tZXJ0cywgUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUcnVzdCBGTSBSYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFRydXN0IEZNIFJhZGlvIGNhcmQgKDB4MzUwIG9yIDB4MzU4KSIpOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF90cnVzdF9tb2R1bGUodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHJ1c3RfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gJnRydXN0X2NhcmQ7CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdHItPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnRyLT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24odHItPmlvLCAyKTsKIH0KIAogbW9kdWxlX2luaXQodHJ1c3RfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCmluZGV4IDVjM2IzMTkuLjkyZDkyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCkBAIC0zNCwzNyArMzQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEgICAgICAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkgICovCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgkvKiByYWRpbyBjYXJkIHN0YXR1cyByZXBvcnQJICAqLwotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlciAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cyAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwxLDEpCi0jZGVmaW5lIEJBTk5FUiAiVHlwaG9vbiBSYWRpbyBDYXJkIGRyaXZlciB2MC4xLjFcbiIKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDE8PDE0LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OwotCitNT0RVTEVfQVVUSE9SKCJEci4gSGVucmlrIFNlaWRlbCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFR5cGhvb24gcmFkaW8gY2FyZCAoYS5rLmEuIEVjb1JhZGlvKS4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19UWVBIT09OX1BPUlQgLTEKQEAgLTc0LDEzICs1MiwyNiBAQAogI2RlZmluZSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUSAwCiAjZW5kaWYKIAotI2lmbmRlZiBDT05GSUdfUFJPQ19GUwotI3VuZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMKLSNlbmRpZgorc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19UWVBIT09OX1BPUlQ7CitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiAKLXN0cnVjdCB0eXBob29uX2RldmljZSB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IGlvYmFzZTsKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHlwaG9vbiBjYXJkICgweDMxNiBvciAweDMzNikiKTsKKworbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtdXRlZnJlcSA9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVROworbW9kdWxlX3BhcmFtKG11dGVmcmVxLCB1bG9uZywgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG11dGVmcmVxLCAiRnJlcXVlbmN5IHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQgKGluIGtIeikiKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDEsIDEpCisKKyNkZWZpbmUgQkFOTkVSICJUeXBob29uIFJhZGlvIENhcmQgZHJpdmVyIHYwLjEuMVxuIgorCitzdHJ1Y3QgdHlwaG9vbiB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsKIAlpbnQgbXV0ZWQ7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwpAQCAtODgsMjUgKzc5LDE5IEBACiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCi1zdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKTsKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxX2dlbmVyaWMoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpOwotc3RhdGljIGludCB0eXBob29uX3NldGZyZXEoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KTsKLXN0YXRpYyB2b2lkIHR5cGhvb25fbXV0ZShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCB0eXBob29uX3VubXV0ZShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHR5cGhvb25fc2V0dm9sKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKTsKK3N0YXRpYyBzdHJ1Y3QgdHlwaG9vbiB0eXBob29uX2NhcmQ7CiAKLXN0YXRpYyB2b2lkIHR5cGhvb25fc2V0dm9sX2dlbmVyaWMoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uICpkZXYsIGludCB2b2wpCiB7CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAl2b2wgPj49IDE0OwkJCQkvKiBNYXAgMTYgYml0IHRvIDIgYml0ICovCiAJdm9sICY9IDM7Ci0Jb3V0Yl9wKHZvbCAvIDIsIGRldi0+aW9iYXNlKTsJCS8qIFNldCB0aGUgdm9sdW1lLCBoaWdoIGJpdC4gKi8KLQlvdXRiX3Aodm9sICUgMiwgZGV2LT5pb2Jhc2UgKyAyKTsJLyogU2V0IHRoZSB2b2x1bWUsIGxvdyBiaXQuICovCisJb3V0Yl9wKHZvbCAvIDIsIGRldi0+aW8pOwkJLyogU2V0IHRoZSB2b2x1bWUsIGhpZ2ggYml0LiAqLworCW91dGJfcCh2b2wgJSAyLCBkZXYtPmlvICsgMik7CS8qIFNldCB0aGUgdm9sdW1lLCBsb3cgYml0LiAqLwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIAotc3RhdGljIGludCB0eXBob29uX3NldGZyZXFfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxX2dlbmVyaWMoc3RydWN0IHR5cGhvb24gKmRldiwKIAkJCQkgICB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKIAl1bnNpZ25lZCBsb25nIG91dHZhbDsKQEAgLTEzMCwyMiArMTE1LDIyIEBACiAJb3V0dmFsIC09ICgxMCAqIHggKiB4ICsgMTA0MzMpIC8gMjA4NjY7CiAJb3V0dmFsICs9IDQgKiB4IC0gMTE1MDU7CiAKLQlvdXRiX3AoKG91dHZhbCA+PiA4KSAmIDB4MDEsIGRldi0+aW9iYXNlICsgNCk7Ci0Jb3V0Yl9wKG91dHZhbCA+PiA5LCBkZXYtPmlvYmFzZSArIDYpOwotCW91dGJfcChvdXR2YWwgJiAweGZmLCBkZXYtPmlvYmFzZSArIDgpOworCW91dGJfcCgob3V0dmFsID4+IDgpICYgMHgwMSwgZGV2LT5pbyArIDQpOworCW91dGJfcChvdXR2YWwgPj4gOSwgZGV2LT5pbyArIDYpOworCW91dGJfcChvdXR2YWwgJiAweGZmLCBkZXYtPmlvICsgOCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKK3N0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxKHN0cnVjdCB0eXBob29uICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KQogewogCXR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKGRldiwgZnJlcXVlbmN5KTsKIAlkZXYtPmN1cmZyZXEgPSBmcmVxdWVuY3k7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHR5cGhvb25fbXV0ZShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHR5cGhvb25fbXV0ZShzdHJ1Y3QgdHlwaG9vbiAqZGV2KQogewogCWlmIChkZXYtPm11dGVkID09IDEpCiAJCXJldHVybjsKQEAgLTE1NCw3ICsxMzksNyBAQAogCWRldi0+bXV0ZWQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCB0eXBob29uX3VubXV0ZShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHR5cGhvb25fdW5tdXRlKHN0cnVjdCB0eXBob29uICpkZXYpCiB7CiAJaWYgKGRldi0+bXV0ZWQgPT0gMCkKIAkJcmV0dXJuOwpAQCAtMTYzLDcgKzE0OCw3IEBACiAJZGV2LT5tdXRlZCA9IDA7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXR2b2woc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgaW50IHR5cGhvb25fc2V0dm9sKHN0cnVjdCB0eXBob29uICpkZXYsIGludCB2b2wpCiB7CiAJaWYgKGRldi0+bXV0ZWQgJiYgdm9sICE9IDApIHsJLyogdXNlciBpcyB1bm11dGluZyB0aGUgY2FyZCAqLwogCQlkZXYtPmN1cnZvbCA9IHZvbDsKQEAgLTE4OCw5ICsxNzMsOSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tdHlwaG9vbiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJUeXBob29uIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMCwxMCArMTg1LDEwIEBACiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg3LjUqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOworCXYtPnJhbmdlbG93ID0gODcuNSAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwpAQCAtMjE0LDQ0ICsxOTksMzcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQogCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gZGV2LT5jdXJmcmVxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHR5cGhvb24gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQl0eXBob29uLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXR5cGhvb25fc2V0ZnJlcSh0eXBob29uLCB0eXBob29uLT5jdXJmcmVxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKLXsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JZi0+ZnJlcXVlbmN5ID0gdHlwaG9vbi0+Y3VyZnJlcTsKLQorCWRldi0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKKwl0eXBob29uX3NldGZyZXEoZGV2LCBkZXYtPmN1cmZyZXEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDE2Mzg0LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjU5LDE0ICsyMzcsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY3RybC0+dmFsdWUgPSB0eXBob29uLT5tdXRlZDsKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm11dGVkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSB0eXBob29uLT5jdXJ2b2w7CisJCWN0cmwtPnZhbHVlID0gZGV2LT5jdXJ2b2w7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3NSwzMyArMjUzLDIyIEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0eXBob29uX2RldmljZSAqdHlwaG9vbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHR5cGhvb24gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQl0eXBob29uX211dGUodHlwaG9vbik7CisJCQl0eXBob29uX211dGUoZGV2KTsKIAkJZWxzZQotCQkJdHlwaG9vbl91bm11dGUodHlwaG9vbik7CisJCQl0eXBob29uX3VubXV0ZShkZXYpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJdHlwaG9vbl9zZXR2b2wodHlwaG9vbiwgY3RybC0+dmFsdWUpOworCQl0eXBob29uX3NldHZvbChkZXYsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzEwLDQ1ICsyNzcsNjIgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHR5cGhvb24gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCisJdjRsMl9pbmZvKHY0bDJfZGV2LCBCQU5ORVIpOworI2lmZGVmIE1PRFVMRQorCXY0bDJfaW5mbyh2NGwyX2RldiwgIkxvYWQgdHlwZTogRHJpdmVyIGxvYWRlZCBhcyBhIG1vZHVsZVxuXG4iKTsKKyNlbHNlCisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiTG9hZCB0eXBlOiBEcml2ZXIgY29tcGlsZWQgaW50byBrZXJuZWxcblxuIik7CisjZW5kaWYKKwl2NGwyX2luZm8odjRsMl9kZXYsICJmcmVxdWVuY3kgPSAlbHUga0h6XG4iLCBkZXYtPmN1cmZyZXEgPj4gNCk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAidm9sdW1lID0gJWRcbiIsIGRldi0+Y3Vydm9sKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJtdXRlID0gJXNcbiIsIGRldi0+bXV0ZWQgPyAgIm9uIiA6ICJvZmYiKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJpbyA9IDB4JXhcbiIsIGRldi0+aW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIm11dGUgZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwgZGV2LT5tdXRlZnJlcSA+PiA0KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0eXBob29uX2RldmljZSB0eXBob29uX3VuaXQgPQorc3RhdGljIGludCB0eXBob29uX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JLmlvYmFzZQkJPSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JULAotCS5jdXJmcmVxCT0gQ09ORklHX1JBRElPX1RZUEhPT05fTVVURUZSRVEsCi0JLm11dGVmcmVxCT0gQ09ORklHX1JBRElPX1RZUEhPT05fTVVURUZSRVEsCi19OwotCi1zdGF0aWMgaW50IHR5cGhvb25fZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJnR5cGhvb25fdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0eXBob29uX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0eXBob29uX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2xlYXJfYml0KDAsICZ0eXBob29uX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB0eXBob29uX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHR5cGhvb25fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gdHlwaG9vbl9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB0eXBob29uX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdHlwaG9vbl9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHR5cGhvb25faW9jdGxfb3BzID0geworCS52aWRpb2NfbG9nX3N0YXR1cyAgPSB2aWRpb2NfbG9nX3N0YXR1cywKIAkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAogCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKIAkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCkBAIC0zNjMsMTI1ICszNDcsNzIgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHR5cGhvb25fcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlR5cGhvb24gUmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZ0eXBob29uX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmdHlwaG9vbl9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0KLXN0YXRpYyBpbnQgdHlwaG9vbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQotewotCSNpZmRlZiBNT0RVTEUKLQkgICAgI2RlZmluZSBNT0RVTEVQUk9DU1RSSU5HICJEcml2ZXIgbG9hZGVkIGFzIGEgbW9kdWxlIgotCSNlbHNlCi0JICAgICNkZWZpbmUgTU9EVUxFUFJPQ1NUUklORyAiRHJpdmVyIGNvbXBpbGVkIGludG8ga2VybmVsIgotCSNlbmRpZgotCi0Jc2VxX3B1dHMobSwgQkFOTkVSKTsKLQlzZXFfcHV0cyhtLCAiTG9hZCB0eXBlOiAiIE1PRFVMRVBST0NTVFJJTkcgIlxuXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJmcmVxdWVuY3kgPSAlbHUga0h6XG4iLAotCQl0eXBob29uX3VuaXQuY3VyZnJlcSA+PiA0KTsKLQlzZXFfcHJpbnRmKG0sICJ2b2x1bWUgPSAlZFxuIiwgdHlwaG9vbl91bml0LmN1cnZvbCk7Ci0Jc2VxX3ByaW50ZihtLCAibXV0ZSA9ICVzXG4iLCB0eXBob29uX3VuaXQubXV0ZWQgPwotCQkib24iIDogIm9mZiIpOwotCXNlcV9wcmludGYobSwgImlvYmFzZSA9IDB4JXhcbiIsIHR5cGhvb25fdW5pdC5pb2Jhc2UpOwotCXNlcV9wcmludGYobSwgIm11dGUgZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwKLQkJdHlwaG9vbl91bml0Lm11dGVmcmVxID4+IDQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHR5cGhvb25fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB0eXBob29uX3Byb2Nfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR5cGhvb25fcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSB0eXBob29uX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTICovCi0KLU1PRFVMRV9BVVRIT1IoIkRyLiBIZW5yaWsgU2VpZGVsIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHlwaG9vbiByYWRpbyBjYXJkIChhLmsuYS4gRWNvUmFkaW8pLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGlvID0gLTE7Ci1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHlwaG9vbiBjYXJkICgweDMxNiBvciAweDMzNikiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotI2lmZGVmIE1PRFVMRQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbXV0ZWZyZXE7Ci1tb2R1bGVfcGFyYW0obXV0ZWZyZXEsIHVsb25nLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXV0ZWZyZXEsICJGcmVxdWVuY3kgdXNlZCB3aGVuIG11dGluZyB0aGUgY2FyZCAoaW4ga0h6KSIpOwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgX19pbml0IHR5cGhvb25faW5pdCh2b2lkKQogewotI2lmZGVmIE1PRFVMRQotCWlmIChpbyA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IFlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzE2IG9yIGlvPTB4MzM2XG4iKTsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gJnR5cGhvb25fY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJ0eXBob29uIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJZGV2LT5pbyA9IGlvOworCWRldi0+Y3VyZnJlcSA9IGRldi0+bXV0ZWZyZXEgPSBtdXRlZnJlcTsKKworCWlmIChkZXYtPmlvID09IC0xKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgzMTYgb3IgaW89MHgzMzZcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdHlwaG9vbl91bml0LmlvYmFzZSA9IGlvOwogCi0JaWYgKG11dGVmcmVxIDwgODcwMDAgfHwgbXV0ZWZyZXEgPiAxMDg1MDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBZb3UgbXVzdCBzZXQgYSBmcmVxdWVuY3kgKGluIGtIeikgdXNlZCB3aGVuIG11dGluZyB0aGUgY2FyZCxcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXR5cGhvb246IGUuZy4gd2l0aCBcIm11dGVmcmVxPTg3NTAwXCIgKDg3MDAwIDw9IG11dGVmcmVxIDw9IDEwODUwMClcbiIpOworCWlmIChkZXYtPm11dGVmcmVxIDwgODcwMDAgfHwgZGV2LT5tdXRlZnJlcSA+IDEwODUwMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhIGZyZXF1ZW5jeSAoaW4ga0h6KSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkLFxuIik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiZS5nLiB3aXRoIFwibXV0ZWZyZXE9ODc1MDBcIiAoODcwMDAgPD0gbXV0ZWZyZXEgPD0gMTA4NTAwKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl0eXBob29uX3VuaXQubXV0ZWZyZXEgPSBtdXRlZnJlcTsKLSNlbmRpZiAvKiBNT0RVTEUgKi8KIAotCXByaW50ayhLRVJOX0lORk8gQkFOTkVSKTsKLQltdXRleF9pbml0KCZ0eXBob29uX3VuaXQubG9jayk7Ci0JaW8gPSB0eXBob29uX3VuaXQuaW9iYXNlOwotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDgsICJ0eXBob29uIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsCi0JCSAgICAgICB0eXBob29uX3VuaXQuaW9iYXNlKTsKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5pbywgOCwgInR5cGhvb24iKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJICAgICAgIGRldi0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZ0eXBob29uX3JhZGlvLCAmdHlwaG9vbl91bml0KTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0eXBob29uX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDgpOworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJldHVybiByZXM7CisJfQorCXY0bDJfaW5mbyh2NGwyX2RldiwgQkFOTkVSKTsKKworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZ0eXBob29uX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZ0eXBob29uX2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgOCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJyYWRpby10eXBob29uOiBwb3J0IDB4JXguXG4iLCB0eXBob29uX3VuaXQuaW9iYXNlKTsKLQlwcmludGsoS0VSTl9JTkZPICJyYWRpby10eXBob29uOiBtdXRlIGZyZXF1ZW5jeSBpcyAlbHUga0h6LlxuIiwKLQkgICAgICAgdHlwaG9vbl91bml0Lm11dGVmcmVxKTsKLQl0eXBob29uX3VuaXQubXV0ZWZyZXEgPDw9IDQ7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAicG9ydCAweCV4LlxuIiwgZGV2LT5pbyk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAibXV0ZSBmcmVxdWVuY3kgaXMgJWx1IGtIei5cbiIsIGRldi0+bXV0ZWZyZXEpOworCWRldi0+bXV0ZWZyZXEgPDw9IDQ7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0JdHlwaG9vbl9tdXRlKCZ0eXBob29uX3VuaXQpOwotCi0jaWZkZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwotCWlmICghcHJvY19jcmVhdGUoImRyaXZlci9yYWRpby10eXBob29uIiwgMCwgTlVMTCwgJnR5cGhvb25fcHJvY19mb3BzKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiByZWdpc3RlcmluZyAvcHJvYy9kcml2ZXIvcmFkaW8tdHlwaG9vbiBmYWlsZWRcbiIpOwotI2VuZGlmCisJdHlwaG9vbl9tdXRlKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHR5cGhvb25fY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0eXBob29uX2V4aXQodm9pZCkKIHsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gJnR5cGhvb25fY2FyZDsKIAotI2lmZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMKLQlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JhZGlvLXR5cGhvb24iLCBOVUxMKTsKLSNlbmRpZgotCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnR5cGhvb25fcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA4KTsKIH0KIAogbW9kdWxlX2luaXQodHlwaG9vbl9pbml0KTsKLW1vZHVsZV9leGl0KHR5cGhvb25fY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQodHlwaG9vbl9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYwppbmRleCBkMmFjMTdlLi4xZjg1ZjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXpvbHRyaXguYwpAQCAtMzMsMzMgKzMzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEgICAgICAgICAgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkgICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5LCBtc2xlZXAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlciAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMgICAgICAgICAgICovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDQwOTYsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07CitNT0RVTEVfQVVUSE9SKCJDLnZhbiBTY2hhaWsiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBab2x0cml4IFJhZGlvIFBsdXMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1pPTFRSSVhfUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUIC0xCkBAIC02OCw5ICs1MSwxNiBAQAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19aT0xUUklYX1BPUlQ7CiBzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CiAKLXN0cnVjdCB6b2xfZGV2aWNlIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLQlpbnQgcG9ydDsKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzICgweDIwYyBvciAweDMwYykiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCB6b2x0cml4IHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgbXV0ZWQ7CkBAIC03OCwxNjEgKzY4LDE1OCBAQAogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAotc3RhdGljIGludCB6b2xfc2V0dm9sKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgc3RydWN0IHpvbHRyaXggem9sdHJpeF9jYXJkOworCitzdGF0aWMgaW50IHpvbF9zZXR2b2woc3RydWN0IHpvbHRyaXggKnpvbCwgaW50IHZvbCkKIHsKLQlkZXYtPmN1cnZvbCA9IHZvbDsKLQlpZiAoZGV2LT5tdXRlZCkKKwl6b2wtPmN1cnZvbCA9IHZvbDsKKwlpZiAoem9sLT5tdXRlZCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJnpvbC0+bG9jayk7CiAJaWYgKHZvbCA9PSAwKSB7Ci0JCW91dGIoMCwgaW8pOwotCQlvdXRiKDAsIGlvKTsKLQkJaW5iKGlvICsgMyk7ICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCi0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJaW5iKHpvbC0+aW8gKyAzKTsgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KKwkJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlvdXRiKGRldi0+Y3Vydm9sLTEsIGlvKTsKKwlvdXRiKHpvbC0+Y3Vydm9sLTEsIHpvbC0+aW8pOwogCW1zbGVlcCgxMCk7Ci0JaW5iKGlvICsgMik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCWluYih6b2wtPmlvICsgMik7CisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB6b2xfbXV0ZShzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgem9sX211dGUoc3RydWN0IHpvbHRyaXggKnpvbCkKIHsKLQlkZXYtPm11dGVkID0gMTsKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCW91dGIoMCwgaW8pOwotCW91dGIoMCwgaW8pOwotCWluYihpbyArIDMpOyAgICAgICAgICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXpvbC0+bXV0ZWQgPSAxOworCW11dGV4X2xvY2soJnpvbC0+bG9jayk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCWluYih6b2wtPmlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHpvbF91bm11dGUoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHpvbF91bm11dGUoc3RydWN0IHpvbHRyaXggKnpvbCkKIHsKLQlkZXYtPm11dGVkID0gMDsKLQl6b2xfc2V0dm9sKGRldiwgZGV2LT5jdXJ2b2wpOworCXpvbC0+bXV0ZWQgPSAwOworCXpvbF9zZXR2b2woem9sLCB6b2wtPmN1cnZvbCk7CiB9CiAKLXN0YXRpYyBpbnQgem9sX3NldGZyZXEoc3RydWN0IHpvbF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQorc3RhdGljIGludCB6b2xfc2V0ZnJlcShzdHJ1Y3Qgem9sdHJpeCAqem9sLCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7CiAJLyogdHVuZXMgdGhlIHJhZGlvIHRvIHRoZSBkZXNpcmVkIGZyZXF1ZW5jeSAqLworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmem9sLT52NGwyX2RldjsKIAl1bnNpZ25lZCBsb25nIGxvbmcgYml0bWFzaywgZiwgbTsKLQl1bnNpZ25lZCBpbnQgc3RlcmVvID0gZGV2LT5zdGVyZW87CisJdW5zaWduZWQgaW50IHN0ZXJlbyA9IHpvbC0+c3RlcmVvOwogCWludCBpOwogCiAJaWYgKGZyZXEgPT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiByZWNlaXZlZCB6ZXJvIGZyZXEuIEZhaWxlZCB0byBzZXQuXG4iKTsKKwkJdjRsMl93YXJuKHY0bDJfZGV2LCAiY2Fubm90IHNldCBhIGZyZXF1ZW5jeSBvZiAwLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW0gPSAoZnJlcSAvIDE2MCAtIDg4MDApICogMjsKLQlmID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgbSArIDB4NGQxYzsKKwlmID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltICsgMHg0ZDFjOwogCiAJYml0bWFzayA9IDB4YzQ4MDQwMmMxMDA4MDAwMHVsbDsKIAlpID0gNDU7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJnpvbC0+bG9jayk7CiAKLQlvdXRiKDAsIGlvKTsKLQlvdXRiKDAsIGlvKTsKLQlpbmIoaW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLworCXpvbC0+Y3VyZnJlcSA9IGZyZXE7CiAKLQlvdXRiKDB4NDAsIGlvKTsKLQlvdXRiKDB4YzAsIGlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCW91dGIoMCwgem9sLT5pbyk7CisJaW5iKHpvbC0+aW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwogCi0JYml0bWFzayA9IChiaXRtYXNrIF4gKChmICYgMHhmZikgPDwgNDcpIF4gKChmICYgMHhmZjAwKSA8PCAzMCkgXiAoIHN0ZXJlbyA8PCAzMSkpOworCW91dGIoMHg0MCwgem9sLT5pbyk7CisJb3V0YigweGMwLCB6b2wtPmlvKTsKKworCWJpdG1hc2sgPSAoYml0bWFzayBeICgoZiAmIDB4ZmYpIDw8IDQ3KSBeICgoZiAmIDB4ZmYwMCkgPDwgMzApIF4gKHN0ZXJlbyA8PCAzMSkpOwogCXdoaWxlIChpLS0pIHsKIAkJaWYgKChiaXRtYXNrICYgMHg4MDAwMDAwMDAwMDAwMDAwdWxsKSAhPSAwKSB7Ci0JCQlvdXRiKDB4ODAsIGlvKTsKKwkJCW91dGIoMHg4MCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwotCQkJb3V0YigweDAwLCBpbyk7CisJCQlvdXRiKDB4MDAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHg4MCwgaW8pOworCQkJb3V0YigweDgwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7CiAJCX0gZWxzZSB7Ci0JCQlvdXRiKDB4YzAsIGlvKTsKKwkJCW91dGIoMHhjMCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwotCQkJb3V0YigweDQwLCBpbyk7CisJCQlvdXRiKDB4NDAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHhjMCwgaW8pOworCQkJb3V0YigweGMwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7CiAJCX0KIAkJYml0bWFzayAqPSAyOwogCX0KIAkvKiB0ZXJtaW5hdGlvbiBzZXF1ZW5jZSAqLwotCW91dGIoMHg4MCwgaW8pOwotCW91dGIoMHhjMCwgaW8pOwotCW91dGIoMHg0MCwgaW8pOworCW91dGIoMHg4MCwgem9sLT5pbyk7CisJb3V0YigweGMwLCB6b2wtPmlvKTsKKwlvdXRiKDB4NDAsIHpvbC0+aW8pOwogCXVkZWxheSgxMDAwKTsKLQlpbmIoaW8rMik7CisJaW5iKHpvbC0+aW8gKyAyKTsKIAogCXVkZWxheSgxMDAwKTsKIAotCWlmIChkZXYtPm11dGVkKQotCXsKLQkJb3V0YigwLCBpbyk7Ci0JCW91dGIoMCwgaW8pOwotCQlpbmIoaW8gKyAzKTsKKwlpZiAoem9sLT5tdXRlZCkgeworCQlvdXRiKDAsIHpvbC0+aW8pOworCQlvdXRiKDAsIHpvbC0+aW8pOworCQlpbmIoem9sLT5pbyArIDMpOwogCQl1ZGVsYXkoMTAwMCk7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAotCWlmKCFkZXYtPm11dGVkKQotCXsKLQkJem9sX3NldHZvbChkZXYsIGRldi0+Y3Vydm9sKTsKLQl9CisJaWYgKCF6b2wtPm11dGVkKQorCQl6b2xfc2V0dm9sKHpvbCwgem9sLT5jdXJ2b2wpOwogCXJldHVybiAwOwogfQogCiAvKiBHZXQgc2lnbmFsIHN0cmVuZ3RoICovCi0KLXN0YXRpYyBpbnQgem9sX2dldHNpZ3N0cihzdHJ1Y3Qgem9sX2RldmljZSAqZGV2KQorc3RhdGljIGludCB6b2xfZ2V0c2lnc3RyKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7CiAJaW50IGEsIGI7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCW91dGIoMHgwMCwgaW8pOyAgICAgICAgIC8qIFRoaXMgc3R1ZmYgSSBmb3VuZCB0byBkbyBub3RoaW5nICovCi0Jb3V0YihkZXYtPmN1cnZvbCwgaW8pOworCW11dGV4X2xvY2soJnpvbC0+bG9jayk7CisJb3V0YigweDAwLCB6b2wtPmlvKTsgICAgICAgICAvKiBUaGlzIHN0dWZmIEkgZm91bmQgdG8gZG8gbm90aGluZyAqLworCW91dGIoem9sLT5jdXJ2b2wsIHpvbC0+aW8pOwogCW1zbGVlcCgyMCk7CiAKLQlhID0gaW5iKGlvKTsKKwlhID0gaW5iKHpvbC0+aW8pOwogCW1zbGVlcCgxMCk7Ci0JYiA9IGluYihpbyk7CisJYiA9IGluYih6b2wtPmlvKTsKIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAKIAlpZiAoYSAhPSBiKQotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAotCWlmICgoYSA9PSAweGNmKSB8fCAoYSA9PSAweGRmKSAgLyogSSBmb3VuZCB0aGlzIG91dCBieSBwbGF5aW5nICovCi0JCXx8IChhID09IDB4ZWYpKSAgICAgICAvKiB3aXRoIGEgYmluYXJ5IHNjYW5uZXIgb24gdGhlIGNhcmQgaW8gKi8KLQkJcmV0dXJuICgxKTsKLQlyZXR1cm4gKDApOworCS8qIEkgZm91bmQgdGhpcyBvdXQgYnkgcGxheWluZyB3aXRoIGEgYmluYXJ5IHNjYW5uZXIgb24gdGhlIGNhcmQgaW8gKi8KKwlyZXR1cm4gYSA9PSAweGNmIHx8IGEgPT0gMHhkZiB8fCBhID09IDB4ZWY7CiB9CiAKLXN0YXRpYyBpbnQgem9sX2lzX3N0ZXJlbyAoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgem9sX2lzX3N0ZXJlbyhzdHJ1Y3Qgem9sdHJpeCAqem9sKQogewogCWludCB4MSwgeDI7CiAKLQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X2xvY2soJnpvbC0+bG9jayk7CiAKLQlvdXRiKDB4MDAsIGlvKTsKLQlvdXRiKGRldi0+Y3Vydm9sLCBpbyk7CisJb3V0YigweDAwLCB6b2wtPmlvKTsKKwlvdXRiKHpvbC0+Y3Vydm9sLCB6b2wtPmlvKTsKIAltc2xlZXAoMjApOwogCi0JeDEgPSBpbmIoaW8pOworCXgxID0gaW5iKHpvbC0+aW8pOwogCW1zbGVlcCgxMCk7Ci0JeDIgPSBpbmIoaW8pOworCXgyID0gaW5iKHpvbC0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAotCWlmICgoeDEgPT0geDIpICYmICh4MSA9PSAweGNmKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHgxID09IHgyICYmIHgxID09IDB4Y2Y7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKQEAgLTI0MCw1OSArMjI3LDU0IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby16b2x0cml4Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlpvbHRyaXggUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODgqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOwotCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5yYW5nZWxvdyA9IDg4ICogMTYwMDA7CisJdi0+cmFuZ2VoaWdoID0gMTA4ICogMTYwMDA7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CiAJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAlpZiAoem9sX2lzX3N0ZXJlbyh6b2wpKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSAweEZGRkYqem9sX2dldHNpZ3N0cih6b2wpOworCXYtPnNpZ25hbCA9IDB4RkZGRiAqIHpvbF9nZXRzaWdzdHIoem9sKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQl6b2wtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IFNldCBmcmVxdWVuY3kgZmFpbGVkLlxuIik7CisJaWYgKHpvbF9zZXRmcmVxKHpvbCwgZi0+ZnJlcXVlbmN5KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSB6b2wtPmN1cmZyZXE7CkBAIC0zMDIsMTQgKzI4NCwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA0MDk2LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMzE3LDcgKzI5Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMzMsNyArMzEyLDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTM0MSw0MyArMzIwLDMwIEBACiAJCQl6b2xfbXV0ZSh6b2wpOwogCQllbHNlIHsKIAkJCXpvbF91bm11dGUoem9sKTsKLQkJCXpvbF9zZXR2b2woem9sLHpvbC0+Y3Vydm9sKTsKKwkJCXpvbF9zZXR2b2woem9sLCB6b2wtPmN1cnZvbCk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXpvbF9zZXR2b2woem9sLGN0cmwtPnZhbHVlLzQwOTYpOworCQl6b2xfc2V0dm9sKHpvbCwgY3RybC0+dmFsdWUgLyA0MDk2KTsKIAkJcmV0dXJuIDA7CiAJfQogCXpvbC0+c3RlcmVvID0gMTsKLQlpZiAoem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogU2V0IGZyZXF1ZW5jeSBmYWlsZWQuXG4iKTsKKwlpZiAoem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCX0KICNpZiAwCiAvKiBGSVhNRTogSW1wbGVtZW50IHN0ZXJlby9tb25vIHN3aXRjaCBvbiBWNEwyICovCi0JCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykgewotCQkJCXpvbC0+c3RlcmVvID0gMTsKLQkJCQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7Ci0JCQl9Ci0JCQlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pIHsKLQkJCQl6b2wtPnN0ZXJlbyA9IDA7Ci0JCQkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOwotCQkJfQorCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSB7CisJCXpvbC0+c3RlcmVvID0gMTsKKwkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworCX0KKwlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX01PTk8pIHsKKwkJem9sLT5zdGVyZW8gPSAwOworCQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7CisJfQogI2VuZGlmCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zODYsMzcgKzM1MiwzOSBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB6b2x0cml4X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgem9sX2RldmljZSB6b2x0cml4X3VuaXQ7Ci0KLXN0YXRpYyBpbnQgem9sdHJpeF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgem9sdHJpeF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ6b2x0cml4X3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgem9sdHJpeF9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJnpvbHRyaXhfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHpvbHRyaXhfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHpvbHRyaXhfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gem9sdHJpeF9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSB6b2x0cml4X29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gem9sdHJpeF9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC00MzUsNjcgKzQwMyw3NSBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugem9sdHJpeF9yYWRpbyA9IHsKLQkubmFtZQkJPSAiWm9sdHJpeCBSYWRpbyBQbHVzIiwKLQkuZm9wcyAgICAgICAgICAgPSAmem9sdHJpeF9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnpvbHRyaXhfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCB6b2x0cml4X2luaXQodm9pZCkKIHsKLQlpZiAoaW8gPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9ICZ6b2x0cml4X2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZ6b2wtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAiem9sdHJpeCIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCXpvbC0+aW8gPSBpbzsKKwlpZiAoem9sLT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MjBjIG9yIDB4MzBjXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICgoaW8gIT0gMHgyMGMpICYmIChpbyAhPSAweDMwYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ6b2x0cml4OiBpbnZhbGlkIHBvcnQsIHRyeSAweDIwYyBvciAweDMwY1xuIik7CisJaWYgKHpvbC0+aW8gIT0gMHgyMGMgJiYgem9sLT5pbyAhPSAweDMwYykgeworCQl2NGwyX2Vycih2NGwyX2RldiwgImludmFsaWQgcG9ydCwgdHJ5IDB4MjBjIG9yIDB4MzBjXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmem9sdHJpeF9yYWRpbywgJnpvbHRyaXhfdW5pdCk7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInpvbHRyaXgiKSkgewotCQlwcmludGsoS0VSTl9FUlIgInpvbHRyaXg6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24oem9sLT5pbywgMiwgInpvbHRyaXgiKSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgem9sLT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmem9sdHJpeF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbih6b2wtPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKworCXN0cmxjcHkoem9sLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2Yoem9sLT52ZGV2Lm5hbWUpKTsKKwl6b2wtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwl6b2wtPnZkZXYuZm9wcyA9ICZ6b2x0cml4X2ZvcHM7CisJem9sLT52ZGV2LmlvY3RsX29wcyA9ICZ6b2x0cml4X2lvY3RsX29wczsKKwl6b2wtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZ6b2wtPnZkZXYsIHpvbCk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ6b2wtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbih6b2wtPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIlpvbHRyaXggUmFkaW8gUGx1cyBjYXJkIGRyaXZlci5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlpvbHRyaXggUmFkaW8gUGx1cyBjYXJkIGRyaXZlci5cbiIpOwogCi0JbXV0ZXhfaW5pdCgmem9sdHJpeF91bml0LmxvY2spOworCW11dGV4X2luaXQoJnpvbC0+bG9jayk7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCiAKIAkvKiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGFsbCB0aGUgd2F5IGRvd24gICovCiAKLQlvdXRiKDAsIGlvKTsKLQlvdXRiKDAsIGlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCW91dGIoMCwgem9sLT5pbyk7CiAJbXNsZWVwKDIwKTsKLQlpbmIoaW8gKyAzKTsKKwlpbmIoem9sLT5pbyArIDMpOwogCi0Jem9sdHJpeF91bml0LmN1cnZvbCA9IDA7Ci0Jem9sdHJpeF91bml0LnN0ZXJlbyA9IDE7CisJem9sLT5jdXJ2b2wgPSAwOworCXpvbC0+c3RlcmVvID0gMTsKIAogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJDLnZhbiBTY2hhaWsiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBab2x0cml4IFJhZGlvIFBsdXMuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzICgweDIwYyBvciAweDMwYykiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IHpvbHRyaXhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB6b2x0cml4X2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmem9sdHJpeF9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSAmem9sdHJpeF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnpvbC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigmem9sLT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oem9sLT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KHpvbHRyaXhfaW5pdCk7Ci1tb2R1bGVfZXhpdCh6b2x0cml4X2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KHpvbHRyaXhfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCAxOWNmM2I4Li43NmJhZDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0yNDksMTEgKzI0OSwyNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdnAyN3NtcHguCiAKK2NvbW1lbnQgIlJEUyBkZWNvZGVycyIKKworY29uZmlnIFZJREVPX1NBQTY1ODgKKwl0cmlzdGF0ZSAiU0FBNjU4OCBSYWRpbyBDaGlwIFJEUyBkZWNvZGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhpcyBSYWRpbyBEYXRhIFN5c3RlbSAoUkRTKSBkZWNvZGVyLiBUaGlzIGFsbG93cworCSAgc2VlaW5nIHJhZGlvIHN0YXRpb24gaWRlbnRpZmljYXRpb24gdHJhbnNtaXR0ZWQgdXNpbmcgdGhpcworCSAgc3RhbmRhcmQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTY1ODguCisKIGNvbW1lbnQgIlZpZGVvIGRlY29kZXJzIgogCiBjb25maWcgVklERU9fQlQ4MTkKIAl0cmlzdGF0ZSAiQlQ4MTlBIFZpZGVvU3RyZWFtIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBCVDgxOUEgdmlkZW8gZGVjb2Rlci4KIApAQCAtMjYyLDcgKzI3Niw3IEBACiAKIGNvbmZpZyBWSURFT19CVDg1NgogCXRyaXN0YXRlICJCVDg1NiBWaWRlb1N0cmVhbSBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NTYgdmlkZW8gZGVjb2Rlci4KIApAQCAtMjcxLDcgKzI4NSw3IEBACiAKIGNvbmZpZyBWSURFT19CVDg2NgogCXRyaXN0YXRlICJCVDg2NiBWaWRlb1N0cmVhbSBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NjYgdmlkZW8gZGVjb2Rlci4KIApAQCAtMjgwLDcgKzI5NCw3IEBACiAKIGNvbmZpZyBWSURFT19LUzAxMjcKIAl0cmlzdGF0ZSAiS1MwMTI3IHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBLUzAxMjcgdmlkZW8gZGVjb2Rlci4KIApAQCAtMzA3LDM4ICszMjEsMTggQEAKIAogY29uZmlnIFZJREVPX1NBQTcxMTAKIAl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEwIHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEwIHZpZGVvIGRlY29kZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTEwLgogCi1jb25maWcgVklERU9fU0FBNzExMQotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTEgdmlkZW8gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExIHZpZGVvIGRlY29kZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTEuCi0KLWNvbmZpZyBWSURFT19TQUE3MTE0Ci0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExNCB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTE0IHZpZGVvIGRlY29kZXIuIFRoaXMgZHJpdmVyCi0JICBpcyB1c2VkIG9ubHkgb24gWm9yYW4gZHJpdmVyIGFuZCBzaG91bGQgYmUgbW92ZWQgc29vbiB0bwotCSAgU0FBNzExeCBtb2R1bGUuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTQuCi0KIGNvbmZpZyBWSURFT19TQUE3MTFYCi0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMy80LzUgdmlkZW8gZGVjb2RlcnMiCisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMS8zLzQvNSB2aWRlbyBkZWNvZGVycyIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMy80LzUgdmlkZW8gZGVjb2RlcnMuCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTExLzMvNC81IHZpZGVvIGRlY29kZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE1LgpAQCAtMzgzLDcgKzM3Nyw3IEBACiAKIGNvbmZpZyBWSURFT19WUFgzMjIwCiAJdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXJzIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgVlBYMzIyeCB2aWRlbyBkZWNvZGVycy4KIApAQCAtNDIxLDcgKzQxNSw3IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTg1CiAJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyLgogCkBAIC00MzAsNyArNDI0LDcgQEAKIAogY29uZmlnIFZJREVPX0FEVjcxNzAKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURWNzE3MCB2aWRlbyBlbmNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIKIApAQCAtNDM5LDcgKzQzMyw3IEBACiAKIGNvbmZpZyBWSURFT19BRFY3MTc1CiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyCiAKQEAgLTQ4NywxOCArNDgxLDYgQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWciCiAKLWNvbmZpZyBWSURFT19TQUE2NTg4Ci0JdHJpc3RhdGUgIlNBQTY1ODggUmFkaW8gQ2hpcCBSRFMgZGVjb2RlciBzdXBwb3J0IG9uIEJUODQ4IGNhcmRzIgotCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX0JUODQ4Ci0KLQloZWxwCi0JICBTdXBwb3J0IGZvciAgUmFkaW8gRGF0YSBTeXN0ZW0gKFJEUykgZGVjb2Rlci4gVGhpcyBhbGxvd3Mgc2VlaW5nCi0JICByYWRpbyBzdGF0aW9uIGlkZW50aWZpY2F0aW9uIHRyYW5zbWl0dGVkIHVzaW5nIHRoaXMgc3RhbmRhcmQuCi0JICBDdXJyZW50bHksIGl0IHdvcmtzIG9ubHkgd2l0aCBidDh4OCBjaGlwcy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNjU4OC4KLQogY29uZmlnIFZJREVPX1BNUwogCXRyaXN0YXRlICJNZWRpYXZpc2lvbiBQcm8gTW92aWUgU3R1ZGlvIFZpZGVvIEZvciBMaW51eCIKIAlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCkBAIC02MDIsNyArNTg0LDYgQEAKIGNvbmZpZyBWSURFT19WSU5PCiAJdHJpc3RhdGUgIlNHSSBWaW5vIFZpZGVvIEZvciBMaW51eCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMgotCXNlbGVjdCBJMkNfQUxHT19TR0kKIAlzZWxlY3QgVklERU9fU0FBNzE5MSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gYnVpbGQgaW4gc3VwcG9ydCBmb3IgdGhlIFZpbm8gdmlkZW8gaW5wdXQgc3lzdGVtIGZvdW5kCkBAIC02MzksNyArNjIwLDcgQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxICYmIEkyQwogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCiAJc2VsZWN0IFZJREVPX1RVTkVSCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19UREE5ODQwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1RFQTY0MTVDIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1RFQTY0MjAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KQEAgLTcyOCwxMyArNzA5LDYgQEAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOU0wMDEgY2FtZXJhcyBmcm9tIE1pY3JvbiwgbW9ub2Nocm9tZQogCSAgYW5kIGNvbG91ciBtb2RlbHMuCiAKLWNvbmZpZyBNVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JYm9vbCAicGNhOTUzNiBkYXRhd2lkdGggc3dpdGNoIGZvciBtdDltMDAxIgotCWRlcGVuZHMgb24gU09DX0NBTUVSQV9NVDlNMDAxICYmIEdFTkVSSUNfR1BJTwotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdXIgTVQ5TTAwMSBjYW1lcmEgdXNlcyBhIFBDQTk1MzYgSTJDIEdQSU8KLQkgIGV4dGVuZGVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBkYXRhd2lkdGggbW9kZXMKLQogY29uZmlnIFNPQ19DQU1FUkFfTVQ5TTExMQogCXRyaXN0YXRlICJtdDltMTExIGFuZCBtdDltMTEyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQwpAQCAtNzU0LDEzICs3MjgsNiBAQAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1UOVYwMjIgY2FtZXJhcyBmcm9tIE1pY3JvbgogCi1jb25maWcgTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAotCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5djAyMiIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5VjAyMiAmJiBHRU5FUklDX0dQSU8KLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOVYwMjIgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCi0JICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCi0KIGNvbmZpZyBTT0NfQ0FNRVJBX1RXOTkxMAogCXRyaXN0YXRlICJ0dzk5MTAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCkBAIC03NzksNiArNzQ2LDEzIEBACiAJaGVscAogCSAgVGhpcyBpcyBhIG92NzcyeCBjYW1lcmEgZHJpdmVyCiAKK2NvbmZpZyBWSURFT19NWDMKKwl0cmlzdGF0ZSAiaS5NWDN4IENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBNWDNfSVBVICYmIFNPQ19DQU1FUkEKKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIGkuTVgzeCBDYW1lcmEgU2Vuc29yIEludGVyZmFjZQorCiBjb25maWcgVklERU9fUFhBMjd4CiAJdHJpc3RhdGUgIlBYQTI3eCBRdWljayBDYXB0dXJlIEludGVyZmFjZSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUFhBMjd4ICYmIFNPQ19DQU1FUkEKQEAgLTgxNyw2ICs3OTEsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCA3MmY2ZDAzLi5iOTA0Njc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDYgQEAKIG9iai0kKENPTkZJR19WSURFT19UVkFVRElPKSArPSB0dmF1ZGlvLm8KIG9iai0kKENPTkZJR19WSURFT19UREE3NDMyKSArPSB0ZGE3NDMyLm8KIG9iai0kKENPTkZJR19WSURFT19UREE5ODc1KSArPSB0ZGE5ODc1Lm8KLW9iai0kKENPTkZJR19TT1VORF9UVk1JWEVSKSArPSB0dm1peGVyLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTY1ODgpICs9IHNhYTY1ODgubwogb2JqLSQoQ09ORklHX1ZJREVPX1NBQTUyNDZBKSArPSBzYWE1MjQ2YS5vCkBAIC00Myw4ICs0Miw2IEBACiBvYmotJChDT05GSUdfVklERU9fVEVBNjQxNUMpICs9IHRlYTY0MTVjLm8KIG9iai0kKENPTkZJR19WSURFT19URUE2NDIwKSArPSB0ZWE2NDIwLm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTEwKSArPSBzYWE3MTEwLm8KLW9iai0kKENPTkZJR19WSURFT19TQUE3MTExKSArPSBzYWE3MTExLm8KLW9iai0kKENPTkZJR19WSURFT19TQUE3MTE0KSArPSBzYWE3MTE0Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTFYKSArPSBzYWE3MTE1Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTdYKSArPSBzYWE3MTd4Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE3MTI3KSArPSBzYWE3MTI3Lm8KQEAgLTEyMiw2ICsxMTksOCBAQAogb2JqLSQoQ09ORklHX1VTQl9aQzAzMDEpICAgICAgICArPSB6YzAzMDEvCiBvYmotJChDT05GSUdfVVNCX0dTUENBKSAgICAgICAgICs9IGdzcGNhLwogCitvYmotJChDT05GSUdfVklERU9fSERQVlIpCSs9IGhkcHZyLworCiBvYmotJChDT05GSUdfVVNCX0lCTUNBTSkgICAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9LT05JQ0FXQykgICAgICArPSB1c2J2aWRlby8KIG9iai0kKENPTkZJR19VU0JfVklDQU0pICAgICAgICAgKz0gdXNidmlkZW8vCkBAIC0xMzQsMTAgKzEzMywxMSBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1ZJVkkpICs9IHZpdmkubwogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM4ODUpICs9IGN4MjM4ODUvCiAKLW9iai0kKENPTkZJR19WSURFT19QWEEyN3gpCSs9IHB4YV9jYW1lcmEubworb2JqLSQoQ09ORklHX1ZJREVPX01YMykJCQkrPSBteDNfY2FtZXJhLm8KK29iai0kKENPTkZJR19WSURFT19QWEEyN3gpCQkrPSBweGFfY2FtZXJhLm8KIG9iai0kKENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVKQkrPSBzaF9tb2JpbGVfY2V1X2NhbWVyYS5vCiBvYmotJChDT05GSUdfVklERU9fT01BUDIpCQkrPSBvbWFwMmNhbS5vCi1vYmotJChDT05GSUdfU09DX0NBTUVSQSkJKz0gc29jX2NhbWVyYS5vCitvYmotJChDT05GSUdfU09DX0NBTUVSQSkJCSs9IHNvY19jYW1lcmEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTAwMSkJKz0gbXQ5bTAwMS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlNMTExKQkrPSBtdDltMTExLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEpCSs9IG10OXQwMzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwppbmRleCBlMGViNGYzLi44NzNjMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzAuYwpAQCAtMzQsMTUgKzM0LDE2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwpAQCAtNTAsMzggKzUxLDQzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYWR2NzE3MCB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXVuc2lnbmVkIGNoYXIgcmVnWzEyOF07CiAKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkdjcxNzAgKnRvX2FkdjcxNzAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYWR2NzE3MCwgc2QpOworfQorCiBzdGF0aWMgY2hhciAqaW5wdXRzW10gPSB7ICJwYXNzX3Rocm91Z2giLCAicGxheV9iYWNrIiB9Owotc3RhdGljIGNoYXIgKm5vcm1zW10gPSB7ICJQQUwiLCAiTlRTQyIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gdG9fYWR2NzE3MChzZCk7CiAKIAllbmNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGFkdjcxNzBfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgYWR2NzE3MF93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IHRvX2FkdjcxNzAoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTg5LDcgKzk1LDYgQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCQl1OCBibG9ja19kYXRhWzMyXTsKIAkJaW50IGJsb2NrX2xlbjsKIApAQCAtMTEwLDcgKzExNSw3IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gYWR2NzE3MF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlyZXQgPSBhZHY3MTcwX3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKQEAgLTEyOCwyMDMgKzEzMywxNjEgQEAKICNkZWZpbmUgVFIxUExBWQkgICAgMHgwMAogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0X05UU0NbXSA9IHsKLQkweDAwLCAweDEwLAkJLy8gTVIwCi0JMHgwMSwgMHgyMCwJCS8vIE1SMQotCTB4MDIsIDB4MGUsCQkvLyBNUjIgUlRDIGNvbnRyb2w6IGJpdHMgMiBhbmQgMQotCTB4MDMsIDB4ODAsCQkvLyBNUjMKLQkweDA0LCAweDMwLAkJLy8gTVI0Ci0JMHgwNSwgMHgwMCwJCS8vIFJlc2VydmVkCi0JMHgwNiwgMHgwMCwJCS8vIFJlc2VydmVkCi0JMHgwNywgVFIwTU9ERSwJCS8vIFRNMAotCTB4MDgsIFRSMUNBUFQsCQkvLyBUTTEKLQkweDA5LCAweDE2LAkJLy8gRnNjMAotCTB4MGEsIDB4N2MsCQkvLyBGc2MxCi0JMHgwYiwgMHhmMCwJCS8vIEZzYzIKLQkweDBjLCAweDIxLAkJLy8gRnNjMwotCTB4MGQsIDB4MDAsCQkvLyBTdWJjYXJyaWVyIFBoYXNlCi0JMHgwZSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiBFeHQgMAotCTB4MGYsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDEKLQkweDEwLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIDAKLQkweDExLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIDEKLQkweDEyLCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDAKLQkweDEzLCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDEKLQkweDE0LCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDIKLQkweDE1LCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDMKLQkweDE2LCAweDAwLAkJLy8gQ0dNU19XU1NfMAotCTB4MTcsIDB4MDAsCQkvLyBDR01TX1dTU18xCi0JMHgxOCwgMHgwMCwJCS8vIENHTVNfV1NTXzIKLQkweDE5LCAweDAwLAkJLy8gVGVsZXRleHQgQ3RsCisJMHgwMCwgMHgxMCwJCS8qIE1SMCAqLworCTB4MDEsIDB4MjAsCQkvKiBNUjEgKi8KKwkweDAyLCAweDBlLAkJLyogTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEgKi8KKwkweDAzLCAweDgwLAkJLyogTVIzICovCisJMHgwNCwgMHgzMCwJCS8qIE1SNCAqLworCTB4MDUsIDB4MDAsCQkvKiBSZXNlcnZlZCAqLworCTB4MDYsIDB4MDAsCQkvKiBSZXNlcnZlZCAqLworCTB4MDcsIFRSME1PREUsCQkvKiBUTTAgKi8KKwkweDA4LCBUUjFDQVBULAkJLyogVE0xICovCisJMHgwOSwgMHgxNiwJCS8qIEZzYzAgKi8KKwkweDBhLCAweDdjLAkJLyogRnNjMSAqLworCTB4MGIsIDB4ZjAsCQkvKiBGc2MyICovCisJMHgwYywgMHgyMSwJCS8qIEZzYzMgKi8KKwkweDBkLCAweDAwLAkJLyogU3ViY2FycmllciBQaGFzZSAqLworCTB4MGUsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gRXh0IDAgKi8KKwkweDBmLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAxICovCisJMHgxMCwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiAwICovCisJMHgxMSwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiAxICovCisJMHgxMiwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAwICovCisJMHgxMywgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAxICovCisJMHgxNCwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAyICovCisJMHgxNSwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAzICovCisJMHgxNiwgMHgwMCwJCS8qIENHTVNfV1NTXzAgKi8KKwkweDE3LCAweDAwLAkJLyogQ0dNU19XU1NfMSAqLworCTB4MTgsIDB4MDAsCQkvKiBDR01TX1dTU18yICovCisJMHgxOSwgMHgwMCwJCS8qIFRlbGV0ZXh0IEN0bCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9QQUxbXSA9IHsKLQkweDAwLCAweDcxLAkJLy8gTVIwCi0JMHgwMSwgMHgyMCwJCS8vIE1SMQotCTB4MDIsIDB4MGUsCQkvLyBNUjIgUlRDIGNvbnRyb2w6IGJpdHMgMiBhbmQgMQotCTB4MDMsIDB4ODAsCQkvLyBNUjMKLQkweDA0LCAweDMwLAkJLy8gTVI0Ci0JMHgwNSwgMHgwMCwJCS8vIFJlc2VydmVkCi0JMHgwNiwgMHgwMCwJCS8vIFJlc2VydmVkCi0JMHgwNywgVFIwTU9ERSwJCS8vIFRNMAotCTB4MDgsIFRSMUNBUFQsCQkvLyBUTTEKLQkweDA5LCAweGNiLAkJLy8gRnNjMAotCTB4MGEsIDB4OGEsCQkvLyBGc2MxCi0JMHgwYiwgMHgwOSwJCS8vIEZzYzIKLQkweDBjLCAweDJhLAkJLy8gRnNjMwotCTB4MGQsIDB4MDAsCQkvLyBTdWJjYXJyaWVyIFBoYXNlCi0JMHgwZSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiBFeHQgMAotCTB4MGYsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDEKLQkweDEwLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIDAKLQkweDExLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIDEKLQkweDEyLCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDAKLQkweDEzLCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDEKLQkweDE0LCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDIKLQkweDE1LCAweDAwLAkJLy8gUGVkZXN0YWwgQ3RsIDMKLQkweDE2LCAweDAwLAkJLy8gQ0dNU19XU1NfMAotCTB4MTcsIDB4MDAsCQkvLyBDR01TX1dTU18xCi0JMHgxOCwgMHgwMCwJCS8vIENHTVNfV1NTXzIKLQkweDE5LCAweDAwLAkJLy8gVGVsZXRleHQgQ3RsCisJMHgwMCwgMHg3MSwJCS8qIE1SMCAqLworCTB4MDEsIDB4MjAsCQkvKiBNUjEgKi8KKwkweDAyLCAweDBlLAkJLyogTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEgKi8KKwkweDAzLCAweDgwLAkJLyogTVIzICovCisJMHgwNCwgMHgzMCwJCS8qIE1SNCAqLworCTB4MDUsIDB4MDAsCQkvKiBSZXNlcnZlZCAqLworCTB4MDYsIDB4MDAsCQkvKiBSZXNlcnZlZCAqLworCTB4MDcsIFRSME1PREUsCQkvKiBUTTAgKi8KKwkweDA4LCBUUjFDQVBULAkJLyogVE0xICovCisJMHgwOSwgMHhjYiwJCS8qIEZzYzAgKi8KKwkweDBhLCAweDhhLAkJLyogRnNjMSAqLworCTB4MGIsIDB4MDksCQkvKiBGc2MyICovCisJMHgwYywgMHgyYSwJCS8qIEZzYzMgKi8KKwkweDBkLCAweDAwLAkJLyogU3ViY2FycmllciBQaGFzZSAqLworCTB4MGUsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gRXh0IDAgKi8KKwkweDBmLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAxICovCisJMHgxMCwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiAwICovCisJMHgxMSwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiAxICovCisJMHgxMiwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAwICovCisJMHgxMywgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAxICovCisJMHgxNCwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAyICovCisJMHgxNSwgMHgwMCwJCS8qIFBlZGVzdGFsIEN0bCAzICovCisJMHgxNiwgMHgwMCwJCS8qIENHTVNfV1NTXzAgKi8KKwkweDE3LCAweDAwLAkJLyogQ0dNU19XU1NfMSAqLworCTB4MTgsIDB4MDAsCQkvKiBDR01TX1dTU18yICovCisJMHgxOSwgMHgwMCwJCS8qIFRlbGV0ZXh0IEN0bCAqLwogfTsKIAogCi1zdGF0aWMgaW50IGFkdjcxNzBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYWR2NzE3MF9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQogewotCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotI2lmIDAKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKLQkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotI2VuZGlmCi0JCWJyZWFrOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBub3JtICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAotCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19FTkNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQzsKLQkJY2FwLT5pbnB1dHMgPSAyOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAlZFxuIiwgaWFyZyk7Ci0KLQkJc3dpdGNoIChpYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfTlRTQywKLQkJCQkJICAgIHNpemVvZihpbml0X05UU0MpKTsKLQkJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQotCQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDBlKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9QQUwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9QQUwpKTsKLQkJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQotCQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDBlKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBub3Jtc1tpYXJnXSk7Ci0JCWVuY29kZXItPm5vcm0gPSBpYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJLyogUko6ICppYXJnID0gMDogaW5wdXQgaXMgZnJvbSBkZWNvZGVyCi0JCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAotCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgZnJvbSAlc1xuIiwKLQkJCWlhcmcgPT0gMCA/ICJkZWNvZGVyIiA6ICJaUjM2MDYwIik7Ci0KLQkJc3dpdGNoIChpYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAxLCAweDIwKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA4LCBUUjFDQVBUKTsJLyogVFIxICovCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvKiB1ZGVsYXkoMTApOyAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOgotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDEsIDB4MDApOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDgsIFRSMVBMQVkpOwkvKiBUUjEgKi8KLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAyLCAweDA4KTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIGlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7Ci0JCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6CisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJYWR2NzE3MF93cml0ZV9ibG9jayhzZCwgaW5pdF9OVFNDLCBzaXplb2YoaW5pdF9OVFNDKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3MF93cml0ZShzZCwgMHgwMiwgMHgwZSk7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKHNkLCBpbml0X1BBTCwgc2l6ZW9mKGluaXRfUEFMKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3MF93cml0ZShzZCwgMHgwMiwgMHgwZSk7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwl9IGVsc2UgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbGxlZ2FsIG5vcm06ICVsbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhZHY3MTcwX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IHRvX2FkdjcxNzAoc2QpOworCisJLyogUko6IHJvdXRlLT5pbnB1dCA9IDA6IGlucHV0IGlzIGZyb20gZGVjb2RlcgorCSAgIHJvdXRlLT5pbnB1dCA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAorCSAgIHJvdXRlLT5pbnB1dCA9IDI6IGNvbG9yIGJhciAqLworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0IGZyb20gJXNcbiIsCisJCQlyb3V0ZS0+aW5wdXQgPT0gMCA/ICJkZWNvZGVyIiA6ICJaUjM2MDYwIik7CisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwMSwgMHgyMCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDgsIFRSMUNBUFQpOwkvKiBUUjEgKi8KKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwMiwgMHgwZSk7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyogdWRlbGF5KDEwKTsgKi8KKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDEsIDB4MDApOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA4LCBUUjFQTEFZKTsJLyogVFIxICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MDgpOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qIHVkZWxheSgxMCk7ICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIHJvdXRlLT5pbnB1dCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW3JvdXRlLT5pbnB1dF0pOworCWVuY29kZXItPmlucHV0ID0gcm91dGUtPmlucHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkdjcxNzBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQURWNzE3MCwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JMHhkNCA+PiAxLCAweGQ2ID4+IDEsCS8qIGFkdjcxNzAgSURzICovCi0JMHg1NCA+PiAxLCAweDU2ID4+IDEsCS8qIGFkdjcxNzEgSURzICovCi0JSTJDX0NMSUVOVF9FTkQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYWR2NzE3MF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYWR2NzE3MF9nX2NoaXBfaWRlbnQsCiB9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGFkdjcxNzBfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBhZHY3MTcwX3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gYWR2NzE3MF9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBhZHY3MTcwX29wcyA9IHsKKwkuY29yZSA9ICZhZHY3MTcwX2NvcmVfb3BzLAorCS52aWRlbyA9ICZhZHY3MTcwX3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYWR2NzE3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJaW50IGk7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCkBAIC0zMzcsMjYgKzMwMCwyOSBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE3MCksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmFkdjcxNzBfb3BzKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAllbmNvZGVyLT5pbnB1dCA9IDA7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9OVFNDLCBzaXplb2YoaW5pdF9OVFNDKSk7CisJaSA9IGFkdjcxNzBfd3JpdGVfYmxvY2soc2QsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOwogCWlmIChpID49IDApIHsKLQkJaSA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJaSA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJaSA9IGFkdjcxNzBfcmVhZChjbGllbnQsIDB4MTIpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOworCQlpID0gYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWkgPSBhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJaSA9IGFkdjcxNzBfcmVhZChzZCwgMHgxMik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CiAJfQogCWlmIChpIDwgMCkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBlcnJvciAweCV4XG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZHY3MTcwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fYWR2NzE3MChzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzEsOCArMzM3LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImFkdjcxNzAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAotCS5jb21tYW5kID0gYWR2NzE3MF9jb21tYW5kLAogCS5wcm9iZSA9IGFkdjcxNzBfcHJvYmUsCiAJLnJlbW92ZSA9IGFkdjcxNzBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGFkdjcxNzBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCmluZGV4IDYwMDhlODQuLmZmMTIxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3NS5jCkBAIC0zMCwxNSArMzAsMTkgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisjZGVmaW5lICAgSTJDX0FEVjcxNzUgICAgICAgIDB4ZDQKKyNkZWZpbmUgICBJMkNfQURWNzE3NiAgICAgICAgMHg1NAorCisKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKQEAgLTQ2LDM2ICs1MCwzOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzUgewotCWludCBub3JtOworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwl2NGwyX3N0ZF9pZCBub3JtOwogCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKIH07CiAKLSNkZWZpbmUgICBJMkNfQURWNzE3NSAgICAgICAgMHhkNAotI2RlZmluZSAgIEkyQ19BRFY3MTc2ICAgICAgICAweDU0CitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZHY3MTc1ICp0b19hZHY3MTc1KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkdjcxNzUsIHNkKTsKK30KIAogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAicGFzc190aHJvdWdoIiwgInBsYXlfYmFjayIsICJjb2xvcl9iYXIiIH07Ci1zdGF0aWMgY2hhciAqbm9ybXNbXSA9IHsgIlBBTCIsICJOVFNDIiwgIlNFQ0FNLT5QQUwgKG1heSBub3Qgd29yayEpIiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYWR2NzE3NV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBhZHY3MTc1X3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCSAgICAgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTEwMyw3ICsxMDksNyBAQAogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IGFkdjcxNzVfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJcmV0ID0gYWR2NzE3NV93cml0ZShzZCwgcmVnLCAqZGF0YSsrKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CkBAIC0xMTMsMTggKzExOSwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdWJjYXJyaWVyX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHBhc3NfdGhyb3VnaCkKK3N0YXRpYyB2b2lkIHNldF9zdWJjYXJyaWVyX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHBhc3NfdGhyb3VnaCkKIHsKIAkvKiBmb3Igc29tZSByZWFzb24gcGFzc190aHJvdWdoIE5UU0MgbmVlZHMKIAkgKiBhIGRpZmZlcmVudCBzdWItY2FycmllciBmcmVxIHRvIHJlbWFpbiBzdGFibGUuICovCiAJaWYgKHBhc3NfdGhyb3VnaCkKLQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDIsIDB4MDApOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAyLCAweDAwKTsKIAllbHNlCi0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAyLCAweDU1KTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMiwgMHg1NSk7CiAKLQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMywgMHg1NSk7Ci0JYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDQsIDB4NTUpOwotCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA1LCAweDI1KTsKKwlhZHY3MTc1X3dyaXRlKHNkLCAweDAzLCAweDU1KTsKKwlhZHY3MTc1X3dyaXRlKHNkLCAweDA0LCAweDU1KTsKKwlhZHY3MTc1X3dyaXRlKHNkLCAweDA1LCAweDI1KTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE4NCwxODAgKzE5MCwxNDQgQEAKIAkweDA2LCAweDFhLAkJLyogc3ViYy4gcGhhc2UgKi8KIH07CiAKLXN0YXRpYyBpbnQgYWR2NzE3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBhZHY3MTc1X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKLQlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLworCWFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwlyZXR1cm4gMDsKK30KIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAotCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKLQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCWJyZWFrOworc3RhdGljIGludCBhZHY3MTc1X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSB0b19hZHY3MTc1KHNkKTsKIAotCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19FTkNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfU0VDQU07IC8qIHdlbGwsIGhhY2t5ICovCi0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJc3dpdGNoIChpYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKLQkJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDRmKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDRmKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToJLy8gV0FSTklORyEgQURWNzE3NiBkb2VzIG5vdCBzdXBwb3J0IFNFQ0FNLgotCQkJLyogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNvbnZlcnQKLQkJCSAqIFNFQ0FNLT5QQUwgKHR5cGljYWxseSBpdCBkb2VzIG5vdCB3b3JrCi0JCQkgKiBkdWUgdG8gZ2VubG9jazogd2hlbiBkZWNvZGVyIGlzIGluIFNFQ0FNCi0JCQkgKiBhbmQgZW5jb2RlciBpbiBpbiBQQUwgdGhlIHN1YmNhcnJpZXIgY2FuCi0JCQkgKiBub3QgYmUgc3luY3Jvbml6ZWQgd2l0aCBob3Jpem9udGFsCi0JCQkgKiBxdWVuY3kpICovCi0JCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsJLy8gRGlzYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgbm9ybTogJWRcbiIsIGlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIG5vcm1zW2lhcmddKTsKLQkJZW5jb2Rlci0+bm9ybSA9IGlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgaWFyZyA9ICooaW50ICopIGFyZzsKLQotCQkvKiBSSjogKmlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIFNBQTcxMTAKLQkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwCi0JCSAqaWFyZyA9IDI6IGNvbG9yIGJhciAqLwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIDA6Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHgwMCk7Ci0KLQkJCWlmIChlbmNvZGVyLT5ub3JtID09IFZJREVPX01PREVfTlRTQykKLQkJCQlzZXRfc3ViY2Fycmllcl9mcmVxKGNsaWVudCwgMSk7Ci0KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBjLCBUUjFDQVBUKTsJLyogVFIxICovCi0JCQlpZiAoZW5jb2Rlci0+bm9ybSA9PSBWSURFT19NT0RFX1NFQ0FNKQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsJLy8gRGlzYWJsZSBnZW5sb2NrCi0JCQllbHNlCi0JCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NGYpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLy91ZGVsYXkoMTApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOgotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDApOwotCi0JCQlpZiAoZW5jb2Rlci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MpCi0JCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShjbGllbnQsIDApOwotCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwYywgVFIxUExBWSk7CS8qIFRSMSAqLwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLyogdWRlbGF5KDEwKTsgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgMjoKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAxLCAweDgwKTsKLQotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDKQotCQkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoY2xpZW50LCAwKTsKLQotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGQsIDB4NDkpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLyogdWRlbGF5KDEwKTsgKi8KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW2lhcmddKTsKLQkJZW5jb2Rlci0+aW5wdXQgPSBpYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgorCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCWFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NGYpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJYWR2NzE3NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NGYpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkvKiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29udmVydAorCQkgKiBTRUNBTS0+UEFMICh0eXBpY2FsbHkgaXQgZG9lcyBub3Qgd29yaworCQkgKiBkdWUgdG8gZ2VubG9jazogd2hlbiBkZWNvZGVyIGlzIGluIFNFQ0FNCisJCSAqIGFuZCBlbmNvZGVyIGluIGluIFBBTCB0aGUgc3ViY2FycmllciBjYW4KKwkJICogbm90IGJlIHN5bmNyb25pemVkIHdpdGggaG9yaXpvbnRhbAorCQkgKiBxdWVuY3kpICovCisJCWFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsJLyogRGlzYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwl9IGVsc2UgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbGxlZ2FsIG5vcm06ICVsbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhZHY3MTc1X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlciA9IHRvX2FkdjcxNzUoc2QpOworCisJLyogUko6IHJvdXRlLT5pbnB1dCA9IDA6IGlucHV0IGlzIGZyb20gZGVjb2RlcgorCSAgIHJvdXRlLT5pbnB1dCA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAorCSAgIHJvdXRlLT5pbnB1dCA9IDI6IGNvbG9yIGJhciAqLworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDEsIDB4MDApOworCisJCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoc2QsIDEpOworCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGMsIFRSMUNBUFQpOwkvKiBUUjEgKi8KKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9TRUNBTSkKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NDkpOwkvKiBEaXNhYmxlIGdlbmxvY2sgKi8KKwkJZWxzZQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0Zik7CS8qIEVuYWJsZSBnZW5sb2NrICovCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyp1ZGVsYXkoMTApOyovCisJCWJyZWFrOworCisJY2FzZSAxOgorCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAxLCAweDAwKTsKKworCQlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlzZXRfc3ViY2Fycmllcl9mcmVxKHNkLCAwKTsKKworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBjLCBUUjFQTEFZKTsJLyogVFIxICovCisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NDkpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qIHVkZWxheSgxMCk7ICovCisJCWJyZWFrOworCisJY2FzZSAyOgorCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAxLCAweDgwKTsKKworCQlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlzZXRfc3ViY2Fycmllcl9mcmVxKHNkLCAwKTsKKworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tyb3V0ZS0+aW5wdXRdKTsKKwllbmNvZGVyLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTc1X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0FEVjcxNzUsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfQURWNzE3NSA+PiAxLCAoSTJDX0FEVjcxNzUgPj4gMSkgKyAxLAotCUkyQ19BRFY3MTc2ID4+IDEsIChJMkNfQURWNzE3NiA+PiAxKSArIDEsCi0JSTJDX0NMSUVOVF9FTkQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYWR2NzE3NV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYWR2NzE3NV9nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBhZHY3MTc1X2luaXQsCiB9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGFkdjcxNzVfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBhZHY3MTc1X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gYWR2NzE3NV9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBhZHY3MTc1X29wcyA9IHsKKwkuY29yZSA9ICZhZHY3MTc1X2NvcmVfb3BzLAorCS52aWRlbyA9ICZhZHY3MTc1X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYWR2NzE3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwogCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC0zNjksMjYgKzMzOSwyOSBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR2NzE3NSksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYWR2NzE3NV9vcHMpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOwogCWVuY29kZXItPmlucHV0ID0gMDsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOwogCi0JaSA9IGFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJaSA9IGFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWkgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCWkgPSBhZHY3MTc1X3JlYWQoY2xpZW50LCAweDEyKTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKKwkJaSA9IGFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlpID0gYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCWkgPSBhZHY3MTc1X3JlYWQoc2QsIDB4MTIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWR2NzE3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2FkdjcxNzUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDAzLDggKzM3Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJhZHY3MTc1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKLQkuY29tbWFuZCA9IGFkdjcxNzVfY29tbWFuZCwKIAkucHJvYmUgPSBhZHY3MTc1X3Byb2JlLAogCS5yZW1vdmUgPSBhZHY3MTc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBhZHY3MTc1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcKaW5kZXggMDE4ZjcyYi4uMDVjZGY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9LY29uZmlnCkBAIC0xLDEzICsxLDEzIEBACiAKIGNvbmZpZyBWSURFT19BVTA4MjgKIAl0cmlzdGF0ZSAiQXV2aXRlayBBVTA4Mjggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVCAmJiBEVkJfQ09SRSAmJiBVU0IKKwlkZXBlbmRzIG9uIEkyQyAmJiBJTlBVVCAmJiBEVkJfQ09SRSAmJiBVU0IgJiYgVklERU9fVjRMMgogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCXNlbGVjdCBEVkJfQVU4NTIyIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfQVU4NTIyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDdUIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIEF1dml0ZWsncyBVU0IgZGV2aWNlLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCmluZGV4IGNkMmM1ODIuLjRkMjYyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotYXUwODI4LW9ianMJOj0gYXUwODI4LWNvcmUubyBhdTA4MjgtaTJjLm8gYXUwODI4LWNhcmRzLm8gYXUwODI4LWR2Yi5vCithdTA4Mjgtb2Jqcwk6PSBhdTA4MjgtY29yZS5vIGF1MDgyOC1pMmMubyBhdTA4MjgtY2FyZHMubyBhdTA4MjgtZHZiLm8gYXUwODI4LXZpZGVvLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0FVMDgyOCkgKz0gYXUwODI4Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwppbmRleCBkNjAxMjNiLi4xYWFiYWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY2FyZHMuYwpAQCAtMjEsMjUgKzIxLDg5IEBACiAKICNpbmNsdWRlICJhdTA4MjguaCIKICNpbmNsdWRlICJhdTA4MjgtY2FyZHMuaCIKKyNpbmNsdWRlICJhdTg1MjIuaCIKKyNpbmNsdWRlICJtZWRpYS90dW5lci5oIgorI2luY2x1ZGUgIm1lZGlhL3Y0bDItY29tbW9uLmgiCisKK3ZvaWQgaHZyOTUwcV9jczUzNDBfYXVkaW8odm9pZCAqcHJpdiwgaW50IGVuYWJsZSkKK3sKKwkvKiBCZWNhdXNlIHRoZSBIVlItOTUwcSBzaGFyZXMgYW4gaTJzIGJ1cyBiZXR3ZWVuIHRoZSBjczUzNDAgYW5kIHRoZQorCSAgIGF1ODUyMiwgd2UgbmVlZCB0byBob2xkIGNzNTM0MCBpbiByZXNldCB3aGVuIHVzaW5nIHRoZSBhdTg1MjIgKi8KKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gcHJpdjsKKwlpZiAoZW5hYmxlID09IDEpCisJCWF1MDgyOF9zZXQoZGV2LCBSRUdfMDAwLCAweDEwKTsKKwllbHNlCisJCWF1MDgyOF9jbGVhcihkZXYsIFJFR18wMDAsIDB4MTApOworfQogCiBzdHJ1Y3QgYXUwODI4X2JvYXJkIGF1MDgyOF9ib2FyZHNbXSA9IHsKIAlbQVUwODI4X0JPQVJEX1VOS05PV05dID0gewogCQkubmFtZQk9ICJVbmtub3duIGJvYXJkIiwKKwkJLnR1bmVyX3R5cGUgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwXSA9IHsKIAkJLm5hbWUJPSAiSGF1cHBhdWdlIEhWUjg1MCIsCisJCS50dW5lcl90eXBlID0gVFVORVJfWEM1MDAwLAorCQkudHVuZXJfYWRkciA9IDB4NjEsCisJCS5pbnB1dCA9IHsKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1RFTEVWSVNJT04sCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fU0lGLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX0NPTVBPU0lURSwKKwkJCQkudm11eCA9IEFVODUyMl9DT01QT1NJVEVfQ0gxLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfU1ZJREVPLAorCQkJCS52bXV4ID0gQVU4NTIyX1NWSURFT19DSDEzLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQl9LAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBIVlI5NTBRIiwKKwkJLnR1bmVyX3R5cGUgPSBUVU5FUl9YQzUwMDAsCisJCS50dW5lcl9hZGRyID0gMHg2MSwKKwkJLmlucHV0ID0geworCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCQkudm11eCA9IEFVODUyMl9DT01QT1NJVEVfQ0g0X1NJRiwKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19TSUYsCisJCQl9LAorCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfQ09NUE9TSVRFLAorCQkJCS52bXV4ID0gQVU4NTIyX0NPTVBPU0lURV9DSDEsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fTk9ORSwKKwkJCQkuYXVkaW9fc2V0dXAgPSBodnI5NTBxX2NzNTM0MF9hdWRpbywKKwkJCX0sCisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9TVklERU8sCisJCQkJLnZtdXggPSBBVTg1MjJfU1ZJREVPX0NIMTMsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fTk9ORSwKKwkJCQkuYXVkaW9fc2V0dXAgPSBodnI5NTBxX2NzNTM0MF9hdWRpbywKKwkJCX0sCisJCX0sCiAJfSwKIAlbQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTF0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBIVlI5NTBRIHJldiB4eEY4IiwKKwkJLnR1bmVyX3R5cGUgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiAJW0FVMDgyOF9CT0FSRF9EVklDT19GVVNJT05IRFRWN10gPSB7CiAJCS5uYW1lCT0gIkRWaUNPIEZ1c2lvbkhEVFYgVVNCIiwKKwkJLnR1bmVyX3R5cGUgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfV09PREJVUlldID0gewogCQkubmFtZSA9ICJIYXVwcGF1Z2UgV29vZGJ1cnkiLAorCQkudHVuZXJfdHlwZSA9IFVOU0VULAorCQkudHVuZXJfYWRkciA9IEFERFJfVU5TRVQsCiAJfSwKIH07CiAKQEAgLTUyLDcgKzExNiw3IEBACiAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMOgpAQCAtODEsMTcgKzE0NSwxOCBAQAogCXN0cnVjdCB0dmVlcHJvbSB0djsKIAogCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmRldi0+aTJjX2NsaWVudCwgJnR2LCBlZXByb21fZGF0YSk7CisJZGV2LT5ib2FyZC50dW5lcl90eXBlID0gdHYudHVuZXJfdHlwZTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBzdXBwb3J0IHRoZSBib2FyZCBtb2RlbCAqLwogCXN3aXRjaCAodHYubW9kZWwpIHsKIAljYXNlIDcyMDAwOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSAqLwotCWNhc2UgNzIwMDE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjExOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjAwMTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyMTE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjIxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjIzMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyNDE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgTm8gSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjUxOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjMwMTogLyogV2luVFYtSFZSODUwIChSZXRhaWwsIElSLCBBVFNDIGFuZCBhbmFsb2cgdmlkZW8gKi8KIAljYXNlIDcyNTAwOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTA3LDE1ICsxNzIsMjEgQEAKIHZvaWQgYXUwODI4X2NhcmRfc2V0dXAoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKIHsKIAlzdGF0aWMgdTggZWVwcm9tWzI1Nl07CisJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCBtb2RlX21hc2sgPSBUX0FOQUxPR19UViB8CisJCQkJIFRfRElHSVRBTF9UVjsKIAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAorCW1lbWNweSgmZGV2LT5ib2FyZCwgJmF1MDgyOF9ib2FyZHNbZGV2LT5ib2FyZG5yXSwgc2l6ZW9mKGRldi0+Ym9hcmQpKTsKKwogCWlmIChkZXYtPmkyY19yYyA9PSAwKSB7CiAJCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOwogCQl0dmVlcHJvbV9yZWFkKCZkZXYtPmkyY19jbGllbnQsIGVlcHJvbSwgc2l6ZW9mKGVlcHJvbSkpOwogCX0KIAotCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MDoKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUToKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV9NWEw6CkBAIC0xMjQsNiArMTk1LDMyIEBACiAJCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZWVwcm9tKzB4YTApOwogCQlicmVhazsKIAl9CisKKwlpZiAoQVVWSV9JTlBVVCgwKS50eXBlICE9IEFVMDgyOF9WTVVYX1VOREVGSU5FRCkgeworCQkvKiBMb2FkIHRoZSBhbmFsb2cgZGVtb2R1bGF0b3IgZHJpdmVyIChub3RlIHRoaXMgd291bGQgbmVlZCB0bworCQkgICBiZSBhYnN0cmFjdGVkIG91dCBpZiB3ZSBldmVyIG5lZWQgdG8gc3VwcG9ydCBhIGRpZmZlcmVudAorCQkgICBkZW1vZCkgKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAiYXU4NTIyIiwgImF1ODUyMiIsCisJCQkJCSAweDhlID4+IDEpOworCQlpZiAoc2QgPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX0VSUiAiYW5hbG9nIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwl9CisKKwkvKiBTZXR1cCB0dW5lcnMgKi8KKwlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkgeworCQkvKiBMb2FkIHRoZSB0dW5lciBtb2R1bGUsIHdoaWNoIGRvZXMgdGhlIGF0dGFjaCAqLworCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCisJCQkJCSBkZXYtPmJvYXJkLnR1bmVyX2FkZHIpOworCQlpZiAoc2QgPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX0VSUiAidHVuZXIgc3ViZGV2IHJlZ2lzdHJhdGlvbiBmYWlsXG4iKTsKKworCQl0dW5fc2V0dXAubW9kZV9tYXNrICAgICAgPSBtb2RlX21hc2s7CisJCXR1bl9zZXR1cC50eXBlICAgICAgICAgICA9IGRldi0+Ym9hcmQudHVuZXJfdHlwZTsKKwkJdHVuX3NldHVwLmFkZHIgICAgICAgICAgID0gZGV2LT5ib2FyZC50dW5lcl9hZGRyOworCQl0dW5fc2V0dXAudHVuZXJfY2FsbGJhY2sgPSBhdTA4MjhfdHVuZXJfY2FsbGJhY2s7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc190eXBlX2FkZHIsCisJCQkJICAgICAmdHVuX3NldHVwKTsKKwl9CiB9CiAKIC8qCkBAIC0xMzUsNyArMjMyLDcgQEAKIHsKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMOgpAQCAtMTQ0LDIxICsyNDEsMjMgQEAKIAkJICogNCAtIENTNTM0MAogCQkgKiA1IC0gQVU4NTIyIERlbW9kdWxhdG9yCiAJCSAqIDYgLSBlZXByb20gVy9QCisJCSAqIDcgLSBwb3dlciBzdXBwbHkKIAkJICogOSAtIFhDNTAwMCBUdW5lcgogCQkgKi8KIAogCQkvKiBJbnRvIHJlc2V0ICovCiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDMsIDB4MDIpOwotCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDg4IHwgMHgyMCk7CisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDIsIDB4ODAgfCAweDIwIHwgMHgxMCk7CiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDEsIDB4MCk7CiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDAsIDB4MCk7CiAJCW1zbGVlcCgxMDApOwogCi0JCS8qIE91dCBvZiByZXNldCAqLworCQkvKiBPdXQgb2YgcmVzZXQgKGxlYXZlIHRoZSBjczUzNDAgaW4gcmVzZXQgdW50aWwgbmVlZGVkKSAqLwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAzLCAweDAyKTsKIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMSwgMHgwMik7Ci0JCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDIsIDB4ODggfCAweDIwKTsKLQkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMCwgMHg4OCB8IDB4MjAgfCAweDQwKTsKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMiwgMHg4MCB8IDB4MjAgfCAweDEwKTsKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMCwgMHg4MCB8IDB4NDAgfCAweDIwKTsKKwogCQltc2xlZXAoMjUwKTsKIAkJYnJlYWs7CiAJY2FzZSBBVTA4MjhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVjc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwppbmRleCA1NzY1ZTg2Li44Yzc2MWQxNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYwpAQCAtMzYsNiArMzYsOCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdTA4MjhfZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7CiAKK3N0YXRpYyBhdG9taWNfdCBhdTA4MjhfaW5zdGFuY2UgPSBBVE9NSUNfSU5JVCgwKTsKKwogI2RlZmluZSBfQVUwODI4X0JVTEtQSVBFIDB4MDMKICNkZWZpbmUgX0JVTEtQSVBFU0laRSAweGZmZmYKIApAQCAtNTEsMTMgKzUzLDEzIEBACiB1MzIgYXUwODI4X3JlYWRyZWcoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgdTE2IHJlZykKIHsKIAlyZWN2X2NvbnRyb2xfbXNnKGRldiwgQ01EX1JFUVVFU1RfSU4sIDAsIHJlZywgZGV2LT5jdHJsbXNnLCAxKTsKLQlkcHJpbnRrKDgsICIlcygweCV4KSA9IDB4JXhcbiIsIF9fZnVuY19fLCByZWcsIGRldi0+Y3RybG1zZ1swXSk7CisJZHByaW50ayg4LCAiJXMoMHglMDR4KSA9IDB4JTAyeFxuIiwgX19mdW5jX18sIHJlZywgZGV2LT5jdHJsbXNnWzBdKTsKIAlyZXR1cm4gZGV2LT5jdHJsbXNnWzBdOwogfQogCiB1MzIgYXUwODI4X3dyaXRlcmVnKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHUxNiByZWcsIHUzMiB2YWwpCiB7Ci0JZHByaW50ayg4LCAiJXMoMHgleCwgMHgleClcbiIsIF9fZnVuY19fLCByZWcsIHZhbCk7CisJZHByaW50ayg4LCAiJXMoMHglMDR4LCAweCUwMngpXG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOwogCXJldHVybiBzZW5kX2NvbnRyb2xfbXNnKGRldiwgQ01EX1JFUVVFU1RfT1VULCB2YWwsIHJlZywKIAkJCQlkZXYtPmN0cmxtc2csIDApOwogfQpAQCAtMTQ2LDkgKzE0OCwxNCBAQAogCS8qIERpZ2l0YWwgVFYgKi8KIAlhdTA4MjhfZHZiX3VucmVnaXN0ZXIoZGV2KTsKIAorCWlmIChBVVZJX0lOUFVUKDApLnR5cGUgIT0gQVUwODI4X1ZNVVhfVU5ERUZJTkVEKQorCQlhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoZGV2KTsKKwogCS8qIEkyQyAqLwogCWF1MDgyOF9pMmNfdW5yZWdpc3RlcihkZXYpOwogCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKQEAgLTE2Miw3ICsxNjksNyBAQAogc3RhdGljIGludCBhdTA4MjhfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCWludCBpZm51bTsKKwlpbnQgaWZudW0sIHJldHZhbCwgaTsKIAlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAKQEAgLTE4NSwxMCArMTkyLDIyIEBACiAJbXV0ZXhfaW5pdCgmZGV2LT5tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2LT5kdmIubG9jayk7CiAJZGV2LT51c2JkZXYgPSB1c2JkZXY7Ci0JZGV2LT5ib2FyZCA9IGlkLT5kcml2ZXJfaW5mbzsKKwlkZXYtPmJvYXJkbnIgPSBpZC0+ZHJpdmVyX2luZm87CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKIAorCS8qIENyZWF0ZSB0aGUgdjRsMl9kZXZpY2UgKi8KKwlpID0gYXRvbWljX2luY19yZXR1cm4oJmF1MDgyOF9pbnN0YW5jZSkgLSAxOworCXNucHJpbnRmKGRldi0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGRldi0+djRsMl9kZXYubmFtZSksICIlcy0lMDNkIiwKKwkJICJhdTA4MjgiLCBpKTsKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT51c2JkZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHY0bDJfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJa2ZyZWUoZGV2KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJLyogUG93ZXIgVXAgdGhlIGJyaWRnZSAqLwogCWF1MDgyOF93cml0ZShkZXYsIFJFR182MDAsIDEgPDwgNCk7CiAKQEAgLTIwMSwxMiArMjIwLDE1IEBACiAJLyogU2V0dXAgKi8KIAlhdTA4MjhfY2FyZF9zZXR1cChkZXYpOwogCisJLyogQW5hbG9nIFRWICovCisJaWYgKEFVVklfSU5QVVQoMCkudHlwZSAhPSBBVTA4MjhfVk1VWF9VTkRFRklORUQpCisJCWF1MDgyOF9hbmFsb2dfcmVnaXN0ZXIoZGV2LCBpbnRlcmZhY2UpOworCiAJLyogRGlnaXRhbCBUViAqLwogCWF1MDgyOF9kdmJfcmVnaXN0ZXIoZGV2KTsKIAogCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyZWQgZGV2aWNlIEFVMDgyOCBbJXNdXG4iLAotCQlhdTA4MjhfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUgPT0gTlVMTCA/ICJVbnNldCIgOgotCQlhdTA4MjhfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOworCQlkZXYtPmJvYXJkLm5hbWUgPT0gTlVMTCA/ICJVbnNldCIgOiBkZXYtPmJvYXJkLm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKaW5kZXggYTg4MmNmNS4uMTRiYWZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJLyogaW5pdCBmcm9udGVuZCAqLwotCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCXN3aXRjaCAoZGV2LT5ib2FyZG5yKSB7CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MDoKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUToKIAkJZHZiLT5mcm9udGVuZCA9IGR2Yl9hdHRhY2goYXU4NTIyX2F0dGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYwppbmRleCBkNjE4ZmJhLi5mOWE5NThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jCkBAIC0xNDAsMTMgKzE0MCwzOSBAQAogCWRwcmludGsoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yRkYsIDB4MDEpOwotCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOworCisJLyogRklYTUU6IFRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGkyYyBjb21tdW5pY2F0aW9ucyB3aXRoIHhjNTAwMCB0aGF0CisJICAgcmVxdWlyZXMgdXMgdG8gc2xvdyBkb3duIHRoZSBpMmMgY2xvY2sgdW50aWwgd2UgaGF2ZSBhIGJldHRlcgorCSAgIHN0cmF0ZWd5IChzdWNoIGFzIHVzaW5nIHRoZSBzZWNvbmRhcnkgaTJjIGJ1cyB0byBkbyBmaXJtd2FyZQorCSAgIGxvYWRpbmcgKi8KKwlpZiAoKG1zZy0+YWRkciA8PCAxKSA9PSAweGMyKQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDQwKTsKKwllbHNlCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOwogCiAJLyogSGFyZHdhcmUgbmVlZHMgOCBiaXQgYWRkcmVzc2VzICovCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMywgbXNnLT5hZGRyIDw8IDEpOwogCiAJZHByaW50ayg0LCAiU0VORDogJTAyeFxuIiwgbXNnLT5hZGRyKTsKIAorCS8qIERlYWwgd2l0aCBpMmNfc2NhbiAqLworCWlmIChtc2ctPmxlbiA9PSAwKSB7CisJCS8qIFRoZSBhbmFsb2cgdHVuZXIgZGV0ZWN0aW9uIGNvZGUgbWFrZXMgdXNlIG9mIHRoZSBTTUJVU19RVUlDSworCQkgICBtZXNzYWdlICh3aGljaCBpbnZvbHZlcyBhIHplcm8gbGVuZ3RoIGkyYyB3cml0ZSkuICBUbyBhdm9pZAorCQkgICBjaGVja2luZyB0aGUgc3RhdHVzIHJlZ2lzdGVyIHdoZW4gd2UgZGlkbid0IHN0cm9iZSBvdXQgYW55CisJCSAgIGFjdHVhbCBieXRlcyB0byB0aGUgYnVzLCBqdXN0IGRvIGEgcmVhZCBjaGVjay4gIFRoaXMgaXMKKwkJICAgY29uc2lzdGVudCB3aXRoIGhvdyBJIHNhdyBpMmMgZGV2aWNlIGNoZWNraW5nIGRvbmUgaW4gdGhlCisJCSAgIFVTQiB0cmFjZSBvZiB0aGUgV2luZG93cyBkcml2ZXIgKi8KKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMCwgMHgyMCk7CisJCWlmICghaTJjX3dhaXRfZG9uZShpMmNfYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoaTJjX3dhaXRfcmVhZF9hY2soaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJcmV0dXJuIDA7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IG1zZy0+bGVuOykgewogCiAJCWRwcmludGsoNCwgIiAlMDJ4XG4iLCBtc2ctPmJ1ZltpXSk7CkBAIC0xOTEsNyArMjE3LDE1IEBACiAJZHByaW50ayg0LCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzJGRiwgMHgwMSk7Ci0JYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHgwNyk7CisKKwkvKiBGSVhNRTogVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggaTJjIGNvbW11bmljYXRpb25zIHdpdGggeGM1MDAwIHRoYXQKKwkgICByZXF1aXJlcyB1cyB0byBzbG93IGRvd24gdGhlIGkyYyBjbG9jayB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyCisJICAgc3RyYXRlZ3kgKHN1Y2ggYXMgdXNpbmcgdGhlIHNlY29uZGFyeSBpMmMgYnVzIHRvIGRvIGZpcm13YXJlCisJICAgbG9hZGluZyAqLworCWlmICgobXNnLT5hZGRyIDw8IDEpID09IDB4YzIpCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4NDApOworCWVsc2UKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHgwNyk7CiAKIAkvKiBIYXJkd2FyZSBuZWVkcyA4IGJpdCBhZGRyZXNzZXMgKi8KIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAzLCBtc2ctPmFkZHIgPDwgMSk7CkBAIC0yNjUsMzMgKzI5OSw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JZHByaW50aygxLCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCi0JCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwotCi0JaWYgKCFjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JZHByaW50aygxLCAiaTJjIGRldGFjaCBbY2xpZW50PSVzXVxuIiwgY2xpZW50LT5uYW1lKTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGF1MDgyOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGRldi0+aTJjX3JjICE9IDApCi0JCXJldHVybjsKLQotCWkyY19jbGllbnRzX2NvbW1hbmQoJmRldi0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQogc3RhdGljIHUzMiBhdTA4MjhfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7CiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfCBJMkNfRlVOQ19JMkM7CkBAIC0zMDksOSArMzE2LDYgQEAKIAkub3duZXIgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKIAkuaWQgICAgICAgICAgICAgICAgPSBJMkNfSFdfQl9BVTA4MjgsCiAJLmFsZ28gICAgICAgICAgICAgID0gJmF1MDgyOF9pMmNfYWxnb190ZW1wbGF0ZSwKLQkuY2xhc3MgICAgICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBhdTA4MjhfaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKQEAgLTM1Niw5ICszNjAsOSBAQAogCXN0cmxjcHkoZGV2LT5pMmNfYWRhcC5uYW1lLCBEUklWRVJfTkFNRSwKIAkJc2l6ZW9mKGRldi0+aTJjX2FkYXAubmFtZSkpOwogCi0JZGV2LT5pMmNfYWxnby5kYXRhID0gZGV2OworCWRldi0+aTJjX2FkYXAuYWxnbyA9ICZkZXYtPmkyY19hbGdvOwogCWRldi0+aTJjX2FkYXAuYWxnb19kYXRhID0gZGV2OwotCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsIGRldik7CisJaTJjX3NldF9hZGFwZGF0YSgmZGV2LT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKIAlkZXYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZkZXYtPmkyY19hZGFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXJlZy5oCmluZGV4IDFlODdmYTBjNi4uYjE1ZTRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaApAQCAtMjcsNiArMjcsOSBAQAogI2RlZmluZSBSRUdfMDAyIDB4MDAyCiAjZGVmaW5lIFJFR18wMDMgMHgwMDMKIAorI2RlZmluZSBBVTA4MjhfU0VOU09SQ1RSTF8xMDAgMHgxMDAKKyNkZWZpbmUgQVUwODI4X1NFTlNPUkNUUkxfVkJJXzEwMyAweDEwMworCiAjZGVmaW5lIFJFR18yMDAgMHgyMDAKICNkZWZpbmUgUkVHXzIwMSAweDIwMQogI2RlZmluZSBSRUdfMjAyIDB4MjAyCkBAIC0zNSw0ICszOCw3IEBACiAjZGVmaW5lIFJFR18yMDkgMHgyMDkKICNkZWZpbmUgUkVHXzJGRiAweDJmZgogCisvKiBBdWRpbyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVUwODI4X0FVRElPQ1RSTF81MEMgMHg1MEMKKwogI2RlZmluZSBSRUdfNjAwIDB4NjAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC12aWRlby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YWQ0OTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYwpAQCAtMCwwICsxLDE3MTIgQEAKKy8qCisgKiBBdXZpdGVrIEFVMDgyOCBVU0IgQnJpZGdlIChBbmFsb2cgdmlkZW8gc3VwcG9ydCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IEF1dml0ZWsgSW50ZXJuYXRpb25hbCwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBBcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBEZXZlbG9wZXIgTm90ZXM6CisgKgorICogVkJJIHN1cHBvcnQgaXMgbm90IHlldCB3b3JraW5nCisgKiBUaGUgaGFyZHdhcmUgc2NhbGVyIHN1cHBvcnRlZCBpcyB1bmltcGxlbWVudGVkCisgKiBBQzk3IGF1ZGlvIHN1cHBvcnQgaXMgdW5pbXBsZW1lbnRlZCAob25seSBpMnMgYXVkaW8gbW9kZSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CisjaW5jbHVkZSAiYXUwODI4LmgiCisjaW5jbHVkZSAiYXUwODI4LXJlZy5oIgorCitzdGF0aWMgTElTVF9IRUFEKGF1MDgyOF9kZXZsaXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYXUwODI4X3N5c2ZzX2xvY2spOworCisjZGVmaW5lIEFVMDgyOF9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVmlkZW9idWYgb3BlcmF0aW9ucworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBpc29jX2RlYnVnOworbW9kdWxlX3BhcmFtKGlzb2NfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlzb2NfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2lzb2MgdHJhbnNmZXJzXSIpOworCisjZGVmaW5lIGF1MDgyOF9pc29jZGJnKGZtdCwgYXJnLi4uKSBcCitkbyB7XAorCWlmIChpc29jX2RlYnVnKSB7IFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXUwODI4ICVzIDoiZm10LCBcCisJCSAgICAgICBfX2Z1bmNfXyAsICMjYXJnKTsJICAgXAorCX0gXAorICB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfZXJyX3N0YXR1cyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJCSAgICBpbnQgcGFja2V0LCBpbnQgc3RhdHVzKQoreworCWNoYXIgKmVycm1zZyA9ICJVbmtub3duIjsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtRU5PRU5UOgorCQllcnJtc2cgPSAidW5saW5rZWQgc3luY2hyb251b3VzbHkiOworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCQllcnJtc2cgPSAidW5saW5rZWQgYXN5bmNocm9udW91c2x5IjsKKwkJYnJlYWs7CisJY2FzZSAtRU5PU1I6CisJCWVycm1zZyA9ICJCdWZmZXIgZXJyb3IgKG92ZXJydW4pIjsKKwkJYnJlYWs7CisJY2FzZSAtRVBJUEU6CisJCWVycm1zZyA9ICJTdGFsbGVkIChkZXZpY2Ugbm90IHJlc3BvbmRpbmcpIjsKKwkJYnJlYWs7CisJY2FzZSAtRU9WRVJGTE9XOgorCQllcnJtc2cgPSAiQmFiYmxlIChiYWQgY2FibGU/KSI7CisJCWJyZWFrOworCWNhc2UgLUVQUk9UTzoKKwkJZXJybXNnID0gIkJpdC1zdHVmZiBlcnJvciAoYmFkIGNhYmxlPykiOworCQlicmVhazsKKwljYXNlIC1FSUxTRVE6CisJCWVycm1zZyA9ICJDUkMvVGltZW91dCAoY291bGQgYmUgYW55dGhpbmcpIjsKKwkJYnJlYWs7CisJY2FzZSAtRVRJTUU6CisJCWVycm1zZyA9ICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCI7CisJCWJyZWFrOworCX0KKwlpZiAocGFja2V0IDwgMCkgeworCQlhdTA4MjhfaXNvY2RiZygiVVJCIHN0YXR1cyAlZCBbJXNdLlxuIiwJc3RhdHVzLCBlcnJtc2cpOworCX0gZWxzZSB7CisJCWF1MDgyOF9pc29jZGJnKCJVUkIgcGFja2V0ICVkLCBzdGF0dXMgJWQgWyVzXS5cbiIsCisJCQkgICAgICAgcGFja2V0LCBzdGF0dXMsIGVycm1zZyk7CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrX2RldihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWlmIChkZXYtPmRldl9zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidjRsMiBpb2N0bDogZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRldi0+ZGV2X3N0YXRlICYgREVWX01JU0NPTkZJR1VSRUQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidjRsMiBpb2N0bDogZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQ7ICIKKwkJICAgICAgICJjbG9zZSBhbmQgb3BlbiBpdCBhZ2FpblxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElSUSBjYWxsYmFjaywgY2FsbGVkIGJ5IFVSQiBjYWxsYmFjaworICovCitzdGF0aWMgdm9pZCBhdTA4MjhfaXJxX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGF1MDgyOF9kZXYsIHZpZHEpOworCWludCByYywgaTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6ICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKwljYXNlIC1FVElNRURPVVQ6ICAgIC8qIE5BSyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlhdTA4MjhfaXNvY2RiZygiYXUwODI4X2lycV9jYWxsYmFjayBjYWxsZWQ6IHN0YXR1cyBraWxsXG4iKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6ICAgICAgICAgICAgLyogdW5rbm93biBlcnJvciAqLworCQlhdTA4MjhfaXNvY2RiZygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJLyogQ29weSBkYXRhIGZyb20gVVJCICovCisJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKKwlyYyA9IGRldi0+aXNvY19jdGwuaXNvY19jb3B5KGRldiwgdXJiKTsKKwlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisKKwkvKiBSZXNldCB1cmIgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAwOworCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPSAwOworCX0KKwl1cmItPnN0YXR1cyA9IDA7CisKKwl1cmItPnN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWF1MDgyOF9pc29jZGJnKCJ1cmIgcmVzdWJtaXQgZmFpbGVkIChlcnJvcj0laSlcbiIsCisJCQkgICAgICAgdXJiLT5zdGF0dXMpOworCX0KK30KKworLyoKKyAqIFN0b3AgYW5kIERlYWxsb2NhdGUgVVJCcworICovCit2b2lkIGF1MDgyOF91bmluaXRfaXNvYyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgaTsKKworCWF1MDgyOF9pc29jZGJnKCJhdTA4Mjg6IGNhbGxlZCBhdTA4MjhfdW5pbml0X2lzb2NcbiIpOworCisJZGV2LT5pc29jX2N0bC5uZmllbGRzID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRldi0+aXNvY19jdGwubnVtX2J1ZnM7IGkrKykgeworCQl1cmIgPSBkZXYtPmlzb2NfY3RsLnVyYltpXTsKKwkJaWYgKHVyYikgeworCQkJaWYgKCFpcnFzX2Rpc2FibGVkKCkpCisJCQkJdXNiX2tpbGxfdXJiKHVyYik7CisJCQllbHNlCisJCQkJdXNiX3VubGlua191cmIodXJiKTsKKworCQkJaWYgKGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldKSB7CisJCQkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dXNiZGV2LAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldLAorCQkJCQl1cmItPnRyYW5zZmVyX2RtYSk7CisJCQl9CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCWRldi0+aXNvY19jdGwudXJiW2ldID0gTlVMTDsKKwkJfQorCQlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSA9IE5VTEw7CisJfQorCisJa2ZyZWUoZGV2LT5pc29jX2N0bC51cmIpOworCWtmcmVlKGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyKTsKKworCWRldi0+aXNvY19jdGwudXJiID0gTlVMTDsKKwlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlciA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC5udW1fYnVmcyA9IDA7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBVUkJzIGFuZCBzdGFydCBJUlEKKyAqLworaW50IGF1MDgyOF9pbml0X2lzb2Moc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgaW50IG1heF9wYWNrZXRzLAorCQkgICAgIGludCBudW1fYnVmcywgaW50IG1heF9wa3Rfc2l6ZSwKKwkJICAgICBpbnQgKCppc29jX2NvcHkpIChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpKQoreworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgKmRtYV9xID0gJmRldi0+dmlkcTsKKwlpbnQgaTsKKwlpbnQgc2Jfc2l6ZSwgcGlwZTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGosIGs7CisJaW50IHJjOworCisJYXUwODI4X2lzb2NkYmcoImF1MDgyODogY2FsbGVkIGF1MDgyOF9wcmVwYXJlX2lzb2NcbiIpOworCisJLyogRGUtYWxsb2NhdGVzIGFsbCBwZW5kaW5nIHN0dWZmICovCisJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisKKwlkZXYtPmlzb2NfY3RsLmlzb2NfY29weSA9IGlzb2NfY29weTsKKwlkZXYtPmlzb2NfY3RsLm51bV9idWZzID0gbnVtX2J1ZnM7CisKKwlkZXYtPmlzb2NfY3RsLnVyYiA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbnVtX2J1ZnMsICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aXNvY19jdGwudXJiKSB7CisJCWF1MDgyOF9pc29jZGJnKCJjYW5ub3QgYWxsb2MgbWVtb3J5IGZvciB1c2IgYnVmZmVyc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpudW1fYnVmcywKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcikgeworCQlhdTA4MjhfaXNvY2RiZygiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdXNiIHRyYW5zZmVyXG4iKTsKKwkJa2ZyZWUoZGV2LT5pc29jX2N0bC51cmIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZSA9IG1heF9wa3Rfc2l6ZTsKKwlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisKKwlzYl9zaXplID0gbWF4X3BhY2tldHMgKiBkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZTsKKworCS8qIGFsbG9jYXRlIHVyYnMgYW5kIHRyYW5zZmVyIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pc29jX2N0bC5udW1fYnVmczsgaSsrKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIobWF4X3BhY2tldHMsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJYXUwODI4X2lzb2NkYmcoImNhbm5vdCBhbGxvYyBpc29jX2N0bC51cmIgJWlcbiIsIGkpOworCQkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlkZXYtPmlzb2NfY3RsLnVyYltpXSA9IHVyYjsKKworCQlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51c2JkZXYsCisJCQlzYl9zaXplLCBHRlBfS0VSTkVMLCAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIWRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldKSB7CisJCQlwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSAlaSBieXRlcyBmb3IgdHJhbnNmZXIiCisJCQkJCSIgYnVmZmVyICVpJXNcbiIsCisJCQkJCXNiX3NpemUsIGksCisJCQkJCWluX2ludGVycnVwdCgpID8gIiB3aGlsZSBpbiBpbnQiIDogIiIpOworCQkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0sIDAsIHNiX3NpemUpOworCisJCXBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LT51c2JkZXYsCisJCQkJICAgICAgIGRldi0+aXNvY19pbl9lbmRwb2ludGFkZHIpLAorCisJCXVzYl9maWxsX2ludF91cmIodXJiLCBkZXYtPnVzYmRldiwgcGlwZSwKKwkJCQkgZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0sIHNiX3NpemUsCisJCQkJIGF1MDgyOF9pcnFfY2FsbGJhY2ssIGRtYV9xLCAxKTsKKworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbWF4X3BhY2tldHM7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCQlrID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IG1heF9wYWNrZXRzOyBqKyspIHsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gazsKKwkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0KKwkJCQkJCWRldi0+aXNvY19jdGwubWF4X3BrdF9zaXplOworCQkJayArPSBkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZTsKKwkJfQorCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYV9xLT53cSk7CisKKwkvKiBzdWJtaXQgdXJicyBhbmQgZW5hYmxlcyBJUlEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pc29jX2N0bC5udW1fYnVmczsgaSsrKSB7CisJCXJjID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pc29jX2N0bC51cmJbaV0sIEdGUF9BVE9NSUMpOworCQlpZiAocmMpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJzdWJtaXQgb2YgdXJiICVpIGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkJCSAgICAgICBpLCByYyk7CisJCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQW5ub3VuY2VzIHRoYXQgYSBidWZmZXIgd2VyZSBmaWxsZWQgYW5kIHJlcXVlc3QgdGhlIG5leHQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9maWxsZWQoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCQkgIHN0cnVjdCBhdTA4MjhfZG1hcXVldWUgKmRtYV9xLAorCQkJCSAgc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZikKK3sKKwkvKiBBZHZpY2UgdGhhdCBidWZmZXIgd2FzIGZpbGxlZCAqLworCWF1MDgyOF9pc29jZGJnKCJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnZiLmkpOworCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJYnVmLT52Yi5maWVsZF9jb3VudCsrOworCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CisKKwlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisKKwlsaXN0X2RlbCgmYnVmLT52Yi5xdWV1ZSk7CisJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKK30KKworLyoKKyAqIElkZW50aWZ5IHRoZSBidWZmZXIgaGVhZGVyIHR5cGUgYW5kIHByb3Blcmx5IGhhbmRsZXMKKyAqLworc3RhdGljIHZvaWQgYXUwODI4X2NvcHlfdmlkZW8oc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICpkbWFfcSwKKwkJCSAgICAgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpwLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqb3V0cCwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJdm9pZCAqZmllbGRzdGFydCwgKnN0YXJ0d3JpdGUsICpzdGFydHJlYWQ7CisJaW50ICBsaW5lc2RvbmUsIGN1cnJsaW5lZG9uZSwgb2Zmc2V0LCBsZW5jb3B5LCByZW1haW47CisJaW50IGJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggPDwgMTsgLyogQXNzdW1lcyAxNi1iaXQgZGVwdGggQEBAQCAqLworCisJaWYgKGRtYV9xLT5wb3MgKyBsZW4gPiBidWYtPnZiLnNpemUpCisJCWxlbiA9IGJ1Zi0+dmIuc2l6ZSAtIGRtYV9xLT5wb3M7CisKKwlzdGFydHJlYWQgPSBwOworCXJlbWFpbiA9IGxlbjsKKworCS8qIEludGVybGFjZXMgZnJhbWUgKi8KKwlpZiAoYnVmLT50b3BfZmllbGQpCisJCWZpZWxkc3RhcnQgPSBvdXRwOworCWVsc2UKKwkJZmllbGRzdGFydCA9IG91dHAgKyBieXRlc3BlcmxpbmU7CisKKwlsaW5lc2RvbmUgPSBkbWFfcS0+cG9zIC8gYnl0ZXNwZXJsaW5lOworCWN1cnJsaW5lZG9uZSA9IGRtYV9xLT5wb3MgJSBieXRlc3BlcmxpbmU7CisJb2Zmc2V0ID0gbGluZXNkb25lICogYnl0ZXNwZXJsaW5lICogMiArIGN1cnJsaW5lZG9uZTsKKwlzdGFydHdyaXRlID0gZmllbGRzdGFydCArIG9mZnNldDsKKwlsZW5jb3B5ID0gYnl0ZXNwZXJsaW5lIC0gY3VycmxpbmVkb25lOworCWxlbmNvcHkgPSBsZW5jb3B5ID4gcmVtYWluID8gcmVtYWluIDogbGVuY29weTsKKworCWlmICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5ID4gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSB7CisJCWF1MDgyOF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgxKVxuIiwKKwkJCSAgICAgICAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSkgLQorCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKKwkJcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplIC0gKGNoYXIgKilzdGFydHdyaXRlOworCQlsZW5jb3B5ID0gcmVtYWluOworCX0KKwlpZiAobGVuY29weSA8PSAwKQorCQlyZXR1cm47CisJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuY29weSk7CisKKwlyZW1haW4gLT0gbGVuY29weTsKKworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCXN0YXJ0d3JpdGUgKz0gbGVuY29weSArIGJ5dGVzcGVybGluZTsKKwkJc3RhcnRyZWFkICs9IGxlbmNvcHk7CisJCWlmIChieXRlc3BlcmxpbmUgPiByZW1haW4pCisJCQlsZW5jb3B5ID0gcmVtYWluOworCQllbHNlCisJCQlsZW5jb3B5ID0gYnl0ZXNwZXJsaW5lOworCisJCWlmICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5ID4gKGNoYXIgKilvdXRwICsKKwkJICAgIGJ1Zi0+dmIuc2l6ZSkgeworCQkJYXUwODI4X2lzb2NkYmcoIk92ZXJmbG93ICV6aSBieXRlcyBwYXN0IGJ1ZiBlbmQgKDIpXG4iLAorCQkJCSAgICAgICAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSkgLQorCQkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSk7CisJCQlsZW5jb3B5ID0gcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplIC0KKwkJCQkJICAgKGNoYXIgKilzdGFydHdyaXRlOworCQl9CisJCWlmIChsZW5jb3B5IDw9IDApCisJCQlicmVhazsKKworCQltZW1jcHkoc3RhcnR3cml0ZSwgc3RhcnRyZWFkLCBsZW5jb3B5KTsKKworCQlyZW1haW4gLT0gbGVuY29weTsKKwl9CisKKwlpZiAob2Zmc2V0ID4gMTQ0MCkgeworCQkvKiBXZSBoYXZlIGVub3VnaCBkYXRhIHRvIGNoZWNrIGZvciBncmVlbnNjcmVlbiAqLworCQlpZiAob3V0cFswXSA8IDB4NjAgJiYgb3V0cFsxNDQwXSA8IDB4NjApCisJCQlkZXYtPmdyZWVuc2NyZWVuX2RldGVjdGVkID0gMTsKKwl9CisKKwlkbWFfcS0+cG9zICs9IGxlbjsKK30KKworLyoKKyAqIHZpZGVvLWJ1ZiBnZW5lcmljIHJvdXRpbmUgdG8gZ2V0IHRoZSBuZXh0IGF2YWlsYWJsZSBidWZmZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9uZXh0X2J1ZihzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqKmJ1ZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gY29udGFpbmVyX29mKGRtYV9xLCBzdHJ1Y3QgYXUwODI4X2RldiwgdmlkcSk7CisKKwlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpIHsKKwkJYXUwODI4X2lzb2NkYmcoIk5vIGFjdGl2ZSBxdWV1ZSB0byBzZXJ2ZVxuIik7CisJCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKKwkJKmJ1ZiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCisJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwgdmIucXVldWUpOworCWRldi0+aXNvY19jdGwuYnVmID0gKmJ1ZjsKKworCXJldHVybjsKK30KKworLyoKKyAqIENvbnRyb2xzIHRoZSBpc29jIGNvcHkgb2YgZWFjaCB1cmIgcGFja2V0CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1MDgyOF9pc29jX2NvcHkoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWY7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OworCXVuc2lnbmVkIGNoYXIgKm91dHAgPSBOVUxMOworCWludCBpLCBsZW4gPSAwLCByYyA9IDE7CisJdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBjaGFyIGZieXRlOworCisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCisJaWYgKChkZXYtPmRldl9zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHx8CisJICAgIChkZXYtPmRldl9zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXJiLT5zdGF0dXMgPCAwKSB7CisJCXByaW50X2Vycl9zdGF0dXMoZGV2LCAtMSwgdXJiLT5zdGF0dXMpOworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkKKwkJCXJldHVybiAwOworCX0KKworCWJ1ZiA9IGRldi0+aXNvY19jdGwuYnVmOworCWlmIChidWYgIT0gTlVMTCkKKwkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpbnQgc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CisKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXByaW50X2Vycl9zdGF0dXMoZGV2LCBpLCBzdGF0dXMpOworCQkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzICE9IC1FUFJPVE8pCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoIDw9IDApCisJCQljb250aW51ZTsKKworCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID4KKwkJCQkJCWRldi0+bWF4X3BrdF9zaXplKSB7CisJCQlhdTA4MjhfaXNvY2RiZygicGFja2V0IGJpZ2dlciB0aGFuIHBhY2tldCBzaXplIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXAgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQlmYnl0ZSA9IHBbMF07CisJCWxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCAtIDQ7CisJCXAgKz0gNDsKKworCQlpZiAoZmJ5dGUgJiAweDgwKSB7CisJCQlsZW4gLT0gNDsKKwkJCXAgKz0gNDsKKwkJCWF1MDgyOF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlc1xuIiwKKwkJCQkgICAgICAgKGZieXRlICYgMHg0MCkgPyAib2RkIiA6ICJldmVuIik7CisJCQlpZiAoIShmYnl0ZSAmIDB4NDApKSB7CisJCQkJaWYgKGJ1ZiAhPSBOVUxMKQorCQkJCQlidWZmZXJfZmlsbGVkKGRldiwgZG1hX3EsIGJ1Zik7CisJCQkJZ2V0X25leHRfYnVmKGRtYV9xLCAmYnVmKTsKKwkJCQlpZiAoYnVmID09IE5VTEwpCisJCQkJCW91dHAgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCQkJfQorCisJCQlpZiAoYnVmICE9IE5VTEwpIHsKKwkJCQlpZiAoZmJ5dGUgJiAweDQwKQorCQkJCQlidWYtPnRvcF9maWVsZCA9IDE7CisJCQkJZWxzZQorCQkJCQlidWYtPnRvcF9maWVsZCA9IDA7CisJCQl9CisKKwkJCWRtYV9xLT5wb3MgPSAwOworCQl9CisJCWlmIChidWYgIT0gTlVMTCkKKwkJCWF1MDgyOF9jb3B5X3ZpZGVvKGRldiwgZG1hX3EsIGJ1ZiwgcCwgb3V0cCwgbGVuKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitidWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJKnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiAxNiArIDcpID4+IDM7CisKKwlpZiAoMCA9PSAqY291bnQpCisJCSpjb3VudCA9IEFVMDgyOF9ERUZfQlVGOworCisJaWYgKCpjb3VudCA8IEFVMDgyOF9NSU5fQlVGKQorCQkqY291bnQgPSBBVTA4MjhfTUlOX0JVRjsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgKndpdGhvdXQqIGRldi0+c2xvY2sgaGVsZDsgcGxlYXNlIGtlZXAgaXQgdGhhdCB3YXkgKi8KK3N0YXRpYyB2b2lkIGZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGF1MDgyOF9maCAgICAgKmZoICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKworCS8qIFdlIHVzZWQgdG8gd2FpdCBmb3IgdGhlIGJ1ZmZlciB0byBmaW5pc2ggaGVyZSwgYnV0IHRoaXMgZGlkbid0IHdvcmsKKwkgICBiZWNhdXNlLCBhcyB3ZSB3ZXJlIGtlZXBpbmcgdGhlIHN0YXRlIGFzIFZJREVPQlVGX1FVRVVFRCwKKwkgICB2aWRlb2J1Zl9xdWV1ZV9jYW5jZWwgbWFya2VkIGl0IGFzIGZpbmlzaGVkIGZvciB1cy4KKwkgICAoQWxzbywgaXQgY291bGQgd2VkZ2UgZm9yZXZlciBpZiB0aGUgaGFyZHdhcmUgd2FzIG1pc2NvbmZpZ3VyZWQuKQorCisJICAgVGhpcyBzaG91bGQgYmUgc2FmZTsgYnkgdGhlIHRpbWUgd2UgZ2V0IGhlcmUsIHRoZSBidWZmZXIgaXNuJ3QKKwkgICBxdWV1ZWQgYW55bW9yZS4gSWYgd2UgZXZlciBzdGFydCBtYXJraW5nIHRoZSBidWZmZXJzIGFzCisJICAgVklERU9CVUZfQUNUSVZFLCBpdCB3b24ndCBiZSwgdGhvdWdoLgorCSovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5pc29jX2N0bC5idWYgPT0gYnVmKQorCQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCisJdmlkZW9idWZfdm1hbGxvY19mcmVlKCZidWYtPnZiKTsKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIGludAorYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCisJCQkJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IGF1MDgyOF9maCAgICAgKmZoICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAgICAqZGV2ID0gZmgtPmRldjsKKwlpbnQgICAgICAgICAgICAgICAgICByYyA9IDAsIHVyYl9pbml0ID0gMDsKKworCWJ1Zi0+dmIuc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIDE2ICsgNykgPj4gMzsKKworCWlmICgwICE9IGJ1Zi0+dmIuYmFkZHIgICYmICBidWYtPnZiLmJzaXplIDwgYnVmLT52Yi5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1Zi0+dmIud2lkdGggID0gZGV2LT53aWR0aDsKKwlidWYtPnZiLmhlaWdodCA9IGRldi0+aGVpZ2h0OworCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQ7CisKKwlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7CisJCXJjID0gdmlkZW9idWZfaW9sb2NrKHZxLCAmYnVmLT52YiwgTlVMTCk7CisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gInZpZGVvYnVmX2lvbG9jayBmYWlsZWRcbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJaWYgKCFkZXYtPmlzb2NfY3RsLm51bV9idWZzKQorCQl1cmJfaW5pdCA9IDE7CisKKwlpZiAodXJiX2luaXQpIHsKKwkJcmMgPSBhdTA4MjhfaW5pdF9pc29jKGRldiwgQVUwODI4X0lTT19QQUNLRVRTX1BFUl9VUkIsCisJCQkJICAgICAgQVUwODI4X01BWF9JU09fQlVGUywgZGV2LT5tYXhfcGt0X3NpemUsCisJCQkJICAgICAgYXUwODI4X2lzb2NfY29weSk7CisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImF1MDgyOF9pbml0X2lzb2MgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkCitidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAgKmJ1ZiAgICAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkJc3RydWN0IGF1MDgyOF9idWZmZXIsCisJCQkJCQkJdmIpOworCXN0cnVjdCBhdTA4MjhfZmggICAgICAgICpmaCAgICAgID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAgICAgICAqZGV2ICAgICA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKnZpZHEgICAgPSAmZGV2LT52aWRxOworCisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwlsaXN0X2FkZF90YWlsKCZidWYtPnZiLnF1ZXVlLCAmdmlkcS0+YWN0aXZlKTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICpidWYgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJICAgIHN0cnVjdCBhdTA4MjhfYnVmZmVyLAorCQkJCQkJICAgIHZiKTsKKworCWZyZWVfYnVmZmVyKHZxLCBidWYpOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBhdTA4MjhfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwICAgICAgPSBidWZmZXJfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICAgID0gYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZSAgICAgID0gYnVmZmVyX3F1ZXVlLAorCS5idWZfcmVsZWFzZSAgICA9IGJ1ZmZlcl9yZWxlYXNlLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBWNEwyIGludGVyZmFjZQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBhdTA4MjhfaTJzX2luaXQoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwkvKiBFbmFibGUgaTJzIG1vZGUgKi8KKwlhdTA4Mjhfd3JpdGVyZWcoZGV2LCBBVTA4MjhfQVVESU9DVFJMXzUwQywgMHgwMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBdXZpdGVrIGF1MDgyOCBhbmFsb2cgc3RyZWFtIGVuYWJsZQorICogUGxlYXNlIHNldCBpbnRlcmZhY2UwIHRvIEFTNSBiZWZvcmUgZW5hYmxlIHRoZSBzdHJlYW0KKyAqLworaW50IGF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShzdHJ1Y3QgYXUwODI4X2RldiAqZCkKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUgY2FsbGVkXG4iKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgQVUwODI4X1NFTlNPUkNUUkxfVkJJXzEwMywgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTA2LCAweDAwKTsKKwkvKiBzZXQgeCBwb3NpdGlvbiAqLworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMCwgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTExLCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTQsIDB4YTApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExNSwgMHgwNSk7CisJLyogc2V0IHkgcG9zaXRpb24gKi8KKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTIsIDB4MDIpOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMywgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE2LCAweGYyKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTcsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCBBVTA4MjhfU0VOU09SQ1RSTF8xMDAsIDB4YjMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCBhdTA4MjhfZGV2ICpkKQoreworCWRwcmludGsoMSwgImF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUgY2FsbGVkXG4iKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweDApOworCXJldHVybiAwOworfQorCit2b2lkIGF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQgY2FsbGVkXG4iKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZGV2LCBBVTA4MjhfU0VOU09SQ1RSTF8xMDAsIDB4MCk7CisJbWRlbGF5KDMwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZGV2LCBBVTA4MjhfU0VOU09SQ1RSTF8xMDAsIDB4YjMpOworfQorCisvKgorICogU29tZSBvcGVyYXRpb25zIG5lZWRzIHRvIHN0b3AgY3VycmVudCBzdHJlYW1pbmcKKyAqLworc3RhdGljIGludCBhdTA4Mjhfc3RyZWFtX2ludGVycnVwdChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWludCByZXQgPSAwOworCisJZGV2LT5zdHJlYW1fc3RhdGUgPSBTVFJFQU1fSU5URVJSVVBUOworCWlmIChkZXYtPmRldl9zdGF0ZSA9PSBERVZfRElTQ09OTkVDVEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKwllbHNlIGlmIChyZXQpIHsKKwkJZGV2LT5kZXZfc3RhdGUgPSBERVZfTUlTQ09ORklHVVJFRDsKKwkJZHByaW50aygxLCAiJXMgZGV2aWNlIGlzIG1pc2NvbmZpZ3VyZWQhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogYXUwODI4X3JlbGVhc2VfcmVzb3VyY2VzCisgKiB1bnJlZ2lzdGVyIHY0bDIgZGV2aWNlcworICovCit2b2lkIGF1MDgyOF9hbmFsb2dfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWRwcmludGsoMSwgImF1MDgyOF9yZWxlYXNlX3Jlc291cmNlcyBjYWxsZWRcbiIpOworCW11dGV4X2xvY2soJmF1MDgyOF9zeXNmc19sb2NrKTsKKworCWlmIChkZXYtPnZkZXYpIHsKKwkJbGlzdF9kZWwoJmRldi0+YXUwODI4bGlzdCk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldik7CisJfQorCWlmIChkZXYtPnZiaV9kZXYpCisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2Rldik7CisKKwltdXRleF91bmxvY2soJmF1MDgyOF9zeXNmc19sb2NrKTsKK30KKworCisvKiBVc2FnZSBsb2NrIGNoZWNrIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBhdTA4MjhfZmggKmZoKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludAkJIHJjICAgPSAwOworCisJLyogVGhpcyBpbnN0YW5jZSBhbHJlYWR5IGhhcyBzdHJlYW1fb24gKi8KKwlpZiAoZmgtPnN0cmVhbV9vbikKKwkJcmV0dXJuIHJjOworCisJaWYgKGRldi0+c3RyZWFtX29uKQorCQlyZXR1cm4gLUVCVVNZOworCisJZGV2LT5zdHJlYW1fb24gPSAxOworCWZoLT5zdHJlYW1fb24gID0gMTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcmVzX2NoZWNrKHN0cnVjdCBhdTA4MjhfZmggKmZoKQoreworCXJldHVybiBmaC0+c3RyZWFtX29uOworfQorCitzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWZoLT5zdHJlYW1fb24gPSAwOworCWRldi0+c3RyZWFtX29uID0gMDsKK30KKworc3RhdGljIGludCBhdTA4MjhfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlscCktPm1pbm9yOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdTA4MjhfZGV2ICpoLCAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaDsKKwlpbnQgdHlwZSA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWxpc3RfZm9yX2VhY2gobGlzdCwgJmF1MDgyOF9kZXZsaXN0KSB7CisJCWggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBhdTA4MjhfZGV2LCBhdTA4MjhsaXN0KTsKKwkJaWYgKGgtPnZkZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCQlkZXYgPSBoOworCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJfQorI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJCWlmIChoLT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCQl9CisjZW5kaWYKKwl9CisKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXUwODI4X2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gZmgpIHsKKwkJZHByaW50aygxLCAiRmFpbGVkIGFsbG9jYXRlIGF1MDgyOF9maCBzdHJ1Y3QhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZmgtPnR5cGUgPSB0eXBlOworCWZoLT5kZXYgPSBkZXY7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZmg7CisKKwlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmIGRldi0+dXNlcnMgPT0gMCkgeworCQkvKiBzZXQgYXUwODI4IGludGVyZmFjZTAgdG8gQVM1IGhlcmUgYWdhaW4gKi8KKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51c2JkZXYsIDAsIDUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQXUwODI4IGNhbid0IHNldCBhbHRlcm5hdGUgdG8gNSFcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCQlkZXYtPndpZHRoID0gTlRTQ19TVERfVzsKKwkJZGV2LT5oZWlnaHQgPSBOVFNDX1NURF9IOworCQlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQgKiAyOworCQlkZXYtPmZpZWxkX3NpemUgPSBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQ7CisJCWRldi0+Ynl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCAqIDI7CisKKwkJYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKGRldik7CisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0KGRldik7CisKKwkJLyogSWYgd2Ugd2VyZSBkb2luZyBhYzk3IGluc3RlYWQgb2YgaTJzLCBpdCB3b3VsZCBnbyBoZXJlLi4uKi8KKwkJYXUwODI4X2kyc19pbml0KGRldik7CisKKwkJZGV2LT5zdHJlYW1fc3RhdGUgPSBTVFJFQU1fT0ZGOworCQlkZXYtPmRldl9zdGF0ZSB8PSBERVZfSU5JVElBTElaRUQ7CisJfQorCisJZGV2LT51c2VycysrOworCisJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmaC0+dmJfdmlkcSwgJmF1MDgyOF92aWRlb19xb3BzLAorCQkJCSAgICBOVUxMLCAmZGV2LT5zbG9jaywgZmgtPnR5cGUsCisJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdTA4MjhfYnVmZmVyKSwgZmgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdTA4MjhfdjRsMl9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAocmVzX2NoZWNrKGZoKSkKKwkJcmVzX2ZyZWUoZmgpOworCisJaWYgKGRldi0+dXNlcnMgPT0gMSkgeworCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmlkcSk7CisJCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZiX3ZpZHEpOworCisJCWlmIChkZXYtPmRldl9zdGF0ZSAmIERFVl9ESVNDT05ORUNURUQpIHsKKwkJCWF1MDgyOF9hbmFsb2dfdW5yZWdpc3RlcihkZXYpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQkJa2ZyZWUoZGV2KTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShkZXYpOworCisJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCisJCS8qIFdoZW4gY2xvc2UgdGhlIGRldmljZSwgc2V0IHRoZSB1c2IgaW50ZjAgaW50byBhbHQwIHRvIGZyZWUKKwkJICAgVVNCIGJhbmR3aWR0aCAqLworCQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwgMCwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiQXUwODI4IGNhbid0IHNldCBhbHRlcm5hdGUgdG8gMCFcbiIpOworCX0KKworCWtmcmVlKGZoKTsKKwlkZXYtPnVzZXJzLS07CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZkZXYtPm9wZW4sIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYXUwODI4X3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCQlyYyA9IHJlc19nZXQoZmgpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCQlyZXR1cm4gcmM7CisKKwkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmaC0+dmJfdmlkcSwgYnVmLCBjb3VudCwgcG9zLCAwLAorCQkJCQlmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGF1MDgyOF92NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gcmVzX2dldChmaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCXJldHVybiBQT0xMRVJSOworCisJaWYgKFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIFBPTExFUlI7CisKKwlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlscCwgJmZoLT52Yl92aWRxLCB3YWl0KTsKK30KKworc3RhdGljIGludCBhdTA4MjhfdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ICAgPSBmaC0+ZGV2OworCWludAkJIHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gcmVzX2dldChmaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCXJldHVybiByYzsKKworCXJjID0gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52Yl92aWRxLCB2bWEpOworCisJZHByaW50aygyLCAidm1hIHN0YXJ0PTB4JTA4bHgsIHNpemU9JWxkLCByZXQ9JWRcbiIsCisJCSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCisJCSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fZW5kLSh1bnNpZ25lZCBsb25nKXZtYS0+dm1fc3RhcnQsCisJCXJjKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBhdTA4Mjhfc2V0X2Zvcm1hdChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlpbnQgcmV0OworCWludCB3aWR0aCA9IGZvcm1hdC0+Zm10LnBpeC53aWR0aDsKKwlpbnQgaGVpZ2h0ID0gZm9ybWF0LT5mbXQucGl4LmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgbWF4d2lkdGgsIG1heGhlaWdodDsKKworCW1heHdpZHRoID0gNzIwOworCW1heGhlaWdodCA9IDQ4MDsKKworI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJaWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkgeworCQlkcHJpbnRrKDEsICJWQkkgZm9ybWF0IHNldDogdG8gYmUgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAwOworCX0KKwlpZiAoZm9ybWF0LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiAwOworI2VuZGlmCisJaWYgKGZvcm1hdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWYgdGhleSBhcmUgZGVtYW5kaW5nIGEgZm9ybWF0IG90aGVyIHRoYW4gdGhlIG9uZSB3ZSBzdXBwb3J0LAorCSAgIGJhaWwgb3V0ICh0dnRpbWUgYXNrcyBmb3IgVVlWWSBhbmQgdGhlbiByZXRyaWVzIHdpdGggWVVZVikgKi8KKwlpZiAoZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9VWVZZKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZvcm1hdC0+Zm10LnBpeC53aWR0aCBvbmx5IHN1cHBvcnQgNzIwIGFuZCBoZWlnaHQgNDgwICovCisJaWYgKHdpZHRoICE9IDcyMCkKKwkJd2lkdGggPSA3MjA7CisJaWYgKGhlaWdodCAhPSA0ODApCisJCWhlaWdodCA9IDQ4MDsKKworCWZvcm1hdC0+Zm10LnBpeC53aWR0aCA9IHdpZHRoOworCWZvcm1hdC0+Zm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJZm9ybWF0LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IHdpZHRoICogMjsKKwlmb3JtYXQtPmZtdC5waXguc2l6ZWltYWdlID0gd2lkdGggKiBoZWlnaHQgKiAyOworCWZvcm1hdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKwlmb3JtYXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisKKwlpZiAoY21kID09IFZJRElPQ19UUllfRk1UKQorCQlyZXR1cm4gMDsKKworCS8qIG1heWJlIHNldCBuZXcgaW1hZ2UgZm9ybWF0LCBkcml2ZXIgY3VycmVudCBvbmx5IHN1cHBvcnQgNzIwKjQ4MCAqLworCWRldi0+d2lkdGggPSB3aWR0aDsKKwlkZXYtPmhlaWdodCA9IGhlaWdodDsKKwlkZXYtPmZyYW1lX3NpemUgPSB3aWR0aCAqIGhlaWdodCAqIDI7CisJZGV2LT5maWVsZF9zaXplID0gd2lkdGggKiBoZWlnaHQ7CisJZGV2LT5ieXRlc3BlcmxpbmUgPSB3aWR0aCAqIDI7CisKKwlpZiAoZGV2LT5zdHJlYW1fc3RhdGUgPT0gU1RSRUFNX09OKSB7CisJCWRwcmludGsoMSwgIlZJRElPQ19TRVRfRk1UOiBpbnRlcnJ1cHRpbmcgc3RyZWFtIVxuIik7CisJCXJldCA9IGF1MDgyOF9zdHJlYW1faW50ZXJydXB0KGRldik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZHByaW50aygxLCAiZXJyb3IgaW50ZXJydXB0aW5nIHZpZGVvIHN0cmVhbSFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIHNldCBhdTA4MjggaW50ZXJmYWNlMCB0byBBUzUgaGVyZSBhZ2FpbiAqLworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dXNiZGV2LCAwLCA1KTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJBdTA4MjggY2FuJ3Qgc2V0IGFsdCBzZXR0aW5nIHRvIDUhXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoZGV2KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgcXVlcnljdHJsLCBxYyk7CisJaWYgKHFjLT50eXBlKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJhdTA4MjgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGNhcC0+Y2FyZCwgZGV2LT5ib2FyZC5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisKKwljYXAtPnZlcnNpb24gPSBBVTA4MjhfVkVSU0lPTl9DT0RFOworCisJLypzZXQgdGhlIGRldmljZSBjYXBhYmlsaXRpZXMgKi8KKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKKyNlbmRpZgorCQlWNEwyX0NBUF9BVURJTyB8CisJCVY0TDJfQ0FQX1JFQURXUklURSB8CisJCVY0TDJfQ0FQX1NUUkVBTUlORyB8CisJCVY0TDJfQ0FQX1RVTkVSOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpZiAoZi0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJQYWNrZWQgWVVWMiIpOworCisJZi0+ZmxhZ3MgPSAwOworCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmLT5mbXQucGl4LndpZHRoID0gZGV2LT53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGRldi0+Ynl0ZXNwZXJsaW5lOworCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZGV2LT5mcmFtZV9zaXplOworCWYtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07IC8qIE5UU0MvUEFMICovCisJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlyZXR1cm4gYXUwODI4X3NldF9mb3JtYXQoZGV2LCBWSURJT0NfVFJZX0ZNVCwgZik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koJmZoLT52Yl92aWRxKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcyBxdWV1ZSBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5zdHJlYW1fb24gJiYgIWZoLT5zdHJlYW1fb24pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgZGV2aWNlIGluIHVzZSBieSBhbm90aGVyIGZoXG4iLCBfX2Z1bmNfXyk7CisJCXJjID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXR1cm4gYXUwODI4X3NldF9mb3JtYXQoZGV2LCBWSURJT0NfU19GTVQsIGYpOworb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkvKiBGSVhNRTogd2hlbiB3ZSBzdXBwb3J0IHNvbWV0aGluZyBvdGhlciB0aGFuIE5UU0MsIHdlIGFyZSBnb2luZyB0bworCSAgIGhhdmUgdG8gbWFrZSB0aGUgYXUwODI4IGJyaWRnZSBhZGp1c3QgdGhlIHNpemUgb2YgaXRzIGNhcHR1cmUKKwkgICBidWZmZXIsIHdoaWNoIGlzIGN1cnJlbnRseSBoYXJkY29kZWQgYXQgNzIweDQ4MCAqLworCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX3N0ZCwgKm5vcm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnB1dCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXN0YXRpYyBjb25zdCBjaGFyICppbmFtZXNbXSA9IHsKKwkJW0FVMDgyOF9WTVVYX1VOREVGSU5FRF0gPSAiVW5kZWZpbmVkIiwKKwkJW0FVMDgyOF9WTVVYX0NPTVBPU0lURV0gPSAiQ29tcG9zaXRlIiwKKwkJW0FVMDgyOF9WTVVYX1NWSURFT10gPSAiUy1WaWRlbyIsCisJCVtBVTA4MjhfVk1VWF9DQUJMRV0gPSAiQ2FibGUgVFYiLAorCQlbQVUwODI4X1ZNVVhfVEVMRVZJU0lPTl0gPSAiVGVsZXZpc2lvbiIsCisJCVtBVTA4MjhfVk1VWF9EVkJdID0gIkRWQiIsCisJCVtBVTA4MjhfVk1VWF9ERUJVR10gPSAidHYgZGVidWciCisJfTsKKworCXRtcCA9IGlucHV0LT5pbmRleDsKKworCWlmICh0bXAgPiBBVTA4MjhfTUFYX0lOUFVUKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoQVVWSV9JTlBVVCh0bXApLnR5cGUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbnB1dC0+aW5kZXggPSB0bXA7CisJc3RyY3B5KGlucHV0LT5uYW1lLCBpbmFtZXNbQVVWSV9JTlBVVCh0bXApLnR5cGVdKTsKKwlpZiAoKEFVVklfSU5QVVQodG1wKS50eXBlID09IEFVMDgyOF9WTVVYX1RFTEVWSVNJT04pIHx8CisJICAgIChBVVZJX0lOUFVUKHRtcCkudHlwZSA9PSBBVTA4MjhfVk1VWF9DQUJMRSkpCisJCWlucHV0LT50eXBlIHw9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKKwllbHNlCisJCWlucHV0LT50eXBlIHw9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisKKwlpbnB1dC0+c3RkID0gZGV2LT52ZGV2LT50dm5vcm1zOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJKmkgPSBkZXYtPmN0cmxfaW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGk7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKworCWRwcmludGsoMSwgIlZJRElPQ19TX0lOUFVUIGluIGZ1bmN0aW9uICVzLCBpbnB1dD0lZFxuIiwgX19mdW5jX18sCisJCWluZGV4KTsKKwlpZiAoaW5kZXggPj0gQVUwODI4X01BWF9JTlBVVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEFVVklfSU5QVVQoaW5kZXgpLnR5cGUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5jdHJsX2lucHV0ID0gaW5kZXg7CisKKwlzd2l0Y2ggKEFVVklfSU5QVVQoaW5kZXgpLnR5cGUpIHsKKwljYXNlIEFVMDgyOF9WTVVYX1NWSURFTzoKKwkJZGV2LT5pbnB1dF90eXBlID0gQVUwODI4X1ZNVVhfU1ZJREVPOworCQlicmVhazsKKwljYXNlIEFVMDgyOF9WTVVYX0NPTVBPU0lURToKKwkJZGV2LT5pbnB1dF90eXBlID0gQVUwODI4X1ZNVVhfQ09NUE9TSVRFOworCQlicmVhazsKKwljYXNlIEFVMDgyOF9WTVVYX1RFTEVWSVNJT046CisJCWRldi0+aW5wdXRfdHlwZSA9IEFVMDgyOF9WTVVYX1RFTEVWSVNJT047CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRwcmludGsoMSwgIlZJRElPQ19TX0lOUFVUIHVua25vd24gaW5wdXQgdHlwZSBzZXQgWyVkXVxuIiwKKwkJCUFVVklfSU5QVVQoaW5kZXgpLnR5cGUpOworCQlicmVhazsKKwl9CisKKwlyb3V0ZS5pbnB1dCA9IEFVVklfSU5QVVQoaW5kZXgpLnZtdXg7CisJcm91dGUub3V0cHV0ID0gMDsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVTA4MjhfTUFYX0lOUFVUOyBpKyspIHsKKwkJaW50IGVuYWJsZSA9IDA7CisJCWlmIChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAoaSA9PSBpbmRleCkKKwkJCWVuYWJsZSA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZSA9IDA7CisJCWlmIChlbmFibGUpIHsKKwkJCShBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKShkZXYsIGVuYWJsZSk7CisJCX0gZWxzZSB7CisJCQkvKiBNYWtlIHN1cmUgd2UgbGVhdmUgaXQgdHVybmVkIG9uIGlmIHNvbWUKKwkJCSAgIG90aGVyIGlucHV0IGlzIHJvdXRlZCB0byB0aGlzIGNhbGxiYWNrICovCisJCQlpZiAoKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApICE9CisJCQkgICAgKChBVVZJX0lOUFVUKGluZGV4KS5hdWRpb19zZXR1cCkpKSB7CisJCQkJKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApKGRldiwgZW5hYmxlKTsKKwkJCX0KKwkJfQorCX0KKworCXJvdXRlLmlucHV0ID0gQVVWSV9JTlBVVChpbmRleCkuYW11eDsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGludCBpbmRleCA9IGEtPmluZGV4OworCisJaWYgKGEtPmluZGV4ID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmRleCA9IGRldi0+Y3RybF9haW5wdXQ7CisJaWYgKGluZGV4ID09IDApCisJCXN0cmNweShhLT5uYW1lLCAiVGVsZXZpc2lvbiIpOworCWVsc2UKKwkJc3RyY3B5KGEtPm5hbWUsICJMaW5lIGluIik7CisKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCWEtPmluZGV4ID0gaW5kZXg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpZiAoYS0+aW5kZXggIT0gZGV2LT5jdHJsX2FpbnB1dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBnX2N0cmwsIGN0cmwpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgc19jdHJsLCBjdHJsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3RyY3B5KHQtPm5hbWUsICJBdXZpdGVrIHR1bmVyIik7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBnX3R1bmVyLCB0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAodC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX3R1bmVyLCB0KTsKKwlkcHJpbnRrKDEsICJWSURJT0NfU19UVU5FUjogc2lnbmFsID0gJXgsIGFmYyA9ICV4XG4iLCB0LT5zaWduYWwsCisJCXQtPmFmYyk7CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWZyZXEtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwlmcmVxLT5mcmVxdWVuY3kgPSBkZXYtPmN0cmxfZnJlcTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmIChmcmVxLT50dW5lciAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZnJlcS0+dHlwZSAhPSBWNEwyX1RVTkVSX0FOQUxPR19UVikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYtPmN0cmxfZnJlcSA9IGZyZXEtPmZyZXF1ZW5jeTsKKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc19mcmVxdWVuY3ksIGZyZXEpOworCisJYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJmNoaXAtPm1hdGNoKSkgeworCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfQVUwODI4OworCQlyZXR1cm4gMDsKKwl9CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwlpZiAoY2hpcC0+aWRlbnQgPT0gVjRMMl9JREVOVF9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjYykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAoY2MtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNjLT5ib3VuZHMubGVmdCA9IDA7CisJY2MtPmJvdW5kcy50b3AgPSAwOworCWNjLT5ib3VuZHMud2lkdGggPSBkZXYtPndpZHRoOworCWNjLT5ib3VuZHMuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7CisKKwljYy0+ZGVmcmVjdCA9IGNjLT5ib3VuZHM7CisKKwljYy0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gNTQ7CisJY2MtPnBpeGVsYXNwZWN0LmRlbm9taW5hdG9yID0gNTk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKGRldik7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIDEpOworCX0KKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJcmMgPSByZXNfZ2V0KGZoKTsKKworCWlmIChsaWtlbHkocmMgPj0gMCkpCisJCXJjID0gdmlkZW9idWZfc3RyZWFtb24oJmZoLT52Yl92aWRxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IGk7CisJaW50IHJldDsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0eXBlICE9IGZoLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJcmV0ID0gYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoZGV2KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVUwODI4X01BWF9JTlBVVDsgaSsrKSB7CisJCWlmIChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJKEFVVklfSU5QVVQoaSkuYXVkaW9fc2V0dXApKGRldiwgMCk7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92aWRxKTsKKwlyZXNfZnJlZShmaCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKHJlZy0+bWF0Y2gudHlwZSkgeworCWNhc2UgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI6CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXN3aXRjaCAocmVnLT5tYXRjaC50eXBlKSB7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjoKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBXb3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiB0aGUgYXUwODI4IGhhcmR3YXJlIGRlc2lnbiB0aGF0IHNvbWV0aW1lcworCSAgIHJlc3VsdHMgaW4gdGhlIGNvbG9yc3BhY2UgYmVpbmcgaW52ZXJ0ZWQgKi8KKwlpZiAoZGV2LT5ncmVlbnNjcmVlbl9kZXRlY3RlZCA9PSAxKSB7CisJCWRwcmludGsoMSwgIkRldGVjdGVkIGdyZWVuIGZyYW1lLiAgUmVzZXR0aW5nIHN0cmVhbS4uLlxuIik7CisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0KGRldik7CisJCWRldi0+Z3JlZW5zY3JlZW5fZGV0ZWN0ZWQgPSAwOworCX0KKworCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX2NnbWJ1ZigmZmgtPnZiX3ZpZHEsIG1idWYsIDgpOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgYXUwODI4X3Y0bF9mb3BzID0geworCS5vd25lciAgICAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgPSBhdTA4MjhfdjRsMl9vcGVuLAorCS5yZWxlYXNlICAgID0gYXUwODI4X3Y0bDJfY2xvc2UsCisJLnJlYWQgICAgICAgPSBhdTA4MjhfdjRsMl9yZWFkLAorCS5wb2xsICAgICAgID0gYXUwODI4X3Y0bDJfcG9sbCwKKwkubW1hcCAgICAgICA9IGF1MDgyOF92NGwyX21tYXAsCisJLmlvY3RsICAgICAgPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICAgID0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgICAgID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS52aWRpb2NfZ19mbXRfdmJpX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92YmlfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92YmlfY2FwICAgICA9IHZpZGlvY19zX2ZtdF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfdmJpX2NhcCAgICAgICA9IHZpZGlvY19zX2ZtdF92YmlfY2FwLAorI2VuZGlmCisJLnZpZGlvY19nX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICAgICAgICAgID0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19jcm9wY2FwICAgICAgICAgICAgID0gdmlkaW9jX2Nyb3BjYXAsCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkudmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwICAgPSB2aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9jYXAsCisJLnZpZGlvY190cnlfZm10X3NsaWNlZF92YmlfY2FwID0gdmlkaW9jX3RyeV9zZXRfc2xpY2VkX3ZiaV9jYXAsCisJLnZpZGlvY19zX2ZtdF9zbGljZWRfdmJpX2NhcCAgID0gdmlkaW9jX3RyeV9zZXRfc2xpY2VkX3ZiaV9jYXAsCisjZW5kaWYKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgICAgID0gdmlkaW9jX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2Nfc19zdGQgICAgICAgICAgICAgICA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAgICAgICAgPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAgICAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgICAgICAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgICAgICAgICA9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9mZiwKKwkudmlkaW9jX2dfdHVuZXIgICAgICAgICAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgICAgICAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfZnJlcXVlbmN5ICAgICAgICAgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSAgICAgICAgID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkudmlkaW9jX2dfcmVnaXN0ZXIgICAgICAgICAgPSB2aWRpb2NfZ19yZWdpc3RlciwKKwkudmlkaW9jX3NfcmVnaXN0ZXIgICAgICAgICAgPSB2aWRpb2Nfc19yZWdpc3RlciwKKyNlbmRpZgorCS52aWRpb2NfZ19jaGlwX2lkZW50ICAgICAgICA9IHZpZGlvY19nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmICAgICAgICAgICAgICAgID0gdmlkaW9jZ21idWYsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGF1MDgyOF92aWRlb190ZW1wbGF0ZSA9IHsKKwkuZm9wcyAgICAgICAgICAgICAgICAgICAgICAgPSAmYXUwODI4X3Y0bF9mb3BzLAorCS5yZWxlYXNlICAgICAgICAgICAgICAgICAgICA9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMgCQkgICAgPSAmdmlkZW9faW9jdGxfb3BzLAorCS5taW5vciAgICAgICAgICAgICAgICAgICAgICA9IC0xLAorCS50dm5vcm1zICAgICAgICAgICAgICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKKwkuY3VycmVudF9ub3JtICAgICAgICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlpbnQgaTsKKworCWRwcmludGsoMSwgImF1MDgyOF9hbmFsb2dfcmVnaXN0ZXIgY2FsbGVkIVxuIik7CisKKwkvKiBzZXQgYXUwODI4IHVzYiBpbnRlcmZhY2UwIHRvIGFzNSAqLworCXJldHZhbCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dXNiZGV2LAorCQkJaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCA1KTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRmFpbHVyZSBzZXR0aW5nIHVzYiBpbnRlcmZhY2UwIHRvIGFzNVxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogRmlndXJlIG91dCB3aGljaCBlbmRwb2ludCBoYXMgdGhlIGlzb2MgaW50ZXJmYWNlICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQkgICAgID09IFVTQl9ESVJfSU4pICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKKwkJICAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSkgeworCisJCQkvKiB3ZSBmaW5kIG91ciBpc29jIGluIGVuZHBvaW50ICovCisJCQl1MTYgdG1wID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwkJCWRldi0+bWF4X3BrdF9zaXplID0gKHRtcCAmIDB4MDdmZikgKgorCQkJCSgoKHRtcCAmIDB4MTgwMCkgPj4gMTEpICsgMSk7CisJCQlkZXYtPmlzb2NfaW5fZW5kcG9pbnRhZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKwl9CisJaWYgKCEoZGV2LT5pc29jX2luX2VuZHBvaW50YWRkcikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IGxvY2F0ZSBpc29jIGVuZHBvaW50XG4iKTsKKwkJa2ZyZWUoZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5vcGVuKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLnF1ZXVlZCk7CisKKwlkZXYtPndpZHRoID0gTlRTQ19TVERfVzsKKwlkZXYtPmhlaWdodCA9IE5UU0NfU1REX0g7CisJZGV2LT5maWVsZF9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0OworCWRldi0+ZnJhbWVfc2l6ZSA9IGRldi0+ZmllbGRfc2l6ZSA8PCAxOworCWRldi0+Ynl0ZXNwZXJsaW5lID0gZGV2LT53aWR0aCA8PCAxOworCWRldi0+Y3RybF9haW5wdXQgPSAwOworCisJLyogYWxsb2NhdGUgYW5kIGZpbGwgdjRsMiB2aWRlbyBzdHJ1Y3QgKi8KKwlkZXYtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoTlVMTCA9PSBkZXYtPnZkZXYpIHsKKwkJZHByaW50aygxLCAiQ2FuJ3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJZGV2LT52YmlfZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gZGV2LT52YmlfZGV2KSB7CisJCWRwcmludGsoMSwgIkNhbid0IGFsbG9jYXRlIHZiaV9kZXZpY2UuXG4iKTsKKwkJa2ZyZWUoZGV2LT52ZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorI2VuZGlmCisKKwkvKiBGaWxsIHRoZSB2aWRlbyBjYXB0dXJlIGRldmljZSBzdHJ1Y3QgKi8KKwkqZGV2LT52ZGV2ID0gYXUwODI4X3ZpZGVvX3RlbXBsYXRlOworCWRldi0+dmRldi0+cGFyZW50ID0gJmRldi0+dXNiZGV2LT5kZXY7CisJc3RyY3B5KGRldi0+dmRldi0+bmFtZSwgImF1MDgyOGEgdmlkZW8iKTsKKworI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLyogU2V0dXAgdGhlIFZCSSBkZXZpY2UgKi8KKwkqZGV2LT52YmlfZGV2ID0gYXUwODI4X3ZpZGVvX3RlbXBsYXRlOworCWRldi0+dmJpX2Rldi0+cGFyZW50ID0gJmRldi0+dXNiZGV2LT5kZXY7CisJc3RyY3B5KGRldi0+dmJpX2Rldi0+bmFtZSwgImF1MDgyOGEgdmJpIik7CisjZW5kaWYKKworCWxpc3RfYWRkX3RhaWwoJmRldi0+YXUwODI4bGlzdCwgJmF1MDgyOF9kZXZsaXN0KTsKKworCS8qIFJlZ2lzdGVyIHRoZSB2NGwyIGRldmljZSAqLworCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZHByaW50aygxLCAidW5hYmxlIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZSAoZXJyb3IgPSAlZCkuXG4iLAorCQkJcmV0dmFsKTsKKwkJbGlzdF9kZWwoJmRldi0+YXUwODI4bGlzdCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGRldi0+dmRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLyogUmVnaXN0ZXIgdGhlIHZiaSBkZXZpY2UgKi8KKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52YmlfZGV2LCBWRkxfVFlQRV9WQkksIC0xKTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZHByaW50aygxLCAidW5hYmxlIHRvIHJlZ2lzdGVyIHZiaSBkZXZpY2UgKGVycm9yID0gJWQpLlxuIiwKKwkJCXJldHZhbCk7CisJCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZiaV9kZXYpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYKKworCWRwcmludGsoMSwgIiVzIGNvbXBsZXRlZCFcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCmluZGV4IDlkNmExMTYuLjZlZDFhNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC5oCkBAIC0yNCw2ICsyNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAKKy8qIEFuYWxvZyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCiAvKiBEVkIgKi8KICNpbmNsdWRlICJkZW11eC5oIgogI2luY2x1ZGUgImRteGRldi5oIgpAQCAtMzksOCArNDQsNDUgQEAKICNkZWZpbmUgVVJCX0NPVU5UICAgMTYKICNkZWZpbmUgVVJCX0JVRlNJWkUgKDB4ZTUyMikKIAorLyogQW5hbG9nIGNvbnN0YW50cyAqLworI2RlZmluZSBOVFNDX1NURF9XICAgICAgNzIwCisjZGVmaW5lIE5UU0NfU1REX0ggICAgICA0ODAKKworI2RlZmluZSBBVTA4MjhfSU5URVJMQUNFRF9ERUZBVUxUICAgICAgIDEKKyNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9TSEFSUE5FU1MgIChWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQorCisvKiBEZWZpbmF0aW9uIGZvciBBVTA4MjggVVNCIHRyYW5zZmVyICovCisjZGVmaW5lIEFVMDgyOF9NQVhfSVNPX0JVRlMgICAgMTIgIC8qIG1heWJlIHJlc2l6ZSB0aGlzIHZhbHVlIGluIHRoZSBmdXR1cmUgKi8KKyNkZWZpbmUgQVUwODI4X0lTT19QQUNLRVRTX1BFUl9VUkIgICAgICAxMAorCisjZGVmaW5lIEFVMDgyOF9NSU5fQlVGIDQKKyNkZWZpbmUgQVUwODI4X0RFRl9CVUYgOAorCisjZGVmaW5lIEFVMDgyOF9NQVhfSU5QVVQgICAgICAgIDQKKworZW51bSBhdTA4MjhfaXR5cGUgeworCUFVMDgyOF9WTVVYX1VOREVGSU5FRCA9IDAsCisJQVUwODI4X1ZNVVhfQ09NUE9TSVRFLAorCUFVMDgyOF9WTVVYX1NWSURFTywKKwlBVTA4MjhfVk1VWF9DQUJMRSwKKwlBVTA4MjhfVk1VWF9URUxFVklTSU9OLAorCUFVMDgyOF9WTVVYX0RWQiwKKwlBVTA4MjhfVk1VWF9ERUJVRworfTsKKworc3RydWN0IGF1MDgyOF9pbnB1dCB7CisJZW51bSBhdTA4MjhfaXR5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgdm11eDsKKwl1bnNpZ25lZCBpbnQgYW11eDsKKwl2b2lkICgqYXVkaW9fc2V0dXApICh2b2lkICpwcml2LCBpbnQgZW5hYmxlKTsKK307CisKIHN0cnVjdCBhdTA4MjhfYm9hcmQgewogCWNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CisJdW5zaWduZWQgY2hhciB0dW5lcl9hZGRyOworCXN0cnVjdCBhdTA4MjhfaW5wdXQgaW5wdXRbQVUwODI4X01BWF9JTlBVVF07CisKIH07CiAKIHN0cnVjdCBhdTA4MjhfZHZiIHsKQEAgLTU1LDMxICs5NywxNDMgQEAKIAlpbnQgZmVlZGluZzsKIH07CiAKK2VudW0gYXUwODI4X3N0cmVhbV9zdGF0ZSB7CisJU1RSRUFNX09GRiwKKwlTVFJFQU1fSU5URVJSVVBULAorCVNUUkVBTV9PTgorfTsKKworI2RlZmluZSBBVVZJX0lOUFVUKG5yKSAoZGV2LT5ib2FyZC5pbnB1dFtucl0pCisKKy8qIGRldmljZSBzdGF0ZSAqLworZW51bSBhdTA4MjhfZGV2X3N0YXRlIHsKKwlERVZfSU5JVElBTElaRUQgPSAweDAxLAorCURFVl9ESVNDT05ORUNURUQgPSAweDAyLAorCURFVl9NSVNDT05GSUdVUkVEID0gMHgwNAorfTsKKworc3RydWN0IGF1MDgyOF9maCB7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldjsKKwl1bnNpZ25lZCBpbnQgIHN0cmVhbV9vbjoxOwkvKiBMb2NrcyBzdHJlYW1zICovCisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgICB2Yl92aWRxOworCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgICAgdHlwZTsKK307CisKK3N0cnVjdCBhdTA4MjhfdXNiX2lzb2NfY3RsIHsKKwkJLyogbWF4IHBhY2tldCBzaXplIG9mIGlzb2MgdHJhbnNhY3Rpb24gKi8KKwlpbnQJCQkJbWF4X3BrdF9zaXplOworCisJCS8qIG51bWJlciBvZiBhbGxvY2F0ZWQgdXJicyAqLworCWludAkJCQludW1fYnVmczsKKworCQkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCisJc3RydWN0IHVyYgkJCSoqdXJiOworCisJCS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNmZXIgKi8KKwljaGFyCQkJCSoqdHJhbnNmZXJfYnVmZmVyOworCisJCS8qIExhc3QgYnVmZmVyIGNvbW1hbmQgYW5kIHJlZ2lvbiAqLworCXU4CQkJCWNtZDsKKwlpbnQJCQkJcG9zLCBzaXplLCBwa3RzaXplOworCisJCS8qIExhc3QgZmllbGQ6IE9ERCBvciBFVkVOPyAqLworCWludAkJCQlmaWVsZDsKKworCQkvKiBTdG9yZXMgaW5jb21wbGV0ZSBjb21tYW5kcyAqLworCXUzMgkJCQl0bXBfYnVmOworCWludAkJCQl0bXBfYnVmX2xlbjsKKworCQkvKiBTdG9yZXMgYWxyZWFkeSByZXF1ZXN0ZWQgYnVmZmVycyAqLworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgIAkqYnVmOworCisJCS8qIFN0b3JlcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGZpZWxkcyAqLworCWludAkJCQluZmllbGRzOworCisJCS8qIGlzb2MgdXJiIGNhbGxiYWNrICovCisJaW50ICgqaXNvY19jb3B5KSAoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgc3RydWN0IHVyYiAqdXJiKTsKKworfTsKKworLyogYnVmZmVyIGZvciBvbmUgdmlkZW8gZnJhbWUgKi8KK3N0cnVjdCBhdTA4MjhfYnVmZmVyIHsKKwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciB2YjsKKworCXN0cnVjdCBsaXN0X2hlYWQgZnJhbWU7CisJaW50IHRvcF9maWVsZDsKKwlpbnQgcmVjZWl2aW5nOworfTsKKworc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICBhY3RpdmU7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICBxdWV1ZWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICB3cTsKKworCS8qIENvdW50ZXJzIHRvIGNvbnRyb2wgYnVmZmVyIGZpbGwgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICBwb3M7Cit9OworCiBzdHJ1Y3QgYXUwODI4X2RldiB7CiAJc3RydWN0IG11dGV4IG11dGV4OwogCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2JkZXY7Ci0JaW50CQkJYm9hcmQ7CisJaW50CQkJYm9hcmRucjsKKwlzdHJ1Y3QgYXUwODI4X2JvYXJkCWJvYXJkOwogCXU4CQkJY3RybG1zZ1s2NF07CiAKIAkvKiBJMkMgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJCWkyY19hZGFwOwotCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YQlpMmNfYWxnbzsKKwlzdHJ1Y3QgaTJjX2FsZ29yaXRobQkJaTJjX2FsZ287CiAJc3RydWN0IGkyY19jbGllbnQJCWkyY19jbGllbnQ7CiAJdTMyIAkJCQlpMmNfcmM7CiAKIAkvKiBEaWdpdGFsICovCiAJc3RydWN0IGF1MDgyOF9kdmIJCWR2YjsKIAorCS8qIEFuYWxvZyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYXUwODI4bGlzdDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJaW50IHVzZXJzOworCXVuc2lnbmVkIGludCBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpX2RldjsKKwlpbnQgd2lkdGg7CisJaW50IGhlaWdodDsKKwl1MzIgZmllbGRfc2l6ZTsKKwl1MzIgZnJhbWVfc2l6ZTsKKwl1MzIgYnl0ZXNwZXJsaW5lOworCWludCB0eXBlOworCXU4IGN0cmxfYWlucHV0OworCV9fdTggaXNvY19pbl9lbmRwb2ludGFkZHI7CisJdTggaXNvY19pbml0X29rOworCWludCBncmVlbnNjcmVlbl9kZXRlY3RlZDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfY291bnQ7CisJaW50IGN0cmxfZnJlcTsKKwlpbnQgaW5wdXRfdHlwZTsKKwl1bnNpZ25lZCBpbnQgY3RybF9pbnB1dDsKKwllbnVtIGF1MDgyOF9kZXZfc3RhdGUgZGV2X3N0YXRlOworCWVudW0gYXUwODI4X3N0cmVhbV9zdGF0ZSBzdHJlYW1fc3RhdGU7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgb3BlbjsKKworCXN0cnVjdCBtdXRleCBsb2NrOworCisJLyogSXNvYyBjb250cm9sIHN0cnVjdCAqLworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgdmlkcTsKKwlzdHJ1Y3QgYXUwODI4X3VzYl9pc29jX2N0bCBpc29jX2N0bDsKKwlzcGlubG9ja190IHNsb2NrOworCisJLyogdXNiIHRyYW5zZmVyICovCisJaW50IGFsdDsJCS8qIGFsdGVybmF0ZSAqLworCWludCBtYXhfcGt0X3NpemU7CS8qIG1heCBwYWNrZXQgc2l6ZSBvZiBpc29jIHRyYW5zYWN0aW9uICovCisJaW50IG51bV9hbHQ7CQkvKiBOdW1iZXIgb2YgYWx0ZXJuYXRpdmUgc2V0dGluZ3MgKi8KKwl1bnNpZ25lZCBpbnQgKmFsdF9tYXhfcGt0X3NpemU7CS8qIGFycmF5IG9mIHdNYXhQYWNrZXRTaXplICovCisJc3RydWN0IHVyYiAqdXJiW0FVMDgyOF9NQVhfSVNPX0JVRlNdOwkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCisJY2hhciAqdHJhbnNmZXJfYnVmZmVyW0FVMDgyOF9NQVhfSVNPX0JVRlNdOy8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MKKwkJCQkJCSAgIHRyYW5zZmVyICovCisKIAkvKiBVU0IgLyBVUkIgUmVsYXRlZCAqLwogCWludAkJdXJiX3N0cmVhbWluZzsKIAlzdHJ1Y3QgdXJiCSp1cmJzW1VSQl9DT1VOVF07Ci0KLX07Ci0KLXN0cnVjdCBhdTA4MjhfYnVmZiB7Ci0Jc3RydWN0IGF1MDgyOF9kZXYJKmRldjsKLQlzdHJ1Y3QgdXJiCQkqcHVyYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWJ1ZmZfbGlzdDsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMTEsOCArMjY1LDEzIEBACiAvKiBhdTA4MjgtaTJjLmMgKi8KIGV4dGVybiBpbnQgYXUwODI4X2kyY19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIGV4dGVybiBpbnQgYXUwODI4X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOwotZXh0ZXJuIHZvaWQgYXUwODI4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKLQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogYXUwODI4LXZpZGVvLmMgKi8KK2ludCBhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK2ludCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCBhdTA4MjhfZGV2ICpkKTsKK3ZvaWQgYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYXUwODI4LWR2Yi5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKaW5kZXggYTA3YjdiOC4uZGY0NTE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYwpAQCAtMjksMTYgKzI5LDE2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgorI2luY2x1ZGUgPG1lZGlhL2J0ODE5Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTgxOSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwpAQCAtNDgsMTMgKzQ4LDE1IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnQ4MTkgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1szMl07CiAKLQlpbnQgaW5pdGlhbGl6ZWQ7Ci0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKKwlpbnQgaWRlbnQ7CiAJaW50IGlucHV0OwogCWludCBlbmFibGU7CiAJaW50IGJyaWdodDsKQEAgLTYzLDYgKzY1LDExIEBACiAJaW50IHNhdDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0ODE5ICp0b19idDgxOShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBidDgxOSwgc2QpOworfQorCiBzdHJ1Y3QgdGltaW5nIHsKIAlpbnQgaGFjdGl2ZTsKIAlpbnQgaGRlbGF5OwpAQCAtODAsMjQgKzg3LDIzIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV93cml0ZShzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJmRlY29kZXItPnNkKTsKIAogCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfc2V0Yml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3NldGJpdChzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXJldHVybiBidDgxOV93cml0ZShjbGllbnQsIHJlZywKKwlyZXR1cm4gYnQ4MTlfd3JpdGUoZGVjb2RlciwgcmVnLAogCQkoZGVjb2Rlci0+cmVnW3JlZ10gJiB+KDEgPDwgYml0KSkgfCAodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgaW50IGJ0ODE5X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBidDgxOV93cml0ZV9ibG9jayhzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkZWNvZGVyLT5zZCk7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKIApAQCAtMTA1LDcgKzExMSw2IEBACiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOwogCQlpbnQgYmxvY2tfbGVuOwogCkBAIC0xMjYsNyArMTMxLDggQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlpZiAoKHJldCA9IGJ0ODE5X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKSkgPCAwKQorCQkJcmV0ID0gYnQ4MTlfd3JpdGUoZGVjb2RlciwgcmVnLCAqZGF0YSsrKTsKKwkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CiAJCX0KQEAgLTEzNSwxNSArMTQxLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV9yZWFkKHN0cnVjdCBidDgxOSAqZGVjb2RlciwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkZWNvZGVyLT5zZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCBidDgxOV9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IGJ0ODE5X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGluaXRbXSA9IHsKIAkJLyoweDFmLCAweDAwLCovICAgICAvKiBSZXNldCAqLwogCQkweDAxLCAweDU5LAkvKiAweDAxIGlucHV0IGZvcm1hdCAqLwpAQCAtMTc4LDcgKzE4NCw4IEBACiAJCTB4MWEsIDB4ODAsCS8qIDB4MWEgQURDIEludGVyZmFjZSAqLwogCX07CiAKLQlzdHJ1Y3QgdGltaW5nICp0aW1pbmcgPSAmdGltaW5nX2RhdGFbZGVjb2Rlci0+bm9ybV07CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9ICZ0aW1pbmdfZGF0YVsoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMF07CiAKIAlpbml0WzB4MDMgKiAyIC0gMV0gPQogCSAgICAoKCh0aW1pbmctPnZkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDYpIHwKQEAgLTE5MiwyNjYgKzE5OSwzMDYgQEAKIAlpbml0WzB4MDggKiAyIC0gMV0gPSB0aW1pbmctPmhzY2FsZSA+PiA4OwogCWluaXRbMHgwOSAqIDIgLSAxXSA9IHRpbWluZy0+aHNjYWxlICYgMHhmZjsKIAkvKiAweDE1IGluIGFycmF5IGlzIGFkZHJlc3MgMHgxOSAqLwotCWluaXRbMHgxNSAqIDIgLSAxXSA9IChkZWNvZGVyLT5ub3JtID09IDApID8gMTE1IDogOTM7CS8qIENocm9tYSBidXJzdCBkZWxheSAqLworCWluaXRbMHgxNSAqIDIgLSAxXSA9IChkZWNvZGVyLT5ub3JtICYgVjRMMl9TVERfNjI1XzUwKSA/IDExNSA6IDkzOwkvKiBDaHJvbWEgYnVyc3QgZGVsYXkgKi8KIAkvKiByZXNldCAqLwotCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxZiwgMHgwMCk7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxZiwgMHgwMCk7CiAJbWRlbGF5KDEpOwogCiAJLyogaW5pdCAqLwotCXJldHVybiBidDgxOV93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7CisJcmV0dXJuIGJ0ODE5X3dyaXRlX2Jsb2NrKGRlY29kZXIsIGluaXQsIHNpemVvZihpbml0KSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYnQ4MTlfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYnQ4MTlfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqcHN0YXR1cywgdjRsMl9zdGRfaWQgKnBzdGQpCiB7Ci0JaW50IHRlbXA7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCWludCBzdGF0dXMgPSBidDgxOV9yZWFkKGRlY29kZXIsIDB4MDApOworCWludCByZXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwl2NGwyX3N0ZF9pZCBzdGQ7CiAKLQlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWlmICghZGVjb2Rlci0+aW5pdGlhbGl6ZWQpIHsJLyogRmlyc3QgY2FsbCB0byBidDgxOV9pbml0IGNvdWxkIGJlICovCi0JCWJ0ODE5X2luaXQoY2xpZW50KTsJLyogd2l0aG91dCAjRlJTVCA9IDAgKi8KLQkJZGVjb2Rlci0+aW5pdGlhbGl6ZWQgPSAxOwotCX0KLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJYnQ4MTlfaW5pdChjbGllbnQpOwotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSA4OwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlczsKLQotCQlzdGF0dXMgPSBidDgxOV9yZWFkKGNsaWVudCwgMHgwMCk7CisJaWYgKChzdGF0dXMgJiAweDgwKSkKIAkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAweDgwKSkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwogCi0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAweDEwKSkKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJZWxzZQotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQkqaWFyZyA9IHJlczsKKwlpZiAoKHN0YXR1cyAmIDB4MTApKQorCQlzdGQgPSBWNEwyX1NURF9QQUw7CisJZWxzZQorCQlzdGQgPSBWNEwyX1NURF9OVFNDOworCWlmIChwc3RkKQorCQkqcHN0ZCA9IHN0ZDsKKwlpZiAocHN0YXR1cykKKwkJKnBzdGF0dXMgPSBzdGF0dXM7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IHN0YXR1cyAleFxuIiwgKmlhcmcpOwotCQlicmVhazsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnZXQgc3RhdHVzICV4XG4iLCBzdGF0dXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODE5X3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJcmV0dXJuIGJ0ODE5X3N0YXR1cyhzZCwgTlVMTCwgc3RkKTsKK30KKworc3RhdGljIGludCBidDgxOV9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwlyZXR1cm4gYnQ4MTlfc3RhdHVzKHNkLCBzdGF0dXMsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGJ0ODE5X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJc3RydWN0IHRpbWluZyAqdGltaW5nID0gTlVMTDsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBub3JtICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKworCWlmIChzZC0+djRsMl9kZXYgPT0gTlVMTCB8fCBzZC0+djRsMl9kZXYtPm5vdGlmeSA9PSBOVUxMKQorCQl2NGwyX2VycihzZCwgIm5vIG5vdGlmeSBmb3VuZCFcbiIpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAwLCAxKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDEsIDApOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgNSwgMCk7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MTgsIDB4NjgpOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDE5LCAweDVkKTsKKwkJLyogYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsICA1LCAxKTsgKi8KKwkJdGltaW5nID0gJnRpbWluZ19kYXRhWzFdOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAxKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDEpOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDE4LCAweDdmKTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOSwgMHg3Mik7CisJCS8qIGJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAgNSwgMCk7ICovCisJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVswXTsKKwl9IGVsc2UgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ1bnN1cHBvcnRlZCBub3JtICVsbHhcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwMywKKwkJCSgoKHRpbWluZy0+dmRlbGF5ID4+IDgpICYgMHgwMykgPDwgNikgfAorCQkJKCgodGltaW5nLT52YWN0aXZlID4+IDgpICYgMHgwMykgPDwgNCkgfAorCQkJKCgodGltaW5nLT5oZGVsYXkgPj4gOCkgJiAweDAzKSA8PCAyKSB8CisJCQkoKHRpbWluZy0+aGFjdGl2ZSA+PiA4KSAmIDB4MDMpKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA0LCB0aW1pbmctPnZkZWxheSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDUsIHRpbWluZy0+dmFjdGl2ZSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDYsIHRpbWluZy0+aGRlbGF5ICYgMHhmZik7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwNywgdGltaW5nLT5oYWN0aXZlICYgMHhmZik7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKKwlkZWNvZGVyLT5ub3JtID0gc3RkOworCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJc3RydWN0IHRpbWluZyAqdGltaW5nID0gTlVMTDsKK3N0YXRpYyBpbnQgYnQ4MTlfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAleFxuIiwgKmlhcmcpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBpbnB1dCAleFxuIiwgcm91dGUtPmlucHV0KTsKIAotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMCwgMSk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAxLCAwKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDApOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDY4KTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg1ZCk7Ci0JCQkvKiBidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMSk7ICovCi0JCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbVklERU9fTU9ERV9OVFNDXTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMCwgMSk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAxLCAxKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDUsIDEpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDE4LCAweDdmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOSwgMHg3Mik7Ci0JCQkvKiBidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAgNSwgMCk7ICovCi0JCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbVklERU9fTU9ERV9QQUxdOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMCwgMCk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCAxLCAwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidW5zdXBwb3J0ZWQgbm9ybSAleFxuIiwgKmlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJvdXRlLT5pbnB1dCA8IDAgfHwgcm91dGUtPmlucHV0ID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc2QtPnY0bDJfZGV2ID09IE5VTEwgfHwgc2QtPnY0bDJfZGV2LT5ub3RpZnkgPT0gTlVMTCkKKwkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKKworCWlmIChkZWNvZGVyLT5pbnB1dCAhPSByb3V0ZS0+aW5wdXQpIHsKKwkJdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBCVDgxOV9GSUZPX1JFU0VUX0xPVywgMCk7CisJCWRlY29kZXItPmlucHV0ID0gcm91dGUtPmlucHV0OworCQkvKiBzZWxlY3QgbW9kZSAqLworCQlpZiAoZGVjb2Rlci0+aW5wdXQgPT0gMCkgeworCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDApOworCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDEpOworCQl9IGVsc2UgeworCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDYsIDEpOworCQkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MWEsIDEsIDApOwogCQl9Ci0KLQkJaWYgKHRpbWluZykgewotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDAzLAotCQkJCSAgICAoKCh0aW1pbmctPnZkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDYpIHwKLQkJCQkgICAgKCgodGltaW5nLT52YWN0aXZlID4+IDgpICYgMHgwMykgPDwgNCkgfAotCQkJCSAgICAoKCh0aW1pbmctPmhkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDIpIHwKLQkJCQkgICAgICgodGltaW5nLT5oYWN0aXZlID4+IDgpICYgMHgwMykgKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwNCwgdGltaW5nLT52ZGVsYXkgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwNSwgdGltaW5nLT52YWN0aXZlICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDYsIHRpbWluZy0+aGRlbGF5ICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDcsIHRpbWluZy0+aGFjdGl2ZSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA4LCAodGltaW5nLT5oc2NhbGUgPj4gOCkgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwOSwgdGltaW5nLT5oc2NhbGUgJiAweGZmKTsKLQkJfQotCi0JCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQkJYnJlYWs7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9ISUdILCAwKTsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOworc3RhdGljIGludCBidDgxOV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJXhcbiIsICppYXJnKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJlbmFibGUgb3V0cHV0ICV4XG4iLCBlbmFibGUpOwogCi0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7Ci0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCQkJLyogc2VsZWN0IG1vZGUgKi8KLQkJCWlmIChkZWNvZGVyLT5pbnB1dCA9PSAwKSB7Ci0JCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgNiwgMCk7Ci0JCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgMSwgMSk7Ci0JCQl9IGVsc2UgewotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDYsIDEpOwotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsIDEsIDApOwotCQkJfQotCQl9Ci0JCWJyZWFrOworCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MTYsIDcsICFlbmFibGUpOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXQgJXhcbiIsICppYXJnKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOworc3RhdGljIGludCBidDgxOV9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJXhcbiIsICppYXJnKTsKLQotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxNiwgNywgIWVuYWJsZSk7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNTExLCAxLCAyNTYpOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJzZXQgcGljdHVyZSBicmlnaHRuZXNzICVkIGNvbnRyYXN0ICVkIGNvbG91ciAlZFxuIiwKLQkJCXBpYy0+YnJpZ2h0bmVzcywgcGljLT5jb250cmFzdCwgcGljLT5jb2xvdXIpOwotCi0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwYSwKLQkJCQkgICAgKGRlY29kZXItPmJyaWdodCA+PiA4KSAtIDEyOCk7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gcGljLT5jb250cmFzdCkgewotCQkJLyogV2Ugd2FudCAwIHRvIDUxMSB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBwaWMtPmNvbnRyYXN0OwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBjLAotCQkJCSAgICAoZGVjb2Rlci0+Y29udHJhc3QgPj4gNykgJiAweGZmKTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDIsCi0JCQkJICAgICAoKGRlY29kZXItPmNvbnRyYXN0ID4+IDE1KSAmIDB4MDEpKTsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA1MTEgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBkLAotCQkJCSAgICAoZGVjb2Rlci0+c2F0ID4+IDcpICYgMHhmZik7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCAxLAotCQkJCSAgICAgKChkZWNvZGVyLT5zYXQgPj4gMTUpICYgMHgwMSkpOwotCi0JCQl0ZW1wID0gKGRlY29kZXItPnNhdCAqIDIwMSkgLyAyMzc7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGUsICh0ZW1wID4+IDcpICYgMHhmZik7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCAwLCAodGVtcCA+PiAxNSkgJiAweDAxKTsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKLQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmh1ZSA9IHBpYy0+aHVlOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBmLAotCQkJCSAgICAxMjggLSAoZGVjb2Rlci0+aHVlID4+IDgpKTsKLQkJfQorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDUxMSwgMSwgMjU2KTsKIAkJYnJlYWs7Ci0JfQorCisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ0ODE5X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlpbnQgdGVtcDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmIChkZWNvZGVyLT5icmlnaHQgPT0gY3RybC0+dmFsdWUpCisJCQlicmVhazsKKwkJZGVjb2Rlci0+YnJpZ2h0ID0gY3RybC0+dmFsdWU7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGEsIGRlY29kZXItPmJyaWdodCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ID09IGN0cmwtPnZhbHVlKQorCQkJYnJlYWs7CisJCWRlY29kZXItPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGMsIGRlY29kZXItPmNvbnRyYXN0ICYgMHhmZik7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCAyLCAoKGRlY29kZXItPmNvbnRyYXN0ID4+IDgpICYgMHgwMSkpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGRlY29kZXItPnNhdCA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5zYXQgPSBjdHJsLT52YWx1ZTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwZCwgKGRlY29kZXItPnNhdCA+PiA3KSAmIDB4ZmYpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgMSwgKChkZWNvZGVyLT5zYXQgPj4gMTUpICYgMHgwMSkpOworCisJCS8qIFJhdGlvIGJldHdlZW4gVSBnYWluIGFuZCBWIGdhaW4gbXVzdCBzdGF5IHRoZSBzYW1lIGFzCisJCSAgIHRoZSByYXRpbyBiZXR3ZWVuIHRoZSBkZWZhdWx0IFUgYW5kIFYgZ2FpbiB2YWx1ZXMuICovCisJCXRlbXAgPSAoZGVjb2Rlci0+c2F0ICogMTgwKSAvIDI1NDsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwZSwgKHRlbXAgPj4gNykgJiAweGZmKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDAsICh0ZW1wID4+IDE1KSAmIDB4MDEpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoZGVjb2Rlci0+aHVlID09IGN0cmwtPnZhbHVlKQorCQkJYnJlYWs7CisJCWRlY29kZXItPmh1ZSA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBmLCBkZWNvZGVyLT5odWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDgxOV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmJyaWdodDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnNhdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+aHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBkZWNvZGVyLT5pZGVudCwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OGEgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYnQ4MTlfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGJ0ODE5X2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gYnQ4MTlfZ19jdHJsLAorCS5zX2N0cmwgPSBidDgxOV9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IGJ0ODE5X3F1ZXJ5Y3RybCwKK307CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgYnQ4MTlfdHVuZXJfb3BzID0geworCS5zX3N0ZCA9IGJ0ODE5X3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYnQ4MTlfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBidDgxOV9zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gYnQ4MTlfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0gYnQ4MTlfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gYnQ4MTlfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBidDgxOV9vcHMgPSB7CisJLmNvcmUgPSAmYnQ4MTlfY29yZV9vcHMsCisJLnR1bmVyID0gJmJ0ODE5X3R1bmVyX29wcywKKwkudmlkZW8gPSAmYnQ4MTlfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBidDgxOV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpLCB2ZXI7CiAJc3RydWN0IGJ0ODE5ICpkZWNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJY29uc3QgY2hhciAqbmFtZTsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2ZXIgPSBidDgxOV9yZWFkKGNsaWVudCwgMHgxNyk7CisJZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidDgxOSksIEdGUF9LRVJORUwpOworCWlmIChkZWNvZGVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZidDgxOV9vcHMpOworCisJdmVyID0gYnQ4MTlfcmVhZChkZWNvZGVyLCAweDE3KTsKIAlzd2l0Y2ggKHZlciAmIDB4ZjApIHsKIAljYXNlIDB4NzA6CiAJCW5hbWUgPSAiYnQ4MTlhIjsKKwkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX0JUODE5QTsKIAkJYnJlYWs7CiAJY2FzZSAweDYwOgogCQluYW1lID0gImJ0ODE3YSI7CisJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9CVDgxN0E7CiAJCWJyZWFrOwogCWNhc2UgMHgyMDoKIAkJbmFtZSA9ICJidDgxNWEiOworCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfQlQ4MTVBOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJ1bmtub3duIGNoaXAgdmVyc2lvbiAweCUwMnhcbiIsIHZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTQ1OSwyOCArNTA2LDI2IEBACiAJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4MTkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwotCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OwotCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+aHVlID0gMzI3Njg7Ci0JZGVjb2Rlci0+c2F0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+aW5pdGlhbGl6ZWQgPSAwOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOworCWRlY29kZXItPmJyaWdodCA9IDA7CisJZGVjb2Rlci0+Y29udHJhc3QgPSAweGQ4OwkvKiAxMDAlIG9mIG9yaWdpbmFsIHNpZ25hbCAqLworCWRlY29kZXItPmh1ZSA9IDA7CisJZGVjb2Rlci0+c2F0ID0gMHhmZTsJCS8qIDEwMCUgb2Ygb3JpZ2luYWwgc2lnbmFsICovCiAKLQlpID0gYnQ4MTlfaW5pdChjbGllbnQpOworCWkgPSBidDgxOV9pbml0KHNkKTsKIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBzdGF0dXMgJWRcbiIsIGkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJ0ODE5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fYnQ4MTkoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk2LDggKzU0MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJidDgxOSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0JUODE5LAotCS5jb21tYW5kID0gYnQ4MTlfY29tbWFuZCwKIAkucHJvYmUgPSBidDgxOV9wcm9iZSwKIAkucmVtb3ZlID0gYnQ4MTlfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGJ0ODE5X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCmluZGV4IDQyMTM4NjcuLjc4ZGIzOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKQEAgLTM0LDEwICszNCwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9va3RyZWUtODU2QSB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwpAQCAtNDcsNDMgKzQ3LDQ2IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIEJUODU2X1JFR19PRkZTRVQJMHhEQQogI2RlZmluZSBCVDg1Nl9OUl9SRUcJCTYKIAogc3RydWN0IGJ0ODU2IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbQlQ4NTZfTlJfUkVHXTsKIAotCWludCBub3JtOwotCWludCBlbmFibGU7CisJdjRsMl9zdGRfaWQgbm9ybTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0ODU2ICp0b19idDg1NihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBidDg1Niwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBidDg1Nl93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfd3JpdGUoc3RydWN0IGJ0ODU2ICplbmNvZGVyLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZlbmNvZGVyLT5zZCk7CiAKIAllbmNvZGVyLT5yZWdbcmVnIC0gQlQ4NTZfUkVHX09GRlNFVF0gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBidDg1Nl9zZXRiaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfc2V0Yml0KHN0cnVjdCBidDg1NiAqZW5jb2RlciwgdTggcmVnLCB1OCBiaXQsIHU4IHZhbHVlKQogewotCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JcmV0dXJuIGJ0ODU2X3dyaXRlKGNsaWVudCwgcmVnLAorCXJldHVybiBidDg1Nl93cml0ZShlbmNvZGVyLCByZWcsCiAJCShlbmNvZGVyLT5yZWdbcmVnIC0gQlQ4NTZfUkVHX09GRlNFVF0gJiB+KDEgPDwgYml0KSkgfAogCQkJCSh2YWx1ZSA/ICgxIDw8IGJpdCkgOiAwKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ0ODU2X2R1bXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGJ0ODU2X2R1bXAoc3RydWN0IGJ0ODU2ICplbmNvZGVyKQogewogCWludCBpOwotCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JdjRsX2luZm8oY2xpZW50LCAicmVnaXN0ZXIgZHVtcDpcbiIpOworCXY0bDJfaW5mbygmZW5jb2Rlci0+c2QsICJyZWdpc3RlciBkdW1wOlxuIik7CiAJZm9yIChpID0gMDsgaSA8IEJUODU2X05SX1JFRzsgaSArPSAyKQogCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGVuY29kZXItPnJlZ1tpXSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKQEAgLTkxLDE1MyArOTQsMTIwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYnQ4NTZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYnQ4NTZfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgYXJnKQogewotCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IHRvX2J0ODU2KHNkKTsKIAotCXN3aXRjaCAoY21kKSB7CisJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdFxuIik7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYywgMHgxOCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYSwgMCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkZSwgMCk7CisKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMSk7CisJLypidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNiwgMCk7Ki8KKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNCwgMSk7CisKKwlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAwKTsKKwllbHNlCisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAxKTsKKworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAxLCAxKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgNCwgMCk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDMsIDEpOworCWlmIChkZWJ1ZyAhPSAwKQorCQlidDg1Nl9kdW1wKGVuY29kZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODU2X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gdG9fYnQ4NTYoc2QpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IG5vcm0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDApOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGEsIDAsIDApOworCQkvKmJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRhLCAwLCAxKTsqLworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllbmNvZGVyLT5ub3JtID0gc3RkOworCWlmIChkZWJ1ZyAhPSAwKQorCQlidDg1Nl9kdW1wKGVuY29kZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODU2X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSB0b19idDg1NihzZCk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgaW5wdXQgJWRcbiIsIHJvdXRlLT5pbnB1dCk7CisKKwkvKiBXZSBvbmx5IGhhdmUgdmlkZW8gYnVzLgorCSAqIHJvdXRlLT5pbnB1dD0gMDogaW5wdXQgaXMgZnJvbSBidDgxOQorCSAqIHJvdXRlLT5pbnB1dD0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwICovCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKIAljYXNlIDA6Ci0JCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0XG4iKTsKLQkJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRjLCAweDE4KTsKLQkJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRhLCAwKTsKLQkJYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRlLCAwKTsKLQotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAxKTsKLQkJLy9idDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA2LCAwKTsKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNCwgMSk7Ci0KLQkJc3dpdGNoIChlbmNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDEsIDEpOwotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgMywgMSk7Ci0JCWlmIChkZWJ1ZyAhPSAwKQotCQkJYnQ4NTZfZHVtcChjbGllbnQpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgNCwgMCk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDEpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNiwgMCk7CiAJCWJyZWFrOwotCi0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZ2V0IGNhcGFiaWxpdGllc1xuIik7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0VOQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fRU5DT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fRU5DT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDI7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7CisJY2FzZSAxOgorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgNCwgMCk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDEpOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgNiwgMSk7CiAJCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybSAlZFxuIiwgKmlhcmcpOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAyLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGEsIDAsIDApOwotCQkJLy9idDg1Nl9zZXRiaXQoY2xpZW50LCAweGRhLCAwLCAxKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWlmIChkZWJ1ZyAhPSAwKQotCQkJYnQ4NTZfZHVtcChjbGllbnQpOworCWNhc2UgMjoJLyogQ29sb3IgYmFyICovCisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAwKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDEpOwogCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAlZFxuIiwgKmlhcmcpOwotCi0JCS8qIFdlIG9ubHkgaGF2ZSB2aWRlbyBidXMuCi0JCSAqIGlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIGJ0ODE5Ci0JCSAqIGlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIDA6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA2LCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCA2LCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6CS8vIENvbG9yIGJhcgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMCk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAxKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoZGVidWcgIT0gMCkKLQkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAlZFxuIiwgKmlhcmcpOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiZW5hYmxlIG91dHB1dCAlZFxuIiwgZW5jb2Rlci0+ZW5hYmxlKTsKLQkJYnJlYWs7Ci0JfQotCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGRlYnVnICE9IDApCisJCWJ0ODU2X2R1bXAoZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYnQ4NTZfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQlQ4NTYsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGJ0ODU2X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBidDg1Nl9nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBidDg1Nl9pbml0LAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBidDg1Nl92aWRlb19vcHMgPSB7CisJLnNfc3RkX291dHB1dCA9IGJ0ODU2X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gYnQ4NTZfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYnQ4NTZfb3BzID0geworCS5jb3JlID0gJmJ0ODU2X2NvcmVfb3BzLAorCS52aWRlbyA9ICZidDg1Nl92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGJ0ODU2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGJ0ODU2ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC0yNDksNDEgKzIxOSwzOCBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4NTYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCWVuY29kZXItPmVuYWJsZSA9IDE7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmJ0ODU2X29wcyk7CisJZW5jb2Rlci0+bm9ybSA9IFY0TDJfU1REX05UU0M7CiAKLQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGMsIDB4MTgpOwotCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYSwgMCk7Ci0JYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRlLCAwKTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRjLCAweDE4KTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRhLCAwKTsKKwlidDg1Nl93cml0ZShlbmNvZGVyLCAweGRlLCAwKTsKIAotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCS8vYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMCk7Ci0JYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNCwgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDEpOworCS8qYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDApOyovCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDQsIDEpOwogCi0Jc3dpdGNoIChlbmNvZGVyLT5ub3JtKSB7CisJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMCk7CisJZWxzZQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMSk7CiAKLQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMSk7Ci0JCWJyZWFrOwotCX0KLQotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDEsIDEpOwotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDQsIDApOwotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAxLCAxKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgNCwgMCk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDMsIDEpOwogCiAJaWYgKGRlYnVnICE9IDApCi0JCWJ0ODU2X2R1bXAoY2xpZW50KTsKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBidDg1Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2J0ODU2KHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NSw4ICsyNjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYnQ4NTYiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDg1NiwKLQkuY29tbWFuZCA9IGJ0ODU2X2NvbW1hbmQsCiAJLnByb2JlID0gYnQ4NTZfcHJvYmUsCiAJLnJlbW92ZSA9IGJ0ODU2X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBidDg1Nl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwppbmRleCA1OTZmOWUyLi4zNTBjYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCkBAIC0zNCwxMCArMzQsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTg2NiB2aWRlbyBlbmNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWlrZSBCZXJuc29uICYgRGF2ZSBQZXJrcyIpOwpAQCAtNDcsMjIgKzQ3LDIyIEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdHJ1Y3QgYnQ4NjYgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCByZWdbMjU2XTsKLQotCWludCBub3JtOwotCWludCBlbmFibGU7Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OwogfTsKIAotc3RhdGljIGludCBidDg2Nl93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBzdWJhZGRyLCB1OCBkYXRhKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgYnQ4NjYgKnRvX2J0ODY2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGJ0ODY2LCBzZCk7Cit9CisKK3N0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGJ0ODY2ICplbmNvZGVyLCB1OCBzdWJhZGRyLCB1OCBkYXRhKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZlbmNvZGVyLT5zZCk7CiAJdTggYnVmZmVyWzJdOwogCWludCBlcnI7CiAKQEAgLTg5LDE2MyArODksMTIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4NjZfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYnQ4NjZfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKLQlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MKLQkJCT0gVklERU9fRU5DT0RFUl9QQUwKLQkJCXwgVklERU9fRU5DT0RFUl9OVFNDCi0JCQl8IFZJREVPX0VOQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSAyOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQllbmNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCXN0YXRpYyBjb25zdCBfX3U4IGluaXRbXSA9IHsKLQkJCTB4YzgsIDB4Y2MsIC8qIENSU0NBTEUgKi8KLQkJCTB4Y2EsIDB4OTEsIC8qIENCU0NBTEUgKi8KLQkJCTB4Y2MsIDB4MjQsIC8qIFlDMTYgfCBPU0ROVU0gKi8KLQkJCTB4ZGEsIDB4MDAsIC8qICAqLwotCQkJMHhkYywgMHgyNCwgLyogU0VUTU9ERSB8IFBBTCAqLwotCQkJMHhkZSwgMHgwMiwgLyogRUFDVElWRSAqLwotCi0JCQkvKiBvdmVybGF5IGNvbG9ycyAqLwotCQkJMHg3MCwgMHhFQiwgMHg5MCwgMHg4MCwgMHhCMCwgMHg4MCwgLyogd2hpdGUgKi8KLQkJCTB4NzIsIDB4QTIsIDB4OTIsIDB4OEUsIDB4QjIsIDB4MkMsIC8qIHllbGxvdyAqLwotCQkJMHg3NCwgMHg4MywgMHg5NCwgMHgyQywgMHhCNCwgMHg5QywgLyogY3lhbiAqLwotCQkJMHg3NiwgMHg3MCwgMHg5NiwgMHgzQSwgMHhCNiwgMHg0OCwgLyogZ3JlZW4gKi8KLQkJCTB4NzgsIDB4NTQsIDB4OTgsIDB4QzYsIDB4QjgsIDB4QjgsIC8qIG1hZ2VudGEgKi8KLQkJCTB4N0EsIDB4NDEsIDB4OUEsIDB4RDQsIDB4QkEsIDB4NjQsIC8qIHJlZCAqLwotCQkJMHg3QywgMHgyMywgMHg5QywgMHg3MiwgMHhCQywgMHhENCwgLyogYmx1ZSAqLwotCQkJMHg3RSwgMHgxMCwgMHg5RSwgMHg4MCwgMHhCRSwgMHg4MCwgLyogYmxhY2sgKi8KLQotCQkJMHg2MCwgMHhFQiwgMHg4MCwgMHg4MCwgMHhjMCwgMHg4MCwgLyogd2hpdGUgKi8KLQkJCTB4NjIsIDB4QTIsIDB4ODIsIDB4OEUsIDB4YzIsIDB4MkMsIC8qIHllbGxvdyAqLwotCQkJMHg2NCwgMHg4MywgMHg4NCwgMHgyQywgMHhjNCwgMHg5QywgLyogY3lhbiAqLwotCQkJMHg2NiwgMHg3MCwgMHg4NiwgMHgzQSwgMHhjNiwgMHg0OCwgLyogZ3JlZW4gKi8KLQkJCTB4NjgsIDB4NTQsIDB4ODgsIDB4QzYsIDB4YzgsIDB4QjgsIC8qIG1hZ2VudGEgKi8KLQkJCTB4NkEsIDB4NDEsIDB4OEEsIDB4RDQsIDB4Y0EsIDB4NjQsIC8qIHJlZCAqLwotCQkJMHg2QywgMHgyMywgMHg4QywgMHg3MiwgMHhjQywgMHhENCwgLyogYmx1ZSAqLwotCQkJMHg2RSwgMHgxMCwgMHg4RSwgMHg4MCwgMHhjRSwgMHg4MCwgLyogYmxhY2sgKi8KLQkJfTsKLQkJaW50IGk7Ci0JCXU4IHZhbDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0KSAvIDI7IGkgKz0gMikKLQkJCWJ0ODY2X3dyaXRlKGNsaWVudCwgaW5pdFtpXSwgaW5pdFtpKzFdKTsKLQotCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107Ci0KLQkJaWYgKCppYXJnID09IDApCi0JCQl2YWwgfD0gMHg0MDsgLyogQ0JTV0FQICovCi0JCWVsc2UKLQkJCXZhbCAmPSB+MHg0MDsgLyogIUNCU1dBUCAqLwotCi0JCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhkYywgdmFsKTsKLQotCQl2YWwgPSBlbmNvZGVyLT5yZWdbMHhjY107Ci0JCWlmICgqaWFyZyA9PSAyKQotCQkJdmFsIHw9IDB4MDE7IC8qIE9TREJBUiAqLwotCQllbHNlCi0JCQl2YWwgJj0gfjB4MDE7IC8qICFPU0RCQVIgKi8KLQkJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGNjLCB2YWwpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAlZFxuIiwgKmlhcmcpOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dCAlZFxuIiwgKmlhcmcpOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgNDcxMToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJX191OCB2YWw7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3F1YXJlICVkXG4iLCAqaWFyZyk7Ci0KLQkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwotCQlpZiAoKmlhcmcpCi0JCQl2YWwgfD0gMTsgLyogU1FVQVJFICovCi0JCWVsc2UKLQkJCXZhbCAmPSB+MTsgLyogIVNRVUFSRSAqLwotCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6CisJLyogT25seSBQQUwgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyIGF0IHRoZSBtb21lbnQhICovCisJaWYgKCEoc3RkICYgVjRMMl9TVERfTlRTQykpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgaW50IGJ0ODY2X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdGF0aWMgY29uc3QgX191OCBpbml0W10gPSB7CisJCTB4YzgsIDB4Y2MsIC8qIENSU0NBTEUgKi8KKwkJMHhjYSwgMHg5MSwgLyogQ0JTQ0FMRSAqLworCQkweGNjLCAweDI0LCAvKiBZQzE2IHwgT1NETlVNICovCisJCTB4ZGEsIDB4MDAsIC8qICAqLworCQkweGRjLCAweDI0LCAvKiBTRVRNT0RFIHwgUEFMICovCisJCTB4ZGUsIDB4MDIsIC8qIEVBQ1RJVkUgKi8KIAotSTJDX0NMSUVOVF9JTlNNT0Q7CisJCS8qIG92ZXJsYXkgY29sb3JzICovCisJCTB4NzAsIDB4RUIsIDB4OTAsIDB4ODAsIDB4QjAsIDB4ODAsIC8qIHdoaXRlICovCisJCTB4NzIsIDB4QTIsIDB4OTIsIDB4OEUsIDB4QjIsIDB4MkMsIC8qIHllbGxvdyAqLworCQkweDc0LCAweDgzLCAweDk0LCAweDJDLCAweEI0LCAweDlDLCAvKiBjeWFuICovCisJCTB4NzYsIDB4NzAsIDB4OTYsIDB4M0EsIDB4QjYsIDB4NDgsIC8qIGdyZWVuICovCisJCTB4NzgsIDB4NTQsIDB4OTgsIDB4QzYsIDB4QjgsIDB4QjgsIC8qIG1hZ2VudGEgKi8KKwkJMHg3QSwgMHg0MSwgMHg5QSwgMHhENCwgMHhCQSwgMHg2NCwgLyogcmVkICovCisJCTB4N0MsIDB4MjMsIDB4OUMsIDB4NzIsIDB4QkMsIDB4RDQsIC8qIGJsdWUgKi8KKwkJMHg3RSwgMHgxMCwgMHg5RSwgMHg4MCwgMHhCRSwgMHg4MCwgLyogYmxhY2sgKi8KKworCQkweDYwLCAweEVCLCAweDgwLCAweDgwLCAweGMwLCAweDgwLCAvKiB3aGl0ZSAqLworCQkweDYyLCAweEEyLCAweDgyLCAweDhFLCAweGMyLCAweDJDLCAvKiB5ZWxsb3cgKi8KKwkJMHg2NCwgMHg4MywgMHg4NCwgMHgyQywgMHhjNCwgMHg5QywgLyogY3lhbiAqLworCQkweDY2LCAweDcwLCAweDg2LCAweDNBLCAweGM2LCAweDQ4LCAvKiBncmVlbiAqLworCQkweDY4LCAweDU0LCAweDg4LCAweEM2LCAweGM4LCAweEI4LCAvKiBtYWdlbnRhICovCisJCTB4NkEsIDB4NDEsIDB4OEEsIDB4RDQsIDB4Y0EsIDB4NjQsIC8qIHJlZCAqLworCQkweDZDLCAweDIzLCAweDhDLCAweDcyLCAweGNDLCAweEQ0LCAvKiBibHVlICovCisJCTB4NkUsIDB4MTAsIDB4OEUsIDB4ODAsIDB4Y0UsIDB4ODAsIC8qIGJsYWNrICovCisJfTsKKwlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXIgPSB0b19idDg2NihzZCk7CisJdTggdmFsOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdCkgLyAyOyBpICs9IDIpCisJCWJ0ODY2X3dyaXRlKGVuY29kZXIsIGluaXRbaV0sIGluaXRbaSsxXSk7CisKKwl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CisKKwlpZiAocm91dGUtPmlucHV0ID09IDApCisJCXZhbCB8PSAweDQwOyAvKiBDQlNXQVAgKi8KKwllbHNlCisJCXZhbCAmPSB+MHg0MDsgLyogIUNCU1dBUCAqLworCisJYnQ4NjZfd3JpdGUoZW5jb2RlciwgMHhkYywgdmFsKTsKKworCXZhbCA9IGVuY29kZXItPnJlZ1sweGNjXTsKKwlpZiAocm91dGUtPmlucHV0ID09IDIpCisJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KKwllbHNlCisJCXZhbCAmPSB+MHgwMTsgLyogIU9TREJBUiAqLworCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4Y2MsIHZhbCk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgaW5wdXQgJWRcbiIsIHJvdXRlLT5pbnB1dCk7CisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvKiBDb2RlIHRvIHNldHVwIHNxdWFyZSBwaXhlbHMsIG1pZ2h0IGJlIG9mIHNvbWUgdXNlIGluIHRoZSBmdXR1cmUsCisgICBidXQgaXMgY3VycmVudGx5IHVudXNlZC4gKi8KKwl2YWwgPSBlbmNvZGVyLT5yZWdbMHhkY107CisJaWYgKCppYXJnKQorCQl2YWwgfD0gMTsgLyogU1FVQVJFICovCisJZWxzZQorCQl2YWwgJj0gfjE7IC8qICFTUVVBUkUgKi8KKwlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7CisjZW5kaWYKKworc3RhdGljIGludCBidDg2Nl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9CVDg2NiwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgYnQ4NjZfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGJ0ODY2X2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGJ0ODY2X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYnQ4NjZfc19zdGRfb3V0cHV0LAorCS5zX3JvdXRpbmcgPSBidDg2Nl9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBidDg2Nl9vcHMgPSB7CisJLmNvcmUgPSAmYnQ4NjZfY29yZV9vcHMsCisJLnZpZGVvID0gJmJ0ODY2X3ZpZGVvX29wcywKK307CiAKIHN0YXRpYyBpbnQgYnQ4NjZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYnQ4NjYgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKQEAgLTI1MywyMCArMjEwLDE4IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKCplbmNvZGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYnQ4NjZfb3BzKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBidDg2Nl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi1zdGF0aWMgaW50IGJ0ODY2X2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19CX1pSMzYwNjc7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2J0ODY2KHNkKSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBidDg2Nl9pZFtdID0gewpAQCAtMjc3LDEwICsyMzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYnQ4NjYiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDg2NiwKLQkuY29tbWFuZCA9IGJ0ODY2X2NvbW1hbmQsCiAJLnByb2JlID0gYnQ4NjZfcHJvYmUsCiAJLnJlbW92ZSA9IGJ0ODY2X3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0gYnQ4NjZfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IGJ0ODY2X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwppbmRleCBjZTcxZThlLi4zMDc3YzQ1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogCXNlbGVjdCBWSURFT19NU1AzNDAwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1RWQVVESU8gaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVERBNzQzMiBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwotCXNlbGVjdCBWSURFT19UREE5ODc1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTY1ODggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciBCVDg0OCBiYXNlZCBmcmFtZSBncmFiYmVyL292ZXJsYXkgYm9hcmRzLiBUaGlzIGluY2x1ZGVzCiAJICB0aGUgTWlybywgSGF1cHBhdWdlIGFuZCBTVEIgYm9hcmRzLiBQbGVhc2UgcmVhZCB0aGUgbWF0ZXJpYWwgaW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKaW5kZXggZDI0ZGNjMC4uYjljM2JhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMKQEAgLTczLDYgKzczLDExIEBACiAKIHN0YXRpYyB2b2lkIGdlb3Zpc2lvbl9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKIAorc3RhdGljIHZvaWQgcGh5dGVjX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOworCitzdGF0aWMgdm9pZCBndjgwMHNfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CitzdGF0aWMgdm9pZCBndjgwMHNfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KTsKKwogc3RhdGljIGludCB0ZXJyYXRlY19hY3RpdmVfcmFkaW9fdXBncmFkZShzdHJ1Y3QgYnR0diAqYnR2KTsKIHN0YXRpYyBpbnQgdGVhNTc1N19yZWFkKHN0cnVjdCBidHR2ICpidHYpOwogc3RhdGljIGludCB0ZWE1NzU3X3dyaXRlKHN0cnVjdCBidHR2ICpidHYsIGludCB2YWx1ZSk7CkBAIC05MSwxMiArOTYsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHVuZXJbQlRUVl9NQVhdICA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHN2aHNbQlRUVl9NQVhdICAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCByZW1vdGVbQlRUVl9NQVhdID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gVU5TRVQgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXVkaW9kZXZbQlRUVl9NQVhdOworc3RhdGljIHVuc2lnbmVkIGludCBzYWE2NTg4W0JUVFZfTUFYXTsKIHN0YXRpYyBzdHJ1Y3QgYnR0diAgKm1hc3RlcltCVFRWX01BWF0gPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBOVUxMIH07Ci0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdW5zaWduZWQgaW50IGF1dG9sb2FkID0gMTsKLSNlbHNlCi1zdGF0aWMgdW5zaWduZWQgaW50IGF1dG9sb2FkOwotI2VuZGlmCitzdGF0aWMgdW5zaWduZWQgaW50IGF1dG9sb2FkID0gVU5TRVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGdwaW9tYXNrID0gVU5TRVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvYWxsID0gVU5TRVQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvbXV4WzVdID0geyBbIDAgLi4uIDQgXSA9IFVOU0VUIH07CkBAIC0xMTUsNiArMTE4LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheSh0dW5lciwgICAgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheShzdmhzLCAgICAgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheShyZW1vdGUsICAgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShhdWRpb2RldiwgaW50LCBOVUxMLCAwNDQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheShhdWRpb211eCwgaW50LCBOVUxMLCAwNDQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyh0cml0b24xLCJzZXQgRVRCRiBwY2kgY29uZmlnIGJpdCAiCkBAIC0xMjUsNyArMTI5LDE0IEBACiBNT0RVTEVfUEFSTV9ERVNDKGNhcmQsInNwZWNpZnkgVFYvZ3JhYmJlciBjYXJkIG1vZGVsLCBzZWUgQ0FSRExJU1QgZmlsZSBmb3IgYSBsaXN0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBsbCwic3BlY2lmeSBpbnN0YWxsZWQgY3J5c3RhbCAoMD1ub25lLCAyOD0yOCBNSHosIDM1PTM1IE1IeikiKTsKIE1PRFVMRV9QQVJNX0RFU0ModHVuZXIsInNwZWNpZnkgaW5zdGFsbGVkIHR1bmVyIHR5cGUiKTsKLU1PRFVMRV9QQVJNX0RFU0MoYXV0b2xvYWQsImF1dG9tYXRpY2FsbHkgbG9hZCBpMmMgbW9kdWxlcyBsaWtlIHR1bmVyLm8sIGRlZmF1bHQgaXMgMSAoeWVzKSIpOworTU9EVUxFX1BBUk1fREVTQyhhdXRvbG9hZCwgIm9ic29sZXRlIG9wdGlvbiwgcGxlYXNlIGRvIG5vdCB1c2UgYW55bW9yZSIpOworTU9EVUxFX1BBUk1fREVTQyhhdWRpb2RldiwgInNwZWNpZnkgYXVkaW8gZGV2aWNlOlxuIgorCQkiXHRcdC0xID0gbm8gYXVkaW9cbiIKKwkJIlx0XHQgMCA9IGF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCisJCSJcdFx0IDEgPSBtc3AzNDAwXG4iCisJCSJcdFx0IDIgPSB0ZGE3NDMyXG4iCisJCSJcdFx0IDMgPSB0dmF1ZGlvIik7CitNT0RVTEVfUEFSTV9ERVNDKHNhYTY1ODgsICJpZiAxLCB0aGVuIGxvYWQgdGhlIHNhYTY1ODggUkRTIG1vZHVsZSwgZGVmYXVsdCAoMCkgaXMgdG8gdXNlIHRoZSBjYXJkIGRlZmluaXRpb24uIik7CiBNT0RVTEVfUEFSTV9ERVNDKG5vX292ZXJsYXksImFsbG93IG92ZXJyaWRlIG92ZXJsYXkgZGVmYXVsdCAoMCBkaXNhYmxlcywgMSBlbmFibGVzKSIKIAkJIiBbc29tZSBWSUEvU0lTIGNoaXBzZXRzIGFyZSBrbm93biB0byBoYXZlIHByb2JsZW0gd2l0aCBvdmVybGF5XSIpOwogCkBAIC0yNDYsNiArMjU3LDEwIEBACiAJeyAweGExODJmZjBkLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKIAl7IDB4YTE4MmZmMGUsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAogCXsgMHhhMTgyZmYwZiwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCisJeyAweGYwNTAwMDAwLCBCVFRWX0JPQVJEX0lWQ0U4Nzg0LCAgICAgICJJVkNFLTg3ODQiIH0sCisJeyAweGYwNTAwMDAxLCBCVFRWX0JPQVJEX0lWQ0U4Nzg0LCAgICAgICJJVkNFLTg3ODQiIH0sCisJeyAweGYwNTAwMDAyLCBCVFRWX0JPQVJEX0lWQ0U4Nzg0LCAgICAgICJJVkNFLTg3ODQiIH0sCisJeyAweGYwNTAwMDAzLCBCVFRWX0JPQVJEX0lWQ0U4Nzg0LCAgICAgICJJVkNFLTg3ODQiIH0sCiAKIAl7IDB4NDE0MjQzNDQsIEJUVFZfQk9BUkRfR1JBTkRURUMsICAgICAgIkdyYW5kVGVjIE11bHRpIENhcHR1cmUiIH0sCiAJeyAweDAxMDIwMzA0LCBCVFRWX0JPQVJEX1hHVUFSRCwgICAgICAgICJHcmFuZHRlYyBHcmFuZCBYLUd1YXJkIiB9LApAQCAtMjg5LDYgKzMwNCw4IEBACiAJLyogRHVwbGljYXRlIFBDSSBJRCwgcmVjb25maWd1cmUgZm9yIHRoaXMgYm9hcmQgZHVyaW5nIHRoZSBlZXByb20gcmVhZC4KIAkqIHsgMHgxM2ViMDA3MCwgQlRUVl9CT0FSRF9IQVVQUEFVR0VfSU1QQUNUVkNCLCAgIkhhdXBwYXVnZSBJbXBhY3RWQ0IiIH0sICovCiAKKwl7IDB4MTA5ZTAzNmUsIEJUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTIsCSJDb25jZXB0cm9uaWMgQ1RWRk1pIHYyIn0sCisKIAkvKiBEVkIgY2FyZHMgKHVzaW5nIHBjaSBmdW5jdGlvbiAuMSBmb3IgbXBlZyBkYXRhIHhmZXIpICovCiAJeyAweDAwMWMxMWJkLCBCVFRWX0JPQVJEX1BJTk5BQ0xFU0FULCAgICJQaW5uYWNsZSBQQ1RWIFNhdCIgfSwKIAl7IDB4MDEwMTAwNzEsIEJUVFZfQk9BUkRfTkVCVUxBX0RJR0lUViwgIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiIH0sCkBAIC0zMDUsNiArMzIyLDIwIEBACiAJeyAweGQyMDBkYmMwLCBCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfMiwJIkRWaUNPIEZ1c2lvbkhEVFYgMiIgfSwKIAl7IDB4NzYzYzAwOGEsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWNjAwLAkiR2VvVmlzaW9uIEdWLTYwMCIgfSwKIAl7IDB4MTgwMTEwMDAsIEJUVFZfQk9BUkRfRU5MVFZfRk1fMiwJIkVuY29yZSBFTkwgVFYtRk0tMiIgfSwKKwl7IDB4NzYzZDgwMGEsIEJUVFZfQk9BUkRfR0VPVklTSU9OX0dWODAwUywgIkdlb1Zpc2lvbiBHVi04MDAoUykgKG1hc3RlcikiIH0sCisJeyAweDc2M2Q4MDBiLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNfU0wsCSJHZW9WaXNpb24gR1YtODAwKFMpIChzbGF2ZSkiIH0sCisJeyAweDc2M2Q4MDBjLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNfU0wsCSJHZW9WaXNpb24gR1YtODAwKFMpIChzbGF2ZSkiIH0sCisJeyAweDc2M2Q4MDBkLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNfU0wsCSJHZW9WaXNpb24gR1YtODAwKFMpIChzbGF2ZSkiIH0sCisKKwl7IDB4MTU0MDE4MzAsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTEiIH0sCisJeyAweDE1NDAxODMxLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My0yIiB9LAorCXsgMHgxNTQwMTgzMiwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtMyIgfSwKKwl7IDB4MTU0MDE4MzMsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTQiIH0sCisJeyAweDE1NDAxODM0LCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My01IiB9LAorCXsgMHgxNTQwMTgzNSwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtNiIgfSwKKwl7IDB4MTU0MDE4MzYsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTciIH0sCisJeyAweDE1NDAxODM3LCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My04IiB9LAorCiAJeyAwLCAtMSwgTlVMTCB9CiB9OwogCkBAIC0zMTYsNTkgKzM0Nyw1MCBAQAogCVtCVFRWX0JPQVJEX1VOS05PV05dID0gewogCQkubmFtZQkJPSAiICoqKiBVTktOT1dOL0dFTkVSSUMgKioqICIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCiAJCS5zdmhzCQk9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NSVJPXSA9IHsKIAkJLm5hbWUJCT0gIk1JUk8gUENUViIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9IQVVQUEFVR0VdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg0OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1NUQl0gPSB7CiAJCS5uYW1lCQk9ICJTVEIsIEdhdGV3YXkgUC9OIDYwMDA2OTkgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDQsIDAsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCkBAIC0zNzcsMjAyICszOTksMTc3IEBACiAJW0JUVFZfQk9BUkRfSU5URUxdID0gewogCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0RJQU1PTkRdID0gewogCQkubmFtZQkJPSAiRGlhbW9uZCBEVFYyMDAwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMCwgMSB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVkVSTUVESUFdID0gewogCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tYXNrCT0gMHgwZiwKIAkJLmdwaW9tdXggCT0geyAweDBjLCAweDA0LCAweDA4LCAweDA0IH0sCiAJCS8qICAgICAgICAgICAgICAgIDB4MDQgZm9yIHNvbWUgY2FyZHMgPz8gKi8KIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTl0gPSB7CiAJCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIiwKIAkJLnZpZGVvX2lucHV0cwk9IDUsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDAsIDApLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgwOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfRkxZVklERU9dID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gSUkgKEJ0ODQ4KSBMUjI2IC8gTUFYSSBUViBWaWRlbyBQQ0kyIExSMjYiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGMwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHhjMDAsIDB4ODAwLCAweDQwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhjMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RVUkJPVFZdID0gewogCQkubmFtZQkJPSAiSU1TL0lYbWljcm8gVHVyYm9UViIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDEsIDIsIDMgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRTg3OF0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MGYsIC8qIG9sZDogNyAqLwotCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAwLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NSVJPUFJPXSA9IHsKIAkJLm5hbWUJCT0gIk1JUk8gUENUViBwcm8iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDMwMTRmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDIwMDAxLDB4MTAwMDEsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MGMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0FEU1RFQ0hfVFZdID0gewogCQkubmFtZQkJPSAiQURTIFRlY2hub2xvZ2llcyBDaGFubmVsIFN1cmZlciBUViAoYnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEzLCAxNCwgMTEsIDcgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVkVSTUVESUE5OF0gPSB7CiAJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZDYXB0dXJlIDk4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSA0LAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gNCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEzLCAxNCwgMTEsIDcgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkubXNwMzR4eF9hbHQgICAgPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhdmVybWVkaWFfdHZfc3RlcmVvX2F1ZGlvLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfVkhYXSA9IHsKIAkJLm5hbWUJCT0gIkFpbXNsYWIgVmlkZW8gSGlnaHdheSBYdHJlbWUgKFZIWCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAyLCAxLCAzIH0sIC8qIG9sZDogezAsIDEsIDIsIDMsIDR9ICovCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9aT0xUUklYXSA9IHsKIAkJLm5hbWUJCT0gIlpvbHRyaXggVFYtTWF4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDEsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1BJWFZJRVdQTEFZVFZdID0gewogCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUGxheVRWIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAxZmUwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS8qIDIwMDMtMTAtMjAgYnkgIkFudG9uIEEuIEFyYXBvdiIgPGFyYXBvdkBtYWlsLnJ1PiAqLwogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDAyMDAwLApAQCAtNTgwLDE5NCArNTc3LDE3MCBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1dJTlZJRVdfNjAxXSA9IHsKIAkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luVmlldyA2MDEiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDgzMDBmOCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxLCAwKSwKIAkJLmdwaW9tdXggCT0geyAweDRmYTAwNywweGNmYTAwNywweGNmYTAwNywweGNmYTAwNyB9LAogCQkuZ3Bpb211dGUgCT0gMHhjZmEwMDcsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudm9sdW1lX2dwaW8JPSB3aW52aWV3X3ZvbHVtZSwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVkVDX0lOVEVSQ0FQXSA9IHsKIAkJLm5hbWUJCT0gIkFWRUMgSW50ZXJjYXB0dXJlIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAyLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMCwgMCwgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0xJRkVfRkxZS0lUXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIEVaIC9GbHlLaXQgTFIzOCBCdDg0OCAoY2FwdHVyZSBvbmx5KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMHg4ZGZmMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfQ0VJX1JBRkZMRVNdID0gewogCQkubmFtZQkJPSAiQ0VJIFJhZmZsZXMgQ2FyZCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMywKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzCQk9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9DT05GRVJFTkNFVFZdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIEx1Y2t5IFN0YXIgSW1hZ2UgV29ybGQgQ29uZmVyZW5jZVRWIExSNTAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDIsICAvKiB0dW5lciwgbGluZSBpbiAqLwotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgIHR1bmVyLCBsaW5lIGluICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1BIT0VCRV9UVk1BU10gPSB7CiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwNTAvIFBob2ViZSBUdiBNYXN0ZXIgKyBGTSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4YzAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAxLCAweDgwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NT0RURUNfMjA1XSA9IHsKIAkJLm5hbWUJCT0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTIwMS9NTTIwMi9NTTIwNS9NTTIxMC9NTTIxNSBQQ1RWLCBidDg3OCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkuaGFzX2RpZ19pbgk9IDEsCiAJCS5ncGlvbWFzawk9IDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAtMSB9LAotCQkuZGlnaXRhbF9tb2RlICAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwKSwgLyogaW5wdXQgMiBpcyBkaWdpdGFsICovCisJCS8qIC5kaWdpdGFsX21vZGU9IERJR0lUQUxfTU9ERV9DQU1FUkEsICovCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMCwgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUxQU19UU0JCNV9QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgxOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfTUFHSUNUVklFVzA2MV0gPSB7CiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwNVgvMDZYIChidDg3OCkgW21hbnkgdmVuZG9yc10iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGUwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhjMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVJdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVisgVmVyc2lvbiAxLjAgKEJ0ODQ4KS8gVGVycmEgVFZhbHVlIFZlcnNpb24gMS4wLyBWb2JpcyBUVi1Cb29zdGFyIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxZjBmZmYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NDAwMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSB0ZXJyYXR2X2F1ZGlvLAogCX0sCiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdfV0NBTV0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgV2luQ2FtIG5ld2VyIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAwLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01BWEldID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTgvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjUwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAyLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfU0VDQU0sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1RFUlJBVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgVGVycmFUVisgVmVyc2lvbiAxLjEgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MWYwZmZmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAweDAwMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gdGVycmF0dl9hdWRpbywKIAkJLyogR1BJTyB3aXJpbmc6CiAJCUV4dGVybmFsIDIwIHBpbiBjb25uZWN0b3IgKGZvciBBY3RpdmUgUmFkaW8gVXBncmFkZSBib2FyZCkKQEAgLTgwNSw4NyArNzc4LDc3IEBACiAJCS8qIEphbm5payBGcml0c2NoIDxqYW5uaWtAdGVjaGZhay51bmktYmllbGVmZWxkLmRlPiAqLwogCQkubmFtZQkJPSAiSW1hZ2VuYXRpb24gUFhDMjAwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDUsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDEsIC8qIHdhczogNCAqLwogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDAsIDApLAogCQkuZ3Bpb211eCAJPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubXV4c2VsX2hvb2sgICAgPSBQWEMyMDBfbXV4c2VsLAogCiAJfSwKIAlbQlRUVl9CT0FSRF9GTFlWSURFT185OF0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLCAgLyogMHg4ZGZlMDAgKi8KLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHgwODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0lQUk9UVl0gPSB7CiAJCS5uYW1lCQk9ICJGb3JtYWMgaVByb1RWLCBGb3JtYWMgUHJvVFYgSSAoYnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMCwgMCwgMCB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0lOVEVMX0NfU19QQ0ldID0gewogCQkubmFtZQkJPSAiSW50ZWwgQ3JlYXRlIGFuZCBTaGFyZSBQQ0kvIFNtYXJ0IFZpZGVvIFJlY29yZGVyIElJSSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFUlJBVFZBTFVFXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFZhbHVlIFZlcnNpb24gQnQ4NzgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGZmZmYwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHg1MDAsIDAsIDB4MzAwLCAweDkwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg5MDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1dJTkZBU1QyMDAwXSA9IHsKIAkJLm5hbWUJCT0gIkxlYWR0ZWsgV2luRmFzdCAyMDAwLyBXaW5GYXN0IDIwMDAgWFAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSwgMCB9LCAvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS8qIFRWLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSwgMCksCiAJCS8qIEFsZXhhbmRlciBWYXJha2luIDxhdmFyYWtpbkBob3RtYWlsLmNvbT4gW3N0ZXJlbyB2ZXJzaW9uXSAqLwogCQkuZ3Bpb21hc2sJPSAweGIzMzAwMCwKIAkJLmdwaW9tdXggCT0geyAweDEyMjAwMCwweDEwMDAsMHgwMDAwLDB4NjIwMDAwIH0sCkBAIC05MDYsMjE3ICs4NjksMTkxIEBACiAJCS5oYXNfcmFkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLCAvKiBkZWZhdWx0IGZvciBub3csIGdwaW8gcmVhZHMgQkZGRjA2IGZvciBQYWwgYmcrZGsgKi8KIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSB3aW5mYXN0MjAwMF9hdWRpbywKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0NIUk9OT1NfVlMyXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4IExSNTAgLyBDaHJvbm9zIFZpZGVvIFNodXR0bGUgSUkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDMsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgyNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfVFlQSE9PTl9UVklFV10gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAgLyBUeXBob29uIFRWaWV3IFRWL0ZNIFR1bmVyIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9QWEVMVldQTFRWUFJPXSA9IHsKIAkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBwcm8iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGZmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDIxLCAweDIwLCAweDI0LCAweDJjIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDI5LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQUdJQ1RWSUVXMDYzXSA9IHsKIAkJLm5hbWUJCT0gIkFza2V5IENQSDA2WCBUVmlldzk5IiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg1NTFlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAJPSB7IDB4NTUxNDAwLCAweDU1MTIwMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg1NTFjMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfUElOTkFDTEVdID0gewogCQkubmFtZQkJPSAiUGlubmFjbGUgUENUViBTdHVkaW8vUmF2ZSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDMwMDBGLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAyLCAweGQwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDI4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9TVEIyXSA9IHsKIAkJLm5hbWUJCT0gIlNUQiBUViBQQ0kgRk0sIEdhdGV3YXkgUC9OIDYwMDA3MDQgKGJ0ODc4KSwgM0RmeCBWb29kb29UViAxMDAiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyA0LCAwLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0FWUEhPTkU5OF0gPSB7CiAJCS5uYW1lCQk9ICJBVmVyTWVkaWEgVFZQaG9uZSA5OCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gNCwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDQsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMywgNCwgMTEsIDcgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gYXZlcm1lZGlhX3R2cGhvbmVfYXVkaW8sCiAJfSwKIAlbQlRUVl9CT0FSRF9QVjk1MV0gPSB7CiAJCS5uYW1lCQk9ICJQcm9WaWRlbyBQVjk1MSIsIC8qIHBpYzE2YzU0ICovCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMCwgMH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9PTkFJUl9UVl0gPSB7CiAJCS5uYW1lCQk9ICJMaXR0bGUgT25BaXIgVFYiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGUwMGIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4ZmY5ZmY2LCAweGZmOWZmNiwgMHhmZjFmZjcsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4ZmYzZmZjLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1NJR01BX1RWSUlfRk1dID0gewogCQkubmFtZQkJPSAiU2lnbWEgVFZJSS1GTSIsCiAJCS52aWRlb19pbnB1dHMJPSAyLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAzLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAxLCAwLCAyIH0sCiAJCS5ncGlvbXV0ZSAJPSAzLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMX05PTkUsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT04yXSA9IHsKIAkJLm5hbWUJCT0gIk1BVFJJWC1WaXNpb24gTVYtRGVsdGEgMiIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9aT0xUUklYX0dFTklFXSA9IHsKIAkJLm5hbWUJCT0gIlpvbHRyaXggR2VuaWUgVFYvRk0iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGJjZjAzZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHhiYzgwM2YsIDB4YmM5MDNmLCAweGJjYjAzZiwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhiY2IwM2YsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAzOUZSNV9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVJSQVRWUkFESU9dID0gewogCQkubmFtZQkJPSAiVGVycmF0ZWMgVFYvUmFkaW8rIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg3MDAwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLApAQCAtMTEyNCw3ICsxMDYxLDYgQEAKIAkJLnBsbAkJPSBQTExfMzUsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCkBAIC0xMTMyLDUxICsxMDY4LDQ2IEBACiAJW0JUVFZfQk9BUkRfRFlOQUxJTktdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDN4LyBEeW5hbGluayBNYWdpYyBUVmlldyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0gezIsMCwwLDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0dWQkNUVjNQQ0ldID0gewogCQkubmFtZQkJPSAiSU9EQVRBIEdWLUJDVFYzL1BDSSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDEwZjAwLAotCQkubXV4c2VsCQk9IHsyLCAzLCAwLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDAsIDApLAogCQkuZ3Bpb211eCAJPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FMUFNfVFNIQzZfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBndmJjdHYzcGNpX2F1ZGlvLAogCX0sCiAJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBBS10gPSB7CiAJCS5uYW1lCQk9ICJQcm9saW5rIFBWLUJUODc4UCs0RSAvIFBpeGVsVmlldyBQbGF5VFYgUEFLIC8gTGVuY28gTVhUVi05NTc4IENQIiwKIAkJLnZpZGVvX2lucHV0cwk9IDUsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKKwkJLmhhc19kaWdfaW4JPSAxLAogCQkuZ3Bpb21hc2sJPSAweEFBMDAwMCwKLQkJLm11eHNlbAkJPSB7IDIsMywxLDEsLTEgfSwKLQkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSwgMCksIC8qIGluIDQgaXMgZGlnaXRhbCAqLworCQkvKiAuZGlnaXRhbF9tb2RlPSBESUdJVEFMX01PREVfQ0FNRVJBLCAqLwogCQkuZ3Bpb211eCAJPSB7IDB4MjAwMDAsIDAsIDB4ODAwMDAsIDB4ODAwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YTgwMDAsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZQk9IDEsCiAJCS8qIEdQSU8gd2lyaW5nOiAoZGlmZmVyZW50IGZyb20gUmV2LjRDICEpCiAJCQlHUElPMTc6IFU0LkEwIChmaXJzdCBoZWY0MDUyYnQpCkBAIC0xMTkxLDE3ICsxMTIyLDE1IEBACiAJW0JUVFZfQk9BUkRfRUFHTEVdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRWFnbGUgV2lyZWxlc3MgQ2Fwcmljb3JuMiAoYnQ4NzhBKSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCAvKiBUVU5FUl9BTFBTX1RNREgyX05UU0MgKi8sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTIwOSwxMSArMTEzOCwxMCBAQAogCQkvKiBEYXZpZCBIw6RyZGVtYW4gPGRhdmlkQDJnZW4uY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTdHVkaW8gUHJvIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMzAwMEYsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDB4ZDAwMDEsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEwLAogCQkJCS8qIHNvdW5kIHBhdGggKDUgc291cmNlcyk6CkBAIC0xMjI5LDI1ICsxMTU3LDIyIEBACiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RWSUVXX1JEU19GTV0gPSB7CiAJCS8qIENsYWFzIExhbmdiZWhuIDxjbGFhc0BiaWdmb290LmNvbT4sCiAJCVN2ZW4gR3JvdGhrbGFncyA8c3ZlbkB1cGIuZGU+ICovCiAJCS5uYW1lCQk9ICJUeXBob29uIFRWaWV3IFJEUyArIEZNIFN0ZXJlbyAvIEtOQzEgVFYgU3RhdGlvbiBSRFMiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDMsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDFjLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAweDEwLCA4IH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTElGRVRFQ185NDE1XSA9IHsKQEAgLTEyNTgsMTEgKzExODMsMTAgQEAKIAkJCW9wdGlvbnMgdHVuZXIgdHlwZT01ICovCiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwIC9GbHlWaWRlbyBBMi8gTGlmZXRlYyBMVCA5NDE1IFRWIFtMUjkwXSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MThlMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgwMDAwLDB4MDgwMCwweDEwMDAsMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4ZTAsCiAJCQkvKiBGb3IgY2FyZHMgd2l0aCB0ZGE5ODIwL3RkYTk4MjE6CkBAIC0xMjcyLDI1ICsxMTk2LDIyIEBACiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVl0gPSB7CiAJCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+CiAJCW9sZCBFYXN5IFRWIEJUODQ4IHZlcnNpb24gKG1vZGVsIENQSDAzMSkgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDAzMS8gQkVTVEJVWSBFYXN5IFRWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDM4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEyOTgsMTcgKzEyMTksMTUgQEAKIAkJLyogR29yZG9uIEhleWRvbiA8Z2poZXlkb25AYmlnZm9vdC5jb20gKCc5OCkgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkxpZmV2aWV3IEZseVZpZGVvIDk4Rk0gTFI1MCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MTgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJCS8qIFRoaXMgaXMgdGhlIHVsdGltYXRlIGNoZWFwbyBjYXB0dXJlIGNhcmQKIAkJKiBqdXN0IGEgQlQ4NDhBIG9uIGEgc21hbGwgUENCIQpAQCAtMTMxNiw1MSArMTIzNSw0NSBAQAogCVtCVFRWX0JPQVJEX0dSQU5EVEVDXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjICdHcmFuZCBWaWRlbyBDYXB0dXJlJyAoQnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FTS0VZX0NQSDA2MF0gPSB7CiAJCS8qIERhbmllbCBIZXJyaW5ndG9uIDxkYW5pZWwuaGVycmluZ3RvbkBob21lLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFza2V5IENQSDA2MC8gUGhvZWJlIFRWIE1hc3RlciBPbmx5IChObyBGTSkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweGUwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4NDAwLCAweDQwMCwgMHg0MDAsIDB4NDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDgwMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ180MDM2Rlk1X05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FTS0VZX0NQSDAzWF0gPSB7CiAJCS8qIE1hdHRpIE1vdHR1cyA8bW90dHVzQHBoeXNpYy51dC5lZT4gKi8KIAkJLm5hbWUJCT0gIkFza2V5IENQSDAzeCBUViBDYXB0dXJlciIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDNjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEzNjgsMzQgKzEyODEsMzAgQEAKIAkJLyogUGhpbGlwIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTW9kdWxhciBUZWNobm9sb2d5IE1NMTAwUENUViIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDIsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMTEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMSB9LAogCQkuZ3Bpb211dGUgCT0gOCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0dNVjFdID0gewogCQkvKiBBZHJpYW4gQ294IDxhZHJpYW5AaHVtYm9sZHQuY28udWsgKi8KIAkJLm5hbWUJCT0gIkFHIEVsZWN0cm9uaWNzIEdNVjEiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzCQk9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RiwKLQkJLm11eHNlbAkJPSB7IDIsIDIgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgfSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0JFU1RCVVlfRUFTWVRWMl0gPSB7CiAJCS8qIE1pZ3VlbCBBbmdlbCBBbHZhcmV6IDxtYWFjcnV6QG5hdmVnYWxpYS5jb20+CkBAIC0xNDAzLDM0ICsxMzEyLDMwIEBACiAJCXNwZWNpYWwgdGhhbmtzIHRvIEluZm9ybWF0aWNhIE1pZXJlcyBmb3IgcHJvdmlkaW5nIHRoZSBjYXJkICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjEvIEJFU1RCVVkgRWFzeSBUViAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDIsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMSwgMCwgNCwgNCB9LAogCQkuZ3Bpb211dGUgCT0gOSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FUSV9UVldPTkRFUl0gPSB7CiAJCS8qIEx1a2FzIEdlYmF1ZXIgPGdlYnlAdm9sbnkuY3o+ICovCiAJCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmMDNmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggCT0geyAweGJmZmUsIDAsIDB4YmZmZiwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHhiZmZlLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHg0MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDM4LDI3ICsxMzQzLDI0IEBACiAJCS8qIEx1a2FzIEdlYmF1ZXIgPGdlYnlAdm9sbnkuY3o+ICovCiAJCS5uYW1lCQk9ICJBVEkgVFYtV29uZGVyIFZFIiwKIAkJLnZpZGVvX2lucHV0cwk9IDIsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDEsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAwLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDAsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDEsIDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9URU1JQ180MDA2Rk41X01VTFRJX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfRkxZVklERU8yMDAwXSA9IHsKIAkJLyogRGVlSmF5IDxkZWVqYXlAd2VzdGVsOTAwLm5ldCAoMjAwMFMpICovCiAJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyAyMDAwUyBMUjkwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMywKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxOGUwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwLCAxKSwKIAkJCQkvKiBSYWRpbyBjaGFuZ2VkIGZyb20gMWU4MCB0byAweDgwMCB0byBtYWtlCiAJCQkJRmx5VmlkZW8yMDAwUyBpbiAuaHUgaGFwcHkgKGdtKSovCiAJCQkJLyogLWRrLT8/Pzogc2V0IG11dGU9MHgxODAwIGZvciB0ZGE5ODc0aCBkYXVnaHRlcmJvYXJkICovCkBAIC0xNDcxLDQwICsxMzczLDM1IEBACiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFUlJBVFZBTFVFUl0gPSB7CiAJCS5uYW1lCQk9ICJUZXJyYXRlYyBUVmFsdWVSYWRpbyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZmZmZjAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDUwMCwgMHg1MDAsIDB4MzAwLCAweDkwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg5MDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9HVkJDVFY0UENJXSA9IHsKIAkJLyogVEFOQUtBIEtlaSA8cGVnMDA2MjVAbmlmdHkuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWLUJDVFY0L1BDSSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDEwZjAwLAotCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMCwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsweDEwMDAwLCAwLCAweDEwMDAwLCAwIH0sCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfU0hBUlBfMlU1SkY1NTQwX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gZ3ZiY3R2M3BjaV9hdWRpbywKIAl9LAogCkBAIC0xNTE0LDkgKzE0MTEsOCBAQAogCQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQogCQkqIHNvdW5kIHByb2JsZW1zIHdpdGggdGhpcyBjYXJkLiAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCiAJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCiAJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCkBAIC0xNTI0LDEwICsxNDIwLDkgQEAKIAkJLmdwaW9tdXRlIAk9IDB4OTQ3ZmZmLAogCQkvKiB0dnR1bmVyLCByYWRpbywgICBleHRlcm5hbCxpbnRlcm5hbCwgbXV0ZSwgIHN0ZXJlbwogCQkqIHR1bmVyLCBDb21wb3NpdCwgU1ZpZCwgQ29tcG9zaXQtb24tU3ZpZC1hZGFwdGVyICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyAsMCAsMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01UMjAzMiwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKQEAgLTE1MzYsOSArMTQzMSw4IEBACiAJCS8qIHRyeSAiaW5zbW9kIG1zcDM0MDAgc2ltcGxlPTAiIGlmIHlvdSBoYXZlCiAJCSogc291bmQgcHJvYmxlbXMgd2l0aCB0aGlzIGNhcmQuICovCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDRmOGEwMCwKIAkJLyogMHgxMDAwMDA6IDE9TVNQIGVuYWJsZWQgKDA9ZGlzYWJsZSBhZ2FpbikKIAkJKiAweDAxMDAwMDogQ29ubmVjdGVkIHRvICJTMCIgb24gdGRhOTg4MCAoMD1QYWwvQkcsIDE9TlRTQykgKi8KQEAgLTE1NDYsMTAgKzE0NDAsOSBAQAogCQkuZ3Bpb211dGUgCT0gMHg5NDdmZmYsCiAJCS8qIHR2dHVuZXIsIHJhZGlvLCAgIGV4dGVybmFsLGludGVybmFsLCBtdXRlLCAgc3RlcmVvCiAJCSogdHVuZXIsIENvbXBvc2l0LCBTVmlkLCBDb21wb3NpdC1vbi1TdmlkLWFkYXB0ZXIgKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzICwwICwxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAxKSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTVQyMDMyLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LApAQCAtMTU1NywzMSArMTQ1MCwyNyBAQAogCQkvKiBQaGlsaXAgQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQWN0aXZlIEltYWdpbmcgQUlNTVMiLAogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiksCiAJCS5ncGlvbWFzayAgICAgICA9IDAKIAl9LAogCVtCVFRWX0JPQVJEX1BWX0JUODc4UF9QTFVTXSA9IHsKIAkJLyogVG9tYXN6IFB5cmEgPGhlbGxmaXJlQHNlZGV6LmlxLnBsPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjRDLDhFKSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDQsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDQsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDE1LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDExLCA3IH0sIC8qIFRWIGFuZCBSYWRpbyB3aXRoIHNhbWUgR1BJTyAhICovCiAJCS5ncGlvbXV0ZSAJPSAxMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9MR19QQUxfSV9GTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCQkvKiBHUElPIHdpcmluZzoKIAkJCUdQSU8wOiBVNC5BMCAoaGVmNDA1MmJ0KQpAQCAtMTU5NCwxNSArMTQ4MywxNCBAQAogCVtCVFRWX0JPQVJEX0ZMWVZJREVPOThFWl0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OEVaIChjYXB0dXJlIG9ubHkpIExSNTEiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LCAvKiBBVjEsIEFWMiwgU1ZIUywgQ1ZpZCBhZGFwdGVyIG9uIFNWSFMgKi8KKwkJLyogQVYxLCBBVjIsIFNWSFMsIENWaWQgYWRhcHRlciBvbiBTVkhTICovCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHg0OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjEwLDExICsxNDk4LDEwIEBACiAJCS8qIERhcml1c3ogS293YWxld3NraSA8ZGFyZWtrQGF1dG9tZXgucGw+ICovCiAJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArOUIgKFBsYXlUViBQcm8gcmV2LjlCIEZNK05JQ0FNKSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4M2YsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MDEsIDB4MDAsIDB4MDMsIDB4MDMgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDksCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCkBAIC0xNjIzLDcgKzE1MTAsNiBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBwdmJ0ODc4cDliX2F1ZGlvLCAvKiBOb3RlOiBub3QgYWxsIGNhcmRzIGhhdmUgc3RlcmVvICovCiAJCS5oYXNfcmFkaW8JPSAxLCAgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHJhZGlvICovCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCkBAIC0xNjQwLDQ5ICsxNTI2LDQyIEBACiAJCS8qIHlvdSBtdXN0IGp1bXBlciBKUDUgZm9yIHRoZSBjYXJkIHRvIHdvcmsgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlNlbnNvcmF5IDMxMSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDUsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSA0LAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDAsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfUlY2MDVdID0gewogCQkvKiBNaWd1ZWwgRnJlaXRhcyA8bWlndWVsQGNldHVjLnB1Yy1yaW8uYnI+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJSZW1vdGVWaXNpb24gTVggKFJWNjA1KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCiAJCS5ncGlvbWFzazIgICAgICA9IDB4MDdmZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAweDMzLCAweDEzLCAweDIzLCAweDQzLCAweGYzLCAweDczLCAweGUzLCAweDAzLAotCQkJCTB4ZDMsIDB4YjMsIDB4YzMsIDB4NjMsIDB4OTMsIDB4NTMsIDB4ODMsIDB4YTMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5tdXhzZWxfaG9vayAgICA9IHJ2NjA1X211eHNlbCwKIAl9LAogCVtCVFRWX0JPQVJEX1BPV0VSQ0xSX01UVjg3OF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQb3dlcmNvbG9yIE1UVjg3OC8gTVRWODc4Ui8gTVRWODc4RiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDIsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDFDODAwRiwgIC8qIEJpdDAtMjogQXVkaW8gc2VsZWN0LCA4LTEyOnJlbW90ZSBjb250cm9sIDE0OnJlbW90ZSB2YWxpZCAxNTpyZW1vdGUgcmVzZXQgKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxLCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCkBAIC0xNjkyLDQyICsxNTcxLDM4IEBACiAJCS8qIE1hc2FraSBTdXp1a2kgPG1hc2FraUBidHJlZS5vcmc+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJDYW5vcHVzIFdpbkRWUiBQQ0kgKENPTVBBUSBQcmVzYXJpbyAzNTI0SlAsIDUxMTJKUCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDE0MDAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gd2luZHZyX2F1ZGlvLAogCX0sCiAJW0JUVFZfQk9BUkRfR1JBTkRURUNfTVVMVEldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiR3JhbmRUZWMgTXVsdGkgQ2FwdHVyZSBDYXJkIChCdDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0tXT1JMRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJKZXR3YXkgVFYvQ2FwdHVyZSBKVy1UVjg3OC1GQkssIEt3b3JsZCBLVy1UVjg3OFJGIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMywKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sICAgLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KKwkJLyogVHVuZXIsIFNWaWQsIFNWSFMsIFNWaWQgdG8gU1ZIUyBjb25uZWN0b3IgKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDQsIDQgfSwvKiBZZXMsIHRoaXMgdHVuZXIgdXNlcyB0aGUgc2FtZSBhdWRpbyBvdXRwdXQgZm9yIFRWIGFuZCBGTSByYWRpbyEKIAkJCQkJCSogVGhpcyBjYXJkIGxhY2tzIGV4dGVybmFsIEF1ZGlvIEluLCBzbyB3ZSBtdXRlIGl0IG9uIEV4dC4gJiBJbnQuCiAJCQkJCQkqIFRoZSBQQ0IgY2FuIHRha2UgYSBzYngxNjM3L3NieDE2NzMsIHdpcmluZyB1bmtub3duLgpAQCAtMTc0MSw3ICsxNjE2LDYgQEAKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkvKiBTYW1zdW5nIFRDUEE5MDk1UEMyN0EgKEJHK0RLKSwgcGhpbGlwcyBjb21wYXRpYmxlLCB3L0ZNLCBzdGVyZW8gYW5kCiAJCXJhZGlvIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0b3JzIHdvcmsgZmluZS4gKi8KIAkJLmhhc19yYWRpbwk9IDEsCkBAIC0xNzU5LDI3ICsxNjMzLDI0IEBACiAJCS8qIEFydGh1ciBUZXR6bGFmZi1EZWFzLCBEU1AgRGVzaWduIEx0ZCA8c29mdHdhcmVAZHNwZGVzaWduLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkRTUCBEZXNpZ24gVENWSURFTyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCQkvKiAtLS0tIGNhcmQgMHg1MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdFUFZSXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBQVlIiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDAsIDEsIDEpLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAKIAkJLmdwaW9tYXNrICAgICAgID0gNywKIAkJLmdwaW9tdXggICAgICAgID0gezd9LApAQCAtMTc4NywzMiArMTY1OCwyOCBAQAogCVtCVFRWX0JPQVJEX0dWQkNUVjVQQ0ldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSU9EQVRBIEdWLUJDVFY1L1BDSSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MGYwZjgwLAotCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsweDAzMDAwMCwgMHgwMTAwMDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDIwMDAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGd2YmN0djVwY2lfYXVkaW8sCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9PU1BSRVkxeDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMC8xNTAgKDg3OCkiLCAvKiAweDEoMnwzKS00NUM2LUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDQsICAgICAgICAgICAgICAgICAgLyogaWQtaW5wdXRzLWNsb2NrICovCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDIsIDAsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDIsIDAsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4MjAsMTQgKzE2ODcsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkxeDBfODQ4XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NDgpIiwgLyogMHgwNC01NEMwLUMxICYgb2xkZXIgYm9hcmRzICovCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4MzcsMTQgKzE3MDIsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkxMDFfODQ4XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDEgKDg0OCkiLCAvKiAweDA1LTQwQzAtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTg1MiwxNCArMTcxNSwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTF4MV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSIsICAgICAgIC8qIDB4MSg0fDUpLTAwMDQtQzQgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDApLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4NjcsMTQgKzE3MjgsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkxeDFfU1ZJRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxLzE1MSB3LyBzdmlkIiwgIC8qIDB4KDE2fDE3fDIwKS0wMEM0LUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDAsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4ODIsMTQgKzE3NDEsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkyeHhdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yMDEvMjUwLzI1MSIsICAvKiAweDEoOHw5fEV8RiktMDAwNC1DNCAqLwogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCB9LAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4OTksMTQgKzE3NTYsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkyeDBfU1ZJRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwLzI1MCIsICAgLyogMHgxKEF8QiktMDBDNC1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMTkxNCwxNCArMTc2OSwxMiBAQAogCVtCVFRWX0JPQVJEX09TUFJFWTJ4MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjEwLzIyMC8yMzAiLCAgIC8qIDB4MShBfEIpLTA0QzAtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMyksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE5MjksMTQgKzE3ODIsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVk1MDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDUwMCIsICAgLyogNTAwICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE5NDQsMTIgKzE3OTUsMTAgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVk1NDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDU0MCIsICAgLyogNTQwICovCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE5NTksMTQgKzE4MDgsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkyMDAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAwIiwgIC8qIDIwMDAgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMyksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwgICAgICAvKiBtdXN0IGF2b2lkLCBjb25mbGljdHMgd2l0aCB0aGUgYnQ4NjAgKi8KQEAgLTE5NzUsMTQgKzE4MjIsMTIgQEAKIAkJLyogTSBHIEJlcmJlcmljaCA8YmVyYmVyaWNAZm9yd2lzcy51bmktcGFzc2F1LmRlPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSURTIEVhZ2xlIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiksCiAJCS5tdXhzZWxfaG9vayAgICA9IGVhZ2xlX211eHNlbCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKQEAgLTE5OTEsMTYgKzE4MzYsMTQgQEAKIAlbQlRUVl9CT0FSRF9QSU5OQUNMRVNBVF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQaW5uYWNsZSBQQ1RWIFNhdCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKQEAgLTIwMDgsMTggKzE4NTEsMTYgQEAKIAlbQlRUVl9CT0FSRF9GT1JNQUNfUFJPVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiRm9ybWFjIFByb1RWIElJIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAyLAogCQkvKiBUViwgQ29tcDEsIENvbXBvc2l0ZSBvdmVyIFNWSUQgY29uLCBTVklEICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMiwgMCwgMCB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJLyogc291bmQgcm91dGluZzoKIAkJR1BJTz0weDAwLDB4MDEsMHgwMzogbXV0ZSAoPykKIAkJMHgwMjogYm90aCBUViBhbmQgcmFkaW8gKHR1bmVyOiBGTTEyMTYvSSkKQEAgLTIwMzMsNjIgKzE4NzQsNTUgQEAKIAlbQlRUVl9CT0FSRF9NQUNIVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiTWFjaFRWIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAzfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX0VVUkVTWVNfUElDT0xPXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkV1cmVzeXMgUGljb2xvIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMCwgMX0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9QVjE1MF0gPSB7CiAJCS8qIEx1YyBWYW4gSG9leWxhbmR0IDxsdWNAZS1tYWdpYy5iZT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb1ZpZGVvIFBWMTUwIiwgLyogMHg0ZiAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMyksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0FEX1RWSzUwM10gPSB7CiAJCS8qIEhpcm9zaGkgVGFrZWthd2EgPHNpYW5AYmlnLm9yLmpwPiAqLwogCQkvKiBUaGlzIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElEICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBRC1UVks1MDMiLCAvKiAweDYzICovCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxZTgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS8qICAgICAgICAgICAgICAgICAgVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwsIG9mZiwgIG9uICovCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwOCwgIDB4MGYsICAweDBhLCAgICAgMHgwOCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwZiwKQEAgLTIwOTcsNyArMTkzMSw2IEBACiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGFkdHZrNTAzX2F1ZGlvLAogCX0sCiAKQEAgLTIxMDUsMTcgKzE5MzgsMTUgQEAKIAlbQlRUVl9CT0FSRF9IRVJDVUxFU19TTV9UVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIZXJjdWxlcyBTbWFydCBUViBTdGVyZW8iLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS8qIE5vdGVzOgogCQktIGNhcmQgbGFja3Mgc3Vic3lzdGVtIElECiAJCS0gc3RlcmVvIHZhcmlhbnQgdy8gZGF1Z2h0ZXIgYm9hcmQgd2l0aCB0ZGE5ODc0YSBAMHhiMApAQCAtMjEyOSwxNiArMTk2MCwxNSBAQAogCVtCVFRWX0JPQVJEX1BBQ0VUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQYWNlIFRWICYgUmFkaW8gQ2FyZCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LCAvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS8qIFR1bmVyLCBDVmlkLCBTVmlkLCBDVmlkIG92ZXIgU1ZpZCBjb25uZWN0b3IgKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLyogQnQ4NzgsIEJ0ODMyLCBGSTEyNDYgdHVuZXI7IG5vIHBjaSBzdWJzeXN0ZW0gaWQKQEAgLTIxNTIsMjcgKzE5ODIsMzQgQEAKIAkJLyogQ2hyaXMgV2lsbGluZyA8Y2hyaXNAdmlzbGFiLnVzeWQuZWR1LmF1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTIwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIpLAorCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCisJfSwKKwlbQlRUVl9CT0FSRF9JVkNFODc4NF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJJVkNFLTg3ODQiLAorCQkudmlkZW9faW5wdXRzICAgPSAxLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCiAJW0JUVFZfQk9BUkRfWEdVQVJEXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kIFgtR3VhcmQgLyBUcnVzdCA4MTRQQ0kiLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmdwaW9tYXNrMiAgICAgID0gMHhmZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLDIsMiwyLCAzLDMsMywzLCAxLDEsMSwxLCAwLDAsMCwwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLDIsMiwyLCAzLDMsMywzLCAxLDEsMSwxLCAwLDAsMCwwKSwKIAkJLm11eHNlbF9ob29rICAgID0geGd1YXJkX211eHNlbCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKQEAgLTIxODQsMTYgKzIwMjEsMTQgQEAKIAlbQlRUVl9CT0FSRF9ORUJVTEFfRElHSVRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk5lYnVsYSBFbGVjdHJvbmljcyBEaWdpVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZQk9IDEsCiAJCS5ncGlvbWFzawk9IDB4MWIsCkBAIC0yMjAzLDExOCArMjAzOCwxMDEgQEAKIAkJLyogSm9yZ2UgQm9uY29tcHRlIC0gRFRJMiA8am9yZ2VAZHRpMi5uZXQ+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE0MyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVkQwMDlYMV9WRDAxMV9NSU5JRElOXSA9IHsKIAkJLyogTS5LbGFockBwaHl0ZWMuZGUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgVkQtMDExIE1pbmlESU4gKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9WRDAwOVgxX1ZEMDExX0NPTUJJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDktWDEgVkQtMDExIENvbWJpIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkJLyogLS0tLSBjYXJkIDB4NmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1ZEMDA5X01JTklESU5dID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAwOSBNaW5pRElOIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAxMCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCi0JCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKLQkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAwIH0sCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIHVzZWQgZm9yIGV4dGVybmFsIHZvZGVvIG11eCAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiwgMywgMywgMywgMywgMSwgMCksCisJCS5tdXhzZWxfaG9vawk9IHBoeXRlY19tdXhzZWwsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZEMDA5X0NPTUJJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgQ29tYmkgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDEwLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gOSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogZ3Bpb21hc2syIGRlZmluZXMgdGhlIGJpdHMgdXNlZCB0byBzd2l0Y2ggYXVkaW8KLQkJCQkJdmlhIHRoZSB1cHBlciBuaWJibGUgb2YgbXV4c2VsLiBoZXJlOiB1c2VkIGZvcgotCQkJCQl4dGVybmFsIHZpZGVvLW11eCAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDIsIDB4MTIsIDB4MjIsIDB4MzIsIDB4MDMsIDB4MTMsIDB4MjMsIDB4MzMsIDB4MDEsIDB4MDEgfSwKKwkJLmdwaW9tYXNrMiAgICAgID0gMHgwMywgLyogdXNlZCBmb3IgZXh0ZXJuYWwgdm9kZW8gbXV4ICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAxLCAxKSwKKwkJLm11eHNlbF9ob29rCT0gcGh5dGVjX211eHNlbCwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfSVZDMTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIklWQy0xMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCiAJW0JUVFZfQk9BUkRfSVZDMTIwXSA9IHsKIAkJLyogSVZDLTEyMEcgLSBBbGFuIEdhcmZpZWxkIDxhbGFuQGZyb21vcmJpdC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTIwRyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLCAgICAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgICAvKiBjYXJkIGhhcyBubyB0dW5lciAqLwotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULCAgIC8qIGNhcmQgaGFzIG5vIHN2aHMgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKLQkJCQkweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKSwKIAkJLm11eHNlbF9ob29rICAgID0gaXZjMTIwX211eHNlbCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCkBAIC0yMzIzLDEzICsyMTQxLDExIEBACiAJW0JUVFZfQk9BUkRfUENfSERUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJwY0hEVFYgSEQtMjAwMCBUViIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRkNWMTIzNkQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1RXSU5IQU5fRFNUXSA9IHsKQEAgLTIzMzksMzggKzIxNTUsMzQgQEAKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub192aWRlbyAgICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9XSU5GQVNUVkMxMDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiV2luZmFzdCBWQzEwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEsIDEsIDMgfSwgLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLworCQkvKiBWaWQgSW4sIFNWaWQgSW4sIFZpZCBvdmVyIFNWaWQgaW4gY29ubmVjdG9yICovCisJCS5tdXhzZWwJCT0gTVVYU0VMKDMsIDEsIDEsIDMpLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCX0sCiAJW0JUVFZfQk9BUkRfVEVWNTYwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcHBybyBURVYtNTYwL0ludGVyVmlzaW9uIElWLTU2MCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDMsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMSwgMSwgMSwgMSB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMzUsCiAJfSwKIApAQCAtMjM3OCwxNCArMjE5MCwxMiBAQAogCVtCVFRWX0JPQVJEX1NJTVVTX0dWQzExMDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiU0lNVVMgR1ZDMTEwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4M0YsCiAJCS5tdXhzZWxfaG9vayAgICA9IGd2YzExMDBfbXV4c2VsLAogCX0sCkBAIC0yMzkzLDQ3ICsyMjAzLDQxIEBACiAJCS8qIENhcmxvcyBTaWx2YSByM3Bla0ByM3Blay5ob21lbGludXgub3JnIHx8IGNhcmQgMHg3NSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTkdTIE5HU1RWKyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDAsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDAwMDAzLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9MTUxCVDRdID0gewogCQkvKiBodHRwOi8vbGludXhtZWRpYWxhYnMuY29tICovCiAJCS5uYW1lICAgICAgICAgICA9ICJMTUxCVDQiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LCAvKiBJTjEsSU4yLElOMyxJTjQgKi8KLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URUtSQU1fTTIwNV0gPSB7CiAJCS8qIEhlbG1yb29zIEhhcnJpIDxoYXJyaS5oZWxtcm9vc0BwcC5pbmV0LmZpPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiVGVrcmFtIE0yMDUgUFJPIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHg2OCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDY4LCAweDY4LCAweDYxLCAweDYxIH0sCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LApAQCAtMjQ0NCwxOCArMjI0OCwxNiBAQAogCQkvKiBidDg3OCBUViArIEZNIHdpdGhvdXQgc3Vic3lzdGVtIElEICovCiAJCS5uYW1lICAgICAgICAgICA9ICJDb25jZXB0cm9uaWMgQ09OVFZGTWkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAyIH0sCiAJCS5ncGlvbXV0ZSAJPSAzLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKQEAgLTI0NjYsMzcgKzIyNjgsMzQgQEAKIAkJLyoweDc5IGluIGJ0dHYuaCovCiAJCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyBUZXRyYSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLmdwaW9tYXNrMiAgICAgID0gMHgzQzw8MTYsLypTZXQgdGhlIEdQSU9bMThdLT5HUElPWzIxXSBhcyBvdXRwdXQgcGluLj09PiBkcml2ZSB0aGUgdmlkZW8gaW5wdXRzIHRocm91Z2ggYW5hbG9nIG11bHRpcGxleGVycyovCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsyLDIsMiwyfSwvKjg3OEEgaW5wdXQgaXMgYWx3YXlzIE1VWDAsIHNlZSBhYm92ZS4qLworCQkvKjg3OEEgaW5wdXQgaXMgYWx3YXlzIE1VWDAsIHNlZSBhYm92ZS4qLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5tdXhzZWxfaG9vayAgICA9IHBpY29sb190ZXRyYV9tdXhzZWwsLypSZXF1aXJlZCBhcyBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgY2xhc3NpYyBpbnB1dCBzZWxlY3Rpb24gcG9saWN5Ki8KLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfU1BJUklUX1RWXSA9IHsKIAkJLyogU3Bpcml0IFRWIFR1bmVyIGZyb20gaHR0cDovL3NwaXJpdG1vZGVtcy5jb20uYXUgKi8KIAkJLyogU3RhZmZvcmQgR29vZHNlbGwgPHN1cmdlQGdvbGlhdGguaG9tZXVuaXgub3JnPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiU3Bpcml0IFRWIFR1bmVyIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDAwMDAwZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDAyLCAweDAwLCAweDAwLCAweDAwIH0sCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCX0sCkBAIC0yNTA1LDExICsyMzA0LDkgQEAKIAkJLm5hbWUgICAgICAgICAgID0gIkFWZXJNZWRpYSBBVmVyVFYgRFZCLVQgNzcxIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDMgLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTI1MjQsNTQgKzIzMjEsNDcgQEAKIAkJLyogQmFzZWQgb24gdGhlIE5lYnVsYSBjYXJkIGRhdGEgLSBhZGRlZCByZW1vdGUgYW5kIG5ldyBjYXJkIG51bWJlciAtIEJUVFZfQk9BUkRfQVZEVkJUXzc2MSwgc2VlIGFsc28gaXIta2JkLWdwaW8uYyAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQXZlck1lZGlhIEF2ZXJUViBEVkItVCA3NjEiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAyLCAwIH0sIC8qIENvbXAwLCBTLVZpZGVvLCA/LCA/ICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAxLCAyLCAwKSwgLyogQ29tcDAsIFMtVmlkZW8sID8sID8gKi8KIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU1FdID0gewogCQkvKiBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUgKi8KLQkJLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCi0JCS52aWRlb19pbnB1dHMgICAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgICAgPSBVTlNFVCwKLQkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCi0JCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAotCQkJCTMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKLQkJLm11eHNlbF9ob29rICAgICAgPSBzaWdtYVNRX211eHNlbCwKLQkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKLQkJLm5vX21zcDM0eHggICAgICAgPSAxLAotCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5uYW1lCQk9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNRIiwKKwkJLnZpZGVvX2lucHV0cwk9IDE2LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweDAsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLAorCQkubXV4c2VsX2hvb2sJPSBzaWdtYVNRX211eHNlbCwKKwkJLmdwaW9tdXgJPSB7IDAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05TTENdID0gewogCQkvKiBhbmRyZS5zY2h3YXJ6QG1hdHJpeC12aXNpb24uZGUgKi8KLQkJLm5hbWUgICAgICAgICAgICAgPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TTEMiLAotCQkudmlkZW9faW5wdXRzICAgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgICAgPSBVTlNFVCwKLQkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCi0JCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyIH0sCi0JCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTTENfbXV4c2VsLAotCQkuZ3Bpb211eCAgICAgICAgICA9IHsgMCB9LAotCQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgICA9IFVOU0VULAotCQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLm5hbWUJCT0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKKwkJLnZpZGVvX2lucHV0cwk9IDQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4MCwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiksCisJCS5tdXhzZWxfaG9vawk9IHNpZ21hU0xDX211eHNlbCwKKwkJLmdwaW9tdXgJPSB7IDAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAl9LAogCQkvKiBCVFRWX0JPQVJEX0FQQUNfVklFV0NPTVAgKi8KIAlbQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QXSA9IHsKQEAgLTI1NzksMTggKzIzNjksMTYgQEAKIAkJLyogYnQ4NzggVFYgKyBGTSAweDAwMDAwMDAwIHN1YnN5c3RlbSBJRCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQVBBQyBWaWV3Y29tcCA4NzgoQU1BWCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHhGRiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLCAgIC8qIG1pbmlyZW1vdGUgd29ya3MsIHNlZSBpci1rYmQtZ3Bpby5jICovCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsICAgLyogbm90IGV2ZXJ5IGNhcmQgaGFzIHJhZGlvICovCiAJfSwKQEAgLTI1OTksNDYgKzIzODcsNDAgQEAKIAlbQlRUVl9CT0FSRF9EVklDT19EVkJUX0xJVEVdID0gewogCQkvKiBDaHJpcyBQYXNjb2UgPGMucGFzY29lQGl0ZWUudXEuZWR1LmF1PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViBEVkItVCBMaXRlIiwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLm5vX3ZpZGVvICAgICAgID0gMSwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVkdFQVJfTVlWQ0RdID0gewogCQkvKiBTdGV2ZW4gPHBob3RvbjM4QHBjaG9tZS5jb20udHc+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJWLUdlYXIgTXlWQ0QiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAotCQkubXV4c2VsICAgICAgICAgPSB7MiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsweDMxLCAweDMxLCAweDMxLCAweDMxIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDMxLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQ19NLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8gICAgICA9IDAsCiAJfSwKIAlbQlRUVl9CT0FSRF9TVVBFUl9UVl0gPSB7CiAJCS8qIFJpY2sgQyA8Y3J5cHRkcmFnb29uQGdtYWlsLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlN1cGVyIFRWIFR1bmVyIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDA4MDA3LAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDB4MDAwMDAxLDAsMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLApAQCAtMjY0OCwxNyArMjQzMCwxNSBAQAogCQkvKiBDaHJpcyBGYW5uaW5nIDx2aWRlbzRsaW51eEBoYXlkb24ubmV0PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiVGliZXQgU3lzdGVtcyAnUHJvZ3Jlc3MgRFZSJyBDUzE2IiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyCT0gMSwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubXV4c2VsX2hvb2sgICAgPSB0aWJldENTMTZfbXV4c2VsLAogCX0sCiAJW0JUVFZfQk9BUkRfS09ESUNPTV80NDAwUl0gPSB7CkBAIC0yNjc1LDEyICsyNDU1LDEwIEBACiAJCSovCiAJCS5uYW1lICAgICAgICAgICA9ICJLb2RpY29tIDQ0MDBSIChtYXN0ZXIpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDE2LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLyogR1BJTyBiaXRzIDAtOSB1c2VkIGZvciBhbmFsb2cgc3dpdGNoOgogCQkqICAgMDAgLSAwMzoJY2FtZXJhIHNlbGVjdG9yCiAJCSogICAwNCAtIDA2OgljaGFubmVsIChjb250cm9sbGVyKSBzZWxlY3RvcgpAQCAtMjY5MSw3ICsyNDY5LDcgQEAKIAkJKi8KIAkJLmdwaW9tYXNrCT0gMHgwMDAzZmYsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCi0JCS5tdXhzZWwJCT0geyAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCkBAIC0yNzA3LDE1ICsyNDg1LDEzIEBACiAJCSovCiAJCS5uYW1lCQk9ICJLb2RpY29tIDQ0MDBSIChzbGF2ZSkiLAogCQkudmlkZW9faW5wdXRzCT0gMTYsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAweDAxMDAwMCwKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKLQkJLm11eHNlbAkJPSB7IDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyksCiAJCS5wbGwJCT0gUExMXzI4LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE3NDMyCT0gMSwKQEAgLTI3MjgsMjcgKzI1MDQsMjMgQEAKIAkJLyogQWRsaW5rIFJUVjI0IHdpdGggc3BlY2lhbCB1bmxvY2sgY29kZXMgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFkbGluayBSVFYyNCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4Ny0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURV0gPSB7CiAJCS8qIE1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QG0xay5uZXQ+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDUgTGl0ZSIsCi0JCS50dW5lciAgICAgICAgICA9IDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0xHX1REVlNfSDA2WEYsIC8qIFREVlMtSDA2NEYgKi8KIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMGUwMDAwNywKIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwNDAwMDA1LCAwLCAweDAwMDAwMDAxLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwYzAwMDA3LApAQCAtMjc2Miw3NSArMjUzNCw2OCBAQAogCQkvKiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4gKi8KIAkJLm5hbWUJCT0gIkFjb3JwIFk4NzhGIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDAxZTAwLCAwLCAweDAxODAwMCwgMHgwMTQwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDAyMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRiwKIAkJLnR1bmVyX2FkZHIJPSAweGMxID4+MSwKLQkJLnJhZGlvX2FkZHIgICAgID0gMHhjMSA+PjEsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDg5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9DT05DRVBUUk9OSUNfQ1RWRk1JMl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJDb25jZXB0cm9uaWMgQ1RWRk1pIHYyIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDFjMDAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAyIH0sCiAJCS5ncGlvbXV0ZSAJPSAzLAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTkFfOTUzM19ESSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QVl9CVDg3OFBfMkVdID0gewotCQkubmFtZSAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuMkUpIiwKLQkJLnZpZGVvX2lucHV0cyAgPSA1LAotCQkuYXVkaW9faW5wdXRzICA9IDEsCi0JCS50dW5lciAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgPSAzLAotCQkuZ3Bpb21hc2sgICAgICA9IDB4MDFmZTAwLAotCQkubXV4c2VsICAgICAgICA9IHsgMiwzLDEsMSwtMSB9LAotCQkuZGlnaXRhbF9tb2RlICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCi0JCS5ncGlvbXV4ICAgICAgID0geyAweDAwNDAwLCAweDEwNDAwLCAweDA0NDAwLCAweDgwMDAwIH0sCi0JCS5ncGlvbXV0ZSAgICAgID0gMHgxMjQwMCwKLQkJLm5vX21zcDM0eHggICAgPSAxLAotCQkucGxsICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9MR19QQUxfRk0sCisJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsdmlldyBQVi1CVDg3OFArIChSZXYuMkUpIiwKKwkJLnZpZGVvX2lucHV0cwk9IDUsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IDMsCisJCS5oYXNfZGlnX2luCT0gMSwKKwkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLCAvKiBpbiA0IGlzIGRpZ2l0YWwgKi8KKwkJLyogLmRpZ2l0YWxfbW9kZT0gRElHSVRBTF9NT0RFX0NBTUVSQSwgKi8KKwkJLmdwaW9tdXgJPSB7IDB4MDA0MDAsIDB4MTA0MDAsIDB4MDQ0MDAsIDB4ODAwMDAgfSwKKwkJLmdwaW9tdXRlCT0gMHgxMjQwMCwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9MR19QQUxfRk0sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLmhhc19yZW1vdGUgICAgPSAxLAorCQkuaGFzX3JlbW90ZQk9IDEsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4OGIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1BWX000OTAwXSA9IHsKIAkJLyogU8OpcmdpbyBGb3J0aWVyIDxzZXJnaW9mb3J0aWVyQHlhaG9vLmNvbS5icj4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4M2YsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYyB9LAogCQkuZ3Bpb211dGUgCT0gMHgyOSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9ZTUVDX1RWRl81NTMzTUYsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKQEAgLTI4NTAsMTcgKzI2MTUsMTUgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVk0NDBdICA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA0NDAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAyLCAvKiB0aGlzIGlzIG1lYW5pbmdsZXNzICovCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAwLCAxIH0sIC8qIDMsMCwxIGFyZSBndWVzc2VzICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAxKSwgLyogMywwLDEgYXJlIGd1ZXNzZXMgKi8KIAkJLmdwaW9tYXNrCT0gMHgzMDMsCiAJCS5ncGlvbXV0ZQk9IDB4MDAwLCAvKiBpbnQgKyAzMmtIeiAqLwogCQkuZ3Bpb211eAk9IHsgMCwgMCwgMHgwMDAsIDB4MTAwfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLApAQCAtMjg2OSwyOCArMjYzMiwyNSBAQAogCVtCVFRWX0JPQVJEX0FTT1VORF9TS1lFWUVdID0gewogCQkubmFtZQkJPSAiQXNvdW5kIFNreWV5ZSBQQ1RWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMTUsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDIsIDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4OGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1NBQlJFTlRfVFZGTV0gPSB7CiAJCS5uYW1lCQk9ICJTYWJyZW50IFRWLUZNIChidHR2IHZlcnNpb24pIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxMDgwMDcsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEwMDAwMCwgMTAwMDAyLCAxMDAwMDIsIDEwMDAwMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCkBAIC0yOTA0LDE3ICsyNjY0LDE1IEBACiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQl0gPSB7CiAJCS5uYW1lCQk9ICJIYXVwcGF1Z2UgSW1wYWN0VkNCIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDB4MGYsIC8qIG9sZDogNyAqLwotCQkubXV4c2VsCQk9IHsgMCwgMSwgMywgMiB9LCAvKiBDb21wb3NpdGUgMC0zICovCisJCS5tdXhzZWwJCT0gTVVYU0VMKDAsIDEsIDMsIDIpLCAvKiBDb21wb3NpdGUgMC0zICovCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX01BQ0hUVl9NQUdJQ1RWXSA9IHsKIAkJLyogSnVsaWFuIENhbGFieSA8anVsaWFuLmNhbGFieUBnbWFpbC5jb20+CkBAIC0yOTI2LDE2ICsyNjg0LDE0IEBACiAKIAkJLm5hbWUgICAgICAgICAgID0gIk1hZ2ljVFYiLCAvKiByZWJyYW5kZWQgTWFjaFRWICovCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAwOUZSNV9QQUwsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKQEAgLTI5NDMsMzYgKzI2OTksMzAgQEAKIAlbQlRUVl9CT0FSRF9TU0FJX1NFQ1VSSVRZXSA9IHsKIAkJLm5hbWUJCT0gIlNTQUkgU2VjdXJpdHkgVmlkZW8gSW50ZXJmYWNlIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAotCQkubXV4c2VsCQk9IHsgMCwgMSwgMiwgMyB9LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkubXV4c2VsCQk9IE1VWFNFTCgwLCAxLCAyLCAzKSwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1NTQUlfVUxUUkFTT1VORF0gPSB7CiAJCS5uYW1lCQk9ICJTU0FJIFVsdHJhc291bmQgVmlkZW8gSW50ZXJmYWNlIiwKIAkJLnZpZGVvX2lucHV0cwk9IDIsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzCQk9IDEsCi0JCS5tdXhzZWwJCT0geyAyLCAwLCAxLCAzIH0sCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDAsIDEsIDMpLAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJLyogLS0tLSBjYXJkIDB4OTQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl8yXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgMiIsCi0JCS50dW5lciAgICAgICAgICA9IDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRkNWMTIzNkQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDBlMDAwMDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMGMwMDAwNywKQEAgLTI5ODQsMzYgKzI3MzQsMzEgQEAKIAlbQlRUVl9CT0FSRF9UWVBIT09OX1RWVFVORVJQQ0ldID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVHlwaG9vbiBUVi1UdW5lciBQQ0kgKDUwNjg0KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MzAxNGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgyMDAwMSwweDEwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAgICAgICA9IDEwLAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y2MDBdID0gewogCQkvKiBlbWhuQHVzYi52ZSAqLwotCQkubmFtZSAgICAgICAgICAgICA9ICJHZW92aXNpb24gR1YtNjAwIiwKLQkJLnZpZGVvX2lucHV0cyAgICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgICA9IFVOU0VULAotCQkuZ3Bpb21hc2sgICAgICAgICA9IDB4MCwKLQkJLm11eHNlbCAgICAgICAgICAgPSB7IDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCi0JCQkJICAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiB9LAotCQkubXV4c2VsX2hvb2sgICAgICA9IGdlb3Zpc2lvbl9tdXhzZWwsCi0JCS5ncGlvbXV4ICAgICAgICAgID0geyAwIH0sCi0JCS5ub19tc3AzNHh4ICAgICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgICA9IEFERFJfVU5TRVQsCisJCS5uYW1lCQk9ICJHZW92aXNpb24gR1YtNjAwIiwKKwkJLnZpZGVvX2lucHV0cwk9IDE2LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweDAsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIpLAorCQkubXV4c2VsX2hvb2sJPSBnZW92aXNpb25fbXV4c2VsLAorCQkuZ3Bpb211eAk9IHsgMCB9LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5wbGwJCT0gUExMXzI4LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfS09aVU1JX0tUVl8wMUNdID0gewogCQkvKiBNYXVybyBMYWN5IDxtYXVyb0BsYWN5LmNvbS5hcj4KQEAgLTMwMjEsMTcgKzI3NjYsMTUgQEAKIAogCQkubmFtZSAgICAgICAgICAgPSAiS296dW1pIEtUVi0wMUMiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAxLCAyLCAyIH0sIC8qIENPTlRWRk1pICovCiAJCS5ncGlvbXV0ZSAJPSAzLCAvKiBDT05UVkZNaSAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywgLyogVENMIE1LMyAqLwogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCkBAIC0zMDQxLDggKzI3ODQsNyBAQAogCQkgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZyAqLwogCQkubmFtZSAgICAgICAgICAgPSAiRW5jb3JlIEVOTCBUVi1GTS0yIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLyogYml0IDYgICAgICAgICAgLT4gSVIgZGlzYWJsZWQKIAkJICAgYml0IDE4LzE3ID0gMDAgLT4gbXV0ZQpAQCAtMzA1MSwxMiArMjc5MywxMSBAQAogCQkJICAgICAgIDExIC0+IGludGVybmFsIGF1ZGlvIGlucHV0CiAJCSAqLwogCQkuZ3Bpb21hc2sgICAgICAgPSAweDA2MDA0MCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAzKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDYwMDAwLCAweDYwMDAwLCAweDIwMDAwLCAweDIwMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RDTF9NRjAyR0lQXzVOLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCkBAIC0zMDY1LDUwICsyODA2LDExMSBAQAogCQkvKiBELkhlZXJAUGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDEyIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHMtdmlkZW8gKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAwLCAyLCAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAyLCAzLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJCVtCVFRWX0JPQVJEX1ZEMDEyX1gxXSA9IHsKIAkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMi1YMSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQlbQlRUVl9CT0FSRF9WRDAxMl9YMl0gPSB7CiAJCS8qIEQuSGVlckBQaHl0ZWMuZGUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMTItWDIgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDIsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDIsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JfQorCX0sCisJCVtCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNdID0geworCQkvKiBCcnVubyBDaHJpc3RvIDxiY2hyaXN0b0BpbmYudWZzbS5icj4KKwkJICoKKwkJICogR2VvVmlzaW9uIEdWLTgwMChTKSBoYXMgNCBDb25leGFudCBGdXNpb24gODc4QToKKwkJICogCTEgYXVkaW8gaW5wdXQgIHBlciBCVDg3OEEgPSA0IGF1ZGlvIGlucHV0cworCQkgKiAJNCB2aWRlbyBpbnB1dHMgcGVyIEJUODc4QSA9IDE2IHZpZGVvIGlucHV0cworCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBCVDg3OEEgY2hpcCBvZiB0aGUgR1YtODAwKFMpLiBJdCdzIHRoZQorCQkgKiAibWFzdGVyIiBjaGlwIGFuZCBpdCBjb250cm9scyB0aGUgdmlkZW8gaW5wdXRzIHRocm91Z2ggYW4KKwkJICogYW5hbG9nIG11bHRpcGxleGVyIChhIENEMjJNMzQ5NCkgdmlhIHNvbWUgR1BJTyBwaW5zLiBUaGUKKwkJICogc2xhdmVzIHNob3VsZCB1c2UgY2FyZCB0eXBlIDB4OWUgKGZvbGxvd2luZyB0aGlzIG9uZSkuCisJCSAqIFRoZXJlIGlzIGEgRUVQUk9NIG9uIHRoZSBjYXJkIHdoaWNoIGlzIGN1cnJlbnRseSBub3QgaGFuZGxlZC4KKwkJICogVGhlIGF1ZGlvIGlucHV0IGlzIG5vdCB3b3JraW5nIHlldC4KKwkJICovCisJCS5uYW1lICAgICAgICAgICA9ICJHZW92aXNpb24gR1YtODAwKFMpIChtYXN0ZXIpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHhmMTA3ZiwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiksCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5ub190ZGE3NDMyCT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkubXV4c2VsX2hvb2sgICAgPSBndjgwMHNfbXV4c2VsLAorCX0sCisJCVtCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNfU0xdID0geworCQkvKiBCcnVubyBDaHJpc3RvIDxiY2hyaXN0b0BpbmYudWZzbS5icj4KKwkJICoKKwkJICogR2VvVmlzaW9uIEdWLTgwMChTKSBoYXMgNCBDb25leGFudCBGdXNpb24gODc4QToKKwkJICogCTEgYXVkaW8gaW5wdXQgIHBlciBCVDg3OEEgPSA0IGF1ZGlvIGlucHV0cworCQkgKiAJNCB2aWRlbyBpbnB1dHMgcGVyIEJUODc4QSA9IDE2IHZpZGVvIGlucHV0cworCQkgKiBUaGUgMyBvdGhlciBCVDg3OEEgY2hpcHMgYXJlICJzbGF2ZSIgY2hpcHMgb2YgdGhlIEdWLTgwMChTKQorCQkgKiBhbmQgc2hvdWxkIHVzZSB0aGlzIGNhcmQgdHlwZS4KKwkJICogVGhlIGF1ZGlvIGlucHV0IGlzIG5vdCB3b3JraW5nIHlldC4KKwkJICovCisJCS5uYW1lICAgICAgICAgICA9ICJHZW92aXNpb24gR1YtODAwKFMpIChzbGF2ZSkiLAorCQkudmlkZW9faW5wdXRzICAgPSA0LAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweDAwLAorCQkubm9fZ3Bpb2lycSAgICAgPSAxLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyKSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLm5vX3RkYTc0MzIJPSAxLAorCQkubm9fdGRhOTg3NQk9IDEsCisJCS5tdXhzZWxfaG9vayAgICA9IGd2ODAwc19tdXhzZWwsCisJfSwKKwlbQlRUVl9CT0FSRF9QVjE4M10gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE4MyIsIC8qIDB4OWYgKi8KKwkJLnZpZGVvX2lucHV0cyAgID0gMiwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrICAgICAgID0gMCwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAorCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKKwkJLm5lZWRzX3R2YXVkaW8gID0gMCwKKwkJLm5vX21zcDM0eHggICAgID0gMSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidHR2X251bV90dmNhcmRzID0gQVJSQVlfU0laRShidHR2X3R2Y2FyZHMpOwpAQCAtMzE1Miw3ICsyOTU0LDcgQEAKIAkJCSAgICAgICBidHYtPmMubnIsIGJ0di0+Y2FyZGlkICYgMHhmZmZmLAogCQkJICAgICAgIChidHYtPmNhcmRpZCA+PiAxNikgJiAweGZmZmYpOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgInBsZWFzZSBtYWlsIGlkLCBib2FyZCBuYW1lIGFuZCAiCi0JCQkgICAgICAgInRoZSBjb3JyZWN0IGNhcmQ9IGluc21vZCBvcHRpb24gdG8gdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tXG4iKTsKKwkJCSAgICAgICAidGhlIGNvcnJlY3QgY2FyZD0gaW5zbW9kIG9wdGlvbiB0byBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmdcbiIpOwogCQl9CiAJfQogCkBAIC0zNDAzLDggKzMyMDUsNyBAQAogICogaGFzIGl0cyBvd24gbXVsdGlwbGV4ZXIgKi8KIHN0YXRpYyB2b2lkIGVhZ2xlX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7Ci0JYnRhb3IoKDIpPDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7Ci0JZ3Bpb19iaXRzKDMsYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbaW5wdXQmN10pOworCWdwaW9fYml0cygzLCBpbnB1dCAmIDMpOwogCiAJLyogY29tcG9zaXRlICovCiAJLyogc2V0IGNocm9tYSBBREMgdG8gc2xlZXAgKi8KQEAgLTM1MjMsNiArMzMyNCwxNyBAQAogLyogaW5pdGlhbGl6YXRpb24gcGFydCB0d28gLS0gYWZ0ZXIgcmVnaXN0ZXJpbmcgaTJjIGJ1cyAqLwogdm9pZCBfX2RldmluaXQgYnR0dl9pbml0X2NhcmQyKHN0cnVjdCBidHR2ICpidHYpCiB7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR2YXVkaW9fYWRkcnNbXSA9IHsKKwkJSTJDX0FERFJfVERBODQyNSAgID4+IDEsCisJCUkyQ19BRERSX1RFQTYzMDAgICA+PiAxLAorCQlJMkNfQUREUl9URUE2NDIwICAgPj4gMSwKKwkJSTJDX0FERFJfVERBOTg0MCAgID4+IDEsCisJCUkyQ19BRERSX1REQTk4NXhfTCA+PiAxLAorCQlJMkNfQUREUl9UREE5ODV4X0ggPj4gMSwKKwkJSTJDX0FERFJfVERBOTg3NCAgID4+IDEsCisJCUkyQ19BRERSX1BJQzE2QzU0ICA+PiAxLAorCQlJMkNfQ0xJRU5UX0VORAorCX07CiAJaW50IGFkZHI9QUREUl9VTlNFVDsKIAogCWJ0di0+dHVuZXJfdHlwZSA9IFVOU0VUOwpAQCAtMzYyOSw2ICszNDQxLDkgQEAKIAljYXNlIEJUVFZfQk9BUkRfS09ESUNPTV80NDAwUjoKIAkJa29kaWNvbTQ0MDByX2luaXQoYnR2KTsKIAkJYnJlYWs7CisJY2FzZSBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFM6CisJCWd2ODAwc19pbml0KGJ0dik7CisJCWJyZWFrOwogCX0KIAogCS8qIHBsbCBjb25maWd1cmF0aW9uICovCkBAIC0zNjcwLDEzICszNDg1LDEyIEBACiAJCWFkZHIgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX2FkZHI7CiAKIAlpZiAoVU5TRVQgIT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlKQotCQlpZihVTlNFVCA9PSBidHYtPnR1bmVyX3R5cGUpCisJCWlmIChVTlNFVCA9PSBidHYtPnR1bmVyX3R5cGUpCiAJCQlidHYtPnR1bmVyX3R5cGUgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX3R5cGU7CiAJaWYgKFVOU0VUICE9IHR1bmVyW2J0di0+Yy5ucl0pCiAJCWJ0di0+dHVuZXJfdHlwZSA9IHR1bmVyW2J0di0+Yy5ucl07CiAKLQlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCB8fAotCSAgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyID09IFVOU0VUKQorCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKQogCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHR1bmVyIGFic2VudFxuIiwgYnR2LT5jLm5yKTsKIAllbHNlIGlmKGJ0di0+dHVuZXJfdHlwZSA9PSBVTlNFVCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB0dW5lciB0eXBlIHVuc2V0XG4iLCBidHYtPmMubnIpOwpAQCAtMzY4NCwxNCArMzQ5OCwzNSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6IHR1bmVyIHR5cGU9JWRcbiIsIGJ0di0+Yy5uciwKIAkJICAgICAgIGJ0di0+dHVuZXJfdHlwZSk7CiAKLQlpZiAoYnR2LT50dW5lcl90eXBlICE9IFVOU0VUKSB7CisJaWYgKGF1dG9sb2FkICE9IFVOU0VUKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdGhlIGF1dG9sb2FkIG9wdGlvbiBpcyBvYnNvbGV0ZS5cbiIsIGJ0di0+Yy5ucik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdXNlIG9wdGlvbiBtc3AzNDAwLCB0ZGE3NDMyIG9yIHR2YXVkaW8gdG9cbiIsIGJ0di0+Yy5ucik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogb3ZlcnJpZGUgd2hpY2ggYXVkaW8gbW9kdWxlIHNob3VsZCBiZSB1c2VkLlxuIiwgYnR2LT5jLm5yKTsKKwl9CisKKwlpZiAoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQorCQlidHYtPnR1bmVyX3R5cGUgPSBUVU5FUl9BQlNFTlQ7CisKKwlpZiAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkgewogCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCisJCS8qIExvYWQgdHVuZXIgbW9kdWxlIGJlZm9yZSBpc3N1aW5nIHR1bmVyIGNvbmZpZyBjYWxsISAqLworCQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfcmFkaW8pCisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX1JBRElPKSk7CisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVl9XSVRIX0RFTU9EKSk7CisKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWOwogCQl0dW5fc2V0dXAudHlwZSA9IGJ0di0+dHVuZXJfdHlwZTsKIAkJdHVuX3NldHVwLmFkZHIgPSBhZGRyOwogCi0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfcmFkaW8pCisJCQl0dW5fc2V0dXAubW9kZV9tYXNrIHw9IFRfUkFESU87CisKKwkJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJfQogCiAJaWYgKGJ0di0+dGRhOTg4N19jb25mKSB7CkBAIC0zNzAwLDEwICszNTM1LDEzIEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiA9ICZidHYtPnRkYTk4ODdfY29uZjsKIAotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCX0KIAotCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKKwlidHYtPmRpZyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX2RpZ19pbiA/CisJCSAgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzIC0gMSA6IFVOU0VUOworCWJ0di0+c3ZocyA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZocyA9PSBOT19TVkhTID8KKwkJICAgIFVOU0VUIDogYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5zdmhzOwogCWlmIChzdmhzW2J0di0+Yy5ucl0gIT0gVU5TRVQpCiAJCWJ0di0+c3ZocyA9IHN2aHNbYnR2LT5jLm5yXTsKIAlpZiAocmVtb3RlW2J0di0+Yy5ucl0gIT0gVU5TRVQpCkBAIC0zNzIwLDM0ICszNTU4LDEyNyBAQAogCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmF1ZGlvX21vZGVfZ3BpbykKIAkJYnR2LT5hdWRpb19tb2RlX2dwaW89YnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19tb2RlX2dwaW87CiAKLQlpZiAoIWF1dG9sb2FkKQotCQlyZXR1cm47Ci0KLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciA9PSBVTlNFVCkKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuOyAgLyogbm8gdHVuZXIgb3IgcmVsYXRlZCBkcml2ZXJzIHRvIGxvYWQgKi8KIAorCWlmIChidHYtPmhhc19zYWE2NTg4IHx8IHNhYTY1ODhbYnR2LT5jLm5yXSkgeworCQkvKiBQcm9iZSBmb3IgUkRTIHJlY2VpdmVyIGNoaXAgKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQkweDIwID4+IDEsCisJCQkweDIyID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkic2FhNjU4OCIsICJzYWE2NTg4IiwgYWRkcnMpOworCQlidHYtPmhhc19zYWE2NTg4ID0gKHNkICE9IE5VTEwpOworCX0KKwogCS8qIHRyeSB0byBkZXRlY3QgYXVkaW8vZmFkZXIgY2hpcHMgKi8KLQlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwLCAiTVNQMzR4eCIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoIm1zcDM0MDAiKTsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm1zcDM0eHhfYWx0ICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX01TUDM0MDBfQUxULCAiTVNQMzR4eCAoYWx0ZXJuYXRlIGFkZHJlc3MpIikgPj0wKQotCQlyZXF1ZXN0X21vZHVsZSgibXNwMzQwMCIpOworCS8qIEZpcnN0IGNoZWNrIGlmIHRoZSB1c2VyIHNwZWNpZmllZCB0aGUgYXVkaW8gY2hpcCB2aWEgYSBtb2R1bGUKKwkgICBvcHRpb24uICovCiAKLQlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhOTg3NSAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9UREE5ODc1LCAiVERBOTg3NSIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoInRkYTk4NzUiKTsKKwlzd2l0Y2ggKGF1ZGlvZGV2W2J0di0+Yy5ucl0pIHsKKwljYXNlIC0xOgorCQlyZXR1cm47CS8qIGRvIG5vdCBsb2FkIGFueSBhdWRpbyBtb2R1bGUgKi8KIAotCWlmICghYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub190ZGE3NDMyICYmCi0JICAgIGJ0dHZfSTJDUmVhZChidHYsIEkyQ19BRERSX1REQTc0MzIsICJUREE3NDMyIikgPj0wKQotCQlyZXF1ZXN0X21vZHVsZSgidGRhNzQzMiIpOworCWNhc2UgMDogLyogYXV0b2RldGVjdCAqLworCQlicmVhazsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5lZWRzX3R2YXVkaW8pCi0JCXJlcXVlc3RfbW9kdWxlKCJ0dmF1ZGlvIik7CisJY2FzZSAxOiB7CisJCS8qIFRoZSB1c2VyIHNwZWNpZmllZCB0aGF0IHdlIHNob3VsZCBwcm9iZSBmb3IgbXNwMzQwMCAqLworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCUkyQ19BRERSX01TUDM0MDAgPj4gMSwKKwkJCUkyQ19BRERSX01TUDM0MDBfQUxUID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OwogCi0JaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBVTlNFVCAmJiBidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKKwkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkibXNwMzQwMCIsICJtc3AzNDAwIiwgYWRkcnMpOworCQlpZiAoYnR2LT5zZF9tc3AzNHh4KQorCQkJcmV0dXJuOworCQlnb3RvIG5vX2F1ZGlvOworCX0KKworCWNhc2UgMjogeworCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIHRkYTc0MzIgKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9UREE3NDMyID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWlmICh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJ0ZGE3NDMyIiwgInRkYTc0MzIiLCBhZGRycykpCisJCQlyZXR1cm47CisJCWdvdG8gbm9fYXVkaW87CisJfQorCisJY2FzZSAzOiB7CisJCS8qIFRoZSB1c2VyIHNwZWNpZmllZCB0aGF0IHdlIHNob3VsZCBwcm9iZSBmb3IgdHZhdWRpbyAqLworCQlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCB0dmF1ZGlvX2FkZHJzKTsKKwkJaWYgKGJ0di0+c2RfdHZhdWRpbykKKwkJCXJldHVybjsKKwkJZ290byBub19hdWRpbzsKKwl9CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHVua25vd24gYXVkaW9kZXYgdmFsdWUhXG4iLAorCQkJYnR2LT5jLm5yKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZXJlIHdlcmUgbm8gb3ZlcnJpZGVzLCBzbyBub3cgd2UgdHJ5IHRvIGRpc2NvdmVyIHRoaXMgdGhyb3VnaCB0aGUKKwkgICBjYXJkIGRlZmluaXRpb24gKi8KKworCS8qIHByb2JlIGZvciBtc3AzNDAwIGZpcnN0OiB0aGlzIGRyaXZlciBjYW4gZGV0ZWN0IHdoZXRoZXIgb3Igbm90CisJICAgaXQgcmVhbGx5IGlzIGEgbXNwMzQwMCwgc28gaXQgd2lsbCByZXR1cm4gTlVMTCB3aGVuIHRoZSBkZXZpY2UKKwkgICBmb3VuZCBpcyByZWFsbHkgc29tZXRoaW5nIGVsc2UgKGUuZy4gYSB0ZWE2MzAwKS4gKi8KKwlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fbXNwMzR4eCkgeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCUkyQ19BRERSX01TUDM0MDAgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJYnR2LT5zZF9tc3AzNHh4ID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkibXNwMzQwMCIsICJtc3AzNDAwIiwgYWRkcnMpOworCX0gZWxzZSBpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tc3AzNHh4X2FsdCkgeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCUkyQ19BRERSX01TUDM0MDBfQUxUID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhIG1zcDM0eHgsIHRoZW4gd2UncmUgZG9uZS4gKi8KKwlpZiAoYnR2LT5zZF9tc3AzNHh4KQorCQlyZXR1cm47CisKKwkvKiBpdCBtaWdodCBhbHNvIGJlIGEgdGRhNzQzMi4gKi8KKwlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMikgeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWRkcnNbXSA9IHsKKwkJCUkyQ19BRERSX1REQTc0MzIgPj4gMSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJaWYgKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInRkYTc0MzIiLCAidGRhNzQzMiIsIGFkZHJzKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBOb3cgc2VlIGlmIHdlIGNhbiBmaW5kIG9uZSBvZiB0aGUgdHZhdWRpbyBkZXZpY2VzLiAqLworCWJ0di0+c2RfdHZhdWRpbyA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkidHZhdWRpbyIsICJ0dmF1ZGlvIiwgdHZhdWRpb19hZGRycyk7CisJaWYgKGJ0di0+c2RfdHZhdWRpbykKKwkJcmV0dXJuOworCitub19hdWRpbzoKKwlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IGF1ZGlvIGFic2VudCwgbm8gYXVkaW8gZGV2aWNlIGZvdW5kIVxuIiwKKwkJCWJ0di0+Yy5ucik7CiB9CiAKIApAQCAtMzgxOSw2ICszNzUwLDcgQEAKIAkJcHJpbnRrKCJidHR2JWQ6IFRlcnJhdGVjIEFjdGl2ZSBSYWRpbyBVcGdyYWRlIGZvdW5kLlxuIiwKIAkJICAgICAgIGJ0di0+Yy5ucik7CiAJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKKwkJYnR2LT5oYXNfc2FhNjU4OCAgPSAxOwogCQlidHYtPmhhc19tYXRjaGJveCA9IDE7CiAJfSBlbHNlIHsKIAkJYnR2LT5oYXNfcmFkaW8gICAgPSAwOwpAQCAtNDA2NywyNyArMzk5OSwyNiBAQAogCSAgICAgICBidHYtPmhhc19yZW1vdGUgPyAieWVzIiA6ICJubyIpOwogfQogCi0vKiB1c2VkIG9uIFZvb2RvbyBUVi9GTSAoVm9vZG9vIDIwMCksIFMwIHdpcmVkIHRvIDB4MTAwMDAgKi8KLXZvaWQgYnR0dl90ZGE5ODgwX3NldG5vcm0oc3RydWN0IGJ0dHYgKmJ0diwgaW50IG5vcm0pCisvKgorICogRm9yIFZvb2RvbyBUVi9GTSBhbmQgVm9vZG9vIDIwMC4gIFRoZXNlIGNhcmRzJyB0dW5lcnMgdXNlIGEgVERBOTg4MAorICogYW5hbG9nIGRlbW9kLCB3aGljaCBpcyBub3QgSTJDIGNvbnRyb2xsZWQgbGlrZSB0aGUgbmV3ZXIgYW5kIG1vcmUgY29tbW9uCisgKiBUREE5ODg3IHNlcmllcy4gIEluc3RlYWQgaXMgaGFzIHR3byB0cmktc3RhdGUgaW5wdXQgcGlucywgUzAgYW5kIFMxLAorICogdGhhdCBjb250cm9sIHRoZSBJRiBmb3IgdGhlIHZpZGVvIGFuZCBhdWRpby4gIEFwcGFyZW50bHksIGJ0dHYgR1BJTworICogMHgxMDAwMCBpcyBjb25uZWN0ZWQgdG8gUzAuICBTMCBsb3cgc2VsZWN0cyBhIDM4LjkgTUh6IFZJRiBmb3IgQi9HL0QvSy9JCisgKiAoaS5lLiwgUEFMKSB3aGlsZSBoaWdoIHNlbGVjdHMgNDUuNzUgTUh6IGZvciBNL04gKGkuZS4sIE5UU0MpLgorICovCit1MzIgYnR0dl90ZGE5ODgwX3NldG5vcm0oc3RydWN0IGJ0dHYgKmJ0diwgdTMyIGdwaW9iaXRzKQogewotCS8qIGZpeCB1cCBvdXIgY2FyZCBlbnRyeSAqLwotCWlmKG5vcm09PVY0TDJfU1REX05UU0MpIHsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV0ZT0weDk1N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTU3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl8yMDBdLmdwaW9tdXRlPTB4OTU3ZmZmOwotCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBOVFNDXG4iKTsKKworCWlmIChidHYtPmF1ZGlvID09IFRWQVVESU9fSU5QVVRfVFVORVIpIHsKKwkJaWYgKGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0udjRsMl9pZCAmIFY0TDJfU1REX01OKQorCQkJZ3Bpb2JpdHMgfD0gMHgxMDAwMDsKKwkJZWxzZQorCQkJZ3Bpb2JpdHMgJj0gfjB4MTAwMDA7CiAJfQotCWVsc2UgewotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk0N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXRlPTB4OTQ3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl8yMDBdLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NDdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211dGU9MHg5NDdmZmY7Ci0JCWRwcmludGsoImJ0dHZfdGRhOTg4MF9zZXRub3JtIHRvIFBBTFxuIik7Ci0JfQotCS8qIHNldCBHUElPIGFjY29yZGluZyAqLwotCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLAotCQkgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb211eFtidHYtPmF1ZGlvXSk7CisKKwlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywgZ3Bpb2JpdHMpOworCXJldHVybiBncGlvYml0czsKIH0KIAogCkBAIC00NDYzLDYgKzQzOTQsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgcnY2MDVfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKIHsKKwlzdGF0aWMgY29uc3QgdTggbXV4Z3Bpb1tdID0geyAweDMsIDB4MSwgMHgyLCAweDQsIDB4ZiwgMHg3LCAweGUsIDB4MCwKKwkJCQkgICAgICAweGQsIDB4YiwgMHhjLCAweDYsIDB4OSwgMHg1LCAweDgsIDB4YSB9OworCisJZ3Bpb19iaXRzKDB4MDdmLCBtdXhncGlvW2lucHV0XSk7CisKIAkvKiByZXNldCBhbGwgY29uZWN0aW9ucyAqLwogCWdwaW9fYml0cygweDIwMCwweDIwMCk7CiAJbWRlbGF5KDEpOwpAQCAtNDQ3MCw3ICs0NDA2LDYgQEAKIAltZGVsYXkoMSk7CiAKIAkvKiBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiAqLwotCWdwaW9fYml0cygweDQ4MCwweDA4MCk7CiAJZ3Bpb19iaXRzKDB4NDgwLDB4NDgwKTsKIAltZGVsYXkoMSk7CiAJZ3Bpb19iaXRzKDB4NDgwLDB4MDgwKTsKQEAgLTQ3MjksOCArNDY2NCw3IEBACiAJYnR0dl9JMkNXcml0ZShidHYsIEkyQ19UREE4NTQwX0FMVDYsIDB4MDIsCiAJCSAgICAgICgobWF0cml4ID09IDIpID8gMHgwMyA6IDB4MDApLCAxKTsgIC8qIDktMTIgKi8KIAotCS8qIFNlbGVjdHMgTVVYMCBmb3IgaW5wdXQgb24gdGhlIDg3OCAqLwotCWJ0YW9yKCgwKTw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOworCS8qIDg3OCdzIE1VWDAgaXMgYWxyZWFkeSBzZWxlY3RlZCBmb3IgaW5wdXQgdmlhIG11eHNlbCB2YWx1ZXMgKi8KIH0KIAogCkBAIC00ODE0LDYgKzQ3NDgsMTMyIEBACiAJcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogc2V0dGluZyBpbnB1dCBjaGFubmVsIHRvOiVkXG4iLCBidHYtPmMubnIsKGludCltdXgpOwogfQogCitzdGF0aWMgdm9pZCBwaHl0ZWNfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwl1bnNpZ25lZCBpbnQgbXV4ID0gaW5wdXQgJSA0OworCisJaWYgKGlucHV0ID09IGJ0di0+c3ZocykKKwkJbXV4ID0gMDsKKworCWdwaW9fYml0cygweDMsIG11eCk7Cit9CisKKy8qCisgKiBHZW9WaXNpb24gR1YtODAwKFMpIGZ1bmN0aW9ucworICogQnJ1bm8gQ2hyaXN0byA8YmNocmlzdG9AaW5mLnVmc20uYnI+CisqLworCisvKiBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgYW5hbG9nIHN3aXRjaCwgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaAorICogY2FtZXJhIGlzIHJvdXRlZCB0byB3aGljaCBjb250cm9sbGVyLiAgVGhlIHN3aXRjaCBjb21wcmlzZXMgYW4gWC1hZGRyZXNzCisgKiAoZ3BpbyBiaXRzIDAtMywgcmVwcmVzZW50aW5nIHRoZSBjYW1lcmEsIHJhbmdpbmcgZnJvbSAwLTE1KSwgYW5kIGEKKyAqIFktYWRkcmVzcyAoZ3BpbyBiaXRzIDQtNiwgcmVwcmVzZW50aW5nIHRoZSBjb250cm9sbGVyLCByYW5naW5nIGZyb20gMC0zKS4KKyAqIEEgZGF0YSB2YWx1ZSAoZ3BpbyBiaXQgMTgpIG9mICcxJyBlbmFibGVzIHRoZSBzd2l0Y2gsIGFuZCAnMCcgZGlzYWJsZXMKKyAqIHRoZSBzd2l0Y2guICBBIFNUUk9CRSBiaXQgKGdwaW8gYml0IDE3KSBsYXRjaGVzIHRoZSBkYXRhIHZhbHVlIGludG8gdGhlCisgKiBzcGVjaWZpZWQgYWRkcmVzcy4gVGhlcmUgaXMgYWxzbyBhIGNoaXAgc2VsZWN0IChncGlvIGJpdCAxNikuCisgKiBUaGUgaWRlYSBpcyB0byBzZXQgdGhlIGFkZHJlc3MgYW5kIGNoaXAgc2VsZWN0IHRvZ2V0aGVyLCBicmluZworICogU1RST0JFIGhpZ2gsIHdyaXRlIHRoZSBkYXRhLCBhbmQgZmluYWxseSBicmluZyBTVFJPQkUgYmFjayB0byBsb3cuCisgKi8KK3N0YXRpYyB2b2lkIGd2ODAwc193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LAorCQkJIHVuc2lnbmVkIGNoYXIgeGFkZHIsCisJCQkgdW5zaWduZWQgY2hhciB5YWRkciwKKwkJCSB1bnNpZ25lZCBjaGFyIGRhdGEpIHsKKwkvKiBPbiB0aGUgIm1hc3RlciIgODc4QToKKwkqIEdQSU8gYml0cyAwLTkgYXJlIHVzZWQgZm9yIHRoZSBhbmFsb2cgc3dpdGNoOgorCSogICAwMCAtIDAzOgljYW1lcmEgc2VsZWN0b3IKKwkqICAgMDQgLSAwNjoJODc4QSAoY29udHJvbGxlcikgc2VsZWN0b3IKKwkqICAgMTY6IAljc2VsZWN0CisJKiAgIDE3OgkJc3Ryb2JlCisJKiAgIDE4OiAJZGF0YSAoMS0+b24sIDAtPm9mZikKKwkqICAgMTk6CQlyZXNldAorCSovCisJY29uc3QgdTMyIEFERFJFU1MgPSAoKHhhZGRyJjB4ZikgfCAoeWFkZHImMyk8PDQpOworCWNvbnN0IHUzMiBDU0VMRUNUID0gMTw8MTY7CisJY29uc3QgdTMyIFNUUk9CRSA9IDE8PDE3OworCWNvbnN0IHUzMiBEQVRBID0gZGF0YTw8MTg7CisKKwlncGlvX2JpdHMoMHgxMDA3ZiwgQUREUkVTUyB8IENTRUxFQ1QpOwkvKiB3cml0ZSBBRERSRVNTIGFuZCBDU0VMRUNUICovCisJZ3Bpb19iaXRzKDB4MjAwMDAsIFNUUk9CRSk7CQkvKiBTVFJPQkUgaGlnaCAqLworCWdwaW9fYml0cygweDQwMDAwLCBEQVRBKTsJCS8qIHdyaXRlIERBVEEgKi8KKwlncGlvX2JpdHMoMHgyMDAwMCwgflNUUk9CRSk7CQkvKiBTVFJPQkUgbG93ICovCit9CisKKy8qCisgKiBHZW9WaXNpb24gR1YtODAwKFMpIG11eHNlbAorICoKKyAqIEVhY2ggb2YgdGhlIDQgY2FyZHMgKGNvbnRyb2xsZXJzKSB1c2UgdGhpcyBmdW5jdGlvbi4KKyAqIFRoZSBjb250cm9sbGVyIHVzaW5nIHRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgaW5wdXQgdGhyb3VnaCB0aGUgR1BJTyBwaW5zCisgKiBvZiB0aGUgIm1hc3RlciIgY2FyZC4gQSBwb2ludGVyIHRvIHRoaXMgY2FyZCBpcyBzdG9yZWQgaW4gbWFzdGVyW2J0di0+Yy5ucl0uCisgKgorICogVGhlIHBhcmFtZXRlciAnaW5wdXQnIGlzIHRoZSByZXF1ZXN0ZWQgY2FtZXJhIG51bWJlciAoMC00KSBvbiB0aGUgY29udHJvbGxlci4KKyAqIFRoZSBtYXAgYXJyYXkgaGFzIHRoZSBhZGRyZXNzIG9mIGVhY2ggaW5wdXQuIE5vdGUgdGhhdCB0aGUgYWRkcmVzc2VzIGluIHRoZQorICogYXJyYXkgYXJlIGluIHRoZSBzZXF1ZW5jZSB0aGUgb3JpZ2luYWwgR2VvVmlzaW9uIGRyaXZlciB1c2VzLCB0aGF0IGlzLCBzZXQKKyAqIGV2ZXJ5IGNvbnRyb2xsZXIgdG8gaW5wdXQgMCwgdGhlbiB0byBpbnB1dCAxLCAyLCAzLCByZXBlYXQuIFRoaXMgbWVhbnMgdGhhdAorICogdGhlIHBoeXNpY2FsICJjYW1lcmEgMSIgY29ubmVjdG9yIGNvcnJlc3BvbmRzIHRvIGNvbnRyb2xsZXIgMCBpbnB1dCAwLAorICogImNhbWVyYSAyIiBjb3JyZXNwb25kcyB0byBjb250cm9sbGVyIDEgaW5wdXQgMCwgYW5kIHNvIG9uLgorICoKKyAqIEFmdGVyIGdldHRpbmcgdGhlIGlucHV0IGFkZHJlc3MsIHRoZSBmdW5jdGlvbiB0aGVuIHdyaXRlcyB0aGUgYXBwcm9wcmlhdGUKKyAqIGRhdGEgdG8gdGhlIGFuYWxvZyBzd2l0Y2gsIGFuZCBob3VzZWtlZXBzIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBzd2l0Y2gKKyAqIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgdm9pZCBndjgwMHNfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3QgYnR0diAqbWN0bHI7CisJY2hhciAqc3dfc3RhdHVzOworCWludCB4YWRkciwgeWFkZHI7CisJc3RhdGljIHVuc2lnbmVkIGludCBtYXBbNF1bNF0gPSB7IHsgMHgwLCAweDQsIDB4YSwgMHg2IH0sCisJCQkJCSAgeyAweDEsIDB4NSwgMHhiLCAweDcgfSwKKwkJCQkJICB7IDB4MiwgMHg4LCAweGMsIDB4ZSB9LAorCQkJCQkgIHsgMHgzLCAweDksIDB4ZCwgMHhmIH0gfTsKKwlpbnB1dCA9IGlucHV0JTQ7CisJbWN0bHIgPSBtYXN0ZXJbYnR2LT5jLm5yXTsKKwlpZiAobWN0bHIgPT0gTlVMTCkgeworCQkvKiBkbyBub3RoaW5nIHVudGlsIHRoZSAibWFzdGVyIiBpcyBkZXRlY3RlZCAqLworCQlyZXR1cm47CisJfQorCXlhZGRyID0gKGJ0di0+Yy5uciAtIG1jdGxyLT5jLm5yKSAmIDM7CisJc3dfc3RhdHVzID0gKGNoYXIgKikoJm1jdGxyLT5tYm94X3dlKTsKKwl4YWRkciA9IG1hcFt5YWRkcl1baW5wdXRdICYgMHhmOworCisJLyogQ2hlY2sgaWYgdGhlIGNvbnRyb2xsZXIvY2FtZXJhIHBhaXIgaGFzIGNoYW5nZWQsIGlnbm9yZSBvdGhlcndpc2UgKi8KKwlpZiAoc3dfc3RhdHVzW3lhZGRyXSAhPSB4YWRkcikgeworCQkvKiBkaXNhYmxlIHRoZSBvbGQgc3dpdGNoLCBlbmFibGUgdGhlIG5ldyBvbmUgYW5kIHNhdmUgc3RhdHVzICovCisJCWd2ODAwc193cml0ZShtY3Rsciwgc3dfc3RhdHVzW3lhZGRyXSwgeWFkZHIsIDApOworCQlzd19zdGF0dXNbeWFkZHJdID0geGFkZHI7CisJCWd2ODAwc193cml0ZShtY3RsciwgeGFkZHIsIHlhZGRyLCAxKTsKKwl9Cit9CisKKy8qIEdlb1Zpc2lvbiBHVi04MDAoUykgIm1hc3RlciIgY2hpcCBpbml0ICovCitzdGF0aWMgdm9pZCBndjgwMHNfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KQoreworCWNoYXIgKnN3X3N0YXR1cyA9IChjaGFyICopKCZidHYtPm1ib3hfd2UpOworCWludCBpeDsKKworCWdwaW9faW5vdXQoMHhmMTA3ZiwgMHhmMTA3Zik7CisJZ3Bpb193cml0ZSgxPDwxOSk7IC8qIHJlc2V0IHRoZSBhbmFsb2cgTVVYICovCisJZ3Bpb193cml0ZSgwKTsKKworCS8qIFByZXNldCBjYW1lcmEgMCB0byB0aGUgNCBjb250cm9sbGVycyAqLworCWZvciAoaXggPSAwOyBpeCA8IDQ7IGl4KyspIHsKKwkJc3dfc3RhdHVzW2l4XSA9IGl4OworCQlndjgwMHNfd3JpdGUoYnR2LCBpeCwgaXgsIDEpOworCX0KKworCS8qIElucHV0cyBvbiB0aGUgIm1hc3RlciIgY29udHJvbGxlciBuZWVkIHRoaXMgYnJpZ2h0bmVzcyBmaXggKi8KKwlidHR2X0kyQ1dyaXRlKGJ0diwgMHgxOCwgMHg1LCAweDkwLCAxKTsKKworCWlmIChidHYtPmMubnIgPiBCVFRWX01BWC00KQorCQlyZXR1cm47CisJLyoKKwkgKiBTdG9yZSB0aGUgIm1hc3RlciIgY29udHJvbGxlciBwb2ludGVyIGluIHRoZSBtYXN0ZXIKKwkgKiBhcnJheSBmb3IgbGF0ZXIgdXNlIGluIHRoZSBtdXhzZWwgZnVuY3Rpb24uCisJICovCisJbWFzdGVyW2J0di0+Yy5ucl0gICA9IGJ0djsKKwltYXN0ZXJbYnR2LT5jLm5yKzFdID0gYnR2OworCW1hc3RlcltidHYtPmMubnIrMl0gPSBidHY7CisJbWFzdGVyW2J0di0+Yy5uciszXSA9IGJ0djsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIG1vdGhlcmJvYXJkIGNoaXBzZXQgc3BlY2lmaWMgc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCBjNzFmMzk0Li43YThjYTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC01OCw3ICs1OCw3IEBACiAKIAogdW5zaWduZWQgaW50IGJ0dHZfbnVtOwkJCS8qIG51bWJlciBvZiBCdDg0OHMgaW4gdXNlICovCi1zdHJ1Y3QgYnR0diBidHR2c1tCVFRWX01BWF07CitzdHJ1Y3QgYnR0diAqYnR0dnNbQlRUVl9NQVhdOwogCiB1bnNpZ25lZCBpbnQgYnR0dl9kZWJ1ZzsKIHVuc2lnbmVkIGludCBidHR2X3ZlcmJvc2UgPSAxOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQgPSBjb250YWluZXJfb2YoY2QsIHN0cnVjdCB2aWRlb19kZXZpY2UsIGRldik7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IGRldl9nZXRfZHJ2ZGF0YSh2ZmQtPnBhcmVudCk7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJ0diA/IGJ0di0+Yy50eXBlIDogVU5TRVQpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGNhcmQsIFNfSVJVR08sIHNob3dfY2FyZCwgTlVMTCk7CkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCWludCB0YWJsZV9pZHggPSBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnNyYW07CiAJaW50IGZzYyAgICAgICA9IGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0uRnNjOwogCi0JaWYgKFVOU0VUID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2J0di0+aW5wdXRdKSB7CisJaWYgKGJ0di0+aW5wdXQgPT0gYnR2LT5kaWcpIHsKIAkJZHByaW50aygiYnR0diVkOiBsb2FkIGRpZ2l0YWwgdGltaW5nIHRhYmxlICh0YWJsZV9pZHg9JWQpXG4iLAogCQkJYnR2LT5jLm5yLHRhYmxlX2lkeCk7CiAKQEAgLTExNDIsNyArMTE0Miw3IEBACiAJCWJ0YW5kKH5CVDg0OF9DT05UUk9MX0NPTVAsIEJUODQ4X0VfQ09OVFJPTCk7CiAJCWJ0YW5kKH5CVDg0OF9DT05UUk9MX0NPTVAsIEJUODQ4X09fQ09OVFJPTCk7CiAJfQotCW11eCA9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2lucHV0XSAmIDM7CisJbXV4ID0gYnR0dl9tdXhzZWwoYnR2LCBpbnB1dCk7CiAJYnRhb3IobXV4PDw1LCB+KDM8PDUpLCBCVDg0OF9JRk9STSk7CiAJZHByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6IHZpZGVvIG11eDogaW5wdXQ9JWQgbXV4PSVkXG4iLAogCQlidHYtPmMubnIsaW5wdXQsbXV4KTsKQEAgLTExNjMsNyArMTE2Myw2IEBACiB7CiAJaW50IGdwaW9fdmFsLCBzaWduYWw7CiAJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwogCiAJZ3Bpb19pbm91dChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLAogCQkgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrKTsKQEAgLTExODAsNyArMTE3OSwxNiBAQAogCWVsc2UKIAkJZ3Bpb192YWwgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbaW5wdXRdOwogCi0JZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssIGdwaW9fdmFsKTsKKwlzd2l0Y2ggKGJ0di0+Yy50eXBlKSB7CisJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNOgorCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl8yMDA6CisJCWdwaW9fdmFsID0gYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LCBncGlvX3ZhbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssIGdwaW9fdmFsKTsKKwl9CisKIAlpZiAoYnR0dl9ncGlvKQogCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCBhdWRpb19tb2Rlc1ttdXRlID8gNCA6IGlucHV0XSk7CiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMTE4OCw5ICsxMTk2LDggQEAKIAogCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOwogCWN0cmwudmFsdWUgPSBidHYtPm11dGU7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfQ1RSTCwgJmN0cmwpOwotCWMgPSBidHYtPmkyY19tc3AzNHh4X2NsaWVudDsKLQlpZiAoYykgeworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKKwlpZiAoYnR2LT5zZF9tc3AzNHh4KSB7CiAJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJLyogTm90ZTogdGhlIGlucHV0cyB0dW5lci9yYWRpby9leHRlcm4vaW50ZXJuIGFyZSB0cmFuc2xhdGVkCkBAIC0xMjI5LDE1ICsxMjM2LDE0IEBACiAJCQlicmVhazsKIAkJfQogCQlyb3V0ZS5vdXRwdXQgPSBNU1BfT1VUUFVUX0RFRkFVTFQ7Ci0JCWMtPmRyaXZlci0+Y29tbWFuZChjLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChidHYtPnNkX21zcDM0eHgsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJfQotCWMgPSBidHYtPmkyY190dmF1ZGlvX2NsaWVudDsKLQlpZiAoYykgeworCWlmIChidHYtPnNkX3R2YXVkaW8pIHsKIAkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAogCQlyb3V0ZS5pbnB1dCA9IGlucHV0OwogCQlyb3V0ZS5vdXRwdXQgPSAwOwotCQljLT5kcml2ZXItPmNvbW1hbmQoYywgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoYnR2LT5zZF90dmF1ZGlvLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTEyNzcsNyArMTI4Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1idHR2X2Nyb3BfcmVzZXQoc3RydWN0IGJ0dHZfY3JvcCAqYywgaW50IG5vcm0pCitidHR2X2Nyb3BfcmVzZXQoc3RydWN0IGJ0dHZfY3JvcCAqYywgdW5zaWduZWQgaW50IG5vcm0pCiB7CiAJYy0+cmVjdCA9IGJ0dHZfdHZub3Jtc1tub3JtXS5jcm9wY2FwLmRlZnJlY3Q7CiAJYnR0dl9jcm9wX2NhbGNfbGltaXRzKGMpOwpAQCAtMTI5MCwxNiArMTI5NiwxMyBAQAogCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOwogCXY0bDJfc3RkX2lkIGlkOwogCi0JaWYgKG5vcm0gPCAwIHx8IG5vcm0gPj0gQlRUVl9UVk5PUk1TKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlCVUdfT04obm9ybSA+PSBCVFRWX1RWTk9STVMpOworCUJVR19PTihidHYtPnR2bm9ybSA+PSBCVFRWX1RWTk9STVMpOwogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAotCWlmIChidHYtPnR2bm9ybSA8IDAgfHwKLQkgICAgYnR2LT50dm5vcm0gPj0gQlRUVl9UVk5PUk1TIHx8Ci0JICAgIDAgIT0gbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsCi0JCQkmdHZub3JtLT5jcm9wY2FwLAotCQkJc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgeworCWlmICghbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCisJCSAgICBzaXplb2YgKHR2bm9ybS0+Y3JvcGNhcCkpKSB7CiAJCWJ0dHZfY3JvcF9yZXNldCgmYnR2LT5jcm9wWzBdLCBub3JtKTsKIAkJYnR2LT5jcm9wWzFdID0gYnR2LT5jcm9wWzBdOyAvKiBjdXJyZW50ID0gZGVmYXVsdCAqLwogCkBAIC0xMzIyLDExICsxMzI1LDExIEBACiAJc3dpdGNoIChidHYtPmMudHlwZSkgewogCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl9GTToKIAljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfMjAwOgotCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsbm9ybSk7CisJCWJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0diwgZ3Bpb19yZWFkKCkpOwogCQlicmVhazsKIAl9CiAJaWQgPSB0dm5vcm0tPnY0bDJfaWQ7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfU1RELCAmaWQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc19zdGQsIGlkKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1MCw4ICsxMzUzLDggQEAKIAl9IGVsc2UgewogCQl2aWRlb19tdXgoYnR2LGlucHV0KTsKIAl9Ci0JYXVkaW9faW5wdXQoYnR2LChpbnB1dCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyID8KLQkJICAgICAgIFRWQVVESU9fSU5QVVRfVFVORVIgOiBUVkFVRElPX0lOUFVUX0VYVEVSTikpOworCWF1ZGlvX2lucHV0KGJ0diwgKGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQgJiYgaW5wdXQgPT0gMCkgPworCQkJIFRWQVVESU9fSU5QVVRfVFVORVIgOiBUVkFVRElPX0lOUFVUX0VYVEVSTik7CiAJc2V0X3R2bm9ybShidHYsIG5vcm0pOwogfQogCkBAIC0xNDcwLDcgKzE0NzMsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19HX0NUUkwsIGMpOworCQlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgZ19jdHJsLCBjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ0hST01BX0FHQzoKQEAgLTE1NDQsMTIgKzE1NDcsMTIgQEAKIAkJaWYgKGJ0di0+dm9sdW1lX2dwaW8pCiAJCQlidHYtPnZvbHVtZV9ncGlvKGJ0diwgYy0+dmFsdWUpOwogCi0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0NUUkwsIGMpOworCQlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgc19jdHJsLCBjKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfQ1RSTCwgYyk7CisJCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBzX2N0cmwsIGMpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfUFJJVkFURV9DSFJPTUFfQUdDOgpAQCAtMTg4OCwyMCArMTg5MSwxNSBAQAogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7Ci0JdW5zaWduZWQgaW50IG47CisJaW50IG47CiAKLQluID0gaS0+aW5kZXg7Ci0KLQlpZiAobiA+PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cykKKwlpZiAoaS0+aW5kZXggPj0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCi0JaS0+aW5kZXggICAgPSBuOwogCWktPnR5cGUgICAgID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlpLT5hdWRpb3NldCA9IDE7CiAKLQlpZiAoaS0+aW5kZXggPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikgeworCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UICYmIGktPmluZGV4ID09IDApIHsKIAkJc3ByaW50ZihpLT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCQlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9UVU5FUjsKIAkJaS0+dHVuZXIgPSAwOwpAQCAtMTk2NSwxNCArMTk2MywxNCBAQAogCWlmICgwICE9IGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChVTlNFVCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyKQorCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfVFVORVIsIHQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc190dW5lciwgdCk7CiAKIAlpZiAoYnR2LT5hdWRpb19tb2RlX2dwaW8pCiAJCWJ0di0+YXVkaW9fbW9kZV9ncGlvKGJ0diwgdCwgMSk7CkBAIC0yMDE3LDcgKzIwMTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZidHYtPmxvY2spOwogCWJ0di0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19GUkVRVUVOQ1ksIGYpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCWlmIChidHYtPmhhc19tYXRjaGJveCAmJiBidHYtPnJhZGlvX3VzZXIpCiAJCXRlYTU3NTdfc2V0X2ZyZXEoYnR2LCBidHYtPmZyZXEpOwogCW11dGV4X3VubG9jaygmYnR2LT5sb2NrKTsKQEAgLTIwMzEsNyArMjAyOSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJidHR2JWQ6ID09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09XG4iLAogCQkJYnR2LT5jLm5yLCBidHYtPmMubnIpOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19MT0dfU1RBVFVTLCBOVUxMKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgbG9nX3N0YXR1cyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiA9PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICAgIyVkICA9PT09PT09PVxuIiwKIAkJCWJ0di0+Yy5uciwgYnR2LT5jLm5yKTsKIAlyZXR1cm4gMDsKQEAgLTI2NTksOCArMjY1Nyw3IEBACiAJaWYgKG5vX292ZXJsYXkgPD0gMCkKIAkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVklERU9fT1ZFUkxBWTsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyICE9IFVOU0VUICYmCi0JICAgIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgIT0gVFVORVJfQUJTRU5UKQorCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQogCQljYXAtPmNhcGFiaWxpdGllcyB8PSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKIH0KQEAgLTI5MjcsMTMgKzI5MjQsOSBAQAogewogCXN0cnVjdCBidHR2X2ZoICpmaCA9IGY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7Ci0Jc3RydWN0IHY0bDJfc3RhbmRhcmQgczsKIAotCWlmIChwYXJtLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JdjRsMl92aWRlb19zdGRfY29uc3RydWN0KCZzLCBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnY0bDJfaWQsCi0JCQkJIGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0ubmFtZSk7Ci0JcGFybS0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSA9IHMuZnJhbWVwZXJpb2Q7CisJdjRsMl92aWRlb19zdGRfZnJhbWVfcGVyaW9kKGJ0dHZfdHZub3Jtc1tidHYtPnR2bm9ybV0udjRsMl9pZCwKKwkJCQkgICAgJnBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTQzLDE1ICsyOTM2LDE0IEBACiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKIAotCWlmIChVTlNFVCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyKQorCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZidHYtPmxvY2spOwotCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19UVU5FUiwgdCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STTsKIAl0LT50eXBlICAgICAgID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CkBAIC0zMjEyLDI5ICszMjA0LDE5IEBACiBzdGF0aWMgaW50IGJ0dHZfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gTlVMTDsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgYnR0dl9maCAqZmg7CiAJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSAwOwotCXVuc2lnbmVkIGludCBpOwogCiAJZHByaW50ayhLRVJOX0RFQlVHICJidHR2OiBvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZm9yIChpID0gMDsgaSA8IGJ0dHZfbnVtOyBpKyspIHsKLQkJaWYgKGJ0dHZzW2ldLnZpZGVvX2RldiAmJgotCQkgICAgYnR0dnNbaV0udmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJYnR2ID0gJmJ0dHZzW2ldOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChidHR2c1tpXS52YmlfZGV2ICYmCi0JCSAgICBidHR2c1tpXS52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJYnR2ID0gJmJ0dHZzW2ldOwotCQkJdHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoTlVMTCA9PSBidHYpIHsKKwlpZiAoYnR2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJfSBlbHNlIGlmIChidHYtPnZiaV9kZXYtPm1pbm9yID09IG1pbm9yKSB7CisJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOworCX0gZWxzZSB7CisJCVdBUk5fT04oMSk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMzQyNCwyMCArMzQwNiwxNCBAQAogc3RhdGljIGludCByYWRpb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCBidHR2ICpidHYgPSBOVUxMOworCXN0cnVjdCBidHR2ICpidHYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCBidHR2X2ZoICpmaDsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWRwcmludGsoImJ0dHY6IG9wZW4gbWlub3I9JWRcbiIsbWlub3IpOwogCiAJbG9ja19rZXJuZWwoKTsKLQlmb3IgKGkgPSAwOyBpIDwgYnR0dl9udW07IGkrKykgewotCQlpZiAoYnR0dnNbaV0ucmFkaW9fZGV2ICYmIGJ0dHZzW2ldLnJhZGlvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWJ0diA9ICZidHR2c1tpXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChOVUxMID09IGJ0dikgeworCVdBUk5fT04oYnR2LT5yYWRpb19kZXYgJiYgYnR2LT5yYWRpb19kZXYtPm1pbm9yICE9IG1pbm9yKTsKKwlpZiAoIWJ0di0+cmFkaW9fZGV2IHx8IGJ0di0+cmFkaW9fZGV2LT5taW5vciAhPSBtaW5vcikgewogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTM0NTgsNyArMzQzNCw3IEBACiAKIAlidHYtPnJhZGlvX3VzZXIrKzsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsQVVEQ19TRVRfUkFESU8sTlVMTCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX3JhZGlvKTsKIAlhdWRpb19pbnB1dChidHYsVFZBVURJT19JTlBVVF9SQURJTyk7CiAKIAltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CkBAIC0zNDc4LDcgKzM0NTQsNyBAQAogCiAJYnR2LT5yYWRpb191c2VyLS07CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFJEU19DTURfQ0xPU0UsICZjbWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTAzLDE2ICszNDc5LDE1IEBACiAJc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKIAlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKIAotCWlmIChVTlNFVCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyKQorCWlmIChidHYtPnR1bmVyX3R5cGUgPT0gVFVORVJfQUJTRU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgZ190dW5lciwgdCk7CiAKIAlpZiAoYnR2LT5hdWRpb19tb2RlX2dwaW8pCiAJCWJ0di0+YXVkaW9fbW9kZV9ncGlvKGJ0diwgdCwgMCk7CkBAIC0zNTU0LDcgKzM1MjksNyBAQAogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCXJldHVybiAwOwogfQogCkBAIC0zNjE1LDcgKzM1OTAsNyBAQAogCWNtZC5pbnN0YW5jZSA9IGZpbGU7CiAJY21kLnJlc3VsdCA9IC1FTk9ERVY7CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBSRFNfQ01EX1JFQUQsICZjbWQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9SRUFELCAmY21kKTsKIAogCXJldHVybiBjbWQucmVzdWx0OwogfQpAQCAtMzYyOCw3ICszNjAzLDcgQEAKIAljbWQuaW5zdGFuY2UgPSBmaWxlOwogCWNtZC5ldmVudF9saXN0ID0gd2FpdDsKIAljbWQucmVzdWx0ID0gLUVOT0RFVjsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBSRFNfQ01EX1BPTEwsICZjbWQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9QT0xMLCAmY21kKTsKIAogCXJldHVybiBjbWQucmVzdWx0OwogfQpAQCAtMzcxMiwxNCArMzY4NywxNCBAQAogCXVuc2lnbmVkIGludCBpLGosbjsKIAogCXByaW50aygiJXM6IHJpc2MgZGlzYXNtOiAlcCBbZG1hPTB4JTA4bHhdXG4iLAotCSAgICAgICBidHYtPmMubmFtZSwgcmlzYy0+Y3B1LCAodW5zaWduZWQgbG9uZylyaXNjLT5kbWEpOworCSAgICAgICBidHYtPmMudjRsMl9kZXYubmFtZSwgcmlzYy0+Y3B1LCAodW5zaWduZWQgbG9uZylyaXNjLT5kbWEpOwogCWZvciAoaSA9IDA7IGkgPCAocmlzYy0+c2l6ZSA+PiAyKTsgaSArPSBuKSB7Ci0JCXByaW50aygiJXM6ICAgMHglbHg6ICIsIGJ0di0+Yy5uYW1lLAorCQlwcmludGsoIiVzOiAgIDB4JWx4OiAiLCBidHYtPmMudjRsMl9kZXYubmFtZSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoaTw8MikpKTsKIAkJbiA9IGJ0dHZfcmlzY19kZWNvZGUobGUzMl90b19jcHUocmlzYy0+Y3B1W2ldKSk7CiAJCWZvciAoaiA9IDE7IGogPCBuOyBqKyspCiAJCQlwcmludGsoIiVzOiAgIDB4JWx4OiAweCUwOHggWyBhcmcgIyVkIF1cbiIsCi0JCQkgICAgICAgYnR2LT5jLm5hbWUsICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoKGkraik8PDIpKSwKKwkJCSAgICAgICBidHYtPmMudjRsMl9kZXYubmFtZSwgKHVuc2lnbmVkIGxvbmcpKHJpc2MtPmRtYSArICgoaStqKTw8MikpLAogCQkJICAgICAgIHJpc2MtPmNwdVtpK2pdLCBqKTsKIAkJaWYgKDAgPT0gcmlzYy0+Y3B1W2ldKQogCQkJYnJlYWs7CkBAIC00MTk1LDkgKzQxNzAsMTAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmYnR2LT5jLnBjaS0+ZGV2OworCXZmZC0+djRsMl9kZXYgPSAmYnR2LT5jLnY0bDJfZGV2OwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZmZC0+ZGVidWcgICA9IGJ0dHZfZGVidWc7CisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBidHYpOwogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICJCVCVkJXMgJXMgKCVzKSIsCiAJCSBidHYtPmlkLCAoYnR2LT5pZD09ODQ4ICYmIGJ0di0+cmV2aXNpb249PTB4MTIpID8gIkEiIDogIiIsCiAJCSB0eXBlX25hbWUsIGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubmFtZSk7CkBAIC00MzA3LDEwICs0MjgzLDE0IEBACiAJaWYgKGJ0dHZfbnVtID09IEJUVFZfTUFYKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwcmludGsoS0VSTl9JTkZPICJidHR2OiBCdDh4eCBjYXJkIGZvdW5kICglZCkuXG4iLCBidHR2X251bSk7Ci0JYnR2PSZidHR2c1tidHR2X251bV07Ci0JbWVtc2V0KGJ0diwwLHNpemVvZigqYnR2KSk7CisJYnR0dnNbYnR0dl9udW1dID0gYnR2ID0ga3phbGxvYyhzaXplb2YoKmJ0diksIEdGUF9LRVJORUwpOworCWlmIChidHYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImJ0dHY6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCWJ0di0+Yy5uciAgPSBidHR2X251bTsKLQlzcHJpbnRmKGJ0di0+Yy5uYW1lLCJidHR2JWQiLGJ0di0+Yy5ucik7CisJc25wcmludGYoYnR2LT5jLnY0bDJfZGV2Lm5hbWUsIHNpemVvZihidHYtPmMudjRsMl9kZXYubmFtZSksCisJCQkiYnR0diVkIiwgYnR2LT5jLm5yKTsKIAogCS8qIGluaXRpYWxpemUgc3RydWN0cyAvIGZpbGwgaW4gZGVmYXVsdHMgKi8KIAltdXRleF9pbml0KCZidHYtPmxvY2spOwpAQCAtNDM0Nyw3ICs0MzI3LDcgQEAKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSwKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldiwwKSwKLQkJCQlidHYtPmMubmFtZSkpIHsKKwkJCQlidHYtPmMudjRsMl9kZXYubmFtZSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBjYW4ndCByZXF1ZXN0IGlvbWVtICgweCVsbHgpLlxuIiwKIAkJICAgICAgIGJ0di0+Yy5uciwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwwKSk7CkBAIC00MzU1LDcgKzQzMzUsMTIgQEAKIAl9CiAJcGNpX3NldF9tYXN0ZXIoZGV2KTsKIAlwY2lfc2V0X2NvbW1hbmQoZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEoZGV2LGJ0dik7CisKKwlyZXN1bHQgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZidHYtPmMudjRsMl9kZXYpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdjRsMl9kZXZpY2VfcmVnaXN0ZXIoKSBmYWlsZWRcbiIsIGJ0di0+Yy5ucik7CisJCWdvdG8gZmFpbDA7CisJfQogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZidHYtPnJldmlzaW9uKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmbGF0KTsKQEAgLTQzNzksNyArNDM2NCw3IEBACiAJLyogZGlzYWJsZSBpcnFzLCByZWdpc3RlciBpcnEgaGFuZGxlciAqLwogCWJ0d3JpdGUoMCwgQlQ4NDhfSU5UX01BU0spOwogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKGJ0di0+Yy5wY2ktPmlycSwgYnR0dl9pcnEsCi0JCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCxidHYtPmMubmFtZSwodm9pZCAqKWJ0dik7CisJICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsICh2b2lkICopYnR2KTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImJ0dHYlZDogY2FuJ3QgZ2V0IElSUSAlZFxuIiwKIAkJICAgICAgIGJ0dHZfbnVtLGJ0di0+Yy5wY2ktPmlycSk7CkBAIC00NDYzLDIxICs0NDQ4LDI0IEBACiAJYnR0dl9udW0rKzsKIAlyZXR1cm4gMDsKIAotIGZhaWwyOgorZmFpbDI6CiAJZnJlZV9pcnEoYnR2LT5jLnBjaS0+aXJxLGJ0dik7CiAKLSBmYWlsMToKK2ZhaWwxOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmJ0di0+Yy52NGwyX2Rldik7CisKK2ZhaWwwOgogCWlmIChidHYtPmJ0ODQ4X21taW8pCiAJCWlvdW5tYXAoYnR2LT5idDg0OF9tbWlvKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KGJ0di0+Yy5wY2ksMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKGJ0di0+Yy5wY2ksMCkpOwotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsTlVMTCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGJ0dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdG9fYnR0dih2NGwyX2Rldik7CiAKIAlpZiAoYnR0dl92ZXJib3NlKQogCQlwcmludGsoImJ0dHYlZDogdW5sb2FkaW5nXG4iLGJ0di0+Yy5ucik7CkBAIC00NTExLDE0ICs0NDk5LDE4IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChidHYtPmMucGNpLDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihidHYtPmMucGNpLDApKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZidHYtPmMudjRsMl9kZXYpOworCWJ0dHZzW2J0di0+Yy5ucl0gPSBOVUxMOworCWtmcmVlKGJ0dik7CisKIAlyZXR1cm47CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYnR0dl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAlzdHJ1Y3QgYnR0dl9idWZmZXJfc2V0IGlkbGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNDU1Myw3ICs0NTQ1LDggQEAKIAogc3RhdGljIGludCBidHR2X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHRvX2J0dHYodjRsMl9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCmluZGV4IGJjZDJjZDIuLmE5OWQ5MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQogc3RhdGljIGludCBpMmNfZGVidWc7CiBzdGF0aWMgaW50IGkyY19odzsKIHN0YXRpYyBpbnQgaTJjX3NjYW47CkBAIC0yMzEsNyArMjI5LDggQEAKIAogc3RhdGljIGludCBidHR2X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewotCXN0cnVjdCBidHR2ICpidHYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHRvX2J0dHYodjRsMl9kZXYpOwogCWludCByZXR2YWwgPSAwOwogCWludCBpOwogCkBAIC0yNjUsNTIgKzI2NCw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogSTJDIGZ1bmN0aW9ucyAtIGNvbW1vbiBzdHVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgYWRkcj1BRERSX1VOU0VUOwotCi0KLQlpZiAoQUREUl9VTlNFVCAhPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX2FkZHIpCi0JCWFkZHIgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyX2FkZHI7Ci0KLQotCWlmIChidHR2X2RlYnVnKQotCQlwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiAlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJCWJ0di0+Yy5uciwgY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsCi0JCQljbGllbnQtPm5hbWUpOwotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSBJMkNfRFJJVkVSSURfTVNQMzQwMCkKLQkJYnR2LT5pMmNfbXNwMzR4eF9jbGllbnQgPSBjbGllbnQ7Ci0JaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSBJMkNfRFJJVkVSSURfVFZBVURJTykKLQkJYnR2LT5pMmNfdHZhdWRpb19jbGllbnQgPSBjbGllbnQ7Ci0JaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgewotCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwotCi0JCWlmICgoYWRkcj09QUREUl9VTlNFVCkgfHwKLQkJCQkoYWRkcj09Y2xpZW50LT5hZGRyKSkgewotCi0JCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX0RJR0lUQUxfVFYgfCBUX1JBRElPOwotCQkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7Ci0JCQl0dW5fc2V0dXAuYWRkciA9IGFkZHI7Ci0JCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKLQkJfQotCi0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYnR0dl9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoMCAhPSBidHYtPmkyY19yYykKLQkJcmV0dXJuOwotCWkyY19jbGllbnRzX2NvbW1hbmQoJmJ0di0+Yy5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCi0KIC8qIHJlYWQgSTJDICovCiBpbnQgYnR0dl9JMkNSZWFkKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqcHJvYmVfZm9yKQogewpAQCAtNDE3LDIxICszNzAsMTUgQEAKIAkJYnR2LT5jLmkyY19hZGFwLmFsZ29fZGF0YSA9ICZidHYtPmkyY19hbGdvOwogCX0KIAlidHYtPmMuaTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKLQlidHYtPmMuaTJjX2FkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwotCWJ0di0+Yy5pMmNfYWRhcC5jbGllbnRfcmVnaXN0ZXIgPSBhdHRhY2hfaW5mb3JtOwogCiAJYnR2LT5jLmkyY19hZGFwLmRldi5wYXJlbnQgPSAmYnR2LT5jLnBjaS0+ZGV2OwogCXNucHJpbnRmKGJ0di0+Yy5pMmNfYWRhcC5uYW1lLCBzaXplb2YoYnR2LT5jLmkyY19hZGFwLm5hbWUpLAogCQkgImJ0JWQgIyVkIFslc10iLCBidHYtPmlkLCBidHYtPmMubnIsCiAJCSBidHYtPnVzZV9pMmNfaHcgPyAiaHciIDogInN3Iik7CiAKLQlpMmNfc2V0X2FkYXBkYXRhKCZidHYtPmMuaTJjX2FkYXAsIGJ0dik7CisJaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCAmYnR2LT5jLnY0bDJfZGV2KTsKIAlidHYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidHYtPmMuaTJjX2FkYXA7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ub192aWRlbykKLQkJYnR2LT5jLmkyY19hZGFwLmNsYXNzICY9IH5JMkNfQ0xBU1NfVFZfQU5BTE9HOwotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kdmIpCi0JCWJ0di0+Yy5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfRElHSVRBTDsKIAogCWlmIChidHYtPnVzZV9pMmNfaHcpIHsKIAkJYnR2LT5pMmNfcmMgPSBpMmNfYWRkX2FkYXB0ZXIoJmJ0di0+Yy5pMmNfYWRhcCk7CkBAIC00NDEsNyArMzg4LDcgQEAKIAkJYnR2LT5pMmNfcmMgPSBpMmNfYml0X2FkZF9idXMoJmJ0di0+Yy5pMmNfYWRhcCk7CiAJfQogCWlmICgwID09IGJ0di0+aTJjX3JjICYmIGkyY19zY2FuKQotCQlkb19pMmNfc2NhbihidHYtPmMubmFtZSwmYnR2LT5pMmNfY2xpZW50KTsKKwkJZG9faTJjX3NjYW4oYnR2LT5jLnY0bDJfZGV2Lm5hbWUsICZidHYtPmkyY19jbGllbnQpOwogCXJldHVybiBidHYtPmkyY19yYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaWYuYwppbmRleCBlY2YwNzk4Li5hNmE1NDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaWYuYwpAQCAtNDcsNyArNDcsMTAgQEAKIHsKIAlpZiAoY2FyZCA+PSBidHR2X251bSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGJ0dHZzW2NhcmRdLmMucGNpOworCWlmICghYnR0dnNbY2FyZF0pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJ0dHZzW2NhcmRdLT5jLnBjaTsKIH0KIAogCkBAIC01OSw3ICs2MiwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlidHYgPSAmYnR0dnNbY2FyZF07CisJYnR2ID0gYnR0dnNbY2FyZF07CisJaWYgKCFidHYpCisJCXJldHVybiAtRU5PREVWOworCiAJZ3Bpb19pbm91dChtYXNrLGRhdGEpOwogCWlmIChidHR2X2dwaW8pCiAJCWJ0dHZfZ3Bpb190cmFja2luZyhidHYsImV4dGVybiBlbmFibGUiKTsKQEAgLTc0LDcgKzgwLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnR2ID0gJmJ0dHZzW2NhcmRdOworCWJ0diA9IGJ0dHZzW2NhcmRdOworCWlmICghYnR2KQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmKGJ0di0+c2h1dGRvd24pIHsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC05NCw3ICsxMDIsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlidHYgPSAmYnR0dnNbY2FyZF07CisJYnR2ID0gYnR0dnNbY2FyZF07CisJaWYgKCFidHYpCisJCXJldHVybiAtRU5PREVWOwogCiAvKiBwcmlvciBzZXR0aW5nIEJUODQ4X0dQSU9fUkVHX0lOUCBpcyAocHJvYmFibHkpIG5vdCBuZWVkZWQKICAgIGJlY2F1c2UgZGlyZWN0IGlucHV0IGlzIHNldCBvbiBpbml0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYwppbmRleCA1YjFiOGU0Li5kMTZhZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogCWludCB0b3RhbHdpZHRoICAgPSB0dm5vcm0tPnRvdGFsd2lkdGg7CiAJaW50IHNjYWxlZHR3aWR0aCA9IHR2bm9ybS0+c2NhbGVkdHdpZHRoOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2J0di0+aW5wdXRdIDwgMCkgeworCWlmIChidHYtPmlucHV0ID09IGJ0di0+ZGlnKSB7CiAJCXN3aWR0aCAgICAgICA9IDcyMDsKIAkJdG90YWx3aWR0aCAgID0gODU4OwogCQlzY2FsZWR0d2lkdGggPSA4NTg7CkBAIC0zOTEsNyArMzkxLDcgQEAKIAkgICAgICYmIGNyb3AtPndpZHRoID09IHR2bm9ybS0+Y3JvcGNhcC5kZWZyZWN0LndpZHRoCiAJICAgICAmJiBjcm9wLT5oZWlnaHQgPT0gdHZub3JtLT5jcm9wY2FwLmRlZnJlY3QuaGVpZ2h0CiAJICAgICAmJiB3aWR0aCA8PSB0dm5vcm0tPnN3aWR0aCAvKiBzZWUgUEFMLU5jIGV0IGFsICovKQotCSAgICB8fCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSA8IDApIHsKKwkgICAgfHwgYnR2LT5pbnB1dCA9PSBidHYtPmRpZykgewogCQlidHR2X2NhbGNfZ2VvX29sZChidHYsIGdlbywgd2lkdGgsIGhlaWdodCwKIAkJCQkgIGJvdGhfZmllbGRzLCB0dm5vcm0pOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKaW5kZXggNjgxOWUyMS4uZTc5YTQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIGludCBub3JtKQordm9pZCBidHR2X3ZiaV9mbXRfcmVzZXQoc3RydWN0IGJ0dHZfdmJpX2ZtdCAqZiwgdW5zaWduZWQgaW50IG5vcm0pCiB7CiAJY29uc3Qgc3RydWN0IGJ0dHZfdHZub3JtICp0dm5vcm07CiAJdW5zaWduZWQgaW50IHJlYWxfc2FtcGxlc19wZXJfbGluZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKaW5kZXggNTI5YmY2Yy4uM2QzNmRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LmgKQEAgLTE0LDggKzE0LDkgQEAKICNpZm5kZWYgX0JUVFZfSF8KICNkZWZpbmUgX0JUVFZfSF8KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9pci1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9pci1rYmQtaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KQEAgLTE4MCw2ICsxODEsMTAgQEAKICNkZWZpbmUgQlRUVl9CT0FSRF9WRDAxMgkJICAgMHg5OQogI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDEyX1gxCQkgICAweDlhCiAjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMTJfWDIJCSAgIDB4OWIKKyNkZWZpbmUgQlRUVl9CT0FSRF9JVkNFODc4NAkJICAgMHg5YworI2RlZmluZSBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFMJICAgMHg5ZAorI2RlZmluZSBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFNfU0wJICAgMHg5ZQorI2RlZmluZSBCVFRWX0JPQVJEX1BWMTgzICAgICAgICAgICAgICAgICAgIDB4OWYKIAogCiAvKiBtb3JlIGNhcmQtc3BlY2lmaWMgZGVmaW5lcyAqLwpAQCAtMTkxLDEyICsxOTYsOSBAQAogI2RlZmluZSBXSU5WSUVXX1BUMjI1NF9EQVRBIDB4MjAKICNkZWZpbmUgV0lOVklFV19QVDIyNTRfU1RST0JFIDB4ODAKIAotLyogZGlnaXRhbF9tb2RlICovCi0jZGVmaW5lIERJR0lUQUxfTU9ERV9WSURFTyAxCi0jZGVmaW5lIERJR0lUQUxfTU9ERV9DQU1FUkEgMgotCiBzdHJ1Y3QgYnR0dl9jb3JlIHsKIAkvKiBkZXZpY2Ugc3RydWN0cyAqLworCXN0cnVjdCB2NGwyX2RldmljZSAgIHY0bDJfZGV2OwogCXN0cnVjdCBwY2lfZGV2ICAgICAgICpwY2k7CiAJc3RydWN0IGkyY19hZGFwdGVyICAgaTJjX2FkYXA7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgc3ViczsgICAgIC8qIHN0cnVjdCBidHR2X3N1Yl9kZXZpY2UgKi8KQEAgLTIwNCw1OSArMjA2LDc5IEBACiAJLyogZGV2aWNlIGNvbmZpZyAqLwogCXVuc2lnbmVkIGludCAgICAgICAgIG5yOyAgICAgICAvKiBkZXYgbnIgKGZvciBwcmludGsoImJ0dHYlZDogLi4uIik7ICAqLwogCXVuc2lnbmVkIGludCAgICAgICAgIHR5cGU7ICAgICAvKiBjYXJkIHR5cGUgKHBvaW50ZXIgaW50byB0dmNhcmRzW10pICAqLwotCWNoYXIgICAgICAgICAgICAgICAgIG5hbWVbOF07ICAvKiBkZXYgbmFtZSAqLwogfTsKIAogc3RydWN0IGJ0dHY7CiAKLQotc3RydWN0IHR2Y2FyZAoteworc3RydWN0IHR2Y2FyZCB7CiAJY2hhciAqbmFtZTsKLQl1bnNpZ25lZCBpbnQgdmlkZW9faW5wdXRzOwotCXVuc2lnbmVkIGludCBhdWRpb19pbnB1dHM7Ci0JdW5zaWduZWQgaW50IHR1bmVyOwotCXVuc2lnbmVkIGludCBzdmhzOwotCXVuc2lnbmVkIGludCBkaWdpdGFsX21vZGU7IC8vIERJR0lUQUxfTU9ERV9DQU1FUkEgb3IgRElHSVRBTF9NT0RFX1ZJREVPCisJdm9pZCAoKnZvbHVtZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBfX3UxNiB2b2x1bWUpOworCXZvaWQgKCphdWRpb19tb2RlX2dwaW8pKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lciwgaW50IHNldCk7CisJdm9pZCAoKm11eHNlbF9ob29rKShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOworCisJLyogTVVYIGJpdHMgZm9yIGVhY2ggaW5wdXQsIHR3byBiaXRzIHBlciBpbnB1dCBzdGFydGluZyB3aXRoIHRoZSBMU0IgKi8KKwl1MzIgbXV4c2VsOyAvKiBVc2UgTVVYU0VMKCkgdG8gc2V0ICovCisKIAl1MzIgZ3Bpb21hc2s7Ci0JdTMyIG11eHNlbFsxNl07CiAJdTMyIGdwaW9tdXhbNF07ICAvKiBUdW5lciwgUmFkaW8sIGV4dGVybmFsLCBpbnRlcm5hbCAqLwogCXUzMiBncGlvbXV0ZTsgICAgLyogR1BJTyBtdXRlIHNldHRpbmcgKi8KIAl1MzIgZ3Bpb21hc2syOyAgIC8qIEdQSU8gTVVYIG1hc2sgKi8KIAorCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOworCXU4IHR1bmVyX2FkZHI7CisJdTggdmlkZW9faW5wdXRzOwkvKiBOdW1iZXIgb2YgaW5wdXRzICovCisJdW5zaWduZWQgaW50IHN2aHM6NDsJLyogV2hpY2ggaW5wdXQgaXMgcy12aWRlbyAqLworI2RlZmluZSBOT19TVkhTCTE1CisJdW5zaWduZWQgaW50IHBsbDoyOworI2RlZmluZSBQTExfTk9ORSAwCisjZGVmaW5lIFBMTF8yOCAgIDEKKyNkZWZpbmUgUExMXzM1ICAgMgorCiAJLyogaTJjIGF1ZGlvIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX21zcDM0eHg6MTsKIAl1bnNpZ25lZCBpbnQgbm9fdGRhOTg3NToxOwogCXVuc2lnbmVkIGludCBub190ZGE3NDMyOjE7CiAJdW5zaWduZWQgaW50IG5lZWRzX3R2YXVkaW86MTsKIAl1bnNpZ25lZCBpbnQgbXNwMzR4eF9hbHQ6MTsKKwkvKiBOb3RlOiBjdXJyZW50bHkgbm8gY2FyZCBkZWZpbml0aW9uIG5lZWRzIHRvIG1hcmsgdGhlIHByZXNlbmNlCisJICAgb2YgYSBSRFMgc2FhNjU4OCBjaGlwLiBJZiB0aGlzIGlzIGV2ZXIgbmVlZGVkLCB0aGVuIGFkZCBhIG5ldworCSAgICdoYXNfc2FhNjU4OCcgYml0IGhlcmUuICovCiAKLQkvKiBmbGFnOiB2aWRlbyBwY2kgZnVuY3Rpb24gaXMgdW51c2VkICovCi0JdW5zaWduZWQgaW50IG5vX3ZpZGVvOjE7CisJdW5zaWduZWQgaW50IG5vX3ZpZGVvOjE7IC8qIHZpZGVvIHBjaSBmdW5jdGlvbiBpcyB1bnVzZWQgKi8KIAl1bnNpZ25lZCBpbnQgaGFzX2R2YjoxOwogCXVuc2lnbmVkIGludCBoYXNfcmVtb3RlOjE7CisJdW5zaWduZWQgaW50IGhhc19yYWRpbzoxOworCXVuc2lnbmVkIGludCBoYXNfZGlnX2luOjE7IC8qIEhhcyBkaWdpdGFsIGlucHV0IChhbHdheXMgbGFzdCBpbnB1dCkgKi8KIAl1bnNpZ25lZCBpbnQgbm9fZ3Bpb2lycToxOwotCi0JLyogb3RoZXIgc2V0dGluZ3MgKi8KLQl1bnNpZ25lZCBpbnQgcGxsOwotI2RlZmluZSBQTExfTk9ORSAwCi0jZGVmaW5lIFBMTF8yOCAgIDEKLSNkZWZpbmUgUExMXzM1ICAgMgotCi0JdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7Ci0JdW5zaWduZWQgaW50IHR1bmVyX2FkZHI7Ci0JdW5zaWduZWQgaW50IHJhZGlvX2FkZHI7Ci0KLQl1bnNpZ25lZCBpbnQgaGFzX3JhZGlvOwotCi0Jdm9pZCAoKnZvbHVtZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBfX3UxNiB2b2x1bWUpOwotCXZvaWQgKCphdWRpb19tb2RlX2dwaW8pKHN0cnVjdCBidHR2ICpidHYsIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lciwgaW50IHNldCk7Ci0KLQl2b2lkICgqbXV4c2VsX2hvb2spKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CiB9OwogCiBleHRlcm4gc3RydWN0IHR2Y2FyZCBidHR2X3R2Y2FyZHNbXTsKIAorLyoKKyAqIFRoaXMgYml0IG9mIGNwcCB2b29kb28gaXMgdXNlZCB0byBjcmVhdGUgYSBtYWNybyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgKiBhcmd1bWVudHMgKDEgdG8gMTYpLiAgSXQgd2lsbCBwYWNrIGVhY2ggYXJndW1lbnQgaW50byBhIHdvcmQgdHdvIGJpdHMgYXQgYQorICogdGltZS4gIEl0IGNhbid0IGJlIGEgZnVuY3Rpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBjb21waWxlIHRpbWUgY29uc3RhbnQgdG8KKyAqIGluaXRpYWxpemUgc3RydWN0dXJlcy4gIFNpbmNlIGVhY2ggYXJndW1lbnQgbXVzdCBmaXQgaW4gdHdvIGJpdHMsIGl0J3Mgb2sKKyAqIHRoYXQgdGhleSBhcmUgY2hhbmdlZCB0byBvY3RhbC4gIE9uZSBzaG91bGQgbm90IHVzZSBoZXggbnVtYmVyLCBtYWNyb3MsIG9yCisgKiBhbnl0aGluZyBlbHNlIHdpdGggdGhpcyBtYWNyby4gIEp1c3QgdXNlIHBsYWluIGludGVnZXJzIGZyb20gMCB0byAzLgorICovCisjZGVmaW5lIF9NVVhTRUxmKGEpICAgICAgCTAjI2EgPDwgMzAKKyNkZWZpbmUgX01VWFNFTGUoYSwgYi4uLikJMCMjYSA8PCAyOCB8IF9NVVhTRUxmKGIpCisjZGVmaW5lIF9NVVhTRUxkKGEsIGIuLi4pCTAjI2EgPDwgMjYgfCBfTVVYU0VMZShiKQorI2RlZmluZSBfTVVYU0VMYyhhLCBiLi4uKQkwIyNhIDw8IDI0IHwgX01VWFNFTGQoYikKKyNkZWZpbmUgX01VWFNFTGIoYSwgYi4uLikJMCMjYSA8PCAyMiB8IF9NVVhTRUxjKGIpCisjZGVmaW5lIF9NVVhTRUxhKGEsIGIuLi4pCTAjI2EgPDwgMjAgfCBfTVVYU0VMYihiKQorI2RlZmluZSBfTVVYU0VMOShhLCBiLi4uKQkwIyNhIDw8IDE4IHwgX01VWFNFTGEoYikKKyNkZWZpbmUgX01VWFNFTDgoYSwgYi4uLikJMCMjYSA8PCAxNiB8IF9NVVhTRUw5KGIpCisjZGVmaW5lIF9NVVhTRUw3KGEsIGIuLi4pCTAjI2EgPDwgMTQgfCBfTVVYU0VMOChiKQorI2RlZmluZSBfTVVYU0VMNihhLCBiLi4uKQkwIyNhIDw8IDEyIHwgX01VWFNFTDcoYikKKyNkZWZpbmUgX01VWFNFTDUoYSwgYi4uLikJMCMjYSA8PCAxMCB8IF9NVVhTRUw2KGIpCisjZGVmaW5lIF9NVVhTRUw0KGEsIGIuLi4pCTAjI2EgPDwgOCAgfCBfTVVYU0VMNShiKQorI2RlZmluZSBfTVVYU0VMMyhhLCBiLi4uKQkwIyNhIDw8IDYgIHwgX01VWFNFTDQoYikKKyNkZWZpbmUgX01VWFNFTDIoYSwgYi4uLikJMCMjYSA8PCA0ICB8IF9NVVhTRUwzKGIpCisjZGVmaW5lIF9NVVhTRUwxKGEsIGIuLi4pCTAjI2EgPDwgMiAgfCBfTVVYU0VMMihiKQorI2RlZmluZSBNVVhTRUwoYSwgYi4uLikJCShhIHwgX01VWFNFTDEoYikpCisKIC8qIGlkZW50aWZpY2F0aW9uIC8gaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNhcmQgKi8KIGV4dGVybiB2b2lkIGJ0dHZfaWRjYXJkKHN0cnVjdCBidHR2ICpidHYpOwogZXh0ZXJuIHZvaWQgYnR0dl9pbml0X2NhcmQxKHN0cnVjdCBidHR2ICpidHYpOwpAQCAtMjY0LDcgKzI4Niw3IEBACiAKIC8qIGNhcmQtc3BlY2lmaWMgZnVudGlvbnMgKi8KIGV4dGVybiB2b2lkIHRlYTU3NTdfc2V0X2ZyZXEoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgc2hvcnQgZnJlcSk7Ci1leHRlcm4gdm9pZCBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgbm9ybSk7CitleHRlcm4gdTMyIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIHUzMiBncGlvYml0cyk7CiAKIC8qIGV4dHJhIHR3ZWFrcyBmb3Igc29tZSBjaGlwc2V0cyAqLwogZXh0ZXJuIHZvaWQgYnR0dl9jaGVja19jaGlwc2V0KHZvaWQpOwpAQCAtMzM2LDcgKzM1OCw5IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBpMmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLWV4dGVybiB2b2lkIGJ0dHZfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworI2RlZmluZSBidHR2X2NhbGxfYWxsKGJ0diwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZidHYtPmMudjRsMl9kZXYsIDAsIG8sIGYsICMjYXJncykKKwogZXh0ZXJuIGludCBidHR2X0kyQ1JlYWQoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgY2hhciBhZGRyLCBjaGFyICpwcm9iZV9mb3IpOwogZXh0ZXJuIGludCBidHR2X0kyQ1dyaXRlKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciBiMSwKIAkJCSB1bnNpZ25lZCBjaGFyIGIyLCBpbnQgYm90aCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKaW5kZXggMTk5YTRkMi4uOTY0OTg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTEzNSw3ICsxMzQsNyBAQAogCiAJLyogYnR0diBzcGVjaWZpYyAqLwogCWNvbnN0IHN0cnVjdCBidHR2X2Zvcm1hdCAgICpmbXQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgdHZub3JtOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHR2bm9ybTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidGZvcm1hdDsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBidHN3YXA7CiAJc3RydWN0IGJ0dHZfZ2VvbWV0cnkgICAgICAgZ2VvOwpAQCAtMTU0LDcgKzE1Myw3IEBACiB9OwogCiBzdHJ1Y3QgYnR0dl9vdmVybGF5IHsKLQlpbnQgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgIHR2bm9ybTsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgIHc7CiAJZW51bSB2NGwyX2ZpZWxkICAgICAgICBmaWVsZDsKIAlzdHJ1Y3QgdjRsMl9jbGlwICAgICAgICpjbGlwczsKQEAgLTE3NCw3ICsxNzMsNyBAQAogfTsKIAogLyogYnR0di12YmkuYyAqLwotdm9pZCBidHR2X3ZiaV9mbXRfcmVzZXQoc3RydWN0IGJ0dHZfdmJpX2ZtdCAqZiwgaW50IG5vcm0pOwordm9pZCBidHR2X3ZiaV9mbXRfcmVzZXQoc3RydWN0IGJ0dHZfdmJpX2ZtdCAqZiwgdW5zaWduZWQgaW50IG5vcm0pOwogCiBzdHJ1Y3QgYnR0dl9jcm9wIHsKIAkvKiBBIGNyb3BwaW5nIHJlY3RhbmdsZSBpbiBzdHJ1Y3QgYnR0dl90dm5vcm0uY3JvcGNhcCB1bml0cy4gKi8KQEAgLTMyOSw3ICszMjgsOCBAQAogCXVuc2lnbmVkIGludCBjYXJkaWQ7ICAgLyogcGNpIHN1YnN5c3RlbSBpZCAoYnQ4NzggYmFzZWQgb25lcykgKi8KIAl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsgIC8qIHR1bmVyIGNoaXAgdHlwZSAqLwogCXVuc2lnbmVkIGludCB0ZGE5ODg3X2NvbmY7Ci0JdW5zaWduZWQgaW50IHN2aHM7CisJdW5zaWduZWQgaW50IHN2aHMsIGRpZzsKKwl1bnNpZ25lZCBpbnQgaGFzX3NhYTY1ODg6MTsKIAlzdHJ1Y3QgYnR0dl9wbGxfaW5mbyBwbGw7CiAJaW50IHRyaXRvbjE7CiAJaW50IGdwaW9pcnE7CkBAIC0zNTMsOCArMzUzLDggQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc3RhdGUsIGkyY19yYzsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBpMmNfZG9uZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICBpMmNfcXVldWU7Ci0Jc3RydWN0IGkyY19jbGllbnQgCSAgKmkyY19tc3AzNHh4X2NsaWVudDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAJICAqaTJjX3R2YXVkaW9fY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiAJICAqc2RfbXNwMzR4eDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgCSAgKnNkX3R2YXVkaW87CiAKIAkvKiB2aWRlbzRsaW51eCAoMSkgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CkBAIC0zNzgsNyArMzc4LDggQEAKIAl1bnNpZ25lZCBpbnQgYXVkaW87CiAJdW5zaWduZWQgaW50IG11dGU7CiAJdW5zaWduZWQgbG9uZyBmcmVxOwotCWludCB0dm5vcm0saHVlLGNvbnRyYXN0LGJyaWdodCxzYXR1cmF0aW9uOworCXVuc2lnbmVkIGludCB0dm5vcm07CisJaW50IGh1ZSwgY29udHJhc3QsIGJyaWdodCwgc2F0dXJhdGlvbjsKIAlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciBmYnVmOwogCXVuc2lnbmVkIGludCBmaWVsZF9jb3VudDsKIApAQCAtNDU4LDEwICs0NTksMjEgQEAKIAlfX3MzMgkJCWNyb3Bfc3RhcnQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidHR2ICp0b19idHR2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGJ0dHYsIGMudjRsMl9kZXYpOworfQorCiAvKiBvdXIgZGV2aWNlcyAqLwogI2RlZmluZSBCVFRWX01BWCAzMgogZXh0ZXJuIHVuc2lnbmVkIGludCBidHR2X251bTsKLWV4dGVybiBzdHJ1Y3QgYnR0diBidHR2c1tCVFRWX01BWF07CitleHRlcm4gc3RydWN0IGJ0dHYgKmJ0dHZzW0JUVFZfTUFYXTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnR0dl9tdXhzZWwoY29uc3Qgc3RydWN0IGJ0dHYgKmJ0diwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGlucHV0KQoreworCXJldHVybiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWwgPj4gKGlucHV0ICogMikpICYgMzsKK30KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCmluZGV4IDQ2ZmQ1NzMuLjdhYmU5NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwpAQCAtMTEsNiArMTEsMTIgQEAKICAqCiAgKiBXcml0dGVuIGJ5IEpvbmF0aGFuIENvcmJldCwgY29yYmV0QGx3bi5uZXQuCiAgKgorICogdjRsMl9kZXZpY2UvdjRsMl9zdWJkZXYgY29udmVyc2lvbiBieToKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqCisgKiBOb3RlOiB0aGlzIGNvbnZlcnNpb24gaXMgdW50ZXN0ZWQhIFBsZWFzZSBjb250YWN0IHRoZSBsaW51eC1tZWRpYQorICogbWFpbGluZ2xpc3QgaWYgeW91IGNhbiB0ZXN0IHRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIHRlc3QgcmVzdWx0cy4KKyAqCiAgKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKICAqIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCiAgKi8KQEAgLTI1LDcgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zMyw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIApAQCAtMTM2LDYgKzE0MSw3IEBACiAgKi8KIHN0cnVjdCBjYWZlX2NhbWVyYQogeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAllbnVtIGNhZmVfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsgICAJCS8qIEJ1ZmZlciBzdGF0dXMsIG1haW5seSAoZGV2X2xvY2spICovCiAJaW50IHVzZXJzOwkJCS8qIEhvdyBtYW55IG9wZW4gRkRzICovCkBAIC0xNDUsOSArMTUxLDEwIEBACiAJICogU3Vic3lzdGVtIHN0cnVjdHVyZXMuCiAJICovCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSB2NGxkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqc2Vuc29yOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Vuc29yOworCXVuc2lnbmVkIHNob3J0IHNlbnNvcl9hZGRyOwogCiAJdW5zaWduZWQgY2hhciBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CS8qIGxpbmsgdG8gb3RoZXIgZGV2aWNlcyAqLwpAQCAtMTgwLDEwICsxODcsNiBAQAogCS8qIE1pc2MgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBzbWJ1c193YWl0OwkvKiBXYWl0aW5nIG9uIGkyYyBldmVudHMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBpb3dhaXQ7CS8qIFdhaXRpbmcgb24gZnJhbWUgZGF0YSAqLwotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQlzdHJ1Y3QgZGVudHJ5ICpkZnNfcmVnczsKLQlzdHJ1Y3QgZGVudHJ5ICpkZnNfY2FtX3JlZ3M7Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC0xOTUsNiArMTk4LDEzIEBACiAjZGVmaW5lIENGX0RNQV9BQ1RJVkUJIDMJLyogQSBmcmFtZSBpcyBpbmNvbWluZyAqLwogI2RlZmluZSBDRl9DT05GSUdfTkVFREVEIDQJLyogTXVzdCBjb25maWd1cmUgaGFyZHdhcmUgKi8KIAorI2RlZmluZSBzZW5zb3JfY2FsbChjYW0sIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yLCBvLCBmLCAjI2FyZ3MpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNhZmVfY2FtZXJhICp0b19jYW0oc3RydWN0IHY0bDJfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjYWZlX2NhbWVyYSwgdjRsMl9kZXYpOworfQogCiAKIC8qCkBAIC0yMzgsNTkgKzI0OCw3IEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBXZSBrZWVwIGEgc2ltcGxlIGxpc3Qgb2Yga25vd24gZGV2aWNlcyB0byBzZWFyY2ggYXQgb3BlbiB0aW1lLgotICovCi1zdGF0aWMgTElTVF9IRUFEKGNhZmVfZGV2X2xpc3QpOwotc3RhdGljIERFRklORV9NVVRFWChjYWZlX2Rldl9saXN0X2xvY2spOwogCi1zdGF0aWMgdm9pZCBjYWZlX2FkZF9kZXYoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZjYW0tPmRldl9saXN0LCAmY2FmZV9kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBjYWZlX3JlbW92ZV9kZXYoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2RlbCgmY2FtLT5kZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IGNhZmVfY2FtZXJhICpjYWZlX2ZpbmRfZGV2KGludCBtaW5vcikKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKLQotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjYW0sICZjYWZlX2Rldl9saXN0LCBkZXZfbGlzdCkgewotCQlpZiAoY2FtLT52NGxkZXYubWlub3IgPT0gbWlub3IpCi0JCQlnb3RvIGRvbmU7Ci0JfQotCWNhbSA9IE5VTEw7Ci0gIGRvbmU6Ci0JbXV0ZXhfdW5sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCXJldHVybiBjYW07Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FmZV9maW5kX2J5X3BkZXYoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07Ci0KLQltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FtLCAmY2FmZV9kZXZfbGlzdCwgZGV2X2xpc3QpIHsKLQkJaWYgKGNhbS0+cGRldiA9PSBwZGV2KQotCQkJZ290byBkb25lOwotCX0KLQljYW0gPSBOVUxMOwotICBkb25lOgotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlyZXR1cm4gY2FtOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIERldmljZSByZWdpc3RlciBJL08KICAqLwpAQCAtNDgxLDE4ICs0MzksMTEgQEAKIAkJdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcncsIHU4IGNvbW1hbmQsCiAJCWludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJLyoKLQkgKiBSZWZ1c2UgdG8gdGFsayB0byBhbnl0aGluZyBidXQgT1YgY2FtIGNoaXBzLiAgV2Ugc2hvdWxkCi0JICogbmV2ZXIgZXZlbiBzZWUgYW4gYXR0ZW1wdCB0byBkbyBzbywgYnV0IG9uZSBuZXZlciBrbm93cy4KLQkgKi8KLQlpZiAoY2FtLT5zZW5zb3IgJiYgYWRkciAhPSBjYW0tPnNlbnNvci0+YWRkcikgewotCQljYW1fZXJyKGNhbSwgImZ1bmt5IHNtYnVzIGFkZHIgJWRcbiIsIGFkZHIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyoKIAkgKiBUaGlzIGludGVyZmFjZSB3b3VsZCBhcHBlYXIgdG8gb25seSBkbyBieXRlIGRhdGEgb3BzLiAgT0sKIAkgKiBpdCBjYW4gZG8gd29yZCB0b28sIGJ1dCB0aGUgY2FtIGNoaXAgaGFzIG5vIHVzZSBmb3IgdGhhdC4KIAkgKi8KQEAgLTUzMCwzOCArNDgxLDkgQEAKIH07CiAKIC8qIFNvbWVib2R5IGlzIG9uIHRoZSBidXMgKi8KLXN0YXRpYyBpbnQgY2FmZV9jYW1faW5pdChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSk7CiBzdGF0aWMgdm9pZCBjYWZlX2N0bHJfc3RvcF9kbWEoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwogc3RhdGljIHZvaWQgY2FmZV9jdGxyX3Bvd2VyX2Rvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwogCi1zdGF0aWMgaW50IGNhZmVfc21idXNfYXR0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQkvKgotCSAqIERvbid0IHRhbGsgdG8gY2hpcHMgd2UgZG9uJ3QgcmVjb2duaXplLgotCSAqLwotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0gSTJDX0RSSVZFUklEX09WNzY3MCkgewotCQljYW0tPnNlbnNvciA9IGNsaWVudDsKLQkJcmV0dXJuIGNhZmVfY2FtX2luaXQoY2FtKTsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgY2FmZV9zbWJ1c19kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWlmIChjYW0tPnNlbnNvciA9PSBjbGllbnQpIHsKLQkJY2FmZV9jdGxyX3N0b3BfZG1hKGNhbSk7Ci0JCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7Ci0JCWNhbV9lcnIoY2FtLCAibG9zdCB0aGUgc2Vuc29yIVxuIik7Ci0JCWNhbS0+c2Vuc29yID0gTlVMTDsgIC8qIEJ1bW1lciwgbm8gY2FtZXJhICovCi0JCWNhbS0+c3RhdGUgPSBTX05PVFJFQURZOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBjYWZlX3NtYnVzX3NldHVwKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQogewogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9ICZjYW0tPmkyY19hZGFwdGVyOwpAQCAtNTcwLDEyICs0OTIsMTAgQEAKIAljYWZlX3NtYnVzX2VuYWJsZV9pcnEoY2FtKTsKIAlhZGFwLT5pZCA9IEkyQ19IV19TTUJVU19DQUZFOwogCWFkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JYWRhcC0+Y2xpZW50X3JlZ2lzdGVyID0gY2FmZV9zbWJ1c19hdHRhY2g7Ci0JYWRhcC0+Y2xpZW50X3VucmVnaXN0ZXIgPSBjYWZlX3NtYnVzX2RldGFjaDsKIAlhZGFwLT5hbGdvID0gJmNhZmVfc21idXNfYWxnbzsKIAlzdHJjcHkoYWRhcC0+bmFtZSwgImNhZmVfY2NpYyIpOwogCWFkYXAtPmRldi5wYXJlbnQgPSAmY2FtLT5wZGV2LT5kZXY7Ci0JaTJjX3NldF9hZGFwZGF0YShhZGFwLCBjYW0pOworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgJmNhbS0+djRsMl9kZXYpOwogCXJldCA9IGkyY19hZGRfYWRhcHRlcihhZGFwKTsKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlIGkyYyBhZGFwdGVyXG4iKTsKQEAgLTgwOSw5ICs3MjksOSBAQAogCSAqIENvbnRyb2wgMSBpcyBwb3dlciBkb3duLCBzZXQgdG8gMCB0byBvcGVyYXRlLgogCSAqLwogCWNhZmVfcmVnX3dyaXRlKGNhbSwgUkVHX0dQUiwgR1BSX0MxRU58R1BSX0MwRU4pOyAvKiBwd3IgdXAsIHJlc2V0ICovCi0vLwltZGVsYXkoMSk7IC8qIE1hcnZlbGwgc2F5cyAxbXMgd2lsbCBkbyBpdCAqLworLyoJbWRlbGF5KDEpOyAqLyAvKiBNYXJ2ZWxsIHNheXMgMW1zIHdpbGwgZG8gaXQgKi8KIAljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOfEdQUl9DMCk7Ci0vLwltZGVsYXkoMSk7IC8qIEVub3VnaD8gKi8KKy8qCW1kZWxheSgxKTsgKi8gLyogRW5vdWdoPyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhbS0+ZGV2X2xvY2ssIGZsYWdzKTsKIAltc2xlZXAoNSk7IC8qIEp1c3QgdG8gYmUgc3VyZSAqLwogfQpAQCAtODMzLDIzICs3NTMsOSBAQAogICogQ29tbXVuaWNhdGlvbnMgd2l0aCB0aGUgc2Vuc29yLgogICovCiAKLXN0YXRpYyBpbnQgX19jYWZlX2NhbV9jbWQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0sIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqc2MgPSBjYW0tPnNlbnNvcjsKLQlpbnQgcmV0OwotCi0JaWYgKHNjID09IE5VTEwgfHwgc2MtPmRyaXZlciA9PSBOVUxMIHx8IHNjLT5kcml2ZXItPmNvbW1hbmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gc2MtPmRyaXZlci0+Y29tbWFuZChzYywgY21kLCBhcmcpOwotCWlmIChyZXQgPT0gLUVQRVJNKSAvKiBVbnN1cHBvcnRlZCBjb21tYW5kICovCi0JCXJldHVybiAwOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgX19jYWZlX2NhbV9yZXNldChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKLQlpbnQgemVybyA9IDA7Ci0JcmV0dXJuIF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0lOVF9SRVNFVCwgJnplcm8pOworCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHJlc2V0LCAwKTsKIH0KIAogLyoKQEAgLTg2OSwxNCArNzc1LDEzIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAJY2hpcC5tYXRjaC50eXBlID0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSOwotCWNoaXAubWF0Y2guYWRkciA9IGNhbS0+c2Vuc29yLT5hZGRyOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0RCR19HX0NISVBfSURFTlQsICZjaGlwKTsKKwljaGlwLm1hdGNoLmFkZHIgPSBjYW0tPnNlbnNvcl9hZGRyOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAJY2FtLT5zZW5zb3JfdHlwZSA9IGNoaXAuaWRlbnQ7Ci0vLwlpZiAoY2FtLT5zZW5zb3ItPmFkZHIgIT0gT1Y3eHgwX1NJRCkgewogCWlmIChjYW0tPnNlbnNvcl90eXBlICE9IFY0TDJfSURFTlRfT1Y3NjcwKSB7Ci0JCWNhbV9lcnIoY2FtLCAiVW5zdXBwb3J0ZWQgc2Vuc29yIHR5cGUgJWQiLCBjYW0tPnNlbnNvci0+YWRkcik7CisJCWNhbV9lcnIoY2FtLCAiVW5zdXBwb3J0ZWQgc2Vuc29yIHR5cGUgMHgleCIsIGNhbS0+c2Vuc29yX3R5cGUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC05MDAsMjEgKzgwNSwyMSBAQAogCW1lbXNldCgmY3RybCwgMCwgc2l6ZW9mKGN0cmwpKTsKIAljdHJsLmlkID0gVjRMMl9DSURfVkZMSVA7CiAJY3RybC52YWx1ZSA9IGZsaXA7Ci0JcmV0dXJuIF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfQ1RSTCwgJmN0cmwpOworCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHNfY3RybCwgJmN0cmwpOwogfQogCiAKIHN0YXRpYyBpbnQgY2FmZV9jYW1fY29uZmlndXJlKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQogewogCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0JaW50IHJldCwgemVybyA9IDA7CisJaW50IHJldDsKIAogCWlmIChjYW0tPnN0YXRlICE9IFNfSURMRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZm10LmZtdC5waXggPSBjYW0tPnBpeF9mb3JtYXQ7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfSU5UX0lOSVQsICZ6ZXJvKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGluaXQsIDApOwogCWlmIChyZXQgPT0gMCkKLQkJcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19GTVQsICZmbXQpOworCQlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CiAJLyoKIAkgKiBPVjc2NzAgZG9lcyB3ZWlyZCB0aGluZ3MgaWYgZmxpcCBpcyBzZXQgKmJlZm9yZSogZm9ybWF0Li4uCiAJICovCkBAIC0xMjQ2LDggKzExNTEsNiBAQAogCSAqIE1ha2Ugc3VyZSBpdCdzIHNvbWV0aGluZyB3ZSBjYW4gZG8uICBVc2VyIHBvaW50ZXJzIGNvdWxkIGJlCiAJICogaW1wbGVtZW50ZWQgd2l0aG91dCBncmVhdCBwYWluLCBidXQgdGhhdCdzIG5vdCBiZWVuIGRvbmUgeWV0LgogCSAqLwotCWlmIChyZXEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyoKQEAgLTEzMTEsOSArMTIxNCw3IEBACiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlnb3RvIG91dDsKLQlpZiAoYnVmLT5pbmRleCA8IDAgfHwgYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCisJaWYgKGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQogCQlnb3RvIG91dDsKIAkqYnVmID0gY2FtLT5zYl9idWZzW2J1Zi0+aW5kZXhdLnY0bGJ1ZjsKIAlyZXQgPSAwOwpAQCAtMTMzMSw5ICsxMjMyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXQ7Ci0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQorCWlmIChidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKIAkJZ290byBvdXQ7CiAJc2J1ZiA9IGNhbS0+c2JfYnVmcyArIGJ1Zi0+aW5kZXg7CiAJaWYgKHNidWYtPnY0bGJ1Zi5mbGFncyAmIFY0TDJfQlVGX0ZMQUdfUVVFVUVEKSB7CkBAIC0xMzY0LDggKzEyNjMsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGNhbS0+c3RhdGUgIT0gU19TVFJFQU1JTkcpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpZiAobGlzdF9lbXB0eSgmY2FtLT5zYl9mdWxsKSAmJiBmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewpAQCAtMTQ3NCwxMSArMTM3MSw4IEBACiAKIHN0YXRpYyBpbnQgY2FmZV92NGxfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlscCk7CiAKLQljYW0gPSBjYWZlX2ZpbmRfZGV2KHZpZGVvX2RldmRhdGEoZmlscCktPm1pbm9yKTsKLQlpZiAoY2FtID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGNhbTsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CkBAIC0xNTMyLDExICsxNDI2LDExIEBACiBzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfUVVFUllDVFJMLCBxYyk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBxdWVyeWN0cmwsIHFjKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1NDUsMTEgKzE0MzksMTEgQEAKIHN0YXRpYyBpbnQgY2FmZV92aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19jdHJsLCBjdHJsKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE1NTgsMTEgKzE0NTIsMTEgQEAKIHN0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgc19jdHJsLCBjdHJsKTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2MDEsMTAgKzE0OTUsOCBAQAogCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKIAlpbnQgcmV0OwogCi0JaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfRU5VTV9GTVQsIGZtdCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgZW51bV9mbXQsIGZtdCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNjE3LDcgKzE1MDksNyBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1RSWV9GTVQsIGZtdCk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgdHJ5X2ZtdCwgZm10KTsKIAltdXRleF91bmxvY2soJmNhbS0+c19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3MjYsNyArMTYxOCw3IEBACiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfR19QQVJNLCBwYXJtcyk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgZ19wYXJtLCBwYXJtcyk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOwogCXJldHVybiByZXQ7CkBAIC0xNzM5LDIwICsxNjMxLDUyIEBACiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19QQVJNLCBwYXJtcyk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgc19wYXJtLCBwYXJtcyk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXBhcm1zLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBuX2RtYV9idWZzOwogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIHZvaWQgY2FmZV92NGxfZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmQpCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjb250YWluZXJfb2YodmQsIHN0cnVjdCBjYWZlX2NhbWVyYSwgdjRsZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAKLQlrZnJlZShjYW0pOworCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCWNoaXAtPnJldmlzaW9uID0gMDsKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJmNoaXAtPm1hdGNoKSkgeworCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfQ0FGRTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IGNhZmVfdmlkaW9jX2dfcmVnaXN0ZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gcHJpdjsKKworCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpIHsKKwkJcmVnLT52YWwgPSBjYWZlX3JlZ19yZWFkKGNhbSwgcmVnLT5yZWcpOworCQlyZWctPnNpemUgPSA0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKK30KKworc3RhdGljIGludCBjYWZlX3ZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKSB7CisJCWNhZmVfcmVnX3dyaXRlKGNhbSwgcmVnLT5yZWcsIHJlZy0+dmFsKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7Cit9CisjZW5kaWYKIAogLyoKICAqIFRoaXMgdGVtcGxhdGUgZGV2aWNlIGhvbGRzIGFsbCBvZiB0aG9zZSB2NGwyIG1ldGhvZHM7IHdlCkBAIC0xNzkwLDYgKzE3MTQsMTEgQEAKIAkudmlkaW9jX3NfY3RybAkJPSBjYWZlX3ZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19nX3Bhcm0JCT0gY2FmZV92aWRpb2NfZ19wYXJtLAogCS52aWRpb2Nfc19wYXJtCQk9IGNhZmVfdmlkaW9jX3NfcGFybSwKKwkudmlkaW9jX2dfY2hpcF9pZGVudCAgICA9IGNhZmVfdmlkaW9jX2dfY2hpcF9pZGVudCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyIAk9IGNhZmVfdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyIAk9IGNhZmVfdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGNhZmVfdjRsX3RlbXBsYXRlID0gewpAQCAtMTgwMCwxNSArMTcyOSwxMCBAQAogCiAJLmZvcHMgPSAmY2FmZV92NGxfZm9wcywKIAkuaW9jdGxfb3BzID0gJmNhZmVfdjRsX2lvY3RsX29wcywKLQkucmVsZWFzZSA9IGNhZmVfdjRsX2Rldl9yZWxlYXNlLAorCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCiB9OwogCiAKLQotCi0KLQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgc3R1ZmYKQEAgLTE5NjIsMTI3ICsxODg2LDYgQEAKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLS8qCi0gKiBEZWJ1Z2ZzIHN0dWZmLgotICovCi0KLXN0YXRpYyBjaGFyIGNhZmVfZGVidWdfYnVmWzEwMjRdOwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNhZmVfZGZzX3Jvb3Q7Ci0KLXN0YXRpYyB2b2lkIGNhZmVfZGZzX3NldHVwKHZvaWQpCi17Ci0JY2FmZV9kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2FmZV9jY2ljIiwgTlVMTCk7Ci0JaWYgKElTX0VSUihjYWZlX2Rmc19yb290KSkgewotCQljYWZlX2Rmc19yb290ID0gTlVMTDsgIC8qIE5ldmVyIG1pbmQgKi8KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjYWZlX2NjaWMgdW5hYmxlIHRvIHNldCB1cCBkZWJ1Z2ZzXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNhZmVfZGZzX3NodXRkb3duKHZvaWQpCi17Ci0JaWYgKGNhZmVfZGZzX3Jvb3QpCi0JCWRlYnVnZnNfcmVtb3ZlKGNhZmVfZGZzX3Jvb3QpOwotfQotCi1zdGF0aWMgaW50IGNhZmVfZGZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgY2FmZV9kZnNfcmVhZF9yZWdzKHN0cnVjdCBmaWxlICpmaWxlLAotCQljaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpzID0gY2FmZV9kZWJ1Z19idWY7Ci0JaW50IG9mZnNldDsKLQotCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgMHg0NDsgb2Zmc2V0ICs9IDQpCi0JCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTA4eFxuIiwgb2Zmc2V0LAotCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKLQlmb3IgKG9mZnNldCA9IDB4ODg7IG9mZnNldCA8PSAweDkwOyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCWZvciAob2Zmc2V0ID0gMHhiNDsgb2Zmc2V0IDw9IDB4YmM7IG9mZnNldCArPSA0KQotCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwOHhcbiIsIG9mZnNldCwKLQkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7Ci0JZm9yIChvZmZzZXQgPSAweDMwMDA7IG9mZnNldCA8PSAweDMwMGM7IG9mZnNldCArPSA0KQotCQlzICs9IHNwcmludGYocywgIiUwNHg6ICUwOHhcbiIsIG9mZnNldCwKLQkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgY291bnQsIHBwb3MsIGNhZmVfZGVidWdfYnVmLAotCQkJcyAtIGNhZmVfZGVidWdfYnVmKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FmZV9kZnNfcmVnX29wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucmVhZCA9IGNhZmVfZGZzX3JlYWRfcmVncywKLQkub3BlbiA9IGNhZmVfZGZzX29wZW4KLX07Ci0KLXN0YXRpYyBzc2l6ZV90IGNhZmVfZGZzX3JlYWRfY2FtKHN0cnVjdCBmaWxlICpmaWxlLAotCQljaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyICpzID0gY2FmZV9kZWJ1Z19idWY7Ci0JaW50IG9mZnNldDsKLQotCWlmICghIGNhbS0+c2Vuc29yKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmb3IgKG9mZnNldCA9IDB4MDsgb2Zmc2V0IDwgMHg4YTsgb2Zmc2V0KyspCi0JewotCQl1OCB2OwotCi0JCWNhZmVfc21idXNfcmVhZF9kYXRhKGNhbSwgY2FtLT5zZW5zb3ItPmFkZHIsIG9mZnNldCwgJnYpOwotCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwMnhcbiIsIG9mZnNldCwgdik7Ci0JfQotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBjYWZlX2RlYnVnX2J1ZiwKLQkJCXMgLSBjYWZlX2RlYnVnX2J1Zik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhZmVfZGZzX2NhbV9vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgPSBjYWZlX2Rmc19yZWFkX2NhbSwKLQkub3BlbiA9IGNhZmVfZGZzX29wZW4KLX07Ci0KLQotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19jYW1fc2V0dXAoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JY2hhciBmbmFtZVs0MF07Ci0KLQlpZiAoIWNhZmVfZGZzX3Jvb3QpCi0JCXJldHVybjsKLQlzcHJpbnRmKGZuYW1lLCAicmVncy0lZCIsIGNhbS0+djRsZGV2Lm51bSk7Ci0JY2FtLT5kZnNfcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIDA0NDQsIGNhZmVfZGZzX3Jvb3QsCi0JCQljYW0sICZjYWZlX2Rmc19yZWdfb3BzKTsKLQlzcHJpbnRmKGZuYW1lLCAiY2FtLSVkIiwgY2FtLT52NGxkZXYubnVtKTsKLQljYW0tPmRmc19jYW1fcmVncyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoZm5hbWUsIDA0NDQsIGNhZmVfZGZzX3Jvb3QsCi0JCQljYW0sICZjYWZlX2Rmc19jYW1fb3BzKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19jYW1fc2h1dGRvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCi17Ci0JaWYgKCEgSVNfRVJSKGNhbS0+ZGZzX3JlZ3MpKQotCQlkZWJ1Z2ZzX3JlbW92ZShjYW0tPmRmc19yZWdzKTsKLQlpZiAoISBJU19FUlIoY2FtLT5kZnNfY2FtX3JlZ3MpKQotCQlkZWJ1Z2ZzX3JlbW92ZShjYW0tPmRmc19jYW1fcmVncyk7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgY2FmZV9kZnNfc2V0dXAoKQotI2RlZmluZSBjYWZlX2Rmc19zaHV0ZG93bigpCi0jZGVmaW5lIGNhZmVfZGZzX2NhbV9zZXR1cChjYW0pCi0jZGVmaW5lIGNhZmVfZGZzX2NhbV9zaHV0ZG93bihjYW0pCi0jZW5kaWYgICAgLyogQ09ORklHX1ZJREVPX0FEVl9ERUJVRyAqLwotCi0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFBDSSBpbnRlcmZhY2Ugc3R1ZmYuCiAgKi8KQEAgLTIxMDAsNiArMTkwMywxMCBAQAogCWNhbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYWZlX2NhbWVyYSksIEdGUF9LRVJORUwpOwogCWlmIChjYW0gPT0gTlVMTCkKIAkJZ290byBvdXQ7CisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmNhbS0+djRsMl9kZXYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKIAltdXRleF9pbml0KCZjYW0tPnNfbXV0ZXgpOwogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhbS0+ZGV2X2xvY2spOwpAQCAtMjExOCwxNCArMTkyNSwxNCBAQAogCSAqLwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7CisJCWdvdG8gb3V0X3VucmVnOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJcmV0ID0gLUVJTzsKIAljYW0tPnJlZ3MgPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7CiAJaWYgKCEgY2FtLT5yZWdzKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGlvcmVtYXAgY2FmZS1jY2ljIHJlZ3NcbiIpOwotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF91bnJlZzsKIAl9CiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBjYWZlX2lycSwgSVJRRl9TSEFSRUQsICJjYWZlLWNjaWMiLCBjYW0pOwogCWlmIChyZXQpCkBAIC0yMTQ1LDE3ICsxOTUyLDMxIEBACiAJcmV0ID0gY2FmZV9zbWJ1c19zZXR1cChjYW0pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZyZWVpcnE7CisKKwljYW0tPnNlbnNvcl9hZGRyID0gMHg0MjsKKwljYW0tPnNlbnNvciA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmNhbS0+aTJjX2FkYXB0ZXIsCisJCQkib3Y3NjcwIiwgIm92NzY3MCIsIGNhbS0+c2Vuc29yX2FkZHIpOworCWlmIChjYW0tPnNlbnNvciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3NtYnVzOworCX0KKwlyZXQgPSBjYWZlX2NhbV9pbml0KGNhbSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc21idXM7CisKIAkvKgogCSAqIEdldCB0aGUgdjRsMiBzZXR1cCBkb25lLgogCSAqLwogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JY2FtLT52NGxkZXYgPSBjYWZlX3Y0bF90ZW1wbGF0ZTsKLQljYW0tPnY0bGRldi5kZWJ1ZyA9IDA7Ci0vLwljYW0tPnY0bGRldi5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVExfQVJHOwotCWNhbS0+djRsZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWNhbS0+dmRldiA9IGNhZmVfdjRsX3RlbXBsYXRlOworCWNhbS0+dmRldi5kZWJ1ZyA9IDA7CisvKgljYW0tPnZkZXYuZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsqLworCWNhbS0+dmRldi52NGwyX2RldiA9ICZjYW0tPnY0bDJfZGV2OworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfc21idXM7CisJdmlkZW9fc2V0X2RydmRhdGEoJmNhbS0+dmRldiwgY2FtKTsKKwogCS8qCiAJICogSWYgc28gcmVxdWVzdGVkLCB0cnkgdG8gZ2V0IG91ciBETUEgYnVmZmVycyBub3cuCiAJICovCkBAIC0yMTY1LDIxICsxOTg2LDIxIEBACiAJCQkJCSIgd2lsbCB0cnkgYWdhaW4gbGF0ZXIuIik7CiAJfQogCi0JY2FmZV9kZnNfY2FtX3NldHVwKGNhbSk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWNhZmVfYWRkX2RldihjYW0pOwogCXJldHVybiAwOwogCi0gIG91dF9zbWJ1czoKK291dF9zbWJ1czoKIAljYWZlX3NtYnVzX3NodXRkb3duKGNhbSk7Ci0gIG91dF9mcmVlaXJxOgorb3V0X2ZyZWVpcnE6CiAJY2FmZV9jdGxyX3Bvd2VyX2Rvd24oY2FtKTsKIAlmcmVlX2lycShwZGV2LT5pcnEsIGNhbSk7Ci0gIG91dF9pb3VubWFwOgorb3V0X2lvdW5tYXA6CiAJcGNpX2lvdW5tYXAocGRldiwgY2FtLT5yZWdzKTsKLSAgb3V0X2ZyZWU6CitvdXRfZnJlZToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKK291dF91bnJlZzoKIAlrZnJlZShjYW0pOwotICBvdXQ6CitvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjE5MCwyNSArMjAxMSwyMyBAQAogc3RhdGljIHZvaWQgY2FmZV9zaHV0ZG93bihzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKIC8qIEZJWE1FOiBNYWtlIHN1cmUgd2UgdGFrZSBjYXJlIG9mIGV2ZXJ5dGhpbmcgaGVyZSAqLwotCWNhZmVfZGZzX2NhbV9zaHV0ZG93bihjYW0pOwogCWlmIChjYW0tPm5fc2J1ZnMgPiAwKQogCQkvKiBXaGF0IGlmIHRoZXkgYXJlIHN0aWxsIG1hcHBlZD8gIFNob3VsZG4ndCBiZSwgYnV0Li4uICovCiAJCWNhZmVfZnJlZV9zaW9fYnVmZmVycyhjYW0pOwotCWNhZmVfcmVtb3ZlX2RldihjYW0pOwogCWNhZmVfY3Rscl9zdG9wX2RtYShjYW0pOwogCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOwogCWNhZmVfZnJlZV9kbWFfYnVmcyhjYW0pOwogCWZyZWVfaXJxKGNhbS0+cGRldi0+aXJxLCBjYW0pOwogCXBjaV9pb3VubWFwKGNhbS0+cGRldiwgY2FtLT5yZWdzKTsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FtLT52NGxkZXYpOwotCS8qIGtmcmVlKGNhbSk7IGRvbmUgaW4gdjRsX3JlbGVhc2UgKCkgKi8KKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2KTsKIH0KIAogCiBzdGF0aWMgdm9pZCBjYWZlX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjYWZlX2ZpbmRfYnlfcGRldihwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAogCWlmIChjYW0gPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwY2lfcmVtb3ZlIG9uIHVua25vd24gcGRldiAlcFxuIiwgcGRldik7CkBAIC0yMjE4LDYgKzIwMzcsOCBAQAogCWlmIChjYW0tPnVzZXJzID4gMCkKIAkJY2FtX3dhcm4oY2FtLCAiUmVtb3ZpbmcgYSBkZXZpY2Ugd2l0aCB1c2VycyFcbiIpOwogCWNhZmVfc2h1dGRvd24oY2FtKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKKwlrZnJlZShjYW0pOwogLyogTm8gdW5sb2NrIC0gaXQgbm8gbG9uZ2VyIGV4aXN0cyAqLwogfQogCkBAIC0yMjI4LDcgKzIwNDksOCBAQAogICovCiBzdGF0aWMgaW50IGNhZmVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGNhZmVfZmluZF9ieV9wZGV2KHBkZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB0b19jYW0odjRsMl9kZXYpOwogCWludCByZXQ7CiAJZW51bSBjYWZlX3N0YXRlIGNzdGF0ZTsKIApAQCAtMjI0Niw3ICsyMDY4LDggQEAKIAogc3RhdGljIGludCBjYWZlX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjYWZlX2ZpbmRfYnlfcGRldihwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCXJldCA9IHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwpAQCAtMjMwNywxMyArMjEzMCwxMSBAQAogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJNYXJ2ZWxsIE04OEFMUDAxICdDQUZFJyBDYW1lcmEgQ29udHJvbGxlciB2ZXJzaW9uICVkXG4iLAogCQkJQ0FGRV9WRVJTSU9OKTsKLQljYWZlX2Rmc19zZXR1cCgpOwogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBjYWZlX2NjaWMgZHJpdmVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJlcXVlc3RfbW9kdWxlKCJvdjc2NzAiKTsgIC8qIEZJWE1FIHdhbnQgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCAqLwogCXJldCA9IDA7CiAKICAgb3V0OgpAQCAtMjMyNCw3ICsyMTQ1LDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjYWZlX2V4aXQodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZmVfcGNpX2RyaXZlcik7Ci0JY2FmZV9kZnNfc2h1dGRvd24oKTsKIH0KIAogbW9kdWxlX2luaXQoY2FmZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggYzNiMGM4Yy4uNDNhYjBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTEzODEsOSArMTM4MSw3IEBACiB7CiAJY3BpYV9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJjcGlhIiwgTlVMTCk7CiAKLQlpZiAoY3BpYV9wcm9jX3Jvb3QpCi0JCWNwaWFfcHJvY19yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWVsc2UKKwlpZiAoIWNwaWFfcHJvY19yb290KQogCQlMT0coIlVuYWJsZSB0byBpbml0aWFsaXNlIC9wcm9jL2NwaWFcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYwppbmRleCA5YzI1ODk0Li5kNDA5OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlICJjcGlhMi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKaW5kZXggODdlOTEwNy4uOTcxNDA1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCkBAIC0xNDEsMTEgKzE0MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M1MzQ1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBjczUzNDVfY29yZV9vcHMgPSB7CkBAIC0yMTQsOCArMjA5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImNzNTM0NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NTNTM0NSwKLQkuY29tbWFuZCA9IGNzNTM0NV9jb21tYW5kLAogCS5wcm9iZSA9IGNzNTM0NV9wcm9iZSwKIAkucmVtb3ZlID0gY3M1MzQ1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBjczUzNDVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKaW5kZXggNzI5MmE2My4uNWFlYjA2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBkZXZpY2UgZHJpdmVyIGZvciBjczUzbDMyYSBBdWRpbyBBREMiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcnRpbiBWYXVnaGFuIik7CkBAIC00MSw5ICs0MSw2IEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbWVzc2FnZXMsIDA9T2ZmIChkZWZhdWx0KSwgMT1PbiIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMjIsMTEgKzExOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M1M2wzMmFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGNzNTNsMzJhX2NvcmVfb3BzID0gewpAQCAtMjE4LDggKzIxMCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJjczUzbDMyYSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NTNTNMMzJBLAotCS5jb21tYW5kID0gY3M1M2wzMmFfY29tbWFuZCwKIAkucmVtb3ZlID0gY3M1M2wzMmFfcmVtb3ZlLAogCS5wcm9iZSA9IGNzNTNsMzJhX3Byb2JlLAogCS5pZF90YWJsZSA9IGNzNTNsMzJhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwppbmRleCA4OTQwYjUzLi5lOGE1MGE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvS2NvbmZpZwpAQCAtOSw3ICs5LDcgQEAKIAlzZWxlY3QgVklERU9fQ1gyMzQxWAogCXNlbGVjdCBWSURFT19DUzUzNDUKIAlzZWxlY3QgRFZCX1M1SDE0MDkgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgQ29uZXhhbnQgY3gyMzQxOCBiYXNlZAogCSAgUENJIGNvbWJvIHZpZGVvIHJlY29yZGVyIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYwppbmRleCA1N2JlZGRmLi5iYjVjNTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAjaW5jbHVkZSAiY3gxOC1pby5oIgotI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtYXVkaW8uaCIKIApAQCAtMzMsNTUgKzMyLDMyIEBACiAgICBzZXR0aW5ncy4gKi8KIGludCBjeDE4X2F1ZGlvX3NldF9pbyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CisJY29uc3Qgc3RydWN0IGN4MThfY2FyZF9hdWRpb19pbnB1dCAqaW47CiAJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQl1MzIgYXVkaW9faW5wdXQ7CiAJdTMyIHZhbDsKLQlpbnQgbXV4X2lucHV0OwogCWludCBlcnI7CiAKIAkvKiBEZXRlcm1pbmUgd2hpY2ggaW5wdXQgdG8gdXNlICovCi0JaWYgKHRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykpIHsKLQkJYXVkaW9faW5wdXQgPSBjeC0+Y2FyZC0+cmFkaW9faW5wdXQuYXVkaW9faW5wdXQ7Ci0JCW11eF9pbnB1dCA9IGN4LT5jYXJkLT5yYWRpb19pbnB1dC5tdXhlcl9pbnB1dDsKLQl9IGVsc2UgewotCQlhdWRpb19pbnB1dCA9Ci0JCQljeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF0uYXVkaW9faW5wdXQ7Ci0JCW11eF9pbnB1dCA9Ci0JCQljeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF0ubXV4ZXJfaW5wdXQ7Ci0JfQorCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKQorCQlpbiA9ICZjeC0+Y2FyZC0+cmFkaW9faW5wdXQ7CisJZWxzZQorCQlpbiA9ICZjeC0+Y2FyZC0+YXVkaW9faW5wdXRzW2N4LT5hdWRpb19pbnB1dF07CiAKIAkvKiBoYW5kbGUgbXV4ZXIgY2hpcHMgKi8KLQlyb3V0ZS5pbnB1dCA9IG11eF9pbnB1dDsKKwlyb3V0ZS5pbnB1dCA9IGluLT5tdXhlcl9pbnB1dDsKIAlyb3V0ZS5vdXRwdXQgPSAwOwotCWN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfbXV4ZXIsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2V4dG11eCwgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCXJvdXRlLmlucHV0ID0gYXVkaW9faW5wdXQ7Ci0JZXJyID0gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAotCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJcm91dGUuaW5wdXQgPSBpbi0+YXVkaW9faW5wdXQ7CisJZXJyID0gY3gxOF9jYWxsX2h3X2VycihjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsCisJCQkgICAgICAgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJLyogRklYTUUgLSB0aGlzIGludGVybmFsIG11eCBzaG91bGQgYmUgYWJzdHJhY3RlZCB0byBhIHN1YmRldiAqLwogCXZhbCA9IGN4MThfcmVhZF9yZWcoY3gsIENYMThfQVVESU9fRU5BQkxFKSAmIH4weDMwOwotCXZhbCB8PSAoYXVkaW9faW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpID8gMHgyMCA6Ci0JCQkJCShhdWRpb19pbnB1dCA8PCA0KTsKLQljeDE4X3dyaXRlX3JlZyhjeCwgdmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFKTsKLQljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDEsIDApOworCXZhbCB8PSAoaW4tPmF1ZGlvX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSA/IDB4MjAgOgorCQkJCQkoaW4tPmF1ZGlvX2lucHV0IDw8IDQpOworCWN4MThfd3JpdGVfcmVnX2V4cGVjdChjeCwgdmFsIHwgMHhiMDAsIENYMThfQVVESU9fRU5BQkxFLCB2YWwsIDB4MzApOwogCXJldHVybiAwOwogfQotCi12b2lkIGN4MThfYXVkaW9fc2V0X3JvdXRlKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCi17Ci0JY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAotCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsIHJvdXRlKTsKLX0KLQotdm9pZCBjeDE4X2F1ZGlvX3NldF9hdWRpb19jbG9ja19mcmVxKHN0cnVjdCBjeDE4ICpjeCwgdTggZnJlcSkKLXsKLQlzdGF0aWMgdTMyIGZyZXFzWzNdID0geyA0NDEwMCwgNDgwMDAsIDMyMDAwIH07Ci0KLQkvKiBUaGUgYXVkaW8gY2xvY2sgb2YgdGhlIGRpZ2l0aXplciBtdXN0IG1hdGNoIHRoZSBjb2RlYyBzYW1wbGUKLQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCi0JaWYgKGZyZXEgPiAyKQotCQlyZXR1cm47Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsICZmcmVxc1tmcmVxXSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uaAppbmRleCBjYjU2OWE2Li4yNzMxZDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmgKQEAgLTIyLDUgKzIyLDMgQEAKICAqLwogCiBpbnQgY3gxOF9hdWRpb19zZXRfaW8oc3RydWN0IGN4MTggKmN4KTsKLXZvaWQgY3gxOF9hdWRpb19zZXRfcm91dGUoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSk7Ci12b2lkIGN4MThfYXVkaW9fc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGN4MTggKmN4LCB1OCBmcmVxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCmluZGV4IGEyZjBhZDUuLjllMzA5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYwpAQCAtNDY0LDgyICs0NjQsNzYgQEAKIAl9CiB9CiAKLWludCBjeDE4X2F2X2F1ZGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MThfYXZfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQogeworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKIAlpbnQgcmV0dmFsOworCXU4IHY7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCXsKLQkJdTggdjsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKLQkJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSAmIH4weDEwOwotCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKLQkJfQotCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgxMCkgfCAweDE7Ci0JCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7Ci0KLQkJcmV0dmFsID0gc2V0X2F1ZGNsa19mcmVxKGN4LCAqKHUzMiAqKWFyZyk7Ci0KLQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApICYgfjB4MTsKLQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKLQkJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSB8IDB4MTA7Ci0JCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOwotCQl9Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgPiBDWDE4X0FWX0FVRElPX1NFUklBTDIpIHsKKwkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDMpICYgfjB4MTA7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4OGQzLCAweDFmKTsKIAl9CisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApIHwgMHgxOworCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7CiAKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY3gpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9tdXRlKGN4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY3gsIGZyZXEpOworCisJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApICYgfjB4MTsKKwljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOworCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CisJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSB8IDB4MTA7CisJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBjeDE4X2F2X2F1ZGlvX2dfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY3gpOwogCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCXNldF92b2x1bWUoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQlzZXRfYmFzcyhjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJc2V0X3RyZWJsZShjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJCXNldF9iYWxhbmNlKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJc2V0X211dGUoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY3gpOwogCQlicmVhazsKLQorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY3gpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2JhbGFuY2UoY3gpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY3gpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJcmV0dXJuIDA7Cit9CiAKK2ludCBjeDE4X2F2X2F1ZGlvX3NfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlzZXRfdm9sdW1lKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJc2V0X2Jhc3MoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCXNldF90cmVibGUoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQlzZXRfYmFsYW5jZShjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXNldF9tdXRlKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYwppbmRleCAwYjFjODRiLi5mNGRkOWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCkBAIC0yMiw4ICsyMiwxMCBAQAogICogIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LWlvLmgiCisjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogCiBpbnQgY3gxOF9hdl93cml0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1OCB2YWx1ZSkKIHsKQEAgLTk3LDE1ICs5OSw2IEBACiAJCQkgICAgIG9yX3ZhbHVlKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBzZXRfaW5wdXQoc3RydWN0IGN4MTggKmN4LCBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgdmlkX2lucHV0LAotCQkJCQllbnVtIGN4MThfYXZfYXVkaW9faW5wdXQgYXVkX2lucHV0KTsKLXN0YXRpYyB2b2lkIGxvZ19hdWRpb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KTsKLXN0YXRpYyB2b2lkIGxvZ192aWRlb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgY3gxOF9hdl9pbml0aWFsaXplKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwpAQCAtMTY5LDkgKzE2MiwxNCBAQAogCS8qIFNldCBWR0FfVFJBQ0tfUkFOR0UgdG8gMHgyMCAqLwogCWN4MThfYXZfYW5kX29yNChjeCwgQ1hBREVDX0RGRV9DVFJMMiwgMHhGRkZGMDBGRiwgMHgwMDAwMjAwMCk7CiAKLQkvKiBFbmFibGUgVkJJIGNhcHR1cmUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX09VVF9DVFJMMSwgMHg0MDEwMjUzRik7Ci0JLyogY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19PVVRfQ1RSTDEsIDB4NDAxMDI1M0UpOyAqLworCS8qCisJICogSW5pdGlhbCBWQkkgc2V0dXAKKwkgKiBWSVAtMS4xLCAxMCBiaXQgbW9kZSwgZW5hYmxlIFJhdywgZGlzYWJsZSBzbGljZWQsCisJICogZG9uJ3QgY2xhbXAgcmF3IHNhbXBsZXMgd2hlbiBjb2RlcyBhcmUgaW4gdXNlLCAxIGJ5dGUgdXNlciBELXdvcmRzLAorCSAqIElESUQwIGhhcyBsaW5lICMsIFJQIGNvZGUgViBiaXQgdHJhbnNpdGlvbiBvbiBWQkxBTkssIGRhdGEgZHVyaW5nCisJICogYmxhbmtpbmcgaW50ZXJ2YWxzCisJICovCisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19PVVRfQ1RSTDEsIDB4NDAxMzI1MmUpOwogCiAJLyogU2V0IHRoZSB2aWRlbyBpbnB1dC4KIAkgICBUaGUgc2V0dGluZyBpbiBNT0RFX0NUUkwgZ2V0cyBsb3N0IHdoZW4gd2UgZG8gdGhlIGFib3ZlIHNldHVwICovCkBAIC0xOTUsMTEgKzE5Myw2MSBAQAogCXN0YXRlLT5kZWZhdWx0X3ZvbHVtZSA9ICgoc3RhdGUtPmRlZmF1bHRfdm9sdW1lIC8gMikgKyAyMykgPDwgOTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgY3gxOF9hdl9yZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBDWDE4X0FWX0lOSVRfUExMUzoKKwkJLyoKKwkJICogVGhlIGNyeXN0YWwgZnJlcSB1c2VkIGluIGNhbGN1bGF0aW9ucyBpbiB0aGlzIGRyaXZlciB3aWxsIGJlCisJCSAqIDI4LjYzNjM2MCBNSHouCisJCSAqIEFpbSB0byBydW4gdGhlIFBMTHMnIFZDT3MgbmVhciA0MDAgTUh6IHRvIG1pbmltemUgZXJyb3JzLgorCQkgKi8KKworCQkvKgorCQkgKiBWRENMSyAgSW50ZWdlciA9IDB4MGYsIFBvc3QgRGl2aWRlciA9IDB4MDQKKwkJICogQUlNQ0xLIEludGVnZXIgPSAweDBlLCBQb3N0IERpdmlkZXIgPSAweDE2CisJCSAqLworCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1BMTF9DVFJMMSwgMHgxNjBlMDQwZik7CisKKwkJLyogVkRDTEsgRnJhY3Rpb24gPSAweDJiZTJmZSAqLworCQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogYmVmb3JlIHBvc3QgZGl2aWRlICovCisJCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfVklEX1BMTF9GUkFDLCAweDAwMmJlMmZlKTsKKworCQkvKiBBSU1DTEsgRnJhY3Rpb24gPSAweDA1MjI3YWQgKi8KKwkJLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBwcmUgcG9zdC1kaXYqLworCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0FVWF9QTExfRlJBQywgMHgwMDUyMjdhZCk7CisKKwkJLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxNiAqLworCQljeDE4X2F2X3dyaXRlKGN4LCBDWEFERUNfSTJTX01DTEssIDB4NTYpOworCQlicmVhazsKKworCWNhc2UgQ1gxOF9BVl9JTklUX05PUk1BTDoKKwlkZWZhdWx0OgorCQlpZiAoIXN0YXRlLT5pc19pbml0aWFsaXplZCkgeworCQkJLyogaW5pdGlhbGl6ZSBvbiBmaXJzdCB1c2UgKi8KKwkJCXN0YXRlLT5pc19pbml0aWFsaXplZCA9IDE7CisJCQljeDE4X2F2X2luaXRpYWxpemUoY3gpOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KIAogdm9pZCBjeDE4X2F2X3N0ZF9zZXR1cChzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl2NGwyX3N0ZF9pZCBzdGQgPSBzdGF0ZS0+c3RkOwogCWludCBoYmxhbmssIGhhY3RpdmUsIGJ1cnN0LCB2YmxhbmssIHZhY3RpdmUsIHNjOwogCWludCB2Ymxhbms2NTYsIHNyY19kZWNpbWF0aW9uOwpAQCAtMjEzLDYgKzI2MSw3IEBACiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDlmLCAweDE0KTsKIAogCWlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKKwkJLyogRklYTUUgLSByZXZpc2l0IHRoZXNlIGZvciBTbGljZWQgVkJJICovCiAJCWhibGFuayA9IDEzMjsKIAkJaGFjdGl2ZSA9IDcyMDsKIAkJYnVyc3QgPSA5MzsKQEAgLTIzNiwxMyArMjg1LDQwIEBACiAJCQlzYyA9IDY3MjM1MTsKIAkJfQogCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBmb2xsb3dpbmcgcmVsYXRpb25zaGlwcyBvZiBoYWxmIGxpbmUgY291bnRzIHNob3VsZCBob2xkOgorCQkgKiA1MjUgPSB2c3luYyArIHZhY3RpdmUgKyB2Ymxhbms2NTYKKwkJICogMTIgPSB2Ymxhbms2NTYgLSB2YmxhbmsKKwkJICoKKwkJICogdnN5bmM6ICAgICBhbHdheXMgNiBoYWxmLWxpbmVzIG9mIHZzeW5jIHB1bHNlcworCQkgKiB2YWN0aXZlOiAgIGhhbGYgbGluZXMgb2YgYWN0aXZlIHZpZGVvCisJCSAqIHZibGFuazY1NjogaGFsZiBsaW5lcywgYWZ0ZXIgbGluZSAzL21pZC0yNjYsIG9mIGJsYW5rZWQgdmlkZW8KKwkJICogdmJsYW5rOiAgICBoYWxmIGxpbmVzLCBhZnRlciBsaW5lIDkvMjcyLCBvZiBibGFua2VkIHZpZGVvCisJCSAqCisJCSAqIEFzIGZhciBhcyBJIGNhbiB0ZWxsOgorCQkgKiB2Ymxhbms2NTYgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhlIGZhbGxpbmcgZWRnZSBvZiB0aGUgZmlyc3QKKwkJICogCXZzeW5jIHB1bHNlIChzdGFydCBvZiBsaW5lIDQgb3IgbWlkLTI2NikKKwkJICogdmJsYW5rIHN0YXJ0cyBjb3VudGluZyBmcm9tIHRoZSBhZnRlciB0aGUgNiB2c3luYyBwdWxzZXMgYW5kCisJCSAqIAk2IG9yIDUgZXF1YWxpemF0aW9uIHB1bHNlcyAoc3RhcnQgb2YgbGluZSAxMCBvciAyNzIpCisJCSAqCisJCSAqIEZvciA1MjUgbGluZSBzeXN0ZW1zIHRoZSBkcml2ZXIgd2lsbCBleHRyYWN0IFZCSSBpbmZvcm1hdGlvbgorCQkgKiBmcm9tIGxpbmVzIDEwLTIxIGFuZCBsaW5lcyAyNzMtMjg0LgorCQkgKi8KKwkJdmJsYW5rNjU2ID0gMzg7IC8qIGxpbmVzICA0IC0gIDIyICAmICAyNjYgLSAyODQgKi8KKwkJdmJsYW5rID0gMjY7CS8qIGxpbmVzIDEwIC0gIDIyICAmICAyNzIgLSAyODQgKi8KKwkJdmFjdGl2ZSA9IDQ4MTsgIC8qIGxpbmVzIDIzIC0gMjYzICAmICAyODUgLSA1MjUgKi8KKworCQkvKgorCQkgKiBGb3IgYSAxMy41IE1wcHMgY2xvY2sgYW5kIDE1LDczNC4yNiBIeiBsaW5lIHJhdGUsIGEgbGluZSBpcworCQkgKiBpcyA4NTggcGl4ZWxzID0gNzIwIGFjdGl2ZSArIDEzOCBibGFua2luZy4gIFRoZSBIc3luYyBsZWFkaW5nCisJCSAqIGVkZ2Ugc2hvdWxkIGhhcHBlbiAxLjIgdXMgKiAxMy41IE1wcHMgfj0gMTYgcGl4ZWxzIGFmdGVyIHRoZQorCQkgKiBlbmQgb2YgYWN0aXZlIHZpZGVvLCBsZWF2aW5nIDEyMiBwaXhlbHMgb2YgaGJsYW5rIHRvIGlnbm9yZQorCQkgKiBiZWZvcmUgYWN0aXZlIHZpZGVvIHN0YXJ0cy4KKwkJICovCiAJCWhhY3RpdmUgPSA3MjA7CiAJCWhibGFuayA9IDEyMjsKLQkJdmFjdGl2ZSA9IDQ4NzsKIAkJbHVtYV9scGYgPSAxOwogCQl1dl9scGYgPSAxOwotCQl2YmxhbmsgPSAyNjsKLQkJdmJsYW5rNjU2ID0gMjY7CiAKIAkJc3JjX2RlY2ltYXRpb24gPSAweDIxZjsKIAkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfNjApIHsKQEAgLTI2NSwzMyArMzQxLDM1IEBACiAJcGxsX2ludCA9IGN4MThfYXZfcmVhZChjeCwgMHgxMDgpOwogCXBsbF9mcmFjID0gY3gxOF9hdl9yZWFkNChjeCwgMHgxMGMpICYgMHgxZmZmZmZmOwogCXBsbF9wb3N0ID0gY3gxOF9hdl9yZWFkKGN4LCAweDEwOSk7Ci0JQ1gxOF9ERUJVR19JTkZPKCJQTEwgcmVncyA9IGludDogJXUsIGZyYWM6ICV1LCBwb3N0OiAldVxuIiwKLQkJCXBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdCk7CisJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTCByZWdzID0gaW50OiAldSwgZnJhYzogJXUsIHBvc3Q6ICV1XG4iLAorCQkJICAgIHBsbF9pbnQsIHBsbF9mcmFjLCBwbGxfcG9zdCk7CiAKIAlpZiAocGxsX3Bvc3QpIHsKIAkJaW50IGZpbiwgZnNjLCBwbGw7CiAKIAkJcGxsID0gKDI4NjM2MzYwTCAqICgoKCh1NjQpcGxsX2ludCkgPDwgMjUpICsgcGxsX2ZyYWMpKSA+PiAyNTsKIAkJcGxsIC89IHBsbF9wb3N0OwotCQlDWDE4X0RFQlVHX0lORk8oIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKLQkJQ1gxOF9ERUJVR19JTkZPKCJQTEwvOCA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlwbGwgLyA4MDAwMDAwLCAocGxsIC8gOCkgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCSAgICBwbGwgLyAxMDAwMDAwLCBwbGwgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIlBMTC84ID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIHBsbCAvIDgwMDAwMDAsIChwbGwgLyA4KSAlIDEwMDAwMDApOwogCiAJCWZpbiA9ICgodTY0KXNyY19kZWNpbWF0aW9uICogcGxsKSA+PiAxMjsKLQkJQ1gxOF9ERUJVR19JTkZPKCJBREMgU2FtcGxpbmcgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlmaW4gLyAxMDAwMDAwLCBmaW4gJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIkFEQyBTYW1wbGluZyBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIGZpbiAvIDEwMDAwMDAsIGZpbiAlIDEwMDAwMDApOwogCiAJCWZzYyA9ICgoKHU2NClzYykgKiBwbGwpID4+IDI0TDsKLQkJQ1gxOF9ERUJVR19JTkZPKCJDaHJvbWEgc3ViLWNhcnJpZXIgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAotCQkJCQlmc2MgLyAxMDAwMDAwLCBmc2MgJSAxMDAwMDAwKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwKKwkJCQkgICAgIkNocm9tYSBzdWItY2FycmllciBmcmVxID0gJWQuJTA2ZCBNSHpcbiIsCisJCQkJICAgIGZzYyAvIDEwMDAwMDAsIGZzYyAlIDEwMDAwMDApOwogCi0JCUNYMThfREVCVUdfSU5GTygiaGJsYW5rICVpLCBoYWN0aXZlICVpLCAiCi0JCQkidmJsYW5rICVpICwgdmFjdGl2ZSAlaSwgdmJsYW5rNjU2ICVpLCBzcmNfZGVjICVpLCIKLQkJCSJidXJzdCAweCUwMngsIGx1bWFfbHBmICVpLCB1dl9scGYgJWksIGNvbWIgMHglMDJ4LCIKLQkJCSIgc2MgMHglMDZ4XG4iLAotCQkJaGJsYW5rLCBoYWN0aXZlLCB2YmxhbmssIHZhY3RpdmUsIHZibGFuazY1NiwKLQkJCXNyY19kZWNpbWF0aW9uLCBidXJzdCwgbHVtYV9scGYsIHV2X2xwZiwgY29tYiwgc2MpOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiaGJsYW5rICVpLCBoYWN0aXZlICVpLCB2YmxhbmsgJWksICIKKwkJCQkgICAgInZhY3RpdmUgJWksIHZibGFuazY1NiAlaSwgc3JjX2RlYyAlaSwgIgorCQkJCSAgICAiYnVyc3QgMHglMDJ4LCBsdW1hX2xwZiAlaSwgdXZfbHBmICVpLCAiCisJCQkJICAgICJjb21iIDB4JTAyeCwgc2MgMHglMDZ4XG4iLAorCQkJCSAgICBoYmxhbmssIGhhY3RpdmUsIHZibGFuaywgdmFjdGl2ZSwgdmJsYW5rNjU2LAorCQkJCSAgICBzcmNfZGVjaW1hdGlvbiwgYnVyc3QsIGx1bWFfbHBmLCB1dl9scGYsCisJCQkJICAgIGNvbWIsIHNjKTsKIAl9CiAKIAkvKiBTZXRzIGhvcml6b250YWwgYmxhbmtpbmcgZGVsYXkgYW5kIGFjdGl2ZSBsaW5lcyAqLwpAQCAtMzI1LDE4ICs0MDMsMTYgQEAKIAljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZCwgMHhmZiAmIHNjID4+IDgpOwogCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdlLCAweGZmICYgc2MgPj4gMTYpOwogCi0JLyogU2V0cyBWQkkgcGFyYW1ldGVycyAqLwogCWlmIChzdGQgJiBWNEwyX1NURF82MjVfNTApIHsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDEpOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gNTsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5ID0gMTsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldCA9ICg2ICsgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5IC0gMik7CiAJfSBlbHNlIHsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIDB4MDApOwotCQlzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0ID0gODsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5ID0gMDsKKwkJc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldCA9ICgxMCArIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSAtIDIpOwogCX0KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3Ziwgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5KTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgaW5wdXRfY2hhbmdlKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwpAQCAtMzgyLDE3ICs0NTgsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2ZyZXF1ZW5jeShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnB1dF9jaGFuZ2UoY3gpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gY3gxOF9hdl92aWRlb19pbnB1dCB2aWRfaW5wdXQsCiAJCQkJCWVudW0gY3gxOF9hdl9hdWRpb19pbnB1dCBhdWRfaW5wdXQpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl1OCBpc19jb21wb3NpdGUgPSAodmlkX2lucHV0ID49IENYMThfQVZfQ09NUE9TSVRFMSAmJgogCQkJICAgdmlkX2lucHV0IDw9IENYMThfQVZfQ09NUE9TSVRFOCk7CiAJdTggcmVnOwogCXU4IHY7CiAKLQlDWDE4X0RFQlVHX0lORk8oImRlY29kZXIgc2V0IHZpZGVvIGlucHV0ICVkLCBhdWRpbyBpbnB1dCAlZFxuIiwKLQkJCXZpZF9pbnB1dCwgYXVkX2lucHV0KTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiZGVjb2RlciBzZXQgdmlkZW8gaW5wdXQgJWQsIGF1ZGlvIGlucHV0ICVkXG4iLAorCQkJICAgIHZpZF9pbnB1dCwgYXVkX2lucHV0KTsKIAogCWlmIChpc19jb21wb3NpdGUpIHsKIAkJcmVnID0gMHhmMCArICh2aWRfaW5wdXQgLSBDWDE4X0FWX0NPTVBPU0lURTEpOwpAQCAtNDA1LDggKzQ5MCw4IEBACiAJCSAgICBsdW1hID4gQ1gxOF9BVl9TVklERU9fTFVNQTggfHwKIAkJICAgIGNocm9tYSA8IENYMThfQVZfU1ZJREVPX0NIUk9NQTQgfHwKIAkJICAgIGNocm9tYSA+IENYMThfQVZfU1ZJREVPX0NIUk9NQTgpIHsKLQkJCUNYMThfRVJSKCIweCUwNHggaXMgbm90IGEgdmFsaWQgdmlkZW8gaW5wdXQhXG4iLAotCQkJCQl2aWRfaW5wdXQpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiMHglMDR4IGlzIG5vdCBhIHZhbGlkIHZpZGVvIGlucHV0IVxuIiwKKwkJCQkgICAgIHZpZF9pbnB1dCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyZWcgPSAweGYwICsgKChsdW1hIC0gQ1gxOF9BVl9TVklERU9fTFVNQTEpID4+IDQpOwpAQCAtNDMxLDcgKzUxNiw4IEBACiAJY2FzZSBDWDE4X0FWX0FVRElPODogcmVnICY9IH4weGMwOyByZWcgfD0gMHg0MDsgYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlDWDE4X0VSUigiMHglMDR4IGlzIG5vdCBhIHZhbGlkIGF1ZGlvIGlucHV0IVxuIiwgYXVkX2lucHV0KTsKKwkJQ1gxOF9FUlJfREVWKHNkLCAiMHglMDR4IGlzIG5vdCBhIHZhbGlkIGF1ZGlvIGlucHV0IVxuIiwKKwkJCSAgICAgYXVkX2lucHV0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjEsMTQgKzU0NywxMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBzZXRfdjRsc3RkKHN0cnVjdCBjeDE4ICpjeCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3ZpZGVvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKLQlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXJldHVybiBzZXRfaW5wdXQoY3gsIHJvdXRlLT5pbnB1dCwgc3RhdGUtPmF1ZF9pbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2F1ZGlvX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlyZXR1cm4gc2V0X2lucHV0KGN4LCBzdGF0ZS0+dmlkX2lucHV0LCByb3V0ZS0+aW5wdXQpOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfZ190dW5lcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl90dW5lciAqdnQpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTggdnByZXM7CisJdTggbW9kZTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChzdGF0ZS0+cmFkaW8pCisJCXJldHVybiAwOworCisJdnByZXMgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBlKSAmIDB4MjA7CisJdnQtPnNpZ25hbCA9IHZwcmVzID8gMHhmZmZmIDogMHgwOworCisJdnQtPmNhcGFiaWxpdHkgfD0KKwkJICAgIFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKKwkJICAgIFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCisJbW9kZSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDQpOworCisJLyogZ2V0IHJ4c3ViY2hhbnMgYW5kIGF1ZG1vZGUgKi8KKwlpZiAoKG1vZGUgJiAweGYpID09IDEpCisJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJZWxzZQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKworCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQorCQl2YWwgPSBWNEwyX1RVTkVSX1NVQl9MQU5HMSB8IFY0TDJfVFVORVJfU1VCX0xBTkcyOworCisJaWYgKG1vZGUgJiAweDEwKQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOworCisJdnQtPnJ4c3ViY2hhbnMgPSB2YWw7CisJdnQtPmF1ZG1vZGUgPSBzdGF0ZS0+YXVkbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHY7CisKKwlpZiAoc3RhdGUtPnJhZGlvKQorCQlyZXR1cm4gMDsKKworCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA5KTsKKwl2ICY9IH4weGY7CisKKwlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IG1vbm8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzoKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbworCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KKwkJdiB8PSAweDQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgorCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCisJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMS9sYW5nMiAqLworCQl2IHw9IDB4NzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6CisJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcyICovCisJCXYgfD0gMHgxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODA5LCB2LCB2LCAweGZmKTsKKwlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXU4IGZtdCA9IDA7IAkvKiB6ZXJvIGlzIGF1dG9kZXRlY3QgKi8KIAl1OCBwYWxfbSA9IDA7CiAKKwlpZiAoc3RhdGUtPnJhZGlvID09IDAgJiYgc3RhdGUtPnN0ZCA9PSBub3JtKQorCQlyZXR1cm4gMDsKKworCXN0YXRlLT5yYWRpbyA9IDA7CisJc3RhdGUtPnN0ZCA9IG5vcm07CisKIAkvKiBGaXJzdCB0ZXN0cyBzaG91bGQgYmUgYWdhaW5zdCBzcGVjaWZpYyBzdGQgKi8KIAlpZiAoc3RhdGUtPnN0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKIAkJZm10ID0gMHgyOwpAQCAtNDkzLDcgKzY4Myw3IEBACiAJCQlmbXQgPSAweGM7CiAJfQogCi0JQ1gxOF9ERUJVR19JTkZPKCJjaGFuZ2luZyB2aWRlbyBzdGQgdG8gZm10ICVpXG4iLCBmbXQpOworCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJjaGFuZ2luZyB2aWRlbyBzdGQgdG8gZm10ICVpXG4iLCBmbXQpOwogCiAJLyogRm9sbG93IHN0ZXAgOSBvZiBzZWN0aW9uIDMuMTYgaW4gdGhlIGN4MThfYXYgZGF0YXNoZWV0LgogCSAgIFdpdGhvdXQgdGhpcyBQQUwgbWF5IGRpc3BsYXkgYSB2ZXJ0aWNhbCBnaG9zdGluZyBlZmZlY3QuCkBAIC01MTEsMTUgKzcwMSwyMiBAQAogCXJldHVybiAwOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW50IHNldF92NGxjdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RhdGUtPnJhZGlvID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewotCQkJQ1gxOF9FUlIoImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLAotCQkJCSAgICBjdHJsLT52YWx1ZSk7CisJCQlDWDE4X0VSUl9ERVYoc2QsICJpbnZhbGlkIGJyaWdodG5lc3Mgc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTUyOCw4ICs3MjUsOCBAQAogCiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJQ1gxOF9FUlIoImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBjb250cmFzdCBzZXR0aW5nICVkXG4iLAorCQkJCSAgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNTM4LDggKzczNSw4IEBACiAKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCUNYMThfRVJSKCJpbnZhbGlkIHNhdHVyYXRpb24gc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsCisJCQkJICAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC01NDgsOCArNzQ1LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewotCQkJQ1gxOF9FUlIoImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTU2MSwxNyArNzU5LDE4IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJcmV0dXJuIGN4MThfYXZfYXVkaW8oY3gsIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gxOF9hdl9hdWRpb19zX2N0cmwoY3gsIGN0cmwpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3Y0bGN0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBjeDE4X2F2X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKIAkJY3RybC0+dmFsdWUgPSAoczgpY3gxOF9hdl9yZWFkKGN4LCAweDQxNCkgKyAxMjg7CkBAIC01OTAsMzEgKzc4OSw1NyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCXJldHVybiBjeDE4X2F2X2F1ZGlvKGN4LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwkJcmV0dXJuIGN4MThfYXZfYXVkaW9fZ19jdHJsKGN4LCBjdHJsKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBnZXRfdjRsZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IGN4MThfYXZfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3dpdGNoIChmbXQtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gxOF9hdl92YmkoY3gsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCisJCQk2NTUzNSAvIDEwMCwgc3RhdGUtPmRlZmF1bHRfdm9sdW1lKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzZXRfdjRsZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IGN4MThfYXZfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0Jc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiBjeDE4X2F2X3ZiaV9nX2ZtdChjeCwgZm10KTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwogCWludCBIU0MsIFZTQywgVnNyYywgSHNyYywgZmlsdGVyLCBWbGluZXM7CiAJaW50IGlzXzUwSHogPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwpAQCAtNjI5LDEyICs4NTQsMjYgQEAKIAkJSHNyYyA9IChjeDE4X2F2X3JlYWQoY3gsIDB4NDcyKSAmIDB4M2YpIDw8IDQ7CiAJCUhzcmMgfD0gKGN4MThfYXZfcmVhZChjeCwgMHg0NzEpICYgMHhmMCkgPj4gNDsKIAotCQlWbGluZXMgPSBwaXgtPmhlaWdodCArIChpc181MEh6ID8gNCA6IDcpOworCQkvKgorCQkgKiBUaGlzIGFkanVzdG1lbnQgcmVmbGVjdHMgdGhlIGV4Y2VzcyBvZiB2YWN0aXZlLCBzZXQgaW4KKwkJICogY3gxOF9hdl9zdGRfc2V0dXAoKSwgYWJvdmUgc3RhbmRhcmQgdmFsdWVzOgorCQkgKgorCQkgKiA0ODAgKyAxIGZvciA2MCBIeiBzeXN0ZW1zCisJCSAqIDU3NiArIDQgZm9yIDUwIEh6IHN5c3RlbXMKKwkJICovCisJCVZsaW5lcyA9IHBpeC0+aGVpZ2h0ICsgKGlzXzUwSHogPyA0IDogMSk7CiAKKwkJLyoKKwkJICogSW52YWxpZCBoZWlnaHQgYW5kIHdpZHRoIHNjYWxpbmcgcmVxdWVzdHMgYXJlOgorCQkgKiAxLiB3aWR0aCBsZXNzIHRoYW4gMS8xNiBvZiB0aGUgc291cmNlIHdpZHRoCisJCSAqIDIuIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgc291cmNlIHdpZHRoCisJCSAqIDMuIGhlaWdodCBsZXNzIHRoYW4gMS84IG9mIHRoZSBzb3VyY2UgaGVpZ2h0CisJCSAqIDQuIGhlaWdodCBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSBoZWlnaHQKKwkJICovCiAJCWlmICgocGl4LT53aWR0aCAqIDE2IDwgSHNyYykgfHwgKEhzcmMgPCBwaXgtPndpZHRoKSB8fAogCQkgICAgKFZsaW5lcyAqIDggPCBWc3JjKSB8fCAoVnNyYyA8IFZsaW5lcykpIHsKLQkJCUNYMThfRVJSKCIlZHglZCBpcyBub3QgYSB2YWxpZCBzaXplIVxuIiwKLQkJCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiJWR4JWQgaXMgbm90IGEgdmFsaWQgc2l6ZSFcbiIsCisJCQkJICAgICBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC02NTEsOCArODkwLDkgQEAKIAkJZWxzZQogCQkJZmlsdGVyID0gMzsKIAotCQlDWDE4X0RFQlVHX0lORk8oImRlY29kZXIgc2V0IHNpemUgJWR4JWQgLT4gc2NhbGUgICV1eCV1XG4iLAotCQkJICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0LCBIU0MsIFZTQyk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsCisJCQkJICAgICJkZWNvZGVyIHNldCBzaXplICVkeCVkIC0+IHNjYWxlICAldXgldVxuIiwKKwkJCQkgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsIEhTQywgVlNDKTsKIAogCQkvKiBIU0NBTEU9SFNDICovCiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDE4LCBIU0MgJiAweGZmKTsKQEAgLTY2NiwyMzEgKzkwNiwzMiBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gxOF9hdl92Ymlfc19mbXQoY3gsIGZtdCk7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gxOF9hdl92Ymlfc19mbXQoY3gsIGZtdCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBjeDE4X2F2X3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCiB7Ci0Jc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKLQlzdHJ1Y3QgdjRsMl90dW5lciAqdnQgPSBhcmc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUgPSBhcmc7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQkvKiBpZ25vcmUgdGhlc2UgY29tbWFuZHMgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVFVORVJfU0VUX1RZUEVfQUREUjoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQpIHsKLQkJQ1gxOF9ERUJVR19JTkZPKCJjbWQgJTA4eCB0cmlnZ2VyZWQgZncgbG9hZFxuIiwgY21kKTsKLQkJLyogaW5pdGlhbGl6ZSBvbiBmaXJzdCB1c2UgKi8KLQkJc3RhdGUtPmlzX2luaXRpYWxpemVkID0gMTsKLQkJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkU6Ci0JCXJldHVybiBjeDE4X2F2X3ZiaShjeCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6Ci0JCXJldHVybiBjeDE4X2F2X2F1ZGlvKGN4LCBjbWQsIGFyZyk7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQkJQ1gxOF9ERUJVR19JTkZPKCJlbmFibGUgb3V0cHV0XG4iKTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiJXMgb3V0cHV0XG4iLCBlbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJaWYgKGVuYWJsZSkgewogCQljeDE4X2F2X3dyaXRlKGN4LCAweDExNSwgMHg4Yyk7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE2LCAweDA3KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JCUNYMThfREVCVUdfSU5GTygiZGlzYWJsZSBvdXRwdXRcbiIpOworCX0gZWxzZSB7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE1LCAweDAwKTsKIAkJY3gxOF9hdl93cml0ZShjeCwgMHgxMTYsIDB4MDApOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0xPR19TVEFUVVM6Ci0JCWxvZ192aWRlb19zdGF0dXMoY3gpOwotCQlsb2dfYXVkaW9fc3RhdHVzKGN4KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBnZXRfdjRsY3RybChjeCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gc2V0X3Y0bGN0cmwoY3gsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0KLQkJc3dpdGNoIChxYy0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAocWMtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwKLQkJCQk2NTUzNSAvIDEwMCwgc3RhdGUtPmRlZmF1bHRfdm9sdW1lKTsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWNhc2UgVklESU9DX0dfU1REOgotCQkqKHY0bDJfc3RkX2lkICopYXJnID0gc3RhdGUtPnN0ZDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJaWYgKHN0YXRlLT5yYWRpbyA9PSAwICYmIHN0YXRlLT5zdGQgPT0gKih2NGwyX3N0ZF9pZCAqKWFyZykKLQkJCXJldHVybiAwOwotCQlzdGF0ZS0+cmFkaW8gPSAwOwotCQlzdGF0ZS0+c3RkID0gKih2NGwyX3N0ZF9pZCAqKWFyZzsKLQkJcmV0dXJuIHNldF92NGxzdGQoY3gpOwotCi0JY2FzZSBBVURDX1NFVF9SQURJTzoKLQkJc3RhdGUtPnJhZGlvID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfR19WSURFT19ST1VUSU5HOgotCQlyb3V0ZS0+aW5wdXQgPSBzdGF0ZS0+dmlkX2lucHV0OwotCQlyb3V0ZS0+b3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HOgotCQlyZXR1cm4gc2V0X2lucHV0KGN4LCByb3V0ZS0+aW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOwotCi0JY2FzZSBWSURJT0NfSU5UX0dfQVVESU9fUk9VVElORzoKLQkJcm91dGUtPmlucHV0ID0gc3RhdGUtPmF1ZF9pbnB1dDsKLQkJcm91dGUtPm91dHB1dCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJcmV0dXJuIHNldF9pbnB1dChjeCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKLQotCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgotCQlpbnB1dF9jaGFuZ2UoY3gpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfVFVORVI6Ci0JewotCQl1OCB2cHJlcyA9IGN4MThfYXZfcmVhZChjeCwgMHg0MGUpICYgMHgyMDsKLQkJdTggbW9kZTsKLQkJaW50IHZhbCA9IDA7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOwotCi0JCXZ0LT5zaWduYWwgPSB2cHJlcyA/IDB4ZmZmZiA6IDB4MDsKLQotCQl2dC0+Y2FwYWJpbGl0eSB8PQotCQkgICAgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgVjRMMl9UVU5FUl9DQVBfTEFORzEgfAotCQkgICAgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7Ci0KLQkJbW9kZSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDQpOwotCi0JCS8qIGdldCByeHN1YmNoYW5zIGFuZCBhdWRtb2RlICovCi0JCWlmICgobW9kZSAmIDB4ZikgPT0gMSkKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0JCWVsc2UKLQkJCXZhbCB8PSBWNEwyX1RVTkVSX1NVQl9NT05POwotCi0JCWlmIChtb2RlID09IDIgfHwgbW9kZSA9PSA0KQotCQkJdmFsID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQotCQlpZiAobW9kZSAmIDB4MTApCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU0FQOwotCi0JCXZ0LT5yeHN1YmNoYW5zID0gdmFsOwotCQl2dC0+YXVkbW9kZSA9IHN0YXRlLT5hdWRtb2RlOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJdTggdjsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0KLQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDkpOwotCQl2ICY9IH4weGY7Ci0KLQkJc3dpdGNoICh2dC0+YXVkbW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9NT05POgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBtb25vCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KLQkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLwotCQkJdiB8PSAweDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzI6Ci0JCQkvKiBtb25vICAgICAgLT4gbW9ubwotCQkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbwotCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxL2xhbmcyICovCi0JCQl2IHw9IDB4NzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKLQkJCS8qIG1vbm8gICAgICAtPiBtb25vCi0JCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzIgKi8KLQkJCXYgfD0gMHgxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDksIHYsIHYsIDB4ZmYpOwotCQlzdGF0ZS0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQkJcmV0dXJuIGdldF92NGxmbXQoY3gsIChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmcpOwotCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JCXJldHVybiBzZXRfdjRsZm10KGN4LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKLQotCWNhc2UgVklESU9DX0lOVF9SRVNFVDoKLQkJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgbG9nX3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZtdF9zdHJzW10gPSB7CkBAIC05MDMsMzYgKzk0NCw0MCBAQAogCX07CiAKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSAmc3RhdGUtPnNkOwogCXU4IHZpZGZtdF9zZWwgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDAwKSAmIDB4ZjsKIAl1OCBnZW5fc3RhdDEgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBkKTsKIAl1OCBnZW5fc3RhdDIgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBlKTsKIAlpbnQgdmlkX2lucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKIAotCUNYMThfSU5GTygiVmlkZW8gc2lnbmFsOiAgICAgICAgICAgICAgJXNwcmVzZW50XG4iLAotCQkgICAgKGdlbl9zdGF0MiAmIDB4MjApID8gIiIgOiAibm90ICIpOwotCUNYMThfSU5GTygiRGV0ZWN0ZWQgZm9ybWF0OiAgICAgICAgICAgJXNcbiIsCi0JCSAgICBmbXRfc3Ryc1tnZW5fc3RhdDEgJiAweGZdKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiVmlkZW8gc2lnbmFsOiAgICAgICAgICAgICAgJXNwcmVzZW50XG4iLAorCQkgICAgICAoZ2VuX3N0YXQyICYgMHgyMCkgPyAiIiA6ICJub3QgIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGZvcm1hdDogICAgICAgICAgICVzXG4iLAorCQkgICAgICBmbXRfc3Ryc1tnZW5fc3RhdDEgJiAweGZdKTsKIAotCUNYMThfSU5GTygiU3BlY2lmaWVkIHN0YW5kYXJkOiAgICAgICAgJXNcbiIsCi0JCSAgICB2aWRmbXRfc2VsID8gZm10X3N0cnNbdmlkZm10X3NlbF0gOiAiYXV0b21hdGljIGRldGVjdGlvbiIpOworCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgc3RhbmRhcmQ6ICAgICAgICAlc1xuIiwKKwkJICAgICAgdmlkZm10X3NlbCA/IGZtdF9zdHJzW3ZpZGZtdF9zZWxdCisJCQkJIDogImF1dG9tYXRpYyBkZXRlY3Rpb24iKTsKIAogCWlmICh2aWRfaW5wdXQgPj0gQ1gxOF9BVl9DT01QT1NJVEUxICYmCiAJICAgIHZpZF9pbnB1dCA8PSBDWDE4X0FWX0NPTVBPU0lURTgpIHsKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgdmlkZW8gaW5wdXQ6ICAgICBDb21wb3NpdGUgJWRcbiIsCi0JCQl2aWRfaW5wdXQgLSBDWDE4X0FWX0NPTVBPU0lURTEgKyAxKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgIENvbXBvc2l0ZSAlZFxuIiwKKwkJCSAgICAgIHZpZF9pbnB1dCAtIENYMThfQVZfQ09NUE9TSVRFMSArIDEpOwogCX0gZWxzZSB7Ci0JCUNYMThfSU5GTygiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgUy1WaWRlbyAoTHVtYSBJbiVkLCBDaHJvbWEgSW4lZClcbiIsCi0JCQkodmlkX2lucHV0ICYgMHhmMCkgPj4gNCwgKHZpZF9pbnB1dCAmIDB4ZjAwKSA+PiA4KTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgICIKKwkJCSAgICAgICJTLVZpZGVvIChMdW1hIEluJWQsIENocm9tYSBJbiVkKVxuIiwKKwkJCSAgICAgICh2aWRfaW5wdXQgJiAweGYwKSA+PiA0LAorCQkJICAgICAgKHZpZF9pbnB1dCAmIDB4ZjAwKSA+PiA4KTsKIAl9CiAKLQlDWDE4X0lORk8oIlNwZWNpZmllZCBhdWRpb2Nsb2NrIGZyZXE6ICVkIEh6XG4iLCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOworCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgYXVkaW9jbG9jayBmcmVxOiAlZCBIelxuIiwKKwkJICAgICAgc3RhdGUtPmF1ZGNsa19mcmVxKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogc3RhdGljIHZvaWQgbG9nX2F1ZGlvX3N0YXR1cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl1OCBkb3dubG9hZF9jdGwgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKTsKIAl1OCBtb2RfZGV0X3N0YXQwID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwNCk7CiAJdTggbW9kX2RldF9zdGF0MSA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDUpOwpAQCAtOTU1LDcgKzEwMDAsNyBAQAogCWNhc2UgMHhmZTogcCA9ICJmb3JjZWQgbW9kZSI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAibm90IGRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJEZXRlY3RlZCBhdWRpbyBtb2RlOiAgICAgICAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGF1ZGlvIG1vZGU6ICAgICAgICVzXG4iLCBwKTsKIAogCXN3aXRjaCAobW9kX2RldF9zdGF0MSkgewogCWNhc2UgMHgwMDogcCA9ICJub3QgZGVmaW5lZCI7IGJyZWFrOwpAQCAtOTgwLDExICsxMDI1LDExIEBACiAJY2FzZSAweGZmOiBwID0gIm5vIGRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJub3QgZGVmaW5lZCI7IGJyZWFrOwogCX0KLQlDWDE4X0lORk8oIkRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkOiAgICVzXG4iLCBwKTsKLQlDWDE4X0lORk8oIkF1ZGlvIG11dGVkOiAgICAgICAgICAgICAgICVzXG4iLAotCQkgICAgKG11dGVfY3RsICYgMHgyKSA/ICJ5ZXMiIDogIm5vIik7Ci0JQ1gxOF9JTkZPKCJBdWRpbyBtaWNyb2NvbnRyb2xsZXI6ICAgICAlc1xuIiwKLQkJICAgIChkb3dubG9hZF9jdGwgJiAweDEwKSA/ICJydW5uaW5nIiA6ICJzdG9wcGVkIik7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkRldGVjdGVkIGF1ZGlvIHN0YW5kYXJkOiAgICVzXG4iLCBwKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiQXVkaW8gbXV0ZWQ6ICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgICAgIChtdXRlX2N0bCAmIDB4MikgPyAieWVzIiA6ICJubyIpOworCUNYMThfSU5GT19ERVYoc2QsICJBdWRpbyBtaWNyb2NvbnRyb2xsZXI6ICAgICAlc1xuIiwKKwkJICAgICAgKGRvd25sb2FkX2N0bCAmIDB4MTApID8gInJ1bm5pbmciIDogInN0b3BwZWQiKTsKIAogCXN3aXRjaCAoYXVkaW9fY29uZmlnID4+IDQpIHsKIAljYXNlIDB4MDA6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CkBAIC0xMDA1LDcgKzEwNTAsNyBAQAogCWNhc2UgMHgwZjogcCA9ICJhdXRvbWF0aWMgZGV0ZWN0aW9uIjsgYnJlYWs7CiAJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIHN0YW5kYXJkOiAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkNvbmZpZ3VyZWQgYXVkaW8gc3RhbmRhcmQ6ICVzXG4iLCBwKTsKIAogCWlmICgoYXVkaW9fY29uZmlnID4+IDQpIDwgMHhGKSB7CiAJCXN3aXRjaCAoYXVkaW9fY29uZmlnICYgMHhGKSB7CkBAIC0xMDE5LDcgKzEwNjQsNyBAQAogCQljYXNlIDB4MDc6IHAgPSAiRFVBTDMgKEFCKSI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7CiAJCX0KLQkJQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIG1vZGU6ICAgICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJDb25maWd1cmVkIGF1ZGlvIG1vZGU6ICAgICAlc1xuIiwgcCk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChhdWRpb19jb25maWcgJiAweEYpIHsKIAkJY2FzZSAweDAwOiBwID0gIkJHIjsgYnJlYWs7CkBAIC0xMDM3LDE0ICsxMDgyLDE0IEBACiAJCWNhc2UgMHgwZjogcCA9ICJhdXRvbWF0aWMgc3RhbmRhcmQgYW5kIG1vZGUgZGV0ZWN0aW9uIjsgYnJlYWs7CiAJCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJCX0KLQkJQ1gxOF9JTkZPKCJDb25maWd1cmVkIGF1ZGlvIHN5c3RlbTogICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJDb25maWd1cmVkIGF1ZGlvIHN5c3RlbTogICAlc1xuIiwgcCk7CiAJfQogCiAJaWYgKGF1ZF9pbnB1dCkKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICBUdW5lciAoSW4lZClcbiIsCi0JCQkJYXVkX2lucHV0KTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIFR1bmVyIChJbiVkKVxuIiwKKwkJCSAgICAgIGF1ZF9pbnB1dCk7CiAJZWxzZQotCQlDWDE4X0lORk8oIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIEV4dGVybmFsXG4iKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNwZWNpZmllZCBhdWRpbyBpbnB1dDogICAgIEV4dGVybmFsXG4iKTsKIAogCXN3aXRjaCAocHJlZl9tb2RlICYgMHhmKSB7CiAJY2FzZSAwOiBwID0gIm1vbm8vbGFuZ3VhZ2UgQSI7IGJyZWFrOwpAQCAtMTA1NywxNCArMTEwMiwxNCBAQAogCWNhc2UgNzogcCA9ICJsYW5ndWFnZSBBQiI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJfQotCUNYMThfSU5GTygiUHJlZmVycmVkIGF1ZGlvIG1vZGU6ICAgICAgJXNcbiIsIHApOworCUNYMThfSU5GT19ERVYoc2QsICJQcmVmZXJyZWQgYXVkaW8gbW9kZTogICAgICAlc1xuIiwgcCk7CiAKIAlpZiAoKGF1ZGlvX2NvbmZpZyAmIDB4ZikgPT0gMHhmKSB7CiAJCXN3aXRjaCAoKGFmYzAgPj4gMykgJiAweDEpIHsKIAkJY2FzZSAwOiBwID0gInN5c3RlbSBESyI7IGJyZWFrOwogCQljYXNlIDE6IHAgPSAic3lzdGVtIEwiOyBicmVhazsKIAkJfQotCQlDWDE4X0lORk8oIlNlbGVjdGVkIDY1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNlbGVjdGVkIDY1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKIAogCQlzd2l0Y2ggKGFmYzAgJiAweDcpIHsKIAkJY2FzZSAwOiBwID0gIkNocm9tYSI7IGJyZWFrOwpAQCAtMTA3NCw2ICsxMTE5LDEzMSBAQAogCQljYXNlIDQ6IHAgPSAiYXV0b2RldGVjdCI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwogCQl9Ci0JCUNYMThfSU5GTygiU2VsZWN0ZWQgNDUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOworCQlDWDE4X0lORk9fREVWKHNkLCAiU2VsZWN0ZWQgNDUgTUh6IGZvcm1hdDogICAgJXNcbiIsIHApOwogCX0KIH0KKworc3RhdGljIGludCBjeDE4X2F2X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlsb2dfdmlkZW9fc3RhdHVzKGN4KTsKKwlsb2dfYXVkaW9fc3RhdHVzKGN4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3gxOF9hdl9kYmdfbWF0Y2goY29uc3Qgc3RydWN0IHY0bDJfZGJnX21hdGNoICptYXRjaCkKK3sKKwlyZXR1cm4gbWF0Y2gtPnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0hPU1QgJiYgbWF0Y2gtPmFkZHIgPT0gMTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCisJaWYgKGN4MThfYXZfZGJnX21hdGNoKCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBzdGF0ZS0+aWQ7CisJCWNoaXAtPnJldmlzaW9uID0gc3RhdGUtPnJldjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IGN4MThfYXZfZ19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIWN4MThfYXZfZGJnX21hdGNoKCZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChyZWctPnJlZyAmIDB4MykgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJlZy0+c2l6ZSA9IDQ7CisJcmVnLT52YWwgPSBjeDE4X2F2X3JlYWQ0KGN4LCByZWctPnJlZyAmIDB4MDAwMDBmZmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIWN4MThfYXZfZGJnX21hdGNoKCZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChyZWctPnJlZyAmIDB4MykgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCWN4MThfYXZfd3JpdGU0KGN4LCByZWctPnJlZyAmIDB4MDAwMDBmZmMsIHJlZy0+dmFsKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MThfYXZfZ2VuZXJhbF9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGN4MThfYXZfZ19jaGlwX2lkZW50LAorCS5sb2dfc3RhdHVzID0gY3gxOF9hdl9sb2dfc3RhdHVzLAorCS5pbml0ID0gY3gxOF9hdl9pbml0LAorCS5yZXNldCA9IGN4MThfYXZfcmVzZXQsCisJLnF1ZXJ5Y3RybCA9IGN4MThfYXZfcXVlcnljdHJsLAorCS5nX2N0cmwgPSBjeDE4X2F2X2dfY3RybCwKKwkuc19jdHJsID0gY3gxOF9hdl9zX2N0cmwsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gY3gxOF9hdl9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gY3gxOF9hdl9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBjeDE4X2F2X3R1bmVyX29wcyA9IHsKKwkuc19yYWRpbyA9IGN4MThfYXZfc19yYWRpbywKKwkuc19mcmVxdWVuY3kgPSBjeDE4X2F2X3NfZnJlcXVlbmN5LAorCS5nX3R1bmVyID0gY3gxOF9hdl9nX3R1bmVyLAorCS5zX3R1bmVyID0gY3gxOF9hdl9zX3R1bmVyLAorCS5zX3N0ZCA9IGN4MThfYXZfc19zdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBjeDE4X2F2X2F1ZGlvX29wcyA9IHsKKwkuc19jbG9ja19mcmVxID0gY3gxOF9hdl9zX2Nsb2NrX2ZyZXEsCisJLnNfcm91dGluZyA9IGN4MThfYXZfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgY3gxOF9hdl92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGN4MThfYXZfc192aWRlb19yb3V0aW5nLAorCS5kZWNvZGVfdmJpX2xpbmUgPSBjeDE4X2F2X2RlY29kZV92YmlfbGluZSwKKwkuc19zdHJlYW0gPSBjeDE4X2F2X3Nfc3RyZWFtLAorCS5nX2ZtdCA9IGN4MThfYXZfZ19mbXQsCisJLnNfZm10ID0gY3gxOF9hdl9zX2ZtdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGN4MThfYXZfb3BzID0geworCS5jb3JlID0gJmN4MThfYXZfZ2VuZXJhbF9vcHMsCisJLnR1bmVyID0gJmN4MThfYXZfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZjeDE4X2F2X2F1ZGlvX29wcywKKwkudmlkZW8gPSAmY3gxOF9hdl92aWRlb19vcHMsCit9OworCitpbnQgY3gxOF9hdl9wcm9iZShzdHJ1Y3QgY3gxOCAqY3gpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJc3RhdGUtPnJldiA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19DSElQX0NUUkwpICYgMHhmZmZmOworCXN0YXRlLT5pZCA9ICgoc3RhdGUtPnJldiA+PiA0KSA9PSBDWEFERUNfQ0hJUF9UWVBFX01BS08pCisJCSAgICA/IFY0TDJfSURFTlRfQ1gyMzQxOF84NDMgOiBWNEwyX0lERU5UX1VOS05PV047CisKKwlzdGF0ZS0+dmlkX2lucHV0ID0gQ1gxOF9BVl9DT01QT1NJVEU3OworCXN0YXRlLT5hdWRfaW5wdXQgPSBDWDE4X0FWX0FVRElPODsKKwlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKKwlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKKwlzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgPSAwOworCXN0YXRlLT5zbGljZXJfbGluZV9vZmZzZXQgPSAoMTAgKyBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgLSAyKTsKKworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX3N1YmRldl9pbml0KHNkLCAmY3gxOF9hdl9vcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoc2QsIGN4KTsKKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwKKwkJICIlcyAlMDN4IiwgY3gtPnY0bDJfZGV2Lm5hbWUsIChzdGF0ZS0+cmV2ID4+IDQpKTsKKwlzZC0+Z3JwX2lkID0gQ1gxOF9IV180MThfQVY7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigmY3gtPnY0bDJfZGV2LCBzZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKaW5kZXggY2Y2OGE2MC4uYzQ1ODEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaApAQCAtMjUsNiArMjUsOCBAQAogI2lmbmRlZiBfQ1gxOF9BVl9DT1JFX0hfCiAjZGVmaW5lIF9DWDE4X0FWX0NPUkVfSF8KIAorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKIHN0cnVjdCBjeDE4OwogCiBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgewpAQCAtNzMsMTcgKzc1LDQwIEBACiB9OwogCiBzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCWludCByYWRpbzsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJZW51bSBjeDE4X2F2X3ZpZGVvX2lucHV0IHZpZF9pbnB1dDsKIAllbnVtIGN4MThfYXZfYXVkaW9faW5wdXQgYXVkX2lucHV0OwogCXUzMiBhdWRjbGtfZnJlcTsKIAlpbnQgYXVkbW9kZTsKLQlpbnQgdmJpX2xpbmVfb2Zmc2V0OwogCWludCBkZWZhdWx0X3ZvbHVtZTsKIAl1MzIgaWQ7CiAJdTMyIHJldjsKIAlpbnQgaXNfaW5pdGlhbGl6ZWQ7CisKKwkvKgorCSAqIFRoZSBWQkkgc2xpY2VyIHN0YXJ0cyBvcGVyYXRpbmcgYW5kIGNvdW50aW5nIGxpbmVzLCBiZWdpbmluZyBhdAorCSAqIHNsaWNlciBsaW5lIGNvdW50IG9mIDEsIGF0IEQgbGluZXMgYWZ0ZXIgdGhlIGRlYXNzZXJ0aW9uIG9mIFZSRVNFVC4KKwkgKiBUaGlzIHN0YXJpbmcgZmllbGQgbGluZSwgUywgaXMgNiAoJiAzMTkpIG9yIDEwICgmIDI3MykgZm9yIDYyNSBvciA1MjUKKwkgKiBsaW5lIHN5c3RlbXMgcmVzcGVjdGl2ZWx5LiAgU2xpY2VkIGFuY2lsbGFyeSBkYXRhIGNhcHR1cmVkIG9uIFZCSQorCSAqIHNsaWNlciBsaW5lIE0gaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIFZCSSBzbGljZXIgaXMgZG9uZSB3aXRoIGxpbmUgTSwKKwkgKiB3aGVuIFZCSSBzbGljZXIgbGluZSBjb3VudCBpcyBOID0gTSsxLiAgVGh1cyB3aGVuIHRoZSBWQkkgc2xpY2VyCisJICogcmVwb3J0cyBhIFZCSSBzbGljZXIgbGluZSBudW1iZXIgd2l0aCBhbmNpbGxhcnkgZGF0YSwgdGhlIElESUQwIGJ5dGUKKwkgKiBpbmRpY2F0ZXMgVkJJIHNsaWNlciBsaW5lIE4uICBUaGUgYWN0dWFsIGZpZWxkIGxpbmUgdGhhdCB0aGUgY2FwdHVyZWQKKwkgKiBkYXRhIGNvbWVzIGZyb20gaXMKKwkgKgorCSAqIEwgPSBNKyhTK0QtMSkgPSBOLTErKFMrRC0xKSA9IE4gKyAoUytELTIpLgorCSAqCisJICogTCBpcyB0aGUgbGluZSBpbiB0aGUgZmllbGQsIG5vdCBmcmFtZSwgZnJvbSB3aGljaCB0aGUgVkJJIGRhdGEgY2FtZS4KKwkgKiBOIGlzIHRoZSBsaW5lIHJlcG9ydGVkIGJ5IHRoZSBzbGljZXIgaW4gdGhlIGFuY2lsbGFyeSBkYXRhLgorCSAqIEQgaXMgdGhlIHNsaWNlcl9saW5lX2RlbGF5IHZhbHVlIHByb2dyYW1tZWQgaW50byByZWdpc3RlciAweDQ3Zi4KKwkgKiBTIGlzIDYgZm9yIDYyNSBsaW5lIHN5c3RlbXMgb3IgMTAgZm9yIDUyNSBsaW5lIHN5c3RlbXMKKwkgKiAoUytELTIpIGlzIHRoZSBzbGljZXJfbGluZV9vZmZzZXQgdXNlZCB0byBjb252ZXJ0IHNsaWNlciByZXBvcnRlZAorCSAqIGxpbmUgY291bnRzIHRvIGFjdHVhbCBmaWVsZCBsaW5lcy4KKwkgKi8KKwlpbnQgc2xpY2VyX2xpbmVfZGVsYXk7CisJaW50IHNsaWNlcl9saW5lX29mZnNldDsKIH07CiAKIApAQCAtMjk4LDYgKzMyMywxNiBAQAogI2RlZmluZSBDWEFERUNfU0VMRUNUX0FVRElPX1NUQU5EQVJEX0ZNICAgIDB4RjkgIC8qIEZNIHJhZGlvICovCiAjZGVmaW5lIENYQURFQ19TRUxFQ1RfQVVESU9fU1RBTkRBUkRfQVVUTyAgMHhGRiAgLyogQXV0byBkZXRlY3QgKi8KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqdG9fY3gxOF9hdl9zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBjeDE4X2F2X3N0YXRlLCBzZCk7Cit9CisKK2VudW0gY3gxOF9hdl9zdWJkZXZfaW5pdF9hcmcgeworCUNYMThfQVZfSU5JVF9OT1JNQUwgPSAwLAorCUNYMThfQVZfSU5JVF9QTExTID0gMSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDE4X2F2LWNvcmUuYyAJCQkJCQkJICAgKi8KIGludCBjeDE4X2F2X3dyaXRlKHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHU4IHZhbHVlKTsKQEAgLTMxMCwyMCArMzQ1LDI2IEBACiB1MzIgY3gxOF9hdl9yZWFkNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyKTsKIGludCBjeDE4X2F2X2FuZF9vcihzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1bnNpZ25lZCBtYXNrLCB1OCB2YWx1ZSk7CiBpbnQgY3gxOF9hdl9hbmRfb3I0KHN0cnVjdCBjeDE4ICpjeCwgdTE2IGFkZHIsIHUzMiBtYXNrLCB1MzIgdmFsdWUpOwotaW50IGN4MThfYXZfY21kKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIHZvaWQgY3gxOF9hdl9zdGRfc2V0dXAoc3RydWN0IGN4MTggKmN4KTsKIAoraW50IGN4MThfYXZfcHJvYmUoc3RydWN0IGN4MTggKmN4KTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtZmlybXdhcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBpbnQgY3gxOF9hdl9sb2FkZncoc3RydWN0IGN4MTggKmN4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtYXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gxOF9hdl9hdWRpbyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gxOF9hdl9hdWRpb19nX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDE4X2F2X2F1ZGlvX3NfY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworaW50IGN4MThfYXZfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKIHZvaWQgY3gxOF9hdl9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgY3gxOCAqY3gpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gxOF9hdi12YmkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWludCBjeDE4X2F2X3ZiaShzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKTsKK2ludCBjeDE4X2F2X3ZiaV9nX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKK2ludCBjeDE4X2F2X3ZiaV9zX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYwppbmRleCBjNjRmZDBhLi40OWE1NWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW50IGN4MThfYXZfbG9hZGZ3KHN0cnVjdCBjeDE4ICpjeCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmN4LT5hdl9zdGF0ZS5zZDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKIAl1MzIgc2l6ZTsKIAl1MzIgdjsKQEAgLTM2LDggKzM3LDggQEAKIAlpbnQgaTsKIAlpbnQgcmV0cmllczEgPSAwOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBGV0ZJTEUsICZjeC0+ZGV2LT5kZXYpICE9IDApIHsKLQkJQ1gxOF9FUlIoInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBGV0ZJTEUpOworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgRldGSUxFLCAmY3gtPnBjaV9kZXYtPmRldikgIT0gMCkgeworCQlDWDE4X0VSUl9ERVYoc2QsICJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04OCw3ICs4OSw3IEBACiAJCXJldHJpZXMxKys7CiAJfQogCWlmIChyZXRyaWVzMSA+PSA1KSB7Ci0JCUNYMThfRVJSKCJ1bmFibGUgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKKwkJQ1gxOF9FUlJfREVWKHNkLCAidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7CiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMTUsOSArMTE2LDkgQEAKIAkgICBhcmUgZ2VuZXJhdGVkKSAqLwogCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfSTJTX09VVF9DVEwsIDB4MDAwMDAxQTApOwogCi0JLyogc2V0IGFsdCBJMnMgbWFzdGVyIGNsb2NrIHRvIC8xNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycworCS8qIHNldCBhbHQgSTJzIG1hc3RlciBjbG9jayB0byAvMHgxNiBhbmQgZW5hYmxlIGFsdCBkaXZpZGVyIGkycwogCSAgIHBhc3N0aHJvdWdoICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1MDAwQjY4Nyk7CisJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QSU5fQ0ZHMywgMHg1NjAwQjY4Nyk7CiAKIAljeDE4X2F2X3dyaXRlNF9leHBlY3QoY3gsIENYQURFQ19TVERfREVUX0NUTCwgMHgwMDAwMDBGNiwgMHgwMDAwMDBGNiwKIAkJCQkJCQkJICAweDNGMDBGRkZGKTsKQEAgLTEzMSw3ICsxMzIsOCBAQAogCXYgPSBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X0FVRElPX0VOQUJMRSk7CiAJLyogSWYgYml0IDExIGlzIDEsIGNsZWFyIGJpdCAxMCAqLwogCWlmICh2ICYgMHg4MDApCi0JCWN4MThfd3JpdGVfcmVnKGN4LCB2ICYgMHhGRkZGRkJGRiwgQ1gxOF9BVURJT19FTkFCTEUpOworCQljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHYgJiAweEZGRkZGQkZGLCBDWDE4X0FVRElPX0VOQUJMRSwKKwkJCQkgICAgICAwLCAweDQwMCk7CiAKIAkvKiBFbmFibGUgV1cgYXV0byBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gKi8KIAl2ID0gY3gxOF9hdl9yZWFkNChjeCwgQ1hBREVDX1NURF9ERVRfQ1RMKTsKQEAgLTE0Miw2ICsxNDQsNiBAQAogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlDWDE4X0lORk8oImxvYWRlZCAlcyBmaXJtd2FyZSAoJWQgYnl0ZXMpXG4iLCBGV0ZJTEUsIHNpemUpOworCUNYMThfSU5GT19ERVYoc2QsICJsb2FkZWQgJXMgZmlybXdhcmUgKCVkIGJ5dGVzKVxuIiwgRldGSUxFLCBzaXplKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKaW5kZXggMTUyN2VhNC4uMjNiMzE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtdmJpLmMKQEAgLTI0LDYgKzI0LDUyIEBACiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgogCisvKgorICogRm9yIHNsaWNlZCBWQkkgb3V0cHV0LCB3ZSBzZXQgdXAgdG8gdXNlIFZJUC0xLjEsIDgtYml0IG1vZGUsCisgKiBOTiBjb3VudHMgMSBieXRlIER3b3JkcywgYW4gSURJRCB3aXRoIHRoZSBWQkkgbGluZSAjIGluIGl0LgorICogVGh1cywgYWNjb3JkaW5nIHRvIHRoZSBWSVAtMiBTcGVjLCBvdXIgVkJJIGFuY2lsbGFyeSBkYXRhIGxpbmVzCisgKiAoc2hvdWxkISkgbG9vayBsaWtlOgorICoJNCBieXRlIEVBViBjb2RlOiAgICAgICAgICAweGZmIDB4MDAgMHgwMCAweFJQCisgKgl1bmtub3duIG51bWJlciBvZiBwb3NzaWJsZSBpZGxlIGJ5dGVzCisgKgkzIGJ5dGUgQW5jIGRhdGEgcHJlYW1ibGU6IDB4MDAgMHhmZiAweGZmCisgKgkxIGJ5dGUgZGF0YSBpZGVudGlmaWVyOiAgIG5lMDEwaWlpIChwYXJpdHkgYml0cywgMDEwLCBESUQgYml0cykKKyAqCTEgYnl0ZSBzZWNvbmRhcnkgZGF0YSBpZDogbmVzc3Nzc3MgKHBhcml0eSBiaXRzLCBTRElEIGJpdHMpCisgKgkxIGJ5dGUgZGF0YSB3b3JkIGNvdW50OiAgIG5lY2NjY2NjIChwYXJpdHkgYml0cywgTk4gRHdvcmQgY291bnQpCisgKgkyIGJ5dGUgSW50ZXJuYWwgRElEOgkgIFZCSS1saW5lLSMgMHg4MAorICoJTk4gZGF0YSBieXRlcworICoJMSBieXRlIGNoZWNrc3VtCisgKglGaWxsIGJ5dGVzIG5lZWRlZCB0byBmaWwgb3V0IHRvIDQqTk4gYnl0ZXMgb2YgcGF5bG9hZAorICoKKyAqIFRoZSBSUCBjb2RlcyBmb3IgRUFWcyB3aGVuIGluIFZJUC0xLjEgbW9kZSwgbm90IGluIHJhdyBtb2RlLCAmCisgKiBpbiB0aGUgdmVydGljYWwgYmxhbmtpbmcgaW50ZXJ2YWwgYXJlOgorICoJMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCTB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDApCisgKgorICogU2luY2UgdGhlIFYgYml0IGlzIG9ubHkgYWxsb3dlZCB0byB0b2dnbGUgaW4gdGhlIEVBViBSUCBjb2RlLCBqdXN0CisgKiBiZWZvcmUgdGhlIGZpcnN0IGFjdGl2ZSByZWdpb24gbGluZSBhbmQgZm9yIGFjdGl2ZSBsaW5lcywgdGhleSBhcmU6CisgKgkweDkwIChUYXNrICAgICAgICAgMCAwIEhvcml6b250YWxCbGFuayAwIDAgMCAwKQorICoJMHhkMCAoVGFzayBFdmVuRmllbGQgMCBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCisgKiBUaGUgdXNlciBhcHBsaWNhdGlvbiBESUQgYnl0ZXMgd2UgY2FyZSBhYm91dCBhcmU6CisgKgkweDkxICgxIDAgMDEwICAgICAgICAwICFBY3RpdmVMaW5lIEFuY0RhdGFQcmVzZW50KQorICoJMHg1NSAoMCAxIDAxMCAybmRGaWVsZCAhQWN0aXZlTGluZSBBbmNEYXRhUHJlc2VudCkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2RpZFsyXSA9IHsgMHg5MSwgMHg1NSB9OworCitzdHJ1Y3QgdmJpX2FuY19kYXRhIHsKKwkvKiB1OCBlYXZbNF07ICovCisJLyogdTggaWRsZVtdOyBWYXJpYWJsZSBudW1iZXIgb2YgaWRsZSBieXRlcyAqLworCXU4IHByZWFtYmxlWzNdOworCXU4IGRpZDsKKwl1OCBzZGlkOworCXU4IGRhdGFfY291bnQ7CisJdTggaWRpZFsyXTsKKwl1OCBwYXlsb2FkWzFdOyAvKiBkYXRhX2NvdW50IG9mIHBheWxvYWQgKi8KKwkvKiB1OCBjaGVja3N1bTsgKi8KKwkvKiB1OCBmaWxsW107IFZhcmlhYmxlIG51bWJlciBvZiBmaWxsIGJ5dGVzICovCit9OworCiBzdGF0aWMgaW50IG9kZF9wYXJpdHkodTggYykKIHsKIAljIF49IChjID4+IDQpOwpAQCAtODMsMTg4ICsxMjksMTg5IEBACiAJcmV0dXJuIGVyciAmIDB4ZjA7CiB9CiAKLWludCBjeDE4X2F2X3ZiaShzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDE4X2F2X3ZiaV9nX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJc3RhdGljIGNvbnN0IHUxNiBsY3IydmJpW10gPSB7CisJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KKwkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLworCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLworCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KKwkJMCwgMCwgMCwgMAorCX07CisJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7CisJaW50IGk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RhdGljIHUxNiBsY3IydmJpW10gPSB7Ci0JCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCi0JCQkwLCBWNEwyX1NMSUNFRF9XU1NfNjI1LCAwLAkvKiA0ICovCi0JCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSwJLyogNiAqLwotCQkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCi0JCQkwLCAwLCAwLCAwCi0JCX07Ci0JCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOwotCQlpbnQgaTsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKKwltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7CisJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLworCWlmICgoY3gxOF9hdl9yZWFkKGN4LCAweDQwNCkgJiAweDEwKSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQlmbXQgPSBhcmc7Ci0JCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKLQkJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLwotCQlpZiAoKGN4MThfYXZfcmVhZChjeCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKIAotCQlpZiAoaXNfcGFsKSB7Ci0JCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKLQkJCQl1OCB2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDQyNCArIGkgLSA3KTsKLQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0gc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgeworCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gMTApOworCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOworCQl9CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gxOF9hdl92Ymlfc19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDE4X2F2X3N0ZF9zZXR1cChjeCk7Ci0KLQkJCS8qIFZCSSBPZmZzZXQgKi8KLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKLQkJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MThfYXZfc3RkX3NldHVwKGN4KTsKIAotCQkvKiBTbGljZWQgVkJJICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0MDYsIDB4MTMpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgdmJpX29mZnNldCk7CisJCS8qIFZCSSBPZmZzZXQgKi8KKwkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKwlmb3IgKHggPSAwOyB4IDw9IDIzOyB4KyspCisJCWxjclt4XSA9IDB4MDA7CiAKLQkJCWZvciAoaSA9IDIyOyBpIDw9IDIzOyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9CisJLyogU2V0dXAgc3RhbmRhcmQgKi8KKwljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAKLQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgewotCQkJCXN3aXRjaCAoc3ZiaS0+c2VydmljZV9saW5lc1sxLXhdW2ldKSB7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgotCQkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6Ci0JCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6Ci0JCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgotCQkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQl9CisJLyogU2xpY2VkIFZCSSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQwNiwgMHgxMyk7CisJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CisKKwkvKiBGb3JjZSBpbXBvc3NpYmxlIGxpbmVzIHRvIDAgKi8KKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJLyogQnVpbGQgcmVnaXN0ZXIgdmFsdWVzIGZvciByZXF1ZXN0ZWQgc2VydmljZSBsaW5lcyAqLworCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgeworCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKKwkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKKwkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgorCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgorCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKKwkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykKLQkJCQljeDE4X2F2X3dyaXRlKGN4LCBpLCBsY3JbNiArIHhdKTsKLQkJfSBlbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspCi0JCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQotCQkJCWN4MThfYXZfd3JpdGUoY3gsIGksIDApOwotCQl9Ci0KLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOwotCQlicmVhazsKIAl9CiAKLQljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCXsKLQkJc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkgPSBhcmc7Ci0JCXU4ICpwID0gdmJpLT5wOwotCQlpbnQgaWQxLCBpZDIsIGwsIGVyciA9IDA7CisJaWYgKGlzX3BhbCkgeworCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzQ7IGkrKywgeCsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MThfYXZfd3JpdGUoY3gsIGksIGxjcls5ICsgeF0pOworCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKQorCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgMCk7CisJfQogCi0JCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKLQkJICAgIChwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgewotCQkJdmJpLT5saW5lID0gdmJpLT50eXBlID0gMDsKLQkJCWJyZWFrOwotCQl9CisJY3gxOF9hdl93cml0ZShjeCwgMHg0M2MsIDB4MTYpOworCS8qIEZJWE1FIC0gc2hvdWxkIG1hdGNoIHZibGFuayBzZXQgaW4gY3gxOF9hdl9zdGRfc2V0dXAoKSAqLworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDc0LCBpc19wYWwgPyAweDJhIDogMjYpOworCXJldHVybiAwOworfQogCi0JCXAgKz0gNDsKLQkJaWQxID0gcFstMV07Ci0JCWlkMiA9IHBbMF0gJiAweGY7Ci0JCWwgPSBwWzJdICYgMHgzZjsKLQkJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OwotCQlwICs9IDQ7CitpbnQgY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOworCXN0cnVjdCB2YmlfYW5jX2RhdGEgKmFuYyA9IChzdHJ1Y3QgdmJpX2FuY19kYXRhICopdmJpLT5wOworCXU4ICpwOworCWludCBkaWQsIHNkaWQsIGwsIGVyciA9IDA7CiAKLQkJc3dpdGNoIChpZDIpIHsKLQkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSA5OgotCQkJaWQyID0gVjRMMl9TTElDRURfVlBTOwotCQkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKLQkJCQllcnIgPSAxOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZDIgPSAwOworCS8qCisJICogQ2hlY2sgZm9yIHRoZSBhbmNpbGxhcnkgZGF0YSBoZWFkZXIgZm9yIHNsaWNlZCBWQkkKKwkgKi8KKwlpZiAoYW5jLT5wcmVhbWJsZVswXSB8fAorCQkJYW5jLT5wcmVhbWJsZVsxXSAhPSAweGZmIHx8IGFuYy0+cHJlYW1ibGVbMl0gIT0gMHhmZiB8fAorCQkJKGFuYy0+ZGlkICE9IHNsaWNlZF92YmlfZGlkWzBdICYmCisJCQkgYW5jLT5kaWQgIT0gc2xpY2VkX3ZiaV9kaWRbMV0pKSB7CisJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7CisJCXJldHVybiAwOworCX0KKworCWRpZCA9IGFuYy0+ZGlkOworCXNkaWQgPSBhbmMtPnNkaWQgJiAweGY7CisJbCA9IGFuYy0+aWRpZFswXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0OworCXAgPSBhbmMtPnBheWxvYWQ7CisKKwkvKiBEZWNvZGUgdGhlIFNESUQgc2V0IGJ5IHRoZSBzbGljZXIgKi8KKwlzd2l0Y2ggKHNkaWQpIHsKKwljYXNlIDE6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlicmVhazsKKwljYXNlIDY6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKKwkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7CisJCWJyZWFrOworCWNhc2UgOToKKwkJc2RpZCA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzZGlkID0gMDsKKwkJZXJyID0gMTsKIAkJYnJlYWs7CiAJfQotCX0KIAorCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBzZGlkOworCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOworCXZiaS0+aXNfc2Vjb25kX2ZpZWxkID0gZXJyID8gMCA6IChkaWQgPT0gc2xpY2VkX3ZiaV9kaWRbMV0pOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYwppbmRleCBlMjc0MDQzLi45YmMyMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKQEAgLTUxLDEyICs1MSwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2h2cjE2MDBfZXNtdCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9IVlJfMTYwMF9FU01ULAogCS5uYW1lID0gIkhhdXBwYXVnZSBIVlItMTYwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtOTcsMTIgKzk3LDEyIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfaHZyMTYwMF9zYW1zdW5nID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0hWUl8xNjAwX1NBTVNVTkcsCiAJLm5hbWUgPSAiSGF1cHBhdWdlIEhWUi0xNjAwIChQcmVwcm9kdWN0aW9uKSIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiU2ltdWx0YW5lb3VzIERpZ2l0YWwgYW5kIEFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCiAJLmh3X211eGVyID0gQ1gxOF9IV19DUzUzNDUsCi0JLmh3X2FsbCA9IENYMThfSFdfVFZFRVBST00gfCBDWDE4X0hXX1RVTkVSIHwKLQkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCLAorCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwKKwkJICBDWDE4X0hXX0NTNTM0NSB8IENYMThfSFdfRFZCIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU3IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsIENYMThfQVZfU1ZJREVPMSAgICB9LApAQCAtMTUyLDEwICsxNTIsMTAgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9oOTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0NPTVBST19IOTAwLAogCS5uYW1lID0gIkNvbXBybyBWaWRlb01hdGUgSDkwMCIsCi0JLmNvbW1lbnQgPSAiUmF3IFZCSSBzdXBwb3J0ZWQ7IFNsaWNlZCBWQkkgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJLmNvbW1lbnQgPSAiQW5hbG9nIFRWIGNhcHR1cmUgc3VwcG9ydGVkXG4iLAogCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCi0JLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfYWxsID0gQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0yMDEsOCArMjAxLDggQEAKIAkubmFtZSA9ICJZdWFuIE1QQzcxOCIsCiAJLmNvbW1lbnQgPSAiQW5hbG9nIHZpZGVvIGNhcHR1cmUgd29ya3M7IHNvbWUgYXVkaW8gbGluZSBpbiBtYXkgbm90LlxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLApAQCAtMjQ5LDExICsyNDksMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9jbnh0X3JhcHRvcl9wYWwgPSB7CiAJLnR5cGUgPSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMLAogCS5uYW1lID0gIkNvbmV4YW50IFJhcHRvciBQQUwvU0VDQU0iLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIkFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19tdXhlciA9IENYMThfSFdfR1BJTywKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJTywKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19tdXhlciA9IENYMThfSFdfR1BJT19NVVgsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19NVVgsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0zMDYsOCArMzA2LDggQEAKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTYgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKQEAgLTMzOSwxOSArMzM5LDIxIEBACiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZF9wY2lfaW5mbyBjeDE4X3BjaV9sZWFkdGVrX3B2cjIxMDBbXSA9IHsKLQl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2ZjI3IH0sCisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NmYyNyB9LCAvKiBQVlIyMTAwICAgKi8KKwl7IFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwgQ1gxOF9QQ0lfSURfTEVBRFRFSywgMHg2NjkwIH0sIC8qIERWUjMxMDAgSCAqLwogCXsgMCwgMCwgMCB9CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfbGVhZHRla19wdnIyMTAwID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCwKLQkubmFtZSA9ICJMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMCIsCisJLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAvRFZSMzEwMCBIIiwKIAkuY29tbWVudCA9ICJFeHBlcmltZW50ZXJzIGFuZCBwaG90b3MgbmVlZGVkIGZvciBkZXZpY2UgdG8gd29yayB3ZWxsLlxuIgogCQkgICJcdFRvIGhlbHAsIG1haWwgdGhlIGl2dHYtZGV2ZWwgbGlzdCAod3d3Lml2dHZkcml2ZXIub3JnKS5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU9fTVVYLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fTVVYIHwKKwkJICBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCmluZGV4IDZmYTdiY2IuLjNjNTUyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaApAQCAtMjIsMTIgKzIyLDEzIEBACiAgKi8KIAogLyogaGFyZHdhcmUgZmxhZ3MgKi8KLSNkZWZpbmUgQ1gxOF9IV19UVU5FUiAgICAgKDEgPDwgMCkKLSNkZWZpbmUgQ1gxOF9IV19UVkVFUFJPTSAgKDEgPDwgMSkKLSNkZWZpbmUgQ1gxOF9IV19DUzUzNDUgICAgKDEgPDwgMikKLSNkZWZpbmUgQ1gxOF9IV19HUElPICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ1gxOF9IV19DWDIzNDE4ICAgKDEgPDwgNCkKLSNkZWZpbmUgQ1gxOF9IV19EVkIgICAJICAoMSA8PCA1KQorI2RlZmluZSBDWDE4X0hXX1RVTkVSCQkoMSA8PCAwKQorI2RlZmluZSBDWDE4X0hXX1RWRUVQUk9NCSgxIDw8IDEpCisjZGVmaW5lIENYMThfSFdfQ1M1MzQ1CQkoMSA8PCAyKQorI2RlZmluZSBDWDE4X0hXX0RWQgkJKDEgPDwgMykKKyNkZWZpbmUgQ1gxOF9IV180MThfQVYJCSgxIDw8IDQpCisjZGVmaW5lIENYMThfSFdfR1BJT19NVVgJKDEgPDwgNSkKKyNkZWZpbmUgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwJKDEgPDwgNikKIAogLyogdmlkZW8gaW5wdXRzICovCiAjZGVmaW5lCUNYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIJMQpAQCAtNDksOCArNTAsNyBAQAogLyogVjRMMiBjYXBhYmlsaXR5IGFsaWFzZXMgKi8KICNkZWZpbmUgQ1gxOF9DQVBfRU5DT0RFUiAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1RVTkVSIHwgXAogCQkJICBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JFQURXUklURSB8IFwKLQkJCSAgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCi0vKiB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkgbm90IHlldCAqLworCQkJICBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8IFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkKIAogc3RydWN0IGN4MThfY2FyZF92aWRlb19pbnB1dCB7CiAJdTggIHZpZGVvX3R5cGU7IAkvKiB2aWRlbyBpbnB1dCB0eXBlICovCkBAIC0xMjIsNyArMTIyLDcgQEAKIAljaGFyICpjb21tZW50OwogCXUzMiB2NGwyX2NhcGFiaWxpdGllczsKIAl1MzIgaHdfYXVkaW9fY3RybDsJLyogaGFyZHdhcmUgdXNlZCBmb3IgdGhlIFY0TDIgY29udHJvbHMgKG9ubHkKLQkJCQkgICAxIGRldiBhbGxvd2VkKSAqLworCQkJCSAgIDEgZGV2IGFsbG93ZWQgY3VycmVudGx5KSAqLwogCXUzMiBod19tdXhlcjsJCS8qIGhhcmR3YXJlIHVzZWQgdG8gbXVsdGlwbGV4IGF1ZGlvIGlucHV0ICovCiAJdTMyIGh3X2FsbDsJCS8qIGFsbCBoYXJkd2FyZSB1c2VkIGJ5IHRoZSBib2FyZCAqLwogCXN0cnVjdCBjeDE4X2NhcmRfdmlkZW9faW5wdXQgdmlkZW9faW5wdXRzW0NYMThfQ0FSRF9NQVhfVklERU9fSU5QVVRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCmluZGV4IDE3ZWRmMzAuLjgyZmMyZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwpAQCAtMjIsMTQgKzIyLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LWF1ZGlvLmgiCi0jaW5jbHVkZSAiY3gxOC1pMmMuaCIKICNpbmNsdWRlICJjeDE4LW1haWxib3guaCIKICNpbmNsdWRlICJjeDE4LWNvbnRyb2xzLmgiCiAKKy8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIHN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTY2LDcgKzY1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJaWYgKGN4MThfYXZfY21kKGN4LCBWSURJT0NfUVVFUllDVFJMLCBxY3RybCkpCisJCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgcXVlcnljdHJsLCBxY3RybCkpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CiAJCXJldHVybiAwOwogCkBAIC03Niw3ICs3NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCWlmIChjeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X2F1ZGlvX2N0cmwsIFZJRElPQ19RVUVSWUNUUkwsIHFjdHJsKSkKKwkJaWYgKHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKIAkJcmV0dXJuIDA7CiAKQEAgLTEyNSw3ICsxMjQsNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBzX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTEzMyw3ICsxMzIsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfU19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCB2Y3RybCk7CiAKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKQEAgLTE1MCw3ICsxNDksNyBAQAogCWNhc2UgVjRMMl9DSURfSFVFOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NUUkwsIHZjdHJsKTsKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCBjb3JlLCBnX2N0cmwsIHZjdHJsKTsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTE1OCw3ICsxNTcsOCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfR19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCB2Y3RybCk7CisKIAlkZWZhdWx0OgogCQlDWDE4X0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjYsMzggKzE2Niw1NyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfdmJpX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCkKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF92YmlfZm10KHN0cnVjdCBjeDE4ICpjeCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IGZtdCwKKwkJCSAgICAgIGVudW0gdjRsMl9tcGVnX3N0cmVhbV90eXBlIHR5cGUpCiB7CiAJaWYgKCEoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCi0JaWYgKGZtdCAmJiBjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbMF0gPT0gTlVMTCkgeworCWlmIChmbXQgIT0gVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgfHwKKwkgICAgdHlwZSAhPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMpIHsKKwkJLyogV2UgZG9uJ3QgZG8gVkJJIGluc2VydGlvbiBhc2lkZSBmcm9tIElWVFYgZm9ybWF0IGluIGEgUFMgKi8KKwkJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FOworCQlDWDE4X0RFQlVHX0lORk8oImRpc2FibGVkIGluc2VydGlvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byAiCisJCQkJInRoZSBNUEVHIHN0cmVhbVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCisJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVswXSA9PSBOVUxMKSB7CiAJCWludCBpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykgewotCQkJLyogWXVjaywgaGFyZGNvZGVkLiBOZWVkcyB0byBiZSBhIGRlZmluZSAqLwotCQkJY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhW2ldID0ga21hbGxvYygyMDQ5LCBHRlBfS0VSTkVMKTsKKwkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9CisJCQkgICAgICAga21hbGxvYyhDWDE4X1NMSUNFRF9NUEVHX0RBVEFfQlVGU1osIEdGUF9LRVJORUwpOwogCQkJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9PSBOVUxMKSB7CiAJCQkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAJCQkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9IE5VTEw7CiAJCQkJfQorCQkJCWN4LT52YmkuaW5zZXJ0X21wZWcgPQorCQkJCQkJICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORTsKKwkJCQlDWDE4X1dBUk4oIlVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXJzIGZvciAiCisJCQkJCSAgInNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb25cbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQl9CiAJfQogCiAJY3gtPnZiaS5pbnNlcnRfbXBlZyA9IGZtdDsKKwlDWDE4X0RFQlVHX0lORk8oImVuYWJsZWQgaW5zZXJ0aW9uIG9mIHNsaWNlZCBWQkkgZGF0YSBpbnRvIHRoZSBNUEVHIFBTLCIKKwkJCSJ3aGVuIHNsaWNlZCBWQkkgaXMgZW5hYmxlZFxuIik7CiAKLQlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZyA9PSAwKQotCQlyZXR1cm4gMDsKLQkvKiBOZWVkIHNsaWNlZCBkYXRhIGZvciBtcGVnIGluc2VydGlvbiAqLworCS8qCisJICogSWYgb3VyIGN1cnJlbnQgc2V0dGluZ3MgaGF2ZSBubyBsaW5lcyBzZXQgZm9yIGNhcHR1cmUsIHN0b3JlIGEgdmFsaWQsCisJICogZGVmYXVsdCBzZXQgb2Ygc2VydmljZSBsaW5lcyB0byBjYXB0dXJlLCBpbiBvdXIgY3VycmVudCBzZXR0aW5ncy4KKwkgKi8KIAlpZiAoY3gxOF9nZXRfc2VydmljZV9zZXQoY3gtPnZiaS5zbGljZWRfaW4pID09IDApIHsKIAkJaWYgKGN4LT5pc182MGh6KQotCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPQorCQkJCQkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwogCQllbHNlCiAJCQljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldChjeC0+dmJpLnNsaWNlZF9pbiwgY3gtPmlzXzUwaHopOwpAQCAtMjU5LDEwICsyNzgsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJc3RhdGljIHUzMiBmcmVxc1szXSA9IHsgNDQxMDAsIDQ4MDAwLCAzMjAwMCB9OwogCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7CiAJCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zIHAgPSBjeC0+cGFyYW1zOwogCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZyksCiAJCQkJCQljLCBWSURJT0NfU19FWFRfQ1RSTFMpOworCQl1bnNpZ25lZCBpbnQgaWR4OwogCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjc3LDE2ICsyOTgsMjMgQEAKIAkJCWZtdC5mbXQucGl4LndpZHRoID0gY3gtPnBhcmFtcy53aWR0aAogCQkJCQkJLyAoaXNfbXBlZzEgPyAyIDogMSk7CiAJCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBjeC0+cGFyYW1zLmhlaWdodDsKLQkJCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZmbXQpOworCQkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CiAJCX0KIAkJcHJpdi5jeCA9IGN4OwogCQlwcml2LnMgPSAmY3gtPnN0cmVhbXNbaWQtPnR5cGVdOwogCQllcnIgPSBjeDIzNDF4X3VwZGF0ZSgmcHJpdiwgY3gxOF9hcGlfZnVuYywgJmN4LT5wYXJhbXMsICZwKTsKLQkJaWYgKCFlcnIgJiYgY3gtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10KQotCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10KTsKKwkJaWYgKCFlcnIgJiYKKwkJICAgIChjeC0+cGFyYW1zLnN0cmVhbV92YmlfZm10ICE9IHAuc3RyZWFtX3ZiaV9mbXQgfHwKKwkJICAgICBjeC0+cGFyYW1zLnN0cmVhbV90eXBlICE9IHAuc3RyZWFtX3R5cGUpKQorCQkJZXJyID0gY3gxOF9zZXR1cF92YmlfZm10KGN4LCBwLnN0cmVhbV92YmlfZm10LAorCQkJCQkJIHAuc3RyZWFtX3R5cGUpOwogCQljeC0+cGFyYW1zID0gcDsKIAkJY3gtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDMwMDsKLQkJY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShjeCwgcC5hdWRpb19wcm9wZXJ0aWVzICYgMHgwMyk7CisJCWlkeCA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDM7CisJCS8qIFRoZSBhdWRpbyBjbG9jayBvZiB0aGUgZGlnaXRpemVyIG11c3QgbWF0Y2ggdGhlIGNvZGVjIHNhbXBsZQorCQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCisJCWlmIChpZHggPCBzaXplb2YoZnJlcXMpKQorCQkJY3gxOF9jYWxsX2FsbChjeCwgYXVkaW8sIHNfY2xvY2tfZnJlcSwgZnJlcXNbaWR4XSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwppbmRleCBmNTBjZjIxLi4yMTBjNjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuYwpAQCAtMzksMTAgKzM5LDYgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAKLQotLyogdmFyIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBhcnJheSBlbGVtZW50cyBpbiB1c2UgKi8KLWludCBjeDE4X2NhcmRzX2FjdGl2ZTsKLQogLyogSWYgeW91IGhhdmUgYWxyZWFkeSBYIHY0bCBjYXJkcywgdGhlbiBzZXQgdGhpcyB0byBYLiBUaGlzIHdheQogICAgdGhlIGRldmljZSBudW1iZXJzIHN0YXkgbWF0Y2hlZC4gRXhhbXBsZTogeW91IGhhdmUgYSBXaW5UViBjYXJkCiAgICB3aXRob3V0IHJhZGlvIGFuZCBhIENvbXBybyBIOTAwIHdpdGguIE5vcm1hbGx5IHRoaXMgd291bGQgZ2l2ZSBhCkBAIC01MCwxMiArNDYsNiBAQAogICAgc2V0dGluZyB0aGlzIHRvIDEgeW91IGVuc3VyZSB0aGF0IHJhZGlvMCBpcyBub3cgYWxzbyByYWRpbzEuICovCiBpbnQgY3gxOF9maXJzdF9taW5vcjsKIAotLyogTWFzdGVyIHZhcmlhYmxlIGZvciBhbGwgY3gxOCBpbmZvICovCi1zdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tDWDE4X01BWF9DQVJEU107Ci0KLS8qIFByb3RlY3RzIGN4MThfY2FyZHNfYWN0aXZlICovCi1ERUZJTkVfU1BJTkxPQ0soY3gxOF9jYXJkc19sb2NrKTsKLQogLyogYWRkIHlvdXIgcmV2aXNpb24gYW5kIHdoYXRub3QgaGVyZSAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGN4MThfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJe1BDSV9WRU5ET1JfSURfQ1gsIFBDSV9ERVZJQ0VfSURfQ1gyMzQxOCwKQEAgLTY1LDYgKzU1LDggQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN4MThfcGNpX3RibCk7CiAKK3N0YXRpYyBhdG9taWNfdCBjeDE4X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKIC8qIFBhcmFtZXRlciBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgY2FyZHR5cGVbQ1gxOF9NQVhfQ0FSRFNdOwogc3RhdGljIGludCB0dW5lcltDWDE4X01BWF9DQVJEU10gPSB7IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKQEAgLTE1OSw3ICsxNTEsNyBAQAogCQkgIlx0XHRcdCA0ID0gWXVhbiBNUEM3MThcbiIKIAkJICJcdFx0XHQgNSA9IENvbmV4YW50IFJhcHRvciBQQUwvU0VDQU1cbiIKIAkJICJcdFx0XHQgNiA9IFRvc2hpYmEgUW9zbWlvIERWQi1UL0FuYWxvZ1xuIgotCQkgIlx0XHRcdCA3ID0gTGVhZHRlayBXaW5GYXN0IFBWUjIxMDBcbiIKKwkJICJcdFx0XHQgNyA9IExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwL0RWUjMxMDAgSFxuIgogCQkgIlx0XHRcdCAwID0gQXV0b2RldGVjdCAoZGVmYXVsdClcbiIKIAkJICJcdFx0XHQtMSA9IElnbm9yZSB0aGlzIGNhcmRcblx0XHQiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGFsLCAiU2V0IFBBTCBzdGFuZGFyZDogQiwgRywgSCwgRCwgSywgSSwgTSwgTiwgTmMsIDYwIik7CkBAIC0yNzcsMTEgKzI2OSwxNiBAQAogLyogSGF1cHBhdWdlIGNhcmQ/IGdldCB2YWx1ZXMgZnJvbSB0dmVlcHJvbSAqLwogdm9pZCBjeDE4X3JlYWRfZWVwcm9tKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHR2ZWVwcm9tICp0dikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjOwogCXU4IGVlZGF0YVsyNTZdOwogCi0JY3gtPmkyY19jbGllbnRbMF0uYWRkciA9IDB4QTAgPj4gMTsKLQl0dmVlcHJvbV9yZWFkKCZjeC0+aTJjX2NsaWVudFswXSwgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7Ci0JdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmY3gtPmkyY19jbGllbnRbMF0sIHR2LCBlZWRhdGEpOworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwlzdHJsY3B5KGMubmFtZSwgImN4MTggdHZlZXByb20gdG1wIiwgc2l6ZW9mKGMubmFtZSkpOworCWMuYWRhcHRlciA9ICZjeC0+aTJjX2FkYXBbMF07CisJYy5hZGRyID0gMHhBMCA+PiAxOworCisJdHZlZXByb21fcmVhZCgmYywgZWVkYXRhLCBzaXplb2YoZWVkYXRhKSk7CisJdHZlZXByb21faGF1cHBhdWdlX2FuYWxvZygmYywgdHYsIGVlZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGN4MThfcHJvY2Vzc19lZXByb20oc3RydWN0IGN4MTggKmN4KQpAQCAtNDQ4LDM0ICs0NDUsMzggQEAKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX01QR10gPSBlbmNfbXBnX2J1ZnNpemU7CiAJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9JRFhdID0gZW5jX2lkeF9idWZzaXplOwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWXSA9IGVuY195dXZfYnVmc2l6ZTsKLQljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSAwOyAvKiBjb21wdXRlZCBsYXRlciAqLworCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAqIDM2OwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfUENNXSA9IGVuY19wY21fYnVmc2l6ZTsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1JBRF0gPSAwOyAvKiBjb250cm9sIG5vIGRhdGEgKi8KIAotCS8qIEV4Y2VwdCBmb3IgVkJJIGVuc3VyZSBzdHJlYW1fYnVmZmVycyAmIHN0cmVhbV9idWZfc2l6ZSBhcmUgdmFsaWQgKi8KKwkvKiBFbnN1cmUgc3RyZWFtX2J1ZmZlcnMgJiBzdHJlYW1fYnVmX3NpemUgYXJlIHZhbGlkICovCiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewotCQkvKiBVc2VyIHNhaWQgdG8gdXNlIDAgYnVmZmVycyAqLwotCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldID09IDApIHsKLQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9IDA7Ci0JCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIFVzZXIgc2FpZCB0byB1c2UgMCBNQiB0b3RhbCAqLwotCQlpZiAoY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldIDw9IDApIHsKKwkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9PSAwIHx8ICAgICAvKiBVc2VyIHNhaWQgMCBidWZmZXJzICovCisJCSAgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPD0gMCB8fCAgLyogVXNlciBzYWlkIDAgTUIgdG90YWwgKi8KKwkJICAgIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgeyAgICAvKiBVc2VyIHNhaWQgYnVmIHNpemUgMCAqLwogCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IDA7CiAJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qIFZCSSBpcyBjb21wdXRlZCBsYXRlciBvciB1c2VyIHNhaWQgYnVmZmVyIGhhcyBzaXplIDAgKi8KLQkJaWYgKGN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPD0gMCkgewotCQkJaWYgKGkgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7Ci0JCQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldID0gMDsKLQkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSAwOwotCQkJCWN4LT5zdHJlYW1fYnVmX3NpemVbaV0gPSAwOworCQkvKgorCQkgKiBWQkkgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHN0cmVhbV9idWZfc2l6ZSBpcyBmaXhlZAorCQkgKiBhbmQgYWxyZWFkeSBpbiBieXRlcworCQkgKi8KKwkJaWYgKGkgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKSB7CisJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW2ldIDwgMCkgeworCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9CisJCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQgKiAxMDI0CisJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKKwkJCX0gZWxzZSB7CisJCQkJLyogTi5CLiBUaGlzIG1pZ2h0IHJvdW5kIGRvd24gdG8gMCAqLworCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9CisJCQkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXQorCQkJCQkqIGN4LT5zdHJlYW1fYnVmX3NpemVbaV0vKDEwMjQgKiAxMDI0KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CisJCS8qIEFsbCBvdGhlciBzdHJlYW1zIGhhdmUgc3RyZWFtX2J1Zl9zaXplIGluIGtCIGF0IHRoaXMgcG9pbnQgKi8KIAkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKIAkJCWN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9IGN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSAqIDEwMjQKIAkJCQkJCS8gY3gtPnN0cmVhbV9idWZfc2l6ZVtpXTsKQEAgLTQ4Nyw5ICs0ODgsOSBAQAogCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldICo9IDEwMjQ7IC8qIGNvbnZlcnQgZnJvbSBrQiB0byBieXRlcyAqLwogCX0KIAotCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPm51bV07Ci0JY3gtPm9wdGlvbnMudHVuZXIgPSB0dW5lcltjeC0+bnVtXTsKLQljeC0+b3B0aW9ucy5yYWRpbyA9IHJhZGlvW2N4LT5udW1dOworCWN4LT5vcHRpb25zLmNhcmR0eXBlID0gY2FyZHR5cGVbY3gtPmluc3RhbmNlXTsKKwljeC0+b3B0aW9ucy50dW5lciA9IHR1bmVyW2N4LT5pbnN0YW5jZV07CisJY3gtPm9wdGlvbnMucmFkaW8gPSByYWRpb1tjeC0+aW5zdGFuY2VdOwogCiAJY3gtPnN0ZCA9IGN4MThfcGFyc2Vfc3RkKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTUwMiw3ICs1MDMsNyBAQAogCWVsc2UgaWYgKGN4LT5vcHRpb25zLmNhcmR0eXBlICE9IDApCiAJCUNYMThfRVJSKCJVbmtub3duIHVzZXIgc3BlY2lmaWVkIHR5cGUsIHRyeWluZyB0byBhdXRvZGV0ZWN0IGNhcmRcbiIpOwogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7Ci0JCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IENYMThfUENJX0lEX0hBVVBQQVVHRSkgeworCQlpZiAoY3gtPnBjaV9kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gQ1gxOF9QQ0lfSURfSEFVUFBBVUdFKSB7CiAJCQljeC0+Y2FyZCA9IGN4MThfZ2V0X2NhcmQoQ1gxOF9DQVJEX0hWUl8xNjAwX0VTTVQpOwogCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgSGF1cHBhdWdlIGNhcmRcbiIpOwogCQl9CkBAIC01MTIsMTMgKzUxMywxMyBAQAogCQkJaWYgKGN4LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgY3gtPmNhcmQtPnBjaV9saXN0W2pdLmRldmljZTsgaisrKSB7Ci0JCQkJaWYgKGN4LT5kZXYtPmRldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+ZGV2aWNlICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CisJCQkJaWYgKGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5zdWJzeXN0ZW1fdmVuZG9yKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoY3gtPmRldi0+c3Vic3lzdGVtX2RldmljZSAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBjeC0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX2RldmljZSkKIAkJCQkJY29udGludWU7CiAJCQkJQ1gxOF9JTkZPKCJBdXRvZGV0ZWN0ZWQgJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwpAQCAtNTMxLDkgKzUzMiwxMCBAQAogCWlmIChjeC0+Y2FyZCA9PSBOVUxMKSB7CiAJCWN4LT5jYXJkID0gY3gxOF9nZXRfY2FyZChDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCk7CiAJCUNYMThfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnZlbmRvciwgY3gtPmRldi0+ZGV2aWNlKTsKKwkJCSBjeC0+cGNpX2Rldi0+dmVuZG9yLCBjeC0+cGNpX2Rldi0+ZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGN4LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IsIGN4LT5kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkJIGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJQ1gxOF9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgY3gtPmNhcmQtPm5hbWUpOwogCQlDWDE4X0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKIAkJQ1gxOF9FUlIoImNhcmQgeW91IGhhdmUgdG8gdGhlIGl2dHYtZGV2ZWwgbWFpbGluZ2xpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZylcbiIpOwpAQCAtNTQ1LDcgKzU0Nyw3IEBACiB9CiAKIC8qIFByZWNvbmRpdGlvbjogdGhlIGN4MTggc3RydWN0dXJlIGhhcyBiZWVuIG1lbXNldCB0byAwLiBPbmx5Ci0gICB0aGUgZGV2IGFuZCBudW0gZmllbGRzIGhhdmUgYmVlbiBmaWxsZWQgaW4uCisgICB0aGUgZGV2IGFuZCBpbnN0YW5jZSBmaWVsZHMgaGF2ZSBiZWVuIGZpbGxlZCBpbi4KICAgIE5vIGFzc3VtcHRpb25zIG9uIHRoZSBjYXJkIHR5cGUgbWF5IGJlIG1hZGUgaGVyZSAoc2VlIGN4MThfaW5pdF9zdHJ1Y3QyCiAgICBmb3IgdGhhdCkuCiAgKi8KQEAgLTU1MywxOCArNTU1LDE0IEBACiB7CiAJaW50IGk7CiAKLQljeC0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGN4LT5kZXYsIDApOworCWN4LT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoY3gtPnBjaV9kZXYsIDApOwogCiAJbXV0ZXhfaW5pdCgmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzBdKTsKLQltdXRleF9pbml0KCZjeC0+aTJjX2J1c19sb2NrWzFdKTsKIAltdXRleF9pbml0KCZjeC0+Z3Bpb19sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmFwdV9tYl9sb2NrKTsKIAltdXRleF9pbml0KCZjeC0+ZXB1MmNwdV9tYl9sb2NrKTsKIAotCXNwaW5fbG9ja19pbml0KCZjeC0+bG9jayk7Ci0KLQljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT5uYW1lKTsKKwljeC0+d29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGN4LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoY3gtPndvcmtfcXVldWUgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiVW5hYmxlIHRvIGNyZWF0ZSB3b3JrIGhhbmRlciB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTU4Nyw3ICs1ODUsOCBAQAogCQkoY3gtPnBhcmFtcy52aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSA8PCAxKSB8CiAJCShjeC0+cGFyYW1zLnZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZSA8PCAyKTsKIAljeC0+cGFyYW1zLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZOwotCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0gQ1gyMzQxWF9DQVBfSEFTX1RTOworCWN4LT5wYXJhbXMuY2FwYWJpbGl0aWVzID0KKwkJCQlDWDIzNDFYX0NBUF9IQVNfVFMgfCBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+Y2FwX3cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9hcHVfd2FpdHEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN4LT5tYl9jcHVfd2FpdHEpOwpAQCAtNTk3LDQ5ICs1OTYsNiBAQAogCWN4LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CiAJY3gtPnZiaS5zbGljZWRfaW4gPSAmY3gtPnZiaS5pbi5mbXQuc2xpY2VkOwogCi0JLyoKLQkgKiBUaGUgVkJJIGxpbmUgc2l6ZXMgZGVwZW5kIG9uIHRoZSBwaXhlbCBjbG9jayBhbmQgdGhlIGhvcml6IHJhdGUKLQkgKgotCSAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKLQkgKiAgICAgPSA0IGJ5dGVzIEVBViArIEFuYyBkYXRhIGluIGhibGFuayArIDQgYnl0ZXMgU0FWICsgYWN0aXZlIHNhbXBsZXMKLQkgKgotCSAqICBTbGljZWQgVkJJIGlzIHNlbnQgYXMgYW5jaWxsYXJ5IGRhdGEgZHVyaW5nIGhvcml6b250YWwgYmxhbmtpbmcKLQkgKiAgUmF3IFZCSSBpcyBzZW50IGFzIGFjdGl2ZSB2aWRlbyBzYW1wbGVzIGR1cmluZyB2ZXJ0Y2FsIGJsYW5raW5nCi0JICoKLQkgKiAgV2UgdXNlIGEgIEJULjY1NiBweGllbCBjbG9jayBvZiAxMy41IE1IeiBhbmQgYSBCVC42NTYgYWN0aXZlIGxpbmUKLQkgKiAgbGVuZ3RoIG9mIDcyMCBwaXhlbHMgQCA0OjI6MiBzYW1wbGluZy4gIFRodXMuLi4KLQkgKgotCSAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjczNCBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCi0JICogIE5UU0MtTSwgUEFMLU0sIFBBTC02MCwgYW5kIG90aGVyIDYwIEh6LzUyNSBsaW5lIHN5c3RlbXMsIHdlIGhhdmU6Ci0JICoKLQkgKiAgKDEvMTUuNzM0IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzE2IHNhbXBsZXMvbGluZSA9Ci0JICogIDQgYnl0ZXMgU0FWICsgMjY4IGJ5dGVzIGFuYyBkYXRhICsgNCBieXRlcyBTQVYgKyAxNDQwIGFjdGl2ZSBzYW1wbGVzCi0JICoKLQkgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS42MjUga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcwotCSAqICBQQUwtQi9HL0gsIFBBTC1JLCBTRUNBTS1MIGFuZCBvdGhlciA1MCBIei82MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgotCSAqCi0JICogICgxLzE1LjYyNSBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcyOCBzYW1wbGVzL2xpbmUgPQotCSAqICA0IGJ5dGVzIFNBViArIDI4MCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcwotCSAqCi0JICovCi0KLQkvKiBGSVhNRTogaW5pdCB0aGVzZSBiYXNlZCBvbiB0dW5lciBzdGQgJiBtb2RpZnkgd2hlbiBzdGQgY2hhbmdlcyAqLwotCS8qIENYMTgtQVYtQ29yZSBudW1iZXIgb2YgVkJJIHNhbXBsZXMgb3V0cHV0IHBlciBob3Jpem9udGFsIGxpbmUgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSA9IDE0NDQ7ICAgLyogNCBieXRlIFNBViArIDIgKiA3MjAgKi8KLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IDI3MjsgLyogNjAgSHo6IDI2OCs0LCA1MCBIejogMjgwKzQgKi8KLQotCS8qIENYMTgtQVYtQ29yZSBWQkkgc2FtcGxlcy9saW5lIHBvc3NpYmx5IHJvdW5kZWQgdXAgKi8KLQljeC0+dmJpLnJhd19zaXplID0gMTQ0NDsgICAvKiBSZWFsIG1heCBzaXplIGlzIDE0NDQgKi8KLQljeC0+dmJpLnNsaWNlZF9zaXplID0gMjg0OyAvKiBSZWFsIG1heCBzaXplIGlzICAyODQgKi8KLQotCS8qCi0JICogQ1gxOC1BVi1Db3JlIFNBVi9FQVYgUlAgY29kZXMgaW4gVklQIDEueCBtb2RlCi0JICogVGFzayBGaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwCi0JICovCi0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkID0gMHgyMDsgICAgIC8qICAgViAgKi8KLQljeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkID0gMHg2MDsgICAgLyogIEZWICAqLwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZCA9IDB4QjA7ICAvKiBUIFZIIC0gYWN0dWFsbHkgRUFWICovCi0JY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCA9IDB4RjA7IC8qIFRGVkggLSBhY3R1YWxseSBFQVYgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY4LDE1ICs2MjQsOSBAQAogCQlpID0gMDsKIAljeC0+YWN0aXZlX2lucHV0ID0gaTsKIAljeC0+YXVkaW9faW5wdXQgPSBjeC0+Y2FyZC0+dmlkZW9faW5wdXRzW2ldLmF1ZGlvX2luZGV4OwotCWN4LT5hdl9zdGF0ZS52aWRfaW5wdXQgPSBDWDE4X0FWX0NPTVBPU0lURTc7Ci0JY3gtPmF2X3N0YXRlLmF1ZF9pbnB1dCA9IENYMThfQVZfQVVESU84OwotCWN4LT5hdl9zdGF0ZS5hdWRjbGtfZnJlcSA9IDQ4MDAwOwotCWN4LT5hdl9zdGF0ZS5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwotCS8qIEZJWE1FIC0gOCBpcyBOVFNDIHZhbHVlLCBpbnZlc3RpZ2F0ZSAqLwotCWN4LT5hdl9zdGF0ZS52YmlfbGluZV9vZmZzZXQgPSA4OwogfQogCi1zdGF0aWMgaW50IGN4MThfc2V0dXBfcGNpKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgY3gxOF9zZXR1cF9wY2koc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNjg0LDEyNCArNjM0LDEyNSBAQAogCiAJQ1gxOF9ERUJVR19JTkZPKCJFbmFibGluZyBwY2kgZGV2aWNlXG4iKTsKIAotCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKSB7Ci0JCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPm51bSk7CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CisJCUNYMThfRVJSKCJDYW4ndCBlbmFibGUgZGV2aWNlICVkIVxuIiwgY3gtPmluc3RhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgMHhmZmZmZmZmZikpIHsKLQkJQ1gxOF9FUlIoIk5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUgb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIDB4ZmZmZmZmZmYpKSB7CisJCUNYMThfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLCBjYXJkICVkXG4iLCBjeC0+aW5zdGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY3gtPmJhc2VfYWRkciwgQ1gxOF9NRU1fU0laRSwgImN4MTggZW5jb2RlciIpKSB7Ci0JCUNYMThfRVJSKCJDYW5ub3QgcmVxdWVzdCBlbmNvZGVyIG1lbW9yeSByZWdpb24gb24gY2FyZCAlZC5cbiIsIGN4LT5udW0pOworCQlDWDE4X0VSUigiQ2Fubm90IHJlcXVlc3QgZW5jb2RlciBtZW1vcnkgcmVnaW9uLCBjYXJkICVkXG4iLAorCQkJIGN4LT5pbnN0YW5jZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIEVuYWJsZSBidXMgbWFzdGVyaW5nIGFuZCBtZW1vcnkgbWFwcGVkIElPIGZvciB0aGUgQ1gyMzQxOCAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAljbWQgfD0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQpOworCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY3gtPmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmN4LT5jYXJkX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAKIAlpZiAocGNpX2xhdGVuY3kgPCA2NCAmJiBjeDE4X3BjaV9sYXRlbmN5KSB7CiAJCUNYMThfSU5GTygiVW5yZWFzb25hYmx5IGxvdyBsYXRlbmN5IHRpbWVyLCAiCiAJCQkgICAgICAgInNldHRpbmcgdG8gNjQgKHdhcyAlZClcbiIsIHBjaV9sYXRlbmN5KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCX0KIAogCUNYMThfREVCVUdfSU5GTygiY3glZCAocmV2ICVkKSBhdCAlMDJ4OiUwMnguJXgsICIKIAkJICAgImlycTogJWQsIGxhdGVuY3k6ICVkLCBtZW1vcnk6IDB4JWx4XG4iLAotCQkgICBjeC0+ZGV2LT5kZXZpY2UsIGN4LT5jYXJkX3JldiwgZGV2LT5idXMtPm51bWJlciwKLQkJICAgUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pLAotCQkgICBjeC0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKKwkJICAgY3gtPnBjaV9kZXYtPmRldmljZSwgY3gtPmNhcmRfcmV2LCBwY2lfZGV2LT5idXMtPm51bWJlciwKKwkJICAgUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwY2lfZGV2LT5kZXZmbiksCisJCSAgIGN4LT5wY2lfZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZyljeC0+YmFzZV9hZGRyKTsKIAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgTU9EVUxFCi1zdGF0aWMgdTMyIGN4MThfcmVxdWVzdF9tb2R1bGUoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiBpZCkKLXsKLQlpZiAoKGh3ICYgaWQpID09IDApCi0JCXJldHVybiBodzsKLQlpZiAocmVxdWVzdF9tb2R1bGUobmFtZSkgIT0gMCkgewotCQlDWDE4X0VSUigiRmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzXG4iLCBuYW1lKTsKLQkJcmV0dXJuIGh3ICYgfmlkOwotCX0KLQlDWDE4X0RFQlVHX0lORk8oIkxvYWRlZCBtb2R1bGUgJXNcbiIsIG5hbWUpOwotCXJldHVybiBodzsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBjeDE4X2xvYWRfYW5kX2luaXRfbW9kdWxlcyhzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgdm9pZCBjeDE4X2luaXRfc3ViZGV2cyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJdTMyIGh3ID0gY3gtPmNhcmQtPmh3X2FsbDsKKwl1MzIgZGV2aWNlOwogCWludCBpOwogCi0jaWZkZWYgTU9EVUxFCi0JLyogbG9hZCBtb2R1bGVzICovCi0jaWZkZWYgQ09ORklHX01FRElBX1RVTkVSX01PRFVMRQotCWh3ID0gY3gxOF9yZXF1ZXN0X21vZHVsZShjeCwgaHcsICJ0dW5lciIsIENYMThfSFdfVFVORVIpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1ZJREVPX0NTNTM0NV9NT0RVTEUKLQlodyA9IGN4MThfcmVxdWVzdF9tb2R1bGUoY3gsIGh3LCAiY3M1MzQ1IiwgQ1gxOF9IV19DUzUzNDUpOwotI2VuZGlmCi0jZW5kaWYKLQotCS8qIGNoZWNrIHdoaWNoIGkyYyBkZXZpY2VzIGFyZSBhY3R1YWxseSBmb3VuZCAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCXUzMiBkZXZpY2UgPSAxIDw8IGk7CisJZm9yIChpID0gMCwgZGV2aWNlID0gMTsgaSA8IDMyOyBpKyssIGRldmljZSA8PD0gMSkgewogCiAJCWlmICghKGRldmljZSAmIGh3KSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoZGV2aWNlID09IENYMThfSFdfR1BJTyB8fCBkZXZpY2UgPT0gQ1gxOF9IV19UVkVFUFJPTSB8fAotCQkgICAgZGV2aWNlID09IENYMThfSFdfQ1gyMzQxOCB8fCBkZXZpY2UgPT0gQ1gxOF9IV19EVkIpIHsKLQkJCS8qIFRoZXNlICdkZXZpY2VzJyBkbyBub3QgdXNlIGkyYyBwcm9iaW5nICovCisKKwkJc3dpdGNoIChkZXZpY2UpIHsKKwkJY2FzZSBDWDE4X0hXX0RWQjoKKwkJY2FzZSBDWDE4X0hXX1RWRUVQUk9NOgorCQkJLyogVGhlc2Ugc3Vib3JkaW5hdGUgZGV2aWNlcyBkbyBub3QgdXNlIHByb2JpbmcgKi8KIAkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7Ci0JCQljb250aW51ZTsKKwkJCWJyZWFrOworCQljYXNlIENYMThfSFdfNDE4X0FWOgorCQkJLyogVGhlIEEvViBkZWNvZGVyIGdldHMgcHJvYmVkIGVhcmxpZXIgdG8gc2V0IFBMTHMgKi8KKwkJCS8qIEp1c3Qgbm90ZSB0aGF0IHRoZSBjYXJkIHVzZXMgaXQgKGkuZS4gaGFzIGFuYWxvZykgKi8KKwkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJCS8qCisJCQkgKiBUaGUgUmVzZXQgQ29udHJvbGxlciBnZXRzIHByb2JlZCBhbmQgYWRkZWQgdG8KKwkJCSAqIGh3X2ZsYWdzIGVhcmxpZXIgZm9yIGkyYyBhZGFwdGVyL2J1cyBpbml0aWFsaXphdGlvbgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXX0dQSU9fTVVYOgorCQkJaWYgKGN4MThfZ3Bpb19yZWdpc3RlcihjeCwgZGV2aWNlKSA9PSAwKQorCQkJCWN4LT5od19mbGFncyB8PSBkZXZpY2U7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChjeDE4X2kyY19yZWdpc3RlcihjeCwgaSkgPT0gMCkKKwkJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOworCQkJYnJlYWs7CiAJCX0KLQkJY3gxOF9pMmNfcmVnaXN0ZXIoY3gsIGkpOwotCQlpZiAoY3gxOF9pMmNfaHdfYWRkcihjeCwgZGV2aWNlKSA+IDApCi0JCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOwogCX0KIAotCWh3ID0gY3gtPmh3X2ZsYWdzOworCWlmIChjeC0+aHdfZmxhZ3MgJiBDWDE4X0hXXzQxOF9BVikKKwkJY3gtPnNkX2F2ID0gY3gxOF9maW5kX2h3KGN4LCBDWDE4X0hXXzQxOF9BVik7CisKKwlpZiAoY3gtPmNhcmQtPmh3X211eGVyICE9IDApCisJCWN4LT5zZF9leHRtdXggPSBjeDE4X2ZpbmRfaHcoY3gsIGN4LT5jYXJkLT5od19tdXhlcik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN4MThfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKLQlpbnQgdmJpX2J1Zl9zaXplOwogCXUzMiBkZXZ0eXBlOwogCXN0cnVjdCBjeDE4ICpjeDsKIAotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQotCS8qIE1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBwbGFjZSBmb3IgdGhpcyBjYXJkICovCi0JaWYgKGN4MThfY2FyZHNfYWN0aXZlID09IENYMThfTUFYX0NBUkRTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3gxODogIE1heGltdW0gbnVtYmVyIG9mIGNhcmRzIGRldGVjdGVkICglZCkuXG4iLAotCQkJICAgICAgY3gxOF9jYXJkc19hY3RpdmUpOwotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwkvKiBGSVhNRSAtIG1vZHVsZSBwYXJhbWV0ZXIgYXJyYXlzIGNvbnN0cmFpbiBtYXggaW5zdGFuY2VzICovCisJaSA9IGF0b21pY19pbmNfcmV0dXJuKCZjeDE4X2luc3RhbmNlKSAtIDE7CisJaWYgKGkgPj0gQ1gxOF9NQVhfQ0FSRFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiBjYW5ub3QgbWFuYWdlIGNhcmQgJWQsIGRyaXZlciBoYXMgYSAiCisJCSAgICAgICAibGltaXQgb2YgMCAtICVkXG4iLCBpLCBDWDE4X01BWF9DQVJEUyAtIDEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAljeCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDE4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFjeCkgewotCQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwlpZiAoY3ggPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImN4MTg6IGNhbm5vdCBtYW5hZ2UgY2FyZCAlZCwgb3V0IG9mIG1lbW9yeVxuIiwKKwkJICAgICAgIGkpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JY3gxOF9jYXJkc1tjeDE4X2NhcmRzX2FjdGl2ZV0gPSBjeDsKLQljeC0+ZGV2ID0gZGV2OwotCWN4LT5udW0gPSBjeDE4X2NhcmRzX2FjdGl2ZSsrOwotCXNucHJpbnRmKGN4LT5uYW1lLCBzaXplb2YoY3gtPm5hbWUpLCAiY3gxOC0lZCIsIGN4LT5udW0pOwotCUNYMThfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgIyVkXG4iLCBjeC0+bnVtKTsKKwljeC0+cGNpX2RldiA9IHBjaV9kZXY7CisJY3gtPmluc3RhbmNlID0gaTsKIAotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZjeC0+djRsMl9kZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiB2NGwyX2RldmljZV9yZWdpc3RlciBvZiBjYXJkICVkIGZhaWxlZCIKKwkJICAgICAgICJcbiIsIGN4LT5pbnN0YW5jZSk7CisJCWtmcmVlKGN4KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJc25wcmludGYoY3gtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjeC0+djRsMl9kZXYubmFtZSksICJjeDE4LSVkIiwKKwkJIGN4LT5pbnN0YW5jZSk7CisJQ1gxOF9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgY3gtPmluc3RhbmNlKTsKIAogCWN4MThfcHJvY2Vzc19vcHRpb25zKGN4KTsKIAlpZiAoY3gtPm9wdGlvbnMuY2FyZHR5cGUgPT0gLTEpIHsKQEAgLTgxNiwxMyArNzY3LDEwIEBACiAJQ1gxOF9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgY3gtPmJhc2VfYWRkcik7CiAKIAkvKiBQQ0kgRGV2aWNlIFNldHVwICovCi0JcmV0dmFsID0gY3gxOF9zZXR1cF9wY2koY3gsIGRldiwgcGNpX2lkKTsKKwlyZXR2YWwgPSBjeDE4X3NldHVwX3BjaShjeCwgcGNpX2RldiwgcGNpX2lkKTsKIAlpZiAocmV0dmFsICE9IDApCiAJCWdvdG8gZnJlZV93b3JrcXVldWU7CiAKLQkvKiBzYXZlIGN4IGluIHRoZSBwY2kgc3RydWN0IGZvciBsYXRlciB1c2UgKi8KLQlwY2lfc2V0X2RydmRhdGEoZGV2LCBjeCk7Ci0KIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJQ1gxOF9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCiAJCSAgIGN4LT5iYXNlX2FkZHIgKyBDWDE4X01FTV9PRkZTRVQsIENYMThfTUVNX1NJWkUpOwpAQCAtODU2LDYgKzgwNCwyMyBAQAogCiAJY3gxOF9ncGlvX2luaXQoY3gpOwogCisJLyogSW5pdGlhbGl6ZSBpbnRlZ3JhdGVkIEEvViBkZWNvZGVyIGVhcmx5IHRvIHNldCBQTExzLCBqdXN0IGluIGNhc2UgKi8KKwlyZXR2YWwgPSBjeDE4X2F2X3Byb2JlKGN4KTsKKwlpZiAocmV0dmFsKSB7CisJCUNYMThfRVJSKCJDb3VsZCBub3QgcmVnaXN0ZXIgQS9WIGRlY29kZXIgc3ViZGV2aWNlXG4iKTsKKwkJZ290byBmcmVlX21hcDsKKwl9CisJY3gxOF9jYWxsX2h3KGN4LCBDWDE4X0hXXzQxOF9BViwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX1BMTFMpOworCisJLyogSW5pdGlhbGl6ZSBHUElPIFJlc2V0IENvbnRyb2xsZXIgdG8gZG8gY2hpcCByZXNldHMgZHVyaW5nIGkyYyBpbml0ICovCisJaWYgKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgeworCQlpZiAoY3gxOF9ncGlvX3JlZ2lzdGVyKGN4LCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCkgIT0gMCkKKwkJCUNYMThfV0FSTigiQ291bGQgbm90IHJlZ2lzdGVyIEdQSU8gcmVzZXQgY29udHJvbGxlciIKKwkJCQkgICJzdWJkZXZpY2U7IHByb2NlZWRpbmcgYW55d2F5LlxuIik7CisJCWVsc2UKKwkJCWN4LT5od19mbGFncyB8PSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDsKKwl9CisKIAkvKiBhY3RpdmUgaTJjICAqLwogCUNYMThfREVCVUdfSU5GTygiYWN0aXZhdGluZyBpMmMuLi5cbiIpOwogCXJldHZhbCA9IGluaXRfY3gxOF9pMmMoY3gpOwpAQCAtODY0LDggKzgyOSw2IEBACiAJCWdvdG8gZnJlZV9tYXA7CiAJfQogCi0JQ1gxOF9ERUJVR19JTkZPKCJBY3RpdmUgY2FyZCBjb3VudDogJWQuXG4iLCBjeDE4X2NhcmRzX2FjdGl2ZSk7Ci0KIAlpZiAoY3gtPmNhcmQtPmh3X2FsbCAmIENYMThfSFdfVFZFRVBST00pIHsKIAkJLyogQmFzZWQgb24gdGhlIG1vZGVsIG51bWJlciB0aGUgY2FyZHR5cGUgbWF5IGJlIGNoYW5nZWQuCiAJCSAgIFRoZSBQQ0kgSURzIGFyZSBub3QgYWx3YXlzIHJlbGlhYmxlLiAqLwpAQCAtODgxLDggKzg0NCw5IEBACiAJY3gxOF9pbml0X3NjYihjeCk7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShjeC0+ZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCi0JCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgY3gtPm5hbWUsICh2b2lkICopY3gpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGN4LT5wY2lfZGV2LT5pcnEsIGN4MThfaXJxX2hhbmRsZXIsCisJCQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgICAgY3gtPnY0bDJfZGV2Lm5hbWUsICh2b2lkICopY3gpOwogCWlmIChyZXR2YWwpIHsKIAkJQ1gxOF9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC05MTcsMzMgKzg4MSwxNCBAQAogCSAgIGluaXRpYWxpemF0aW9uLiAqLwogCWN4MThfaW5pdF9zdHJ1Y3QyKGN4KTsKIAotCWN4MThfbG9hZF9hbmRfaW5pdF9tb2R1bGVzKGN4KTsKKwljeDE4X2luaXRfc3ViZGV2cyhjeCk7CiAKLQlpZiAoY3gtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgeworCWlmIChjeC0+c3RkICYgVjRMMl9TVERfNTI1XzYwKQogCQljeC0+aXNfNjBoeiA9IDE7Ci0JCWN4LT5pc19vdXRfNjBoeiA9IDE7Ci0JfSBlbHNlIHsKLQkJY3gtPmlzXzUwaHogPSAxOwotCQljeC0+aXNfb3V0XzUwaHogPSAxOwotCX0KLQljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwotCi0JLyoKLQkgKiBGSVhNRTogc2V0dGluZyB0aGUgYnVmZmVyIHNpemUgYmFzZWQgb24gdGhlIHR1bmVyIHN0YW5kYXJkIGlzCi0JICogc3Vib3B0aW1hbCwgYXMgdGhlIENWQlMgYW5kIFNWaWRlbyBpbnB1dHMgY291bGQgdXNlIGEgZGlmZmVyZW50IHN0ZAotCSAqIGFuZCB0aGUgYnVmZmVyIGNvdWxkIGVuZCB1cCBiZWluZyB0b28gc21hbGwgaW4gdGhhdCBjYXNlLgotCSAqLwotCXZiaV9idWZfc2l6ZSA9IGN4LT52YmkucmF3X3NpemUgKiAoY3gtPmlzXzYwaHogPyAyNCA6IDM2KSAvIDI7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0gdmJpX2J1Zl9zaXplOwotCi0JaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldIDwgMCkKLQkJY3gtPnN0cmVhbV9idWZmZXJzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSAqIDEwMjQgKiAxMDI0Ci0JCSAgIC8gdmJpX2J1Zl9zaXplOwogCWVsc2UKLQkJY3gtPm9wdGlvbnMubWVnYWJ5dGVzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPQotCQkgICAgIGN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldICogdmJpX2J1Zl9zaXplCi0JCSAgICAgLyAoMTAyNCAqIDEwMjQpOworCQljeC0+aXNfNTBoeiA9IDE7CisKKwljeC0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gY3gtPmlzXzYwaHogPyAxNSA6IDEyOwogCiAJaWYgKGN4LT5vcHRpb25zLnJhZGlvID4gMCkKIAkJY3gtPnY0bDJfY2FwIHw9IFY0TDJfQ0FQX1JBRElPOwpAQCAtOTU2LDcgKzkwMSw3IEBACiAJCXNldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOyAgLyogbWF0Y2hlcyBUViB0dW5lcnMgKi8KIAkJc2V0dXAudHVuZXJfY2FsbGJhY2sgPSAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpID8KIAkJCWN4MThfcmVzZXRfdHVuZXJfZ3BpbyA6IE5VTEw7Ci0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnNldHVwKTsKKwkJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmc2V0dXApOwogCQlpZiAoc2V0dXAudHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKIAkJCXN0YXRpYyBzdHJ1Y3QgeGMyMDI4X2N0cmwgY3RybCA9IHsKIAkJCQkuZm5hbWUgPSBYQzIwMjhfREVGQVVMVF9GSVJNV0FSRSwKQEAgLTk2Niw3ICs5MTEsNyBAQAogCQkJCS50dW5lciA9IGN4LT5vcHRpb25zLnR1bmVyLAogCQkJCS5wcml2ID0gJmN0cmwsCiAJCQl9OwotCQkJY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBUVU5FUl9TRVRfQ09ORklHLCAmY2ZnKTsKKwkJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2NvbmZpZywgJmNmZyk7CiAJCX0KIAl9CiAKQEAgLTk4NSwxNCArOTMwLDEzIEBACiAJCWdvdG8gZnJlZV9zdHJlYW1zOwogCX0KIAotCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZCAjJWQ6ICVzXG4iLCBjeC0+bnVtLCBjeC0+Y2FyZF9uYW1lKTsKLQorCUNYMThfSU5GTygiSW5pdGlhbGl6ZWQgY2FyZDogJXNcbiIsIGN4LT5jYXJkX25hbWUpOwogCXJldHVybiAwOwogCiBmcmVlX3N0cmVhbXM6CiAJY3gxOF9zdHJlYW1zX2NsZWFudXAoY3gsIDEpOwogZnJlZV9pcnE6Ci0JZnJlZV9pcnEoY3gtPmRldi0+aXJxLCAodm9pZCAqKWN4KTsKKwlmcmVlX2lycShjeC0+cGNpX2Rldi0+aXJxLCAodm9pZCAqKWN4KTsKIGZyZWVfaTJjOgogCWV4aXRfY3gxOF9pMmMoY3gpOwogZnJlZV9tYXA6CkBAIC0xMDA2LDExICs5NTAsOCBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUNYMThfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCWkgPSBjeC0+bnVtOwotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQljeDE4X2NhcmRzW2ldID0gTlVMTDsKLQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjeC0+djRsMl9kZXYpOworCWtmcmVlKGN4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMDQzLDggKzk4NCwyMSBAQAogCX0KIAlzZXRfYml0KENYMThfRl9JX0xPQURFRF9GVywgJmN4LT5pX2ZsYWdzKTsKIAotCS8qIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKLQkgKiB0cmFuc3BvcnQgcmVsYXRlZC4gKi8KKwkvKgorCSAqIEluaXQgdGhlIGZpcm13YXJlIHR3aWNlIHRvIHdvcmsgYXJvdW5kIGEgc2lsaWNvbiBidWcKKwkgKiB3aXRoIHRoZSBkaWdpdGFsIFRTLgorCSAqCisJICogVGhlIHNlY29uZCBmaXJtd2FyZSBsb2FkIHJlcXVpcmVzIHVzIHRvIG5vcm1hbGl6ZSB0aGUgQVBVIHN0YXRlLAorCSAqIG9yIHRoZSBhdWRpbyBmb3IgdGhlIGZpcnN0IGFuYWxvZyBjYXB0dXJlIHdpbGwgYmUgYmFkbHkgaW5jb3JyZWN0LgorCSAqCisJICogSSBjYW4ndCBzZWVtIHRvIGNhbGwgQVBVX1JFU0VUQUkgYW5kIGhhdmUgaXQgc3VjY2VlZCB3aXRob3V0IHRoZQorCSAqIEFQVSBjYXB0dXJpbmcgYXVkaW8sIHNvIHdlIHN0YXJ0IGFuZCBzdG9wIGl0IGhlcmUgdG8gZG8gdGhlIHJlc2V0CisJICovCisKKwkvKiBNUEVHIEVuY29kaW5nLCAyMjQga2JwcywgTVBFRyBMYXllciBJSSwgNDgga3NwcyAqLworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RBUlQsIDIsIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHfDB4YjksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfUkVTRVRBSSwgMCk7CisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9TVE9QLCAxLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFRyk7CiAKIAlmd19yZXRyeV9jb3VudCA9IDM7CiAJd2hpbGUgKC0tZndfcmV0cnlfY291bnQgPiAwKSB7CkBAIC0xMDYwLDYgKzEwMTQsMjIgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKKwkvKgorCSAqIFRoZSBzZWNvbmQgZmlybXdhcmUgbG9hZCByZXF1aXJlcyB1cyB0byBub3JtYWxpemUgdGhlIEFQVSBzdGF0ZSwKKwkgKiBvciB0aGUgYXVkaW8gZm9yIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSB3aWxsIGJlIGJhZGx5IGluY29ycmVjdC4KKwkgKgorCSAqIEkgY2FuJ3Qgc2VlbSB0byBjYWxsIEFQVV9SRVNFVEFJIGFuZCBoYXZlIGl0IHN1Y2NlZWQgd2l0aG91dCB0aGUKKwkgKiBBUFUgY2FwdHVyaW5nIGF1ZGlvLCBzbyB3ZSBzdGFydCBhbmQgc3RvcCBpdCBoZXJlIHRvIGRvIHRoZSByZXNldAorCSAqLworCisJLyogTVBFRyBFbmNvZGluZywgMjI0IGticHMsIE1QRUcgTGF5ZXIgSUksIDQ4IGtzcHMgKi8KKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1NUQVJULCAyLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFR3wweGI5LCAwKTsKKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RPUCwgMSwgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX01QRUcpOworCisJLyogSW5pdCB0aGUgQS9WIGRlY29kZXIsIGlmIGl0IGhhc24ndCBiZWVuIGFscmVhZHkgKi8KKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgaW5pdCwgKHUzMikgQ1gxOF9BVl9JTklUX05PUk1BTCk7CisKIAl2Zi50dW5lciA9IDA7CiAJdmYudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCXZmLmZyZXF1ZW5jeSA9IDY0MDA7IC8qIHRoZSB0dW5lciAnYmFzZWxpbmUnIGZyZXF1ZW5jeSAqLwpAQCAtMTA5Miw5ICsxMDYyLDExIEBACiAKIHN0YXRpYyB2b2lkIGN4MThfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDE4ICpjeCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgodjRsMl9kZXYpOworCWludCBpOwogCi0JQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkICMlZFxuIiwgY3gtPm51bSk7CisJQ1gxOF9ERUJVR19JTkZPKCJSZW1vdmluZyBDYXJkXG4iKTsKIAogCS8qIFN0b3AgYWxsIGNhcHR1cmVzICovCiAJQ1gxOF9ERUJVR19JTkZPKCJTdG9wcGluZyBhbGwgc3RyZWFtc1xuIik7CkBAIC0xMTE1LDE1ICsxMDg3LDIyIEBACiAKIAlleGl0X2N4MThfaTJjKGN4KTsKIAotCWZyZWVfaXJxKGN4LT5kZXYtPmlycSwgKHZvaWQgKiljeCk7CisJZnJlZV9pcnEoY3gtPnBjaV9kZXYtPmlycSwgKHZvaWQgKiljeCk7CiAKIAljeDE4X2lvdW5tYXAoY3gpOwogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKGN4LT5iYXNlX2FkZHIsIENYMThfTUVNX1NJWkUpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGN4LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShjeC0+cGNpX2Rldik7CiAKLQlDWDE4X0lORk8oIlJlbW92ZWQgJXMsIGNhcmQgIyVkXG4iLCBjeC0+Y2FyZF9uYW1lLCBjeC0+bnVtKTsKKwlpZiAoY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhWzBdICE9IE5VTEwpCisJCWZvciAoaSA9IDA7IGkgPCBDWDE4X1ZCSV9GUkFNRVM7IGkrKykKKwkJCWtmcmVlKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CisKKwlDWDE4X0lORk8oIlJlbW92ZWQgJXNcbiIsIGN4LT5jYXJkX25hbWUpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJa2ZyZWUoY3gpOwogfQogCiAvKiBkZWZpbmUgYSBwY2lfZHJpdmVyIGZvciBjYXJkIGRldGVjdGlvbiAqLwpAQCAtMTEzOCw4ICsxMTE3LDYgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICJjeDE4OiAgU3RhcnQgaW5pdGlhbGl6YXRpb24sIHZlcnNpb24gJXNcbiIsIENYMThfVkVSU0lPTik7CiAKLQltZW1zZXQoY3gxOF9jYXJkcywgMCwgc2l6ZW9mKGN4MThfY2FyZHMpKTsKLQogCS8qIFZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3gxOF9maXJzdF9taW5vciA8IDAgfHwgY3gxOF9maXJzdF9taW5vciA+PSBDWDE4X01BWF9DQVJEUykgewogCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBFeGl0aW5nLCBjeDE4X2ZpcnN0X21pbm9yIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZFxuIiwKQEAgLTExNjIsMTYgKzExMzksNyBAQAogCiBzdGF0aWMgdm9pZCBtb2R1bGVfY2xlYW51cCh2b2lkKQogewotCWludCBpOwotCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeDE4X3BjaV9kcml2ZXIpOwotCi0JZm9yIChpID0gMDsgaSA8IGN4MThfY2FyZHNfYWN0aXZlOyBpKyspIHsKLQkJaWYgKGN4MThfY2FyZHNbaV0gPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlrZnJlZShjeDE4X2NhcmRzW2ldKTsKLQl9Ci0KIH0KIAogbW9kdWxlX2luaXQobW9kdWxlX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKaW5kZXggMGQyZWRlYi4uZWNlNGYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvYXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCkBAIC03OSw3ICs4MCw3IEBACiAjZGVmaW5lIENYMThfQ0FSRF9ZVUFOX01QQzcxOCAJICAgICAgMwkvKiBZdWFuIE1QQzcxOCAqLwogI2RlZmluZSBDWDE4X0NBUkRfQ05YVF9SQVBUT1JfUEFMICAgICA0CS8qIENvbmV4YW50IFJhcHRvciBQQUwgKi8KICNkZWZpbmUgQ1gxOF9DQVJEX1RPU0hJQkFfUU9TTUlPX0RWQlQgNSAvKiBUb3NoaWJhIFFvc21pbyBJbnRlcmFsIERWQi1UL0FuYWxvZyovCi0jZGVmaW5lIENYMThfQ0FSRF9MRUFEVEVLX1BWUjIxMDAgICAgIDYgLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAgKi8KKyNkZWZpbmUgQ1gxOF9DQVJEX0xFQURURUtfUFZSMjEwMCAgICAgNiAvKiBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMC9EVlIzMTAwIEggKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0xBU1QgCQkgICAgICA2CiAKICNkZWZpbmUgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICAwCkBAIC0xNDMsMTIgKzE0NCwxMiBAQAogLyogRmxhZyB0byB0dXJuIG9uIGhpZ2ggdm9sdW1lIGRlYnVnZ2luZyAqLwogI2RlZmluZSBDWDE4X0RCR0ZMR19ISUdIVk9MICgxIDw8IDgpCiAKLS8qIE5PVEU6IGV4dHJhIHNwYWNlIGJlZm9yZSBjb21tYSBpbiAnY3gtPm51bSAsICMjIGFyZ3MnIGlzIHJlcXVpcmVkIGZvcgorLyogTk9URTogZXh0cmEgc3BhY2UgYmVmb3JlIGNvbW1hIGluICdmbXQgLCAjIyBhcmdzJyBpcyByZXF1aXJlZCBmb3IKICAgIGdjYy0yLjk1LCBvdGhlcndpc2UgaXQgd29uJ3QgY29tcGlsZS4gKi8KICNkZWZpbmUgQ1gxOF9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGN4MThfZGVidWcpIFwKLQkJCXByaW50ayhLRVJOX0lORk8gImN4MTgtJWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUcoQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVRyhDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNjIsNyArMTYzLDcgQEAKICNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICJjeDE4JWQgIiB0eXBlICI6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncyk7IFwKKwkJCXY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOKGZtdCwgYXJncy4uLikgIENYMThfREVCVUdfSElHSF9WT0woQ1gxOF9EQkdGTEdfV0FSTiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgQ1gxOF9ERUJVR19ISUdIX1ZPTChDWDE4X0RCR0ZMR19JTkZPLCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCkBAIC0xNzQsOSArMTc1LDU4IEBACiAjZGVmaW5lIENYMThfREVCVUdfSElfSVJRKGZtdCwgYXJncy4uLikgICBDWDE4X0RFQlVHX0hJR0hfVk9MKENYMThfREJHRkxHX0lSUSwgImlycSIsIGZtdCAsICMjIGFyZ3MpCiAKIC8qIFN0YW5kYXJkIGtlcm5lbCBtZXNzYWdlcyAqLwotI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgcHJpbnRrKEtFUk5fRVJSICAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X1dBUk4oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQotI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgcHJpbnRrKEtFUk5fSU5GTyAiY3gxOC0lZDogIiBmbXQsIGN4LT5udW0gLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0VSUihmbXQsIGFyZ3MuLi4pICAgICAgdjRsMl9lcnIoJmN4LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOKGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybigmY3gtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZjeC0+djRsMl9kZXYsIGZtdCAsICMjIGFyZ3MpCisKKy8qIE1lc3NhZ2VzIGZvciBpbnRlcm5hbCBzdWJkZXZzIHRvIHVzZSAqLworI2RlZmluZSBDWDE4X0RFQlVHX0RFVih4LCBkZXYsIHR5cGUsIGZtdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoKHgpICYgY3gxOF9kZWJ1ZykgXAorCQkJdjRsMl9pbmZvKGRldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIENYMThfREVCVUdfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfV0FSTiwgZGV2LCAid2FybmluZyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19BUEksIGRldiwgImFwaSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRE1BX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19ETUEsIGRldiwgImRtYSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSU9DVExfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfRklMRSwgZGV2LCAiZmlsZSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSTJDX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JMkMsIGRldiwgImkyYyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSVJRX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoeCwgZGV2LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKCgoeCkgJiBjeDE4X2RlYnVnKSAmJiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0hJR0hWT0wpKSBcCisJCQl2NGwyX2luZm8oZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX1dBUk4sIGRldiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSU5GTywgZGV2LCAiaW5mbyIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfQVBJX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0FQSSwgZGV2LCAiYXBpIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9ETUFfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfRE1BLCBkZXYsICJkbWEiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lPQ1RMX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0lPQ1RMLCBkZXYsICJpb2N0bCIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfRklMRV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19GSUxFLCBkZXYsICJmaWxlIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JMkNfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSTJDLCBkZXYsICJpMmMiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lSUV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19JUlEsIGRldiwgImlycSIsIGZtdCAsICMjIGFyZ3MpCisKKyNkZWZpbmUgQ1gxOF9FUlJfREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKGRldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9XQVJOX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybihkZXYsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfSU5GT19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX2luZm8oZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBWYWx1ZXMgZm9yIENYMThfQVBJX0RFQ19QTEFZQkFDS19TUEVFRCBtcGVnX2ZyYW1lX3R5cGVfbWFzayBwYXJhbWV0ZXI6ICovCiAjZGVmaW5lIE1QRUdfRlJBTUVfVFlQRV9JRlJBTUUgMQpAQCAtMjc5LDcgKzMyOSw3IEBACiBzdHJ1Y3QgY3gxOF9zdHJlYW0gewogCS8qIFRoZXNlIGZpcnN0IGZvdXIgZmllbGRzIGFyZSBhbHdheXMgc2V0LCBldmVuIGlmIHRoZSBzdHJlYW0KIAkgICBpcyBub3QgYWN0dWFsbHkgY3JlYXRlZC4gKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGwyZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCiAJc3RydWN0IGN4MTggKmN4OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtMjkyLDcgKzM0Miw2IEBACiAJaW50IGRtYTsJCS8qIGNhbiBiZSBQQ0lfRE1BX1RPREVWSUNFLAogCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSBvcgogCQkJCSAgIFBDSV9ETUFfTk9ORSAqLwotCXU2NCBkbWFfcHRzOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwogCiAJLyogQnVmZmVyIFN0YXRzICovCkBAIC0zMTgsNTkgKzM2NywxMjEgQEAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IGRlZmluZWQgaW4gY3gxOC1jYXJkcy5oICovCiBzdHJ1Y3QgY3gxOF9jYXJkOwogCisvKgorICogQSBub3RlIGFib3V0ICJzbGljZWQiIFZCSSBkYXRhIGFzIGltcGxlbWVudGVkIGluIHRoaXMgZHJpdmVyOgorICoKKyAqIEN1cnJlbnRseSB3ZSBjb2xsZWN0IHRoZSBzbGljZWQgVkJJIGluIHRoZSBmb3JtIG9mIEFuY2lsbGFyeSBEYXRhCisgKiBwYWNrZXRzLCBpbnNlcnRlZCBieSB0aGUgQVYgY29yZSBkZWNvZGVyL2RpZ2l0aXplci9zbGljZXIgaW4gdGhlCisgKiBob3Jpem9udGFsIGJsYW5raW5nIHJlZ2lvbiBvZiB0aGUgVkJJIGxpbmVzLCBpbiAicmF3IiBtb2RlIGFzIGZhciBhcworICogdGhlIEVuY29kZXIgaXMgY29uY2VybmVkLiAgV2UgZG9uJ3QgZXZlciB0ZWxsIHRoZSBFbmNvZGVyIGl0c2VsZgorICogdG8gcHJvdmlkZSBzbGljZWQgVkJJLiAoQVYgQ29yZTogc2xpY2VkIG1vZGUgLSBFbmNvZGVyOiByYXcgbW9kZSkKKyAqCisgKiBXZSB0aGVuIHByb2Nlc3MgdGhlIGFuY2lsbGFyeSBkYXRhIG91cnNlbHZlcyB0byBzZW5kIHRoZSBzbGljZWQgZGF0YQorICogdG8gdGhlIHVzZXIgYXBwbGljYXRpb24gZGlyZWN0bHkgb3IgYnVpbGQgdXAgTVBFRy0yIHByaXZhdGUgc3RyZWFtIDEKKyAqIHBhY2tldHMgdG8gc3BsaWNlIGludG8gKG9ubHkhKSBNUEVHLTIgUFMgc3RyZWFtcyBmb3IgdGhlIHVzZXIgYXBwLgorICoKKyAqIChUaGF0J3MgaG93IGl2dHYgZXNzZW50aWFsbHkgZG9lcyBpdC4pCisgKgorICogVGhlIEVuY29kZXIgc2hvdWxkIGJlIGFibGUgdG8gZXh0cmFjdCBjZXJ0YWluIHNsaWNlZCBWQkkgZGF0YSBmb3IKKyAqIHVzIGFuZCBwcm92aWRlIGl0IGluIGEgc2VwYXJhdGUgc3RyZWFtIG9yIHNwbGljZSBpdCBpbnRvIGFueSB0eXBlIG9mCisgKiBNUEVHIFBTIG9yIFRTIHN0cmVhbSwgYnV0IHRoaXMgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICovCisKKy8qCisgKiBOdW1iZXIgb2YgInJhdyIgVkJJIHNhbXBsZXMgcGVyIGhvcml6b250YWwgbGluZSB3ZSB0ZWxsIHRoZSBFbmNvZGVyIHRvCisgKiBncmFiIGZyb20gdGhlIGRlY29kZXIvZGlnaXRpemVyL3NsaWNlciBvdXRwdXQgZm9yIHJhdyBvciBzbGljZWQgVkJJLgorICogSXQgZGVwZW5kcyBvbiB0aGUgcGl4ZWwgY2xvY2sgYW5kIHRoZSBob3JpeiByYXRlOgorICoKKyAqICgxL0ZoKSooMipGcCkgPSBTYW1wbGVzL2xpbmUKKyAqICAgICA9IDQgYnl0ZXMgRUFWICsgQW5jIGRhdGEgaW4gaGJsYW5rICsgNCBieXRlcyBTQVYgKyBhY3RpdmUgc2FtcGxlcworICoKKyAqICBTbGljZWQgVkJJIGRhdGEgaXMgc2VudCBhcyBhbmNpbGxhcnkgZGF0YSBkdXJpbmcgaG9yaXpvbnRhbCBibGFua2luZworICogIFJhdyBWQkkgaXMgc2VudCBhcyBhY3RpdmUgdmlkZW8gc2FtcGxlcyBkdXJpbmcgdmVydGNhbCBibGFua2luZworICoKKyAqICBXZSB1c2UgYSAgQlQuNjU2IHB4aWVsIGNsb2NrIG9mIDEzLjUgTUh6IGFuZCBhIEJULjY1NiBhY3RpdmUgbGluZQorICogIGxlbmd0aCBvZiA3MjAgcGl4ZWxzIEAgNDoyOjIgc2FtcGxpbmcuICBUaHVzLi4uCisgKgorICogIEZvciBzeXN0ZW1zIHRoYXQgdXNlIGEgMTUuNzM0IGtIeiBob3Jpem9udGFsIHJhdGUsIHN1Y2ggYXMKKyAqICBOVFNDLU0sIFBBTC1NLCBQQUwtNjAsIGFuZCBvdGhlciA2MCBIei81MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgorICoKKyAqICAoMS8xNS43MzQga0h6KSAqIDIgKiAxMy41IE1IeiA9IDE3MTYgc2FtcGxlcy9saW5lID0KKyAqICA0IGJ5dGVzIFNBViArIDI2OCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcworICoKKyAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjYyNSBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCisgKiAgUEFMLUIvRy9ILCBQQUwtSSwgU0VDQU0tTCBhbmQgb3RoZXIgNTAgSHovNjI1IGxpbmUgc3lzdGVtcywgd2UgaGF2ZToKKyAqCisgKiAgKDEvMTUuNjI1IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzI4IHNhbXBsZXMvbGluZSA9CisgKiAgNCBieXRlcyBTQVYgKyAyODAgYnl0ZXMgYW5jIGRhdGEgKyA0IGJ5dGVzIFNBViArIDE0NDAgYWN0aXZlIHNhbXBsZXMKKyAqLworc3RhdGljIGNvbnN0IHUzMiB2YmlfYWN0aXZlX3NhbXBsZXMgPSAxNDQ0OyAvKiA0IGJ5dGUgU0FWICsgNzIwIFkgKyA3MjAgVS9WICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc182MEh6ID0gMjcyOyAvKiA0IGJ5dGUgRUFWICsgMjY4IGFuYy9maWxsICovCitzdGF0aWMgY29uc3QgdTMyIHZiaV9oYmxhbmtfc2FtcGxlc181MEh6ID0gMjg0OyAvKiA0IGJ5dGUgRUFWICsgMjgwIGFuYy9maWxsICovCiAKICNkZWZpbmUgQ1gxOF9WQklfRlJBTUVTIDMyCiAKLS8qIFZCSSBkYXRhICovCiBzdHJ1Y3QgdmJpX2luZm8gewotCXUzMiBlbmNfc2l6ZTsKLQl1MzIgZnJhbWU7Ci0JdTggY2NfZGF0YV9vZGRbMjU2XTsKLQl1OCBjY19kYXRhX2V2ZW5bMjU2XTsKLQlpbnQgY2NfcG9zOwotCXU4IGNjX25vX3VwZGF0ZTsKLQl1OCB2cHNbNV07Ci0JdTggdnBzX2ZvdW5kOwotCWludCB3c3M7Ci0JdTggd3NzX2ZvdW5kOwotCXU4IHdzc19ub191cGRhdGU7Ci0JdTMyIHJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1OCByYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkOwotCXU4IHJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkOwotCXUzMiBzbGljZWRfZGVjb2Rlcl9saW5lX3NpemU7Ci0JdTggc2xpY2VkX2RlY29kZXJfc2F2X29kZF9maWVsZDsKLQl1OCBzbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZDsKKwkvKiBDdXJyZW50IHN0YXRlIG9mIHY0bDIgVkJJIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSAqLwogCXN0cnVjdCB2NGwyX2Zvcm1hdCBpbjsKLQkvKiBjb252ZW5pZW5jZSBwb2ludGVyIHRvIHNsaWNlZCBzdHJ1Y3QgaW4gdmJpX2luIHVuaW9uICovCi0Jc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsKLQl1MzIgc2VydmljZV9zZXRfaW47CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnNsaWNlZF9pbjsgLyogcG9pbnRlciB0byBpbi5mbXQuc2xpY2VkICovCisJdTMyIGNvdW50OyAgICAvKiBDb3VudCBvZiBWQkkgZGF0YSBsaW5lczogNjAgSHo6IDEyIG9yIDUwIEh6OiAxOCAqLworCXUzMiBzdGFydFsyXTsgLyogRmlyc3QgVkJJIGRhdGEgbGluZSBwZXIgZmllbGQ6IDEwICYgMjczIG9yIDYgJiAzMTggKi8KKworCXUzMiBmcmFtZTsgLyogQ291bnQgb2YgVkJJIGJ1ZmZlcnMvZnJhbWVzIHJlY2VpdmVkIGZyb20gRW5jb2RlciAqLworCisJLyoKKwkgKiBWYXJzIGZvciBjcmVhdGlvbiBhbmQgaW5zZXJ0aW9uIG9mIE1QRUcgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzCisJICogb2Ygc2xpY2VkIFZCSSBkYXRhIGludG8gYW4gTVBFRyBQUworCSAqLworCisJLyogQm9vbGVhbjogY3JlYXRlIGFuZCBpbnNlcnQgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzIGludG8gdGhlIFBTICovCiAJaW50IGluc2VydF9tcGVnOwogCi0JLyogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgotCSAgIE9uZSBmb3IgL2Rldi92YmkwIGFuZCBvbmUgZm9yIC9kZXYvdmJpOCAqLworCS8qCisJICogQnVmZmVyIGZvciB0aGUgbWF4aW11bSBvZiAyICogMTggKiBwYWNrZXRfc2l6ZSBzbGljZWQgVkJJIGxpbmVzLgorCSAqIFVzZWQgaW4gY3gxOC12YmkuYyBvbmx5IGZvciBjb2xsZWN0aW5nIHNsaWNlZCBkYXRhLCBhbmQgYXMgYSBzb3VyY2UKKwkgKiBkdXJpbmcgY29udmVyc2lvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byBNUEVHIFByaXYgU3RyZWFtIDEgcGFja2V0cy4KKwkgKiBXZSBkb24ndCBuZWVkIHRvIHNhdmUgc3RhdGUgaGVyZSwgYnV0IHRoZSBhcnJheSBtYXkgaGF2ZSBiZWVuIGEgYml0CisJICogdG9vIGJpZyAoMjMwNCBieXRlcykgdG8gYWxsb2MgZnJvbSB0aGUgc3RhY2suCisJICovCiAJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhIHNsaWNlZF9kYXRhWzM2XTsKIAotCS8qIEJ1ZmZlciBmb3IgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIHN0cmVhbS4KLQkgICBUaGUgZmlyc3QgYnl0ZSBpcyBhIGR1bW15IGJ5dGUgdGhhdCdzIG5ldmVyIHVzZWQuCi0JICAgVGhlIG5leHQgMTYgYnl0ZXMgY29udGFpbiB0aGUgTVBFRyBoZWFkZXIgZm9yIHRoZSBWQkkgZGF0YSwKLQkgICB0aGUgcmVtYWluZGVyIGlzIHRoZSBhY3R1YWwgVkJJIGRhdGEuCi0JICAgVGhlIG1heCBzaXplIGFjY2VwdGVkIGJ5IHRoZSBNUEVHIFZCSSByZWluc2VydGlvbiB0dXJucyBvdXQKLQkgICB0byBiZSAxNTUyIGJ5dGVzLCB3aGljaCBoYXBwZW5zIHRvIGJlIDQgKyAoMSArIDQyKSAqICgyICogMTgpIGJ5dGVzLAotCSAgIHdoZXJlIDQgaXMgYSBmb3VyIGJ5dGUgaGVhZGVyLCA0MiBpcyB0aGUgbWF4IHNsaWNlZCBWQkkgcGF5bG9hZCwgMSBpcwotCSAgIGEgc2luZ2xlIGxpbmUgaGVhZGVyIGJ5dGUgYW5kIDIgKiAxOCBpcyB0aGUgbnVtYmVyIG9mIFZCSSBsaW5lcyBwZXIgZnJhbWUuCi0KLQkgICBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoZSBkYXRhIG11c3QgYmUgMUsgYWxpZ25lZCwgc28gd2UgaGF2ZSB0bwotCSAgIHBhZCB0aGUgZGF0YSB1bnRpbCB0aGUgMSBvciAyIEsgYm91bmRhcnkuCi0KLQkgICBUaGlzIHBvaW50ZXIgYXJyYXkgd2lsbCBhbGxvY2F0ZSAyMDQ5IGJ5dGVzIHRvIHN0b3JlIGVhY2ggVkJJIGZyYW1lLiAqLworCS8qCisJICogQSByaW5nIGJ1ZmZlciBvZiBkcml2ZXItZ2VuZXJhdGVkIE1QRUctMiBQUworCSAqIFByb2dyYW0gUGFjay9Qcml2YXRlIFN0cmVhbSAxIHBhY2tldHMgZm9yIHNsaWNlZCBWQkkgZGF0YSBpbnNlcnRpb24KKwkgKiBpbnRvIHRoZSBNUEVHIFBTIHN0cmVhbS4KKwkgKgorCSAqIEluIGVhY2ggc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBpczoKKwkgKiAJMTYgYnl0ZSBNUEVHLTIgUFMgUHJvZ3JhbSBQYWNrIEhlYWRlcgorCSAqIAkxNiBieXRlIE1QRUctMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBIZWFkZXIKKwkgKiAJIDQgYnl0ZSBtYWdpYyBudW1iZXI6ICJpdHYwIiBvciAiSVRWMCIKKwkgKiAJIDQgYnl0ZSBmaXJzdCAgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJIDQgYnl0ZSBzZWNvbmQgZmllbGQgbGluZSBtYXNrLCBpZiAiaXR2MCIKKwkgKiAJMzYgbGluZXMsIGlmICJJVFYwIjsgb3IgPDM2IGxpbmVzLCBpZiAiaXR2MCI7IG9mIHNsaWNlZCBWQkkgZGF0YQorCSAqCisJICogCUVhY2ggbGluZSBpbiB0aGUgcGF5bG9hZCBpcworCSAqCSAxIGJ5dGUgbGluZSBoZWFkZXIgZGVyaXZlZCBmcm9tIHRoZSBTRElEIChXU1MsIENDLCBWUFMsIGV0Yy4pCisJICoJNDIgYnl0ZXMgb2YgbGluZSBkYXRhCisJICoKKwkgKiBUaGF0J3MgYSBtYXhpbXVtIDE1NTIgYnl0ZXMgb2YgcGF5bG9hZCBpbiB0aGUgUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXQKKwkgKiB3aGljaCBpcyB0aGUgcGF5bG9hZCBzaXplIGEgUFZSLTM1MCAoQ1gyMzQxNSkgTVBFRyBkZWNvZGVyIHdpbGwKKwkgKiBhY2NlcHQgZm9yIFZCSSBkYXRhLiBTbywgaW5jbHVkaW5nIHRoZSBoZWFkZXJzLCBpdCdzIGEgbWF4aW11bSAxNTg0CisJICogYnl0ZXMgdG90YWwuCisJICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9NQVhTWgkxNTg0CisJLyogY29weV92YmlfYnVmKCkgbmVlZHMgOCB0ZW1wIGJ5dGVzIG9uIHRoZSBlbmQgZm9yIHRoZSB3b3JzdCBjYXNlICovCisjZGVmaW5lIENYMThfU0xJQ0VEX01QRUdfREFUQV9CVUZTWgkoQ1gxOF9TTElDRURfTVBFR19EQVRBX01BWFNaKzgpCiAJdTggKnNsaWNlZF9tcGVnX2RhdGFbQ1gxOF9WQklfRlJBTUVTXTsKIAl1MzIgc2xpY2VkX21wZWdfc2l6ZVtDWDE4X1ZCSV9GUkFNRVNdOwotCXN0cnVjdCBjeDE4X2J1ZmZlciBzbGljZWRfbXBlZ19idWY7CisKKwkvKiBDb3VudCBvZiBQcm9ncmFtIFBhY2svUHJvZ3JhbSBTdHJlYW0gMSBwYWNrZXRzIGluc2VydGVkIGludG8gUFMgKi8KIAl1MzIgaW5zZXJ0ZWRfZnJhbWU7CiAKLQl1MzIgc3RhcnRbMl0sIGNvdW50OwotCXUzMiByYXdfc2l6ZTsKLQl1MzIgc2xpY2VkX3NpemU7CisJLyoKKwkgKiBBIGR1bW15IGRyaXZlciBzdHJlYW0gdHJhbnNmZXIgYnVmZmVyIHdpdGggYSBjb3B5IG9mIHRoZSBuZXh0CisJICogc2xpY2VkX21wZWdfZGF0YVtdIGJ1ZmZlciBmb3Igb3V0cHV0IHRvIHVzZXJsYW5kIGFwcHMuCisJICogT25seSB1c2VkIGluIGN4MTgtZmlsZW9wcy5jLCBidXQgaXRzIHN0YXRlIG5lZWRzIHRvIHBlcnNpc3QgYXQgdGltZXMuCisJICovCisJc3RydWN0IGN4MThfYnVmZmVyIHNsaWNlZF9tcGVnX2J1ZjsKIH07CiAKIC8qIFBlciBjeDIzNDE4LCBwZXIgSTJDIGJ1cyBwcml2YXRlIGFsZ28gY2FsbGJhY2sgZGF0YSAqLwpAQCAtMzgzLDE2ICs0OTQsMTcgQEAKIAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBjeDE4IGNhcmRzICovCiBzdHJ1Y3QgY3gxOCB7Ci0JaW50IG51bTsJCS8qIGJvYXJkIG51bWJlciwgLTEgZHVyaW5nIGluaXQhICovCi0JY2hhciBuYW1lWzhdOwkJLyogYm9hcmQgbmFtZSBmb3IgcHJpbnRrIGFuZCBpbnRlcnJ1cHRzIChlLmcuICdjeDE4MCcpICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsJLyogUENJIGRldmljZSAqLworCWludCBpbnN0YW5jZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9hdjsgICAgIC8qIEEvViBkZWNvZGVyL2RpZ2l0aXplciBzdWItZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZF9leHRtdXg7IC8qIEV4dGVybmFsIG11bHRpcGxleGVyIHN1Yi1kZXYgKi8KKwogCWNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgKmNhcmQ7CS8qIGNhcmQgaW5mb3JtYXRpb24gKi8KIAljb25zdCBjaGFyICpjYXJkX25hbWU7ICAvKiBmdWxsIG5hbWUgb2YgdGhlIGNhcmQgKi8KIAljb25zdCBzdHJ1Y3QgY3gxOF9jYXJkX3R1bmVyX2kyYyAqY2FyZF9pMmM7IC8qIGkyYyBhZGRyZXNzZXMgdG8gcHJvYmUgZm9yIHR1bmVyICovCiAJdTggaXNfNTBoejsKIAl1OCBpc182MGh6OwotCXU4IGlzX291dF81MGh6OwotCXU4IGlzX291dF82MGh6OwogCXU4IG5vZl9pbnB1dHM7CQkvKiBudW1iZXIgb2YgdmlkZW8gaW5wdXRzICovCiAJdTggbm9mX2F1ZGlvX2lucHV0czsJLyogbnVtYmVyIG9mIGF1ZGlvIGlucHV0cyAqLwogCXUxNiBidWZmZXJfaWQ7CQkvKiBidWZmZXIgSUQgY291bnRlciAqLwpAQCAtNDEzLDEwICs1MjUsNyBAQAogCiAJLyogZHVhbHdhdGNoICovCiAJdW5zaWduZWQgbG9uZyBkdWFsd2F0Y2hfamlmZmllczsKLQl1MTYgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOwotCi0JLyogRGlnaXRpemVyIHR5cGUgKi8KLQlpbnQgZGlnaXRpemVyOwkJLyogMHgwMEVGID0gc2FhNzExNCAweDAwRk8gPSBzYWE3MTE1IDB4MDEwNiA9IG1pYyAqLworCXUzMiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7CiAKIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplX2xvY2s7ICAgIC8qIG11dGV4IHVzZWQgdG8gc2VyaWFsaXplIG9wZW4vY2xvc2Uvc3RhcnQvc3RvcC9pb2N0bCBvcGVyYXRpb25zICovCiAJc3RydWN0IGN4MThfb3B0aW9ucyBvcHRpb25zOyAJLyogVXNlciBvcHRpb25zICovCkBAIC00MjYsNyArNTM1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGlfZmxhZ3M7ICAvKiBnbG9iYWwgY3gxOCBmbGFncyAqLwogCWF0b21pY190IGFuYV9jYXB0dXJpbmc7CS8qIGNvdW50IG51bWJlciBvZiBhY3RpdmUgYW5hbG9nIGNhcHR1cmUgc3RyZWFtcyAqLwogCWF0b21pY190IHRvdF9jYXB0dXJpbmc7CS8qIHRvdGFsIGNvdW50IG51bWJlciBvZiBhY3RpdmUgY2FwdHVyZSBzdHJlYW1zICovCi0Jc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgLyogbG9jayBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8KIAlpbnQgc2VhcmNoX3BhY2tfaGVhZGVyOwogCiAJaW50IG9wZW5faWQ7CQkvKiBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYW4gb3BlbiBvY2N1cnMsIHVzZWQgYXMKQEAgLTQ2OCwzMCArNTc2LDMwIEBACiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwWzJdOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnb1syXTsKIAlzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhIGkyY19hbGdvX2NiX2RhdGFbMl07Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudFsyXTsKLQlzdHJ1Y3QgbXV0ZXggaTJjX2J1c19sb2NrWzJdOwotCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50c1tJMkNfQ0xJRU5UU19NQVhdOwogCiAJLyogZ3BpbyAqLwogCXUzMiBncGlvX2RpcjsKIAl1MzIgZ3Bpb192YWw7CiAJc3RydWN0IG11dGV4IGdwaW9fbG9jazsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfZ3Bpb211eDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfcmVzZXRjdHJsOwogCiAJLyogdjRsMiBhbmQgVXNlciBzZXR0aW5ncyAqLwogCiAJLyogY29kZWMgc2V0dGluZ3MgKi8KIAl1MzIgYXVkaW9faW5wdXQ7CiAJdTMyIGFjdGl2ZV9pbnB1dDsKLQl1MzIgYWN0aXZlX291dHB1dDsKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJdjRsMl9zdGRfaWQgdHVuZXJfc3RkOwkvKiBUaGUgbm9ybSBvZiB0aGUgdHVuZXIgKGZpeGVkKSAqLwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gxOCAqdG9fY3gxOChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDE4LCB2NGwyX2Rldik7Cit9CisKIC8qIEdsb2JhbHMgKi8KLWV4dGVybiBzdHJ1Y3QgY3gxOCAqY3gxOF9jYXJkc1tdOwotZXh0ZXJuIGludCBjeDE4X2NhcmRzX2FjdGl2ZTsKIGV4dGVybiBpbnQgY3gxOF9maXJzdF9taW5vcjsKLWV4dGVybiBzcGlubG9ja190IGN4MThfY2FyZHNfbG9jazsKIAogLyo9PT09PT09PT09PT09PVByb3RvdHlwZXM9PT09PT09PT09PT09PT09PT0qLwogCkBAIC01MTEsNCArNjE5LDIyIEBACiAJcmV0dXJuIGN4LT52YmkuaW4udHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogfQogCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIHdpdGggYSBncnBfaWQgYml0IG1hdGNoaW5nIHRoZQorICogbWFzayBpbiBodyAoaWYgMCwgdGhlbiBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHcoY3gsIGh3LCBvLCBmLCBhcmdzLi4uKSBcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnMoJihjeCktPnY0bDJfZGV2LCBcCisJCQkJICAgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKworI2RlZmluZSBjeDE4X2NhbGxfYWxsKGN4LCBvLCBmLCBhcmdzLi4uKSBjeDE4X2NhbGxfaHcoY3gsIDAsIG8sIGYgLCAjI2FyZ3MpCisKKy8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgd2l0aCBhIGdycF9pZCBiaXQgbWF0Y2hpbmcgdGhlCisgKiBtYXNrIGluIGh3IChpZiAwLCB0aGVuIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3IKKyAqIG90aGVyIHRoYW4gMCBvciAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiAqLworI2RlZmluZSBjeDE4X2NhbGxfaHdfZXJyKGN4LCBodywgbywgZiwgYXJncy4uLikgXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VyciggXAorCQkgICAmKGN4KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCisKKyNkZWZpbmUgY3gxOF9jYWxsX2FsbF9lcnIoY3gsIG8sIGYsIGFyZ3MuLi4pIFwKKwljeDE4X2NhbGxfaHdfZXJyKGN4LCAwLCBvLCBmICwgIyNhcmdzKQorCiAjZW5kaWYgLyogQ1gxOF9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwppbmRleCBiZDVlNmYzLi4zYjg2ZjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kdmIuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlyZXQgPSBkdmJfcmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5kdmJfYWRhcHRlciwKIAkJCUNYMThfRFJJVkVSX05BTUUsCi0JCQlUSElTX01PRFVMRSwgJmN4LT5kZXYtPmRldiwgYWRhcHRlcl9ucik7CisJCQlUSElTX01PRFVMRSwgJmN4LT5wY2lfZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwppbmRleCAwNTVmNmUwLi40ZDdkNmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCkBAIC0xMjgsMTUgKzEyOCwxNSBAQAogc3RhdGljIHZvaWQgY3gxOF9kdWFsd2F0Y2goc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCXUxNiBuZXdfYml0bWFwOwotCXUxNiBuZXdfc3RlcmVvX21vZGU7Ci0JY29uc3QgdTE2IHN0ZXJlb19tYXNrID0gMHgwMzAwOwotCWNvbnN0IHUxNiBkdWFsID0gMHgwMjAwOworCXUzMiBuZXdfYml0bWFwOworCXUzMiBuZXdfc3RlcmVvX21vZGU7CisJY29uc3QgdTMyIHN0ZXJlb19tYXNrID0gMHgwMzAwOworCWNvbnN0IHUzMiBkdWFsID0gMHgwMjAwOwogCXUzMiBoOwogCiAJbmV3X3N0ZXJlb19tb2RlID0gY3gtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgJnZ0KTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgZ190dW5lciwgJnZ0KTsKIAlpZiAodnQuYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgJiYKIAkJCSh2dC5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpKQogCQluZXdfc3RlcmVvX21vZGUgPSBkdWFsOwpAQCAtMTc2LDYgKzE3Niw4IEBACiAJKmVyciA9IDA7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CisJCQkvKiBQcm9jZXNzIHBlbmRpbmcgcHJvZ3JhbSBpbmZvIHVwZGF0ZXMgYW5kIHBlbmRpbmcKKwkJCSAgIFZCSSBkYXRhICovCiAKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGN4LT5kdWFsd2F0Y2hfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7CiAJCQkJY3gtPmR1YWx3YXRjaF9qaWZmaWVzID0gamlmZmllczsKQEAgLTE4Niw3ICsxODgsNiBAQAogCQkJCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHNfdmJpLCAmc192YmktPnFfZnVsbCkpKSB7CiAJCQkJCS8qIGJ5dGVzd2FwIGFuZCBwcm9jZXNzIFZCSSBkYXRhICovCiAJCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJCSAgICAgIHNfdmJpLT5kbWFfcHRzLAogCQkJCQkJCSAgICAgIHNfdmJpLT50eXBlKTsKIAkJCQkJY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzX3ZiaSwgYnVmKTsKIAkJCQl9CkBAIC0yMDcsOCArMjA4LDcgQEAKIAkJCQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAJCQllbHNlIHsKIAkJCQkvKiBieXRlc3dhcCBhbmQgcHJvY2VzcyBWQkkgZGF0YSAqLwotCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLAotCQkJCQkJcy0+ZG1hX3B0cywgcy0+dHlwZSk7CisJCQkJY3gxOF9wcm9jZXNzX3ZiaV9kYXRhKGN4LCBidWYsIHMtPnR5cGUpOwogCQkJfQogCQkJcmV0dXJuIGJ1ZjsKIAkJfQpAQCAtMjYwLDYgKzI2MCwyMCBAQAogCQlsZW4gPSB1Y291bnQ7CiAJaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcgJiYgcy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcgJiYKIAkgICAgIWN4MThfcmF3X3ZiaShjeCkgJiYgYnVmICE9ICZjeC0+dmJpLnNsaWNlZF9tcGVnX2J1ZikgeworCQkvKgorCQkgKiBUcnkgdG8gZmluZCBhIGdvb2Qgc3BsaWNlIHBvaW50IGluIHRoZSBQUywganVzdCBiZWZvcmUKKwkJICogYW4gTVBFRy0yIFByb2dyYW0gUGFjayBzdGFydCBjb2RlLCBhbmQgcHJvdmlkZSBvbmx5CisJCSAqIHVwIHRvIHRoYXQgcG9pbnQgdG8gdGhlIHVzZXIsIHNvIGl0J3MgZWFzeSB0byBpbnNlcnQgVkJJIGRhdGEKKwkJICogdGhlIG5leHQgdGltZSBhcm91bmQuCisJCSAqLworCQkvKiBGSVhNRSAtIFRoaXMgb25seSB3b3JrcyBmb3IgYW4gTVBFRy0yIFBTLCBub3QgYSBUUyAqLworCQkvKgorCQkgKiBBbiBNUEVHLTIgUHJvZ3JhbSBTdHJlYW0gKFBTKSBpcyBhIHNlcmllcyBvZgorCQkgKiBNUEVHLTIgUHJvZ3JhbSBQYWNrcyB0ZXJtaW5hdGVkIGJ5IGFuCisJCSAqIE1QRUcgUHJvZ3JhbSBFbmQgQ29kZSBhZnRlciB0aGUgbGFzdCBQcm9ncmFtIFBhY2suCisJCSAqIEEgUHJvZ3JhbSBQYWNrIG1heSBob2xkIGEgUFMgU3lzdGVtIEhlYWRlciBwYWNrZXQgYW5kIGFueQorCQkgKiBudW1iZXIgb2YgUHJvZ3JhbSBFbGVtZW50YXJ5IFN0cmVhbSAoUEVTKSBQYWNrZXRzCisJCSAqLwogCQljb25zdCBjaGFyICpzdGFydCA9IGJ1Zi0+YnVmICsgYnVmLT5yZWFkcG9zOwogCQljb25zdCBjaGFyICpwID0gc3RhcnQgKyAxOwogCQljb25zdCB1OCAqcTsKQEAgLTI2NywzOCArMjgxLDU0IEBACiAJCWludCBzdHVmZmluZywgaTsKIAogCQl3aGlsZSAoc3RhcnQgKyBsZW4gPiBwKSB7CisJCQkvKiBTY2FuIGZvciBhIDAgdG8gZmluZCBhIHBvdGVudGlhbCBNUEVHLTIgc3RhcnQgY29kZSAqLwogCQkJcSA9IG1lbWNocihwLCAwLCBzdGFydCArIGxlbiAtIHApOwogCQkJaWYgKHEgPT0gTlVMTCkKIAkJCQlicmVhazsKIAkJCXAgPSBxICsgMTsKKwkJCS8qCisJCQkgKiBLZWVwIGxvb2tpbmcgaWYgbm90IGEKKwkJCSAqIE1QRUctMiBQYWNrIGhlYWRlciBzdGFydCBjb2RlOiAgMHgwMCAweDAwIDB4MDEgMHhiYQorCQkJICogb3IgTVBFRy0yIHZpZGVvIFBFUyBzdGFydCBjb2RlOiAweDAwIDB4MDAgMHgwMSAweGUwCisJCQkgKi8KIAkJCWlmICgoY2hhciAqKXEgKyAxNSA+PSBidWYtPmJ1ZiArIGJ1Zi0+Ynl0ZXN1c2VkIHx8CiAJCQkgICAgcVsxXSAhPSAwIHx8IHFbMl0gIT0gMSB8fCBxWzNdICE9IGNoKQogCQkJCWNvbnRpbnVlOworCisJCQkvKiBJZiBleHBlY3RpbmcgdGhlIHByaW1hcnkgdmlkZW8gUEVTICovCiAJCQlpZiAoIWN4LT5zZWFyY2hfcGFja19oZWFkZXIpIHsKKwkJCQkvKiBDb250aW51ZSBpZiBpdCBjb3VsZG4ndCBiZSBhIFBFUyBwYWNrZXQgKi8KIAkJCQlpZiAoKHFbNl0gJiAweGMwKSAhPSAweDgwKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoKChxWzddICYgMHhjMCkgPT0gMHg4MCAmJgotCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDIwKSB8fAotCQkJCSAgICAoKHFbN10gJiAweGMwKSA9PSAweGMwICYmCi0JCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MzApKSB7Ci0JCQkJCWNoID0gMHhiYTsKKwkJCQkvKiBDaGVjayBpZiBhIFBUUyBvciBQVFMgJiBEVFMgZm9sbG93ICovCisJCQkJaWYgKCgocVs3XSAmIDB4YzApID09IDB4ODAgJiYgIC8qIFBUUyBvbmx5ICovCisJCQkJICAgICAocVs5XSAmIDB4ZjApID09IDB4MjApIHx8IC8qIFBUUyBvbmx5ICovCisJCQkJICAgICgocVs3XSAmIDB4YzApID09IDB4YzAgJiYgIC8qIFBUUyAmIERUUyAqLworCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDMwKSkgeyAvKiBEVFMgZm9sbG93cyAqLworCQkJCQkvKiBBc3N1bWUgd2UgZm91bmQgdGhlIHZpZGVvIFBFUyBoZHIgKi8KKwkJCQkJY2ggPSAweGJhOyAvKiBuZXh0IHdhbnQgYSBQcm9ncmFtIFBhY2sqLwogCQkJCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMTsKLQkJCQkJcCA9IHEgKyA5OworCQkJCQlwID0gcSArIDk7IC8qIFNraXAgdGhpcyB2aWRlbyBQRVMgaGRyICovCiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQkvKiBXZSBtYXkgaGF2ZSBmb3VuZCBhIFByb2dyYW0gUGFjayBzdGFydCBjb2RlICovCisKKwkJCS8qIEdldCB0aGUgY291bnQgb2Ygc3R1ZmZpbmcgYnl0ZXMgJiB2ZXJpZnkgdGhlbSAqLwogCQkJc3R1ZmZpbmcgPSBxWzEzXSAmIDc7CiAJCQkvKiBhbGwgc3R1ZmZpbmcgYnl0ZXMgbXVzdCBiZSAweGZmICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmZpbmc7IGkrKykKIAkJCQlpZiAocVsxNCArIGldICE9IDB4ZmYpCiAJCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gc3R1ZmZpbmcgJiYKLQkJCSAgICAocVs0XSAmIDB4YzQpID09IDB4NDQgJiYKLQkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmCi0JCQkgICAgcVsxNCArIHN0dWZmaW5nXSA9PSAwICYmCisJCQlpZiAoaSA9PSBzdHVmZmluZyAmJiAvKiByaWdodCBudW1iZXIgb2Ygc3R1ZmZpbmcgYnl0ZXMqLworCQkJICAgIChxWzRdICYgMHhjNCkgPT0gMHg0NCAmJiAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICAocVsxMl0gJiAzKSA9PSAzICYmICAvKiBtYXJrZXIgY2hlY2sgKi8KKwkJCSAgICBxWzE0ICsgc3R1ZmZpbmddID09IDAgJiYgLyogUEVTIFBhY2sgb3IgU3lzIEhkciAqLwogCQkJICAgIHFbMTUgKyBzdHVmZmluZ10gPT0gMCAmJgogCQkJICAgIHFbMTYgKyBzdHVmZmluZ10gPT0gMSkgewotCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOworCQkJCS8qIFdlIGRlY2xhcmUgd2UgYWN0dWFsbHkgZm91bmQgYSBQcm9ncmFtIFBhY2sqLworCQkJCWN4LT5zZWFyY2hfcGFja19oZWFkZXIgPSAwOyAvKiBleHBlY3QgdmlkIFBFUyAqLwogCQkJCWxlbiA9IChjaGFyICopcSAtIHN0YXJ0OwogCQkJCWN4MThfc2V0dXBfc2xpY2VkX3ZiaV9idWYoY3gpOwogCQkJCWJyZWFrOwpAQCAtNTc4LDcgKzYwOCw3IEBACiAJCS8qIE1hcmsgdGhhdCB0aGUgcmFkaW8gaXMgbm8gbG9uZ2VyIGluIHVzZSAqLwogCQljbGVhcl9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIFRWICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfU1RELCAmY3gtPnN0ZCk7CisJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3N0ZCwgY3gtPnN0ZCk7CiAJCS8qIFNlbGVjdCBjb3JyZWN0IGF1ZGlvIGlucHV0IChpLmUuIFRWIHR1bmVyIG9yIExpbmUgaW4pICovCiAJCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKIAkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKSB7CkBAIC02NDEsNyArNjcxLDcgQEAKIAkJLyogV2UgaGF2ZSB0aGUgcmFkaW8gKi8KIAkJY3gxOF9tdXRlKGN4KTsKIAkJLyogU3dpdGNoIHR1bmVyIHRvIHJhZGlvICovCi0JCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgQVVEQ19TRVRfUkFESU8sIE5VTEwpOworCQljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19yYWRpbyk7CiAJCS8qIFNlbGVjdCB0aGUgY29ycmVjdCBhdWRpbyBpbnB1dCAoaS5lLiByYWRpbyB0dW5lcikgKi8KIAkJY3gxOF9hdWRpb19zZXRfaW8oY3gpOwogCQkvKiBEb25lISBVbm11dGUgYW5kIGNvbnRpbnVlLiAqLwpAQCAtNjUyLDM4ICs2ODIsMTUgQEAKIAogaW50IGN4MThfdjRsMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCByZXMsIHgsIHkgPSAwOwotCXN0cnVjdCBjeDE4ICpjeCA9IE5VTEw7Ci0Jc3RydWN0IGN4MThfc3RyZWFtICpzID0gTlVMTDsKLQlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKLQotCS8qIEZpbmQgd2hpY2ggY2FyZCB0aGlzIG9wZW4gd2FzIG9uICovCi0Jc3Bpbl9sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCWZvciAoeCA9IDA7IGN4ID09IE5VTEwgJiYgeCA8IGN4MThfY2FyZHNfYWN0aXZlOyB4KyspIHsKLQkJLyogZmluZCBvdXQgd2hpY2ggc3RyZWFtIHRoaXMgb3BlbiB3YXMgb24gKi8KLQkJZm9yICh5ID0gMDsgeSA8IENYMThfTUFYX1NUUkVBTVM7IHkrKykgewotCQkJaWYgKGN4MThfY2FyZHNbeF0gPT0gTlVMTCkKLQkJCQljb250aW51ZTsKLQkJCXMgPSAmY3gxOF9jYXJkc1t4XS0+c3RyZWFtc1t5XTsKLQkJCWlmIChzLT52NGwyZGV2ICYmIHMtPnY0bDJkZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQkJY3ggPSBjeDE4X2NhcmRzW3hdOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZjeDE4X2NhcmRzX2xvY2spOwotCi0JaWYgKGN4ID09IE5VTEwpIHsKLQkJLyogQ291bGRuJ3QgZmluZCBhIGRldmljZSByZWdpc3RlcmVkCi0JCSAgIG9uIHRoYXQgbWlub3IsIHNob3VsZG4ndCBoYXBwZW4hICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIGN4MTggZGV2aWNlIGZvdW5kIG9uIG1pbm9yICVkXG4iLAotCQkJCW1pbm9yKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CisJaW50IHJlczsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2Rldik7CisJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7OwogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoY3gxOF9pbml0X29uX2ZpcnN0X29wZW4oY3gpKSB7Ci0JCUNYMThfRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBvbiBtaW5vciAlZFxuIiwgbWlub3IpOworCQlDWDE4X0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCisJCQkgdmlkZW9fZGV2LT5taW5vcik7CiAJCW11dGV4X3VubG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYwppbmRleCAxZmE5NWRhLi44M2NkNTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlycS5oIgogI2luY2x1ZGUgImN4MTgtZmlybXdhcmUuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2RlZmluZSBDWDE4X1BST0NfU09GVF9SRVNFVCAJCTB4YzcwMDEwCkBAIC0xMDcsNyArMTA2LDcgQEAKIAl1MzIgX19pb21lbSAqZHN0ID0gKHUzMiBfX2lvbWVtICopbWVtOwogCWNvbnN0IHUzMiAqc3JjOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJmN4LT5kZXYtPmRldikpIHsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPnBjaV9kZXYtPmRldikpIHsKIAkJQ1gxOF9FUlIoIlVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmbik7CiAJCUNYMThfRVJSKCJEaWQgeW91IHB1dCB0aGUgZmlybXdhcmUgaW4gdGhlIGhvdHBsdWcgZmlybXdhcmUgZGlyZWN0b3J5P1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTUxLDcgKzE1MCw3IEBACiAJdTMyIGFwdV92ZXJzaW9uID0gMDsKIAlpbnQgc3o7CiAKLQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPmRldi0+ZGV2KSkgeworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZjeC0+cGNpX2Rldi0+ZGV2KSkgewogCQlDWDE4X0VSUigidW5hYmxlIHRvIG9wZW4gZmlybXdhcmUgJXNcbiIsIGZuKTsKIAkJQ1gxOF9FUlIoImRpZCB5b3UgcHV0IHRoZSBmaXJtd2FyZSBpbiB0aGUgaG90cGx1ZyBmaXJtd2FyZSBkaXJlY3Rvcnk/XG4iKTsKIAkJY3gxOF9zZXR1cF9wYWdlKGN4LCAwKTsKQEAgLTI4NiwyMyArMjg1LDYgQEAKIAljeDE4X3dyaXRlX3JlZyhjeCwgMHgyQkUyRkUsIENYMThfTVBFR19DTE9DS19QTExfRlJBQyk7CiAJY3gxOF93cml0ZV9yZWcoY3gsIDgsIENYMThfTVBFR19DTE9DS19QTExfUE9TVCk7CiAKLQkvKgotCSAqIFZEQ0xLICBJbnRlZ2VyID0gMHgwZiwgUG9zdCBEaXZpZGVyID0gMHgwNAotCSAqIEFJTUNMSyBJbnRlZ2VyID0gMHgwZSwgUG9zdCBEaXZpZGVyID0gMHgxNgotCSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUExMX0NUUkwxLCAweDE2MGUwNDBmKTsKLQotCS8qIFZEQ0xLIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KLQkvKiB4dGFsICogMHhmLjE1ZjE3ZjAvNCA9IDEwOCBNSHo6IDQzMiBNSHogYmVmb3JlIHBvc3QgZGl2aWRlICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19WSURfUExMX0ZSQUMsIDB4MDAyYmUyZmUpOwotCi0JLyogQUlNQ0xLIEZyYWN0aW9uID0gMHgwNTIyN2FkICovCi0JLyogeHRhbCAqIDB4ZS4yOTEzZDY4LzB4MTYgPSA0ODAwMCAqIDM4NDogNDA2IE1IeiBiZWZvcmUgcG9zdC1kaXZpZGUgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0FVWF9QTExfRlJBQywgMHgwMDUyMjdhZCk7Ci0KLQkvKiBTQV9NQ0xLX1NFTD0xLCBTQV9NQ0xLX0RJVj0weDE2ICovCi0JY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX0kyU19NQ0xLLCAweDU2KTsKLQogCS8qIERlZmF1bHRzICovCiAJLyogQVBVID0gU0Mgb3IgU0MvMiA9IDEyNS82Mi41ICovCiAJLyogRVBVID0gU0MgPSAxMjUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwppbmRleCAxYTk5MzI5Li41NTE4ZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCkBAIC00Niw2ICs0Niw5IEBACiAgKiBncGlvMTM6IGNzNTM0NSByZXNldCBwaW4KICovCiAKKy8qCisgKiBGaWxlIHNjb3BlIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KIHN0YXRpYyB2b2lkIGdwaW9fd3JpdGUoc3RydWN0IGN4MTggKmN4KQogewogCXUzMiBkaXJfbG8gPSBjeC0+Z3Bpb19kaXIgJiAweGZmZmY7CkBAIC02Myw3MyArNjYsMjAxIEBACiAJCQkJCUNYMThfUkVHX0dQSU9fT1VUMiwgdmFsX2hpLCBkaXJfaGkpOwogfQogCi12b2lkIGN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKHN0cnVjdCBjeDE4ICpjeCkKK3N0YXRpYyB2b2lkIGdwaW9fdXBkYXRlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIG1hc2ssIHUzMiBkYXRhKQogewotCWNvbnN0IHN0cnVjdCBjeDE4X2dwaW9faTJjX3NsYXZlX3Jlc2V0ICpwOwotCi0JcCA9ICZjeC0+Y2FyZC0+Z3Bpb19pMmNfc2xhdmVfcmVzZXQ7Ci0KLQlpZiAoKHAtPmFjdGl2ZV9sb19tYXNrIHwgcC0+YWN0aXZlX2hpX21hc2spID09IDApCisJaWYgKG1hc2sgPT0gMCkKIAkJcmV0dXJuOwogCi0JLyogQXNzdW1pbmcgdGhhdCB0aGUgbWFza3MgYXJlIGEgc3Vic2V0IG9mIHRoZSBiaXRzIGluIGdwaW9fZGlyICovCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CisJY3gtPmdwaW9fdmFsID0gKGN4LT5ncGlvX3ZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJZ3Bpb193cml0ZShjeCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZ3Bpb19yZXNldF9zZXEoc3RydWN0IGN4MTggKmN4LCB1MzIgYWN0aXZlX2xvLCB1MzIgYWN0aXZlX2hpLAorCQkJICAgdW5zaWduZWQgaW50IGFzc2VydF9tc2VjcywKKwkJCSAgIHVuc2lnbmVkIGludCByZWNvdmVyeV9tc2VjcykKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSBhY3RpdmVfbG8gfCBhY3RpdmVfaGk7CisJaWYgKG1hc2sgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBc3N1bWluZyB0aGF0IGFjdGl2ZV9oaSBhbmQgYWN0aXZlX2xvIGFyZSBhIHN1YnNldHMgb2YgdGhlIGJpdHMgaW4KKwkgKiBncGlvX2Rpci4gIEFsc28gYXNzdW1lcyB0aGF0IGFjdGl2ZV9sbyBhbmQgYWN0aXZlX2hpIGRvbid0IG92ZXJsYXAKKwkgKiBpbiBhbnkgYml0IHBvc2l0aW9uCisJICovCiAKIAkvKiBBc3NlcnQgKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2hpX21hc2spICYgfihwLT5hY3RpdmVfbG9fbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19hc3NlcnRlZCkpOworCWdwaW9fdXBkYXRlKGN4LCBtYXNrLCB+YWN0aXZlX2xvKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKGFzc2VydF9tc2VjcykpOwogCiAJLyogRGVhc3NlcnQgKi8KLQljeC0+Z3Bpb192YWwgPQotCQkoY3gtPmdwaW9fdmFsIHwgcC0+YWN0aXZlX2xvX21hc2spICYgfihwLT5hY3RpdmVfaGlfbWFzayk7Ci0JZ3Bpb193cml0ZShjeCk7Ci0Jc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhwLT5tc2Vjc19yZWNvdmVyeSkpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJZ3Bpb191cGRhdGUoY3gsIG1hc2ssIH5hY3RpdmVfaGkpOworCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocmVjb3ZlcnlfbXNlY3MpKTsKIH0KIAotdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSkKKy8qCisgKiBHUElPIE11bHRpcGxleGVyIC0gbG9naWNhbCBkZXZpY2UKKyAqLworc3RhdGljIGludCBncGlvbXV4X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKilkYXRhKS0+Y3g7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiR1BJTzogIGRpcmVjdGlvbiAweCUwOHgsIHZhbHVlIDB4JTA4eFxuIiwKKwkJICAgICAgY3gtPmdwaW9fZGlyLCBjeC0+Z3Bpb192YWwpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Bpb211eF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwkvKgorCSAqIEZJWE1FIC0gd29yayBvdXQgdGhlIGN4LT5hY3RpdmUvYXVkaW9faW5wdXQgbWVzcyAtIHRoaXMgaXMKKwkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCB0byByYWRpbyBtb2RlIGFuZCBzZXQgdGhlCisJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCSAqLworCWdwaW9fdXBkYXRlKGN4LCBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrLAorCQkJY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgbm9ybSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1MzIgZGF0YTsKKworCXN3aXRjaCAoY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdLm11eGVyX2lucHV0KSB7CisJY2FzZSAxOgorCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOworCQlicmVhazsKKwljYXNlIDA6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogRklYTUUgLSB3b3JrIG91dCB0aGUgY3gtPmFjdGl2ZS9hdWRpb19pbnB1dCBtZXNzIC0gdGhpcyBpcworCQkgKiBpbnRlbmRlZCB0byBoYW5kbGUgdGhlIHN3aXRjaCBmcm9tIHJhZGlvIG1vZGUgYW5kIHNldCB0aGUKKwkJICogYXVkaW8gcm91dGluZywgYnV0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiBjeAorCQkgKi8KKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTMyIGRhdGE7CisKKwlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgeworCWNhc2UgMDoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnR1bmVyOworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5saW5laW47CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZ3Bpb191cGRhdGUoY3gsIGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2ssIGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGdwaW9tdXhfY29yZV9vcHMgPSB7CisJLmxvZ19zdGF0dXMgPSBncGlvbXV4X2xvZ19zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBncGlvbXV4X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBncGlvbXV4X3Nfc3RkLAorCS5zX3JhZGlvID0gZ3Bpb211eF9zX3JhZGlvLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgZ3Bpb211eF9hdWRpb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGdwaW9tdXhfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgZ3Bpb211eF9vcHMgPSB7CisJLmNvcmUgPSAmZ3Bpb211eF9jb3JlX29wcywKKwkudHVuZXIgPSAmZ3Bpb211eF90dW5lcl9vcHMsCisJLmF1ZGlvID0gJmdwaW9tdXhfYXVkaW9fb3BzLAorfTsKKworLyoKKyAqIEdQSU8gUmVzZXQgQ29udHJvbGxlciAtIGxvZ2ljYWwgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcmVzZXRjdHJsX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCUNYMThfSU5GT19ERVYoc2QsICJHUElPOiAgZGlyZWN0aW9uIDB4JTA4eCwgdmFsdWUgMHglMDh4XG4iLAorCQkgICAgICBjeC0+Z3Bpb19kaXIsIGN4LT5ncGlvX3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNldGN0cmxfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljb25zdCBzdHJ1Y3QgY3gxOF9ncGlvX2kyY19zbGF2ZV9yZXNldCAqcDsKIAogCXAgPSAmY3gtPmNhcmQtPmdwaW9faTJjX3NsYXZlX3Jlc2V0OwotCi0JaWYgKHAtPmlyX3Jlc2V0X21hc2sgPT0gMCkKLQkJcmV0dXJuOwotCi0JQ1gxOF9ERUJVR19JTkZPKCJSZXNldHRpbmcgSVIgbWljcm9jb250cm9sbGVyXG4iKTsKLQotCS8qCi0JICAgQXNzZXJ0IHRpbWluZyBmb3IgdGhlIFo4RjA4MTEgb24gSFZSLTE2MDAgYm9hcmRzOgotCSAgIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8gaW5pdGlhdGUKLQkgICAyLiBSZXNldCB0aGVuIHRha2VzIDY2IFdEVCBjeWNsZXMgYXQgMTAga0h6ICsgMTYgeHRhbCBjbG9jayBjeWNsZXMKLQkJKDYsNjAxLDA4NSBuYW5vc2Vjb25kcyB+PSA3IG1pbGxpc2Vjb25kcykKLQkgICAzLiBEQkcgcGluIG11c3QgYmUgaGlnaCBiZWZvcmUgY2hpcCBleGl0cyByZXNldCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KLQkJREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaCBzaW5jZSB3ZSBkb24ndAotCQlub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZSBIVlItMTYwMAotCSAgIDQuIFo4RjA4MTEgd29uJ3QgZXhpdCByZXNldCB1bnRpbCBSRVNFVCBpcyBkZWFzc2VydGVkCi0JKi8KLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgPSBjeC0+Z3Bpb192YWwgJiB+cC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfYXNzZXJ0ZWQpKTsKLQotCS8qCi0JICAgWmlsb2cgY29tZXMgb3V0IG9mIHJlc2V0LCBsb2FkcyByZXNldCB2ZWN0b3IgYWRkcmVzcyBhbmQgZXhlY3V0ZXMKLQkgICBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgotCSovCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsID0gY3gtPmdwaW9fdmFsIHwgcC0+aXJfcmVzZXRfbWFzazsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfcmVjb3ZlcnkpKTsKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgQ1gxOF9HUElPX1JFU0VUX0kyQzoKKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmFjdGl2ZV9sb19tYXNrLCBwLT5hY3RpdmVfaGlfbWFzaywKKwkJCSAgICAgICBwLT5tc2Vjc19hc3NlcnRlZCwgcC0+bXNlY3NfcmVjb3ZlcnkpOworCQlicmVhazsKKwljYXNlIENYMThfR1BJT19SRVNFVF9aOEYwODExOgorCQkvKgorCQkgKiBBc3NlcnQgdGltaW5nIGZvciB0aGUgWjhGMDgxMSBvbiBIVlItMTYwMCBib2FyZHM6CisJCSAqIDEuIEFzc2VydCBSRVNFVCBmb3IgbWluIG9mIDQgY2xvY2sgY3ljbGVzIGF0IDE4LjQzMiBNSHogdG8KKwkJICogICAgaW5pdGlhdGUKKwkJICogMi4gUmVzZXQgdGhlbiB0YWtlcyA2NiBXRFQgY3ljbGVzIGF0IDEwIGtIeiArIDE2IHh0YWwgY2xvY2sKKwkJICogICAgY3ljbGVzICg2LDYwMSwwODUgbmFub3NlY29uZHMgfj0gNyBtaWxsaXNlY29uZHMpCisJCSAqIDMuIERCRyBwaW4gbXVzdCBiZSBoaWdoIGJlZm9yZSBjaGlwIGV4aXRzIHJlc2V0IGZvciBub3JtYWwKKwkJICogICAgb3BlcmF0aW9uLiAgREJHIGlzIG9wZW4gZHJhaW4gYW5kIGhvcGVmdWxseSBwdWxsZWQgaGlnaAorCQkgKiAgICBzaW5jZSB3ZSBkb24ndCBub3JtYWxseSBkcml2ZSBpdCAoR1BJTyAxPykgZm9yIHRoZQorCQkgKiAgICBIVlItMTYwMAorCQkgKiA0LiBaOEYwODExIHdvbid0IGV4aXQgcmVzZXQgdW50aWwgUkVTRVQgaXMgZGVhc3NlcnRlZAorCQkgKiA1LiBaaWxvZyBjb21lcyBvdXQgb2YgcmVzZXQsIGxvYWRzIHJlc2V0IHZlY3RvciBhZGRyZXNzIGFuZAorCQkgKiAgICBleGVjdXRlcyBmcm9tIHRoZXJlLiBSZXF1aXJlZCByZWNvdmVyeSBkZWxheSB1bmtub3duLgorCQkgKi8KKwkJZ3Bpb19yZXNldF9zZXEoY3gsIHAtPmlyX3Jlc2V0X21hc2ssIDAsCisJCQkgICAgICAgcC0+bXNlY3NfYXNzZXJ0ZWQsIHAtPm1zZWNzX3JlY292ZXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0dQSU9fUkVTRVRfWEMyMDI4OgorCQlpZiAoY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciA9PSBUVU5FUl9YQzIwMjgpCisJCQlncGlvX3Jlc2V0X3NlcShjeCwgKDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pLCAwLAorCQkJCSAgICAgICAxLCAxKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChjeDE4X3Jlc2V0X2lyX2dwaW8pOwotLyogVGhpcyBzeW1ib2wgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBhbiBpbmZyYXJlZCBtb2R1bGUgZm9yIHRoZSBJUi1ibGFzdGVyICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgcmVzZXRjdHJsX2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gcmVzZXRjdHJsX2xvZ19zdGF0dXMsCisJLnJlc2V0ID0gcmVzZXRjdHJsX3Jlc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgcmVzZXRjdHJsX29wcyA9IHsKKwkuY29yZSA9ICZyZXNldGN0cmxfY29yZV9vcHMsCit9OworCisvKgorICogRXh0ZXJuYWwgZW50cnkgcG9pbnRzCisgKi8KIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KQogewogCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwpAQCAtMTU2LDYgKzI4Nyw0OSBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiB9CiAKK2ludCBjeDE4X2dwaW9fcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CisJY2hhciAqc3RyOworCisJc3dpdGNoIChodykgeworCWNhc2UgQ1gxOF9IV19HUElPX01VWDoKKwkJc2QgPSAmY3gtPnNkX2dwaW9tdXg7CisJCW9wcyA9ICZncGlvbXV4X29wczsKKwkJc3RyID0gImdwaW8tbXV4IjsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTDoKKwkJc2QgPSAmY3gtPnNkX3Jlc2V0Y3RybDsKKwkJb3BzID0gJnJlc2V0Y3RybF9vcHM7CisJCXN0ciA9ICJncGlvLXJlc2V0LWN0cmwiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2NGwyX3N1YmRldl9pbml0KHNkLCBvcHMpOworCXY0bDJfc2V0X3N1YmRldmRhdGEoc2QsIGN4KTsKKwlzbnByaW50ZihzZC0+bmFtZSwgc2l6ZW9mKHNkLT5uYW1lKSwgIiVzICVzIiwgY3gtPnY0bDJfZGV2Lm5hbWUsIHN0cik7CisJc2QtPmdycF9pZCA9IGh3OworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJmN4LT52NGwyX2Rldiwgc2QpOworfQorCit2b2lkIGN4MThfcmVzZXRfaXJfZ3Bpbyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHRvX2N4MTgoKHN0cnVjdCB2NGwyX2RldmljZSAqKWRhdGEpOworCisJaWYgKGN4LT5jYXJkLT5ncGlvX2kyY19zbGF2ZV9yZXNldC5pcl9yZXNldF9tYXNrID09IDApCisJCXJldHVybjsKKworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIElSIG1pY3JvY29udHJvbGxlclxuIik7CisKKwl2NGwyX3N1YmRldl9jYWxsKCZjeC0+c2RfcmVzZXRjdHJsLAorCQkJIGNvcmUsIHJlc2V0LCBDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSk7Cit9CitFWFBPUlRfU1lNQk9MKGN4MThfcmVzZXRfaXJfZ3Bpbyk7CisvKiBUaGlzIHN5bWJvbCBpcyBleHBvcnRlZCBmb3IgdXNlIGJ5IGxpcmNfcHZyMTUwIGZvciB0aGUgSVItYmxhc3RlciAqLworCiAvKiBYY2VpdmUgdHVuZXIgcmVzZXQgZnVuY3Rpb24gKi8KIGludCBjeDE4X3Jlc2V0X3R1bmVyX2dwaW8odm9pZCAqZGV2LCBpbnQgY29tcG9uZW50LCBpbnQgY21kLCBpbnQgdmFsdWUpCiB7CkBAIC0xNjMsNTYgKzMzNywxMSBAQAogCXN0cnVjdCBjeDE4X2kyY19hbGdvX2NhbGxiYWNrX2RhdGEgKmNiX2RhdGEgPSBhbGdvLT5kYXRhOwogCXN0cnVjdCBjeDE4ICpjeCA9IGNiX2RhdGEtPmN4OwogCi0JaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQpCisJaWYgKGNtZCAhPSBYQzIwMjhfVFVORVJfUkVTRVQgfHwKKwkgICAgY3gtPmNhcmQtPnR1bmVyc1swXS50dW5lciAhPSBUVU5FUl9YQzIwMjgpCiAJCXJldHVybiAwOwotCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIHR1bmVyXG4iKTsKIAotCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCWN4LT5ncGlvX3ZhbCAmPSB+KDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW4pOwotCWdwaW9fd3JpdGUoY3gpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsIHw9IDEgPDwgY3gtPmNhcmQtPnhjZWl2ZV9waW47Ci0JZ3Bpb193cml0ZShjeCk7Ci0JbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOwotCXUzMiBtYXNrLCBkYXRhOwotCi0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORzoKLQkJaWYgKHJvdXRlLT5pbnB1dCA+IDIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJbWFzayA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0Lm1hc2s7Ci0JCXN3aXRjaCAocm91dGUtPmlucHV0KSB7Ci0JCWNhc2UgMDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5yYWRpbzsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChtYXNrKSB7Ci0JCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCQljeC0+Z3Bpb192YWwgPSAoY3gtPmdwaW9fdmFsICYgfm1hc2spIHwgKGRhdGEgJiBtYXNrKTsKLQkJZ3Bpb193cml0ZShjeCk7Ci0JCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JfQotCXJldHVybiAwOworCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIFhDZWl2ZSB0dW5lclxuIik7CisJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoJmN4LT5zZF9yZXNldGN0cmwsCisJCQkJY29yZSwgcmVzZXQsIENYMThfR1BJT19SRVNFVF9YQzIwMjgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCmluZGV4IDM5ZmZjY2MuLmY5YTVjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKQEAgLTIyLDcgKzIyLDEzIEBACiAgKi8KIAogdm9pZCBjeDE4X2dwaW9faW5pdChzdHJ1Y3QgY3gxOCAqY3gpOwotdm9pZCBjeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gpOworaW50IGN4MThfZ3Bpb19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7CisKK2VudW0gY3gxOF9ncGlvX3Jlc2V0X3R5cGUgeworCUNYMThfR1BJT19SRVNFVF9JMkMgICAgID0gMCwKKwlDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMSA9IDEsCisJQ1gxOF9HUElPX1JFU0VUX1hDMjAyOCAgPSAyLAorfTsKKwogdm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSk7CiBpbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKTsKLWludCBjeDE4X2dwaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdm9pZCAqYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKaW5kZXggODNlMWM2My4uZDA5MjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjeDE4LWlvLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtZ3Bpby5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKIApAQCAtNDMsMzEgKzQyLDM3IEBACiAjZGVmaW5lIENYMThfQ1M1MzQ1X0kyQ19BRERSCQkweDRjCiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCi1zdGF0aWMgY29uc3QgdTggaHdfZHJpdmVyaWRzW10gPSB7Ci0JSTJDX0RSSVZFUklEX1RVTkVSLAotCUkyQ19EUklWRVJJRF9UVkVFUFJPTSwKLQlJMkNfRFJJVkVSSURfQ1M1MzQ1LAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAgCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCi19OwotCi0vKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogc3RhdGljIGNvbnN0IHU4IGh3X2FkZHJzW10gPSB7Ci0JMCwKLQkwLAotCUNYMThfQ1M1MzQ1X0kyQ19BRERSLAotCTAsIAkJLyogQ1gxOF9IV19HUElPIGR1bW15IGRyaXZlciBJRCAqLwotCTAsCQkvKiBDWDE4X0hXX0NYMjM0MTggZHVtbXkgZHJpdmVyIElEICovCisJMCwJCQkvKiBDWDE4X0hXX1RVTkVSICovCisJMCwJCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJQ1gxOF9DUzUzNDVfSTJDX0FERFIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJMCwJCQkvKiBDWDE4X0hXX0RWQiAqLworCTAsCQkJLyogQ1gxOF9IV180MThfQVYgKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwkwLAkJCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCiB9OwogCiAvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwogLyogVGhpcyBtaWdodCB3ZWxsIGJlY29tZSBhIGNhcmQtc3BlY2lmaWMgYXJyYXkgKi8KIHN0YXRpYyBjb25zdCB1OCBod19idXNbXSA9IHsKLQkwLAotCTAsCi0JMCwKLQkwLCAJCS8qIENYMThfSFdfR1BJTyBkdW1teSBkcml2ZXIgSUQgKi8KLQkwLAkJLyogQ1gxOF9IV19DWDIzNDE4IGR1bW15IGRyaXZlciBJRCAqLworCTEsCS8qIENYMThfSFdfVFVORVIgKi8KKwkwLAkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJMCwJLyogQ1gxOF9IV19DUzUzNDUgKi8KKwkwLAkvKiBDWDE4X0hXX0RWQiAqLworCTAsCS8qIENYMThfSFdfNDE4X0FWICovCisJMCwJLyogQ1gxOF9IV19HUElPX01VWCAqLworCTAsCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCit9OworCisvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBod19tb2R1bGVzW10gPSB7CisJInR1bmVyIiwJLyogQ1gxOF9IV19UVU5FUiAqLworCU5VTEwsCQkvKiBDWDE4X0hXX1RWRUVQUk9NICovCisJImNzNTM0NSIsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJTlVMTCwJCS8qIENYMThfSFdfRFZCICovCisJTlVMTCwJCS8qIENYMThfSFdfNDE4X0FWICovCisJTlVMTCwJCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwgKi8KIH07CiAKIC8qIFRoaXMgYXJyYXkgc2hvdWxkIG1hdGNoIHRoZSBDWDE4X0hXXyBkZWZpbmVzICovCkBAIC03NSw4MyArODAsNjcgQEAKIAkidHVuZXIiLAogCSJ0dmVlcHJvbSIsCiAJImNzNTM0NSIsCi0JImdwaW8iLAotCSJjeDIzNDE4IiwKKwkiY3gyMzQxOF9EVFYiLAorCSJjeDIzNDE4X0FWIiwKKwkiZ3Bpb19tdXgiLAorCSJncGlvX3Jlc2V0X2N0cmwiLAogfTsKIAogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KQogewotCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwotCXU4IGlkLCBidXM7Ci0JaW50IGk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgYnVzID0gaHdfYnVzW2lkeF07CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJmN4LT5pMmNfYWRhcFtidXNdOworCWNvbnN0IGNoYXIgKm1vZCA9IGh3X21vZHVsZXNbaWR4XTsKKwljb25zdCBjaGFyICp0eXBlID0gaHdfZGV2aWNlbmFtZXNbaWR4XTsKKwl1MzIgaHcgPSAxIDw8IGlkeDsKIAotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IHJlZ2lzdGVyXG4iKTsKLQlpZiAoaWR4ID49IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKSB8fCBod19kcml2ZXJpZHNbaWR4XSA9PSAwKQorCWlmIChpZHggPj0gQVJSQVlfU0laRShod19hZGRycykpCiAJCXJldHVybiAtMTsKLQlpZCA9IGh3X2RyaXZlcmlkc1tpZHhdOwotCWJ1cyA9IGh3X2J1c1tpZHhdOwotCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQlzdHJsY3B5KGluZm8udHlwZSwgaHdfZGV2aWNlbmFtZXNbaWR4XSwgc2l6ZW9mKGluZm8udHlwZSkpOwotCWluZm8uYWRkciA9IGh3X2FkZHJzW2lkeF07Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKQotCQlpZiAoY3gtPmkyY19jbGllbnRzW2ldID09IE5VTEwpCi0JCQlicmVhazsKIAotCWlmIChpID09IEkyQ19DTElFTlRTX01BWCkgewotCQlDWDE4X0VSUigiaW5zdWZmaWNpZW50IHJvb20gZm9yIG5ldyBJMkMgY2xpZW50IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCWlmIChodyA9PSBDWDE4X0hXX1RVTkVSKSB7CisJCS8qIHNwZWNpYWwgdHVuZXIgZ3JvdXAgaGFuZGxpbmcgKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsCisJCQkJCQljeC0+Y2FyZF9pMmMtPnJhZGlvKTsKKwkJaWYgKHNkICE9IE5VTEwpCisJCQlzZC0+Z3JwX2lkID0gaHc7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLAorCQkJCQkJY3gtPmNhcmRfaTJjLT5kZW1vZCk7CisJCWlmIChzZCAhPSBOVUxMKQorCQkJc2QtPmdycF9pZCA9IGh3OworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwKKwkJCQkJCWN4LT5jYXJkX2kyYy0+dHYpOworCQlpZiAoc2QgIT0gTlVMTCkKKwkJCXNkLT5ncnBfaWQgPSBodzsKKwkJcmV0dXJuIHNkICE9IE5VTEwgPyAwIDogLTE7CiAJfQogCi0JaWYgKGlkICE9IEkyQ19EUklWRVJJRF9UVU5FUikgewotCQljID0gaTJjX25ld19kZXZpY2UoJmN4LT5pMmNfYWRhcFtidXNdLCAmaW5mbyk7Ci0JCWlmIChjLT5kcml2ZXIgPT0gTlVMTCkKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQkJZWxzZQotCQkJY3gtPmkyY19jbGllbnRzW2ldID0gYzsKLQkJcmV0dXJuIGN4LT5pMmNfY2xpZW50c1tpXSA/IDAgOiAtRU5PREVWOwotCX0KKwkvKiBJcyBpdCBub3QgYW4gSTJDIGRldmljZSBvciBvbmUgd2UgZG8gbm90IHdpc2ggdG8gcmVnaXN0ZXI/ICovCisJaWYgKCFod19hZGRyc1tpZHhdKQorCQlyZXR1cm4gLTE7CiAKLQkvKiBzcGVjaWFsIHR1bmVyIGhhbmRsaW5nICovCi0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5yYWRpbyk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT5kZW1vZCk7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JYyA9IGkyY19uZXdfcHJvYmVkX2RldmljZSgmY3gtPmkyY19hZGFwWzFdLCAmaW5mbywgY3gtPmNhcmRfaTJjLT50dik7Ci0JaWYgKGMgJiYgYy0+ZHJpdmVyID09IE5VTEwpCi0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjKTsKLQllbHNlIGlmIChjKQotCQljeC0+aTJjX2NsaWVudHNbaSsrXSA9IGM7Ci0JcmV0dXJuIDA7CisJLyogSXQncyBhbiBJMkMgZGV2aWNlIG90aGVyIHRoYW4gYW4gYW5hbG9nIHR1bmVyICovCisJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSk7CisJaWYgKHNkICE9IE5VTEwpCisJCXNkLT5ncnBfaWQgPSBodzsKKwlyZXR1cm4gc2QgIT0gTlVMTCA/IDAgOiAtMTsKIH0KIAotc3RhdGljIGludCBhdHRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCisvKiBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN1YmRldiBncm91cCBpZCBpbiBodyAqLworc3RydWN0IHY0bDJfc3ViZGV2ICpjeDE4X2ZpbmRfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCiB7Ci0JcmV0dXJuIDA7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBpOwotCXN0cnVjdCBjeDE4ICpjeCA9IChzdHJ1Y3QgY3gxOCAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCUNYMThfREVCVUdfSTJDKCJpMmMgY2xpZW50IGRldGFjaFxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWlmIChjeC0+aTJjX2NsaWVudHNbaV0gPT0gY2xpZW50KSB7Ci0JCQljeC0+aTJjX2NsaWVudHNbaV0gPSBOVUxMOworCXNwaW5fbG9jaygmY3gtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmN4LT52NGwyX2RldikgeworCQlpZiAoc2QtPmdycF9pZCA9PSBodykgeworCQkJcmVzdWx0ID0gc2Q7CiAJCQlicmVhazsKIAkJfQogCX0KLQlDWDE4X0RFQlVHX0kyQygiaTJjIGRldGFjaCBbY2xpZW50PSVzLCVzXVxuIiwKLQkJICAgY2xpZW50LT5uYW1lLCAoaSA8IEkyQ19DTElFTlRTX01BWCkgPyAib2siIDogImZhaWxlZCIpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJmN4LT52NGwyX2Rldi5sb2NrKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3NldHNjbCh2b2lkICpkYXRhLCBpbnQgc3RhdGUpCkBAIC0yMDQsOCArMTkzLDYgQEAKIAkuaWQgPSBJMkNfSFdfQl9DWDIzNDFYLAogCS5hbGdvID0gTlVMTCwgICAgICAgICAgICAgICAgICAgLyogc2V0IGJ5IGkyYy1hbGdvLWJpdCAqLwogCS5hbGdvX2RhdGEgPSBOVUxMLCAgICAgICAgICAgICAgLyogZmlsbGVkIGZyb20gdGVtcGxhdGUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybSwKLQkuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjIxLDE1MiArMjA4LDI4IEBACiAJLnRpbWVvdXQJPSBDWDE4X0FMR09fQklUX1RJTUVPVVQqSFogLyogamlmZmllcyAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGN4MThfaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZSA9ICJjeDE4IGludGVybmFsIiwKLX07Ci0KLWludCBjeDE4X2NhbGxfaTJjX2NsaWVudChzdHJ1Y3QgY3gxOCAqY3gsIGludCBhZGRyLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWludCByZXR2YWw7Ci0JaW50IGk7Ci0KLQlDWDE4X0RFQlVHX0kyQygiY2FsbF9pMmNfY2xpZW50IGFkZHI9JTAyeFxuIiwgYWRkcik7Ci0JZm9yIChpID0gMDsgaSA8IEkyQ19DTElFTlRTX01BWDsgaSsrKSB7Ci0JCWNsaWVudCA9IGN4LT5pMmNfY2xpZW50c1tpXTsKLQkJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwgfHwKLQkJCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChhZGRyID09IGNsaWVudC0+YWRkcikgewotCQkJcmV0dmFsID0gY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoY2xpZW50LCBjbWQsIGFyZyk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JfQotCWlmIChjbWQgIT0gVklESU9DX0RCR19HX0NISVBfSURFTlQpCi0JCUNYMThfRVJSKCJpMmMgYWRkciAweCUwMnggbm90IGZvdW5kIGZvciBjbWQgMHgleCFcbiIsCi0JCQkgICAgICAgYWRkciwgY21kKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBiYXNlZCBvbiB0aGUgZHJpdmVyIElEIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1zdGF0aWMgaW50IGN4MThfaTJjX2lkX2FkZHIoc3RydWN0IGN4MTggKmN4LCB1MzIgaWQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0dmFsID0gLUVOT0RFVjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykgewotCQljbGllbnQgPSBjeC0+aTJjX2NsaWVudHNbaV07Ci0JCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmIChpZCA9PSBjbGllbnQtPmRyaXZlci0+aWQpIHsKLQkJCXJldHZhbCA9IGNsaWVudC0+YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIEZpbmQgdGhlIGkyYyBkZXZpY2UgbmFtZSBtYXRjaGluZyB0aGUgQ1gxOF9IV18gZmxhZyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmN4MThfaTJjX2h3X25hbWUodTMyIGh3KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdfZHJpdmVyaWRzKTsgaSsrKQotCQlpZiAoMSA8PCBpID09IGh3KQotCQkJcmV0dXJuIGh3X2RldmljZW5hbWVzW2ldOwotCXJldHVybiAidW5rbm93biBkZXZpY2UiOwotfQotCi0vKiBGaW5kIHRoZSBpMmMgZGV2aWNlIG1hdGNoaW5nIHRoZSBDWDE4X0hXXyBmbGFnIGFuZCByZXR1cm4KLSAgIGl0cyBpMmMgYWRkcmVzcyBvciAtRU5PREVWIGlmIG5vIG1hdGNoaW5nIGRldmljZSB3YXMgZm91bmQuICovCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcyk7IGkrKykKLQkJaWYgKDEgPDwgaSA9PSBodykKLQkJCXJldHVybiBjeDE4X2kyY19pZF9hZGRyKGN4LCBod19kcml2ZXJpZHNbaV0pOwotCXJldHVybiAtRU5PREVWOwotfQotCi0vKiBDYWxscyBpMmMgZGV2aWNlIGJhc2VkIG9uIENYMThfSFdfIGZsYWcuIElmIGh3ID09IDAsIHRoZW4gZG8gbm90aGluZy4KLSAgIElmIGh3ID09IENYMThfSFdfR1BJTyB0aGVuIGNhbGwgdGhlIGdwaW8gaGFuZGxlci4gKi8KLWludCBjeDE4X2kyY19odyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWludCBhZGRyOwotCi0JaWYgKGh3ID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGh3ID09IENYMThfSFdfR1BJTykKLQkJcmV0dXJuIGN4MThfZ3BpbyhjeCwgY21kLCBhcmcpOwotCi0JaWYgKGh3ID09IENYMThfSFdfQ1gyMzQxOCkKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7Ci0KLQlhZGRyID0gY3gxOF9pMmNfaHdfYWRkcihjeCwgaHcpOwotCWlmIChhZGRyIDwgMCkgewotCQlDWDE4X0VSUigiaTJjIGhhcmR3YXJlIDB4JTA4eCAoJXMpIG5vdCBmb3VuZCBmb3IgY21kIDB4JXghXG4iLAotCQkJICAgICAgIGh3LCBjeDE4X2kyY19od19uYW1lKGh3KSwgY21kKTsKLQkJcmV0dXJuIGFkZHI7Ci0JfQotCXJldHVybiBjeDE4X2NhbGxfaTJjX2NsaWVudChjeCwgYWRkciwgY21kLCBhcmcpOwotfQotCi0vKiBicm9hZGNhc3QgY21kIGZvciBhbGwgSTJDIGNsaWVudHMgYW5kIGZvciB0aGUgZ3BpbyBzdWJzeXN0ZW0gKi8KLXZvaWQgY3gxOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChjeC0+aTJjX2FkYXBbMF0uYWxnbyA9PSBOVUxMIHx8IGN4LT5pMmNfYWRhcFsxXS5hbGdvID09IE5VTEwpIHsKLQkJQ1gxOF9FUlIoImFkYXB0ZXIgaXMgbm90IHNldFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JY3gxOF9hdl9jbWQoY3gsIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMF0sIGNtZCwgYXJnKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZjeC0+aTJjX2FkYXBbMV0sIGNtZCwgYXJnKTsKLQlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19HUElPKQotCQljeDE4X2dwaW8oY3gsIGNtZCwgYXJnKTsKLX0KLQogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJaW50IGk7CiAJQ1gxOF9ERUJVR19JMkMoImkyYyBpbml0XG4iKTsKIAotCS8qIFNhbml0eSBjaGVja3MgZm9yIHRoZSBJMkMgaGFyZHdhcmUgYXJyYXlzLiBUaGV5IG11c3QgYmUgdGhlCi0JICogc2FtZSBzaXplIGFuZCBHUElPL0NYMjM0MTggbXVzdCBiZSB0aGUgbGFzdCBlbnRyaWVzLgotCSAqLwotCWlmIChBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQVJSQVlfU0laRShod19kZXZpY2VuYW1lcykgIT0gQVJSQVlfU0laRShod19hZGRycykgfHwKLQkgICAgQ1gxOF9IV19HUElPICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDIpKSB8fAotCSAgICBDWDE4X0hXX0NYMjM0MTggIT0gKDEgPDwgKEFSUkFZX1NJWkUoaHdfYWRkcnMpIC0gMSkpIHx8Ci0JICAgIGh3X2RyaXZlcmlkc1tBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDFdKSB7Ci0JCUNYMThfRVJSKCJNaXNtYXRjaGVkIEkyQyBoYXJkd2FyZSBhcnJheXNcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCW1lbWNweSgmY3gtPmkyY19hZGFwW2ldLCAmY3gxOF9pMmNfYWRhcF90ZW1wbGF0ZSwKLQkJCXNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKKwkJLyogU2V0dXAgYWxnb3JpdGhtIGZvciBhZGFwdGVyICovCiAJCW1lbWNweSgmY3gtPmkyY19hbGdvW2ldLCAmY3gxOF9pMmNfYWxnb190ZW1wbGF0ZSwKIAkJCXNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uY3ggPSBjeDsKIAkJY3gtPmkyY19hbGdvX2NiX2RhdGFbaV0uYnVzX2luZGV4ID0gaTsKIAkJY3gtPmkyY19hbGdvW2ldLmRhdGEgPSAmY3gtPmkyY19hbGdvX2NiX2RhdGFbaV07CisKKwkJLyogU2V0dXAgYWRhcHRlciAqLworCQltZW1jcHkoJmN4LT5pMmNfYWRhcFtpXSwgJmN4MThfaTJjX2FkYXBfdGVtcGxhdGUsCisJCQlzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CiAJCWN4LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEgPSAmY3gtPmkyY19hbGdvW2ldOwotCiAJCXNwcmludGYoY3gtPmkyY19hZGFwW2ldLm5hbWUgKyBzdHJsZW4oY3gtPmkyY19hZGFwW2ldLm5hbWUpLAotCQkJCSIgIyVkLSVkIiwgY3gtPm51bSwgaSk7Ci0JCWkyY19zZXRfYWRhcGRhdGEoJmN4LT5pMmNfYWRhcFtpXSwgY3gpOwotCi0JCW1lbWNweSgmY3gtPmkyY19jbGllbnRbaV0sICZjeDE4X2kyY19jbGllbnRfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKLQkJc3ByaW50ZihjeC0+aTJjX2NsaWVudFtpXS5uYW1lICsKLQkJCQlzdHJsZW4oY3gtPmkyY19jbGllbnRbaV0ubmFtZSksICIlZCIsIGkpOwotCQljeC0+aTJjX2NsaWVudFtpXS5hZGFwdGVyID0gJmN4LT5pMmNfYWRhcFtpXTsKLQkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPmRldi0+ZGV2OworCQkJCSIgIyVkLSVkIiwgY3gtPmluc3RhbmNlLCBpKTsKKwkJaTJjX3NldF9hZGFwZGF0YSgmY3gtPmkyY19hZGFwW2ldLCAmY3gtPnY0bDJfZGV2KTsKKwkJY3gtPmkyY19hZGFwW2ldLmRldi5wYXJlbnQgPSAmY3gtPnBjaV9kZXYtPmRldjsKIAl9CiAKIAlpZiAoY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9SRUdfSTJDXzJfV1IpICE9IDB4MDAwM2MwMmYpIHsKQEAgLTQwMiw3ICsyNjUsOCBAQAogCWN4MThfc2V0c2NsKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAJY3gxOF9zZXRzZGEoJmN4LT5pMmNfYWxnb19jYl9kYXRhWzFdLCAxKTsKIAotCWN4MThfcmVzZXRfaTJjX3NsYXZlc19ncGlvKGN4KTsKKwljeDE4X2NhbGxfaHcoY3gsIENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAorCQkgICAgIGNvcmUsIHJlc2V0LCAodTMyKSBDWDE4X0dQSU9fUkVTRVRfSTJDKTsKIAogCXJldHVybiBpMmNfYml0X2FkZF9idXMoJmN4LT5pMmNfYWRhcFswXSkgfHwKIAkJaTJjX2JpdF9hZGRfYnVzKCZjeC0+aTJjX2FkYXBbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAppbmRleCA0ODY5NzM5Li5iZGZkMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuaApAQCAtMjEsMTEgKzIxLDggQEAKICAqICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi1pbnQgY3gxOF9pMmNfaHdfYWRkcihzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7Ci1pbnQgY3gxOF9pMmNfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgY3gxOF9jYWxsX2kyY19jbGllbnQoc3RydWN0IGN4MTggKmN4LCBpbnQgYWRkciwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpOwotdm9pZCBjeDE4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogaW50IGN4MThfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaWR4KTsKK3N0cnVjdCB2NGwyX3N1YmRldiAqY3gxOF9maW5kX2h3KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3KTsKIAogLyogaW5pdCArIHJlZ2lzdGVyIGkyYyBhbGdvLWJpdCBhZGFwdGVyICovCiBpbnQgaW5pdF9jeDE4X2kyYyhzdHJ1Y3QgY3gxOCAqY3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKaW5kZXggNzA4NmFhYi4uZTRjOWUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCkBAIC01OCwxMiArNTgsMjEgQEAKIAl9CiB9CiAKKy8qIENoZWNrIGlmIFZCSSBzZXJ2aWNlcyBhcmUgYWxsb3dlZCBvbiB0aGUgKGZpZWxkLCBsaW5lKSBmb3IgdGhlIHZpZGVvIHN0ZCAqLwogc3RhdGljIGludCB2YWxpZF9zZXJ2aWNlX2xpbmUoaW50IGZpZWxkLCBpbnQgbGluZSwgaW50IGlzX3BhbCkKIHsKLQlyZXR1cm4gKGlzX3BhbCAmJiBsaW5lID49IDYgJiYgKGxpbmUgIT0gMjMgfHwgZmllbGQgPT0gMCkpIHx8CisJcmV0dXJuIChpc19wYWwgJiYgbGluZSA+PSA2ICYmCisJCSgoZmllbGQgPT0gMCAmJiBsaW5lIDw9IDIzKSB8fCAoZmllbGQgPT0gMSAmJiBsaW5lIDw9IDIyKSkpIHx8CiAJICAgICAgICghaXNfcGFsICYmIGxpbmUgPj0gMTAgJiYgbGluZSA8IDIyKTsKIH0KIAorLyoKKyAqIEZvciBhIChmaWVsZCwgbGluZSwgc3RkKSBhbmQgaW5ib3VuZCBwb3RlbnRpYWwgc2V0IG9mIHNlcnZpY2VzIGZvciB0aGF0IGxpbmUsCisgKiByZXR1cm4gdGhlIGZpcnN0IHZhbGlkIHNlcnZpY2Ugb2YgdGhvc2UgcGFzc2VkIGluIHRoZSBpbmNvbWluZyBzZXQgZm9yIHRoYXQKKyAqIGxpbmUgaW4gcHJpb3JpdHkgb3JkZXI6CisgKiBDQywgVlBTLCBvciBXU1Mgb3ZlciBURUxFVEVYVCBmb3Igd2VsbCBrbm93biBsaW5lcworICogVEVMRVRFWFQsIGJlZm9yZSBWUFMsIGJlZm9yZSBDQywgYmVmb3JlIFdTUywgZm9yIG90aGVyIGxpbmVzCisgKi8KIHN0YXRpYyB1MTYgc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoaW50IGZpZWxkLCBpbnQgbGluZSwgdTE2IHNldCwgaW50IGlzX3BhbCkKIHsKIAl1MTYgdmFsaWRfc2V0ID0gKGlzX3BhbCA/IFY0TDJfU0xJQ0VEX1ZCSV82MjUgOiBWNEwyX1NMSUNFRF9WQklfNTI1KTsKQEAgLTkwLDYgKzk5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBFeHBhbmQgdGhlIHNlcnZpY2Vfc2V0IG9mICpmbXQgaW50byB2YWxpZCBzZXJ2aWNlX2xpbmVzIGZvciB0aGUgc3RkLAorICogYW5kIGNsZWFyIHRoZSBwYXNzZWQgaW4gZm10LT5zZXJ2aWNlX3NldAorICovCiB2b2lkIGN4MThfZXhwYW5kX3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQsIGludCBpc19wYWwpCiB7CiAJdTE2IHNldCA9IGZtdC0+c2VydmljZV9zZXQ7CkBAIC0xMDIsNyArMTE1LDI1IEBACiAJfQogfQogCisvKgorICogU2FuaXRpemUgdGhlIHNlcnZpY2VfbGluZXMgaW4gKmZtdCBwZXIgdGhlIHZpZGVvIHN0ZCwgYW5kIHJldHVybiAxCisgKiBpZiBhbnkgc2VydmljZV9saW5lIGlzIGxlZnQgYXMgdmFsaWQgYWZ0ZXIgc2FudGl6YXRpb24KKyAqLworc3RhdGljIGludCBjaGVja19zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKQoreworCWludCBmLCBsOworCXUxNiBzZXQgPSAwOwogCisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2VsZWN0X3NlcnZpY2VfZnJvbV9zZXQoZiwgbCwgZm10LT5zZXJ2aWNlX2xpbmVzW2ZdW2xdLCBpc19wYWwpOworCQkJc2V0IHw9IGZtdC0+c2VydmljZV9saW5lc1tmXVtsXTsKKwkJfQorCX0KKwlyZXR1cm4gc2V0ICE9IDA7Cit9CisKKy8qIENvbXB1dGUgdGhlIHNlcnZpY2Vfc2V0IGZyb20gdGhlIGFzc3VtZWQgdmFsaWQgc2VydmljZV9saW5lcyBvZiAqZm10ICovCiB1MTYgY3gxOF9nZXRfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCkKIHsKIAlpbnQgZiwgbDsKQEAgLTEyOSwxMCArMTYwLDggQEAKIAlwaXhmbXQtPnByaXYgPSAwOwogCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ITTEyOwotCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KLQkJcGl4Zm10LT5zaXplaW1hZ2UgPQotCQkJcGl4Zm10LT5oZWlnaHQgKiBwaXhmbXQtPndpZHRoICsKLQkJCXBpeGZtdC0+aGVpZ2h0ICogKHBpeGZtdC0+d2lkdGggLyAyKTsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqNzIwKSArIFVWPShoKig3MjAvMikpKSAqLworCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+aGVpZ2h0ICogNzIwICogMyAvIDI7CiAJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOwogCX0gZWxzZSB7CiAJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKQEAgLTE0OSw4ICsxNzgsOCBAQAogCXN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC52Ymk7CiAKIAl2YmlmbXQtPnNhbXBsaW5nX3JhdGUgPSAyNzAwMDAwMDsKLQl2YmlmbXQtPm9mZnNldCA9IDI0ODsKLQl2YmlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZSAtIDQ7CisJdmJpZm10LT5vZmZzZXQgPSAyNDg7IC8qIEZJWE1FIC0gc2xpZ2h0bHkgd3JvbmcgZm9yIGJvdGggNTAgJiA2MCBIeiAqLworCXZiaWZtdC0+c2FtcGxlc19wZXJfbGluZSA9IHZiaV9hY3RpdmVfc2FtcGxlcyAtIDQ7CiAJdmJpZm10LT5zYW1wbGVfZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0dSRVk7CiAJdmJpZm10LT5zdGFydFswXSA9IGN4LT52Ymkuc3RhcnRbMF07CiAJdmJpZm10LT5zdGFydFsxXSA9IGN4LT52Ymkuc3RhcnRbMV07CkBAIC0xNjQsNyArMTkzLDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJLyogc2FuZSwgVjRMMiBzcGVjIGNvbXBsaWFudCwgZGVmYXVsdHMgKi8KKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCW1lbXNldCh2YmlmbXQtPnNlcnZpY2VfbGluZXMsIDAsIHNpemVvZih2YmlmbXQtPnNlcnZpY2VfbGluZXMpKTsKKwl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gMDsKKworCS8qCisJICogRmV0Y2ggdGhlIGNvbmZpZ3VyZWQgc2VydmljZV9saW5lcyBhbmQgdG90YWwgc2VydmljZV9zZXQgZnJvbSB0aGUKKwkgKiBkaWdpdGl6ZXIvc2xpY2VyLiAgTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyB0aGUgcGFzc2VkIGluCisJICogZm10LT5mbXQuc2xpY2VkIHVuZGVyIHZhbGlkIGNhbGxpbmcgY29uZGl0aW9ucworCSAqLworCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIGdfZm10LCBmbXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEVuc3VyZSBWNEwyIHNwZWMgY29tcGxpYW50IG91dHB1dCAqLworCXZiaWZtdC0+cmVzZXJ2ZWRbMF0gPSAwOworCXZiaWZtdC0+cmVzZXJ2ZWRbMV0gPSAwOworCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7CisJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGN4MThfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMTc0LDExICsyMjYsMTggQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCBtaW5faCA9IDI7CiAKIAl3ID0gbWluKHcsIDcyMCk7Ci0JdyA9IG1heCh3LCAxKTsKKwl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBjeC0+aXNfNTBoeiA/IDU3NiA6IDQ4MCk7Ci0JaCA9IG1heChoLCAyKTsKKwloID0gbWF4KGgsIG1pbl9oKTsKKwogCWN4MThfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKIAlmbXQtPmZtdC5waXgud2lkdGggPSB3OwogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwpAQCAtMTk0LDcgKzI1MywyMCBAQAogc3RhdGljIGludCBjeDE4X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQuc2xpY2VkOworCisJdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKworCS8qIElmIGdpdmVuIGEgc2VydmljZSBzZXQsIGV4cGFuZCBpdCB2YWxpZGx5ICYgY2xlYXIgcGFzc2VkIGluIHNldCAqLworCWlmICh2YmlmbXQtPnNlcnZpY2Vfc2V0KQorCQljeDE4X2V4cGFuZF9zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KTsKKwkvKiBTYW5pdGl6ZSB0aGUgc2VydmljZV9saW5lcywgYW5kIGNvbXB1dGUgdGhlIG5ldyBzZXQgaWYgYW55IHZhbGlkICovCisJaWYgKGNoZWNrX3NlcnZpY2Vfc2V0KHZiaWZtdCwgY3gtPmlzXzUwaHopKQorCQl2YmlmbXQtPnNlcnZpY2Vfc2V0ID0gY3gxOF9nZXRfc2VydmljZV9zZXQodmJpZm10KTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtMjIzLDcgKzI5NSw3IEBACiAKIAljeC0+cGFyYW1zLndpZHRoID0gdzsKIAljeC0+cGFyYW1zLmhlaWdodCA9IGg7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOwogCXJldHVybiBjeDE4X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKQEAgLTIzOCw1NCArMzEwLDEzMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwkvKgorCSAqIENoYW5naW5nIHRoZSBFbmNvZGVyJ3MgUmF3IFZCSSBwYXJhbWV0ZXJzIHdvbid0IGhhdmUgYW55IGVmZmVjdAorCSAqIGlmIGFueSBhbmFsb2cgY2FwdHVyZSBpcyBvbmdvaW5nCisJICovCiAJaWYgKCFjeDE4X3Jhd192YmkoY3gpICYmIGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCisJLyoKKwkgKiBTZXQgdGhlIGRpZ2l0aXplciByZWdpc3RlcnMgZm9yIHJhdyBhY3RpdmUgVkJJLgorCSAqIE5vdGUgY3gxOF9hdl92Ymlfd2lwZXMgb3V0IGFsb3Qgb2YgdGhlIHBhc3NlZCBpbiBmbXQgdW5kZXIgdmFsaWQKKwkgKiBjYWxsaW5nIGNvbmRpdGlvbnMKKwkgKi8KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCBmbXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdG9yZSBvdXIgbmV3IHY0bDIgKG5vbi0pc2xpY2VkIFZCSSBzdGF0ZSAqLwogCWN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IDA7CiAJY3gtPnZiaS5pbi50eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCBmbXQpOworCiAJcmV0dXJuIGN4MThfZ19mbXRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKIH0KIAogc3RhdGljIGludCBjeDE4X3NfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MThfb3Blbl9pZCAqaWQgPSBmaDsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSBpZC0+Y3g7CisJaW50IHJldDsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKworCXJldCA9IHY0bDJfcHJpb19jaGVjaygmY3gtPnByaW8sICZpZC0+cHJpbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWN4MThfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgZm10KTsKKworCS8qCisJICogQ2hhbmdpbmcgdGhlIEVuY29kZXIncyBSYXcgVkJJIHBhcmFtZXRlcnMgd29uJ3QgaGF2ZSBhbnkgZWZmZWN0CisJICogaWYgYW55IGFuYWxvZyBjYXB0dXJlIGlzIG9uZ29pbmcKKwkgKi8KKwlpZiAoY3gxOF9yYXdfdmJpKGN4KSAmJiBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qCisJICogU2V0IHRoZSBzZXJ2aWNlX2xpbmVzIHJlcXVlc3RlZCBpbiB0aGUgZGlnaXRpemVyL3NsaWNlciByZWdpc3RlcnMuCisJICogTm90ZSwgY3gxOF9hdl92YmkoKSB3aXBlcyBzb21lICJpbXBvc3NpYmxlIiBzZXJ2aWNlIGxpbmVzIGluIHRoZQorCSAqIHBhc3NlZCBpbiBmbXQtPmZtdC5zbGljZWQgdW5kZXIgdmFsaWQgY2FsbGluZyBjb25kaXRpb25zCisJICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qIFN0b3JlIG91ciBjdXJyZW50IHY0bDIgc2xpY2VkIFZCSSBzZXR0aW5ncyAqLworCWN4LT52YmkuaW4udHlwZSA9ICBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwltZW1jcHkoY3gtPnZiaS5zbGljZWRfaW4sIHZiaWZtdCwgc2l6ZW9mKCpjeC0+dmJpLnNsaWNlZF9pbikpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSAoKHN0cnVjdCBjeDE4X29wZW5faWQgKilmaCktPmN4OworCWludCBlcnIgPSAwOwogCiAJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CiAJY2hpcC0+cmV2aXNpb24gPSAwOwotCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmY2hpcC0+bWF0Y2gpKSB7Ci0JCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DWDIzNDE4OwotCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGNoaXAtPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9IT1NUOgorCQlzd2l0Y2ggKGNoaXAtPm1hdGNoLmFkZHIpIHsKKwkJY2FzZSAwOgorCQkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NYMjM0MTg7CisJCQljaGlwLT5yZXZpc2lvbiA9IGN4MThfcmVhZF9yZWcoY3gsIDB4QzcyMDI4KTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQkvKgorCQkJICogVGhlIEEvViBkZWNvZGVyIGlzIGFsd2F5cyBwcmVzZW50LCBidXQgaW4gdGhlIHJhcmUKKwkJCSAqIGNhc2UgdGhhdCB0aGUgY2FyZCBkb2Vzbid0IGhhdmUgYW5hbG9nLCB3ZSBkb24ndAorCQkJICogdXNlIGl0LiAgV2UgZmluZCBpdCB3L28gdXNpbmcgdGhlIGN4LT5zZF9hdiBwb2ludGVyCisJCQkgKi8KKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV180MThfQVYsCisJCQkJICAgICBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogQ291bGQgcmV0dXJuIGlkZW50ID0gVjRMMl9JREVOVF9VTktOT1dOIGlmIHdlIGhhZAorCQkJICogb3RoZXIgaG9zdCBjaGlwcyBhdCBoaWdoZXIgYWRkcmVzc2VzLCBidXQgd2UgZG9uJ3QKKwkJCSAqLworCQkJZXJyID0gLUVJTlZBTDsgLyogcGVyIFY0TDIgc3BlYyAqLworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0RSSVZFUjoKKwkJLyogSWYgbmVlZGVkLCByZXR1cm5zIFY0TDJfSURFTlRfQU1CSUdVT1VTIHdpdGhvdXQgZXh0cmEgd29yayAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjoKKwkJLyoKKwkJICogV2UgY291bGQgcmV0dXJuIFY0TDJfSURFTlRfVU5LTk9XTiwgYnV0IHdlIGRvbid0IGRvIHRoZSB3b3JrCisJCSAqIHRvIGxvb2sgaWYgYSBjaGlwIGlzIGF0IHRoZSBhZGRyZXNzIHdpdGggbm8gZHJpdmVyLiAgVGhhdCdzIGEKKwkJICogZGFuZ2Vyb3VzIHRoaW5nIHRvIGRvIHdpdGggRUVQUk9NcyBhbnl3YXkuCisJCSAqLworCQljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgY3gxOF9jeGMoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWdzID0gYXJnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJaWYgKHJlZ3MtPnJlZyA+PSBDWDE4X01FTV9PRkZTRVQgKyBDWDE4X01FTV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjeDE4X2NhcmRzX2xvY2ssIGZsYWdzKTsKIAlyZWdzLT5zaXplID0gNDsKLQlpZiAoY21kID09IFZJRElPQ19EQkdfR19SRUdJU1RFUikKLQkJcmVncy0+dmFsID0gY3gxOF9yZWFkX2VuYyhjeCwgcmVncy0+cmVnKTsKLQllbHNlCisJaWYgKGNtZCA9PSBWSURJT0NfREJHX1NfUkVHSVNURVIpCiAJCWN4MThfd3JpdGVfZW5jKGN4LCByZWdzLT52YWwsIHJlZ3MtPnJlZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3gxOF9jYXJkc19sb2NrLCBmbGFncyk7CisJZWxzZQorCQlyZWdzLT52YWwgPSBjeDE4X3JlYWRfZW5jKGN4LCByZWdzLT5yZWcpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTYsNyArNDQ1LDggQEAKIAogCWlmICh2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiBjeDE4X2N4YyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCS8qIEZJWE1FIC0gZXJyb3JzIHNob3VsZG4ndCBiZSBpZ25vcmVkICovCisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzA3LDcgKzQ1Nyw4IEBACiAKIAlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQogCQlyZXR1cm4gY3gxOF9jeGMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKKwkvKiBGSVhNRSAtIGVycm9ycyBzaG91bGRuJ3QgYmUgaWdub3JlZCAqLworCWN4MThfY2FsbF9hbGwoY3gsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTMzNSw3ICs0ODYsOCBAQAogCiAJc3RybGNweSh2Y2FwLT5kcml2ZXIsIENYMThfRFJJVkVSX05BTUUsIHNpemVvZih2Y2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KHZjYXAtPmNhcmQsIGN4LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShjeC0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksCisJCSAiUENJOiVzIiwgcGNpX25hbWUoY3gtPnBjaV9kZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gQ1gxOF9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gY3gtPnY0bDJfY2FwOyAJICAgIC8qIGNhcGFiaWxpdGllcyAqLwogCXJldHVybiAwOwpAQCAtNDAzLDcgKzU1NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX1NfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfU19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQpAQCAtNDEyLDcgKzU2NSw4IEBACiAKIAlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBjeDE4X2F2X2NtZChjeCwgVklESU9DX0dfQ1JPUCwgY3JvcCk7CisJQ1gxOF9ERUJVR19XQVJOKCJWSURJT0NfR19DUk9QIG5vdCBpbXBsZW1lbnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTQ4Myw3ICs2MzcsNyBAQAogCWlmICh2Zi0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgdmYpOwogCXJldHVybiAwOwogfQogCkBAIC01MDIsNyArNjU2LDcgQEAKIAogCWN4MThfbXV0ZShjeCk7CiAJQ1gxOF9ERUJVR19JTkZPKCJ2NGwyIGlvY3RsOiBzZXQgZnJlcXVlbmN5ICVkXG4iLCB2Zi0+ZnJlcXVlbmN5KTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX0ZSRVFVRU5DWSwgdmYpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgdmYpOwogCWN4MThfdW5tdXRlKGN4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0NywxMiArNzAxLDExIEBACiAJY3gtPnZiaS5jb3VudCA9IGN4LT5pc181MGh6ID8gMTggOiAxMjsKIAljeC0+dmJpLnN0YXJ0WzBdID0gY3gtPmlzXzUwaHogPyA2IDogMTA7CiAJY3gtPnZiaS5zdGFydFsxXSA9IGN4LT5pc181MGh6ID8gMzE4IDogMjczOwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyAyNzIgOiAyODQ7CiAJQ1gxOF9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjeC0+c3RkKTsKIAogCS8qIFR1bmVyICovCi0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19TVEQsICZjeC0+c3RkKTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19zdGQsIGN4LT5zdGQpOwogCXJldHVybiAwOwogfQogCkBAIC01NjksOSArNzIyLDcgQEAKIAlpZiAodnQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogU2V0dGluZyB0dW5lciBjYW4gb25seSBzZXQgYXVkaW8gbW9kZSAqLwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfVFVORVIsIHZ0KTsKLQorCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU4Miw3ICs3MzMsNyBAQAogCWlmICh2dC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19HX1RVTkVSLCB2dCk7CisJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIGdfdHVuZXIsIHZ0KTsKIAogCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7CiAJCXN0cmxjcHkodnQtPm5hbWUsICJjeDE4IFJhZGlvIFR1bmVyIiwgc2l6ZW9mKHZ0LT5uYW1lKSk7CkBAIC01OTgsNyArNzQ5LDMwIEBACiBzdGF0aWMgaW50IGN4MThfZ19zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwICpjYXApCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlpbnQgc2V0ID0gY3gtPmlzXzUwaHogPyBWNEwyX1NMSUNFRF9WQklfNjI1IDogVjRMMl9TTElDRURfVkJJXzUyNTsKKwlpbnQgZiwgbDsKKworCWlmIChjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJY2FwLT5zZXJ2aWNlX3NldCA9IDA7CisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCQlmb3IgKGwgPSAwOyBsIDwgMjQ7IGwrKykgeworCQkJaWYgKHZhbGlkX3NlcnZpY2VfbGluZShmLCBsLCBjeC0+aXNfNTBoeikpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGNhbiBmaW5kIGFsbCB2NGwyIHN1cHBvcnRlZCB2Ymkgc2VydmljZXMKKwkJCQkgKiBmb3IgdGhlIHN0YW5kYXJkLCBvbiBhIHZhbGlkIGxpbmUgZm9yIHRoZSBzdGQKKwkJCQkgKi8KKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSBzZXQ7CisJCQkJY2FwLT5zZXJ2aWNlX3NldCB8PSBzZXQ7CisJCQl9IGVsc2UKKwkJCQljYXAtPnNlcnZpY2VfbGluZXNbZl1bbF0gPSAwOworCQl9CisJfQorCWZvciAoZiA9IDA7IGYgPCAzOyBmKyspCisJCWNhcC0+cmVzZXJ2ZWRbZl0gPSAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19lbmNfaW5kZXgoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNzA4LDEzICs4ODIsMTUgQEAKIAlzdHJ1Y3QgdjRsMl9hdWRpbyBhdWRpbjsKIAlpbnQgaTsKIAotCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIGN4LT5udW0pOworCUNYMThfSU5GTygiPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PVxuIiwgY3gtPmluc3RhbmNlKTsKKwlDWDE4X0lORk8oIlZlcnNpb246ICVzICBDYXJkOiAlc1xuIiwgQ1gxOF9WRVJTSU9OLCBjeC0+Y2FyZF9uYW1lKTsKIAlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV19UVkVFUFJPTSkgewogCQlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAkJY3gxOF9yZWFkX2VlcHJvbShjeCwgJnR2KTsKIAl9Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gxOF9nZXRfaW5wdXQoY3gsIGN4LT5hY3RpdmVfaW5wdXQsICZ2aWRpbik7CiAJY3gxOF9nZXRfYXVkaW9faW5wdXQoY3gsIGN4LT5hdWRpb19pbnB1dCwgJmF1ZGluKTsKIAlDWDE4X0lORk8oIlZpZGVvIElucHV0OiAlc1xuIiwgdmlkaW4ubmFtZSk7CkBAIC03MjUsMTIgKzkwMSwxMiBAQAogCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CiAJQ1gxOF9JTkZPKCJUdW5lcjogJXNcbiIsCiAJCXRlc3RfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncykgPyAgIlJhZGlvIiA6ICJUViIpOwotCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPm5hbWUpOworCWN4MjM0MXhfbG9nX3N0YXR1cygmY3gtPnBhcmFtcywgY3gtPnY0bDJfZGV2Lm5hbWUpOwogCUNYMThfSU5GTygiU3RhdHVzIGZsYWdzOiAweCUwOGx4XG4iLCBjeC0+aV9mbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IENYMThfTUFYX1NUUkVBTVM7IGkrKykgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJQ1gxOF9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLAogCQkJICBzLT5uYW1lLCBzLT5zX2ZsYWdzLApAQCAtNzQwLDcgKzkxNiw4IEBACiAJQ1gxOF9JTkZPKCJSZWFkIE1QRUcvVkJJOiAlbGxkLyVsbGQgYnl0ZXNcbiIsCiAJCQkobG9uZyBsb25nKWN4LT5tcGdfZGF0YV9yZWNlaXZlZCwKIAkJCShsb25nIGxvbmcpY3gtPnZiaV9kYXRhX2luc2VydGVkKTsKLQlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKKwlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09PSAgRU5EIFNUQVRVUyBDQVJEICMlZCAgIgorCQkgICI9PT09PT09PT09PT09PT09PT1cbiIsIGN4LT5pbnN0YW5jZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw3ICs5MzEsOCBAQAogCiAJCUNYMThfREVCVUdfSU9DVEwoIlZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HKCVkLCAlZClcbiIsCiAJCQlyb3V0ZS0+aW5wdXQsIHJvdXRlLT5vdXRwdXQpOwotCQljeDE4X2F1ZGlvX3NldF9yb3V0ZShjeCwgcm91dGUpOworCQljeDE4X2NhbGxfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBhdWRpbywgc19yb3V0aW5nLAorCQkJICAgICByb3V0ZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNzYyLDcgKzk0MCw4IEBACiAJCXUzMiB2YWwgPSAqKHUzMiAqKWFyZzsKIAogCQlpZiAoKHZhbCA9PSAwKSB8fCAodmFsICYgMHgwMSkpCi0JCQljeDE4X3Jlc2V0X2lyX2dwaW8oJmN4LT5pMmNfYWxnb19jYl9kYXRhWzBdKTsKKwkJCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsIGNvcmUsIHJlc2V0LAorCQkJCSAgICAgKHUzMikgQ1gxOF9HUElPX1JFU0VUX1o4RjA4MTEpOwogCQlicmVhazsKIAl9CiAKQEAgLTc4Miw2ICs5NjEsOCBAQAogCiAJbXV0ZXhfbG9jaygmY3gtPnNlcmlhbGl6ZV9sb2NrKTsKIAorCS8qIEZJWE1FIC0gY29uc29saWRhdGUgdjRsMl9wcmlvX2NoZWNrKCkncyBoZXJlICovCisKIAlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0lPQ1RMKQogCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTCB8IFY0TDJfREVCVUdfSU9DVExfQVJHOwogCXJlcyA9IHZpZGVvX2lvY3RsMihmaWxwLCBjbWQsIGFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKaW5kZXggZGU1ZTcyMy4uMjIyNmU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYwpAQCAtODMsNiArODMsOCBAQAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NRExfQUNLLAkJCTApLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1NFVF9NREwsCQkJQVBJX0ZBU1QpLAogCUFQSV9FTlRSWShDUFUsIENYMThfQ1BVX0RFX1JFTEVBU0VfTURMLAkJCUFQSV9TTE9XKSwKKwlBUElfRU5UUlkoQVBVLCBDWDE4X0FQVV9TVEFSVCwJCQkJMCksCisJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfU1RPUCwJCQkJMCksCiAJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfUkVTRVRBSSwJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERUJVR19QRUVLMzIsCQkJMCksCiAJQVBJX0VOVFJZKDAsIDAsCQkJCQkJMCksCkBAIC05OCwyMSArMTAwLDMwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIENhbGwgd2l0aCBidWYgb2YgbioxMSsxIGJ5dGVzICovCitzdGF0aWMgY2hhciAqdTMyYXJyMmhleCh1MzIgZGF0YVtdLCBpbnQgbiwgY2hhciAqYnVmKQoreworCWNoYXIgKnA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwLCBwID0gYnVmOyBpIDwgbjsgaSsrLCBwICs9IDExKSB7CisJCS8qIGtlcm5lbCBzbnByaW50ZigpIGFwcGVuZHMgJ1wwJyBhbHdheXMgKi8KKwkJc25wcmludGYocCwgMTIsICIgJSMwMTB4IiwgZGF0YVtpXSk7CisJfQorCSpwID0gJ1wwJzsKKwlyZXR1cm4gYnVmOworfQorCiBzdGF0aWMgdm9pZCBkdW1wX21iKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfbWFpbGJveCAqbWIsIGNoYXIgKm5hbWUpCiB7CiAJY2hhciBhcmdzdHJbTUFYX01CX0FSR1VNRU5UUyoxMSsxXTsKLQljaGFyICpwOwotCWludCBpOwogCiAJaWYgKCEoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX0FQSSkpCiAJCXJldHVybjsKIAotCWZvciAoaSA9IDAsIHAgPSBhcmdzdHI7IGkgPCBNQVhfTUJfQVJHVU1FTlRTOyBpKyssIHAgKz0gMTEpIHsKLQkJLyoga2VybmVsIHNucHJpbnRmKCkgYXBwZW5kcyAnXDAnIGFsd2F5cyAqLwotCQlzbnByaW50ZihwLCAxMiwgIiAlIzAxMHgiLCBtYi0+YXJnc1tpXSk7Ci0JfQogCUNYMThfREVCVUdfQVBJKCIlczogcmVxICUjMDEweCBhY2sgJSMwMTB4IGNtZCAlIzAxMHggZXJyICUjMDEweCBhcmdzJXMiCi0JCSJcbiIsIG5hbWUsIG1iLT5yZXF1ZXN0LCBtYi0+YWNrLCBtYi0+Y21kLCBtYi0+ZXJyb3IsIGFyZ3N0cik7CisJCSAgICAgICAiXG4iLCBuYW1lLCBtYi0+cmVxdWVzdCwgbWItPmFjaywgbWItPmNtZCwgbWItPmVycm9yLAorCQkgICAgICAgdTMyYXJyMmhleChtYi0+YXJncywgTUFYX01CX0FSR1VNRU5UUywgYXJnc3RyKSk7CiB9CiAKIApAQCAtNDM5LDcgKzQ1MCw4IEBACiAJCQkJImluY29taW5nICVzIHRvIEVQVSBtYWlsYm94IChzZXF1ZW5jZSBuby4gJXUpIgogCQkJCSJcbiIsCiAJCQkJcnB1X3N0cltycHVdLCBycHVfc3RyW3JwdV0sIG9yZGVyX21iLT5yZXF1ZXN0KTsKLQkJZHVtcF9tYihjeCwgb3JkZXJfbWIsICJpbmNvbWluZyIpOworCQlpZiAoY3gxOF9kZWJ1ZyAmIENYMThfREJHRkxHX1dBUk4pCisJCQlkdW1wX21iKGN4LCBvcmRlcl9tYiwgImluY29taW5nIik7CiAJCW9yZGVyLT5mbGFncyA9IENYMThfRl9FV09fTUJfU1RBTEVfVVBPTl9SRUNFSVBUOwogCX0KIApAQCAtNDY4LDE2ICs0ODAsMjQgQEAKIAlzdHJ1Y3QgbXV0ZXggKm1iX2xvY2s7CiAJbG9uZyBpbnQgdGltZW91dCwgcmV0OwogCWludCBpOworCWNoYXIgYXJnc3RyW01BWF9NQl9BUkdVTUVOVFMqMTErMV07CiAKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CiAJCUNYMThfV0FSTigidW5rbm93biBjbWQgJXhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkKLQkJQ1gxOF9ERUJVR19ISV9BUEkoIiVzXG4iLCBpbmZvLT5uYW1lKTsKLQllbHNlCi0JCUNYMThfREVCVUdfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7CisJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19BUEkpIHsgLyogb25seSBjYWxsIHUzMmFycjJoZXggaWYgbmVlZGVkICovCisJCWlmIChjbWQgPT0gQ1gxOF9DUFVfREVfU0VUX01ETCkgeworCQkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19ISUdIVk9MKQorCQkJCUNYMThfREVCVUdfSElfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJCQlpbmZvLT5uYW1lLCBjbWQsCisJCQkJCQl1MzJhcnIyaGV4KGRhdGEsIGFyZ3MsIGFyZ3N0cikpOworCQl9IGVsc2UKKwkJCUNYMThfREVCVUdfQVBJKCIlc1x0Y21kICUjMDEweCBhcmdzJXNcbiIsCisJCQkJICAgICAgIGluZm8tPm5hbWUsIGNtZCwKKwkJCQkgICAgICAgdTMyYXJyMmhleChkYXRhLCBhcmdzLCBhcmdzdHIpKTsKKwl9CiAKIAlzd2l0Y2ggKGluZm8tPnJwdSkgewogCWNhc2UgQVBVOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKaW5kZXggOGQ5NDQxZS4uMzA0NmI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAkJfQogCQlidWYtPmlkID0gY3gtPmJ1ZmZlcl9pZCsrOwogCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKLQkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPmRldiwKKwkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+Y3gtPnBjaV9kZXYsCiAJCQkJYnVmLT5idWYsIHMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQljeDE4X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJY3gxOF9lbnF1ZXVlKHMsIGJ1ZiwgJnMtPnFfZnJlZSk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAogCS8qIGVtcHR5IHFfZnJlZSAqLwogCXdoaWxlICgoYnVmID0gY3gxOF9kZXF1ZXVlKHMsICZzLT5xX2ZyZWUpKSkgewotCQlwY2lfdW5tYXBfc2luZ2xlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShzLT5jeC0+cGNpX2RldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplLCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaAppbmRleCA0NTZjZWMzLi40ZGUwNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmgKQEAgLTI5LDE0ICsyOSwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2NwdShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGN4MThfYnVmX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCiAJc3RydWN0IGN4MThfYnVmZmVyICpidWYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPmN4LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IDg5YzFlYzkuLjA5MzJiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJjeDE4LXN0cmVhbXMuaCIKICNpbmNsdWRlICJjeDE4LWNhcmRzLmgiCiAjaW5jbHVkZSAiY3gxOC1zY2IuaCIKLSNpbmNsdWRlICJjeDE4LWF2LWNvcmUuaCIKICNpbmNsdWRlICJjeDE4LWR2Yi5oIgogCiAjZGVmaW5lIENYMThfRFNQMF9JTlRFUlJVUFRfTUFTSyAgICAgCTB4ZDAwMDRDCkBAIC0xMDEsMTEgKzEwMCwxMSBAQAogc3RhdGljIHZvaWQgY3gxOF9zdHJlYW1faW5pdChzdHJ1Y3QgY3gxOCAqY3gsIGludCB0eXBlKQogewogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBzLT52NGwyZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldiA9IHMtPnZpZGVvX2RldjsKIAotCS8qIHdlIG5lZWQgdG8ga2VlcCB2NGwyZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KKwkvKiB3ZSBuZWVkIHRvIGtlZXAgdmlkZW9fZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7Ci0Jcy0+djRsMmRldiA9IGRldjsKKwlzLT52aWRlb19kZXYgPSB2aWRlb19kZXY7CiAKIAkvKiBpbml0aWFsaXplIGN4MThfc3RyZWFtIGZpZWxkcyAqLwogCXMtPmN4ID0gY3g7CkBAIC0xMzAsMTIgKzEyOSwxMiBAQAogCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1t0eXBlXTsKIAl1MzIgY2FwID0gY3gtPnY0bDJfY2FwOwogCWludCBudW1fb2Zmc2V0ID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwotCWludCBudW0gPSBjeC0+bnVtICsgY3gxOF9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CisJaW50IG51bSA9IGN4LT5pbnN0YW5jZSArIGN4MThfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OwogCi0JLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdjRsMmRldiA9PSBOVUxMLCB0aGVuCisJLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdmlkZW9fZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAlzLT5jeCA9IGN4OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xNjMsMjIgKzE2MiwyMiBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCkgewogCQlDWDE4X0VSUigiQ291bGRuJ3QgYWxsb2NhdGUgdjRsMiB2aWRlb19kZXZpY2UgZm9yICVzXG4iLAogCQkJCXMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICJjeDE4LSVkIiwKLQkJCWN4LT5udW0pOworCXNucHJpbnRmKHMtPnZpZGVvX2Rldi0+bmFtZSwgc2l6ZW9mKHMtPnZpZGVvX2Rldi0+bmFtZSksICIlcyAlcyIsCisJCSBjeC0+djRsMl9kZXYubmFtZSwgcy0+bmFtZSk7CiAKLQlzLT52NGwyZGV2LT5udW0gPSBudW07Ci0Jcy0+djRsMmRldi0+cGFyZW50ID0gJmN4LT5kZXYtPmRldjsKLQlzLT52NGwyZGV2LT5mb3BzID0gJmN4MThfdjRsMl9lbmNfZm9wczsKLQlzLT52NGwyZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0Jcy0+djRsMmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKLQljeDE4X3NldF9mdW5jcyhzLT52NGwyZGV2KTsKKwlzLT52aWRlb19kZXYtPm51bSA9IG51bTsKKwlzLT52aWRlb19kZXYtPnY0bDJfZGV2ID0gJmN4LT52NGwyX2RldjsKKwlzLT52aWRlb19kZXYtPmZvcHMgPSAmY3gxOF92NGwyX2VuY19mb3BzOworCXMtPnZpZGVvX2Rldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXMtPnZpZGVvX2Rldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwljeDE4X3NldF9mdW5jcyhzLT52aWRlb19kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjcsMjggKzIyNiwzMCBAQAogCQl9CiAJfQogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KIAlpZiAodHlwZSAhPSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzX21wZyA9ICZjeC0+c3RyZWFtc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmlkZW9fZGV2KQorCQkJbnVtID0gc19tcGctPnZpZGVvX2Rldi0+bnVtCisJCQkgICAgKyBjeDE4X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQorCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZpZGVvX2Rldiwgcyk7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UuIEZpcnN0IHRyeSB0aGUgZGVzaXJlZCBtaW5vciwgdGhlbiBhbnkgZnJlZSBvbmUuICovCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pOworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52aWRlb19kZXYsIHZmbF90eXBlLCBudW0pOwogCWlmIChyZXQgPCAwKSB7CiAJCUNYMThfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCXMtPm5hbWUsIG51bSk7Ci0JCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnY0bDJkZXYpOwotCQlzLT52NGwyZGV2ID0gTlVMTDsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+dmlkZW9fZGV2KTsKKwkJcy0+dmlkZW9fZGV2ID0gTlVMTDsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JbnVtID0gcy0+djRsMmRldi0+bnVtOworCW51bSA9IHMtPnZpZGVvX2Rldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKQEAgLTMxMiw5ICszMTMsOSBAQAogCQkJY3gtPnN0cmVhbXNbdHlwZV0uZHZiLmVuYWJsZWQgPSBmYWxzZTsKIAkJfQogCi0JCXZkZXYgPSBjeC0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQl2ZGV2ID0gY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2OwogCi0JCWN4LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQljeC0+c3RyZWFtc1t0eXBlXS52aWRlb19kZXYgPSBOVUxMOwogCQlpZiAodmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM0Niw0NiArMzQ3LDg4IEBACiAJfQogCiAJLyogc2V0dXAgVkJJIHJlZ2lzdGVycyAqLwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsICZjeC0+dmJpLmluKTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfZm10LCAmY3gtPnZiaS5pbik7CiAKLQkvKiBkZXRlcm1pbmUgbnVtYmVyIG9mIGxpbmVzIGFuZCB0b3RhbCBudW1iZXIgb2YgVkJJIGJ5dGVzLgotCSAgIEEgcmF3IGxpbmUgdGFrZXMgMTQ0NCBieXRlczogNCBieXRlIFNBViBjb2RlICsgMiAqIDcyMAotCSAgIEEgc2xpY2VkIGxpbmUgdGFrZXMgNTEgYnl0ZXM6IDQgYnl0ZSBmcmFtZSBoZWFkZXIsIDQgYnl0ZSBpbnRlcm5hbAotCSAgIGhlYWRlciwgNDIgZGF0YSBieXRlcyArIGNoZWNrc3VtICh0byBiZSBjb25maXJtZWQpICovCisJLyoKKwkgKiBTZW5kIHRoZSBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSBBUEkgY29tbWFuZCB0byBzZXR1cCBFbmNvZGVyIFJhdworCSAqIFZCSSB3aGVuIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSBjaGFubmVsIHN0YXJ0cywgYXMgb25jZSBpdCBzdGFydHMKKwkgKiAoZS5nLiBNUEVHKSwgd2UgY2FuJ3QgZWZmZWN0IGFueSBjaGFuZ2UgaW4gdGhlIEVuY29kZXIgUmF3IFZCSSBzZXR1cAorCSAqIChpLmUuIGZvciB0aGUgVkJJIGNhcHR1cmUgY2hhbm5lbHMpLiAgV2UgYWxzbyBzZW5kIGl0IGZvciBlYWNoCisJICogYW5hbG9nIGNhcHR1cmUgY2hhbm5lbCBhbnl3YXkganVzdCB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSBwcm9wZXIKKwkgKiBiZWhhdmlvcgorCSAqLwogCWlmIChyYXcpIHsKIAkJbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl9IGVsc2UgewotCQlsaW5lcyA9IGN4LT5pc182MGh6ID8gMjQgOiAzODsKLQkJaWYgKGN4LT5pc182MGh6KQotCQkJbGluZXMgKz0gMjsKKwkJLyoKKwkJICogRm9yIDUyNS82MCBzeXN0ZW1zLCBhY2NvcmRpbmcgdG8gdGhlIFZJUCAyICYgQlQuNjU2IHN0ZDoKKwkJICogVGhlIEVBViBSUCBjb2RlJ3MgRmllbGQgYml0IHRvZ2dsZXMgb24gbGluZSA0LCBhIGZldyBsaW5lcworCQkgKiBhZnRlciB0aGUgVmVydGNhbCBCbGFuayBiaXQgaGFzIGFscmVhZHkgdG9nZ2xlZC4KKwkJICogVGVsbCB0aGUgZW5jb2RlciB0byBjYXB0dXJlIDIxLTQrMT0xOCBsaW5lcyBwZXIgZmllbGQsCisJCSAqIHNpbmNlIHdlIHdhbnQgbGluZXMgMTAgdGhyb3VnaCAyMS4KKwkJICoKKwkJICogRklYTUUgLSByZXZpc2l0IGZvciA2MjUvNTAgc3lzdGVtcworCQkgKi8KKwkJbGluZXMgPSBjeC0+aXNfNjBoeiA/ICgyMSAtIDQgKyAxKSAqIDIgOiAzODsKIAl9CiAKLQljeC0+dmJpLmVuY19zaXplID0gbGluZXMgKgotCQkocmF3ID8gY3gtPnZiaS5yYXdfc2l6ZSA6IGN4LT52Ymkuc2xpY2VkX3NpemUpOwotCiAJZGF0YVswXSA9IHMtPmhhbmRsZTsKIAkvKiBMaW5lcyBwZXIgZmllbGQgKi8KIAlkYXRhWzFdID0gKGxpbmVzIC8gMikgfCAoKGxpbmVzIC8gMikgPDwgMTYpOwogCS8qIGJ5dGVzIHBlciBsaW5lICovCi0JZGF0YVsyXSA9IChyYXcgPyBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZQotCQkgICAgICAgOiBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSk7CisJZGF0YVsyXSA9IChyYXcgPyB2YmlfYWN0aXZlX3NhbXBsZXMKKwkJICAgICAgIDogKGN4LT5pc182MGh6ID8gdmJpX2hibGFua19zYW1wbGVzXzYwSHoKKwkJCQkgICAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6KSk7CiAJLyogRXZlcnkgWCBudW1iZXIgb2YgZnJhbWVzIGEgVkJJIGludGVycnVwdCBhcnJpdmVzCiAJICAgKGZyYW1lcyBhcyBpbiAyNSBvciAzMCBmcHMpICovCiAJZGF0YVszXSA9IDE7Ci0JLyogU2V0dXAgVkJJIGZvciB0aGUgY3gyNTg0MCBkaWdpdGl6ZXIgKi8KKwkvKgorCSAqIFNldCB0aGUgU0FWL0VBViBSUCBjb2RlcyB0byBsb29rIGZvciBhcyBzdGFydC9zdG9wIHBvaW50cworCSAqIHdoZW4gaW4gVklQLTEuMSBtb2RlCisJICovCiAJaWYgKHJhdykgeworCQkvKgorCQkgKiBTdGFydCBjb2RlcyBmb3IgYmVnaW5uaW5nIG9mICJhY3RpdmUiIGxpbmUgaW4gdmVydGljYWwgYmxhbmsKKwkJICogMHgyMCAoICAgICAgICAgICAgICAgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqIDB4NjAgKCAgICAgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgICAgICAgICAgICAgICAgKQorCQkgKi8KIAkJZGF0YVs0XSA9IDB4MjA2MDIwNjA7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgZW5kIG9mICJhY3RpdmUiIHJhdyBsaW5lcyBhbmQgcmVndWxhciBsaW5lcworCQkgKiAweDMwICggICAgICAgICAgICAgICBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuaykKKwkJICogMHg3MCAoICAgICBFdmVuRmllbGQgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICovCiAJCWRhdGFbNV0gPSAweDMwNzA5MGQwOwogCX0gZWxzZSB7CisJCS8qCisJCSAqIEVuZCBjb2RlcyBmb3IgYWN0aXZlIHZpZGVvLCB3ZSB3YW50IGRhdGEgaW4gdGhlIGhibGFuayByZWdpb24KKwkJICogMHhiMCAoVGFzayAgICAgICAgIDAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4ZjAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rKQorCQkgKgorCQkgKiBTaW5jZSB0aGUgViBiaXQgaXMgb25seSBhbGxvd2VkIHRvIHRvZ2dsZSBpbiB0aGUgRUFWIFJQIGNvZGUsCisJCSAqIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBhY3RpdmUgcmVnaW9uIGxpbmUsIHRoZXNlIHR3bworCQkgKiBhcmUgcHJvYmxlbWF0aWM6CisJCSAqIDB4OTAgKFRhc2sgICAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGQwIChUYXNrIEV2ZW5GaWVsZCAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICoKKwkJICogV2UgaGF2ZSBzZXQgdGhlIGRpZ2l0emVyIHN1Y2ggdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CisJCSAqIGFib3V0IHRoZXNlIHByb2JsZW0gY29kZXMuCisJCSAqLwogCQlkYXRhWzRdID0gMHhCMEYwQjBGMDsKKwkJLyoKKwkJICogU3RhcnQgY29kZXMgZm9yIGJlZ2lubmluZyBvZiBhY3RpdmUgbGluZSBpbiB2ZXJ0aWNhbCBibGFuaworCQkgKiAweGEwIChUYXNrICAgICAgICAgICBWZXJ0aWNhbEJsYW5rICAgICAgICAgICAgICAgICkKKwkJICogMHhlMCAoVGFzayBFdmVuRmllbGQgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqLwogCQlkYXRhWzVdID0gMHhBMEUwQTBFMDsKIAl9CiAKIAlDWDE4X0RFQlVHX0lORk8oIlNldHVwIFZCSSBoOiAlZCBsaW5lcyAleCBicGwgJWQgZnIgJWQgJXggJXhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdLCBkYXRhWzRdLCBkYXRhWzVdKTsKIAotCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkKLQkJY3gxOF9hcGkoY3gsIENYMThfQ1BVX1NFVF9SQVdfVkJJX1BBUkFNLCA2LCBkYXRhKTsKKwljeDE4X2FwaShjeCwgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0sIDYsIGRhdGEpOwogfQogCiBzdHJ1Y3QgY3gxOF9xdWV1ZSAqY3gxOF9zdHJlYW1fcHV0X2J1Zl9mdyhzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMsCkBAIC00MzQsMTAgKzQ3NywxMCBAQAogCXUzMiBkYXRhW01BWF9NQl9BUkdVTUVOVFNdOwogCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OwogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmOwotCWludCB0cyA9IDA7CiAJaW50IGNhcHR5cGUgPSAwOworCXN0cnVjdCBjeDE4X2FwaV9mdW5jX3ByaXZhdGUgcHJpdjsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlDWDE4X0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTQ1Myw3ICs0OTYsNiBAQAogCiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9UUzoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTOwotCQl0cyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWOgogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfWVVWOwpAQCAtNDYyLDggKzUwNCwxNiBAQAogCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfUENNOwogCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSToKKyNpZmRlZiBDWDE4X0VOQ09ERVJfUEFSU0VTX1NMSUNFRAogCQljYXB0eXBlID0gY3gxOF9yYXdfdmJpKGN4KSA/CiAJCSAgICAgQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJIDogQ0FQVFVSRV9DSEFOTkVMX1RZUEVfU0xJQ0VEX1ZCSTsKKyNlbHNlCisJCS8qCisJCSAqIEN1cnJlbnRseSB3ZSBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgU2xpY2VkIFZCSSBmcm9tIHRoZQorCQkgKiBkaWdpdGl6ZXIgaXMgaGFuZGxlZCBhcyBSYXcgVkJJIGJ5IHRoZSBlbmNvZGVyCisJCSAqLworCQljYXB0eXBlID0gQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVkJJOworI2VuZGlmCiAJCWN4LT52YmkuZnJhbWUgPSAwOwogCQljeC0+dmJpLmluc2VydGVkX2ZyYW1lID0gMDsKIAkJbWVtc2V0KGN4LT52Ymkuc2xpY2VkX21wZWdfc2l6ZSwKQEAgLTQ3MywxMCArNTIzLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogbXV0ZS91bm11dGUgdmlkZW8gKi8KLQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9WSURFT19NVVRFLCAyLAotCQkgIHMtPmhhbmRsZSwgISF0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKTsKLQogCS8qIENsZWFyIFN0cmVhbW9mZiBmbGFncyBpbiBjYXNlIGxlZnQgZnJvbSBsYXN0IGNhcHR1cmUgKi8KIAljbGVhcl9iaXQoQ1gxOF9GX1NfU1RSRUFNT0ZGLCAmcy0+c19mbGFncyk7CiAKQEAgLTQ4NCwzMSArNTMwLDYzIEBACiAJcy0+aGFuZGxlID0gZGF0YVswXTsKIAljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9DSEFOTkVMX1RZUEUsIDIsIHMtPmhhbmRsZSwgY2FwdHlwZSk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA9PSAwICYmICF0cykgewotCQlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7Ci0KLQkJLyogU3R1ZmYgZnJvbSBXaW5kb3dzLCB3ZSBkb24ndCBrbm93IHdoYXQgaXQgaXMgKi8KKwkvKgorCSAqIEZvciBldmVyeXRoaW5nIGJ1dCBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUywgcGxheSBpdCBzYWZlIGFuZAorCSAqIHNldCB1cCBhbGwgdGhlIHBhcmFtZXRlcnMsIGFzIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIHBhcmFtZXRlcnMgdGhlCisJICogZmlybXdhcmUgc2hhcmVzIGFjcm9zcyBjYXB0dXJlIGNoYW5uZWwgdHlwZXMgYW5kIHdoaWNoIGl0IGRvZXMgbm90LgorCSAqCisJICogU29tZSBvZiB0aGUgY3gxOF92YXBpKCkgY2FsbHMgYmVsb3cgYXBwbHkgdG8gb25seSBjZXJ0YWluIGNhcHR1cmUKKwkgKiBjaGFubmVsIHR5cGVzLiAgV2UncmUgaG9waW5nIHRoZXJlJ3Mgbm8gaGFybSBpbiBjYWxsaW5nIG1vc3Qgb2YgdGhlbQorCSAqIGFueXdheSwgYXMgbG9uZyBhcyB0aGUgdmFsdWVzIGFyZSBhbGwgY29uc2lzdGVudC4gIFNldHRpbmcgc29tZQorCSAqIHNoYXJlZCBwYXJhbWV0ZXJzIHdpbGwgaGF2ZSBubyBlZmZlY3Qgb25jZSBhbiBhbmFsb2cgY2FwdHVyZSBjaGFubmVsCisJICogaGFzIHN0YXJ0ZWQgc3RyZWFtaW5nLgorCSAqLworCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKSB7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZFUl9DUk9QX0xJTkUsIDIsIHMtPmhhbmRsZSwgMCk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMywgcy0+aGFuZGxlLCAzLCAxKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAzLCBzLT5oYW5kbGUsIDgsIDApOwogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDMsIHMtPmhhbmRsZSwgNCwgMSk7Ci0JCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwgcy0+aGFuZGxlLCAxMik7CiAKKwkJLyoKKwkJICogQXVkaW8gcmVsYXRlZCByZXNldCBhY2NvcmRpbmcgdG8KKwkJICogRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L2Z3LWVuY29kZXItYXBpLnR4dAorCQkgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPT0gMCkKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMiwKKwkJCQkgIHMtPmhhbmRsZSwgMTIpOworCisJCS8qCisJCSAqIE51bWJlciBvZiBsaW5lcyBmb3IgRmllbGQgMSAmIEZpZWxkIDIgYWNjb3JkaW5nIHRvCisJCSAqIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1lbmNvZGVyLWFwaS50eHQKKwkJICogRmllbGQgMSBpcyAzMTIgZm9yIDYyNSBsaW5lIHN5c3RlbXMgaW4gQlQuNjU2CisJCSAqIEZpZWxkIDIgaXMgMzEzIGZvciA2MjUgbGluZSBzeXN0ZW1zIGluIEJULjY1NgorCQkgKi8KIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQ0FQVFVSRV9MSU5FX05PLCAzLAotCQkJICAgICAgIHMtPmhhbmRsZSwgY3gtPmRpZ2l0aXplciwgY3gtPmRpZ2l0aXplcik7CisJCQkgIHMtPmhhbmRsZSwgMzEyLCAzMTMpOwogCi0JCS8qIFNldHVwIFZCSSAqLwogCQlpZiAoY3gtPnY0bDJfY2FwICYgVjRMMl9DQVBfVkJJX0NBUFRVUkUpCiAJCQljeDE4X3ZiaV9zZXR1cChzKTsKIAotCQkvKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgotCQkgICBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heCAqLworCQkvKgorCQkgKiBhc3NpZ24gcHJvZ3JhbSBpbmRleCBpbmZvLgorCQkgKiBNYXNrIDc6IHNlbGVjdCBJL1AvQiwgTnVtX3JlcTogNDAwIG1heAorCQkgKiBGSVhNRSAtIGN1cnJlbnRseSB3ZSBoYXZlIHRoaXMgaGFyZGNvZGVkIGFzIGRpc2FibGVkCisJCSAqLwogCQljeDE4X3ZhcGlfcmVzdWx0KGN4LCBkYXRhLCBDWDE4X0NQVV9TRVRfSU5ERVhUQUJMRSwgMSwgMCk7CiAKLQkJLyogU2V0dXAgQVBJIGZvciBTdHJlYW0gKi8KKwkJLyogQ2FsbCBvdXQgdG8gdGhlIGNvbW1vbiBDWDIzNDF4IEFQSSBzZXR1cCBmb3IgdXNlciBjb250cm9scyAqLwogCQlwcml2LmN4ID0gY3g7CiAJCXByaXYucyA9IHM7CiAJCWN4MjM0MXhfdXBkYXRlKCZwcml2LCBjeDE4X2FwaV9mdW5jLCBOVUxMLCAmY3gtPnBhcmFtcyk7CisKKwkJLyoKKwkJICogV2hlbiBzdGFydGluZyBhIGNhcHR1cmUgYW5kIHdlJ3JlIHNldCBmb3IgcmFkaW8sCisJCSAqIGVuc3VyZSB0aGUgdmlkZW8gaXMgbXV0ZWQsIGRlc3BpdGUgdGhlIHVzZXIgY29udHJvbC4KKwkJICovCisJCWlmICghY3gtPnBhcmFtcy52aWRlb19tdXRlICYmCisJCSAgICB0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKQorCQkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfVklERU9fTVVURSwgMiwgcy0+aGFuZGxlLAorCQkJCSAgKGN4LT5wYXJhbXMudmlkZW9fbXV0ZV95dXYgPDwgOCkgfCAxKTsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJmN4LT50b3RfY2FwdHVyaW5nKSA9PSAwKSB7CkBAIC01NTIsNyArNjMwLDcgQEAKIAl9CiAKIAkvKiB5b3UncmUgbGl2ZSEgc2l0IGJhY2sgYW5kIGF3YWl0IGludGVycnVwdHMgOikgKi8KLQlpZiAoIXRzKQorCWlmIChjYXB0eXBlICE9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1RTKQogCQlhdG9taWNfaW5jKCZjeC0+YW5hX2NhcHR1cmluZyk7CiAJYXRvbWljX2luYygmY3gtPnRvdF9jYXB0dXJpbmcpOwogCXJldHVybiAwOwpAQCAtNTY1LDcgKzY0Myw3IEBACiAJZm9yIChpID0gQ1gxOF9NQVhfU1RSRUFNUyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChDWDE4X0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKIAkJCWN4MThfc3RvcF92NGwyX2VuY29kZV9zdHJlYW0ocywgMCk7CkBAIC01NzcsNyArNjU1LDcgQEAKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAl1bnNpZ25lZCBsb25nIHRoZW47CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTYyOSw3ICs3MDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ICYmIChzLT5oYW5kbGUgIT0gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFKSkKKwkJaWYgKHMtPnZpZGVvX2RldiAmJiAocy0+aGFuZGxlICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkpCiAJCQlyZXR1cm4gcy0+aGFuZGxlOwogCX0KIAlyZXR1cm4gQ1gxOF9JTlZBTElEX1RBU0tfSEFORExFOwpAQCAtNjQ3LDcgKzcyNSw3IEBACiAJCXMgPSAmY3gtPnN0cmVhbXNbaV07CiAJCWlmIChzLT5oYW5kbGUgIT0gaGFuZGxlKQogCQkJY29udGludWU7Ci0JCWlmIChzLT52NGwyZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQorCQlpZiAocy0+dmlkZW9fZGV2IHx8IHMtPmR2Yi5lbmFibGVkKQogCQkJcmV0dXJuIHM7CiAJfQogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwppbmRleCBmYjU5NWJkLi5jMmFlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuYwpAQCAtMjUsNyArMjUsMTYgQEAKICNpbmNsdWRlICJjeDE4LXZiaS5oIgogI2luY2x1ZGUgImN4MTgtaW9jdGwuaCIKICNpbmNsdWRlICJjeDE4LXF1ZXVlLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCisKKy8qCisgKiBSYXN0ZXIgUmVmZXJlbmNlL1Byb3RlY3Rpb24gKFJQKSBieXRlcywgdXNlZCBpbiBTdGFydC9FbmQgQWN0aXZlCisgKiBWaWRlbyBjb2RlcyBlbWl0dGVkIGZyb20gdGhlIGRpZ2l0emVyIGluIFZJUCAxLnggbW9kZSwgdGhhdCBmbGFnIHRoZSBzdGFydAorICogb2YgVkJJIHNhbXBsZSBvciBWQkkgYW5jaWxsaWFyeSBkYXRhIHJlZ2lvbnMgaW4gdGhlIGRpZ2l0aWFsIHJhdHNlciBsaW5lLgorICoKKyAqIFRhc2sgRmllbGRFdmVuIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDAKKyAqLworc3RhdGljIGNvbnN0IHU4IHJhd192Ymlfc2F2X3JwWzJdID0geyAweDIwLCAweDYwIH07ICAgIC8qIF9fVl8sIF9GVl8gKi8KK3N0YXRpYyBjb25zdCB1OCBzbGljZWRfdmJpX2Vhdl9ycFsyXSA9IHsgMHhiMCwgMHhmMCB9OyAvKiBUX1ZILCBURlZIICovCiAKIHN0YXRpYyB2b2lkIGNvcHlfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBpbnQgbGluZXMsIHUzMiBwdHNfc3RhbXApCiB7CkBAIC0zNCwxMCArNDMsMTcgQEAKIAl1MzIgbGluZW1hc2tbMl0gPSB7IDAsIDAgfTsKIAl1bnNpZ25lZCBzaG9ydCBzaXplOwogCXN0YXRpYyBjb25zdCB1OCBtcGVnX2hkcl9kYXRhW10gPSB7Ci0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsCi0JCTB4MjQsIDB4MDEsIDB4MDEsIDB4ZDEsIDB4ZDMsIDB4ZmEsIDB4ZmYsIDB4ZmYsCi0JCTB4MDAsIDB4MDAsIDB4MDEsIDB4YmQsIDB4MDAsIDB4MWEsIDB4ODQsIDB4ODAsCi0JCTB4MDcsIDB4MjEsIDB4MDAsIDB4NWQsIDB4NjMsIDB4YTcsIDB4ZmYsIDB4ZmYKKwkJLyogTVBFRy0yIFByb2dyYW0gUGFjayAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJhLAkJICAgIC8qIFByb2cgUGFjayBzdGFydCBjb2RlICovCisJCTB4NDQsIDB4MDAsIDB4MGMsIDB4NjYsIDB4MjQsIDB4MDEsIC8qIFNDUiwgU0NSIEV4dCwgbWFya2VycyAqLworCQkweDAxLCAweGQxLCAweGQzLAkJICAgIC8qIE11eCBSYXRlLCBtYXJrZXJzICovCisJCTB4ZmEsIDB4ZmYsIDB4ZmYsCQkgICAgLyogUmVzLCBTdWZmIGNudCwgU3R1ZmYgKi8KKwkJLyogTVBFRy0yIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCAqLworCQkweDAwLCAweDAwLCAweDAxLCAweGJkLAkJICAgIC8qIFByaXYgU3RyZWFtIDEgc3RhcnQgKi8KKwkJMHgwMCwgMHgxYSwJCQkgICAgLyogbGVuZ3RoICovCisJCTB4ODQsIDB4ODAsIDB4MDcsCQkgICAgLyogZmxhZ3MsIGhkciBkYXRhIGxlbiAqLworCQkweDIxLCAweDAwLCAweDVkLCAweDYzLCAweGE3LCAJICAgIC8qIFBUUywgbWFya2VycyAqLworCQkweGZmLCAweGZmCQkJICAgIC8qIHN0dWZmaW5nICovCiAJfTsKIAljb25zdCBpbnQgc2QgPSBzaXplb2YobXBlZ19oZHJfZGF0YSk7CS8qIHN0YXJ0IG9mIHZiaSBkYXRhICovCiAJaW50IGlkeCA9IGN4LT52YmkuZnJhbWUgJSBDWDE4X1ZCSV9GUkFNRVM7CkBAIC03MSw3ICs4Nyw5IEBACiAJCW1lbWNweShkc3QgKyBzZCArIDQsIGRzdCArIHNkICsgMTIsIGxpbmUgKiA0Myk7CiAJCXNpemUgPSA0ICsgKCg0MyAqIGxpbmUgKyAzKSAmIH4zKTsKIAl9IGVsc2UgewotCQltZW1jcHkoZHN0ICsgc2QsICJjeDAiLCA0KTsKKwkJbWVtY3B5KGRzdCArIHNkLCAiaXR2MCIsIDQpOworCQljcHVfdG9fbGUzMnMoJmxpbmVtYXNrWzBdKTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1sxXSk7CiAJCW1lbWNweShkc3QgKyBzZCArIDQsICZsaW5lbWFza1swXSwgOCk7CiAJCXNpemUgPSAxMiArICgoNDMgKiBsaW5lICsgMykgJiB+Myk7CiAJfQpAQCAtODYsNTggKzEwNCw3NiBAQAogfQogCiAvKiBDb21wcmVzcyByYXcgVkJJIGZvcm1hdCwgcmVtb3ZlcyBsZWFkaW5nIFNBViBjb2RlcyBhbmQgc3VycGx1cyBzcGFjZQotICAgYWZ0ZXIgdGhlIGZpZWxkLgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplLiAqLwotc3RhdGljIHUzMiBjb21wcmVzc19yYXdfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUpCisgICBhZnRlciB0aGUgZnJhbWUuICBSZXR1cm5zIG5ldyBjb21wcmVzc2VkIHNpemUuICovCitzdGF0aWMgdTMyIGNvbXByZXNzX3Jhd19idWYoc3RydWN0IGN4MTggKmN4LCB1OCAqYnVmLCB1MzIgc2l6ZSwgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnJhd19kZWNvZGVyX2xpbmVfc2l6ZTsKLQl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50OwotCXU4IHNhdjEgPSBjeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9vZGRfZmllbGQ7Ci0JdTggc2F2MiA9IGN4LT52YmkucmF3X2RlY29kZXJfc2F2X2V2ZW5fZmllbGQ7CisJdTMyIGxpbmVfc2l6ZSA9IHZiaV9hY3RpdmVfc2FtcGxlczsKKwl1MzIgbGluZXMgPSBjeC0+dmJpLmNvdW50ICogMjsKIAl1OCAqcSA9IGJ1ZjsKIAl1OCAqcDsKIAlpbnQgaTsKIAorCS8qIFNraXAgdGhlIGhlYWRlciAqLworCWJ1ZiArPSBoZHJfc2l6ZTsKKwogCWZvciAoaSA9IDA7IGkgPCBsaW5lczsgaSsrKSB7CiAJCXAgPSBidWYgKyBpICogbGluZV9zaXplOwogCiAJCS8qIExvb2sgZm9yIFNBViBjb2RlICovCiAJCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8Ci0JCSAgICAocFszXSAhPSBzYXYxICYmIHBbM10gIT0gc2F2MikpCisJCSAgICAocFszXSAhPSByYXdfdmJpX3Nhdl9ycFswXSAmJgorCQkgICAgIHBbM10gIT0gcmF3X3ZiaV9zYXZfcnBbMV0pKQogCQkJYnJlYWs7Ci0JCW1lbWNweShxLCBwICsgNCwgbGluZV9zaXplIC0gNCk7Ci0JCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJaWYgKGkgPT0gbGluZXMgLSAxKSB7CisJCQkvKiBsYXN0IGxpbmUgaXMgaGRyX3NpemUgYnl0ZXMgc2hvcnQgLSBleHRyYXBvbGF0ZSBpdCAqLworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemUpOworCQkJcSArPSBsaW5lX3NpemUgLSA0IC0gaGRyX3NpemU7CisJCQlwICs9IGxpbmVfc2l6ZSAtIGhkcl9zaXplIC0gMTsKKwkJCW1lbXNldChxLCAoaW50KSAqcCwgaGRyX3NpemUpOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHEsIHAgKyA0LCBsaW5lX3NpemUgLSA0KTsKKwkJCXEgKz0gbGluZV9zaXplIC0gNDsKKwkJfQogCX0KIAlyZXR1cm4gbGluZXMgKiAobGluZV9zaXplIC0gNCk7CiB9CiAKLQotLyogQ29tcHJlc3NlZCBWQkkgZm9ybWF0LCBhbGwgZm91bmQgc2xpY2VkIGJsb2NrcyBwdXQgbmV4dCB0byBvbmUgYW5vdGhlcgotICAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplICovCi1zdGF0aWMgdTMyIGNvbXByZXNzX3NsaWNlZF9idWYoc3RydWN0IGN4MTggKmN4LCB1MzIgbGluZSwgdTggKmJ1ZiwKLQkJCSAgICAgICB1MzIgc2l6ZSwgdTggc2F2KQorc3RhdGljIHUzMiBjb21wcmVzc19zbGljZWRfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUsCisJCQkgICAgICAgY29uc3QgdTMyIGhkcl9zaXplKQogewotCXUzMiBsaW5lX3NpemUgPSBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZTsKIAlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgdmJpOwogCWludCBpOworCXUzMiBsaW5lID0gMDsKKwl1MzIgbGluZV9zaXplID0gY3gtPmlzXzYwaHogPyB2YmlfaGJsYW5rX3NhbXBsZXNfNjBIegorCQkJCSAgICA6IHZiaV9oYmxhbmtfc2FtcGxlc181MEh6OwogCiAJLyogZmluZCB0aGUgZmlyc3QgdmFsaWQgbGluZSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIGJ1ZisrKSB7Ci0JCWlmIChidWZbMF0gPT0gMHhmZiAmJiAhYnVmWzFdICYmICFidWZbMl0gJiYgYnVmWzNdID09IHNhdikKKwlmb3IgKGkgPSBoZHJfc2l6ZSwgYnVmICs9IGhkcl9zaXplOyBpIDwgc2l6ZTsgaSsrLCBidWYrKykgeworCQlpZiAoYnVmWzBdID09IDB4ZmYgJiYgIWJ1ZlsxXSAmJiAhYnVmWzJdICYmCisJCSAgICAoYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzBdIHx8CisJCSAgICAgYnVmWzNdID09IHNsaWNlZF92YmlfZWF2X3JwWzFdKSkKIAkJCWJyZWFrOwogCX0KIAotCXNpemUgLT0gaTsKKwkvKgorCSAqIFRoZSBsYXN0IGxpbmUgaXMgc2hvcnQgYnkgaGRyX3NpemUgYnl0ZXMsIGJ1dCBmb3IgdGhlIHJlbWFpbmluZworCSAqIGNoZWNrcyBhZ2FpbnN0IHNpemUsIHdlIHByZXRlbmQgdGhhdCBpdCBpcyBub3QsIGJ5IGNvdW50aW5nIHRoZQorCSAqIGhlYWRlciBieXRlcyB3ZSBrbm93aW5nbHkgc2tpcHBlZAorCSAqLworCXNpemUgLT0gKGkgLSBoZHJfc2l6ZSk7CiAJaWYgKHNpemUgPCBsaW5lX3NpemUpCiAJCXJldHVybiBsaW5lOworCiAJZm9yIChpID0gMDsgaSA8IHNpemUgLyBsaW5lX3NpemU7IGkrKykgewogCQl1OCAqcCA9IGJ1ZiArIGkgKiBsaW5lX3NpemU7CiAKLQkJLyogTG9vayBmb3IgU0FWIGNvZGUgICovCi0JCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8IHBbM10gIT0gc2F2KQorCQkvKiBMb29rIGZvciBFQVYgY29kZSAgKi8KKwkJaWYgKHBbMF0gIT0gMHhmZiB8fCBwWzFdIHx8IHBbMl0gfHwKKwkJICAgIChwWzNdICE9IHNsaWNlZF92YmlfZWF2X3JwWzBdICYmCisJCSAgICAgcFszXSAhPSBzbGljZWRfdmJpX2Vhdl9ycFsxXSkpCiAJCQljb250aW51ZTsKIAkJdmJpLnAgPSBwICsgNDsKLQkJY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCAmdmJpKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBkZWNvZGVfdmJpX2xpbmUsICZ2YmkpOwogCQlpZiAodmJpLnR5cGUpIHsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uaWQgPSB2YmkudHlwZTsKIAkJCWN4LT52Ymkuc2xpY2VkX2RhdGFbbGluZV0uZmllbGQgPSB2YmkuaXNfc2Vjb25kX2ZpZWxkOwpAQCAtMTUwLDUxICsxODYsNTYgQEAKIH0KIAogdm9pZCBjeDE4X3Byb2Nlc3NfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKLQkJCSAgIHU2NCBwdHNfc3RhbXAsIGludCBzdHJlYW10eXBlKQorCQkJICAgaW50IHN0cmVhbXR5cGUpCiB7CisJLyoKKwkgKiBUaGUgQ1gyMzQxOCBwcm92aWRlcyBhIDEyIGJ5dGUgaGVhZGVyIGluIGl0cyByYXcgVkJJIGJ1ZmZlcnMgdG8gdXM6CisJICogMHgzZmZmZmZmZiBbNCBieXRlcyBvZiBzb21ldGhpbmddIFs0IGJ5dGUgcHJlc2VudGF0aW9uIHRpbWUgc3RhbXBdCisJICovCisJc3RydWN0IHZiaV9kYXRhX2hkciB7CisJCV9fYmUzMiBtYWdpYzsKKwkJX19iZTMyIHVua25vd247CisJCV9fYmUzMiBwdHM7CisJfSAqaGRyID0gKHN0cnVjdCB2YmlfZGF0YV9oZHIgKikgYnVmLT5idWY7CisKIAl1OCAqcCA9ICh1OCAqKSBidWYtPmJ1ZjsKIAl1MzIgc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkOworCXUzMiBwdHM7CiAJaW50IGxpbmVzOwogCiAJaWYgKHN0cmVhbXR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIFRoZSBDWDIzNDE4IHNlbmRzIHVzIGRhdGEgdGhhdCBpcyAzMiBiaXQgbGl0dGxlLWVuZGlhbiBzd2FwcGVkLAorCSAqIGJ1dCB3ZSB3YW50IHRoZSByYXcgVkJJIGJ5dGVzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgaW4gdGhlIHJhc3RlcgorCSAqIGxpbmUuICBUaGlzIGhhcyBhIHNpZGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgaGVhZGVyIGJpZyBlbmRpYW4KKwkgKi8KKwljeDE4X2J1Zl9zd2FwKGJ1Zik7CisKIAkvKiBSYXcgVkJJIGRhdGEgKi8KIAlpZiAoY3gxOF9yYXdfdmJpKGN4KSkgewotCQl1OCB0eXBlOwogCi0JCWN4MThfYnVmX3N3YXAoYnVmKTsKKwkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0KKwkJICAgICBjb21wcmVzc19yYXdfYnVmKGN4LCBwLCBzaXplLCBzaXplb2Yoc3RydWN0IHZiaV9kYXRhX2hkcikpOwogCi0JCS8qIFNraXAgMTIgYnl0ZXMgb2YgaGVhZGVyIHRoYXQgZ2V0cyBzdHVmZmVkIGluICovCi0JCXNpemUgLT0gMTI7Ci0JCW1lbWNweShwLCAmYnVmLT5idWZbMTJdLCBzaXplKTsKLQkJdHlwZSA9IHBbM107Ci0KLQkJc2l6ZSA9IGJ1Zi0+Ynl0ZXN1c2VkID0gY29tcHJlc3NfcmF3X2J1ZihjeCwgcCwgc2l6ZSk7Ci0KLQkJLyogc2Vjb25kIGZpZWxkIG9mIHRoZSBmcmFtZT8gKi8KLQkJaWYgKHR5cGUgPT0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCkgewotCQkJLyogRGlydHkgaGFjayBuZWVkZWQgZm9yIGJhY2t3YXJkcwotCQkJICAgY29tcGF0aWJpbGl0eSBvZiBvbGQgVkJJIHNvZnR3YXJlLiAqLwotCQkJcCArPSBzaXplIC0gNDsKLQkJCW1lbWNweShwLCAmY3gtPnZiaS5mcmFtZSwgNCk7Ci0JCQljeC0+dmJpLmZyYW1lKys7Ci0JCX0KKwkJLyoKKwkJICogSGFjayBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgVkJJIHNvZnR3YXJlLgorCQkgKiBXcml0ZSB0aGUgZnJhbWUgIyBhdCB0aGUgbGFzdCA0IGJ5dGVzIG9mIHRoZSBmcmFtZQorCQkgKi8KKwkJcCArPSBzaXplIC0gNDsKKwkJbWVtY3B5KHAsICZjeC0+dmJpLmZyYW1lLCA0KTsKKwkJY3gtPnZiaS5mcmFtZSsrOwogCQlyZXR1cm47CiAJfQogCiAJLyogU2xpY2VkIFZCSSBkYXRhIHdpdGggZGF0YSBpbnNlcnRpb24gKi8KLQljeDE4X2J1Zl9zd2FwKGJ1Zik7CiAKLQkvKiBmaXJzdCBmaWVsZCAqLwotCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgMCwgcCwgc2l6ZSAvIDIsCi0JCQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQpOwotCS8qIHNlY29uZCBmaWVsZCAqLwotCS8qIGV4cGVyaW1lbnRhdGlvbiBzaG93cyB0aGF0IHRoZSBzZWNvbmQgaGFsZiBkb2VzIG5vdCBhbHdheXMKLQkgICBiZWdpbiBhdCB0aGUgZXhhY3QgYWRkcmVzcy4gU28gc3RhcnQgYSBiaXQgZWFybGllcgotCSAgIChoZW5jZSAzMikuICovCi0JbGluZXMgPSBjb21wcmVzc19zbGljZWRfYnVmKGN4LCBsaW5lcywgcCArIHNpemUgLyAyIC0gMzIsCi0JCQlzaXplIC8gMiArIDMyLCBjeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkKTsKKwlwdHMgPSAoYmUzMl90b19jcHUoaGRyLT5tYWdpYykgPT0gMHgzZmZmZmZmZikgPyBiZTMyX3RvX2NwdShoZHItPnB0cykKKwkJCQkJCSAgICAgIDogMDsKKworCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgcCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCB2YmlfZGF0YV9oZHIpKTsKKwogCS8qIGFsd2F5cyByZXR1cm4gYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgKi8KIAlpZiAobGluZXMgPT0gMCkgewogCQljeC0+dmJpLnNsaWNlZF9kYXRhWzBdLmlkID0gMDsKQEAgLTIwNiw2ICsyNDcsNiBAQAogCW1lbWNweShwLCAmY3gtPnZiaS5zbGljZWRfZGF0YVswXSwgc2l6ZSk7CiAKIAlpZiAoY3gtPnZiaS5pbnNlcnRfbXBlZykKLQkJY29weV92YmlfZGF0YShjeCwgbGluZXMsIHB0c19zdGFtcCk7CisJCWNvcHlfdmJpX2RhdGEoY3gsIGxpbmVzLCBwdHMpOwogCWN4LT52YmkuZnJhbWUrKzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKaW5kZXggYzU2ZmY3ZC4uZTdlMWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmgKQEAgLTIyLDUgKzIyLDUgQEAKICAqLwogCiB2b2lkIGN4MThfcHJvY2Vzc192YmlfZGF0YShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmLAotCQkJICAgdTY0IHB0c19zdGFtcCwgaW50IHN0cmVhbXR5cGUpOworCQkJICAgaW50IHN0cmVhbXR5cGUpOwogaW50IGN4MThfdXNlZF9saW5lKHN0cnVjdCBjeDE4ICpjeCwgaW50IGxpbmUsIGludCBmaWVsZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKaW5kZXggODRjMGZmMS4uYmQ5YmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaApAQCAtMjQsOCArMjQsOCBAQAogCiAjZGVmaW5lIENYMThfRFJJVkVSX05BTUUgImN4MTgiCiAjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQotI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SIDAKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDQKKyNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAxCisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCiAKICNkZWZpbmUgQ1gxOF9WRVJTSU9OIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IpICIuIiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01JTk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKENYMThfRFJJVkVSX1ZFUlNJT05fTUFKT1IsIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12aWRlby5jCmluZGV4IDJlNWM0MTkuLjZmZGFkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmlkZW8uYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKICNpbmNsdWRlICJjeDE4LXZpZGVvLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogCiB2b2lkIGN4MThfdmlkZW9fc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCkKQEAgLTMyLDcgKzMxLDcgQEAKIAogCXJvdXRlLmlucHV0ID0gY3gtPmNhcmQtPnZpZGVvX2lucHV0c1tpbnBdLnZpZGVvX2lucHV0OwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJdHlwZSA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS52aWRlb190eXBlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAppbmRleCA2MDFmM2EyLi45OTU2YWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKQEAgLTU2LDYgKzU2LDIyIEBACiAjZGVmaW5lIEFQVV9DTURfTUFTSyAJCQkJMHgxMDAwMDAwMAogI2RlZmluZSBBUFVfQ01EX01BU0tfQUNLIAkJCShBUFVfQ01EX01BU0sgfCAweDgwMDAwMDAwKQogCisjZGVmaW5lIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHCQkoMCA8PCAyOCkKKyNkZWZpbmUgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX0FDMwkJKDEgPDwgMjgpCisKKy8qIERlc2NyaXB0aW9uOiBDb21tYW5kIEFQVSB0byBzdGFydCBhdWRpbworICAgSU5bMF0gLSBhdWRpbyBwYXJhbWV0ZXJzIChzYW1lIGFzIENYMThfQ1BVX1NFVF9BVURJT19QQVJBTUVURVJTPykKKyAgIElOWzFdIC0gY2FsbGVyIGJ1ZmZlciBhZGRyZXNzLCBvciAwCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCisjZGVmaW5lIENYMThfQVBVX1NUQVJUCQkJCShBUFVfQ01EX01BU0sgfCAweDAxKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gc3RvcCBhdWRpbworICAgSU5bMF0gLSBlbmNvZGluZyBtZXRob2QgdG8gc3RvcAorICAgUmV0dXJuQ29kZSAtID8/PyAqLworI2RlZmluZSBDWDE4X0FQVV9TVE9QCQkJCShBUFVfQ01EX01BU0sgfCAweDAyKQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gcmVzZXQgdGhlIEFJCisgICBSZXR1cm5Db2RlIC0gPz8/ICovCiAjZGVmaW5lIENYMThfQVBVX1JFU0VUQUkgCQkJKEFQVV9DTURfTUFTSyB8IDB4MDUpCiAKIC8qIERlc2NyaXB0aW9uOiBUaGlzIGNvbW1hbmQgaW5kaWNhdGVzIHRoYXQgYSBNZW1vcnkgRGVzY3JpcHRvciBMaXN0IGhhcyBiZWVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCmluZGV4IGNiYmU0N2YuLjhkZWQ1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGN4MjM0MXggLSBnZW5lcmljIGNvZGUgZm9yIGN4MjM0MTUvNiBiYXNlZCBkZXZpY2VzCisgKiBjeDIzNDF4IC0gZ2VuZXJpYyBjb2RlIGZvciBjeDIzNDE1LzYvOCBiYXNlZCBkZXZpY2VzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgogICoKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxtZWRpYS9jeDIzNDF4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJjeDIzNDE1LzYgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oImN4MjM0MTUvNi84IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTM4LDYgKzM4LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3gyMzQxeF9tcGVnX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfTVBFR19DTEFTUywKIAlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtNTAsNiArNTEsNyBAQAogCVY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMsCiAJVjRMMl9DSURfTVBFR19BVURJT19DUkMsCiAJVjRMMl9DSURfTVBFR19BVURJT19NVVRFLAorCVY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUsCiAJVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORywKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCwKIAlWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTLApAQCAtOTQsNiArOTYsNyBAQAogCS5hdWRpb19zYW1wbGluZ19mcmVxID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAsCiAJLmF1ZGlvX2VuY29kaW5nID0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJLmF1ZGlvX2wyX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLLAorCS5hdWRpb19hYzNfYml0cmF0ZSA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yMjRLLAogCS5hdWRpb19tb2RlID0gVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAogCS5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAogCS5hdWRpb19lbXBoYXNpcyA9IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLApAQCAtMTQ4LDYgKzE1MSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19hYzNfYml0cmF0ZTsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CiAJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdWRpb19tb2RlOwogCQlicmVhazsKQEAgLTI1Niw2ICsyNjIsMTIgQEAKIAkJcGFyYW1zLT5hdWRpb19zYW1wbGluZ19mcmVxID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJaWYgKGJ1c3kpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKQorCQkJaWYgKGN0cmwtPnZhbHVlICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yICYmCisJCQkgICAgY3RybC0+dmFsdWUgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlyZXR1cm4gLUVSQU5HRTsKIAkJcGFyYW1zLT5hdWRpb19lbmNvZGluZyA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKQEAgLTI2Myw2ICsyNzUsMTMgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCXBhcmFtcy0+YXVkaW9fbDJfYml0cmF0ZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmIChidXN5KQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKCEocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQlwYXJhbXMtPmF1ZGlvX21vZGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CkBAIC00ODEsMjkgKzUwMCwxMDYgQEAKIAlpbnQgZXJyOwogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIDEsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkkpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FLAorCQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViwgMSwKKwkJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOworCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsIDEsCisJCQkJZGVmYXVsdF9wYXJhbXMuc3RyZWFtX3ZiaV9mbXQpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19BQzMpIHsKKwkJCS8qCisJCQkgKiBUaGUgc3RhdGUgb2YgTDIgJiBBQzMgYml0cmF0ZSBjb250cm9scyBjYW4gY2hhbmdlCisJCQkgKiB3aGVuIHRoaXMgY29udHJvbCBjaGFuZ2VzLCBidXQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoKQorCQkJICogYWxyZWFkeSBzZXRzIFY0TDJfQ1RSTF9GTEFHX1VQREFURSBmb3IKKwkJCSAqIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcsIHNvIHdlIGRvbid0IGhlcmUuCisJCQkgKi8KKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCisJCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2VuY29kaW5nKTsKKwkJfQorCiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwKIAkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwgMSwKIAkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19lbmNvZGluZyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLLAogCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEssIDEsCiAJCQkJZGVmYXVsdF9wYXJhbXMuYXVkaW9fbDJfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzICYmCisJCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQlyZXR1cm4gMDsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PLCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80LAorCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCk7CiAJCWlmIChlcnIgPT0gMCAmJgogCQkgICAgcGFyYW1zLT5hdWRpb19tb2RlICE9IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcsIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0NSQzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX0NSQzE2LCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SywgMSwKKwkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19hYzNfYml0cmF0ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSB7CisJCQlpZiAocGFyYW1zLT5hdWRpb19lbmNvZGluZyAhPQorCQkJCQkJICAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCX0gZWxzZQorCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOworCQlyZXR1cm4gMDsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKIAkJLyogdGhpcyBzZXR0aW5nIGlzIHJlYWQtb25seSBmb3IgdGhlIGN4MjM0MXggc2luY2UgdGhlCiAJCSAgIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEUgcmVhbGx5IGRldGVybWluZXMgdGhlCkBAIC01MTYsMzIgKzYxMiw1MSBAQAogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKIAkJcmV0dXJuIGVycjsKIAorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSwKKwkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMzLCAxLCAyKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKKwkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAxKTsKKwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+dmlkZW9fYml0cmF0ZV9tb2RlID09CiAJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6Ci0JCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJKQotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7Ci0JCXJldHVybiBjeDIzNDF4X2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwgMSwKLQkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1fdmJpX2ZtdCk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAwKTsKIAotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAxLCAzNCwgMSwKLQkJCQlwYXJhbXMtPmlzXzUwaHogPyAxMiA6IDE1KTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjogIC8qIEluaXQgWVVWIChyZWFsbHkgWUNiQ3IpIHRvIGJsYWNrICovCisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKIAogCS8qIENYMjM0MTUvNiBzcGVjaWZpYyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6CkBAIC02NDMsNyArNzU4LDcgQEAKIAkJCQlkZWZhdWx0X3BhcmFtcy5zdHJlYW1faW5zZXJ0X25hdl9wYWNrZXRzKTsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCX0KIH0KQEAgLTY3MSw2ICs3ODYsMTUgQEAKIAkJTlVMTAogCX07CiAKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ19sMl9hYzNbXSA9IHsKKwkJIiIsCisJCSJNUEVHLTEvMiBMYXllciBJSSIsCisJCSIiLAorCQkiIiwKKwkJIkFDLTMiLAorCQlOVUxMCisJfTsKKwogCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGVfbWVudVtdID0gewogCQkiTWFudWFsIiwKIAkJIkF1dG8iLApAQCAtNzExLDYgKzgzNSw5IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCQlyZXR1cm4gKHAtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19UUykgPwogCQkJbXBlZ19zdHJlYW1fdHlwZV93aXRoX3RzIDogbXBlZ19zdHJlYW1fdHlwZV93aXRob3V0X3RzOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIChwLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSA/CisJCQltcGVnX2F1ZGlvX2VuY29kaW5nX2wyX2FjMyA6IHY0bDJfY3RybF9nZXRfbWVudShpZCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CiAJCXJldHVybiBOVUxMOwpAQCAtNzMwLDE2ICs4NTcsMzQgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF9jdHJsX2dldF9tZW51KTsKIAorLyogZGVmaW5pdGlvbnMgZm9yIGF1ZGlvIHByb3BlcnRpZXMgYml0cyAyOS0yOCAqLworI2RlZmluZSBDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9NUEVHCTAKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzCTEKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTFBDTQkyCisKIHN0YXRpYyB2b2lkIGN4MjM0MXhfY2FsY19hdWRpb19wcm9wZXJ0aWVzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMpCiB7Ci0JcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0gKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8Ci0JCSgoMyAtIHBhcmFtcy0+YXVkaW9fZW5jb2RpbmcpIDw8IDIpIHwKLQkJKCgxICsgcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlKSA8PCA0KSB8CisJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0KKwkJKHBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA8PCAwKSB8CiAJCShwYXJhbXMtPmF1ZGlvX21vZGUgPDwgOCkgfAogCQkocGFyYW1zLT5hdWRpb19tb2RlX2V4dGVuc2lvbiA8PCAxMCkgfAogCQkoKChwYXJhbXMtPmF1ZGlvX2VtcGhhc2lzID09IFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcpCiAJCSAgPyAzIDogcGFyYW1zLT5hdWRpb19lbXBoYXNpcykgPDwgMTIpIHwKIAkJKHBhcmFtcy0+YXVkaW9fY3JjIDw8IDE0KTsKKworCWlmICgocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSAmJgorCSAgICBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpIHsKKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkvKiBOb3Qgc3VyZSBpZiB0aGlzIE1QRUcgTGF5ZXIgSUkgc2V0dGluZyBpcyByZXF1aXJlZCAqLworCQkJKCgzIC0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpIDw8IDIpIHwKKwkJCShwYXJhbXMtPmF1ZGlvX2FjM19iaXRyYXRlIDw8IDQpIHwKKwkJCShDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9BQzMgPDwgMjgpOworCX0gZWxzZSB7CisJCS8qIEFzc3VtaW5nIE1QRUcgTGF5ZXIgSUkgKi8KKwkJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzIHw9CisJCQkoKDMgLSBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nKSA8PCAyKSB8CisJCQkoKDEgKyBwYXJhbXMtPmF1ZGlvX2wyX2JpdHJhdGUpIDw8IDQpOworCX0KIH0KIAogaW50IGN4MjM0MXhfZXh0X2N0cmxzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMsIGludCBidXN5LApAQCAtMTAyMiw3ICsxMTY3LDEwIEBACiAJCXByZWZpeCwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVRKSwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyksCi0JCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCisJCWN4MjM0MXhfbWVudV9pdGVtKHAsCisJCQkgICBwLT5hdWRpb19lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQkJCSAgICAgID8gVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURQorCQkJCQkgICAgICA6IFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSksCiAJCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSksCiAJCXAtPmF1ZGlvX211dGUgPyAiIChtdXRlZCkiIDogIiIpOwogCWlmIChwLT5hdWRpb19tb2RlID09IFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggMDBmMWUyZS4uZmQzZmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTE1LDEyICsxNSwxNSBAQAogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjEzMSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODg1IGJhc2VkCiAJICBUViBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZQppbmRleCAyOWMyM2I0Li5hYjhlYTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L01ha2VmaWxlCkBAIC0xLDQgKzEsNiBAQAotY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubworY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBcCisJCSAgICBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubyBcCisJCSAgICBuZXR1cC1pbml0Lm8gY2ltYXgyLm8gbmV0dXAtZWVwcm9tLm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM4ODUpICs9IGN4MjM4ODUubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NTM2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuYwpAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIGNpbWF4Mi5jCisgKgorICogQ0lNYXgyKFIpIFNQMiBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVcCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCisvKioqKiBCaXQgZGVmaW5pdGlvbnMgZm9yIE1DNDE3X1JXRCBhbmQgTUM0MTdfT0VOIHJlZ2lzdGVycyAgKioqCisgIGJpdHMgMzEtMTYKKystLS0tLS0tLS0tLSsKK3wgUmVzZXJ2ZWQgIHwKKystLS0tLS0tLS0tLSsKKyAgYml0IDE1ICBiaXQgMTQgIGJpdCAxMyBiaXQgMTIgIGJpdCAxMSAgYml0IDEwICBiaXQgOSAgIGJpdCA4CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworfCAgV1IjICB8ICBSRCMgIHwgICAgICAgfCAgQUNLIyB8ICBBREhJIHwgIEFETE8gfCAgQ1MxIyB8ICBDUzAjIHwKKystLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCisgYml0IDcgICBiaXQgNiAgIGJpdCA1ICAgYml0IDQgICBiaXQgMyAgIGJpdCAyICAgYml0IDEgICBiaXQgMAorKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKK3wgIERBVEE3fCAgREFUQTZ8ICBEQVRBNXwgIERBVEE0fCAgREFUQTN8ICBEQVRBMnwgIERBVEExfCAgREFUQTB8CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworKioqLworLyogTUM0MTcgKi8KKyNkZWZpbmUgTkVUVVBfREFUQQkJMHgwMDAwMDBmZgorI2RlZmluZSBORVRVUF9XUgkJMHgwMDAwODAwMAorI2RlZmluZSBORVRVUF9SRAkJMHgwMDAwNDAwMAorI2RlZmluZSBORVRVUF9BQ0sJCTB4MDAwMDEwMDAKKyNkZWZpbmUgTkVUVVBfQURISQkJMHgwMDAwMDgwMAorI2RlZmluZSBORVRVUF9BRExPCQkweDAwMDAwNDAwCisjZGVmaW5lIE5FVFVQX0NTMQkJMHgwMDAwMDIwMAorI2RlZmluZSBORVRVUF9DUzAJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTkVUVVBfRU5fQUxMCQkweDAwMDAxMDAwCisjZGVmaW5lIE5FVFVQX0NUUkxfT0ZGCQkoTkVUVVBfQ1MxIHwgTkVUVVBfQ1MwIHwgTkVUVVBfV1IgfCBORVRVUF9SRCkKKyNkZWZpbmUgTkVUVVBfQ0lfQ1RMCQkweDA0CisjZGVmaW5lIE5FVFVQX0NJX1JECQkxCisKKworc3RhdGljIHVuc2lnbmVkIGludCBjaV9kYmc7Cittb2R1bGVfcGFyYW0oY2lfZGJnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjaV9kYmcsICJFbmFibGUgQ0kgZGVidWdnaW5nIik7CisKKyNkZWZpbmUgY2lfZGJnX3ByaW50KGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGNpX2RiZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBzdG9yZXMgYWxsIHByaXZhdGUgdmFyaWFibGVzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggQ0kgKi8KK3N0cnVjdCBuZXR1cF9jaV9zdGF0ZSB7CisJc3RydWN0IGR2Yl9jYV9lbjUwMjIxIGNhOworCXN0cnVjdCBtdXRleCBjYV9tdXRleDsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXU4IGNpX2kyY19hZGRyOworCWludCBzdGF0dXM7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBtdXRleCBncGlvX211dGV4Oy8qIFR3byBDaU1heCdzIHVzZXMgc2FtZSBHUElPIGxpbmVzICovCisKK2ludCBuZXR1cF9yZWFkX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IDAsCisJCQkuYnVmCT0gJnJlZywKKwkJCS5sZW4JPSAxCisJCX0sIHsKKwkJCS5hZGRyCT0gYWRkciwKKwkJCS5mbGFncwk9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJCS5sZW4JPSBsZW4KKwkJfQorCX07CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHJlYWQgZXJyb3IsIFJlZyA9IDB4JTAyeCwgU3RhdHVzID0gJWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCisJCXJldHVybiAtMTsKKwl9CisKKwljaV9kYmdfcHJpbnQoIiVzOiBpMmMgcmVhZCBBZGRyPTB4JTA0eCwgUmVnID0gMHglMDJ4LCBkYXRhID0gJTAyeFxuIiwKKwkJCQkJCV9fZnVuY19fLCBhZGRyLCByZWcsIGJ1ZlswXSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX3dyaXRlX2kyYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCByZWcsCisJCQkJCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJdTggYnVmZmVyW2xlbiArIDFdOworCisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IGFkZHIsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSAmYnVmZmVyWzBdLAorCQkubGVuCT0gbGVuICsgMQorCX07CisKKwlidWZmZXJbMF0gPSByZWc7CisJbWVtY3B5KCZidWZmZXJbMV0sIGJ1ZiwgbGVuKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogaTJjIHdyaXRlIGVycm9yLCBSZWc9WzB4JTAyeF0sIFN0YXR1cz0lZFxuIiwKKwkJCQkJCV9fZnVuY19fLCByZWcsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX2NpX2dldF9tZW0oc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCit7CisJaW50IG1lbTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxKTsKKworCWZvciAoOzspIHsKKwkJbWVtID0gY3hfcmVhZChNQzQxN19SV0QpOworCQlpZiAoKG1lbSAmIE5FVFVQX0FDSykgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJY3hfc2V0KE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYpOworCisJcmV0dXJuIG1lbSAmIDB4ZmY7Cit9CisKK2ludCBuZXR1cF9jaV9vcF9jYW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwKKwkJCQl1OCBmbGFnLCB1OCByZWFkLCBpbnQgYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBzdGF0ZS0+cHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKKworCXU4IHN0b3JlOworCWludCBtZW07CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gbmV0dXBfcmVhZF9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkJMCwgJnN0b3JlLCAxKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlzdG9yZSAmPSB+MHgwYzsKKwlzdG9yZSB8PSBmbGFnOworCisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZzdG9yZSwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZ3Bpb19tdXRleCk7CisKKwkvKiB3cml0ZSBhZGRyICovCisJY3hfd3JpdGUoTUM0MTdfT0VOLCBORVRVUF9FTl9BTEwpOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FETE8gfCAoMHhmZiAmIGFkZHIpKTsKKwljeF9jbGVhcihNQzQxN19SV0QsIE5FVFVQX0FETE8pOworCWN4X3dyaXRlKE1DNDE3X1JXRCwgTkVUVVBfQ1RSTF9PRkYgfAorCQkJCU5FVFVQX0FESEkgfCAoMHhmZiAmIChhZGRyID4+IDgpKSk7CisJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BREhJKTsKKworCWlmIChyZWFkKSAvKiBkYXRhIGluICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgTkVUVVBfRU5fQUxMIHwgTkVUVVBfREFUQSk7CisJZWxzZSAvKiBkYXRhIG91dCAqLworCQljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwgZGF0YSk7CisKKwkvKiBjaG9vc2UgY2hpcCAqLworCWN4X2NsZWFyKE1DNDE3X1JXRCwKKwkJCShzdGF0ZS0+Y2lfaTJjX2FkZHIgPT0gMHg0MCkgPyBORVRVUF9DUzAgOiBORVRVUF9DUzEpOworCS8qIHJlYWQvd3JpdGUgKi8KKwljeF9jbGVhcihNQzQxN19SV0QsIChyZWFkKSA/IE5FVFVQX1JEIDogTkVUVVBfV1IpOworCW1lbSA9IG5ldHVwX2NpX2dldF9tZW0oZGV2KTsKKworCW11dGV4X3VubG9jaygmZ3Bpb19tdXRleCk7CisKKwlpZiAoIXJlYWQpCisJCWlmIChtZW0gPCAwKQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisKKwljaV9kYmdfcHJpbnQoIiVzOiAlczogYWRkcj1bMHglMDJ4XSwgJXM9JXhcbiIsIF9fZnVuY19fLAorCQkJKHJlYWQpID8gInJlYWQiIDogIndyaXRlIiwgYWRkciwKKwkJCShmbGFnID09IE5FVFVQX0NJX0NUTCkgPyAiY3RsIiA6ICJtZW0iLAorCQkJKHJlYWQpID8gbWVtIDogZGF0YSk7CisKKwlpZiAocmVhZCkKKwkJcmV0dXJuIG1lbTsKKworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIDAsIE5FVFVQX0NJX1JELCBhZGRyLCAwKTsKK30KKworaW50IG5ldHVwX2NpX3dyaXRlX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIGludCBhZGRyLCB1OCBkYXRhKQoreworCXJldHVybiBuZXR1cF9jaV9vcF9jYW0oZW41MDIyMSwgc2xvdCwgMCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9yZWFkX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCwgdTggYWRkcikKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwKKwkJCQkJCQlORVRVUF9DSV9SRCwgYWRkciwgMCk7Cit9CisKK2ludCBuZXR1cF9jaV93cml0ZV9jYW1fY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsCisJCQkJCQkJdTggYWRkciwgdTggZGF0YSkKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIE5FVFVQX0NJX0NUTCwgMCwgYWRkciwgZGF0YSk7Cit9CisKK2ludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IGVuNTAyMjEtPmRhdGE7CisJdTggYnVmID0gIDB4ODA7CisJaW50IHJldDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJdWRlbGF5KDUwMCk7CisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworCisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJdWRlbGF5KDUwMCk7CisKKwlidWYgPSAweDAwOworCXJldCA9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmLCAxKTsKKworCW1zbGVlcCgxMDAwKTsKKwlkdmJfY2FfZW41MDIyMV9jYW1yZWFkeV9pcnEoJnN0YXRlLT5jYSwgMCk7CisKKwlyZXR1cm4gMDsKKworfQorCitpbnQgbmV0dXBfY2lfc2xvdF9zaHV0ZG93bihzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KQoreworCS8qIG5vdCBpbXBsZW1lbnRlZCAqLworCXJldHVybiAwOworfQorCitpbnQgbmV0dXBfY2lfc2xvdF90c19jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKwl1OCBidWYgPSAweDYwOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWYsIDEpOworfQorCisvKiB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIG5ldHVwX3JlYWRfY2lfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUsIHdvcmspOworCXU4IGJ1ZlszM107CisJaW50IHJldDsKKworCXJldCA9IG5ldHVwX3JlYWRfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZidWZbMF0sIDMzKTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuOworCisJY2lfZGJnX3ByaW50KCIlczogU2xvdCBTdGF0dXMgQWRkcj1bMHglMDR4XSwgUmVnPVsweCUwMnhdLCBkYXRhPSUwMngsICIKKwkJIlRTIGNvbmZpZyA9ICUwMnhcbiIsIF9fZnVuY19fLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsIDAsIGJ1ZlswXSwKKwkJYnVmWzMyXSk7CisKKwlpZiAoYnVmWzBdICYmIDEpCisJCXN0YXRlLT5zdGF0dXMgPSBEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9QUkVTRU5UIHwKKwkJCURWQl9DQV9FTjUwMjIxX1BPTExfQ0FNX1JFQURZOworCWVsc2UKKwkJc3RhdGUtPnN0YXR1cyA9IDA7Cit9CisKKy8qIENJIGlycSBoYW5kbGVyICovCitpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKQoreworCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCA9IE5VTEw7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IE5VTEw7CisKKwlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCXBvcnQgPSAmZGV2LT50czE7CisJZWxzZSBpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzEpCisJCXBvcnQgPSAmZGV2LT50czI7CisJZWxzZSAvKiB3aG8gY2FsbHMgPyAqLworCQlyZXR1cm4gMDsKKworCXN0YXRlID0gcG9ydC0+cG9ydF9wcml2OworCisJc2NoZWR1bGVfd29yaygmc3RhdGUtPndvcmspOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBuZXR1cF9wb2xsX2NpX3Nsb3Rfc3RhdHVzKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsIGludCBvcGVuKQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOworCisJaWYgKDAgIT0gc2xvdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3RhdGUtPnN0YXR1czsKK30KKworaW50IG5ldHVwX2NpX2luaXQoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGU7CisJdTggY2ltYXhfaW5pdFszNF0gPSB7CisJCTB4MDAsIC8qIG1vZHVsZSBBIGNvbnRyb2wqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGhpZ2ggQSAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gaGlnaCBBICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gbG93IEEgKi8KKwkJMHg0NCwgLyogbWVtb3J5IGFjY2VzcyB0aW1lIEEgKi8KKwkJMHgwMCwgLyogaW52ZXJ0IGlucHV0IEEgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBtb2R1bGUgQiBjb250cm9sKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEIgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBsb3cgQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGhpZ2ggQiAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBCICovCisJCTB4NDQsIC8qIG1lbW9yeSBhY2Nlc3MgdGltZSBCICovCisJCTB4MDAsIC8qIGludmVydCBpbnB1dCBCICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBtYXNrIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBoaWdoIEV4dCAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBFeHQgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDIsIC8qIGRlc3RpbmF0aW9uIC0gbW9kdWxlIEEgKi8KKwkJMHgwMSwgLyogcG93ZXIgb24gKHVzZSBpdCBsaWtlIHN0b3JlIHBsYWNlKSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogaW50IHN0YXR1cyByZWFkIG9ubHkgKi8KKwkJMHgwMSwgLyogYWxsIGludCB1bm1hc2tlZCAqLworCQkweDA0LCAvKiBpbnQgY29uZmlnICovCisJCTB4MDAsIC8qIFVTQ0cxICovCisJCTB4MDQsIC8qIGFjayBhY3RpdmUgbG93ICovCisJCTB4MDAsIC8qIExPQ0sgPSAwICovCisJCTB4MzMsIC8qIHNlcmlhbCBtb2RlLCByaXNpbmcgaW4sIHJpc2luZyBvdXQsIE1TQiBmaXJzdCovCisJCTB4MzEsIC8qIHN5bmNyb25pemF0aW9uICovCisJfTsKKwlpbnQgcmV0OworCisJY2lfZGJnX3ByaW50KCIlc1xuIiwgX19mdW5jX18pOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldHVwX2NpX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkgeworCQljaV9kYmdfcHJpbnQoIiVzOiBVbmFibGUgY3JlYXRlIENJIHN0cnVjdHVyZSFcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJcG9ydC0+cG9ydF9wcml2ID0gc3RhdGU7CisKKwlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJY2FzZSAxOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQwOworCQltdXRleF9pbml0KCZncGlvX211dGV4KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzdGF0ZS0+Y2lfaTJjX2FkZHIgPSAweDQxOworCQlicmVhazsKKwl9CisKKwlzdGF0ZS0+aTJjX2FkYXAgPSAmcG9ydC0+ZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwOworCXN0YXRlLT5jYS5vd25lciA9IFRISVNfTU9EVUxFOworCXN0YXRlLT5jYS5yZWFkX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV9yZWFkX2F0dHJpYnV0ZV9tZW07CisJc3RhdGUtPmNhLndyaXRlX2F0dHJpYnV0ZV9tZW0gPSBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS5yZWFkX2NhbV9jb250cm9sID0gbmV0dXBfY2lfcmVhZF9jYW1fY3RsOworCXN0YXRlLT5jYS53cml0ZV9jYW1fY29udHJvbCA9IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGw7CisJc3RhdGUtPmNhLnNsb3RfcmVzZXQgPSBuZXR1cF9jaV9zbG90X3Jlc2V0OworCXN0YXRlLT5jYS5zbG90X3NodXRkb3duID0gbmV0dXBfY2lfc2xvdF9zaHV0ZG93bjsKKwlzdGF0ZS0+Y2Euc2xvdF90c19lbmFibGUgPSBuZXR1cF9jaV9zbG90X3RzX2N0bDsKKwlzdGF0ZS0+Y2EucG9sbF9zbG90X3N0YXR1cyA9IG5ldHVwX3BvbGxfY2lfc2xvdF9zdGF0dXM7CisJc3RhdGUtPmNhLmRhdGEgPSBzdGF0ZTsKKwlzdGF0ZS0+cHJpdiA9IHBvcnQ7CisKKwlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkwLCAmY2ltYXhfaW5pdFswXSwgMzQpOworCS8qIGxvY2sgcmVnaXN0ZXJzICovCisJcmV0IHw9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCTB4MWYsICZjaW1heF9pbml0WzB4MThdLCAxKTsKKwkvKiBwb3dlciBvbiBzbG90cyAqLworCXJldCB8PSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkweDE4LCAmY2ltYXhfaW5pdFsweDE4XSwgMSk7CisKKwlpZiAoMCAhPSByZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gZHZiX2NhX2VuNTAyMjFfaW5pdCgmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIsCisJCQkJICAgJnN0YXRlLT5jYSwKKwkJCQkgICAvKiBmbGFncyAqLyAwLAorCQkJCSAgIC8qIG5fc2xvdHMgKi8gMSk7CisJaWYgKDAgIT0gcmV0KQorCQlnb3RvIGVycjsKKworCUlOSVRfV09SSygmc3RhdGUtPndvcmssIG5ldHVwX3JlYWRfY2lfc3RhdHVzKTsKKworCWNpX2RiZ19wcmludCgiJXM6IENJIGluaXRpYWxpemVkIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIDA7CitlcnI6CisJY2lfZGJnX3ByaW50KCIlczogQ2Fubm90IGluaXRpYWxpemUgQ0k6IEVycm9yICVkLlxuIiwgX19mdW5jX18sIHJldCk7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbmV0dXBfY2lfZXhpdChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZTsKKworCWlmIChOVUxMID09IHBvcnQpCisJCXJldHVybjsKKworCXN0YXRlID0gKHN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqKXBvcnQtPnBvcnRfcHJpdjsKKwlpZiAoTlVMTCA9PSBzdGF0ZSkKKwkJcmV0dXJuOworCisJaWYgKE5VTEwgPT0gc3RhdGUtPmNhLmRhdGEpCisJCXJldHVybjsKKworCWR2Yl9jYV9lbjUwMjIxX3JlbGVhc2UoJnN0YXRlLT5jYSk7CisJa2ZyZWUoc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODc0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGNpbWF4Mi5oCisgKgorICogQ0lNYXgoUikgU1AyIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVwIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgQ0lNQVgyX0gKKyNkZWZpbmUgQ0lNQVgyX0gKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorCitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IGFkZHIpOworZXh0ZXJuIGludCBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkciwgdTggZGF0YSk7CitleHRlcm4gaW50IG5ldHVwX2NpX3JlYWRfY2FtX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgdTggYWRkcik7CitleHRlcm4gaW50IG5ldHVwX2NpX3dyaXRlX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3Jlc2V0KHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3NodXRkb3duKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpOworZXh0ZXJuIGludCBuZXR1cF9jaV9zbG90X3RzX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBwY2lfc3RhdHVzKTsKK2V4dGVybiBpbnQgbmV0dXBfcG9sbF9jaV9zbG90X3N0YXR1cyhzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IG9wZW4pOworZXh0ZXJuIGludCBuZXR1cF9jaV9pbml0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CitleHRlcm4gdm9pZCBuZXR1cF9jaV9leGl0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwppbmRleCBiZmUyNTg0Li42ZjVkZjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS00MTcuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJIkVSUk9SOiBIb3RwbHVnIGZpcm13YXJlIHJlcXVlc3QgZmFpbGVkICglcykuXG4iLAotCQkJQ1gyMzQxWF9GSVJNX0VOQ19GSUxFTkFNRSk7CisJCQlDWDIzODg1X0ZJUk1fSU1BR0VfTkFNRSk7CiAJCXByaW50ayhLRVJOX0VSUiAiUGxlYXNlIGZpeCB5b3VyIGhvdHBsdWcgc2V0dXAsIHRoZSBib2FyZCB3aWxsICIKIAkJCSJub3Qgd29yayB3aXRob3V0IGZpcm13YXJlIGxvYWRlZCFcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0xMTk4LDIxICsxMTk4LDE2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2lucHV0ICppbnB1dDsKLQl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgbjsKIAotCW4gPSBpLT5pbmRleDsKLQotCWlmIChuID49IDQpCisJaWYgKGktPmluZGV4ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbbl07CisJaW5wdXQgPSAmY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uaW5wdXRbaS0+aW5kZXhdOwogCiAJaWYgKGlucHV0LT50eXBlID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKLQogCS8qIEZJWE1FCiAJICogc3RyY3B5KGktPm5hbWUsIGlucHV0LT5uYW1lKTsgKi8KIAlzdHJjcHkoaS0+bmFtZSwgInVuc2V0Iik7CkBAIC0xMjU1LDEwICsxMjUwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAlzdHJjcHkodC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0dfVFVORVIsIHQpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfR19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7CiAKIAlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogdHVuZXIgdHlwZSAlZFxuIiwgdC0+dHlwZSk7CiAKQEAgLTEyNzUsNyArMTI2OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVXBkYXRlIHRoZSBBL1YgY29yZSAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19UVU5FUiwgdCk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyODYsMTQgKzEyNzksMTIgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CiAJaWYgKFVOU0VUID09IGRldi0+dHVuZXJfdHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCWYtPmZyZXF1ZW5jeSA9IGRldi0+ZnJlcTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMjAsOCArMTMxMSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWRldi0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAotCS8qIEFzc3VtcHRpb24gdGhhdCB0dW5lciBpcyBhbHdheXMgb24gYnVzIDEgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAljeDIzODg1X2luaXRpYWxpemVfY29kZWMoZGV2KTsKIApAQCAtMTMzNSw3ICsxMzI1LDcgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKIAkvKiBVcGRhdGUgdGhlIEEvViBjb3JlICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBzX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNDYsNyArMTMzNiw2IEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X3RzcG9ydCAgKnRzcG9ydCA9ICZkZXYtPnRzMTsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBkZXYtPm5hbWUpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBjeDIzODg1X2JvYXJkc1t0c3BvcnQtPmRldi0+Ym9hcmRdLm5hbWUsCiAJCXNpemVvZihjYXAtPmNhcmQpKTsKQEAgLTEzNjYsMTYgKzEzNTUsMTAgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQogewotCWludCBpbmRleDsKLQotCWluZGV4ID0gZi0+aW5kZXg7Ci0JaWYgKGluZGV4ICE9IDApCisJaWYgKGYtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPmluZGV4ID0gaW5kZXg7CiAJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIk1QRUciLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pKTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CiAKIAlyZXR1cm4gMDsKQEAgLTEzODcsOCArMTM3MCw2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQpAQCAtMTQwOCwxMiArMTM4OSwxMCBAQAogCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQogCQlkZXYtPnRzMS50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHMxLnRzX3BhY2tldF9jb3VudDsKLQlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9CiAJZi0+Zm10LnBpeC5jb2xvcnNwYWNlICAgPSAwOwogCWRwcmludGsoMSwgIlZJRElPQ19UUllfRk1UOiB3OiAlZCwgaDogJWQsIGY6ICVkXG4iLAogCQlkZXYtPnRzMS53aWR0aCwgZGV2LT50czEuaGVpZ2h0LCBmaC0+bXBlZ3EuZmllbGQpOwpAQCAtMTQyNiw3ICsxNDA1LDYgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KQEAgLTE1NDMsMTIgKzE1MjEsNyBAQAogCXByaW50ayhLRVJOX0lORk8KIAkJIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCSAgICAgICBkZXYtPm5hbWUpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzBdLCBWSURJT0NfTE9HX1NUQVRVUywKLQkJTlVMTCk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19MT0dfU1RBVFVTLAotCQlOVUxMKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0xPR19TVEFUVVMsCi0JCU5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CiAJY3gyMzQxeF9sb2dfc3RhdHVzKCZkZXYtPm1wZWdfcGFyYW1zLCBuYW1lKTsKIAlwcmludGsoS0VSTl9JTkZPCiAJCSIlcy8yOiA9PT09PT09PT09PT09ICBFTkQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09PVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IGNhYTA5OGIuLjVlNGI3ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgorI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBib2FyZCBjb25maWcgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2Miw2ICsxNjMsMjQgQEAKIAkJLm5hbWUJCT0gIkNvbXBybyBWaWRlb01hdGUgRTY1MEYiLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX1RCU182OTIwXSA9IHsKKwkJLm5hbWUJCT0gIlR1cmJvU2lnaHQgVEJTIDY5MjAiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAorCVtDWDIzODg1X0JPQVJEX1RFVklJX1M0NzBdID0geworCQkubmFtZQkJPSAiVGVWaWkgUzQ3MCIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNV0gPSB7CisJCS5uYW1lCQk9ICJEVkJXb3JsZCBEVkItUzIgMjAwNSIsCisJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCisJW0NYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSV0gPSB7CisJCS5jaW1heAkJPSAxLAorCQkubmFtZQkJPSAiTmV0VVAgRHVhbCBEVkItUzIgQ0kiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9iY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfYm9hcmRzKTsKIApAQCAtMjQ1LDYgKzI2NCwyMiBAQAogCQkuc3VidmVuZG9yID0gMHgxODViLAogCQkuc3ViZGV2aWNlID0gMHhlODAwLAogCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9DT01QUk9fVklERU9NQVRFX0U2NTBGLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4NjkyMCwKKwkJLnN1YmRldmljZSA9IDB4ODg4OCwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVEJTXzY5MjAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHhkNDcwLAorCQkuc3ViZGV2aWNlID0gMHg5MDIyLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4MDAwMSwKKwkJLnN1YmRldmljZSA9IDB4MjAwNSwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDFiNTUsCisJCS5zdWJkZXZpY2UgPSAweDJhMmMsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0ksCiAJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3gyMzg4NV9pZGNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X3N1Ymlkcyk7CkBAIC01NTIsNiArNTg3LDM4IEBACiAJCW1kZWxheSgyMCk7CiAJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDQpOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWN4X3dyaXRlKE1DNDE3X0NUTCwgMHgwMDAwMDAzNik7CisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMTgwMCk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQkvKiBHUElPLTAgSU5UQSBmcm9tIENpTWF4MQorCQkgICBHUElPLTEgSU5UQiBmcm9tIENpTWF4MgorCQkgICBHUElPLTIgcmVzZXQgY2hpcHMKKwkJICAgR1BJTy0zIHRvIEdQSU8tMTAgZGF0YS9hZGRyIGZvciBDQQorCQkgICBHUElPLTExIH5DUzAgdG8gQ2lNYXgxCisJCSAgIEdQSU8tMTIgfkNTMSB0byBDaU1heDIKKwkJICAgR1BJTy0xMyBBREwwIGxvYWQgTFNCIGFkZHIKKwkJICAgR1BJTy0xNCBBREwxIGxvYWQgTVNCIGFkZHIKKwkJICAgR1BJTy0xNSB+UkRZIGZyb20gQ2lNYXgKKwkJICAgR1BJTy0xNyB+UkQgdG8gQ2lNYXgKKwkJICAgR1BJTy0xOCB+V1IgdG8gQ2lNYXgKKwkJICovCisJCWN4X3NldChHUDBfSU8sIDB4MDAwNDAwMDApOyAvKiBHUElPIGFzIG91dCAqLworCQkvKiBHUElPMSBhbmQgR1BJTzIgYXMgSU5UQSBhbmQgSU5UQiBmcm9tIENpTWF4ZXMsIHJlc2V0IGxvdyAqLworCQljeF9jbGVhcihHUDBfSU8sIDB4MDAwMzAwMDQpOworCQltZGVsYXkoMTAwKTsvKiByZXNldCBkZWxheSAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDA0KTsgLyogR1BJTyBhcyBvdXQsIHJlc2V0IGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfQ1RMLCAweDAwMDAwMDM3KTsvKiBlbmFibGUgR1BJTzMtMTggcGlucyAqLworCQkvKiBHUElPLTE1IElOIGFzIH5BQ0ssIHJlc3QgYXMgT1VUICovCisJCWN4X3dyaXRlKE1DNDE3X09FTiwgMHgwMDAwMTAwMCk7CisJCS8qIH5SRCwgfldSIGhpZ2g7IEFETDAsIEFETDEgbG93OyB+Q1MwLCB+Q1MxIGhpZ2ggKi8KKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDBjMzAwKTsKKwkJLyogZW5hYmxlIGlycSAqLworCQljeF93cml0ZShHUElPX0lTTSwgMHgwMDAwMDAwMCk7LyogSU5URVJSVVBUUyBhY3RpdmUgbG93Ki8KKwkJYnJlYWs7CiAJfQogfQogCkBAIC02MzIsNiArNjk5LDIxIEBACiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwogCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJXT1JMRF8yMDA1OgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweDU7IC8qIFBhcmFsbGVsICovCisJCXRzMS0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czEtPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCXRzMS0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czEtPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMxLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCXRzMi0+Z2VuX2N0cmxfdmFsICA9IDB4YzsgLyogU2VyaWFsIGJ1cyArIHB1bmN0dXJlZCBjbG9jayAqLworCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwUToKQEAgLTY1Niw3ICs3MzgsMTcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE3MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSDoKIAljYXNlIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRjoKLQkJcmVxdWVzdF9tb2R1bGUoImN4MjU4NDAiKTsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKKwkJZGV2LT5zZF9jeDI1ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzJdLmkyY19hZGFwLAorCQkJCSJjeDI1ODQwIiwgImN4MjU4NDAiLCAweDg4ID4+IDEpOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgaW5pdCwgMCk7CisJCWJyZWFrOworCX0KKworCS8qIEFVWC1QTEwgMjdNSHogQ0xLICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCW5ldHVwX2luaXRpYWxpemUoZGV2KTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCmluZGV4IDhmNmZiMmEuLmRjN2ZmZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgImN4MjM4ODUuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKQEAgLTc5MSw2ICs3OTIsOCBAQAogCWRldi0+cGNpX2J1cyAgPSBkZXYtPnBjaS0+YnVzLT5udW1iZXI7CiAJZGV2LT5wY2lfc2xvdCA9IFBDSV9TTE9UKGRldi0+cGNpLT5kZXZmbik7CiAJZGV2LT5wY2lfaXJxbWFzayA9IDB4MDAxZjAwOworCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDApCisJCWRldi0+cGNpX2lycW1hc2sgfD0gMHgwMTgwMDAwMDsgLyogZm9yIENpTWF4ZXMgKi8KIAogCS8qIEV4dGVybmFsIE1hc3RlciAxIEJ1cyAqLwogCWRldi0+aTJjX2J1c1swXS5uciA9IDA7CkBAIC04NzIsNyArODc1LDcgQEAKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzFdKTsKIAljeDIzODg1X2kyY19yZWdpc3RlcigmZGV2LT5pMmNfYnVzWzJdKTsKIAljeDIzODg1X2NhcmRfc2V0dXAoZGV2KTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIAljeDIzODg1X2lyX2luaXQoZGV2KTsKIAogCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5wb3J0YSA9PSBDWDIzODg1X0FOQUxPR19WSURFTykgewpAQCAtMTY0Myw3ICsxNjQ2LDkgQEAKIAkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9CKSB8fAogCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfVklEX0EpIHx8CiAJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfSU5UKSB8fAotCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0VYVCkpIHsKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwKKwkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkgewogCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19SSVNDX1JEKQogCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX1JJU0NfUkQgICAweCUwOHgpXG4iLApAQCAtMTY4NSw4ICsxNjkwLDIwIEBACiAJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfQVVEX0VYVCAgIDB4JTA4eClcbiIsCiAJCQkJUENJX01TS19BVURfRVhUKTsKIAorCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApCisJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfR1BJTzAgICAgIDB4JTA4eClcbiIsCisJCQkJUENJX01TS19HUElPMCk7CisKKwkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKQorCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0dQSU8xICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfR1BJTzEpOwogCX0KIAorCWlmIChjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5jaW1heCA+IDAgJiYKKwkJKChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMCkgfHwgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKSkpCisJCS8qIGhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfZ3BpbyhkZXYsIHBjaV9zdGF0dXMpOyAqLworCQloYW5kbGVkICs9IG5ldHVwX2NpX3Nsb3Rfc3RhdHVzKGRldiwgcGNpX3N0YXR1cyk7CisKIAlpZiAodHMxX3N0YXR1cykgewogCQlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGIgPT0gQ1gyMzg4NV9NUEVHX0RWQikKIAkJCWhhbmRsZWQgKz0gY3gyMzg4NV9pcnFfdHModHMxLCB0czFfc3RhdHVzKTsKQEAgLTE3MjIsMTYgKzE3MzksMjAgQEAKIAlpZiAoTlVMTCA9PSBkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBjaV9kZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGZhaWxfZnJlZTsKKwogCS8qIHBjaSBpbml0ICovCiAJZGV2LT5wY2kgPSBwY2lfZGV2OwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgewogCQllcnIgPSAtRUlPOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCWlmIChjeDIzODg1X2Rldl9zZXR1cChkZXYpIDwgMCkgewogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfZnJlZTsKKwkJZ290byBmYWlsX3VucmVnOwogCX0KIAogCS8qIHByaW50IHBjaSBpbmZvICovCkBAIC0xNzU4LDExICsxNzc5LDE4IEBACiAJCWdvdG8gZmFpbF9pcnE7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGRldik7CisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWN4X3NldChQQ0lfSU5UX01TSywgMHgwMTgwMDAwMCk7IC8qIGZvciBOZXRVUCAqLworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbF9pcnE6CiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworZmFpbF91bnJlZzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIGZhaWxfZnJlZToKIAlrZnJlZShkZXYpOwogCXJldHVybiBlcnI7CkBAIC0xNzcwLDcgKzE3OTgsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY3gyMzg4NV9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSB0b19jeDIzODg1KHY0bDJfZGV2KTsKIAogCWN4MjM4ODVfc2h1dGRvd24oZGV2KTsKIApAQCAtMTc3OCwxMyArMTgwNywxMyBAQAogCiAJLyogdW5yZWdpc3RlciBzdHVmZiAqLwogCWZyZWVfaXJxKHBjaV9kZXYtPmlycSwgZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiAKIAltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOwogCiAJY3gyMzg4NV9kZXZfdW5yZWdpc3RlcihkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogCWtmcmVlKGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKaW5kZXggMWM0NTQxMi4uZDQzYzc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJjeDIzODg1LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAorI2luY2x1ZGUgImR2Yl9jYV9lbjUwMjIxLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgogI2luY2x1ZGUgInM1aDE0MTEuaCIKICNpbmNsdWRlICJtdDIxMzEuaCIKQEAgLTQzLDYgKzQ0LDEzIEBACiAjaW5jbHVkZSAiZGliNzAwMHAuaCIKICNpbmNsdWRlICJkaWJ4MDAwX2NvbW1vbi5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKKyNpbmNsdWRlICJzdHYwOTAwLmgiCisjaW5jbHVkZSAic3R2NjExMC5oIgorI2luY2x1ZGUgImxuYmgyNC5oIgorI2luY2x1ZGUgImN4MjQxMTYuaCIKKyNpbmNsdWRlICJjaW1heDIuaCIKKyNpbmNsdWRlICJuZXR1cC1lZXByb20uaCIKKyNpbmNsdWRlICJuZXR1cC1pbml0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiAKQEAgLTMwOCwxMSArMzE2LDYzIEBACiAJLm5vX3R1bmVyICAgICAgPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBzdHYwOTAwX2NvbmZpZyBuZXR1cF9zdHYwOTAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjgsCisJLnh0YWwgPSAyNzAwMDAwMCwKKwkuY2xrbW9kZSA9IDMsLyogMC1DTEtJLCAyLVhUQUxJLCBlbHNlIEFVVE8gKi8KKwkuZGlzZXFjX21vZGUgPSAyLC8qIDIvMyBQV00gKi8KKwkucGF0aDFfbW9kZSA9IDIsLypTZXJpYWwgY29udGludWVzIGNsb2NrICovCisJLnBhdGgyX21vZGUgPSAyLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCS50dW4xX21hZGRyZXNzID0gMCwvKiAweDYwICovCisJLnR1bjJfbWFkZHJlc3MgPSAzLC8qIDB4NjMgKi8KKwkudHVuMV9hZGMgPSAxLC8qIDEgVnBwICovCisJLnR1bjJfYWRjID0gMSwvKiAxIFZwcCAqLworfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2EgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MCwKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHY2MTEwX2NvbmZpZyBuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IgPSB7CisJLmkyY19hZGRyZXNzID0gMHg2MywKKwkubWNsayA9IDI3MDAwMDAwLAorCS5pcV93aXJpbmcgPSAxLAorfTsKKworc3RhdGljIGludCB0YnNfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBmZS0+ZHZiLT5wcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCisJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTgpCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMWUwMCk7LyogR1BJTy0xMyBoaWdoICovCisJZWxzZSBpZiAodm9sdGFnZSA9PSBTRUNfVk9MVEFHRV8xMykKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxYTAwKTsvKiBHUElPLTEzIGxvdyAqLworCWVsc2UKKwkJY3hfd3JpdGUoTUM0MTdfUldELCAweDAwMDAxODAwKTsvKiBHUElPLTEyIGxvdyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRic19jeDI0MTE2X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MDUsCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIHRldmlpX2N4MjQxMTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3gyNDExNl9jb25maWcgZHZid29ybGRfY3gyNDExNl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA1LAorfTsKKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OwogCXN0cnVjdCBjeDIzODg1X2kyYyAqaTJjX2J1cyA9IE5VTEw7CiAJc3RydWN0IHZpZGVvYnVmX2R2Yl9mcm9udGVuZCAqZmUwOworCWludCByZXQ7CiAKIAkvKiBHZXQgdGhlIGZpcnN0IGZyb250ZW5kICovCiAJZmUwID0gdmlkZW9idWZfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKQEAgLTUyNiw2ICs1ODYsNzggQEAKIAkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfY29uZmlnKGZlLCAmY3RsKTsKIAkJfQogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEJTXzY5MjA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0YnNfY3gyNDExNl9jb25maWcsCisJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0YnNfc2V0X3ZvbHRhZ2U7CisKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZ0ZXZpaV9jeDI0MTE2X2NvbmZpZywKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQorCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRic19zZXRfdm9sdGFnZTsKKworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNToKKwkJaTJjX2J1cyA9ICZkZXYtPmkyY19idXNbMV07CisKKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMTZfYXR0YWNoLAorCQkJJmR2YndvcmxkX2N4MjQxMTZfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzBdOworCQlzd2l0Y2ggKHBvcnQtPm5yKSB7CisJCS8qIHBvcnQgQiAqLworCQljYXNlIDE6CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsCisJCQkJCQkJJm5ldHVwX3N0djA5MDBfY29uZmlnLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwgMCk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWlmIChkdmJfYXR0YWNoKHN0djYxMTBfYXR0YWNoLAorCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19hLAorCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKSkgeworCQkJCQlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwKKwkJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCQkJTE5CSDI0X1BDTCwgMCwgMHgwOSkpCisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCQkiTm8gTE5CSDI0IGZvdW5kIVxuIik7CisKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJLyogcG9ydCBDICovCisJCWNhc2UgMjoKKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChzdHYwOTAwX2F0dGFjaCwKKwkJCQkJCQkmbmV0dXBfc3R2MDkwMF9jb25maWcsCisJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwLCAxKTsKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJaWYgKGR2Yl9hdHRhY2goc3R2NjExMF9hdHRhY2gsCisJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCSZuZXR1cF9zdHY2MTEwX3R1bmVyY29uZmlnX2IsCisJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXApKSB7CisJCQkJCWlmICghZHZiX2F0dGFjaChsbmJoMjRfYXR0YWNoLAorCQkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwKKwkJCQkJCQlMTkJIMjRfUENMLCAwLCAweDBhKSkKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSJObyBMTkJIMjQgZm91bmQhXG4iKTsKKworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkICIKIAkJCSIgaXNuJ3Qgc3VwcG9ydGVkIHlldFxuIiwKQEAgLTU0MSwxNSArNjczLDM5IEBACiAJZmUwLT5kdmIuZnJvbnRlbmQtPmNhbGxiYWNrID0gY3gyMzg4NV90dW5lcl9jYWxsYmFjazsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKGkyY19idXMsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CiAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5hbmFsb2dfb3BzLnN0YW5kYnkpCiAJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KGZlMC0+ZHZiLmZyb250ZW5kKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KLQlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKKwlyZXQgPSB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZwb3J0LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBwb3J0LAogCQkmZGV2LT5wY2ktPmRldiwgYWRhcHRlcl9uciwgMCk7CiAKKwkvKiBpbml0IENJICYgTUFDICovCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6IHsKKwkJc3RhdGljIHN0cnVjdCBuZXR1cF9jYXJkX2luZm8gY2luZm87CisKKwkJbmV0dXBfZ2V0X2NhcmRfaW5mbygmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLCAmY2luZm8pOworCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLAorCQkJCWNpbmZvLnBvcnRbcG9ydC0+bnIgLSAxXS5tYWMsIDYpOworCQlwcmludGsoS0VSTl9JTkZPICJOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkIHBvcnQlZCBNQUM9IgorCQkJIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkJcG9ydC0+bnIsCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMV0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbMl0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbM10sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNF0sCisJCQlwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWNbNV0pOworCisJCW5ldHVwX2NpX2luaXQocG9ydCk7CisJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogaW50IGN4MjM4ODVfZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKQEAgLTYyMiw2ICs3NzgsMTIgQEAKIAlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpCiAJCXZpZGVvYnVmX2R2Yl91bnJlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzKTsKIAorCXN3aXRjaCAocG9ydC0+ZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQluZXR1cF9jaV9leGl0KHBvcnQpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwppbmRleCBiYjdmNzFhLi4zNDIxYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMjY4LDY0ICsyNjgsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDIzODg1X2kyYyAqYnVzID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gYnVzLT5kZXY7Ci0Jc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldi0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgewotCi0JCWRwcmludGsoMSwgIiVzICAodHVuZXIpIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsCi0JCQljbGllbnQtPm5hbWUpOwotCi0JCWlmICgoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHx8Ci0JCQkoZGV2LT50dW5lcl9hZGRyID09IGNsaWVudC0+YWRkcikpIHsKLQotCQkJZHByaW50aygxLCAiJXMgKHR1bmVyIHx8IGFkZHIgVU5TRVQpXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7Ci0KLQkJCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwKLQkJCQljbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0KLQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKLQkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOwotCQkJdHVuX3NldHVwLmFkZHIgPSBkZXYtPnR1bmVyX2FkZHI7Ci0KLQkJCWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgVFVORVJfU0VUX1RZUEVfQUREUiwKLQkJCQkmdHVuX3NldHVwKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWRwcmludGsoMSwgImkyYyBkZXRhY2ggW2NsaWVudD0lc11cbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MjM4ODVfaTJjICpidXMsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGJ1cy0+aTJjX3JjICE9IDApCi0JCXJldHVybjsKLQotCWkyY19jbGllbnRzX2NvbW1hbmQoJmJ1cy0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQogc3RhdGljIHUzMiBjeDIzODg1X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwpAQCAtMzQzLDkgKzI4NSw2IEBACiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQ1gyMzg4NSwKIAkuYWxnbyAgICAgICAgICAgICAgPSAmY3gyMzg4NV9pMmNfYWxnb190ZW1wbGF0ZSwKLQkuY2xhc3MgICAgICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDIzODg1X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CkBAIC00MDIsMTUgKzM0MSwxOCBAQAogCiAJYnVzLT5pMmNfYWxnby5kYXRhID0gYnVzOwogCWJ1cy0+aTJjX2FkYXAuYWxnb19kYXRhID0gYnVzOwotCWkyY19zZXRfYWRhcGRhdGEoJmJ1cy0+aTJjX2FkYXAsIGJ1cyk7CisJaTJjX3NldF9hZGFwZGF0YSgmYnVzLT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmYnVzLT5pMmNfYWRhcCk7CiAKIAlidXMtPmkyY19jbGllbnQuYWRhcHRlciA9ICZidXMtPmkyY19hZGFwOwogCiAJaWYgKDAgPT0gYnVzLT5pMmNfcmMpIHsKIAkJZHByaW50aygxLCAiJXM6IGkyYyBidXMgJWQgcmVnaXN0ZXJlZFxuIiwgZGV2LT5uYW1lLCBidXMtPm5yKTsKLQkJaWYgKGkyY19zY2FuKQorCQlpZiAoaTJjX3NjYW4pIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzY2FuIGJ1cyAlZDpcbiIsCisJCQkJCWRldi0+bmFtZSwgYnVzLT5ucik7CiAJCQlkb19pMmNfc2NhbihkZXYtPm5hbWUsICZidXMtPmkyY19jbGllbnQpOworCQl9CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyIEZBSUxFRFxuIiwKIAkJCWRldi0+bmFtZSwgYnVzLT5ucik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCmluZGV4IDIwYjY4YTIuLmVhZmJlNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oCkBAIC0yMTIsNiArMjEyLDggQEAKIAogI2RlZmluZSBERVZfQ05UUkwyCTB4MDAwNDAwMDAKIAorI2RlZmluZSBQQ0lfTVNLX0dQSU8xICAgKDEgPDwgMjQpCisjZGVmaW5lIFBDSV9NU0tfR1BJTzAgICAoMSA8PCAyMykKICNkZWZpbmUgUENJX01TS19BUEJfRE1BICAgKDEgPDwgMTIpCiAjZGVmaW5lIFBDSV9NU0tfQUxfV1IgICAgICgxIDw8IDExKQogI2RlZmluZSBQQ0lfTVNLX0FMX1JEICAgICAoMSA8PCAxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IGVhYTExODkuLmYwYWM2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtMzUsMTEgKzM1LDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI0NCw2ICsyMzksNyBAQAogfTsKIHN0YXRpYyBjb25zdCBpbnQgQ1gyMzg4NV9DVExTID0gQVJSQVlfU0laRShjeDIzODg1X2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIGN4MjM4ODVfdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTMwMywxMSArMjk5LDcgQEAKIAogCWRldi0+dHZub3JtID0gbm9ybTsKIAotCS8qIFRlbGwgdGhlIGFuYWxvZyB0dW5lci9kZW1vZHMgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfU1RELCAmbm9ybSk7Ci0KLQkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19TVEQsICZub3JtKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNCw4ICszMTYsOCBAQAogCWlmIChOVUxMID09IHZmZCkKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKLQl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT5taW5vciA9IC0xOworCXZmZC0+djRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBkZXYtPm5hbWUsIHR5cGUsIGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwpAQCAtNDE0LDggKzQwNiw3IEBACiAJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCktPnZtdXg7CiAKIAkvKiBUZWxsIHRoZSBpbnRlcm5hbCBBL1YgZGVjb2RlciAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLAotCQlWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtODkxLDcgKzg4Miw3IEBACiAJc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCWRwcmludGsoMSwgIiVzKCkgY2FsbGluZyBjeDI1ODQwKFZJRElPQ19HX0NUUkwpXG4iLCBfX2Z1bmNfXyk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX0NUUkwsIGN0bCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBnX2N0cmwsIGN0bCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDUsNyArOTk2LDcgQEAKIAlmaC0+dmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJZHByaW50aygyLCAiJXMoKSB3aWR0aD0lZCBoZWlnaHQ9JWQgZmllbGQ9JWRcbiIsIF9fZnVuY19fLAogCQlmaC0+d2lkdGgsIGZoLT5oZWlnaHQsIGZoLT52aWRxLmZpZWxkKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfRk1ULCBmKTsKKwljYWxsX2FsbChkZXYsIHZpZGVvLCBzX2ZtdCwgZik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODUsNyArMTI3Niw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMDAsNyArMTI5MSw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwljYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAoMTApOwpAQCAtMTMzNCw3ICsxMzI1LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19HX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM0Nyw3ICsxMzM4LDcgQEAKIAlpZiAoIXY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX0RCR19TX1JFR0lTVEVSLCByZWcpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyOCw2ICsxNTE5LDI2IEBACiAJLyogRG9uJ3QgZW5hYmxlIFZCSSB5ZXQgKi8KIAljeF9zZXQoUENJX0lOVF9NU0ssIDEpOwogCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7CisKKwkJaWYgKGRldi0+dHVuZXJfYWRkcikKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYnVzWzFdLmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCWVsc2UKKwkJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19UVikpOworCQlpZiAoc2QpIHsKKwkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CisKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKKwkJCXR1bl9zZXR1cC50eXBlID0gZGV2LT50dW5lcl90eXBlOworCQkJdHVuX3NldHVwLmFkZHIgPSB2NGwyX2kyY19zdWJkZXZfYWRkcihzZCk7CisKKwkJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CisJCX0KKwl9CisKIAogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJZGV2LT52aWRlb19kZXYgPSBjeDIzODg1X3ZkZXZfaW5pdChkZXYsIGRldi0+cGNpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKaW5kZXggNjc4MjgwMi4uMDJkOTgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgpAQCAtNjcsNiArNjcsMTAgQEAKICNkZWZpbmUgQ1gyMzg4NV9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0RVQUxfRVhQIDExCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1BYRFZSMzIwMF9IIDEyCiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRiAgIDEzCisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEJTXzY5MjAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MCAgICAgICAgICAgICAgIDE1CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNSAgICAgICAgICAgIDE2CisjZGVmaW5lIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSSAgICAgIDE3CiAKIC8qIEN1cnJlbnRseSB1bnN1cHBvcnRlZCBieSB0aGUgZHJpdmVyOiBQQUwvSCwgTlRTQy9LciwgU0VDQU0gQi9HL0gvTEMgKi8KICNkZWZpbmUgQ1gyMzg4NV9OT1JNUyAoXApAQCAtMTg0LDYgKzE4OCw3IEBACiAJICovCiAJdTMyCQkJY2xrX2ZyZXE7CiAJc3RydWN0IGN4MjM4ODVfaW5wdXQgICAgaW5wdXRbTUFYX0NYMjM4ODVfSU5QVVRdOworCWludAkJCWNpbWF4OyAvKiBmb3IgTmV0VVAgKi8KIH07CiAKIHN0cnVjdCBjeDIzODg1X3N1YmlkIHsKQEAgLTI2NiwxMSArMjcxLDEzIEBACiAKIAkvKiBBbGxvdyBhIHNpbmdsZSB0c3BvcnQgdG8gaGF2ZSBtdWx0aXBsZSBmcm9udGVuZHMgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBudW1fZnJvbnRlbmRzOworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICpwb3J0X3ByaXY7CiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CiAJYXRvbWljX3QgICAgICAgICAgICAgICAgICAgcmVmY291bnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKIAogCS8qIHBjaSBzdHVmZiAqLwogCXN0cnVjdCBwY2lfZGV2ICAgICAgICAgICAgICpwY2k7CkBAIC0zMTYsNiArMzIzLDcgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByYWRpb190eXBlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHJhZGlvX2FkZHI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaGFzX3JhZGlvOworCXN0cnVjdCB2NGwyX3N1YmRldiAJICAgKnNkX2N4MjU4NDA7CiAKIAkvKiBWNGwgKi8KIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBmcmVxOwpAQCAtMzM2LDYgKzM0NCwxNCBAQAogCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDIzODg1X2RldiAqdG9fY3gyMzg4NShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDIzODg1X2RldiwgdjRsMl9kZXYpOworfQorCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGN4MjM4ODVfZGV2bGlzdDsKIAogI2RlZmluZSBTUkFNX0NIMDEgIDAgLyogVmlkZW8gQSAqLwpAQCAtNDUyLDggKzQ2OCw2IEBACiAvKiBjeDIzODg1LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGV4dGVybiBpbnQgY3gyMzg4NV9pMmNfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfaTJjICpidXMpOwogZXh0ZXJuIGludCBjeDIzODg1X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2kyYyAqYnVzKTsKLWV4dGVybiB2b2lkIGN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cywgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkgICAgIHZvaWQgKmFyZyk7CiBleHRlcm4gdm9pZCBjeDIzODg1X2F2X2NsayhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYmJiYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uYwpAQCAtMCwwICsxLDEwNyBAQAorCisvKgorICogbmV0dXAtZWVwcm9tLmMKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorI2luY2x1ZGUgIm5ldHVwLWVlcHJvbS5oIgorCisjZGVmaW5lIEVFUFJPTV9JMkNfQUREUiAweDUwCisKK2ludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisKKwkvKiBSZWFkIGZyb20gRUVQUk9NICovCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gRUVQUk9NX0kyQ19BRERSLAorCQkJLmZsYWdzCT0gMCwKKwkJCS5idWYJPSAmYnVmWzBdLAorCQkJLmxlbgk9IDEKKwkJfSwgeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5idWYJPSAmYnVmWzFdLAorCQkJLmxlbgk9IDEKKwkJfQorCisJfTsKKworCWJ1ZlswXSA9IGFkZHI7CisJYnVmWzFdID0gMHgwOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWVwcm9tIGkyYyByZWFkIGVycm9yLCBzdGF0dXM9JWRcbiIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gYnVmWzFdOworfTsKKworaW50IG5ldHVwX2VlcHJvbV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZ3WzJdOworCisJLyogV3JpdGUgaW50byBFRVBST00gKi8KKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBFRVBST01fSTJDX0FERFIsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmJ1Zgk9ICZidWZ3WzBdLAorCQkJLmxlbgk9IDIKKwkJfQorCX07CisKKwlidWZ3WzBdID0gYWRkcjsKKwlidWZ3WzFdID0gZGF0YTsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgImVlcHJvbSBpMmMgd3JpdGUgZXJyb3IsIHN0YXR1cz0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1kZWxheSgxMCk7IC8qIHByb3BoeWxhY3RpYyBkZWxheSwgZGF0YXNoZWV0IHdyaXRlIGN5Y2xlIHRpbWUgPSA1IG1zICovCisJcmV0dXJuIDA7Cit9OworCit2b2lkIG5ldHVwX2dldF9jYXJkX2luZm8oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQlzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvICpjaW5mbykKK3sKKwlpbnQgaSwgajsKKworCWNpbmZvLT5yZXYgPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIDEzKTsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNjsgaSsrLCBqKyspCisJCWNpbmZvLT5wb3J0WzBdLm1hY1tqXSA9ICBuZXR1cF9lZXByb21fcmVhZChpMmNfYWRhcCwgaSk7CisKKwlmb3IgKGkgPSA2LCBqID0gMDsgaSA8IDEyOyBpKyssIGorKykKKwkJY2luZm8tPnBvcnRbMV0ubWFjW2pdID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCBpKTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM5MjZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1lZXByb20uaApAQCAtMCwwICsxLDQyIEBACisvKgorICogbmV0dXAtZWVwcm9tLmgKKyAqCisgKiAyNExDMDIgRUVQUk9NIGRyaXZlciBpbiBjb25qdW5jdGlvbiB3aXRoIE5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIE5FVFVQX0VFUFJPTV9ICisjZGVmaW5lIE5FVFVQX0VFUFJPTV9ICisKK3N0cnVjdCBuZXR1cF9wb3J0X2luZm8geworCXU4IG1hY1s2XTsvKiBjYXJkIE1BQyBhZGRyZXNzICovCit9OworCitzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvIHsKKwlzdHJ1Y3QgbmV0dXBfcG9ydF9pbmZvIHBvcnRbMl07LyogcG9ydHMgLSAxLDIgKi8KKwl1OCByZXY7LyogY2FyZCByZXZpc2lvbiAqLworfTsKKworZXh0ZXJuIGludCBuZXR1cF9lZXByb21fcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyKTsKK2V4dGVybiBpbnQgbmV0dXBfZWVwcm9tX3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIHZvaWQgbmV0dXBfZ2V0X2NhcmRfaW5mbyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJCXN0cnVjdCBuZXR1cF9jYXJkX2luZm8gKmNpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg5M2U2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIG5ldHVwLWluaXQuYworICoKKyAqIE5ldFVQIER1YWwgRFZCLVMyIENJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjM4ODUuaCIKKworc3RhdGljIHZvaWQgaTJjX2F2X3dyaXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1OCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBidWZbM107CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkcgk9IDB4ODggPj4gMSwKKwkJLmZsYWdzCT0gMCwKKwkJLmJ1Zgk9IGJ1ZiwKKwkJLmxlbgk9IDMKKwl9OworCisJYnVmWzBdID0gcmVnID4+IDg7CisJYnVmWzFdID0gcmVnICYgMHhmZjsKKwlidWZbMl0gPSB2YWw7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfd3JpdGU0KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCWludCByZXQ7CisJdTggYnVmWzZdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSA2CisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzJdID0gdmFsICYgMHhmZjsKKwlidWZbM10gPSAodmFsID4+IDgpICYgMHhmZjsKKwlidWZbNF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJYnVmWzVdID0gdmFsID4+IDI0OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyB3cml0ZSBlcnJvciFcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHU4IGkyY19hdl9yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnKQoreworCWludCByZXQ7CisJdTggYnVmWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSAyCisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHdyaXRlIGVycm9yIVxuIiwgX19mdW5jX18pOworCisJbXNnLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnLmxlbiA9IDE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCAmbXNnLCAxKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHJlYWQgZXJyb3IhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gYnVmWzBdOworfQorCitzdGF0aWMgdm9pZCBpMmNfYXZfYW5kX29yKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1MTYgcmVnLCB1bnNpZ25lZCBhbmRfbWFzaywKKwkJCQkJCQkJdTggb3JfdmFsdWUpCit7CisJaTJjX2F2X3dyaXRlKGkyYywgcmVnLCAoaTJjX2F2X3JlYWQoaTJjLCByZWcpICYgYW5kX21hc2spIHwgb3JfdmFsdWUpOworfQorLyogc2V0IDI3TUh6IG9uIEFVWF9DTEsgKi8KK3ZvaWQgbmV0dXBfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzJdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gJmkyY19idXMtPmkyY19hZGFwOworCisJLyogU3RvcCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDAwKTsKKworCS8qIEF1eCBQTEwgZnJhYyBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTE0LCAweGVhMGViMyk7CisKKwkvKiBBdXggUExMIGludCBmb3IgMjcgTUh6ICovCisJaTJjX2F2X3dyaXRlNChpMmMsIDB4MTEwLCAweDA5MDMxOSk7CisKKwkvKiBzdGFydCBtaWNyb2NvbnRyb2xsZXIgKi8KKwlpMmNfYXZfYW5kX29yKGkyYywgMHg4MDMsIH4weDEwLCAweDEwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1pbml0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNmFlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBuZXR1cC1pbml0LmgKKyAqCisgKiBOZXRVUCBEdWFsIERWQi1TMiBDSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCitleHRlcm4gdm9pZCBuZXR1cF9pbml0aWFsaXplKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCmluZGV4IGQxOTlkODAuLjkzZDc0YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwpAQCAtMzYzLDc1ICszNjMsNzQgQEAKIAl9CiB9CiAKLWludCBjeDI1ODQwX2F1ZGlvKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCByZXR2YWw7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7Ci0JCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODAzLCB+MHgxMCwgMCk7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOwotCQl9Ci0JCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjbGllbnQsICoodTMyICopYXJnKTsKLQkJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKLQkJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAweDEwKTsKLQkJfQotCQlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMCk7Ci0JCXJldHVybiByZXR2YWw7CisJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgxMCwgfjB4MSwgMSk7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpIHsKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDApOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDMsIDB4MWYpOworCX0KKwlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCBmcmVxKTsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCAhPSBDWDI1ODQwX0FVRElPX1NFUklBTCkKKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOworCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDApOworCXJldHVybiByZXR2YWw7Cit9CiAKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF90cmVibGUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfbXV0ZShjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQoraW50IGN4MjU4NDBfYXVkaW9fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQljdHJsLT52YWx1ZSA9IGdldF92b2x1bWUoY2xpZW50KTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlzZXRfdm9sdW1lKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJCXNldF9iYXNzKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJc2V0X3RyZWJsZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQlzZXRfYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlzZXRfbXV0ZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2Jhc3MoY2xpZW50KTsKIAkJYnJlYWs7Ci0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGNsaWVudCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjbGllbnQpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY2xpZW50KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQogCitpbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXNldF92b2x1bWUoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwkJc2V0X2Jhc3MoY2xpZW50LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlzZXRfdHJlYmxlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXNldF9iYWxhbmNlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXNldF9tdXRlKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKaW5kZXggMjVlYjNiZWMuLjczN2VlNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAogI2luY2x1ZGUgImN4MjU4NDAtY29yZS5oIgpAQCAtNDgsMTUgKzQ4LDEyIEBACiBNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kLCBDaHJpcyBLZW5uZWR5LCBIYW5zIFZlcmt1aWwsIFR5bGVyIFRyYWZmb3JkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQogc3RhdGljIGludCBjeDI1ODQwX2RlYnVnOwogCiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsY3gyNTg0MF9kZWJ1ZywgaW50LCAwNjQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtZXNzYWdlcyBbMD1PZmYgKGRlZmF1bHQpIDE9T25dIik7CiAKLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC03NjMsNyArNzYwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CiAJCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC03NzgsNyArNzc1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19TX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19zX2N0cmwoc2QsIGN0cmwpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MTUsNyArODEyLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWlmIChzdGF0ZS0+aXNfY3gyNTgzNikKIAkJCXJldHVybiAtRUlOVkFMOwotCQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQlyZXR1cm4gY3gyNTg0MF9hdWRpb19nX2N0cmwoc2QsIGN0cmwpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgyNywxMSArODI0LDkgQEAKIAogc3RhdGljIGludCBjeDI1ODQwX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQogCXN3aXRjaCAoZm10LT50eXBlKSB7CiAJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX0dfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92YmlfZ19mbXQoc2QsIGZtdCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODkzLDEwICs4ODgsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBWSURJT0NfU19GTVQsIGZtdCk7CisJCXJldHVybiBjeDI1ODQwX3ZiaV9zX2ZtdChzZCwgZm10KTsKIAogCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92Ymlfc19mbXQoc2QsIGZtdCk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDEsNiArMTA5NiwxNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKiBUaGlzIGluaXQgb3BlcmF0aW9uIG11c3QgYmUgY2FsbGVkIHRvIGxvYWQgdGhlIGRyaXZlcidzIGZpcm13YXJlLgorICAgV2l0aG91dCB0aGlzIHRoZSBhdWRpbyBzdGFuZGFyZCBkZXRlY3Rpb24gd2lsbCBmYWlsIGFuZCB5b3Ugd2lsbAorICAgb25seSBnZXQgbW9uby4KKworICAgU2luY2UgbG9hZGluZyB0aGUgZmlybXdhcmUgaXMgb2Z0ZW4gcHJvYmxlbWF0aWMgd2hlbiB0aGUgZHJpdmVyIGlzCisgICBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgSSByZWNvbW1lbmQgcG9zdHBvbmluZyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgIHVudGlsIHRoZSBmaXJzdCBvcGVuIG9mIHRoZSB2aWRlbyBkZXZpY2UuIEFub3RoZXIgcmVhc29uIGZvcgorICAgcG9zdHBvbmluZyBpdCBpcyB0aGF0IGxvYWRpbmcgdGhpcyBmaXJtd2FyZSB0YWtlcyBhIGxvbmcgdGltZSAoc2Vjb25kcykKKyAgIGR1ZSB0byB0aGUgc2xvdyBpMmMgYnVzIHNwZWVkLiBTbyBpdCB3aWxsIHNwZWVkIHVwIHRoZSBib290IHByb2Nlc3MgaWYKKyAgIHlvdSBjYW4gYXZvaWQgbG9hZGluZyB0aGUgZncgYXMgbG9uZyBhcyB0aGUgdmlkZW8gZGV2aWNlIGlzbid0IHVzZWQuICAqLwogc3RhdGljIGludCBjeDI1ODQwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC0xMTQ2LDIwICsxMTUxLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FLCB2YmkpOwotfQotCi1zdGF0aWMgaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXJldHVybiBjeDI1ODQwX2F1ZGlvKGNsaWVudCwgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRLCAmZnJlcSk7Ci19Ci0KIHN0YXRpYyBpbnQgY3gyNTg0MF9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTExOTUsMTAgKzExODYsMTIgQEAKIAogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjEwLDEwICsxMjAzLDExIEBACiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCiAJCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzODAsMTkgKzEzNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjU4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQkvKiBpZ25vcmUgdGhpcyBjb21tYW5kICovCi0JaWYgKGNtZCA9PSBUVU5FUl9TRVRfVFlQRV9BRERSIHx8IGNtZCA9PSBUVU5FUl9TRVRfQ09ORklHKQotCQlyZXR1cm4gMDsKLQotCS8qIE9sZC1zdHlsZSBkcml2ZXJzIHJlbHkgb24gaW5pdGlhbGl6YXRpb24gb24gZmlyc3QgdXNlLCBzbwotCSAgIGNhbGwgdGhlIGluaXQgd2hlbmV2ZXIgYSBjb21tYW5kIGlzIGlzc3VlZCB0byB0aGlzIGRyaXZlci4KLQkgICBOZXctc3R5bGUgZHJpdmVycyB1c2luZyB2NGwyX3N1YmRldiBzaG91bGQgY2FsbCBpbml0IGV4cGxpY2l0bHkuICovCi0JY3gyNTg0MF9pbml0KGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCAwKTsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGN4MjU4NDBfY29yZV9vcHMgPSB7CkBAIC0xNTI4LDggKzE1MDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiY3gyNTg0MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0NYMjU4NDAsCi0JLmNvbW1hbmQgPSBjeDI1ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gY3gyNTg0MF9wcm9iZSwKIAkucmVtb3ZlID0gY3gyNTg0MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gY3gyNTg0MF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaAppbmRleCBiZTA1NTgyLi45YWQwZWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCkBAIC03NSwxMSArNzUsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtYXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogdm9pZCBjeDI1ODQwX2F1ZGlvX3NldF9wYXRoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworaW50IGN4MjU4NDBfc19jbG9ja19mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBmcmVxKTsKK2ludCBjeDI1ODQwX2F1ZGlvX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDI1ODQwX2F1ZGlvX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjU4NTAtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKK2ludCBjeDI1ODQwX3ZiaV9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CitpbnQgY3gyNTg0MF92YmlfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCmluZGV4IDAzZjA5YjIuLjM1ZjY1OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCkBAIC04MiwxOTkgKzgyLDE4MSBAQAogCXJldHVybiBlcnIgJiAweGYwOwogfQogCi1pbnQgY3gyNTg0MF92Ymkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQoraW50IGN4MjU4NDBfdmJpX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCXN0YXRpYyBjb25zdCB1MTYgbGNyMnZiaVtdID0geworCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KKwkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KKwkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCisJCTAsIDAsIDAsIDAKKwl9OworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwotCQkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLwotCQkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KLQkJCTAsIDAsIFY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwJLyogOSAqLwotCQkJMCwgMCwgMCwgMAotCQl9OwotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IGk7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOworCS8qIHdlJ3JlIGRvbmUgaWYgcmF3IFZCSSBpcyBhY3RpdmUgKi8KKwlpZiAoKGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDA0KSAmIDB4MTApID09IDApCisJCXJldHVybiAwOwogCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCQkvKiB3ZSdyZSBkb25lIGlmIHJhdyBWQkkgaXMgYWN0aXZlICovCi0JCWlmICgoY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKLQkJCWJyZWFrOworCWlmIChpc19wYWwpIHsKKwkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gNyk7CiAKLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDcpOwotCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJZWxzZSB7Ci0JCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDEwKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAxMDsgaSA8PSAyMTsgaSsrKSB7CisJCQl1OCB2ID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjQgKyBpIC0gMTApOwogCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKLQkJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwgc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKLQkJCX0KKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gbGNyMnZiaVt2ICYgMHhmXTsKKwkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAorCQkJCQkgICAgIHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07CiAJCX0KLQkJYnJlYWs7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKLQkJaW50IGksIHg7Ci0JCXU4IGxjclsyNF07CitpbnQgY3gyNTg0MF92Ymlfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKKwlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKKwlpbnQgdmJpX29mZnNldCA9IGlzX3BhbCA/IDEgOiAwOworCWludCBpLCB4OworCXU4IGxjclsyNF07CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCi0JCSAgICBmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdmJpID0gJmZtdC0+Zm10LnNsaWNlZDsKLQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCQkvKiByYXcgVkJJICovCi0JCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0KLQkJCS8qIFNldHVwIHN0YW5kYXJkICovCi0JCQljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwotCi0JCQkvKiBWQkkgT2Zmc2V0ICovCi0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIHZiaV9vZmZzZXQpOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQotCQkJbGNyW3hdID0gMHgwMDsKKwlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFICYmCisJCQlmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCS8qIHJhdyBWQkkgKi8KKwkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwogCiAJCS8qIFNldHVwIHN0YW5kYXJkICovCiAJCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKLQkJLyogU2xpY2VkIFZCSSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLwotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDYsIDB4MTMpOworCQkvKiBWQkkgT2Zmc2V0ICovCiAJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgdmJpX29mZnNldCk7Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gMDsgaSA8PSA2OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCi0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOwotCi0JCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfQotCi0JCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8PSAxOyB4KyspIHsKLQkJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgewotCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKLQkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgotCQkJCQlsY3JbaV0gfD0gNCA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgotCQkJCQlsY3JbaV0gfD0gNiA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKLQkJCQkJbGNyW2ldIHw9IDkgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykgewotCQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbNiArIHhdKTsKLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspIHsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzkgKyB4XSk7Ci0JCQl9Ci0JCQlmb3IgKGkgPSAweDQzMTsgaSA8PSAweDQzNDsgaSsrKSB7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIGksIDApOwotCQkJfQotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDNjLCAweDE2KTsKLQotCQlpZiAoaXNfcGFsKSB7Ci0JCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzQsIDB4MmEpOwotCQl9IGVsc2UgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc0LCAweDIyKTsKLQkJfQotCQlicmVhazsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDJlKTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQl7Ci0JCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpID0gYXJnOwotCQl1OCAqcCA9IHZiaS0+cDsKLQkJaW50IGlkMSwgaWQyLCBsLCBlcnIgPSAwOworCWZvciAoeCA9IDA7IHggPD0gMjM7IHgrKykKKwkJbGNyW3hdID0gMHgwMDsKIAotCQlpZiAocFswXSB8fCBwWzFdICE9IDB4ZmYgfHwgcFsyXSAhPSAweGZmIHx8Ci0JCSAgICAocFszXSAhPSAweDU1ICYmIHBbM10gIT0gMHg5MSkpIHsKLQkJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7Ci0JCQlicmVhazsKLQkJfQorCS8qIFNldHVwIHN0YW5kYXJkICovCisJY3gyNTg0MF9zdGRfc2V0dXAoY2xpZW50KTsKIAotCQlwICs9IDQ7Ci0JCWlkMSA9IHBbLTFdOwotCQlpZDIgPSBwWzBdICYgMHhmOwotCQlsID0gcFsyXSAmIDB4M2Y7Ci0JCWwgKz0gc3RhdGUtPnZiaV9saW5lX29mZnNldDsKLQkJcCArPSA0OworCS8qIFNsaWNlZCBWQkkgKi8KKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDQsIDB4MzIpOwkvKiBBbmNpbGxhcnkgZGF0YSAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNiwgMHgxMyk7CisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKIAotCQlzd2l0Y2ggKGlkMikgewotCQljYXNlIDE6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COwotCQkJYnJlYWs7Ci0JCWNhc2UgNDoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlicmVhazsKLQkJY2FzZSA2OgotCQkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7Ci0JCQllcnIgPSAhb2RkX3Bhcml0eShwWzBdKSB8fCAhb2RkX3Bhcml0eShwWzFdKTsKLQkJCWJyZWFrOwotCQljYXNlIDk6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9WUFM7Ci0JCQlpZiAoZGVjb2RlX3ZwcyhwLCBwKSAhPSAwKSB7Ci0JCQkJZXJyID0gMTsKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKKworCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJfQorCisJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7CisJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7CisJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgeworCQkJY2FzZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COgorCQkJCWxjcltpXSB8PSAxIDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1dTU182MjU6CisJCQkJbGNyW2ldIHw9IDQgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CisJCQkJbGNyW2ldIHw9IDYgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfVlBTOgorCQkJCWxjcltpXSB8PSA5IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlkMiA9IDA7CisJCX0KKwl9CisKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzNDsgaSsrLCB4KyspCisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzYgKyB4XSk7CisJfSBlbHNlIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDMwOyBpKyssIHgrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCBsY3JbOSArIHhdKTsKKwkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykKKwkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCAwKTsKKwl9CisKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0M2MsIDB4MTYpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDB4MjIpOworCXJldHVybiAwOworfQorCitpbnQgY3gyNTg0MF9kZWNvZGVfdmJpX2xpbmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXU4ICpwID0gdmJpLT5wOworCWludCBpZDEsIGlkMiwgbCwgZXJyID0gMDsKKworCWlmIChwWzBdIHx8IHBbMV0gIT0gMHhmZiB8fCBwWzJdICE9IDB4ZmYgfHwKKwkJCShwWzNdICE9IDB4NTUgJiYgcFszXSAhPSAweDkxKSkgeworCQl2YmktPmxpbmUgPSB2YmktPnR5cGUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlwICs9IDQ7CisJaWQxID0gcFstMV07CisJaWQyID0gcFswXSAmIDB4ZjsKKwlsID0gcFsyXSAmIDB4M2Y7CisJbCArPSBzdGF0ZS0+dmJpX2xpbmVfb2Zmc2V0OworCXAgKz0gNDsKKworCXN3aXRjaCAoaWQyKSB7CisJY2FzZSAxOgorCQlpZDIgPSBWNEwyX1NMSUNFRF9URUxFVEVYVF9COworCQlicmVhazsKKwljYXNlIDQ6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJaWQyID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCWVyciA9ICFvZGRfcGFyaXR5KHBbMF0pIHx8ICFvZGRfcGFyaXR5KHBbMV0pOworCQlicmVhazsKKwljYXNlIDk6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX1ZQUzsKKwkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkKIAkJCWVyciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7Ci0JCXZiaS0+bGluZSA9IGVyciA/IDAgOiBsOwotCQl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOwotCQl2YmktPnAgPSBwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZDIgPSAwOworCQllcnIgPSAxOwogCQlicmVhazsKIAl9Ci0JfQogCisJdmJpLT50eXBlID0gZXJyID8gMCA6IGlkMjsKKwl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKKwl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoaWQxID09IDB4NTUpOworCXZiaS0+cCA9IHA7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IDJkMjUwYTIuLjQ5OTUyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC02MSw3ICs2MSw3IEBACiAJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVFYwMjg4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29uZXhhbnQgMjM4OHggY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKaW5kZXggN2Y1YjhiZi4uNDRlYWNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKQEAgLTc0Niw3ICs3NDYsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCXJldHVybiAwOwogfQpAQCAtNzU3LDcgKzc1Niw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLwpAQCAtNzc2LDcgKzc3NCw2IEBACiAJc3RydWN0IGN4ODgwMl9maCAgKmZoICAgPSBwcml2OwogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTc5Myw3ICs3OTAsNiBAQAogCXN0cnVjdCBjeDg4MDJfZGV2ICpkZXYgID0gZmgtPmRldjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICAqY29yZSA9IGRldi0+Y29yZTsKIAotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBkZXYtPnRzX3BhY2tldF9zaXplICogZGV2LT50c19wYWNrZXRfY291bnQ7IC8qIDE4OCAqIDQgKiAxMDI0OyAqLzsKQEAgLTkxOSw3ICs5MTUsNyBAQAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzLzIiLCBjb3JlLT5uYW1lKTsKIAlwcmludGsoIiVzLzI6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAogCQljb3JlLT5uYW1lKTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWNhbGxfYWxsKGNvcmUsIGNvcmUsIGxvZ19zdGF0dXMpOwogCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5wYXJhbXMsIG5hbWUpOwogCXByaW50aygiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCiAJCWNvcmUtPm5hbWUpOwpAQCAtOTc0LDcgKzk3MCw3IEBACiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKLQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSxWSURJT0NfR19GUkVRVUVOQ1ksZik7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfZnJlcXVlbmN5LCBmKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggNzMzZWRlMy4uMDM2Mzk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC03MzIsNiArNzMyLDggQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkvKiBTb21lIHZhcmlhbnRzIHVzZSBhIHRkYTk4NzQgYW5kIHNvIG5lZWQgdGhlIHR2YXVkaW8gbW9kdWxlLiAqLworCQkuYXVkaW9fY2hpcCAgICAgPSBWNEwyX0lERU5UX1RWQVVESU8sCiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgID0gMCwKQEAgLTE5MzQsNiArMTkzNiwzOSBAQAogCQl9IH0sCiAJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCiAJfSwKKwlbQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSFQgUENJIE1LSUkiLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgICA9IDB4NjEsCisJCS5yYWRpb190eXBlICAgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnJhZGlvX2FkZHIgICAgID0gMHg2MSwKKwkJLmlucHV0ICAgICAgICAgID0geyB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwMDAwMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwMDRmYiwKKwkJCS5ncGlvMSAgPSAweDAxMGVmLAorCQkJLmF1ZGlvcm91dGUgPSAxLAorCQl9LCB7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgPSAyLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkudHlwZSAgID0gQ1g4OF9SQURJTywKKwkJCS5ncGlvMCAgPSAweDAwNGZmLAorCQkJLmdwaW8xICA9IDB4MDEwZmYsCisJCQkuZ3BpbzIgID0gMHgwZmYsCisJCX0sCisJCS5tcGVnICAgICAgICAgICA9IENYODhfTVBFR19EVkIsCisJfSwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjM0Myw2ICsyMzc4LDEwIEBACiAJCS5zdWJ2ZW5kb3IgPSAweGIyMDAsCiAJCS5zdWJkZXZpY2UgPSAweDQyMDAsCiAJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1NBVFRSQURFX1NUNDIwMCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDE1M2IsCisJCS5zdWJkZXZpY2UgPSAweDExNzcsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUksCiAJfSwKIH07CiAKQEAgLTI4MTksNiArMjg1OCw3IEBACiAJCSAqLwogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfUElOTkFDTEVfSFlCUklEX1BDVFY6CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CiAJCWN0bC0+ZGVtb2QgPSBYQzMwMjhfRkVfWkFSTElOSzQ1NjsKIAkJY3RsLT5tdHMgPSAxOwogCQlicmVhazsKQEAgLTI5NDcsNyArMjk4Nyw3IEBACiAJCXRlYTU3NjdfY2ZnLnR1bmVyID0gVFVORVJfVEVBNTc2NzsKIAkJdGVhNTc2N19jZmcucHJpdiAgPSAmY3RsOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGVhNTc2N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZWE1NzY3X2NmZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlICBDWDg4X0JPQVJEX1RFVklJX1M0MjA6CkBAIC0yOTcyLDcgKzMwMTIsNyBAQAogCQl0dW5fc2V0dXAudHlwZSAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb190eXBlOwogCQl0dW5fc2V0dXAuYWRkciAgICAgICAgICAgPSBjb3JlLT5ib2FyZC5yYWRpb19hZGRyOwogCQl0dW5fc2V0dXAudHVuZXJfY2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOwotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJCW1vZGVfbWFzayAmPSB+VF9SQURJTzsKIAl9CiAKQEAgLTI5ODIsNyArMzAyMiw3IEBACiAJCXR1bl9zZXR1cC5hZGRyICAgICAgICAgICA9IGNvcmUtPmJvYXJkLnR1bmVyX2FkZHI7CiAJCXR1bl9zZXR1cC50dW5lcl9jYWxsYmFjayA9IGN4ODhfdHVuZXJfY2FsbGJhY2s7CiAKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYpIHsKQEAgLTI5OTEsNyArMzAzMSw3IEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiAgPSAmY29yZS0+Ym9hcmQudGRhOTg4N19jb25mOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCiAJaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgPT0gVFVORVJfWEMyMDI4KSB7CkBAIC0zMDA3LDkgKzMwNDcsOSBAQAogCQl4YzIwMjhfY2ZnLnByaXYgID0gJmN0bDsKIAkJaW5mb19wcmludGsoY29yZSwgIkFza2luZyB4YzIwMjgvMzAyOCB0byBsb2FkIGZpcm13YXJlICVzXG4iLAogCQkJICAgIGN0bC5mbmFtZSk7Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfQ09ORklHLCAmeGMyMDI4X2NmZyk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2NvbmZpZywgJnhjMjAyOF9jZmcpOwogCX0KLQljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMwODksNiArMzEyOSw4IEBACiAJaW50IGk7CiAKIAljb3JlID0ga3phbGxvYyhzaXplb2YoKmNvcmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY29yZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCWF0b21pY19pbmMoJmNvcmUtPnJlZmNvdW50KTsKIAljb3JlLT5wY2lfYnVzICA9IHBjaS0+YnVzLT5udW1iZXI7CkBAIC0zMTAwLDcgKzMxNDIsMTUgQEAKIAogCWNvcmUtPm5yID0gbnI7CiAJc3ByaW50Zihjb3JlLT5uYW1lLCAiY3g4OFslZF0iLCBjb3JlLT5ucik7CisKKwlzdHJjcHkoY29yZS0+djRsMl9kZXYubmFtZSwgY29yZS0+bmFtZSk7CisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZjb3JlLT52NGwyX2RldikpIHsKKwkJa2ZyZWUoY29yZSk7CisJCXJldHVybiBOVUxMOworCX0KKwogCWlmICgwICE9IGN4ODhfZ2V0X3Jlc291cmNlcyhjb3JlLCBwY2kpKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAkJa2ZyZWUoY29yZSk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTMxMTEsNiArMzE2MSwxMSBAQAogCQkJICAgICAgcGNpX3Jlc291cmNlX2xlbihwY2ksIDApKTsKIAljb3JlLT5ibW1pbyA9ICh1OCBfX2lvbWVtICopY29yZS0+bG1taW87CiAKKwlpZiAoY29yZS0+bG1taW8gPT0gTlVMTCkgeworCQlrZnJlZShjb3JlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJLyogYm9hcmQgY29uZmlnICovCiAJY29yZS0+Ym9hcmRuciA9IFVOU0VUOwogCWlmIChjYXJkW2NvcmUtPm5yXSA8IEFSUkFZX1NJWkUoY3g4OF9ib2FyZHMpKQpAQCAtMzE0OSw4ICszMjA0LDM2IEBACiAJY3g4OF9pMmNfaW5pdChjb3JlLCBwY2kpOwogCiAJLyogbG9hZCB0dW5lciBtb2R1bGUsIGlmIG5lZWRlZCAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKFRVTkVSX0FCU0VOVCAhPSBjb3JlLT5ib2FyZC50dW5lcl90eXBlKSB7CisJCS8qIElnbm9yZSAweDZiIGFuZCAweDZmIG9uIGN4ODggYm9hcmRzLgorCQkgKiBGdXNpb25IRFRWNSBSVCBHb2xkIGhhcyBhbiBpciByZWNlaXZlciBhdCAweDZiCisJCSAqIGFuZCBhbiBSVEMgYXQgMHg2ZiB3aGljaCBjYW4gZ2V0IGNvcnJ1cHRlZCBpZiBwcm9iZWQuICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dl9hZGRyc1tdID0geworCQkJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwJCS8qIHRkYTgyOTAgKi8KKwkJCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCQkweDY4LCAweDY5LCAweDZhLCAweDZjLCAweDZkLCAweDZlLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKwkJaW50IGhhc19kZW1vZCA9IChjb3JlLT5ib2FyZC50ZGE5ODg3X2NvbmYgJiBUREE5ODg3X1BSRVNFTlQpOworCisJCS8qIEkgZG9uJ3QgdHJ1c3QgdGhlIHJhZGlvX3R5cGUgYXMgaXMgc3RvcmVkIGluIHRoZSBjYXJkCisJCSAgIGRlZmluaXRpb25zLCBzbyB3ZSBqdXN0IHByb2JlIGZvciBpdC4KKwkJICAgVGhlIHJhZGlvX3R5cGUgaXMgc29tZXRpbWVzIG1pc3NpbmcsIG9yIHNldCB0byBVTlNFVCBidXQKKwkJICAgbGF0ZXIgY29kZSBjb25maWd1cmVzIGEgdGVhNTc2Ny4KKwkJICovCisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwgInR1bmVyIiwKKwkJCQl2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQlpZiAoaGFzX2RlbW9kKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCWlmIChjb3JlLT5ib2FyZC50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCBoYXNfZGVtb2QgPyB0dl9hZGRycyArIDQgOiB0dl9hZGRycyk7CisJCX0gZWxzZSB7CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBjb3JlLT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJfQorCX0KIAogCWN4ODhfY2FyZF9zZXR1cChjb3JlKTsKIAljeDg4X2lyX2luaXQoY29yZSwgcGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwppbmRleCBiMDQ1ODc0Li5mMmZiOWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCkBAIC05OTEsNyArOTkxLDcgQEAKIAlzZXRfdHZhdWRpbyhjb3JlKTsKIAogCS8vIHRlbGwgaTJjIGNoaXBzCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfU1RELCZub3JtKTsKKwljYWxsX2FsbChjb3JlLCB0dW5lciwgc19zdGQsIG5vcm0pOwogCiAJLy8gZG9uZQogCXJldHVybiAwOwpAQCAtMTAxMSw3ICsxMDExLDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPm1pbm9yICAgPSAtMTsKLQl2ZmQtPnBhcmVudCAgPSAmcGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiA9ICZjb3JlLT52NGwyX2RldjsKKwl2ZmQtPnBhcmVudCA9ICZwY2ktPmRldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCiAJCSBjb3JlLT5uYW1lLCB0eXBlLCBjb3JlLT5ib2FyZC5uYW1lKTsKQEAgLTEwNTgsMTIgKzEwNTksMTYgQEAKIAogCW11dGV4X2xvY2soJmRldmxpc3QpOwogCWN4ODhfaXJfZmluaShjb3JlKTsKLQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCisJaWYgKDAgPT0gY29yZS0+aTJjX3JjKSB7CisJCWlmIChjb3JlLT5pMmNfcnRjKQorCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNvcmUtPmkyY19ydGMpOwogCQlpMmNfZGVsX2FkYXB0ZXIoJmNvcmUtPmkyY19hZGFwKTsKKwl9CiAJbGlzdF9kZWwoJmNvcmUtPmRldmxpc3QpOwogCWlvdW5tYXAoY29yZS0+bG1taW8pOwogCWN4ODhfZGV2Y291bnQtLTsKIAltdXRleF91bmxvY2soJmRldmxpc3QpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPnY0bDJfZGV2KTsKIAlrZnJlZShjb3JlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwppbmRleCBhZWY1Mjk3Li40ZmY0ZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYwpAQCAtMjQxLDYgKzI0MSwxMiBAQAogCS5kZW1vZF9pbml0ICAgID0gZHZpY29fZHVhbF9kZW1vZF9pbml0LAogfTsKIAorc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gKDB4MWUgPj4gMSksCisJLm5vX3R1bmVyICAgICAgPSAxLAorCS5pZjIgICAgICAgICAgID0gNDU2MDAsCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTQpIHx8IChkZWZpbmVkKENPTkZJR19WSURFT19DWDg4X1ZQMzA1NF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIHN0YXRpYyBpbnQgZG50dl9saXZlX2R2YnRfcHJvX2RlbW9kX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CkBAIC0xMTMxLDYgKzExMzcsMTYgQEAKIAkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCiAJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGV2aWlfZHZic19zZXRfdm9sdGFnZTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfSFRfUENJX01LSUk6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZjeDg4X3RlcnJhdGVjX2NpbmVyZ3lfaHRfcGNpX21raWlfY29uZmlnLAorCQkJCQkgICAgICAgJmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmkyY19nYXRlX2N0cmwgPSBOVUxMOworCQkJaWYgKGF0dGFjaF94YzMwMjgoMHg2MSwgZGV2KSA8IDApCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlcy8yOiBUaGUgZnJvbnRlbmQgb2YgeW91ciBEVkIvQVRTQyBjYXJkIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCiAJCSAgICAgICBjb3JlLT5uYW1lKTsKQEAgLTExNTIsNyArMTE2OCw3IEBACiAJCWZlMS0+ZHZiLmZyb250ZW5kLT5vcHMudHNfYnVzX2N0cmwgPSBjeDg4X2R2Yl9idXNfY3RybDsKIAogCS8qIFB1dCB0aGUgYW5hbG9nIGRlY29kZXIgaW4gc3RhbmRieSB0byBrZWVwIGl0IHF1aWV0ICovCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJLyogcmVnaXN0ZXIgZXZlcnl0aGluZyAqLwogCXJldHVybiB2aWRlb2J1Zl9kdmJfcmVnaXN0ZXJfYnVzKCZkZXYtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKaW5kZXggYzBmZjIzMC4uOTk2YjRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaTJjLmMKQEAgLTk3LDM3ICs5Nyw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjeDg4X2NvcmUgKmNvcmUgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICJpMmMgZGV0YWNoIFtjbGllbnQ9JXNdXG4iLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi12b2lkIGN4ODhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKDAgIT0gY29yZS0+aTJjX3JjKQotCQlyZXR1cm47Ci0KLQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQotCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZjb3JlLT5pMmNfYWRhcCwgY21kLCBhcmcpOwotCi0JaWYgKGNvcmUtPmdhdGVfY3RybCkKLQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGN4ODgwMF9pMmNfYWxnb190ZW1wbGF0ZSA9IHsKIAkuc2V0c2RhICA9IGN4ODgwMF9iaXRfc2V0c2RhLAogCS5zZXRzY2wgID0gY3g4ODAwX2JpdF9zZXRzY2wsCkBAIC0xNzMsMjAgKzE0MiwxNCBAQAogCW1lbWNweSgmY29yZS0+aTJjX2FsZ28sICZjeDg4MDBfaTJjX2FsZ29fdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihjb3JlLT5pMmNfYWxnbykpOwogCi0JaWYgKGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UKQotCQljb3JlLT5pMmNfYWRhcC5jbGFzcyB8PSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwotCWlmIChjb3JlLT5ib2FyZC5tcGVnICYgQ1g4OF9NUEVHX0RWQikKLQkJY29yZS0+aTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CiAKIAljb3JlLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnBjaS0+ZGV2OwogCXN0cmxjcHkoY29yZS0+aTJjX2FkYXAubmFtZSxjb3JlLT5uYW1lLHNpemVvZihjb3JlLT5pMmNfYWRhcC5uYW1lKSk7CiAJY29yZS0+aTJjX2FkYXAub3duZXIgPSBUSElTX01PRFVMRTsKIAljb3JlLT5pMmNfYWRhcC5pZCA9IEkyQ19IV19CX0NYMjM4OHg7Ci0JY29yZS0+aTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKLQljb3JlLT5pMmNfYWRhcC5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm07CiAJY29yZS0+aTJjX2FsZ28udWRlbGF5ID0gaTJjX3VkZWxheTsKIAljb3JlLT5pMmNfYWxnby5kYXRhID0gY29yZTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCxjb3JlKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjb3JlLT5pMmNfYWRhcCwgJmNvcmUtPnY0bDJfZGV2KTsKIAljb3JlLT5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmY29yZS0+aTJjX2FsZ287CiAJY29yZS0+aTJjX2NsaWVudC5hZGFwdGVyID0gJmNvcmUtPmkyY19hZGFwOwogCXN0cmxjcHkoY29yZS0+aTJjX2NsaWVudC5uYW1lLCAiY3g4OHh4IGludGVybmFsIiwgSTJDX05BTUVfU0laRSk7CkBAIC0yMjIsOCArMTg1LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotRVhQT1JUX1NZTUJPTChjeDg4X2NhbGxfaTJjX2NsaWVudHMpOwotCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogYy1iYXNpYy1vZmZzZXQ6IDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IDg2ODNkMTAuLmVjMDUzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtNDgsOCArNDgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXUzMiBncGlvX2FkZHI7CiAJdTMyIGxhc3RfZ3BpbzsKIAl1MzIgbWFza19rZXljb2RlOwpAQCAtMTQzLDI3ICsxNDIsMTkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSAoc3RydWN0IGN4ODhfSVIgKilkYXRhOwotCi0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBjeDg4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBjeDg4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3g4OF9JUiwgd29yayk7CisJc3RydWN0IGN4ODhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjeDg4X0lSLCB3b3JrLndvcmspOwogCiAJY3g4OF9pcl9oYW5kbGVfa2V5KGlyKTsKLQltb2RfdGltZXIoJmlyLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaXItPnBvbGxpbmcpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CiB9CiAKIHZvaWQgY3g4OF9pcl9zdGFydChzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlLCBzdHJ1Y3QgY3g4OF9JUiAqaXIpCiB7CiAJaWYgKGlyLT5wb2xsaW5nKSB7Ci0JCXNldHVwX3RpbWVyKCZpci0+dGltZXIsIGlyX3RpbWVyLCAodW5zaWduZWQgbG9uZylpcik7Ci0JCUlOSVRfV09SSygmaXItPndvcmssIGN4ODhfaXJfd29yayk7Ci0JCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBjeDg4X2lyX3dvcmspOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKIAl9CiAJaWYgKGlyLT5zYW1wbGluZykgewogCQljb3JlLT5wY2lfaXJxbWFzayB8PSBQQ0lfSU5UX0lSX1NNUElOVDsKQEAgLTE3OSwxMCArMTcwLDggQEAKIAkJY29yZS0+cGNpX2lycW1hc2sgJj0gflBDSV9JTlRfSVJfU01QSU5UOwogCX0KIAotCWlmIChpci0+cG9sbGluZykgewotCQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQl9CisJaWYgKGlyLT5wb2xsaW5nKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjI2LDYgKzIxNSw4IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDBMSVRFOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgorCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQ1NTAwOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTQ2Niw2ICs0NTcsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKIAkJaXJjb2RlID0gaXJfZGVjb2RlX2JpcGhhc2UoaXItPnNhbXBsZXMsIGlyLT5zY291bnQsIDUsIDcpOwogCQlpcl9kcHJpbnRrKCJiaXBoYXNlIGRlY29kZWQ6ICV4XG4iLCBpcmNvZGUpOwogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggNzkxZTY5ZC4uNDM0MjM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC00MSwxMSArNDEsNiBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0vKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgotCiBNT0RVTEVfREVTQ1JJUFRJT04oInY0bDIgZHJpdmVyIG1vZHVsZSBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMjk4LDYgKzI5Myw3IEBACiB9Owogc3RhdGljIGNvbnN0IGludCBDWDg4MDBfQ1RMUyA9IEFSUkFZX1NJWkUoY3g4ODAwX2N0bHMpOwogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3g4OF91c2VyX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfVVNFUl9DTEFTUywKIAlWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtNDM1LDggKzQzMSw3IEBACiAJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCQlyb3V0ZS5pbnB1dCA9IElOUFVUKGlucHV0KS5hdWRpb3JvdXRlOwotCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCQljYWxsX2FsbChjb3JlLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQl9CiAJCS8qIGN4MjM4OCdzIEMtQURDIGlzIGNvbm5lY3RlZCB0byB0aGUgdHVuZXIgb25seS4KIAkJICAgV2hlbiB1c2VkIHdpdGggUy1WaWRlbywgdGhhdCBBREMgaXMgYnVzeSBkZWFsaW5nIHdpdGgKQEAgLTgzMSw4ICs4MjYsNyBAQAogCQkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJCQlyb3V0ZS5pbnB1dCA9IGNvcmUtPmJvYXJkLnJhZGlvLmF1ZGlvcm91dGU7Ci0JCQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsCi0JCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQkJCWNhbGxfYWxsKGNvcmUsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJCQl9CiAJCQkvKiAiSTJTIEFEQyBtb2RlIiAqLwogCQkJY29yZS0+dHZhdWRpbyA9IFdXX0kyU0FEQzsKQEAgLTg0Myw3ICs4MzcsNyBAQAogCQkJY3g4OF9zZXRfdHZhdWRpbyhjb3JlKTsKIAkJCWN4ODhfc2V0X3N0ZXJlbyhjb3JlLFY0TDJfVFVORVJfTU9ERV9TVEVSRU8sMSk7CiAJCX0KLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsQVVEQ19TRVRfUkFESU8sTlVMTCk7CisJCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3JhZGlvKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC05MzcsNyArOTMxLDcgQEAKIAlrZnJlZShmaCk7CiAKIAlpZihhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvcmUtPnVzZXJzKSkKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzIChkZXYtPmNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwkJY2FsbF9hbGwoZGV2LT5jb3JlLCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc2LDE1ICsxMjcwLDEyIEBACiAJCVsgQ1g4OF9WTVVYX0RWQiAgICAgICAgXSA9ICJEVkIiLAogCQlbIENYODhfVk1VWF9ERUJVRyAgICAgIF0gPSAiZm9yIGRlYnVnIG9ubHkiLAogCX07Ci0JdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgaW50IG4gPSBpLT5pbmRleDsKIAotCW4gPSBpLT5pbmRleDsKIAlpZiAobiA+PSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoMCA9PSBJTlBVVChuKS50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoaSwwLHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gbjsKIAlpLT50eXBlICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJc3RyY3B5KGktPm5hbWUsaW5hbWVbSU5QVVQobikudHlwZV0pOwogCWlmICgoQ1g4OF9WTVVYX1RFTEVWSVNJT04gPT0gSU5QVVQobikudHlwZSkgfHwKQEAgLTE0MDIsNyArMTM5Myw3IEBACiAJZi0+dHlwZSA9IGZoLT5yYWRpbyA/IFY0TDJfVFVORVJfUkFESU8gOiBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBjb3JlLT5mcmVxOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTgsNyArMTQwOSw3IEBACiAJbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7CiAJY29yZS0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAljeDg4X25ld3N0YXRpb24oY29yZSk7Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAkvKiBXaGVuIGNoYW5naW5nIGNoYW5uZWxzIGl0IGlzIHJlcXVpcmVkIHRvIHJlc2V0IFRWQVVESU8gKi8KIAltc2xlZXAgKDEwKTsKQEAgLTE1MDAsNyArMTQ5MSw3IEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTIwLDcgKzE1MTEsNiBAQAogCWlmICh1bmxpa2VseShhLT5pbmRleCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlzdHJjcHkoYS0+bmFtZSwiUmFkaW8iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MzUsNyArMTUyNSw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX1NfVFVORVIsdCk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODkyLDEyICsxODgyLDMwIEBACiAJLyogbG9hZCBhbmQgY29uZmlndXJlIGhlbHBlciBtb2R1bGVzICovCiAKIAlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1dNODc3NSkKLQkJcmVxdWVzdF9tb2R1bGUoIndtODc3NSIpOworCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkid204Nzc1IiwgIndtODc3NSIsIDB4MzYgPj4gMSk7CisKKwlpZiAoY29yZS0+Ym9hcmQuYXVkaW9fY2hpcCA9PSBWNEwyX0lERU5UX1RWQVVESU8pIHsKKwkJLyogVGhpcyBwcm9iZXMgZm9yIGEgdGRhOTg3NCBhcyBpcyB1c2VkIG9uIHNvbWUKKwkJICAgUGl4ZWx2aWV3IFVsdHJhIGJvYXJkcy4gKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGkyY19hZGRyW10gPSB7CisJCQkweGIwID4+IDEsIEkyQ19DTElFTlRfRU5ECisJCX07CisKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNvcmUtPmkyY19hZGFwLAorCQkJCSJ0dmF1ZGlvIiwgInR2YXVkaW8iLCBpMmNfYWRkcik7CisJfQogCiAJc3dpdGNoIChjb3JlLT5ib2FyZG5yKSB7CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfNV9HT0xEOgotCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzdfR09MRDoKKwljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6IHsKKwkJc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBydGNfaW5mbyA9IHsKKwkJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZikKKwkJfTsKKwogCQlyZXF1ZXN0X21vZHVsZSgicnRjLWlzbDEyMDgiKTsKKwkJY29yZS0+aTJjX3J0YyA9IGkyY19uZXdfZGV2aWNlKCZjb3JlLT5pMmNfYWRhcCwgJnJ0Y19pbmZvKTsKKwl9CiAJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfUENJX05BTk86CiAJCXJlcXVlc3RfbW9kdWxlKCJpci1rYmQtaTJjIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAppbmRleCA2MDI1ZmRkLi45YTQzZmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KIAotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLXNnLmg+CkBAIC0yMzEsNiArMjMxLDcgQEAKICNkZWZpbmUgQ1g4OF9CT0FSRF9TQVRUUkFERV9TVDQyMDAgICAgICAgICA3NgogI2RlZmluZSBDWDg4X0JPQVJEX1RCU184OTEwICAgICAgICAgICAgICAgIDc3CiAjZGVmaW5lIENYODhfQk9BUkRfUFJPRl82MjAwICAgICAgICAgICAgICAgNzgKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJIDc5CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtMzAyLDcgKzMwMyw2IEBACiAJc3RydWN0IGJ0Y3hfcmlzY21lbSAgICBzdG9wcGVyOwogCXUzMiAgICAgICAgICAgICAgICAgICAgY291bnQ7CiB9Owotc3RydWN0IGN4ODhfY29yZTsKIAogc3RydWN0IGN4ODhfY29yZSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgZGV2bGlzdDsKQEAgLTMyNyw2ICszMjcsOCBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zdGF0ZSwgaTJjX3JjOwogCiAJLyogY29uZmlnIGluZm8gLS0gYW5hbG9nICovCisJc3RydWN0IHY0bDJfZGV2aWNlIAkgICB2NGwyX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKmkyY19ydGM7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgYm9hcmRucjsKIAlzdHJ1Y3QgY3g4OF9ib2FyZAkgICBib2FyZDsKIApAQCAtMzY1LDYgKzM2NywyMiBAQAogCWludAkJCSAgIGFjdGl2ZV9mZV9pZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4ODhfY29yZSAqdG9fY29yZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBjeDg4X2NvcmUsIHY0bDJfZGV2KTsKK30KKworI2RlZmluZSBjYWxsX2FsbChjb3JlLCBvLCBmLCBhcmdzLi4uKSAJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoIWNvcmUtPmkyY19yYykgewkJCQlcCisJCQlpZiAoY29yZS0+Z2F0ZV9jdHJsKQkJCVwKKwkJCQljb3JlLT5nYXRlX2N0cmwoY29yZSwgMSk7CVwKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZjb3JlLT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKTsgXAorCQkJaWYgKGNvcmUtPmdhdGVfY3RybCkJCQlcCisJCQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDApOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKwogc3RydWN0IGN4ODgwMF9kZXY7CiBzdHJ1Y3QgY3g4ODAyX2RldjsKIApAQCAtNjEwLDggKzYyOCw2IEBACiAvKiBjeDg4LWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gaW50IGN4ODhfaTJjX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHBjaV9kZXYgKnBjaSk7Ci1leHRlcm4gdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwKLQkJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCmluZGV4IDI5ODgxMGQuLmJhMzcwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwpAQCAtMTg5LDE3ICsxODksMjAgQEAKIAkJCQkJZHN0ICs9IGxlbjsKIAkJCQl9CiAJCQkJZWxzZQotCQkJCQllcnIoImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkIiwgbGVuKTsKKwkJCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJCQkiZGFidXNiX2lzb19jb21wbGV0ZTogaW52YWxpZCBsZW4gJWRcbiIsIGxlbik7CiAJCQl9CiAJCQllbHNlCiAJCQkJZGV2X3dhcm4oJnB1cmItPmRldi0+ZGV2LCAiZGFidXNiX2lzb19jb21wbGV0ZTogY29ycnVwdGVkIHBhY2tldCBzdGF0dXM6ICVkXG4iLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQlpZiAoZHN0ICE9IHB1cmItPmFjdHVhbF9sZW5ndGgpCi0JCQllcnIoImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWQiLCBkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJZGV2X2VycigmcHVyYi0+ZGV2LT5kZXYsCisJCQkJImRzdCE9cHVyYi0+YWN0dWFsX2xlbmd0aDolZCE9JWRcbiIsCisJCQkJCWRzdCwgcHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QgKCZzLT5wZW5kaW5nX2lvKSAmJiAhcy0+cmVtb3ZlX3BlbmRpbmcgJiYgcy0+c3RhdGUgIT0gX3N0b3BwZWQpIHsKIAkJcy0+b3ZlcnJ1bnMrKzsKLQkJZXJyKCJvdmVycnVuICglZCkiLCBzLT5vdmVycnVucyk7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAib3ZlcnJ1biAoJWQpXG4iLCBzLT5vdmVycnVucyk7CiAJfQogCXdha2VfdXAgKCZzLT53YWl0KTsKIH0KQEAgLTIyMCwxMyArMjIzLDE0IEBACiAJd2hpbGUgKHRyYW5zZmVyX2xlbiA8IChzLT50b3RhbF9idWZmZXJfc2l6ZSA8PCAxMCkpIHsKIAkJYiA9IGt6YWxsb2Moc2l6ZW9mIChidWZmX3QpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiKSB7Ci0JCQllcnIoImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia3phbGxvYyhzaXplb2YoYnVmZl90KSk9PU5VTExcbiIpOwogCQkJZ290byBlcnI7CiAJCX0KIAkJYi0+cyA9IHM7CiAJCWItPnB1cmIgPSB1c2JfYWxsb2NfdXJiKHBhY2tldHMsIEdGUF9LRVJORUwpOwogCQlpZiAoIWItPnB1cmIpIHsKLQkJCWVycigidXNiX2FsbG9jX3VyYiA9PSBOVUxMIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInVzYl9hbGxvY191cmIgPT0gTlVMTFxuIik7CiAJCQlrZnJlZSAoYik7CiAJCQlnb3RvIGVycjsKIAkJfQpAQCAtMjM1LDcgKzIzOSw4IEBACiAJCWlmICghYi0+cHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CiAJCQlrZnJlZSAoYi0+cHVyYik7CiAJCQlrZnJlZSAoYik7Ci0JCQllcnIoImttYWxsb2MoJWQpPT1OVUxMIiwgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkia21hbGxvYyglZCk9PU5VTExcbiIsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJZ290byBlcnI7CiAJCX0KIApAQCAtMjc5LDEwICsyODQsMTEgQEAKIAogCXJldD11c2JfYnVsa19tc2cocy0+dXNiZGV2LCBwaXBlLCBwYi0+ZGF0YSwgcGItPnNpemUsICZhY3R1YWxfbGVuZ3RoLCAxMDApOwogCWlmKHJldDwwKSB7Ci0JCWVycigiZGFidXNiOiB1c2JfYnVsa19tc2cgZmFpbGVkKCVkKSIscmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkidXNiX2J1bGtfbXNnIGZhaWxlZCglZClcbiIsIHJldCk7CiAKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgewotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0yOTEsNyArMjk3LDcgQEAKIAlpZiggcmV0ID09IC1FUElQRSApIHsKIAkJZGV2X3dhcm4oJnMtPnVzYmRldi0+ZGV2LCAiQ0xFQVJfRkVBVFVSRSByZXF1ZXN0IHRvIHJlbW92ZSBTVEFMTCBjb25kaXRpb24uXG4iKTsKIAkJaWYodXNiX2NsZWFyX2hhbHQocy0+dXNiZGV2LCB1c2JfcGlwZWVuZHBvaW50KHBpcGUpKSkKLQkJCWVycigicmVxdWVzdCBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVxdWVzdCBmYWlsZWRcbiIpOwogCX0KIAogCXBiLT5zaXplID0gYWN0dWFsX2xlbmd0aDsKQEAgLTMwNSw3ICszMTEsOCBAQAogCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlciA9ICBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKCF0cmFuc2Zlcl9idWZmZXIpIHsKLQkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC4iLCBsZW4pOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJkYWJ1c2Jfd3JpdGVtZW06IGttYWxsb2MoJWQpIGZhaWxlZC5cbiIsIGxlbik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzI3LDEzICszMzQsMTQgQEAKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmVjOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1bmluaXRpYWxpemVkX3Zhcihmdyk7CiAKIAlkYmcoIkVudGVyIGRhYnVzYl9sb2FkbWVtIChpbnRlcm5hbCkiKTsKIAogCXJldCA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsICJkYWJ1c2IvZmlybXdhcmUuZnciLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9maXJtd2FyZS5md1wiOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvZmlybXdhcmUuZndcIjogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBkYWJ1c2JfODA1MV9yZXNldCAocywgMSk7CkBAIC0zNDYsOSArMzU0LDEwIEBACiAJCXJldCA9IGRhYnVzYl93cml0ZW1lbShzLCBiZTMyX3RvX2NwdShyZWMtPmFkZHIpLCByZWMtPmRhdGEsCiAJCQkJICAgICAgIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQllcnIoImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpIiwgcmV0LAotCQkJICAgIGJlMzJfdG9fY3B1KHJlYy0+YWRkciksIHJlYy0+ZGF0YSwKLQkJCSAgICBiZTE2X3RvX2NwdShyZWMtPmxlbikpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJImRhYnVzYl93cml0ZW1lbSBmYWlsZWQgKCVkICUwNFggJXAgJWQpXG4iLAorCQkJCXJldCwgYmUzMl90b19jcHUocmVjLT5hZGRyKSwKKwkJCQlyZWMtPmRhdGEsIGJlMTZfdG9fY3B1KHJlYy0+bGVuKSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM5NiwxMyArNDA1LDE1IEBACiAJZGJnKCJFbnRlciBkYWJ1c2JfZnBnYV9kb3dubG9hZCAoaW50ZXJuYWwpIik7CiAKIAlpZiAoIWIpIHsKLQkJZXJyKCJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTCIpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJrbWFsbG9jKHNpemVvZihidWxrX3RyYW5zZmVyX3QpKT09TlVMTFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiZGFidXNiL2JpdHN0cmVhbS5iaW4iLCAmcy0+dXNiZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZXJyKCJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gbG9hZCBcImRhYnVzYi9iaXRzdHJlYW0uYmluXCI6ICVkXG4iLCByZXQpOwogCQlrZnJlZShiKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00MjUsNyArNDM2LDcgQEAKIAkJbWVtY3B5IChiLT5kYXRhICsgNCwgZnctPmRhdGEgKyA3NCArIG4sIDYwKTsKIAkJcmV0ID0gZGFidXNiX2J1bGsgKHMsIGIpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJkYWJ1c2JfYnVsayBmYWlsZWQuIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgImRhYnVzYl9idWxrIGZhaWxlZC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJbWRlbGF5ICgxKTsKQEAgLTQ3OCw5ICs0ODksMTEgQEAKIAogCQkJcmV0ID0gdXNiX3N1Ym1pdF91cmIgKGVuZC0+cHVyYiwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJZXJyKCJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZCIsIHJldCk7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJ1c2Jfc3VibWl0X3VyYiByZXR1cm5lZDolZFxuIiwgcmV0KTsKIAkJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCi0JCQkJCWVycigic3RhcnRyZWs6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkJInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQllbHNlCkBAIC01MjMsNyArNTM2LDggQEAKIAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCi0JCQllcnIoImVycm9yOiByZWNfYnVmX2xpc3QgaXMgZW1wdHkiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCSJlcnJvcjogcmVjX2J1Zl9saXN0IGlzIGVtcHR5XG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTU1Miw3ICs1NjYsOCBAQAogCiAJCQlpZiAobGlzdF9lbXB0eSAoJnMtPnJlY19idWZmX2xpc3QpKSB7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWVycigiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJlcnJvcjogc3RpbGwgbm8gYnVmZmVyIGF2YWlsYWJsZS5cbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwpAQCAtNTczLDcgKzU4OCw3IEBACiAJCWRiZygiY29weV90b191c2VyOiVwICVwICVkIixidWYsIHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHMtPnJlYWRwdHIsIGNudCk7CiAKIAkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzLT5yZWFkcHRyLCBjbnQpKSB7Ci0JCQllcnIoInJlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnI7CkBAIC01ODcsNyArNjAyLDggQEAKIAkJaWYgKHMtPnJlYWRwdHIgPT0gcHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQkJLy8gZmluaXNoZWQsIHRha2UgbmV4dCBidWZmZXIKIAkJCWlmIChkYWJ1c2JfYWRkX2J1Zl90YWlsIChzLCAmcy0+ZnJlZV9idWZmX2xpc3QsICZzLT5yZWNfYnVmZl9saXN0KSkKLQkJCQllcnIoInJlYWQ6IGRhYnVzYl9hZGRfYnVmX3RhaWwgZmFpbGVkIik7CisJCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJCSJyZWFkOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZFxuIik7CiAJCQlzLT5yZWFkcHRyID0gMDsKIAkJfQogCX0KQEAgLTYyMyw3ICs2MzksNyBAQAogCX0KIAlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMSkgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOwotCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcy0+b3BlbmVkID0gMTsKQEAgLTY0OCw3ICs2NjQsNyBAQAogCiAJaWYgKCFzLT5yZW1vdmVfcGVuZGluZykgewogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKQotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJfQogCWVsc2UKIAkJd2FrZV91cCAoJnMtPnJlbW92ZV9vayk7CkBAIC02NTcsNyArNjczLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGRhYnVzYl9pb2N0bCAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXBkYWJ1c2JfdCBzID0gKHBkYWJ1c2JfdCkgZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXBidWxrX3RyYW5zZmVyX3QgcGJ1bGs7CkBAIC02NjYsMTMgKzY4MiwxNyBAQAogCiAJZGJnKCJkYWJ1c2JfaW9jdGwiKTsKIAotCWlmIChzLT5yZW1vdmVfcGVuZGluZykKKwlsb2NrX2tlcm5lbCgpOworCWlmIChzLT5yZW1vdmVfcGVuZGluZykgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOworCX0KIAogCW11dGV4X2xvY2soJnMtPm11dGV4KTsKIAogCWlmICghcy0+dXNiZGV2KSB7CiAJCW11dGV4X3VubG9jaygmcy0+bXV0ZXgpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzEzLDYgKzczMyw3IEBACiAJCWJyZWFrOwogCX0KIAltdXRleF91bmxvY2soJnMtPm11dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzIxLDcgKzc0Miw3IEBACiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKIAkucmVhZCA9CQlkYWJ1c2JfcmVhZCwKLQkuaW9jdGwgPQlkYWJ1c2JfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0JZGFidXNiX2lvY3RsLAogCS5vcGVuID0JCWRhYnVzYl9vcGVuLAogCS5yZWxlYXNlID0JZGFidXNiX3JlbGVhc2UsCiB9OwpAQCAtNzY0LDcgKzc4NSw3IEBACiAJcy0+ZGV2bnVtID0gaW50Zi0+bWlub3I7CiAKIAlpZiAodXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHVzYmRldikgPCAwKSB7Ci0JCWVycigicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAicmVzZXRfY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIHJlamVjdDsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IDB4MjEzMSkgewpAQCAtNzc1LDcgKzc5Niw3IEBACiAJCWRhYnVzYl9mcGdhX2Rvd25sb2FkIChzLCBOVUxMKTsKIAogCQlpZiAodXNiX3NldF9pbnRlcmZhY2UgKHMtPnVzYmRldiwgX0RBQlVTQl9JRiwgMCkgPCAwKSB7Ci0JCQllcnIoInNldF9pbnRlcmZhY2UgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CiAJCQlnb3RvIHJlamVjdDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKaW5kZXggZjEzMmUzMS4uMDEzMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKIAotc3RhdGljIGludCBlbTI4eHhfaXNvY19hdWRpb19kZWluaXQoc3RydWN0IGVtMjh4eCAqZGV2KQorc3RhdGljIGludCBlbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oc3RydWN0IGVtMjh4eCAqZGV2KQogewogCWludCBpOwogCkBAIC02Niw2ICs2Niw3IEBACiAJCQl1c2Jfa2lsbF91cmIoZGV2LT5hZGV2LnVyYltpXSk7CiAJCWVsc2UKIAkJCXVzYl91bmxpbmtfdXJiKGRldi0+YWRldi51cmJbaV0pOworCiAJCXVzYl9mcmVlX3VyYihkZXYtPmFkZXYudXJiW2ldKTsKIAkJZGV2LT5hZGV2LnVyYltpXSA9IE5VTEw7CiAKQEAgLTg3LDYgKzg4LDIwIEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgIHN0cmlkZTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICAgKnJ1bnRpbWU7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6ICAgICAgICAgICAgLyogZXJyb3IgKi8KKwkJZHByaW50aygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJaWYgKGRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pIHsKIAkJc3Vic3RyZWFtID0gZGV2LT5hZGV2LmNhcHR1cmVfcGNtX3N1YnN0cmVhbTsKIAkJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKQEAgLTEzNyw5ICsxNTIsNiBAQAogCX0KIAl1cmItPnN0YXR1cyA9IDA7CiAKLQlpZiAoZGV2LT5hZGV2LnNodXRkb3duKQotCQlyZXR1cm47Ci0KIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWVtMjh4eF9lcnJkZXYoInJlc3VibWl0IG9mIGF1ZGlvIHVyYiBmYWlsZWQgKGVycm9yPSVpKVxuIiwKQEAgLTE5Nyw4ICsyMDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBFTTI4WFhfQVVESU9fQlVGUzsgaSsrKSB7CiAJCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmFkZXYudXJiW2ldLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGVyckNvZGUpIHsKLQkJCWVtMjh4eF9pc29jX2F1ZGlvX2RlaW5pdChkZXYpOwotCisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJfQpAQCAtMjEzLDE0ICsyMjQsMTYgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU46Ci0JCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09GRiAmJiBhcmcgPT0gMSkgeworCQlpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PRkYgJiYKKwkJICAgIGFyZyA9PSBFTTI4WFhfU1RBUlRfQVVESU8pIHsKIAkJCWRldi0+YWRldi5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PTjsKIAkJCWVtMjh4eF9pbml0X2F1ZGlvX2lzb2MoZGV2KTsKLQkJfSBlbHNlIGlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OICYmIGFyZyA9PSAwKSB7CisJCX0gZWxzZSBpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTiAmJgorCQkJICAgYXJnID09IEVNMjhYWF9TVE9QX0FVRElPKSB7CiAJCQlkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT0ZGOwotCQkJZW0yOHh4X2lzb2NfYXVkaW9fZGVpbml0KGRldik7CisJCQllbTI4eHhfZGVpbml0X2lzb2NfYXVkaW8oZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQW4gdW5kZXJydW4gdmVyeSBsaWtlbHkgb2NjdXJyZWQuICIKKwkJCWVtMjh4eF9lcnJkZXYoIkFuIHVuZGVycnVuIHZlcnkgbGlrZWx5IG9jY3VycmVkLiAiCiAJCQkJCSJJZ25vcmluZyBpdC5cbiIpOwogCQl9CiAJCXJldHVybiAwOwpAQCAtMjM0LDcgKzI0Nyw3IEBACiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnMtPnJ1bnRpbWU7CiAKLQlkcHJpbnRrKCJBbG9jYXRpbmcgdmJ1ZmZlclxuIik7CisJZHByaW50aygiQWxsb2NhdGluZyB2YnVmZmVyXG4iKTsKIAlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKIAkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCiAJCQlyZXR1cm4gMDsKQEAgLTMwMiw3ICszMTUsOSBAQAogCQlkcHJpbnRrKCJjaGFuZ2luZyBhbHRlcm5hdGUgbnVtYmVyIHRvIDdcbiIpOwogCX0KIAorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZGV2LT5hZGV2LnVzZXJzKys7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwogCWRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CkBAIC0zMTcsMjIgKzMzMiwxNSBAQAogc3RhdGljIGludCBzbmRfZW0yOHh4X3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JZGV2LT5hZGV2LnVzZXJzLS07CiAKIAlkcHJpbnRrKCJjbG9zaW5nIGRldmljZVxuIik7CiAKIAlkZXYtPm11dGUgPSAxOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJZGV2LT5hZGV2LnVzZXJzLS07CiAJZW0yOHh4X2F1ZGlvX2FuYWxvZ19zZXQoZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQlpZiAoZGV2LT5hZGV2LnVzZXJzID09IDAgJiYgZGV2LT5hZGV2LnNodXRkb3duID09IDEpIHsKLQkJZHByaW50aygiYXVkaW8gdXNlcnM6ICVkXG4iLCBkZXYtPmFkZXYudXNlcnMpOwotCQlkcHJpbnRrKCJkaXNhYmxpbmcgYXVkaW8gc3RyZWFtIVxuIik7Ci0JCWRldi0+YWRldi5zaHV0ZG93biA9IDA7Ci0JCWRwcmludGsoInJlbGVhc2VkIGxvY2tcbiIpOwotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Myw3ICszNzEsNyBAQAogCWRwcmludGsoIlN0b3AgY2FwdHVyZSwgaWYgbmVlZGVkXG4iKTsKIAogCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPT0gU1RSRUFNX09OKQotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAwKTsKKwkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgRU0yOFhYX1NUT1BfQVVESU8pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNzcsMzMgKzM4NSw0MCBAQAogCQkJCSAgICAgIGludCBjbWQpCiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CiAKLQlkcHJpbnRrKCJTaG91bGQgJXMgY2FwdHVyZVxuIiwgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCk/Ci0JCQkJICAgICAgICJzdGFydCI6ICJzdG9wIik7CisJZHByaW50aygiU2hvdWxkICVzIGNhcHR1cmVcbiIsIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpID8KKwkJCQkgICAgICAgInN0YXJ0IiA6ICJzdG9wIik7CisKKwlzcGluX2xvY2soJmRldi0+YWRldi5zbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCAxKTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVEFSVF9BVURJTyk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKLQkJZGV2LT5hZGV2LnNodXRkb3duID0gMTsKLQkJcmV0dXJuIDA7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVE9QX0FVRElPKTsKKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHZhbCA9IC1FSU5WQUw7CiAJfQorCisJc3Bpbl91bmxvY2soJmRldi0+YWRldi5zbG9jayk7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9lbTI4eHhfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQogCQkJCQkJICAgICpzdWJzdHJlYW0pCiB7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVtMjh4eCAqZGV2OwogCXNuZF9wY21fdWZyYW1lc190IGh3cHRyX2RvbmU7CiAKIAlkZXYgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+YWRldi5zbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAlod3B0cl9kb25lID0gZGV2LT5hZGV2Lmh3cHRyX2RvbmVfY2FwdHVyZTsKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBod3B0cl9kb25lOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwppbmRleCAzYjNjYTNmLi4wZjQ4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY2FyZHMuYwpAQCAtMTIyLDYgKzEyMiwyMiBAQAogCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCiB9OwogCisvKiBNdXRlL3VubXV0ZSAqLworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3R2X2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk1LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fdW5tdXRlX3N2aWRfZ3Bpb1tdID0geworCXtFTTI4WFhfUjA4X0dQSU8sCTQsCQk3LAkJMTB9LAorCXsgIC0xLAkJCS0xLAkJLTEsCQktMX0sCit9OworCitzdGF0aWMgc3RydWN0IGVtMjh4eF9yZWdfc2VxIGNvbXByb19tdXRlX2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk2LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKwogLyoKICAqICBCb2FyZCBkZWZpbml0aW9ucwogICovCkBAIC0xODMsNiArMTk5LDI1IEBACiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCiAJfSwKKwlbRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDBdID0geworCQkubmFtZSAgICAgICAgID0gIkdhZG1laSBUVlIyMDAiLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTIsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSB9LAorCX0sCiAJW0VNMjgyMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzI1MF0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSAyNTAgVVNCIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKQEAgLTIyNSw3ICsyNjAsNyBAQAogCQkubmFtZSAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UViBVU0IgMiIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQgfAotCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFfAorCQkJCVREQTk4ODdfUE9SVDFfQUNUSVZFIHwKIAkJCQlUREE5ODg3X1BPUlQyX0FDVElWRSwKIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAogCQkuaGFzX21zcDM0eHggID0gMSwKQEAgLTM1MCwyNiArMzg1LDYgQEAKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAogCQl9IH0sCiAJfSwKLQlbRU0yODIxX0JPQVJEX1BST0xJTktfUExBWVRWX1VTQjJdID0gewotCQkubmFtZSAgICAgICAgID0gIlNJSUcgQVZUdW5lci1QVlIvUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCi0JCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKLQkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywJLyogdW5rbm93bj8gKi8KLQkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwJLyogdW5rbm93bj8gKi8KLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAotCQkuaW5wdXQgICAgICAgID0geyB7Ci0JCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAotCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAotCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKLQkJfSwgewotCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0gfSwKLQl9LAogCVtFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yXSA9IHsKIAkJLm5hbWUgICAgICAgICA9ICJTdXBlcmNvbXAgVVNCIDIuMCBUViIsCiAJCS52YWxpZCAgICAgICAgPSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCwKQEAgLTQ5OCw3ICs1MTMsNyBAQAogCX0sCiAJW0VNMjg2MV9CT0FSRF9ZQUtVTU9fTU9WSUVfTUlYRVJdID0gewogCQkubmFtZSAgICAgICAgICA9ICJZYWt1bW8gTW92aWVNaXhlciIsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KKwkJLnR1bmVyX3R5cGUgICAgPSBUVU5FUl9BQlNFTlQsCS8qIENhcHR1cmUgb25seSBkZXZpY2UgKi8KIAkJLmRlY29kZXIgICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC02MDQsNiArNjE5LDcgQEAKIAkJLm10c19maXJtd2FyZSA9IDEsCiAJCS5oYXNfZHZiICAgICAgPSAxLAogCQkuZHZiX2dwaW8gICAgID0gaGF1cHBhdWdlX3dpbnR2X2h2cl85MDBfZGlnaXRhbCwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTYyOCw2ICs2NDQsNyBAQAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWEMyMDI4LAogCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAogCQkubXRzX2Zpcm13YXJlID0gMSwKKwkJLmlyX2NvZGVzICAgICA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXcsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKQEAgLTg0MiwxMSArODU5LDExIEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MDBfQk9BUkRfR1JBQkJFRVhfVVNCMjgwMF0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiZU1QSUEgVGVjaG5vbG9neSwgSW5jLiBHcmFiQmVlWCsgVmlkZW8gRW5jb2RlciIsCi0JCS5pc19lbTI4MDAgICAgPSAxLAotCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9BQlNFTlQsIC8qIGNhcHR1cmUgb25seSBib2FyZCAqLwotCQkuaW5wdXQgICAgICAgID0geyB7CisJCS5uYW1lICAgICAgID0gImVNUElBIFRlY2hub2xvZ3ksIEluYy4gR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIiLAorCQkuaXNfZW0yODAwICA9IDEsCisJCS5kZWNvZGVyICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS50dW5lcl90eXBlID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KKwkJLmlucHV0ICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLApAQCAtODk3LDcgKzkxNCw3IEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBEYXp6bGUgRFZDIDkwL0RWQyAxMDAiLAorCQkubmFtZSAgICAgICAgID0gIlBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KIAkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAogCQkuaW5wdXQgICAgICAgID0geyB7CkBAIC05NTIsNyArOTY5LDcgQEAKIAkJfSB9LAogCX0sCiAJW0VNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCisJCS5uYW1lICAgICAgICAgPSAiU0lJRyBBVlR1bmVyLVBWUiAvIFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wIiwKIAkJLmhhc19zbmFwc2hvdF9idXR0b24gPSAxLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLApAQCAtMTE5OCw3ICsxMjE1LDkgQEAKIAkJLmhhc19kdmIgICAgICA9IDEsCiAJCS5kdmJfZ3BpbyAgICAgPSBrd29ybGRfMzMwdV9kaWdpdGFsLAogCQkueGNsayAgICAgICAgICAgICA9IEVNMjhYWF9YQ0xLX0ZSRVFVRU5DWV8xMk1IWiwKLQkJLmkyY19zcGVlZCAgICAgICAgPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8IEVNMjhYWF9JMkNfRUVQUk9NX09OX0JPQVJEIHwgRU0yOFhYX0kyQ19FRVBST01fS0VZX1ZBTElELAorCQkuaTJjX3NwZWVkICAgICAgICA9IEVNMjhYWF9JMkNfQ0xLX1dBSVRfRU5BQkxFIHwKKwkJCQkgICAgRU0yOFhYX0kyQ19FRVBST01fT05fQk9BUkQgfAorCQkJCSAgICBFTTI4WFhfSTJDX0VFUFJPTV9LRVlfVkFMSUQsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCkBAIC0xMjIzLDIxICsxMjQyLDg4IEBACiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCiAJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmFkZWNvZGVyICAgICA9IEVNMjhYWF9UVkFVRElPLAorCQkubXV0ZV9ncGlvICAgID0gY29tcHJvX211dGVfZ3BpbywKIAkJLmlucHV0ICAgICAgICA9IHsgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKIAkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQkJLmdwaW8gICAgID0gY29tcHJvX3VubXV0ZV90dl9ncGlvLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCQkuZ3BpbyAgICAgPSBjb21wcm9fdW5tdXRlX3N2aWRfZ3BpbywKKwkJfSB9LAorCX0sCisJW0VNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTJdID0geworCQkubmFtZQkgICAgICA9ICJLYWlvbXkgVFZuUEMgVTIiLAorCQkudmNoYW5uZWxzICAgID0gMywKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKKwkJLnR1bmVyX2FkZHIgICA9IDB4NjEsCisJCS5tdHNfZmlybXdhcmUgPSAxLAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19rYWlvbXksCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTEsCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9LCB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX1NWSURFTywKIAkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCiAJCX0gfSwKKwkJLnJhZGlvCQk9IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9SQURJTywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0KKwl9LAorCVtFTTI4NjBfQk9BUkRfRUFTWUNBUF0gPSB7CisJCS5uYW1lICAgICAgICAgPSAiRWFzeSBDYXAgQ2FwdHVyZSBEQy02MCIsCisJCS52Y2hhbm5lbHMgICAgPSAyLAorCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAorCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1NBQTcxMVgsCisJCS5pbnB1dCAgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCisJCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9IH0sCisJfSwKKwlbRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWl0gPSB7CisJCS5uYW1lICAgICAgID0gIklPLURBVEEgR1YtTVZQL1NaIiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1BISUxJUFNfRk0xMjM2X01LMywKKwkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogQ29tcG9zaXRlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgeWV0ICovCisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0sIHsgLyogUy12aWRlbyBoYXMgbm90IGJlZW4gdGVzdGVkIHlldCAqLworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJfSB9LAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGVtMjh4eF9iY291bnQgPSBBUlJBWV9TSVpFKGVtMjh4eF9ib2FyZHMpOwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGUgW10gPSB7CitzdHJ1Y3QgdXNiX2RldmljZV9pZCBlbTI4eHhfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTApLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yNzUwX0JPQVJEX1VOS05PV04gfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweDI3NTEpLApAQCAtMTI2MCw2ICsxMzQ2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzAwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9LV09STERfUFZSVFZfMzAwVSB9LAorCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMyksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzA1KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg4MF9CT0FSRF9LV09STERfRFZCXzMwNVUgfSwKIAl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMTApLApAQCAtMTI3OCw2ICsxMzY2LDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9HUkFCQkVFWF9VU0IyODAwIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzU3KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg3MF9CT0FSRF9LV09STERfMzU1VSB9LAorCXsgVVNCX0RFVklDRSgweDFiODAsIDB4ZTMwMiksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfUElOTkFDTEVfRFZDXzkwIH0sIC8qIEthaXNlciBCYWFzIFZpZGVvIHRvIERWRCBtYWtlciAqLwogCXsgVVNCX0RFVklDRSgweDBjY2QsIDB4MDAzNiksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTAgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwNGMpLApAQCAtMTMzMCw2ICsxNDIwLDggQEAKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjgwMF9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfVVNCSUkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwOTNiLCAweGEwMDUpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODYxX0JPQVJEX1BMRVhUT1JfUFhfVFYxMDBVIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwNTE1KSwKKwkJCS5kcml2ZXJfaW5mbyA9IEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1ogfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVtMjh4eF9pZF90YWJsZSk7CkBAIC0xMzM3LDcgKzE0MjksNyBAQAogLyoKICAqIEVFUFJPTSBoYXNoIHRhYmxlIGZvciBkZXZpY2VzIHdpdGggZ2VuZXJpYyBVU0IgSURzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZW0yOHh4X2hhc2hfdGFibGUgZW0yOHh4X2VlcHJvbV9oYXNoIFtdID0geworc3RhdGljIHN0cnVjdCBlbTI4eHhfaGFzaF90YWJsZSBlbTI4eHhfZWVwcm9tX2hhc2hbXSA9IHsKIAkvKiBQL046IFNBIDYwMDAyMDcwNDY1IFR1bmVyOiBUVkY3NTMzLU1GICovCiAJezB4NmNlMDVhOGYsIEVNMjgyMF9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LAogCXsweDcyY2M1YThiLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyLCBUVU5FUl9ZTUVDX1RWRl81NTMzTUZ9LApAQCAtMTM0OSw2ICsxNDQxLDcgQEAKIAl7MHhiMDZhMzJjMywgRU0yODAwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjAwLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAogCXsweGY1MTIwMGUzLCBFTTI4MDBfQk9BUkRfVkdFQVJfUE9DS0VUVFYsIFRVTkVSX0xHX1BBTF9ORVdfVEFQQ30sCiAJezB4MWJhNTAwODAsIEVNMjg2MF9CT0FSRF9QT0lOVE5JWF9JTlRSQU9SQUxfQ0FNRVJBLCBUVU5FUl9BQlNFTlR9LAorCXsweGM1MTIwMGUzLCBFTTI4MjBfQk9BUkRfR0FETUVJX1RWUjIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIH07CiAKIGludCBlbTI4eHhfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHRyLCBpbnQgY29tcG9uZW50LCBpbnQgY29tbWFuZCwgaW50IGFyZykKQEAgLTEzNjgsNyArMTQ2MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbTI4eHhfdHVuZXJfY2FsbGJhY2spOwogCi1zdGF0aWMgdm9pZCBpbmxpbmUgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgZW0yOHh4X3NldF9tb2RlbChzdHJ1Y3QgZW0yOHh4ICpkZXYpCiB7CiAJbWVtY3B5KCZkZXYtPmJvYXJkLCAmZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXSwgc2l6ZW9mKGRldi0+Ym9hcmQpKTsKIApAQCAtMTUwNCw2ICsxNTk3LDM0IEBACiAJCS8qIGVuYWJsZXMgYXVkaW8gZm9yIHRoYXQgZGV2aWNlcyAqLwogCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZkKTsKIAkJYnJlYWs7CisKKwljYXNlIEVNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTI6CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCAiXHgwNyIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMDZfSTJDX0NMSywgIlx4NDAiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDBkLCAiXHg0MiIsIDEpOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZkIiwgMSk7CisJCW1zbGVlcCgxMCk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZmYiLCAxKTsKKwkJbXNsZWVwKDEwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg3ZiIsIDEpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceDZiIiwgMSk7CisKKwkJYnJlYWs7CisJY2FzZSBFTTI4NjBfQk9BUkRfRUFTWUNBUDoKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmOCIsIDEpOworCQlicmVhazsKKworCWNhc2UgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWjoKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZik7CisJCW1zbGVlcCg3MCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZjcpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGZlKTsKKwkJbXNsZWVwKDcwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZCk7CisJCW1zbGVlcCg3MCk7CisJCWJyZWFrOwogCX0KIAogCWVtMjh4eF9ncGlvX3NldChkZXYsIGRldi0+Ym9hcmQudHVuZXJfZ3Bpbyk7CkBAIC0xNjEwLDcgKzE3MzEsNyBAQAogCQkJZW0yOHh4X2VycmRldigiSWYgdGhlIGJvYXJkIHdlcmUgbWlzc2RldGVjdGVkLCAiCiAJCQkJICAgICAgInBsZWFzZSBlbWFpbCB0aGlzIGxvZyB0bzpcbiIpOwogCQkJZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0ICIKLQkJCQkgICAgICAiIDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwkJCQkgICAgICAiIDxsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGRldGVjdGVkIGFzICVzXG4iLAogCQkJCSAgICAgIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSk7CiAKQEAgLTE2NDIsNyArMTc2Myw3IEBACiAJCQllbTI4eHhfZXJyZGV2KCJJZiB0aGUgYm9hcmQgd2VyZSBtaXNzZGV0ZWN0ZWQsICIKIAkJCQkgICAgICAicGxlYXNlIGVtYWlsIHRoaXMgbG9nIHRvOlxuIik7CiAJCQllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgIgotCQkJCSAgICAgICIgPHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbT5cbiIpOworCQkJCSAgICAgICIgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCQkJZW0yOHh4X2VycmRldigiQm9hcmQgZGV0ZWN0ZWQgYXMgJXNcbiIsCiAJCQkJICAgICAgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lKTsKIApAQCAtMTY1NSw3ICsxNzc2LDcgQEAKIAllbTI4eHhfZXJyZGV2KCJZb3UgbWF5IHRyeSB0byB1c2UgY2FyZD08bj4gaW5zbW9kIG9wdGlvbiB0byAiCiAJCSAgICAgICJ3b3JrYXJvdW5kIHRoYXQuXG4iKTsKIAllbTI4eHhfZXJyZGV2KCJQbGVhc2Ugc2VuZCBhbiBlbWFpbCB3aXRoIHRoaXMgbG9nIHRvOlxuIik7Ci0JZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0IDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwllbTI4eHhfZXJyZGV2KCJcdFY0TCBNYWlsaW5nIExpc3QgPGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZz5cbiIpOwogCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGVlcHJvbSBoYXNoIGlzIDB4JTA4bHhcbiIsIGRldi0+aGFzaCk7CiAJZW0yOHh4X2VycmRldigiQm9hcmQgaTJjIGRldmljZWxpc3QgaGFzaCBpcyAweCUwOGx4XG4iLCBkZXYtPmkyY19oYXNoKTsKIApAQCAtMTgwMCw2ICsxOTIxLDggQEAKIAkJcmVxdWVzdF9tb2R1bGUoInR2cDUxNTAiKTsKIAlpZiAoZGV2LT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgPT0gRU0yOFhYX1RWQVVESU8pCisJCXJlcXVlc3RfbW9kdWxlKCJ0dmF1ZGlvIik7CiAjZW5kaWYKIAogCWVtMjh4eF9jb25maWdfdHVuZXIoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCmluZGV4IDk0ZmIxYjYuLjhmMTk5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMzMsOCArMzMsOCBAQAogLyogI2RlZmluZSBFTkFCTEVfREVCVUdfSVNPQ19GUkFNRVMgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBjb3JlX2RlYnVnOwotbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhjb3JlX2RlYnVnLCJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7Cittb2R1bGVfcGFyYW0oY29yZV9kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbY29yZV0iKTsKIAogI2RlZmluZSBlbTI4eHhfY29yZWRiZyhmbXQsIGFyZy4uLikgZG8ge1wKIAlpZiAoY29yZV9kZWJ1ZykgXApAQCAtNDIsOCArNDIsOCBAQAogCQkJIGRldi0+bmFtZSwgX19mdW5jX18gLCAjI2FyZyk7IH0gd2hpbGUgKDApCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX2RlYnVnOwotbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZyxpbnQsMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHJlZ19kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOworbW9kdWxlX3BhcmFtKHJlZ19kZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVnX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtVUkIgcmVnXSIpOwogCiAjZGVmaW5lIGVtMjh4eF9yZWdkYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKHJlZ19kZWJ1ZykgXApAQCAtNzcsNyArNzcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZWdfZGVidWcpIHsKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiSU46ICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWlmIChyZWdfZGVidWcpIHsKIAkJaW50IGJ5dGU7CiAKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCisJCXByaW50ayhLRVJOX0RFQlVHICIocGlwZSAweCUwOHgpOiAiCiAJCQkiT1VUOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggPj4+IiwKIAkJCXBpcGUsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC0zNzgsNiArMzc4LDExIEBACiAJCX0KIAl9CiAKKwlpZiAoZGV2LT5ib2FyZC5tdXRlX2dwaW8gJiYgZGV2LT5tdXRlKQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLm11dGVfZ3Bpbyk7CisJZWxzZQorCQllbTI4eHhfZ3Bpb19zZXQoZGV2LCBJTlBVVChkZXYtPmN0bF9pbnB1dCktPmdwaW8pOworCiAJcmV0ID0gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgaW5wdXQsIDB4YzApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNDI0LDcgKzQyOSw3IEBACiAKIAl4Y2xrID0gZGV2LT5ib2FyZC54Y2xrICYgMHg3ZjsKIAlpZiAoIWRldi0+bXV0ZSkKLQkJeGNsayB8PSAweDgwOworCQl4Y2xrIHw9IEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURTsKIAogCXJldCA9IGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssIHhjbGspOwogCWlmIChyZXQgPCAwKQpAQCAtNDYyLDcgKzQ2Nyw4IEBACiAJCWlmIChkZXYtPmN0bF9hb3V0cHV0ICYgRU0yOFhYX0FPVVRfUENNX0lOKSB7CiAJCQlpbnQgc2VsID0gYWM5N19yZXR1cm5fcmVjb3JkX3NlbGVjdChkZXYtPmN0bF9hb3V0cHV0KTsKIAotCQkJLyogVXNlIHRoZSBzYW1lIGlucHV0IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzICovCisJCQkvKiBVc2UgdGhlIHNhbWUgaW5wdXQgZm9yIGJvdGggbGVmdCBhbmQgcmlnaHQKKwkJCSAgIGNoYW5uZWxzICovCiAJCQlzZWwgfD0gKHNlbCA8PCA4KTsKIAogCQkJZW0yOHh4X3dyaXRlX2FjOTcoZGV2LCBBQzk3X1JFQ09SRF9TRUxFQ1QsIHNlbCk7CkBAIC02OTgsNyArNzA0LDcgQEAKIAkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjMyX1ZTQ0FMRUxPVywgKGNoYXIgKilidWYsIDIpOwogCQkvKiBpdCBzZWVtcyB0aGF0IGJvdGggSCBhbmQgViBzY2FsZXJzIG11c3QgYmUgYWN0aXZlCiAJCSAgIHRvIHdvcmsgY29ycmVjdGx5ICovCi0JCW1vZGUgPSAoaCB8fCB2KT8gMHgzMDogMHgwMDsKKwkJbW9kZSA9IChoIHx8IHYpID8gMHgzMCA6IDB4MDA7CiAJfQogCXJldHVybiBlbTI4eHhfd3JpdGVfcmVnX2JpdHMoZGV2LCBFTTI4WFhfUjI2X0NPTVBSLCBtb2RlLCAweDMwKTsKIH0KQEAgLTgyNyw2ICs4MzMsMTkgQEAKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBlbTI4eHgsIHZpZHEpOwogCWludCByYywgaTsKIAorCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6ICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KKwljYXNlIC1FVElNRURPVVQ6ICAgIC8qIE5BSyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJZGVmYXVsdDogICAgICAgICAgICAvKiBlcnJvciAqLworCQllbTI4eHhfaXNvY2RiZygidXJiIGNvbXBsZXRpdGlvbiBlcnJvciAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCiAJLyogQ29weSBkYXRhIGZyb20gVVJCICovCiAJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKIAlyYyA9IGRldi0+aXNvY19jdGwuaXNvY19jb3B5KGRldiwgdXJiKTsKQEAgLTk0NSw3ICs5NjQsNyBAQAogCQkJZW0yOHh4X2VycigidW5hYmxlIHRvIGFsbG9jYXRlICVpIGJ5dGVzIGZvciB0cmFuc2ZlciIKIAkJCQkJIiBidWZmZXIgJWklc1xuIiwKIAkJCQkJc2Jfc2l6ZSwgaSwKLQkJCQkJaW5faW50ZXJydXB0KCk/IiB3aGlsZSBpbiBpbnQiOiIiKTsKKwkJCQkJaW5faW50ZXJydXB0KCkgPyAiIHdoaWxlIGluIGludCIgOiAiIik7CiAJCQllbTI4eHhfdW5pbml0X2lzb2MoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC05NjMsNyArOTgyLDcgQEAKIAkJCQkgZW0yOHh4X2lycV9jYWxsYmFjaywgZG1hX3EsIDEpOwogCiAJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBtYXhfcGFja2V0czsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCiAJCWsgPSAwOwogCQlmb3IgKGogPSAwOyBqIDwgbWF4X3BhY2tldHM7IGorKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCmluZGV4IDlhZDg1MjcuLmZjZDI1NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlICJsZ2R0MzMweC5oIgogI2luY2x1ZGUgInpsMTAzNTMuaCIKICNpbmNsdWRlICJzNWgxNDA5LmgiCi0jaWZkZWYgRU0yOFhYX0RSWDM5N1hEX1NVUFBPUlQKLSNpbmNsdWRlICJkcngzOTd4RC5oIgotI2VuZGlmCiAKIE1PRFVMRV9ERVNDUklQVElPTigiZHJpdmVyIGZvciBlbTI4eHggYmFzZWQgRFZCIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwppbmRleCBkNjlmMGVmLi4wMmMxMmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCkBAIC00MDIsMTAgKzQwMiwxMiBAQAogCQkJCSBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCBzYW1wbGUgcmF0ZT0zMmtcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRJMlMgYXVkaW8sIDMgc2FtcGxlIHJhdGVzXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEkyUyBhdWRpbywgMyBzYW1wbGUgcmF0ZXNcbiIsCisJCQkJIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTA4LDEyICs1MTAsMTcgQEAKIAkJZHByaW50azEoMSwgImF0dGFjaF9pbmZvcm06IHR2cDUxNTAgZGV0ZWN0ZWQuXG4iKTsKIAkJYnJlYWs7CiAKKwljYXNlIDB4YjA6CisJCWRwcmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiB0ZGE5ODc0IGRldGVjdGVkXG4iKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlpZiAoIWRldi0+dHVuZXJfYWRkcikKIAkJCWRldi0+dHVuZXJfYWRkciA9IGNsaWVudC0+YWRkcjsKIAogCQlkcHJpbnRrMSgxLCAiYXR0YWNoIGluZm9ybTogZGV0ZWN0ZWQgSTJDIGFkZHJlc3MgJXhcbiIsCiAJCQkJY2xpZW50LT5hZGRyIDw8IDEpOworCQlkcHJpbnRrMSgxLCAiZHJpdmVyIGlkICVkXG4iLCBjbGllbnQtPmRyaXZlci0+aWQpOwogCiAJfQogCkBAIC01NTIsNiArNTU5LDcgQEAKIAlbMHg4MCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHg4OCA+PiAxXSA9ICJtc3AzNHh4IiwKIAlbMHhhMCA+PiAxXSA9ICJlZXByb20iLAorCVsweGIwID4+IDFdID0gInRkYTk4NzQiLAogCVsweGI4ID4+IDFdID0gInR2cDUxNTBhIiwKIAlbMHhiYSA+PiAxXSA9ICJ0dnA1MTUwYSIsCiAJWzB4YzAgPj4gMV0gPSAidHVuZXIgKGFuYWxvZykiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCAwNDQzYWZlLi5hNWFiZmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwpAQCAtNjgsOCArNjgsNyBAQAogCiAJLyogcG9sbCBleHRlcm5hbCBkZWNvZGVyICovCiAJaW50IHBvbGxpbmc7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXVuc2lnbmVkIGludCBsYXN0X3RvZ2dsZToxOwogCXVuc2lnbmVkIGludCBsYXN0X3JlYWRjb3VudDsKIAl1bnNpZ25lZCBpbnQgcmVwZWF0X2ludGVydmFsOwpAQCAtMjkyLDMyICsyOTEsMjMgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IChzdHJ1Y3QgZW0yOHh4X0lSICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmspOworCXN0cnVjdCBlbTI4eHhfSVIgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbTI4eHhfSVIsIHdvcmsud29yayk7CiAKIAllbTI4eHhfaXJfaGFuZGxlX2tleShpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RhcnQoc3RydWN0IGVtMjh4eF9JUiAqaXIpCiB7Ci0Jc2V0dXBfdGltZXIoJmlyLT50aW1lciwgaXJfdGltZXIsICh1bnNpZ25lZCBsb25nKWlyKTsKLQlJTklUX1dPUksoJmlyLT53b3JrLCBlbTI4eHhfaXJfd29yayk7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgZW0yOHh4X2lyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogfQogCiBzdGF0aWMgdm9pZCBlbTI4eHhfaXJfc3RvcChzdHJ1Y3QgZW0yOHh4X0lSICppcikKIHsKLQlkZWxfdGltZXJfc3luYygmaXItPnRpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaXItPndvcmspOwogfQogCiBpbnQgZW0yOHh4X2lyX2luaXQoc3RydWN0IGVtMjh4eCAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwppbmRleCA4ZTYxYjJjLi41NzU0NzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTg2LDcgKzE4Niw4IEBACiAJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgxKVxuIiwKIAkJCSAgICAgICAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSkgLQogCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKLQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplIC0gKGNoYXIgKilzdGFydHdyaXRlOworCQlsZW5jb3B5ID0gcmVtYWluOwogCX0KIAlpZiAobGVuY29weSA8PSAwKQogCQlyZXR1cm47CkBAIC0yMDIsNyArMjAzLDggQEAKIAkJZWxzZQogCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKIAotCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkgeworCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCisJCSAgICBidWYtPnZiLnNpemUpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJPdmVyZmxvdyBvZiAlemkgYnl0ZXMgcGFzdCBidWZmZXIgZW5kICgyKVxuIiwKIAkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KIAkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOwpAQCAtMzQ3LDcgKzM0OSw3IEBACiAJCX0KIAkJaWYgKHBbMF0gPT0gMHgyMiAmJiBwWzFdID09IDB4NWEpIHsKIAkJCWVtMjh4eF9pc29jZGJnKCJWaWRlbyBmcmFtZSAlZCwgbGVuZ3RoPSVpLCAlc1xuIiwgcFsyXSwKLQkJCQkgICAgICAgbGVuLCAocFsyXSAmIDEpPyAib2RkIiA6ICJldmVuIik7CisJCQkJICAgICAgIGxlbiwgKHBbMl0gJiAxKSA/ICJvZGQiIDogImV2ZW4iKTsKIAogCQkJaWYgKCEocFsyXSAmIDEpKSB7CiAJCQkJaWYgKGJ1ZiAhPSBOVUxMKQpAQCAtNDc2LDcgKzQ3OCw5IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBlbTI4eHhfYnVmZmVyLAorCQkJCQkJCXZiKTsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CiAJc3RydWN0IGVtMjh4eCAgICAgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OwogCXN0cnVjdCBlbTI4eHhfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKQEAgLTQ4OSw3ICs0OTMsOSBAQAogc3RhdGljIHZvaWQgYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKIAkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICpidWYgID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwgdmIpOworCXN0cnVjdCBlbTI4eHhfYnVmZmVyICAgKmJ1ZiAgPSBjb250YWluZXJfb2YodmIsCisJCQkJCQkgICAgc3RydWN0IGVtMjh4eF9idWZmZXIsCisJCQkJCQkgICAgdmIpOwogCXN0cnVjdCBlbTI4eHhfZmggICAgICAgKmZoICAgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBlbTI4eHggICAgICAgICAgKmRldiAgPSAoc3RydWN0IGVtMjh4eCAqKWZoLT5kZXY7CiAKQEAgLTUzNCw2ICs1NDAsMTMgQEAKIAkJCSZyb3V0ZSk7CiAJfQogCisJaWYgKGRldi0+Ym9hcmQuYWRlY29kZXIgIT0gRU0yOFhYX05PQURFQ09ERVIpIHsKKwkJcm91dGUuaW5wdXQgPSBkZXYtPmN0bF9haW5wdXQ7CisJCXJvdXRlLm91dHB1dCA9IGRldi0+Y3RsX2FvdXRwdXQ7CisJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsCisJCQkmcm91dGUpOworCX0KKwogCWVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CiB9CiAKQEAgLTU1Nyw3ICs1NzAsNyBAQAogCiBzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKIHsKLQlyZXR1cm4gKGZoLT5zdHJlYW1fb24pOworCXJldHVybiBmaC0+c3RyZWFtX29uOwogfQogCiBzdGF0aWMgdm9pZCByZXNfZnJlZShzdHJ1Y3QgZW0yOHh4X2ZoICpmaCkKQEAgLTc5MSw3ICs4MDQsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkICogbm9ybSkKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqbm9ybSkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgKmZoICA9IHByaXY7CiAJc3RydWN0IGVtMjh4eCAgICAgICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTAwOCw4ICsxMDIxLDEzIEBACiAKIAlpZiAoZGV2LT5ib2FyZC5oYXNfbXNwMzR4eCkKIAkJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKLQllbHNlCisJZWxzZSB7CiAJCXJjID0gZW0yOHh4X2dldF9jdHJsKGRldiwgY3RybCk7CisJCWlmIChyYyA8IDApIHsKKwkJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJCQlyYyA9IDA7CisJCX0KKwl9CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJcmV0dXJuIHJjOwpAQCAtMTM0NSw3ICsxMzYzLDcgQEAKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJlbTI4eHgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZW0yOHh4X2JvYXJkc1tkZXYtPm1vZGVsXS5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCiAJY2FwLT52ZXJzaW9uID0gRU0yOFhYX1ZFUlNJT05fQ09ERTsKIApAQCAtMTQzMSw3ICsxNDQ5LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52Yl92aWRxLCByYikpOworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTE0NDUsNyArMTQ2Myw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpKTsKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQpAQCAtMTQ1OCw3ICsxNDc2LDcgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLQlyZXR1cm4gKHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKSk7CisJcmV0dXJuIHZpZGVvYnVmX3FidWYoJmZoLT52Yl92aWRxLCBiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKQEAgLTE0NzEsOCArMTQ4OSw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKTsKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKQEAgLTE0OTYsNyArMTUxMyw3IEBACiAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAogCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKQEAgLTE3ODEsNyArMTc5OCw3IEBACiAgKiBlbTI4eHhfdjRsMl9wb2xsKCkKICAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBlbTI4eHhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZW0yOHh4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZW0yOHh4ICpkZXYgPSBmaC0+ZGV2OwpAQCAtMTkzNCw4ICsxOTUxLDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSAqZW0yOHh4X3ZkZXZfaW5pdChzdHJ1Y3QgZW0yOHh4ICpkZXYsCi0JCQkJCSAgICAgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdHlwZV9uYW1lKQorCQkJCQljb25zdCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp0ZW1wbGF0ZSwKKwkJCQkJY29uc3QgY2hhciAqdHlwZV9uYW1lKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKIApAQCAtMTk4NCw4ICsyMDAxLDkgQEAKIAkvKiBlbmFibGUgdmJpIGNhcHR1cmluZyAqLwogCiAvKgllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRV9BVURJT1NSQywgMHhjMCk7IGF1ZGlvIHJlZ2lzdGVyICovCi0gICAgICAgdmFsID0gKHU4KWVtMjh4eF9yZWFkX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSyk7Ci0gICAgICAgZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEZfWENMSywgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOworCXZhbCA9ICh1OCllbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEspOworCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssCisJCQkgKEVNMjhYWF9YQ0xLX0FVRElPX1VOTVVURSB8IHZhbCkpOwogCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjExX1ZJTkNUUkwsIDB4NTEpOwogCiAJZW0yOHh4X3NldF9vdXRmbXQoZGV2KTsKQEAgLTIwMjAsNyArMjAzOCw4IEBACiAJfQogCiAJaWYgKGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ucmFkaW8udHlwZSA9PSBFTTI4WFhfUkFESU8pIHsKLQkJZGV2LT5yYWRpb19kZXYgPSBlbTI4eHhfdmRldl9pbml0KGRldiwgJmVtMjh4eF9yYWRpb190ZW1wbGF0ZSwgInJhZGlvIik7CisJCWRldi0+cmFkaW9fZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfcmFkaW9fdGVtcGxhdGUsCisJCQkJCQkgICJyYWRpbyIpOwogCQlpZiAoIWRldi0+cmFkaW9fZGV2KSB7CiAJCQllbTI4eHhfZXJyZGV2KCJjYW5ub3QgYWxsb2NhdGUgdmlkZW9fZGV2aWNlLlxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKaW5kZXggZGQyY2QzNi4uYTMzYTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LmgKQEAgLTcwLDcgKzcwLDYgQEAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1ZJREVPTE9HWV8yMEsxNFhVU0IJICAzMAogI2RlZmluZSBFTTI4MjFfQk9BUkRfVVNCR0VBUl9WRDIwNAkJICAzMQogI2RlZmluZSBFTTI4MjFfQk9BUkRfU1VQRVJDT01QX1VTQl8yCQkgIDMyCi0jZGVmaW5lIEVNMjgyMV9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyCSAgMzMKICNkZWZpbmUgRU0yODYwX0JPQVJEX1RFUlJBVEVDX0hZQlJJRF9YUwkJICAzNAogI2RlZmluZSBFTTI4NjBfQk9BUkRfVFlQSE9PTl9EVkRfTUFLRVIJCSAgMzUKICNkZWZpbmUgRU0yODYwX0JPQVJEX05FVEdNQkhfQ0FNCQkgIDM2CkBAIC05OCw2ICs5NywxMCBAQAogI2RlZmluZSBFTTI4MjBfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9GT1JZT1UJICA1OAogI2RlZmluZSBFTTI4ODNfQk9BUkRfSEFVUFBBVUdFX1dJTlRWX0hWUl84NTAJICA2MAogI2RlZmluZSBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfQk9YNF9VU0IyCSAgNjEKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDAJCSAgNjIKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMiAgICAgICAgICAgICAgNjMKKyNkZWZpbmUgRU0yODYwX0JPQVJEX0VBU1lDQVAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgRU0yODIwX0JPQVJEX0lPREFUQV9HVk1WUF9TWgkJICA2NQogCiAvKiBMaW1pdHMgbWluaW11bSBhbmQgZGVmYXVsdCBudW1iZXIgb2YgYnVmZmVycyAqLwogI2RlZmluZSBFTTI4WFhfTUlOX0JVRiA0CkBAIC0xMTAsNiArMTEzLDEwIEBACiAjZGVmaW5lIEVNMjhYWF9CT0FSRF9OT1RfVkFMSURBVEVEIDEKICNkZWZpbmUgRU0yOFhYX0JPQVJEX1ZBTElEQVRFRAkgICAwCiAKKy8qIFBhcmFtcyBmb3IgZW0yOHh4X2NtZCgpIGF1ZGlvICovCisjZGVmaW5lIEVNMjhYWF9TVEFSVF9BVURJTyAgICAgIDEKKyNkZWZpbmUgRU0yOFhYX1NUT1BfQVVESU8gICAgICAgMAorCiAvKiBtYXhpbXVtIG51bWJlciBvZiBlbTI4eHggYm9hcmRzICovCiAjZGVmaW5lIEVNMjhYWF9NQVhCT0FSRFMgNCAvKkZJWE1FOiBzaG91bGQgYmUgYmlnZ2VyICovCiAKQEAgLTE1NCw3ICsxNjEsOCBAQAogKi8KIAogLyogdGltZSB0byB3YWl0IHdoZW4gc3RvcHBpbmcgdGhlIGlzb2MgdHJhbnNmZXIgKi8KLSNkZWZpbmUgRU0yOFhYX1VSQl9USU1FT1VUICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX05VTV9CVUZTICogRU0yOFhYX05VTV9QQUNLRVRTKQorI2RlZmluZSBFTTI4WFhfVVJCX1RJTUVPVVQgXAorCQkJbXNlY3NfdG9famlmZmllcyhFTTI4WFhfTlVNX0JVRlMgKiBFTTI4WFhfTlVNX1BBQ0tFVFMpCiAKIC8qIHRpbWUgaW4gbXNlY3MgdG8gd2FpdCBmb3IgaTJjIHdyaXRlcyB0byBmaW5pc2ggKi8KICNkZWZpbmUgRU0yODAwX0kyQ19XUklURV9USU1FT1VUIDIwCkBAIC0zNDgsNiArMzU2LDExIEBACiAJRU0yOFhYX1NBQTcxMVgsCiB9OwogCitlbnVtIGVtMjh4eF9hZGVjb2RlciB7CisJRU0yOFhYX05PQURFQ09ERVIgPSAwLAorCUVNMjhYWF9UVkFVRElPLAorfTsKKwogc3RydWN0IGVtMjh4eF9ib2FyZCB7CiAJY2hhciAqbmFtZTsKIAlpbnQgdmNoYW5uZWxzOwpAQCAtMzYxLDYgKzM3NCw3IEBACiAJc3RydWN0IGVtMjh4eF9yZWdfc2VxICpkdmJfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnN1c3BlbmRfZ3BpbzsKIAlzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgKnR1bmVyX2dwaW87CisJc3RydWN0IGVtMjh4eF9yZWdfc2VxICptdXRlX2dwaW87CiAKIAl1bnNpZ25lZCBpbnQgaXNfZW0yODAwOjE7CiAJdW5zaWduZWQgaW50IGhhc19tc3AzNHh4OjE7CkBAIC0zNzMsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHhjbGssIGkyY19zcGVlZDsKIAogCWVudW0gZW0yOHh4X2RlY29kZXIgZGVjb2RlcjsKKwllbnVtIGVtMjh4eF9hZGVjb2RlciBhZGVjb2RlcjsKIAogCXN0cnVjdCBlbTI4eHhfaW5wdXQgICAgICAgaW5wdXRbTUFYX0VNMjhYWF9JTlBVVF07CiAJc3RydWN0IGVtMjh4eF9pbnB1dAkgIHJhZGlvOwpAQCAtNDIwLDcgKzQzNSw3IEBACiAJdW5zaWduZWQgaW50IGh3cHRyX2RvbmVfY2FwdHVyZTsKIAlzdHJ1Y3Qgc25kX2NhcmQgICAgICAgICAgICAqc25kY2FyZDsKIAotCWludCB1c2Vycywgc2h1dGRvd247CisJaW50IHVzZXJzOwogCWVudW0gZW0yOHh4X3N0cmVhbV9zdGF0ZSBjYXB0dXJlX3N0cmVhbTsKIAlzcGlubG9ja190IHNsb2NrOwogfTsKQEAgLTUyMyw3ICs1MzgsOCBAQAogCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCiAJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLwogCXN0cnVjdCB1cmIgKnVyYltFTTI4WFhfTlVNX0JVRlNdOwkvKiB1cmIgZm9yIGlzb2MgdHJhbnNmZXJzICovCi0JY2hhciAqdHJhbnNmZXJfYnVmZmVyW0VNMjhYWF9OVU1fQlVGU107CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MgdHJhbnNmZXIgKi8KKwljaGFyICp0cmFuc2Zlcl9idWZmZXJbRU0yOFhYX05VTV9CVUZTXTsJLyogdHJhbnNmZXIgYnVmZmVycyBmb3IgaXNvYworCQkJCQkJICAgdHJhbnNmZXIgKi8KIAljaGFyIHVyYl9idWZbVVJCX01BWF9DVFJMX1NJWkVdOwkvKiB1cmIgY29udHJvbCBtc2cgYnVmZmVyICovCiAKIAkvKiBoZWxwZXIgZnVuY3MgdGhhdCBjYWxsIHVzYl9jb250cm9sX21zZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCmluZGV4IGVlNmE2OTEuLjU3OGRjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKQEAgLTU2LDYgKzU2LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tYXJzLgogCitjb25maWcgVVNCX0dTUENBX01SOTczMTBBCisJdHJpc3RhdGUgIk1hcnMtU2VtaSBNUjk3MzEwQSBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBNUjk3MzEwQSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9tcjk3MzEwYS4KKwogY29uZmlnIFVTQl9HU1BDQV9PVjUxOQogCXRyaXN0YXRlICJPVjUxOSBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCkBAIC0xNjcsNiArMTc2LDI0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcGNhNTYxLgogCitjb25maWcgVVNCX0dTUENBX1NROTA1CisJdHJpc3RhdGUgIlNRIFRlY2hub2xvZ2llcyBTUTkwNSBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNSBjaGlwLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnc3BjYV9zcTkwNS4KKworY29uZmlnIFVTQl9HU1BDQV9TUTkwNUMKKwl0cmlzdGF0ZSAiU1EgVGVjaG5vbG9naWVzIFNROTA1QyBiYXNlZCBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBTUTkwNUMgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3E5MDVjLgorCiBjb25maWcgVVNCX0dTUENBX1NUSzAxNAogCXRyaXN0YXRlICJTeW50ZWsgRFY0MDAwIChTVEswMTQpIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCmluZGV4IGJkOGQ5ZWUuLjhhNjY0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQpAQCAtMSw1MCArMSw1NiBAQAotb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkJCSs9IGdzcGNhX21haW4ubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9DT05FWCkJKz0gZ3NwY2FfY29uZXgubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9FVE9NUykJKz0gZ3NwY2FfZXRvbXMubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYKQkrPSBnc3BjYV9maW5lcGl4Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfTUFSUykJKz0gZ3NwY2FfbWFycy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KQkrPSBnc3BjYV9vdjUxOS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KQkrPSBnc3BjYV9vdjUzNC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykJKz0gZ3NwY2FfcGFjMjA3Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSkgKz0gZ3NwY2FfcGFjNzMxMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikJKz0gZ3NwY2Ffc29uaXhiLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhKKQkrPSBnc3BjYV9zb25peGoubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwKSArPSBnc3BjYV9zcGNhNTAwLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSkgKz0gZ3NwY2Ffc3BjYTUwMS5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICs9IGdzcGNhX3NwY2E1MDUubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2KSArPSBnc3BjYV9zcGNhNTA2Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCkgKz0gZ3NwY2Ffc3BjYTUwOC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICs9IGdzcGNhX3NwY2E1NjEubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTKSArPSBnc3BjYV9zdW5wbHVzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KQkrPSBnc3BjYV9zdGswMTQubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UNjEzKQkrPSBnc3BjYV90NjEzLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKQkrPSBnc3BjYV90djg1MzIubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9WQzAzMlgpCSs9IGdzcGNhX3ZjMDMyeC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1pDM1hYKQkrPSBnc3BjYV96YzN4eC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBKSAgICAgICAgICArPSBnc3BjYV9tYWluLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpICAgICs9IGdzcGNhX2NvbmV4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpICAgICs9IGdzcGNhX2V0b21zLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkgICs9IGdzcGNhX2ZpbmVwaXgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NQVJTKSAgICAgKz0gZ3NwY2FfbWFycy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX01SOTczMTBBKSArPSBnc3BjYV9tcjk3MzEwYS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTE5KSAgICArPSBnc3BjYV9vdjUxOS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX09WNTM0KSAgICArPSBnc3BjYV9vdjUzNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzIwNykgICArPSBnc3BjYV9wYWMyMDcubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExKSAgKz0gZ3NwY2FfcGFjNzMxMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYQikgICArPSBnc3BjYV9zb25peGIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEopICAgKz0gZ3NwY2Ffc29uaXhqLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCkgICs9IGdzcGNhX3NwY2E1MDAubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxKSAgKz0gZ3NwY2Ffc3BjYTUwMS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUpICArPSBnc3BjYV9zcGNhNTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNikgICs9IGdzcGNhX3NwY2E1MDYubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4KSAgKz0gZ3NwY2Ffc3BjYTUwOC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEpICArPSBnc3BjYV9zcGNhNTYxLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDUpICAgICs9IGdzcGNhX3NxOTA1Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDKSAgICs9IGdzcGNhX3NxOTA1Yy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NVTlBMVVMpICArPSBnc3BjYV9zdW5wbHVzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0KSAgICs9IGdzcGNhX3N0azAxNC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1Q2MTMpICAgICArPSBnc3BjYV90NjEzLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKSAgICs9IGdzcGNhX3R2ODUzMi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkgICArPSBnc3BjYV92YzAzMngubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkgICAgKz0gZ3NwY2FfemMzeHgubwogCi1nc3BjYV9tYWluLW9ianMJCQk6PSBnc3BjYS5vCi1nc3BjYV9jb25leC1vYmpzCQk6PSBjb25leC5vCi1nc3BjYV9ldG9tcy1vYmpzCQk6PSBldG9tcy5vCi1nc3BjYV9maW5lcGl4LW9ianMJCTo9IGZpbmVwaXgubwotZ3NwY2FfbWFycy1vYmpzCQkJOj0gbWFycy5vCi1nc3BjYV9vdjUxOS1vYmpzCQk6PSBvdjUxOS5vCi1nc3BjYV9vdjUzNC1vYmpzCQk6PSBvdjUzNC5vCi1nc3BjYV9wYWMyMDctb2JqcwkJOj0gcGFjMjA3Lm8KLWdzcGNhX3BhYzczMTEtb2JqcwkJOj0gcGFjNzMxMS5vCi1nc3BjYV9zb25peGItb2JqcwkJOj0gc29uaXhiLm8KLWdzcGNhX3Nvbml4ai1vYmpzCQk6PSBzb25peGoubwotZ3NwY2Ffc3BjYTUwMC1vYmpzCQk6PSBzcGNhNTAwLm8KLWdzcGNhX3NwY2E1MDEtb2JqcwkJOj0gc3BjYTUwMS5vCi1nc3BjYV9zcGNhNTA1LW9ianMJCTo9IHNwY2E1MDUubwotZ3NwY2Ffc3BjYTUwNi1vYmpzCQk6PSBzcGNhNTA2Lm8KLWdzcGNhX3NwY2E1MDgtb2JqcwkJOj0gc3BjYTUwOC5vCi1nc3BjYV9zcGNhNTYxLW9ianMJCTo9IHNwY2E1NjEubwotZ3NwY2Ffc3RrMDE0LW9ianMJCTo9IHN0azAxNC5vCi1nc3BjYV9zdW5wbHVzLW9ianMJCTo9IHN1bnBsdXMubwotZ3NwY2FfdDYxMy1vYmpzCQkJOj0gdDYxMy5vCi1nc3BjYV90djg1MzItb2JqcwkJOj0gdHY4NTMyLm8KLWdzcGNhX3ZjMDMyeC1vYmpzCQk6PSB2YzAzMngubwotZ3NwY2FfemMzeHgtb2JqcwkJOj0gemMzeHgubworZ3NwY2FfbWFpbi1vYmpzICAgICA6PSBnc3BjYS5vCitnc3BjYV9jb25leC1vYmpzICAgIDo9IGNvbmV4Lm8KK2dzcGNhX2V0b21zLW9ianMgICAgOj0gZXRvbXMubworZ3NwY2FfZmluZXBpeC1vYmpzICA6PSBmaW5lcGl4Lm8KK2dzcGNhX21hcnMtb2JqcyAgICAgOj0gbWFycy5vCitnc3BjYV9tcjk3MzEwYS1vYmpzIDo9IG1yOTczMTBhLm8KK2dzcGNhX292NTE5LW9ianMgICAgOj0gb3Y1MTkubworZ3NwY2Ffb3Y1MzQtb2JqcyAgICA6PSBvdjUzNC5vCitnc3BjYV9wYWMyMDctb2JqcyAgIDo9IHBhYzIwNy5vCitnc3BjYV9wYWM3MzExLW9ianMgIDo9IHBhYzczMTEubworZ3NwY2Ffc29uaXhiLW9ianMgICA6PSBzb25peGIubworZ3NwY2Ffc29uaXhqLW9ianMgICA6PSBzb25peGoubworZ3NwY2Ffc3BjYTUwMC1vYmpzICA6PSBzcGNhNTAwLm8KK2dzcGNhX3NwY2E1MDEtb2JqcyAgOj0gc3BjYTUwMS5vCitnc3BjYV9zcGNhNTA1LW9ianMgIDo9IHNwY2E1MDUubworZ3NwY2Ffc3BjYTUwNi1vYmpzICA6PSBzcGNhNTA2Lm8KK2dzcGNhX3NwY2E1MDgtb2JqcyAgOj0gc3BjYTUwOC5vCitnc3BjYV9zcGNhNTYxLW9ianMgIDo9IHNwY2E1NjEubworZ3NwY2Ffc3E5MDUtb2JqcyAgICA6PSBzcTkwNS5vCitnc3BjYV9zcTkwNWMtb2JqcyAgIDo9IHNxOTA1Yy5vCitnc3BjYV9zdGswMTQtb2JqcyAgIDo9IHN0azAxNC5vCitnc3BjYV9zdW5wbHVzLW9ianMgIDo9IHN1bnBsdXMubworZ3NwY2FfdDYxMy1vYmpzICAgICA6PSB0NjEzLm8KK2dzcGNhX3R2ODUzMi1vYmpzICAgOj0gdHY4NTMyLm8KK2dzcGNhX3ZjMDMyeC1vYmpzICAgOj0gdmMwMzJ4Lm8KK2dzcGNhX3pjM3h4LW9ianMgICAgOj0gemMzeHgubwogCi1vYmotJChDT05GSUdfVVNCX001NjAyKQkJKz0gbTU2MDIvCi1vYmotJChDT05GSUdfVVNCX1NUVjA2WFgpIAkrPSBzdHYwNnh4Lworb2JqLSQoQ09ORklHX1VTQl9NNTYwMikgICArPSBtNTYwMi8KK29iai0kKENPTkZJR19VU0JfU1RWMDZYWCkgKz0gc3R2MDZ4eC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwppbmRleCAxNzUzZjViLi4yMTljZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCkBAIC0zNiw4ICszNiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDMwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCisjZGVmaW5lIFFVQUxJVFlfREVGIDQwCiAKLQl1bnNpZ25lZCBjaGFyIHFpbmRleDsKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTUsMTQgKzgxOSwxMyBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCi0Jc2QtPnFpbmRleCA9IDA7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gKi8KIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOSw2ICs4NDIsMTQgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIyKTsJCS8qIEpQRUcgNDExICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCWN4MTE2NDZfaW5pdHNpemUoZ3NwY2FfZGV2KTsKIAljeDExNjQ2X2Z3KGdzcGNhX2Rldik7CiAJY3hfc2Vuc29yKGdzcGNhX2Rldik7CkBAIC04NDksOCArODYwLDExIEBACiAvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KIHN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldHJ5ID0gNTA7CiAKKwlrZnJlZShzZC0+anBlZ19oZHIpOworCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKIAlyZWdfd192YWwoZ3NwY2FfZGV2LCAweDAwMDAsIDB4MDApOwpAQCAtODc2LDYgKzg5MCw4IEBACiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKIAogCQkvKiBzdGFydCBvZiBmcmFtZSAqLwpAQCAtODgzLDkgKzg5OSw4IEBACiAJCQkJCWRhdGEsIDApOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAkJZGF0YSArPSAyOwogCQlsZW4gLT0gMjsKIAl9CkBAIC05ODgsNiArMTAwMywzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtOTk4LDYgKzEwNDEsOCBAQAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTAyOSw4ICsxMDc0LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKaW5kZXggZjNjZDhmZi4uMmMyMGQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYwpAQCAtNDcyLDE5ICs0NzIsNiBAQAogCQlyZWdfd192YWwoZ3NwY2FfZGV2LCBFVF9PX1JFRCArIGksIGJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JaW50IGJyaWdodG5lc3MgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX09fUkVEICsgaSwgMSk7Ci0JCWJyaWdodG5lc3MgKz0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9IGJyaWdodG5lc3MgPj4gMzsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTQ5NSwxOSArNDgyLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIEVUX0dfUkVELCBSR0JHLCA2KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgaTsKLQlpbnQgY29udHJhc3QgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlyZWdfcihnc3BjYV9kZXYsIEVUX0dfUkVEICsgaSwgMSk7Ci0JCWNvbnRyYXN0ICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQl9Ci0Jc2QtPmNvbnRyYXN0ID0gY29udHJhc3QgPj4gMjsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02NTgsNyArNjMyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAxOwogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzEwNikgewogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CkBAIC04MjEsNyArNzk0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODQwLDcgKzgxMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtODU5LDcgKzgzMCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC05MjgsOCArODk4LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCmluZGV4IGFmYzhiMmQuLjAwZTY4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZmluZXBpeC5jCkBAIC0yNyw3ICsyNyw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIERlZmF1bHQgdGltZW91dCwgaW4gbXMgKi8KLSNkZWZpbmUgRlBJWF9USU1FT1VUIChIWiAvIDEwKQorI2RlZmluZSBGUElYX1RJTUVPVVQgMjUwCiAKIC8qIE1heGltdW0gdHJhbnNmZXIgc2l6ZSB0byB1c2UuIFRoZSB3aW5kb3dzIGRyaXZlciByZWFkcyBieSBjaHVua3Mgb2YKICAqIDB4MjAwMCBieXRlcywgc28gZG8gdGhlIHNhbWUuIE5vdGU6IHJlYWRpbmcgbW9yZSBzZWVtcyB0byB3b3JrCkBAIC0zOCwzOCArMzgsMTUgQEAKIHN0cnVjdCB1c2JfZnBpeCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCS8qCi0JICogVVNCIHN0dWZmCi0JICovCi0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCBjdHJscmVxOwotCXN0cnVjdCB1cmIgKmNvbnRyb2xfdXJiOwotCXN0cnVjdCB0aW1lcl9saXN0IGJ1bGtfdGltZXI7Ci0KLQllbnVtIHsKLQkJRlBJWF9OT1AsCS8qIGluYWN0aXZlLCBlbHNlIHN0cmVhbWluZyAqLwotCQlGUElYX1JFU0VULAkvKiBtdXN0IHJlc2V0ICovCi0JCUZQSVhfUkVRX0ZSQU1FLAkvKiByZXF1ZXN0aW5nIGEgZnJhbWUgKi8KLQkJRlBJWF9SRUFEX0ZSQU1FLAkvKiByZWFkaW5nIGZyYW1lICovCi0JfSBzdGF0ZTsKLQotCS8qCi0JICogRHJpdmVyIHN0dWZmCi0JICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayB3cWU7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY2FuX2Nsb3NlOwotCWludCBzdHJlYW1pbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKIH07CiAKIC8qIERlbGF5IGFmdGVyIHdoaWNoIGNsYWltIHRoZSBuZXh0IGZyYW1lLiBJZiB0aGUgZGVsYXkgaXMgdG9vIHNtYWxsLAogICogdGhlIGNhbWVyYSB3aWxsIHJldHVybiBvbGQgZnJhbWVzLiBPbiB0aGUgNDgwMFosIDIwbXMgaXMgYmFkLCAyNW1zCi0gKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gKi8KLSNkZWZpbmUgTkVYVF9GUkFNRV9ERUxBWSAgKCgoSFogKiAzMCkgKyA5OTkpIC8gMTAwMCkKLQotI2RlZmluZSBkZXZfbmV3X3N0YXRlKG5ld19zdGF0ZSkgewkJCQlcCi0JCVBERUJVRyhEX1NUUkVBTSwgIm5ldyBzdGF0ZSBmcm9tICVkIHRvICVkIGF0ICVzOiVkIiwJXAotCQkJZGV2LT5zdGF0ZSwgbmV3X3N0YXRlLCBfX2Z1bmNfXywgX19MSU5FX18pOwlcCi0JCWRldi0+c3RhdGUgPSBuZXdfc3RhdGU7CQkJCQlcCi19CisgKiB3aWxsIGZhaWwgZXZlcnkgNCBvciA1IGZyYW1lcywgYnV0IDMwbXMgaXMgcGVyZmVjdC4gT24gdGhlIEEyMTAsCisgKiAzMG1zIGlzIGJhZCB3aGlsZSAzNW1zIGlzIHBlcmZlY3QuICovCisjZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgMzUKIAogLyogVGhlc2UgY2FtZXJhcyBvbmx5IHN1cHBvcnQgMzIweDIwMC4gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZwaXhfbW9kZVsxXSA9IHsKQEAgLTgwLDMxNiArNTcsMTgzIEBACiAJCS5wcml2ID0gMH0KIH07CiAKLS8qIFJlYWRzIHBhcnQgb2YgYSBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVhZF9mcmFtZV9wYXJ0KHN0cnVjdCB1c2JfZnBpeCAqZGV2KQorLyogc2VuZCBhIGNvbW1hbmQgdG8gdGhlIHdlYmNhbSAqLworc3RhdGljIGludCBjb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJaW50IG9yZGVyKQkvKiAwOiByZXNldCwgMTogZnJhbWUgcmVxdWVzdCAqLwogewotCWludCByZXQ7CisJc3RhdGljIHU4IG9yZGVyX3ZhbHVlc1syXVsxMl0gPSB7CisJCXsweGM2LCAwLCAwLCAwLCAwLCAwLCAwLCAgICAwLCAweDIwLCAwLCAwLCAwfSwJLyogcmVzZXQgKi8KKwkJezB4ZDMsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MDEsICAgIDAsIDAsIDAsIDB9LAkvKiBmciByZXEgKi8KKwl9OwogCi0JUERFQlVHKERfU1RSRUFNLCAicmVhZF9mcmFtZV9wYXJ0Iik7Ci0KLQkvKiBSZWFkcyBwYXJ0IG9mIGEgZnJhbWUgKi8KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmdzcGNhX2Rldi51cmJbMF0sIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpIHsKLQkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICVkIiwKLQkJCXJldCk7Ci0JfSBlbHNlIHsKLQkJLyogU29tZXRpbWVzIHdlIG5ldmVyIGdldCBhIGNhbGxiYWNrLCBzbyB1c2UgYSB0aW1lci4KLQkJICogSXMgdGhpcyBtYXNraW5nIGEgYnVnIHNvbWV3aGVyZSBlbHNlPyAqLwotCQlkZXYtPmJ1bGtfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDE1MCk7Ci0JCWFkZF90aW1lcigmZGV2LT5idWxrX3RpbWVyKTsKLQl9CisJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1Ziwgb3JkZXJfdmFsdWVzW29yZGVyXSwgMTIpOworCXJldHVybiB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkxMiwgRlBJWF9USU1FT1VUKTsKIH0KIAotLyogQ2FsbGJhY2sgZm9yIFVSQnMuICovCi1zdGF0aWMgdm9pZCB1cmJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQorLyogd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBkb3N0cmVhbShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mcGl4LCB3b3JrX3N0cnVjdCk7CisJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gJmRldi0+Z3NwY2FfZGV2OworCXN0cnVjdCB1cmIgKnVyYiA9IGdzcGNhX2Rldi0+dXJiWzBdOworCXU4ICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbGVuOwogCi0JUERFQlVHKERfUEFDSywKLQkJImVudGVyIHVyYl9jYWxsYmFjayAtIHN0YXR1cz0lZCwgbGVuZ3RoPSVkIiwKLQkJdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJLyogc3luY2hyb25pemUgd2l0aCB0aGUgbWFpbiBkcml2ZXIgKi8KKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0YXJ0ZWQiKTsKIAotCWlmIChkZXYtPnN0YXRlID09IEZQSVhfUkVBRF9GUkFNRSkKLQkJZGVsX3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOworCS8qIGxvb3AgcmVhZGluZyBhIGZyYW1lICovCithZ2FpbjoKKwl3aGlsZSAoZ3NwY2FfZGV2LT5wcmVzZW50ICYmIGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CiAKLQlpZiAodXJiLT5zdGF0dXMgIT0gMCkgewotCQkvKiBXZSBraWxsIGEgc3R1Y2sgdXJiIGV2ZXJ5IDUwIGZyYW1lcyBvbiBhdmVyYWdlLCBzbyBkb24ndAotCQkgKiBkaXNwbGF5IGEgbG9nIG1lc3NhZ2UgZm9yIHRoYXQuICovCi0JCWlmICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKLQkJCVBERUJVRyhEX1NUUkVBTSwgImJhZCBVUkIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQl9CisJCS8qIHJlcXVlc3QgYSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQlicmVhazsKIAotCXN3aXRjaCAoZGV2LT5zdGF0ZSkgewotCWNhc2UgRlBJWF9SRVFfRlJBTUU6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRUFEX0ZSQU1FKTsKLQkJcmVhZF9mcmFtZV9wYXJ0KGRldik7Ci0JCWJyZWFrOworCQkvKiB0aGUgZnJhbWUgY29tZXMgaW4gcGFydHMgKi8KKwkJZm9yICg7OykgeworCQkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCQl1cmItPnBpcGUsCisJCQkJCWRhdGEsCisJCQkJCUZQSVhfTUFYX1RSQU5TRkVSLAorCQkJCQkmbGVuLCBGUElYX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQkvKiBNb3N0IG9mIHRoZSB0aW1lIHdlIGdldCBhIHRpbWVvdXQKKwkJCQkgKiBlcnJvci4gSnVzdCByZXN0YXJ0LiAqLworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCB8fCAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCQkJZ290byBvdXQ7CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKCZkZXYtPmdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgPT0gTlVMTCkKKwkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKIAotCWNhc2UgRlBJWF9SRUFEX0ZSQU1FOiB7Ci0JCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwkJCWlmIChsZW4gPCBGUElYX01BWF9UUkFOU0ZFUiB8fAorCQkJCShkYXRhW2xlbiAtIDJdID09IDB4ZmYgJiYKKwkJCQkJZGF0YVtsZW4gLSAxXSA9PSAweGQ5KSkgewogCi0JCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoJmRldi0+Z3NwY2FfZGV2KTsKLQkJaWYgKGZyYW1lID09IE5VTEwpCi0JCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8IEZQSVhfTUFYX1RSQU5TRkVSIHx8Ci0JCQkoZGF0YVt1cmItPmFjdHVhbF9sZW5ndGgtMl0gPT0gMHhmZiAmJgotCQkJCWRhdGFbdXJiLT5hY3R1YWxfbGVuZ3RoLTFdID09IDB4ZDkpKSB7Ci0KLQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCi0JCQkgKiBmb3IsIHRoZW4gaXQncyB0aGUgZW5kIG9mIHRoZQotCQkJICogZnJhbWUuIFNvbWV0aW1lIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKLQkJCSAqIGJ1dCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvLiBXZSBhbHNvIGVuZAotCQkJICogaGVyZSBpZiB0aGUgdGhlIGpwZWcgZW5kcyByaWdodCBhdCB0aGUgZW5kCi0JCQkgKiBvZiB0aGUgZnJhbWUuICovCi0JCQlpZiAoZnJhbWUpCi0JCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJCWRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIE5FWFRfRlJBTUVfREVMQVkpOwotCQl9IGVsc2UgeworCQkJCS8qIElmIHRoZSByZXN1bHQgaXMgbGVzcyB0aGFuIHdoYXQgd2FzIGFza2VkCisJCQkJICogZm9yLCB0aGVuIGl0J3MgdGhlIGVuZCBvZiB0aGUKKwkJCQkgKiBmcmFtZS4gU29tZXRpbWVzIHRoZSBqcGVnIGlzIG5vdCBjb21wbGV0ZSwKKwkJCQkgKiBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4gV2UgYWxzbyBlbmQKKwkJCQkgKiBoZXJlIGlmIHRoZSB0aGUganBlZyBlbmRzIHJpZ2h0IGF0IHRoZSBlbmQKKwkJCQkgKiBvZiB0aGUgZnJhbWUuICovCisJCQkJaWYgKGZyYW1lKQorCQkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCQkJTEFTVF9QQUNLRVQsCisJCQkJCQkJZnJhbWUsCisJCQkJCQkJZGF0YSwgbGVuKTsKKwkJCQlicmVhazsKKwkJCX0KIAogCQkJLyogZ290IGEgcGFydGlhbCBpbWFnZSAqLwogCQkJaWYgKGZyYW1lKQogCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCiAJCQkJCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUKLQkJCQkJCQkJPT0gTEFTVF9QQUNLRVQKKwkJCQkJCQk9PSBMQVNUX1BBQ0tFVAogCQkJCQkJPyBGSVJTVF9QQUNLRVQgOiBJTlRFUl9QQUNLRVQsCi0JCQkJCQlmcmFtZSwKLQkJCQkJZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXJlYWRfZnJhbWVfcGFydChkZXYpOworCQkJCQkJZnJhbWUsIGRhdGEsIGxlbik7CiAJCX0KLQkJYnJlYWs7Ci0JICAgIH0KIAotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFU0VUOgotCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyogUmVxdWVzdCBhIG5ldyBmcmFtZSAqLwotc3RhdGljIHZvaWQgcmVxdWVzdF9mcmFtZShzdHJ1Y3QgdXNiX2ZwaXggKmRldikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKLQotCS8qIFNldHVwIGNvbW1hbmQgcGFja2V0ICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4ZDM7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzddID0gMHgwMTsKLQotCS8qIFJlcXVlc3QgYSBmcmFtZSAqLwotCWRldi0+Y3RybHJlcS5iUmVxdWVzdFR5cGUgPQotCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlkZXYtPmN0cmxyZXEuYlJlcXVlc3QgPSBVU0JfUkVRX0dFVF9TVEFUVVM7Ci0JZGV2LT5jdHJscmVxLndWYWx1ZSA9IDA7Ci0JZGV2LT5jdHJscmVxLndJbmRleCA9IDA7Ci0JZGV2LT5jdHJscmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigxMik7Ci0KLQl1c2JfZmlsbF9jb250cm9sX3VyYihkZXYtPmNvbnRyb2xfdXJiLAotCQkJICAgICBnc3BjYV9kZXYtPmRldiwKLQkJCSAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRldi0+Y3RybHJlcSwKLQkJCSAgICAgZ3NwY2FfZGV2LT51c2JfYnVmLAotCQkJICAgICAxMiwgdXJiX2NhbGxiYWNrLCBnc3BjYV9kZXYpOwotCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5jb250cm9sX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCkgewotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVTRVQpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKLQkJUERFQlVHKERfU1RSRUFNLCAidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggJWQiLCByZXQpOwotCX0KLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIFN0YXRlIG1hY2hpbmUuICovCi1zdGF0aWMgdm9pZCBmcGl4X3NtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2ZwaXgsIHdxZS53b3JrKTsKLQotCVBERUJVRyhEX1NUUkVBTSwgImZwaXhfc20gc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQotCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwotCWlmICghZGV2LT5nc3BjYV9kZXYucHJlc2VudCkgewotCQlQREVCVUcoRF9TVFJFQU0sICJkZXZpY2UgaXMgZ29uZSIpOwotCQlkZXZfbmV3X3N0YXRlKEZQSVhfTk9QKTsKLQkJY29tcGxldGUoJmRldi0+Y2FuX2Nsb3NlKTsKLQkJcmV0dXJuOworCQkvKiBXZSBtdXN0IHdhaXQgYmVmb3JlIHRyeWluZyByZWFkaW5nIHRoZSBuZXh0CisJCSAqIGZyYW1lLiBJZiB3ZSBkb24ndCwgb3IgaWYgdGhlIGRlbGF5IGlzIHRvbyBzaG9ydCwKKwkJICogdGhlIGNhbWVyYSB3aWxsIGRpc2Nvbm5lY3QuICovCisJCW1zbGVlcChORVhUX0ZSQU1FX0RFTEFZKTsKIAl9CiAKLQlpZiAoIWRldi0+c3RyZWFtaW5nKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInN0b3BwaW5nIHN0YXRlIG1hY2hpbmUiKTsKLQkJZGV2X25ld19zdGF0ZShGUElYX05PUCk7Ci0JCWNvbXBsZXRlKCZkZXYtPmNhbl9jbG9zZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKLQljYXNlIEZQSVhfUkVTRVQ6Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRVFfRlJBTUUpOwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCBIWiAvIDEwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZQSVhfUkVRX0ZSQU1FOgotCQkvKiBnZXQgYW4gaW1hZ2UgKi8KLQkJcmVxdWVzdF9mcmFtZShkZXYpOwotCQlicmVhazsKLQotCWNhc2UgRlBJWF9OT1A6Ci0JY2FzZSBGUElYX1JFQURfRlJBTUU6Ci0JCVBERUJVRyhEX1NUUkVBTSwgImludmFsaWQgc3RhdGUgJWQiLCBkZXYtPnN0YXRlKTsKLQkJYnJlYWs7Ci0JfQorb3V0OgorCVBERUJVRyhEX1NUUkVBTSwgImRvc3RyZWFtIHN0b3BwZWQiKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKIAljYW0tPmNhbV9tb2RlID0gZnBpeF9tb2RlOwogCWNhbS0+bm1vZGVzID0gMTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CS8qIHRvZG86IGNvcnJlY3QgZm9yIGFsbCBjYW1zPyAqLwogCWNhbS0+YnVsa19zaXplID0gRlBJWF9NQVhfVFJBTlNGRVI7CiAKLS8qCWdzcGNhX2Rldi0+bmJhbHQgPSAxOwkgKiB1c2UgYnVsayB0cmFuc2ZlciAqLworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgZG9zdHJlYW0pOworCiAJcmV0dXJuIDA7CiB9CiAKLS8qIFN0b3Agc3RyZWFtaW5nIGFuZCBmcmVlIHRoZSByZXNzb3VyY2VzIGFsbG9jYXRlZCBieSBzZF9zdGFydC4gKi8KLXN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JZGV2LT5zdHJlYW1pbmcgPSAwOwotCi0JLyogU3RvcCB0aGUgc3RhdGUgbWFjaGluZSAqLwotCWlmIChkZXYtPnN0YXRlICE9IEZQSVhfTk9QKQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7Ci19Ci0KLS8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQgMCBhbmQgZGlzY29ubmVjdCAqLwotc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0KLQl1c2JfZnJlZV91cmIoZGV2LT5jb250cm9sX3VyYik7Ci0JZGV2LT5jb250cm9sX3VyYiA9IE5VTEw7Ci19Ci0KLS8qIEtpbGwgYW4gVVJCIHRoYXQgaGFzbid0IGNvbXBsZXRlZC4gKi8KLXN0YXRpYyB2b2lkIHRpbWVvdXRfa2lsbCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKikgZGF0YTsKLQotCXVzYl91bmxpbmtfdXJiKHVyYik7Ci19Ci0KIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+d3FlLCBmcGl4X3NtKTsKLQotCWluaXRfdGltZXIoJmRldi0+YnVsa190aW1lcik7Ci0JZGV2LT5idWxrX3RpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOwotCiAJcmV0dXJuIDA7CiB9CiAKKy8qIHN0YXJ0IHRoZSBjYW1lcmEgKi8KIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQlpbnQgc2l6ZV9yZXQ7CisJaW50IHJldCwgbGVuOwogCiAJLyogSW5pdCB0aGUgZGV2aWNlICovCi0JbWVtc2V0KGdzcGNhX2Rldi0+dXNiX2J1ZiwgMCwgMTIpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4YzY7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzhdID0gMHgyMDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlVU0JfUkVRX0dFVF9TVEFUVVMsCi0JCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwKLQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0UsIDAsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwKLQkJCTEyLCBGUElYX1RJTUVPVVQpOwotCi0JaWYgKHJldCAhPSAxMikgewotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCXJldCA9IGNvbW1hbmQoZ3NwY2FfZGV2LCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJpbml0IGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVhZCB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLiBJZ25vcmUgdGhlIHJlc3VsdCwgZm9yIGl0CiAJICogdmFyaWVzIHdpdGggdGhlIGRldmljZS4gKi8KIAlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciksCi0JCQlnc3BjYV9kZXYtPnVzYl9idWYsIEZQSVhfTUFYX1RSQU5TRkVSLCAmc2l6ZV9yZXQsCisJCQlnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSwKKwkJCWdzcGNhX2Rldi0+dXJiWzBdLT50cmFuc2Zlcl9idWZmZXIsCisJCQlGUElYX01BWF9UUkFOU0ZFUiwgJmxlbiwKIAkJCUZQSVhfVElNRU9VVCk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9idWxrX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfU1RSRUFNLCAidXNiX2J1bGtfbXNnIGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogUmVxdWVzdCBhIGZyYW1lLCBidXQgZG9uJ3QgcmVhZCBpdCAqLwotCW1lbXNldChnc3BjYV9kZXYtPnVzYl9idWYsIDAsIDEyKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweGQzOwotCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSA9IDB4MDE7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCi0JCQkxMiwgRlBJWF9USU1FT1VUKTsKLQlpZiAocmV0ICE9IDEyKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIHJldCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJcmV0ID0gY29tbWFuZChnc3BjYV9kZXYsIDEpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgImZyYW1lIHJlcXVlc3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAkvKiBBZ2FpbiwgcmVzZXQgYnVsayBpbiBlbmRwb2ludCAqLwotCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpOworCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPnVyYlswXS0+cGlwZSk7CiAKLQkvKiBBbGxvY2F0ZSBhIGNvbnRyb2wgVVJCICovCi0JZGV2LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmNvbnRyb2xfdXJiKSB7Ci0JCVBERUJVRyhEX1NUUkVBTSwgIk5vIGZyZWUgdXJicyBhdmFpbGFibGUiKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQkvKiBWYXJpb3VzIGluaXRpYWxpemF0aW9ucy4gKi8KLQlpbml0X2NvbXBsZXRpb24oJmRldi0+Y2FuX2Nsb3NlKTsKLQlkZXYtPmJ1bGtfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldi0+Z3NwY2FfZGV2LnVyYlswXTsKLQlkZXYtPmdzcGNhX2Rldi51cmJbMF0tPmNvbXBsZXRlID0gdXJiX2NhbGxiYWNrOwotCWRldi0+c3RyZWFtaW5nID0gMTsKLQotCS8qIFNjaGVkdWxlIGEgZnJhbWUgcmVxdWVzdC4gKi8KLQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCAxKTsKKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOwogCiAJcmV0dXJuIDA7Cit9CiAKLWVycm9yOgotCS8qIEZyZWUgdGhlIHJlc3NvdXJjZXMgKi8KLQlzZF9zdG9wTihnc3BjYV9kZXYpOwotCXNkX3N0b3AwKGdzcGNhX2Rldik7Ci0JcmV0dXJuIHJldDsKKy8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQ9PTAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KKy8qIHRoZSB1c2JfbG9jayBpcyBoZWxkIGF0IGVudHJ5IC0gcmVzdG9yZSBvbiBleGl0ICovCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKKworCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHF1ZXVlIHRvIHRlcm1pbmF0ZSAqLworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CiB9CiAKIC8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLwpAQCAtNDI0LDEyICsyNjgsMTEgQEAKIAogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7Ci0JLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCiAJLmNvbmZpZyA9IHNkX2NvbmZpZywKLQkuaW5pdCA9IHNkX2luaXQsCi0JLnN0YXJ0ID0gc2Rfc3RhcnQsCi0JLnN0b3BOID0gc2Rfc3RvcE4sCi0JLnN0b3AwID0gc2Rfc3RvcDAsCisJLmluaXQgICA9IHNkX2luaXQsCisJLnN0YXJ0ICA9IHNkX3N0YXJ0LAorCS5zdG9wMCAgPSBzZF9zdG9wMCwKIH07CiAKIC8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCkBAIC00NDMsMjQgKzI4NiwyOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0gewotCS5uYW1lID0gTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAotCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAotCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisJLnJlc3VtZSAgPSBnc3BjYV9yZXN1bWUsCiAjZW5kaWYKIH07CiAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKIHsKIAl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwppbmRleCA2NWU0OTAxLi5hNzVjMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCkBAIC0zOCwxNSArMzgsMTYgQEAKICNpbmNsdWRlICJnc3BjYS5oIgogCiAvKiBnbG9iYWwgdmFsdWVzICovCi0jZGVmaW5lIERFRl9OVVJCUyAyCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjZGVmaW5lIERFRl9OVVJCUyAzCQkvKiBkZWZhdWx0IG51bWJlciBvZiBVUkJzICovCisjaWYgREVGX05VUkJTID4gTUFYX05VUkJTCisjZXJyb3IgIkRFRl9OVVJCUyB0b28gYmlnIgorI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPGh0dHA6Ly9tb2luZWpmLmZyZWUuZnI+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBIFVTQiBDYW1lcmEgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDQsIDApCi0KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDUsIDApCiAKICNpZmRlZiBHU1BDQV9ERUJVRwogaW50IGdzcGNhX2RlYnVnID0gRF9FUlIgfCBEX1BST0JFOwpAQCAtMTI2LDE2ICsxMjcsMTggQEAKIAkJCXN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOwotCV9fdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCisJdTggKmRhdGE7CQkvKiBhZGRyZXNzIG9mIGRhdGEgaW4gdGhlIGlzbyBtZXNzYWdlICovCiAJaW50IGksIGxlbiwgc3Q7CiAJY2FtX3BrdF9vcCBwa3Rfc2NhbjsKIAogCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogI2lmZGVmIENPTkZJR19QTQogCQlpZiAoIWdzcGNhX2Rldi0+ZnJvemVuKQogI2VuZGlmCiAJCQlQREVCVUcoRF9FUlJ8RF9QQUNLLCAidXJiIHN0YXR1czogJWQiLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gPyAqLworCQlyZXR1cm47CiAJfQogCXBrdF9zY2FuID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5wa3Rfc2NhbjsKIAlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CkBAIC0xNjYsNyArMTY5LDcgQEAKIAkJLyogbGV0IHRoZSBwYWNrZXQgYmUgYW5hbHl6ZWQgYnkgdGhlIHN1YmRyaXZlciAqLwogCQlQREVCVUcoRF9QQUNLLCAicGFja2V0IFslZF0gbzolZCBsOiVkIiwKIAkJCWksIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LCBsZW4pOwotCQlkYXRhID0gKF9fdTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKKwkJZGF0YSA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcgogCQkJCQkrIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OwogCQlwa3Rfc2Nhbihnc3BjYV9kZXYsIGZyYW1lLCBkYXRhLCBsZW4pOwogCX0KQEAgLTE4Miw4ICsxODUsNyBAQAogICoKICAqIEFuYWx5c2UgZWFjaCBwYWNrZXQgYW5kIGNhbGwgdGhlIHN1YmRyaXZlciBmb3IgY29weSB0byB0aGUgZnJhbWUgYnVmZmVyLgogICovCi1zdGF0aWMgdm9pZCBpc29jX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGlzb2NfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAKQEAgLTE5Niw4ICsxOTgsNyBAQAogLyoKICAqIGJ1bGsgbWVzc2FnZSBpbnRlcnJ1cHQgZnJvbSB0aGUgVVNCIGRldmljZQogICovCi1zdGF0aWMgdm9pZCBidWxrX2lycShzdHJ1Y3QgdXJiICp1cmIKLSkKK3N0YXRpYyB2b2lkIGJ1bGtfaXJxKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAoc3RydWN0IGdzcGNhX2RldiAqKSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKQEAgLTIwOSw2ICsyMTAsOCBAQAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CiAJCWJyZWFrOworCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CiAJCXVyYi0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CkBAIC0yMTcsNyArMjIwLDcgQEAKIAkJaWYgKCFnc3BjYV9kZXYtPmZyb3plbikKICNlbmRpZgogCQkJUERFQlVHKERfRVJSfERfUEFDSywgInVyYiBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CQkvKiBkaXNjb25uZWN0aW9uID8gKi8KKwkJcmV0dXJuOwogCX0KIAogCS8qIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIGZyYW1lIGJ1ZmZlciAqLwpAQCAtMzIyLDYgKzMyNSw3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfSlBFRzoKIAljYXNlIFY0TDJfUElYX0ZNVF9TUENBNTYxOgogCWNhc2UgVjRMMl9QSVhfRk1UX1BBQzIwNzoKKwljYXNlIFY0TDJfUElYX0ZNVF9NUjk3MzEwQToKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNDIyLDEwICs0MjYsOCBAQAogCQlpZiAodXJiID09IE5VTEwpCiAJCQlicmVhazsKIAotCQlCVUdfT04oIWdzcGNhX2Rldi0+ZGV2KTsKIAkJZ3NwY2FfZGV2LT51cmJbaV0gPSBOVUxMOwotCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJCXVzYl9raWxsX3VyYih1cmIpOworCQl1c2Jfa2lsbF91cmIodXJiKTsKIAkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpCiAJCQl1c2JfYnVmZmVyX2ZyZWUoZ3NwY2FfZGV2LT5kZXYsCiAJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTQzOSwyMiArNDQxLDE2IEBACiAgKiBsb29rIGZvciBhbiBpbnB1dCB0cmFuc2ZlciBlbmRwb2ludCBpbiBhbiBhbHRlcm5hdGUgc2V0dGluZwogICovCiBzdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICphbHRfeGZlcihzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQsCi0JCQkJCSAgX191OCBlcGFkZHIsCiAJCQkJCSAgX191OCB4ZmVyKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJaW50IGksIGF0dHI7CiAKLQllcGFkZHIgfD0gVVNCX0RJUl9JTjsKIAlmb3IgKGkgPSAwOyBpIDwgYWx0LT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgewogCQllcCA9ICZhbHQtPmVuZHBvaW50W2ldOwotCQlpZiAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBlcGFkZHIpIHsKLQkJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMKLQkJCQkJCSYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Ci0JCQlpZiAoYXR0ciA9PSB4ZmVyKQotCQkJCXJldHVybiBlcDsKLQkJCWJyZWFrOwotCQl9CisJCWF0dHIgPSBlcC0+ZGVzYy5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKKwkJaWYgKGF0dHIgPT0geGZlcikKKwkJCXJldHVybiBlcDsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00NzgsMjMgKzQ3NCwyMyBAQAogCWkgPSBnc3BjYV9kZXYtPmFsdDsJCQkvKiBwcmV2aW91cyBhbHQgc2V0dGluZyAqLwogCiAJLyogdHJ5IGlzb2MgKi8KLQl3aGlsZSAoLS1pID4gMCkgewkJCS8qIGFsdCAwIGlzIHVudXNhYmxlICovCisJd2hpbGUgKC0taSA+PSAwKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbaV0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOwogCQlpZiAoZXApCiAJCQlicmVhazsKIAl9CiAKLQkvKiBpZiBubyBpc29jLCB0cnkgYnVsayAqLworCS8qIGlmIG5vIGlzb2MsIHRyeSBidWxrIChhbHQgMCBvbmx5KSAqLwogCWlmIChlcCA9PSBOVUxMKSB7CiAJCWVwID0gYWx0X3hmZXIoJmludGYtPmFsdHNldHRpbmdbMF0sCi0JCQkJZ3NwY2FfZGV2LT5jYW0uZXBhZGRyLAogCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOwogCQlpZiAoZXAgPT0gTlVMTCkgewogCQkJZXJyKCJubyB0cmFuc2ZlciBlbmRwb2ludCBmb3VuZCIpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KKwkJaSA9IDA7CisJCWdzcGNhX2Rldi0+YnVsayA9IDE7CiAJfQogCVBERUJVRyhEX1NUUkVBTSwgInVzZSBhbHQgJWQgZXAgMHglMDJ4IiwKIAkJCWksIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwpAQCAtNTIxLDcgKzUxNyw3IEBACiAJLyogY2FsY3VsYXRlIHRoZSBwYWNrZXQgc2l6ZSBhbmQgdGhlIG51bWJlciBvZiBwYWNrZXRzICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAKLQlpZiAoZ3NwY2FfZGV2LT5hbHQgIT0gMCkgewkJLyogaXNvYyAqLworCWlmICghZ3NwY2FfZGV2LT5idWxrKSB7CQkJLyogaXNvYyAqLwogCiAJCS8qIFNlZSBwYXJhZ3JhcGggNS45IC8gdGFibGUgNS0xMSBvZiB0aGUgdXNiIDIuMCBzcGVjLiAqLwogCQlwc2l6ZSA9IChwc2l6ZSAmIDB4MDdmZikgKiAoMSArICgocHNpemUgPj4gMTEpICYgMykpOwpAQCAtNjAxLDYgKzU5NywxMSBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCiAJLyogc2V0IHRoZSBoaWdoZXIgYWx0ZXJuYXRlIHNldHRpbmcgYW5kCiAJICogbG9vcCB1bnRpbCB1cmIgc3VibWl0IHN1Y2NlZWRzICovCiAJZ3NwY2FfZGV2LT5hbHQgPSBnc3BjYV9kZXYtPm5iYWx0OwpAQCAtNjE2LDEwICs2MTcsOSBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogY2xlYXIgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDApCS8qIGlmIGJ1bGsgdHJhbnNmZXIgKi8KKwkJaWYgKGdzcGNhX2Rldi0+YnVsaykKIAkJCXVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LAotCQkJCQl1c2JfcmN2aW50cGlwZShnc3BjYV9kZXYtPmRldiwKLQkJCQkJCSBnc3BjYV9kZXYtPmNhbS5lcGFkZHIpKTsKKwkJCQkJZ3NwY2FfZGV2LT51cmJbMF0tPnBpcGUpOwogCiAJCS8qIHN0YXJ0IHRoZSBjYW0gKi8KIAkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdGFydChnc3BjYV9kZXYpOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMTsKIAogCQkvKiBzb21lIGJ1bGsgdHJhbnNmZXJzIGFyZSBzdGFydGVkIGJ5IHRoZSBzdWJkcml2ZXIgKi8KLQkJaWYgKGdzcGNhX2Rldi0+YWx0ID09IDAgJiYgZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9PSAwKQorCQlpZiAoZ3NwY2FfZGV2LT5idWxrICYmIGdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPT0gMCkKIAkJCWJyZWFrOwogCiAJCS8qIHN1Ym1pdCB0aGUgVVJCcyAqLwpAQCAtNjcxLDExICs2NzEsMTQgQEAKIHN0YXRpYyB2b2lkIGdzcGNhX3N0cmVhbV9vZmYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWdzcGNhX2Rldi0+c3RyZWFtaW5nID0gMDsKLQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50Ci0JICAgICYmIGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCi0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4oZ3NwY2FfZGV2KTsKLQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKLQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RvcE4pCisJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7CisJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQlnc3BjYV9zZXRfYWx0MChnc3BjYV9kZXYpOworCX0KKworCS8qIGFsd2F5cyBjYWxsIHN0b3AwIHRvIGZyZWUgdGhlIHN1YmRyaXZlcidzIHJlc291cmNlcyAqLwogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKQogCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3AwKGdzcGNhX2Rldik7CiAJUERFQlVHKERfU1RSRUFNLCAic3RyZWFtIG9mZiBPSyIpOwpAQCAtNzYyLDcgKzc2NSw2IEBACiAJZm10ZGVzYy0+cGl4ZWxmb3JtYXQgPSBmbXRfdGJbaW5kZXhdOwogCWlmIChnc3BjYV9pc19jb21wcmVzc2VkKGZtdF90YltpbmRleF0pKQogCQlmbXRkZXNjLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKLQlmbXRkZXNjLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzBdID0gZm10ZGVzYy0+cGl4ZWxmb3JtYXQgJiAweGZmOwogCWZtdGRlc2MtPmRlc2NyaXB0aW9uWzFdID0gKGZtdGRlc2MtPnBpeGVsZm9ybWF0ID4+IDgpICYgMHhmZjsKIAlmbXRkZXNjLT5kZXNjcmlwdGlvblsyXSA9IChmbXRkZXNjLT5waXhlbGZvcm1hdCA+PiAxNikgJiAweGZmOwpAQCAtOTU3LDggKzk1OSwxNSBAQAogCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CisJaW50IHJldDsKIAotCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKKwkvKiBwcm90ZWN0IHRoZSBhY2Nlc3MgdG8gdGhlIHVzYiBkZXZpY2UgKi8KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAJc3RybmNweShjYXAtPmRyaXZlciwgZ3NwY2FfZGV2LT5zZF9kZXNjLT5uYW1lLCBzaXplb2YgY2FwLT5kcml2ZXIpOwogCWlmIChnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCAhPSBOVUxMKSB7CiAJCXN0cm5jcHkoY2FwLT5jYXJkLCBnc3BjYV9kZXYtPmRldi0+cHJvZHVjdCwKQEAgLTk2OSwxMyArOTc4LDE1IEBACiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCQlsZTE2X3RvX2NwdShnc3BjYV9kZXYtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAl9Ci0Jc3RybmNweShjYXAtPmJ1c19pbmZvLCBnc3BjYV9kZXYtPmRldi0+YnVzLT5idXNfbmFtZSwKLQkJc2l6ZW9mIGNhcC0+YnVzX2luZm8pOworCXVzYl9tYWtlX3BhdGgoZ3NwY2FfZGV2LT5kZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gRFJJVkVSX1ZFUlNJT05fTlVNQkVSOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQogCQkJICB8IFY0TDJfQ0FQX1NUUkVBTUlORwogCQkJICB8IFY0TDJfQ0FQX1JFQURXUklURTsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTAzOCw3ICsxMDQ5LDEwIEBACiAJCVBERUJVRyhEX0NPTkYsICJzZXQgY3RybCBbJTA4eF0gPSAlZCIsIGN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gY3RybHMtPnNldChnc3BjYV9kZXYsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5zZXQoZ3NwY2FfZGV2LCBjdHJsLT52YWx1ZSk7CisJCWVsc2UKKwkJCXJldCA9IC1FTk9ERVY7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTA2Miw3ICsxMDc2LDEwIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBjdHJscy0+Z2V0KGdzcGNhX2RldiwgJmN0cmwtPnZhbHVlKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGN0cmxzLT5nZXQoZ3NwY2FfZGV2LCAmY3RybC0+dmFsdWUpOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEwODEsNyArMTA5OCw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKIHsKLQltZW1zZXQoYXVkaW8sIDAsIHNpemVvZiAqYXVkaW8pOwogCXN0cmNweShhdWRpby0+bmFtZSwgIk1pY3JvcGhvbmUiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTUsNyArMTEzMSw2IEBACiAKIAlpZiAoaW5wdXQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpbnB1dCwgMCwgc2l6ZW9mICppbnB1dCk7CiAJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwKIAkJc2l6ZW9mIGlucHV0LT5uYW1lKTsKQEAgLTEyMjQsMTAgKzEyMzksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwogCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMAogCSAgICB8fCAhKGdzcGNhX2Rldi0+ZnJhbWVbMF0udjRsMl9idWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTEyOTUsNyArMTMwNywxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMxMCw3ICsxMzI1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X2pjb21wKGdzcGNhX2RldiwganBlZ2NvbXApOworCWVsc2UKKwkJcmV0ID0gLUVOT0RFVjsKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzIwLDggKzEzMzgsNiBAQAogewogCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHByaXY7CiAKLQltZW1zZXQocGFybSwgMCwgc2l6ZW9mICpwYXJtKTsKLQlwYXJtLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCXBhcm0tPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IGdzcGNhX2Rldi0+bmJ1ZnJlYWQ7CiAKIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybSkgewpAQCAtMTMyOSw3ICsxMzQ1LDExIEBACiAKIAkJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwgcGFybSk7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPmdldF9zdHJlYW1wYXJtKGdzcGNhX2RldiwKKwkJCQkJCQkJIHBhcm0pOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEzNTQsNyArMTM3NCwxMSBAQAogCiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsIHBhcm0pOworCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5zZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsCisJCQkJCQkJCSBwYXJtKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMzgyLDcgKzE0MDYsNiBAQAogCQl7CiAJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwogCi0JCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mIGZtdCk7CiAJCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJCWkgPSBnc3BjYV9kZXYtPmNhbS5ubW9kZXMgLSAxOwkvKiBoaWdoZXN0IG1vZGUgKi8KIAkJCWZtdC5mbXQucGl4LndpZHRoID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbaV0ud2lkdGg7CkBAIC0xNTI4LDcgKzE1NTEsOCBAQAogCiAJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2spIHsKIAkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Ci0JCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdzcGNhX2Rldi0+c2RfZGVzYy0+ZHFfY2FsbGJhY2soZ3NwY2FfZGV2KTsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAl9CiAJcmV0dXJuIGo7CkBAIC0xNTUwLDYgKzE1NzQsOSBAQAogCWlmICh2NGwyX2J1Zi0+bWVtb3J5ICE9IGdzcGNhX2Rldi0+bWVtb3J5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIGlmIG5vdCBzdHJlYW1pbmcsIGJlIHN1cmUgdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IGxvb3AgZm9yZXZlciAqLwogCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCSAgICAmJiAhZ3NwY2FfZGV2LT5zdHJlYW1pbmcgJiYgZ3NwY2FfZGV2LT51c2VycyA9PSAxKQpAQCAtMTcwMCw4ICsxNzI3LDYgQEAKIAlQREVCVUcoRF9GUkFNLCAicG9sbCIpOwogCiAJcG9sbF93YWl0KGZpbGUsICZnc3BjYV9kZXYtPndxLCB3YWl0KTsKLQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKLQkJcmV0dXJuIFBPTExFUlI7CiAKIAkvKiBpZiByZXFidWZzIGlzIG5vdCBkb25lLCB0aGUgdXNlciB3b3VsZCB1c2UgcmVhZCgpICovCiAJaWYgKGdzcGNhX2Rldi0+bmZyYW1lcyA9PSAwKSB7CkBAIC0xNzE0LDEwICsxNzM5LDYgQEAKIAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+cXVldWVfbG9jaykgIT0gMCkKIAkJcmV0dXJuIFBPTExFUlI7Ci0JaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKLQkJcmV0ID0gUE9MTEVSUjsKLQkJZ290byBvdXQ7Ci0JfQogCiAJLyogY2hlY2sgdGhlIG5leHQgaW5jb21pbmcgYnVmZmVyICovCiAJaSA9IGdzcGNhX2Rldi0+ZnJfbzsKQEAgLTE3MjYsOCArMTc0Nyw5IEBACiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CS8qIHNvbWV0aGluZyB0byByZWFkICovCiAJZWxzZQogCQlyZXQgPSAwOwotb3V0OgogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKTsKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0dXJuIFBPTExIVVA7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkyNSw3ICsxOTQ3LDcgQEAKIAlnc3BjYV9kZXYtPnByZXNlbnQgPSAxOwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ3NwY2FfZGV2LT52ZGV2LAogCQkJCSAgVkZMX1RZUEVfR1JBQkJFUiwKLQkJCQkgIHZpZGVvX25yKTsKKwkJCQkgIC0xKTsKIAlpZiAocmV0IDwgMCkgewogCQllcnIoInZpZGVvX3JlZ2lzdGVyX2RldmljZSBlcnIgJWQiLCByZXQpOwogCQlnb3RvIG91dDsKQEAgLTE5NTMsMTAgKzE5NzUsMTYgQEAKIAogCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCWdzcGNhX2Rldi0+cHJlc2VudCA9IDA7CisKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZGVzdHJveV91cmJzKGdzcGNhX2Rldik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT53cSk7CisJfQorCisJLyogdGhlIGRldmljZSBpcyBmcmVlZCBhdCBleGl0IG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlnc3BjYV9kZXYtPmRldiA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAotCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOwotCWdzcGNhX2Rldi0+ZGV2ID0gTlVMTDsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKaW5kZXggYzkwYWY5Yy4uZTRkNGNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaApAQCAtMzMsMTkgKzMzLDEzIEBACiAjZW5kaWYKICN1bmRlZiBlcnIKICNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCiAjdW5kZWYgaW5mbwogI2RlZmluZSBpbmZvKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncykKICN1bmRlZiB3YXJuCiAjZGVmaW5lIHdhcm4oZm10LCBhcmdzLi4uKSBcCi0JZG8ge1wKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKTsgXAotCX0gd2hpbGUgKDApCisJcHJpbnRrKEtFUk5fV0FSTklORyBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKQogCiAjZGVmaW5lIEdTUENBX01BWF9GUkFNRVMgMTYJLyogbWF4aW11bSBudW1iZXIgb2YgdmlkZW8gZnJhbWUgYnVmZmVycyAqLwogLyogaW1hZ2UgdHJhbnNmZXJzICovCkBAIC02Miw3ICs1Niw2IEBACiAJCQkJICogLSBjYW5ub3QgYmUgPiBNQVhfTlVSQlMKIAkJCQkgKiAtIHdoZW4gMCBhbmQgYnVsa19zaXplICE9IDAgbWVhbnMKIAkJCQkgKiAgIDEgVVJCIGFuZCBzdWJtaXQgZG9uZSBieSBzdWJkcml2ZXIgKi8KLQlfX3U4IGVwYWRkcjsKIH07CiAKIHN0cnVjdCBnc3BjYV9kZXY7CkBAIC0xNzQsNiArMTY3LDcgQEAKIAlfX3U4IGlmYWNlOwkJCS8qIFVTQiBpbnRlcmZhY2UgbnVtYmVyICovCiAJX191OCBhbHQ7CQkJLyogVVNCIGFsdGVybmF0ZSBzZXR0aW5nICovCiAJX191OCBuYmFsdDsJCQkvKiBudW1iZXIgb2YgVVNCIGFsdGVybmF0ZSBzZXR0aW5ncyAqLworCXU4IGJ1bGs7CQkJLyogaW1hZ2UgdHJhbnNmZXIgYnkgMDppc29jIC8gMTpidWxrICovCiB9OwogCiBpbnQgZ3NwY2FfZGV2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAppbmRleCBkODIzYjQ3Li5kZTYzYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2pwZWcuaApAQCAtMjQsMTcxICsyNCwzOSBAQAogICoKICAqLwogCi0vKiBzdGFydCBvZiBqcGVnIGZyYW1lICsgcXVhbnRpemF0aW9uIHRhYmxlICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxdWFudFtdWzB4ODhdID0gewotLyogaW5kZXggMCAtIFE0MCovCi0gICAgewotCTB4ZmYsIDB4ZDgsCQkJLyoganBlZyAqLwotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCQkJCQkvKiBxdWFudGl6YXRpb24gdGFibGUgcGFydCAxICovCi0gICAgIDIwLCAxNCwgMTUsIDE4LCAxNSwgMTMsIDIwLCAxOCwgMTYsIDE4LCAyMywgMjEsIDIwLCAyNCwgMzAsIDUwLAotICAgICAzMywgMzAsIDI4LCAyOCwgMzAsIDYxLCA0NCwgNDYsIDM2LCA1MCwgNzMsIDY0LCA3NiwgNzUsIDcxLCA2NCwKLSAgICAgNzAsIDY5LCA4MCwgOTAsIDExNSwgOTgsIDgwLCA4NSwgMTA5LCA4NiwgNjksIDcwLCAxMDAsIDEzNiwgMTAxLAotICAgICAxMDksCi0gICAgIDExOSwgMTIzLCAxMjksIDEzMCwgMTI5LCA3OCwgOTYsIDE0MSwgMTUxLCAxNDAsIDEyNSwgMTUwLCAxMTUsCi0gICAgIDEyNiwgMTI5LCAxMjQsCi0xLAkJCQkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHBhcnQgMiAqLwotICAgICAyMSwgMjMsIDIzLCAzMCwgMjYsIDMwLCA1OSwgMzMsIDMzLCA1OSwgMTI0LCA4MywgNzAsIDgzLCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNH0sCi0vKiBpbmRleCAxIC0gUTUwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTYsIDExLCAxMiwgMTQsIDEyLCAxMCwgMTYsIDE0LCAxMywgMTQsIDE4LCAxNywgMTYsIDE5LCAyNCwgNDAsCi0gICAgIDI2LCAyNCwgMjIsIDIyLCAyNCwgNDksIDM1LCAzNywgMjksIDQwLCA1OCwgNTEsIDYxLCA2MCwgNTcsIDUxLAotICAgICA1NiwgNTUsIDY0LCA3MiwgOTIsIDc4LCA2NCwgNjgsIDg3LCA2OSwgNTUsIDU2LCA4MCwgMTA5LCA4MSwgODcsCi0gICAgIDk1LCA5OCwgMTAzLCAxMDQsIDEwMywgNjIsIDc3LCAxMTMsIDEyMSwgMTEyLCAxMDAsIDEyMCwgOTIsIDEwMSwKLSAgICAgMTAzLCA5OSwKLTEsCi0gICAgMTcsIDE4LCAxOCwgMjQsIDIxLCAyNCwgNDcsIDI2LCAyNiwgNDcsIDk5LCA2NiwgNTYsIDY2LCA5OSwgOTksCi0gICAgIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LAotICAgICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKLSAgICAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTl9LAotLyogaW5kZXggMiBRNjAgKi8KLSAgICB7Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotICAgICAxMywgOSwgMTAsIDExLCAxMCwgOCwgMTMsIDExLCAxMCwgMTEsIDE0LCAxNCwgMTMsIDE1LCAxOSwgMzIsCi0gICAgIDIxLCAxOSwgMTgsIDE4LCAxOSwgMzksIDI4LCAzMCwgMjMsIDMyLCA0NiwgNDEsIDQ5LCA0OCwgNDYsIDQxLAotICAgICA0NSwgNDQsIDUxLCA1OCwgNzQsIDYyLCA1MSwgNTQsIDcwLCA1NSwgNDQsIDQ1LCA2NCwgODcsIDY1LCA3MCwKLSAgICAgNzYsIDc4LCA4MiwgODMsIDgyLCA1MCwgNjIsIDkwLCA5NywgOTAsIDgwLCA5NiwgNzQsIDgxLCA4MiwgNzksCi0xLAotICAgICAxNCwgMTQsIDE0LCAxOSwgMTcsIDE5LCAzOCwgMjEsIDIxLCAzOCwgNzksIDUzLCA0NSwgNTMsIDc5LCA3OSwKLSAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksCi0gICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LAotICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OX0sCi0vKiBpbmRleCAzIC0gUTcwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTAsIDcsIDcsIDgsIDcsIDYsIDEwLCA4LCA4LCA4LCAxMSwgMTAsIDEwLCAxMSwgMTQsIDI0LAotICAgICAxNiwgMTQsIDEzLCAxMywgMTQsIDI5LCAyMSwgMjIsIDE3LCAyNCwgMzUsIDMxLCAzNywgMzYsIDM0LCAzMSwKLSAgICAgMzQsIDMzLCAzOCwgNDMsIDU1LCA0NywgMzgsIDQxLCA1MiwgNDEsIDMzLCAzNCwgNDgsIDY1LCA0OSwgNTIsCi0gICAgIDU3LCA1OSwgNjIsIDYyLCA2MiwgMzcsIDQ2LCA2OCwgNzMsIDY3LCA2MCwgNzIsIDU1LCA2MSwgNjIsIDU5LAotMSwKLSAgICAgMTAsIDExLCAxMSwgMTQsIDEzLCAxNCwgMjgsIDE2LCAxNiwgMjgsIDU5LCA0MCwgMzQsIDQwLCA1OSwgNTksCi0gICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LAotICAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTl9LAotLyogaW5kZXggNCAtIFE4MCAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgICA2LCA0LCA1LCA2LCA1LCA0LCA2LCA2LCA1LCA2LCA3LCA3LCA2LCA4LCAxMCwgMTYsCi0gICAgIDEwLCAxMCwgOSwgOSwgMTAsIDIwLCAxNCwgMTUsIDEyLCAxNiwgMjMsIDIwLCAyNCwgMjQsIDIzLCAyMCwKLSAgICAgMjIsIDIyLCAyNiwgMjksIDM3LCAzMSwgMjYsIDI3LCAzNSwgMjgsIDIyLCAyMiwgMzIsIDQ0LCAzMiwgMzUsCi0gICAgIDM4LCAzOSwgNDEsIDQyLCA0MSwgMjUsIDMxLCA0NSwgNDgsIDQ1LCA0MCwgNDgsIDM3LCA0MCwgNDEsIDQwLAotMSwKLSAgICAgIDcsIDcsIDcsIDEwLCA4LCAxMCwgMTksIDEwLCAxMCwgMTksIDQwLCAyNiwgMjIsIDI2LCA0MCwgNDAsCi0gICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLAotICAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwKLSAgICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDB9LAotLyogaW5kZXggNSAtIFE4NSAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgIDUsIDMsIDQsIDQsIDQsIDMsIDUsIDQsIDQsIDQsIDUsIDUsIDUsIDYsIDcsIDEyLAotICAgICA4LCA3LCA3LCA3LCA3LCAxNSwgMTEsIDExLCA5LCAxMiwgMTcsIDE1LCAxOCwgMTgsIDE3LCAxNSwKLSAgICAgMTcsIDE3LCAxOSwgMjIsIDI4LCAyMywgMTksIDIwLCAyNiwgMjEsIDE3LCAxNywgMjQsIDMzLCAyNCwgMjYsCi0gICAgIDI5LCAyOSwgMzEsIDMxLCAzMSwgMTksIDIzLCAzNCwgMzYsIDM0LCAzMCwgMzYsIDI4LCAzMCwgMzEsIDMwLAotMSwKLSAgICAgNSwgNSwgNSwgNywgNiwgNywgMTQsIDgsIDgsIDE0LCAzMCwgMjAsIDE3LCAyMCwgMzAsIDMwLAotICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwKLSAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsCi0gICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSwKLS8qIGluZGV4IDYgLSA4NiAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDAzLCAweDAzLCAweDA0LCAweDA0LAotCTB4MDQsIDB4MDQsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDUsIDB4MDcsIDB4MEIsCi0JMHgwNywgMHgwNywgMHgwNiwgMHgwNiwgMHgwNywgMHgwRSwgMHgwQSwgMHgwQSwKLQkweDA4LCAweDBCLCAweDEwLCAweDBFLCAweDExLCAweDExLCAweDEwLCAweDBFLAotCTB4MTAsIDB4MEYsIDB4MTIsIDB4MTQsIDB4MUEsIDB4MTYsIDB4MTIsIDB4MTMsCi0JMHgxOCwgMHgxMywgMHgwRiwgMHgxMCwgMHgxNiwgMHgxRiwgMHgxNywgMHgxOCwKLQkweDFCLCAweDFCLCAweDFELCAweDFELCAweDFELCAweDExLCAweDE2LCAweDIwLAotCTB4MjIsIDB4MUYsIDB4MUMsIDB4MjIsIDB4MUEsIDB4MUMsIDB4MUQsIDB4MUMsCi0xLAotCTB4MDUsIDB4MDUsIDB4MDUsIDB4MDcsIDB4MDYsIDB4MDcsIDB4MEQsIDB4MDcsCi0JMHgwNywgMHgwRCwgMHgxQywgMHgxMiwgMHgxMCwgMHgxMiwgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLSB9LAotLyogaW5kZXggNyAtIDg4ICovCi17Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotCTB4MDQsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsCi0JMHgwMywgMHgwMywgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNiwgMHgwQSwKLQkweDA2LCAweDA2LCAweDA1LCAweDA1LCAweDA2LCAweDBDLCAweDA4LCAweDA5LAotCTB4MDcsIDB4MEEsIDB4MEUsIDB4MEMsIDB4MEYsIDB4MEUsIDB4MEUsIDB4MEMsCi0JMHgwRCwgMHgwRCwgMHgwRiwgMHgxMSwgMHgxNiwgMHgxMywgMHgwRiwgMHgxMCwKLQkweDE1LCAweDExLCAweDBELCAweDBELCAweDEzLCAweDFBLCAweDEzLCAweDE1LAotCTB4MTcsIDB4MTgsIDB4MTksIDB4MTksIDB4MTksIDB4MEYsIDB4MTIsIDB4MUIsCi0JMHgxRCwgMHgxQiwgMHgxOCwgMHgxRCwgMHgxNiwgMHgxOCwgMHgxOSwgMHgxOCwKLTEsCi0JMHgwNCwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNSwgMHgwNiwgMHgwQiwgMHgwNiwKLQkweDA2LCAweDBCLCAweDE4LCAweDEwLCAweDBELCAweDEwLCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotfSwKLS8qIGluZGV4IDggLSA/PyAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDUsCi0JMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwMywgMHgwNiwgMHgwNCwgMHgwNSwKLQkweDA0LCAweDA1LCAweDA3LCAweDA2LCAweDA4LCAweDA4LCAweDA3LCAweDA2LAotCTB4MDcsIDB4MDcsIDB4MDgsIDB4MDksIDB4MEMsIDB4MEEsIDB4MDgsIDB4MDksCi0JMHgwQiwgMHgwOSwgMHgwNywgMHgwNywgMHgwQSwgMHgwRSwgMHgwQSwgMHgwQiwKLQkweDBDLCAweDBDLCAweDBELCAweDBELCAweDBELCAweDA4LCAweDBBLCAweDBFLAotCTB4MEYsIDB4MEUsIDB4MEQsIDB4MEYsIDB4MEMsIDB4MEQsIDB4MEQsIDB4MEMsCi0xLAotCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDYsIDB4MDMsCi0JMHgwMywgMHgwNiwgMHgwQywgMHgwOCwgMHgwNywgMHgwOCwgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQwotfQotfTsKKy8qCisgKiBnZW5lcmF0aW9uIG9wdGlvbnMKKyAqCUNPTkVYX0NBTQlDb25leGFudCBpZiBwcmVzZW50CisgKi8KIAotLyogaHVmZm1hbiB0YWJsZSArIHN0YXJ0IG9mIFNPRjAgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGh1ZmZtYW5bXSA9IHsKKy8qIEpQRUcgaGVhZGVyICovCitzdGF0aWMgY29uc3QgdTgganBlZ19oZWFkW10gPSB7CisJMHhmZiwgMHhkOCwJCQkvKiBqcGVnICovCisKKy8qIHF1YW50aXphdGlvbiB0YWJsZSBxdWFsaXR5IDUwJSAqLworCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KKzAsCisjZGVmaW5lIEpQRUdfUVQwX09GRlNFVCA3CisJMHgxMCwgMHgwYiwgMHgwYywgMHgwZSwgMHgwYywgMHgwYSwgMHgxMCwgMHgwZSwKKwkweDBkLCAweDBlLCAweDEyLCAweDExLCAweDEwLCAweDEzLCAweDE4LCAweDI4LAorCTB4MWEsIDB4MTgsIDB4MTYsIDB4MTYsIDB4MTgsIDB4MzEsIDB4MjMsIDB4MjUsCisJMHgxZCwgMHgyOCwgMHgzYSwgMHgzMywgMHgzZCwgMHgzYywgMHgzOSwgMHgzMywKKwkweDM4LCAweDM3LCAweDQwLCAweDQ4LCAweDVjLCAweDRlLCAweDQwLCAweDQ0LAorCTB4NTcsIDB4NDUsIDB4MzcsIDB4MzgsIDB4NTAsIDB4NmQsIDB4NTEsIDB4NTcsCisJMHg1ZiwgMHg2MiwgMHg2NywgMHg2OCwgMHg2NywgMHgzZSwgMHg0ZCwgMHg3MSwKKwkweDc5LCAweDcwLCAweDY0LCAweDc4LCAweDVjLCAweDY1LCAweDY3LCAweDYzLAorMSwKKyNkZWZpbmUgSlBFR19RVDFfT0ZGU0VUIDcyCisJMHgxMSwgMHgxMiwgMHgxMiwgMHgxOCwgMHgxNSwgMHgxOCwgMHgyZiwgMHgxYSwKKwkweDFhLCAweDJmLCAweDYzLCAweDQyLCAweDM4LCAweDQyLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCisvKiBodWZmbWFuIHRhYmxlICovCiAJMHhmZiwgMHhjNCwgMHgwMSwgMHhhMiwKIAkweDAwLCAweDAwLCAweDAxLCAweDA1LCAweDAxLCAweDAxLCAweDAxLCAweDAxLAogCTB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yNDQsNTggKzExMiw1NyBAQAogCTB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsCiAjaWZkZWYgQ09ORVhfQ0FNCiAvKiB0aGUgQ29uZXhhbnQgZnJhbWVzIHN0YXJ0IHdpdGggU09GMCAqLworI2RlZmluZSBKUEVHX0hEUl9TWiA1NTYKICNlbHNlCiAJMHhmZiwgMHhjMCwgMHgwMCwgMHgxMSwJCS8qIFNPRjAgKHN0YXJ0IG9mIGZyYW1lIDAgKi8KIAkweDA4LAkJCQkvKiBkYXRhIHByZWNpc2lvbiAqLwotI2VuZGlmCi19OwotCi0jaWZuZGVmIENPTkVYX0NBTQotLyogdmFyaWFibGUgcGFydDoKLSAqCTB4MDEsIDB4ZTAsCQkJIGhlaWdodAotICoJMHgwMiwgMHg4MCwJCQkgd2lkdGgKLSAqCTB4MDMsCQkJCSBjb21wb25lbnQgbnVtYmVyCi0gKgkJMHgwMSwKLSAqCQkJMHgyMSwJCQlzYW1wbGVzIFkKLSAqLwotCi0vKiBlbmQgb2YgaGVhZGVyICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBlb2hbXSA9IHsKKyNkZWZpbmUgSlBFR19IRUlHSFRfT0ZGU0VUIDU2MQorCTB4MDEsIDB4ZTAsCQkJLyogaGVpZ2h0ICovCisJMHgwMiwgMHg4MCwJCQkvKiB3aWR0aCAqLworCTB4MDMsCQkJCS8qIGNvbXBvbmVudCBudW1iZXIgKi8KKwkJMHgwMSwKKwkJCTB4MjEsCQkvKiBzYW1wbGVzIFkgKi8KIAkJCTB4MDAsCQkvKiBxdWFudCBZICovCiAJCTB4MDIsIDB4MTEsIDB4MDEsCS8qIHNhbXBsZXMgQ2JDciAtIHF1YW50IENiQ3IgKi8KIAkJMHgwMywgMHgxMSwgMHgwMSwKIAogCTB4ZmYsIDB4ZGEsIDB4MDAsIDB4MGMsCQkvKiBTT1MgKHN0YXJ0IG9mIHNjYW4pICovCiAJMHgwMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwMywgMHgxMSwgMHgwMCwgMHgzZiwgMHgwMAorI2RlZmluZSBKUEVHX0hEUl9TWiA1ODkKKyNlbmRpZgogfTsKLSNlbmRpZgogCi0vKiAtLSBvdXRwdXQgdGhlIEpQRUcgaGVhZGVyIC0tICovCi1zdGF0aWMgdm9pZCBqcGVnX3B1dF9oZWFkZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICAgIHN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCi0JCQkgICAgaW50IHFpbmRleCwKLQkJCSAgICBpbnQgc2FtcGxlc1kpCisvKiBkZWZpbmUgdGhlIEpQRUcgaGVhZGVyICovCitzdGF0aWMgdm9pZCBqcGVnX2RlZmluZSh1OCAqanBlZ19oZHIsCisJCQlpbnQgaGVpZ2h0LAorCQkJaW50IHdpZHRoLAorCQkJaW50IHNhbXBsZXNZKQogeworCW1lbWNweShqcGVnX2hkciwganBlZ19oZWFkLCBzaXplb2YganBlZ19oZWFkKTsKICNpZm5kZWYgQ09ORVhfQ0FNCi0JdW5zaWduZWQgY2hhciB0bXBidWZbOF07CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMF0gPSBoZWlnaHQgPj4gODsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAxXSA9IGhlaWdodCAmIDB4ZmY7CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMl0gPSB3aWR0aCA+PiA4OworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDNdID0gd2lkdGggJiAweGZmOworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDZdID0gc2FtcGxlc1k7CiAjZW5kaWYKK30KIAotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBxdWFudFtxaW5kZXhdLCBzaXplb2YgcXVhbnRbMF0pOwotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCi0JCQkodW5zaWduZWQgY2hhciAqKSBodWZmbWFuLCBzaXplb2YgaHVmZm1hbik7Ci0jaWZuZGVmIENPTkVYX0NBTQotCXRtcGJ1ZlswXSA9IGdzcGNhX2Rldi0+aGVpZ2h0ID4+IDg7Ci0JdG1wYnVmWzFdID0gZ3NwY2FfZGV2LT5oZWlnaHQgJiAweGZmOwotCXRtcGJ1ZlsyXSA9IGdzcGNhX2Rldi0+d2lkdGggPj4gODsKLQl0bXBidWZbM10gPSBnc3BjYV9kZXYtPndpZHRoICYgMHhmZjsKLQl0bXBidWZbNF0gPSAweDAzOwkJLyogY29tcG9uZW50IG51bWJlciAqLwotCXRtcGJ1Zls1XSA9IDB4MDE7CQkvKiBmaXJzdCBjb21wb25lbnQgKi8KLQl0bXBidWZbNl0gPSBzYW1wbGVzWTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJdG1wYnVmLCA3KTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJZW9oLCBzaXplb2YgZW9oKTsKLSNlbmRpZgorLyogc2V0IHRoZSBKUEVHIHF1YWxpdHkgKi8KK3N0YXRpYyB2b2lkIGpwZWdfc2V0X3F1YWwodTggKmpwZWdfaGRyLAorCQkJICBpbnQgcXVhbGl0eSkKK3sKKwlpbnQgaSwgc2M7CisKKwlpZiAocXVhbGl0eSA8IDUwKQorCQlzYyA9IDUwMDAgLyBxdWFsaXR5OworCWVsc2UKKwkJc2MgPSAyMDAgLSBxdWFsaXR5ICogMjsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlqcGVnX2hkcltKUEVHX1FUMF9PRkZTRVQgKyBpXSA9CisJCQkoanBlZ19oZWFkW0pQRUdfUVQwX09GRlNFVCArIGldICogc2MgKyA1MCkgLyAxMDA7CisJCWpwZWdfaGRyW0pQRUdfUVQxX09GRlNFVCArIGldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDFfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKaW5kZXggZWQ5MDZmZS4uYjM1ZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9jb3JlLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogCWludCBlcnI7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBNNTYwMl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSAmc2RfZGVzYzsKIAogCWlmIChkdW1wX2JyaWRnZSkKQEAgLTM3NCw4ICszNzMsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IG1vZF9tNTYwMl9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKaW5kZXggM2QyMDkwZS4uNzVlOGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tYXJzLmMKQEAgLTMyLDE3ICszMiw5MSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JY2hhciBxaW5kZXg7CisJdTggYnJpZ2h0bmVzczsKKwl1OCBjb2xvcnM7CisJdTggZ2FtbWE7CisJdTggc2hhcnBuZXNzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDcwCisjZGVmaW5lIFFVQUxJVFlfREVGIDUwCisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkJyaWdodG5lc3MiLAorCQkubWluaW11bSA9IDAsCisJCS5tYXhpbXVtID0gMzAsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMTUKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAorCX0sCisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJDb2xvciIsCisJCS5taW5pbXVtID0gMSwKKwkJLm1heGltdW0gPSAyNTUsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgQ09MT1JfREVGIDIwMAorCQkuZGVmYXVsdF92YWx1ZSA9IENPTE9SX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGNvbG9ycywKKwkgICAgLmdldCA9IHNkX2dldGNvbG9ycywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDMsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgR0FNTUFfREVGIDEKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQU1NQV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYW1tYSwKKwkgICAgLmdldCA9IHNkX2dldGdhbW1hLAorCX0sCisJeworCSAgICB7CisJCS5pZAkgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiU2hhcnBuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDIsCisJCS5zdGVwICAgID0gMSwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldHNoYXJwbmVzcywKKwkgICAgLmdldCA9IHNkX2dldHNoYXJwbmVzcywKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU4OSwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkucHJpdiA9IDJ9LAogCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKQEAgLTUyLDY1ICsxMjYsNDUgQEAKIAkJLnByaXYgPSAxfSwKIH07CiAKLS8qIE1JIFJlZ2lzdGVyIHRhYmxlIC8vZWx2aXMgKi8KLWVudW0gewotCVJFR19IV19NSV8wLAotCVJFR19IV19NSV8xLAotCVJFR19IV19NSV8yLAotCVJFR19IV19NSV8zLAotCVJFR19IV19NSV80LAotCVJFR19IV19NSV81LAotCVJFR19IV19NSV82LAotCVJFR19IV19NSV83LAotCVJFR19IV19NSV85ID0gMHgwOSwKLQlSRUdfSFdfTUlfQiA9IDB4MEIsCi0JUkVHX0hXX01JX0MsCi0JUkVHX0hXX01JX0QsCi0JUkVHX0hXX01JXzFFID0gMHgxRSwKLQlSRUdfSFdfTUlfMjAgPSAweDIwLAotCVJFR19IV19NSV8yQiA9IDB4MkIsCi0JUkVHX0hXX01JXzJDLAotCVJFR19IV19NSV8yRCwKLQlSRUdfSFdfTUlfMkUsCi0JUkVHX0hXX01JXzM1ID0gMHgzNSwKLQlSRUdfSFdfTUlfNUYgPSAweDVmLAotCVJFR19IV19NSV82MCwKLQlSRUdfSFdfTUlfNjEsCi0JUkVHX0hXX01JXzYyLAotCVJFR19IV19NSV82MywKLQlSRUdfSFdfTUlfNjQsCi0JUkVHX0hXX01JX0YxID0gMHhmMSwKLQlBVFRSX1RPVEFMX01JX1JFRyA9IDB4ZjIKK3N0YXRpYyBjb25zdCBfX3U4IG1pX2RhdGFbMHgyMF0gPSB7CisvKgkgMDEgICAgMDIgICAwMyAgICAgMDQgICAgMDUgICAgMDYgICAgMDcgICAgMDggKi8KKwkweDQ4LCAweDIyLCAweDAxLCAweDQ3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLAorLyoJIDA5ICAgIDBhICAgMGIgICAgIDBjICAgIDBkICAgIDBlICAgIDBmICAgIDEwICovCisJMHgwMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwgMHgzMCwgMHgwMSwKKy8qCSAxMSAgICAxMiAgIDEzICAgICAxNCAgICAxNSAgICAxNiAgICAxNyAgICAxOCAqLworCTB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZTIsIDB4MDIsCisvKgkgMTkgICAgMWEgICAxYiAgICAgMWMgICAgMWQgICAgMWUgICAgMWYgICAgMjAgKi8KKwkweDgyLCAweDAwLCAweDIwLCAweDE3LCAweDgwLCAweDA4LCAweDBjLCAweDAwCiB9OwogCi0vKiB0aGUgYnl0ZXMgdG8gd3JpdGUgYXJlIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLworLyogd3JpdGUgPGxlbj4gYnl0ZXMgZnJvbSBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgX191MTYgaW5kZXgsIGludCBsZW4pCisJCSBpbnQgbGVuKQogewotCWludCByYzsKKwlpbnQgYWxlbiwgcmV0OwogCi0JcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQkgdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKLQkJCSAweDEyLAotCQkJIDB4YzgsCQkvKiA/PyAqLwotCQkJIDAsCQkvKiB2YWx1ZSAqLwotCQkJIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgNTAwKTsKLQlpZiAocmMgPCAwKQotCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwgaW5kZXgsIHJjKTsKLQlyZXR1cm4gcmM7CisJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKKwkJCWxlbiwKKwkJCSZhbGVuLAorCQkJNTAwKTsJLyogdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi8KKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlIFslMDJ4XSBlcnJvciAlZCIsCisJCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYnVsa193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgKnBjaCwKLQkJICAgX191MTYgQWRkcmVzcykKK3N0YXRpYyB2b2lkIG1pX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgdTggYWRkciwKKwkJIHU4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4MWY7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsJCQkvKiBjb250cm9sIGJ5dGUgKi8KLQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBBZGRyZXNzOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9ICpwY2ggPj4gODsJCS8qIGhpZ2ggYnl0ZSAqLwotCWdzcGNhX2Rldi0+dXNiX2J1Zls0XSA9ICpwY2g7CQkJLyogbG93IGJ5dGUgKi8KKwlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSBhZGRyOworCWdzcGNhX2Rldi0+dXNiX2J1ZlszXSA9IHZhbHVlOwogCi0JcmVnX3coZ3NwY2FfZGV2LCBBZGRyZXNzLCA1KTsKKwlyZWdfdyhnc3BjYV9kZXYsIDQpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xMjEsMTAgKzE3NSwxNCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7Ci0Jc2QtPnFpbmRleCA9IDE7CQkJLyogc2V0IHRoZSBxdWFudGl6YXRpb24gdGFibGUgKi8KKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPmdhbW1hID0gR0FNTUFfREVGOworCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJZ3NwY2FfZGV2LT5uYmFsdCA9IDk7CQkvKiB1c2UgdGhlIGFsdHNldHRpbmcgMDggKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2LDI0ICsxOTQsMjIgQEAKIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBlcnJfY29kZTsKLQlfX3U4ICpkYXRhOwotCV9fdTE2ICpNSV9idWY7Ci0JaW50IGhfc2l6ZSwgdl9zaXplOwotCWludCBpbnRwaXBlOworCXU4ICpkYXRhOworCWludCBpOwogCi0JUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0YXJ0LCBpZmFjZSAlZCwgYWx0IDgiLCBnc3BjYV9kZXYtPmlmYWNlKTsKLQllcnJfY29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCA4KTsKLQlpZiAoZXJyX2NvZGUgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwgIlNldCBwYWNrZXQgc2l6ZTogc2V0IGludGVyZmFjZSBlcnJvciIpOwotCQlyZXR1cm4gZXJyX2NvZGU7Ci0JfQorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CiAKIAlkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCiAJZGF0YVswXSA9IDB4MDE7CQkvKiBhZGRyZXNzICovCiAJZGF0YVsxXSA9IDB4MDE7Ci0KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIApAQCAtMTYzLDMwICsyMTksMjggQEAKIAlkYXRhWzBdID0gMHgwMDsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwYyB8IDB4MDE7CS8qIHJlZyAwICovCiAJZGF0YVsyXSA9IDB4MDE7CQkvKiByZWcgMSAqLwotCWhfc2l6ZSA9IGdzcGNhX2Rldi0+d2lkdGg7Ci0Jdl9zaXplID0gZ3NwY2FfZGV2LT5oZWlnaHQ7Ci0JZGF0YVszXSA9IGhfc2l6ZSAvIDg7CS8qIGhfc2l6ZSAsIHJlZyAyICovCi0JZGF0YVs0XSA9IHZfc2l6ZSAvIDg7CS8qIHZfc2l6ZSAsIHJlZyAzICovCisJZGF0YVszXSA9IGdzcGNhX2Rldi0+d2lkdGggLyA4OwkJLyogaF9zaXplICwgcmVnIDIgKi8KKwlkYXRhWzRdID0gZ3NwY2FfZGV2LT5oZWlnaHQgLyA4OwkvKiB2X3NpemUgLCByZWcgMyAqLwogCWRhdGFbNV0gPSAweDMwOwkJLyogcmVnIDQsIE1JLCBQQVM1MTAxIDoKIAkJCQkgKgkweDMwIGZvciAyNG1oeiAsIDB4MjggZm9yIDEybWh6ICovCi0JZGF0YVs2XSA9IDQ7CQkvKiByZWcgNSwgSCBzdGFydCAqLwotCWRhdGFbN10gPSAweGMwOwkJLyogcmVnIDYsIGdhbW1hIDEuNSAqLwotCWRhdGFbOF0gPSAzOwkJLyogcmVnIDcsIFYgc3RhcnQgKi8KKwlkYXRhWzZdID0gMHgwMjsJCS8qIHJlZyA1LCBIIHN0YXJ0IC0gd2FzIDB4MDQgKi8KKwlkYXRhWzddID0gc2QtPmdhbW1hICogMHg0MDsJLyogcmVnIDB4MDY6IGdhbW1hICovCisJZGF0YVs4XSA9IDB4MDE7CQkvKiByZWcgNywgViBzdGFydCAtIHdhcyAweDAzICovCiAvKglpZiAoaF9zaXplID09IDMyMCApICovCiAvKgkJZGF0YVs5XT0gMHg1NjsJICogcmVnIDgsIDI0TUh6LCAyOjEgc2NhbGUgZG93biAqLwogLyoJZWxzZSAqLwogCWRhdGFbOV0gPSAweDUyOwkJLyogcmVnIDgsIDI0TUh6LCBubyBzY2FsZSBkb3duICovCi0JZGF0YVsxMF0gPSAweDVkOwkvKiByZWcgOSwgSTJDIGRldmljZSBhZGRyZXNzCi0JCQkJICoJW2ZvciBQQVM1MTAxICgweDQwKV0gW2ZvciBNSSAoMHg1ZCldICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMTBdID0gMHgxODsKIAotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAxMSk7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHgyMzsJCS8qIGFkZHJlc3MgKi8KIAlkYXRhWzFdID0gMHgwOTsJCS8qIHJlZyAzNSwgYXBwZW5kIGZyYW1lIGhlYWRlciAqLwogCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKQEAgLTE5NywxMzcgKzI1MSw1NyBAQAogLyoJZWxzZSAqLwogCWRhdGFbMV0gPSA1MDsJCS8qIDUwIHJlZyA2MCwgcGMtY2FtIGZyYW1lIHNpemUKIAkJCQkgKgkodW5pdDogNEtCKSAyMDBLQiAqLwotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCi0JaWYgKDApIHsJCQkvKiBmaXhlZCBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoMS43NSkgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDNmOwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCWRhdGFbNF0gPSAwOwkJLyogcmVnIDk3LCBzZXQgZml4ZWQgZGFyayBsZXZlbCAqLwotCQlkYXRhWzVdID0gMDsJCS8qIHJlZyA5OCwgZG9uJ3QgY2FyZSAqLwotCX0gZWxzZSB7CQkJLyogYXV0byBkYXJrLWdhaW4gKi8KLQkJZGF0YVsxXSA9IDA7CQkvKiByZWcgOTQsIFkgR2FpbiAoYXV0bykgKi8KLQkJZGF0YVsyXSA9IDA7CQkvKiByZWcgOTUsIFVWIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbM10gPSAweDc4OwkJLyogcmVnIDk2LCBZIEdhaW4vVVYgR2Fpbi9kaXNhYmxlCi0JCQkJCSAqCWF1dG8gZGFyay1nYWluICovCi0JCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgewotLyoJCWNhc2UgMTI4MDogKi8KLS8qCQkJZGF0YVs0XSA9IDE1NDsKLQkJCQkgKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludCAodW5pdDogMjU2IHBpeGVsKSAqLwotLyoJCQlkYXRhWzVdID0gNTE7Ci0JCQkJICogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkgKgkodWludDogMjU2IHBpeGVsKSAqLwotLyoJCQlicmVhazsgKi8KLQkJZGVmYXVsdDoKLS8qCQljYXNlIDY0MDogKi8KLQkJCWRhdGFbNF0gPSAzNjsJLyogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQKLQkJCQkJICoJKHVuaXQ6IDI1NiBwaXhlbCkgKi8KLQkJCWRhdGFbNV0gPSAxMjsJLyogcmVnIDk4LCAlMSBoaWdobGlnaHQgcG9pbnQKLQkJCQkJICoJKHVpbnQ6IDI1NiBwaXhlbCkgKi8KLQkJCWJyZWFrOwotCQljYXNlIDMyMDoKLQkJCWRhdGFbNF0gPSA5OwkvKiByZWcgOTcsICUzIHNoYWRvdyBwb2ludAotCQkJCQkgKgkodW5pdDogMjU2IHBpeGVsKSAqLwotCQkJZGF0YVs1XSA9IDM7CS8qIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50Ci0JCQkJCSAqCSh1aW50OiAyNTYgcGl4ZWwpICovCi0JCQlicmVhazsKLQkJfQotCX0KIAkvKiBhdXRvIGRhcmstZ2FpbiAqLwogCWRhdGFbMF0gPSAweDVlOwkJLyogYWRkcmVzcyAqLworCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKGF1dG8pICovCisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCQkJCS8qIHJlZyAweDVmLzB4NjAgKExFKSA9IHNhdHVyYXRpb24gKi8KKwkJCQkvKiBoICg2MCk6IHh4eHggeDEwMAorCQkJCSAqIGwgKDVmKTogeHh4eCB4MDAwICovCisJZGF0YVsyXSA9IHNkLT5jb2xvcnMgPDwgMzsKKwlkYXRhWzNdID0gKChzZC0+Y29sb3JzID4+IDIpICYgMHhmOCkgfCAweDA0OworCWRhdGFbNF0gPSBzZC0+YnJpZ2h0bmVzczsgLyogcmVnIDB4NjEgPSBicmlnaHRuZXNzICovCisJZGF0YVs1XSA9IDB4MDA7CiAKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgNik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDYpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAogCWRhdGFbMF0gPSAweDY3OwotCWRhdGFbMV0gPSAweDEzOwkJLyogcmVnIDEwMywgZmlyc3QgcGl4ZWwgQiwgZGlzYWJsZSBzaGFycG5lc3MgKi8KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisvKmpmbTogZnJvbSB3aW4gdHJhY2UqLworCWRhdGFbMV0gPSBzZC0+c2hhcnBuZXNzICogNCArIDM7CisJZGF0YVsyXSA9IDB4MTQ7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDMpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgTUkgc2Vuc29yLi4uCi0JICovCi0JTUlfYnVmID0ga3phbGxvYyhBVFRSX1RPVEFMX01JX1JFRyAqIHNpemVvZiAqTUlfYnVmLCBHRlBfS0VSTkVMKTsKLQlNSV9idWZbUkVHX0hXX01JXzFdID0gMHgwMDBhOwotCU1JX2J1ZltSRUdfSFdfTUlfMl0gPSAweDAwMGM7Ci0JTUlfYnVmW1JFR19IV19NSV8zXSA9IDB4MDQwNTsKLQlNSV9idWZbUkVHX0hXX01JXzRdID0gMHgwNTA3OwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfNV0JID0gMHgwMWZmOy8vMTMgKi8KLQlNSV9idWZbUkVHX0hXX01JXzVdID0gMHgwMDEzOwkvKiAxMyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfNl0gPSAweDAwMWY7CS8qIHZlcnRpY2FsIGJsYW5raW5nICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV82XQkgPSAweDA0MDA7ICAvLyB2ZXJ0aWNhbCBibGFua2luZyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfN10gPSAweDAwMDI7Ci0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAxNWY7ICovCi0JLyogbWlfQXR0cl9SZWdfW1JFR19IV19NSV85XQkgPSAweDAzMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV85XSA9IDB4MDM3NDsKLQlNSV9idWZbUkVHX0hXX01JX0JdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfQ10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9EXSA9IDB4MDAwMDsKLQlNSV9idWZbUkVHX0hXX01JXzFFXSA9IDB4ODAwMDsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMjBdCSAgPSAweDExMDQ7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yMF0gPSAweDExMDQ7CS8qIDB4MTExYzsgKi8KLQlNSV9idWZbUkVHX0hXX01JXzJCXSA9IDB4MDAwODsKLS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfMkNdCSAgPSAweDAwMGY7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yQ10gPSAweDAwMWY7CS8qIGxpdGEgc3VnZ2VzdCAqLwotCU1JX2J1ZltSRUdfSFdfTUlfMkRdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMkVdID0gMHgwMDA4OwotCU1JX2J1ZltSRUdfSFdfTUlfMzVdID0gMHgwMDUxOwotCU1JX2J1ZltSRUdfSFdfTUlfNUZdID0gMHgwOTA0OwkvKiBmYWlsIHRvIHdyaXRlICovCi0JTUlfYnVmW1JFR19IV19NSV82MF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82MV0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82Ml0gPSAweDA0OTg7Ci0JTUlfYnVmW1JFR19IV19NSV82M10gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV82NF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV9GMV0gPSAweDAwMDE7Ci0JLyogY2hhbmdpbmcgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGlmZmVyZW50IHZhbHVlIG9mIGR4L2R5ICovCisJZGF0YVswXSA9IDB4Njk7CisJZGF0YVsxXSA9IDB4MmY7CisJZGF0YVsyXSA9IDB4Mjg7CisJZGF0YVszXSA9IDB4NDI7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWlmIChnc3BjYV9kZXYtPndpZHRoICE9IDEyODApIHsKLQkJTUlfYnVmWzB4MDFdID0gMHgwMTBhOwotCQlNSV9idWZbMHgwMl0gPSAweDAxNGM7Ci0JCU1JX2J1ZlsweDAzXSA9IDB4MDFlNTsKLQkJTUlfYnVmWzB4MDRdID0gMHgwMjg3OwotCX0KLQlNSV9idWZbMHgyMF0gPSAweDExMDQ7CisJZGF0YVswXSA9IDB4NjM7CisJZGF0YVsxXSA9IDB4MDc7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworLypqZm06IHdpbiB0cmFjZSAtIG1hbnkgd3JpdGVzIGhlcmUgdG8gcmVnIDB4NjQqLworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKIAotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDEsIDEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDIsIDIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDMsIDMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDQsIDQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDUsIDUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDYsIDYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDcsIDcpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDksIDkpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGIsIDB4MGIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGMsIDB4MGMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MGQsIDB4MGQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MWUsIDB4MWUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MjAsIDB4MjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmIsIDB4MmIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmMsIDB4MmMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmQsIDB4MmQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MmUsIDB4MmUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4MzUsIDB4MzUpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NWYsIDB4NWYpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjAsIDB4NjApOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjEsIDB4NjEpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjIsIDB4NjIpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjMsIDB4NjMpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4NjQsIDB4NjQpOwotCWJ1bGtfdyhnc3BjYV9kZXYsIE1JX2J1ZiArIDB4ZjEsIDB4ZjEpOwotCWtmcmVlKE1JX2J1Zik7Ci0KLQlpbnRwaXBlID0gdXNiX3NuZGludHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApOwotCWVycl9jb2RlID0gdXNiX2NsZWFyX2hhbHQoZ3NwY2FfZGV2LT5kZXYsIGludHBpcGUpOworCS8qIGluaXRpYWxpemUgdGhlIE1JIHNlbnNvciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgbWlfZGF0YTsgaSsrKQorCQltaV93KGdzcGNhX2RldiwgaSArIDEsIG1pX2RhdGFbaV0pOwogCiAJZGF0YVswXSA9IDB4MDA7CiAJZGF0YVsxXSA9IDB4NGQ7CQkvKiBJU09DIHRyYW5zZmVyaW5nIGVuYWJsZS4uLiAqLwotCXJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7Ci0JcmV0dXJuIGVycl9jb2RlOworCXJlZ193KGdzcGNhX2RldiwgMik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTMzNiwxMSArMzEwLDE4IEBACiAKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOwogCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7Ci0JcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIDIpOworCXJlc3VsdCA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0zNjMsMTYgKzM0NCwxNiBAQAogCQkJICAgIHx8IGRhdGFbNSArIHBdID09IDB4NjUKIAkJCSAgICB8fCBkYXRhWzUgKyBwXSA9PSAweDY2CiAJCQkgICAgfHwgZGF0YVs1ICsgcF0gPT0gMHg2NykgewotCQkJCVBERUJVRyhEX1BBQ0ssICJzb2Ygb2Zmc2V0OiAlZCBsZW5nOiAlZCIsCisJCQkJUERFQlVHKERfUEFDSywgInNvZiBvZmZzZXQ6ICVkIGxlbjogJWQiLAogCQkJCQlwLCBsZW4pOwogCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQkJCQkJZnJhbWUsIGRhdGEsIDApOworCQkJCQkJCWZyYW1lLCBkYXRhLCBwKTsKIAogCQkJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgKi8KLQkJCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkJCXNkLT5xaW5kZXgsIDB4MjEpOwotCQkJCWRhdGEgKz0gMTY7Ci0JCQkJbGVuIC09IDE2OworCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOworCQkJCWRhdGEgKz0gcCArIDE2OworCQkJCWxlbiAtPSBwICsgMTY7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4MCw2ICszNjEsMTIxIEBACiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIAorc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5icmlnaHRuZXNzID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDYxOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWw7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmNvbG9ycyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKworCQkvKiBzZWUgc2Rfc3RhcnQgKi8KKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg1ZjsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gc2QtPmNvbG9ycyA8PCAzOworCQlnc3BjYV9kZXYtPnVzYl9idWZbMl0gPSAoKHNkLT5jb2xvcnMgPj4gMikgJiAweGY4KSB8IDB4MDQ7CisJCXJlZ193KGdzcGNhX2RldiwgMyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5jb2xvcnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDA2OworCQlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWwgKiAweDQwOworCQlyZWdfdyhnc3BjYV9kZXYsIDIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPnNoYXJwbmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg2NzsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsICogNCArIDM7CisJCXJlZ193KGdzcGNhX2RldiwgMik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5zaGFycG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0zODksNyArNDg1LDEwIEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtNDIxLDggKzUyMCwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MDFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIE1hcnMgTVI5NzMxMEEgbGlicmFyeQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAibXI5NzMxMGEiCisKKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJLeWxlIEd1aW5uIDxlbHlrMDNAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9NYXJzLVNlbWkgTVI5NzMxMEEgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7ICAvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJdTggc29mX3JlYWQ7Cit9OworCisvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CisJezE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE2MCwKKwkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA0fSwKKwl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTc2LAorCQkuc2l6ZWltYWdlID0gMTc2ICogMTQ0LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDN9LAorCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX01SOTczMTBBLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisJezM1MiwgMjg4LCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDM1MiwKKwkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKKworLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KK3N0YXRpYyBpbnQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgbGVuKQoreworCWludCByYzsKKworCXJjID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDQpLAorCQkJICBnc3BjYV9kZXYtPnVzYl9idWYsIGxlbiwgTlVMTCwgNTAwKTsKKwlpZiAocmMgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWcgd3JpdGUgWyUwMnhdIGVycm9yICVkIiwKKwkJICAgICAgIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSwgcmMpOworCXJldHVybiByYzsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW07CisKKwljYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCV9fdTggKmRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWY7CisJaW50IGVycl9jb2RlOworCisJc2QtPnNvZl9yZWFkID0gMDsKKworCS8qIE5vdGU6ICByZWdpc3RlciBkZXNjcmlwdGlvbnMgZ3Vlc3NlZCBmcm9tIE1SOTcxMTNBIGRyaXZlciAqLworCisJZGF0YVswXSA9IDB4MDE7CisJZGF0YVsxXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDAwOworCWRhdGFbMV0gPSAweDBkOworCWRhdGFbMl0gPSAweDAxOworCWRhdGFbNV0gPSAweDJiOworCWRhdGFbN10gPSAweDAwOworCWRhdGFbOV0gPSAweDUwOyAgLyogcmVnIDgsIG5vIHNjYWxlIGRvd24gKi8KKwlkYXRhWzEwXSA9IDB4YzA7CisKKwlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKKwljYXNlIDE2MDoKKwkJZGF0YVs5XSB8PSAweDBjOyAgLyogcmVnIDgsIDQ6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzIwOgorCQlkYXRhWzldIHw9IDB4MDQ7ICAvKiByZWcgOCwgMjoxIHNjYWxlIGRvd24gKi8KKwkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSA2NDA6CisJZGVmYXVsdDoKKwkJZGF0YVszXSA9IDB4NTA7ICAvKiByZWcgMiwgSCBzaXplICovCisJCWRhdGFbNF0gPSAweDc4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLworCQlkYXRhWzZdID0gMHgwNDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCisJCWRhdGFbOF0gPSAweDAzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDE3NjoKKwkJZGF0YVs5XSB8PSAweDA0OyAgLyogcmVnIDgsIDI6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgMzUyOgorCQlkYXRhWzNdID0gMHgyYzsgIC8qIHJlZyAyLCBIIHNpemUgKi8KKwkJZGF0YVs0XSA9IDB4NDg7ICAvKiByZWcgMywgViBzaXplICovCisJCWRhdGFbNl0gPSAweDk0OyAgLyogcmVnIDUsIEggc3RhcnQgKi8KKwkJZGF0YVs4XSA9IDB4NjM7ICAvKiByZWcgNywgViBzdGFydCAqLworCQlicmVhazsKKwl9CisKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMTEpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDBhOworCWRhdGFbMV0gPSAweDgwOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNDsKKwlkYXRhWzFdID0gMHgwYTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWI7CisJZGF0YVsxXSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE1OworCWRhdGFbMV0gPSAweDE2OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNjsKKwlkYXRhWzFdID0gMHgxMDsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MTc7CisJZGF0YVsxXSA9IDB4M2E7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE4OworCWRhdGFbMV0gPSAweDY4OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwMDsKKwlkYXRhWzJdID0gMHgwMjsKKwlkYXRhWzNdID0gMHgwNjsKKwlkYXRhWzRdID0gMHg1OTsKKwlkYXRhWzVdID0gMHgwYzsKKwlkYXRhWzZdID0gMHgxNjsKKwlkYXRhWzddID0gMHgwMDsKKwlkYXRhWzhdID0gMHgwNzsKKwlkYXRhWzldID0gMHgwMDsKKwlkYXRhWzEwXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MGE7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4MDE7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4MDA7CisJZGF0YVs3XSA9IDB4MDE7CisJZGF0YVs4XSA9IDB4MDA7CisJZGF0YVs5XSA9IDB4MGE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDEwKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MTI7CisJZGF0YVszXSA9IDB4MDA7CisJZGF0YVs0XSA9IDB4NjM7CisJZGF0YVs1XSA9IDB4MDA7CisJZGF0YVs2XSA9IDB4NzA7CisJZGF0YVs3XSA9IDB4MDA7CisJZGF0YVs4XSA9IDB4MDA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDkpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFmOworCWRhdGFbMV0gPSAweDA0OworCWRhdGFbMl0gPSAweDExOworCWRhdGFbM10gPSAweDAxOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA0KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHg0ZDsgIC8qIElTT0MgdHJhbnNmZXJpbmcgZW5hYmxlLi4uICovCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCXJldHVybiBlcnJfY29kZTsKK30KKworc3RhdGljIHZvaWQgc2Rfc3RvcE4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXN1bHQ7CisKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAxOworCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CisJcmVzdWx0ID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAiQ2FtZXJhIFN0b3AgZmFpbGVkIik7Cit9CisKKy8qIEluY2x1ZGUgcGFjIGNvbW1vbiBzb2YgZGV0ZWN0aW9uIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgInBhY19jb21tb24uaCIKKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwgICAgLyogdGFyZ2V0ICovCisJCQlfX3U4ICpkYXRhLCAgICAgICAgICAgICAgICAgICAvKiBpc29jIHBhY2tldCAqLworCQkJaW50IGxlbikgICAgICAgICAgICAgICAgICAgICAgLyogaXNvIHBhY2tldCBsZW5ndGggKi8KK3sKKwl1bnNpZ25lZCBjaGFyICpzb2Y7CisKKwlzb2YgPSBwYWNfZmluZF9zb2YoZ3NwY2FfZGV2LCBkYXRhLCBsZW4pOworCWlmIChzb2YpIHsKKwkJaW50IG47CisKKwkJLyogZmluaXNoIGRlY29kaW5nIGN1cnJlbnQgZnJhbWUgKi8KKwkJbiA9IHNvZiAtIGRhdGE7CisJCWlmIChuID4gc2l6ZW9mIHBhY19zb2ZfbWFya2VyKQorCQkJbiAtPSBzaXplb2YgcGFjX3NvZl9tYXJrZXI7CisJCWVsc2UKKwkJCW4gPSAwOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJZGF0YSwgbik7CisJCS8qIFN0YXJ0IG5leHQgZnJhbWUuICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlwYWNfc29mX21hcmtlciwgc2l6ZW9mIHBhY19zb2ZfbWFya2VyKTsKKwkJbGVuIC09IHNvZiAtIGRhdGE7CisJCWRhdGEgPSBzb2Y7CisJfQorCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7Cit9CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmN0cmxzID0gc2RfY3RybHMsCisJLm5jdHJscyA9IEFSUkFZX1NJWkUoc2RfY3RybHMpLAorCS5jb25maWcgPSBzZF9jb25maWcsCisJLmluaXQgPSBzZF9pbml0LAorCS5zdGFydCA9IHNkX3N0YXJ0LAorCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorfTsKKworLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MDExMSl9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIC0tIGRldmljZSBjb25uZWN0IC0tICovCitzdGF0aWMgaW50IHNkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsICZzZF9kZXNjLCBzaXplb2Yoc3RydWN0IHNkKSwKKwkJCSAgICAgICBUSElTX01PRFVMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQorCQlyZXR1cm4gLTE7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggZWUyMzI5NS4uMWZmZjM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtMTM2MCw3ICsxMzYwLDYgQEAKIAl9CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBPVjUxMV9FTkRQT0lOVF9BRERSRVNTOwogCWlmICghc2QtPnNpZikgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CkBAIC0yMTc3LDggKzIxNzYsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwppbmRleCAzYmYxNWU0Li4xOWUwYmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIG92NTM0L292NzcyeCBnc3BjYSBkcml2ZXIKKyAqIG92NTM0IGdzcGNhIGRyaXZlcgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFudG9uaW8gT3NwaXRlIDxvc3BpdGVAc3R1ZGVudGkudW5pbmEuaXQ+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmVhbi1GcmFuY29pcyBNb2luZSBodHRwOi8vbW9pbmVqZi5mcmVlLmZyCiAgKgogICogQmFzZWQgb24gYSBwcm90b3R5cGUgd3JpdHRlbiBieSBNYXJrIEZlcnJlbGwgPG1ham9ydHJpcHNAZ21haWwuY29tPgogICogVVNCIHByb3RvY29sIHJldmVyc2UgZW5naW5lZXJlZCBieSBKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KQEAgLTI2LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgImdzcGNhLmgiCiAKLSNkZWZpbmUgT1Y1MzRfUkVHX0FERFJFU1MJMHhmMQkvKiA/ICovCisjZGVmaW5lIE9WNTM0X1JFR19BRERSRVNTCTB4ZjEJLyogc2Vuc29yIGFkZHJlc3MgKi8KICNkZWZpbmUgT1Y1MzRfUkVHX1NVQkFERFIJMHhmMgogI2RlZmluZSBPVjUzNF9SRUdfV1JJVEUJCTB4ZjMKICNkZWZpbmUgT1Y1MzRfUkVHX1JFQUQJCTB4ZjQKQEAgLTQ2LDkgKzQ3LDEzIEBACiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwotCV9fdTMyIGxhc3RfZmlkOwogCV9fdTMyIGxhc3RfcHRzOwotCWludCBmcmFtZV9yYXRlOworCXUxNiBsYXN0X2ZpZDsKKwl1OCBmcmFtZV9yYXRlOworCisJdTggc2Vuc29yOworI2RlZmluZSBTRU5TT1JfT1Y3NzJYIDAKKyNkZWZpbmUgU0VOU09SX09WOTY1WCAxCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC02MywxMTQgKzY4LDcgQEAKIAkgLnByaXYgPSAwfSwKIH07CiAKLXN0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQ7Ci0KLQlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKLQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MSwKLQkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSAgICAgIDB4MCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgIndyaXRlIGZhaWxlZCIpOwotfQotCi1zdGF0aWMgdTggb3Y1MzRfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAotCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAotCQkJICAgICAgMHgxLAotCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICAweDAsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBDVFJMX1RJTUVPVVQpOwotCVBERUJVRyhEX1VTQkksICJyZWc9MHglMDR4LCBkYXRhPTB4JTAyeCIsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKLQlpZiAocmV0IDwgMCkKLQkJUERFQlVHKERfRVJSLCAicmVhZCBmYWlsZWQiKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCi0vKiBUd28gYml0cyBjb250cm9sIExFRDogMHgyMSBiaXQgNyBhbmQgMHgyMyBiaXQgNy4KLSAqIChkaXJlY3Rpb24gYW5kIG91dHB1dCk/ICovCi1zdGF0aWMgdm9pZCBvdjUzNF9zZXRfbGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IHN0YXR1cykKLXsKLQl1OCBkYXRhOwotCi0JUERFQlVHKERfQ09ORiwgImxlZCBzdGF0dXM6ICVkIiwgc3RhdHVzKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjEpOwotCWRhdGEgfD0gMHg4MDsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDIxLCBkYXRhKTsKLQotCWRhdGEgPSBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MjMpOwotCWlmIChzdGF0dXMpCi0JCWRhdGEgfD0gMHg4MDsKLQllbHNlCi0JCWRhdGEgJj0gfigweDgwKTsKLQotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjMsIGRhdGEpOwotfQotCi1zdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQl1OCBkYXRhOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKLQotCQlzd2l0Y2ggKGRhdGEpIHsKLQkJY2FzZSAweDAwOgotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgMHgwNDoKLQkJCXJldHVybiAwOwotCQljYXNlIDB4MDM6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKLQkJCSAgICAgICBkYXRhLCBpICsgMSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZywgdTggdmFsKQotewotCVBERUJVRyhEX1VTQk8sICJyZWc6IDB4JTA0eCwgdmFsOiAweCUwMngiLCByZWcsIHZhbCk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1dSSVRFLCB2YWwpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzMpOwotCi0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ193cml0ZSBmYWlsZWQiKTsKLX0KLQotI2lmZGVmIEdTUENBX0RFQlVHCi1zdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCi17Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7Ci0JaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQotCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7Ci0KLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOwotCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKLQkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOwotCi0JcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBfX3U4IG92NTM0X3JlZ19pbml0ZGF0YVtdWzJdID0gewotCXsgMHhlNywgMHgzYSB9LAotCi0JeyBPVjUzNF9SRUdfQUREUkVTUywgMHg0MiB9LCAvKiBzZWxlY3QgT1Y3NzJ4IHNlbnNvciAqLwotCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX2luaXRfb3Y3MjJ4W11bMl0gPSB7CiAJeyAweGMyLCAweDBjIH0sCiAJeyAweDg4LCAweGY4IH0sCiAJeyAweGMzLCAweDY5IH0sCkBAIC0yMjgsNyArMTI2LDcgQEAKIAl7IDB4YzIsIDB4MGMgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzcyeF9yZWdfaW5pdGRhdGFbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjcyMnhbXVsyXSA9IHsKIAl7IDB4MTIsIDB4ODAgfSwKIAl7IDB4MTEsIDB4MDEgfSwKIApAQCAtMzExLDYgKzIwOSw0NTYgQEAKIAl7IDB4MGMsIDB4ZDAgfQogfTsKIAorc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eFtdWzJdID0geworCXsweDg4LCAweGY4fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAzfSwKKwl7MHg5NSwgMHgxMH0sCisJezB4ZTIsIDB4MDB9LAorCXsweGU3LCAweDNlfSwKKwl7MHg4ZCwgMHgxY30sCisJezB4OGUsIDB4MDB9LAorCXsweDhmLCAweDAwfSwKKwl7MHgxZiwgMHgwMH0sCisJezB4YzMsIDB4Zjl9LAorCXsweDg5LCAweGZmfSwKKwl7MHg4OCwgMHhmOH0sCisJezB4NzYsIDB4MDN9LAorCXsweDkyLCAweDAxfSwKKwl7MHg5MywgMHgxOH0sCisJezB4MWMsIDB4MGF9LAorCXsweDFkLCAweDQ4fSwKKwl7MHhjMCwgMHg1MH0sCisJezB4YzEsIDB4M2N9LAorCXsweDM0LCAweDA1fSwKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweDM0LCAweDA1fSwKKwl7MHhlNywgMHgyZX0sCisJezB4MzEsIDB4Zjl9LAorCXsweDM1LCAweDAyfSwKKwl7MHhkOSwgMHgxMH0sCisJezB4MjUsIDB4NDJ9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhbXVsyXSA9IHsKKwl7MHgxMiwgMHg4MH0sCS8qIGNvbTcgLSByZXNldCAqLworCXsweDAwLCAweDAwfSwJLyogZ2FpbiAqLworCXsweDAxLCAweDgwfSwJLyogYmx1ZSAqLworCXsweDAyLCAweDgwfSwJLyogcmVkICovCisJezB4MDMsIDB4MWJ9LAkvKiB2cmVmICovCisJezB4MDQsIDB4MDN9LAkvKiBjb20xIC0gZXhwb3N1cmUgbG93IGJpdHMgKi8KKwl7MHgwYiwgMHg1N30sCS8qIHZlciAqLworCXsweDBlLCAweDYxfSwJLyogY29tNSAqLworCXsweDBmLCAweDQyfSwJLyogY29tNiAqLworCXsweDExLCAweDAwfSwJLyogY2xrcmMgKi8KKwl7MHgxMiwgMHgwMn0sCS8qIGNvbTcgKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDE2LCAweDI0fSwJLyogcnN2ZDE2ICovCisJezB4MTcsIDB4MWR9LAkvKiBoc3RhcnQqLworCXsweDE4LCAweGJkfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4ODF9LAkvKiB2c3RvcCovCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MjQsIDB4M2N9LAkvKiBhZXcgKi8KKwl7MHgyNSwgMHgzNn0sCS8qIGFlYiAqLworCXsweDI2LCAweDcxfSwJLyogdnB0ICovCisJezB4MjcsIDB4MDh9LAkvKiBiYmlhcyAqLworCXsweDI4LCAweDA4fSwJLyogZ2JiaWFzICovCisJezB4MjksIDB4MTV9LAkvKiBnciBjb20gKi8KKwl7MHgyYSwgMHgwMH0sCisJezB4MmIsIDB4MDB9LAorCXsweDJjLCAweDA4fSwJLyogcmJpYXMgKi8KKwl7MHgzMiwgMHhmZn0sCS8qIGhyZWYgKi8KKwl7MHgzMywgMHgwMH0sCS8qIGNobGYgKi8KKwl7MHgzNCwgMHgzZn0sCS8qIGFyYmxtICovCisJezB4MzUsIDB4MDB9LAkvKiByc3ZkMzUgKi8KKwl7MHgzNiwgMHhmOH0sCS8qIHJzdmQzNiAqLworCXsweDM4LCAweDcyfSwJLyogYWNvbTM4ICovCisJezB4MzksIDB4NTd9LAkvKiBvZm9uICovCisJezB4M2EsIDB4ODB9LAkvKiB0c2xiICovCisJezB4M2IsIDB4YzR9LAorCXsweDNkLCAweDk5fSwJLyogY29tMTMgKi8KKwl7MHgzZiwgMHhjMX0sCisJezB4NDAsIDB4YzB9LAkvKiBjb20xNSAqLworCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4NDMsIDB4MGF9LAorCXsweDQ0LCAweGYwfSwKKwl7MHg0NSwgMHg0Nn0sCisJezB4NDYsIDB4NjJ9LAorCXsweDQ3LCAweDJhfSwKKwl7MHg0OCwgMHgzY30sCisJezB4NGEsIDB4ZmN9LAorCXsweDRiLCAweGZjfSwKKwl7MHg0YywgMHg3Zn0sCisJezB4NGQsIDB4N2Z9LAorCXsweDRlLCAweDdmfSwKKwl7MHg0ZiwgMHg5OH0sCisJezB4NTAsIDB4OTh9LAorCXsweDUxLCAweDAwfSwKKwl7MHg1MiwgMHgyOH0sCisJezB4NTMsIDB4NzB9LAorCXsweDU0LCAweDk4fSwKKwl7MHg1OCwgMHgxYX0sCisJezB4NTksIDB4ODV9LAorCXsweDVhLCAweGE5fSwKKwl7MHg1YiwgMHg2NH0sCisJezB4NWMsIDB4ODR9LAorCXsweDVkLCAweDUzfSwKKwl7MHg1ZSwgMHgwZX0sCisJezB4NWYsIDB4ZjB9LAorCXsweDYwLCAweGYwfSwKKwl7MHg2MSwgMHhmMH0sCisJezB4NjIsIDB4MDB9LAkvKiBsY2MxICovCisJezB4NjMsIDB4MDB9LAkvKiBsY2MyICovCisJezB4NjQsIDB4MDJ9LAkvKiBsY2MzICovCisJezB4NjUsIDB4MTZ9LAkvKiBsY2M0ICovCisJezB4NjYsIDB4MDF9LAkvKiBsY2M1ICovCisJezB4NjksIDB4MDJ9LAkvKiBodiAqLworCXsweDZiLCAweDVhfSwJLyogZGJ2bCAqLworCXsweDZjLCAweDA0fSwKKwl7MHg2ZCwgMHg1NX0sCisJezB4NmUsIDB4MDB9LAorCXsweDZmLCAweDlkfSwKKwl7MHg3MCwgMHgyMX0sCisJezB4NzEsIDB4Nzh9LAorCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMX0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4NzcsIDB4MDJ9LAorCXsweDdhLCAweDEyfSwKKwl7MHg3YiwgMHgwOH0sCisJezB4N2MsIDB4MTZ9LAorCXsweDdkLCAweDMwfSwKKwl7MHg3ZSwgMHg1ZX0sCisJezB4N2YsIDB4NzJ9LAorCXsweDgwLCAweDgyfSwKKwl7MHg4MSwgMHg4ZX0sCisJezB4ODIsIDB4OWF9LAorCXsweDgzLCAweGE0fSwKKwl7MHg4NCwgMHhhY30sCisJezB4ODUsIDB4Yjh9LAorCXsweDg2LCAweGMzfSwKKwl7MHg4NywgMHhkNn0sCisJezB4ODgsIDB4ZTZ9LAorCXsweDg5LCAweGYyfSwKKwl7MHg4YSwgMHgwM30sCisJezB4OGMsIDB4ODl9LAorCXsweDE0LCAweDI4fSwJLyogY29tOSAqLworCXsweDkwLCAweDdkfSwKKwl7MHg5MSwgMHg3Yn0sCisJezB4OWQsIDB4MDN9LAorCXsweDllLCAweDA0fSwKKwl7MHg5ZiwgMHg3YX0sCisJezB4YTAsIDB4Nzl9LAorCXsweGExLCAweDQwfSwJLyogYWVjaG0gKi8KKwl7MHhhNCwgMHg1MH0sCisJezB4YTUsIDB4Njh9LAkvKiBjb20yNiAqLworCXsweGE2LCAweDRhfSwKKwl7MHhhOCwgMHhjMX0sCS8qIGFjb21hOCAqLworCXsweGE5LCAweGVmfSwJLyogYWNvbWE5ICovCisJezB4YWEsIDB4OTJ9LAorCXsweGFiLCAweDA0fSwKKwl7MHhhYywgMHg4MH0sCisJezB4YWQsIDB4ODB9LAorCXsweGFlLCAweDgwfSwKKwl7MHhhZiwgMHg4MH0sCisJezB4YjIsIDB4ZjJ9LAorCXsweGIzLCAweDIwfSwKKwl7MHhiNCwgMHgyMH0sCisJezB4YjUsIDB4MDB9LAorCXsweGI2LCAweGFmfSwKKwl7MHhiYiwgMHhhZX0sCisJezB4YmMsIDB4N2Z9LAorCXsweGRiLCAweDdmfSwKKwl7MHhiZSwgMHg3Zn0sCisJezB4YmYsIDB4N2Z9LAorCXsweGMwLCAweGUyfSwKKwl7MHhjMSwgMHhjMH0sCisJezB4YzIsIDB4MDF9LAorCXsweGMzLCAweDRlfSwKKwl7MHhjNiwgMHg4NX0sCisJezB4YzcsIDB4ODB9LAorCXsweGM5LCAweGUwfSwKKwl7MHhjYSwgMHhlOH0sCisJezB4Y2IsIDB4ZjB9LAorCXsweGNjLCAweGQ4fSwKKwl7MHhjZCwgMHhmMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4YzUsIDB4MDN9LAorCXsweDZhLCAweDAyfSwKKworCXsweDEyLCAweDYyfSwJLyogY29tNyAtIFZHQSArIENJRiAqLworCXsweDM2LCAweGZhfSwJLyogcnN2ZDM2ICovCisJezB4NjksIDB4MGF9LAkvKiBodiAqLworCXsweDhjLCAweDg5fSwJLyogY29tMjIgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgzZSwgMHgwY30sCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDcyLCAweDAwfSwKKwl7MHg3MywgMHgwMH0sCisJezB4NzQsIDB4M2F9LAorCXsweDc1LCAweDM1fSwKKwl7MHg3NiwgMHgwMX0sCisJezB4YzcsIDB4ODB9LAorCXsweDAzLCAweDEyfSwJLyogdnJlZiAqLworCXsweDE3LCAweDE2fSwJLyogaHN0YXJ0ICovCisJezB4MTgsIDB4MDJ9LAkvKiBoc3RvcCAqLworCXsweDE5LCAweDAxfSwJLyogdnN0cnQgKi8KKwl7MHgxYSwgMHgzZH0sCS8qIHZzdG9wICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4YzAsIDB4YWF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292OTY1eF8yW11bMl0gPSB7CisJezB4OTQsIDB4YWF9LAorCXsweGYxLCAweDYwfSwKKwl7MHhlNSwgMHgwNH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHg4YywgMHgwMH0sCisJezB4OGQsIDB4MWN9LAorCXsweDM0LCAweDA1fSwKKworCXsweGMyLCAweDBjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4ZGEsIDB4MDF9LAorCXsweDUwLCAweDAwfSwKKwl7MHg1MSwgMHhhMH0sCisJezB4NTIsIDB4M2N9LAorCXsweDUzLCAweDAwfSwKKwl7MHg1NCwgMHgwMH0sCisJezB4NTUsIDB4MDB9LAorCXsweDU3LCAweDAwfSwKKwl7MHg1YywgMHgwMH0sCisJezB4NWEsIDB4YTB9LAorCXsweDViLCAweDc4fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDk0LCAweDExfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdF9vdjk2NXhfMltdWzJdID0geworCXsweDNiLCAweGM0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgxMywgMHhlN30sCS8qIGNvbTggLSBldmVyeXRoaW5nIChBR0MsIEFXQiBhbmQgQUVDKSAqLworCXsweDExLCAweDAzfSwJLyogY2xrcmMgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRibHYgKi8KKwl7MHg2YSwgMHgwNX0sCisJezB4YzUsIDB4MDd9LAorCXsweGEyLCAweDRifSwKKwl7MHhhMywgMHgzZX0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMH0sCisJezB4MmQsIDB4MDB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4M2YsIDB4MDF9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweGZmLCAweDQxfSwJLyogcmVhZCA0MSwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NTYsIDB4NDB9LAorCXsweDU1LCAweDhmfSwKKwl7MHgxMCwgMHgyNX0sCS8qIGFlY2ggLSBleHBvc3VyZSBoaWdoIGJpdHMgKi8KKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2Vfc3RhcnRfb3Y5NjV4W11bMl0gPSB7CisJezB4YzIsIDB4NGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDc4fSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweDI4fSwKKwl7MHg1YiwgMHgxZX0sCisJezB4MzUsIDB4MDB9LAorCXsweGQ5LCAweDIxfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX3N0YXJ0X292OTY1eFtdWzJdID0geworCXsweDNiLCAweGU0fSwKKwl7MHgxZSwgMHgwNH0sCS8qIG12ZnAgKi8KKwl7MHgxMywgMHhlMH0sCS8qIGNvbTggKi8KKwl7MHgwMCwgMHgwMH0sCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwMX0sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDJ9LAorCXsweGM1LCAweDAzfSwKKwl7MHhhMiwgMHg5Nn0sCisJezB4YTMsIDB4N2R9LAorCXsweGZmLCAweDEzfSwJLyogcmVhZCAxMywgd3JpdGUgZmYgMDAgKi8KKwl7MHgxMywgMHhlN30sCisJezB4M2EsIDB4ODB9LAorCXsweGZmLCAweDQyfSwJLyogcmVhZCA0Miwgd3JpdGUgZmYgMDAgKi8KKwl7MHg0MiwgMHhjMX0sCit9OworCisKK3N0YXRpYyB2b2lkIG92NTM0X3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXQ7CisKKwlQREVCVUcoRF9VU0JPLCAicmVnPTB4JTA0eCwgdmFsPTAlMDJ4IiwgcmVnLCB2YWwpOworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJUERFQlVHKERfRVJSLCAid3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB1OCBvdjUzNF9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAweDAwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKKwlQREVCVUcoRF9VU0JJLCAicmVnPTB4JTA0eCwgZGF0YT0weCUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlYWQgZmFpbGVkIik7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKK30KKworLyogVHdvIGJpdHMgY29udHJvbCBMRUQ6IDB4MjEgYml0IDcgYW5kIDB4MjMgYml0IDcuCisgKiAoZGlyZWN0aW9uIGFuZCBvdXRwdXQpPyAqLworc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2xlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzdGF0dXMpCit7CisJdTggZGF0YTsKKworCVBERUJVRyhEX0NPTkYsICJsZWQgc3RhdHVzOiAlZCIsIHN0YXR1cyk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwlkYXRhIHw9IDB4ODA7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisKKwlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIzKTsKKwlpZiAoc3RhdHVzKQorCQlkYXRhIHw9IDB4ODA7CisJZWxzZQorCQlkYXRhICY9IH4weDgwOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMywgZGF0YSk7CisKKwlpZiAoIXN0YXR1cykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKKwkJZGF0YSAmPSB+MHg4MDsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7CisJfQorfQorCitzdGF0aWMgaW50IHNjY2JfY2hlY2tfc3RhdHVzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1OCBkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1RBVFVTKTsKKworCQlzd2l0Y2ggKGRhdGEpIHsKKwkJY2FzZSAweDAwOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwNDoKKwkJCXJldHVybiAwOworCQljYXNlIDB4MDM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBERUJVRyhEX0VSUiwgInNjY2Igc3RhdHVzIDB4JTAyeCwgYXR0ZW1wdCAlZC81IiwKKwkJCSAgICAgICBkYXRhLCBpICsgMSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNjY2JfcmVnX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCit7CisJUERFQlVHKERfVVNCTywgInJlZzogMHglMDJ4LCB2YWw6IDB4JTAyeCIsIHJlZywgdmFsKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfU1VCQUREUiwgcmVnKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfV1JJVEUsIHZhbCk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMyk7CisKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3dyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdTggc2NjYl9yZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcpCit7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfV1JJVEVfMik7CisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ19yZWFkIGZhaWxlZCAxIik7CisKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9SRUFEXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMiIpOworCisJcmV0dXJuIG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1JFQUQpOworfQorCisvKiBvdXRwdXQgYSBicmlkZ2Ugc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgKCpkYXRhKVswXSwgKCpkYXRhKVsxXSk7CisJCWRhdGErKzsKKwl9Cit9CisKKy8qIG91dHB1dCBhIHNlbnNvciBzZXF1ZW5jZSAocmVnIC0gdmFsKSAqLworc3RhdGljIHZvaWQgc2NjYl93X2FycmF5KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCWNvbnN0IHU4ICgqZGF0YSlbMl0sIGludCBsZW4pCit7CisJd2hpbGUgKC0tbGVuID49IDApIHsKKwkJaWYgKCgqZGF0YSlbMF0gIT0gMHhmZikgeworCQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAoKmRhdGEpWzBdLCAoKmRhdGEpWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAoKmRhdGEpWzFdKTsKKwkJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhmZiwgMHgwMCk7CisJCX0KKwkJZGF0YSsrOworCX0KK30KKwogLyogc2V0IGZyYW1lcmF0ZSAqLwogc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2ZyYW1lX3JhdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewpAQCAtMzQ2LDQwICs2OTQsMTcgQEAKIAlQREVCVUcoRF9QUk9CRSwgImZyYW1lX3JhdGU6ICVkIiwgZnIpOwogfQogCi0vKiBzZXR1cCBtZXRob2QgKi8KLXN0YXRpYyB2b2lkIG92NTM0X3NldHVwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlpbnQgaTsKLQotCS8qIEluaXRpYWxpemUgYnJpZGdlIGNoaXAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjUzNF9yZWdfaW5pdGRhdGEpOyBpKyspCi0JCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIG92NTM0X3JlZ19pbml0ZGF0YVtpXVswXSwKLQkJCQlvdjUzNF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0JUERFQlVHKERfUFJPQkUsICJzZW5zb3IgaXMgb3YlMDJ4JTAyeCIsCi0JCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKSwKLQkJc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGIpKTsKLQotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQotCS8qIEluaXRpYWxpemUgc2Vuc29yICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X3JlZ19pbml0ZGF0YSk7IGkrKykKLQkJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBvdjc3MnhfcmVnX2luaXRkYXRhW2ldWzBdLAotCQkJICAgICAgIG92NzcyeF9yZWdfaW5pdGRhdGFbaV1bMV0pOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOwotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAKKwlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOworCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCi0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0zOTIsMjYgKzcxNywxMDIgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlvdjUzNF9zZXR1cChnc3BjYV9kZXYpOwotCW92NTM0X3NldF9mcmFtZV9yYXRlKGdzcGNhX2Rldik7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXUxNiBzZW5zb3JfaWQ7CisJc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9hZGRyWzJdID0geworCQkweDQyLAkJCS8qIDAgU0VOU09SX09WNzcyWCAqLworCQkweDYwLAkJCS8qIDEgU0VOU09SX09WOTY1WCAqLworCX07CisKKwkvKiByZXNldCBicmlkZ2UgKi8KKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGU3LCAweDNhKTsKKwlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA4KTsKKwltc2xlZXAoMTAwKTsKKworCS8qIGluaXRpYWxpemUgdGhlIHNlbnNvciBhZGRyZXNzICovCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX0FERFJFU1MsCisJCQkJc2Vuc29yX2FkZHJbc2QtPnNlbnNvcl0pOworCisJLyogcmVzZXQgc2Vuc29yICovCisJc2NjYl9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwKTsKKwltc2xlZXAoMTApOworCisJLyogcHJvYmUgdGhlIHNlbnNvciAqLworCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBhKTsKKwlzZW5zb3JfaWQgPSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJc2Vuc29yX2lkIHw9IHNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKKwlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBJRDogJTA0eCIsIHNlbnNvcl9pZCk7CisKKwkvKiBpbml0aWFsaXplICovCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT1Y3NzJYOgorCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292NzIyeCkpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292NzIyeCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292NzIyeCkpOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDA5KTsKKwkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCQlvdjUzNF9zZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9pbml0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eCkpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjk2NXgpKTsKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXhfMiwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9pbml0X292OTY1eF8yKSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9pbml0X292OTY1eF8yLAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4XzIpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdGFydCBzdHJlYW1pbmcgZGF0YSAqLwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc3Mlg6CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjk2NVg6ICovCisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKGJyaWRnZV9zdGFydF9vdjk2NXgpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX3N0YXJ0X292OTY1eCwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9zdGFydF9vdjk2NXgpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAxKTsKKy8qZml4bWU6IG90aGVyIHNlbnNvciBzdGFydCBvbWl0dGVkKi8KKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQkvKiBzdG9wIHN0cmVhbWluZyBkYXRhICovCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7Ci0Jb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzcyWDoKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX09WOTY1WDogKi8KKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJCWJyZWFrOworCX0KIH0KIAogLyogVmFsdWVzIGZvciBibUhlYWRlckluZm8gKFZpZGVvIGFuZCBTdGlsbCBJbWFnZSBQYXlsb2FkIEhlYWRlcnMsIDIuNC4zLjMpICovCkBAIC00MjksNzUgKzgzMCw3NSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlfX3UzMiB0aGlzX3B0czsKLQlpbnQgdGhpc19maWQ7CisJdTE2IHRoaXNfZmlkOwogCWludCByZW1haW5pbmdfbGVuID0gbGVuOwotCV9fdTggKm5leHRfZGF0YSA9IGRhdGE7CiAKLXNjYW5fbmV4dDoKLQlpZiAocmVtYWluaW5nX2xlbiA8PSAwKQotCQlyZXR1cm47CisJZG8geworCQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0MCk7CQkvKmZpeG1lOiB3YXMgMjA0OCovCiAKLQlkYXRhID0gbmV4dF9kYXRhOwotCWxlbiA9IG1pbihyZW1haW5pbmdfbGVuLCAyMDQ4KTsKLQlyZW1haW5pbmdfbGVuIC09IGxlbjsKLQluZXh0X2RhdGEgKz0gbGVuOworCQkvKiBQYXlsb2FkcyBhcmUgcHJlZml4ZWQgd2l0aCBhIFVWQy1zdHlsZSBoZWFkZXIuICBXZQorCQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCisJCSAgIGNoYW5nZXMuICBBIGZyYW1lIGVuZHMgd2hlbiBFT0YgaXMgc2V0LCBhbmQgd2UndmUgcmVjZWl2ZWQKKwkJICAgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzLiAqLwogCi0JLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKLQkgICBjb25zaWRlciBhIGZyYW1lIHRvIHN0YXJ0IHdoZW4gdGhlIEZJRCB0b2dnbGVzLCBvciB0aGUgUFRTCi0JICAgY2hhbmdlcy4gIEEgZnJhbWUgZW5kcyB3aGVuIEVPRiBpcyBzZXQsIGFuZCB3ZSd2ZSByZWNlaXZlZAotCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KLQotCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KLQlpZiAoZGF0YVswXSAhPSAxMiB8fCBsZW4gPCAxMikgewotCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogQ2hlY2sgZXJyb3JzICovCi0JaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VSUikgewotCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCi0JLyogRXh0cmFjdCBQVFMgYW5kIEZJRCAqLwotCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKLQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOwotCQlnb3RvIGRpc2NhcmQ7Ci0JfQotCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpIHwgKGRhdGFbM10gPDwgOCkgfCBkYXRhWzJdOwotCXRoaXNfZmlkID0gKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRCkgPyAxIDogMDsKLQotCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLwotCWlmICh0aGlzX3B0cyAhPSBzZC0+bGFzdF9wdHMgfHwgdGhpc19maWQgIT0gc2QtPmxhc3RfZmlkKSB7Ci0JCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKLQkJc2QtPmxhc3RfZmlkID0gdGhpc19maWQ7Ci0JfQotCi0JLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKLQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKLQotCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KLQlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRU9GKSB7Ci0JCXNkLT5sYXN0X3B0cyA9IDA7Ci0KLQkJaWYgKChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSkgIT0KLQkJICAgIChnc3BjYV9kZXYtPndpZHRoICogZ3NwY2FfZGV2LT5oZWlnaHQgKiAyKSkgewotCQkJUERFQlVHKERfUEFDSywgInNob3J0IGZyYW1lIik7CisJCS8qIFZlcmlmeSBVVkMgaGVhZGVyLiAgSGVhZGVyIGxlbmd0aCBpcyBhbHdheXMgMTIgKi8KKwkJaWYgKGRhdGFbMF0gIT0gMTIgfHwgbGVuIDwgMTIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJiYWQgaGVhZGVyIik7CiAJCQlnb3RvIGRpc2NhcmQ7CiAJCX0KIAotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIE5VTEwsIDApOwotCX0KKwkJLyogQ2hlY2sgZXJyb3JzICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJwYXlsb2FkIGVycm9yIik7CisJCQlnb3RvIGRpc2NhcmQ7CisJCX0KIAotCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCi0JZ290byBzY2FuX25leHQ7CisJCS8qIEV4dHJhY3QgUFRTIGFuZCBGSUQgKi8KKwkJaWYgKCEoZGF0YVsxXSAmIFVWQ19TVFJFQU1fUFRTKSkgeworCQkJUERFQlVHKERfUEFDSywgIlBUUyBub3QgcHJlc2VudCIpOworCQkJZ290byBkaXNjYXJkOworCQl9CisJCXRoaXNfcHRzID0gKGRhdGFbNV0gPDwgMjQpIHwgKGRhdGFbNF0gPDwgMTYpCisJCQkJCQl8IChkYXRhWzNdIDw8IDgpIHwgZGF0YVsyXTsKKwkJdGhpc19maWQgPSAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRklEKSA/IDEgOiAwOworCisJCS8qIElmIFBUUyBvciBGSUQgaGFzIGNoYW5nZWQsIHN0YXJ0IGEgbmV3IGZyYW1lLiAqLworCQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCQkJTlVMTCwgMCk7CisJCQlzZC0+bGFzdF9wdHMgPSB0aGlzX3B0czsKKwkJCXNkLT5sYXN0X2ZpZCA9IHRoaXNfZmlkOworCQl9CisKKwkJLyogQWRkIHRoZSBkYXRhIGZyb20gdGhpcyBwYXlsb2FkICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEgKyAxMiwgbGVuIC0gMTIpOworCisJCS8qIElmIHRoaXMgcGFja2V0IGlzIG1hcmtlZCBhcyBFT0YsIGVuZCB0aGUgZnJhbWUgKi8KKwkJaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VPRikgeworCQkJc2QtPmxhc3RfcHRzID0gMDsKKworCQkJaWYgKGZyYW1lLT5kYXRhX2VuZCAtIGZyYW1lLT5kYXRhICE9CisJCQkgICAgZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikgeworCQkJCVBERUJVRyhEX1BBQ0ssICJzaG9ydCBmcmFtZSIpOworCQkJCWdvdG8gZGlzY2FyZDsKKwkJCX0KKworCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCQlOVUxMLCAwKTsKKwkJfQorCisJCS8qIERvbmUgdGhpcyBwYXlsb2FkICovCisJCWdvdG8gc2Nhbl9uZXh0OwogCiBkaXNjYXJkOgotCS8qIERpc2NhcmQgZGF0YSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuICovCi0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKLQlnb3RvIHNjYW5fbmV4dDsKKwkJLyogRGlzY2FyZCBkYXRhIHVudGlsIGEgbmV3IGZyYW1lIHN0YXJ0cy4gKi8KKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKKworc2Nhbl9uZXh0OgorCQlyZW1haW5pbmdfbGVuIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJfSB3aGlsZSAocmVtYWluaW5nX2xlbiA+IDApOwogfQogCiAvKiBnZXQgc3RyZWFtIHBhcmFtZXRlcnMgKGZyYW1lcmF0ZSkgKi8KQEAgLTU1Niw5ICs5NTcsOCBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAyKX0sCS8qIEhlcmN1bGVzIEJsb2cgV2ViY2FtICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDMpfSwJLyogSGVyY3VsZXMgRHVhbHBpeCBIRCBXZWJsb2cgKi8KLQl7VVNCX0RFVklDRSgweDE0MTUsIDB4MjAwMCl9LAkvKiBTb255IEhEIEV5ZSBmb3IgUFMzIChTTEVIIDAwMjAxKSAqLworCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX09WOTY1WH0sCisJe1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfT1Y3NzJYfSwKIAl7fQogfTsKIApAQCAtNTg1LDggKzk4NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKaW5kZXggYzkwYWM4NS4uOTVhOTdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCkBAIC0yNTYsNyArMjU2LDYgQEAKIAkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCXNkLT5icmlnaHRuZXNzID0gUEFDMjA3X0JSSUdIVE5FU1NfREVGQVVMVDsKQEAgLTUzNiw2ICs1MzUsNyBAQAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcwKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzEpfSwKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3Mil9LAorCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDc0KX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzYpfSwKIAl7VVNCX0RFVklDRSgweDE0NWYsIDB4MDEzYSl9LAogCXtVU0JfREVWSUNFKDB4MjAwMSwgMHhmMTE1KX0sCkBAIC01NjUsOCArNTY1LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCmluZGV4IGE5Yzk1Y2IuLmUxZTNhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjNzMxMS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDA1OwogCiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFDNzMwMikgewpAQCAtMTA5Nyw4ICsxMDk2LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYwppbmRleCBiM2U0ZTA2Li4xNTNkMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKQEAgLTg3MCw3ICs4NzAsNiBAQAogCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5jdHJsX2RpczsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJaWYgKCEoc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZmxhZ3MgJiBGX1NJRikpIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwpAQCAtMTI3Miw4ICsxMjcxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCAzMzczYjhkLi5jNzJlMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTM1LDM2ICszNSw0NyBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlhdG9taWNfdCBhdmdfbHVtOwotCXVuc2lnbmVkIGludCBleHBvc3VyZTsKKwl1MzIgZXhwb3N1cmU7CiAKLQlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTggY29udHJhc3Q7Ci0JX191OCBjb2xvcnM7Ci0JX191OCBhdXRvZ2FpbjsKLQlfX3U4IGJsdWU7Ci0JX191OCByZWQ7Ci0JX191OCB2ZmxpcDsJCQkvKiBvdjc2MzAgb25seSAqLwotCV9fdTggaW5mcmFyZWQ7CQkJLyogbWkwMzYwIG9ubHkgKi8KKwl1MTYgYnJpZ2h0bmVzczsKKwl1OCBjb250cmFzdDsKKwl1OCBjb2xvcnM7CisJdTggYXV0b2dhaW47CisJdTggYmx1ZTsKKwl1OCByZWQ7CisJdTggZ2FtbWE7CisJdTggdmZsaXA7CQkJLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCisJdTggaW5mcmFyZWQ7CQkJLyogbXQ5djExMSBvbmx5ICovCisJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCisjZGVmaW5lIFFVQUxJVFlfTUlOIDYwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDgwCisJdTgganBlZ3F1YWw7CQkJLyogd2ViY2FtIHF1YWxpdHkgKi8KIAotCV9fczggYWdfY250OworCXU4IHJlZzE4OworCisJczggYWdfY250OwogI2RlZmluZSBBR19DTlRfU1RBUlQgMTMKIAotCV9fdTggcWluZGV4OwotCV9fdTggYnJpZGdlOworCXU4IGJyaWRnZTsKICNkZWZpbmUgQlJJREdFX1NOOUMxMDJQIDAKICNkZWZpbmUgQlJJREdFX1NOOUMxMDUgMQogI2RlZmluZSBCUklER0VfU045QzExMCAyCiAjZGVmaW5lIEJSSURHRV9TTjlDMTIwIDMKICNkZWZpbmUgQlJJREdFX1NOOUMzMjUgNAotCV9fdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KKwl1OCBzZW5zb3I7CQkJLyogVHlwZSBvZiBpbWFnZSBzZW5zb3IgY2hpcCAqLwogI2RlZmluZSBTRU5TT1JfSFY3MTMxUiAwCiAjZGVmaW5lIFNFTlNPUl9NSTAzNjAgMQogI2RlZmluZSBTRU5TT1JfTU80MDAwIDIKLSNkZWZpbmUgU0VOU09SX09NNjgwMiAzCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzAgNAotI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDUKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA2Ci0JX191OCBpMmNfYmFzZTsKKyNkZWZpbmUgU0VOU09SX01UOVYxMTEgMworI2RlZmluZSBTRU5TT1JfT002ODAyIDQKKyNkZWZpbmUgU0VOU09SX09WNzYzMCA1CisjZGVmaW5lIFNFTlNPUl9PVjc2NDggNgorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDcKKyNkZWZpbmUgU0VOU09SX1NQODA3MDggOAorCXU4IGkyY19iYXNlOworCisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNzgsNiArODksOCBAQAogc3RhdGljIGludCBzZF9nZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRyZWRfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIHN0YXRpYyBpbnQgc2Rfc2V0dmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtMTU4LDYgKzE3MSwyMCBAQAogCSAgICAuc2V0ID0gc2Rfc2V0cmVkX2JhbGFuY2UsCiAJICAgIC5nZXQgPSBzZF9nZXRyZWRfYmFsYW5jZSwKIAl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX0dBTU1BLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIkdhbW1hIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDQwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEdBTU1BX0RFRiAyMAorCQkuZGVmYXVsdF92YWx1ZSA9IEdBTU1BX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGdhbW1hLAorCSAgICAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCisJfSwKICNkZWZpbmUgQVVUT0dBSU5fSURYIDUKIAl7CiAJICAgIHsKQEAgLTE3Myw3ICsyMDAsNyBAQAogCSAgICAuc2V0ID0gc2Rfc2V0YXV0b2dhaW4sCiAJICAgIC5nZXQgPSBzZF9nZXRhdXRvZ2FpbiwKIAl9LAotLyogb3Y3NjMwIG9ubHkgKi8KKy8qIG92NzYzMC9vdjc2NDggb25seSAqLwogI2RlZmluZSBWRkxJUF9JRFggNgogCXsKIAkgICAgewpAQCAtMTgzLDEzICsyMTAsMTMgQEAKIAkJLm1pbmltdW0gPSAwLAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwICAgID0gMSwKLSNkZWZpbmUgVkZMSVBfREVGIDEKKyNkZWZpbmUgVkZMSVBfREVGIDAJCQkvKiB2ZmxpcCBkZWYgPSAxIGZvciBvdjc2MzAgKi8KIAkJLmRlZmF1bHRfdmFsdWUgPSBWRkxJUF9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXR2ZmxpcCwKIAkgICAgLmdldCA9IHNkX2dldHZmbGlwLAogCX0sCi0vKiBtaTAzNjAgb25seSAqLworLyogbXQ5djExMSBvbmx5ICovCiAjZGVmaW5lIElORlJBUkVEX0lEWCA3CiAJewogCSAgICB7CkBAIC0yMTEsMTggKzIzOCwyMiBAQAogc3RhdGljIF9fdTMyIGN0cmxfZGlzW10gPSB7CiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCiAJCQkJCQkvKiBTRU5TT1JfSFY3MTMxUiAwICovCi0JKDEgPDwgVkZMSVBfSURYKSwKKwkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKIAkJCQkJCS8qIFNFTlNPUl9NSTAzNjAgMSAqLwogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAogCQkJCQkJLyogU0VOU09SX01PNDAwMCAyICovCisJKDEgPDwgVkZMSVBfSURYKSwKKwkJCQkJCS8qIFNFTlNPUl9NVDlWMTExIDMgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgMyAqLworCQkJCQkJLyogU0VOU09SX09NNjgwMiA0ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDQgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2MzAgNSAqLworCSgxIDw8IElORlJBUkVEX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDYgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjQ4IDUgKi8KKwkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNyAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKLQkJCQkJCS8qIFNFTlNPUl9PVjc2NjAgNiAqLworCQkJCQkJLyogU0VOU09SX1NQODA3MDggOCAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKQEAgLTI0MywxOTYgKzI3NCwyMjggQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLS8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMzFyICovCi1zdGF0aWMgY29uc3QgX191OCBzbl9odjcxMzFbXSA9IHsKKy8qRGF0YSBmcm9tIHNuOWMxMDJwK2h2NzEzMXIgKi8KK3N0YXRpYyBjb25zdCB1OCBzbl9odjcxMzFbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDAzLAkweDY0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgxMSwJMHgwMiwJMHgwOSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMywJMHgyOCwJMHgxZSwJMHg0MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBhLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9taTAzNjBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9taTAzNjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQ0LAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhiMSwJMHg1ZCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMiwJMHgwYSwJMHgyOCwJMHgxZSwJMHg2MSwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA2LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9tbzQwMDBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tbzQwMDBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KLQkweDEyLAkweDIzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDIwLAkweDE4LAorCTB4MDAsCTB4MjMsCTB4NjAsCTB4MDAsCTB4MWEsCTB4MDAsCTB4MjAsCTB4MTgsCiAvKglyZWc4CXJlZzkJcmVnYQlyZWdiCXJlZ2MJcmVnZAlyZWdlCXJlZ2YgKi8KIAkweDgxLAkweDIxLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAogLyoJcmVnMTAJcmVnMTEJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcgKi8KIAkweDAzLAkgMHgwMCwJMHgwYiwJMHgwZiwJMHgxNCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwOCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA4LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vbTY4MDJbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9tdDl2MTExWzB4MWNdID0geworLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCisJMHgwMCwJMHg2MSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKKy8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLworCTB4ODEsCTB4NWMsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLworCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDIsCTB4MWMsCTB4MjgsCTB4MWUsCTB4NDAsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDYsCTB4MDAsCTB4MDAsCTB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBzbl9vbTY4MDJbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIzLAkweDcyLAkweDAwLAkweDFhLAkweDM0LAkweDI3LAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MCwJMHgzNCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHg1MSwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHg0MCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKLQkweDA4LAkweDIyLAkweDQ0LAkweDYzLAkweDdkLAkweDkyLAkweGEzLAkweGFmLAotCTB4YmMsCTB4YzQsCTB4Y2QsCTB4ZDUsCTB4ZGMsCTB4ZTEsCTB4ZTgsCTB4ZWYsCi0JMHhmNworLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA1LAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2MzBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2MzBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDIxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDFmLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHhhMSwJMHgyMSwJMHg3NiwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwNCwJMHgwMSwJMHgwYSwJMHgyOCwJMHgxZSwJMHhjMiwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NDhbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NDhbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYzLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMCwJMHgwMSwJMHgwMCwJMHgyOCwJMHgxZSwJMHgwMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwYiwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDBiLAkweDAwLAkweDAwLAkweDAwCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBzbl9vdjc2NjBbXQk9IHsKK3N0YXRpYyBjb25zdCB1OCBzbl9vdjc2NjBbMHgxY10gPSB7CiAvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KIAkweDAwLAkweDYxLAkweDQwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgxMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJMHgwMCwJMHgwMSwJMHgwMSwJMHgwOCwJMHgyOCwJMHgxZSwJMHgyMCwKLS8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiCXJlZzFjCXJlZzFkCXJlZzFlCXJlZzFmICovCi0JMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNuX3NwODA3MDhbMHgxY10gPSB7CisvKglyZWcwCXJlZzEJcmVnMglyZWczCXJlZzQJcmVnNQlyZWc2CXJlZzcgKi8KKwkweDAwLAkweDYzLAkweDYwLAkweDAwLAkweDFhLAkweDIwLAkweDIwLAkweDIwLAorLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCisJMHg4MSwJMHgxOCwJMHgwNywJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKKy8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCisJMHgwMywJMHgwMCwJMHgwMCwJMHgwMywJMHgwNCwJMHgyOCwJMHgxZSwJMHgwMCwKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNywJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAogLyogc2VxdWVuY2Ugc3BlY2lmaWMgdG8gdGhlIHNlbnNvcnMgLSAhISBpbmRleCA9IFNFTlNPUl94eHggKi8KLXN0YXRpYyBjb25zdCBfX3U4ICpzbl90YltdID0geworc3RhdGljIGNvbnN0IHU4ICpzbl90YltdID0gewogCXNuX2h2NzEzMSwKIAlzbl9taTAzNjAsCiAJc25fbW80MDAwLAorCXNuX210OXYxMTEsCiAJc25fb202ODAyLAogCXNuX292NzYzMCwKIAlzbl9vdjc2NDgsCi0Jc25fb3Y3NjYwCisJc25fb3Y3NjYwLAorCXNuX3NwODA3MDgKIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX2RlZltdID0geworLyogZGVmYXVsdCBnYW1tYSB0YWJsZSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX2RlZlsxN10gPSB7CiAJMHgwMCwgMHgyZCwgMHg0NiwgMHg1YSwgMHg2YywgMHg3YywgMHg4YiwgMHg5OSwKIAkweGE2LCAweGIyLCAweGJmLCAweGNhLCAweGQ1LCAweGUwLCAweGViLCAweGY1LCAweGZmCiB9OworLyogZ2FtbWEgZm9yIHNlbnNvcnMgSFY3MTMxUiBhbmQgTVQ5VjExMSAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMVsxN10gPSB7CisJMHgwOCwgMHgzYSwgMHg1MiwgMHg2NSwgMHg3NSwgMHg4MywgMHg5MSwgMHg5ZCwKKwkweGE5LCAweGI0LCAweGJlLCAweGM4LCAweGQyLCAweGRiLCAweGU0LCAweGVkLCAweGY1Cit9OworLyogZ2FtbWEgZm9yIHNlbnNvciBTUDgwNzA4ICovCitzdGF0aWMgY29uc3QgdTggZ2FtbWFfc3BlY18yWzE3XSA9IHsKKwkweDBhLCAweDJkLCAweDRlLCAweDY4LCAweDdkLCAweDhmLCAweDlmLCAweGFiLAorCTB4YjcsIDB4YzIsIDB4Y2MsIDB4ZDMsIDB4ZDgsIDB4ZGUsIDB4ZTIsIDB4ZTUsIDB4ZTYKK307CiAKIC8qIGNvbG9yIG1hdHJpeCBhbmQgb2Zmc2V0cyAqLwotc3RhdGljIGNvbnN0IF9fdTggcmVnODRbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCByZWc4NFtdID0gewogCTB4MTQsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDcsIDB4MDAsCS8qIFlSIFlHIFlCIGdhaW5zICovCiAJMHhlOCwgMHgwZiwgMHhkYSwgMHgwZiwgMHg0MCwgMHgwMCwJLyogVVIgVUcgVUIgKi8KIAkweDNlLCAweDAwLCAweGNkLCAweDBmLCAweGY3LCAweDBmLAkvKiBWUiBWRyBWQiAqLwogCTB4MDAsIDB4MDAsIDB4MDAJCQkvKiBZVVYgb2Zmc2V0cyAqLwogfTsKLXN0YXRpYyBjb25zdCBfX3U4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKLQl7MHhDMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N0YsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDQwLCAweEZGLCAweDdGLCAweDdGLCAweDdGLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4MTEsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDE0LCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggaHY3MTMxcl9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGMxLCAweDExLCAweDAxLCAweDA4LCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgxMSwgMHgzNCwgMHgxNywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MTEsIDB4NDAsIDB4ZmYsIDB4N2YsIDB4N2YsIDB4N2YsIDB4MTB9LAorLyoJezB4OTEsIDB4MTEsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqLworCXsweGQxLCAweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHgxMSwgMHgxNCwgMHgwMSwgMHhlMiwgMHgwMiwgMHg4MiwgMHgxMH0sCisvKgl7MHg5MSwgMHgxMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICovCiAKLQl7MHhBMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweDYxLCAweEE4LCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QzEsIDB4MTEsIDB4MzEsIDB4MjAsIDB4MkUsIDB4MjAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDI1LCAweDAwLCAweEMzLCAweDUwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgzMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdhaW4xNCAqLwotCXsweEMxLCAweDExLCAweDMxLCAweDEwLCAweDEwLCAweDEwLCAweDAwLCAweDEwfSwgLyogciBnIGIgMTAxYTEwICovCisJezB4YTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHg2MSwgMHhhOCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGMxLCAweDExLCAweDMxLCAweDIwLCAweDJlLCAweDIwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHhjMywgMHg1MCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBnYWluMTQgKi8KKwl7MHhjMSwgMHgxMSwgMHgzMSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgwMCwgMHgxMH0sIC8qIHIgZyBiIDEwMWExMCAqLwogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweEQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIxLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7Ci0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDBELCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwRCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDAzLCAweDAxLCAweEUyLCAweDAyLCAweDgyLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MEQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDBBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MEUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDFDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDJGLCAweEY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDNELCAweDA2LCAweDhGLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg0MCwgMHgwMSwgMHhFMCwgMHgwMCwgMHhEMSwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg1QSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4NUMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDVFLCAweDAwLCAweDAwLCAweEEzLCAweDFELCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCitzdGF0aWMgY29uc3QgdTggbWkwMzYwX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDBkLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MTYsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDAzLCAweDAxLCAweGUyLCAweDAyLCAweDgyLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwNSwgMHgwMCwgMHgwOSwgMHgwMCwgMHg1MywgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MGQsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJmLCAweGY3LCAweEIwLCAweDAwLCAweDA0LCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDNkLCAweDA2LCAweDhmLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg0MCwgMHgwMSwgMHhlMCwgMHgwMCwgMHhkMSwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4NDQsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDU4LCAweDAwLCAweDc4LCAweDAwLCAweDQzLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4NWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDVlLCAweDAwLCAweDAwLCAweGEzLCAweDFkLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHg2MiwgMHgwNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgyMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MjAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA5LCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyQiwgMHgwMCwgMHhBMCwgMHgwMCwgMHhCMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MkQsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QTAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgyMCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MDksIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJiLCAweDAwLCAweGEwLCAweDAwLCAweGIwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyZCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgxMH0sCiAKLQl7MHhCMSwgMHg1RCwgMHgwQSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCi0JezB4QjEsIDB4NUQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDA1LCAweDAwLCAweDBBLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KKwl7MHhiMSwgMHg1ZCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBjbGNrID8yICovCisJezB4YjEsIDB4NWQsIDB4MDYsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDA1LCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwOSwgMHgwMiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGV4cG9zdXJlIDIgKi8KIAotCXsweEQxLCAweDVELCAweDJCLCAweDAwLCAweEI5LCAweDAwLCAweEUzLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyRCwgMHgwMCwgMHg1ZiwgMHgwMCwgMHhCOSwgMHgxMH0sIC8qIDQyICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHg2NywgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiBvcmlnICovCi0vKgl7MHhCMSwgMHg1RCwgMHgzNSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMH0sICogZ2FpbiAqLwotCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwfSwgLyogdXBkYXRlICovCi0JezB4QjEsIDB4NUQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzZW5zb3Igb24gKi8KKwl7MHhkMSwgMHg1ZCwgMHgyYiwgMHgwMCwgMHhiOSwgMHgwMCwgMHhlMywgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MmQsIDB4MDAsIDB4NWYsIDB4MDAsIDB4YjksIDB4MTB9LCAvKiA0MiAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gb3JpZyAqLworLyoJezB4YjEsIDB4NWQsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gKi8KKwl7MHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHVwZGF0ZSAqLworCXsweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIG9uICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtbzQwMDBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHgwMSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTQ1NSw3ICs1MTgsNDkgQEAKIAl7MHhhMSwgMHgyMSwgMHgxMSwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJe30KIH07Ci1zdGF0aWMgX191OCBvbTY4MDJfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBtdDl2MTExX3NlbnNvcl9pbml0W11bOF0gPSB7CisJezB4YjEsIDB4NWMsIDB4MGQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZXNldD8gKi8KKwkvKiBkZWxheSAyMCBtcyAqLworCXsweGIxLCAweDVjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIElGUCBzZWxlY3QgKi8KKwl7MHhiMSwgMHg1YywgMHgwOCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIG91dHB1dCBmbXQgY3RybCAqLworCXsweGIxLCAweDVjLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3AgbW9kZSBjdHJsICovCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAzLCAweDAxLCAweGUxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4MSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIHNlbGVjdCAqLworCXsweGIxLCAweDVjLCAweDAyLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDQsIDB4MDIsIDB4ODYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDgsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByb3cgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwZSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDIsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBjb2wgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyBoZWlnaHQgKi8KKwl7MHhiMSwgMHg1YywgMHgwNCwgMHgwMiwgMHg4NywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHdpbmRvdyB3aWR0aCAqLworCXsweGIxLCAweDVjLCAweDA3LCAweDMwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogb3V0cHV0IGN0cmwgKi8KKwl7MHhiMSwgMHg1YywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNodXR0ZXIgZGVsYXkgKi8KKwl7MHhiMSwgMHg1YywgMHgxMiwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHpvb20gY29sIHN0YXJ0ICovCisJezB4YjEsIDB4NWMsIDB4MTMsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB6b29tIHJvdyBzdGFydCAqLworCXsweGIxLCAweDVjLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogZGlnaXRhbCB6b29tICovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiByZWFkIG1vZGUgKi8KKwl7MHhiMSwgMHg1YywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKiovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwOSwgMHgwMSwgMHgyYywgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWMsIDB4MmIsIDB4MDAsIDB4MzMsIDB4MDAsIDB4YTAsIDB4MTB9LCAvKiBncmVlbjEgZ2FpbiAqLworCXsweGQxLCAweDVjLCAweDJkLCAweDAwLCAweGEwLCAweDAwLCAweDMzLCAweDEwfSwgLyogcmVkIGdhaW4gKi8KKwkvKioqKioqKi8KKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHZlcnQgYmxhbmtpbmcgKi8KKwl7MHhiMSwgMHg1YywgMHgwNSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGhvcml6IGJsYW5raW5nICovCisJezB4ZDEsIDB4NWMsIDB4MmMsIDB4MDAsIDB4YWQsIDB4MDAsIDB4YWQsIDB4MTB9LCAvKiBibHVlIGdhaW4gKi8KKwl7MHhiMSwgMHg1YywgMHgzNSwgMHgwMSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGdsb2JhbCBnYWluICovCisJe30KK307CitzdGF0aWMgY29uc3QgdTggb202ODAyX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTAsIDB4MzQsIDB4OTAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGEwLCAweDM0LCAweDQ5LCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMCwgMHgzNCwgMHg1YSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC00ODksNyArNTk0LDcgQEAKIC8qCXsweGEwLCAweDM0LCAweDY5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzYzMF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDc2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHhjOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAvKiB3aW46IGRlbGF5IDIwbXMgKi8KQEAgLTU0Myw3ICs2NDgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2NDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHg3NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAkvKiByZXNldCAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTU3Miw3ICs2NzcsOCBAQAogCXsweGIxLCAweDIxLCAweDJkLCAweDg1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIC8qLi4uKi8KIC8qCXsweGExLCAweDIxLCAweDEyLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KLS8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KKy8qCXsweGExLCAweDIxLCAweDc1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgICAqIENPTU4KKwkJCQkJCQkgKiBzZXQgYnkgc2V0dmZsaXAgKi8KIAl7MHhhMSwgMHgyMSwgMHgxOSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLyoJezB4YTEsIDB4MjEsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCBqZm0gZG9uZSAqLwpAQCAtNTg5LDcgKzY5NSw3IEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IG92NzY2MF9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGExLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXQgU0NDQiAqLwogLyoJCShkZWxheSAyMG1zKSAqLwogCXsweGExLCAweDIxLCAweDEyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKQEAgLTY3OCwyOCArNzg0LDkyIEBACiAJe30KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHF0YWJsZTRbXSA9IHsKLQkweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA0LCAweDA0LCAweDA2LCAweDA2LCAweDA2LCAweDA2LCAweDA4LCAweDA2LAotCTB4MDYsIDB4MDgsIDB4MEEsIDB4MTEsCi0JMHgwQSwgMHgwQSwgMHgwOCwgMHgwOCwgMHgwQSwgMHgxNSwgMHgwRiwgMHgwRiwgMHgwQywgMHgxMSwgMHgxOSwgMHgxNSwKLQkweDE5LCAweDE5LCAweDE3LCAweDE1LAotCTB4MTcsIDB4MTcsIDB4MUIsIDB4MUQsIDB4MjUsIDB4MjEsIDB4MUIsIDB4MUQsIDB4MjMsIDB4MUQsIDB4MTcsIDB4MTcsCi0JMHgyMSwgMHgyRSwgMHgyMSwgMHgyMywKLQkweDI3LCAweDI5LCAweDJDLCAweDJDLCAweDJDLCAweDE5LCAweDFGLCAweDMwLCAweDMyLCAweDJFLCAweDI5LCAweDMyLAotCTB4MjUsIDB4MjksIDB4MkMsIDB4MjksCi0JMHgwNiwgMHgwOCwgMHgwOCwgMHgwQSwgMHgwOCwgMHgwQSwgMHgxMywgMHgwQSwgMHgwQSwgMHgxMywgMHgyOSwgMHgxQiwKLQkweDE3LCAweDFCLCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5CitzdGF0aWMgY29uc3QgdTggc3A4MDcwOF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGExLCAweDE4LCAweDA2LCAweGY5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwOSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxMSwgMHg0ZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTIsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDE1LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxOCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTksIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFhLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MWMsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFkLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxZSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDI3LCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyOCwgMHg1YSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjksIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJhLCAweDc4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmMsIDB4ZjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJkLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZSwgMHhkNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MzksIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNhLCAweDY3LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzYiwgMHg4NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2MsIDB4YTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzZSwgMHhiYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2YsIDB4YzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQwLCAweGQ0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0MSwgMHhkZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDIsIDB4ZWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQzLCAweGY1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDYsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQ3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDRkLCAweGFlLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0ZSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGYsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1MiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU0LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1NSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU3LCAweGUwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1OCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTksIDB4YWIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVhLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1YiwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWMsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVlLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDYxLCAweDczLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2MywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjQsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY1LCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZiwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJLyoqKioqKioqLworCXsweGExLCAweDE4LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDA0LCAweGE0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxNCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDE4LCAweDExLCAweDQwLCAweDQwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7fQogfTsKIAogLyogcmVhZCA8bGVuPiBieXRlcyB0byBnc3BjYV9kZXYtPnVzYl9idWYgKi8KIHN0YXRpYyB2b2lkIHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiB2YWx1ZSwgaW50IGxlbikKKwkJICB1MTYgdmFsdWUsIGludCBsZW4pCiB7CiAjaWZkZWYgR1NQQ0FfREVCVUcKIAlpZiAobGVuID4gVVNCX0JVRl9TWikgewpAQCAtNzE4LDEwICs4ODgsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgdmFsdWUsCi0JCSAgIF9fdTggZGF0YSkKKwkJICAgdTE2IHZhbHVlLAorCQkgICB1OCBkYXRhKQogewotCVBERUJVRyhEX1VTQk8sICJyZWdfdzEgWyUwMnhdID0gJTAyeCIsIHZhbHVlLCBkYXRhKTsKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cxIFslMDR4XSA9ICUwMngiLCB2YWx1ZSwgZGF0YSk7CiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gZGF0YTsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNzMzLDExICs5MDMsMTEgQEAKIAkJCTUwMCk7CiB9CiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkgIF9fdTE2IHZhbHVlLAotCQkJICBjb25zdCBfX3U4ICpidWZmZXIsCisJCQkgIHUxNiB2YWx1ZSwKKwkJCSAgY29uc3QgdTggKmJ1ZmZlciwKIAkJCSAgaW50IGxlbikKIHsKLQlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwMnhdID0gJTAyeCAlMDJ4IC4uIiwKKwlQREVCVUcoRF9VU0JPLCAicmVnX3cgWyUwNHhdID0gJTAyeCAlMDJ4IC4uIiwKIAkJdmFsdWUsIGJ1ZmZlclswXSwgYnVmZmVyWzFdKTsKICNpZmRlZiBHU1BDQV9ERUJVRwogCWlmIChsZW4gPiBVU0JfQlVGX1NaKSB7CkBAIC03NTYsNyArOTI2LDcgQEAKIH0KIAogLyogSTJDIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX191OCByZWcsIF9fdTggdmFsKQorc3RhdGljIHZvaWQgaTJjX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnLCB1OCB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCkBAIC03ODEsNyArOTUxLDcgQEAKIAogLyogSTJDIHdyaXRlIDggYnl0ZXMgKi8KIHN0YXRpYyB2b2lkIGkyY193OChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIGNvbnN0IF9fdTggKmJ1ZmZlcikKKwkJICAgY29uc3QgdTggKmJ1ZmZlcikKIHsKIAltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIDgpOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKQEAgLTc5NSwxMCArOTY1LDEwIEBACiB9CiAKIC8qIHJlYWQgNSBieXRlcyBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KLXN0YXRpYyB2b2lkIGkyY19yNShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTggcmVnKQorc3RhdGljIHZvaWQgaTJjX3I1KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTggcmVnKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IG1vZGVbOF07CisJdTggbW9kZVs4XTsKIAogCW1vZGVbMF0gPSAweDgxIHwgMHgxMDsKIAltb2RlWzFdID0gc2QtPmkyY19iYXNlOwpAQCAtODE3LDcgKzk4Nyw3IEBACiAJcmVnX3IoZ3NwY2FfZGV2LCAweDBhLCA1KTsKIH0KIAotc3RhdGljIGludCBwcm9iZXNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgaW50IGh2NzEzMXJfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCWkyY193MShnc3BjYV9kZXYsIDB4MDIsIDApOwkJCS8qIHNlbnNvciB3YWtldXAgKi8KIAltc2xlZXAoMTApOwpAQCAtODM5LDE2ICsxMDA5LDY2IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICBjb25zdCBfX3U4ICpzbjljMXh4KQorc3RhdGljIHZvaWQgbWkwMzYwX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JY29uc3QgX191OCAqcmVnOWE7Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnOWFfZGVmW10gPQorCWludCBpLCBqOworCXUxNiB2YWwgPSAwOworCXN0YXRpYyBjb25zdCB1OCBwcm9iZV90YltdWzRdWzhdID0geworCSAgICB7CQkJCQkvKiBtaTAzNjAgKi8KKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJezB4YjAsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9CisJICAgIH0sCisJICAgIHsJCQkJCS8qIG10OXYxMTEgKi8KKwkJezB4YjAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHg5MCwgMHg1YywgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGEyLCAweDVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwkJe30KKwkgICAgfSwKKwl9OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvYmVfdGIpOyBpKyspIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg2Mik7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4MDgpOworCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bal0pOworCQltc2xlZXAoMik7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwYSwgNSk7CisJCXZhbCA9IChnc3BjYV9kZXYtPnVzYl9idWZbM10gPDwgOCkgfCBnc3BjYV9kZXYtPnVzYl9idWZbNF07CisJCWlmIChwcm9iZV90YltpXVszXVswXSAhPSAwKQorCQkJaTJjX3c4KGdzcGNhX2RldiwgcHJvYmVfdGJbaV1bM10pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDI5KTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg0Mik7CisJCWlmICh2YWwgIT0gMHhmZmZmKQorCQkJYnJlYWs7CisJfQorCXN3aXRjaCAodmFsKSB7CisJY2FzZSAweDgyM2E6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIG10OXYxMTEiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9NVDlWMTExOworCQlzZC0+aTJjX2Jhc2UgPSAweDVjOworCQlicmVhazsKKwljYXNlIDB4ODI0MzoKKwkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgbWkwMzYwIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRyhEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCAtIGZvcmNlZCB0byBtaTAzNjAiLCB2YWwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlX2dwaW8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJICBjb25zdCB1OCAqc245YzF4eCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJY29uc3QgdTggKnJlZzlhOworCXN0YXRpYyBjb25zdCB1OCByZWc5YV9kZWZbXSA9CiAJCXsweDA4LCAweDQwLCAweDIwLCAweDEwLCAweDAwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCByZWc5YV9zbjljMzI1W10gPQorCXN0YXRpYyBjb25zdCB1OCByZWc5YV9zbjljMzI1W10gPQogCQl7MHgwYSwgMHg0MCwgMHgzOCwgMHgzMCwgMHgwMCwgMHgyMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKKwlzdGF0aWMgY29uc3QgdTggcmVnZDRbXSA9IHsweDYwLCAweDAwLCAweDAwfTsKIAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHNuOWMxeHhbMV0pOwpAQCAtODcyLDYgKzEwOTIsMTIgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsICZzbjljMXh4WzNdLCAweDBmKTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjEpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2MCk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDApOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDIsIDB4NzEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKQEAgLTkwMCwxMiArMTEyNiwyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Myk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4MjApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYyKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CisJCW1kZWxheSgxMDApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCAweDYyKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Myk7CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQyKTsKIAkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0hWNzEzMVIpIHsKLQkJCWlmIChwcm9iZXNlbnNvcihnc3BjYV9kZXYpIDwgMCkKKwkJCWlmIChodjcxMzFyX3Byb2JlKGdzcGNhX2RldikgPCAwKQogCQkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJCWJyZWFrOwpAQCAtOTE2LDcgKzExNTAsNyBAQAogc3RhdGljIHZvaWQgaHY3MTMxUl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7Ci0Jc3RhdGljIGNvbnN0IF9fdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KKwlzdGF0aWMgY29uc3QgdTggU2V0U2Vuc29yQ2xrW10gPQkvKiAweDA4IE1jbGsgKi8KIAkJeyAweGExLCAweDExLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAl3aGlsZSAoaHY3MTMxcl9zZW5zb3JfaW5pdFtpXVswXSkgewpAQCAtOTQ2LDYgKzExODAsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG10OXYxMTFfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJaSsrOworCW1zbGVlcCgyMCk7CisJd2hpbGUgKG10OXYxMTFfc2Vuc29yX2luaXRbaV1bMF0pIHsKKwkJaTJjX3c4KGdzcGNhX2RldiwgbXQ5djExMV9zZW5zb3JfaW5pdFtpXSk7CisJCWkrKzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG9tNjgwMl9Jbml0U2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaSA9IDA7CkBAIC0xMDEwLDYgKzEyNTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNwODA3MDhfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IGkgPSAwOworCisJaTJjX3c4KGdzcGNhX2Rldiwgc3A4MDcwOF9zZW5zb3JfaW5pdFtpXSk7CS8qIHJlc2V0IFNDQ0IgKi8KKwlpKys7CisJbXNsZWVwKDIwKTsKKwl3aGlsZSAoc3A4MDcwOF9zZW5zb3JfaW5pdFtpXVswXSkgeworCQlpMmNfdzgoZ3NwY2FfZGV2LCBzcDgwNzA4X3NlbnNvcl9pbml0W2ldKTsKKwkJaSsrOworCX0KK30KKwogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQpAQCAtMTAxOCw3ICsxMjc4LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCkBAIC0xMDI2LDE2ICsxMjg1LDIxIEBACiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5pMmNfYmFzZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAotCXNkLT5xaW5kZXggPSA0OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+Ymx1ZSA9IEJMVUVfQkFMQU5DRV9ERUY7CiAJc2QtPnJlZCA9IFJFRF9CQUxBTkNFX0RFRjsKKwlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7CiAJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwogCXNkLT5hZ19jbnQgPSAtMTsKLQlzZC0+dmZsaXAgPSBWRkxJUF9ERUY7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09WNzYzMCkKKwkJc2QtPnZmbGlwID0gMDsKKwllbHNlCisJCXNkLT52ZmxpcCA9IDE7CiAJc2QtPmluZnJhcmVkID0gSU5GUkFSRURfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CisJc2QtPmpwZWdxdWFsID0gODA7CiAKIAlnc3BjYV9kZXYtPmN0cmxfZGlzID0gY3RybF9kaXNbc2QtPnNlbnNvcl07CiAJcmV0dXJuIDA7CkBAIC0xMDQ1LDggKzEzMDksOCBAQAogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCByZWdHcGlvW10gPSB7IDB4MjksIDB4NzQgfTsKLQlfX3U4IHJlZ0YxOworCXU4IHJlZ0dwaW9bXSA9IHsgMHgyOSwgMHg3NCB9OworCXU4IHJlZ0YxOwogCiAJLyogc2V0dXAgYSBzZWxlY3RvciBieSBicmlkZ2UgKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAxKTsKQEAgLTEwNjQsMTEgKzEzMjgsMTUgQEAKIAljYXNlIEJSSURHRV9TTjlDMTA1OgogCQlpZiAocmVnRjEgIT0gMHgxMSkKIAkJCXJldHVybiAtRU5PREVWOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKQorCQkJbWkwMzYwX3Byb2JlKGdzcGNhX2Rldik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwogCWNhc2UgQlJJREdFX1NOOUMxMjA6CiAJCWlmIChyZWdGMSAhPSAweDEyKQogCQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NSTAzNjApCisJCQltaTAzNjBfcHJvYmUoZ3NwY2FfZGV2KTsKIAkJcmVnR3Bpb1sxXSA9IDB4NzA7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgcmVnR3BpbywgMik7CiAJCWJyZWFrOwpAQCAtMTA4NiwyMCArMTM1NCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCQl1bnNpZ25lZCBpbnQgZXhwbykKK3N0YXRpYyB1MzIgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTMyIGV4cG8pCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0YXRpYyBjb25zdCBfX3U4IGRvaXRbXSA9CQkvKiB1cGRhdGUgc2Vuc29yICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHNlbnNvcmdvW10gPQkJLyogc2Vuc29yIG9uICovCi0JCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IGdhaW5Nb1tdID0KLQkJeyAweGExLCAweDIxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDFkIH07CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9IVjcxMzFSOiB7Ci0JCV9fdTggRXhwb2RvaXRbXSA9CisJCXU4IEV4cG9kb2l0W10gPQogCQkJeyAweGMxLCAweDExLCAweDI1LCAweDA3LCAweDI3LCAweGMwLCAweDAwLCAweDE2IH07CiAKIAkJRXhwb2RvaXRbM10gPSBleHBvID4+IDE2OwpAQCAtMTEwOSw4ICsxMzcxLDEyIEBACiAJCWJyZWFrOwogCSAgICB9CiAJY2FzZSBTRU5TT1JfTUkwMzYwOiB7Ci0JCV9fdTggZXhwb01pW10gPQkgLyogZXhwb3N1cmUgMHgwNjM1IC0+IDQgZnAvcyAweDEwICovCisJCXU4IGV4cG9NaVtdID0JCS8qIGV4cG9zdXJlIDB4MDYzNSAtPiA0IGZwL3MgMHgxMCAqLwogCQkJeyAweGIxLCAweDVkLCAweDA5LCAweDA2LCAweDM1LCAweDAwLCAweDAwLCAweDE2IH07CisJCXN0YXRpYyBjb25zdCB1OCBkb2l0W10gPQkJLyogdXBkYXRlIHNlbnNvciAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDEwIH07CisJCXN0YXRpYyBjb25zdCB1OCBzZW5zb3Jnb1tdID0JCS8qIHNlbnNvciBvbiAqLworCQkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwIH07CiAKIAkJaWYgKGV4cG8gPiAweDA2MzUpCiAJCQlleHBvID0gMHgwNjM1OwpAQCAtMTEyNCwxMCArMTM5MCwxMiBAQAogCQlicmVhazsKIAkgICAgfQogCWNhc2UgU0VOU09SX01PNDAwMDogewotCQlfX3U4IGV4cG9Nb2ZbXSA9CisJCXU4IGV4cG9Nb2ZbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MGYsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKLQkJX191OCBleHBvTW8xMFtdID0KKwkJdTggZXhwb01vMTBbXSA9CiAJCQl7IDB4YTEsIDB4MjEsIDB4MTAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IGdhaW5Nb1tdID0KKwkJCXsgMHhhMSwgMHgyMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCB9OwogCiAJCWlmIChleHBvID4gMHgxZmZmKQogCQkJZXhwbyA9IDB4MWZmZjsKQEAgLTExMzksMTQgKzE0MDcsMjcgQEAKIAkJCQl8ICgoZXhwbyAmIDB4MDAwMykgPDwgNCk7CiAJCWkyY193OChnc3BjYV9kZXYsIGV4cG9NbzEwKTsKIAkJaTJjX3c4KGdzcGNhX2RldiwgZ2Fpbk1vKTsKLQkJUERFQlVHKERfQ09ORiwgInNldCBleHBvc3VyZSAlZCIsCisJCVBERUJVRyhEX0ZSQU0sICJzZXQgZXhwb3N1cmUgJWQiLAogCQkJKChleHBvTW8xMFszXSAmIDB4MDcpIDw8IDEwKQogCQkJfCAoZXhwb01vZlszXSA8PCAyKQogCQkJfCAoKGV4cG9NbzEwWzNdICYgMHgzMCkgPj4gNCkpOwogCQlicmVhazsKIAkgICAgfQorCWNhc2UgU0VOU09SX01UOVYxMTE6IHsKKwkJdTggZXhwb19jMVtdID0KKwkJCXsgMHhiMSwgMHg1YywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OworCisJCWlmIChleHBvID4gMHgwMjgwKQorCQkJZXhwbyA9IDB4MDI4MDsKKwkJZWxzZSBpZiAoZXhwbyA8IDB4MDA0MCkKKwkJCWV4cG8gPSAweDAwNDA7CisJCWV4cG9fYzFbM10gPSBleHBvID4+IDg7CisJCWV4cG9fYzFbNF0gPSBleHBvOworCQlpMmNfdzgoZ3NwY2FfZGV2LCBleHBvX2MxKTsKKwkJYnJlYWs7CisJICAgIH0KIAljYXNlIFNFTlNPUl9PTTY4MDI6IHsKLQkJX191OCBnYWluT21bXSA9CisJCXU4IGdhaW5PbVtdID0KIAkJCXsgMHhhMCwgMHgzNCwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCiAJCWlmIChleHBvID4gMHgwM2ZmKQpAQCAtMTE1Niw3ICsxNDM3LDcgQEAKIAkJZ2Fpbk9tWzNdID0gZXhwbyA+PiAyOwogCQlpMmNfdzgoZ3NwY2FfZGV2LCBnYWluT20pOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCAoZXhwbyA+PiA1KSAmIDB4MWYpOwotCQlQREVCVUcoRF9DT05GLCAic2V0IGV4cG9zdXJlICVkIiwgZ2Fpbk9tWzNdKTsKKwkJUERFQlVHKERfRlJBTSwgInNldCBleHBvc3VyZSAlZCIsIGdhaW5PbVszXSk7CiAJCWJyZWFrOwogCSAgICB9CiAJfQpAQCAtMTE2Nyw3ICsxNDQ4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGV4cG87Ci0JX191OCBrMjsKKwl1OCBrMjsKIAogCWsyID0gKChpbnQpIHNkLT5icmlnaHRuZXNzIC0gMHg4MDAwKSA+PiAxMDsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTExODQsNiArMTQ2NSwxMCBAQAogCQlleHBvID0gc2QtPmJyaWdodG5lc3MgPj4gNDsKIAkJc2QtPmV4cG9zdXJlID0gc2V0ZXhwb3N1cmUoZ3NwY2FfZGV2LCBleHBvKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDg7CisJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09NNjgwMjoKIAkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDY7CiAJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CkBAIC0xMTkxLDE0ICsxNDc2LDE1IEBACiAJCWJyZWFrOwogCX0KIAotCXJlZ193MShnc3BjYV9kZXYsIDB4OTYsIGsyKTsJCS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9NVDlWMTExKQorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCBrMik7CS8qIGNvbG9yIG1hdHJpeCBZIG9mZnNldCAqLwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggazI7Ci0JX191OCBjb250cmFzdFs2XTsKKwl1OCBrMjsKKwl1OCBjb250cmFzdFs2XTsKIAogCWsyID0gc2QtPmNvbnRyYXN0ICogMHgzMCAvIChDT05UUkFTVF9NQVggKyAxKSArIDB4MTA7CS8qIDEwLi40MCAqLwogCWNvbnRyYXN0WzBdID0gKGsyICsgMSkgLyAyOwkJLyogcmVkICovCkBAIC0xMjE0LDggKzE1MDAsOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgdjsKLQlfX3U4IHJlZzhhWzEyXTsJCQkvKiBVICYgViBnYWlucyAqLwotCXN0YXRpYyBfX3MxNiB1dls2XSA9IHsJCS8qIHNhbWUgYXMgcmVnODQgaW4gc2lnbmVkIGRlY2ltYWwgKi8KKwl1OCByZWc4YVsxMl07CQkJLyogVSAmIFYgZ2FpbnMgKi8KKwlzdGF0aWMgczE2IHV2WzZdID0gewkJLyogc2FtZSBhcyByZWc4NCBpbiBzaWduZWQgZGVjaW1hbCAqLwogCQktMjQsIC0zOCwgNjQsCQkvKiBVUiBVRyBVQiAqLwogCQkgNjIsIC01MSwgLTkJCS8qIFZSIFZHIFZCICovCiAJfTsKQEAgLTEyMzYsMjIgKzE1MjIsNzUgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzZC0+Ymx1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IGk7CisJdTggZ2FtbWFbMTddOworCWNvbnN0IHU4ICpnYW1tYV9iYXNlOworCXN0YXRpYyBjb25zdCB1OCBkZWx0YVsxN10gPSB7CisJCTB4MDAsIDB4MTQsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWMsIDB4MWIsIDB4MWEsCisJCTB4MTgsIDB4MTMsIDB4MTAsIDB4MGUsIDB4MDgsIDB4MDcsIDB4MDQsIDB4MDIsIDB4MDAKKwl9OworCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18xOworCQlicmVhazsKKwljYXNlIFNFTlNPUl9TUDgwNzA4OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfc3BlY18yOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnYW1tYV9iYXNlID0gZ2FtbWFfZGVmOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGdhbW1hOyBpKyspCisJCWdhbW1hW2ldID0gZ2FtbWFfYmFzZVtpXQorCQkJKyBkZWx0YVtpXSAqIChzZC0+Z2FtbWEgLSBHQU1NQV9ERUYpIC8gMzI7CisJcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYSwgc2l6ZW9mIGdhbW1hKTsKK30KKwogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAogCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQVVUT0dBSU5fSURYKSkKIAkJcmV0dXJuOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzYzMDoKKwljYXNlIFNFTlNPUl9PVjc2NDg6IHsKKwkJdTggY29tYjsKKworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT1Y3NjMwKQorCQkJY29tYiA9IDB4YzA7CisJCWVsc2UKKwkJCWNvbWIgPSAweGEwOworCQlpZiAoc2QtPmF1dG9nYWluKQorCQkJY29tYiB8PSAweDAyOworCQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4MTMsIGNvbWIpOworCQlyZXR1cm47CisJICAgIH0KKwl9CiAJaWYgKHNkLT5hdXRvZ2FpbikKIAkJc2QtPmFnX2NudCA9IEFHX0NOVF9TVEFSVDsKIAllbHNlCiAJCXNkLT5hZ19jbnQgPSAtMTsKIH0KIAorLyogb3Y3NjMwL292NzY0OCBvbmx5ICovCiBzdGF0aWMgdm9pZCBzZXR2ZmxpcChzdHJ1Y3Qgc2QgKnNkKQogewotCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwJCQkvKiBDT01OICovCi0JCXNkLT52ZmxpcCA/IDB4ODIgOiAweDAyKTsKKwl1OCBjb21uOworCisJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMCkKKwkJY29tbiA9IDB4MDI7CisJZWxzZQorCQljb21uID0gMHgwNjsKKwlpZiAoc2QtPnZmbGlwKQorCQljb21uIHw9IDB4ODA7CisJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDc1LCBjb21uKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0aW5mcmFyZWQoc3RydWN0IHNkICpzZCkKQEAgLTEyNjIsMjAgKzE2MDEsNjMgQEAKIAkJc2QtPmluZnJhcmVkID8gMHg2NiA6IDB4NjQpOwogfQogCitzdGF0aWMgdm9pZCBzZXRqcGVncXVhbChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpLCBzYzsKKworCWlmIChzZC0+anBlZ3F1YWwgPCA1MCkKKwkJc2MgPSA1MDAwIC8gc2QtPmpwZWdxdWFsOworCWVsc2UKKwkJc2MgPSAyMDAgLSBzZC0+anBlZ3F1YWwgKiAyOworI2lmIFVTQl9CVUZfU1ogPCA2NAorI2Vycm9yICJObyByb29tIGVub3VnaCBpbiB1c2JfYnVmIGZvciBxdWFudGl6YXRpb24gdGFibGUiCisjZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJZ3NwY2FfZGV2LT51c2JfYnVmW2ldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDBfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMHgwOCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDEwMCwgMCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgNjQsCisJCQk1MDApOworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQlnc3BjYV9kZXYtPnVzYl9idWZbaV0gPQorCQkJKGpwZWdfaGVhZFtKUEVHX1FUMV9PRkZTRVQgKyBpXSAqIHNjICsgNTApIC8gMTAwOworCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkweDA4LAorCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJMHgwMTQwLCAwLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCA2NCwKKwkJCTUwMCk7CisKKwlzZC0+cmVnMTggXj0gMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworfQorCiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7Ci0JX191OCByZWcxLCByZWcxNywgcmVnMTg7Ci0JY29uc3QgX191OCAqc245YzF4eDsKKwl1OCByZWcxLCByZWcxNzsKKwljb25zdCB1OCAqc245YzF4eDsKIAlpbnQgbW9kZTsKLQlzdGF0aWMgY29uc3QgX191OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggQ0FbXSA9IHsgMHgyOCwgMHhkOCwgMHgxNCwgMHhlYyB9OwotCXN0YXRpYyBjb25zdCBfX3U4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCi0Jc3RhdGljIGNvbnN0IF9fdTggQ0Vfb3Y3Nnh4W10gPQorCXN0YXRpYyBjb25zdCB1OCBDMFtdID0geyAweDJkLCAweDJkLCAweDNhLCAweDA1LCAweDA0LCAweDNmIH07CisJc3RhdGljIGNvbnN0IHU4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKKwlzdGF0aWMgY29uc3QgdTggQ0VbXSA9IHsgMHgzMiwgMHhkZCwgMHgyZCwgMHhkZCB9OwkvKiBNSTAzNjAgKi8KKwlzdGF0aWMgY29uc3QgdTggQ0Vfb3Y3Nnh4W10gPQogCQkJCXsgMHgzMiwgMHhkZCwgMHgzMiwgMHhkZCB9OwogCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIxKTsJCS8qIEpQRUcgNDIyICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCXNuOWMxeHggPSBzbl90YlsoaW50KSBzZC0+c2Vuc29yXTsKIAljb25maWd1cmVfZ3Bpbyhnc3BjYV9kZXYsIHNuOWMxeHgpOwogCkBAIC0xMjkyLDYgKzE2NzQsOSBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4YzksIDB4M2MpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHNuOWMxeHhbMHgxOF0pOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZzE3ID0gMHhlMDsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjMwOgogCQlyZWcxNyA9IDB4ZTI7CiAJCWJyZWFrOwpAQCAtMTMxNSwxNCArMTcwMCwyNCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4MDcsIHNuOWMxeHhbN10pOwkvKiBncmVlbiAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDYsIHNuOWMxeHhbNl0pOwkvKiBibHVlICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNCwgc245YzF4eFsweDE0XSk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDIwLCBnYW1tYV9kZWYsIHNpemVvZiBnYW1tYV9kZWYpOworCisJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCXJlZ193KGdzcGNhX2RldiwgMHg4NCwgcmVnODQsIHNpemVvZiByZWc4NCk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNyk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MGEpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDYwKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OTksIDB4NTkpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKSB7CiAJCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDA1KTsKQEAgLTEzNTgsNiArMTc1MywxNSBAQAogLyoJCQlyZWcxID0gMHgwNjsJICogNjQwIGNsayAyNE16IChkb25lKSAqLwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCW10OXYxMTFfSW5pdFNlbnNvcihnc3BjYV9kZXYpOworCQlpZiAobW9kZSkgeworCQkJcmVnMSA9IDB4MDQ7CS8qIDMyMCBjbGsgNDhNaHogKi8KKwkJfSBlbHNlIHsKKy8qCQkJcmVnMSA9IDB4MDY7CSAqIDY0MCBjbGsgMjRNeiAoZG9uZSkgKi8KKwkJCXJlZzE3ID0gMHhjMjsKKwkJfQorCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCW9tNjgwMl9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CiAJCXJlZzE3ID0gMHg2NDsJCS8qIDY0MCBNQ0tTSVpFICovCkBAIC0xMzczLDggKzE3NzcsNyBAQAogCQlyZWcxNyA9IDB4MjE7CiAvKgkJcmVnMSA9IDB4NDI7CQkgKiA0MiAtIDQ2PyAqLwogCQlicmVhazsKLQlkZWZhdWx0OgotLyoJY2FzZSBTRU5TT1JfT1Y3NjYwOiAqLworCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJb3Y3NjYwX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKIAkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NOOUMxMjApIHsKIAkJCWlmIChtb2RlKSB7CQkvKiAzMjB4MjQwIC0gMTYweDEyMCAqLwpAQCAtMTM4Nyw2ICsxNzkwLDE2IEBACiAJCQkJCSAqIGludmVyc2UgcG93ZXIgZG93biAqLwogCQl9CiAJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9TUDgwNzA4OiAqLworCQlzcDgwNzA4X0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpIHsKKy8qPz8JCQlyZWcxID0gMHgwNDsJICogMzIwIGNsayA0OE1oeiAqLworCQl9IGVsc2UgeworCQkJcmVnMSA9IDB4NDY7CSAvKiA2NDAgY2xrIDQ4TXogKi8KKwkJCXJlZzE3ID0gMHhhMjsKKwkJfQorCQlicmVhazsKIAl9CiAJcmVnX3coZ3NwY2FfZGV2LCAweGMwLCBDMCwgNik7CiAJcmVnX3coZ3NwY2FfZGV2LCAweGNhLCBDQSwgNCk7CkBAIC0xNDAzLDIwICsxODE2LDEzIEBACiAJfQogCiAJLyogaGVyZSBjaGFuZ2Ugc2l6ZSBtb2RlIDAgLT4gVkdBOyAxIC0+IENJRiAqLwotCXJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpOwotCXJlZ193MShnc3BjYV9kZXYsIDB4MTgsIHJlZzE4IHwgMHg0MCk7Ci0KLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTAwLCBxdGFibGU0LCAweDQwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MTQwLCBxdGFibGU0ICsgMHg0MCwgMHg0MCk7Ci0KLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCByZWcxOCk7CisJc2QtPnJlZzE4ID0gc245YzF4eFsweDE4XSB8IChtb2RlIDw8IDQpIHwgMHg0MDsKKwlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzZC0+cmVnMTgpOworCXNldGpwZWdxdWFsKGdzcGNhX2Rldik7CiAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCByZWcxNyk7CiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgcmVnMSk7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfTUkwMzYwOgotCQlzZXRpbmZyYXJlZChzZCk7Ci0JCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJc2V0dmZsaXAoc2QpOwogCQlicmVhazsKQEAgLTE0MzAsMTQgKzE4MzYsMTQgQEAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcGh2NzEzMVtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcGh2NzEzMVtdID0KIAkJeyAweGExLCAweDExLCAweDAyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG1pMDM2MFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG1pMDM2MFtdID0KIAkJeyAweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc3RvcG92NzY0OFtdID0KKwlzdGF0aWMgY29uc3QgdTggc3RvcG92NzY0OFtdID0KIAkJeyAweGExLCAweDIxLCAweDc2LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0JX191OCBkYXRhOwotCWNvbnN0IF9fdTggKnNuOWMxeHg7CisJdTggZGF0YTsKKwljb25zdCB1OCAqc245YzF4eDsKIAogCWRhdGEgPSAweDBiOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtMTQ1Miw2ICsxODU4LDcgQEAKIAljYXNlIFNFTlNPUl9PVjc2NDg6CiAJCWkyY193OChnc3BjYV9kZXYsIHN0b3Bvdjc2NDgpOwogCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIFNFTlNPUl9NVDlWMTExOgogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJZGF0YSA9IDB4Mjk7CiAJCWJyZWFrOwpAQCAtMTQ2OCwxMyArMTg3NSwyMCBAQAogCXJlZ193MShnc3BjYV9kZXYsIDB4ZjEsIDB4MDApOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgZG9fYXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZGVsdGE7CiAJaW50IGV4cG90aW1lczsKLQlfX3U4IGx1bWFfbWVhbiA9IDEzMDsKLQlfX3U4IGx1bWFfZGVsdGEgPSAyMDsKKwl1OCBsdW1hX21lYW4gPSAxMzA7CisJdTggbHVtYV9kZWx0YSA9IDIwOwogCiAJLyogVGhhbmtzIFMuLCB3aXRob3V0IHlvdXIgYWR2aWNlLCBhdXRvYnJpZ2h0IHNob3VsZCBub3Qgd29yayA6KSAqLwogCWlmIChzZC0+YWdfY250IDwgMCkKQEAgLTE0OTksNiArMTkxMyw3IEBACiAJCWRlZmF1bHQ6CiAvKgkJY2FzZSBTRU5TT1JfTU80MDAwOiAqLwogLyoJCWNhc2UgU0VOU09SX01JMDM2MDogKi8KKy8qCQljYXNlIFNFTlNPUl9NVDlWMTExOiAqLwogLyoJCWNhc2UgU0VOU09SX09NNjgwMjogKi8KIAkJCWV4cG90aW1lcyA9IHNkLT5leHBvc3VyZTsKIAkJCWV4cG90aW1lcyArPSAobHVtYV9tZWFuIC0gZGVsdGEpID4+IDY7CkBAIC0xNTE2LDcgKzE5MzEsNyBAQAogLyogVGhpcyBmdW5jdGlvbiBpcyBydW4gYXQgaW50ZXJydXB0IGxldmVsLiAqLwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE1NTAsNyArMTk2NSw4IEBACiAJaWYgKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9PSBMQVNUX1BBQ0tFVCkgewogCiAJCS8qIHB1dCB0aGUgSlBFRyA0MjIgaGVhZGVyICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIxKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCX0KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOwogfQpAQCAtMTY0NSw2ICsyMDYxLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmdhbW1hID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJKnZhbCA9IHNkLT5nYW1tYTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xNjk5LDYgKzIxMzMsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTE3MDgsOCArMjE3MCwxMSBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZHFfY2FsbGJhY2sgPSBkb19hdXRvZ2FpbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE3MjQsOSArMjE4OSw3IEBACiAjZW5kaWYKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKIAl7VVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNyksIEJTSShTTjlDMTA1LCBPVjc2NjAsIDB4MjEpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDIgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyX01PRFVMRQogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMjgpLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDcxLCAweDAzMzApLCBCU0koU045QzEwNSwgTUkwMzYwLCAweDVkKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNmY4LCAweDMwMDQpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCkBAIC0xNzY0LDEwICsyMjI3LDEwIEBACiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EpLCBCU0koU045QzEyMCwgT1Y3NjQ4LCAweDIxKX0sCiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiksIEJTSShTTjlDMTIwLCBPVjc2NjAsIDB4MjEpfSwKKyNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjKSwgQlNJKFNOOUMxMjAsIEhWNzEzMVIsIDB4MTEpfSwKIC8qCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNlKSwgQlNJKFNOOUMxMjAsIE9WNzYzMCwgMHg/Pyl9LCAqLwotI2VuZGlmCi0Je1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgTUkwMzYwLCAweDVkKX0sCisJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxNDMpLCBCU0koU045QzEyMCwgU1A4MDcwOCwgMHgxOCl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CkBAIC0xNzk0LDggKzIyNTcsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCmluZGV4IDk0MmYwNGMuLjZmMzhmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMC5jCkBAIC0zOCw4ICszOCwxMSBAQAogCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDcwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDg1CiAKLQljaGFyIHFpbmRleDsKIAljaGFyIHN1YnR5cGU7CiAjZGVmaW5lIEFnZmFDbDIwIDAKICNkZWZpbmUgQWlwdGVrUG9ja2V0RFYgMQpAQCAtNTYsNiArNTksOCBAQAogI2RlZmluZSBPcHRpbWVkaWEgMTIKICNkZWZpbmUgUGFsbVBpeERDODUgMTMKICNkZWZpbmUgVG9wdHJvSW5kdXMgMTQKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTYyOSw3ICs2MzQsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJc2QtPnN1YnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zdWJ0eXBlICE9IExvZ2l0ZWNoQ2xpY2tTbWFydDMxMCkgewogCQljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CkBAIC02MzgsMTAgKzY0MiwxMCBAQAogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CiAJfQotCXNkLT5xaW5kZXggPSA1OwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY3LDYgKzY3MSwxMiBAQAogCV9fdTggRGF0YTsKIAlfX3U4IHhtdWx0LCB5bXVsdDsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPnN1YnR5cGUgPT0gTG9naXRlY2hDbGlja1NtYXJ0MzEwKSB7CiAJCXhtdWx0ID0gMHgxNjsKIAkJeW11bHQgPSAweDEyOwpAQCAtNzEzLDcgKzcyMyw4IEBACiAJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDBfdmlzdWFsX2RlZmF1bHRzKTsKIAkJc3BjYTUwMF9zZXRtb2RlKGdzcGNhX2RldiwgeG11bHQsIHltdWx0KTsKIAkJLyogZW5hYmxlIGRyb3AgcGFja2V0ICovCi0JCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4NTBhLCAweDAwMDEpOworCQllcnIgPSByZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJaWYgKGVyciA8IDApCiAJCQlQREVCVUcoRF9FUlIsICJmYWlsZWQgdG8gZW5hYmxlIGRyb3AgcGFja2V0Iik7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4ODgwLCAzKTsKIAkJZXJyID0gc3BjYTUweF9zZXR1cF9xdGFibGUoZ3NwY2FfZGV2LApAQCAtODgxLDYgKzg5MiwxMyBAQAogCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0pOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC05MDEsNyArOTE5LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZC0+cWluZGV4LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCWRhdGEgKz0gU1BDQTUwMF9PRkZTRVRfREFUQTsKIAkJbGVuIC09IFNQQ0E1MDBfT0ZGU0VUX0RBVEE7CkBAIC05MzcsMTYgKzk1Niw2IEBACiAJCQkoX191OCkgKHNkLT5icmlnaHRuZXNzIC0gMTI4KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDgxNjcsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmJyaWdodG5lc3MgPSByZXQgKyAxMjg7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05NTQsMTYgKzk2Myw2IEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjgsIHNkLT5jb250cmFzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwLCAweDgxNjgsIDEpOwotCWlmIChyZXQgPj0gMCkKLQkJc2QtPmNvbnRyYXN0ID0gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTk3MSwxNiArOTcwLDYgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODE2OSwgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY5LCAxKTsKLQlpZiAocmV0ID49IDApCi0JCXNkLT5jb2xvcnMgPSByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05OTUsNyArOTg0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTAxNCw3ICsxMDAyLDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb250cmFzdChnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29udHJhc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMzLDExICsxMDIwLDM4IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xMDQ3LDcgKzEwNjEsMTAgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0xMDkzLDggKzExMTAsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKaW5kZXggODJlM2UzZS4uZDQ4YjI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAxLmMKQEAgLTE4ODMsMTAgKzE4ODMsNiBAQAogCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MTIsIHNkLT5icmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xODk3LDEwICsxODkzLDYgQEAKIAkJCQkgIHNkLT5jb250cmFzdCAmIDB4ZmYpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkwOCwxMCArMTkwMCw2IEBACiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCBTUENBNTAxX1JFR19DQ0RTUCwgMHgwYywgc2QtPmNvbG9ycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGJsdWVfYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTkzNCw3ICsxOTIyLDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKQEAgLTIwODQsNyArMjA3MSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMDMsNyArMjA4OSw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtMjEyMiw3ICsyMTA3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMTEsOCArMjE5NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwppbmRleCAyYTMzYTI5Li4yYWNlYzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDUuYwpAQCAtMzEsOSArMzEsOSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJCS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKKwl1OCBicmlnaHRuZXNzOwogCi0JY2hhciBzdWJ0eXBlOworCXU4IHN1YnR5cGU7CiAjZGVmaW5lIEludGVsUENDYW1lcmFQcm8gMAogI2RlZmluZSBOeHVsdHJhIDEKIH07CkBAIC00Myw3ICs0Myw2IEBACiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgICAgewogCQkuaWQgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC01Miw3ICs1MSw4IEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAyNTUsCiAJCS5zdGVwICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDEyNworCQkuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgICAgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCkBAIC02NCwxMiArNjQsMTIgQEAKIAkJLmJ5dGVzcGVybGluZSA9IDE2MCwKIAkJLnNpemVpbWFnZSA9IDE2MCAqIDEyMCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDV9LAorCQkucHJpdiA9IDR9LAogCXsxNzYsIDE0NCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDE3NiwKIAkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCAqIDMgLyAyLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDR9LAorCQkucHJpdiA9IDN9LAogCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NQQ0E1MDUsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDMyMCwKIAkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyAyLApAQCAtOTMsNiArOTMsNyBAQAogCiAjZGVmaW5lIFNQQ0E1MFhfVVNCX0NUUkwgMHgwMAkvKiBzcGNhNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfQ1VTQl9FTkFCTEUgMHgwMSAvKiBzcGNhNTA1ICovCisKICNkZWZpbmUgU1BDQTUwWF9SRUdfR0xPQkFMIDB4MDMJLyogc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dNSVNDMF9JRFNFTCAweDAxIC8qIEdsb2JhbCBjb250cm9sIGRldmljZSBJRCBzZWxlY3Qgc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dMT0JBTF9NSVNDMCAweDAwIC8qIEdsb2JhbCBjb250cm9sIG1pc2NlbGxhbmVvdXMgMCBzcGNhNTA1ICovCkBAIC0xMDEsMjMwICsxMDIsMjMwIEBACiAjZGVmaW5lIFNQQ0E1MFhfR0xPQkFMX01JU0MzIDB4MDMgLyogNTA1ICovCiAjZGVmaW5lIFNQQ0E1MFhfR01JU0MzX1NBQTcxMTNSU1QgMHgyMAkvKiBOb3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBzcGNhNTA1ICovCiAKKy8qIEltYWdlIGZvcm1hdCBhbmQgY29tcHJlc3Npb24gY29udHJvbCAqLworI2RlZmluZSBTUENBNTBYX1JFR19DT01QUkVTUyAweDA0CisKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDVfaW5pdF9kYXRhW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KLQkvKiAxODE5ICovCitzdGF0aWMgY29uc3QgdTggc3BjYTUwNV9pbml0X2RhdGFbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAl7U1BDQTUwWF9SRUdfR0xPQkFMLCBTUENBNTBYX0dNSVNDM19TQUE3MTEzUlNULCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCiAJLyogU2Vuc29yIHJlc2V0ICovCi0JLyogMTgyMiAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDM30sCi0JLyogMTgyNSAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDMX0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAorCXtTUENBNTBYX1JFR19HTE9CQUwsIDB4MDAsIFNQQ0E1MFhfR0xPQkFMX01JU0MxfSwKIAkvKiBCbG9jayBVU0IgcmVzZXQgKi8KLQkvKiAxODI4ICovIHtTUENBNTBYX1JFR19HTE9CQUwsIFNQQ0E1MFhfR01JU0MwX0lEU0VMLAotCQlTUENBNTBYX0dMT0JBTF9NSVNDMH0sCisJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzBfSURTRUwsIFNQQ0E1MFhfR0xPQkFMX01JU0MwfSwKIAotCS8qIDE4MzEgKi8gezB4NSwgMHgwMSwgMHgxMH0sCisJezB4MDUsIDB4MDEsIDB4MTB9LAogCQkJCQkvKiBNYXliZSBwb3dlciBkb3duIHNvbWUgc3R1ZmYgKi8KLQkvKiAxODM0ICovIHsweDUsIDB4MGYsIDB4MTF9LAorCXsweDA1LCAweDBmLCAweDExfSwKIAogCS8qIFNldHVwIGludGVybmFsIENDRCAgPyAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCXt9CiB9OwogCiAvKgogICogRGF0YSB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdXNpbmcgdGhlIGludGVybmFsIENDRAogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNV9vcGVuX2RhdGFfY2NkW11bM10gPSB7Ci0JLyogbGluZQkgICBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KK3N0YXRpYyBjb25zdCB1OCBzcGNhNTA1X29wZW5fZGF0YV9jY2RbXVszXSA9IHsKKwkvKiBibVJlcXVlc3QsdmFsdWUsaW5kZXggKi8KIAkvKiBJbnRlcm5hbCBDQ0QgZGF0YSBzZXQgKi8KLQkvKiAxODkxICovIHsweDMsIDB4MDQsIDB4MDF9LAorCXsweDAzLCAweDA0LCAweDAxfSwKIAkvKiBUaGlzIGNvdWxkIGJlIGEgcmVzZXQgKi8KLQkvKiAxODk0ICovIHsweDMsIDB4MDAsIDB4MDF9LAorCXsweDAzLCAweDAwLCAweDAxfSwKIAogCS8qIFNldHVwIGNvbXByZXNzaW9uIGFuZCBpbWFnZSByZWdpc3RlcnMuIDB4NiBhbmQgMHg3IHNlZW0gdG8gYmUKIAkgICByZWxhdGVkIHRvIEgmViBob2xkLCBhbmQgYXJlIHJlc29sdXRpb24gbW9kZSBzcGVjaWZpYyAqLwotCQkvKiAxODk3ICovIHsweDQsIDB4MTAsIDB4MDF9LAorCQl7MHgwNCwgMHgxMCwgMHgwMX0sCiAJCS8qIERJRkYoMHg1MCksIHdhcyAoMHgxMCkgKi8KLQkvKiAxOTAwICovIHsweDQsIDB4MDAsIDB4MDR9LAotCS8qIDE5MDMgKi8gezB4NCwgMHgwMCwgMHgwNX0sCi0JLyogMTkwNiAqLyB7MHg0LCAweDIwLCAweDA2fSwKLQkvKiAxOTA5ICovIHsweDQsIDB4MjAsIDB4MDd9LAorCXsweDA0LCAweDAwLCAweDA0fSwKKwl7MHgwNCwgMHgwMCwgMHgwNX0sCisJezB4MDQsIDB4MjAsIDB4MDZ9LAorCXsweDA0LCAweDIwLCAweDA3fSwKIAotCS8qIDE5MTIgKi8gezB4OCwgMHgwYSwgMHgwMH0sCisJezB4MDgsIDB4MGEsIDB4MDB9LAogCS8qIERJRkYgKDB4NGEpLCB3YXMgKDB4YSkgKi8KIAotCS8qIDE5MTUgKi8gezB4NSwgMHgwMCwgMHgxMH0sCi0JLyogMTkxOCAqLyB7MHg1LCAweDAwLCAweDExfSwKLQkvKiAxOTIxICovIHsweDUsIDB4MDAsIDB4MDB9LAorCXsweDA1LCAweDAwLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDAsIDB4MDB9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTI0ICovIHsweDUsIDB4MDAsIDB4MDF9LAorCXsweDA1LCAweDAwLCAweDAxfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTkyNyAqLyB7MHg1LCAweDAwLCAweDAyfSwKKwl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCS8qIDE5MzAgKi8gezB4NSwgMHgwMCwgMHgwM30sCisJezB4MDUsIDB4MDAsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTMzICovIHsweDUsIDB4MDAsIDB4MDR9LAorCXsweDA1LCAweDAwLCAweDA0fSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5MzYgKi8gezB4NSwgMHg4MCwgMHgwNX0sCisJCXsweDA1LCAweDgwLCAweDA1fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTM5ICovIHsweDUsIDB4ZTAsIDB4MDZ9LAorCQl7MHgwNSwgMHhlMCwgMHgwNn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk0MiAqLyB7MHg1LCAweDIwLCAweDA3fSwKKwkJezB4MDUsIDB4MjAsIDB4MDd9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NDUgKi8gezB4NSwgMHhhMCwgMHgwOH0sCisJCXsweDA1LCAweGEwLCAweDA4fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTQ4ICovIHsweDUsIDB4MCwgMHgxMn0sCisJCXsweDA1LCAweDAsIDB4MTJ9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTk1MSAqLyB7MHg1LCAweDAyLCAweDBmfSwKKwl7MHgwNSwgMHgwMiwgMHgwZn0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTU0ICovIHsweDUsIDB4MTAsIDB4NDZ9LAorCQl7MHgwNSwgMHgxMCwgMHg0Nn0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk1NyAqLyB7MHg1LCAweDgsIDB4NGF9LAorCQl7MHgwNSwgMHg4LCAweDRhfSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwogCi0JLyogMTk2MCAqLyB7MHgzLCAweDA4LCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwM30sCiAJLyogRElGRiAoMHgzLDB4MjgsMHgzKSAqLwotCS8qIDE5NjMgKi8gezB4MywgMHgwOCwgMHgwMX0sCi0JLyogMTk2NiAqLyB7MHgzLCAweDBjLCAweDAzfSwKKwl7MHgwMywgMHgwOCwgMHgwMX0sCisJezB4MDMsIDB4MGMsIDB4MDN9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk2OSAqLyB7MHgzLCAweDIxLCAweDAwfSwKKwkJezB4MDMsIDB4MjEsIDB4MDB9LAogCQkvKiBESUZGICgweDM5KSAqLwogCiAvKiBFeHRyYSBibG9jayBjb3BpZWQgZnJvbSBpbml0IHRvIGhvcGVmdWxseSBlbnN1cmUgQ0NEIGlzIGluIGEgc2FuZSBzdGF0ZSAqLwotCS8qIDE4MzcgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTg0MCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxODQzICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE4NDYgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTg0OSAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxODUyICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE4NTUgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMTg1OCAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAxODYxICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDE4NjQgKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMTg2NyAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAxODcwICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDE4NzMgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMTg3NiAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAxODc5ICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDE4ODIgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMTg4NSAqLyB7MHg2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAogCS8qIEVuZCBvZiBleHRyYSBibG9jayAqLwogCi0JCS8qIDE5NzIgKi8gezB4NiwgMHgzZiwgMHgxfSwKKwkJezB4MDYsIDB4M2YsIDB4MX0sCiAJCS8qIEJsb2NrIHNraXBwZWQgKi8KLQkvKiAxOTc1ICovIHsweDYsIDB4MTAsIDB4MDJ9LAotCS8qIDE5NzggKi8gezB4NiwgMHg2NCwgMHgwN30sCi0JLyogMTk4MSAqLyB7MHg2LCAweDEwLCAweDA4fSwKLQkvKiAxOTg0ICovIHsweDYsIDB4MDAsIDB4MDl9LAotCS8qIDE5ODcgKi8gezB4NiwgMHgwMCwgMHgwYX0sCi0JLyogMTk5MCAqLyB7MHg2LCAweDAwLCAweDBifSwKLQkvKiAxOTkzICovIHsweDYsIDB4MTAsIDB4MGN9LAotCS8qIDE5OTYgKi8gezB4NiwgMHgwMCwgMHgwZH0sCi0JLyogMTk5OSAqLyB7MHg2LCAweDAwLCAweDBlfSwKLQkvKiAyMDAyICovIHsweDYsIDB4MDAsIDB4MGZ9LAotCS8qIDIwMDUgKi8gezB4NiwgMHgxMCwgMHgxMH0sCi0JLyogMjAwOCAqLyB7MHg2LCAweDAyLCAweDExfSwKLQkvKiAyMDExICovIHsweDYsIDB4MDAsIDB4MTJ9LAotCS8qIDIwMTQgKi8gezB4NiwgMHgwNCwgMHgxM30sCi0JLyogMjAxNyAqLyB7MHg2LCAweDAyLCAweDE0fSwKLQkvKiAyMDIwICovIHsweDYsIDB4OGEsIDB4NTF9LAotCS8qIDIwMjMgKi8gezB4NiwgMHg0MCwgMHg1Mn0sCi0JLyogMjAyNiAqLyB7MHg2LCAweGI2LCAweDUzfSwKLQkvKiAyMDI5ICovIHsweDYsIDB4M2QsIDB4NTR9LAotCS8qIDIwMzIgKi8gezB4NiwgMHg2MCwgMHg1N30sCi0JLyogMjAzNSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMDM4ICovIHsweDYsIDB4MTUsIDB4NTl9LAotCS8qIDIwNDEgKi8gezB4NiwgMHgwNSwgMHg1YX0sCisJezB4MDYsIDB4MTAsIDB4MDJ9LAorCXsweDA2LCAweDY0LCAweDA3fSwKKwl7MHgwNiwgMHgxMCwgMHgwOH0sCisJezB4MDYsIDB4MDAsIDB4MDl9LAorCXsweDA2LCAweDAwLCAweDBhfSwKKwl7MHgwNiwgMHgwMCwgMHgwYn0sCisJezB4MDYsIDB4MTAsIDB4MGN9LAorCXsweDA2LCAweDAwLCAweDBkfSwKKwl7MHgwNiwgMHgwMCwgMHgwZX0sCisJezB4MDYsIDB4MDAsIDB4MGZ9LAorCXsweDA2LCAweDEwLCAweDEwfSwKKwl7MHgwNiwgMHgwMiwgMHgxMX0sCisJezB4MDYsIDB4MDAsIDB4MTJ9LAorCXsweDA2LCAweDA0LCAweDEzfSwKKwl7MHgwNiwgMHgwMiwgMHgxNH0sCisJezB4MDYsIDB4OGEsIDB4NTF9LAorCXsweDA2LCAweDQwLCAweDUyfSwKKwl7MHgwNiwgMHhiNiwgMHg1M30sCisJezB4MDYsIDB4M2QsIDB4NTR9LAorCXsweDA2LCAweDYwLCAweDU3fSwKKwl7MHgwNiwgMHgyMCwgMHg1OH0sCisJezB4MDYsIDB4MTUsIDB4NTl9LAorCXsweDA2LCAweDA1LCAweDVhfSwKIAotCS8qIDIwNDQgKi8gezB4NSwgMHgwMSwgMHhjMH0sCi0JLyogMjA0NyAqLyB7MHg1LCAweDEwLCAweGNifSwKLQkJLyogMjA1MCAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwMSwgMHhjMH0sCisJezB4MDUsIDB4MTAsIDB4Y2J9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JCS8qIDIwNTMgKi8gezB4NSwgMHgwLCAweGMyfSwKKwkJezB4MDUsIDB4MCwgMHhjMn0sCiAJCS8qIDQgd2FzIDAgKi8KLQkvKiAyMDU2ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDU5ICovIHsweDUsIDB4ODAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAgKi8KLQkvKiAyMDYyICovIHsweDUsIDB4MDQsIDB4YzJ9LAotCS8qIDIwNjUgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwNjggKi8gezB4NSwgMHgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHgwLCAweGMxfSwKIAkJLyogICovCi0JLyogMjA3MSAqLyB7MHg1LCAweDAwLCAweGMyfSwKLQkvKiAyMDc0ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDc3ICovIHsweDUsIDB4NDAsIDB4YzF9LAorCXsweDA1LCAweDAwLCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJCXsweDA1LCAweDQwLCAweGMxfSwKIAkJLyogKi8KLQkvKiAyMDgwICovIHsweDUsIDB4MTcsIDB4YzJ9LAotCS8qIDIwODMgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwODYgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4MTcsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIwODkgKi8gezB4NSwgMHgwNiwgMHhjMn0sCi0JLyogMjA5MiAqLyB7MHg1LCAweDAwLCAweGNhfSwKLQkJLyogMjA5NSAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwNiwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHg4MCwgMHhjMX0sCiAJCS8qICovCi0JLyogMjA5OCAqLyB7MHg1LCAweDA0LCAweGMyfSwKLQkvKiAyMTAxICovIHsweDUsIDB4MDAsIDB4Y2F9LAorCXsweDA1LCAweDA0LCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCiAKLQkvKiAyMTA0ICovIHsweDMsIDB4NGMsIDB4M30sCi0JLyogMjEwNyAqLyB7MHgzLCAweDE4LCAweDF9LAorCXsweDAzLCAweDRjLCAweDN9LAorCXsweDAzLCAweDE4LCAweDF9LAogCi0JLyogMjExMCAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMTEzICovIHsweDYsIDB4YmUsIDB4NTN9LAotCS8qIDIxMTYgKi8gezB4NiwgMHg3MSwgMHg1N30sCi0JLyogMjExOSAqLyB7MHg2LCAweDIwLCAweDU4fSwKLQkvKiAyMTIyICovIHsweDYsIDB4MDUsIDB4NTl9LAotCS8qIDIxMjUgKi8gezB4NiwgMHgxNSwgMHg1YX0sCisJezB4MDYsIDB4NzAsIDB4NTF9LAorCXsweDA2LCAweGJlLCAweDUzfSwKKwl7MHgwNiwgMHg3MSwgMHg1N30sCisJezB4MDYsIDB4MjAsIDB4NTh9LAorCXsweDA2LCAweDA1LCAweDU5fSwKKwl7MHgwNiwgMHgxNSwgMHg1YX0sCiAKLQkvKiAyMTI4ICovIHsweDQsIDB4MDAsIDB4MDh9LAorCXsweDA0LCAweDAwLCAweDA4fSwKIAkvKiBDb21wcmVzcyA9IE9GRiAoMHgxIHRvIHR1cm4gb24pICovCi0JLyogMjEzMSAqLyB7MHg0LCAweDEyLCAweDA5fSwKLQkvKiAyMTM0ICovIHsweDQsIDB4MjEsIDB4MGF9LAotCS8qIDIxMzcgKi8gezB4NCwgMHgxMCwgMHgwYn0sCi0JLyogMjE0MCAqLyB7MHg0LCAweDIxLCAweDBjfSwKLQkvKiAyMTQzICovIHsweDQsIDB4MDUsIDB4MDB9LAorCXsweDA0LCAweDEyLCAweDA5fSwKKwl7MHgwNCwgMHgyMSwgMHgwYX0sCisJezB4MDQsIDB4MTAsIDB4MGJ9LAorCXsweDA0LCAweDIxLCAweDBjfSwKKwl7MHgwNCwgMHgwNSwgMHgwMH0sCiAJLyogd2FzIDUgKEltYWdlIFR5cGUgPyApICovCi0JLyogMjE0NiAqLyB7MHg0LCAweDAwLCAweDAxfSwKKwl7MHgwNCwgMHgwMCwgMHgwMX0sCiAKLQkvKiAyMTQ5ICovIHsweDYsIDB4M2YsIDB4MDF9LAorCXsweDA2LCAweDNmLCAweDAxfSwKIAotCS8qIDIxNTIgKi8gezB4NCwgMHgwMCwgMHgwNH0sCi0JLyogMjE1NSAqLyB7MHg0LCAweDAwLCAweDA1fSwKLQkvKiAyMTU4ICovIHsweDQsIDB4NDAsIDB4MDZ9LAotCS8qIDIxNjEgKi8gezB4NCwgMHg0MCwgMHgwN30sCisJezB4MDQsIDB4MDAsIDB4MDR9LAorCXsweDA0LCAweDAwLCAweDA1fSwKKwl7MHgwNCwgMHg0MCwgMHgwNn0sCisJezB4MDQsIDB4NDAsIDB4MDd9LAogCi0JLyogMjE2NCAqLyB7MHg2LCAweDFjLCAweDE3fSwKLQkvKiAyMTY3ICovIHsweDYsIDB4ZTIsIDB4MTl9LAotCS8qIDIxNzAgKi8gezB4NiwgMHgxYywgMHgxYn0sCi0JLyogMjE3MyAqLyB7MHg2LCAweGUyLCAweDFkfSwKLQkvKiAyMTc2ICovIHsweDYsIDB4YWEsIDB4MWZ9LAotCS8qIDIxNzkgKi8gezB4NiwgMHg3MCwgMHgyMH0sCisJezB4MDYsIDB4MWMsIDB4MTd9LAorCXsweDA2LCAweGUyLCAweDE5fSwKKwl7MHgwNiwgMHgxYywgMHgxYn0sCisJezB4MDYsIDB4ZTIsIDB4MWR9LAorCXsweDA2LCAweGFhLCAweDFmfSwKKwl7MHgwNiwgMHg3MCwgMHgyMH0sCiAKLQkvKiAyMTgyICovIHsweDUsIDB4MDEsIDB4MTB9LAotCS8qIDIxODUgKi8gezB4NSwgMHgwMCwgMHgxMX0sCi0JLyogMjE4OCAqLyB7MHg1LCAweDAxLCAweDAwfSwKLQkvKiAyMTkxICovIHsweDUsIDB4MDUsIDB4MDF9LAotCQkvKiAyMTk0ICovIHsweDUsIDB4MDAsIDB4YzF9LAorCXsweDA1LCAweDAxLCAweDEwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCisJezB4MDUsIDB4MDEsIDB4MDB9LAorCXsweDA1LCAweDA1LCAweDAxfSwKKwkJezB4MDUsIDB4MDAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIxOTcgKi8gezB4NSwgMHgwMCwgMHhjMn0sCi0JLyogMjIwMCAqLyB7MHg1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAogCi0JLyogMjIwMyAqLyB7MHg2LCAweDcwLCAweDUxfSwKLQkvKiAyMjA2ICovIHsweDYsIDB4YmUsIDB4NTN9LAorCXsweDA2LCAweDcwLCAweDUxfSwKKwl7MHgwNiwgMHhiZSwgMHg1M30sCiAJe30KIH07CiAKIC8qCi0gICBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCisgKiBNYWRlIGJ5IFRvbWFzeiBaYWJsb2NraSAoc2thbGFtYW5kcmFAcG9jenRhLm9uZXQucGwpCiAgKiBTUENBNTA1YiBjaGlwIGJhc2VkIGNhbWVyYXMgaW5pdGlhbGl6YXRpb24gZGF0YQotICoKICAqLwogLyogamZtICovCiAjZGVmaW5lIGluaXRpYWxfYnJpZ2h0bmVzcyAweDdmCS8qIDB4MCh3aGl0ZSktMHhmZihibGFjaykgKi8KQEAgLTMzMiw3ICszMzMsNyBAQAogLyoKICAqIERhdGEgdG8gaW5pdGlhbGl6ZSBhIFNQQ0E1MDUuIENvbW1vbiB0byB0aGUgQ0NEIGFuZCBleHRlcm5hbCBtb2RlcwogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfaW5pdF9kYXRhW11bM10gPSB7CiAvKiBzdGFydCAqLwogCXsweDAyLCAweDAwLCAweDAwfSwJCS8qIGluaXQgKi8KIAl7MHgwMiwgMHgwMCwgMHgwMX0sCkBAIC0zOTYsNyArMzk3LDcgQEAKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgdGhlIGNhbWVyYSB1c2luZyB0aGUgaW50ZXJuYWwgQ0NECiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA1Yl9vcGVuX2RhdGFfY2NkW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTggc3BjYTUwNWJfb3Blbl9kYXRhX2NjZFtdWzNdID0gewogCiAvKiB7MHgwMiwweDAwLDB4MDB9LCAqLwogCXsweDAzLCAweDA0LCAweDAxfSwJCS8qIHJzdCAqLwpAQCAtNDI2LDcgKzQyNyw3IEBACiAJezB4MDUsIDB4MDAsIDB4MTJ9LAogCXsweDA1LCAweDZmLCAweDAwfSwKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwMCwgMHgwMn0sCiAJezB4MDUsIDB4MDEsIDB4MDN9LAogCXsweDA1LCAweDAwLCAweDA0fSwKQEAgLTQzNiw3ICs0MzcsNyBAQAogCXsweDA1LCAweGEwLCAweDA4fSwKIAl7MHgwNSwgMHgwMCwgMHgxMn0sCiAJezB4MDUsIDB4MDIsIDB4MGZ9LAotCXsweDA1LCAxMjgsIDB4MTR9LAkJLyogbWF4IGV4cG9zdXJlIG9mZiAoMD1vbikgKi8KKwl7MHgwNSwgMHg4MCwgMHgxNH0sCQkvKiBtYXggZXhwb3N1cmUgb2ZmICgwPW9uKSAqLwogCXsweDA1LCAweDAxLCAweGIwfSwKIAl7MHgwNSwgMHgwMSwgMHhiZn0sCiAJezB4MDMsIDB4MDIsIDB4MDZ9LApAQCAtNTYwLDI2ICs1NjEsMjYgQEAKIAl7MHgwNiwgMHgzMiwgMHgyMH0sCiAKIAl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzID4+IDYsIDB4MDB9LAotCXsweDA1LCBpbml0aWFsX2JyaWdodG5lc3MgPDwgMiwgMHgwMX0sCisJezB4MDUsIChpbml0aWFsX2JyaWdodG5lc3MgPDwgMikgJiAweGZmLCAweDAxfSwKIAl7MHgwNSwgMHgwNiwgMHhjMX0sCiAJezB4MDUsIDB4NTgsIDB4YzJ9LAotCXsweDA1LCAweDAsIDB4Y2F9LAotCXsweDA1LCAweDAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwMCwgMHgxMX0sCiAJe30KIH07CiAKIHN0YXRpYyBpbnQgcmVnX3dyaXRlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCi0JCSAgICAgX191MTYgcmVnLCBfX3UxNiBpbmRleCwgX191MTYgdmFsdWUpCisJCSAgICAgdTE2IHJlcSwgdTE2IGluZGV4LCB1MTYgdmFsdWUpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKLQkJCXJlZywKKwkJCXJlcSwKIAkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQl2YWx1ZSwgaW5kZXgsIE5VTEwsIDAsIDUwMCk7Ci0JUERFQlVHKERfUEFDSywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsIDB4JXgiLAotCQlyZWcsIGluZGV4LCB2YWx1ZSwgcmV0KTsKKwlQREVCVUcoRF9VU0JPLCAicmVnIHdyaXRlOiAweCUwMngsMHglMDJ4OjB4JTAyeCwgJWQiLAorCQlyZXEsIGluZGV4LCB2YWx1ZSwgcmV0KTsKIAlpZiAocmV0IDwgMCkKIAkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlOiBlcnJvciAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU4Nyw0MiArNTg4LDM0IEBACiAKIC8qIHJldHVybnM6IG5lZ2F0aXZlIGlzIGVycm9yLCBwb3Mgb3IgemVybyBpcyBkYXRhICovCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTE2IHJlZywJLyogYlJlcXVlc3QgKi8KLQkJCV9fdTE2IGluZGV4LAkvKiB3SW5kZXggKi8KLQkJCV9fdTE2IGxlbmd0aCkJLyogd0xlbmd0aCAoMSBvciAyIG9ubHkpICovCisJCQl1MTYgcmVxLAkvKiBiUmVxdWVzdCAqLworCQkJdTE2IGluZGV4KQkvKiB3SW5kZXggKi8KIHsKIAlpbnQgcmV0OwogCi0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gMDsKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJcmVnLAorCQkJcmVxLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkoX191MTYpIDAsCQkvKiB2YWx1ZSAqLwotCQkJKF9fdTE2KSBpbmRleCwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuZ3RoLAorCQkJMCwJCQkvKiB2YWx1ZSAqLworCQkJaW5kZXgsCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDIsCiAJCQk1MDApOwkJCS8qIHRpbWVvdXQgKi8KLQlpZiAocmV0IDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJyZWdfcmVhZCBlcnIgJWQiLCByZXQpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCXJldHVybiAoZ3NwY2FfZGV2LT51c2JfYnVmWzFdIDw8IDgpICsgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1OCBkYXRhW11bM10pCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCByZXQsIGkgPSAwOwogCi0Jd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCB8fCBkYXRhW2ldWzFdICE9IDAgfHwgZGF0YVtpXVsyXSAhPSAwKSB7CisJd2hpbGUgKGRhdGFbaV1bMF0gIT0gMCkgewogCQlyZXQgPSByZWdfd3JpdGUoZGV2LCBkYXRhW2ldWzBdLCBkYXRhW2ldWzJdLCBkYXRhW2ldWzFdKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCVBERUJVRyhEX0VSUiwKLQkJCQkiUmVnaXN0ZXIgd3JpdGUgZmFpbGVkIGZvciAweCV4LDB4JXgsMHgleCIsCi0JCQkJZGF0YVtpXVswXSwgZGF0YVtpXVsxXSwgZGF0YVtpXVsyXSk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlpKys7CiAJfQogCXJldHVybiAwOwpAQCAtNjM2LDE0ICs2MjksMTMgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKIAlpZiAoc2QtPnN1YnR5cGUgIT0gSW50ZWxQQ0NhbWVyYVBybykKLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJZWxzZQkJCS8qIG5vIDY0MHg0ODAgZm9yIEludGVsUENDYW1lcmFQcm8gKi8KLQkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF0gLSAxOwotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKSAtIDE7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAogCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKSB7CiAJCWlmICh3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9pbml0X2RhdGEpKQpAQCAtNjU4LDgxICs2NTAsNzEgQEAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCVBERUJVRyhEX1NUUkVBTSwgIkluaXRpYWxpemluZyBTUENBNTA1Iik7Ci0JaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCi0JCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOwotCWVsc2UKLQkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKLQlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDYsIDB4MTYsIDIpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJUERFQlVHKERfRVJSfERfU1RSRUFNLAotCQkgICAgICAgInJlZ2lzdGVyIHJlYWQgZmFpbGVkIGZvciBhZnRlciB2ZWN0b3IgcmVhZCBlcnIgPSAlZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JUERFQlVHKERfU1RSRUFNLAotCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyA6IDB4JXggc2hvdWxkIGJlIDB4MDEwMSIsCi0JCXJldCAmIDB4ZmZmZik7Ci0KLQlyZXQgPSByZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDYsIDB4MTYsIDB4MGEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUiwgInJlZ2lzdGVyIHdyaXRlIGZhaWxlZCBmb3IgKDYsMHhhLDB4MTYpIGVycj0lZCIsCi0JCSAgICAgICByZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA1LCAweGMyLCAxOCk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CisKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKK30KKwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmV0OworCWludCByZXQsIG1vZGU7CisJc3RhdGljIHU4IG1vZGVfdGJbXVszXSA9IHsKKwkvKgkgIHIwMCAgIHIwNiAgIHIwNwkqLworCQl7MHgwMCwgMHgxMCwgMHgxMH0sCS8qIDY0MHg0ODAgKi8KKwkJezB4MDEsIDB4MWEsIDB4MWF9LAkvKiAzNTJ4Mjg4ICovCisJCXsweDAyLCAweDFjLCAweDFkfSwJLyogMzIweDI0MCAqLworCQl7MHgwNCwgMHgzNCwgMHgzNH0sCS8qIDE3NngxNDQgKi8KKwkJezB4MDUsIDB4NDAsIDB4NDB9CS8qIDE2MHgxMjAgKi8KKwl9OworCisJaWYgKHNkLT5zdWJ0eXBlID09IE54dWx0cmEpCisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDViX29wZW5fZGF0YV9jY2QpOworCWVsc2UKKwkJd3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNV9vcGVuX2RhdGFfY2NkKTsKKwlyZXQgPSByZWdfcmVhZChnc3BjYV9kZXYsIDB4MDYsIDB4MTYpOworCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSfERfQ09ORiwKKwkJICAgICAgICJyZWdpc3RlciByZWFkIGZhaWxlZCBlcnI6ICVkIiwKKwkJICAgICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgIT0gMHgwMTAxKSB7CisJCVBERUJVRyhEX0VSUnxEX0NPTkYsCisJCQkiQWZ0ZXIgdmVjdG9yIHJlYWQgcmV0dXJucyAweCUwNHggc2hvdWxkIGJlIDB4MDEwMSIsCisJCQlyZXQpOworCX0KKworCXJldCA9IHJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNiwgMHgxNiwgMHgwYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweGMyLCAweDEyKTsKIAogCS8qIG5lY2Vzc2FyeSBiZWNhdXNlIHdpdGhvdXQgaXQgd2UgY2FuIHNlZSBzdHJlYW0KIAkgKiBvbmx5IG9uY2UgYWZ0ZXIgbG9hZGluZyBtb2R1bGUgKi8KIAkvKiBzdG9wcGluZyB1c2IgcmVnaXN0ZXJzIFRvbWFzeiBjaGFuZ2UgKi8KLQlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAsIDB4MCk7Ci0Jc3dpdGNoIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdikgewotCWNhc2UgMDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwMCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MTApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDEwKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDAxKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgxYSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MWEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDIpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDFjKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgxZCk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNCk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MzQpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDM0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgNTogKi8KLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwNSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4NDApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDQwKTsKLQkJYnJlYWs7Ci0JfQotLyogRW5hYmxlIElTTyBwYWNrZXQgbWFjaGluZSAtIHNob3VsZCB3ZSBkbyB0aGlzIGhlcmUgb3IgaW4gSVNPQyBpbml0ID8gKi8KKwlyZWdfd3JpdGUoZGV2LCAweDAyLCAweDAwLCAweDAwKTsKKworCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdjsKKwlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19DT01QUkVTUywgMHgwMCwgbW9kZV90Ylttb2RlXVswXSk7CisJcmVnX3dyaXRlKGRldiwgU1BDQTUwWF9SRUdfQ09NUFJFU1MsIDB4MDYsIG1vZGVfdGJbbW9kZV1bMV0pOworCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX0NPTVBSRVNTLCAweDA3LCBtb2RlX3RiW21vZGVdWzJdKTsKKwogCXJldCA9IHJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX1VTQiwKIAkJCSBTUENBNTBYX1VTQl9DVFJMLAogCQkJIFNQQ0E1MFhfQ1VTQl9FTkFCTEUpOwogCi0vKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgwKTsgKi8KLS8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgwLCAweDEpOyAqLwotLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDExLCAweDIpOyAqLworCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MCwxNSArNzMyLDE1IEBACiAKIAkvKiBUaGlzIG1heWJlIHJlc2V0IG9yIHBvd2VyIGNvbnRyb2wgKi8KIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDMsIDB4MjApOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMSwgMHgwKTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDAsIDB4MSk7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDEpOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMSwgMHhmKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDEsIDB4MDApOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwMywgMHgwMCwgMHgwMSk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDEwLCAweDAxKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MTEsIDB4MGYpOwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC03NzEsNyArNzUzLDYgQEAKIAkJCQlkYXRhLCBsZW4pOwogCQlicmVhazsKIAljYXNlIDB4ZmY6CQkJLyogZHJvcCAqLwotLyoJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkYXRhICs9IDE7CkBAIC03ODIsMjQgKzc2Myw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlfX3U4IGJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDAsICgyNTUgLSBicmlnaHRuZXNzKSA+PiA2KTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDUsIDB4MDEsICgyNTUgLSBicmlnaHRuZXNzKSA8PCAyKTsKLQotfQotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmJyaWdodG5lc3MgPSAyNTUKLQkJLSAoKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwMSwgMSkgPj4gMikKLQkJCSsgKHJlZ19yZWFkKGdzcGNhX2RldiwgNSwgMHgwLCAxKSA8PCA2KSk7Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC04MTQsNyArNzc3LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtODYzLDggKzgyNSwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCmluZGV4IDk2ZTI1MTIuLjNhMGM4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNi5jCkBAIC0xOTMsMjQgKzE5Myw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNwY2E1MDZfUmVhZEkyYyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTE2IHJlZykKLXsKLQlpbnQgcmV0cnkgPSA2MDsKLQotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCBTQUE3MTEzX0kyQ19CQVNFX1dSSVRFLCAweDAwMDQpOwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCByZWcsIDB4MDAwMSk7Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4MDcsIDB4MDEsIDB4MDAwMik7Ci0Jd2hpbGUgKC0tcmV0cnkpIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCAweDA3LCAweDAwMDMsIDIpOwotCQlpZiAoKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSB8IGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSkgPT0gMHgwMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAocmV0cnkgPT0gMCkKLQkJcmV0dXJuIC0xOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwNywgMHgwMDAwLCAxKTsKLQlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotfQotCiBzdGF0aWMgdm9pZCBzcGNhNTA2X1NldE5vcm1lSW5wdXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJCSBfX3UxNiBub3JtZSwKIAkJCQkgX191MTYgY2hhbm5lbCkKQEAgLTMwMyw3ICsyODUsNiBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOwogCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKQEAgLTU5NiwxMyArNTc3LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19icmlnaHQpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjEyLDEzICs1ODYsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfY29udHJhc3QpOwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTYyOCwxMyArNTk1LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmNvbG9ycyA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfc2F0dXJhdGlvbik7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjQ0LDEzICs2MDQsNiBAQAogCXNwY2E1MDZfV3JpdGVJMmMoZ3NwY2FfZGV2LCAweDAxLCAweDA5KTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0aHVlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+aHVlID0gc3BjYTUwNl9SZWFkSTJjKGdzcGNhX2RldiwgU0FBNzExM19odWUpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjY1LDcgKzYxOCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTY4NCw3ICs2MzYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTcwMyw3ICs2NTQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQpAQCAtNzIyLDcgKzY3Miw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0aHVlKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5odWU7CiAJcmV0dXJuIDA7CiB9CkBAIC03NzIsOCArNzIxLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCmluZGV4IGJlNWQ3NDAuLmFkYWNmODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwOC5jCkBAIC0xMDEsOCArMTAxLDcgQEAKICAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCiAgKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bM10gPQotI2RlZmluZSBJR04oeCkJCQkvKiBub3RoaW5nICovCitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfaW5pdF9kYXRhW11bMl0gPQogewogCS8qICBsaW5lICAgVVJCICAgICAgdmFsdWUsIGluZGV4ICovCiAJLyogNDQyNzQgIDE4MDQgKi8gezB4MDAwMCwgMHg4NzBifSwKQEAgLTU4OSwxMSArNTg4LDEwIEBACiAJe30KIH07CiAKLQogLyoKICAqIEluaXRpYWxpemF0aW9uIGRhdGEgZm9yIEludGVsIEVhc3lQQyBDYW1lcmEgQ1MxMTAKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhjczExMF9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOGNzMTEwX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDAsIDB4ODcwYn0sIC8qIFJlc2V0IENUTDMgKi8KIAl7MHgwMDAzLCAweDgxMTF9LCAvKiBTb2Z0IFJlc2V0IGNvbXByZXNzaW9uLCBtZW1vcnksIFRHICYgQ0RTUCAqLwogCXsweDAwMDAsIDB4ODExMX0sIC8qIE5vcm1hbCBvcGVyYXRpb24gb24gcmVzZXQgKi8KQEAgLTY3Nyw3ICs2NzUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOF9zaWdodGNhbV9pbml0X2RhdGFbXVsyXSA9IHsKIC8qIFRoaXMgbGluZSBzZWVtcyB0byBzZXR1cCB0aGUgZnJhbWUvY2FudmFzICovCiAJLyozNjggICovIHsweDAwMGYsIDB4ODQwMn0sCiAKQEAgLTc2MCw3ICs3NTgsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF9zaWdodGNhbTJfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YVtdWzJdID0gewogLyogMzUgKi8gezB4MDAyMCwgMHg4MTEyfSwKIAogLyogMzYgKi8gezB4MDAwZiwgMHg4NDAyfSwKQEAgLTExMDcsNyArMTEwNSw3IEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gZGF0YSBmb3IgQ3JlYXRpdmUgV2ViY2FtIFZpc3RhCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHUxNiBzcGNhNTA4X3Zpc3RhX2luaXRfZGF0YVtdWzJdID0gewogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHJlZ2lzdGVyICovCiAJezB4MDAwMCwgMHg4NzBifSwJLyogUmVzZXQgQ1RMMyAqLwogCXsweDAwMjAsIDB4ODExMn0sCS8qIFZpZGVvIERyb3AgcGFja2V0IGVuYWJsZSAqLwpAQCAtMTMwOSwxOCArMTMwNywxOCBAQAogCiAJezB4MDA1MCwgMHg4NzAzfSwKIAl7MHgwMDAyLCAweDg3MDR9LAkvKiBFeHRlcm5hbCBpbnB1dCBDS0l4MSAqLwotCXsweDAwMDEsIDB4ODcwQ30sCS8qIFNlbGVjdCBDS094MiBvdXRwdXQgKi8KLQl7MHgwMDlBLCAweDg2MDB9LAkvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCisJezB4MDAwMSwgMHg4NzBjfSwJLyogU2VsZWN0IENLT3gyIG91dHB1dCAqLworCXsweDAwOWEsIDB4ODYwMH0sCS8qIExpbmUgbWVtb3J5IFJlYWQgQ291bnRlciAoTCkgKi8KIAl7MHgwMDAxLCAweDg2MDZ9LCAgLyogMSBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEgpIFJlc3VsdDogKGQpNDEwICovCiAJezB4MDAyMywgMHg4NjAxfSwKIAl7MHgwMDEwLCAweDg2MDJ9LAotCXsweDAwMEEsIDB4ODYwM30sCisJezB4MDAwYSwgMHg4NjAzfSwKIAl7MHgwMDlBLCAweDg2MDB9LAotCXsweDAwMDEsIDB4ODY1Qn0sCS8qIDEgSG9yaXpvbnRhbCBPZmZzZXQgZm9yIFZhbGlkIFBpeGVsKEwpICovCi0JezB4MDAwMywgMHg4NjVDfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAoTCkgKi8KLQl7MHgwMDU4LCAweDg2NUR9LAkvKiBIb3Jpem9udGFsIHZhbGlkIHBpeGVscyB3aW5kb3cgKEwpICovCi0JezB4MDA0OCwgMHg4NjVFfSwJLyogVmVydGljYWwgdmFsaWQgbGluZXMgd2luZG93IChMKSAqLwotCXsweDAwMDAsIDB4ODY1Rn0sCisJezB4MDAwMSwgMHg4NjVifSwJLyogMSBIb3Jpem9udGFsIE9mZnNldCBmb3IgVmFsaWQgUGl4ZWwoTCkgKi8KKwl7MHgwMDAzLCAweDg2NWN9LAkvKiBWZXJ0aWNhbCBvZmZzZXQgZm9yIHZhbGlkIGxpbmVzIChMKSAqLworCXsweDAwNTgsIDB4ODY1ZH0sCS8qIEhvcml6b250YWwgdmFsaWQgcGl4ZWxzIHdpbmRvdyAoTCkgKi8KKwl7MHgwMDQ4LCAweDg2NWV9LAkvKiBWZXJ0aWNhbCB2YWxpZCBsaW5lcyB3aW5kb3cgKEwpICovCisJezB4MDAwMCwgMHg4NjVmfSwKIAogCXsweDAwMDYsIDB4ODY2MH0sCiAJCSAgICAvKiBFbmFibGUgbmliYmxlIGRhdGEgaW5wdXQsIHNlbGVjdCBuaWJibGUgaW5wdXQgb3JkZXIgKi8KQEAgLTEzMjgsNjMgKzEzMjYsNjMgQEAKIAl7MHgwMDEzLCAweDg2MDh9LAkvKiBBMTEgQ29lZmljaWVudHMgZm9yIGNvbG9yIGNvcnJlY3Rpb24gKi8KIAl7MHgwMDI4LCAweDg2MDl9LAogCQkgICAgLyogTm90ZTogdGhlc2UgdmFsdWVzIGFyZSBjb25maXJtZWQgYXQgdGhlIGVuZCBvZiBhcnJheSAqLwotCXsweDAwMDUsIDB4ODYwQX0sCS8qIC4uLiAqLwotCXsweDAwMjUsIDB4ODYwQn0sCi0JezB4MDBFMSwgMHg4NjBDfSwKLQl7MHgwMEZBLCAweDg2MER9LAotCXsweDAwRjQsIDB4ODYwRX0sCi0JezB4MDBFOCwgMHg4NjBGfSwKKwl7MHgwMDA1LCAweDg2MGF9LAkvKiAuLi4gKi8KKwl7MHgwMDI1LCAweDg2MGJ9LAorCXsweDAwZTEsIDB4ODYwY30sCisJezB4MDBmYSwgMHg4NjBEfSwKKwl7MHgwMGY0LCAweDg2MGV9LAorCXsweDAwZTgsIDB4ODYwZn0sCiAJezB4MDAyNSwgMHg4NjEwfSwJLyogQTMzIENvZWYuICovCi0JezB4MDBGQywgMHg4NjExfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IFIgKi8KKwl7MHgwMGZjLCAweDg2MTF9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogUiAqLwogCXsweDAwMDEsIDB4ODYxMn0sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBHciAqLwotCXsweDAwRkUsIDB4ODYxM30sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBCICovCisJezB4MDBmZSwgMHg4NjEzfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEIgKi8KIAl7MHgwMDAwLCAweDg2MTR9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogR2IgKi8KIAogCXsweDAwNjQsIDB4ODY1MX0sCS8qIFIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTJ9LAkvKiBHciBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwogCXsweDAwNjYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDQwLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlIChMKSAqLwotCXsweDAwMDEsIDB4ODYzRn0sCS8qIEVuYWJsZSBmaXhlZCBnYW1tYSBjb3JyZWN0aW9uICovCisJezB4MDAwMSwgMHg4NjNmfSwJLyogRW5hYmxlIGZpeGVkIGdhbW1hIGNvcnJlY3Rpb24gKi8KIAotCXsweDAwQTEsIDB4ODY1Nn0sCS8qIFNpemUgLSBXaW5kb3cxOiAyNTZ4MjU2LCBXaW5kb3cyOiAxMjh4MTI4ICovCisJezB4MDBhMSwgMHg4NjU2fSwJLyogU2l6ZSAtIFdpbmRvdzE6IDI1NngyNTYsIFdpbmRvdzI6IDEyOHgxMjggKi8KIAkvKiBVViBkaXZpc2lvbjogVVYgbm8gY2hhbmdlLCBFbmFibGUgTmV3IGVkZ2UgZW5oYW5jZW1lbnQgKi8KIAl7MHgwMDE4LCAweDg2NTd9LAkvKiBFZGdlIGdhaW4gaGlnaCB0aHJlc2hvbGQgKi8KIAl7MHgwMDIwLCAweDg2NTh9LAkvKiBFZGdlIGdhaW4gbG93IHRocmVzaG9sZCAqLwogCXsweDAwMEEsIDB4ODY1OX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGhpZ2ggdGhyZXNob2xkICovCi0JezB4MDAwNSwgMHg4NjVBfSwJLyogRWRnZSBiYW5kd2lkdGggbG93IHRocmVzaG9sZCAqLworCXsweDAwMDUsIDB4ODY1YX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGxvdyB0aHJlc2hvbGQgKi8KIAl7MHgwMDY0LCAweDg2MDd9LAkvKiBVViBmaWx0ZXIgZW5hYmxlICovCiAKIAl7MHgwMDE2LCAweDg2NjB9LAotCXsweDAwMDAsIDB4ODZCMH0sCS8qIEJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIGFkZHJlc3MgKi8KLQl7MHgwMERDLCAweDg2QjF9LAkvKiBYIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwMDksIDB4ODZCM30sCS8qIFkgY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLwotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMCwgMHg4NmIwfSwJLyogQmFkIHBpeGVscyBjb21wZW5zYXRpb24gYWRkcmVzcyAqLworCXsweDAwZGMsIDB4ODZiMX0sCS8qIFggY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLworCXsweDAwMDAsIDB4ODZiMn0sCisJezB4MDAwOSwgMHg4NmIzfSwJLyogWSBjb29yZCBmb3IgYmFkIHBpeGVscyBjb21wZW5zYXRpb24gKEwpICovCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDEsIDB4ODZCMH0sCi0JezB4MDBGNSwgMHg4NkIxfSwKLQl7MHgwMDAwLCAweDg2QjJ9LAotCXsweDAwQzYsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKKwl7MHgwMDAxLCAweDg2YjB9LAorCXsweDAwZjUsIDB4ODZiMX0sCisJezB4MDAwMCwgMHg4NmIyfSwKKwl7MHgwMGM2LCAweDg2YjN9LAorCXsweDAwMDAsIDB4ODZiNH0sCiAKLQl7MHgwMDAyLCAweDg2QjB9LAotCXsweDAwMUMsIDB4ODZCMX0sCi0JezB4MDAwMSwgMHg4NkIyfSwKLQl7MHgwMEQ3LCAweDg2QjN9LAotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMiwgMHg4NmIwfSwKKwl7MHgwMDFjLCAweDg2YjF9LAorCXsweDAwMDEsIDB4ODZiMn0sCisJezB4MDBkNywgMHg4NmIzfSwKKwl7MHgwMDAwLCAweDg2YjR9LAogCi0JezB4MDAwMywgMHg4NkIwfSwKLQl7MHgwMDFDLCAweDg2QjF9LAotCXsweDAwMDEsIDB4ODZCMn0sCi0JezB4MDBEOCwgMHg4NkIzfSwKLQl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMDMsIDB4ODZiMH0sCisJezB4MDAxYywgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDQsIDB4ODZCMH0sCi0JezB4MDAxRCwgMHg4NkIxfSwKLQl7MHgwMDAxLCAweDg2QjJ9LAotCXsweDAwRDgsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKLQl7MHgwMDFFLCAweDg2NjB9LAorCXsweDAwMDQsIDB4ODZiMH0sCisJezB4MDAxZCwgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDgsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKKwl7MHgwMDFlLCAweDg2NjB9LAogCiAJLyogUkVBRCB7IDAsIDB4MDAwMCwgMHg4NjA4IH0gLT4KIAkJMDAwMDogMTMgICovCkBAIC0xNDQ5LDcgKzE0NDcsNyBAQAogfQogCiBzdGF0aWMgaW50IHdyaXRlX3ZlY3RvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQljb25zdCBfX3UxNiBkYXRhW11bM10pCisJCQljb25zdCB1MTYgZGF0YVtdWzJdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0LCBpID0gMDsKQEAgLTE0ODcsNyArMTQ4NSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJXaW5kb3cgMSBhdmVyYWdlIGx1bWluYW5jZTogJWQiLCBkYXRhMSk7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCkBAIC0xNTkzLDEzICsxNTkwLDYgQEAKIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODY1NCwgYnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDg2NTEpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTYxNCw3ICsxNjA0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw4ICsxNjU1LDExIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKaW5kZXggM2M5Mjg4MC4uYzk5YzVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTYxLmMKQEAgLTE0MSwzOCArMTQxLDM4IEBACiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1dJTjFHQkFWRSAxNAogI2RlZmluZSBTUENBNTYxX09GRlNFVF9GUkVRIDE1CiAjZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX1ZTWU5DIDE2Ci0jZGVmaW5lIFNQQ0E1NjFfT0ZGU0VUX0RBVEEgMQogI2RlZmluZSBTUENBNTYxX0lOREVYX0kyQ19CQVNFIDB4ODgwMAogI2RlZmluZSBTUENBNTYxX1NOQVBCSVQgMHgyMAogI2RlZmluZSBTUENBNTYxX1NOQVBDVFJMIDB4NDAKIAotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGExW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTE2IHJldjcyYV9yZXNldFtdWzJdID0gewogCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KIAl7MHgwMDAxLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCiAJezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ICovCisJe30KK307CitzdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTFbXVsyXSA9IHsKIAl7MHgwMDAzLCAweDg3MDF9LAkvKiBQQ0xLIGNsb2NrIGRlbGF5IGFkanVzdG1lbnQgKi8KIAl7MHgwMDAxLCAweDg3MDN9LAkvKiBIU1lOQyBmcm9tIGNtb3MgaW52ZXJ0ZWQgKi8KIAl7MHgwMDExLCAweDgxMTh9LAkvKiBFbmFibGUgYW5kIGNvbmYgc2Vuc29yICovCiAJezB4MDAwMSwgMHg4MTE4fSwJLyogQ29uZiBzZW5zb3IgKi8KIAl7MHgwMDkyLCAweDg4MDR9LAkvKiBJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZSAqLwogCXsweDAwMTAsIDB4ODgwMn0sCS8qIDB4ODh4eCByZWdpc3RlcnMsIHNvIEkgd29uJ3QgKi8KLQl7MHgwMDBkLCAweDg4MDV9LAkvKiBzZW5zb3IgZGVmYXVsdCBzZXR0aW5nICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0gewotCQkJCS8qIG1zLXdpbiB2YWx1ZXMgKi8KLQl7MHgwMDAxLCAweDAwMTh9LAkvKiAweDAxIDwtIDB4MGQgKi8KLQl7MHgwMDAyLCAweDAwNjV9LAkvKiAweDAyIDwtIDB4MTggKi8KLQl7MHgwMDA0LCAweDAxMjF9LAkvKiAweDA0IDwtIDB4MDE2NSAqLwotCXsweDAwMDUsIDB4MDBhYX0sCS8qIDB4MDUgPC0gMHgyMSAqLwotCXsweDAwMDcsIDB4MDAwNH0sCS8qIDB4MDcgPC0gMHhhYSAqLwotCXsweDAwMjAsIDB4MTUwMn0sCS8qIDB4MjAgPC0gMHgxNTA0ICovCi0JezB4MDAzOSwgMHgwMDEwfSwJLyogMHgzOSA8LSAweDAyICovCi0JezB4MDAzNSwgMHgwMDQ5fSwJLyogMHgzNSA8LSAweDEwICovCi0JezB4MDAwOSwgMHgxMDBifSwJLyogMHgwOSA8LSAweDEwNDkgKi8KLQl7MHgwMDI4LCAweDAwMGZ9LAkvKiAweDI4IDwtIDB4MGIgKi8KLQl7MHgwMDNiLCAweDAwM2N9LAkvKiAweDNiIDwtIDB4MGYgKi8KLQl7MHgwMDNjLCAweDAwMDB9LAkvKiAweDNjIDwtIDB4MDAgKi8KK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMVtdWzJdID0geworCXsweDAwMDEsIDB4MDAwZH0sCisJezB4MDAwMiwgMHgwMDE4fSwKKwl7MHgwMDA0LCAweDAxNjV9LAorCXsweDAwMDUsIDB4MDAyMX0sCisJezB4MDAwNywgMHgwMGFhfSwKKwl7MHgwMDIwLCAweDE1MDR9LAorCXsweDAwMzksIDB4MDAwMn0sCisJezB4MDAzNSwgMHgwMDEwfSwKKwl7MHgwMDA5LCAweDEwNDl9LAorCXsweDAwMjgsIDB4MDAwYn0sCisJezB4MDAzYiwgMHgwMDBmfSwKKwl7MHgwMDNjLCAweDAwMDB9LAogCXt9CiB9Owogc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEyW11bMl0gPSB7CkBAIC0xOTAsMTUgKzE5MCwxMCBAQAogCXsweDAwMDIsIDB4ODIwMX0sCS8qIE91dHB1dCBhZGRyZXNzIGZvciByL3cgc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDgsIDB4ODIwMH0sCS8qIENsZWFyIHZhbGlkIGJpdCBmb3Igc2VyaWFsIEVFUFJPTSAqLwogCXsweDAwMDEsIDB4ODIwMH0sCS8qIE9wck1vZGUgdG8gYmUgZXhlY3V0ZWQgYnkgaGFyZHdhcmUgKi8KLQl7MHgwMDA3LCAweDgyMDF9LAkvKiBPdXRwdXQgYWRkcmVzcyBmb3Igci93IHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDA4LCAweDgyMDB9LAkvKiBDbGVhciB2YWxpZCBiaXQgZm9yIHNlcmlhbCBFRVBST00gKi8KLQl7MHgwMDAxLCAweDgyMDB9LAkvKiBPcHJNb2RlIHRvIGJlIGV4ZWN1dGVkIGJ5IGhhcmR3YXJlICovCi0JezB4MDAxMCwgMHg4NjYwfSwJLyogQ29tcGVuc2F0aW9uIG1lbW9yeSBzdHVmZiAqLwotCXsweDAwMTgsIDB4ODY2MH0sCS8qIENvbXBlbnNhdGlvbiBtZW1vcnkgc3R1ZmYgKi8KLQotCXsweDAwMDQsIDB4ODYxMX0sCS8qIFIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNCwgMHg4NjEyfSwJLyogR3Igb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCi0JezB4MDAwNywgMHg4NjEzfSwJLyogQiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKy8qIGZyb20gbXMtd2luICovCisJezB4MDAwMCwgMHg4NjExfSwJLyogUiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMGZkLCAweDg2MTJ9LAkvKiBHciBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KKwl7MHgwMDAzLCAweDg2MTN9LAkvKiBCIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwMDAsIDB4ODYxNH0sCS8qIEdiIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwogLyogZnJvbSBtcy13aW4gKi8KIAl7MHgwMDM1LCAweDg2NTF9LAkvKiBSIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KQEAgLTIwNiw4ICsyMDEsOCBAQAogCXsweDAwNWYsIDB4ODY1M30sCS8qIEIgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAqLwogCXsweDAwNDAsIDB4ODY1NH0sCS8qIEdiIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDAyLCAweDg1MDJ9LAkvKiBNYXhpbXVtIGF2ZXJhZ2UgYml0IHJhdGUgc3R1ZmYgKi8KLQogCXsweDAwMTEsIDB4ODgwMn0sCisKIAl7MHgwMDg3LCAweDg3MDB9LAkvKiBTZXQgbWFzdGVyIGNsb2NrICg5Nk1oej8/Pz8pICovCiAJezB4MDA4MSwgMHg4NzAyfSwJLyogTWFzdGVyIGNsb2NrIG91dHB1dCBlbmFibGUgKi8KIApAQCAtMjE4LDEwNCArMjEzLDE1IEBACiAJezB4MDAwMywgMHg4NjVjfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X3NlbnNvcjJbXVsyXSA9IHsKLQkJCQkvKiBtcy13aW4gdmFsdWVzICovCi0JezB4MDAwMywgMHgwMTIxfSwJLyogMHgwMyA8LSAweDAxIDB4MjEgLy8yODkgKi8KLQl7MHgwMDA0LCAweDAxNjV9LAkvKiAweDA0IDwtIDB4MDEgMHg2NSAvLzM1NyAqLwotCXsweDAwMDUsIDB4MDAyZn0sCS8qIDB4MDUgPC0gMHgyZiAqLwotCXsweDAwMDYsIDB4MDAwMH0sCS8qIDB4MDYgPC0gMCAqLwotCXsweDAwMGEsIDB4MDAwMn0sCS8qIDB4MGEgPC0gMiAqLwotCXsweDAwMDksIDB4MTA2MX0sCS8qIDB4MDkgPC0gMHgxMDYxICovCi0JezB4MDAzNSwgMHgwMDE0fSwJLyogMHgzNSA8LSAweDE0ICovCi0Je30KLX07Ci1zdGF0aWMgY29uc3QgX191MTYgcmV2NzJhX2luaXRfZGF0YTNbXVsyXSA9IHsKLQl7MHgwMDMwLCAweDgxMTJ9LAkvKiBJU08gYW5kIGRyb3AgcGFja2V0IGVuYWJsZSAqLwotLypmaXhtZTogc2hvdWxkIHN0b3AgaGVyZSovCi0JezB4MDAwMCwgMHg4MTEyfSwJLyogU29tZSBraW5kIG9mIHJlc2V0ID8/Pz8gKi8KLQl7MHgwMDA5LCAweDgxMTh9LAkvKiBFbmFibGUgc2Vuc29yIGFuZCBzZXQgc3RhbmRieSAqLwotCXsweDAwMDAsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KLQl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCi0JezB4MDAwMSwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwotCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8gKi8KLQl7MHgwMDAzLCAweDg3MDF9LAotCXsweDAwMDEsIDB4ODcwM30sCi0JezB4MDAxMSwgMHg4MTE4fSwKLQl7MHgwMDAxLCAweDgxMTh9LAotCS8qKioqKioqKioqKioqKiovCi0JezB4MDA5MiwgMHg4ODA0fSwKLQl7MHgwMDEwLCAweDg4MDJ9LAotCXsweDAwMGQsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMTgsIDB4ODgwNX0sCi0JezB4MDAwMiwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwNjUsIDB4ODgwNX0sCi0JezB4MDAwNCwgMHg4ODAxfSwKLQl7MHgwMDAxLCAweDg4MDB9LAotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwNSwgMHg4ODAxfSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwYWEsIDB4ODgwNX0sCi0JezB4MDAwNywgMHg4ODAxfSwJLyogbW9kZSAweGFhICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDV9LAotCXsweDAwMjAsIDB4ODgwMX0sCi0JezB4MDAxNSwgMHg4ODAwfSwJLyogbW9kZSAweDA0MTUgKi8KLQl7MHgwMDAyLCAweDg4MDV9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDEwLCAweDg4MDV9LAotCXsweDAwMzUsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDQ5LCAweDg4MDV9LAotCXsweDAwMDksIDB4ODgwMX0sCi0JezB4MDAxMCwgMHg4ODAwfSwKLQl7MHgwMDBiLCAweDg4MDV9LAotCXsweDAwMjgsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDBmLCAweDg4MDV9LAotCXsweDAwM2IsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwM2MsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDAyLCAweDg1MDJ9LAotCXsweDAwMzksIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCi0JezB4MDA4NywgMHg4NzAwfSwJLyogb3ZlcndyaXRlIGJ5IHN0YXJ0ICovCi0JezB4MDA4MSwgMHg4NzAyfSwKLQl7MHgwMDAwLCAweDg1MDB9LAotLyoJezB4MDAxMCwgMHg4NTAwfSwgIC0tIFByZXZpb3VzIGxpbmUgd2FzIHRoaXMgKi8KLQl7MHgwMDAyLCAweDg2NWJ9LAotCXsweDAwMDMsIDB4ODY1Y30sCi0JLyoqKioqKioqKioqKioqKi8KLQl7MHgwMDAzLCAweDg4MDF9LAkvKiAweDEyMS0+IDI4OSAqLwotCXsweDAwMjEsIDB4ODgwNX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDA0LCAweDg4MDF9LAkvKiAweDE2NSAtPiAzNTcgKi8KLQl7MHgwMDY1LCAweDg4MDV9LAotCXsweDAwMDEsIDB4ODgwMH0sCi0JezB4MDAwNSwgMHg4ODAxfSwJLyogMHgyZiAvL2JsYW5raW5nIGNvbnRyb2wgY29sb25uZSAqLwotCXsweDAwMmYsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDA2LCAweDg4MDF9LAkvKiAweDAwIC8vYmxhbmtpbmcgbW9kZSByb3cgKi8KLQl7MHgwMDAwLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwYSwgMHg4ODAxfSwJLyogMHgwMSAvLzB4MDIgKi8KLQl7MHgwMDAxLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwOSwgMHg4ODAxfSwJLyogMHgxMDYxIC0gc2V0ZXhwb3N1cmUgdGltZXMgJiYgcGl4ZWwgY2xvY2sKK3N0YXRpYyBjb25zdCB1MTYgcmV2NzJhX2luaXRfc2Vuc29yMltdWzJdID0geworCXsweDAwMDMsIDB4MDEyMX0sCisJezB4MDAwNCwgMHgwMTY1fSwKKwl7MHgwMDA1LCAweDAwMmZ9LAkvKiBibGFua2luZyBjb250cm9sIGNvbHVtbiAqLworCXsweDAwMDYsIDB4MDAwMH0sCS8qIGJsYW5raW5nIG1vZGUgcm93Ki8KKwl7MHgwMDBhLCAweDAwMDJ9LAorCXsweDAwMDksIDB4MTA2MX0sCS8qIHNldGV4cG9zdXJlIHRpbWVzICYmIHBpeGVsIGNsb2NrCiAJCQkJICogMDAwMSAwIHwgMDAwIDAxMTAgMDAwMSAqLwotCXsweDAwNjEsIDB4ODgwNX0sCS8qIDYxIDMxICovCi0JezB4MDAwOCwgMHg4ODAwfSwJLyogMDggKi8KLQl7MHgwMDM1LCAweDg4MDF9LAkvKiAweDE0IC0gc2V0IGdhaW4gZ2VuZXJhbCAqLwotCXsweDAwMWYsIDB4ODgwNX0sCS8qIDB4MTQgKi8KLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGUsIDB4ODExMn0sCS8qIHdoaXRlIGJhbGFuY2UgLSB3YXMgMzAgKi8KKwl7MHgwMDM1LCAweDAwMTR9LAogCXt9CiB9OwogCkBAIC00NjAsNiArMzY2LDcgQEAKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDMsIDEpOwogCQlpZiAoIWdzcGNhX2Rldi0+dXNiX2J1ZlswXSkKIAkJCXJldHVybjsKKwkJbXNsZWVwKDEwKTsKIAl9IHdoaWxlICgtLXJldHJ5KTsKIH0KIApAQCAtNDc5LDYgKzM4Niw3IEBACiAJCQlyZWdfcihnc3BjYV9kZXYsIDB4ODgwNSwgMSk7CiAJCQlyZXR1cm4gKChpbnQpIHZhbHVlIDw8IDgpIHwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogCQl9CisJCW1zbGVlcCgxMCk7CiAJfSB3aGlsZSAoLS1yZXRyeSk7CiAJcmV0dXJuIC0xOwogfQpAQCAtNTQxLDcgKzQ0OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAlnc3BjYV9kZXYtPm5iYWx0ID0gNyArIDE7CS8qIGNob29zZSBhbHRlcm5hdGUgNyBmaXJzdCAqLwogCiAJc2QtPmNoaXBfcmV2aXNpb24gPSBpZC0+ZHJpdmVyX2luZm87CkBAIC01NzIsMTEgKzQ3OSwxMyBAQAogc3RhdGljIGludCBzZF9pbml0XzcyYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJUERFQlVHKERfU1RSRUFNLCAiQ2hpcCByZXZpc2lvbjogMDcyYSIpOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9yZXNldCk7CisJbXNsZWVwKDIwMCk7CiAJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfZGF0YTEpOwogCXdyaXRlX3NlbnNvcl83MmEoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9zZW5zb3IxKTsKIAl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMik7CiAJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjIpOwotCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGEzKTsKKwlyZWdfd192YWwoZ3NwY2FfZGV2LT5kZXYsIDB4ODExMiwgMHgzMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMSwxMSArNjQwLDE4IEBACiAJaW50IENsY2s7CiAJaW50IG1vZGU7CiAKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfcmVzZXQpOworCW1zbGVlcCgyMDApOworCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGExKTsKKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChtb2RlKSB7CiAJZGVmYXVsdDoKLS8qCWNhc2UgMDoKLQljYXNlIDE6ICovCisJY2FzZSAwOgorCQlDbGNrID0gMHgyNzsJCS8qIG1zLXdpbiAweDg3ICovCisJCWJyZWFrOworCWNhc2UgMToKIAkJQ2xjayA9IDB4MjU7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTc0NSwxMyArNjYxLDE0IEBACiAJCUNsY2sgPSAweDIxOwogCQlicmVhazsKIAl9Ci0JcmVnX3dfdmFsKGRldiwgMHg4NTAwLCBtb2RlKTsJLyogbW9kZSAqLwogCXJlZ193X3ZhbChkZXYsIDB4ODcwMCwgQ2xjayk7CS8qIDB4MjcgY2xvY2sgKi8KLQlyZWdfd192YWwoZGV2LCAweDgxMTIsIDB4MTAgfCAweDIwKTsKKwlyZWdfd192YWwoZGV2LCAweDg3MDIsIDB4ODEpOworCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KKwl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMik7CiAJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIC8qCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsJICogZml4bWU6IGJhZCB2YWx1ZXMgKi8KLQlzZXR3aGl0ZShnc3BjYV9kZXYpOwogCXNldGF1dG9nYWluKGdzcGNhX2Rldik7CisJcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2NywxMiArNzg0LDExIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0Jc3dpdGNoIChkYXRhWzBdKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCisJbGVuLS07CisJc3dpdGNoICgqZGF0YSsrKSB7CQkJLyogc2VxdWVuY2UgbnVtYmVyICovCiAJY2FzZSAwOgkJCQkJLyogc3RhcnQgb2YgZnJhbWUgKi8KIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCWRhdGEsIDApOwotCQlkYXRhICs9IFNQQ0E1NjFfT0ZGU0VUX0RBVEE7Ci0JCWxlbiAtPSBTUENBNTYxX09GRlNFVF9EQVRBOwogCQlpZiAoZGF0YVsxXSAmIDB4MTApIHsKIAkJCS8qIGNvbXByZXNzZWQgYmF5ZXIgKi8KIAkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKQEAgLTg5Myw4ICs4MDksNiBAQAogCWNhc2UgMHhmZjoJCQkvKiBkcm9wIChlbXB0eSBtcGFja2V0cykgKi8KIAkJcmV0dXJuOwogCX0KLQlkYXRhKys7Ci0JbGVuLS07CiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KIApAQCAtMTE5Nyw4ICsxMTExLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRlM2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDUuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIFNROTA1IHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBZGFtIEJha2VyIGFuZCBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogSGlzdG9yeSBhbmQgQWNrbm93bGVkZ21lbnRzCisgKgorICogVGhlIG9yaWdpbmFsIExpbnV4IGRyaXZlciBmb3IgU1E5MDUgYmFzZWQgY2FtZXJhcyB3YXMgd3JpdHRlbiBieQorICogTWFyY2VsbCBMZW5neWVsIGFuZCBmdXJ0ZXIgZGV2ZWxvcGVkIGJ5IG1hbnkgb3RoZXIgY29udHJpYnV0ZXJzCisgKiBhbmQgaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zcWNhbS8KKyAqCisgKiBUaGlzIGRyaXZlciB0YWtlcyBhZHZhbnRhZ2Ugb2YgdGhlIHJldmVyc2UgZW5naW5lZXJpbmcgd29yayBkb25lIGZvcgorICogdGhhdCBkcml2ZXIgYW5kIGZvciBsaWJncGhvdG8yIGJ1dCBzaGFyZXMgbm8gY29kZSB3aXRoIHRoZW0uCisgKgorICogVGhpcyBkcml2ZXIgaGFzIHVzZWQgYXMgYSBiYXNlIHRoZSBmaW5lcGl4IGRyaXZlciBhbmQgb3RoZXIgZ3NwY2EKKyAqIGJhc2VkIGRyaXZlcnMgYW5kIG1heSBzdGlsbCBjb250YWluIGNvZGUgZnJhZ21lbnRzIHRha2VuIGZyb20gdGhvc2UKKyAqIGRyaXZlcnMuCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3E5MDUiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJBZGFtIEJha2VyIDxsaW51eEBiYWtlci1uZXQub3JnLnVrPiwgIgorCQkiVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUTkwNSBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNV9DTURfVElNRU9VVCA1MDAKKyNkZWZpbmUgU1E5MDVfREFUQV9USU1FT1VUIDEwMDAKKworLyogTWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIHVzZS4gKi8KKyNkZWZpbmUgU1E5MDVfTUFYX1RSQU5TRkVSIDB4ODAwMAorI2RlZmluZSBGUkFNRV9IRUFERVJfTEVOIDY0CisKKy8qIFRoZSBrbm93biBtb2Rlcywgb3IgcmVnaXN0ZXJzLiBUaGVzZSBnbyBpbiB0aGUgInZhbHVlIiBzbG90LiAqLworCisvKiAwMCBpcyAibm9uZSIgb2J2aW91c2x5ICovCisKKyNkZWZpbmUgU1E5MDVfQlVMS19SRUFECTB4MDMJLyogcHJlY2VkZXMgYW55IGJ1bGsgcmVhZCAqLworI2RlZmluZSBTUTkwNV9DT01NQU5ECTB4MDYJLyogcHJlY2VkZXMgdGhlIGNvbW1hbmQgY29kZXMgYmVsb3cgKi8KKyNkZWZpbmUgU1E5MDVfUElORwkweDA3CS8qIHdoZW4gcmVhZGluZyBhbiAiaWRsaW5nIiBjb21tYW5kICovCisjZGVmaW5lIFNROTA1X1JFQURfRE9ORSAweGMwICAgIC8qIGFjayBidWxrIHJlYWQgY29tcGxldGVkICovCisKKy8qIEFueSBub24temVybyB2YWx1ZSBpbiB0aGUgYm90dG9tIDIgYml0cyBvZiB0aGUgMm5kIGJ5dGUgb2YKKyAqIHRoZSBJRCBhcHBlYXJzIHRvIGluZGljYXRlIHRoZSBjYW1lcmEgY2FuIGRvIDY0MCo0ODAuIElmIHRoZQorICogTFNCIG9mIHRoYXQgYnl0ZSBpcyBzZXQgdGhlIGltYWdlIGlzIGp1c3QgdXBzaWRlIGRvd24sIG90aGVyd2lzZQorICogaXQgaXMgcm90YXRlZCAxODAgZGVncmVlcy4gKi8KKyNkZWZpbmUgU1E5MDVfSElSRVNfTUFTSwkweDAwMDAwMzAwCisjZGVmaW5lIFNROTA1X09SSUVOVEFUSU9OX01BU0sJMHgwMDAwMDEwMAorCisvKiBTb21lIGNvbW1hbmQgY29kZXMuIFRoZXNlIGdvIGluIHRoZSAiaW5kZXgiIHNsb3QuICovCisKKyNkZWZpbmUgU1E5MDVfSUQgICAgICAweGYwCS8qIGFza3MgZm9yIG1vZGVsIHN0cmluZyAqLworI2RlZmluZSBTUTkwNV9DT05GSUcgIDB4MjAJLyogZ2V0cyBwaG90byBhbGxvYy4gdGFibGUsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfREFUQSAgICAweDMwCS8qIGFjY2Vzc2VzIHBob3RvIGRhdGEsIG5vdCB1c2VkIGhlcmUgKi8KKyNkZWZpbmUgU1E5MDVfQ0xFQVIgICAweGEwCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVfQ0FQVFVSRV9MT1cgIDB4NjAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMTYweDEyMCAqLworI2RlZmluZSBTUTkwNV9DQVBUVVJFX01FRCAgMHg2MQkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1X0NBUFRVUkVfSElHSCAweDYyCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDY0MHg0ODAgKHNvbWUgY2FtcyBvbmx5KSAqLworLyogbm90ZSB0aGF0IHRoZSBjYXB0dXJlIGNvbW1hbmQgYWxzbyBjb250cm9scyB0aGUgb3V0cHV0IGRpbWVuc2lvbnMgKi8KKworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KK3N0cnVjdCBzZCB7CisJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KKworCS8qCisJICogRHJpdmVyIHN0dWZmCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNxOTA1X21vZGVbXSA9IHsKKwl7IDE2MCwgMTIwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCisJeyAzMjAsIDI0MCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorCXsgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfQorfTsKKworLyoKKyAqIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuCisgKi8KK3N0YXRpYyBpbnQgc3E5MDVfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQ09NTUFORCwgaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLCAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1BJTkcsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAyICglZCkiLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBY2tub3dsZWRnZSB0aGUgZW5kIG9mIGEgZnJhbWUgLSBzZWUgd2FybmluZyBvbiBzcTkwNV9jb21tYW5kLgorICovCitzdGF0aWMgaW50IHNxOTA1X2Fja19mcmFtZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9ICdcMCc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X1JFQURfRE9ORSwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLAorCQkJICAgICAgU1E5MDVfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICByZXF1ZXN0IGFuZCByZWFkIGEgYmxvY2sgb2YgZGF0YSAtIHNlZSB3YXJuaW5nIG9uIHNxOTA1X2NvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQKK3NxOTA1X3JlYWRfZGF0YShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCWludCBhY3RfbGVuOworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gJ1wwJzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgU1E5MDVfQlVMS19SRUFELCBzaXplLCBnc3BjYV9kZXYtPnVzYl9idWYsCisJCQkgICAgICAxLCBTUTkwNV9DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsIF9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJICAgZGF0YSwgc2l6ZSwgJmFjdF9sZW4sIFNROTA1X0RBVEFfVElNRU9VVCk7CisKKwkvKiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIDAsIG90aGVyd2lzZSAgbmVnYXRpdmUgKi8KKwlpZiAocmV0IDwgMCB8fCBhY3RfbGVuICE9IHNpemUpIHsKKwkJUERFQlVHKERfRVJSLCAiYnVsayByZWFkIGZhaWwgKCVkKSBsZW4gJWQvJWQiLAorCQkJcmV0LCBhY3RfbGVuLCBzaXplKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHdlIHRha2UgdGhlIGdzcGNhCisgKiB1c2JfbG9jayB3aGVuIHBlcmZvcm1pbmcgVVNCIG9wZXJhdGlvbnMuIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQKKyAqIHRvIHByb3RlY3QgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0IGdzcGNhIG1ha2VzIGR1cmluZworICogc3RyZWFtX29mZiBhcyB0aGUgY2FtZXJhIGRvZXNuJ3QgcHJvdmlkZSBhbnkgY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkKKyAqIHRvIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgc3E5MDVfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGhlYWRlcl9yZWFkOyAvKiB0cnVlIGlmIHdlIGhhdmUgYWxyZWFkeSByZWFkIHRoZSBmcmFtZSBoZWFkZXIuICovCisJaW50IGRpc2NhcmRpbmc7IC8qIHRydWUgaWYgd2UgZmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgZnJhbWUuICovCisJaW50IHBhY2tldF90eXBlOworCWludCBmcmFtZV9zejsKKwlpbnQgcmV0OworCXU4ICpkYXRhOworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1X01BWF9UUkFOU0ZFUiwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWlmICghYnVmZmVyKSB7CisJCVBERUJVRyhEX0VSUiwgIkNvdWxkbid0IGFsbG9jYXRlIFVTQiBidWZmZXIiKTsKKwkJZ290byBxdWl0X3N0cmVhbTsKKwl9CisKKwlmcmFtZV9zeiA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5zaXplaW1hZ2UKKwkJCSsgRlJBTUVfSEVBREVSX0xFTjsKKworCXdoaWxlIChnc3BjYV9kZXYtPnByZXNlbnQgJiYgZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJLyogTmVlZCBhIHNob3J0IGRlbGF5IHRvIGVuc3VyZSBzdHJlYW1pbmcgZmxhZyB3YXMgc2V0IGJ5CisJCSAqIGdzcGNhIGFuZCB0byBtYWtlIHN1cmUgZ3NwY2EgY2FuIGdyYWIgdGhlIG11dGV4LiAqLworCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQltc2xlZXAoMSk7CisKKwkJLyogcmVxdWVzdCBzb21lIGRhdGEgYW5kIHRoZW4gcmVhZCBpdCB1bnRpbCB3ZSBoYXZlCisJCSAqIGEgY29tcGxldGUgZnJhbWUuICovCisJCWJ5dGVzX2xlZnQgPSBmcmFtZV9zejsKKwkJaGVhZGVyX3JlYWQgPSAwOworCQlkaXNjYXJkaW5nID0gMDsKKworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1X01BWF9UUkFOU0ZFUiA/CisJCQkJU1E5MDVfTUFYX1RSQU5TRkVSIDogYnl0ZXNfbGVmdDsKKwkJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHNxOTA1X3JlYWRfZGF0YShnc3BjYV9kZXYsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJZGF0YSA9IGJ1ZmZlcjsKKwkJCWlmICghaGVhZGVyX3JlYWQpIHsKKwkJCQlwYWNrZXRfdHlwZSA9IEZJUlNUX1BBQ0tFVDsKKwkJCQkvKiBUaGUgZmlyc3QgNjQgYnl0ZXMgb2YgZWFjaCBmcmFtZSBhcmUKKwkJCQkgKiBhIGhlYWRlciBmdWxsIG9mIEZGIDAwIGJ5dGVzICovCisJCQkJZGF0YSArPSBGUkFNRV9IRUFERVJfTEVOOworCQkJCWRhdGFfbGVuIC09IEZSQU1FX0hFQURFUl9MRU47CisJCQkJaGVhZGVyX3JlYWQgPSAxOworCQkJfSBlbHNlIGlmIChieXRlc19sZWZ0ID09IDApIHsKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJfSBlbHNlIHsKKwkJCQlwYWNrZXRfdHlwZSA9IElOVEVSX1BBQ0tFVDsKKwkJCX0KKwkJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykgeworCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUsCisJCQkJCQlmcmFtZSwgZGF0YSwgZGF0YV9sZW4pOworCQkJCS8qIElmIGVudGlyZSBmcmFtZSBmaXRzIGluIG9uZSBwYWNrZXQgd2Ugc3RpbGwKKwkJCQkgICBuZWVkIHRvIGFkZCBhIExBU1RfUEFDS0VUICovCisJCQkJaWYgKHBhY2tldF90eXBlID09IEZJUlNUX1BBQ0tFVCAmJgorCQkJCSAgICBieXRlc19sZWZ0ID09IDApCisJCQkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwKKwkJCQkJCQlMQVNUX1BBQ0tFVCwKKwkJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CisJCQl9IGVsc2UgeworCQkJCWRpc2NhcmRpbmcgPSAxOworCQkJfQorCQl9CisJCS8qIGFja25vd2xlZGdlIHRoZSBmcmFtZSAqLworCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQlyZXQgPSBzcTkwNV9hY2tfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCX0KK3F1aXRfc3RyZWFtOgorCS8qIHRoZSB1c2JfbG9jayBpcyBhbHJlYWR5IGFjcXVpcmVkICovCisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0NMRUFSKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUganVzdCBiZWZvcmUgc2RfaW5pdCAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDY0OworCisJSU5JVF9XT1JLKCZkZXYtPndvcmtfc3RydWN0LCBzcTkwNV9kb3N0cmVhbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNV9kb3N0cmVhbSB0byBmaW5pc2ggKi8KKwlkZXN0cm95X3dvcmtxdWV1ZShkZXYtPndvcmtfdGhyZWFkKTsKKwlkZXYtPndvcmtfdGhyZWFkID0gTlVMTDsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXUzMiBpZGVudDsKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZWFkCisJICogdGhlIG1vZGVsIElEIGFuZCBwcm9jZXNzIHRoYXQgYW5kIHB1dCBpdCBhd2F5LgorCSAqLworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc3E5MDVfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1X0lEKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBzcTkwNV9yZWFkX2RhdGEoZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnVzYl9idWYsIDQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIHVzYl9idWYgaXMgYWxsb2NhdGVkIHdpdGgga21hbGxvYyBzbyBpcyBhbGlnbmVkLgorCSAqIENhbWVyYSBtb2RlbCBudW1iZXIgaXMgdGhlIHJpZ2h0IHdheSByb3VuZCBpZiB3ZSBhc3N1bWUgdGhpcworCSAqIHJldmVyc2UgZW5naW5lZXJlZCBJRCBpcyBzdXBwb3NlZCB0byBiZSBiaWcgZW5kaWFuLiAqLworCWlkZW50ID0gYmUzMl90b19jcHVwKChfX2JlMzIgKilnc3BjYV9kZXYtPnVzYl9idWYpOworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfQ09ORiwgIlNROTA1IGNhbWVyYSBJRCAlMDh4IGRldGVjdGVkIiwgaWRlbnQpOworCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gc3E5MDVfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHNxOTA1X21vZGUpOworCWlmICghKGlkZW50ICYgU1E5MDVfSElSRVNfTUFTSykpCisJCWdzcGNhX2Rldi0+Y2FtLm5tb2Rlcy0tOworCXJldHVybiAwOworfQorCisvKiBTZXQgdXAgZm9yIGdldHRpbmcgZnJhbWVzLiAqLworc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmV0OworCisJLyogIk9wZW4gdGhlIHNodXR0ZXIiIGFuZCBzZXQgc2l6ZSwgdG8gc3RhcnQgY2FwdHVyZSAqLworCXN3aXRjaCAoZ3NwY2FfZGV2LT5jdXJyX21vZGUpIHsKKwlkZWZhdWx0OgorLyoJY2FzZSAyOiAqLworCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgaGlnaCByZXNvbHV0aW9uIik7CisJCXJldCA9IHNxOTA1X2NvbW1hbmQoJmRldi0+Z3NwY2FfZGV2LCBTUTkwNV9DQVBUVVJFX0hJR0gpOworCQlicmVhazsKKwljYXNlIDE6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBtZWRpdW0gcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9NRUQpOworCQlicmVhazsKKwljYXNlIDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBsb3cgcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9MT1cpOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0IHN0cmVhbWluZyBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxMjApfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MDVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiY2I3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogU1E5MDVDIHN1YmRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGVvZG9yZSBLaWxnb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICoKKyAqIFRoaXMgZHJpdmVyIHVzZXMgd29yayBkb25lIGluCisgKiBsaWJncGhvdG8yL2NhbWxpYnMvZGlnaWdyOCwgQ29weXJpZ2h0IChDKSBUaGVvZG9yZSBLaWxnb3JlLgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyBhbHNvIHVzZWQgYXMgYSBiYXNlIHRoZSBzcTkwNWMgZHJpdmVyCisgKiBhbmQgbWF5IGNvbnRhaW4gY29kZSBmcmFnbWVudHMgZnJvbSBpdC4KKyAqLworCisjZGVmaW5lIE1PRFVMRV9OQU1FICJzcTkwNWMiCisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJnc3BjYS5oIgorCitNT0RVTEVfQVVUSE9SKCJUaGVvZG9yZSBLaWxnb3JlIDxraWxnb3RhQGF1YnVybi5lZHU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NROTA1QyBVU0IgQ2FtZXJhIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKiBEZWZhdWx0IHRpbWVvdXRzLCBpbiBtcyAqLworI2RlZmluZSBTUTkwNUNfQ01EX1RJTUVPVVQgNTAwCisjZGVmaW5lIFNROTA1Q19EQVRBX1RJTUVPVVQgMTAwMAorCisvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiAqLworI2RlZmluZSBTUTkwNUNfTUFYX1RSQU5TRkVSIDB4ODAwMAorCisjZGVmaW5lIEZSQU1FX0hFQURFUl9MRU4gMHg1MAorCisvKiBDb21tYW5kcy4gVGhlc2UgZ28gaW4gdGhlICJ2YWx1ZSIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NMRUFSICAgMHhhMAkJLyogY2xlYXIgZXZlcnl0aGluZyAqLworI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9MT1cgMHhhMDQwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTUVEIDB4MTQ0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0hJIDB4Mjg0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAzMjB4MjQwICovCisKKy8qIEZvciBjYXB0dXJlLCB0aGlzIG11c3QgZ28gaW4gdGhlICJpbmRleCIgc2xvdC4gKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfSU5ERVggMHgxMTBmCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisJY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqY2FwX21vZGU7CisJLyogRHJpdmVyIHN0dWZmICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfc3RydWN0OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3RocmVhZDsKK307CisKKy8qCisgKiBNb3N0IG9mIHRoZXNlIGNhbWVyYXMgd2lsbCBkbyA2NDB4NDgwIGFuZCAzMjB4MjQwLiAxNjB4MTIwIHdvcmtzCisgKiBpbiB0aGVvcnkgYnV0IGdpdmVzIHZlcnkgcG9vciBvdXRwdXQuIFRoZXJlZm9yZSwgbm90IHN1cHBvcnRlZC4KKyAqIFRoZSAweDI3NzA6MHg5MDUwIGNhbWVyYXMgaGF2ZSBtYXggcmVzb2x1dGlvbiBvZiAzMjB4MjQwLgorICovCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzcTkwNWNfbW9kZVtdID0geworCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TUTkwNUMsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKKwl7IDY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU1E5MDVDLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0KK307CisKKy8qIFNlbmQgYSBjb21tYW5kIHRvIHRoZSBjYW1lcmEuICovCitzdGF0aWMgaW50IHNxOTA1Y19jb21tYW5kKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGNvbW1hbmQsIHUxNiBpbmRleCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIGNvbW1hbmQsIGluZGV4LCBOVUxMLCAwLAorCQkJICAgICAgU1E5MDVDX0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBhbmQgcnVucyB3aGVuZXZlciB0aGUgY2FtZXJhCisgKiBpcyBzdHJlYW1pbmcgZGF0YS4gQmVjYXVzZSBpdCBpcyBhIHdvcmtxdWV1ZSBmdW5jdGlvbiBpdCBpcyBhbGxvd2VkIHRvIHNsZWVwCisgKiBzbyB3ZSBjYW4gdXNlIHN5bmNocm9ub3VzIFVTQiBjYWxscy4gVG8gYXZvaWQgcG9zc2libGUgY29sbGlzaW9ucyB3aXRoIG90aGVyCisgKiB0aHJlYWRzIGF0dGVtcHRpbmcgdG8gdXNlIHRoZSBjYW1lcmEncyBVU0IgaW50ZXJmYWNlIHRoZSBnc3BjYSB1c2JfbG9jayBpcworICogdXNlZCB3aGVuIHBlcmZvcm1pbmcgdGhlIG9uZSBVU0IgY29udHJvbCBvcGVyYXRpb24gaW5zaWRlIHRoZSB3b3JrcXVldWUsCisgKiB3aGljaCB0ZWxscyB0aGUgY2FtZXJhIHRvIGNsb3NlIHRoZSBzdHJlYW0uIEluIHByYWN0aWNlIHRoZSBvbmx5IHRoaW5nCisgKiB3aGljaCBuZWVkcyB0byBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBpcyB0aGUgdXNiX3NldF9pbnRlcmZhY2UgY2FsbCB0aGF0CisgKiBnc3BjYSBtYWtlcyBkdXJpbmcgc3RyZWFtX29mZi4gT3RoZXJ3aXNlIHRoZSBjYW1lcmEgZG9lc24ndCBwcm92aWRlIGFueQorICogY29udHJvbHMgdGhhdCB0aGUgdXNlciBjb3VsZCB0cnkgdG8gY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBzcTkwNWNfZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzZCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzZCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lOworCWludCBieXRlc19sZWZ0OyAvKiBieXRlcyByZW1haW5pbmcgaW4gY3VycmVudCBmcmFtZS4gKi8KKwlpbnQgZGF0YV9sZW47ICAgLyogc2l6ZSB0byB1c2UgZm9yIHRoZSBuZXh0IHJlYWQuICovCisJaW50IGFjdF9sZW47CisJaW50IGRpc2NhcmRpbmcgPSAwOyAvKiB0cnVlIGlmIHdlIGZhaWxlZCB0byBnZXQgc3BhY2UgZm9yIGZyYW1lLiAqLworCWludCBwYWNrZXRfdHlwZTsKKwlpbnQgcmV0OworCXU4ICpidWZmZXI7CisKKwlidWZmZXIgPSBrbWFsbG9jKFNROTA1Q19NQVhfVFJBTlNGRVIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlQREVCVUcoRF9FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBVU0IgYnVmZmVyIik7CisJCWdvdG8gcXVpdF9zdHJlYW07CisJfQorCisJd2hpbGUgKGdzcGNhX2Rldi0+cHJlc2VudCAmJiBnc3BjYV9kZXYtPnN0cmVhbWluZykgeworCQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCWdvdG8gcXVpdF9zdHJlYW07CisJCS8qIFJlcXVlc3QgdGhlIGhlYWRlciwgd2hpY2ggdGVsbHMgdGhlIHNpemUgdG8gZG93bmxvYWQgKi8KKwkJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJCXVzYl9yY3ZidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgMHg4MSksCisJCQkJYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOLCAmYWN0X2xlbiwKKwkJCQlTUTkwNUNfREFUQV9USU1FT1VUKTsKKwkJUERFQlVHKERfU1RSRUFNLAorCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGhlYWRlciIsCisJCQlhY3RfbGVuLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IEZSQU1FX0hFQURFUl9MRU4pCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkvKiBzaXplIGlzIHJlYWQgZnJvbSA0IGJ5dGVzIHN0YXJ0aW5nIDB4NDAsIGxpdHRsZSBlbmRpYW4gKi8KKwkJYnl0ZXNfbGVmdCA9IGJ1ZmZlclsweDQwXXwoYnVmZmVyWzB4NDFdPDw4KXwoYnVmZmVyWzB4NDJdPDwxNikKKwkJCQkJfChidWZmZXJbMHg0M108PDI0KTsKKwkJUERFQlVHKERfU1RSRUFNLCAiYnl0ZXNfbGVmdCA9IDB4JXgiLCBieXRlc19sZWZ0KTsKKwkJLyogV2Uga2VlcCB0aGUgaGVhZGVyLiBJdCBoYXMgb3RoZXIgaW5mb3JtYXRpb24sIHRvby4gKi8KKwkJcGFja2V0X3R5cGUgPSBGSVJTVF9QQUNLRVQ7CisJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZSwKKwkJCQlmcmFtZSwgYnVmZmVyLCBGUkFNRV9IRUFERVJfTEVOKTsKKwkJCX0gZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApIHsKKwkJCWRhdGFfbGVuID0gYnl0ZXNfbGVmdCA+IFNROTA1Q19NQVhfVFJBTlNGRVIgPworCQkJCVNROTA1Q19NQVhfVFJBTlNGRVIgOiBieXRlc19sZWZ0OworCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJCWJ1ZmZlciwgZGF0YV9sZW4sICZhY3RfbGVuLAorCQkJCVNROTA1Q19EQVRBX1RJTUVPVVQpOworCQkJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiA8IGRhdGFfbGVuKQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQlQREVCVUcoRF9TVFJFQU0sCisJCQkJIkdvdCAlZCBieXRlcyBvdXQgb2YgJWQgZm9yIGZyYW1lIiwKKwkJCQlkYXRhX2xlbiwgYnl0ZXNfbGVmdCk7CisJCQlieXRlc19sZWZ0IC09IGRhdGFfbGVuOworCQkJaWYgKGJ5dGVzX2xlZnQgPT0gMCkKKwkJCQlwYWNrZXRfdHlwZSA9IExBU1RfUEFDS0VUOworCQkJZWxzZQorCQkJCXBhY2tldF90eXBlID0gSU5URVJfUEFDS0VUOworCQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZShnc3BjYV9kZXYpOworCQkJaWYgKGZyYW1lICYmICFkaXNjYXJkaW5nKQorCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIHBhY2tldF90eXBlLAorCQkJCQkJZnJhbWUsIGJ1ZmZlciwgZGF0YV9sZW4pOworCQkJZWxzZQorCQkJCWRpc2NhcmRpbmcgPSAxOworCQl9CisJfQorcXVpdF9zdHJlYW06CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0xFQVIsIDApOworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJa2ZyZWUoYnVmZmVyKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSBqdXN0IGJlZm9yZSBzZF9pbml0ICovCitzdGF0aWMgaW50IHNkX2NvbmZpZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCVBERUJVRyhEX1BST0JFLAorCQkiU1E5MDUwIGNhbWVyYSBkZXRlY3RlZCIKKwkJIiAodmlkL3BpZCAweCUwNFg6MHglMDRYKSIsIGlkLT5pZFZlbmRvciwgaWQtPmlkUHJvZHVjdCk7CisJY2FtLT5jYW1fbW9kZSA9IHNxOTA1Y19tb2RlOworCWNhbS0+bm1vZGVzID0gMjsKKwlpZiAoaWQtPmlkUHJvZHVjdCA9PSAweDkwNTApCisJCWNhbS0+bm1vZGVzID0gMTsKKwkvKiBXZSBkb24ndCB1c2UgdGhlIGJ1ZmZlciBnc3BjYSBhbGxvY2F0ZXMgc28gbWFrZSBpdCBzbWFsbC4gKi8KKwljYW0tPmJ1bGtfc2l6ZSA9IDMyOworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgc3E5MDVjX2Rvc3RyZWFtKTsKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdD09MCBhbmQgb24gZGlzY29ubmVjdCAqLworLyogdGhlIHVzYl9sb2NrIGlzIGhlbGQgYXQgZW50cnkgLSByZXN0b3JlIG9uIGV4aXQgKi8KK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogd2FpdCBmb3IgdGhlIHdvcmsgcXVldWUgdG8gdGVybWluYXRlICovCisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkvKiBUaGlzIHdhaXRzIGZvciBzcTkwNWNfZG9zdHJlYW0gdG8gZmluaXNoICovCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmV0OworCisJLyogY29ubmVjdCB0byB0aGUgY2FtZXJhIGFuZCByZXNldCBpdC4gKi8KKwlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DTEVBUiwgMCk7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHVwIGZvciBnZXR0aW5nIGZyYW1lcy4gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCWRldi0+Y2FwX21vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZTsKKwkvKiAiT3BlbiB0aGUgc2h1dHRlciIgYW5kIHNldCBzaXplLCB0byBzdGFydCBjYXB0dXJlICovCisJc3dpdGNoIChnc3BjYV9kZXYtPndpZHRoKSB7CisJY2FzZSA2NDA6CisJCVBERUJVRyhEX1NUUkVBTSwgIlN0YXJ0IHN0cmVhbWluZyBhdCBoaWdoIHJlc29sdXRpb24iKTsKKwkJZGV2LT5jYXBfbW9kZSsrOworCQlyZXQgPSBzcTkwNWNfY29tbWFuZChnc3BjYV9kZXYsIFNROTA1Q19DQVBUVVJFX0hJLAorCQkJCQkJU1E5MDVDX0NBUFRVUkVfSU5ERVgpOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiAzMjAgKi8KKwlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgbWVkaXVtIHJlc29sdXRpb24iKTsKKwkJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0FQVFVSRV9NRUQsCisJCQkJCQlTUTkwNUNfQ0FQVFVSRV9JTkRFWCk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiU3RhcnQgc3RyZWFtaW5nIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFN0YXJ0IHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gdG8gZG8gdGhlIHN0cmVhbWluZyAqLworCWRldi0+d29ya190aHJlYWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShNT0RVTEVfTkFNRSk7CisJcXVldWVfd29yayhkZXYtPndvcmtfdGhyZWFkLCAmZGV2LT53b3JrX3N0cnVjdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGFibGUgb2Ygc3VwcG9ydGVkIFVTQiBkZXZpY2VzICovCitzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1Yyl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MDUwKX0sCisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkxM2QpfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKy8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0geworCS5uYW1lICAgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCit9OworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBnc3BjYV9kZXZfcHJvYmUoaW50ZiwgaWQsCisJCQkmc2RfZGVzYywKKwkJCXNpemVvZihzdHJ1Y3Qgc2QpLAorCQkJVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lICAgICAgID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlICAgPSBkZXZpY2VfdGFibGUsCisJLnByb2JlICAgICAgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAorI2VuZGlmCit9OworCisvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCitzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworCVBERUJVRyhEX1BST0JFLCAiZGVyZWdpc3RlcmVkIik7Cit9CisKK21vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKK21vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCmluZGV4IDYwZGU5YWYuLmYyNWJlMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwpAQCAtMzUsMTAgKzM1LDEzIEBACiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKIAl1bnNpZ25lZCBjaGFyIGxpZ2h0ZnJlcTsKLX07CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNjAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODAKIAotLyogZ2xvYmFsIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgc2RfcXVhbnQgPSA3OwkJLyogPD0gNCBLTyAtIDc6IGdvb2QgKGVub3VnaCEpICovCisJdTggKmpwZWdfaGRyOworfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE4MCw3ICsxODMsNyBAQAogCXJlZ193KGdzcGNhX2RldiwgMHg2M2IsIDApOwogCXJlZ193KGdzcGNhX2RldiwgMHg2MzAsIDUpOwogCXJldCA9IHVzYl9idWxrX21zZyhkZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUoZGV2LCA1KSwKKwkJCXVzYl9yY3ZidWxrcGlwZShkZXYsIDB4MDUpLAogCQkJZ3NwY2FfZGV2LT51c2JfYnVmLAogCQkJNCwJCS8qIGxlbmd0aCAqLwogCQkJJmFsZW4sCkBAIC0yOTQsMTUgKzI5NywxNCBAQAogCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgY2FtICpjYW0gPSAmZ3NwY2FfZGV2LT5jYW07CiAKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKIAlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOwogCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC0zMjYsOCArMzI4LDE1IEBACiAvKiAtLSBzdGFydCB0aGUgY2FtZXJhIC0tICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IHJldCwgdmFsdWU7CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJLyogd29yayBvbiBhbHRlcm5hdGUgMSAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKGdzcGNhX2Rldi0+ZGV2LCBnc3BjYV9kZXYtPmlmYWNlLCAxKTsKIApAQCAtMzk5LDExICs0MDgsMTkgQEAKIAlQREVCVUcoRF9TVFJFQU0sICJjYW1lcmEgc3RvcHBlZCIpOwogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKIAogCS8qIGEgZnJhbWUgc3RhcnRzIHdpdGg6CkBAIC00MjAsNyArNDM3LDggQEAKIAkJCQkJZmZkOSwgMik7CiAKIAkJLyogcHV0IHRoZSBKUEVHIDQxMSBoZWFkZXIgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsIHNkX3F1YW50LCAweDIyKTsKKwkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKKwkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwogCiAJCS8qIGJlZ2lubmluZyBvZiB0aGUgZnJhbWUgKi8KICNkZWZpbmUgU1RLSERSU1ogMTIKQEAgLTUyMCw2ICs1MzgsMzQgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTUyOSw4ICs1NzUsMTEgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLnF1ZXJ5bWVudSA9IHNkX3F1ZXJ5bWVudSwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTU2Miw4ICs2MTEsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlpbmZvKCJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CkBAIC01NzUsNiArNjI2LDMgQEAKIAogbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOwogbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVhbnQsIHNkX3F1YW50LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhxdWFudCwgIlF1YW50aXphdGlvbiBpbmRleCAoMC4uOCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDEzYTAyMWUuLjlkZmYyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwpAQCAtNDI5LDcgKzQyOSw2IEBACiAJUERFQlVHKERfUFJPQkUsICJDb25maWd1cmluZyBjYW1lcmEiKTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IFNUVl9JU09DX0VORFBPSU5UX0FERFI7CiAJc2QtPmRlc2MgPSBzZF9kZXNjOwogCWdzcGNhX2Rldi0+c2RfZGVzYyA9ICZzZC0+ZGVzYzsKIApAQCAtNTAxLDggKzUwMCwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCmluZGV4IDE0MzM1YTkuLmIxNjkwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKQEAgLTMwLDYgKzMwLDY2IEBACiAKICNpbmNsdWRlICJzdHYwNnh4X2hkY3MuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxeDAwX2N0cmxbXSA9IHsKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAweDAwLAorCQkJLm1heGltdW0JPSAweGZmZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfRVhQT1NVUkUsCisJCQkuZmxhZ3MgICAgICAgICAJPSBWNEwyX0NUUkxfRkxBR19TTElERVIKKwkJfSwKKwkJLnNldCA9IGhkY3Nfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gaGRjc19nZXRfZXhwb3N1cmUKKwl9LCB7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJnYWluIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZiwKKwkJCS5zdGVwCQk9IDB4MSwKKwkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9nYWluLAorCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGhkY3MxeDAwX21vZGVbXSA9IHsKKwl7CisJCUhEQ1NfMVgwMF9ERUZfV0lEVEgsCisJCUhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPQorCQkJSERDU18xWDAwX0RFRl9XSURUSCAqIEhEQ1NfMVgwMF9ERUZfSEVJR0hULAorCQkuYnl0ZXNwZXJsaW5lID0gSERDU18xWDAwX0RFRl9XSURUSCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIGhkY3MxMDIwX2N0cmxbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBoZGNzMTAyMF9tb2RlW10gPSB7CisJeworCQlIRENTXzEwMjBfREVGX1dJRFRILAorCQlIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCUhEQ1NfMTAyMF9ERUZfV0lEVEggKiBIRENTXzEwMjBfREVGX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IEhEQ1NfMTAyMF9ERUZfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KK307CisKIGVudW0gaGRjc19wb3dlcl9zdGF0ZSB7CiAJSERDU19TVEFURV9TTEVFUCwKIAlIRENTX1NUQVRFX0lETEUsCkBAIC0zNTMsMTAgKzQxMywxMCBAQAogCiAJaW5mbygiSERDUy0xMDAwLzExMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxeDAwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxeDAwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMXgwMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxeDAwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMXgwMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKQEAgLTQxMiwxMCArNDcyLDEwIEBACiAKIAlpbmZvKCJIRENTLTEwMjAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm1vZGVzOwotCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5tb2RlczsKLQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLmN0cmxzOwotCXNkLT5kZXNjLm5jdHJscyA9IHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwLm5jdHJsczsKKwlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IGhkY3MxMDIwX21vZGU7CisJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShoZGNzMTAyMF9tb2RlKTsKKwlzZC0+ZGVzYy5jdHJscyA9IGhkY3MxMDIwX2N0cmw7CisJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShoZGNzMTAyMF9jdHJsKTsKIAogCWhkY3MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGRjcyksIEdGUF9LRVJORUwpOwogCWlmICghaGRjcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAppbmRleCA5YzcyNzlhLi40MTJmMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCkBAIC0xNTIsNTMgKzE1Miw2IEBACiAJLnN0b3AgPSBoZGNzX3N0b3AsCiAJLmRpc2Nvbm5lY3QgPSBoZGNzX2Rpc2Nvbm5lY3QsCiAJLmR1bXAgPSBoZGNzX2R1bXAsCi0KLQkubmN0cmxzID0gMiwKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZmZmLAotCQkJLnN0ZXAJCT0gMHgxLAotCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IGhkY3NfZ2V0X2V4cG9zdXJlCi0JfSwKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJnYWluIiwKLQkJCS5taW5pbXVtCT0gMHgwMCwKLQkJCS5tYXhpbXVtCT0gMHhmZiwKLQkJCS5zdGVwCQk9IDB4MSwKLQkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9HQUlOLAotCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS5zZXQgPSBoZGNzX3NldF9nYWluLAotCQkuZ2V0ID0gaGRjc19nZXRfZ2FpbgotCX0KLQl9LAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xWDAwX0RFRl9XSURUSCwKLQkJSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzFYMDBfREVGX1dJRFRIICogSERDU18xWDAwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzFYMDBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX2hkY3MxMDIwID0gewpAQCAtMjA3LDI5ICsxNjAsMTEgQEAKIAkuaTJjX2FkZHIgPSAoMHg1NSA8PCAxKSwKIAkuaTJjX2xlbiA9IDEsCiAKLQkubmN0cmxzID0gMCwKLQkuY3RybHMgPSB7fSwKLQogCS5pbml0ID0gaGRjc19pbml0LAogCS5wcm9iZSA9IGhkY3NfcHJvYmVfMTAyMCwKIAkuc3RhcnQgPSBoZGNzX3N0YXJ0LAogCS5zdG9wID0gaGRjc19zdG9wLAogCS5kdW1wID0gaGRjc19kdW1wLAotCi0JLm5tb2RlcyA9IDEsCi0JLm1vZGVzID0gewotCXsKLQkJSERDU18xMDIwX0RFRl9XSURUSCwKLQkJSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCVY0TDJfUElYX0ZNVF9TQkdHUjgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9Ci0JCQlIRENTXzEwMjBfREVGX1dJRFRIICogSERDU18xMDIwX0RFRl9IRUlHSFQsCi0JCS5ieXRlc3BlcmxpbmUgPSBIRENTXzEwMjBfREVGX1dJRFRILAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDEKLQl9Ci0JfQogfTsKIAogc3RhdGljIGNvbnN0IHUxNiBzdHZfYnJpZGdlX2luaXRbXVsyXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKaW5kZXggZDBhMGY4NS4uMjg1MjIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmMKQEAgLTQ2LDYgKzQ2LDEzMiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF9wYjAxMDAuaCIKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjdHJsIHBiMDEwMF9jdHJsW10gPSB7CisjZGVmaW5lIEdBSU5fSURYIDAKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJHYWluIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9nYWluCisJfSwKKyNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDEKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiUmVkIEJhbGFuY2UiLAorCQkJLm1pbmltdW0JPSAtMjU1LAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfcmVkX2JhbGFuY2UKKwl9LAorI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkJsdWUgQmFsYW5jZSIsCisJCQkubWluaW11bQk9IC0yNTUsCisJCQkubWF4aW11bQk9IDI1NSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZSwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYmx1ZV9iYWxhbmNlCisJfSwKKyNkZWZpbmUgRVhQT1NVUkVfSURYIDMKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiRXhwb3N1cmUiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSA1MTEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTIKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfZXhwb3N1cmUsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2V4cG9zdXJlCisJfSwKKyNkZWZpbmUgQVVUT0dBSU5fSURYIDQKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gYW5kIEV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAxCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2FpbgorCX0sCisjZGVmaW5lIEFVVE9HQUlOX1RBUkdFVF9JRFggNQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAwLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBUYXJnZXQiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4CisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldCwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0CisJfSwKKyNkZWZpbmUgTkFUVVJBTF9JRFggNgorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAxLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJOYXR1cmFsIExpZ2h0IFNvdXJjZSIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMQorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9uYXR1cmFsLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9uYXR1cmFsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGIwMTAwX21vZGVbXSA9IHsKKy8qIGxvdyByZXMgLyBzdWJzYW1wbGUgbW9kZXMgZGlzYWJsZWQgYXMgdGhleSBhcmUgb25seSBoYWxmIHJlcyBob3Jpem9udGFsLAorICAgaGFsdmluZyB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgKi8KKwl7CisJCTMyMCwKKwkJMjQwLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gUEIwMTAwX0NST1BfVE9fVkdBCisJfSwKKwl7CisJCTM1MiwKKwkJMjg4LAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKIHN0YXRpYyBpbnQgcGIwMTAwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTE2IHNlbnNvcjsKQEAgLTU5LDIwICsxODUsMTkgQEAKIAogCWlmICgoc2Vuc29yID4+IDgpID09IDB4NjQpIHsKIAkJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYygKLQkJCQlzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzICogc2l6ZW9mKHMzMiksCisJCQkJQVJSQVlfU0laRShwYjAxMDBfY3RybCkgKiBzaXplb2YoczMyKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFzZW5zb3Jfc2V0dGluZ3MpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlpbmZvKCJQaG90b2JpdCBwYjAxMDAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubmN0cmxzOwotCQlmb3IgKGkgPSAwOyBpIDwgc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJsczsgaSsrKQotCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLgotCQkJCQkgICAgIGN0cmxzW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gcGIwMTAwX21vZGU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUocGIwMTAwX21vZGUpOworCQlzZC0+ZGVzYy5jdHJscyA9IHBiMDEwMF9jdHJsOworCQlzZC0+ZGVzYy5uY3RybHMgPSBBUlJBWV9TSVpFKHBiMDEwMF9jdHJsKTsKKwkJZm9yIChpID0gMDsgaSA8IHNkLT5kZXNjLm5jdHJsczsgaSsrKQorCQkJc2Vuc29yX3NldHRpbmdzW2ldID0gcGIwMTAwX2N0cmxbaV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAkJc2QtPnNlbnNvcl9wcml2ID0gc2Vuc29yX3NldHRpbmdzOwogCiAJCXJldHVybiAwOwpAQCAtMTQzLDYgKzI2OCwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCBwYjAxMDBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIC8qIEZJWE1FOiBTb3J0IHRoZSBpbml0IGNvbW1hbmRzIG91dCBhbmQgcHV0IHRoZW0gaW50byB0YWJsZXMsCiAJICB0aGlzIGlzIG9ubHkgZm9yIGdldHRpbmcgdGhlIGNhbWVyYSB0byB3b3JrICovCiAvKiBGSVhNRTogTm8gZXJyb3IgaGFuZGxpbmcgZm9yIG5vdywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKaW5kZXggNWVhMjFhMS4uNGRlNGZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfcGIwMTAwLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogc3RhdGljIGludCBwYjAxMDBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgcGIwMTAwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHBiMDEwMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgcGIwMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgcGIwMTAwX2dldF9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CkBAIC0xMzcsMTM5ICsxMzgsMTIgQEAKIAkuaTJjX2FkZHIgPSAweGJhLAogCS5pMmNfbGVuID0gMiwKIAotCS5uY3RybHMgPSA3LAotCS5jdHJscyA9IHsKLSNkZWZpbmUgR0FJTl9JRFggMAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkdhaW4iLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAyNTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4Ci0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2dhaW4KLQl9LAotI2RlZmluZSBSRURfQkFMQU5DRV9JRFggMQotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJSZWQgQmFsYW5jZSIsCi0JCQkubWluaW11bQk9IC0yNTUsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAwCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X3JlZF9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9yZWRfYmFsYW5jZQotCX0sCi0jZGVmaW5lIEJMVUVfQkFMQU5DRV9JRFggMgotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiQmx1ZSBCYWxhbmNlIiwKLQkJCS5taW5pbXVtCT0gLTI1NSwKLQkJCS5tYXhpbXVtCT0gMjU1LAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYmx1ZV9iYWxhbmNlLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9ibHVlX2JhbGFuY2UKLQl9LAotI2RlZmluZSBFWFBPU1VSRV9JRFggMwotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJFeHBvc3VyZSIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDUxMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMgotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9leHBvc3VyZSwKLQkJLmdldCA9IHBiMDEwMF9nZXRfZXhwb3N1cmUKLQl9LAotI2RlZmluZSBBVVRPR0FJTl9JRFggNAotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBhbmQgRXhwb3N1cmUiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAxLAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDEKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW4sCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2F1dG9nYWluCi0JfSwKLSNkZWZpbmUgQVVUT0dBSU5fVEFSR0VUX0lEWCA1Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkF1dG9tYXRpYyBHYWluIFRhcmdldCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxMjgKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfYXV0b2dhaW5fdGFyZ2V0LAotCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2Fpbl90YXJnZXQKLQl9LAotI2RlZmluZSBOQVRVUkFMX0lEWCA2Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIgKyAweDEwMDEsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gIk5hdHVyYWwgTGlnaHQgU291cmNlIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X25hdHVyYWwsCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X25hdHVyYWwKLQl9LAotCX0sCi0KIAkuaW5pdCA9IHBiMDEwMF9pbml0LAogCS5wcm9iZSA9IHBiMDEwMF9wcm9iZSwKIAkuc3RhcnQgPSBwYjAxMDBfc3RhcnQsCiAJLnN0b3AgPSBwYjAxMDBfc3RvcCwKIAkuZHVtcCA9IHBiMDEwMF9kdW1wLAotCi0JLm5tb2RlcyA9IDIsCi0JLm1vZGVzID0gewotLyogbG93IHJlcyAvIHN1YnNhbXBsZSBtb2RlcyBkaXNhYmxlZCBhcyB0aGV5IGFyZSBvbmx5IGhhbGYgcmVzIGhvcml6b250YWwsCi0gICBoYWx2aW5nIHRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGRvZXMgbm90IHNlZW0gdG8gd29yayAqLwotCXsKLQkJMzIwLAotCQkyNDAsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKLQkJLmJ5dGVzcGVybGluZSA9IDMyMCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSBQQjAxMDBfQ1JPUF9UT19WR0EKLQl9LAotCXsKLQkJMzUyLAotCQkyODgsCi0JCVY0TDJfUElYX0ZNVF9TR1JCRzgsCi0JCVY0TDJfRklFTERfTk9ORSwKLQkJLnNpemVpbWFnZSA9IDM1MiAqIDI4OCwKLQkJLmJ5dGVzcGVybGluZSA9IDM1MiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAwCi0JfSwKLQl9CisJLmRpc2Nvbm5lY3QgPSBwYjAxMDBfZGlzY29ubmVjdCwKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAppbmRleCBjNzI2ZGFjLi5lODhjNDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9zZW5zb3IuaApAQCAtNDEsOCArNDEsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfcGIwMTAwOwogCi0jZGVmaW5lIFNUVjA2WFhfTUFYX0NUUkxTCQkoVjRMMl9DSURfTEFTVFAxIC0gVjRMMl9DSURfQkFTRSArIDEwKQotCiBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3IgewogCS8qIERlZmluZXMgdGhlIG5hbWUgb2YgYSBzZW5zb3IgKi8KIAljaGFyIG5hbWVbMzJdOwpAQCAtODEsMTIgKzc5LDYgQEAKIAogCS8qIEluc3RydWN0cyB0aGUgc2Vuc29yIHRvIGR1bXAgYWxsIGl0cyBjb250ZW50cyAqLwogCWludCAoKmR1bXApKHN0cnVjdCBzZCAqc2QpOwotCi0JaW50IG5jdHJsczsKLQlzdHJ1Y3QgY3RybCBjdHJsc1tTVFYwNlhYX01BWF9DVFJMU107Ci0KLQljaGFyIG5tb2RlczsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IG1vZGVzW107CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKaW5kZXggMWNhOTFmMi4uNjljNzdjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmMKQEAgLTI5LDI2ICsyOSw5MiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF92djY0MTAuaCIKIAorc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdnY2NDEwX21vZGVbXSA9IHsKKwl7CisJCTM1NiwKKwkJMjkyLAorCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQlWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzNTYgKiAyOTIsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCB2djY0MTBfY3RybFtdID0geworI2RlZmluZSBIRkxJUF9JRFggMAorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJob3Jpem9udGFsIGZsaXAiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF9oZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfaGZsaXAKKwl9LAorI2RlZmluZSBWRkxJUF9JRFggMQorCXsKKwkJeworCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSAwCisJCX0sCisJCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAorCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAorCX0sCisjZGVmaW5lIEdBSU5fSURYIDIKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJhbmFsb2cgZ2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDE1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IHZ2NjQxMF9zZXRfYW5hbG9nX2dhaW4sCisJCS5nZXQgPSB2djY0MTBfZ2V0X2FuYWxvZ19nYWluCisJfQorfTsKKwogc3RhdGljIGludCB2djY0MTBfcHJvYmUoc3RydWN0IHNkICpzZCkKIHsKIAl1MTYgZGF0YTsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisJczMyICpzZW5zb3Jfc2V0dGluZ3M7CiAKIAllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREVWSUNFSCwgJmRhdGEpOwotCiAJaWYgKGVyciA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKGRhdGEgPT0gMHgxOSkgewogCQlpbmZvKCJ2djY0MTAgc2Vuc29yIGRldGVjdGVkIik7CiAKLQkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubW9kZXM7Ci0JCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5ubW9kZXM7Ci0JCXNkLT5kZXNjLmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLmN0cmxzOwotCQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubmN0cmxzOworCQlzZW5zb3Jfc2V0dGluZ3MgPSBrbWFsbG9jKEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpICogc2l6ZW9mKHMzMiksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJCWlmICghc2Vuc29yX3NldHRpbmdzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSB2djY0MTBfbW9kZTsKKwkJc2QtPmdzcGNhX2Rldi5jYW0ubm1vZGVzID0gQVJSQVlfU0laRSh2djY0MTBfbW9kZSk7CisJCXNkLT5kZXNjLmN0cmxzID0gdnY2NDEwX2N0cmw7CisJCXNkLT5kZXNjLm5jdHJscyA9IEFSUkFZX1NJWkUodnY2NDEwX2N0cmwpOworCisJCWZvciAoaSA9IDA7IGkgPCBzZC0+ZGVzYy5uY3RybHM7IGkrKykKKwkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHZ2NjQxMF9jdHJsW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCXNkLT5zZW5zb3JfcHJpdiA9IHNlbnNvcl9zZXR0aW5nczsKIAkJcmV0dXJuIDA7CiAJfQotCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTgwLDYgKzE0NiwxMiBAQAogCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOwogfQogCitzdGF0aWMgdm9pZCB2djY0MTBfZGlzY29ubmVjdChzdHJ1Y3Qgc2QgKnNkKQoreworCXNkLT5zZW5zb3IgPSBOVUxMOworCWtmcmVlKHNkLT5zZW5zb3JfcHJpdik7Cit9CisKIHN0YXRpYyBpbnQgdnY2NDEwX3N0YXJ0KHN0cnVjdCBzZCAqc2QpCiB7CiAJaW50IGVycjsKQEAgLTE1NiwxNyArMjI4LDEzIEBACiAKIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7Ci0JaW50IGVycjsKLQl1MTYgaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RBVEFGT1JNQVQsICZpMmNfZGF0YSk7Ci0KLQkqdmFsID0gKGkyY19kYXRhICYgVlY2NDEwX0hGTElQKSA/IDEgOiAwOwotCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdOwogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGhvcml6b250YWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTE3NCw2ICsyNDIsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tIRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTkxLDE3ICsyNjIsMTMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X3ZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSAoaTJjX2RhdGEgJiBWVjY0MTBfVkZMSVApID8gMSA6IDA7Ci0KKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW1ZGTElQX0lEWF07CiAJUERFQlVHKERfVjRMMiwgIlJlYWQgdmVydGljYWwgZmxpcCAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTIwOSw2ICsyNzYsOSBAQAogCWludCBlcnI7CiAJdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKKworCXNlbnNvcl9zZXR0aW5nc1tWRkxJUF9JRFhdID0gdmFsOwogCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjI2LDI0ICsyOTYsMjMgQEAKIAogc3RhdGljIGludCB2djY0MTBfZ2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKIHsKLQlpbnQgZXJyOwotCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CiAKLQllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfQU5BTE9HR0FJTiwgJmkyY19kYXRhKTsKLQotCSp2YWwgPSBpMmNfZGF0YSAmIDB4ZjsKKwkqdmFsID0gc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXTsKIAogCVBERUJVRyhEX1Y0TDIsICJSZWFkIGFuYWxvZyBnYWluICVkIiwgKnZhbCk7CiAKLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2djY0MTBfc2V0X2FuYWxvZ19nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCWludCBlcnI7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCisJc2Vuc29yX3NldHRpbmdzW0dBSU5fSURYXSA9IHZhbDsKIAlQREVCVUcoRF9WNEwyLCAiU2V0IGFuYWxvZyBnYWluIHRvICVkIiwgdmFsKTsKIAllcnIgPSBzdHYwNnh4X3dyaXRlX3NlbnNvcihzZCwgVlY2NDEwX0FOQUxPR0dBSU4sIDB4ZjAgfCAodmFsICYgMHhmKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKaW5kZXggM2ZmOGM0ZS4uOTVhYzU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfdnY2NDEwLmgKQEAgLTE3OCw2ICsxNzgsNyBAQAogc3RhdGljIGludCB2djY0MTBfaW5pdChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgdnY2NDEwX3N0b3Aoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHZ2NjQxMF9kdW1wKHN0cnVjdCBzZCAqc2QpOworc3RhdGljIHZvaWQgdnY2NDEwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCk7CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9oZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwpAQCAtMTk3LDYyICsxOTgsNyBAQAogCS5zdGFydCA9IHZ2NjQxMF9zdGFydCwKIAkuc3RvcCA9IHZ2NjQxMF9zdG9wLAogCS5kdW1wID0gdnY2NDEwX2R1bXAsCi0KLQkubmN0cmxzID0gMywKLQkuY3RybHMgPSB7Ci0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUJCT0gImhvcml6b250YWwgZmxpcCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X2hmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF9oZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJ2ZXJ0aWNhbCBmbGlwIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAJPSAwCi0JCX0sCi0JCS5zZXQgPSB2djY0MTBfc2V0X3ZmbGlwLAotCQkuZ2V0ID0gdnY2NDEwX2dldF92ZmxpcAotCX0sIHsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gImFuYWxvZyBnYWluIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMAotCQl9LAotCQkuc2V0ID0gdnY2NDEwX3NldF9hbmFsb2dfZ2FpbiwKLQkJLmdldCA9IHZ2NjQxMF9nZXRfYW5hbG9nX2dhaW4KLQl9Ci0JfSwKLQotCS5ubW9kZXMgPSAxLAotCS5tb2RlcyA9IHsKLQl7Ci0JCTM1NiwKLQkJMjkyLAotCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPQotCQkJMzU2ICogMjkyLAotCQkuYnl0ZXNwZXJsaW5lID0gMzU2LAotCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCQkucHJpdiA9IDAKLQl9Ci0JfQorCS5kaXNjb25uZWN0ID0gdnY2NDEwX2Rpc2Nvbm5lY3QsCiB9OwogCiAvKiBJZiBOVUxMLCBvbmx5IHNpbmdsZSB2YWx1ZSB0byB3cml0ZSwgc3RvcmVkIGluIGxlbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwppbmRleCA2ZDkwNGQ1Li5jMmI4YzEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N1bnBsdXMuYwpAQCAtMzksOCArMzksMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OwogCXVuc2lnbmVkIGNoYXIgY29sb3JzOwogCXVuc2lnbmVkIGNoYXIgYXV0b2dhaW47CisJdTggcXVhbGl0eTsKKyNkZWZpbmUgUVVBTElUWV9NSU4gNzAKKyNkZWZpbmUgUVVBTElUWV9NQVggOTUKKyNkZWZpbmUgUVVBTElUWV9ERUYgODUKIAotCWNoYXIgcWluZGV4OwogCWNoYXIgYnJpZGdlOwogI2RlZmluZSBCUklER0VfU1BDQTUwNCAwCiAjZGVmaW5lIEJSSURHRV9TUENBNTA0QiAxCkBAIC01Miw2ICs1NSw4IEBACiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDQyMCAyCiAjZGVmaW5lIExvZ2l0ZWNoQ2xpY2tTbWFydDgyMCAzCiAjZGVmaW5lIE1lZ2FwaXhWNCA0CisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC04MTIsNyArODE3LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwogCXNkLT5zdWJ0eXBlID0gaWQtPmRyaXZlcl9pbmZvOwpAQCAtODUwLDEwICs4NTQsMTAgQEAKIAkJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUyIC8gc2l6ZW9mIHZnYV9tb2RlMlswXTsKIAkJYnJlYWs7CiAJfQotCXNkLT5xaW5kZXggPSA1OwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCiAJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC05NzAsNiArOTc0LDEyIEBACiAJX191OCBpOwogCV9fdTggaW5mb1s2XTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU1BDQTUwNEIpCiAJCXNwY2E1MDRCX3NldFF0YWJsZShnc3BjYV9kZXYpOwogCXNwY2E1MDRCX1NldFNpemVUeXBlKGdzcGNhX2Rldik7CkBAIC0xMDc5LDYgKzEwODksMTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlrZnJlZShzZC0+anBlZ19oZHIpOworfQorCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KIAkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KQEAgLTExNTUsOSArMTE3Miw4IEBACiAJCQkJCWZmZDksIDIpOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAl9CiAKIAkvKiBhZGQgMHgwMCBhZnRlciAweGZmICovCkBAIC0xMTk4LDI2ICsxMjE0LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3UxNiBicmlnaHRuZXNzID0gMDsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhNywgMik7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCWJyaWdodG5lc3MgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjBmMCwgMik7Ci0JCWJyZWFrOwotCX0KLQlzZC0+YnJpZ2h0bmVzcyA9ICgoYnJpZ2h0bmVzcyAmIDB4ZmYpIC0gMTI4KSAlIDI1NTsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEyMzcsMjQgKzEyMzMsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb250cmFzdCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMWE4LCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbnRyYXN0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIwZjEsIDIpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTI3NCwyNCArMTI1Miw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXN3aXRjaCAoc2QtPmJyaWRnZSkgewotCWRlZmF1bHQ6Ci0vKgljYXNlIEJSSURHRV9TUENBNTMzOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEI6ICovCi0vKgljYXNlIEJSSURHRV9TUENBNTA0OiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNEM6ICovCi0JCXNkLT5jb2xvcnMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhZSwgMikgPj4gMTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfU1BDQTUzNjoKLQkJc2QtPmNvbG9ycyA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGY2LCAyKSA+PiAxOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMzA2LDcgKzEyNjYsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmJyaWdodG5lc3M7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI1LDcgKzEyODQsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDQsNyArMTMwMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzY1LDYgKzEzMjIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTEzNzQsNyArMTM1OSwxMCBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTE0NjUsOCArMTQ1MywxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwppbmRleCA2ZWUxMTFhLi5mNjNlMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Q2MTMuYwpAQCAtMzcsMjAgKzM3LDIxIEBACiBzdHJ1Y3Qgc2QgewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7Ci0JdW5zaWduZWQgY2hhciBjb250cmFzdDsKLQl1bnNpZ25lZCBjaGFyIGNvbG9yczsKLQl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOwotCXVuc2lnbmVkIGNoYXIgZ2FtbWE7Ci0JdW5zaWduZWQgY2hhciBzaGFycG5lc3M7Ci0JdW5zaWduZWQgY2hhciBmcmVxOwotCXVuc2lnbmVkIGNoYXIgd2hpdGViYWxhbmNlOwotCXVuc2lnbmVkIGNoYXIgbWlycm9yOwotCXVuc2lnbmVkIGNoYXIgZWZmZWN0OworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOworCXU4IGF1dG9nYWluOworCXU4IGdhbW1hOworCXU4IHNoYXJwbmVzczsKKwl1OCBmcmVxOworCXU4IHdoaXRlYmFsYW5jZTsKKwl1OCBtaXJyb3I7CisJdTggZWZmZWN0OwogCi0JX191OCBzZW5zb3I7Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAwCi0jZGVmaW5lIFNFTlNPUl9PTTY4MDIgMQorCXU4IHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX09NNjgwMiAwCisjZGVmaW5lIFNFTlNPUl9PVEhFUiAxCisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQSAyCiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC03OCw3ICs3OSw2IEBACiAJCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKm1lbnUpOwogCiBzdGF0aWMgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKLSNkZWZpbmUgU0RfQlJJR0hUTkVTUyAwCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtODcsMTIgKzg3LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSA4LAorI2RlZmluZSBCUklHSFRORVNTX0RFRiA4CisJICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCSB9LAotI2RlZmluZSBTRF9DT05UUkFTVCAxCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKQEAgLTEwMSwxMiArMTAxLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGQsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDcsCisjZGVmaW5lIENPTlRSQVNUX0RFRiAweDA3CisJICAuZGVmYXVsdF92YWx1ZSA9IENPTlRSQVNUX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKIAkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAogCSB9LAotI2RlZmluZSBTRF9DT0xPUiAyCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLApAQCAtMTE1LDcgKzExNSw4IEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDB4MGYsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDUsCisjZGVmaW5lIENPTE9SU19ERUYgMHgwNQorCSAgLmRlZmF1bHRfdmFsdWUgPSBDT0xPUlNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGNvbG9ycywKIAkgLmdldCA9IHNkX2dldGNvbG9ycywKQEAgLTEzNSw3ICsxMzYsNiBAQAogCSAuc2V0ID0gc2Rfc2V0Z2FtbWEsCiAJIC5nZXQgPSBzZF9nZXRnYW1tYSwKIAkgfSwKLSNkZWZpbmUgU0RfQVVUT0dBSU4gNAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfR0FJTiwJLyogaGVyZSwgaSBhY3RpdmF0ZSBvbmx5IHRoZSBsb3dsaWdodCwKQEAgLTE0NiwxMiArMTQ2LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4MDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAweDAxCisJICAuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRsb3dsaWdodCwKIAkgLmdldCA9IHNkX2dldGxvd2xpZ2h0LAogCSB9LAotI2RlZmluZSBTRF9NSVJST1IgNQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfSEZMSVAsCkBAIC0xNjAsMTIgKzE2MCwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBNSVJST1JfREVGIDAKKwkgIC5kZWZhdWx0X3ZhbHVlID0gTUlSUk9SX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmbGlwLAogCSAuZ2V0ID0gc2RfZ2V0ZmxpcAogCX0sCi0jZGVmaW5lIFNEX0xJR0hURlJFUSA2CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwKQEAgLTE3NCwxMiArMTc0LDEyIEBACiAJICAubWluaW11bSA9IDEsCQkvKiAxIC0+IDB4NTAsIDItPjB4NjAgKi8KIAkgIC5tYXhpbXVtID0gMiwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMSwKKyNkZWZpbmUgRlJFUV9ERUYgMQorCSAgLmRlZmF1bHRfdmFsdWUgPSBGUkVRX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRmcmVxLAogCSAuZ2V0ID0gc2RfZ2V0ZnJlcX0sCiAKLSNkZWZpbmUgU0RfV0hJVEVfQkFMQU5DRSA3CiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFLApAQCAtMTg4LDEyICsxODgsMTIgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgV0hJVEVfQkFMQU5DRV9ERUYgMAorCSAgLmRlZmF1bHRfdmFsdWUgPSBXSElURV9CQUxBTkNFX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXR3aGl0ZWJhbGFuY2UsCiAJIC5nZXQgPSBzZF9nZXR3aGl0ZWJhbGFuY2UKIAl9LAotI2RlZmluZSBTRF9TSEFSUE5FU1MgOAkJLyogKGFrYSBkZWZpbml0aW9uIG9uIHdpbikgKi8KIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX1NIQVJQTkVTUywKQEAgLTIwMiwxMiArMjAyLDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDE1LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA2LAorI2RlZmluZSBTSEFSUE5FU1NfREVGIDB4MDYKKwkgIC5kZWZhdWx0X3ZhbHVlID0gU0hBUlBORVNTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0VGRkVDVFMgOQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfRUZGRUNUUywKQEAgLTIxNiw3ICsyMTYsOCBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSA0LAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAwLAorI2RlZmluZSBFRkZFQ1RTX0RFRiAwCisJICAuZGVmYXVsdF92YWx1ZSA9IEVGRkVDVFNfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGVmZmVjdCwKIAkgLmdldCA9IHNkX2dldGVmZmVjdApAQCAtMjYzLDI4ICsyNjQsNTAgQEAKIAogLyogc2Vuc29yIHNwZWNpZmljIGRhdGEgKi8KIHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHsKLQljb25zdCBfX3U4IGRhdGExWzIwXTsKLQljb25zdCBfX3U4IGRhdGEyWzE4XTsKLQljb25zdCBfX3U4IGRhdGEzWzE4XTsKLQljb25zdCBfX3U4IGRhdGE0WzRdOwotCWNvbnN0IF9fdTggZGF0YTVbNl07Ci0JY29uc3QgX191OCBzdHJlYW1bNF07CisJY29uc3QgdTggZGF0YTFbMTBdOworCWNvbnN0IHU4IGRhdGEyWzldOworCWNvbnN0IHU4IGRhdGEzWzldOworCWNvbnN0IHU4IGRhdGE0WzRdOworCWNvbnN0IHU4IGRhdGE1WzZdOworCWNvbnN0IHU4IHN0cmVhbVs0XTsKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRpdGlvbmFsX3NlbnNvcl9kYXRhIHNlbnNvcl9kYXRhW10gPSB7CisgICAgewkJCQkvKiBPTTY4MDIgKi8KKwkuZGF0YTEgPQorCQl7MHhjMiwgMHgyOCwgMHgwZiwgMHgyMiwgMHhjZCwgMHgyNywgMHgyYywgMHgwNiwKKwkJIDB4YjMsIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLCAweGZmLCAweDgwLCAweGZmLAorCQkgMHhmZn0sCisJLmRhdGE0ID0JLypGcmVxICg1MC82MEh6KS4gU3BsaXR0ZWQgZm9yIHRlc3QgcHVycG9zZSAqLworCQl7MHg2NiwgMHhjYSwgMHhhOCwgMHhmMH0sCisJLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCisJCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAorICAgIH0sCisgICAgewkJCQkvKiBPVEhFUiAqLworCS5kYXRhMSA9CisJCXsweGMxLCAweDQ4LCAweDA0LCAweDFiLCAweGNhLCAweDJlLCAweDMzLCAweDNhLAorCQkgMHhlOCwgMHhmY30sCisJLmRhdGEyID0KKwkJezB4NGUsIDB4OWMsIDB4ZWMsIDB4NDAsIDB4ODAsIDB4YzAsIDB4NDgsIDB4OTYsCisJCSAweGQ5fSwKKwkuZGF0YTQgPQorCQl7MHg2NiwgMHgwMCwgMHhhOCwgMHhhOH0sCisJLmRhdGE1ID0KKwkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MjksIDB4ODEsIDB4Njl9LAorCS5zdHJlYW0gPQorCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHgwMH0sCisgICAgfSwKICAgICB7CQkJCS8qIFRBUzUxMzBBICovCiAJLmRhdGExID0KLQkJezB4ZDAsIDB4YmIsIDB4ZDEsIDB4MjgsIDB4ZDIsIDB4MTAsIDB4ZDMsIDB4MTAsCi0JCSAweGQ0LCAweGJiLCAweGQ1LCAweDI4LCAweGQ2LCAweDFlLCAweGQ3LCAweDI3LAotCQkgMHhkOCwgMHhjOCwgMHhkOSwgMHhmY30sCisJCXsweGJiLCAweDI4LCAweDEwLCAweDEwLCAweGJiLCAweDI4LCAweDFlLCAweDI3LAorCQkgMHhjOCwgMHhmY30sCiAJLmRhdGEyID0KLQkJezB4ZTAsIDB4NjAsIDB4ZTEsIDB4YTgsIDB4ZTIsIDB4ZTAsIDB4ZTMsIDB4NjAsCi0JCSAweGU0LCAweGE4LCAweGU1LCAweGUwLCAweGU2LCAweDYwLCAweGU3LCAweGE4LAotCQkgMHhlOCwgMHhlMH0sCi0JLmRhdGEzID0KLQkJezB4YzcsIDB4NjAsIDB4YzgsIDB4YTgsIDB4YzksIDB4ZTAsIDB4Y2EsIDB4NjAsCi0JCSAweGNiLCAweGE4LCAweGNjLCAweGUwLCAweGNkLCAweDYwLCAweGNlLCAweGE4LAotCQkgMHhjZiwgMHhlMH0sCisJCXsweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LCAweGUwLCAweDYwLCAweGE4LAorCQkgMHhlMH0sCiAJLmRhdGE0ID0JLyogRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KIAkJezB4NjYsIDB4MDAsIDB4YTgsIDB4ZTh9LAogCS5kYXRhNSA9CkBAIC0yOTIsMzIgKzMxNSwxMiBAQAogCS5zdHJlYW0gPQogCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg0MH0sCiAgICAgfSwKLSAgICB7CQkJCS8qIE9NNjgwMiAqLwotCS5kYXRhMSA9Ci0JCXsweGQwLCAweGMyLCAweGQxLCAweDI4LCAweGQyLCAweDBmLCAweGQzLCAweDIyLAotCQkgMHhkNCwgMHhjZCwgMHhkNSwgMHgyNywgMHhkNiwgMHgyYywgMHhkNywgMHgwNiwKLQkJIDB4ZDgsIDB4YjMsIDB4ZDksIDB4ZmN9LAotCS5kYXRhMiA9Ci0JCXsweGUwLCAweDgwLCAweGUxLCAweGZmLCAweGUyLCAweGZmLCAweGUzLCAweDgwLAotCQkgMHhlNCwgMHhmZiwgMHhlNSwgMHhmZiwgMHhlNiwgMHg4MCwgMHhlNywgMHhmZiwKLQkJIDB4ZTgsIDB4ZmZ9LAotCS5kYXRhMyA9Ci0JCXsweGM3LCAweDgwLCAweGM4LCAweGZmLCAweGM5LCAweGZmLCAweGNhLCAweDgwLAotCQkgMHhjYiwgMHhmZiwgMHhjYywgMHhmZiwgMHhjZCwgMHg4MCwgMHhjZSwgMHhmZiwKLQkJIDB4Y2YsIDB4ZmZ9LAotCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KLQkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjAgfSwKLQkuZGF0YTUgPQkvKiB0aGlzIGNvdWxkIGJlIHJlbW92ZWQgbGF0ZXIgKi8KLQkJezB4MGMsIDB4MDMsIDB4YWIsIDB4MTMsIDB4ODEsIDB4MjN9LAotCS5zdHJlYW0gPQotCQl7MHgwYiwgMHgwNCwgMHgwYSwgMHg3OH0sCi0gICAgfQogfTsKIAogI2RlZmluZSBNQVhfRUZGRUNUUyA3CiAvKiBlYXNpbHkgZG9uZSBieSBzb2Z0LCB0aGlzIHRhYmxlIGNvdWxkIGJlIHJlbW92ZWQsCiAgKiBpIGtlZXAgaXQgaGVyZSBqdXN0IGluIGNhc2UgKi8KLXN0YXRpYyBjb25zdCBfX3U4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0geworc3RhdGljIGNvbnN0IHU4IGVmZmVjdHNfdGFibGVbTUFYX0VGRkVDVFNdWzZdID0gewogCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDAwfSwJLyogTm9ybWFsICovCiAJezB4YTgsIDB4YzgsIDB4YzYsIDB4NTIsIDB4YzAsIDB4MDR9LAkvKiBSZXB1amFyICovCiAJezB4YTgsIDB4ZTgsIDB4YzYsIDB4ZDIsIDB4YzAsIDB4MjB9LAkvKiBNb25vY2hyb21lICovCkBAIC0zMjcsOTAgKzMzMCw1OCBAQAogCXsweGE4LCAweGM4LCAweGM2LCAweGQyLCAweGMwLCAweDQwfSwJLyogTmVnYXRpdmUgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMzRdID0gewotCXsweDkwLCAweDAwLCAweDkxLCAweDNlLCAweDkyLCAweDY5LCAweDkzLCAweDg1LAkvKiAwICovCi0JIDB4OTQsIDB4OTUsIDB4OTUsIDB4YTEsIDB4OTYsIDB4YWUsIDB4OTcsIDB4YjksCi0JIDB4OTgsIDB4YzIsIDB4OTksIDB4Y2IsIDB4OWEsIDB4ZDQsIDB4OWIsIDB4ZGIsCi0JIDB4OWMsIDB4ZTMsIDB4OWQsIDB4ZWEsIDB4OWUsIDB4ZjEsIDB4OWYsIDB4ZjgsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDMzLCAweDkyLCAweDVhLCAweDkzLCAweDc1LAkvKiAxICovCi0JIDB4OTQsIDB4ODUsIDB4OTUsIDB4OTMsIDB4OTYsIDB4YTEsIDB4OTcsIDB4YWQsCi0JIDB4OTgsIDB4YjcsIDB4OTksIDB4YzIsIDB4OWEsIDB4Y2IsIDB4OWIsIDB4ZDQsCi0JIDB4OWMsIDB4ZGUsIDB4OUQsIDB4ZTcsIDB4OWUsIDB4ZjAsIDB4OWYsIDB4ZjcsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDJmLCAweDkyLCAweDUxLCAweDkzLCAweDZiLAkvKiAyICovCi0JIDB4OTQsIDB4N2MsIDB4OTUsIDB4OGEsIDB4OTYsIDB4OTksIDB4OTcsIDB4YTYsCi0JIDB4OTgsIDB4YjEsIDB4OTksIDB4YmMsIDB4OWEsIDB4YzYsIDB4OWIsIDB4ZDAsCi0JIDB4OWMsIDB4ZGIsIDB4OWQsIDB4ZTQsIDB4OWUsIDB4ZWQsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDI5LCAweDkyLCAweDQ4LCAweDkzLCAweDYwLAkvKiAzICovCi0JIDB4OTQsIDB4NzIsIDB4OTUsIDB4ODEsIDB4OTYsIDB4OTAsIDB4OTcsIDB4OWUsCi0JIDB4OTgsIDB4YWEsIDB4OTksIDB4YjUsIDB4OWEsIDB4YmYsIDB4OWIsIDB4Y2IsCi0JIDB4OWMsIDB4ZDYsIDB4OWQsIDB4ZTEsIDB4OWUsIDB4ZWIsIDB4OWYsIDB4ZjUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDIzLCAweDkyLCAweDNmLCAweDkzLCAweDU1LAkvKiA0ICovCi0JIDB4OTQsIDB4NjgsIDB4OTUsIDB4NzcsIDB4OTYsIDB4ODYsIDB4OTcsIDB4OTUsCi0JIDB4OTgsIDB4YTIsIDB4OTksIDB4YWQsIDB4OWEsIDB4YjksIDB4OWIsIDB4YzYsCi0JIDB4OWMsIDB4ZDIsIDB4OWQsIDB4ZGUsIDB4OWUsIDB4ZTksIDB4OWYsIDB4ZjQsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDFiLCAweDkyLCAweDMzLCAweDkzLCAweDQ4LAkvKiA1ICovCi0JIDB4OTQsIDB4NTksIDB4OTUsIDB4NjksIDB4OTYsIDB4NzksIDB4OTcsIDB4ODcsCi0JIDB4OTgsIDB4OTYsIDB4OTksIDB4YTMsIDB4OWEsIDB4YjEsIDB4OWIsIDB4YmUsCi0JIDB4OWMsIDB4Y2MsIDB4OWQsIDB4ZGEsIDB4OWUsIDB4ZTcsIDB4OWYsIDB4ZjMsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDEwLCAweDkzLCAweDIwLAkvKiA2ICovCi0JIDB4OTQsIDB4MzIsIDB4OTUsIDB4NDAsIDB4OTYsIDB4NTcsIDB4OTcsIDB4NjcsCi0JIDB4OTgsIDB4NzcsIDB4OTksIDB4ODgsIDB4OWEsIDB4OTksIDB4OWIsIDB4YWEsCi0JIDB4OWMsIDB4YmIsIDB4OWQsIDB4Y2MsIDB4OWUsIDB4ZGQsIDB4OWYsIDB4ZWUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDAyLCAweDkyLCAweDE0LCAweDkzLCAweDI2LAkvKiA3ICovCi0JIDB4OTQsIDB4MzgsIDB4OTUsIDB4NGEsIDB4OTYsIDB4NjAsIDB4OTcsIDB4NzAsCi0JIDB4OTgsIDB4ODAsIDB4OTksIDB4OTAsIDB4OWEsIDB4YTAsIDB4OWIsIDB4YjAsCi0JIDB4OWMsIDB4YzAsIDB4OUQsIDB4ZDAsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDIyLCAweDkzLCAweDM1LAkvKiA4ICovCi0JIDB4OTQsIDB4NDcsIDB4OTUsIDB4NWEsIDB4OTYsIDB4NjksIDB4OTcsIDB4NzksCi0JIDB4OTgsIDB4ODgsIDB4OTksIDB4OTcsIDB4OWEsIDB4YTcsIDB4OWIsIDB4YjYsCi0JIDB4OWMsIDB4YzQsIDB4OWQsIDB4ZDMsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDEwLCAweDkyLCAweDI2LCAweDkzLCAweDQwLAkvKiA5ICovCi0JIDB4OTQsIDB4NTQsIDB4OTUsIDB4NjUsIDB4OTYsIDB4NzUsIDB4OTcsIDB4ODQsCi0JIDB4OTgsIDB4OTMsIDB4OTksIDB4YTEsIDB4OWEsIDB4YjAsIDB4OWIsIDB4YmQsCi0JIDB4OWMsIDB4Y2EsIDB4OWQsIDB4ZDYsIDB4OWUsIDB4ZTAsIDB4OWYsIDB4ZjAsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDE4LCAweDkyLCAweDJiLCAweDkzLCAweDQ0LAkvKiAxMCAqLwotCSAweDk0LCAweDYwLCAweDk1LCAweDcwLCAweDk2LCAweDgwLCAweDk3LCAweDhlLAotCSAweDk4LCAweDljLCAweDk5LCAweGFhLCAweDlhLCAweGI3LCAweDliLCAweGM0LAotCSAweDljLCAweGQwLCAweDlkLCAweGQ4LCAweDllLCAweGUyLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxYSwgMHg5MiwgMHgzNCwgMHg5MywgMHg1MiwJLyogMTEgKi8KLQkgMHg5NCwgMHg2NiwgMHg5NSwgMHg3ZSwgMHg5NiwgMHg4RCwgMHg5NywgMHg5QiwKLQkgMHg5OCwgMHhhOCwgMHg5OSwgMHhiNCwgMHg5YSwgMHhjMCwgMHg5YiwgMHhjYiwKLQkgMHg5YywgMHhkNiwgMHg5ZCwgMHhlMSwgMHg5ZSwgMHhlYiwgMHg5ZiwgMHhmNSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4M2YsIDB4OTIsIDB4NWEsIDB4OTMsIDB4NmUsCS8qIDEyICovCi0JIDB4OTQsIDB4N2YsIDB4OTUsIDB4OGUsIDB4OTYsIDB4OWMsIDB4OTcsIDB4YTgsCi0JIDB4OTgsIDB4YjQsIDB4OTksIDB4YmYsIDB4OWEsIDB4YzksIDB4OWIsIDB4ZDMsCi0JIDB4OWMsIDB4ZGMsIDB4OWQsIDB4ZTUsIDB4OWUsIDB4ZWUsIDB4OWYsIDB4ZjYsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDU0LCAweDkyLCAweDZmLCAweDkzLCAweDgzLAkvKiAxMyAqLwotCSAweDk0LCAweDkzLCAweDk1LCAweGEwLCAweDk2LCAweGFkLCAweDk3LCAweGI3LAotCSAweDk4LCAweGMyLCAweDk5LCAweGNiLCAweDlhLCAweGQ0LCAweDliLCAweGRjLAotCSAweDljLCAweGU0LCAweDlkLCAweGViLCAweDllLCAweGYyLCAweDlmLCAweGY5LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg2ZSwgMHg5MiwgMHg4OCwgMHg5MywgMHg5YSwJLyogMTQgKi8KLQkgMHg5NCwgMHhhOCwgMHg5NSwgMHhiMywgMHg5NiwgMHhiZCwgMHg5NywgMHhjNiwKLQkgMHg5OCwgMHhjZiwgMHg5OSwgMHhkNiwgMHg5YSwgMHhkZCwgMHg5YiwgMHhlMywKLQkgMHg5YywgMHhlOSwgMHg5ZCwgMHhlZiwgMHg5ZSwgMHhmNCwgMHg5ZiwgMHhmYSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4OTMsIDB4OTIsIDB4YTgsIDB4OTMsIDB4YjcsCS8qIDE1ICovCi0JIDB4OTQsIDB4YzEsIDB4OTUsIDB4Y2EsIDB4OTYsIDB4ZDIsIDB4OTcsIDB4ZDgsCi0JIDB4OTgsIDB4ZGUsIDB4OTksIDB4ZTMsIDB4OWEsIDB4ZTgsIDB4OWIsIDB4ZWQsCi0JIDB4OWMsIDB4ZjEsIDB4OWQsIDB4ZjUsIDB4OWUsIDB4ZjgsIDB4OWYsIDB4ZmMsCi0JIDB4YTAsIDB4ZmZ9CitzdGF0aWMgY29uc3QgdTggZ2FtbWFfdGFibGVbR0FNTUFfTUFYXVsxN10gPSB7CisJezB4MDAsIDB4M2UsIDB4NjksIDB4ODUsIDB4OTUsIDB4YTEsIDB4YWUsIDB4YjksCS8qIDAgKi8KKwkgMHhjMiwgMHhjYiwgMHhkNCwgMHhkYiwgMHhlMywgMHhlYSwgMHhmMSwgMHhmOCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MzMsIDB4NWEsIDB4NzUsIDB4ODUsIDB4OTMsIDB4YTEsIDB4YWQsCS8qIDEgKi8KKwkgMHhiNywgMHhjMiwgMHhjYiwgMHhkNCwgMHhkZSwgMHhlNywgMHhmMCwgMHhmNywKKwkgMHhmZn0sCisJezB4MDAsIDB4MmYsIDB4NTEsIDB4NmIsIDB4N2MsIDB4OGEsIDB4OTksIDB4YTYsCS8qIDIgKi8KKwkgMHhiMSwgMHhiYywgMHhjNiwgMHhkMCwgMHhkYiwgMHhlNCwgMHhlZCwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjksIDB4NDgsIDB4NjAsIDB4NzIsIDB4ODEsIDB4OTAsIDB4OWUsCS8qIDMgKi8KKwkgMHhhYSwgMHhiNSwgMHhiZiwgMHhjYiwgMHhkNiwgMHhlMSwgMHhlYiwgMHhmNSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MjMsIDB4M2YsIDB4NTUsIDB4NjgsIDB4NzcsIDB4ODYsIDB4OTUsCS8qIDQgKi8KKwkgMHhhMiwgMHhhZCwgMHhiOSwgMHhjNiwgMHhkMiwgMHhkZSwgMHhlOSwgMHhmNCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MWIsIDB4MzMsIDB4NDgsIDB4NTksIDB4NjksIDB4NzksIDB4ODcsCS8qIDUgKi8KKwkgMHg5NiwgMHhhMywgMHhiMSwgMHhiZSwgMHhjYywgMHhkYSwgMHhlNywgMHhmMywKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTAsIDB4MjAsIDB4MzIsIDB4NDAsIDB4NTcsIDB4NjcsCS8qIDYgKi8KKwkgMHg3NywgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwKKwkgMHhmZn0sCisJezB4MDAsIDB4MDIsIDB4MTQsIDB4MjYsIDB4MzgsIDB4NGEsIDB4NjAsIDB4NzAsCS8qIDcgKi8KKwkgMHg4MCwgMHg5MCwgMHhhMCwgMHhiMCwgMHhjMCwgMHhkMCwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjIsIDB4MzUsIDB4NDcsIDB4NWEsIDB4NjksIDB4NzksCS8qIDggKi8KKwkgMHg4OCwgMHg5NywgMHhhNywgMHhiNiwgMHhjNCwgMHhkMywgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTAsIDB4MjYsIDB4NDAsIDB4NTQsIDB4NjUsIDB4NzUsIDB4ODQsCS8qIDkgKi8KKwkgMHg5MywgMHhhMSwgMHhiMCwgMHhiZCwgMHhjYSwgMHhkNiwgMHhlMCwgMHhmMCwKKwkgMHhmZn0sCisJezB4MDAsIDB4MTgsIDB4MmIsIDB4NDQsIDB4NjAsIDB4NzAsIDB4ODAsIDB4OGUsCS8qIDEwICovCisJIDB4OWMsIDB4YWEsIDB4YjcsIDB4YzQsIDB4ZDAsIDB4ZDgsIDB4ZTIsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDFhLCAweDM0LCAweDUyLCAweDY2LCAweDdlLCAweDhELCAweDlCLAkvKiAxMSAqLworCSAweGE4LCAweGI0LCAweGMwLCAweGNiLCAweGQ2LCAweGUxLCAweGViLCAweGY1LAorCSAweGZmfSwKKwl7MHgwMCwgMHgzZiwgMHg1YSwgMHg2ZSwgMHg3ZiwgMHg4ZSwgMHg5YywgMHhhOCwJLyogMTIgKi8KKwkgMHhiNCwgMHhiZiwgMHhjOSwgMHhkMywgMHhkYywgMHhlNSwgMHhlZSwgMHhmNiwKKwkgMHhmZn0sCisJezB4MDAsIDB4NTQsIDB4NmYsIDB4ODMsIDB4OTMsIDB4YTAsIDB4YWQsIDB4YjcsCS8qIDEzICovCisJIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGMsIDB4ZTQsIDB4ZWIsIDB4ZjIsIDB4ZjksCisJIDB4ZmZ9LAorCXsweDAwLCAweDZlLCAweDg4LCAweDlhLCAweGE4LCAweGIzLCAweGJkLCAweGM2LAkvKiAxNCAqLworCSAweGNmLCAweGQ2LCAweGRkLCAweGUzLCAweGU5LCAweGVmLCAweGY0LCAweGZhLAorCSAweGZmfSwKKwl7MHgwMCwgMHg5MywgMHhhOCwgMHhiNywgMHhjMSwgMHhjYSwgMHhkMiwgMHhkOCwJLyogMTUgKi8KKwkgMHhkZSwgMHhlMywgMHhlOCwgMHhlZCwgMHhmMSwgMHhmNSwgMHhmOCwgMHhmYywKKwkgMHhmZn0KIH07CiAKLXN0YXRpYyBjb25zdCBfX3U4IHRhczUxMzBhX3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggdGFzNTEzMGFfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHg2MiwgMHgwOCwgMHg2MywgMHg3MCwgMHg2NCwgMHgxZCwgMHg2MCwgMHgwOX0sCiAJezB4NjIsIDB4MjAsIDB4NjMsIDB4MDEsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDl9LAogCXsweDYyLCAweDA3LCAweDYzLCAweDAzLCAweDY0LCAweDAwLCAweDYwLCAweDA5fSwKQEAgLTQxOCwxMSArMzg5LDExIEBACiAJe30sCiB9OwogCi1zdGF0aWMgX191OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKK3N0YXRpYyB1OCBzZW5zb3JfcmVzZXRbXSA9IHsweDYxLCAweDY4LCAweDYyLCAweGZmLCAweDYwLCAweDA3fTsKIAogLyogcmVhZCAxIGJ5dGUgKi8KLXN0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgICBfX3UxNiBpbmRleCkKK3N0YXRpYyB1OCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCSAgIHUxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLApAQCAtNDM1LDcgKzQwNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCkKKwkJICB1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQ0Niw3ICs0MTcsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgIGNvbnN0IF9fdTggKmJ1ZmZlciwgX191MTYgbGVuKQorCQkgIGNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCiB7CiAJaWYgKGxlbiA8PSBVU0JfQlVGX1NaKSB7CiAJCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIGJ1ZmZlciwgbGVuKTsKQEAgLTQ1Nyw3ICs0MjgsNyBAQAogCQkJCTB4MDEsIDAsCiAJCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7CiAJfSBlbHNlIHsKLQkJX191OCAqdG1wYnVmOworCQl1OCAqdG1wYnVmOwogCiAJCXRtcGJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAkJbWVtY3B5KHRtcGJ1ZiwgYnVmZmVyLCBsZW4pOwpAQCAtNDcxLDE0ICs0NDIsNDEgQEAKIAl9CiB9CiAKKy8qIHdyaXRlIHZhbHVlcyB0byBjb25zZWN1dGl2ZSByZWdpc3RlcnMgKi8KK3N0YXRpYyB2b2lkIHJlZ193X2l4YnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXU4IHJlZywKKwkJCWNvbnN0IHU4ICpidWZmZXIsIHUxNiBsZW4pCit7CisJaW50IGk7CisJdTggKnAsICp0bXBidWY7CisKKwlpZiAobGVuICogMiA8PSBVU0JfQlVGX1NaKQorCQlwID0gdG1wYnVmID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWVsc2UKKwkJcCA9IHRtcGJ1ZiA9IGttYWxsb2MobGVuICogMiwgR0ZQX0tFUk5FTCk7CisJaSA9IGxlbjsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJKnArKyA9IHJlZysrOworCQkqcCsrID0gKmJ1ZmZlcisrOworCX0KKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCTB4MDEsIDAsCisJCQl0bXBidWYsIGxlbiAqIDIsIDUwMCk7CisJaWYgKGxlbiAqIDIgPiBVU0JfQlVGX1NaKQorCQlrZnJlZSh0bXBidWYpOworfQorCiAvKiBSZXBvcnRlZCBhcyBPTTY4MDIqLwogc3RhdGljIHZvaWQgb202ODAyX3NlbnNvcl9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpbnQgaTsKLQljb25zdCBfX3U4ICpwOwotCV9fdTggYnl0ZTsKLQlfX3U4IHZhbFs2XSA9IHsweDYyLCAwLCAweDY0LCAwLCAweDYwLCAweDA1fTsKLQlzdGF0aWMgY29uc3QgX191OCBzZW5zb3JfaW5pdFtdID0geworCWNvbnN0IHU4ICpwOworCXU4IGJ5dGU7CisJdTggdmFsWzZdID0gezB4NjIsIDAsIDB4NjQsIDAsIDB4NjAsIDB4MDV9OworCXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfaW5pdFtdID0gewogCQkweGRmLCAweDZkLAogCQkweGRkLCAweDE4LAogCQkweDVhLCAweGUwLApAQCAtNDk3LDcgKzQ5NSw3IEBACiAJfTsKIAogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7Ci0JbXNsZWVwKDUpOworCW1zbGVlcCgxMDApOwogCWkgPSA0OwogCXdoaWxlICgtLWkgPiAwKSB7CiAJCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2MCk7CkBAIC01MzgsMjAgKzUzNiwyMCBAQAogCXN0cnVjdCBjYW0gKmNhbTsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGVfdDE2OwogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZV90MTYpOwogCi0Jc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5jb2xvcnMgPSBzZF9jdHJsc1tTRF9DT0xPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOworCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JTX0RFRjsKIAlzZC0+Z2FtbWEgPSBHQU1NQV9ERUY7Ci0Jc2QtPm1pcnJvciA9IHNkX2N0cmxzW1NEX01JUlJPUl0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+ZnJlcSA9IHNkX2N0cmxzW1NEX0xJR0hURlJFUV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+d2hpdGViYWxhbmNlID0gc2RfY3RybHNbU0RfV0hJVEVfQkFMQU5DRV0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+c2hhcnBuZXNzID0gc2RfY3RybHNbU0RfU0hBUlBORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwotCXNkLT5lZmZlY3QgPSBzZF9jdHJsc1tTRF9FRkZFQ1RTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKKwlzZC0+bWlycm9yID0gTUlSUk9SX0RFRjsKKwlzZC0+ZnJlcSA9IEZSRVFfREVGOworCXNkLT53aGl0ZWJhbGFuY2UgPSBXSElURV9CQUxBTkNFX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwlzZC0+ZWZmZWN0ID0gRUZGRUNUU19ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1OSw3ICs1NTcsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzczsKLQlfX3U4IHNldDZbNF0gPSB7IDB4OGYsIDB4MjQsIDB4YzMsIDB4MDAgfTsKKwl1OCBzZXQ2WzRdID0geyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CiAKIAlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CiAJaWYgKGJyaWdodG5lc3MgPCA3KSB7CkBAIC01NzYsNyArNTc0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGNvbnRyYXN0ID0gc2QtPmNvbnRyYXN0OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwl1MTYgcmVnX3RvX3dyaXRlOwogCiAJaWYgKGNvbnRyYXN0IDwgNykKIAkJcmVnX3RvX3dyaXRlID0gMHg4ZWE5IC0gY29udHJhc3QgKiAweDIwMDsKQEAgLTU4OSw3ICs1ODcsNyBAQAogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDgwYmIgKyBzZC0+Y29sb3JzICogMHgxMDA7CS8qIHdhcyAweGMwICovCiAJcmVnX3coZ3NwY2FfZGV2LCByZWdfdG9fd3JpdGUpOwpAQCAtNjAwLDE0ICs1OTgsMTUgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlQREVCVUcoRF9DT05GLCAiR2FtbWE6ICVkIiwgc2QtPmdhbW1hKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBnYW1tYV90YWJsZVtzZC0+Z2FtbWFdLCBzaXplb2YgZ2FtbWFfdGFibGVbMF0pOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHg5MCwKKwkJZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0d2hpdGViYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlfX3U4IHdoaXRlX2JhbGFuY2VbOF0gPQorCXU4IHdoaXRlX2JhbGFuY2VbOF0gPQogCQl7MHg4NywgMHgyMCwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyMCwgMHg4MCwgMHgzOH07CiAKIAlpZiAoc2QtPndoaXRlYmFsYW5jZSkKQEAgLTYxOSw3ICs2MTgsNyBAQAogc3RhdGljIHZvaWQgc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgcmVnX3RvX3dyaXRlOworCXUxNiByZWdfdG9fd3JpdGU7CiAKIAlyZWdfdG9fd3JpdGUgPSAweDBhYTYgKyAweDEwMDAgKiBzZC0+c2hhcnBuZXNzOwogCkBAIC02MzUsMTggKzYzNCwyMiBAQAogCSAqIHRvIHNlZSB0aGUgaW5pdGlhbCBwYXJhbWV0ZXJzLiovCiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwotCV9fdTggYnl0ZSwgdGVzdF9ieXRlOworCXUxNiBzZW5zb3JfaWQ7CisJdTggdGVzdF9ieXRlID0gMDsKKwl1MTYgcmVnODAsIHJlZzhlOwogCi0Jc3RhdGljIGNvbnN0IF9fdTggcmVhZF9pbmRleHNbXSA9Ci0JCXsgMHgwNiwgMHgwNywgMHgwYSwgMHgwYiwgMHg2NiwgMHg4MCwgMHg4MSwgMHg4ZSwgMHg4ZiwgMHhhNSwKLQkJICAweGE2LCAweGE4LCAweGJiLCAweGJjLCAweGM2LCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjFbXSA9CisJc3RhdGljIGNvbnN0IHU4IHJlYWRfaW5kZXhzW10gPQorCQl7IDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCisJCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuMVtdID0KIAkJCXsweDA4LCAweDAzLCAweDA5LCAweDAzLCAweDEyLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuMltdID0KKwlzdGF0aWMgY29uc3QgdTggbjJbXSA9CiAJCQl7MHgwOCwgMHgwMH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjNbXSA9CisJc3RhdGljIGNvbnN0IHU4IG4zWzZdID0KIAkJCXsweDYxLCAweDY4LCAweDY1LCAweDBhLCAweDYwLCAweDA0fTsKLQlzdGF0aWMgY29uc3QgX191OCBuNFtdID0KKwlzdGF0aWMgY29uc3QgdTggbjNfb3RoZXJbNl0gPQorCQkJezB4NjEsIDB4YzIsIDB4NjUsIDB4ODgsIDB4NjAsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1OCBuNFtdID0KIAkJezB4MDksIDB4MDEsIDB4MTIsIDB4MDQsIDB4NjYsIDB4OGEsIDB4ODAsIDB4M2MsCiAJCSAweDgxLCAweDIyLCAweDg0LCAweDUwLCAweDhhLCAweDc4LCAweDhiLCAweDY4LAogCQkgMHg4YywgMHg4OCwgMHg4ZSwgMHgzMywgMHg4ZiwgMHgyNCwgMHhhYSwgMHhiMSwKQEAgLTY1Niw0MCArNjU5LDYxIEBACiAJCSAweDY1LCAweDBhLCAweGJiLCAweDg2LCAweGFmLCAweDU4LCAweGIwLCAweDY4LAogCQkgMHg4NywgMHg0MCwgMHg4OSwgMHgyYiwgMHg4ZCwgMHhmZiwgMHg4MywgMHg0MCwKIAkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODYsIDB4YWYsIDB4NDZ9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ5WzRdID0KLQkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG5zZXQ4WzZdID0KKwlzdGF0aWMgY29uc3QgdTggbjRfb3RoZXJbXSA9CisJCXsweDY2LCAweDAwLCAweDdmLCAweDAwLCAweDgwLCAweGFjLCAweDgxLCAweDY5LAorCQkgMHg4NCwgMHg0MCwgMHg4NSwgMHg3MCwgMHg4NiwgMHgyMCwgMHg4YSwgMHg2OCwKKwkJIDB4OGIsIDB4NTgsIDB4OGMsIDB4ODgsIDB4OGQsIDB4ZmYsIDB4OGUsIDB4YjgsCisJCSAweDhmLCAweDI4LCAweGEyLCAweDYwLCAweGE1LCAweDQwLCAweGE4LCAweGE4LAorCQkgMHhhYywgMHg4NCwgMHhhZCwgMHg4NCwgMHhhZSwgMHgyNCwgMHhhZiwgMHg1NiwKKwkJIDB4YjAsIDB4NjgsIDB4YjEsIDB4MDAsIDB4YjIsIDB4ODgsIDB4YmIsIDB4YzUsCisJCSAweGJjLCAweDRhLCAweGJlLCAweDM2LCAweGMyLCAweDg4LCAweGM1LCAweGMwLAorCQkgMHhjNiwgMHhkYSwgMHhlOSwgMHgyNiwgMHhlYiwgMHgwMH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ4WzZdID0KIAkJCXsgMHhhOCwgMHhmMCwgMHhjNiwgMHg4OCwgMHhjMCwgMHgwMCB9OworCXN0YXRpYyBjb25zdCB1OCBuc2V0OF9vdGhlcls2XSA9CisJCQl7IDB4YTgsIDB4YTgsIDB4YzYsIDB4ZGEsIDB4YzAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggbnNldDlbNF0gPQorCQkJeyAweDBiLCAweDA0LCAweDBhLCAweDc4IH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ5X290aGVyWzRdID0KKwkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHgwMCB9OwogCi0JYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNik7Ci0JdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDA3KSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3Igb202ODAyIik7CisJc2Vuc29yX2lkID0gKHJlZ19yKGdzcGNhX2RldiwgMHgwNikgPDwgOCkKKwkJCXwgcmVnX3IoZ3NwY2FfZGV2LCAweDA3KTsKKwlzd2l0Y2ggKHNlbnNvcl9pZCAmIDB4ZmYwZikgeworCWNhc2UgMHgwODAxOgorCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciB0YXM1MTMwYSIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBBOworCQlicmVhazsKKwljYXNlIDB4MDgwMzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgJ290aGVyJyIpOworCQlzZC0+c2Vuc29yID0gU0VOU09SX09USEVSOworCQlicmVhazsKKwljYXNlIDB4MDgwNzoKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3Igb202ODAyIik7CiAJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT002ODAyOwotCX0gZWxzZSBpZiAoYnl0ZSA9PSAweDA4ICYmIHRlc3RfYnl0ZSA9PSAweDAxKSB7Ci0JCVBERUJVRyhEX0NPTkYsICJzZW5zb3IgdGFzNTEzMGEiKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKLQl9IGVsc2UgewotCQlQREVCVUcoRF9DT05GLCAidW5rbm93biBzZW5zb3IgJTAyeCAlMDJ4IiwgYnl0ZSwgdGVzdF9ieXRlKTsKLQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUERFQlVHKERfRVJSfERfUFJPQkUsICJ1bmtub3duIHNlbnNvciAlMDR4Iiwgc2Vuc29yX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7Ci0JdGVzdF9ieXRlID0gMDsKLQlpID0gNTsKLQl3aGlsZSAoLS1pID49IDApIHsKLQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKLQkJdGVzdF9ieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjMpOwotCQltc2xlZXAoMTAwKTsKLQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQotCQkJYnJlYWs7CQkvKiBPSyAqLwotCX0KLQlpZiAoaSA8IDApIHsKLQkJZXJyKCJCYWQgc2Vuc29yIHJlc2V0ICUwMngiLCB0ZXN0X2J5dGUpOwotLyoJCXJldHVybiAtRUlPOyAqLworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMSwgc2l6ZW9mIG4xKTsKKwkJaSA9IDU7CisJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX3Jlc2V0LCBzaXplb2Ygc2Vuc29yX3Jlc2V0KTsKKwkJCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKKwkJCW1zbGVlcCgxMDApOworCQkJaWYgKHRlc3RfYnl0ZSA9PSAweDE3KQorCQkJCWJyZWFrOwkJLyogT0sgKi8KKwkJfQorCQlpZiAoaSA8IDApIHsKKwkJCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKKy8qCQkJcmV0dXJuIC1FSU87ICovCiAvKmZpeG1lOiB0ZXN0IC0gY29udGludWUgKi8KKwkJfQorCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMiwgc2l6ZW9mIG4yKTsKIAl9Ci0JcmVnX3dfYnVmKGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CiAKIAlpID0gMDsKIAl3aGlsZSAocmVhZF9pbmRleHNbaV0gIT0gMHgwMCkgewpAQCAtNjk5LDIxICs3MjMsMzEgQEAKIAkJaSsrOwogCX0KIAotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40LCBzaXplb2YgbjQpOwotCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX09USEVSKSB7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4zLCBzaXplb2YgbjMpOworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKKwkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwODApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MmM4MCk7CisJCXJlZzgwID0gMHgzODgwOworCQlyZWc4ZSA9IDB4MzM4ZTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuM19vdGhlciwgc2l6ZW9mIG4zX290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjRfb3RoZXIsIHNpemVvZiBuNF9vdGhlcik7CisJCXNkLT5nYW1tYSA9IDU7CisJCXJlZzgwID0gMHhhYzgwOworCQlyZWc4ZSA9IDB4Yjg4ZTsKKwl9CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZDAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAogCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMywKLQkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMyk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGM3LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGUwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMik7CiAKLQlyZWdfdyhnc3BjYV9kZXYsIDB4Mzg4MCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwotCXJlZ193KGdzcGNhX2RldiwgMHgzMzhlKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzgwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHJlZzhlKTsKIAogCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAlzZXRjb250cmFzdChnc3BjYV9kZXYpOwpAQCAtNzMwLDE2ICs3NjQsMjAgQEAKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTUpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ4LCBzaXplb2YgbnNldDgpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDksIHNpemVvZiBuc2V0OSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKKwl9IGVsc2UgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OF9vdGhlciwgc2l6ZW9mIG5zZXQ4X290aGVyKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDlfb3RoZXIsIHNpemVvZiBuc2V0OV9vdGhlcik7CisJfQogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDI4ODApOwotCi0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCiAJcmV0dXJuIDA7CkBAIC03NDgsNyArNzg2LDcgQEAKIHN0YXRpYyB2b2lkIHNldGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGZsaXBjbWRbOF0gPQorCXU4IGZsaXBjbWRbOF0gPQogCQl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX07CiAKIAlpZiAoc2QtPm1pcnJvcikKQEAgLTc3OCw3ICs4MTYsNyBAQAogc3RhdGljIHZvaWQgc2V0bGlnaHRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBmcmVxWzRdID0geyAweDY2LCAweDQwLCAweGE4LCAweGU4IH07CisJdTggZnJlcVs0XSA9IHsgMHg2NiwgMHg0MCwgMHhhOCwgMHhlOCB9OwogCiAJaWYgKHNkLT5mcmVxID09IDIpCS8qIDYwaHogKi8KIAkJZnJlcVsxXSA9IDB4MDA7CkBAIC03OTEsMjIgKzgyOSwyMiBAQAogc3RhdGljIHZvaWQgcG9sbF9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMVtdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDFbXSA9CiAJCXsweDY3LCAweDA1LCAweDY4LCAweDgxLCAweDY5LCAweDgwLCAweDZhLCAweDgyLAogCQkgMHg2YiwgMHg2OCwgMHg2YywgMHg2OSwgMHg3MiwgMHhkOSwgMHg3MywgMHgzNCwKIAkJIDB4NzQsIDB4MzIsIDB4NzUsIDB4OTIsIDB4NzYsIDB4MDAsIDB4MDksIDB4MDEsCiAJCSAweDYwLCAweDE0fTsKLQlzdGF0aWMgY29uc3QgX191OCBwb2xsMltdID0KKwlzdGF0aWMgY29uc3QgdTggcG9sbDJbXSA9CiAJCXsweDY3LCAweDAyLCAweDY4LCAweDcxLCAweDY5LCAweDcyLCAweDcyLCAweGE5LAogCQkgMHg3MywgMHgwMiwgMHg3MywgMHgwMiwgMHg2MCwgMHgxNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDNbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGwzW10gPQogCQl7MHg4NywgMHgzZiwgMHg4OCwgMHgyMCwgMHg4OSwgMHgyZH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDRbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGw0W10gPQogCQl7MHhhNiwgMHgwYSwgMHhlYSwgMHhjZiwgMHhiZSwgMHgyNiwgMHhiMSwgMHg1ZiwKIAkJIDB4YTEsIDB4YjEsIDB4ZGEsIDB4NmIsIDB4ZGIsIDB4OTgsIDB4ZGYsIDB4MGMsCiAJCSAweGMyLCAweDgwLCAweGMzLCAweDEwfTsKIAotCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9UQVM1MTMwQSkgeworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PTTY4MDIpIHsKIAkJUERFQlVHKERfU1RSRUFNLCAiW1NlbnNvciByZXF1aXJlcyBwb2xsaW5nXSIpOwogCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBwb2xsMSwgc2l6ZW9mIHBvbGwxKTsKIAkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDIsIHNpemVvZiBwb2xsMik7CkBAIC04MTksMTMgKzg1NywxNCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgbW9kZTsKLQlfX3U4IHQyW10gPSB7IDB4MDcsIDB4MDAsIDB4MGQsIDB4NjAsIDB4MGUsIDB4ODAgfTsKLQlzdGF0aWMgY29uc3QgX191OCB0M1tdID0KLQkJeyAweGIzLCAweDA3LCAweGI0LCAweDAwLCAweGI1LCAweDg4LCAweGI2LCAweDAyLCAweGI3LCAweDA2LAotCQkgIDB4YjgsIDB4MDAsIDB4YjksIDB4ZTcsIDB4YmEsIDB4MDEgfTsKKwl1OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07CisJc3RhdGljIGNvbnN0IHU4IHQzW10gPQorCQl7IDB4MDcsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDYsIDB4MDAsIDB4ZTcsIDB4MDEgfTsKIAogCW1vZGUgPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0uIHByaXY7CiAJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgkJLyogNjQweDQ4MCAoMHgwMCkgKi8KKwkJYnJlYWs7CiAJY2FzZSAxOgkJLyogMzUyeDI4OCAqLwogCQl0MlsxXSA9IDB4NDA7CiAJCWJyZWFrOwpAQCAtODM1LDE0ICs4NzQsMjAgQEAKIAljYXNlIDM6CQkvKiAxNzZ4MTQ0ICovCiAJCXQyWzFdID0gMHg1MDsKIAkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogMTYweDEyMCAqLworCWRlZmF1bHQ6CisvKgljYXNlIDQ6CQkgKiAxNjB4MTIwICovCiAJCXQyWzFdID0gMHgyMDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoJLyogNjQweDQ4MCAoMHgwMCkgKi8KLQkJYnJlYWs7CiAJfQogCi0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1RBUzUxMzBBKSB7CisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT002ODAyOgorCQlvbTY4MDJfc2Vuc29yX2luaXQoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfT1RIRVI6CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9UQVM1MTMwQTogKi8KIAkJaSA9IDA7CiAJCXdoaWxlICh0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXVswXSAhPSAwKSB7CiAJCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtpXSwKQEAgLTg1NCwxNCArODk5LDEzIEBACiAJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHRhczUxMzBhX3NlbnNvcl9pbml0WzNdLAogCQkJCSBzaXplb2YgdGFzNTEzMGFfc2Vuc29yX2luaXRbMF0pOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4M2M4MCk7Ci0JfSBlbHNlIHsKLQkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CisJCWJyZWFrOwogCX0KIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhNCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTIpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQyLCBzaXplb2YgdDIpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHQzLCBzaXplb2YgdDMpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhiMywgdDMsIHNpemVvZiB0Myk7CiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwMTMpOwogCW1zbGVlcCgxNSk7CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtLApAQCAtODg1LDE2ICs5MjksMTggQEAKIAltc2xlZXAoMjApOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0pOwotCW1zbGVlcCgyMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQltc2xlZXAoMjApOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMwOSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQlzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAkvKiB0YXJnZXQgKi8KLQkJCV9fdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KKwkJCXU4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCiAJCQlpbnQgbGVuKQkJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7Ci0Jc3RhdGljIF9fdTggZmZkOVtdID0geyAweGZmLCAweGQ5IH07CisJc3RhdGljIHU4IGZmZDlbXSA9IHsgMHhmZiwgMHhkOSB9OwogCiAJaWYgKGRhdGFbMF0gPT0gMHg1YSkgewogCQkvKiBDb250cm9sIFBhY2tldCwgYWZ0ZXIgdGhpcyBjYW1lIHRoZSBoZWFkZXIgYWdhaW4sCkBAIC0xMTcyLDggKzEyMTgsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCmluZGV4IDk0MTYzY2MuLjlmMjQzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwpAQCAtMzEsNyArMzEsNiBAQAogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKIAlfX3UxNiBicmlnaHRuZXNzOwotCV9fdTE2IGNvbnRyYXN0OwogCiAJX191OCBwYWNrZXQ7CiB9OwpAQCAtMzksMzggKzM4LDIyIEBACiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7Ci1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKIAkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkgIC5uYW1lID0gIkJyaWdodG5lc3MiLAogCSAgLm1pbmltdW0gPSAxLAotCSAgLm1heGltdW0gPSAweDJmZiwKKwkgIC5tYXhpbXVtID0gMHgxNWYsCS8qID0gMzUyIC0gMSAqLwogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDE4ZiwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgMHgxNGMKKwkgIC5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0YnJpZ2h0bmVzcywKIAkgLmdldCA9IHNkX2dldGJyaWdodG5lc3MsCiAJIH0sCi0jZGVmaW5lIFNEX0NPTlRSQVNUIDEKLQl7Ci0JIHsKLQkgIC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCSAgLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCSAgLm5hbWUgPSAiQ29udHJhc3QiLAotCSAgLm1pbmltdW0gPSAwLAotCSAgLm1heGltdW0gPSAweGZmZmYsCi0JICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDB4N2ZmZiwKLQkgIH0sCi0JIC5zZXQgPSBzZF9zZXRjb250cmFzdCwKLQkgLmdldCA9IHNkX2dldGNvbnRyYXN0LAotCSB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc2lmX21vZGVbXSA9IHsKQEAgLTg2LDc4ICs2OSw2NCBAQAogCQkucHJpdiA9IDB9LAogfTsKIAotLyoKLSAqIEluaXRpYWxpemF0aW9uIGRhdGE6IHRoaXMgaXMgdGhlIGZpcnN0IHNldC11cCBkYXRhIHdyaXR0ZW4gdG8gdGhlCi0gKiBkZXZpY2UgKGJlZm9yZSB0aGUgb3BlbiBkYXRhKS4KLSAqLwotI2RlZmluZSBURVNUQ0xLIDB4MTAJCS8qIHJlZyAweDJjIC0+IDB4MTIgLy8xMCAqLwotI2RlZmluZSBURVNUQ09NUCAweDkwCQkvKiByZWcgMHgyOCAtPiAweDgwICovCi0jZGVmaW5lIFRFU1RMSU5FIDB4ODEJCS8qIHJlZyAweDI5IC0+IDB4ODEgKi8KLSNkZWZpbmUgUUNJRkxJTkUgMHg0MQkJLyogcmVnIDB4MjkgLT4gMHg4MSAqLwotI2RlZmluZSBURVNUUFRMIDB4MTQJCS8qIHJlZyAweDJEIC0+IDB4MTQgKi8KLSNkZWZpbmUgVEVTVFBUSCAweDAxCQkvKiByZWcgMHgyRSAtPiAweDAxICovCi0jZGVmaW5lIFRFU1RQVEJMIDB4MTIJCS8qIHJlZyAweDJGIC0+IDB4MGEgKi8KLSNkZWZpbmUgVEVTVFBUQkggMHgwMQkJLyogcmVnIDB4MzAgLT4gMHgwMSAqLwotI2RlZmluZSBBRFdJRFRITCAweGU4CQkvKiByZWcgMHgwYyAtPiAweGU4ICovCi0jZGVmaW5lIEFEV0lEVEhIIDB4MDMJCS8qIHJlZyAweDBkIC0+IDB4MDMgKi8KLSNkZWZpbmUgQURIRUlHSEwgMHg5MAkJLyogcmVnIDB4MGUgLT4gMHg5MSAvLzkzICovCi0jZGVmaW5lIEFESEVJR0hIIDB4MDEJCS8qIHJlZyAweDBmIC0+IDB4MDEgKi8KLSNkZWZpbmUgRVhQT0wgMHg4ZgkJLyogcmVnIDB4MWMgLT4gMHg4ZiAqLwotI2RlZmluZSBFWFBPSCAweDAxCQkvKiByZWcgMHgxZCAtPiAweDAxICovCi0jZGVmaW5lIEFEQ0JFR0lOTCAweDQ0CQkvKiByZWcgMHgxMCAtPiAweDQ2IC8vNDcgKi8KLSNkZWZpbmUgQURDQkVHSU5IIDB4MDAJCS8qIHJlZyAweDExIC0+IDB4MDAgKi8KLSNkZWZpbmUgQURSQkVHSU5MIDB4MGEJCS8qIHJlZyAweDE0IC0+IDB4MGIgLy8weDBjICovCi0jZGVmaW5lIEFEUkJFR0lOSCAweDAwCQkvKiByZWcgMHgxNSAtPiAweDAwICovCi0jZGVmaW5lIFRWODUzMl9DTURfVVBEQVRFIDB4ODQKKy8qIFRWLTg1MzJBIChJQ001MzJBKSByZWdpc3RlcnMgKExFKSAqLworI2RlZmluZSBSMDBfUEFSVF9DT05UUk9MIDB4MDAKKyNkZWZpbmUJCUxBVEVOVF9DSEFOR0UJMHg4MAorI2RlZmluZQkJRVhQT19DSEFOR0UJMHgwNAorI2RlZmluZSBSMDFfVElNSU5HX0NPTlRST0xfTE9XIDB4MDEKKyNkZWZpbmUJCUNNRF9FRXByb21fT3BlbiAweDMwCisjZGVmaW5lCQlDTURfRUVwcm9tX0Nsb3NlIDB4MjkKKyNkZWZpbmUgUjAzX1RBQkxFX0FERFIgMHgwMworI2RlZmluZSBSMDRfV1RSQU1fREFUQV9MIDB4MDQKKyNkZWZpbmUgUjA1X1dUUkFNX0RBVEFfTSAweDA1CisjZGVmaW5lIFIwNl9XVFJBTV9EQVRBX0ggMHgwNgorI2RlZmluZSBSMDdfVEFCTEVfTEVOCTB4MDcKKyNkZWZpbmUgUjA4X1JBTV9XUklURV9BQ1RJT04gMHgwOAorI2RlZmluZSBSMENfQURfV0lEVEhMCTB4MGMKKyNkZWZpbmUgUjBEX0FEX1dJRFRISAkweDBkCisjZGVmaW5lIFIwRV9BRF9IRUlHSFRMCTB4MGUKKyNkZWZpbmUgUjBGX0FEX0hFSUdIVEgJMHgwZgorI2RlZmluZSBSMTBfQURfQ09MX0JFR0lOTCAweDEwCisjZGVmaW5lIFIxMV9BRF9DT0xfQkVHSU5IIDB4MTEKKyNkZWZpbmUJCU1JUlJPUgkJMHgwNAkvKiBbMTBdICovCisjZGVmaW5lIFIxNF9BRF9ST1dfQkVHSU5MIDB4MTQKKyNkZWZpbmUgUjE1X0FEX1JPV0JFR0lOSCAgMHgxNQorI2RlZmluZSBSMUNfQURfRVhQT1NFX1RJTUVMIDB4MWMKKyNkZWZpbmUgUjI4X1FVQU5UCTB4MjgKKyNkZWZpbmUgUjI5X0xJTkUJMHgyOQorI2RlZmluZSBSMkNfUE9MQVJJVFkJMHgyYworI2RlZmluZSBSMkRfUE9JTlQJMHgyZAorI2RlZmluZSBSMkVfUE9JTlRICTB4MmUKKyNkZWZpbmUgUjJGX1BPSU5UQgkweDJmCisjZGVmaW5lIFIzMF9QT0lOVEJICTB4MzAKKyNkZWZpbmUgUjMxX1VQRAkJMHgzMQorI2RlZmluZSBSMkFfSElHSF9CVURHRVQgMHgyYQorI2RlZmluZSBSMkJfTE9XX0JVREdFVAkweDJiCisjZGVmaW5lIFIzNF9WSUQJCTB4MzQKKyNkZWZpbmUgUjM1X1ZJREgJMHgzNQorI2RlZmluZSBSMzZfUElECQkweDM2CisjZGVmaW5lIFIzN19QSURICTB4MzcKKyNkZWZpbmUgUjM5X1Rlc3QxCTB4MzkJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjNCX1Rlc3QzCTB4M0IJCS8qIEdQSU8gKi8KKyNkZWZpbmUgUjgzX0FEX0lESAkweDgzCisjZGVmaW5lIFI5MV9BRF9TTE9QRVJFRyAweDkxCisjZGVmaW5lIFI5NF9BRF9CSVRDT05UUk9MIDB4OTQKIAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0FkZCAweDAzCi0jZGVmaW5lIFRWODUzMl9FRXByb21fRGF0YUwgMHgwNAotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0RhdGFNIDB4MDUKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9EYXRhSCAweDA2Ci0jZGVmaW5lIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGggMHgwNwotI2RlZmluZSBUVjg1MzJfRUVwcm9tX1dyaXRlIDB4MDgKLSNkZWZpbmUgVFY4NTMyX1BBUlRfQ1RSTCAweDAwCi0jZGVmaW5lIFRWODUzMl9DVFJMIDB4MDEKLSNkZWZpbmUgVFY4NTMyX0NNRF9FRXByb21fT3BlbiAweDMwCi0jZGVmaW5lIFRWODUzMl9DTURfRUVwcm9tX0Nsb3NlIDB4MjkKLSNkZWZpbmUgVFY4NTMyX1VEUF9VUERBVEUgMHgzMQotI2RlZmluZSBUVjg1MzJfR1BJTyAweDM5Ci0jZGVmaW5lIFRWODUzMl9HUElPX09FIDB4M0IKLSNkZWZpbmUgVFY4NTMyX1JFUV9SZWdXcml0ZSAweDAyCi0jZGVmaW5lIFRWODUzMl9SRVFfUmVnUmVhZCAweDAzCi0KLSNkZWZpbmUgVFY4NTMyX0FEV0lEVEhfTCAweDBDCi0jZGVmaW5lIFRWODUzMl9BRFdJRFRIX0ggMHgwRAotI2RlZmluZSBUVjg1MzJfQURIRUlHSFRfTCAweDBFCi0jZGVmaW5lIFRWODUzMl9BREhFSUdIVF9IIDB4MEYKLSNkZWZpbmUgVFY4NTMyX0VYUE9TVVJFIDB4MUMKLSNkZWZpbmUgVFY4NTMyX1FVQU5UX0NPTVAgMHgyOAotI2RlZmluZSBUVjg1MzJfTU9ERV9QQUNLRVQgMHgyOQotI2RlZmluZSBUVjg1MzJfU0VUQ0xLIDB4MkMKLSNkZWZpbmUgVFY4NTMyX1BPSU5UX0wgMHgyRAotI2RlZmluZSBUVjg1MzJfUE9JTlRfSCAweDJFCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfTCAweDJGCi0jZGVmaW5lIFRWODUzMl9QT0lOVEJfSCAweDMwCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfTCAweDJBCi0jZGVmaW5lIFRWODUzMl9CVURHRVRfSCAweDJCCi0jZGVmaW5lIFRWODUzMl9WSURfTCAweDM0Ci0jZGVmaW5lIFRWODUzMl9WSURfSCAweDM1Ci0jZGVmaW5lIFRWODUzMl9QSURfTCAweDM2Ci0jZGVmaW5lIFRWODUzMl9QSURfSCAweDM3Ci0jZGVmaW5lIFRWODUzMl9EZXZpY2VJRCAweDgzCi0jZGVmaW5lIFRWODUzMl9BRF9TTE9QRSAweDkxCi0jZGVmaW5lIFRWODUzMl9BRF9CSVRDVFJMIDB4OTQKLSNkZWZpbmUgVFY4NTMyX0FEX0NPTEJFR0lOX0wgMHgxMAotI2RlZmluZSBUVjg1MzJfQURfQ09MQkVHSU5fSCAweDExCi0jZGVmaW5lIFRWODUzMl9BRF9ST1dCRUdJTl9MIDB4MTQKLSNkZWZpbmUgVFY4NTMyX0FEX1JPV0JFR0lOX0ggMHgxNQotCi1zdGF0aWMgY29uc3QgX191MzIgdHZfODUzMl9lZXByb21fZGF0YVtdID0gewotLyoJYWRkCQlkYXRhTAkgICBkYXRhTQlkYXRhSCAqLwotCTB4MDAwMTAwMDEsIDB4MDEwMTgwMTEsIDB4MDIwNTAwMTQsIDB4MDMwNTAwMWMsCi0JMHgwNDBkMDAxZSwgMHgwNTA1MDAxZiwgMHgwNjA1MDUxOSwgMHgwNzA1MDExYiwKLQkweDA4MDUwOTFlLCAweDA5MGQ4OTJlLCAweDBhMDU4OTJmLCAweDBiMDUwZGQ5LAotCTB4MGMwNTA5ZjEsIDAKK3N0YXRpYyBjb25zdCB1OCBlZXByb21fZGF0YVtdWzNdID0geworLyoJZGF0YUggZGF0YU0gZGF0YUwgKi8KKwl7MHgwMSwgMHgwMCwgMHgwMX0sCisJezB4MDEsIDB4ODAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweDE0fSwKKwl7MHgwNSwgMHgwMCwgMHgxY30sCisJezB4MGQsIDB4MDAsIDB4MWV9LAorCXsweDA1LCAweDAwLCAweDFmfSwKKwl7MHgwNSwgMHgwNSwgMHgxOX0sCisJezB4MDUsIDB4MDEsIDB4MWJ9LAorCXsweDA1LCAweDA5LCAweDFlfSwKKwl7MHgwZCwgMHg4OSwgMHgyZX0sCisJezB4MDUsIDB4ODksIDB4MmZ9LAorCXsweDA1LCAweDBkLCAweGQ5fSwKKwl7MHgwNSwgMHgwOSwgMHhmMX0sCiB9OwogCiBzdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE2NSw3ICsxMzQsNyBAQAogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1JlYWQsCisJCQkweDAzLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLAkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKQEAgLTE3NCwyNyArMTQzLDI3IEBACiB9CiAKIC8qIHdyaXRlIDEgYnl0ZSAqLwotc3RhdGljIHZvaWQgcmVnX3dfMShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdm9pZCByZWdfdzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgIF9fdTE2IGluZGV4LCBfX3U4IHZhbHVlKQogewogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbHVlOwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCA1MDApOwogfQogCiAvKiB3cml0ZSAyIGJ5dGVzICovCi1zdGF0aWMgdm9pZCByZWdfd18yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBfX3UxNiBpbmRleCwgX191OCB2YWwxLCBfX3U4IHZhbDIpCitzdGF0aWMgdm9pZCByZWdfdzIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgIHUxNiBpbmRleCwgdTE2IHZhbHVlKQogewotCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IHZhbDE7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsMjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSB2YWx1ZSA+PiA4OwogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQlUVjg1MzJfUkVRX1JlZ1dyaXRlLAorCQkJMHgwMiwKIAkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTAsCS8qIHZhbHVlICovCiAJCQlpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCAyLCA1MDApOwpAQCAtMjAyLDMyICsxNzEsMTggQEAKIAogc3RhdGljIHZvaWQgdHZfODUzMldyaXRlRUVwcm9tKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlpbnQgaSA9IDA7Ci0JX191OCByZWcsIGRhdGEwLCBkYXRhMSwgZGF0YTI7CisJaW50IGk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU8sIDB4YjApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fT3Blbik7Ci0vKgltc2xlZXAoMSk7ICovCi0Jd2hpbGUgKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0pIHsKLQkJcmVnID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweGZmMDAwMDAwKSA+PiAyNDsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fQWRkLCByZWcpOwotCQkvKiBtc2xlZXAoMSk7ICovCi0JCWRhdGEwID0gKHR2Xzg1MzJfZWVwcm9tX2RhdGFbaV0gJiAweDAwMDAwMGZmKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YUwsIGRhdGEwKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMSA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMDAwZmYwMCkgPj4gODsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fRGF0YU0sIGRhdGExKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMiA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMGZmMDAwMCkgPj4gMTY7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0RhdGFILCBkYXRhMik7Ci0JCS8qIG1zbGVlcCgxKTsgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fV3JpdGUsIDApOwotCQkvKiBtc2xlZXAoMTApOyAqLwotCQlpKys7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9PcGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlZXByb21fZGF0YSk7IGkrKykgeworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDNfVEFCTEVfQUREUiwgaSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwNF9XVFJBTV9EQVRBX0wsIGVlcHJvbV9kYXRhW2ldWzJdKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjA1X1dUUkFNX0RBVEFfTSwgZWVwcm9tX2RhdGFbaV1bMV0pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDZfV1RSQU1fREFUQV9ILCBlZXByb21fZGF0YVtpXVswXSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwOF9SQU1fV1JJVEVfQUNUSU9OLCAwKTsKIAl9Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9FRXByb21fVGFibGVMZW5ndGgsIGkpOwotLyoJbXNsZWVwKDEpOyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwgVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOworCXJlZ193MShnc3BjYV9kZXYsIFIwN19UQUJMRV9MRU4sIGkpOworCXJlZ193MShnc3BjYV9kZXYsIFIwMV9USU1JTkdfQ09OVFJPTF9MT1csIENNRF9FRXByb21fQ2xvc2UpOwogCW1zbGVlcCgxMCk7CiB9CiAKQEAgLTIzOCw3OSArMTkzLDc2IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCBjYW0gKmNhbTsKIAotCXR2Xzg1MzJXcml0ZUVFcHJvbShnc3BjYV9kZXYpOwotCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMTsKIAljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7Ci0JY2FtLT5ubW9kZXMgPSBzaXplb2Ygc2lmX21vZGUgLyBzaXplb2Ygc2lmX21vZGVbMF07CisJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIAotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyUmVhZFJlZ2lzdGVycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JX191OCBkYXRhOworCWludCBpOworCXN0YXRpYyB1OCByZWdfdGJbXSA9IHsKKwkJUjBDX0FEX1dJRFRITCwKKwkJUjBEX0FEX1dJRFRISCwKKwkJUjI4X1FVQU5ULAorCQlSMjlfTElORSwKKwkJUjJDX1BPTEFSSVRZLAorCQlSMkRfUE9JTlQsCisJCVIyRV9QT0lOVEgsCisJCVIyRl9QT0lOVEIsCisJCVIzMF9QT0lOVEJILAorCQlSMkFfSElHSF9CVURHRVQsCisJCVIyQl9MT1dfQlVER0VULAorCQlSMzRfVklELAorCQlSMzVfVklESCwKKwkJUjM2X1BJRCwKKwkJUjM3X1BJREgsCisJCVI4M19BRF9JREgsCisJCVIxMF9BRF9DT0xfQkVHSU5MLAorCQlSMTFfQURfQ09MX0JFR0lOSCwKKwkJUjE0X0FEX1JPV19CRUdJTkwsCisJCVIxNV9BRF9ST1dCRUdJTkgsCisJCTAKKwl9OwogCi0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAxKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMS0+ICV4IiwgZGF0YSk7Ci0JZGF0YSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDAyKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnaXN0ZXIgMHgwMi0+ICV4IiwgZGF0YSk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVApOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VUKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEspOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQlVER0VUX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0JVREdFVF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9WSURfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfVklEX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1BJRF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QSURfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfRGV2aWNlSUQpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0gpOworCWkgPSAwOworCWRvIHsKKwkJcmVnX3IoZ3NwY2FfZGV2LCByZWdfdGJbaV0pOworCQlpKys7CisJfSB3aGlsZSAocmVnX3RiW2ldICE9IDApOwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX3NldFJlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9MLAotCQkJQURDQkVHSU5MKTsJCQkvKiAweDEwICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9ILAotCQkJQURDQkVHSU5IKTsJCQkvKiBhbHNvIGRpZ2l0YWwgZ2FpbiAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxMF9BRF9DT0xfQkVHSU5MLCAweDQ0KTsKKwkJCQkJCS8qIGJlZ2luIGFjdGl2ZSBsaW5lICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjExX0FEX0NPTF9CRUdJTkgsIDB4MDApOworCQkJCQkJLyogbWlycm9yIGFuZCBkaWdpdGFsIGdhaW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogPSAweDg0ICovCiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGEpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYSk7CS8qIFRlc3QwU2VsID0gMTAgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfTCwgQURIRUlHSEwpOyAvKiAwZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfSCwgQURIRUlHSEgpOyAvKiAwZiAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCi0JCQlFWFBPTCwgRVhQT0gpOwkJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fTCwKLQkJCUFEQ0JFR0lOTCk7CQkJLyogMHgxMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fSCwKLQkJCUFEQ0JFR0lOSCk7CQkJLyogYWxzbyBkaWdpdGFsIGdhaW4gKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1JPV0JFR0lOX0wsCi0JCQlBRFJCRUdJTkwpOwkJCS8qIDB4MTQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHg5MCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjBGX0FEX0hFSUdIVEgsIDB4MDEpOworCXJlZ193Mihnc3BjYV9kZXYsIFIxQ19BRF9FWFBPU0VfVElNRUwsIDB4MDE4Zik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjEwX0FEX0NPTF9CRUdJTkwsIDB4NDQpOworCQkJCQkJLyogYmVnaW4gYWN0aXZlIGxpbmUgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMTFfQURfQ09MX0JFR0lOSCwgMHgwMCk7CisJCQkJCQkvKiBtaXJyb3IgYW5kIGRpZ2l0YWwgZ2FpbiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxNF9BRF9ST1dfQkVHSU5MLCAweDBhKTsKIAotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MDApOwkvKiAweDkxICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAyKTsJLyogMHg5NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDIpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9DVFJMLAotCQkJVFY4NTMyX0NNRF9FRXByb21fQ2xvc2UpOwkvKiAweDAxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjAxX1RJTUlOR19DT05UUk9MX0xPVywgQ01EX0VFcHJvbV9DbG9zZSk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDAwKTsJLyogMHg5MSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgwMCk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qID0gMHg4NCAqLwogfQogCiBzdGF0aWMgdm9pZCB0dl84NTMyX1BvbGxSZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMzE5LDU0ICsyNzEsNTUgQEAKIAogCS8qIHN0cmFuZ2UgcG9sbGluZyBmcm9tIHRnYyAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLLAotCQkJVEVTVENMSyk7CQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMkNfUE9MQVJJVFksIDB4MTApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLAorCQkJCUxBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwogCX0KIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfU0xPUEUsIDB4MzIpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMCk7CisJdHZfODUzMldyaXRlRUVwcm9tKGdzcGNhX2Rldik7CisKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAorCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKIAl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7Ci0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9BREhFSUdIVF9MLCBBREhFSUdITCwKLQkJCQlBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsIEVYUE9MLAotCQkJCUVYUE9IKTsJCS8qIDM1MGQgMHgwMTRjOyAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9MLCBBRFdJRFRITCk7CS8qIDB4MjA7IDB4MGMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfSCwgQURXSURUSEgpOwkvKiAweDBkICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCAweDAxOGYpOworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QLAotCQkJVEVTVENPTVApOwkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVRFU1RMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyOF9RVUFOVCwgMHg5MCk7CisJCQkJCS8qIG5vIGNvbXByZXNzIC0gZml4ZWQgUSAtIHF1YW50IDAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg4MSk7CisJCQkJCS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEssCi0JCQlURVNUQ0xLKTsJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfTCwKLQkJCVRFU1RQVEwpOwkJLyogMHgzODsgMHgyZCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfSCwKLQkJCVRFU1RQVEgpOwkJLyogMHgwNDsgMHgyZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0wsCi0JCQlURVNUUFRCTCk7CQkvKiAweDA0OyAweDJmICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCwKLQkJCVRFU1RQVEJIKTsJCS8qIDB4MDQ7IDB4MzAgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyQ19QT0xBUklUWSwgMHgxMCk7CisJCQkJCQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCQkJCQkJLyogMHgzODsgMHgyZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCQkJCQkJLyogMHgwNDsgMHgyZSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCQkJCQkJLyogMHgwNDsgMHgyZiAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwkJCQkJCS8qIDB4MDQ7IDB4MzAgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQkJCQkJLyogMHgwMDwtMHg4NCAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMSk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAxKTsJLyogdXBkYXRlIHJlZ2lzdGVycyAqLwogCW1zbGVlcCgyMDApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzc3LDExICszMzAsMTAgQEAKIHN0YXRpYyB2b2lkIHNldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwogCi0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJYnJpZ2h0bmVzcyA+PiA4LCBicmlnaHRuZXNzKTsJCS8qIDFjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsIFRWODUzMl9DTURfVVBEQVRFKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCBzZC0+YnJpZ2h0bmVzcyk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qIDB4ODQgKi8KIH0KIAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwpAQCAtMzg5LDU3ICszNDEsNTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDMyKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0JJVENUUkwsIDB4MDApOworCXJlZ193MShnc3BjYV9kZXYsIFI5MV9BRF9TTE9QRVJFRywgMHgzMik7CS8qIHNsb3BlIGJlZ2luIDEsN1YsCisJCQkJCQkJICogc2xvcGUgcmF0ZSAyICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjk0X0FEX0JJVENPTlRST0wsIDB4MDApOwogCXR2Xzg1MzJSZWFkUmVnaXN0ZXJzKGdzcGNhX2Rldik7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBiKTsKLQlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0wsCi0JCUFESEVJR0hMLCBBREhFSUdISCk7CS8qIDQwMWQgMHgwMTY5OyAwZSAqLwotLyoJcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9FWFBPU1VSRSwKLQkJRVhQT0wsIEVYUE9IKTsJCSAqIDM1MGQgMHgwMTRjOyAxYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CisKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMEVfQURfSEVJR0hUTCwgMHgwMTkwKTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwQ19BRF9XSURUSEwsIDB4ZTgpOwkJLyogMHgyMDsgMHgwYyAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwRF9BRF9XSURUSEgsIDB4MDMpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1FVQU5UX0NPTVAsCi0JCQlURVNUQ09NUCk7CS8qIDB4NzIgY29tcHJlc3NlZCBtb2RlIDB4MjggKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjhfUVVBTlQsIDB4OTApOworCQkJCQkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCiAJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2KSB7CiAJCS8qIDE3NngxNDQgKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVFDSUZMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg0MSk7CisJCQkJCS8qIENJRiAtIDIgbGluZXMvcGFja2V0ICovCiAJfSBlbHNlIHsKIAkJLyogMzUyeDI4OCAqLwotCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX01PREVfUEFDS0VULAotCQkJVEVTVExJTkUpOwkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCisJCXJlZ193MShnc3BjYV9kZXYsIFIyOV9MSU5FLCAweDgxKTsKKwkJCQkJLyogQ0lGIC0gMiBsaW5lcy9wYWNrZXQgKi8KIAl9CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1NFVENMSywKLQkJCVRFU1RDTEspOwkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MLAotCQkJVEVTVFBUTCk7CQkvKiAweDM4OyAweDJkICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9ILAotCQkJVEVTVFBUSCk7CQkvKiAweDA0OyAweDJlICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCwKLQkJCVRFU1RQVEJMKTsJCS8qIDB4MDQ7IDB4MmYgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9ILAotCQkJVEVTVFBUQkgpOwkJLyogMHgwNDsgMHgzMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLAotCQkJVFY4NTMyX0NNRF9VUERBVEUpOwkvKiAweDAwPC0weDg0ICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjJDX1BPTEFSSVRZLCAweDEwKTsJCS8qIHNsb3cgY2xvY2sgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkRfUE9JTlQsIDB4MTQpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRV9QT0lOVEgsIDB4MDEpOworCXJlZ193MShnc3BjYV9kZXYsIFIyRl9QT0lOVEIsIDB4MTIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzMF9QT0lOVEJILCAweDAxKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDBfUEFSVF9DT05UUk9MLCBMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAxKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDEpOwkvKiB1cGRhdGUgcmVnaXN0ZXJzICovCiAJbXNsZWVwKDIwMCk7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDApOwkJLyogZW5kIHVwZGF0ZSAqLwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7CisJcmVnX3cxKGdzcGNhX2RldiwgUjNCX1Rlc3QzLCAweDBiKTsJLyogVGVzdDBTZWwgPSAxMSA9IEdQSU8gKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX1BvbGxSZWcoZ3NwY2FfZGV2KTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDApOwkvKiAweDMxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMCk7CS8qIGVuZCB1cGRhdGUgKi8KIAogCWdzcGNhX2Rldi0+ZW1wdHlfcGFja2V0ID0gMDsJCS8qIGNoZWNrIHRoZSBlbXB0eSBwYWNrZXRzICovCiAJc2QtPnBhY2tldCA9IDA7CQkJCS8qIGlnbm9yZSB0aGUgZmlyc3QgcGFja2V0cyAqLwpAQCAtNDQ5LDcgKzM5NCw3IEBACiAKIHN0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCiB9CiAKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTQ3Myw5ICs0MTgsOSBAQAogCiAJLyogZWFjaCBwYWNrZXQgY29udGFpbnM6CiAJICogLSBoZWFkZXIgMiBieXRlcwotCSAqIC0gUkcgbGluZQorCSAqIC0gUkdSRyBsaW5lCiAJICogLSA0IGJ5dGVzCi0JICogLSBHQiBsaW5lCisJICogLSBHQkdCIGxpbmUKIAkgKiAtIDQgYnl0ZXMKIAkgKi8KIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZTAsCkBAIC00ODQsMTAgKzQyOSw2IEBACiAJCQlmcmFtZSwgZGF0YSArIGdzcGNhX2Rldi0+d2lkdGggKyA2LCBnc3BjYV9kZXYtPndpZHRoKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNTA2LDI0ICs0NDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb250cmFzdCA9IHZhbDsKLQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCi0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCSp2YWwgPSBzZC0+Y29udHJhc3Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01NzAsOCArNDkzLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwppbmRleCAwNTI1ZWE1Li40YzgwMmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKQEAgLTM3LDE4ICszNywyMSBAQAogCV9fdTggbGlnaHRmcmVxOwogCV9fdTggc2hhcnBuZXNzOwogCisJdTggaW1hZ2Vfb2Zmc2V0OworCiAJY2hhciBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9WQzAzMjEgMAogI2RlZmluZSBCUklER0VfVkMwMzIzIDEKIAljaGFyIHNlbnNvcjsKICNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAogI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKLSNkZWZpbmUgU0VOU09SX01JMTMyMCAyCi0jZGVmaW5lIFNFTlNPUl9NSTEzMTBfU09DIDMKLSNkZWZpbmUgU0VOU09SX09WNzY2MCA0Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NzAgNQotI2RlZmluZSBTRU5TT1JfUE8xMjAwIDYKLSNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDcKKyNkZWZpbmUgU0VOU09SX01JMTMxMF9TT0MgMgorI2RlZmluZSBTRU5TT1JfTUkxMzIwIDMKKyNkZWZpbmUgU0VOU09SX01JMTMyMF9TT0MgNAorI2RlZmluZSBTRU5TT1JfT1Y3NjYwIDUKKyNkZWZpbmUgU0VOU09SX09WNzY3MCA2CisjZGVmaW5lIFNFTlNPUl9QTzEyMDAgNworI2RlZmluZSBTRU5TT1JfUE8zMTMwTkMgOAogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtMTQ5LDggKzE1Miw1MCBAQAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCiAJCS5wcml2ID0gMH0sCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsIC8qIG1pMTN4MF9zb2Mgb25seSAqLworCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMSAvIDQgKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMn0sCiB9OwotCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBiaV9tb2RlW10gPSB7CisvKmZpeG1lOiBqZWcgZG9lcyBub3Qgd29yaworCXszMjAsIDI0MCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCAqIDMgLyA4ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDV9LAorKi8KKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDR9LAorLyoKKwl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAzfSwKKyovCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAyfSwKKy8qCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAxIC8gNCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSAxfSwKKyovCisJezEyODAsIDEwMjQsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwLAorCQkuc2l6ZWltYWdlID0gMTI4MCAqIDEwMjQgKiAyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHN2Z2FfbW9kZVtdID0gewogCXs4MDAsIDYwMCwgVjRMMl9QSVhfRk1UX0pQRUcsIFY0TDJfRklFTERfTk9ORSwKIAkJLmJ5dGVzcGVybGluZSA9IDgwMCwKQEAgLTQwMCw5MiArNDQ1LDIwOCBAQAogc3RhdGljIGNvbnN0IF9fdTggbWkxMzEwX3NvY2luaXRWR0FfSlBHW11bNF0gPSB7CiAJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAogCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAotCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKIAl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAogCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKIAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAogCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAogCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjIsIDB4MDMsIDB4Y2N9LAotCXsweGIzLCAweDIzLCAweGMwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAogCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAotCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDAwLCAweGQwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweGM4LCAweDlmLCAweDBiLCAweGJifSwKLQl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4MDgsIDB4YmJ9LAogCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCi0JezB4MzQsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDM1LCAweGZmLCAweDAwLCAweGJifSwKLQl7MHhkYywgMHgwNywgMHgwMiwgMHhiYn0sCi0JezB4ZGQsIDB4M2MsIDB4MTgsIDB4YmJ9LAotCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCi0JezB4ZTAsIDB4ZmYsIDB4ZTcsIDB4YmJ9LAotCXsweDA2LCAweGYwLCAweDBkLCAweGJifSwKLQl7MHgwNiwgMHg3MCwgMHgwZSwgMHhiYn0sCi0JezB4NGMsIDB4MDAsIDB4MDEsIDB4YmJ9LAotCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MmUsIDB4MGMsIDB4NTUsIDB4YmJ9LAotCXsweDIxLCAweGI2LCAweDZlLCAweGJifSwKLQl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAogCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCi0JezB4MDgsIDB4MDIsIDB4NGEsIDB4YmJ9LAotCXsweDA1LCAweDAxLCAweDEwLCAweGJifSwKLQl7MHgwNiwgMHgwMCwgMHgzOSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCi0JezB4NWEsIDB4MDIsIDB4NjcsIDB4YmJ9LAotCXsweDU5LCAweDAyLCAweDAwLCAweGJifSwKLQl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCi0JezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAotCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2IsIDB4MDYsIDB4MTgsIDB4YmJ9LAotCXsweDNjLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHg2NCwgMHg3YiwgMHg1YiwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCi0JezB4YmMsIDB4MGUsIDB4MDAsIDB4Y2N9LAotCXsweGJjLCAweDBmLCAweDA1LCAweGNjfSwKLQl7MHhiYywgMHgxMCwgMHhjMCwgMHhjY30sCi0JezB4YmMsIDB4MTEsIDB4MDMsIDB4Y2N9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgyYiwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4MmMsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJkLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZSwgMHgwMCwgMHgyOCwgMHhiYn0sCisJezB4NDEsIDB4MDAsIDB4ZDcsIDB4YmJ9LAorCXsweDA5LCAweDAyLCAweDNhLCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAwLCAweDhjLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgzMiwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4YzYsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDE5LCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHg2ZiwgMHhiYn0sCisJezB4YzgsIDB4MDAsIDB4MGYsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDBmLCAweGJifSwKIAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCiAJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAogCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKIAl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCiAJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAotCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKLQl7MHhiNiwgMHgxMywgMHgyNSwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAogCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKIAl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCiAJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKIAl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAogCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKIAl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCi0JezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDEwLCAweGNjfSwKKwl7MHhiOSwgMHgxMiwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTMsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE0LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNSwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTYsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxOSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWEsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFiLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYywgMHgwZiwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDEwLCAweGJifSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4MmYsIDB4MDAsIDB4QzAsIDB4YmJ9LAorCXsweGI4LCAweGEwLCAweDEyLCAweGNjfSwKKwl7fSwKK307CitzdGF0aWMgY29uc3QgX191OCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMywgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhiOCwgMHgzNSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MzYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM3LCAweDAwLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHg3OCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MGYsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCiAJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAogCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKIAl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCkBAIC00OTYsMTMxICs2NTcsMTIzIEBACiAJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAogCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKIAl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCi0JezB4ODEsIDB4YzcsIDB4MTQsIDB4YmJ9LAotCXsweDgyLCAweGViLCAweGU4LCAweGJifSwKLQl7MHg4MywgMHhmZSwgMHhmNCwgMHhiYn0sCi0JezB4ODQsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCi0JezB4ODcsIDB4Y2QsIDB4MTAsIDB4YmJ9LAotCXsweDg4LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4OSwgMHgwMSwgMHhmMSwgMHhiYn0sCi0JezB4OGEsIDB4ZTUsIDB4MTcsIDB4YmJ9LAotCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCi0JezB4OGQsIDB4MDAsIDB4ZmYsIDB4YmJ9LAotCXsweDhlLCAweGVjLCAweDEwLCAweGJifSwKLQl7MHg4ZiwgMHhmMCwgMHhlZCwgMHhiYn0sCi0JezB4OTAsIDB4ZjksIDB4ZjIsIDB4YmJ9LAotCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCi0JezB4OTMsIDB4ZjQsIDB4ZjIsIDB4YmJ9LAotCXsweDk0LCAweGZiLCAweGY1LCAweGJifSwKLQl7MHg5NSwgMHgwMCwgMHhmZiwgMHhiYn0sCi0JezB4YjYsIDB4MGYsIDB4MDgsIDB4YmJ9LAotCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCi0JezB4YjksIDB4MWMsIDB4MDcsIDB4YmJ9LAotCXsweGJhLCAweDBhLCAweDAzLCAweGJifSwKLQl7MHhiYiwgMHgxYiwgMHgwOSwgMHhiYn0sCi0JezB4YmMsIDB4MTcsIDB4MGQsIDB4YmJ9LAotCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCi0JezB4YmYsIDB4MTEsIDB4MDksIDB4YmJ9LAotCXsweGMwLCAweDE2LCAweDE1LCAweGJifSwKLQl7MHhjMSwgMHgwMCwgMHgxYiwgMHhiYn0sCi0JezB4YzIsIDB4MGUsIDB4MDcsIDB4YmJ9LAotCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCi0JezB4MDYsIDB4NzQsIDB4OGUsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNiwgMHhmNCwgMHg4ZSwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAotCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MjQsIDB4NTAsIDB4MjAsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHgzNCwgMHgwYywgMHg1MCwgMHhiYn0sCiAJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKIAl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTAsIDB4YmJ9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAogCXt9LAogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0UVZHQV9KUEdbXVs0XSA9IHsKLQl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKLQl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDA2LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKLQl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKLQl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKLQl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCXsweGJjLCAweDAwLCAweGYwLCAweGNjfSwKLQl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgyZiwgMHhkZSwgMHgyMCwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgyMCwgMHgwMywgMHgwMiwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHgwNSwgMHgwMCwgMHgwNywgMHhiYn0sCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCXsweGRjLCAweDA3LCAweDAyLCAweGJifSwKLQl7MHhkZCwgMHgzYywgMHgxOCwgMHhiYn0sCXsweGRlLCAweDkyLCAweDZkLCAweGJifSwKLQl7MHhkZiwgMHhjZCwgMHhiMSwgMHhiYn0sCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKLQl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCXsweDA2LCAweDcwLCAweDBlLCAweGJifSwKLQl7MHg0YywgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDRkLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKLQl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMSwgMHhiYn0sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwNywgMHgwMCwgMHg4NCwgMHhiYn0sCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKLQl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCXsweDA2LCAweDAwLCAweDM5LCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDU4LCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKLQl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCXsweDM5LCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYSwgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCXsweDY0LCAweDdiLCAweDViLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM2LCAweDMwLCAweDEwLCAweGJifSwKLQl7MHgzNywgMHgwMCwgMHhjMCwgMHhiYn0sCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKLQl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCXsweGJjLCAweDEwLCAweGMwLCAweGNjfSwKLQl7MHhiYywgMHgxMSwgMHgwMywgMHhjY30sCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKLQl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKLQl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKLQl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCXsweGI2LCAweDEzLCAweDI1LCAweGNjfSwKLQl7MHhiNiwgMHgxOCwgMHgwMCwgMHhjY30sCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKLQl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKLQl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKLQl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKLQl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg4MCwgMHgwMCwgMHgwMywgMHhiYn0sCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKLQl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCXsweDgzLCAweGZlLCAweGY0LCAweGJifSwKLQl7MHg4NCwgMHhjZCwgMHgxMCwgMHhiYn0sCXsweDg1LCAweGYzLCAweGVlLCAweGJifSwKLQl7MHg4NiwgMHhmZiwgMHhmMSwgMHhiYn0sCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKLQl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCXsweDg5LCAweDAxLCAweGYxLCAweGJifSwKLQl7MHg4YSwgMHhlNSwgMHgxNywgMHhiYn0sCXsweDhiLCAweGU4LCAweGUyLCAweGJifSwKLQl7MHg4YywgMHhmNywgMHhlZCwgMHhiYn0sCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKLQl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCXsweDhmLCAweGYwLCAweGVkLCAweGJifSwKLQl7MHg5MCwgMHhmOSwgMHhmMiwgMHhiYn0sCXsweDkxLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHg5MiwgMHhlOSwgMHgwZCwgMHhiYn0sCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKLQl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCXsweDk1LCAweDAwLCAweGZmLCAweGJifSwKLQl7MHhiNiwgMHgwZiwgMHgwOCwgMHhiYn0sCXsweGI3LCAweDNkLCAweDE2LCAweGJifSwKLQl7MHhiOCwgMHgwYywgMHgwNCwgMHhiYn0sCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKLQl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCXsweGJiLCAweDFiLCAweDA5LCAweGJifSwKLQl7MHhiYywgMHgxNywgMHgwZCwgMHhiYn0sCXsweGJkLCAweDIzLCAweDFkLCAweGJifSwKLQl7MHhiZSwgMHgwMCwgMHgyOCwgMHhiYn0sCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKLQl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCXsweGMxLCAweDAwLCAweDFiLCAweGJifSwKLQl7MHhjMiwgMHgwZSwgMHgwNywgMHhiYn0sCXsweGMzLCAweDE0LCAweDEwLCAweGJifSwKLQl7MHhjNCwgMHgwMCwgMHgxNywgMHhiYn0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCXsweDA2LCAweGY0LCAweDhlLCAweGJifSwKLQl7MHgwMCwgMHgwMCwgMHg1MCwgMHhkZH0sCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCXsweDM0LCAweDBjLCAweDUwLCAweGJifSwKLQl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgwMywgMHgwMywgMHhjMCwgMHhiYn0sCi0Je30sCitzdGF0aWMgY29uc3QgdTggbWkxMzEwX3NvY19Jbml0U1hHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwZCwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgwMSwgMHg3ZCwgMHhjY30sCisJezB4YjgsIDB4ODEsIDB4MDksIDB4Y2N9LAorCXsweGI4LCAweDI3LCAweDIwLCAweGNjfSwKKwl7MHhiOCwgMHgyNiwgMHg4MCwgMHhjY30sCisJezB4YjgsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDA3LCAweDA1LCAweGNjfSwKKwl7MHhiOCwgMHgwOCwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4MDksIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgxMSwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDAxLCAweGNjfSwKKwl7MHhiOCwgMHgyYywgMHg1YSwgMHhjY30sCisJezB4YjgsIDB4MmQsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDJlLCAweGVlLCAweGNjfSwKKwl7MHhiOCwgMHgyZiwgMHhmYiwgMHhjY30sCisJezB4YjgsIDB4MzAsIDB4NTIsIDB4Y2N9LAorCXsweGI4LCAweDMxLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgzMiwgMHhmMSwgMHhjY30sCisJezB4YjgsIDB4MzMsIDB4ZmYsIDB4Y2N9LAorCXsweGI4LCAweDM0LCAweDU0LCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDBkLCAweDAwLCAweDA5LCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHgwOCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwNiwgMHgwMCwgMHgxNCwgMHhiYn0sCisJezB4M2EsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHg5YiwgMHgxMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwMywgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDA1LCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDQsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MGEsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgxNCwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MTQsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MWUsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDFlLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgxZSwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MWUsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiOCwgMHgwYywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MGQsIDB4NzAsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDEzLCAweGNjfSwKKwl7MHgyZiwgMHgwMCwgMHhDMCwgMHhiYn0sCisJezB4YjgsIDB4YTAsIDB4MTIsIDB4Y2N9LAorCXt9CiB9OwogCiBzdGF0aWMgY29uc3QgX191OCBtaTEzMjBfZ2FtbWFbMTddID0gewpAQCAtNzc4LDYgKzkzMSw3MjIgQEAKIAl7fQogfTsKIAorc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFZHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGM4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNywgMHgwMCwgMHhlMCwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MGIsIDB4YmJ9LAorCXsweDIxLCAweDAwLCAweDBjLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YmYsIDB4YzAsIDB4MjYsIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDAyLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDgwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZTAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDIsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDU4LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4ZDEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhjOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4MDcsIDB4MDAsIDB4ZTAsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDBiLCAweGJifSwKKwl7MHgyMSwgMHgwMCwgMHgwYywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGJjLCAweDAyLCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCisJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDgsIDB4MzAsIDB4Y2N9LAorCXsweGJjLCAweDA5LCAweDQwLCAweGNjfSwKKwl7MHhiYywgMHgwYSwgMHgxMCwgMHhjY30sCisJezB4YmMsIDB4MGIsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDBjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDQwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4ZjAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDk2LCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDMsIDB4NTAsIDB4Y2N9LAorCXsweGJjLCAweDA0LCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCisJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAorCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRTWEdBX0pQR1tdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMzLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDA0LCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAorCXsweGI2LCAweDEzLCAweDI5LCAweGNjfSwKKwl7MHhiNiwgMHgxOCwgMHgwYSwgMHhjY30sCisJezB4YjYsIDB4MTcsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCisJezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDFiLCAweGJifSwKKwl7MHgzYiwgMHgwMCwgMHg5NSwgMHhiYn0sCisJezB4M2MsIDB4MDQsIDB4ZGIsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NiwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDMzLCAweGJifSwKKwl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCisJezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAorCXsweDY0LCAweDVlLCAweDFjLCAweGJifSwKKwl7MHgyZiwgMHg5MCwgMHgwMCwgMHhiYn0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX3NvY19Jbml0U1hHQVtdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweGZmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweDViLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgyMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMSwgMHg0MiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweGNhLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAorCXsweDNjLCAweDA1LCAweDQwLCAweGJifSwKKwl7MHg1NywgMHgwMSwgMHg5YywgMHhiYn0sCisJezB4NTgsIDB4MDEsIDB4ZWUsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGYwLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAorCXsweDVkLCAweDIyLCAweDFjLCAweGJifSwKKwl7MHg2NCwgMHgxZSwgMHgxYywgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyMiwgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjMsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDI0LCAweDdmLCAweDAwLCAweGJifSwKKwl7MHgyOCwgMHhlYSwgMHgwMiwgMHhiYn0sCisJezB4MjksIDB4ODYsIDB4N2EsIDB4YmJ9LAorCXsweDVlLCAweDUyLCAweDRjLCAweGJifSwKKwl7MHg1ZiwgMHgyMCwgMHgyNCwgMHhiYn0sCisJezB4NjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAyLCAweDAwLCAweGVlLCAweGJifSwKKwl7MHgwMywgMHgzOSwgMHgyMywgMHhiYn0sCisJezB4MDQsIDB4MDcsIDB4MjQsIDB4YmJ9LAorCXsweDA5LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHgwYSwgMHgwMCwgMHg3OSwgMHhiYn0sCisJezB4MGIsIDB4MDAsIDB4MDQsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDVjLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHhkOSwgMHhiYn0sCisJezB4MGUsIDB4MDAsIDB4NTMsIDB4YmJ9LAorCXsweDBmLCAweDAwLCAweDIxLCAweGJifSwKKwl7MHgxMCwgMHgwMCwgMHhhNCwgMHhiYn0sCisJezB4MTEsIDB4MDAsIDB4ZTUsIDB4YmJ9LAorCXsweDE1LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTcsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFiLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFlLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZTAsIDB4MGUsIDB4YmJ9LAorCXsweDA2LCAweDYwLCAweDBlLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDEzLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDAsIDB4ODUsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDI3LCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHgwZCwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4MWIsIDB4YmJ9LAorCXsweDNiLCAweDAwLCAweDk1LCAweGJifSwKKwl7MHgzYywgMHgwNCwgMHhkYiwgMHhiYn0sCisJezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAorCXsweDU4LCAweDAyLCAweDY2LCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MzMsIDB4YmJ9LAorCXsweDVjLCAweDEyLCAweDBkLCAweGJifSwKKwl7MHg1ZCwgMHgxNiwgMHgxMSwgMHhiYn0sCisJezB4NjQsIDB4NWUsIDB4MWMsIDB4YmJ9LAorCXt9Cit9Owogc3RhdGljIGNvbnN0IF9fdTggcG8zMTMwX2dhbW1hWzE3XSA9IHsKIAkweDAwLCAweDEzLCAweDM4LCAweDU5LCAweDc5LCAweDkyLCAweGE3LCAweGI5LCAweGM4LAogCTB4ZDQsIDB4ZGYsIDB4ZTcsIDB4ZWUsIDB4ZjQsIDB4ZjksIDB4ZmMsIDB4ZmYKQEAgLTE3NjQsMjYgKzI2MzMsNDMgQEAKIH07CiAKIHN0cnVjdCBzZW5zb3JfaW5mbyB7Ci0JaW50IHNlbnNvcklkOwotCV9fdTggSTJjQWRkOwotCV9fdTggSWRBZGQ7Ci0JX191MTYgVnBJZDsKLQlfX3U4IG0xOwotCV9fdTggbTI7Ci0JX191OCBvcDsKLQl9OworCXM4IHNlbnNvcklkOworCXU4IEkyY0FkZDsKKwl1OCBJZEFkZDsKKwl1MTYgVnBJZDsKKwl1OCBtMTsKKwl1OCBtMjsKKwl1OCBvcDsKK307CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gc2Vuc29yX2luZm9fZGF0YVtdID0gewogLyogICAgICBzZW5zb3JJZCwgICAgICAgICBJMmNBZGQsCUlkQWRkLCAgVnBJZCwgIG0xLCAgICBtMiwgIG9wICovCi0Je1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorCXstMSwJCSAgICAweDgwIHwgMHgzMCwgMHgwYSwgMHgwMDAwLCAweDI1LCAweDI0LCAweDA1fSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODIsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MjAsIDB4ODMsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCiAJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgzMTMwLCAweDI0LCAweDI1LCAweDAxfSwKLQl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweGM4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAotCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiAJe1NFTlNPUl9NSTEzMTBfU09DLCAweDgwIHwgMHg1ZCwgMHgwMCwgMHgxNDNhLCAweDI0LCAweDI1LCAweDAxfSwKIC8qICh0ZXN0ZWQgaW4gdmMwMzJ4X3Byb2JlX3NlbnNvcikgKi8KIC8qCXtTRU5TT1JfTUkwMzYwLAkgICAgMHg4MCB8IDB4NWQsIDB4MDAsIDB4ODI0MywgMHgyNCwgMHgyNSwgMHgwMX0sICovCisJe1NFTlNPUl9IVjcxMzFSLCAgICAweDgwIHwgMHgxMSwgMHgwMCwgMHgwMjA5LCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4MDAwMCwgMHgyMSwgMHgyMCwgMHgwNX0sCisJey0xLAkJICAgIDB4ODAgfCAweDQwLCAweDAwLCAweDAwMDAsIDB4MjAsIDB4MjIsIDB4MDV9LAorCXtTRU5TT1JfT1Y3NjYwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY2MCwgMHgyNiwgMHgyNiwgMHgwNX0sCisvKgl7U0VOU09SX1BPMzEzME5DLCAgIDB4ODAgfCAweDc2LCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKy8qCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sICovCisvKgl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sICovCisJey0xLAkJICAgIDB4ODAgfCAweDExLCAweDM5LCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAogCXtTRU5TT1JfUE8xMjAwLCAgICAgMHg4MCB8IDB4NWMsIDB4MDAsIDB4MTIwMCwgMHg2NywgMHg2NywgMHgwMX0sCisJey0xLAkJICAgIDB4ODAgfCAweDJkLCAweDAwLCAweDAwMDAsIDB4NjUsIDB4NjcsIDB4MDF9LAorCXstMSwJCSAgICAweDgwIHwgMHg2ZSwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4NTYsIDB4MDEsIDB4MDAwMCwgMHg2NCwgMHg2NywgMHgwMX0sCisJe1NFTlNPUl9NSTEzMjBfU09DLCAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY3LCAweDAxfSwKKy8qZml4bWU6IHByZXZpb3VzbHkgZGV0ZWN0ZWQ/Ki8KKwl7U0VOU09SX01JMTMyMCwgICAgIDB4ODAgfCAweDQ4LCAweDAwLCAweDE0OGMsIDB4NjQsIDB4NjUsIDB4MDF9LAorLypmaXhtZTogbm90IGluIHRoZSBtcy13aW4gcHJvYmUgLSBtYXkgYmUgZm91bmQgYmVmb3JlPyovCisJe1NFTlNPUl9PVjc2NzAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjczLCAweDY2LCAweDY3LCAweDA1fSwKIH07CiAKIC8qIHJlYWQgJ2xlbicgYnl0ZXMgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCkBAIC0xODE0LDUxICsyNzAwLDQ5IEBACiAJCQk1MDApOwogfQogCi1zdGF0aWMgdm9pZCByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJX191MTYgYWRkcmVzcywgX191MTYgKnZhbHVlKQorc3RhdGljIHUxNiByZWFkX3NlbnNvcl9yZWdpc3RlcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQkJdTE2IGFkZHJlc3MpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggbGRhdGEsIG1kYXRhLCBoZGF0YTsKKwl1OCBsZGF0YSwgbWRhdGEsIGhkYXRhOwogCWludCByZXRyeSA9IDUwOwogCi0JKnZhbHVlID0gMDsKLQogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNmLCAxKTsKLQkvKlBERUJVRyhEX1BST0JFLCAiIEkyYyBCdXMgQnVzeSBXYWl0ICAweCUwMlggIiwgdG1wdmFsdWUpOyAqLwogCWlmICghKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpKSB7Ci0JCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICVkIiwKLQkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpOwotCQlyZXR1cm47CisJCVBERUJVRyhEX0VSUiwgIkkyYyBCdXMgQnVzeSBXYWl0ICUwMngiLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJlZ193KGRldiwgMHhhMCwgYWRkcmVzcywgMHhiMzNhKTsKIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDIsIDB4YjMzOSk7CiAKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0Jd2hpbGUgKHJldHJ5LS0gJiYgZ3NwY2FfZGV2LT51c2JfYnVmWzBdKSB7CisJZG8gewogCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0vKgkJUERFQlVHKERfUFJPQkUsICJSZWFkIGFnYWluIDB4YjMzYiAlZCIsIHRtcHZhbHVlKTsgKi8KLQkJbXNsZWVwKDEpOwotCX0KKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCg0MCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+PSAwKTsKKwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNlLCAxKTsKIAlsZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZCwgMSk7CiAJbWRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2MsIDEpOwogCWhkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwotCVBERUJVRyhEX1BST0JFLCAiUmVhZCBTZW5zb3IgJTAyeCUwMnggJTAyeCIsCi0JCWhkYXRhLCBtZGF0YSwgbGRhdGEpOworCWlmIChoZGF0YSAhPSAwICYmIG1kYXRhICE9IDAgJiYgbGRhdGEgIT0gMCkKKwkJUERFQlVHKERfUFJPQkUsICJSZWFkIFNlbnNvciAlMDJ4JTAyeCAlMDJ4IiwKKwkJCWhkYXRhLCBtZGF0YSwgbGRhdGEpOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzM0LCAxKTsKIAlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdID09IDB4MDIpCi0JCSp2YWx1ZSA9IChoZGF0YSA8PCA4KSArIG1kYXRhOwotCWVsc2UKLQkJKnZhbHVlID0gaGRhdGE7CisJCXJldHVybiAoaGRhdGEgPDwgOCkgKyBtZGF0YTsKKwlyZXR1cm4gaGRhdGE7CiB9CiAKIHN0YXRpYyBpbnQgdmMwMzJ4X3Byb2JlX3NlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwotCV9fdTE2IHZhbHVlOworCXUxNiB2YWx1ZTsKIAljb25zdCBzdHJ1Y3Qgc2Vuc29yX2luZm8gKnB0c2Vuc29yX2luZm87CiAKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YmZjZiwgMSk7CkBAIC0xODcyLDQ4ICsyNzU2LDUxIEBACiAJCXJlZ193KGRldiwgMHhhMCwgMHgwYywgMHhiMzA5KTsKIAkJcmVnX3coZGV2LCAweGEwLCBwdHNlbnNvcl9pbmZvLT5JMmNBZGQsIDB4YjMzNSk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+b3AsIDB4YjMwMSk7Ci0JCXJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQsICZ2YWx1ZSk7Ci0JCWlmICh2YWx1ZSA9PSBwdHNlbnNvcl9pbmZvLT5WcElkKQotCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOworCQl2YWx1ZSA9IHJlYWRfc2Vuc29yX3JlZ2lzdGVyKGdzcGNhX2RldiwgcHRzZW5zb3JfaW5mby0+SWRBZGQpOworCQlpZiAodmFsdWUgPT0gMCAmJiBwdHNlbnNvcl9pbmZvLT5JZEFkZCA9PSAweDgyKQorCQkJdmFsdWUgPSByZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIDB4ODMpOworCQlpZiAodmFsdWUgIT0gMCkgeworCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJTZW5zb3IgSUQgJTA0eCAoJWQpIiwKKwkJCQl2YWx1ZSwgaSk7CisJCQlpZiAodmFsdWUgPT0gcHRzZW5zb3JfaW5mby0+VnBJZCkKKwkJCQlyZXR1cm4gcHRzZW5zb3JfaW5mby0+c2Vuc29ySWQ7CiAKLQkJLyogc3BlY2lhbCBjYXNlIGZvciBNSTAzNjAgKi8KLQkJaWYgKHB0c2Vuc29yX2luZm8tPnNlbnNvcklkID09IFNFTlNPUl9NSTEzMTBfU09DCi0JCSAgICAmJiB2YWx1ZSA9PSAweDgyNDMpCi0JCQlyZXR1cm4gU0VOU09SX01JMDM2MDsKKwkJCXN3aXRjaCAodmFsdWUpIHsKKwkJCWNhc2UgMHg3NjczOgorCQkJCXJldHVybiBTRU5TT1JfT1Y3NjcwOworCQkJY2FzZSAweDgyNDM6CisJCQkJcmV0dXJuIFNFTlNPUl9NSTAzNjA7CisJCQl9CisvKmZpeG1lOiBzaG91bGQgcmV0dXJuIGhlcmUqLworCQl9CiAJfQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIF9fdTggaTJjX3dyaXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCV9fdTggcmVnLCBjb25zdCBfX3U4ICp2YWwsIF9fdTggc2l6ZSkKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcsIGNvbnN0IHU4ICp2YWwsCisJCQl1OCBzaXplKQkJLyogMSBvciAyICovCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OworCWludCByZXRyeTsKIAotCWlmIChzaXplID4gMyB8fCBzaXplIDwgMSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2YsIDEpOworLypmaXhtZTpzaG91bGQgY2hlY2sgaWYgKCEoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICYgMHgwMikpIGVycm9yKi8KIAlyZWdfdyhkZXYsIDB4YTAsIHNpemUsIDB4YjMzNCk7CiAJcmVnX3coZGV2LCAweGEwLCByZWcsIDB4YjMzYSk7Ci0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKKwlpZiAoc2l6ZSA+IDEpCiAJCXJlZ193KGRldiwgMHhhMCwgdmFsWzFdLCAweGIzMzcpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXJlZ193KGRldiwgMHhhMCwgdmFsWzBdLCAweGIzMzYpOwotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMl0sIDB4YjMzOCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJlZ193KGRldiwgMHhhMCwgMHgwMSwgMHhiMzM5KTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwOworCXJldHJ5ID0gNDsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNiLCAxKTsKKwkJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgyMCk7CisJfSB3aGlsZSAoLS1yZXRyeSA+IDApOworCWlmIChyZXRyeSA8PSAwKQorCQlQREVCVUcoRF9FUlIsICJpMmNfd3JpdGUgZmFpbGVkIik7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90YWJfdG9fcmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE5MzgsNyArMjgyNSw3IEBACiAJCQlyZXR1cm47CiAJCWNhc2UgMHhjYzoJCQkvKiBub3JtYWwgd3JpdGUgKi8KIAkJCXJlZ193KGRldiwgMHhhMCwgZGF0YVtpXVsyXSwKLQkJCQkJKChkYXRhW2ldWzBdKTw8OCkgfCBkYXRhW2ldWzFdKTsKKwkJCQkJKGRhdGFbaV1bMF0pIDw8IDggfCBkYXRhW2ldWzFdKTsKIAkJCWJyZWFrOwogCQljYXNlIDB4YWE6CQkJLyogaTJjIG9wICovCiAJCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCBkYXRhW2ldWzFdLCAmZGF0YVtpXVsyXSwgMSk7CkBAIC0xOTU1LDE5ICsyODQyLDYgQEAKIAkvKm5vdCByZWFjaGVkKi8KIH0KIAotLyoKLSAiR2FtbWFUIj1oZXg6MDQsMTcsMzEsNGYsNmEsODMsOTksYWQsYmYsY2UsZGEsZTUsZWUsZjUsZmIsZmYsZmYKLSAiTWF0cml4VCI9aGV4OjYwLGY5LGU1LGU3LDUwLDA1LGYzLGU2LDY2Ci0gKi8KLQotc3RhdGljIHZvaWQgdmMwMzIxX3Jlc2V0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMCwgMHhiMDRkKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMzAxKTsKLQltc2xlZXAoMTAwKTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgwMSwgMHhiMDAzKTsKLQltc2xlZXAoMTAwKTsKLX0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtMTk3OSwxMCArMjg1Myw3IEBACiAJaW50IHNlbnNvcjsKIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDI7CiAJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbzsKLQotCXZjMDMyMV9yZXNldChnc3BjYV9kZXYpOwogCXNlbnNvciA9IHZjMDMyeF9wcm9iZV9zZW5zb3IoZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNlbnNvcikgewogCWNhc2UgLTE6CkBAIC0yMDAxLDYgKzI4NzIsOSBAQAogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjAiKTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKKwkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBNSTEzMjBfU09DIik7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzY2MDoKIAkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NjAiKTsKIAkJYnJlYWs7CkBAIC0yMDIwLDEyICsyODk0LDIzIEBACiAJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjFfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyMV9tb2RlKTsKIAl9IGVsc2UgewotCQlpZiAoc2Vuc29yICE9IFNFTlNPUl9QTzEyMDApIHsKLQkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKLQkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSk7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaCAoc2Vuc29yKSB7CisJCWNhc2UgU0VOU09SX1BPMTIwMDoKIAkJCWNhbS0+Y2FtX21vZGUgPSBzdmdhX21vZGU7CiAJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc3ZnYV9tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IHZjMDMyM19tb2RlOworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyM19tb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgorCQkJY2FtLT5jYW1fbW9kZSA9IGJpX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoYmlfbW9kZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSkgLSAxOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTIwNjEsNyArMjk0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCB0aW1lICovCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJcmV0dXJuIDA7CkBAIC0yMTI0LDkgKzMwMDksMTggQEAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwljb25zdCBfX3U4ICgqaW5pdClbNF07CiAJY29uc3QgX191OCAqR2FtbWFUID0gTlVMTDsKIAljb25zdCBfX3U4ICpNYXRyaXhUID0gTlVMTDsKIAlpbnQgbW9kZTsKKwlzdGF0aWMgY29uc3QgdTggKCptaTEzMjBfc29jX2luaXRbXSlbNF0gPSB7CisJCW1pMTMyMF9zb2NfSW5pdFNYR0EsCisJCW1pMTMyMF9zb2NfSW5pdFNYR0FfSlBHLAorCQltaTEzMjBfc29jX0luaXRWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFZHQV9KUEcsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0EsCisJCW1pMTMyMF9zb2NfSW5pdFFWR0FfSlBHCisJfTsKIAogCS8qIEFzc3VtZSBzdGFydCB1c2UgdGhlIGdvb2QgcmVzb2x1dGlvbiBmcm9tIGdzcGNhX2Rldi0+bW9kZSAqLwogCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKQEAgLTIxMzQsNiArMzAyOCwxMyBAQAogCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVkKTsKIAkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZSk7CiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWYpOworCQlzZC0+aW1hZ2Vfb2Zmc2V0ID0gNDY7CisJfSBlbHNlIHsKKwkJaWYgKGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2dzcGNhX2Rldi0+Y3Vycl9tb2RlXS5waXhlbGZvcm1hdAorCQkJCT09IFY0TDJfUElYX0ZNVF9KUEVHKQorCQkJc2QtPmltYWdlX29mZnNldCA9IDA7CisJCWVsc2UKKwkJCXNkLT5pbWFnZV9vZmZzZXQgPSAzMjsKIAl9CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CkBAIC0yMTQxLDExNSArMzA0Miw4NyBAQAogCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJCUdhbW1hVCA9IGh2NzEzMXJfZ2FtbWE7CiAJCU1hdHJpeFQgPSBodjcxMzFyX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGh2NzEzMXJfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRWR0FfZGF0YSk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gaHY3MTMxcl9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBodjcxMzFyX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCUdhbW1hVCA9IG92NzY2MF9nYW1tYTsKIAkJTWF0cml4VCA9IG92NzY2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NjBfaW5pdFZHQV9kYXRhKTsKLQkJfQorCQlpZiAobW9kZSkKKwkJCWluaXQgPSBvdjc2NjBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gb3Y3NjYwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NzA6CiAJCS8qR2FtbWFUID0gb3Y3NjYwX2dhbW1hOyAqLwogCQkvKk1hdHJpeFQgPSBvdjc2NjBfbWF0cml4OyAqLwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjcwX2luaXRRVkdBX0pQRyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBvdjc2NzBfaW5pdFZHQV9KUEcpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG92NzY3MF9pbml0UVZHQV9KUEc7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IG92NzY3MF9pbml0VkdBX0pQRzsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NSTAzNjA6CiAJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKIAkJTWF0cml4VCA9IG1pMDM2MF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTAzNjBfaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMDM2MF9pbml0VkdBX0pQRyk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gbWkwMzYwX2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gbWkwMzYwX2luaXRWR0FfSlBHOwkvKiA2NDB4NDgwICovCiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMxMF9TT0M6Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMxMF9zb2Npbml0VkdBX0pQRyk7CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIDE6CisJCQlpbml0ID0gbWkxMzEwX3NvY2luaXRRVkdBX0pQRzsJLyogMzIweDI0MCAqLworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCWluaXQgPSBtaTEzMTBfc29jaW5pdFZHQV9KUEc7CS8qIDY0MHg0ODAgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaW5pdCA9IG1pMTMxMF9zb2NfSW5pdFNYR0FfSlBHOwkvKiAxMjgweDEwMjQgKi8KKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMTMyMDoKIAkJR2FtbWFUID0gbWkxMzIwX2dhbW1hOwogCQlNYXRyaXhUID0gbWkxMzIwX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0UVZHQV9kYXRhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG1pMTMyMF9pbml0VkdBX2RhdGEpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG1pMTMyMF9pbml0UVZHQV9kYXRhOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBtaTEzMjBfaW5pdFZHQV9kYXRhOwkvKiA2NDB4NDgwICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6CisJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKKwkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7CisJCWluaXQgPSBtaTEzMjBfc29jX2luaXRbbW9kZV07CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BPMzEzME5DOgogCQlHYW1tYVQgPSBwbzMxMzBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBwbzMxMzBfbWF0cml4OwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRRVkdBX2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX2luaXRWR0FfZGF0YSk7Ci0JCX0KLQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG8zMTMwX3J1bmRhdGEpOwotCQlicmVhazsKLQljYXNlIFNFTlNPUl9QTzEyMDA6Ci0JCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKLQkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7Ci0JCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMTIwMF9pbml0VkdBX2RhdGEpOworCQlpZiAobW9kZSkKKwkJCWluaXQgPSBwbzMxMzBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gcG8zMTMwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLworCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBpbml0KTsKKwkJaW5pdCA9IHBvMzEzMF9ydW5kYXRhOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQREVCVUcoRF9QUk9CRSwgIkRhbW5lZCAhISBubyBzZW5zb3IgZm91bmQgQnllIik7Ci0JCXJldHVybiAtRU1FRElVTVRZUEU7CisvKgljYXNlIFNFTlNPUl9QTzEyMDA6ICovCisJCUdhbW1hVCA9IHBvMTIwMF9nYW1tYTsKKwkJTWF0cml4VCA9IHBvMTIwMF9tYXRyaXg7CisJCWluaXQgPSBwbzEyMDBfaW5pdFZHQV9kYXRhOworCQlicmVhazsKIAl9CisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CiAJaWYgKEdhbW1hVCAmJiBNYXRyaXhUKSB7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODRhKTsKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NWIpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg2Yyk7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgTWF0cml4VCwgOSwgMHhiODJjKTsKIAotCQkvKiBTZWVtIFNIQVJQTkVTUyAqLwotCQkvKgotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg4MCwgMHhiODBhKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YjgwYik7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGI4MGUpOwotCQkqLwotCQkvKiBhbGwgMHg0MCA/Pz8gZG8gbm90aGluZwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg0MCwgMHhiODIyKTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4NDAsIDB4YjgyMyk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDQwLCAweGI4MjQpOwotCQkqLwotCQkvKiBPbmx5IHdvcmtzIGZvciBIVjcxMzFSID8/Ci0JCXJlZ19yIChnc3BjYV9kZXYsIDB4YTEsIDB4Yjg4MSwgMSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZlMDEsIDB4Yjg4MSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDc5LCAweGI4MDEpOwotCQkqLwotCQkvKiBvbmx5IGh2NzEzMXIgZXQgb3Y3NjYwCi0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDIwLCAweGI4MjcpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiODI2KTsgKiBJU1BfR0FJTiA4MAotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyMywgMHhiODAwKTsgKiBJU1AgQ1RSTF9CQVMKLQkJKi8KIAkJLyogc2V0IHRoZSBsZWQgb24gMHgwODkyIDB4MDg5NiAqLwogCQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7CiAJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwpAQCAtMjI5NiwxMiArMzE2OSw4IEBACiAJCQkidmMwMzJ4IGhlYWRlciBwYWNrZXQgZm91bmQgbGVuICVkIiwgbGVuKTsKIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCQlkYXRhLCAwKTsKLQkJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1ZDMDMyMSkgewotI2RlZmluZSBWQ0hEUlNaIDQ2Ci0JCQlkYXRhICs9IFZDSERSU1o7Ci0JCQlsZW4gLT0gVkNIRFJTWjsKLSN1bmRlZiBWQ0hEUlNaCi0JCX0KKwkJZGF0YSArPSBzZC0+aW1hZ2Vfb2Zmc2V0OworCQlsZW4gLT0gc2QtPmltYWdlX29mZnNldDsKIAkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRklSU1RfUEFDS0VULCBmcmFtZSwKIAkJCQlkYXRhLCBsZW4pOwogCQlyZXR1cm47CkBAIC0yMzk5LDcgKzMyNjgsOCBAQAogCQljYXNlIDE6CQkvKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaICovCiAJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjUwIEh6Iik7CiAJCQlyZXR1cm4gMDsKLQkJY2FzZSAyOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNjBIWiAqLworCQlkZWZhdWx0OgorLyoJCWNhc2UgMjoJCSAqIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KIAkJCXN0cmNweSgoY2hhciAqKSBtZW51LT5uYW1lLCAiNjAgSHoiKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0yNDI0LDYgKzMyOTQsNyBAQAogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDViKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODk3KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCkBAIC0yNDMyLDYgKzMzMDMsNyBAQAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzI4KSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDEpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4YzAwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAorCXtVU0JfREVWSUNFKDB4MTViOCwgMHg2MDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgxNWI4LCAweDYwMDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKIAl7VVNCX0RFVklDRSgweDE3ZWYsIDB4NDgwMiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXt9CkBAIC0yNDYwLDggKzMzMzIsMTEgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IGVjMmE1M2QuLjRmZTAxZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgTU9EVUxFX05BTUUgInpjM3h4IgogCiAjaW5jbHVkZSAiZ3NwY2EuaCIKKyNpbmNsdWRlICJqcGVnLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hlbCBYaGFhcmQgPG14aGFhcmRAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgIgogCQkiU2VyZ2UgQS4gU3VjaGtvdiA8U2VyZ2UuQS5TQHRvY2hrYS5ydT4iKTsKQEAgLTMxLDcgKzMyLDcgQEAKIAogc3RhdGljIGludCBmb3JjZV9zZW5zb3IgPSAtMTsKIAotI2luY2x1ZGUgImpwZWcuaCIKKyNkZWZpbmUgUVVBTlRfVkFMIDEJCS8qIHF1YW50aXphdGlvbiB0YWJsZSAqLwogI2luY2x1ZGUgInpjM3h4LXJlZy5oIgogCiAvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLwpAQCAtNDQsMzAgKzQ1LDM2IEBACiAJX191OCBhdXRvZ2FpbjsKIAlfX3U4IGxpZ2h0ZnJlcTsKIAlfX3U4IHNoYXJwbmVzczsKKwl1OCBxdWFsaXR5OwkJCS8qIGltYWdlIHF1YWxpdHkgKi8KKyNkZWZpbmUgUVVBTElUWV9NSU4gNDAKKyNkZWZpbmUgUVVBTElUWV9NQVggNjAKKyNkZWZpbmUgUVVBTElUWV9ERUYgNTAKIAotCWNoYXIgcWluZGV4OwogCXNpZ25lZCBjaGFyIHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KIC8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KLSNkZWZpbmUgU0VOU09SX0NTMjEwMiAwCi0jZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDEKLSNkZWZpbmUgU0VOU09SX0dDMDMwNSAyCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgMwotI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA0Ci0jZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDUKLSNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNgotI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA3Ci0jZGVmaW5lIFNFTlNPUl9PVjc2MjAgOAotLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOCAtIHNhbWUgdmFsdWVzICovCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDkKLSNkZWZpbmUgU0VOU09SX1BBUzEwNiAxMAotI2RlZmluZSBTRU5TT1JfUEFTMjAyQiAxMQotI2RlZmluZSBTRU5TT1JfUEIwMzMwIDEyCi0jZGVmaW5lIFNFTlNPUl9QTzIwMzAgMTMKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDSyAxNAotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENYWCAxNQotI2RlZmluZSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2Ci0jZGVmaW5lIFNFTlNPUl9NQVggMTcKKyNkZWZpbmUgU0VOU09SX0FEQ00yNzAwIDAKKyNkZWZpbmUgU0VOU09SX0NTMjEwMiAxCisjZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDIKKyNkZWZpbmUgU0VOU09SX0dDMDMwNSAzCisjZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAorI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1CisjZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKKyNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNworI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4CisjZGVmaW5lIFNFTlNPUl9PVjc2MjAgOQorLyojZGVmaW5lIFNFTlNPUl9PVjc2NDggOSAtIHNhbWUgdmFsdWVzICovCisjZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDEwCisjZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTEKKyNkZWZpbmUgU0VOU09SX1BBUzIwMkIgMTIKKyNkZWZpbmUgU0VOU09SX1BCMDMzMCAxMworI2RlZmluZSBTRU5TT1JfUE8yMDMwIDE0CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTUKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTYKKyNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNworI2RlZmluZSBTRU5TT1JfTUFYIDE4CiAJdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTIwNiw2ICsyMTMsMjEzIEBACiAJX191MTYJaWR4OwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMDQsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDMsY2MgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZDgsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGRlLCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxkZSxjYyAqLworCXsweGEwLCAweDg2LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg2LGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCS8qIDAxLDAxLDM3LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCQkvKiAwMSw4OSwwNixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAkJLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCQkvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExNl9SR0FJTn0sCQkJLyogMDEsMTYsNTgsY2MgKi8KKwl7MHhhMCwgMHg1YSwgWkMzWFhfUjExOF9CR0FJTn0sCQkJLyogMDEsMTgsNWEsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAyLGNjICovCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4YixkMyxjYyAqLworCXsweGJiLCAweDAwLCAweDA0MDh9LAkJCQkvKiAwNCwwMCwwOCxiYiAqLworCXsweGRkLCAweDAwLCAweDAyMDB9LAkJCQkvKiAwMCwwMiwwMCxkZCAqLworCXsweGJiLCAweDAwLCAweDA0MDB9LAkJCQkvKiAwNCwwMCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDBmLCAweDE0MGZ9LAkJCQkvKiAxNCwwZiwwZixiYiAqLworCXsweGJiLCAweGUwLCAweDBjMmV9LAkJCQkvKiAwYyxlMCwyZSxiYiAqLworCXsweGJiLCAweDAxLCAweDIwMDB9LAkJCQkvKiAyMCwwMSwwMCxiYiAqLworCXsweGJiLCAweDk2LCAweDI0MDB9LAkJCQkvKiAyNCw5NiwwMCxiYiAqLworCXsweGJiLCAweDA2LCAweDEwMDZ9LAkJCQkvKiAxMCwwNiwwNixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDVmLCAweDIwOTB9LAkJCQkvKiAyMCw1Ziw5MCxiYiAqLworCXsweGJiLCAweDAxLCAweDgwMDB9LAkJCQkvKiA4MCwwMSwwMCxiYiAqLworCXsweGJiLCAweDA5LCAweDg0MDB9LAkJCQkvKiA4NCwwOSwwMCxiYiAqLworCXsweGJiLCAweDg2LCAweDAwMDJ9LAkJCQkvKiAwMCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDA0MDF9LAkJCQkvKiAwNCxlNiwwMSxiYiAqLworCXsweGJiLCAweDg2LCAweDA4MDJ9LAkJCQkvKiAwOCw4NiwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDBjMDF9LAkJCQkvKiAwYyxlNiwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMjB9LAkJCQkvKiAwMCxmZSwyMCxhYSAqLworLyptc3dpbisqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGZlLCAweDAwMDJ9LAorCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAorCXsweGFhLCAweGI0LCAweGNkMzd9LAorCXsweGFhLCAweGE0LCAweDAwMDR9LAorCXsweGFhLCAweGE4LCAweDAwMDd9LAorCXsweGFhLCAweGFjLCAweDAwMDR9LAorLyptc3dpbi0qLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDA0LCAweDA0MDB9LAkJCQkvKiAwNCwwNCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCQkvKiAwMCwwMSwwMCxkZCAqLworCXsweGJiLCAweDAxLCAweDA0MDB9LAkJCQkvKiAwNCwwMSwwMCxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDQxLCAweDI4MDN9LAkJCQkvKiAyOCw0MSwwMyxiYiAqLworCXsweGJiLCAweDQwLCAweDJjMDN9LAkJCQkvKiAyYyw0MCwwMyxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAkJLyogMDAsMDAsMDEsY2MgKi8KKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCQkvKiAwMCwwMiwxMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCQkvKiAwMCwwOCwwMyxjYyAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweGQzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAkJLyogMDAsOGIsZDMsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCS8qIDAwLDAzLDAyLGNjICovCisJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCQkvKiAwMCwwNCw4MCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCS8qIDAwLDA1LDAxLGNjICovCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAkvKiAwMCwwNixkMCxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCS8qIDAwLDAxLDAxLGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAzLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDAxLGNjICovCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qIDAwLDEyLDA1LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwJCS8qIDAwLDk4LDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwJCS8qIDAwLDlhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwJCS8qIDAxLDFhLDAwLGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwJCS8qIDAxLDFjLDAwLGNjICovCisJezB4YTAsIDB4ZDgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwJCS8qIDAwLDljLGQ4LGNjICovCisJezB4YTAsIDB4ODgsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAkJLyogMDAsOWUsODgsY2MgKi8KKwl7MHhiYiwgMHgwMCwgMHgwNDAwfSwJCQkJLyogMDQsMDAsMDAsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHgwZiwgMHgxNDBmfSwJCQkJLyogMTQsMGYsMGYsYmIgKi8KKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLyogMDEsMDEsMzcsY2MgKi8KKwl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwJCS8qIDAxLDAwLDBkLGNjICovCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwJCS8qIDAxLDg5LDA2LGNjICovCisJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCQkvKiAwMSxjNSwwMyxjYyAqLworCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJCS8qIDAxLGNiLDEzLGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAkvKiAwMiw1MCwwOCxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCQkvKiAwMywwMSwwOCxjYyAqLworCXsweGEwLCAweDU4LCBaQzNYWF9SMTE2X1JHQUlOfSwJCQkvKiAwMSwxNiw1OCxjYyAqLworCXsweGEwLCAweDVhLCBaQzNYWF9SMTE4X0JHQUlOfSwJCQkvKiAwMSwxOCw1YSxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwJLyogMDEsODAsMDIsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwOH0sCQkJCS8qIDA0LDAwLDA4LGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDIwMH0sCQkJCS8qIDAwLDAyLDAwLGRkICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDA1MH0sCQkJCS8qIDAwLDAwLDUwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YmIsIDB4ZTAsIDB4MGMyZX0sCQkJCS8qIDBjLGUwLDJlLGJiICovCisJezB4YmIsIDB4MDEsIDB4MjAwMH0sCQkJCS8qIDIwLDAxLDAwLGJiICovCisJezB4YmIsIDB4OTYsIDB4MjQwMH0sCQkJCS8qIDI0LDk2LDAwLGJiICovCisJezB4YmIsIDB4MDYsIDB4MTAwNn0sCQkJCS8qIDEwLDA2LDA2LGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4NWYsIDB4MjA5MH0sCQkJCS8qIDIwLDVmLDkwLGJiICovCisJezB4YmIsIDB4MDEsIDB4ODAwMH0sCQkJCS8qIDgwLDAxLDAwLGJiICovCisJezB4YmIsIDB4MDksIDB4ODQwMH0sCQkJCS8qIDg0LDA5LDAwLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDAwMn0sCQkJCS8qIDAwLDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MDQwMX0sCQkJCS8qIDA0LGU2LDAxLGJiICovCisJezB4YmIsIDB4ODYsIDB4MDgwMn0sCQkJCS8qIDA4LDg4LDAyLGJiICovCisJezB4YmIsIDB4ZTYsIDB4MGMwMX0sCQkJCS8qIDBjLGU2LDAxLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAyMH0sCQkJCS8qIDAwLGZlLDIwLGFhICovCisJLyoqKioqKiovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMH0sCQkJCS8qIDAwLGZlLDAwLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MDQsIDB4MDQwMH0sCQkJCS8qIDA0LDA0LDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDEwMH0sCQkJCS8qIDAwLDAxLDAwLGRkICovCisJezB4YmIsIDB4MDEsIDB4MDQwMH0sCQkJCS8qIDA0LDAxLDAwLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YmIsIDB4NDEsIDB4MjgwM30sCQkJCS8qIDI4LDQxLDAzLGJiICovCisJezB4YmIsIDB4NDAsIDB4MmMwM30sCQkJCS8qIDJjLDQwLDAzLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAxMH0sCQkJCS8qIDAwLGZlLDEwLGFhICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gYWRjbTI3MDBfNTBIWltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA1LCAweDg0MDB9LAkJCQkvKiA4NCwwNSwwMCxiYiAqLworCXsweGJiLCAweGQwLCAweGIwMDd9LAkJCQkvKiBiMCxkMCwwNyxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MGZ9LAkJCQkvKiBiOCxhMCwwZixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXsweGFhLCAweDI2LCAweDAwZDB9LAkJCQkvKiAwMCwyNixkMCxhYSAqLworCXsweGFhLCAweDI4LCAweDAwMDJ9LAkJCQkvKiAwMCwyOCwwMixhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwXzYwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHgwNywgMHg4NDAwfSwJCQkJLyogODQsMDcsMDAsYmIgKi8KKwl7MHhiYiwgMHg4MiwgMHhiMDA2fSwJCQkJLyogYjAsODIsMDYsYmIgKi8KKwl7MHhiYiwgMHgwNCwgMHhiODBkfSwJCQkJLyogYjgsMDQsMGQsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMDU3fSwJCQkJLyogMDAsMjYsNTcsYWEgKi8KKwl7MHhhYSwgMHgyOCwgMHgwMDAyfSwJCQkJLyogMDAsMjgsMDIsYWEgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Ob0ZsaWtlcltdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDA3LCAweDg0MDB9LAkJCQkvKiA4NCwwNywwMCxiYiAqLworCXsweGJiLCAweDA1LCAweGIwMDB9LAkJCQkvKiBiMCwwNSwwMCxiYiAqLworCXsweGJiLCAweGEwLCAweGI4MDF9LAkJCQkvKiBiOCxhMCwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Owogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMl9Jbml0aWFsW10gPSB7CiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCiAJezB4YTEsIDB4MDEsIDB4MDAwOH0sCkBAIC04NzcsNyArMTA5MSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gY3MyMTAyS19Jbml0aWFsU2NhbGVbXSA9IHsKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC04OTQsNiArMTEwOCw3IEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKIAl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAogCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKKy8qZml4bWU6IG5leHQgc2VxdWVuY2UgPSBpMmMgZXhjaGFuZ2VzKi8KIAl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKIAl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCkBAIC0xMDc3LDIwNyArMTI5Miw2IEBACiAJezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKIAl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAotCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDA1X0ZSQU1FSEVJR0hUSElHSH0sCi0JezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKLQl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAotCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwKLQl7MHhhMCwgMHg1NSwgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBBLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MEIsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwQywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg3YiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBELCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweEEzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4ZmIsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwRSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwNCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwYywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE3LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDBDLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHhmNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHg3OCwgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKLQl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKLQl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHgyMSwgWkMzWFhfUjA4OF9FWFBUSU1FTE9XfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKLQl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKLQl7MHhhMCwgMHgwMSwgMHgwMWIxfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJLyogY2xvY2sgPyAqLwotCXsweGEwLCAweDA4LCBaQzNYWF9SMUM2X1NIQVJQTkVTUzAwfSwJLyogc2hhcnBuZXNzKyAqLwotCXsweGEwLCAweDBmLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwJLyogc2hhcnBuZXNzLSAqLwotCXsweGEwLCAweDEzLCBaQzNYWF9SMTIwX0dBTU1BMDB9LAkvKiBnYW1tYSA0ICovCi0JezB4YTAsIDB4MzgsIFpDM1hYX1IxMjFfR0FNTUEwMX0sCi0JezB4YTAsIDB4NTksIFpDM1hYX1IxMjJfR0FNTUEwMn0sCi0JezB4YTAsIDB4NzksIFpDM1hYX1IxMjNfR0FNTUEwM30sCi0JezB4YTAsIDB4OTIsIFpDM1hYX1IxMjRfR0FNTUEwNH0sCi0JezB4YTAsIDB4YTcsIFpDM1hYX1IxMjVfR0FNTUEwNX0sCi0JezB4YTAsIDB4YjksIFpDM1hYX1IxMjZfR0FNTUEwNn0sCi0JezB4YTAsIDB4YzgsIFpDM1hYX1IxMjdfR0FNTUEwN30sCi0JezB4YTAsIDB4ZDQsIFpDM1hYX1IxMjhfR0FNTUEwOH0sCi0JezB4YTAsIDB4ZGYsIFpDM1hYX1IxMjlfR0FNTUEwOX0sCi0JezB4YTAsIDB4ZTcsIFpDM1hYX1IxMkFfR0FNTUEwQX0sCi0JezB4YTAsIDB4ZWUsIFpDM1hYX1IxMkJfR0FNTUEwQn0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMkNfR0FNTUEwQ30sCi0JezB4YTAsIDB4ZjksIFpDM1hYX1IxMkRfR0FNTUEwRH0sCi0JezB4YTAsIDB4ZmMsIFpDM1hYX1IxMkVfR0FNTUEwRX0sCi0JezB4YTAsIDB4ZmYsIFpDM1hYX1IxMkZfR0FNTUEwRn0sCi0JezB4YTAsIDB4MjYsIFpDM1hYX1IxMzBfR0FNTUExMH0sCi0JezB4YTAsIDB4MjIsIFpDM1hYX1IxMzFfR0FNTUExMX0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IxMzJfR0FNTUExMn0sCi0JezB4YTAsIDB4MWMsIFpDM1hYX1IxMzNfR0FNTUExM30sCi0JezB4YTAsIDB4MTYsIFpDM1hYX1IxMzRfR0FNTUExNH0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxMzVfR0FNTUExNX0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxMzZfR0FNTUExNn0sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMzdfR0FNTUExN30sCi0JezB4YTAsIDB4MGIsIFpDM1hYX1IxMzhfR0FNTUExOH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IxMzlfR0FNTUExOX0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxM0FfR0FNTUExQX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxM0JfR0FNTUExQn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IxM0NfR0FNTUExQ30sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxM0RfR0FNTUExRH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxM0VfR0FNTUExRX0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxM0ZfR0FNTUExRn0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1OCwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDIxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjBBM19FWFBPU1VSRVRJTUVISUdIfSwKLQl7MHhhMCwgMHgyMiwgWkMzWFhfUjBBNF9FWFBPU1VSRVRJTUVMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKLQl7MHhhMCwgMHhlZSwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKLQl7MHhhMCwgMHgzYSwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAotCXsweGEwLCAweDBjLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAotCXsweGEwLCAweDI4LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwMURfSFNZTkNfMH0sCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCi0JezB4YTAsIDB4MTksIFpDM1hYX1IwMUZfSFNZTkNfMn0sCi0JezB4YTAsIDB4MWYsIFpDM1hYX1IwMjBfSFNZTkNfM30sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHg2MCwgWkMzWFhfUjExNl9SR0FJTn0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU59LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMTE4X0JHQUlOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LApAQCAtMTMzNCw2ICsxMzQ4LDcgQEAKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKKy8qZml4bWU6d2hhdCBkb2VzIHRoZSBuZXh0IHNlcXVlbmNlPyovCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKIAl7MHhhMCwgMHgwNCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCkBAIC02MjM3LDcgKzYyNTIsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgaW50IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHU4IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCkBAIC02MjUwLDEwICs2MjY1LDEwIEBACiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAotc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCitzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQlfX3UxNiBpbmRleCkKIHsKLQlpbnQgcmV0OworCXU4IHJldDsKIAogCXJldCA9IHJlZ19yX2koZ3NwY2FfZGV2LCBpbmRleCk7CiAJUERFQlVHKERfVVNCSSwgInJlZyByIFslMDR4XSAtPiAlMDJ4IiwgaW5kZXgsIHJldCk7CkBAIC02Mjg2LDggKzYzMDEsOCBAQAogCV9fdTggcmV0Ynl0ZTsKIAlfX3UxNiByZXR2YWw7CiAKLQlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4OTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCisJcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOworCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KIAltc2xlZXAoMjUpOwogCXJldGJ5dGUgPSByZWdfcl9pKGdzcGNhX2RldiwgMHgwMDkxKTsJCS8qIHJlYWQgc3RhdHVzICovCiAJcmV0dmFsID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5NSk7CQkvKiByZWFkIExvd2J5dGUgKi8KQEAgLTYzMzIsNiArNjM0NywxMiBAQAogCQkJCSAgYWN0aW9uLT5pZHggJiAweGZmLAkJLyogdmFsTCAqLwogCQkJCSAgYWN0aW9uLT5pZHggPj4gOCk7CQkvKiB2YWxIICovCiAJCQlicmVhazsKKwkJY2FzZSAweGJiOgorCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwKKwkJCQkgIGFjdGlvbi0+aWR4ID4+IDgsCQkvKiByZWcgKi8KKwkJCQkgIGFjdGlvbi0+aWR4ICYgMHhmZiwJCS8qIHZhbEwgKi8KKwkJCQkgIGFjdGlvbi0+dmFsKTsJCQkvKiB2YWxIICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIC8qCQljYXNlIDB4ZGQ6CSAqIGRlbGF5ICovCiAJCQltc2xlZXAoYWN0aW9uLT52YWwgLyA2NCArIDEwKTsKQEAgLTYzNDcsNiArNjM2OCwxMCBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKIAljb25zdCBfX3U4ICptYXRyaXg7CisJc3RhdGljIGNvbnN0IHU4IGFkY20yNzAwX21hdHJpeFs5XSA9CisvKgkJezB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjYsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NjZ9OyAqLworLyptcy13aW4qLworCQl7MHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NCwgMHhlZCwgMHhlZCwgMHhlZCwgMHg3NH07CiAJc3RhdGljIGNvbnN0IF9fdTggZ2MwMzA1X21hdHJpeFs5XSA9CiAJCXsweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwLCAweGY4LCAweGY4LCAweGY4LCAweDUwfTsKIAlzdGF0aWMgY29uc3QgX191OCBvdjc2MjBfbWF0cml4WzldID0KQEAgLTYzNTgsMjMgKzYzODMsMjQgQEAKIAlzdGF0aWMgY29uc3QgX191OCB2ZjAyNTBfbWF0cml4WzldID0KIAkJezB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2IsIDB4ZWEsIDB4ZWEsIDB4ZWEsIDB4N2J9OwogCXN0YXRpYyBjb25zdCBfX3U4ICptYXRyaXhfdGJbU0VOU09SX01BWF0gPSB7Ci0JCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KLQkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX0dDMDMwNSAyICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFCIDQgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFDIDUgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KLQkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX09WNzYyMCA4ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfT1Y3NjMwQyA5ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLwotCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMiAqLwotCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDEzICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLwotCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJCWFkY20yNzAwX21hdHJpeCwgLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDIgMSAqLworCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMksgMiAqLworCQlnYzAzMDVfbWF0cml4LAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQlOVUxMLAkJLyogU0VOU09SX0hWNzEzMUMgNiAqLworCQlOVUxMLAkJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQlOVUxMLAkJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9PVjc2MzBDIDEwICovCisJCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMiAqLworCQlOVUxMLAkJLyogU0VOU09SX1BCMDMzMCAxMyAqLworCQlwbzIwMzBfbWF0cml4LAkvKiBTRU5TT1JfUE8yMDMwIDE0ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNiAqLworCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE3ICovCiAJfTsKIAogCW1hdHJpeCA9IG1hdHJpeF90YltzZC0+c2Vuc29yXTsKQEAgLTYzOTgsOCArNjQyNCwxMSBAQAogLypmaXhtZTogaXMgaXQgcmVhbGx5IHdyaXRlIHRvIDAxMWQgYW5kIDAxOGQgZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwogCWJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZWdfdyhnc3BjYV9kZXYtPmRldiwgYnJpZ2h0bmVzcywgMHgwMTFkKTsKLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfSFY3MTMxQikKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKKwljYXNlIFNFTlNPUl9IVjcxMzFCOgogCQlyZXR1cm47CisJfQogCWlmIChicmlnaHRuZXNzIDwgMHg3MCkKIAkJYnJpZ2h0bmVzcyArPSAweDEwOwogCWVsc2UKQEAgLTY1MzYsMTAgKzY1NjUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcXVhbGl0eTsKIAlfX3U4IGZyeHQ7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CkBAIC02NTQ3LDI2ICs2NTc2LDE4IEBACiAJCXJldHVybjsKIAl9CiAvKmZpeG1lOiBpcyBpdCByZWFsbHkgMDAwOCAwMDA3IDAwMTggZm9yIGFsbCBvdGhlciBzZW5zb3JzPyAqLwotCXF1YWxpdHkgPSBzZC0+cWluZGV4OwotCXJlZ193KGRldiwgcXVhbGl0eSwgMHgwMDA4KTsKKwlyZWdfdyhkZXYsIFFVQU5UX1ZBTCwgMHgwMDA4KTsKIAlmcnh0ID0gMHgzMDsKIAlyZWdfdyhkZXYsIGZyeHQsIDB4MDAwNyk7Ci0Jc3dpdGNoIChxdWFsaXR5KSB7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQljYXNlIDI6Ci0JCWZyeHQgPSAweGZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWZyeHQgPSAweGYwOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWZyeHQgPSAweGUwOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWZyeHQgPSAweDIwOwotCQlicmVhazsKLQl9CisjaWYgUVVBTlRfVkFMID09IDAgfHwgUVVBTlRfVkFMID09IDEgfHwgUVVBTlRfVkFMID09IDIKKwlmcnh0ID0gMHhmZjsKKyNlbGlmIFFVQU5UX1ZBTCA9PSAzCisJZnJ4dCA9IDB4ZjA7CisjZWxpZiBRVUFOVF9WQUwgPT0gNAorCWZyeHQgPSAweGUwOworI2Vsc2UKKwlmcnh0ID0gMHgyMDsKKyNlbmRpZgogCXJlZ193KGRldiwgZnJ4dCwgMHgwMDE4KTsKIH0KIApAQCAtNjU4Myw3MSArNjYwNCw3NSBAQAogCWludCBpLCBtb2RlOwogCWNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICp6YzNfZnJlcTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmZyZXFfdGJbU0VOU09SX01BWF1bNl0gPSB7Ci0vKiBTRU5TT1JfQ1MyMTAyIDAgKi8KKy8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCXthZGNtMjcwMF9Ob0ZsaWtlciwgYWRjbTI3MDBfTm9GbGlrZXIsCisJCSBhZGNtMjcwMF81MEhaLCBhZGNtMjcwMF81MEhaLAorCQkgYWRjbTI3MDBfNjBIWiwgYWRjbTI3MDBfNjBIWn0sCisvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBjczIxMDJfNTBIWiwgY3MyMTAyXzUwSFpTY2FsZSwKIAkJIGNzMjEwMl82MEhaLCBjczIxMDJfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9DUzIxMDJLIDEgKi8KKy8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KIAkJe2NzMjEwMl9Ob0ZsaWtlciwgY3MyMTAyX05vRmxpa2VyU2NhbGUsCiAJCSBOVUxMLCBOVUxMLCAvKiBjdXJyZW50bHkgZGlzYWJsZWQgKi8KIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0dDMDMwNSAyICovCisvKiBTRU5TT1JfR0MwMzA1IDMgKi8KIAkJe2djMDMwNV9Ob0ZsaWtlciwgZ2MwMzA1X05vRmxpa2VyLAogCQkgZ2MwMzA1XzUwSFosIGdjMDMwNV81MEhaLAogCQkgZ2MwMzA1XzYwSFosIGdjMDMwNV82MEhafSwKLS8qIFNFTlNPUl9IRENTMjAyMGIgMyAqLworLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCiAJCXtoZGNzMjAyMGJfTm9GbGlrZXIsIGhkY3MyMDIwYl9Ob0ZsaWtlciwKIAkJIGhkY3MyMDIwYl81MEhaLCBoZGNzMjAyMGJfNTBIWiwKIAkJIGhkY3MyMDIwYl82MEhaLCBoZGNzMjAyMGJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQiA0ICovCisvKiBTRU5TT1JfSFY3MTMxQiA1ICovCiAJCXtodjcxMzFiX05vRmxpa2VyU2NhbGUsIGh2NzEzMWJfTm9GbGlrZXIsCiAJCSBodjcxMzFiXzUwSFpTY2FsZSwgaHY3MTMxYl81MEhaLAogCQkgaHY3MTMxYl82MEhaU2NhbGUsIGh2NzEzMWJfNjBIWn0sCi0vKiBTRU5TT1JfSFY3MTMxQyA1ICovCisvKiBTRU5TT1JfSFY3MTMxQyA2ICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX0lDTTEwNUEgNiAqLworLyogU0VOU09SX0lDTTEwNUEgNyAqLwogCQl7aWNtMTA1YV9Ob0ZsaWtlciwgaWNtMTA1YV9Ob0ZsaWtlclNjYWxlLAogCQkgaWNtMTA1YV81MEhaLCBpY20xMDVhXzUwSFpTY2FsZSwKIAkJIGljbTEwNWFfNjBIWiwgaWNtMTA1YV82MEhaU2NhbGV9LAotLyogU0VOU09SX01DNTAxQ0IgNyAqLworLyogU0VOU09SX01DNTAxQ0IgOCAqLwogCQl7TUM1MDFDQl9Ob0ZsaWtlciwgTUM1MDFDQl9Ob0ZsaWtlclNjYWxlLAogCQkgTUM1MDFDQl81MEhaLCBNQzUwMUNCXzUwSFpTY2FsZSwKIAkJIE1DNTAxQ0JfNjBIWiwgTUM1MDFDQl82MEhaU2NhbGV9LAotLyogU0VOU09SX09WNzYyMCA4ICovCisvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KIAkJe09WNzYyMF9Ob0ZsaWtlciwgT1Y3NjIwX05vRmxpa2VyLAogCQkgT1Y3NjIwXzUwSFosIE9WNzYyMF81MEhaLAogCQkgT1Y3NjIwXzYwSFosIE9WNzYyMF82MEhafSwKLS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KKy8qIFNFTlNPUl9PVjc2MzBDIDEwICovCiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX1BBUzEwNiAxMCAqLworLyogU0VOU09SX1BBUzEwNiAxMSAqLwogCQl7cGFzMTA2Yl9Ob0ZsaWtlciwgcGFzMTA2Yl9Ob0ZsaWtlciwKIAkJIHBhczEwNmJfNTBIWiwgcGFzMTA2Yl81MEhaLAogCQkgcGFzMTA2Yl82MEhaLCBwYXMxMDZiXzYwSFp9LAotLyogU0VOU09SX1BBUzIwMkIgMTEgKi8KKy8qIFNFTlNPUl9QQVMyMDJCIDEyICovCiAJCXtwYXMyMDJiX05vRmxpa2VyU2NhbGUsIHBhczIwMmJfTm9GbGlrZXIsCiAJCSBwYXMyMDJiXzUwSFpTY2FsZSwgcGFzMjAyYl81MEhaLAogCQkgcGFzMjAyYl82MEhaU2NhbGUsIHBhczIwMmJfNjBIWn0sCi0vKiBTRU5TT1JfUEIwMzMwIDEyICovCisvKiBTRU5TT1JfUEIwMzMwIDEzICovCiAJCXtwYjAzMzBfTm9GbGlrZXIsIHBiMDMzMF9Ob0ZsaWtlclNjYWxlLAogCQkgcGIwMzMwXzUwSFosIHBiMDMzMF81MEhaU2NhbGUsCiAJCSBwYjAzMzBfNjBIWiwgcGIwMzMwXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfUE8yMDMwIDEzICovCisvKiBTRU5TT1JfUE8yMDMwIDE0ICovCiAJCXtQTzIwMzBfTm9GbGlrZXIsIFBPMjAzMF9Ob0ZsaWtlciwKIAkJIFBPMjAzMF81MEhaLCBQTzIwMzBfNTBIWiwKIAkJIFBPMjAzMF82MEhaLCBQTzIwMzBfNjBIWn0sCi0vKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCisvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCiAJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAogCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLworLyogU0VOU09SX1RBUzUxMzBDWFggMTYgKi8KIAkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKIAkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKy8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAkJe3RhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlciwgdGFzNTEzMGNfdmYwMjUwX05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNTBIWiwgdGFzNTEzMGNfdmYwMjUwXzUwSFpTY2FsZSwKIAkJIHRhczUxMzBjX3ZmMDI1MF82MEhaLCB0YXM1MTMwY192ZjAyNTBfNjBIWlNjYWxlfSwKQEAgLTY3MDEsNiArNjcyNiw3IEBACiAJCXJlZ193KGRldiwgMHgwYywgMHgwMDNiKTsKIAkJcmVnX3coZGV2LCAweDA4LCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCWNhc2UgU0VOU09SX1BCMDMzMDoKQEAgLTY3NDMsMjYgKzY3NjksMjUgQEAKIHN0YXRpYyBpbnQgdmdhXzJ3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAwKTsJCS8qIEhWNzEzMUIgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAwOwkJCS8qIEhWNzEzMUIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDQpOwkJLyogQ1MyMTAyICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwNDsJCQkvKiBDUzIxMDIgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDYpOwkJLyogT21uaVZpc2lvbiAqLwogCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDExLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDExKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQkvKiAoc2hvdWxkIGhhdmUgcmV0dXJuZWQgMHhhYSkgLS0+IE9tbml2aXNpb24/ICovCiAJCS8qIHJlZ19yIDB4MTAgLT4gMHgwNiAtLT4gICovCiAJCWdvdG8gb3ZfY2hlY2s7CkBAIC02NzcwLDQwICs2Nzk1LDQwIEBACiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA4KTsJCS8qIEhEQ1MyMDIwICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwODsJCQkvKiBIRENTMjAyMCAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwYSk7CQkvKiBQQjAzMzAgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDA3LCAweGFhLCAweGFhKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA3KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDcpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNCk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA0KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwYTsJCQkvKiBQQjAzMzAgPz8gKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGMpOwkJLyogSUNNMTA1QSAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4MTEsIDB4MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGM7CQkJLyogSUNNMTA1QSAqLwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwZSk7CQkvKiBQQVMyMDJCQ0IgKi8KIAlyZWdfdyhkZXYsIDB4MDgsIDB4MDA4ZCk7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMywgMHhhYSwgMHgwMCk7CiAJbXNsZWVwKDUwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAzKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwZTsJCQkvKiBQQVMyMDJCQ0IgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDIpOwkJLyogPz8gKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDAyOwkJCS8qID8/ICovCiBvdl9jaGVjazoKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CQkvKiA/PyAqLwpAQCAtNjgxNywxMiArNjg0MiwxMCBAQAogCW1zbGVlcCg1MDApOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwLCAweDAwKTsJLyogc2Vuc29yIHJlc2V0ICovCi0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSk7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGIpOwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgMndyIG92IHZnYSAweCUwNHgiLCBjaGVja3dvcmQpOwotCXN3aXRjaCAoY2hlY2t3b3JkKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKKwlyZXR3b3JkIHw9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAyd3Igb3YgdmdhIDB4JTA0eCIsIHJldHdvcmQpOworCXN3aXRjaCAocmV0d29yZCkgewogCWNhc2UgMHg3NjMxOgkJCQkvKiBPVjc2MzBDICovCiAJCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKIAkJYnJlYWs7CkBAIC02ODMyLDcgKzY4NTUsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsJCQkvKiBub3QgT21uaVZpc2lvbiAqLwogCX0KLQlyZXR1cm4gY2hlY2t3b3JkOworCXJldHVybiByZXR3b3JkOwogfQogCiBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gewpAQCAtNjg0NSw2ICs2ODY4LDcgQEAKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KIAl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4NDAwMSwgMHgxNn0sCQkvKiBBRENNMjcwMCAqLwogfTsKIAogc3RhdGljIGludCB2Z2FfM3dyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTY4NTMsNyArNjg3Nyw3IEBACiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCWludCBpOwogCV9fdTggcmV0Ynl0ZTsKLQlfX3UxNiBjaGVja3dvcmQ7CisJdTE2IHJldHdvcmQ7CiAKIC8qZml4bWU6IGxhY2sgb2YgOGI9YjMgKDExLDEyKS0+IDEwLCA4Yj1lMCAoMTQsMTUsMTYpLT4gMTIgZm91bmQgaW4gZ3NwY2F2MSovCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwpAQCAtNjg2NSwyNyArNjg4OSwyNSBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CiAJcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNCk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTYpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNik7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MTE7CQkJLyogSFY3MTMxUiAqLwogCiAJcmVnX3coZGV2LCAweDAyLCAweDAwMTApOwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYik7Ci0JY2hlY2t3b3JkID0gcmV0Ynl0ZSA8PCA4OwotCXJldGJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7Ci0JY2hlY2t3b3JkIHw9IHJldGJ5dGU7Ci0JUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgY2hlY2t3b3JkKTsKKwlyZXR3b3JkID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGIpIDw8IDg7CisJcmV0d29yZCB8PSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYSk7CisJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIDEgMHglMDR4IiwgcmV0d29yZCk7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwogCS8qIHRoaXMgaXMgdGVzdGVkIG9ubHkgb25jZSBhbnl3YXkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwc2V0X3JldmlzaW9uX3NlbnNvcik7IGkrKykgewotCQlpZiAoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbaV0ucmV2aXNpb24gPT0gY2hlY2t3b3JkKSB7Ci0JCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IGNoZWNrd29yZDsKKwkJaWYgKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLnJldmlzaW9uID09IHJldHdvcmQpIHsKKwkJCXNkLT5jaGlwX3JldmlzaW9uID0gcmV0d29yZDsKIAkJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QQjAzMzApOwogCQkJcmV0dXJuIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLmludGVybmFsX3NlbnNvcl9pZDsKIAkJfQpAQCAtNjg5Nyw4ICs2OTE5LDggQEAKIAlyZWdfdyhkZXYsIDB4MGEsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CisJaWYgKHJldHdvcmQgIT0gMCkgewogCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7CiAJCXJldHVybiAweDBhOwkJCS8qID8/ICovCiAJfQpAQCAtNjkxMCwxNCArNjkzMiwxNCBAQAogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAltc2xlZXAoMik7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOwotCWlmIChyZXRieXRlICE9IDApIHsKLQkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldGJ5dGUpOwotCQlpZiAocmV0Ynl0ZSA9PSAweDExKQkJCS8qIFZGMDI1MCAqLworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCWlmIChyZXR3b3JkICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgJTAyeCIsIHJldHdvcmQpOworCQlpZiAocmV0d29yZCA9PSAweDAwMTEpCQkJLyogVkYwMjUwICovCiAJCQlyZXR1cm4gMHgwMjUwOwotCQlpZiAocmV0Ynl0ZSA9PSAweDI5KQkJCS8qIGdjMDMwNSAqLworCQlpZiAocmV0d29yZCA9PSAweDAwMjkpCQkJLyogZ2MwMzA1ICovCiAJCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfR0MwMzA1KTsKLQkJcmV0dXJuIHJldGJ5dGU7CisJCXJldHVybiByZXR3b3JkOwogCX0KIAogCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJLyogY2hlY2sgT21uaVZpc2lvbiAqLwpAQCAtNjkyNyw4ICs2OTQ5LDggQEAKIAlyZWdfdyhkZXYsIDB4MDYsIDB4MDAxMCk7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDdmCS8qIE9WNzYxMCAtIG1hbnVmYWN0dXJlciBJRCAqLwotCSAgICAmJiBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWQpID09IDB4YTIpIHsKKwlpZiAoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFjKSA9PSAweDAwN2YJLyogT1Y3NjEwIC0gbWFudWZhY3R1cmVyIElEICovCisJICAgICYmIGkyY19yZWFkKGdzcGNhX2RldiwgMHgxZCkgPT0gMHgwMGEyKSB7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9PVjc2MjApOwogCQlyZXR1cm4gMHgwNjsJCS8qIE9tbmlWaXNpb24gY29uZmlybSA/ICovCiAJfQpAQCAtNjk0MiwxNiArNjk2NCwxNCBAQAogLyoJbXNsZWVwKDE1MCk7ICovCiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDApOwkJLyogSUQgMCAqLwotCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwMDEpOwkJLyogSUQgMSAqLwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIGNoZWNrd29yZCk7Ci0JaWYgKGNoZWNrd29yZCA9PSAweDIwMzApIHsKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKSA8PCA4OwkvKiBJRCAwICovCisJcmV0d29yZCB8PSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwkJLyogSUQgMSAqLworCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAyIDB4JTA0eCIsIHJldHdvcmQpOworCWlmIChyZXR3b3JkID09IDB4MjAzMCkgewogCQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAyKTsJLyogcmV2aXNpb24gbnVtYmVyICovCiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIFBPMjAzMCByZXYgMHglMDJ4IiwgcmV0Ynl0ZSk7CiAJCXNlbmRfdW5rbm93bihkZXYsIFNFTlNPUl9QTzIwMzApOwotCQlyZXR1cm4gY2hlY2t3b3JkOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7CkBAIC02OTYyLDEwICs2OTgyLDEwIEBACiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDAxKTsKIAlyZWdfdyhkZXYsIDB4ZDMsIDB4MDA4Yik7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkgewotCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7Ci0JCXJldHVybiAweDBhOwkJCS8qID8/ICovCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkgeworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/IHJldDogJTA0eCIsIHJldHdvcmQpOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAJcmV0dXJuIC0xOwogfQpAQCAtNjk3Myw3ICs2OTkzLDcgQEAKIHN0YXRpYyBpbnQgemN4eF9wcm9iZVNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCBzZW5zb3IsIHNlbnNvcjI7CisJaW50IHNlbnNvcjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX01DNTAxQ0I6CkBAIC02OTg4LDE2ICs3MDA4LDkgQEAKIAkJYnJlYWs7CiAJfQogCXNlbnNvciA9IHZnYV8yd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yID49IDApIHsKLQkJaWYgKHNlbnNvciA8IDB4NzYwMCkKLQkJCXJldHVybiBzZW5zb3I7Ci0JCS8qIG5leHQgcHJvYmUgaXMgbmVlZGVkIGZvciBPbW5pVmlzaW9uID8gKi8KLQl9Ci0Jc2Vuc29yMiA9IHZnYV8zd3JfcHJvYmUoZ3NwY2FfZGV2KTsKLQlpZiAoc2Vuc29yMiA+PSAwCi0JICAgICYmIHNlbnNvciA+PSAwKQorCWlmIChzZW5zb3IgPj0gMCkKIAkJcmV0dXJuIHNlbnNvcjsKLQlyZXR1cm4gc2Vuc29yMjsKKwlyZXR1cm4gdmdhXzN3cl9wcm9iZShnc3BjYV9kZXYpOwogfQogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lICovCkBAIC03MDA5LDIzICs3MDIyLDI0IEBACiAJaW50IHNlbnNvcjsKIAlpbnQgdmdhID0gMTsJCS8qIDE6IHZnYSwgMDogc2lmICovCiAJc3RhdGljIGNvbnN0IF9fdTggZ2FtbWFbU0VOU09SX01BWF0gPSB7Ci0JCTUsCS8qIFNFTlNPUl9DUzIxMDIgMCAqLwotCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAxICovCi0JCTQsCS8qIFNFTlNPUl9HQzAzMDUgMiAqLwotCQk0LAkvKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUIgNCAqLwotCQk0LAkvKiBTRU5TT1JfSFY3MTMxQyA1ICovCi0JCTQsCS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KLQkJNCwJLyogU0VOU09SX01DNTAxQ0IgNyAqLwotCQkzLAkvKiBTRU5TT1JfT1Y3NjIwIDggKi8KLQkJNCwJLyogU0VOU09SX09WNzYzMEMgOSAqLwotCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDEwICovCi0JCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDExICovCi0JCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTIgKi8KLQkJNCwJLyogU0VOU09SX1BPMjAzMCAxMyAqLwotCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE0ICovCi0JCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE1ICovCi0JCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTYgKi8KKwkJNCwJLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwkJNSwJLyogU0VOU09SX0NTMjEwMiAxICovCisJCTUsCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJNCwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCTQsCS8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLworCQk0LAkvKiBTRU5TT1JfSFY3MTMxQiA1ICovCisJCTQsCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJNCwJLyogU0VOU09SX0lDTTEwNUEgNyAqLworCQk0LAkvKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJCTMsCS8qIFNFTlNPUl9PVjc2MjAgOSAqLworCQk0LAkvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLworCQk0LAkvKiBTRU5TT1JfUEFTMTA2IDExICovCisJCTQsCS8qIFNFTlNPUl9QQVMyMDJCIDEyICovCisJCTQsCS8qIFNFTlNPUl9QQjAzMzAgMTMgKi8KKwkJNCwJLyogU0VOU09SX1BPMjAzMCAxNCAqLworCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENLIDE1ICovCisJCTQsCS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE2ICovCisJCTMsCS8qIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcgKi8KIAl9OwogCiAJLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwpAQCAtNzAzMyw3ICs3MDQ3LDcgQEAKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCXNlbnNvciA9IHpjeHhfcHJvYmVTZW5zb3IoZ3NwY2FfZGV2KTsKIAlpZiAoc2Vuc29yID49IDApCi0JCVBERUJVRyhEX1BST0JFLCAicHJvYmUgc2Vuc29yIC0+ICUwMngiLCBzZW5zb3IpOworCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIHNlbnNvciAtPiAlMDR4Iiwgc2Vuc29yKTsKIAlpZiAoKHVuc2lnbmVkKSBmb3JjZV9zZW5zb3IgPCBTRU5TT1JfTUFYKSB7CiAJCXNkLT5zZW5zb3IgPSBmb3JjZV9zZW5zb3I7CiAJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIGZvcmNlZCB0byAlZCIsIGZvcmNlX3NlbnNvcik7CkBAIC03MTEyLDYgKzcxMjYsMTAgQEAKIAkJCQlzZC0+Y2hpcF9yZXZpc2lvbik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDSzsKIAkJCWJyZWFrOworCQljYXNlIDB4MTY6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEFEQ00yNzAwIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0FEQ00yNzAwOworCQkJYnJlYWs7CiAJCWNhc2UgMHgyOToKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgR0MwMzA1Iik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX0dDMDMwNTsKQEAgLTcxMjksMTIgKzcxNDcsMTYgQEAKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjIwIik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsKIAkJCWJyZWFrOworCQljYXNlIDB4NzYzMToKKwkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjMwQyIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MzBDOworCQkJYnJlYWs7CiAJCWNhc2UgMHg3NjQ4OgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBPVjc2NDgiKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y3NjIwOwkvKiBzYW1lIHNlbnNvciAoPykgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJUERFQlVHKERfRVJSfERfUFJPQkUsICJVbmtub3duIHNlbnNvciAlMDJ4Iiwgc2Vuc29yKTsKKwkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTA0eCIsIHNlbnNvcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTcxNDcsNyArNzE2OSw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIC8qZml4bWU6dGVzdCovCiAJZ3NwY2FfZGV2LT5uYmFsdC0tOwogCWlmICh2Z2EpIHsKQEAgLTcxNTcsMTIgKzcxNzgsMTIgQEAKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0KLQlzZC0+cWluZGV4ID0gMTsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmdhbW1hID0gZ2FtbWFbKGludCkgc2QtPnNlbnNvcl07CiAJc2QtPmF1dG9nYWluID0gc2RfY3RybHNbU0RfQVVUT0dBSU5dLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJc2QtPmxpZ2h0ZnJlcSA9IHNkX2N0cmxzW1NEX0ZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewogCWNhc2UgU0VOU09SX0dDMDMwNToKQEAgLTcxOTYsMjcgKzcyMTcsMzQgQEAKIAljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2luaXQ7CiAJaW50IG1vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICppbml0X3RiW1NFTlNPUl9NQVhdWzJdID0gewotCQl7Y3MyMTAyX0luaXRpYWxTY2FsZSwgY3MyMTAyX0luaXRpYWx9LAkJLyogMCAqLwotCQl7Y3MyMTAyS19Jbml0aWFsU2NhbGUsIGNzMjEwMktfSW5pdGlhbH0sCS8qIDEgKi8KLQkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwJCS8qIDIgKi8KLQkJe2hkY3MyMDIweGJfSW5pdGlhbFNjYWxlLCBoZGNzMjAyMHhiX0luaXRpYWx9LAkvKiAzICovCi0JCXtodjcxMzFieHhfSW5pdGlhbFNjYWxlLCBodjcxMzFieHhfSW5pdGlhbH0sCS8qIDQgKi8KLQkJe2h2NzEzMWN4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWN4eF9Jbml0aWFsfSwJLyogNSAqLwotCQl7aWNtMTA1YXh4X0luaXRpYWxTY2FsZSwgaWNtMTA1YXh4X0luaXRpYWx9LAkvKiA2ICovCi0JCXtNQzUwMUNCX0luaXRpYWxTY2FsZSwgTUM1MDFDQl9Jbml0aWFsfSwJLyogNyAqLwotCQl7T1Y3NjIwX21vZGUwLCBPVjc2MjBfbW9kZTF9LAkJCS8qIDggKi8KLQkJe292NzYzMGNfSW5pdGlhbFNjYWxlLCBvdjc2MzBjX0luaXRpYWx9LAkvKiA5ICovCi0JCXtwYXMxMDZiX0luaXRpYWxTY2FsZSwgcGFzMTA2Yl9Jbml0aWFsfSwJLyogMTAgKi8KLQkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMSAqLwotCQl7cGIwMzMweHhfSW5pdGlhbFNjYWxlLCBwYjAzMzB4eF9Jbml0aWFsfSwJLyogMTIgKi8KKwkJe2FkY20yNzAwX0luaXRpYWwsIGFkY20yNzAwX0luaXRpYWxTY2FsZX0sCS8qIDAgKi8KKwkJe2NzMjEwMl9Jbml0aWFsU2NhbGUsIGNzMjEwMl9Jbml0aWFsfSwJCS8qIDEgKi8KKwkJe2NzMjEwMktfSW5pdGlhbFNjYWxlLCBjczIxMDJLX0luaXRpYWx9LAkvKiAyICovCisJCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAzICovCisJCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogNCAqLworCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA1ICovCisJCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDYgKi8KKwkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNyAqLworCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDggKi8KKwkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiA5ICovCisJCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogMTAgKi8KKwkJe3BhczEwNmJfSW5pdGlhbFNjYWxlLCBwYXMxMDZiX0luaXRpYWx9LAkvKiAxMSAqLworCQl7cGFzMjAyYl9Jbml0aWFsLCBwYXMyMDJiX0luaXRpYWxTY2FsZX0sCS8qIDEyICovCisJCXtwYjAzMzB4eF9Jbml0aWFsU2NhbGUsIHBiMDMzMHh4X0luaXRpYWx9LAkvKiAxMyAqLwogLyogb3IJCXtwYjAzMzAzeF9Jbml0aWFsU2NhbGUsIHBiMDMzMDN4X0luaXRpYWx9LCAqLwotCQl7UE8yMDMwX21vZGUwLCBQTzIwMzBfbW9kZTF9LAkJCS8qIDEzICovCi0JCXt0YXM1MTMwQ0tfSW5pdGlhbFNjYWxlLCB0YXM1MTMwQ0tfSW5pdGlhbH0sCS8qIDE0ICovCi0JCXt0YXM1MTMwY3h4X0luaXRpYWxTY2FsZSwgdGFzNTEzMGN4eF9Jbml0aWFsfSwJLyogMTUgKi8KKwkJe1BPMjAzMF9tb2RlMCwgUE8yMDMwX21vZGUxfSwJCQkvKiAxNCAqLworCQl7dGFzNTEzMENLX0luaXRpYWxTY2FsZSwgdGFzNTEzMENLX0luaXRpYWx9LAkvKiAxNSAqLworCQl7dGFzNTEzMGN4eF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjeHhfSW5pdGlhbH0sCS8qIDE2ICovCiAJCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbFNjYWxlLCB0YXM1MTMwY192ZjAyNTBfSW5pdGlhbH0sCi0JCQkJCQkJCS8qIDE2ICovCisJCQkJCQkJCS8qIDE3ICovCiAJfTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJemMzX2luaXQgPSBpbml0X3RiWyhpbnQpIHNkLT5zZW5zb3JdW21vZGVdOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNzI0MywxMSArNzI3MSwxMiBAQAogCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19pbml0KTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKLQkJbXNsZWVwKDEwMCk7CQkJLyogPz8gKi8KKy8qCQltc2xlZXAoMTAwKTsJCQkgKiA/PyAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7CS8qIC0tPiAweDQwICovCiAJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwpAQCAtNzI2MCw2ICs3Mjg5LDcgQEAKIAlzZXRtYXRyaXgoZ3NwY2FfZGV2KTsKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwOCk7CiAJCXJlZ193KGRldiwgMHgwMCwgMHgwMDA4KTsKQEAgLTczMDEsNiArNzMzMSwxMyBAQAogCXNldGxpZ2h0ZnJlcShnc3BjYV9kZXYpOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CisJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KKwkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOworCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDE4MCk7CisJCQkJCQkvKiBtcy13aW4gKyAqLworCQlyZWdfdyhkZXYsIDB4NDAsIDB4MDExNyk7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX0dDMDMwNToKIAkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CkBAIC03MzIzLDE5ICs3MzYwLDE2IEBACiAKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX1BBUzIwMkI6Ci0JCXJlZ193KGRldiwgMHgwMCwgMHgwMDA3KTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTAwKTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwNyk7CisJCS8qZmFsbCB0aHJ1Ki8KKwljYXNlIFNFTlNPUl9QQVMyMDJCOgogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCi0JCXJlZ193KGRldiwgMHgwMiwgMHgwMDA4KTsKKwkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJCWJyZWFrOwogCX0KLQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfUEFTMjAyQikKLQkJcmVnX3coZGV2LCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElORyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczNDQsNiArNzM3OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKIAlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKIAkJcmV0dXJuOwogCXNlbmRfdW5rbm93bihnc3BjYV9kZXYtPmRldiwgc2QtPnNlbnNvcik7CkBAIC03MzU0LDE0ICs3Mzg5LDE1IEBACiAJCQlfX3U4ICpkYXRhLAogCQkJaW50IGxlbikKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLwogCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwKIAkJCQkJZGF0YSwgMCk7CiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwKLQkJCQkoKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXYpLT5xaW5kZXgsCi0JCQkJMHgyMSk7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKKwogCQkvKiByZW1vdmUgdGhlIHdlYmNhbSdzIGhlYWRlcjoKIAkJICogZmYgZDggZmYgZmUgMDAgMGUgMDAgMDAgc3Mgc3MgMDAgMDEgd3cgd3cgaGggaGggcHAgcHAKIAkJICoJLSAnc3Mgc3MnIGlzIHRoZSBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgKEJFKQpAQCAtNzUwMyw2ICs3NTM5LDM0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCiAJLmN0cmxzID0gc2RfY3RybHMsCkBAIC03NTEzLDYgKzc1NzcsOCBAQAogCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CkBAIC03NTYzLDExICs3NjI5LDkgQEAKIAl7VVNCX0RFVklDRSgweDA1NWYsIDB4ZDAwNCl9LAogCXtVU0JfREVWSUNFKDB4MDY5OCwgMHgyMDAzKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMDEpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfUEFTMTA2fSwKLQl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMwMil9LAorCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzAyKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBUzEwNn0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwMWIpfSwKLSNpZiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1pDMDMwMV9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYil9LAotI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwNWIpLCAuZHJpdmVyX2luZm8gPSBTRU5TT1JfVEFTNTEzMENfVkYwMjUwfSwKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MzA3Yil9LAogCXtVU0JfREVWSUNFKDB4MTBmZCwgMHgwMTI4KX0sCkBAIC03NjAwLDggKzc2NjQsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjQ3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL0tjb25maWcKQEAgLTAsMCArMSwxMCBAQAorCitjb25maWcgVklERU9fSERQVlIKKwl0cmlzdGF0ZSAiSGF1cHBhdWdlIEhEIFBWUiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fREVWCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgSGF1cHBhdWdlJ3MgSEQgUFZSIFVTQiBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhkcHZyCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjMwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAoraGRwdnItb2Jqcwk6PSBoZHB2ci1jb250cm9sLm8gaGRwdnItY29yZS5vIGhkcHZyLXZpZGVvLm8KKworaGRwdnItJChDT05GSUdfSTJDKSArPSBoZHB2ci1pMmMubworCitvYmotJChDT05GSUdfVklERU9fSERQVlIpICs9IGhkcHZyLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS92aWRlbworCitFWFRSQV9DRkxBR1MgKz0gJChleHRyYS1jZmxhZ3MteSkgJChleHRyYS1jZmxhZ3MtbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3OTE3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogSGF1cHBhdWdlIEhEIFBWUiBVU0IgZHJpdmVyIC0gdmlkZW8gNCBsaW51eCAyIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsIHU4IHZhbGJ1ZikKK3sKKwlpbnQgcmV0OworCWNoYXIgcmVxdWVzdF90eXBlID0gMHgzOCwgc25kX3JlcXVlc3QgPSAweDAxOworCisJbXNsZWVwKDEwKTsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJZGV2LT51c2JjX2J1ZlswXSA9IHZhbGJ1ZjsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICBzbmRfcmVxdWVzdCwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIHZhbHVlLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCAxLCAxMDAwMCk7CisKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJjb25maWcgY2FsbCByZXF1ZXN0IGZvciB2YWx1ZSAweCV4IHJldHVybmVkICVkXG4iLCB2YWx1ZSwKKwkJIHJldCk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvICpnZXRfdmlkZW9faW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKnZpZGluZiA9IE5VTEw7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1ZlsxNV07CisjZW5kaWYKKwlpbnQgcmV0OworCisJdmlkaW5mID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZpZGluZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ODEsIDB4ODAgfCAweDM4LAorCQkJICAgICAgMHgxNDAwLCAweDAwMDMsCisJCQkgICAgICBkZXYtPnVzYmNfYnVmLCA1LAorCQkJICAgICAgMTAwMCk7CisJaWYgKHJldCA9PSA1KSB7CisJCXZpZGluZi0+d2lkdGgJPSBkZXYtPnVzYmNfYnVmWzFdIDw8IDggfCBkZXYtPnVzYmNfYnVmWzBdOworCQl2aWRpbmYtPmhlaWdodAk9IGRldi0+dXNiY19idWZbM10gPDwgOCB8IGRldi0+dXNiY19idWZbMl07CisJCXZpZGluZi0+ZnBzCT0gZGV2LT51c2JjX2J1Zls0XTsKKwl9CisKKyNpZmRlZiBIRFBWUl9ERUJVRworCWlmIChoZHB2cl9kZWJ1ZyAmIE1TR19JTkZPKSB7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihkZXYtPnVzYmNfYnVmLCA1LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiZ2V0IHZpZGVvIGluZm8gcmV0dXJuZWQ6ICVkLCAlc1xuIiwgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWlmICghdmlkaW5mLT53aWR0aCB8fCAhdmlkaW5mLT5oZWlnaHQgfHwgIXZpZGluZi0+ZnBzKSB7CisJCWtmcmVlKHZpZGluZik7CisJCXZpZGluZiA9IE5VTEw7CisJfQorZXJyOgorCXJldHVybiB2aWRpbmY7Cit9CisKK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgSERQVlJfREVCVUcKKwljaGFyIHByaW50X2J1Zls5XTsKKyNlbmRpZgorCWludCByZXQsIGxpbmVzOworCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweDgxLCAweDgwIHwgMHgzOCwKKwkJCSAgICAgIDB4MTgwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgMywKKwkJCSAgICAgIDEwMDApOworCisjaWZkZWYgSERQVlJfREVCVUcKKwlpZiAoaGRwdnJfZGVidWcgJiBNU0dfSU5GTykgeworCQloZXhfZHVtcF90b19idWZmZXIoZGV2LT51c2JjX2J1ZiwgMywgMTYsIDEsIHByaW50X2J1ZiwKKwkJCQkgICBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgImdldCBpbnB1dCBsaW5lcyBpbmZvIHJldHVybmVkOiAlZCwgJXNcbiIsIHJldCwKKwkJCSBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWxpbmVzID0gZGV2LT51c2JjX2J1ZlsxXSA8PCA4IHwgZGV2LT51c2JjX2J1ZlswXTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJcmV0dXJuIGxpbmVzOworfQorCisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJbWVtc2V0KGRldi0+dXNiY19idWYsIDAsIDQpOworCWRldi0+dXNiY19idWZbMF0gPSBkZXYtPm9wdGlvbnMuYml0cmF0ZTsKKwlkZXYtPnVzYmNfYnVmWzJdID0gZGV2LT5vcHRpb25zLnBlYWtfYml0cmF0ZTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQklUUkFURV9WQUxVRSwKKwkJCSAgICAgIENUUkxfREVGQVVMVF9JTkRFWCwgZGV2LT51c2JjX2J1ZiwgNCwgMTAwMCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9hdWRpbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHU4IGlucHV0LAorCQkgICAgZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgY29kZWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCQltZW1zZXQoZGV2LT51c2JjX2J1ZiwgMCwgMik7CisJCWRldi0+dXNiY19idWZbMF0gPSBpbnB1dDsKKwkJaWYgKGNvZGVjID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMpCisJCQlkZXYtPnVzYmNfYnVmWzFdID0gMDsKKwkJZWxzZSBpZiAoY29kZWMgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykKKwkJCWRldi0+dXNiY19idWZbMV0gPSAxOworCQllbHNlIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiaW52YWxpZCBhdWRpbyBjb2RlYyAlZFxuIiwKKwkJCQkgY29kZWMpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJCSAgICAgIDB4MDEsIDB4MzgsIENUUkxfQVVESU9fSU5QVVRfVkFMVUUsCisJCQkJICAgICAgQ1RSTF9ERUZBVUxUX0lOREVYLCBkZXYtPnVzYmNfYnVmLCAyLAorCQkJCSAgICAgIDEwMDApOworCQltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJCWlmIChyZXQgPT0gMikKKwkJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9BVURJT19JTlBVVF9WQUxVRSwKKwkJCQkJZGV2LT5vcHRpb25zLmF1ZGlvX2lucHV0KzEpOworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIGRldi0+b3B0aW9ucy52aWRlb19zdGQpOworCisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX0lOUFVUX1ZBTFVFLAorCQkJIGRldi0+b3B0aW9ucy52aWRlb19pbnB1dCsxKTsKKworICAgICAgIGhkcHZyX3NldF9hdWRpbyhkZXYsIGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCsxLAorCQkgICAgICAgZGV2LT5vcHRpb25zLmF1ZGlvX2NvZGVjKTsKKworICAgICAgIGhkcHZyX3NldF9iaXRyYXRlKGRldik7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRSwKKwkJCSBkZXYtPm9wdGlvbnMuYml0cmF0ZV9tb2RlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfR09QX01PREVfVkFMVUUsIGRldi0+b3B0aW9ucy5nb3BfbW9kZSk7CisKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgZGV2LT5vcHRpb25zLmJyaWdodG5lc3MpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgICBkZXYtPm9wdGlvbnMuY29udHJhc3QpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsICAgICAgICBkZXYtPm9wdGlvbnMuaHVlKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgZGV2LT5vcHRpb25zLnNhdHVyYXRpb24pOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TSEFSUE5FU1MsICBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzKTsKKworICAgICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhiZDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKQEAgLTAsMCArMSw0NjYgQEAKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgSmFubmUgR3J1bmF1IChqQGphbm5hdS5uZXQpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKb2huIFBvZXQKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCitzdGF0aWMgaW50IHZpZGVvX25yW0hEUFZSX01BWF0gPSB7WzAgLi4uIChIRFBWUl9NQVggLSAxKV0gPSBVTlNFVH07Cittb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gZGV2aWNlIG51bWJlciAoLTE9QXV0bykiKTsKKworLyogaG9sZHMgdGhlIG51bWJlciBvZiBjdXJyZW50bHkgcmVnaXN0ZXJlZCBkZXZpY2VzICovCitzdGF0aWMgYXRvbWljX3QgZGV2X25yID0gQVRPTUlDX0lOSVQoLTEpOworCitpbnQgaGRwdnJfZGVidWc7Cittb2R1bGVfcGFyYW0oaGRwdnJfZGVidWcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaGRwdnJfZGVidWcsICJlbmFibGUgZGVidWdnaW5nIG91dHB1dCIpOworCit1aW50IGRlZmF1bHRfdmlkZW9faW5wdXQgPSBIRFBWUl9WSURFT19JTlBVVFM7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF92aWRlb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF92aWRlb19pbnB1dCwgImRlZmF1bHQgdmlkZW8gaW5wdXQ6IDA9Q29tcG9uZW50IC8gIgorCQkgIjE9Uy1WaWRlbyAvIDI9Q29tcG9zaXRlIik7CisKK3VpbnQgZGVmYXVsdF9hdWRpb19pbnB1dCA9IEhEUFZSX0FVRElPX0lOUFVUUzsKK21vZHVsZV9wYXJhbShkZWZhdWx0X2F1ZGlvX2lucHV0LCB1aW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWZhdWx0X2F1ZGlvX2lucHV0LCAiZGVmYXVsdCBhdWRpbyBpbnB1dDogMD1SQ0EgYmFjayAvICIKKwkJICIxPVJDQSBmcm9udCAvIDI9Uy9QRElGIik7CisKK3N0YXRpYyBpbnQgYm9vc3RfYXVkaW87Cittb2R1bGVfcGFyYW0oYm9vc3RfYXVkaW8sIGJvb2wsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGJvb3N0X2F1ZGlvLCAiYm9vc3QgdGhlIGF1ZGlvIHNpZ25hbCIpOworCisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoZHB2cl90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQxKSB9LAorCXsgVVNCX0RFVklDRShIRF9QVlJfVkVORE9SX0lELCBIRF9QVlJfUFJPRFVDVF9JRDIpIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBoZHB2cl90YWJsZSk7CisKKwordm9pZCBoZHB2cl9kZWxldGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCWhkcHZyX2ZyZWVfYnVmZmVycyhkZXYpOworCisJaWYgKGRldi0+dmlkZW9fZGV2KQorCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZpZGVvX2Rldik7CisKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworfQorCitzdGF0aWMgdm9pZCBjaGFsbGVuZ2UodTggKmJ5dGVzKQoreworCXU2NCAqaTY0UCwgdG1wNjQ7CisJdWludCBpLCBpZHg7CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IDMyOyArK2lkeCkgeworCisJCWlmIChpZHggJiAweDMpCisJCQlieXRlc1soaWR4ID4+IDMpICsgM10gPSBieXRlc1soaWR4ID4+IDIpICYgMHgzXTsKKworCQlzd2l0Y2ggKGlkeCAmIDB4MykgeworCQljYXNlIDB4MzoKKwkJCWJ5dGVzWzJdICs9IGJ5dGVzWzNdICogNCArIGJ5dGVzWzRdICsgYnl0ZXNbNV07CisJCQlieXRlc1s0XSArPSBieXRlc1soaWR4ICYgMHgxKSAqIDJdICogOSArIDk7CisJCQlicmVhazsKKwkJY2FzZSAweDE6CisJCQlieXRlc1swXSAqPSA4OworCQkJYnl0ZXNbMF0gKz0gNyppZHggKyA0OworCQkJYnl0ZXNbNl0gKz0gYnl0ZXNbM10gKiAzOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOgorCQkJYnl0ZXNbMyAtIChpZHggPj4gMyldID0gYnl0ZXNbaWR4ID4+IDJdOworCQkJYnl0ZXNbNV0gKz0gYnl0ZXNbNl0gKiAzOworCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQlieXRlc1szXSAqPSBieXRlc1szXSArIDE7CisJCQlicmVhazsKKwkJY2FzZSAweDI6CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJCWJ5dGVzWzFdICo9IGJ5dGVzWzZdICsgMTsKKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCQlpNjRQID0gKHU2NCAqKWJ5dGVzOworCQkJCXRtcDY0ID0gbGU2NF90b19jcHVwKGk2NFApOworCQkJCXRtcDY0IDw8PSBieXRlc1s3XSAmIDB4MGY7CisJCQkJKmk2NFAgKz0gY3B1X3RvX2xlNjQodG1wNjQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qIHRyeSB0byBpbml0IHRoZSBkZXZpY2UgbGlrZSB0aGUgd2luZG93cyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2F1dGhvcml6YXRpb24oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCisJaW50IHJldCwgcmV0dmFsID0gLUVOT01FTTsKKwljaGFyIHJlcXVlc3RfdHlwZSA9IDB4MzgsIHJjdl9yZXF1ZXN0ID0gMHg4MTsKKwljaGFyICpyZXNwb25zZTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCXNpemVfdCBidWZfc2l6ZSA9IDQ2OworCWNoYXIgKnByaW50X2J1ZiA9IGt6YWxsb2MoNSpidWZfc2l6ZSsxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaW50X2J1ZikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKyNlbmRpZgorCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICByY3ZfcmVxdWVzdCwgMHg4MCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDQwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgNDYsCisJCQkgICAgICAxMDAwMCk7CisJaWYgKHJldCAhPSA0NikgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCSAidW5leHBlY3RlZCBhbnN3ZXIgb2Ygc3RhdHVzIHJlcXVlc3QsIGxlbiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisjaWZkZWYgSERQVlJfREVCVUcKKwllbHNlIHsKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKGRldi0+dXNiY19idWYsIDQ2LCAxNiwgMSwgcHJpbnRfYnVmLAorCQkJCSAgIHNpemVvZihwcmludF9idWYpLCAwKTsKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiU3RhdHVzIHJlcXVlc3QgcmV0dXJuZWQsIGxlbiAlZDogJXNcbiIsCisJCQkgcmV0LCBwcmludF9idWYpOworCX0KKyNlbmRpZgorCWlmIChkZXYtPnVzYmNfYnVmWzFdID09IEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04pIHsKKwkJZGV2LT5mbGFncyAmPSB+SERQVlJfRkxBR19BQzNfQ0FQOworCX0gZWxzZSBpZiAoZGV2LT51c2JjX2J1ZlsxXSA9PSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgaWYgKGRldi0+dXNiY19idWZbMV0gPiBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMykgeworCQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJ1bnRlc3RlZCBmaXJtd2FyZSB2ZXJzaW9uIDB4JXgsICIKKwkJCSAgInRoZSBkcml2ZXIgbWlnaHQgbm90IHdvcmtcbiIsIGRldi0+dXNiY19idWZbMV0pOworCQlkZXYtPmZsYWdzIHw9IEhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInVua25vd24gZmlybXdhcmUgdmVyc2lvbiAweCV4XG4iLAorCQkJZGV2LT51c2JjX2J1ZlsxXSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmVzcG9uc2UgPSBkZXYtPnVzYmNfYnVmKzM4OworI2lmZGVmIEhEUFZSX0RFQlVHCisJaGV4X2R1bXBfdG9fYnVmZmVyKHJlc3BvbnNlLCA4LCAxNiwgMSwgcHJpbnRfYnVmLCBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwgImNoYWxsZW5nZTogJXNcbiIsCisJCSBwcmludF9idWYpOworI2VuZGlmCisJY2hhbGxlbmdlKHJlc3BvbnNlKTsKKyNpZmRlZiBIRFBWUl9ERUJVRworCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1Ziwgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsICIgcmVzcG9uc2U6ICVzXG4iLAorCQkgcHJpbnRfYnVmKTsKKyNlbmRpZgorCisJbXNsZWVwKDEwMCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHhkMSwgMHgwMCB8IHJlcXVlc3RfdHlwZSwKKwkJCSAgICAgIDB4MDAwMCwgMHgwMDAwLAorCQkJICAgICAgcmVzcG9uc2UsIDgsCisJCQkgICAgICAxMDAwMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJtYWdpYyByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCXJldHZhbCA9IHJldCAhPSA4OworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBoZHB2cl9kZXZpY2VfaW5pdChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwl1OCAqYnVmOworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2aWNlX2F1dGhvcml6YXRpb24oZGV2KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwkvKiBkZWZhdWx0IG9wdGlvbnMgZm9yIGluaXQgKi8KKwloZHB2cl9zZXRfb3B0aW9ucyhkZXYpOworCisJLyogc2V0IGZpbHRlciBvcHRpb25zICovCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlidWYgPSBkZXYtPnVzYmNfYnVmOworCWJ1ZlswXSA9IDB4MDM7IGJ1ZlsxXSA9IDB4MDM7IGJ1ZlsyXSA9IDB4MDA7IGJ1ZlszXSA9IDB4MDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHgwMSwgMHgzOCwKKwkJCSAgICAgIENUUkxfTE9XX1BBU1NfRklMVEVSX1ZBTFVFLCBDVFJMX0RFRkFVTFRfSU5ERVgsCisJCQkgICAgICBidWYsIDQsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwl2aWRpbmYgPSBnZXRfdmlkZW9faW5mbyhkZXYpOworCWlmICghdmlkaW5mKQorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJIm5vIHZhbGlkIHZpZGVvIHNpZ25hbCBvciBkZXZpY2UgaW5pdCBmYWlsZWRcbiIpOworCWVsc2UKKwkJa2ZyZWUodmlkaW5mKTsKKworCS8qIGVuYWJsZSBmYW4gYW5kIGJsaW5nIGxlZHMgKi8KKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCWJ1ZlswXSA9IDB4MTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweGQ0LCAweDM4LCAwLCAwLCBidWYsIDEsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCS8qIGJvb3N0IGFuYWxvZyBhdWRpbyAqLworCWJ1ZlswXSA9IGJvb3N0X2F1ZGlvOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ZDUsIDB4MzgsIDAsIDAsIGJ1ZiwgMSwKKwkJCSAgICAgIDEwMDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiY29udHJvbCByZXF1ZXN0IHJldHVybmVkICVkXG4iLCByZXQpOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX0lETEU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRwdnJfb3B0aW9ucyBoZHB2cl9kZWZhdWx0X29wdGlvbnMgPSB7CisJLnZpZGVvX3N0ZAk9IEhEUFZSXzYwSFosCisJLnZpZGVvX2lucHV0CT0gSERQVlJfQ09NUE9ORU5ULAorCS5hdWRpb19pbnB1dAk9IEhEUFZSX1JDQV9CQUNLLAorCS5iaXRyYXRlCT0gNjUsIC8qIDYgbWJwcyAqLworCS5wZWFrX2JpdHJhdGUJPSA5MCwgLyogOSBtYnBzICovCisJLmJpdHJhdGVfbW9kZQk9IEhEUFZSX0NPTlNUQU5ULAorCS5nb3BfbW9kZQk9IEhEUFZSX1NJTVBMRV9JRFJfR09QLAorCS5hdWRpb19jb2RlYwk9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJLmJyaWdodG5lc3MJPSAweDg2LAorCS5jb250cmFzdAk9IDB4ODAsCisJLmh1ZQkJPSAweDgwLAorCS5zYXR1cmF0aW9uCT0gMHg4MCwKKwkuc2hhcnBuZXNzCT0gMHg4MCwKK307CisKK3N0YXRpYyBpbnQgaGRwdnJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQllcnIoIk91dCBvZiBtZW1vcnkiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWdpc3RlciB2NGwyX2RldmljZSBlYXJseSBzbyBpdCBjYW4gYmUgdXNlZCBmb3IgcHJpbnRrcyAqLworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmaW50ZXJmYWNlLT5kZXYsICZkZXYtPnY0bDJfZGV2KSkgeworCQllcnIoInY0bDJfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZCIpOworCQlnb3RvIGVycm9yOworCX0KKworCW11dGV4X2luaXQoJmRldi0+aW9fbXV0ZXgpOworCW11dGV4X2luaXQoJmRldi0+aTJjX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnVzYmNfbXV0ZXgpOworCWRldi0+dXNiY19idWYgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+dXNiY19idWYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfYnVmZmVyKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndhaXRfZGF0YSk7CisKKwlkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJoZHB2cl9idWZmZXIiKTsKKwlpZiAoIWRldi0+d29ya3F1ZXVlKQorCQlnb3RvIGVycm9yOworCisJLyogaW5pdCB2aWRlbyB0cmFuc2ZlciBxdWV1ZXMgKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlkZXYtPm9wdGlvbnMgPSBoZHB2cl9kZWZhdWx0X29wdGlvbnM7CisKKwlpZiAoZGVmYXVsdF92aWRlb19pbnB1dCA8IEhEUFZSX1ZJREVPX0lOUFVUUykKKwkJZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0ID0gZGVmYXVsdF92aWRlb19pbnB1dDsKKworCWlmIChkZWZhdWx0X2F1ZGlvX2lucHV0IDwgSERQVlJfQVVESU9fSU5QVVRTKQorCQlkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQgPSBkZWZhdWx0X2F1ZGlvX2lucHV0OworCisJZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzICovCisJaWZhY2VfZGVzYyA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKKwkJCS8qIFVTQiBpbnRlcmZhY2UgZGVzY3JpcHRpb24gaXMgYnVnZ3ksIHJlcG9ydGVkIG1heAorCQkJICogcGFja2V0IHNpemUgaXMgNTEyIGJ5dGVzLCB3aW5kb3dzIGRyaXZlciB1c2VzIDgxOTIgKi8KKwkJCWJ1ZmZlcl9zaXplID0gODE5MjsKKwkJCWRldi0+YnVsa19pbl9zaXplID0gYnVmZmVyX3NpemU7CisJCQlkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CisJCX0KKworCX0KKwlpZiAoIWRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBpbml0IHRoZSBkZXZpY2UgKi8KKwlpZiAoaGRwdnJfZGV2aWNlX2luaXQoZGV2KSkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImRldmljZSBpbml0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKGhkcHZyX2FsbG9jX2J1ZmZlcnMoZGV2LCBOVU1fQlVGRkVSUykpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkgImFsbG9jYXRpbmcgdHJhbnNmZXIgYnVmZmVycyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJaWYgKGhkcHZyX3JlZ2lzdGVyX3ZpZGVvZGV2KGRldiwgJmludGVyZmFjZS0+ZGV2LAorCQkJCSAgICB2aWRlb19uclthdG9taWNfaW5jX3JldHVybigmZGV2X25yKV0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgdmlkZW9kZXYgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKyNpZmRlZiBDT05GSUdfSTJDCisJLyogdW50aWwgaTJjIGlzIHdvcmtpbmcgcHJvcGVybHkgKi8KKwlyZXR2YWwgPSAwOyAvKiBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihkZXYpOyAqLworCWlmIChyZXR2YWwgPCAwKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIGFkYXB0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisjZW5kaWYgLyogQ09ORklHX0kyQyAqLworCisJLyogc2F2ZSBvdXIgZGF0YSBwb2ludGVyIGluIHRoaXMgaW50ZXJmYWNlIGRldmljZSAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJLyogbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBub2RlIHRoaXMgZGV2aWNlIGlzIG5vdyBhdHRhY2hlZCB0byAqLworCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgImRldmljZSBub3cgYXR0YWNoZWQgdG8gL2Rldi92aWRlbyVkXG4iLAorCQkgIGRldi0+dmlkZW9fZGV2LT5taW5vcik7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChkZXYpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJLyogdGhpcyBmcmVlcyBhbGxvY2F0ZWQgbWVtb3J5ICovCisJCWhkcHZyX2RlbGV0ZShkZXYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBoZHB2cl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OworCWludCBtaW5vcjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwltaW5vciA9IGRldi0+dmlkZW9fZGV2LT5taW5vcjsKKworCS8qIHByZXZlbnQgbW9yZSBJL08gZnJvbSBzdGFydGluZyBhbmQgc3RvcCBhbnkgb25nb2luZyAqLworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0RJU0NPTk5FQ1RFRDsKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZkZXYtPnY0bDJfZGV2KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2Rldik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfZGF0YSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCW1zbGVlcCgxMDApOworCWZsdXNoX3dvcmtxdWV1ZShkZXYtPndvcmtxdWV1ZSk7CisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrcXVldWUpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkvKiBkZXJlZ2lzdGVyIEkyQyBhZGFwdGVyICovCisjaWZkZWYgQ09ORklHX0kyQworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKwlpZiAoZGV2LT5pMmNfYWRhcHRlcikKKwkJaTJjX2RlbF9hZGFwdGVyKGRldi0+aTJjX2FkYXB0ZXIpOworCWtmcmVlKGRldi0+aTJjX2FkYXB0ZXIpOworCWRldi0+aTJjX2FkYXB0ZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KKworCWF0b21pY19kZWMoJmRldl9ucik7CisKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2UgL2Rldi92aWRlbyVkIGRpc2Nvbm5lY3RlZFxuIiwgbWlub3IpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJa2ZyZWUoZGV2LT51c2JjX2J1Zik7CisJa2ZyZWUoZGV2KTsKK30KKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaGRwdnJfdXNiX2RyaXZlciA9IHsKKwkubmFtZSA9CQkiaGRwdnIiLAorCS5wcm9iZSA9CWhkcHZyX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JaGRwdnJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQloZHB2cl90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhkcHZyX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7CisJaWYgKHJlc3VsdCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhkcHZyX2V4aXQodm9pZCkKK3sKKwkvKiBkZXJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwl1c2JfZGVyZWdpc3RlcigmaGRwdnJfdXNiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGhkcHZyX2luaXQpOworbW9kdWxlX2V4aXQoaGRwdnJfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkphbm5lIEdydW5hdSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXVwcGF1Z2UgSEQgUFZSIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNWQxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKQEAgLTAsMCArMSwxNDUgQEAKKworLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJoZHB2ci5oIgorCisjZGVmaW5lIENUUkxfUkVBRF9SRVFVRVNUCTB4YjgKKyNkZWZpbmUgQ1RSTF9XUklURV9SRVFVRVNUCTB4MzgKKworI2RlZmluZSBSRVFUWVBFX0kyQ19SRUFECTB4YjEKKyNkZWZpbmUgUkVRVFlQRV9JMkNfV1JJVEUJMHhiMAorI2RlZmluZSBSRVFUWVBFX0kyQ19XUklURV9TVEFUVAkweGQwCisKK3N0YXRpYyBpbnQgaGRwdnJfaTJjX3JlYWQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJaW50IHJldDsKKwljaGFyICpidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfUkVBRCwgQ1RSTF9SRUFEX1JFUVVFU1QsCisJCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisKKwlpZiAocmV0ID09IGxlbikgeworCQltZW1jcHkoZGF0YSwgYnVmLCBsZW4pOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAocmV0ID49IDApCisJCXJldCA9IC1FSU87CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZHB2cl9pMmNfd3JpdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIGFkZHIsCisJCQkgICBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJY2hhciAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShidWYsIGRhdGEsIGxlbik7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEUsIENUUkxfV1JJVEVfUkVRVUVTVCwKKwkJCSAgICAgIDB4MTAwfGFkZHIsIDAsIGJ1ZiwgbGVuLCAxMDAwKTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQsIENUUkxfUkVBRF9SRVFVRVNULAorCQkJICAgICAgMCwgMCwgYnVmLCAyLCAxMDAwKTsKKworCWlmIChyZXQgPT0gMikKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChyZXQgPj0gMCkKKwkJcmV0ID0gLUVJTzsKKworZXJyb3I6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhkcHZyX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkJICBpbnQgbnVtKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXB0ZXIpOworCWludCByZXR2YWwgPSAwLCBpLCBhZGRyOworCisJaWYgKG51bSA8PSAwKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW0gJiYgIXJldHZhbDsgaSsrKSB7CisJCWFkZHIgPSBtc2dzW2ldLmFkZHIgPDwgMTsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3JlYWQoZGV2LCBhZGRyLCBtc2dzW2ldLmJ1ZiwKKwkJCQkJCW1zZ3NbaV0ubGVuKTsKKwkJZWxzZQorCQkJcmV0dmFsID0gaGRwdnJfaTJjX3dyaXRlKGRldiwgYWRkciwgbXNnc1tpXS5idWYsCisJCQkJCQkgbXNnc1tpXS5sZW4pOworCX0KKworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IG51bTsKK30KKworc3RhdGljIHUzMiBoZHB2cl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGhkcHZyX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBoZHB2cl90cmFuc2ZlciwKKwkuZnVuY3Rpb25hbGl0eSA9IGhkcHZyX2Z1bmN0aW9uYWxpdHksCit9OworCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlpMmNfYWRhcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmIChpMmNfYWRhcCA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJc3RybGNweShpMmNfYWRhcC0+bmFtZSwgIkhhdXBwYXVnZSBIRCBQVlIgSTJDIiwKKwkJc2l6ZW9mKGkyY19hZGFwLT5uYW1lKSk7CisJaTJjX2FkYXAtPmFsZ28gID0gJmhkcHZyX2FsZ287CisJaTJjX2FkYXAtPmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKKwlpMmNfYWRhcC0+aWQgICAgPSBJMkNfSFdfQl9IRFBWUjsKKwlpMmNfYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKKwlpMmNfYWRhcC0+ZGV2LnBhcmVudCA9ICZkZXYtPnVkZXYtPmRldjsKKworCWkyY19zZXRfYWRhcGRhdGEoaTJjX2FkYXAsIGRldik7CisKKwlyZXR2YWwgPSBpMmNfYWRkX2FkYXB0ZXIoaTJjX2FkYXApOworCisJaWYgKCFyZXR2YWwpCisJCWRldi0+aTJjX2FkYXB0ZXIgPSBpMmNfYWRhcDsKKwllbHNlCisJCWtmcmVlKGkyY19hZGFwKTsKKworZXJyb3I6CisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZmZmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci12aWRlby5jCkBAIC0wLDAgKzEsMTI0OCBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlciAtIHZpZGVvIDQgbGludXggMiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgImhkcHZyLmgiCisKKyNkZWZpbmUgQlVMS19VUkJfVElNRU9VVCAxMjUwIC8qIDEuMjUgc2Vjb25kcyAqLworCisjZGVmaW5lIHByaW50X2J1ZmZlcl9zdGF0dXMoKSB7IFwKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAlcCisJCQkgIiVzOiVkIGJ1ZmZlciBzdGF0OiAlZCBmcmVlLCAlZCBwcm9jXG4iLAlcCisJCQkgX19mdW5jX18sIF9fTElORV9fLAkJCQlcCisJCQkgbGlzdF9zaXplKCZkZXYtPmZyZWVfYnVmZl9saXN0KSwJCVwKKwkJCSBsaXN0X3NpemUoJmRldi0+cmVjX2J1ZmZfbGlzdCkpOyB9CisKK3N0cnVjdCBoZHB2cl9maCB7CisJc3RydWN0IGhkcHZyX2RldmljZQkqZGV2OworfTsKKworc3RhdGljIHVpbnQgbGlzdF9zaXplKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXVpbnQgY291bnQgPSAwOworCisJbGlzdF9mb3JfZWFjaCh0bXAsIGxpc3QpIHsKKwkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiB1cmIgY2FsbGJhY2sgKi8KK3N0YXRpYyB2b2lkIGhkcHZyX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmID0gKHN0cnVjdCBoZHB2cl9idWZmZXIgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gYnVmLT5kZXY7CisKKwkvKiBtYXJraW5nIGJ1ZmZlciBhcyByZWNlaXZlZCBhbmQgd2FrZSB3YWl0aW5nICovCisJYnVmLT5zdGF0dXMgPSBCVUZTVEFUX1JFQURZOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2RhdGEpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmZlciBiaXRzICovCisKKy8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLworaW50IGhkcHZyX2NhbmNlbF9xdWV1ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYsICZkZXYtPnJlY19idWZmX2xpc3QsIGJ1ZmZfbGlzdCkgeworCQl1c2Jfa2lsbF91cmIoYnVmLT51cmIpOworCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfQVZBSUxBQkxFOworCX0KKworCWxpc3Rfc3BsaWNlX2luaXQoJmRldi0+cmVjX2J1ZmZfbGlzdCwgZGV2LT5mcmVlX2J1ZmZfbGlzdC5wcmV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkcHZyX2ZyZWVfcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCisJZm9yIChwID0gcS0+bmV4dDsgcCAhPSBxOykgeworCQlidWYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoZHB2cl9idWZmZXIsIGJ1ZmZfbGlzdCk7CisKKwkJdXJiID0gYnVmLT51cmI7CisJCXVzYl9idWZmZXJfZnJlZSh1cmItPmRldiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQl0bXAgPSBwLT5uZXh0OworCQlsaXN0X2RlbChwKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfZnJlZV9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCWhkcHZyX2ZyZWVfcXVldWUoJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitpbnQgaGRwdnJfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgY291bnQpCit7CisJdWludCBpOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXU4ICptZW07CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiYWxsb2NhdGluZyAldSBidWZmZXJzXG4iLCBjb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCisJCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHB2cl9idWZmZXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFidWYpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT5kZXYgPSBkZXY7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY2Fubm90IGFsbG9jYXRlIHVyYlxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnVmLT51cmIgPSB1cmI7CisKKwkJbWVtID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMLAorCQkJCSAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIW1lbSkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkJICJjYW5ub3QgYWxsb2NhdGUgdXNiIHRyYW5zZmVyIGJ1ZmZlclxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQl1c2JfZmlsbF9idWxrX3VyYihidWYtPnVyYiwgZGV2LT51ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJCSAgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkJICBtZW0sIGRldi0+YnVsa19pbl9zaXplLAorCQkJCSAgaGRwdnJfcmVhZF9idWxrX2NhbGxiYWNrLCBidWYpOworCisJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5mcmVlX2J1ZmZfbGlzdCk7CisJfQorCXJldHVybiAwOworZXhpdDoKKwloZHB2cl9mcmVlX2J1ZmZlcnMoZGV2KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3N1Ym1pdF9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWY7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXQgPSAwLCBlcnJfY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwl3aGlsZSAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORyAmJgorCSAgICAgICAhbGlzdF9lbXB0eSgmZGV2LT5mcmVlX2J1ZmZfbGlzdCkpIHsKKworCQlidWYgPSBsaXN0X2VudHJ5KGRldi0+ZnJlZV9idWZmX2xpc3QubmV4dCwgc3RydWN0IGhkcHZyX2J1ZmZlciwKKwkJCQkgYnVmZl9saXN0KTsKKwkJaWYgKGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfQVZBSUxBQkxFKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgImJ1ZmZlciBub3QgbWFya2VkIGFzIGF2YWlsYmFsZVxuIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQl1cmIgPSBidWYtPnVyYjsKKwkJdXJiLT5zdGF0dXMgPSAwOworCQl1cmItPmFjdHVhbF9sZW5ndGggPSAwOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmV0KSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIGluICVzIHJldHVybmVkICVkXG4iLAorCQkJCSBfX2Z1bmNfXywgcmV0KTsKKwkJCWlmICgrK2Vycl9jb3VudCA+IDIpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfSU5QUk9HUkVTUzsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+YnVmZl9saXN0LCAmZGV2LT5yZWNfYnVmZl9saXN0KTsKKwl9CitlcnI6CisJcHJpbnRfYnVmZmVyX3N0YXR1cygpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBoZHB2cl9idWZmZXIgKmhkcHZyX2dldF9uZXh0X2J1ZmZlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5yZWNfYnVmZl9saXN0KSkgeworCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlidWYgPSBsaXN0X2VudHJ5KGRldi0+cmVjX2J1ZmZfbGlzdC5uZXh0LCBzdHJ1Y3QgaGRwdnJfYnVmZmVyLAorCQkJIGJ1ZmZfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGhkcHZyX3RyYW5zbWl0X2J1ZmZlcnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaGRwdnJfZGV2aWNlLAorCQkJCQkJd29ya2VyKTsKKworCXdoaWxlIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfU1RSRUFNSU5HKSB7CisKKwkJaWYgKGhkcHZyX3N1Ym1pdF9idWZmZXJzKGRldikpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiY291bGRuJ3Qgc3VibWl0IGJ1ZmZlcnNcbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d2FpdF9idWZmZXIsCisJCQkJIWxpc3RfZW1wdHkoJmRldi0+ZnJlZV9idWZmX2xpc3QpIHx8CisJCQkJCSAgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykpCisJCQlnb3RvIGVycm9yOworCX0KKworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidHJhbnNtaXQgd29ya2VyIGV4aXRlZFxuIik7CisJcmV0dXJuOworZXJyb3I6CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJ0cmFuc21pdCBidWZmZXJzIGVycm9yZWRcbiIpOworCWRldi0+c3RhdHVzID0gU1RBVFVTX0VSUk9SOworfQorCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmY7CisKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJdmlkaW5mID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKworCWlmICh2aWRpbmYpIHsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJ2aWRlbyBzaWduYWw6ICVkeCVkQCVkaHpcbiIsIHZpZGluZi0+d2lkdGgsCisJCQkgdmlkaW5mLT5oZWlnaHQsIHZpZGluZi0+ZnBzKTsKKwkJa2ZyZWUodmlkaW5mKTsKKworCQkvKiBzdGFydCBzdHJlYW1pbmcgMiByZXF1ZXN0ICovCisJCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkJICAgICAgMHhiOCwgMHgzOCwgMHgxLCAwLCBOVUxMLCAwLCA4MDAwKTsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJlbmNvZGVyIHN0YXJ0IGNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKworCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU1RBUlRfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKworCQlJTklUX1dPUksoJmRldi0+d29ya2VyLCBoZHB2cl90cmFuc21pdF9idWZmZXJzKTsKKwkJcXVldWVfd29yayhkZXYtPndvcmtxdWV1ZSwgJmRldi0+d29ya2VyKTsKKworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgInN0cmVhbWluZyBzdGFydGVkXG4iKTsKKwkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfU1RSRUFNSU5HOworCisJCXJldHVybiAwOworCX0KKwltc2xlZXAoMjUwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgIm5vIHZpZGVvIHNpZ25hbCBhdCBpbnB1dCAlZFxuIiwgZGV2LT5vcHRpb25zLnZpZGVvX2lucHV0KTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgaGRwdnJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXVpbnQgYWN0dWFsX2xlbmd0aCwgYyA9IDA7CisJdTggKmJ1ZjsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX1NUUkVBTUlORykKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlidWYgPSBrbWFsbG9jKGRldi0+YnVsa19pbl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IGJ1ZmZlciAiCisJCQkgImZvciBlbXB0eWluZyB0aGUgaW50ZXJuYWwgZGV2aWNlIGJ1ZmZlci4gIgorCQkJICJOZXh0IGNhcHR1cmUgc3RhcnQgd2lsbCBiZSBzbG93XG4iKTsKKworCWRldi0+c3RhdHVzID0gU1RBVFVTX1NIVVRUSU5HX0RPV047CisJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NUT1BfU1RSRUFNSU5HX1ZBTFVFLCAweDAwKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfYnVmZmVyKTsKKwltc2xlZXAoNTApOworCisJZmx1c2hfd29ya3F1ZXVlKGRldi0+d29ya3F1ZXVlKTsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCS8qIGtpbGwgdGhlIHN0aWxsIG91dHN0YW5kaW5nIHVyYnMgKi8KKwloZHB2cl9jYW5jZWxfcXVldWUoZGV2KTsKKworCS8qIGVtcHR5aW5nIHRoZSBkZXZpY2UgYnVmZmVyIGJlZm9yZXNodXR0aW5nIGl0IGRvd24gKi8KKwl3aGlsZSAoYnVmICYmICsrYyA8IDUwMCAmJgorCSAgICAgICAhdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJICAgICBkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKwkJCSAgICAgYnVmLCBkZXYtPmJ1bGtfaW5fc2l6ZSwgJmFjdHVhbF9sZW5ndGgsCisJCQkgICAgIEJVTEtfVVJCX1RJTUVPVVQpKSB7CisJCS8qIHdhaXQgKi8KKwkJbXNsZWVwKDUpOworCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgIiUyZDogZ290ICVkIGJ5dGVzXG4iLCBjLCBhY3R1YWxfbGVuZ3RoKTsKKwl9CisJa2ZyZWUoYnVmKTsKKwl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidXNlZCAlZCB1cmJzIHRvIGVtcHR5IGRldmljZSBidWZmZXJzXG4iLCBjLTEpOworCW1zbGVlcCgxMCk7CisKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCisJcmV0dXJuIDA7Cit9CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICogdmlkZW8gNCBsaW51eCAyIGZpbGUgb3BlcmF0aW9ucworICovCisKK3N0YXRpYyBpbnQgaGRwdnJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXY7CisJc3RydWN0IGhkcHZyX2ZoICpmaDsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKworCWRldiA9IChzdHJ1Y3QgaGRwdnJfZGV2aWNlICopdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaWYgKCFkZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJvcGVuIGZhaWxpbmcgd2l0aCB3aXRoIEVOT0RFVlxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhkcHZyX2ZoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmaCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisJLyogbG9jayB0aGUgZGV2aWNlIHRvIGFsbG93IGNvcnJlY3RseSBoYW5kbGluZyBlcnJvcnMKKwkgKiBpbiByZXN1bXB0aW9uICovCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJZGV2LT5vcGVuX2NvdW50Kys7CisKKwlmaC0+ZGV2ID0gZGV2OworCisJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKKworCXJldHZhbCA9IDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhkcHZyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhkcHZyX2ZoCQkqZmggID0gKHN0cnVjdCBoZHB2cl9maCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXYgPSBmaC0+ZGV2OworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKCEoLS1kZXYtPm9wZW5fY291bnQpICYmIGRldi0+c3RhdHVzID09IFNUQVRVU19TVFJFQU1JTkcpCisJCWhkcHZyX3N0b3Bfc3RyZWFtaW5nKGRldik7CisKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBoZHB2cl92NGwyX3JlYWQoKQorICogd2lsbCBhbGxvY2F0ZSBidWZmZXJzIHdoZW4gY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZQorICovCitzdGF0aWMgc3NpemVfdCBoZHB2cl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkgIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWYgPSBOVUxMOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwlpbnQgcmVtLCBjbnQ7CisKKwlpZiAoKnBvcykKKwkJcmV0dXJuIC1FU1BJUEU7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpIHsKKwkJaWYgKGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpKSB7CisJCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJCSAic3RhcnRfc3RyZWFtaW5nIGZhaWxlZFxuIik7CisJCQlyZXQgPSAtRUlPOworCQkJbXNsZWVwKDIwMCk7CisJCQlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWdvdG8gZXJyOworCQl9CisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCS8qIHdhaXQgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KKwlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCisJd2hpbGUgKGNvdW50ID4gMCAmJiBidWYpIHsKKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSAmJgorCQkgICAgZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0RJU0NPTk5FQ1RFRCkgeworCQkJLyogcmV0dXJuIG5vbmJsb2NraW5nICovCisJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfZGF0YSwKKwkJCQkJICAgICAgYnVmLT5zdGF0dXMgPT0gQlVGU1RBVF9SRUFEWSkpIHsKKwkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CisJCQkJZ290byBlcnI7CisJCQl9CisJCX0KKworCQlpZiAoYnVmLT5zdGF0dXMgIT0gQlVGU1RBVF9SRUFEWSkKKwkJCWJyZWFrOworCisJCS8qIHNldCByZW1haW5pbmcgYnl0ZXMgdG8gY29weSAqLworCQl1cmIgPSBidWYtPnVyYjsKKwkJcmVtID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gYnVmLT5wb3M7CisJCWNudCA9IHJlbSA+IGNvdW50ID8gY291bnQgOiByZW07CisKKwkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgYnVmLT5wb3MsCisJCQkJIGNudCkpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVhZDogY29weV90b191c2VyIGZhaWxlZFxuIik7CisJCQlpZiAoIXJldCkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQlidWYtPnBvcyArPSBjbnQ7CisJCWNvdW50IC09IGNudDsKKwkJYnVmZmVyICs9IGNudDsKKwkJcmV0ICs9IGNudDsKKworCQkvKiBmaW5pc2hlZCwgdGFrZSBuZXh0IGJ1ZmZlciAqLworCQlpZiAoYnVmLT5wb3MgPT0gdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCQltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJCWJ1Zi0+cG9zID0gMDsKKwkJCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9BVkFJTEFCTEU7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZidWYtPmJ1ZmZfbGlzdCwgJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCisJCQlwcmludF9idWZmZXJfc3RhdHVzKCk7CisKKwkJCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2J1ZmZlcik7CisKKwkJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCQl9CisJfQorZXJyOgorCWlmICghcmV0ICYmICFidWYpCisJCXJldCA9IC1FQUdBSU47CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZHB2cl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZiA9IE5VTEw7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IChzdHJ1Y3QgaGRwdnJfZmggKilmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWlmICh2aWRlb19pc191bnJlZ2lzdGVyZWQoZGV2LT52aWRlb19kZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChkZXYtPnN0YXR1cyA9PSBTVEFUVVNfSURMRSkgeworCQlpZiAoaGRwdnJfc3RhcnRfc3RyZWFtaW5nKGRldikpIHsKKwkJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCQkgInN0YXJ0X3N0cmVhbWluZyBmYWlsZWRcbiIpOworCQkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfSURMRTsKKwkJfQorCisJCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCS8qIG9ubHkgd2FpdCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZSAqLworCWlmICghYnVmIHx8IGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfUkVBRFkpIHsKKwkJcG9sbF93YWl0KGZpbHAsICZkZXYtPndhaXRfZGF0YSwgd2FpdCk7CisJCWJ1ZiA9IGhkcHZyX2dldF9uZXh0X2J1ZmZlcihkZXYpOworCX0KKwlpZiAoYnVmICYmIGJ1Zi0+c3RhdHVzID09IEJVRlNUQVRfUkVBRFkpCisJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiBtYXNrOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgaGRwdnJfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaGRwdnJfb3BlbiwKKwkucmVsZWFzZQk9IGhkcHZyX3JlbGVhc2UsCisJLnJlYWQJCT0gaGRwdnJfcmVhZCwKKwkucG9sbAkJPSBoZHB2cl9wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqIFY0TDIgaW9jdGwgaGFuZGxpbmcKKyAqLworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN0cmNweShjYXAtPmRyaXZlciwgImhkcHZyIik7CisJc3RyY3B5KGNhcC0+Y2FyZCwgIkhhdXBhdWdlIEhEIFBWUiIpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCWNhcC0+dmVyc2lvbiA9IEhEUFZSX1ZFUlNJT047CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfQVVESU8gICAgICAgICB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdTggc3RkX3R5cGUgPSAxOworCisJaWYgKCpzdGQgJiAoVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTF82MCkpCisJCXN0ZF90eXBlID0gMDsKKworCXJldHVybiBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fU1REX1RZUEUsIHN0ZF90eXBlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmluYW1lW10gPSB7CisJW0hEUFZSX0NPTVBPTkVOVF0gPSAiQ29tcG9uZW50IiwKKwlbSERQVlJfU1ZJREVPXSAgICA9ICJTLVZpZGVvIiwKKwlbSERQVlJfQ09NUE9TSVRFXSA9ICJDb21wb3NpdGUiLAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IG47CisKKwluID0gaS0+aW5kZXg7CisJaWYgKG4gPj0gSERQVlJfVklERU9fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJc3RybmNweShpLT5uYW1lLCBpbmFtZVtuXSwgc2l6ZW9mKGktPm5hbWUpIC0gMSk7CisJaS0+bmFtZVtzaXplb2YoaS0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlpLT5hdWRpb3NldCA9IDE8PEhEUFZSX1JDQV9GUk9OVCB8IDE8PEhEUFZSX1JDQV9CQUNLIHwgMTw8SERQVlJfU1BESUY7CisKKwlpLT5zdGQgPSBkZXYtPnZpZGVvX2Rldi0+dHZub3JtczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJldHZhbDsKKworCWlmIChpbmRleCA+PSBIRFBWUl9WSURFT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9WSURFT19JTlBVVF9WQUxVRSwgaW5kZXgrMSk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy52aWRlb19pbnB1dCA9IGluZGV4OworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCSppbmRleCA9IGRldi0+b3B0aW9ucy52aWRlb19pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqYXVkaW9faW5hbWVbXSA9IHsKKwlbSERQVlJfUkNBX0ZST05UXSA9ICJSQ0EgZnJvbnQiLAorCVtIRFBWUl9SQ0FfQkFDS10gID0gIlJDQSBiYWNrIiwKKwlbSERQVlJfU1BESUZdICAgICA9ICJTUERJRiIsCit9OworCitzdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXVuc2lnbmVkIGludCBuOworCisJbiA9IGF1ZGlvLT5pbmRleDsKKwlpZiAobiA+PSBIRFBWUl9BVURJT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVtuXSwgc2l6ZW9mKGF1ZGlvLT5uYW1lKSAtIDEpOworCWF1ZGlvLT5uYW1lW3NpemVvZihhdWRpby0+bmFtZSkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlpZiAoYXVkaW8tPmluZGV4ID49IEhEUFZSX0FVRElPX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5zdGF0dXMgIT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dmFsID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgYXVkaW8tPmluZGV4KzEsIGRldi0+b3B0aW9ucy5hdWRpb19jb2RlYyk7CisJaWYgKCFyZXR2YWwpCisJCWRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCA9IGF1ZGlvLT5pbmRleDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKworCWF1ZGlvLT5pbmRleCA9IGRldi0+b3B0aW9ucy5hdWRpb19pbnB1dDsKKwlhdWRpby0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlzdHJuY3B5KGF1ZGlvLT5uYW1lLCBhdWRpb19pbmFtZVthdWRpby0+aW5kZXhdLCBzaXplb2YoYXVkaW8tPm5hbWUpKTsKKwlhdWRpby0+bmFtZVtzaXplb2YoYXVkaW8tPm5hbWUpIC0gMV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgczMyIHN1cHBvcnRlZF92NGwyX2N0cmxzW10gPSB7CisJVjRMMl9DSURfQlJJR0hUTkVTUywKKwlWNEwyX0NJRF9DT05UUkFTVCwKKwlWNEwyX0NJRF9TQVRVUkFUSU9OLAorCVY0TDJfQ0lEX0hVRSwKKwlWNEwyX0NJRF9TSEFSUE5FU1MsCisJVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORywKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFLAorCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSwKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSywKK307CisKK3N0YXRpYyBpbnQgZmlsbF9xdWVyeWN0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYywKKwkJCSAgaW50IGFjMykKK3sKKwlpbnQgZXJyOworCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDg2KTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDgwKTsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAsIDB4ZmYsIDEsIDB4ODApOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKAorCQkJcWMsIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQlhYzMgPyBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzCisJCQk6IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMsCisJCQkxLCBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQywKKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMpOworCisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPXz8gbWF5YmUga2V5ZnJhbWUgaW50ZXJ2YWw6ICovCisvKiAJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI4LCAxMjgsIDApOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKKwkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMTAwMDAwMCwgMTM1MDAwMDAsIDEwMDAwMCwKKwkJCQkJICAgIDY1MDAwMDApOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAxMTAwMDAwLCAyMDIwMDAwMCwgMTAwMDAwLAorCQkJCQkgICA5MDAwMDAwKTsKKwkJaWYgKCFlcnIgJiYgb3B0LT5iaXRyYXRlX21vZGUgPT0gSERQVlJfQ09OU1RBTlQpCisJCQlxYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CisJCXJldHVybiBlcnI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgbmV4dDsKKwl1MzIgaWQgPSBxYy0+aWQ7CisKKwltZW1zZXQocWMsIDAsIHNpemVvZigqcWMpKTsKKworCW5leHQgPSAhIShpZCAmICBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwpOworCXFjLT5pZCA9IGlkICYgflY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1cHBvcnRlZF92NGwyX2N0cmxzKTsgaSsrKSB7CisJCWlmIChuZXh0KSB7CisJCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQkJcWMtPmlkID0gc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV07CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAocWMtPmlkID09IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldKQorCQkJcmV0dXJuIGZpbGxfcXVlcnljdHJsKCZkZXYtPm9wdGlvbnMsIHFjLAorCQkJCQkgICAgICBkZXYtPmZsYWdzICYgSERQVlJfRkxBR19BQzNfQ0FQKTsKKworCQlpZiAocWMtPmlkIDwgc3VwcG9ydGVkX3Y0bDJfY3RybHNbaV0pCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5icmlnaHRuZXNzOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRldi0+b3B0aW9ucy5zYXR1cmF0aW9uOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuaHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuc2hhcnBuZXNzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQlJJR0hUTkVTUywgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9DT05UUkFTVCwgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TQVRVUkFUSU9OLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHZhbCA9IGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9IVUUsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlkZXYtPm9wdGlvbnMuaHVlID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0hBUlBORVNTLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLnNoYXJwbmVzcyA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfZ2V0X2N0cmwoc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmF1ZGlvX2NvZGVjOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkM7CisJCWJyZWFrOworLyogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogKi8KKy8qIAkJY3RybC0+dmFsdWUgPSAob3B0LT5nb3BfbW9kZSAmIDB4MikgPyAwIDogMTI4OyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQljdHJsLT52YWx1ZSA9IG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UCisJCQk/IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSCisJCQk6IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmJpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWN0cmwtPnZhbHVlID0gb3B0LT5wZWFrX2JpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQkJZXJyID0gaGRwdnJfZ2V0X2N0cmwoJmRldi0+b3B0aW9ucywgY3RybCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBpbnQgaGRwdnJfdHJ5X2N0cmwoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIGludCBhYzMpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyB8fAorCQkgICAgKGFjMyAmJiBjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAqLworLyogCQlpZiAoY3RybC0+dmFsdWUgPT0gMCB8fCBjdHJsLT52YWx1ZSA9PSAxMjgpICovCisvKiAJCQlyZXQgPSAwOyAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgfHwKKwkJICAgIGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKwkJaWYgKGJpdHJhdGUgPj0gMTAgJiYgYml0cmF0ZSA8PSAxMzUpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwl7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisJCWlmIChwZWFrX2JpdHJhdGUgPj0gMTAgJiYgcGVha19iaXRyYXRlIDw9IDIwMikKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJCWVyciA9IGhkcHZyX3RyeV9jdHJsKGN0cmwsCisJCQkJCSAgICAgZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgaW50IGhkcHZyX3NldF9jdHJsKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX29wdGlvbnMgKm9wdCA9ICZkZXYtPm9wdGlvbnM7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAoZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCkgeworCQkJb3B0LT5hdWRpb19jb2RlYyA9IGN0cmwtPnZhbHVlOworCQkJcmV0ID0gaGRwdnJfc2V0X2F1ZGlvKGRldiwgb3B0LT5hdWRpb19pbnB1dCwKKwkJCQkJICAgICAgb3B0LT5hdWRpb19jb2RlYyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQlicmVhazsKKy8qIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAwICYmICEob3B0LT5nb3BfbW9kZSAmIDB4MikpIHsgKi8KKy8qIAkJCW9wdC0+Z29wX21vZGUgfD0gMHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWlmIChjdHJsLT52YWx1ZSA9PSAxMjggJiYgb3B0LT5nb3BfbW9kZSAmIDB4MikgeyAqLworLyogCQkJb3B0LT5nb3BfbW9kZSAmPSB+MHgyOyAqLworLyogCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCAqLworLyogCQkJCQkgIG9wdC0+Z29wX21vZGUpOyAqLworLyogCQl9ICovCisvKiAJCWJyZWFrOyAqLworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiAmJgorCQkgICAgb3B0LT5iaXRyYXRlX21vZGUgIT0gSERQVlJfQ09OU1RBTlQpIHsKKwkJCW9wdC0+Yml0cmF0ZV9tb2RlID0gSERQVlJfQ09OU1RBTlQ7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgJiYKKwkJICAgIG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKSB7CisJCQlvcHQtPmJpdHJhdGVfbW9kZSA9IEhEUFZSX1ZBUklBQkxFX0FWRVJBR0U7CisJCQloZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFLAorCQkJCQkgIG9wdC0+Yml0cmF0ZV9tb2RlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogeworCQl1aW50IGJpdHJhdGUgPSBjdHJsLT52YWx1ZSAvIDEwMDAwMDsKKworCQlvcHQtPmJpdHJhdGUgPSBiaXRyYXRlOworCQlpZiAoYml0cmF0ZSA+PSBvcHQtPnBlYWtfYml0cmF0ZSkKKwkJCW9wdC0+cGVha19iaXRyYXRlID0gYml0cmF0ZSsxOworCisJCWhkcHZyX3NldF9iaXRyYXRlKGRldik7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOiB7CisJCXVpbnQgcGVha19iaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKQorCQkJYnJlYWs7CisKKwkJaWYgKG9wdC0+Yml0cmF0ZSA8IHBlYWtfYml0cmF0ZSkgeworCQkJb3B0LT5wZWFrX2JpdHJhdGUgPSBwZWFrX2JpdHJhdGU7CisJCQloZHB2cl9zZXRfYml0cmF0ZShkZXYpOworCQl9IGVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCQllcnIgPSBoZHB2cl90cnlfY3RybChjdHJsLAorCQkJCQkgICAgIGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApOworCQkJaWYgKGVycikgeworCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gaGRwdnJfc2V0X2N0cmwoZGV2LCBjdHJsKTsKKwkJCWlmIChlcnIpIHsKKwkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZXJyOworCisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKworCWlmIChmLT5pbmRleCAhPSAwIHx8IGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPmZsYWdzID0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOworCXN0cm5jcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHMi1UUyB3aXRoIEFWQy9BQUMgc3RyZWFtcyIsIDMyKTsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRfaW5mbzsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZpZF9pbmZvID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKwlpZiAoIXZpZF9pbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9NUEVHOworCWYtPmZtdC5waXgud2lkdGgJPSB2aWRfaW5mby0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQJPSB2aWRfaW5mby0+aGVpZ2h0OworCWYtPmZtdC5waXguc2l6ZWltYWdlCT0gZGV2LT5idWxrX2luX3NpemU7CisJZi0+Zm10LnBpeC5jb2xvcnNwYWNlCT0gMDsKKwlmLT5mbXQucGl4LmJ5dGVzcGVybGluZQk9IDA7CisJZi0+Zm10LnBpeC5maWVsZAk9IFY0TDJfRklFTERfQU5ZOworCisJa2ZyZWUodmlkX2luZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbmNvZGVyX2NtZChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCAqYSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCisJbWVtc2V0KCZhLT5yYXcsIDAsIHNpemVvZihhLT5yYXcpKTsKKwlzd2l0Y2ggKGEtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCQlhLT5mbGFncyA9IDA7CisJCXJlcyA9IGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCQlyZXMgPSBoZHB2cl9zdG9wX3N0cmVhbWluZyhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJVbnN1cHBvcnRlZCBlbmNvZGVyIGNtZCAlZFxuIiwgYS0+Y21kKTsKKwkJcmVzID0gLUVJTlZBTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2VuY29kZXJfY21kICphKQoreworCXN3aXRjaCAoYS0+Y21kKSB7CisJY2FzZSBWNEwyX0VOQ19DTURfU1RBUlQ6CisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIGhkcHZyX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCT0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAorCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCT0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAorCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKKwkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCisJLnZpZGlvY19xdWVyeWN0cmwJPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsCQk9IHZpZGlvY19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCT0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX2dfZXh0X2N0cmxzCT0gdmlkaW9jX2dfZXh0X2N0cmxzLAorCS52aWRpb2Nfc19leHRfY3RybHMJPSB2aWRpb2Nfc19leHRfY3RybHMsCisJLnZpZGlvY190cnlfZXh0X2N0cmxzCT0gdmlkaW9jX3RyeV9leHRfY3RybHMsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gdmlkaW9jX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfZW5jb2Rlcl9jbWQsCisJLnZpZGlvY190cnlfZW5jb2Rlcl9jbWQJPSB2aWRpb2NfdHJ5X2VuY29kZXJfY21kLAorfTsKKworc3RhdGljIHZvaWQgaGRwdnJfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKKworCWhkcHZyX2RlbGV0ZShkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBoZHB2cl92aWRlb190ZW1wbGF0ZSA9IHsKKy8qIAkudHlwZQkJCT0gVkZMX1RZUEVfR1JBQkJFUiwgKi8KKy8qIAkudHlwZTIJCQk9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9NUEVHX0VOQ09ERVIsICovCisJLmZvcHMJCQk9ICZoZHB2cl9mb3BzLAorCS5yZWxlYXNlCQk9IGhkcHZyX2RldmljZV9yZWxlYXNlLAorCS5pb2N0bF9vcHMgCQk9ICZoZHB2cl9pb2N0bF9vcHMsCisJLnR2bm9ybXMgCQk9CisJCVY0TDJfU1REX05UU0MgIHwgVjRMMl9TVERfU0VDQU0gfCBWNEwyX1NURF9QQUxfQiB8CisJCVY0TDJfU1REX1BBTF9HIHwgVjRMMl9TVERfUEFMX0ggfCBWNEwyX1NURF9QQUxfSSB8CisJCVY0TDJfU1REX1BBTF9EIHwgVjRMMl9TVERfUEFMX00gfCBWNEwyX1NURF9QQUxfTiB8CisJCVY0TDJfU1REX1BBTF82MCwKK307CisKK2ludCBoZHB2cl9yZWdpc3Rlcl92aWRlb2RldihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCwKKwkJCSAgICBpbnQgZGV2bnVtKQoreworCS8qIHNldHVwIGFuZCByZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8KKwlkZXYtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghZGV2LT52aWRlb19kZXYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJ2aWRlb19kZXZpY2VfYWxsb2MoKSBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCSooZGV2LT52aWRlb19kZXYpID0gaGRwdnJfdmlkZW9fdGVtcGxhdGU7CisJc3RyY3B5KGRldi0+dmlkZW9fZGV2LT5uYW1lLCAiSGF1cHBhdWdlIEhEIFBWUiIpOworCWRldi0+dmlkZW9fZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CisJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52aWRlb19kZXYsIGRldik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCBkZXZudW0pKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAidmlkZW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXJldHVybiAwOworZXJyb3I6CisJcmV0dXJuIC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZDg3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNkZWZpbmUgSERQVlJfTUFKT1JfVkVSU0lPTiAwCisjZGVmaW5lIEhEUFZSX01JTk9SX1ZFUlNJT04gMgorI2RlZmluZSBIRFBWUl9SRUxFQVNFIDAKKyNkZWZpbmUgSERQVlJfVkVSU0lPTiBcCisJS0VSTkVMX1ZFUlNJT04oSERQVlJfTUFKT1JfVkVSU0lPTiwgSERQVlJfTUlOT1JfVkVSU0lPTiwgSERQVlJfUkVMRUFTRSkKKworI2RlZmluZSBIRFBWUl9NQVggOAorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLworI2RlZmluZSBIRF9QVlJfVkVORE9SX0lECTB4MjA0MAorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRAkweDQ5MDAKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQxCTB4NDkwMQorI2RlZmluZSBIRF9QVlJfUFJPRFVDVF9JRDIJMHg0OTAyCisKKyNkZWZpbmUgVU5TRVQgICAgKC0xVSkKKworI2RlZmluZSBOVU1fQlVGRkVSUyA2NAorCisjZGVmaW5lIEhEUFZSX0ZJUk1XQVJFX1ZFUlNJT04JCTB4OAorI2RlZmluZSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OX0FDMwkweGQKKworLyogI2RlZmluZSBIRFBWUl9ERUJVRyAqLworCitleHRlcm4gaW50IGhkcHZyX2RlYnVnOworCisjZGVmaW5lIE1TR19JTkZPCTEKKyNkZWZpbmUgTVNHX0JVRkZFUgkyCisKK3N0cnVjdCBoZHB2cl9vcHRpb25zIHsKKwl1OAl2aWRlb19zdGQ7CisJdTgJdmlkZW9faW5wdXQ7CisJdTgJYXVkaW9faW5wdXQ7CisJdTgJYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CXBlYWtfYml0cmF0ZTsJLyogaW4gMTAwa2JwcyAqLworCXU4CWJpdHJhdGVfbW9kZTsKKwl1OAlnb3BfbW9kZTsKKwllbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZwlhdWRpb19jb2RlYzsKKwl1OAlicmlnaHRuZXNzOworCXU4CWNvbnRyYXN0OworCXU4CWh1ZTsKKwl1OAlzYXR1cmF0aW9uOworCXU4CXNoYXJwbmVzczsKK307CisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgaGRwdnJfZGV2aWNlIHsKKwkvKiB0aGUgdjRsIGRldmljZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCSp2aWRlb19kZXY7CisJLyogdGhlIHVzYiBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJLyogdjRsMi1kZXZpY2UgdW51c2VkICovCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OworCisJLyogdGhlIG1heCBwYWNrZXQgc2l6ZSBvZiB0aGUgYnVsayBlbmRwb2ludCAqLworCXNpemVfdAkJCWJ1bGtfaW5fc2l6ZTsKKwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLworCV9fdTgJCQlidWxrX2luX2VuZHBvaW50QWRkcjsKKworCS8qIGhvbGRzIHRoZSBjdXJyZW50IGRldmljZSBzdGF0dXMgKi8KKwlfX3U4CQkJc3RhdHVzOworCS8qIGNvdW50IHRoZSBudW1iZXIgb2Ygb3BlbmVycyAqLworCXVpbnQJCQlvcGVuX2NvdW50OworCisJLyogaG9sZHMgdGhlIGN1cmVlbnQgc2V0IG9wdGlvbnMgKi8KKwlzdHJ1Y3QgaGRwdnJfb3B0aW9ucwlvcHRpb25zOworCisJdWludAkJCWZsYWdzOworCisJLyogc3luY2hyb25pemUgSS9PICovCisJc3RydWN0IG11dGV4CQlpb19tdXRleDsKKwkvKiBhdmFpbGFibGUgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9idWZmX2xpc3Q7CisJLyogaW4gcHJvZ3Jlc3MgYnVmZmVycyAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVjX2J1ZmZfbGlzdDsKKwkvKiB3YWl0cXVldWUgZm9yIGJ1ZmZlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2J1ZmZlcjsKKwkvKiB3YWl0cXVldWUgZm9yIGRhdGEgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2RhdGE7CisJLyoqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrcXVldWU7CisJLyoqLworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrZXI7CisKKwkvKiBJMkMgYWRhcHRlciAqLworCXN0cnVjdCBpMmNfYWRhcHRlcgkqaTJjX2FkYXB0ZXI7CisJLyogSTJDIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCWkyY19tdXRleDsKKworCS8qIHVzYiBjb250cm9sIHRyYW5zZmVyIGJ1ZmZlciBhbmQgbG9jayAqLworCXN0cnVjdCBtdXRleAkJdXNiY19tdXRleDsKKwl1OAkJCSp1c2JjX2J1ZjsKK307CisKKworLyogYnVmZmVyIG9uZSBidWxrIHVyYiBvZiBkYXRhICovCitzdHJ1Y3QgaGRwdnJfYnVmZmVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJ1ZmZfbGlzdDsKKworCXN0cnVjdCB1cmIJCSp1cmI7CisKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlCSpkZXY7CisKKwl1aW50CQkJcG9zOworCisJX191OAkJCXN0YXR1czsKK307CisKKy8qICovCisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvIHsKKwl1MTYJd2lkdGg7CisJdTE2CWhlaWdodDsKKwl1OAlmcHM7Cit9OworCitlbnVtIHsKKwlTVEFUVVNfVU5JTklUSUFMSVpFRAk9IDAsCisJU1RBVFVTX0lETEUsCisJU1RBVFVTX1NUQVJUSU5HLAorCVNUQVRVU19TSFVUVElOR19ET1dOLAorCVNUQVRVU19TVFJFQU1JTkcsCisJU1RBVFVTX0VSUk9SLAorCVNUQVRVU19ESVNDT05ORUNURUQsCit9OworCitlbnVtIHsKKwlIRFBWUl9GTEFHX0FDM19DQVAgPSAxLAorfTsKKworZW51bSB7CisJQlVGU1RBVF9VTklOSVRJQUxJWkVEID0gMCwKKwlCVUZTVEFUX0FWQUlMQUJMRSwKKwlCVUZTVEFUX0lOUFJPR1JFU1MsCisJQlVGU1RBVF9SRUFEWSwKK307CisKKyNkZWZpbmUgQ1RSTF9TVEFSVF9TVFJFQU1JTkdfVkFMVUUJMHgwNzAwCisjZGVmaW5lIENUUkxfU1RPUF9TVFJFQU1JTkdfVkFMVUUJMHgwODAwCisjZGVmaW5lIENUUkxfQklUUkFURV9WQUxVRQkJMHgxMDAwCisjZGVmaW5lIENUUkxfQklUUkFURV9NT0RFX1ZBTFVFCQkweDEyMDAKKyNkZWZpbmUgQ1RSTF9HT1BfTU9ERV9WQUxVRQkJMHgxMzAwCisjZGVmaW5lIENUUkxfVklERU9fSU5QVVRfVkFMVUUJCTB4MTUwMAorI2RlZmluZSBDVFJMX1ZJREVPX1NURF9UWVBFCQkweDE3MDAKKyNkZWZpbmUgQ1RSTF9BVURJT19JTlBVVF9WQUxVRQkJMHgyNTAwCisjZGVmaW5lIENUUkxfQlJJR0hUTkVTUwkJCTB4MjkwMAorI2RlZmluZSBDVFJMX0NPTlRSQVNUCQkJMHgyYTAwCisjZGVmaW5lIENUUkxfSFVFCQkJMHgyYjAwCisjZGVmaW5lIENUUkxfU0FUVVJBVElPTgkJCTB4MmMwMAorI2RlZmluZSBDVFJMX1NIQVJQTkVTUwkJCTB4MmQwMAorI2RlZmluZSBDVFJMX0xPV19QQVNTX0ZJTFRFUl9WQUxVRQkweDMxMDAKKworI2RlZmluZSBDVFJMX0RFRkFVTFRfSU5ERVgJCTB4MDAwMworCisKKwkvKiA6MCBzIDM4IDAxIDEwMDAgMDAwMyAwMDA0IDQgPSAwYTAwY2EwMAorCSAqIEJJVFJBVEUgU0VUVElORworCSAqICAgMXN0IGFuZCAybmQgYnl0ZSAobGl0dGxlIGVuZGlhbik6IGF2ZXJhZ2UgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxIG1iaXQvcywgbWF4OiAxMy41IG1iaXQvcworCSAqICAgM3JkIGFuZCA0dGggYnl0ZSAobGl0dGxlIGVuZGlhbik6IHBlYWsgYml0cmF0ZSBpbiAxMDAgMDAwIGJpdC9zCisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluOiBhdmVyYWdlICsgMTAwa2JpdC9zLAorCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDIwLjIgbWJpdC9zCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEyMDAgMDAwMyAwMDAxIDEgPSAwMgorCSAqIEJJVCBSQVRFIE1PREUKKwkgKiAgY29uc3RhbnQgPSAxLCB2YXJpYWJsZSAocGVhaykgPSAyLCB2YXJpYWJsZSAoYXZlcmFnZSkgPSAzCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDEzMDAgMDAwMyAwMDAxIDEgPSAwMworCSAqIEdPUCBNT0RFICgyIGJpdCkKKwkgKiAgICBsb3cgYml0IDAvMTogYWR2YW5jZWQvc2ltcGxlIEdPUAorCSAqICAgaGlnaCBiaXQgMC8xOiBJRFIoNC8zMi8xMjgpIC8gbm8gSURSICg0LzMyLzApCisJICovCisKKwkvKiA6MCBzIDM4IDAxIDE3MDAgMDAwMyAwMDAxIDEgPSAwMAorCSAqIFZJREVPIFNUQU5EQVJEIG9yIEZSRVFVTkNZIDAgPSA2MGh6LCAxID0gNTBoegorCSAqLworCisJLyogOjAgcyAzOCAwMSAzMTAwIDAwMDMgMDAwNCA0ID0gMDMwMzAwMDAKKwkgKiBGSUxURVIgQ09OVFJPTAorCSAqICAgMXN0IGJ5dGUgbHVtYSBsb3cgcGFzcyBmaWx0ZXIgc3RyZW5ndGgsCisJICogICAybmQgYnl0ZSBjaHJvbWEgbG93IHBhc3MgZmlsdGVyIHN0cmVuZ3RoLAorCSAqICAgM3JkIGJ5dGUgTUYgZW5hYmxlIGNocm9tYSwgbWluPTAsIG1heD0xCisJICogICA0dGggYnl0ZSBuCisJICovCisKKworCS8qIDowIHMgMzggYjkgMDAwMSAwMDAwIDAwMDAgMCAqLworCisKKworLyogOjAgcyAzOCBkMyAwMDAwIDAwMDAgMDAwMSAxID0gMDAgKi8KKy8qIAkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwgKi8KKy8qIAkJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKi8KKy8qIAkJCQkgICAgICAweGQzLCAweDM4LCAqLworLyogCQkJCSAgICAgIDAsIDAsICovCisvKiAJCQkJICAgICAgIlwwIiwgMSwgKi8KKy8qIAkJCQkgICAgICAxMDAwKTsgKi8KKworLyogCQlpbmZvKCJjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWQiLCByZXQpOyAqLworLyogCQltc2xlZXAoNTAwMCk7ICovCisKKworCS8qIDowIHMgYjggODEgMTQwMCAwMDAzIDAwMDUgNSA8CisJICogOjAgMCA1ID0gZDAwMjQwMDIgMTkKKwkgKiBRVUVSWSBGUkFNRSBTSVpFIEFORCBSQVRFCisJICogICAxc3QgYW5kIDJuZCBieXRlIChsaXR0bGUgZW5kaWFuKTogaG9yaXpvbnRhbCByZXNvbHV0aW9uCisJICogICAzcmQgYW5kIDR0aCBieXRlIChsaXR0bGUgZW5kaWFuKTogdmVydGljYWwgcmVzb2x1dGlvbgorCSAqICAgNXRoIGJ5dGU6IGZyYW1lIHJhdGUKKwkgKi8KKworCS8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8CisJICogOjAgMCAzID0gMDMwMTA0CisJICogUVVFUlkgU0lHTkFMIEFORCBERVRFQ1RFRCBMSU5FUywgbWF5YmUgSU5QVVQKKwkgKi8KKworZW51bSBoZHB2cl92aWRlb19zdGQgeworCUhEUFZSXzYwSFogPSAwLAorCUhEUFZSXzUwSFosCit9OworCitlbnVtIGhkcHZyX3ZpZGVvX2lucHV0IHsKKwlIRFBWUl9DT01QT05FTlQgPSAwLAorCUhEUFZSX1NWSURFTywKKwlIRFBWUl9DT01QT1NJVEUsCisJSERQVlJfVklERU9fSU5QVVRTCit9OworCitlbnVtIGhkcHZyX2F1ZGlvX2lucHV0cyB7CisJSERQVlJfUkNBX0JBQ0sgPSAwLAorCUhEUFZSX1JDQV9GUk9OVCwKKwlIRFBWUl9TUERJRiwKKwlIRFBWUl9BVURJT19JTlBVVFMKK307CisKK2VudW0gaGRwdnJfYml0cmF0ZV9tb2RlIHsKKwlIRFBWUl9DT05TVEFOVCA9IDEsCisJSERQVlJfVkFSSUFCTEVfUEVBSywKKwlIRFBWUl9WQVJJQUJMRV9BVkVSQUdFLAorfTsKKworZW51bSBoZHB2cl9nb3BfbW9kZSB7CisJSERQVlJfQURWQU5DRURfSURSX0dPUCA9IDAsCisJSERQVlJfU0lNUExFX0lEUl9HT1AsCisJSERQVlJfQURWQU5DRURfTk9JRFJfR09QLAorCUhEUFZSX1NJTVBMRV9OT0lEUl9HT1AsCit9OworCit2b2lkIGhkcHZyX2RlbGV0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9ucyAqLworaW50IGhkcHZyX3NldF9vcHRpb25zKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKK2ludCBoZHB2cl9zZXRfYml0cmF0ZShzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCitpbnQgaGRwdnJfc2V0X2F1ZGlvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdTggaW5wdXQsCisJCSAgICBlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyBjb2RlYyk7CisKK2ludCBoZHB2cl9jb25maWdfY2FsbChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgdmFsdWUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsYnVmKTsKKworc3RydWN0IGhkcHZyX3ZpZGVvX2luZm8gKmdldF92aWRlb19pbmZvKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKKy8qIDowIHMgYjggODEgMTgwMCAwMDAzIDAwMDMgMyA8ICovCisvKiA6MCAwIDMgPSAwMzAxZmYgKi8KK2ludCBnZXRfaW5wdXRfbGluZXNfaW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIHY0bDIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfdmlkZW9kZXYoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQkgICAgaW50IGRldm51bWJlcik7CisKK2ludCBoZHB2cl9jYW5jZWxfcXVldWUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogaTJjIGFkYXB0ZXIgcmVnaXN0cmF0aW9uICovCitpbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogYnVmZmVyIG1hbmFnZW1lbnQgKi8KK2ludCBoZHB2cl9mcmVlX2J1ZmZlcnMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKK2ludCBoZHB2cl9hbGxvY19idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdWludCBjb3VudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCmluZGV4IDc5MzkzZDEuLjhlMTQ2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX2dlbWluaS5jCkBAIC01NiwxNyArNTYsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfUVVFUllDVFJMLCAJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfU1RELAkJU0FBNzE0Nl9BRlRFUiB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyAwLAkJCTAgfQotfTsKLQogI2RlZmluZSBIRVhJVU1fQ09OVFJPTFMJMQogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBoZXhpdW1fY29udHJvbHNbXSA9IHsKIAl7IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIkIvVyIsIDAsIDEsIDEsIDAsIDAgfSwKQEAgLTIzMSw2ICsyMjAsMTMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKwlyZXR1cm4gMDsKK30KKworLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCisgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQorICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgeworCQkJKnFjID0gaGV4aXVtX2NvbnRyb2xzW2ldOworCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19xdWVyeWN0cmwoZmlsZSwgZmgsIHFjKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19nX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKSB7CisJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OworCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCWludCBpID0gMDsKKworCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19zX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfUFJJVkFURV9CQVNFKQorCQloZXhpdW0tPmN1cl9idyA9IHZjLT52YWx1ZTsKKworCURFQl9EKCgiVklESU9DX1NfQ1RSTCBCVzolZC5cbiIsIGhleGl1bS0+Y3VyX2J3KSk7CisKKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzYyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKKwkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9zZWNhbSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9QQUwgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzY19idyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpCisJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAtRUlOVkFMOworfQorCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YTsKIAogLyogdGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Jpbmcgd2FzIHN1Y2Nlc3NmdWwgKi8KQEAgLTI3OSw2ICszOTQsMTIgQEAKIAloZXhpdW0tPmN1cl9pbnB1dCA9IDA7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX3F1ZXJ5Y3RybCA9IHZpZGlvY19xdWVyeWN0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfY3RybCA9IHZpZGlvY19nX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfY3RybCA9IHZpZGlvY19zX2N0cmw7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gZ2VtaW5pIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJcHJpbnRrKCJoZXhpdW1fZ2VtaW5pOiBjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzA2LDE1MyArNDI3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaGV4aXVtLT5jdXJfaW5wdXQgPSBpbnB1dDsKLQkJCWhleGl1bV9zZXRfaW5wdXQoaGV4aXVtLCBpbnB1dCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JCS8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQotCQkgICB3aGljaCBnZXRzIHJlZ2lzdGVyZWQgKmFmdGVyKiB0aGlzIGZ1bmN0aW9uLiBiZWNhdXNlIG9mIHRoaXMgd2UgaGF2ZQotCQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJCSpxYyA9IGhleGl1bV9jb250cm9sc1tpXTsKLQkJCQkJREVCX0QoKCJWSURJT0NfUVVFUllDVFJMICVkLlxuIiwgcWMtPmlkKSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJCWludCBpOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGkgPCAwKSB7Ci0JCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodmMtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTp7Ci0JCQkJCXZjLT52YWx1ZSA9IGhleGl1bS0+Y3VyX2J3OwotCQkJCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgQlc6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCQlpbnQgaSA9IDA7Ci0KLQkJCWZvciAoaSA9IEhFWElVTV9DT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQkJaWYgKGhleGl1bV9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoaSA8IDApIHsKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCX0KLQotCQkJc3dpdGNoICh2Yy0+aWQpIHsKLQkJCWNhc2UgVjRMMl9DSURfUFJJVkFURV9CQVNFOnsKLQkJCQkJaGV4aXVtLT5jdXJfYncgPSB2Yy0+dmFsdWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJREVCX0QoKCJWSURJT0NfU19DVFJMIEJXOiVkLlxuIiwgaGV4aXVtLT5jdXJfYncpKTsKLQotCQkJaWYgKDAgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fc2VjYW0pOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJaWYgKDEgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fcGFsX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX05UU0MgPT0gaGV4aXVtLT5jdXJfc3RkKSB7Ci0JCQkJaGV4aXVtX3NldF9zdGFuZGFyZChoZXhpdW0sIGhleGl1bV9udHNjX2J3KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1NFQ0FNID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCS8qIGZpeG1lOiBpcyB0aGVyZSBubyBidyBzZWNhbSBtb2RlPyAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CkBAIC01MTQsOCArNDg4LDYgQEAKIAkuc3RkcyA9ICZoZXhpdW1fc3RhbmRhcmRzWzBdLAogCS5udW1fc3RkcyA9IHNpemVvZihoZXhpdW1fc3RhbmRhcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjayA9ICZzdGRfY2FsbGJhY2ssCi0JLmlvY3RscyA9ICZpb2N0bHNbMF0sCi0JLmlvY3RsID0gaGV4aXVtX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBoZXhpdW1fZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKaW5kZXggMDc0YmVjNy4uMmJjMzlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCkBAIC01NywxNCArNTcsNiBAQAogCXU4IGJ5dGU7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1NURCwJCVNBQTcxNDZfQUZURVIgfSwKLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgaGV4aXVtCiB7CiAJaW50IHR5cGU7CkBAIC0zMjksNiArMzIxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoaSwgJmhleGl1bV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKworCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisKKwkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKKworCURFQl9EKCgiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7CisJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIC8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCkBAIC0zMzksNiArMzY5LDkgQEAKIAlERUJfRUUoKCIuXG4iKSk7CiAKIAlzYWE3MTQ2X3Z2X2luaXQoZGV2LCAmdnZfZGF0YSk7CisJdnZfZGF0YS5vcHMudmlkaW9jX2VudW1faW5wdXQgPSB2aWRpb2NfZW51bV9pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CiAJaWYgKDAgIT0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmhleGl1bS0+dmlkZW9fZGV2LCBkZXYsICJoZXhpdW0gb3Jpb24iLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlwcmludGsoImhleGl1bV9vcmlvbjogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTM3MCw1OCArNDAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgaGV4aXVtX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwotLyoKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0qLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCQl7Ci0JCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQkJCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCi0JCQlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7Ci0KLQkJCURFQl9EKCgidjRsMl9pb2N0bDogVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JCXsKLQkJCWludCAqaW5wdXQgPSAoaW50ICopIGFyZzsKLQkJCSppbnB1dCA9IGhleGl1bS0+Y3VyX2lucHV0OwotCi0JCQlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JCXsKLQkJCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQotCQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0JCQloZXhpdW1fc2V0X2lucHV0KGhleGl1bSwgaW5wdXQpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCWRlZmF1bHQ6Ci0vKgotCQlERUJfRCgoImhleGl1bV9pb2N0bCgpIGRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RkKQogewogCXJldHVybiAwOwpAQCAtNDc5LDggKzQ2MCw2IEBACiAJLnN0ZHMgPSAmaGV4aXVtX3N0YW5kYXJkc1swXSwKIAkubnVtX3N0ZHMgPSBzaXplb2YoaGV4aXVtX3N0YW5kYXJkcykgLyBzaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sgPSAmc3RkX2NhbGxiYWNrLAotCS5pb2N0bHMgPSAmaW9jdGxzWzBdLAotCS5pb2N0bCA9IGhleGl1bV9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwppbmRleCA4NGI5ZTRmLi4zZDY5NDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uYwpAQCAtMTksMTAgKzE5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogLyogSW5keUNhbSBkZWNvZGVzIHN0cmVhbSBvZiBwaG90b25zIGludG8gZGlnaXRhbCBpbWFnZSByZXByZXNlbnRhdGlvbiA7LSkgKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogI2luY2x1ZGUgImluZHljYW0uaCIKIApAQCAtMzMsNiArMzUsNyBAQAogTU9EVUxFX0FVVEhPUigiTWlrYWVsIE5vdXNpYWluZW4gPHRtbm91c2lhQGNjLmh1dC5maT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiAvLyAjZGVmaW5lIElORFlDQU1fREVCVUcKIAogI2lmZGVmIElORFlDQU1fREVCVUcKQEAgLTQ0LDExICs0NywxNCBAQAogI2VuZGlmCiAKIHN0cnVjdCBpbmR5Y2FtIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCB2ZXJzaW9uOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfaW5keWNhbTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGluZHljYW0gKnRvX2luZHljYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgaW5keWNhbSwgc2QpOworfQogCiBzdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewogCUlORFlDQU1fQ09OVFJPTF9BR0NFTkEsCQkvKiBJTkRZQ0FNX0NPTlRST0wgKi8KQEAgLTYzLDggKzY5LDkgQEAKIAogLyogSW5keUNhbSByZWdpc3RlciBoYW5kbGluZyAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCAqdmFsdWUpCitzdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCAqdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQ7CiAKIAlpZiAocmVnID09IElORFlDQU1fUkVHX1JFU0VUKSB7CkBAIC04NywxMiArOTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgZXJyOwogCi0JaWYgKChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUykKLQkgICAgfHwgKHJlZyA9PSBJTkRZQ0FNX1JFR19WRVJTSU9OKSkgeworCWlmIChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUyB8fCByZWcgPT0gSU5EWUNBTV9SRUdfVkVSU0lPTikgewogCQlkcHJpbnRrKCJpbmR5Y2FtX3dyaXRlX3JlZygpOiAiCiAJCQkic2tpcHBpbmcgcmVhZC1vbmx5IHJlZ2lzdGVyICVkXG4iLCByZWcpOwogCQlyZXR1cm4gMDsKQEAgLTEwOCwxMyArMTE1LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKK3N0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCiAJCQkgICAgICAgdTggbGVuZ3RoLCB1OCAqZGF0YSkKIHsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgcmVnICsgaSwgZGF0YVtpXSk7CisJCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCByZWcgKyBpLCBkYXRhW2ldKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTI1LDc5ICsxMzIsNzggQEAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIAogI2lmZGVmIElORFlDQU1fREVCVUcKLXN0YXRpYyB2b2lkIGluZHljYW1fcmVnZHVtcF9kZWJ1ZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgaW5keWNhbV9yZWdkdW1wX2RlYnVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJaW50IGk7CiAJdTggdmFsOwogCiAJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgewotCQlpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgaSwgJnZhbCk7CisJCWluZHljYW1fcmVhZF9yZWcoc2QsIGksICZ2YWwpOwogCQlkcHJpbnRrKCJSZWcgJWQgPSAweCUwMnhcbiIsIGksIHZhbCk7CiAJfQogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaW5keWNhbV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGluZHljYW1fZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BR0M6Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQVdCOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87Ci0JCWlmIChjdHJsLT50eXBlID09IElORFlDQU1fQ09OVFJPTF9BR0MpCisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikKIAkJCWN0cmwtPnZhbHVlID0gKHJlZyAmIElORFlDQU1fQ09OVFJPTF9BR0NFTkEpCiAJCQkJPyAxIDogMDsKIAkJZWxzZQogCQkJY3RybC0+dmFsdWUgPSAocmVnICYgSU5EWUNBTV9DT05UUk9MX0FXQkNUTCkKIAkJCQk/IDEgOiAwOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgPT0gMHgwMCkgPyAweGZmIDogKChzMzIpcmVnIC0gMSk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBSU46Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCAmcmVnKTsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0dBSU4sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKIAkJCQkgICAgICAgSU5EWUNBTV9SRUdfUkVEX1NBVFVSQVRJT04sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsCiAJCQkJICAgICAgIElORFlDQU1fUkVHX0JMVUVfU0FUVVJBVElPTiwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLAogCQkJCQkgICAgICAgSU5EWUNBTV9SRUdfR0FNTUEsICZyZWcpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTIxMywyMSArMjE5LDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgc3RydWN0IGluZHljYW1fY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgaW5keWNhbV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOwogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKIAotCXN3aXRjaCAoY3RybC0+dHlwZSkgewotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0FHQzoKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BV0I6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19DT05UUk9MLCAmcmVnKTsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQlpZiAoY3RybC0+dHlwZSA9PSBJTkRZQ0FNX0NPTlRST0xfQUdDKSB7CisJCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVVRPR0FJTikgewogCQkJaWYgKGN0cmwtPnZhbHVlKQogCQkJCXJlZyB8PSBJTkRZQ0FNX0NPTlRST0xfQUdDRU5BOwogCQkJZWxzZQpAQCAtMjM5LDM0ICsyNDQsMzQgQEAKIAkJCQlyZWcgJj0gfklORFlDQU1fQ09OVFJPTF9BV0JDVEw7CiAJCX0KIAotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsIHJlZyk7CisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLCByZWcpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSOgorCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CiAJCXJlZyA9IChjdHJsLT52YWx1ZSA9PSAweGZmKSA/IDB4MDAgOiAoY3RybC0+dmFsdWUgKyAxKTsKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19TSFVUVEVSLCByZWcpOworCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FJTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQUlOLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfR0FJTiwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19SRURfU0FUVVJBVElPTiwKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9TQVRVUkFUSU9OLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKIAkJaWYgKGNhbWVyYS0+dmVyc2lvbiA9PSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19HQU1NQSwKKwkJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19HQU1NQSwKIAkJCQkJCWN0cmwtPnZhbHVlKTsKIAkJfQogCQlicmVhazsKQEAgLTI3OSwxOTIgKzI4NCwxMDMgQEAKIAogLyogSTJDLWludGVyZmFjZSAqLwogCi1zdGF0aWMgaW50IGluZHljYW1fYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBpbmR5Y2FtX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IHRvX2luZHljYW0oc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9JTkRZQ0FNLAorCQkgICAgICAgY2FtZXJhLT52ZXJzaW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBpbmR5Y2FtX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBpbmR5Y2FtX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gaW5keWNhbV9nX2N0cmwsCisJLnNfY3RybCA9IGluZHljYW1fc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgaW5keWNhbV9vcHMgPSB7CisJLmNvcmUgPSAmaW5keWNhbV9jb3JlX29wcywKK307CisKK3N0YXRpYyBpbnQgaW5keWNhbV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGluZHljYW0gKmNhbWVyYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTR0kgSW5keUNhbSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgSU5EWUNBTV9NT0RVTEVfVkVSU0lPTik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07CiAJY2FtZXJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZHljYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbWVyYSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NsaWVudDsKLQl9CisJaWYgKCFjYW1lcmEpCisJCXJldHVybiAtRU5PTUVNOwogCi0JY2xpZW50LT5hZGRyID0gYWRkcjsKLQljbGllbnQtPmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfaW5keWNhbTsKLQljbGllbnQtPmZsYWdzID0gMDsKLQlzdHJjcHkoY2xpZW50LT5uYW1lLCAiSW5keUNhbSBjbGllbnQiKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjYW1lcmEpOwotCi0JY2FtZXJhLT5jbGllbnQgPSBjbGllbnQ7Ci0KLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfY2FtZXJhOworCXNkID0gJmNhbWVyYS0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmluZHljYW1fb3BzKTsKIAogCWNhbWVyYS0+dmVyc2lvbiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCQkgICBJTkRZQ0FNX1JFR19WRVJTSU9OKTsKIAlpZiAoY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX0lORFkgJiYKIAkgICAgY2FtZXJhLT52ZXJzaW9uICE9IENBTUVSQV9WRVJTSU9OX01PT1NFKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2RldGFjaF9jbGllbnQ7CisJCWtmcmVlKGNhbWVyYSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KKwogCXByaW50ayhLRVJOX0lORk8gIkluZHlDYW0gdiVkLiVkIGRldGVjdGVkXG4iLAogCSAgICAgICBJTkRZQ0FNX1ZFUlNJT05fTUFKT1IoY2FtZXJhLT52ZXJzaW9uKSwKIAkgICAgICAgSU5EWUNBTV9WRVJTSU9OX01JTk9SKGNhbWVyYS0+dmVyc2lvbikpOwogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIGluaXRpYWxpemUKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX2Jsb2NrKGNsaWVudCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CisJZXJyID0gaW5keWNhbV93cml0ZV9ibG9jayhzZCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW0gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoY2FtZXJhKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCS8vIHdoaXRlIGJhbGFuY2UKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsCisJZXJyID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsCiAJCQkgIElORFlDQU1fQ09OVFJPTF9BR0NFTkEgfCBJTkRZQ0FNX0NPTlRST0xfQVdCQ1RMKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW5keUNhbTogV2hpdGUgYmFsYW5jaW5nIGNhbWVyYSBmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShjYW1lcmEpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpbmR5Y2FtX3JlZ2R1bXAoY2xpZW50KTsKKwlpbmR5Y2FtX3JlZ2R1bXAoc2QpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5keUNhbSBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMDsKLQotb3V0X2RldGFjaF9jbGllbnQ6Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLW91dF9mcmVlX2NhbWVyYToKLQlrZnJlZShjYW1lcmEpOwotb3V0X2ZyZWVfY2xpZW50OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBpbnQgaW5keWNhbV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQkvKiBJbmR5IHNwZWNpZmljIGNyYXAgKi8KLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKQotCQlyZXR1cm4gaW5keWNhbV9hdHRhY2goYWRhcCwgSU5EWUNBTV9BRERSLCAwKTsKLQkvKiBGZWVsIGZyZWUgdG8gYWRkIHByb2JlIGhlcmUgOi0pICovCi0JcmV0dXJuIC1FTk9ERVY7Ci19CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi1zdGF0aWMgaW50IGluZHljYW1fZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShjYW1lcmEpOwotCWtmcmVlKGNsaWVudCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2luZHljYW0oc2QpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbmR5Y2FtX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmFyZykKLXsKLQkvLyBzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQkvKiBUaGUgb2xkIHZpZGVvX2RlY29kZXIgaW50ZXJmYWNlIGp1c3QgaXNuJ3QgZW5vdWdoLAotCSAqIHNvIHdlJ2xsIHVzZSBzb21lIGN1c3RvbSBjb21tYW5kcy4gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOiB7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzICA9IFZJREVPX0RFQ09ERVJfTlRTQzsKLQkJY2FwLT5pbnB1dHMgPSAxOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCSppYXJnID0gREVDT0RFUl9TVEFUVVNfR09PRCB8IERFQ09ERVJfU1RBVFVTX05UU0MgfAotCQkJREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDogewotCQkvKiBBbHdheXMgZW5hYmxlZCAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOiB7Ci0JCS8vIHN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCS8qIFRPRE86IGNvbnZlcnQgdmFsdWVzIGZvciBpbmR5Y2FtX3NldF9jb250cm9scygpICovCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfSU5EWUNBTV9HRVRfQ09OVFJPTDogewotCQlyZXR1cm4gaW5keWNhbV9nZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWNhc2UgREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MOiB7Ci0JCXJldHVybiBpbmR5Y2FtX3NldF9jb250cm9sKGNsaWVudCwgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2luZHljYW0gPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gImluZHljYW0iLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9JTkRZQ0FNLAotCS5hdHRhY2hfYWRhcHRlciA9IGluZHljYW1fcHJvYmUsCi0JLmRldGFjaF9jbGllbnQJPSBpbmR5Y2FtX2RldGFjaCwKLQkuY29tbWFuZAk9IGluZHljYW1fY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBpbmR5Y2FtX2lkW10gPSB7CisJeyAiaW5keWNhbSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaW5keWNhbV9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGluZHljYW1faW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9pbmR5Y2FtKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGluZHljYW1fZXhpdCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZpMmNfZHJpdmVyX2luZHljYW0pOwotfQotCi1tb2R1bGVfaW5pdChpbmR5Y2FtX2luaXQpOwotbW9kdWxlX2V4aXQoaW5keWNhbV9leGl0KTsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJpbmR5Y2FtIiwKKwkucHJvYmUgPSBpbmR5Y2FtX3Byb2JlLAorCS5yZW1vdmUgPSBpbmR5Y2FtX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBpbmR5Y2FtX2lkLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKaW5kZXggZTZlZTgyMC4uODgxZjIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmgKQEAgLTg3LDIyICs4Nyw3IEBACiAKIC8qIERyaXZlciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KIAotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQUdDCQkJMAkvKiBib29sZWFuICovCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9BV0IJCQkxCS8qIGJvb2xlYW4gKi8KLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX1NIVVRURVIJCQkyCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9HQUlOCQkJMwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0UJCTQKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfQkFMQU5DRQkJNQotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04JCTYKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTgkJNwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfR0FNTUEJCQk4Ci0KLXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgewotCXU4IHR5cGU7Ci0JczMyIHZhbHVlOwotfTsKLQotI2RlZmluZQlERUNPREVSX0lORFlDQU1fR0VUX0NPTlRST0wJX0lPUignZCcsIDE5Mywgc3RydWN0IGluZHljYW1fY29udHJvbCkKLSNkZWZpbmUJREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MCV9JT1coJ2QnLCAxOTQsIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wpCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTgkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04JCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKaW5kZXggZDQ2NThjNS4uMDkyYzdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pci1rYmQtaTJjLmMKQEAgLTE2LDYgKzE2LDggQEAKICAqICAgICAgSGVucnkgV29uZyA8aGVucnlAc3R1ZmZlZGNvdy5uZXQ+CiAgKiAgICAgIE1hcmsgU2NodWx0eiA8bjl4bWpAeWFob28uY29tPgogICogICAgICBCcmlhbiBSb2dlcnMgPGJyaWFuX3JvZ2Vyc0Bjb21jYXN0Lm5ldD4KKyAqIG1vZGlmaWVkIGZvciBBVmVyTWVkaWEgQ2FyZGJ1cyBieQorICogICAgICBPbGRyaWNoIEplZGxpY2thIDxvbGRpdW0ucHJvQHNlem5hbS5jej4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjE2LDYgKzIxOCw0NiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdldF9rZXlfYXZlcm1lZGlhX2NhcmRidXMoc3RydWN0IElSX2kyYyAqaXIsCisJCQkJICAgICB1MzIgKmlyX2tleSwgdTMyICppcl9yYXcpCit7CisJdW5zaWduZWQgY2hhciBzdWJhZGRyLCBrZXksIGtleWdyb3VwOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gaXItPmMuYWRkciwgLmZsYWdzID0gMCwKKwkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkgeyAuYWRkciA9IGlyLT5jLmFkZHIsIC5mbGFncyA9IEkyQ19NX1JELAorCQkJCSAgLmJ1ZiA9ICZrZXksIC5sZW4gPSAxfSB9OworCXN1YmFkZHIgPSAweDBkOworCWlmICgyICE9IGkyY190cmFuc2Zlcihpci0+Yy5hZGFwdGVyLCBtc2csIDIpKSB7CisJCWRwcmludGsoMSwgInJlYWQgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoa2V5ID09IDB4ZmYpCisJCXJldHVybiAwOworCisJc3ViYWRkciA9IDB4MGI7CisJbXNnWzFdLmJ1ZiA9ICZrZXlncm91cDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMuYWRhcHRlciwgbXNnLCAyKSkgeworCQlkcHJpbnRrKDEsICJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGtleWdyb3VwID09IDB4ZmYpCisJCXJldHVybiAwOworCisJZHByaW50aygxLCAicmVhZCBrZXkgMHglMDJ4LzB4JTAyeFxuIiwga2V5LCBrZXlncm91cCk7CisJaWYgKGtleWdyb3VwIDwgMiB8fCBrZXlncm91cCA+IDMpIHsKKwkJLyogT25seSBhIHdhcm5pbmcgKi8KKwkJZHByaW50aygxLCAid2FybmluZzogaW52YWxpZCBrZXkgZ3JvdXAgMHglMDJ4IGZvciBrZXkgMHglMDJ4XG4iLAorCQkJCQkJCQlrZXlncm91cCwga2V5KTsKKwl9CisJa2V5IHw9IChrZXlncm91cCAmIDEpIDw8IDY7CisKKwkqaXJfa2V5ID0ga2V5OworCSppcl9yYXcgPSBrZXk7CisJcmV0dXJuIDE7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB2b2lkIGlyX2tleV9wb2xsKHN0cnVjdCBJUl9pMmMgKmlyKQpAQCAtMjM3LDE1ICsyNzksOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBJUl9pMmMgKmlyID0gKHN0cnVjdCBJUl9pMmMqKWRhdGE7Ci0Jc2NoZWR1bGVfd29yaygmaXItPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBpcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrKTsKKwlzdHJ1Y3QgSVJfaTJjICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSVJfaTJjLCB3b3JrLndvcmspOwogCWludCBwb2xsaW5nX2ludGVydmFsID0gMTAwOwogCiAJLyogTVNJIFRWQG55d2hlcmUgUGx1cyByZXF1aXJlcyBtb3JlIGZyZXF1ZW50IHBvbGxpbmcKQEAgLTI1NCw3ICsyOTAsNyBAQAogCQlwb2xsaW5nX2ludGVydmFsID0gNTA7CiAKIAlpcl9rZXlfcG9sbChpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKHBvbGxpbmdfaW50ZXJ2YWwpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTM2MCw2ICszOTYsMTIgQEAKIAkJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9PVEhFUjsKIAkJfQogCQlicmVhazsKKwljYXNlIDB4NDA6CisJCW5hbWUgICAgICAgID0gIkFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSI7CisJCWlyLT5nZXRfa2V5ID0gZ2V0X2tleV9hdmVybWVkaWFfY2FyZGJ1czsKKwkJaXJfdHlwZSAgICAgPSBJUl9UWVBFX09USEVSOworCQlpcl9jb2RlcyAgICA9IGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBzaG91bGRuJ3QgaGFwcGVuICovCiAJCXByaW50ayhERVZOQU1FICI6IEh1aD8gdW5rbm93biBpMmMgYWRkcmVzcyAoMHglMDJ4KT9cbiIsIGFkZHIpOwpAQCAtNDA0LDExICs0NDYsOCBAQAogCSAgICAgICBpci0+aW5wdXQtPm5hbWUsIGlyLT5pbnB1dC0+cGh5cywgYWRhcC0+bmFtZSk7CiAKIAkvKiBzdGFydCBwb2xsaW5nIHZpYSBldmVudGQgKi8KLQlJTklUX1dPUksoJmlyLT53b3JrLCBpcl93b3JrKTsKLQlpbml0X3RpbWVyKCZpci0+dGltZXIpOwotCWlyLT50aW1lci5mdW5jdGlvbiA9IGlyX3RpbWVyOwotCWlyLT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWlyOwotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIGlyX3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIDApOwogCiAJcmV0dXJuIDA7CiAKQEAgLTQyNSw4ICs0NjQsNyBAQAogCXN0cnVjdCBJUl9pMmMgKmlyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBraWxsIG91dHN0YW5kaW5nIHBvbGxzICovCi0JZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIAogCS8qIHVucmVnaXN0ZXIgZGV2aWNlcyAqLwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlyLT5pbnB1dCk7CkBAIC01MjQsNiArNTYyLDIyIEBACiAJCQlpcl9hdHRhY2goYWRhcCwgbXNnLmFkZHIsIDAsIDApOwogCX0KIAorCS8qIFNwZWNpYWwgY2FzZSBmb3IgQVZlck1lZGlhIENhcmRidXMgcmVtb3RlICovCisJaWYgKGFkYXAtPmlkID09IEkyQ19IV19TQUE3MTM0KSB7CisJCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwgZGF0YTsKKwkJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7IHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSAwLAorCQkJCQkgICAuYnVmID0gJnN1YmFkZHIsIC5sZW4gPSAxfSwKKwkJCQkJIHsgLmFkZHIgPSAweDQwLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkJICAgLmJ1ZiA9ICZkYXRhLCAubGVuID0gMX0gfTsKKwkJc3ViYWRkciA9IDB4MGQ7CisJCXJjID0gaTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMik7CisJCWRwcmludGsoMSwgInByb2JlIDB4JTAyeC8weCUwMnggQCAlczogJXNcbiIsCisJCQltc2dbMF0uYWRkciwgc3ViYWRkciwgYWRhcC0+bmFtZSwKKwkJCSgyID09IHJjKSA/ICJ5ZXMiIDogIm5vIik7CisJCWlmICgyID09IHJjKQorCQkJaXJfYXR0YWNoKGFkYXAsIG1zZ1swXS5hZGRyLCAwLCAwKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKaW5kZXggNjJhYTA2Zi4uODQ5OTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiaXZ0di1tYWlsYm94LmgiCiAjaW5jbHVkZSAiaXZ0di1jb250cm9scy5oIgogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCmluZGV4IGM0NmM5OTAuLmVjYThiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIHN0YXRpYyB2b2lkIGl2dHZfcHJvY2Vzc19lZXByb20oc3RydWN0IGl2dHYgKml0dikKIHsKIAlzdHJ1Y3QgdHZlZXByb20gdHY7Ci0JaW50IHBjaV9zbG90ID0gUENJX1NMT1QoaXR2LT5kZXYtPmRldmZuKTsKKwlpbnQgcGNpX3Nsb3QgPSBQQ0lfU0xPVChpdHYtPnBkZXYtPmRldmZuKTsKIAogCWl2dHZfcmVhZF9lZXByb20oaXR2LCAmdHYpOwogCkBAIC02MDQsNyArNjA0LDcgQEAKIAlpdHYtPnN0ZCA9IGl2dHZfcGFyc2Vfc3RkKGl0dik7CiAJaWYgKGl0di0+c3RkID09IDAgJiYgdHVuZXJ0eXBlID49IDApCiAJCWl0di0+c3RkID0gdHVuZXJ0eXBlID8gVjRMMl9TVERfTU4gOiAoVjRMMl9TVERfQUxMICYgflY0TDJfU1REX01OKTsKLQlpdHYtPmhhc19jeDIzNDE1ID0gKGl0di0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOworCWl0di0+aGFzX2N4MjM0MTUgPSAoaXR2LT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JVlRWMTUpOwogCWNoaXBuYW1lID0gaXR2LT5oYXNfY3gyMzQxNSA/ICJjeDIzNDE1IiA6ICJjeDIzNDE2IjsKIAlpZiAoaXR2LT5vcHRpb25zLmNhcmR0eXBlID09IC0xKSB7CiAJCUlWVFZfSU5GTygiSWdub3JlIGNhcmQgKGRldGVjdGVkICVzIGJhc2VkIGNoaXApXG4iLCBjaGlwbmFtZSk7CkBAIC02MTcsOSArNjE3LDkgQEAKIAkJSVZUVl9FUlIoIlVua25vd24gdXNlciBzcGVjaWZpZWQgdHlwZSwgdHJ5aW5nIHRvIGF1dG9kZXRlY3QgY2FyZFxuIik7CiAJfQogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewotCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFIHx8Ci0JCSAgICBpdHYtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAotCQkgICAgaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFX0FMVDIpIHsKKwkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0UgfHwKKwkJICAgIGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMSB8fAorCQkgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IElWVFZfUENJX0lEX0hBVVBQQVVHRV9BTFQyKSB7CiAJCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKGl0di0+aGFzX2N4MjM0MTUgPyBJVlRWX0NBUkRfUFZSXzM1MCA6IElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkIEhhdXBwYXVnZSBjYXJkICglcyBiYXNlZClcbiIsCiAJCQkJCWNoaXBuYW1lKTsKQEAgLTYzMCwxMyArNjMwLDEzIEBACiAJCQlpZiAoaXR2LT5jYXJkLT5wY2lfbGlzdCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCQkJZm9yIChqID0gMDsgaXR2LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2U7IGorKykgewotCQkJCWlmIChpdHYtPmRldi0+ZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+ZGV2aWNlICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uZGV2aWNlKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgIT0KKwkJCQlpZiAoaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CiAJCQkJICAgIGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX3ZlbmRvcikKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGl0di0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICE9CisJCQkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX2RldmljZSAhPQogCQkJCSAgICBpdHYtPmNhcmQtPnBjaV9saXN0W2pdLnN1YnN5c3RlbV9kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwogCQkJCUlWVFZfSU5GTygiQXV0b2RldGVjdGVkICVzIGNhcmQgKCVzIGJhc2VkKVxuIiwKQEAgLTY1MCw5ICs2NTAsOSBAQAogCWlmIChpdHYtPmNhcmQgPT0gTlVMTCkgewogCQlpdHYtPmNhcmQgPSBpdnR2X2dldF9jYXJkKElWVFZfQ0FSRF9QVlJfMTUwKTsKIAkJSVZUVl9FUlIoIlVua25vd24gY2FyZDogdmVuZG9yL2RldmljZTogWyUwNHg6JTA0eF1cbiIsCi0JCSAgICAgaXR2LT5kZXYtPnZlbmRvciwgaXR2LT5kZXYtPmRldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT52ZW5kb3IsIGl0di0+cGRldi0+ZGV2aWNlKTsKIAkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPmRldi0+c3Vic3lzdGVtX2RldmljZSk7CisJCSAgICAgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBpdHYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlJVlRWX0VSUigiICAgICAgICAgICAgICAlcyBiYXNlZFxuIiwgY2hpcG5hbWUpOwogCQlJVlRWX0VSUigiRGVmYXVsdGluZyB0byAlcyBjYXJkXG4iLCBpdHYtPmNhcmQtPm5hbWUpOwogCQlJVlRWX0VSUigiUGxlYXNlIG1haWwgdGhlIHZlbmRvci9kZXZpY2UgYW5kIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIElEcyBhbmQgd2hhdCBraW5kIG9mXG4iKTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpdnR2X2luaXRfc3RydWN0MShzdHJ1Y3QgaXZ0diAqaXR2KQogewotCWl0di0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGl0di0+ZGV2LCAwKTsKKwlpdHYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpdHYtPnBkZXYsIDApOwogCWl0di0+ZW5jX21ib3gubWF4X21ib3ggPSAyOyAvKiB0aGUgZW5jb2RlciBoYXMgMyBtYWlsYm94ZXMgKDAtMikgKi8KIAlpdHYtPmRlY19tYm94Lm1heF9tYm94ID0gMTsgLyogdGhlIGRlY29kZXIgaGFzIDIgbWFpbGJveGVzICgwLTEpICovCiAKQEAgLTY4Miw3ICs2ODIsNyBAQAogCXNwaW5fbG9ja19pbml0KCZpdHYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZpdHYtPmRtYV9yZWdfbG9jayk7CiAKLQlpdHYtPmlycV93b3JrX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGl0di0+ZGV2aWNlLm5hbWUpOworCWl0di0+aXJxX3dvcmtfcXVldWVzID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpZiAoaXR2LT5pcnFfd29ya19xdWV1ZXMgPT0gTlVMTCkgewogCQlJVlRWX0VSUigiQ291bGQgbm90IGNyZWF0ZSBpdnR2IHdvcmtxdWV1ZVxuIik7CiAJCXJldHVybiAtMTsKQEAgLTc2Niw3ICs3NjYsNyBAQAogCWl0di0+YXVkaW9faW5wdXQgPSBpdHYtPmNhcmQtPnZpZGVvX2lucHV0c1tpXS5hdWRpb19pbmRleDsKIH0KIAotc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBpdnR2X3NldHVwX3BjaShzdHJ1Y3QgaXZ0diAqaXR2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAl1MTYgY21kOwpAQCAtNzc1LDExICs3NzUsMTEgQEAKIAogCUlWVFZfREVCVUdfSU5GTygiRW5hYmxpbmcgcGNpIGRldmljZVxuIik7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgeworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlJVlRWX0VSUigiQ2FuJ3QgZW5hYmxlIGRldmljZSFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWYgKHBjaV9zZXRfZG1hX21hc2soZGV2LCAweGZmZmZmZmZmKSkgeworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmYpKSB7CiAJCUlWVFZfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTgwNSwxMSArODA1LDExIEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIGJ1cyBtYXN0ZXJpbmcgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQlJVlRWX0RFQlVHX0lORk8oIkF0dGVtcHRpbmcgdG8gZW5hYmxlIEJ1cyBNYXN0ZXJpbmdcbiIpOwotCQlwY2lfc2V0X21hc3RlcihkZXYpOwotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJcGNpX3NldF9tYXN0ZXIocGRldik7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKIAkJaWYgKCEoY21kICYgUENJX0NPTU1BTkRfTUFTVEVSKSkgewogCQkJSVZUVl9FUlIoIkJ1cyBNYXN0ZXJpbmcgaXMgbm90IGVuYWJsZWRcbiIpOwogCQkJcmV0dXJuIC1FTlhJTzsKQEAgLTgxNywyNiArODE3LDI2IEBACiAJfQogCUlWVFZfREVCVUdfSU5GTygiQnVzIE1hc3RlcmluZyBFbmFibGVkLlxuIik7CiAKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmNhcmRfcmV2KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKIAogCWlmIChwY2lfbGF0ZW5jeSA8IDY0ICYmIGl2dHZfcGNpX2xhdGVuY3kpIHsKIAkJSVZUVl9JTkZPKCJVbnJlYXNvbmFibHkgbG93IGxhdGVuY3kgdGltZXIsICIKIAkJCSAgICAgICAic2V0dGluZyB0byA2NCAod2FzICVkKVxuIiwgcGNpX2xhdGVuY3kpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAJfQogCS8qIFRoaXMgY29uZmlnIHNwYWNlIHZhbHVlIHJlbGF0ZXMgdG8gRE1BIGxhdGVuY2llcy4gVGhlCiAJICAgZGVmYXVsdCB2YWx1ZSAweDgwODAgaXMgdG9vIGxvdyBob3dldmVyIGFuZCB3aWxsIGxlYWQKIAkgICB0byBETUEgZXJyb3JzLiAweGZmZmYgaXMgdGhlIG1heCB2YWx1ZSB3aGljaCBzb2x2ZXMKIAkgICB0aGVzZSBwcm9ibGVtcy4gKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgMHhmZmZmKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIDB4ZmZmZik7CiAKIAlJVlRWX0RFQlVHX0lORk8oIiVkIChyZXYgJWQpIGF0ICUwMng6JTAyeC4leCwgIgogCQkgICAiaXJxOiAlZCwgbGF0ZW5jeTogJWQsIG1lbW9yeTogMHglbHhcbiIsCi0JCSAgIGl0di0+ZGV2LT5kZXZpY2UsIGNhcmRfcmV2LCBkZXYtPmJ1cy0+bnVtYmVyLAotCQkgICBQQ0lfU0xPVChkZXYtPmRldmZuKSwgUENJX0ZVTkMoZGV2LT5kZXZmbiksCi0JCSAgIGl0di0+ZGV2LT5pcnEsIHBjaV9sYXRlbmN5LCAodW5zaWduZWQgbG9uZylpdHYtPmJhc2VfYWRkcik7CisJCSAgIHBkZXYtPmRldmljZSwgY2FyZF9yZXYsIHBkZXYtPmJ1cy0+bnVtYmVyLAorCQkgICBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKKwkJICAgcGRldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpaXR2LT5iYXNlX2FkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzUsNyArOTM1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IGl2dHZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTk0NSwxNyArOTQ1LDE3IEBACiAJaXR2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl2dHYpLCBHRlBfQVRPTUlDKTsKIAlpZiAoaXR2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWl0di0+ZGV2ID0gZGV2OworCWl0di0+cGRldiA9IHBkZXY7CiAJaXR2LT5pbnN0YW5jZSA9IGF0b21pY19pbmNfcmV0dXJuKCZpdnR2X2luc3RhbmNlKSAtIDE7CiAKLQlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZpdHYtPmRldmljZSk7CisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJml0di0+djRsMl9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJa2ZyZWUoaXR2KTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJLyogIml2dHYgKyBQQ0kgSUQiIGlzIGEgYml0IG9mIGEgbW91dGhmdWwsIHNvIHVzZQogCSAgICJpdnR2ICsgaW5zdGFuY2UiIGluc3RlYWQuICovCi0Jc25wcmludGYoaXR2LT5kZXZpY2UubmFtZSwgc2l6ZW9mKGl0di0+ZGV2aWNlLm5hbWUpLAorCXNucHJpbnRmKGl0di0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGl0di0+djRsMl9kZXYubmFtZSksCiAJCQkiaXZ0diVkIiwgaXR2LT5pbnN0YW5jZSk7CiAJSVZUVl9JTkZPKCJJbml0aWFsaXppbmcgY2FyZCAlZFxuIiwgaXR2LT5pbnN0YW5jZSk7CiAKQEAgLTk3MiwxMiArOTcyLDExIEBACiAJSVZUVl9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgaXR2LT5iYXNlX2FkZHIpOwogCiAJLyogUENJIERldmljZSBTZXR1cCAqLwotCWlmICgocmV0dmFsID0gaXZ0dl9zZXR1cF9wY2koaXR2LCBkZXYsIHBjaV9pZCkpICE9IDApIHsKLQkJaWYgKHJldHZhbCA9PSAtRUlPKQotCQkJZ290byBmcmVlX3dvcmtxdWV1ZTsKLQkJZWxzZSBpZiAocmV0dmFsID09IC1FTlhJTykKLQkJCWdvdG8gZnJlZV9tZW07Ci0JfQorCXJldHZhbCA9IGl2dHZfc2V0dXBfcGNpKGl0diwgcGRldiwgcGNpX2lkKTsKKwlpZiAocmV0dmFsID09IC1FSU8pCisJCWdvdG8gZnJlZV93b3JrcXVldWU7CisJaWYgKHJldHZhbCA9PSAtRU5YSU8pCisJCWdvdG8gZnJlZV9tZW07CiAKIAkvKiBtYXAgaW8gbWVtb3J5ICovCiAJSVZUVl9ERUJVR19JTkZPKCJhdHRlbXB0aW5nIGlvcmVtYXAgYXQgMHglMDh4IGxlbiAweCUwOHhcbiIsCkBAIC0xMTU0LDggKzExNTMsOCBAQAogCWl2dHZfc2V0X2lycV9tYXNrKGl0diwgMHhmZmZmZmZmZik7CiAKIAkvKiBSZWdpc3RlciBJUlEgKi8KLQlyZXR2YWwgPSByZXF1ZXN0X2lycShpdHYtPmRldi0+aXJxLCBpdnR2X2lycV9oYW5kbGVyLAotCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBpdHYtPmRldmljZS5uYW1lLCAodm9pZCAqKWl0dik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXR2LT5wZGV2LT5pcnEsIGl2dHZfaXJxX2hhbmRsZXIsCisJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGl0di0+djRsMl9kZXYubmFtZSwgKHZvaWQgKilpdHYpOwogCWlmIChyZXR2YWwpIHsKIAkJSVZUVl9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBpcnEgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9pMmM7CkBAIC0xMTc3LDcgKzExNzYsNyBAQAogZnJlZV9zdHJlYW1zOgogCWl2dHZfc3RyZWFtc19jbGVhbnVwKGl0diwgMSk7CiBmcmVlX2lycToKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIGZyZWVfaTJjOgogCWV4aXRfaXZ0dl9pMmMoaXR2KTsKIGZyZWVfaW86CkBAIC0xMTk0LDcgKzExOTMsNyBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCUlWVFZfRVJSKCJFcnJvciAlZCBvbiBpbml0aWFsaXphdGlvblxuIiwgcmV0dmFsKTsKIAotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJml0di0+ZGV2aWNlKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMjkyLDEwICsxMjkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl2dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQorc3RhdGljIHZvaWQgaXZ0dl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBjaV9kZXYtPmRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KHY0bDJfZGV2KTsKIAlpbnQgaTsKIAogCUlWVFZfREVCVUdfSU5GTygiUmVtb3ZpbmcgY2FyZFxuIik7CkBAIC0xMzM2LDExICsxMzM1LDkgQEAKIAlpdnR2X3N0cmVhbXNfY2xlYW51cChpdHYsIDEpOwogCWl2dHZfdWRtYV9mcmVlKGl0dik7CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPmRldmljZSk7Ci0KIAlleGl0X2l2dHZfaTJjKGl0dik7CiAKLQlmcmVlX2lycShpdHYtPmRldi0+aXJxLCAodm9pZCAqKWl0dik7CisJZnJlZV9pcnEoaXR2LT5wZGV2LT5pcnEsICh2b2lkICopaXR2KTsKIAlpdnR2X2lvdW5tYXAoaXR2KTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpdHYtPmJhc2VfYWRkciwgSVZUVl9FTkNPREVSX1NJWkUpOwpAQCAtMTM0OCwxMSArMTM0NSwxMyBAQAogCWlmIChpdHYtPmhhc19jeDIzNDE1KQogCQlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIgKyBJVlRWX0RFQ09ERVJfT0ZGU0VULCBJVlRWX0RFQ09ERVJfU0laRSk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UoaXR2LT5kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShpdHYtPnBkZXYpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX1ZCSV9GUkFNRVM7IGkrKykKIAkJa2ZyZWUoaXR2LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJpdnR2OiBSZW1vdmVkICVzXG4iLCBpdHYtPmNhcmRfbmFtZSk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPnY0bDJfZGV2KTsKIAlrZnJlZShpdHYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCmluZGV4IGNlOGQ5YjcuLjQ0MGY3MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCkBAIC0xMzMsNyArMTMzLDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVRyh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCh4KSAmIGl2dHZfZGVidWcpIFwKLQkJCXY0bDJfaW5mbygmaXR2LT5kZXZpY2UsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAorCQkJdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWX0RFQlVHX1dBUk4oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVRyhJVlRWX0RCR0ZMR19XQVJOLCAgIndhcm4iLCAgZm10ICwgIyMgYXJncykKICNkZWZpbmUgSVZUVl9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUcoSVZUVl9EQkdGTEdfSU5GTywgICJpbmZvIiwgIGZtdCAsICMjIGFyZ3MpCkBAIC0xNDksNyArMTQ5LDcgQEAKICNkZWZpbmUgSVZUVl9ERUJVR19ISUdIX1ZPTCh4LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKCgoeCkgJiBpdnR2X2RlYnVnKSAmJiAoaXZ0dl9kZWJ1ZyAmIElWVFZfREJHRkxHX0hJR0hWT0wpKSAJXAotCQkJdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgIiAiIHR5cGUgIjogIiBmbXQgLCAjI2FyZ3MpOwlcCisJCQl2NGwyX2luZm8oJml0di0+djRsMl9kZXYsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIElWVFZfREVCVUdfSElfV0FSTihmbXQsIGFyZ3MuLi4pICBJVlRWX0RFQlVHX0hJR0hfVk9MKElWVFZfREJHRkxHX1dBUk4sICAid2FybiIsICBmbXQgLCAjIyBhcmdzKQogI2RlZmluZSBJVlRWX0RFQlVHX0hJX0lORk8oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19JTkZPLCAgImluZm8iLCAgZm10ICwgIyMgYXJncykKQEAgLTE2Myw5ICsxNjMsOSBAQAogI2RlZmluZSBJVlRWX0RFQlVHX0hJX1lVVihmbXQsIGFyZ3MuLi4pICAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19ZVVYsICAgInl1diIsICAgZm10ICwgIyMgYXJncykKIAogLyogU3RhbmRhcmQga2VybmVsIG1lc3NhZ2VzICovCi0jZGVmaW5lIElWVFZfRVJSKGZtdCwgYXJncy4uLikgICAgICB2NGwyX2VycigmaXR2LT5kZXZpY2UsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIElWVFZfV0FSTihmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oJml0di0+ZGV2aWNlLCBmbXQgLCAjIyBhcmdzKQotI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPmRldmljZSwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgdjRsMl93YXJuKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBJVlRWX0lORk8oZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQogCiAvKiBvdXRwdXQgbW9kZXMgKGN4MjM0MTUgb25seSkgKi8KICNkZWZpbmUgT1VUX05PTkUgICAgICAgIDAKQEAgLTMxNSw3ICszMTUsNyBAQAogc3RydWN0IGl2dHZfc3RyZWFtIHsKIAkvKiBUaGVzZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqdjRsMmRldjsJLyogTlVMTCB3aGVuIHN0cmVhbSBub3QgY3JlYXRlZCAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CS8qIE5VTEwgd2hlbiBzdHJlYW0gbm90IGNyZWF0ZWQgKi8KIAlzdHJ1Y3QgaXZ0diAqaXR2OyAJCS8qIGZvciBlYXNlIG9mIHVzZSAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBzdHJlYW0gKi8KIAlpbnQgdHlwZTsJCQkvKiBzdHJlYW0gdHlwZSAqLwpAQCAtNTkyLDcgKzU5Miw3IEBACiAvKiBTdHJ1Y3QgdG8gaG9sZCBpbmZvIGFib3V0IGl2dHYgY2FyZHMgKi8KIHN0cnVjdCBpdnR2IHsKIAkvKiBHZW5lcmFsIGZpeGVkIGNhcmQgZGF0YSAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7CQkvKiBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKiBQQ0kgZGV2aWNlICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZCAqY2FyZDsJLyogY2FyZCBpbmZvcm1hdGlvbiAqLwogCWNvbnN0IGNoYXIgKmNhcmRfbmFtZTsgICAgICAgICAgLyogZnVsbCBuYW1lIG9mIHRoZSBjYXJkICovCiAJY29uc3Qgc3RydWN0IGl2dHZfY2FyZF90dW5lcl9pMmMgKmNhcmRfaTJjOyAvKiBpMmMgYWRkcmVzc2VzIHRvIHByb2JlIGZvciB0dW5lciAqLwpAQCAtNjEyLDcgKzYxMiw3IEBACiAJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpyZWdfbWVtOyAvKiBwb2ludGVyIHRvIG1hcHBlZCByZWdpc3RlcnMgKi8KIAlzdHJ1Y3QgaXZ0dl9vcHRpb25zIG9wdGlvbnM7IAkvKiB1c2VyIG9wdGlvbnMgKi8KIAotCXN0cnVjdCB2NGwyX2RldmljZSBkZXZpY2U7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2NGwyX3N1YmRldiBzZF9ncGlvOwkvKiBHUElPIHN1Yi1kZXZpY2UgKi8KIAl1MTYgaW5zdGFuY2U7CiAKQEAgLTY5Niw3ICs2OTYsNyBAQAogCXU2NCB2YmlfZGF0YV9pbnNlcnRlZDsgICAgICAgICAgLyogbnVtYmVyIG9mIFZCSSBieXRlcyBpbnNlcnRlZCBpbnRvIHRoZSBNUEVHIHN0cmVhbSAqLwogCXUzMiBsYXN0X2RlY190aW1pbmdbM107ICAgICAgICAgLyogY2FjaGUgbGFzdCByZXRyaWV2ZWQgcHRzL3Njci9mcmFtZSB2YWx1ZXMgKi8KIAl1bnNpZ25lZCBsb25nIGR1YWx3YXRjaF9qaWZmaWVzOy8qIGppZmZpZXMgdmFsdWUgb2YgdGhlIHByZXZpb3VzIGR1YWx3YXRjaCBjaGVjayAqLwotCXUxNiBkdWFsd2F0Y2hfc3RlcmVvX21vZGU7ICAgICAgLyogY3VycmVudCBkZXRlY3RlZCBkdWFsd2F0Y2ggc3RlcmVvIG1vZGUgKi8KKwl1MzIgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOyAgICAgIC8qIGN1cnJlbnQgZGV0ZWN0ZWQgZHVhbHdhdGNoIHN0ZXJlbyBtb2RlICovCiAKIAogCS8qIFZCSSBzdGF0ZSBpbmZvICovCkBAIC03MTksOSArNzE5LDkgQEAKIAlzdHJ1Y3Qgb3NkX2luZm8gKm9zZF9pbmZvOyAgICAgIC8qIGl2dHZmYiBwcml2YXRlIE9TRCBpbmZvICovCiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpdnR2ICp0b19pdnR2KHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaXZ0diAqdG9faXZ0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaXZ0diwgZGV2aWNlKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgaXZ0diwgdjRsMl9kZXYpOwogfQogCiAvKiBHbG9iYWxzICovCkBAIC03ODgsNyArNzg4LDcgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgaHcgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWdub3JlIGFueSBlcnJvcnMuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9odyhpdHYsIGh3LCBvLCBmLCBhcmdzLi4uKSAJCQkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+ZGV2aWNlLCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoaXR2KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCiAKICNkZWZpbmUgaXZ0dl9jYWxsX2FsbChpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9odyhpdHYsIDAsIG8sIGYgLCAjI2FyZ3MpCiAKQEAgLTc5Niw3ICs3OTYsNyBAQAogICAgbWF0Y2ggdGhlbSBhbGwpLiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IKICAgIC1FTk9JT0NUTENNRCwgdGhlbiByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuICovCiAjZGVmaW5lIGl2dHZfY2FsbF9od19lcnIoaXR2LCBodywgbywgZiwgYXJncy4uLikgIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycigmKGl0diktPmRldmljZSwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoJihpdHYpLT52NGwyX2RldiwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKIAogI2RlZmluZSBpdnR2X2NhbGxfYWxsX2VycihpdHYsIG8sIGYsIGFyZ3MuLi4pIGl2dHZfY2FsbF9od19lcnIoaXR2LCAwLCBvLCBmICwgIyNhcmdzKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggZDU5NGJjMi4uY2ZhYWNmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtMTQ4LDEwICsxNDgsMTAgQEAKIHN0YXRpYyB2b2lkIGl2dHZfZHVhbHdhdGNoKHN0cnVjdCBpdnR2ICppdHYpCiB7CiAJc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JdTE2IG5ld19iaXRtYXA7Ci0JdTE2IG5ld19zdGVyZW9fbW9kZTsKLQljb25zdCB1MTYgc3RlcmVvX21hc2sgPSAweDAzMDA7Ci0JY29uc3QgdTE2IGR1YWwgPSAweDAyMDA7CisJdTMyIG5ld19iaXRtYXA7CisJdTMyIG5ld19zdGVyZW9fbW9kZTsKKwljb25zdCB1MzIgc3RlcmVvX21hc2sgPSAweDAzMDA7CisJY29uc3QgdTMyIGR1YWwgPSAweDAyMDA7CiAKIAluZXdfc3RlcmVvX21vZGUgPSBpdHYtPnBhcmFtcy5hdWRpb19wcm9wZXJ0aWVzICYgc3RlcmVvX21hc2s7CiAJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CkBAIC05OTEsNyArOTkxLDcgQEAKIAltdXRleF9sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAlpZiAoaXZ0dl9pbml0X29uX2ZpcnN0X29wZW4oaXR2KSkgewogCQlJVlRWX0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsCi0JCQkJcy0+djRsMmRldi0+bWlub3IpOworCQkJCXZkZXYtPm1pbm9yKTsKIAkJbXV0ZXhfdW5sb2NrKCZpdHYtPnNlcmlhbGl6ZV9sb2NrKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwppbmRleCA2ZGJhNTViLi5jMWI3ZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAlpbnQgcmV0cmllcyA9IDM7CiAKIHJldHJ5OgotCWlmIChyZXRyaWVzICYmIHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJml0di0+ZGV2LT5kZXYpID09IDApIHsKKwlpZiAocmV0cmllcyAmJiByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZpdHYtPnBkZXYtPmRldikgPT0gMCkgewogCQlpbnQgaTsKIAkJdm9sYXRpbGUgdTMyIF9faW9tZW0gKmRzdCA9ICh2b2xhdGlsZSB1MzIgX19pb21lbSAqKW1lbTsKIAkJY29uc3QgdTMyICpzcmMgPSAoY29uc3QgdTMyICopZnctPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKaW5kZXggZGMyODUwZS4uMzMyMTk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmluaXRpYWxfdmFsdWUgfCBwaW4sIElWVFZfUkVHX0dQSU9fT1VUKTsKIAl3cml0ZV9yZWcoaXR2LT5jYXJkLT5ncGlvX2luaXQuZGlyZWN0aW9uIHwgcGluLCBJVlRWX1JFR19HUElPX0RJUik7CiAJdjRsMl9zdWJkZXZfaW5pdCgmaXR2LT5zZF9ncGlvLCAmc3ViZGV2X29wcyk7Ci0Jc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT5kZXZpY2UubmFtZSk7CisJc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpdHYtPnNkX2dwaW8uZ3JwX2lkID0gSVZUVl9IV19HUElPOwotCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJml0di0+ZGV2aWNlLCAmaXR2LT5zZF9ncGlvKTsKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LCAmaXR2LT5zZF9ncGlvKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKaW5kZXggY2ExZDk1NS4uZTczYTE5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMKQEAgLTE5NCwxNCArMTk0LDE0IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpyZXN1bHQgPSBOVUxMOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQlzcGluX2xvY2soJml0di0+ZGV2aWNlLmxvY2spOwotCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+ZGV2aWNlKSB7CisJc3Bpbl9sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJml0di0+djRsMl9kZXYpIHsKIAkJaWYgKHNkLT5ncnBfaWQgPT0gaHcpIHsKIAkJCXJlc3VsdCA9IHNkOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJml0di0+ZGV2aWNlLmxvY2spOworCXNwaW5fdW5sb2NrKCZpdHYtPnY0bDJfZGV2LmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3Miw4ICs0NzIsOCBAQAogICAgaW50ZXJ2ZW5pbmcgc3RvcCBjb25kaXRpb24gKi8KIHN0YXRpYyBpbnQgaXZ0dl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQogewotCXN0cnVjdCB2NGwyX2RldmljZSAqZHJ2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYoZHJ2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IGl2dHYgKml0diA9IHRvX2l2dHYodjRsMl9kZXYpOwogCWludCByZXR2YWw7CiAJaW50IGk7CiAKQEAgLTYwNCwxMiArNjA0LDEyIEBACiAKIAlzcHJpbnRmKGl0di0+aTJjX2FkYXAubmFtZSArIHN0cmxlbihpdHYtPmkyY19hZGFwLm5hbWUpLCAiICMlZCIsCiAJCWl0di0+aW5zdGFuY2UpOwotCWkyY19zZXRfYWRhcGRhdGEoJml0di0+aTJjX2FkYXAsICZpdHYtPmRldmljZSk7CisJaTJjX3NldF9hZGFwZGF0YSgmaXR2LT5pMmNfYWRhcCwgJml0di0+djRsMl9kZXYpOwogCiAJbWVtY3B5KCZpdHYtPmkyY19jbGllbnQsICZpdnR2X2kyY19jbGllbnRfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCWl0di0+aTJjX2NsaWVudC5hZGFwdGVyID0gJml0di0+aTJjX2FkYXA7Ci0JaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+ZGV2LT5kZXY7CisJaXR2LT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJml0di0+cGRldi0+ZGV2OwogCiAJSVZUVl9ERUJVR19JMkMoInNldHRpbmcgc2NsIGFuZCBzZGEgdG8gMVxuIik7CiAJaXZ0dl9zZXRzY2woaXR2LCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCmluZGV4IGMxM2JkMmEuLjlhMDQyNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwpAQCAtMzQ1LDEwICszNDUsOCBAQAogCXBpeGZtdC0+cHJpdiA9IDA7CiAJaWYgKGlkLT50eXBlID09IElWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVikgewogCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0hNMTI7Ci0JCS8qIFlVViBzaXplIGlzIChZPShoKncpICsgVVY9KGgqKHcvMikpKSAqLwotCQlwaXhmbXQtPnNpemVpbWFnZSA9Ci0JCQlwaXhmbXQtPmhlaWdodCAqIHBpeGZtdC0+d2lkdGggKwotCQkJcGl4Zm10LT5oZWlnaHQgKiAocGl4Zm10LT53aWR0aCAvIDIpOworCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCo3MjApICsgVVY9KGgqKDcyMC8yKSkpICovCisJCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5oZWlnaHQgKiA3MjAgKiAzIC8gMjsKIAkJcGl4Zm10LT5ieXRlc3BlcmxpbmUgPSA3MjA7CiAJfSBlbHNlIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwpAQCAtNDY5LDExICs0NjcsMTcgQEAKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gaWQtPml0djsKIAlpbnQgdyA9IGZtdC0+Zm10LnBpeC53aWR0aDsKIAlpbnQgaCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisJaW50IG1pbl9oID0gMjsKIAogCXcgPSBtaW4odywgNzIwKTsKIAl3ID0gbWF4KHcsIDIpOworCWlmIChpZC0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKKwkJLyogWVVWIGhlaWdodCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzIgKi8KKwkJaCAmPSB+MHgxZjsKKwkJbWluX2ggPSAzMjsKKwl9CiAJaCA9IG1pbihoLCBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCWggPSBtYXgoaCwgMik7CisJaCA9IG1heChoLCBtaW5faCk7CiAJaXZ0dl9nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogCWZtdC0+Zm10LnBpeC53aWR0aCA9IHc7CiAJZm10LT5mbXQucGl4LmhlaWdodCA9IGg7CkBAIC03NjYsNyArNzcwLDcgQEAKIAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBJVlRWX0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBpdHYtPmNhcmRfbmFtZSwgc2l6ZW9mKHZjYXAtPmNhcmQpKTsKLQlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGl0di0+ZGV2KSk7CisJc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShpdHYtPnBkZXYpKTsKIAl2Y2FwLT52ZXJzaW9uID0gSVZUVl9EUklWRVJfVkVSU0lPTjsgCSAgICAvKiB2ZXJzaW9uICovCiAJdmNhcC0+Y2FwYWJpbGl0aWVzID0gaXR2LT52NGwyX2NhcDsgCSAgICAvKiBjYXBhYmlsaXRpZXMgKi8KIAlyZXR1cm4gMDsKQEAgLTE1MTMsMTIgKzE1MTcsMTIgQEAKIAl9CiAJSVZUVl9JTkZPKCJUdW5lcjogICVzXG4iLAogCQl0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSA/ICJSYWRpbyIgOiAiVFYiKTsKLQljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPmRldmljZS5uYW1lKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJml0di0+cGFyYW1zLCBpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCUlWVFZfSU5GTygiU3RhdHVzIGZsYWdzOiAgICAweCUwOGx4XG4iLCBpdHYtPmlfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBJVlRWX01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMIHx8IHMtPmJ1ZmZlcnMgPT0gMCkKKwkJaWYgKHMtPnZkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCiAJCQljb250aW51ZTsKIAkJSVZUVl9JTkZPKCJTdHJlYW0gJXM6IHN0YXR1cyAweCUwNGx4LCAlZCUlIG9mICVkIEtpQiAoJWQgYnVmZmVycykgaW4gdXNlXG4iLCBzLT5uYW1lLCBzLT5zX2ZsYWdzLAogCQkJCShzLT5idWZmZXJzIC0gcy0+cV9mcmVlLmJ1ZmZlcnMpICogMTAwIC8gcy0+YnVmZmVycywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggZjVkMDBlYy4uMDFjMTRkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogCUlWVFZfREVCVUdfSElfRE1BKCJpdnR2X3Bpb193b3JrX2hhbmRsZXJcbiIpOwogCWlmIChpdHYtPmN1cl9waW9fc3RyZWFtIDwgMCB8fCBpdHYtPmN1cl9waW9fc3RyZWFtID49IElWVFZfTUFYX1NUUkVBTVMgfHwKLQkJCXMtPnY0bDJkZXYgPT0gTlVMTCB8fCAhaXZ0dl91c2VfcGlvKHMpKSB7CisJCQlzLT52ZGV2ID09IE5VTEwgfHwgIWl2dHZfdXNlX3BpbyhzKSkgewogCQlpdHYtPmN1cl9waW9fc3RyZWFtID0gLTE7CiAJCS8qIHRyaWdnZXIgUElPIGNvbXBsZXRlIHVzZXIgaW50ZXJydXB0ICovCiAJCXdyaXRlX3JlZyhJVlRWX0lSUV9FTkNfUElPX0NPTVBMRVRFLCAweDQ0KTsKQEAgLTEwOSw3ICsxMDksNyBAQAogCWludCByYzsKIAogCS8qIHNhbml0eSBjaGVja3MgKi8KLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKSB7CisJaWYgKHMtPnZkZXYgPT0gTlVMTCkgewogCQlJVlRWX0RFQlVHX1dBUk4oIlN0cmVhbSAlcyBub3Qgc3RhcnRlZFxuIiwgcy0+bmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuYwppbmRleCA3MWJkMTNlLi5mZjdiN2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKGl2dHZfbWlnaHRfdXNlX2RtYShzKSkgewotCQlzLT5zZ19oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CisJCXMtPnNnX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgcy0+c2dfZG1hLCBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIHMtPmRtYSk7CiAJCWl2dHZfc3RyZWFtX3N5bmNfZm9yX2NwdShzKTsKIAl9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQl9CiAJCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOwogCQlpZiAoaXZ0dl9taWdodF91c2VfZG1hKHMpKSB7Ci0JCQlidWYtPmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShzLT5pdHYtPmRldiwKKwkJCWJ1Zi0+ZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHMtPml0di0+cGRldiwKIAkJCQlidWYtPmJ1Ziwgcy0+YnVmX3NpemUgKyAyNTYsIHMtPmRtYSk7CiAJCQlpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUocywgYnVmKTsKIAkJfQpAQCAtMjcxLDcgKzI3MSw3IEBACiAJLyogZW1wdHkgcV9mcmVlICovCiAJd2hpbGUgKChidWYgPSBpdnR2X2RlcXVldWUocywgJnMtPnFfZnJlZSkpKSB7CiAJCWlmIChpdnR2X21pZ2h0X3VzZV9kbWEocykpCi0JCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogCQlrZnJlZShidWYtPmJ1Zik7CiAJCWtmcmVlKGJ1Zik7CkBAIC0yODAsNyArMjgwLDcgQEAKIAkvKiBGcmVlIFNHIEFycmF5L0xpc3RzICovCiAJaWYgKHMtPnNnX2RtYSAhPSBOVUxMKSB7CiAJCWlmIChzLT5zZ19oYW5kbGUgIT0gSVZUVl9ETUFfVU5NQVBQRUQpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJCXBjaV91bm1hcF9zaW5nbGUocy0+aXR2LT5wZGV2LCBzLT5zZ19oYW5kbGUsCiAJCQkJIHNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlzLT5zZ19oYW5kbGUgPSBJVlRWX0RNQV9VTk1BUFBFRDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmgKaW5kZXggNDc2NTU2YS4uOTEyMzM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5oCkBAIC01MywxNCArNTMsMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X2J1Zl9zeW5jX2Zvcl9jcHUoc3RydWN0IGl2dHZfc3RyZWFtICpzLCBzdHJ1Y3QgaXZ0dl9idWZmZXIgKmJ1ZikKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgYnVmLT5kbWFfaGFuZGxlLAogCQkJCXMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9idWZfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBpdnR2X3N0cmVhbSAqcywgc3RydWN0IGl2dHZfYnVmZmVyICpidWYpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSArIDI1Niwgcy0+ZG1hKTsKIH0KIApAQCAtODIsMTQgKzgyLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9zdHJlYW1fc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2X3N0cmVhbSAqcykKIHsKIAlpZiAoaXZ0dl91c2VfZG1hKHMpKQotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocy0+aXR2LT5kZXYsIHMtPnNnX2hhbmRsZSwKKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+cGRldiwgcy0+c2dfaGFuZGxlLAogCQkJc2l6ZW9mKHN0cnVjdCBpdnR2X3NnX2VsZW1lbnQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfc3RyZWFtX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPml0di0+ZGV2LCBzLT5zZ19oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPnBkZXYsIHMtPnNnX2hhbmRsZSwKIAkJCXNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwppbmRleCA4NTRhOTUwLi4xNWRhMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogc3RhdGljIHZvaWQgaXZ0dl9zdHJlYW1faW5pdChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW3R5cGVdOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKmRldiA9IHMtPnY0bDJkZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHMtPnZkZXY7CiAKLQkvKiB3ZSBuZWVkIHRvIGtlZXAgdjRsMmRldiwgc28gcmVzdG9yZSBpdCBhZnRlcndhcmRzICovCisJLyogd2UgbmVlZCB0byBrZWVwIHZkZXYsIHNvIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcyAqLwogCW1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKLQlzLT52NGwyZGV2ID0gZGV2OworCXMtPnZkZXYgPSB2ZGV2OwogCiAJLyogaW5pdGlhbGl6ZSBpdnR2X3N0cmVhbSBmaWVsZHMgKi8KIAlzLT5pdHYgPSBpdHY7CkBAIC0xNzIsMTAgKzE3MiwxMCBAQAogCWludCBudW1fb2Zmc2V0ID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwogCWludCBudW0gPSBpdHYtPmluc3RhbmNlICsgaXZ0dl9maXJzdF9taW5vciArIG51bV9vZmZzZXQ7CiAKLQkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2NGwyZGV2ID09IE5VTEwsIHRoZW4KKwkvKiBUaGVzZSBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIGluaXRpYWxpemVkLiBJZiB2ZGV2ID09IE5VTEwsIHRoZW4KIAkgICB0aGlzIHN0cmVhbSBpcyBub3QgaW4gdXNlLiBJbiB0aGF0IGNhc2Ugbm8gb3RoZXIgZmllbGRzIGJ1dCB0aGVzZQogCSAgIGZvdXIgY2FuIGJlIHVzZWQuICovCi0Jcy0+djRsMmRldiA9IE5VTEw7CisJcy0+dmRldiA9IE5VTEw7CiAJcy0+aXR2ID0gaXR2OwogCXMtPnR5cGUgPSB0eXBlOwogCXMtPm5hbWUgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm5hbWU7CkBAIC0xOTcsMjEgKzE5NywyMSBAQAogCWl2dHZfc3RyZWFtX2luaXQoaXR2LCB0eXBlKTsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSB2NGwyIHZpZGVvIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlzLT52NGwyZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCXMtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocy0+dmRldiA9PSBOVUxMKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCBhbGxvY2F0ZSB2NGwyIHZpZGVvX2RldmljZSBmb3IgJXNcbiIsIHMtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzbnByaW50ZihzLT52NGwyZGV2LT5uYW1lLCBzaXplb2Yocy0+djRsMmRldi0+bmFtZSksICIlcyAlcyIsCi0JCQlpdHYtPmRldmljZS5uYW1lLCBzLT5uYW1lKTsKKwlzbnByaW50ZihzLT52ZGV2LT5uYW1lLCBzaXplb2Yocy0+dmRldi0+bmFtZSksICIlcyAlcyIsCisJCQlpdHYtPnY0bDJfZGV2Lm5hbWUsIHMtPm5hbWUpOwogCi0Jcy0+djRsMmRldi0+bnVtID0gbnVtOwotCXMtPnY0bDJkZXYtPnY0bDJfZGV2ID0gJml0di0+ZGV2aWNlOwotCXMtPnY0bDJkZXYtPmZvcHMgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7Ci0Jcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCXMtPnY0bDJkZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7Ci0JaXZ0dl9zZXRfZnVuY3Mocy0+djRsMmRldik7CisJcy0+dmRldi0+bnVtID0gbnVtOworCXMtPnZkZXYtPnY0bDJfZGV2ID0gJml0di0+djRsMl9kZXY7CisJcy0+dmRldi0+Zm9wcyA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0uZm9wczsKKwlzLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJcy0+dmRldi0+dHZub3JtcyA9IFY0TDJfU1REX0FMTDsKKwlpdnR2X3NldF9mdW5jcyhzLT52ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJCWlmIChpdnR2X3ByZXBfZGV2KGl0diwgdHlwZSkpCiAJCQlicmVhazsKIAotCQlpZiAoaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPT0gTlVMTCkKKwkJaWYgKGl0di0+c3RyZWFtc1t0eXBlXS52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAogCQkvKiBBbGxvY2F0ZSBTdHJlYW0gKi8KQEAgLTI0NywyOCArMjQ3LDI4IEBACiAJaW50IHZmbF90eXBlID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS52ZmxfdHlwZTsKIAlpbnQgbnVtOwogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkKKwlpZiAocy0+dmRldiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAJLyogY2FyZCBudW1iZXIgKyB1c2VyIGRlZmluZWQgb2Zmc2V0ICsgZGV2aWNlIG9mZnNldCAqLwogCWlmICh0eXBlICE9IElWVFZfRU5DX1NUUkVBTV9UWVBFX01QRykgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnNfbXBnID0gJml0di0+c3RyZWFtc1tJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEddOwogCi0JCWlmIChzX21wZy0+djRsMmRldikKLQkJCW51bSA9IHNfbXBnLT52NGwyZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CisJCWlmIChzX21wZy0+dmRldikKKwkJCW51bSA9IHNfbXBnLT52ZGV2LT5udW0gKyBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLm51bV9vZmZzZXQ7CiAJfQotCXZpZGVvX3NldF9kcnZkYXRhKHMtPnY0bDJkZXYsIHMpOworCXZpZGVvX3NldF9kcnZkYXRhKHMtPnZkZXYsIHMpOwogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+djRsMmRldiwgdmZsX3R5cGUsIG51bSkpIHsKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnZkZXYsIHZmbF90eXBlLCBudW0pKSB7CiAJCUlWVFZfRVJSKCJDb3VsZG4ndCByZWdpc3RlciB2NGwyIGRldmljZSBmb3IgJXMga2VybmVsIG51bWJlciAlZFxuIiwKIAkJCQlzLT5uYW1lLCBudW0pOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKLQkJcy0+djRsMmRldiA9IE5VTEw7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnZkZXYpOworCQlzLT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52ZGV2LT5udW07CiAKIAlzd2l0Y2ggKHZmbF90eXBlKSB7CiAJY2FzZSBWRkxfVFlQRV9HUkFCQkVSOgpAQCAtMzE2LDkgKzMxNiw5IEBACiAKIAkvKiBUZWFyZG93biBhbGwgc3RyZWFtcyAqLwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBJVlRWX01BWF9TVFJFQU1TOyB0eXBlKyspIHsKLQkJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGl0di0+c3RyZWFtc1t0eXBlXS52NGwyZGV2OworCQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gaXR2LT5zdHJlYW1zW3R5cGVdLnZkZXY7CiAKLQkJaXR2LT5zdHJlYW1zW3R5cGVdLnY0bDJkZXYgPSBOVUxMOworCQlpdHYtPnN0cmVhbXNbdHlwZV0udmRldiA9IE5VTEw7CiAJCWlmICh2ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIApAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJaW50IGNhcHR5cGUgPSAwLCBzdWJ0eXBlID0gMDsKIAlpbnQgZW5hYmxlX3Bhc3N0aHJvdWdoID0gMDsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlN0YXJ0IGVuY29kZXIgc3RyZWFtICVzXG4iLCBzLT5uYW1lKTsKQEAgLTYxMSw3ICs2MTEsNyBAQAogCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwogCWludCBkYXRhdHlwZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlNldHRpbmcgc29tZSBpbml0aWFsIGRlY29kZXIgc2V0dGluZ3NcbiIpOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChJVlRWX0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkKQEAgLTcwNSw3ICs3MDUsNyBAQAogCWZvciAoaSA9IElWVFZfTUFYX1NUUkVBTVMgLSAxOyBpID49IDA7IGktLSkgewogCQlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMgPSAmaXR2LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHRlc3RfYml0KElWVFZfRl9TX1NUUkVBTUlORywgJnMtPnNfZmxhZ3MpKSB7CiAJCQlpdnR2X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOwpAQCAtNzIwLDcgKzcyMCw3IEBACiAJaW50IGNhcF90eXBlOwogCWludCBzdG9wbW9kZTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB5b3UgYXJlIGFsbG93ZWQgdG8gc3RvcCB0aGUgY2FwdHVyZQpAQCAtODM0LDcgKzgzNCw3IEBACiB7CiAJc3RydWN0IGl2dHYgKml0diA9IHMtPml0djsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVYgJiYgcy0+dHlwZSAhPSBJVlRWX0RFQ19TVFJFQU1fVFlQRV9NUEcpCkBAIC04OTUsNyArODk1LDcgQEAKIAlzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnl1dl9zdHJlYW0gPSAmaXR2LT5zdHJlYW1zW0lWVFZfRU5DX1NUUkVBTV9UWVBFX1lVVl07CiAJc3RydWN0IGl2dHZfc3RyZWFtICpkZWNfc3RyZWFtID0gJml0di0+c3RyZWFtc1tJVlRWX0RFQ19TVFJFQU1fVFlQRV9ZVVZdOwogCi0JaWYgKHl1dl9zdHJlYW0tPnY0bDJkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHl1dl9zdHJlYW0tPnZkZXYgPT0gTlVMTCB8fCBkZWNfc3RyZWFtLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJSVZUVl9ERUJVR19JTkZPKCJpdnR2IGlvY3RsOiBTZWxlY3QgcGFzc3Rocm91Z2ggbW9kZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKaW5kZXggNDYwZGIwMy4uZDA3YWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYwpAQCAtOTMsNyArOTMsNyBAQAogewogCWlmIChpdHYtPnVkbWEuU0dfaGFuZGxlID09IDApIHsKIAkJLyogTWFwIERNQSBQYWdlIEFycmF5IEJ1ZmZlciAqLwotCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5kZXYsIGl0di0+dWRtYS5TR2FycmF5LAorCQlpdHYtPnVkbWEuU0dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5wZGV2LCBpdHYtPnVkbWEuU0dhcnJheSwKIAkJCSAgIHNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpdnR2X3VkbWFfc3luY19mb3JfY3B1KGl0dik7CiAJfQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJfQogCiAJLyogTWFwIFNHIExpc3QgKi8KLQlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYS0+U0dfbGVuZ3RoID0gcGNpX21hcF9zZyhpdHYtPnBkZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogRmlsbCBTRyBBcnJheSB3aXRoIG5ldyB2YWx1ZXMgKi8KIAlpdnR2X3VkbWFfZmlsbF9zZ19hcnJheSAoZG1hLCBpdnR2X2Rlc3RfYWRkciwgMCwgLTEpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAkvKiBVbm1hcCBTY2F0dGVybGlzdCAqLwogCWlmIChkbWEtPlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGRtYS0+U0dsaXN0LCBkbWEtPnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlwY2lfdW5tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZG1hLT5TR19sZW5ndGggPSAwOwogCX0KIAkvKiBzeW5jIERNQSAqLwpAQCAtMTkxLDEzICsxOTEsMTMgQEAKIAogCS8qIFVubWFwIFNHIEFycmF5ICovCiAJaWYgKGl0di0+dWRtYS5TR19oYW5kbGUpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCQkgc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogVW5tYXAgU2NhdHRlcmxpc3QgKi8KIAlpZiAoaXR2LT51ZG1hLlNHX2xlbmd0aCkgewotCQlwY2lfdW5tYXBfc2coaXR2LT5kZXYsIGl0di0+dWRtYS5TR2xpc3QsIGl0di0+dWRtYS5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NnKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHbGlzdCwgaXR2LT51ZG1hLnBhZ2VfY291bnQsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBJVlRWX0RNQV9TR19PU0RfRU5UOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaAppbmRleCBkZjcyN2UyLi5lZTNjOWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5oCkBAIC0zNSwxMyArMzUsMTMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfdWRtYV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGl2dHYgKml0dikKIHsKLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoKHN0cnVjdCBwY2lfZGV2ICopaXR2LT5kZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKIAkJc2l6ZW9mKGl0di0+dWRtYS5TR2FycmF5KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X3VkbWFfc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KChzdHJ1Y3QgcGNpX2RldiAqKWl0di0+ZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAorCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCXNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCmluZGV4IDVjNWQxYzQuLmY0MjBkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jCkBAIC0xODUsNiArMTg1LDggQEAKIAkJc2l6ZSA9IDQgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0gZWxzZSB7CiAJCW1lbWNweShkc3QgKyBzZCwgIml0djAiLCA0KTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1swXSk7CisJCWNwdV90b19sZTMycygmbGluZW1hc2tbMV0pOwogCQltZW1jcHkoZHN0ICsgc2QgKyA0LCAmbGluZW1hc2tbMF0sIDgpOwogCQlzaXplID0gMTIgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaAppbmRleCA4Y2Q3NTNkLi5iNTMwZGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZGVmaW5lIElWVFZfRFJJVkVSX05BTUUgIml2dHYiCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMQogI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SIDQKLSNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDAKKyNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMIDEKIAogI2RlZmluZSBJVlRWX1ZFUlNJT04gX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUikgIi4iIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fTUlOT1IpICIuIiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCiAjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oSVZUVl9EUklWRVJfVkVSU0lPTl9NQUpPUixJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SLElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKaW5kZXggZWU5MTEwNy4uNzkxMmVkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYteXV2LmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCQlkbWEtPnBhZ2VfY291bnQgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZG1hLT5TR19sZW5ndGggPSBwY2lfbWFwX3NnKGl0di0+ZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCS8qIEZpbGwgU0cgQXJyYXkgd2l0aCBuZXcgdmFsdWVzICovCiAJaXZ0dl91ZG1hX2ZpbGxfc2dfYXJyYXkoZG1hLCB5X2J1ZmZlcl9vZmZzZXQsIHV2X2J1ZmZlcl9vZmZzZXQsIHlfc2l6ZSk7CkBAIC05MTAsNyArOTEwLDcgQEAKIAkvKiBXZSBuZWVkIGEgYnVmZmVyIGZvciBibGFua2luZyB3aGVuIFkgcGxhbmUgaXMgb2Zmc2V0IC0gbm9uLWZhdGFsIGlmIHdlIGNhbid0IGdldCBvbmUgKi8KIAl5aS0+YmxhbmtpbmdfcHRyID0ga3phbGxvYyg3MjAgKiAxNiwgR0ZQX0tFUk5FTHxfX0dGUF9OT1dBUk4pOwogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7Ci0JCXlpLT5ibGFua2luZ19kbWFwdHIgPSBwY2lfbWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJeWktPmJsYW5raW5nX2RtYXB0ciA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgeWktPmJsYW5raW5nX3B0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9IGVsc2UgewogCQl5aS0+YmxhbmtpbmdfZG1hcHRyID0gMDsKIAkJSVZUVl9ERUJVR19XQVJOKCJGYWlsZWQgdG8gYWxsb2NhdGUgeXV2IGJsYW5raW5nIGJ1ZmZlclxuIik7CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCWlmICh5aS0+YmxhbmtpbmdfcHRyKSB7CiAJCWtmcmVlKHlpLT5ibGFua2luZ19wdHIpOwogCQl5aS0+YmxhbmtpbmdfcHRyID0gTlVMTDsKLQkJcGNpX3VubWFwX3NpbmdsZShpdHYtPmRldiwgeWktPmJsYW5raW5nX2RtYXB0ciwgNzIwKjE2LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShpdHYtPnBkZXYsIHlpLT5ibGFua2luZ19kbWFwdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CiAJfQogCiAJLyogSW52YWxpZGF0ZSB0aGUgb2xkIGRpbWVuc2lvbiBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCmluZGV4IDM2YWJkMmEuLjY2ZTZlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKQEAgLTExOTIsMTIgKzExOTIsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGl2dHZmYl9jYWxsYmFja19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmIChpdnR2ZmJfaW5pdF9jYXJkKGl0dikgPT0gMCkgewogCQkJSVZUVkZCX0lORk8oIkZyYW1lYnVmZmVyIHJlZ2lzdGVyZWQgb24gJXNcbiIsCi0JCQkJCWl0di0+ZGV2aWNlLm5hbWUpOworCQkJCQlpdHYtPnY0bDJfZGV2Lm5hbWUpOwogCQkJKCooaW50ICopcCkrKzsKIAkJfQogCX0KQEAgLTEyMDcsNyArMTIwNyw3IEBACiBzdGF0aWMgaW50IGl2dHZmYl9jYWxsYmFja19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIAogCWlmIChpdHYgJiYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpKSB7CiAJCWlmICh1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZpdHYtPm9zZF9pbmZvLT5pdnR2ZmJfaW5mbykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCmluZGV4IGJhZTJkMmIuLjg0MTAyNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwpAQCAtMzksMTkgKzM5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJrczAxMjcuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJLUzAxMjcgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJ5YW4gRHJha2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBLU19UWVBFX1VOS05PV04JMAotI2RlZmluZSBLU19UWVBFXzAxMjJTCTEKLSNkZWZpbmUgS1NfVFlQRV8wMTI3CTIKLSNkZWZpbmUgS1NfVFlQRV8wMTI3QgkzCisvKiBBZGRyZXNzZXMgKi8KKyNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKKyNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKKwogCiAvKiBrczAxMjcgY29udHJvbCByZWdpc3RlcnMgKi8KICNkZWZpbmUgS1NfU1RBVCAgICAgMHgwMApAQCAtMTk3LDE1ICsxOTgsMTcgQEAKIH07CiAKIHN0cnVjdCBrczAxMjcgewotCWludAkJZm9ybWF0X3dpZHRoOwotCWludAkJZm9ybWF0X2hlaWdodDsKLQlpbnQJCWNhcF93aWR0aDsKLQlpbnQJCWNhcF9oZWlnaHQ7Ci0JaW50CQlub3JtOwotCWludAkJa3NfdHlwZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQJbm9ybTsKKwlpbnQJCWlkZW50OwogCXU4IAkJcmVnc1syNTZdOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3MwMTI3ICp0b19rczAxMjcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qga3MwMTI3LCBzZCk7Cit9CisKIAogc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLwogCkBAIC0zMTEsNDMgKzMxNCw0NSBAQAogICovCiAKIAotc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1OCByZWcpCitzdGF0aWMgdTgga3MwMTI3X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljaGFyIHZhbCA9IDA7CiAJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewotCQl7IGMtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCi0JCXsgYy0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsIH0KKwkJeyBjbGllbnQtPmFkZHIsIDAsIHNpemVvZihyZWcpLCAmcmVnIH0sCisJCXsgY2xpZW50LT5hZGRyLCBJMkNfTV9SRCB8IEkyQ19NX05PX1JEX0FDSywgc2l6ZW9mKHZhbCksICZ2YWwgfQogCX07CiAJaW50IHJldDsKIAotCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKIAlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpCi0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZWFkIGVycm9yXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVhZCBlcnJvclxuIik7CiAKIAlyZXR1cm4gdmFsOwogfQogCiAKLXN0YXRpYyB2b2lkIGtzMDEyN193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnLCB1OCB2YWwpCitzdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAljaGFyIG1zZ1tdID0geyByZWcsIHZhbCB9OwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjLCBtc2csIHNpemVvZihtc2cpKSAhPSBzaXplb2YobXNnKSkKLQkJdjRsX2RiZygxLCBkZWJ1ZywgYywgIndyaXRlIGVycm9yXG4iKTsKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIndyaXRlIGVycm9yXG4iKTsKIAogCWtzLT5yZWdzW3JlZ10gPSB2YWw7CiB9CiAKIAogLyogZ2VuZXJpYyBiaXQtdHdpZGRsaW5nICovCi1zdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCitzdGF0aWMgdm9pZCBrczAxMjdfYW5kX29yKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggYW5kX3YsIHU4IG9yX3YpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CiAKIAl1OCB2YWwgPSBrcy0+cmVnc1tyZWddOwogCXZhbCA9ICh2YWwgJiBhbmRfdikgfCBvcl92OwotCWtzMDEyN193cml0ZShjbGllbnQsIHJlZywgdmFsKTsKKwlrczAxMjdfd3JpdGUoc2QsIHJlZywgdmFsKTsKIH0KIAogCkBAIC0zNTUsNDM5ICszNjAsMzYzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBrczAxMjcgcHJpdmF0ZSBhcGkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBrczAxMjdfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdGF0aWMgdm9pZCBrczAxMjdfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAl1OCAqdGFibGUgPSByZWdfZGVmYXVsdHM7CiAJaW50IGk7CiAKLQlrcy0+a3NfdHlwZSA9IEtTX1RZUEVfVU5LTk9XTjsKKwlrcy0+aWRlbnQgPSBWNEwyX0lERU5UX0tTMDEyNzsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGMsICJyZXNldFxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmVzZXRcbiIpOwogCW1zbGVlcCgxKTsKIAogCS8qIGluaXRpYWxpemUgYWxsIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KIAkvKiAoZXhjZXB0IFNUQVQsIDB4MjEsIDB4MjIsIFRFU1QgYW5kIDB4MzgsMHgzOSkgKi8KIAogCWZvciAoaSA9IDE7IGkgPCAzMzsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCWZvciAoaSA9IDM1OyBpIDwgNDA7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBpLCB0YWJsZVtpXSk7CiAKIAlmb3IgKGkgPSA0MTsgaSA8IDU2OyBpKyspCi0JCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CisJCWtzMDEyN193cml0ZShzZCwgaSwgdGFibGVbaV0pOwogCiAJZm9yIChpID0gNTg7IGkgPCA2NDsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCi0JaWYgKChrczAxMjdfcmVhZChjLCBLU19TVEFUKSAmIDB4ODApID09IDApIHsKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjJTOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTIycyBmb3VuZFxuIik7CisJaWYgKChrczAxMjdfcmVhZChzZCwgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7CisJCWtzLT5pZGVudCA9IFY0TDJfSURFTlRfS1MwMTIyUzsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAia3MwMTIycyBmb3VuZFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlzd2l0Y2ggKGtzMDEyN19yZWFkKGMsIEtTX0NNREUpICYgMHgwZikgeworCXN3aXRjaCAoa3MwMTI3X3JlYWQoc2QsIEtTX0NNREUpICYgMHgwZikgewogCWNhc2UgMDoKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjc7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJrczAxMjcgZm91bmRcbiIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjcgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWNhc2UgOToKLQkJa3MtPmtzX3R5cGUgPSBLU19UWVBFXzAxMjdCOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKKwkJa3MtPmlkZW50ID0gVjRMMl9JREVOVF9LUzAxMjdCOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJrczAxMjdCIFJldmlzaW9uIEEgZm91bmRcbiIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duIHJldmlzaW9uXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidW5rbm93biByZXZpc2lvblxuIik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBrczAxMjdfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGtzMDEyN19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IGtzMDEyNyAqa3MgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JaW50CQkqaWFyZyA9IChpbnQgKilhcmc7Ci0JaW50CQlzdGF0dXM7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JaWYgKCFrcykKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzI6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMzoKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzU6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogQ29tcG9zaXRlXG4iLCByb3V0ZS0+aW5wdXQpOworCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7CisJCS8qIFZTRT0wICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOworCQkvKiBzZXQgaW5wdXQgbGluZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURCLCAgIDB4YjAsIHJvdXRlLT5pbnB1dCk7CisJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7CisJCS8qIGFuYWxvZyBpbnB1dCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDApOworCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOworCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19MVU1BXSl8MHgwYyk7CisJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKwkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0lOSVRcbiIpOwotCQlrczAxMjdfcmVzZXQoYyk7CisJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8xOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8yOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8zOgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV80OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgotCQljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV82OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IENvbXBvc2l0ZVxuIiwgKmlhcmcpOwotCQkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwotCQkJLyogVlNFPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7Ci0JCQkvKiBzZXQgaW5wdXQgbGluZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICppYXJnKTsKLQkJCS8qIG5vbi1mcmVlcnVubmluZyBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHgwYSk7Ci0JCQkvKiBhbmFsb2cgaW5wdXQgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKLQkJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7Ci0JCQkvKiBjaHJvbWEgdHJhcCwgSFlCV1I9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsCi0JCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfTFVNQV0pfDB4MGMpOwotCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwotCQkJLyogbWFudWFsIGNocm9tYSBjb21iIC4yNSAuNSAuMjUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLCAweDkwKTsKKwljYXNlIEtTX0lOUFVUX1NWSURFT18xOgorCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzI6CisJY2FzZSBLU19JTlBVVF9TVklERU9fMzoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZyAlZDogUy1WaWRlb1xuIiwgcm91dGUtPmlucHV0KTsKKwkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkvKiBWU0U9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJLyogc2V0IGlucHV0IGxpbmUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCByb3V0ZS0+aW5wdXQpOworCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkvKiBhbmFsb2cgaW5wdXQgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfTFVNQSwgMHgwMCwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOworCQkvKiBkaXNhYmxlIGx1bWEgY29tYiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsCisJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19WRVJUSUFdJjB4ZjApfDB4MDEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CiAKLQkJCS8qIGNocm9tYSBwYXRoIGRlbGF5ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwgMHg5MCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKIAotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1NWSURFT18xOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18yOgotCQljYXNlIEtTX0lOUFVUX1NWSURFT18zOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQgJWQ6IFMtVmlkZW9cbiIsICppYXJnKTsKLQkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKLQkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwotCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7Ci0JCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwotCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7Ci0JCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAweDAwLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfTFVNQV0pOwotCQkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LAotCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX1ZFUlRJQV0mMHhmMCl8MHgwMSk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKLQkJCWtzMDEyN193cml0ZShjLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX0lOUFVUX1lVVjY1NjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUIDE1OiBZVVY2NTZcbiIpOwotCQkJaWYgKGtzLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAotCQkJICAgIGtzLT5ub3JtID09IEtTX1NURF9QQUxfTSkKLQkJCQkvKiBmb3JjZSA2MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAzKTsKLQkJCWVsc2UKLQkJCQkvKiBmb3JjZSA1MCBIeiAqLwotCQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLwotCQkJLyogc2V0IGlucHV0IGxpbmUgYW5kIFZBTElHTiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURCLCAgIDB4YjAsICgqaWFyZyB8IDB4NDApKTsKLQkJCS8qIGZyZWVydW5uaW5nIG1vZGUsICovCi0JCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDg3KTsKLQkJCS8qIGRpZ2l0YWwgaW5wdXQsIFNZTkRJUiA9IDAgSU5QU0w9MDEgQ0xLRElSPTAgRUFWPTAgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKLQkJCS8qIGRpc2FibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MzApOwotCQkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCi0JCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwotCi0JCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01CLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DT04sIDB4MDAsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KLQkJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19TQVQsIDB4MDAsIDB4ZTgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19IVUUsIDB4MDAsIDApOwotCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VHQUlOLCAweDAwLCAyMzgpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7Ci0KLQkJCS8qVU9GRjoweDMwLCBWT0ZGOjB4MzAsIFRTVENHTj0xICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGSCwgMHgwMCwgMHg0Zik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1VWT0ZGTCwgMHgwMCwgMHgwMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfSU5QVVQ6IFVua25vd24gaW5wdXQgJWRcbiIsICppYXJnKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogaGFjazogQ0RNTFBGIHNvbWV0aW1lcyBzcG9udGFuZW91c2x5IHN3aXRjaGVzIG9uOyAqLwotCQkvKiBmb3JjZSBiYWNrIG9mZiAqLwotCQlrczAxMjdfd3JpdGUoYywgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VHQUlOLCByZWdfZGVmYXVsdHNbS1NfVUdBSU5dKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19WR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1ZHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZILCByZWdfZGVmYXVsdHNbS1NfVVZPRkZIXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVVZPRkZMLCByZWdfZGVmYXVsdHNbS1NfVVZPRkZMXSk7CiAJCWJyZWFrOwogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JCXN3aXRjaCgqaWFyZykgewotCQljYXNlIEtTX09VVFBVVF9ZVVY2NTZFOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfT1VUUFVUOiBPVVRQVVRfWVVWNjU2RSAoTWlzc2luZylcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBLU19JTlBVVF9ZVVY2NTY6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfcm91dGluZyAxNTogWVVWNjU2XG4iKTsKKwkJaWYgKGtzLT5ub3JtICYgVjRMMl9TVERfNTI1XzYwKQorCQkJLyogZm9yY2UgNjAgSHogKi8KKwkJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7CisJCWVsc2UKKwkJCS8qIGZvcmNlIDUwIEh6ICovCisJCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDIpOwogCi0JCWNhc2UgS1NfT1VUUFVUX0VYVjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX0VYVlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGYwLCAweDA5KTsKLQkJCWJyZWFrOwotCQl9CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREEsICAgMHhmZiwgMHg0MCk7IC8qIFZTRT0xICovCisJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCAocm91dGUtPmlucHV0IHwgMHg0MCkpOworCQkvKiBmcmVlcnVubmluZyBtb2RlLCAqLworCQkvKiBUU1RHRU4gPSAxIFRTVEdGUj0xMSBUU1RHUEg9MCBUU1RHUEs9MCAgVk1FTT0xKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQywgICAweDcwLCAweDg3KTsKKwkJLyogZGlnaXRhbCBpbnB1dCwgU1lORElSID0gMCBJTlBTTD0wMSBDTEtESVI9MCBFQVY9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURELCAgIDB4MDMsIDB4MDgpOworCQkvKiBkaXNhYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKKwkJLyogSFlQSyA9MDEgQ1RSQVAgPSAwIEhZQldSPTAgUEVEPTEgUkdCSD0xIFVOSVQ9MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19MVU1BLCAgIDB4MDAsIDB4NzEpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUMsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX1ZFUlRJQ10mMHhmMCk7CisKKwkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOworCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQiwgMHgwZiwKKwkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfQ0hST01CXSYweGYwKTsKKworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DT04sIDB4MDAsIDB4MDApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19CUlQsIDB4MDAsIDMyKTsJLyogc3BlYzogMzQgKi8KKwkJCS8qIHNwZWM6IDIyOSAoZTUpICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1NBVCwgMHgwMCwgMHhlOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0hVRSwgMHgwMCwgMCk7CisKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVUdBSU4sIDB4MDAsIDIzOCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1ZHQUlOLCAweDAwLCAweDAwKTsKKworCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfTk9STTogLyogc2FtIFRoaXMgYmxvY2sgbWl4ZXMgb2xkIGFuZCBuZXcgbm9ybSBuYW1lcy4uLiAqLwotCQkvKiBTZXQgdG8gYXV0b21hdGljIFNFQ0FNL0ZzYyBtb2RlICovCi0JCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwotCi0JCWtzLT5ub3JtID0gKmlhcmc7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJLyogdGhpcyBpcyB1bnRlc3RlZCAhISAqLwotCQkvKiBJdCBqdXN0IGRldGVjdHMgUEFMX04vTlRTQ19NIChubyBzcGVjaWFsIGZyZXF1ZW5jaWVzKSAqLwotCQkvKiBBbmQgeW91IGhhdmUgdG8gc2V0IHRoZSBzdGFuZGFyZCBhIHNlY29uZCB0aW1lIGFmdGVyd2FyZHMgKi8KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9OT1JNOiBBVVRPXG4iKTsKLQotCQkJLyogVGhlIGNoaXAgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0ICovCi0JCQkvKiBiYXNlZCBvbiB0aGUgY3VycmVudCBmaWVsZCByYXRlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7Ci0JCQkvKiBUaGlzIGlzIHdyb25nIGZvciBQQUwgISBBcyBJIHNhaWQsICovCi0JCQkvKiB5b3UgbmVlZCB0byBzZXQgdGhlIHN0YW5kYXJkIG9uY2UgYWdhaW4gISEgKi8KLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfTk9STTogTlRTQ19NXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX05UU0NfTjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogTlRTQ19OIChmaXhtZSlcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyNDA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFBBTF9OXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgS1NfU1REX1BBTF9NOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiS1MwMTI3X1NFVF9OT1JNOiBQQUxfTSAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogU0VDQU1cbiIpOwotCQkJa3MtPmZvcm1hdF9oZWlnaHQgPSAyOTA7Ci0JCQlrcy0+Zm9ybWF0X3dpZHRoID0gNzA0OwotCi0JCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTArMSk7Ci0KLQkJCS8qIGRpZCBpdCBhdXRvZGV0ZWN0PyAqLwotCQkJaWYgKGtzMDEyN19yZWFkKGMsIEtTX0RFTU9EKSAmIDB4NDApCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGZvcmNlIHRvIHNlY2FtIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IFVua25vd24gbm9ybSAlZFxuIiwgKmlhcmcpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkiREVDT0RFUl9TRVRfUElDVFVSRTogbm90IHlldCBzdXBwb3J0ZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0JSSUdIVE5FU1M6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRSAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NPTlRSQVNUOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IVUU6IE1lcmdlIGludG8gREVDT0RFUl9TRVRfUElDVFVSRT8gKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9TQVRVUkFUSU9OOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0NfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9BR0M6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQ0hST01BX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfUElYQ0xLX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfR0FNTUFfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WR0FJTjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVk6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VVOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVjogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9WU0FMSUdOX01PREU6ICovCi0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCBlbmFibGU7Ci0KLQkJaWFyZyA9IGFyZzsKLQkJZW5hYmxlID0gKCppYXJnICE9IDApOwotCQlpZiAoZW5hYmxlKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb25cbiIpOwotCQkJLyogQWxsIG91dHB1dCBwaW5zIG9uICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX09GTVRBLCAweGNmLCAweDMwKTsKLQkJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7Ci0JCX0gZWxzZSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX0VOQUJMRV9PVVRQVVQgb2ZmXG4iKTsKLQkJCS8qIFZpZGVvIG91dHB1dCBwaW5zIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7Ci0JCQkvKiBJZ25vcmUgdGhlIE9FTiBwaW4gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0RFTSwgMHg3ZiwgMHg4MCk7Ci0JCX0KKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19yb3V0aW5nOiBVbmtub3duIGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOwogCQlicmVhazsKIAl9CiAKLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9PVVRQVVRfTU9ERTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9XSURUSDogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9IRUlHSFQ6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFNDQUxFOiAqLworCS8qIGhhY2s6IENETUxQRiBzb21ldGltZXMgc3BvbnRhbmVvdXNseSBzd2l0Y2hlcyBvbjsgKi8KKwkvKiBmb3JjZSBiYWNrIG9mZiAqLworCWtzMDEyN193cml0ZShzZCwgS1NfREVNT0QsIHJlZ19kZWZhdWx0c1tLU19ERU1PRF0pOworCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJERUNPREVSX0dFVF9TVEFUVVNcbiIpOwotCQkqaWFyZyA9IDA7Ci0JCXN0YXR1cyA9IGtzMDEyN19yZWFkKGMsIEtTX1NUQVQpOwotCQlpZiAoIShzdGF0dXMgJiAweDIwKSkJCSAvKiBOT1ZJRCBub3Qgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0dPT0QpOwotCQlpZiAoKHN0YXR1cyAmIDB4MDEpKQkJICAgICAgLyogQ0xPQ0sgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX0NPTE9SKTsKLQkJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KLQkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfUEFMKTsKLQkJZWxzZQotCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19OVFNDKTsKLQkJYnJlYWs7CitzdGF0aWMgaW50IGtzMDEyN19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCi0JLyogQ2F0Y2ggYW55IHVua25vd24gY29tbWFuZCAqLwotCWRlZmF1bHQ6Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ1bmtub3duOiAweCUwOHhcbiIsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIFNldCB0byBhdXRvbWF0aWMgU0VDQU0vRnNjIG1vZGUgKi8KKwlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisKKwlrcy0+bm9ybSA9IHN0ZDsKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUxfTikgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IE5UU0NfTiAoZml4bWUpXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFBBTF9OXG4iKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweDlmLCAweDIwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTF9NKSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSJzX3N0ZDogUEFMX00gKGZpeG1lKVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFNFQ0FNXG4iKTsKKworCQkvKiBzZXQgdG8gc2VjYW0gYXV0b2RldGVjdGlvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUEsIDB4ZGYsIDB4MjApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19ERU1PRCwgMHhmMCwgMHgwMCk7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWi8xMCsxKTsKKworCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KKwkJaWYgKCEoa3MwMTI3X3JlYWQoc2QsIEtTX0RFTU9EKSAmIDB4NDApKQorCQkJLyogZm9yY2UgdG8gc2VjYW0gbW9kZSAqLworCQkJa3MwMTI3X2FuZF9vcihzZCwgS1NfREVNT0QsIDB4ZjAsIDB4MGYpOworCX0gZWxzZSB7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RkOiBVbmtub3duIG5vcm0gJWxseFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGtzMDEyN19zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfc3RyZWFtKCVkKVxuIiwgZW5hYmxlKTsKKwlpZiAoZW5hYmxlKSB7CisJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7CisJCS8qIE9iZXkgdGhlIE9FTiBwaW4gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0RFTSwgMHg3ZiwgMHgwMCk7CisJfSBlbHNlIHsKKwkJLyogVmlkZW8gb3V0cHV0IHBpbnMgb2ZmICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX09GTVRBLCAweGNmLCAweDAwKTsKKwkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NERU0sIDB4N2YsIDB4ODApOworCX0KKwlyZXR1cm4gMDsKK30KIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLSNkZWZpbmUgSTJDX0tTMDEyN19BRERPTiAgIDB4RDgKLSNkZWZpbmUgSTJDX0tTMDEyN19PTkJPQVJEIDB4REEKK3N0YXRpYyBpbnQga3MwMTI3X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQoreworCWludCBzdGF0ID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJdTggc3RhdHVzOworCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX0FMTDsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQlJMkNfS1MwMTI3X0FERE9OID4+IDEsCi0JSTJDX0tTMDEyN19PTkJPQVJEID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQKKwlzdGF0dXMgPSBrczAxMjdfcmVhZChzZCwgS1NfU1RBVCk7CisJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLworCQlzdGF0ID0gMDsKKwlpZiAoIShzdGF0dXMgJiAweDAxKSkJCSAgICAgIC8qIENMT0NLIHNldCAqLworCQlzdGF0IHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7CisJaWYgKChzdGF0dXMgJiAweDA4KSkJCSAgIC8qIFBBTERFVCBzZXQgKi8KKwkJc3RkID0gVjRMMl9TVERfUEFMOworCWVsc2UKKwkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwlpZiAocHN0ZCkKKwkJKnBzdGQgPSBzdGQ7CisJaWYgKHBzdGF0dXMpCisJCSpwc3RhdHVzID0gc3RhdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrczAxMjdfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJxdWVyeXN0ZFxuIik7CisJcmV0dXJuIGtzMDEyN19zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQga3MwMTI3X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfaW5wdXRfc3RhdHVzXG4iKTsKKwlyZXR1cm4ga3MwMTI3X3N0YXR1cyhzZCwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIGludCBrczAxMjdfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBrcy0+aWRlbnQsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGtzMDEyN19jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0ga3MwMTI3X2dfY2hpcF9pZGVudCwKIH07CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMga3MwMTI3X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBrczAxMjdfc19zdGQsCit9OwogCi1zdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMga3MwMTI3X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0ga3MwMTI3X3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSBrczAxMjdfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0ga3MwMTI3X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IGtzMDEyN19nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGtzMDEyN19vcHMgPSB7CisJLmNvcmUgPSAma3MwMTI3X2NvcmVfb3BzLAorCS50dW5lciA9ICZrczAxMjdfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZrczAxMjdfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCitzdGF0aWMgaW50IGtzMDEyN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGtzMDEyNyAqa3M7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCXY0bF9pbmZvKGMsICIlcyBjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQljLT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCi0JCWMtPmFkZHIgPDwgMSwgYy0+YWRhcHRlci0+bmFtZSk7CisJdjRsX2luZm8oY2xpZW50LCAiJXMgY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJY2xpZW50LT5hZGRyID09IChJMkNfS1MwMTI3X0FERE9OID4+IDEpID8gImFkZG9uIiA6ICJvbi1ib2FyZCIsCisJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCiAJa3MgPSBremFsbG9jKHNpemVvZigqa3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoa3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywga3MpOwotCi0Ja3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CisJc2QgPSAma3MtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZrczAxMjdfb3BzKTsKIAogCS8qIHBvd2VyIHVwICovCiAJaW5pdF9yZWdfZGVmYXVsdHMoKTsKLQlrczAxMjdfd3JpdGUoYywgS1NfQ01EQSwgMHgyYyk7CisJa3MwMTI3X3dyaXRlKHNkLCBLU19DTURBLCAweDJjKTsKIAltZGVsYXkoMTApOwogCiAJLyogcmVzZXQgdGhlIGRldmljZSAqLwotCWtzMDEyN19yZXNldChjKTsKKwlrczAxMjdfaW5pdChzZCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqYykKK3N0YXRpYyBpbnQga3MwMTI3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWtzMDEyN193cml0ZShjLCBLU19PRk1UQSwgMHgyMCk7IC8qIHRyaXN0YXRlICovCi0Ja3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLwotCi0Ja2ZyZWUoa3MpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrczAxMjdfd3JpdGUoc2QsIEtTX09GTVRBLCAweDIwKTsgLyogdHJpc3RhdGUgKi8KKwlrczAxMjdfd3JpdGUoc2QsIEtTX0NNREEsIDB4MmMgfCAweDgwKTsgLyogcG93ZXIgZG93biAqLworCWtmcmVlKHRvX2tzMDEyNyhzZCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzMDEyN19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQga3MwMTI3X2lkW10gPSB7CiAJeyAia3MwMTI3IiwgMCB9LAorCXsgImtzMDEyN2IiLCAwIH0sCisJeyAia3MwMTIycyIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywga3MwMTI3X2lkKTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImtzMDEyNyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkuY29tbWFuZCA9IGtzMDEyN19jb21tYW5kLAogCS5wcm9iZSA9IGtzMDEyN19wcm9iZSwKIAkucmVtb3ZlID0ga3MwMTI3X3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0ga3MwMTI3X2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSBrczAxMjdfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmgKaW5kZXggMWVjNTc4OC4uY2I4YWJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5oCkBAIC0yNCw4ICsyNCw2IEBACiAjaWZuZGVmIEtTMDEyN19ICiAjZGVmaW5lIEtTMDEyN19ICiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCiAvKiBpbnB1dCBjaGFubmVscyAqLwogI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfMSAgICAwCiAjZGVmaW5lIEtTX0lOUFVUX0NPTVBPU0lURV8yICAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCmluZGV4IGRlMzk3ZWYuLjFmMzQwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwpAQCAtMTMyLDExICsxMzIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG01Mjc5MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgbTUyNzkwX2NvcmVfb3BzID0gewpAQCAtMjEwLDggKzIwNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJtNTI3OTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9NNTI3OTAsCi0JLmNvbW1hbmQgPSBtNTI3OTBfY29tbWFuZCwKIAkucHJvYmUgPSBtNTI3OTBfcHJvYmUsCiAJLnJlbW92ZSA9IG01Mjc5MF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gbTUyNzkwX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCBiNzZlMzNkLi4yYWQxMWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMTAxNyw3ICsxMDE3LDYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsICJtZXllIik7CiAJc3RyY3B5KGNhcC0+Y2FyZCwgIm1leWUiKTsKIAlzcHJpbnRmKGNhcC0+YnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShtZXllLm1jaGlwX2RldikpOwpAQCAtMTAzNiw4ICsxMDM1LDYgQEAKIAlpZiAoaS0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1zZXQoaSwgMCwgc2l6ZW9mKCppKSk7Ci0JaS0+aW5kZXggPSAwOwogCXN0cmNweShpLT5uYW1lLCAiQ2FtZXJhIik7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAKQEAgLTEyNTksMjIgKzEyNTYsMTMgQEAKIAlpZiAoZi0+aW5kZXggPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+aW5kZXggPT0gMCkgewogCQkvKiBzdGFuZGFyZCBZVVYgNDIyIGNhcHR1cmUgKi8KLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT5pbmRleCA9IDA7Ci0JCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCWYtPmZsYWdzID0gMDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiWVVWNDIyIik7CiAJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CiAJfSBlbHNlIHsKIAkJLyogY29tcHJlc3NlZCBNSlBFRyBjYXB0dXJlICovCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+aW5kZXggPSAxOwotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiTUpQRUciKTsKIAkJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CkBAIC0xMjg2LDkgKzEyNzQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9ZVVlWICYmCiAJICAgIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMTksMTIgKzEzMDQsNiBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KCZmLT5mbXQucGl4LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KIAlzd2l0Y2ggKG1leWUubWNoaXBfbW9kZSkgewogCWNhc2UgTUNISVBfSElDX01PREVfQ09OVF9PVVQ6CiAJZGVmYXVsdDoKQEAgLTEzNDEsOCArMTMyMCw2IEBACiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmLT5mbXQucGl4LndpZHRoICogMjsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguaGVpZ2h0ICoKIAkJCSAgICAgICBmLT5mbXQucGl4LmJ5dGVzcGVybGluZTsKLQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSAwOwotCWYtPmZtdC5waXgucHJpdiA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTAsOSArMTMyNyw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVZViAmJgogCSAgICBmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzk4LDkgKzEzNzIsNiBAQAogewogCWludCBpOwogCi0JaWYgKHJlcS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNDQxLDE1ICsxNDEyLDExIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaW50IGluZGV4ID0gYnVmLT5pbmRleDsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBidWYtPmluZGV4OwogCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBnYnVmZmVycykKKwlpZiAoaW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKLQotCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQlidWYtPmluZGV4ID0gaW5kZXg7CiAJYnVmLT5ieXRlc3VzZWQgPSBtZXllLmdyYWJfYnVmZmVyW2luZGV4XS5zaXplOwogCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKIApAQCAtMTQ3MSwxMyArMTQzOCwxMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCisJaWYgKGJ1Zi0+aW5kZXggPj0gZ2J1ZmZlcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1leWUuZ3JhYl9idWZmZXJbYnVmLT5pbmRleF0uc3RhdGUgIT0gTUVZRV9CVUZfVU5VU0VEKQpAQCAtMTQ5Nyw5ICsxNDYxLDYgQEAKIHsKIAlpbnQgcmVxbnI7CiAKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwppbmRleCA0ZDdhOTE4Li45ZThlMDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCkBAIC0zNjYsMjkgKzM2Niw2IEBACiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi1zdGF0aWMgaW50IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShpbnQgcnhzdWJjaGFucywgaW50IGF1ZG1vZGUpCi17Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKLQkJcmV0dXJuIFZJREVPX1NPVU5EX01PTk87Ci0JaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPKQotCQlyZXR1cm4gVklERU9fU09VTkRfU1RFUkVPOwotCWlmIChhdWRtb2RlID09IFY0TDJfVFVORVJfTU9ERV9MQU5HMikKLQkJcmV0dXJuIFZJREVPX1NPVU5EX0xBTkcyOwotCXJldHVybiBWSURFT19TT1VORF9MQU5HMTsKLX0KLQotc3RhdGljIGludCBtc3BfbW9kZV92NGwxX3RvX3Y0bDIoaW50IG1vZGUpCi17Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwotCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzIpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzI7Ci0JaWYgKG1vZGUgJiBWSURFT19TT1VORF9MQU5HMSkKLQkJcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci19Ci0jZW5kaWYKIAogc3RhdGljIGludCBtc3BfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CkBAIC00ODIsOTYgKzQ1OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGxvbmcgbXNwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIC0tLSB2NGwgaW9jdGxzIC0tLSAqLwotCS8qIHRha2UgY2FyZTogYnR0diBkb2VzIHVzZXJzcGFjZSBjb3B5aW5nLCB3ZSdsbCBnZXQgYQotCSAgIGtlcm5lbCBwb2ludGVyIGhlcmUuLi4gKi8KLQljYXNlIFZJRElPQ0dBVURJTzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX1ZPTFVNRSB8IFZJREVPX0FVRElPX01VVEFCTEU7Ci0JCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCi0JCQl2YS0+ZmxhZ3MgfD0gVklERU9fQVVESU9fQkFMQU5DRSB8Ci0JCQkJVklERU9fQVVESU9fQkFTUyB8Ci0JCQkJVklERU9fQVVESU9fVFJFQkxFOwotCQlpZiAoc3RhdGUtPm11dGVkKQotCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEU7Ci0JCXZhLT52b2x1bWUgPSBzdGF0ZS0+dm9sdW1lOwotCQl2YS0+YmFsYW5jZSA9IHN0YXRlLT52b2x1bWUgPyBzdGF0ZS0+YmFsYW5jZSA6IDMyNzY4OwotCQl2YS0+YmFzcyA9IHN0YXRlLT5iYXNzOwotCQl2YS0+dHJlYmxlID0gc3RhdGUtPnRyZWJsZTsKLQotCQlpZiAoc3RhdGUtPnJhZGlvKQotCQkJYnJlYWs7Ci0JCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQotCQkJbXNwX2RldGVjdF9zdGVyZW8oY2xpZW50KTsKLQkJdmEtPm1vZGUgPSBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoc3RhdGUtPnJ4c3ViY2hhbnMsIHN0YXRlLT5hdWRtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NTQVVESU86Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCXN0YXRlLT5tdXRlZCA9ICh2YS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFKTsKLQkJc3RhdGUtPnZvbHVtZSA9IHZhLT52b2x1bWU7Ci0JCXN0YXRlLT5iYWxhbmNlID0gdmEtPmJhbGFuY2U7Ci0JCXN0YXRlLT5iYXNzID0gdmEtPmJhc3M7Ci0JCXN0YXRlLT50cmVibGUgPSB2YS0+dHJlYmxlOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7Ci0KLQkJaWYgKHZhLT5tb2RlICE9IDAgJiYgc3RhdGUtPnJhZGlvID09IDAgJiYKLQkJICAgIHN0YXRlLT5hdWRtb2RlICE9IG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSkpIHsKLQkJCXN0YXRlLT5hdWRtb2RlID0gbXNwX21vZGVfdjRsMV90b192NGwyKHZhLT5tb2RlKTsKLQkJCW1zcF9zZXRfYXVkbW9kZShjbGllbnQpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmMgPSBhcmc7Ci0JCWludCB1cGRhdGUgPSAwOwotCQl2NGwyX3N0ZF9pZCBzdGQ7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCXVwZGF0ZSA9IDE7Ci0JCXN0YXRlLT5yYWRpbyA9IDA7Ci0JCWlmICh2Yy0+bm9ybSA9PSBWSURFT19NT0RFX1BBTCkKLQkJCXN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJZWxzZSBpZiAodmMtPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCXN0ZCA9IFY0TDJfU1REX1NFQ0FNOwotCQllbHNlCi0JCQlzdGQgPSBWNEwyX1NURF9OVFNDOwotCQlpZiAoc3RkICE9IHN0YXRlLT52NGwyX3N0ZCkgewotCQkJc3RhdGUtPnY0bDJfc3RkID0gc3RkOwotCQkJdXBkYXRlID0gMTsKLQkJfQotCQlpZiAodXBkYXRlKQotCQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0ZSRVE6Ci0JewotCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwotCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qIC0tLSB2NGwyIGlvY3RscyAtLS0gKi8KIHN0YXRpYyBpbnQgbXNwX3NfcmFkaW8oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKQEAgLTcxMywyMiArNjAwLDI0IEBACiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDU4ODgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04MjAsOSArNzA5LDYgQEAKIAkuZ19jdHJsID0gbXNwX2dfY3RybCwKIAkuc19jdHJsID0gbXNwX3NfY3RybCwKIAkucXVlcnljdHJsID0gbXNwX3F1ZXJ5Y3RybCwKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotCS5pb2N0bCA9IG1zcF9pb2N0bCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgbXNwX3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKaW5kZXggYzFiZjc1ZS4uZmE3ZTUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMDAxLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC03Myw5ICs3Miw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMDAxKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCi0JaW50IHN3aXRjaF9ncGlvOwogCXVuc2lnbmVkIGNoYXIgYXV0b2V4cG9zdXJlOwotCXVuc2lnbmVkIGNoYXIgZGF0YXdpZHRoOwogfTsKIAogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgY29uc3QgdTggcmVnKQpAQCAtMTgxLDkyICsxNzgsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsCi0JCQkgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCBncGlvID0gaWNsLT5ncGlvOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKLQkJLyogV2UgaGF2ZSBhIGRhdGEgYnVzIHN3aXRjaC4gKi8KLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJtdDltMDAxIik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwgIkNhbm5vdCBnZXQgR1BJTyAldVxuIiwKLQkJCQlncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDltMDAxLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5bTAwMS0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDltMDAxLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDltMDAxICptdDltMDAxKQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5bTAwMS0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OW0wMDEgKm10OW0wMDEsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OW0wMDEtPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OW0wMDEgKm10OW0wMDEpCi17Ci0jaWZkZWYgQ09ORklHX01UOU0wMDFfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDltMDAxLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwotCWludCByZXQ7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIHdpZHRoX2ZsYWcgPSBmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOwogCi0JLyogRmxhZ3MgdmFsaWRpdHkgdmVyaWZpZWQgaW4gdGVzdF9idXNfcGFyYW0gKi8KKwkvKiBPbmx5IG9uZSB3aWR0aCBiaXQgbWF5IGJlIHNldCAqLworCWlmICghaXNfcG93ZXJfb2ZfMih3aWR0aF9mbGFnKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKG10OW0wMDEtPmRhdGF3aWR0aCAhPSAxMCAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfMTApKSB8fAotCSAgICAobXQ5bTAwMS0+ZGF0YXdpZHRoICE9IDkgICYmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF85KSkgfHwKLQkgICAgKG10OW0wMDEtPmRhdGF3aWR0aCAhPSA4ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCkpKSB7Ci0JCS8qIFdlbGwsIHdlIGFjdHVhbGx5IG9ubHkgY2FuIGRvIDEwIG9yIDggYml0cy4uLiAqLwotCQlpZiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDltMDAxLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKKwlpZiAoaWNsLT5zZXRfYnVzX3BhcmFtKQorCQlyZXR1cm4gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CiAKLQkJbXQ5bTAwMS0+ZGF0YXdpZHRoID0gd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCA/IDggOiAxMDsKLQl9CisJLyoKKwkgKiBXaXRob3V0IGJvYXJkIHNwZWNpZmljIGJ1cyB3aWR0aCBzZXR0aW5ncyB3ZSBvbmx5IHN1cHBvcnQgdGhlCisJICogc2Vuc29ycyBuYXRpdmUgYnVzIHdpZHRoCisJICovCisJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdDltMDAxX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKQEAgLTI3NCwxOCArMjA3LDIwIEBACiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCS8qIE1UOU0wMDEgaGFzIGFsbCBjYXB0dXJlX2Zvcm1hdCBwYXJhbWV0ZXJzIGZpeGVkICovCi0JdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAotCQlTT0NBTV9NQVNURVI7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVI7CiAKLQlpZiAoYnVzX3N3aXRjaF9wb3NzaWJsZShtdDltMDAxKSkKLQkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyB8PSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpICYgU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDltMDAxX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0wMDEgKm10OW0wMDEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTAwMSwgaWNkKTsKIAlpbnQgcmV0OwpAQCAtMzI0LDYgKzI1OSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBmLT5mbXQucGl4LndpZHRoLAorCQkuaGVpZ2h0CT0gZi0+Zm10LnBpeC5oZWlnaHQsCisJfTsKKworCS8qIE5vIHN1cHBvcnQgZm9yIHNjYWxpbmcgc28gZmFyLCBqdXN0IGNyb3AuIFRPRE86IHVzZSBza2lwcGluZyAqLworCXJldHVybiBtdDltMDAxX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IG10OW0wMDFfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTQ0OSw2ICszOTgsNyBAQAogCS5yZWxlYXNlCQk9IG10OW0wMDFfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDltMDAxX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDltMDAxX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gbXQ5bTAwMV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBtdDltMDAxX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gbXQ5bTAwMV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OW0wMDFfc2V0X2J1c19wYXJhbSwKQEAgLTU4Myw2ICs1MzMsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogV2UgbXVzdCBoYXZlIGEgcGFyZW50IGJ5IG5vdy4gQW5kIGl0IGNhbm5vdCBiZSBhIHdyb25nIG9uZS4KIAkgKiBTbyB0aGlzIGVudGlyZSB0ZXN0IGlzIGNvbXBsZXRlbHkgcmVkdW5kYW50LiAqLwpAQCAtNjAzLDE4ICs1NTQsMTAgQEAKIAljYXNlIDB4ODQyMToKIAkJbXQ5bTAwMS0+bW9kZWwgPSBWNEwyX0lERU5UX01UOU0wMDFDMTJTVDsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5bTAwMV9jb2xvdXJfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfY29sb3VyX2Zvcm1hdHMpOwotCQllbHNlCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAweDg0MzE6CiAJCW10OW0wMDEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMDAxQzEyU1RNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OW0wMDFfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7CkBAIC02MjMsNiArNTY2LDI2IEBACiAJCWdvdG8gZWkyYzsKIAl9CiAKKwlpY2QtPm51bV9mb3JtYXRzID0gMDsKKworCS8qCisJICogVGhpcyBpcyBhIDEwYml0IHNlbnNvciwgc28gYnkgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IDEwYml0LgorCSAqIFRoZSBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBkaWZmZXJlbnQgYnVzIHdpZHRocyBkdWUgdG8KKwkgKiBkaWZmZXJlbnQgcm91dGluZyBvZiB0aGUgZGF0YSBsaW5lcy4KKwkgKi8KKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKTsKKwllbHNlCisJCWZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisJZWxzZQorCQlpY2QtPmZvcm1hdHMrKzsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisKIAlkZXZfaW5mbygmaWNkLT5kZXYsICJEZXRlY3RlZCBhIE1UOU0wMDEgY2hpcCBJRCAleCAoJXMpXG4iLCBkYXRhLAogCQkgZGF0YSA9PSAweDg0MzEgPyAiQzEyU1RNIiA6ICJDMTJTVCIpOwogCkBAIC02ODgsMTggKzY1MSwxMCBAQAogCWljZC0+aGVpZ2h0X21heAk9IDEwMjQ7CiAJaWNkLT55X3NraXBfdG9wCT0gMTsKIAlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7Ci0JLyogRGVmYXVsdCBkYXRhd2lkdGggLSB0aGlzIGlzIHRoZSBvbmx5IHdpZHRoIHRoaXMgY2FtZXJhIChub3JtYWxseSkKLQkgKiBzdXBwb3J0cy4gSXQgaXMgb25seSB3aXRoIGV4dHJhIGxvZ2ljIHRoYXQgaXQgY2FuIHN1cHBvcnQKLQkgKiBvdGhlciB3aWR0aHMuIFRoZXJlZm9yZSBpdCBzZWVtcyB0byBiZSBhIHNlbnNpYmxlIGRlZmF1bHQuICovCi0JbXQ5bTAwMS0+ZGF0YXdpZHRoID0gMTA7CiAJLyogU2ltdWxhdGVkIGF1dG9leHBvc3VyZS4gSWYgZW5hYmxlZCwgd2UgY2FsY3VsYXRlIHNodXR0ZXIgd2lkdGgKIAkgKiBvdXJzZWx2ZXMgaW4gdGhlIGRyaXZlciBiYXNlZCBvbiB2ZXJ0aWNhbCBibGFua2luZyBhbmQgZnJhbWUgd2lkdGggKi8KIAltdDltMDAxLT5hdXRvZXhwb3N1cmUgPSAxOwogCi0JcmV0ID0gYnVzX3N3aXRjaF9yZXF1ZXN0KG10OW0wMDEsIGljbCk7Ci0JaWYgKHJldCkKLQkJZ290byBlc3dpbml0OwotCiAJcmV0ID0gc29jX2NhbWVyYV9kZXZpY2VfcmVnaXN0ZXIoaWNkKTsKIAlpZiAocmV0KQogCQlnb3RvIGVpc2RyOwpAQCAtNzA3LDggKzY2Miw2IEBACiAJcmV0dXJuIDA7CiAKIGVpc2RyOgotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKLWVzd2luaXQ6CiAJa2ZyZWUobXQ5bTAwMSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTcxOCw3ICs2NzEsNiBAQAogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzb2NfY2FtZXJhX2RldmljZV91bnJlZ2lzdGVyKCZtdDltMDAxLT5pY2QpOwotCWJ1c19zd2l0Y2hfcmVsZWFzZShtdDltMDAxKTsKIAlrZnJlZShtdDltMDAxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwppbmRleCA1YjhlMjA5Li5jZGQxZGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTExeCogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwogCWVudW0gbXQ5bTExMV9jb250ZXh0IGNvbnRleHQ7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAJdTMyIHBpeGZtdDsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKIAl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKQEAgLTI0OSwxMiArMjQ5LDEzIEBACiAJCXJldHVybiByZWdfd3JpdGUoQ09OVEVYVF9DT05UUk9MLCB2YWxBKTsKIH0KIAotc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCitzdGF0aWMgaW50IG10OW0xMTFfc2V0dXBfcmVjdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKIAlpbnQgcmV0LCBpc19yYXdfZm9ybWF0OwotCWludCB3aWR0aCA9IG10OW0xMTEtPndpZHRoOwotCWludCBoZWlnaHQgPSBtdDltMTExLT5oZWlnaHQ7CisJaW50IHdpZHRoID0gcmVjdC0+d2lkdGg7CisJaW50IGhlaWdodCA9IHJlY3QtPmhlaWdodDsKIAogCWlmICgobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJICAgIHx8IChtdDltMTExLT5waXhmbXQgPT0gVjRMMl9QSVhfRk1UX1NCR0dSMTYpKQpAQCAtMjYyLDkgKzI2Myw5IEBACiAJZWxzZQogCQlpc19yYXdfZm9ybWF0ID0gMDsKIAotCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIG10OW0xMTEtPmxlZnQpOworCXJldCA9IHJlZ193cml0ZShDT0xVTU5fU1RBUlQsIHJlY3QtPmxlZnQpOwogCWlmICghcmV0KQotCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCBtdDltMTExLT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoUk9XX1NUQVJULCByZWN0LT50b3ApOwogCiAJaWYgKGlzX3Jhd19mb3JtYXQpIHsKIAkJaWYgKCFyZXQpCkBAIC0zOTMsNiArMzk0LDggQEAKIAogc3RhdGljIGludCBtdDltMTExX3Jlc2V0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogeworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gcmVnX3NldChSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFKTsKQEAgLTQwMSw2ICs0MDQsMTAgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gcmVnX2NsZWFyKFJFU0VULCBNVDlNMTExX1JFU0VUX1JFU0VUX01PREUKIAkJCQl8IE1UOU0xMTFfUkVTRVRfUkVTRVRfU09DKTsKKworCWlmIChpY2wtPnJlc2V0KQorCQlpY2wtPnJlc2V0KCZtdDltMTExLT5jbGllbnQtPmRldik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjAsNyArNDI3LDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMTExLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fREFUQVdJRFRIXzg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBV0lEVEhfODsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KQEAgLTQzMCw2ICs0MzcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDltMTExX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCisJCV9fZnVuY19fLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPndpZHRoLAorCQlyZWN0LT5oZWlnaHQpOworCisJcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgcmVjdCk7CisJaWYgKCFyZXQpCisJCW10OW0xMTEtPnJlY3QgPSAqcmVjdDsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG10OW0xMTFfc2V0X3BpeGZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgdTMyIHBpeGZtdCkKIHsKIAlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOwpAQCAtNDgwLDIzICs1MDMsMjcgQEAKIH0KIAogc3RhdGljIGludCBtdDltMTExX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gbXQ5bTExMS0+cmVjdC5sZWZ0LAorCQkudG9wCT0gbXQ5bTExMS0+cmVjdC50b3AsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OwogCWludCByZXQ7CiAKLQltdDltMTExLT5sZWZ0ID0gcmVjdC0+bGVmdDsKLQltdDltMTExLT50b3AgPSByZWN0LT50b3A7Ci0JbXQ5bTExMS0+d2lkdGggPSByZWN0LT53aWR0aDsKLQltdDltMTExLT5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7Ci0KIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZtdD0leCBsZWZ0PSVkLCB0b3A9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCi0JCV9fZnVuY19fLCBwaXhmbXQsIG10OW0xMTEtPmxlZnQsIG10OW0xMTEtPnRvcCwgbXQ5bTExMS0+d2lkdGgsCi0JCW10OW0xMTEtPmhlaWdodCk7CisJCV9fZnVuY19fLCBwaXgtPnBpeGVsZm9ybWF0LCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LndpZHRoLAorCQlyZWN0LmhlaWdodCk7CiAKLQlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkKTsKKwlyZXQgPSBtdDltMTExX3NldHVwX3JlY3QoaWNkLCAmcmVjdCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeGZtdCk7CisJCXJldCA9IG10OW0xMTFfc2V0X3BpeGZtdChpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICghcmV0KQorCQltdDltMTExLT5yZWN0ID0gcmVjdDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MjcsNiArNjU0LDcgQEAKIAkucmVsZWFzZQkJPSBtdDltMTExX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTExMV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTExMV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IG10OW0xMTFfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gbXQ5bTExMV9zZXRfZm10LAogCS50cnlfZm10CQk9IG10OW0xMTFfdHJ5X2ZtdCwKIAkucXVlcnlfYnVzX3BhcmFtCT0gbXQ5bTExMV9xdWVyeV9idXNfcGFyYW0sCkBAIC04MTEsNyArODM5LDcgQEAKIAogCW10OW0xMTFfc2V0X2NvbnRleHQoaWNkLCBtdDltMTExLT5jb250ZXh0KTsKIAltdDltMTExX3NldF9waXhmbXQoaWNkLCBtdDltMTExLT5waXhmbXQpOwotCW10OW0xMTFfc2V0dXBfcmVjdChpY2QpOworCW10OW0xMTFfc2V0dXBfcmVjdChpY2QsICZtdDltMTExLT5yZWN0KTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+aGZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9DT0xTKTsKIAltdDltMTExX3NldF9mbGlwKGljZCwgbXQ5bTExMS0+dmZsaXAsIE1UOU0xMTFfUk1CX01JUlJPUl9ST1dTKTsKIAltdDltMTExX3NldF9nbG9iYWxfZ2FpbihpY2QsIGljZC0+Z2Fpbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCmluZGV4IDM0OWQ4ZTMuLjIzZjljZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5dDAzMS5jCkBAIC0xNDQsMTMgKzE0NCwxMSBAQAogCWludCByZXQ7CiAKIAkvKiBEaXNhYmxlIGNoaXAgb3V0cHV0LCBzeW5jaHJvbm91cyBvcHRpb24gdXBkYXRlICovCi0JZGV2X2RiZyhpY2QtPnZkZXYtPnBhcmVudCwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KIAlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JFU0VULCAxKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUkVTRVQsIDApOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMyk7CisJCXJldCA9IHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCiAJcmV0dXJuIHJldCA+PSAwID8gMCA6IC1FSU87CiB9CkBAIC0xNTgsMTQgKzE1NiwxNCBAQAogc3RhdGljIGludCBtdDl0MDMxX3JlbGVhc2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogRGlzYWJsZSB0aGUgY2hpcCAqLwotCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpOworCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG10OXQwMzFfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAkvKiBTd2l0Y2ggdG8gbWFzdGVyICJub3JtYWwiIG1vZGUgKi8KLQlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpIDwgMCkKKwlpZiAocmVnX3NldChpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xNzMsNyArMTcxLDcgQEAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogU3RvcCBzZW5zb3IgcmVhZG91dCAqLwotCWlmIChyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKSA8IDApCisJaWYgKHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDIpIDwgMCkKIAkJcmV0dXJuIC1FSU87CiAJcmV0dXJuIDA7CiB9CkBAIC0xODYsOSArMTg0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKQotCQlyZWdfc2V0KGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOwotCWVsc2UKIAkJcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9QSVhFTF9DTE9DS19DT05UUk9MLCAweDgwMDApOworCWVsc2UKKwkJcmVnX3NldChpY2QsIE1UOVQwMzFfUElYRUxfQ0xPQ0tfQ09OVFJPTCwgMHg4MDAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjAxLDY3ICsxOTksNzMgQEAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBNVDlUMDMxX0JVU19QQVJBTSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorLyogUm91bmQgdXAgbWluaW1hIGFuZCByb3VuZCBkb3duIG1heGltYSAqLworc3RhdGljIHZvaWQgcmVjYWxjdWxhdGVfbGltaXRzKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHUxNiB4c2tpcCwgdTE2IHlza2lwKQoreworCWljZC0+eF9taW4gPSAoTVQ5VDAzMV9DT0xVTU5fU0tJUCArIHhza2lwIC0gMSkgLyB4c2tpcDsKKwlpY2QtPnlfbWluID0gKE1UOVQwMzFfUk9XX1NLSVAgKyB5c2tpcCAtIDEpIC8geXNraXA7CisJaWNkLT53aWR0aF9taW4gPSAoTVQ5VDAzMV9NSU5fV0lEVEggKyB4c2tpcCAtIDEpIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWluID0gKE1UOVQwMzFfTUlOX0hFSUdIVCArIHlza2lwIC0gMSkgLyB5c2tpcDsKKwlpY2QtPndpZHRoX21heCA9IE1UOVQwMzFfTUFYX1dJRFRIIC8geHNraXA7CisJaWNkLT5oZWlnaHRfbWF4ID0gTVQ5VDAzMV9NQVhfSEVJR0hUIC8geXNraXA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfcGFyYW1zKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCwgdTE2IHhza2lwLCB1MTYgeXNraXApCiB7CiAJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKIAlpbnQgcmV0OworCXUxNiB4YmluLCB5YmluLCB3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3A7CiAJY29uc3QgdTE2IGhibGFuayA9IE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOSywKIAkJdmJsYW5rID0gTVQ5VDAzMV9WRVJUSUNBTF9CTEFOSzsKLQl1MTYgeGJpbiwgeHNraXAgPSBtdDl0MDMxLT54c2tpcCwgeWJpbiwgeXNraXAgPSBtdDl0MDMxLT55c2tpcCwKLQkJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwLCBoZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKIAotCWlmIChwaXhmbXQpIHsKLQkJLyogU19GTVQgLSB1c2UgYmlubmluZyBhbmQgc2tpcHBpbmcgZm9yIHNjYWxpbmcsIHJlY2FsY3VsYXRlICovCi0JCS8qIElzIHRoaXMgbW9yZSBvcHRpbWFsIHRoYW4ganVzdCBhIGRpdmlzaW9uPyAqLwotCQlmb3IgKHhza2lwID0gODsgeHNraXAgPiAxOyB4c2tpcC0tKQotCQkJaWYgKHJlY3QtPndpZHRoICogeHNraXAgPD0gaWNkLT53aWR0aF9tYXgpCi0JCQkJYnJlYWs7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBzZW5zb3IgbGltaXRzICovCisJaWYgKHJlY3QtPmxlZnQgKyByZWN0LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQorCQlyZWN0LT5sZWZ0ID0gKGljZC0+d2lkdGhfbWF4IC0gcmVjdC0+d2lkdGgpIC8gMiArIGljZC0+eF9taW47CiAKLQkJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKLQkJCWlmIChyZWN0LT5oZWlnaHQgKiB5c2tpcCA8PSBpY2QtPmhlaWdodF9tYXgpCi0JCQkJYnJlYWs7CisJaWYgKHJlY3QtPnRvcCArIHJlY3QtPmhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKKwkJcmVjdC0+dG9wID0gKGljZC0+aGVpZ2h0X21heCAtIHJlY3QtPmhlaWdodCkgLyAyICsgaWNkLT55X21pbjsKIAotCQl3aWR0aCA9IHJlY3QtPndpZHRoICogeHNraXA7Ci0JCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOwotCi0JCWRldl9kYmcoJmljZC0+ZGV2LCAieHNraXAgJXUsIHdpZHRoICV1LCB5c2tpcCAldSwgaGVpZ2h0ICV1XG4iLAotCQkJeHNraXAsIHdpZHRoLCB5c2tpcCwgaGVpZ2h0KTsKLQl9CisJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwOworCWhlaWdodCA9IHJlY3QtPmhlaWdodCAqIHlza2lwOworCWxlZnQgPSByZWN0LT5sZWZ0ICogeHNraXA7CisJdG9wID0gcmVjdC0+dG9wICogeXNraXA7CiAKIAl4YmluID0gbWluKHhza2lwLCAodTE2KTMpOwogCXliaW4gPSBtaW4oeXNraXAsICh1MTYpMyk7CiAKLQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIGZyYW1lIGxpbWl0cyAqLwotCWlmIChyZWN0LT5sZWZ0ICsgd2lkdGggPiBpY2QtPndpZHRoX21heCkKLQkJcmVjdC0+bGVmdCA9IChpY2QtPndpZHRoX21heCAtIHdpZHRoKSAvIDI7CisJZGV2X2RiZygmaWNkLT5kZXYsICJ4c2tpcCAldSwgd2lkdGggJXUvJXUsIHlza2lwICV1LCBoZWlnaHQgJXUvJXVcbiIsCisJCXhza2lwLCB3aWR0aCwgcmVjdC0+d2lkdGgsIHlza2lwLCBoZWlnaHQsIHJlY3QtPmhlaWdodCk7CiAKLQlpZiAocmVjdC0+dG9wICsgaGVpZ2h0ID4gaWNkLT5oZWlnaHRfbWF4KQotCQlyZWN0LT50b3AgPSAoaWNkLT5oZWlnaHRfbWF4IC0gaGVpZ2h0KSAvIDI7Ci0KLQkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbik7IGJ1dCB0aGlzIGlzIGNoZWFwZXIgKi8KKwkvKiBDb3VsZCBqdXN0IGRvIHJvdW5kdXAocmVjdC0+bGVmdCwgW3h5XWJpbiAqIDIpOyBidXQgdGhpcyBpcyBjaGVhcGVyICovCiAJc3dpdGNoICh4YmluKSB7CiAJY2FzZSAyOgotCQlyZWN0LT5sZWZ0ID0gKHJlY3QtPmxlZnQgKyAxKSAmIH4xOworCQlsZWZ0ID0gKGxlZnQgKyAzKSAmIH4zOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXJlY3QtPmxlZnQgPSByb3VuZHVwKHJlY3QtPmxlZnQsIDMpOworCQlsZWZ0ID0gcm91bmR1cChsZWZ0LCA2KTsKIAl9CiAKIAlzd2l0Y2ggKHliaW4pIHsKIAljYXNlIDI6Ci0JCXJlY3QtPnRvcCA9IChyZWN0LT50b3AgKyAxKSAmIH4xOworCQl0b3AgPSAodG9wICsgMykgJiB+MzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlyZWN0LT50b3AgPSByb3VuZHVwKHJlY3QtPnRvcCwgMyk7CisJCXRvcCA9IHJvdW5kdXAodG9wLCA2KTsKIAl9CiAKKwkvKiBEaXNhYmxlIHJlZ2lzdGVyIHVwZGF0ZSwgcmVjb25maWd1cmUgYXRvbWljYWxseSAqLworCXJldCA9IHJlZ19zZXQoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIEJsYW5raW5nIGFuZCBzdGFydCB2YWx1ZXMgLSBkZWZhdWx0Li4uICovCiAJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9IT1JJWk9OVEFMX0JMQU5LSU5HLCBoYmxhbmspOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9WRVJUSUNBTF9CTEFOS0lORywgdmJsYW5rKTsKIAotCWlmIChwaXhmbXQpIHsKKwlpZiAoeXNraXAgIT0gbXQ5dDAzMS0+eXNraXAgfHwgeHNraXAgIT0gbXQ5dDAzMS0+eHNraXApIHsKIAkJLyogQmlubmluZywgc2tpcHBpbmcgKi8KIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fQUREUkVTU19NT0RFLApAQCAtMjcwLDE0ICsyNzQsMTQgQEAKIAkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX0FERFJFU1NfTU9ERSwKIAkJCQkJKCh5YmluIC0gMSkgPDwgNCkgfCAoeXNraXAgLSAxKSk7CiAJfQotCWRldl9kYmcoJmljZC0+ZGV2LCAibmV3IGxlZnQgJXUsIHRvcCAldVxuIiwgcmVjdC0+bGVmdCwgcmVjdC0+dG9wKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIm5ldyBwaHlzaWNhbCBsZWZ0ICV1LCB0b3AgJXVcbiIsIGxlZnQsIHRvcCk7CiAKIAkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgZ3VhcmFudGVlZCBieQogCSAqIGljZC0+dHJ5X2ZtdF9jYXAoKSwgc29jX2NhbWVyYV9zX2Nyb3AoKSBhbmQgc29jX2NhbWVyYV9jcm9wY2FwKCkgKi8KIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKKwkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9DT0xVTU5fU1RBUlQsIGxlZnQpOwogCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9ST1dfU1RBUlQsIHJlY3QtPnRvcCk7CisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX1NUQVJULCB0b3ApOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9XSU5ET1dfV0lEVEgsIHdpZHRoIC0gMSk7CiAJaWYgKHJldCA+PSAwKQpAQCAtMjk3LDEyICszMDEsNTggQEAKIAkJfQogCX0KIAotCWlmICghcmV0ICYmIHBpeGZtdCkgeworCS8qIFJlLWVuYWJsZSByZWdpc3RlciB1cGRhdGUsIGNvbW1pdCBhbGwgY2hhbmdlcyAqLworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gcmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ5dDAzMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CisKKwkvKiBDUk9QIC0gbm8gY2hhbmdlIGluIHNjYWxpbmcsIG9yIGluIGxpbWl0cyAqLworCXJldHVybiBtdDl0MDMxX3NldF9wYXJhbXMoaWNkLCByZWN0LCBtdDl0MDMxLT54c2tpcCwgbXQ5dDAzMS0+eXNraXApOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCWludCByZXQ7CisJdTE2IHhza2lwLCB5c2tpcDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKKwkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAorCX07CisKKwkvKgorCSAqIHRyeV9mbXQgaGFzIHB1dCByZWN0YW5nbGUgd2l0aGluIGxpbWl0cy4KKwkgKiBTX0ZNVCAtIHVzZSBiaW5uaW5nIGFuZCBza2lwcGluZyBmb3Igc2NhbGluZywgcmVjYWxjdWxhdGUKKwkgKiBsaW1pdHMsIHVzZWQgZm9yIGNyb3BwaW5nCisJICovCisJLyogSXMgdGhpcyBtb3JlIG9wdGltYWwgdGhhbiBqdXN0IGEgZGl2aXNpb24/ICovCisJZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKKwkJaWYgKHJlY3Qud2lkdGggKiB4c2tpcCA8PSBNVDlUMDMxX01BWF9XSURUSCkKKwkJCWJyZWFrOworCisJZm9yICh5c2tpcCA9IDg7IHlza2lwID4gMTsgeXNraXAtLSkKKwkJaWYgKHJlY3QuaGVpZ2h0ICogeXNraXAgPD0gTVQ5VDAzMV9NQVhfSEVJR0hUKQorCQkJYnJlYWs7CisKKwlyZWNhbGN1bGF0ZV9saW1pdHMoaWNkLCB4c2tpcCwgeXNraXApOworCisJcmV0ID0gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgJnJlY3QsIHhza2lwLCB5c2tpcCk7CisJaWYgKCFyZXQpIHsKIAkJbXQ5dDAzMS0+eHNraXAgPSB4c2tpcDsKIAkJbXQ5dDAzMS0+eXNraXAgPSB5c2tpcDsKIAl9CiAKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC0zMTAsMTQgKzM2MCwxNCBAQAogewogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OwogCi0JaWYgKHBpeC0+aGVpZ2h0IDwgaWNkLT5oZWlnaHRfbWluKQotCQlwaXgtPmhlaWdodCA9IGljZC0+aGVpZ2h0X21pbjsKLQlpZiAocGl4LT5oZWlnaHQgPiBpY2QtPmhlaWdodF9tYXgpCi0JCXBpeC0+aGVpZ2h0ID0gaWNkLT5oZWlnaHRfbWF4OwotCWlmIChwaXgtPndpZHRoIDwgaWNkLT53aWR0aF9taW4pCi0JCXBpeC0+d2lkdGggPSBpY2QtPndpZHRoX21pbjsKLQlpZiAocGl4LT53aWR0aCA+IGljZC0+d2lkdGhfbWF4KQotCQlwaXgtPndpZHRoID0gaWNkLT53aWR0aF9tYXg7CisJaWYgKHBpeC0+aGVpZ2h0IDwgTVQ5VDAzMV9NSU5fSEVJR0hUKQorCQlwaXgtPmhlaWdodCA9IE1UOVQwMzFfTUlOX0hFSUdIVDsKKwlpZiAocGl4LT5oZWlnaHQgPiBNVDlUMDMxX01BWF9IRUlHSFQpCisJCXBpeC0+aGVpZ2h0ID0gTVQ5VDAzMV9NQVhfSEVJR0hUOworCWlmIChwaXgtPndpZHRoIDwgTVQ5VDAzMV9NSU5fV0lEVEgpCisJCXBpeC0+d2lkdGggPSBNVDlUMDMxX01JTl9XSURUSDsKKwlpZiAocGl4LT53aWR0aCA+IE1UOVQwMzFfTUFYX1dJRFRIKQorCQlwaXgtPndpZHRoID0gTVQ5VDAzMV9NQVhfV0lEVEg7CiAKIAlwaXgtPndpZHRoICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwogCXBpeC0+aGVpZ2h0ICY9IH4weDAxOyAvKiBoYXMgdG8gYmUgZXZlbiAqLwpAQCAtMzkwLDYgKzQ0MCwxNCBAQAogCQkuc3RlcAkJPSAxLAogCQkuZGVmYXVsdF92YWx1ZQk9IDAsCiAJfSwgeworCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJGbGlwIEhvcml6b250YWxseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwgewogCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUJCT0gIkdhaW4iLApAQCAtNDMxLDYgKzQ4OSw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5dDAzMV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXQwMzFfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXQwMzFfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl0MDMxX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXQwMzFfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl0MDMxX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5dDAzMV9zZXRfYnVzX3BhcmFtLApAQCAtNTEzLDIxICs1NzIsMjMgQEAKIAkJCWlmIChkYXRhIDwgMCkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCS8qIFBhY2sgaXQgaW50byAxLjEyNS4uMTUgdmFyaWFibGUgc3RlcCwgcmVnaXN0ZXIgdmFsdWVzIDkuLjY3ICovCisJCQkvKiBQYWNrIGl0IGludG8gMS4xMjUuLjEyOCB2YXJpYWJsZSBzdGVwLCByZWdpc3RlciB2YWx1ZXMgOS4uMHg3ODYwICovCiAJCQkvKiBXZSBhc3N1bWUgcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDEgPiAwICovCiAJCQl1bnNpZ25lZCBsb25nIHJhbmdlID0gcWN0cmwtPm1heGltdW0gLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDE7CisJCQkvKiBjYWxjdWxhdGVkIGdhaW46IG1hcCA2NS4uMTI3IHRvIDkuLjEwMjQgc3RlcCAwLjEyNSAqLwogCQkJdW5zaWduZWQgbG9uZyBnYWluID0gKChjdHJsLT52YWx1ZSAtIHFjdHJsLT5kZWZhdWx0X3ZhbHVlIC0gMSkgKgotCQkJCQkgICAgICAgMTExICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgOTsKKwkJCQkJICAgICAgIDEwMTUgKyByYW5nZSAvIDIpIC8gcmFuZ2UgKyA5OwogCi0JCQlpZiAoZ2FpbiA8PSAzMikKKwkJCWlmIChnYWluIDw9IDMyKQkJLyogY2FsY3VsYXRlZCBnYWluIDkuLjMyIC0+IDkuLjMyICovCiAJCQkJZGF0YSA9IGdhaW47Ci0JCQllbHNlIGlmIChnYWluIDw9IDY0KQorCQkJZWxzZSBpZiAoZ2FpbiA8PSA2NCkJLyogY2FsY3VsYXRlZCBnYWluIDMzLi42NCAtPiAweDUxLi4weDYwICovCiAJCQkJZGF0YSA9ICgoZ2FpbiAtIDMyKSAqIDE2ICsgMTYpIC8gMzIgKyA4MDsKIAkJCWVsc2UKLQkJCQlkYXRhID0gKChnYWluIC0gNjQpICogNyArIDI4KSAvIDU2ICsgOTY7CisJCQkJLyogY2FsY3VsYXRlZCBnYWluIDY1Li4xMDI0IC0+ICgxLi4xMjApIDw8IDggKyAweDYwICovCisJCQkJZGF0YSA9ICgoKGdhaW4gLSA2NCArIDcpICogMzIpICYgMHhmZjAwKSB8IDB4NjA7CiAKLQkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gJWQgdG8gJWRcbiIsCi0JCQkJIHJlZ19yZWFkKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiksIGRhdGEpOworCQkJZGV2X2RiZygmaWNkLT5kZXYsICJTZXR0aW5nIGdhaW4gZnJvbSAweCV4IHRvIDB4JXhcbiIsCisJCQkJcmVnX3JlYWQoaWNkLCBNVDlUMDMxX0dMT0JBTF9HQUlOKSwgZGF0YSk7CiAJCQlkYXRhID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiwgZGF0YSk7CiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCmluZGV4IGIwNGM4Y2IuLjRkM2I0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5djAyMi5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KQEAgLTg5LDkgKzg4LDcgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOVYwMjIqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KLQlpbnQgc3dpdGNoX2dwaW87CiAJdTE2IGNoaXBfY29udHJvbDsKLQl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKIH07CiAKIHN0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHU4IHJlZykKQEAgLTIwOSw2NiArMjA2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidXNfc3dpdGNoX3JlcXVlc3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCkKLXsKLSNpZmRlZiBDT05GSUdfTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IGdwaW8gPSBpY2wtPmdwaW87Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChncGlvKSkgewotCQkvKiBXZSBoYXZlIGEgZGF0YSBidXMgc3dpdGNoLiAqLwotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgIm10OXYwMjIiKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJm10OXYwMjItPmNsaWVudC0+ZGV2LCAiQ2Fubm90IGdldCBHUElPICV1XG4iLCBncGlvKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwKLQkJCQkiQ2Fubm90IHNldCBHUElPICV1IHRvIG91dHB1dFxuIiwgZ3Bpbyk7Ci0JCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JbXQ5djAyMi0+c3dpdGNoX2dwaW8gPSBncGlvOwotI2Vsc2UKLQltdDl2MDIyLT5zd2l0Y2hfZ3BpbyA9IC1FSU5WQUw7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYnVzX3N3aXRjaF9yZWxlYXNlKHN0cnVjdCBtdDl2MDIyICptdDl2MDIyKQotewotI2lmZGVmIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JaWYgKGdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlncGlvX2ZyZWUobXQ5djAyMi0+c3dpdGNoX2dwaW8pOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9hY3Qoc3RydWN0IG10OXYwMjIgKm10OXYwMjIsIGludCBnbzhiaXQpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlpZiAoIWdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKG10OXYwMjItPnN3aXRjaF9ncGlvLCBnbzhiaXQpOwotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4gLUVOT0RFVjsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfcG9zc2libGUoc3RydWN0IG10OXYwMjIgKm10OXYwMjIpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlyZXR1cm4gZ3Bpb19pc192YWxpZChtdDl2MDIyLT5zd2l0Y2hfZ3Bpbyk7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewpAQCAtMjgyLDE5ICsyMTksMTcgQEAKIAlpZiAoIWlzX3Bvd2VyX29mXzIod2lkdGhfZmxhZykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChtdDl2MDIyLT5kYXRhd2lkdGggIT0gMTAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKSkgfHwKLQkgICAgKG10OXYwMjItPmRhdGF3aWR0aCAhPSA5ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkpIHx8Ci0JICAgIChtdDl2MDIyLT5kYXRhd2lkdGggIT0gOCAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpKSkgewotCQkvKiBXZWxsLCB3ZSBhY3R1YWxseSBvbmx5IGNhbiBkbyAxMCBvciA4IGJpdHMuLi4gKi8KLQkJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXQgPSBidXNfc3dpdGNoX2FjdChtdDl2MDIyLAotCQkJCSAgICAgd2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOCk7Ci0JCWlmIChyZXQgPCAwKQorCWlmIChpY2wtPnNldF9idXNfcGFyYW0pIHsKKwkJcmV0ID0gaWNsLT5zZXRfYnVzX3BhcmFtKGljbCwgd2lkdGhfZmxhZyk7CisJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCW10OXYwMjItPmRhdGF3aWR0aCA9IHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzggPyA4IDogMTA7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2l0aG91dCBib2FyZCBzcGVjaWZpYyBidXMgd2lkdGggc2V0dGluZ3Mgd2Ugb25seSBzdXBwb3J0IHRoZQorCQkgKiBzZW5zb3JzIG5hdGl2ZSBidXMgd2lkdGgKKwkJICovCisJCWlmICh3aWR0aF9mbGFnICE9IFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWZsYWdzID0gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CkBAIC0zMjgsNDQgKzI2MywyNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5djAyMl9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKLQl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDl2MDIyLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnOwogCi0JaWYgKGJ1c19zd2l0Y2hfcG9zc2libGUobXQ5djAyMikpCi0JCXdpZHRoX2ZsYWcgfD0gU09DQU1fREFUQVdJRFRIXzg7CisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQl3aWR0aF9mbGFnID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmCisJCQlTT0NBTV9EQVRBV0lEVEhfTUFTSzsKKwllbHNlCisJCXdpZHRoX2ZsYWcgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CiAKIAlyZXR1cm4gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8Ci0JCVNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8IFNPQ0FNX1NMQVZFIHwKIAkJd2lkdGhfZmxhZzsKIH0KIAotc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCitzdGF0aWMgaW50IG10OXYwMjJfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKLQlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl2MDIyLCBpY2QpOwogCWludCByZXQ7CiAKLQkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KLQkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLwotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToKLQljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTY6Ci0JCWlmIChtdDl2MDIyLT5tb2RlbCAhPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSAwOgotCQkvKiBObyBmb3JtYXQgY2hhbmdlLCBvbmx5IGdlb21ldHJ5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIExpa2UgaW4gZXhhbXBsZSBhcHAuIENvbnRyYWRpY3RzIHRoZSBkYXRhc2hlZXQgdGhvdWdoICovCiAJcmV0ID0gcmVnX3JlYWQoaWNkLCBNVDlWMDIyX0FFQ19BR0NfRU5BQkxFKTsKIAlpZiAocmV0ID49IDApIHsKQEAgLTQwMyw2ICszMjEsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtdDl2MDIyX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisKKwkvKiBUaGUgY2FsbGVyIHByb3ZpZGVzIGEgc3VwcG9ydGVkIGZvcm1hdCwgYXMgdmVyaWZpZWQgcGVyIGNhbGwgdG8KKwkgKiBpY2QtPnRyeV9mbXQoKSwgZGF0YXdpZHRoIGlzIGZyb20gb3VyIHN1cHBvcnRlZCBmb3JtYXQgbGlzdCAqLworCXN3aXRjaCAocGl4LT5waXhlbGZvcm1hdCkgeworCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6CisJY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgorCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJLyogTm8gZm9ybWF0IGNoYW5nZSwgb25seSBnZW9tZXRyeSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIG9uIHRoaXMgY2FtZXJhLCBqdXN0IGNyb3AuICovCisJcmV0dXJuIG10OXYwMjJfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgbXQ5djAyMl90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewpAQCAtNTQ0LDYgKzQ5OCw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5djAyMl9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OXYwMjJfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OXYwMjJfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDl2MDIyX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OXYwMjJfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDl2MDIyX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gbXQ5djAyMl9zZXRfYnVzX3BhcmFtLApAQCAtNjk5LDYgKzY1NCw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzMzIgZGF0YTsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAogCSAgICB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKQEAgLTczMiwyMiArNjg4LDM2IEBACiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfUElYRUxfT1BFUkFUSU9OX01PREUsIDQgfCAweDExKTsKIAkJbXQ5djAyMi0+bW9kZWwgPSBWNEwyX0lERU5UX01UOVYwMjJJWDdBVEM7CiAJCWljZC0+Zm9ybWF0cyA9IG10OXYwMjJfY29sb3VyX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX2NvbG91cl9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfSBlbHNlIHsKIAkJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VjAyMl9QSVhFTF9PUEVSQVRJT05fTU9ERSwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNOwogCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0czsKLQkJaWYgKGdwaW9faXNfdmFsaWQoaWNsLT5ncGlvKSkKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10OXYwMjJfbW9ub2Nocm9tZV9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJfQogCi0JaWYgKCFyZXQpCi0JCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlaXNpczsKKworCWljZC0+bnVtX2Zvcm1hdHMgPSAwOworCisJLyoKKwkgKiBUaGlzIGlzIGEgMTBiaXQgc2Vuc29yLCBzbyBieSBkZWZhdWx0IHdlIG9ubHkgYWxsb3cgMTBiaXQuCisJICogVGhlIHBsYXRmb3JtIG1heSBzdXBwb3J0IGRpZmZlcmVudCBidXMgd2lkdGhzIGR1ZSB0bworCSAqIGRpZmZlcmVudCByb3V0aW5nIG9mIHRoZSBkYXRhIGxpbmVzLgorCSAqLworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJZmxhZ3MgPSBpY2wtPnF1ZXJ5X2J1c19wYXJhbShpY2wpOworCWVsc2UKKwkJZmxhZ3MgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKwllbHNlCisJCWljZC0+Zm9ybWF0cysrOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWljZC0+bnVtX2Zvcm1hdHMrKzsKKworCXJldCA9IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaXNpczsKIApAQCAtODEyLDE0ICs3ODIsNiBAQAogCWljZC0+aGVpZ2h0X21heAk9IDQ4MDsKIAlpY2QtPnlfc2tpcF90b3AJPSAxOwogCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKLQkvKiBEZWZhdWx0IGRhdGF3aWR0aCAtIHRoaXMgaXMgdGhlIG9ubHkgd2lkdGggdGhpcyBjYW1lcmEgKG5vcm1hbGx5KQotCSAqIHN1cHBvcnRzLiBJdCBpcyBvbmx5IHdpdGggZXh0cmEgbG9naWMgdGhhdCBpdCBjYW4gc3VwcG9ydAotCSAqIG90aGVyIHdpZHRocy4gVGhlcmVmb3JlIGl0IHNlZW1zIHRvIGJlIGEgc2Vuc2libGUgZGVmYXVsdC4gKi8KLQltdDl2MDIyLT5kYXRhd2lkdGggPSAxMDsKLQotCXJldCA9IGJ1c19zd2l0Y2hfcmVxdWVzdChtdDl2MDIyLCBpY2wpOwotCWlmIChyZXQpCi0JCWdvdG8gZXN3aW5pdDsKIAogCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CiAJaWYgKHJldCkKQEAgLTgyOCw4ICs3OTAsNiBAQAogCXJldHVybiAwOwogCiBlaXNkcjoKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7Ci1lc3dpbml0OgogCWtmcmVlKG10OXYwMjIpOwogCXJldHVybiByZXQ7CiB9CkBAIC04MzksNyArNzk5LDYgQEAKIAlzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5djAyMi0+aWNkKTsKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5djAyMik7CiAJa2ZyZWUobXQ5djAyMik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teDNfY2FtZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MjllMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCkBAIC0wLDAgKzEsMTIyMCBAQAorLyoKKyAqIFY0TDIgRHJpdmVyIGZvciBpLk1YM3ggY2FtZXJhIGhvc3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgKKyAqIEd1ZW5uYWRpIExpYWtob3ZldHNraSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPGxnQGRlbnguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CisKKyNkZWZpbmUgTVgzX0NBTV9EUlZfTkFNRSAibXgzLWNhbWVyYSIKKworLyogQ01PUyBTZW5zb3IgSW50ZXJmYWNlIFJlZ2lzdGVycyAqLworI2RlZmluZSBDU0lfUkVHX1NUQVJUCQkweDYwCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORgkJKDB4NjAgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfU0VOU19GUk1fU0laRQkoMHg2NCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9BQ1RfRlJNX1NJWkUJKDB4NjggLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfT1VUX0ZSTV9DVFJMCSgweDZDIC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX1RTVF9DVFJMCQkoMHg3MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9DQ0lSX0NPREVfMQkJKDB4NzQgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfQ0NJUl9DT0RFXzIJCSgweDc4IC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX0NDSVJfQ09ERV8zCQkoMHg3QyAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMQkoMHg4MCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9GTEFTSF9TVFJPQkVfMgkoMHg4NCAtIENTSV9SRUdfU1RBUlQpCisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQJCTAKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQJCTEKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVAkJMgorI2RlZmluZSBDU0lfU0VOU19DT05GX1BJWF9DTEtfUE9MX1NISUZUCQkzCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfU0VOU19QUlRDTF9TSElGVAkJNAorI2RlZmluZSBDU0lfU0VOU19DT05GX1NFTlNfQ0xLU1JDX1NISUZUCQk3CisjZGVmaW5lIENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQJCTgKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUCQkxMAorI2RlZmluZSBDU0lfU0VOU19DT05GX0VYVF9WU1lOQ19TSElGVAkJMTUKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9ESVZSQVRJT19TSElGVAkJMTYKKworI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1JHQl9ZVVY0NDQJKDBVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1lVVjQyMgkJKDJVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX0JBWUVSCQkoM1VMIDw8IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfU0hJRlQpCisKKyNkZWZpbmUgTUFYX1ZJREVPX01FTSAxNgorCitzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgeworCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCQkJdmI7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQJKmZtdDsKKworCS8qIE9uZSBkZXNjcmlwdG90IHBlciBzY2F0dGVybGlzdCAocGVyIGZyYW1lKSAqLworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkJKnR4ZDsKKworCS8qIFdlIGhhdmUgdG8gImJ1aWxkIiBhIHNjYXR0ZXJsaXN0IG91cnNlbHZlcyAtIG9uZSBlbGVtZW50IHBlciBmcmFtZSAqLworCXN0cnVjdCBzY2F0dGVybGlzdAkJCXNnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgLSBpLk1YM3ggY2FtZXJhIChDU0kpIG9iamVjdAorICogQGRldjoJCWNhbWVyYSBkZXZpY2UsIHRvIHdoaWNoIHRoZSBjb2hlcmVudCBidWZmZXIgaXMgYXR0YWNoZWQKKyAqIEBpY2Q6CQljdXJyZW50bHkgYXR0YWNoZWQgY2FtZXJhIHNlbnNvcgorICogQGNsazoJCXBvaW50ZXIgdG8gY2xvY2sKKyAqIEBiYXNlOgkJcmVtYXBwZWQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKiBAcGRhdGE6CQlwbGF0Zm9ybSBkYXRhCisgKiBAcGxhdGZvcm1fZmxhZ3M6CXBsYXRmb3JtIGZsYWdzCisgKiBAbWNsazoJCW1hc3RlciBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyAqIEBjYXB0dXJlOgkJbGlzdCBvZiBjYXB0dXJlIHZpZGVvYnVmZmVycworICogQGxvY2s6CQlwcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMKKyAqIEBhY3RpdmU6CQlhY3RpdmUgdmlkZW8gYnVmZmVyCisgKiBAaWRtYWNfY2hhbm5lbDoJYXJyYXkgb2YgcG9pbnRlcnMgdG8gSVBVIERNQUMgRE1BIGNoYW5uZWxzCisgKiBAc29jX2hvc3Q6CQllbWJlZGRlZCBzb2NfaG9zdCBvYmplY3QKKyAqLworc3RydWN0IG14M19jYW1lcmFfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCS8qCisJICogaS5NWDN4IGlzIG9ubHkgc3VwcG9zZWQgdG8gaGFuZGxlIG9uZSBjYW1lcmEgb24gaXRzIENhbWVyYSBTZW5zb3IKKwkgKiBJbnRlcmZhY2UuIElmIGFueW9uZSBldmVyIGJ1aWxkcyBoYXJkd2FyZSB0byBlbmFibGUgbW9yZSB0aGFuIG9uZQorCSAqIGNhbWVyYSBfc2ltdWx0YW5lb3VzbHlfLCB0aGV5IHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhpcyBkcml2ZXIgdG9vCisJICovCisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2Q7CisJc3RydWN0IGNsawkJKmNsazsKKworCXZvaWQgX19pb21lbQkJKmJhc2U7CisKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YQkqcGRhdGE7CisKKwl1bnNpZ25lZCBsb25nCQlwbGF0Zm9ybV9mbGFnczsKKwl1bnNpZ25lZCBsb25nCQltY2xrOworCisJc3RydWN0IGxpc3RfaGVhZAljYXB0dXJlOworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBQcm90ZWN0cyB2aWRlbyBidWZmZXIgbGlzdHMgKi8KKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmFjdGl2ZTsKKworCS8qIElETUFDIC8gZG1hZW5naW5lIGludGVyZmFjZSAqLworCXN0cnVjdCBpZG1hY19jaGFubmVsCSppZG1hY19jaGFubmVsWzFdOwkvKiBXZSBuZWVkIG9uZSBjaGFubmVsICovCisKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0CXNvY19ob3N0OworfTsKKworc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgeworCXN0cnVjdCBteDNfY2FtZXJhX2RldgkqbXgzX2NhbTsKKwllbnVtIGlwdV9jaGFubmVsCWlkOworfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCk7CisKK3N0YXRpYyB1MzIgY3NpX3JlZ19yZWFkKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzLCBvZmZfdCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG14My0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNzaV9yZWdfd3JpdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDMsIHUzMiB2YWx1ZSwgb2ZmX3QgcmVnKQoreworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgbXgzLT5iYXNlICsgcmVnKTsKK30KKworLyogQ2FsbGVkIGZyb20gdGhlIElQVSBJRE1BQyBJU1IgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1fZG1hX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjID0gdG9fdHhfZGVzYyhhcmcpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGRlc2MtPnR4ZC5jaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbm5lbCA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNoYW5uZWwtPmNsaWVudDsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YjsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5kZXYsICJjYWxsYmFjayBjb29raWUgJWQsIGFjdGl2ZSBETUEgMHglMDh4XG4iLAorCQlkZXNjLT50eGQuY29va2llLCBteDNfY2FtLT5hY3RpdmUgPyBzZ19kbWFfYWRkcmVzcygmbXgzX2NhbS0+YWN0aXZlLT5zZykgOiAwKTsKKworCXNwaW5fbG9jaygmbXgzX2NhbS0+bG9jayk7CisJaWYgKG14M19jYW0tPmFjdGl2ZSkgeworCQl2YiA9ICZteDNfY2FtLT5hY3RpdmUtPnZiOworCisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCWRvX2dldHRpbWVvZmRheSgmdmItPnRzKTsKKwkJdmItPmZpZWxkX2NvdW50Kys7CisJCXdha2VfdXAoJnZiLT5kb25lKTsKKwl9CisKKwlpZiAobGlzdF9lbXB0eSgmbXgzX2NhbS0+Y2FwdHVyZSkpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworCisJCS8qCisJCSAqIHN0b3AgY2FwdHVyZSAtIHdpdGhvdXQgZnVydGhlciBidWZmZXJzIElQVV9DSEFfQlVGMF9SRFkgd2lsbAorCQkgKiBub3QgZ2V0IHVwZGF0ZWQKKwkJICovCisJCXJldHVybjsKKwl9CisKKwlteDNfY2FtLT5hY3RpdmUgPSBsaXN0X2VudHJ5KG14M19jYW0tPmNhcHR1cmUubmV4dCwKKwkJCQkgICAgIHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciwgdmIucXVldWUpOworCW14M19jYW0tPmFjdGl2ZS0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJc3Bpbl91bmxvY2soJm14M19jYW0tPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSAmYnVmLT52YjsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCA9IGJ1Zi0+dHhkOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbjsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzICh2Yj0weCVwKSAweCUwOGx4ICVkXG4iLCBfX2Z1bmNfXywKKwkJdmIsIHZiLT5iYWRkciwgdmItPmJzaXplKTsKKworCS8qCisJICogVGhpcyB3YWl0cyB1bnRpbCB0aGlzIGJ1ZmZlciBpcyBvdXQgb2YgZGFuZ2VyLCBpLmUuLCB1bnRpbCBpdCBpcyBubworCSAqIGxvbmdlciBpbiBTVEFURV9RVUVVRUQgb3IgU1RBVEVfQUNUSVZFCisJICovCisJdmlkZW9idWZfd2FpdG9uKHZiLCAwLCAwKTsKKwlpZiAodHhkKSB7CisJCWljaGFuID0gdG9faWRtYWNfY2hhbih0eGQtPmNoYW4pOworCQlhc3luY190eF9hY2sodHhkKTsKKwl9CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJYnVmLT50eGQgPSBOVUxMOworCisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworLyoKKyAqIFZpZGVvYnVmIG9wZXJhdGlvbnMKKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSBfX2J1ZmZlcl9fIChub3QgZGF0YSkgc2l6ZSBhbmQgbnVtYmVyIG9mIGJ1ZmZlcnMuCisgKiBDYWxsZWQgd2l0aCAudmJfbG9jayBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwkvKgorCSAqIGJpdHMtcGVyLXBpeGVsIChkZXB0aCkgYXMgc3BlY2lmaWVkIGluIGNhbWVyYSdzIHBpeGVsIGZvcm1hdCBkb2VzCisJICogbm90IG5lY2Vzc2FyaWx5IG1hdGNoIHdoYXQgdGhlIGNhbWVyYSBpbnRlcmZhY2Ugd3JpdGVzIHRvIFJBTSwgYnV0CisJICogaXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBub3cuCisJICovCisJdW5zaWduZWQgaW50IGJwcCA9IERJVl9ST1VORF9VUChpY2QtPmN1cnJlbnRfZm10LT5kZXB0aCwgOCk7CisKKwlpZiAoIW14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF0pCisJCXJldHVybiAtRUlOVkFMOworCisJKnNpemUgPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKiBicHA7CisKKwlpZiAoISpjb3VudCkKKwkJKmNvdW50ID0gMzI7CisKKwlpZiAoKnNpemUgKiAqY291bnQgPiBNQVhfVklERU9fTUVNICogMTAyNCAqIDEwMjQpCisJCSpjb3VudCA9IE1BWF9WSURFT19NRU0gKiAxMDI0ICogMTAyNCAvICpzaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgbXgzX3ZpZGVvYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciAqYnVmID0KKwkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiKTsKKwkvKiBjdXJyZW50X2ZtdCBfbXVzdF8gYWx3YXlzIGJlIHNldCAqLworCXNpemVfdCBuZXdfc2l6ZSA9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodCAqCisJCSgoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGggKyA3KSA+PiAzKTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJIHRoaW5rLCBpbiBidWZfcHJlcGFyZSB5b3Ugb25seSBoYXZlIHRvIHByb3RlY3QgZ2xvYmFsIGRhdGEsCisJICogdGhlIGFjdHVhbCBidWZmZXIgaXMgeW91cnMKKwkgKi8KKworCWlmIChidWYtPmZtdAkhPSBpY2QtPmN1cnJlbnRfZm10IHx8CisJICAgIHZiLT53aWR0aAkhPSBpY2QtPndpZHRoIHx8CisJICAgIHZiLT5oZWlnaHQJIT0gaWNkLT5oZWlnaHQgfHwKKwkgICAgdmItPmZpZWxkCSE9IGZpZWxkKSB7CisJCWJ1Zi0+Zm10CT0gaWNkLT5jdXJyZW50X2ZtdDsKKwkJdmItPndpZHRoCT0gaWNkLT53aWR0aDsKKwkJdmItPmhlaWdodAk9IGljZC0+aGVpZ2h0OworCQl2Yi0+ZmllbGQJPSBmaWVsZDsKKwkJaWYgKHZiLT5zdGF0ZSAhPSBWSURFT0JVRl9ORUVEU19JTklUKQorCQkJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJfQorCisJaWYgKHZiLT5iYWRkciAmJiB2Yi0+YnNpemUgPCBuZXdfc2l6ZSkgeworCQkvKiBVc2VyIHByb3ZpZGVkIGJ1ZmZlciwgYnV0IGl0IGlzIHRvbyBzbWFsbCAqLworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmItPnN0YXRlID09IFZJREVPQlVGX05FRURTX0lOSVQpIHsKKwkJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9ICZidWYtPnNnOworCisJCS8qCisJCSAqIFRoZSB0b3RhbCBzaXplIG9mIHZpZGVvLWJ1ZmZlcnMgdGhhdCB3aWxsIGJlIGFsbG9jYXRlZCAvIG1hcHBlZC4KKwkJICogKnNpemUgdGhhdCB3ZSBjYWxjdWxhdGVkIGluIHZpZGVvYnVmX3NldHVwIGdldHMgYXNzaWduZWQgdG8KKwkJICogdmItPmJzaXplLCBhbmQgbm93IHdlIHVzZSB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0byBnZXQgdmItPnNpemUuCisJCSAqLworCQl2Yi0+c2l6ZSA9IG5ld19zaXplOworCisJCS8qIFRoaXMgYWN0dWFsbHkgKGFsbG9jYXRlcyBhbmQpIG1hcHMgYnVmZmVycyAqLworCQlyZXQgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKworCQkvKgorCQkgKiBXZSB3aWxsIGhhdmUgdG8gY29uZmlndXJlIHRoZSBJRE1BQyBjaGFubmVsLiBJdCBoYXMgdHdvIHNsb3RzCisJCSAqIGZvciBETUEgYnVmZmVycywgd2Ugc2hhbGwgZW50ZXIgdGhlIGZpcnN0IHR3byBidWZmZXJzIHRoZXJlLAorCQkgKiBhbmQgdGhlbiBzdWJtaXQgbmV3IGJ1ZmZlcnMgaW4gRE1BLXJlYWR5IGludGVycnVwdHMKKwkJICovCisJCXNnX2luaXRfdGFibGUoc2csIDEpOworCQlzZ19kbWFfYWRkcmVzcyhzZykJPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHZiKTsKKwkJc2dfZG1hX2xlbihzZykJCT0gdmItPnNpemU7CisKKwkJYnVmLT50eGQgPSBpY2hhbi0+ZG1hX2NoYW4uZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZygKKwkJCSZpY2hhbi0+ZG1hX2NoYW4sIHNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQpOworCQlpZiAoIWJ1Zi0+dHhkKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBmYWlsOworCQl9CisKKwkJYnVmLT50eGQtPmNhbGxiYWNrX3BhcmFtCT0gYnVmLT50eGQ7CisJCWJ1Zi0+dHhkLT5jYWxsYmFjawkJPSBteDNfY2FtX2RtYV9kb25lOworCisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCX0KKworCXJldHVybiAwOworCitmYWlsOgorCWZyZWVfYnVmZmVyKHZxLCBidWYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBpeGVsX2ZtdCBmb3VyY2NfdG9faXB1X3BpeChfX3UzMiBmb3VyY2MpCit7CisJLyogQWRkIG1vcmUgZm9ybWF0cyBhcyBuZWVkIGFyaXNlcyBhbmQgdGVzdCBwb3NzaWJpbGl0aWVzIGFwcGVhci4uLiAqLworCXN3aXRjaCAoZm91cmNjKSB7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCNTY1OworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMjQ7CisJY2FzZSBWNEwyX1BJWF9GTVRfUkdCMzMyOgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfUkdCMzMyOworCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6CisJCXJldHVybiBJUFVfUElYX0ZNVF9ZVlU0MjJQOworCWRlZmF1bHQ6CisJCXJldHVybiBJUFVfUElYX0ZNVF9HRU5FUklDOworCX0KK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQgPSBidWYtPnR4ZDsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSB0b19pZG1hY19jaGFuKHR4ZC0+Y2hhbik7CisJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpkYXRhX2ZtdCA9IGljZC0+Y3VycmVudF9mbXQ7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogVGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBvZiBvbmUgc2ctZWxlbWVudCAqLworCXZpZGVvLT5vdXRfcGl4ZWxfZm10CT0gZm91cmNjX3RvX2lwdV9waXgoZGF0YV9mbXQtPmZvdXJjYyk7CisJdmlkZW8tPm91dF93aWR0aAk9IGljZC0+d2lkdGg7CisJdmlkZW8tPm91dF9oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwl2aWRlby0+b3V0X3N0cmlkZQk9IGljZC0+d2lkdGg7CisKKyNpZmRlZiBERUJVRworCS8qIGhlbHBzIHRvIHNlZSB3aGF0IERNQSBhY3R1YWxseSBoYXMgd3JpdHRlbiAqLworCW1lbXNldCgodm9pZCAqKXZiLT5iYWRkciwgMHhhYSwgdmItPmJzaXplKTsKKyNlbmRpZgorCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJnZiLT5xdWV1ZSwgJm14M19jYW0tPmNhcHR1cmUpOworCisJaWYgKCFteDNfY2FtLT5hY3RpdmUpIHsKKwkJbXgzX2NhbS0+YWN0aXZlID0gYnVmOworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7CisJfSBlbHNlIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfUVVFVUVEOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7CisJZGV2X2RiZygmaWNkLT5kZXYsICJTdWJtaXR0ZWQgY29va2llICVkIERNQSAweCUwOHhcbiIsIGNvb2tpZSwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpKTsKKwlpZiAoY29va2llID49IDApCisJCXJldHVybjsKKworCS8qIFN1Ym1pdCBlcnJvciAqLworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1BSRVBBUkVEOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisKKwlpZiAobXgzX2NhbS0+YWN0aXZlID09IGJ1ZikKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbXgzX3ZpZGVvYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiUmVsZWFzZSVzIERNQSAweCUwOHggKHN0YXRlICVkKSwgcXVldWUgJXNlbXB0eVxuIiwKKwkJbXgzX2NhbS0+YWN0aXZlID09IGJ1ZiA/ICIgYWN0aXZlIiA6ICIiLCBzZ19kbWFfYWRkcmVzcygmYnVmLT5zZyksCisJCSB2Yi0+c3RhdGUsIGxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkgPyAiIiA6ICJub3QgIik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M19jYW0tPmxvY2ssIGZsYWdzKTsKKwlpZiAoKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9BQ1RJVkUgfHwgdmItPnN0YXRlID09IFZJREVPQlVGX1FVRVVFRCkgJiYKKwkgICAgIWxpc3RfZW1wdHkoJnZiLT5xdWV1ZSkpIHsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfRVJST1I7CisKKwkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJaWYgKG14M19jYW0tPmFjdGl2ZSA9PSBidWYpCisJCQlteDNfY2FtLT5hY3RpdmUgPSBOVUxMOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIG14M192aWRlb2J1Zl9vcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gbXgzX3ZpZGVvYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IG14M192aWRlb2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IG14M192aWRlb2J1Zl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBteDNfdmlkZW9idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfaW5pdF92aWRlb2J1ZihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCisJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQocSwgJm14M192aWRlb2J1Zl9vcHMsIG14M19jYW0tPmRldiwKKwkJCQkgICAgICAgJm14M19jYW0tPmxvY2ssCisJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgICAgVjRMMl9GSUVMRF9OT05FLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG14M19jYW1lcmFfYnVmZmVyKSwgaWNkKTsKK30KKworLyogRmlyc3QgcGFydCBvZiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfYWN0aXZhdGUoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXUzMiBjb25mOworCWxvbmcgcmF0ZTsKKworCS8qIFNldCBkZWZhdWx0IHNpemU6IGlwdV9jc2lfc2V0X3dpbmRvd19zaXplKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sICg2NDAgLSAxKSB8ICgoNDgwIC0gMSkgPDwgMTYpLCBDU0lfQUNUX0ZSTV9TSVpFKTsKKwkvKiAuLi5hbmQgcG9zaXRpb24gdG8gMDowOiBpcHVfY3NpX3NldF93aW5kb3dfcG9zKCkgKi8KKwljb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyogV2UgdXNlIG9ubHkgZ2F0ZWQgY2xvY2sgc3luY2hyb25pc2F0aW9uIG1vZGUgc28gZmFyICovCisJY29uZiA9IDAgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX1BSVENMX1NISUZUOworCisJLyogU2V0IGdlbmVyaWMgZGF0YSwgcGxhdGZvcm0tYmlnZ2VzdCBidXMtd2lkdGggKi8KKwljb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkKKwkJY29uZiB8PSAzIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKQorCQljb25mIHw9IDIgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCWVsc2UgaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlLyogaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCkqLworCQljb25mIHw9IDAgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9DTEtfU1JDKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX0NMS1NSQ19TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0VYVF9WU1lOQykKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfRVhUX1ZTWU5DX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfRFApCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfUENQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0hTUCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUOworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQ7CisKKwkvKiBpcHVfY3NpX2luaXRfaW50ZXJmYWNlKCkgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGNvbmYsIENTSV9TRU5TX0NPTkYpOworCisJY2xrX2VuYWJsZShteDNfY2FtLT5jbGspOworCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShteDNfY2FtLT5jbGssIG14M19jYW0tPm1jbGspOworCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0IFNFTlNfQ09ORiB0byAleCwgcmF0ZSAlbGRcbiIsIGNvbmYsIHJhdGUpOworCWlmIChyYXRlKQorCQljbGtfc2V0X3JhdGUobXgzX2NhbS0+Y2xrLCByYXRlKTsKK30KKworLyogQ2FsbGVkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLworc3RhdGljIGludCBteDNfY2FtZXJhX2FkZF9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCWludCByZXQ7CisKKwlpZiAobXgzX2NhbS0+aWNkKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlYnVzeTsKKwl9CisKKwlteDNfY2FtZXJhX2FjdGl2YXRlKG14M19jYW0sIGljZCk7CisJcmV0ID0gaWNkLT5vcHMtPmluaXQoaWNkKTsKKwlpZiAocmV0IDwgMCkgeworCQljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCQlnb3RvIGVpbml0OworCX0KKworCW14M19jYW0tPmljZCA9IGljZDsKKworZWluaXQ6CitlYnVzeToKKwlpZiAoIXJldCkKKwkJZGV2X2luZm8oJmljZC0+ZGV2LCAiTVgzIENhbWVyYSBkcml2ZXIgYXR0YWNoZWQgdG8gY2FtZXJhICVkXG4iLAorCQkJIGljZC0+ZGV2bnVtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG14M19jYW1lcmFfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJQlVHX09OKGljZCAhPSBteDNfY2FtLT5pY2QpOworCisJaWYgKCppY2hhbikgeworCQlkbWFfcmVsZWFzZV9jaGFubmVsKCYoKmljaGFuKS0+ZG1hX2NoYW4pOworCQkqaWNoYW4gPSBOVUxMOworCX0KKworCWljZC0+b3BzLT5yZWxlYXNlKGljZCk7CisKKwljbGtfZGlzYWJsZShteDNfY2FtLT5jbGspOworCisJbXgzX2NhbS0+aWNkID0gTlVMTDsKKworCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMyBDYW1lcmEgZHJpdmVyIGRldGFjaGVkIGZyb20gY2FtZXJhICVkXG4iLAorCQkgaWNkLT5kZXZudW0pOworfQorCitzdGF0aWMgYm9vbCBjaGFubmVsX2NoYW5nZV9yZXF1ZXN0ZWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCisJLyogRG8gYnVmZmVycyBoYXZlIHRvIGJlIHJlLWFsbG9jYXRlZCBvciBjaGFubmVsIHJlLWNvbmZpZ3VyZWQ/ICovCisJcmV0dXJuIGljaGFuICYmIHJlY3QtPndpZHRoICogcmVjdC0+aGVpZ2h0ID4gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0OworfQorCitzdGF0aWMgaW50IHRlc3RfcGxhdGZvcm1fcGFyYW0oc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgYnVzd2lkdGgsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCS8qCisJICogUGxhdGZvcm0gc3BlY2lmaWVkIHN5bmNocm9uaXphdGlvbiBhbmQgcGl4ZWwgY2xvY2sgcG9sYXJpdGllcyBhcmUKKwkgKiBvbmx5IGEgcmVjb21tZW5kYXRpb24gYW5kIGFyZSBvbmx5IHVzZWQgZHVyaW5nIHByb2JpbmcuIE1YM3gKKwkgKiBjYW1lcmEgaW50ZXJmYWNlIG9ubHkgd29ya3MgaW4gbWFzdGVyIG1vZGUsIGkuZS4sIHVzZXMgSFNZTkMgYW5kCisJICogVlNZTkMgc2lnbmFscyBmcm9tIHRoZSBzZW5zb3IKKwkgKi8KKwkqZmxhZ3MgPSBTT0NBTV9NQVNURVIgfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCQlTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0xPVzsKKworCS8qIElmIHJlcXVlc3RlZCBkYXRhIHdpZHRoIGlzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0sIHVzZSBpdCBvciBhbnkKKwkgKiBwb3NzaWJsZSBsb3dlciB2YWx1ZSAtIGkuTVgzMSBpcyBzbWFydCBlbm91Z2ggdG8gc2NoaWZ0IGJpdHMgKi8KKwlzd2l0Y2ggKGJ1c3dpZHRoKSB7CisJY2FzZSAxNToKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNSB8IFNPQ0FNX0RBVEFXSURUSF8xMCB8CisJCQlTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF80OworCQlicmVhazsKKwljYXNlIDEwOgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwIHwgU09DQU1fREFUQVdJRFRIXzggfAorCQkJU09DQU1fREFUQVdJRFRIXzQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8obXgzX2NhbS0+ZGV2LCAiVW5zdXBwb3J0ZWQgYnVzIHdpZHRoICVkXG4iLCBidXN3aWR0aCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IGRlcHRoKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGJ1c19mbGFncywgY2FtZXJhX2ZsYWdzOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGRlcHRoLCAmYnVzX2ZsYWdzKTsKKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLCBkZXB0aCwgcmV0KTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJcmV0ID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZpY2QtPmRldiwgIkZsYWdzIGluY29tcGF0aWJsZTogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQkgY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGJvb2wgY2hhbl9maWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgKnJxID0gYXJnOworCXN0cnVjdCBteDNfY2FtZXJhX3BkYXRhICpwZGF0YTsKKworCWlmICghcnEpCisJCXJldHVybiBmYWxzZTsKKworCXBkYXRhID0gcnEtPm14M19jYW0tPmRldi0+cGxhdGZvcm1fZGF0YTsKKworCXJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgorCQlwZGF0YS0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0IG14M19jYW1lcmFfZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUJCT0gIkJheWVyIChzUkdCKSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJfSwgeworCQkubmFtZQkJPSAiTW9ub2Nocm9tZSA4IGJpdCIsCisJCS5kZXB0aAkJPSA4LAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCX0sCit9OworCitzdGF0aWMgYm9vbCBidXN3aWR0aF9zdXBwb3J0ZWQoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJc3dpdGNoIChkZXB0aCkgeworCWNhc2UgNDoKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNCk7CisJY2FzZSA4OgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF84KTsKKwljYXNlIDEwOgorCQlyZXR1cm4gISEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCk7CisJY2FzZSAxNToKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9nZXRfZm9ybWF0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgaW50IGlkeCwKKwkJCQkgIHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJaW50IGZvcm1hdHMgPSAwLCBidXN3aWR0aCwgcmV0OworCisJYnVzd2lkdGggPSBpY2QtPmZvcm1hdHNbaWR4XS5kZXB0aDsKKworCWlmICghYnVzd2lkdGhfc3VwcG9ydGVkKGljaSwgYnVzd2lkdGgpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG14M19jYW1lcmFfdHJ5X2J1c19wYXJhbShpY2QsIGJ1c3dpZHRoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzBdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwkJZ290byBwYXNzdGhyb3VnaDsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZMTY6CisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSAmbXgzX2NhbWVyYV9mb3JtYXRzWzFdOworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwgIlByb3ZpZGluZyBmb3JtYXQgJXMgdXNpbmcgJXNcbiIsCisJCQkJbXgzX2NhbWVyYV9mb3JtYXRzWzBdLm5hbWUsCisJCQkJaWNkLT5mb3JtYXRzW2lkeF0ubmFtZSk7CisJCX0KKwlkZWZhdWx0OgorcGFzc3Rocm91Z2g6CisJCS8qIEdlbmVyaWMgcGFzcy10aHJvdWdoICovCisJCWZvcm1hdHMrKzsKKwkJaWYgKHhsYXRlKSB7CisJCQl4bGF0ZS0+aG9zdF9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+Y2FtX2ZtdCA9IGljZC0+Zm9ybWF0cyArIGlkeDsKKwkJCXhsYXRlLT5idXN3aWR0aCA9IGJ1c3dpZHRoOworCQkJeGxhdGUrKzsKKwkJCWRldl9kYmcoJmljaS0+ZGV2LAorCQkJCSJQcm92aWRpbmcgZm9ybWF0ICVzIGluIHBhc3MtdGhyb3VnaCBtb2RlXG4iLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJfQorCisJcmV0dXJuIGZvcm1hdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZV9nZW9tZXRyeShzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0sCisJCQkgICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwl1MzIgY3RybCwgd2lkdGhfZmllbGQsIGhlaWdodF9maWVsZDsKKworCS8qIFNldHVwIGZyYW1lIHNpemUgLSB0aGlzIGNhbm5vdCBiZSBjaGFuZ2VkIG9uLXRoZS1mbHkuLi4gKi8KKwl3aWR0aF9maWVsZCA9IHJlY3QtPndpZHRoIC0gMTsKKwloZWlnaHRfZmllbGQgPSByZWN0LT5oZWlnaHQgLSAxOworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX1NFTlNfRlJNX1NJWkUpOworCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCB3aWR0aF9maWVsZCA8PCAxNiwgQ1NJX0ZMQVNIX1NUUk9CRV8xKTsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIChoZWlnaHRfZmllbGQgPDwgMTYpIHwgMHgyMiwgQ1NJX0ZMQVNIX1NUUk9CRV8yKTsKKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgfCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSwgQ1NJX0FDVF9GUk1fU0laRSk7CisKKwkvKiAuLi5hbmQgcG9zaXRpb24gKi8KKwljdHJsID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9PVVRfRlJNX0NUUkwpICYgMHhmZmZmMDAwMDsKKwkvKiBTZW5zb3IgZG9lcyB0aGUgY3JvcHBpbmcgKi8KKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIGN0cmwgfCAwIHwgKDAgPDwgOCksIENTSV9PVVRfRlJNX0NUUkwpOworCisJLyoKKwkgKiBObyBuZWVkIHRvIGZyZWUgcmVzb3VyY2VzIGhlcmUgaWYgd2UgZmFpbCwgd2UnbGwgc2VlIGlmIHdlIG5lZWQgdG8KKwkgKiBkbyB0aGlzIG5leHQgdGltZSB3ZSBhcmUgY2FsbGVkCisJICovCit9CisKK3N0YXRpYyBpbnQgYWNxdWlyZV9kbWFfY2hhbm5lbChzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0pCit7CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKippY2hhbiA9ICZteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdOworCS8qIFdlIGhhdmUgdG8gdXNlIElETUFDX0lDXzcgZm9yIEJheWVyIC8gZ2VuZXJpYyBkYXRhICovCisJc3RydWN0IGRtYV9jaGFuX3JlcXVlc3QgcnEgPSB7Lm14M19jYW0gPSBteDNfY2FtLAorCQkJCSAgICAgIC5pZCA9IElETUFDX0lDXzd9OworCisJaWYgKCppY2hhbikgeworCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwgKl92YjsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmKCppY2hhbiktPmRtYV9jaGFuKTsKKwkJKmljaGFuID0gTlVMTDsKKwkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZiLCBfdmIsICZteDNfY2FtLT5jYXB0dXJlLCBxdWV1ZSkgeworCQkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKKwkJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCQkJd2FrZV91cCgmdmItPmRvbmUpOworCQl9CisJfQorCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1hc2spOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCSppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJKCppY2hhbiktPmNsaWVudCA9IG14M19jYW07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJLyoKKwkgKiBXZSBub3cga25vdyBwaXhlbCBmb3JtYXRzIGFuZCBjYW4gZGVjaWRlIHVwb24gRE1BLWNoYW5uZWwocykKKwkgKiBTbyBmYXIgb25seSBkaXJlY3QgY2FtZXJhLXRvLW1lbW9yeSBpcyBzdXBwb3J0ZWQKKwkgKi8KKwlpZiAoY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKGljZCwgcmVjdCkpIHsKKwkJaW50IHJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgcmVjdCk7CisKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX3JlY3QgcmVjdCA9IHsKKwkJLmxlZnQJPSBpY2QtPnhfY3VycmVudCwKKwkJLnRvcAk9IGljZC0+eV9jdXJyZW50LAorCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJfTsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworCWlmICgheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4LT5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGFjcXVpcmVfZG1hX2NoYW5uZWwobXgzX2NhbSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIE1pZ2h0IGhhdmUgdG8gcGVyZm9ybSBhIGNvbXBsZXRlIGludGVyZmFjZSBpbml0aWFsaXNhdGlvbiBsaWtlIGluCisJICogaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpIGluIG14Y192NGwyX3NfcGFyYW0oKS4gQWxzbyBjb25zaWRlcgorCSAqIG14Y192NGwyX3NfZm10KCkKKwkgKi8KKworCWNvbmZpZ3VyZV9nZW9tZXRyeShteDNfY2FtLCAmcmVjdCk7CisKKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIGYpOworCWlmICghcmV0KSB7CisJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CisJCWljZC0+Y3VycmVudF9mbXQgPSB4bGF0ZS0+aG9zdF9mbXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgcmV0OworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKHBpeGZtdCAmJiAheGxhdGUpIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbGltaXQgdG8gTVgzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworCWlmIChwaXgtPmhlaWdodCA+IDQwOTYpCisJCXBpeC0+aGVpZ2h0ID0gNDA5NjsKKwlpZiAocGl4LT53aWR0aCA+IDQwOTYpCisJCXBpeC0+d2lkdGggPSA0MDk2OworCisJcGl4LT5ieXRlc3BlcmxpbmUgPSBwaXgtPndpZHRoICoKKwkJRElWX1JPVU5EX1VQKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgsIDgpOworCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5oZWlnaHQgKiBwaXgtPmJ5dGVzcGVybGluZTsKKworCS8qIGNhbWVyYSBoYXMgdG8gc2VlIGl0cyBmb3JtYXQsIGJ1dCB0aGUgdXNlciB0aGUgb3JpZ2luYWwgb25lICovCisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJLyogbGltaXQgdG8gc2Vuc29yIGNhcGFiaWxpdGllcyAqLworCXJldCA9IGljZC0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcGl4LT5waXhlbGZvcm1hdCA9IHhsYXRlLT5ob3N0X2ZtdC0+Zm91cmNjOworCisJZmllbGQgPSBwaXgtPmZpZWxkOworCisJaWYgKGZpZWxkID09IFY0TDJfRklFTERfQU5ZKSB7CisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJfSBlbHNlIGlmIChmaWVsZCAhPSBWNEwyX0ZJRUxEX05PTkUpIHsKKwkJZGV2X2VycigmaWNkLT5kZXYsICJGaWVsZCB0eXBlICVkIHVuc3VwcG9ydGVkLlxuIiwgZmllbGQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfcmVxYnVmcyhzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBteDNfY2FtZXJhX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmaWNmLT52Yl92aWRxLCBwdCk7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9xdWVyeWNhcChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2ksCisJCQkgICAgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCS8qIGNhcC0+bmFtZSBpcyBzZXQgYnkgdGhlIGZpcmVuZGx5IGNhbGxlcjotPiAqLworCXN0cmxjcHkoY2FwLT5jYXJkLCAiaS5NWDN4IENhbWVyYSIsIHNpemVvZihjYXAtPmNhcmQpKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTigwLCAyLCAyKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3NldF9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIF9fdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFncywgY29tbW9uX2ZsYWdzOworCXUzMiBkdywgc2Vuc19jb25mOworCWludCByZXQgPSB0ZXN0X3BsYXRmb3JtX3BhcmFtKG14M19jYW0sIGljZC0+YnVzd2lkdGgsICZidXNfZmxhZ3MpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJmljaS0+ZGV2LCAicmVxdWVzdGVkIGJ1cyB3aWR0aCAlZCBiaXQ6ICVkXG4iLAorCQlpY2QtPmJ1c3dpZHRoLCByZXQpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CisKKwljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKwlpZiAoIWNvbW1vbl9mbGFncykgeworCQlkZXZfZGJnKCZpY2ktPmRldiwgIm5vIGNvbW1vbiBmbGFnczogY2FtZXJhICVseCwgaG9zdCAlbHhcbiIsCisJCQljYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE1ha2UgY2hvaWNlcywgYmFzZWQgb24gcGxhdGZvcm0gcHJlZmVyZW5jZXMgKi8KKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIKSAmJgorCSAgICAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9IU1ApCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0hTWU5DX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfVlNQKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9WU1lOQ19BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQV9BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFfQUNUSVZFX0xPVykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9EQVRBX0FDVElWRV9MT1c7CisJfQorCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKSkgeworCQlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1BDUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fUENMS19TQU1QTEVfUklTSU5HOworCQllbHNlCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkc7CisJfQorCisJLyogTWFrZSB0aGUgY2FtZXJhIHdvcmsgaW4gd2lkZXN0IGNvbW1vbiBtb2RlLCB3ZSdsbCB0YWtlIGNhcmUgb2YKKwkgKiB0aGUgcmVzdCAqLworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTUpCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xNTsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfMTApCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF8xMDsKKwllbHNlIGlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKKwkJY29tbW9uX2ZsYWdzID0gKGNvbW1vbl9mbGFncyAmIH5TT0NBTV9EQVRBV0lEVEhfTUFTSykgfAorCQkJU09DQU1fREFUQVdJRFRIXzg7CisJZWxzZQorCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CisJCQlTT0NBTV9EQVRBV0lEVEhfNDsKKworCXJldCA9IGljZC0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgY29tbW9uX2ZsYWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogU28gZmFyIG9ubHkgZ2F0ZWQgY2xvY2sgbW9kZSBpcyBzdXBwb3J0ZWQuIEFkZCBhIGxpbmUKKwkgKgkoMyA8PCBDU0lfU0VOU19DT05GX1NFTlNfUFJUQ0xfU0hJRlQpIHwKKwkgKiBiZWxvdyBhbmQgc2VsZWN0IHRoZSByZXF1aXJlZCBtb2RlIHdoZW4gc3VwcG9ydGluZyBvdGhlcgorCSAqIHN5bmNocm9uaXNhdGlvbiBwcm90b2NvbHMuCisJICovCisJc2Vuc19jb25mID0gY3NpX3JlZ19yZWFkKG14M19jYW0sIENTSV9TRU5TX0NPTkYpICYKKwkJfigoMSA8PCBDU0lfU0VOU19DT05GX1ZTWU5DX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUKSB8CisJCSAgKDEgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfUElYX0NMS19QT0xfU0hJRlQpIHwKKwkJICAoMyA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKSB8CisJCSAgKDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUKSk7CisKKwkvKiBUT0RPOiBTdXBwb3J0IFJHQiBhbmQgWVVWIGZvcm1hdHMgKi8KKworCS8qIFRoaXMgaGFzIGJlZW4gc2V0IGluIG14M19jYW1lcmFfYWN0aXZhdGUoKSwgYnV0IHdlIGNsZWFyIGl0IGFib3ZlICovCisJc2Vuc19jb25mIHw9IENTSV9TRU5TX0NPTkZfREFUQV9GTVRfQkFZRVI7CisKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVDsKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fSFNZTkNfQUNUSVZFX0xPVykKKwkJc2Vuc19jb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9IU1lOQ19QT0xfU0hJRlQ7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfVlNZTkNfUE9MX1NISUZUOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9QT0xfU0hJRlQ7CisKKwkvKiBKdXN0IGRvIHdoYXQgd2UncmUgYXNrZWQgdG8gZG8gKi8KKwlzd2l0Y2ggKHhsYXRlLT5ob3N0X2ZtdC0+ZGVwdGgpIHsKKwljYXNlIDQ6CisJCWR3ID0gMCA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZHcgPSAxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZHcgPSAyIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogQWN0dWFsbHkgaXQgY2FuIG9ubHkgYmUgMTUgbm93LCBkZWZhdWx0IGlzIGp1c3QgdG8gc2lsZW5jZQorCQkgKiBjb21waWxlciB3YXJuaW5ncworCQkgKi8KKwljYXNlIDE1OgorCQlkdyA9IDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCX0KKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgc2Vuc19jb25mIHwgZHcsIENTSV9TRU5TX0NPTkYpOworCisJZGV2X2RiZygmaWNpLT5kZXYsICJTZXQgU0VOU19DT05GIHRvICV4XG4iLCBzZW5zX2NvbmYgfCBkdyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2hvc3Rfb3BzIG14M19zb2NfY2FtZXJhX2hvc3Rfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuYWRkCQk9IG14M19jYW1lcmFfYWRkX2RldmljZSwKKwkucmVtb3ZlCQk9IG14M19jYW1lcmFfcmVtb3ZlX2RldmljZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IG14M19jYW1lcmFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG14M19jYW1lcmFfcmVzdW1lLAorI2VuZGlmCisJLnNldF9jcm9wCT0gbXgzX2NhbWVyYV9zZXRfY3JvcCwKKwkuc2V0X2ZtdAk9IG14M19jYW1lcmFfc2V0X2ZtdCwKKwkudHJ5X2ZtdAk9IG14M19jYW1lcmFfdHJ5X2ZtdCwKKwkuZ2V0X2Zvcm1hdHMJPSBteDNfY2FtZXJhX2dldF9mb3JtYXRzLAorCS5pbml0X3ZpZGVvYnVmCT0gbXgzX2NhbWVyYV9pbml0X3ZpZGVvYnVmLAorCS5yZXFidWZzCT0gbXgzX2NhbWVyYV9yZXFidWZzLAorCS5wb2xsCQk9IG14M19jYW1lcmFfcG9sbCwKKwkucXVlcnljYXAJPSBteDNfY2FtZXJhX3F1ZXJ5Y2FwLAorCS5zZXRfYnVzX3BhcmFtCT0gbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorfTsKKworc3RhdGljIGludCBteDNfY2FtZXJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICpzb2NfaG9zdDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlZ2V0cmVzOworCX0KKworCW14M19jYW0gPSB2bWFsbG9jKHNpemVvZigqbXgzX2NhbSkpOworCWlmICghbXgzX2NhbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbXgzIGNhbWVyYSBvYmplY3RcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVhbGxvYzsKKwl9CisJbWVtc2V0KG14M19jYW0sIDAsIHNpemVvZigqbXgzX2NhbSkpOworCisJbXgzX2NhbS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY3NpX2NsayIpOworCWlmIChJU19FUlIobXgzX2NhbS0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKG14M19jYW0tPmNsayk7CisJCWdvdG8gZWNsa2dldDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbXgzX2NhbSk7CisKKwlteDNfY2FtLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzID0gbXgzX2NhbS0+cGRhdGEtPmZsYWdzOworCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgKE1YM19DQU1FUkFfREFUQVdJRFRIXzQgfAorCQkJTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzEwIHwKKwkJCU1YM19DQU1FUkFfREFUQVdJRFRIXzE1KSkpIHsKKwkJLyogUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgZGF0YSB3aWR0aHMuIFRoaXMgaXMgYmFkLgorCQkgKiBXYXJuIGFuZCB1c2UgYSBkZWZhdWx0LiAqLworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiV0FSTklORyEgUGxhdGZvcm0gaGFzbid0IHNldCBhdmFpbGFibGUgIgorCQkJICJkYXRhIHdpZHRocywgdXNpbmcgZGVmYXVsdCA4IGJpdFxuIik7CisJCW14M19jYW0tPnBsYXRmb3JtX2ZsYWdzIHw9IE1YM19DQU1FUkFfREFUQVdJRFRIXzg7CisJfQorCisJbXgzX2NhbS0+bWNsayA9IG14M19jYW0tPnBkYXRhLT5tY2xrXzEwa2h6ICogMTAwMDA7CisJaWYgKCFteDNfY2FtLT5tY2xrKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIm1jbGtfMTBraHogPT0gMCEgUGxlYXNlLCBmaXggeW91ciBwbGF0Zm9ybSBkYXRhLiAiCisJCQkgIlVzaW5nIGRlZmF1bHQgMjBNSHpcbiIpOworCQlteDNfY2FtLT5tY2xrID0gMjAwMDAwMDA7CisJfQorCisJLyogbGlzdCBvZiB2aWRlby1idWZmZXJzICovCisJSU5JVF9MSVNUX0hFQUQoJm14M19jYW0tPmNhcHR1cmUpOworCXNwaW5fbG9ja19pbml0KCZteDNfY2FtLT5sb2NrKTsKKworCWJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWlmICghYmFzZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVpb3JlbWFwOworCX0KKworCW14M19jYW0tPmJhc2UJPSBiYXNlOworCW14M19jYW0tPmRldgk9ICZwZGV2LT5kZXY7CisKKwlzb2NfaG9zdAkJPSAmbXgzX2NhbS0+c29jX2hvc3Q7CisJc29jX2hvc3QtPmRydl9uYW1lCT0gTVgzX0NBTV9EUlZfTkFNRTsKKwlzb2NfaG9zdC0+b3BzCQk9ICZteDNfc29jX2NhbWVyYV9ob3N0X29wczsKKwlzb2NfaG9zdC0+cHJpdgkJPSBteDNfY2FtOworCXNvY19ob3N0LT5kZXYucGFyZW50CT0gJnBkZXYtPmRldjsKKwlzb2NfaG9zdC0+bnIJCT0gcGRldi0+aWQ7CisJZXJyID0gc29jX2NhbWVyYV9ob3N0X3JlZ2lzdGVyKHNvY19ob3N0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVjYW1ob3N0cmVnOworCisJLyogSURNQUMgaW50ZXJmYWNlICovCisJZG1hZW5naW5lX2dldCgpOworCisJcmV0dXJuIDA7CisKK2VjYW1ob3N0cmVnOgorCWlvdW5tYXAoYmFzZSk7CitlaW9yZW1hcDoKKwljbGtfcHV0KG14M19jYW0tPmNsayk7CitlY2xrZ2V0OgorCXZmcmVlKG14M19jYW0pOworZWFsbG9jOgorZWdldHJlczoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBteDNfY2FtZXJhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2xrX3B1dChteDNfY2FtLT5jbGspOworCisJc29jX2NhbWVyYV9ob3N0X3VucmVnaXN0ZXIoJm14M19jYW0tPnNvY19ob3N0KTsKKworCWlvdW5tYXAobXgzX2NhbS0+YmFzZSk7CisKKwkvKgorCSAqIFRoZSBjaGFubmVsIGhhcyBlaXRoZXIgbm90IGJlZW4gYWxsb2NhdGVkLAorCSAqIG9yIHNob3VsZCBoYXZlIGJlZW4gcmVsZWFzZWQKKwkgKi8KKwlpZiAoV0FSTl9PTihteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXS0+ZG1hX2NoYW4pOworCisJdmZyZWUobXgzX2NhbSk7CisKKwlkbWFlbmdpbmVfcHV0KCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaS5NWDN4IENhbWVyYSBkcml2ZXIgdW5sb2FkZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14M19jYW1lcmFfZHJpdmVyID0geworCS5kcml2ZXIgCT0geworCQkubmFtZQk9IE1YM19DQU1fRFJWX05BTUUsCisJfSwKKwkucHJvYmUJCT0gbXgzX2NhbWVyYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG14M19jYW1lcmFfcmVtb3ZlKSwKK307CisKKworc3RhdGljIGludCBfX2RldmluaXQgbXgzX2NhbWVyYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzX2NhbWVyYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXgzX2NhbWVyYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm14M19jYW1lcmFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXgzX2NhbWVyYV9pbml0KTsKK21vZHVsZV9leGl0KG14M19jYW1lcmFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiaS5NWDN4IFNvQyBDYW1lcmEgSG9zdCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8bGdAZGVueC5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCmluZGV4IGUzY2JlMTQuLjg0YWVjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwpAQCAtMjUsMTYgKzI1LDIwIEBACiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CiAKICNpbmNsdWRlICJteGIuaCIKICNpbmNsdWRlICJ0ZWE2NDE1Yy5oIgogI2luY2x1ZGUgInRlYTY0MjAuaCIKLSNpbmNsdWRlICJ0ZGE5ODQwLmgiCiAKLSNkZWZpbmUgSTJDX1NBQTcxMTEgMHgyNAorI2RlZmluZQlJMkNfU0FBNTI0NkEgIDB4MTEKKyNkZWZpbmUgSTJDX1NBQTcxMTFBICAweDI0CisjZGVmaW5lCUkyQ19UREE5ODQwICAgMHg0MgorI2RlZmluZQlJMkNfVEVBNjQxNUMgIDB4NDMKKyNkZWZpbmUJSTJDX1RFQTY0MjBfMSAweDRjCisjZGVmaW5lCUkyQ19URUE2NDIwXzIgMHg0ZAorI2RlZmluZQlJMkNfVFVORVIgICAgIDB4NjAKIAogI2RlZmluZSBNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpICAgKGRldi0+cmV2aXNpb24gIT0gMCkKIApAQCAtNzksNTcgKzgzLDM1IEBACiBzdGF0aWMgaW50IHZpZGVvX2F1ZGlvX2Nvbm5lY3RbTVhCX0lOUFVUU10gPQogCXsgMCwgMSwgMywgMyB9OwogCi0vKiB0aGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQotKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dCAqLwotc3RhdGljIHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCBURUE2NDIwX2NkW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MSwxLDB9LHsxLDEsMH19LAkvKiBUdW5lciAqLwotCQl7ezUsMSwwfSx7NiwxLDB9fSwJLyogQVVYIDEgKi8KLQkJe3s0LDEsMH0sezYsMSwwfX0sCS8qIEFVWCAyICovCi0JCXt7MywxLDB9LHs2LDEsMH19LAkvKiBBVVggMyAqLwotCQl7ezEsMSwwfSx7MywxLDB9fSwJLyogUmFkaW8gKi8KLQkJe3sxLDEsMH0sezIsMSwwfX0sCS8qIENELVJvbSAqLwotCQl7ezYsMSwwfSx7NiwxLDB9fQkvKiBNdXRlICovCi0JCX07CisvKiBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQorICAgKHNlZSBhYm92ZSkgdG8gdGhlIENELW91dHB1dC4gTm90ZSB0aGF0IGdhaW4gaXMgc2V0IHRvIDAgaW4gdGhpcyB0YWJsZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9yb3V0aW5nIFRFQTY0MjBfY2RbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAxLCAxIH0sIHsgMSwgMSB9IH0sCS8qIFR1bmVyICovCisJeyB7IDUsIDEgfSwgeyA2LCAxIH0gfSwJLyogQVVYIDEgKi8KKwl7IHsgNCwgMSB9LCB7IDYsIDEgfSB9LAkvKiBBVVggMiAqLworCXsgeyAzLCAxIH0sIHsgNiwgMSB9IH0sCS8qIEFVWCAzICovCisJeyB7IDEsIDEgfSwgeyAzLCAxIH0gfSwJLyogUmFkaW8gKi8KKwl7IHsgMSwgMSB9LCB7IDIsIDEgfSB9LAkvKiBDRC1Sb20gKi8KKwl7IHsgNiwgMSB9LCB7IDYsIDEgfSB9CS8qIE11dGUgKi8KK307CiAKLS8qIHRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCi0oc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggVEVBNjQyMF9saW5lW01YQl9BVURJT1MrMV1bMl0gPQotCQl7Ci0JCXt7MiwzLDB9LHsxLDIsMH19LAotCQl7ezUsMywwfSx7NiwyLDB9fSwKLQkJe3s0LDMsMH0sezYsMiwwfX0sCi0JCXt7MywzLDB9LHs2LDIsMH19LAotCQl7ezIsMywwfSx7MywyLDB9fSwKLQkJe3syLDMsMH0sezIsMiwwfX0sCi0JCXt7NiwzLDB9LHs2LDIsMH19CS8qIE11dGUgKi8KLQkJfTsKKy8qIFRoZXNlIGFyZSB0aGUgbmVjZXNzYXJ5IGlucHV0LW91dHB1dC1waW5zIGZvciBicmluZ2luZyBvbmUgYXVkaW8gc291cmNlCisgICAoc2VlIGFib3ZlKSB0byB0aGUgbGluZS1vdXRwdXQuIE5vdGUgdGhhdCBnYWluIGlzIHNldCB0byAwIGluIHRoaXMgdGFibGUuICovCitzdGF0aWMgc3RydWN0IHY0bDJfcm91dGluZyBURUE2NDIwX2xpbmVbTVhCX0FVRElPUyArIDFdWzJdID0geworCXsgeyAyLCAzIH0sIHsgMSwgMiB9IH0sCisJeyB7IDUsIDMgfSwgeyA2LCAyIH0gfSwKKwl7IHsgNCwgMyB9LCB7IDYsIDIgfSB9LAorCXsgeyAzLCAzIH0sIHsgNiwgMiB9IH0sCisJeyB7IDIsIDMgfSwgeyAzLCAyIH0gfSwKKwl7IHsgMiwgMyB9LCB7IDIsIDIgfSB9LAorCXsgeyA2LCAzIH0sIHsgNiwgMiB9IH0JLyogTXV0ZSAqLworfTsKIAogI2RlZmluZSBNQVhDT05UUk9MUwkxCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIG14Yl9jb250cm9sc1tdID0gewogCXsgVjRMMl9DSURfQVVESU9fTVVURSwgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwgIk11dGUiLCAwLCAxLCAxLCAwLCAwIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19FTlVNSU5QVVQsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19RVUVSWUNUUkwsIAlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgVklESU9DX0dfQ1RSTCwJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19TX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfR19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19UVU5FUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19GUkVRVUVOQ1ksCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19GUkVRVUVOQ1ksIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfQVVESU8sIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0RCR19HX1JFR0lTVEVSLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19EQkdfU19SRUdJU1RFUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBNWEJfU19BVURJT19DRCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCi0JeyBNWEJfU19BVURJT19MSU5FLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwJLyogY3VzdG9tIGNvbnRyb2wgKi8KLQl7IDAsCQkJMCB9Ci19OwotCiBzdHJ1Y3QgbXhiCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OwpAQCAtMTM3LDEyICsxMTksMTIgQEAKIAogCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcHRlcjsKIAotCXN0cnVjdCBpMmNfY2xpZW50CSpzYWE3MTExYTsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGRhOTg0MDsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQxNWM7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnR1bmVyOwotCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDIwXzE7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MjBfMjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnNhYTcxMTFhOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdGRhOTg0MDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnRlYTY0MTVjOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdHVuZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzE7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDIwXzI7CiAKIAlpbnQJY3VyX21vZGU7CS8qIGN1cnJlbnQgYXVkaW8gbW9kZSAobW9ubywgc3RlcmVvLCAuLi4pICovCiAJaW50CWN1cl9pbnB1dDsJLyogY3VycmVudCBpbnB1dCAqLwpAQCAtMTUwLDg0ICsxMzIsNTEgQEAKIAlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kJY3VyX2ZyZXE7CS8qIGN1cnJlbnQgZnJlcXVlbmN5IHRoZSB0dW5lciBpcyB0dW5lZCB0byAqLwogfTsKIAorI2RlZmluZSBzYWE3MTExYV9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT5zYWE3MTExYSwgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0ZWE2NDIwXzFfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+dGVhNjQyMF8xLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MjBfMl9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZWE2NDIwXzIsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgdGRhOTg0MF9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZGE5ODQwLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRlYTY0MTVjX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnRlYTY0MTVjLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHR1bmVyX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnR1bmVyLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uOwogCi1zdGF0aWMgaW50IG14Yl9jaGVja19jbGllbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbXhiX3Byb2JlKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2KQogewotCXN0cnVjdCBteGIgKm14YiA9IGRhdGE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7Ci0KLQlpZiAoIWNsaWVudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoSTJDX0FERFJfVEVBNjQyMF8xID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT50ZWE2NDIwXzEgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1RFQTY0MjBfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQyMF8yID0gY2xpZW50OwotCWlmIChJMkNfVEVBNjQxNUNfMiA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQxNWMgPSBjbGllbnQ7Ci0JaWYgKEkyQ19BRERSX1REQTk4NDAgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnRkYTk4NDAgPSBjbGllbnQ7Ci0JaWYgKEkyQ19TQUE3MTExID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT5zYWE3MTExYSA9IGNsaWVudDsKLQlpZiAoMHg2MCA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dHVuZXIgPSBjbGllbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBteGJfcHJvYmUoc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYpCi17Ci0Jc3RydWN0IG14YiogbXhiID0gTlVMTDsKLQlpbnQgcmVzdWx0OwotCi0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14Yjogc2FhNzExMSBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0ZWE2NDIwIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHRlYTY0MjAgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQxNWMiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14YjogdGVhNjQxNWMgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGRhOTg0MCIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0ZGE5ODQwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHR1bmVyIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJc3RydWN0IG14YiAqbXhiID0gTlVMTDsKIAogCW14YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBteGIpLCBHRlBfS0VSTkVMKTsKLQlpZiggTlVMTCA9PSBteGIgKSB7CisJaWYgKG14YiA9PSBOVUxMKSB7CiAJCURFQl9EKCgibm90IGVub3VnaCBrZXJuZWwgbWVtb3J5LlxuIikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlteGItPmkyY19hZGFwdGVyID0gKHN0cnVjdCBpMmNfYWRhcHRlcikgewotCQkuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAotCX07Ci0KIAlzbnByaW50ZihteGItPmkyY19hZGFwdGVyLm5hbWUsIHNpemVvZihteGItPmkyY19hZGFwdGVyLm5hbWUpLCAibXhiJWQiLCBteGJfbnVtKTsKIAogCXNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShkZXYsICZteGItPmkyY19hZGFwdGVyLCBTQUE3MTQ2X0kyQ19CVVNfQklUX1JBVEVfNDgwKTsKLQlpZihpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgeworCWlmIChpMmNfYWRkX2FkYXB0ZXIoJm14Yi0+aTJjX2FkYXB0ZXIpIDwgMCkgewogCQlERUJfUygoImNhbm5vdCByZWdpc3RlciBpMmMtZGV2aWNlLiBza2lwcGluZy5cbiIpKTsKIAkJa2ZyZWUobXhiKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JLyogbG9vcCB0aHJvdWdoIGFsbCBpMmMtZGV2aWNlcyBvbiB0aGUgYnVzIGFuZCBsb29rIHdobyBpcyB0aGVyZSAqLwotCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmbXhiLT5pMmNfYWRhcHRlci5kZXYsIG14YiwgbXhiX2NoZWNrX2NsaWVudHMpOworCW14Yi0+c2FhNzExMWEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNzExNSIsICJzYWE3MTExIiwgSTJDX1NBQTcxMTFBKTsKKwlteGItPnRlYTY0MjBfMSA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8xKTsKKwlteGItPnRlYTY0MjBfMiA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDIwIiwgInRlYTY0MjAiLCBJMkNfVEVBNjQyMF8yKTsKKwlteGItPnRlYTY0MTVjID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInRlYTY0MTVjIiwgInRlYTY0MTVjIiwgSTJDX1RFQTY0MTVDKTsKKwlteGItPnRkYTk4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidGRhOTg0MCIsICJ0ZGE5ODQwIiwgSTJDX1REQTk4NDApOworCW14Yi0+dHVuZXIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidHVuZXIiLCAidHVuZXIiLCBJMkNfVFVORVIpOworCWlmICh2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAic2FhNTI0NmEiLCAic2FhNTI0NmEiLCBJMkNfU0FBNTI0NkEpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm14YjogZm91bmQgdGVsZXRleHQgZGVjb2RlclxuIik7CisJfQogCiAJLyogY2hlY2sgaWYgYWxsIGRldmljZXMgYXJlIHByZXNlbnQgKi8KIAlpZiAoIW14Yi0+dGVhNjQyMF8xIHx8ICFteGItPnRlYTY0MjBfMiB8fCAhbXhiLT50ZWE2NDE1YyB8fApAQCAtMzE1LDQ3ICsyNjQsNDUgQEAKIAlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJaW50IGkgPSAwLCBlcnIgPSAwOwotCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggdm07CiAKIAkvKiBzZWxlY3QgdmlkZW8gbW9kZSBpbiBzYWE3MTExYSAqLwotCW14Yi0+c2FhNzExMWEtPmRyaXZlci0+Y29tbWFuZChteGItPnNhYTcxMTFhLCBWSURJT0NfU19TVEQsICZzdGQpOworCXNhYTcxMTFhX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIHNhYTcxMTFhICovCiAJaSA9IDA7CiAJcm91dGUuaW5wdXQgPSBTQUE3MTE1X0NPTVBPU0lURTA7CiAJcm91dGUub3V0cHV0ID0gU0FBNzExMV9GTVRfQ0NJUiB8IFNBQTcxMTFfVkJJX0JZUEFTUzsKLQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJc2FhNzExMWFfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiBzZWxlY3QgYSB0dW5lciB0eXBlICovCiAJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWOwogCXR1bl9zZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKIAl0dW5fc2V0dXAudHlwZSA9IFRVTkVSX1BISUxJUFNfUEFMOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAkvKiB0dW5lIGluIHNvbWUgZnJlcXVlbmN5IG9uIHR1bmVyICovCiAJbXhiLT5jdXJfZnJlcS50dW5lciA9IDA7CiAJbXhiLT5jdXJfZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJbXhiLT5jdXJfZnJlcS5mcmVxdWVuY3kgPSBmcmVxOwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19GUkVRVUVOQ1ksCi0JCQkJCSZteGItPmN1cl9mcmVxKTsKKwl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfZnJlcXVlbmN5LCAmbXhiLT5jdXJfZnJlcSk7CiAKIAkvKiBzZXQgYSBkZWZhdWx0IHZpZGVvIHN0YW5kYXJkICovCi0JbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAogCS8qIG11dGUgYXVkaW8gb24gdGVhNjQyMHMgKi8KLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMV0pOwotCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVswXSk7Ci0JbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkWzZdWzFdKTsKKwl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMF0pOworCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMV0pOwogCi0JLyogc3dpdGNoIHRvIHR1bmVyLWNoYW5uZWwgb24gdGVhNjQxNWMqLwotCXZtLm91dCA9IDE3OwotCXZtLmluICA9IDM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwkvKiBzd2l0Y2ggdG8gdHVuZXItY2hhbm5lbCBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxNzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyovCi0Jdm0uaW4gID0gMzsKLQl2bS5vdXQgPSAxMzsKLQlteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pOworCS8qIHNlbGVjdCB0dW5lci1vdXRwdXQgb24gbXVsdGljYWJsZSBvbiB0ZWE2NDE1YyAqLworCXJvdXRlLmlucHV0ID0gMzsKKwlyb3V0ZS5vdXRwdXQgPSAxMzsKKwl0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCS8qIHRoZSByZXN0IGZvciBteGIgKi8KIAlteGItPmN1cl9pbnB1dCA9IDA7CkBAIC00MjQsNiArMzcxLDM0MyBAQAogfQogKi8KIAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSBxYy0+aWQpIHsKKwkJCSpxYyA9IG14Yl9jb250cm9sc1tpXTsKKwkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlpbnQgaTsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCXJldHVybiBkZXYtPmV4dF92dl9kYXRhLT5jb3JlX29wcy0+dmlkaW9jX2dfY3RybChmaWxlLCBmaCwgdmMpOworCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7CisJCURFQl9EKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7CisJCXJldHVybiAwOworCX0KKworCURFQl9FRSgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJaW50IGkgPSAwOworCisJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2Nfc19jdHJsKGZpbGUsIGZoLCB2Yyk7CisKKwlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKKwkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKKwkJaWYgKCF2Yy0+dmFsdWUpIHsKKwkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCisJCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV1bMV0pOworCQl9IGVsc2UgeworCQkJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLAorCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwkJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVs2XVsxXSk7CisJCX0KKwkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IE1YQl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwkqaSA9IG14Yi0+Y3VyX2lucHV0OworCisJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCWludCBpID0gMDsKKworCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlteGItPmN1cl9pbnB1dCA9IGlucHV0OworCisJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAorCQkJaW5wdXRfcG9ydF9zZWxlY3Rpb25baW5wdXRdLmhwc19zeW5jKTsKKworCS8qIHByZXBhcmUgc3dpdGNoaW5nIG9mIHRlYTY0MTVjIGFuZCBzYWE3MTExYTsKKwkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLworCXN3aXRjaCAoaW5wdXQpIHsKKwljYXNlIFRVTkVSOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDM7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzFcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJLyogY29ubmVjdCB0dW5lci1vdXRwdXQgYWx3YXlzIHRvIG11bHRpY2FibGUgKi8KKwkJcm91dGUuaW5wdXQgPSAzOworCQlyb3V0ZS5vdXRwdXQgPSAxMzsKKwkJYnJlYWs7CisJY2FzZSBBVVgzX1lDOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4M195YyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgzOgorCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcworCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KKwkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMTsKKwkJYnJlYWs7CisJY2FzZSBBVVgxOgorCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOworCQlyb3V0ZS5pbnB1dCA9IDE7CisJCXJvdXRlLm91dHB1dCA9IDE3OworCQlicmVhazsKKwl9CisKKwkvKiBzd2l0Y2ggdmlkZW8gaW4gdGVhNjQxNWMgb25seSBpZiBuZWNlc3NhcnkgKi8KKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBUVU5FUjoKKwljYXNlIEFVWDE6CisJCWlmICh0ZWE2NDE1Y19jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogc3dpdGNoIHZpZGVvIGluIHNhYTcxMTFhICovCisJcm91dGUuaW5wdXQgPSBpOworCXJvdXRlLm91dHB1dCA9IDA7CisJaWYgKHNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpKQorCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOworCisJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2Ugb25seSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoMCA9PSBteGItPmN1cl9tdXRlKSB7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVsxXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlpZiAodC0+aW5kZXgpIHsKKwkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlERUJfRUUoKCJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KSk7CisKKwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJc3RybGNweSh0LT5uYW1lLCAiVFYgVHVuZXIiLCBzaXplb2YodC0+bmFtZSkpOworCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKKwl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTk9STSB8IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8CisJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCXQtPmF1ZG1vZGUgPSBteGItPmN1cl9tb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmICh0LT5pbmRleCkgeworCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW14Yi0+Y3VyX21vZGUgPSB0LT5hdWRtb2RlOworCXJldHVybiBjYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX0dfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLAorCQkJCQlteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqZiA9IG14Yi0+Y3VyX2ZyZXE7CisKKwlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisKKwlpZiAoZi0+dHVuZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG14Yi0+Y3VyX2lucHV0KSB7CisJCURFQl9EKCgiVklESU9DX1NfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLCBteGItPmN1cl9pbnB1dCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlteGItPmN1cl9mcmVxID0gKmY7CisJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7CisKKwkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJm14Yi0+Y3VyX2ZyZXEpOworCisJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJdnYtPnZiaV9maWVsZGNvdW50ID0gMDsKKwlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7CisJCURFQl9EKCgiVklESU9DX0dfQVVESU8gJWQgb3V0IG9mIHJhbmdlLlxuIiwgYS0+aW5kZXgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX0dfQVVESU8gJWQuXG4iLCBhLT5pbmRleCkpOworCW1lbWNweShhLCAmbXhiX2F1ZGlvc1t2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV0sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IHZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBnX3JlZ2lzdGVyLCByZWcpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworfQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHZpZGlvY19kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgaW50IGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNWEJfU19BVURJT19DRDoKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIiwgaSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlERUJfRUUoKCJNWEJfU19BVURJT19DRDogaTolZC5cbiIsIGkpKTsKKworCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2NkW2ldWzBdKTsKKwkJdGVhNjQyMF8yX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9jZFtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgTVhCX1NfQVVESU9fTElORToKKwl7CisJCWludCBpID0gKihpbnQgKilhcmc7CisKKwkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgeworCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCURFQl9FRSgoIk1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLCBpKSk7CisJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVtpXVsxXSk7CisKKwkJcmV0dXJuIDA7CisJfQorCWRlZmF1bHQ6CisvKgorCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7CisqLworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiAvKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwpAQCAtNDM3LDYgKzcyMSwyMyBAQAogCSAgIGFscmVhZHkgZGlkIHRoaXMgaW4gIm14Yl92bDQyX3Byb2JlIiAqLwogCiAJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCXZ2X2RhdGEub3BzLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXI7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfdHVuZXIgPSB2aWRpb2Nfc190dW5lcjsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3k7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2F1ZGlvID0gdmlkaW9jX2dfYXVkaW87CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfYXVkaW8gPSB2aWRpb2Nfc19hdWRpbzsKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJdnZfZGF0YS5vcHMudmlkaW9jX2dfcmVnaXN0ZXIgPSB2aWRpb2NfZ19yZWdpc3RlcjsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19yZWdpc3RlciA9IHZpZGlvY19zX3JlZ2lzdGVyOworI2VuZGlmCisJdnZfZGF0YS5vcHMudmlkaW9jX2RlZmF1bHQgPSB2aWRpb2NfZGVmYXVsdDsKIAlpZiAoc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJm14Yi0+dmlkZW9fZGV2LCBkZXYsICJteGIiLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXJldHVybiAtMTsKQEAgLTQ0OSwxMyArNzUwLDYgQEAKIAkJfQogCX0KIAotCWkyY191c2VfY2xpZW50KG14Yi0+dGVhNjQyMF8xKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZWE2NDE1Yyk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZGE5ODQwKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfdXNlX2NsaWVudChteGItPnR1bmVyKTsKLQogCXByaW50aygibXhiOiBmb3VuZCBNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCAjJWQuXG4iLCBteGJfbnVtKTsKIAogCW14Yl9udW0rKzsKQEAgLTQ2OSwxMyArNzYzLDYgQEAKIAogCURFQl9FRSgoImRldjolcFxuIiwgZGV2KSk7CiAKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZWE2NDIwXzEpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRlYTY0MjBfMik7Ci0JaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQxNWMpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRkYTk4NDApOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnNhYTcxMTFhKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50dW5lcik7Ci0KIAlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldixkZXYpOwogCWlmIChNWEJfQk9BUkRfQ0FOX0RPX1ZCSShkZXYpKQogCQlzYWE3MTQ2X3VucmVnaXN0ZXJfZGV2aWNlKCZteGItPnZiaV9kZXYsIGRldik7CkBAIC00ODksMzMwICs3NzYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyBteGJfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0KLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBWSURJT0NfRU5VTUlOUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0KLQkJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsaS0+aW5kZXgpKTsKLQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBNWEJfSU5QVVRTKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbWNweShpLCAmbXhiX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JLyogdGhlIHNhYTcxNDYgcHJvdmlkZXMgc29tZSBjb250cm9scyAoYnJpZ2h0bmVzcywgY29udHJhc3QsIHNhdHVyYXRpb24pCi0JICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKLQkgICB0byByZXR1cm4gd2l0aCBhIHZhbHVlICE9IDAgZXZlbiBpZiB0aGUgZnVuY3Rpb24gc3VjY2VkZWQuLiAqLwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7Ci0JCQkJKnFjID0gbXhiX2NvbnRyb2xzW2ldOwotCQkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICp2YyA9IGFyZzsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA8IDApCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCXZjLT52YWx1ZSA9IG14Yi0+Y3VyX211dGU7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCWludCBpID0gMDsKLQotCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKLQkJCQlicmVhazsKLQkJfQotCi0JCWlmIChpIDwgMCkKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQkJbXhiLT5jdXJfbXV0ZSA9IHZjLT52YWx1ZTsKLQkJCWlmICghdmMtPnZhbHVlKSB7Ci0JCQkJLyogc3dpdGNoIHRoZSBhdWRpby1zb3VyY2UgKi8KLQkJCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzFdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lWzZdWzBdKTsKLQkJCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJCSZURUE2NDIwX2xpbmVbNl1bMV0pOwotCQkJfQotCQkJREVCX0VFKCgiVklESU9DX1NfQ1RSTCwgVjRMMl9DSURfQVVESU9fTVVURTogJWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSAoaW50ICopYXJnOwotCQkqaW5wdXQgPSBteGItPmN1cl9pbnB1dDsKLQotCQlERUJfRUUoKCJWSURJT0NfR19JTlBVVCAlZC5cbiIsICppbnB1dCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCWludCBpbnB1dCA9ICooaW50ICopYXJnOwotCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwotCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCQlpbnQgaSA9IDA7Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCkpOwotCi0JCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gTVhCX0lOUFVUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW14Yi0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0KLQkJc2FhNzE0Nl9zZXRfaHBzX3NvdXJjZV9hbmRfc3luYyhkZXYsIGlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc291cmNlLAotCQkJCWlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7Ci0KLQkJLyogcHJlcGFyZSBzd2l0Y2hpbmcgb2YgdGVhNjQxNWMgYW5kIHNhYTcxMTFhOwotCQkgICBoYXZlIGEgbG9vayBhdCB0aGUgJ2JhY2tncm91bmQnLWZpbGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zICAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOwotCQkJdm0uaW4gID0gMzsKLQkJCXZtLm91dCA9IDE3OwotCi0JCQlpZiAobXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCi0JCQl2bS5pbiAgPSAzOwotCQkJdm0ub3V0ID0gMTM7Ci0JCQlicmVhazsKLQkJY2FzZSBBVVgzX1lDOgotCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDNfeWMgaXMKLQkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLwotCQkJaSA9IFNBQTcxMTVfU1ZJREVPMTsKLQkJCWJyZWFrOwotCQljYXNlIEFVWDM6Ci0JCQkvKiBub3RoaW5nIHRvIGJlIGRvbmUgaGVyZS4gYXV4MyBpcwotCQkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCi0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUxOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVYMToKLQkJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTA7Ci0JCQl2bS5pbiAgPSAxOwotCQkJdm0ub3V0ID0gMTc7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiB0ZWE2NDE1YyBvbmx5IGlmIG5lY2Vzc2FyeSAqLwotCQlzd2l0Y2ggKGlucHV0KSB7Ci0JCWNhc2UgVFVORVI6Ci0JCWNhc2UgQVVYMToKLQkJCWlmIChteGItPnRlYTY0MTVjLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDE1YywgVEVBNjQxNUNfU1dJVENILCAmdm0pKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3MgdGVhNjQxNWMgIzNcbiIpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLwotCQlyb3V0ZS5pbnB1dCA9IGk7Ci0JCXJvdXRlLm91dHB1dCA9IDA7Ci0JCWlmIChteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSkpCi0JCQlwcmludGsoIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyBzYWE3MTExYSAjMS5cbiIpOwotCi0JCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCi0JCWlmKCAwID09IG14Yi0+Y3VyX211dGUgKSB7Ci0JCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwKLQkJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMF0pOwotCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJICAgICAgICZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzFdKTsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKHQtPmluZGV4KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsIHQtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpKTsKLQotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKLQotCQlzdHJsY3B5KHQtPm5hbWUsICJUViBUdW5lciIsIHNpemVvZih0LT5uYW1lKSk7Ci0JCXQtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBcCi0JCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwotCQl0LT5hdWRtb2RlID0gbXhiLT5jdXJfbW9kZTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfVFVORVI6Ci0JewotCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKLQotCQlpZiAodC0+aW5kZXgpIHsKLQkJCURFQl9EKCgiVklESU9DX1NfVFVORVI6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIGF0dGFjaGVkLlxuIix0LT5pbmRleCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlteGItPmN1cl9tb2RlID0gdC0+YXVkbW9kZTsKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJaWYgKG14Yi0+Y3VyX2lucHV0KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwKLQkJCQkJCW14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCSpmID0gbXhiLT5jdXJfZnJlcTsKLQotCQlERUJfRUUoKCJWSURJT0NfR19GUkVROiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlpZiAoZi0+dHVuZXIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoVjRMMl9UVU5FUl9BTkFMT0dfVFYgIT0gZi0+dHlwZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfU19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsIG14Yi0+Y3VyX2lucHV0KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW14Yi0+Y3VyX2ZyZXEgPSAqZjsKLQkJREVCX0VFKCgiVklESU9DX1NfRlJFUVVFTkNZOiBmcmVxOjB4JTA4eC5cbiIsIG14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5KSk7Ci0KLQkJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfRlJFUVVFTkNZLCAmbXhiLT5jdXJfZnJlcSk7Ci0KLQkJLyogaGFjazogY2hhbmdpbmcgdGhlIGZyZXF1ZW5jeSBzaG91bGQgaW52YWxpZGF0ZSB0aGUgdmJpLWNvdW50ZXIgKD0+IGFsZXZ0KSAqLwotCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwotCQl2di0+dmJpX2ZpZWxkY291bnQgPSAwOwotCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fQ0Q6Ci0JewotCQlpbnQgaSA9ICooaW50Kilhcmc7Ci0KLQkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgewotCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIk1YQl9TX0FVRElPX0NEOiBpOiVkLlxuIixpKSk7Ci0KLQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSxURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFtpXVsxXSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgTVhCX1NfQVVESU9fTElORToKLQl7Ci0JCWludCBpID0gKihpbnQqKWFyZzsKLQotCQlpZiAoaSA8IDAgfHwgaSA+PSBNWEJfQVVESU9TKSB7Ci0JCQlERUJfRCgoImlsbGVnYWwgYXJndW1lbnQgdG8gTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIixpKSk7Ci0JCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbaV1bMF0pOwotCQlteGItPnRlYTY0MjBfMi0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8yLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW2ldWzFdKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19BVURJTzoKLQl7Ci0JCXN0cnVjdCB2NGwyX2F1ZGlvICphID0gYXJnOwotCi0JCWlmIChhLT5pbmRleCA8IDAgfHwgYS0+aW5kZXggPiBNWEJfSU5QVVRTKSB7Ci0JCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsIGEtPmluZGV4KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCURFQl9FRSgoIlZJRElPQ19HX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJbWVtY3B5KGEsICZteGJfYXVkaW9zW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvKSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlERUJfRCgoIlZJRElPQ19TX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKLQkJcmV0dXJuIDA7Ci0JfQotI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKLQljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKLQkJaTJjX2NsaWVudHNfY29tbWFuZCgmbXhiLT5pMmNfYWRhcHRlciwgY21kLCBhcmcpOwotCQlyZXR1cm4gMDsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0vKgotCQlERUIyKHByaW50aygiZG9lcyBub3QgaGFuZGxlIHRoaXMgaW9jdGwuXG4iKSk7Ci0qLwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzdGRfY2FsbGJhY2soc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICpzdGFuZGFyZCkKIHsKIAlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7Ci0JaW50IHplcm8gPSAwOwotCWludCBvbmUgPSAxOwogCiAJaWYgKFY0TDJfU1REX1BBTF9JID09IHN0YW5kYXJkLT5pZCkgewogCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfSTsKQEAgLTgyMSw4ICs3ODcsOCBAQAogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogdW5zZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZ6ZXJvKTsKLQkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJCXNhYTcxMTFhX2NhbGwobXhiLCBjb3JlLCBzX2dwaW8sIDApOworCQl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfc3RkLCBzdGQpOwogCX0gZWxzZSB7CiAJCXY0bDJfc3RkX2lkIHN0ZCA9IFY0TDJfU1REX1BBTF9CRzsKIApAQCAtODMwLDggKzc5Niw4IEBACiAJCS8qIHNldCB0aGUgNzE0NiBncGlvIHJlZ2lzdGVyIC0tIEkgZG9uJ3Qga25vdyB3aGF0IHRoaXMgZG9lcyBleGFjdGx5ICovCiAJCXNhYTcxNDZfd3JpdGUoZGV2LCBHUElPX0NUUkwsIDB4MDA0MDQwNTApOwogCQkvKiBzZXQgdGhlIDcxMTEgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwotCQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX0lOVF9TX0dQSU8sICZvbmUpOwotCQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfU1RELCAmc3RkKTsKKwkJc2FhNzExMWFfY2FsbChteGIsIGNvcmUsIHNfZ3BpbywgMSk7CisJCXR1bmVyX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODg1LDggKzg1MSw2IEBACiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLAogCS5udW1fc3Rkcwk9IHNpemVvZihzdGFuZGFyZCkvc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrCT0gJnN0ZF9jYWxsYmFjaywKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IG14Yl9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gZXh0ZW5zaW9uID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDgwNWZhYWUuLjVmYzRhYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTEyODUsOSArMTI4NSw2IEBACiAJc3RydWN0IG9tYXAyNHh4Y2FtX2RldmljZSAqY2FtID0gb2ZoLT5jYW07CiAJaW50IHJ2YWw7CiAKLQlpZiAoYS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CiAJcnZhbCA9IHZpZGlvY19pbnRfZ19wYXJtKGNhbS0+c2RldiwgYSk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPm11dGV4KTsKQEAgLTEzMDMsOSArMTMwMCw2IEBACiAJc3RydWN0IHY0bDJfc3RyZWFtcGFybSBvbGRfc3RyZWFtcGFybTsKIAlpbnQgcnZhbDsKIAotCWlmIChhLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAltdXRleF9sb2NrKCZjYW0tPm11dGV4KTsKIAlpZiAoY2FtLT5zdHJlYW1pbmcpIHsKIAkJcnZhbCA9IC1FQlVTWTsKQEAgLTE2NjUsNyArMTY1OSw2IEBACiAJdmZkLT5wYXJlbnQgPSBjYW0tPmRldjsKIAogCXN0cmxjcHkodmZkLT5uYW1lLCBDQU1fTkFNRSwgc2l6ZW9mKHZmZC0+bmFtZSkpOwotCXZmZC0+dmZsX3R5cGUJCSA9IFZJRF9UWVBFX0NBUFRVUkUgfCBWSURfVFlQRV9DSFJPTUFLRVk7CiAJdmZkLT5mb3BzCQkgPSAmb21hcDI0eHhjYW1fZm9wczsKIAl2ZmQtPm1pbm9yCQkgPSAtMTsKIAl2ZmQtPmlvY3RsX29wcwkJID0gJm9tYXAyNHh4Y2FtX2lvY3RsX2ZvcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYwppbmRleCAwNWMxNGEyLi4wZTIxODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKQEAgLTEyLDE4ICsxMiwyMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIAogTU9EVUxFX0FVVEhPUigiSm9uYXRoYW4gQ29yYmV0IDxjb3JiZXRAbHduLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBPbW5pVmlzaW9uIG92NzY3MCBzZW5zb3JzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CisKIC8qCiAgKiBCYXNpYyB3aW5kb3cgc2l6ZXMuICBUaGVzZSBwcm9iYWJseSBiZWxvbmcgc29tZXdoZXJlIG1vcmUgZ2xvYmFsbHkKICAqIHVzZWZ1bC4KQEAgLTE4OSwxMSArMTkzLDE2IEBACiAgKi8KIHN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdDsgIC8qIGNvbWluZyBsYXRlciAqLwogc3RydWN0IG92NzY3MF9pbmZvIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpmbXQ7ICAvKiBDdXJyZW50IGZvcm1hdCAqLwogCXVuc2lnbmVkIGNoYXIgc2F0OwkJLyogU2F0dXJhdGlvbiB2YWx1ZSAqLwogCWludCBodWU7CQkJLyogSHVlIHZhbHVlICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvdjc2NzBfaW5mbyAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3Y3NjcwX2luZm8sIHNkKTsKK30KIAogCiAKQEAgLTQwMCwyNCArNDA5LDI3IEBACiAgKiBMb3ctbGV2ZWwgcmVnaXN0ZXIgSS9PLgogICovCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAorc3RhdGljIGludCBvdjc2NzBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJdW5zaWduZWQgY2hhciAqdmFsdWUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQ7CiAKLQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoYywgcmVnKTsKKwlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogCWlmIChyZXQgPj0gMCkgewotCQkqdmFsdWUgPSAodW5zaWduZWQgY2hhcikgcmV0OworCQkqdmFsdWUgPSAodW5zaWduZWQgY2hhcilyZXQ7CiAJCXJldCA9IDA7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNoYXIgcmVnLAorc3RhdGljIGludCBvdjc2NzBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY2hhciByZWcsCiAJCXVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7Ci0JaW50IHJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoYywgcmVnLCB2YWx1ZSk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCWludCByZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CisKIAlpZiAocmVnID09IFJFR19DT003ICYmICh2YWx1ZSAmIENPTTdfUkVTRVQpKQogCQltc2xlZXAoMik7ICAvKiBXYWl0IGZvciByZXNldCB0byBydW4gKi8KIAlyZXR1cm4gcmV0OwpAQCAtNDI3LDEwICs0MzksMTAgQEAKIC8qCiAgKiBXcml0ZSBhIGxpc3Qgb2YgcmVnaXN0ZXIgc2V0dGluZ3M7IGZmL2ZmIHN0b3BzIHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgaW50IG92NzY3MF93cml0ZV9hcnJheShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQorc3RhdGljIGludCBvdjc2NzBfd3JpdGVfYXJyYXkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHJlZ3ZhbF9saXN0ICp2YWxzKQogewogCXdoaWxlICh2YWxzLT5yZWdfbnVtICE9IDB4ZmYgfHwgdmFscy0+dmFsdWUgIT0gMHhmZikgewotCQlpbnQgcmV0ID0gb3Y3NjcwX3dyaXRlKGMsIHZhbHMtPnJlZ19udW0sIHZhbHMtPnZhbHVlKTsKKwkJaW50IHJldCA9IG92NzY3MF93cml0ZShzZCwgdmFscy0+cmVnX251bSwgdmFscy0+dmFsdWUpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJCXZhbHMrKzsKQEAgLTQ0MiwzNCArNDU0LDM1IEBACiAvKgogICogU3R1ZmYgdGhhdCBrbm93cyBhYm91dCB0aGUgc2Vuc29yLgogICovCi1zdGF0aWMgdm9pZCBvdjc2NzBfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgb3Y3NjcwX3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTTcsIENPTTdfUkVTRVQpOworCW92NzY3MF93cml0ZShzZCwgUkVHX0NPTTcsIENPTTdfUkVTRVQpOwogCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF9pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG92NzY3MF9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0JcmV0dXJuIG92NzY3MF93cml0ZV9hcnJheShjbGllbnQsIG92NzY3MF9kZWZhdWx0X3JlZ3MpOworCXJldHVybiBvdjc2NzBfd3JpdGVfYXJyYXkoc2QsIG92NzY3MF9kZWZhdWx0X3JlZ3MpOwogfQogCiAKIAotc3RhdGljIGludCBvdjc2NzBfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG92NzY3MF9kZXRlY3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHY7CiAJaW50IHJldDsKIAotCXJldCA9IG92NzY3MF9pbml0KGNsaWVudCk7CisJcmV0ID0gb3Y3NjcwX2luaXQoc2QsIDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREgsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01JREgsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweDdmKSAvKiBPViBtYW51Zi4gaWQuICovCiAJCXJldHVybiAtRU5PREVWOwotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01JREwsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01JREwsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweGEyKQpAQCAtNDc3LDEyICs0OTAsMTIgQEAKIAkvKgogCSAqIE9LLCB3ZSBrbm93IHdlIGhhdmUgYW4gT21uaVZpc2lvbiBjaGlwLi4uYnV0IHdoaWNoIG9uZT8KIAkgKi8KLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19QSUQsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX1BJRCwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4NzYpICAvKiBQSUQgKyBWRVIgPSAweDc2IC8gMHg3MyAqLwogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19WRVIsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX1ZFUiwgJnYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh2ICE9IDB4NzMpICAvKiBQSUQgKyBWRVIgPSAweDc2IC8gMHg3MyAqLwpAQCAtNjI3LDcgKzY0MCw3IEBACiAvKgogICogU3RvcmUgYSBzZXQgb2Ygc3RhcnQvc3RvcCB2YWx1ZXMgaW50byB0aGUgY2FtZXJhLgogICovCi1zdGF0aWMgaW50IG92NzY3MF9zZXRfaHcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGhzdGFydCwgaW50IGhzdG9wLAorc3RhdGljIGludCBvdjc2NzBfc2V0X2h3KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBoc3RhcnQsIGludCBoc3RvcCwKIAkJaW50IHZzdGFydCwgaW50IHZzdG9wKQogewogCWludCByZXQ7CkBAIC02MzcsMjYgKzY1MCwyNiBAQAogICogaHN0YXJ0IGFyZSBpbiBocmVmWzI6MF0sIGJvdHRvbSAzIG9mIGhzdG9wIGluIGhyZWZbNTozXS4gIFRoZXJlIGlzCiAgKiBhIG15c3RlcnkgImVkZ2Ugb2Zmc2V0IiB2YWx1ZSBpbiB0aGUgdG9wIHR3byBiaXRzIG9mIGhyZWYuCiAgKi8KLQlyZXQgPSAgb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0hTVEFSVCwgKGhzdGFydCA+PiAzKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFNUT1AsIChoc3RvcCA+PiAzKSAmIDB4ZmYpOwotCXJldCArPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19IUkVGLCAmdik7CisJcmV0ID0gIG92NzY3MF93cml0ZShzZCwgUkVHX0hTVEFSVCwgKGhzdGFydCA+PiAzKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19IU1RPUCwgKGhzdG9wID4+IDMpICYgMHhmZik7CisJcmV0ICs9IG92NzY3MF9yZWFkKHNkLCBSRUdfSFJFRiwgJnYpOwogCXYgPSAodiAmIDB4YzApIHwgKChoc3RvcCAmIDB4NykgPDwgMykgfCAoaHN0YXJ0ICYgMHg3KTsKIAltc2xlZXAoMTApOwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfSFJFRiwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0hSRUYsIHYpOwogLyoKICAqIFZlcnRpY2FsOiBzaW1pbGFyIGFycmFuZ2VtZW50LCBidXQgb25seSAxMCBiaXRzLgogICovCi0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19WU1RBUlQsICh2c3RhcnQgPj4gMikgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZTVE9QLCAodnN0b3AgPj4gMikgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfVlJFRiwgJnYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19WU1RBUlQsICh2c3RhcnQgPj4gMikgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfVlNUT1AsICh2c3RvcCA+PiAyKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfcmVhZChzZCwgUkVHX1ZSRUYsICZ2KTsKIAl2ID0gKHYgJiAweGYwKSB8ICgodnN0b3AgJiAweDMpIDw8IDIpIHwgKHZzdGFydCAmIDB4Myk7CiAJbXNsZWVwKDEwKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX1ZSRUYsIHYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19WUkVGLCB2KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX2VudW1fZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCitzdGF0aWMgaW50IG92NzY3MF9lbnVtX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCiB7CiAJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpvZm10OwogCkBAIC02NzEsNyArNjg0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF90cnlfZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3RyeV9mbXRfaW50ZXJuYWwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCiAJCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqKnJldF9mbXQsCiAJCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKipyZXRfd3NpemUpCiB7CkBAIC03MTUsMTggKzcyOSwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG92NzY3MF90cnlfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXJldHVybiBvdjc2NzBfdHJ5X2ZtdF9pbnRlcm5hbChzZCwgZm10LCBOVUxMLCBOVUxMKTsKK30KKwogLyoKICAqIFNldCBhIGZvcm1hdC4KICAqLwotc3RhdGljIGludCBvdjc2NzBfc19mbXQoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBvdjc2NzBfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKm92Zm10OwogCXN0cnVjdCBvdjc2NzBfd2luX3NpemUgKndzaXplOwotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKLQl1bnNpZ25lZCBjaGFyIGNvbTcsIGNsa3JjOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKKwl1bnNpZ25lZCBjaGFyIGNvbTcsIGNsa3JjID0gMDsKIAotCXJldCA9IG92NzY3MF90cnlfZm10KGMsIGZtdCwgJm92Zm10LCAmd3NpemUpOworCXJldCA9IG92NzY3MF90cnlfZm10X2ludGVybmFsKHNkLCBmbXQsICZvdmZtdCwgJndzaXplKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCS8qCkBAIC03MzUsNyArNzU0LDcgQEAKIAkgKiB0aGUgY29sb3JzLgogCSAqLwogCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkgewotCQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ0xLUkMsICZjbGtyYyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTc0NywyMCArNzY2LDIwIEBACiAJICovCiAJY29tNyA9IG92Zm10LT5yZWdzWzBdLnZhbHVlOwogCWNvbTcgfD0gd3NpemUtPmNvbTdfYml0OwotCW92NzY3MF93cml0ZShjLCBSRUdfQ09NNywgY29tNyk7CisJb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09NNywgY29tNyk7CiAJLyoKIAkgKiBOb3cgd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIGFycmF5LiAgQWxzbyBzdG9yZSBzdGFydC9zdG9wcwogCSAqLwotCW92NzY3MF93cml0ZV9hcnJheShjLCBvdmZtdC0+cmVncyArIDEpOwotCW92NzY3MF9zZXRfaHcoYywgd3NpemUtPmhzdGFydCwgd3NpemUtPmhzdG9wLCB3c2l6ZS0+dnN0YXJ0LAorCW92NzY3MF93cml0ZV9hcnJheShzZCwgb3ZmbXQtPnJlZ3MgKyAxKTsKKwlvdjc2NzBfc2V0X2h3KHNkLCB3c2l6ZS0+aHN0YXJ0LCB3c2l6ZS0+aHN0b3AsIHdzaXplLT52c3RhcnQsCiAJCQl3c2l6ZS0+dnN0b3ApOwogCXJldCA9IDA7CiAJaWYgKHdzaXplLT5yZWdzKQotCQlyZXQgPSBvdjc2NzBfd3JpdGVfYXJyYXkoYywgd3NpemUtPnJlZ3MpOworCQlyZXQgPSBvdjc2NzBfd3JpdGVfYXJyYXkoc2QsIHdzaXplLT5yZWdzKTsKIAlpbmZvLT5mbXQgPSBvdmZtdDsKIAogCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU2NSAmJiByZXQgPT0gMCkKLQkJcmV0ID0gb3Y3NjcwX3dyaXRlKGMsIFJFR19DTEtSQywgY2xrcmMpOworCQlyZXQgPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19DTEtSQywgY2xrcmMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc2OCw3ICs3ODcsNyBAQAogICogSW1wbGVtZW50IEcvU19QQVJNLiAgVGhlcmUgaXMgYSAiaGlnaCBxdWFsaXR5IiBtb2RlIHdlIGNvdWxkIHRyeQogICogdG8gZG8gc29tZWRheTsgZm9yIG5vdywgd2UganVzdCBkbyB0aGUgZnJhbWUgcmF0ZSB0d2Vhay4KICAqLwotc3RhdGljIGludCBvdjc2NzBfZ19wYXJtKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfcGFybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtcykKIHsKIAlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmcGFybXMtPnBhcm0uY2FwdHVyZTsKIAl1bnNpZ25lZCBjaGFyIGNsa3JjOwpAQCAtNzc2LDcgKzc5NSw3IEBACiAKIAlpZiAocGFybXMtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTEtSQywgJmNsa3JjKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSkpOwpAQCAtNzg4LDcgKzgwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3NfcGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCitzdGF0aWMgaW50IG92NzY3MF9zX3Bhcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCiB7CiAJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnBhcm1zLT5wYXJtLmNhcHR1cmU7CiAJc3RydWN0IHY0bDJfZnJhY3QgKnRwZiA9ICZjcC0+dGltZXBlcmZyYW1lOwpAQCAtODAyLDcgKzgyMSw3IEBACiAJLyoKIAkgKiBDTEtSQyBoYXMgYSByZXNlcnZlZCBiaXQsIHNvIGxldCdzIHByZXNlcnZlIGl0LgogCSAqLwotCXJldCA9IG92NzY3MF9yZWFkKGMsIFJFR19DTEtSQywgJmNsa3JjKTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NMS1JDLCAmY2xrcmMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWlmICh0cGYtPm51bWVyYXRvciA9PSAwIHx8IHRwZi0+ZGVub21pbmF0b3IgPT0gMCkKQEAgLTgxNiw3ICs4MzUsNyBAQAogCWNsa3JjID0gKGNsa3JjICYgMHg4MCkgfCBkaXY7CiAJdHBmLT5udW1lcmF0b3IgPSAxOwogCXRwZi0+ZGVub21pbmF0b3IgPSBPVjc2NzBfRlJBTUVfUkFURS9kaXY7Ci0JcmV0dXJuIG92NzY3MF93cml0ZShjLCBSRUdfQ0xLUkMsIGNsa3JjKTsKKwlyZXR1cm4gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ0xLUkMsIGNsa3JjKTsKIH0KIAogCkBAIC04MjksNyArODQ4LDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJaW50IG1hdHJpeFtDTUFUUklYX0xFTl0pCiB7CiAJaW50IGksIHJldDsKQEAgLTgzOSw3ICs4NTgsNyBAQAogCSAqIFdlaXJkIGNyYXAgc2VlbXMgdG8gZXhpc3QgaW4gdGhlIHVwcGVyIHBhcnQgb2YKIAkgKiB0aGUgc2lnbiBiaXRzIHJlZ2lzdGVyLCBzbyBsZXQncyBwcmVzZXJ2ZSBpdC4KIAkgKi8KLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DTUFUUklYX1NJR04sICZzaWduYml0cyk7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTUFUUklYX1NJR04sICZzaWduYml0cyk7CiAJc2lnbmJpdHMgJj0gMHhjMDsKIAogCWZvciAoaSA9IDA7IGkgPCBDTUFUUklYX0xFTjsgaSsrKSB7CkBAIC04NTgsOSArODc3LDkgQEAKIAkJCWVsc2UKIAkJCQlyYXcgPSBtYXRyaXhbaV0gJiAweGZmOwogCQl9Ci0JCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ01BVFJJWF9CQVNFICsgaSwgcmF3KTsKKwkJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0NNQVRSSVhfQkFTRSArIGksIHJhdyk7CiAJfQotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ01BVFJJWF9TSUdOLCBzaWduYml0cyk7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX0NNQVRSSVhfU0lHTiwgc2lnbmJpdHMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0MywyOSArOTYyLDI5IEBACiAKIAogCi1zdGF0aWMgaW50IG92NzY3MF90X3NhdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX3NhdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOwogCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dOwogCWludCByZXQ7CiAKIAlpbmZvLT5zYXQgPSB2YWx1ZTsKIAlvdjc2NzBfY2FsY19jbWF0cml4KGluZm8sIG1hdHJpeCk7Ci0JcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoY2xpZW50LCBtYXRyaXgpOworCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KHNkLCBtYXRyaXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3Ffc2F0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfc2F0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAKIAkqdmFsdWUgPSBpbmZvLT5zYXQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfaHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfaHVlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAJaW50IG1hdHJpeFtDTUFUUklYX0xFTl07CiAJaW50IHJldDsKIApAQCAtOTczLDE0ICs5OTIsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaW5mby0+aHVlID0gdmFsdWU7CiAJb3Y3NjcwX2NhbGNfY21hdHJpeChpbmZvLCBtYXRyaXgpOwotCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KGNsaWVudCwgbWF0cml4KTsKKwlyZXQgPSBvdjc2NzBfc3RvcmVfY21hdHJpeChzZCwgbWF0cml4KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfaHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfaHVlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CiAKIAkqdmFsdWUgPSBpbmZvLT5odWU7CiAJcmV0dXJuIDA7CkBAIC05OTQsOCArMTAxMyw3IEBACiB7CiAJaWYgKCh2ICYgMHg4MCkgPT0gMCkKIAkJcmV0dXJuIHYgKyAxMjg7Ci0JZWxzZQotCQlyZXR1cm4gMTI4IC0gKHYgJiAweDdmKTsKKwlyZXR1cm4gMTI4IC0gKHYgJiAweDdmKTsKIH0KIAogCkBAIC0xMDAzLDM2OSArMTAyMSwyNzUgQEAKIHsKIAlpZiAodiA+IDEyNykKIAkJcmV0dXJuIHYgJiAweDdmOwotCWVsc2UKLQkJcmV0dXJuICgxMjggLSB2KSB8IDB4ODA7CisJcmV0dXJuICgxMjggLSB2KSB8IDB4ODA7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfYnJpZ2h0bmVzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2JyaWdodG5lc3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgY29tOCA9IDAsIHY7CiAJaW50IHJldDsKIAotCW92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NPTTgsICZjb204KTsKKwlvdjc2NzBfcmVhZChzZCwgUkVHX0NPTTgsICZjb204KTsKIAljb204ICY9IH5DT004X0FFQzsKLQlvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ09NOCwgY29tOCk7CisJb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09NOCwgY29tOCk7CiAJdiA9IG92NzY3MF9hYnNfdG9fc20odmFsdWUpOwotCXJldCA9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19CUklHSFQsIHYpOworCXJldCA9IG92NzY3MF93cml0ZShzZCwgUkVHX0JSSUdIVCwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfcV9icmlnaHRuZXNzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfYnJpZ2h0bmVzcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKLQlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQlJJR0hULCAmdik7CisJaW50IHJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQlJJR0hULCAmdik7CiAKIAkqdmFsdWUgPSBvdjc2NzBfc21fdG9fYWJzKHYpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfY29udHJhc3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19jb250cmFzdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIG92NzY3MF93cml0ZShjbGllbnQsIFJFR19DT05UUkFTLCAodW5zaWduZWQgY2hhcikgdmFsdWUpOworCXJldHVybiBvdjc2NzBfd3JpdGUoc2QsIFJFR19DT05UUkFTLCAodW5zaWduZWQgY2hhcikgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9xX2NvbnRyYXN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfY29udHJhc3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7Ci0JaW50IHJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0NPTlRSQVMsICZ2KTsKKwlpbnQgcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DT05UUkFTLCAmdik7CiAKIAkqdmFsdWUgPSB2OwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfaGZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ19oZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCSp2YWx1ZSA9ICh2ICYgTVZGUF9NSVJST1IpID09IE1WRlBfTUlSUk9SOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfdF9oZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2hmbGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NVkZQLCAmdik7CiAJaWYgKHZhbHVlKQogCQl2IHw9IE1WRlBfTUlSUk9SOwogCWVsc2UKIAkJdiAmPSB+TVZGUF9NSVJST1I7CiAJbXNsZWVwKDEwKTsgIC8qIEZJWE1FICovCi0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19NVkZQLCB2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfTVZGUCwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfdmZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgX19zMzIgKnZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfZ192ZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCSp2YWx1ZSA9ICh2ICYgTVZGUF9GTElQKSA9PSBNVkZQX0ZMSVA7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF90X3ZmbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfdmZsaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7CiAJaW50IHJldDsKIAotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01WRlAsICZ2KTsKIAlpZiAodmFsdWUpCiAJCXYgfD0gTVZGUF9GTElQOwogCWVsc2UKIAkJdiAmPSB+TVZGUF9GTElQOwogCW1zbGVlcCgxMCk7ICAvKiBGSVhNRSAqLwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfTVZGUCwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX01WRlAsIHYpOwogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIHN0cnVjdCBvdjc2NzBfY29udHJvbCB7Ci0Jc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOwotCWludCAoKnF1ZXJ5KShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgX19zMzIgKnZhbHVlKTsKLQlpbnQgKCp0d2Vhaykoc3RydWN0IGkyY19jbGllbnQgKmMsIGludCB2YWx1ZSk7Ci19IG92NzY3MF9jb250cm9sc1tdID0KLXsKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZSA9ICJCcmlnaHRuZXNzIiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMjU1LAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDgwLAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2JyaWdodG5lc3MsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2JyaWdodG5lc3MsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNULAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiQ29udHJhc3QiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxMjcsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4NDAsICAgLyogWFhYIG92NzY3MCBzcGVjICovCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfY29udHJhc3QsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2NvbnRyYXN0LAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiU2F0dXJhdGlvbiIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDI1NiwKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg4MCwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9zYXQsCi0JCS5xdWVyeSA9IG92NzY3MF9xX3NhdCwKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfSFVFLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiSFVFIiwKLQkJCS5taW5pbXVtID0gLTE4MCwKLQkJCS5tYXhpbXVtID0gMTgwLAotCQkJLnN0ZXAgPSA1LAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2h1ZSwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfaHVlLAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9WRkxJUCwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lID0gIlZlcnRpY2FsIGZsaXAiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxLAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF92ZmxpcCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfdmZsaXAsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0hGTElQLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCQkJLm5hbWUgPSAiSG9yaXpvbnRhbCBtaXJyb3IiLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAxLAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9oZmxpcCwKLQkJLnF1ZXJ5ID0gb3Y3NjcwX3FfaGZsaXAsCi0JfSwKLX07Ci0jZGVmaW5lIE5fQ09OVFJPTFMgKEFSUkFZX1NJWkUob3Y3NjcwX2NvbnRyb2xzKSkKLQotc3RhdGljIHN0cnVjdCBvdjc2NzBfY29udHJvbCAqb3Y3NjcwX2ZpbmRfY29udHJvbChfX3UzMiBpZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOX0NPTlRST0xTOyBpKyspCi0JCWlmIChvdjc2NzBfY29udHJvbHNbaV0ucWMuaWQgPT0gaWQpCi0JCQlyZXR1cm4gb3Y3NjcwX2NvbnRyb2xzICsgaTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotCi1zdGF0aWMgaW50IG92NzY3MF9xdWVyeWN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXN0cnVjdCBvdjc2NzBfY29udHJvbCAqY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2wocWMtPmlkKTsKLQotCWlmIChjdHJsID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCSpxYyA9IGN0cmwtPnFjOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG92NzY3MF9nX2N0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKm9jdHJsID0gb3Y3NjcwX2ZpbmRfY29udHJvbChjdHJsLT5pZCk7Ci0JaW50IHJldDsKLQotCWlmIChvY3RybCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSBvY3RybC0+cXVlcnkoY2xpZW50LCAmY3RybC0+dmFsdWUpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBvdjc2NzBfc19jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IG92NzY3MF9jb250cm9sICpvY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2woY3RybC0+aWQpOwotCWludCByZXQ7Ci0KLQlpZiAob2N0cmwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gIG9jdHJsLT50d2VhayhjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQlpZiAocmV0ID49IDApCi0JCXJldHVybiAwOwotCXJldHVybiByZXQ7Ci19Ci0KLQotCi0KLQotCi0vKgotICogQmFzaWMgaTJjIHN0dWZmLgotICovCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3Y3NjcwX2RyaXZlcjsKLQotc3RhdGljIGludCBvdjc2NzBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvOwotCi0JLyoKLQkgKiBGb3Igbm93OiBvbmx5IGRlYWwgd2l0aCBhZGFwdGVycyB3ZSByZWNvZ25pemUuCi0JICovCi0JaWYgKGFkYXB0ZXItPmlkICE9IEkyQ19IV19TTUJVU19DQUZFKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghIGNsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQljbGllbnQtPmFkZHIgPSBPVjc2NzBfSTJDX0FERFI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmb3Y3NjcwX2RyaXZlciwKLQlzdHJjcHkoY2xpZW50LT5uYW1lLCAiT1Y3NjcwIik7Ci0JLyoKLQkgKiBTZXQgdXAgb3VyIGluZm8gc3RydWN0dXJlLgotCSAqLwotCWluZm8gPSBremFsbG9jKHNpemVvZiAoc3RydWN0IG92NzY3MF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEgaW5mbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQlpbmZvLT5mbXQgPSAmb3Y3NjcwX2Zvcm1hdHNbMF07Ci0JaW5mby0+c2F0ID0gMTI4OwkvKiBSZXZpZXcgdGhpcyAqLwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGluZm8pOwotCi0JLyoKLQkgKiBNYWtlIHN1cmUgaXQncyBhbiBvdjc2NzAKLQkgKi8KLQlyZXQgPSBvdjc2NzBfZGV0ZWN0KGNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCXJldCA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfZnJlZV9pbmZvOwotCXJldHVybiAwOwotCi0gIG91dF9mcmVlX2luZm86Ci0Ja2ZyZWUoaW5mbyk7Ci0gIG91dF9mcmVlOgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaW50IG92NzY3MF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgb3Y3NjcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJdm9pZCAqYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDoKLQkJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgYXJnLCBWNEwyX0lERU5UX09WNzY3MCwgMCk7Ci0KLQljYXNlIFZJRElPQ19JTlRfUkVTRVQ6Ci0JCW92NzY3MF9yZXNldChjbGllbnQpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVklESU9DX0lOVF9JTklUOgotCQlyZXR1cm4gb3Y3NjcwX2luaXQoY2xpZW50KTsKLQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCQlyZXR1cm4gb3Y3NjcwX2VudW1fZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2ZtdGRlc2MgKikgYXJnKTsKLQljYXNlIFZJRElPQ19UUllfRk1UOgotCQlyZXR1cm4gb3Y3NjcwX3RyeV9mbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopIGFyZywgTlVMTCwgTlVMTCk7Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JCXJldHVybiBvdjc2NzBfc19mbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQlyZXR1cm4gb3Y3NjcwX3F1ZXJ5Y3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKikgYXJnKTsKLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBvdjc2NzBfc19jdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKikgYXJnKTsKLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiBvdjc2NzBfZ19jdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKikgYXJnKTsKLQljYXNlIFZJRElPQ19TX1BBUk06Ci0JCXJldHVybiBvdjc2NzBfc19wYXJtKGNsaWVudCwgKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKikgYXJnKTsKLQljYXNlIFZJRElPQ19HX1BBUk06Ci0JCXJldHVybiBvdjc2NzBfZ19wYXJtKGNsaWVudCwgKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKikgYXJnKTsKKwkvKiBGaWxsIGluIG1pbiwgbWF4LCBzdGVwIGFuZCBkZWZhdWx0IHZhbHVlIGZvciB0aGVzZSBjb250cm9scy4gKi8KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NiwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTgwLCAxODAsIDUsIDApOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBvdjc2NzBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIG92NzY3MF9nX2JyaWdodG5lc3Moc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIG92NzY3MF9nX2NvbnRyYXN0KHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIG92NzY3MF9nX3NhdChzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIG92NzY3MF9nX2h1ZShzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlyZXR1cm4gb3Y3NjcwX2dfdmZsaXAoc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJcmV0dXJuIG92NzY3MF9nX2hmbGlwKHNkLCAmY3RybC0+dmFsdWUpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KIAorc3RhdGljIGludCBvdjc2NzBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIG92NzY3MF9zX2JyaWdodG5lc3Moc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR1cm4gb3Y3NjcwX3NfY29udHJhc3Qoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiBvdjc2NzBfc19zYXQoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIG92NzY3MF9zX2h1ZShzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCXJldHVybiBvdjc2NzBfc192ZmxpcChzZCwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXJldHVybiBvdjc2NzBfc19oZmxpcChzZCwgY3RybC0+dmFsdWUpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NzY3MF9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAib3Y3NjcwIiwKLQl9LAotCS5pZCAJCT0gSTJDX0RSSVZFUklEX09WNzY3MCwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBvdjc2NzBfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50CT0gb3Y3NjcwX2RldGFjaCwKLQkuY29tbWFuZAk9IG92NzY3MF9jb21tYW5kLAorc3RhdGljIGludCBvdjc2NzBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfT1Y3NjcwLCAwKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXVuc2lnbmVkIGNoYXIgdmFsID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCByZWctPnJlZyAmIDB4ZmYsICZ2YWwpOworCXJlZy0+dmFsID0gdmFsOworCXJlZy0+c2l6ZSA9IDE7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjc2NzBfc19yZWdpc3RlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KGNsaWVudCwgJnJlZy0+bWF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisJb3Y3NjcwX3dyaXRlKHNkLCByZWctPnJlZyAmIDB4ZmYsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBvdjc2NzBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IG92NzY3MF9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IG92NzY3MF9nX2N0cmwsCisJLnNfY3RybCA9IG92NzY3MF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IG92NzY3MF9xdWVyeWN0cmwsCisJLnJlc2V0ID0gb3Y3NjcwX3Jlc2V0LAorCS5pbml0ID0gb3Y3NjcwX2luaXQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS5nX3JlZ2lzdGVyID0gb3Y3NjcwX2dfcmVnaXN0ZXIsCisJLnNfcmVnaXN0ZXIgPSBvdjc2NzBfc19yZWdpc3RlciwKKyNlbmRpZgogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgb3Y3NjcwX3ZpZGVvX29wcyA9IHsKKwkuZW51bV9mbXQgPSBvdjc2NzBfZW51bV9mbXQsCisJLnRyeV9mbXQgPSBvdjc2NzBfdHJ5X2ZtdCwKKwkuc19mbXQgPSBvdjc2NzBfc19mbXQsCisJLnNfcGFybSA9IG92NzY3MF9zX3Bhcm0sCisJLmdfcGFybSA9IG92NzY3MF9nX3Bhcm0sCit9OwogCi0vKgotICogTW9kdWxlIGluaXRpYWxpemF0aW9uCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG92NzY3MF9tb2RfaW5pdCh2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3Y3NjcwX29wcyA9IHsKKwkuY29yZSA9ICZvdjc2NzBfY29yZV9vcHMsCisJLnZpZGVvID0gJm92NzY3MF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IG92NzY3MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCXByaW50ayhLRVJOX05PVElDRSAiT21uaVZpc2lvbiBvdjc2NzAgc2Vuc29yIGRyaXZlciwgYXQgeW91ciBzZXJ2aWNlXG4iKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm92NzY3MF9kcml2ZXIpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG92NzY3MF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmaW5mby0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJm92NzY3MF9vcHMpOworCisJLyogTWFrZSBzdXJlIGl0J3MgYW4gb3Y3NjcwICovCisJcmV0ID0gb3Y3NjcwX2RldGVjdChzZCk7CisJaWYgKHJldCkgeworCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCQkiY2hpcCBmb3VuZCBAIDB4JXggKCVzKSBpcyBub3QgYW4gb3Y3NjcwIGNoaXAuXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisJCWtmcmVlKGluZm8pOworCQlyZXR1cm4gcmV0OworCX0KKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCWluZm8tPmZtdCA9ICZvdjc2NzBfZm9ybWF0c1swXTsKKwlpbmZvLT5zYXQgPSAxMjg7CS8qIFJldmlldyB0aGlzICovCisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG92NzY3MF9tb2RfZXhpdCh2b2lkKQorCitzdGF0aWMgaW50IG92NzY3MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmb3Y3NjcwX2RyaXZlcik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KG92NzY3MF9tb2RfaW5pdCk7Ci1tb2R1bGVfZXhpdChvdjc2NzBfbW9kX2V4aXQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92NzY3MF9pZFtdID0geworCXsgIm92NzY3MCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3Y3NjcwX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gIm92NzY3MCIsCisJLnByb2JlID0gb3Y3NjcwX3Byb2JlLAorCS5yZW1vdmUgPSBvdjc2NzBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG92NzY3MF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYwppbmRleCAzYzllMGJhLi44NGIwZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKQEAgLTIxNywxMCArMjE3LDExIEBACiAjZGVmaW5lIE9DQVBfNHggICAgICAgICAweDAzCS8qIDR4ICovCiAKIC8qIENPTTMgKi8KLSNkZWZpbmUgU1dBUF9NQVNLICAgICAgIDB4MzgKKyNkZWZpbmUgU1dBUF9NQVNLICAgICAgIChTV0FQX1JHQiB8IFNXQVBfWVVWIHwgU1dBUF9NTCkKKyNkZWZpbmUgSU1HX01BU0sgICAgICAgIChWRkxJUF9JTUcgfCBIRkxJUF9JTUcpCiAKLSNkZWZpbmUgVkZJTUdfT05fT0ZGICAgIDB4ODAJLyogVmVydGljYWwgZmxpcCBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCi0jZGVmaW5lIEhNSU1HX09OX09GRiAgICAweDQwCS8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KKyNkZWZpbmUgVkZMSVBfSU1HICAgICAgIDB4ODAJLyogVmVydGljYWwgZmxpcCBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIEhGTElQX0lNRyAgICAgICAweDQwCS8qIEhvcml6b250YWwgbWlycm9yIGltYWdlIE9OL09GRiBzZWxlY3Rpb24gKi8KICNkZWZpbmUgU1dBUF9SR0IgICAgICAgIDB4MjAJLyogU3dhcCBCL1IgIG91dHB1dCBzZXF1ZW5jZSBpbiBSR0IgbW9kZSAqLwogI2RlZmluZSBTV0FQX1lVViAgICAgICAgMHgxMAkvKiBTd2FwIFkvVVYgb3V0cHV0IHNlcXVlbmNlIGluIFlVViBtb2RlICovCiAjZGVmaW5lIFNXQVBfTUwgICAgICAgICAweDA4CS8qIFN3YXAgb3V0cHV0IE1TQi9MU0IgKi8KQEAgLTI3MSwxMSArMjcyLDEzIEBACiAjZGVmaW5lIFNMQ1RfUVZHQSAgICAgICAweDQwCS8qICAgMSA6IFFWR0EgKi8KICNkZWZpbmUgSVRVNjU2X09OX09GRiAgIDB4MjAJLyogSVRVNjU2IHByb3RvY29sIE9OL09GRiBzZWxlY3Rpb24gKi8KIAkJCQkvKiBSR0Igb3V0cHV0IGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lIEZNVF9NQVNLICAgICAgICAweDBjCS8qICAgICAgTWFzayBvZiBjb2xvciBmb3JtYXQgKi8KICNkZWZpbmUgRk1UX0dCUjQyMiAgICAgIDB4MDAJLyogICAgICAwMCA6IEdCUiA0OjI6MiAqLwogI2RlZmluZSBGTVRfUkdCNTY1ICAgICAgMHgwNAkvKiAgICAgIDAxIDogUkdCIDU2NSAqLwogI2RlZmluZSBGTVRfUkdCNTU1ICAgICAgMHgwOAkvKiAgICAgIDEwIDogUkdCIDU1NSAqLwogI2RlZmluZSBGTVRfUkdCNDQ0ICAgICAgMHgwYwkvKiAxMSA6IFJHQiA0NDQgKi8KIAkJCQkvKiBPdXRwdXQgZm9ybWF0IGNvbnRyb2wgKi8KKyNkZWZpbmUgT0ZNVF9NQVNLICAgICAgIDB4MDMgICAgLyogICAgICBNYXNrIG9mIG91dHB1dCBmb3JtYXQgKi8KICNkZWZpbmUgT0ZNVF9ZVVYgICAgICAgIDB4MDAJLyogICAgICAwMCA6IFlVViAqLwogI2RlZmluZSBPRk1UX1BfQlJBVyAgICAgMHgwMQkvKiAgICAgIDAxIDogUHJvY2Vzc2VkIEJheWVyIFJBVyAqLwogI2RlZmluZSBPRk1UX1JHQiAgICAgICAgMHgwMgkvKiAgICAgIDEwIDogUkdCICovCkBAIC0yOTksNyArMzAyLDcgQEAKICNkZWZpbmUgR0FJTl8yeCAgICAgICAgIDB4MDAJLyogICAgMDAwIDogICAyeCAqLwogI2RlZmluZSBHQUlOXzR4ICAgICAgICAgMHgxMAkvKiAgICAwMDEgOiAgIDR4ICovCiAjZGVmaW5lIEdBSU5fOHggICAgICAgICAweDIwCS8qICAgIDAxMCA6ICAgOHggKi8KLSNkZWZpbmUgR0FJTl8xNnggICAgICAgIDB4MzAJLyogMDExIDogIDE2eCAqLworI2RlZmluZSBHQUlOXzE2eCAgICAgICAgMHgzMAkvKiAgICAwMTEgOiAgMTZ4ICovCiAjZGVmaW5lIEdBSU5fMzJ4ICAgICAgICAweDQwCS8qICAgIDEwMCA6ICAzMnggKi8KICNkZWZpbmUgR0FJTl82NHggICAgICAgIDB4NTAJLyogMTAxIDogIDY0eCAqLwogI2RlZmluZSBHQUlOXzEyOHggICAgICAgMHg2MAkvKiAxMTAgOiAxMjh4ICovCkBAIC0zNTYsMTMgKzM1OSw2IEBACiAjZGVmaW5lIFZPU1pfUVZHQSAgICAgICAweDc4CiAKIC8qCi0gKiBiaXQgY29uZmlndXJlICgzMiBiaXQpCi0gKiB0aGlzIGlzIHVzZWQgaW4gc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgOjogb3B0aW9uCi0gKi8KLSNkZWZpbmUgT1BfVVYgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBPUF9TV0FQX1JHQiAweDAwMDAwMDAyCi0KLS8qCiAgKiBJRAogICovCiAjZGVmaW5lIE9WNzcyMCAgMHg3NzIwCkBAIC0zODAsOCArMzc2LDkgQEAKIHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IHsKIAljaGFyICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAJX191MzIgICAgICAgICAgICAgICAgICAgICBmb3VyY2M7Ci0JY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0ICpyZWdzOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgb3B0aW9uOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgZHNwMzsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGNvbTM7CisJdTggICAgICAgICAgICAgICAgICAgICAgICBjb203OwogfTsKIAogc3RydWN0IG92NzcyeF93aW5fc2l6ZSB7CkBAIC0zOTksMzkgKzM5NiwxMyBAQAogCWNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0ICpmbXQ7CiAJY29uc3Qgc3RydWN0IG92NzcyeF93aW5fc2l6ZSAgICAgKndpbjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGZsYWdfdmZsaXA6MTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgZmxhZ19oZmxpcDoxOwogfTsKIAogI2RlZmluZSBFTkRNQVJLRVIgeyAweGZmLCAweGZmIH0KIAogLyoKLSAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIGNvbG9yIGZvcm1hdAotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9SR0I1NTVfcmVnc1tdID0gewotCXsgQ09NMywgMHgwMCB9LAotCXsgQ09NNywgRk1UX1JHQjU1NSB8IE9GTVRfUkdCIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfUkdCNTY1X3JlZ3NbXSA9IHsKLQl7IENPTTMsIDB4MDAgfSwKLQl7IENPTTcsIEZNVF9SR0I1NjUgfCBPRk1UX1JHQiB9LAotCUVORE1BUktFUiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1lZVVZfcmVnc1tdID0gewotCXsgQ09NMywgU1dBUF9ZVVYgfSwKLQl7IENPTTcsIE9GTVRfWVVWIH0sCi0JRU5ETUFSS0VSLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfVVZZWV9yZWdzW10gPSB7Ci0JeyBDT00zLCAweDAwIH0sCi0JeyBDT003LCBPRk1UX1lVViB9LAotCUVORE1BUktFUiwKLX07Ci0KLQotLyoKICAqIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHdpbmRvdyBzaXplCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X3F2Z2FfcmVnc1tdID0gewpAQCAtNTAwLDM4ICs0NzEsNDggQEAKIC8qCiAgKiBjb2xvciBmb3JtYXQgbGlzdAogICovCi0jZGVmaW5lIFRfWVVZViAwCiBzdGF0aWMgY29uc3Qgc3RydWN0IG92NzcyeF9jb2xvcl9mb3JtYXQgb3Y3NzJ4X2NmbXRzW10gPSB7Ci0JW1RfWVVZVl0gPSB7CisJewogCQlTRVRGT1VSQ0MoWVVZViksCi0JCS5yZWdzICAgPSBvdjc3MnhfWVlVVl9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gU1dBUF9ZVVYsCisJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFlWWVUpLAotCQkucmVncyAgID0gb3Y3NzJ4X1lZVVZfcmVncywKLQkJLm9wdGlvbiA9IE9QX1VWLAorCQkuZHNwMyAgID0gVVZfT04sCisJCS5jb20zICAgPSBTV0FQX1lVViwKKwkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoVVlWWSksCi0JCS5yZWdzICAgPSBvdjc3MnhfVVZZWV9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gMHgwLAorCQkuY29tNyAgID0gT0ZNVF9ZVVYsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NTUpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU1NV9yZWdzLAotCQkub3B0aW9uID0gT1BfU1dBUF9SR0IsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSBTV0FQX1JHQiwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NTUgfCBPRk1UX1JHQiwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFJHQjU1NVgpLAotCQkucmVncyAgID0gb3Y3NzJ4X1JHQjU1NV9yZWdzLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gMHgwLAorCQkuY29tNyAgID0gRk1UX1JHQjU1NSB8IE9GTVRfUkdCLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoUkdCNTY1KSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NjVfcmVncywKLQkJLm9wdGlvbiA9IE9QX1NXQVBfUkdCLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gU1dBUF9SR0IsCisJCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NjVYKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NjVfcmVncywKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IDB4MCwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NjUgfCBPRk1UX1JHQiwKIAl9LAogfTsKIApAQCAtNTYyLDYgKzU0MywyNyBAQAogCS5yZWdzICAgICA9IG92NzcyeF9xdmdhX3JlZ3MsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsIG92NzcyeF9jb250cm9sc1tdID0geworCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBWZXJ0aWNhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBIb3Jpem9udGFsbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sCit9OworCiAKIC8qCiAgKiBnZW5lcmFsIGZ1bmN0aW9uCkBAIC01ODcsOCArNTg5LDExIEBACiAJCQkJCSAgdTggIHNldCkKIHsKIAlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CisKIAl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9ICBzZXQ7CisJdmFsIHw9IHNldCAmIG1hc2s7CiAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbCk7CiB9CkBAIC02MzUsNzQgKzY0MCwyNCBAQAogc3RhdGljIGludCBvdjc3Mnhfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0JaW50ICAgICAgICAgICAgICAgICByZXQ7CiAKLQlpZiAoIXByaXYtPndpbikKLQkJcHJpdi0+d2luID0gJm92NzcyeF93aW5fdmdhOwotCWlmICghcHJpdi0+Zm10KQotCQlwcml2LT5mbXQgPSAmb3Y3NzJ4X2NmbXRzW1RfWVVZVl07Ci0KLQkvKgotCSAqIHJlc2V0IGhhcmR3YXJlCi0JICovCi0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7Ci0KLQkvKgotCSAqIHNldCBjb2xvciBmb3JtYXQKLQkgKi8KLQlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT5mbXQtPnJlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHN0YXJ0X2VuZDsKLQotCS8qCi0JICogc2V0IHNpemUgZm9ybWF0Ci0JICovCi0JcmV0ID0gb3Y3NzJ4X3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgcHJpdi0+d2luLT5yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzdGFydF9lbmQ7Ci0KLQkvKgotCSAqIHNldCBDT003IGJpdCAoIFFWR0Egb3IgVkdBICkKLQkgKi8KLQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAotCQkJICAgICAgQ09NNywgU0xDVF9NQVNLLCBwcml2LT53aW4tPmNvbTdfYml0KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzdGFydF9lbmQ7Ci0KLQkvKgotCSAqIHNldCBVViBzZXR0aW5nCi0JICovCi0JaWYgKHByaXYtPmZtdC0+b3B0aW9uICYgT1BfVVYpIHsKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKLQkJCQkgICAgICBEU1BfQ1RSTDMsIFVWX01BU0ssIFVWX09OKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIHN0YXJ0X2VuZDsKKwlpZiAoIXByaXYtPndpbiB8fCAhcHJpdi0+Zm10KSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAibm9ybSBvciB3aW4gc2VsZWN0IGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQkvKgotCSAqIHNldCBTV0FQIHNldHRpbmcKLQkgKi8KLQlpZiAocHJpdi0+Zm10LT5vcHRpb24gJiBPUF9TV0FQX1JHQikgewotCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LAotCQkJCSAgICAgIENPTTMsIFNXQVBfTUFTSywgU1dBUF9SR0IpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gc3RhcnRfZW5kOwotCX0KKwlvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00yLCBTT0ZUX1NMRUVQX01PREUsIDApOwogCiAJZGV2X2RiZygmaWNkLT5kZXYsCiAJCSAiZm9ybWF0ICVzLCB3aW4gJXNcbiIsIHByaXYtPmZtdC0+bmFtZSwgcHJpdi0+d2luLT5uYW1lKTsKIAotc3RhcnRfZW5kOgotCXByaXYtPmZtdCA9IE5VTEw7Ci0JcHJpdi0+d2luID0gTlVMTDsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKIAlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7Ci0Jb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMiwgU09GVF9TTEVFUF9NT0RFLCBTT0ZUX1NMRUVQX01PREUpOwogCXJldHVybiAwOwogfQogCkBAIC03MTgsMTEgKzY3Myw1NCBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IHByaXYtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX01BU1RFUiB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCQlwcml2LT5pbmZvLT5idXN3aWR0aDsKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IHByaXYtPmluZm8tPmJ1c3dpZHRoOwogCiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IG92NzcyeF9nZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWN0cmwtPnZhbHVlID0gcHJpdi0+ZmxhZ192ZmxpcDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJY3RybC0+dmFsdWUgPSBwcml2LT5mbGFnX2hmbGlwOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJaW50IHJldCA9IDA7CisJdTggdmFsOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCXZhbCA9IGN0cmwtPnZhbHVlID8gVkZMSVBfSU1HIDogMHgwMDsKKwkJcHJpdi0+ZmxhZ192ZmxpcCA9IGN0cmwtPnZhbHVlOworCQlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19WRkxJUCkKKwkJCXZhbCBePSBWRkxJUF9JTUc7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTMsIFZGTElQX0lNRywgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJdmFsID0gY3RybC0+dmFsdWUgPyBIRkxJUF9JTUcgOiAweDAwOworCQlwcml2LT5mbGFnX2hmbGlwID0gY3RybC0+dmFsdWU7CisJCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX0hGTElQKQorCQkJdmFsIF49IEhGTElQX0lNRzsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMywgSEZMSVBfSU1HLCB2YWwpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG92NzcyeF9nZXRfY2hpcF9pZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICAgKmlkKQogewpAQCAtNzg3LDEzICs3ODUsMTEgQEAKIAlyZXR1cm4gd2luOwogfQogCi0KLXN0YXRpYyBpbnQgb3Y3NzJ4X3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgcGl4Zm10LAotCQkJICBzdHJ1Y3QgdjRsMl9yZWN0ICAgICAgICAgKnJlY3QpCitzdGF0aWMgaW50IG92NzcyeF9zZXRfcGFyYW1zKHN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0LAorCQkJICAgICB1MzIgcGl4Zm10KQogewotCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1OCAgdmFsOwogCWludCBpOwogCiAJLyoKQEAgLTgwMywxNyArNzk5LDk5IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y3NzJ4X2NmbXRzKTsgaSsrKSB7CiAJCWlmIChwaXhmbXQgPT0gb3Y3NzJ4X2NmbXRzW2ldLmZvdXJjYykgewogCQkJcHJpdi0+Zm10ID0gb3Y3NzJ4X2NmbXRzICsgaTsKLQkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAoIXByaXYtPmZtdCkKKwkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKIAogCS8qCiAJICogc2VsZWN0IHdpbgogCSAqLwotCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCXByaXYtPndpbiA9IG92NzcyeF9zZWxlY3Rfd2luKHdpZHRoLCBoZWlnaHQpOworCisJLyoKKwkgKiByZXNldCBoYXJkd2FyZQorCSAqLworCW92NzcyeF9yZXNldChwcml2LT5jbGllbnQpOworCisJLyoKKwkgKiBzZXQgc2l6ZSBmb3JtYXQKKwkgKi8KKwlyZXQgPSBvdjc3Mnhfd3JpdGVfYXJyYXkocHJpdi0+Y2xpZW50LCBwcml2LT53aW4tPnJlZ3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgRFNQX0NUUkwzCisJICovCisJdmFsID0gcHJpdi0+Zm10LT5kc3AzOworCWlmICh2YWwpIHsKKwkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCQkgICAgICBEU1BfQ1RSTDMsIFVWX01BU0ssIHZhbCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKKwl9CisKKwkvKgorCSAqIHNldCBDT00zCisJICovCisJdmFsID0gcHJpdi0+Zm10LT5jb20zOworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX1ZGTElQKQorCQl2YWwgfD0gVkZMSVBfSU1HOworCWlmIChwcml2LT5pbmZvLT5mbGFncyAmIE9WNzcyWF9GTEFHX0hGTElQKQorCQl2YWwgfD0gSEZMSVBfSU1HOworCWlmIChwcml2LT5mbGFnX3ZmbGlwKQorCQl2YWwgXj0gVkZMSVBfSU1HOworCWlmIChwcml2LT5mbGFnX2hmbGlwKQorCQl2YWwgXj0gSEZMSVBfSU1HOworCisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCSAgICAgIENPTTMsIFNXQVBfTUFTSyB8IElNR19NQVNLLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOworCisJLyoKKwkgKiBzZXQgQ09NNworCSAqLworCXZhbCA9IHByaXYtPndpbi0+Y29tN19iaXQgfCBwcml2LT5mbXQtPmNvbTc7CisJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKKwkJCSAgICAgIENPTTcsIChTTENUX01BU0sgfCBGTVRfTUFTSyB8IE9GTVRfTUFTSyksCisJCQkgICAgICB2YWwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG92NzcyeF9zZXRfZm10X2Vycm9yOwogCiAJcmV0dXJuIHJldDsKKworb3Y3NzJ4X3NldF9mbXRfZXJyb3I6CisKKwlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKwlwcml2LT53aW4gPSBOVUxMOworCXByaXYtPmZtdCA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG92NzcyeF9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCisJaWYgKCFwcml2LT5mbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIG92NzcyeF9zZXRfcGFyYW1zKHByaXYsIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsCisJCQkJIHByaXYtPmZtdC0+Zm91cmNjKTsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXJldHVybiBvdjc3Mnhfc2V0X3BhcmFtcyhwcml2LCBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCwKKwkJCQkgcGl4LT5waXhlbGZvcm1hdCk7CiB9CiAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCkBAIC04ODksNyArOTY3LDYgQEAKIAkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIE1JREgpLAogCQkgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHByaXYtPmNsaWVudCwgTUlETCkpOwogCi0KIAlyZXR1cm4gc29jX2NhbWVyYV92aWRlb19zdGFydChpY2QpOwogfQogCkBAIC05MDYsMTAgKzk4MywxNSBAQAogCS5yZWxlYXNlCQk9IG92NzcyeF9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG92NzcyeF9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gb3Y3NzJ4X3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gb3Y3NzJ4X3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG92NzcyeF9zZXRfZm10LAogCS50cnlfZm10CQk9IG92NzcyeF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG92NzcyeF9zZXRfYnVzX3BhcmFtLAogCS5xdWVyeV9idXNfcGFyYW0JPSBvdjc3MnhfcXVlcnlfYnVzX3BhcmFtLAorCS5jb250cm9scwkJPSBvdjc3MnhfY29udHJvbHMsCisJLm51bV9jb250cm9scwkJPSBBUlJBWV9TSVpFKG92NzcyeF9jb250cm9scyksCisJLmdldF9jb250cm9sCQk9IG92NzcyeF9nZXRfY29udHJvbCwKKwkuc2V0X2NvbnRyb2wJCT0gb3Y3NzJ4X3NldF9jb250cm9sLAogCS5nZXRfY2hpcF9pZAkJPSBvdjc3MnhfZ2V0X2NoaXBfaWQsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS5nZXRfcmVnaXN0ZXIJCT0gb3Y3NzJ4X2dldF9yZWdpc3RlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCmluZGV4IGM4NDFmNGUuLmQ1NzNkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwpAQCAtMTUsNiArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAib3ZjYW1jaGlwX3ByaXYuaCIKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjIuMjcgZm9yIExpbnV4IDIuNiIKQEAgLTQ0LDYgKzQ3LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLyogUmVnaXN0ZXJzIGNvbW1vbiB0byBhbGwgY2hpcHMsIHRoYXQgYXJlIG5lZWRlZCBmb3IgZGV0ZWN0aW9uICovCiAjZGVmaW5lIEdFTkVSSUNfUkVHX0lEX0hJR0ggICAgICAgMHgxQwkvKiBtYW51ZmFjdHVyZXIgSUQgTVNCICovCiAjZGVmaW5lIEdFTkVSSUNfUkVHX0lEX0xPVyAgICAgICAgMHgxRAkvKiBtYW51ZmFjdHVyZXIgSUQgTFNCICovCkBAIC02MSwxMCArNjUsNiBAQAogCVtDQ19PVjY2MzBBRl0JPSAiT1Y2NjMwQUYiLAogfTsKIAotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgb3Zfd3JpdGVfcmVndmFscyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IG92Y2FtY2hpcF9yZWd2YWxzICpydmFscykKQEAgLTI1MywxMTIgKzI1MywzNiBAQAogCiAJLyogVGVzdCBmb3IgN3h4MCAqLwogCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY3eHgwIik7Ci0JYy0+YWRkciA9IE9WN3h4MF9TSUQ7Ci0JaWYgKGluaXRfY2FtY2hpcChjKSA8IDApIHsKLQkJLyogVGVzdCBmb3IgNnh4MCAqLwotCQlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOwotCQljLT5hZGRyID0gT1Y2eHgwX1NJRDsKLQkJaWYgKGluaXRfY2FtY2hpcChjKSA8IDApIHsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9IGVsc2UgewotCQkJaWYgKG92Nnh4MF9kZXRlY3QoYykgPCAwKSB7Ci0JCQkJUEVSUk9SKCJGYWlsZWQgdG8gaW5pdCBPVjZ4eDAiKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJfQotCX0gZWxzZSB7CisJaWYgKGluaXRfY2FtY2hpcChjKSA8IDApCisJCXJldHVybiAtRU5PREVWOworCS8qIDctYml0IGFkZHJlc3NlcyB3aXRoIGJpdCAwIHNldCBhcmUgZm9yIHRoZSBPVjd4eDAgKi8KKwlpZiAoYy0+YWRkciAmIDEpIHsKIAkJaWYgKG92N3h4MF9kZXRlY3QoYykgPCAwKSB7CiAJCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WN3h4MCIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJcmV0dXJuIDA7CiAJfQotCisJLyogVGVzdCBmb3IgNnh4MCAqLworCVBERUJVRygzLCAiVGVzdGluZyBmb3IgMFY2eHgwIik7CisJaWYgKG92Nnh4MF9kZXRlY3QoYykgPCAwKSB7CisJCVBFUlJPUigiRmFpbGVkIHRvIGluaXQgT1Y2eHgwIik7CisJCXJldHVybiAtRUlPOworCX0KIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBvdmNhbWNoaXBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3N0YXRpYyBsb25nIG92Y2FtY2hpcF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKLQotCS8qIEkyQyBpcyBub3QgYSBQblAgYnVzLCBzbyB3ZSBjYW4gbmV2ZXIgYmUgY2VydGFpbiB0aGF0IHdlJ3JlIHRhbGtpbmcKLQkgKiB0byB0aGUgcmlnaHQgY2hpcC4gVG8gcHJldmVudCBkYW1hZ2UgdG8gRUVQUk9NUyBhbmQgc3VjaCwgb25seQotCSAqIGF0dGFjaCB0byBhZGFwdGVycyB0aGF0IGFyZSBrbm93biB0byBjb250YWluIE9WIGNhbWVyYSBjaGlwcy4gKi8KLQotCXN3aXRjaCAoYWRhcC0+aWQpIHsKLQljYXNlIEkyQ19IV19TTUJVU19PVjUxMToKLQljYXNlIEkyQ19IV19TTUJVU19PVjUxODoKLQljYXNlIEkyQ19IV19TTUJVU19XOTk2OENGOgotCQlQREVCVUcoMSwgIkFkYXB0ZXIgSUQgMHglMDZ4IGFjY2VwdGVkIiwgYWRhcC0+aWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQREVCVUcoMSwgIkFkYXB0ZXIgSUQgMHglMDZ4IHJlamVjdGVkIiwgYWRhcC0+aWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQljID0ga21hbGxvYyhzaXplb2YgKmMsIEdGUF9LRVJORUwpOwotCWlmICghYykgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gbm9fY2xpZW50OwotCX0KLQltZW1jcHkoYywgJmNsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mICpjKTsKLQljLT5hZGFwdGVyID0gYWRhcDsKLQlzdHJjcHkoYy0+bmFtZSwgIk9WPz8/PyIpOwotCi0Jb3YgPSBremFsbG9jKHNpemVvZiAqb3YsIEdGUF9LRVJORUwpOwotCWlmICghb3YpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG5vX292OwotCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoYywgb3YpOwotCi0JcmMgPSBvdmNhbWNoaXBfZGV0ZWN0KGMpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlzdHJjcHkoYy0+bmFtZSwgY2hpcF9uYW1lc1tvdi0+c3VidHlwZV0pOwotCi0JUERFQlVHKDEsICJDYW1lcmEgY2hpcCBkZXRlY3Rpb24gY29tcGxldGUiKTsKLQotCWkyY19hdHRhY2hfY2xpZW50KGMpOwotCi0JcmV0dXJuIHJjOwotZXJyb3I6Ci0Ja2ZyZWUob3YpOwotbm9fb3Y6Ci0Ja2ZyZWUoYyk7Ci1ub19jbGllbnQ6Ci0JUERFQlVHKDEsICJyZXR1cm5pbmcgJWQiLCByYyk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IG92Y2FtY2hpcF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmMpCi17Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3YgPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JaW50IHJjOwotCi0JcmMgPSBvdi0+c29wcy0+ZnJlZShjKTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjKTsKLQotCWtmcmVlKG92KTsKLQlrZnJlZShjKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdmNhbWNoaXBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gdG9fb3ZjYW1jaGlwKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJaWYgKCFvdi0+aW5pdGlhbGl6ZWQgJiYKIAkgICAgY21kICE9IE9WQ0FNQ0hJUF9DTURfUV9TVUJUWVBFICYmCiAJICAgIGNtZCAhPSBPVkNBTUNISVBfQ01EX0lOSVRJQUxJWkUpIHsKLQkJZGV2X2VycigmYy0+ZGV2LCAiRVJST1I6IENhbWVyYSBjaGlwIG5vdCBpbml0aWFsaXplZCB5ZXQhXG4iKTsKKwkJdjRsMl9lcnIoc2QsICJDYW1lcmEgY2hpcCBub3QgaW5pdGlhbGl6ZWQgeWV0IVxuIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0zNzksMTAgKzMwMywxMCBAQAogCiAJCWlmIChvdi0+bW9ubykgewogCQkJaWYgKG92LT5zdWJ0eXBlICE9IENDX09WNzYyMCkKLQkJCQlkZXZfd2FybigmYy0+ZGV2LCAiV2FybmluZzogTW9ub2Nocm9tZSBub3QgIgorCQkJCXY0bDJfd2FybihzZCwgIk1vbm9jaHJvbWUgbm90ICIKIAkJCQkJImltcGxlbWVudGVkIGZvciB0aGlzIGNoaXBcbiIpOwogCQkJZWxzZQotCQkJCWRldl9pbmZvKCZjLT5kZXYsICJJbml0aWFsaXppbmcgY2hpcCBhcyAiCisJCQkJdjRsMl9pbmZvKHNkLCAiSW5pdGlhbGl6aW5nIGNoaXAgYXMgIgogCQkJCQkibW9ub2Nocm9tZVxuIik7CiAJCX0KIApAQCAtNDAwLDM1ICszMjQsNzIgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZSA9CQkib3ZjYW1jaGlwIiwKLQl9LAotCS5pZCA9CQkJSTJDX0RSSVZFUklEX09WQ0FNQ0hJUCwKLQkuYXR0YWNoX2FkYXB0ZXIgPQlvdmNhbWNoaXBfYXR0YWNoLAotCS5kZXRhY2hfY2xpZW50ID0Jb3ZjYW1jaGlwX2RldGFjaCwKLQkuY29tbWFuZCA9CQlvdmNhbWNoaXBfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3ZjYW1jaGlwX2NvcmVfb3BzID0geworCS5pb2N0bCA9IG92Y2FtY2hpcF9pb2N0bCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPQkJIih1bnNldCkiLAotCS5kcml2ZXIgPQkmZHJpdmVyLAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgb3ZjYW1jaGlwX29wcyA9IHsKKwkuY29yZSA9ICZvdmNhbWNoaXBfY29yZV9vcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvdmNhbWNoaXBfaW5pdCh2b2lkKQorc3RhdGljIGludCBvdmNhbWNoaXBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLSNpZmRlZiBERUJVRwotCW92Y2FtY2hpcF9kZWJ1ZyA9IGRlYnVnOwotI2VuZGlmCisJc3RydWN0IG92Y2FtY2hpcCAqb3Y7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgcmMgPSAwOwogCi0JUElORk8oRFJJVkVSX1ZFUlNJT04gIiA6ICIgRFJJVkVSX0RFU0MpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKKwlvdiA9IGt6YWxsb2Moc2l6ZW9mICpvdiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gbm9fb3Y7CisJfQorCXNkID0gJm92LT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmb3ZjYW1jaGlwX29wcyk7CisKKwlyYyA9IG92Y2FtY2hpcF9kZXRlY3QoY2xpZW50KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycm9yOworCisJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKKwkJCWNoaXBfbmFtZXNbb3YtPnN1YnR5cGVdLCBjbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCVBERUJVRygxLCAiQ2FtZXJhIGNoaXAgZGV0ZWN0aW9uIGNvbXBsZXRlIik7CisKKwlyZXR1cm4gcmM7CitlcnJvcjoKKwlrZnJlZShvdik7Citub19vdjoKKwlQREVCVUcoMSwgInJldHVybmluZyAlZCIsIHJjKTsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBvdmNhbWNoaXBfZXhpdCh2b2lkKQorc3RhdGljIGludCBvdmNhbWNoaXBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gdG9fb3ZjYW1jaGlwKHNkKTsKKwlpbnQgcmM7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJcmMgPSBvdi0+c29wcy0+ZnJlZShjbGllbnQpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWtmcmVlKG92KTsKKwlyZXR1cm4gMDsKIH0KIAotbW9kdWxlX2luaXQob3ZjYW1jaGlwX2luaXQpOwotbW9kdWxlX2V4aXQob3ZjYW1jaGlwX2V4aXQpOworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG92Y2FtY2hpcF9pZFtdID0geworCXsgIm92Y2FtY2hpcCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgb3ZjYW1jaGlwX2lkKTsKKworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gIm92Y2FtY2hpcCIsCisJLnByb2JlID0gb3ZjYW1jaGlwX3Byb2JlLAorCS5yZW1vdmUgPSBvdmNhbWNoaXBfcmVtb3ZlLAorCS5pZF90YWJsZSA9IG92Y2FtY2hpcF9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAppbmRleCBhMDU2NTBmLi40ZjA3Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgX19MSU5VWF9PVkNBTUNISVBfUFJJVl9ICiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPgogI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgogCiAjaWZkZWYgREVCVUcKQEAgLTQ2LDYgKzQ3LDcgQEAKIH07CiAKIHN0cnVjdCBvdmNhbWNoaXAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyAqc29wczsKIAl2b2lkICpzcHJpdjsgICAgICAgICAgICAgICAvKiBQcml2YXRlIGRhdGEgZm9yIE9WN3gxMC5jIGV0Yy4uLiAqLwogCWludCBzdWJ0eXBlOyAgICAgICAgICAgICAgIC8qID0gU0VOX09WNzYxMCBldGMuLi4gKi8KQEAgLTUzLDYgKzU1LDExIEBACiAJaW50IGluaXRpYWxpemVkOyAgICAgICAgICAgLyogT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFIHdhcyBzdWNjZXNzZnVsICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvdmNhbWNoaXAgKnRvX292Y2FtY2hpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBvdmNhbWNoaXAsIHNkKTsKK30KKwogZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngyMF9vcHM7CiBleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y2eDMwX29wczsKIGV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjd4MTBfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwppbmRleCA4NTRjMmE4Li5mOWI2MDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwpAQCAtNDAsMTAgKzQwLDEwIEBACiAJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQwOSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfUzVIMTQxMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfVERBMTAwNDggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBEVkIgaW50ZXJmYWNlIGZvciB0aGUgcHZydXNiMiBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKaW5kZXggNGZkYTJkZS4uZGUyZmMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQpAQCAtMiwxNCArMiwxNSBAQAogb2JqLXB2cnVzYjItZGVidWdpZmMtJChDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQykgOj0gcHZydXNiMi1kZWJ1Z2lmYy5vCiBvYmotcHZydXNiMi1kdmItJChDT05GSUdfVklERU9fUFZSVVNCMl9EVkIpIDo9IHB2cnVzYjItZHZiLm8KIAotcHZydXNiMi1vYmpzCTo9IHB2cnVzYjItaTJjLWNvcmUubyBwdnJ1c2IyLWkyYy1jbWQtdjRsMi5vIFwKLQkJICAgcHZydXNiMi1hdWRpby5vIHB2cnVzYjItaTJjLWNoaXBzLXY0bDIubyBcCitwdnJ1c2IyLW9ianMJOj0gcHZydXNiMi1pMmMtY29yZS5vIFwKKwkJICAgcHZydXNiMi1hdWRpby5vIFwKIAkJICAgcHZydXNiMi1lbmNvZGVyLm8gcHZydXNiMi12aWRlby12NGwubyBcCi0JCSAgIHB2cnVzYjItZWVwcm9tLm8gcHZydXNiMi10dW5lci5vIFwKKwkJICAgcHZydXNiMi1lZXByb20ubyBcCiAJCSAgIHB2cnVzYjItbWFpbi5vIHB2cnVzYjItaGR3Lm8gcHZydXNiMi12NGwyLm8gXAogCQkgICBwdnJ1c2IyLWN0cmwubyBwdnJ1c2IyLXN0ZC5vIHB2cnVzYjItZGV2YXR0ci5vIFwKIAkJICAgcHZydXNiMi1jb250ZXh0Lm8gcHZydXNiMi1pby5vIHB2cnVzYjItaW9yZWFkLm8gXAogCQkgICBwdnJ1c2IyLWN4MjU4NHgtdjRsLm8gcHZydXNiMi13bTg3NzUubyBcCisJCSAgIHB2cnVzYjItY3M1M2wzMmEubyBcCiAJCSAgICQob2JqLXB2cnVzYjItZHZiLXkpIFwKIAkJICAgJChvYmotcHZydXNiMi1zeXNmcy15KSAkKG9iai1wdnJ1c2IyLWRlYnVnaWZjLXkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCmluZGV4IGNkZWRhYTUuLmNjZjJhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYwpAQCAtMjYsMTQgKzI2LDYgQEAKICNpbmNsdWRlIDxtZWRpYS9tc3AzNDAwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaTJjX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCiAKIHN0cnVjdCByb3V0aW5nX3NjaGVtZSB7CiAJY29uc3QgaW50ICpkZWY7CkBAIC02MywxMjMgKzU1LDMzIEBACiAJfSwKIH07CiAKLS8qIFRoaXMgZnVuY3Rpb24gc2VsZWN0cyB0aGUgY29ycmVjdCBhdWRpbyBpbnB1dCBzb3VyY2UgKi8KLXN0YXRpYyB2b2lkIHNldF9zdGVyZW8oc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQordm9pZCBwdnIyX21zcDM0MDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7Ci0JdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7CisJCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CiAKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBtc3AzNDAwIHY0bDIgc2V0X3N0ZXJlbyIpOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgbXNwMzQwMCB2NGwyIHNldF9zdGVyZW8iKTsKIAotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKLQl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICIqKiogV0FSTklORyAqKiogaTJjIG1zcDM0MDAgdjRsMiBzZXRfc3RlcmVvOiIKLQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIGFuZC9vciBpbnB1dCAoJWQpIiwKLQkJCSAgIHNpZCxoZHctPmlucHV0X3ZhbCk7Ci0JCXJldHVybjsKLQl9Ci0Jcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVChNU1BfU0NfSU5fRFNQX1NDQVJUMSk7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsJnJvdXRlKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3N0ZXJlbyhzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHk7Ci19Ci0KLQotc3RydWN0IHB2cjJfbXNwMzQwMF9vcHMgewotCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfbXNwMzQwMF9vcHMgbXNwMzQwMF9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfc3RlcmVvLCAuY2hlY2sgPSBjaGVja19zdGVyZW99LAotfTsKLQotCi1zdGF0aWMgaW50IG1zcDM0MDBfY2hlY2soc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUobXNwMzQwMF9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwotCQlpZiAobXNwMzQwMF9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiBtc3AzNDAwIHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBtc3AzNDAwX3VwZGF0ZShzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShtc3AzNDAwX29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKLQkJbXNwMzQwMF9vcHNbaWR4XS51cGRhdGUoY3R4dCk7CisJCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOworCQlzZC0+b3BzLT5hdWRpby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIH0KIAotCi1zdGF0aWMgdm9pZCBwdnIyX21zcDM0MDBfZGV0YWNoKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9tc3AzNDAwX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCwKLQkJCQkJICBjaGFyICpidWYsdW5zaWduZWQgaW50IGNudCkKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixjbnQsImhhbmRsZXI6IHB2cnVzYjItYXVkaW8gdjRsMiIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgbXNwMzQwMF9mdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpcHZyMl9tc3AzNDAwX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKW1zcDM0MDBfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKW1zcDM0MDBfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlwdnIyX21zcDM0MDBfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY19tc3AzNDAwX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dDsKLQlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5pMmNfaGFuZGxlci5mdW5jX3RhYmxlID0gJm1zcDM0MDBfZnVuY3M7Ci0JY3R4dC0+Y2xpZW50ID0gY3A7Ci0JY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKG1zcDM0MDBfb3BzKSkgLSAxOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmkyY19oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggbXNwMzQwMCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CiAgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmgKaW5kZXggYWM1NGVlZC4uZTNlNjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCkBAIC0yMiwxMCArMjIsOCBAQAogI2lmbmRlZiBfX1BWUlVTQjJfQVVESU9fSAogI2RlZmluZSBfX1BWUlVTQjJfQVVESU9fSAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1pbnQgcHZyMl9pMmNfbXNwMzQwMF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwotCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKK3ZvaWQgcHZyMl9tc3AzNDAwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqKTsKICNlbmRpZiAvKiBfX1BWUlVTQjJfQVVESU9fSCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjMzQyOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKy8qCisKKyAgIFRoaXMgc291cmNlIGZpbGUgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGludGVyZmFjZSB3aXRoIHRoZQorICAgdjRsLWR2YiBjczUzbDMyYSBtb2R1bGUuCisKKyovCisKKyNpbmNsdWRlICJwdnJ1c2IyLWNzNTNsMzJhLmgiCisKKworI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCisjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKK3N0cnVjdCByb3V0aW5nX3NjaGVtZSB7CisJY29uc3QgaW50ICpkZWY7CisJdW5zaWduZWQgaW50IGNudDsKK307CisKKworc3RhdGljIGNvbnN0IGludCByb3V0aW5nX3NjaGVtZTFbXSA9IHsKKwlbUFZSMl9DVkFMX0lOUFVUX1RWXSA9IDIsICAvKiAxIG9yIDIgc2VlbXMgdG8gd29yayBoZXJlICovCisJW1BWUjJfQ1ZBTF9JTlBVVF9SQURJT10gPSAyLAorCVtQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFXSA9IDAsCisJW1BWUjJfQ1ZBTF9JTlBVVF9TVklERU9dID0gIDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lIHJvdXRpbmdfc2NoZW1lc1tdID0geworCVtQVlIyX1JPVVRJTkdfU0NIRU1FX09OQUlSXSA9IHsKKwkJLmRlZiA9IHJvdXRpbmdfc2NoZW1lMSwKKwkJLmNudCA9IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWUxKSwKKwl9LAorfTsKKworCit2b2lkIHB2cjJfY3M1M2wzMmFfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisJCWNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSAqc3A7CisJCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9pbnB1dCglZCkiLAorCQkJICAgaGR3LT5pbnB1dF92YWwpOworCQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKKwkJICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CisJCQlyb3V0ZS5pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdOworCQl9IGVsc2UgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkJICAgIioqKiBXQVJOSU5HICoqKiBzdWJkZXYgdjRsMiBzZXRfaW5wdXQ6IgorCQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIgorCQkJCSAgICIgYW5kL29yIGlucHV0ICglZCkiLAorCQkJCSAgIHNpZCwgaGR3LT5pbnB1dF92YWwpOworCQkJcmV0dXJuOworCQl9CisJCXJvdXRlLm91dHB1dCA9IDA7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CisJfQorfQorCisKKy8qCisgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CisgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgorICAqKiogbW9kZTogYyAqKioKKyAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKKyAgKioqIHRhYi13aWR0aDogOCAqKioKKyAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgorICAqKiogRW5kOiAqKioKKyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmgKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmgKaW5kZXggZWY0YWZhZi4uNTNiYTU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCkBAIC0yLDYgKzIsNyBAQAogICoKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTcsMTQgKzE4LDI0IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKICAqLwotI2lmbmRlZiBfX1BWUlVTQjJfVFVORVJfSAotI2RlZmluZSBfX1BWUlVTQjJfVFVORVJfSAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgorI2lmbmRlZiBfX1BWUlVTQjJfQ1M1M0wzMkFfSAorI2RlZmluZSBfX1BWUlVTQjJfQ1M1M0wzMkFfSAogCi1pbnQgcHZyMl9pMmNfdHVuZXJfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKKy8qCiAKLSNlbmRpZiAvKiBfX1BWUlVTQjJfVFVORVJfSCAqLworICAgVGhpcyBtb2R1bGUgY29ubmVjdHMgdGhlIHB2cnVzYjIgZHJpdmVyIHRvIHRoZSBJMkMgY2hpcCBsZXZlbAorICAgZHJpdmVyIHdoaWNoIGhhbmRsZXMgZGV2aWNlIHZpZGVvIHByb2Nlc3NpbmcuICBUaGlzIGludGVyZmFjZSBpcworICAgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBkcml2ZXI7IGhpZ2hlciBsZXZlbCBjb2RlIHNob3VsZCBvbmx5CisgICBpbnRlcmFjdCB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgcHZydXNiMi1oZHcuaC4KKworKi8KKworCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKK3ZvaWQgcHZyMl9jczUzbDMyYV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CisKKyNlbmRpZiAvKiBfX1BWUlVTQjJfQVVESU9fQ1M1M0wzMkFfSCAqLwogCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKaW5kZXggODk1ODU5ZS4uNGUwMTdmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJwdnJ1c2IyLWN4MjU4NHgtdjRsLmgiCiAjaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgogCiAKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgpAQCAtMzksMTQgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIGN0cmw7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KIAogc3RydWN0IHJvdXRpbmdfc2NoZW1lX2l0ZW0gewogCWludCB2aWQ7CkBAIC0xMTAsMjE4ICsxMDEsNDQgQEAKIAl9LAogfTsKIAotc3RhdGljIHZvaWQgc2V0X2lucHV0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQordm9pZCBwdnIyX2N4MjU4NDBfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCWVudW0gY3gyNTg0MF92aWRlb19pbnB1dCB2aWRfaW5wdXQ7Ci0JZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dDsKLQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOwotCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IGN4MjU4NHggdXBkYXRlLi4uIik7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQllbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0OworCQllbnVtIGN4MjU4NDBfYXVkaW9faW5wdXQgYXVkX2lucHV0OworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOwogCi0JbWVtc2V0KCZyb3V0ZSwwLHNpemVvZihyb3V0ZSkpOworCQltZW1zZXQoJnJvdXRlLCAwLCBzaXplb2Yocm91dGUpKTsKIAotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJdmlkX2lucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF0udmlkOwotCQlhdWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS5hdWQ7Ci0JfSBlbHNlIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiKioqIFdBUk5JTkcgKioqIGkyYyBjeDI1ODR4IHNldF9pbnB1dDoiCi0JCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSBhbmQvb3IgaW5wdXQgKCVkKSIsCi0JCQkgICBzaWQsaGR3LT5pbnB1dF92YWwpOwotCQlyZXR1cm47Ci0JfQotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0eCBzZXRfaW5wdXQgdmlkPTB4JXggYXVkPTB4JXgiLAotCQkgICB2aWRfaW5wdXQsYXVkX2lucHV0KTsKLQlyb3V0ZS5pbnB1dCA9ICh1MzIpdmlkX2lucHV0OwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7Ci0Jcm91dGUuaW5wdXQgPSAodTMyKWF1ZF9pbnB1dDsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JdTMyIHZhbDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NHggc2V0X2F1ZGlvICVkIiwKLQkJICAgaGR3LT5zcmF0ZV92YWwpOwotCXN3aXRjaCAoaGR3LT5zcmF0ZV92YWwpIHsKLQlkZWZhdWx0OgotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXZhbCA9IDQ4MDAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwOgotCQl2YWwgPSA0NDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMDoKLQkJdmFsID0gMzIwMDA7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsJnZhbCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5zcmF0ZV9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4X29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKik7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX2N4MjU4NHhfb3BzIGRlY29kZXJfb3BzW10gPSB7Ci0JeyAudXBkYXRlID0gc2V0X2lucHV0LCAuY2hlY2sgPSBjaGVja19pbnB1dH0sCi0JeyAudXBkYXRlID0gc2V0X2F1ZGlvLCAuY2hlY2sgPSBjaGVja19hdWRpb30sCi19OwotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoY3R4dC0+aGR3LE5VTEwpOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgZGVjb2Rlcl9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKGRlY29kZXJfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKKwkJICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CisJCQl2aWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS52aWQ7CisJCQlhdWRfaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXS5hdWQ7CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiBjeDI1ODR4IHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KIAotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmICghKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJY3R4dC0+c3RhbGVfbWFzayAmPSB+bXNrOwotCQlkZWNvZGVyX29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLAorCQkJICAgInN1YmRldiBjeDI1ODR4IHNldF9pbnB1dCB2aWQ9MHgleCBhdWQ9MHgleCIsCisJCQkgICB2aWRfaW5wdXQsIGF1ZF9pbnB1dCk7CisJCXJvdXRlLmlucHV0ID0gKHUzMil2aWRfaW5wdXQ7CisJCXNkLT5vcHMtPnZpZGVvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CisJCXJvdXRlLmlucHV0ID0gKHUzMilhdWRfaW5wdXQ7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CiAJfQogfQogCiAKLXN0YXRpYyB2b2lkIGRlY29kZXJfZW5hYmxlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0LGludCBmbCkKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBjeDI1ODQwIGRlY29kZXJfZW5hYmxlKCVkKSIsZmwpOwotCXB2cjJfdjRsMl9jbWRfc3RyZWFtKGN0eHQtPmNsaWVudCxmbCk7Ci19Ci0KLQotc3RhdGljIGludCBkZWNvZGVyX2RldGVjdChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlpbnQgcmV0OwotCS8qIEF0dGVtcHQgdG8gcXVlcnkgdGhlIGRlY29kZXIgLSBsZXQncyBzZWUgaWYgaXQgd2lsbCBhbnN3ZXIgKi8KLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWM7Ci0KLQltZW1zZXQoJnFjLDAsc2l6ZW9mKHFjKSk7Ci0KLQlxYy5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1M7Ci0KLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19RVUVSWUNUUkwsJnFjKTsKLQlyZXR1cm4gcmV0ID09IDA7IC8qIFJldHVybiB0cnVlIGlmIGl0IGFuc3dlcmVkICovCi19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWNvZGVyX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0LAotCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLWN4MjU4NHgtdjRsIik7Ci19Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9yZXNldChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfUkVTRVQsTlVMTCk7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0MCBkZWNvZGVyX3Jlc2V0IChyZXQ9JWQpIixyZXQpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKWRlY29kZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlkZWNvZGVyX2Rlc2NyaWJlLAotfTsKLQotCi1pbnQgcHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgICAgICAgc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQ7Ci0KLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHJldHVybiAwOwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0JaWYgKCFkZWNvZGVyX2RldGVjdChjcCkpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmhhbmRsZXIuZnVuY190YWJsZSA9ICZoZnVuY3M7Ci0JY3R4dC0+Y3RybC5jdHh0ID0gY3R4dDsKLQljdHh0LT5jdHJsLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoOwotCWN0eHQtPmN0cmwuZW5hYmxlID0gKHZvaWQgKCopKHZvaWQgKixpbnQpKWRlY29kZXJfZW5hYmxlOwotCWN0eHQtPmN0cmwuZm9yY2VfcmVzZXQgPSAodm9pZCAoKikodm9pZCopKWRlY29kZXJfcmVzZXQ7Ci0JY3R4dC0+Y2xpZW50ID0gY3A7Ci0JY3R4dC0+aGR3ID0gaGR3OwotCWN0eHQtPnN0YWxlX21hc2sgPSAoMSA8PCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKSkgLSAxOwotCXB2cjJfaGR3X3NldF9kZWNvZGVyKGhkdywmY3R4dC0+Y3RybCk7Ci0JY3AtPmhhbmRsZXIgPSAmY3R4dC0+aGFuZGxlcjsKLQl7Ci0JCS8qCi0JCSAgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAxOS1Ob3YtMjAwNiAtIFRoaXMgYml0Ci0JCSAgb2YgbnV0dGluZXNzIGZvciBjeDI1ODQwIGNhdXNlcyB0aGF0IG1vZHVsZSB0bwotCQkgIGNvcnJlY3RseSBzZXQgdXAgaXRzIHZpZGVvIHNjYWxpbmcuICBUaGlzIGlzIHJlYWxseQotCQkgIGEgcHJvYmxlbSBpbiB0aGUgY3gyNTg0MCBtb2R1bGUgaXRzZWxmLCBidXQgd2Ugd29yawotCQkgIGFyb3VuZCBpdCBoZXJlLiAgVGhlIHByb2JsZW0gaGFzIG5vdCBiZWVuIHNlZW4gaW4KLQkJICBpdnR2IGJlY2F1c2UgdGhlcmUgVkJJIGlzIHN1cHBvcnRlZCBhbmQgc2V0IHVwLiAgV2UKLQkJICBkb24ndCBkbyBWQkkgaGVyZSAoYXQgbGVhc3Qgbm90IHlldCkgYW5kIHRodXMgd2UKLQkJICBuZXZlciBhdHRlbXB0ZWQgdG8gZXZlbiBzZXQgaXQgdXAuCi0JCSAqLwotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCQltZW1zZXQoJmZtdCwwLHNpemVvZihmbXQpKTsKLQkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKLQkJcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX1NfRk1ULCZmbXQpOwotCX0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IGN4MjU4NHggVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KIAogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCmluZGV4IDY2YWJmNzcuLmUzNWMyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaApAQCAtMzQsOSArMzQsOSBAQAogCiAKIAotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgogCi1pbnQgcHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKK3ZvaWQgcHZyMl9jeDI1ODQwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogCiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfQ1gyNTg0WF9WNExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKaW5kZXggY2E4OTJmYi4uZmJlMzg1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Z2lmYy5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKIAogc3RydWN0IGRlYnVnaWZjX21hc2tfaXRlbSB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTE0NywxMCArMTQ2LDYgQEAKIAliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAJY2NudCA9IHB2cjJfaGR3X3N0YXRlX3JlcG9ydChoZHcsYnVmLGFjbnQpOwogCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKLQljY250ID0gc2NucHJpbnRmKGJ1ZixhY250LCJBdHRhY2hlZCBJMkMgbW9kdWxlczpcbiIpOwotCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKLQljY250ID0gcHZyMl9pMmNfcmVwb3J0KGhkdyxidWYsYWNudCk7Ci0JYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwogCiAJcmV0dXJuIGJjbnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaAppbmRleCBlMjRmZjU5Li4yZjhkNDY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKQEAgLTIyLDE2ICsyMiwxNiBAQAogCiBzdHJ1Y3QgcHZyMl9oZHc7CiAKLS8qIE5vbi1pbnRydXNpdmVseSBwcmludCBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mbyBmcm9tIGluc2lkZSB0aGUKLSAgIGRyaXZlci4gIFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgZHJpdmVyIGFwcGVhcnMgdG8gYmUKLSAgIHdlZGdlZC4gKi8KLWludCBwdnIyX2RlYnVnaWZjX3ByaW50X2luZm8oc3RydWN0IHB2cjJfaGR3ICosCi0JCQkgICAgIGNoYXIgKmJ1Zl9wdHIsdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKLQogLyogUHJpbnQgZ2VuZXJhbCBzdGF0dXMgb2YgZHJpdmVyLiAgVGhpcyB3aWxsIGFsc28gdHJpZ2dlciBhIHByb2JlIG9mCiAgICB0aGUgVVNCIGxpbmsuICBVbmxpa2UgcHJpbnRfaW5mbygpLCB0aGlzIG9uZSBzeW5jaHJvbml6ZXMgd2l0aCB0aGUKICAgIGRyaXZlciBzbyB0aGUgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHNlbGYtY29uc2lzdGVudCAoYnV0IGl0IHdpbGwKICAgIGhhbmcgaWYgdGhlIGRyaXZlciBpcyB3ZWRnZWQpLiAqLworaW50IHB2cjJfZGVidWdpZmNfcHJpbnRfaW5mbyhzdHJ1Y3QgcHZyMl9oZHcgKiwKKwkJCSAgICAgY2hhciAqYnVmX3B0ciwgdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKKworLyogTm9uLWludHJ1c2l2ZWx5IHByaW50IHNvbWUgdXNlZnVsIGRlYnVnZ2luZyBpbmZvIGZyb20gaW5zaWRlIHRoZQorICAgZHJpdmVyLiAgVGhpcyBzaG91bGQgd29yayBldmVuIGlmIHRoZSBkcml2ZXIgYXBwZWFycyB0byBiZQorICAgd2VkZ2VkLiAqLwogaW50IHB2cjJfZGVidWdpZmNfcHJpbnRfc3RhdHVzKHN0cnVjdCBwdnIyX2hkdyAqLAogCQkJICAgICAgIGNoYXIgKmJ1Zl9wdHIsdW5zaWduZWQgaW50IGJ1Zl9zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCmluZGV4IGNiZTJhMzQuLjFjYjZhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogSGF1cHBhdWdlIFBWUi1VU0IyIE1vZGVsIDI5eHh4ICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF8yOXh4eFtdID0gewotCSJtc3AzNDAwIiwKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfMjl4eHhbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1IH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfTVNQMzQwMCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfREVNT0QgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2Z3MV9uYW1lc18yOXh4eFtdID0gewpAQCAtNTksOCArNjAsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzI5eHh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgUFZSIFVTQjIgTW9kZWwgQ2F0ZWdvcnkgMjl4eHgiLAogCQkuc2hvcnRuYW1lID0gIjI5eHh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50XzI5eHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF8yOXh4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfMjl4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV8yOXh4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfMjl4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc18yOXh4eCksCiAJCS5mbGFnX2hhc19oYXVwcGF1Z2Vfcm9tID0gITAsCkBAIC03NywxMCArNzgsMTEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEhhdXBwYXVnZSBQVlItVVNCMiBNb2RlbCAyNHh4eCAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfMjR4eHhbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKLQkid204Nzc1IiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfMjR4eHhbXSA9IHsKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9XTTg3NzUgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9ERU1PRCB9LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzI0eHh4W10gPSB7CkBAIC05MCw4ICs5Miw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfMjR4eHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBQVlIgVVNCMiBNb2RlbCBDYXRlZ29yeSAyNHh4eCIsCiAJCS5zaG9ydG5hbWUgPSAiMjR4eHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfMjR4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50XzI0eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV8yNHh4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzI0eHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc18yNHh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzI0eHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKQEAgLTExMSwxNiArMTEzLDE2IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBHT1RWSUVXIFVTQjIuMCBEVkQyICovCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF9nb3R2aWV3XzJbXSA9IHsKLQkiY3gyNTg0MCIsCi0JInR1bmVyIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfZ290dmlld18yW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1gyNTg0MCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfZ290dmlld18yID0gewogCQkuZGVzY3JpcHRpb24gPSAiR290dmlldyBVU0IgMi4wIERWRCAyIiwKIAkJLnNob3J0bmFtZSA9ICJndjIiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfZ290dmlld18yLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9nb3R2aWV3XzIpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX2dvdHZpZXdfMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX2dvdHZpZXdfMiksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCkBAIC0xNDAsOCArMTQyLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9nb3R2aWV3XzJkID0gewogCQkuZGVzY3JpcHRpb24gPSAiR290dmlldyBVU0IgMi4wIERWRCBEZWx1eGUiLAogCQkuc2hvcnRuYW1lID0gImd2MmQiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfZ290dmlld18yLAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF9nb3R2aWV3XzIpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX2dvdHZpZXdfMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX2dvdHZpZXdfMiksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCiAJCS5kZWZhdWx0X3R1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX0ZNMTIxNk1FX01LMywKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCkBAIC0xODEsMjkgKzE4MywyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfb25haXJfY3JlYXRvcl9mZV9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl9jcmVhdG9yX2ZlX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX2xnZHQzMzAzX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl9sZ2gwNnhmX2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50X29uYWlyX2NyZWF0b3JbXSA9IHsKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKLQkiY3M1M2wzMmEiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV9vbmFpcl9jcmVhdG9yW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfU0FBNzExNSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9vbmFpcl9jcmVhdG9yID0gewogCQkuZGVzY3JpcHRpb24gPSAiT25BaXIgQ3JlYXRvciBIeWJyaWQgVVNCIHR1bmVyIiwKIAkJLnNob3J0bmFtZSA9ICJvYWMiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfb25haXJfY3JlYXRvciwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfb25haXJfY3JlYXRvciksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfb25haXJfY3JlYXRvciwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX29uYWlyX2NyZWF0b3IpLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfTEdfVERWU19IMDZYRiwKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCiAJCS5mbGFnX2hhc19jb21wb3NpdGUgPSAhMCwKIAkJLmZsYWdfaGFzX3N2aWRlbyA9ICEwLAogCQkuZmxhZ19kaWdpdGFsX3JlcXVpcmVzX2N4MjM0MTYgPSAhMCwKLQkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFLAorCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUiwKIAkJLmRpZ2l0YWxfY29udHJvbF9zY2hlbWUgPSBQVlIyX0RJR0lUQUxfU0NIRU1FX09OQUlSLAogCQkuZGVmYXVsdF9zdGRfbWFzayA9IFY0TDJfU1REX05UU0NfTSwKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKQEAgLTI0MSwyOSArMjQzLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl91c2IyX2ZlX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX3VzYjJfZmVfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfbGdkdDMzMDJfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX2ZjdjEyMzZkX2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50X29uYWlyX3VzYjJbXSA9IHsKLQkic2FhNzExNSIsCi0JInR1bmVyIiwKLQkiY3M1M2wzMmEiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV9vbmFpcl91c2IyW10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfU0FBNzExNSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfVFVORVIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV9vbmFpcl91c2IyID0gewogCQkuZGVzY3JpcHRpb24gPSAiT25BaXIgVVNCMiBIeWJyaWQgVVNCIHR1bmVyIiwKIAkJLnNob3J0bmFtZSA9ICJvYTIiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfb25haXJfdXNiMiwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfb25haXJfdXNiMiksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfb25haXJfdXNiMiwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpX29uYWlyX3VzYjIpLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfUEhJTElQU19GQ1YxMjM2RCwKIAkJLmZsYWdfaGFzX2FuYWxvZ3R1bmVyID0gITAsCiAJCS5mbGFnX2hhc19jb21wb3NpdGUgPSAhMCwKIAkJLmZsYWdfaGFzX3N2aWRlbyA9ICEwLAogCQkuZmxhZ19kaWdpdGFsX3JlcXVpcmVzX2N4MjM0MTYgPSAhMCwKLQkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfSEFVUFBBVUdFLAorCQkuc2lnbmFsX3JvdXRpbmdfc2NoZW1lID0gUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUiwKIAkJLmRpZ2l0YWxfY29udHJvbF9zY2hlbWUgPSBQVlIyX0RJR0lUQUxfU0NIRU1FX09OQUlSLAogCQkuZGVmYXVsdF9zdGRfbWFzayA9IFY0TDJfU1REX05UU0NfTSwKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKQEAgLTMxNCwxNSArMzE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83M3h4eF9kdmJfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzN4eHhfZHZiX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX3RkYTEwMDQ4X2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl83M3h4eF90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50XzczeHh4W10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpXzczeHh4W10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1gyNTg0MCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSLAorCSAgLmkyY19hZGRyZXNzX2xpc3QgPSAiXHg0MiJ9LAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzczeHh4W10gPSB7CkBAIC0zMzIsOCArMzM1LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV83M3h4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIEhWUi0xOTAwIE1vZGVsIENhdGVnb3J5IDczeHh4IiwKIAkJLnNob3J0bmFtZSA9ICI3M3h4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF83M3h4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfNzN4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzczeHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfNzN4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzczeHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfNzN4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApAQCAtNDE4LDIyICs0MjEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MHh4X2R2Yl9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTB4eF9kdmJfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfczVoMTQwOV9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUxeHhfZHZiX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MXh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9zNWgxNDExX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl90ZGExODI3MV84Mjk1X2F0dGFjaCwKIH07CiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50Xzc1eHh4W10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9mdzFfbmFtZXNfNzV4eHhbXSA9IHsKIAkJInY0bC1wdnJ1c2IyLTczeHh4LTAxLmZ3IiwKIH07CkBAIC00NDEsOCArNDM5LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV83NTB4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIEhWUi0xOTUwIE1vZGVsIENhdGVnb3J5IDc1MHh4IiwKIAkJLnNob3J0bmFtZSA9ICI3NTB4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF83NXh4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfNzV4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzczeHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfNzN4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzc1eHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfNzV4eHgpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLApAQCAtNDYzLDggKzQ2MSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfNzUxeHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBIVlItMTk1MCBNb2RlbCBDYXRlZ29yeSA3NTF4eCIsCiAJCS5zaG9ydG5hbWUgPSAiNzUxeHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfNzV4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50Xzc1eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV83M3h4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzczeHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc183NXh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzc1eHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaAppbmRleCBjYjNhMzNlLi4zZTU1MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCkBAIC0zMyw2ICszMywzNCBAQAogKi8KIAogCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX05VTEwgMAorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9NU1AzNDAwIDEKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfQ1gyNTg0MCAyCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUgMworI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9UVU5FUiA0CisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBIDUKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfV004Nzc1IDYKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfREVNT0QgNworCitzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgeworCS8qIE9uZSBvdnIgUFZSMl9DTElFTlRfSURfeHh4eCAqLworCXVuc2lnbmVkIGNoYXIgbW9kdWxlX2lkOworCisJLyogTnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIEkyQyBhZGRyZXNzZXMgdG8gdHJ5IGluIG9yZGVyCisJICAgaW5pdGlhbGl6ZSB0aGUgbW9kdWxlLiAgSXQncyBzYWZlIHRvIG1ha2UgdGhpcyBudWxsIHRlcm1pbmF0ZWQKKwkgICBzaW5jZSB3ZSdyZSBuZXZlciBnb2luZyB0byBlbmNvdW50ZXIgYW4gaTJjIGRldmljZSB3aXRoIGFuCisJICAgYWRkcmVzcyBvZiB6ZXJvLiAgSWYgdGhpcyBpcyBhIG51bGwgcG9pbnRlciBvciB6ZXJvLWxlbmd0aCwKKwkgICB0aGVuIG5vIEkyQyBhZGRyZXNzZXMgaGF2ZSBiZWVuIHNwZWNpZmllZCwgaW4gd2hpY2ggY2FzZSB3ZSdsbAorCSAgIHRyeSBzb21lIGNvbXBpbGVkIGluIGRlZmF1bHRzIGZvciBub3cuICovCisJdW5zaWduZWQgY2hhciAqaTJjX2FkZHJlc3NfbGlzdDsKK307CisKK3N0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfdGFibGUgeworCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyAqbHN0OworCXVuc2lnbmVkIGNoYXIgY250OworfTsKKworCiBzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgewogCWNvbnN0IGNoYXIgKipsc3Q7CiAJdW5zaWduZWQgaW50IGNudDsKQEAgLTQwLDYgKzY4LDcgQEAKIAogI2RlZmluZSBQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRSAwCiAjZGVmaW5lIFBWUjJfUk9VVElOR19TQ0hFTUVfR09UVklFVyAxCisjZGVmaW5lIFBWUjJfUk9VVElOR19TQ0hFTUVfT05BSVIgMgogCiAjZGVmaW5lIFBWUjJfRElHSVRBTF9TQ0hFTUVfTk9ORSAwCiAjZGVmaW5lIFBWUjJfRElHSVRBTF9TQ0hFTUVfSEFVUFBBVUdFIDEKQEAgLTY2LDYgKzk1LDkgQEAKIAkvKiBMaXN0IG9mIGFkZGl0aW9uYWwgY2xpZW50IG1vZHVsZXMgd2UgbmVlZCB0byBsb2FkICovCiAJc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIGNsaWVudF9tb2R1bGVzOwogCisJLyogTGlzdCBvZiBkZWZpbmVkIGNsaWVudCBtb2R1bGVzIHdlIG5lZWQgdG8gbG9hZCAqLworCXN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfdGFibGUgY2xpZW50X3RhYmxlOworCiAJLyogTGlzdCBvZiBGWDIgZmlybXdhcmUgZmlsZSBuYW1lcyB3ZSBzaG91bGQgc2VhcmNoOyBpZiBlbXB0eSB0aGVuCiAJICAgRlgyIGZpcm13YXJlIGNoZWNrIC8gbG9hZCBpcyBza2lwcGVkIGFuZCB3ZSBhc3N1bWUgdGhlIGRldmljZQogCSAgIHdhcyBpbml0aWFsaXplZCBmcm9tIGludGVybmFsIFJPTS4gKi8KQEAgLTczLDcgKzEwNSw3IEBACiAKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9EVkIKIAkvKiBjYWxsYmFjayBmdW5jdGlvbnMgdG8gaGFuZGxlIGF0dGFjaG1lbnQgb2YgZGlnaXRhbCB0dW5lciAmIGRlbW9kICovCi0Jc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHM7CisJY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHM7CiAKICNlbmRpZgogCS8qIEluaXRpYWwgc3RhbmRhcmQgYml0cyB0byB1c2UgZm9yIHRoaXMgZGV2aWNlLCBpZiBub3QgemVyby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKaW5kZXggNzdiM2MzMy4uYjdmNWM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZHZiLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogc3RhdGljIGludCBwdnIyX2R2Yl9mcm9udGVuZF9pbml0KHN0cnVjdCBwdnIyX2R2Yl9hZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gYWRhcC0+Y2hhbm5lbC5oZHc7Ci0Jc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHMgPSBoZHctPmhkd19kZXNjLT5kdmJfcHJvcHM7CisJY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzICpkdmJfcHJvcHMgPSBoZHctPmhkd19kZXNjLT5kdmJfcHJvcHM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZHZiX3Byb3BzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwppbmRleCAyNzNkMmExLi41NGFjNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlpbnQgZW5jTWlzYzNBcmcgPSAwOwogCiAjaWYgMAotCS8qIFRoaXMgaW5leHBsaWNhYmxlIGJpdCBoYXBwZW5zIGluIHRoZSBIYXVwcGFnZSB3aW5kb3dzCisJLyogVGhpcyBpbmV4cGxpY2FibGUgYml0IGhhcHBlbnMgaW4gdGhlIEhhdXBwYXVnZSB3aW5kb3dzCiAJICAgZHJpdmVyIChmb3IgYm90aCAyNHh4eCBhbmQgMjl4eHggZGV2aWNlcykuICBIb3dldmVyIEkKIAkgICBjdXJyZW50bHkgc2VlIG5vIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3Igd2l0aCBvciB3aXRob3V0CiAJICAgdGhpcyBzdHVmZi4gIExlYXZlIHRoaXMgaGVyZSBhcyBhIG5vdGUgb2YgaXRzIGV4aXN0ZW5jZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKaW5kZXggZGU3ZWU3Mi4uNWQ3NWViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInB2cnVzYjItaGR3LmgiCiAjaW5jbHVkZSAicHZydXNiMi1pby5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogI2luY2x1ZGUgInB2cnVzYjItZGV2YXR0ci5oIgogCkBAIC01Nyw4ICs1OCw2IEBACiAjZGVmaW5lIExPQ0tfVEFLRSh4KSBkbyB7IG11dGV4X2xvY2soJngjI19tdXRleCk7IHgjI19oZWxkID0gITA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIExPQ0tfR0lWRSh4KSBkbyB7IHgjI19oZWxkID0gMDsgbXV0ZXhfdW5sb2NrKCZ4IyNfbXV0ZXgpOyB9IHdoaWxlICgwKQogCi1zdHJ1Y3QgcHZyMl9kZWNvZGVyOwotCiB0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9pc19kaXJ0eSkoc3RydWN0IHB2cjJfY3RybCAqKTsKIHR5cGVkZWYgdm9pZCAoKnB2cjJfY3RsZl9jbGVhcl9kaXJ0eSkoc3RydWN0IHB2cjJfY3RybCAqKTsKIHR5cGVkZWYgaW50ICgqcHZyMl9jdGxmX2NoZWNrX3ZhbHVlKShzdHJ1Y3QgcHZyMl9jdHJsICosaW50KTsKQEAgLTEzOSwyMiArMTM4LDYgQEAKIH07CiAKIAotc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIHsKLQl2b2lkICpjdHh0OwotCXZvaWQgKCpkZXRhY2gpKHZvaWQgKik7Ci0Jdm9pZCAoKmVuYWJsZSkodm9pZCAqLGludCk7Ci0Jdm9pZCAoKmZvcmNlX3Jlc2V0KSh2b2lkICopOwotfTsKLQotI2RlZmluZSBQVlIyX0kyQ19QRU5EX0RFVEVDVCAgMHgwMSAgLyogTmVlZCB0byBkZXRlY3QgYSBjbGllbnQgdHlwZSAqLwotI2RlZmluZSBQVlIyX0kyQ19QRU5EX0NMSUVOVCAgMHgwMiAgLyogQ2xpZW50IG5lZWRzIGEgc3BlY2lmaWMgdXBkYXRlICovCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfUkVGUkVTSCAweDA0ICAvKiBDbGllbnQgaGFzIHNwZWNpZmljIHBlbmRpbmcgYml0cyAqLwotI2RlZmluZSBQVlIyX0kyQ19QRU5EX1NUQUxFICAgMHgwOCAgLyogQnJvYWRjYXN0IHBlbmRpbmcgYml0cyAqLwotCi0jZGVmaW5lIFBWUjJfSTJDX1BFTkRfQUxMIChQVlIyX0kyQ19QRU5EX0RFVEVDVCB8XAotCQkJICAgUFZSMl9JMkNfUEVORF9DTElFTlQgfFwKLQkJCSAgIFBWUjJfSTJDX1BFTkRfUkVGUkVTSCB8XAotCQkJICAgUFZSMl9JMkNfUEVORF9TVEFMRSkKIAogLyogRGlzcG9zaXRpb24gb2YgZmlybXdhcmUxIGxvYWRpbmcgc2l0dWF0aW9uICovCiAjZGVmaW5lIEZXMV9TVEFURV9VTktOT1dOIDAKQEAgLTE3OSw2ICsxNjIsOCBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaW50ZjsKIAorCS8qIE91ciBoYW5kbGUgaW50byB0aGUgdjRsMiBzdWItZGV2aWNlIGFyY2hpdGVjdHVyZSAqLworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAkvKiBEZXZpY2UgZGVzY3JpcHRpb24sIGFueXRoaW5nIHRoYXQgbXVzdCBhZGp1c3QgYmVoYXZpb3IgYmFzZWQgb24KIAkgICBkZXZpY2Ugc3BlY2lmaWMgaW5mbyB3aWxsIHVzZSBpbmZvcm1hdGlvbiBoZWxkIGhlcmUuICovCiAJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgKmhkd19kZXNjOwpAQCAtMTg2LDcgKzE3MSw2IEBACiAJLyogS2VybmVsIHdvcmtlciB0aHJlYWQgaGFuZGxpbmcgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrcG9sbDsgICAgIC8qIFVwZGF0ZSBkcml2ZXIgc3RhdGUgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya2kyY3N5bmM7ICAvKiBVcGRhdGUgaTJjIGNsaWVudHMgKi8KIAogCS8qIFZpZGVvIHNwaWdvdCAqLwogCXN0cnVjdCBwdnIyX3N0cmVhbSAqdmlkX3N0cmVhbTsKQEAgLTE5NSwyMCArMTc5LDI2IEBACiAJc3RydWN0IG11dGV4IGJpZ19sb2NrX211dGV4OwogCWludCBiaWdfbG9ja19oZWxkOyAgLyogRm9yIGRlYnVnZ2luZyAqLwogCisJLyogVGhpcyBpcyBhIHNpbXBsZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgaW5zdGFuY2Ugb2YgdGhpcworCSAgIGRyaXZlci4gIEl0IGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHNldCBvZiBleGlzdGluZyBkZXZpY2VzLCBidXQKKwkgICB0aGVyZSBpcyBubyBhdHRlbXB0IHRvIGtlZXAgdGhlIG5hbWUgY29uc2lzdGVudCB3aXRoIHRoZSBzYW1lCisJICAgcGh5c2ljYWwgZGV2aWNlIGVhY2ggdGltZS4gKi8KIAljaGFyIG5hbWVbMzJdOwogCisJLyogVGhpcyBpcyBhIHNpbXBsZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgcGh5c2ljYWwgZGV2aWNlCisJICAgaW5zdGFuY2UgaXRzZWxmIC0gaWYgcG9zc2libGUuICAoSWYgbm90IHBvc3NpYmxlLCB0aGVuIGl0IGlzCisJICAgYmFzZWQgb24gdGhlIHNwZWNpZmljIGRyaXZlciBpbnN0YW5jZSwgc2ltaWxhciB0byBuYW1lIGFib3ZlLikKKwkgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgdXNlcnNwYWNlIG1pZ2h0IGhvcGVmdWxseSBiZSBhYmxlIHRvIHVzZQorCSAgIHRoaXMgcmVjb2duaXplIHNwZWNpZmljIHR1bmVycy4gIEl0IHdpbGwgZW5jb2RlIGEgc2VyaWFsIG51bWJlciwKKwkgICBpZiBhdmFpbGFibGUuICovCisJY2hhciBpZGVudGlmaWVyWzMyXTsKKwogCS8qIEkyQyBzdHVmZiAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKIAlzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfYWxnbzsKIAlwdnIyX2kyY19mdW5jIGkyY19mdW5jW1BWUjJfSTJDX0ZVTkNfQ05UXTsKIAlpbnQgaTJjX2N4MjU4NDBfaGFja19zdGF0ZTsKIAlpbnQgaTJjX2xpbmtlZDsKLQl1bnNpZ25lZCBpbnQgaTJjX3BlbmRfdHlwZXM7ICAgIC8qIFdoaWNoIHR5cGVzIG9mIHVwZGF0ZSBhcmUgbmVlZGVkICovCi0JdW5zaWduZWQgbG9uZyBpMmNfcGVuZF9tYXNrOyAgICAvKiBDaGFuZ2UgYml0cyB3ZSBuZWVkIHRvIHNjYW4gKi8KLQl1bnNpZ25lZCBsb25nIGkyY19zdGFsZV9tYXNrOyAgIC8qIFBlbmRpbmcgYnJvYWRjYXN0IGNoYW5nZSBiaXRzICovCi0JdW5zaWduZWQgbG9uZyBpMmNfYWN0aXZlX21hc2s7ICAvKiBBbGwgY2hhbmdlIGJpdHMgY3VycmVudGx5IGluIHVzZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaTJjX2NsaWVudHM7Ci0Jc3RydWN0IG11dGV4IGkyY19saXN0X2xvY2s7CiAKIAkvKiBGcmVxdWVuY3kgdGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgZnJlcVRhYmxlW0ZSRVFUQUJMRV9TSVpFXTsKQEAgLTI3NSw2ICsyNjUsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHN0YXRlX3dhaXRfZGF0YTsKIAogCisJaW50IGZvcmNlX2RpcnR5OyAgICAgICAgLyogY29uc2lkZXIgYWxsIGNvbnRyb2xzIGRpcnR5IGlmIHRydWUgKi8KIAlpbnQgZmxhZ19vazsgICAgICAgICAgICAvKiBkZXZpY2UgaW4ga25vd24gZ29vZCBzdGF0ZSAqLwogCWludCBmbGFnX2Rpc2Nvbm5lY3RlZDsgIC8qIGZsYWdfb2sgPT0gMCBkdWUgdG8gZGlzY29ubmVjdCAqLwogCWludCBmbGFnX2luaXRfb2s7ICAgICAgIC8qIHRydWUgaWYgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkICovCkBAIC0yODMsMTcgKzI3NCwxMyBAQAogCWludCBmbGFnX2RlY29kZXJfbWlzc2VkOy8qIFdlJ3ZlIG5vdGljZWQgbWlzc2luZyBkZWNvZGVyICovCiAJaW50IGZsYWdfdHJpcHBlZDsgICAgICAgLyogSW5kaWNhdGVzIG92ZXJhbGwgZmFpbHVyZSB0byBzdGFydCAqLwogCi0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsICpkZWNvZGVyX2N0cmw7CisJdW5zaWduZWQgaW50IGRlY29kZXJfY2xpZW50X2lkOwogCiAJLy8gQ1BVIGZpcm13YXJlIGluZm8gKHVzZWQgdG8gaGVscCBmaW5kIC8gc2F2ZSBmaXJtd2FyZSBkYXRhKQogCWNoYXIgKmZ3X2J1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgZndfc2l6ZTsKIAlpbnQgZndfY3B1X2ZsYWc7IC8qIFRydWUgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCB0aGUgQ1BVICovCiAKLQkvLyBUcnVlIGlmIHRoZXJlIGlzIGEgcmVxdWVzdCB0byB0cmlnZ2VyIGxvZ2dpbmcgb2Ygc3RhdGUgaW4gZWFjaAotCS8vIG1vZHVsZS4KLQlpbnQgbG9nX3JlcXVlc3RlZDsKLQogCS8qIFR1bmVyIC8gZnJlcXVlbmN5IGNvbnRyb2wgc3R1ZmYgKi8KIAl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKIAlpbnQgdHVuZXJfdXBkYXRlZDsKQEAgLTM5MSw3ICszNzgsOCBAQAogCiAvKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5ICovCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X2dldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaGR3X3NldF9kZWNvZGVyKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCAqKTsKKwordm9pZCBwdnIyX2hkd19zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfSERXX0lOVEVSTkFMX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCBmYTMwNGU1Li43YTY1YjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuYwpAQCAtMjQsMTcgKzI0LDIyIEBACiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSAicHZydXNiMi5oIgogI2luY2x1ZGUgInB2cnVzYjItc3RkLmgiCiAjaW5jbHVkZSAicHZydXNiMi11dGlsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHcuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCi0jaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgogI2luY2x1ZGUgInB2cnVzYjItZWVwcm9tLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWVuY29kZXIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCiAjaW5jbHVkZSAicHZydXNiMi1meDItY21kLmgiCisjaW5jbHVkZSAicHZydXNiMi13bTg3NzUuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgorI2luY2x1ZGUgInB2cnVzYjItY3gyNTg0eC12NGwuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWNzNTNsMzJhLmgiCisjaW5jbHVkZSAicHZydXNiMi1hdWRpby5oIgogCiAjZGVmaW5lIFRWX01JTl9GUkVRICAgICA1NTI1MDAwMEwKICNkZWZpbmUgVFZfTUFYX0ZSRVEgICAgODUwMDAwMDAwTApAQCAtMTA0LDYgKzEwOSwzOSBAQAogLyogc2l6ZSBvZiBhIGZpcm13YXJlIGNodW5rICovCiAjZGVmaW5lIEZJUk1XQVJFX0NIVU5LX1NJWkUgMHgyMDAwCiAKK3R5cGVkZWYgdm9pZCAoKnB2cjJfc3ViZGV2X3VwZGF0ZV9mdW5jKShzdHJ1Y3QgcHZyMl9oZHcgKiwKKwkJCQkJc3RydWN0IHY0bDJfc3ViZGV2ICopOworCitzdGF0aWMgY29uc3QgcHZyMl9zdWJkZXZfdXBkYXRlX2Z1bmMgcHZyMl9tb2R1bGVfdXBkYXRlX2Z1bmN0aW9uc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfU0FBNzExNV0gPSBwdnIyX3NhYTcxMTVfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfTVNQMzQwMF0gPSBwdnIyX21zcDM0MDBfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfQ1gyNTg0MF0gPSBwdnIyX2N4MjU4NDBfc3ViZGV2X3VwZGF0ZSwKKwlbUFZSMl9DTElFTlRfSURfQ1M1M0wzMkFdID0gcHZyMl9jczUzbDMyYV9zdWJkZXZfdXBkYXRlLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9NU1AzNDAwXSA9ICJtc3AzNDAwIiwKKwlbUFZSMl9DTElFTlRfSURfQ1gyNTg0MF0gPSAiY3gyNTg0MCIsCisJW1BWUjJfQ0xJRU5UX0lEX1NBQTcxMTVdID0gInNhYTcxMTUiLAorCVtQVlIyX0NMSUVOVF9JRF9UVU5FUl0gPSAidHVuZXIiLAorCVtQVlIyX0NMSUVOVF9JRF9ERU1PRF0gPSAidHVuZXIiLAorCVtQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQV0gPSAiY3M1M2wzMmEiLAorCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gIndtODc3NSIsCit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICptb2R1bGVfaTJjX2FkZHJlc3Nlc1tdID0geworCVtQVlIyX0NMSUVOVF9JRF9UVU5FUl0gPSAiXHg2MFx4NjFceDYyXHg2MyIsCisJW1BWUjJfQ0xJRU5UX0lEX0RFTU9EXSA9ICJceDQzIiwKKwlbUFZSMl9DTElFTlRfSURfTVNQMzQwMF0gPSAiXHg0MCIsCisJW1BWUjJfQ0xJRU5UX0lEX1NBQTcxMTVdID0gIlx4MjEiLAorCVtQVlIyX0NMSUVOVF9JRF9XTTg3NzVdID0gIlx4MWIiLAorCVtQVlIyX0NMSUVOVF9JRF9DWDI1ODQwXSA9ICJceDQ0IiwKKwlbUFZSMl9DTElFTlRfSURfQ1M1M0wzMkFdID0gIlx4MTEiLAorfTsKKworCiAvKiBEZWZpbmUgdGhlIGxpc3Qgb2YgYWRkaXRpb25hbCBjb250cm9scyB3ZSdsbCBkeW5hbWljYWxseSBjb25zdHJ1Y3QgYmFzZWQKICAgIG9uIHF1ZXJ5IG9mIHRoZSBjeDIzNDF4IG1vZHVsZS4gKi8KIHN0cnVjdCBwdnIyX21wZWdfaWRzIHsKQEAgLTI3Nyw3ICszMTUsNiBAQAogc3RhdGljIHZvaWQgcHZyMl9oZHdfc3RhdGVfc2NoZWQoc3RydWN0IHB2cjJfaGR3ICopOwogc3RhdGljIGludCBwdnIyX2hkd19zdGF0ZV9ldmFsKHN0cnVjdCBwdnIyX2hkdyAqKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3NldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKix1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9pMmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgaW50IHB2cjJfaGR3X3dhaXQoc3RydWN0IHB2cjJfaGR3ICosaW50IHN0YXRlKTsKIHN0YXRpYyBpbnQgcHZyMl9oZHdfdW50cmlwX3VubG9ja2VkKHN0cnVjdCBwdnIyX2hkdyAqKTsKQEAgLTY0Miw3ICs2NzksNyBAQAogCXVuc2lnbmVkIGxvbmcgZnY7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7CiAJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7Ci0JCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAl9CiAJZnYgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJhbmdlaGlnaDsKIAlpZiAoIWZ2KSB7CkBAIC02NjQsNyArNzAxLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZ2OwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwogCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJfQogCWZ2ID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5yYW5nZWxvdzsKIAlpZiAoIWZ2KSB7CkBAIC04NTgsNyArODk1LDcgQEAKIHN0YXRpYyBpbnQgY3RybF9zaWduYWxfZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKLQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAkqdnAgPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnNpZ25hbDsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2OCw3ICs5MDUsNyBAQAogCWludCB2YWwgPSAwOwogCXVuc2lnbmVkIGludCBzdWJjaGFuOwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwotCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCXN1YmNoYW4gPSBoZHctPnR1bmVyX3NpZ25hbF9pbmZvLnJ4c3ViY2hhbnM7CiAJaWYgKHN1YmNoYW4gJiBWNEwyX1RVTkVSX1NVQl9NT05PKSB7CiAJCXZhbCB8PSAoMSA8PCBWNEwyX1RVTkVSX01PREVfTU9OTyk7CkBAIC0xMjgzLDYgKzEzMjAsMTIgQEAKIH0KIAogCitjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJcmV0dXJuIGhkdy0+aWRlbnRpZmllcjsKK30KKworCiB1bnNpZ25lZCBsb25nIHB2cjJfaGR3X2dldF9jdXJfZnJlcShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT5mcmVxU2VsZWN0b3IgPyBoZHctPmZyZXFWYWxUZWxldmlzaW9uIDogaGR3LT5mcmVxVmFsUmFkaW87CkBAIC0xNjM0LDMzICsxNjc3LDI3IEBACiAKIHN0YXRpYyBpbnQgcHZyMl9kZWNvZGVyX2VuYWJsZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxpbnQgZW5hYmxlZmwpCiB7Ci0JaWYgKCFoZHctPmRlY29kZXJfY3RybCkgewotCQlpZiAoIWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgewotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkJICAgIldBUk5JTkc6IE5vIGRlY29kZXIgcHJlc2VudCIpOwotCQkJaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkID0gITA7Ci0JCQl0cmFjZV9zdGJpdCgiZmxhZ19kZWNvZGVyX21pc3NlZCIsCi0JCQkJICAgIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCk7Ci0JCX0KLQkJcmV0dXJuIC1FSU87CisJLyogRXZlbiB0aG91Z2ggd2UgcmVhbGx5IG9ubHkgY2FyZSBhYm91dCB0aGUgdmlkZW8gZGVjb2RlciBjaGlwIGF0CisJICAgdGhpcyBwb2ludCwgd2UnbGwgYnJvYWRjYXN0IHN0cmVhbSBvbi9vZmYgdG8gYWxsIHN1Yi1kZXZpY2VzCisJICAgYW55d2F5LCBqdXN0IGluIGNhc2Ugc29tZWJvZHkgZWxzZSB3YW50cyB0byBoZWFyIHRoZQorCSAgIGNvbW1hbmQuLi4gKi8KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzdHJlYW09JXMiLAorCQkgICAoZW5hYmxlZmwgPyAib24iIDogIm9mZiIpKTsKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCBlbmFibGVmbCk7CisJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQpIHsKKwkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIGVuY29kZXIgaGFzIGJlZW4gbm90aWNlZC4gIE90aGVyd2lzZQorCQkgICB3ZSdsbCBpc3N1ZSBhIHdhcm5pbmcgdG8gdGhlIHVzZXIgKHdoaWNoIHNob3VsZAorCQkgICBub3JtYWxseSBuZXZlciBoYXBwZW4pLiAqLworCQlyZXR1cm4gMDsKIAl9Ci0JaGR3LT5kZWNvZGVyX2N0cmwtPmVuYWJsZShoZHctPmRlY29kZXJfY3RybC0+Y3R4dCxlbmFibGVmbCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCBwdnIyX2hkd19zZXRfZGVjb2RlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgKnB0cikKLXsKLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwgPT0gcHRyKSByZXR1cm47Ci0JaGR3LT5kZWNvZGVyX2N0cmwgPSBwdHI7Ci0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsICYmIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgewotCQloZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQgPSAwOworCWlmICghaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIldBUk5JTkc6IE5vIGRlY29kZXIgcHJlc2VudCIpOworCQloZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQgPSAhMDsKIAkJdHJhY2Vfc3RiaXQoImZsYWdfZGVjb2Rlcl9taXNzZWQiLAogCQkJICAgIGhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCk7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAotCQkJICAgIkRlY29kZXIgaGFzIGFwcGVhcmVkIik7Ci0JCXB2cjJfaGR3X3N0YXRlX3NjaGVkKGhkdyk7CiAJfQorCXJldHVybiAtRUlPOwogfQogCiAKQEAgLTE5MjcsNiArMTk2NCwxNjYgQEAKIH0KIAogCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfY29weV9pMmNfYWRkcl9saXN0KAorCXVuc2lnbmVkIHNob3J0ICpkc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKKwl1bnNpZ25lZCBpbnQgZHN0X21heCkKK3sKKwl1bnNpZ25lZCBpbnQgY250ID0gMDsKKwlpZiAoIXNyYykgcmV0dXJuIDA7CisJd2hpbGUgKHNyY1tjbnRdICYmIChjbnQgKyAxKSA8IGRzdF9tYXgpIHsKKwkJZHN0W2NudF0gPSBzcmNbY250XTsKKwkJY250Kys7CisJfQorCWRzdFtjbnRdID0gSTJDX0NMSUVOVF9FTkQ7CisJcmV0dXJuIGNudDsKK30KKworCitzdGF0aWMgaW50IHB2cjJfaGR3X2xvYWRfc3ViZGV2KHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyAqY2QpCit7CisJY29uc3QgY2hhciAqZm5hbWU7CisJdW5zaWduZWQgY2hhciBtaWQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgaTJjY250OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnA7CisJLyogQXJiaXRyYXJ5IGNvdW50IC0gbWF4ICMgaTJjIGFkZHJlc3NlcyB3ZSB3aWxsIHByb2JlICovCisJdW5zaWduZWQgc2hvcnQgaTJjYWRkclsyNV07CisKKwltaWQgPSBjZC0+bW9kdWxlX2lkOworCWZuYW1lID0gKG1pZCA8IEFSUkFZX1NJWkUobW9kdWxlX25hbWVzKSkgPyBtb2R1bGVfbmFtZXNbbWlkXSA6IE5VTEw7CisJaWYgKCFmbmFtZSkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJNb2R1bGUgSUQgJXUgZm9yIGRldmljZSAlcyBoYXMgbm8gbmFtZSIsCisJCQkgICBtaWQsCisJCQkgICBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJICAgIk1vZHVsZSBJRCAldSAoJXMpIGZvciBkZXZpY2UgJXMgYmVpbmcgbG9hZGVkLi4uIiwKKwkJICAgbWlkLCBmbmFtZSwKKwkJICAgaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb24pOworCisJaTJjY250ID0gcHZyMl9jb3B5X2kyY19hZGRyX2xpc3QoaTJjYWRkciwgY2QtPmkyY19hZGRyZXNzX2xpc3QsCisJCQkJCSBBUlJBWV9TSVpFKGkyY2FkZHIpKTsKKwlpZiAoIWkyY2NudCAmJiAoKHAgPSAobWlkIDwgQVJSQVlfU0laRShtb2R1bGVfaTJjX2FkZHJlc3NlcykpID8KKwkJCSBtb2R1bGVfaTJjX2FkZHJlc3Nlc1ttaWRdIDogTlVMTCkgIT0gTlVMTCkpIHsKKwkJLyogU2Vjb25kIGNoYW5jZTogVHJ5IGRlZmF1bHQgaTJjIGFkZHJlc3MgbGlzdCAqLworCQlpMmNjbnQgPSBwdnIyX2NvcHlfaTJjX2FkZHJfbGlzdChpMmNhZGRyLCBwLAorCQkJCQkJIEFSUkFZX1NJWkUoaTJjYWRkcikpOworCQlpZiAoaTJjY250KSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCQkgICAiIFVzaW5nIGRlZmF1bHQgaTJjIGFkZHJlc3MgbGlzdCIsCisJCQkJICAgbWlkKTsKKwkJfQorCX0KKworCWlmICghaTJjY250KSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIk1vZHVsZSBJRCAldSAoJXMpIGZvciBkZXZpY2UgJXM6IgorCQkJICAgIiBObyBpMmMgYWRkcmVzc2VzIiwKKwkJCSAgIG1pZCwgZm5hbWUsIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm90ZSBob3cgdGhlIDJuZCBhbmQgM3JkIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgZm9yIGJvdGgKKwkgKiB2NGwyX2kyY19uZXdfc3ViZGV2KCkgYW5kIHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCkuICBXaHk/CisJICogV2VsbCB0aGUgMm5kIGFyZ3VtZW50IGlzIHRoZSBtb2R1bGUgbmFtZSB0byBsb2FkLCB3aGlsZSB0aGUgM3JkCisJICogYXJndW1lbnQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgZnJhbWV3b3JrIGFzIGJlaW5nIHRoZSAiY2hpcGlkIiAtCisJICogYW5kIGV2ZXJ5IG90aGVyIHBsYWNlIHdoZXJlIEkgY2FuIGZpbmQgZXhhbXBsZXMgb2YgdGhpcywgdGhlCisJICogImNoaXBpZCIgYXBwZWFycyB0byBqdXN0IGJlIHRoZSBtb2R1bGUgbmFtZSBhZ2Fpbi4gIFNvIGhlcmUgd2UKKwkgKiBqdXN0IGRvIHRoZSBzYW1lIHRoaW5nLiAqLworCWlmIChpMmNjbnQgPT0gMSkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJICAgIiBTZXR0aW5nIHVwIHdpdGggc3BlY2lmaWVkIGkyYyBhZGRyZXNzIDB4JXgiLAorCQkJICAgbWlkLCBpMmNhZGRyWzBdKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZoZHctPmkyY19hZGFwLAorCQkJCQkgZm5hbWUsIGZuYW1lLAorCQkJCQkgaTJjYWRkclswXSk7CisJfSBlbHNlIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCSAgICIgU2V0dGluZyB1cCB3aXRoIGFkZHJlc3MgcHJvYmUgbGlzdCIsCisJCQkgICBtaWQpOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZoZHctPmkyY19hZGFwLAorCQkJCQkJZm5hbWUsIGZuYW1lLAorCQkJCQkJaTJjYWRkcik7CisJfQorCisJaWYgKCFzZCkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJNb2R1bGUgSUQgJXUgKCVzKSBmb3IgZGV2aWNlICVzIGZhaWxlZCB0byBsb2FkIiwKKwkJCSAgIG1pZCwgZm5hbWUsIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogVGFnIHRoaXMgc3ViLWRldmljZSBpbnN0YW5jZSB3aXRoIHRoZSBtb2R1bGUgSUQgd2Uga25vdyBhYm91dC4KKwkgICBJbiBvdGhlciBwbGFjZXMgd2UnbGwgdXNlIHRoYXQgdGFnIHRvIGRldGVybWluZSBpZiB0aGUgaW5zdGFuY2UKKwkgICByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLiAqLworCXNkLT5ncnBfaWQgPSBtaWQ7CisKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywgIkF0dGFjaGVkIHN1Yi1kcml2ZXIgJXMiLCBmbmFtZSk7CisKKworCS8qIGNsaWVudC1zcGVjaWZpYyBzZXR1cC4uLiAqLworCXN3aXRjaCAobWlkKSB7CisJY2FzZSBQVlIyX0NMSUVOVF9JRF9DWDI1ODQwOgorCQloZHctPmRlY29kZXJfY2xpZW50X2lkID0gbWlkOworCQl7CisJCQkvKgorCQkJICBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+IDE5LU5vdi0yMDA2IC0gVGhpcworCQkJICBiaXQgb2YgbnV0dGluZXNzIGZvciBjeDI1ODQwIGNhdXNlcyB0aGF0IG1vZHVsZQorCQkJICB0byBjb3JyZWN0bHkgc2V0IHVwIGl0cyB2aWRlbyBzY2FsaW5nLiAgVGhpcyBpcworCQkJICByZWFsbHkgYSBwcm9ibGVtIGluIHRoZSBjeDI1ODQwIG1vZHVsZSBpdHNlbGYsCisJCQkgIGJ1dCB3ZSB3b3JrIGFyb3VuZCBpdCBoZXJlLiAgVGhlIHByb2JsZW0gaGFzIG5vdAorCQkJICBiZWVuIHNlZW4gaW4gaXZ0diBiZWNhdXNlIHRoZXJlIFZCSSBpcyBzdXBwb3J0ZWQKKwkJCSAgYW5kIHNldCB1cC4gIFdlIGRvbid0IGRvIFZCSSBoZXJlIChhdCBsZWFzdCBub3QKKwkJCSAgeWV0KSBhbmQgdGh1cyB3ZSBuZXZlciBhdHRlbXB0ZWQgdG8gZXZlbiBzZXQgaXQKKwkJCSAgdXAuCisJCQkqLworCQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkJCSAgICJNb2R1bGUgSUQgJXU6IgorCQkJCSAgICIgRXhlY3V0aW5nIGN4MjU4NDAgVkJJIGhhY2siLAorCQkJCSAgIG1pZCk7CisJCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mKGZtdCkpOworCQkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRTsKKwkJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCBtaWQsCisJCQkJCSAgICAgdmlkZW8sIHNfZm10LCAmZm10KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTU6CisJCWhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQgPSBtaWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6IGJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHB2cjJfaGR3X2xvYWRfbW9kdWxlcyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWNvbnN0IHN0cnVjdCBwdnIyX3N0cmluZ190YWJsZSAqY207CisJY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF90YWJsZSAqY3Q7CisJaW50IG9rRmwgPSAhMDsKKworCWNtID0gJmhkdy0+aGR3X2Rlc2MtPmNsaWVudF9tb2R1bGVzOworCWZvciAoaWR4ID0gMDsgaWR4IDwgY20tPmNudDsgaWR4KyspIHsKKwkJcmVxdWVzdF9tb2R1bGUoY20tPmxzdFtpZHhdKTsKKwl9CisKKwljdCA9ICZoZHctPmhkd19kZXNjLT5jbGllbnRfdGFibGU7CisJZm9yIChpZHggPSAwOyBpZHggPCBjdC0+Y250OyBpZHgrKykgeworCQlpZiAocHZyMl9oZHdfbG9hZF9zdWJkZXYoaGR3LCAmY3QtPmxzdFtpZHhdKSA8IDApIG9rRmwgPSAwOworCX0KKwlpZiAoIW9rRmwpIHB2cjJfaGR3X3JlbmRlcl91c2VsZXNzKGhkdyk7Cit9CisKKwogc3RhdGljIHZvaWQgcHZyMl9oZHdfc2V0dXBfbG93KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCWludCByZXQ7CkBAIC0xOTY2LDkgKzIxNjMsNyBAQAogCiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmhkd19kZXNjLT5jbGllbnRfbW9kdWxlcy5jbnQ7IGlkeCsrKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKGhkdy0+aGR3X2Rlc2MtPmNsaWVudF9tb2R1bGVzLmxzdFtpZHhdKTsKLQl9CisJaGR3LT5mb3JjZV9kaXJ0eSA9ICEwOwogCiAJaWYgKCFoZHctPmhkd19kZXNjLT5mbGFnX25vX3Bvd2VydXApIHsKIAkJcHZyMl9oZHdfY21kX3Bvd2VydXAoaGR3KTsKQEAgLTE5ODcsNiArMjE4MiwxMSBAQAogCXB2cjJfaTJjX2NvcmVfaW5pdChoZHcpOwogCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKIAorCXB2cjJfaGR3X2xvYWRfbW9kdWxlcyhoZHcpOworCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBjb3JlLCBpbml0LCAwKTsKKwogCWZvciAoaWR4ID0gMDsgaWR4IDwgQ1RSTERFRl9DT1VOVDsgaWR4KyspIHsKIAkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7CiAJCWlmIChjcHRyLT5pbmZvLT5za2lwX2luaXQpIGNvbnRpbnVlOwpAQCAtMjAyNCw2ICsyMjI0LDE5IEBACiAJCWhkdy0+c3RkX21hc2tfZWVwcm9tID0gVjRMMl9TVERfQUxMOwogCX0KIAorCWlmIChoZHctPnNlcmlhbF9udW1iZXIpIHsKKwkJaWR4ID0gc2NucHJpbnRmKGhkdy0+aWRlbnRpZmllciwgc2l6ZW9mKGhkdy0+aWRlbnRpZmllcikgLSAxLAorCQkJCSJzbi0lbHUiLCBoZHctPnNlcmlhbF9udW1iZXIpOworCX0gZWxzZSBpZiAoaGR3LT51bml0X251bWJlciA+PSAwKSB7CisJCWlkeCA9IHNjbnByaW50ZihoZHctPmlkZW50aWZpZXIsIHNpemVvZihoZHctPmlkZW50aWZpZXIpIC0gMSwKKwkJCQkidW5pdC0lYyIsCisJCQkJaGR3LT51bml0X251bWJlciArICdhJyk7CisJfSBlbHNlIHsKKwkJaWR4ID0gc2NucHJpbnRmKGhkdy0+aWRlbnRpZmllciwgc2l6ZW9mKGhkdy0+aWRlbnRpZmllcikgLSAxLAorCQkJCSJ1bml0LT8/Iik7CisJfQorCWhkdy0+aWRlbnRpZmllcltpZHhdID0gMDsKKwogCXB2cjJfaGR3X3NldHVwX3N0ZChoZHcpOwogCiAJaWYgKCFnZXRfZGVmYXVsdF90dW5lcl90eXBlKGhkdykpIHsKQEAgLTIwMzIsOCArMjI0NSw2IEBACiAJCQkgICBoZHctPnR1bmVyX3R5cGUpOwogCX0KIAotCXB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoaGR3KTsKLQloZHctPnR1bmVyX3VwZGF0ZWQgPSAwOwogCiAJaWYgKCFwdnIyX2hkd19kZXZfb2soaGR3KSkgcmV0dXJuOwogCkBAIC0yMTcxLDExICsyMzgyLDE0IEBACiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBOVUxMOwogCWludCB2YWxpZF9zdGRfbWFzazsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICpoZHdfZGVzYzsKIAlfX3U4IGlmbnVtOwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlzdHJ1Y3QgcHZyMl9jdGxfaW5mbyAqY2lwdHI7CiAKKwl1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwogCWhkd19kZXNjID0gKGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICopKGRldmlkLT5kcml2ZXJfaW5mbyk7CiAKIAlpZiAoaGR3X2Rlc2MgPT0gTlVMTCkgewpAQCAtMjM2MCw2ICsyNTc0LDExIEBACiAJaGR3LT5jdGxfcmVhZF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsR0ZQX0tFUk5FTCk7CiAJaWYgKCFoZHctPmN0bF9yZWFkX3VyYikgZ290byBmYWlsOwogCisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZ1c2JfZGV2LT5kZXYsICZoZHctPnY0bDJfZGV2KSAhPSAwKSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJICAgIkVycm9yIHJlZ2lzdGVyaW5nIHdpdGggdjRsIGNvcmUsIGdpdmluZyB1cCIpOworCQlnb3RvIGZhaWw7CisJfQogCW11dGV4X2xvY2soJnB2cjJfdW5pdF9tdHgpOyBkbyB7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgUFZSX05VTTsgaWR4KyspIHsKIAkJCWlmICh1bml0X3BvaW50ZXJzW2lkeF0pIGNvbnRpbnVlOwpAQCAtMjM4Miw3ICsyNjAxLDYgQEAKIAogCWhkdy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaGR3LT5uYW1lKTsKIAlJTklUX1dPUksoJmhkdy0+d29ya3BvbGwscHZyMl9oZHdfd29ya2VyX3BvbGwpOwotCUlOSVRfV09SSygmaGR3LT53b3JraTJjc3luYyxwdnIyX2hkd193b3JrZXJfaTJjKTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJEcml2ZXIgdW5pdCBudW1iZXIgaXMgJWQsIG5hbWUgaXMgJXMiLAogCQkgICBoZHctPnVuaXRfbnVtYmVyLGhkdy0+bmFtZSk7CkBAIC0yMzkxLDEyICsyNjA5LDkgQEAKIAloZHctPmZsYWdfb2sgPSAhMDsKIAogCWhkdy0+dXNiX2ludGYgPSBpbnRmOwotCWhkdy0+dXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaGR3LT51c2JfZGV2ID0gdXNiX2RldjsKIAotCXNjbnByaW50ZihoZHctPmJ1c19pbmZvLHNpemVvZihoZHctPmJ1c19pbmZvKSwKLQkJICAidXNiICVzIGFkZHJlc3MgJWQiLAotCQkgIGRldl9uYW1lKCZoZHctPnVzYl9kZXYtPmRldiksCi0JCSAgaGR3LT51c2JfZGV2LT5kZXZudW0pOworCXVzYl9tYWtlX3BhdGgoaGR3LT51c2JfZGV2LCBoZHctPmJ1c19pbmZvLCBzaXplb2YoaGR3LT5idXNfaW5mbykpOwogCiAJaWZudW0gPSBoZHctPnVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyOwogCXVzYl9zZXRfaW50ZXJmYWNlKGhkdy0+dXNiX2RldixpZm51bSwwKTsKQEAgLTI0NTQsNiArMjY2OSwxMCBAQAogCQloZHctPmN0bF93cml0ZV9idWZmZXIgPSBOVUxMOwogCX0KIAloZHctPmZsYWdfZGlzY29ubmVjdGVkID0gITA7CisJLyogSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiB0aGVyZSB3aWxsIGJlIGEgZGFuZ2xpbmcgc3RydWN0IGRldmljZQorCSAgIHJlZmVyZW5jZSB0byBvdXIgZGlzYXBwZWFyaW5nIGRldmljZSBwZXJzaXN0aW5nIGluc2lkZSB0aGUgVjRMCisJICAgY29yZS4uLiAqLworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmhkdy0+djRsMl9kZXYpOwogCWhkdy0+dXNiX2RldiA9IE5VTEw7CiAJaGR3LT51c2JfaW50ZiA9IE5VTEw7CiAJcHZyMl9oZHdfcmVuZGVyX3VzZWxlc3MoaGR3KTsKQEAgLTI0ODEsMTAgKzI3MDAsOCBAQAogCQlwdnIyX3N0cmVhbV9kZXN0cm95KGhkdy0+dmlkX3N0cmVhbSk7CiAJCWhkdy0+dmlkX3N0cmVhbSA9IE5VTEw7CiAJfQotCWlmIChoZHctPmRlY29kZXJfY3RybCkgewotCQloZHctPmRlY29kZXJfY3RybC0+ZGV0YWNoKGhkdy0+ZGVjb2Rlcl9jdHJsLT5jdHh0KTsKLQl9CiAJcHZyMl9pMmNfY29yZV9kb25lKGhkdyk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaGR3LT52NGwyX2Rldik7CiAJcHZyMl9oZHdfcmVtb3ZlX3VzYl9zdHVmZihoZHcpOwogCW11dGV4X2xvY2soJnB2cjJfdW5pdF9tdHgpOyBkbyB7CiAJCWlmICgoaGR3LT51bml0X251bWJlciA+PSAwKSAmJgpAQCAtMjY3OCw2ICsyODk1LDE1MCBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHB2cjJfc3ViZGV2X3NldF9jb250cm9sKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBpbnQgaWQsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWwpCit7CisJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyICVzPSVkIiwgbmFtZSwgdmFsKTsKKwltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CisJY3RybC5pZCA9IGlkOworCWN0cmwudmFsdWUgPSB2YWw7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgJmN0cmwpOworfQorCisjZGVmaW5lIFBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgaWQsIGxhYikgXAorCWlmICgoaGR3KS0+bGFiIyNfZGlydHkgfHwgKGhkdyktPmZvcmNlX2RpcnR5KSB7CQlcCisJCXB2cjJfc3ViZGV2X3NldF9jb250cm9sKGhkdywgaWQsICNsYWIsIChoZHcpLT5sYWIjI192YWwpOyBcCisJfQorCisvKiBFeGVjdXRlIHdoYXRldmVyIGNvbW1hbmRzIGFyZSByZXF1aXJlZCB0byB1cGRhdGUgdGhlIHN0YXRlIG9mIGFsbCB0aGUKKyAgIHN1Yi1kZXZpY2VzIHNvIHRoYXQgdGhleSBtYXRjaCBvdXIgY3VycmVudCBjb250cm9sIHZhbHVlcy4gKi8KK3N0YXRpYyB2b2lkIHB2cjJfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCBpZDsKKwlwdnIyX3N1YmRldl91cGRhdGVfZnVuYyBmcDsKKworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB1cGRhdGUuLi4iKTsKKworCWlmIChoZHctPnR1bmVyX3VwZGF0ZWQgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgc2V0dXA7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB0dW5lciBzZXRfdHlwZSglZCkiLAorCQkJICAgaGR3LT50dW5lcl90eXBlKTsKKwkJaWYgKCgoaW50KShoZHctPnR1bmVyX3R5cGUpKSA+PSAwKSB7CisJCQlzZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKKwkJCXNldHVwLnR5cGUgPSBoZHctPnR1bmVyX3R5cGU7CisJCQlzZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPIHwgVF9BTkFMT0dfVFY7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc190eXBlX2FkZHIsICZzZXR1cCk7CisJCX0KKwl9CisKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPnN0ZF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9zdGFuZGFyZCIpOworCQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc19yYWRpbyk7CisJCX0gZWxzZSB7CisJCQl2NGwyX3N0ZF9pZCB2czsKKwkJCXZzID0gaGR3LT5zdGRfbWFza19jdXI7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkJICAgICB0dW5lciwgc19zdGQsIHZzKTsKKwkJfQorCQloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9ICEwOworCQloZHctPmNyb3BjYXBfc3RhbGUgPSAhMDsKKwl9CisKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIGJyaWdodG5lc3MpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQ09OVFJBU1QsIGNvbnRyYXN0KTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX1NBVFVSQVRJT04sIHNhdHVyYXRpb24pOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfSFVFLCBodWUpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fTVVURSwgbXV0ZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19WT0xVTUUsIHZvbHVtZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19CQUxBTkNFLCBiYWxhbmNlKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX0JBU1MsIGJhc3MpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fVFJFQkxFLCB0cmVibGUpOworCisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5hdWRpb21vZGVfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKKwkJbWVtc2V0KCZ2dCwgMCwgc2l6ZW9mKHZ0KSk7CisJCXZ0LmF1ZG1vZGUgPSBoZHctPmF1ZGlvbW9kZV92YWw7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB0dW5lciwgc190dW5lciwgJnZ0KTsKKwl9CisKKwlpZiAoaGR3LT5mcmVxRGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQl1bnNpZ25lZCBsb25nIGZ2OworCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcTsKKwkJZnYgPSBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoaGR3KTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2ZyZXEoJWx1KSIsIGZ2KTsKKwkJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSBwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOworCQltZW1zZXQoJmZyZXEsIDAsIHNpemVvZihmcmVxKSk7CisJCWlmIChoZHctPnR1bmVyX3NpZ25hbF9pbmZvLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpIHsKKwkJCS8qICgoZnYgKiAxMDAwKSAvIDYyNTAwKSAqLworCQkJZnJlcS5mcmVxdWVuY3kgPSAoZnYgKiAyKSAvIDEyNTsKKwkJfSBlbHNlIHsKKwkJCWZyZXEuZnJlcXVlbmN5ID0gZnYgLyA2MjUwMDsKKwkJfQorCQkvKiB0dW5lci1jb3JlIGN1cnJlbnRseSBkb2Vzbid0IHNlZW0gdG8gY2FyZSBhYm91dCB0aGlzLCBidXQKKwkJICAgbGV0J3Mgc2V0IGl0IGFueXdheSBmb3IgY29tcGxldGVuZXNzLiAqLworCQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7CisJCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQl9IGVsc2UgeworCQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJCX0KKwkJZnJlcS50dW5lciA9IDA7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB0dW5lciwKKwkJCQkgICAgIHNfZnJlcXVlbmN5LCAmZnJlcSk7CisJfQorCisJaWYgKGhkdy0+cmVzX2hvcl9kaXJ0eSB8fCBoZHctPnJlc192ZXJfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCQltZW1zZXQoJmZtdCwgMCwgc2l6ZW9mKGZtdCkpOworCQlmbXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJZm10LmZtdC5waXgud2lkdGggPSBoZHctPnJlc19ob3JfdmFsOworCQlmbXQuZm10LnBpeC5oZWlnaHQgPSBoZHctPnJlc192ZXJfdmFsOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfc2l6ZSglZHglZCkiLAorCQkJICAgZm10LmZtdC5waXgud2lkdGgsIGZtdC5mbXQucGl4LmhlaWdodCk7CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB2aWRlbywgc19mbXQsICZmbXQpOworCX0KKworCWlmIChoZHctPnNyYXRlX2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJdTMyIHZhbDsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2F1ZGlvICVkIiwKKwkJCSAgIGhkdy0+c3JhdGVfdmFsKTsKKwkJc3dpdGNoIChoZHctPnNyYXRlX3ZhbCkgeworCQlkZWZhdWx0OgorCQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOgorCQkJdmFsID0gNDgwMDA7CisJCQlicmVhazsKKwkJY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMDoKKwkJCXZhbCA9IDQ0MTAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDA6CisJCQl2YWwgPSAzMjAwMDsKKwkJCWJyZWFrOworCQl9CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLAorCQkJCSAgICAgYXVkaW8sIHNfY2xvY2tfZnJlcSwgdmFsKTsKKwl9CisKKwkvKiBVbmFibGUgdG8gc2V0IGNyb3AgcGFyYW1ldGVyczsgdGhlcmUgaXMgYXBwYXJlbnRseSBubyBlcXVpdmFsZW50CisJICAgZm9yIFZJRElPQ19TX0NST1AgKi8KKworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmhkdy0+djRsMl9kZXYpIHsKKwkJaWQgPSBzZC0+Z3JwX2lkOworCQlpZiAoaWQgPj0gQVJSQVlfU0laRShwdnIyX21vZHVsZV91cGRhdGVfZnVuY3Rpb25zKSkgY29udGludWU7CisJCWZwID0gcHZyMl9tb2R1bGVfdXBkYXRlX2Z1bmN0aW9uc1tpZF07CisJCWlmICghZnApIGNvbnRpbnVlOworCQkoKmZwKShoZHcsIHNkKTsKKwl9CisKKwlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgfHwgaGR3LT5jcm9wY2FwX3N0YWxlKSB7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CisJfQorfQorCisKIC8qIEZpZ3VyZSBvdXQgaWYgd2UgbmVlZCB0byBjb21taXQgY29udHJvbCBjaGFuZ2VzLiAgSWYgc28sIG1hcmsgaW50ZXJuYWwKICAgIHN0YXRlIGZsYWdzIHRvIGluZGljYXRlIHRoaXMgZmFjdCBhbmQgcmV0dXJuIHRydWUuICBPdGhlcndpc2UgZG8gbm90aGluZwogICAgZWxzZSBhbmQgcmV0dXJuIGZhbHNlLiAqLwpAQCAtMjY4Niw3ICszMDQ3LDcgQEAKIAl1bnNpZ25lZCBpbnQgaWR4OwogCXN0cnVjdCBwdnIyX2N0cmwgKmNwdHI7CiAJaW50IHZhbHVlOwotCWludCBjb21taXRfZmxhZyA9IDA7CisJaW50IGNvbW1pdF9mbGFnID0gaGR3LT5mb3JjZV9kaXJ0eTsKIAljaGFyIGJ1ZlsxMDBdOwogCXVuc2lnbmVkIGludCBiY250LGNjbnQ7CiAKQEAgLTI4NDIsMTggKzMyMDMsNiBAQAogCQljeDIzNDF4X2V4dF9jdHJscygmaGR3LT5lbmNfY3RsX3N0YXRlLCAwLCAmY3MsVklESU9DX1NfRVhUX0NUUkxTKTsKIAl9CiAKLQkvKiBTY2FuIGkyYyBjb3JlIGF0IHRoaXMgcG9pbnQgLSBiZWZvcmUgd2UgY2xlYXIgYWxsIHRoZSBkaXJ0eQotCSAgIGJpdHMuICBWYXJpb3VzIHBhcnRzIG9mIHRoZSBpMmMgY29yZSB3aWxsIG5vdGljZSBkaXJ0eSBiaXRzIGFzCi0JICAgYXBwcm9wcmlhdGUgYW5kIGFycmFuZ2UgdG8gYnJvYWRjYXN0IG9yIGRpcmVjdGx5IHNlbmQgdXBkYXRlcyB0bwotCSAgIHRoZSBjbGllbnQgZHJpdmVycyBpbiBvcmRlciB0byBrZWVwIGV2ZXJ5dGhpbmcgaW4gc3luYyAqLwotCXB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoaGR3KTsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgaGR3LT5jb250cm9sX2NudDsgaWR4KyspIHsKLQkJY3B0ciA9IGhkdy0+Y29udHJvbHMgKyBpZHg7Ci0JCWlmICghY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkpIGNvbnRpbnVlOwotCQljcHRyLT5pbmZvLT5jbGVhcl9kaXJ0eShjcHRyKTsKLQl9Ci0KIAlpZiAoaGR3LT5hY3RpdmVfc3RyZWFtX3R5cGUgIT0gaGR3LT5kZXNpcmVkX3N0cmVhbV90eXBlKSB7CiAJCS8qIEhhbmRsZSBhbnkgc2lkZSBlZmZlY3RzIG9mIHN0cmVhbSBjb25maWcgaGVyZSAqLwogCQloZHctPmFjdGl2ZV9zdHJlYW1fdHlwZSA9IGhkdy0+ZGVzaXJlZF9zdHJlYW1fdHlwZTsKQEAgLTI4NzMsOCArMzIyMiwxNiBAQAogCQl9CiAJfQogCi0JLyogTm93IGV4ZWN1dGUgaTJjIGNvcmUgdXBkYXRlICovCi0JcHZyMl9pMmNfY29yZV9zeW5jKGhkdyk7CisJLyogQ2hlY2sgYW5kIHVwZGF0ZSBzdGF0ZSBmb3IgYWxsIHN1Yi1kZXZpY2VzLiAqLworCXB2cjJfc3ViZGV2X3VwZGF0ZShoZHcpOworCisJaGR3LT50dW5lcl91cGRhdGVkID0gMDsKKwloZHctPmZvcmNlX2RpcnR5ID0gMDsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGhkdy0+Y29udHJvbF9jbnQ7IGlkeCsrKSB7CisJCWNwdHIgPSBoZHctPmNvbnRyb2xzICsgaWR4OworCQlpZiAoIWNwdHItPmluZm8tPmNsZWFyX2RpcnR5KSBjb250aW51ZTsKKwkJY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkoY3B0cik7CisJfQogCiAJaWYgKChoZHctPnBhdGh3YXlfc3RhdGUgPT0gUFZSMl9QQVRIV0FZX0FOQUxPRykgJiYKIAkgICAgaGR3LT5zdGF0ZV9lbmNvZGVyX3J1bikgewpAQCAtMjkwNCwxNSArMzI2MSw2IEBACiB9CiAKIAotc3RhdGljIHZvaWQgcHZyMl9oZHdfd29ya2VyX2kyYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgcHZyMl9oZHcsd29ya2kyY3N5bmMpOwotCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQlwdnIyX2kyY19jb3JlX3N5bmMoaGR3KTsKLQl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwotfQotCi0KIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9wb2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlpbnQgZmwgPSAwOwpAQCAtMjk3Myw3ICszMzIxLDcgQEAKIHZvaWQgcHZyMl9oZHdfZXhlY3V0ZV90dW5lcl9wb2xsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewogCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKIH0KIApAQCAtMjk4Myw3ICszMzMxLDcgQEAKIAlpZiAoIWhkdy0+Y3JvcGNhcF9zdGFsZSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJaWYgKGhkdy0+Y3JvcGNhcF9zdGFsZSkgewogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zMDEwLDcgKzMzNTgsNyBAQAogewogCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewogCQlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKLQkJCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwkJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJCX0KIAkJbWVtY3B5KHZ0cCwmaGR3LT50dW5lcl9zaWduYWxfaW5mbyxzaXplb2Yoc3RydWN0IHY0bDJfdHVuZXIpKTsKIAl9IHdoaWxlICgwKTsgTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwpAQCAtMzAyOSwxMSArMzM3Nyw4IEBACiB7CiAJaW50IG5yID0gcHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKGhkdyk7CiAJTE9DS19UQUtFKGhkdy0+YmlnX2xvY2spOyBkbyB7Ci0JCWhkdy0+bG9nX3JlcXVlc3RlZCA9ICEwOwogCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiA9PT09PT09PT09PT09PT09PSAgU1RBUlQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PT09PT09PT09PVxuIiwgbnIpOwotCQlwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKGhkdyk7Ci0JCWhkdy0+bG9nX3JlcXVlc3RlZCA9IDA7Ci0JCXB2cjJfaTJjX2NvcmVfc3luYyhoZHcpOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgbG9nX3N0YXR1cyk7CiAJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTkZPLCJjeDIzNDF4IGNvbmZpZzoiKTsKIAkJY3gyMzQxeF9sb2dfc3RhdHVzKCZoZHctPmVuY19jdGxfc3RhdGUsICJwdnJ1c2IyIik7CiAJCXB2cjJfaGR3X3N0YXRlX2xvZ19zdGF0ZShoZHcpOwpAQCAtMzcxNiwyMiArNDA2MSwxNiBAQAogCiBpbnQgcHZyMl9oZHdfY21kX2RlY29kZXJfcmVzZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JaWYgKCFoZHctPmRlY29kZXJfY3RybCkgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKLQkJCSAgICJVbmFibGUgdG8gcmVzZXQgZGVjb2Rlcjogbm90aGluZyBhdHRhY2hlZCIpOwotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KLQlpZiAoIWhkdy0+ZGVjb2Rlcl9jdHJsLT5mb3JjZV9yZXNldCkgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKLQkJCSAgICJVbmFibGUgdG8gcmVzZXQgZGVjb2Rlcjogbm90IGltcGxlbWVudGVkIik7Ci0JCXJldHVybiAtRU5PVFRZOwotCX0KLQogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAogCQkgICAiUmVxdWVzdGluZyBkZWNvZGVyIHJlc2V0Iik7Ci0JaGR3LT5kZWNvZGVyX2N0cmwtPmZvcmNlX3Jlc2V0KGhkdy0+ZGVjb2Rlcl9jdHJsLT5jdHh0KTsKLQlyZXR1cm4gMDsKKwlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCkgeworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgaGR3LT5kZWNvZGVyX2NsaWVudF9pZCwKKwkJCQkgICAgIGNvcmUsIHJlc2V0LCAwKTsKKwkJcmV0dXJuIDA7CisJfQorCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkgICAiVW5hYmxlIHRvIHJlc2V0IGRlY29kZXI6IG5vdGhpbmcgYXR0YWNoZWQiKTsKKwlyZXR1cm4gLUVOT1RUWTsKIH0KIAogCkBAIC00NDc2LDYgKzQ4MTUsNzkgQEAKIH0KIAogCisvKiBHZW5lcmF0ZSByZXBvcnQgY29udGFpbmluZyBpbmZvIGFib3V0IGF0dGFjaGVkIHN1Yi1kZXZpY2VzIGFuZCBhdHRhY2hlZAorICAgaTJjIGNsaWVudHMsIGluY2x1ZGluZyBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoIGF0dGFjaGVkIGkyYyBjbGllbnRzIGFyZQorICAgYWN0dWFsbHkgc3ViLWRldmljZXMuICovCitzdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaGR3X3JlcG9ydF9jbGllbnRzKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAorCQkJCQkgICAgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYWNudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXVuc2lnbmVkIGludCB0Y250ID0gMDsKKwl1bnNpZ25lZCBpbnQgY2NudDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07CisJdm9pZCAqY2Q7CisJY29uc3QgY2hhciAqcDsKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwljY250ID0gc2NucHJpbnRmKGJ1ZiwgYWNudCwgIkFzc29jaWF0ZWQgdjRsMi1zdWJkZXYgZHJpdmVyczoiKTsKKwl0Y250ICs9IGNjbnQ7CisJdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCAmaGR3LT52NGwyX2RldikgeworCQlpZCA9IHNkLT5ncnBfaWQ7CisJCXAgPSBOVUxMOworCQlpZiAoaWQgPCBBUlJBWV9TSVpFKG1vZHVsZV9uYW1lcykpIHAgPSBtb2R1bGVfbmFtZXNbaWRdOworCQlpZiAocCkgeworCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIiAlcyIsIHApOworCQkJdGNudCArPSBjY250OworCQl9IGVsc2UgeworCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwKKwkJCQkJICIgKHVua25vd24gaWQ9JXUpIiwgaWQpOworCQkJdGNudCArPSBjY250OworCQl9CisJfQorCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICJcbiIpOworCXRjbnQgKz0gY2NudDsKKworCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICJJMkMgY2xpZW50czpcbiIpOworCXRjbnQgKz0gY2NudDsKKworCW11dGV4X2xvY2soJmhkdy0+aTJjX2FkYXAuY2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaChpdGVtLCAmaGR3LT5pMmNfYWRhcC5jbGllbnRzKSB7CisJCWNsaWVudCA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IGkyY19jbGllbnQsIGxpc3QpOworCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LAorCQkJCSAiICAlczogaTJjPSUwMngiLCBjbGllbnQtPm5hbWUsIGNsaWVudC0+YWRkcik7CisJCXRjbnQgKz0gY2NudDsKKwkJY2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkJdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCAmaGR3LT52NGwyX2RldikgeworCQkJaWYgKGNkID09IHNkKSB7CisJCQkJaWQgPSBzZC0+Z3JwX2lkOworCQkJCXAgPSBOVUxMOworCQkJCWlmIChpZCA8IEFSUkFZX1NJWkUobW9kdWxlX25hbWVzKSkgeworCQkJCQlwID0gbW9kdWxlX25hbWVzW2lkXTsKKwkJCQl9CisJCQkJaWYgKHApIHsKKwkJCQkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LAorCQkJCQkJCSBhY250IC0gdGNudCwKKwkJCQkJCQkgIiBzdWJkZXY9JXMiLCBwKTsKKwkJCQkJdGNudCArPSBjY250OworCQkJCX0gZWxzZSB7CisJCQkJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwKKwkJCQkJCQkgYWNudCAtIHRjbnQsCisJCQkJCQkJICIgc3ViZGV2PSBpZCAldSkiLAorCQkJCQkJCSBpZCk7CisJCQkJCXRjbnQgKz0gY2NudDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwgIlxuIik7CisJCXRjbnQgKz0gY2NudDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19hZGFwLmNsaXN0X2xvY2spOworCXJldHVybiB0Y250OworfQorCisKIHVuc2lnbmVkIGludCBwdnIyX2hkd19zdGF0ZV9yZXBvcnQoc3RydWN0IHB2cjJfaGR3ICpoZHcsCiAJCQkJICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBhY250KQogewpAQCAtNDQ5MCw2ICs0OTAyLDggQEAKIAkJYnVmWzBdID0gJ1xuJzsgY2NudCA9IDE7CiAJCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKIAl9CisJY2NudCA9IHB2cjJfaGR3X3JlcG9ydF9jbGllbnRzKGhkdywgYnVmLCBhY250KTsKKwliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAJTE9DS19HSVZFKGhkdy0+YmlnX2xvY2spOwogCXJldHVybiBiY250OwogfQpAQCAtNDQ5NywxNCArNDkxMSwyNSBAQAogCiBzdGF0aWMgdm9pZCBwdnIyX2hkd19zdGF0ZV9sb2dfc3RhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7Ci0JY2hhciBidWZbMTI4XTsKLQl1bnNpZ25lZCBpbnQgaWR4LGNjbnQ7CisJY2hhciBidWZbMjU2XTsKKwl1bnNpZ25lZCBpbnQgaWR4LCBjY250OworCXVuc2lnbmVkIGludCBsY250LCB1Y250OwogCiAJZm9yIChpZHggPSAwOyA7IGlkeCsrKSB7CiAJCWNjbnQgPSBwdnIyX2hkd19yZXBvcnRfdW5sb2NrZWQoaGR3LGlkeCxidWYsc2l6ZW9mKGJ1ZikpOwogCQlpZiAoIWNjbnQpIGJyZWFrOwogCQlwcmludGsoS0VSTl9JTkZPICIlcyAlLipzXG4iLGhkdy0+bmFtZSxjY250LGJ1Zik7CiAJfQorCWNjbnQgPSBwdnIyX2hkd19yZXBvcnRfY2xpZW50cyhoZHcsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXVjbnQgPSAwOworCXdoaWxlICh1Y250IDwgY2NudCkgeworCQlsY250ID0gMDsKKwkJd2hpbGUgKChsY250ICsgdWNudCA8IGNjbnQpICYmIChidWZbbGNudCArIHVjbnRdICE9ICdcbicpKSB7CisJCQlsY250Kys7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJS4qc1xuIiwgaGR3LT5uYW1lLCBsY250LCBidWYgKyB1Y250KTsKKwkJdWNudCArPSBsY250ICsgMTsKKwl9CiB9CiAKIApAQCAtNDY0MSw2ICs1MDY2LDMwIEBACiB9CiAKIAordm9pZCBwdnIyX2hkd19zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKK3sKKwlzdHJ1Y3QgdjRsMl90dW5lciAqdnRwID0gJmhkdy0+dHVuZXJfc2lnbmFsX2luZm87CisJbWVtc2V0KHZ0cCwgMCwgc2l6ZW9mKCp2dHApKTsKKwloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9IDA7CisJLyogTm90ZTogVGhlcmUgYXBwYXJlbnRseSBpcyBubyByZXBsYWNlbWVudCBmb3IgVklESU9DX0NST1BDQVAKKwkgICB1c2luZyB2NGwyLXN1YmRldiAtIHRoZXJlZm9yZSB3ZSBjYW4ndCBzdXBwb3J0IHRoYXQgQVQgQUxMIHJpZ2h0CisJICAgbm93LiAgKE9mIGNvdXJzZSwgbm8gc3ViLWRyaXZlcnMgc2VlbSB0byBpbXBsZW1lbnQgaXQgZWl0aGVyLgorCSAgIEJ1dCBub3cgaXQncyBhIGEgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW0uLi4pICovCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHR1bmVyLCBnX3R1bmVyLAorCQkJICAgICAmaGR3LT50dW5lcl9zaWduYWxfaW5mbyk7CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHN0YXR1cyBwb2xsIgorCQkgICAiIHR5cGU9JXUgc3RyZW5ndGg9JXUgYXVkaW89MHgleCBjYXA9MHgleCIKKwkJICAgIiBsb3c9JXUgaGk9JXUiLAorCQkgICB2dHAtPnR5cGUsCisJCSAgIHZ0cC0+c2lnbmFsLCB2dHAtPnJ4c3ViY2hhbnMsIHZ0cC0+Y2FwYWJpbGl0eSwKKwkJICAgdnRwLT5yYW5nZWxvdywgdnRwLT5yYW5nZWhpZ2gpOworCisJLyogV2UgaGF2ZSB0byBkbyB0aGlzIHRvIGF2b2lkIGdldHRpbmcgaW50byBjb25zdGFudCBwb2xsaW5nIGlmCisJICAgdGhlcmUncyBub2JvZHkgdG8gYW5zd2VyIGEgcG9sbCBvZiBjcm9wY2FwIGluZm8uICovCisJaGR3LT5jcm9wY2FwX3N0YWxlID0gMDsKK30KKworCiB1bnNpZ25lZCBpbnQgcHZyMl9oZHdfZ2V0X2lucHV0X2F2YWlsYWJsZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT5pbnB1dF9hdmFpbF9tYXNrOwpAQCAtNDczNiw3ICs1MTg1LDYgQEAKIAkJCSAgICAgaW50IHNldEZsLCB1NjQgKnZhbF9wdHIpCiB7CiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwogCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciByZXE7CiAJaW50IHN0YXQgPSAwOwogCWludCBva0ZsID0gMDsKQEAgLTQ3NDYsMjEgKzUxOTQsOSBAQAogCXJlcS5tYXRjaCA9ICptYXRjaDsKIAlyZXEucmVnID0gcmVnX2lkOwogCWlmIChzZXRGbCkgcmVxLnZhbCA9ICp2YWxfcHRyOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoCi0JCQkJICAgIGNwLT5jbGllbnQsCi0JCQkJICAgICZyZXEubWF0Y2gpKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdGF0ID0gcHZyMl9pMmNfY2xpZW50X2NtZCgKLQkJCQljcCwoc2V0RmwgPyBWSURJT0NfREJHX1NfUkVHSVNURVIgOgotCQkJCSAgICBWSURJT0NfREJHX0dfUkVHSVNURVIpLCZyZXEpOwotCQkJaWYgKCFzZXRGbCkgKnZhbF9wdHIgPSByZXEudmFsOwotCQkJb2tGbCA9ICEwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOworCS8qIEl0IHdvdWxkIGJlIG5pY2UgdG8ga25vdyBpZiBhIHN1Yi1kZXZpY2UgYW5zd2VyZWQgdGhlIHJlcXVlc3QgKi8KKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgZ19yZWdpc3RlciwgJnJlcSk7CisJaWYgKCFzZXRGbCkgKnZhbF9wdHIgPSByZXEudmFsOwogCWlmIChva0ZsKSB7CiAJCXJldHVybiBzdGF0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKaW5kZXggMWI0ZmVjMy4uN2I2OTQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKQEAgLTEzMiw2ICsxMzIsOSBAQAogLyogUmV0cmlldmUgYnVzIGxvY2F0aW9uIGluZm8gb2YgZGV2aWNlICovCiBjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfYnVzX2luZm8oc3RydWN0IHB2cjJfaGR3ICopOwogCisvKiBSZXRyaWV2ZSBwZXItaW5zdGFuY2Ugc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgc3BlY2lmaWMgZGV2aWNlICovCitjb25zdCBjaGFyICpwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc3RydWN0IHB2cjJfaGR3ICopOworCiAvKiBDYWxsZWQgd2hlbiBoYXJkd2FyZSBoYXMgYmVlbiB1bnBsdWdnZWQgKi8KIHZvaWQgcHZyMl9oZHdfZGlzY29ubmVjdChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKQEAgLTIzNiw4ICsyMzksNyBAQAogCQkJCSAgICAgZW51bSBwdnIyX3Y0bF90eXBlIGluZGV4LGludCk7CiAKIC8qIERpcmVjdCByZWFkL3dyaXRlIGFjY2VzcyB0byBjaGlwJ3MgcmVnaXN0ZXJzOgotICAgbWF0Y2hfdHlwZSAtIGhvdyB0byBpbnRlcnByZXQgbWF0Y2hfY2hpcCAoZS5nLiBkcml2ZXIgSUQsIGkyYyBhZGRyZXNzKQotICAgbWF0Y2hfY2hpcCAtIGNoaXAgbWF0Y2ggdmFsdWUgKGUuZy4gSTJDX0RSSVZFUkRfeHh4eCkKKyAgIG1hdGNoIC0gc3BlY2lmeSBjcml0ZXJpYSB0byBpZGVudGlmeSB0YXJnZXQgY2hpcCAodGhpcyBpcyBhIHY0bCBkYmcgc3RydWN0KQogICAgcmVnX2lkICAtIHJlZ2lzdGVyIG51bWJlciB0byBhY2Nlc3MKICAgIHNldEZsICAgLSB0cnVlIHRvIHNldCB0aGUgcmVnaXN0ZXIsIGZhbHNlIHRvIHJlYWQgaXQKICAgIHZhbF9wdHIgLSBzdG9yYWdlIGxvY2F0aW9uIGZvciBzb3VyY2UgLyByZXN1bHQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhNDc3MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCi0jaW5jbHVkZSAicHZydXNiMi1hdWRpby5oIgotI2luY2x1ZGUgInB2cnVzYjItdHVuZXIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXZpZGVvLXY0bC5oIgotI2luY2x1ZGUgInB2cnVzYjItY3gyNTg0eC12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXdtODc3NS5oIgotCi0jZGVmaW5lIHRyYWNlX2kyYyguLi4pIHB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkMsX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgT1BfU1RBTkRBUkQgMAotI2RlZmluZSBPUF9BVURJT01PREUgMQotI2RlZmluZSBPUF9CQ1NIIDIKLSNkZWZpbmUgT1BfVk9MVU1FIDMKLSNkZWZpbmUgT1BfRlJFUSA0Ci0jZGVmaW5lIE9QX0FVRElPUkFURSA1Ci0jZGVmaW5lIE9QX0NST1AgNgotI2RlZmluZSBPUF9TSVpFIDcKLSNkZWZpbmUgT1BfTE9HIDgKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqIGNvbnN0IG9wc1tdID0gewotCVtPUF9TVEFOREFSRF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZCwKLQlbT1BfQVVESU9NT0RFXSA9ICZwdnIyX2kyY19vcF92NGwyX2F1ZGlvbW9kZSwKLQlbT1BfQkNTSF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9iY3NoLAotCVtPUF9WT0xVTUVdID0gJnB2cjJfaTJjX29wX3Y0bDJfdm9sdW1lLAotCVtPUF9GUkVRXSA9ICZwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeSwKLQlbT1BfQ1JPUF0gPSAmcHZyMl9pMmNfb3BfdjRsMl9jcm9wLAotCVtPUF9TSVpFXSA9ICZwdnIyX2kyY19vcF92NGwyX3NpemUsCi0JW09QX0xPR10gPSAmcHZyMl9pMmNfb3BfdjRsMl9sb2csCi19OwotCi12b2lkIHB2cjJfaTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCWludCBpZDsKLQlpZCA9IGNwLT5jbGllbnQtPmRyaXZlci0+aWQ7Ci0JY3AtPmN0bF9tYXNrID0gKCgxIDw8IE9QX1NUQU5EQVJEKSB8Ci0JCQkoMSA8PCBPUF9BVURJT01PREUpIHwKLQkJCSgxIDw8IE9QX0JDU0gpIHwKLQkJCSgxIDw8IE9QX1ZPTFVNRSkgfAotCQkJKDEgPDwgT1BfRlJFUSkgfAotCQkJKDEgPDwgT1BfQ1JPUCkgfAotCQkJKDEgPDwgT1BfU0laRSkgfAotCQkJKDEgPDwgT1BfTE9HKSk7Ci0JY3AtPnN0YXR1c19wb2xsID0gcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbDsKLQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfTVNQMzQwMCkgewotCQlpZiAocHZyMl9pMmNfbXNwMzQwMF9zZXR1cChoZHcsY3ApKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JaWYgKGlkID09IEkyQ19EUklWRVJJRF9UVU5FUikgewotCQlpZiAocHZyMl9pMmNfdHVuZXJfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfQ1gyNTg0MCkgewotCQlpZiAocHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfV004Nzc1KSB7Ci0JCWlmIChwdnIyX2kyY193bTg3NzVfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfU0FBNzExWCkgewotCQlpZiAocHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqcHZyMl9pMmNfZ2V0X29wKHVuc2lnbmVkIGludCBpZHgpCi17Ci0JaWYgKGlkeCA+PSBBUlJBWV9TSVpFKG9wcykpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBvcHNbaWR4XTsKLX0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmJiMTE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotCi1zdGF0aWMgdm9pZCBzZXRfc3RhbmRhcmQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfc3RhbmRhcmQiKTsKLQotCWlmIChoZHctPmlucHV0X3ZhbCA9PSBQVlIyX0NWQUxfSU5QVVRfUkFESU8pIHsKLQkJcHZyMl9pMmNfY29yZV9jbWQoaGR3LEFVRENfU0VUX1JBRElPLE5VTEwpOwotCX0gZWxzZSB7Ci0JCXY0bDJfc3RkX2lkIHZzOwotCQl2cyA9IGhkdy0+c3RkX21hc2tfY3VyOwotCQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfU1RELCZ2cyk7Ci0JfQotCWhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlID0gITA7Ci0JaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19zdGFuZGFyZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+aW5wdXRfZGlydHkgIT0gMCkgfHwgKGhkdy0+c3RkX2RpcnR5ICE9IDApOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3N0YW5kYXJkID0gewotCS5jaGVjayA9IGNoZWNrX3N0YW5kYXJkLAotCS51cGRhdGUgPSBzZXRfc3RhbmRhcmQsCi0JLm5hbWUgPSAidjRsMl9zdGFuZGFyZCIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9iY3NoKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9iY3NoIgotCQkgICAiIGI9JWQgYz0lZCBzPSVkIGg9JWQiLAotCQkgICBoZHctPmJyaWdodG5lc3NfdmFsLGhkdy0+Y29udHJhc3RfdmFsLAotCQkgICBoZHctPnNhdHVyYXRpb25fdmFsLGhkdy0+aHVlX3ZhbCk7Ci0JbWVtc2V0KCZjdHJsLDAsc2l6ZW9mKGN0cmwpKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKLQljdHJsLnZhbHVlID0gaGR3LT5icmlnaHRuZXNzX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0NPTlRSQVNUOwotCWN0cmwudmFsdWUgPSBoZHctPmNvbnRyYXN0X3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX1NBVFVSQVRJT047Ci0JY3RybC52YWx1ZSA9IGhkdy0+c2F0dXJhdGlvbl92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9IVUU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+aHVlX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19iY3NoKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5icmlnaHRuZXNzX2RpcnR5IHx8Ci0JCWhkdy0+Y29udHJhc3RfZGlydHkgfHwKLQkJaGR3LT5zYXR1cmF0aW9uX2RpcnR5IHx8Ci0JCWhkdy0+aHVlX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9iY3NoID0gewotCS5jaGVjayA9IGNoZWNrX2Jjc2gsCi0JLnVwZGF0ZSA9IHNldF9iY3NoLAotCS5uYW1lID0gInY0bDJfYmNzaCIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF92b2x1bWUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywKLQkJICAgImkyYyB2NGwyIHNldF92b2x1bWUiCi0JCSAgICIodm9sPSVkIGJhbD0lZCBiYXM9JWQgdHJlYj0lZCBtdXRlPSVkKSIsCi0JCSAgIGhkdy0+dm9sdW1lX3ZhbCwKLQkJICAgaGR3LT5iYWxhbmNlX3ZhbCwKLQkJICAgaGR3LT5iYXNzX3ZhbCwKLQkJICAgaGR3LT50cmVibGVfdmFsLAotCQkgICBoZHctPm11dGVfdmFsKTsKLQltZW1zZXQoJmN0cmwsMCxzaXplb2YoY3RybCkpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19NVVRFOwotCWN0cmwudmFsdWUgPSBoZHctPm11dGVfdmFsID8gMSA6IDA7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUU7Ci0JY3RybC52YWx1ZSA9IGhkdy0+dm9sdW1lX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U7Ci0JY3RybC52YWx1ZSA9IGhkdy0+YmFsYW5jZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19CQVNTOwotCWN0cmwudmFsdWUgPSBoZHctPmJhc3NfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVFJFQkxFOwotCWN0cmwudmFsdWUgPSBoZHctPnRyZWJsZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfdm9sdW1lKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT52b2x1bWVfZGlydHkgfHwKLQkJaGR3LT5iYWxhbmNlX2RpcnR5IHx8Ci0JCWhkdy0+YmFzc19kaXJ0eSB8fAotCQloZHctPnRyZWJsZV9kaXJ0eSB8fAotCQloZHctPm11dGVfZGlydHkpOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3ZvbHVtZSA9IHsKLQkuY2hlY2sgPSBjaGVja192b2x1bWUsCi0JLnVwZGF0ZSA9IHNldF92b2x1bWUsCi0JLm5hbWUgPSAidjRsMl92b2x1bWUiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQl2dC5hdWRtb2RlID0gaGR3LT5hdWRpb21vZGVfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19UVU5FUiwmdnQpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfYXVkaW9tb2RlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5pbnB1dF9kaXJ0eSB8fAotCQloZHctPmF1ZGlvbW9kZV9kaXJ0eSk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYXVkaW9tb2RlID0gewotCS5jaGVjayA9IGNoZWNrX2F1ZGlvbW9kZSwKLQkudXBkYXRlID0gc2V0X2F1ZGlvbW9kZSwKLQkubmFtZSA9ICJ2NGwyX2F1ZGlvbW9kZSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9mcmVxdWVuY3koc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBmdjsKLQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgZnJlcTsKLQlmdiA9IHB2cjJfaGR3X2dldF9jdXJfZnJlcShoZHcpOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2ZyZXEoJWx1KSIsZnYpOwotCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7Ci0JfQotCW1lbXNldCgmZnJlcSwwLHNpemVvZihmcmVxKSk7Ci0JaWYgKGhkdy0+dHVuZXJfc2lnbmFsX2luZm8uY2FwYWJpbGl0eSAmIFY0TDJfVFVORVJfQ0FQX0xPVykgewotCQkvLyAoKGZ2ICogMTAwMCkgLyA2MjUwMCkKLQkJZnJlcS5mcmVxdWVuY3kgPSAoZnYgKiAyKSAvIDEyNTsKLQl9IGVsc2UgewotCQlmcmVxLmZyZXF1ZW5jeSA9IGZ2IC8gNjI1MDA7Ci0JfQotCS8qIHR1bmVyLWNvcmUgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBjYXJlIGFib3V0IHRoaXMsIGJ1dAotCSAgIGxldCdzIHNldCBpdCBhbnl3YXkgZm9yIGNvbXBsZXRlbmVzcy4gKi8KLQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7Ci0JCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0JfSBlbHNlIHsKLQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JfQotCWZyZXEudHVuZXIgPSAwOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19GUkVRVUVOQ1ksJmZyZXEpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfZnJlcXVlbmN5KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiBoZHctPmZyZXFEaXJ0eSAhPSAwOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeSA9IHsKLQkuY2hlY2sgPSBjaGVja19mcmVxdWVuY3ksCi0JLnVwZGF0ZSA9IHNldF9mcmVxdWVuY3ksCi0JLm5hbWUgPSAidjRsMl9mcmVxIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X3NpemUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0Jc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKLQotCW1lbXNldCgmZm10LDAsc2l6ZW9mKGZtdCkpOwotCi0JZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JZm10LmZtdC5waXgud2lkdGggPSBoZHctPnJlc19ob3JfdmFsOwotCWZtdC5mbXQucGl4LmhlaWdodCA9IGhkdy0+cmVzX3Zlcl92YWw7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9zaXplKCVkeCVkKSIsCi0JCQkgICBmbXQuZm10LnBpeC53aWR0aCxmbXQuZm10LnBpeC5oZWlnaHQpOwotCi0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0ZNVCwmZm10KTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3NpemUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPnJlc19ob3JfZGlydHkgfHwgaGR3LT5yZXNfdmVyX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zaXplID0gewotCS5jaGVjayA9IGNoZWNrX3NpemUsCi0JLnVwZGF0ZSA9IHNldF9zaXplLAotCS5uYW1lID0gInY0bDJfc2l6ZSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9jcm9wKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2Nyb3AgY3JvcDsKLQotCW1lbXNldCgmY3JvcCwgMCwgc2l6ZW9mIGNyb3ApOwotCWNyb3AudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQljcm9wLmMubGVmdCA9IGhkdy0+Y3JvcGxfdmFsOwotCWNyb3AuYy50b3AgPSBoZHctPmNyb3B0X3ZhbDsKLQljcm9wLmMuaGVpZ2h0ID0gaGR3LT5jcm9waF92YWw7Ci0JY3JvcC5jLndpZHRoID0gaGR3LT5jcm9wd192YWw7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCi0JCSAgICJpMmMgdjRsMiBzZXRfY3JvcCBjcm9wPSVkOiVkOiVkOiVkIiwKLQkJICAgY3JvcC5jLndpZHRoLCBjcm9wLmMuaGVpZ2h0LCBjcm9wLmMubGVmdCwgY3JvcC5jLnRvcCk7Ci0KLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsIFZJRElPQ19TX0NST1AsICZjcm9wKTsKLX0KLQotc3RhdGljIGludCBjaGVja19jcm9wKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5jcm9wbF9kaXJ0eSB8fCBoZHctPmNyb3B0X2RpcnR5IHx8Ci0JCWhkdy0+Y3JvcHdfZGlydHkgfHwgaGR3LT5jcm9waF9kaXJ0eSk7Ci19Ci0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Nyb3AgPSB7Ci0JLmNoZWNrID0gY2hlY2tfY3JvcCwKLQkudXBkYXRlID0gc2V0X2Nyb3AsCi0JLm5hbWUgPSAidjRsMl9jcm9wIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgZG9fbG9nKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgZG9fbG9nKCkiKTsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX0xPR19TVEFUVVMsTlVMTCk7Ci0KLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2xvZyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gaGR3LT5sb2dfcmVxdWVzdGVkICE9IDA7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nID0gewotCS5jaGVjayA9IGNoZWNrX2xvZywKLQkudXBkYXRlID0gZG9fbG9nLAotCS5uYW1lID0gInY0bDJfbG9nIiwKLX07Ci0KLQotdm9pZCBwdnIyX3Y0bDJfY21kX3N0cmVhbShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCxpbnQgZmwpCi17Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjcCwKLQkJCSAgICAoZmwgPyBWSURJT0NfU1RSRUFNT04gOiBWSURJT0NfU1RSRUFNT0ZGKSxOVUxMKTsKLX0KLQotCi12b2lkIHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0JaW50IHN0YXQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcC0+aGR3OwotCWlmIChoZHctPmNyb3BjYXBfc3RhbGUpIHsKLQkJaGR3LT5jcm9wY2FwX2luZm8udHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsIFZJRElPQ19DUk9QQ0FQLAotCQkJCQkgICAmaGR3LT5jcm9wY2FwX2luZm8pOwotCQlpZiAoc3RhdCA9PSAwKSB7Ci0JCQkvKiBDaGVjayB3YXMgc3VjY2Vzc2Z1bCwgc28gdGhlIGRhdGEgaXMgbm8KLQkJCSAgIGxvbmdlciBjb25zaWRlcmVkIHN0YWxlLiAqLwotCQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gMDsKLQkJfQotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGNwLCBWSURJT0NfR19UVU5FUiwgJmhkdy0+dHVuZXJfc2lnbmFsX2luZm8pOwotfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzQ0YTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICoKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1BWUlVTQjJfQ01EX1Y0TDJfSAotI2RlZmluZSBfX1BWUlVTQjJfQ01EX1Y0TDJfSAotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQ7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfcmFkaW87Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYmNzaDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl92b2x1bWU7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfZnJlcXVlbmN5OwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Nyb3A7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc2l6ZTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGU7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfbG9nOwotCi12b2lkIHB2cjJfdjRsMl9jbWRfc3RyZWFtKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKixpbnQpOwotdm9pZCBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KLSNlbmRpZiAvKiBfX1BWUlVTQjJfQ01EX1Y0TDJfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBkNmEzNTQwLi45NDY0ODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgogI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKQEAgLTI5LDggKzMwLDcgQEAKIC8qCiAKICAgVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gaW1wbGVtZW50IGEgY29tcGxpYW50IEkyQyBhZGFwdGVyIGZvciB0aGUgcHZydXNiMgotICBkZXZpY2UuICBCeSBkb2luZyB0aGlzIHdlIGNhbiB0aGVuIG1ha2UgdXNlIG9mIGV4aXN0aW5nIGZ1bmN0aW9uYWxpdHkgaW4KLSAgVjRMIChlLmcuIHR1bmVyLmMpIHJhdGhlciB0aGFuIHJvbGxpbmcgb3VyIG93bi4KKyAgZGV2aWNlLgogCiAqLwogCkBAIC00MiwxMCArNDIsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGlyX21vZGUsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlyX21vZGUsInNwZWNpZnk6IDA9ZGlzYWJsZSBJUiByZWNlcHRpb24sIDE9bm9ybWFsIElSIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCi0JCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pOwotCiBzdGF0aWMgaW50IHB2cjJfaTJjX3dyaXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCAvKiBDb250ZXh0ICovCiAJCQkgIHU4IGkyY19hZGRyLCAgICAgIC8qIEkyQyBhZGRyZXNzIHdlJ3JlIHRhbGtpbmcgdG8gKi8KIAkJCSAgdTggKmRhdGEsICAgICAgICAgLyogRGF0YSB0byB3cml0ZSAqLwpAQCAtNTI0LDQxNCArNTIwLDEzIEBACiAJcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUwgfCBJMkNfRlVOQ19JMkM7CiB9CiAKLXN0YXRpYyBpbnQgcHZyMl9pMmNfY29yZV9zaW5nbGV0b24oc3RydWN0IGkyY19jbGllbnQgKmNwLAotCQkJCSAgIHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCWludCBzdGF0OwotCWlmICghY3ApIHJldHVybiAtRUlOVkFMOwotCWlmICghKGNwLT5kcml2ZXIpKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoIShjcC0+ZHJpdmVyLT5jb21tYW5kKSkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCF0cnlfbW9kdWxlX2dldChjcC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKSByZXR1cm4gLUVBR0FJTjsKLQlzdGF0ID0gY3AtPmRyaXZlci0+Y29tbWFuZChjcCxjbWQsYXJnKTsKLQltb2R1bGVfcHV0KGNwLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JcmV0dXJuIHN0YXQ7Ci19Ci0KLWludCBwdnIyX2kyY19jbGllbnRfY21kKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCWludCBzdGF0OwotCWlmIChwdnJ1c2IyX2RlYnVnICYgUFZSMl9UUkFDRV9JMkNfQ01EKSB7Ci0JCWNoYXIgYnVmWzEwMF07Ci0JCXVuc2lnbmVkIGludCBjbnQ7Ci0JCWNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShjcCxQVlIyX0kyQ19ERVRBSUxfREVCVUcsCi0JCQkJCSAgICAgICBidWYsc2l6ZW9mKGJ1ZikpOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NNRCwKLQkJCSAgICJpMmMgQ09NTUFORCAoY29kZT0ldSAweCV4KSB0byAlLipzIiwKLQkJCSAgIGNtZCxjbWQsY250LGJ1Zik7Ci0JfQotCXN0YXQgPSBwdnIyX2kyY19jb3JlX3NpbmdsZXRvbihjcC0+Y2xpZW50LGNtZCxhcmcpOwotCWlmIChwdnJ1c2IyX2RlYnVnICYgUFZSMl9UUkFDRV9JMkNfQ01EKSB7Ci0JCWNoYXIgYnVmWzEwMF07Ci0JCXVuc2lnbmVkIGludCBjbnQ7Ci0JCWNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShjcCxQVlIyX0kyQ19ERVRBSUxfREVCVUcsCi0JCQkJCSAgICAgICBidWYsc2l6ZW9mKGJ1ZikpOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NNRCwKLQkJCSAgICJpMmMgQ09NTUFORCB0byAlLipzIChyZXQ9JWQpIixjbnQsYnVmLHN0YXQpOwotCX0KLQlyZXR1cm4gc3RhdDsKLX0KLQotaW50IHB2cjJfaTJjX2NvcmVfY21kKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKQotewotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLCAqbmNwOwotCWludCBzdGF0ID0gLUVJTlZBTDsKLQotCWlmICghaGR3KSByZXR1cm4gc3RhdDsKLQotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwLCBuY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCWlmICghY3AtPnJlY3ZfZW5hYmxlKSBjb250aW51ZTsKLQkJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQlzdGF0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjcCxjbWQsYXJnKTsKLQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCXJldHVybiBzdGF0OwotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlcl9jaGVjayhzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciAqaHAgPSBjcC0+aGFuZGxlcjsKLQlpZiAoIWhwKSByZXR1cm4gMDsKLQlpZiAoIWhwLT5mdW5jX3RhYmxlLT5jaGVjaykgcmV0dXJuIDA7Ci0JcmV0dXJuIGhwLT5mdW5jX3RhYmxlLT5jaGVjayhocC0+ZnVuY19kYXRhKSAhPSAwOwotfQotCi0jZGVmaW5lIEJVRlNJWkUgNTAwCi0KLQotdm9pZCBwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnZ0cCA9ICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvOwotCQltZW1zZXQodnRwLDAsc2l6ZW9mKCp2dHApKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWlmICghY3AtPmRldGVjdGVkX2ZsYWcpIGNvbnRpbnVlOwotCQkJaWYgKCFjcC0+c3RhdHVzX3BvbGwpIGNvbnRpbnVlOwotCQkJY3AtPnN0YXR1c19wb2xsKGNwKTsKLQkJfQotCQloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9IDA7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHN0YXR1cyBwb2xsIgotCQkJICAgIiB0eXBlPSV1IHN0cmVuZ3RoPSV1IGF1ZGlvPTB4JXggY2FwPTB4JXgiCi0JCQkgICAiIGxvdz0ldSBoaT0ldSIsCi0JCQkgICB2dHAtPnR5cGUsCi0JCQkgICB2dHAtPnNpZ25hbCx2dHAtPnJ4c3ViY2hhbnMsdnRwLT5jYXBhYmlsaXR5LAotCQkJICAgdnRwLT5yYW5nZWxvdyx2dHAtPnJhbmdlaGlnaCk7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLX0KLQotCi0vKiBJc3N1ZSB2YXJpb3VzIEkyQyBvcGVyYXRpb25zIHRvIGJyaW5nIGNoaXAtbGV2ZWwgZHJpdmVycyBpbnRvIHN5bmMgd2l0aAotICAgc3RhdGUgc3RvcmVkIGluIHRoaXMgZHJpdmVyLiAqLwotdm9pZCBwdnIyX2kyY19jb3JlX3N5bmMoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwgKm5jcDsKLQotCWlmICghaGR3LT5pMmNfbGlua2VkKSByZXR1cm47Ci0JaWYgKCEoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQUxMKSkgewotCQlyZXR1cm47Ci0JfQotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IGNvcmVfc3luYyBCRUdJTiIpOwotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfREVURUNUKSB7Ci0JCQkvKiBPbmUgb3IgbW9yZSBJMkMgY2xpZW50cyBoYXZlIGF0dGFjaGVkIHNpbmNlIHdlCi0JCQkgICBsYXN0IHN5bmNlZC4gIFNvIHNjYW4gdGhlIGxpc3QgYW5kIGlkZW50aWZ5IHRoZQotCQkJICAgbmV3IGNsaWVudHMuICovCi0JCQljaGFyICpidWY7Ci0JCQl1bnNpZ25lZCBpbnQgY250OwotCQkJdW5zaWduZWQgbG9uZyBhbWFzayA9IDA7Ci0JCQlidWYgPSBrbWFsbG9jKEJVRlNJWkUsR0ZQX0tFUk5FTCk7Ci0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogUEVORF9ERVRFQ1QiKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfREVURUNUOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCQlpZiAoIWNwLT5kZXRlY3RlZF9mbGFnKSB7Ci0JCQkJCWNwLT5jdGxfbWFzayA9IDA7Ci0JCQkJCXB2cjJfaTJjX3Byb2JlKGhkdyxjcCk7Ci0JCQkJCWNwLT5kZXRlY3RlZF9mbGFnID0gITA7Ci0JCQkJCW1zayA9IGNwLT5jdGxfbWFzazsKLQkJCQkJY250ID0gMDsKLQkJCQkJaWYgKGJ1ZikgewotCQkJCQkJY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKAotCQkJCQkJCWNwLAotCQkJCQkJCVBWUjJfSTJDX0RFVEFJTF9BTEwsCi0JCQkJCQkJYnVmLEJVRlNJWkUpOwotCQkJCQl9Ci0JCQkJCXRyYWNlX2kyYygiUHJvYmVkOiAlLipzIixjbnQsYnVmKTsKLQkJCQkJaWYgKGhhbmRsZXJfY2hlY2soY3ApKSB7Ci0JCQkJCQloZHctPmkyY19wZW5kX3R5cGVzIHw9Ci0JCQkJCQkJUFZSMl9JMkNfUEVORF9DTElFTlQ7Ci0JCQkJCX0KLQkJCQkJY3AtPnBlbmRfbWFzayA9IG1zazsKLQkJCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IG1zazsKLQkJCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PQotCQkJCQkJUFZSMl9JMkNfUEVORF9SRUZSRVNIOwotCQkJCX0KLQkJCQlhbWFzayB8PSBjcC0+Y3RsX21hc2s7Ci0JCQl9Ci0JCQloZHctPmkyY19hY3RpdmVfbWFzayA9IGFtYXNrOwotCQkJaWYgKGJ1Zikga2ZyZWUoYnVmKTsKLQkJfQotCQlpZiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfU1RBTEUpIHsKLQkJCS8qIE5lZWQgdG8gZG8gb25lIG9yIG1vcmUgZ2xvYmFsIHVwZGF0ZXMuICBBcnJhbmdlCi0JCQkgICBmb3IgdGhpcyB0byBoYXBwZW4uICovCi0JCQl1bnNpZ25lZCBsb25nIG0yOwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLAotCQkJCSAgICJpMmM6IFBFTkRfU1RBTEUgKDB4JWx4KSIsCi0JCQkJICAgaGR3LT5pMmNfc3RhbGVfbWFzayk7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX1NUQUxFOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCQltMiA9IGhkdy0+aTJjX3N0YWxlX21hc2s7Ci0JCQkJbTIgJj0gY3AtPmN0bF9tYXNrOwotCQkJCW0yICY9IH5jcC0+cGVuZF9tYXNrOwotCQkJCWlmIChtMikgewotCQkJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCQkJCQkgICAiaTJjOiBjcD0lcCBzZXR0aW5nIDB4JWx4IiwKLQkJCQkJCSAgIGNwLG0yKTsKLQkJCQkJY3AtPnBlbmRfbWFzayB8PSBtMjsKLQkJCQl9Ci0JCQl9Ci0JCQloZHctPmkyY19wZW5kX21hc2sgfD0gaGR3LT5pMmNfc3RhbGVfbWFzazsKLQkJCWhkdy0+aTJjX3N0YWxlX21hc2sgPSAwOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBQVlIyX0kyQ19QRU5EX1JFRlJFU0g7Ci0JCX0KLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0NMSUVOVCkgewotCQkJLyogT25lIG9yIG1vcmUgY2xpZW50IGhhbmRsZXJzIGFyZSBhc2tpbmcgZm9yIGFuCi0JCQkgICB1cGRhdGUuICBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBjbGllbnRzCi0JCQkgICBhbmQgdXBkYXRlIGVhY2ggb25lLiAqLwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IFBFTkRfQ0xJRU5UIik7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX0NMSUVOVDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcCwgbmNwLCAmaGR3LT5pMmNfY2xpZW50cywKLQkJCQkJCSBsaXN0KSB7Ci0JCQkJaWYgKCFjcC0+aGFuZGxlcikgY29udGludWU7Ci0JCQkJaWYgKCFjcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+dXBkYXRlKSBjb250aW51ZTsKLQkJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCQkJCSAgICJpMmM6IGNwPSVwIHVwZGF0ZSIsY3ApOwotCQkJCW11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJCQljcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+dXBkYXRlKAotCQkJCQljcC0+aGFuZGxlci0+ZnVuY19kYXRhKTsKLQkJCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJCS8qIElmIGNsaWVudCdzIHVwZGF0ZSBmdW5jdGlvbiBzZXQgc29tZQotCQkJCSAgIGFkZGl0aW9uYWwgcGVuZGluZyBiaXRzLCBhY2NvdW50IGZvciB0aGF0Ci0JCQkJICAgaGVyZS4gKi8KLQkJCQlpZiAoY3AtPnBlbmRfbWFzayAmIH5oZHctPmkyY19wZW5kX21hc2spIHsKLQkJCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IGNwLT5wZW5kX21hc2s7Ci0JCQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0KLQkJCQkJCVBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX1JFRlJFU0gpIHsKLQkJCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqb3BmOwotCQkJdW5zaWduZWQgbG9uZyBwbTsKLQkJCS8qIFNvbWUgYWN0dWFsIHVwZGF0ZXMgYXJlIHBlbmRpbmcuICBXYWxrIHRocm91Z2gKLQkJCSAgIGVhY2ggdXBkYXRlIHR5cGUgYW5kIHBlcmZvcm0gaXQuICovCi0JCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogUEVORF9SRUZSRVNIIgotCQkJCSAgICIgKDB4JWx4KSIsaGR3LT5pMmNfcGVuZF9tYXNrKTsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgJj0gflBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJCXBtID0gaGR3LT5pMmNfcGVuZF9tYXNrOwotCQkJaGR3LT5pMmNfcGVuZF9tYXNrID0gMDsKLQkJCWZvciAoaWR4ID0gMCwgbXNrID0gMTsgcG07IGlkeCsrLCBtc2sgPDw9IDEpIHsKLQkJCQlpZiAoIShwbSAmIG1zaykpIGNvbnRpbnVlOwotCQkJCXBtICY9IH5tc2s7Ci0JCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsCi0JCQkJCQkgICAgbGlzdCkgewotCQkJCQlpZiAoY3AtPnBlbmRfbWFzayAmIG1zaykgewotCQkJCQkJY3AtPnBlbmRfbWFzayAmPSB+bXNrOwotCQkJCQkJY3AtPnJlY3ZfZW5hYmxlID0gITA7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQljcC0+cmVjdl9lbmFibGUgPSAwOwotCQkJCQl9Ci0JCQkJfQotCQkJCW9wZiA9IHB2cjJfaTJjX2dldF9vcChpZHgpOwotCQkJCWlmICghb3BmKSBjb250aW51ZTsKLQkJCQltdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCQkJb3BmLT51cGRhdGUoaGR3KTsKLQkJCQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJfQotCQl9Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBjb3JlX3N5bmMgRU5EIik7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLX0KLQotaW50IHB2cjJfaTJjX2NvcmVfY2hlY2tfc3RhbGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2ssc20scG07Ci0JdW5zaWduZWQgaW50IGlkeDsKLQljb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKm9wZjsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQl1bnNpZ25lZCBpbnQgcHQgPSAwOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlIEJFR0lOIik7Ci0KLQlwbSA9IGhkdy0+aTJjX2FjdGl2ZV9tYXNrOwotCXNtID0gMDsKLQlmb3IgKGlkeCA9IDAsIG1zayA9IDE7IHBtOyBpZHgrKywgbXNrIDw8PSAxKSB7Ci0JCWlmICghKG1zayAmIHBtKSkgY29udGludWU7Ci0JCXBtICY9IH5tc2s7Ci0JCW9wZiA9IHB2cjJfaTJjX2dldF9vcChpZHgpOwotCQlpZiAoIW9wZikgY29udGludWU7Ci0JCWlmIChvcGYtPmNoZWNrKGhkdykpIHsKLQkJCXNtIHw9IG1zazsKLQkJfQotCX0KLQlpZiAoc20pIHB0IHw9IFBWUjJfSTJDX1BFTkRfU1RBTEU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkKLQkJaWYgKGhhbmRsZXJfY2hlY2soY3ApKQotCQkJcHQgfD0gUFZSMl9JMkNfUEVORF9DTElFTlQ7Ci0KLQlpZiAocHQpIHsKLQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBwdDsKLQkJCWhkdy0+aTJjX3N0YWxlX21hc2sgfD0gc207Ci0JCQloZHctPmkyY19wZW5kX21hc2sgfD0gaGR3LT5pMmNfc3RhbGVfbWFzazsKLQkJfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQl9Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsCi0JCSAgICJpMmM6IHR5cGVzPTB4JXggc3RhbGU9MHglbHggcGVuZD0weCVseCIsCi0JCSAgIGhkdy0+aTJjX3BlbmRfdHlwZXMsCi0JCSAgIGhkdy0+aTJjX3N0YWxlX21hc2ssCi0JCSAgIGhkdy0+aTJjX3BlbmRfbWFzayk7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlIEVORCIpOwotCi0JcmV0dXJuIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9BTEwpICE9IDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLAotCQkJCQkgICAgIHVuc2lnbmVkIGludCBkZXRhaWwsCi0JCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pCi17Ci0JdW5zaWduZWQgaW50IGNjbnQsYmNudDsKLQlpbnQgc3BjZmwgPSAwOwotCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqb3BmOwotCi0JY2NudCA9IDA7Ci0JaWYgKGRldGFpbCAmIFBWUjJfSTJDX0RFVEFJTF9ERUJVRykgewotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sCi0JCQkJICJjdHh0PSVwIGN0bF9tYXNrPTB4JWx4IiwKLQkJCQkgY3AsY3AtPmN0bF9tYXNrKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCXNwY2ZsID0gITA7Ci0JfQotCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwKLQkJCSAiJXMlcyBAIDB4JXgiLAotCQkJIChzcGNmbCA/ICIgIiA6ICIiKSwKLQkJCSBjcC0+Y2xpZW50LT5uYW1lLAotCQkJIGNwLT5jbGllbnQtPmFkZHIpOwotCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCWlmICgoZGV0YWlsICYgUFZSMl9JMkNfREVUQUlMX0hBTkRMRVIpICYmCi0JICAgIGNwLT5oYW5kbGVyICYmIGNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXNjcmliZSkgewotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiAoIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQliY250ID0gY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRlc2NyaWJlKAotCQkJY3AtPmhhbmRsZXItPmZ1bmNfZGF0YSxidWYsbWF4bGVuKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiKSIpOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQl9Ci0JaWYgKChkZXRhaWwgJiBQVlIyX0kyQ19ERVRBSUxfQ1RMTUFTSykgJiYgY3AtPmN0bF9tYXNrKSB7Ci0JCXVuc2lnbmVkIGludCBpZHg7Ci0JCXVuc2lnbmVkIGxvbmcgbXNrLHNtOwotCi0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiIFsiKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCXNtID0gMDsKLQkJc3BjZmwgPSAwOwotCQlmb3IgKGlkeCA9IDAsIG1zayA9IDE7IG1zazsgaWR4KyssIG1zayA8PD0gMSkgewotCQkJaWYgKCEoY3AtPmN0bF9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCQlvcGYgPSBwdnIyX2kyY19nZXRfb3AoaWR4KTsKLQkJCWlmIChvcGYpIHsKLQkJCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiVzJXMiLAotCQkJCQkJIHNwY2ZsID8gIiAiIDogIiIsCi0JCQkJCQkgb3BmLT5uYW1lKTsKLQkJCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJCQlzcGNmbCA9ICEwOwotCQkJfSBlbHNlIHsKLQkJCQlzbSB8PSBtc2s7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNtKSB7Ci0JCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiVzJWx4IiwKLQkJCQkJIGlkeCAhPSAwID8gIiAiIDogIiIsc20pOwotCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCX0KLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCJdIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCX0KLQlyZXR1cm4gY2NudDsKLX0KLQotdW5zaWduZWQgaW50IHB2cjJfaTJjX3JlcG9ydChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKLQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4pCi17Ci0JdW5zaWduZWQgaW50IGNjbnQsYmNudDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQljY250ID0gMDsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQliY250ID0gcHZyMl9pMmNfY2xpZW50X2Rlc2NyaWJlKAotCQkJCWNwLAotCQkJCShQVlIyX0kyQ19ERVRBSUxfSEFORExFUnwKLQkJCQkgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spLAotCQkJCWJ1ZixtYXhsZW4pOwotCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIlxuIik7Ci0JCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJfQotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JcmV0dXJuIGNjbnQ7Ci19Ci0KIHN0YXRpYyBpbnQgcHZyMl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKShjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YSk7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7Ci0JaW50IGZsID0gIShoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9BTEwpOwotCWNwID0ga3phbGxvYyhzaXplb2YoKmNwKSxHRlBfS0VSTkVMKTsKLQl0cmFjZV9pMmMoImkyY19hdHRhY2ggW2NsaWVudD0lcyBAIDB4JXggY3R4dD0lcF0iLAotCQkgIGNsaWVudC0+bmFtZSwKLQkJICBjbGllbnQtPmFkZHIsY3ApOwotCWlmICghY3ApIHJldHVybiAtRU5PTUVNOwotCWNwLT5oZHcgPSBoZHc7Ci0JSU5JVF9MSVNUX0hFQUQoJmNwLT5saXN0KTsKLQljcC0+Y2xpZW50ID0gY2xpZW50OwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci0JCWxpc3RfYWRkX3RhaWwoJmNwLT5saXN0LCZoZHctPmkyY19jbGllbnRzKTsKLQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PSBQVlIyX0kyQ19QRU5EX0RFVEVDVDsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCWlmIChmbCkgcXVldWVfd29yayhoZHctPndvcmtxdWV1ZSwmaGR3LT53b3JraTJjc3luYyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHZyMl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gKHN0cnVjdCBwdnIyX2hkdyAqKShjbGllbnQtPmFkYXB0ZXItPmFsZ29fZGF0YSk7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsICpuY3A7Ci0JdW5zaWduZWQgbG9uZyBhbWFzayA9IDA7Ci0JaW50IGZvdW5kZmwgPSAwOwotCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcCwgbmNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJaWYgKGNwLT5jbGllbnQgPT0gY2xpZW50KSB7Ci0JCQkJdHJhY2VfaTJjKCJwdnIyX2kyY19kZXRhY2giCi0JCQkJCSAgIiBbY2xpZW50PSVzIEAgMHgleCBjdHh0PSVwXSIsCi0JCQkJCSAgY2xpZW50LT5uYW1lLAotCQkJCQkgIGNsaWVudC0+YWRkcixjcCk7Ci0JCQkJaWYgKGNwLT5oYW5kbGVyICYmCi0JCQkJICAgIGNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXRhY2gpIHsKLQkJCQkJY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPmRldGFjaCgKLQkJCQkJCWNwLT5oYW5kbGVyLT5mdW5jX2RhdGEpOwotCQkJCX0KLQkJCQlsaXN0X2RlbCgmY3AtPmxpc3QpOwotCQkJCWtmcmVlKGNwKTsKLQkJCQlmb3VuZGZsID0gITA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhbWFzayB8PSBjcC0+Y3RsX21hc2s7Ci0JCX0KLQkJaGR3LT5pMmNfYWN0aXZlX21hc2sgPSBhbWFzazsKLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCWlmICghZm91bmRmbCkgewotCQl0cmFjZV9pMmMoInB2cjJfaTJjX2RldGFjaCBbY2xpZW50PSVzIEAgMHgleCBjdHh0PTx1bmtub3duPl0iLAotCQkJICBjbGllbnQtPm5hbWUsCi0JCQkgIGNsaWVudC0+YWRkcik7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC05NDIsNyArNTM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBwdnIyX2kyY19hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzCSAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKKwkuY2xhc3MJICAgICAgID0gMCwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LAogCS5jbGllbnRfcmVnaXN0ZXIgPSBwdnIyX2kyY19hdHRhY2hfaW5mb3JtLAogCS5jbGllbnRfdW5yZWdpc3RlciA9IHB2cjJfaTJjX2RldGFjaF9pbmZvcm0sCkBAIC0xMDA5LDEyICs2MDQsOCBAQAogCWhkdy0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZoZHctPnVzYl9kZXYtPmRldjsKIAloZHctPmkyY19hZGFwLmFsZ28gPSAmaGR3LT5pMmNfYWxnbzsKIAloZHctPmkyY19hZGFwLmFsZ29fZGF0YSA9IGhkdzsKLQloZHctPmkyY19wZW5kX21hc2sgPSAwOwotCWhkdy0+aTJjX3N0YWxlX21hc2sgPSAwOwotCWhkdy0+aTJjX2FjdGl2ZV9tYXNrID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmaGR3LT5pMmNfY2xpZW50cyk7Ci0JbXV0ZXhfaW5pdCgmaGR3LT5pMmNfbGlzdF9sb2NrKTsKIAloZHctPmkyY19saW5rZWQgPSAhMDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZoZHctPmkyY19hZGFwLCAmaGR3LT52NGwyX2Rldik7CiAJaTJjX2FkZF9hZGFwdGVyKCZoZHctPmkyY19hZGFwKTsKIAlpZiAoaGR3LT5pMmNfZnVuY1sweDE4XSA9PSBpMmNfMjR4eHhfaXIpIHsKIAkJLyogUHJvYmUgZm9yIGEgZGlmZmVyZW50IHR5cGUgb2YgSVIgcmVjZWl2ZXIgb24gdGhpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKaW5kZXggNmVmN2ExYy4uNmE3NTc2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaApAQCAtMjAsNjggKzIwLDEzIEBACiAjaWZuZGVmIF9fUFZSVVNCMl9JMkNfQ09SRV9ICiAjZGVmaW5lIF9fUFZSVVNCMl9JMkNfQ09SRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KIHN0cnVjdCBwdnIyX2hkdzsKLXN0cnVjdCBwdnIyX2kyY19jbGllbnQ7Ci1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcjsKLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9uczsKLXN0cnVjdCBwdnIyX2kyY19vcDsKLXN0cnVjdCBwdnIyX2kyY19vcF9mdW5jdGlvbnM7Ci0KLXN0cnVjdCBwdnIyX2kyY19jbGllbnQgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCWludCBkZXRlY3RlZF9mbGFnOwotCWludCByZWN2X2VuYWJsZTsKLQl1bnNpZ25lZCBsb25nIHBlbmRfbWFzazsKLQl1bnNpZ25lZCBsb25nIGN0bF9tYXNrOwotCXZvaWQgKCpzdGF0dXNfcG9sbCkoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIHsKLQl2b2lkICpmdW5jX2RhdGE7Ci0JY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zICpmdW5jX3RhYmxlOwotfTsKLQotc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIHsKLQl2b2lkICgqZGV0YWNoKSh2b2lkICopOwotCWludCAoKmNoZWNrKSh2b2lkICopOwotCXZvaWQgKCp1cGRhdGUpKHZvaWQgKik7Ci0JdW5zaWduZWQgaW50ICgqZGVzY3JpYmUpKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19vcCB7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX2hkdyAqKTsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci0JY29uc3QgY2hhciAqbmFtZTsKLX07CiAKIHZvaWQgcHZyMl9pMmNfY29yZV9pbml0KHN0cnVjdCBwdnIyX2hkdyAqKTsKIHZvaWQgcHZyMl9pMmNfY29yZV9kb25lKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAotaW50IHB2cjJfaTJjX2NsaWVudF9jbWQoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqLHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKTsKLWludCBwdnIyX2kyY19jb3JlX2NtZChzdHJ1Y3QgcHZyMl9oZHcgKix1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CiAKLWludCBwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKHN0cnVjdCBwdnIyX2hkdyAqKTsKLXZvaWQgcHZyMl9pMmNfY29yZV9zeW5jKHN0cnVjdCBwdnIyX2hkdyAqKTsKLXZvaWQgcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKik7Ci11bnNpZ25lZCBpbnQgcHZyMl9pMmNfcmVwb3J0KHN0cnVjdCBwdnIyX2hkdyAqLGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKTsKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0RFQlVHICAgMHgwMDAxCi0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIDB4MDAwMgotI2RlZmluZSBQVlIyX0kyQ19ERVRBSUxfQ1RMTUFTSyAweDAwMDQKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0FMTCAoXAotCVBWUjJfSTJDX0RFVEFJTF9ERUJVRyB8XAotCVBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSIHxcCi0JUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spCi0KLXZvaWQgcHZyMl9pMmNfcHJvYmUoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCAqcHZyMl9pMmNfZ2V0X29wKHVuc2lnbmVkIGludCBpZHgpOwotCi0jZW5kaWYgLyogX19QVlJVU0IyX0kyQ19DT1JFX0ggKi8KKyNlbmRpZiAvKiBfX1BWUlVTQjJfSTJDX0FEQVBURVJfSCAqLwogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKaW5kZXggOWIzYzg3NC4uODY4OWRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYwpAQCAtMTM3LDEwICsxMzcsMTAgQEAKIAlyZXQgPSB1c2JfcmVnaXN0ZXIoJnB2cl9kcml2ZXIpOwogCiAJaWYgKHJldCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCisJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6ICIgRFJJVkVSX1ZFUlNJT04gIjoiCiAJCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKIAlpZiAocHZydXNiMl9kZWJ1ZykKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiBEZWJ1ZyBtYXNrIGlzICVkICgweCV4KVxuIiwKKwkJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogRGVidWcgbWFzayBpcyAlZCAoMHgleClcbiIsCiAJCSAgICAgICBwdnJ1c2IyX2RlYnVnLHB2cnVzYjJfZGVidWcpOwogCiAJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsInB2cl9pbml0IGNvbXBsZXRlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYwppbmRleCBlNjQxY2Q5Li5lMjBiYTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKQEAgLTYyNywxNiArNjI3LDggQEAKIAlwdnIyX3N5c2ZzX3RyYWNlKCJDcmVhdGluZyBjbGFzc19kZXYgaWQ9JXAiLGNsYXNzX2Rldik7CiAKIAljbGFzc19kZXYtPmNsYXNzID0gJmNsYXNzX3B0ci0+Y2xhc3M7Ci0JaWYgKHB2cjJfaGR3X2dldF9zbihzZnAtPmNoYW5uZWwuaGR3KSkgewotCQlkZXZfc2V0X25hbWUoY2xhc3NfZGV2LCAic24tJWx1IiwKLQkJCSBwdnIyX2hkd19nZXRfc24oc2ZwLT5jaGFubmVsLmhkdykpOwotCX0gZWxzZSBpZiAocHZyMl9oZHdfZ2V0X3VuaXRfbnVtYmVyKHNmcC0+Y2hhbm5lbC5oZHcpID49IDApIHsKLQkJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgInVuaXQtJWMiLAotCQkJIHB2cjJfaGR3X2dldF91bml0X251bWJlcihzZnAtPmNoYW5uZWwuaGR3KSArICdhJyk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUoY2xhc3NfZGV2KTsKLQkJcmV0dXJuOwotCX0KKwlkZXZfc2V0X25hbWUoY2xhc3NfZGV2LCAiJXMiLAorCQkgICAgIHB2cjJfaGR3X2dldF9kZXZpY2VfaWRlbnRpZmllcihzZnAtPmNoYW5uZWwuaGR3KSk7CiAKIAljbGFzc19kZXYtPnBhcmVudCA9ICZ1c2JfZGV2LT5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzc3NWQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJwdnJ1c2IyLmgiCi0jaW5jbHVkZSAicHZydXNiMi11dGlsLmgiCi0jaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgotI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLQotc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGkyY19oYW5kbGVyOwotCWludCB0eXBlX3VwZGF0ZV9mbDsKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X3R5cGUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlzdHJ1Y3QgdHVuZXJfc2V0dXAgc2V0dXA7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdHVuZXIgc2V0X3R5cGUoJWQpIixoZHctPnR1bmVyX3R5cGUpOwotCWlmICgoKGludCkoaGR3LT50dW5lcl90eXBlKSkgPCAwKSByZXR1cm47Ci0KLQlzZXR1cC5hZGRyID0gQUREUl9VTlNFVDsKLQlzZXR1cC50eXBlID0gaGR3LT50dW5lcl90eXBlOwotCXNldHVwLm1vZGVfbWFzayA9IFRfUkFESU8gfCBUX0FOQUxPR19UVjsKLQkvKiBXZSBtYXkgcmVhbGx5IHdhbnQgbW9kZV9tYXNrIHRvIGJlIFRfQU5BTE9HX1RWIGZvciBub3cgKi8KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxUVU5FUl9TRVRfVFlQRV9BRERSLCZzZXR1cCk7Ci0JY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAwOwotfQotCi0KLXN0YXRpYyBpbnQgdHVuZXJfY2hlY2soc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlpZiAoaGR3LT50dW5lcl91cGRhdGVkKSBjdHh0LT50eXBlX3VwZGF0ZV9mbCA9ICEwOwotCXJldHVybiBjdHh0LT50eXBlX3VwZGF0ZV9mbCAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHR1bmVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0KQotewotCWlmIChjdHh0LT50eXBlX3VwZGF0ZV9mbCkgc2V0X3R5cGUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHZyMl90dW5lcl9kZXRhY2goc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMl90dW5lcl9kZXNjcmliZShzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0LGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi10dW5lciIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgdHVuZXJfZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKXB2cjJfdHVuZXJfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpdHVuZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKXR1bmVyX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpcHZyMl90dW5lcl9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX3R1bmVyX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQ7Ci0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY190YWJsZSA9ICZ0dW5lcl9mdW5jczsKLQljdHh0LT50eXBlX3VwZGF0ZV9mbCA9ICEwOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5pMmNfaGFuZGxlcjsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IHR1bmVyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKaW5kZXggODc4ZmQ1Mi4uOWUwZjJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtOTEsNyArOTEsNyBAQAogCS5jYXJkICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgcHZyLXVzYjIiLAogCS5idXNfaW5mbyAgICAgICA9ICJ1c2IiLAogCS52ZXJzaW9uICAgICAgICA9IEtFUk5FTF9WRVJTSU9OKDAsOCwwKSwKLQkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwKKwkuY2FwYWJpbGl0aWVzICAgPSAoVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkgICBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX0FVRElPIHwgVjRMMl9DQVBfUkFESU8gfAogCQkJICAgVjRMMl9DQVBfUkVBRFdSSVRFKSwKIAkucmVzZXJ2ZWQgICAgICAgPSB7MCwwLDAsMH0KQEAgLTk1MiwxMCArOTUyLDYgQEAKIAkJCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCi0vKiBUZW1wb3JhcnkgaGFjayA6IHVzZSBpdnR2IGFwaSB1bnRpbCBhIHY0bDIgb25lIGlzIGF2YWlsYWJsZS4gKi8KLSNkZWZpbmUgSVZUVl9JT0NfR19DT0RFQyAgICAgICAgMHhGRkVFNzcwMwotI2RlZmluZSBJVlRWX0lPQ19TX0NPREVDICAgICAgICAweEZGRUU3NzA0Ci0JaWYgKGNtZCA9PSBJVlRWX0lPQ19HX0NPREVDIHx8IGNtZCA9PSBJVlRWX0lPQ19TX0NPREVDKSByZXR1cm4gMDsKIAlyZXR1cm4gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHB2cjJfdjRsMl9kb19pb2N0bCk7CiB9CiAKQEAgLTEyNjgsOCArMTI2NCw5IEBACiAJCWRpcC0+bWlub3JfdHlwZSA9IHB2cjJfdjRsX3R5cGVfdmlkZW87CiAJCW5yX3B0ciA9IHZpZGVvX25yOwogCQlpZiAoIWRpcC0+c3RyZWFtKSB7Ci0JCQllcnIoIkZhaWxlZCB0byBzZXQgdXAgcHZydXNiMiB2NGwgdmlkZW8gZGV2IgotCQkJICAgICIgZHVlIHRvIG1pc3Npbmcgc3RyZWFtIGluc3RhbmNlIik7CisJCQlwcl9lcnIoS0JVSUxEX01PRE5BTUUKKwkJCQkiOiBGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIHZpZGVvIGRldiIKKwkJCQkiIGR1ZSB0byBtaXNzaW5nIHN0cmVhbSBpbnN0YW5jZVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjg2LDggKzEyODMsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBCYWlsIG91dCAodGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSkgKi8KLQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIGRldiIKLQkJICAgICIgZHVlIHRvIHVucmVjb2duaXplZCBjb25maWciKTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FICI6IEZhaWxlZCB0byBzZXQgdXAgcHZydXNiMiB2NGwgZGV2IgorCQkgICAgIiBkdWUgdG8gdW5yZWNvZ25pemVkIGNvbmZpZ1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzMDMsNyArMTMwMCw4IEBACiAJCQkJICAgZGlwLT52NGxfdHlwZSwgbWluZGV2bnVtKSA8IDApICYmCiAJICAgICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRpcC0+ZGV2YmFzZSwKIAkJCQkgICBkaXAtPnY0bF90eXBlLCAtMSkgPCAwKSkgewotCQllcnIoIkZhaWxlZCB0byByZWdpc3RlciBwdnJ1c2IyIHY0bCBkZXZpY2UiKTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkiOiBGYWlsZWQgdG8gcmVnaXN0ZXIgcHZydXNiMiB2NGwgZGV2aWNlXG4iKTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiByZWdpc3RlcmVkIGRldmljZSAlcyV1IFslc11cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCmluZGV4IDQwNTk2NDguLmIzODYyZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCkBAIC0yOCw3ICsyOCw3IEBACiAqLwogCiAjaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgorCiAKIAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCkBAIC0zOSwxNSArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi1zdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciB7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaGFuZGxlcjsKLQlzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgY3RybDsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCiBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgewogCWNvbnN0IGludCAqZGVmOwogCXVuc2lnbmVkIGludCBjbnQ7CkBAIC02MywxOTAgKzU0LDUxIEBACiAJW1BWUjJfQ1ZBTF9JTlBVVF9TVklERU9dID0gIFNBQTcxMTVfU1ZJREVPMiwKIH07CiAKK3N0YXRpYyBjb25zdCBpbnQgcm91dGluZ19zY2hlbWUxW10gPSB7CisJW1BWUjJfQ1ZBTF9JTlBVVF9UVl0gPSBTQUE3MTE1X0NPTVBPU0lURTQsCisJW1BWUjJfQ1ZBTF9JTlBVVF9SQURJT10gPSBTQUE3MTE1X0NPTVBPU0lURTUsCisJW1BWUjJfQ1ZBTF9JTlBVVF9DT01QT1NJVEVdID0gU0FBNzExNV9DT01QT1NJVEUzLAorCVtQVlIyX0NWQUxfSU5QVVRfU1ZJREVPXSA9ICBTQUE3MTE1X1NWSURFTzIsIC8qIG9yIFNWSURFTzAsIGl0IHNlZW1zICovCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lIHJvdXRpbmdfc2NoZW1lc1tdID0gewogCVtQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRV0gPSB7CiAJCS5kZWYgPSByb3V0aW5nX3NjaGVtZTAsCiAJCS5jbnQgPSBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lMCksCiAJfSwKKwlbUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUl0gPSB7CisJCS5kZWYgPSByb3V0aW5nX3NjaGVtZTEsCisJCS5jbnQgPSBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lMSksCisJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHNldF9pbnB1dChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKK3ZvaWQgcHZyMl9zYWE3MTE1X3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOwotCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9pbnB1dCglZCkiLGhkdy0+aW5wdXRfdmFsKTsKLQotCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgotCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgotCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKLQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKLQl9IGVsc2UgewotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICIqKiogV0FSTklORyAqKiogaTJjIHY0bDIgc2V0X2lucHV0OiIKLQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIGFuZC9vciBpbnB1dCAoJWQpIiwKLQkJCSAgIHNpZCxoZHctPmlucHV0X3ZhbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlyb3V0ZS5vdXRwdXQgPSAwOwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19pbnB1dChzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eSAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHNldF9hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1MzIgdmFsOwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfYXVkaW8gJWQiLAotCQkgICBoZHctPnNyYXRlX3ZhbCk7Ci0Jc3dpdGNoIChoZHctPnNyYXRlX3ZhbCkgewotCWRlZmF1bHQ6Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDoKLQkJdmFsID0gNDgwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA6Ci0JCXZhbCA9IDQ0MTAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwOgotCQl2YWwgPSAzMjAwMDsKLQkJYnJlYWs7Ci0JfQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwmdmFsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2F1ZGlvKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXJldHVybiBoZHctPnNyYXRlX2RpcnR5ICE9IDA7Ci19Ci0KLQotc3RydWN0IHB2cjJfdjRsX2RlY29kZXJfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKik7Ci19OwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl92NGxfZGVjb2Rlcl9vcHMgZGVjb2Rlcl9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfaW5wdXQsIC5jaGVjayA9IGNoZWNrX2lucHV0fSwKLQl7IC51cGRhdGUgPSBzZXRfYXVkaW8sIC5jaGVjayA9IGNoZWNrX2F1ZGlvfSwKLX07Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9kZXRhY2goc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihjdHh0LT5oZHcsTlVMTCk7Ci0Ja2ZyZWUoY3R4dCk7Ci19Ci0KLQotc3RhdGljIGludCBkZWNvZGVyX2NoZWNrKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spIGNvbnRpbnVlOwotCQlpZiAoZGVjb2Rlcl9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfaW5wdXQoJWQpIiwKKwkJCSAgIGhkdy0+aW5wdXRfdmFsKTsKKwkJaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCisJCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgeworCQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKKwkJfSBlbHNlIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSAgICIqKiogV0FSTklORyAqKiogc3ViZGV2IHY0bDIgc2V0X2lucHV0OiIKKwkJCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSIKKwkJCQkgICAiIGFuZC9vciBpbnB1dCAoJWQpIiwKKwkJCQkgICBzaWQsIGhkdy0+aW5wdXRfdmFsKTsKKwkJCXJldHVybjsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfdXBkYXRlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCWRlY29kZXJfb3BzW2lkeF0udXBkYXRlKGN0eHQpOworCQlyb3V0ZS5vdXRwdXQgPSAwOworCQlzZC0+b3BzLT52aWRlby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIH0KIAogCi1zdGF0aWMgaW50IGRlY29kZXJfZGV0ZWN0KHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCS8qIEF0dGVtcHQgdG8gcXVlcnkgdGhlIGRlY29kZXIgLSBsZXQncyBzZWUgaWYgaXQgd2lsbCBhbnN3ZXIgKi8KLQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKLQlpbnQgcmV0OwotCi0JbWVtc2V0KCZ2dCwwLHNpemVvZih2dCkpOwotCXJldCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsVklESU9DX0dfVFVORVIsJnZ0KTsKLQlyZXR1cm4gcmV0ID09IDA7IC8qIFJldHVybiB0cnVlIGlmIGl0IGFuc3dlcmVkICovCi19Ci0KLQotc3RhdGljIHZvaWQgZGVjb2Rlcl9lbmFibGUoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQsaW50IGZsKQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgZGVjb2Rlcl9lbmFibGUoJWQpIixmbCk7Ci0JcHZyMl92NGwyX2NtZF9zdHJlYW0oY3R4dC0+Y2xpZW50LGZsKTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlY29kZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLXZpZGVvLXY0bCIpOwotfQotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKWRlY29kZXJfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSlkZWNvZGVyX2Rlc2NyaWJlLAotfTsKLQotCi1pbnQgcHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgICAgICAgc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQ7Ci0KLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHJldHVybiAwOwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0JaWYgKCFkZWNvZGVyX2RldGVjdChjcCkpIHJldHVybiAwOwotCi0JY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHh0KSxHRlBfS0VSTkVMKTsKLQlpZiAoIWN0eHQpIHJldHVybiAwOwotCi0JY3R4dC0+aGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmhhbmRsZXIuZnVuY190YWJsZSA9ICZoZnVuY3M7Ci0JY3R4dC0+Y3RybC5jdHh0ID0gY3R4dDsKLQljdHh0LT5jdHJsLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKWRlY29kZXJfZGV0YWNoOwotCWN0eHQtPmN0cmwuZW5hYmxlID0gKHZvaWQgKCopKHZvaWQgKixpbnQpKWRlY29kZXJfZW5hYmxlOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRShkZWNvZGVyX29wcykpIC0gMTsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihoZHcsJmN0eHQtPmN0cmwpOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmhhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCBzYWE3MTF4IFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQotCi0KIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CiAgICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaAppbmRleCA0ZmY1Yjg5Li4zYjBiZDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaApAQCAtMzIsMTEgKzMyLDggQEAKICovCiAKIAotCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotCi1pbnQgcHZyMl9pMmNfZGVjb2Rlcl92NGxfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLQorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCit2b2lkIHB2cjJfc2FhNzExNV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfVklERU9fVjRMX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwppbmRleCBmNmZjZjBhLi4xNjcwYWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYwpAQCAtMjcsNyArMjcsNiBAQAogKi8KIAogI2luY2x1ZGUgInB2cnVzYjItd204Nzc1LmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKIAogCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKQEAgLTM3LDEyOCArMzYsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX3dtODc3NSB7Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgaGFuZGxlcjsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0JdW5zaWduZWQgbG9uZyBzdGFsZV9tYXNrOwotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfaW5wdXQoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKK3ZvaWQgcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAotCW1lbXNldCgmcm91dGUsMCxzaXplb2Yocm91dGUpKTsKKwkJbWVtc2V0KCZyb3V0ZSwgMCwgc2l6ZW9mKHJvdXRlKSk7CiAKLQlzd2l0Y2goaGR3LT5pbnB1dF92YWwpIHsKLQljYXNlIFBWUjJfQ1ZBTF9JTlBVVF9SQURJTzoKLQkJcm91dGUuaW5wdXQgPSAxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBBbGwgb3RoZXIgY2FzZXMganVzdCB1c2UgdGhlIHNlY29uZCBpbnB1dCAqLwotCQlyb3V0ZS5pbnB1dCA9IDI7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB3bTg3NzUgc2V0X2lucHV0KHZhbD0lZCByb3V0ZT0weCV4KSIsCi0JCSAgIGhkdy0+aW5wdXRfdmFsLHJvdXRlLmlucHV0KTsKLQotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5pbnB1dF9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF93bTg3NzVfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICopOwotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX3dtODc3NV9vcHMgd204Nzc1X29wc1tdID0gewotCXsgLnVwZGF0ZSA9IHNldF9pbnB1dCwgLmNoZWNrID0gY2hlY2tfaW5wdXR9LAotfTsKLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHdtODc3NV9kZXNjcmliZShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0LAotCQkJCSAgICAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLXdtODc3NSIpOwotfQotCi0KLXN0YXRpYyB2b2lkIHdtODc3NV9kZXRhY2goc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgd204Nzc1X2NoZWNrKHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRSh3bTg3NzVfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKHdtODc3NV9vcHNbaWR4XS5jaGVjayhjdHh0KSkgewotCQkJY3R4dC0+c3RhbGVfbWFzayB8PSBtc2s7CisJCXN3aXRjaCAoaGR3LT5pbnB1dF92YWwpIHsKKwkJY2FzZSBQVlIyX0NWQUxfSU5QVVRfUkFESU86CisJCQlyb3V0ZS5pbnB1dCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIEFsbCBvdGhlciBjYXNlcyBqdXN0IHVzZSB0aGUgc2Vjb25kIGlucHV0ICovCisJCQlyb3V0ZS5pbnB1dCA9IDI7CisJCQlicmVhazsKIAkJfQotCX0KLQlyZXR1cm4gY3R4dC0+c3RhbGVfbWFzayAhPSAwOwotfQorCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgd204Nzc1IgorCQkJICAgIiBzZXRfaW5wdXQodmFsPSVkIHJvdXRlPTB4JXgpIiwKKwkJCSAgIGhkdy0+aW5wdXRfdmFsLCByb3V0ZS5pbnB1dCk7CiAKLQotc3RhdGljIHZvaWQgd204Nzc1X3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUod204Nzc1X29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKLQkJd204Nzc1X29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyBoZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKXdtODc3NV9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSl3bTg3NzVfY2hlY2ssCi0JLnVwZGF0ZSA9ICh2b2lkICgqKSh2b2lkICopKXdtODc3NV91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKXdtODc3NV9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX3dtODc3NV9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0OwotCi0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRSh3bTg3NzVfb3BzKSkgLSAxOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmhhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCB3bTg3NzUgVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KIAogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKaW5kZXggODA3MDkwOS4uMDU3N2JjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKQEAgLTM0LDkgKzM0LDkgQEAKIAogCiAKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKIAotaW50IHB2cjJfaTJjX3dtODc3NV9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwordm9pZCBwdnIyX3dtODc3NV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX1dNODc3NV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZwppbmRleCA3Mjk4Y2YyLi44YjlmMGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKQEAgLTM1LDMgKzM1LDEzIEBACiAJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGhhdmUgdGhlIHB3YyBkcml2ZXIgZ2VuZXJhdGUgdmVyYm9zZSBkZWJ1Z2dpbmcKIAkgIG1lc3NhZ2VzLgogCSAgQSBzcGVjaWFsIG1vZHVsZSBvcHRpb25zICd0cmFjZScgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2ZXJib3NpdHkuCisKK2NvbmZpZyBVU0JfUFdDX0lOUFVUX0VWREVWCisJYm9vbCAiVVNCIFBoaWxpcHMgQ2FtZXJhcyBpbnB1dCBldmVudHMgZGV2aWNlIHN1cHBvcnQiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBVU0JfUFdDICYmIElOUFVUCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gbWFrZXMgVVNCIFBoaWxpcHMgY2FtZXJhcyByZWdpc3RlciB0aGUgc25hcHNob3QgYnV0dG9uIGFzCisJICBhbiBpbnB1dCBkZXZpY2UgdG8gcmVwb3J0IGJ1dHRvbiBldmVudHMuCisKKwkgIElmIHlvdSBhcmUgaW4gZG91YnQsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwppbmRleCAwZDgxMDE4Li43YzU0MmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwpAQCAtNTMsNiArNTMsNyBAQAogICAgLSBYYXZpZXIgUm9jaGU6IFF1aWNrQ2FtIFBybyA0MDAwIElECiAgICAtIEplbnMgS251ZHNlbjogUXVpY2tDYW0gWm9vbSBJRAogICAgLSBKLiBEZWJlcnQ6IFF1aWNrQ2FtIGZvciBOb3RlYm9va3MgSUQKKyAgIC0gUGhhbSBUaGFuaCBOYW06IHdlYmNhbSBzbmFwc2hvdCBidXR0b24gYXMgYW4gZXZlbnQgaW5wdXQgZGV2aWNlCiAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTYxLDYgKzYyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTU4Niw2ICs1OTAsMjMgQEAKIAkJCQlwZGV2LT52ZnJhbWVfY291bnQpOwogfQogCitzdGF0aWMgdm9pZCBwd2Nfc25hcHNob3RfYnV0dG9uKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2LCBpbnQgZG93bikKK3sKKwlpZiAoZG93bikgeworCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7CisJCXBkZXYtPnNuYXBzaG90X2J1dHRvbl9zdGF0dXMgPSAxOworCX0gZWxzZSB7CisJCVBXQ19UUkFDRSgiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJfQorCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwlpZiAocGRldi0+YnV0dG9uX2RldikgeworCQlpbnB1dF9yZXBvcnRfa2V5KHBkZXYtPmJ1dHRvbl9kZXYsIEJUTl8wLCBkb3duKTsKKwkJaW5wdXRfc3luYyhwZGV2LT5idXR0b25fZGV2KTsKKwl9CisjZW5kaWYKK30KKwogc3RhdGljIGludCBwd2NfcmN2X3Nob3J0X3BhY2tldChzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgY29uc3Qgc3RydWN0IHB3Y19mcmFtZV9idWYgKmZidWYpCiB7CiAJaW50IGF3YWtlID0gMDsKQEAgLTYwMywxMyArNjI0LDcgQEAKIAkJCXBkZXYtPnZmcmFtZXNfZXJyb3IrKzsKIAkJfQogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewotCQkJaWYgKHB0clswXSAmIDB4MDEpIHsKLQkJCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiByZWxlYXNlZC5cbiIpOwotCQkJfQorCQkJcHdjX3NuYXBzaG90X2J1dHRvbihwZGV2LCBwdHJbMF0gJiAweDAxKTsKIAkJfQogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMikgewogCQkJaWYgKHB0clswXSAmIDB4MDIpCkBAIC02MzMsMTIgKzY0OCw3IEBACiAJZWxzZSBpZiAocGRldi0+dHlwZSA9PSA3NDAgfHwgcGRldi0+dHlwZSA9PSA3MjApIHsKIAkJdW5zaWduZWQgY2hhciAqcHRyID0gKHVuc2lnbmVkIGNoYXIgKilmYnVmLT5kYXRhOwogCQlpZiAoKHB0clswXSBeIHBkZXYtPnZtaXJyb3IpICYgMHgwMSkgewotCQkJaWYgKHB0clswXSAmIDB4MDEpIHsKLQkJCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKLQkJCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiBwcmVzc2VkLlxuIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcmVsZWFzZWQuXG4iKTsKKwkJCXB3Y19zbmFwc2hvdF9idXR0b24ocGRldiwgcHRyWzBdICYgMHgwMSk7CiAJCX0KIAkJcGRldi0+dm1pcnJvciA9IHB0clswXSAmIDB4MDM7CiAJfQpAQCAtMTExNSw2ICsxMTI1LDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZwZGV2LT5tb2Rsb2NrKTsKKwlwd2NfY29uc3RydWN0KHBkZXYpOyAvKiBzZXQgbWluL21heCBzaXplcyBjb3JyZWN0ICovCiAJaWYgKCFwZGV2LT51c2JfaW5pdCkgewogCQlQV0NfREVCVUdfT1BFTigiRG9pbmcgZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbi5cbiIpOwogCQlwZGV2LT51c2JfaW5pdCA9IDE7CkBAIC0xMTM5LDcgKzExNTAsNiBAQAogCWlmIChwd2Nfc2V0X2xlZHMocGRldiwgbGVkX29uLCBsZWRfb2ZmKSA8IDApCiAJCVBXQ19ERUJVR19PUEVOKCJGYWlsZWQgdG8gc2V0IExFRCBvbi9vZmYgdGltZS5cbiIpOwogCi0JcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLwogCiAJLyogU28gZmFyLCBzbyBnb29kLiBBbGxvY2F0ZSBtZW1vcnkuICovCiAJaSA9IHB3Y19hbGxvY2F0ZV9idWZmZXJzKHBkZXYpOwpAQCAtMTIxNiw2ICsxMjI2LDE1IEBACiB7CiAJcHdjX3JlbW92ZV9zeXNmc19maWxlcyhwZGV2LT52ZGV2KTsKIAl2aWRlb191bnJlZ2lzdGVyX2RldmljZShwZGV2LT52ZGV2KTsKKworI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisJaWYgKHBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlrZnJlZShwZGV2LT5idXR0b25fZGV2LT5waHlzKTsKKwkJcGRldi0+YnV0dG9uX2RldiA9IE5VTEw7CisJfQorI2VuZGlmCiB9CiAKIC8qIE5vdGUgdGhhdCBhbGwgY2xlYW51cCBpcyBkb25lIGluIHRoZSByZXZlcnNlIG9yZGVyIGFzIGluIF9vcGVuICovCkBAIC0xNDgzLDYgKzE1MDIsOSBAQAogCWludCBmZWF0dXJlcyA9IDA7CiAJaW50IHZpZGVvX25yID0gLTE7IC8qIGRlZmF1bHQ6IHVzZSBuZXh0IGF2YWlsYWJsZSBkZXZpY2UgKi8KIAljaGFyIHNlcmlhbF9udW1iZXJbMzBdLCAqbmFtZTsKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCWNoYXIgKnBoeXMgPSBOVUxMOworI2VuZGlmCiAKIAl2ZW5kb3JfaWQgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKIAlwcm9kdWN0X2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwpAQCAtMTgwNyw2ICsxODI5LDM1IEBACiAJcHdjX3NldF9sZWRzKHBkZXYsIDAsIDApOwogCXB3Y19jYW1lcmFfcG93ZXIocGRldiwgMCk7CiAKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCS8qIHJlZ2lzdGVyIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gaW5wdXQgZGV2aWNlICovCisJcGRldi0+YnV0dG9uX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghcGRldi0+YnV0dG9uX2RldikgeworCQlQV0NfRVJST1IoIkVyciwgaW5zdWZmaWNpZW50IG1lbW9yeSBmb3Igd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBkZXZpY2UuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBkZXYtPmJ1dHRvbl9kZXYtPm5hbWUgPSAiUFdDIHNuYXBzaG90IGJ1dHRvbiI7CisJcGh5cyA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCJ1c2ItJXMtJXMiLCBwZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBwZGV2LT51ZGV2LT5kZXZwYXRoKTsKKwlpZiAoIXBoeXMpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwZGV2LT5idXR0b25fZGV2LT5waHlzID0gcGh5czsKKwl1c2JfdG9faW5wdXRfaWQocGRldi0+dWRldiwgJnBkZXYtPmJ1dHRvbl9kZXYtPmlkKTsKKwlwZGV2LT5idXR0b25fZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPnVkZXYtPmRldjsKKwlwZGV2LT5idXR0b25fZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJcGRldi0+YnV0dG9uX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl8wKV0gPSBCSVRfTUFTSyhCVE5fMCk7CisKKwlyYyA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKKwlpZiAocmMpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJCWtmcmVlKHBkZXYtPmJ1dHRvbl9kZXYtPnBoeXMpOworCQlwZGV2LT5idXR0b25fZGV2ID0gTlVMTDsKKwkJcmV0dXJuIHJjOworCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiAKIGVycl91bnJlZzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKaW5kZXggMDE0MTFmYi4uMGJlNmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLmgKQEAgLTM3LDYgKzM3LDkgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSAicHdjLXVuY29tcHJlc3MuaCIKICNpbmNsdWRlIDxtZWRpYS9wd2MtaW9jdGwuaD4KQEAgLTI1NSw2ICsyNTgsOSBAQAogICAgaW50IHBhbl9hbmdsZTsJCQkvKiBpbiBkZWdyZWVzICogMTAwICovCiAgICBpbnQgdGlsdF9hbmdsZTsJCQkvKiBhYnNvbHV0ZSBhbmdsZTsgMCwwIGlzIGhvbWUgcG9zaXRpb24gKi8KICAgIGludCBzbmFwc2hvdF9idXR0b25fc3RhdHVzOwkJLyogc2V0IHRvIDEgd2hlbiB0aGUgdXNlciBwdXNoIHRoZSBidXR0b24sIHJlc2V0IHRvIDAgd2hlbiB0aGlzIHZhbHVlIGlzIHJlYWQgKi8KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorICAgc3RydWN0IGlucHV0X2RldiAqYnV0dG9uX2RldjsJLyogd2ViY2FtIHNuYXBzaG90IGJ1dHRvbiBpbnB1dCAqLworI2VuZGlmCiAKICAgIC8qKiogTWlzYy4gZGF0YSAqKiovCiAgICB3YWl0X3F1ZXVlX2hlYWRfdCBmcmFtZXE7CQkvKiBXaGVuIHdhaXRpbmcgZm9yIGEgZnJhbWUgdG8gZmluaXNoLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCmluZGV4IDBjNGNlNTguLmM1MjI2MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jCkBAIC04NzgsNiArODc4LDcgQEAKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfAogCQlTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HOwogCkBAIC0xMTQ5LDQ2ICsxMTUwLDI4IEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKLXN0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBweGFfY2FtZXJhX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHB4YV9jYW1lcmFfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKLQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtX2ZtdCA9IE5VTEw7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZSA9IE5VTEw7CiAJc3RydWN0IHNvY19jYW1lcmFfc2Vuc2Ugc2Vuc2UgPSB7CiAJCS5tYXN0ZXJfY2xvY2sgPSBwY2Rldi0+bWNsaywKIAkJLnBpeGVsX2Nsb2NrX21heCA9IHBjZGV2LT5jaWNsayAvIDQsCiAJfTsKIAlpbnQgcmV0OwogCi0JaWYgKHBpeGZtdCkgewotCQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKLQkJaWYgKCF4bGF0ZSkgewotCQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRm9ybWF0ICV4IG5vdCBmb3VuZFxuIiwgcGl4Zm10KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OwotCX0KLQogCS8qIElmIFBDTEsgaXMgdXNlZCB0byBsYXRjaCBkYXRhIGZyb20gdGhlIHNlbnNvciwgY2hlY2sgc2Vuc2UgKi8KIAlpZiAocGNkZXYtPnBsYXRmb3JtX2ZsYWdzICYgUFhBX0NBTUVSQV9QQ0xLX0VOKQogCQlpY2QtPnNlbnNlID0gJnNlbnNlOwogCi0Jc3dpdGNoIChwaXhmbXQpIHsKLQljYXNlIDA6CQkJCS8qIE9ubHkgZ2VvbWV0cnkgY2hhbmdlICovCi0JCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgcGl4Zm10LCByZWN0KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBjYW1fZm10LT5mb3VyY2MsIHJlY3QpOwotCX0KKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2Nyb3AoaWNkLCByZWN0KTsKIAogCWljZC0+c2Vuc2UgPSBOVUxMOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBmb3IgZm9ybWF0ICV4XG4iLAotCQkJIHBpeGZtdCk7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZhaWxlZCB0byBjcm9wIHRvICV1eCV1QCV1OiV1XG4iLAorCQkJIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CiAJfSBlbHNlIGlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgewogCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKIAkJCWRldl9lcnIoJmljaS0+ZGV2LApAQCAtMTE5OSw3ICsxMTgyLDU1IEBACiAJCXJlY2FsY3VsYXRlX2ZpZm9fdGltZW91dChwY2Rldiwgc2Vuc2UucGl4ZWxfY2xvY2spOwogCX0KIAotCWlmIChwaXhmbXQgJiYgIXJldCkgeworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOworCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0geworCQkubWFzdGVyX2Nsb2NrID0gcGNkZXYtPm1jbGssCisJCS5waXhlbF9jbG9ja19tYXggPSBwY2Rldi0+Y2ljbGsgLyA0LAorCX07CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljYW1fZm10ID0geGxhdGUtPmNhbV9mbXQ7CisKKwkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCisJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKKwkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKKworCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7CisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCAmY2FtX2YpOworCisJaWNkLT5zZW5zZSA9IE5VTEw7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGYWlsZWQgdG8gY29uZmlndXJlIGZvciBmb3JtYXQgJXhcbiIsCisJCQkgcGl4LT5waXhlbGZvcm1hdCk7CisJfSBlbHNlIGlmIChzZW5zZS5mbGFncyAmIFNPQ0FNX1NFTlNFX1BDTEtfQ0hBTkdFRCkgeworCQlpZiAoc2Vuc2UucGl4ZWxfY2xvY2sgPiBzZW5zZS5waXhlbF9jbG9ja19tYXgpIHsKKwkJCWRldl9lcnIoJmljaS0+ZGV2LAorCQkJCSJwaXhlbCBjbG9jayAlbHUgc2V0IGJ5IHRoZSBjYW1lcmEgdG9vIGhpZ2ghIiwKKwkJCQlzZW5zZS5waXhlbF9jbG9jayk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHNlbnNlLnBpeGVsX2Nsb2NrKTsKKwl9CisKKwlpZiAoIXJldCkgewogCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOwogCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OwogCX0KQEAgLTEzNjMsNiArMTM5NCw3IEBACiAJLnJlbW92ZQkJPSBweGFfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCiAJLnN1c3BlbmQJPSBweGFfY2FtZXJhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFfY2FtZXJhX3Jlc3VtZSwKKwkuc2V0X2Nyb3AJPSBweGFfY2FtZXJhX3NldF9jcm9wLAogCS5nZXRfZm9ybWF0cwk9IHB4YV9jYW1lcmFfZ2V0X2Zvcm1hdHMsCiAJLnNldF9mbXQJPSBweGFfY2FtZXJhX3NldF9mbXQsCiAJLnRyeV9mbXQJPSBweGFfY2FtZXJhX3RyeV9mbXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKaW5kZXggMTNmODVhZC4uYjViZTYzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYwpAQCAtMzM2LDE0ICszMzYsMTkgQEAKIAkJCSAgICAgdTE2IGluZGV4LCB1MTYgdmFsdWUsIHZvaWQgKmJ1ZiwKIAkJCSAgICAgczMyIGJ1Zl9sZW4sIGludCBiT3V0KTsKIAorLyogZGV2X2VyciBtYWNybyB3aXRoIGRyaXZlciBuYW1lICovCisjZGVmaW5lIFMyMjU1X0RSSVZFUl9OQU1FICJzMjI1NSIKKyNkZWZpbmUgczIyNTVfZGV2X2VycihkZXYsIGZtdCwgYXJnLi4uKQkJCQkJXAorCQlkZXZfZXJyKGRldiwgUzIyNTVfRFJJVkVSX05BTUUgIiAtICIgZm10LCAjI2FyZykKKwogI2RlZmluZSBkcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICgqczIyNTVfZGVidWcgPj0gKGxldmVsKSkgewkJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiczIyNTU6ICIgZm10LCAjI2FyZyk7CVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFMyMjU1X0RSSVZFUl9OQU1FCQlcCisJCQkJIjogIiBmbXQsICMjYXJnKTsJCQlcCiAJCX0JCQkJCQkJXAogCX0gd2hpbGUgKDApCiAKLQogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHMyMjU1X2RyaXZlcjsKIAogCkBAIC01MjgsMTQgKzUzMywxNCBAQAogCWludCBsZW47CiAJZHByaW50aygxMDAsICJ1ZGV2ICVwIHVyYiAlcCIsIHVkZXYsIHVyYik7CiAJaWYgKHVyYi0+c3RhdHVzKSB7Ci0JCWRldl9lcnIoJnVkZXYtPmRldiwgIlVSQiBmYWlsZWQgd2l0aCBzdGF0dXMgJWQiLCB1cmItPnN0YXR1cyk7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgIlVSQiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHVyYi0+c3RhdHVzKTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0ZBSUxFRCk7CiAJCS8qIHdha2UgdXAgYW55dGhpbmcgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlICovCiAJCXdha2VfdXAoJmRhdGEtPndhaXRfZncpOwogCQlyZXR1cm47CiAJfQogCWlmIChkYXRhLT5md191cmIgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJzMjI1NSBkaXNjb25uZWN0ZWRcbiIpOworCQlzMjI1NV9kZXZfZXJyKCZ1ZGV2LT5kZXYsICJkaXNjb25uZWN0ZWRcbiIpOwogCQlhdG9taWNfc2V0KCZkYXRhLT5md19zdGF0ZSwgUzIyNTVfRldfRkFJTEVEKTsKIAkJLyogd2FrZSB1cCBhbnl0aGluZyB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgKi8KIAkJd2FrZV91cCgmZGF0YS0+d2FpdF9mdyk7CkBAIC04NDEsOCArODQ2LDcgQEAKIAlzdHJ1Y3QgczIyNTVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJzMjI1NSIsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCAiczIyNTUiLCBzaXplb2YoY2FwLT5jYXJkKSk7Ci0Jc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXZfbmFtZSgmZGV2LT51ZGV2LT5kZXYpLAotCQlzaXplb2YoY2FwLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IFMyMjU1X1ZFUlNJT047CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOwogCXJldHVybiAwOwpAQCAtMTI3OCw3ICsxMjgyLDcgQEAKIAl9CiAKIAlpZiAoIXJlc19nZXQoZGV2LCBmaCkpIHsKLQkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJzMjI1NTogc3RyZWFtIGJ1c3lcbiIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgInN0cmVhbSBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTE1NDUsNyArMTU0OSw4IEBACiAKIAlzd2l0Y2ggKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKSkgewogCWNhc2UgUzIyNTVfRldfRkFJTEVEOgotCQllcnIoIjIyNTUgZmlybXdhcmUgbG9hZCBmYWlsZWQuIHJldHJ5aW5nLlxuIik7CisJCXMyMjU1X2Rldl9lcnIoJmRldi0+dWRldi0+ZGV2LAorCQkJImZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOwogCQlzMjI1NV9md2xvYWRfc3RhcnQoZGV2LCAxKTsKIAkJd2FpdF9ldmVudF90aW1lb3V0KGRldi0+ZndfZGF0YS0+d2FpdF9mdywKIAkJCQkgICAoKGF0b21pY19yZWFkKCZkZXYtPmZ3X2RhdGEtPmZ3X3N0YXRlKQpAQCAtMjE3Myw3ICsyMTc4LDggQEAKIAogCXByaW50ayhLRVJOX0lORk8gIjIyNTUgdXNiIGZpcm13YXJlIHZlcnNpb24gJWQgXG4iLCBmd192ZXIpOwogCWlmIChmd192ZXIgPCBDVVJfVVNCX0ZXVkVSKQotCQllcnIoInVzYiBmaXJtd2FyZSBub3QgdXAgdG8gZGF0ZSAlZFxuIiwgZndfdmVyKTsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCisJCQkidXNiIGZpcm13YXJlIG5vdCB1cCB0byBkYXRlICVkXG4iLCBmd192ZXIpOwogCiAJZm9yIChqID0gMDsgaiA8IE1BWF9DSEFOTkVMUzsgaisrKSB7CiAJCWRldi0+Yl9hY3F1aXJlW2pdID0gMDsKQEAgLTIyMjgsMTMgKzIyMzQsMTMgQEAKIAlkcHJpbnRrKDEwMCwgInJlYWQgcGlwZSBjb21wbGV0aW9uICVwLCBzdGF0dXMgJWRcbiIsIHB1cmIsCiAJCXB1cmItPnN0YXR1cyk7CiAJaWYgKHBpcGVfaW5mbyA9PSBOVUxMKSB7Ci0JCWVycigibm8gY29udGV4dCAhIik7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAibm8gY29udGV4dCFcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJZGV2ID0gcGlwZV9pbmZvLT5kZXY7CiAJaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWVycigibm8gY29udGV4dCAhIik7CisJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LCAibm8gY29udGV4dCFcbiIpOwogCQlyZXR1cm47CiAJfQogCXN0YXR1cyA9IHB1cmItPnN0YXR1czsKQEAgLTIyODYsNyArMjI5Miw3IEBACiAJCXBpcGVfaW5mby0+c3RyZWFtX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcGlwZV9pbmZvLT5zdHJlYW1fdXJiKSB7CiAJCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKLQkJCQkiUmVhZFN0cmVhbTogVW5hYmxlIHRvIGFsbG9jIFVSQiIpOworCQkJCSJSZWFkU3RyZWFtOiBVbmFibGUgdG8gYWxsb2MgVVJCXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCS8qIHRyYW5zZmVyIGJ1ZmZlciBhbGxvY2F0ZWQgaW4gYm9hcmRfaW5pdCAqLwpAQCAtMjM5MSw3ICsyMzk3LDcgQEAKIAlpbnQgajsKIAogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoInMyMjU1OiBpbnZhbGlkIGRldmljZSIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgImludmFsaWQgZGV2aWNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlkcHJpbnRrKDQsICJzdG9wIHJlYWQgcGlwZVxuIik7CkBAIC0yNDUzLDcgKzI0NTksNyBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvICovCiAJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMyMjU1X2RldiksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoInMyMjU1OiBvdXQgb2YgbWVtb3J5Iik7CisJCXMyMjU1X2Rldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yNDg3LDcgKzI0OTMsNyBAQAogCX0KIAogCWlmICghZGV2LT5yZWFkX2VuZHBvaW50KSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGQgbm90IGZpbmQgYnVsay1pbiBlbmRwb2ludCIpOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJ1bGstaW4gZW5kcG9pbnRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjU4Myw3ICsyNTg5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHMyMjU1X2RyaXZlciA9IHsKLQkubmFtZSA9ICJzMjI1NSIsCisJLm5hbWUgPSBTMjI1NV9EUklWRVJfTkFNRSwKIAkucHJvYmUgPSBzMjI1NV9wcm9iZSwKIAkuZGlzY29ubmVjdCA9IHMyMjU1X2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0gczIyNTVfdGFibGUsCkBAIC0yNTk3LDcgKzI2MDMsOCBAQAogCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmczIyNTVfZHJpdmVyKTsKIAogCWlmIChyZXN1bHQpCi0JCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKwkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkiOiB1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWRcbiIsIHJlc3VsdCk7CiAKIAlkcHJpbnRrKDIsICJzMjI1NV9pbml0OiBkb25lXG4iKTsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IGU2MzdlNDQuLmRhNDdiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTQ2LDEwICs0NiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb3RleHQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEdlbmcgPGxpbnV4QE1pY2hhZWxHZW5nLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTUyNDZBLCBTQUE1MjgxIFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIik7CkBAIC0zODgsMTMgKzM4OSwxOSBAQAogCiBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiAJdTggICAgIHBnYnVmW05VTV9EQVVTXVtWVFhfVklSVFVBTFNJWkVdOwogCWludCAgICBpc19zZWFyY2hpbmdbTlVNX0RBVVNdOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJdW5zaWduZWQgbG9uZyBpbl91c2U7CiAJc3RydWN0IG11dGV4IGxvY2s7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnRvX2RldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UsIHNkKTsKK30KKwogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc2FhX3RlbXBsYXRlOwkvKiBEZWNsYXJlZCBuZWFyIGJvdHRvbSAqLwogCiAvKgpAQCAtNDAzLDEyICs0MTAsMTMgQEAKIAogc3RhdGljIGludCBpMmNfc2VuZGJ1ZihzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0LCBpbnQgcmVnLCBpbnQgY291bnQsIHU4ICpkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZ0LT5zZCk7CiAJY2hhciBidWZbNjRdOwogCiAJYnVmWzBdID0gcmVnOwogCW1lbWNweShidWYrMSwgZGF0YSwgY291bnQpOwogCi0JaWYoaTJjX21hc3Rlcl9zZW5kKHQtPmNsaWVudCwgYnVmLCBjb3VudCsxKT09Y291bnQrMSkKKwlpZiAoaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBjb3VudCArIDEpID09IGNvdW50ICsgMSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC0xOwogfQpAQCAtNDM2LDcgKzQ0NCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaTJjX2dldGRhdGEoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQogewotCWlmKGkyY19tYXN0ZXJfcmVjdih0LT5jbGllbnQsIGJ1ZiwgY291bnQpIT1jb3VudCkKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOworCisJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgY291bnQpICE9IGNvdW50KQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC05NjEsOSArOTcxLDYgQEAKIHsKIAlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCWlmICh0LT5jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTAzMywxOCArMTA0MCwyOSBAQAogCS5taW5vciAgICA9IC0xLAogfTsKIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjIgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBpbnQgc2FhNTI0NmFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE1MjQ2QSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNTI0NmFfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTUyNDZhX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTUyNDZhX29wcyA9IHsKKwkuY29yZSA9ICZzYWE1MjQ2YV9jb3JlX29wcywKK307CisKIAogc3RhdGljIGludCBzYWE1MjQ2YV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBwZ2J1ZjsKIAlpbnQgZXJyOwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkOwogCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKQEAgLTEwNTMsNDAgKzEwNzEsNDMgQEAKIAl0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAodCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZ0LT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNTI0NmFfb3BzKTsKIAltdXRleF9pbml0KCZ0LT5sb2NrKTsKIAogCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KLQl2ZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmICh2ZCA9PSBOVUxMKSB7CisJdC0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICh0LT52ZGV2ID09IE5VTEwpIHsKIAkJa2ZyZWUodCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisJbWVtY3B5KHQtPnZkZXYsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdC0+dmRldikpOwogCiAJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnBnYnVmW3BnYnVmXSwgJyAnLCBzaXplb2YodC0+cGdidWZbMF0pKTsKIAkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IGZhbHNlOwogCX0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZCwgdCk7CisJdmlkZW9fc2V0X2RydmRhdGEodC0+dmRldiwgdCk7CiAKIAkvKiBSZWdpc3RlciBpdCAqLwotCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZCwgVkZMX1RZUEVfVlRYLCAtMSk7CisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYsIFZGTF9UWVBFX1ZUWCwgLTEpOwogCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKHQpOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHQtPnZkZXYpOworCQl0LT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTUyNDZhX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQgPSB0b19kZXYoc2QpOwogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmQpOwotCWtmcmVlKHZpZGVvX2dldF9kcnZkYXRhKHZkKSk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHQpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk4LDcgKzExMTksNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNTI0NmEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAogCS5wcm9iZSA9IHNhYTUyNDZhX3Byb2JlLAogCS5yZW1vdmUgPSBzYWE1MjQ2YV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNTI0NmFfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IGUyOTc2NTEuLjQ4YjI3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC01MCwxNSArNTAsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBHZW5nIDxsaW51eEBNaWNoYWVsR2VuZy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE1MjQ5IFRlbGV0ZXh0IGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogI2RlZmluZSBWVFhfVkVSX01BSiAxCiAjZGVmaW5lIFZUWF9WRVJfTUlOIDgKIApAQCAtOTUsMTcgKzk3LDIzIEBACiAKIHN0cnVjdCBzYWE1MjQ5X2RldmljZQogeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXZkYXVfdCB2ZGF1W05VTV9EQVVTXTsJCQkvKiBEYXRhIGZvciB2aXJ0dWFsIERBVXMgKHRoZSA1MjQ5IG9ubHkgaGFzIG9uZSAqLwogCQkJCQkJLyogcmVhbCBEQVUsIHNvIHdlIGhhdmUgdG8gc2ltdWxhdGUgc29tZSBtb3JlKSAqLwogCWludCB2dHhfdXNlX2NvdW50OwogCWludCBpc19zZWFyY2hpbmdbTlVNX0RBVVNdOwogCWludCBkaXNwX21vZGU7CiAJaW50IHZpcnR1YWxfbW9kZTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnRvX2RldihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE1MjQ5X2RldmljZSwgc2QpOworfQorCiAKICNkZWZpbmUgQ0NUV1IgMzQJCS8qIEmyQyB3cml0ZS9yZWFkLWFkZHJlc3Mgb2YgdnR4LWNoaXAgKi8KICNkZWZpbmUgQ0NUUkQgMzUKQEAgLTE0NywxMiArMTU1LDEzIEBACiAKIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0LCBpbnQgcmVnLCBpbnQgY291bnQsIHU4ICpkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZ0LT5zZCk7CiAJY2hhciBidWZbNjRdOwogCiAJYnVmWzBdID0gcmVnOwogCW1lbWNweShidWYrMSwgZGF0YSwgY291bnQpOwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZCh0LT5jbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCiAJCXJldHVybiAwOwogCXJldHVybiAtMTsKIH0KQEAgLTE4MCw3ICsxODksOSBAQAogCiBzdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQogewotCWlmKGkyY19tYXN0ZXJfcmVjdih0LT5jbGllbnQsIGJ1ZiwgY291bnQpIT1jb3VudCkKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOworCisJaWYgKGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGJ1ZiwgY291bnQpICE9IGNvdW50KQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CkBAIC00OTcsOSArNTA4LDYgQEAKIAlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBwZ2J1ZjsKIAotCWlmICh0LT5jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmdC0+aW5fdXNlKSkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtNTUzLDE4ICs1NjEsMjggQEAKIAkucmVsZWFzZSAJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKIH07CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgaW50IHNhYTUyNDlfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE1MjQ5LCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE1MjQ5X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE1MjQ5X2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTUyNDlfb3BzID0geworCS5jb3JlID0gJnNhYTUyNDlfY29yZV9vcHMsCit9OwogCiBzdGF0aWMgaW50IHNhYTUyNDlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcGdidWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKIAlzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKQEAgLTU3MywxNiArNTkxLDE3IEBACiAJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmdC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTUyNDlfb3BzKTsKIAltdXRleF9pbml0KCZ0LT5sb2NrKTsKIAogCS8qIE5vdyBjcmVhdGUgYSB2aWRlbzRsaW51eCBkZXZpY2UgKi8KLQl2ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAodmQgPT0gTlVMTCkgeworCXQtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodC0+dmRldiA9PSBOVUxMKSB7CiAJCWtmcmVlKGNsaWVudCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB2ZCk7Ci0JbWVtY3B5KHZkLCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnZkKSk7CisJbWVtY3B5KHQtPnZkZXYsICZzYWFfdGVtcGxhdGUsIHNpemVvZigqdC0+dmRldikpOwogCiAJZm9yIChwZ2J1ZiA9IDA7IHBnYnVmIDwgTlVNX0RBVVM7IHBnYnVmKyspIHsKIAkJbWVtc2V0KHQtPnZkYXVbcGdidWZdLnBnYnVmLCAnICcsIHNpemVvZih0LT52ZGF1WzBdLnBnYnVmKSk7CkBAIC01OTMsMjYgKzYxMiwyNyBAQAogCQl0LT52ZGF1W3BnYnVmXS5zdG9wcGVkID0gdHJ1ZTsKIAkJdC0+aXNfc2VhcmNoaW5nW3BnYnVmXSA9IGZhbHNlOwogCX0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZCwgdCk7CisJdmlkZW9fc2V0X2RydmRhdGEodC0+dmRldiwgdCk7CiAKIAkvKiBSZWdpc3RlciBpdCAqLwotCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZCwgVkZMX1RZUEVfVlRYLCAtMSk7CisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYsIFZGTF9UWVBFX1ZUWCwgLTEpOwogCWlmIChlcnIgPCAwKSB7CiAJCWtmcmVlKHQpOwotCQlrZnJlZSh2ZCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHQtPnZkZXYpOworCQl0LT52ZGV2ID0gTlVMTDsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JdC0+Y2xpZW50ID0gY2xpZW50OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTUyNDlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0ID0gdG9fZGV2KHNkKTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOwotCWtmcmVlKHZkKTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh0LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYyNCw3ICs2NDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNTI0OSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTUyNDksCiAJLnByb2JlID0gc2FhNTI0OV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNTI0OV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNTI0OV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKaW5kZXggZjA1MDI0Mi4uYzI1ZTgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE2NTg4LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIsMTUgKzMyLDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Jkcy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4MjAgPj4gMSwKLQkweDIyID4+IDEsCi0JSTJDX0NMSUVOVF9FTkQsCi19OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogaW5zbW9kIG9wdGlvbnMgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CkBAIC03Miw5ICs2Nyw4IEBACiAjZGVmaW5lIGRwcmludGsgICAgIGlmIChkZWJ1ZykgcHJpbnRrCiAKIHN0cnVjdCBzYWE2NTg4IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKQEAgLTg2LDggKzgwLDEwIEBACiAJaW50IGRhdGFfYXZhaWxhYmxlX2Zvcl9yZWFkOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRyaXZlcjsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGU7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE2NTg4ICp0b19zYWE2NTg4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTY1ODgsIHNkKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yNTgsNiArMjU0LDcgQEAKIAogc3RhdGljIHZvaWQgc2FhNjU4OF9pMmNfcG9sbChzdHJ1Y3Qgc2FhNjU4OCAqcykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmcy0+c2QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciB0bXBidWZbNl07CiAJdW5zaWduZWQgY2hhciBibG9ja251bTsKQEAgLTI2NSw3ICsyNjIsNyBAQAogCiAJLyogQWx0aG91Z2ggd2Ugb25seSBuZWVkIDMgYnl0ZXMsIHdlIGhhdmUgdG8gcmVhZCBhdCBsZWFzdCA2LgogCSAgIFNBQTY1ODggcmV0dXJucyBnYXJiYWdlIG90aGVyd2lzZSAqLwotCWlmICg2ICE9IGkyY19tYXN0ZXJfcmVjdigmcy0+Y2xpZW50LCAmdG1wYnVmWzBdLCA2KSkgeworCWlmICg2ICE9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsICZ0bXBidWZbMF0sIDYpKSB7CiAJCWlmIChkZWJ1ZyA+IDEpCiAJCQlkcHJpbnRrKFBSRUZJWCAicmVhZCBlcnJvciFcbiIpOwogCQlyZXR1cm47CkBAIC0zMTYsMjMgKzMxMywxNyBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcy0+cmVhZF9xdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY1ODhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gKHN0cnVjdCBzYWE2NTg4ICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJnMtPndvcmspOwotfQotCiBzdGF0aWMgdm9pZCBzYWE2NTg4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBzYWE2NTg4ICpzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzYWE2NTg4LCB3b3JrKTsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2FhNjU4OCwgd29yay53b3JrKTsKIAogCXNhYTY1ODhfaTJjX3BvbGwocyk7Ci0JbW9kX3RpbWVyKCZzLT50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnMtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKIH0KIAogc3RhdGljIGludCBzYWE2NTg4X2NvbmZpZ3VyZShzdHJ1Y3Qgc2FhNjU4OCAqcykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmcy0+c2QpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzNdOwogCWludCByYzsKIApAQCAtMzgwLDcgKzM3MSw4IEBACiAJZHByaW50ayhQUkVGSVggIndyaXRpbmc6IDB3PTB4JTAyeCAxdz0weCUwMnggMnc9MHglMDJ4XG4iLAogCQlidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKIAotCWlmICgzICE9IChyYyA9IGkyY19tYXN0ZXJfc2VuZCgmcy0+Y2xpZW50LCBidWYsIDMpKSkKKwlyYyA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgMyk7CisJaWYgKHJjICE9IDMpCiAJCXByaW50ayhQUkVGSVggImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgMylcbiIsIHJjKTsKIAogCXJldHVybiAwOwpAQCAtMzg4LDcwICszODAsMTAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTY1ODhfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGxvbmcgc2FhNjU4OF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHNhYTY1ODggKnM7Ci0JY2xpZW50X3RlbXBsYXRlLmFkYXB0ZXIgPSBhZGFwOwotCWNsaWVudF90ZW1wbGF0ZS5hZGRyID0gYWRkcjsKLQotCXByaW50ayhQUkVGSVggImNoaXAgZm91bmQgQCAweCV4XG4iLCBhZGRyIDw8IDEpOwotCi0JaWYgKE5VTEwgPT0gKHMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzLT5idWZfc2l6ZSA9IGJ1ZmJsb2NrcyAqIDM7Ci0KLQlpZiAoTlVMTCA9PSAocy0+YnVmZmVyID0ga21hbGxvYyhzLT5idWZfc2l6ZSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwotCXMtPmNsaWVudCA9IGNsaWVudF90ZW1wbGF0ZTsKLQlzLT5ibG9ja19jb3VudCA9IDA7Ci0Jcy0+d3JfaW5kZXggPSAwOwotCXMtPnJkX2luZGV4ID0gMDsKLQlzLT5sYXN0X2Jsb2NrbnVtID0gMHhmZjsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5yZWFkX3F1ZXVlKTsKLQlzLT5kYXRhX2F2YWlsYWJsZV9mb3JfcmVhZCA9IDA7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZzLT5jbGllbnQsIHMpOwotCWkyY19hdHRhY2hfY2xpZW50KCZzLT5jbGllbnQpOwotCi0Jc2FhNjU4OF9jb25maWd1cmUocyk7Ci0KLQkvKiBzdGFydCBwb2xsaW5nIHZpYSBldmVudGQgKi8KLQlJTklUX1dPUksoJnMtPndvcmssIHNhYTY1ODhfd29yayk7Ci0JaW5pdF90aW1lcigmcy0+dGltZXIpOwotCXMtPnRpbWVyLmZ1bmN0aW9uID0gc2FhNjU4OF90aW1lcjsKLQlzLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpczsKLQlzY2hlZHVsZV93b3JrKCZzLT53b3JrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NTg4X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlpZiAoYWRhcC0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIHNhYTY1ODhfYXR0YWNoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE2NTg4X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWxfdGltZXJfc3luYygmcy0+dGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotCWtmcmVlKHMtPmJ1ZmZlcik7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJCQkJdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE2NTg4ICpzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IHJkc19jb21tYW5kICphID0gKHN0cnVjdCByZHNfY29tbWFuZCAqKWFyZzsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IHRvX3NhYTY1ODgoc2QpOworCXN0cnVjdCByZHNfY29tbWFuZCAqYSA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAJCS8qIC0tLSBvcGVuKCkgZm9yIC9kZXYvcmFkaW8gLS0tICovCkBAIC00NzksNDUgKzQxMSw5NCBAQAogCiAJZGVmYXVsdDoKIAkJLyogbm90aGluZyAqLwotCQlicmVhazsKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2FhNjU4OF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE2NTg4LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE2NTg4X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE2NTg4X2dfY2hpcF9pZGVudCwKKwkuaW9jdGwgPSBzYWE2NTg4X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNjU4OF9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNjU4OF9jb3JlX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBzYWE2NTg4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzYWE2NTg4ICpzOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwl2NGxfaW5mbyhjbGllbnQsICJzYWE2NTg4IGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMtPmJ1Zl9zaXplID0gYnVmYmxvY2tzICogMzsKKworCXMtPmJ1ZmZlciA9IGttYWxsb2Mocy0+YnVmX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzLT5idWZmZXIgPT0gTlVMTCkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNkID0gJnMtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE2NTg4X29wcyk7CisJc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOworCXMtPmJsb2NrX2NvdW50ID0gMDsKKwlzLT53cl9pbmRleCA9IDA7CisJcy0+cmRfaW5kZXggPSAwOworCXMtPmxhc3RfYmxvY2tudW0gPSAweGZmOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPnJlYWRfcXVldWUpOworCXMtPmRhdGFfYXZhaWxhYmxlX2Zvcl9yZWFkID0gMDsKKworCXNhYTY1ODhfY29uZmlndXJlKHMpOworCisJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCisJSU5JVF9ERUxBWUVEX1dPUksoJnMtPndvcmssIHNhYTY1ODhfd29yayk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzLT53b3JrLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NTg4X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IHRvX3NhYTY1ODgoc2QpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzLT53b3JrKTsKKworCWtmcmVlKHMtPmJ1ZmZlcik7CisJa2ZyZWUocyk7CisJcmV0dXJuIDA7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAic2FhNjU4OCIsCi0JfSwKLQkuaWQgPSAtMSwJCS8qIEZJWE1FICovCi0JLmF0dGFjaF9hZGFwdGVyID0gc2FhNjU4OF9wcm9iZSwKLQkuZGV0YWNoX2NsaWVudCA9IHNhYTY1ODhfZGV0YWNoLAotCS5jb21tYW5kID0gc2FhNjU4OF9jb21tYW5kLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTY1ODhfaWRbXSA9IHsKKwl7ICJzYWE2NTg4IiwgMCB9LAorCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE2NTg4X2lkKTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE2NTg4IiwKLQkuZHJpdmVyID0gJmRyaXZlciwKKwkucHJvYmUgPSBzYWE2NTg4X3Byb2JlLAorCS5yZW1vdmUgPSBzYWE2NTg4X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBzYWE2NTg4X2lkLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgc2FhNjU4OF9pbml0X21vZHVsZSh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHNhYTY1ODhfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNjU4OF9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChzYWE2NTg4X2NsZWFudXBfbW9kdWxlKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCmluZGV4IDM3ODYwNjkuLmRmNGUwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMC5jCkBAIC0zMywxNSArMzMsMTYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUGF1bGluZSBNaWRkZWxpbmsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CkBAIC01Miw5ICs1MywxMCBAQAogI2RlZmluZSBTQUE3MTEwX05SX1JFRwkJMHgzNQogCiBzdHJ1Y3Qgc2FhNzExMCB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXU4IHJlZ1tTQUE3MTEwX05SX1JFR107CiAKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC02NSwyMCArNjcsMjggQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxMTAgKnRvX3NhYTcxMTAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzExMCwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogSTJDIHN1cHBvcnQgZnVuY3Rpb25zCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAogCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBzYWE3MTEwX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWcgPSAqZGF0YTsJCS8qIGZpcnN0IHJlZ2lzdGVyIHRvIHdyaXRlIHRvICovCiAKQEAgLTg5LDE1ICs5OSwxMyBAQAogCS8qIHRoZSBzYWE3MTEwIGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCiAJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGRhdGEsIGxlbik7CiAKIAkJLyogQ2FjaGUgdGhlIHdyaXR0ZW4gZGF0YSAqLwogCQltZW1jcHkoZGVjb2Rlci0+cmVnICsgcmVnLCBkYXRhICsgMSwgbGVuIC0gMSk7CiAJfSBlbHNlIHsKIAkJZm9yICgrK2RhdGEsIC0tbGVuOyBsZW47IGxlbi0tKSB7Ci0JCQlyZXQgPSBzYWE3MTEwX3dyaXRlKGNsaWVudCwgcmVnKyssICpkYXRhKyspOworCQkJcmV0ID0gc2FhNzExMF93cml0ZShzZCwgcmVnKyssICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTEwNiw4ICsxMTQsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTEwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKQEAgLTExNSwxMSArMTI1LDExIEBACiAvKiBTQUE3MTEwIGZ1bmN0aW9ucwkJCQkJCQkgICAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBGUkVTUF8wNkhfQ09NUFNUIDB4MDMJLy8weDEzCi0jZGVmaW5lIEZSRVNQXzA2SF9TVklERU8gMHg4MwkvLzB4QzAKKyNkZWZpbmUgRlJFU1BfMDZIX0NPTVBTVCAweDAzCS8qMHgxMyovCisjZGVmaW5lIEZSRVNQXzA2SF9TVklERU8gMHg4MwkvKjB4QzAqLwogCiAKLXN0YXRpYyBpbnQgc2FhNzExMF9zZWxtdXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGNoYW4pCitzdGF0aWMgaW50IHNhYTcxMTBfc2VsbXV4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBjaGFuKQogewogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVzWzldWzhdID0gewogCQkvKiBtb2RlIDAgKi8KQEAgLTE1MCwxNyArMTYwLDE3IEBACiAJCXtGUkVTUF8wNkhfU1ZJREVPLCAweDNDLCAweDI3LCAweEMxLCAweDIzLAogCQkJICAgICAgMHg0NCwgMHg3NSwgMHgyMX0KIAl9OwotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwdHIgPSBtb2Rlc1tjaGFuXTsKIAotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCBwdHJbMF0pOwkvKiBMdW1pbmFuY2UgY29udHJvbCAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIwLCBwdHJbMV0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMSAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCBwdHJbMl0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIyLCBwdHJbM10pOwkvKiBNaXhlciBDb250cm9sICMxICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJDLCBwdHJbNF0pOwkvKiBNaXhlciBDb250cm9sICMyICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDMwLCBwdHJbNV0pOwkvKiBBRENzIGdhaW4gY29udHJvbCAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDMxLCBwdHJbNl0pOwkvKiBNaXhlciBDb250cm9sICMzICAgICAqLwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCBwdHJbN10pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDYsIHB0clswXSk7CS8qIEx1bWluYW5jZSBjb250cm9sICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMCwgcHRyWzFdKTsJLyogQW5hbG9nIENvbnRyb2wgIzEgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDIxLCBwdHJbMl0pOwkvKiBBbmFsb2cgQ29udHJvbCAjMiAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjIsIHB0clszXSk7CS8qIE1peGVyIENvbnRyb2wgIzEgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyQywgcHRyWzRdKTsJLyogTWl4ZXIgQ29udHJvbCAjMiAgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDMwLCBwdHJbNV0pOwkvKiBBRENzIGdhaW4gY29udHJvbCAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MzEsIHB0cls2XSk7CS8qIE1peGVyIENvbnRyb2wgIzMgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMSwgcHRyWzddKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KIAlkZWNvZGVyLT5pbnB1dCA9IGNoYW47CiAKIAlyZXR1cm4gMDsKQEAgLTE3NiwyNDYgKzE4NiwyNjAgQEAKIAkvKiAweDMwICovIDB4NDQsIDB4NzEsIDB4MDIsIDB4OEMsIDB4MDIKIH07CiAKLXN0YXRpYyBpbnQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2NGwyX3N0ZF9pZCBkZXRlcm1pbmVfbm9ybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCURFRklORV9XQUlUKHdhaXQpOwotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAlpbnQgc3RhdHVzOwogCiAJLyogbW9kZSBjaGFuZ2VkLCBzdGFydCBhdXRvbWF0aWMgZGV0ZWN0aW9uICovCi0Jc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0Jc2FhNzExMF9zZWxtdXgoY2xpZW50LCBkZWNvZGVyLT5pbnB1dCk7CisJc2FhNzExMF93cml0ZV9ibG9jayhzZCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwlzYWE3MTEwX3NlbG11eChzZCwgZGVjb2Rlci0+aW5wdXQpOwogCXByZXBhcmVfdG9fd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwotCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOworCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAJaWYgKHN0YXR1cyAmIDB4NDApIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIGRlY29kZXItPm5vcm07CS8vIG5vIGNoYW5nZQorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChubyBzaWduYWwpXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gZGVjb2Rlci0+bm9ybTsJLyogbm8gY2hhbmdlKi8KIAl9CiAJaWYgKChzdGF0dXMgJiAzKSA9PSAwKSB7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDgzKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwNiwgMHg4Myk7CiAJCWlmIChzdGF0dXMgJiAweDIwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKLQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKLQkJCXJldHVybiBWSURFT19NT0RFX05UU0M7CisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChOVFNDL25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKKwkJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4ODEpOyovCisJCQlyZXR1cm4gVjRMMl9TVERfTlRTQzsKIAkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwvbm8gY29sb3IpXG4iLCBzdGF0dXMpOwotCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg5QSk7Ci0JCXJldHVybiBWSURFT19NT0RFX1BBTDsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg5QSk7Ki8KKwkJcmV0dXJuIFY0TDJfU1REX1BBTDsKIAl9Ci0JLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDA2LDB4MDMpOworCS8qc2FhNzExMF93cml0ZShzZCwweDA2LDB4MDMpOyovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsJLyogNjBIeiAqLwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDJDKTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4ODEpOwotCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChOVFNDKVxuIiwgc3RhdHVzKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4NTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDJDKTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg4MSk7Ki8KKwkJcmV0dXJuIFY0TDJfU1REX05UU0M7CiAJfQogCiAJLyogNTBIeiAtPiBQQUwvU0VDQU0gKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0Jc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg5QSk7CisJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJc2FhNzExMF93cml0ZShzZCwgMHgwRiwgMHgxMCk7CisJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJLypzYWE3MTEwX3dyaXRlKHNkLDB4MkUsMHg5QSk7Ki8KIAogCXByZXBhcmVfdG9fd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1MCkpOwogCWZpbmlzaF93YWl0KCZkZWNvZGVyLT53cSwgJndhaXQpOwogCi0Jc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7CisJc3RhdHVzID0gc2FhNzExMF9yZWFkKHNkKTsKIAlpZiAoKHN0YXR1cyAmIDB4MDMpID09IDB4MDEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nyk7Ci0JCXJldHVybiBWSURFT19NT0RFX1NFQ0FNOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChTRUNBTSlcbiIsIHN0YXR1cyk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODcpOworCQlyZXR1cm4gVjRMMl9TVERfU0VDQU07CiAJfQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFBBTClcbiIsIHN0YXR1cyk7Ci0JcmV0dXJuIFZJREVPX01PREVfUEFMOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggKFBBTClcbiIsIHN0YXR1cyk7CisJcmV0dXJuIFY0TDJfU1REX1BBTDsKIH0KIAotc3RhdGljIGludAotc2FhNzExMF9jb21tYW5kIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkgdW5zaWduZWQgaW50ICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAgICAgICphcmcpCitzdGF0aWMgaW50IHNhYTcxMTBfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpwc3RhdHVzKQogewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHY7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJaW50IHN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLy9zYWE3MTEwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKLQkJYnJlYWs7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCBub3JtPSVsbHhcbiIsCisJCSAgICAgICBzdGF0dXMsICh1bnNpZ25lZCBsb25nIGxvbmcpZGVjb2Rlci0+bm9ybSk7CisJaWYgKCEoc3RhdHVzICYgMHg0MCkpCisJCXJlcyA9IDA7CisJaWYgKCEoc3RhdHVzICYgMHgwMykpCisJCXJlcyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOwogCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpkYyA9IGFyZzsKKwkqcHN0YXR1cyA9IHJlczsKKwlyZXR1cm4gMDsKK30KIAotCQlkYy0+ZmxhZ3MgPQotCQkgICAgVklERU9fREVDT0RFUl9QQUwgfCBWSURFT19ERUNPREVSX05UU0MgfAotCQkgICAgVklERU9fREVDT0RFUl9TRUNBTSB8IFZJREVPX0RFQ09ERVJfQVVUTzsKLQkJZGMtPmlucHV0cyA9IFNBQTcxMTBfTUFYX0lOUFVUOwotCQlkYy0+b3V0cHV0cyA9IFNBQTcxMTBfTUFYX09VVFBVVDsKLQkJYnJlYWs7Ci0JfQorc3RhdGljIGludCBzYWE3MTEwX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJKih2NGwyX3N0ZF9pZCAqKXN0ZCA9IGRldGVybWluZV9ub3JtKHNkKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlcyA9IDA7CitzdGF0aWMgaW50IHNhYTcxMTBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKLQkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggbm9ybT0lZFxuIiwKLQkJCSAgICAgICBzdGF0dXMsIGRlY29kZXItPm5vcm0pOwotCQlpZiAoIShzdGF0dXMgJiAweDQwKSkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQlpZiAoc3RhdHVzICYgMHgwMykKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfU0VDQU07Ci0JCQlicmVhazsKLQkJfQotCQkqKGludCAqKSBhcmcgPSByZXM7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQkJdiA9ICooaW50ICopIGFyZzsKLQkJaWYgKGRlY29kZXItPm5vcm0gIT0gdikgewotCQkJZGVjb2Rlci0+bm9ybSA9IHY7Ci0JCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA2LCAweDAzKTsKLQkJCXN3aXRjaCAodikgewotCQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDUwKTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7Ci0JCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg4MSk7Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFBBTFxuIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7Ci0JCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gU0VDQU1cbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gQVVUT1xuIik7Ci0JCQkJZGVjb2Rlci0+bm9ybSA9IGRldGVybWluZV9ub3JtKGNsaWVudCk7Ci0JCQkJKihpbnQgKikgYXJnID0gZGVjb2Rlci0+bm9ybTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FUEVSTTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmICh2IDwgMCB8fCB2ID49IFNBQTcxMTBfTUFYX0lOUFVUKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCB2KTsKKwlpZiAoZGVjb2Rlci0+bm9ybSAhPSBzdGQpIHsKKwkJZGVjb2Rlci0+bm9ybSA9IHN0ZDsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDA2LCAweDAzKTsqLworCQlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDUwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4MkMpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDgxKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg2KTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsIDB4MkUsIDB4OUEpOyovCisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byBQQUxcbiIpOworCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg3KTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsIDB4MkUsIDB4OUEpOyovCisJCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzd2l0Y2hlZCB0byBTRUNBTVxuIik7CisJCX0gZWxzZSB7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gdikgewotCQkJc2FhNzExMF9zZWxtdXgoY2xpZW50LCB2KTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCB2KTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAodiAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gdikgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gdjsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBFLCB2ID8gMHgxOCA6IDB4ODApOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiWVVWICVzXG4iLCB2ID8gIm9uIiA6ICJvZmYiKTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDE5LCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDEzLAotCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTIsIGRlY29kZXItPnNhdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDA3LAotCQkJCSAgICAgIChkZWNvZGVyLT5odWUgPj4gOCkgLSAxMjgpOwotCQl9Ci0JCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9EVU1QOgotCQlpZiAoIWRlYnVnKQotCQkJYnJlYWs7Ci0JCWZvciAodiA9IDA7IHYgPCBTQUE3MTEwX05SX1JFRzsgdiArPSAxNikgewotCQkJaW50IGo7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4OiIsIHYpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIHYgKyBqIDwgU0FBNzExMF9OUl9SRUc7IGorKykKLQkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsIGRlY29kZXItPnJlZ1t2ICsgal0pOwotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKK3N0YXRpYyBpbnQgc2FhNzExMF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAorCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+PSBTQUE3MTEwX01BWF9JTlBVVCkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbnB1dD0lZCBub3QgYXZhaWxhYmxlXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGRlY29kZXItPmlucHV0ICE9IHJvdXRlLT5pbnB1dCkgeworCQlzYWE3MTEwX3NlbG11eChzZCwgcm91dGUtPmlucHV0KTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gaW5wdXQ9JWRcbiIsIHJvdXRlLT5pbnB1dCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOworCisJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKKwkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBFLCBlbmFibGUgPyAweDE4IDogMHg4MCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIllVViAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExMF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ1bmtub3duIGNvbW1hbmQgJTA4eFxuIiwgY21kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxMTBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+YnJpZ2h0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+c2F0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTksIGRlY29kZXItPmJyaWdodCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMywgZGVjb2Rlci0+Y29udHJhc3QpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGRlY29kZXItPnNhdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDEyLCBkZWNvZGVyLT5zYXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoZGVjb2Rlci0+aHVlICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDcsIGRlY29kZXItPmh1ZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNzExMCwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qCi0gKiBHZW5lcmljIGkyYyBwcm9iZQotICogY29uY2VybmluZyB0aGUgYWRkcmVzc2VzOiBpMmMgd2FudHMgNyBiaXQgKHdpdGhvdXQgdGhlIHIvdyBiaXQpLCBzbyAnPj4xJwotICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxMTBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxMTBfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBzYWE3MTEwX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzExMF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHNhYTcxMTBfcXVlcnljdHJsLAorfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg5YyA+PiAxLCAweDllID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTEwX3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzYWE3MTEwX3Nfc3RkLAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzYWE3MTEwX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gc2FhNzExMF9zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gc2FhNzExMF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSBzYWE3MTEwX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxMTBfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTEwX29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTEwX2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE3MTEwX3R1bmVyX29wcywKKwkudmlkZW8gPSAmc2FhNzExMF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHNhYTcxMTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBydjsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KQEAgLTQyOSw3ICs0NTMsOSBAQAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExMCksIEdGUF9LRVJORUwpOwogCWlmICghZGVjb2RlcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTEwX29wcyk7CisJZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKIAlkZWNvZGVyLT5icmlnaHQgPSAzMjc2ODsKQEAgLTQzNywzMCArNDYzLDI5IEBACiAJZGVjb2Rlci0+aHVlID0gMzI3Njg7CiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGVjb2Rlci0+d3EpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCi0JcnYgPSBzYWE3MTEwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdHNlcSwgc2l6ZW9mKGluaXRzZXEpKTsKKwlydiA9IHNhYTcxMTBfd3JpdGVfYmxvY2soc2QsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CiAJaWYgKHJ2IDwgMCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IHN0YXR1cyAlZFxuIiwgcnYpOwogCX0gZWxzZSB7CiAJCWludCB2ZXIsIHN0YXR1czsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MjEsIDB4MTApOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwZSwgMHgxOCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA0KTsKLQkJdmVyID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDA2KTsKLQkJLy9tZGVsYXkoMTUwKTsKLQkJc3RhdHVzID0gc2FhNzExMF9yZWFkKGNsaWVudCk7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjEsIDB4MTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBlLCAweDE4KTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHgwNCk7CisJCXZlciA9IHNhYTcxMTBfcmVhZChzZCk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4MDYpOworCQkvKm1kZWxheSgxNTApOyovCisJCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInZlcnNpb24gJXgsIHN0YXR1cz0weCUwMnhcbiIsCiAJCQkgICAgICAgdmVyLCBzdGF0dXMpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDU5KTsKKwkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLwogCX0KIAotCS8vc2FhNzExMF9zZWxtdXgoY2xpZW50LDApOwotCS8vZGV0ZXJtaW5lX25vcm0oY2xpZW50KTsKKwkvKnNhYTcxMTBfc2VsbXV4KHNkLDApOyovCisJLypkZXRlcm1pbmVfbm9ybShzZCk7Ki8KIAkvKiBzZXR1cCBhbmQgaW1wbGljaXQgbW9kZSAwIHNlbGVjdCBoYXMgYmVlbiBwZXJmb3JtZWQgKi8KIAogCXJldHVybiAwOwpAQCAtNDY4LDcgKzQ5MywxMCBAQAogCiBzdGF0aWMgaW50IHNhYTcxMTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zYWE3MTEwKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4Miw4ICs1MTAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzExMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JLmNvbW1hbmQgPSBzYWE3MTEwX2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzExMF9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzExMF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzExMF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NzM4YTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTExLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTIgKzAsMCBAQAotLyoKLSAqIHNhYTcxMTEgLSBQaGlsaXBzIFNBQTcxMTFBIHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+Ci0gKgotICogU2xpZ2h0IGNoYW5nZXMgZm9yIHZpZGVvIHRpbWluZyBhbmQgYXR0YWNobWVudCBvdXRwdXQgYnkKLSAqIFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgotICoKLSAqIENoYW5nZXMgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgLSBtb3ZlZCBvdmVyIHRvIGxpbnV4Pj0yLjQueCBpMmMgcHJvdG9jb2wgKDEvMS8yMDAzKQotICoKLSAqIENoYW5nZXMgYnkgTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4KLSAqICAgIC0gaW1wbGVtZW50ZWQgREVDT0RFUl9TRVRfR1BJTywgREVDT0RFUl9JTklULCBERUNPREVSX1NFVF9WQklfQllQQVNTCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMSB2aWRlbyBkZWNvZGVyIGRyaXZlciIpOwotTU9EVUxFX0FVVEhPUigiRGF2ZSBQZXJrcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNkZWZpbmUgU0FBNzExMV9OUl9SRUcJCTB4MTgKLQotc3RydWN0IHNhYTcxMTEgewotCXVuc2lnbmVkIGNoYXIgcmVnW1NBQTcxMTFfTlJfUkVHXTsKLQotCWludCBub3JtOwotCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaWYgKGRlY29kZXItPnJlZ1tyZWddICE9IHZhbHVlKSB7Ci0JCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7Ci0JCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlpbnQgcmV0ID0gLTE7Ci0JdTggcmVnOwotCi0JLyogdGhlIHNhYTcxMTEgaGFzIGFuIGF1dG9pbmNyZW1lbnQgZnVuY3Rpb24sIHVzZSBpdCBpZgotCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KLQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7Ci0JCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCXU4IGJsb2NrX2RhdGFbMzJdOwotCQlpbnQgYmxvY2tfbGVuOwotCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJYmxvY2tfbGVuID0gMDsKLQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gcmVnID0gZGF0YVswXTsKLQkJCWRvIHsKLQkJCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9Ci0JCQkJICAgIGRlY29kZXItPnJlZ1tyZWcrK10gPSBkYXRhWzFdOwotCQkJCWxlbiAtPSAyOwotCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKLQkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzExMV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJCWxlbiAtPSAyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzYWE3MTExX2luaXRfZGVjb2RlcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0KQotewotCXJldHVybiBzYWE3MTExX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdC0+ZGF0YSwgaW5pdC0+bGVuKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExMV9pMmNfaW5pdFtdID0gewotCTB4MDAsIDB4MDAsCQkvKiAwMCAtIElEIGJ5dGUgKi8KLQkweDAxLCAweDAwLAkJLyogMDEgLSByZXNlcnZlZCAqLwotCi0JLypmcm9udCBlbmQgKi8KLQkweDAyLCAweGQwLAkJLyogMDIgLSBGVVNFPTMsIEdVREw9MiwgTU9ERT0wICovCi0JMHgwMywgMHgyMywJCS8qIDAzIC0gSExOUlM9MCwgVkJTTD0xLCBXUE9GRj0wLAotCQkJCSAqIEhPTERHPTAsIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLwotCTB4MDQsIDB4MDAsCQkvKiAwNCAtIEdBSTE9MjU2ICovCi0JMHgwNSwgMHgwMCwJCS8qIDA1IC0gR0FJMj0yNTYgKi8KLQotCS8qIGRlY29kZXIgKi8KLQkweDA2LCAweGYzLAkJLyogMDYgLSBIU0IgYXQgIDEzKDUwSHopIC8gIDE3KDYwSHopCi0JCQkJICogcGl4ZWxzIGFmdGVyIGVuZCBvZiBsYXN0IGxpbmUgKi8KLQkvKjB4MDcsIDB4MTMsICAgICAqIDA3IC0gSFNTIGF0IDExMyg1MEh6KSAvIDExNyg2MEh6KSBwaXhlbHMKLQkJCQkgKiBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCi0JMHgwNywgMHhlOCwJCS8qIDA3IC0gSFNTIHNlZW1zIHRvIGJlIG5lZWRlZCB0bwotCQkJCSAqIHdvcmsgd2l0aCBOVFNDLCB0b28gKi8KLQkweDA4LCAweGM4LAkJLyogMDggLSBBVUZEPTEsIEZTRUw9MSwgRVhGSUw9MCwKLQkJCQkgKiBWVFJDPTEsIEhQTEw9MCwgVk5PST0wICovCi0JMHgwOSwgMHgwMSwJCS8qIDA5IC0gQllQUz0wLCBQUkVGPTAsIEJQU1M9MCwKLQkJCQkgKiBWQkxCPTAsIFVQVENWPTAsIEFQRVI9MSAqLwotCTB4MGEsIDB4ODAsCQkvKiAwYSAtIEJSSUc9MTI4ICovCi0JMHgwYiwgMHg0NywJCS8qIDBiIC0gQ09OVD0xLjEwOSAqLwotCTB4MGMsIDB4NDAsCQkvKiAwYyAtIFNBVE49MS4wICovCi0JMHgwZCwgMHgwMCwJCS8qIDBkIC0gSFVFPTAgKi8KLQkweDBlLCAweDAxLAkJLyogMGUgLSBDRFRPPTAsIENTVEQ9MCwgRENDRj0wLAotCQkJCSAqIEZDVEM9MCwgQ0hCVz0xICovCi0JMHgwZiwgMHgwMCwJCS8qIDBmIC0gcmVzZXJ2ZWQgKi8KLQkweDEwLCAweDQ4LAkJLyogMTAgLSBPRlRTPTEsIEhERUw9MCwgVlJMTj0xLCBZREVMPTAgKi8KLQkweDExLCAweDFjLAkJLyogMTEgLSBHUFNXPTAsIENNOTk9MCwgRkVDTz0wLCBDT01QTz0xLAotCQkJCSAqIE9FWUM9MSwgT0VIVj0xLCBWSVBCPTAsIENPTE89MCAqLwotCTB4MTIsIDB4MDAsCQkvKiAxMiAtIG91dHB1dCBjb250cm9sIDIgKi8KLQkweDEzLCAweDAwLAkJLyogMTMgLSBvdXRwdXQgY29udHJvbCAzICovCi0JMHgxNCwgMHgwMCwJCS8qIDE0IC0gcmVzZXJ2ZWQgKi8KLQkweDE1LCAweDAwLAkJLyogMTUgLSBWQkkgKi8KLQkweDE2LCAweDAwLAkJLyogMTYgLSBWQkkgKi8KLQkweDE3LCAweDAwLAkJLyogMTcgLSBWQkkgKi8KLX07Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTExICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSBERUNPREVSX0lOSVQ6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0ICppbml0ID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQotCQlpZiAoTlVMTCAhPSBpbml0KQotCQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgaW5pdCk7Ci0JCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQkJdmRpLmxlbiA9IHNpemVvZihzYWE3MTExX2kyY19pbml0KTsKLQkJcmV0dXJuIHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JfQotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgU0FBNzExMV9OUl9SRUc7IGkgKz0gMTYpIHsKLQkJCWludCBqOwotCi0JCQl2NGxfaW5mbyhjbGllbnQsICIlMDN4IiwgaSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMTYgJiYgaSArIGogPCBTQUE3MTExX05SX1JFRzsgKytqKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAotCQkJCSAgICAgICBzYWE3MTExX3JlYWQoY2xpZW50LCBpICsgaikpOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9BVVRPIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDg7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCQlpbnQgcmVzOwotCi0JCXN0YXR1cyA9IHNhYTcxMTFfcmVhZChjbGllbnQsIDB4MWYpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKLQkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfSBlbHNlIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0dQSU86Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMSwKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTFdIHwgMHg4MCkpOwotCQl9IGVsc2UgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJKGRlY29kZXItPnJlZ1sweDExXSAmIDB4N2YpKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX1ZCSV9CWVBBU1M6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWlmICgwICE9ICppYXJnKSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkgfCAweDBhKTsKLQkJfSBlbHNlIHsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDEzLAotCQkJCShkZWNvZGVyLT5yZWdbMHgxM10gJiAweGYwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweDNmKSB8IDB4NDApOwotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGUsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDBlXSAmIDB4OGYpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDAwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSB8IDB4NTApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDgwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJfQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDcpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPmlucHV0ICE9ICppYXJnKSB7Ci0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCQkJLyogc2VsZWN0IG1vZGUgKi8KLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfCBkZWNvZGVyLT5pbnB1dCk7Ci0JCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNC4uNyAqLwotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDksCi0JCQkJICAgICAgKGRlY29kZXItPgotCQkJCSAgICAgICByZWdbMHgwOV0gJiAweDdmKSB8ICgoZGVjb2Rlci0+Ci0JCQkJCQkJICAgICBpbnB1dCA+Ci0JCQkJCQkJICAgICAzKSA/IDB4ODAgOgotCQkJCQkJCSAgICAwKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7Ci0JCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7Ci0KLQkJCS8qIFJKOiBJZiBvdXRwdXQgc2hvdWxkIGJlIGRpc2FibGVkIChmb3IKLQkJCSAqIHBsYXlpbmcgdmlkZW9zKSwgd2UgYWxzbyBuZWVkIGEgb3BlbiBQTEwuCi0JCQkgKiBUaGUgaW5wdXQgaXMgc2V0IHRvIDAgKHdoZXJlIG5vIGlucHV0Ci0JCQkgKiBzb3VyY2UgaXMgY29ubmVjdGVkKSwgYWx0aG91Z2ggdGhpcwotCQkJICogaXMgbm90IG5lY2Vzc2FyeS4KLQkJCSAqCi0JCQkgKiBJZiBvdXRwdXQgc2hvdWxkIGJlIGVuYWJsZWQsIHdlIGhhdmUgdG8KLQkJCSAqIHJldmVyc2UgdGhlIGFib3ZlLgotCQkJICovCi0KLQkJCWlmIChkZWNvZGVyLT5lbmFibGUpIHsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkJICAgICAgKGRlY29kZXItPgotCQkJCQkgICAgICAgcmVnWzB4MDJdICYgMHhmOCkgfAotCQkJCQkgICAgICBkZWNvZGVyLT5pbnB1dCk7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwOF0gJiAweGZiKSk7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkJICAgICAgIHJlZ1sweDExXSAmIDB4ZjMpIHwgMHgwYyk7Ci0JCQl9IGVsc2UgewotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDJdICYgMHhmOCkpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJCSAgICAgICByZWdbMHgwOF0gJiAweGZiKSB8IDB4MDQpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MTFdICYgMHhmMykpOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJLyogV2Ugd2FudCAwIHRvIDI1NSB3ZSBnZXQgMC02NTUzNSAqLwotCQlzYWE3MTExX3dyaXRlX2lmX2NoYW5nZWQoY2xpZW50LCAweDBhLCBwaWMtPmJyaWdodG5lc3MgPj4gOCk7Ci0JCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGIsIHBpYy0+Y29udHJhc3QgPj4gOSk7Ci0JCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MGMsIHBpYy0+Y29sb3VyID4+IDkpOwotCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBkLCAocGljLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCi1zdGF0aWMgaW50IHNhYTcxMTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlcjsKLQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHZkaTsKLQotCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAotCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7Ci0KLQlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGVjb2RlciA9PSBOVUxMKSB7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCWRlY29kZXItPmlucHV0ID0gMDsKLQlkZWNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwotCi0JdmRpLmRhdGEgPSBzYWE3MTExX2kyY19pbml0OwotCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JaSA9IHNhYTcxMTFfaW5pdF9kZWNvZGVyKGNsaWVudCwgJnZkaSk7Ci0JaWYgKGkgPCAwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKLQl9IGVsc2UgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAleFxuIiwKLQkJCXNhYTcxMTFfcmVhZChjbGllbnQsIDB4MDApID4+IDQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTFfaWRbXSA9IHsKLQl7ICJzYWE3MTExX29sZCIsIDAgfSwJLyogInNhYTcxMTEiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTFfaWQpOwotCi1zdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7Ci0JLm5hbWUgPSAic2FhNzExMSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTFBLAotCS5jb21tYW5kID0gc2FhNzExMV9jb21tYW5kLAotCS5wcm9iZSA9IHNhYTcxMTFfcHJvYmUsCi0JLnJlbW92ZSA9IHNhYTcxMTFfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHNhYTcxMTFfaWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NhNzA5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTQuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNjggKzAsMCBAQAotLyoKLSAqIHNhYTcxMTQgLSBQaGlsaXBzIFNBQTcxMTRIIHZpZGVvIGRlY29kZXIgZHJpdmVyIHZlcnNpb24gMC4wLjEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgTWF4aW0gWWV2dHl1c2hraW4gPG1heEBsaW51eG1lZGlhbGFicy5jb20+Ci0gKgotICogQmFzZWQgb24gc2FhNzExMSBkcml2ZXIgYnkgRGF2ZSBQZXJrcwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OCBEYXZlIFBlcmtzIDxkcGVya3NAaWJtLm5ldD4KLSAqCi0gKiBTbGlnaHQgY2hhbmdlcyBmb3IgdmlkZW8gdGltaW5nIGFuZCBhdHRhY2htZW50IG91dHB1dCBieQotICogV29sZmdhbmcgU2NoZXJyIDxzY2hlcnJAbmV0NHlvdS5uZXQ+Ci0gKgotICogQ2hhbmdlcyBieSBSb25hbGQgQnVsdGplIDxyYnVsdGplQHJvbmFsZC5iaXRmcmVhay5uZXQ+Ci0gKiAgICAtIG1vdmVkIG92ZXIgdG8gbGludXg+PTIuNC54IGkyYyBwcm90b2NvbCAoMS8xLzIwMDMpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExNEggdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk1heGltIFlldnR5dXNoa2luIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBpbnQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RydWN0IHNhYTcxMTQgewotCXVuc2lnbmVkIGNoYXIgcmVnWzB4ZjAgKiAyXTsKLQotCWludCBub3JtOwotCWludCBpbnB1dDsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKLQlpbnQgcGxheWJhY2s7Ci19OwotCi0jZGVmaW5lICAgSTJDX0RFTEFZICAgMTAKLQotCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVCAgICAgICAoLTMpCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QICAgICAgICAoLTE4KQotCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQgICgtMTcpCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUCAgICgtMzIpCi0KLS8vI2RlZmluZSBTQUFfNzExNF9OVFNDX0hPRkZTRVQgICAgICAgICAgICg1KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hPRkZTRVQJCSg2KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19XSURUSCAgICAgICAgICAgICAoNzIwKQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hFSUdIVCAgICAgICAgICAgICgyNTApCi0KLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSFNZTkNfU1RBUlQgICAgICAoLTE3KQotI2RlZmluZSBTQUFfNzExNF9TRUNBTV9IU1lOQ19TVE9QICAgICAgICgtMzIpCi0KLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSE9GRlNFVCAgICAgICAgICAoMikKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fVk9GRlNFVCAgICAgICAgICAoMTApCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX1dJRFRIICAgICAgICAgICAgKDcyMCkKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSEVJR0hUICAgICAgICAgICAoMzAwKQotCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVCAgICAgICAgKC0xNykKLSNkZWZpbmUgU0FBXzcxMTRfUEFMX0hTWU5DX1NUT1AgICAgICAgICAoLTMyKQotCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IT0ZGU0VUICAgICAgICAgICAgKDIpCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9WT0ZGU0VUICAgICAgICAgICAgKDEwKQotI2RlZmluZSBTQUFfNzExNF9QQUxfV0lEVEggICAgICAgICAgICAgICg3MjApCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IRUlHSFQgICAgICAgICAgICAgKDMwMCkKLQotCi0KLSNkZWZpbmUgU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCAgICAgICAgIDAJLy8weDUwNTA0MDQwCi0jZGVmaW5lIFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUICAgICAgICAgICAwCi0KLSNkZWZpbmUgUkVHX0FERFIoeCkgKCgoeCkgPDwgMSkgKyAxKQotI2RlZmluZSBMT0JZVEUoeCkgKCh1bnNpZ25lZCBjaGFyKSgoeCkgJiAweGZmKSkKLSNkZWZpbmUgSElCWVRFKHgpICgodW5zaWduZWQgY2hhcikoKCh4KSA+PiA4KSAmIDB4ZmYpKQotI2RlZmluZSBMT1dPUkQoeCkgKCh1bnNpZ25lZCBzaG9ydCBpbnQpKCh4KSAmIDB4ZmZmZikpCi0jZGVmaW5lIEhJV09SRCh4KSAoKHVuc2lnbmVkIHNob3J0IGludCkoKCh4KSA+PiAxNikgJiAweGZmZmYpKQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHNhYTcxMTRfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC0xOwotCXU4IHJlZzsKLQotCS8qIHRoZSBzYWE3MTE0IGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKLQkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCi0JaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQl1OCBibG9ja19kYXRhWzMyXTsKLQkJaW50IGJsb2NrX2xlbjsKLQotCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCWJsb2NrX2xlbiA9IDA7Ci0JCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07Ci0JCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSBkYXRhWzFdOwotCQkJCXJlZysrOwotCQkJCWxlbiAtPSAyOwotCQkJCWRhdGEgKz0gMjsKLQkJCX0gd2hpbGUgKGxlbiA+PSAyICYmIGRhdGFbMF0gPT0gcmVnICYmIGJsb2NrX2xlbiA8IDMyKTsKLQkJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJsb2NrX2RhdGEsIGJsb2NrX2xlbik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzExNF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhazsKLQkJCWxlbiAtPSAyOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2FhNzExNF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLy8gaW5pdGlhbGx5IHNldCBOVFNDLCBjb21wb3NpdGUKLQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpbml0W10gPSB7Ci0JMHgwMCwgMHgwMCwJCS8qIDAwIC0gSUQgYnl0ZSAsIGNoaXAgdmVyc2lvbiwKLQkJCQkgKiByZWFkIG9ubHkgKi8KLQkweDAxLCAweDA4LAkJLyogMDEgLSBYLFgsWCxYLCBJREVMMyB0byBJREVMMCAtCi0JCQkJICogaG9yaXpvbnRhbCBpbmNyZW1lbnQgZGVsYXksCi0JCQkJICogcmVjb21tZW5kZWQgcG9zaXRpb24gKi8KLQkweDAyLCAweDAwLAkJLyogMDIgLSBGVVNFPTMsIEdVREw9MiwgTU9ERT0wIDsKLQkJCQkgKiBpbnB1dCBjb250cm9sICovCi0JMHgwMywgMHgxMCwJCS8qIDAzIC0gSExOUlM9MCwgVkJTTD0xLCBXUE9GRj0wLAotCQkJCSAqIEhPTERHPTAsIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLwotCTB4MDQsIDB4OTAsCQkvKiAwNCAtIEdBSTE9MjU2ICovCi0JMHgwNSwgMHg5MCwJCS8qIDA1IC0gR0FJMj0yNTYgKi8KLQkweDA2LCBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJULAkvKiAwNiAtIEhTQjogaHN5bmMgc3RhcnQsCi0JCQkJICogZGVwZW5kcyBvbiB0aGUgdmlkZW8gc3RhbmRhcmQgKi8KLQkweDA3LCBTQUFfNzExNF9OVFNDX0hTWU5DX1NUT1AsCS8qIDA3IC0gSFNTOiBoc3luYyBzdG9wLCBkZXBlbmRzCi0JCQkJICpvbiB0aGUgdmlkZW8gc3RhbmRhcmQgKi8KLQkweDA4LCAweGI4LAkJLyogMDggLSBBVUZEPTEsIEZTRUw9MSwgRVhGSUw9MCwgVlRSQz0xLAotCQkJCSAqIEhQTEw6IGZyZWUgcnVubmluZyBpbiBwbGF5YmFjaywgbG9ja2VkCi0JCQkJICogaW4gY2FwdHVyZSwgVk5PST0wICovCi0JMHgwOSwgMHg4MCwJCS8qIDA5IC0gQllQUz0wLCBQUkVGPTAsIEJQU1M9MCwgVkJMQj0wLAotCQkJCSAqIFVQVENWPTAsIEFQRVI9MTsgZGVwZW5kcyBmcm9tIGlucHV0ICovCi0JMHgwYSwgMHg4MCwJCS8qIDBhIC0gQlJJRz0xMjggKi8KLQkweDBiLCAweDQ0LAkJLyogMGIgLSBDT05UPTEuMTA5ICovCi0JMHgwYywgMHg0MCwJCS8qIDBjIC0gU0FUTj0xLjAgKi8KLQkweDBkLCAweDAwLAkJLyogMGQgLSBIVUU9MCAqLwotCTB4MGUsIDB4ODQsCQkvKiAwZSAtIENEVE8sIENTVEQyIHRvIDAsIERDVkYsIEZDVEMsCi0JCQkJICogQ0NPTUI7IGRlcGVuZHMgZnJvbSB2aWRlbyBzdGFuZGFyZCAqLwotCTB4MGYsIDB4MjQsCQkvKiAwZiAtIEFDR0MsQ0dBSU42IHRvIENHQUlOMDsgZGVwZW5kcwotCQkJCSAqIGZyb20gdmlkZW8gc3RhbmRhcmQgKi8KLQkweDEwLCAweDAzLAkJLyogMTAgLSBPRkZVMSB0byAwLCBPRkZWMSB0byAwLCBDSEJXLAotCQkJCSAqIExDQlcyIHRvIDAgKi8KLQkweDExLCAweDU5LAkJLyogMTEgLSBDT0xPLCBSVFAxLCBIRURMMSB0byAwLCBSVFAwLAotCQkJCSAqIFlERUwyIHRvIDAgKi8KLQkweDEyLCAweGM5LAkJLyogMTIgLSBSVCBzaWduYWwgY29udHJvbCBSVFNFMTMgdG8gMTAKLQkJCQkgKiBhbmQgMDMgdG8gMDAgKi8KLQkweDEzLCAweDgwLAkJLyogMTMgLSBSVC9YIHBvcnQgb3V0cHV0IGNvbnRyb2wgICovCi0JMHgxNCwgMHgwMCwJCS8qIDE0IC0gYW5hbG9nLCBBREMsIGNvbXBhdGliaWxpdHkgY29udHJvbCAqLwotCTB4MTUsIDB4MDAsCQkvKiAxNSAtIFZHQVRFIHN0YXJ0IEZJRCBjaGFuZ2UgICovCi0JMHgxNiwgMHhmZSwJCS8qIDE2IC0gVkdBVEUgc3RvcCAqLwotCTB4MTcsIDB4MDAsCQkvKiAxNyAtIE1pc2MuLCBWR0FURSBNU0JzICovCi0JMHgxOCwgMHg0MCwJCS8qIFJBV0cgKi8KLQkweDE5LCAweDgwLAkJLyogUkFXTyAqLwotCTB4MWEsIDB4MDAsCi0JMHgxYiwgMHgwMCwKLQkweDFjLCAweDAwLAotCTB4MWQsIDB4MDAsCi0JMHgxZSwgMHgwMCwKLQkweDFmLCAweDAwLAkJLyogc3RhdHVzIGJ5dGUsIHJlYWQgb25seSAqLwotCTB4MjAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDIxLCAweDAwLAotCTB4MjIsIDB4MDAsCi0JMHgyMywgMHgwMCwKLQkweDI0LCAweDAwLAotCTB4MjUsIDB4MDAsCi0JMHgyNiwgMHgwMCwKLQkweDI3LCAweDAwLAotCTB4MjgsIDB4MDAsCi0JMHgyOSwgMHgwMCwKLQkweDJhLCAweDAwLAotCTB4MmIsIDB4MDAsCi0JMHgyYywgMHgwMCwKLQkweDJkLCAweDAwLAotCTB4MmUsIDB4MDAsCi0JMHgyZiwgMHgwMCwKLQkweDMwLCAweGJjLAkJLyogYXVkaW8gY2xvY2sgZ2VuZXJhdG9yICovCi0JMHgzMSwgMHhkZiwKLQkweDMyLCAweDAyLAotCTB4MzMsIDB4MDAsCi0JMHgzNCwgMHhjZCwKLQkweDM1LCAweGNjLAotCTB4MzYsIDB4M2EsCi0JMHgzNywgMHgwMCwKLQkweDM4LCAweDAzLAotCTB4MzksIDB4MTAsCi0JMHgzYSwgMHgwMCwKLQkweDNiLCAweDAwLAotCTB4M2MsIDB4MDAsCi0JMHgzZCwgMHgwMCwKLQkweDNlLCAweDAwLAotCTB4M2YsIDB4MDAsCi0JMHg0MCwgMHgwMCwJCS8qIFZCSSBkYXRhIHNsaWNlciAqLwotCTB4NDEsIDB4ZmYsCi0JMHg0MiwgMHhmZiwKLQkweDQzLCAweGZmLAotCTB4NDQsIDB4ZmYsCi0JMHg0NSwgMHhmZiwKLQkweDQ2LCAweGZmLAotCTB4NDcsIDB4ZmYsCi0JMHg0OCwgMHhmZiwKLQkweDQ5LCAweGZmLAotCTB4NGEsIDB4ZmYsCi0JMHg0YiwgMHhmZiwKLQkweDRjLCAweGZmLAotCTB4NGQsIDB4ZmYsCi0JMHg0ZSwgMHhmZiwKLQkweDRmLCAweGZmLAotCTB4NTAsIDB4ZmYsCi0JMHg1MSwgMHhmZiwKLQkweDUyLCAweGZmLAotCTB4NTMsIDB4ZmYsCi0JMHg1NCwgMHhmZiwKLQkweDU1LCAweGZmLAotCTB4NTYsIDB4ZmYsCi0JMHg1NywgMHhmZiwKLQkweDU4LCAweDQwLAkJLy8gZnJhbWluZyBjb2RlCi0JMHg1OSwgMHg0NywJCS8vIGhvcml6b250YWwgb2Zmc2V0Ci0JMHg1YSwgMHgwNiwJCS8vIHZlcnRpY2FsIG9mZnNldAotCTB4NWIsIDB4ODMsCQkvLyBmaWVsZCBvZmZzZXQKLQkweDVjLCAweDAwLAkJLy8gcmVzZXJ2ZWQKLQkweDVkLCAweDNlLAkJLy8gaGVhZGVyIGFuZCBkYXRhCi0JMHg1ZSwgMHgwMCwJCS8vIHNsaWNlZCBkYXRhCi0JMHg1ZiwgMHgwMCwJCS8vIHJlc2VydmVkCi0JMHg2MCwgMHgwMCwJCS8qIHZpZGVvIGRlY29kZXIgcmVzZXJ2ZWQgcGFydCAqLwotCTB4NjEsIDB4MDAsCi0JMHg2MiwgMHgwMCwKLQkweDYzLCAweDAwLAotCTB4NjQsIDB4MDAsCi0JMHg2NSwgMHgwMCwKLQkweDY2LCAweDAwLAotCTB4NjcsIDB4MDAsCi0JMHg2OCwgMHgwMCwKLQkweDY5LCAweDAwLAotCTB4NmEsIDB4MDAsCi0JMHg2YiwgMHgwMCwKLQkweDZjLCAweDAwLAotCTB4NmQsIDB4MDAsCi0JMHg2ZSwgMHgwMCwKLQkweDZmLCAweDAwLAotCTB4NzAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDcxLCAweDAwLAotCTB4NzIsIDB4MDAsCi0JMHg3MywgMHgwMCwKLQkweDc0LCAweDAwLAotCTB4NzUsIDB4MDAsCi0JMHg3NiwgMHgwMCwKLQkweDc3LCAweDAwLAotCTB4NzgsIDB4MDAsCi0JMHg3OSwgMHgwMCwKLQkweDdhLCAweDAwLAotCTB4N2IsIDB4MDAsCi0JMHg3YywgMHgwMCwKLQkweDdkLCAweDAwLAotCTB4N2UsIDB4MDAsCi0JMHg3ZiwgMHgwMCwKLQkweDgwLCAweDAwLAkJLyogWC1wb3J0LCBJLXBvcnQgYW5kIHNjYWxlciAqLwotCTB4ODEsIDB4MDAsCi0JMHg4MiwgMHgwMCwKLQkweDgzLCAweDAwLAotCTB4ODQsIDB4YzUsCi0JMHg4NSwgMHgwZCwJCS8vIGhzeW5jIGFuZCB2c3luYyA/Ci0JMHg4NiwgMHg0MCwKLQkweDg3LCAweDAxLAotCTB4ODgsIDB4MDAsCi0JMHg4OSwgMHgwMCwKLQkweDhhLCAweDAwLAotCTB4OGIsIDB4MDAsCi0JMHg4YywgMHgwMCwKLQkweDhkLCAweDAwLAotCTB4OGUsIDB4MDAsCi0JMHg4ZiwgMHgwMCwKLQkweDkwLCAweDAzLAkJLyogVGFzayBBIGRlZmluaXRpb24gICAgICAgICAgICovCi0JMHg5MSwgMHgwOCwKLQkweDkyLCAweDAwLAotCTB4OTMsIDB4NDAsCi0JMHg5NCwgMHgwMCwJCS8vIHdpbmRvdyBzZXR0aW5ncwotCTB4OTUsIDB4MDAsCi0JMHg5NiwgMHgwMCwKLQkweDk3LCAweDAwLAotCTB4OTgsIDB4MDAsCi0JMHg5OSwgMHgwMCwKLQkweDlhLCAweDAwLAotCTB4OWIsIDB4MDAsCi0JMHg5YywgMHgwMCwKLQkweDlkLCAweDAwLAotCTB4OWUsIDB4MDAsCi0JMHg5ZiwgMHgwMCwKLQkweGEwLCAweDAxLAkJLyogaG9yaXpvbnRhbCBpbnRlZ2VyIHByZXNjYWxpbmcgcmF0aW8gKi8KLQkweGExLCAweDAwLAkJLyogaG9yaXpvbnRhbCBwcmVzY2FsZXIgYWNjdW11bGF0aW9uCi0JCQkJICogc2VxdWVuY2UgbGVuZ3RoICovCi0JMHhhMiwgMHgwMCwJCS8qIFVWIEZJUiBmaWx0ZXIsIFkgRklSIGZpbHRlciwgcHJlc2NhbGVyCi0JCQkJICogREMgZ2FpbiAqLwotCTB4YTMsIDB4MDAsCi0JMHhhNCwgMHg4MCwJCS8vIGx1bWluYW5jZSBicmlnaHRuZXNzCi0JMHhhNSwgMHg0MCwJCS8vIGx1bWluYW5jZSBnYWluCi0JMHhhNiwgMHg0MCwJCS8vIGNocm9taW5hbmNlIHNhdHVyYXRpb24KLQkweGE3LCAweDAwLAotCTB4YTgsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YTksIDB4MDQsCi0JMHhhYSwgMHgwMCwJCS8vIGhvcml6b250YWwgbHVtaW5hbmNlIHBoYXNlIG9mZnNldAotCTB4YWIsIDB4MDAsCi0JMHhhYywgMHgwMCwJCS8vIGhvcml6b250YWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGFkLCAweDAyLAotCTB4YWUsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHBoYXNlIG9mZnNldAotCTB4YWYsIDB4MDAsCi0JMHhiMCwgMHgwMCwJCS8vIHZlcnRpY2FsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YjEsIDB4MDQsCi0JMHhiMiwgMHgwMCwJCS8vIHZlcnRpY2FsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhiMywgMHgwNCwKLQkweGI0LCAweDAwLAotCTB4YjUsIDB4MDAsCi0JMHhiNiwgMHgwMCwKLQkweGI3LCAweDAwLAotCTB4YjgsIDB4MDAsCi0JMHhiOSwgMHgwMCwKLQkweGJhLCAweDAwLAotCTB4YmIsIDB4MDAsCi0JMHhiYywgMHgwMCwKLQkweGJkLCAweDAwLAotCTB4YmUsIDB4MDAsCi0JMHhiZiwgMHgwMCwKLQkweGMwLCAweDAyLAkJLy8gVGFzayBCIGRlZmluaXRpb24KLQkweGMxLCAweDA4LAotCTB4YzIsIDB4MDAsCi0JMHhjMywgMHg0MCwKLQkweGM0LCAweDAwLAkJLy8gd2luZG93IHNldHRpbmdzCi0JMHhjNSwgMHgwMCwKLQkweGM2LCAweDAwLAotCTB4YzcsIDB4MDAsCi0JMHhjOCwgMHgwMCwKLQkweGM5LCAweDAwLAotCTB4Y2EsIDB4MDAsCi0JMHhjYiwgMHgwMCwKLQkweGNjLCAweDAwLAotCTB4Y2QsIDB4MDAsCi0JMHhjZSwgMHgwMCwKLQkweGNmLCAweDAwLAotCTB4ZDAsIDB4MDEsCQkvLyBob3Jpem9udGFsIGludGVnZXIgcHJlc2NhbGluZyByYXRpbwotCTB4ZDEsIDB4MDAsCQkvLyBob3Jpem9udGFsIHByZXNjYWxlciBhY2N1bXVsYXRpb24gc2VxdWVuY2UgbGVuZ3RoCi0JMHhkMiwgMHgwMCwJCS8vIFVWIEZJUiBmaWx0ZXIsIFkgRklSIGZpbHRlciwgcHJlc2NhbGVyIERDIGdhaW4KLQkweGQzLCAweDAwLAotCTB4ZDQsIDB4ODAsCQkvLyBsdW1pbmFuY2UgYnJpZ2h0bmVzcwotCTB4ZDUsIDB4NDAsCQkvLyBsdW1pbmFuY2UgZ2FpbgotCTB4ZDYsIDB4NDAsCQkvLyBjaHJvbWluYW5jZSBzYXR1cmF0aW9uCi0JMHhkNywgMHgwMCwKLQkweGQ4LCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGQ5LCAweDA0LAotCTB4ZGEsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGRiLCAweDAwLAotCTB4ZGMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhkZCwgMHgwMiwKLQkweGRlLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGRmLCAweDAwLAotCTB4ZTAsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGUxLCAweDA0LAotCTB4ZTIsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4ZTMsIDB4MDQsCi0JMHhlNCwgMHgwMCwKLQkweGU1LCAweDAwLAotCTB4ZTYsIDB4MDAsCi0JMHhlNywgMHgwMCwKLQkweGU4LCAweDAwLAotCTB4ZTksIDB4MDAsCi0JMHhlYSwgMHgwMCwKLQkweGViLCAweDAwLAotCTB4ZWMsIDB4MDAsCi0JMHhlZCwgMHgwMCwKLQkweGVlLCAweDAwLAotCTB4ZWYsIDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLy9kcHJpbnRrKDEsIEtFUk5fSU5GTyAiJXM6IHdyaXRpbmcgaW5pdFxuIiwgSTJDX05BTUUoY2xpZW50KSk7Ci0JCS8vc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQlpbnQgaTsKLQotCQlpZiAoIWRlYnVnKQotCQkJYnJlYWs7Ci0JCXY0bF9pbmZvKGNsaWVudCwgImRlY29kZXIgZHVtcFxuIik7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDMyOyBpICs9IDE2KSB7Ci0JCQlpbnQgajsKLQotCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHsKLQkJCQlwcmludGsoS0VSTl9DT05UICIgJTAyeCIsCi0JCQkJICAgICAgIHNhYTcxMTRfcmVhZChjbGllbnQsIGkgKyBqKSk7Ci0JCQl9Ci0JCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSA4OwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlczsKLQotCQlzdGF0dXMgPSBzYWE3MTE0X3JlYWQoY2xpZW50LCAweDFmKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6IDB4JTAyeFxuIiwgc3RhdHVzKTsKLQkJcmVzID0gMDsKLQkJaWYgKChzdGF0dXMgJiAoMSA8PCA2KSkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0Q7Ci0JCX0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJaWYgKChzdGF0dXMgJiAoMSA8PCA1KSkgIT0gMCkgewotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJfSBlbHNlIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChzdGF0dXMgJiAoMSA8PCAwKSkgIT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJc2hvcnQgaW50IGhvZmYgPSAwLCB2b2ZmID0gMCwgdyA9IDAsIGggPSAwOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtXG4iKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiTlRTQ1xuIik7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KLQkJCSAgICBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUOwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDcpXSA9Ci0JCQkgICAgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gZGVjb2Rlci0+cGxheWJhY2sgPyAweDdjIDogMHhiODsJLy8gUExMIGZyZWUgd2hlbiBwbGF5YmFjaywgUExMIGNsb3NlIHdoZW4gY2FwdHVyZQotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0gMHg4NTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBmKV0gPSAweDI0OwotCi0JCQlob2ZmID0gU0FBXzcxMTRfTlRTQ19IT0ZGU0VUOwotCQkJdm9mZiA9IFNBQV83MTE0X05UU0NfVk9GRlNFVDsKLQkJCXcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwotCQkJaCA9IFNBQV83MTE0X05UU0NfSEVJR0hUOwotCi0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiUEFMXG4iKTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA2KV0gPQotCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVEFSVDsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQotCQkJICAgIFNBQV83MTE0X1BBTF9IU1lOQ19TVE9QOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gZGVjb2Rlci0+cGxheWJhY2sgPyAweDdjIDogMHhiODsJLy8gUExMIGZyZWUgd2hlbiBwbGF5YmFjaywgUExMIGNsb3NlIHdoZW4gY2FwdHVyZQotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0gMHg4MTsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBmKV0gPSAweDI0OwotCi0JCQlob2ZmID0gU0FBXzcxMTRfUEFMX0hPRkZTRVQ7Ci0JCQl2b2ZmID0gU0FBXzcxMTRfUEFMX1ZPRkZTRVQ7Ci0JCQl3ID0gU0FBXzcxMTRfUEFMX1dJRFRIOwotCQkJaCA9IFNBQV83MTE0X1BBTF9IRUlHSFQ7Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJVbmtub3duIHZpZGVvIG1vZGVcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWEpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWIpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzQpXSA9IExPQllURShob2ZmKTsJLy8gaG9mZnNldCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzUpXSA9IEhJQllURShob2ZmKSAmIDB4MGY7CS8vIGhvZmZzZXQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzcpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIHdpZHRoIGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzgpXSA9IExPQllURSh2b2ZmKTsJLy8gdm9mZnNldCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYSldID0gTE9CWVRFKGggKyAyKTsJLy8gaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYildID0gSElCWVRFKGggKyAyKSAmIDB4MGY7CS8vIGhlaWdodCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNjKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2QpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIG91dCB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNlKV0gPSBMT0JZVEUoaCk7CS8vIG91dCBoZWlnaHQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uLCB0YXNrIEEmQiBvZmYKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCi0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwNiA8PCAxKSwKLQkJCQkgICAgMyA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDBlIDw8IDEpLAotCQkJCSAgICAyIDw8IDEpOwotCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4NWEgPDwgMSksCi0JCQkJICAgIDIgPDwgMSk7Ci0KLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDk0IDw8IDEpLAotCQkJCSAgICAoMHg5ZiArIDEgLSAweDk0KSA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGM0IDw8IDEpLAotCQkJCSAgICAoMHhjZiArIDEgLSAweGM0KSA8PCAxKTsKLQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFjayBlbmQgY2xvY2sgc2VsZWN0aW9uCi0KLQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBpbnB1dCAoJWQpXG4iLCAqaWFyZyk7Ci0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm93IHNldHRpbmcgJXMgaW5wdXRcbiIsCi0JCQkJKmlhcmcgPj0gNiA/ICJTLVZpZGVvIiA6ICJDb21wb3NpdGUiKTsKLQkJCWRlY29kZXItPmlucHV0ID0gKmlhcmc7Ci0KLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildID0KLQkJCSAgICAoZGVjb2Rlci0+Ci0JCQkgICAgIHJlZ1tSRUdfQUREUigweDAyKV0gJiAweGYwKSB8IChkZWNvZGVyLT4KLQkJCQkJCQkgICAgaW5wdXQgPAotCQkJCQkJCSAgICA2ID8gMHgwIDogMHg5KTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwotCi0JCQkvKiBieXBhc3MgY2hyb21pbmFuY2UgdHJhcCBmb3IgbW9kZXMgNi4uOSAqLwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSA9Ci0JCQkgICAgKGRlY29kZXItPgotCQkJICAgICByZWdbUkVHX0FERFIoMHgwOSldICYgMHg3ZikgfCAoZGVjb2Rlci0+Ci0JCQkJCQkJICAgIGlucHV0IDwKLQkJCQkJCQkgICAgNiA/IDB4MCA6Ci0JCQkJCQkJICAgIDB4ODApOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDksCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSk7Ci0KLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gPQotCQkJICAgIGRlY29kZXItPmlucHV0IDwKLQkJCSAgICA2ID8gZGVjb2Rlci0+Ci0JCQkgICAgcmVnW1JFR19BRERSKDB4MGUpXSB8IDEgOiBkZWNvZGVyLT4KLQkJCSAgICByZWdbUkVHX0FERFIoMHgwZSldICYgfjE7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0XG4iKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBlbmFibGUgPSAoKmlhcmcgIT0gMCk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXMgb3V0cHV0XG4iLAotCQkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwotCi0JCWRlY29kZXItPnBsYXliYWNrID0gIWVuYWJsZTsKLQotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOwotCi0JCQkvKiBSSjogSWYgb3V0cHV0IHNob3VsZCBiZSBkaXNhYmxlZCAoZm9yCi0JCQkgKiBwbGF5aW5nIHZpZGVvcyksIHdlIGFsc28gbmVlZCBhIG9wZW4gUExMLgotCQkJICogVGhlIGlucHV0IGlzIHNldCB0byAwICh3aGVyZSBubyBpbnB1dAotCQkJICogc291cmNlIGlzIGNvbm5lY3RlZCksIGFsdGhvdWdoIHRoaXMKLQkJCSAqIGlzIG5vdCBuZWNlc3NhcnkuCi0JCQkgKgotCQkJICogSWYgb3V0cHV0IHNob3VsZCBiZSBlbmFibGVkLCB3ZSBoYXZlIHRvCi0JCQkgKiByZXZlcnNlIHRoZSBhYm92ZS4KLQkJCSAqLwotCi0JCQlpZiAoZGVjb2Rlci0+ZW5hYmxlKSB7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IDB4Yjg7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MTIpXSA9IDB4Yzk7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MTMpXSA9IDB4ODA7Ci0JCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSA9IDB4MDE7Ci0JCQl9IGVsc2UgewotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0gPSAweDdjOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweDAwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDAwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAwOwotCQkJfQotCi0JCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwKLQkJCQkJICAgIGRlY29kZXItPnJlZyArICgweDEyIDw8IDEpLAotCQkJCQkgICAgMiA8PCAxKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0pOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODcsCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwotCi0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkiZGVjb2RlciBzZXQgcGljdHVyZSBicmlnaHQ9JWQgY29udHJhc3Q9JWQgc2F0dXJhdGlvbj0lZCBodWU9JWRcbiIsCi0JCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyLCBwaWMtPmh1ZSk7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBhLCBkZWNvZGVyLT5icmlnaHQgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBiLAotCQkJCSAgICAgIGRlY29kZXItPmNvbnRyYXN0ID4+IDkpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byAxMjcgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPnNhdCA9IHBpYy0+Y29sb3VyOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGMsIGRlY29kZXItPnNhdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBkLAotCQkJCSAgICAgIChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gOCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4NDIgPj4gMSwgMHg0MCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIGludCBzYWE3MTE0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGksIGVyclszMF07Ci0Jc2hvcnQgaW50IGhvZmYgPSBTQUFfNzExNF9OVFNDX0hPRkZTRVQ7Ci0Jc2hvcnQgaW50IHZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7Ci0Jc2hvcnQgaW50IHcgPSBTQUFfNzExNF9OVFNDX1dJRFRIOwotCXNob3J0IGludCBoID0gU0FBXzcxMTRfTlRTQ19IRUlHSFQ7Ci0Jc3RydWN0IHNhYTcxMTQgKmRlY29kZXI7Ci0KLQkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQlkZWNvZGVyLT5pbnB1dCA9IC0xOwotCWRlY29kZXItPmVuYWJsZSA9IDE7Ci0JZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKLQlkZWNvZGVyLT5odWUgPSAzMjc2ODsKLQlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKLQlkZWNvZGVyLT5wbGF5YmFjayA9IDA7CS8vIGluaXRpYWxseSBjYXB0dXJlIG1vZGUgdXNlZGEKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKLQotCW1lbWNweShkZWNvZGVyLT5yZWcsIGluaXQsIHNpemVvZihpbml0KSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWIpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDljKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzUpXSA9IEhJQllURShob2ZmKSAmIDB4MGY7CS8vIGhvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM2KV0gPSBMT0JZVEUodyk7CS8vIHdpZHRoIGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzgpXSA9IExPQllURSh2b2ZmKTsJLy8gdm9mZnNldCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjOSldID0gSElCWVRFKHZvZmYpICYgMHgwZjsJLy8gdm9mZnNldCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2EpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYildID0gSElCWVRFKGggKyAyKSAmIDB4MGY7CS8vIGhlaWdodCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2MpXSA9IExPQllURSh3KTsJLy8gb3V0IHdpZHRoIGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNlKV0gPSBMT0JZVEUoaCk7CS8vIG91dCBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2YpXSA9IEhJQllURShoKSAmIDB4MGY7CS8vIG91dCBoZWlnaHQgaGlnaAotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YjgpXSA9Ci0JICAgIExPQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGI5KV0gPQotCSAgICBISUJZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiYSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmIpXSA9Ci0JICAgIEhJQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmMpXSA9Ci0JICAgIExPQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiZCldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJlKV0gPQotCSAgICBMT0JZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmYpXSA9Ci0JICAgIEhJQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGU4KV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlOSldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWEpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGViKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVjKV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWQpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlZSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVmKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0KLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDgwOwkvLyBSVEMwIG9uCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ODcpXSA9IDB4MDE7CS8vIEktUG9ydAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweGM5OwkvLyBSVFMwCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildID0gMHhjMDsJLy8gc2V0IGNvbXBvc2l0ZTEgaW5wdXQsIGF2ZWFzeQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0gPSAweDAwOwkvLyBjaHJvbWluYW5jZSB0cmFwCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSB8PSAxOwkvLyBjb21iZmlsdGVyIG9uCi0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXJ0aW5nIGluaXRcbiIpOwotCi0JZXJyWzBdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDIwIDw8IDEpLAotCQkJCTB4MTAgPDwgMSk7Ci0JZXJyWzFdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDMwIDw8IDEpLAotCQkJCTB4MTAgPDwgMSk7Ci0JZXJyWzJdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDYzIDw8IDEpLAotCQkJCSgweDdmICsgMSAtIDB4NjMpIDw8IDEpOwotCWVyclszXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4OSA8PCAxKSwKLQkJCQk2IDw8IDEpOwotCWVycls0XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhiOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVycls1XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhlOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCi0KLQlmb3IgKGkgPSAwOyBpIDw9IDU7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKLQotCWVycls2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDA2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgotCWVycls3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JZXJyWzhdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCi0JZm9yIChpID0gNjsgaSA8PSA4OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyB0aGUgcmVzdCBvZiBpbml0XG4iKTsKLQotCWVycls5XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDAxLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMSldKTsKLQllcnJbMTBdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDAzIDw8IDEpLCAoMHgxZSArIDEgLSAweDAzKSA8PCAxKTsJLy8gYmlnIHNlcQotCWVyclsxMV0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4NDAgPDwgMSksICgweDVmICsgMSAtIDB4NDApIDw8IDEpOwkvLyBzbGljZXIKLQllcnJbMTJdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDgxIDw8IDEpLCAyIDw8IDEpOwkvLyA/Ci0JZXJyWzEzXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4MyA8PCAxKSwgNSA8PCAxKTsJLy8gPwotCWVyclsxNF0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4OTAgPDwgMSksIDQgPDwgMSk7CS8vIFRhc2sgQQotCWVyclsxNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4OTQgPDwgMSksCi0JCQkJMTIgPDwgMSk7Ci0JZXJyWzE2XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhhMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxN10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YTggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMThdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGIwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE5XSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjMCA8PCAxKSwgNCA8PCAxKTsJLy8gVGFzayBCCi0JZXJyWzE1XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjNCA8PCAxKSwKLQkJCQkxMiA8PCAxKTsKLQllcnJbMTZdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGQwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE3XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhkOCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxOF0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZTAgPDwgMSksCi0JCQkJOCA8PCAxKTsKLQotCWZvciAoaSA9IDk7IGkgPD0gMTg7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQotCWZvciAoaSA9IDY7IGkgPCA4OyBpKyspIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKLQl9Ci0KLQotCWZvciAoaSA9IDB4MTE7IGkgPD0gMHgxMzsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXR0aW5nIHZpZGVvIGlucHV0XG4iKTsKLQotCWVyclsxOV0gPQotCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSk7Ci0JZXJyWzIwXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA5LCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOSldKTsKLQllcnJbMjFdID0KLQkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0pOwotCi0JZm9yIChpID0gMTk7IGkgPD0gMjE7IGkrKykgewotCQlpZiAoZXJyW2ldIDwgMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJCSJpbml0IGVycm9yICVkIGF0IHN0YWdlICVkLCBsZWF2aW5nIGF0dGFjaC5cbiIsCi0JCQkJaSwgZXJyW2ldKTsKLQkJCWtmcmVlKGRlY29kZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJwZXJmb3JtaW5nIGRlY29kZXIgcmVzZXQgc2VxdWVuY2VcbiIpOwotCi0JZXJyWzIyXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JZXJyWzIzXSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQllcnJbMjRdID0gc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODAsIDB4MzYpOwkvLyBpLXBvcnQgYW5kIHNjYWxlciBiYWNrZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCi0KLQotCWZvciAoaSA9IDIyOyBpIDw9IDI0OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JZXJyWzI1XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA2LCBpbml0W1JFR19BRERSKDB4MDYpXSk7Ci0JZXJyWzI2XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA3LCBpbml0W1JFR19BRERSKDB4MDcpXSk7Ci0JZXJyWzI3XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDEwLCBpbml0W1JFR19BRERSKDB4MTApXSk7Ci0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjaGlwIHZlcnNpb24gJXgsIGRlY29kZXIgc3RhdHVzIDB4JTAyeFxuIiwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgwMCkgPj4gNCwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZikpOwotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJInBvd2VyIHNhdmUgY29udHJvbDogMHglMDJ4LCBzY2FsZXIgc3RhdHVzOiAweCUwMnhcbiIsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4ODgpLAotCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDhmKSk7Ci0KLQotCWZvciAoaSA9IDB4OTQ7IGkgPCAweDk2OyBpKyspIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJInJlZ1sweCUwMnhdID0gMHglMDJ4ICgweCUwMngpXG4iLAotCQkJaSwgc2FhNzExNF9yZWFkKGNsaWVudCwgaSksCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoaSldKTsKLQl9Ci0KLQkvL2kgPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdCwgc2l6ZW9mKGluaXQpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTE0X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNhYTcxMTRfaWRbXSA9IHsKLQl7ICJzYWE3MTE0X29sZCIsIDAgfSwJLyogInNhYTcxMTQiIG1hcHMgdG8gdGhlIHNhYTcxMTUgZHJpdmVyICovCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxMTRfaWQpOwotCi1zdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7Ci0JLm5hbWUgPSAic2FhNzExNCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0JLmNvbW1hbmQgPSBzYWE3MTE0X2NvbW1hbmQsCi0JLnByb2JlID0gc2FhNzExNF9wcm9iZSwKLQkucmVtb3ZlID0gc2FhNzExNF9yZW1vdmUsCi0JLmlkX3RhYmxlID0gc2FhNzExNF9pZCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCmluZGV4IDQ2Yzc5NmMuLmNlYmYxNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jCkBAIC03NzgsNyArNzc4LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyNyB8fCBjdHJsLT52YWx1ZSA+IDEyNykgeworCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CiAJCQl2NGwyX2VycihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CkBAIC05MzEsOCArOTMxLDggQEAKIAkvKiBQcmV2ZW50IHVubmVjZXNzYXJ5IHN0YW5kYXJkIGNoYW5nZXMuIER1cmluZyBhIHN0YW5kYXJkCiAJICAgY2hhbmdlIHRoZSBJLVBvcnQgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQuIEFueSBkZXZpY2VzCiAJICAgcmVhZGluZyBmcm9tIHRoYXQgcG9ydCBjYW4gZ2V0IGNvbmZ1c2VkLgotCSAgIE5vdGUgdGhhdCBWSURJT0NfU19TVEQgaXMgYWxzbyB1c2VkIHRvIHN3aXRjaCBmcm9tCi0JICAgcmFkaW8gdG8gVFYgbW9kZSwgc28gaWYgYSBWSURJT0NfU19TVEQgaXMgYnJvYWRjYXN0IHRvCisJICAgTm90ZSB0aGF0IHNfc3RkIGlzIGFsc28gdXNlZCB0byBzd2l0Y2ggZnJvbQorCSAgIHJhZGlvIHRvIFRWIG1vZGUsIHNvIGlmIGEgc19zdGQgaXMgYnJvYWRjYXN0IHRvCiAJICAgYWxsIEkyQyBkZXZpY2VzIHRoZW4geW91IGRvIG5vdCB3YW50IHRvIGhhdmUgYW4gdW53YW50ZWQKIAkgICBzaWRlLWVmZmVjdCBoZXJlLiAqLwogCWlmIChzdGQgPT0gc3RhdGUtPnN0ZCkKQEAgLTEyMDYsMTAgKzEyMDYsMTIgQEAKIHsKIAlzd2l0Y2ggKHFjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTMwOCwxMSArMTMxMCwxMiBAQAogCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzIG91dHB1dFxuIiwKIAkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKIAotCWlmIChzdGF0ZS0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQlzdGF0ZS0+ZW5hYmxlID0gZW5hYmxlOwotCQlzYWE3MTF4X3dyaXRlKHNkLCBSXzg3X0lfUE9SVF9JX09fRU5BX09VVF9DTEtfQU5EX0dBVEVELAotCQkJCXN0YXRlLT5lbmFibGUpOwotCX0KKwlpZiAoc3RhdGUtPmVuYWJsZSA9PSBlbmFibGUpCisJCXJldHVybiAwOworCXN0YXRlLT5lbmFibGUgPSBlbmFibGU7CisJaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LCBSXzg3X0lfUE9SVF9JX09fRU5BX09VVF9DTEtfQU5EX0dBVEVEKSkKKwkJcmV0dXJuIDA7CisJc2FhNzExeF93cml0ZShzZCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwgc3RhdGUtPmVuYWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNzAsNiArMTM3Myw0NyBAQAogCX0KIH0KIAorc3RhdGljIGludCBzYWE3MTF4X3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByZWcxZTsKKworCSpzdGQgPSBWNEwyX1NURF9BTEw7CisJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTUpCisJCXJldHVybiAwOworCXJlZzFlID0gc2FhNzExeF9yZWFkKHNkLCBSXzFFX1NUQVRVU19CWVRFXzFfVkRfREVDKTsKKworCXN3aXRjaCAocmVnMWUgJiAweDAzKSB7CisJY2FzZSAxOgorCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqc3RkID0gVjRMMl9TVERfUEFMOworCQlicmVhazsKKwljYXNlIDM6CisJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCWludCByZWcxZSA9IDB4ODA7CisJaW50IHJlZzFmOworCisJKnN0YXR1cyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTE1KQorCQlyZWcxZSA9IHNhYTcxMXhfcmVhZChzZCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisJcmVnMWYgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpOworCWlmICgocmVnMWYgJiAweGMxKSA9PSAweDgxICYmIChyZWcxZSAmIDB4YzApID09IDB4ODApCisJCSpzdGF0dXMgPSAwOworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogc3RhdGljIGludCBzYWE3MTF4X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7CkBAIC0xNDkzLDYgKzE1MzcsOCBAQAogCS5nX3ZiaV9kYXRhID0gc2FhNzExeF9nX3ZiaV9kYXRhLAogCS5kZWNvZGVfdmJpX2xpbmUgPSBzYWE3MTF4X2RlY29kZV92YmlfbGluZSwKIAkuc19zdHJlYW0gPSBzYWE3MTF4X3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IHNhYTcxMXhfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gc2FhNzExeF9nX2lucHV0X3N0YXR1cywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTcxMXhfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwppbmRleCAwNTIyMWQ0Li4xMjhiYjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMjcuYwpAQCAtODEwLDcgKzgxMCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE3MTI3IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzEyNywKIAkucHJvYmUgPSBzYWE3MTI3X3Byb2JlLAogCS5yZW1vdmUgPSBzYWE3MTI3X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBzYWE3MTI3X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwppbmRleCBmYzIxNjRlLi4wYmE2ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwpAQCAtNiw2ICs2LDcgQEAKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgQ1JDMzIKKwlzZWxlY3QgVklERU9fU0FBNjU4OCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIFBoaWxpcHMgU0FBNzEzeCBiYXNlZAogCSAgVFYgY2FyZHMuCkBAIC0zNSw4ICszNiwxNiBAQAogCXNlbGVjdCBEVkJfVERBMTAwODYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1REQTgyNlggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lTTDY0MjEgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IERWQl9JU0w2NDA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfWkwxMDAzNiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTVQzMTIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTEdEVDMzMDUgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgRFZCIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKaW5kZXggMWZlZTZlOC4uZGMyMjEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYwpAQCAtMzMsOSArMzMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKQEAgLTQ0LDEwICs0NSw2IEBACiAjZGVmaW5lIE1QRUdfVE9UQUxfVEFSR0VUX0JJVFJBVEVfTUFYICAyNzAwMAogI2RlZmluZSBNUEVHX1BJRF9NQVggKCgxIDw8IDE0KSAtIDEpCiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gezB4MjAsIEkyQ19DTElFTlRfRU5EfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiZGV2aWNlIGRyaXZlciBmb3Igc2FhNjc1MmhzIE1QRUcyIGVuY29kZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHJldyBkZSBRdWluY2V5Iik7CkBAIC05NSw2ICs5Miw3IEBACiB9OwogCiBzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgICAgICAgICAgICBzZDsKIAlpbnQgCQkJICAgICAgY2hpcDsKIAl1MzIgCQkJICAgICAgcmV2aXNpb247CiAJaW50IAkJCSAgICAgIGhhc19hYzM7CkBAIC0xMTUsNiArMTEzLDExIEBACiAJU0FBNjc1MkhTX0NPTU1BTkRfTUFYCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTY3NTJoc19zdGF0ZSwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyB1OCBQQVRbXSA9IHsKQEAgLTM2MCwxODUgKzM2MywxOTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2FhNjc1MmhzX3NldF9zdWJzYW1wbGluZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKworc3RhdGljIGludCBnZXRfY3RybChpbnQgaGFzX2FjMywgc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zLAorCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGRpc3RfMzUyLCBkaXN0XzQ4MCwgZGlzdF83MjA7Ci0KLQkvKgotCSAgRklYTUU6IHRyYW5zbGF0ZSBhbmQgcm91bmQgd2lkdGgvaGVpZ2h0IGludG8gRU1QUkVTUwotCSAgc3Vic2FtcGxlIHR5cGU6Ci0KLQkgIHR5cGUgICB8ICAgUEFMICAgfCAgTlRTQwotCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICBTSUYgICAgfCAzNTJ4Mjg4IHwgMzUyeDI0MAotCSAgMS8yIEQxIHwgMzUyeDU3NiB8IDM1Mng0ODAKLQkgIDIvMyBEMSB8IDQ4MHg1NzYgfCA0ODB4NDgwCi0JICBEMSAgICAgfCA3MjB4NTc2IHwgNzIweDQ4MAotCSovCi0KLQlkaXN0XzM1MiA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gMzUyKTsKLQlkaXN0XzQ4MCA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gNDgwKTsKLQlkaXN0XzcyMCA9IGFicyhmLT5mbXQucGl4LndpZHRoIC0gNzIwKTsKLQlpZiAoZGlzdF83MjAgPCBkaXN0XzQ4MCkgewotCQlmLT5mbXQucGl4LndpZHRoID0gNzIwOwotCQlmLT5mbXQucGl4LmhlaWdodCA9IDU3NjsKLQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOwotCX0KLQllbHNlIGlmIChkaXN0XzQ4MCA8IGRpc3RfMzUyKSB7Ci0JCWYtPmZtdC5waXgud2lkdGggPSA0ODA7Ci0JCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMl8zX0QxOwotCX0KLQllbHNlIHsKLQkJZi0+Zm10LnBpeC53aWR0aCA9IDM1MjsKLQkJaWYgKGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDU3NikgPAotCQkgICAgYWJzKGYtPmZtdC5waXguaGVpZ2h0IC0gMjg4KSkgewotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7Ci0JCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMV8yX0QxOwotCQl9Ci0JCWVsc2UgewotCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyODg7Ci0JCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfU0lGOwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgaGFuZGxlX2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKLQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIHVuc2lnbmVkIGludCBjbWQpCi17Ci0JaW50IG9sZCA9IDAsIG5ldzsKLQlpbnQgc2V0ID0gKGNtZCA9PSBWSURJT0NfU19FWFRfQ1RSTFMpOwotCi0JbmV3ID0gY3RybC0+dmFsdWU7CiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCQlvbGQgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQluZXcgPSBvbGQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfcG10OwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3BtdCA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX2F1ZGlvID0gbmV3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfdmlkZW87Ci0JCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJbmV3ID0gTVBFR19QSURfTUFYOwotCQkJcGFyYW1zLT50c19waWRfdmlkZW8gPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgotCQkJb2xkID0gcGFyYW1zLT50c19waWRfcGNyOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3BjciA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6Ci0JCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKLQkJCSAgICAoIWhhc19hYzMgfHwgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgotCQkJb2xkID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SyAmJgotCQkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLKQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1Nks7Ci0JCQllbHNlCi0JCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SzsKLQkJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6Ci0JCQlpZiAoIWhhc19hYzMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlvbGQgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKLQkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOwotCQkJZWxzZQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOwotCQkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKLQkJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKLQkJCW9sZCA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7Ci0JCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQluZXcgPSBvbGQ7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYXNwZWN0OwotCQkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ICYmCi0JCQkJICAgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDkpCi0JCQkJbmV3ID0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDM7Ci0JCQlwYXJhbXMtPnZpX2FzcGVjdCA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7Ci0JCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZSA9IG5ldyAvIDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKLQkJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICogMTAwMDsKLQkJCW5ldyA9IDEwMDAgKiAobmV3IC8gMTAwMCk7Ci0JCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJbmV3ID0gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwOwotCQkJcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgPSBuZXcgLyAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZTsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID0gbmV3OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3BtdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT50c19waWRfYXVkaW87CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT50c19waWRfcGNyOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWlmICghaGFzX2FjMykKIAkJCXJldHVybiAtRUlOVkFMOworCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfYWMzX2JpdHJhdGU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnZpX2FzcGVjdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlX21vZGU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoY21kID09IFZJRElPQ19HX0VYVF9DVFJMUykKLQkJY3RybC0+dmFsdWUgPSBvbGQ7Ci0JZWxzZQotCQljdHJsLT52YWx1ZSA9IG5ldzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcWN0cmwoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3N0YXRpYyBpbnQgaGFuZGxlX2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwsIGludCBzZXQpCiB7CisJaW50IG9sZCA9IDAsIG5ldzsKKworCW5ldyA9IGN0cmwtPnZhbHVlOworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCW9sZCA9IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUzsKKwkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5ldyA9IG9sZDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9wbXQ7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQluZXcgPSBNUEVHX1BJRF9NQVg7CisJCXBhcmFtcy0+dHNfcGlkX3BtdCA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86CisJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9hdWRpbyA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86CisJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF92aWRlbyA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9wY3I7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQluZXcgPSBNUEVHX1BJRF9NQVg7CisJCXBhcmFtcy0+dHNfcGlkX3BjciA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlvbGQgPSBwYXJhbXMtPmF1X2VuY29kaW5nOworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiAmJgorCQkgICAgKCFoYXNfYWMzIHx8IG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlvbGQgPSBwYXJhbXMtPmF1X2wyX2JpdHJhdGU7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPD0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SykKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1Nks7CisJCWVsc2UKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEs7CisJCXBhcmFtcy0+YXVfbDJfYml0cmF0ZSA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQlpZiAoIWhhc19hYzMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJb2xkID0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKKwkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1NksgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLKQorCQkJbmV3ID0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzI1Nks7CisJCWVsc2UKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLOworCQlwYXJhbXMtPmF1X2FjM19iaXRyYXRlID0gbmV3OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJb2xkID0gVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJb2xkID0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMjsKKwkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5ldyA9IG9sZDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKKwkJb2xkID0gcGFyYW1zLT52aV9hc3BlY3Q7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAmJgorCQkJICAgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5KQorCQkJbmV3ID0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDM7CisJCXBhcmFtcy0+dmlfYXNwZWN0ID0gbmV3OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlICogMTAwMDsKKwkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKKwkJcGFyYW1zLT52aV9iaXRyYXRlID0gbmV3IC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKKwkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgKiAxMDAwOworCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQorCQkJbmV3ID0gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwOworCQlwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayA9IG5ldyAvIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlOworCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9IG5ldzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN0cmwtPnZhbHVlID0gbmV3OworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyAqcGFyYW1zID0gJmgtPnBhcmFtczsKIAlpbnQgZXJyOwogCkBAIC01ODMsNyArNTkyLDcgQEAKIAkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4Myk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlID09CiAJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIpCkBAIC01OTcsMTIgKzYwNiwyMCBAQAogCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUyk7CiAKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIsIDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpOwogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA2MDAwMDAwKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMTYpOwogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI2MCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU2KTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI1OSk7CiAKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTYxMCw4ICs2MjcsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19xbWVudShzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoLAotCQlzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQorc3RhdGljIGludCBzYWE2NzUyaHNfcXVlcnltZW51KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCiB7CiAJc3RhdGljIGNvbnN0IHUzMiBtcGVnX2F1ZGlvX2VuY29kaW5nW10gPSB7CiAJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLApAQCAtNjMyLDExICs2NDgsMTIgQEAKIAkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEssCiAJCVY0TDJfQ1RSTF9NRU5VX0lEU19FTkQKIAl9OworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjdHJsOwogCWludCBlcnI7CiAKIAlxY3RybC5pZCA9IHFtZW51LT5pZDsKLQllcnIgPSBzYWE2NzUyaHNfcWN0cmwoaCwgJnFjdHJsKTsKKwllcnIgPSBzYWE2NzUyaHNfcXVlcnljdHJsKHNkLCAmcWN0cmwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJc3dpdGNoIChxbWVudS0+aWQpIHsKQEAgLTY1NiwxNyArNjczLDE2IEBACiAJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9tZW51KHFtZW51LCAmcWN0cmwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHNhYTY3NTJoc19pbml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiBsZWFkaW5nX251bGxfYnl0ZXMpCitzdGF0aWMgaW50IHNhYTY3NTJoc19pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBsZWFkaW5nX251bGxfYnl0ZXMpCiB7CiAJdW5zaWduZWQgY2hhciBidWZbOV0sIGJ1ZjJbNF07Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaDsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAl1bnNpZ25lZCBzaXplOwogCXUzMiBjcmM7CiAJdW5zaWduZWQgY2hhciBsb2NhbFBBVFsyNTZdOwogCXVuc2lnbmVkIGNoYXIgbG9jYWxQTVRbMjU2XTsKIAotCWggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCS8qIFNldCB2aWRlbyBmb3JtYXQgLSBtdXN0IGJlIGRvbmUgZmlyc3QgYXMgaXQgcmVzZXRzIG90aGVyIHNldHRpbmdzICovCiAJc2V0X3JlZzgoY2xpZW50LCAweDQxLCBoLT52aWRlb19mb3JtYXQpOwogCkBAIC03NjIsNyArNzc4LDcgQEAKIAlidWZbM10gPSAweDgyOwogCWJ1Zls0XSA9IDB4QjA7CiAJYnVmWzVdID0gYnVmMlswXTsKLQlzd2l0Y2goaC0+cGFyYW1zLnZpX2FzcGVjdCkgeworCXN3aXRjaCAoaC0+cGFyYW1zLnZpX2FzcGVjdCkgewogCWNhc2UgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5OgogCQlidWZbNl0gPSBidWYyWzFdIHwgMHg0MDsKIAkJYnJlYWs7CkBAIC03NzAsNyArNzg2LDYgQEAKIAlkZWZhdWx0OgogCQlidWZbNl0gPSBidWYyWzFdICYgMHhCRjsKIAkJYnJlYWs7Ci0JCWJyZWFrOwogCX0KIAlidWZbN10gPSBidWYyWzJdOwogCWJ1Zls4XSA9IGJ1ZjJbM107CkBAIC03NzksODEgKzc5NCwxNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotc2FhNjc1MmhzX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMsIGludCBzZXQpCiB7Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMgPSBhcmc7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zIHBhcmFtczsKLQlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfSU5UX0lOSVQ6Ci0JCS8qIGFwcGx5IHNldHRpbmdzIGFuZCBzdGFydCBlbmNvZGVyICovCi0JCXNhYTY3NTJoc19pbml0KGNsaWVudCwgKih1MzIgKilhcmcpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQkJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgVklESU9DX1RSWV9FWFRfQ1RSTFM6Ci0JY2FzZSBWSURJT0NfR19FWFRfQ1RSTFM6Ci0JCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlwYXJhbXMgPSBoLT5wYXJhbXM7Ci0JCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgewotCQkJZXJyID0gaGFuZGxlX2N0cmwoaC0+aGFzX2FjMywgJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgY21kKTsKLQkJCWlmIChlcnIpIHsKLQkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQorCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJhbXMgPSBoLT5wYXJhbXM7CisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCWludCBlcnIgPSBoYW5kbGVfY3RybChoLT5oYXNfYWMzLCAmcGFyYW1zLCBjdHJscy0+Y29udHJvbHMgKyBpLCBzZXQpOworCisJCWlmIChlcnIpIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKIAkJfQorCX0KKwlpZiAoc2V0KQogCQloLT5wYXJhbXMgPSBwYXJhbXM7Ci0JCWJyZWFrOwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIHNhYTY3NTJoc19xY3RybChoLCBhcmcpOwotCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQkJcmV0dXJuIHNhYTY3NTJoc19xbWVudShoLCBhcmcpOwotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkgICBpZiAoaC0+dmlkZW9fZm9ybWF0ID09IFNBQTY3NTJIU19WRl9VTktOT1dOKQotCQkgICBoLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7Ci0JICAgZi0+Zm10LnBpeC53aWR0aCA9Ci0JCSAgIHY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC53aWR0aDsKLQkgICBmLT5mbXQucGl4LmhlaWdodCA9Ci0JCSAgIHY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC5oZWlnaHQ7Ci0JICAgYnJlYWsgOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQotCQlzYWE2NzUyaHNfc2V0X3N1YnNhbXBsaW5nKGNsaWVudCwgZik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19TX1NURDoKLQkJaC0+c3RhbmRhcmQgPSAqKCh2NGwyX3N0ZF9pZCAqKSBhcmcpOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0RCR19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsCi0JCQkJYXJnLCBoLT5jaGlwLCBoLT5yZXZpc2lvbik7Ci0KLQlkZWZhdWx0OgotCQkvKiBub3RoaW5nICovCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJcmV0dXJuIHNhYTY3NTJoc19kb19leHRfY3RybHMoc2QsIGN0cmxzLCAxKTsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXJldHVybiBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHNkLCBjdHJscywgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2dfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgaTsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJaW50IGVyciA9IGdldF9jdHJsKGgtPmhhc19hYzMsICZoLT5wYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGkpOworCisJCWlmIChlcnIpIHsKKwkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoaC0+dmlkZW9fZm9ybWF0ID09IFNBQTY3NTJIU19WRl9VTktOT1dOKQorCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7CisJZi0+Zm10LnBpeC53aWR0aCA9CisJCXY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9CisJCXY0bDJfZm9ybWF0X3RhYmxlW2gtPnZpZGVvX2Zvcm1hdF0uZm10LnBpeC5oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCWludCBkaXN0XzM1MiwgZGlzdF80ODAsIGRpc3RfNzIwOworCisJLyoKKwkgIEZJWE1FOiB0cmFuc2xhdGUgYW5kIHJvdW5kIHdpZHRoL2hlaWdodCBpbnRvIEVNUFJFU1MKKwkgIHN1YnNhbXBsZSB0eXBlOgorCisJICB0eXBlICAgfCAgIFBBTCAgIHwgIE5UU0MKKwkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgU0lGICAgIHwgMzUyeDI4OCB8IDM1MngyNDAKKwkgIDEvMiBEMSB8IDM1Mng1NzYgfCAzNTJ4NDgwCisJICAyLzMgRDEgfCA0ODB4NTc2IHwgNDgweDQ4MAorCSAgRDEgICAgIHwgNzIweDU3NiB8IDcyMHg0ODAKKwkqLworCisJZGlzdF8zNTIgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDM1Mik7CisJZGlzdF80ODAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDQ4MCk7CisJZGlzdF83MjAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDcyMCk7CisJaWYgKGRpc3RfNzIwIDwgZGlzdF80ODApIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDcyMDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9EMTsKKwl9IGVsc2UgaWYgKGRpc3RfNDgwIDwgZGlzdF8zNTIpIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDQ4MDsKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl8yXzNfRDE7CisJfSBlbHNlIHsKKwkJZi0+Zm10LnBpeC53aWR0aCA9IDM1MjsKKwkJaWYgKGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDU3NikgPAorCQkgICAgYWJzKGYtPmZtdC5waXguaGVpZ2h0IC0gMjg4KSkgeworCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7CisJCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMV8yX0QxOworCQl9IGVsc2UgeworCQkJZi0+Zm10LnBpeC5oZWlnaHQgPSAyODg7CisJCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfU0lGOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKworCWgtPnN0YW5kYXJkID0gc3RkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAorCQkJY2hpcCwgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTY3NTJoc19jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNjc1MmhzX2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IHNhYTY3NTJoc19pbml0LAorCS5xdWVyeWN0cmwgPSBzYWE2NzUyaHNfcXVlcnljdHJsLAorCS5xdWVyeW1lbnUgPSBzYWE2NzUyaHNfcXVlcnltZW51LAorCS5nX2V4dF9jdHJscyA9IHNhYTY3NTJoc19nX2V4dF9jdHJscywKKwkuc19leHRfY3RybHMgPSBzYWE2NzUyaHNfc19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSBzYWE2NzUyaHNfdHJ5X2V4dF9jdHJscywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHNhYTY3NTJoc190dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNjc1MmhzX3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNjc1MmhzX3ZpZGVvX29wcyA9IHsKKwkuc19mbXQgPSBzYWE2NzUyaHNfc19mbXQsCisJLmdfZm10ID0gc2FhNjc1MmhzX2dfZm10LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNjc1MmhzX29wcyA9IHsKKwkuY29yZSA9ICZzYWE2NzUyaHNfY29yZV9vcHMsCisJLnR1bmVyID0gJnNhYTY3NTJoc190dW5lcl9vcHMsCisJLnZpZGVvID0gJnNhYTY3NTJoc192aWRlb19vcHMsCit9OworCiBzdGF0aWMgaW50IHNhYTY3NTJoc19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGt6YWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAl1OCBhZGRyID0gMHgxMzsKIAl1OCBkYXRhWzEyXTsKIApAQCAtODYxLDYgKzk1Nyw4IEBACiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAlpZiAoaCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZoLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNjc1MmhzX29wcyk7CiAKIAlpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCAmYWRkciwgMSk7CiAJaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKQEAgLTg3NCwxNCArOTcyLDE1IEBACiAJfQogCWgtPnBhcmFtcyA9IHBhcmFtX2RlZmF1bHRzOwogCWgtPnN0YW5kYXJkID0gMDsgLyogQXNzdW1lIDYyNSBpbnB1dCBsaW5lcyAqLwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNjc1MmhzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODkzLDggKzk5Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE2NzUyaHMiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE2NzUySFMsCi0JLmNvbW1hbmQgPSBzYWE2NzUyaHNfY29tbWFuZCwKIAkucHJvYmUgPSBzYWE2NzUyaHNfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTY3NTJoc19yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNjc1MmhzX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggZTJmZWJjZC4uYTc5MGE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgInRlYTU3NjcuaCIKKyNpbmNsdWRlICJ0ZGExODI3MS5oIgogCiAvKiBjb21tbHkgdXNlZCBzdHJpbmdzICovCiBzdGF0aWMgY2hhciBuYW1lX211dGVbXSAgICA9ICJtdXRlIjsKQEAgLTI3Miw2ICsyNzMsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLApAQCAtNDA4LDYgKzQxMCw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mCT0gVERBOTg4N19QUkVTRU5ULAogCQkuZ3Bpb21hc2sJPSAweDgyMDAwMCwKIAkJLmlucHV0cwkJPSB7ewpAQCAtODE4LDYgKzgyMSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAogCQkJLnZtdXggPSA0LApAQCAtOTc3LDYgKzk4MSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAogCQkJLnZtdXggPSAxLApAQCAtMTY5OSw2ICsxNzA0LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmRzX2FkZHIgCT0gMHgxMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtMjM2NCw2ICsyMzcwLDcgQEAKIAkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMSwKIAkJLmlucHV0cwkJPSB7ewogCQkJLm5hbWUgICA9ICJDb21wb3NpdGUgMCIsCiAJCQkudm11eCAgID0gMCwKQEAgLTMyOTEsNiArMzI5OCw2OCBAQAogCQkJLmdwaW8gPSAweDAyMDAxMDAsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMF0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTEyMCBBVFNDL1FBTS1IeWJyaWQiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAzLAorCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAorCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19TRVJJQUwsCisJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMSBpcyBhbiBJTlBVVCAqLworCQkuaW5wdXRzICAgICAgICAgPSB7eworCQkJLm5hbWUgPSBuYW1lX3R2LAorCQkJLnZtdXggPSAxLAorCQkJLmFtdXggPSBUViwKKwkJCS50diAgID0gMSwKKwkJCS5ncGlvID0gMHgwMDAwMTAwLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfY29tcDEsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LCB7CisJCQkubmFtZSA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggPSA4LAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSB9LAorCQkucmFkaW8gPSB7CisJCQkubmFtZSA9IG5hbWVfcmFkaW8sCisJCQkuYW11eCA9IFRWLAorCQkJLmdwaW8gPSAweDA4MDAxMDAsIC8qIEdQSU8gMjMgSEkgZm9yIEZNICovCisJCX0sCisJfSwKKwlbU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzXSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkhhdXBwYXVnZSBXaW5UVi1IVlIxMTEwcjMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1REQTgyOTAsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkudHVuZXJfY29uZmlnICAgPSAzLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDA4MDAxMDAsIC8qIEdQSU8gMjEgaXMgYW4gSU5QVVQgKi8KKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAwMDEwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwODAwMTAwLCAvKiBHUElPIDIzIEhJIGZvciBGTSAqLworCQl9LAorCX0sCiAJW1NBQTcxMzRfQk9BUkRfQ0lORVJHWV9IVF9QQ01DSUFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiVGVycmF0ZWMgQ2luZXJneSBIVCBQQ01DSUEiLAogCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LApAQCAtNDA3MCw2ICs0MTM5LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQxMDYsNiArNDE3Niw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfdHYsCkBAIC00MTQzLDYgKzQyMTQsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtNDMyMywxMyArNDM5NSwxMyBAQAogCQkJIC5hbXV4ID0gVFYsCiAJCQkgLnR2ICAgPSAxLAogCQkgfSwgewotCQkJIC5uYW1lID0gbmFtZV9jb21wLAotCQkJIC52bXV4ID0gMCwKKwkJCSAubmFtZSA9IG5hbWVfY29tcDEsCisJCQkgLnZtdXggPSAzLAogCQkJIC5hbXV4ID0gTElORTEsCiAJCSB9LCB7CiAJCQkgLm5hbWUgPSBuYW1lX3N2aWRlbywKIAkJCSAudm11eCA9IDgsCi0JCQkgLmFtdXggPSBMSU5FMSwKKwkJCSAuYW11eCA9IExJTkUyLAogCQkgfSB9LAogCQkgLnJhZGlvID0gewogCQkJIC5uYW1lID0gbmFtZV9yYWRpbywKQEAgLTQ0MjEsOCArNDQ5Myw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkvKiBubyBEVkIgc3VwcG9ydCBmb3Igbm93ICovCi0JCS8qIC5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsICovCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX2NvbXAsCiAJCQkudm11eCA9IDEsCkBAIC00NDQxLDggKzQ1MTIsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLyogbm8gRFZCIHN1cHBvcnQgZm9yIG5vdyAqLwotCQkvKiAubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLCAqLworCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV9jb21wLAogCQkJLnZtdXggPSAxLApAQCAtNDYxMSw3ICs0NjgxLDcgQEAKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLAogCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9URUE1NzY3LAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkciAgICAgPSAweDYwLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDgwMDAwNzAwLAogCQkuaW5wdXRzID0geyB7CiAJCQkubmFtZSAgID0gbmFtZV90diwKQEAgLTU0MDUsNiArNTQ3NSwzNiBAQAogCX0sewogCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAogCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDYsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDcsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwOCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwOSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMywKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzBhLAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCiAJCS5zdWJ2ZW5kb3IgICAgPSAweDE1M2IsCiAJCS5zdWJkZXZpY2UgICAgPSAweDExNzIsCiAJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBLApAQCAtNTgyMSw4ICs1OTIxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCQkgICAgaW50IGNvbW1hbmQsIGludCBhcmcpCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF84Mjd4X2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJdTggc3luY19jb250cm9sOwogCkBAIC01ODQ4LDYgKzU5NDgsNjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2FhNzEzNF90ZGExODI3MV9odnIxMXgwX3RvZ2dsZV9hZ2Moc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCisJCQkJCQkgICAgICBlbnVtIHRkYTE4MjcxX21vZGUgbW9kZSkKK3sKKwkvKiB0b2dnbGUgQUdDIHN3aXRjaCB0aHJvdWdoIEdQSU8gMjYgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFREQTE4MjcxX0FOQUxPRzoKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAwKTsKKwkJYnJlYWs7CisJY2FzZSBUREExODI3MV9ESUdJVEFMOgorCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjYsIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF90ZGE4MjkwXzE4MjcxX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkgIGludCBjb21tYW5kLCBpbnQgYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBUREExODI3MV9DQUxMQkFDS19DTURfQUdDX0VOQUJMRTogLyogMCAqLworCQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwkJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCQljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJCXJldCA9IHNhYTcxMzRfdGRhMTgyNzFfaHZyMTF4MF90b2dnbGVfYWdjKGRldiwgYXJnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzEzNF90ZGE4MjkwX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCSAgICBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzOgorCQkvKiB0ZGE4MjkwICsgdGRhMTgyNzEgKi8KKwkJcmV0ID0gc2FhNzEzNF90ZGE4MjkwXzE4MjcxX2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdGRhODI5MCArIHRkYTgyN3ggKi8KKwkJcmV0ID0gc2FhNzEzNF90ZGE4MjkwXzgyN3hfY2FsbGJhY2soZGV2LCBjb21tYW5kLCBhcmcpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogaW50IHNhYTcxMzRfdHVuZXJfY2FsbGJhY2sodm9pZCAqcHJpdiwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpCiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwcml2OwpAQCAtNTg3OCwxMSArNjAzNywxNiBAQAogCXN3aXRjaCAodHYubW9kZWwpIHsKIAljYXNlIDY3MDE5OiAvKiBXaW5UVi1IVlIxMTEwIChSZXRhaWwsIElSIEJsYXN0ZXIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCiAJY2FzZSA2NzEwOTogLyogV2luVFYtSFZSMTAwMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBhbmFsb2csIG5vIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLworCWNhc2UgNjcyMDE6IC8qIFdpblRWLUhWUjExMjAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KKwljYXNlIDY3MzAxOiAvKiBXaW5UVi1IVlIxMDAwIChSZXRhaWwsIElSIFJlY2VpdmUsIGFuYWxvZywgbm8gRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCisJY2FzZSA2NzIwOTogLyogV2luVFYtSFZSMTExMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLwogCWNhc2UgNjc1NTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAljYXNlIDY3NTY5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNKSAqLwogCWNhc2UgNjc1Nzk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0pICovCiAJY2FzZSA2NzU4OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBubyBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLwogCWNhc2UgNjc1OTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KKwljYXNlIDY3NjUxOiAvKiBXaW5UVi1IVlIxMTIwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCisJY2FzZSA2NzY1OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd2FybmluZzogIgpAQCAtNjAxOSw2ICs2MTgzLDExIEBACiAJCW1zbGVlcCgxMCk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQ0FSREJVU181MDY6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMywgMCk7CisJCW1zbGVlcCgxMCk7CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMywgMSk7CisJCWRldi0+aGFzX3JlbW90ZSA9IFNBQTcxMzRfUkVNT1RFX0kyQzsKKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9NMTAzOgogCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDApOwogCQltc2xlZXAoMTApOwpAQCAtNjA1NCw2ICs2MjIzLDE2IEBACiAKIAkJc2FhX3dyaXRlYiAoU0FBNzEzNF9QUk9EVUNUSU9OX1RFU1RfTU9ERSwgMHgwMCk7CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJLyogR1BJTyAyNiBoaWdoIGZvciBkaWdpdGFsLCBsb3cgZm9yIGFuYWxvZyAqLworCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjYsIDApOworCQltc2xlZXAoMSk7CisKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIyLCAwKTsKKwkJbXNsZWVwKDEwKTsKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIyLCAxKTsKKwkJYnJlYWs7CiAJLyogaTJjIHJlbW90ZXMgKi8KIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8xMTBpOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSU5OQUNMRV9QQ1RWXzMxMGk6CkBAIC02MDc5LDE1ICs2MjU4LDE1IEBACiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDhjMDQwMDA3LCAweDhjMDQwMDA3KTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4MGMwMDA3Y2QsIDB4MGMwMDA3Y2QpOwogCQlicmVhazsKLQljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfUFJPOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTcwMF9IWUJSSUQ6CisJCXByaW50aygiJXM6ICVzOiBoeWJyaWQgYW5hbG9nL2R2YiBjYXJkXG4iCisJCSAgICAgICAiJXM6IFNvcnJ5LCBvZiB0aGUgYW5hbG9nIGlucHV0cywgb25seSBhbmFsb2cgcy12aWRlbyBhbmQgY29tcG9zaXRlICIKKwkJICAgICAgICJhcmUgc3VwcG9ydGVkIGZvciBub3cuXG4iLAorCQkJZGV2LT5uYW1lLCBjYXJkKGRldikubmFtZSwgZGV2LT5uYW1lKTsKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfUFJPOgogCQkvKiB3cml0ZSB3aW5kb3dzIGdwaW8gdmFsdWVzICovCiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQTU9ERTAgPj4gMiwgICAweDgwMDQwMTAwLCAweDgwMDQwMTAwKTsKIAkJc2FhX2FuZG9ybChTQUE3MTM0X0dQSU9fR1BTVEFUVVMwID4+IDIsIDB4ODAwNDAxMDAsIDB4MDAwNDAxMDApOwotCQlwcmludGsoIiVzOiAlczogaHlicmlkIGFuYWxvZy9kdmIgY2FyZFxuIgotCQkgICAgICAgIiVzOiBTb3JyeSwgb25seSBhbmFsb2cgcy12aWRlbyBhbmQgY29tcG9zaXRlIGlucHV0ICIKLQkJICAgICAgICJhcmUgc3VwcG9ydGVkIGZvciBub3cuXG4iLAotCQkJZGV2LT5uYW1lLCBjYXJkKGRldikubmFtZSwgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtNjEwOSw3ICs2Mjg4LDcgQEAKIAogCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTzsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAkJbW9kZV9tYXNrICY9IH5UX1JBRElPOwogCX0KIApAQCAtNjEyMSw3ICs2MzAwLDcgQEAKIAogCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gbW9kZV9tYXNrOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChkZXYtPnRkYTk4ODdfY29uZikgewpAQCAtNjEzMCw4ICs2MzA5LDcgQEAKIAkJdGRhOTg4N19jZmcudHVuZXIgPSBUVU5FUl9UREE5ODg3OwogCQl0ZGE5ODg3X2NmZy5wcml2ID0gJmRldi0+dGRhOTg4N19jb25mOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsCi0JCQkJCSAmdGRhOTg4N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfQogCiAJaWYgKGRldi0+dHVuZXJfdHlwZSA9PSBUVU5FUl9YQzIwMjgpIHsKQEAgLTYxNTgsNyArNjMzNiw3IEBACiAJCXhjMjAyOF9jZmcudHVuZXIgPSBUVU5FUl9YQzIwMjg7CiAJCXhjMjAyOF9jZmcucHJpdiAgPSAmY3RsOwogCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ4YzIwMjhfY2ZnKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmeGMyMDI4X2NmZyk7CiAJfQogfQogCkBAIC02MTY4LDkgKzYzNDYsMjAgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZjsKIAlpbnQgYm9hcmQ7CiAKKwkvKiBQdXQgaGVyZSB0aGUgY29kZSB0aGF0IGVuYWJsZXMgdGhlIGNoaXBzIHRoYXQgYXJlIG5lZWRlZAorCSAgIGZvciBhbmFsb2cgbW9kZSBhbmQgZG9lc24ndCBkZXBlbmQgb24gdGhlIHR1bmVyIGF0dGFjaG1lbnQuCisJICAgSXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBnZXQgdHVuZXIgdHlwZSBmcm9tIGVlcHJvbSwgZXRjIGJlZm9yZQorCSAgIGluaXRpYWxpemluZyB0dW5lciwgc2luY2Ugd2UgY2FuIGF2b2lkIGxvYWRpbmcgdHVuZXIgZHJpdmVyCisJICAgb24gZGV2aWNlcyB0aGF0IGhhcyBUVU5FUl9BQlNFTlQKKwkgKi8KIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfTk9UVU5FUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfVFVORVI6CisJCS8qIENoZWNrcyBpZiB0aGUgZGV2aWNlIGhhcyBhIHR1bmVyIGF0IDB4NjAgYWRkcgorCQkgICBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZSBhIHR1bmVyLCBUVU5FUl9BQlNFTlQKKwkJICAgd2lsbCBiZSB1c2VkIGF0IHR1bmVyX3R5cGUsIGF2b2lkaW5nIGxvYWRpbmcgdHVuZXIKKwkJICAgd2l0aG91dCBuZWVkaW5nIGl0CisJCSAqLwogCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4NjA7CiAJCWJvYXJkID0gKGkyY19tYXN0ZXJfcmVjdigmZGV2LT5pMmNfY2xpZW50LCAmYnVmLCAwKSA8IDApCiAJCQk/IFNBQTcxMzRfQk9BUkRfQk1LX01QRVhfTk9UVU5FUgpAQCAtNjE4OCwxMSArNjM3NywxNSBAQAogCQl1OCBzdWJhZGRyOwogCQl1OCBkYXRhWzNdOwogCQlpbnQgcmV0LCB0dW5lcl90OwotCiAJCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0ge3suYWRkcj0weDUwLCAuZmxhZ3M9MCwgLmJ1Zj0mc3ViYWRkciwgLmxlbiA9IDF9LAogCQkJCQl7LmFkZHI9MHg1MCwgLmZsYWdzPUkyQ19NX1JELCAuYnVmPWRhdGEsIC5sZW4gPSAzfX07CisKIAkJc3ViYWRkcj0gMHgxNDsKIAkJdHVuZXJfdCA9IDA7CisKKwkJLyogUmV0cmlldmUgZGV2aWNlIGRhdGEgZnJvbSBlZXByb20sIGNoZWNraW5nIGZvciB0aGUKKwkJICAgcHJvcGVyIHR1bmVyX3R5cGUuCisJCSAqLwogCQlyZXQgPSBpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsIG1zZywgMik7CiAJCWlmIChyZXQgIT0gMikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFRVBST00gcmVhZCBmYWlsdXJlXG4iKTsKQEAgLTYyNDgsMTIgKzY0NDEsMTQgQEAKIAkJCQlkZXYtPm5hbWUsIHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KKwkJLyogYnJlYWsgaW50ZW50aW9uYWxseSBvbWl0dGVkICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzMwMDoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU19FVVJPUEEyX0hZQlJJRDoKIAl7CiAKLQkJLyogVGhlIFBoaWxpcHMgRVVST1BBIGJhc2VkIGh5YnJpZCBib2FyZHMgaGF2ZSB0aGUgdHVuZXIgY29ubmVjdGVkIHRocm91Z2gKLQkJICogdGhlIGNoYW5uZWwgZGVjb2Rlci4gV2UgaGF2ZSB0byBtYWtlIGl0IHRyYW5zcGFyZW50IHRvIGZpbmQgaXQKKwkJLyogVGhlIFBoaWxpcHMgRVVST1BBIGJhc2VkIGh5YnJpZCBib2FyZHMgaGF2ZSB0aGUgdHVuZXIKKwkJICAgY29ubmVjdGVkIHRocm91Z2ggdGhlIGNoYW5uZWwgZGVjb2Rlci4gV2UgaGF2ZSB0byBtYWtlIGl0CisJCSAgIHRyYW5zcGFyZW50IHRvIGZpbmQgaXQKIAkJICovCiAJCXU4IGRhdGFbXSA9IHsgMHgwNywgMHgwMn07CiAJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsuYWRkcj0weDA4LCAuZmxhZ3M9MCwgLmJ1Zj1kYXRhLCAubGVuID0gc2l6ZW9mKGRhdGEpfTsKQEAgLTYyNzQsMjEgKzY0NjksMTUgQEAKIAkJaWYgKGRldi0+Ym9hcmQgPT0gU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSX1MpIHsKIAkJCWRldi0+dHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfVERBODI5MDsKIAotCQkJc2FhNzEzNF90dW5lcl9zZXR1cChkZXYpOwotCiAJCQlkYXRhWzJdID0gMHg2ODsKIAkJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7Ci0KLQkJCS8qIFR1bmVyIHNldHVwIGlzIGhhbmRsZWQgYmVmb3JlIEkyQyB0cmFuc2Zlci4KLQkJCSAgIER1ZSB0byB0aGF0LCB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gaXQgbGF0ZXIKLQkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9Ci0gICAgICAgY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVFZGTTcxMzU6Ci0gICAgICAgLyogVGhlIGNhcmQgYmVsb3cgaXMgZGV0ZWN0ZWQgYXMgY2FyZD01MywgYnV0IGlzIGRpZmZlcmVudCAqLworCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RWRk03MTM1OgorCS8qIFRoZSBjYXJkIGJlbG93IGlzIGRldGVjdGVkIGFzIGNhcmQ9NTMsIGJ1dCBpcyBkaWZmZXJlbnQgKi8KIAkgICAgICAgaWYgKGRldi0+YXV0b2RldGVjdGVkICYmIChkZXYtPmVlZGF0YVsweDI3XSA9PSAweDAzKSkgewogCQkgICAgICAgZGV2LT5ib2FyZCA9IFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9BTkFMT0c7CiAJCSAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogUDcxMzEgYW5hbG9nIG9ubHksIHVzaW5nICIKQEAgLTYyOTYsNiArNjQ4NSwxMCBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKIAkgICAgICAgfQogCSAgICAgICBicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBkZXYtPmVlZGF0YSsweDgwKTsKKwkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwOgogCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGErMHg4MCk7CiAJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwpAQCAtNjM1MSwyMiArNjU0NCw2IEBACiAJCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7CiAJCWJyZWFrOwogCX0KLQljYXNlIFNBQTcxMzRfQk9BUkRfQURTX0lOU1RBTlRfSERUVl9QQ0k6Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9BVFNDMTEwOgotCXsKLQkJLyogZW5hYmxlIHR1bmVyICovCi0JCWludCBpOwotCQlzdGF0aWMgY29uc3QgdTggYnVmZmVyIFtdID0geyAweDEwLCAweDEyLCAweDEzLCAweDA0LCAweDE2LAotCQkJCQkgICAgICAweDAwLCAweDE0LCAweDA0LCAweDE3LCAweDAwIH07Ci0JCWRldi0+aTJjX2NsaWVudC5hZGRyID0gMHgwYTsKLQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCWlmICgyICE9IGkyY19tYXN0ZXJfc2VuZCgmZGV2LT5pMmNfY2xpZW50LAotCQkJCQkJICZidWZmZXJbaSoyXSwgMikpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKLQkJYnJlYWs7Ci0JfQogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE6CiAJCS8qIFRoZSBUMjAwIGFuZCB0aGUgVDIwMEEgc2hhcmUgdGhlIHNhbWUgcGNpIGlkLiAgQ29uc2VxdWVudGx5LApAQCAtNjM3NSw5ICs2NTUyLDkgQEAKIAogCQkvKiBEb24ndCBkbyB0aGlzIGlmIHRoZSBib2FyZCB3YXMgc3BlY2lmaWNhbGx5IHNlbGVjdGVkIHdpdGggYW4KIAkJICogaW5zbW9kIG9wdGlvbiBvciBpZiB3ZSBoYXZlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gVDIwMCovCi0JCWlmKCFkZXYtPmF1dG9kZXRlY3RlZCB8fCAoZGV2LT5lZWRhdGFbMHg0MV0gPT0gMHhkMCkpCisJCWlmICghZGV2LT5hdXRvZGV0ZWN0ZWQgfHwgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4ZDApKQogCQkJYnJlYWs7Ci0JCWlmKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4MDIpIHsKKwkJaWYgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4MDIpIHsKIAkJCS8qIFJlY29uZmlndXJlIGJvYXJkICBhcyBUMjAwQSAqLwogCQkJZGV2LT5ib2FyZCA9IFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwQTsKIAkJCWRldi0+dHVuZXJfdHlwZSAgID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfdHlwZTsKQEAgLTYzOTAsNiArNjU2Nyw1OCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX0hEVFZfUENJOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKKwl7CisJCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSAweDBhLCAuZmxhZ3MgPSAwIH07CisJCWludCBpOworCQlzdGF0aWMgdTggYnVmZmVyW11bMl0gPSB7CisJCQl7IDB4MTAsIDB4MTIgfSwKKwkJCXsgMHgxMywgMHgwNCB9LAorCQkJeyAweDE2LCAweDAwIH0sCisJCQl7IDB4MTQsIDB4MDQgfSwKKwkJCXsgMHgxNywgMHgwMCB9LAorCQl9OworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZmZlcik7IGkrKykgeworCQkJbXNnLmJ1ZiA9ICZidWZmZXJbaV1bMF07CisJCQltc2cubGVuID0gQVJSQVlfU0laRShidWZmZXJbMF0pOworCQkJaWYgKGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlczogVW5hYmxlIHRvIGVuYWJsZSB0dW5lciglaSkuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQl9CisJCWJyZWFrOworCX0KKwl9IC8qIHN3aXRjaCgpICovCisKKwkvKiBpbml0aWFsaXplIHR1bmVyICovCisJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKKwkJaW50IGhhc19kZW1vZCA9IChkZXYtPnRkYTk4ODdfY29uZiAmIFREQTk4ODdfUFJFU0VOVCk7CisKKwkJLyogTm90ZTogcmFkaW8gdHVuZXIgYWRkcmVzcyBpcyBhbHdheXMgZmlsbGVkIGluLAorCQkgICBzbyB3ZSBkbyBub3QgbmVlZCB0byBwcm9iZSBmb3IgYSByYWRpbyB0dW5lciBkZXZpY2UuICovCisJCWlmIChkZXYtPnJhZGlvX3R5cGUgIT0gVU5TRVQpCisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+cmFkaW9fYWRkcik7CisJCWlmIChoYXNfZGVtb2QpCisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQlpZiAoZGV2LT50dW5lcl9hZGRyID09IEFERFJfVU5TRVQpIHsKKwkJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlID0KKwkJCQloYXNfZGVtb2QgPyBBRERSU19UVl9XSVRIX0RFTU9EIDogQUREUlNfVFY7CisKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKKwkJfSBlbHNlIHsKKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsCisJCQkJInR1bmVyIiwgInR1bmVyIiwgZGV2LT50dW5lcl9hZGRyKTsKKwkJfQorCX0KKworCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgU0FBNzEzNF9CT0FSRF9CRUhPTERfQ09MVU1CVVNfVFZGTToKIAl7CiAJCXN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyB0ZWE1NzY3X2NmZzsKQEAgLTY0MDEsMTIgKzY2MzAsMTAgQEAKIAkJY3RsLnh0YWxfZnJlcSA9IFRFQTU3NjdfSElHSF9MT18xM01IejsKIAkJdGVhNTc2N19jZmcudHVuZXIgPSBUVU5FUl9URUE1NzY3OwogCQl0ZWE1NzY3X2NmZy5wcml2ICA9ICZjdGw7Ci0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ0ZWE1NzY3X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRlYTU3NjdfY2ZnKTsKIAkJYnJlYWs7CiAJfQogCX0gLyogc3dpdGNoKCkgKi8KIAotCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCmluZGV4IDk5MjIxZDcuLmRhZmEwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKQEAgLTU0LDEzICs1NCw5IEBACiBtb2R1bGVfcGFyYW0oZ3Bpb190cmFja2luZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZ3Bpb190cmFja2luZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtncGlvXSIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFsc2E7CitzdGF0aWMgdW5zaWduZWQgaW50IGFsc2EgPSAxOwogbW9kdWxlX3BhcmFtKGFsc2EsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFsc2EsImVuYWJsZSBBTFNBIERNQSBzb3VuZCBbZG1hc291bmRdIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgb3NzOwotbW9kdWxlX3BhcmFtKG9zcywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mob3NzLCJlbmFibGUgT1NTIERNQSBzb3VuZCBbZG1hc291bmRdIik7CitNT0RVTEVfUEFSTV9ERVNDKGFsc2EsImVuYWJsZS9kaXNhYmxlIEFMU0EgRE1BIHNvdW5kIFtkbWFzb3VuZF0iKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBsYXRlbmN5ID0gVU5TRVQ7CiBtb2R1bGVfcGFyYW0obGF0ZW5jeSwgaW50LCAwNDQ0KTsKQEAgLTkwLDggKzg2LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCAgICAidHVuZXIgdHlwZSIpOwogTU9EVUxFX1BBUk1fREVTQyhjYXJkLCAgICAgImNhcmQgdHlwZSIpOwogCi1zdGF0aWMgREVGSU5FX01VVEVYKGRldmxpc3RfbG9jayk7CitERUZJTkVfTVVURVgoc2FhNzEzNF9kZXZsaXN0X2xvY2spOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiBMSVNUX0hFQUQoc2FhNzEzNF9kZXZsaXN0KTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9wc19saXN0KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNzEzNF9kZXZjb3VudDsKIApAQCAtMTU2LDEwICsxNTQsMTAgQEAKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZW1wcmVzcyIpOwogCWlmIChjYXJkX2lzX2R2YihkZXYpKQogCQlyZXF1ZXN0X21vZHVsZSgic2FhNzEzNC1kdmIiKTsKLQlpZiAoYWxzYSkKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtYWxzYSIpOwotCWlmIChvc3MpCi0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LW9zcyIpOworCWlmIChhbHNhKSB7CisJCWlmIChkZXYtPnBjaS0+ZGV2aWNlICE9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMwKQorCQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtYWxzYSIpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmVxdWVzdF9zdWJtb2R1bGVzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KQpAQCAtNzc4LDcgKzc3Niw3IEBACiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7CiAJdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJmRldi0+cGNpLT5kZXY7CisJdmZkLT52NGwyX2RldiAgPSAmZGV2LT52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZmQtPmRlYnVnICAgPSB2aWRlb19kZWJ1ZzsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMgKCVzKSIsCkBAIC04NTEsNiArODQ5LDEwIEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwwOworCiAJLyogcGNpIGluaXQgKi8KIAlkZXYtPnBjaSA9IHBjaV9kZXY7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKSB7CkBAIC05MjcsNiArOTI5LDggQEAKIAlkZXYtPmF1dG9kZXRlY3RlZCA9IGNhcmRbZGV2LT5ucl0gIT0gZGV2LT5ib2FyZDsKIAlkZXYtPnR1bmVyX3R5cGUgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50dW5lcl90eXBlOwogCWRldi0+dHVuZXJfYWRkciA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX2FkZHI7CisJZGV2LT5yYWRpb190eXBlID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmFkaW9fdHlwZTsKKwlkZXYtPnJhZGlvX2FkZHIgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpb19hZGRyOwogCWRldi0+dGRhOTg4N19jb25mID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udGRhOTg4N19jb25mOwogCWlmIChVTlNFVCAhPSB0dW5lcltkZXYtPm5yXSkKIAkJZGV2LT50dW5lcl90eXBlID0gdHVuZXJbZGV2LT5ucl07CkBAIC05NzEsMjMgKzk3NSw0OCBAQAogCS8qIHdhaXQgYSBiaXQsIHJlZ2lzdGVyIGkyYyBidXMgKi8KIAltc2xlZXAoMTAwKTsKIAlzYWE3MTM0X2kyY19yZWdpc3RlcihkZXYpOwotCi0JLyogaW5pdGlhbGl6ZSBoYXJkd2FyZSAjMiAqLwotCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKIAlzYWE3MTM0X2JvYXJkX2luaXQyKGRldik7CiAKIAlzYWE3MTM0X2h3aW5pdDIoZGV2KTsKIAogCS8qIGxvYWQgaTJjIGhlbHBlcnMgKi8KIAlpZiAoY2FyZF9pc19lbXByZXNzKGRldikpIHsKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTY3NTJocyIpOworCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0KKwkJCXY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2FkYXAsCisJCQkJInNhYTY3NTJocyIsICJzYWE2NzUyaHMiLAorCQkJCXNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLmVtcHJlc3NfYWRkcik7CisKKwkJaWYgKHNkKQorCQkJc2QtPmdycF9pZCA9IEdSUF9FTVBSRVNTOworCX0KKworCWlmIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcikgeworCQl1bnNpZ25lZCBzaG9ydCBhZGRyc1syXSA9IHsgMCwgSTJDX0NMSUVOVF9FTkQgfTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKworCQlhZGRyc1swXSA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJkc19hZGRyOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAic2FhNjU4OCIsCisJCQkgICAgInNhYTY1ODgiLCBhZGRycyk7CisJCWlmIChzZCkKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBmb3VuZCBSRFMgZGVjb2RlclxuIiwgZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXF1ZXN0X3N1Ym1vZHVsZXMoZGV2KTsKIAogCXY0bDJfcHJpb19pbml0KCZkZXYtPnByaW8pOwogCisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKKwkJbXBlZ19vcHNfYXR0YWNoKG1vcHMsIGRldik7CisJbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCAmc2FhNzEzNF9kZXZsaXN0KTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKKworCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KKwlzYWE3MTM0X2lycV92aWRlb19zaWduYWxjaGFuZ2UoZGV2KTsKKworCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQorCQlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0YW5kYnksIDApOworCiAJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KIAlpZiAoc2FhNzEzNF9ub19vdmVybGF5ID4gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE92ZXJsYXkgc3VwcG9ydCBkaXNhYmxlZC5cbiIsIGRldi0+bmFtZSk7CkBAIC0xMDIzLDI0ICsxMDUyLDEwIEBACiAJfQogCiAJLyogZXZlcnl0aGluZyB3b3JrZWQgKi8KLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldixkZXYpOwogCXNhYTcxMzRfZGV2Y291bnQrKzsKIAotCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb3BzLCAmbW9wc19saXN0LCBuZXh0KQotCQltcGVnX29wc19hdHRhY2gobW9wcywgZGV2KTsKLQlsaXN0X2FkZF90YWlsKCZkZXYtPmRldmxpc3QsJnNhYTcxMzRfZGV2bGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOwotCi0JLyogY2hlY2sgZm9yIHNpZ25hbCAqLwotCXNhYTcxMzRfaXJxX3ZpZGVvX3NpZ25hbGNoYW5nZShkZXYpOwotCi0JaWYgKHNhYTcxMzRfZG1hc291bmRfaW5pdCAmJiAhZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpIHsKKwlpZiAoc2FhNzEzNF9kbWFzb3VuZF9pbml0ICYmICFkZXYtPmRtYXNvdW5kLnByaXZfZGF0YSkKIAkJc2FhNzEzNF9kbWFzb3VuZF9pbml0KGRldik7Ci0JfQotCi0JaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAogCXJldHVybiAwOwogCkBAIC0xMDU1LDEzICsxMDcwLDE2IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LDApKTsKICBmYWlsMToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKyBmYWlsMDoKIAlrZnJlZShkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWE3MTM0X2ZpbmlkZXYoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxMzRfZGV2LCB2NGwyX2Rldik7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgKm1vcHM7CiAKIAkvKiBSZWxlYXNlIERNQSBzb3VuZCBtb2R1bGVzIGlmIHByZXNlbnQgKi8KQEAgLTEwODgsMTEgKzExMDYsMTEgQEAKIAlzYWE3MTM0X2h3ZmluaShkZXYpOwogCiAJLyogdW5yZWdpc3RlciAqLwotCW11dGV4X2xvY2soJmRldmxpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCWxpc3RfZGVsKCZkZXYtPmRldmxpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKIAkJbXBlZ19vcHNfZGV0YWNoKG1vcHMsIGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCXNhYTcxMzRfZGV2Y291bnQtLTsKIAogCXNhYTcxMzRfaTJjX3VucmVnaXN0ZXIoZGV2KTsKQEAgLTExMTMsNyArMTEzMSw4IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LDApKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogCiAJLyogZnJlZSBtZW1vcnkgKi8KIAlrZnJlZShkZXYpOwpAQCAtMTE0OCw4ICsxMTY3LDggQEAKIAogc3RhdGljIGludCBzYWE3MTM0X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0KLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIHY0bDJfZGV2KTsKIAogCS8qIGRpc2FibGUgb3ZlcmxheSAtIGFwcHMgc2hvdWxkIGVuYWJsZSBpdCBleHBsaWNpdGx5IG9uIHJlc3VtZSovCiAJZGV2LT5vdmVuYWJsZSA9IDA7CkBAIC0xMTg1LDcgKzEyMDQsOCBAQAogCiBzdGF0aWMgaW50IHNhYTcxMzRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzYWE3MTM0X2RldiwgdjRsMl9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CkBAIC0xMjQ3LDExICsxMjY3LDExIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJbXBlZ19vcHNfYXR0YWNoKG9wcywgZGV2KTsKIAlsaXN0X2FkZF90YWlsKCZvcHMtPm5leHQsJm1vcHNfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjU5LDExICsxMjc5LDExIEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXY7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmb3BzLT5uZXh0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkKIAkJbXBlZ19vcHNfZGV0YWNoKG9wcywgZGV2KTsKLQltdXRleF91bmxvY2soJmRldmxpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF90c19yZWdpc3Rlcik7CkBAIC0xMzA3LDggKzEzMjcsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogRVhQT1JUX1NZTUJPTChzYWE3MTM0X3NldF9ncGlvKTsKLUVYUE9SVF9TWU1CT0woc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKTsKLUVYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0KTsKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9ib2FyZHMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLSBmb3IgdGhlIERNQSBzb3VuZCBtb2R1bGVzIC0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCBiNTM3MGIzLi40ZWZmMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtNDgsOSArNDgsMTUgQEAKICNpbmNsdWRlICJpc2w2NDA1LmgiCiAjaW5jbHVkZSAibG5icDIxLmgiCiAjaW5jbHVkZSAidHVuZXItc2ltcGxlLmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKKyNpbmNsdWRlICJsZ2R0MzMwNS5oIgorI2luY2x1ZGUgInRkYTgyOTAuaCIKIAogI2luY2x1ZGUgInpsMTAzNTMuaCIKIAorI2luY2x1ZGUgInpsMTAwMzYuaCIKKyNpbmNsdWRlICJtdDMxMi5oIgorCiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+IFtTdVNFIExhYnNdIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTE4OSw3ICsxOTUsNyBAQAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LFZJRElPQ19TX0ZSRVFVRU5DWSwmZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfZnJlcXVlbmN5LCAmZik7CiAJbXNnLmJ1ZiA9IG9uOwogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CkBAIC05NTAsNiArOTU2LDQ1IEBACiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAogfTsKIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgbXQzMTJfY29uZmlnIGF2ZXJ0dl9hNzAwX210MzEyID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKKwkudm9sdGFnZV9pbnZlcnRlZCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHpsMTAwMzZfY29uZmlnIGF2ZXJ0dl9hNzAwX3R1bmVyID0geworCS50dW5lcl9hZGRyZXNzID0gMHg2MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnIGhjd19sZ2R0MzMwNV9jb25maWcgPSB7CisJLmkyY19hZGRyICAgICAgICAgICA9IDB4MGUsCisJLm1wZWdfbW9kZSAgICAgICAgICA9IExHRFQzMzA1X01QRUdfU0VSSUFMLAorCS50cGNsa19lZGdlICAgICAgICAgPSBMR0RUMzMwNV9UUENMS19SSVNJTkdfRURHRSwKKwkudHB2YWxpZF9wb2xhcml0eSAgID0gTEdEVDMzMDVfVFBfVkFMSURfSElHSCwKKwkuZGVueV9pMmNfcnB0ciAgICAgID0gMSwKKwkuc3BlY3RyYWxfaW52ZXJzaW9uID0gMSwKKwkucWFtX2lmX2toeiAgICAgICAgID0gNDAwMCwKKwkudnNiX2lmX2toeiAgICAgICAgID0gMzI1MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcCBoYXVwcGF1Z2VfdGRhMTgyNzFfc3RkX21hcCA9IHsKKwkuYXRzY182ICAgPSB7IC5pZl9mcmVxID0gMzI1MCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDQsCisJCSAgICAgIC5pZl9sdmwgPSAxLCAucmZhZ2NfdG9wID0gMHg1OCwgfSwKKwkucWFtXzYgICAgPSB7IC5pZl9mcmVxID0gNDAwMCwgLmFnY19tb2RlID0gMywgLnN0ZCA9IDUsCisJCSAgICAgIC5pZl9sdmwgPSAxLCAucmZhZ2NfdG9wID0gMHg1OCwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTgyNzFfY29uZmlnIGhjd190ZGExODI3MV9jb25maWcgPSB7CisJLnN0ZF9tYXAgPSAmaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAsCisJLmdhdGUgICAgPSBUREExODI3MV9HQVRFX0FOQUxPRywKKwkuY29uZmlnICA9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHRkYTgyOXhfY29uZmlnIHRkYTgyOXhfbm9fcHJvYmUgPSB7CisJLnByb2JlX3R1bmVyID0gVERBODI5WF9ET05UX1BST0JFLAorfTsKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDb3JlIGNvZGUKICAqLwpAQCAtMTA3Niw2ICsxMTIxLDE5IEBACiAJCQkJCSAmdGRhODI3eF9jZmdfMSkgPCAwKQogCQkJZ290byBkZXR0YWNoX2Zyb250ZW5kOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChsZ2R0MzMwNV9hdHRhY2gsCisJCQkJCSAgICAgICAmaGN3X2xnZHQzMzA1X2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlkdmJfYXR0YWNoKHRkYTgyOXhfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAmZGV2LT5pMmNfYWRhcCwgMHg0YiwKKwkJCQkgICAmdGRhODI5eF9ub19wcm9iZSk7CisJCQlkdmJfYXR0YWNoKHRkYTE4MjcxX2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgMHg2MCwgJmRldi0+aTJjX2FkYXAsCisJCQkJICAgJmhjd190ZGExODI3MV9jb25maWcpOworCQl9CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6CiAJCWlmIChjb25maWd1cmVfdGRhODI3eF9mZShkZXYsICZhc3VzX3A3MTMxX2R1YWxfY29uZmlnLAogCQkJCQkgJnRkYTgyN3hfY2ZnXzApIDwgMCkKQEAgLTEzNzYsNiArMTQzNCwxOSBAQAogCQkJCSAgIFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMyk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKKwljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfSFlCUklEOgorCQkvKiBaYXJsaW5rIFpMMTAzMTMgKi8KKwkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzEyX2F0dGFjaCwKKwkJCSZhdmVydHZfYTcwMF9tdDMxMiwgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHpsMTAwMzZfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJJmF2ZXJ0dl9hNzAwX3R1bmVyLCAmZGV2LT5pMmNfYWRhcCkgPT0gTlVMTCkgeworCQkJCXdwcmludGsoIiVzOiBObyB6bDEwMDM2IGZvdW5kIVxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJfQorCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXdwcmludGsoIkh1aD8gdW5rbm93biBEVkIgY2FyZD9cbiIpOwogCQlicmVhazsKQEAgLTE0NDksNyArMTUyMCw3IEBACiAJCXRkYTk4ODdfY2ZnLnByaXYgID0gJm9uOwogCiAJCS8qIG90aGVyd2lzZSB3ZSBkb24ndCBkZXRlY3QgdGhlIHR1bmVyIG9uIG5leHQgaW5zbW9kICovCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsICZ0ZGE5ODg3X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAl9IGVsc2UgaWYgKGRldi0+Ym9hcmQgPT0gU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTykgewogCQlpZiAoKGRldi0+ZWVkYXRhWzJdID09IDB4MDcpICYmIHVzZV9mcm9udGVuZCkgewogCQkJLyogdHVybiBvZmYgdGhlIDJuZCBsbmIgc3VwcGx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKaW5kZXggYzlkOGJlYi4uOWRiMzQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlicmVhazsKIAl9CiAJdHNfcmVzZXRfZW5jb2RlcihkZXYpOwotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfSU5JVCwgJmxlYWRpbmdfbnVsbF9ieXRlcyk7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW5pdCwgbGVhZGluZ19udWxsX2J5dGVzKTsKIAlkZXYtPmVtcHJlc3Nfc3RhcnRlZCA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQsNyArMjM0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX0ZNVCwgZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdmlkZW8sIGdfZm10LCBmKTsKIAogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBUU19QQUNLRVRfU0laRSAqIGRldi0+dHMubnJfcGFja2V0czsKQEAgLTI0Nyw3ICsyNDcsNyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRk1ULCBmKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwogCiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9IFRTX1BBQ0tFVF9TSVpFICogZGV2LT50cy5ucl9wYWNrZXRzOwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19TX0VYVF9DVFJMUywgY3RybHMpOworCWVyciA9IHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBzX2V4dF9jdHJscywgY3RybHMpOwogCXRzX2luaXRfZW5jb2RlcihkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTMzMCw3ICszMzAsNyBAQAogCiAJaWYgKGN0cmxzLT5jdHJsX2NsYXNzICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0dfRVhUX0NUUkxTLCBjdHJscyk7CisJcmV0dXJuIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBnX2V4dF9jdHJscywgY3RybHMpOwogfQogCiBzdGF0aWMgaW50IGVtcHJlc3NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMzUyLDYgKzM1Miw3IEBACiBzdGF0aWMgaW50IGVtcHJlc3NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmMpCiB7CisJLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogCXN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewogCQlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCQlWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtMzY0LDYgKzM2NSw3IEBACiAJCTAKIAl9OwogCisJLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19jdHJsc1tdID0gewogCQlWNEwyX0NJRF9NUEVHX0NMQVNTLAogCQlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLApAQCAtMzg4LDEwICszOTAsMTAgQEAKIAlpZiAoYy0+aWQgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGMtPmlkID09IFY0TDJfQ0lEX1VTRVJfQ0xBU1MgfHwgYy0+aWQgPT0gVjRMMl9DSURfTVBFR19DTEFTUykKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKGMsIDAsIDAsIDAsIDApOwogCWlmIChWNEwyX0NUUkxfSUQyQ0xBU1MoYy0+aWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gc2FhNzEzNF9xdWVyeWN0cmwoZmlsZSwgcHJpdiwgYyk7Ci0JcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19RVUVSWUNUUkwsIGMpOworCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgcXVlcnljdHJsLCBjKTsKIH0KIAogc3RhdGljIGludCBlbXByZXNzX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTQwMSw3ICs0MDMsNyBAQAogCiAJaWYgKFY0TDJfQ1RSTF9JRDJDTEFTUyhjLT5pZCkgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfUVVFUllNRU5VLCBjKTsKKwlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIHF1ZXJ5bWVudSwgYyk7CiB9CiAKIHN0YXRpYyBpbnQgZW1wcmVzc19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLApAQCAtNDExLDE0ICs0MTMsMTEgQEAKIAogCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOwogCWNoaXAtPnJldmlzaW9uID0gMDsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgJiYKIAkgICAgIXN0cmNtcChjaGlwLT5tYXRjaC5uYW1lLCAic2FhNjc1MmhzIikpCi0JCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7Ci0JaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSICYmCi0JICAgIGNoaXAtPm1hdGNoLmFkZHIgPT0gZGV2LT5tcGVnX2kyY19jbGllbnQtPmFkZHIpCi0JCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCwgY2hpcCk7CisJCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwlpZiAoY2hpcC0+bWF0Y2gudHlwZSA9PSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwppbmRleCAyMGMxYjMzLi5mM2UyODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pMmMuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJCQlhZGRyICA9IG1zZ3NbaV0uYWRkciA8PCAxOwogCQkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKIAkJCQlhZGRyIHw9IDE7Ci0JCQlpZiAoaSA+IDAgJiYgbXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlpZiAoaSA+IDAgJiYgbXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEICYmIG1zZ3NbaV0uYWRkciAhPSAweDQwKSB7CiAJCQkJLyogd29ya2Fyb3VuZCBmb3IgYSBzYWE3MTM0IGkyYyBidWcKIAkJCQkgKiBuZWVkZWQgdG8gdGFsayB0byB0aGUgbXQzNTIgZGVtdXgKIAkJCQkgKiB0aGFua3MgdG8gcGlubmFjbGUgZm9yIHRoZSBoaW50ICovCkBAIC0zMjcsOCArMzI3LDYgQEAKIAogCWQxcHJpbnRrKCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCiAJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwotCWlmIChjbGllbnQtPmFkZHIgPT0gMHgyMCAmJiBjbGllbnQtPmRyaXZlciAmJiBjbGllbnQtPmRyaXZlci0+Y29tbWFuZCkKLQkJZGV2LT5tcGVnX2kyY19jbGllbnQgPSBjbGllbnQ7CiAKIAkvKiBBbSBJIGFuIGkyYyByZW1vdGUgY29udHJvbD8gKi8KIApAQCAtMzU3LDcgKzM1NSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgc2FhNzEzNF9hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JLmNsYXNzICAgICAgICAgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HLAogCS5uYW1lICAgICAgICAgID0gInNhYTcxMzQiLAogCS5pZCAgICAgICAgICAgID0gSTJDX0hXX1NBQTcxMzQsCiAJLmFsZ28gICAgICAgICAgPSAmc2FhNzEzNF9hbGdvLApAQCAtNDIxLDI5ICs0MTgsMTMgQEAKIAl9CiB9CiAKLXZvaWQgc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCUJVR19PTihOVUxMID09IGRldi0+aTJjX2FkYXAuYWxnb19kYXRhKTsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZkZXYtPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KLWludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoZGV2LT5tcGVnX2kyY19jbGllbnQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGRldi0+bXBlZ19pMmNfY2xpZW50LT5kcml2ZXItPmNvbW1hbmQoZGV2LT5tcGVnX2kyY19jbGllbnQsCi0JCQkJCQkJCWNtZCwgYXJnKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1Mik7Ci0KIGludCBzYWE3MTM0X2kyY19yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKIHsKIAlkZXYtPmkyY19hZGFwID0gc2FhNzEzNF9hZGFwX3RlbXBsYXRlOwogCWRldi0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZkZXYtPnBjaS0+ZGV2OwogCXN0cmNweShkZXYtPmkyY19hZGFwLm5hbWUsZGV2LT5uYW1lKTsKIAlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKKwlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCAmZGV2LT52NGwyX2Rldik7CiAJaTJjX2FkZF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwKTsKIAogCWRldi0+aTJjX2NsaWVudCA9IHNhYTcxMzRfY2xpZW50X3RlbXBsYXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggZWY1NWE1OS4uY2M4YjkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC03OSw4ICs3OSwxOSBAQAogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMCk7CiAKIAkJLyogU3RhcnQgVFMgc3RyZWFtICovCi0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKLQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweEVDKTsKKwkJc3dpdGNoIChzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50c190eXBlKSB7CisJCWNhc2UgU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMOgorCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDAsIDB4NDApOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweGVjKTsKKwkJCWJyZWFrOworCQljYXNlIFNBQTcxMzRfTVBFR19UU19TRVJJQUw6CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHhkOCk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfUEFSQUxMRUwsIDB4NmMpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMHhiYyk7CisJCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMSwgMHgwMik7CisJCQlicmVhazsKKwkJfQorCiAJCWRldi0+dHNfc3RhdGUgPSBTQUE3MTM0X1RTX1NUQVJURUQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCBhMWY3ZTM1Li40MDRmNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKQEAgLTMwLDExICszMCw3IEBACiAjaW5jbHVkZSAic2FhNzEzNC1yZWcuaCIKICNpbmNsdWRlICJzYWE3MTM0LmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLQotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTQ1Miw2ICs0NDgsNyBAQAogCQkubmFtZSAgICAgICAgICA9ICJ5IG9mZnNldCBvZGQgZmllbGQiLAogCQkubWluaW11bSAgICAgICA9IDAsCiAJCS5tYXhpbXVtICAgICAgID0gMTI4LAorCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCX0sewpAQCAtNDU5LDYgKzQ1Niw3IEBACiAJCS5uYW1lICAgICAgICAgID0gInkgb2Zmc2V0IGV2ZW4gZmllbGQiLAogCQkubWluaW11bSAgICAgICA9IDAsCiAJCS5tYXhpbXVtICAgICAgID0gMTI4LAorCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCX0sewpAQCAtNjI3LDEwICs2MjUsMTAgQEAKIAlzYWE3MTM0X3NldF9kZWNvZGVyKGRldik7CiAKIAlpZiAoY2FyZF9pbihkZXYsIGRldi0+Y3RsX2lucHV0KS50dikKLQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfU1RELCAmZGV2LT50dm5vcm0tPmlkKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfc3RkLCBkZXYtPnR2bm9ybS0+aWQpOwogCS8qIFNldCB0aGUgY29ycmVjdCBub3JtIGZvciB0aGUgc2FhNjc1MmhzLiBUaGlzIGZ1bmN0aW9uCiAJICAgZG9lcyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIHNhYTY3NTJocy4gKi8KLQlzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19TVEQsICZkZXYtPnR2bm9ybS0+aWQpOworCXNhYV9jYWxsX2VtcHJlc3MoZGV2LCB0dW5lciwgc19zdGQsIGRldi0+dHZub3JtLT5pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9oX3ByZXNjYWxlKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgdGFzaywgaW50IHByZXNjYWxlKQpAQCAtMTI2Niw4ICsxMjY0LDcgQEAKIAkJCWVsc2UKIAkJCQlkZXYtPnRkYTk4ODdfY29uZiAmPSB+VERBOTg4N19BVVRPTVVURTsKIAotCQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX0NPTkZJRywKLQkJCQkJCSAmdGRhOTg4N19jZmcpOworCQkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTEzMzQsNyArMTMzMSw3IEBACiAJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJaW50IHJhZGlvID0gMDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmc2FhNzEzNF9kZXZsaXN0LCBkZXZsaXN0KSB7CiAJCWlmIChkZXYtPnZpZGVvX2RldiAmJiAoZGV2LT52aWRlb19kZXYtPm1pbm9yID09IG1pbm9yKSkKIAkJCWdvdG8gZm91bmQ7CkBAIC0xMzQ3LDE5ICsxMzQ0LDIwIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlyZXR1cm4gLUVOT0RFVjsKLSBmb3VuZDoKKworZm91bmQ6CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAKIAlkcHJpbnRrKCJvcGVuIG1pbm9yPSVkIHJhZGlvPSVkIHR5cGU9JXNcbiIsbWlub3IscmFkaW8sCiAJCXY0bDJfdHlwZV9uYW1lc1t0eXBlXSk7CiAKIAkvKiBhbGxvY2F0ZSArIGluaXRpYWxpemUgcGVyIGZpbGVoYW5kbGUgZGF0YSAqLwogCWZoID0ga3phbGxvYyhzaXplb2YoKmZoKSxHRlBfS0VSTkVMKTsKLQlpZiAoTlVMTCA9PSBmaCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKE5VTEwgPT0gZmgpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KKwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT5kZXYgICAgICA9IGRldjsKIAlmaC0+cmFkaW8gICAgPSByYWRpbzsKQEAgLTEzODcsMTIgKzEzODUsMTEgQEAKIAlpZiAoZmgtPnJhZGlvKSB7CiAJCS8qIHN3aXRjaCB0byByYWRpbyBtb2RlICovCiAJCXNhYTcxMzRfdHZhdWRpb19zZXRpbnB1dChkZXYsJmNhcmQoZGV2KS5yYWRpbyk7Ci0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsQVVEQ19TRVRfUkFESU8sIE5VTEwpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19yYWRpbyk7CiAJfSBlbHNlIHsKIAkJLyogc3dpdGNoIHRvIHZpZGVvL3ZiaSBtb2RlICovCiAJCXZpZGVvX211eChkZXYsZGV2LT5jdGxfaW5wdXQpOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NjYsNiArMTQ2Myw3IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIHR1cm4gb2ZmIG92ZXJsYXkgKi8KQEAgLTE0OTgsNyArMTQ5Niw5IEBACiAJc2FhX2FuZG9yYihTQUE3MTM0X09GTVRfREFUQV9BLCAweDFmLCAwKTsKIAlzYWFfYW5kb3JiKFNBQTcxMzRfT0ZNVF9EQVRBX0IsIDB4MWYsIDApOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX1NUQU5EQlksIE5VTEwpOworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CisJaWYgKGZoLT5yYWRpbykKKwkJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfQ0xPU0UsICZjbWQpOwogCiAJLyogZnJlZSBzdHVmZiAqLwogCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPmNhcCk7CkBAIC0xNTE5LDYgKzE1MTksMzcgQEAKIAlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoc2FhNzEzNF9xdWV1ZShmaCksIHZtYSk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHJhZGlvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzYWE3MTM0X2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IHJkc19jb21tYW5kIGNtZDsKKworCWNtZC5ibG9ja19jb3VudCA9IGNvdW50LzM7CisJY21kLmJ1ZmZlciA9IGRhdGE7CisJY21kLmluc3RhbmNlID0gZmlsZTsKKwljbWQucmVzdWx0ID0gLUVOT0RFVjsKKworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX1JFQUQsICZjbWQpOworCisJcmV0dXJuIGNtZC5yZXN1bHQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmFkaW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CisKKwljbWQuaW5zdGFuY2UgPSBmaWxlOworCWNtZC5ldmVudF9saXN0ID0gd2FpdDsKKwljbWQucmVzdWx0ID0gLUVOT0RFVjsKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9QT0xMLCAmY21kKTsKKworCXJldHVybiBjbWQucmVzdWx0OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTM0X3RyeV9nZXRfc2V0X2ZtdF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMjA0MSw3ICsyMDcyLDcgQEAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+Y3RsX2ZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfU19GUkVRVUVOQ1ksIGYpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZik7CiAKIAlzYWE3MTM0X3R2YXVkaW9fZG9fc2NhbihkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKQEAgLTIyOTksNyArMjMzMCw3IEBACiAJc3RyY3B5KHQtPm5hbWUsICJSYWRpbyIpOwogCXQtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfVFVORVIsIHQpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlpZiAoZGV2LT5pbnB1dC0+YW11eCA9PSBUVikgewogCQl0LT5zaWduYWwgPSAweGY4MDAgLSAoKHNhYV9yZWFkYigweDU4MSkgJiAweDFmKSA8PCAxMSk7CiAJCXQtPnJ4c3ViY2hhbnMgPSAoc2FhX3JlYWRiKDB4NTI5KSAmIDB4MDgpID8KQEAgLTIzMTYsNyArMjM0Nyw3IEBACiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfVFVORVIsIHQpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R1bmVyLCB0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ0Myw4ICsyNDc0LDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHJhZGlvX2ZvcHMgPSB7CiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgID0gdmlkZW9fb3BlbiwKKwkucmVhZCAgICAgPSByYWRpb19yZWFkLAogCS5yZWxlYXNlICA9IHZpZGVvX3JlbGVhc2UsCiAJLmlvY3RsCSAgPSB2aWRlb19pb2N0bDIsCisJLnBvbGwgICAgID0gcmFkaW9fcG9sbCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcmFkaW9faW9jdGxfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKaW5kZXggMTRlZTI2NS4uYTJkZDMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgpAQCAtMjc3LDYgKzI3OCw4IEBACiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19USUdFUiAgICAgICAgIDE1MgogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0tXT1JMRF9QTFVTX1RWX0FOQUxPRyAxNTMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfR09fMDA3X0ZNX1BMVVMgMTU0CisjZGVmaW5lIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjAgICAgIDE1NQorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMgICAxNTYKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyAzMgogI2RlZmluZSBTQUE3MTM0X0lOUFVUX01BWCA4CkBAIC0zMDksNiArMzEyLDExIEBACiAJU0FBNzEzNF9NUEVHX0RWQiwKIH07CiAKK2VudW0gc2FhNzEzNF9tcGVnX3RzX3R5cGUgeworCVNBQTcxMzRfTVBFR19UU19QQVJBTExFTCA9IDAsCisJU0FBNzEzNF9NUEVHX1RTX1NFUklBTCwKK307CisKIHN0cnVjdCBzYWE3MTM0X2JvYXJkIHsKIAljaGFyICAgICAgICAgICAgICAgICAgICAqbmFtZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBhdWRpb19jbG9jazsKQEAgLTMyNCw2ICszMzIsOCBAQAogCXVuc2lnbmVkIGludAkJcmFkaW9fdHlwZTsKIAl1bnNpZ25lZCBjaGFyCQl0dW5lcl9hZGRyOwogCXVuc2lnbmVkIGNoYXIJCXJhZGlvX2FkZHI7CisJdW5zaWduZWQgY2hhcgkJZW1wcmVzc19hZGRyOworCXVuc2lnbmVkIGNoYXIJCXJkc19hZGRyOwogCiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgdGRhOTg4N19jb25mOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHR1bmVyX2NvbmZpZzsKQEAgLTMzMSw2ICszNDEsNyBAQAogCS8qIHBlcmlwaGVyYWwgSS9PICovCiAJZW51bSBzYWE3MTM0X3ZpZGVvX291dCAgdmlkZW9fb3V0OwogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CisJZW51bSBzYWE3MTM0X21wZWdfdHNfdHlwZSB0c190eXBlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CiB9OwogCkBAIC00NDUsNyArNDU2LDYgQEAKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBidWZzaXplOwogCXN0cnVjdCBzYWE3MTM0X3BndGFibGUgICAgIHB0OwogCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgICAgIGRtYTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgICB3cTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICBkbWFfYmxrOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfb2Zmc2V0OwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIHJlYWRfY291bnQ7CkBAIC00ODIsNiArNDkyLDcgQEAKIAlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICBsb2NrOwogCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgIHNsb2NrOwogCXN0cnVjdCB2NGwyX3ByaW9fc3RhdGUgICAgIHByaW87CisJc3RydWN0IHY0bDJfZGV2aWNlICAgICAgICAgdjRsMl9kZXY7CiAJLyogd29ya3N0cnVjdCBmb3IgbG9hZGluZyBtb2R1bGVzICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3RfbW9kdWxlX3drOwogCkBAIC01NzIsNyArNTgzLDYgQEAKIAllbnVtIHNhYTcxMzRfdHNfc3RhdHVzIAkgICB0c19zdGF0ZTsKIAl1bnNpZ25lZCBpbnQgCQkgICBidWZmX2NudDsKIAlzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyAgICAqbW9wczsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAJICAgKm1wZWdfaTJjX2NsaWVudDsKIAogCS8qIFNBQTcxMzRfTVBFR19FTVBSRVNTIG9ubHkgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICAgICAgICAqZW1wcmVzc19kZXY7CkBAIC01ODgsNiArNTk4LDcgQEAKIAlpbnQgKCpvcmlnaW5hbF9zZXRfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSk7CiAJaW50ICgqb3JpZ2luYWxfc2V0X2hpZ2hfdm9sdGFnZSkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGxvbmcgYXJnKTsKICNlbmRpZgorCXZvaWQgKCpnYXRlX2N0cmwpKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LCBpbnQgb3Blbik7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjE2LDEwICs2MjcsMzEgQEAKIAkJVjRMMl9TVERfTlRTQyAgIHwgVjRMMl9TVERfUEFMX00gfCBcCiAJCVY0TDJfU1REX1BBTF82MCkKIAorI2RlZmluZSBHUlBfRU1QUkVTUyAoMSkKKyNkZWZpbmUgc2FhX2NhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgZG8gewkJCQlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAxKTsJCQkJCVwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmKGRldiktPnY0bDJfZGV2LCAwLCBvLCBmICwgIyNhcmdzKTsJXAorCWlmIChkZXYtPmdhdGVfY3RybCkJCQkJCQlcCisJCWRldi0+Z2F0ZV9jdHJsKGRldiwgMCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBvLCBmLCBhcmdzLi4uKSAoewkJCQlcCisJbG9uZyBfcmM7CQkJCQkJCVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDEpOwkJCQkJXAorCV9yYyA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCYoZGV2KS0+djRsMl9kZXYsCQlcCisJCQkJCSBHUlBfRU1QUkVTUywgbywgZiAsICMjYXJncyk7CVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDApOwkJCQkJXAorCV9yYzsJCQkJCQkJCVwKK30pCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBzYWE3MTM0LWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAgc2FhNzEzNF9kZXZsaXN0OworZXh0ZXJuIHN0cnVjdCBtdXRleCBzYWE3MTM0X2Rldmxpc3RfbG9jazsKIGV4dGVybiBpbnQgc2FhNzEzNF9ub19vdmVybGF5OwogCiB2b2lkIHNhYTcxMzRfdHJhY2tfZ3BpbyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgY2hhciAqbXNnKTsKQEAgLTY2OCwxMCArNzAwLDYgQEAKIAogaW50IHNhYTcxMzRfaTJjX3JlZ2lzdGVyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIGludCBzYWE3MTM0X2kyY191bnJlZ2lzdGVyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKLXZvaWQgc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKLWludCBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCmluZGV4IDI4MzBiNWUuLjlmYWRiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE0Ni5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotCiAjaWZuZGVmIE9fTk9OQ0FQCiAjZGVmaW5lIE9fTk9OQ0FQCU9fVFJVTkMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYwppbmRleCA4OGM1ZTk0Li4yNWJmMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxN3guYwpAQCAtOTMxLDcgKzkzMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewogCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtMTM4MCwxMSArMTM4MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE3eF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzE3eF9jb3JlX29wcyA9IHsKQEAgLTE1MjgsMTAgKzE1MjMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzE3eCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxN1gsCi0JLmNvbW1hbmQgPSBzYWE3MTd4X2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzE3eF9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzE3eF9yZW1vdmUsCi0JLmxlZ2FjeV9jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0cgfCBJMkNfQ0xBU1NfVFZfRElHSVRBTCwKIAkuaWRfdGFibGUgPSBzYWE3MTd4X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKaW5kZXggNmRlYmI2NS4uNzU3NDdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTg1LmMKQEAgLTMwLDUyICszMCw1OCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHNhYTcxODUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1sxMjhdOwogCi0JaW50IG5vcm07Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CisJdjRsMl9zdGRfaWQgbm9ybTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxODUgKnRvX3NhYTcxODUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzE4NSwgc2QpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTg1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxODVfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGNsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKIAotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiUwMnggc2V0IHRvICUwMnhcbiIsIHJlZywgdmFsdWUpOwogCWVuY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHNhYTcxODVfd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAJaW50IHJldCA9IC0xOwogCXU4IHJlZzsKIApAQCAtODMsNyArODksNiBAQAogCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCXU4IGJsb2NrX2RhdGFbMzJdOwogCQlpbnQgYmxvY2tfbGVuOwogCkBAIC0xMDQsNyArMTA5LDcgQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlyZXQgPSBzYWE3MTg1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCXJldCA9IHNhYTcxODVfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwpAQCAtMjEzLDEzMyArMjE4LDEwNiBAQAogCTB4NjYsIDB4MjEsCQkvKiBGU0MzICovCiB9OwogCi1zdGF0aWMgaW50IHNhYTcxODVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKKworc3RhdGljIGludCBzYWE3MTg1X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKIHsKLQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgeworCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCWVsc2UKKwkJc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxODVfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOworCisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCWVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkKKwkJc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTg1X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOworCisJLyogUko6IHJvdXRlLT5pbnB1dCA9IDA6IGlucHV0IGlzIGZyb20gU0E3MTExCisJIHJvdXRlLT5pbnB1dCA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKIAljYXNlIDA6Ci0JCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKLQkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgewotCi0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWJyZWFrOwotCQl9CisJCS8qIHR1cm4gb2ZmIGNvbG9yYmFyICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4M2EsIDB4MGYpOworCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDgpOworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAxKTsKIAkJYnJlYWs7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0KLQkJICAgIFZJREVPX0VOQ09ERVJfUEFMIHwgVklERU9fRU5DT0RFUl9OVFNDIHwKLQkJICAgIFZJREVPX0VOQ09ERVJfU0VDQU0gfCBWSURFT19FTkNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMTsKLQkJY2FwLT5vdXRwdXRzID0gMTsKKwljYXNlIDE6CisJCS8qIHR1cm4gb2ZmIGNvbG9yYmFyICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4M2EsIDB4MGYpOworCQkvKiBTd2l0Y2ggUlRDRSB0byAwICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDApOworCQkvKiBTVzogYSBzbGlnaHQgc3luYyBwcm9ibGVtLi4uICovCisJCXNhYTcxODVfd3JpdGUoc2QsIDB4NmUsIDB4MDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLy9zYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfbnRzYykpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgIHNpemVvZihpbml0X3BhbCkpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOworCWNhc2UgMjoKKwkJLyogdHVybiBvbiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDhmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKKwkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAxKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBSSjogKmlhcmcgPSAwOiBpbnB1dCBpcyBmcm9tIFNBNzExMQotCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCS8qIFN3aXRjaCBSVENFIHRvIDEgKi8KLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDgpOwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NmUsIDB4MDEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAxOgotCQkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCi0JCQkJICAgICAgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4ZjcpIHwgMHgwMCk7Ci0JCQkvKiBTVzogYSBzbGlnaHQgc3luYyBwcm9ibGVtLi4uICovCi0JCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2ZSwgMHgwMCk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsCi0JCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhiZikgfAotCQkJICAgICAgKGVuY29kZXItPmVuYWJsZSA/IDB4MDAgOiAweDQwKSk7Ci0JCWJyZWFrOwotCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxODVfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNzE4NSwgMCk7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODggPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNzE4NV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNzE4NV9nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBzYWE3MTg1X2luaXQsCit9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxODVfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBzYWE3MTg1X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gc2FhNzE4NV9zX3JvdXRpbmcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTg1X29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTg1X2NvcmVfb3BzLAorCS52aWRlbyA9ICZzYWE3MTg1X3ZpZGVvX29wcywKK307CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGk7CiAJc3RydWN0IHNhYTcxODUgKmVuY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKQEAgLTM1MSwyOCArMzI5LDI5IEBACiAJZW5jb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTg1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTg1X29wcyk7CiAKLQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwogCWlmIChpID49IDApCi0JCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CisJCWkgPSBzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgJWRcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IGVycm9yICVkXG4iLCBpKTsKIAllbHNlCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uIDB4JXhcbiIsCi0JCQkJc2FhNzE4NV9yZWFkKGNsaWVudCkgPj4gNSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJldmlzaW9uIDB4JXhcbiIsCisJCQkJc2FhNzE4NV9yZWFkKHNkKSA+PiA1KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE3MTg1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwgKGVuY29kZXItPnJlZ1sweDYxXSkgfCAweDQwKTsJLyogU1c6IG91dHB1dCBvZmYgaXMgYWN0aXZlICovCi0JLy9zYWE3MTg1X3dyaXRlKGNsaWVudCwgMHgzYSwgKGVuY29kZXItPnJlZ1sweDNhXSkgfCAweDgwKTsgLyogU1c6IGNvbG9yIGJhciAqLwotCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLworCXNhYTcxODVfd3JpdGUoc2QsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CiAJa2ZyZWUoZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zODcsOCArMzY2LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxODUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKLQkuY29tbWFuZCA9IHNhYTcxODVfY29tbWFuZCwKIAkucHJvYmUgPSBzYWE3MTg1X3Byb2JlLAogCS5yZW1vdmUgPSBzYWE3MTg1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBzYWE3MTg1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYwppbmRleCBiNDAxOGNjLi4zZjUyM2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuYwpAQCAtMTksOSArMTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKICNpbmNsdWRlICJzYWE3MTkxLmgiCiAKQEAgLTMyLDYgKzM0LDcgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLy8gI2RlZmluZSBTQUE3MTkxX0RFQlVHCiAKICNpZmRlZiBTQUE3MTkxX0RFQlVHCkBAIC00NCwxNyArNDcsMjAgQEAKICNkZWZpbmUgU0FBNzE5MV9TWU5DX0RFTEFZCTEwMAkvKiBtaWxsaXNlY29uZHMgKi8KIAogc3RydWN0IHNhYTcxOTEgewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCiAJLyogdGhlIHJlZ2lzdGVyIHZhbHVlcyBhcmUgc3RvcmVkIGhlcmUgYXMgdGhlIGFjdHVhbAogCSAqIEkyQy1yZWdpc3RlcnMgYXJlIHdyaXRlLW9ubHkgKi8KIAl1OCByZWdbMjVdOwogCiAJaW50IGlucHV0OwotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTkxOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzE5MSAqdG9fc2FhNzE5MShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE3MTkxLCBzZCk7Cit9CiAKIHN0YXRpYyBjb25zdCB1OCBpbml0c2VxW10gPSB7CiAJMCwJLyogU3ViYWRkcmVzcyAqLwpAQCAtMTAwLDE1ICsxMDYsMTQgQEAKIAogLyogU0FBNzE5MSByZWdpc3RlciBoYW5kbGluZyAqLwogCi1zdGF0aWMgdTggc2FhNzE5MV9yZWFkX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgdTggcmVnKQorc3RhdGljIHU4IHNhYTcxOTFfcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogewotCXJldHVybiAoKHN0cnVjdCBzYWE3MTkxICopaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpLT5yZWdbcmVnXTsKKwlyZXR1cm4gdG9fc2FhNzE5MShzZCktPnJlZ1tyZWddOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfcmVhZF9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICB1OCAqdmFsdWUpCitzdGF0aWMgaW50IHNhYTcxOTFfcmVhZF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggKnZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgdmFsdWUsIDEpOwpAQCAtMTIxLDIxICsxMjYsMjMgQEAKIH0KIAogCi1zdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKLQkJCSAgICAgdTggdmFsdWUpCitzdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JKChzdHJ1Y3Qgc2FhNzE5MSAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+cmVnW3JlZ10gPSB2YWx1ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwl0b19zYWE3MTkxKHNkKS0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCiAvKiB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIG11c3QgYmUgdGhlIGZpcnN0IHN1YmFkZHJlc3MgbnVtYmVyIChyZWdpc3RlcikgKi8KLXN0YXRpYyBpbnQgc2FhNzE5MV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkgICAgICAgdTggbGVuZ3RoLCBjb25zdCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKIAlpbnQgaTsKIAlpbnQgcmV0OwogCi0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSAoc3RydWN0IHNhYTcxOTEgKilpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlmb3IgKGkgPSAwOyBpIDwgKGxlbmd0aCAtIDEpOyBpKyspIHsKIAkJZGVjb2Rlci0+cmVnW2RhdGFbMF0gKyBpXSA9IGRhdGFbaSArIDFdOwogCX0KQEAgLTE1MiwxNCArMTU5LDE1IEBACiAKIC8qIEhlbHBlciBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaW5wdXQpCitzdGF0aWMgaW50IHNhYTcxOTFfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBsdW1hID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEpOwotCXU4IGlvY2sgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSU9DSyk7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKKwl1OCBsdW1hID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSk7CisJdTggaW9jayA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0lPQ0spOwogCWludCBlcnI7CiAKLQlzd2l0Y2ggKGlucHV0KSB7CisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKIAljYXNlIFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFOiAvKiBTZXQgQ29tcG9zaXRlIGlucHV0ICovCiAJCWlvY2sgJj0gfihTQUE3MTkxX0lPQ0tfQ0hSUyB8IFNBQTcxOTFfSU9DS19HUFNXMQogCQkJICB8IFNBQTcxOTFfSU9DS19HUFNXMik7CkBAIC0xNzUsNTQgKzE4Myw1MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEsIGx1bWEpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BLCBsdW1hKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0lPQ0ssIGlvY2spOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19JT0NLLCBpb2NrKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKIAotCWRlY29kZXItPmlucHV0ID0gaW5wdXQ7CisJZGVjb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBub3JtKQorc3RhdGljIGludCBzYWE3MTkxX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQl1OCBzdGRjID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOwotCXU4IGN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JdTggY2hjdiA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DSENWKTsKKwlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOworCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKKwl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJdTggY2hjdiA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NIQ1YpOwogCWludCBlcnI7CiAKLQlzd2l0Y2gobm9ybSkgewotCWNhc2UgU0FBNzE5MV9OT1JNX1BBTDoKKwlpZiAobm9ybSAmIFY0TDJfU1REX1BBTCkgewogCQlzdGRjICY9IH5TQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEIHwgU0FBNzE5MV9DVEwzX0ZTRUwpOwogCQljaGN2ID0gU0FBNzE5MV9DSENWX1BBTDsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX05PUk1fTlRTQzoKKwl9IGVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKSB7CiAJCXN0ZGMgJj0gflNBQTcxOTFfU1REQ19TRUNTOwogCQljdGwzICY9IH5TQUE3MTkxX0NUTDNfQVVGRDsKIAkJY3RsMyB8PSBTQUE3MTkxX0NUTDNfRlNFTDsKIAkJY2hjdiA9IFNBQTcxOTFfQ0hDVl9OVFNDOwotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfTk9STV9TRUNBTToKKwl9IGVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkgewogCQlzdGRjIHw9IFNBQTcxOTFfU1REQ19TRUNTOwogCQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0FVRkQgfCBTQUE3MTkxX0NUTDNfRlNFTCk7CiAJCWNoY3YgPSBTQUE3MTkxX0NIQ1ZfUEFMOwotCQlicmVhazsKLQlkZWZhdWx0OgorCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgc3RkYyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ0hDViwgY2hjdik7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NIQ1YsIGNoY3YpOwogCWlmIChlcnIpCiAJCXJldHVybiAtRUlPOwogCkBAIC0yMzAsMTkgKzIzNCwxOSBAQAogCiAJZHByaW50aygiY3RsMzogJTAyeCBzdGRjOiAlMDJ4IGNoY3Y6ICUwMnhcbiIsIGN0bDMsCiAJCXN0ZGMsIGNoY3YpOwotCWRwcmludGsoIm5vcm06ICVkXG4iLCBub3JtKTsKKwlkcHJpbnRrKCJub3JtOiAlbGx4XG4iLCBub3JtKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4ICpzdGF0dXMpCitzdGF0aWMgaW50IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4ICpzdGF0dXMpCiB7CiAJaW50IGkgPSAwOwogCiAJZHByaW50aygiQ2hlY2tpbmcgZm9yIHNpZ25hbC4uLlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU0FBNzE5MV9TWU5DX0NPVU5UOyBpKyspIHsKLQkJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoY2xpZW50LCBzdGF0dXMpKQorCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhzZCwgc3RhdHVzKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCWlmICgoKCpzdGF0dXMpICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkgewpAQCAtMjU4LDMxICsyNjIsMzQgQEAKIAlyZXR1cm4gLUVCVVNZOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtX2V4dGVuZGVkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxOTFfcXVlcnlzdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgKm5vcm0pCiB7Ci0JdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19TVERDKTsKLQl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CisJdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOworCXU4IGN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAl1OCBzdGF0dXM7CisJdjRsMl9zdGRfaWQgb2xkX25vcm0gPSBkZWNvZGVyLT5ub3JtOwogCWludCBlcnIgPSAwOwogCiAJZHByaW50aygiU0FBNzE5MSBleHRlbmRlZCBzaWduYWwgYXV0by1kZXRlY3Rpb24uLi5cbiIpOwogCisJKm5vcm0gPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07CiAJc3RkYyAmPSB+U0FBNzE5MV9TVERDX1NFQ1M7CiAJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19GU0VMKTsKIAotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgc3RkYyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwogCWlmIChlcnIpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCiAJY3RsMyB8PSBTQUE3MTkxX0NUTDNfQVVGRDsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMjkwLDUzICsyOTcsNTQgQEAKIAogCW1zbGVlcChTQUE3MTkxX1NZTkNfREVMQVkpOwogCi0JZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoY2xpZW50LCAmc3RhdHVzKTsKKwllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzZCwgJnN0YXR1cyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQkvKiA2MEh6IHNpZ25hbCAtPiBOVFNDICovCiAJCWRwcmludGsoIjYwSHogc2lnbmFsOiBOVFNDXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7CisJCSpub3JtID0gVjRMMl9TVERfTlRTQzsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogNTBIeiBzaWduYWwgKi8KIAlkcHJpbnRrKCI1MEh6IHNpZ25hbDogVHJ5aW5nIFBBTC4uLlxuIik7CiAKIAkvKiB0cnkgUEFMIGZpcnN0ICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOworCWVyciA9IHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1BBTCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJLyogbm90IDUwSHogPyAqLwogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19GSURUKSB7CiAJCWRwcmludGsoIk5vIDUwSHogc2lnbmFsXG4iKTsKLQkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXQ7CisJCXNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKKwkJcmV0dXJuIC1FQUdBSU47CiAJfQogCiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpIHsKIAkJZHByaW50aygiUEFMXG4iKTsKLQkJcmV0dXJuIDA7CisJCSpub3JtID0gVjRMMl9TVERfUEFMOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogCX0KIAogCWRwcmludGsoIk5vIGNvbG9yIGRldGVjdGVkIHdpdGggUEFMIC0gVHJ5aW5nIFNFQ0FNLi4uXG4iKTsKIAogCS8qIG5vIGNvbG9yIGRldGVjdGVkID8gLT4gdHJ5IFNFQ0FNICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsCi0JCQkgICAgICAgU0FBNzE5MV9OT1JNX1NFQ0FNKTsKKwllcnIgPSBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9TRUNBTSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0zNTAsMzIgKzM1OCwxNyBAQAogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSB7CiAJCS8qIENvbG9yIGRldGVjdGVkIC0+IFNFQ0FNICovCiAJCWRwcmludGsoIlNFQ0FNXG4iKTsKLQkJcmV0dXJuIDA7CisJCSpub3JtID0gVjRMMl9TVERfU0VDQU07CisJCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBvbGRfbm9ybSk7CiAJfQogCiAJZHByaW50aygiTm8gY29sb3IgZGV0ZWN0ZWQgd2l0aCBTRUNBTSAtIEdvaW5nIGJhY2sgdG8gUEFMLlxuIik7CiAKLQkvKiBzdGlsbCBubyBjb2xvciBkZXRlY3RlZCA/Ci0JICogLT4gc2V0IG5vcm0gYmFjayB0byBQQUwgKi8KLQllcnIgPSBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwKLQkJCSAgICAgICBTQUE3MTkxX05PUk1fUEFMKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQogb3V0OgotCWN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JaWYgKGN0bDMgJiBTQUE3MTkxX0NUTDNfQVVGRCkgewotCQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0FVRkQpOwotCQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlPOwotCQl9Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJdTggc3RhdHVzOwogCkBAIC0zODMsNyArMzc2LDcgQEAKIAogCWRwcmludGsoIlJlYWRpbmcgc3RhdHVzLi4uXG4iKTsKIAotCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1cykpCisJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsICZzdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoIkNoZWNraW5nIGZvciBzaWduYWwuLi5cbiIpOwpAQCAtMzk5LDI2ICszOTIsMjUgQEAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQkvKiA2MGh6IHNpZ25hbCAtPiBOVFNDICovCiAJCWRwcmludGsoIk5UU0NcbiIpOwotCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9OVFNDKTsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX05UU0MpOwogCX0gZWxzZSB7CiAJCS8qIDUwaHogc2lnbmFsIC0+IFBBTCAqLwogCQlkcHJpbnRrKCJQQUxcbiIpOwotCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgVjRMMl9TVERfUEFMKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9nZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxOTFfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7CisJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQkJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCQkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX0xVTUFfQlBTU19NQVNLKQogCQkJCT4+IFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUOwpAQCAtNDM1LDE1ICs0MjcsMTUgQEAKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTik7Ci0JCWlmIChjdHJsLT50eXBlID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpCisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0dBSU4pOworCQlpZiAoY3RybC0+aWQgPT0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUikKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0NPTE8pID8gMSA6IDA7CiAJCWVsc2UKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0xGSVNfTUFTSykKIAkJCQk+PiBTQUE3MTkxX0dBSU5fTEZJU19TSElGVDsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfSFVFOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSFVFQyk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0hVRUMpOwogCQlpZiAocmVnIDwgMHg4MCkKIAkJCXJlZyArPSAweDgwOwogCQllbHNlCkBAIC00NTEsMTggKzQ0MywxOCBAQAogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WVFJDOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfU1REQ19WVFJDKSA/IDEgOiAwOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMM19ZREVMX01BU0spCiAJCQk+PiBTQUE3MTkxX0NUTDNfWURFTF9TSElGVDsKIAkJaWYgKGN0cmwtPnZhbHVlID49IDQpCiAJCQljdHJsLT52YWx1ZSAtPSA4OwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0KTsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCk7CiAJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9DVEw0X1ZOT0lfTUFTSykKIAkJCT4+IFNBQTcxOTFfQ1RMNF9WTk9JX1NISUZUOwogCQlicmVhazsKQEAgLTQ3MywxOCArNDY1LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3NldF9jb250cm9sKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgc3RydWN0IHNhYTcxOTFfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc2FhNzE5MV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1M6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NPUklORzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEpOwotCQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSk7CisJCXN3aXRjaCAoY3RybC0+aWQpIHsKIAkJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1M6CiAJCQlyZWcgJj0gflNBQTcxOTFfTFVNQV9CUFNTX01BU0s7CiAJCQlyZWcgfD0gKGN0cmwtPnZhbHVlIDw8IFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUKQpAQCAtNTAxLDEyICs0OTIsMTIgQEAKIAkJCQkmIFNBQTcxOTFfTFVNQV9DT1JJX01BU0s7CiAJCQlicmVhazsKIAkJfQotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0xVTUEsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVI6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU46Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19HQUlOKTsKLQkJaWYgKGN0cmwtPnR5cGUgPT0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUikgeworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOKTsKKwkJaWYgKGN0cmwtPmlkID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpIHsKIAkJCWlmIChjdHJsLT52YWx1ZSkKIAkJCQlyZWcgfD0gU0FBNzE5MV9HQUlOX0NPTE87CiAJCQllbHNlCkBAIC01MTYsNDEgKzUwNyw0MSBAQAogCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0dBSU5fTEZJU19TSElGVCkKIAkJCQkmIFNBQTcxOTFfR0FJTl9MRklTX01BU0s7CiAJCX0KLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19HQUlOLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfR0FJTiwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfSFVFOgorCWNhc2UgVjRMMl9DSURfSFVFOgogCQlyZWcgPSBjdHJsLT52YWx1ZSAmIDB4ZmY7CiAJCWlmIChyZWcgPCAweDgwKQogCQkJcmVnICs9IDB4ODA7CiAJCWVsc2UKIAkJCXJlZyAtPSAweDgwOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19IVUVDLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WVFJDOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwogCQlpZiAoY3RybC0+dmFsdWUpCiAJCQlyZWcgfD0gU0FBNzE5MV9TVERDX1ZUUkM7CiAJCWVsc2UKIAkJCXJlZyAmPSB+U0FBNzE5MV9TVERDX1ZUUkM7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQywgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVk6IHsKIAkJczMyIHZhbHVlID0gY3RybC0+dmFsdWU7CiAJCWlmICh2YWx1ZSA8IDApCiAJCQl2YWx1ZSArPSA4OwotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMyk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOwogCQlyZWcgJj0gflNBQTcxOTFfQ1RMM19ZREVMX01BU0s7CiAJCXJlZyB8PSAodmFsdWUgPDwgU0FBNzE5MV9DVEwzX1lERUxfU0hJRlQpCiAJCQkmIFNBQTcxOTFfQ1RMM19ZREVMX01BU0s7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMMywgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIHJlZyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0KTsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCk7CiAJCXJlZyAmPSB+U0FBNzE5MV9DVEw0X1ZOT0lfTUFTSzsKIAkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0NUTDRfVk5PSV9TSElGVCkKIAkJCSYgU0FBNzE5MV9DVEw0X1ZOT0lfTUFTSzsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEw0LCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMNCwgcmVnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTU2MSwyNDcgKzU1MiwxMDggQEAKIAogLyogSTJDLWludGVyZmFjZSAqLwogCi1zdGF0aWMgaW50IHNhYTcxOTFfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgaW50IGFkZHIsIGludCBraW5kKQorc3RhdGljIGludCBzYWE3MTkxX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXU4IHN0YXR1c19yZWc7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCisJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsICZzdGF0dXNfcmVnKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKKwkJcmVzID0gMDsKKwlpZiAoIShzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkpCisJCXJlcyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOworCSpzdGF0dXMgPSByZXM7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBzYWE3MTkxX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxOTEsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxOTFfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxOTFfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBzYWE3MTkxX2dfY3RybCwKKwkuc19jdHJsID0gc2FhNzE5MV9zX2N0cmwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTkxX3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBzYWE3MTkxX3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNzE5MV92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHNhYTcxOTFfc19yb3V0aW5nLAorCS5xdWVyeXN0ZCA9IHNhYTcxOTFfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gc2FhNzE5MV9nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTcxOTFfb3BzID0geworCS5jb3JlID0gJnNhYTcxOTFfY29yZV9vcHMsCisJLnZpZGVvID0gJnNhYTcxOTFfdmlkZW9fb3BzLAorCS50dW5lciA9ICZzYWE3MTkxX3R1bmVyX29wcywKK307CisKK3N0YXRpYyBpbnQgc2FhNzE5MV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHNhYTcxOTEgKmRlY29kZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUGhpbGlwcyBTQUE3MTkxIGRyaXZlciB2ZXJzaW9uICVzXG4iLAotCSAgICAgICBTQUE3MTkxX01PRFVMRV9WRVJTSU9OKTsKKwl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQljbGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZigqZGVjb2RlciksIEdGUF9LRVJORUwpOwotCWlmICghZGVjb2RlcikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX2NsaWVudDsKLQl9CisJaWYgKCFkZWNvZGVyKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX3NhYTcxOTE7Ci0JY2xpZW50LT5mbGFncyA9IDA7Ci0Jc3RyY3B5KGNsaWVudC0+bmFtZSwgInNhYTcxOTEgY2xpZW50Iik7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTcxOTFfb3BzKTsKIAotCWRlY29kZXItPmNsaWVudCA9IGNsaWVudDsKLQotCWVyciA9IGkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZnJlZV9kZWNvZGVyOwotCi0JZXJyID0gc2FhNzE5MV93cml0ZV9ibG9jayhjbGllbnQsIHNpemVvZihpbml0c2VxKSwgaW5pdHNlcSk7CisJZXJyID0gc2FhNzE5MV93cml0ZV9ibG9jayhzZCwgc2l6ZW9mKGluaXRzZXEpLCBpbml0c2VxKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShkZWNvZGVyKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJTQUE3MTkxIGluaXRpYWxpemVkXG4iKTsKIAogCWRlY29kZXItPmlucHV0ID0gU0FBNzE5MV9JTlBVVF9DT01QT1NJVEU7Ci0JZGVjb2Rlci0+bm9ybSA9IFNBQTcxOTFfTk9STV9QQUw7CisJZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKIAotCWVyciA9IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FQlVTWSkpIHsKKwllcnIgPSBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzZCk7CisJaWYgKGVyciAmJiAoZXJyICE9IC1FQlVTWSkpCiAJCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MTogU2lnbmFsIGF1dG8tZGV0ZWN0aW9uIGZhaWxlZFxuIik7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLW91dF9kZXRhY2hfY2xpZW50OgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1vdXRfZnJlZV9kZWNvZGVyOgotCWtmcmVlKGRlY29kZXIpOwotb3V0X2ZyZWVfY2xpZW50OgotCWtmcmVlKGNsaWVudCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzYWE3MTkxX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQkvKiBBbHdheXMgY29ubmVjdGVkIHRvIFZJTk8gKi8KLQlpZiAoYWRhcC0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKQotCQlyZXR1cm4gc2FhNzE5MV9hdHRhY2goYWRhcCwgU0FBNzE5MV9BRERSLCAwKTsKLQkvKiBGZWVsIGZyZWUgdG8gYWRkIHByb2JlIGhlcmUgOi0pICovCi0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShkZWNvZGVyKTsKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOiB7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzICA9IFZJREVPX0RFQ09ERVJfUEFMIHwgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfCBWSURFT19ERUNPREVSX0FVVE87Ci0JCWNhcC0+aW5wdXRzID0gKGNsaWVudC0+YWRhcHRlci0+aWQgPT0gSTJDX0hXX1NHSV9WSU5PKSA/IDIgOiAxOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCQl1OCBzdGF0dXM7Ci0JCWludCByZXMgPSAwOwotCi0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1cykpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX0FVVE86Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWVsc2UKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJKmlhcmcgPSByZXM7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX0FVVE86Ci0JCQlyZXR1cm4gc2FhNzE5MV9hdXRvZGV0ZWN0X25vcm0oY2xpZW50KTsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX1BBTCk7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX1NFQ0FNKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKGNsaWVudC0+YWRhcHRlci0+aWQpIHsKLQkJY2FzZSBJMkNfSFdfU0dJX1ZJTk86Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfaW5wdXQoY2xpZW50LCAqaWFyZyk7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoKmlhcmcgIT0gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6IHsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDogewotCQkvKiBBbHdheXMgZW5hYmxlZCAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOiB7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0JCXVuc2lnbmVkIHZhbDsKLQkJaW50IGVycjsKLQotCQl2YWwgPSAocGljLT5odWUgPj4gOCkgLSAweDgwOwotCi0JCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfSFVFQywgdmFsKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiAtRUlPOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyAqc3RhdHVzID0gYXJnOwotCQl1OCBzdGF0dXNfcmVnOwotCi0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgJnN0YXR1c19yZWcpKQotCQkJcmV0dXJuIC1FSU87Ci0KLQkJc3RhdHVzLT5zaWduYWwgPSAoKHN0YXR1c19yZWcgJiBTQUE3MTkxX1NUQVRVU19ITENLKSA9PSAwKQotCQkJPyAxIDogMDsKLQkJc3RhdHVzLT5zaWduYWxfNjBoeiA9IChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfRklEVCkKLQkJCT8gMSA6IDA7Ci0JCXN0YXR1cy0+Y29sb3IgPSAoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpID8gMSA6IDA7Ci0KLQkJc3RhdHVzLT5pbnB1dCA9IGRlY29kZXItPmlucHV0OwotCQlzdGF0dXMtPm5vcm0gPSBkZWNvZGVyLT5ub3JtOwotCi0JCWJyZWFrOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9TRVRfTk9STTogewotCQlpbnQgKm5vcm0gPSBhcmc7Ci0KLQkJc3dpdGNoICgqbm9ybSkgewotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JCWNhc2UgU0FBNzE5MV9OT1JNX0FVVE9fRVhUOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtX2V4dGVuZGVkKGNsaWVudCk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsICpub3JtKTsKLQkJfQotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9HRVRfQ09OVFJPTDogewotCQlyZXR1cm4gc2FhNzE5MV9nZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWNhc2UgREVDT0RFUl9TQUE3MTkxX1NFVF9DT05UUk9MOiB7Ci0JCXJldHVybiBzYWE3MTkxX3NldF9jb250cm9sKGNsaWVudCwgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxOTEgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgCT0gInNhYTcxOTEiLAotCX0sCi0JLmlkCQk9IEkyQ19EUklWRVJJRF9TQUE3MTkxLAotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxOTFfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQJPSBzYWE3MTkxX2RldGFjaCwKLQkuY29tbWFuZAk9IHNhYTcxOTFfY29tbWFuZAorc3RhdGljIGludCBzYWE3MTkxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zYWE3MTkxKHNkKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTkxX2lkW10gPSB7CisJeyAic2FhNzE5MSIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNzE5MV9pZCk7CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxOTEpOwotfQotCi1zdGF0aWMgdm9pZCBzYWE3MTkxX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTkxKTsKLX0KLQotbW9kdWxlX2luaXQoc2FhNzE5MV9pbml0KTsKLW1vZHVsZV9leGl0KHNhYTcxOTFfZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAic2FhNzE5MSIsCisJLnByb2JlID0gc2FhNzE5MV9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNzE5MV9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNzE5MV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCmluZGV4IGEyMzEwZGEuLjgwM2M3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5oCkBAIC0xNzYsMTEgKzE3Niw5IEBACiAjZGVmaW5lIFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFCTAKICNkZWZpbmUgU0FBNzE5MV9JTlBVVF9TVklERU8JMQogCi0jZGVmaW5lIFNBQTcxOTFfTk9STV9BVVRPCTAKICNkZWZpbmUgU0FBNzE5MV9OT1JNX1BBTAkxCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9OVFNDCTIKICNkZWZpbmUgU0FBNzE5MV9OT1JNX1NFQ0FNCTMKLSNkZWZpbmUgU0FBNzE5MV9OT1JNX0FVVE9fRVhUCTQJLyogZXh0ZW5kZWQgYXV0by1kZXRlY3Rpb24gKi8KIAogc3RydWN0IHNhYTcxOTFfc3RhdHVzIHsKIAkvKiAwPW5vIHNpZ25hbCwgMT1zaWduYWwgZGV0ZWN0ZWQgKi8KQEAgLTIzMiwyNCArMjMwLDE2IEBACiAjZGVmaW5lIFNBQTcxOTFfVk5SX01BWAkJCTB4MDMKICNkZWZpbmUgU0FBNzE5MV9WTlJfREVGQVVMVAkJMHgwMAogCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUwkwCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQJMQotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HCQkyCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIJMwkvKiBib29sZWFuICovCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTgk0Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9IVUUJCTUKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX1ZUUkMJCTYJLyogYm9vbGVhbiAqLwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWQk3Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WTlIJCTgKLQotc3RydWN0IHNhYTcxOTFfY29udHJvbCB7Ci0JdTggdHlwZTsKLQlzMzIgdmFsdWU7Ci19OworI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDApCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkcJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU4JKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDQpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WVFJDCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNSkKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WTlIJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA3KQogCiAjZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTCV9JT1IoJ2QnLCAxOTUsIHN0cnVjdCBzYWE3MTkxX3N0YXR1cykKICNkZWZpbmUJREVDT0RFUl9TQUE3MTkxX1NFVF9OT1JNCV9JT1coJ2QnLCAxOTYsIGludCkKLSNkZWZpbmUJREVDT0RFUl9TQUE3MTkxX0dFVF9DT05UUk9MCV9JT1IoJ2QnLCAxOTcsIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wpCi0jZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTAlfSU9XKCdkJywgMTk4LCBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwppbmRleCBkZGNiODFkLi5iNWUzN2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC05NCwxMyArOTQsMzcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBjYXB0dXJlOwogCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKmFjdGl2ZTsKLQlpbnQgaXNfaW50ZXJsYWNlOworCWludCBpc19pbnRlcmxhY2VkOwogCiAJc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyAqcGRhdGE7CiAKIAljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqY2FtZXJhX2ZtdDsKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1ha2VfYnVzX3BhcmFtKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcGNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWZsYWdzID0gU09DQU1fTUFTVEVSIHwKKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fREFUQV9BQ1RJVkVfSElHSDsKKworCWlmIChwY2Rldi0+cGRhdGEtPmZsYWdzICYgU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTKQorCQlmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfODsKKworCWlmIChwY2Rldi0+cGRhdGEtPmZsYWdzICYgU0hfQ0VVX0ZMQUdfVVNFXzE2QklUX0JVUykKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzE2OworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0spCisJCXJldHVybiBmbGFnczsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBjZXVfd3JpdGUoc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwcml2LAogCQkgICAgICB1bnNpZ25lZCBsb25nIHJlZ19vZmZzLCB1MzIgZGF0YSkKIHsKQEAgLTE1MCw2ICsxNzQsNyBAQAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJQlVHKCk7CiAKKwl2aWRlb2J1Zl93YWl0b24oJmJ1Zi0+dmIsIDAsIDApOwogCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgJmJ1Zi0+dmIpOwogCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgZnJlZWRcbiIsIF9fZnVuY19fKTsKIAlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKQEAgLTE4MSw3ICsyMDYsNyBAQAogCiAJcGh5c19hZGRyX3RvcCA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcocGNkZXYtPmFjdGl2ZSk7CiAJY2V1X3dyaXRlKHBjZGV2LCBDREFZUiwgcGh5c19hZGRyX3RvcCk7Ci0JaWYgKHBjZGV2LT5pc19pbnRlcmxhY2UpIHsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOwogCQljZXVfd3JpdGUocGNkZXYsIENEQllSLCBwaHlzX2FkZHJfYm90dG9tKTsKIAl9CkBAIC0xOTMsNyArMjE4LDcgQEAKIAljYXNlIFY0TDJfUElYX0ZNVF9OVjYxOgogCQlwaHlzX2FkZHJfdG9wICs9IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREFDUiwgcGh5c19hZGRyX3RvcCk7Ci0JCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlZCkgewogCQkJcGh5c19hZGRyX2JvdHRvbSA9IHBoeXNfYWRkcl90b3AgKyBpY2QtPndpZHRoOwogCQkJY2V1X3dyaXRlKHBjZGV2LCBDREJDUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJCX0KQEAgLTM5Niw3ICs0MjEsNyBAQAogCiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAotCQkJCQkJICAgICAgIHBjZGV2LT5wZGF0YS0+ZmxhZ3MpOworCQkJCQkJICAgICAgIG1ha2VfYnVzX3BhcmFtKHBjZGV2KSk7CiAJaWYgKCFjb21tb25fZmxhZ3MpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTcsNyArNDgyLDcgQEAKIAljZXVfd3JpdGUocGNkZXYsIENBTUNSLCB2YWx1ZSk7CiAKIAljZXVfd3JpdGUocGNkZXYsIENBUENSLCAweDAwMzAwMDAwKTsKLQljZXVfd3JpdGUocGNkZXYsIENBSUZSLCAocGNkZXYtPmlzX2ludGVybGFjZSkgPyAweDEwMSA6IDApOworCWNldV93cml0ZShwY2RldiwgQ0FJRlIsIHBjZGV2LT5pc19pbnRlcmxhY2VkID8gMHgxMDEgOiAwKTsKIAogCW1kZWxheSgxKTsKIApAQCAtNDczLDcgKzQ5OCw3IEBACiAJfQogCiAJaGVpZ2h0ID0gaWNkLT5oZWlnaHQ7Ci0JaWYgKHBjZGV2LT5pc19pbnRlcmxhY2UpIHsKKwlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJaGVpZ2h0IC89IDI7CiAJCWNkd2RyX3dpZHRoICo9IDI7CiAJfQpAQCAtNTE3LDcgKzU0Miw3IEBACiAKIAljYW1lcmFfZmxhZ3MgPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtKGljZCk7CiAJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsCi0JCQkJCQkgICAgICAgcGNkZXYtPnBkYXRhLT5mbGFncyk7CisJCQkJCQkgICAgICAgbWFrZV9idXNfcGFyYW0ocGNkZXYpKTsKIAlpZiAoIWNvbW1vbl9mbGFncykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTU2MiwxMSArNTg3LDI5IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiAwOwogCisJLyogQmVnaW5uaW5nIG9mIGEgcGFzcyAqLworCWlmICghaWR4KQorCQlpY2QtPmhvc3RfcHJpdiA9IE5VTEw7CisKIAlzd2l0Y2ggKGljZC0+Zm9ybWF0c1tpZHhdLmZvdXJjYykgewogCWNhc2UgVjRMMl9QSVhfRk1UX1VZVlk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfVllVWToKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgogCWNhc2UgVjRMMl9QSVhfRk1UX1lWWVU6CisJCWlmIChpY2QtPmhvc3RfcHJpdikKKwkJCWdvdG8gYWRkX3NpbmdsZV9mb3JtYXQ7CisKKwkJLyoKKwkJICogT3VyIGNhc2UgaXMgc2ltcGxlIHNvIGZhcjogZm9yIGFueSBvZiB0aGUgYWJvdmUgZm91ciBjYW1lcmEKKwkJICogZm9ybWF0cyB3ZSBhZGQgYWxsIG91ciBmb3VyIHN5bnRoZXNpemVkIE5WKiBmb3JtYXRzLCBzbywKKwkJICoganVzdCBtYXJraW5nIHRoZSBkZXZpY2Ugd2l0aCBhIHNpbmdsZSBmbGFnIHN1ZmZpY2VzLiBJZgorCQkgKiB0aGUgZm9ybWF0IGdlbmVyYXRpb24gcnVsZXMgYXJlIG1vcmUgY29tcGxleCwgeW91IHdvdWxkIGhhdmUKKwkJICogdG8gYWN0dWFsbHkgaGFuZyB5b3VyIGFscmVhZHkgYWRkZWQgLyBjb3VudGVkIGZvcm1hdHMgb250bworCQkgKiB0aGUgaG9zdF9wcml2IHBvaW50ZXIgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGZvcm1hdCB5b3UncmUKKwkJICogZ29pbmcgdG8gYWRkIG5vdyBpcyBhbHJlYWR5IHRoZXJlLgorCQkgKi8KKwkJaWNkLT5ob3N0X3ByaXYgPSAodm9pZCAqKXNoX21vYmlsZV9jZXVfZm9ybWF0czsKKwogCQluID0gQVJSQVlfU0laRShzaF9tb2JpbGVfY2V1X2Zvcm1hdHMpOwogCQlmb3JtYXRzICs9IG47CiAJCWZvciAoayA9IDA7IHhsYXRlICYmIGsgPCBuOyBrKyspIHsKQEAgLTU3OSw2ICs2MjIsNyBAQAogCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOwogCQl9CiAJZGVmYXVsdDoKK2FkZF9zaW5nbGVfZm9ybWF0OgogCQkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLwogCQlmb3JtYXRzKys7CiAJCWlmICh4bGF0ZSkgewpAQCAtNTk1LDI0ICs2MzksMzAgQEAKIAlyZXR1cm4gZm9ybWF0czsKIH0KIAorc3RhdGljIGludCBzaF9tb2JpbGVfY2V1X3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlyZXR1cm4gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJCSBfX3UzMiBwaXhmbXQsIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCisJCQkJIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCV9fdTMyIHBpeGZtdCA9IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQ7CiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgY2FtX2YgPSAqZjsKIAlpbnQgcmV0OwogCi0JaWYgKCFwaXhmbXQpCi0JCXJldHVybiBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHBpeGZtdCwgcmVjdCk7Ci0KIAl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4Zm10KTsKIAlpZiAoIXhsYXRlKSB7CiAJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgeGxhdGUtPmNhbV9mbXQtPmZvdXJjYywgcmVjdCk7CisJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHhsYXRlLT5jYW1fZm10LT5mb3VyY2M7CisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCAmY2FtX2YpOwogCiAJaWYgKCFyZXQpIHsKIAkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKQEAgLTY2MiwxMyArNzEyLDEzIEBACiAKIAlzd2l0Y2ggKGYtPmZtdC5waXguZmllbGQpIHsKIAljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKLQkJcGNkZXYtPmlzX2ludGVybGFjZSA9IDE7CisJCXBjZGV2LT5pc19pbnRlcmxhY2VkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0ZJRUxEX0FOWToKIAkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAkJLyogZmFsbC10aHJvdWdoICovCiAJY2FzZSBWNEwyX0ZJRUxEX05PTkU6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2UgPSAwOworCQlwY2Rldi0+aXNfaW50ZXJsYWNlZCA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC03MzQsNyArNzg0LDggQEAKIAkJCQkgICAgICAgJnNoX21vYmlsZV9jZXVfdmlkZW9idWZfb3BzLAogCQkJCSAgICAgICAmaWNpLT5kZXYsICZwY2Rldi0+bG9jaywKIAkJCQkgICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJCSAgICAgICBWNEwyX0ZJRUxEX0FOWSwKKwkJCQkgICAgICAgcGNkZXYtPmlzX2ludGVybGFjZWQgPworCQkJCSAgICAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgOiBWNEwyX0ZJRUxEX05PTkUsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIpLAogCQkJCSAgICAgICBpY2QpOwogfQpAQCAtNzQ0LDYgKzc5NSw3IEBACiAJLmFkZAkJPSBzaF9tb2JpbGVfY2V1X2FkZF9kZXZpY2UsCiAJLnJlbW92ZQkJPSBzaF9tb2JpbGVfY2V1X3JlbW92ZV9kZXZpY2UsCiAJLmdldF9mb3JtYXRzCT0gc2hfbW9iaWxlX2NldV9nZXRfZm9ybWF0cywKKwkuc2V0X2Nyb3AJPSBzaF9tb2JpbGVfY2V1X3NldF9jcm9wLAogCS5zZXRfZm10CT0gc2hfbW9iaWxlX2NldV9zZXRfZm10LAogCS50cnlfZm10CT0gc2hfbW9iaWxlX2NldV90cnlfZm10LAogCS5yZXFidWZzCT0gc2hfbW9iaWxlX2NldV9yZXFidWZzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKaW5kZXggOGNiMzQ1Ny4uMzhhNzE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCkBAIC05Niw5ICs5Niw3IEBACiAjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY1LCBCUklER0VfU045QzEwNSksIH0sCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcsIEJSSURHRV9TTjlDMTA1KSwgfSwKLSNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI3LCBCUklER0VfU045QzEwNSksIH0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4LCBCUklER0VfU045QzEwNSksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjBjMCwgQlJJREdFX1NOOUMxMDUpLCB9LApAQCAtMTIzLDcgKzEyMSw5IEBACiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2EsIEJSSURHRV9TTjlDMTIwKSwgfSwKICNlbmRpZgogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNiLCBCUklER0VfU045QzEyMCksIH0sCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNjLCBCUklER0VfU045QzEyMCksIH0sCisjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzZSwgQlJJREdFX1NOOUMxMjApLCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggZmNiMDVmMC4uNmQ4YmZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIAorLyogRGVmYXVsdCB0byBWR0EgcmVzb2x1dGlvbiAqLworI2RlZmluZSBERUZBVUxUX1dJRFRICTY0MAorI2RlZmluZSBERUZBVUxUX0hFSUdIVAk0ODAKKwogc3RhdGljIExJU1RfSEVBRChob3N0cyk7CiBzdGF0aWMgTElTVF9IRUFEKGRldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChsaXN0X2xvY2spOwpAQCAtMjU2LDYgKzI2MCw0NiBAQAogCXZmcmVlKGljZC0+dXNlcl9mb3JtYXRzKTsKIH0KIAorLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCAqLworc3RhdGljIGludCBzb2NfY2FtZXJhX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IHJldDsKKworCS8qIFdlIGFsd2F5cyBjYWxsIHRyeV9mbXQoKSBiZWZvcmUgc2V0X2ZtdCgpIG9yIHNldF9jcm9wKCkgKi8KKwlyZXQgPSBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCBmKTsKKwlpZiAocmV0IDwgMCkgeworCQlyZXR1cm4gcmV0OworCX0gZWxzZSBpZiAoIWljZC0+Y3VycmVudF9mbXQgfHwKKwkJICAgaWNkLT5jdXJyZW50X2ZtdC0+Zm91cmNjICE9IHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwkJZGV2X2VycigmaWNpLT5kZXYsCisJCQkiSG9zdCBkcml2ZXIgaGFzbid0IHNldCB1cCBjdXJyZW50IGZvcm1hdCBjb3JyZWN0bHkhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWNkLT53aWR0aAkJPSBwaXgtPndpZHRoOworCWljZC0+aGVpZ2h0CQk9IHBpeC0+aGVpZ2h0OworCWljZi0+dmJfdmlkcS5maWVsZAk9CisJCWljZC0+ZmllbGQJPSBwaXgtPmZpZWxkOworCisJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlkZXZfd2FybigmaWNkLT5kZXYsICJBdHRlbnRpb24hIFdyb25nIGJ1Zi10eXBlICVkXG4iLAorCQkJIGYtPnR5cGUpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICJzZXQgd2lkdGg6ICVkIGhlaWdodDogJWRcbiIsCisJCWljZC0+d2lkdGgsIGljZC0+aGVpZ2h0KTsKKworCS8qIHNldCBwaHlzaWNhbCBidXMgcGFyYW1ldGVycyAqLworCXJldHVybiBpY2ktPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIHBpeC0+cGl4ZWxmb3JtYXQpOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwpAQCAtMjk3LDE0ICszNDEsMjggQEAKIAogCS8qIE5vdyB3ZSByZWFsbHkgaGF2ZSB0byBhY3RpdmF0ZSB0aGUgY2FtZXJhICovCiAJaWYgKGljZC0+dXNlX2NvdW50ID09IDEpIHsKLQkJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZWl1Zm10OworCQkvKiBSZXN0b3JlIHBhcmFtZXRlcnMgYmVmb3JlIHRoZSBsYXN0IGNsb3NlKCkgcGVyIFY0TDIgQVBJICovCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmID0geworCQkJLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkuZm10LnBpeCA9IHsKKwkJCQkud2lkdGgJCT0gaWNkLT53aWR0aCwKKwkJCQkuaGVpZ2h0CQk9IGljZC0+aGVpZ2h0LAorCQkJCS5maWVsZAkJPSBpY2QtPmZpZWxkLAorCQkJCS5waXhlbGZvcm1hdAk9IGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYywKKwkJCQkuY29sb3JzcGFjZQk9IGljZC0+Y3VycmVudF9mbXQtPmNvbG9yc3BhY2UsCisJCQl9LAorCQl9OworCiAJCXJldCA9IGljaS0+b3BzLT5hZGQoaWNkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoJmljZC0+ZGV2LCAiQ291bGRuJ3QgYWN0aXZhdGUgdGhlIGNhbWVyYTogJWRcbiIsIHJldCk7CiAJCQlnb3RvIGVpY2lhZGQ7CiAJCX0KKworCQkvKiBUcnkgdG8gY29uZmlndXJlIHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzICovCisJCXJldCA9IHNvY19jYW1lcmFfc2V0X2ZtdChpY2YsICZmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVzZm10OwogCX0KIAogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKQEAgLTMxNiwxMCArMzc0LDEzIEBACiAKIAlyZXR1cm4gMDsKIAotCS8qIEZpcnN0IHR3byBlcnJvcnMgYXJlIGVudGVyZWQgd2l0aCB0aGUgLnZpZGVvX2xvY2sgaGVsZCAqLworCS8qCisJICogRmlyc3QgdGhyZWUgZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIC52aWRlb19sb2NrIGhlbGQKKwkgKiBhbmQgdXNlX2NvdW50ID09IDEKKwkgKi8KK2VzZm10OgorCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpY2lhZGQ6Ci0Jc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOwotZWl1Zm10OgogCWljZC0+dXNlX2NvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKQEAgLTMzOSwxMCArNDAwLDkgQEAKIAogCW11dGV4X2xvY2soJmljZC0+dmlkZW9fbG9jayk7CiAJaWNkLT51c2VfY291bnQtLTsKLQlpZiAoIWljZC0+dXNlX2NvdW50KSB7CisJaWYgKCFpY2QtPnVzZV9jb3VudCkKIAkJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwotCQlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7Ci0JfQorCiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCiAJbW9kdWxlX3B1dChpY2QtPm9wcy0+b3duZXIpOwpAQCAtNDE1LDE4ICs0NzUsMTAgQEAKIHsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBpY2YtPmljZDsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKLQlfX3UzMiBwaXhmbXQgPSBwaXgtPnBpeGVsZm9ybWF0OwogCWludCByZXQ7Ci0Jc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCiAJV0FSTl9PTihwcml2ICE9IGZpbGUtPnByaXZhdGVfZGF0YSk7CiAKLQlyZXQgPSBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAogCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZpY2YtPnZiX3ZpZHEpKSB7CkBAIC00MzUsMzMgKzQ4Nyw3IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCXJlY3QubGVmdAk9IGljZC0+eF9jdXJyZW50OwotCXJlY3QudG9wCT0gaWNkLT55X2N1cnJlbnQ7Ci0JcmVjdC53aWR0aAk9IHBpeC0+d2lkdGg7Ci0JcmVjdC5oZWlnaHQJPSBwaXgtPmhlaWdodDsKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2ZtdChpY2QsIHBpeC0+cGl4ZWxmb3JtYXQsICZyZWN0KTsKLQlpZiAocmV0IDwgMCkgewotCQlnb3RvIHVubG9jazsKLQl9IGVsc2UgaWYgKCFpY2QtPmN1cnJlbnRfZm10IHx8Ci0JCSAgIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyAhPSBwaXhmbXQpIHsKLQkJZGV2X2VycigmaWNpLT5kZXYsCi0JCQkiSG9zdCBkcml2ZXIgaGFzbid0IHNldCB1cCBjdXJyZW50IGZvcm1hdCBjb3JyZWN0bHkhXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JaWNkLT53aWR0aAkJPSByZWN0LndpZHRoOwotCWljZC0+aGVpZ2h0CQk9IHJlY3QuaGVpZ2h0OwotCWljZi0+dmJfdmlkcS5maWVsZAk9IHBpeC0+ZmllbGQ7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlkZXZfd2FybigmaWNkLT5kZXYsICJBdHRlbnRpb24hIFdyb25nIGJ1Zi10eXBlICVkXG4iLAotCQkJIGYtPnR5cGUpOwotCi0JZGV2X2RiZygmaWNkLT5kZXYsICJzZXQgd2lkdGg6ICVkIGhlaWdodDogJWRcbiIsCi0JCWljZC0+d2lkdGgsIGljZC0+aGVpZ2h0KTsKLQotCS8qIHNldCBwaHlzaWNhbCBidXMgcGFyYW1ldGVycyAqLwotCXJldCA9IGljaS0+b3BzLT5zZXRfYnVzX3BhcmFtKGljZCwgcGl4Zm10KTsKKwlyZXQgPSBzb2NfY2FtZXJhX3NldF9mbXQoaWNmLCBmKTsKIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmaWNmLT52Yl92aWRxLnZiX2xvY2spOwpAQCAtNjQ4LDggKzY3NCw4IEBACiAJYS0+Ym91bmRzLmhlaWdodAkJPSBpY2QtPmhlaWdodF9tYXg7CiAJYS0+ZGVmcmVjdC5sZWZ0CQkJPSBpY2QtPnhfbWluOwogCWEtPmRlZnJlY3QudG9wCQkJPSBpY2QtPnlfbWluOwotCWEtPmRlZnJlY3Qud2lkdGgJCT0gNjQwOwotCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IDQ4MDsKKwlhLT5kZWZyZWN0LndpZHRoCQk9IERFRkFVTFRfV0lEVEg7CisJYS0+ZGVmcmVjdC5oZWlnaHQJCT0gREVGQVVMVF9IRUlHSFQ7CiAJYS0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yCT0gMTsKIAlhLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvcgk9IDE7CiAKQEAgLTY4NSw3ICs3MTEsNyBAQAogCS8qIENyb3BwaW5nIGlzIGFsbG93ZWQgZHVyaW5nIGEgcnVubmluZyBjYXB0dXJlLCBndWFyZCBjb25zaXN0ZW5jeSAqLwogCW11dGV4X2xvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKIAotCXJldCA9IGljaS0+b3BzLT5zZXRfZm10KGljZCwgMCwgJmEtPmMpOworCXJldCA9IGljaS0+b3BzLT5zZXRfY3JvcChpY2QsICZhLT5jKTsKIAlpZiAoIXJldCkgewogCQlpY2QtPndpZHRoCT0gYS0+Yy53aWR0aDsKIAkJaWNkLT5oZWlnaHQJPSBhLT5jLmhlaWdodDsKQEAgLTg0NCw5ICs4NzAsMTggQEAKIAkJcWN0cmwgPSBzb2NfY2FtZXJhX2ZpbmRfcWN0cmwoaWNkLT5vcHMsIFY0TDJfQ0lEX0VYUE9TVVJFKTsKIAkJaWNkLT5leHBvc3VyZSA9IHFjdHJsID8gcWN0cmwtPmRlZmF1bHRfdmFsdWUgOgogCQkJKHVuc2lnbmVkIHNob3J0KX4wOwotCX0KLQlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CiAKKwkJcmV0ID0gc29jX2NhbWVyYV9pbml0X3VzZXJfZm9ybWF0cyhpY2QpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZWl1Zm10OworCisJCWljZC0+aGVpZ2h0CT0gREVGQVVMVF9IRUlHSFQ7CisJCWljZC0+d2lkdGgJPSBERUZBVUxUX1dJRFRIOworCQlpY2QtPmZpZWxkCT0gVjRMMl9GSUVMRF9BTlk7CisJfQorCitlaXVmbXQ6CisJaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogZWlhZGQ6CiAJbXV0ZXhfdW5sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCW1vZHVsZV9wdXQoaWNpLT5vcHMtPm93bmVyKTsKQEAgLTg2NSw2ICs5MDAsOCBAQAogCWlmIChpY2QtPm9wcy0+cmVtb3ZlKQogCQlpY2QtPm9wcy0+cmVtb3ZlKGljZCk7CiAKKwlzb2NfY2FtZXJhX2ZyZWVfdXNlcl9mb3JtYXRzKGljZCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE4LDYgKzk1NSw3IEBACiAJaWYgKCFpY2kgfHwgIWljaS0+b3BzIHx8CiAJICAgICFpY2ktPm9wcy0+dHJ5X2ZtdCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9mbXQgfHwKKwkgICAgIWljaS0+b3BzLT5zZXRfY3JvcCB8fAogCSAgICAhaWNpLT5vcHMtPnNldF9idXNfcGFyYW0gfHwKIAkgICAgIWljaS0+b3BzLT5xdWVyeWNhcCB8fAogCSAgICAhaWNpLT5vcHMtPmluaXRfdmlkZW9idWYgfHwKQEAgLTk5OCw2ICsxMDM2LDcgQEAKIAkgICAgIWljZC0+b3BzLT5yZWxlYXNlIHx8CiAJICAgICFpY2QtPm9wcy0+c3RhcnRfY2FwdHVyZSB8fAogCSAgICAhaWNkLT5vcHMtPnN0b3BfY2FwdHVyZSB8fAorCSAgICAhaWNkLT5vcHMtPnNldF9jcm9wIHx8CiAJICAgICFpY2QtPm9wcy0+c2V0X2ZtdCB8fAogCSAgICAhaWNkLT5vcHMtPnRyeV9mbXQgfHwKIAkgICAgIWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0gfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKaW5kZXggMDEzYWIwNi4uYzQ4Njc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhX3BsYXRmb3JtLmMKQEAgLTc5LDggKzc5LDE0IEBACiAJcmV0dXJuIHAtPmJ1c19wYXJhbTsKIH0KIAorc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCQlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgICAgICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjUsNiArMTMxLDcgQEAKIAkucmVsZWFzZQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfZm10LAogCS50cnlfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9idXNfcGFyYW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IDI2Mzc4Y2YuLjFhNmQzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC05MzMsOCArOTMzLDYgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxwLAogCQl2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXRkKQogewotCWZtdGQtPmZsYWdzID0gMDsKLQogCXN3aXRjaCAoZm10ZC0+aW5kZXgpIHsKIAljYXNlIDA6CiAJCWZtdGQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjU2NTsKQEAgLTk5Miw3ICs5OTAsNiBAQAogCXBpeF9mb3JtYXQtPmhlaWdodCA9IHN0a19zaXplc1tpXS5oOwogCXBpeF9mb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwogCXBpeF9mb3JtYXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKLQlwaXhfZm9ybWF0LT5wcml2ID0gMDsKIAlwaXhfZm9ybWF0LT5waXhlbGZvcm1hdCA9IGRldi0+dnNldHRpbmdzLnBhbGV0dGU7CiAJaWYgKGRldi0+dnNldHRpbmdzLnBhbGV0dGUgPT0gVjRMMl9QSVhfRk1UX1NCR0dSOCkKIAkJcGl4X2Zvcm1hdC0+Ynl0ZXNwZXJsaW5lID0gcGl4X2Zvcm1hdC0+d2lkdGg7CkBAIC0xMTE1LDggKzExMTIsNiBAQAogCiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAocmItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoaXNfc3RyZWFtaW5nKGRldikKQEAgLTExMzksMTYgKzExMzQsMTAgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCiB7Ci0JaW50IGluZGV4OwogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBwcml2OwogCXN0cnVjdCBzdGtfc2lvX2J1ZmZlciAqc2J1ZjsKIAotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWluZGV4ID0gYnVmLT5pbmRleDsKLQotCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZGV2LT5uX3NidWZzKQorCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGRldi0+bl9zYnVmcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc2J1ZiA9IGRldi0+c2lvX2J1ZnMgKyBidWYtPmluZGV4OwogCSpidWYgPSBzYnVmLT52NGxidWY7CkBAIC0xMTYxLDggKzExNTAsNiBAQAogCXN0cnVjdCBzdGtfY2FtZXJhICpkZXYgPSBwcml2OwogCXN0cnVjdCBzdGtfc2lvX2J1ZmZlciAqc2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExODksOCArMTE3Niw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUKLQkJfHwgIWlzX3N0cmVhbWluZyhkZXYpKQorCWlmICghaXNfc3RyZWFtaW5nKGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmIGxpc3RfZW1wdHkoJmRldi0+c2lvX2Z1bGwpKQpAQCAtMTI0OSwxNiArMTIzNSwxMCBAQAogc3RhdGljIGludCBzdGtfdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7Ci0JaWYgKHNwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcC0+cGFybS5jYXB0dXJlLmNhcGFiaWxpdHkgPSAwOwotCXNwLT5wYXJtLmNhcHR1cmUuY2FwdHVyZW1vZGUgPSAwOwogCS8qRklYTUUgVGhpcyBpcyBub3QgY29ycmVjdCAqLwogCXNwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CiAJc3AtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSAzMDsKIAlzcC0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMjsKLQlzcC0+cGFybS5jYXB0dXJlLmV4dGVuZGVkbW9kZSA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKaW5kZXggMjk5OTFkMS4uYjMwYzQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmMKQEAgLTUwLDcgKzUwLDcgQEAKIH07CiAKIC8qIGxpc3Qgb2YgaW1hZ2UgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgVENNODI1WCBzZW5zb3IgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHRjbTgyNXhfZm9ybWF0c1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZtdGRlc2MgdGNtODI1eF9mb3JtYXRzW10gPSB7CiAJewogCQkuZGVzY3JpcHRpb24gPSAiWVVZViAoWVVWIDQ6MjoyKSwgcGFja2VkIiwKIAkJLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlksCkBAIC03NiwxNSArNzYsMTUgQEAKICAqIFRDTTgyNVggcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBmb3IgYWxsIGNvbWJpbmF0aW9ucyBvZiBwaXhlbCBmb3JtYXQgYW5kCiAgKiBpbWFnZSBzaXplCiAgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgc3VicWNpZgk9CXsgMHgyMCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcWNpZgk9CXsgMHgxOCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgY2lmCT0JeyAweDE0LCBUQ004MjVYX1BJQ1NJWiB9OwotY29uc3Qgc3RhdGljIHN0cnVjdCB0Y204MjV4X3JlZyBxcXZnYQk9CXsgMHgwYywgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcXZnYQk9CXsgMHgwNCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgdmdhCT0JeyAweDAwLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBzdWJxY2lmCT0JeyAweDIwLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxY2lmCT0JeyAweDE4LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBjaWYJPQl7IDB4MTQsIFRDTTgyNVhfUElDU0laIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHFxdmdhCT0JeyAweDBjLCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxdmdhCT0JeyAweDA0LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyB2Z2EJPQl7IDB4MDAsIFRDTTgyNVhfUElDU0laIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgeXV2NDIyCT0JeyAweDAwLCBUQ004MjVYX1BJQ0ZNVCB9OwotY29uc3Qgc3RhdGljIHN0cnVjdCB0Y204MjV4X3JlZyByZ2I1NjUJPQl7IDB4MDIsIFRDTTgyNVhfUElDRk1UIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHl1djQyMgk9CXsgMHgwMCwgVENNODI1WF9QSUNGTVQgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcmdiNTY1CT0JeyAweDAyLCBUQ004MjVYX1BJQ0ZNVCB9OwogCiAvKiBPdXIgb3duIHNwZWNpZmljIGNvbnRyb2xzICovCiAjZGVmaW5lIFY0TDJfQ0lEX0FMQwkJCQlWNEwyX0NJRF9QUklWQVRFX0JBU0UKQEAgLTI0OCwxMCArMjQ4LDEwIEBACiB9OwogCiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfc2l6X3JlZ1tOVU1fSU1BR0VfU0laRVNdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfc2l6X3JlZ1tOVU1fSU1BR0VfU0laRVNdID0KIHsgJnN1YnFjaWYsICZxcXZnYSwgJnFjaWYsICZxdmdhLCAmY2lmLCAmdmdhIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfZm10X3JlZ1tOVU1fUElYRUxfRk9STUFUU10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyAqdGNtODI1eF9mbXRfcmVnW05VTV9QSVhFTF9GT1JNQVRTXSA9CiB7ICZ5dXY0MjIsICZyZ2I1NjUgfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKaW5kZXggNzcwZWJhYy4uNWI3ZTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90Y204MjV4LmgKQEAgLTE4OCw3ICsxODgsNyBAQAogLyogQXJyYXkgb2YgaW1hZ2Ugc2l6ZXMgc3VwcG9ydGVkIGJ5IFRDTTgyNVguICBUaGVzZSBtdXN0IGJlIG9yZGVyZWQgZnJvbQogICogc21hbGxlc3QgaW1hZ2Ugc2l6ZSB0byBsYXJnZXN0LgogICovCi1jb25zdCBzdGF0aWMgc3RydWN0IGNhcHR1cmVfc2l6ZSB0Y204MjV4X3NpemVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNhcHR1cmVfc2l6ZSB0Y204MjV4X3NpemVzW10gPSB7CiAJeyAxMjgsICA5NiB9LCAvKiBzdWJRQ0lGICovCiAJeyAxNjAsIDEyMCB9LCAvKiBRUVZHQSAqLwogCXsgMTc2LCAxNDQgfSwgLyogUUNJRiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwppbmRleCAwYzAyMDU4Li4wMDVmOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTc0MzIuYwpAQCAtNTAsNyArNTAsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiAjaWZuZGVmIFZJREVPX0FVRElPX0JBTEFOQ0UKICMgZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKQEAgLTY5LDEzICs2OSw2IEBACiBtb2R1bGVfcGFyYW0obWF4dm9sLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIAogCi0vKiBBZGRyZXNzIHRvIHNjYW4gKEkyQyBhZGRyZXNzIG9mIHRoaXMgY2hpcCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX0FERFJfVERBNzQzMiA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIFN0cnVjdHVyZSBvZiBhZGRyZXNzIGFuZCBzdWJhZGRyZXNzZXMgZm9yIHRoZSB0ZGE3NDMyICovCiAKQEAgLTQyMSwyMSArNDE0LDE4IEBACiBzdGF0aWMgaW50IHRkYTc0MzJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB0ZGE3NDMyX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE3NDMyX2NvcmVfb3BzID0gewpAQCAtNDk4LDggKzQ4OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE3NDMyIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBNzQzMiwKLQkuY29tbWFuZCA9IHRkYTc0MzJfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE3NDMyX3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE3NDMyX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0ZGE3NDMyX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwppbmRleCA2YWZiNzA1Li5mZTExNTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuYwpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+Ci0jaW5jbHVkZSAidGRhOTg0MC5oIgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ0ZGE5ODQwIGRyaXZlciIpOwpAQCAtNTYsMTEgKzU2LDYgQEAKICNkZWZpbmUgVERBOTg0MF9TRVRfQk9USF9SICAgICAgICAgICAgICAweDE2CiAjZGVmaW5lIFREQTk4NDBfU0VUX0VYVEVSTkFMICAgICAgICAgICAgMHg3YQogCi0vKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDQyICg3LUJpdCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1REQTk4NDAsIEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogc3RhdGljIHZvaWQgdGRhOTg0MF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKIHsKQEAgLTEzNyw2MCArMTMyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIHRkYTk4NDBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRkYTk4NDBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCWludCBieXRlOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUREE5ODQwX0xFVkVMX0FESlVTVDoKLQkJYnl0ZSA9ICooaW50ICopYXJnOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX0xFVkVMX0FESlVTVDogJWRcbiIsIGJ5dGUpOwotCi0JCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCi0JCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGNhbGN1bGF0ZSBhY3R1YWwgdmFsdWUgdG8gc2V0LCBzZWUgc3BlY3MsIHBhZ2UgMTggKi8KLQkJYnl0ZSAvPSA1OwotCQlpZiAoMCA8IGJ5dGUpCi0JCQlieXRlICs9IDB4ODsKLQkJZWxzZQotCQkJYnl0ZSA9IC1ieXRlOwotCQl0ZGE5ODQwX3dyaXRlKHNkLCBMRVZFTF9BREpVU1QsIGJ5dGUpOwotCQlicmVhazsKLQotCWNhc2UgVERBOTg0MF9TVEVSRU9fQURKVVNUOgotCQlieXRlID0gKihpbnQgKilhcmc7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlREQTk4NDBfU1RFUkVPX0FESlVTVDogJWRcbiIsIGJ5dGUpOwotCi0JCS8qIGNoZWNrIGZvciBjb3JyZWN0IHJhbmdlICovCi0JCWlmIChieXRlID4gMjUgfHwgYnl0ZSA8IC0yNCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qIGNhbGN1bGF0ZSBhY3R1YWwgdmFsdWUgdG8gc2V0ICovCi0JCWJ5dGUgLz0gNTsKLQkJaWYgKDAgPCBieXRlKQotCQkJYnl0ZSArPSAweDIwOwotCQllbHNlCi0JCQlieXRlID0gLWJ5dGU7Ci0KLQkJdGRhOTg0MF93cml0ZShzZCwgU1RFUkVPX0FESlVTVCwgYnl0ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHRkYTk4NDBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVERBOTg0MCwgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGRhOTg0MF9jb3JlX29wcyA9IHsKLQkuaW9jdGwgPSB0ZGE5ODQwX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZGE5ODQwX2dfY2hpcF9pZGVudCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHRkYTk4NDBfdHVuZXJfb3BzID0gewpAQCAtMjA5LDggKzE2MSw2IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwotCWludCByZXN1bHQ7Ci0JaW50IGJ5dGU7CiAKIAkvKiBsZXQncyBzZWUgd2hldGhlciB0aGlzIGFkYXB0ZXIgY2FuIHN1cHBvcnQgd2hhdCB3ZSBuZWVkICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCkBAIC0yMjcsMTUgKzE3Nyw5IEBACiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTk4NDBfb3BzKTsKIAogCS8qIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgbGV2ZWwgJiBzdGVyZW8gLSBhZGp1c3RtZW50LCBtb2RlICovCi0JYnl0ZSA9IDA7Ci0JcmVzdWx0ID0gdGRhOTg0MF9pb2N0bChzZCwgVERBOTg0MF9MRVZFTF9BREpVU1QsICZieXRlKTsKLQlyZXN1bHQgfD0gdGRhOTg0MF9pb2N0bChzZCwgVERBOTg0MF9TVEVSRU9fQURKVVNULCAmYnl0ZSk7CisJdGRhOTg0MF93cml0ZShzZCwgTEVWRUxfQURKVVNULCAwKTsKKwl0ZGE5ODQwX3dyaXRlKHNkLCBTVEVSRU9fQURKVVNULCAwKTsKIAl0ZGE5ODQwX3dyaXRlKHNkLCBTV0lUQ0gsIFREQTk4NDBfU0VUX1NURVJFTyk7Ci0JaWYgKHJlc3VsdCkgewotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZGE5ODQwXG4iKTsKLQkJa2ZyZWUoc2QpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OCwxMiArMTkyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0ZGE5ODQwX2xlZ2FjeV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogTGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBpcyBhIGtub3duIGFkYXB0ZXIgd2UgY2FuIGF0dGFjaCB0by4KLQkgICBQcmV2ZW50cyBjb25mbGljdHMgd2l0aCB0dmF1ZGlvLmMuICovCi0JcmV0dXJuIGFkYXB0ZXItPmlkID09IEkyQ19IV19TQUE3MTQ2OwotfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdGRhOTg0MF9pZFtdID0gewogCXsgInRkYTk4NDAiLCAwIH0sCiAJeyB9CkBAIC0yNjIsMTAgKzIwMSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE5ODQwIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBOTg0MCwKLQkuY29tbWFuZCA9IHRkYTk4NDBfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE5ODQwX3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE5ODQwX3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0gdGRhOTg0MF9sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0gdGRhOTg0MF9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzEyYWU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfX0lOQ0xVREVEX1REQTk4NDBfXwotI2RlZmluZSBfX0lOQ0xVREVEX1REQTk4NDBfXwotCi0jZGVmaW5lCUkyQ19BRERSX1REQTk4NDAJCTB4NDIKLQotLyogdmFsdWVzIG1heSByYW5nZSBiZXR3ZWVuICsyLjUgYW5kIC0yLjA7Ci0gICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwotI2RlZmluZSBUREE5ODQwX0xFVkVMX0FESlVTVAlfSU9XKCd2JywzLGludCkKLQotLyogdmFsdWVzIG1heSByYW5nZSBiZXR3ZWVuICsyLjUgYW5kIC0yLjQ7Ci0gICB0aGUgdmFsdWUgaGFzIHRvIGJlIG11bHRpcGxpZWQgd2l0aCAxMCAqLwotI2RlZmluZSBUREE5ODQwX1NURVJFT19BREpVU1QJX0lPVygndicsNCxpbnQpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwppbmRleCAwMGM2Y2JlLi4yNGUyYjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NzUuYwpAQCAtMjgsMjAgKzI4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvaTJjLWFkZHIuaD4KIAogc3RhdGljIGludCBkZWJ1ZzsgLyogaW5zbW9kIHBhcmFtZXRlciAqLwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSAgewotICAgIEkyQ19BRERSX1REQTk4NzUgPj4gMSwKLSAgICBJMkNfQ0xJRU5UX0VORAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgVERBOTg3NSAqLwogc3RydWN0IHRkYTk4NzUgewpAQCAtMzEzLDE4ICszMDYsMTQgQEAKIHsKIAlzd2l0Y2ggKHFjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHRkYTk4NzVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRkYTk4NzVfY29yZV9vcHMgPSB7CkBAIC00MDEsOCArMzkwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRkYTk4NzUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9UREE5ODc1LAotCS5jb21tYW5kID0gdGRhOTg3NV9jb21tYW5kLAogCS5wcm9iZSA9IHRkYTk4NzVfcHJvYmUsCiAJLnJlbW92ZSA9IHRkYTk4NzVfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHRkYTk4NzVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKaW5kZXggNzUxOWZkMS4uZDYxYzU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKQEAgLTQ0LDI1ICs0NSwyMiBAQAogCiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAotLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHgwMyBhbmQvb3IgMHg0MyAoNy1iaXQpICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfVEVBNjQxNUNfMSwgSTJDX1RFQTY0MTVDXzIsIEkyQ19DTElFTlRfRU5EIH07CiAKLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotLyogbWFrZXMgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0LXBpbiAnaScgYW5kIHRoZSBvdXRwdXQtcGluICdvJwotICAgZm9yIHRoZSB0ZWE2NDE1Yy1jbGllbnQgJ2NsaWVudCcgKi8KLXN0YXRpYyBpbnQgc3dpdGNoX21hdHJpeChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaSwgaW50IG8pCisvKiBtYWtlcyBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaW5wdXQtcGluICdpJyBhbmQgdGhlIG91dHB1dC1waW4gJ28nICovCitzdGF0aWMgaW50IHRlYTY0MTVjX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdTggYnl0ZSA9IDA7CisJdTMyIGkgPSByb3V0ZS0+aW5wdXQ7CisJdTMyIG8gPSByb3V0ZS0+b3V0cHV0OwogCWludCByZXQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkXG4iLCBpLCBvKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpPSVkLCBvPSVkXG4iLCBpLCBvKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwaW5zIGFyZSB2YWxpZCAqLwogCWlmICgwID09ICgoMSA9PSBpIHx8ICAzID09IGkgfHwgIDUgPT0gaSB8fCAgNiA9PSBpIHx8ICA4ID09IGkgfHwgMTAgPT0gaSB8fCAyMCA9PSBpIHx8IDExID09IGkpCiAJICAgICAgJiYgKDE4ID09IG8gfHwgMTcgPT0gbyB8fCAxNiA9PSBvIHx8IDE1ID09IG8gfHwgMTQgPT0gbyB8fCAxMyA9PSBvKSkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiB0byB1bmRlcnN0YW5kIHRoaXMsIGhhdmUgYSBsb29rIGF0IHRoZSB0ZWE2NDE1Yy1zcGVjcyAocC41KSAqLwogCXN3aXRjaCAobykgewpAQCAtMTE1LDM3ICsxMTMsMzMgQEAKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgYnl0ZSk7CiAJaWYgKHJldCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcgdGVhNjQxNWNfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRlYTY0MTVjX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKLQlpZiAoY21kID09IFRFQTY0MTVDX1NXSVRDSCkgewotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0JCXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKnYgPSAoc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCAqKWFyZzsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQkJcmV0dXJuIHN3aXRjaF9tYXRyaXgoY2xpZW50LCB2LT5pbiwgdi0+b3V0KTsKLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCB0ZWE2NDE1Y19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7CisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9URUE2NDE1QywgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGVhNjQxNWNfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGVhNjQxNWNfaW9jdGwsCisJLmdfY2hpcF9pZGVudCA9IHRlYTY0MTVjX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHRlYTY0MTVjX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdGVhNjQxNWNfc19yb3V0aW5nLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgdGVhNjQxNWNfb3BzID0gewogCS5jb3JlID0gJnRlYTY0MTVjX2NvcmVfb3BzLAorCS52aWRlbyA9ICZ0ZWE2NDE1Y192aWRlb19vcHMsCiB9OwogCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KQEAgLTE3NiwxMiArMTcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MTVjX2lkW10gPSB7CiAJeyAidGVhNjQxNWMiLCAwIH0sCkBAIC0xOTEsMTAgKzE3OSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZWE2NDE1YyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RFQTY0MTVDLAotCS5jb21tYW5kID0gdGVhNjQxNWNfY29tbWFuZCwKIAkucHJvYmUgPSB0ZWE2NDE1Y19wcm9iZSwKIAkucmVtb3ZlID0gdGVhNjQxNWNfcmVtb3ZlLAotCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDE1Y19sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0gdGVhNjQxNWNfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oCmluZGV4IGY4NGVkODAuLjNhNDdkNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmgKQEAgLTEsMTAgKzEsNiBAQAogI2lmbmRlZiBfX0lOQ0xVREVEX1RFQTY0MTVDX18KICNkZWZpbmUgX19JTkNMVURFRF9URUE2NDE1Q19fCiAKLS8qIHBvc3NpYmxlIGkyYy1hZGRyZXNzZXMgKi8KLSNkZWZpbmUJSTJDX1RFQTY0MTVDXzEJCTB4MDMKLSNkZWZpbmUJSTJDX1RFQTY0MTVDXzIJCTB4NDMKLQogLyogdGhlIHRlYTY0MTVjJ3MgZGVzaWduIGlzIHF1aXRlIGJyYWluLWRlYWQuIGFsdGhvdWdoIHRoZXJlIGFyZQogICAgOCBpbnB1dHMgYW5kIDYgb3V0cHV0cywgdGhlc2UgYXJlbid0IGVudW1lcmF0ZWQgaW4gYW55IHdheS4gYmVjYXVzZQogICAgSSBkb24ndCB3YW50IHRvIHNheSAiY29ubmVjdCBpbnB1dCBwaW4gMjAgdG8gb3V0cHV0IHBpbiAxNyIsIEkgZGVmaW5lCkBAIC0yOCwxMiArMjQsNCBAQAogI2RlZmluZSBURUE2NDE1Q19JTlBVVDcgMQogI2RlZmluZSBURUE2NDE1Q19JTlBVVDggMTEKIAotc3RydWN0IHRlYTY0MTVjX211bHRpcGxleAotewotCWludAlpbjsJLyogaW5wdXQtcGluICovCi0JaW50CW91dDsJLyogb3V0cHV0LXBpbiAqLwotfTsKLQotI2RlZmluZSBURUE2NDE1Q19TV0lUQ0gJCV9JT1coJ3YnLDEsc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCmluZGV4IDA4MWU3NGYuLjM0OTIyMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5jCkBAIC0zMiw3ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlICJ0ZWE2NDIwLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CkBAIC00NCwyNCArNDUsMjMgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLS8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4NGMgYW5kL29yIDB4NGQgKDctQml0KSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0FERFJfVEVBNjQyMF8xLCBJMkNfQUREUl9URUE2NDIwXzIsIEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIG1hZ2ljIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIHZhcmlhYmxlcyBhbmQgdGhpbmdzICovCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogbWFrZSBhIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgaW5wdXQgJ2knIGFuZCB0aGUgb3V0cHV0ICdvJwotICAgd2l0aCBnYWluICdnJyBmb3IgdGhlIHRlYTY0MjAtY2xpZW50ICdjbGllbnQnIChub3RlOiBpID0gNiBtZWFucyAnbXV0ZScpICovCi1zdGF0aWMgaW50IHRlYTY0MjBfc3dpdGNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBpLCBpbnQgbywgaW50IGcpCisgICB3aXRoIGdhaW4gJ2cnIChub3RlOiBpID0gNiBtZWFucyAnbXV0ZScpICovCitzdGF0aWMgaW50IHRlYTY0MjBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgaSA9IHJvdXRlLT5pbnB1dDsKKwlpbnQgbyA9IHJvdXRlLT5vdXRwdXQgJiAweGY7CisJaW50IGcgPSAocm91dGUtPm91dHB1dCA+PiA0KSAmIDB4ZjsKIAl1OCBieXRlOwogCWludCByZXQ7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpPSVkLCBvPSVkLCBnPSVkXG4iLCBpLCBvLCBnKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpPSVkLCBvPSVkLCBnPSVkXG4iLCBpLCBvLCBnKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCAqLwogCWlmIChpIDwgMSB8fCBpID4gNiB8fCBvIDwgMSB8fCBvID4gNCB8fCBnIDwgMCB8fCBnID4gNiB8fCBnICUgMiAhPSAwKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJYnl0ZSA9ICgobyAtIDEpIDw8IDUpOwogCWJ5dGUgfD0gKGkgLSAxKTsKQEAgLTgzLDM3ICs4MywzMyBAQAogCiAJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBieXRlKTsKIAlpZiAocmV0KSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAogCQkJImkyY19zbWJ1c193cml0ZV9ieXRlKCkgZmFpbGVkLCByZXQ6JWRcbiIsIHJldCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgdGVhNjQyMF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdGVhNjQyMF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7Ci0JaWYgKGNtZCA9PSBURUE2NDIwX1NXSVRDSCkgewotCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0JCXN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCAqYSA9IChzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKilhcmc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCXJldHVybiB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIGEtPmluLCBhLT5vdXQsIGEtPmdhaW4pOwotCX0KLQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotfQotCi1zdGF0aWMgaW50IHRlYTY0MjBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVEVBNjQyMCwgMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGVhNjQyMF9jb3JlX29wcyA9IHsKLQkuaW9jdGwgPSB0ZWE2NDIwX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZWE2NDIwX2dfY2hpcF9pZGVudCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIHRlYTY0MjBfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB0ZWE2NDIwX3Nfcm91dGluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRlYTY0MjBfb3BzID0gewogCS5jb3JlID0gJnRlYTY0MjBfY29yZV9vcHMsCisJLmF1ZGlvID0gJnRlYTY0MjBfYXVkaW9fb3BzLAogfTsKIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCkBAIC0xMzAsMjAgKzEyNiwyNCBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAorCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZWE2NDIwX29wcyk7CisKIAkvKiBzZXQgaW5pdGlhbCB2YWx1ZXM6IHNldCAibXV0ZSItaW5wdXQgdG8gYWxsIG91dHB1dHMgYXQgZ2FpbiAwICovCiAJZXJyID0gMDsKIAlmb3IgKGkgPSAxOyBpIDwgNTsgaSsrKSB7Ci0JCWVyciArPSB0ZWE2NDIwX3N3aXRjaChjbGllbnQsIDYsIGksIDApOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCisJCXJvdXRlLmlucHV0ID0gNjsKKwkJcm91dGUub3V0cHV0ID0gaTsKKwkJZXJyICs9IHRlYTY0MjBfc19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIAlpZiAoZXJyKSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNvdWxkIG5vdCBpbml0aWFsaXplIHRlYTY0MjBcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0KLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwotCWlmIChzZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTYsMTIgKzE1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVhNjQyMF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRlYTY0MjBfaWRbXSA9IHsKIAl7ICJ0ZWE2NDIwIiwgMCB9LApAQCAtMTcxLDEwICsxNjUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGVhNjQyMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RFQTY0MjAsCi0JLmNvbW1hbmQgPSB0ZWE2NDIwX2NvbW1hbmQsCiAJLnByb2JlID0gdGVhNjQyMF9wcm9iZSwKIAkucmVtb3ZlID0gdGVhNjQyMF9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IHRlYTY0MjBfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRlYTY0MjBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAppbmRleCA1ZWY3YzE4Li40YWEzZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuaApAQCAtMSwxNyArMSwyNCBAQAogI2lmbmRlZiBfX0lOQ0xVREVEX1RFQTY0MjBfXwogI2RlZmluZSBfX0lOQ0xVREVEX1RFQTY0MjBfXwogCi0vKiBwb3NzaWJsZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUJSTJDX0FERFJfVEVBNjQyMF8xCQkweDRjCi0jZGVmaW5lCUkyQ19BRERSX1RFQTY0MjBfMgkJMHg0ZAorLyogaW5wdXQgcGlucyAqLworI2RlZmluZSBURUE2NDIwX09VVFBVVDEgMQorI2RlZmluZSBURUE2NDIwX09VVFBVVDIgMgorI2RlZmluZSBURUE2NDIwX09VVFBVVDMgMworI2RlZmluZSBURUE2NDIwX09VVFBVVDQgNAogCi1zdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXgKLXsKLQlpbnQJaW47CS8qIGlucHV0IG9mIGF1ZGlvIHN3aXRjaCAqLwotCWludAlvdXQ7CS8qIG91dHB1dCBvZiBhdWRpbyBzd2l0Y2ggICovCi0JaW50CWdhaW47CS8qIGdhaW4gb2YgY29ubmVjdGlvbiAqLwotfTsKKy8qIG91dHB1dCBwaW5zICovCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQxIDEKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDIgMgorI2RlZmluZSBURUE2NDIwX0lOUFVUMyAzCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQ0IDQKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDUgNQorI2RlZmluZSBURUE2NDIwX0lOUFVUNiA2CiAKLSNkZWZpbmUgVEVBNjQyMF9TV0lUQ0gJCV9JT1coJ3YnLDEsc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4KQorLyogZ2FpbiBvbiB0aGUgb3V0cHV0IHBpbnMsIE9SZWQgd2l0aCB0aGUgb3V0cHV0IHBpbiAqLworI2RlZmluZSBURUE2NDIwX0dBSU4wIDB4MDAKKyNkZWZpbmUgVEVBNjQyMF9HQUlOMiAweDIwCisjZGVmaW5lIFRFQTY0MjBfR0FJTjQgMHg0MAorI2RlZmluZSBURUE2NDIwX0dBSU42IDB4NjAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYwppbmRleCA1Yzk1ZWNkLi4wNzc4OWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKQEAgLTMxLDE1ICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInRsdjMyMGFpYzIzYiBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlNjb3R0IEFsZnRlciwgVWxmIEVrbHVuZCwgSGFucyBWZXJrdWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MzQgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEyMSwxMSArMTE4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0bHYzMjBhaWMyM2JfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRsdjMyMGFpYzIzYl9jb3JlX29wcyA9IHsKQEAgLTIwOCw4ICsyMDAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGx2MzIwYWljMjNiIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVExWMzIwQUlDMjNCLAotCS5jb21tYW5kID0gdGx2MzIwYWljMjNiX2NvbW1hbmQsCiAJLnByb2JlID0gdGx2MzIwYWljMjNiX3Byb2JlLAogCS5yZW1vdmUgPSB0bHYzMjBhaWMyM2JfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHRsdjMyMGFpYzIzYl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKaW5kZXggMzA2NDBmYi4uNzJkNDEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1jb3JlLmMKQEAgLTM2NCw3ICszNjQsOCBAQAogCX0KIAogCXQtPnR5cGUgPSB0eXBlOwotCXQtPmNvbmZpZyA9IG5ld19jb25maWc7CisJLyogcHJldmVudCBpbnZhbGlkIGNvbmZpZyB2YWx1ZXMgKi8KKwl0LT5jb25maWcgPSAoKG5ld19jb25maWcgPj0gMCkgJiYgKG5ld19jb25maWcgPCAyNTYpKSA/IG5ld19jb25maWcgOiAwOwogCWlmICh0dW5lcl9jYWxsYmFjayAhPSBOVUxMKSB7CiAJCXR1bmVyX2RiZygiZGVmaW5pbmcgR1BJTyBjYWxsYmFja1xuIik7CiAJCXQtPmZlLmNhbGxiYWNrID0gdHVuZXJfY2FsbGJhY2s7CkBAIC00NTIsNyArNDUzLDggQEAKIAkJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnhjX3R1bmVyX29wczsKIAogCQl4YzUwMDBfY2ZnLmkyY19hZGRyZXNzCSAgPSB0LT5pMmMtPmFkZHI7Ci0JCXhjNTAwMF9jZmcuaWZfa2h6CSAgPSA1MzgwOworCQkvKiBpZl9raHogd2lsbCBiZSBzZXQgd2hlbiB0aGUgZGlnaXRhbCBkdmJfYXR0YWNoKCkgb2NjdXJzICovCisJCXhjNTAwMF9jZmcuaWZfa2h6CSAgPSAwOwogCQlpZiAoIWR2Yl9hdHRhY2goeGM1MDAwX2F0dGFjaCwKIAkJCQkmdC0+ZmUsIHQtPmkyYy0+YWRhcHRlciwgJnhjNTAwMF9jZmcpKQogCQkJZ290byBhdHRhY2hfZmFpbGVkOwpAQCAtNzc2LDggKzc3OCw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJBVURDX1NFVF9SQURJTyIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfUkFESU8sICJzX3JhZGlvIikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAJaWYgKHQtPnJhZGlvX2ZyZXEpCiAJCXNldF9mcmVxKGNsaWVudCwgdC0+cmFkaW9fZnJlcSk7CkBAIC03OTEsNyArNzkyLDcgQEAKIAogCXR1bmVyX2RiZygiUHV0dGluZyB0dW5lciB0byBzbGVlcFxuIik7CiAKLQlpZiAoY2hlY2tfbW9kZSh0LCAiVFVORVJfU0VUX1NUQU5EQlkiKSA9PSAtRUlOVkFMKQorCWlmIChjaGVja19tb2RlKHQsICJzX3N0YW5kYnkiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAl0LT5tb2RlID0gVF9TVEFOREJZOwogCWlmIChhbmFsb2dfb3BzLT5zdGFuZGJ5KQpAQCAtNzk5LDEzMiArODAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi1zdGF0aWMgbG9uZyB0dW5lcl9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlzdHJ1Y3QgYW5hbG9nX2RlbW9kX29wcyAqYW5hbG9nX29wcyA9ICZ0LT5mZS5vcHMuYW5hbG9nX29wczsKLQlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqZmVfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DU0FVRElPOgotCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DU0FVRElPIikgPT0gLUVJTlZBTCkKLQkJCXJldHVybiAwOwotCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogU2hvdWxkIGJlIGltcGxlbWVudGVkLCBzaW5jZSBidHR2IGNhbGxzIGl0ICovCi0JCXR1bmVyX2RiZygiVklESU9DU0FVRElPIG5vdCBpbXBsZW1lbnRlZC5cbiIpOwotCQlicmVhazsKLQljYXNlIFZJRElPQ1NDSEFOOgotCQl7Ci0JCQlzdGF0aWMgY29uc3QgdjRsMl9zdGRfaWQgbWFwW10gPSB7Ci0JCQkJW1ZJREVPX01PREVfUEFMXSA9IFY0TDJfU1REX1BBTCwKLQkJCQlbVklERU9fTU9ERV9OVFNDXSA9IFY0TDJfU1REX05UU0NfTSwKLQkJCQlbVklERU9fTU9ERV9TRUNBTV0gPSBWNEwyX1NURF9TRUNBTSwKLQkJCQlbNCAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9QQUxfTSwKLQkJCQlbNSAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9QQUxfTiwKLQkJCQlbNiAvKiBidHR2ICovIF0gPSBWNEwyX1NURF9OVFNDX01fSlAsCi0JCQl9OwotCQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlpZiAoc2V0X21vZGUoY2xpZW50LHQsVjRMMl9UVU5FUl9BTkFMT0dfVFYsICJWSURJT0NTQ0hBTiIpPT0tRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlpZiAodmMtPm5vcm0gPCBBUlJBWV9TSVpFKG1hcCkpCi0JCQkJdC0+c3RkID0gbWFwW3ZjLT5ub3JtXTsKLQkJCXR1bmVyX2ZpeHVwX3N0ZCh0KTsKLQkJCWlmICh0LT50dl9mcmVxKQotCQkJCXNldF90dl9mcmVxKGNsaWVudCwgdC0+dHZfZnJlcSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DU0ZSRVE6Ci0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgKnYgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NTRlJFUSIpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAoY2hlY2tfdjRsMih0KSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCi0JCQlzZXRfZnJlcShjbGllbnQsICp2KTsKLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdnQgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NHVFVORVIiKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgewotCQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKLQkJCQkJdTMyIHR1bmVyX3N0YXR1czsKLQotCQkJCQlmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMoJnQtPmZlLCAmdHVuZXJfc3RhdHVzKTsKLQkJCQkJaWYgKHR1bmVyX3N0YXR1cyAmIFRVTkVSX1NUQVRVU19TVEVSRU8pCi0JCQkJCQl2dC0+ZmxhZ3MgfD0gVklERU9fVFVORVJfU1RFUkVPX09OOwotCQkJCQllbHNlCi0JCQkJCQl2dC0+ZmxhZ3MgJj0gflZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoYW5hbG9nX29wcy0+aXNfc3RlcmVvKSB7Ci0JCQkJCQlpZiAoYW5hbG9nX29wcy0+aXNfc3RlcmVvKCZ0LT5mZSkpCi0JCQkJCQkJdnQtPmZsYWdzIHw9Ci0JCQkJCQkJCVZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJCWVsc2UKLQkJCQkJCQl2dC0+ZmxhZ3MgJj0KLQkJCQkJCQkJflZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoYW5hbG9nX29wcy0+aGFzX3NpZ25hbCkKLQkJCQkJdnQtPnNpZ25hbCA9Ci0JCQkJCQlhbmFsb2dfb3BzLT5oYXNfc2lnbmFsKCZ0LT5mZSk7Ci0KLQkJCQl2dC0+ZmxhZ3MgfD0gVklERU9fVFVORVJfTE9XOwkvKiBBbGxvdyBmcmVxcyBhdCA2Mi41IEh6ICovCi0KLQkJCQl2dC0+cmFuZ2Vsb3cgPSByYWRpb19yYW5nZVswXSAqIDE2MDAwOwotCQkJCXZ0LT5yYW5nZWhpZ2ggPSByYWRpb19yYW5nZVsxXSAqIDE2MDAwOwotCi0JCQl9IGVsc2UgewotCQkJCXZ0LT5yYW5nZWxvdyA9IHR2X3JhbmdlWzBdICogMTY7Ci0JCQkJdnQtPnJhbmdlaGlnaCA9IHR2X3JhbmdlWzFdICogMTY7Ci0JCQl9Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JY2FzZSBWSURJT0NHQVVESU86Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdmEgPSBhcmc7Ci0KLQkJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NHQVVESU8iKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKFY0TDJfVFVORVJfUkFESU8gPT0gdC0+bW9kZSkgewotCQkJCWlmIChmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMpIHsKLQkJCQkJdTMyIHR1bmVyX3N0YXR1czsKLQotCQkJCQlmZV90dW5lcl9vcHMtPmdldF9zdGF0dXMoJnQtPmZlLCAmdHVuZXJfc3RhdHVzKTsKLQkJCQkJdmEtPm1vZGUgPSAodHVuZXJfc3RhdHVzICYgVFVORVJfU1RBVFVTX1NURVJFTykKLQkJCQkJICAgID8gVklERU9fU09VTkRfU1RFUkVPIDogVklERU9fU09VTkRfTU9OTzsKLQkJCQl9IGVsc2UgaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbykKLQkJCQkJdmEtPm1vZGUgPSBhbmFsb2dfb3BzLT5pc19zdGVyZW8oJnQtPmZlKQotCQkJCQkgICAgPyBWSURFT19TT1VORF9TVEVSRU8gOiBWSURFT19TT1VORF9NT05POwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHR1bmVyX3NfY29uZmlnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3ByaXZfdHVuX2NvbmZpZyAqY2ZnKQogewogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKQEAgLTk1MCw4ICs4MjUsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX0FOQUxPR19UViwgIlZJRElPQ19TX1NURCIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIFY0TDJfVFVORVJfQU5BTE9HX1RWLCAic19zdGQiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaF92NGwyKCk7CkBAIC05NjgsOCArODQyLDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKHNldF9tb2RlKGNsaWVudCwgdCwgZi0+dHlwZSwgIlZJRElPQ19TX0ZSRVFVRU5DWSIpCi0JCQk9PSAtRUlOVkFMKQorCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIGYtPnR5cGUsICJzX2ZyZXF1ZW5jeSIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAJc2V0X2ZyZXEoY2xpZW50LCBmLT5mcmVxdWVuY3kpOwpAQCAtOTgyLDcgKzg1NSw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfR19GUkVRVUVOQ1kiKSA9PSAtRUlOVkFMKQorCWlmIChjaGVja19tb2RlKHQsICJnX2ZyZXF1ZW5jeSIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAJZi0+dHlwZSA9IHQtPm1vZGU7CkBAIC0xMDA2LDcgKzg3OSw3IEBACiAJc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7CiAJc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19HX1RVTkVSIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAiZ190dW5lciIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCXN3aXRjaF92NGwyKCk7CiAKQEAgLTEwNTUsNyArOTI4LDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ19TX1RVTkVSIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAic190dW5lciIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCiAJc3dpdGNoX3Y0bDIoKTsKQEAgLTExMTIsOSArOTg1LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdHVuZXJfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSB0dW5lcl9sb2dfc3RhdHVzLAogCS5zX3N0YW5kYnkgPSB0dW5lcl9zX3N0YW5kYnksCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEKLQkuaW9jdGwgPSB0dW5lcl9pb2N0bCwKLSNlbmRpZgogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdHVuZXJfdHVuZXJfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCAwNzZlZDViLi4yMjZiZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMTA0Nyw2ICsxMDQ3LDExNiBAQAogCXJldHVybiAwOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBhdWRpbyBjaGlwIGRlc2NyaXB0aW9uIC0gZGVmaW5lcytmdW5jdGlvbnMgZm9yIHRkYTk4NzUgICAgICAgICAgICAgICAgICovCisvKiBUaGUgVERBOTg3NSBpcyBtYWRlIGJ5IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcgorICogaHR0cDovL3d3dy5zZW1pY29uZHVjdG9ycy5waGlsaXBzLmNvbQorICogVERBOTg3NTogSTJDLWJ1cyBjb250cm9sbGVkIERTUCBhdWRpbyBwcm9jZXNzb3IsIEZNIGRlbW9kdWxhdG9yCisgKgorICovCisKKy8qIHN1YmFkZHJlc3NlcyBmb3IgVERBOTg3NSAqLworI2RlZmluZSBUREE5ODc1X01VVCAgICAgICAgIDB4MTIgIC8qR2VuZXJhbCBtdXRlICAodmFsdWUgLS0+IDBiMTEwMDExMDAqLworI2RlZmluZSBUREE5ODc1X0NGRyAgICAgICAgIDB4MDEgIC8qIENvbmZpZyByZWdpc3RlciAodmFsdWUgLS0+IDBiMDAwMDAwMDAgKi8KKyNkZWZpbmUgVERBOTg3NV9EQUNPUyAgICAgICAweDEzICAvKkRBQyBpL28gc2VsZWN0IChBREMpIDBiMDAwMDEwMCovCisjZGVmaW5lIFREQTk4NzVfTE9TUiAgICAgICAgMHgxNiAgLypMaW5lIG91dHB1dCBzZWxlY3QgcmVnaXJ0ZXIgMGIwMTAwIDAwMDEqLworCisjZGVmaW5lIFREQTk4NzVfQ0gxViAgICAgICAgMHgwYyAgLypDaGFubmVsIDEgdm9sdW1lIChtdXRlKSovCisjZGVmaW5lIFREQTk4NzVfQ0gyViAgICAgICAgMHgwZCAgLypDaGFubmVsIDIgdm9sdW1lIChtdXRlKSovCisjZGVmaW5lIFREQTk4NzVfU0MxICAgICAgICAgMHgxNCAgLypTQ0FSVCAxIGluIChtb25vKSovCisjZGVmaW5lIFREQTk4NzVfU0MyICAgICAgICAgMHgxNSAgLypTQ0FSVCAyIGluIChtb25vKSovCisKKyNkZWZpbmUgVERBOTg3NV9BRENJUyAgICAgICAweDE3ICAvKkFEQyBpbnB1dCBzZWxlY3QgKG1vbm8pIDBiMDExMCAwMDAqLworI2RlZmluZSBUREE5ODc1X0FFUiAgICAgICAgIDB4MTkgIC8qQXVkaW8gZWZmZWN0IChBVkwrUHNldWRvKSAwYjAwMDAgMDExMCovCisjZGVmaW5lIFREQTk4NzVfTUNTICAgICAgICAgMHgxOCAgLypNYWluIGNoYW5uZWwgc2VsZWN0IChEQUMpIDBiMDAwMDEwMCovCisjZGVmaW5lIFREQTk4NzVfTVZMICAgICAgICAgMHgxYSAgLyogTWFpbiB2b2x1bWUgZ2F1Y2hlICovCisjZGVmaW5lIFREQTk4NzVfTVZSICAgICAgICAgMHgxYiAgLyogTWFpbiB2b2x1bWUgZHJvaXRlICovCisjZGVmaW5lIFREQTk4NzVfTUJBICAgICAgICAgMHgxZCAgLyogTWFpbiBCYXNzZSAqLworI2RlZmluZSBUREE5ODc1X01UUiAgICAgICAgIDB4MWUgIC8qIE1haW4gdHJlYmxlICovCisjZGVmaW5lIFREQTk4NzVfQUNTICAgICAgICAgMHgxZiAgLyogQXV4aWxhcnkgY2hhbm5lbCBzZWxlY3QgKEZNKSAwYjAwMDAwMDAqLworI2RlZmluZSBUREE5ODc1X0FWTCAgICAgICAgIDB4MjAgIC8qIEF1eGlsYXJ5IHZvbHVtZSBnYXVjaGUgKi8KKyNkZWZpbmUgVERBOTg3NV9BVlIgICAgICAgICAweDIxICAvKiBBdXhpbGFyeSB2b2x1bWUgZHJvaXRlICovCisjZGVmaW5lIFREQTk4NzVfQUJBICAgICAgICAgMHgyMiAgLyogQXV4aWxhcnkgQmFzc2UgKi8KKyNkZWZpbmUgVERBOTg3NV9BVFIgICAgICAgICAweDIzICAvKiBBdXhpbGFyeSB0cmVibGUgKi8KKworI2RlZmluZSBUREE5ODc1X01TUiAgICAgICAgIDB4MDIgIC8qIE1vbml0b3Igc2VsZWN0IHJlZ2lzdGVyICovCisjZGVmaW5lIFREQTk4NzVfQzFNU0IgICAgICAgMHgwMyAgLyogQ2FycmllciAxIChGTSkgZnJlcXVlbmN5IHJlZ2lzdGVyIE1TQiAqLworI2RlZmluZSBUREE5ODc1X0MxTUlCICAgICAgIDB4MDQgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciAoMTYtOF1iICovCisjZGVmaW5lIFREQTk4NzVfQzFMU0IgICAgICAgMHgwNSAgLyogQ2FycmllciAxIChGTSkgZnJlcXVlbmN5IHJlZ2lzdGVyIExTQiAqLworI2RlZmluZSBUREE5ODc1X0MyTVNCICAgICAgIDB4MDYgIC8qIENhcnJpZXIgMiAobmljYW0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMk1JQiAgICAgICAweDA3ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgKDE2LThdYiAqLworI2RlZmluZSBUREE5ODc1X0MyTFNCICAgICAgIDB4MDggIC8qIENhcnJpZXIgMiAobmljYW0pIGZyZXF1ZW5jeSByZWdpc3RlciBMU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9EQ1IgICAgICAgICAweDA5ICAvKiBEZW1vZHVsYXRldXIgY29uZmlndXJhdGlvbiByZWdpcnRlciovCisjZGVmaW5lIFREQTk4NzVfREVFTSAgICAgICAgMHgwYSAgLyogRk0gZGUtZW1waGFzaXMgcmVnaXJ0ZXIqLworI2RlZmluZSBUREE5ODc1X0ZNQVQgICAgICAgIDB4MGIgIC8qIEZNIE1hdHJpeCByZWdpcnRlciovCisKKy8qIHZhbHVlcyAqLworI2RlZmluZSBUREE5ODc1X01VVEVfT04JICAgIDB4ZmYgLyogZ2VuZXJhbCBtdXRlICovCisjZGVmaW5lIFREQTk4NzVfTVVURV9PRkYgICAgMHhjYyAvKiBnZW5lcmFsIG5vIG11dGUgKi8KKworc3RhdGljIGludCB0ZGE5ODc1X2luaXRpYWxpemUoc3RydWN0IENISVBTVEFURSAqY2hpcCkKK3sKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQ0ZHLCAweGQwKTsgLypyZWcgZGUgY29uZmlnIDAgKHJlc2V0KSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01TUiwgMHgwMyk7ICAgIC8qIE1vbml0b3IgMGIwMDAwMFhYWCovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MxTVNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTVNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMU1JQiwgMHgwMCk7ICAvKkNhcjEoRk0pIE1JQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzFMU0IsIDB4MDApOyAgLypDYXIxKEZNKSBMU0IgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MyTVNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTVNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMk1JQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIE1JQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzJMU0IsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBMU0IgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0RDUiwgMHgwMCk7ICAgIC8qRGVtb2QgY29uZmlnIDB4MDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9ERUVNLCAweDQ0KTsgICAvKkRFLUVtcGggMGIwMTAwIDAxMDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9GTUFULCAweDAwKTsgICAvKkZNIE1hdHJpeCByZWcgMHgwMCovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X1NDMSwgMHgwMCk7ICAgIC8qIFNDQVJUIDEgKFNDMSkqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9TQzIsIDB4MDEpOyAgICAvKiBTQ0FSVCAyIChzYzIpKi8KKworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DSDFWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDEgbXV0ZSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0NIMlYsIDB4MTApOyAgLyogQ2hhbm5lbCB2b2x1bWUgMiBtdXRlICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0RBQ09TLCAweDAyKTsgLyogc2lnIERBQyBpL28oaW46bmljYW0pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQURDSVMsIDB4NmYpOyAvKiBzaWcgQURDIGlucHV0KGluOm1vbm8pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTE9TUiwgMHgwMCk7ICAvKiBsaW5lIG91dCAoaW46bW9ubykqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BRVIsIDB4MDApOyAgIC8qMDYgRWZmZWN0IChBVkwrUFNFVURPKSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NQ1MsIDB4NDQpOyAgIC8qIE1haW4gY2ggc2VsZWN0IChEQUMpICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01WTCwgMHgwMyk7ICAgLyogVm9sIE1haW4gbGVmdCAxMGRCICovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01WUiwgMHgwMyk7ICAgLyogVm9sIE1haW4gcmlnaHQgMTBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01CQSwgMHgwMCk7ICAgLyogTWFpbiBCYXNzIE1haW4gMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTVRSLCAweDAwKTsgICAvKiBNYWluIFRyZWJsZSBNYWluIDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FDUywgMHg0NCk7ICAgLyogQXV4IGNoYW4gc2VsZWN0IChkYWMpKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVZMLCAweDAwKTsgICAvKiBWb2wgQXV4IGxlZnQgMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVZSLCAweDAwKTsgICAvKiBWb2wgQXV4IHJpZ2h0IDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FCQSwgMHgwMCk7ICAgLyogQXV4IEJhc3MgTWFpbiAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BVFIsIDB4MDApOyAgIC8qIEF1eCBBaWd1cyBNYWluIDBkQiovCisKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTVVULCAweGNjKTsgICAvKiBHZW5lcmFsIG11dGUgICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhOTg3NV92b2x1bWUoaW50IHZhbCkgeyByZXR1cm4gKHVuc2lnbmVkIGNoYXIpKHZhbCAvIDYwMiAtIDg0KTsgfQorc3RhdGljIGludCB0ZGE5ODc1X2Jhc3MoaW50IHZhbCkgeyByZXR1cm4gKHVuc2lnbmVkIGNoYXIpKG1heCgtMTIsIHZhbCAvIDIxMTUgLSAxNSkpOyB9CitzdGF0aWMgaW50IHRkYTk4NzVfdHJlYmxlKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSh2YWwgLyAyNjIyIC0gMTIpOyB9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKiogKgorICogaTJjIGludGVyZmFjZSBmdW5jdGlvbnMgKgorICogKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RhdGljIGludCB0ZGE5ODc1X2NoZWNraXQoc3RydWN0IENISVBTVEFURSAqY2hpcCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJmNoaXAtPnNkOworCWludCBkaWMsIHJldjsKKworCWRpYyA9IGNoaXBfcmVhZDIoY2hpcCwgMjU0KTsKKwlyZXYgPSBjaGlwX3JlYWQyKGNoaXAsIDI1NSk7CisKKwlpZiAoZGljID09IDAgfHwgZGljID09IDIpIHsgLyogdGRhOTg3NSBhbmQgdGRhOTg3NUEgKi8KKwkJdjRsMl9pbmZvKHNkLCAiZm91bmQgdGRhOTg3NSVzIHJldi4gJWQuXG4iLAorCQkJZGljID09IDAgPyAiIiA6ICJBIiwgcmV2KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBhdWRpbyBjaGlwIGRlc2NyaXB0aW9ucyAtIGRlZmluZXMrZnVuY3Rpb25zIGZvciB0ZWE2NDIwICAgICAgICAgICAgICAgICovCkBAIC0xMjgwLDYgKzEzOTAsNyBAQAogc3RhdGljIGludCB0ZGE5ODU1ICA9IDE7CiBzdGF0aWMgaW50IHRkYTk4NzMgID0gMTsKIHN0YXRpYyBpbnQgdGRhOTg3NGEgPSAxOworc3RhdGljIGludCB0ZGE5ODc1ICA9IDE7CiBzdGF0aWMgaW50IHRlYTYzMDA7CS8qIGRlZmF1bHQgMCAtIGFkZHJlc3MgY2xhc2ggd2l0aCBtc3AzNHh4ICovCiBzdGF0aWMgaW50IHRlYTYzMjA7CS8qIGRlZmF1bHQgMCAtIGFkZHJlc3MgY2xhc2ggd2l0aCBtc3AzNHh4ICovCiBzdGF0aWMgaW50IHRlYTY0MjAgID0gMTsKQEAgLTEyOTIsNiArMTQwMyw3IEBACiBtb2R1bGVfcGFyYW0odGRhOTg1NSwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZGE5ODczLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRkYTk4NzRhLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKHRkYTk4NzUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGVhNjMwMCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZWE2MzIwLCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRlYTY0MjAsIGludCwgMDQ0NCk7CkBAIC0xMzQ5LDYgKzE0NjEsMjYgQEAKIAkJLnNldG1vZGUgICAgPSB0ZGE5ODc0YV9zZXRtb2RlLAogCX0sCiAJeworCQkubmFtZSAgICAgICA9ICJ0ZGE5ODc1IiwKKwkJLmluc21vZG9wdCAgPSAmdGRhOTg3NSwKKwkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODc1ID4+IDEsCisJCS5hZGRyX2hpICAgID0gSTJDX0FERFJfVERBOTg3NSA+PiAxLAorCQkuZmxhZ3MgICAgICA9IENISVBfSEFTX1ZPTFVNRSB8IENISVBfSEFTX0JBU1NUUkVCTEUsCisKKwkJLyogY2FsbGJhY2tzICovCisJCS5pbml0aWFsaXplID0gdGRhOTg3NV9pbml0aWFsaXplLAorCQkuY2hlY2tpdCAgICA9IHRkYTk4NzVfY2hlY2tpdCwKKwkJLnZvbGZ1bmMgICAgPSB0ZGE5ODc1X3ZvbHVtZSwKKwkJLmJhc3NmdW5jICAgPSB0ZGE5ODc1X2Jhc3MsCisJCS50cmVibGVmdW5jID0gdGRhOTg3NV90cmVibGUsCisJCS5sZWZ0cmVnICAgID0gVERBOTg3NV9NVkwsCisJCS5yaWdodHJlZyAgID0gVERBOTg3NV9NVlIsCisJCS5iYXNzcmVnICAgID0gVERBOTg3NV9NQkEsCisJCS50cmVibGVyZWcgID0gVERBOTg3NV9NVFIsCisJCS5sZWZ0aW5pdCAgID0gNTg4ODAsCisJCS5yaWdodGluaXQgID0gNTg4ODAsCisJfSwKKwl7CiAJCS5uYW1lICAgICAgID0gInRkYTk4NTAiLAogCQkuaW5zbW9kb3B0ICA9ICZ0ZGE5ODUwLAogCQkuYWRkcl9sbyAgICA9IEkyQ19BRERSX1REQTk4NXhfTCA+PiAxLApAQCAtMTUxMSw2ICsxNjQzLDggQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpKQorCQkJYnJlYWs7CiAJCWN0cmwtPnZhbHVlPWNoaXAtPm11dGVkOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKQEAgLTE1NTIsNiArMTY4Niw5IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSkKKwkJCWJyZWFrOworCiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPj0gMikKIAkJCXJldHVybiAtRVJBTkdFOwogCQljaGlwLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwpAQCAtMTYzNiwyMSArMTc3MywyNiBAQAogCiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChkZXNjLT5mbGFncyAmIENISVBfSEFTX1ZPTFVNRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19CQVNTVFJFQkxFKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19CQVNTVFJFQkxFKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCB0dmF1ZGlvX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpydCkKQEAgLTE2NTgsNyArMTgwMCw5IEBACiAJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgQ0hJUERFU0MgKmRlc2MgPSBjaGlwLT5kZXNjOwogCi0JaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkgfHwgcnQtPmlucHV0ID49IDQpCisJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkpCisJCXJldHVybiAwOworCWlmIChydC0+aW5wdXQgPj0gNCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogVGhlcmUgYXJlIGZvdXIgaW5wdXRzOiB0dW5lciwgcmFkaW8sIGV4dGVybiBhbmQgaW50ZXJuLiAqLwogCWNoaXAtPmlucHV0ID0gcnQtPmlucHV0OwpAQCAtMTY3NSw4ICsxODE5LDExIEBACiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAlpbnQgbW9kZSA9IDA7CiAKKwlpZiAoIWRlc2MtPnNldG1vZGUpCisJCXJldHVybiAwOwogCWlmIChjaGlwLT5yYWRpbykKIAkJcmV0dXJuIDA7CisKIAlzd2l0Y2ggKHZ0LT5hdWRtb2RlKSB7CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKIAljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CkBAIC0xNjkyLDcgKzE4MzksNyBAQAogCX0KIAljaGlwLT5hdWRtb2RlID0gdnQtPmF1ZG1vZGU7CiAKLQlpZiAoZGVzYy0+c2V0bW9kZSAmJiBtb2RlKSB7CisJaWYgKG1vZGUpIHsKIAkJY2hpcC0+d2F0Y2hfc3RlcmVvID0gMDsKIAkJLyogZGVsX3RpbWVyKCZjaGlwLT53dCk7ICovCiAJCWNoaXAtPm1vZGUgPSBtb2RlOwpAQCAtMTcwNywxNSArMTg1NCwxNyBAQAogCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CiAJaW50IG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKIAorCWlmICghZGVzYy0+Z2V0bW9kZSkKKwkJcmV0dXJuIDA7CiAJaWYgKGNoaXAtPnJhZGlvKQogCQlyZXR1cm4gMDsKKwogCXZ0LT5hdWRtb2RlID0gY2hpcC0+YXVkbW9kZTsKIAl2dC0+cnhzdWJjaGFucyA9IDA7CiAJdnQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAogCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwogCi0JaWYgKGRlc2MtPmdldG1vZGUpCi0JCW1vZGUgPSBkZXNjLT5nZXRtb2RlKGNoaXApOworCW1vZGUgPSBkZXNjLT5nZXRtb2RlKGNoaXApOwogCiAJaWYgKG1vZGUgJiBWNEwyX1RVTkVSX01PREVfTU9OTykKIAkJdnQtPnJ4c3ViY2hhbnMgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKQEAgLTE5MDEsNiArMjA1MCw3IEBACiAJfQogCiAJY2hpcC0+dGhyZWFkID0gTlVMTDsKKwlpbml0X3RpbWVyKCZjaGlwLT53dCk7CiAJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9ORUVEX0NIRUNLTU9ERSkgewogCQlpZiAoIWRlc2MtPmdldG1vZGUgfHwgIWRlc2MtPnNldG1vZGUpIHsKIAkJCS8qIFRoaXMgc2hvdWxkbid0IGJlIGhhcHBlbi4gV2FybiB1c2VyLCBidXQga2VlcCB3b3JraW5nCkBAIC0xOTEwLDcgKzIwNjAsNiBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyogc3RhcnQgYXN5bmMgdGhyZWFkICovCi0JCWluaXRfdGltZXIoJmNoaXAtPnd0KTsKIAkJY2hpcC0+d3QuZnVuY3Rpb24gPSBjaGlwX3RocmVhZF93YWtlOwogCQljaGlwLT53dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWNoaXA7CiAJCWNoaXAtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGNoaXBfdGhyZWFkLCBjaGlwLCBjbGllbnQtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCmluZGV4IDc4Mjc3YWIuLmUyNGEzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKQEAgLTI2MSw3ICsyNjEsMTIgQEAKIAl7IFRVTkVSX0FCU0VOVCwgICAgICAgIAkJIk1heExpbmVhciBNWEw1MDA1X3YyIn0sCiAJeyBUVU5FUl9QSElMSVBTX1REQTgyOTAsIAkiUGhpbGlwcyAxODI3MV84Mjk1In0sCiAJLyogMTUwLTE1OSAqLwotCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzUwMDAifSwKKwl7IFRVTkVSX1hDNTAwMCwgICAgICAgICAgICAgICAgICJYY2VpdmUgWEM1MDAwIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDMzAyOEwifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJOWFAgMTgyNzFDMl83MTZ4In0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDNDAwMCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIkRpYmNvbSA3MDcwIn0sCisJeyBUVU5FUl9QSElMSVBTX1REQTgyOTAsICAgICAgICAiTlhQIDE4MjcxQzIifSwKIH07CiAKIC8qIFVzZSBWNEwyX0lERU5UX0FNQklHVU9VUyBmb3IgdGhvc2UgYXVkaW8gJ2NoaXBzJyB0aGF0IGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYwppbmRleCA4ZTIzYWE1Li40MjYyZTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNHguYwpAQCAtODYsOSArODYsMTIgQEAKIAlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzdGFuZGFyZDsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0WzB4NDBdOwogLyoqCi0gKiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVkIC0gVFZQNTE0Ni80NyBkZWNvZGVyIG9iamVjdAorICogc3RydWN0IHR2cDUxNHhfZGVjb2RlciAtIFRWUDUxNDYvNDcgZGVjb2RlciBvYmplY3QKICAqIEB2NGwyX2ludF9kZXZpY2U6IFNsYXZlIGhhbmRsZQorICogQHR2cDUxNHhfc2xhdmU6IFNsYXZlIHBvaW50ZXIgd2hpY2ggaXMgdXNlZCBieSBAdjRsMl9pbnRfZGV2aWNlCisgKiBAdHZwNTE0eF9yZWdzOiBjb3B5IG9mIGh3J3MgcmVncyB3aXRoIHByZXNldCB2YWx1ZXMuCiAgKiBAcGRhdGE6IEJvYXJkIHNwZWNpZmljCiAgKiBAY2xpZW50OiBJMkMgY2xpZW50IGRhdGEKICAqIEBpZDogRW50cnkgZnJvbSBJMkMgdGFibGUKQEAgLTEwMyw3ICsxMDYsOSBAQAogICogQHJvdXRlOiBpbnB1dCBhbmQgb3V0cHV0IHJvdXRpbmcgYXQgY2hpcCBsZXZlbAogICovCiBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHsKLQlzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlICp2NGwyX2ludF9kZXZpY2U7CisJc3RydWN0IHY0bDJfaW50X2RldmljZSB2NGwyX2ludF9kZXZpY2U7CisJc3RydWN0IHY0bDJfaW50X3NsYXZlIHR2cDUxNHhfc2xhdmU7CisJc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnc1tBUlJBWV9TSVpFKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCldOwogCWNvbnN0IHN0cnVjdCB0dnA1MTR4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAKQEAgLTEyNCw3ICsxMjksNyBAQAogfTsKIAogLyogVFZQNTE0eCBkZWZhdWx0IHJlZ2lzdGVyIHZhbHVlcyAqLwotc3RhdGljIHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ19saXN0W10gPSB7CitzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFtdID0gewogCXtUT0tfV1JJVEUsIFJFR19JTlBVVF9TRUwsIDB4MDV9LAkvKiBDb21wb3NpdGUgc2VsZWN0ZWQgKi8KIAl7VE9LX1dSSVRFLCBSRUdfQUZFX0dBSU5fQ1RSTCwgMHgwRn0sCiAJe1RPS19XUklURSwgUkVHX1ZJREVPX1NURCwgMHgwMH0sCS8qIEF1dG8gbW9kZSAqLwpAQCAtNDIyLDcgKzQyNyw3IEBACiAKIAkvKiBjb21tb24gcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gKi8KIAllcnIgPQotCSAgICB0dnA1MTR4X3dyaXRlX3JlZ3MoZGVjb2Rlci0+Y2xpZW50LCB0dnA1MTR4X3JlZ19saXN0KTsKKwkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgZGVjb2Rlci0+dHZwNTE0eF9yZWdzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC01ODAsNyArNTg1LDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWRlY29kZXItPmN1cnJlbnRfc3RkID0gaTsKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19WSURFT19TVERdLnZhbCA9IGRlY29kZXItPnN0ZF9saXN0W2ldLnZpZGVvX3N0ZDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KKwkJZGVjb2Rlci0+c3RkX2xpc3RbaV0udmlkZW9fc3RkOwogCiAJdjRsX2RiZygxLCBkZWJ1ZywgZGVjb2Rlci0+Y2xpZW50LCAiU3RhbmRhcmQgc2V0IHRvOiAlcyIsCiAJCQlkZWNvZGVyLT5zdGRfbGlzdFtpXS5zdGFuZGFyZC5uYW1lKTsKQEAgLTYyNSw4ICs2MzEsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19JTlBVVF9TRUxdLnZhbCA9IGlucHV0X3NlbDsKLQl0dnA1MTR4X3JlZ19saXN0W1JFR19PVVRQVVRfRk9STUFUVEVSMV0udmFsID0gb3V0cHV0X3NlbDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0lOUFVUX1NFTF0udmFsID0gaW5wdXRfc2VsOworCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfT1VUUFVUX0ZPUk1BVFRFUjFdLnZhbCA9IG91dHB1dF9zZWw7CiAKIAkvKiBDbGVhciBzdGF0dXMgKi8KIAltc2xlZXAoTE9DS19SRVRSWV9ERUxBWSk7CkBAIC02ODYsNyArNjkyLDcgQEAKIAkJCWJyZWFrOwkvKiBJbnB1dCBkZXRlY3RlZCAqLwogCX0KIAotCWlmICgoY3VycmVudF9zdGQgPT0gU1REX0lOVkFMSUQpIHx8ICh0cnlfY291bnQgPCAwKSkKKwlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDw9IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRlY29kZXItPmN1cnJlbnRfc3RkID0gY3VycmVudF9zdGQ7CkBAIC03MTksMTAgKzcyNSw5IEBACiAKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJLyogQnJpZ2h0bmVzcyBzdXBwb3J0ZWQgaXMgc2FtZSBhcyBzdGFuZGFyZCBvbmUgKDAtMjU1KSwKLQkJICogc28gbWFrZSB1c2Ugb2Ygc3RhbmRhcmQgQVBJIHByb3ZpZGVkLgorCQkvKiBCcmlnaHRuZXNzIHN1cHBvcnRlZCBpcyAoMC0yNTUpLAogCQkgKi8KLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMTI4KTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CkBAIC03NzksMTYgKzc4NCwxNiBAQAogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19CUklHSFRORVNTXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19CUklHSFRORVNTXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfQ09OVFJBU1RdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0NPTlRSQVNUXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19TQVRVUkFUSU9OXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19TQVRVUkFUSU9OXS52YWw7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0hVRV0udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfSFVFXS52YWw7CiAJCWlmIChjdHJsLT52YWx1ZSA9PSAweDdGKQogCQkJY3RybC0+dmFsdWUgPSAxODA7CiAJCWVsc2UgaWYgKGN0cmwtPnZhbHVlID09IDB4ODApCkBAIC03OTgsNyArODAzLDcgQEAKIAogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbDsKIAkJaWYgKChjdHJsLT52YWx1ZSAmIDB4MykgPT0gMykKIAkJCWN0cmwtPnZhbHVlID0gMTsKIAkJZWxzZQpAQCAtODQ4LDcgKzg1Myw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQlJJR0hUTkVTU10udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKQEAgLTg2MSw3ICs4NjYsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0NPTlRSQVNUXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19DT05UUkFTVF0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKIAkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDI1NSkgewpAQCAtODc0LDcgKzg3OSw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfU0FUVVJBVElPTl0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfU0FUVVJBVElPTl0udmFsID0gdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfSFVFOgogCQlpZiAodmFsdWUgPT0gMTgwKQpAQCAtODkzLDcgKzg5OCw3IEBACiAJCQkJdmFsdWUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJdHZwNTE0eF9yZWdfbGlzdFtSRUdfSFVFXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19IVUVdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgogCQlpZiAodmFsdWUgPT0gMSkKQEAgLTkxMCw3ICs5MTUsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0FGRV9HQUlOX0NUUkxdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQl2NGxfZXJyKGRlY29kZXItPmNsaWVudCwKQEAgLTEyNzUsNyArMTI4MCw3IEBACiAJc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9IHMtPnByaXY7CiAKIAkvKiBTZXQgZGVmYXVsdCBzdGFuZGFyZCB0byBhdXRvICovCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfVklERU9fU1REXS52YWwgPQorCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfVklERU9fU1REXS52YWwgPQogCSAgICBWSURFT19TVERfQVVUT19TV0lUQ0hfQklUOwogCiAJcmV0dXJuIHR2cDUxNHhfY29uZmlndXJlKGRlY29kZXIpOwpAQCAtMTM0NCwxMSArMTM0OSw2IEBACiAJCSh2NGwyX2ludF9pb2N0bF9mdW5jICopIGlvY3RsX3Nfcm91dGluZ30sCiB9OwogCi1zdGF0aWMgc3RydWN0IHY0bDJfaW50X3NsYXZlIHR2cDUxNHhfc2xhdmUgPSB7Ci0JLmlvY3RscyA9IHR2cDUxNHhfaW9jdGxfZGVzYywKLQkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodHZwNTE0eF9pb2N0bF9kZXNjKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyIHR2cDUxNHhfZGV2ID0gewogCS5zdGF0ZSA9IFNUQVRFX05PVF9ERVRFQ1RFRCwKIApAQCAtMTM2OSwxNyArMTM2OSwxNSBAQAogCS5jdXJyZW50X3N0ZCA9IFNURF9OVFNDX01KLAogCS5zdGRfbGlzdCA9IHR2cDUxNHhfc3RkX2xpc3QsCiAJLm51bV9zdGRzID0gQVJSQVlfU0laRSh0dnA1MTR4X3N0ZF9saXN0KSwKLQotfTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2ludF9kZXZpY2UgdHZwNTE0eF9pbnRfZGV2aWNlID0gewotCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCi0JLnByaXYgPSAmdHZwNTE0eF9kZXYsCi0JLnR5cGUgPSB2NGwyX2ludF90eXBlX3NsYXZlLAotCS51ID0gewotCSAgICAgIC5zbGF2ZSA9ICZ0dnA1MTR4X3NsYXZlLAotCSAgICAgIH0sCisJLnY0bDJfaW50X2RldmljZSA9IHsKKwkJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IFRWUDUxNFhfTU9EVUxFX05BTUUsCisJCS50eXBlID0gdjRsMl9pbnRfdHlwZV9zbGF2ZSwKKwl9LAorCS50dnA1MTR4X3NsYXZlID0geworCQkuaW9jdGxzID0gdHZwNTE0eF9pb2N0bF9kZXNjLAorCQkubnVtX2lvY3RscyA9IEFSUkFZX1NJWkUodHZwNTE0eF9pb2N0bF9kZXNjKSwKKwl9LAogfTsKIAogLyoqCkBAIC0xMzkyLDI2ICsxMzkwLDM3IEBACiBzdGF0aWMgaW50CiB0dnA1MTR4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyID0gJnR2cDUxNHhfZGV2OworCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXI7CiAJaW50IGVycjsKIAogCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFkZWNvZGVyLT5wZGF0YSkgeworCWRlY29kZXIgPSBremFsbG9jKHNpemVvZigqZGVjb2RlciksIEdGUF9LRVJORUwpOworCWlmICghZGVjb2RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKIAkJdjRsX2VycihjbGllbnQsICJObyBwbGF0Zm9ybSBkYXRhISFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKIAl9CisKKwkqZGVjb2RlciA9IHR2cDUxNHhfZGV2OworCWRlY29kZXItPnY0bDJfaW50X2RldmljZS5wcml2ID0gZGVjb2RlcjsKKwlkZWNvZGVyLT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnUuc2xhdmUgPSAmZGVjb2Rlci0+dHZwNTE0eF9zbGF2ZTsKKwltZW1jcHkoZGVjb2Rlci0+dHZwNTE0eF9yZWdzLCB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHQsCisJCQlzaXplb2YodHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0KSk7CiAJLyoKIAkgKiBGZXRjaCBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhLCBhbmQgY29uZmlndXJlIHRoZQogCSAqIHR2cDUxNHhfcmVnX2xpc3RbXSBhY2NvcmRpbmdseS4gU2luY2UgdGhpcyBpcyBvbmUKIAkgKiB0aW1lIGNvbmZpZ3VyYXRpb24sIG5vIG5lZWQgdG8gcHJlc2VydmUuCiAJICovCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfT1VUUFVUX0ZPUk1BVFRFUjJdLnZhbCB8PQorCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfT1VUUFVUX0ZPUk1BVFRFUjJdLnZhbCB8PQogCQkJKGRlY29kZXItPnBkYXRhLT5jbGtfcG9sYXJpdHkgPDwgMSk7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfU1lOQ19DT05UUk9MXS52YWwgfD0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NZTkNfQ09OVFJPTF0udmFsIHw9CiAJCQkoKGRlY29kZXItPnBkYXRhLT5oc19wb2xhcml0eSA8PCAyKSB8CiAJCQkoZGVjb2Rlci0+cGRhdGEtPnZzX3BvbGFyaXR5IDw8IDMpKTsKIAkvKgpAQCAtMTQxOSwyMyArMTQyOCwyNyBAQAogCSAqLwogCWRlY29kZXItPmlkID0gKHN0cnVjdCBpMmNfZGV2aWNlX2lkICopaWQ7CiAJLyogQXR0YWNoIHRvIE1hc3RlciAqLwotCXN0cmNweSh0dnA1MTR4X2ludF9kZXZpY2UudS5zbGF2ZS0+YXR0YWNoX3RvLCBkZWNvZGVyLT5wZGF0YS0+bWFzdGVyKTsKLQlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UgPSAmdHZwNTE0eF9pbnRfZGV2aWNlOworCXN0cmNweShkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UudS5zbGF2ZS0+YXR0YWNoX3RvLAorCQkJZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7CiAJZGVjb2Rlci0+Y2xpZW50ID0gY2xpZW50OwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCBWNEwyIGxheWVyIGFzIHNsYXZlIGRldmljZSAqLwotCWVyciA9IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcihkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UpOworCWVyciA9IHY0bDJfaW50X2RldmljZV9yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKIAlpZiAoZXJyKSB7CiAJCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCQl2NGxfZXJyKGNsaWVudCwKIAkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdG8gdjRsMi4gRXJyWyVkXVxuIiwgZXJyKTsKKwkJZ290byBvdXRfZnJlZTsKIAogCX0gZWxzZQogCQl2NGxfaW5mbyhjbGllbnQsICJSZWdpc3RlcmVkIHRvIHY0bDIgbWFzdGVyICVzISFcbiIsCiAJCQkJZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7Ci0KIAlyZXR1cm4gMDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoZGVjb2Rlcik7CisJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xNDUyLDkgKzE0NjUsOSBAQAogCWlmICghY2xpZW50LT5hZGFwdGVyKQogCQlyZXR1cm4gLUVOT0RFVjsJLyogb3VyIGNsaWVudCBpc24ndCBhdHRhY2hlZCAqLwogCi0JdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKKwl2NGwyX2ludF9kZXZpY2VfdW5yZWdpc3RlcigmZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKLQorCWtmcmVlKGRlY29kZXIpOwogCXJldHVybiAwOwogfQogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggMmNkNjRlZi4uM2E1YTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dnA1MTUwLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgpAQCAtNjMyLDcgKzYzMSw3IEBACiAJY29uc3Qgc3RydWN0IGkyY192YmlfcmFtX3ZhbHVlICpyZWdzID0gdmJpX3JhbV9kZWZhdWx0OwogCWludCBsaW5lOwogCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVBcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfc2xpY2VkX3ZiaV9jYXBcbiIpOwogCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKIAogCXdoaWxlIChyZWdzLT5yZWcgIT0gKHUxNiktMSApIHsKQEAgLTgzMSw3ICs4MzAsNyBAQAogCiBzdGF0aWMgaW50IHR2cDUxNTBfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX0dfQ1RSTCBjYWxsZWRcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfY3RybCBjYWxsZWRcbiIpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKQEAgLTg2MSw3ICs4NjAsNyBAQAogCQlpZiAoY3RybC0+dmFsdWUgPCB0dnA1MTUwX3FjdHJsW2ldLm1pbmltdW0gfHwKIAkJICAgIGN0cmwtPnZhbHVlID4gdHZwNTE1MF9xY3RybFtpXS5tYXhpbXVtKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19TX0NUUkw6IGlkPSVkLCB2YWx1ZT0lZFxuIiwKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19jdHJsOiBpZD0lZCwgdmFsdWU9JWRcbiIsCiAJCQkJCWN0cmwtPmlkLCBjdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwogCX0KQEAgLTEwMTUsNyArMTAxNCw3IEBACiB7CiAJaW50IGk7CiAKLQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJWSURJT0NfUVVFUllDVFJMIGNhbGxlZFxuIik7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicXVlcnljdHJsIGNhbGxlZFxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dnA1MTUwX3FjdHJsKTsgaSsrKQogCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSB0dnA1MTUwX3FjdHJsW2ldLmlkKSB7CkBAIC0xMTI2LDcgKzExMjUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidHZwNTE1MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RWUDUxNTAsCiAJLmNvbW1hbmQgPSB0dnA1MTUwX2NvbW1hbmQsCiAJLnByb2JlID0gdHZwNTE1MF9wcm9iZSwKIAkucmVtb3ZlID0gdHZwNTE1MF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYwppbmRleCA1MmMwMzU3Li5hMzk5NDc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKQEAgLTQ2MCw5ICs0NjAsMTEgQEAKIAkJCSAgIHU4IG1hc2ssIHU4IHNldCkKIHsKIAlzMzIgdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY29tbWFuZCk7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiB2YWw7CiAKIAl2YWwgJj0gfm1hc2s7Ci0JdmFsIHw9ICBzZXQ7CisJdmFsIHw9IHNldCAmIG1hc2s7CiAKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQsIHZhbCk7CiB9CkBAIC02MzksOCArNjQxLDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCB0dzk5MTBfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCB0dzk5MTBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCB0dzk5MTBfcHJpdiwgaWNkKTsKIAlpbnQgICAgICAgICAgICAgICAgIHJldCAgPSAtRUlOVkFMOwpAQCAtNzMxLDggKzczMywzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisJaW50IGk7CisKKwkvKgorCSAqIGNoZWNrIGNvbG9yIGZvcm1hdAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3OTkxMF9jb2xvcl9mbXQpOyBpKyspCisJCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IHR3OTkxMF9jb2xvcl9mbXRbaV0uZm91cmNjKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHR3OTkxMF9jb2xvcl9mbXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0dzk5MTBfc2V0X2Nyb3AoaWNkLCAmcmVjdCk7Cit9CisKIHN0YXRpYyBpbnQgdHc5OTEwX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAljb25zdCBzdHJ1Y3QgdHc5OTEwX3NjYWxlX2N0cmwgKnNjYWxlOwpAQCAtODIwLDYgKzg0Nyw3IEBACiAJLnJlbGVhc2UJCT0gdHc5OTEwX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gdHc5OTEwX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSB0dzk5MTBfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSB0dzk5MTBfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gdHc5OTEwX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gdHc5OTEwX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gdHc5OTEwX3NldF9idXNfcGFyYW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYwppbmRleCBmNDUyMmJiLi5jMGFjNjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKQEAgLTE4NywxMSArMTg3LDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHVwZDY0MDMxYV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdXBkNjQwMzFhX2NvcmVfb3BzID0gewpAQCAtMjY3LDggKzI2Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ1cGQ2NDAzMWEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9VUEQ2NDAzMUEsCi0JLmNvbW1hbmQgPSB1cGQ2NDAzMWFfY29tbWFuZCwKIAkucHJvYmUgPSB1cGQ2NDAzMWFfcHJvYmUsCiAJLnJlbW92ZSA9IHVwZDY0MDMxYV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdXBkNjQwMzFhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCmluZGV4IGE1ZmI3NGIuLjQxMGM5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKQEAgLTE2NCwxMSArMTY0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1cGQ2NDA4M19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdXBkNjQwODNfY29yZV9vcHMgPSB7CkBAIC0yMzksOCArMjM0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInVwZDY0MDgzIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVVBENjQwODMsCi0JLmNvbW1hbmQgPSB1cGQ2NDA4M19jb21tYW5kLAogCS5wcm9iZSA9IHVwZDY0MDgzX3Byb2JlLAogCS5yZW1vdmUgPSB1cGQ2NDA4M19yZW1vdmUsCiAJLmlkX3RhYmxlID0gdXBkNjQwODNfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggMmYxMTA2My4uOGQ3Mzk3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtMTkxLDcgKzE5MSw3IEBACiB7CiAJaW50IGVycjsKIAljb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKnJlYzsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdW5pbml0aWFsaXplZF92YXIoZncpOwogCiAJZXJyID0gcmVxdWVzdF9paGV4X2Zpcm13YXJlKCZmdywgInZpY2FtL2Zpcm13YXJlLmZ3IiwgJmNhbS0+dWRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwppbmRleCA5ZTRmNTA2Li5hMGZlYjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTM4MSw4ICszODAsOSBAQAogCXVzYnZpc2lvbi0+c2NyYXRjaCA9IHZtYWxsb2NfMzIoc2NyYXRjaF9idWZfc2l6ZSk7CiAJc2NyYXRjaF9yZXNldCh1c2J2aXNpb24pOwogCWlmKHVzYnZpc2lvbi0+c2NyYXRjaCA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3Igc2NyYXRjaCIsCi0JCSAgICBfX2Z1bmNfXywgc2NyYXRjaF9idWZfc2l6ZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBieXRlcyBmb3Igc2NyYXRjaFxuIiwKKwkJCQlfX2Z1bmNfXywgc2NyYXRjaF9idWZfc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ5MSw4ICs0OTEsOSBAQAogCWludCBJRkJfc2l6ZSA9IE1BWF9GUkFNRV9XSURUSCAqIE1BWF9GUkFNRV9IRUlHSFQgKiAzIC8gMjsKIAl1c2J2aXNpb24tPkludHJhRnJhbWVCdWZmZXIgPSB2bWFsbG9jXzMyKElGQl9zaXplKTsKIAlpZiAodXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID09IE5VTEwpIHsKLQkJZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlICVkIGZvciBjb21wci4gZnJhbWUgYnVmZmVyIiwKLQkJICAgIF9fZnVuY19fLCBJRkJfc2l6ZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlclxuIiwKKwkJCQlfX2Z1bmNfXywgSUZCX3NpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xNTE0LDggKzE1MTUsOSBAQAogCWVyckNvZGUgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKIAogCWlmKGVyckNvZGUpIHsKLQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiBlcnJvciAlZCIsCi0JCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCX0KIAogCXJldHVybjsKQEAgLTE1NDYsNyArMTU0OCw4IEBACiAJCQkJMCwgKF9fdTE2KSByZWcsIGJ1ZmZlciwgMSwgSFopOwogCiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJldHVybiBidWZmZXJbMF07CkBAIC0xNTc0LDcgKzE1NzcsOCBAQAogCQkJCVVTQl9SRUNJUF9FTkRQT0lOVCwgMCwgKF9fdTE2KSByZWcsICZ2YWx1ZSwgMSwgSFopOwogCiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAl9CiAJcmV0dXJuIGVyckNvZGU7CiB9CkBAIC0xODUwLDcgKzE4NTQsOCBAQAogCQkJCSAwLCAoX191MTYpIFVTQlZJU0lPTl9MWFNJWkVfTywgdmFsdWUsIDQsIEhaKTsKIAogCQlpZiAoZXJyQ29kZSA8IDApIHsKLQkJCWVycigiJXMgZmFpbGVkOiBlcnJvciAlZCIsIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzIGZhaWxlZDogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnJDb2RlKTsKIAkJCXJldHVybiBlcnJDb2RlOwogCQl9CiAJCXVzYnZpc2lvbi0+Y3Vyd2lkdGggPSB1c2J2aXNpb24tPnN0cmV0Y2hfd2lkdGggKiBVc2JXaWR0aDsKQEAgLTIyMzYsNyArMjI0MSw3IEBACiAJCQkgICAgIChfX3UxNikgVVNCVklTSU9OX0RSTV9QUk0xLCB2YWx1ZSwgOCwgSFopOwogCiAJaWYgKHJjIDwgMCkgewotCQllcnIoIiVzRVJST1I9JWQiLCBfX2Z1bmNfXywgcmMpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LCAiJXNFUlJPUj0lZFxuIiwgX19mdW5jX18sIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMjQzMiw4ICsyNDM3LDkgQEAKIAkJUERFQlVHKERCR19GVU5DLCJzZXR0aW5nIGFsdGVybmF0ZSAlZCB3aXRoIHdNYXhQYWNrZXRTaXplPSV1IiwgZGV2LT5pZmFjZUFsdCxkZXYtPmlzb2NQYWNrZXRTaXplKTsKIAkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+ZGV2LCBkZXYtPmlmYWNlLCBkZXYtPmlmYWNlQWx0KTsKIAkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQllcnIgKCJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gJWQgKGVycm9yPSVpKSIsCi0JCQkJCQkJZGV2LT5pZmFjZUFsdCwgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZkZXYtPmRldi0+ZGV2LAorCQkJCSJjYW5ub3QgY2hhbmdlIGFsdGVybmF0ZSBudW1iZXIgdG8gJWQgKGVycm9yPSVpKVxuIiwKKwkJCQkJZGV2LT5pZmFjZUFsdCwgZXJyQ29kZSk7CiAJCQlyZXR1cm4gZXJyQ29kZTsKIAkJfQogCX0KQEAgLTI0ODQsNyArMjQ5MCw4IEBACiAKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihVU0JWSVNJT05fVVJCX0ZSQU1FUywgR0ZQX0tFUk5FTCk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewotCQkJZXJyKCIlczogdXNiX2FsbG9jX3VyYigpIGZhaWxlZCIsIF9fZnVuY19fKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzOiB1c2JfYWxsb2NfdXJiKCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQl1c2J2aXNpb24tPnNidWZbYnVmSWR4XS51cmIgPSB1cmI7CkBAIC0yNDk2LDcgKzI1MDMsNyBAQAogCQl1cmItPmRldiA9IGRldjsKIAkJdXJiLT5jb250ZXh0ID0gdXNidmlzaW9uOwogCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUoZGV2LCB1c2J2aXNpb24tPnZpZGVvX2VuZHApOwotCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAJCXVyYi0+aW50ZXJ2YWwgPSAxOwogCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLmRhdGE7CiAJCXVyYi0+Y29tcGxldGUgPSB1c2J2aXNpb25faXNvY0lycTsKQEAgLTI1MTYsOCArMjUyMyw5IEBACiAJCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIodXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiLAogCQkJCQkJIEdGUF9LRVJORUwpOwogCQlpZiAoZXJyQ29kZSkgewotCQkJZXJyKCIlczogdXNiX3N1Ym1pdF91cmIoJWQpIGZhaWxlZDogZXJyb3IgJWQiLAotCQkJICAgIF9fZnVuY19fLCBidWZJZHgsIGVyckNvZGUpOworCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCQkiJXM6IHVzYl9zdWJtaXRfdXJiKCVkKSBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgYnVmSWR4LCBlcnJDb2RlKTsKIAkJfQogCX0KIApAQCAtMjU2Niw4ICsyNTc0LDkgQEAKIAkJZXJyQ29kZSA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYnZpc2lvbi0+ZGV2LCB1c2J2aXNpb24tPmlmYWNlLAogCQkJCQkgICAgdXNidmlzaW9uLT5pZmFjZUFsdCk7CiAJCWlmIChlcnJDb2RlIDwgMCkgewotCQkJZXJyKCIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQ6IGVycm9yICVkIiwKLQkJCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlczogdXNiX3NldF9pbnRlcmZhY2UoKSBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCQl1c2J2aXNpb24tPmxhc3RfZXJyb3IgPSBlcnJDb2RlOwogCQl9CiAJCXJlZ1ZhbHVlID0gKDE2LXVzYnZpc2lvbl9yZWFkX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BTFRFUl9SRUcpKSAmIDB4MEY7CkBAIC0yNjIzLDcgKzI2MzIsNyBAQAogCX0KIAlyb3V0ZS5pbnB1dCA9IG1vZGVbY2hhbm5lbF07CiAJcm91dGUub3V0cHV0ID0gMDsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsJnJvdXRlKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJdXNidmlzaW9uX3NldF9hdWRpbyh1c2J2aXNpb24sIGF1ZGlvW2NoYW5uZWxdKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwppbmRleCA2YjY2YWU0Li5kZDJmOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCkBAIC0xMTksNyArMTE5LDggQEAKIAkJLyogdHJ5IGV4dGVuZGVkIGFkZHJlc3MgY29kZS4uLiAqLwogCQlyZXQgPSB0cnlfd3JpdGVfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0cmllcyk7CiAJCWlmIChyZXQgIT0gMSkgewotCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgd3JpdGluZyIpOworCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwKKwkJCQkiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUsCXdoaWxlIHdyaXRpbmdcbiIpOwogCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCX0KIAkJYWRkWzBdID0gYWRkcjsKQEAgLTEyOCw3ICsxMjksOCBAQAogCQkJYWRkciB8PSAweDAxOwogCQkJcmV0ID0gdHJ5X3JlYWRfYWRkcmVzcyhpMmNfYWRhcCwgYWRkciwgcmV0cmllcyk7CiAJCQlpZiAocmV0ICE9IDEpIHsKLQkJCQllcnIoImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLCB3aGlsZSByZWFkaW5nIik7CisJCQkJZGV2X2VycigmaTJjX2FkYXAtPmRldiwKKwkJCQkJImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLCB3aGlsZSByZWFkaW5nXG4iKTsKIAkJCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAkJCX0KIAkJfQpAQCAtMjAwLDcyICsyMDIsNzggQEAKIH07CiAKIAotLyoKLSAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZQotICovCi1zdGF0aWMgaW50IHVzYnZpc2lvbl9pMmNfdXNiX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQotewotCVBERUJVRyhEQkdfSTJDLCAiSTJDICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKLQlQREVCVUcoREJHX0kyQywgIkFMR08gICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOwotCi0JLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLwotCi0JYWRhcC0+YWxnbyA9ICZ1c2J2aXNpb25fYWxnbzsKLQotCWFkYXAtPnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQgICAgICAgKi8KLQlhZGFwLT5yZXRyaWVzID0gMzsJLyogYmUgcmVwbGFjZWQgYnkgZGVmaW5lcyAgICAgICAqLwotCi0JaTJjX2FkZF9hZGFwdGVyKGFkYXApOwotCi0JUERFQlVHKERCR19JMkMsImkyYyBidXMgZm9yICVzIHJlZ2lzdGVyZWQiLCBhZGFwLT5uYW1lKTsKLQotCXJldHVybiAwOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogdXNidmlzaW9uIHNwZWNpZmljIEkyQyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwX3RlbXBsYXRlOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnRfdGVtcGxhdGU7CiAKIGludCB1c2J2aXNpb25faTJjX3JlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCiB7CisJc3RhdGljIHVuc2lnbmVkIHNob3J0IHNhYTcxMXhfYWRkcnNbXSA9IHsKKwkJMHg0YSA+PiAxLCAweDQ4ID4+IDEsCS8qIFNBQTcxMTEsIFNBQTcxMTFBIGFuZCBTQUE3MTEzICovCisJCTB4NDIgPj4gMSwgMHg0MCA+PiAxLAkvKiBTQUE3MTE0LCBTQUE3MTE1IGFuZCBTQUE3MTE4ICovCisJCUkyQ19DTElFTlRfRU5EIH07CisKIAltZW1jcHkoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICZpMmNfYWRhcF90ZW1wbGF0ZSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOwotCW1lbWNweSgmdXNidmlzaW9uLT5pMmNfY2xpZW50LCAmaTJjX2NsaWVudF90ZW1wbGF0ZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7CiAKIAlzcHJpbnRmKHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSArIHN0cmxlbih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUpLAogCQkiICMlZCIsIHVzYnZpc2lvbi0+dmRldi0+bnVtKTsKIAlQREVCVUcoREJHX0kyQywiQWRhcHRlcm5hbWU6ICVzIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKIAl1c2J2aXNpb24tPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmdXNidmlzaW9uLT5kZXYtPmRldjsKIAotCWkyY19zZXRfYWRhcGRhdGEoJnVzYnZpc2lvbi0+aTJjX2FkYXAsIHVzYnZpc2lvbik7Ci0JaTJjX3NldF9jbGllbnRkYXRhKCZ1c2J2aXNpb24tPmkyY19jbGllbnQsIHVzYnZpc2lvbik7Ci0KLQl1c2J2aXNpb24tPmkyY19jbGllbnQuYWRhcHRlciA9ICZ1c2J2aXNpb24tPmkyY19hZGFwOworCWkyY19zZXRfYWRhcGRhdGEoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKIAogCWlmICh1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgVVNCVklTSU9OX1NFUl9NT0RFLCBVU0JWSVNJT05fSUlDX0xSTkFDSykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidXNidmlzaW9uX3JlZ2lzdGVyOiBjYW4ndCB3cml0ZSByZWdcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCisJUERFQlVHKERCR19JMkMsICJJMkMgICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOworCVBERUJVRyhEQkdfSTJDLCAiQUxHTyAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFtpMmNdIik7CisKKwkvKiByZWdpc3RlciBuZXcgYWRhcHRlciB0byBpMmMgbW9kdWxlLi4uICovCisKKwl1c2J2aXNpb24tPmkyY19hZGFwLmFsZ28gPSAmdXNidmlzaW9uX2FsZ287CisKKwl1c2J2aXNpb24tPmkyY19hZGFwLnRpbWVvdXQgPSAxMDA7CS8qIGRlZmF1bHQgdmFsdWVzLCBzaG91bGQgICAgICAgKi8KKwl1c2J2aXNpb24tPmkyY19hZGFwLnJldHJpZXMgPSAzOwkvKiBiZSByZXBsYWNlZCBieSBkZWZpbmVzICAgICAgICovCisKKwlpMmNfYWRkX2FkYXB0ZXIoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCisJUERFQlVHKERCR19JMkMsICJpMmMgYnVzIGZvciAlcyByZWdpc3RlcmVkIiwgdXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKTsKKwogCS8qIFJlcXVlc3QgdGhlIGxvYWQgb2YgdGhlIGkyYyBtb2R1bGVzIHdlIG5lZWQgKi8KIAlzd2l0Y2ggKHVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Db2RlYykgewogCWNhc2UgQ09ERUNfU0FBNzExMzoKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKLQkJYnJlYWs7CiAJY2FzZSBDT0RFQ19TQUE3MTExOgotCQlyZXF1ZXN0X21vZHVsZSgic2FhNzExNSIpOworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdXNidmlzaW9uLT5pMmNfYWRhcCwgInNhYTcxMTUiLAorCQkJCSJzYWE3MTE1X2F1dG8iLCBzYWE3MTF4X2FkZHJzKTsKIAkJYnJlYWs7CiAJfQogCWlmICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uVHVuZXIgPT0gMSkgewotCQlyZXF1ZXN0X21vZHVsZSgidHVuZXIiKTsKLQl9Ci0jZW5kaWYKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwkJZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGU7CisJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CiAKLQlyZXR1cm4gdXNidmlzaW9uX2kyY191c2JfYWRkX2J1cygmdXNidmlzaW9uLT5pMmNfYWRhcCk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJLyogZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgZm91bmQgYSBkZW1vZCBvciBub3QsIHNlbGVjdAorCQkgICB0aGUgdHVuZXIgdHlwZS4gKi8KKwkJdHlwZSA9IHNkID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOworCisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnModHlwZSkpOworCisJCWlmICh1c2J2aXNpb24tPnR1bmVyX3R5cGUgIT0gLTEpIHsKKwkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87CisJCQl0dW5fc2V0dXAudHlwZSA9IHVzYnZpc2lvbi0+dHVuZXJfdHlwZTsKKwkJCXR1bl9zZXR1cC5hZGRyID0gdjRsMl9pMmNfc3ViZGV2X2FkZHIoc2QpOworCQkJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2J2aXNpb25faTJjX3VucmVnaXN0ZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKQEAgLTI3OCw2NyArMjg2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjYWxsX2kyY19jbGllbnRzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGludCBjbWQsCi0JCSAgICAgIHZvaWQgKmFyZykKLXsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZ1c2J2aXNpb24tPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb247Ci0KLQl1c2J2aXNpb24gPSAoc3RydWN0IHVzYl91c2J2aXNpb24gKilpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlzd2l0Y2ggKGNsaWVudC0+YWRkciA8PCAxKSB7Ci0JCWNhc2UgMHg0MiA8PCAxOgotCQljYXNlIDB4NDMgPDwgMToKLQkJY2FzZSAweDRhIDw8IDE6Ci0JCWNhc2UgMHg0YiA8PCAxOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHRkYTk4ODcgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQyOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTQgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDRhOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTMgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweDQ4OgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IHNhYTcxMTEgZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQkJY2FzZSAweGEwOgotCQkJUERFQlVHKERCR19JMkMsImF0dGFjaF9pbmZvcm06IGVlcHJvbSBkZXRlY3RlZC4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2ggaW5mb3JtOiBkZXRlY3RlZCBJMkMgYWRkcmVzcyAleCIsIGNsaWVudC0+YWRkciA8PCAxKTsKLQkJCQl1c2J2aXNpb24tPnR1bmVyX2FkZHIgPSBjbGllbnQtPmFkZHI7Ci0KLQkJCQlpZiAoKHVzYnZpc2lvbi0+aGF2ZV90dW5lcikgJiYgKHVzYnZpc2lvbi0+dHVuZXJfdHlwZSAhPSAtMSkpIHsKLQkJCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9SQURJTzsKLQkJCQkJdHVuX3NldHVwLnR5cGUgPSB1c2J2aXNpb24tPnR1bmVyX3R5cGU7Ci0JCQkJCXR1bl9zZXR1cC5hZGRyID0gdXNidmlzaW9uLT50dW5lcl9hZGRyOwotCQkJCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwotCi0JdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JUERFQlVHKERCR19JMkMsInVzYnZpc2lvblslZF0gZGV0YWNoZXMgJXMiLCB1c2J2aXNpb24tPm5yLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50CiB1c2J2aXNpb25faTJjX3JlYWRfbWF4NChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIGFkZHIsCiAJCSAgICAgY2hhciAqYnVmLCBzaG9ydCBsZW4pCkBAIC01MTEsMTQgKzQ1OCw2IEBACiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwX3RlbXBsYXRlID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICAgICAgICA9ICJ1c2J2aXNpb24iLAotCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0JUODQ4LCAvKiBGSVhNRSAqLwotCS5jbGllbnRfcmVnaXN0ZXIgICA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKLQkuY2xhc3MJCSAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50X3RlbXBsYXRlID0gewotCS5uYW1lCQk9ICJ1c2J2aXNpb24gaW50ZXJuYWwiLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKaW5kZXggMjYyMmRlMC4uZmE2MmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTIxMiw3ICsyMTEsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9IVUU7CiAJY3RybC52YWx1ZSA9IDA7CiAJaWYodXNidmlzaW9uLT51c2VyKQotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihodWUsIFNfSVJVR08sIHNob3dfaHVlLCBOVUxMKTsKQEAgLTIyNyw3ICsyMjYsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9DT05UUkFTVDsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyYXN0LCBTX0lSVUdPLCBzaG93X2NvbnRyYXN0LCBOVUxMKTsKQEAgLTI0Miw3ICsyNDEsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYnJpZ2h0bmVzcywgU19JUlVHTywgc2hvd19icmlnaHRuZXNzLCBOVUxMKTsKQEAgLTI1Nyw3ICsyNTYsNyBAQAogCWN0cmwuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc2F0dXJhdGlvbiwgU19JUlVHTywgc2hvd19zYXR1cmF0aW9uLCBOVUxMKTsKQEAgLTMyOSw3ICszMjgsNyBAQAogCQkJcmV0dXJuOwogCX0gd2hpbGUgKDApOwogCi0JZXJyKCIlcyBlcnJvcjogJWRcbiIsIF9fZnVuY19fLCByZXMpOworCWRldl9lcnIoJnZkZXYtPmRldiwgIiVzIGVycm9yOiAlZFxuIiwgX19mdW5jX18sIHJlcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYnZpc2lvbl9yZW1vdmVfc3lzZnMoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldikKQEAgLTQ4Nyw4ICs0ODYsOSBAQAogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwogCWVyckNvZGUgPSB1c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmKTsKIAlpZiAoZXJyQ29kZSA8IDApIHsKLQkJZXJyKCIlczogVklESU9DX0RCR19HX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWQiLAotCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPnZkZXYtPmRldiwKKwkJCSIlczogVklESU9DX0RCR19HX1JFR0lTVEVSIGZhaWxlZDogZXJyb3IgJWRcbiIsCisJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCQlyZXR1cm4gZXJyQ29kZTsKIAl9CiAJcmVnLT52YWwgPSBlcnJDb2RlOwpAQCAtNTA3LDggKzUwNyw5IEBACiAJLyogTlQxMDB4IGhhcyBhIDgtYml0IHJlZ2lzdGVyIHNwYWNlICovCiAJZXJyQ29kZSA9IHVzYnZpc2lvbl93cml0ZV9yZWcodXNidmlzaW9uLCByZWctPnJlZyYweGZmLCByZWctPnZhbCk7CiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IFZJRElPQ19EQkdfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCisJCQkiJXM6IFZJRElPQ19EQkdfU19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJldHVybiAwOwpAQCAtNTI0LDggKzUyNSw3IEBACiAJc3RybGNweSh2Yy0+Y2FyZCwKIAkJdXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLk1vZGVsU3RyaW5nLAogCQlzaXplb2YodmMtPmNhcmQpKTsKLQlzdHJsY3B5KHZjLT5idXNfaW5mbywgZGV2X25hbWUoJnVzYnZpc2lvbi0+ZGV2LT5kZXYpLAotCQlzaXplb2YodmMtPmJ1c19pbmZvKSk7CisJdXNiX21ha2VfcGF0aCh1c2J2aXNpb24tPmRldiwgdmMtPmJ1c19pbmZvLCBzaXplb2YodmMtPmJ1c19pbmZvKSk7CiAJdmMtPnZlcnNpb24gPSBVU0JWSVNJT05fRFJJVkVSX1ZFUlNJT047CiAJdmMtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQlWNEwyX0NBUF9BVURJTyB8CkBAIC02MjEsOCArNjIxLDcgQEAKIAl1c2J2aXNpb24tPnR2bm9ybUlkPSppZDsKIAogCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19TX1NURCwKLQkJCSAmdXNidmlzaW9uLT50dm5vcm1JZCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgc19zdGQsIHVzYnZpc2lvbi0+dHZub3JtSWQpOwogCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkvKiBwcm9wYWdhdGUgdGhlIGNoYW5nZSB0byB0aGUgZGVjb2RlciAqLwogCXVzYnZpc2lvbl9tdXhzZWwodXNidmlzaW9uLCB1c2J2aXNpb24tPmN0bF9pbnB1dCk7CkBAIC02NDQsNyArNjQzLDcgQEAKIAkJc3RyY3B5KHZ0LT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCX0KIAkvKiBMZXQgY2xpZW50cyBmaWxsIGluIHRoZSByZW1haW5kZXIgb2YgdGhpcyBzdHJ1Y3QgKi8KLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfR19UVU5FUix2dCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB0dW5lciwgZ190dW5lciwgdnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NTgsNyArNjU3LDcgQEAKIAlpZiAoIXVzYnZpc2lvbi0+aGF2ZV90dW5lciB8fCB2dC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIGxldCBjbGllbnRzIGhhbmRsZSB0aGlzICovCi0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NfVFVORVIsdnQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfdHVuZXIsIHZ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjg5LDcgKzY4OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJdXNidmlzaW9uLT5mcmVxID0gZnJlcS0+ZnJlcXVlbmN5OwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19GUkVRVUVOQ1ksIGZyZXEpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmcmVxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk4LDcgKzY5Nyw2IEBACiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQltZW1zZXQoYSwwLHNpemVvZigqYSkpOwogCWlmKHVzYnZpc2lvbi0+cmFkaW8pIHsKIAkJc3RyY3B5KGEtPm5hbWUsIlJhZGlvIik7CiAJfSBlbHNlIHsKQEAgLTcyMiwxMiArNzIwLDggQEAKIAkJCSAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmwpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGlkPWN0cmwtPmlkOwogCi0JbWVtc2V0KGN0cmwsMCxzaXplb2YoKmN0cmwpKTsKLQljdHJsLT5pZD1pZDsKLQotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfUVVFUllDVFJMLCBjdHJsKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHF1ZXJ5Y3RybCwgY3RybCk7CiAKIAlpZiAoIWN0cmwtPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM5LDcgKzczMyw3IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDgsNyArNzQyLDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2Myw4ICs3NTcsNyBAQAogCiAJLyogQ2hlY2sgaW5wdXQgdmFsaWRpdHk6CiAJICAgdGhlIHVzZXIgbXVzdCBkbyBhIFZJREVPIENBUFRVUkUgYW5kIE1NQVAgbWV0aG9kLiAqLwotCWlmKCh2ci0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHx8Ci0JICAgKHZyLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkpCisJaWYgKHZyLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKQEAgLTc4OSw5ICs3ODIsNiBAQAogCiAJLyogRklYTUUgOiBtdXN0IGNvbnRyb2wKIAkgICB0aGF0IGJ1ZmZlcnMgYXJlIG1hcHBlZCAoVklESU9DX1JFUUJVRlMgaGFzIGJlZW4gY2FsbGVkKSAqLwotCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCWlmKHZiLT5pbmRleD49dXNidmlzaW9uLT5udW1fZnJhbWVzKSAgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04MjUsOSArODE1LDYgQEAKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKIAkvKiBGSVhNRSA6IHdvcmtzIG9ubHkgb24gVklERU9fQ0FQVFVSRSBNT0RFLCBNTUFQLiAqLwotCWlmKHZiLT50eXBlICE9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCWlmKHZiLT5pbmRleD49dXNidmlzaW9uLT5udW1fZnJhbWVzKSAgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04NjIsOSArODQ5LDYgQEAKIAlzdHJ1Y3QgdXNidmlzaW9uX2ZyYW1lICpmOwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWlmICh2Yi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGxpc3RfZW1wdHkoJih1c2J2aXNpb24tPm91dHF1ZXVlKSkpIHsKIAkJaWYgKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9JZGxlKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC04OTksMTAgKzg4Myw5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgJmIpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTExLDcgKzg5NCw2IEBACiAJCQkgICAgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGI9VjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJaWYgKHR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTkxOSw3ICs5MDEsNyBAQAogCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nID09IFN0cmVhbV9PbikgewogCQl1c2J2aXNpb25fc3RyZWFtX2ludGVycnVwdCh1c2J2aXNpb24pOwogCQkvKiBTdG9wIGFsbCB2aWRlbyBzdHJlYW1pbmdzICovCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PRkYgLCAmYik7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKIAl9CiAJdXNidmlzaW9uX2VtcHR5X2ZyYW1lcXVldWVzKHVzYnZpc2lvbik7CiAKQEAgLTkzMiwxMSArOTE0LDggQEAKIAlpZih2ZmQtPmluZGV4Pj1VU0JWSVNJT05fU1VQUE9SVEVEX1BBTEVUVEVTLTEpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXZmZC0+ZmxhZ3MgPSAwOwotCXZmZC0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlzdHJjcHkodmZkLT5kZXNjcmlwdGlvbix1c2J2aXNpb25fdjRsMl9mb3JtYXRbdmZkLT5pbmRleF0uZGVzYyk7CiAJdmZkLT5waXhlbGZvcm1hdCA9IHVzYnZpc2lvbl92NGwyX2Zvcm1hdFt2ZmQtPmluZGV4XS5mb3JtYXQ7Ci0JbWVtc2V0KHZmZC0+cmVzZXJ2ZWQsIDAsIHNpemVvZih2ZmQtPnJlc2VydmVkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDIsNyArMTAyMSw3IEBACiAJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgIT0gU3RyZWFtX09uKSB7CiAJCS8qIG5vIHN0cmVhbSBpcyBydW5uaW5nLCBtYWtlIGl0IHJ1bm5pbmcgISAqLwogCQl1c2J2aXNpb24tPnN0cmVhbWluZyA9IFN0cmVhbV9PbjsKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX1NUUkVBTU9OICwgTlVMTCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CiAKIAkvKiBUaGVuLCBlbnF1ZXVlIGFzIG1hbnkgZnJhbWVzIGFzIHBvc3NpYmxlCkBAIC0xMTg5LDcgKzExNjgsOSBAQAogCW11dGV4X2xvY2soJnVzYnZpc2lvbi0+bG9jayk7CiAKIAlpZiAodXNidmlzaW9uLT51c2VyKSB7Ci0JCWVycigiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBVU0JWaXNpb24gUmFkaW8hIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPnJkZXYtPmRldiwKKwkJCSIlczogU29tZW9uZSB0cmllZCB0byBvcGVuIGFuIGFscmVhZHkgb3BlbmVkIFVTQlZpc2lvbiBSYWRpbyFcbiIsCisJCQkJX19mdW5jX18pOwogCQllcnJDb2RlID0gLUVCVVNZOwogCX0KIAllbHNlIHsKQEAgLTEyMTEsNyArMTE5Miw3IEBACiAKIAkJLy8gSWYgc28gZmFyIG5vIGVycm9ycyB0aGVuIHdlIHNoYWxsIHN0YXJ0IHRoZSByYWRpbwogCQl1c2J2aXNpb24tPnJhZGlvID0gMTsKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sQVVEQ19TRVRfUkFESU8sJnVzYnZpc2lvbi0+dHVuZXJfdHlwZSk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfcmFkaW8pOwogCQl1c2J2aXNpb25fc2V0X2F1ZGlvKHVzYnZpc2lvbiwgVVNCVklTSU9OX0FVRElPX1JBRElPKTsKIAkJdXNidmlzaW9uLT51c2VyKys7CiAJfQpAQCAtMTQxMyw3ICsxMzk0LDggQEAKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCiAJaWYgKHVzYl9kZXYgPT0gTlVMTCkgewotCQllcnIoIiVzOiB1c2J2aXNpb24tPmRldiBpcyBub3Qgc2V0IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2J2aXNpb24tPmRldiBpcyBub3Qgc2V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTQyMyw3ICsxNDA1LDcgQEAKIAl9CiAJKnZkZXYgPSAqdmRldl90ZW1wbGF0ZTsKIC8vCXZkZXYtPm1pbm9yICAgPSAtMTsKLQl2ZGV2LT5wYXJlbnQgID0gJnVzYl9kZXYtPmRldjsKKwl2ZGV2LT52NGwyX2RldiA9ICZ1c2J2aXNpb24tPnY0bDJfZGV2OwogCXNucHJpbnRmKHZkZXYtPm5hbWUsIHNpemVvZih2ZGV2LT5uYW1lKSwgIiVzIiwgbmFtZSk7CiAJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgdXNidmlzaW9uKTsKIAlyZXR1cm4gdmRldjsKQEAgLTE1MjQsNyArMTUwNiw5IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfZXhpdDoKLQllcnIoIlVTQlZpc2lvblslZF06IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIGZhaWxlZCIsIHVzYnZpc2lvbi0+bnIpOworCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCSJVU0JWaXNpb25bJWRdOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWRcbiIsCisJCQl1c2J2aXNpb24tPm5yKTsKIAl1c2J2aXNpb25fdW5yZWdpc3Rlcl92aWRlbyh1c2J2aXNpb24pOwogCXJldHVybiAtMTsKIH0KQEAgLTE1NDIsMzMgKzE1MjYsMzAgQEAKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwogCi0JaWYgKCh1c2J2aXNpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiksIEdGUF9LRVJORUwpKSA9PQotCSAgICBOVUxMKSB7Ci0JCWdvdG8gZXJyX2V4aXQ7Ci0JfQorCXVzYnZpc2lvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfdXNidmlzaW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVzYnZpc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKIAogCXVzYnZpc2lvbi0+ZGV2ID0gZGV2OworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmZGV2LT5kZXYsICZ1c2J2aXNpb24tPnY0bDJfZGV2KSkKKwkJZ290byBlcnJfZnJlZTsKIAogCW11dGV4X2luaXQoJnVzYnZpc2lvbi0+bG9jayk7CS8qIGF2YWlsYWJsZSAqLwogCiAJLy8gcHJlcGFyZSBjb250cm9sIHVyYiBmb3IgY29udHJvbCBtZXNzYWdlcyBkdXJpbmcgaW50ZXJydXB0cwogCXVzYnZpc2lvbi0+Y3RybFVyYiA9IHVzYl9hbGxvY191cmIoVVNCVklTSU9OX1VSQl9GUkFNRVMsIEdGUF9LRVJORUwpOwotCWlmICh1c2J2aXNpb24tPmN0cmxVcmIgPT0gTlVMTCkgewotCQlnb3RvIGVycl9leGl0OwotCX0KKwlpZiAodXNidmlzaW9uLT5jdHJsVXJiID09IE5VTEwpCisJCWdvdG8gZXJyX3VucmVnOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYnZpc2lvbi0+Y3RybFVyYl93cSk7CiAKIAl1c2J2aXNpb25faW5pdF9wb3dlck9mZlRpbWVyKHVzYnZpc2lvbik7CiAKIAlyZXR1cm4gdXNidmlzaW9uOwogCi1lcnJfZXhpdDoKLQlpZiAodXNidmlzaW9uICYmIHVzYnZpc2lvbi0+Y3RybFVyYikgewotCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5jdHJsVXJiKTsKLQl9Ci0JaWYgKHVzYnZpc2lvbikgewotCQlrZnJlZSh1c2J2aXNpb24pOwotCX0KK2Vycl91bnJlZzoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKK2Vycl9mcmVlOgorCWtmcmVlKHVzYnZpc2lvbik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OTgsNiArMTU3OSw3IEBACiAJCXVzYl9mcmVlX3VyYih1c2J2aXNpb24tPmN0cmxVcmIpOwogCX0KIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnVzYnZpc2lvbi0+djRsMl9kZXYpOwogCWtmcmVlKHVzYnZpc2lvbik7CiAKIAlQREVCVUcoREJHX1BST0JFLCAic3VjY2VzcyIpOwpAQCAtMTY3NSwyMCArMTY1NywyMCBAQAogCX0KIAllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzFdLmRlc2M7CiAJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVuZHBvaW50KSkgewotCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50ISIsCisJCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBub24tSVNPIGVuZHBvaW50IVxuIiwKIAkJICAgIF9fZnVuY19fLCBpZm51bSk7Ci0JCWVycigiJXM6IEVuZHBvaW50IGF0dHJpYnV0ZXMgJWQiLAorCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogRW5kcG9pbnQgYXR0cmlidXRlcyAlZCIsCiAJCSAgICBfX2Z1bmNfXywgZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpKSB7Ci0JCWVycigiJXM6IGludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhIiwKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGludGVyZmFjZSAlZC4gaGFzIElTTyBPVVQgZW5kcG9pbnQhXG4iLAogCQkgICAgX19mdW5jX18sIGlmbnVtKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCh1c2J2aXNpb24gPSB1c2J2aXNpb25fYWxsb2MoZGV2KSkgPT0gTlVMTCkgewotCQllcnIoIiVzOiBjb3VsZG4ndCBhbGxvY2F0ZSBVU0JWaXNpb24gc3RydWN0IiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogY291bGRuJ3QgYWxsb2NhdGUgVVNCVmlzaW9uIHN0cnVjdFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE3MTEsNyArMTY5Myw3IEBACiAJdXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID0ga21hbGxvYygzMioKIAkJCQkJICAgICAgdXNidmlzaW9uLT5udW1fYWx0LEdGUF9LRVJORUwpOwogCWlmICh1c2J2aXNpb24tPmFsdF9tYXhfcGt0X3NpemUgPT0gTlVMTCkgewotCQllcnIoInVzYnZpc2lvbjogb3V0IG9mIG1lbW9yeSFcbiIpOworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNzMzLDggKzE3MTUsNiBAQAogCQl1c2J2aXNpb24tPnR1bmVyX3R5cGUgPSB1c2J2aXNpb25fZGV2aWNlX2RhdGFbbW9kZWxdLlR1bmVyVHlwZTsKIAl9CiAKLQl1c2J2aXNpb24tPnR1bmVyX2FkZHIgPSBBRERSX1VOU0VUOwotCiAJdXNidmlzaW9uLT5EZXZNb2RlbCA9IG1vZGVsOwogCXVzYnZpc2lvbi0+cmVtb3ZlX3BlbmRpbmcgPSAwOwogCXVzYnZpc2lvbi0+aWZhY2UgPSBpZm51bTsKQEAgLTE3NzIsNyArMTc1Miw4IEBACiAJUERFQlVHKERCR19QUk9CRSwgIiIpOwogCiAJaWYgKHVzYnZpc2lvbiA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVzYl9nZXRfaW50ZmRhdGEoKSBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkiJXM6IHVzYl9nZXRfaW50ZmRhdGEoKSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKQEAgLTE3ODIsNiArMTc2Myw4IEBACiAJLy8gQXQgdGhpcyB0aW1lIHdlIGFzayB0byBjYW5jZWwgb3V0c3RhbmRpbmcgVVJCcwogCXVzYnZpc2lvbl9zdG9wX2lzb2ModXNidmlzaW9uKTsKIAorCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJnVzYnZpc2lvbi0+djRsMl9kZXYpOworCiAJaWYgKHVzYnZpc2lvbi0+cG93ZXIpIHsKIAkJdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHVzYnZpc2lvbik7CiAJCXVzYnZpc2lvbl9wb3dlcl9vZmYodXNidmlzaW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKaW5kZXggMjBkN2VjNi4uZjhkNzQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBEd2FpbmUgR2FyZGVuIDxkd2FpbmVnYXJkZW5Acm9nZXJzLmNvbT4KICAqCiAgKgotICogUmVwb3J0IHByb2JsZW1zIHRvIHY0bCBNYWlsaW5nTGlzdCA6IGh0dHA6Ly93d3cucmVkaGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZvL3ZpZGVvNGxpbnV4LWxpc3QKKyAqIFJlcG9ydCBwcm9ibGVtcyB0byB2NGwgTWFpbGluZ0xpc3Q6IGxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwogICoKICAqIFRoaXMgbW9kdWxlIGlzIHBhcnQgb2YgdXNidmlzaW9uIGRyaXZlciBwcm9qZWN0LgogICogVXBkYXRlcyB0byBkcml2ZXIgY29tcGxldGVkIGJ5IER3YWluZSBQLiBHYXJkZW4KQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCkBAIC0zNTcsMTMgKzM1NywxMyBAQAogZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYnZpc2lvbl90YWJsZVtdOwogCiBzdHJ1Y3QgdXNiX3VzYnZpc2lvbiB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7ICAgICAgICAgCQkJCS8qIFZpZGVvIERldmljZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnJkZXY7ICAgICAgICAgICAgICAgCQkJLyogUmFkaW8gRGV2aWNlICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmJpOyAJCQkJCS8qIFZCSSBEZXZpY2UgICAqLwogCiAJLyogaTJjIERlY2xhcmF0aW9uIFNlY3Rpb24qLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50OwogCiAJc3RydWN0IHVyYiAqY3RybFVyYjsKIAl1bnNpZ25lZCBjaGFyIGN0cmxVcmJCdWZmZXJbOF07CkBAIC0zNzQsNyArMzc0LDYgQEAKIAkvKiBjb25maWd1cmF0aW9uIHBhcnQgKi8KIAlpbnQgaGF2ZV90dW5lcjsKIAlpbnQgdHVuZXJfdHlwZTsKLQlpbnQgdHVuZXJfYWRkcjsKIAlpbnQgYnJpZGdlVHlwZTsJCQkJCQkJLy8gTlQxMDAzLCBOVDEwMDQsIE5UMTAwNQogCWludCByYWRpbzsKIAlpbnQgdmlkZW9faW5wdXRzOwkJCQkJCS8vICMgb2YgaW5wdXRzCkBAIC00NjQsNiArNDYzLDggQEAKIAlpbnQgQ29tcHJCbG9ja1R5cGVzWzRdOwogfTsKIAorI2RlZmluZSBjYWxsX2FsbCh1c2J2aXNpb24sIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmdXNidmlzaW9uLT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWkyYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDc1LDcgKzQ3Niw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogaW50IHVzYnZpc2lvbl9pMmNfcmVnaXN0ZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiBpbnQgdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwotdm9pZCBjYWxsX2kyY19jbGllbnRzKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24sIHVuc2lnbmVkIGludCBjbWQsdm9pZCAqYXJnKTsKIAogLyogZGVmaW5lZCBpbiB1c2J2aXNpb24tY29yZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IHVzYnZpc2lvbl9yZWFkX3JlZyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBjaGFyIHJlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBkMjU3NmY2Li4wZDdlMzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTc4Niw3ICs3ODYsNyBAQAogCW1lbXNldCh2NGwyX2N0cmwsIDAsIHNpemVvZiAqdjRsMl9jdHJsKTsKIAl2NGwyX2N0cmwtPmlkID0gbWFwcGluZy0+aWQ7CiAJdjRsMl9jdHJsLT50eXBlID0gbWFwcGluZy0+djRsMl90eXBlOwotCXN0cm5jcHkodjRsMl9jdHJsLT5uYW1lLCBtYXBwaW5nLT5uYW1lLCBzaXplb2YgdjRsMl9jdHJsLT5uYW1lKTsKKwlzdHJsY3B5KHY0bDJfY3RybC0+bmFtZSwgbWFwcGluZy0+bmFtZSwgc2l6ZW9mIHY0bDJfY3RybC0+bmFtZSk7CiAJdjRsMl9jdHJsLT5mbGFncyA9IDA7CiAKIAlpZiAoIShjdHJsLT5pbmZvLT5mbGFncyAmIFVWQ19DT05UUk9MX1NFVF9DVVIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IGIxMjg3MzIuLjM5OTQxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCQlmbXRkZXNjID0gdXZjX2Zvcm1hdF9ieV9ndWlkKCZidWZmZXJbNV0pOwogCiAJCWlmIChmbXRkZXNjICE9IE5VTEwpIHsKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCBmbXRkZXNjLT5uYW1lLAorCQkJc3RybGNweShmb3JtYXQtPm5hbWUsIGZtdGRlc2MtPm5hbWUsCiAJCQkJc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCQlmb3JtYXQtPmZjYyA9IGZtdGRlc2MtPmZjYzsKIAkJfSBlbHNlIHsKQEAgLTM0NSw3ICszNDUsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIk1KUEVHIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiTUpQRUciLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJZm9ybWF0LT5mY2MgPSBWNEwyX1BJWF9GTVRfTUpQRUc7CiAJCWZvcm1hdC0+ZmxhZ3MgPSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAkJZm9ybWF0LT5icHAgPSAwOwpAQCAtMzYzLDEzICszNjMsMTMgQEAKIAogCQlzd2l0Y2ggKGJ1ZmZlcls4XSAmIDB4N2YpIHsKIAkJY2FzZSAwOgotCQkJc3RybmNweShmb3JtYXQtPm5hbWUsICJTRC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQkJc3RybGNweShmb3JtYXQtPm5hbWUsICJTRC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiU0RMLURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIlNETC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiSEQtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiSEQtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9ERVNDUiwgImRldmljZSAlZCB2aWRlb3N0cmVhbWluZyIKQEAgLTM3OSw3ICszNzksNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlzdHJuY2F0KGZvcm1hdC0+bmFtZSwgYnVmZmVyWzhdICYgKDEgPDwgNykgPyAiIDYwSHoiIDogIiA1MEh6IiwKKwkJc3RybGNhdChmb3JtYXQtPm5hbWUsIGJ1ZmZlcls4XSAmICgxIDw8IDcpID8gIiA2MEh6IiA6ICIgNTBIeiIsCiAJCQlzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAogCQlmb3JtYXQtPmZjYyA9IFY0TDJfUElYX0ZNVF9EVjsKQEAgLTE1MjYsNyArMTUyNiw3IEBACiAJdmRldi0+bWlub3IgPSAtMTsKIAl2ZGV2LT5mb3BzID0gJnV2Y19mb3BzOwogCXZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQlzdHJuY3B5KHZkZXYtPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIHZkZXYtPm5hbWUpOworCXN0cmxjcHkodmRldi0+bmFtZSwgZGV2LT5uYW1lLCBzaXplb2YgdmRldi0+bmFtZSk7CiAKIAkvKiBTZXQgdGhlIGRyaXZlciBkYXRhIGJlZm9yZSBjYWxsaW5nIHZpZGVvX3JlZ2lzdGVyX2RldmljZSwgb3RoZXJ3aXNlCiAJICogdXZjX3Y0bDJfb3BlbiBtaWdodCByYWNlIHVzLgpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIAlkZXYtPnF1aXJrcyA9IGlkLT5kcml2ZXJfaW5mbyB8IHV2Y19xdWlya3NfcGFyYW07CiAKIAlpZiAodWRldi0+cHJvZHVjdCAhPSBOVUxMKQotCQlzdHJuY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CisJCXN0cmxjcHkoZGV2LT5uYW1lLCB1ZGV2LT5wcm9kdWN0LCBzaXplb2YgZGV2LT5uYW1lKTsKIAllbHNlCiAJCXNucHJpbnRmKGRldi0+bmFtZSwgc2l6ZW9mIGRldi0+bmFtZSwKIAkJCSJVVkMgQ2FtZXJhICglMDR4OiUwNHgpIiwKQEAgLTE4MzMsNiArMTgzMywxNSBAQAogCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAgfSwKKwkvKiBBbGNvciBNaWNybyBBVTM4MjAgKEZ1dHVyZSBCb3kgUEMgVVNCIFdlYmNhbSkgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDA1OGYsCisJICAuaWRQcm9kdWN0CQk9IDB4MzgyMCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19QUk9CRV9NSU5NQVggfSwKIAkvKiBBcHBsZSBCdWlsdC1JbiBpU2lnaHQgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKQEAgLTE4NTIsNiArMTg2MSwxNSBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAorCS8qIFZpTWljcm8gKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUgorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDBhYzgsCisJICAuaWRQcm9kdWN0CQk9IDB4MDAwMCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19GSVhfQkFORFdJRFRIIH0sCiAJLyogTVQ2MjI3ICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODc5LDcgKzE4OTcsNyBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAotCS8qIEFzdXMgRjlTRyAqLworCS8qIFN5bnRlayAoQXN1cyBGOVNHKSAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAogCSAgLmlkVmVuZG9yCQk9IDB4MTc0ZiwKQEAgLTE4OTcsNiArMTkxNSwxNSBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAorCS8qIFN5bnRlayAoSkFPdGVjaCBTbWFydCBUZXJtaW5hbCkgKi8KKwl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQorCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKKwkgIC5pZFZlbmRvcgkJPSAweDE3NGYsCisJICAuaWRQcm9kdWN0CQk9IDB4OGEzNCwKKwkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVklERU8sCisJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKKwkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwLAorCSAgLmRyaXZlcl9pbmZvCQk9IFVWQ19RVUlSS19TVFJFQU1fTk9fRklEIH0sCiAJLyogTGVub3ZvIFRoaW5rcGFkIFNMNTAwICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKaW5kZXggYzcwNWYyNC4uMjFkODcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYwpAQCAtMjQsMjYgKzI0LDE5IEBACiAjaWZkZWYgQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVgogc3RhdGljIGludCB1dmNfaW5wdXRfaW5pdChzdHJ1Y3QgdXZjX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZGV2LT51ZGV2OwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OwotCWNoYXIgKnBoeXMgPSBOVUxMOwogCWludCByZXQ7CiAKIAlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmIChpbnB1dCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBoeXMgPSBrbWFsbG9jKDYgKyBzdHJsZW4odWRldi0+YnVzLT5idXNfbmFtZSkgKyBzdHJsZW4odWRldi0+ZGV2cGF0aCksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAocGh5cyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXNwcmludGYocGh5cywgInVzYi0lcy0lcyIsIHVkZXYtPmJ1cy0+YnVzX25hbWUsIHVkZXYtPmRldnBhdGgpOworCXVzYl9tYWtlX3BhdGgoZGV2LT51ZGV2LCBkZXYtPmlucHV0X3BoeXMsIHNpemVvZihkZXYtPmlucHV0X3BoeXMpKTsKKwlzdHJsY2F0KGRldi0+aW5wdXRfcGh5cywgIi9idXR0b24iLCBzaXplb2YoZGV2LT5pbnB1dF9waHlzKSk7CiAKIAlpbnB1dC0+bmFtZSA9IGRldi0+bmFtZTsKLQlpbnB1dC0+cGh5cyA9IHBoeXM7Ci0JdXNiX3RvX2lucHV0X2lkKHVkZXYsICZpbnB1dC0+aWQpOworCWlucHV0LT5waHlzID0gZGV2LT5pbnB1dF9waHlzOworCXVzYl90b19pbnB1dF9pZChkZXYtPnVkZXYsICZpbnB1dC0+aWQpOwogCWlucHV0LT5kZXYucGFyZW50ID0gJmRldi0+aW50Zi0+ZGV2OwogCiAJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKQEAgLTU3LDcgKzUwLDYgQEAKIAogZXJyb3I6CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXQpOwotCWtmcmVlKHBoeXMpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCmluZGV4IGQ2ODE1MTkuLjJhODBjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwpAQCAtNTUsNyArNTUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1lbnVfaW5mbyA9ICZtYXBwaW5nLT5tZW51X2luZm9bcXVlcnlfbWVudS0+aW5kZXhdOwotCXN0cm5jcHkocXVlcnlfbWVudS0+bmFtZSwgbWVudV9pbmZvLT5uYW1lLCAzMik7CisJc3RybGNweShxdWVyeV9tZW51LT5uYW1lLCBtZW51X2luZm8tPm5hbWUsIHNpemVvZiBxdWVyeV9tZW51LT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2LDEwICs0ODYsMTAgQEAKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwogCiAJCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKLQkJc3RybmNweShjYXAtPmRyaXZlciwgInV2Y3ZpZGVvIiwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKLQkJc3RybmNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIDMyKTsKLQkJc3RybmNweShjYXAtPmJ1c19pbmZvLCB2aWRlby0+ZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLAotCQkJc2l6ZW9mIGNhcC0+YnVzX2luZm8pOworCQlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAidXZjdmlkZW8iLCBzaXplb2YgY2FwLT5kcml2ZXIpOworCQlzdHJsY3B5KGNhcC0+Y2FyZCwgdmRldi0+bmFtZSwgc2l6ZW9mIGNhcC0+Y2FyZCk7CisJCXVzYl9tYWtlX3BhdGgodmlkZW8tPmRldi0+dWRldiwKKwkJCSAgICAgIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJCWNhcC0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKIAkJaWYgKHZpZGVvLT5zdHJlYW1pbmctPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFCkBAIC02MjAsNyArNjIwLDcgQEAKIAogCQltZW1zZXQoaW5wdXQsIDAsIHNpemVvZiAqaW5wdXQpOwogCQlpbnB1dC0+aW5kZXggPSBpbmRleDsKLQkJc3RybmNweShpbnB1dC0+bmFtZSwgaXRlcm0tPm5hbWUsIHNpemVvZiBpbnB1dC0+bmFtZSk7CisJCXN0cmxjcHkoaW5wdXQtPm5hbWUsIGl0ZXJtLT5uYW1lLCBzaXplb2YgaW5wdXQtPm5hbWUpOwogCQlpZiAoVVZDX0VOVElUWV9UWVBFKGl0ZXJtKSA9PSBJVFRfQ0FNRVJBKQogCQkJaW5wdXQtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCQlicmVhazsKQEAgLTY3MywxNiArNjczLDIyIEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7CiAJCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQ7CisJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOworCQlfX3UzMiBpbmRleCA9IGZtdC0+aW5kZXg7CiAKIAkJaWYgKGZtdC0+dHlwZSAhPSB2aWRlby0+c3RyZWFtaW5nLT50eXBlIHx8CiAJCSAgICBmbXQtPmluZGV4ID49IHZpZGVvLT5zdHJlYW1pbmctPm5mb3JtYXRzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwkJbWVtc2V0KGZtdCwgMCwgc2l6ZW9mKCpmbXQpKTsKKwkJZm10LT5pbmRleCA9IGluZGV4OworCQlmbXQtPnR5cGUgPSB0eXBlOworCiAJCWZvcm1hdCA9ICZ2aWRlby0+c3RyZWFtaW5nLT5mb3JtYXRbZm10LT5pbmRleF07CiAJCWZtdC0+ZmxhZ3MgPSAwOwogCQlpZiAoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKQogCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0JCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgZm9ybWF0LT5uYW1lLAorCQlzdHJsY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGZvcm1hdC0+bmFtZSwKIAkJCXNpemVvZiBmbXQtPmRlc2NyaXB0aW9uKTsKIAkJZm10LT5kZXNjcmlwdGlvbltzaXplb2YgZm10LT5kZXNjcmlwdGlvbiAtIDFdID0gMDsKIAkJZm10LT5waXhlbGZvcm1hdCA9IGZvcm1hdC0+ZmNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwppbmRleCA5YmM0NzA1Li5hOTVlMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYwpAQCAtNjEsNyArNjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1dmNfZml4dXBfYnVmZmVyX3NpemUoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAorc3RhdGljIHZvaWQgdXZjX2ZpeHVwX3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAogCXN0cnVjdCB1dmNfc3RyZWFtaW5nX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IHV2Y19mb3JtYXQgKmZvcm1hdDsKQEAgLTg0LDYgKzg0LDMxIEBACiAJICAgICAgdmlkZW8tPmRldi0+dXZjX3ZlcnNpb24gPCAweDAxMTApKQogCQljdHJsLT5kd01heFZpZGVvRnJhbWVTaXplID0KIAkJCWZyYW1lLT5kd01heFZpZGVvRnJhbWVCdWZmZXJTaXplOworCisJaWYgKHZpZGVvLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCisJICAgIHZpZGVvLT5zdHJlYW1pbmctPmludGYtPm51bV9hbHRzZXR0aW5nID4gMSkgeworCQl1MzIgaW50ZXJ2YWw7CisJCXUzMiBiYW5kd2lkdGg7CisKKwkJaW50ZXJ2YWwgPSAoY3RybC0+ZHdGcmFtZUludGVydmFsID4gMTAwMDAwKQorCQkJID8gY3RybC0+ZHdGcmFtZUludGVydmFsCisJCQkgOiBmcmFtZS0+ZHdGcmFtZUludGVydmFsWzBdOworCisJCS8qIENvbXB1dGUgYSBiYW5kd2lkdGggZXN0aW1hdGlvbiBieSBtdWx0aXBseWluZyB0aGUgZnJhbWUKKwkJICogc2l6ZSBieSB0aGUgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyBwZXIgc2Vjb25kLCBkaXZpZGUgdGhlCisJCSAqIHJlc3VsdCBieSB0aGUgbnVtYmVyIG9mIFVTQiBmcmFtZXMgKG9yIG1pY3JvLWZyYW1lcyBmb3IKKwkJICogaGlnaC1zcGVlZCBkZXZpY2VzKSBwZXIgc2Vjb25kIGFuZCBhZGQgdGhlIFVWQyBoZWFkZXIgc2l6ZQorCQkgKiAoYXNzdW1lZCB0byBiZSAxMiBieXRlcyBsb25nKS4KKwkJICovCisJCWJhbmR3aWR0aCA9IGZyYW1lLT53V2lkdGggKiBmcmFtZS0+d0hlaWdodCAvIDggKiBmb3JtYXQtPmJwcDsKKwkJYmFuZHdpZHRoICo9IDEwMDAwMDAwIC8gaW50ZXJ2YWwgKyAxOworCQliYW5kd2lkdGggLz0gMTAwMDsKKwkJaWYgKHZpZGVvLT5kZXYtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQkJYmFuZHdpZHRoIC89IDg7CisJCWJhbmR3aWR0aCArPSAxMjsKKworCQljdHJsLT5kd01heFBheWxvYWRUcmFuc2ZlclNpemUgPSBiYW5kd2lkdGg7CisJfQogfQogCiBzdGF0aWMgaW50IHV2Y19nZXRfdmlkZW9fY3RybChzdHJ1Y3QgdXZjX3ZpZGVvX2RldmljZSAqdmlkZW8sCkBAIC0xNTgsMTAgKzE4MywxMSBAQAogCQljdHJsLT5iTWF4VmVyc2lvbiA9IDA7CiAJfQogCi0JLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXR1cm4gYSBudWxsIG9yIHdyb25nIGR3TWF4VmlkZW9GcmFtZVNpemUuCi0JICogVHJ5IHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4KKwkvKiBTb21lIGJyb2tlbiBkZXZpY2VzIHJldHVybiBudWxsIG9yIHdyb25nIGR3TWF4VmlkZW9GcmFtZVNpemUgYW5kCisJICogZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplIGZpZWxkcy4gVHJ5IHRvIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUKKwkgKiBmb3JtYXQgYW5kIGZyYW1lIGRlc2NyaXB0b3JzLgogCSAqLwotCXV2Y19maXh1cF9idWZmZXJfc2l6ZSh2aWRlbywgY3RybCk7CisJdXZjX2ZpeHVwX3ZpZGVvX2N0cmwodmlkZW8sIGN0cmwpOwogCXJldCA9IDA7CiAKIG91dDoKQEAgLTU0MCw2ICs1NjYsOSBAQAogCXU4ICptZW07CiAJaW50IGxlbiwgcmV0OwogCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKQorCQlyZXR1cm47CisKIAltZW0gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlsZW4gPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJdmlkZW8tPmJ1bGsucGF5bG9hZF9zaXplICs9IGxlbjsKQEAgLTY5OSwyNyArNzI4LDQ3IEBACiAgKiBhbHJlYWR5IGFsbG9jYXRlZCB3aGVuIHJlc3VtaW5nIGZyb20gc3VzcGVuZCwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsCiAgKiByZXR1cm4gd2l0aG91dCB0b3VjaGluZyB0aGUgYnVmZmVycy4KICAqCi0gKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gd2hlbiBvdXQgb2YgbWVtb3J5LgorICogTGltaXQgdGhlIGJ1ZmZlciBzaXplIHRvIFVWQ19NQVhfUEFDS0VUUyBidWxrL2lzb2Nocm9ub3VzIHBhY2tldHMuIElmIHRoZQorICogc3lzdGVtIGlzIHRvbyBsb3cgb24gbWVtb3J5IHRyeSBzdWNjZXNzaXZlbHkgc21hbGxlciBudW1iZXJzIG9mIHBhY2tldHMKKyAqIHVudGlsIGFsbG9jYXRpb24gc3VjY2VlZHMuCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIHBhY2tldHMgb24gc3VjY2VzcyBvciAwIHdoZW4gb3V0IG9mIG1lbW9yeS4KICAqLwogc3RhdGljIGludCB1dmNfYWxsb2NfdXJiX2J1ZmZlcnMoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLAotCXVuc2lnbmVkIGludCBzaXplKQorCXVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgcHNpemUsIGdmcF90IGdmcF9mbGFncykKIHsKKwl1bnNpZ25lZCBpbnQgbnBhY2tldHM7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBCdWZmZXJzIGFyZSBhbHJlYWR5IGFsbG9jYXRlZCwgYmFpbCBvdXQuICovCiAJaWYgKHZpZGVvLT51cmJfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgewotCQl2aWRlby0+dXJiX2J1ZmZlcltpXSA9IHVzYl9idWZmZXJfYWxsb2ModmlkZW8tPmRldi0+dWRldiwKLQkJCXNpemUsIEdGUF9LRVJORUwsICZ2aWRlby0+dXJiX2RtYVtpXSk7Ci0JCWlmICh2aWRlby0+dXJiX2J1ZmZlcltpXSA9PSBOVUxMKSB7Ci0JCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgcGFja2V0cy4gQnVsayBlbmRwb2ludHMgbWlnaHQgdHJhbnNmZXIgVVZDCisJICogcGF5bG9hZHMgYWNjcm9zcyBtdWx0aXBsZSBVUkJzLgorCSAqLworCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKKwlpZiAobnBhY2tldHMgPiBVVkNfTUFYX1BBQ0tFVFMpCisJCW5wYWNrZXRzID0gVVZDX01BWF9QQUNLRVRTOworCisJLyogUmV0cnkgYWxsb2NhdGlvbnMgdW50aWwgb25lIHN1Y2NlZWQuICovCisJZm9yICg7IG5wYWNrZXRzID4gMTsgbnBhY2tldHMgLz0gMikgeworCQlmb3IgKGkgPSAwOyBpIDwgVVZDX1VSQlM7ICsraSkgeworCQkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKAorCQkJCXZpZGVvLT5kZXYtPnVkZXYsIHBzaXplICogbnBhY2tldHMsCisJCQkJZ2ZwX2ZsYWdzIHwgX19HRlBfTk9XQVJOLCAmdmlkZW8tPnVyYl9kbWFbaV0pOworCQkJaWYgKCF2aWRlby0+dXJiX2J1ZmZlcltpXSkgeworCQkJCXV2Y19mcmVlX3VyYl9idWZmZXJzKHZpZGVvKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID09IFVWQ19VUkJTKSB7CisJCQl2aWRlby0+dXJiX3NpemUgPSBwc2l6ZSAqIG5wYWNrZXRzOworCQkJcmV0dXJuIG5wYWNrZXRzOwogCQl9CiAJfQogCi0JdmlkZW8tPnVyYl9zaXplID0gc2l6ZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUzLDI5ICs4MDIsMTkgQEAKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdW5zaWduZWQgaW50IG5wYWNrZXRzLCBpLCBqOwotCV9fdTE2IHBzaXplOwotCV9fdTMyIHNpemU7CisJdTE2IHBzaXplOworCXUzMiBzaXplOwogCi0JLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBhY2tldHMgdG8gYWxsb2NhdGUgYnkgZGl2aWRpbmcKLQkgKiB0aGUgbWF4aW11bSB2aWRlbyBmcmFtZSBzaXplIGJ5IHRoZSBwYWNrZXQgc2l6ZS4gTGltaXQgdGhlIHJlc3VsdAotCSAqIHRvIFVWQ19NQVhfSVNPX1BBQ0tFVFMuCi0JICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7CiAJcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKLQogCXNpemUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdHJsLmR3TWF4VmlkZW9GcmFtZVNpemU7Ci0JaWYgKHNpemUgPiBVVkNfTUFYX0ZSQU1FX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwogCi0JbnBhY2tldHMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgcHNpemUpOwotCWlmIChucGFja2V0cyA+IFVWQ19NQVhfSVNPX1BBQ0tFVFMpCi0JCW5wYWNrZXRzID0gVVZDX01BWF9JU09fUEFDS0VUUzsKKwlucGFja2V0cyA9IHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSwgcHNpemUsIGdmcF9mbGFncyk7CisJaWYgKG5wYWNrZXRzID09IDApCisJCXJldHVybiAtRU5PTUVNOwogCiAJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CiAKLQlpZiAodXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplKSA8IDApCi0JCXJldHVybiAtRU5PTUVNOwotCiAJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKIAkJdXJiID0gdXNiX2FsbG9jX3VyYihucGFja2V0cywgZ2ZwX2ZsYWdzKTsKIAkJaWYgKHVyYiA9PSBOVUxMKSB7CkBAIC04MTQsMjUgKzg1MywyMCBAQAogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7Ci0JdW5zaWduZWQgaW50IHBpcGUsIGk7Ci0JX191MTYgcHNpemU7Ci0JX191MzIgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbnBhY2tldHMsIHBpcGUsIGk7CisJdTE2IHBzaXplOworCXUzMiBzaXplOwogCi0JLyogQ29tcHV0ZSB0aGUgYnVsayBVUkIgc2l6ZS4gU29tZSBkZXZpY2VzIHNldCB0aGUgbWF4aW11bSBwYXlsb2FkCi0JICogc2l6ZSB0byBhIHZhbHVlIHRvbyBoaWdoIGZvciBtZW1vcnktY29uc3RyYWluZWQgZGV2aWNlcy4gV2UgbXVzdAotCSAqIHRoZW4gdHJhbnNmZXIgdGhlIHBheWxvYWQgYWNjcm9zcyBtdWx0aXBsZSBVUkJzLiBUbyBiZSBjb25zaXN0YW50Ci0JICogd2l0aCBpc29jaHJvbm91cyBtb2RlLCBhbGxvY2F0ZSBtYXhpbXVtIFVWQ19NQVhfSVNPX1BBQ0tFVFMgcGVyIGJ1bGsKLQkgKiBVUkIuCi0JICovCiAJcHNpemUgPSBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkgJiAweDA3ZmY7CiAJc2l6ZSA9IHZpZGVvLT5zdHJlYW1pbmctPmN0cmwuZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplOwogCXZpZGVvLT5idWxrLm1heF9wYXlsb2FkX3NpemUgPSBzaXplOwotCWlmIChzaXplID4gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTKQotCQlzaXplID0gcHNpemUgKiBVVkNfTUFYX0lTT19QQUNLRVRTOwogCi0JaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQorCW5wYWNrZXRzID0gdXZjX2FsbG9jX3VyYl9idWZmZXJzKHZpZGVvLCBzaXplLCBwc2l6ZSwgZ2ZwX2ZsYWdzKTsKKwlpZiAobnBhY2tldHMgPT0gMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzaXplID0gbnBhY2tldHMgKiBwc2l6ZTsKKwogCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKCZlcC0+ZGVzYykpCiAJCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUodmlkZW8tPmRldi0+dWRldiwKIAkJCQkgICAgICAgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CkBAIC0xMDIxLDExICsxMDU1LDIwIEBACiAJICovCiAJdXNiX3NldF9pbnRlcmZhY2UodmlkZW8tPmRldi0+dWRldiwgdmlkZW8tPnN0cmVhbWluZy0+aW50Zm51bSwgMCk7CiAKLQkvKiBTb21lIHdlYmNhbXMgZG9uJ3Qgc3Vwb3J0IEdFVF9ERUYgcmVxdWVzdHMgb24gdGhlIHByb2JlIGNvbnRyb2wuIFdlCi0JICogZmFsbCBiYWNrIHRvIEdFVF9DVVIgaWYgR0VUX0RFRiBmYWlscy4KKwkvKiBTZXQgdGhlIHN0cmVhbWluZyBwcm9iZSBjb250cm9sIHdpdGggZGVmYXVsdCBzdHJlYW1pbmcgcGFyYW1ldGVycworCSAqIHJldHJpZXZlZCBmcm9tIHRoZSBkZXZpY2UuIFdlYmNhbXMgdGhhdCBkb24ndCBzdXBvcnQgR0VUX0RFRgorCSAqIHJlcXVlc3RzIG9uIHRoZSBwcm9iZSBjb250cm9sIHdpbGwganVzdCBrZWVwIHRoZWlyIGN1cnJlbnQgc3RyZWFtaW5nCisJICogcGFyYW1ldGVycy4KIAkgKi8KLQlpZiAoKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9ERUYpKSA8IDAgJiYKLQkgICAgKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9DVVIpKSA8IDApCisJaWYgKHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9ERUYpID09IDApCisJCXV2Y19zZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgc3RyZWFtaW5nIHBhcmFtZXRlcnMgd2l0aCB0aGUgcHJvYmUgY29udHJvbCBjdXJyZW50CisJICogdmFsdWUuIFRoaXMgbWFrZXMgc3VyZSBTRVRfQ1VSIHJlcXVlc3RzIG9uIHRoZSBzdHJlYW1pbmcgY29tbWl0CisJICogY29udHJvbCB3aWxsIGFsd2F5cyB1c2UgdmFsdWVzIHJldHJpZXZlZCBmcm9tIGEgc3VjY2Vzc2Z1bCBHRVRfQ1VSCisJICogcmVxdWVzdCBvbiB0aGUgcHJvYmUgY29udHJvbCwgYXMgcmVxdWlyZWQgYnkgdGhlIFVWQyBzcGVjaWZpY2F0aW9uLgorCSAqLworCWlmICgocmV0ID0gdXZjX2dldF92aWRlb19jdHJsKHZpZGVvLCBwcm9iZSwgMSwgR0VUX0NVUikpIDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIENoZWNrIGlmIHRoZSBkZWZhdWx0IGZvcm1hdCBkZXNjcmlwdG9yIGV4aXN0cy4gVXNlIHRoZSBmaXJzdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKaW5kZXggMDI3OTQ3ZS4uZTUwMTRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCkBAIC0yOTYsMTAgKzI5Niw4IEBACiAKIC8qIE51bWJlciBvZiBpc29jaHJvbm91cyBVUkJzLiAqLwogI2RlZmluZSBVVkNfVVJCUwkJNQotLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBwZXIgaXNvY2hyb25vdXMgVVJCLiAqLwotI2RlZmluZSBVVkNfTUFYX0lTT19QQUNLRVRTCTQwCi0vKiBNYXhpbXVtIGZyYW1lIHNpemUgaW4gYnl0ZXMsIGZvciBzYW5pdHkgY2hlY2tpbmcuICovCi0jZGVmaW5lIFVWQ19NQVhfRlJBTUVfU0laRQkoMTYqMTAyNCoxMDI0KQorLyogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyBwZXIgVVJCLiAqLworI2RlZmluZSBVVkNfTUFYX1BBQ0tFVFMJCTMyCiAvKiBNYXhpbXVtIG51bWJlciBvZiB2aWRlbyBidWZmZXJzLiAqLwogI2RlZmluZSBVVkNfTUFYX1ZJREVPX0JVRkZFUlMJMzIKIC8qIE1heGltdW0gc3RhdHVzIGJ1ZmZlciBzaXplIGluIGJ5dGVzIG9mIGludGVycnVwdCBVUkIuICovCkBAIC0zMTYsNiArMzE0LDcgQEAKICNkZWZpbmUgVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQJCTB4MDAwMDAwMTAKICNkZWZpbmUgVVZDX1FVSVJLX0lHTk9SRV9TRUxFQ1RPUl9VTklUCTB4MDAwMDAwMjAKICNkZWZpbmUgVVZDX1FVSVJLX1BSVU5FX0NPTlRST0xTCTB4MDAwMDAwNDAKKyNkZWZpbmUgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEgJCTB4MDAwMDAwODAKIAogLyogRm9ybWF0IGZsYWdzICovCiAjZGVmaW5lIFVWQ19GTVRfRkxBR19DT01QUkVTU0VECQkweDAwMDAwMDAxCkBAIC02NDksNiArNjQ4LDcgQEAKIAlzdHJ1Y3QgdXJiICppbnRfdXJiOwogCV9fdTggKnN0YXR1czsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwljaGFyIGlucHV0X3BoeXNbNjRdOwogCiAJLyogVmlkZW8gU3RyZWFtaW5nIGludGVyZmFjZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0cmVhbWluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCBiOGYyYmU4Li4xZGE4Y2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCkBAIC0zMzQsNiArMzM0LDEyIEBACiAJCSJBcGVydHVyZSBQcmlvcml0eSBNb2RlIiwKIAkJTlVMTAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbG9yZnhbXSA9IHsKKwkJIk5vbmUiLAorCQkiQmxhY2sgJiBXaGl0ZSIsCisJCSJTZXBpYSIsCisJCU5VTEwKKwl9OwogCiAJc3dpdGNoIChpZCkgewogCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKQEAgLTM3MCw2ICszNzYsOCBAQAogCQkJcmV0dXJuIGNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeTsKIAkJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgogCQkJcmV0dXJuIGNhbWVyYV9leHBvc3VyZV9hdXRvOworCQljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6CisJCQlyZXR1cm4gY29sb3JmeDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiBOVUxMOwogCX0KQEAgLTM4MiwxNiArMzkwLDE2IEBACiAJc3dpdGNoIChpZCkgewogCS8qIFVTRVIgY29udHJvbHMgKi8KIAljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6IAkJcmV0dXJuICJVc2VyIENvbnRyb2xzIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCQlyZXR1cm4gIlZvbHVtZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJCXJldHVybiAiTXV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJCXJldHVybiAiQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJCXJldHVybiAiQmFzcyI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAkJcmV0dXJuICJUcmVibGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAkJcmV0dXJuICJMb3VkbmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiAJCXJldHVybiAiQnJpZ2h0bmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogCQlyZXR1cm4gIkNvbnRyYXN0IjsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IAkJcmV0dXJuICJTYXR1cmF0aW9uIjsKIAljYXNlIFY0TDJfQ0lEX0hVRTogCQkJcmV0dXJuICJIdWUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiAJCXJldHVybiAiVm9sdW1lIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6IAkJcmV0dXJuICJCYWxhbmNlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6IAkJcmV0dXJuICJCYXNzIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRTogCQlyZXR1cm4gIlRyZWJsZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAJCXJldHVybiAiTXV0ZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzogCQlyZXR1cm4gIkxvdWRuZXNzIjsKIAljYXNlIFY0TDJfQ0lEX0JMQUNLX0xFVkVMOgkJcmV0dXJuICJCbGFjayBMZXZlbCI7CiAJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CXJldHVybiAiV2hpdGUgQmFsYW5jZSwgQXV0b21hdGljIjsKIAljYXNlIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0U6CQlyZXR1cm4gIkRvIFdoaXRlIEJhbGFuY2UiOwpAQCAtNDEyLDYgKzQyMCw3IEBACiAJY2FzZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OOglyZXR1cm4gIkJhY2tsaWdodCBDb21wZW5zYXRpb24iOwogCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoJCXJldHVybiAiQ2hyb21hIEFHQyI7CiAJY2FzZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVI6CQlyZXR1cm4gIkNvbG9yIEtpbGxlciI7CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgkJCXJldHVybiAiQ29sb3IgRWZmZWN0cyI7CiAKIAkvKiBNUEVHIGNvbnRyb2xzICovCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOiAJCXJldHVybiAiTVBFRyBFbmNvZGVyIENvbnRyb2xzIjsKQEAgLTQ5MCwxNiArNDk5LDI1IEBACiAJY2FzZSBWNEwyX0NJRF9IRkxJUDoKIAljYXNlIFY0TDJfQ0lEX1ZGTElQOgogCWNhc2UgVjRMMl9DSURfSFVFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DSFJPTUFfQUdDOgorCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV046CiAJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOgorCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoKIAljYXNlIFY0TDJfQ0lEX1BSSVZBQ1k6CiAJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjsKIAkJbWluID0gMDsKIAkJbWF4ID0gc3RlcCA9IDE7CiAJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUEFOX1JFU0VUOgorCWNhc2UgVjRMMl9DSURfVElMVF9SRVNFVDoKKwkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CVVRUT047CisJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOworCQltaW4gPSBtYXggPSBzdGVwID0gZGVmID0gMDsKKwkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CkBAIC01MTcsNiArNTM1LDcgQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKKwljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6CiAJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfTUVOVTsKIAkJc3RlcCA9IDE7CiAJCWJyZWFrOwpAQCAtNTQ3LDE2MSArNTY2LDI5IEBACiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0dBTU1BOgorCWNhc2UgVjRMMl9DSURfU0hBUlBORVNTOgogCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkU6CisJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOworCQlicmVhazsKIAl9CiAJcWN0cmwtPm1pbmltdW0gPSBtaW47CiAJcWN0cmwtPm1heGltdW0gPSBtYXg7CiAJcWN0cmwtPnN0ZXAgPSBzdGVwOwogCXFjdHJsLT5kZWZhdWx0X3ZhbHVlID0gZGVmOwogCXFjdHJsLT5yZXNlcnZlZFswXSA9IHFjdHJsLT5yZXNlcnZlZFsxXSA9IDA7Ci0Jc25wcmludGYocWN0cmwtPm5hbWUsIHNpemVvZihxY3RybC0+bmFtZSksIG5hbWUpOworCXN0cmxjcHkocWN0cmwtPm5hbWUsIG5hbWUsIHNpemVvZihxY3RybC0+bmFtZSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbCk7CiAKLS8qIEZpbGwgaW4gYSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgd2l0aCBzdGFuZGFyZCB2YWx1ZXMgYmFzZWQgb24KLSAgIHRoZSBjb250cm9sIElELiAqLwotaW50IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQotewotCXN3aXRjaCAocWN0cmwtPmlkKSB7Ci0JLyogVVNFUiBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfVVNFUl9DTEFTUzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQ0xBU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMCwgMCwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAxMjgpOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEyNywgMSwgNjQpOwotCWNhc2UgVjRMMl9DSURfSFVFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIC0xMjgsIDEyNywgMSwgMCk7Ci0KLQkvKiBNUEVHIGNvbnRyb2xzICovCi0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMCwgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySywKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FBQ19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDY0MDAsIDEsIDMyMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzY0MEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX01PTk8sIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19DUkM6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiwgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxLAotCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCwgMSwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4Myk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDMzLCAxLCAyKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMSwgMzQsIDEsIDEyKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMSk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiwgMSwKLQkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDYwMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWOiAgLyogSW5pdCBZVVYgKHJlYWxseSBZQ2JDcikgdG8gYmxhY2sgKi8KLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAweGZmZmZmZiwgMSwgMHgwMDgwODApOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUywKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCwgMSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAxNik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjYwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTYpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTkpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjU1LCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViwgMSwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQpOwotCiAvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnltZW51IGJhc2VkIG9uIHRoZSBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgYW5kCiAgICB0aGUgbWVudS4gVGhlIHFjdHJsIHBvaW50ZXIgbWF5IGJlIE5VTEwsIGluIHdoaWNoIGNhc2UgaXQgaXMgaWdub3JlZC4KICAgIElmIG1lbnVfaXRlbXMgaXMgTlVMTCwgdGhlbiB0aGUgbWVudSBpdGVtcyBhcmUgcmV0cmlldmVkIHVzaW5nCkBAIC03MjAsNyArNjA3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcW1lbnUtPmluZGV4ICYmIG1lbnVfaXRlbXNbaV07IGkrKykgOwogCWlmIChtZW51X2l0ZW1zW2ldID09IE5VTEwgfHwgbWVudV9pdGVtc1tpXVswXSA9PSAnXDAnKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzbnByaW50ZihxbWVudS0+bmFtZSwgc2l6ZW9mKHFtZW51LT5uYW1lKSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdKTsKKwlzdHJsY3B5KHFtZW51LT5uYW1lLCBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0sIHNpemVvZihxbWVudS0+bmFtZSkpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfcXVlcnlfbWVudSk7CkBAIC03MzcsOCArNjI0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJd2hpbGUgKCppZHMgIT0gVjRMMl9DVFJMX01FTlVfSURTX0VORCkgewogCQlpZiAoKmlkcysrID09IHFtZW51LT5pbmRleCkgewotCQkJc25wcmludGYocW1lbnUtPm5hbWUsIHNpemVvZihxbWVudS0+bmFtZSksCi0JCQkJICAgICAgIG1lbnVfaXRlbXNbcW1lbnUtPmluZGV4XSk7CisJCQlzdHJsY3B5KHFtZW51LT5uYW1lLCBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0sCisJCQkJCXNpemVvZihxbWVudS0+bmFtZSkpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC03NDksNyArNjM2LDcgQEAKIC8qIGN0cmxfY2xhc3NlcyBwb2ludHMgdG8gYW4gYXJyYXkgb2YgdTMyIHBvaW50ZXJzLCB0aGUgbGFzdCBlbGVtZW50IGlzCiAgICBhIE5VTEwgcG9pbnRlci4gRWFjaCB1MzIgYXJyYXkgaXMgYSAwLXRlcm1pbmF0ZWQgYXJyYXkgb2YgY29udHJvbCBJRHMuCiAgICBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoIGFuZCBiZWxvbmcgdG8gdGhlIHNhbWUgY29udHJvbAotICAgY2xhc3MuIFRoZSBhcnJheSBvZiB1MzIgcG9pbnRlciBtdXN0IGFsc28gYmUgc29ydGVkLCBmcm9tIGxvdyBjbGFzcyBJRHMKKyAgIGNsYXNzLiBUaGUgYXJyYXkgb2YgdTMyIHBvaW50ZXJzIG11c3QgYWxzbyBiZSBzb3J0ZWQsIGZyb20gbG93IGNsYXNzIElEcwogICAgdG8gaGlnaCBjbGFzcyBJRHMuCiAKICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgSUQgdGhhdCBmb2xsb3dzIGFmdGVyIHRoZSBnaXZlbiBJRC4KQEAgLTkxMCwxMCArNzk3LDEwIEBACiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAKIAlCVUdfT04oIWRldik7Ci0jaWZkZWYgTU9EVUxFCisKIAlpZiAobW9kdWxlX25hbWUpCiAJCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKLSNlbmRpZgorCiAJLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAogCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC05MjcsMTEgKzgxNCwxMSBAQAogCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKIAkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KIAlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAKIAkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncwpAQCAtOTQwLDggKzgyNywxMyBAQAogCQlzZCA9IE5VTEw7CiAJLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLwogCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JcmV0dXJuIHNkOwogCitlcnJvcjoKKwkvKiBJZiB3ZSBoYXZlIGEgY2xpZW50IGJ1dCBubyBzdWJkZXYsIHRoZW4gc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kCisJICAgd2UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBjbGllbnQuICovCisJaWYgKGNsaWVudCAmJiBzZCA9PSBOVUxMKQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwlyZXR1cm4gc2Q7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19uZXdfc3ViZGV2KTsKIApAQCAtOTU4LDEwICs4NTAsMTAgQEAKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKIAogCUJVR19PTighZGV2KTsKLSNpZmRlZiBNT0RVTEUKKwogCWlmIChtb2R1bGVfbmFtZSkKIAkJcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWUpOwotI2VuZGlmCisKIAkvKiBTZXR1cCB0aGUgaTJjIGJvYXJkIGluZm8gd2l0aCB0aGUgZGV2aWNlIHR5cGUgYW5kCiAJICAgdGhlIGRldmljZSBhZGRyZXNzLiAqLwogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKQEAgLTk3NCwxMSArODY2LDExIEBACiAJICAgV2UgbmVlZCBiZXR0ZXIgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwgc28gdGhhdCB3ZQogCSAgIGNhbiBlYXNpbHkgd2FpdCBmb3IgdGhlIGxvYWQgdG8gZmluaXNoLiAqLwogCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAogCS8qIExvY2sgdGhlIG1vZHVsZSBzbyB3ZSBjYW4gc2FmZWx5IGdldCB0aGUgdjRsMl9zdWJkZXYgcG9pbnRlciAqLwogCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcikpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycm9yOwogCXNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAkvKiBSZWdpc3RlciB3aXRoIHRoZSB2NGwyX2RldmljZSB3aGljaCBpbmNyZWFzZXMgdGhlIG1vZHVsZSdzCkBAIC05ODcsOCArODc5LDU5IEBACiAJCXNkID0gTlVMTDsKIAkvKiBEZWNyZWFzZSB0aGUgbW9kdWxlIHVzZSBjb3VudCB0byBtYXRjaCB0aGUgZmlyc3QgdHJ5X21vZHVsZV9nZXQuICovCiAJbW9kdWxlX3B1dChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKKworZXJyb3I6CisJLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAorCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLworCWlmIChjbGllbnQgJiYgc2QgPT0gTlVMTCkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CiAJcmV0dXJuIHNkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYpOwogCisvKiBSZXR1cm4gaTJjIGNsaWVudCBhZGRyZXNzIG9mIHY0bDJfc3ViZGV2LiAqLwordW5zaWduZWQgc2hvcnQgdjRsMl9pMmNfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gY2xpZW50ID8gY2xpZW50LT5hZGRyIDogSTJDX0NMSUVOVF9FTkQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY19zdWJkZXZfYWRkcik7CisKKy8qIFJldHVybiBhIGxpc3Qgb2YgSTJDIHR1bmVyIGFkZHJlc3NlcyB0byBwcm9iZS4gVXNlIG9ubHkgaWYgdGhlIHR1bmVyCisgICBhZGRyZXNzZXMgYXJlIHVua25vd24uICovCitjb25zdCB1bnNpZ25lZCBzaG9ydCAqdjRsMl9pMmNfdHVuZXJfYWRkcnMoZW51bSB2NGwyX2kyY190dW5lcl90eXBlIHR5cGUpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHJhZGlvX2FkZHJzW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MSkgfHwgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MV9NT0RVTEUpCisJCTB4MTAsCisjZW5kaWYKKwkJMHg2MCwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZW1vZF9hZGRyc1tdID0geworCQkweDQyLCAweDQzLCAweDRhLCAweDRiLAorCQlJMkNfQ0xJRU5UX0VORAorCX07CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHR2X2FkZHJzW10gPSB7CisJCTB4NDIsIDB4NDMsIDB4NGEsIDB4NGIsCQkvKiB0ZGE4MjkwICovCisJCTB4NjAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJCTB4NjgsIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUREUlNfUkFESU86CisJCXJldHVybiByYWRpb19hZGRyczsKKwljYXNlIEFERFJTX0RFTU9EOgorCQlyZXR1cm4gZGVtb2RfYWRkcnM7CisJY2FzZSBBRERSU19UVjoKKwkJcmV0dXJuIHR2X2FkZHJzOworCWNhc2UgQUREUlNfVFZfV0lUSF9ERU1PRDoKKwkJcmV0dXJuIHR2X2FkZHJzICsgNDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2kyY190dW5lcl9hZGRycyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwppbmRleCAxMTAzNzZiLi4wMDU2YjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tcGF0LWlvY3RsMzIuYwpAQCAtMTA0Nyw3ICsxMDQ3LDYgQEAKIAljYXNlIFZJRElPQ19EQkdfU19SRUdJU1RFUjoKIAljYXNlIFZJRElPQ19EQkdfR19SRUdJU1RFUjoKIAljYXNlIFZJRElPQ19EQkdfR19DSElQX0lERU5UOgotCWNhc2UgVklESU9DX0dfQ0hJUF9JREVOVF9PTEQ6CiAJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CiAJCXJldCA9IGRvX3ZpZGVvX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggMTNmODdjMi4uOTEyMjhiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtMTk4LDYgKzE5OCwyMyBAQAogCXJldHVybiB2ZGV2LT5mb3BzLT51bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCisjZGVmaW5lIHY0bDJfZ2V0X3VubWFwcGVkX2FyZWEgTlVMTAorI2Vsc2UKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHY0bDJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CisKKwlpZiAoIXZkZXYtPmZvcHMtPmdldF91bm1hcHBlZF9hcmVhKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAodmlkZW9faXNfdW5yZWdpc3RlcmVkKHZkZXYpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gdmRldi0+Zm9wcy0+Z2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOwpAQCAtMjUwLDYgKzI2Nyw3IEBACiAJLnJlYWQgPSB2NGwyX3JlYWQsCiAJLndyaXRlID0gdjRsMl93cml0ZSwKIAkub3BlbiA9IHY0bDJfb3BlbiwKKwkuZ2V0X3VubWFwcGVkX2FyZWEgPSB2NGwyX2dldF91bm1hcHBlZF9hcmVhLAogCS5tbWFwID0gdjRsMl9tbWFwLAogCS51bmxvY2tlZF9pb2N0bCA9IHY0bDJfdW5sb2NrZWRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMjY1LDYgKzI4Myw3IEBACiAJLnJlYWQgPSB2NGwyX3JlYWQsCiAJLndyaXRlID0gdjRsMl93cml0ZSwKIAkub3BlbiA9IHY0bDJfb3BlbiwKKwkuZ2V0X3VubWFwcGVkX2FyZWEgPSB2NGwyX2dldF91bm1hcHBlZF9hcmVhLAogCS5tbWFwID0gdjRsMl9tbWFwLAogCS5pb2N0bCA9IHY0bDJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMjg4LDM3ICszMDcsMzggQEAKICAqLwogc3RhdGljIGludCBnZXRfaW5kZXgoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiwgaW50IG51bSkKIHsKLQl1MzIgdXNlZCA9IDA7Ci0JY29uc3QgaW50IG1heF9pbmRleCA9IHNpemVvZih1c2VkKSAqIDggLSAxOworCS8qIFRoaXMgY2FuIGJlIHN0YXRpYyBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBnbG9iYWwKKwkgICB2aWRlb2Rldl9sb2NrIGhlbGQuICovCisJc3RhdGljIERFQ0xBUkVfQklUTUFQKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIAlpbnQgaTsKIAotCS8qIEN1cnJlbnRseSBhIHNpbmdsZSB2NGwgZHJpdmVyIGluc3RhbmNlIGNhbm5vdCBjcmVhdGUgbW9yZSB0aGFuCi0JICAgMzIgZGV2aWNlcy4KLQkgICBJbmNyZWFzZSB0byB1NjQgb3IgYW4gYXJyYXkgb2YgdTMyIGlmIG1vcmUgYXJlIG5lZWRlZC4gKi8KLQlpZiAobnVtID4gbWF4X2luZGV4KSB7CisJaWYgKG51bSA+PSBWSURFT19OVU1fREVWSUNFUykgewogCQlwcmludGsoS0VSTl9FUlIgInZpZGVvZGV2OiAlcyBudW0gaXMgdG9vIGxhcmdlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFNvbWUgZHJpdmVycyBkbyBub3Qgc2V0IHRoZSBwYXJlbnQuIEluIHRoYXQgY2FzZSBhbHdheXMgcmV0dXJuIDAuICovCisJLyogU29tZSBkcml2ZXJzIGRvIG5vdCBzZXQgdGhlIHBhcmVudC4gSW4gdGhhdCBjYXNlIGFsd2F5cyByZXR1cm4KKwkgICBudW0gb3IgMC4gKi8KIAlpZiAodmRldi0+cGFyZW50ID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gbnVtID49IDAgPyBudW0gOiAwOworCisJYml0bWFwX3plcm8odXNlZCwgVklERU9fTlVNX0RFVklDRVMpOwogCiAJZm9yIChpID0gMDsgaSA8IFZJREVPX05VTV9ERVZJQ0VTOyBpKyspIHsKIAkJaWYgKHZpZGVvX2RldmljZVtpXSAhPSBOVUxMICYmCiAJCSAgICB2aWRlb19kZXZpY2VbaV0tPnBhcmVudCA9PSB2ZGV2LT5wYXJlbnQpIHsKLQkJCXVzZWQgfD0gMSA8PCB2aWRlb19kZXZpY2VbaV0tPmluZGV4OworCQkJc2V0X2JpdCh2aWRlb19kZXZpY2VbaV0tPmluZGV4LCB1c2VkKTsKIAkJfQogCX0KIAogCWlmIChudW0gPj0gMCkgewotCQlpZiAodXNlZCAmICgxIDw8IG51bSkpCisJCWlmICh0ZXN0X2JpdChudW0sIHVzZWQpKQogCQkJcmV0dXJuIC1FTkZJTEU7CiAJCXJldHVybiBudW07CiAJfQogCi0JaSA9IGZmeih1c2VkKTsKLQlyZXR1cm4gaSA+IG1heF9pbmRleCA/IC1FTkZJTEUgOiBpOworCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKKwlyZXR1cm4gaSA9PSBWSURFT19OVU1fREVWSUNFUyA/IC1FTkZJTEUgOiBpOwogfQogCiBpbnQgdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCB0eXBlLCBpbnQgbnIpCkBAIC0zNjUsMTIgKzM4NSwxMSBAQAogCiAJLyogQSBtaW5vciB2YWx1ZSBvZiAtMSBtYXJrcyB0aGlzIHZpZGVvIGRldmljZSBhcyBuZXZlcgogCSAgIGhhdmluZyBiZWVuIHJlZ2lzdGVyZWQgKi8KLQlpZiAodmRldikKLQkJdmRldi0+bWlub3IgPSAtMTsKKwl2ZGV2LT5taW5vciA9IC0xOwogCiAJLyogdGhlIHJlbGVhc2UgY2FsbGJhY2sgTVVTVCBiZSBwcmVzZW50ICovCi0JV0FSTl9PTighdmRldiB8fCAhdmRldi0+cmVsZWFzZSk7Ci0JaWYgKCF2ZGV2IHx8ICF2ZGV2LT5yZWxlYXNlKQorCVdBUk5fT04oIXZkZXYtPnJlbGVhc2UpOworCWlmICghdmRldi0+cmVsZWFzZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBQYXJ0IDE6IGNoZWNrIGRldmljZSB0eXBlICovCkBAIC0zOTUsNyArNDE0LDcgQEAKIAogCXZkZXYtPnZmbF90eXBlID0gdHlwZTsKIAl2ZGV2LT5jZGV2ID0gTlVMTDsKLQlpZiAodmRldi0+djRsMl9kZXYpCisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5kZXYpCiAJCXZkZXYtPnBhcmVudCA9IHZkZXYtPnY0bDJfZGV2LT5kZXY7CiAKIAkvKiBQYXJ0IDI6IGZpbmQgYSBmcmVlIG1pbm9yLCBrZXJuZWwgbnVtYmVyIGFuZCBkZXZpY2UgaW5kZXguICovCkBAIC01ODIsNiArNjAxLDcgQEAKIE1PRFVMRV9BVVRIT1IoIkFsYW4gQ294LCBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIHJlZ2lzdHJhciBmb3IgVmlkZW80TGludXggZHJpdmVycyB2MiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IoVklERU9fTUFKT1IpOwogCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggOGE0Yjc0Zi4uOTRhYTQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMjYsNDggKzI2LDY2IEBACiAKIGludCB2NGwyX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7Ci0JaWYgKGRldiA9PSBOVUxMIHx8IHY0bDJfZGV2ID09IE5VTEwpCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qIFdhcm4gaWYgd2UgYXBwYXJlbnRseSByZS1yZWdpc3RlciBhIGRldmljZSAqLwotCVdBUk5fT04oZGV2X2dldF9kcnZkYXRhKGRldikgIT0gTlVMTCk7CisKIAlJTklUX0xJU1RfSEVBRCgmdjRsMl9kZXYtPnN1YmRldnMpOwogCXNwaW5fbG9ja19pbml0KCZ2NGwyX2Rldi0+bG9jayk7CiAJdjRsMl9kZXYtPmRldiA9IGRldjsKLQlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJLyogSWYgZGV2ID09IE5VTEwsIHRoZW4gbmFtZSBtdXN0IGJlIGZpbGxlZCBpbiBieSB0aGUgY2FsbGVyICovCisJCVdBUk5fT04oIXY0bDJfZGV2LT5uYW1lWzBdKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IG5hbWUgdG8gZHJpdmVyIG5hbWUgKyBkZXZpY2UgbmFtZSBpZiBpdCBpcyBlbXB0eS4gKi8KKwlpZiAoIXY0bDJfZGV2LT5uYW1lWzBdKQorCQlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwgIiVzICVzIiwKIAkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKKwlpZiAoZGV2X2dldF9kcnZkYXRhKGRldikpCisJCXY0bDJfd2Fybih2NGwyX2RldiwgIk5vbi1OVUxMIGRydmRhdGEgb24gcmVnaXN0ZXJcbiIpOwogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHY0bDJfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKTsKIAordm9pZCB2NGwyX2RldmljZV9kaXNjb25uZWN0KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJaWYgKHY0bDJfZGV2LT5kZXYpIHsKKwkJZGV2X3NldF9kcnZkYXRhKHY0bDJfZGV2LT5kZXYsIE5VTEwpOworCQl2NGwyX2Rldi0+ZGV2ID0gTlVMTDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9kaXNjb25uZWN0KTsKKwogdm9pZCB2NGwyX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgKm5leHQ7CiAKLQlpZiAodjRsMl9kZXYgPT0gTlVMTCB8fCB2NGwyX2Rldi0+ZGV2ID09IE5VTEwpCisJaWYgKHY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQlkZXZfc2V0X2RydmRhdGEodjRsMl9kZXYtPmRldiwgTlVMTCk7Ci0JLyogdW5yZWdpc3RlciBzdWJkZXZzICovCisJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCh2NGwyX2Rldik7CisKKwkvKiBVbnJlZ2lzdGVyIHN1YmRldnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2QsIG5leHQsICZ2NGwyX2Rldi0+c3ViZGV2cywgbGlzdCkKIAkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCi0JdjRsMl9kZXYtPmRldiA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV91bnJlZ2lzdGVyKTsKIAotaW50IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK2ludCB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJLyogQ2hlY2sgZm9yIHZhbGlkIGlucHV0ICovCi0JaWYgKGRldiA9PSBOVUxMIHx8IHNkID09IE5VTEwgfHwgIXNkLT5uYW1lWzBdKQorCWlmICh2NGwyX2RldiA9PSBOVUxMIHx8IHNkID09IE5VTEwgfHwgIXNkLT5uYW1lWzBdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBXYXJuIGlmIHdlIGFwcGFyZW50bHkgcmUtcmVnaXN0ZXIgYSBzdWJkZXYgKi8KLQlXQVJOX09OKHNkLT5kZXYgIT0gTlVMTCk7CisJV0FSTl9PTihzZC0+djRsMl9kZXYgIT0gTlVMTCk7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChzZC0+b3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlzZC0+ZGV2ID0gZGV2OwotCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZzZC0+bGlzdCwgJmRldi0+c3ViZGV2cyk7Ci0Jc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJc2QtPnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJc3Bpbl9sb2NrKCZ2NGwyX2Rldi0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZ2NGwyX2Rldi0+c3ViZGV2cyk7CisJc3Bpbl91bmxvY2soJnY0bDJfZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldik7CkBAIC03NSwxMiArOTMsMTIgQEAKIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAkvKiByZXR1cm4gaWYgaXQgaXNuJ3QgcmVnaXN0ZXJlZCAqLwotCWlmIChzZCA9PSBOVUxMIHx8IHNkLT5kZXYgPT0gTlVMTCkKKwlpZiAoc2QgPT0gTlVMTCB8fCBzZC0+djRsMl9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXNwaW5fbG9jaygmc2QtPmRldi0+bG9jayk7CisJc3Bpbl9sb2NrKCZzZC0+djRsMl9kZXYtPmxvY2spOwogCWxpc3RfZGVsKCZzZC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnNkLT5kZXYtPmxvY2spOwotCXNkLT5kZXYgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZzZC0+djRsMl9kZXYtPmxvY2spOworCXNkLT52NGwyX2RldiA9IE5VTEw7CiAJbW9kdWxlX3B1dChzZC0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwppbmRleCA1MmQ2ODdiLi5mNDFjNmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItaW9jdGwuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIF9fT0xEX1ZJRElPQ18gLyogVG8gYWxsb3cgZml4aW5nIG9sZCBjYWxscyAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMQpAQCAtMjQsNyArMjUsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiAjZGVmaW5lIGRiZ2FyZyhjbWQsIGZtdCwgYXJnLi4uKSBcCiAJCWRvIHsJCQkJCQkJXApAQCAtMTAwLDI1ICsxMDEsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9ub3JtX3RvX25hbWUpOwogCisvKiBSZXR1cm5zIGZyYW1lIHBlcmlvZCBmb3IgdGhlIGdpdmVuIHN0YW5kYXJkICovCit2b2lkIHY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZChpbnQgaWQsIHN0cnVjdCB2NGwyX2ZyYWN0ICpmcmFtZXBlcmlvZCkKK3sKKwlpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKKwkJZnJhbWVwZXJpb2QtPm51bWVyYXRvciA9IDEwMDE7CisJCWZyYW1lcGVyaW9kLT5kZW5vbWluYXRvciA9IDMwMDAwOworCX0gZWxzZSB7CisJCWZyYW1lcGVyaW9kLT5udW1lcmF0b3IgPSAxOworCQlmcmFtZXBlcmlvZC0+ZGVub21pbmF0b3IgPSAyNTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZCk7CisKIC8qIEZpbGwgaW4gdGhlIGZpZWxkcyBvZiBhIHY0bDJfc3RhbmRhcmQgc3RydWN0dXJlIGFjY29yZGluZyB0byB0aGUKICAgICdpZCcgYW5kICd0cmFuc21pc3Npb24nIHBhcmFtZXRlcnMuICBSZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLiAgKi8KIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJICAgICBpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JdTMyIGluZGV4ID0gdnMtPmluZGV4OwotCi0JbWVtc2V0KHZzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKLQl2cy0+aW5kZXggPSBpbmRleDsKLQl2cy0+aWQgICAgPSBpZDsKLQlpZiAoaWQgJiBWNEwyX1NURF81MjVfNjApIHsKLQkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7Ci0JCXZzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDMwMDAwOwotCQl2cy0+ZnJhbWVsaW5lcyA9IDUyNTsKLQl9IGVsc2UgewotCQl2cy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJdnMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7Ci0JCXZzLT5mcmFtZWxpbmVzID0gNjI1OwotCX0KKwl2cy0+aWQgPSBpZDsKKwl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaWQsICZ2cy0+ZnJhbWVwZXJpb2QpOworCXZzLT5mcmFtZWxpbmVzID0gKGlkICYgVjRMMl9TVERfNTI1XzYwKSA/IDUyNSA6IDYyNTsKIAlzdHJsY3B5KHZzLT5uYW1lLCBuYW1lLCBzaXplb2YodnMtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3MywxOSArMjc2LDYgQEAKICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lvY3RscykKIAogc3RhdGljIGNvbnN0IGNoYXIgKnY0bDJfaW50X2lvY3Rsc1tdID0gewotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCVtfSU9DX05SKERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyldICAgID0gIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyIsCi0JW19JT0NfTlIoREVDT0RFUl9HRVRfU1RBVFVTKV0gICAgICAgICAgPSAiREVDT0RFUl9HRVRfU1RBVFVTIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9OT1JNKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9OT1JNIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9JTlBVVCldICAgICAgICAgICA9ICJERUNPREVSX1NFVF9JTlBVVCIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfT1VUUFVUKV0gICAgICAgICAgPSAiREVDT0RFUl9TRVRfT1VUUFVUIiwKLQlbX0lPQ19OUihERUNPREVSX0VOQUJMRV9PVVRQVVQpXSAgICAgICA9ICJERUNPREVSX0VOQUJMRV9PVVRQVVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX1BJQ1RVUkUpXSAgICAgICAgID0gIkRFQ09ERVJfU0VUX1BJQ1RVUkUiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX0dQSU8pXSAgICAgICAgICAgID0gIkRFQ09ERVJfU0VUX0dQSU8iLAotCVtfSU9DX05SKERFQ09ERVJfSU5JVCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfSU5JVCIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfVkJJX0JZUEFTUyldICAgICAgPSAiREVDT0RFUl9TRVRfVkJJX0JZUEFTUyIsCi0JW19JT0NfTlIoREVDT0RFUl9EVU1QKV0gICAgICAgICAgICAgICAgPSAiREVDT0RFUl9EVU1QIiwKLSNlbmRpZgogCVtfSU9DX05SKEFVRENfU0VUX1JBRElPKV0gICAgICAgICAgICAgID0gIkFVRENfU0VUX1JBRElPIiwKIAogCVtfSU9DX05SKFRVTkVSX1NFVF9UWVBFX0FERFIpXSAgICAgICAgID0gIlRVTkVSX1NFVF9UWVBFX0FERFIiLApAQCAtNjU0LDggKzY0NCw2IEBACiAJaWYgKGNtZCA9PSBWSURJT0NHTUJVRikgewogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqcCA9IGFyZzsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJaWYgKCFvcHMtPnZpZGlvY2dtYnVmKQogCQkJcmV0dXJuIHJldDsKIAkJcmV0ID0gb3BzLT52aWRpb2NnbWJ1ZihmaWxlLCBmaCwgcCk7CkBAIC02ODIsNyArNjcwLDYgQEAKIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IChzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICopYXJnOwotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwogCiAJCWlmICghb3BzLT52aWRpb2NfcXVlcnljYXApCiAJCQlicmVhazsKQEAgLTcyNSwxNiArNzEyLDggQEAKIAljYXNlIFZJRElPQ19FTlVNX0ZNVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYgPSBhcmc7Ci0JCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwotCQl1bnNpZ25lZCBpbnQgaW5kZXg7CiAKLQkJaW5kZXggPSBmLT5pbmRleDsKLQkJdHlwZSAgPSBmLT50eXBlOwotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPmluZGV4ID0gaW5kZXg7Ci0JCWYtPnR5cGUgID0gdHlwZTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKKwkJc3dpdGNoIChmLT50eXBlKSB7CiAJCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgogCQkJaWYgKG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXApCiAJCQkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CkBAIC03NzEsOCArNzUwLDYgQEAKIAl7CiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IChzdHJ1Y3QgdjRsMl9mb3JtYXQgKilhcmc7CiAKLQkJbWVtc2V0KGYtPmZtdC5yYXdfZGF0YSwgMCwgc2l6ZW9mKGYtPmZtdC5yYXdfZGF0YSkpOwotCiAJCS8qIEZJWE1FOiBTaG91bGQgYmUgb25lIGR1bXAgcGVyIHR5cGUgKi8KIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhmLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIApAQCAtMTA4OCw3ICsxMDY1LDYgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdChwLCBjdXJyX2lkLCBkZXNjcik7Ci0JCXAtPmluZGV4ID0gaW5kZXg7CiAKIAkJZGJnYXJnKGNtZCwgImluZGV4PSVkLCBpZD0weCVMeCwgbmFtZT0lcywgZnBzPSVkLyVkLCAiCiAJCQkJImZyYW1lbGluZXM9JWRcbiIsIHAtPmluZGV4LApAQCAtMTE1MywxMiArMTEyOSw5IEBACiAJY2FzZSBWSURJT0NfRU5VTUlOUFVUOgogCXsKIAkJc3RydWN0IHY0bDJfaW5wdXQgKnAgPSBhcmc7Ci0JCWludCBpID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2lucHV0KQogCQkJYnJlYWs7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+aW5kZXggPSBpOwogCiAJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1faW5wdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTExOTcsMTIgKzExNzAsOSBAQAogCWNhc2UgVklESU9DX0VOVU1PVVRQVVQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9vdXRwdXQgKnAgPSBhcmc7Ci0JCWludCBpID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX291dHB1dCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaTsKIAogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX291dHB1dChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTM3OCwxMyArMTM0OCwxMCBAQAogCWNhc2UgVklESU9DX0dfQVVESU86CiAJewogCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqcCA9IGFyZzsKLQkJX191MzIgaW5kZXggPSBwLT5pbmRleDsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfYXVkaW8pCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaW5kZXg7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfYXVkaW8oZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0weCV4LCAiCkBAIC0xNDI2LDcgKzEzOTMsNyBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfZ19hdWRvdXQpCiAJCQlicmVhazsKLQkJZGJnYXJnKGNtZCwgIkVudW0gZm9yIGluZGV4PSVkXG4iLCBwLT5pbmRleCk7CisKIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19hdWRvdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZzIoImluZGV4PSVkLCBuYW1lPSVzLCBjYXBhYmlsaXR5PSVkLCAiCkBAIC0xNDc5LDE1ICsxNDQ2LDEwIEBACiAJY2FzZSBWSURJT0NfR19DUk9QOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZTsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfY3JvcCkKIAkJCWJyZWFrOwogCi0JCXR5cGUgPSBwLT50eXBlOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOwotCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMocC0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfY3JvcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTUwOCwxNiArMTQ3MCwxMSBAQAogCWNhc2UgVklESU9DX0NST1BDQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpwID0gYXJnOwotCQlfX3UzMiB0eXBlOwogCiAJCS8qRklYTUU6IFNob3VsZCBhbHNvIHNob3cgdjRsMl9mcmFjdCBwaXhlbGFzcGVjdCAqLwogCQlpZiAoIW9wcy0+dmlkaW9jX2Nyb3BjYXApCiAJCQlicmVhazsKIAotCQl0eXBlID0gcC0+dHlwZTsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT50eXBlID0gdHlwZTsKLQogCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19jcm9wY2FwKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpIHsKQEAgLTE1MzMsOCArMTQ5MCw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZ19qcGVnY29tcCkKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2pwZWdjb21wKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAicXVhbGl0eT0lZCwgQVBQbj0lZCwgIgpAQCAtMTU3NSw3ICsxNTMwLDYgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2VuY29kZXJfY21kKQogCQkJYnJlYWs7Ci0JCW1lbXNldCgmcC0+cmF3LCAwLCBzaXplb2YocC0+cmF3KSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2VuY29kZXJfY21kKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiY21kPSVkLCBmbGFncz0leFxuIiwgcC0+Y21kLCBwLT5mbGFncyk7CkBAIC0xNTg3LDcgKzE1NDEsNiBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfdHJ5X2VuY29kZXJfY21kKQogCQkJYnJlYWs7Ci0JCW1lbXNldCgmcC0+cmF3LCAwLCBzaXplb2YocC0+cmF3KSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX3RyeV9lbmNvZGVyX2NtZChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNtZD0lZCwgZmxhZ3M9JXhcbiIsIHAtPmNtZCwgcC0+ZmxhZ3MpOwpAQCAtMTU5NiwyMyArMTU0OSwxOCBAQAogCWNhc2UgVklESU9DX0dfUEFSTToKIAl7CiAJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGUgPSBwLT50eXBlOwotCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7CiAKIAkJaWYgKG9wcy0+dmlkaW9jX2dfcGFybSkgeworCQkJcmV0ID0gY2hlY2tfZm10KG9wcywgcC0+dHlwZSk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOwogCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19wYXJtKGZpbGUsIGZoLCBwKTsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7Ci0KIAkJCWlmIChwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJdjRsMl92aWRlb19zdGRfY29uc3RydWN0KCZzLCB2ZmQtPmN1cnJlbnRfbm9ybSwKLQkJCQkJCSB2NGwyX25vcm1fdG9fbmFtZSh2ZmQtPmN1cnJlbnRfbm9ybSkpOwotCi0JCQlwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lID0gcy5mcmFtZXBlcmlvZDsKKwkJCXY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZCh2ZmQtPmN1cnJlbnRfbm9ybSwKKwkJCQkJCSAgICAmcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSk7CiAJCQlyZXQgPSAwOwogCQl9CiAKQEAgLTE2MjUsNiArMTU3MywxMCBAQAogCiAJCWlmICghb3BzLT52aWRpb2Nfc19wYXJtKQogCQkJYnJlYWs7CisJCXJldCA9IGNoZWNrX2ZtdChvcHMsIHAtPnR5cGUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKIAkJZGJnYXJnKGNtZCwgInR5cGU9JWRcbiIsIHAtPnR5cGUpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19zX3Bhcm0oZmlsZSwgZmgsIHApOwogCQlicmVhazsKQEAgLTE2MzIsMTQgKzE1ODQsMTAgQEAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnAgPSBhcmc7Ci0JCV9fdTMyIGluZGV4ID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX3R1bmVyKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGluZGV4OwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfdHVuZXIoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgbmFtZT0lcywgdHlwZT0lZCwgIgpAQCAtMTY3Niw4ICsxNjI0LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2ZyZXF1ZW5jeSkKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHAtPnJlc2VydmVkKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19mcmVxdWVuY3koZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJ0dW5lcj0lZCwgdHlwZT0lZCwgZnJlcXVlbmN5PSVkXG4iLApAQCAtMTY5OCwxMiArMTY0NCwxMyBAQAogCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZSA9IHAtPnR5cGU7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX3NsaWNlZF92YmlfY2FwKQogCQkJYnJlYWs7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7CisKKwkJLyogQ2xlYXIgdXAgdG8gdHlwZSwgZXZlcnl0aGluZyBhZnRlciB0eXBlIGlzIHplcm9kIGFscmVhZHkgKi8KKwkJbWVtc2V0KHAsIDAsIG9mZnNldG9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwLCB0eXBlKSk7CisKIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQpAQCAtMTc0NSwxNiArMTY5MiwxMyBAQAogCiAJCWlmICghb3BzLT52aWRpb2NfZ19jaGlwX2lkZW50KQogCQkJYnJlYWs7CisJCXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOworCQlwLT5yZXZpc2lvbiA9IDA7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfY2hpcF9pZGVudChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNoaXBfaWRlbnQ9JXUsIHJldmlzaW9uPTB4JXhcbiIsIHAtPmlkZW50LCBwLT5yZXZpc2lvbik7CiAJCWJyZWFrOwogCX0KLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlRfT0xEOgotCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19HX0NISVBfSURFTlQgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBkaXNhcHBlYXIgaW4gMi42LjMwLlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiSXQgaXMgYSBkZWJ1Z2dpbmcgaW9jdGwgYW5kIG11c3Qgbm90IGJlIHVzZWQgaW4gYXBwbGljYXRpb25zIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCiAJY2FzZSBWSURJT0NfU19IV19GUkVRX1NFRUs6CiAJewogCQlzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKnAgPSBhcmc7CkBAIC0xNzc0LDggKzE3MTgsNiBAQAogCQlpZiAoIW9wcy0+dmlkaW9jX2VudW1fZnJhbWVzaXplcykKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMoZmlsZSwgZmgsIHApOwogCQlkYmdhcmcoY21kLAogCQkJImluZGV4PSVkLCBwaXhlbGZvcm1hdD0lZCwgdHlwZT0lZCAiLApAQCAtMTgwNyw4ICsxNzQ5LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMoZmlsZSwgZmgsIHApOwogCQlkYmdhcmcoY21kLAogCQkJImluZGV4PSVkLCBwaXhlbGZvcm1hdD0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZCwgdHlwZT0lZCAiLApAQCAtMTg1Nyw2ICsxNzk3LDQ1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogSW4gc29tZSBjYXNlcywgb25seSBhIGZldyBmaWVsZHMgYXJlIHVzZWQgYXMgaW5wdXQsIGkuZS4gd2hlbiB0aGUgYXBwIHNldHMKKyAqICJpbmRleCIgYW5kIHRoZW4gdGhlIGRyaXZlciBmaWxscyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RydWN0dXJlIGZvciB0aGUgdGhpbmcKKyAqIHdpdGggdGhhdCBpbmRleC4gIFdlIG9ubHkgbmVlZCB0byBjb3B5IHVwIHRoZSBmaXJzdCBub24taW5wdXQgZmllbGQuICAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY21kX2lucHV0X3NpemUodW5zaWduZWQgaW50IGNtZCkKK3sKKwkvKiBTaXplIG9mIHN0cnVjdHVyZSB1cCB0byBhbmQgaW5jbHVkaW5nICdmaWVsZCcgKi8KKyNkZWZpbmUgQ01ESU5TSVpFKGNtZCwgdHlwZSwgZmllbGQpIAkJCQlcCisJY2FzZSBWSURJT0NfIyNjbWQ6IAkJCQkJXAorCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IHY0bDJfIyN0eXBlLCBmaWVsZCkgKyAJXAorCQkJc2l6ZW9mKCgoc3RydWN0IHY0bDJfIyN0eXBlICopMCktPmZpZWxkKTsKKworCXN3aXRjaCAoY21kKSB7CisJCUNNRElOU0laRShFTlVNX0ZNVCwJCWZtdGRlc2MsCXR5cGUpOworCQlDTURJTlNJWkUoR19GTVQsCQlmb3JtYXQsCQl0eXBlKTsKKwkJQ01ESU5TSVpFKFFVRVJZQlVGLAkJYnVmZmVyLAkJdHlwZSk7CisJCUNNRElOU0laRShHX1BBUk0sCQlzdHJlYW1wYXJtLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1TVEQsCQlzdGFuZGFyZCwJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTUlOUFVULAkJaW5wdXQsCQlpbmRleCk7CisJCUNNRElOU0laRShHX0NUUkwsCQljb250cm9sLAlpZCk7CisJCUNNRElOU0laRShHX1RVTkVSLAkJdHVuZXIsCQlpbmRleCk7CisJCUNNRElOU0laRShRVUVSWUNUUkwsCQlxdWVyeWN0cmwsCWlkKTsKKwkJQ01ESU5TSVpFKFFVRVJZTUVOVSwJCXF1ZXJ5bWVudSwJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTU9VVFBVVCwJCW91dHB1dCwJCWluZGV4KTsKKwkJQ01ESU5TSVpFKEdfTU9EVUxBVE9SLAkJbW9kdWxhdG9yLAlpbmRleCk7CisJCUNNRElOU0laRShHX0ZSRVFVRU5DWSwJCWZyZXF1ZW5jeSwJdHVuZXIpOworCQlDTURJTlNJWkUoQ1JPUENBUCwJCWNyb3BjYXAsCXR5cGUpOworCQlDTURJTlNJWkUoR19DUk9QLAkJY3JvcCwJCXR5cGUpOworCQlDTURJTlNJWkUoRU5VTUFVRElPLAkJYXVkaW8sIAkJaW5kZXgpOworCQlDTURJTlNJWkUoRU5VTUFVRE9VVCwJCWF1ZGlvb3V0LCAJaW5kZXgpOworCQlDTURJTlNJWkUoRU5DT0RFUl9DTUQsCQllbmNvZGVyX2NtZCwJZmxhZ3MpOworCQlDTURJTlNJWkUoVFJZX0VOQ09ERVJfQ01ELAllbmNvZGVyX2NtZCwJZmxhZ3MpOworCQlDTURJTlNJWkUoR19TTElDRURfVkJJX0NBUCwJc2xpY2VkX3ZiaV9jYXAsCXR5cGUpOworCQlDTURJTlNJWkUoRU5VTV9GUkFNRVNJWkVTLAlmcm1zaXplZW51bSwJcGl4ZWxfZm9ybWF0KTsKKwkJQ01ESU5TSVpFKEVOVU1fRlJBTUVJTlRFUlZBTFMsCWZybWl2YWxlbnVtLAloZWlnaHQpOworCWRlZmF1bHQ6CisJCXJldHVybiBfSU9DX1NJWkUoY21kKTsKKwl9Cit9CisKIGxvbmcgdmlkZW9faW9jdGwyKHN0cnVjdCBmaWxlICpmaWxlLAogCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTE4NzUsMTMgKzE4NTQsNyBAQAogCQkgICAgICAgY21kID09IFZJRElPQ19UUllfRVhUX0NUUkxTKTsKIAogCS8qICBDb3B5IGFyZ3VtZW50cyBpbnRvIHRlbXAga2VybmVsIGJ1ZmZlciAgKi8KLQlzd2l0Y2ggKF9JT0NfRElSKGNtZCkpIHsKLQljYXNlIF9JT0NfTk9ORToKLQkJcGFyZyA9IE5VTEw7Ci0JCWJyZWFrOwotCWNhc2UgX0lPQ19SRUFEOgotCWNhc2UgX0lPQ19XUklURToKLQljYXNlIChfSU9DX1dSSVRFIHwgX0lPQ19SRUFEKToKKwlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpIHsKIAkJaWYgKF9JT0NfU0laRShjbWQpIDw9IHNpemVvZihzYnVmKSkgewogCQkJcGFyZyA9IHNidWY7CiAJCX0gZWxzZSB7CkBAIC0xODkzLDEwICsxODY2LDE5IEBACiAJCX0KIAogCQllcnIgPSAtRUZBVUxUOwotCQlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpCi0JCQlpZiAoY29weV9mcm9tX3VzZXIocGFyZywgKHZvaWQgX191c2VyICopYXJnLCBfSU9DX1NJWkUoY21kKSkpCisJCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgeworCQkJdW5zaWduZWQgbG9uZyBuID0gY21kX2lucHV0X3NpemUoY21kKTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmcsICh2b2lkIF9fdXNlciAqKWFyZywgbikpCiAJCQkJZ290byBvdXQ7Ci0JCWJyZWFrOworCisJCQkvKiB6ZXJvIG91dCBhbnl0aGluZyB3ZSBkb24ndCBjb3B5IGZyb20gdXNlcnNwYWNlICovCisJCQlpZiAobiA8IF9JT0NfU0laRShjbWQpKQorCQkJCW1lbXNldCgodTggKilwYXJnICsgbiwgMCwgX0lPQ19TSVpFKGNtZCkgLSBuKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHJlYWQtb25seSBpb2N0bCAqLworCQkJbWVtc2V0KHBhcmcsIDAsIF9JT0NfU0laRShjbWQpKTsKKwkJfQogCX0KIAogCWlmIChpc19leHRfY3RybCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCmluZGV4IDIxMjA4ODAuLmRjODgxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKQEAgLTMzLDYgKzMzLDEyIEBACiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2N0cmwsIGFyZyk7CiAJY2FzZSBWSURJT0NfU19DVFJMOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19jdHJsLCBhcmcpOworCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19leHRfY3RybHMsIGFyZyk7CisJY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX2V4dF9jdHJscywgYXJnKTsKKwljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgdHJ5X2V4dF9jdHJscywgYXJnKTsKIAljYXNlIFZJRElPQ19RVUVSWU1FTlU6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBxdWVyeW1lbnUsIGFyZyk7CiAJY2FzZSBWSURJT0NfTE9HX1NUQVRVUzoKQEAgLTkyLDE2ICs5OCwyOCBAQAogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfdmJpX2RhdGEsIGFyZyk7CiAJY2FzZSBWSURJT0NfR19TTElDRURfVkJJX0NBUDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3NsaWNlZF92YmlfY2FwLCBhcmcpOworCWNhc2UgVklESU9DX0VOVU1fRk1UOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGVudW1fZm10LCBhcmcpOworCWNhc2UgVklESU9DX1RSWV9GTVQ6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgdHJ5X2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19TX0ZNVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19HX0ZNVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2ZtdCwgYXJnKTsKIAljYXNlIFZJRElPQ19JTlRfU19TVERfT1VUUFVUOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RkX291dHB1dCwgKih2NGwyX3N0ZF9pZCAqKWFyZyk7CisJY2FzZSBWSURJT0NfUVVFUllTVEQ6CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgcXVlcnlzdGQsIGFyZyk7CisJY2FzZSBWSURJT0NfSU5UX0dfSU5QVVRfU1RBVFVTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCBhcmcpOwogCWNhc2UgVklESU9DX1NUUkVBTU9OOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19zdHJlYW0sIDApOworCWNhc2UgVklESU9DX1NfUEFSTToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3Bhcm0sIGFyZyk7CisJY2FzZSBWSURJT0NfR19QQVJNOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIGdfcGFybSwgYXJnKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBpb2N0bCwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCAzMTk0NGIxLi42MTA5ZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJICAgU28sIGl0IHNob3VsZCBmcmVlIG1lbW9yeSBvbmx5IGlmIHRoZSBtZW1vcnkgd2VyZSBhbGxvY2F0ZWQgZm9yCiAJICAgcmVhZCgpIG9wZXJhdGlvbi4KIAkgKi8KLQlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8ICFidWYtPmJhZGRyKQorCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgYnVmLT5iYWRkcikKIAkJcmV0dXJuOwogCiAJaWYgKCFtZW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCmluZGV4IGJlNjVhMmYuLjMwYWUzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAkgICBTbywgaXQgc2hvdWxkIGZyZWUgbWVtb3J5IG9ubHkgaWYgdGhlIG1lbW9yeSB3ZXJlIGFsbG9jYXRlZCBmb3IKIAkgICByZWFkKCkgb3BlcmF0aW9uLgogCSAqLwotCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgKGJ1Zi0+YmFkZHIgPT0gMCkpCisJaWYgKChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9VU0VSUFRSKSB8fCBidWYtPmJhZGRyKQogCQlyZXR1cm47CiAKIAlpZiAoIW1lbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggODhiZjg0NS4uOGRhNGRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTgsNiArOCwxMiBAQAogICoKICAqIEJhc2VkIG9uIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgZm9yIDIuNCBrZXJuZWxzIGJ5OgogICogQ29weXJpZ2h0IChDKSAyMDAzIExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KKyAqCisgKiB2NGwyX2RldmljZS92NGwyX3N1YmRldiBjb252ZXJzaW9uIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA5IEhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgorICoKKyAqIE5vdGU6IHRoaXMgY29udmVyc2lvbiBpcyB1bnRlc3RlZCEgUGxlYXNlIGNvbnRhY3QgdGhlIGxpbnV4LW1lZGlhCisgKiBtYWlsaW5nbGlzdCBpZiB5b3UgY2FuIHRlc3QgdGhpcywgdG9nZXRoZXIgd2l0aCB0aGUgdGVzdCByZXN1bHRzLgogICovCiAKIC8qCkBAIC0zMywxMiArMzksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1zZ2kuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vcGFjY2Vzcy5oPgpAQCAtMTM5LDEzICsxNDMsMjMgQEAKICNkZWZpbmUgVklOT19EQVRBX05PUk1fUEFMCQkxCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX1NFQ0FNCQkyCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX0QxCQkzCi0vKiBUaGUgZm9sbG93aW5nIGFyZSBzcGVjaWFsIGVudHJpZXMgdGhhdCBjYW4gYmUgdXNlZCB0bwotICogYXV0b2RldGVjdCB0aGUgbm9ybS4gKi8KLSNkZWZpbmUgVklOT19EQVRBX05PUk1fQVVUTwkJMHhmZQotI2RlZmluZSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVAkJMHhmZgogCiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX0NPVU5UCQk0CiAKKy8qIEkyQyBjb250cm9sbGVyIGZsYWdzICovCisjZGVmaW5lIFNHSV9JMkNfRk9SQ0VfSURMRQkJKDAgPDwgMCkKKyNkZWZpbmUgU0dJX0kyQ19OT1RfSURMRQkJKDEgPDwgMCkKKyNkZWZpbmUgU0dJX0kyQ19XUklURQkJCSgwIDw8IDEpCisjZGVmaW5lIFNHSV9JMkNfUkVBRAkJCSgxIDw8IDEpCisjZGVmaW5lIFNHSV9JMkNfUkVMRUFTRV9CVVMJCSgwIDw8IDIpCisjZGVmaW5lIFNHSV9JMkNfSE9MRF9CVVMJCSgxIDw8IDIpCisjZGVmaW5lIFNHSV9JMkNfWEZFUl9ET05FCQkoMCA8PCA0KQorI2RlZmluZSBTR0lfSTJDX1hGRVJfQlVTWQkJKDEgPDwgNCkKKyNkZWZpbmUgU0dJX0kyQ19BQ0sJCQkoMCA8PCA1KQorI2RlZmluZSBTR0lfSTJDX05BQ0sJCQkoMSA8PCA1KQorI2RlZmluZSBTR0lfSTJDX0JVU19PSwkJCSgwIDw8IDcpCisjZGVmaW5lIFNHSV9JMkNfQlVTX0VSUgkJCSgxIDw8IDcpCisKIC8qIEludGVybmFsIGRhdGEgc3RydWN0dXJlIGRlZmluaXRpb25zICovCiAKIHN0cnVjdCB2aW5vX2lucHV0IHsKQEAgLTI4OSwyMiArMzAzLDIwIEBACiAJc3RydWN0IHZpbm9faW50ZXJydXB0X2RhdGEgaW50X2RhdGE7CiAKIAkvKiBWNEwgc3VwcG9ydCAqLwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnY0bF9kZXZpY2U7Ci19OwotCi1zdHJ1Y3Qgdmlub19jbGllbnQgewotCS8qIHRoZSBjaGFubmVsIHdoaWNoIG93bnMgdGhpcyBjbGllbnQ6Ci0JICogVklOT19OT19DSEFOTkVMLCBWSU5PX0NIQU5ORUxfQSBvciBWSU5PX0NIQU5ORUxfQiAqLwotCXVuc2lnbmVkIGludCBvd25lcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZHJpdmVyOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CiB9OwogCiBzdHJ1Y3Qgdmlub19zZXR0aW5ncyB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgYTsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIGI7CiAKLQlzdHJ1Y3Qgdmlub19jbGllbnQgZGVjb2RlcjsKLQlzdHJ1Y3Qgdmlub19jbGllbnQgY2FtZXJhOworCS8qIHRoZSBjaGFubmVsIHdoaWNoIG93bnMgdGhpcyBjbGllbnQ6CisJICogVklOT19OT19DSEFOTkVMLCBWSU5PX0NIQU5ORUxfQSBvciBWSU5PX0NIQU5ORUxfQiAqLworCXVuc2lnbmVkIGludCBkZWNvZGVyX293bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqZGVjb2RlcjsKKwl1bnNpZ25lZCBpbnQgY2FtZXJhX293bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqY2FtZXJhOwogCiAJLyogYSBsb2NrIGZvciB2aW5vIHJlZ2lzdGVyIGFjY2VzcyAqLwogCXNwaW5sb2NrX3Qgdmlub19sb2NrOwpAQCAtMzQ0LDExICszNTYsMTYgQEAKIAogc3RhdGljIHN0cnVjdCB2aW5vX3NldHRpbmdzICp2aW5vX2RydmRhdGE7CiAKKyNkZWZpbmUgY2FtZXJhX2NhbGwobywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwodmlub19kcnZkYXRhLT5jYW1lcmEsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgZGVjb2Rlcl9jYWxsKG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciwgbywgZiwgIyNhcmdzKQorCiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19kcml2ZXJfbmFtZSA9ICJ2aW5vIjsKIHN0YXRpYyBjb25zdCBjaGFyICp2aW5vX2RyaXZlcl9kZXNjcmlwdGlvbiA9ICJTR0kgVklOTyI7CiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19idXNfbmFtZSA9ICJHSU82NCBidXMiOwotc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdjRsX2RldmljZV9uYW1lX2EgPSAiU0dJIFZJTk8gQ2hhbm5lbCBBIjsKLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX3Y0bF9kZXZpY2VfbmFtZV9iID0gIlNHSSBWSU5PIENoYW5uZWwgQiI7CitzdGF0aWMgY29uc3QgY2hhciAqdmlub192ZGV2X25hbWVfYSA9ICJTR0kgVklOTyBDaGFubmVsIEEiOworc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdmRldl9uYW1lX2IgPSAiU0dJIFZJTk8gQ2hhbm5lbCBCIjsKIAogc3RhdGljIHZvaWQgdmlub19jYXB0dXJlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBjaGFubmVsKTsKIApAQCAtMzYwLDExICszNzcsMTEgQEAKIAkJLm5hbWUJCT0gIkNvbXBvc2l0ZSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTAogCQl8IFY0TDJfU1REX1NFQ0FNLAotCX0seworCX0sIHsKIAkJLm5hbWUJCT0gIlMtVmlkZW8iLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwKIAkJfCBWNEwyX1NURF9TRUNBTSwKLQl9LHsKKwl9LCB7CiAJCS5uYW1lCQk9ICJEMS9JbmR5Q2FtIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDLAogCX0KQEAgLTM3NiwxNyArMzkzLDE3IEBACiAJCS5icHAJCT0gMSwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX0dSRVksCiAJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICI4LWJpdCBkaXRoZXJlZCBSR0IgMy0zLTIiLAogCQkuYnBwCQk9IDEsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMzIsCiAJCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiMzItYml0IFJHQiIsCiAJCS5icHAJCT0gNCwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1JHQjMyLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIllVViA0OjI6MiIsCiAJCS5icHAJCT0gMiwKIAkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lVWVYsIC8vIFhYWDogc3dhcHBlZD8KQEAgLTQxNyw3ICs0MzQsNyBAQAogCQkJKyBWSU5PX05UU0NfSEVJR0hUIC8gMiAtIDEsCiAJCQkucmlnaHQJPSBWSU5PX05UU0NfV0lEVEgsCiAJCX0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiUEFMIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9QQUwsCiAJCS5mcHNfbWluCT0gNSwKQEAgLTQzOSw3ICs0NTYsNyBAQAogCQkJKyBWSU5PX1BBTF9IRUlHSFQgLyAyIC0gMSwKIAkJCS5yaWdodAk9IFZJTk9fUEFMX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIlNFQ0FNIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9TRUNBTSwKIAkJLmZwc19taW4JPSA1LApAQCAtNDYxLDcgKzQ3OCw3IEBACiAJCQkrIFZJTk9fUEFMX0hFSUdIVCAvIDIgLSAxLAogCQkJLnJpZ2h0CT0gVklOT19QQUxfV0lEVEgsCiAJCX0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiTlRTQy9EMSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQywKIAkJLmZwc19taW4JPSA2LApAQCAtNDk3LDkgKzUxNCw3IEBACiAJCS5tYXhpbXVtID0gMSwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fQUdDX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX0FHQywgMCB9LAotCX0seworCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lID0gIkF1dG9tYXRpYyBXaGl0ZSBCYWxhbmNlIiwKQEAgLTUwNyw5ICs1MjIsNyBAQAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0FXQl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9BV0IsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0dBSU4sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiR2FpbiIsCkBAIC01MTcsMjkgKzUzMCwyMyBAQAogCQkubWF4aW11bSA9IElORFlDQU1fR0FJTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0dBSU5fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfR0FJTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCisJfSwgeworCQkuaWQgPSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiUmVkIFNhdHVyYXRpb24iLAogCQkubWluaW11bSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fTUlOLAogCQkubWF4aW11bSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9SRURfU0FUVVJBVElPTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxLAorCX0sIHsKKwkJLmlkID0gSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJCbHVlIFNhdHVyYXRpb24iLAogCQkubWluaW11bSA9IElORFlDQU1fQkxVRV9TQVRVUkFUSU9OX01JTiwKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04sIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlJlZCBCYWxhbmNlIiwKQEAgLTU0Nyw5ICs1NTQsNyBAQAogCQkubWF4aW11bSA9IElORFlDQU1fUkVEX0JBTEFOQ0VfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9SRURfQkFMQU5DRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRSwgMCB9LAotCX0seworCX0sIHsKIAkJLmlkID0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkJsdWUgQmFsYW5jZSIsCkBAIC01NTcsOSArNTYyLDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0UsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0VYUE9TVVJFLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlNodXR0ZXIgQ29udHJvbCIsCkBAIC01NjcsOSArNTcwLDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1NIVVRURVJfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9TSFVUVEVSX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX1NIVVRURVIsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0dBTU1BLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkdhbW1hIiwKQEAgLTU3Nyw4ICs1NzgsNiBAQAogCQkubWF4aW11bSA9IElORFlDQU1fR0FNTUFfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9HQU1NQV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9HQU1NQSwgMCB9LAogCX0KIH07CiAKQEAgLTU5MywyMDkgKzU5Miw3MyBAQAogCQkubWF4aW11bSA9IFNBQTcxOTFfSFVFX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfSFVFX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0hVRSwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiTHVtaW5hbmNlIEJhbmRwYXNzIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQkFORFBBU1NfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiTHVtaW5hbmNlIEJhbmRwYXNzIFdlaWdodCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9CQU5EUEFTU19XRUlHSFRfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVCwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAyLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0NPUklORywKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJIRiBMdW1pbmFuY2UgQ29yaW5nIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0NPUklOR19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9DT1JJTkdfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9DT1JJTkdfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfQ09SSU5HLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCiAJCS5uYW1lID0gIkZvcmNlIENvbG91ciIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9GT1JDRV9DT0xPVVJfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkNocm9taW5hbmNlIEdhaW4gQ29udHJvbCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0NIUk9NQV9HQUlOX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDUsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfVlRSQywKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJWVFIgVGltZSBDb25zdGFudCIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9WVFJDX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX1ZUUkNfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9WVFJDX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX1ZUUkMsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNiwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBEZWxheSBDb21wZW5zYXRpb24iLAogCQkubWluaW11bSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9MVU1BX0RFTEFZX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDcsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfVk5SLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlZlcnRpY2FsIE5vaXNlIFJlZHVjdGlvbiIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9WTlJfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfVk5SX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfVk5SX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX1ZOUiwgMCB9LAogCX0KIH07CiAKLS8qIFZJTk8gSTJDIGJ1cyBmdW5jdGlvbnMgKi8KLQotdW5zaWduZWQgaTJjX3Zpbm9fZ2V0Y3RybCh2b2lkICpkYXRhKQotewotCXJldHVybiB2aW5vLT5pMmNfY29udHJvbDsKLX0KLQotdm9pZCBpMmNfdmlub19zZXRjdHJsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKLXsKLQl2aW5vLT5pMmNfY29udHJvbCA9IHZhbDsKLX0KLQotdW5zaWduZWQgaTJjX3Zpbm9fcmRhdGEodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2RhdGE7Ci19Ci0KLXZvaWQgaTJjX3Zpbm9fd2RhdGEodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKQotewotCXZpbm8tPmkyY19kYXRhID0gdmFsOwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIGkyY19zZ2lfdmlub19kYXRhID0KLXsKLQkuZ2V0Y3RybCA9ICZpMmNfdmlub19nZXRjdHJsLAotCS5zZXRjdHJsID0gJmkyY192aW5vX3NldGN0cmwsCi0JLnJkYXRhICAgPSAmaTJjX3Zpbm9fcmRhdGEsCi0JLndkYXRhICAgPSAmaTJjX3Zpbm9fd2RhdGEsCi0JLnhmZXJfdGltZW91dCA9IDIwMCwKLQkuYWNrX3RpbWVvdXQgID0gMTAwMCwKLX07Ci0KLS8qCi0gKiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGNsaWVudHMgb24gVklOTyBJMkMgYnVzLCBzbyB3ZSBsaW1pdCB1c2FnZSBvbmx5Ci0gKiB0byB0aGVtLgotICovCi1zdGF0aWMgaW50IGkyY192aW5vX2NsaWVudF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCXN3aXRjaCAoY2xpZW50LT5kcml2ZXItPmlkKSB7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE5MToKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgPSBjbGllbnQ7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0lORFlDQU06Ci0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciA9IGNsaWVudDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0RFVjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGkyY192aW5vX2NsaWVudF91bnJlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JaWYgKGNsaWVudCA9PSB2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKSB7Ci0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgIT0gVklOT19OT19DSEFOTkVMKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNsaWVudCA9PSB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyICE9IFZJTk9fTk9fQ0hBTk5FTCkKLQkJCXJldCA9IC1FQlVTWTsKLQkJZWxzZQotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHZpbm9faTJjX2FkYXB0ZXIgPQotewotCS5uYW1lCQkJPSAiVklOTyBJMkMgYnVzIiwKLQkuaWQJCQk9IEkyQ19IV19TR0lfVklOTywKLQkuYWxnb19kYXRhCQk9ICZpMmNfc2dpX3Zpbm9fZGF0YSwKLQkuY2xpZW50X3JlZ2lzdGVyCT0gJmkyY192aW5vX2NsaWVudF9yZWcsCi0JLmNsaWVudF91bnJlZ2lzdGVyCT0gJmkyY192aW5vX2NsaWVudF91bnJlZywKLX07Ci0KLXN0YXRpYyBpbnQgdmlub19pMmNfYWRkX2J1cyh2b2lkKQotewotCXJldHVybiBpMmNfc2dpX2FkZF9idXMoJnZpbm9faTJjX2FkYXB0ZXIpOwotfQotCi1zdGF0aWMgaW50IHZpbm9faTJjX2RlbF9idXModm9pZCkKLXsKLQlyZXR1cm4gaTJjX2RlbF9hZGFwdGVyKCZ2aW5vX2kyY19hZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCBpMmNfY2FtZXJhX2NvbW1hbmQodW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXItPgotCQlkcml2ZXItPmNvbW1hbmQodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyLAotCQkJCWNtZCwgYXJnKTsKLX0KLQotc3RhdGljIGludCBpMmNfZGVjb2Rlcl9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlci0+Ci0JCWRyaXZlci0+Y29tbWFuZCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyLAotCQkJCWNtZCwgYXJnKTsKLX0KLQogLyogVklOTyBmcmFtZWJ1ZmZlci9ETUEgZGVzY3JpcHRvciBtYW5hZ2VtZW50ICovCiAKIHN0YXRpYyB2b2lkIHZpbm9fZnJlZV9idWZmZXJfd2l0aF9jb3VudChzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIsCkBAIC0xNzQxLDYgKzE2MDQsMTg0IEBACiAJdmlub19zZXRfZnJhbWVyYXRlKHZjcywgdmlub19kYXRhX25vcm1zW3Zjcy0+ZGF0YV9ub3JtXS5mcHNfbWF4KTsKIH0KIAorLyogVklOTyBJMkMgYnVzIGZ1bmN0aW9ucyAqLworCitzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgeworCXZvaWQgKmRhdGE7CS8qIHByaXZhdGUgZGF0YSBmb3IgbG93bGV2ZWwgcm91dGluZXMgKi8KKwl1bnNpZ25lZCAoKmdldGN0cmwpKHZvaWQgKmRhdGEpOworCXZvaWQgKCpzZXRjdHJsKSh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpOworCXVuc2lnbmVkICgqcmRhdGEpKHZvaWQgKmRhdGEpOworCXZvaWQgKCp3ZGF0YSkodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKTsKKworCWludCB4ZmVyX3RpbWVvdXQ7CisJaW50IGFja190aW1lb3V0OworfTsKKworc3RhdGljIGludCB3YWl0X3hmZXJfZG9uZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+eGZlcl90aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19YRkVSX0JVU1kpID09IDApCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0KKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IHdhaXRfYWNrKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWlmICh3YWl0X3hmZXJfZG9uZShhZGFwKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJZm9yIChpID0gMDsgaSA8IGFkYXAtPmFja190aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19OQUNLKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBmb3JjZV9pZGxlKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCkKK3sKKwlpbnQgaTsKKworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19GT1JDRV9JRExFKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+eGZlcl90aW1lb3V0OyBpKyspIHsKKwkJaWYgKChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19OT1RfSURMRSkgPT0gMCkKKwkJCWdvdG8gb3V0OworCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAtRVRJTUVET1VUOworb3V0OgorCWlmIChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19CVVNfRVJSKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19hZGRyZXNzKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsCisJCSAgICAgIGludCByZCkKK3sKKwlpZiAocmQpCisJCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19OT1RfSURMRSk7CisJLyogQ2hlY2sgaWYgYnVzIGlzIGlkbGUsIGV2ZW50dWFsbHkgZm9yY2UgaXQgdG8gZG8gc28gKi8KKwlpZiAoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTk9UX0lETEUpCisJCWlmIChmb3JjZV9pZGxlKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJLyogV3JpdGUgb3V0IHRoZSBpMmMgY2hpcCBhZGRyZXNzIGFuZCBzcGVjaWZ5IG9wZXJhdGlvbiAqLworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwKKwkJICAgICAgU0dJX0kyQ19IT0xEX0JVUyB8IFNHSV9JMkNfV1JJVEUgfCBTR0lfSTJDX05PVF9JRExFKTsKKwlpZiAocmQpCisJCWFkZHIgfD0gMTsKKwlhZGFwLT53ZGF0YShhZGFwLT5kYXRhLCBhZGRyKTsKKwlpZiAod2FpdF9hY2soYWRhcCkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGkyY19yZWFkKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwKKwkJICAgICAgU0dJX0kyQ19IT0xEX0JVUyB8IFNHSV9JMkNfUkVBRCB8IFNHSV9JMkNfTk9UX0lETEUpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAod2FpdF94ZmVyX2RvbmUoYWRhcCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJYnVmW2ldID0gYWRhcC0+cmRhdGEoYWRhcC0+ZGF0YSk7CisJfQorCWFkYXAtPnNldGN0cmwoYWRhcC0+ZGF0YSwgU0dJX0kyQ19SRUxFQVNFX0JVUyB8IFNHSV9JMkNfRk9SQ0VfSURMRSk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGkyY193cml0ZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBpOworCisJLyogV2UgYXJlIGFscmVhZHkgaW4gd3JpdGUgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJYWRhcC0+d2RhdGEoYWRhcC0+ZGF0YSwgYnVmW2ldKTsKKwkJaWYgKHdhaXRfYWNrKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNnaV94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2dzLAorCQkgICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCXN0cnVjdCBpMmNfbXNnICpwOworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgIWVyciAmJiBpIDwgbnVtOyBpKyspIHsKKwkJcCA9ICZtc2dzW2ldOworCQllcnIgPSBkb19hZGRyZXNzKGFkYXAsIHAtPmFkZHIsIHAtPmZsYWdzICYgSTJDX01fUkQpOworCQlpZiAoZXJyIHx8ICFwLT5sZW4pCisJCQljb250aW51ZTsKKwkJaWYgKHAtPmZsYWdzICYgSTJDX01fUkQpCisJCQllcnIgPSBpMmNfcmVhZChhZGFwLCBwLT5idWYsIHAtPmxlbik7CisJCWVsc2UKKwkJCWVyciA9IGkyY193cml0ZShhZGFwLCBwLT5idWYsIHAtPmxlbik7CisJfQorCisJcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IGk7Cit9CisKK3N0YXRpYyB1MzIgc2dpX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc2dpX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gc2dpX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBzZ2lfZnVuYywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpMmNfdmlub19nZXRjdHJsKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHZpbm8tPmkyY19jb250cm9sOworfQorCitzdGF0aWMgdm9pZCBpMmNfdmlub19zZXRjdHJsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKK3sKKwl2aW5vLT5pMmNfY29udHJvbCA9IHZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkIGkyY192aW5vX3JkYXRhKHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHZpbm8tPmkyY19kYXRhOworfQorCitzdGF0aWMgdm9pZCBpMmNfdmlub193ZGF0YSh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCit7CisJdmluby0+aTJjX2RhdGEgPSB2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgaTJjX3NnaV92aW5vX2RhdGEgPSB7CisJLmdldGN0cmwgPSAmaTJjX3Zpbm9fZ2V0Y3RybCwKKwkuc2V0Y3RybCA9ICZpMmNfdmlub19zZXRjdHJsLAorCS5yZGF0YSAgID0gJmkyY192aW5vX3JkYXRhLAorCS53ZGF0YSAgID0gJmkyY192aW5vX3dkYXRhLAorCS54ZmVyX3RpbWVvdXQgPSAyMDAsCisJLmFja190aW1lb3V0ICA9IDEwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHZpbm9faTJjX2FkYXB0ZXIgPSB7CisJLm5hbWUJCQk9ICJWSU5PIEkyQyBidXMiLAorCS5pZAkJCT0gSTJDX0hXX1NHSV9WSU5PLAorCS5hbGdvCQkJPSAmc2dpX2FsZ28sCisJLmFsZ29fZGF0YQkJPSAmaTJjX3NnaV92aW5vX2RhdGEsCisJLm93bmVyIAkJCT0gVEhJU19NT0RVTEUsCit9OworCiAvKgogICogUHJlcGFyZSBWSU5PIGZvciBETUEgdHJhbnNmZXIuLi4KICAqIChleGVjdXRlIG9ubHkgd2l0aCB2aW5vX2xvY2sgYW5kIGlucHV0X2xvY2sgbG9ja2VkKQpAQCAtMjQ5MCw4NiArMjUzMSwxNSBAQAogCX0KIH0KIAotc3RhdGljIGludCB2aW5vX2dldF9zYWE3MTkxX25vcm0odW5zaWduZWQgaW50IGRhdGFfbm9ybSkKLXsKLQlzd2l0Y2ggKGRhdGFfbm9ybSkgewotCWNhc2UgVklOT19EQVRBX05PUk1fQVVUTzoKLQkJcmV0dXJuIFNBQTcxOTFfTk9STV9BVVRPOwotCWNhc2UgVklOT19EQVRBX05PUk1fQVVUT19FWFQ6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fQVVUT19FWFQ7Ci0JY2FzZSBWSU5PX0RBVEFfTk9STV9QQUw6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fUEFMOwotCWNhc2UgVklOT19EQVRBX05PUk1fTlRTQzoKLQkJcmV0dXJuIFNBQTcxOTFfTk9STV9OVFNDOwotCWNhc2UgVklOT19EQVRBX05PUk1fU0VDQU06Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fU0VDQU07Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiB2aW5vX2dldF9zYWE3MTkxX25vcm0oKTogIgotCQkgICAgICAgImludmFsaWQgbm9ybSFcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotfQotCi1zdGF0aWMgaW50IHZpbm9fZ2V0X2Zyb21fc2FhNzE5MV9ub3JtKGludCBzYWE3MTkxX25vcm0pCi17Ci0Jc3dpdGNoIChzYWE3MTkxX25vcm0pIHsKLQljYXNlIFNBQTcxOTFfTk9STV9QQUw6Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JY2FzZSBTQUE3MTkxX05PUk1fTlRTQzoKLQkJcmV0dXJuIFZJTk9fREFUQV9OT1JNX05UU0M7Ci0JY2FzZSBTQUE3MTkxX05PUk1fU0VDQU06Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9TRUNBTTsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIlZJTk86IHZpbm9fZ2V0X2Zyb21fc2FhNzE5MV9ub3JtKCk6ICIKLQkJICAgICAgICJpbnZhbGlkIG5vcm0hXG4iKTsKLQkJcmV0dXJuIFZJTk9fREFUQV9OT1JNX05PTkU7Ci0JfQotfQotCi1zdGF0aWMgaW50IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSh1bnNpZ25lZCBpbnQgKmRhdGFfbm9ybSkKLXsKLQlpbnQgc2FhNzE5MV9ub3JtLCBuZXdfZGF0YV9ub3JtOwotCWludCBlcnIgPSAwOwotCi0Jc2FhNzE5MV9ub3JtID0gdmlub19nZXRfc2FhNzE5MV9ub3JtKCpkYXRhX25vcm0pOwotCi0JZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfU0VUX05PUk0sCi0JCQkJICAmc2FhNzE5MV9ub3JtKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWlmICgoKmRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCSAgICB8fCAoKmRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpIHsKLQkJc3RydWN0IHNhYTcxOTFfc3RhdHVzIHN0YXR1czsKLQotCQllcnIgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTLAotCQkJCQkgICZzdGF0dXMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJbmV3X2RhdGFfbm9ybSA9Ci0JCQl2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybShzdGF0dXMubm9ybSk7Ci0JCWlmIChuZXdfZGF0YV9ub3JtID09IFZJTk9fREFUQV9OT1JNX05PTkUpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCSpkYXRhX25vcm0gPSAodW5zaWduZWQgaW50KW5ld19kYXRhX25vcm07Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogLyogZXhlY3V0ZSB3aXRoIGlucHV0X2xvY2sgbG9ja2VkICovCiBzdGF0aWMgaW50IHZpbm9faXNfaW5wdXRfb3duZXIoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQogewogCXN3aXRjaCh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQlyZXR1cm4gKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpOworCQlyZXR1cm4gdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IHZjcy0+Y2hhbm5lbDsKIAljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCXJldHVybiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKTsKKwkJcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IHZjcy0+Y2hhbm5lbDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9CkBAIC0yNTg1LDIzICsyNTU1LDIyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCiAJLyogRmlyc3QgdHJ5IEQxIGFuZCB0aGVuIFNBQTcxOTEgKi8KLQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyCi0JICAgICYmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpKSB7Ci0JCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzLT5jaGFubmVsOworCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYQorCSAgICAmJiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgeworCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAkJdmNzLT5pbnB1dCA9IFZJTk9fSU5QVVRfRDE7CiAJCXZjcy0+ZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fRDE7Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyCi0JCSAgICYmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgewotCQlpbnQgaW5wdXQsIGRhdGFfbm9ybTsKLQkJaW50IHNhYTcxOTFfaW5wdXQ7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIKKwkJICAgJiYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpKSB7CisJCWludCBpbnB1dDsKKwkJaW50IGRhdGFfbm9ybTsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCi0JCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwogCQlpbnB1dCA9IFZJTk9fSU5QVVRfQ09NUE9TSVRFOwogCi0JCXNhYTcxOTFfaW5wdXQgPSB2aW5vX2dldF9zYWE3MTkxX2lucHV0KGlucHV0KTsKLQkJcmV0ID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NFVF9JTlBVVCwKLQkJCQkJICAmc2FhNzE5MV9pbnB1dCk7CisJCXJvdXRlLmlucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7CisJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQlpZiAocmV0KSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0yNjEyLDEyICsyNTgxLDE1IEBACiAJCS8qIERvbid0IGhvbGQgc3BpbmxvY2tzIHdoaWxlIGF1dG8tZGV0ZWN0aW5nIG5vcm0KIAkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOwotCi0JCXJldCA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKLQkJaWYgKChyZXQgPT0gLUVCVVNZKSB8fCAocmV0ID09IC1FQUdBSU4pKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7CisJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWZvciAoZGF0YV9ub3JtID0gMDsgZGF0YV9ub3JtIDwgMzsgZGF0YV9ub3JtKyspIHsKKwkJCQlpZiAodmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkICYgbm9ybSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZGF0YV9ub3JtID09IDMpCisJCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOworCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CkBAIC0yNjI3LDcgKzI1OTksNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSB2Y3MtPmNoYW5uZWw7CisJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAogCQl2Y3MtPmlucHV0ID0gaW5wdXQ7CiAJCXZjcy0+ZGF0YV9ub3JtID0gZGF0YV9ub3JtOwpAQCAtMjY3MiwyNSArMjY0NCwyNCBAQAogCXN3aXRjaCAoaW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86Ci0JCWlmICghdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKLQkJCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzLT5jaGFubmVsOworCQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkgeworCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gdmNzLT5jaGFubmVsOwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCWludCBkYXRhX25vcm07Ci0JCQlpbnQgc2FhNzE5MV9pbnB1dDsKKwkJCXY0bDJfc3RkX2lkIG5vcm07CisJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKLQkJCXNhYTcxOTFfaW5wdXQgPSB2aW5vX2dldF9zYWE3MTkxX2lucHV0KGlucHV0KTsKLQkJCXJldCA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TRVRfSU5QVVQsCi0JCQkJCQkgICZzYWE3MTkxX2lucHV0KTsKKwkJCXJvdXRlLmlucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7CisJCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJCWlmIChyZXQpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yNzAwLDE4ICsyNjcxLDIxIEBACiAJCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBhdXRvLWRldGVjdGluZyBub3JtCiAJCQkgKiBhcyBpdCBtYXkgdGFrZSBhIHdoaWxlLi4uICovCiAKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOwotCi0JCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7Ci0JCQlpZiAoKHJldCAgPT0gLUVCVVNZKSB8fCAocmV0ID09IC1FQUdBSU4pKSB7Ci0JCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOwotCQkJCXJldCA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKKwkJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJCWlmICghcmV0KSB7CisJCQkJZm9yIChkYXRhX25vcm0gPSAwOyBkYXRhX25vcm0gPCAzOyBkYXRhX25vcm0rKykgeworCQkJCQlpZiAodmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkICYgbm9ybSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZGF0YV9ub3JtID09IDMpCisJCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKKwkJCQlyZXQgPSBkZWNvZGVyX2NhbGwodHVuZXIsIHNfc3RkLCBub3JtKTsKIAkJCX0KIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCiAJCQlpZiAocmV0KSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtMjcyOCwzNyArMjcwMiwzMSBAQAogCQkJdmNzLT5kYXRhX25vcm0gPSB2Y3MyLT5kYXRhX25vcm07CiAJCX0KIAotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCS8qIFRyYW5zZmVyIHRoZSBvd25lcnNoaXAgb3IgcmVsZWFzZSB0aGUgaW5wdXQgKi8KIAkJCWlmICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX0QxKSB7Ci0JCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKIAkJCX0gZWxzZSB7Ci0JCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Ci0JCQkJCQkgICBjYW1lcmEuZHJpdmVyKTsKLQkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCX0KIAkJfQogCQlicmVhazsKIAljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCWlmICghdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJCWlmICghdmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKLQkJCWkyY191c2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IHZjcy0+Y2hhbm5lbDsKLQkJfQorCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKQorCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJCS8qIFRyYW5zZmVyIHRoZSBvd25lcnNoaXAgb3IgcmVsZWFzZSB0aGUgaW5wdXQgKi8KIAkJCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8CiAJCQkJICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCQl9IGVsc2UgewotCQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPgotCQkJCQkJICAgZGVjb2Rlci5kcml2ZXIpOwotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQl9CiAJCX0KIApAQCAtMjc5NSwyMCArMjc2MywxOCBAQAogCS8qIFJlbGVhc2Ugb3duZXJzaGlwIG9mIHRoZSBjaGFubmVsCiAJICogYW5kIGlmIHRoZSBvdGhlciBjaGFubmVsIHRha2VzIGlucHV0IGZyb20KIAkgKiB0aGUgc2FtZSBzb3VyY2UsIHRyYW5zZmVyIHRoZSBvd25lcnNoaXAgKi8KLQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IHZjcy0+Y2hhbm5lbCkgewogCQlpZiAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkgewotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MyLT5jaGFubmVsOworCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQl9IGVsc2UgewotCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8CiAJCQkgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKSkgewotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCX0gZWxzZSB7Ci0JCQlpMmNfcmVsZWFzZV9jbGllbnQodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcik7Ci0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCX0KIAl9CiAJdmNzLT5pbnB1dCA9IFZJTk9fSU5QVVRfTk9ORTsKQEAgLTI4MjksMTggKzI3OTUsMTYgQEAKIAlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfRDE6CiAJCS8qIG9ubHkgb25lICJub3JtIiBzdXBwb3J0ZWQgKi8KLQkJaWYgKChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fRDEpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0FVVE8pCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUKSkKKwkJaWYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9EMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKKwogCQlpZiAoKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9QQUwpCiAJCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX05UU0MpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX1NFQ0FNKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpCisJCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX1NFQ0FNKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgKmZsYWdzKTsKQEAgLTI4NDgsNyArMjgxMiw4IEBACiAJCS8qIERvbid0IGhvbGQgc3BpbmxvY2tzIHdoaWxlIHNldHRpbmcgbm9ybQogCQkgKiBhcyBpdCBtYXkgdGFrZSBhIHdoaWxlLi4uICovCiAKLQkJZXJyID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOworCQlub3JtID0gdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uc3RkOworCQllcnIgPSBkZWNvZGVyX2NhbGwodHVuZXIsIHNfc3RkLCBub3JtKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCAqZmxhZ3MpOwogCkBAIC0yODg0LDQxICsyODQ5LDEzIEBACiAJcmV0dXJuIFZJTk9fREFUQV9GTVRfTk9ORTsKIH0KIAotc3RhdGljIGludCB2aW5vX2VudW1fZGF0YV9ub3JtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCi17Ci0JaW50IGRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX05PTkU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2godmNzLT5pbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJaWYgKGluZGV4ID09IDApIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKLQkJfSBlbHNlIGlmIChpbmRleCA9PSAxKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9OVFNDOwotCQl9IGVsc2UgaWYgKGluZGV4ID09IDIpIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1NFQ0FNOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVklOT19JTlBVVF9EMToKLQkJaWYgKGluZGV4ID09IDApIHsKLQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0QxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBkYXRhX25vcm07Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19lbnVtX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCitzdGF0aWMgaW50IHZpbm9faW50X2VudW1faW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLCBfX3UzMiBpbmRleCkKIHsKIAlpbnQgaW5wdXQgPSBWSU5PX0lOUFVUX05PTkU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyICYmIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKQEAgLTI5MzAsNyArMjg2Nyw3IEBACiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfRDE7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKQEAgLTI5MzksNyArMjg3Niw3IEBACiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfU1ZJREVPOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJc3dpdGNoIChpbmRleCkgewogCQljYXNlIDA6CiAJCQlpbnB1dCA9IFZJTk9fSU5QVVRfRDE7CkBAIC0yOTU3LDcgKzI4OTQsNyBAQAogCV9fdTMyIGluZGV4ID0gMDsKIAkvLyBGSVhNRTogZGV0ZWN0IHdoZW4gbm8gaW5wdXRzIGF2YWlsYWJsZQogCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAkJCWluZGV4ID0gMDsKQEAgLTI5NjksNyArMjkwNiw3IEBACiAJCQlpbmRleCA9IDI7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyKSB7CiAJCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCQkJaW5kZXggPSAwOwpAQCAtMjk3OCw3ICsyOTE1LDcgQEAKIAkJCWluZGV4ID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCQljYXNlIFZJTk9fSU5QVVRfRDE6CiAJCQlpbmRleCA9IDA7CkBAIC0yOTkxLDcgKzI5MjgsOCBAQAogCiAvKiBWNEwyIGlvY3RscyAqLwogCi1zdGF0aWMgdm9pZCB2aW5vX3Y0bDJfcXVlcnljYXAoc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQorc3RhdGljIGludCB2aW5vX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkpKTsKIApAQCAtMzAwMywxNiArMjk0MSwxOCBAQAogCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfU1RSRUFNSU5HOwogCS8vIFY0TDJfQ0FQX09WRVJMQVksIFY0TDJfQ0FQX1JFQURXUklURQorCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICAgc3RydWN0IHY0bDJfaW5wdXQgKmkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlfX3UzMiBpbmRleCA9IGktPmluZGV4OwogCWludCBpbnB1dDsKIAlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOwogCi0JaW5wdXQgPSB2aW5vX2VudW1faW5wdXQodmNzLCBpbmRleCk7CisJaW5wdXQgPSB2aW5vX2ludF9lbnVtX2lucHV0KHZjcywgaW5kZXgpOwogCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX05PTkUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMDIzLDIwICsyOTYzLDE1IEBACiAJaS0+c3RkID0gdmlub19pbnB1dHNbaW5wdXRdLnN0ZDsKIAlzdHJjcHkoaS0+bmFtZSwgdmlub19pbnB1dHNbaW5wdXRdLm5hbWUpOwogCi0JaWYgKChpbnB1dCA9PSBWSU5PX0lOUFVUX0NPTVBPU0lURSkKLQkgICAgfHwgKGlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKSkgewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgc3RhdHVzOwotCQlpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKLQkJaS0+c3RhdHVzIHw9IHN0YXR1cy5zaWduYWwgPyAwIDogVjRMMl9JTl9TVF9OT19TSUdOQUw7Ci0JCWktPnN0YXR1cyB8PSBzdGF0dXMuY29sb3IgPyAwIDogVjRMMl9JTl9TVF9OT19DT0xPUjsKLQl9Ci0KKwlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUgfHwgaW5wdXQgPT0gVklOT19JTlBVVF9TVklERU8pCisJCWRlY29kZXJfY2FsbCh2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZpLT5zdGF0dXMpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlfX3UzMiBpbmRleDsKIAlpbnQgaW5wdXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTMwNTcsNTIgKzI5OTIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyBpbnQgdmlub19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgICB1bnNpZ25lZCBpbnQgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBpbnB1dDsKLQlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5wdXQgPSAlZFxuIiwgKmkpOworCWRwcmludGsoInJlcXVlc3RlZCBpbnB1dCA9ICVkXG4iLCBpKTsKIAotCWlucHV0ID0gdmlub19lbnVtX2lucHV0KHZjcywgKmkpOworCWlucHV0ID0gdmlub19pbnRfZW51bV9pbnB1dCh2Y3MsIGkpOwogCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX05PTkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIHZpbm9fc2V0X2lucHV0KHZjcywgaW5wdXQpOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKLQkJCSAgICAgc3RydWN0IHY0bDJfc3RhbmRhcmQgKnMpCi17Ci0JaW50IGluZGV4ID0gcy0+aW5kZXg7Ci0JaW50IGRhdGFfbm9ybTsKLQotCWRhdGFfbm9ybSA9IHZpbm9fZW51bV9kYXRhX25vcm0odmNzLCBpbmRleCk7Ci0JZHByaW50aygic3RhbmRhcmQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOwotCi0JaWYgKGRhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9OT05FKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwcmludGsoInN0YW5kYXJkIG5hbWUgPSAlc1xuIiwKLQkgICAgICAgdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZGVzY3JpcHRpb24pOwotCi0JbWVtc2V0KHMsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkpOwotCXMtPmluZGV4ID0gaW5kZXg7Ci0KLQlzLT5pZCA9IHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZDsKLQlzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCXMtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0KLQkJdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZnBzX21heDsKLQlzLT5mcmFtZWxpbmVzID0KLQkJdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZnJhbWVsaW5lczsKLQlzdHJjcHkocy0+bmFtZSwKLQkgICAgICAgdmlub19kYXRhX25vcm1zW2RhdGFfbm9ybV0uZGVzY3JpcHRpb24pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5c3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCkBAIC0zMTE0LDE5ICszMDIxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyBzdGF0dXM7Ci0KLQkJaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cy5zaWduYWwpIHsKLQkJCWlmIChzdGF0dXMuc2lnbmFsXzYwaHopIHsKLQkJCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJKnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOwotCQkJfQotCQl9IGVsc2UgewotCQkJKnN0ZCA9IHZpbm9faW5wdXRzW3Zjcy0+aW5wdXRdLnN0ZDsKLQkJfQorCQlkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCBzdGQpOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTMxMzgsOSArMzAzMywxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2dfc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwpAQCAtMzE1Myw5ICszMDQ5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3Nfc3RkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHY0bDJfc3RkX2lkICpzdGQpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCkBAIC0zMTc2LDEyICszMDczLDcgQEAKIAkJaWYgKHZjcy0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmICgoKCpzdGQpICYgVjRMMl9TVERfUEFMKQotCQkgICAgJiYgKCgqc3RkKSAmIFY0TDJfU1REX05UU0MpCi0JCSAgICAmJiAoKCpzdGQpICYgVjRMMl9TVERfU0VDQU0pKSB7Ci0JCQlyZXQgPSB2aW5vX3NldF9kYXRhX25vcm0odmNzLCBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCwKLQkJCQkJCSAmZmxhZ3MpOwotCQl9IGVsc2UgaWYgKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkgeworCQlpZiAoKCpzdGQpICYgVjRMMl9TVERfUEFMKSB7CiAJCQlyZXQgPSB2aW5vX3NldF9kYXRhX25vcm0odmNzLCBWSU5PX0RBVEFfTk9STV9QQUwsCiAJCQkJCQkgJmZsYWdzKTsKIAkJfSBlbHNlIGlmICgoKnN0ZCkgJiBWNEwyX1NURF9OVFNDKSB7CkBAIC0zMjA3LDE4NSArMzA5OSwxNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9lbnVtX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZkKQogewotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZmQtPnR5cGU7Ci0JaW50IGluZGV4ID0gZmQtPmluZGV4OwotCWRwcmludGsoImZvcm1hdCBpbmRleCA9ICVkXG4iLCBpbmRleCk7CisJZHByaW50aygiZm9ybWF0IGluZGV4ID0gJWRcbiIsIGZkLT5pbmRleCk7CiAKLQlzd2l0Y2ggKGZkLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWlmICgoZmQtPmluZGV4IDwgMCkgfHwKLQkJICAgIChmZC0+aW5kZXggPj0gVklOT19EQVRBX0ZNVF9DT1VOVCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZHByaW50aygiZm9ybWF0IG5hbWUgPSAlc1xuIiwKLQkJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW2luZGV4XS5kZXNjcmlwdGlvbik7Ci0KLQkJbWVtc2V0KGZkLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpOwotCQlmZC0+aW5kZXggPSBpbmRleDsKLQkJZmQtPnR5cGUgPSB0eXBlOwotCQlmZC0+cGl4ZWxmb3JtYXQgPSB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0ucGl4ZWxmb3JtYXQ7Ci0JCXN0cmNweShmZC0+ZGVzY3JpcHRpb24sIHZpbm9fZGF0YV9mb3JtYXRzW2luZGV4XS5kZXNjcmlwdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6CisJaWYgKGZkLT5pbmRleCA+PSBWSU5PX0RBVEFfRk1UX0NPVU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJZHByaW50aygiZm9ybWF0IG5hbWUgPSAlc1xuIiwgdmlub19kYXRhX2Zvcm1hdHNbZmQtPmluZGV4XS5kZXNjcmlwdGlvbik7CiAKKwlmZC0+cGl4ZWxmb3JtYXQgPSB2aW5vX2RhdGFfZm9ybWF0c1tmZC0+aW5kZXhdLnBpeGVsZm9ybWF0OworCXN0cmNweShmZC0+ZGVzY3JpcHRpb24sIHZpbm9fZGF0YV9mb3JtYXRzW2ZkLT5pbmRleF0uZGVzY3JpcHRpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl90cnlfZm10KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgdGVtcHZjczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CiAKLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OworCWRwcmludGsoInJlcXVlc3RlZDogdyA9ICVkLCBoID0gJWRcbiIsCisJCQlwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOwogCi0JCWRwcmludGsoInJlcXVlc3RlZDogdyA9ICVkLCBoID0gJWRcbiIsCi0JCSAgICAgICBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwltZW1jcHkoJnRlbXB2Y3MsIHZjcywgc2l6ZW9mKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCW1lbWNweSgmdGVtcHZjcywgdmNzLCBzaXplb2Yoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncykpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQl0ZW1wdmNzLmRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0JCWlmICh0ZW1wdmNzLmRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgewotCQkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKLQkJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uCi0JCQkJcGl4ZWxmb3JtYXQ7Ci0JCX0KLQotCQkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLwotCQl2aW5vX3NldF9zY2FsaW5nKCZ0ZW1wdmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOwotCi0JCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCi0JCSAgICAgICB2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5kZXNjcmlwdGlvbik7Ci0KLQkJcGYtPndpZHRoID0gKHRlbXB2Y3MuY2xpcHBpbmcucmlnaHQgLSB0ZW1wdmNzLmNsaXBwaW5nLmxlZnQpIC8KLQkJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKLQkJcGYtPmhlaWdodCA9ICh0ZW1wdmNzLmNsaXBwaW5nLmJvdHRvbSAtIHRlbXB2Y3MuY2xpcHBpbmcudG9wKSAvCi0JCQl0ZW1wdmNzLmRlY2ltYXRpb247Ci0KLQkJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlwZi0+Ynl0ZXNwZXJsaW5lID0gdGVtcHZjcy5saW5lX3NpemU7Ci0JCXBmLT5zaXplaW1hZ2UgPSB0ZW1wdmNzLmxpbmVfc2l6ZSAqCi0JCQkodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLwotCQkJdGVtcHZjcy5kZWNpbWF0aW9uOwotCQlwZi0+Y29sb3JzcGFjZSA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOwotCi0JCXBmLT5wcml2ID0gMDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCXBmLT53aWR0aCA9ICh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5oZWlnaHQgPSAodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLwotCQkJdmNzLT5kZWNpbWF0aW9uOworCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSB2aW5vX2ZpbmRfZGF0YV9mb3JtYXQocGYtPnBpeGVsZm9ybWF0KTsKKwlpZiAodGVtcHZjcy5kYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKKwkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKIAkJcGYtPnBpeGVsZm9ybWF0ID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLnBpeGVsZm9ybWF0OwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgotCQkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLgorCQkJcGl4ZWxmb3JtYXQ7CiAJfQogCisJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KKwl2aW5vX3NldF9zY2FsaW5nKCZ0ZW1wdmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCisJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKKwkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKKworCXBmLT53aWR0aCA9ICh0ZW1wdmNzLmNsaXBwaW5nLnJpZ2h0IC0gdGVtcHZjcy5jbGlwcGluZy5sZWZ0KSAvCisJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKKwlwZi0+aGVpZ2h0ID0gKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KKwkJdGVtcHZjcy5kZWNpbWF0aW9uOworCisJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXBmLT5ieXRlc3BlcmxpbmUgPSB0ZW1wdmNzLmxpbmVfc2l6ZTsKKwlwZi0+c2l6ZWltYWdlID0gdGVtcHZjcy5saW5lX3NpemUgKgorCQkodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLworCQl0ZW1wdmNzLmRlY2ltYXRpb247CisJcGYtPmNvbG9yc3BhY2UgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOworCisJcGYtPnByaXYgPSAwOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKworCXBmLT53aWR0aCA9ICh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+aGVpZ2h0ID0gKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5waXhlbGZvcm1hdCA9CisJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLnBpeGVsZm9ybWF0OworCisJcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKKwlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgorCQkodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLworCQl2Y3MtPmRlY2ltYXRpb247CisJcGYtPmNvbG9yc3BhY2UgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOworCisJcGYtPnByaXYgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlub19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGRhdGFfZm9ybWF0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKIAotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlkYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwogCi0JCWRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0KLQkJaWYgKGRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgewotCQkJdmNzLT5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKLQkJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uCi0JCQkJcGl4ZWxmb3JtYXQ7Ci0JCX0gZWxzZSB7Ci0JCQl2Y3MtPmRhdGFfZm9ybWF0ID0gZGF0YV9mb3JtYXQ7Ci0JCX0KLQotCQkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLwotCQl2aW5vX3NldF9zY2FsaW5nKHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKLQotCQlkcHJpbnRrKCJkYXRhIGZvcm1hdCA9ICVzXG4iLAotCQkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOwotCi0JCXBmLT53aWR0aCA9IHZjcy0+Y2xpcHBpbmcucmlnaHQgLSB2Y3MtPmNsaXBwaW5nLmxlZnQ7Ci0JCXBmLT5oZWlnaHQgPSB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wOwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgotCQkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7CisJCXZjcy0+ZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7CisJCXBmLT5waXhlbGZvcm1hdCA9CisJCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS4KKwkJCXBpeGVsZm9ybWF0OworCX0gZWxzZSB7CisJCXZjcy0+ZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKIAl9CiAKKwkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLworCXZpbm9fc2V0X3NjYWxpbmcodmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOworCisJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKKwkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOworCisJcGYtPndpZHRoID0gdmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdDsKKwlwZi0+aGVpZ2h0ID0gdmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcDsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdmNzLT5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKKwkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9jcm9wY2FwKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjY2FwKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJY29uc3Qgc3RydWN0IHZpbm9fZGF0YV9ub3JtICpub3JtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM0MTUsOSArMzI2NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2Nyb3Aoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoYy0+dHlwZSkgewpAQCAtMzQzOSw5ICszMjkxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfY3JvcChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2Nyb3AgKmMpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3dpdGNoIChjLT50eXBlKSB7CkBAIC0zNDYxLDEwOCArMzMxNCw4MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX3Bhcm0oc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7CiAKLQlzd2l0Y2ggKHNwLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7Ci0JCW1lbXNldChjcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtKSk7CisJY3AtPmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwogCi0JCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOwotCQljcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwljcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gdmNzLT5mcHM7CiAKLQkJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHZjcy0+ZnBzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCS8vIFRPRE86IGNwLT5yZWFkYnVmZmVycyA9IHh4eDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwkvKiBUT0RPOiBjcC0+cmVhZGJ1ZmZlcnMgPSB4eHg7ICovCiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19wYXJtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwogCi0Jc3dpdGNoIChzcC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKChjcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9PSAwKSB8fAotCQkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKLQkJCS8qIHJlc2V0IGZyYW1lcmF0ZSAqLwotCQkJdmlub19zZXRfZGVmYXVsdF9mcmFtZXJhdGUodmNzKTsKLQkJfSBlbHNlIHsKLQkJCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgLwotCQkJCQkgICBjcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvcik7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkvLyBUT0RPOiBzZXQgYnVmZmVycyBhY2NvcmRpbmcgdG8gY3AtPnJlYWRidWZmZXJzCi0JCWJyZWFrOworCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKKwkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKKwkJLyogcmVzZXQgZnJhbWVyYXRlICovCisJCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7CisJfSBlbHNlIHsKKwkJdmlub19zZXRfZnJhbWVyYXRlKHZjcywgY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciAvCisJCQkJICAgY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwogCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9yZXFidWZzKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKHJiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7Ci0JCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KKwlpZiAocmItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkcHJpbnRrKCJjb3VudCA9ICVkXG4iLCByYi0+Y291bnQpOworCWlmIChyYi0+Y291bnQgPiAwKSB7CisJCWlmICh2aW5vX2lzX2NhcHR1cmluZyh2Y3MpKSB7CisJCQlkcHJpbnRrKCJidXN5LCBjYXB0dXJpbmdcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWRwcmludGsoImNvdW50ID0gJWRcbiIsIHJiLT5jb3VudCk7Ci0JCWlmIChyYi0+Y291bnQgPiAwKSB7Ci0JCQlpZiAodmlub19pc19jYXB0dXJpbmcodmNzKSkgewotCQkJCWRwcmludGsoImJ1c3ksIGNhcHR1cmluZ1xuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQotCQkJaWYgKHZpbm9fcXVldWVfaGFzX21hcHBlZF9idWZmZXJzKCZ2Y3MtPmZiX3F1ZXVlKSkgewotCQkJCWRwcmludGsoImJ1c3ksIGJ1ZmZlcnMgc3RpbGwgbWFwcGVkXG4iKTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfSBlbHNlIHsKLQkJCQl2Y3MtPnN0cmVhbWluZyA9IDA7Ci0JCQkJdmlub19xdWV1ZV9mcmVlKCZ2Y3MtPmZiX3F1ZXVlKTsKLQkJCQl2aW5vX3F1ZXVlX2luaXQoJnZjcy0+ZmJfcXVldWUsICZyYi0+Y291bnQpOwotCQkJfQorCQlpZiAodmlub19xdWV1ZV9oYXNfbWFwcGVkX2J1ZmZlcnMoJnZjcy0+ZmJfcXVldWUpKSB7CisJCQlkcHJpbnRrKCJidXN5LCBidWZmZXJzIHN0aWxsIG1hcHBlZFxuIik7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9IGVsc2UgewogCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCQkJdmlub19jYXB0dXJlX3N0b3AodmNzKTsKIAkJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7CisJCQl2aW5vX3F1ZXVlX2luaXQoJnZjcy0+ZmJfcXVldWUsICZyYi0+Y291bnQpOwogCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQl2Y3MtPnN0cmVhbWluZyA9IDA7CisJCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7CisJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNjA2LDE1NiArMzQzNCwxMzUgQEAKIAkJZmItPmlkLCBmYi0+c2l6ZSwgZmItPmRhdGFfc2l6ZSwgZmItPm9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5YnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0KLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAoYi0+aW5kZXggPj0gdmlub19xdWV1ZV9nZXRfbGVuZ3RoKCZ2Y3MtPmZiX3F1ZXVlKSkgewotCQkJZHByaW50aygiaW52YWxpZCBpbmRleCA9ICVkXG4iLAotCQkJICAgICAgIGItPmluZGV4KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZmIgPSB2aW5vX3F1ZXVlX2dldF9idWZmZXIoJnZjcy0+ZmJfcXVldWUsCi0JCQkJCSAgIGItPmluZGV4KTsKLQkJaWYgKGZiID09IE5VTEwpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2J1ZmZlcigpIGZhaWxlZCIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KKwlpZiAoYi0+aW5kZXggPj0gdmlub19xdWV1ZV9nZXRfbGVuZ3RoKCZ2Y3MtPmZiX3F1ZXVlKSkgeworCQlkcHJpbnRrKCJpbnZhbGlkIGluZGV4ID0gJWRcbiIsCisJCSAgICAgICBiLT5pbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWZiID0gdmlub19xdWV1ZV9nZXRfYnVmZmVyKCZ2Y3MtPmZiX3F1ZXVlLAorCQkJCSAgIGItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9idWZmZXIoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3FidWYoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgcmV0OworCiAJaWYgKHZjcy0+cmVhZGluZykKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoYi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKLQkJaW50IHJldDsKLQotCQkvLyBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlCi0JCWlmIChiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygidHlwZSBub3QgbW1hcFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZiID0gdmlub19jYXB0dXJlX2VucXVldWUodmNzLCBiLT5pbmRleCk7Ci0JCWlmIChmYiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JCWlmICh2Y3MtPnN0cmVhbWluZykgewotCQkJcmV0ID0gdmlub19jYXB0dXJlX25leHQodmNzLCAxKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKGItPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlmYiA9IHZpbm9fY2FwdHVyZV9lbnF1ZXVlKHZjcywgYi0+aW5kZXgpOworCWlmIChmYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKworCWlmICh2Y3MtPnN0cmVhbWluZykgeworCQlyZXQgPSB2aW5vX2NhcHR1cmVfbmV4dCh2Y3MsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZHFidWYoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpiLAotCQkJICAgdW5zaWduZWQgaW50IG5vbmJsb2NraW5nKQorc3RhdGljIGludCB2aW5vX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpiKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJdW5zaWduZWQgaW50IG5vbmJsb2NraW5nID0gZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0s7CisJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOworCXVuc2lnbmVkIGludCBpbmNvbWluZywgb3V0Z29pbmc7CisJaW50IGVycjsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JCXVuc2lnbmVkIGludCBpbmNvbWluZywgb3V0Z29pbmc7Ci0JCWludCBlcnI7CisJLyogVE9ETzogY2hlY2sgcXVldWUgdHlwZSAqLwogCi0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKKwllcnIgPSB2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygmdmNzLT5mYl9xdWV1ZSwgJmluY29taW5nKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2luY29taW5nKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWVyciA9IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmb3V0Z29pbmcpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkJZXJyID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2luY29taW5nKCkgZmFpbGVkXG4iKTsKKwlkcHJpbnRrKCJpbmNvbWluZyA9ICVkLCBvdXRnb2luZyA9ICVkXG4iLCBpbmNvbWluZywgb3V0Z29pbmcpOworCisJaWYgKG91dGdvaW5nID09IDApIHsKKwkJaWYgKGluY29taW5nID09IDApIHsKKwkJCWRwcmludGsoIm5vIGluY29taW5nIG9yIG91dGdvaW5nIGJ1ZmZlcnNcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJZXJyID0gdmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoJnZjcy0+ZmJfcXVldWUsICZvdXRnb2luZyk7Ci0JCWlmIChlcnIpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobm9uYmxvY2tpbmcpIHsKKwkJCWRwcmludGsoIm5vbi1ibG9ja2luZyBJL08gd2FzIHNlbGVjdGVkIGFuZCAiCisJCQkJInRoZXJlIGFyZSBubyBidWZmZXJzIHRvIGRlcXVldWVcbiIpOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQlkcHJpbnRrKCJpbmNvbWluZyA9ICVkLCBvdXRnb2luZyA9ICVkXG4iLCBpbmNvbWluZywgb3V0Z29pbmcpOwotCi0JCWlmIChvdXRnb2luZyA9PSAwKSB7Ci0JCQlpZiAoaW5jb21pbmcgPT0gMCkgewotCQkJCWRwcmludGsoIm5vIGluY29taW5nIG9yIG91dGdvaW5nIGJ1ZmZlcnNcbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJaWYgKG5vbmJsb2NraW5nKSB7Ci0JCQkJZHByaW50aygibm9uLWJsb2NraW5nIEkvTyB3YXMgc2VsZWN0ZWQgYW5kICIKLQkJCQkJInRoZXJlIGFyZSBubyBidWZmZXJzIHRvIGRlcXVldWVcbiIpOwotCQkJCXJldHVybiAtRUFHQUlOOwotCQkJfQotCisJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKKwkJaWYgKGVycikgewogCQkJZXJyID0gdmlub193YWl0X2Zvcl9mcmFtZSh2Y3MpOwogCQkJaWYgKGVycikgewotCQkJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCS8qIGludGVycnVwdGVkIG9yCi0JCQkJCSAqIG5vIGZyYW1lcyBjYXB0dXJlZCBiZWNhdXNlCi0JCQkJCSAqIG9mIGZyYW1lIHNraXBwaW5nICovCi0JCQkJCS8vIHZpbm9fY2FwdHVyZV9mYWlsZWQodmNzKTsKLQkJCQkJcmV0dXJuIC1FSU87Ci0JCQkJfQorCQkJCS8qIGludGVycnVwdGVkIG9yIG5vIGZyYW1lcyBjYXB0dXJlZCBiZWNhdXNlIG9mCisJCQkJICogZnJhbWUgc2tpcHBpbmcgKi8KKwkJCQkvKiB2aW5vX2NhcHR1cmVfZmFpbGVkKHZjcyk7ICovCisJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KLQotCQlmYiA9IHZpbm9fcXVldWVfcmVtb3ZlKCZ2Y3MtPmZiX3F1ZXVlLCAmYi0+aW5kZXgpOwotCQlpZiAoZmIgPT0gTlVMTCkgewotCQkJZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQllcnIgPSB2aW5vX2NoZWNrX2J1ZmZlcih2Y3MsIGZiKTsKLQotCQl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7Ci0KLQkJaWYgKGVycikKLQkJCXJldHVybiAtRUlPOwotCi0JCWJyZWFrOwogCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCisJZmIgPSB2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX3JlbW92ZSgpIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWVyciA9IHZpbm9fY2hlY2tfYnVmZmVyKHZjcywgZmIpOworCisJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOworCisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU87CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc3RyZWFtb24oc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQorc3RhdGljIGludCB2aW5vX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQllbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGludCBpbmNvbWluZzsKIAlpbnQgcmV0OwogCWlmICh2Y3MtPnJlYWRpbmcpCkBAIC0zNzkyLDggKzM1OTksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc3RyZWFtb2ZmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKK3N0YXRpYyBpbnQgdmlub19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCWVudW0gdjRsMl9idWZfdHlwZSBpKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaWYgKHZjcy0+cmVhZGluZykKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMzgwNiw5ICszNjE1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3F1ZXJ5Y3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcXVlcnljdHJsKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgZXJyID0gMDsKQEAgLTM4NTUsOSArMzY2NSwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2dfY3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBlcnIgPSAwOwpAQCAtMzg2Niw1NiArMzY3NywzOCBAQAogCiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOiB7Ci0JCXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgaW5keWNhbV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJZ290byBmb3VuZDE7CisJCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0KLWZvdW5kMToKLQkJaW5keWNhbV9jdHJsLnR5cGUgPSB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQotCQllcnIgPSBpMmNfY2FtZXJhX2NvbW1hbmQoREVDT0RFUl9JTkRZQ0FNX0dFVF9DT05UUk9MLAotCQkJCQkgJmluZHljYW1fY3RybCk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWNvbnRyb2wtPnZhbHVlID0gaW5keWNhbV9jdHJsLnZhbHVlOworCQllcnIgPSBjYW1lcmFfY2FsbChjb3JlLCBnX2N0cmwsIGNvbnRyb2wpOworCQlpZiAoZXJyKQorCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sIHNhYTcxOTFfY3RybDsKLQorCQllcnIgPSAtRUlOVkFMOwogCQlmb3IgKGkgPSAwOyBpIDwgVklOT19TQUE3MTkxX1Y0TDJfQ09OVFJPTF9DT1VOVDsgaSsrKSB7Ci0JCQlpZiAodmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0KLQkJCSAgICBjb250cm9sLT5pZCkgewotCQkJCWdvdG8gZm91bmQyOworCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCi1mb3VuZDI6Ci0JCXNhYTcxOTFfY3RybC50eXBlID0gdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ucmVzZXJ2ZWRbMF07Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX0NPTlRST0wsCi0JCQkJCSAgJnNhYTcxOTFfY3RybCk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJfQogCi0JCWNvbnRyb2wtPnZhbHVlID0gc2FhNzE5MV9jdHJsLnZhbHVlOworCQllcnIgPSBkZWNvZGVyX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKKwkJaWYgKGVycikKKwkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgpAQCAtMzkyOCw5ICszNzIxLDEwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19jdHJsKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY29udHJvbCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CkBAIC0zOTQ0LDY1ICszNzM4LDQzIEBACiAKIAlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAljYXNlIFZJTk9fSU5QVVRfRDE6IHsKLQkJc3RydWN0IGluZHljYW1fY29udHJvbCBpbmR5Y2FtX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fSU5EWUNBTV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlpZiAoKGNvbnRyb2wtPnZhbHVlID49Ci0JCQkJICAgICB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5taW5pbXVtKQotCQkJCSAgICAmJiAoY29udHJvbC0+dmFsdWUgPD0KLQkJCQkJdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uCi0JCQkJCW1heGltdW0pKSB7Ci0JCQkJCWdvdG8gZm91bmQxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVyciA9IC1FUkFOR0U7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQotZm91bmQxOgotCQlpbmR5Y2FtX2N0cmwudHlwZSA9IHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCQlpbmR5Y2FtX2N0cmwudmFsdWUgPSBjb250cm9sLT52YWx1ZTsKLQotCQllcnIgPSBpMmNfY2FtZXJhX2NvbW1hbmQoREVDT0RFUl9JTkRZQ0FNX1NFVF9DT05UUk9MLAotCQkJCQkgJmluZHljYW1fY3RybCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJaWYgKGNvbnRyb2wtPnZhbHVlIDwgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSB8fAorCQkgICAgY29udHJvbC0+dmFsdWUgPiB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5tYXhpbXVtKSB7CisJCQllcnIgPSAtRVJBTkdFOworCQkJZ290byBvdXQ7CisJCX0KKwkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgc19jdHJsLCBjb250cm9sKTsKIAkJaWYgKGVycikKIAkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJc3RydWN0IHNhYTcxOTFfY29udHJvbCBzYWE3MTkxX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlpZiAoKGNvbnRyb2wtPnZhbHVlID49Ci0JCQkJICAgICB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5taW5pbXVtKQotCQkJCSAgICAmJiAoY29udHJvbC0+dmFsdWUgPD0KLQkJCQkJdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uCi0JCQkJCW1heGltdW0pKSB7Ci0JCQkJCWdvdG8gZm91bmQyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVyciA9IC1FUkFOR0U7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KKwkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJaWYgKGNvbnRyb2wtPnZhbHVlIDwgdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSB8fAorCQkgICAgY29udHJvbC0+dmFsdWUgPiB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5tYXhpbXVtKSB7CisJCQllcnIgPSAtRVJBTkdFOworCQkJZ290byBvdXQ7CisJCX0KIAotZm91bmQyOgotCQlzYWE3MTkxX2N0cmwudHlwZSA9IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCQlzYWE3MTkxX2N0cmwudmFsdWUgPSBjb250cm9sLT52YWx1ZTsKLQotCQllcnIgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTCwKLQkJCQkJICAmc2FhNzE5MV9jdHJsKTsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKGNvcmUsIHNfY3RybCwgY29udHJvbCk7CiAJCWlmIChlcnIpCiAJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKQEAgLTQyMzMsMTE2ICs0MDA1LDkgQEAKIAkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogZXJyb3I6Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgbG9uZyB2aW5vX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotI2lmZGVmIFZJTk9fREVCVUcKLQlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7Ci0JY2FzZSAndic6Ci0JCWRwcmludGsoImlvY3RsKCk6IFY0TDEgdW5zdXBwb3J0ZWQgKDB4JTA4eClcbiIsIGNtZCk7Ci0JCWJyZWFrOwotCWNhc2UgJ1YnOgotCQlkcHJpbnRrKCJpb2N0bCgpOiBWNEwyICVzICgweCUwOHgpXG4iLAotCQkJdjRsMl9pb2N0bF9uYW1lc1tfSU9DX05SKGNtZCldLCBjbWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkcHJpbnRrKCJpb2N0bCgpOiB1bnN1cHBvcnRlZCBjb21tYW5kIDB4JTA4eFxuIiwgY21kKTsKLQl9Ci0jZW5kaWYKLQotCXN3aXRjaCAoY21kKSB7Ci0JLyogVjRMMiBpbnRlcmZhY2UgKi8KLQljYXNlIFZJRElPQ19RVUVSWUNBUDogewotCQl2aW5vX3Y0bDJfcXVlcnljYXAoYXJnKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1pbnB1dCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX2lucHV0KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDogewotCQlyZXR1cm4gdmlub192NGwyX3NfaW5wdXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19FTlVNU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZW51bXN0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnlzdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX1NURDogewotCQlyZXR1cm4gdmlub192NGwyX2dfc3RkKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19TVEQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX3N0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0VOVU1fRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZW51bV9mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19UUllfRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfdHJ5X2ZtdCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfRk1UOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX3NfZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfQ1JPUENBUDogewotCQlyZXR1cm4gdmlub192NGwyX2Nyb3BjYXAodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0NST1A6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX2Nyb3AodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX0NST1A6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2Nyb3AodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX1BBUk06IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX3Bhcm0odmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19TX1BBUk06IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX3Bhcm0odmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19SRVFCVUZTOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcmVxYnVmcyh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnlidWYodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcWJ1Zih2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0RRQlVGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZHFidWYodmNzLCBhcmcsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT046IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zdHJlYW1vbih2Y3MpOwotCX0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zdHJlYW1vZmYodmNzKTsKLQl9Ci0JY2FzZSBWSURJT0NfUVVFUllDVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfcXVlcnljdHJsKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19jdHJsKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19DVFJMOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19jdHJsKHZjcywgYXJnKTsKLQl9Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGxvbmcgdmlub19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC00MzUyLDcgKzQwMTcsNyBAQAogCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZjcy0+bXV0ZXgpKQogCQlyZXR1cm4gLUVJTlRSOwogCi0JcmV0ID0gdmlkZW9fdXNlcmNvcHkoZmlsZSwgY21kLCBhcmcsIHZpbm9fZG9faW9jdGwpOworCXJldCA9IHZpZGVvX2lvY3RsMihmaWxlLCBjbWQsIGFyZyk7CiAKIAltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwogCkBAIC00MzY0LDQ1ICs0MDI5LDc1IEBACiAvKiBfX2luaXRkYXRhICovCiBzdGF0aWMgaW50IHZpbm9faW5pdF9zdGFnZTsKIAorY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpbm9faW9jdGxfb3BzID0geworCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICAgPSB2aW5vX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwIAkgICAgID0gdmlub19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgCSAgICAgPSB2aW5vX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAJICAgICA9IHZpbm9fdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfcXVlcnljYXAgICAgCSAgICAgPSB2aW5vX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9pbnB1dCAgIAkgICAgID0gdmlub19lbnVtX2lucHV0LAorCS52aWRpb2NfZ19pbnB1dCAgICAgIAkgICAgID0gdmlub19nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgIAkgICAgID0gdmlub19zX2lucHV0LAorCS52aWRpb2NfZ19zdGQgCQkgICAgID0gdmlub19nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkIAkJICAgICA9IHZpbm9fc19zdGQsCisJLnZpZGlvY19xdWVyeXN0ZCAgICAgICAgICAgICA9IHZpbm9fcXVlcnlzdGQsCisJLnZpZGlvY19jcm9wY2FwICAgICAgCSAgICAgPSB2aW5vX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgICAgICAgCSAgICAgPSB2aW5vX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCAgICAgICAJICAgICA9IHZpbm9fZ19jcm9wLAorCS52aWRpb2Nfc19wYXJtIAkJICAgICA9IHZpbm9fc19wYXJtLAorCS52aWRpb2NfZ19wYXJtIAkJICAgICA9IHZpbm9fZ19wYXJtLAorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICAgPSB2aW5vX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgICA9IHZpbm9fcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgICAgICAgICA9IHZpbm9fcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgID0gdmlub19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAgICAgID0gdmlub19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgID0gdmlub19zdHJlYW1vZmYsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgICA9IHZpbm9fcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgICAgICAgICAgPSB2aW5vX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgICAgICAgID0gdmlub19zX2N0cmwsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZpbm9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gdmlub19vcGVuLAogCS5yZWxlYXNlCT0gdmlub19jbG9zZSwKLQkuaW9jdGwJCT0gdmlub19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSB2aW5vX2lvY3RsLAogCS5tbWFwCQk9IHZpbm9fbW1hcCwKIAkucG9sbAkJPSB2aW5vX3BvbGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2NGxfZGV2aWNlX3RlbXBsYXRlID0geworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKIAkubmFtZQkJPSAiTk9UIFNFVCIsCiAJLmZvcHMJCT0gJnZpbm9fZm9wcywKKwkuaW9jdGxfb3BzIAk9ICZ2aW5vX2lvY3RsX29wcywKKwkudHZub3JtcyAJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0sCiAJLm1pbm9yCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgdmlub19tb2R1bGVfY2xlYW51cChpbnQgc3RhZ2UpCiB7CiAJc3dpdGNoKHN0YWdlKSB7CisJY2FzZSAxMToKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnZkZXYpOworCQl2aW5vX2RydmRhdGEtPmIudmRldiA9IE5VTEw7CiAJY2FzZSAxMDoKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpOwotCQl2aW5vX2RydmRhdGEtPmIudjRsX2RldmljZSA9IE5VTEw7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KTsKKwkJdmlub19kcnZkYXRhLT5hLnZkZXYgPSBOVUxMOwogCWNhc2UgOToKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UpOwotCQl2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSA9IE5VTEw7CisJCWkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7CiAJY2FzZSA4OgotCQl2aW5vX2kyY19kZWxfYnVzKCk7Ci0JY2FzZSA3OgogCQlmcmVlX2lycShTR0lfVklOT19JUlEsIE5VTEwpOworCWNhc2UgNzoKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2KSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmIudmRldik7CisJCQl2aW5vX2RydmRhdGEtPmIudmRldiA9IE5VTEw7CisJCX0KIAljYXNlIDY6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmIudjRsX2RldmljZSkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpOwotCQkJdmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UgPSBOVUxMOworCQlpZiAodmlub19kcnZkYXRhLT5hLnZkZXYpIHsKKwkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KTsKKwkJCXZpbm9fZHJ2ZGF0YS0+YS52ZGV2ID0gTlVMTDsKIAkJfQogCWNhc2UgNToKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlKSB7Ci0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSk7Ci0JCQl2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSA9IE5VTEw7Ci0JCX0KLQljYXNlIDQ6CiAJCS8qIGFsbCBlbnRyaWVzIGluIGRtYV9jcHUgZHVtbXkgdGFibGUgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzICovCiAJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwKIAkJCQkgdmlub19kcnZkYXRhLT5kdW1teV9kZXNjX3RhYmxlLmRtYV9jcHVbMF0sCkBAIC00NDEyLDggKzQxMDcsMTAgQEAKIAkJCQkgICh2b2lkICopdmlub19kcnZkYXRhLT4KIAkJCQkgIGR1bW15X2Rlc2NfdGFibGUuZG1hX2NwdSwKIAkJCQkgIHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWEpOwotCWNhc2UgMzoKKwljYXNlIDQ6CiAJCWZyZWVfcGFnZSh2aW5vX2RydmRhdGEtPmR1bW15X3BhZ2UpOworCWNhc2UgMzoKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigmdmlub19kcnZkYXRhLT52NGwyX2Rldik7CiAJY2FzZSAyOgogCQlrZnJlZSh2aW5vX2RydmRhdGEpOwogCWNhc2UgMToKQEAgLTQ0NjgsNiArNDE2NSw3IEBACiBzdGF0aWMgaW50IHZpbm9faW5pdCh2b2lkKQogewogCWRtYV9hZGRyX3QgZG1hX2R1bW15X2FkZHJlc3M7CisJaW50IGVycjsKIAlpbnQgaTsKIAogCXZpbm9fZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aW5vX3NldHRpbmdzKSwgR0ZQX0tFUk5FTCk7CkBAIC00NDc2LDYgKzQxNzQsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOworCXN0cmxjcHkodmlub19kcnZkYXRhLT52NGwyX2Rldi5uYW1lLCAidmlubyIsCisJCQlzaXplb2Yodmlub19kcnZkYXRhLT52NGwyX2Rldi5uYW1lKSk7CisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdmlub19pbml0X3N0YWdlKys7CiAKIAkvKiBjcmVhdGUgYSBkdW1teSBkbWEgZGVzY3JpcHRvciAqLwogCXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfcGFnZSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CkBAIC00NTQyLDI1ICs0MjQ2LDI3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnZjcy0+ZmJfcXVldWUucXVldWVfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmNzLT5mYl9xdWV1ZS5mcmFtZV93YWl0X3F1ZXVlKTsKIAotCXZjcy0+djRsX2RldmljZSA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmICghdmNzLT52NGxfZGV2aWNlKSB7CisJdmNzLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2Y3MtPnZkZXYpIHsKIAkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQltZW1jcHkodmNzLT52NGxfZGV2aWNlLCAmdjRsX2RldmljZV90ZW1wbGF0ZSwKKwltZW1jcHkodmNzLT52ZGV2LCAmdmRldl90ZW1wbGF0ZSwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKLQlzdHJjcHkodmNzLT52NGxfZGV2aWNlLT5uYW1lLCBuYW1lKTsKLQl2Y3MtPnY0bF9kZXZpY2UtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwlzdHJjcHkodmNzLT52ZGV2LT5uYW1lLCBuYW1lKTsKKwl2Y3MtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2Y3MtPnZkZXYtPnY0bDJfZGV2ID0gJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXY7CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSh2Y3MtPnY0bF9kZXZpY2UsIHZjcyk7CisJdmlkZW9fc2V0X2RydmRhdGEodmNzLT52ZGV2LCB2Y3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHZpbm9fbW9kdWxlX2luaXQodm9pZCkKIHsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyW10gPSB7IDAsIEkyQ19DTElFTlRfRU5EIH07CiAJaW50IHJldDsKIAogCXByaW50ayhLRVJOX0lORk8gIlNHSSBWSU5PIGRyaXZlciB2ZXJzaW9uICVzXG4iLApAQCAtNDU4MCwxMiArNDI4NiwxMiBAQAogCXNwaW5fbG9ja19pbml0KCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2spOwogCiAJcmV0ID0gdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3MoJnZpbm9fZHJ2ZGF0YS0+YSwgVklOT19DSEFOTkVMX0EsCi0JCQkJICAgIHZpbm9fdjRsX2RldmljZV9uYW1lX2EpOworCQkJCSAgICB2aW5vX3ZkZXZfbmFtZV9hKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3MoJnZpbm9fZHJ2ZGF0YS0+YiwgVklOT19DSEFOTkVMX0IsCi0JCQkJICAgIHZpbm9fdjRsX2RldmljZV9uYW1lX2IpOworCQkJCSAgICB2aW5vX3ZkZXZfbmFtZV9iKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC00NjAxLDE1ICs0MzA3LDE2IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlub19pMmNfYWRkX2J1cygpOworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIlZJTk8gSTJDIGJ1cyByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlpMmNfc2V0X2FkYXBkYXRhKCZ2aW5vX2kyY19hZGFwdGVyLCAmdmlub19kcnZkYXRhLT52NGwyX2Rldik7CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UsCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2LAogCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIGNoYW5uZWwgQSBWaWRlbzRMaW51eC1kZXZpY2UgIgpAQCAtNDYxOSw3ICs0MzI2LDcgQEAKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UsCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2LAogCQkJCSAgICBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIGNoYW5uZWwgQiBWaWRlbzRMaW51eC1kZXZpY2UgIgpAQCAtNDYyOSwxMCArNDMzNiwxMiBAQAogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAotI2lmZGVmIE1PRFVMRQotCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTkxIik7Ci0JcmVxdWVzdF9tb2R1bGUoImluZHljYW0iKTsKLSNlbmRpZgorCWFkZHJbMF0gPSAweDQ1OworCXZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ2aW5vX2kyY19hZGFwdGVyLAorCQkJInNhYTcxOTEiLCAic2FhNzE5MSIsIGFkZHIpOworCWFkZHJbMF0gPSAweDJiOworCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnZpbm9faTJjX2FkYXB0ZXIsCisJCQkiaW5keWNhbSIsICJpbmR5Y2FtIiwgYWRkcik7CiAKIAlkcHJpbnRrKCJpbml0IGNvbXBsZXRlIVxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggODFkNWFhNS4uZmJmZWZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTI4LDE3ICsyOCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlICJmb250LmgiCiAKICNkZWZpbmUgVklWSV9NT0RVTEVfTkFNRSAidml2aSIKIApAQCAtNDcsMTggKzQ0LDMyIEBACiAjZGVmaW5lIFdBS0VfREVOT01JTkFUT1IgMTAwMQogI2RlZmluZSBCVUZGRVJfVElNRU9VVCAgICAgbXNlY3NfdG9famlmZmllcyg1MDApICAvKiAwLjUgc2Vjb25kcyAqLwogCi0jaW5jbHVkZSAiZm9udC5oIgotCiAjZGVmaW5lIFZJVklfTUFKT1JfVkVSU0lPTiAwCi0jZGVmaW5lIFZJVklfTUlOT1JfVkVSU0lPTiA1CisjZGVmaW5lIFZJVklfTUlOT1JfVkVSU0lPTiA2CiAjZGVmaW5lIFZJVklfUkVMRUFTRSAwCiAjZGVmaW5lIFZJVklfVkVSU0lPTiBcCiAJS0VSTkVMX1ZFUlNJT04oVklWSV9NQUpPUl9WRVJTSU9OLCBWSVZJX01JTk9SX1ZFUlNJT04sIFZJVklfUkVMRUFTRSkKIAotLyogRGVjbGFyZSBzdGF0aWMgdmFycyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBwYXJhbWV0ZXJzICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OwkvKiBWaWRlbyBtZW1vcnkgbGltaXQsIGluIE1iICovCi1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CQkvKiAvZGV2L3ZpZGVvTiwgLTEgZm9yIGF1dG9kZXRlY3QgKi8KLXN0YXRpYyBpbnQgbl9kZXZzID0gMTsJCQkvKiBOdW1iZXIgb2YgdmlydHVhbCBkZXZpY2VzICovCitNT0RVTEVfREVTQ1JJUFRJT04oIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIik7CitNT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIsIFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0YXRpYyB1bnNpZ25lZCB2aWRlb19uciA9IC0xOworbW9kdWxlX3BhcmFtKHZpZGVvX25yLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkZW9fbnIsICJ2aWRlb1ggc3RhcnQgbnVtYmVyLCAtMSBpcyBhdXRvZGV0ZWN0Iik7CisKK3N0YXRpYyB1bnNpZ25lZCBuX2RldnMgPSAxOworbW9kdWxlX3BhcmFtKG5fZGV2cywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5fZGV2cywgIm51bWJlciBvZiB2aWRlbyBkZXZpY2VzIHRvIGNyZWF0ZSIpOworCitzdGF0aWMgdW5zaWduZWQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkX2xpbWl0ID0gMTY7Cittb2R1bGVfcGFyYW0odmlkX2xpbWl0LCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7CisKIAogLyogc3VwcG9ydGVkIGNvbnRyb2xzICovCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHZpdmlfcWN0cmxbXSA9IHsKQEAgLTY5LDcgKzgwLDcgQEAKIAkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKIAkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCiAJCS5kZWZhdWx0X3ZhbHVlID0gNjU1MzUsCi0JCS5mbGFncyAgICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTc5LDcgKzkwLDcgQEAKIAkJLm1heGltdW0gICAgICAgPSAyNTUsCiAJCS5zdGVwICAgICAgICAgID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAxMjcsCi0JCS5mbGFncyAgICAgICAgID0gMCwKKwkJLmZsYWdzICAgICAgICAgPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSwgewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC04OCw3ICs5OSw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gMjU1LAogCQkuc3RlcCAgICAgICAgICA9IDB4MSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAweDEwLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9TQVRVUkFUSU9OLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC05Nyw3ICsxMDgsNyBAQAogCQkubWF4aW11bSAgICAgICA9IDI1NSwKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9IVUUsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKQEAgLTEwNiwxNyArMTE3LDEyIEBACiAJCS5tYXhpbXVtICAgICAgID0gMTI3LAogCQkuc3RlcCAgICAgICAgICA9IDB4MSwKIAkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0KIH07CiAKLXN0YXRpYyBpbnQgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml2aV9xY3RybCldOwotCi0jZGVmaW5lIGRwcmludGsoZGV2LCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmIChkZXYtPnZmZC0+ZGVidWcgPj0gKGxldmVsKSkJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6ICIgZm10ICwgIyMgYXJnKTsJXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsoZGV2LCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwl2NGwyX2RiZyhsZXZlbCwgZGVidWcsICZkZXYtPnY0bDJfZGV2LCBmbXQsICMjIGFyZykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJQmFzaWMgc3RydWN0dXJlcwpAQCAtMjA2LDYgKzIxMiw3IEBACiAKIHN0cnVjdCB2aXZpX2RldiB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgdml2aV9kZXZsaXN0OworCXN0cnVjdCB2NGwyX2RldmljZSAJICAgdjRsMl9kZXY7CiAKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCSAgIG11dGV4OwpAQCAtMjIzLDYgKzIzMCwxMiBAQAogCWNoYXIgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdHJbMTNdOwogCiAJaW50CQkJICAgbXZfY291bnQ7CS8qIENvbnRyb2xzIGJhcnMgbW92ZW1lbnQgKi8KKworCS8qIElucHV0IE51bWJlciAqLworCWludAkJCSAgIGlucHV0OworCisJLyogQ29udHJvbCAncmVnaXN0ZXJzJyAqLworCWludCAJCQkgICBxY3RsX3JlZ3NbQVJSQVlfU0laRSh2aXZpX3FjdHJsKV07CiB9OwogCiBzdHJ1Y3Qgdml2aV9maCB7CkBAIC0yMzUsNiArMjQ4LDcgQEAKIAogCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgIHR5cGU7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgYmFyc1s4XVszXTsKKwlpbnQJCQkgICBpbnB1dDsgCS8qIElucHV0IE51bWJlciBvbiBiYXJzICovCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1NCwxOCArMjY4LDcyIEBACiAJQkxBQ0ssCiB9OwogCi1zdGF0aWMgdTggYmFyc1s4XVszXSA9IHsKIAkvKiBSICAgRyAgIEIgKi8KLQl7MjA0LCAyMDQsIDIwNH0sICAvKiB3aGl0ZSAqLwotCXsyMDgsIDIwOCwgICAwfSwgIC8qIGFtYmFyICovCi0JeyAgMCwgMjA2LCAyMDZ9LCAgLyogY3lhbiAqLwotCXsgIDAsIDIzOSwgICAwfSwgIC8qIGdyZWVuICovCi0JezIzOSwgICAwLCAyMzl9LCAgLyogbWFnZW50YSAqLwotCXsyMDUsICAgMCwgICAwfSwgIC8qIHJlZCAqLwotCXsgIDAsICAgMCwgMjU1fSwgIC8qIGJsdWUgKi8KLQl7ICAwLCAgIDAsICAgMH0sICAvKiBibGFjayAqLworI2RlZmluZSBDT0xPUl9XSElURQl7MjA0LCAyMDQsIDIwNH0KKyNkZWZpbmUgQ09MT1JfQU1CQVIJezIwOCwgMjA4LCAgIDB9CisjZGVmaW5lIENPTE9SX0NJQU4JeyAgMCwgMjA2LCAyMDZ9CisjZGVmaW5lCUNPTE9SX0dSRUVOCXsgIDAsIDIzOSwgICAwfQorI2RlZmluZSBDT0xPUl9NQUdFTlRBCXsyMzksICAgMCwgMjM5fQorI2RlZmluZSBDT0xPUl9SRUQJezIwNSwgICAwLCAgIDB9CisjZGVmaW5lIENPTE9SX0JMVUUJeyAgMCwgICAwLCAyNTV9CisjZGVmaW5lIENPTE9SX0JMQUNLCXsgIDAsICAgMCwgICAwfQorCitzdHJ1Y3QgYmFyX3N0ZCB7CisJdTggYmFyWzhdWzNdOwogfTsKIAorLyogTWF4aW11bSBudW1iZXIgb2YgYmFycyBhcmUgMTAgLSBvdGhlcndpc2UsIHRoZSBpbnB1dCBwcmludCBjb2RlCisgICBzaG91bGQgYmUgbW9kaWZpZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgYmFyX3N0ZCBiYXJzW10gPSB7CisJewkvKiBTdGFuZGFyZCBJVFUtUiBjb2xvciBiYXIgc2VxdWVuY2UgKi8KKwkJeworCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9BTUJBUiwKKwkJCUNPTE9SX0NJQU4sCisJCQlDT0xPUl9HUkVFTiwKKwkJCUNPTE9SX01BR0VOVEEsCisJCQlDT0xPUl9SRUQsCisJCQlDT0xPUl9CTFVFLAorCQkJQ09MT1JfQkxBQ0ssCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQ0lBTiwKKwkJCUNPTE9SX0JMQUNLLAorCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9DSUFOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0NJQU4sCisJCX0KKwl9LCB7CisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfR1JFRU4sCisJCX0KKwl9LAorfTsKKworI2RlZmluZSBOVU1fSU5QVVRTIEFSUkFZX1NJWkUoYmFycykKKwogI2RlZmluZSBUT19ZKHIsIGcsIGIpIFwKIAkoKCgxNjgyOSAqIHIgKyAzMzAzOSAqIGcgKyA2NDE2ICogYiAgKyAzMjc2OCkgPj4gMTYpICsgMTYpCiAvKiBSR0IgdG8gIFYoQ3IpIENvbG9yIHRyYW5zZm9ybSAqLwpAQCAtMjc1LDkgKzM0MywxMCBAQAogI2RlZmluZSBUT19VKHIsIGcsIGIpIFwKIAkoKCgtOTcxNCAqIHIgLSAxOTA3MCAqIGcgKyAyODc4NCAqIGIgKyAzMjc2OCkgPj4gMTYpICsgMTI4KQogCi0jZGVmaW5lIFRTVEFNUF9NSU5fWSAyNAotI2RlZmluZSBUU1RBTVBfTUFYX1kgVFNUQU1QX01JTl9ZKzE1Ci0jZGVmaW5lIFRTVEFNUF9NSU5fWCA2NAorI2RlZmluZSBUU1RBTVBfTUlOX1kJMjQKKyNkZWZpbmUgVFNUQU1QX01BWF9ZCShUU1RBTVBfTUlOX1kgKyAxNSkKKyNkZWZpbmUgVFNUQU1QX0lOUFVUX1gJMTAKKyNkZWZpbmUgVFNUQU1QX01JTl9YCSg1NCArIFRTVEFNUF9JTlBVVF9YKQogCiBzdGF0aWMgdm9pZCBnZW5fdHdvcGl4KHN0cnVjdCB2aXZpX2ZoICpmaCwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY29sb3Jwb3MpCiB7CkBAIC0zOTIsOSArNDYxLDI5IEBACiAJCXBvcyArPSA0OyAvKiBvbmx5IDE2IGJwcCBzdXBwb3J0ZWQgZm9yIG5vdyAqLwogCX0KIAotCS8qIENoZWNrcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBzaG93IHRpbWVzdGFtcCAqLworCS8qIFByaW50cyBpbnB1dCBlbnRyeSBudW1iZXIgKi8KKworCS8qIENoZWNrcyBpZiBpdCBpcyBwb3NzaWJsZSB0byBpbnB1dCBudW1iZXIgKi8KIAlpZiAoVFNUQU1QX01BWF9ZID49IGhtYXgpCiAJCWdvdG8gZW5kOworCisJaWYgKFRTVEFNUF9JTlBVVF9YICsgc3RybGVuKHRpbWVzdHIpID49IHdtYXgpCisJCWdvdG8gZW5kOworCisJaWYgKGxpbmUgPj0gVFNUQU1QX01JTl9ZICYmIGxpbmUgPD0gVFNUQU1QX01BWF9ZKSB7CisJCWNociA9IHJvbTh4MTZfYml0c1tmaC0+aW5wdXQgKiAxNiArIGxpbmUgLSBUU1RBTVBfTUlOX1ldOworCQlwb3MgPSBUU1RBTVBfSU5QVVRfWDsKKwkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQkJLyogRHJhdyB3aGl0ZSBmb250IG9uIGJsYWNrIGJhY2tncm91bmQgKi8KKwkJCWlmIChjaHIgJiAxIDw8ICg3IC0gaSkpCisJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIFdISVRFKTsKKwkJCWVsc2UKKwkJCQlnZW5fdHdvcGl4KGZoLCBiYXNlcCArIHBvcywgQkxBQ0spOworCQkJcG9zICs9IDI7CisJCX0KKwl9CisKKwkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KIAlpZiAoVFNUQU1QX01JTl9YICsgc3RybGVuKHRpbWVzdHIpID49IHdtYXgpCiAJCWdvdG8gZW5kOwogCkBAIC01NzcsNyArNjY2LDcgQEAKIAlkbWFfcS0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHZpdmlfdGhyZWFkLCBmaCwgInZpdmkiKTsKIAogCWlmIChJU19FUlIoZG1hX3EtPmt0aHJlYWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidml2aToga2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAia2VybmVsX3RocmVhZCgpIGZhaWxlZFxuIik7CiAJCXJldHVybiBQVFJfRVJSKGRtYV9xLT5rdGhyZWFkKTsKIAl9CiAJLyogV2FrZXMgdGhyZWFkICovCkBAIC03MjAsOCArODA5LDEyIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAgKmZoICA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAidml2aSIpOwogCXN0cmNweShjYXAtPmNhcmQsICJ2aXZpIik7CisJc3RybGNweShjYXAtPmJ1c19pbmZvLCBkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT52ZXJzaW9uID0gVklWSV9WRVJTSU9OOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0JVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCQkJVjRMMl9DQVBfU1RSRUFNSU5HICAgICB8CkBAIC04MDcsMzggKzkwMCwxOSBAQAogCXJldHVybiAwOwogfQogCi0vKkZJWE1FOiBUaGlzIHNlZW1zIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIGF0IHZpZGVvZGV2MiAqLwotc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorLyogcHJlY2FsY3VsYXRlIGNvbG9yIGJhciB2YWx1ZXMgdG8gc3BlZWQgdXAgcmVuZGVyaW5nICovCitzdGF0aWMgdm9pZCBwcmVjYWxjdWxhdGVfYmFycyhzdHJ1Y3Qgdml2aV9maCAqZmgpCiB7Ci0Jc3RydWN0IHZpdmlfZmggICpmaCA9IHByaXY7Ci0Jc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAl1bnNpZ25lZCBjaGFyIHIsIGcsIGI7CiAJaW50IGssIGlzX3l1djsKIAotCWludCByZXQgPSB2aWRpb2NfdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIChyZXQpOworCWZoLT5pbnB1dCA9IGRldi0+aW5wdXQ7CiAKLQltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKLQotCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKLQkJZHByaW50ayhmaC0+ZGV2LCAxLCAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZoLT5mbXQgICAgICAgICAgID0gZ2V0X2Zvcm1hdChmKTsKLQlmaC0+d2lkdGggICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7Ci0JZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKLQlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7Ci0JZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOwotCi0JLyogcHJlY2FsY3VsYXRlIGNvbG9yIGJhciB2YWx1ZXMgdG8gc3BlZWQgdXAgcmVuZGVyaW5nICovCiAJZm9yIChrID0gMDsgayA8IDg7IGsrKykgewotCQlyID0gYmFyc1trXVswXTsKLQkJZyA9IGJhcnNba11bMV07Ci0JCWIgPSBiYXJzW2tdWzJdOworCQlyID0gYmFyc1tmaC0+aW5wdXRdLmJhcltrXVswXTsKKwkJZyA9IGJhcnNbZmgtPmlucHV0XS5iYXJba11bMV07CisJCWIgPSBiYXJzW2ZoLT5pbnB1dF0uYmFyW2tdWzJdOwogCQlpc195dXYgPSAwOwogCiAJCXN3aXRjaCAoZmgtPmZtdC0+Zm91cmNjKSB7CkBAIC04NzEsMTEgKzk0NSw0MCBAQAogCQl9CiAJfQogCit9CisKKy8qRklYTUU6IFRoaXMgc2VlbXMgdG8gYmUgZ2VuZXJpYyBlbm91Z2ggdG8gYmUgYXQgdmlkZW9kZXYyICovCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZiX3ZpZHE7CisKKwlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZxLT52Yl9sb2NrKTsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKKwkJZHByaW50ayhmaC0+ZGV2LCAxLCAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWZoLT5mbXQgICAgICAgICAgID0gZ2V0X2Zvcm1hdChmKTsKKwlmaC0+d2lkdGggICAgICAgICA9IGYtPmZtdC5waXgud2lkdGg7CisJZmgtPmhlaWdodCAgICAgICAgPSBmLT5mbXQucGl4LmhlaWdodDsKKwlmaC0+dmJfdmlkcS5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJZmgtPnR5cGUgICAgICAgICAgPSBmLT50eXBlOworCisJcHJlY2FsY3VsYXRlX2JhcnMoZmgpOworCiAJcmV0ID0gMDsKIG91dDoKIAltdXRleF91bmxvY2soJnEtPnZiX2xvY2spOwogCi0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC05NTAsMjcgKzEwNTMsMzYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKIHsKLQlpZiAoaW5wLT5pbmRleCAhPSAwKQorCWlmIChpbnAtPmluZGV4ID49IE5VTV9JTlBVVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlpbnAtPnN0ZCA9IFY0TDJfU1REXzUyNV82MDsKLQlzdHJjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIik7CisJc3ByaW50ZihpbnAtPm5hbWUsICJDYW1lcmEgJXUiLCBpbnAtPmluZGV4KTsKIAogCXJldHVybiAoMCk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKLQkqaSA9IDA7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwkqaSA9IGRldi0+aW5wdXQ7CiAKIAlyZXR1cm4gKDApOwogfQogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgPiAwKQorCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGkgPj0gTlVNX0lOUFVUUykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkZXYtPmlucHV0ID0gaTsKKwlwcmVjYWxjdWxhdGVfYmFycyhmaCk7CisKIAlyZXR1cm4gKDApOwogfQogCkBAIC05OTMsMTIgKzExMDUsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKIAkJaWYgKGN0cmwtPmlkID09IHZpdmlfcWN0cmxbaV0uaWQpIHsKLQkJCWN0cmwtPnZhbHVlID0gcWN0bF9yZWdzW2ldOwotCQkJcmV0dXJuICgwKTsKKwkJCWN0cmwtPnZhbHVlID0gZGV2LT5xY3RsX3JlZ3NbaV07CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDA2LDE2ICsxMTIwLDE4IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdmlfcWN0cmwpOyBpKyspCiAJCWlmIChjdHJsLT5pZCA9PSB2aXZpX3FjdHJsW2ldLmlkKSB7Ci0JCQlpZiAoY3RybC0+dmFsdWUgPCB2aXZpX3FjdHJsW2ldLm1pbmltdW0KLQkJCSAgICB8fCBjdHJsLT52YWx1ZSA+IHZpdmlfcWN0cmxbaV0ubWF4aW11bSkgewotCQkJCQlyZXR1cm4gKC1FUkFOR0UpOwotCQkJCX0KLQkJCXFjdGxfcmVnc1tpXSA9IGN0cmwtPnZhbHVlOwotCQkJcmV0dXJuICgwKTsKKwkJCWlmIChjdHJsLT52YWx1ZSA8IHZpdmlfcWN0cmxbaV0ubWluaW11bSB8fAorCQkJICAgIGN0cmwtPnZhbHVlID4gdml2aV9xY3RybFtpXS5tYXhpbXVtKSB7CisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCQl9CisJCQlkZXYtPnFjdGxfcmVnc1tpXSA9IGN0cmwtPnZhbHVlOworCQkJcmV0dXJuIDA7CiAJCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTEwMjYsMzIgKzExNDIsMjAgQEAKIAogc3RhdGljIGludCB2aXZpX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IHZpdmlfZGV2ICpkZXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXN0cnVjdCB2aXZpX2ZoICpmaCA9IE5VTEw7Ci0JaW50IGk7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAidml2aTogb3BlbiBjYWxsZWQgKG1pbm9yPSVkKVxuIiwgbWlub3IpOwotCi0JbG9ja19rZXJuZWwoKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnZpdmlfZGV2bGlzdCwgdml2aV9kZXZsaXN0KQotCQlpZiAoZGV2LT52ZmQtPm1pbm9yID09IG1pbm9yKQotCQkJZ290byBmb3VuZDsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIC1FTk9ERVY7Ci0KLWZvdW5kOgogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCWRldi0+dXNlcnMrKzsKIAogCWlmIChkZXYtPnVzZXJzID4gMSkgewogCQlkZXYtPnVzZXJzLS07Ci0JCXJldHZhbCA9IC1FQlVTWTsKLQkJZ290byB1bmxvY2s7CisJCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JZHByaW50ayhkZXYsIDEsICJvcGVuIG1pbm9yPSVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsIG1pbm9yLAorCWRwcmludGsoZGV2LCAxLCAib3BlbiAvZGV2L3ZpZGVvJWQgdHlwZT0lcyB1c2Vycz0lZFxuIiwgZGV2LT52ZmQtPm51bSwKIAkJdjRsMl90eXBlX25hbWVzW1Y0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV0sIGRldi0+dXNlcnMpOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KQEAgLTEwNTksMTQgKzExNjMsMTEgQEAKIAlpZiAoTlVMTCA9PSBmaCkgewogCQlkZXYtPnVzZXJzLS07CiAJCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5sb2NrOwogCX0KLXVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCWlmIChyZXR2YWwpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCisJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLQl9CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CkBAIC0xMDc2LDEwICsxMTc3LDYgQEAKIAlmaC0+d2lkdGggICAgPSA2NDA7CiAJZmgtPmhlaWdodCAgID0gNDgwOwogCi0JLyogUHV0IGFsbCBjb250cm9scyBhdCBhIHNhbmUgc3RhdGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQotCQlxY3RsX3JlZ3NbaV0gPSB2aXZpX3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7Ci0KIAkvKiBSZXNldHMgZnJhbWUgY291bnRlcnMgKi8KIAlkZXYtPmggPSAwOwogCWRldi0+bSA9IDA7CkBAIC0xMDk1LDcgKzExOTIsNiBAQAogCQkJc2l6ZW9mKHN0cnVjdCB2aXZpX2J1ZmZlciksIGZoKTsKIAogCXZpdmlfc3RhcnRfdGhyZWFkKGZoKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNTEsMzIgKzEyNDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpdmlfcmVsZWFzZSh2b2lkKQotewotCXN0cnVjdCB2aXZpX2RldiAqZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnZpdmlfZGV2bGlzdCkpIHsKLQkJbGlzdCA9IHZpdmlfZGV2bGlzdC5uZXh0OwotCQlsaXN0X2RlbChsaXN0KTsKLQkJZGV2ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgdml2aV9kZXYsIHZpdmlfZGV2bGlzdCk7Ci0KLQkJaWYgKC0xICE9IGRldi0+dmZkLT5taW5vcikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVucmVnaXN0ZXJpbmcgL2Rldi92aWRlbyVkXG4iLAotCQkJCVZJVklfTU9EVUxFX05BTUUsIGRldi0+dmZkLT5udW0pOwotCQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmQpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbGVhc2luZyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQkJVklWSV9NT0RVTEVfTkFNRSwgZGV2LT52ZmQtPm51bSk7Ci0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZmZCk7Ci0JCX0KLQotCQlrZnJlZShkZXYpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpdmlfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHZpdmlfZmggICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTEyMzksODcgKzEzMDksMTMwIEBACiAJLnR2bm9ybXMgICAgICAgICAgICAgID0gVjRMMl9TVERfNTI1XzYwLAogCS5jdXJyZW50X25vcm0gICAgICAgICA9IFY0TDJfU1REX05UU0NfTSwKIH07CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJSW5pdGlhbGl6YXRpb24gYW5kIG1vZHVsZSBzdHVmZgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIGludCB2aXZpX3JlbGVhc2Uodm9pZCkKK3sKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ2aXZpX2Rldmxpc3QpKSB7CisJCWxpc3QgPSB2aXZpX2Rldmxpc3QubmV4dDsKKwkJbGlzdF9kZWwobGlzdCk7CisJCWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpdmlfZGV2LCB2aXZpX2Rldmxpc3QpOworCisJCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgInVucmVnaXN0ZXJpbmcgL2Rldi92aWRlbyVkXG4iLAorCQkJZGV2LT52ZmQtPm51bSk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkKTsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJCWtmcmVlKGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZpdmlfY3JlYXRlX2luc3RhbmNlKGludCBpbnN0KQoreworCXN0cnVjdCB2aXZpX2RldiAqZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlpbnQgcmV0LCBpOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNucHJpbnRmKGRldi0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKGRldi0+djRsMl9kZXYubmFtZSksCisJCQkiJXMtJTAzZCIsIFZJVklfTU9EVUxFX05BTUUsIGluc3QpOworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfZGV2OworCisJLyogaW5pdCB2aWRlbyBkbWEgcXVldWVzICovCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmlkcS53cSk7CisKKwkvKiBpbml0aWFsaXplIGxvY2tzICovCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOworCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOworCisJcmV0ID0gLUVOT01FTTsKKwl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXZmZCkKKwkJZ290byB1bnJlZ19kZXY7CisKKwkqdmZkID0gdml2aV90ZW1wbGF0ZTsKKworCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byByZWxfdmRldjsKKworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgZGV2KTsKKworCS8qIFNldCBhbGwgY29udHJvbHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQorCQlkZXYtPnFjdGxfcmVnc1tpXSA9IHZpdmlfcWN0cmxbaV0uZGVmYXVsdF92YWx1ZTsKKworCS8qIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmluZSwgbGV0J3MgYWRkIGl0IHRvIGRldmljZSBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmZGV2LT52aXZpX2Rldmxpc3QsICZ2aXZpX2Rldmxpc3QpOworCisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICglaSkiLAorCQkJdml2aV90ZW1wbGF0ZS5uYW1lLCB2ZmQtPm51bSk7CisKKwlpZiAodmlkZW9fbnIgPj0gMCkKKwkJdmlkZW9fbnIrKzsKKworCWRldi0+dmZkID0gdmZkOworCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgIlY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLAorCQkJdmZkLT5udW0pOworCXJldHVybiAwOworCityZWxfdmRldjoKKwl2aWRlb19kZXZpY2VfcmVsZWFzZSh2ZmQpOwordW5yZWdfZGV2OgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworZnJlZV9kZXY6CisJa2ZyZWUoZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBUaGlzIHJvdXRpbmUgYWxsb2NhdGVzIGZyb20gMSB0byBuX2RldnMgdmlydHVhbCBkcml2ZXJzLgogCiAgICBUaGUgcmVhbCBtYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGRyaXZlcnMgd2lsbCBkZXBlbmQgb24gaG93IG1hbnkgZHJpdmVycwogICAgd2lsbCBzdWNjZWVkLiBUaGlzIGlzIGxpbWl0ZWQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXMgdGhhdAotICAgdmlkZW9kZXYgc3VwcG9ydHMuIFNpbmNlIHRoZXJlIGFyZSA2NCBtaW5vcnMgZm9yIHZpZGVvIGdyYWJiZXJzLCB0aGlzIGlzCi0gICBjdXJyZW50bHkgdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gbGltaXQuIEhvd2V2ZXIsIGEgZnVydGhlciBsaW1pdCBkb2VzCi0gICBleGlzdCBhdCB2aWRlb2RldiB0aGF0IGZvcmJpZHMgYW55IGRyaXZlciB0byByZWdpc3RlciBtb3JlIHRoYW4gMzIgdmlkZW8KLSAgIGdyYWJiZXJzLgorICAgdmlkZW9kZXYgc3VwcG9ydHMsIHdoaWNoIGlzIGVxdWFsIHRvIFZJREVPX05VTV9ERVZJQ0VTLgogICovCiBzdGF0aWMgaW50IF9faW5pdCB2aXZpX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT01FTSwgaTsKLQlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJldCA9IDAsIGk7CiAKIAlpZiAobl9kZXZzIDw9IDApCiAJCW5fZGV2cyA9IDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbl9kZXZzOyBpKyspIHsKLQkJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCQlpZiAoIWRldikKLQkJCWJyZWFrOwotCi0JCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLwotCQlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+dmlkcS53cSk7Ci0KLQkJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLwotCQlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7Ci0JCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwotCi0JCXZmZCA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCQlpZiAoIXZmZCkgewotCQkJa2ZyZWUoZGV2KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJKnZmZCA9IHZpdmlfdGVtcGxhdGU7Ci0KLQkJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOwotCQlpZiAocmV0IDwgMCkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKLQkJCWtmcmVlKGRldik7Ci0KLQkJCS8qIElmIHNvbWUgcmVnaXN0ZXJzIHN1Y2NlZWRlZCwga2VlcCBkcml2ZXIgKi8KKwkJcmV0ID0gdml2aV9jcmVhdGVfaW5zdGFuY2UoaSk7CisJCWlmIChyZXQpIHsKKwkJCS8qIElmIHNvbWUgaW5zdGFudGlhdGlvbnMgc3VjY2VlZGVkLCBrZWVwIGRyaXZlciAqLwogCQkJaWYgKGkpCiAJCQkJcmV0ID0gMDsKLQogCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZkZXYtPnZpdmlfZGV2bGlzdCwgJnZpdmlfZGV2bGlzdCk7Ci0KLQkJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICglaSkiLAotCQkJIHZpdmlfdGVtcGxhdGUubmFtZSwgdmZkLT5taW5vcik7Ci0KLQkJaWYgKHZpZGVvX25yID49IDApCi0JCQl2aWRlb19ucisrOwotCi0JCWRldi0+dmZkID0gdmZkOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVjRMMiBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWRcbiIsCi0JCQlWSVZJX01PRFVMRV9OQU1FLCB2ZmQtPm51bSk7CiAJfQogCiAJaWYgKHJldCA8IDApIHsKLQkJdml2aV9yZWxlYXNlKCk7CiAJCXByaW50ayhLRVJOX0lORk8gIkVycm9yICVkIHdoaWxlIGxvYWRpbmcgdml2aSBkcml2ZXJcbiIsIHJldCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvICIKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gIgogCQkJIkNhcHR1cmUgQm9hcmQgdmVyICV1LiV1LiV1IHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iLAogCQkJKFZJVklfVkVSU0lPTiA+PiAxNikgJiAweEZGLCAoVklWSV9WRVJTSU9OID4+IDgpICYgMHhGRiwKIAkJCVZJVklfVkVSU0lPTiAmIDB4RkYpOwogCi0JCS8qIG5fZGV2cyB3aWxsIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRldmljZXMgKi8KLQkJbl9kZXZzID0gaTsKLQl9CisJLyogbl9kZXZzIHdpbGwgcmVmbGVjdCB0aGUgYWN0dWFsIG51bWJlciBvZiBhbGxvY2F0ZWQgZGV2aWNlcyAqLworCW5fZGV2cyA9IGk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMzMSwxOSArMTQ0NCwzIEBACiAKIG1vZHVsZV9pbml0KHZpdmlfaW5pdCk7CiBtb2R1bGVfZXhpdCh2aXZpX2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXVybyBDYXJ2YWxobyBDaGVoYWIsIFRlZCBXYWx0aGVyIGFuZCBKb2huIFNva29sIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci0KLW1vZHVsZV9wYXJhbSh2aWRlb19uciwgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW8gaW1pbm9yIHN0YXJ0IG51bWJlciIpOwotCi1tb2R1bGVfcGFyYW0obl9kZXZzLCB1aW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0Mobl9kZXZzLCAibnVtYmVyIG9mIHZpZGVvIGRldmljZXMgdG8gY3JlYXRlIik7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgdml2aV90ZW1wbGF0ZS5kZWJ1ZywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOwotCi1tb2R1bGVfcGFyYW0odmlkX2xpbWl0LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRfbGltaXQsICJjYXB0dXJlIG1lbW9yeSBsaW1pdCBpbiBtZWdhYnl0ZXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwppbmRleCA1ZDczZjY2Li40MmUyM2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCkBAIC0xMjksMTEgKzEyOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnAyN3NtcHhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZwMjdzbXB4X2NvcmVfb3BzID0gewpAQCAtMjA2LDggKzIwMSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ2cDI3c21weCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQMjdTTVBYLAotCS5jb21tYW5kID0gdnAyN3NtcHhfY29tbWFuZCwKIAkucHJvYmUgPSB2cDI3c21weF9wcm9iZSwKIAkucmVtb3ZlID0gdnAyN3NtcHhfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHZwMjdzbXB4X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwppbmRleCA2N2FhMGRiLi4yZmE3ZThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYwpAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigidnB4MzIyMGEvdnB4MzIxNmIvdnB4MzIxNGMgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkxhdXJlbnQgUGluY2hhcnQiKTsKQEAgLTM3LDE0ICszNywxNyBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogI2RlZmluZSBWUFhfVElNRU9VVF9DT1VOVCAgMTAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IHZweDMyMjAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1syNTVdOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKKwlpbnQgaWRlbnQ7CiAJaW50IGlucHV0OwogCWludCBlbmFibGU7CiAJaW50IGJyaWdodDsKQEAgLTUzLDMwICs1NiwzOCBAQAogCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2cHgzMjIwICp0b192cHgzMjIwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHZweDMyMjAsIHNkKTsKK30KKwogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAiaW50ZXJuYWwiLCAiY29tcG9zaXRlIiwgInN2aWRlbyIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZGVjb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2cHgzMjIwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOwogCXVuc2lnbmVkIGludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFZQWF9USU1FT1VUX0NPVU5UOyBpKyspIHsKLQkJc3RhdHVzID0gdnB4MzIyMF9yZWFkKGNsaWVudCwgMHgyOSk7CisJCXN0YXR1cyA9IHZweDMyMjBfcmVhZChzZCwgMHgyOSk7CiAKIAkJaWYgKCEoc3RhdHVzICYgNCkpCiAJCQlyZXR1cm4gMDsKQEAgLTkwLDU3ICsxMDEsNjAgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9mcF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBmcGFkZHIsIHUxNiBkYXRhKQorc3RhdGljIGludCB2cHgzMjIwX2ZwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IGZwYWRkciwgdTE2IGRhdGEpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFdSIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI3LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAodnB4MzIyMF9mcF9zdGF0dXMoY2xpZW50KSA8IDApCisJaWYgKHZweDMyMjBfZnBfc3RhdHVzKHNkKSA8IDApCiAJCXJldHVybiAtMTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgZGF0YSB0byB0aGUgRlBEQVQgcmVnaXN0ZXIgKi8KIAlpZiAoaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIDB4MjgsIHN3YWIxNihkYXRhKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiB2cHgzMjIwX2ZwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IGZwYWRkcikKK3N0YXRpYyB1MTYgdnB4MzIyMF9mcF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUxNiBmcGFkZHIpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXMxNiBkYXRhOwogCiAJLyogV3JpdGUgdGhlIDE2LWJpdCBhZGRyZXNzIHRvIHRoZSBGUFJEIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI2LCBzd2FiMTYoZnBhZGRyKSkgPT0gLTEpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAodnB4MzIyMF9mcF9zdGF0dXMoY2xpZW50KSA8IDApCisJaWYgKHZweDMyMjBfZnBfc3RhdHVzKHNkKSA8IDApCiAJCXJldHVybiAtMTsKIAogCS8qIFJlYWQgdGhlIDE2LWJpdCBkYXRhIGZyb20gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJZGF0YSA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIDB4MjgpOwogCWlmIChkYXRhID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIHN3YWIxNihkYXRhKTsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gLTE7CiAKIAl3aGlsZSAobGVuID49IDIpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJcmV0ID0gdnB4MzIyMF93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCXJldCA9IHZweDMyMjBfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJCWxlbiAtPSAyOwpAQCAtMTQ5LDcgKzE2Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IHZweDMyMjBfd3JpdGVfZnBfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJY29uc3QgdTE2ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXU4IHJlZzsKQEAgLTE1Nyw3ICsxNzEsNyBAQAogCiAJd2hpbGUgKGxlbiA+IDEpIHsKIAkJcmVnID0gKmRhdGErKzsKLQkJcmV0IHw9IHZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlyZXQgfD0gdnB4MzIyMF9mcF93cml0ZShzZCwgcmVnLCAqZGF0YSsrKTsKIAkJbGVuIC09IDI7CiAJfQogCkBAIC0yNTksMjc2ICsyNzMsMjc3IEBACiAJMHg0YiwgMHgyOTgsCQkvKiBQTEwgZ2FpbiAqLwogfTsKIAotc3RhdGljIHZvaWQgdnB4MzIyMF9kdW1wX2kyYyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCBsZW4gPSBzaXplb2YoaW5pdF9jb21tb24pOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBpbml0X2NvbW1vbjsKIAotCXdoaWxlIChsZW4gPiAxKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImkyYyByZWcgMHglMDJ4IGRhdGEgMHglMDJ4XG4iLAotCQkJKmRhdGEsIHZweDMyMjBfcmVhZChjbGllbnQsICpkYXRhKSk7Ci0JCWRhdGEgKz0gMjsKLQkJbGVuIC09IDI7Ci0JfQorc3RhdGljIGludCB2cHgzMjIwX2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOworCisJdnB4MzIyMF93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKKwlpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJZWxzZSBpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX1BBTCkKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJZWxzZSBpZiAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REX1NFQ0FNKQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3NlY2FtLCBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7CisJZWxzZQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2cHgzMjIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHZweDMyMjBfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqcHN0YXR1cywgdjRsMl9zdGRfaWQgKnBzdGQpCiB7Ci0Jc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUwsIHN0YXR1czsKKwl2NGwyX3N0ZF9pZCBzdGQgPSAwOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JewotCQl2cHgzMjIwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9mcCwKLQkJCQkgICAgICAgc2l6ZW9mKGluaXRfZnApID4+IDEpOwotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKHNkLCAweDBmMyk7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM6IDB4JTA0eFxuIiwgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKChzdGF0dXMgJiAweDIwKSA9PSAwKSB7CisJCXJlcyA9IDA7CisKKwkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7CisJCWNhc2UgMHgwMDoKKwkJY2FzZSAweDEwOgorCQljYXNlIDB4MTQ6CisJCWNhc2UgMHgxODoKKwkJCXN0ZCA9IFY0TDJfU1REX1BBTDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3NlY2FtLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0RVTVA6Ci0JewotCQl2cHgzMjIwX2R1bXBfaTJjKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX0NBUEFCSUxJVElFU1xuIik7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9TRUNBTSB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSAzOwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCByZXMgPSAwLCBzdGF0dXM7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKLQotCQlzdGF0dXMgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweDBmMyk7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwNHhcbiIsIHN0YXR1cyk7Ci0KLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCi0JCWlmICgoc3RhdHVzICYgMHgyMCkgPT0gMCkgewotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX0dPT0QgfCBERUNPREVSX1NUQVRVU19DT0xPUjsKLQotCQkJc3dpdGNoIChzdGF0dXMgJiAweDE4KSB7Ci0JCQljYXNlIDB4MDA6Ci0JCQljYXNlIDB4MTA6Ci0JCQljYXNlIDB4MTQ6Ci0JCQljYXNlIDB4MTg6Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAweDA4OgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAweDA0OgotCQkJY2FzZSAweDBjOgotCQkJY2FzZSAweDFjOgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJKihpbnQgKikgYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmcsIGRhdGE7Ci0JCWludCB0ZW1wX2lucHV0OwotCi0JCS8qIEhlcmUgd2UgYmFjayB1cCB0aGUgaW5wdXQgc2VsZWN0aW9uIGJlY2F1c2UgaXQgZ2V0cwotCQkgICBvdmVyd3JpdHRlbiB3aGVuIHdlIGZpbGwgdGhlIHJlZ2lzdGVycyB3aXRoIHRoZQotCQkgICBjaG9vc2VuIHZpZGVvIG5vcm0gKi8KLQkJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChjbGllbnQsIDB4ZjIpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfU0VUX05PUk0gJWRcbiIsICppYXJnKTsKLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJCWNhc2UgMHgwODoKKwkJCXN0ZCA9IFY0TDJfU1REX1NFQ0FNOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwKLQkJCQkJICAgICAgIHNpemVvZihpbml0X3BhbCkgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFBBTFxuIik7CisJCWNhc2UgMHgwNDoKKwkJY2FzZSAweDBjOgorCQljYXNlIDB4MWM6CisJCQlzdGQgPSBWNEwyX1NURF9OVFNDOwogCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfc2VjYW0sCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9zZWNhbSkgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJLyogRklYTUUgVGhpcyBpcyBvbmx5IHByZWxpbWluYXJ5IHN1cHBvcnQgKi8KLQkJCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIDB4MjA7Ci0JCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgMHgwMGMwIHwgZGF0YSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIEFVVE9cbiIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKKwl9CisJaWYgKHBzdGQpCisJCSpwc3RkID0gc3RkOworCWlmIChwc3RhdHVzKQorCQkqcHN0YXR1cyA9IHN0YXR1czsKKwlyZXR1cm4gMDsKK30KIAotCQkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLwotCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7Ci0JCXVkZWxheSgxMCk7Ci0JCWJyZWFrOworc3RhdGljIGludCB2cHgzMjIwX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicXVlcnlzdGRcbiIpOworCXJldHVybiB2cHgzMjIwX3N0YXR1cyhzZCwgTlVMTCwgc3RkKTsKK30KKworc3RhdGljIGludCB2cHgzMjIwX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImdfaW5wdXRfc3RhdHVzXG4iKTsKKwlyZXR1cm4gdnB4MzIyMF9zdGF0dXMoc2QsIHN0YXR1cywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdnB4MzIyMF9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKwlpbnQgdGVtcF9pbnB1dDsKKworCS8qIEhlcmUgd2UgYmFjayB1cCB0aGUgaW5wdXQgc2VsZWN0aW9uIGJlY2F1c2UgaXQgZ2V0cworCSAgIG92ZXJ3cml0dGVuIHdoZW4gd2UgZmlsbCB0aGUgcmVnaXN0ZXJzIHdpdGggdGhlCisJICAgY2hvb3NlbiB2aWRlbyBub3JtICovCisJdGVtcF9pbnB1dCA9IHZweDMyMjBfZnBfcmVhZChzZCwgMHhmMik7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0ZCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBOVFNDXG4iKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9zZWNhbSwgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJub3JtIHN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnLCBkYXRhOworCWRlY29kZXItPm5vcm0gPSBzdGQ7CiAKLQkJLyogUko6ICAqaWFyZyA9IDA6IFNUOCAoUENUVikgaW5wdXQKLQkJICppYXJnID0gMTogQ09NUE9TSVRFICBpbnB1dAotCQkgKmlhcmcgPSAyOiBTVkhTICAgICAgIGlucHV0ICAqLworCS8qIEFuZCBoZXJlIHdlIHNldCB0aGUgYmFja2VkIHVwIHZpZGVvIGlucHV0IGFnYWluICovCisJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhmMiwgdGVtcF9pbnB1dCB8IDB4MDAxMCk7CisJdWRlbGF5KDEwKTsKKwlyZXR1cm4gMDsKK30KIAotCQljb25zdCBpbnQgaW5wdXRbM11bMl0gPSB7Ci0JCQl7MHgwYywgMH0sCi0JCQl7MHgwZCwgMH0sCi0JCQl7MHgwZSwgMX0KLQkJfTsKK3N0YXRpYyBpbnQgdnB4MzIyMF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJaW50IGRhdGE7CiAKLQkJaWYgKCppYXJnIDwgMCB8fCAqaWFyZyA+IDIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBSSjogICByb3V0ZS0+aW5wdXQgPSAwOiBTVDggKFBDVFYpIGlucHV0CisJCSByb3V0ZS0+aW5wdXQgPSAxOiBDT01QT1NJVEUgIGlucHV0CisJCSByb3V0ZS0+aW5wdXQgPSAyOiBTVkhTICAgICAgIGlucHV0ICAqLwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbKmlhcmddKTsKKwljb25zdCBpbnQgaW5wdXRbM11bMl0gPSB7CisJCXsweDBjLCAwfSwKKwkJezB4MGQsIDB9LAorCQl7MHgwZSwgMX0KKwl9OwogCi0JCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweDMzLCBpbnB1dFsqaWFyZ11bMF0pOworCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+IDIpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKSAmIH4oMHgwMDIwKTsKLQkJaWYgKGRhdGEgPCAwKQotCQkJcmV0dXJuIGRhdGE7Ci0JCS8qIDB4MDAxMCBpcyByZXF1aXJlZCB0byBsYXRjaCB0aGUgc2V0dGluZyAqLwotCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhmMiwKLQkJCQkgZGF0YSB8IChpbnB1dFsqaWFyZ11bMV0gPDwgNSkgfCAweDAwMTApOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlucHV0IHN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbcm91dGUtPmlucHV0XSk7CiAKLQkJdWRlbGF5KDEwKTsKKwl2cHgzMjIwX3dyaXRlKHNkLCAweDMzLCBpbnB1dFtyb3V0ZS0+aW5wdXRdWzBdKTsKKworCWRhdGEgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpICYgfigweDAwMjApOworCWlmIChkYXRhIDwgMCkKKwkJcmV0dXJuIGRhdGE7CisJLyogMHgwMDEwIGlzIHJlcXVpcmVkIHRvIGxhdGNoIHRoZSBzZXR0aW5nICovCisJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhmMiwKKwkJCWRhdGEgfCAoaW5wdXRbcm91dGUtPmlucHV0XVsxXSA8PCA1KSB8IDB4MDAxMCk7CisKKwl1ZGVsYXkoMTApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0cmVhbSAlc1xuIiwgZW5hYmxlID8gIm9uIiA6ICJvZmYiKTsKKworCXZweDMyMjBfd3JpdGUoc2QsIDB4ZjIsIChlbmFibGUgPyAweDFiIDogMHgwMCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjMsIDEsIDMyKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiREVDT0RFUl9FTkFCTEVfT1VUUFVUICVkXG4iLCAqaWFyZyk7Ci0KLQkJdnB4MzIyMF93cml0ZShjbGllbnQsIDB4ZjIsICgqaWFyZyA/IDB4MWIgOiAweDAwKSk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNDA5NSwgMSwgMjA0OCk7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBwaWMtPmJyaWdodG5lc3MpIHsKLQkJCS8qIFdlIHdhbnQgLTEyOCB0byAxMjggd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmJyaWdodCA9IHBpYy0+YnJpZ2h0bmVzczsKLQkJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGU2LAotCQkJCSAgICAgIChkZWNvZGVyLT5icmlnaHQgLSAzMjc2OCkgPj4gOCk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA2NCB3ZSBnZXQgMC02NTUzNSAqLwotCQkJLyogQml0IDcgYW5kIDggaXMgZm9yIG5vaXNlIHNoYXBpbmcgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGU3LAotCQkJCSAgICAgIChkZWNvZGVyLT5jb250cmFzdCA+PiAxMCkgKyAxOTIpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5zYXQgIT0gcGljLT5jb2xvdXIpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA0MDk2IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweGEwLAotCQkJCQkgZGVjb2Rlci0+c2F0ID4+IDQpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5odWUgIT0gcGljLT5odWUpIHsKLQkJCS8qIFdlIHdhbnQgLTUxMiB0byA1MTIgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmh1ZSA9IHBpYy0+aHVlOwotCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4MWMsCi0JCQkJCSAoKGRlY29kZXItPmh1ZSAtIDMyNzY4KSA+PiA2KSAmIDB4RkZGKTsKLQkJfQorCWNhc2UgVjRMMl9DSURfSFVFOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTUxMiwgNTExLCAxLCAwKTsKIAkJYnJlYWs7Ci0JfQogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCB2cHgzMjIwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXZweDMyMjBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKLQkvKiBEZWZhdWx0IHRvIFBBTCAqLwotCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOwogCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5icmlnaHQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+Y29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5zYXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmh1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZweDMyMjBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPmJyaWdodCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF93cml0ZShzZCwgMHhlNiwgZGVjb2Rlci0+YnJpZ2h0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlpZiAoZGVjb2Rlci0+Y29udHJhc3QgIT0gY3RybC0+dmFsdWUpIHsKKwkJCS8qIEJpdCA3IGFuZCA4IGlzIGZvciBub2lzZSBzaGFwaW5nICovCisJCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF93cml0ZShzZCwgMHhlNywgZGVjb2Rlci0+Y29udHJhc3QgKyAxOTIpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJaWYgKGRlY29kZXItPnNhdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCQl2cHgzMjIwX2ZwX3dyaXRlKHNkLCAweGEwLCBkZWNvZGVyLT5zYXQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoZGVjb2Rlci0+aHVlICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4MWMsIGRlY29kZXItPmh1ZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgZGVjb2Rlci0+aWRlbnQsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHZweDMyMjBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHZweDMyMjBfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gdnB4MzIyMF9pbml0LAorCS5nX2N0cmwgPSB2cHgzMjIwX2dfY3RybCwKKwkuc19jdHJsID0gdnB4MzIyMF9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHZweDMyMjBfcXVlcnljdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgdnB4MzIyMF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gdnB4MzIyMF9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHZweDMyMjBfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSB2cHgzMjIwX3Nfcm91dGluZywKKwkuc19zdHJlYW0gPSB2cHgzMjIwX3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IHZweDMyMjBfcXVlcnlzdGQsCisJLmdfaW5wdXRfc3RhdHVzID0gdnB4MzIyMF9nX2lucHV0X3N0YXR1cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHZweDMyMjBfb3BzID0geworCS5jb3JlID0gJnZweDMyMjBfY29yZV9vcHMsCisJLnR1bmVyID0gJnZweDMyMjBfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZ2cHgzMjIwX3ZpZGVvX29wcywKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDbGllbnQgbWFuYWdlbWVudCBjb2RlCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4NiA+PiAxLCAweDhlID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgaW50IHZweDMyMjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwogCXU4IHZlcjsKIAl1MTYgcG47CkBAIC01NDEsMTggKzU1NiwyMCBAQAogCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnB4MzIyMCksIEdGUF9LRVJORUwpOwogCWlmIChkZWNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdnB4MzIyMF9vcHMpOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7CiAJZGVjb2Rlci0+Y29udHJhc3QgPSAzMjc2ODsKIAlkZWNvZGVyLT5odWUgPSAzMjc2ODsKIAlkZWNvZGVyLT5zYXQgPSAzMjc2ODsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAogCXZlciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDApOwogCXBuID0gKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDIpIDw8IDgpICsKIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwMSk7CisJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMjBBOwogCWlmICh2ZXIgPT0gMHhlYykgewogCQlzd2l0Y2ggKHBuKSB7CiAJCWNhc2UgMHg0NjgwOgpAQCAtNTYwLDI2ICs1NzcsMzQgQEAKIAkJCWJyZWFrOwogCQljYXNlIDB4NDI2MDoKIAkJCW5hbWUgPSAidnB4MzIxNmIiOworCQkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMTZCOwogCQkJYnJlYWs7CiAJCWNhc2UgMHg0MjgwOgogCQkJbmFtZSA9ICJ2cHgzMjE0YyI7CisJCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfVlBYMzIxNEM7CiAJCQlicmVhazsKIAkJfQogCX0KIAlpZiAobmFtZSkKLQkJdjRsX2luZm8oY2xpZW50LCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIG5hbWUsCisJCXY0bDJfaW5mbyhzZCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAJZWxzZQotCQl2NGxfaW5mbyhjbGllbnQsICJjaGlwICglMDJ4OiUwNHgpIGZvdW5kIEAgMHgleCAoJXMpXG4iLAorCQl2NGwyX2luZm8oc2QsICJjaGlwICglMDJ4OiUwNHgpIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJdmVyLCBwbiwgY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQl2cHgzMjIwX2luaXRfY2xpZW50KGNsaWVudCk7CisJdnB4MzIyMF93cml0ZV9ibG9jayhzZCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfZnAsIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKKwkvKiBEZWZhdWx0IHRvIFBBTCAqLworCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZweDMyMjBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b192cHgzMjIwKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5Myw4ICs2MTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidnB4MzIyMCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JLmNvbW1hbmQgPSB2cHgzMjIwX2NvbW1hbmQsCiAJLnByb2JlID0gdnB4MzIyMF9wcm9iZSwKIAkucmVtb3ZlID0gdnB4MzIyMF9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdnB4MzIyMF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwppbmRleCAwMzhmZjMyLi5kY2FkZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCmluZGV4IDEwNWE4MzIuLjNiMDhiYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogI2luY2x1ZGUgInc5OTY4Y2YuaCIKQEAgLTY4LDcgKzY5LDYgQEAKIE1PRFVMRV9MSUNFTlNFKFc5OTY4Q0ZfTU9EVUxFX0xJQ0VOU0UpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlZpZGVvIik7CiAKLXN0YXRpYyBpbnQgb3Ztb2RfbG9hZCA9IFc5OTY4Q0ZfT1ZNT0RfTE9BRDsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaW1jYW1zID0gVzk5NjhDRl9TSU1DQU1TOwogc3RhdGljIHNob3J0IHZpZGVvX25yW109e1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0gLTF9OyAvKi0xPWZpcnN0IGZyZWUqLwogc3RhdGljIHVuc2lnbmVkIGludCBwYWNrZXRfc2l6ZVtdID0ge1swIC4uLiBXOTk2OENGX01BWF9ERVZJQ0VTLTFdID0KQEAgLTExMSw5ICsxMTEsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhcmFtX252WzI0XTsgLyogbnVtYmVyIG9mIHZhbHVlcyBwZXIgcGFyYW1ldGVyICovCiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotbW9kdWxlX3BhcmFtKG92bW9kX2xvYWQsIGJvb2wsIDA2NDQpOwotI2VuZGlmCiBtb2R1bGVfcGFyYW0oc2ltY2FtcywgdXNob3J0LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbV9hcnJheSh2aWRlb19uciwgc2hvcnQsICZwYXJhbV9udlswXSwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocGFja2V0X3NpemUsIHVpbnQsICZwYXJhbV9udlsxXSwgMDQ0NCk7CkBAIC0xNDQsMTggKzE0MSw2IEBACiBtb2R1bGVfcGFyYW0oc3BlY2lmaWNfZGVidWcsIGJvb2wsIDA2NDQpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUwotTU9EVUxFX1BBUk1fREVTQyhvdm1vZF9sb2FkLAotCQkgIlxuPDB8MT4gQXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nLiIKLQkJICJcbjAgZGlzYWJsZWQsIDEgZW5hYmxlZC4iCi0JCSAiXG5JZiBlbmFibGVkLCdpbnNtb2QnIHNlYXJjaGVzIGZvciB0aGUgcmVxdWlyZWQgJ292Y2FtY2hpcCciCi0JCSAiXG5tb2R1bGUgaW4gdGhlIHN5c3RlbSwgYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLCBhbmQiCi0JCSAiXG5hdHRlbXB0cyB0byBsb2FkIHRoYXQgbW9kdWxlIGF1dG9tYXRpY2FsbHkuIFRoaXMgYWN0aW9uIGlzIgotCQkgIlxucGVyZm9ybWVkIG9uY2UgYXMgc29vbiBhcyB0aGUgJ3c5OTY4Y2YnIG1vZHVsZSBpcyBsb2FkZWQiCi0JCSAiXG5pbnRvIG1lbW9yeS4iCi0JCSAiXG5EZWZhdWx0IHZhbHVlIGlzICJfX01PRFVMRV9TVFJJTkcoVzk5NjhDRl9PVk1PRF9MT0FEKSIuIgotCQkgIlxuIik7Ci0jZW5kaWYKIE1PRFVMRV9QQVJNX0RFU0Moc2ltY2FtcywKIAkJICJcbjxuPiBOdW1iZXIgb2YgY2FtZXJhcyBhbGxvd2VkIHRvIHN0cmVhbSBzaW11bHRhbmVvdXNseS4iCiAJCSAiXG5uIG1heSB2YXJ5IGZyb20gMCB0byAiCkBAIC00NDMsOCArNDI4LDYgQEAKIAkJCQkgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCiAJCQkJICB1OCBjb21tYW5kLCBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEqKTsKIHN0YXRpYyB1MzIgdzk5NjhjZl9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOwotc3RhdGljIGludCB3OTk2OGNmX2kyY19kZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50Kik7CiAKIC8qIE1lbW9yeSBtYW5hZ2VtZW50ICovCiBzdGF0aWMgdm9pZCogcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKTsKQEAgLTE0NDMsMTkgKzE0MjYsMTEgQEAKIAkJICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsIHU4IGNvbW1hbmQsCiAJCSAgICAgICBpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB3OTk2OGNmX2RldmljZSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAl1OCBpOwogCWludCBlcnIgPSAwOwogCi0Jc3dpdGNoIChhZGRyKSB7Ci0JCWNhc2UgT1Y2eHgwX1NJRDoKLQkJY2FzZSBPVjd4eDBfU0lEOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEQkcoNCwgIlJlamVjdGVkIHNsYXZlIElEIDB4JTA0WCIsIGFkZHIpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURSkgewogCQkvKiBXaHkgYWRkciA8PD0gMT8gU2VlIE9WWFhYMF9TSUQgZGVmaW5lcyBpbiBvdmNhbWNoaXAuaCAqLwogCQlhZGRyIDw8PSAxOwpAQCAtMTQ2Myw4ICsxNDM4LDE3IEBACiAJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19XUklURSkKIAkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfd3JpdGVfYnl0ZShjYW0sIGFkZHIsIGNvbW1hbmQpOwogCQllbHNlIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKQotCQkJZXJyID0gdzk5NjhjZl9pMmNfYWRhcF9yZWFkX2J5dGUoY2FtLGFkZHIsJmRhdGEtPmJ5dGUpOwotCisJCQlmb3IgKGkgPSAxOyBpIDw9IFc5OTY4Q0ZfSTJDX1JXX1JFVFJJRVM7IGkrKykgeworCQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKGNhbSwgYWRkciwKKwkJCQkJCQkgJmRhdGEtPmJ5dGUpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJaWYgKHc5OTY4Y2Zfc21idXNfcmVmcmVzaF9idXMoY2FtKSkgeworCQkJCQkJZXJyID0gLUVJTzsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlCisJCQkJCWJyZWFrOworCQkJfQogCX0gZWxzZSBpZiAoc2l6ZSA9PSBJMkNfU01CVVNfQllURV9EQVRBKSB7CiAJCWFkZHIgPDw9IDE7CiAKQEAgLTE0OTEsNyArMTQ3NSw2IEBACiAJCURCRyg0LCAiVW5zdXBwb3J0ZWQgSTJDIHRyYW5zZmVyIG1vZGUgKCVkKSIsIHNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE1MDQsNDQgKzE0ODcsNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCBpZCA9IGNsaWVudC0+ZHJpdmVyLT5pZCwgZXJyID0gMDsKLQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfT1ZDQU1DSElQKSB7Ci0JCWNhbS0+c2Vuc29yX2NsaWVudCA9IGNsaWVudDsKLQkJZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOwotCQlpZiAoZXJyKSB7Ci0JCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0gZWxzZSB7Ci0JCURCRyg0LCAiUmVqZWN0ZWQgY2xpZW50IFslc10gd2l0aCBkcml2ZXIgWyVzXSIsCi0JCSAgICBjbGllbnQtPm5hbWUsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JREJHKDUsICJJMkMgYXR0YWNoIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAotCSAgICBjbGllbnQtPm5hbWUsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSkKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCogY2xpZW50KQotewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JaWYgKGNhbS0+c2Vuc29yX2NsaWVudCA9PSBjbGllbnQpCi0JCWNhbS0+c2Vuc29yX2NsaWVudCA9IE5VTEw7Ci0KLQlEQkcoNSwgIkkyQyBkZXRhY2ggY2xpZW50IFslc10iLCBjbGllbnQtPm5hbWUpCi0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2luaXQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0pCiB7CiAJaW50IGVyciA9IDA7CkBAIC0xNTU0LDE1ICsxNDk5LDEzIEBACiAJc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBhZGFwID0gewogCQkuaWQgPSAgICAgICAgICAgICAgICBJMkNfSFdfU01CVVNfVzk5NjhDRiwKIAkJLm93bmVyID0gICAgICAgICAgICAgVEhJU19NT0RVTEUsCi0JCS5jbGllbnRfcmVnaXN0ZXIgPSAgIHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0sCi0JCS5jbGllbnRfdW5yZWdpc3RlciA9IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0sCiAJCS5hbGdvID0gICAgICAgICAgICAgICZhbGdvLAogCX07CiAKIAltZW1jcHkoJmNhbS0+aTJjX2FkYXB0ZXIsICZhZGFwLCBzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CiAJc3RyY3B5KGNhbS0+aTJjX2FkYXB0ZXIubmFtZSwgInc5OTY4Y2YiKTsKIAljYW0tPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmY2FtLT51c2JkZXYtPmRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCBjYW0pOworCWkyY19zZXRfYWRhcGRhdGEoJmNhbS0+aTJjX2FkYXB0ZXIsICZjYW0tPnY0bDJfZGV2KTsKIAogCURCRyg2LCAiUmVnaXN0ZXJpbmcgSTJDIGFkYXB0ZXIgd2l0aCBrZXJuZWwuLi4iKQogCkBAIC0yMTY1LDEzICsyMTA4LDkgQEAKIHN0YXRpYyBpbnQKIHc5OTY4Y2Zfc2Vuc29yX2NtZChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCogYXJnKQogewotCXN0cnVjdCBpMmNfY2xpZW50KiBjID0gY2FtLT5zZW5zb3JfY2xpZW50OwotCWludCByYyA9IDA7CisJaW50IHJjOwogCi0JaWYgKCFjIHx8ICFjLT5kcml2ZXIgfHwgIWMtPmRyaXZlci0+Y29tbWFuZCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyYyA9IGMtPmRyaXZlci0+Y29tbWFuZChjLCBjbWQsIGFyZyk7CisJcmMgPSB2NGwyX3N1YmRldl9jYWxsKGNhbS0+c2Vuc29yX3NkLCBjb3JlLCBpb2N0bCwgY21kLCBhcmcpOwogCS8qIFRoZSBJMkMgZHJpdmVyIHJldHVybnMgLUVQRVJNIG9uIG5vbi1zdXBwb3J0ZWQgY29udHJvbHMgKi8KIAlyZXR1cm4gKHJjIDwgMCAmJiByYyAhPSAtRVBFUk0pID8gcmMgOiAwOwogfQpAQCAtMjM0Niw3ICsyMjg1LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIE5PVEU6IE1ha2Ugc3VyZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBhIG11bHRpcGxlIG9mIDE2ICovCi0Jc3dpdGNoIChjYW0tPnNlbnNvcl9jbGllbnQtPmFkZHIpIHsKKwlzd2l0Y2ggKHY0bDJfaTJjX3N1YmRldl9hZGRyKGNhbS0+c2Vuc29yX3NkKSkgewogCQljYXNlIE9WNnh4MF9TSUQ6CiAJCQljYW0tPm1heHdpZHRoID0gMzUyOwogCQkJY2FtLT5tYXhoZWlnaHQgPSAyODg7CkBAIC0yNjUxLDYgKzI1OTAsNyBAQAogCXc5OTY4Y2ZfZGVhbGxvY2F0ZV9tZW1vcnkoY2FtKTsKIAlrZnJlZShjYW0tPmNvbnRyb2xfYnVmZmVyKTsKIAlrZnJlZShjYW0tPmRhdGFfYnVmZmVyKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjYW0tPnY0bDJfZGV2KTsKIAogCW11dGV4X3VubG9jaygmdzk5NjhjZl9kZXZsaXN0X211dGV4KTsKIH0KQEAgLTM0ODAsNiArMzQyMCwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQqIHB0cjsKIAl1OCBzYyA9IDA7IC8qIG51bWJlciBvZiBzaW11bHRhbmVvdXMgY2FtZXJhcyAqLwogCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZXZfbnI7IC8qIDAgLSB3ZSBhcmUgaGFuZGxpbmcgZGV2aWNlIG51bWJlciBuICovCisJc3RhdGljIHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCU9WN3h4MF9TSUQsCisJCU9WNnh4MF9TSUQsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKIAogCWlmIChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFZlbmRvciAmJgogCSAgICBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gd2luYm9uZF9pZF90YWJsZVswXS5pZFByb2R1Y3QpCkBAIC0zNDk1LDEyICszNDQwLDE0IEBACiAJaWYgKCFjYW0pCiAJCXJldHVybiAtRU5PTUVNOwogCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnVkZXYtPmRldiwgJmNhbS0+djRsMl9kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDA7CisKIAltdXRleF9pbml0KCZjYW0tPmRldl9tdXRleCk7CiAJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJY2FtLT51c2JkZXYgPSB1ZGV2OwotCS8qIE5PVEU6IGEgbG9jYWwgY29weSBpcyB1c2VkIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyAqLwotCW1lbWNweSgmY2FtLT5kZXYsICZ1ZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7CiAKIAlEQkcoMiwgIiVzIGRldGVjdGVkIiwgc3ltYm9saWMoY2FtbGlzdCwgbW9kX2lkKSkKIApAQCAtMzU0OSw3ICszNDk2LDcgQEAKIAljYW0tPnY0bGRldi0+bWlub3IgPSB2aWRlb19ucltkZXZfbnJdOwogCWNhbS0+djRsZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmlkZW9fc2V0X2RydmRhdGEoY2FtLT52NGxkZXYsIGNhbSk7Ci0JY2FtLT52NGxkZXYtPnBhcmVudCA9ICZjYW0tPmRldjsKKwljYW0tPnY0bGRldi0+djRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKIAogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShjYW0tPnY0bGRldiwgVkZMX1RZUEVfR1JBQkJFUiwKIAkJCQkgICAgdmlkZW9fbnJbZGV2X25yXSk7CkBAIC0zNTc2LDkgKzM1MjMsMTMgQEAKIAl3OTk2OGNmX3R1cm5fb25fbGVkKGNhbSk7CiAKIAl3OTk2OGNmX2kyY19pbml0KGNhbSk7CisJY2FtLT5zZW5zb3Jfc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY2FtLT5pMmNfYWRhcHRlciwKKwkJCSJvdmNhbWNoaXAiLCAib3ZjYW1jaGlwIiwgYWRkcnMpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYW0pOwogCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCisJZXJyID0gdzk5NjhjZl9zZW5zb3JfaW5pdChjYW0pOwogCXJldHVybiAwOwogCiBmYWlsOiAvKiBGcmVlIHVudXNlZCBtZW1vcnkgKi8KQEAgLTM1ODcsNiArMzUzOCw4IEBACiAJaWYgKGNhbS0+djRsZGV2KQogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShjYW0tPnY0bGRldik7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPmRldl9tdXRleCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CitmYWlsMDoKIAlrZnJlZShjYW0pOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTk3LDE1ICszNTUwLDE2IEBACiAJc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0gPQogCSAgIChzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLQlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwotCiAJaWYgKGNhbSkgeworCQlkb3duX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogCQkvKiBQcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzZXMgdG8gZGF0YSAqLwogCQltdXRleF9sb2NrKCZjYW0tPmRldl9tdXRleCk7CiAKIAkJY2FtLT5kaXNjb25uZWN0ZWQgPSAxOwogCi0JCURCRygyLCAiRGlzY29ubmVjdGluZyAlcy4uLiIsIHN5bWJvbGljKGNhbWxpc3QsIGNhbS0+aWQpKQorCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSk7CisKKwkJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmY2FtLT52NGwyX2Rldik7CiAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY2FtLT5vcGVuKTsKIApAQCAtMzYyMSwxMiArMzU3NSwxMiBAQAogCQkJdzk5NjhjZl9yZWxlYXNlX3Jlc291cmNlcyhjYW0pOwogCiAJCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCQl1cF93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAotCQlpZiAoIWNhbS0+dXNlcnMpCisJCWlmICghY2FtLT51c2VycykgewogCQkJa2ZyZWUoY2FtKTsKKwkJfQogCX0KLQotCXVwX3dyaXRlKCZ3OTk2OGNmX2Rpc2Nvbm5lY3QpOwogfQogCiAKQEAgLTM2NTAsOSArMzYwNCw2IEBACiAJS0RCRygyLCBXOTk2OENGX01PRFVMRV9OQU1FIiAiVzk5NjhDRl9NT0RVTEVfVkVSU0lPTikKIAlLREJHKDMsIFc5OTY4Q0ZfTU9EVUxFX0FVVEhPUikKIAotCWlmIChvdm1vZF9sb2FkKQotCQlyZXF1ZXN0X21vZHVsZSgib3ZjYW1jaGlwIik7Ci0KIAlpZiAoKGVyciA9IHVzYl9yZWdpc3Rlcigmdzk5NjhjZl91c2JfZHJpdmVyKSkpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKaW5kZXggMzAwMzJlMS4uZmRmYzZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL292Y2FtY2hpcC5oPgogCiAjaW5jbHVkZSAidzk5NjhjZl92cHAuaCIKQEAgLTQyLDcgKzQzLDYgQEAKICAqIERlZmF1bHQgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBXOTk2OENGX09WTU9EX0xPQUQgICAgICAxICAvKiBhdXRvbWF0aWMgJ292Y2FtY2hpcCcgbW9kdWxlIGxvYWRpbmcgKi8KICNkZWZpbmUgVzk5NjhDRl9WUFBNT0RfTE9BRCAgICAgMSAgLyogYXV0b21hdGljICd3OTk2OGNmLXZwcCcgbW9kdWxlIGxvYWRpbmcgKi8KIAogLyogQ29tbWVudC91bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZS9kaXNhYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyAqLwpAQCAtMTk1LDEwICsxOTUsOSBAQAogCiAvKiBNYWluIGRldmljZSBkcml2ZXIgc3RydWN0dXJlICovCiBzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgewotCXN0cnVjdCBkZXZpY2UgZGV2OyAvKiBkZXZpY2Ugc3RydWN0dXJlICovCi0KIAllbnVtIHc5OTY4Y2ZfbW9kZWxfaWQgaWQ7ICAgLyogcHJpdmF0ZSBkZXZpY2UgaWRlbnRpZmllciAqLwogCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UqIHY0bGRldjsgLyogLT4gVjRMIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgdjRsbGlzdDsgICAgLyogZW50cnkgb2YgdGhlIGxpc3Qgb2YgVjRMIGNhbWVyYXMgKi8KIApAQCAtMjY1LDcgKzI2NCw3IEBACiAKIAkvKiBJMkMgaW50ZXJmYWNlIHRvIGtlcm5lbCAqLwogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcHRlcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCogc2Vuc29yX2NsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcl9zZDsKIAogCS8qIExvY2tzICovCiAJc3RydWN0IG11dGV4IGRldl9tdXRleCwgICAgLyogZm9yIHByb2JlLCBkaXNjb25uZWN0LG9wZW4gYW5kIGNsb3NlICovCkBAIC0yNzcsNiArMjc2LDExIEBACiAJY2hhciBjb21tYW5kWzE2XTsgLyogbmFtZSBvZiB0aGUgcHJvZ3JhbSBob2xkaW5nIHRoZSBkZXZpY2UgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHc5OTY4Y2ZfZGV2aWNlICp0b19jYW0oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UsIHY0bDJfZGV2KTsKK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFjcm9zIGZvciBkZWJ1Z2dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKQEAgLTI5MSwxNCArMjk1LDE0IEBACiAJaWYgKCAoKHNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPT0gKGxldmVsKSkpIHx8ICAgICAgICAgICAgICAgICAgICAgIFwKIAkgICAgICgoIXNwZWNpZmljX2RlYnVnKSAmJiAoZGVidWcgPj0gKGxldmVsKSkpICkgeyAgICAgICAgICAgICAgICAgICAgXAogCQlpZiAoKGxldmVsKSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl9lcnIoJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgIFwKKwkJCXY0bDJfZXJyKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgIFwKIAkJZWxzZSBpZiAoKGxldmVsKSA9PSAyIHx8IChsZXZlbCkgPT0gMykgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfaW5mbygmY2FtLT5kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCisJCQl2NGwyX2luZm8oJmNhbS0+djRsMl9kZXYsIGZtdCAiXG4iLCAjIyBhcmdzKTsgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZGV2X3dhcm4oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQkJdjRsMl93YXJuKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID49IDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl9pbmZvKCZjYW0tPmRldiwgIlslczolZF0gIiBmbXQgIlxuIiwgICAgICAgICAgICAgIFwKLQkJCQkgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7ICAgICAgICAgICBcCisJCQl2NGwyX2luZm8oJmNhbS0+djRsMl9kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICBcCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogLyogRm9yIGdlbmVyaWMga2VybmVsIChub3QgZGV2aWNlIHNwZWNpZmljKSBtZXNzYWdlcyAqLwpAQCAtMzIxLDcgKzMyNSw3IEBACiAKICN1bmRlZiBQREJHCiAjZGVmaW5lIFBEQkcoZm10LCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOwordjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsKIAogI3VuZGVmIFBEQkdHCiAjZGVmaW5lIFBEQkdHKGZtdCwgYXJncy4uLikgZG8gezt9IHdoaWxlKDApOyAvKiBub3RoaW5nOiBpdCdzIGEgcGxhY2Vob2xkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCmluZGV4IGYyODY0ZDUuLmI1NzJjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwpAQCAtMjUyLDExICsyNTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODczOV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204NzM5X2NvcmVfb3BzID0gewpAQCAtMzQzLDggKzMzOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ3bTg3MzkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9XTTg3MzksCi0JLmNvbW1hbmQgPSB3bTg3MzlfY29tbWFuZCwKIAkucHJvYmUgPSB3bTg3MzlfcHJvYmUsCiAJLnJlbW92ZSA9IHdtODczOV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204NzM5X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKaW5kZXggNTNmY2Q0Mjg0Li5lZGRmMTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKQEAgLTM0LDE1ICszNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIndtODc3NSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlVsZiBFa2x1bmQsIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM2ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNjEsMTEgKzE1OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd204Nzc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB3bTg3NzVfY29yZV9vcHMgPSB7CkBAIC0yNjgsOCArMjYwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gIndtODc3NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1dNODc3NSwKLQkuY29tbWFuZCA9IHdtODc3NV9jb21tYW5kLAogCS5wcm9iZSA9IHdtODc3NV9wcm9iZSwKIAkucmVtb3ZlID0gd204Nzc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB3bTg3NzVfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKaW5kZXggYjBjZDQ5Yy4uM2E0MDhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaApAQCAtNTgsMTIgKzU4LDIwIEBACiAJLmlkUHJvZHVjdCA9IChwcm9kKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkuYkludGVyZmFjZUNsYXNzID0gKGludGNsYXNzKQogCisjaWYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQSAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX0dTUENBX01PRFVMRQogI2RlZmluZSBaQzAzMDFfSURfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpjMDMwMV9pZF90YWJsZVtdID0gIHsgICAgICAgICAgICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWUsIDB4ZmYpLCB9LCAvKiBQQVMyMDIgKi8gICAgICAgICAgICBcCiAJeyBaQzAzMDFfVVNCX0RFVklDRSgweDBhYzgsIDB4MzAzYiwgMHhmZiksIH0sIC8qIFBCLTAzMzAgKi8gICAgICAgICAgIFwKIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfTsKKyNlbHNlCisjZGVmaW5lIFpDMDMwMV9JRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgemMwMzAxX2lkX3RhYmxlW10gPSAgeyAgICAgICAgICAgICAgICAgICAgICBcCisJeyBaQzAzMDFfVVNCX0RFVklDRSgweDA0NmQsIDB4MDhhZSwgMHhmZiksIH0sIC8qIFBBUzIwMiAqLyAgICAgICAgICAgIFwKKwl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsKKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZwppbmRleCA4NjY2ZTE5Li5mZDQxMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX1pPUkFOCiAJdHJpc3RhdGUgIlpvcmFuIFpSMzYwNTcvMzYwNjcgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gUENJICYmIEkyQ19BTEdPQklUICYmIFZJREVPX1Y0TDEgJiYgVklSVF9UT19CVVMKKwlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwyICYmIFZJUlRfVE9fQlVTCiAJaGVscAogCSAgU2F5IFkgZm9yIHN1cHBvcnQgZm9yIE1KUEVHIGNhcHR1cmUgY2FyZHMgYmFzZWQgb24gdGhlIFpvcmFuCiAJICAzNjA1Ny8zNjA2NyBQQ0kgY29udHJvbGxlciBjaGlwc2V0LiBUaGlzIGluY2x1ZGVzIHRoZSBJb21lZ2EKQEAgLTMyLDcgKzMyLDcgQEAKIGNvbmZpZyBWSURFT19aT1JBTl9CVVoKIAl0cmlzdGF0ZSAiSW9tZWdhIEJ1eiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTExIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fU0FBNzE4NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBJb21lZ2EgQnV6IE1KUEVHIGNhcHR1cmUvcGxheWJhY2sgY2FyZC4KQEAgLTU4LDcgKzU4LDcgQEAKIGNvbmZpZyBWSURFT19aT1JBTl9MTUwzM1IxMAogCXRyaXN0YXRlICJMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBWSURFT19aT1JBTl9aUjM2MDYwCi0Jc2VsZWN0IFZJREVPX1NBQTcxMTQgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNzExWCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19BRFY3MTcwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJaGVscAogCSAgc3VwcG9ydCBmb3IgdGhlIExpbnV4IE1lZGlhIExhYnMgTE1MMzNSMTAgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawpAQCAtNjYsNyArNjYsNyBAQAogCiBjb25maWcgVklERU9fWk9SQU5fQVZTNkVZRVMKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MCAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fQlQ4NjYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fS1MwMTI3IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCmluZGV4IDk3YTNiYmUuLjVjMjdiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vdmlkZW9jb2RlYy5oCkBAIC05Nyw3ICs5Nyw3IEBACiAJICAgICAgIGF2YWlsYWJsZSkgLSBpdCByZXR1cm5zIDAgaWYgdGhlIG1vZGUgaXMgcG9zc2libGUKICAgIHNldF9zaXplIC0+IHRoaXMgZm4tcmVmLiBzZXRzIHRoZSBub3JtIGFuZCBpbWFnZSBzaXplIGZvcgogCSAgICAgICBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIChyZXR1cm5zIDAgb24gc3VjY2VzcykKLQkgICAgICAgdGhlIG5vcm0gcGFyYW0gaXMgZGVmaW5lZCBpbiB2aWRlb2Rldi5oIChWSURFT19NT0RFXyopCisJICAgICAgIHRoZSBub3JtIHBhcmFtIGlzIGRlZmluZWQgaW4gdmlkZW9kZXYyLmggKFY0TDJfU1REXyopCiAKICAgIGFkZGl0aW9uYWwgc2V0dXAgbWF5IGJlIGF2YWlsYWJsZSwgdG9vIC0gYnV0IHRoZSBjb2RlYyBzaG91bGQgd29yayB3aXRoCiAgICBzb21lIGRlZmF1bHQgdmFsdWVzIGV2ZW4gd2l0aG91dCB0aGlzCkBAIC0xNDQsOSArMTQ0LDggQEAKICNpZm5kZWYgX19MSU5VWF9WSURFT0NPREVDX0gKICNkZWZpbmUgX19MSU5VWF9WSURFT0NPREVDX0gKIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAKLS8vc2hvdWxkIGJlIGluIHZpZGVvZGV2LmggPz8/IChWSURfRE9fLi4uLikKICNkZWZpbmUgQ09ERUNfRE9fQ09NUFJFU1NJT04gMAogI2RlZmluZSBDT0RFQ19ET19FWFBBTlNJT04gICAxCiAKQEAgLTIzNywxMCArMjM2LDYgQEAKIAlfX3UzMiB3aWR0aCwgaGVpZ2h0OwkvKiBBcmVhIHRvIGNhcHR1cmUgKi8KIAlfX3UxNiBkZWNpbWF0aW9uOwkvKiBEZWNpbWF0aW9uIGRpdmlkZXIgKi8KIAlfX3UxNiBmbGFnczsJCS8qIEZsYWdzIGZvciBjYXB0dXJlICovCi0vKiBmbGFncyBhcmUgdGhlIHNhbWUgYXMgaW4gc3RydWN0IHZpZGVvX2NhcHR1cmUgLSBzZWUgdmlkZW9kZXYuaDoKLSNkZWZpbmUgVklERU9fQ0FQVFVSRV9PREQJCTAKLSNkZWZpbmUgVklERU9fQ0FQVFVSRV9FVkVOCQkxCi0qLwogCV9fdTE2IHF1YWxpdHk7CQkvKiBxdWFsaXR5IG9mIHRoZSB2aWRlbyAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCmluZGV4IGU4NzNhOTEuLmFmZWNmMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgX0JVWl9IXwogI2RlZmluZSBfQlVaX0hfCiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCiBzdHJ1Y3Qgem9yYW5fcmVxdWVzdGJ1ZmZlcnMgewogCXVuc2lnbmVkIGxvbmcgY291bnQ7CS8qIE51bWJlciBvZiBidWZmZXJzIGZvciBNSlBFRyBncmFiYmluZyAqLwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsJLyogU2l6ZSBQRVIgQlVGRkVSIGluIGJ5dGVzICovCkBAIC0xNzAsNyArMTcyLDcgQEAKICNlbmRpZgogI2RlZmluZSAgIFY0TF9NQVNLX0ZSQU1FICAgKFY0TF9NQVhfRlJBTUUgLSAxKQogCi0jZGVmaW5lIE1BWF9LTUFMTE9DX01FTSAoMTI4KjEwMjQpCisjZGVmaW5lIE1BWF9GUkFNRSAoQlVaX01BWF9GUkFNRSA+IFZJREVPX01BWF9GUkFNRSA/IEJVWl9NQVhfRlJBTUUgOiBWSURFT19NQVhfRlJBTUUpCiAKICNpbmNsdWRlICJ6cjM2MDU3LmgiCiAKQEAgLTI0MCw5ICsyNDIsNiBAQAogCiBzdHJ1Y3Qgem9yYW5fZm9ybWF0IHsKIAljaGFyICpuYW1lOwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCWludCBwYWxldHRlOwotI2VuZGlmCiAJX191MzIgZm91cmNjOwogCWludCBjb2xvcnNwYWNlOwogCWludCBkZXB0aDsKQEAgLTI4MywyMSArMjgyLDIxIEBACiAJaW50IGNvdW50OwogfTsKIAotc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgeworc3RydWN0IHpvcmFuX2J1ZmZlciB7CiAJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKLQlfX2xlMzIgKmZyYWdfdGFiOwkJLyogYWRkcmVzc2VzIG9mIGZyYWcgdGFibGUgKi8KLQl1MzIgZnJhZ190YWJfYnVzOwkvKiBzYW1lIHZhbHVlIGNhY2hlZCB0byBzYXZlIHRpbWUgaW4gSVNSICovCi0JZW51bSB6b3Jhbl9idWZmZXJfc3RhdGUgc3RhdGU7CS8qIG5vbi16ZXJvIGlmIGNvcnJlc3BvbmRpbmcgYnVmZmVyIGlzIGluIHVzZSBpbiBncmFiIHF1ZXVlICovCi0Jc3RydWN0IHpvcmFuX3N5bmMgYnM7CS8qIERPTkU6IGluZm8gdG8gcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCi19OwotCi1zdHJ1Y3Qgem9yYW5fdjRsX2J1ZmZlciB7Ci0Jc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcDsKLQljaGFyICpmYnVmZmVyOwkJLyogdmlydHVhbCAgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZidWZmZXJfcGh5czsJLyogcGh5c2ljYWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZidWZmZXJfYnVzOwkvKiBidXMgICAgICBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLwotCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBzdGF0ZTogdW51c2VkL3BlbmRpbmcvZG9uZSAqLwotCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBzdGF0ZTogdW51c2VkL3BlbmRpbmcvZG1hL2RvbmUgKi8KKwlzdHJ1Y3Qgem9yYW5fc3luYyBiczsJCS8qIERPTkU6IGluZm8gdG8gcmV0dXJuIHRvIGFwcGxpY2F0aW9uICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTMyICpmcmFnX3RhYjsJLyogYWRkcmVzc2VzIG9mIGZyYWcgdGFibGUgKi8KKwkJCXUzMiBmcmFnX3RhYl9idXM7CS8qIHNhbWUgdmFsdWUgY2FjaGVkIHRvIHNhdmUgdGltZSBpbiBJU1IgKi8KKwkJfSBqcGc7CisJCXN0cnVjdCB7CisJCQljaGFyICpmYnVmZmVyOwkJLyogdmlydHVhbCBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCQkJdW5zaWduZWQgbG9uZyBmYnVmZmVyX3BoeXM7LyogcGh5c2ljYWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIGxvbmcgZmJ1ZmZlcl9idXM7LyogYnVzIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCisJCX0gdjRsOworCX07CiB9OwogCiBlbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgewpAQCAtMzA3LDIxICszMDYsMTMgQEAKIH07CiAKIC8qIGJ1ZmZlciBjb2xsZWN0aW9ucyAqLwotc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3Qgeworc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgewogCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBhY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX2J1ZmZlciBidWZmZXJbQlVaX01BWF9GUkFNRV07CS8qIGJ1ZmZlcnMgKi8KLQlpbnQgbnVtX2J1ZmZlcnMsIGJ1ZmZlcl9zaXplOworCXVuc2lnbmVkIGludCBudW1fYnVmZmVycywgYnVmZmVyX3NpemU7CisJc3RydWN0IHpvcmFuX2J1ZmZlciBidWZmZXJbTUFYX0ZSQU1FXTsJLyogYnVmZmVycyAqLwogCXU4IGFsbG9jYXRlZDsJCS8qIEZsYWcgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICAqLwotCXU4IHJlYWR5X3RvX2JlX2ZyZWVkOwkvKiBoYWNrIC0gc2VlIHpvcmFuX2RyaXZlci5jICovCiAJdTggbmVlZF9jb250aWd1b3VzOwkvKiBGbGFnIGlmIGNvbnRpZ3VvdXMgYnVmZmVycyBhcmUgbmVlZGVkICovCi19OwotCi1zdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB7Ci0JZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IGFjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLwotCXN0cnVjdCB6b3Jhbl92NGxfYnVmZmVyIGJ1ZmZlcltWSURFT19NQVhfRlJBTUVdOwkvKiBidWZmZXJzICovCi0JaW50IG51bV9idWZmZXJzLCBidWZmZXJfc2l6ZTsKLQl1OCBhbGxvY2F0ZWQ7CQkvKiBGbGFnIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAgKi8KLQl1OCByZWFkeV90b19iZV9mcmVlZDsJLyogaGFjayAtIHNlZSB6b3Jhbl9kcml2ZXIuYyAqLworCS8qIG9ubHkgYXBwbGllcyB0byBqcGcgYnVmZmVycywgcmF3IGJ1ZmZlcnMgYXJlIGFsd2F5cyBjb250aWd1b3VzICovCiB9OwogCiBzdHJ1Y3Qgem9yYW47CkBAIC0zMzAsMjMgKzMyMSwyNyBAQAogc3RydWN0IHpvcmFuX2ZoIHsKIAlzdHJ1Y3Qgem9yYW4gKnpyOwogCi0JZW51bSB6b3Jhbl9tYXBfbW9kZSBtYXBfbW9kZTsJLyogRmxhZyB3aGljaCBidWZmZXJzZXQgd2lsbCBtYXAgYnkgbmV4dCBtbWFwKCkgKi8KKwllbnVtIHpvcmFuX21hcF9tb2RlIG1hcF9tb2RlOwkJLyogRmxhZyB3aGljaCBidWZmZXJzZXQgd2lsbCBtYXAgYnkgbmV4dCBtbWFwKCkgKi8KIAogCXN0cnVjdCB6b3Jhbl9vdmVybGF5X3NldHRpbmdzIG92ZXJsYXlfc2V0dGluZ3M7Ci0JdTMyICpvdmVybGF5X21hc2s7CS8qIG92ZXJsYXkgbWFzayAqLwotCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLworCXUzMiAqb3ZlcmxheV9tYXNrOwkJCS8qIG92ZXJsYXkgbWFzayAqLworCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCisKKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCBidWZmZXJzOwkvKiBidWZmZXJzJyBpbmZvICovCiAKIAlzdHJ1Y3Qgem9yYW5fdjRsX3NldHRpbmdzIHY0bF9zZXR0aW5nczsJLyogc3RydWN0dXJlIHdpdGggYSBsb3Qgb2YgdGhpbmdzIHRvIHBsYXkgd2l0aCAqLwotCXN0cnVjdCB6b3Jhbl92NGxfc3RydWN0IHY0bF9idWZmZXJzOwkvKiBWNEwgYnVmZmVycycgaW5mbyAqLwotCiAJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBqcGdfc2V0dGluZ3M7CS8qIHN0cnVjdHVyZSB3aXRoIGEgbG90IG9mIHRoaW5ncyB0byBwbGF5IHdpdGggKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLwogfTsKIAogc3RydWN0IGNhcmRfaW5mbyB7CiAJZW51bSBjYXJkX3R5cGUgdHlwZTsKIAljaGFyIG5hbWVbMzJdOwotCXUxNiBpMmNfZGVjb2RlciwgaTJjX2VuY29kZXI7CQkJLyogSTJDIHR5cGVzICovCisJY29uc3QgY2hhciAqaTJjX2RlY29kZXI7CS8qIGkyYyBkZWNvZGVyIGRldmljZSAqLworCWNvbnN0IGNoYXIgKm1vZF9kZWNvZGVyOwkvKiBpMmMgZGVjb2RlciBtb2R1bGUgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcnNfZGVjb2RlcjsKKwljb25zdCBjaGFyICppMmNfZW5jb2RlcjsJLyogaTJjIGVuY29kZXIgZGV2aWNlICovCisJY29uc3QgY2hhciAqbW9kX2VuY29kZXI7CS8qIGkyYyBlbmNvZGVyIG1vZHVsZSAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICphZGRyc19lbmNvZGVyOwogCXUxNiB2aWRlb192ZmUsIHZpZGVvX2NvZGVjOwkJCS8qIHZpZGVvY29kZWMgdHlwZXMgKi8KIAl1MTYgYXVkaW9fY2hpcDsJCQkJCS8qIGF1ZGlvIHR5cGUgKi8KIApAQCAtMzU2LDcgKzM1MSw3IEBACiAJCWNoYXIgbmFtZVszMl07CiAJfSBpbnB1dFtCVVpfTUFYX0lOUFVUXTsKIAotCWludCBub3JtczsKKwl2NGwyX3N0ZF9pZCBub3JtczsKIAlzdHJ1Y3QgdHZub3JtICp0dm5bM107CS8qIHN1cHBvcnRlZCBUViBub3JtcyAqLwogCiAJdTMyIGpwZWdfaW50OwkJLyogSlBFRyBpbnRlcnJ1cHQgKi8KQEAgLTM3NywxNCArMzcyLDE1IEBACiB9OwogCiBzdHJ1Y3Qgem9yYW4geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7CS8qICovCiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGkyY19hbGdvOwkvKiAqLwogCXUzMiBpMmNicjsKIAotCXN0cnVjdCBpMmNfY2xpZW50ICpkZWNvZGVyOwkvKiB2aWRlbyBkZWNvZGVyIGkyYyBjbGllbnQgKi8KLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZW5jb2RlcjsJLyogdmlkZW8gZW5jb2RlciBpMmMgY2xpZW50ICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICpkZWNvZGVyOwkvKiB2aWRlbyBkZWNvZGVyIHN1Yi1kZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmVuY29kZXI7CS8qIHZpZGVvIGVuY29kZXIgc3ViLWRldmljZSAqLwogCiAJc3RydWN0IHZpZGVvY29kZWMgKmNvZGVjOwkvKiB2aWRlbyBjb2RlYyAqLwogCXN0cnVjdCB2aWRlb2NvZGVjICp2ZmU7CS8qIHZpZGVvIGZyb250IGVuZCAqLwpAQCAtNDA1LDkgKzQwMSwxNSBAQAogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CS8qIFNwaW5sb2NrICovCiAKIAkvKiBWaWRlbyBmb3IgTGludXggcGFyYW1ldGVycyAqLwotCWludCBpbnB1dCwgbm9ybTsJLyogY2FyZCdzIG5vcm0gYW5kIGlucHV0IC0gbm9ybT1WSURFT19NT0RFXyogKi8KLQlpbnQgaHVlLCBzYXR1cmF0aW9uLCBjb250cmFzdCwgYnJpZ2h0bmVzczsJLyogQ3VycmVudCBwaWN0dXJlIHBhcmFtcyAqLwotCXN0cnVjdCB2aWRlb19idWZmZXIgYnVmZmVyOwkvKiBDdXJyZW50IGJ1ZmZlciBwYXJhbXMgKi8KKwlpbnQgaW5wdXQ7CS8qIGNhcmQncyBub3JtIGFuZCBpbnB1dCAtIG5vcm09VklERU9fTU9ERV8qICovCisJdjRsMl9zdGRfaWQgbm9ybTsKKworCS8qIEN1cnJlbnQgYnVmZmVyIHBhcmFtcyAqLworCXZvaWQgICAgKnZidWZfYmFzZTsKKwlpbnQgICAgIHZidWZfaGVpZ2h0LCB2YnVmX3dpZHRoOworCWludCAgICAgdmJ1Zl9kZXB0aDsKKwlpbnQgICAgIHZidWZfYnl0ZXNwZXJsaW5lOworCiAJc3RydWN0IHpvcmFuX292ZXJsYXlfc2V0dGluZ3Mgb3ZlcmxheV9zZXR0aW5nczsKIAl1MzIgKm92ZXJsYXlfbWFzazsJLyogb3ZlcmxheSBtYXNrICovCiAJZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IG92ZXJsYXlfYWN0aXZlOwkvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCkBAIC00MjcsNyArNDI5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHY0bF9wZW5kX3RhaWw7CiAJdW5zaWduZWQgbG9uZyB2NGxfc3luY190YWlsOwogCWludCB2NGxfcGVuZFtWNExfTUFYX0ZSQU1FXTsKLQlzdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KIAogCS8qIEJ1eiBNSlBFRyBwYXJhbWV0ZXJzICovCiAJZW51bSB6b3Jhbl9jb2RlY19tb2RlIGNvZGVjX21vZGU7CS8qIHN0YXR1cyBvZiBjb2RlYyAqLwpAQCAtNDU0LDcgKzQ1Niw3IEBACiAJaW50IGpwZ19wZW5kW0JVWl9NQVhfRlJBTUVdOwogCiAJLyogYXJyYXkgaW5kZXhlZCBieSBmcmFtZSBudW1iZXIgKi8KLQlzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLworCXN0cnVjdCB6b3Jhbl9idWZmZXJfY29sIGpwZ19idWZmZXJzOwkvKiBNSlBFRyBidWZmZXJzJyBpbmZvICovCiAKIAkvKiBBZGRpdGlvbmFsIHN0dWZmIGZvciB0ZXN0aW5nICovCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTQ4OCw2ICs0OTAsMTEgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB0ZXN0X3E7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6b3JhbiAqdG9fem9yYW4oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgem9yYW4sIHY0bDJfZGV2KTsKK30KKwogLyogVGhlcmUgd2FzIHNvbWV0aGluZyBjYWxsZWQgX0FMUEhBX0JVWiB0aGF0IHVzZWQgdGhlIFBDSSBhZGRyZXNzIGluc3RlYWQgb2YKICAqIHRoZSBrZXJuZWwgaW9tYXBwZWQgYWRkcmVzcyBmb3IgYnRyZWFkL2J0d3JpdGUuICAqLwogI2RlZmluZSBidHdyaXRlKGRhdCxhZHIpICAgIHdyaXRlbCgoZGF0KSwgenItPnpyMzYwNTdfbWVtKyhhZHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwppbmRleCA1ZDJmMDkwLi5mOTFiYmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuYwpAQCAtMzgsOCArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CkBAIC00NywxMSArNDYsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS9idDgxOS5oPgogCiAjaW5jbHVkZSAidmlkZW9jb2RlYy5oIgogI2luY2x1ZGUgInpvcmFuLmgiCkBAIC0xMDgsMjUgKzEwNiw4IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAiVmlkZW8gZGV2aWNlIG51bWJlciAoLTE9QXV0bykiKTsKIAotLyoKLSAgIE51bWJlciBhbmQgc2l6ZSBvZiBncmFiIGJ1ZmZlcnMgZm9yIFZpZGVvIDQgTGludXgKLSAgIFRoZSB2YXN0IG1ham9yaXR5IG9mIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IG5lZWQgbW9yZSB0aGFuIDIsCi0gICB0aGUgdmVyeSBwb3B1bGFyIEJUVFYgZHJpdmVyIGFjdHVhbGx5IGRvZXMgT05MWSBoYXZlIDIuCi0gICBUaW1lIHNlbnNpdGl2ZSBhcHBsaWNhdGlvbnMgbWlnaHQgbmVlZCBtb3JlLCB0aGUgbWF4aW11bQotICAgaXMgVklERU9fTUFYX0ZSQU1FIChkZWZpbmVkIGluIDxsaW51eC92aWRlb2Rldi5oPikuCi0KLSAgIFRoZSBzaXplIGlzIHNldCBzbyB0aGF0IHRoZSBtYXhpbXVtIHBvc3NpYmxlIHJlcXVlc3QKLSAgIGNhbiBiZSBzYXRpc2ZpZWQuIERlY3JlYXNlICBpdCwgaWYgYmlncGh5c19hcmVhIGFsbG9jJ2QKLSAgIG1lbW9yeSBpcyBsb3cuIElmIHlvdSBkb24ndCBoYXZlIHRoZSBiaWdwaHlzX2FyZWEgcGF0Y2gsCi0gICBzZXQgaXQgdG8gMTI4IEtCLiBXaWxsIHlvdSBhbGxvdyBvbmx5IHRvIGdyYWIgc21hbGwKLSAgIGltYWdlcyB3aXRoIFY0TCwgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiBub3RoaW5nLgotCi0gICB2NGxfYnVmc2l6ZSBoYXMgdG8gYmUgZ2l2ZW4gaW4gS0IgIQotCi0qLwotCi1pbnQgdjRsX25idWZzID0gMjsKLWludCB2NGxfYnVmc2l6ZSA9IDEyODsJCS8qIEV2ZXJ5Ym9keSBzaG91bGQgYmUgYWJsZSB0byB3b3JrIHdpdGggdGhpcyBzZXR0aW5nICovCitpbnQgdjRsX25idWZzID0gNDsKK2ludCB2NGxfYnVmc2l6ZSA9IDg2NDsJCS8qIEV2ZXJ5Ym9keSBzaG91bGQgYmUgYWJsZSB0byB3b3JrIHdpdGggdGhpcyBzZXR0aW5nICovCiBtb2R1bGVfcGFyYW0odjRsX25idWZzLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2NGxfbmJ1ZnMsICJNYXhpbXVtIG51bWJlciBvZiBWNEwgYnVmZmVycyB0byB1c2UiKTsKIG1vZHVsZV9wYXJhbSh2NGxfYnVmc2l6ZSwgaW50LCAwNjQ0KTsKQEAgLTI3Myw3ICsyNTQsNyBAQAogc3RhdGljIHZvaWQKIGRjMTBfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBkYzEwX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJLyogUGl4ZWwgY2xvY2sgc2VsZWN0aW9uICovCiAJR1BJTyh6ciwgNCwgMCk7CkBAIC0yODUsMTMgKzI2NiwxMyBAQAogc3RhdGljIHZvaWQKIGRjMTBwbHVzX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMHBsdXNfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBidXpfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBidXpfaW5pdCgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKIAkvKiBzb21lIHN0dWZmIGZyb20gSW9tZWdhICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCh6ci0+cGNpX2RldiwgMHhmYywgMHg5MDY4MGYxNSk7CkBAIC0zMDIsNyArMjgzLDcgQEAKIHN0YXRpYyB2b2lkCiBsbWwzM19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGxtbDMzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJR1BJTyh6ciwgMiwgMSk7CQkvLyBTZXQgQ29tcG9zaXRlIGlucHV0L291dHB1dAogfQpAQCAtMzMyLDUwICszMTMsNiBAQAogfQogCiBzdGF0aWMgY2hhciAqCi1pMmNpZF90b19tb2R1bGVuYW1lICh1MTYgaTJjX2lkKQotewotCWNoYXIgKm5hbWUgPSBOVUxMOwotCi0Jc3dpdGNoIChpMmNfaWQpIHsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTEwOgotCQluYW1lID0gInNhYTcxMTAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9TQUE3MTExQToKLQkJbmFtZSA9ICJzYWE3MTExIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExNDoKLQkJbmFtZSA9ICJzYWE3MTE0IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzE4NUI6Ci0JCW5hbWUgPSAic2FhNzE4NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzA6Ci0JCW5hbWUgPSAiYWR2NzE3MCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0FEVjcxNzU6Ci0JCW5hbWUgPSAiYWR2NzE3NSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODE5OgotCQluYW1lID0gImJ0ODE5IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NTY6Ci0JCW5hbWUgPSAiYnQ4NTYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDg2NjoKLQkJbmFtZSA9ICJidDg2NiI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1ZQWDMyMjA6Ci0JCW5hbWUgPSAidnB4MzIyMCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0tTMDEyNzoKLQkJbmFtZSA9ICJrczAxMjciOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIGNoYXIgKgogY29kZWNpZF90b19tb2R1bGVuYW1lICh1MTYgY29kZWNpZCkKIHsKIAljaGFyICpuYW1lID0gTlVMTDsKQEAgLTQyNSwxMSArMzYyLDI0IEBACiBzdGF0aWMgc3RydWN0IHR2bm9ybSBmNTBjY2lyNjAxX2F2czZleWVzID0geyA4NjQsIDcyMCwgNzQsIDgwNCwgNjI1LCA1NzYsIDE4IH07CiBzdGF0aWMgc3RydWN0IHR2bm9ybSBmNjBjY2lyNjAxX2F2czZleWVzID0geyA4NTgsIDcyMCwgNTYsIDc4OCwgNTI1LCA0ODAsIDE2IH07CiAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB2cHgzMjIwX2FkZHJzW10gPSB7IDB4NDMsIDB4NDcsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FhNzExMF9hZGRyc1tdID0geyAweDRlLCAweDRmLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxMTFfYWRkcnNbXSA9IHsgMHgyNSwgMHgyNCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTE0X2FkZHJzW10gPSB7IDB4MjEsIDB4MjAsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWR2NzE3eF9hZGRyc1tdID0geyAweDZhLCAweDZiLCAweDJhLCAweDJiLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGtzMDEyN19hZGRyc1tdID0geyAweDZjLCAweDZkLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxODVfYWRkcnNbXSA9IHsgMHg0NCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBidDgxOV9hZGRyc1tdID0geyAweDQ1LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJ0ODU2X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnQ4NjZfYWRkcnNbXSA9IHsgMHg0NCwgSTJDX0NMSUVOVF9FTkQgfTsKKwogc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gem9yYW5fY2FyZHNbTlVNX0NBUkRTXSBfX2RldmluaXRkYXRhID0gewogCXsKIAkJLnR5cGUgPSBEQzEwX29sZCwKIAkJLm5hbWUgPSAiREMxMChvbGQpIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTQzOSw3ICszODksNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTQ1Nyw4ICs0MDcsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMxMF9uZXcsCiAJCS5uYW1lID0gIkRDMTAobmV3KSIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTAiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAzLApAQCAtNDY3LDcgKzQyMSw3IEBACiAJCQkJeyA3LCAiUy1WaWRlbyIgfSwKIAkJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CiAJCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCQkmZjUwc3FwaXhlbCwKIAkJCQkmZjYwc3FwaXhlbCwKQEAgLTQ4NCw4ICs0MzgsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMxMHBsdXMsCiAJCS5uYW1lID0gIkRDMTBwbHVzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTEwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTEwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDMsCkBAIC00OTQsNyArNDUyLDcgQEAKIAkJCXsgNywgIlMtVmlkZW8iIH0sCiAJCQl7IDUsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWwsCiAJCQkmZjYwc3FwaXhlbCwKQEAgLTUxMiw4ICs0NzAsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMzMCwKIAkJLm5hbWUgPSAiREMzMCIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInZweDMyMjBhIiwKKwkJLm1vZF9kZWNvZGVyID0gInZweDMyMjAiLAorCQkuYWRkcnNfZGVjb2RlciA9IHZweDMyMjBfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzUiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA1MCwKIAkJLnZpZGVvX3ZmZSA9IENPREVDX1RZUEVfWlIzNjAxNiwKIApAQCAtNTIzLDcgKzQ4NSw3IEBACiAJCQl7IDIsICJTLVZpZGVvIiB9LAogCQkJeyAwLCAiSW50ZXJuYWwvY29tcCIgfQogCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCSZmNTBzcXBpeGVsX2RjMTAsCiAJCQkmZjYwc3FwaXhlbF9kYzEwLApAQCAtNTQxLDggKzUwMywxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBEQzMwcGx1cywKIAkJLm5hbWUgPSAiREMzMHBsdXMiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTU1Miw3ICs1MTgsNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTU3MCw4ICs1MzYsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gTE1MMzMsCiAJCS5uYW1lID0gIkxNTDMzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0JUODE5LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCisJCS5pMmNfZGVjb2RlciA9ICJidDgxOWEiLAorCQkubW9kX2RlY29kZXIgPSAiYnQ4MTkiLAorCQkuYWRkcnNfZGVjb2RlciA9IGJ0ODE5X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYnQ4NTYiLAorCQkubW9kX2VuY29kZXIgPSAiYnQ4NTYiLAorCQkuYWRkcnNfZW5jb2RlciA9IGJ0ODU2X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC01NzksNyArNTQ5LDcgQEAKIAkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMiwKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUwsCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMV9sbWwzMywKIAkJCSZmNjBjY2lyNjAxX2xtbDMzLApAQCAtNTk3LDggKzU2NywxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBMTUwzM1IxMCwKIAkJLm5hbWUgPSAiTE1MMzNSMTAiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExNCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzAsCisJCS5pMmNfZGVjb2RlciA9ICJzYWE3MTE0IiwKKwkJLm1vZF9kZWNvZGVyID0gInNhYTcxMTUiLAorCQkuYWRkcnNfZGVjb2RlciA9IHNhYTcxMTRfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTcwIiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzAiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMiwKQEAgLTYwNiw3ICs1ODAsNyBAQAogCQkJeyAwLCAiQ29tcG9zaXRlIiB9LAogCQkJeyA3LCAiUy1WaWRlbyIgfQogCQl9LAotCQkubm9ybXMgPSAyLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTCwKIAkJLnR2biA9IHsKIAkJCSZmNTBjY2lyNjAxX2xtMzNyMTAsCiAJCQkmZjYwY2NpcjYwMV9sbTMzcjEwLApAQCAtNjI0LDggKzU5OCwxMiBAQAogCX0sIHsKIAkJLnR5cGUgPSBCVVosCiAJCS5uYW1lID0gIkJ1eiIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxODVCLAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExMSIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTE1IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTExX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAic2FhNzE4NSIsCisJCS5tb2RfZW5jb2RlciA9ICJzYWE3MTg1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBzYWE3MTg1X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC02MzMsNyArNjExLDcgQEAKIAkJCXsgMywgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMSwKIAkJCSZmNjBjY2lyNjAxLApAQCAtNjUzLDggKzYzMSwxMiBAQAogCQkubmFtZSA9ICI2LUV5ZXMiLAogCQkvKiBBdmVyTWVkaWEgY2hvc2Ugbm90IHRvIGJyYW5kIHRoZSA2LUV5ZXMuIFRodXMgaXQKIAkJICAgY2FuJ3QgYmUgYXV0b2RldGVjdGVkLCBhbmQgcmVxdWlyZXMgY2FyZD14LiAqLwotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfS1MwMTI3LAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCisJCS5pMmNfZGVjb2RlciA9ICJrczAxMjciLAorCQkubW9kX2RlY29kZXIgPSAia3MwMTI3IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBrczAxMjdfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJidDg2NiIsCisJCS5tb2RfZW5jb2RlciA9ICJidDg2NiIsCisJCS5hZGRyc19lbmNvZGVyID0gYnQ4NjZfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMTAsCkBAIC02NzAsNyArNjUyLDcgQEAKIAkJCXsxMCwgIlMtVmlkZW8gMyIgfSwKIAkJCXsxNSwgIllDYkNyIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDIsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDFfYXZzNmV5ZXMsCiAJCQkmZjYwY2NpcjYwMV9hdnM2ZXllcywKQEAgLTczNSw2OSArNzE3LDYgQEAKIAlidHdyaXRlKHpyLT5pMmNiciwgWlIzNjA1N19JMkNCUik7CiB9CiAKLXN0YXRpYyBpbnQKLXpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXIgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCByZXMgPSAwOwotCi0JZHByaW50aygyLAotCQlLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF9yZWdpc3RlcigpIC0gZHJpdmVyIGlkID0gJWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjbGllbnQtPmRyaXZlci0+aWQpOwotCi0JbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JaWYgKHpyLT51c2VyID4gMCkgewotCQkvKiB3ZSdyZSBhbHJlYWR5IGJ1c3ksIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8KLQkJICogdGhlbS4uLiBDb3VsZCBkbyBhIGxvdCBvZiBzdHVmZiBoZXJlLCBidXQgdGhpcwotCQkgKiBpcyBlYXNpZXN0LiAoRGlkIEkgZXZlciBtZW50aW9uIEknbSBhIGxhenkgYXNzPykKLQkJICovCi0JCXJlcyA9IC1FQlVTWTsKLQkJZ290byBjbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi0JaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZGVjb2RlcikKLQkJenItPmRlY29kZXIgPSBjbGllbnQ7Ci0JZWxzZSBpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IHpyLT5jYXJkLmkyY19lbmNvZGVyKQotCQl6ci0+ZW5jb2RlciA9IGNsaWVudDsKLQllbHNlIHsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBjbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm47Ci0JfQotCi1jbGllbnRyZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXIgKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHpvcmFuICp6ciA9IChzdHJ1Y3Qgem9yYW4gKikgaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCWludCByZXMgPSAwOwotCi0JZHByaW50aygyLCBLRVJOX0RFQlVHICIlczogaTJjX2NsaWVudF91bnJlZ2lzdGVyKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmICh6ci0+dXNlciA+IDApIHsKLQkJcmVzID0gLUVCVVNZOwotCQlnb3RvIGNsaWVudHVucmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCS8qIHRyeSB0byBsb2NhdGUgaXQgKi8KLQlpZiAoY2xpZW50ID09IHpyLT5lbmNvZGVyKSB7Ci0JCXpyLT5lbmNvZGVyID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNsaWVudCA9PSB6ci0+ZGVjb2RlcikgewotCQl6ci0+ZGVjb2RlciA9IE5VTEw7Ci0JCXNucHJpbnRmKFpSX0RFVk5BTUUoenIpLCBzaXplb2YoWlJfREVWTkFNRSh6cikpLCAiTUpQRUdbJWRdIiwgenItPmlkKTsKLQl9Ci1jbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjoKLQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIHpvcmFuX2kyY19iaXRfZGF0YV90ZW1wbGF0ZSA9IHsKIAkuc2V0c2RhID0gem9yYW5faTJjX3NldHNkYSwKIAkuc2V0c2NsID0gem9yYW5faTJjX3NldHNjbCwKQEAgLTgxMywxMyArNzMyLDEwIEBACiAJbWVtY3B5KCZ6ci0+aTJjX2FsZ28sICZ6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEpKTsKIAl6ci0+aTJjX2FsZ28uZGF0YSA9IHpyOwotCXpyLT5pMmNfYWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7CiAJenItPmkyY19hZGFwdGVyLmlkID0gSTJDX0hXX0JfWlIzNjA2NzsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3JlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF9yZWdpc3RlcjsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xpZW50X3VucmVnaXN0ZXIgPSB6b3Jhbl9pMmNfY2xpZW50X3VucmVnaXN0ZXI7CiAJc3RybGNweSh6ci0+aTJjX2FkYXB0ZXIubmFtZSwgWlJfREVWTkFNRSh6ciksCiAJCXNpemVvZih6ci0+aTJjX2FkYXB0ZXIubmFtZSkpOwotCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgenIpOworCWkyY19zZXRfYWRhcGRhdGEoJnpyLT5pMmNfYWRhcHRlciwgJnpyLT52NGwyX2Rldik7CiAJenItPmkyY19hZGFwdGVyLmFsZ29fZGF0YSA9ICZ6ci0+aTJjX2FsZ287CiAJenItPmkyY19hZGFwdGVyLmRldi5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKIAlyZXR1cm4gaTJjX2JpdF9hZGRfYnVzKCZ6ci0+aTJjX2FkYXB0ZXIpOwpAQCAtODM1LDE5ICs3NTEsMjAgQEAKIAogaW50CiB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MgKHN0cnVjdCB6b3JhbiAgICAgICAgICAgICAgKnpyLAotCQkJICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncykKKwkJCSAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MsCisJCQkgIGludCB0cnkpCiB7CiAJaW50IGVyciA9IDAsIGVycjAgPSAwOwogCiAJZHByaW50ayg0LAogCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWM6ICVkLCBIZGNtOiAlZCwgVmRjbTogJWQsIFRkY206ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24sIHNldHRpbmdzLT5Ib3JEY20sCisJCSIlczogJXMgLSBkZWM6ICVkLCBIZGNtOiAlZCwgVmRjbTogJWQsIFRkY206ICVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHNldHRpbmdzLT5kZWNpbWF0aW9uLCBzZXR0aW5ncy0+SG9yRGNtLAogCQlzZXR0aW5ncy0+VmVyRGNtLCBzZXR0aW5ncy0+VG1wRGNtKTsKIAlkcHJpbnRrKDQsCiAJCUtFUk5fREVCVUcKLQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIHg6ICVkLCB5OiAlZCwgdzogJWQsIHk6ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmltZ194LCBzZXR0aW5ncy0+aW1nX3ksCisJCSIlczogJXMgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+aW1nX3gsIHNldHRpbmdzLT5pbWdfeSwKIAkJc2V0dGluZ3MtPmltZ193aWR0aCwgc2V0dGluZ3MtPmltZ19oZWlnaHQpOwogCS8qIENoZWNrIGRlY2ltYXRpb24sIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZGVjaW1hdGlvbiA9IDEsIDIsIDQgKi8KIAlzd2l0Y2ggKHNldHRpbmdzLT5kZWNpbWF0aW9uKSB7CkBAIC04NzksOCArNzk2LDggQEAKIAkJaWYgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0RFQlVHCi0JCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIEhEZWMgYnkgNCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBEQzEwXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gSERlYyBieSA0IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIERDMTBcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWVycjArKzsKIAkJCWJyZWFrOwogCQl9CkBAIC05MDAsNTAgKzgxNyw3MyBAQAogCQkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBkYXRhIHRoZSB1c2VyIGhhcyBzZXQgKi8KIAogCQlpZiAoc2V0dGluZ3MtPkhvckRjbSAhPSAxICYmIHNldHRpbmdzLT5Ib3JEY20gIT0gMiAmJgotCQkgICAgKHpyLT5jYXJkLnR5cGUgPT0gREMxMF9uZXcgfHwgc2V0dGluZ3MtPkhvckRjbSAhPSA0KSkKKwkJICAgICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3IHx8IHNldHRpbmdzLT5Ib3JEY20gIT0gNCkpIHsKKwkJCXNldHRpbmdzLT5Ib3JEY20gPSBjbGFtcChzZXR0aW5ncy0+SG9yRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5WZXJEY20gIT0gMSAmJiBzZXR0aW5ncy0+VmVyRGNtICE9IDIpIHsKKwkJCXNldHRpbmdzLT5WZXJEY20gPSBjbGFtcChzZXR0aW5ncy0+VmVyRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5UbXBEY20gIT0gMSAmJiBzZXR0aW5ncy0+VG1wRGNtICE9IDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5UbXBEY20gIT0gMSAmJiBzZXR0aW5ncy0+VG1wRGNtICE9IDIpIHsKKwkJCXNldHRpbmdzLT5UbXBEY20gPSBjbGFtcChzZXR0aW5ncy0+VG1wRGNtLCAxLCAyKTsKIAkJCWVycjArKzsKKwkJfQogCQlpZiAoc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDEgJiYKLQkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKQorCQkgICAgc2V0dGluZ3MtPmZpZWxkX3Blcl9idWZmICE9IDIpIHsKKwkJCXNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiA9IGNsYW1wKHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3ggPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3ggPCAwKSB7CisJCQlzZXR0aW5ncy0+aW1nX3ggPSAwOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ195IDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ195IDwgMCkgeworCQkJc2V0dGluZ3MtPmltZ195ID0gMDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCB8fCBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkgeworCQkJc2V0dGluZ3MtPmltZ193aWR0aCA9IGNsYW1wKHNldHRpbmdzLT5pbWdfd2lkdGgsIDAsIChpbnQpQlVaX01BWF9XSURUSCk7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCA8IDApCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0IDwgMCB8fCBzZXR0aW5ncy0+aW1nX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikgeworCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSBjbGFtcChzZXR0aW5ncy0+aW1nX2hlaWdodCwgMCwgQlVaX01BWF9IRUlHSFQgLyAyKTsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeCArIHNldHRpbmdzLT5pbWdfd2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3ggKyBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkgeworCQkJc2V0dGluZ3MtPmltZ194ID0gQlVaX01BWF9XSURUSCAtIHNldHRpbmdzLT5pbWdfd2lkdGg7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3kgKyBzZXR0aW5ncy0+aW1nX2hlaWdodCA+Ci0JCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfeSArIHNldHRpbmdzLT5pbWdfaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKSB7CisJCQlzZXR0aW5ncy0+aW1nX3kgPSBCVVpfTUFYX0hFSUdIVCAvIDIgLSBzZXR0aW5ncy0+aW1nX2hlaWdodDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5Ib3JEY20gJiYgc2V0dGluZ3MtPlZlckRjbSkgewotCQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggJQotCQkJICAgICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pICE9IDApCi0JCQkJZXJyMCsrOwotCQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ICUKLQkJCSAgICAoOCAqIHNldHRpbmdzLT5WZXJEY20pICE9IDApCi0JCQkJZXJyMCsrOworCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoICUgKDE2ICogc2V0dGluZ3MtPkhvckRjbSkgIT0gMCkgeworCQkJc2V0dGluZ3MtPmltZ193aWR0aCAtPSBzZXR0aW5ncy0+aW1nX3dpZHRoICUgKDE2ICogc2V0dGluZ3MtPkhvckRjbSk7CisJCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCA9PSAwKQorCQkJCXNldHRpbmdzLT5pbWdfd2lkdGggPSAxNiAqIHNldHRpbmdzLT5Ib3JEY207CisJCQllcnIwKys7CisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ICUgKDggKiBzZXR0aW5ncy0+VmVyRGNtKSAhPSAwKSB7CisJCQlzZXR0aW5ncy0+aW1nX2hlaWdodCAtPSBzZXR0aW5ncy0+aW1nX2hlaWdodCAlICg4ICogc2V0dGluZ3MtPlZlckRjbSk7CisJCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgPT0gMCkKKwkJCQlzZXR0aW5ncy0+aW1nX2hlaWdodCA9IDggKiBzZXR0aW5ncy0+VmVyRGNtOworCQkJZXJyMCsrOwogCQl9CiAKLQkJaWYgKGVycjApIHsKKwkJaWYgKCF0cnkgJiYgZXJyMCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGVycm9yIGluIHBhcmFtcyBmb3IgZGVjaW1hdGlvbiA9IDBcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBlcnJvciBpbiBwYXJhbXMgZm9yIGRlY2ltYXRpb24gPSAwXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBjaGVja19qcGdfc2V0dGluZ3MoKSAtIGRlY2ltYXRpb24gPSAlZCwgbXVzdCBiZSAwLCAxLCAyIG9yIDRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgc2V0dGluZ3MtPmRlY2ltYXRpb24pOworCQkJIiVzOiAlcyAtIGRlY2ltYXRpb24gPSAlZCwgbXVzdCBiZSAwLCAxLCAyIG9yIDRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKIAkJZXJyKys7CiAJCWJyZWFrOwogCX0KQEAgLTEwMjEsMTIgKzk2MSwxMCBAQAogCSAgICAgICBzaXplb2YoenItPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSkpOwogCXpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzID0KIAkgICAgSlBFR19NQVJLRVJfREhUIHwgSlBFR19NQVJLRVJfRFFUOwotCWkgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZ6ci0+anBnX3NldHRpbmdzKTsKKwlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncywgMCk7CiAJaWYgKGkpCi0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW5faW5pdF9wYXJhbXMoKSBpbnRlcm5hbCBlcnJvclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIGludGVybmFsIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCWNsZWFyX2ludGVycnVwdF9jb3VudGVycyh6cik7CiAJenItPnRlc3RpbmcgPSAwOwpAQCAtMTA2MiwxMyArMTAwMCwxMSBAQAogenIzNjA1N19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewogCWludCBqLCBlcnI7Ci0JaW50IHR3byA9IDI7Ci0JaW50IHplcm8gPSAwOwogCiAJZHByaW50aygxLAogCQlLRVJOX0lORk8KLQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGluaXRpYWxpemluZyBjYXJkWyVkXSwgenI9JXBcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCB6ci0+aWQsIHpyKTsKKwkJIiVzOiAlcyAtIGluaXRpYWxpemluZyBjYXJkWyVkXSwgenI9JXBcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgenItPmlkLCB6cik7CiAKIAkvKiBkZWZhdWx0IHNldHVwIG9mIGFsbCBwYXJhbWV0ZXJzIHdoaWNoIHdpbGwgcGVyc2lzdCBiZXR3ZWVuIG9wZW5zICovCiAJenItPnVzZXIgPSAwOwpAQCAtMTA3OSwyNCArMTAxNSwzMiBAQAogCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCi0JenItPmJ1ZmZlci5iYXNlID0gKHZvaWQgKikgdmlkbWVtOwotCXpyLT5idWZmZXIud2lkdGggPSAwOwotCXpyLT5idWZmZXIuaGVpZ2h0ID0gMDsKLQl6ci0+YnVmZmVyLmRlcHRoID0gMDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IDA7CisJenItPnZidWZfYmFzZSA9ICh2b2lkICopIHZpZG1lbTsKKwl6ci0+dmJ1Zl93aWR0aCA9IDA7CisJenItPnZidWZfaGVpZ2h0ID0gMDsKKwl6ci0+dmJ1Zl9kZXB0aCA9IDA7CisJenItPnZidWZfYnl0ZXNwZXJsaW5lID0gMDsKIAogCS8qIEF2b2lkIG5vbnNlbnNlIHNldHRpbmdzIGZyb20gdXNlciBmb3IgZGVmYXVsdCBpbnB1dC9ub3JtICovCi0JaWYgKGRlZmF1bHRfbm9ybSA8IFZJREVPX01PREVfUEFMICYmCi0JICAgIGRlZmF1bHRfbm9ybSA+IFZJREVPX01PREVfU0VDQU0pCi0JCWRlZmF1bHRfbm9ybSA9IFZJREVPX01PREVfUEFMOwotCXpyLT5ub3JtID0gZGVmYXVsdF9ub3JtOwotCWlmICghKHpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dKSkgeworCWlmIChkZWZhdWx0X25vcm0gPCAwICYmIGRlZmF1bHRfbm9ybSA+IDIpCisJCWRlZmF1bHRfbm9ybSA9IDA7CisJaWYgKGRlZmF1bHRfbm9ybSA9PSAwKSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfUEFMOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzBdOworCX0gZWxzZSBpZiAoZGVmYXVsdF9ub3JtID09IDEpIHsKKwkJenItPm5vcm0gPSBWNEwyX1NURF9OVFNDOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzFdOworCX0gZWxzZSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfU0VDQU07CisJCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bMl07CisJfQorCWlmICh6ci0+dGltaW5nID09IE5VTEwpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHpyMzYwNTdfaW5pdCgpIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJenItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKLQkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blt6ci0+bm9ybV07CisJCQkiJXM6ICVzIC0gZGVmYXVsdCBUViBzdGFuZGFyZCBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLiBQQUwgd2lsbCBiZSB1c2VkLlxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfUEFMOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzBdOwogCX0KIAogCWlmIChkZWZhdWx0X2lucHV0ID4genItPmNhcmQuaW5wdXRzLTEpIHsKQEAgLTExMDgsMTIgKzEwNTIsNiBAQAogCX0KIAl6ci0+aW5wdXQgPSBkZWZhdWx0X2lucHV0OwogCi0JLyogU2hvdWxkIHRoZSBmb2xsb3dpbmcgYmUgcmVzZXQgYXQgZXZlcnkgb3BlbiA/ICovCi0JenItPmh1ZSA9IDMyNzY4OwotCXpyLT5jb250cmFzdCA9IDMyNzY4OwotCXpyLT5zYXR1cmF0aW9uID0gMzI3Njg7Ci0JenItPmJyaWdodG5lc3MgPSAzMjc2ODsKLQogCS8qIGRlZmF1bHQgc2V0dXAgKHdpbGwgYmUgcmVwZWF0ZWQgYXQgZXZlcnkgb3BlbikgKi8KIAl6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKHpyKTsKIApAQCAtMTEyNCw4ICsxMDYyLDggQEAKIAlpZiAoIXpyLT5zdGF0X2NvbSB8fCAhenItPnZpZGVvX2RldikgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGttYWxsb2MgKFNUQVRfQ09NKSBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0ga21hbGxvYyAoU1RBVF9DT00pIGZhaWxlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KQEAgLTExMzcsNiArMTA3NSw3IEBACiAJICogICBOb3cgYWRkIHRoZSB0ZW1wbGF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGRldmljZSB1bml0LgogCSAqLwogCW1lbWNweSh6ci0+dmlkZW9fZGV2LCAmem9yYW5fdGVtcGxhdGUsIHNpemVvZih6b3Jhbl90ZW1wbGF0ZSkpOworCXpyLT52aWRlb19kZXYtPnBhcmVudCA9ICZ6ci0+cGNpX2Rldi0+ZGV2OwogCXN0cmNweSh6ci0+dmlkZW9fZGV2LT5uYW1lLCBaUl9ERVZOQU1FKHpyKSk7CiAJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yW3pyLT5pZF0pOwogCWlmIChlcnIgPCAwKQpAQCAtMTE0OCw4ICsxMDg3LDEwIEBACiAJCWRldGVjdF9ndWVzdF9hY3Rpdml0eSh6cik7CiAJdGVzdF9pbnRlcnJ1cHRzKHpyKTsKIAlpZiAoIXBhc3NfdGhyb3VnaCkgewotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMiwgMCB9OworCisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KIAogCXpyLT56b3Jhbl9wcm9jID0gTlVMTDsKQEAgLTExNjQsNyArMTEwNSw4IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB6b3Jhbl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCB6b3JhbiAqenIgPSB0b196b3Jhbih2NGwyX2Rldik7CiAKIAlpZiAoIXpyLT5pbml0aWFsaXplZCkKIAkJZ290byBleGl0X2ZyZWU7CkBAIC0xMTk3LDcgKzExMzksNyBAQAogCXBjaV9kaXNhYmxlX2RldmljZSh6ci0+cGNpX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoenItPnZpZGVvX2Rldik7CiBleGl0X2ZyZWU6Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpyLT52NGwyX2Rldik7CiAJa2ZyZWUoenIpOwogfQogCkBAIC0xMjE1LDEwICsxMTU3LDggQEAKIAogCW0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fc2V0dXBfdmlkZW9jb2RlYygpIC0gbm8gbWVtb3J5XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBtZW1vcnlcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gbTsKIAl9CiAKQEAgLTEyNTYsNiArMTE5NiwxOCBAQAogCXJldHVybiBtOwogfQogCitzdGF0aWMgdm9pZCB6b3Jhbl9zdWJkZXZfbm90aWZ5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gdG9fem9yYW4oc2QtPnY0bDJfZGV2KTsKKworCS8qIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCisJICAgTE1MMzMgY2FyZCB1c2VzIEdQSU8oNykgZm9yIHRoYXQuICovCisJaWYgKGNtZCA9PSBCVDgxOV9GSUZPX1JFU0VUX0xPVykKKwkJR1BJTyh6ciwgNywgMCk7CisJZWxzZSBpZiAoY21kID09IEJUODE5X0ZJRk9fUkVTRVRfSElHSCkKKwkJR1BJTyh6ciwgNywgMSk7Cit9CisKIC8qCiAgKiAgIFNjYW4gZm9yIGEgQnV6IGNhcmQgKGFjdHVhbGx5IGZvciB0aGUgUENJIGNvbnRyb2xsZXIgWlIzNjA1NyksCiAgKiAgIHJlcXVlc3QgdGhlIGlycSBhbmQgbWFwIHRoZSBpbyBtZW1vcnkKQEAgLTEyNjksMzQgKzEyMjEsMzMgQEAKIAlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl92ZmUgPSBOVUxMOwogCXN0cnVjdCB2aWRlb2NvZGVjX21hc3RlciAqbWFzdGVyX2NvZGVjID0gTlVMTDsKIAlpbnQgY2FyZF9udW07Ci0JY2hhciAqaTJjX2VuY19uYW1lLCAqaTJjX2RlY19uYW1lLCAqY29kZWNfbmFtZSwgKnZmZV9uYW1lOworCWNoYXIgKmNvZGVjX25hbWUsICp2ZmVfbmFtZTsKIAl1bnNpZ25lZCBpbnQgbnI7CiAKIAogCW5yID0gem9yYW5fbnVtKys7CiAJaWYgKG5yID49IEJVWl9NQVgpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZHJpdmVyIGxpbWl0ZWQgdG8gJWQgY2FyZChzKSBtYXhpbXVtXG4iLAorCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogZHJpdmVyIGxpbWl0ZWQgdG8gJWQgY2FyZChzKSBtYXhpbXVtXG4iLAogCQkJWk9SQU5fTkFNRSwgQlVaX01BWCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCXpyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF6cikgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGt6YWxsb2MgZmFpbGVkXG4iLAotCQkJWk9SQU5fTkFNRSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIGt6YWxsb2MgZmFpbGVkXG4iLAorCQkJWk9SQU5fTkFNRSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJenItPnY0bDJfZGV2Lm5vdGlmeSA9IHpvcmFuX3N1YmRldl9ub3RpZnk7CisJaWYgKHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZ6ci0+djRsMl9kZXYpKQorCQlnb3RvIHpyX2ZyZWVfbWVtOwogCXpyLT5wY2lfZGV2ID0gcGRldjsKIAl6ci0+aWQgPSBucjsKIAlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyV1XSIsIHpyLT5pZCk7CiAJc3Bpbl9sb2NrX2luaXQoJnpyLT5zcGlubG9jayk7CiAJbXV0ZXhfaW5pdCgmenItPnJlc291cmNlX2xvY2spOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKLQkJZ290byB6cl9mcmVlX21lbTsKKwkJZ290byB6cl91bnJlZzsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZSh6ci0+cGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmenItPnJldmlzaW9uKTsKIAogCWRwcmludGsoMSwKQEAgLTEzMjMsNyArMTI3NCw3IEBACiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvLWRldGVjdCBaUjM2MDU3IGJhc2VkIGNhcmRzXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCWdvdG8genJfZnJlZV9tZW07CisJCQlnb3RvIHpyX3VucmVnOwogCQl9CiAKIAkJY2FyZF9udW0gPSBlbnQtPmRyaXZlcl9kYXRhOwpAQCAtMTMzMiw3ICsxMjgzLDcgQEAKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogVW5rbm93biBjYXJkLCB0cnkgc3BlY2lmeWluZyBjYXJkPVggbW9kdWxlIHBhcmFtZXRlclxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOworCQkJZ290byB6cl91bnJlZzsKIAkJfQogCQlkcHJpbnRrKDMsCiAJCQlLRVJOX0RFQlVHCkBAIC0xMzQ1LDcgKzEyOTYsNyBAQAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBVc2VyIHNwZWNpZmllZCBjYXJkIHR5cGUgJWQgb3V0IG9mIHJhbmdlICgwIC4uICVkKVxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSwgY2FyZF9udW0sIE5VTV9DQVJEUyAtIDEpOwotCQkJZ290byB6cl9mcmVlX21lbTsKKwkJCWdvdG8genJfdW5yZWc7CiAJCX0KIAl9CiAKQEAgLTEzNjAsMTEgKzEzMTEsOSBAQAogCiAJenItPnpyMzYwNTdfbWVtID0gcGNpX2lvcmVtYXBfYmFyKHpyLT5wY2lfZGV2LCAwKTsKIAlpZiAoIXpyLT56cjM2MDU3X21lbSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiAlcygpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcygpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwotCQlnb3RvIHpyX2ZyZWVfbWVtOworCQlnb3RvIHpyX3VucmVnOwogCX0KIAogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpvcmFuX2lycSwKQEAgLTEzNzMsMTggKzEzMjIsMTggQEAKIAkJaWYgKHJlc3VsdCA9PSAtRUlOVkFMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gYmFkIGlycSBudW1iZXIgb3IgaGFuZGxlclxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVCVVNZKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gSVJRICVkIGJ1c3ksIGNoYW5nZSB5b3VyIFBuUCBjb25maWcgaW4gQklPU1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgenItPnBjaV9kZXYtPmlycSk7CisJCQkJIiVzOiAlcyAtIElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB6ci0+cGNpX2Rldi0+aXJxKTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCByZXN1bHQpOworCQkJCSIlczogJXMgLSBjYW4ndCBhc3NpZ24gaXJxLCBlcnJvciBjb2RlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgcmVzdWx0KTsKIAkJfQogCQlnb3RvIHpyX3VubWFwOwogCX0KQEAgLTEzOTQsOSArMTM0Myw3IEBACiAJCQkgICAgICZsYXRlbmN5KTsKIAluZWVkX2xhdGVuY3kgPSB6ci0+cmV2aXNpb24gPiAxID8gMzIgOiA0ODsKIAlpZiAobGF0ZW5jeSAhPSBuZWVkX2xhdGVuY3kpIHsKLQkJZHByaW50aygyLAotCQkJS0VSTl9JTkZPCi0JCQkiJXM6IENoYW5naW5nIFBDSSBsYXRlbmN5IGZyb20gJWQgdG8gJWRcbiIsCisJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogQ2hhbmdpbmcgUENJIGxhdGVuY3kgZnJvbSAlZCB0byAlZFxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBsYXRlbmN5LCBuZWVkX2xhdGVuY3kpOwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLAogCQkJCSAgICAgIG5lZWRfbGF0ZW5jeSk7CkBAIC0xNDA3LDU0ICsxMzU0LDIwIEBACiAJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgaTJjIGJ1cy4uLlxuIiwKIAkJWlJfREVWTkFNRSh6cikpOwogCi0JLyogaTJjIGRlY29kZXIgKi8KLQlpZiAoZGVjb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCWkyY19kZWNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZGVjb2Rlclt6ci0+aWRdKTsKLQkJenItPmNhcmQuaTJjX2RlY29kZXIgPSBkZWNvZGVyW3pyLT5pZF07Ci0JfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZGVjb2RlciAhPSAwKSB7Ci0JCWkyY19kZWNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2RlY29kZXIpOwotCX0gZWxzZSB7Ci0JCWkyY19kZWNfbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGkyY19kZWNfbmFtZSkgewotCQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZGVjX25hbWUpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZGVjX25hbWUsIHJlc3VsdCk7Ci0JCX0KLQl9Ci0KLQkvKiBpMmMgZW5jb2RlciAqLwotCWlmIChlbmNvZGVyW3pyLT5pZF0gIT0gLTEpIHsKLQkJaTJjX2VuY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZShlbmNvZGVyW3pyLT5pZF0pOwotCQl6ci0+Y2FyZC5pMmNfZW5jb2RlciA9IGVuY29kZXJbenItPmlkXTsKLQl9IGVsc2UgaWYgKHpyLT5jYXJkLmkyY19lbmNvZGVyICE9IDApIHsKLQkJaTJjX2VuY19uYW1lID0gaTJjaWRfdG9fbW9kdWxlbmFtZSh6ci0+Y2FyZC5pMmNfZW5jb2Rlcik7Ci0JfSBlbHNlIHsKLQkJaTJjX2VuY19uYW1lID0gTlVMTDsKLQl9Ci0KLQlpZiAoaTJjX2VuY19uYW1lKSB7Ci0JCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKGkyY19lbmNfbmFtZSk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZhaWxlZCB0byBsb2FkIG1vZHVsZSAlczogJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGkyY19lbmNfbmFtZSwgcmVzdWx0KTsKLQkJfQotCX0KLQogCWlmICh6b3Jhbl9yZWdpc3Rlcl9pMmMoenIpIDwgMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGNhbid0IGluaXRpYWxpemUgaTJjIGJ1c1xuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gY2FuJ3QgaW5pdGlhbGl6ZSBpMmMgYnVzXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJZ290byB6cl9mcmVlX2lycTsKIAl9CiAKKwl6ci0+ZGVjb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+aTJjX2FkYXB0ZXIsCisJCXpyLT5jYXJkLm1vZF9kZWNvZGVyLCB6ci0+Y2FyZC5pMmNfZGVjb2RlciwgenItPmNhcmQuYWRkcnNfZGVjb2Rlcik7CisKKwlpZiAoenItPmNhcmQubW9kX2VuY29kZXIpCisJCXpyLT5lbmNvZGVyID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnpyLT5pMmNfYWRhcHRlciwKKwkJCXpyLT5jYXJkLm1vZF9lbmNvZGVyLCB6ci0+Y2FyZC5pMmNfZW5jb2RlciwKKwkJCXpyLT5jYXJkLmFkZHJzX2VuY29kZXIpOworCiAJZHByaW50aygyLAogCQlLRVJOX0lORk8gIiVzOiBJbml0aWFsaXppbmcgdmlkZW9jb2RlYyBidXMuLi5cbiIsCiAJCVpSX0RFVk5BTUUoenIpKTsKQEAgLTE0OTUsMTcgKzE0MDgsMTMgQEAKIAkJCWdvdG8genJfdW5yZWdfaTJjOwogCQl6ci0+Y29kZWMgPSB2aWRlb2NvZGVjX2F0dGFjaChtYXN0ZXJfY29kZWMpOwogCQlpZiAoIXpyLT5jb2RlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIGNvZGVjIGZvdW5kXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIG5vIGNvZGVjIGZvdW5kXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2ZyZWVfY29kZWM7CiAJCX0KIAkJaWYgKHpyLT5jb2RlYy0+dHlwZSAhPSB6ci0+Y2FyZC52aWRlb19jb2RlYykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIHdyb25nIGNvZGVjXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIHdyb25nIGNvZGVjXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKIAkJfQogCX0KQEAgLTE1MTUsMTcgKzE0MjQsMTMgQEAKIAkJCWdvdG8genJfZGV0YWNoX2NvZGVjOwogCQl6ci0+dmZlID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX3ZmZSk7CiAJCWlmICghenItPnZmZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIG5vIFZGRSBmb3VuZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBWRkUgZm91bmRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWdvdG8genJfZnJlZV92ZmU7CiAJCX0KIAkJaWYgKHpyLT52ZmUtPnR5cGUgIT0genItPmNhcmQudmlkZW9fdmZlKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpID0gd3JvbmcgVkZFXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyA9IHdyb25nIFZGRVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9kZXRhY2hfdmZlOwogCQl9CiAJfQpAQCAtMTUzMyw4ICsxNDM4LDcgQEAKIAkvKiB0YWtlIGNhcmUgb2YgTmF0b21hIGNoaXBzZXQgYW5kIGEgcmV2aXNpb24gMSB6cjM2MDU3ICovCiAJaWYgKChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX05BVE9NQSkgJiYgenItPnJldmlzaW9uIDw9IDEpIHsKIAkJenItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IDE7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fSU5GTworCQlkcHJpbnRrKDEsIEtFUk5fSU5GTwogCQkJIiVzOiBaUjM2MDU3L05hdG9tYSBidWcsIG1heC4gYnVmZmVyIHNpemUgaXMgMTI4S1xuIiwKIAkJCVpSX0RFVk5BTUUoenIpKTsKIAl9CkBAIC0xNTQ0LDggKzE0NDgsNiBAQAogCiAJem9yYW5fcHJvY19pbml0KHpyKTsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB6cik7Ci0KIAlyZXR1cm4gMDsKIAogenJfZGV0YWNoX3ZmZToKQEAgLTE1NjMsNiArMTQ2NSw4IEBACiAJZnJlZV9pcnEoenItPnBjaV9kZXYtPmlycSwgenIpOwogenJfdW5tYXA6CiAJaW91bm1hcCh6ci0+enIzNjA1N19tZW0pOworenJfdW5yZWc6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmenItPnY0bDJfZGV2KTsKIHpyX2ZyZWVfbWVtOgogCWtmcmVlKHpyKTsKIApAQCAtMTYxMyw5ICsxNTE3LDYgQEAKIAkJCVpPUkFOX05BTUUsIHZpZG1lbSk7CiAJfQogCi0JLyogcmFuZG9tIG5vbnNlbnNlICovCi0JZHByaW50ayg2LCBLRVJOX0RFQlVHICJKb3R0aSBpcyBlZW4gaGVsZCFcbiIpOwotCiAJLyogc29tZSBtYWluYm9hcmRzIG1pZ2h0IG5vdCBkbyBQQ0ktUENJIGRhdGEgdHJhbnNmZXIgd2VsbCAqLwogCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMfFBDSUFHUF9GQUlMfFBDSVBDSV9BTElNQUdJSykpIHsKIAkJZHByaW50aygxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaAppbmRleCA0NTA3YmRjLi40OTM2ZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2NhcmQuaApAQCAtNDQsNyArNDQsOCBAQAogZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2Ugem9yYW5fdGVtcGxhdGU7CiAKIGV4dGVybiBpbnQgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkJICAgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzKTsKKwkJCQkgICAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MsCisJCQkJICAgIGludCB0cnkpOwogZXh0ZXJuIHZvaWQgem9yYW5fb3Blbl9pbml0X3BhcmFtcyhzdHJ1Y3Qgem9yYW4gKnpyKTsKIGV4dGVybiB2b2lkIHpvcmFuX3ZkZXZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKaW5kZXggNWQ5NDhmZi4uZTAyMjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCkBAIC0zNiwxMyArMzYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCkBAIC0zMTIsOSArMzExLDkgQEAKIAljYXNlIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKIAljYXNlIEJVWl9NT0RFX0lETEU6CiAJZGVmYXVsdDoKLQkJaWYgKHpyLT5ub3JtID09IFZJREVPX01PREVfTlRTQyB8fAorCQlpZiAoKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykgfHwKIAkJICAgICh6ci0+Y2FyZC50eXBlID09IExNTDMzUjEwICYmCi0JCSAgICAgenItPm5vcm0gPT0gVklERU9fTU9ERV9QQUwpKQorCQkgICAgICh6ci0+bm9ybSAmIFY0TDJfU1REX1BBTCkpKQogCQkJYnRhbmQoflpSMzYwNTdfVkZFU1BGUl9FeHRGbCwgWlIzNjA1N19WRkVTUEZSKTsKIAkJZWxzZQogCQkJYnRvcihaUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CkBAIC0zNTUsMTQgKzM1NCw2IEBACiAJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBzZXRfdmZlKCkgLSB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwKIAkJWlJfREVWTkFNRSh6ciksIHZpZGVvX3dpZHRoLCB2aWRlb19oZWlnaHQpOwogCi0JaWYgKHpyLT5ub3JtICE9IFZJREVPX01PREVfUEFMICYmCi0JICAgIHpyLT5ub3JtICE9IFZJREVPX01PREVfTlRTQyAmJgotCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX1NFQ0FNKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X3ZmZSgpIC0gbm9ybSA9ICVkIG5vdCB2YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB6ci0+bm9ybSk7Ci0JCXJldHVybjsKLQl9CiAJaWYgKHZpZGVvX3dpZHRoIDwgQlVaX01JTl9XSURUSCB8fAogCSAgICB2aWRlb19oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCB8fAogCSAgICB2aWRlb193aWR0aCA+IFdhIHx8IHZpZGVvX2hlaWdodCA+IEhhKSB7CkBAIC00MjYsNyArNDE3LDcgQEAKIAkgKiB3ZSBnZXQgdGhlIGNvcnJlY3QgY29sb3JzIHdoZW4gdW5jb21wcmVzc2luZyB0byB0aGUgc2NyZWVuICAqLwogCS8vcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9WQ0xLUG9sOyAvKiovCiAJLyogUko6IERvbid0IGtub3cgaWYgdGhhdCBpcyBuZWVkZWQgZm9yIE5UU0MgYWxzbyAqLwotCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MpCisJaWYgKCEoenItPm5vcm0gJiBWNEwyX1NURF9OVFNDKSkKIAkJcmVnIHw9IFpSMzYwNTdfVkZFU1BGUl9FeHRGbDsJLy8gTkVFREVEISEhISEhISBXb2xmZ2FuZwogCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVG9wRmllbGQ7CiAJaWYgKEhvckRjbSA+PSA0OCkgewpAQCAtNDk3LDExICs0ODgsMTEgQEAKIAkJICogQWxsIGVycm9yIG1lc3NhZ2VzIGFyZSBpbnRlcm5hbCBkcml2ZXIgY2hlY2tpbmcgb25seSEgKi8KIAogCQkvKiB2aWRlbyBkaXNwbGF5IHRvcCBhbmQgYm90dG9tIHJlZ2lzdGVycyAqLwotCQlyZWcgPSAobG9uZykgenItPmJ1ZmZlci5iYXNlICsKKwkJcmVnID0gKGxvbmcpIHpyLT52YnVmX2Jhc2UgKwogCQkgICAgenItPm92ZXJsYXlfc2V0dGluZ3MueCAqCiAJCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpICsKIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnkgKgotCQkgICAgenItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCSAgICB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CiAJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEVFIpOwogCQlpZiAocmVnICYgMykKIAkJCWRwcmludGsoMSwKQEAgLTUwOSwxNSArNTAwLDE1IEBACiAJCQkJIiVzOiB6cjM2MDU3X292ZXJsYXkoKSAtIHZpZGVvX2FkZHJlc3Mgbm90IGFsaWduZWRcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwogCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkJcmVnICs9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKIAkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRCUik7CiAKIAkJLyogdmlkZW8gc3RyaWRlLCBzdGF0dXMsIGFuZCBmcmFtZSBncmFiIHJlZ2lzdGVyICovCi0JCXJlZyA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lIC0KKwkJcmVnID0genItPnZidWZfYnl0ZXNwZXJsaW5lIC0KIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICoKIAkJICAgICgoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5kZXB0aCArIDcpIC8gOCk7CiAJCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQlyZWcgKz0genItPmJ1ZmZlci5ieXRlc3BlcmxpbmU7CisJCQlyZWcgKz0genItPnZidWZfYnl0ZXNwZXJsaW5lOwogCQlpZiAocmVnICYgMykKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgpAQCAtNTQ0LDEyICs1MzUsOCBAQAogICogIGFuZCB0aGUgbWF4aW11bSB3aW5kb3cgc2l6ZSBpcyBCVVpfTUFYX1dJRFRIICogQlVaX01BWF9IRUlHSFQgcGl4ZWxzLgogICovCiAKLXZvaWQKLXdyaXRlX292ZXJsYXlfbWFzayAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JCSAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCi0JCSAgICBpbnQgICAgICAgICAgICAgICAgY291bnQpCit2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBzdHJ1Y3QgdjRsMl9jbGlwICp2cCwgaW50IGNvdW50KQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBtYXNrX2xpbmVfc2l6ZSA9IChCVVpfTUFYX1dJRFRIICsgMzEpIC8gMzI7CiAJdTMyICptYXNrOwpAQCAtNTYzLDEwICs1NTAsMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAJCS8qIHBpY2sgdXAgbG9jYWwgY29weSBvZiBjbGlwICovCi0JCXggPSB2cFtpXS54OwotCQl5ID0gdnBbaV0ueTsKLQkJd2lkdGggPSB2cFtpXS53aWR0aDsKLQkJaGVpZ2h0ID0gdnBbaV0uaGVpZ2h0OworCQl4ID0gdnBbaV0uYy5sZWZ0OworCQl5ID0gdnBbaV0uYy50b3A7CisJCXdpZHRoID0gdnBbaV0uYy53aWR0aDsKKwkJaGVpZ2h0ID0gdnBbaV0uYy5oZWlnaHQ7CiAKIAkJLyogdHJpbSBjbGlwcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIHdpbmRvdyAqLwogCQlpZiAoeCA8IDApIHsKQEAgLTk4MSwxMSArOTY4LDEwIEBACiB6cjM2MDU3X2VuYWJsZV9qcGcgKHN0cnVjdCB6b3JhbiAgICAgICAgICAqenIsCiAJCSAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgIG1vZGUpCiB7Ci0Jc3RhdGljIGludCB6ZXJvOwotCXN0YXRpYyBpbnQgb25lID0gMTsKIAlzdHJ1Y3QgdmZlX3NldHRpbmdzIGNhcDsKIAlpbnQgZmllbGRfc2l6ZSA9CiAJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmY7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCiAJenItPmNvZGVjX21vZGUgPSBtb2RlOwogCkBAIC0xMDA3LDggKzk5Myw5IEBACiAJCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBpbnB1dC4KIAkJICovCiAJCXNldF92aWRlb2J1c19kaXIoenIsIDApOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlyb3V0ZS5pbnB1dCA9IDA7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQkvKiBUYWtlIHRoZSBKUEVHIGNvZGVjIGFuZCB0aGUgVkZFIG91dCBvZiBzbGVlcCAqLwogCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAwKTsKQEAgLTEwNTQsOSArMTA0MSwxMCBAQAogCQkvKiBJbiBtb3Rpb24gZGVjb21wcmVzc2lvbiBtb2RlLCB0aGUgZGVjb2RlciBvdXRwdXQgbXVzdCBiZSBkaXNhYmxlZCwgYW5kCiAJCSAqIHRoZSB2aWRlbyBidXMgZGlyZWN0aW9uIHNldCB0byBvdXRwdXQuCiAJCSAqLwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJCXNldF92aWRlb2J1c19kaXIoenIsIDEpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmb25lKTsKKwkJcm91dGUuaW5wdXQgPSAxOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CkBAIC0xMTAwLDggKzEwODgsOSBAQAogCQlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKIAkJenIzNjA1N19hZGp1c3RfdmZlKHpyLCBtb2RlKTsKIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJm9uZSk7Ci0JCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDEpOworCQlyb3V0ZS5pbnB1dCA9IDA7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IGVuYWJsZV9qcGcoSURMRSlcbiIsIFpSX0RFVk5BTUUoenIpKTsKIAkJYnJlYWs7CkBAIC0xMTMyLDcgKzExMjEsNyBAQAogCQkJaWYgKCEoenItPnN0YXRfY29tW2ldICYgY3B1X3RvX2xlMzIoMSkpKQogCQkJCWJyZWFrOwogCQkJenItPnN0YXRfY29tW2ldID0KLQkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmpwZy5mcmFnX3RhYl9idXMpOwogCQl9IGVsc2UgewogCQkJLyogZmlsbCAyIHN0YXRfY29tIGVudHJpZXMgKi8KIAkJCWkgPSAoKHpyLT5qcGdfZG1hX2hlYWQgLQpAQCAtMTE0MCw5ICsxMTI5LDkgQEAKIAkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKIAkJCQlicmVhazsKIAkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5qcGcuZnJhZ190YWJfYnVzKTsKIAkJCXpyLT5zdGF0X2NvbVtpICsgMV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uanBnLmZyYWdfdGFiX2J1cyk7CiAJCX0KIAkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE1BOwogCQl6ci0+anBnX2RtYV9oZWFkKys7CkBAIC0xMTYyLDcgKzExNTEsNyBAQAogCXUzMiBzdGF0X2NvbTsKIAl1bnNpZ25lZCBpbnQgc2VxOwogCXVuc2lnbmVkIGludCBkaWY7Ci0Jc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyICpidWZmZXI7CiAJaW50IGZyYW1lOwogCiAJLyogSW4gbW90aW9uIGRlY29tcHJlc3Mgd2UgZG9uJ3QgaGF2ZSBhIGhhcmR3YXJlIGZyYW1lIGNvdW50ZXIsCkBAIC0xMjA4LDIyICsxMTk3LDUyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB6b3Jhbl9yZXN0YXJ0KHN0cnVjdCB6b3JhbiAqenIpCit7CisJLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCisJaW50IHN0YXR1cyA9IDAsIG1vZGU7CisKKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKKwkJbW9kZSA9IENPREVDX0RPX0NPTVBSRVNTSU9OOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCQltb2RlID0gQ09ERUNfRE9fRVhQQU5TSU9OOworCX0KKwlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKKwkgICAgIShzdGF0dXMgJiBWNEwyX0lOX1NUX05PX1NJR05BTCkpIHsKKwkJLyoqKioqKioqKiogUkVTVEFSVCBjb2RlICoqKioqKioqKioqKiovCisJCWpwZWdfY29kZWNfcmVzZXQoenIpOworCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7CisJCXpyMzYwNTdfc2V0X2pwZyh6ciwgenItPmNvZGVjX21vZGUpOworCQlqcGVnX3N0YXJ0KHpyKTsKKworCQlpZiAoenItPm51bV9lcnJvcnMgPD0gOCkKKwkJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogUmVzdGFydFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisKKwkJenItPkpQRUdfbWlzc2VkID0gMDsKKwkJenItPkpQRUdfZXJyb3IgPSAyOworCQkvKioqKioqKioqKiBFbmQgUkVTVEFSVCBjb2RlICoqKioqKioqKioqLworCX0KK30KKwogc3RhdGljIHZvaWQKIGVycm9yX2hhbmRsZXIgKHN0cnVjdCB6b3JhbiAqenIsCiAJICAgICAgIHUzMiAgICAgICAgICAgYXN0YXQsCiAJICAgICAgIHUzMiAgICAgICAgICAgc3RhdCkKIHsKKwlpbnQgaSwgajsKKwogCS8qIFRoaXMgaXMgSlBFRyBlcnJvciBoYW5kbGluZyBwYXJ0ICovCi0JaWYgKCh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpICYmCi0JICAgICh6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykpIHsKLQkJLy9kcHJpbnRrKDEsIEtFUk5fRVJSICIlczogSW50ZXJuYWwgZXJyb3I6IGVycm9yIGhhbmRsaW5nIHJlcXVlc3QgaW4gbW9kZSAlZFxuIiwgWlJfREVWTkFNRSh6ciksIHpyLT5jb2RlY19tb2RlKTsKKwlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTICYmCisJICAgIHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoKHN0YXQgJiAxKSA9PSAwICYmCiAJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgotCSAgICB6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19xdWVfdGFpbCA+PQotCSAgICAgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7CisJICAgIHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX3F1ZV90YWlsID49IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewogCQkvKiBObyBmcmVlIGJ1ZmZlcnMuLi4gKi8KIAkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CiAJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwpAQCAtMTIzMiwxNDIgKzEyNTEsOTUgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh6ci0+SlBFR19lcnJvciAhPSAxKSB7Ci0JCS8qCi0JCSAqIEZpcnN0IGVudHJ5OiBlcnJvciBqdXN0IGhhcHBlbmVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKLQkJICoKLQkJICogUG9zc2libGUgZ2xpdGNoIGluIFRWIHNpZ25hbC4gSW4gdGhpcyBjYXNlIHdlIHNob3VsZAotCQkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKLQkJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCi0JCSAqCi0JCSAqIEluIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgotCQkgKgotCQkgKiBCYWQgSlBFRyBmcmFtZTogd2UgaGF2ZSB0byBtYXJrIGl0IGFzIHByb2Nlc3NlZCAoY29kZWMgY3Jhc2hlZAotCQkgKiBhbmQgd2FzIG5vdCBhYmxlIHRvIGRvIGl0IGl0c2VsZiksIGFuZCB0byByZW1vdmUgaXQgZnJvbSBxdWV1ZS4KLQkJICovCi0JCWJ0YW5kKH5aUjM2MDU3X0pNQ19Hb19lbiwgWlIzNjA1N19KTUMpOwotCQl1ZGVsYXkoMSk7Ci0JCXN0YXQgPSBzdGF0IHwgKHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDcsIDApICYgMykgPDwgODsKLQkJYnR3cml0ZSgwLCBaUjM2MDU3X0pQQyk7Ci0JCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOwotCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7Ci0JCXpyLT5KUEVHX2Vycm9yID0gMTsKLQkJenItPm51bV9lcnJvcnMrKzsKLQotCQkvKiBSZXBvcnQgZXJyb3IgKi8KLQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmIHpyLT5udW1fZXJyb3JzIDw9IDgpIHsKLQkJCWxvbmcgZnJhbWU7Ci0JCQlmcmFtZSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IEpQRUcgZXJyb3Igc3RhdD0weCUwOHgoMHglMDh4KSBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQgc2VxPSVsZCBmcmFtZT0lbGQuIENvZGVjIHN0b3BwZWQuICIsCi0JCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsIHpyLT5sYXN0X2lzciwKLQkJCSAgICAgICB6ci0+anBnX3F1ZV90YWlsLCB6ci0+anBnX2RtYV90YWlsLAotCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQsCi0JCQkgICAgICAgenItPmpwZ19zZXFfbnVtLCBmcmFtZSk7Ci0JCQlwcmludGsoInN0YXRfY29tIGZyYW1lczoiKTsKLQkJCXsKLQkJCQlpbnQgaSwgajsKLQkJCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7Ci0JCQkJCWZvciAoaSA9IDA7Ci0JCQkJCSAgICAgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJCQkJICAgICBpKyspIHsKLQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21bal0pID09Ci0JCQkJCQkgICAgenItPmpwZ19idWZmZXJzLgotCQkJCQkJICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICBmcmFnX3RhYl9idXMpIHsKLQkJCQkJCQlwcmludGsoIiUgZC0+JWQiLAotCQkJCQkJCSAgICAgICBqLCBpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCQlwcmludGsoIlxuIik7Ci0JCQl9Ci0JCX0KLQkJLyogRmluZCBhbiBlbnRyeSBpbiBzdGF0X2NvbSBhbmQgcm90YXRlIGNvbnRlbnRzICovCi0JCXsKLQkJCWludCBpOwotCi0JCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007Ci0JCQllbHNlCi0JCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJICAgICAgenItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7Ci0JCQkJLyogTWltaWMgenIzNjA2NyBvcGVyYXRpb24gKi8KLQkJCQl6ci0+c3RhdF9jb21baV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQkJCXpyLT5zdGF0X2NvbVtpICsgMV0gfD0gY3B1X3RvX2xlMzIoMSk7Ci0JCQkJLyogUmVmaWxsICovCi0JCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7Ci0JCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7Ci0JCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwotCQkJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYWdhaW4gYWZ0ZXIgcmVmaWxsICovCi0JCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgenItPmpwZ19lcnJfc2hpZnQpICYKLQkJCQkJICAgIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJCWVsc2UKLQkJCQkJaSA9ICgoenItPmpwZ19kbWFfdGFpbCAtCi0JCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCX0KLQkJCWlmIChpKSB7Ci0JCQkJLyogUm90YXRlIHN0YXRfY29tbSBlbnRyaWVzIHRvIG1ha2UgY3VycmVudCBlbnRyeSBmaXJzdCAqLwotCQkJCWludCBqOwotCQkJCV9fbGUzMiBidXNfYWRkcltCVVpfTlVNX1NUQVRfQ09NXTsKLQotCQkJCS8qIEhlcmUgd2UgYXJlIGNvcHlpbmcgdGhlIHN0YXRfY29tIGFycmF5LCB3aGljaAotCQkJCSAqIGlzIGFscmVhZHkgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsIHNvCi0JCQkJICogbm8gZW5kaWFuIGNvbnZlcnNpb25zIGhlcmUKLQkJCQkgKi8KLQkJCQltZW1jcHkoYnVzX2FkZHIsIHpyLT5zdGF0X2NvbSwKLQkJCQkgICAgICAgc2l6ZW9mKGJ1c19hZGRyKSk7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQl6ci0+c3RhdF9jb21bal0gPQotCQkJCQkgICAgYnVzX2FkZHJbKGkgKyBqKSAmCi0JCQkJCQkgICAgIEJVWl9NQVNLX1NUQVRfQ09NXTsKLQotCQkJCX0KLQkJCQl6ci0+anBnX2Vycl9zaGlmdCArPSBpOwotCQkJCXpyLT5qcGdfZXJyX3NoaWZ0ICY9IEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJfQotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykKLQkJCQl6ci0+anBnX2Vycl9zZXEgPSB6ci0+anBnX3NlcV9udW07CS8qICsgMTsgKi8KLQkJfQorCWlmICh6ci0+SlBFR19lcnJvciA9PSAxKSB7CisJCXpvcmFuX3Jlc3RhcnQoenIpOworCQlyZXR1cm47CiAJfQogCi0JLyogTm93IHRoZSBzdGF0X2NvbW0gYnVmZmVyIGlzIHJlYWR5IGZvciByZXN0YXJ0ICovCi0JZG8gewotCQlpbnQgc3RhdHVzLCBtb2RlOworCS8qCisJICogRmlyc3QgZW50cnk6IGVycm9yIGp1c3QgaGFwcGVuZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24KKwkgKgorCSAqIEluIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzoKKwkgKgorCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKKwkgKiBzdG9wIHRoZSBjb2RlYyBhbmQgd2FpdCBmb3IgZ29vZCBxdWFsaXR5IHNpZ25hbCBiZWZvcmUKKwkgKiByZXN0YXJ0aW5nIGl0IHRvIGF2b2lkIGZ1cnRoZXIgcHJvYmxlbXMKKwkgKgorCSAqIEluIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOgorCSAqCisJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKKwkgKiBhbmQgd2FzIG5vdCBhYmxlIHRvIGRvIGl0IGl0c2VsZiksIGFuZCB0byByZW1vdmUgaXQgZnJvbSBxdWV1ZS4KKwkgKi8KKwlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKKwl1ZGVsYXkoMSk7CisJc3RhdCA9IHN0YXQgfCAocG9zdF9vZmZpY2VfcmVhZCh6ciwgNywgMCkgJiAzKSA8PCA4OworCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOworCWJ0b3IoWlIzNjA1N19NQ1RDUl9DRmx1c2gsIFpSMzYwNTdfTUNUQ1IpOworCWpwZWdfY29kZWNfcmVzZXQoenIpOworCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOworCXpyLT5KUEVHX2Vycm9yID0gMTsKKwl6ci0+bnVtX2Vycm9ycysrOwogCi0JCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpIHsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKLQkJCW1vZGUgPSBDT0RFQ19ET19DT01QUkVTU0lPTjsKLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IDA7Ci0JCQltb2RlID0gQ09ERUNfRE9fRVhQQU5TSU9OOworCS8qIFJlcG9ydCBlcnJvciAqLworCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7CisJCWxvbmcgZnJhbWU7CisKKwkJZnJhbWUgPSB6ci0+anBnX3BlbmRbenItPmpwZ19kbWFfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IEpQRUcgZXJyb3Igc3RhdD0weCUwOHgoMHglMDh4KSBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGQgc2VxPSVsZCBmcmFtZT0lbGQuIENvZGVjIHN0b3BwZWQuICIsCisJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3RhdCwgenItPmxhc3RfaXNyLAorCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKKwkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsIHpyLT5qcGdfcXVlX2hlYWQsCisJCSAgICAgICB6ci0+anBnX3NlcV9udW0sIGZyYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic3RhdF9jb20gZnJhbWVzOiIpOworCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgenItPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYl9idXMpCisJCQkJCXByaW50ayhLRVJOX0NPTlQgIiUgZC0+JWQiLCBqLCBpKTsKKwkJCX0KIAkJfQotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgfHwKLQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJLyoqKioqKioqKiogUkVTVEFSVCBjb2RlICoqKioqKioqKioqKiovCi0JCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKLQkJCXpyLT5jb2RlYy0+c2V0X21vZGUoenItPmNvZGVjLCBtb2RlKTsKLQkJCXpyMzYwNTdfc2V0X2pwZyh6ciwgenItPmNvZGVjX21vZGUpOwotCQkJanBlZ19zdGFydCh6cik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJfQorCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLworCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiBCVVpfTUFTS19TVEFUX0NPTTsKKwllbHNlCisJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSB7CisJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCisJCXpyLT5zdGF0X2NvbVtpXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCisJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQkvKiBSZWZpbGwgKi8KKwkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7CisJCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYWdhaW4gYWZ0ZXIgcmVmaWxsICovCisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJCWVsc2UKKwkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLSB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7CisJfQorCWlmIChpKSB7CisJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KKwkJaW50IGo7CisJCV9fbGUzMiBidXNfYWRkcltCVVpfTlVNX1NUQVRfQ09NXTsKIAotCQkJaWYgKHpyLT5udW1fZXJyb3JzIDw9IDgpCi0JCQkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBSZXN0YXJ0XG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCS8qIEhlcmUgd2UgYXJlIGNvcHlpbmcgdGhlIHN0YXRfY29tIGFycmF5LCB3aGljaAorCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbworCQkgKiBubyBlbmRpYW4gY29udmVyc2lvbnMgaGVyZQorCQkgKi8KKwkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sIHNpemVvZihidXNfYWRkcikpOwogCi0JCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJenItPkpQRUdfZXJyb3IgPSAyOwotCQkJLyoqKioqKioqKiogRW5kIFJFU1RBUlQgY29kZSAqKioqKioqKioqKi8KLQkJfQotCX0gd2hpbGUgKDApOworCQlmb3IgKGogPSAwOyBqIDwgQlVaX05VTV9TVEFUX0NPTTsgaisrKQorCQkJenItPnN0YXRfY29tW2pdID0gYnVzX2FkZHJbKGkgKyBqKSAmIEJVWl9NQVNLX1NUQVRfQ09NXTsKKworCQl6ci0+anBnX2Vycl9zaGlmdCArPSBpOworCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKKwl9CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykKKwkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCisJem9yYW5fcmVzdGFydCh6cik7CiB9CiAKIGlycXJldHVybl90CkBAIC0xNDI1LDEwICsxMzk3LDggQEAKIAkJCSAqIFdlIHNpbXBseSBpZ25vcmUgdGhlbSAqLwogCiAJCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgewotCiAJCQkJLyogQSBsb3QgbW9yZSBjaGVja3Mgc2hvdWxkIGJlIGhlcmUgLi4uICovCi0JCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKLQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KSA9PSAwKQorCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90KSA9PSAwKQogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX1dBUk5JTkcKIAkJCQkJCSIlczogQnV6SVJRIHdpdGggU25hcFNob3Qgb2ZmID8/P1xuIiwKQEAgLTE0MzYsMTAgKzE0MDYsNyBAQAogCiAJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSAhPSBOT19HUkFCX0FDVElWRSkgewogCQkJCQkvKiBUaGVyZSBpcyBhIGdyYWIgb24gYSBmcmFtZSBnb2luZyBvbiwgY2hlY2sgaWYgaXQgaGFzIGZpbmlzaGVkICovCi0KLQkJCQkJaWYgKChidHJlYWQoWlIzNjA1N19WU1NGR1IpICYKLQkJCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWIpID09Ci0JCQkJCSAgICAwKSB7CisJCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmIFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYikgPT0gMCkgewogCQkJCQkJLyogaXQgaXMgZmluaXNoZWQsIG5vdGlmeSB0aGUgdXNlciAqLwogCiAJCQkJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW3pyLT52NGxfZ3JhYl9mcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfRE9ORTsKQEAgLTE0NTcsOSArMTQyNCw3IEBACiAKIAkJCQlpZiAoenItPnY0bF9ncmFiX2ZyYW1lID09IE5PX0dSQUJfQUNUSVZFICYmCiAJCQkJICAgIHpyLT52NGxfcGVuZF90YWlsICE9IHpyLT52NGxfcGVuZF9oZWFkKSB7Ci0KLQkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYKLQkJCQkJCQkgVjRMX01BU0tfRlJBTUVdOworCQkJCQlpbnQgZnJhbWUgPSB6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX3RhaWwgJiBWNExfTUFTS19GUkFNRV07CiAJCQkJCXUzMiByZWc7CiAKIAkJCQkJenItPnY0bF9ncmFiX2ZyYW1lID0gZnJhbWU7CkBAIC0xNDY4LDI3ICsxNDMzLDE3IEBACiAKIAkJCQkJLyogQnVmZmVyIGFkZHJlc3MgKi8KIAotCQkJCQlyZWcgPQotCQkJCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uCi0JCQkJCSAgICBmYnVmZmVyX2J1czsKKwkJCQkJcmVnID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0udjRsLmZidWZmZXJfYnVzOwogCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0genItPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CiAJCQkJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOwogCiAJCQkJCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLwogCQkJCQlyZWcgPSAwOwotCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPgotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJCQkJcmVnICs9Ci0JCQkJCQkgICAgenItPnY0bF9zZXR0aW5ncy4KLQkJCQkJCSAgICBieXRlc3BlcmxpbmU7Ci0JCQkJCXJlZyA9Ci0JCQkJCSAgICAocmVnIDw8Ci0JCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CisJCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKKwkJCQkJCXJlZyArPSB6ci0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwkJCQkJcmVnID0gKHJlZyA8PCBaUjM2MDU3X1ZTU0ZHUl9EaXNwU3RyaWRlKTsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1ZpZE92ZjsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX1NuYXBTaG90OwogCQkJCQlyZWcgfD0gWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiOwpAQCAtMTUwNiw3NyArMTQ2MSw2NiBAQAogI2lmIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkKIAkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSB7CiAJCQl6ci0+aW50cl9jb3VudGVyX0NvZFJlcElSUSsrOwotCQkJSURFQlVHKHByaW50awotCQkJICAgICAgIChLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAorCQkJSURFQlVHKHByaW50ayhLRVJOX0RFQlVHICIlczogWlIzNjA1N19JU1JfQ29kUmVwSVJRXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKSk7CiAJCQlidGFuZCh+WlIzNjA1N19JQ1JfQ29kUmVwSVJRLCBaUjM2MDU3X0lDUik7CiAJCX0KICNlbmRpZgkJCQkvKiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpICovCiAKICNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKQotCQlpZiAoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSB7CisJCWlmICgoYXN0YXQgJiBaUjM2MDU3X0lTUl9KUEVHUmVwSVJRKSAmJgorCQkgICAgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJCSAgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSkgeworCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmICghenItPmZyYW1lX251bSB8fCB6ci0+SlBFR19lcnJvcikpIHsKKwkJCQljaGFyIHNjW10gPSAiMDAwMCI7CisJCQkJY2hhciBzdls1XTsKKwkJCQlpbnQgaTsKIAotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCQkgICAgenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAxICYmCi0JCQkJICAgICghenItPmZyYW1lX251bSB8fCB6ci0+SlBFR19lcnJvcikpIHsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCQkgICAgICAgIiVzOiBmaXJzdCBmcmFtZSByZWFkeTogc3RhdGU9MHglMDh4IG9kZF9ldmVuPSVkIGZpZWxkX3Blcl9idWZmPSVkIGRlbGF5PSVkXG4iLAotCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsCi0JCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuLAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICAgIGZpZWxkX3Blcl9idWZmLAotCQkJCQkgICAgICAgenItPkpQRUdfbWlzc2VkKTsKLQkJCQkJewotCQkJCQkJY2hhciBzY1tdID0gIjAwMDAiOwotCQkJCQkJY2hhciBzdls1XTsKLQkJCQkJCWludCBpOwotCQkJCQkJc3RyY3B5KHN2LCBzYyk7Ci0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkgJiAxKQotCQkJCQkJCQlzdltpXSA9ICcxJzsKLQkJCQkJCX0KLQkJCQkJCXN2WzRdID0gMDsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSAgICAgICAiJXM6IHN0YXRfY29tPSVzIHF1ZXVlX3N0YXRlPSVsZC8lbGQvJWxkLyVsZFxuIiwKLQkJCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3YsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV90YWlsLAotCQkJCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsCi0JCQkJCQkgICAgICAgenItPmpwZ19xdWVfaGVhZCk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoenItPkpQRUdfbWlzc2VkID4genItPkpQRUdfbWF4X21pc3NlZCkJLy8gR2V0IHN0YXRpc3RpY3MKLQkJCQkJCXpyLT5KUEVHX21heF9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA8Ci0JCQkJCSAgICB6ci0+SlBFR19taW5fbWlzc2VkKQotCQkJCQkJenItPkpQRUdfbWluX21pc3NlZCA9Ci0JCQkJCQkgICAgenItPkpQRUdfbWlzc2VkOwotCQkJCX0KKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKKwkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsCisJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4sCisJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYsCisJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7CiAKLQkJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKLQkJCQkJaW50IGk7Ci0JCQkJCXByaW50aygiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOwotCQkJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQkJCQlwcmludGsoIiAlMDh4IiwKLQkJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKLQkJCQkJfQotCQkJCQlwcmludGsoIlxuIik7CisJCQkJc3RyY3B5KHN2LCBzYyk7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSAmIDEpCisJCQkJCQlzdltpXSA9ICcxJzsKIAkJCQl9Ci0JCQkJenItPmZyYW1lX251bSsrOwotCQkJCXpyLT5KUEVHX21pc3NlZCA9IDA7Ci0JCQkJenItPkpQRUdfZXJyb3IgPSAwOwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCX0gLyplbHNlIHsKLQkJCSAgICAgIGRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBKUEVHIGludGVycnVwdCB3aGlsZSBub3QgaW4gbW90aW9uIChkZSljb21wcmVzcyBtb2RlIVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJfSovCisJCQkJc3ZbNF0gPSAwOworCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdiwKKwkJCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwKKwkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKKwkJCQkgICAgICAgenItPmpwZ19kbWFfaGVhZCwKKwkJCQkgICAgICAgenItPmpwZ19xdWVfaGVhZCk7CisJCQl9IGVsc2UgeworCQkJCS8qIEdldCBzdGF0aXN0aWNzICovCisJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCisJCQkJCXpyLT5KUEVHX21heF9taXNzZWQgPSB6ci0+SlBFR19taXNzZWQ7CisJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA8IHpyLT5KUEVHX21pbl9taXNzZWQpCisJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPSB6ci0+SlBFR19taXNzZWQ7CisJCQl9CisKKwkJCWlmICh6cjM2MDY3X2RlYnVnID4gMiAmJiB6ci0+ZnJhbWVfbnVtIDwgNikgeworCQkJCWludCBpOworCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNlcT0lbGQgc3RhdF9jb206IiwKKwkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHpyLT5qcGdfc2VxX251bSk7CisJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCQlwcmludGsoS0VSTl9DT05UICIgJTA4eCIsCisJCQkJCSAgICAgICBsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pKTsKKwkJCQl9CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJCX0KKwkJCXpyLT5mcmFtZV9udW0rKzsKKwkJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCQl6ci0+SlBFR19lcnJvciA9IDA7CisJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKKwkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOwogCQl9CiAjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgKi8KIApAQCAtMTU4NSw4ICsxNTI5LDcgQEAKIAkJICAgIHpyLT5KUEVHX21pc3NlZCA+IDI1IHx8CiAJCSAgICB6ci0+SlBFR19lcnJvciA9PSAxCXx8CiAJCSAgICAoKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKSAmJgotCQkgICAgICh6ci0+ZnJhbWVfbnVtICYgKHpyLT5KUEVHX21pc3NlZCA+Ci0JCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYpKSkpIHsKKwkJICAgICAoenItPmZyYW1lX251bSAmICh6ci0+SlBFR19taXNzZWQgPiB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmKSkpKSB7CiAJCQllcnJvcl9oYW5kbGVyKHpyLCBhc3RhdCwgc3RhdCk7CiAJCX0KIApAQCAtMTYyOCw3ICsxNTcxLDcgQEAKIHZvaWQKIHpvcmFuX2luaXRfaGFyZHdhcmUgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JaW50IGosIHplcm8gPSAwOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCS8qIEVuYWJsZSBidXMtbWFzdGVyaW5nICovCiAJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDEpOwpAQCAtMTYzOCwxNSArMTU4MSwxNiBAQAogCQl6ci0+Y2FyZC5pbml0KHpyKTsKIAl9CiAKLQlqID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisJcm91dGUuaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZqKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIGluaXQsIDApOworCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCB6ci0+bm9ybSk7CisJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCi0JZW5jb2Rlcl9jb21tYW5kKHpyLCAwLCBOVUxMKTsKLQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnplcm8pOworCWVuY29kZXJfY2FsbCh6ciwgY29yZSwgaW5pdCwgMCk7CisJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdGRfb3V0cHV0LCB6ci0+bm9ybSk7CisJcm91dGUuaW5wdXQgPSAwOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCS8qIHRvZ2dsZSBKUEVHIGNvZGVjIHNsZWVwIHRvIHN5bmMgUExMICovCiAJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7CkBAIC0xNzA2LDQyICsxNjUwLDMgQEAKIAkJcmVnIHw9IFpSMzYwNTdfVkRDUl9Ucml0b247CiAJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRDUik7CiB9Ci0KLS8qCi0gKiBJbnRlcmZhY2UgdG8gZGVjb2RlciBhbmQgZW5jb2RlciBjaGlwcyB1c2luZyBpMmMgYnVzCi0gKi8KLQotaW50Ci1kZWNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoenItPmNhcmQudHlwZSA9PSBMTUwzMyAmJgotCSAgICAoY21kID09IERFQ09ERVJfU0VUX05PUk0gfHwgY21kID09IERFQ09ERVJfU0VUX0lOUFVUKSkgewotCQlpbnQgcmVzOwotCi0JCS8vIEJ0ODE5IG5lZWRzIHRvIHJlc2V0IGl0cyBGSUZPIGJ1ZmZlciB1c2luZyAjRlJTVCBwaW4gYW5kCi0JCS8vIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LgotCQlHUElPKHpyLCA3LCAwKTsKLQkJcmVzID0genItPmRlY29kZXItPmRyaXZlci0+Y29tbWFuZCh6ci0+ZGVjb2RlciwgY21kLCBkYXRhKTsKLQkJLy8gUHVsbCAjRlJTVCBoaWdoLgotCQlHUElPKHpyLCA3LCAxKTsKLQkJcmV0dXJuIHJlczsKLQl9IGVsc2UKLQkJcmV0dXJuIHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwKLQkJCQkJCSAgICBkYXRhKTsKLX0KLQotaW50Ci1lbmNvZGVyX2NvbW1hbmQgKHN0cnVjdCB6b3JhbiAqenIsCi0JCSBpbnQgICAgICAgICAgIGNtZCwKLQkJIHZvaWQgICAgICAgICAqZGF0YSkKLXsKLQlpZiAoenItPmVuY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIHpyLT5lbmNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmVuY29kZXIsIGNtZCwgZGF0YSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaAppbmRleCA3NGM2YzhlLi4wN2YyYzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKQEAgLTU0LDggKzU0LDggQEAKIC8qIHpyMzYweDcgYWNjZXNzIHRvIHJhdyBjYXB0dXJlICovCiBleHRlcm4gdm9pZCB6cjM2MDU3X292ZXJsYXkoc3RydWN0IHpvcmFuICp6ciwKIAkJCSAgICBpbnQgb24pOwotZXh0ZXJuIHZvaWQgd3JpdGVfb3ZlcmxheV9tYXNrKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHN0cnVjdCB2aWRlb19jbGlwICp2cCwKK2V4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3Qgem9yYW5fZmggKmZoLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NsaXAgKnZwLAogCQkJICAgICAgIGludCBjb3VudCk7CiBleHRlcm4gdm9pZCB6cjM2MDU3X3NldF9tZW1ncmFiKHN0cnVjdCB6b3JhbiAqenIsCiAJCQkJaW50IG1vZGUpOwpAQCAtODcsMTEgKzg3LDkgQEAKIGV4dGVybiBpbnQgcGFzc190aHJvdWdoOwogCiAvKiBpMmMgKi8KLWV4dGVybiBpbnQgZGVjb2Rlcl9jb21tYW5kKHN0cnVjdCB6b3JhbiAqenIsCi0JCQkgICBpbnQgY21kLAotCQkJICAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gaW50IGVuY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmRhdGEpOworI2RlZmluZSBkZWNvZGVyX2NhbGwoenIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHpyLT5kZWNvZGVyLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGVuY29kZXJfY2FsbCh6ciwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwoenItPmVuY29kZXIsIG8sIGYsICMjYXJncykKIAogI2VuZGlmCQkJCS8qIF9fWk9SQU5fREVWSUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKaW5kZXggMTIwZWYyMy4uZjE2ZTU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCkBAIC01OCwxNiArNTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNkZWZpbmUgICAgIE1BUF9OUih4KSAgICAgICB2aXJ0X3RvX3BhZ2UoeCkKLSNkZWZpbmUgICAgIFpPUkFOX1ZJRF9UWVBFICAoIFwKLQkJCQlWSURfVFlQRV9DQVBUVVJFIHwgXAotCQkJCVZJRF9UWVBFX09WRVJMQVkgfCBcCi0JCQkJVklEX1RZUEVfQ0xJUFBJTkcgfCBcCi0JCQkJVklEX1RZUEVfRlJBTUVSQU0gfCBcCi0JCQkJVklEX1RZUEVfU0NBTEVTIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0RFQ09ERVIgfCBcCi0JCQkJVklEX1RZUEVfTUpQRUdfRU5DT0RFUiBcCi0JCQkgICAgICkKIAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTc5LDM2ICs2OSwxNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgInpvcmFuLmgiCiAjaW5jbHVkZSAiem9yYW5fZGV2aWNlLmgiCiAjaW5jbHVkZSAiem9yYW5fY2FyZC5oIgogCi0JLyogd2UgZGVjbGFyZSBzb21lIGNhcmQgdHlwZSBkZWZpbml0aW9ucyBoZXJlLCB0aGV5IG1lYW4KLQkgKiB0aGUgc2FtZSBhcyB0aGUgdjRsMSBaT1JBTl9WSURfVFlQRSBhYm92ZSwgZXhjZXB0IGl0J3MgdjRsMiAqLwotI2RlZmluZSBaT1JBTl9WNEwyX1ZJRF9GTEFHUyAoIFwKLQkJCQlWNEwyX0NBUF9TVFJFQU1JTkcgfFwKLQkJCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1VUUFVUIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSBcCi0JCQkgICAgICApCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5wYWxldHRlID0gKHBhbCksIC5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZWxzZQotI2RlZmluZSBaRk1UKHBhbCwgZmNjLCBjcykgXAotCS5mb3VyY2MgPSAoZmNjKSwgLmNvbG9yc3BhY2UgPSAoY3MpCi0jZW5kaWYKIAogY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCB6b3Jhbl9mb3JtYXRzW10gPSB7CiAJewogCQkubmFtZSA9ICIxNS1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU1NSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTU1LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNSwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLApAQCAtMTE2LDE2ICs4NywxNiBAQAogCQkJICAgWlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKIAl9LCB7CiAJCS5uYW1lID0gIjE1LWJpdCBSR0IgQkUiLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0I1NTVYLCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTU1WCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTUsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCNTU1fFpSMzYwNTdfVkZFU1BGUl9FcnJEaWYsCiAJfSwgewogCQkubmFtZSA9ICIxNi1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjU2NSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfUkdCNTY1LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLApAQCAtMTMzLDU2ICsxMDQsNTYgQEAKIAkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIxNi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTY1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDE2LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU2NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAogCX0sIHsKIAkJLm5hbWUgPSAiMjQtYml0IFJHQiIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0IyNCwKLQkJICAgICBWNEwyX1BJWF9GTVRfQkdSMjQsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IyNCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMjQsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9QYWNrMjQsCiAJfSwgewogCQkubmFtZSA9ICIzMi1iaXQgUkdCIExFIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1JHQjMyLAotCQkgICAgIFY0TDJfUElYX0ZNVF9CR1IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX0JHUjMyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAzMiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODh8WlIzNjA1N19WRkVTUEZSX0xpdHRsZUVuZGlhbiwKIAl9LCB7CiAJCS5uYW1lID0gIjMyLWJpdCBSR0IgQkUiLAotCQlaRk1UKC0xLAotCQkgICAgIFY0TDJfUElYX0ZNVF9SR0IzMiwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjMyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAzMiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I4ODgsCiAJfSwgewogCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBZVVlWIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1lVVjQyMiwKLQkJICAgICBWNEwyX1BJWF9GTVRfWVVZViwgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9ZVVY0MjIsCiAJfSwgewogCQkubmFtZSA9ICI0OjI6MiwgcGFja2VkLCBVWVZZIiwKLQkJWkZNVChWSURFT19QQUxFVFRFX1VZVlksCi0JCSAgICAgVjRMMl9QSVhfRk1UX1VZVlksIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1VZVlksCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyfFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICJIYXJkd2FyZS1lbmNvZGVkIE1vdGlvbi1KUEVHIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfTUpQRUcsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX01KUEVHLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCiAJCS5kZXB0aCA9IDAsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfUExBWUJBQ0sgfApAQCAtMTkxLDEzICsxNjIsNiBAQAogfTsKICNkZWZpbmUgTlVNX0ZPUk1BVFMgQVJSQVlfU0laRSh6b3Jhbl9mb3JtYXRzKQogCi0vLyBSSjogVGVzdCBvbmx5IC0gd2FudCB0byB0ZXN0IEJVWl9VU0VfSElNRU0gZXZlbiB3aGVuIENPTkZJR19CSUdQSFlTX0FSRUEgaXMgZGVmaW5lZAotCi0KLXN0YXRpYyBpbnQgbG9ja19ub3JtOwkvKiAwID0gZGVmYXVsdCAxID0gRG9uJ3QgY2hhbmdlIFRWIHN0YW5kYXJkIChub3JtKSAqLwotbW9kdWxlX3BhcmFtKGxvY2tfbm9ybSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MobG9ja19ub3JtLCAiUHJldmVudCBub3JtIGNoYW5nZXMgKDEgPSBpZ25vcmUsID4xID0gZmFpbCkiKTsKLQogCS8qIHNtYWxsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgYnVmZmVyc2l6ZXMgZm9yIHY0bDIKIAkgKiB3ZSBjYWxjdWxhdGUgdGhlIG5lYXJlc3QgaGlnaGVyIHBvd2VyLW9mLXR3bywgd2hpY2gKIAkgKiB3aWxsIGJlIHRoZSByZWNvbW1lbmRlZCBidWZmZXJzaXplICovCkBAIC0yMjIsMjIxICsxODYsMTA2IEBACiB9CiAKIC8qIGZvcndhcmQgcmVmZXJlbmNlcyAqLwotc3RhdGljIHZvaWQgdjRsX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgdm9pZCBqcGdfZmJ1ZmZlcl9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCk7CitzdGF0aWMgdm9pZCBqcGdfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpOworCisvKiBTZXQgbWFwcGluZyBtb2RlICovCitzdGF0aWMgdm9pZCBtYXBfbW9kZV9yYXcoc3RydWN0IHpvcmFuX2ZoICpmaCkKK3sKKwlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7CisJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKKwlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHY0bF9uYnVmczsKK30KK3N0YXRpYyB2b2lkIG1hcF9tb2RlX2pwZyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgcGxheSkKK3sKKwlmaC0+bWFwX21vZGUgPSBwbGF5ID8gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkgOiBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOworCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0ganBnX2J1ZnNpemU7CisJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSBqcGdfbmJ1ZnM7Cit9CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm1vZGVfbmFtZShlbnVtIHpvcmFuX21hcF9tb2RlIG1vZGUpCit7CisJcmV0dXJuIG1vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiSlBHIjsKK30KIAogLyoKICAqICAgQWxsb2NhdGUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMKICAqCiAgKiAgIFRoZXNlIGhhdmUgdG8gYmUgcHlzaWNhbGx5IGNvbnRpZ3VvdXMuCi0gKiAgIElmIHY0bF9idWZzaXplIDw9IE1BWF9LTUFMTE9DX01FTSB3ZSB1c2Uga21hbGxvYwotICogICBlbHNlIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGVtIHdpdGggYmlncGh5c2FyZWFfYWxsb2NfcGFnZXMKLSAqICAgaWYgdGhlIGJpZ3BoeXNhcmVhIHBhdGNoIGlzIHByZXNlbnQgaW4gdGhlIGtlcm5lbCwKLSAqICAgZWxzZSB3ZSB0cnkgdG8gdXNlIGhpZ2ggbWVtb3J5IChpZiB0aGUgdXNlciBoYXMgYm9vdGV0Ci0gKiAgIExpbnV4IHdpdGggdGhlIG5lY2Vzc2FyeSBtZW1vcnkgbGVmdCBvdmVyKS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotZ2V0X2hpZ2hfbWVtICh1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW50IHY0bF9mYnVmZmVyX2FsbG9jKHN0cnVjdCB6b3Jhbl9maCAqZmgpCiB7Ci0vKgotICogQ2hlY2sgaWYgdGhlcmUgaXMgdXNhYmxlIG1lbW9yeSBhdCB0aGUgZW5kIG9mIExpbnV4IG1lbW9yeQotICogb2YgYXQgbGVhc3Qgc2l6ZS4gUmV0dXJuIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5LAotICogcmV0dXJuIDAgb24gZmFpbHVyZS4KLSAqCi0gKiBUaGUgaWRlYSBpcyBmcm9tIEFsZXhhbmRybyBSdWJpbmkncyBib29rICJMaW51eCBkZXZpY2UgZHJpdmVycyIuCi0gKiBUaGUgZHJpdmVyIGZyb20gaGltIHdoaWNoIGlzIGRvd25sb2FkYWJsZSBmcm9tIE8nUmVpbGx5J3MKLSAqIHdlYiBzaXRlIG1pc3NlcyB0aGUgInZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkiIHBhcnQKLSAqIChhbmQgdGhlcmVmb3JlIGRvZXNuJ3Qgd29yayBhdCBhbGwgLSBhdCBsZWFzdCB3aXRoIDIuMi54IGtlcm5lbHMpLgotICoKLSAqIEl0IHNob3VsZCBiZSB1bm5lY2Vzc2FyeSB0byBtZW50aW9uIHRoYXQgVEhJUyBJUyBEQU5HRVJPVVMsCi0gKiBpZiBtb3JlIHRoYW4gb25lIGRyaXZlciBhdCBhIHRpbWUgaGFzIHRoZSBpZGVhIHRvIHVzZSB0aGlzIG1lbW9yeSEhISEKLSAqLwotCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICptZW07Ci0JdW5zaWduZWQgY2hhciBjOwotCXVuc2lnbmVkIGxvbmcgaGlfbWVtX3BoOwotCXVuc2lnbmVkIGxvbmcgaTsKLQotCS8qIE1hcCB0aGUgaGlnaCBtZW1vcnkgdG8gdXNlciBzcGFjZSAqLwotCi0JaGlfbWVtX3BoID0gdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KTsKLQotCW1lbSA9IGlvcmVtYXAoaGlfbWVtX3BoLCBzaXplKTsKLQlpZiAoIW1lbSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IGdldF9oaWdoX21lbSgpIC0gaW9yZW1hcCBmYWlsZWRcbiIsCi0JCQlaT1JBTl9OQU1FKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQkvKiBDaGVjayBpZiBpdCBpcyBtZW1vcnkgKi8KLQkJYyA9IGkgJiAweGZmOwotCQl3cml0ZWIoYywgbWVtICsgaSk7Ci0JCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQotCQkJYnJlYWs7Ci0JCWMgPSAyNTUgLSBjOwotCQl3cml0ZWIoYywgbWVtICsgaSk7Ci0JCWlmIChyZWFkYihtZW0gKyBpKSAhPSBjKQotCQkJYnJlYWs7Ci0JCXdyaXRlYigwLCBtZW0gKyBpKTsJLyogemVybyBvdXQgbWVtb3J5ICovCi0KLQkJLyogZ2l2ZSB0aGUga2VybmVsIGFpciB0byBicmVhdGggKi8KLQkJaWYgKChpICYgMHgzZmZmZikgPT0gMHgzZmZmZikKLQkJCXNjaGVkdWxlKCk7Ci0JfQotCi0JaW91bm1hcChtZW0pOwotCi0JaWYgKGkgIT0gc2l6ZSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBnZXRfaGlnaF9tZW0oKSAtIHJlcXVlc3RlZCAlbHUsIGF2YWlsICVsdVxuIiwKLQkJCVpPUkFOX05BTUUsIHNpemUsIGkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gaGlfbWVtX3BoOwotfQotCi1zdGF0aWMgaW50Ci12NGxfZmJ1ZmZlcl9hbGxvYyAoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpLCBvZmY7CiAJdW5zaWduZWQgY2hhciAqbWVtOwotCXVuc2lnbmVkIGxvbmcgcG1lbSA9IDA7CiAKLQkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcikKKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKQogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBhbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CiAKIAkJLy91ZGVsYXkoMjApOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgewotCQkJLyogVXNlIGttYWxsb2MgKi8KLQotCQkJbWVtID0ga21hbGxvYyhmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFtZW0pIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZm9yIFY0TCBidWYgJWQgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQl9Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBtZW07Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfcGh5cyA9Ci0JCQkgICAgdmlydF90b19waHlzKG1lbSk7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCSAgICB2aXJ0X3RvX2J1cyhtZW0pOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWRwcmludGsoNCwKLQkJCQlLRVJOX0lORk8KLQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBWNEwgZnJhbWUgJWQgbWVtIDB4JWx4IChidXM6IDB4JWx4KVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKLQkJCQl2aXJ0X3RvX2J1cyhtZW0pKTsKLQkJfSBlbHNlIHsKLQotCQkJLyogVXNlIGhpZ2ggbWVtb3J5IHdoaWNoIGhhcyBiZWVuIGxlZnQgYXQgYm9vdCB0aW1lICovCi0KLQkJCS8qIE9rLiwgT2suIHRoaXMgaXMgYW4gZXZpbCBoYWNrIC0gd2UgbWFrZQotCQkJICogdGhlIGFzc3VtcHRpb24gdGhhdCBwaHlzaWNhbCBhZGRyZXNzZXMgYXJlCi0JCQkgKiB0aGUgc2FtZSBhcyBidXMgYWRkcmVzc2VzICh0cnVlIGF0IGxlYXN0Ci0JCQkgKiBmb3IgSW50ZWwgcHJvY2Vzc29ycykuIFRoZSB3aG9sZSBtZXRob2Qgb2YKLQkJCSAqIG9idGFpbmluZyBhbmQgdXNpbmcgdGhpcyBtZW1vcnkgaXMgbm90IHZlcnkKLQkJCSAqIG5pY2UgLSBidXQgSSBob3BlIGl0IHNhdmVzIHNvbWUgcG9vciB1c2VycwotCQkJICogZnJvbSBrZXJuZWwgaGFja2luZywgd2hpY2ggbWlnaHQgaGF2ZSBldmVuCi0JCQkgKiBtb3JlIGV2aWwgcmVzdWx0cyAqLwotCi0JCQlpZiAoaSA9PSAwKSB7Ci0JCQkJaW50IHNpemUgPQotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0KLQkJCQlwbWVtID0gZ2V0X2hpZ2hfbWVtKHNpemUpOwotCQkJCWlmIChwbWVtID09IDApIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIGdldF9oaWdoX21lbSAoc2l6ZSA9ICVkIEtCKSBmb3IgVjRMIGJ1ZnMgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOwotCQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0JCQkJfQotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlclswXS5mYnVmZmVyX3BoeXMgPSBwbWVtOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9idXMgPSBwbWVtOwotCQkJCWRwcmludGsoNCwKLQkJCQkJS0VSTl9JTkZPCi0JCQkJCSIlczogdjRsX2ZidWZmZXJfYWxsb2MoKSAtIHVzaW5nICVkIEtCIGhpZ2ggbWVtb3J5XG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgc2l6ZSA+PiAxMCk7Ci0JCQl9IGVsc2UgewotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlciA9IE5VTEw7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQotCQkJCSAgICBwbWVtICsgaSAqIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXJfYnVzID0KLQkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQl9CisJCW1lbSA9IGttYWxsb2MoZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUsCisJCQkgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwkJaWYgKCFtZW0pIHsKKwkJCWRwcmludGsoMSwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogJXMgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJdjRsX2ZidWZmZXJfZnJlZShmaCk7CisJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyID0gbWVtOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXJfcGh5cyA9IHZpcnRfdG9fcGh5cyhtZW0pOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXJfYnVzID0gdmlydF90b19idXMobWVtKTsKKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQorCQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKKwkJZHByaW50ayg0LAorCQkJS0VSTl9JTkZPCisJCQkiJXM6ICVzIC0gVjRMIGZyYW1lICVkIG1lbSAweCVseCAoYnVzOiAweCVsbHgpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpLCAodW5zaWduZWQgbG9uZykgbWVtLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2aXJ0X3RvX2J1cyhtZW0pKTsKIAl9CiAKLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZyZWUgdGhlIFY0TCBncmFiIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi12NGxfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIG9mZjsKIAl1bnNpZ25lZCBjaGFyICptZW07CiAKLQlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHY0bF9mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKCFmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXIpCiAJCQljb250aW51ZTsKIAotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplIDw9IE1BWF9LTUFMTE9DX01FTSkgewotCQkJbWVtID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSArIG9mZikpOwotCQkJa2ZyZWUoKHZvaWQgKikgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKTsKLQkJfQotCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOworCQltZW0gPSBmaC0+YnVmZmVycy5idWZmZXJbaV0udjRsLmZidWZmZXI7CisJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKKwkJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKKwkJa2ZyZWUoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyID0gTlVMTDsKIAl9CiAKLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOworCWZoLT5idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiB9CiAKIC8qCiAgKiAgIEFsbG9jYXRlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMuCiAgKgotICogICBJZiB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGlzIHNtYWxsZXIgdGhhbiBNQVhfS01BTExPQ19NRU0sCi0gKiAgIGttYWxsb2MgaXMgdXNlZCB0byByZXF1ZXN0IGEgcGh5c2ljYWxseSBjb250aWd1b3VzIGFyZWEsCi0gKiAgIGVsc2Ugd2UgYWxsb2NhdGUgdGhlIG1lbW9yeSBpbiBmcmFtZ2VudHMgd2l0aCBnZXRfemVyb2VkX3BhZ2UuCi0gKgogICogICBJZiBhIE5hdG9tYSBjaGlwc2V0IGlzIHByZXNlbnQgYW5kIHRoaXMgaXMgYSByZXZpc2lvbiAxIHpyMzYwNTcsCiAgKiAgIGVhY2ggTUpQRUcgYnVmZmVyIG5lZWRzIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cy4KICAqICAgKFJKOiBUaGlzIHN0YXRlbWVudCBpcyBmcm9tIERhdmUgUGVya3MnIG9yaWdpbmFsIGRyaXZlciwKICAqICAgSSBjb3VsZCBuZXZlciBjaGVjayBpdCBiZWNhdXNlIEkgaGF2ZSBhIHpyMzYwNjcpCi0gKiAgIFRoZSBkcml2ZXIgY2FyZXMgYWJvdXQgdGhpcyBiZWNhdXNlIGl0IHJlZHVjZXMgdGhlIGJ1ZmZlcgotICogICBzaXplIHRvIE1BWF9LTUFMTE9DX01FTSBpbiB0aGF0IGNhc2UgKHdoaWNoIGZvcmNlcyBjb250aWd1b3VzIGFsbG9jYXRpb24pLgogICoKICAqICAgUko6IFRoZSBjb250ZW50cyBncmFiIGJ1ZmZlcnMgbmVlZHMgbmV2ZXIgYmUgYWNjZXNzZWQgaW4gdGhlIGRyaXZlci4KICAqICAgICAgIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBuZWVkIHRvIGFsbG9jYXRlIHRoZW0gd2l0aCB2bWFsbG9jIGluIG9yZGVyCkBAIC00NTgsMTYyICszMDcsMTI4IEBACiAgKiAgICAgICBhbmQgZnJhZ21lbnQgYnVmZmVycyBhcmUgbm90IGxpdHRsZS1lbmRpYW4uCiAgKi8KIAotc3RhdGljIGludAotanBnX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBqcGdfZmJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgaiwgb2ZmOwotCXVuc2lnbmVkIGxvbmcgbWVtOworCXU4ICptZW07CiAKLQkvKiB3ZSBtaWdodCBoYXZlIG9sZCBidWZmZXJzIGx5aW5nIGFyb3VuZCAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWIpCiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gYnVmZmVyICVkIGFsbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKKwkJCQkiJXM6ICVzIC0gYnVmZmVyICVkIGFscmVhZHkgYWxsb2NhdGVkIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKIAogCQkvKiBBbGxvY2F0ZSBmcmFnbWVudCB0YWJsZSBmb3IgdGhpcyBidWZmZXIgKi8KIAotCQltZW0gPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAobWVtID09IDApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJIiVzOiAlcyAtIGdldF96ZXJvZWRfcGFnZSAoZnJhZ190YWIpIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CisJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJfQotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gKF9fbGUzMiAqKSBtZW07Ci0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJfYnVzID0KLQkJICAgIHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSk7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWIgPSAoX19sZTMyICopbWVtOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiX2J1cyA9IHZpcnRfdG9fYnVzKG1lbSk7CiAKLQkJLy9pZiAoYWxsb2NfY29udGlnKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7Ci0JCQltZW0gPQotCQkJICAgICh1bnNpZ25lZCBsb25nKSBrbWFsbG9jKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJfc2l6ZSwKLQkJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCWlmIChtZW0gPT0gMCkgeworCQlpZiAoZmgtPmJ1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7CisJCQltZW0gPSBrbWFsbG9jKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChtZW0gPT0gTlVMTCkgewogCQkJCWRwcmludGsoMSwKIAkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0ga21hbGxvYyBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJCSIlczogJXMgLSBrbWFsbG9jIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPQotCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsxXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoKChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyA0KSA8PCAxKSB8IDEpOwotCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMF0gPQorCQkJCWNwdV90b19sZTMyKHZpcnRfdG9fYnVzKG1lbSkpOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsxXSA9CisJCQkJY3B1X3RvX2xlMzIoKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID4+IDEpIHwgMSk7CisJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CiAJCX0gZWxzZSB7Ci0JCQkvKiBqcGdfYnVmc2l6ZSBpcyBhbGxyZWF5IHBhZ2UgYWxpZ25lZCAqLwotCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKLQkJCSAgICAgaisrKSB7Ci0JCQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQkJCWlmIChtZW0gPT0gMCkgeworCQkJLyoganBnX2J1ZnNpemUgaXMgYWxyZWFkeSBwYWdlIGFsaWduZWQgKi8KKwkJCWZvciAoaiA9IDA7IGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsgaisrKSB7CisJCQkJbWVtID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQkJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCQkJCWRwcmludGsoMSwKIAkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7CisJCQkJCQkiJXM6ICVzIC0gZ2V0X3plcm9lZF9wYWdlIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAorCQkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJCQkJCXJldHVybiAtRU5PQlVGUzsKIAkJCQl9CiAKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKHZpcnRfdG9fYnVzKCh2b2lkICopIG1lbSkpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9Ci0JCQkJICAgIGNwdV90b19sZTMyKChQQUdFX1NJWkUgLyA0KSA8PCAxKTsKLQkJCQlTZXRQYWdlUmVzZXJ2ZWQoTUFQX05SKG1lbSkpOworCQkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMiAqIGpdID0KKwkJCQkJY3B1X3RvX2xlMzIodmlydF90b19idXMobWVtKSk7CisJCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogaiArIDFdID0KKwkJCQkJY3B1X3RvX2xlMzIoKFBBR0VfU0laRSA+PiAyKSA8PCAxKTsKKwkJCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKG1lbSkpOwogCQkJfQogCi0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqIC0gMV0gfD0gY3B1X3RvX2xlMzIoMSk7CiAJCX0KIAl9CiAKIAlkcHJpbnRrKDQsCi0JCUtFUk5fREVCVUcgIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwKLQkJKGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUpID4+IDEwKTsKKwkJS0VSTl9ERUJVRyAiJXM6ICVzIC0gJWQgS0IgYWxsb2NhdGVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCShmaC0+YnVmZmVycy5udW1fYnVmZmVycyAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSA+PiAxMCk7CiAKLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMTsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZyZWUgdGhlIE1KUEVHIGdyYWIgYnVmZmVycyAqLwotc3RhdGljIHZvaWQKLWpwZ19mYnVmZmVyX2ZyZWUgKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgaiwgb2ZmOwogCXVuc2lnbmVkIGNoYXIgKm1lbTsKKwlfX2xlMzIgZnJhZ190YWI7CisJc3RydWN0IHpvcmFuX2J1ZmZlciAqYnVmZmVyOwogCi0JZHByaW50ayg0LCBLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfZnJlZSgpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50ayg0LCBLRVJOX0RFQlVHICIlczogJXNcbiIsIFpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQorCWZvciAoaSA9IDAsIGJ1ZmZlciA9ICZmaC0+YnVmZmVycy5idWZmZXJbMF07CisJICAgICBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKywgYnVmZmVyKyspIHsKKwkJaWYgKCFidWZmZXItPmpwZy5mcmFnX3RhYikKIAkJCWNvbnRpbnVlOwogCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pIHsKLQkJCQltZW0gPSAodW5zaWduZWQgY2hhciAqKSBidXNfdG9fdmlydChsZTMyX3RvX2NwdSgKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlswXSkpOwotCQkJCWZvciAob2ZmID0gMDsKLQkJCQkgICAgIG9mZiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCi0JCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUgotCQkJCQkJCSAgKG1lbSArIG9mZikpOworCQlpZiAoZmgtPmJ1ZmZlcnMubmVlZF9jb250aWd1b3VzKSB7CisJCQlmcmFnX3RhYiA9IGJ1ZmZlci0+anBnLmZyYWdfdGFiWzBdOworCisJCQlpZiAoZnJhZ190YWIpIHsKKwkJCQltZW0gPSBidXNfdG9fdmlydChsZTMyX3RvX2NwdShmcmFnX3RhYikpOworCQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7IG9mZiArPSBQQUdFX1NJWkUpCisJCQkJCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0gKyBvZmYpKTsKIAkJCQlrZnJlZShtZW0pOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0gPSAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPSAwOworCQkJCWJ1ZmZlci0+anBnLmZyYWdfdGFiWzBdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsxXSA9IDA7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwotCQkJICAgICBqKyspIHsKLQkJCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCi0JCQkJICAgIGZyYWdfdGFiWzIgKiBqXSkKKwkJCWZvciAoaiA9IDA7IGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsgaisrKSB7CisJCQkJZnJhZ190YWIgPSBidWZmZXItPmpwZy5mcmFnX3RhYlsyICogal07CisKKwkJCQlpZiAoIWZyYWdfdGFiKQogCQkJCQlicmVhazsKLQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKLQkJCQkJCSAgKGJ1c190b192aXJ0Ci0JCQkJCQkgICAobGUzMl90b19jcHUKLQkJCQkJCSAgICAoZmgtPmpwZ19idWZmZXJzLgotCQkJCQkJICAgICBidWZmZXJbaV0uZnJhZ190YWJbMiAqCi0JCQkJCQkJCSAgICAgICBqXSkpKSk7Ci0JCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKQotCQkJCQkgIGJ1c190b192aXJ0Ci0JCQkJCQkgIChsZTMyX3RvX2NwdQotCQkJCQkJICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgIGJ1ZmZlcltpXS4KLQkJCQkJCSAgICAgIGZyYWdfdGFiWzIgKiBqXSkpKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSA9Ci0JCQkJICAgIDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiArCi0JCQkJCQkJCSAgIDFdID0gMDsKKwkJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UoYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKSkpOworCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidXNfdG9fdmlydChsZTMyX3RvX2NwdShmcmFnX3RhYikpKTsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsyICogal0gPSAwOworCQkJCWJ1ZmZlci0+anBnLmZyYWdfdGFiWzIgKiBqICsgMV0gPSAwOwogCQkJfQogCQl9CiAKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJICBmcmFnX3RhYik7Ci0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWIgPSBOVUxMOworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT5qcGcuZnJhZ190YWIpOworCQlidWZmZXItPmpwZy5mcmFnX3RhYiA9IE5VTEw7CiAJfQogCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogfQogCiAvKgpAQCAtNjIxLDEyICs0MzYsMTEgQEAKICAqLwogCiBzdGF0aWMgaW50Ci16b3Jhbl92NGxfc2V0X2Zvcm1hdCAoc3RydWN0IGZpbGUgICAgICAgICAgICAgICAqZmlsZSwKK3pvcmFuX3Y0bF9zZXRfZm9ybWF0IChzdHJ1Y3Qgem9yYW5fZmggICAgICAgICAgICpmaCwKIAkJICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCiAJCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKIAkJICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm9ybWF0KQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgYnBwOwogCkBAIC02MzYsMTkgKzQ1MCwxOSBAQAogCSAgICBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCB8fCB3aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHdyb25nIGZyYW1lIHNpemUgKCVkeCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCSIlczogJXMgLSB3cm9uZyBmcmFtZSBzaXplICglZHglZClcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHdpZHRoLCBoZWlnaHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlicHAgPSAoZm9ybWF0LT5kZXB0aCArIDcpIC8gODsKIAogCS8qIENoZWNrIGFnYWluc3QgYXZhaWxhYmxlIGJ1ZmZlciBzaXplICovCi0JaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJaWYgKGhlaWdodCAqIHdpZHRoICogYnBwID4gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3NldF9mb3JtYXQoKSAtIHZpZGVvIGJ1ZmZlciBzaXplICglZCBrQikgaXMgdG9vIHNtYWxsXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxMCk7CisJCQkiJXM6ICVzIC0gdmlkZW8gYnVmZmVyIHNpemUgKCVkIGtCKSBpcyB0b28gc21hbGxcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID4+IDEwKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NTcsOCArNDcxLDggQEAKIAlpZiAoKGJwcCA9PSAyICYmICh3aWR0aCAmIDEpKSB8fCAoYnBwID09IDMgJiYgKHdpZHRoICYgMykpKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBhbGluZ21lbnRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gd3JvbmcgZnJhbWUgYWxpZ25tZW50XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02NzAsNDMgKzQ4NCw0MCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci16b3Jhbl92NGxfcXVldWVfZnJhbWUgKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgaW50ICAgICAgICAgIG51bSkKK3N0YXRpYyBpbnQgem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBudW0pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJlcyA9IC1FTk9NRU07CiAJfQogCiAJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwlpZiAobnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkiJXM6ICVzIC0gYnVmZmVyICVkIGlzIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJcmVzID0gLUVJTlZBTDsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT52NGxfYnVmZmVycyA9IGZoLT52NGxfYnVmZmVyczsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CisJCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+YnVmZmVyczsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJlcyA9IC1FQlVTWTsKIAkJfQogCX0KQEAgLTcxNyw3ICs1MjgsNyBAQAogCQlkZWZhdWx0OgogCQljYXNlIEJVWl9TVEFURV9QRU5EOgogCQkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl9CiAJCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KQEAgLTcyNSwxOSArNTM2LDE3IEBACiAJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiB2NGxfcXVldWVfZnJhbWUoKSAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkJIiVzOiAlcyAtIHF1ZXVlaW5nIGJ1ZmZlciAlZCBpbiBzdGF0ZSBET05FIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBudW0pOwogCQljYXNlIEJVWl9TVEFURV9VU0VSOgogCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdCBsZWFzdAogCQkJICogb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCi0JCQl6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX2hlYWQrKyAmCi0JCQkJCVY0TF9NQVNLX0ZSQU1FXSA9IG51bTsKKwkJCXpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfaGVhZCsrICYgVjRMX01BU0tfRlJBTUVdID0gbnVtOwogCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7CiAJCQl6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoID0KIAkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZSAqCiAJCQkgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0gPQotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC03NDUsNjUgKzU1NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXJlcyAmJiB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotdjRsX2dyYWIgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgc3RydWN0IHZpZGVvX21tYXAgKm1wKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQlpbnQgcmVzID0gMCwgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7Ci0JCWlmICh6b3Jhbl9mb3JtYXRzW2ldLnBhbGV0dGUgPT0gbXAtPmZvcm1hdCAmJgotCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DQVBUVVJFICYmCi0JCSAgICAhKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGkgPT0gTlVNX0ZPUk1BVFMgfHwgem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSAwKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9ncmFiKCkgLSB3cm9uZyBieXRlcy1wZXItcGl4ZWwgZm9ybWF0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIFRvIG1pbmltaXplIHRoZSB0aW1lIHNwZW50IGluIHRoZSBJUlEgcm91dGluZSwgd2UgYXZvaWQgc2V0dGluZyB1cAotCSAqIHRoZSB2aWRlbyBmcm9udCBlbmQgdGhlcmUuCi0JICogSWYgdGhpcyBncmFiIGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVycyBmcm9tIGEgcnVubmluZyBzdHJlYW1pbmcgY2FwdHVyZQotCSAqIHdlIHN0b3AgdGhlIHN0cmVhbWluZyBjYXB0dXJlIGFuZCBzdGFydCBpdCBvdmVyIGFnYWluLgotCSAqLwotCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JICAgICh6ci0+djRsX3NldHRpbmdzLndpZHRoICE9IG1wLT53aWR0aCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgIT0gbXAtPmhlaWdodCB8fAotCSAgICAgenItPnY0bF9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGUgIT0gbXAtPmZvcm1hdCkpIHsKLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0JaWYgKChyZXMgPSB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAotCQkJCQltcC0+d2lkdGgsCi0JCQkJCW1wLT5oZWlnaHQsCi0JCQkJCSZ6b3Jhbl9mb3JtYXRzW2ldKSkpCi0JCXJldHVybiByZXM7Ci0JenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiBxdWV1ZSB0aGUgZnJhbWUgaW4gdGhlIHBlbmRpbmcgcXVldWUgKi8KLQlpZiAoKHJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaWxlLCBtcC0+ZnJhbWUpKSkgewotCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KLQkvKiBwdXQgdGhlIDM2MDU3IGludG8gZnJhbWUgZ3JhYmJpbmcgbW9kZSAqLwotCWlmICghcmVzICYmICF6ci0+djRsX21lbWdyYWJfYWN0aXZlKQotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQotCS8vZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiBGcmFtZSBncmFiIDMuLi5cbiIsIFpSX0RFVk5BTUUoenIpKTsKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZTsKIAogCXJldHVybiByZXM7CiB9CkBAIC04MTIsMjcgKzU2MywyNCBAQAogICogU3luYyBvbiBhIFY0TCBidWZmZXIKICAqLwogCi1zdGF0aWMgaW50Ci12NGxfc3luYyAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICBpbnQgICAgICAgICAgZnJhbWUpCitzdGF0aWMgaW50IHY0bF9zeW5jKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBmcmFtZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3N5bmMoKSAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gZ3JhYiBhY3RpdmUgZm9yIHRoaXMgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGNoZWNrIHBhc3NlZC1pbiBmcmFtZSBudW1iZXIgKi8KLQlpZiAoZnJhbWUgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8IGZyYW1lIDwgMCkgeworCWlmIChmcmFtZSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fCBmcmFtZSA8IDApIHsKIAkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gZnJhbWUgJWQgaXMgaW52YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmcmFtZSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gZnJhbWUgJWQgaXMgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgZnJhbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg0MCwxNSArNTg4LDE0IEBACiAJaWYgKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zeW5jKCkgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGF0dGVtcHQgdG8gc3luYyBvbiBhIGJ1ZmZlciB3aGljaCB3YXMgbm90IHF1ZXVlZD9cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAKIAkvKiB3YWl0IG9uIHRoaXMgYnVmZmVyIHRvIGdldCByZWFkeSAqLwogCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPnY0bF9jYXBxLAotCQkJCSh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfUEVORCksCi0JCQkJMTAqSFopKQorCQkoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX1BFTkQpLCAxMCpIWikpCiAJCXJldHVybiAtRVRJTUU7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtODU2LDExICs2MDMsMTEgQEAKIAkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLwogCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKIAkJZHByaW50aygyLAotCQkJS0VSTl9FUlIgIiVzOiB2NGxfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdOworCWZoLT5idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIApAQCAtODY4LDggKzYxNSw3IEBACiAJaWYgKHpyLT52NGxfcGVuZF90YWlsID09IHpyLT52NGxfcGVuZF9oZWFkKSB7CiAJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwogCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9BQ1RJVkUpIHsKLQkJCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9GUkVFOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJfQogCX0KQEAgLTg4MywzMSArNjI5LDI4IEBACiAgKiAgIFF1ZXVlIGEgTUpQRUcgYnVmZmVyIGZvciBjYXB0dXJlL3BsYXliYWNrCiAgKi8KIAotc3RhdGljIGludAotem9yYW5fanBnX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAgICAgICAgICAqZmlsZSwKLQkJICAgICAgIGludCAgICAgICAgICAgICAgICAgICBudW0sCi0JCSAgICAgICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3N0YXRpYyBpbnQgem9yYW5fanBnX3F1ZXVlX2ZyYW1lKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBudW0sCisJCQkJIGVudW0gem9yYW5fY29kZWNfbW9kZSBtb2RlKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXMgPSAwOwogCiAJLyogQ2hlY2sgaWYgYnVmZmVycyBhcmUgYWxsb2NhdGVkICovCi0JaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBObyBncmFiYmluZyBvdXRzaWRlIHRoZSBidWZmZXIgcmFuZ2UhICovCi0JaWYgKG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgeworCWlmIChudW0gPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgbnVtIDwgMCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGJ1ZmZlciAlZCBvdXQgb2YgcmFuZ2VcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbnVtKTsKKwkJCSIlczogJXMgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBudW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTkxOCwyMCArNjYxLDIwIEBACiAJCS8qIHdyb25nIGNvZGVjIG1vZGUgYWN0aXZlIC0gaW52YWxpZCAqLwogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGNvZGVjIGluIHdyb25nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY29kZWMgaW4gd3JvbmcgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJenItPmpwZ19idWZmZXJzID0gZmgtPmpwZ19idWZmZXJzOwotCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKKwkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5idWZmZXJzOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOwogCQl9IGVsc2UgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGFub3RoZXIgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZ1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmVzID0gLUVCVVNZOwogCQl9CiAJfQpAQCAtOTQ4LDIzICs2OTEsMjEgQEAKIAkJY2FzZSBCVVpfU1RBVEVfRE9ORToKIAkJCWRwcmludGsoMiwKIAkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gcXVlaW5nIGZyYW1lIGluIEJVWl9TVEFURV9ET05FIHN0YXRlIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBxdWVpbmcgZnJhbWUgaW4gQlVaX1NUQVRFX0RPTkUgc3RhdGUhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQljYXNlIEJVWl9TVEFURV9VU0VSOgogCQkJLyogc2luY2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHVudXNlZCBidWZmZXIgdGhlcmUncyByb29tIGZvciBhdAogCQkJICpsZWFzdCBvbmUgbW9yZSBwZW5kW10gZW50cnkgKi8KLQkJCXpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV9oZWFkKysgJiBCVVpfTUFTS19GUkFNRV0gPQotCQkJICAgIG51bTsKKwkJCXpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV9oZWFkKysgJiBCVVpfTUFTS19GUkFNRV0gPSBudW07CiAJCQl6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPSBCVVpfU1RBVEVfUEVORDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXSA9Ci0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV07CiAJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQljYXNlIEJVWl9TVEFURV9ETUE6CiAJCWNhc2UgQlVaX1NUQVRFX1BFTkQ6CiAJCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKIAkJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJCX0KIAkJCXJlcyA9IC1FQlVTWTsJLyogd2hhdCBhcmUgeW91IGRvaW5nPyAqLwpAQCAtOTc0LDQ3ICs3MTUsNDEgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlOwotCX0KKwlpZiAoIXJlcyAmJiB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmU7CiAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50Ci1qcGdfcWJ1ZiAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCi0JICBpbnQgICAgICAgICAgICAgICAgICAgZnJhbWUsCi0JICBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKK3N0YXRpYyBpbnQganBnX3FidWYoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IGZyYW1lLCBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IHJlcyA9IDA7CiAKIAkvKiBEb2VzIHRoZSB1c2VyIHdhbnQgdG8gc3RvcCBzdHJlYW1pbmc/ICovCiAJaWYgKGZyYW1lIDwgMCkgewogCQlpZiAoenItPmNvZGVjX21vZGUgPT0gbW9kZSkgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCQkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCQkJZHByaW50aygxLAogCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IGpwZ19xYnVmKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQkiJXM6ICVzKC0xKSAtIHNlc3Npb24gbm90IGFjdGl2ZVxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9GUkVFOworCQkJZmgtPmJ1ZmZlcnMuYWN0aXZlID0genItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3FidWYoKSAtIHN0b3Agc3RyZWFtaW5nIGJ1dCBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBzdG9wIHN0cmVhbWluZyBidXQgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWlmICgocmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZpbGUsIGZyYW1lLCBtb2RlKSkpCisJaWYgKChyZXMgPSB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmgsIGZyYW1lLCBtb2RlKSkpCiAJCXJldHVybiByZXM7CiAKIAkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCkBAIC0xMDI4LDI4ICs3NjMsMjUgQEAKICAqICAgU3luYyBvbiBhIE1KUEVHIGJ1ZmZlcgogICovCiAKLXN0YXRpYyBpbnQKLWpwZ19zeW5jIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgIHN0cnVjdCB6b3Jhbl9zeW5jICpicykKK3N0YXRpYyBpbnQganBnX3N5bmMoc3RydWN0IHpvcmFuX2ZoICpmaCwgc3RydWN0IHpvcmFuX3N5bmMgKmJzKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBmcmFtZTsKIAotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3N5bmMoKSAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY2FwdHVyZSBpcyBub3QgY3VycmVudGx5IGFjdGl2ZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MgJiYKIAkgICAgenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSBjb2RlYyBub3QgaW4gc3RyZWFtaW5nIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gY29kZWMgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoenItPmpwZ19jYXBxLApAQCAtMTA2NCw4ICs3OTYsOCBAQAogCQkJCQkgICBzaXplb2YoaXNyKSwgJmlzcik7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSB0aW1lb3V0OiBjb2RlYyBpc3I9MHglMDJ4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlzcik7CisJCQkiJXM6ICVzIC0gdGltZW91dDogY29kZWMgaXNyPTB4JTAyeFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaXNyKTsKIAogCQlyZXR1cm4gLUVUSU1FOwogCkBAIC0xMDgzLDI4ICs4MTUsMjYgQEAKIAkvKiBidWZmZXIgc2hvdWxkIG5vdyBiZSBpbiBCVVpfU1RBVEVfRE9ORSAqLwogCWlmICh6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSAhPSBCVVpfU1RBVEVfRE9ORSkKIAkJZHByaW50aygyLAotCQkJS0VSTl9FUlIgIiVzOiBqcGdfc3luYygpIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gaW50ZXJuYWwgc3RhdGUgZXJyb3JcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJKmJzID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uYnM7CiAJYnMtPmZyYW1lID0gZnJhbWU7CiAJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKLQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXSA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdOworCWZoLT5idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkCi16b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB6b3Jhbl9vcGVuX2luaXRfc2Vzc2lvbihzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewogCWludCBpOwotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIFBlciBkZWZhdWx0LCBtYXAgdGhlIFY0TCBCdWZmZXJzICovCi0JZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCW1hcF9tb2RlX3JhdyhmaCk7CiAKIAkvKiB0YWtlIG92ZXIgdGhlIGNhcmQncyBjdXJyZW50IHNldHRpbmdzICovCiAJZmgtPm92ZXJsYXlfc2V0dGluZ3MgPSB6ci0+b3ZlcmxheV9zZXR0aW5nczsKQEAgLTExMTQsNDAgKzg0NCwyMSBAQAogCiAJLyogdjRsIHNldHRpbmdzICovCiAJZmgtPnY0bF9zZXR0aW5ncyA9IHpyLT52NGxfc2V0dGluZ3M7Ci0KLQkvKiB2NGxfYnVmZmVycyAqLwotCW1lbXNldCgmZmgtPnY0bF9idWZmZXJzLCAwLCBzaXplb2Yoc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QpKTsKLQlmb3IgKGkgPSAwOyBpIDwgVklERU9fTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwotCX0KLQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA9IHY0bF9idWZzaXplOwotCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHY0bF9uYnVmczsKLQogCS8qIGpwZyBzZXR0aW5ncyAqLwogCWZoLT5qcGdfc2V0dGluZ3MgPSB6ci0+anBnX3NldHRpbmdzOwogCi0JLyoganBnX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT5qcGdfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl9qcGdfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IEJVWl9NQVhfRlJBTUU7IGkrKykgewotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5icy5mcmFtZSA9IGk7CisJLyogYnVmZmVycyAqLworCW1lbXNldCgmZmgtPmJ1ZmZlcnMsIDAsIHNpemVvZihmaC0+YnVmZmVycykpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfRlJBTUU7IGkrKykgeworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOwogCX0KLQlmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzID0genItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91czsKLQlmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwotCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOwotCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGpwZ19uYnVmczsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiB9CiAKLXN0YXRpYyB2b2lkCi16b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbiAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB6b3Jhbl9jbG9zZV9lbmRfc2Vzc2lvbihzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIG92ZXJsYXkgKi8KQEAgLTExNTksMzYgKzg3MCwzMiBAQAogCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKIAl9CiAKLQkvKiB2NGwgY2FwdHVyZSAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgeworCQkvKiB2NGwgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJICAgIFpPUkFOX0ZSRUU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOworCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQl9CiAKLQkvKiB2NGwgYnVmZmVycyAqLwotCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQl2NGxfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCX0KKwkJLyogdjRsIGJ1ZmZlcnMgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJCXY0bF9mYnVmZmVyX2ZyZWUoZmgpOworCX0gZWxzZSB7CisJCS8qIGpwZyBjYXB0dXJlICovCisJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKKwkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCX0KIAotCS8qIGpwZyBjYXB0dXJlICovCi0JaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwotCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkgICAgWk9SQU5fRlJFRTsKLQl9Ci0KLQkvKiBqcGcgYnVmZmVycyAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JICAgIGZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkgewotCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkvKiBqcGcgYnVmZmVycyAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKQorCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJfQogfQogCkBAIC0xMjAyLDE1ICs5MDksMTEgQEAKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoOwogCWludCByZXMsIGZpcnN0X29wZW4gPSAwOwogCi0JZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiB6b3Jhbl9vcGVuKCVzLCBwaWQ9WyVkXSksIHVzZXJzKC0pPSVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyICsgMSk7CisJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiAlcyglcywgcGlkPVslZF0pLCB1c2VycygtKT0lZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgKyAxKTsKIAogCWxvY2tfa2VybmVsKCk7CiAKLQkvKiBzZWUgZnMvZGV2aWNlLmMgLSB0aGUga2VybmVsIGFscmVhZHkgbG9ja3MgZHVyaW5nIG9wZW4oKSwKLQkgKiBzbyBsb2NraW5nIG91cnNlbHZlcyBvbmx5IGNhdXNlcyBkZWFkbG9ja3MgKi8KLQkvKm11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwotCiAJaWYgKHpyLT51c2VyID49IDIwNDgpIHsKIAkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IHRvbyBtYW55IHVzZXJzICglZCkgb24gZGV2aWNlXG4iLAogCQkJWlJfREVWTkFNRSh6ciksIHpyLT51c2VyKTsKQEAgLTEyMTgsNDEgKzkyMSwxNSBAQAogCQlnb3RvIGZhaWxfdW5sb2NrOwogCX0KIAotCWlmICghenItPmRlY29kZXIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBubyBUViBkZWNvZGVyIGxvYWRlZCBmb3IgZGV2aWNlIVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVJTzsKLQkJZ290byBmYWlsX3VubG9jazsKLQl9Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIHZpZGVvIGRlY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCWlmICh6ci0+ZW5jb2RlciAmJgotCSAgICAhdHJ5X21vZHVsZV9nZXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gZ3JhYiBvd25lcnNoaXAgb2YgdmlkZW8gZW5jb2RlclxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmVzID0gLUVJTzsKLQkJZ290byBmYWlsX2RlY29kZXI7Ci0JfQotCiAJLyogbm93LCBjcmVhdGUgdGhlIG9wZW4oKS1zcGVjaWZpYyBmaWxlX29wcyBzdHJ1Y3QgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9maCksIEdGUF9LRVJORUwpOwogCWlmICghZmgpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fb3BlbigpIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYWxsb2NhdGlvbiBvZiB6b3Jhbl9maCBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxfZW5jb2RlcjsKKwkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJLyogdXNlZCB0byBiZSBCVVpfTUFYX1dJRFRIL0hFSUdIVCwgYnV0IHRoYXQgZ2l2ZXMgb3ZlcmZsb3dzCiAJICogb24gbm9ybS1jaGFuZ2UhICovCkBAIC0xMjYxLDggKzkzOCw4IEBACiAJaWYgKCFmaC0+b3ZlcmxheV9tYXNrKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygb3ZlcmxheV9tYXNrIGZhaWxlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBhbGxvY2F0aW9uIG9mIG92ZXJsYXlfbWFzayBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfZmg7CiAJfQpAQCAtMTI4NCwxOCArOTYxLDEzIEBACiAJLyogc2V0IGZpbGVfb3BzIHN0dWZmICovCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPnpyID0genI7Ci0Jem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmlsZSk7CisJem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oZmgpOwogCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogCiBmYWlsX2ZoOgogCWtmcmVlKGZoKTsKLWZhaWxfZW5jb2RlcjoKLQlpZiAoenItPmVuY29kZXIpCi0JCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLWZhaWxfZGVjb2RlcjoKLQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7CiBmYWlsX3VubG9jazoKIAl1bmxvY2tfa2VybmVsKCk7CiAKQEAgLTEzMTEsMTQgKzk4MywxNCBAQAogCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAotCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoJXMsIHBpZD1bJWRdKSwgdXNlcnMoKyk9JWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgLSAxKTsKKwlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6ICVzKCVzLCBwaWQ9WyVkXSksIHVzZXJzKCspPSVkXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlciAtIDEpOwogCiAJLyoga2VybmVsIGxvY2tzIChmcy9kZXZpY2UuYyksIHNvIGRvbid0IGRvIHRoYXQgb3Vyc2VsdmVzCiAJICogKHByZXZlbnRzIGRlYWRsb2NrcykgKi8KIAkvKm11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsqLwogCi0Jem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oZmlsZSk7CisJem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oZmgpOwogCiAJaWYgKHpyLT51c2VyLS0gPT0gMSkgewkvKiBMYXN0IHByb2Nlc3MgKi8KIAkJLyogQ2xlYW4gdXAgSlBFRyBwcm9jZXNzICovCkBAIC0xMzQ2LDkgKzEwMTgsMTAgQEAKIAkJem9yYW5fc2V0X3BjaV9tYXN0ZXIoenIsIDApOwogCiAJCWlmICghcGFzc190aHJvdWdoKSB7CS8qIFN3aXRjaCB0byBjb2xvciBiYXIgKi8KLQkJCWludCB6ZXJvID0gMCwgdHdvID0gMjsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9FTkFCTEVfT1VUUFVULCAmemVybyk7Ci0JCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmdHdvKTsKKwkJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDIsIDAgfTsKKworCQkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDApOworCQkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQl9CiAJfQogCkBAIC0xMzU2LDE0ICsxMDI5LDcgQEAKIAlrZnJlZShmaC0+b3ZlcmxheV9tYXNrKTsKIAlrZnJlZShmaCk7CiAKLQkvKiByZWxlYXNlIGxvY2tzIG9uIHRoZSBpMmMgbW9kdWxlcyAqLwotCW1vZHVsZV9wdXQoenItPmRlY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQlpZiAoenItPmVuY29kZXIpCi0JCW1vZHVsZV9wdXQoenItPmVuY29kZXItPmRyaXZlci0+ZHJpdmVyLm93bmVyKTsKLQotCS8qbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQotCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoKSBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiAlcyBkb25lXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzkxLDE1ICsxMDU3LDEzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQKLXNldHVwX2ZidWZmZXIgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCitzdGF0aWMgaW50IHNldHVwX2ZidWZmZXIoc3RydWN0IHpvcmFuX2ZoICpmaCwKIAkgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAqYmFzZSwKIAkgICAgICAgY29uc3Qgc3RydWN0IHpvcmFuX2Zvcm1hdCAqZm10LAogCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAogCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3BlcmxpbmUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCiAJLyogKFJvbmFsZCkgdjRsL3Y0bDIgZ3VpZGVsaW5lcyAqLwpAQCAtMTQyNyw4ICsxMDkxLDggQEAKIAkJICogZnJpZW5kbHkgYW5kIHNpbGVudGx5IGRvIGFzIGlmIG5vdGhpbmcgd2VudCB3cm9uZyAqLwogCQlkcHJpbnRrKDMsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBmb3JjZWQgb3ZlcmxheSB0dXJub2ZmIGJlY2F1c2UgZnJhbWVidWZmZXIgY2hhbmdlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBmb3JjZWQgb3ZlcmxheSB0dXJub2ZmIGJlY2F1c2UgZnJhbWVidWZmZXIgY2hhbmdlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAJfQogI2VuZGlmCkBAIC0xNDM2LDMxICsxMTAwLDMxIEBACiAJaWYgKCEoZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyB2YWxpZCBvdmVybGF5IGZvcm1hdCBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaGVpZ2h0IDw9IDAgfHwgd2lkdGggPD0gMCB8fCBieXRlc3BlcmxpbmUgPD0gMCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF9mYnVmZmVyKCkgLSBpbnZhbGlkIGhlaWdodC93aWR0aC9icGwgdmFsdWUgKCVkfCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0LCBieXRlc3BlcmxpbmUpOworCQkJIiVzOiAlcyAtIGludmFsaWQgaGVpZ2h0L3dpZHRoL2JwbCB2YWx1ZSAoJWR8JWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0LCBieXRlc3BlcmxpbmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGJ5dGVzcGVybGluZSAmIDMpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gYnl0ZXNwZXJsaW5lICglZCkgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBieXRlc3BlcmxpbmUpOworCQkJIiVzOiAlcyAtIGJ5dGVzcGVybGluZSAoJWQpIG11c3QgYmUgNC1ieXRlIGFsaWduZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGJ5dGVzcGVybGluZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IGhlaWdodDsKLQl6ci0+YnVmZmVyLndpZHRoID0gd2lkdGg7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IGZtdC0+ZGVwdGg7CisJenItPnZidWZfYmFzZSA9ICh2b2lkICopICgodW5zaWduZWQgbG9uZykgYmFzZSAmIH4zKTsKKwl6ci0+dmJ1Zl9oZWlnaHQgPSBoZWlnaHQ7CisJenItPnZidWZfd2lkdGggPSB3aWR0aDsKKwl6ci0+dmJ1Zl9kZXB0aCA9IGZtdC0+ZGVwdGg7CiAJenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gZm10OwotCXpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lID0gYnl0ZXNwZXJsaW5lOworCXpyLT52YnVmX2J5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKIAogCS8qIFRoZSB1c2VyIHNob3VsZCBzZXQgbmV3IHdpbmRvdyBwYXJhbWV0ZXJzICovCiAJenItPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0ID0gMDsKQEAgLTE0NjksMzUgKzExMzMsMjcgQEAKIH0KIAogCi1zdGF0aWMgaW50Ci1zZXR1cF93aW5kb3cgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCSAgICAgIGludCAgICAgICAgICAgICAgICB4LAotCSAgICAgIGludCAgICAgICAgICAgICAgICB5LAotCSAgICAgIGludCAgICAgICAgICAgICAgICB3aWR0aCwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgaGVpZ2h0LAotCSAgICAgIHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqY2xpcHMsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIGNsaXBjb3VudCwKLQkgICAgICB2b2lkICAgICAgICAgICAgICBfX3VzZXIgKmJpdG1hcCkKK3N0YXRpYyBpbnQgc2V0dXBfd2luZG93KHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCXN0cnVjdCB2NGwyX2NsaXAgX191c2VyICpjbGlwcywgaW50IGNsaXBjb3VudCwgdm9pZCBfX3VzZXIgKmJpdG1hcCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0Jc3RydWN0IHZpZGVvX2NsaXAgKnZjcCA9IE5VTEw7CisJc3RydWN0IHY0bDJfY2xpcCAqdmNwID0gTlVMTDsKIAlpbnQgb24sIGVuZDsKIAogCi0JaWYgKCF6ci0+YnVmZmVyLmJhc2UpIHsKKwlpZiAoIXpyLT52YnVmX2Jhc2UpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfd2luZG93KCkgLSBmcmFtZSBidWZmZXIgaGFzIHRvIGJlIHNldCBmaXJzdFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBmcmFtZSBidWZmZXIgaGFzIHRvIGJlIHNldCBmaXJzdFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTUwNSwxMyArMTE2MSwxMyBAQAogCSAqIFRoZSB2aWRlbyBmcm9udCBlbmQgbmVlZHMgNC1ieXRlIGFsaW5nZWQgbGluZSBzaXplcywgd2UgY29ycmVjdCB0aGF0CiAJICogc2lsZW50bHkgaGVyZSBpZiBuZWNlc3NhcnkKIAkgKi8KLQlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAxNSB8fCB6ci0+YnVmZmVyLmRlcHRoID09IDE2KSB7CisJaWYgKHpyLT52YnVmX2RlcHRoID09IDE1IHx8IHpyLT52YnVmX2RlcHRoID09IDE2KSB7CiAJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjE7CS8qIHJvdW5kIGRvd24gKi8KIAkJeCA9ICh4ICsgMSkgJiB+MTsJLyogcm91bmQgdXAgKi8KIAkJd2lkdGggPSBlbmQgLSB4OwogCX0KIAotCWlmICh6ci0+YnVmZmVyLmRlcHRoID09IDI0KSB7CisJaWYgKHpyLT52YnVmX2RlcHRoID09IDI0KSB7CiAJCWVuZCA9ICh4ICsgd2lkdGgpICYgfjM7CS8qIHJvdW5kIGRvd24gKi8KIAkJeCA9ICh4ICsgMykgJiB+MzsJLyogcm91bmQgdXAgKi8KIAkJd2lkdGggPSBlbmQgLSB4OwpAQCAtMTUyNyw4ICsxMTgzLDggQEAKIAkgICAgd2lkdGggPiBCVVpfTUFYX1dJRFRIIHx8IGhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gd2lkdGggPSAlZCBvciBoZWlnaHQgPSAlZCBpbnZhbGlkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHdpZHRoLCBoZWlnaHQpOworCQkJIiVzOiAlcyAtIHdpZHRoID0gJWQgb3IgaGVpZ2h0ID0gJWQgaW52YWxpZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgd2lkdGgsIGhlaWdodCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU2NiwyMCArMTIyMiwyMCBAQAogCQl9CiAJfSBlbHNlIGlmIChjbGlwY291bnQgPiAwKSB7CiAJCS8qIHdyaXRlIG91ciBvd24gYml0bWFwIGZyb20gdGhlIGNsaXBzICovCi0JCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aWRlb19jbGlwKSAqIChjbGlwY291bnQgKyA0KSk7CisJCXZjcCA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogKGNsaXBjb3VudCArIDQpKTsKIAkJaWYgKHZjcCA9PSBOVUxMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gQWxsb2Mgb2YgY2xpcCBtYXNrIGZhaWxlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIEFsbG9jIG9mIGNsaXAgbWFzayBmYWlsZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWlmIChjb3B5X2Zyb21fdXNlcgotCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiBjbGlwY291bnQpKSB7CisJCSAgICAodmNwLCBjbGlwcywgc2l6ZW9mKHN0cnVjdCB2NGwyX2NsaXApICogY2xpcGNvdW50KSkgewogCQkJdmZyZWUodmNwKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCXdyaXRlX292ZXJsYXlfbWFzayhmaWxlLCB2Y3AsIGNsaXBjb3VudCk7CisJCXdyaXRlX292ZXJsYXlfbWFzayhmaCwgdmNwLCBjbGlwY291bnQpOwogCQl2ZnJlZSh2Y3ApOwogCX0KIApAQCAtMTU5NSwxMSArMTI1MSw4IEBACiAJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIH0KIAotc3RhdGljIGludAotc2V0dXBfb3ZlcmxheSAoc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgICAgIGludCAgICAgICAgICBvbikKK3N0YXRpYyBpbnQgc2V0dXBfb3ZlcmxheShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgb24pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCiAJLyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbywgcmV0dXJuIGltbWVkaWF0bHkgKi8KQEAgLTE2MTIsMTYgKzEyNjUsMTYgQEAKIAkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gb3ZlcmxheSBpcyBhbHJlYWR5IGFjdGl2ZSBmb3IgYW5vdGhlciBzZXNzaW9uXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG92ZXJsYXkgaXMgYWxyZWFkeSBhY3RpdmUgZm9yIGFub3RoZXIgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmICghb24gJiYgenItPm92ZXJsYXlfYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkgICAgZmgtPm92ZXJsYXlfYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSB5b3UgY2Fubm90IGNhbmNlbCBzb21lb25lIGVsc2UncyBzZXNzaW9uXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKQEAgLTE2MzQsMTggKzEyODcsMTggQEAKIAkJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAJCXpyLT5vdmVybGF5X21hc2sgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmICghenItPmJ1ZmZlci5iYXNlIHx8ICFmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQpIHsKKwkJaWYgKCF6ci0+dmJ1Zl9iYXNlIHx8ICFmaC0+b3ZlcmxheV9zZXR0aW5ncy5pc19zZXQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gYnVmZmVyIG9yIHdpbmRvdyBub3Qgc2V0XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gYnVmZmVyIG9yIHdpbmRvdyBub3Qgc2V0XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF9vdmVybGF5KCkgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXpyLT5vdmVybGF5X2FjdGl2ZSA9IGZoLT5vdmVybGF5X2FjdGl2ZSA9IFpPUkFOX0xPQ0tFRDsKQEAgLTE2NjIsNDEgKzEzMTUsNDcgQEAKIAlyZXR1cm4gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwogfQogCi0JLyogZ2V0IHRoZSBzdGF0dXMgb2YgYSBidWZmZXIgaW4gdGhlIGNsaWVudHMgYnVmZmVyIHF1ZXVlICovCi1zdGF0aWMgaW50Ci16b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMgKHN0cnVjdCBmaWxlICAgICAgICAqZmlsZSwKLQkJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYsCi0JCQkgIGludCAgICAgICAgICAgICAgICAgbnVtKQorLyogZ2V0IHRoZSBzdGF0dXMgb2YgYSBidWZmZXIgaW4gdGhlIGNsaWVudHMgYnVmZmVyIHF1ZXVlICovCitzdGF0aWMgaW50IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhzdHJ1Y3Qgem9yYW5fZmggKmZoLAorCQkJCSAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiwgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWJ1Zi0+ZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX01BUFBFRDsKIAogCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CiAJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KIAkJLyogY2hlY2sgcmFuZ2UgKi8KLQkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICAhZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQlkcHJpbnRrKDMsCisJCQlLRVJOX0RFQlVHCisJCQkiJXM6ICVzKCkgLSByYXcgYWN0aXZlPSVjLCBidWZmZXIgJWQ6IHN0YXRlPSVjLCBtYXA9JWNcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCQkiRkFMIltmaC0+YnVmZmVycy5hY3RpdmVdLCBudW0sCisJCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlXSwKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLm1hcCA/ICdZJyA6ICdOJyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCiAJCWJ1Zi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJYnVmLT5sZW5ndGggPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7CisJCWJ1Zi0+bGVuZ3RoID0gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CiAKIAkJLyogZ2V0IGJ1ZmZlciAqLwotCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7CisJCWJ1Zi0+Ynl0ZXN1c2VkID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOwogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX0RPTkU7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKKwkJCWJ1Zi0+dGltZXN0YW1wID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOwogCQl9IGVsc2UgewogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKIAkJfQpAQCAtMTcxMiwyOCArMTM3MSwyNiBAQAogCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CiAKIAkJLyogY2hlY2sgcmFuZ2UgKi8KLQkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyB8fAotCQkgICAgIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJaWYgKG51bSA8IDAgfHwgbnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8CisJCSAgICAhZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bDJfYnVmZmVyX3N0YXR1cygpIC0gd3JvbmcgbnVtYmVyIG9yIGJ1ZmZlcnMgbm90IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJYnVmLT50eXBlID0gKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/CiAJCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgOgogCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlidWYtPmxlbmd0aCA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOwogCiAJCS8qIHRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSB3cml0dGVuIGFmdGVyIGZyYW1lIGhhcyBiZWVuIGNhcHR1cmVkICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKLQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewotCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy5zZXE7Ci0JCQlidWYtPnRpbWVzdGFtcCA9Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKLQkJCWJ1Zi0+Ynl0ZXN1c2VkID0KLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX0RPTkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9VU0VSKSB7CisJCQlidWYtPnNlcXVlbmNlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOworCQkJYnVmLT50aW1lc3RhbXAgPSBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOwogCQl9IGVsc2UgewogCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKQEAgLTE3NDEsMTQgKzEzOTgsMTEgQEAKIAogCQkvKiB3aGljaCBmaWVsZHMgYXJlIHRoZXNlPyAqLwogCQlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gIT0gMSkKLQkJCWJ1Zi0+ZmllbGQgPQotCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOworCQkJYnVmLT5maWVsZCA9IGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT007CiAJCWVsc2UKLQkJCWJ1Zi0+ZmllbGQgPQotCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkgICAgVjRMMl9GSUVMRF9TRVFfQlQ7CisJCQlidWYtPmZpZWxkID0gZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVDsKIAogCQlicmVhazsKIApAQCAtMTc1Niw4ICsxNDEwLDggQEAKIAogCQlkcHJpbnRrKDUsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQkiJXM6ICVzIC0gaW52YWxpZCBidWZmZXIgdHlwZXxtYXBfbW9kZSAoJWR8JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTc3MCw4MSArMTQyNCw1NSBAQAogCiBzdGF0aWMgaW50CiB6b3Jhbl9zZXRfbm9ybSAoc3RydWN0IHpvcmFuICp6ciwKLQkJaW50ICAgICAgICAgICBub3JtKSAvKiBWSURFT19NT0RFXyogKi8KKwkJdjRsMl9zdGRfaWQgbm9ybSkKIHsKLQlpbnQgbm9ybV9lbmNvZGVyLCBvbjsKKwlpbnQgb247CiAKIAlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8CiAJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogc2V0X25vcm0oKSBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAobG9ja19ub3JtICYmIG5vcm0gIT0genItPm5vcm0pIHsKLQkJaWYgKGxvY2tfbm9ybSA+IDEpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIGNhbiBub3Qgc3dpdGNoIG5vcm1cbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBUViBzdGFuZGFyZCBpcyBsb2NrZWQsIG5vcm0gd2FzIG5vdCBjaGFuZ2VkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCW5vcm0gPSB6ci0+bm9ybTsKLQkJfQotCX0KLQotCWlmIChub3JtICE9IFZJREVPX01PREVfQVVUTyAmJgotCSAgICAobm9ybSA8IDAgfHwgbm9ybSA+PSB6ci0+Y2FyZC5ub3JtcyB8fAotCSAgICAgIXpyLT5jYXJkLnR2bltub3JtXSkpIHsKKwlpZiAoIShub3JtICYgenItPmNhcmQubm9ybXMpKSB7CiAJCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogc2V0X25vcm0oKSAtIHVuc3VwcG9ydGVkIG5vcm0gJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgbm9ybSk7CisJCQlLRVJOX0VSUiAiJXM6ICVzIC0gdW5zdXBwb3J0ZWQgbm9ybSAlbGx4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBub3JtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG5vcm0gPT0gVklERU9fTU9ERV9BVVRPKSB7Ci0JCWludCBzdGF0dXM7CisJaWYgKG5vcm0gPT0gVjRMMl9TVERfQUxMKSB7CisJCWludCBzdGF0dXMgPSAwOworCQl2NGwyX3N0ZF9pZCBzdGQgPSAwOwogCi0JCS8qIGlmIHdlIGhhdmUgYXV0b2RldGVjdCwgLi4uICovCi0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsICZjYXBzKTsKLQkJaWYgKCEoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykpIHsKLQkJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBub3JtPWF1dG8gdW5zdXBwb3J0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgcXVlcnlzdGQsICZzdGQpOworCQlkZWNvZGVyX2NhbGwoenIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAogCQkvKiBsZXQgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCiAJCXNzbGVlcCgyKTsKIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fU0lHTkFMKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldF9ub3JtKCkgLSBubyBub3JtIGRldGVjdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gbm8gbm9ybSBkZXRlY3RlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJLyogcmVzZXQgbm9ybSAqLwotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOworCQkJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIHpyLT5ub3JtKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCi0JCQlub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7CisJCW5vcm0gPSBzdGQ7CiAJfQotCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bbm9ybV07Ci0Jbm9ybV9lbmNvZGVyID0gbm9ybTsKKwlpZiAobm9ybSAmIFY0TDJfU1REX1NFQ0FNKQorCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzJdOworCWVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzFdOworCWVsc2UKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKIAogCS8qIFdlIHN3aXRjaCBvdmVybGF5IG9mZiBhbmQgb24gc2luY2UgYSBjaGFuZ2UgaW4gdGhlCiAJICogbm9ybSBuZWVkcyBkaWZmZXJlbnQgVkZFIHNldHRpbmdzICovCkBAIC0xODUyLDggKzE0ODAsOCBAQAogCWlmIChvbikKIAkJenIzNjA1N19vdmVybGF5KHpyLCAwKTsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfTk9STSwgJm5vcm1fZW5jb2Rlcik7CisJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIG5vcm0pOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RkX291dHB1dCwgbm9ybSk7CiAKIAlpZiAob24pCiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMSk7CkBAIC0xODY4LDcgKzE0OTYsNyBAQAogem9yYW5fc2V0X2lucHV0IChzdHJ1Y3Qgem9yYW4gKnpyLAogCQkgaW50ICAgICAgICAgICBpbnB1dCkKIHsKLQlpbnQgcmVhbGlucHV0OworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCWlmIChpbnB1dCA9PSB6ci0+aW5wdXQpIHsKIAkJcmV0dXJuIDA7CkBAIC0xODc4LDIzICsxNTA2LDIzIEBACiAJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX1dBUk5JTkcKLQkJCSIlczogc2V0X2lucHV0KCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSB6ci0+Y2FyZC5pbnB1dHMpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0X2lucHV0KCkgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgaW5wdXQpOworCQkJIiVzOiAlcyAtIHVubnN1cHBvcnRlZCBpbnB1dCAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaW5wdXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZWFsaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtpbnB1dF0ubXV4c2VsOworCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbaW5wdXRdLm11eHNlbDsKIAl6ci0+aW5wdXQgPSBpbnB1dDsKIAotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfSU5QVVQsICZyZWFsaW5wdXQpOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkwMyw0MTAgKzE1MzEsMTQgQEAKICAqICAgaW9jdGwgcm91dGluZQogICovCiAKLXN0YXRpYyBsb25nIHpvcmFuX2RvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCitzdGF0aWMgbG9uZyB6b3Jhbl9kZWZhdWx0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBpbnQgY21kLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCS8qIENBUkVGVUw6IHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzIGhlcmUgKi8KIAlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGRlciBidWZmZXJzIGx5aW5nIGFyb3VuZC4uLiBXZSBkb24ndCB3YW50Ci0JICogdG8gd2FpdCwgYnV0IHdlIGRvIHdhbnQgdG8gdHJ5IGNsZWFuaW5nIHRoZW0gdXAgQVNBUC4gU28KLQkgKiB3ZSB0cnkgdG8gb2J0YWluIHRoZSBsb2NrIGFuZCBmcmVlIHRoZW0uIElmIHRoYXQgZmFpbHMsIHdlCi0JICogZG9uJ3QgZG8gYW55dGhpbmcgYW5kIHdhaXQgZm9yIHRoZSBuZXh0IHR1cm4uIEluIHRoZSBlbmQsCi0JICogem9yYW5fY2xvc2UoKSBvciBhIG5ldyBhbGxvY2F0aW9uIHdpbGwgc3RpbGwgZnJlZSB0aGVtLi4uCi0JICogVGhpcyBpcyBqdXN0IGEgJ3RoZSBzb29uZXIgdGhlIGJldHRlcicgZXh0cmEgJ2ZlYXR1cmUnCi0JICoKLQkgKiBXZSBkb24ndCBmcmVlIHRoZSBidWZmZXJzIHJpZ2h0IG9uIG11bm1hcCgpIGJlY2F1c2UgdGhhdAotCSAqIGNhdXNlcyBvb3BzZXMgKGtmcmVlKCkgaW5zaWRlIG11bm1hcCgpIG9vcHNlcyBmb3Igbm8KLQkgKiBhcHBhcmVudCByZWFzb24gLSBpdCdzIGFsc28gbm90IHJlcHJvZHVjZWFibGUgaW4gYW55IHdheSwKLQkgKiBidXQgbW92aW5nIHRoZSBmcmVlIGNvZGUgb3V0c2lkZSB0aGUgbXVubWFwKCkgaGFuZGxlciBmaXhlcwotCSAqIGFsbCB0aGlzLi4uIElmIHNvbWVvbmUga25vd3Mgd2h5LCBwbGVhc2UgZXhwbGFpbiBtZSAoUm9uYWxkKQotCSAqLwotCWlmIChtdXRleF90cnlsb2NrKCZ6ci0+cmVzb3VyY2VfbG9jaykpIHsKLQkJLyogd2Ugb2J0YWluZWQgaXQhIExldCdzIHRyeSB0byBmcmVlIHNvbWUgdGhpbmdzICovCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpCi0JCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQotCQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBWSURJT0NHQ0FQOgotCXsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnZjYXAgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2Y2FwLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpKTsKLQkJc3RybmNweSh2Y2FwLT5uYW1lLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKHZjYXAtPm5hbWUpLTEpOwotCQl2Y2FwLT50eXBlID0gWk9SQU5fVklEX1RZUEU7Ci0KLQkJdmNhcC0+Y2hhbm5lbHMgPSB6ci0+Y2FyZC5pbnB1dHM7Ci0JCXZjYXAtPmF1ZGlvcyA9IDA7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNhcC0+bWF4d2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQl2Y2FwLT5tYXhoZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJdmNhcC0+bWlud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQl2Y2FwLT5taW5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7Ci0JCWludCBjaGFubmVsID0gdmNoYW4tPmNoYW5uZWw7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DR0NIQU4gLSBjaGFubmVsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZjaGFuLT5jaGFubmVsKTsKLQotCQltZW1zZXQodmNoYW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkpOwotCQlpZiAoY2hhbm5lbCA+IHpyLT5jYXJkLmlucHV0cyB8fCBjaGFubmVsIDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHQ0hBTiBvbiBub3QgZXhpc3RpbmcgY2hhbm5lbCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY2hhbm5lbCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXN0cmNweSh2Y2hhbi0+bmFtZSwgenItPmNhcmQuaW5wdXRbY2hhbm5lbF0ubmFtZSk7Ci0KLQkJdmNoYW4tPnR1bmVycyA9IDA7Ci0JCXZjaGFuLT5mbGFncyA9IDA7Ci0JCXZjaGFuLT50eXBlID0gVklERU9fVFlQRV9DQU1FUkE7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdmNoYW4tPm5vcm0gPSB6ci0+bm9ybTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjaGFuLT5jaGFubmVsID0gY2hhbm5lbDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIFJKOiB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwOi8vcm9hZHJ1bm5lci5zd2Fuc2VhLmxpbnV4Lm9yZy51ay92NGxhcGkuc2h0bWwgc2F5czoKLQkJICoKLQkJICogKiAiVGhlIFZJRElPQ1NDSEFOIGlvY3RsIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQgYW5kIHN3aXRjaGVzIHRoZSBjYXB0dXJlIHRvIHRoaXMgaW5wdXQuIgotCQkgKiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXgotCQkgKiAqIFRoZSBmYW1vcyBCVFRWIGRyaXZlciBoYXMgaXQgaW1wbGVtZW50ZWQgd2l0aCBhIHN0cnVjdCB2aWRlb19jaGFubmVsIGFyZ3VtZW50Ci0JCSAqICogYW5kIHdlIGZvbGxvdyBpdCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zCi0JCSAqICoKLQkJICogKiBCVFc6IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRoZSB1c2VyIGNhbiBzZXQgdGhlIG5vcm0hCi0JCSAqLwotCi0JY2FzZSBWSURJT0NTQ0hBTjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jaGFubmVsICp2Y2hhbiA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NDSEFOIC0gY2hhbm5lbD0lZCwgbm9ybT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCwgdmNoYW4tPm5vcm0pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfaW5wdXQoenIsIHZjaGFuLT5jaGFubmVsKSkpCi0JCQlnb3RvIHNjaGFuX3VubG9ja19hbmRfcmV0dXJuOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCB2Y2hhbi0+bm9ybSkpKQotCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dQSUNUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZwaWN0LCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX3BpY3R1cmUpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2cGljdC0+aHVlID0genItPmh1ZTsKLQkJdnBpY3QtPmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJdnBpY3QtPmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQl2cGljdC0+Y29sb3VyID0genItPnNhdHVyYXRpb247Ci0JCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKLQkJCXZwaWN0LT5kZXB0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGg7Ci0JCQl2cGljdC0+cGFsZXR0ZSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+cGFsZXR0ZTsKLQkJfSBlbHNlIHsKLQkJCXZwaWN0LT5kZXB0aCA9IDA7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1BJQ1Q6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqdnBpY3QgPSBhcmc7Ci0JCWludCBpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1BJQ1QgLSBicmk9JWQsIGh1ZT0lZCwgY29sPSVkLCBjb249JWQsIGRlcD0lZCwgcGFsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5icmlnaHRuZXNzLCB2cGljdC0+aHVlLAotCQkJdnBpY3QtPmNvbG91ciwgdnBpY3QtPmNvbnRyYXN0LCB2cGljdC0+ZGVwdGgsCi0JCQl2cGljdC0+cGFsZXR0ZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCA9ICZ6b3Jhbl9mb3JtYXRzW2ldOwotCi0JCQlpZiAoZm10LT5wYWxldHRlICE9IC0xICYmCi0JCQkgICAgZm10LT5mbGFncyAmIFpPUkFOX0ZPUk1BVF9PVkVSTEFZICYmCi0JCQkgICAgZm10LT5wYWxldHRlID09IHZwaWN0LT5wYWxldHRlICYmCi0JCQkgICAgZm10LT5kZXB0aCA9PSB2cGljdC0+ZGVwdGgpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DU1BJQ1QgLSBJbnZhbGlkIHBhbGV0dGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHZwaWN0LT5wYWxldHRlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgdnBpY3QpOwotCi0JCXpyLT5odWUgPSB2cGljdC0+aHVlOwotCQl6ci0+Y29udHJhc3QgPSB2cGljdC0+Y29udHJhc3Q7Ci0JCXpyLT5zYXR1cmF0aW9uID0gdnBpY3QtPmNvbG91cjsKLQkJenItPmJyaWdodG5lc3MgPSB2cGljdC0+YnJpZ2h0bmVzczsKLQotCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NDQVBUVVJFOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0NBUFRVUkUgLSBvbj0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb24pOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gc2V0dXBfb3ZlcmxheShmaWxlLCAqb24pOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dXSU5cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodndpbiwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKTsKLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2d2luLT54ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKLQkJdndpbi0+eSA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7Ci0JCXZ3aW4tPndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCXZ3aW4tPmhlaWdodCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZ3aW4tPmNsaXBjb3VudCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NXSU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fd2luZG93ICp2d2luID0gYXJnOwotCQlpbnQgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU1dJTiAtIHg9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNsaXBjb3VudD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2d2luLT54LCB2d2luLT55LCB2d2luLT53aWR0aCwKLQkJCXZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcGNvdW50KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF93aW5kb3coZmlsZSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCi0JCQkJIHZ3aW4tPmhlaWdodCwgdndpbi0+Y2xpcHMsCi0JCQkJIHZ3aW4tPmNsaXBjb3VudCwgTlVMTCk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dGQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqdmJ1ZiA9IHpyLT5idWZmZXI7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTRkJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19idWZmZXIgKnZidWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DU0ZCVUYgLSBiYXNlPSVwLCB3PSVkLCBoPSVkLCBkZXB0aD0lZCwgYnBsPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmJhc2UsIHZidWYtPndpZHRoLAotCQkJdmJ1Zi0+aGVpZ2h0LCB2YnVmLT5kZXB0aCwgdmJ1Zi0+Ynl0ZXNwZXJsaW5lKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmRlcHRoID09IHZidWYtPmRlcHRoKQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NTRkJVRiAtIGludmFsaWQgZmJ1ZiBkZXB0aCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgdmJ1Zi0+ZGVwdGgpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIHZidWYtPmJhc2UsICZ6b3Jhbl9mb3JtYXRzW2ldLAotCQkJCSAgdmJ1Zi0+d2lkdGgsIHZidWYtPmhlaWdodCwKLQkJCQkgIHZidWYtPmJ5dGVzcGVybGluZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU1lOQzoKLQl7Ci0JCWludCAqZnJhbWUgPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NTWU5DIC0gZnJhbWU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHY0bF9zeW5jKGZpbGUsICpmcmFtZSk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoIXJlcykKLQkJCXpyLT52NGxfc3luY190YWlsKys7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DTUNBUFRVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbW1hcCAqdm1hcCA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ01DQVBUVVJFIC0gZnJhbWU9JWQsIGdlb209JWR4JWQsIGZtdD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2bWFwLT5mcmFtZSwgdm1hcC0+d2lkdGgsIHZtYXAtPmhlaWdodCwKLQkJCXZtYXAtPmZvcm1hdCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB2NGxfZ3JhYihmaWxlLCB2bWFwKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DR01CVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm1idWYgPSBhcmc7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dNQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdm1idWYtPnNpemUgPQotCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKLQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJdm1idWYtPmZyYW1lcyA9IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsKLQkJZm9yIChpID0gMDsgaSA8IHZtYnVmLT5mcmFtZXM7IGkrKykgewotCQkJdm1idWYtPm9mZnNldHNbaV0gPQotCQkJICAgIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NHTUJVRiAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIFY0TCBidWZmZXJzICovCi0JCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQl2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dVTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX3VuaXQgKnZ1bml0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dVTklUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJdnVuaXQtPnZpZGVvID0genItPnZpZGVvX2Rldi0+bWlub3I7Ci0JCXZ1bml0LT52YmkgPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+cmFkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+YXVkaW8gPSBWSURFT19OT19VTklUOwotCQl2dW5pdC0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogUko6IEluIHByaW5jaXBhbCB3ZSBjb3VsZCBzdXBwb3J0IHN1YmNhcHR1cmVzIGZvciBWNEwgZ3JhYmJpbmcuCi0JCSAqICAgICBOb3QgZXZlbiB0aGUgZmFtb3VzIEJUVFYgZHJpdmVyIGhhcyB0aGVtLCBob3dldmVyLgotCQkgKiAgICAgSWYgdGhlcmUgc2hvdWxkIGJlIGEgc3Ryb25nIGRlbWFuZCwgb25lIGNvdWxkIGNvbnNpZGVyCi0JCSAqICAgICB0byBpbXBsZW1lbnQgdGhlbS4KLQkJICovCi0JY2FzZSBWSURJT0NHQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NHQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTQ0FQVFVSRToKLQl7Ci0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NTQ0FQVFVSRSBub3Qgc3VwcG9ydGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCiAJY2FzZSBCVVpJT0NfR19QQVJBTVM6CiAJewogCQlzdHJ1Y3Qgem9yYW5fcGFyYW1zICpicGFyYW1zID0gYXJnOwpAQCAtMjMxOSw3ICsxNTUxLDEzIEBACiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCi0JCWJwYXJhbXMtPm5vcm0gPSB6ci0+bm9ybTsKKwkJaWYgKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJCWJwYXJhbXMtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7CisJCWVsc2UgaWYgKHpyLT5ub3JtICYgVjRMMl9TVERfUEFMKQorCQkJYnBhcmFtcy0+bm9ybSA9IFZJREVPX01PREVfUEFMOworCQllbHNlCisJCQlicGFyYW1zLT5ub3JtID0gVklERU9fTU9ERV9TRUNBTTsKKwogCQlicGFyYW1zLT5pbnB1dCA9IHpyLT5pbnB1dDsKIAogCQlicGFyYW1zLT5kZWNpbWF0aW9uID0gZmgtPmpwZ19zZXR0aW5ncy5kZWNpbWF0aW9uOwpAQCAtMjM1Miw3ICsxNTkwLDYgQEAKIAogCQlyZXR1cm4gMDsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfU19QQVJBTVM6CiAJewpAQCAtMjM5NSwxOCArMTYzMiwxNyBAQAogCiAJCS8qIENoZWNrIHRoZSBwYXJhbXMgZmlyc3QgYmVmb3JlIG92ZXJ3cml0aW5nIG91cgogCQkgKiBudGVybmFsIHZhbHVlcyAqLwotCQlpZiAoem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSB7CisJCWlmICh6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCkpIHsKIAkJCXJlcyA9IC1FSU5WQUw7CiAJCQlnb3RvIHNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAogCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0Jc3BhcmFtc191bmxvY2tfYW5kX3JldHVybjoKK3NwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1JFUUJVRlM6CiAJewpAQCAtMjQzMCwzOCArMTY2NiwzNCBAQAogCQkgKiB0YWJsZXMgdG8gYSBNYXhpbXVtIG9mIDIgTUIgKi8KIAkJaWYgKGJyZXEtPnNpemUgPiBqcGdfYnVmc2l6ZSkKIAkJCWJyZXEtPnNpemUgPSBqcGdfYnVmc2l6ZTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgJiYKLQkJICAgIGJyZXEtPnNpemUgPiBNQVhfS01BTExPQ19NRU0pCi0JCQlicmVxLT5zaXplID0gTUFYX0tNQUxMT0NfTUVNOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogQlVaSU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7CiAJCQlyZXMgPSAtRUJVU1k7CiAJCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCi0JCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBicmVxLT5zaXplOworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzIC0gY291bGQKKwkJICogYWxzbyBiZSAqX1BMQVksIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBoZXJlICovCisJCW1hcF9tb2RlX2pwZyhmaCwgMCk7CisJCWZoLT5idWZmZXJzLm51bV9idWZmZXJzID0gYnJlcS0+Y291bnQ7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gYnJlcS0+c2l6ZTsKIAotCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKKwkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZoKSkgewogCQkJcmVzID0gLUVOT01FTTsKIAkJCWdvdG8ganBncmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKLQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCi0JCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLwotCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCWpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKK2pwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfUUJVRl9DQVBUOgogCXsKQEAgLTI0NzEsMTIgKzE3MDMsMTEgQEAKIAkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOworCQlyZXMgPSBqcGdfcWJ1ZihmaCwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpOwogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19RQlVGX1BMQVk6CiAJewpAQCAtMjQ4NiwxMiArMTcxNywxMSBAQAogCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7CiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfcWJ1ZihmaWxlLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKKwkJcmVzID0ganBnX3FidWYoZmgsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOwogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19TWU5DOgogCXsKQEAgLTI1MDEsMTcgKzE3MzEsMjYgQEAKIAkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogQlVaSU9DX1NZTkNcbiIsIFpSX0RFVk5BTUUoenIpKTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19zeW5jKGZpbGUsIGJzeW5jKTsKKworCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgeworCQkJZHByaW50aygyLCBLRVJOX1dBUk5JTkcKKwkJCQkiJXM6ICVzIC0gbm90IGluIGpwZyBjYXB0dXJlIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlyZXMgPSBqcGdfc3luYyhmaCwgYnN5bmMpOworCQl9CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX0dfU1RBVFVTOgogCXsKIAkJc3RydWN0IHpvcmFuX3N0YXR1cyAqYnN0YXQgPSBhcmc7Ci0JCWludCBub3JtLCBpbnB1dCwgc3RhdHVzLCByZXMgPSAwOworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CisJCWludCBzdGF0dXMgPSAwLCByZXMgPSAwOworCQl2NGwyX3N0ZF9pZCBub3JtOwogCiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19HX1NUQVRVU1xuIiwgWlJfREVWTkFNRSh6cikpOwogCkBAIC0yNTIzLDggKzE3NjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOwotCQlub3JtID0gVklERU9fTU9ERV9BVVRPOworCQlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W2JzdGF0LT5pbnB1dF0ubXV4c2VsOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIApAQCAtMjUzNywxNjI5ICsxNzc1LDEyNjIgQEAKIAkJCWdvdG8gZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJCS8qIHNsZWVwIDEgc2Vjb25kICovCiAJCXNzbGVlcCgxKTsKIAogCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBxdWVyeXN0ZCwgJm5vcm0pOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CiAKIAkJLyogcmVzdG9yZSBwcmV2aW91cyBpbnB1dCBhbmQgbm9ybSAqLwotCQlpbnB1dCA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaW5wdXQpOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZ6ci0+bm9ybSk7Ci0JZ3N0YXRfdW5sb2NrX2FuZF9yZXR1cm46CisJCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKK2dzdGF0X3VubG9ja19hbmRfcmV0dXJuOgogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlpZiAoIXJlcykgewogCQkJYnN0YXQtPnNpZ25hbCA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpID8gMSA6IDA7Ci0JCQlpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfTlRTQykKKwkJCSAgICAoc3RhdHVzICYgVjRMMl9JTl9TVF9OT19TSUdOQUwpID8gMCA6IDE7CisJCQlpZiAobm9ybSAmIFY0TDJfU1REX05UU0MpCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCQllbHNlIGlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19TRUNBTSkKKwkJCWVsc2UgaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkKIAkJCQlic3RhdC0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07CiAJCQllbHNlCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKIAogCQkJYnN0YXQtPmNvbG9yID0KLQkJCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpID8gMSA6IDA7CisJCQkgICAgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fQ09MT1IpID8gMCA6IDE7CiAJCX0KIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7Ci0KLQkJLyogVGhlIG5ldyB2aWRlbzRsaW51eDIgY2FwdHVyZSBpbnRlcmZhY2UgLSBtdWNoIG5pY2VyIHRoYW4gdmlkZW80bGludXgxLCBzaW5jZQotCQkgKiBpdCBhbGxvd3MgZm9yIGludGVncmF0aW5nIHRoZSBKUEVHIGNhcHR1cmluZyBjYWxscyBpbnNpZGUgc3RhbmRhcmQgdjRsMgotCQkgKi8KLQotCWNhc2UgVklESU9DX1FVRVJZQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNBUFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7Ci0JCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ6b3JhbiIsIHNpemVvZihjYXAtPmRyaXZlciktMSk7Ci0JCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCi0JCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKLQkJY2FwLT52ZXJzaW9uID0KLQkJICAgIEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCi0JCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKLQkJY2FwLT5jYXBhYmlsaXRpZXMgPSBaT1JBTl9WNEwyX1ZJRF9GTEFHUzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQgPSBhcmc7Ci0JCWludCBpbmRleCA9IGZtdC0+aW5kZXgsIG51bSA9IC0xLCBpLCBmbGFnID0gMCwgdHlwZSA9Ci0JCSAgICBmbXQtPnR5cGU7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1fRk1UIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT5pbmRleCk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWZsYWcgPSBaT1JBTl9GT1JNQVRfUExBWUJBQ0s7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX09WRVJMQVk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0VOVU1fRk1UIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQotCQkJCW51bSsrOwotCQkJaWYgKG51bSA9PSBmbXQtPmluZGV4KQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChmbXQtPmluZGV4IDwgMCAvKiBsYXRlLCBidXQgbm90IHRvbyBsYXRlICovICB8fAotCQkgICAgaSA9PSBOVU1fRk9STUFUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+aW5kZXggPSBpbmRleDsKLQkJZm10LT50eXBlID0gdHlwZTsKLQkJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKLQkJZm10LT5waXhlbGZvcm1hdCA9IHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjOwotCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQotCQkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQgPSBhcmc7Ci0JCWludCB0eXBlID0gZm10LT50eXBlOwotCi0JCWRwcmludGsoNSwgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0ZNVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJZm10LT5mbXQud2luLncubGVmdCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7Ci0JCQlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwotCQkJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKLQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9Ci0JCQkgICAgZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OwotCQkJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+Ci0JCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJZWxzZQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfVE9QOwotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKLQkJCSAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7Ci0KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLndpZHRoOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7Ci0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWlmIChCVVpfTUFYX0hFSUdIVCA8Ci0JCQkJICAgIChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfVE9QOwotCi0JCQl9IGVsc2UgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLwotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0IC8KLQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICoKLQkJCQkgICAgIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPQotCQkJCSAgICBWNEwyX1BJWF9GTVRfTUpQRUc7Ci0JCQkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfU0VRX0JUIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX1NFUV9CVCk7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1RPUCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9CT1RUT00pOwotCi0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCQkJfQotCi0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfRk1UIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQkJX19sZTMyIHByaW50Zm9ybWF0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0ZNVCAtIHR5cGU9JWQsICIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQotCQkJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKLQkJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCi0JCQkJZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlyZXMgPQotCQkJICAgIHNldHVwX3dpbmRvdyhmaWxlLCBmbXQtPmZtdC53aW4udy5sZWZ0LAotCQkJCQkgZm10LT5mbXQud2luLncudG9wLAotCQkJCQkgZm10LT5mbXQud2luLncud2lkdGgsCi0JCQkJCSBmbXQtPmZtdC53aW4udy5oZWlnaHQsCi0JCQkJCSAoc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICopCi0JCQkJCSAgIGZtdC0+Zm10Lndpbi5jbGlwcywKLQkJCQkJIGZtdC0+Zm10Lndpbi5jbGlwY291bnQsCi0JCQkJCSBmbXQtPmZtdC53aW4uYml0bWFwKTsKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmV0dXJuIHJlczsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQlwcmludGZvcm1hdCA9Ci0JCQkgICAgX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCQkJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCQlmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCi0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJCS8qIHdlIGNhbiBiZSByZXF1ZXN0ZWQgdG8gZG8gSlBFRy9yYXcgcGxheWJhY2svY2FwdHVyZSAqLwotCQkJaWYgKCEKLQkJCSAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkJICAgICAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCQkgICAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KLQkJCSAgICAgIFY0TDJfUElYX0ZNVF9NSlBFRykpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVua25vd24gdHlwZSAlZC8weCV4KCU0LjRzKSBjb21iaW5hdGlvblxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSwKLQkJCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAotCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLwotCQkJCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPgotCQkJCQkJCSAgICBqcGdfc2V0dGluZ3MpOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCSAgICBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwotCi0JCQkJLyogd2UgaGVyZWJ5IGFidXNlIHRoaXMgdmFyaWFibGUgdG8gc2hvdyB0aGF0Ci0JCQkJICogd2UncmUgZ29ubmEgZG8gbWpwZWcgY2FwdHVyZSAqLwotCQkJCWZoLT5tYXBfbW9kZSA9Ci0JCQkJICAgIChmbXQtPnR5cGUgPT0KLQkJCQkgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgPwotCQkJCSAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIDoKLQkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk7Ci0JCQlzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PQotCQkJCQkgICAgem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4ICglNC40cylcbiIsCi0JCQkJCQlaUl9ERVZOQU1FKHpyKSwKLQkJCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwKLQkJCQkgICAgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgJiYKLQkJCQkgICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0KLQkJCQkgICAgIFpPUkFOX0ZSRUUpKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZpbGUsCi0JCQkJCQkJICBmbXQtPmZtdC5waXguCi0JCQkJCQkJICB3aWR0aCwKLQkJCQkJCQkgIGZtdC0+Zm10LnBpeC4KLQkJCQkJCQkgIGhlaWdodCwKLQkJCQkJCQkgICZ6b3Jhbl9mb3JtYXRzCi0JCQkJCQkJICBbaV0pKSkKLQkJCQkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogdGVsbCB0aGUgdXNlciB0aGUKLQkJCQkgKiByZXN1bHRzL21pc3Npbmcgc3R1ZmYgKi8KLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJCWZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICoKLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7Ci0JCQkJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPQotCQkJCQlmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Y29sb3JzcGFjZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQkJCXNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfRkJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GQlVGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KGZiLCAwLCBzaXplb2YoKmZiKSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmJhc2UgPSB6ci0+YnVmZmVyLmJhc2U7Ci0JCWZiLT5mbXQud2lkdGggPSB6ci0+YnVmZmVyLndpZHRoOwotCQlmYi0+Zm10LmhlaWdodCA9IHpyLT5idWZmZXIuaGVpZ2h0OwotCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7Ci0JCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0KLQkJCQlmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJfQotCQlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JCWZiLT5mbXQuZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7Ci0JCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0ZCVUY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwotCQlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfRkJVRiAtIGJhc2U9MHglcCwgc2l6ZT0lZHglZCwgYnBsPSVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZiLT5iYXNlLCBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCWZiLT5mbXQuYnl0ZXNwZXJsaW5lLCBmYi0+Zm10LnBpeGVsZm9ybWF0LAotCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQotCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GQlVGIC0gZm9ybWF0PTB4JXggKCU0LjRzKSBub3QgYWxsb3dlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9Ci0JCSAgICBzZXR1cF9mYnVmZmVyKGZpbGUsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKLQkJCQkgIGZiLT5mbXQud2lkdGgsIGZiLT5mbXQuaGVpZ2h0LAotCQkJCSAgZmItPmZtdC5ieXRlc3BlcmxpbmUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19PVkVSTEFZOgotCXsKLQkJaW50ICpvbiA9IGFyZywgcmVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19QUkVWSUVXIC0gb249JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUkVRQlVGUzoKLQl7Ci0JCXN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19SRVFCVUZTIC0gdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCi0JCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG9ubHkgTUVNT1JZX01NQVAgY2FwdHVyZSBpcyBzdXBwb3J0ZWQsIG5vdCAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT5tZW1vcnkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCi0JCSAgICByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0KLQkJCS8qIGNvbnRyb2wgdXNlciBpbnB1dCAqLwotCQkJaWYgKHJlcS0+Y291bnQgPCAyKQotCQkJCXJlcS0+Y291bnQgPSAyOwotCQkJaWYgKHJlcS0+Y291bnQgPiB2NGxfbmJ1ZnMpCi0JCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKLQkJCWZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7Ci0KLQkJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOwotCi0JCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKLQkJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCi0JCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgNCkKLQkJCQlyZXEtPmNvdW50ID0gNDsKLQkJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSBqcGdfbmJ1ZnM7Ci0JCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0KLQkJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaWxlKSkgewotCQkJCXJlcyA9IC1FTk9NRU07Ci0JCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCi0JCQlpZiAocmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOwotCQkJZWxzZQotCQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOwotCi0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlfX3UzMiB0eXBlID0gYnVmLT50eXBlOwotCQlpbnQgaW5kZXggPSBidWYtPmluZGV4LCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfUVVFUllCVUYgLSBpbmRleD0lZCwgdHlwZT0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPmluZGV4LCBidWYtPnR5cGUpOwotCi0JCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0JCWJ1Zi0+dHlwZSA9IHR5cGU7Ci0JCWJ1Zi0+aW5kZXggPSBpbmRleDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIGJ1Zi0+aW5kZXgpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19RQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHICIlczogVklESU9DX1FCVUYgLSB0eXBlPSVkLCBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGJ1Zi0+aW5kZXgpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQkJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgewotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTOwotCQkJfSBlbHNlIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQkJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTOwotCQkJfQotCi0JCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQlyZXMgPQotCQkJICAgIHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBidWYtPmluZGV4LAotCQkJCQkJICBjb2RlY19tb2RlKTsKLQkJCWlmIChyZXMgIT0gMCkKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKSB7Ci0JCQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBjb2RlY19tb2RlKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19EUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19EUUJVRiAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0gdjRsX3N5bmMoZmlsZSwgbnVtKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCWVsc2UKLQkJCQl6ci0+djRsX3N5bmNfdGFpbCsrOwotCQkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgbnVtKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJewotCQkJc3RydWN0IHpvcmFuX3N5bmMgYnM7Ci0KLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKLQkJCWVsc2UKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCW51bSA9Ci0JCQkgICAgenItPmpwZ19wZW5kW3pyLT4KLQkJCQkJIGpwZ19xdWVfdGFpbCAmIEJVWl9NQVNLX0ZSQU1FXTsKLQotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCi0JCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9Ci0JCQkgICAgQlVaX1NUQVRFX0RPTkUpIHsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlyZXMgPSBqcGdfc3luYyhmaWxlLCAmYnMpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBicy5mcmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19EUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCWRxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PTjoKLQl7Ci0JCWludCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PTlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAotCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fTE9DS0VEOwotCQkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7Ci0KLQkJCXpyLT52NGxfc3luY190YWlsID0genItPnY0bF9wZW5kX3RhaWw7Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgewotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDEpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCi0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQotCQkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgewotCQkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KLQkJCQlqcGVnX3N0YXJ0KHpyKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PTiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NUUkVBTU9GRjoKLQl7Ci0JCWludCBpLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TVFJFQU1PRkZcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCi0JCQkgICAgenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLwotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkvKiB1bmxvYWQgY2FwdHVyZSAqLwotCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJfQotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9Ci0JCQkJICAgIEJVWl9TVEFURV9VU0VSOwotCQkJZmgtPnY0bF9idWZmZXJzID0genItPnY0bF9idWZmZXJzOwotCi0JCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKLQotCQkJenItPnY0bF9ncmFiX3NlcSA9IDA7Ci0JCQl6ci0+djRsX3BlbmRfaGVhZCA9IHpyLT52NGxfcGVuZF90YWlsID0gMDsKLQkJCXpyLT52NGxfc3luY190YWlsID0gMDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJcmVzID0KLQkJCSAgICBqcGdfcWJ1ZihmaWxlLCAtMSwKLQkJCQkgICAgIChmaC0+bWFwX21vZGUgPT0KLQkJCQkgICAgICBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/Ci0JCQkJICAgICBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgOgotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NUUkVBTU9GRiAtIGludmFsaWQgbWFwIG1vZGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWUNUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBjdHJsLT5pZDsKLQkJCW1lbXNldChjdHJsLCAwLCBzaXplb2YoKmN0cmwpKTsKLQkJCWN0cmwtPmlkID0gaWQ7Ci0JCX0KLQotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkJyaWdodG5lc3MiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIkNvbnRyYXN0Iiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXN0cm5jcHkoY3RybC0+bmFtZSwgIlNhdHVyYXRpb24iLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJIdWUiLCBzaXplb2YoY3RybC0+bmFtZSktMSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWN0cmwtPm1pbmltdW0gPSAwOwotCQljdHJsLT5tYXhpbXVtID0gNjU1MzU7Ci0JCWN0cmwtPnN0ZXAgPSAxOwotCQljdHJsLT5kZWZhdWx0X3ZhbHVlID0gMzI3Njg7Ci0JCWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+YnJpZ2h0bmVzczsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+Y29udHJhc3Q7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJY3RybC0+dmFsdWUgPSB6ci0+c2F0dXJhdGlvbjsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCWN0cmwtPnZhbHVlID0genItPmh1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsID0gYXJnOwotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSBwaWN0OwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0NUUkwgLSBpZD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT5pZCk7Ci0KLQkJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KLQkJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAotCQkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gNjU1MzUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1RSTCAtIGludmFsaWQgdmFsdWUgJWQgZm9yIGlkPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBjdHJsLT52YWx1ZSwgY3RybC0+aWQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQkJenItPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQkJenItPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQkJenItPnNhdHVyYXRpb24gPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCXpyLT5odWUgPSBjdHJsLT52YWx1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXBpY3QuYnJpZ2h0bmVzcyA9IHpyLT5icmlnaHRuZXNzOwotCQlwaWN0LmNvbnRyYXN0ID0genItPmNvbnRyYXN0OwotCQlwaWN0LmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOwotCQlwaWN0Lmh1ZSA9IHpyLT5odWU7Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9QSUNUVVJFLCAmcGljdCk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1TVEQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNU1REIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgc3RkLT5pbmRleCk7Ci0KLQkJaWYgKHN0ZC0+aW5kZXggPCAwIHx8IHN0ZC0+aW5kZXggPj0gKHpyLT5jYXJkLm5vcm1zICsgMSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBzdGQtPmluZGV4OwotCQkJbWVtc2V0KHN0ZCwgMCwgc2l6ZW9mKCpzdGQpKTsKLQkJCXN0ZC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCWlmIChzdGQtPmluZGV4ID09IHpyLT5jYXJkLm5vcm1zKSB7Ci0JCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSBjYXBzOwotCQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9DQVBBQklMSVRJRVMsCi0JCQkJCSZjYXBzKTsKLQkJCWlmIChjYXBzLmZsYWdzICYgVklERU9fREVDT0RFUl9BVVRPKSB7Ci0JCQkJc3RkLT5pZCA9IFY0TDJfU1REX0FMTDsKLQkJCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXN3aXRjaCAoc3RkLT5pbmRleCkgewotCQljYXNlIDA6Ci0JCQlzdGQtPmlkID0gVjRMMl9TVERfUEFMOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJQQUwiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blswXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX05UU0M7Ci0JCQlzdHJuY3B5KHN0ZC0+bmFtZSwgIk5UU0MiLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTAwMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsxXS0+SHQ7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1NFQ0FNOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJTRUNBTSIsIHNpemVvZihzdGQtPm5hbWUpLTEpOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxOwotCQkJc3RkLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OwotCQkJc3RkLT5mcmFtZWxpbmVzID0genItPmNhcmQudHZuWzJdLT5IdDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQkJaW50IG5vcm07Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfU1REXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlub3JtID0genItPm5vcm07Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAobm9ybSkgewotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCSpzdGQgPSBWNEwyX1NURF9OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCSpzdGQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfU1REOgotCXsKLQkJaW50IG5vcm0gPSAtMSwgcmVzID0gMDsKLQkJdjRsMl9zdGRfaWQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19TVEQgLSBub3JtPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgoKnN0ZCAmIFY0TDJfU1REX1BBTCkgJiYgISgqc3RkICYgflY0TDJfU1REX1BBTCkpCi0JCQlub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfTlRTQykgJiYgISgqc3RkICYgflY0TDJfU1REX05UU0MpKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoKCpzdGQgJiBWNEwyX1NURF9TRUNBTSkgJiYgISgqc3RkICYgflY0TDJfU1REX1NFQ0FNKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwotCQllbHNlIGlmICgqc3RkID09IFY0TDJfU1REX0FMTCkKLQkJCW5vcm0gPSBWSURFT19NT0RFX0FVVE87Ci0JCWVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19TVEQgLSBpbnZhbGlkIG5vcm0gMHglbGx4XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X25vcm0oenIsIG5vcm0pKSkKLQkJCWdvdG8gc3N0ZF91bmxvY2tfYW5kX3JldHVybjsKLQotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppbnAgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0VOVU1JTlBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucC0+aW5kZXgpOwotCi0JCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlIHsKLQkJCWludCBpZCA9IGlucC0+aW5kZXg7Ci0JCQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOwotCQkJaW5wLT5pbmRleCA9IGlkOwotCQl9Ci0KLQkJc3RybmNweShpbnAtPm5hbWUsIHpyLT5jYXJkLmlucHV0W2lucC0+aW5kZXhdLm5hbWUsCi0JCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOwotCQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCQlpbnAtPnN0ZCA9IFY0TDJfU1REX0FMTDsKLQotCQkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0dPT0QpKSB7Ci0JCQlpbnAtPnN0YXR1cyB8PSBWNEwyX0lOX1NUX05PX1BPV0VSOwotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19TSUdOQUw7Ci0JCX0KLQkJaWYgKCEoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfQ09MT1IpKQotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19JTlBVVDoKLQl7Ci0JCWludCAqaW5wdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSU5QVVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCSppbnB1dCA9IHpyLT5pbnB1dDsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX0lOUFVUIC0gaW5wdXQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKmlucHV0KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCAqaW5wdXQpKSkKLQkJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOwotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBjb21lIGludG8gZWZmZWN0ICovCi0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQlzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgotCXsKLQkJc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNT1VUUFVUIC0gaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgb3V0cC0+aW5kZXgpOwotCi0JCWlmIChvdXRwLT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KG91dHAsIDAsIHNpemVvZigqb3V0cCkpOwotCQlvdXRwLT5pbmRleCA9IDA7Ci0JCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7Ci0JCXN0cm5jcHkob3V0cC0+bmFtZSwgIkF1dG9kZXRlY3QiLCBzaXplb2Yob3V0cC0+bmFtZSktMSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfT1VUUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJKm91dHB1dCA9IDA7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfT1VUUFVUOgotCXsKLQkJaW50ICpvdXRwdXQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfT1VUUFVUIC0gb3V0cHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvdXRwdXQpOwotCi0JCWlmICgqb3V0cHV0ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qIGNyb3BwaW5nIChzdWItZnJhbWUgY2FwdHVyZSkgKi8KLQljYXNlIFZJRElPQ19DUk9QQ0FQOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcGNhcCAqY3JvcGNhcCA9IGFyZzsKLQkJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOwotCi0JCWRwcmludGsoMywgS0VSTl9FUlIgIiVzOiBWSURJT0NfQ1JPUENBUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcGNhcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOwotCQljcm9wY2FwLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOwotCQljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQljcm9wY2FwLT5ib3VuZHMuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCWNyb3BjYXAtPmRlZnJlY3QuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0dfQ1JPUCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3JvcC0+dHlwZSk7Ci0KLQkJbWVtc2V0KGNyb3AsIDAsIHNpemVvZigqY3JvcCkpOwotCQljcm9wLT50eXBlID0gdHlwZTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7Ci0JCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7Ci0JCWNyb3AtPmMud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aDsKLQkJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7Ci0KLQlnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DUk9QOgotCXsKLQkJc3RydWN0IHY0bDJfY3JvcCAqY3JvcCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IFZJRElPQ19TX0NST1AgLSB0eXBlPSVkLCB4PSVkLHk9JWQsdz0lZCxoPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUsIGNyb3AtPmMubGVmdCwgY3JvcC0+Yy50b3AsCi0JCQljcm9wLT5jLndpZHRoLCBjcm9wLT5jLmhlaWdodCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfQ1JPUCAtIGNhbm5vdCBjaGFuZ2Ugc2V0dGluZ3Mgd2hpbGUgYWN0aXZlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkgICAgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8Ci0JCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCi0JCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OwotCQlzZXR0aW5ncy5pbWdfeSA9IGNyb3AtPmMudG9wOwotCQlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOwotCQlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7Ci0KLQkJLyogY2hlY2sgdmFsaWRpdHkgKi8KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBhY2NlcHQgKi8KLQkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCi0Jc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0pQRUdDT01QOgotCXsKLQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfSlBFR0NPTVBcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OwotCQlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47Ci0JCW1lbWNweShwYXJhbXMtPkFQUF9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7Ci0JCXBhcmFtcy0+QVBQX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbjsKLQkJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuKTsKLQkJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOwotCQlwYXJhbXMtPmpwZWdfbWFya2VycyA9Ci0JCSAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VyczsKLQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCAtIHF1YWxpdHk9JWQsIEFQUE49JWQsIEFQUF9sZW49JWQsIENPTV9sZW49JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcGFyYW1zLT5xdWFsaXR5LCBwYXJhbXMtPkFQUG4sCi0JCQlwYXJhbXMtPkFQUF9sZW4sIHBhcmFtcy0+Q09NX2xlbik7Ci0KLQkJc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFIHx8Ci0JCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IFZJRElPQ19TX0pQRUdDT01QIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVCVVNZOwotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoKHJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkpCi0JCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7Ci0JCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7Ci0Jc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllTVEQ6CS8qIHdoeSBpcyB0aGlzIHVzZWZ1bD8gKi8KLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RVUVSWV9TVEQgLSBzdGQ9MHglbGx4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksICh1bnNpZ25lZCBsb25nIGxvbmcpKnN0ZCk7Ci0KLQkJaWYgKCpzdGQgPT0gVjRMMl9TVERfQUxMIHx8ICpzdGQgPT0gVjRMMl9TVERfTlRTQyB8fAotCQkgICAgKnN0ZCA9PSBWNEwyX1NURF9QQUwgfHwgKCpzdGQgPT0gVjRMMl9TVERfU0VDQU0gJiYKLQkJCQkJICAgICB6ci0+Y2FyZC5ub3JtcyA9PSAzKSkgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfVFJZX0ZNVCAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQotCQlzd2l0Y2ggKGZtdC0+dHlwZSkgewotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKLQkJCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQkJCWlmIChmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykgewotCQkJCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQkJCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLwotCQkJCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4KLQkJCQkgICAgQlVaX01BWF9IRUlHSFQpCi0JCQkJCXNldHRpbmdzLlRtcERjbSA9IDE7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAyOwotCQkJCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCi0JCQkJCXNldHRpbmdzLlZlckRjbSA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAxOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSA0OwotCQkJCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PQotCQkJCQkgZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQotCQkJCQlzZXR0aW5ncy5Ib3JEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMTsKLQkJCQlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKLQotCQkJCS8qIGNoZWNrICovCi0JCQkJaWYgKChyZXMgPQotCQkJCSAgICAgem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLAotCQkJCQkJCSAgICAgICZzZXR0aW5ncykpKQotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KLQkJCQlmbXQtPmZtdC5waXgud2lkdGggPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KLQkJCQkgICAgKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9UQiA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCSAgICB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmc2V0dGluZ3MpOwotCQkJfSBlbHNlIGlmIChmbXQtPnR5cGUgPT0KLQkJCQkgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlpbnQgaTsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQotCQkJCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0KLQkJCQkJICAgIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCkKLQkJCQkJCWJyZWFrOwotCQkJCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOwotCQkJCX0KLQotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQotCQkJCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKLQkJCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJCSAgICBCVVpfTUlOX0hFSUdIVDsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJdHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZHByaW50aygxLCBLRVJOX0RFQlVHICIlczogVU5LTk9XTiBpb2N0bCBjbWQ6IDB4JXhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY21kKTsKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7Ci0KKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorfQorCitzdGF0aWMgaW50IHpvcmFuX3ZpZGlvY2dtYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqdm1idWYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NHTUJVRiAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCW1hcF9tb2RlX3JhdyhmaCk7CisKKwlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmgpKSB7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwl2bWJ1Zi0+c2l6ZSA9IGZoLT5idWZmZXJzLm51bV9idWZmZXJzICogZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJdm1idWYtPmZyYW1lcyA9IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOworCWZvciAoaSA9IDA7IGkgPCB2bWJ1Zi0+ZnJhbWVzOyBpKyspCisJCXZtYnVmLT5vZmZzZXRzW2ldID0gaSAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCit2NGwxcmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CisJc3RybmNweShjYXAtPmNhcmQsIFpSX0RFVk5BTUUoenIpLCBzaXplb2YoY2FwLT5jYXJkKS0xKTsKKwlzdHJuY3B5KGNhcC0+ZHJpdmVyLCAiem9yYW4iLCBzaXplb2YoY2FwLT5kcml2ZXIpLTEpOworCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSTolcyIsCisJCSBwY2lfbmFtZSh6ci0+cGNpX2RldikpOworCWNhcC0+dmVyc2lvbiA9IEtFUk5FTF9WRVJTSU9OKE1BSk9SX1ZFUlNJT04sIE1JTk9SX1ZFUlNJT04sCisJCQkgICBSRUxFQVNFX1ZFUlNJT04pOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkgICAgVjRMMl9DQVBfVklERU9fT1VUUFVUIHwgVjRMMl9DQVBfVklERU9fT1ZFUkxBWTsKIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgbG9uZwotem9yYW5faW9jdGwoc3RydWN0IGZpbGUgICpmaWxlLAotCSAgICB1bnNpZ25lZCBpbnQgIGNtZCwKLQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHpvcmFuX2VudW1fZm10KHN0cnVjdCB6b3JhbiAqenIsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdCwgaW50IGZsYWcpCiB7Ci0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB6b3Jhbl9kb19pb2N0bCk7CisJaW50IG51bSA9IC0xLCBpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKKwkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKQorCQkJbnVtKys7CisJCWlmIChudW0gPT0gZm10LT5pbmRleCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZm10LT5pbmRleCA8IDAgLyogbGF0ZSwgYnV0IG5vdCB0b28gbGF0ZSAqLyAgfHwgaSA9PSBOVU1fRk9STUFUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIHpvcmFuX2Zvcm1hdHNbaV0ubmFtZSwgc2l6ZW9mKGZtdC0+ZGVzY3JpcHRpb24pLTEpOworCWZtdC0+cGl4ZWxmb3JtYXQgPSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYzsKKwlpZiAoem9yYW5fZm9ybWF0c1tpXS5mbGFncyAmIFpPUkFOX0ZPUk1BVF9DT01QUkVTU0VEKQorCQlmbXQtPmZsYWdzIHw9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQkgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJcmV0dXJuIHpvcmFuX2VudW1fZm10KHpyLCBmLCBaT1JBTl9GT1JNQVRfQ0FQVFVSRSk7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX1BMQVlCQUNLKTsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX09WRVJMQVkpOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlmbXQtPmZtdC5waXgud2lkdGggPSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIGZoLT5qcGdfc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKGZoLT5qcGdfc2V0dGluZ3MuVmVyRGNtICogZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20pOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOworCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOworCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCWlmIChmaC0+bWFwX21vZGUgIT0gWk9SQU5fTUFQX01PREVfUkFXKQorCQlyZXR1cm4gem9yYW5fZ19mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmbXQtPmZtdC5waXgud2lkdGggPSBmaC0+djRsX3NldHRpbmdzLndpZHRoOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgorCQkJCQlmaC0+djRsX3NldHRpbmdzLmhlaWdodDsKKwlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPSBmaC0+djRsX3NldHRpbmdzLmZvcm1hdC0+Zm91cmNjOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWlmIChCVVpfTUFYX0hFSUdIVCA8IChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OworCWZtdC0+Zm10Lndpbi53LnRvcCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLnk7CisJZm10LT5mbXQud2luLncud2lkdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aDsKKwlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7CisJaWYgKGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoICogMiA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3RyeV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZm10LT5mbXQud2luLncud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoIDwgQlVaX01JTl9XSURUSCkKKwkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10Lndpbi53LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3RyeV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCWludCByZXMgPSAwOworCisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCWlmICgoZm10LT5mbXQucGl4LmhlaWdodCAqIDIpID4gQlVaX01BWF9IRUlHSFQpCisJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJZWxzZQorCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJaWYgKHNldHRpbmdzLkhvckRjbSA+IDEpIHsKKwkJc2V0dGluZ3MuaW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCX0gZWxzZSB7CisJCXNldHRpbmdzLmltZ194ID0gMDsKKwkJc2V0dGluZ3MuaW1nX3dpZHRoID0gQlVaX01BWF9XSURUSDsKKwl9CisKKwkvKiBjaGVjayAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAxKTsKKwlpZiAocmVzKQorCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKKworCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwlmbXQtPmZtdC5waXgud2lkdGggPSBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJZm10LT5mbXQucGl4LmhlaWdodCA9IHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJnNldHRpbmdzKTsKKwlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07Cit0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGJwcDsKKwlpbnQgaTsKKworCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHKQorCQlyZXR1cm4gem9yYW5fdHJ5X2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmbXQpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKworCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlicHAgPSAoem9yYW5fZm9ybWF0c1tpXS5kZXB0aCArIDcpIC8gODsKKwlmbXQtPmZtdC5waXgud2lkdGggJj0gfigoYnBwID09IDIpID8gMSA6IDMpOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPCBCVVpfTUlOX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUlOX1dJRFRIOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8IEJVWl9NSU5fSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJZHByaW50aygzLCAieD0lZCwgeT0lZCwgdz0lZCwgaD0lZCwgY250PSVkLCBtYXA9MHglcFxuIiwKKwkJCWZtdC0+Zm10Lndpbi53LmxlZnQsIGZtdC0+Zm10Lndpbi53LnRvcCwKKwkJCWZtdC0+Zm10Lndpbi53LndpZHRoLAorCQkJZm10LT5mbXQud2luLncuaGVpZ2h0LAorCQkJZm10LT5mbXQud2luLmNsaXBjb3VudCwKKwkJCWZtdC0+Zm10Lndpbi5iaXRtYXApOworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF93aW5kb3coZmgsIGZtdC0+Zm10Lndpbi53LmxlZnQsIGZtdC0+Zm10Lndpbi53LnRvcCwKKwkJCSAgIGZtdC0+Zm10Lndpbi53LndpZHRoLCBmbXQtPmZtdC53aW4udy5oZWlnaHQsCisJCQkgICAoc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKilmbXQtPmZtdC53aW4uY2xpcHMsCisJCQkgICBmbXQtPmZtdC53aW4uY2xpcGNvdW50LCBmbXQtPmZtdC53aW4uYml0bWFwKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7CisJaW50IHJlcyA9IDA7CisKKwlkcHJpbnRrKDMsICJzaXplPSVkeCVkLCBmbXQ9MHgleCAoJTQuNHMpXG4iLAorCQkJZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0LAorCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJLyogd2UgYWN0dWFsbHkgbmVlZCB0byBzZXQgJ3JlYWwnIHBhcmFtZXRlcnMgbm93ICovCisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyID4gQlVaX01BWF9IRUlHSFQpCisJCXNldHRpbmdzLlRtcERjbSA9IDE7CisJZWxzZQorCQlzZXR0aW5ncy5UbXBEY20gPSAyOworCXNldHRpbmdzLmRlY2ltYXRpb24gPSAwOworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvIDIpCisJCXNldHRpbmdzLlZlckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5WZXJEY20gPSAxOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyA0KQorCQlzZXR0aW5ncy5Ib3JEY20gPSA0OworCWVsc2UgaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ193aWR0aCAvIDIpCisJCXNldHRpbmdzLkhvckRjbSA9IDI7CisJZWxzZQorCQlzZXR0aW5ncy5Ib3JEY20gPSAxOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuZmllbGRfcGVyX2J1ZmYgPSAxOworCisJaWYgKHNldHRpbmdzLkhvckRjbSA+IDEpIHsKKwkJc2V0dGluZ3MuaW1nX3ggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gOCA6IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IChCVVpfTUFYX1dJRFRIID09IDcyMCkgPyA3MDQgOiBCVVpfTUFYX1dJRFRIOworCX0gZWxzZSB7CisJCXNldHRpbmdzLmltZ194ID0gMDsKKwkJc2V0dGluZ3MuaW1nX3dpZHRoID0gQlVaX01BWF9XSURUSDsKKwl9CisKKwkvKiBjaGVjayAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBpdCdzIG9rLCBzbyBzZXQgdGhlbSAqLworCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKKworCW1hcF9tb2RlX2pwZyhmaCwgZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKTsKKwlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKworCS8qIHRlbGwgdGhlIHVzZXIgd2hhdCB3ZSBhY3R1YWxseSBkaWQgKi8KKwlmbXQtPmZtdC5waXgud2lkdGggPSBzZXR0aW5ncy5pbWdfd2lkdGggLyBzZXR0aW5ncy5Ib3JEY207CisJZm10LT5mbXQucGl4LmhlaWdodCA9IHNldHRpbmdzLmltZ19oZWlnaHQgKiAyIC8KKwkJKHNldHRpbmdzLlRtcERjbSAqIHNldHRpbmdzLlZlckRjbSk7CisJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9TRVFfVEIgOiBWNEwyX0ZJRUxEX1NFUV9CVCk7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSAoZmgtPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiA/CisJCQkJVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTSk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKworc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGk7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIHpvcmFuX3NfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYykKKwkJCWJyZWFrOworCWlmIChpID09IE5VTV9GT1JNQVRTKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duL3Vuc3VwcG9ydGVkIGZvcm1hdCAweCV4XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmICgoZmgtPm1hcF9tb2RlICE9IFpPUkFOX01BUF9NT0RFX1JBVyAmJiBmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHx8CisJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCisJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisKKwltYXBfbW9kZV9yYXcoZmgpOworCisJcmVzID0gem9yYW5fdjRsX3NldF9mb3JtYXQoZmgsIGZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCwKKwkJCQkgICAmem9yYW5fZm9ybWF0c1tpXSk7CisJaWYgKHJlcykKKwkJZ290byBzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogdGVsbCB0aGUgdXNlciB0aGUgcmVzdWx0cy9taXNzaW5nIHN0dWZmICovCisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7CisJaWYgKEJVWl9NQVhfSEVJR0hUIDwgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwllbHNlCisJCWZtdC0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfVE9QOworCitzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmYi0+YmFzZSA9IHpyLT52YnVmX2Jhc2U7CisJZmItPmZtdC53aWR0aCA9IHpyLT52YnVmX3dpZHRoOworCWZiLT5mbXQuaGVpZ2h0ID0genItPnZidWZfaGVpZ2h0OworCWlmICh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpCisJCWZiLT5mbXQucGl4ZWxmb3JtYXQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKKwlmYi0+Zm10LmJ5dGVzcGVybGluZSA9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlmYi0+Zm10LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKKwlmYi0+Zm10LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWZiLT5mbGFncyA9IFY0TDJfRkJVRl9GTEFHX09WRVJMQVk7CisJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCByZXMgPSAwOworCV9fbGUzMiBwcmludGZvcm1hdCA9IF9fY3B1X3RvX2xlMzIoZmItPmZtdC5waXhlbGZvcm1hdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKKwkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09IGZiLT5mbXQucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRkJVRiAtIGZvcm1hdD0weCV4ICglNC40cykgbm90IGFsbG93ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgZmItPmZtdC5waXhlbGZvcm1hdCwKKwkJCShjaGFyICopJnByaW50Zm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHNldHVwX2ZidWZmZXIoZmgsIGZiLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwgZmItPmZtdC53aWR0aCwKKwkJCSAgICBmYi0+Zm10LmhlaWdodCwgZmItPmZtdC5ieXRlc3BlcmxpbmUpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgb24pCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHNldHVwX292ZXJsYXkoZmgsIG9uKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSk7CisKK3N0YXRpYyBpbnQgem9yYW5fcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCisJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKKwkJZHByaW50aygyLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBvbmx5IE1FTU9SWV9NTUFQIGNhcHR1cmUgaXMgc3VwcG9ydGVkLCBub3QgJWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+bWVtb3J5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJlcS0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIHpvcmFuX3N0cmVhbW9mZihmaWxlLCBmaCwgcmVxLT50eXBlKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWRwcmludGsoMiwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgJiYKKwkgICAgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQkvKiBjb250cm9sIHVzZXIgaW5wdXQgKi8KKwkJaWYgKHJlcS0+Y291bnQgPCAyKQorCQkJcmVxLT5jb3VudCA9IDI7CisJCWlmIChyZXEtPmNvdW50ID4gdjRsX25idWZzKQorCQkJcmVxLT5jb3VudCA9IHY0bF9uYnVmczsKKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLworCQltYXBfbW9kZV9yYXcoZmgpOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisKKwkJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZoKSkgeworCQkJcmVzID0gLUVOT01FTTsKKwkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMgfHwKKwkJICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKSB7CisJCS8qIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHNpemUgb3Vyc2VsdmVzIG5vdyAqLworCQlpZiAocmVxLT5jb3VudCA8IDQpCisJCQlyZXEtPmNvdW50ID0gNDsKKwkJaWYgKHJlcS0+Y291bnQgPiBqcGdfbmJ1ZnMpCisJCQlyZXEtPmNvdW50ID0ganBnX25idWZzOworCisJCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KKwkJbWFwX21vZGVfanBnKGZoLCByZXEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IHJlcS0+Y291bnQ7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCisJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gdW5rbm93biB0eXBlICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQordjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmgsIGJ1ZiwgYnVmLT5pbmRleCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDAsIGNvZGVjX21vZGUsIGJ1Zl90eXBlOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJcmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZoLCBidWYtPmluZGV4KTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmIGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpCisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzsKKwkJfQorCisJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJcmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZoLCBidWYtPmluZGV4LCBjb2RlY19tb2RlKTsKKwkJaWYgKHJlcyAhPSAwKQorCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfSURMRSAmJgorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkKKwkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgY29kZWNfbW9kZSk7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19RQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMCwgYnVmX3R5cGUsIG51bSA9IC0xOwkvKiBjb21waWxlciBib3JrcyBoZXJlICg/KSAqLworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCW51bSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3N5bmNfdGFpbCAmIFY0TF9NQVNLX0ZSQU1FXTsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpIHsKKwkJCXJlcyA9IC1FQUdBSU47CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCXJlcyA9IHY0bF9zeW5jKGZoLCBudW0pOworCQlpZiAocmVzKQorCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJenItPnY0bF9zeW5jX3RhaWwrKzsKKwkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIG51bSk7CisJCWJyZWFrOworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJeworCQlzdHJ1Y3Qgem9yYW5fc3luYyBiczsKKworCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKQorCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKKwkJZWxzZQorCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgeworCQkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKKwkJCXJlcyA9IC1FSU5WQUw7CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJbnVtID0genItPmpwZ19wZW5kW3pyLT5qcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLICYmCisJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpIHsKKwkJCXJlcyA9IC1FQUdBSU47CisJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCXJlcyA9IGpwZ19zeW5jKGZoLCAmYnMpOworCQlpZiAocmVzKQorCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIGJzLmZyYW1lKTsKKwkJYnJlYWs7CisJfQorCisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfRFFCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK2RxYnVmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCisJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgeworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fTE9DS0VEOworCQl6ci0+djRsX3NldHRpbmdzID0gZmgtPnY0bF9zZXR0aW5nczsKKworCQl6ci0+djRsX3N5bmNfdGFpbCA9IHpyLT52NGxfcGVuZF90YWlsOworCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKKwkJICAgIHpyLT52NGxfcGVuZF9oZWFkICE9IHpyLT52NGxfcGVuZF90YWlsKSB7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQkvKiB3aGF0IGlzIHRoZSBjb2RlYyBtb2RlIHJpZ2h0IG5vdz8gKi8KKwkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8CisJCSAgICBmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFKSB7CisJCQlyZXMgPSAtRUJVU1k7CisJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9MT0NLRUQ7CisKKwkJaWYgKHpyLT5qcGdfcXVlX2hlYWQgIT0genItPmpwZ19xdWVfdGFpbCkgeworCQkJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLworCQkJanBlZ19zdGFydCh6cik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU1RSRUFNT04gLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK3N0cm1vbl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpLCByZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKKwkJICAgIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkvKiB1bmxvYWQgY2FwdHVyZSAqLworCQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkgeworCisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQorCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOworCQlmaC0+YnVmZmVycyA9IHpyLT52NGxfYnVmZmVyczsKKworCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKworCQl6ci0+djRsX2dyYWJfc2VxID0gMDsKKwkJenItPnY0bF9wZW5kX2hlYWQgPSB6ci0+djRsX3BlbmRfdGFpbCA9IDA7CisJCXpyLT52NGxfc3luY190YWlsID0gMDsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKKwkJICAgIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJcmVzID0gLUVQRVJNOwkvKiBzdGF5IG9mZiBvdGhlcidzIHNldHRpbmdzISAqLworCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpCisJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkJcmVzID0ganBnX3FidWYoZmgsIC0xLAorCQkJICAgICAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpID8KKwkJCSAgICAgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTIDoKKwkJCSAgICAgQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpOworCQlpZiAocmVzKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19TVFJFQU1PRkYgLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KK3N0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKKwkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCXJldHVybiAtRUlOVkFMOworCisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBxdWVyeWN0cmwsIGN0cmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwkvKiB3ZSBvbmx5IHN1cHBvcnQgaHVlL3NhdHVyYXRpb24vY29udHJhc3QvYnJpZ2h0bmVzcyAqLworCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKKwkgICAgY3RybC0+aWQgPiBWNEwyX0NJRF9IVUUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWRlY29kZXJfY2FsbCh6ciwgY29yZSwgZ19jdHJsLCBjdHJsKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIHNfY3RybCwgY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCSpzdGQgPSB6ci0+bm9ybTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdjRsMl9zdGRfaWQgKnN0ZCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCAqc3RkKTsKKwlpZiAocmVzKQorCQlnb3RvIHNzdGRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Citzc3RkX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJaWYgKGlucC0+aW5kZXggPCAwIHx8IGlucC0+aW5kZXggPj0genItPmNhcmQuaW5wdXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllbHNlIHsKKwkJaW50IGlkID0gaW5wLT5pbmRleDsKKwkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKKwkJaW5wLT5pbmRleCA9IGlkOworCX0KKworCXN0cm5jcHkoaW5wLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtpbnAtPmluZGV4XS5uYW1lLAorCQlzaXplb2YoaW5wLT5uYW1lKSAtIDEpOworCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7CisKKwkvKiBHZXQgc3RhdHVzIG9mIHZpZGVvIGRlY29kZXIgKi8KKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZpbnAtPnN0YXR1cyk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCSppbnB1dCA9IHpyLT5pbnB1dDsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCBpbnB1dCk7CisJaWYgKHJlcykKKwkJZ290byBzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLworCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKK3NpbnB1dF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1fb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCSAgc3RydWN0IHY0bDJfb3V0cHV0ICpvdXRwKQoreworCWlmIChvdXRwLT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldChvdXRwLCAwLCBzaXplb2YoKm91dHApKTsKKwlvdXRwLT5pbmRleCA9IDA7CisJb3V0cC0+dHlwZSA9IFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWTsKKwlzdHJuY3B5KG91dHAtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKG91dHAtPm5hbWUpLTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCAqb3V0cHV0KQoreworCSpvdXRwdXQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19vdXRwdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCBvdXRwdXQpCit7CisJaWYgKG91dHB1dCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKiBjcm9wcGluZyAoc3ViLWZyYW1lIGNhcHR1cmUpICovCitzdGF0aWMgaW50IHpvcmFuX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgdHlwZSA9IGNyb3BjYXAtPnR5cGUsIHJlcyA9IDA7CisKKwltZW1zZXQoY3JvcGNhcCwgMCwgc2l6ZW9mKCpjcm9wY2FwKSk7CisJY3JvcGNhcC0+dHlwZSA9IHR5cGU7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0NST1BDQVAgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwljcm9wY2FwLT5ib3VuZHMudG9wID0gY3JvcGNhcC0+Ym91bmRzLmxlZnQgPSAwOworCWNyb3BjYXAtPmJvdW5kcy53aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWNyb3BjYXAtPmRlZnJlY3QudG9wID0gY3JvcGNhcC0+ZGVmcmVjdC5sZWZ0ID0gMDsKKwljcm9wY2FwLT5kZWZyZWN0LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworY3JvcGNhcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCB0eXBlID0gY3JvcC0+dHlwZSwgcmVzID0gMDsKKworCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKKwljcm9wLT50eXBlID0gdHlwZTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBnY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwljcm9wLT5jLnRvcCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3k7CisJY3JvcC0+Yy5sZWZ0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfeDsKKwljcm9wLT5jLndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7CisJY3JvcC0+Yy5oZWlnaHQgPSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQ7CisKK2djcm9wX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCisJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19TX0NST1AgLSBjYW5ub3QgY2hhbmdlIHNldHRpbmdzIHdoaWxlIGFjdGl2ZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCisJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAorCSAgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCS8qIG1vdmUgaW50byBhIGZvcm0gdGhhdCB3ZSB1bmRlcnN0YW5kICovCisJc2V0dGluZ3MuaW1nX3ggPSBjcm9wLT5jLmxlZnQ7CisJc2V0dGluZ3MuaW1nX3kgPSBjcm9wLT5jLnRvcDsKKwlzZXR0aW5ncy5pbWdfd2lkdGggPSBjcm9wLT5jLndpZHRoOworCXNldHRpbmdzLmltZ19oZWlnaHQgPSBjcm9wLT5jLmhlaWdodDsKKworCS8qIGNoZWNrIHZhbGlkaXR5ICovCisJcmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MsIDApOworCWlmIChyZXMpCisJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiBhY2NlcHQgKi8KKwlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisKK3Njcm9wX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19qcGVnY29tcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpwYXJhbXMpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YoKnBhcmFtcykpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcGFyYW1zLT5xdWFsaXR5ID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5xdWFsaXR5OworCXBhcmFtcy0+QVBQbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQbjsKKwltZW1jcHkocGFyYW1zLT5BUFBfZGF0YSwKKwkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfZGF0YSwKKwkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuKTsKKwlwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47CisJbWVtY3B5KHBhcmFtcy0+Q09NX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbik7CisJcGFyYW1zLT5DT01fbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fbGVuOworCXBhcmFtcy0+anBlZ19tYXJrZXJzID0KKwkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3NfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCXNldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsIEtFUk5fV0FSTklORworCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPQorCQkJem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCWZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAgPSAqcGFyYW1zID0gc2V0dGluZ3MuanBnX2NvbXA7CitzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC00MTkxLDExICszMDYyLDExIEBACiAJCQlLRVJOX0RFQlVHCiAJCQkiJXM6ICVzKCkgcmF3IC0gYWN0aXZlPSVjLCBzeW5jX3RhaWw9JWx1LyVjLCBwZW5kX3RhaWw9JWx1LCBwZW5kX2hlYWQ9JWx1XG4iLAogCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAotCQkJIkZBTCJbZmgtPnY0bF9idWZmZXJzLmFjdGl2ZV0sIHpyLT52NGxfc3luY190YWlsLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgenItPnY0bF9zeW5jX3RhaWwsCiAJCQkiVVBNRCJbenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAogCQkJenItPnY0bF9wZW5kX3RhaWwsIHpyLT52NGxfcGVuZF9oZWFkKTsKIAkJLyogUHJvY2VzcyBpcyB0aGUgb25lIGNhcHR1cmluZz8gKi8KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkJICAgIC8qIEJ1ZmZlciByZWFkeSB0byBEUUJVRj8gKi8KIAkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKQogCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKQEAgLTQyMTMsMTAgKzMwODQsMTAgQEAKIAkJCUtFUk5fREVCVUcKIAkJCSIlczogJXMoKSBqcGcgLSBhY3RpdmU9JWMsIHF1ZV90YWlsPSVsdS8lYywgcXVlX2hlYWQ9JWx1LCBkbWE9JWx1LyVsdVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKLQkJCSJGQUwiW2ZoLT5qcGdfYnVmZmVycy5hY3RpdmVdLCB6ci0+anBnX3F1ZV90YWlsLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKIAkJCSJVUE1EIlt6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZV0sCiAJCQl6ci0+anBnX3F1ZV9oZWFkLCB6ci0+anBnX2RtYV90YWlsLCB6ci0+anBnX2RtYV9oZWFkKTsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSAmJgorCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKIAkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID09IEJVWl9TVEFURV9ET05FKSB7CiAJCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19SRUMpCiAJCQkJcmVzID0gUE9MTElOIHwgUE9MTFJETk9STTsKQEAgLTQyMzAsOCArMzEwMSw4IEBACiAJZGVmYXVsdDoKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fcG9sbCgpIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKKwkJCSIlczogJXMgLSBpbnRlcm5hbCBlcnJvciwgdW5rbm93biBtYXBfbW9kZT0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgZmgtPm1hcF9tb2RlKTsKIAkJcmVzID0gUE9MTE5WQUw7CiAJfQogCkBAIC00MjY1LDk4ICszMTM2LDUzIEBACiB6b3Jhbl92bV9jbG9zZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHpvcmFuX21hcHBpbmcgKm1hcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBmaWxlICpmaWxlID0gbWFwLT5maWxlOwotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IG1hcC0+ZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGk7CiAKLQltYXAtPmNvdW50LS07Ci0JaWYgKG1hcC0+Y291bnQgPT0gMCkgewotCQlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJaWYgKC0tbWFwLT5jb3VudCA+IDApCisJCXJldHVybjsKIAotCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoTUpQRUcpXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6ICVzIC0gbXVubWFwKCVzKVxuIiwgWlJfREVWTkFNRSh6ciksCisJCV9fZnVuY19fLCBtb2RlX25hbWUoZmgtPm1hcF9tb2RlKSk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJanBnX3FidWYoZmlsZSwgLTEsIHpyLT5jb2RlY19tb2RlKTsKLQkJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBaT1JBTl9GUkVFOwotCQkJCX0KLQkJCQkvL2pwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQkJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiBtdW5tYXAoVjRMKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgewotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApIHsKLQkJCQkJLyogdW5xdWV1ZS91bm1hcCAqLwotCQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9Ci0JCQkJCSAgICBOVUxMOwotCQkJCX0KLQkJCX0KLQkJCWtmcmVlKG1hcCk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApCi0JCQkJCWJyZWFrOwotCQkJaWYgKGkgPT0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJfQotCQkJCS8vdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQlmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQgPSAxOwotCi0JCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IG11bm1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJYnJlYWs7Ci0KLQkJfQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID09IG1hcCkKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBOVUxMOwogCX0KKwlrZnJlZShtYXApOworCisJLyogQW55IGJ1ZmZlcnMgc3RpbGwgbWFwcGVkPyAqLworCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQorCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKKwkJCXJldHVybjsKKworCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogJXMgLSBmcmVlICVzIGJ1ZmZlcnNcbiIsIFpSX0RFVk5BTUUoenIpLAorCQlfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJfQorCQl2NGxfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9IGVsc2UgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCWpwZ19xYnVmKGZoLCAtMSwgenItPmNvZGVjX21vZGUpOworCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CisJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJfQorCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CkBAIC00Mzc5LDkwICszMjA1LDEwNiBAQAogCWludCByZXMgPSAwOwogCiAJZHByaW50aygzLAotCQlLRVJOX0lORk8gIiVzOiBtbWFwKCVzKSBvZiAweCUwOGx4LTB4JTA4bHggKHNpemU9JWx1KVxuIiwKLQkJWlJfREVWTkFNRSh6ciksCi0JCWZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcgPyAiVjRMIiA6ICJNSlBFRyIsCi0JCXZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBzaXplKTsKKwkJS0VSTl9JTkZPICIlczogJXMoJXMpIG9mIDB4JTA4bHgtMHglMDhseCAoc2l6ZT0lbHUpXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCisJCW1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7CiAKIAlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSB8fCAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB8fAogCSAgICAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogbW1hcCgpIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyBNQVBfU0hBUkVEL1BST1Rfe1JFQUQsV1JJVEV9IGdpdmVuXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKLQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwlpZiAoIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiAlcyglcykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBtb2RlX25hbWUoZmgtPm1hcF9tb2RlKSk7CisJCXJlcyA9IC1FTk9NRU07CisJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CiAKLQkJLyogbG9jayAqLwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmlyc3QgPSBvZmZzZXQgLyBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCWlmIChvZmZzZXQgJSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8CisJICAgIHNpemUgJSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAorCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCSAgICBsYXN0ID49IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6ICVzKCVzKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSksIG9mZnNldCwgc2l6ZSwKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLAorCQkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQogCi0JCS8qIE1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQlpZiAoIWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkvKiBDaGVjayBpZiBhbnkgYnVmZmVycyBhcmUgYWxyZWFkeSBtYXBwZWQgKi8KKwlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChNSlBFRykgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQkJCSIlczogJXMoJXMpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSksIGkpOworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CisJfQogCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gb2Zmc2V0PSVsdSBvciBzaXplPSVsdSBpbnZhbGlkIGZvciBidWZzaXplPSVkIGFuZCBudW1idWZzPSVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBvZmZzZXQsIHNpemUsCi0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplLAotCQkJCWZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycyk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQorCS8qIG1hcCB0aGVzZSBidWZmZXJzICovCisJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hcCkgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCW1hcC0+ZmlsZSA9IGZpbGU7CisJbWFwLT5jb3VudCA9IDE7CisKKwl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7CisJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOworCisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKIAkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKKwkJCXRvZG8gPSBzaXplOworCQkJaWYgKHRvZG8gPiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkKKwkJCQl0b2RvID0gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCQlwYWdlID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX3BoeXM7CisJCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKKwkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKIAkJCQlkcHJpbnRrKDEsCiAJCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogbW1hcChNSlBFRykgLSBidWZmZXIgJWQgYWxyZWFkeSBtYXBwZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQkJIiVzOiAlcyhWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKKwkJCQlyZXMgPSAtRUFHQUlOOworCQkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJCX0KKwkJCXNpemUgLT0gdG9kbzsKKwkJCXN0YXJ0ICs9IHRvZG87CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlicmVhazsKIAkJfQotCi0JCS8qIG1hcCB0aGVzZSBidWZmZXJzICh2NGxfYnVmZmVyc1tpXSkgKi8KLQkJbWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpvcmFuX21hcHBpbmcpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFtYXApIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCW1hcC0+ZmlsZSA9IGZpbGU7Ci0JCW1hcC0+Y291bnQgPSAxOwotCi0JCXZtYS0+dm1fb3BzID0gJnpvcmFuX3ZtX29wczsKLQkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05URVhQQU5EOwotCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKLQorCX0gZWxzZSB7CiAJCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewogCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKKwkJCSAgICAgaiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplIC8gUEFHRV9TSVpFOwogCQkJICAgICBqKyspIHsKIAkJCQlmcmFnbGVuID0KLQkJCQkgICAgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJICAgIChsZTMyX3RvX2NwdShmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLgogCQkJCSAgICAgZnJhZ190YWJbMiAqIGogKyAxXSkgJiB+MSkgPDwgMTsKIAkJCQl0b2RvID0gc2l6ZTsKIAkJCQlpZiAodG9kbyA+IGZyYWdsZW4pCiAJCQkJCXRvZG8gPSBmcmFnbGVuOwogCQkJCXBvcyA9Ci0JCQkJICAgIGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy4KLQkJCQkgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqXSk7CisJCQkJICAgIGxlMzJfdG9fY3B1KGZoLT5idWZmZXJzLgorCQkJCSAgICBidWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqXSk7CiAJCQkJLyogc2hvdWxkIGp1c3QgYmUgcG9zIG9uIGkzODYgKi8KIAkJCQlwYWdlID0gdmlydF90b19waHlzKGJ1c190b192aXJ0KHBvcykpCiAJCQkJCQkJCT4+IFBBR0VfU0hJRlQ7CkBAIC00NDcwLDEyMyArMzMxMiw4MiBAQAogCQkJCQkJCXRvZG8sIFBBR0VfU0hBUkVEKSkgewogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiB6b3Jhbl9tbWFwKFY0TCkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkJCQkJIiVzOiAlcyhWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJCQl9CiAJCQkJc2l6ZSAtPSB0b2RvOwogCQkJCXN0YXJ0ICs9IHRvZG87CiAJCQkJaWYgKHNpemUgPT0gMCkKIAkJCQkJYnJlYWs7Ci0JCQkJaWYgKGxlMzJfdG9fY3B1KGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uCisJCQkJaWYgKGxlMzJfdG9fY3B1KGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuCiAJCQkJICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgMSkKIAkJCQkJYnJlYWs7CS8qIHdhcyBsYXN0IGZyYWdtZW50ICovCiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CiAJCQlpZiAoc2l6ZSA9PSAwKQogCQkJCWJyZWFrOwogCiAJCX0KLQlqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJLyogTWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQlpZiAoIWZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCi0JCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQlsYXN0ID0gZmlyc3QgLSAxICsgc2l6ZSAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJaWYgKG9mZnNldCAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8Ci0JCSAgICBzaXplICUgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplICE9IDAgfHwgZmlyc3QgPCAwIHx8Ci0JCSAgICBsYXN0IDwgMCB8fCBmaXJzdCA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgIGxhc3QgPj0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IG1tYXAoVjRMKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXApIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogbW1hcChWNEwpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byB2NGxfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KLQkJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7Ci0JCQl0b2RvID0gc2l6ZTsKLQkJCWlmICh0b2RvID4gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplKQotCQkJCXRvZG8gPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQlwYWdlID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXM7Ci0JCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBhZ2UgPj4gUEFHRV9TSElGVCwKLQkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogem9yYW5fbW1hcChWNEwpaSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlzaXplIC09IHRvZG87Ci0JCQlzdGFydCArPSB0b2RvOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7Ci0JCQlpZiAoc2l6ZSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogem9yYW5fbW1hcCgpIC0gaW50ZXJuYWwgZXJyb3IgLSB1bmtub3duIG1hcCBtb2RlICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7Ci0JCWJyZWFrOwogCX0KIAorbW1hcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHpvcmFuX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkJICAgID0gem9yYW5fcXVlcnljYXAsCisJLnZpZGlvY19jcm9wY2FwICAgICAgIAkJICAgID0gem9yYW5fY3JvcGNhcCwKKwkudmlkaW9jX3NfY3JvcCAgICAgICAJCSAgICA9IHpvcmFuX3NfY3JvcCwKKwkudmlkaW9jX2dfY3JvcCAgICAgICAJCSAgICA9IHpvcmFuX2dfY3JvcCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAgIAkJICAgID0gem9yYW5fZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAJCSAgICA9IHpvcmFuX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICAgCQkgICAgPSB6b3Jhbl9zX2lucHV0LAorCS52aWRpb2NfZW51bV9vdXRwdXQgICAgCQkgICAgPSB6b3Jhbl9lbnVtX291dHB1dCwKKwkudmlkaW9jX2dfb3V0cHV0ICAgICAJCSAgICA9IHpvcmFuX2dfb3V0cHV0LAorCS52aWRpb2Nfc19vdXRwdXQgICAgIAkJICAgID0gem9yYW5fc19vdXRwdXQsCisJLnZpZGlvY19nX2ZidWYJCQkgICAgPSB6b3Jhbl9nX2ZidWYsCisJLnZpZGlvY19zX2ZidWYJCQkgICAgPSB6b3Jhbl9zX2ZidWYsCisJLnZpZGlvY19nX3N0ZCAJCQkgICAgPSB6b3Jhbl9nX3N0ZCwKKwkudmlkaW9jX3Nfc3RkIAkJCSAgICA9IHpvcmFuX3Nfc3RkLAorCS52aWRpb2NfZ19qcGVnY29tcCAJCSAgICA9IHpvcmFuX2dfanBlZ2NvbXAsCisJLnZpZGlvY19zX2pwZWdjb21wIAkJICAgID0gem9yYW5fc19qcGVnY29tcCwKKwkudmlkaW9jX292ZXJsYXkJCQkgICAgPSB6b3Jhbl9vdmVybGF5LAorCS52aWRpb2NfcmVxYnVmcwkJCSAgICA9IHpvcmFuX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZgkJICAgID0gem9yYW5fcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQkJICAgID0gem9yYW5fcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQkJICAgID0gem9yYW5fZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbgkJICAgID0gem9yYW5fc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJCSAgICA9IHpvcmFuX3N0cmVhbW9mZiwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgCSAgICA9IHpvcmFuX2VudW1fZm10X3ZpZF9jYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0IAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfb3V0LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkgCSAgICA9IHpvcmFuX2VudW1fZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJCSAgICA9IHpvcmFuX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfb3V0ICAgICAgICAgICAgICAgPSB6b3Jhbl9nX2ZtdF92aWRfb3V0LAorCS52aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkgICAgICAgICAgID0gem9yYW5fZ19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAJCSAgICA9IHpvcmFuX3NfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfb3V0ICAgICAgICAgICAgICAgPSB6b3Jhbl9zX2ZtdF92aWRfb3V0LAorCS52aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkgICAgICAgICAgID0gem9yYW5fc19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgIAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXQgCSAgICA9IHpvcmFuX3RyeV9mbXRfdmlkX291dCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkgCSAgICA9IHpvcmFuX3RyeV9mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19xdWVyeWN0cmwgCQkgICAgPSB6b3Jhbl9xdWVyeWN0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgCQkgICAgPSB6b3Jhbl9zX2N0cmwsCisJLnZpZGlvY19nX2N0cmwgICAgICAgCQkgICAgPSB6b3Jhbl9nX2N0cmwsCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY19kZWZhdWx0IAkJICAgID0gem9yYW5fZGVmYXVsdCwKKwkudmlkaW9jZ21idWYgCQkJICAgID0gem9yYW5fdmlkaW9jZ21idWYsCisjZW5kaWYKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgem9yYW5fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHpvcmFuX29wZW4sCiAJLnJlbGVhc2UgPSB6b3Jhbl9jbG9zZSwKLQkuaW9jdGwgPSB6b3Jhbl9pb2N0bCwKKwkuaW9jdGwgPSB2aWRlb19pb2N0bDIsCiAJLnJlYWQgPSB6b3Jhbl9yZWFkLAogCS53cml0ZSA9IHpvcmFuX3dyaXRlLAogCS5tbWFwID0gem9yYW5fbW1hcCwKQEAgLTQ1OTYsNyArMzM5Nyw5IEBACiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvcmFuX3RlbXBsYXRlIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSBaT1JBTl9OQU1FLAogCS5mb3BzID0gJnpvcmFuX2ZvcHMsCisJLmlvY3RsX29wcyA9ICZ6b3Jhbl9pb2N0bF9vcHMsCiAJLnJlbGVhc2UgPSAmem9yYW5fdmRldl9yZWxlYXNlLAorCS50dm5vcm1zID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAogCS5taW5vciA9IC0xCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYwppbmRleCA4NzBiYzVhLi5mMTQyM2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKaW5kZXggMDBkMTMyYi4uMjFjMDg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDE2LmMKQEAgLTM0LDE1ICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogdjRsICBBUEkgKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogCiAvKiBoZWFkZXJmaWxlIG9mIHRoaXMgbW9kdWxlICovCiAjaW5jbHVkZSJ6cjM2MDE2LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCmluZGV4IGNmOGIyNzEuLjYzOWRkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA1MC5jCkBAIC0zNCwxMiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUgInpyMzYwNTAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKaW5kZXggOGU3NDA1NC4uMDA4NzQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDYwLmMKQEAgLTM0LDEyICszNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLS8qIGluY2x1ZGVzIGZvciBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIHJlZ2FyZGluZyB2aWRlbwotICAgI2luY2x1ZGU8bGludXgvdmlkZW9kZXYuaD4gKi8KLQogLyogSS9PIGNvbW1hbmRzLCBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgotLy8jaW5jbHVkZTxlcnJuby5oPgogCiAvKiBoZWFkZXJmaWxlIG9mIHRoaXMgbW9kdWxlICovCiAjaW5jbHVkZSAienIzNjA2MC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwppbmRleCA5MzAyMzU2Li4yMjE0MDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzY0eHguYwpAQCAtOTYsNiArOTYsNyBAQAogCXtVU0JfREVWSUNFKDB4MDZkNiwgMHgwMDNiKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMCB9LAogCXtVU0JfREVWSUNFKDB4MGExNywgMHgwMDRlKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAogCXtVU0JfREVWSUNFKDB4MDQxZSwgMHg0MDVkKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAorCXtVU0JfREVWSUNFKDB4MDhjYSwgMHgyMTAyKSwgLmRyaXZlcl9pbmZvID0gTUVUSE9EMiB9LAogCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKQEAgLTQyNSw3ICs0MjYsNiBAQAogc3RhdGljIGludCB6cjM2NHh4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7Ci0JbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAlzdHJjcHkoY2FwLT5kcml2ZXIsIERSSVZFUl9ERVNDKTsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9SRUFEV1JJVEU7CiAJcmV0dXJuIDA7CkBAIC00MzYsOCArNDM2LDYgQEAKIHsKIAlpZiAoaS0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gMDsKIAlzdHJjcHkoaS0+bmFtZSwgRFJJVkVSX0RFU0MgIiBDYW1lcmEiKTsKIAlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlyZXR1cm4gMDsKQEAgLTUyOSwxMSArNTI3LDYgQEAKIHsKIAlpZiAoZi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQlmLT5pbmRleCA9IDA7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKIAlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJKUEVHIik7CiAJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSlBFRzsKQEAgLTU1MCw4ICs1NDMsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCkBAIC01NzcsMTAgKzU2OCw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCWNhbSA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwogCi0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoJmYtPmZtdC5waXgsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0KSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CiAJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlmLT5mbXQucGl4LndpZHRoID0gY2FtLT53aWR0aDsKQEAgLTYwMiw4ICs1ODksNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LmZpZWxkICE9IFY0TDJfRklFTERfQU5ZICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKaW5kZXggOWEzNmI1YS4uNzA0NWM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYwpAQCAtMjAzNyw4ICsyMDM3LDYgQEAKIAlpZiAoIWkyb19wcm9jX2Rpcl9yb290KQogCQlyZXR1cm4gLTE7CiAKLQlpMm9fcHJvY19kaXJfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmkyb19jb250cm9sbGVycywgbGlzdCkKIAkgICAgaTJvX3Byb2NfaW9wX2FkZChpMm9fcHJvY19kaXJfcm9vdCwgYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKaW5kZXggNjg4MjZmMS4uZWM5MGU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTU5MiwxMSArNTkyLDkgQEAKIAogCS8qIG1heWJlIGFkZCBMRE9zIHRoYXQgYXJlIG9taXR0ZWQgb24gY29zdC1yZWR1Y2VkIHBhcnRzICovCiAJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgIShmZWF0dXJlcyAmIFRQU19TVUJTRVQpKSB7Ci0JCS8qCiAJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcihUV0w0MDMwX1JFR19WUExMMiwgcGRhdGEtPnZwbGwyKTsKIAkJaWYgKElTX0VSUihjaGlsZCkpCiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JCSovCiAKIAkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZNTUMyLCBwZGF0YS0+dm1tYzIpOwogCQlpZiAoSVNfRVJSKGNoaWxkKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggN2ExZTk0OC4uNmQxYWMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTE2NSw3ICsxNjUsNyBAQAogCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIgfHwgSUE2NF9TR0lfVVYgfHwgWDg2X1VWKSAmJiBTTVAKIAlzZWxlY3QgSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IgaWYgSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUiBpZiBJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yCi0Jc2VsZWN0IFNHSV9HUlUgaWYgKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9VViB8fCBYODZfNjQpICYmIFNNUAorCXNlbGVjdCBTR0lfR1JVIGlmIFg4Nl82NCAmJiBTTVAKIAktLS1oZWxwLS0tCiAJICBBbiBTR0kgbWFjaGluZSBjYW4gYmUgZGl2aWRlZCBpbnRvIG11bHRpcGxlIFNpbmdsZSBTeXN0ZW0KIAkgIEltYWdlcyB3aGljaCBhY3QgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyIGFuZCBoYXZlCkBAIC0xODksNyArMTg5LDcgQEAKIAogY29uZmlnIFNHSV9HUlUKIAl0cmlzdGF0ZSAiU0dJIEdSVSBkcml2ZXIiCi0JZGVwZW5kcyBvbiAoWDg2X1VWIHx8IElBNjRfU0dJX1VWIHx8IElBNjRfR0VORVJJQykgJiYgU01QCisJZGVwZW5kcyBvbiBYODZfVVYgJiYgU01QCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCS0tLWhlbHAtLS0KQEAgLTIyMyw2ICsyMjMsMTYgQEAKIAlUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHJma2lsbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wgdG8gRGVsbAogCWxhcHRvcHMuCiAKK2NvbmZpZyBJU0wyOTAwMworCXRyaXN0YXRlICJJbnRlcnNpbCBJU0wyOTAwMyBhbWJpZW50IGxpZ2h0IHNlbnNvciIKKwlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgSW50ZXJzaWwgSVNMMjkwMDMKKwkgIGFtYmllbnQgbGlnaHQgc2Vuc29yLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpc2wyOTAwMy4KKwogc291cmNlICJkcml2ZXJzL21pc2MvYzJwb3J0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IGJjMTE5OTguLjc4NzFmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTE4LDUgKzE4LDYgQEAKIG9iai0kKENPTkZJR19TR0lfWFApCQkrPSBzZ2kteHAvCiBvYmotJChDT05GSUdfU0dJX0dSVSkJCSs9IHNnaS1ncnUvCiBvYmotJChDT05GSUdfSFBfSUxPKQkJKz0gaHBpbG8ubworb2JqLSQoQ09ORklHX0lTTDI5MDAzKQkJKz0gaXNsMjkwMDMubwogb2JqLSQoQ09ORklHX0MyUE9SVCkJCSs9IGMycG9ydC8KIG9iai15CQkJCSs9IGVlcHJvbS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKaW5kZXggZDQ3NzU1Mi4uZDE4NGRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RydWN0IGF0MjRfZGF0YSB7CiAJc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBjaGlwOworCXN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgbWFjYzsKIAlib29sIHVzZV9zbWJ1czsKIAogCS8qCkBAIC0yMjUsMTQgKzIyNiwxMSBAQAogCQlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBhdDI0X2Jpbl9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfcmVhZChzdHJ1Y3QgYXQyNF9kYXRhICphdDI0LAogCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OwogCXNzaXplX3QgcmV0dmFsID0gMDsKIAotCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQogCWlmICh1bmxpa2VseSghY291bnQpKQogCQlyZXR1cm4gY291bnQ7CiAKQEAgLTI2MiwxMiArMjYwLDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQ7CiAKLS8qCi0gKiBSRVZJU0lUOiBleHBvcnQgYXQyNF9iaW57cmVhZCx3cml0ZX0oKSB0byBsZXQgb3RoZXIga2VybmVsIGNvZGUgdXNlCi0gKiBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0IG1pZ2h0IGhvbGQgYSBib2FyZCdzIEV0aGVybmV0IGFkZHJlc3MsIG9yCi0gKiBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUgbWFudWZhY3R1cmluZyBmbG9vci4KLSAqLworCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CiAKIAogLyoKQEAgLTM0NywxNCArMzQ3LDExIEBACiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGF0MjRfYmluX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfd3JpdGUoc3RydWN0IGF0MjRfZGF0YSAqYXQyNCwKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGF0MjRfZGF0YSAqYXQyNDsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAKLQlhdDI0ID0gZGV2X2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0KIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCkBAIC0zODQsNiArMzgxLDM5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OworCisJYXQyNCA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCXJldHVybiBhdDI0X3dyaXRlKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGlzIGxldHMgb3RoZXIga2VybmVsIGNvZGUgYWNjZXNzIHRoZSBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0CisgKiBtaWdodCBob2xkIGEgYm9hcmQncyBFdGhlcm5ldCBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbgorICogZGF0YSBnZW5lcmF0ZWQgb24gdGhlIG1hbnVmYWN0dXJpbmcgZmxvb3IuCisgKi8KKworc3RhdGljIHNzaXplX3QgYXQyNF9tYWNjX3JlYWQoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWFjYywgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2Zmc2V0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0MjRfbWFjY193cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptYWNjLCBjaGFyICpidWYsCisJCQkgIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF93cml0ZShhdDI0LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGF0MjRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQpAQCAtNDEzLDYgKzQ0Myw5IEBACiAJCSAqIGlzIHJlY29tbWVuZGVkIGFueWhvdy4KIAkJICovCiAJCWNoaXAucGFnZV9zaXplID0gMTsKKworCQljaGlwLnNldHVwID0gTlVMTDsKKwkJY2hpcC5jb250ZXh0ID0gTlVMTDsKIAl9CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoY2hpcC5ieXRlX2xlbikpCkBAIC00NjMsNiArNDk2LDggQEAKIAlhdDI0LT5iaW4ucmVhZCA9IGF0MjRfYmluX3JlYWQ7CiAJYXQyNC0+YmluLnNpemUgPSBjaGlwLmJ5dGVfbGVuOwogCisJYXQyNC0+bWFjYy5yZWFkID0gYXQyNF9tYWNjX3JlYWQ7CisKIAl3cml0YWJsZSA9ICEoY2hpcC5mbGFncyAmIEFUMjRfRkxBR19SRUFET05MWSk7CiAJaWYgKHdyaXRhYmxlKSB7CiAJCWlmICghdXNlX3NtYnVzIHx8IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKQEAgLTQ3MCw2ICs1MDUsOCBAQAogCiAJCQl1bnNpZ25lZCB3cml0ZV9tYXggPSBjaGlwLnBhZ2Vfc2l6ZTsKIAorCQkJYXQyNC0+bWFjYy53cml0ZSA9IGF0MjRfbWFjY193cml0ZTsKKwogCQkJYXQyNC0+YmluLndyaXRlID0gYXQyNF9iaW5fd3JpdGU7CiAJCQlhdDI0LT5iaW4uYXR0ci5tb2RlIHw9IFNfSVdVU1I7CiAKQEAgLTUyMCw2ICs1NTcsMTAgQEAKIAkJYXQyNC0+d3JpdGVfbWF4LAogCQl1c2Vfc21idXMgPyAiLCB1c2Vfc21idXMiIDogIiIpOwogCisJLyogZXhwb3J0IGRhdGEgdG8ga2VybmVsIGNvZGUgKi8KKwlpZiAoY2hpcC5zZXR1cCkKKwkJY2hpcC5zZXR1cCgmYXQyNC0+bWFjYywgY2hpcC5jb250ZXh0KTsKKwogCXJldHVybiAwOwogCiBlcnJfY2xpZW50czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKaW5kZXggMjkwZGJlOS4uNmJjMGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogc3RydWN0IGF0MjVfZGF0YSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yCW1lbTsKIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IHNwaV9lZXByb20JY2hpcDsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQliaW47CkBAIC03NSw2ICs3NiwxMyBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJdFsyXTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKIAorCWlmICh1bmxpa2VseShvZmZzZXQgPj0gYXQyNS0+YmluLnNpemUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKG9mZnNldCArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2Zmc2V0OworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAljcCA9IGNvbW1hbmQ7CiAJKmNwKysgPSBBVDI1X1JFQUQ7CiAKQEAgLTEyNywxMyArMTM1LDYgQEAKIAlkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJYXQyNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKHVubGlrZWx5KG9mZiA+PSBhdDI1LT5iaW4uc2l6ZSkpCi0JCXJldHVybiAwOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3JlYWQoYXQyNSwgYnVmLCBvZmYsIGNvdW50KTsKIH0KIApAQCAtMTQ2LDYgKzE0NywxMyBAQAogCXVuc2lnbmVkCQlidWZfc2l6ZTsKIAl1OAkJCSpib3VuY2U7CiAKKwlpZiAodW5saWtlbHkob2ZmID49IGF0MjUtPmJpbi5zaXplKSkKKwkJcmV0dXJuIC1FRkJJRzsKKwlpZiAoKG9mZiArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2ZmOworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAkvKiBUZW1wIGJ1ZmZlciBzdGFydHMgd2l0aCBjb21tYW5kIGFuZCBhZGRyZXNzICovCiAJYnVmX3NpemUgPSBhdDI1LT5jaGlwLnBhZ2Vfc2l6ZTsKIAlpZiAoYnVmX3NpemUgPiBpb19saW1pdCkKQEAgLTI1MywxOCArMjYxLDMxIEBACiAJZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOwogCWF0MjUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh1bmxpa2VseShvZmYgPj0gYXQyNS0+YmluLnNpemUpKQotCQlyZXR1cm4gLUVGQklHOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3dyaXRlKGF0MjUsIGJ1Ziwgb2ZmLCBjb3VudCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIExldCBpbi1rZXJuZWwgY29kZSBhY2Nlc3MgdGhlIGVlcHJvbSBkYXRhLiAqLworCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV9yZWFkKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKm1lbSwgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI1X2RhdGEgKmF0MjUgPSBjb250YWluZXJfb2YobWVtLCBzdHJ1Y3QgYXQyNV9kYXRhLCBtZW0pOworCisJcmV0dXJuIGF0MjVfZWVfcmVhZChhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV93cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptZW0sIGNoYXIgKmJ1ZiwKKwkJCSAgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0MjVfZGF0YSAqYXQyNSA9IGNvbnRhaW5lcl9vZihtZW0sIHN0cnVjdCBhdDI1X2RhdGEsIG1lbSk7CisKKwlyZXR1cm4gYXQyNV9lZV93cml0ZShhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGF0MjVfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYXQyNV9kYXRhCSphdDI1ID0gTlVMTDsKQEAgLTMxNyw2ICszMzgsMTAgQEAKIAlhdDI1LT5hZGRybGVuID0gYWRkcmxlbjsKIAogCS8qIEV4cG9ydCB0aGUgRUVQUk9NIGJ5dGVzIHRocm91Z2ggc3lzZnMsIHNpbmNlIHRoYXQncyBjb252ZW5pZW50LgorCSAqIEFuZCBtYXliZSB0byBvdGhlciBrZXJuZWwgY29kZTsgaXQgbWlnaHQgaG9sZCBhIGJvYXJkJ3MgRXRoZXJuZXQKKwkgKiBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUKKwkgKiBtYW51ZmFjdHVyaW5nIGZsb29yLgorCSAqCiAJICogRGVmYXVsdCB0byByb290LW9ubHkgYWNjZXNzIHRvIHRoZSBkYXRhOyBFRVBST01zIG9mdGVuIGhvbGQgZGF0YQogCSAqIHRoYXQncyBzZW5zaXRpdmUgZm9yIHJlYWQgYW5kL29yIHdyaXRlLCBsaWtlIGV0aGVybmV0IGFkZHJlc3NlcywKIAkgKiBzZWN1cml0eSBjb2RlcywgYm9hcmQtc3BlY2lmaWMgbWFudWZhY3R1cmluZyBjYWxpYnJhdGlvbnMsIGV0Yy4KQEAgLTMyNCwxNyArMzQ5LDIyIEBACiAJYXQyNS0+YmluLmF0dHIubmFtZSA9ICJlZXByb20iOwogCWF0MjUtPmJpbi5hdHRyLm1vZGUgPSBTX0lSVVNSOwogCWF0MjUtPmJpbi5yZWFkID0gYXQyNV9iaW5fcmVhZDsKKwlhdDI1LT5tZW0ucmVhZCA9IGF0MjVfbWVtX3JlYWQ7CiAKIAlhdDI1LT5iaW4uc2l6ZSA9IGF0MjUtPmNoaXAuYnl0ZV9sZW47CiAJaWYgKCEoY2hpcC0+ZmxhZ3MgJiBFRV9SRUFET05MWSkpIHsKIAkJYXQyNS0+YmluLndyaXRlID0gYXQyNV9iaW5fd3JpdGU7CiAJCWF0MjUtPmJpbi5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwkJYXQyNS0+bWVtLndyaXRlID0gYXQyNV9tZW1fd3JpdGU7CiAJfQogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzcGktPmRldi5rb2JqLCAmYXQyNS0+YmluKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CiAKKwlpZiAoY2hpcC0+c2V0dXApCisJCWNoaXAtPnNldHVwKCZhdDI1LT5tZW0sIGNoaXAtPmNvbnRleHQpOworCiAJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJVpkICVzICVzIGVlcHJvbSVzLCBwYWdlc2l6ZSAldVxuIiwKIAkJKGF0MjUtPmJpbi5zaXplIDwgMTAyNCkKIAkJCT8gYXQyNS0+YmluLnNpemUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocGlsby5jIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKaW5kZXggY2Y5OTE4NS4uODgwY2NmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hwaWxvLmMKKysrIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCS8qIGdpdmUgaUxPIHNvbWUgdGltZSB0byBwcm9jZXNzIHN0b3AgcmVxdWVzdCAqLwogCWZvciAocmV0cmllcyA9IE1BWF9XQUlUOyByZXRyaWVzID4gMDsgcmV0cmllcy0tKSB7CiAJCWRvb3JiZWxsX3NldChkcml2ZXJfY2NiKTsKLQkJdWRlbGF5KDEpOworCQl1ZGVsYXkoV0FJVF9USU1FKTsKIAkJaWYgKCEoaW9yZWFkMzIoJmRldmljZV9jY2ItPnNlbmRfY3RybCkgJiAoMSA8PCBDVFJMX0JJVFBPU19BKSkKIAkJICAgICYmCiAJCSAgICAhKGlvcmVhZDMyKCZkZXZpY2VfY2NiLT5yZWN2X2N0cmwpICYgKDEgPDwgQ1RSTF9CSVRQT1NfQSkpKQpAQCAtMzEyLDcgKzMxMiw3IEBACiAJZm9yIChpID0gTUFYX1dBSVQ7IGkgPiAwOyBpLS0pIHsKIAkJaWYgKGlsb19wa3RfZGVxdWV1ZShodywgZHJpdmVyX2NjYiwgU0VORFEsICZwa3RfaWQsIE5VTEwsIE5VTEwpKQogCQkJYnJlYWs7Ci0JCXVkZWxheSgxKTsKKwkJdWRlbGF5KFdBSVRfVElNRSk7CiAJfQogCiAJaWYgKGkpIHsKQEAgLTc1OSw3ICs3NTksNyBAQAogCWNsYXNzX2Rlc3Ryb3koaWxvX2NsYXNzKTsKIH0KIAotTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX1ZFUlNJT04oIjEuMSIpOwogTU9EVUxFX0FMSUFTKElMT19OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTihJTE9fTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBBbHRvYmVsbGkgPGRhdmlkLmFsdG9iZWxsaUBocC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uaCBiL2RyaXZlcnMvbWlzYy9ocGlsby5oCmluZGV4IGI2NGEyMGUuLjAzYTE0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocGlsby5oCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5oCkBAIC0xOSw4ICsxOSwxMiBAQAogI2RlZmluZSBNQVhfSUxPX0RFVgkxCiAvKiBtYXggbnVtYmVyIG9mIGZpbGVzICovCiAjZGVmaW5lIE1BWF9PUEVOCShNQVhfQ0NCICogTUFYX0lMT19ERVYpCisvKiB0b3RhbCB3YWl0IHRpbWUgaW4gdXNlYyAqLworI2RlZmluZSBNQVhfV0FJVF9USU1FCTEwMDAwCisvKiBwZXIgc3BpbiB3YWl0IHRpbWUgaW4gdXNlYyAqLworI2RlZmluZSBXQUlUX1RJTUUJMTAKIC8qIHNwaW4gY291bnRlciBmb3Igb3Blbi9jbG9zZSBkZWxheSAqLwotI2RlZmluZSBNQVhfV0FJVAkxMDAwMAorI2RlZmluZSBNQVhfV0FJVAkoTUFYX1dBSVRfVElNRSAvIFdBSVRfVElNRSkKIAogLyoKICAqIFBlciBkZXZpY2UsIHVzZWQgdG8gdHJhY2sgZ2xvYmFsIG1lbW9yeSBhbGxvY2F0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pc2wyOTAwMy5jIGIvZHJpdmVycy9taXNjL2lzbDI5MDAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyYTU5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9pc2wyOTAwMy5jCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogIGlzbDI5MDAzLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvcgorICogCUludGVyc2lsIElTTDI5MDAzIGFtYmllbnQgbGlnaHQgc2Vuc29yCisgKgorICogIFNlZSBmaWxlOkRvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2lzbDI5MDAzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKKyAqICAJUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlAbGludXguaXQ+CisgKiAgCUV1cm90ZWNoIFMucC5BLiA8aW5mb0BldXJvdGVjaC5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBJU0wyOTAwM19EUlZfTkFNRQkiaXNsMjkwMDMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMS4wIgorCisjZGVmaW5lIElTTDI5MDAzX1JFR19DT01NQU5ECQkweDAwCisjZGVmaW5lIElTTDI5MDAzX0FEQ19FTkFCTEVECQkoMSA8PCA3KQorI2RlZmluZSBJU0wyOTAwM19BRENfUEQJCQkoMSA8PCA2KQorI2RlZmluZSBJU0wyOTAwM19USU1JTkdfSU5UCQkoMSA8PCA1KQorI2RlZmluZSBJU0wyOTAwM19NT0RFX1NISUZUCQkoMikKKyNkZWZpbmUgSVNMMjkwMDNfTU9ERV9NQVNLCQkoMHgzIDw8IElTTDI5MDAzX01PREVfU0hJRlQpCisjZGVmaW5lIElTTDI5MDAzX1JFU19TSElGVAkJKDApCisjZGVmaW5lIElTTDI5MDAzX1JFU19NQVNLCQkoMHgzIDw8IElTTDI5MDAzX1JFU19TSElGVCkKKworI2RlZmluZSBJU0wyOTAwM19SRUdfQ09OVFJPTAkJMHgwMQorI2RlZmluZSBJU0wyOTAwM19JTlRfRkxHCQkoMSA8PCA1KQorI2RlZmluZSBJU0wyOTAwM19SQU5HRV9TSElGVAkJKDIpCisjZGVmaW5lIElTTDI5MDAzX1JBTkdFX01BU0sJCSgweDMgPDwgSVNMMjkwMDNfUkFOR0VfU0hJRlQpCisjZGVmaW5lIElTTDI5MDAzX0lOVF9QRVJTSVNUU19TSElGVAkoMCkKKyNkZWZpbmUgSVNMMjkwMDNfSU5UX1BFUlNJU1RTX01BU0sJKDB4ZiA8PCBJU0wyOTAwM19JTlRfUEVSU0lTVFNfU0hJRlQpCisKKyNkZWZpbmUgSVNMMjkwMDNfUkVHX0lSUV9USFJFU0hfSEkJMHgwMgorI2RlZmluZSBJU0wyOTAwM19SRUdfSVJRX1RIUkVTSF9MTwkweDAzCisjZGVmaW5lIElTTDI5MDAzX1JFR19MU0JfU0VOU09SCQkweDA0CisjZGVmaW5lIElTTDI5MDAzX1JFR19NU0JfU0VOU09SCQkweDA1CisjZGVmaW5lIElTTDI5MDAzX1JFR19MU0JfVElNRVIJCTB4MDYKKyNkZWZpbmUgSVNMMjkwMDNfUkVHX01TQl9USU1FUgkJMHgwNworCisjZGVmaW5lIElTTDI5MDAzX05VTV9DQUNIQUJMRV9SRUdTCTQKKworc3RydWN0IGlzbDI5MDAzX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdTggcmVnX2NhY2hlW0lTTDI5MDAzX05VTV9DQUNIQUJMRV9SRUdTXTsKK307CisKK3N0YXRpYyBpbnQgZ2Fpbl9yYW5nZVtdID0geworCTEwMDAsIDQwMDAsIDE2MDAwLCA2NDAwMAorfTsKKworLyoKKyAqIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzCisgKi8KKworc3RhdGljIGludCBfX2lzbDI5MDAzX3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgdTMyIHJlZywgdTggbWFzaywgdTggc2hpZnQpCit7CisJc3RydWN0IGlzbDI5MDAzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlyZXR1cm4gKGRhdGEtPnJlZ19jYWNoZVtyZWddICYgbWFzaykgPj4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbnQgX19pc2wyOTAwM193cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1MzIgcmVnLCB1OCBtYXNrLCB1OCBzaGlmdCwgdTggdmFsKQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldCA9IDA7CisJdTggdG1wOworCisJaWYgKHJlZyA+PSBJU0wyOTAwM19OVU1fQ0FDSEFCTEVfUkVHUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCXRtcCA9IGRhdGEtPnJlZ19jYWNoZVtyZWddOworCXRtcCAmPSB+bWFzazsKKwl0bXAgfD0gdmFsIDw8IHNoaWZ0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdG1wKTsKKwlpZiAoIXJldCkKKwkJZGF0YS0+cmVnX2NhY2hlW3JlZ10gPSB0bXA7CisKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBpbnRlcm5hbGx5IHVzZWQgZnVuY3Rpb25zCisgKi8KKworLyogcmFuZ2UgKi8KK3N0YXRpYyBpbnQgaXNsMjkwMDNfZ2V0X3JhbmdlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfcmVhZF9yZWcoY2xpZW50LCBJU0wyOTAwM19SRUdfQ09OVFJPTCwKKwkJSVNMMjkwMDNfUkFOR0VfTUFTSywgSVNMMjkwMDNfUkFOR0VfU0hJRlQpOworfQorCitzdGF0aWMgaW50IGlzbDI5MDAzX3NldF9yYW5nZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfd3JpdGVfcmVnKGNsaWVudCwgSVNMMjkwMDNfUkVHX0NPTlRST0wsCisJCUlTTDI5MDAzX1JBTkdFX01BU0ssIElTTDI5MDAzX1JBTkdFX1NISUZULCByYW5nZSk7Cit9CisKKy8qIHJlc29sdXRpb24gKi8KK3N0YXRpYyBpbnQgaXNsMjkwMDNfZ2V0X3Jlc29sdXRpb24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gX19pc2wyOTAwM19yZWFkX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQlJU0wyOTAwM19SRVNfTUFTSywgSVNMMjkwMDNfUkVTX1NISUZUKTsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19zZXRfcmVzb2x1dGlvbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVzKQoreworCXJldHVybiBfX2lzbDI5MDAzX3dyaXRlX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQlJU0wyOTAwM19SRVNfTUFTSywgSVNMMjkwMDNfUkVTX1NISUZULCByZXMpOworfQorCisvKiBtb2RlICovCitzdGF0aWMgaW50IGlzbDI5MDAzX2dldF9tb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfcmVhZF9yZWcoY2xpZW50LCBJU0wyOTAwM19SRUdfQ09NTUFORCwKKwkJSVNMMjkwMDNfUkVTX01BU0ssIElTTDI5MDAzX1JFU19TSElGVCk7Cit9CisKK3N0YXRpYyBpbnQgaXNsMjkwMDNfc2V0X21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG1vZGUpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfd3JpdGVfcmVnKGNsaWVudCwgSVNMMjkwMDNfUkVHX0NPTU1BTkQsCisJCUlTTDI5MDAzX1JFU19NQVNLLCBJU0wyOTAwM19SRVNfU0hJRlQsIG1vZGUpOworfQorCisvKiBwb3dlcl9zdGF0ZSAqLworc3RhdGljIGludCBpc2wyOTAwM19zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHN0YXRlKQoreworCXJldHVybiBfX2lzbDI5MDAzX3dyaXRlX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQkJCUlTTDI5MDAzX0FEQ19FTkFCTEVEIHwgSVNMMjkwMDNfQURDX1BELCAwLAorCQkJCXN0YXRlID8gSVNMMjkwMDNfQURDX0VOQUJMRUQgOiBJU0wyOTAwM19BRENfUEQpOworfQorCitzdGF0aWMgaW50IGlzbDI5MDAzX2dldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggY21kcmVnID0gZGF0YS0+cmVnX2NhY2hlW0lTTDI5MDAzX1JFR19DT01NQU5EXTsKKwlyZXR1cm4gfmNtZHJlZyAmIElTTDI5MDAzX0FEQ19QRDsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19nZXRfYWRjX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGlzbDI5MDAzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbHNiLCBtc2IsIHJhbmdlLCBiaXRkZXB0aDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWxzYiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIElTTDI5MDAzX1JFR19MU0JfU0VOU09SKTsKKworCWlmIChsc2IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJCXJldHVybiBsc2I7CisJfQorCisJbXNiID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSVNMMjkwMDNfUkVHX01TQl9TRU5TT1IpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlpZiAobXNiIDwgMCkKKwkJcmV0dXJuIG1zYjsKKworCXJhbmdlID0gaXNsMjkwMDNfZ2V0X3JhbmdlKGNsaWVudCk7CisJYml0ZGVwdGggPSAoNCAtIGlzbDI5MDAzX2dldF9yZXNvbHV0aW9uKGNsaWVudCkpICogNDsKKwlyZXR1cm4gKCgobXNiIDw8IDgpIHwgbHNiKSAqIGdhaW5fcmFuZ2VbcmFuZ2VdKSA+PiBiaXRkZXB0aDsKK30KKworLyoKKyAqIHN5c2ZzIGxheWVyCisgKi8KKworLyogcmFuZ2UgKi8KK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3Nob3dfcmFuZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgaXNsMjkwMDNfZ2V0X3JhbmdlKGNsaWVudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zdG9yZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkgfHwgKHZhbCA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGlzbDI5MDAzX3NldF9yYW5nZShjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyYW5nZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGlzbDI5MDAzX3Nob3dfcmFuZ2UsIGlzbDI5MDAzX3N0b3JlX3JhbmdlKTsKKworCisvKiByZXNvbHV0aW9uICovCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zaG93X3Jlc29sdXRpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGlzbDI5MDAzX2dldF9yZXNvbHV0aW9uKGNsaWVudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zdG9yZV9yZXNvbHV0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApIHx8ICh2YWwgPiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpc2wyOTAwM19zZXRfcmVzb2x1dGlvbihjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNvbHV0aW9uLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgaXNsMjkwMDNfc2hvd19yZXNvbHV0aW9uLCBpc2wyOTAwM19zdG9yZV9yZXNvbHV0aW9uKTsKKworLyogbW9kZSAqLworc3RhdGljIHNzaXplX3QgaXNsMjkwMDNfc2hvd19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXNsMjkwMDNfZ2V0X21vZGUoY2xpZW50KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3N0b3JlX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApIHx8ICh2YWwgPiAyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpc2wyOTAwM19zZXRfbW9kZShjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgaXNsMjkwMDNfc2hvd19tb2RlLCBpc2wyOTAwM19zdG9yZV9tb2RlKTsKKworCisvKiBwb3dlciBzdGF0ZSAqLworc3RhdGljIHNzaXplX3QgaXNsMjkwMDNfc2hvd19wb3dlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpc2wyOTAwM19nZXRfcG93ZXJfc3RhdGUoY2xpZW50KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3N0b3JlX3Bvd2VyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkgfHwgKHZhbCA+IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIHZhbCk7CisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfc3RhdGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICBpc2wyOTAwM19zaG93X3Bvd2VyX3N0YXRlLCBpc2wyOTAwM19zdG9yZV9wb3dlcl9zdGF0ZSk7CisKKworLyogbHV4ICovCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zaG93X2x1eChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCS8qIE5vIExVWCBkYXRhIGlmIG5vdCBvcGVyYXRpb25hbCAqLworCWlmICghaXNsMjkwMDNfZ2V0X3Bvd2VyX3N0YXRlKGNsaWVudCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXNsMjkwMDNfZ2V0X2FkY192YWx1ZShjbGllbnQpKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGx1eCwgU19JUlVHTywgaXNsMjkwMDNfc2hvd19sdXgsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXNsMjkwMDNfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9yYW5nZS5hdHRyLAorCSZkZXZfYXR0cl9yZXNvbHV0aW9uLmF0dHIsCisJJmRldl9hdHRyX21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfbHV4LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXNsMjkwMDNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBpc2wyOTAwM19hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBpc2wyOTAwM19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKwkvKiByZWFkIGFsbCB0aGUgcmVnaXN0ZXJzIG9uY2UgdG8gZmlsbCB0aGUgY2FjaGUuCisJICogaWYgb25lIG9mIHRoZSByZWFkcyBmYWlscywgd2UgY29uc2lkZXIgdGhlIGluaXQgZmFpbGVkICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+cmVnX2NhY2hlKTsgaSsrKSB7CisJCWludCB2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSk7CisJCWlmICh2IDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWRhdGEtPnJlZ19jYWNoZVtpXSA9IHY7CisJfQorCisJLyogc2V0IGRlZmF1bHRzICovCisJaXNsMjkwMDNfc2V0X3JhbmdlKGNsaWVudCwgMCk7CisJaXNsMjkwMDNfc2V0X3Jlc29sdXRpb24oY2xpZW50LCAwKTsKKwlpc2wyOTAwM19zZXRfbW9kZShjbGllbnQsIDApOworCWlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJMkMgbGF5ZXIKKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc2wyOTAwM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaXNsMjkwMDNfZGF0YSAqZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURSkpCisJCXJldHVybiAtRUlPOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2wyOTAwM19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKworCS8qIGluaXRpYWxpemUgdGhlIElTTDI5MDAzIGNoaXAgKi8KKwllcnIgPSBpc2wyOTAwM19pbml0X2NsaWVudChjbGllbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9rZnJlZTsKKworCS8qIHJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmaXNsMjkwMDNfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2tmcmVlOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZHJpdmVyIHZlcnNpb24gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworCitleGl0X2tmcmVlOgorCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzbDI5MDAzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmlzbDI5MDAzX2F0dHJfZ3JvdXApOworCWlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIDApOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBpc2wyOTAwM19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiBpc2wyOTAwM19zZXRfcG93ZXJfc3RhdGUoY2xpZW50LCAwKTsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaXNsMjkwMDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJLyogcmVzdG9yZSByZWdpc3RlcnMgZnJvbSBjYWNoZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnJlZ19jYWNoZSk7IGkrKykKKwkJaWYgKCFpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgaSwgZGF0YS0+cmVnX2NhY2hlW2ldKSkKKwkJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGlzbDI5MDAzX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpc2wyOTAwM19yZXN1bWUJCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGlzbDI5MDAzX2lkW10gPSB7CisJeyAiaXNsMjkwMDMiLCAwIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaXNsMjkwMDNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNsMjkwMDNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gSVNMMjkwMDNfRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSBpc2wyOTAwM19zdXNwZW5kLAorCS5yZXN1bWUJPSBpc2wyOTAwM19yZXN1bWUsCisJLnByb2JlCT0gaXNsMjkwMDNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGlzbDI5MDAzX3JlbW92ZSksCisJLmlkX3RhYmxlID0gaXNsMjkwMDNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2wyOTAwM19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpc2wyOTAwM19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNsMjkwMDNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpc2wyOTAwM19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJU0wyOTAwMyBhbWJpZW50IGxpZ2h0IHNlbnNvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQoaXNsMjkwMDNfaW5pdCk7Cittb2R1bGVfZXhpdChpc2wyOTAwM19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQppbmRleCA5ZTkxNzBiLi5iY2Q4MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQpAQCAtMyw1ICszLDUgQEAKIGVuZGlmCiAKIG9iai0kKENPTkZJR19TR0lfR1JVKSA6PSBncnUubwotZ3J1LXkgOj0gZ3J1ZmlsZS5vIGdydW1haW4ubyBncnVmYXVsdC5vIGdydXRsYnB1cmdlLm8gZ3J1cHJvY2ZzLm8gZ3J1a3NlcnZpY2VzLm8KK2dydS15IDo9IGdydWZpbGUubyBncnVtYWluLm8gZ3J1ZmF1bHQubyBncnV0bGJwdXJnZS5vIGdydXByb2Nmcy5vIGdydWtzZXJ2aWNlcy5vIGdydWhhbmRsZXMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKaW5kZXggNDg3NjJlNy4uM2ZkZTMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaApAQCAtMTksOCArMTksMTEgQEAKICNpZm5kZWYgX19HUlVfSU5TVFJVQ1RJT05TX0hfXwogI2RlZmluZSBfX0dSVV9JTlNUUlVDVElPTlNfSF9fCiAKLSNkZWZpbmUgZ3J1X2ZsdXNoX2NhY2hlX2hvb2socCkKLSNkZWZpbmUgZ3J1X2VtdWxhdG9yX3dhaXRfaG9vayhwLCB3KQorZXh0ZXJuIGludCBncnVfY2hlY2tfc3RhdHVzX3Byb2Modm9pZCAqY2IpOworZXh0ZXJuIGludCBncnVfd2FpdF9wcm9jKHZvaWQgKmNiKTsKK2V4dGVybiB2b2lkIGdydV93YWl0X2Fib3J0X3Byb2Modm9pZCAqY2IpOworCisKIAogLyoKICAqIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZnVuY3Rpb25zCkBAIC0yOSwxNiArMzIsMTYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0KQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNkZWZpbmUgX19mbHVzaF9jYWNoZShwKQkJaWE2NF9mYyhwKQorI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQlpYTY0X2ZjKCh1bnNpZ25lZCBsb25nKXApCiAvKiBVc2Ugdm9sYXRpbGUgb24gSUE2NCB0byBlbnN1cmUgb3JkZXJpbmcgdmlhIHN0NC5yZWwgKi8KLSNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsIHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXAogCQkJYmFycmllcigpOwkJCQkJXAogCQkJKigodm9sYXRpbGUgaW50ICopKHApKSA9IHY7IC8qIGZvcmNlIHN0LnJlbCAqLwlcCiAJCX0gd2hpbGUgKDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCiAjZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWNsZmx1c2gocCkKLSNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsIHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXAogCQkJYmFycmllcigpOwkJCQkJXAogCQkJKihpbnQgKilwID0gdjsJCQkJCVwKQEAgLTU1OCwyMCArNTYxLDE5IEBACiAKICNkZWZpbmUgR1JVX0VYQ19TVFJfU0laRQkJMjU2CiAKLWV4dGVybiBpbnQgZ3J1X2NoZWNrX3N0YXR1c19wcm9jKHZvaWQgKmNiKTsKLWV4dGVybiBpbnQgZ3J1X3dhaXRfcHJvYyh2b2lkICpjYik7Ci1leHRlcm4gdm9pZCBncnVfd2FpdF9hYm9ydF9wcm9jKHZvaWQgKmNiKTsKIAogLyoKICAqIENvbnRyb2wgYmxvY2sgZGVmaW5pdGlvbiBmb3IgY2hlY2tpbmcgc3RhdHVzCiAgKi8KIHN0cnVjdCBncnVfY29udHJvbF9ibG9ja19zdGF0dXMgewogCXVuc2lnbmVkIGludAlpY21kCQk6MTsKLQl1bnNpZ25lZCBpbnQJdW51c2VkMQkJOjMxOworCXVuc2lnbmVkIGludAlpbWEJCTozOworCXVuc2lnbmVkIGludAlyZXNlcnZlZDAJOjQ7CisJdW5zaWduZWQgaW50CXVudXNlZDEJCToyNDsKIAl1bnNpZ25lZCBpbnQJdW51c2VkMgkJOjI0OwogCXVuc2lnbmVkIGludAlpc3RhdHVzCQk6MjsKIAl1bnNpZ25lZCBpbnQJaXN1YnN0YXR1cwk6NDsKLQl1bnNpZ25lZCBpbnQJaW51c2VkMwkJOjI7CisJdW5zaWduZWQgaW50CXVudXNlZDMJCToyOwogfTsKIAogLyogR2V0IENCIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKaW5kZXggM2VlNjk4YS4uYWIxMTg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgImdydS5oIgogI2luY2x1ZGUgImdydXRhYmxlcy5oIgpAQCAtMjY2LDYgKzI2Nyw0NCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdydV92dG9wKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCSAgICBpbnQgd3JpdGUsIGludCBhdG9taWMsIHVuc2lnbmVkIGxvbmcgKmdwYSwgaW50ICpwYWdlc2hpZnQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHMtPnRzX21tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJaW50IHJldCwgcHM7CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgdmFkZHIpOworCWlmICghdm1hKQorCQlnb3RvIGludmFsOworCisJLyoKKwkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYworCSAqIGNvbnRleHQuCisJICovCisJcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KKwlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcHMpOworCWlmIChyZXQpIHsKKwkJaWYgKGF0b21pYykKKwkJCWdvdG8gdXBtOworCQlpZiAobm9uX2F0b21pY19wdGVfbG9va3VwKHZtYSwgdmFkZHIsIHdyaXRlLCAmcGFkZHIsICZwcykpCisJCQlnb3RvIGludmFsOworCX0KKwlpZiAoaXNfZ3J1X3BhZGRyKHBhZGRyKSkKKwkJZ290byBpbnZhbDsKKwlwYWRkciA9IHBhZGRyICYgfigoMVVMIDw8IHBzKSAtIDEpOworCSpncGEgPSB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKHBhZGRyKTsKKwkqcGFnZXNoaWZ0ID0gcHM7CisJcmV0dXJuIDA7CisKK2ludmFsOgorCXJldHVybiAtMTsKK3VwbToKKwlyZXR1cm4gLTI7Cit9CisKKwogLyoKICAqIERyb3AgYSBUTEIgZW50cnkgaW50byB0aGUgR1JVLiBUaGUgZmF1bHQgaXMgZGVzY3JpYmVkIGJ5IGluZm8gaW4gYW4gVEZILgogICoJSW5wdXQ6CkBAIC0yODAsMTAgKzMxOSw4IEBACiAJCQkgIHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAogCQkJICB1bnNpZ25lZCBsb25nIF9fdXNlciAqY2IpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHMtPnRzX21tOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCWludCBwYWdlc2hpZnQsIGFzaWQsIHdyaXRlLCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBwYWRkciwgZ3BhLCB2YWRkcjsKKwlpbnQgcGFnZXNoaWZ0ID0gMCwgYXNpZCwgd3JpdGUsIHJldCwgYXRvbWljID0gIWNiOworCXVuc2lnbmVkIGxvbmcgZ3BhID0gMCwgdmFkZHIgPSAwOwogCiAJLyoKIAkgKiBOT1RFOiBUaGUgR1JVIGNvbnRhaW5zIG1hZ2ljIGhhcmR3YXJlIHRoYXQgZWxpbWluYXRlcyByYWNlcyBiZXR3ZWVuCkBAIC0zMTcsMjggKzM1NCwxOSBAQAogCWlmIChhdG9taWNfcmVhZCgmZ3RzLT50c19nbXMtPm1zX3JhbmdlX2FjdGl2ZSkpCiAJCWdvdG8gZmFpbGFjdGl2ZTsKIAotCXZtYSA9IGZpbmRfdm1hKG1tLCB2YWRkcik7Ci0JaWYgKCF2bWEpCisJcmV0ID0gZ3J1X3Z0b3AoZ3RzLCB2YWRkciwgd3JpdGUsIGF0b21pYywgJmdwYSwgJnBhZ2VzaGlmdCk7CisJaWYgKHJldCA9PSAtMSkKIAkJZ290byBmYWlsaW52YWw7CisJaWYgKHJldCA9PSAtMikKKwkJZ290byBmYWlsdXBtOwogCi0JLyoKLQkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYwotCSAqIGNvbnRleHQuCi0JICovCi0Jcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KLQlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcGFnZXNoaWZ0KTsKLQlpZiAocmV0KSB7Ci0JCWlmICghY2IpCisJaWYgKCEoZ3RzLT50c19zaXplYXZhaWwgJiBHUlVfU0laRUFWQUlMKHBhZ2VzaGlmdCkpKSB7CisJCWd0cy0+dHNfc2l6ZWF2YWlsIHw9IEdSVV9TSVpFQVZBSUwocGFnZXNoaWZ0KTsKKwkJaWYgKGF0b21pYyB8fCAhZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKSkgeworCQkJZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkID0gMTsKIAkJCWdvdG8gZmFpbHVwbTsKLQkJaWYgKG5vbl9hdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLAotCQkJCQkgICZwYWdlc2hpZnQpKQotCQkJZ290byBmYWlsaW52YWw7CisJCX0KIAl9Ci0JaWYgKGlzX2dydV9wYWRkcihwYWRkcikpCi0JCWdvdG8gZmFpbGludmFsOwotCi0JcGFkZHIgPSBwYWRkciAmIH4oKDFVTCA8PCBwYWdlc2hpZnQpIC0gMSk7Ci0JZ3BhID0gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShwYWRkcik7CiAJZ3J1X2NiX3NldF9pc3RhdHVzX2FjdGl2ZShjYik7CiAJdGZoX3dyaXRlX3Jlc3RhcnQodGZoLCBncGEsIEdBQV9SQU0sIHZhZGRyLCBhc2lkLCB3cml0ZSwKIAkJCSAgR1JVX1BBR0VTSVpFKHBhZ2VzaGlmdCkpOwpAQCAtMzY4LDYgKzM5Niw3IEBACiAKIGZhaWxmbW06CiAJLyogRk1NIHN0YXRlIG9uIFVQTSBjYWxsICovCisJZ3J1X2ZsdXNoX2NhY2hlKHRmaCk7CiAJU1RBVCh0bGJfZHJvcGluX2ZhaWxfZm1tKTsKIAlncnVfZGJnKGdydWRldiwgIkZBSUxFRCBmbW0gdGZoOiAweCVwLCBzdGF0ZSAlZFxuIiwgdGZoLCB0ZmgtPnN0YXRlKTsKIAlyZXR1cm4gMDsKQEAgLTQ0OCw2ICs0NzcsNyBAQAogCQkJdXBfcmVhZCgmZ3RzLT50c19tbS0+bW1hcF9zZW0pOwogCQl9IGVsc2UgewogCQkJdGZoX3VzZXJfcG9sbGluZ19tb2RlKHRmaCk7CisJCQlTVEFUKGludHJfbW1fbG9ja19mYWlsZWQpOwogCQl9CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTQ5NywxMCArNTI3LDggQEAKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodWNibnVtID49IGd0cy0+dHNfY2JyX2F1X2NvdW50ICogR1JVX0NCUl9BVV9TSVpFKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJaWYgKHVjYm51bSA+PSBndHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9DQlJfQVVfU0laRSkKIAkJZ290byBleGl0OwotCX0KIAogCS8qCiAJICogSWYgZm9yY2VfdW5sb2FkIGlzIHNldCwgdGhlIFVQTSBUTEIgZmF1bHQgaXMgcGhvbnkuIFRoZSB0YXNrCkBAIC01MDgsNiArNTM2LDIwIEBACiAJICogdW5sb2FkIHRoZSBjb250ZXh0LiBUaGUgdGFzayB3aWxsIHBhZ2UgZmF1bHQgYW5kIGFzc2lnbiBhIG5ldwogCSAqIGNvbnRleHQuCiAJICovCisJaWYgKGd0cy0+dHNfdGdpZF9vd25lciA9PSBjdXJyZW50LT50Z2lkICYmIGd0cy0+dHNfYmxhZGUgPj0gMCAmJgorCQkJCWd0cy0+dHNfYmxhZGUgIT0gdXZfbnVtYV9ibGFkZV9pZCgpKSB7CisJCVNUQVQoY2FsbF9vc19vZmZub2RlX3JlZmVyZW5jZSk7CisJCWd0cy0+dHNfZm9yY2VfdW5sb2FkID0gMTsKKwl9CisKKwkvKgorCSAqIENDSCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGlmIHRzX2ZvcmNlX2NjaF9yZWxvYWQgaXMgc2V0LgorCSAqLworCWlmIChndHMtPnRzX2dydSAmJiBndHMtPnRzX2ZvcmNlX2NjaF9yZWxvYWQpIHsKKwkJZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKTsKKwkJZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkID0gMDsKKwl9CisKIAlyZXQgPSAtRUFHQUlOOwogCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAlpZiAoZ3RzLT50c19mb3JjZV91bmxvYWQpIHsKQEAgLTU0MSwxMSArNTgzLDEzIEBACiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGd0cy0+dHNfZ3J1KSB7Ci0JCXVjYm51bSA9IGdldF9jYl9udW1iZXIoKHZvaWQgKilleGNkZXQuY2IpOworCXVjYm51bSA9IGdldF9jYl9udW1iZXIoKHZvaWQgKilleGNkZXQuY2IpOworCWlmICh1Y2JudW0gPj0gZ3RzLT50c19jYnJfYXVfY291bnQgKiBHUlVfQ0JSX0FVX1NJWkUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGd0cy0+dHNfZ3J1KSB7CiAJCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAkJY2JlID0gZ2V0X2NiZV9ieV9pbmRleChndHMtPnRzX2dydSwgY2JybnVtKTsKLQkJcHJlZmV0Y2h3KGNiZSk7CQkvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCisJCXByZWZldGNodyhjYmUpOy8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAkJZXhjZGV0Lm9wYyA9IGNiZS0+b3BjY3B5OwogCQlleGNkZXQuZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCQlleGNkZXQuZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC01NjcsNiArNjExLDMxIEBACiAvKgogICogVXNlciByZXF1ZXN0IHRvIHVubG9hZCBhIGNvbnRleHQuIENvbnRlbnQgaXMgc2F2ZWQgZm9yIHBvc3NpYmxlIHJlbG9hZC4KICAqLworc3RhdGljIGludCBncnVfdW5sb2FkX2FsbF9jb250ZXh0cyh2b2lkKQoreworCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHM7CisJc3RydWN0IGdydV9zdGF0ZSAqZ3J1OworCWludCBnaWQsIGN0eG51bTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlmb3JlYWNoX2dpZChnaWQpIHsKKwkJZ3J1ID0gR0lEX1RPX0dSVShnaWQpOworCQlzcGluX2xvY2soJmdydS0+Z3NfbG9jayk7CisJCWZvciAoY3R4bnVtID0gMDsgY3R4bnVtIDwgR1JVX05VTV9DQ0g7IGN0eG51bSsrKSB7CisJCQlndHMgPSBncnUtPmdzX2d0c1tjdHhudW1dOworCQkJaWYgKGd0cyAmJiBtdXRleF90cnlsb2NrKCZndHMtPnRzX2N0eGxvY2spKSB7CisJCQkJc3Bpbl91bmxvY2soJmdydS0+Z3NfbG9jayk7CisJCQkJZ3J1X3VubG9hZF9jb250ZXh0KGd0cywgMSk7CisJCQkJZ3J1X3VubG9ja19ndHMoZ3RzKTsKKwkJCQlzcGluX2xvY2soJmdydS0+Z3NfbG9jayk7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmdydS0+Z3NfbG9jayk7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgZ3J1X3VzZXJfdW5sb2FkX2NvbnRleHQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0czsKQEAgLTU3OCw2ICs2NDcsOSBAQAogCiAJZ3J1X2RiZyhncnVkZXYsICJnc2VnIDB4JWx4XG4iLCByZXEuZ3NlZyk7CiAKKwlpZiAoIXJlcS5nc2VnKQorCQlyZXR1cm4gZ3J1X3VubG9hZF9hbGxfY29udGV4dHMoKTsKKwogCWd0cyA9IGdydV9maW5kX2xvY2tfZ3RzKHJlcS5nc2VnKTsKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MDksNyArNjgxLDcgQEAKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlncnVfZmx1c2hfdGxiX3JhbmdlKGd0cy0+dHNfZ21zLCByZXEudmFkZHIsIHJlcS52YWRkciArIHJlcS5sZW4pOworCWdydV9mbHVzaF90bGJfcmFuZ2UoZ3RzLT50c19nbXMsIHJlcS52YWRkciwgcmVxLmxlbik7CiAJZ3J1X3VubG9ja19ndHMoZ3RzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGM2N2U0ZTguLjNlNmU0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTQ1LDcgKzQ1LDkgQEAKICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogCiBzdHJ1Y3QgZ3J1X2JsYWRlX3N0YXRlICpncnVfYmFzZVtHUlVfTUFYX0JMQURFU10gX19yZWFkX21vc3RseTsKLXVuc2lnbmVkIGxvbmcgZ3J1X3N0YXJ0X3BhZGRyLCBncnVfZW5kX3BhZGRyIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIGdydV9zdGFydF9wYWRkciBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyBncnVfZW5kX3BhZGRyIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBpbnQgZ3J1X21heF9naWRzIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3QgZ3J1X3N0YXRzX3MgZ3J1X3N0YXRzOwogCiAvKiBHdWFyYW50ZWVkIHVzZXIgYXZhaWxhYmxlIHJlc291cmNlcyBvbiBlYWNoIG5vZGUgKi8KQEAgLTEwMSw3ICsxMDMsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZtYS0+dm1fc3RhcnQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSB8fAotCSAgICAJCQl2bWEtPnZtX2VuZCAmIChHUlVfR1NFR19QQUdFU0laRSAtIDEpKQorCQkJCXZtYS0+dm1fZW5kICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdm1hLT52bV9mbGFncyB8PQpAQCAtMjczLDggKzI3NSwxMSBAQAogCWdydS0+Z3NfYmxhZGVfaWQgPSBiaWQ7CiAJZ3J1LT5nc19jYnJfbWFwID0gKEdSVV9DQlJfQVUgPT0gNjQpID8gfjAgOiAoMVVMIDw8IEdSVV9DQlJfQVUpIC0gMTsKIAlncnUtPmdzX2Rzcl9tYXAgPSAoMVVMIDw8IEdSVV9EU1JfQVUpIC0gMTsKKwlncnUtPmdzX2FzaWRfbGltaXQgPSBNQVhfQVNJRDsKIAlncnVfdGdoX2ZsdXNoX2luaXQoZ3J1KTsKLQlncnVfZGJnKGdydWRldiwgImJpZCAlZCwgbmlkICVkLCBncnUgJXgsIHZhZGRyICVwICgweCVseClcbiIsCisJaWYgKGdydS0+Z3NfZ2lkID49IGdydV9tYXhfZ2lkcykKKwkJZ3J1X21heF9naWRzID0gZ3J1LT5nc19naWQgKyAxOworCWdydV9kYmcoZ3J1ZGV2LCAiYmlkICVkLCBuaWQgJWQsIGdpZCAlZCwgdmFkZHIgJXAgKDB4JWx4KVxuIiwKIAkJYmlkLCBuaWQsIGdydS0+Z3NfZ2lkLCBncnUtPmdzX2dydV9iYXNlX3ZhZGRyLAogCQlncnUtPmdzX2dydV9iYXNlX3BhZGRyKTsKIAlncnVfa3NlcnZpY2VzX2luaXQoZ3J1KTsKQEAgLTI5NSw3ICszMDAsNyBAQAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQliaWQgPSB1dl9ub2RlX3RvX2JsYWRlX2lkKG5pZCk7CiAJCXBub2RlID0gdXZfbm9kZV90b19wbm9kZShuaWQpOwotCQlpZiAoZ3J1X2Jhc2VbYmlkXSkKKwkJaWYgKGJpZCA8IDAgfHwgZ3J1X2Jhc2VbYmlkXSkKIAkJCWNvbnRpbnVlOwogCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEdGUF9LRVJORUwsIG9yZGVyKTsKIAkJaWYgKCFwYWdlKQpAQCAtMzA4LDExICszMTMsMTEgQEAKIAkJZHNyYnl0ZXMgPSAwOwogCQljYnJzID0gMDsKIAkJZm9yIChncnUgPSBncnVfYmFzZVtiaWRdLT5ic19ncnVzLCBjaGlwID0gMDsKLQkJICAgICAJCWNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOworCQkJCWNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOwogCQkJCWNoaXArKywgZ3J1KyspIHsKIAkJCXBhZGRyID0gZ3J1X2NoaXBsZXRfcGFkZHIoZ3J1X2Jhc2VfcGFkZHIsIHBub2RlLCBjaGlwKTsKIAkJCXZhZGRyID0gZ3J1X2NoaXBsZXRfdmFkZHIoZ3J1X2Jhc2VfdmFkZHIsIHBub2RlLCBjaGlwKTsKLQkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIGJpZCwgbmlkLCBjaGlwKTsKKwkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIG5pZCwgYmlkLCBjaGlwKTsKIAkJCW4gPSBod2VpZ2h0NjQoZ3J1LT5nc19jYnJfbWFwKSAqIEdSVV9DQlJfQVVfU0laRTsKIAkJCWNicnMgPSBtYXgoY2Jycywgbik7CiAJCQluID0gaHdlaWdodDY0KGdydS0+Z3NfZHNyX21hcCkgKiBHUlVfRFNSX0FVX0JZVEVTOwpAQCAtMzcwLDI2ICszNzUsMjYgQEAKIAl2b2lkICpncnVfc3RhcnRfdmFkZHI7CiAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKICNpZiBkZWZpbmVkIENPTkZJR19JQTY0CiAJZ3J1X3N0YXJ0X3BhZGRyID0gMHhkMDAwMDAwMDAwVUw7IC8qIFpaWlpaWlpaWlpaWlpaWlpaWlogZml4bWUgKi8KICNlbHNlCiAJZ3J1X3N0YXJ0X3BhZGRyID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SKSAmCiAJCQkJMHg3ZmZmZmZmZmZmZmZVTDsKLQogI2VuZGlmCiAJZ3J1X3N0YXJ0X3ZhZGRyID0gX192YShncnVfc3RhcnRfcGFkZHIpOwotCWdydV9lbmRfcGFkZHIgPSBncnVfc3RhcnRfcGFkZHIgKyBNQVhfTlVNTk9ERVMgKiBHUlVfU0laRTsKKwlncnVfZW5kX3BhZGRyID0gZ3J1X3N0YXJ0X3BhZGRyICsgR1JVX01BWF9CTEFERVMgKiBHUlVfU0laRTsKIAlwcmludGsoS0VSTl9JTkZPICJHUlUgc3BhY2U6IDB4JWx4IC0gMHglbHhcbiIsCiAJICAgICAgIGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcik7CiAJaXJxID0gZ2V0X2Jhc2VfaXJxKCk7CiAJZm9yIChjaGlwID0gMDsgY2hpcCA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGNoaXArKykgewogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEgKyBjaGlwLCBncnVfaW50ciwgMCwgaWQsIE5VTEwpOwotCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZXMgYmVjYXVzZQorCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZSBiZWNhdXNlCiAJCSAqIGludGVycnVwdHMgYXJlIG5vdCByZXF1aXJlZCAmIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkICovCiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiISEhV0FSTklORzogR1JVIGlnbm9yaW5nIHJlcXVlc3QgZmFpbHVyZSEhIVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOwogCQkJcmV0ID0gMDsKIAkJfQogCQlpZiAocmV0KSB7CkBAIC00MzUsNyArNDQwLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGdydV9leGl0KHZvaWQpCiB7Ci0JaW50IGksIGJpZDsKKwlpbnQgaSwgYmlkLCBnaWQ7CiAJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgZ3J1X3N0YXRlKSAqCiAJCQkgICAgICBHUlVfQ0hJUExFVFNfUEVSX0JMQURFKTsKIApAQCAtNDQ1LDYgKzQ1MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGkrKykKIAkJZnJlZV9pcnEoSVJRX0dSVSArIGksIE5VTEwpOwogCisJZm9yZWFjaF9naWQoZ2lkKQorCQlncnVfa3NlcnZpY2VzX2V4aXQoR0lEX1RPX0dSVShnaWQpKTsKKwogCWZvciAoYmlkID0gMDsgYmlkIDwgR1JVX01BWF9CTEFERVM7IGJpZCsrKQogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWdydV9iYXNlW2JpZF0sIG9yZGVyKTsKIApAQCAtNDY5LDcgKzQ3NywxMSBAQAogCS5mYXVsdAkJPSBncnVfZmF1bHQsCiB9OwogCisjaWZuZGVmIE1PRFVMRQogZnNfaW5pdGNhbGwoZ3J1X2luaXQpOworI2Vsc2UKK21vZHVsZV9pbml0KGdydV9pbml0KTsKKyNlbmRpZgogbW9kdWxlX2V4aXQoZ3J1X2V4aXQpOwogCiBtb2R1bGVfcGFyYW0oZ3J1X29wdGlvbnMsIHVsb25nLCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdjY2IzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogICAgICAgICAgICAgIEdSVSBLRVJORUwgTUNTIElOU1RSVUNUSU9OUworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJncnUuaCIKKyNpbmNsdWRlICJncnVsaWIuaCIKKyNpbmNsdWRlICJncnV0YWJsZXMuaCIKKworLyogMTAgc2VjICovCisjaWZkZWYgQ09ORklHX0lBNjQKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjZGVmaW5lIEdSVV9PUEVSQVRJT05fVElNRU9VVAkoKChjeWNsZXNfdCkgbG9jYWxfY3B1X2RhdGEtPml0Y19mcmVxKSoxMCkKKyNlbHNlCisjaW5jbHVkZSA8YXNtL3RzYy5oPgorI2RlZmluZSBHUlVfT1BFUkFUSU9OX1RJTUVPVVQJKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAwKQorI2VuZGlmCisKKy8qIEV4dHJhY3QgdGhlIHN0YXR1cyBmaWVsZCBmcm9tIGEga2VybmVsIGhhbmRsZSAqLworI2RlZmluZSBHRVRfTVNFR19IQU5ETEVfU1RBVFVTKGgpCSgoKCoodW5zaWduZWQgbG9uZyAqKShoKSkgPj4gMTYpICYgMykKKworc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgbWNzX29wX3N0YXRpc3RpY3NbbWNzb3BfbGFzdF07CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9tY3Nfc3RhdHMoZW51bSBtY3Nfb3Agb3AsIHVuc2lnbmVkIGxvbmcgY2xrcykKK3sKKwlhdG9taWNfbG9uZ19pbmMoJm1jc19vcF9zdGF0aXN0aWNzW29wXS5jb3VudCk7CisJYXRvbWljX2xvbmdfYWRkKGNsa3MsICZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0udG90YWwpOworCWlmIChtY3Nfb3Bfc3RhdGlzdGljc1tvcF0ubWF4IDwgY2xrcykKKwkJbWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heCA9IGNsa3M7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2luc3RydWN0aW9uKHZvaWQgKmgpCit7CisJdW5zaWduZWQgbG9uZyAqdzAgPSBoOworCisJd21iKCk7CQkvKiBzZXR0aW5nIENNRCBiaXQgbXVzdCBiZSBsYXN0ICovCisJKncwID0gKncwIHwgMTsKKwlncnVfZmx1c2hfY2FjaGUoaCk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh2b2lkICpoLCBlbnVtIG1jc19vcCBvcGMpCit7CisJaW50IHN0YXR1czsKKwljeWNsZXNfdCBzdGFydF90aW1lID0gZ2V0X2N5Y2xlcygpOworCisJd2hpbGUgKDEpIHsKKwkJY3B1X3JlbGF4KCk7CisJCXN0YXR1cyA9IEdFVF9NU0VHX0hBTkRMRV9TVEFUVVMoaCk7CisJCWlmIChzdGF0dXMgIT0gQ0NIU1RBVFVTX0FDVElWRSkKKwkJCWJyZWFrOworCQlpZiAoR1JVX09QRVJBVElPTl9USU1FT1VUIDwgKGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpKQorCQkJcGFuaWMoIkdSVSAlcCBpcyBtYWxmdW5jdGlvbmluZ1xuIiwgaCk7CisJfQorCWlmIChncnVfb3B0aW9ucyAmIE9QVF9TVEFUUykKKwkJdXBkYXRlX21jc19zdGF0cyhvcGMsIGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBjY2hfYWxsb2NhdGUoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gsCisJCWludCBhc2lkdmFsLCBpbnQgc2l6ZWF2YWlsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwKKwkJdW5zaWduZWQgbG9uZyBkc3JtYXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWNjaC0+YXNpZFtpXSA9IChhc2lkdmFsKyspOworCQljY2gtPnNpemVhdmFpbFtpXSA9IHNpemVhdmFpbDsKKwl9CisJY2NoLT5kc3JfYWxsb2NhdGlvbl9tYXAgPSBkc3JtYXA7CisJY2NoLT5jYnJfYWxsb2NhdGlvbl9tYXAgPSBjYnJtYXA7CisJY2NoLT5vcGMgPSBDQ0hPUF9BTExPQ0FURTsKKwlzdGFydF9pbnN0cnVjdGlvbihjY2gpOworCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCwgY2Nob3BfYWxsb2NhdGUpOworfQorCitpbnQgY2NoX3N0YXJ0KHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQoreworCWNjaC0+b3BjID0gQ0NIT1BfU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX3N0YXJ0KTsKK30KKworaW50IGNjaF9pbnRlcnJ1cHQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCit7CisJY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2ludGVycnVwdCk7Cit9CisKK2ludCBjY2hfZGVhbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKK3sKKwljY2gtPm9wYyA9IENDSE9QX0RFQUxMT0NBVEU7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2RlYWxsb2NhdGUpOworfQorCitpbnQgY2NoX2ludGVycnVwdF9zeW5jKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZQorCQkJCSAgICAgKmNjaCkKK3sKKwljY2gtPm9wYyA9IENDSE9QX0lOVEVSUlVQVF9TWU5DOworCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9pbnRlcnJ1cHRfc3luYyk7Cit9CisKK2ludCB0Z2hfaW52YWxpZGF0ZShzdHJ1Y3QgZ3J1X3RsYl9nbG9iYWxfaGFuZGxlICp0Z2gsCisJCQkJIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHJtYXNrLAorCQkJCSBpbnQgYXNpZCwgaW50IHBhZ2VzaXplLCBpbnQgZ2xvYmFsLCBpbnQgbiwKKwkJCQkgdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKQoreworCXRnaC0+dmFkZHIgPSB2YWRkcjsKKwl0Z2gtPmFzaWQgPSBhc2lkOworCXRnaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0Z2gtPm4gPSBuOworCXRnaC0+Z2xvYmFsID0gZ2xvYmFsOworCXRnaC0+dmFkZHJtYXNrID0gdmFkZHJtYXNrOworCXRnaC0+Y3R4Yml0bWFwID0gY3R4Yml0bWFwOworCXRnaC0+b3BjID0gVEdIT1BfVExCSU5WOworCXN0YXJ0X2luc3RydWN0aW9uKHRnaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUodGdoLCB0Z2hvcF9pbnZhbGlkYXRlKTsKK30KKwordm9pZCB0Zmhfd3JpdGVfb25seShzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCSAgaW50IGFzaWQsIGludCBkaXJ0eSwgaW50IHBhZ2VzaXplKQoreworCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOworCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7CisJdGZoLT5wZm4gPSBwZm47CisJdGZoLT5kaXJ0eSA9IGRpcnR5OworCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX09OTFk7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBnYWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LAorCQkJCSAgICAgaW50IHBhZ2VzaXplKQoreworCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOworCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7CisJdGZoLT5wZm4gPSBwYWRkciA+PiBHUlVfUEFERFJfU0hJRlQ7CisJdGZoLT5nYWEgPSBnYWE7CisJdGZoLT5kaXJ0eSA9IGRpcnR5OworCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX1JFU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0ZmhfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCkKK3sKKwl0ZmgtPm9wYyA9IFRGSE9QX1JFU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0ZmhfdXNlcl9wb2xsaW5nX21vZGUoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCit7CisJdGZoLT5vcGMgPSBURkhPUF9VU0VSX1BPTExJTkdfTU9ERTsKKwlzdGFydF9pbnN0cnVjdGlvbih0ZmgpOworfQorCit2b2lkIHRmaF9leGNlcHRpb24oc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCit7CisJdGZoLT5vcGMgPSBURkhPUF9FWENFUFRJT047CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCmluZGV4IGI2MzAxOGQuLjFlZDc0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKQEAgLTQ4OSwxNzAgKzQ4OSwyOCBAQAogICogCSA2NG0JCQkyNgk4CiAgKiAJLi4uCiAgKi8KLSNkZWZpbmUgR1JVX1BBR0VTSVpFKHNoKQkoKCgoc2gpID4gMjAgPyAoc2gpICsgMjogKHNoKSkgPj4gMSkgLSA2KQorI2RlZmluZSBHUlVfUEFHRVNJWkUoc2gpCSgoKChzaCkgPiAyMCA/IChzaCkgKyAyIDogKHNoKSkgPj4gMSkgLSA2KQogI2RlZmluZSBHUlVfU0laRUFWQUlMKHNoKQkoMVVMIDw8IEdSVV9QQUdFU0laRShzaCkpCiAKIC8qIG1pbmltdW0gVExCIHB1cmdlIGNvdW50IHRvIGVuc3VyZSBhIGZ1bGwgcHVyZ2UgKi8KICNkZWZpbmUgR1JVTUFYSU5WQUwJCTEwMjRVTAogCitpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLAorICAgICAgIGludCBhc2lkdmFsLCBpbnQgc2l6ZWF2YWlsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwgdW5zaWduZWQgbG9uZyBkc3JtYXApOwogCi0vKiBFeHRyYWN0IHRoZSBzdGF0dXMgZmllbGQgZnJvbSBhIGtlcm5lbCBoYW5kbGUgKi8KLSNkZWZpbmUgR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKQkoKCgqKHVuc2lnbmVkIGxvbmcgKikoaCkpID4+IDE2KSAmIDMpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pbnN0cnVjdGlvbih2b2lkICpoKQotewotCXVuc2lnbmVkIGxvbmcgKncwID0gaDsKLQotCXdtYigpOwkJLyogc2V0dGluZyBDTUQgYml0IG11c3QgYmUgbGFzdCAqLwotCSp3MCA9ICp3MCB8IDE7Ci0JZ3J1X2ZsdXNoX2NhY2hlKGgpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKHZvaWQgKmgpCi17Ci0JaW50IHN0YXR1czsKLQotCWRvIHsKLQkJY3B1X3JlbGF4KCk7Ci0JCWJhcnJpZXIoKTsKLQkJc3RhdHVzID0gR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKTsKLQl9IHdoaWxlIChzdGF0dXMgPT0gQ0NIU1RBVFVTX0FDVElWRSk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2hfYWxsb2NhdGVfc2V0X2FzaWRzKAotCQkgIHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLCBpbnQgYXNpZHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gUkdOX0hQQUdFOyBpKyspIHsgIC8qICBhc3N1bWUgSFBBR0UgaXMgbGFzdCByZWdpb24gKi8KLQkJY2NoLT5hc2lkW2ldID0gKGFzaWR2YWwrKyk7Ci0jaWYgMAotCQkvKiBaWlogaHVnZXBhZ2VzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCi0JCWlmIChpID09IFJHTl9IUEFHRSkKLQkJCWNjaC0+c2l6ZWF2YWlsW2ldID0gR1JVX1NJWkVBVkFJTChocGFnZV9zaGlmdCk7Ci0JCWVsc2UKLSNlbmRpZgotCQkJY2NoLT5zaXplYXZhaWxbaV0gPSBHUlVfU0laRUFWQUlMKFBBR0VfU0hJRlQpOwotCX0KLX0KLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSB2b2lkIGNjaF9hbGxvY2F0ZV9zZXRfYXNpZHMoCi0JCSAgc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gsIGludCBhc2lkdmFsKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQljY2gtPmFzaWRbaV0gPSBhc2lkdmFsKys7Ci0JCWNjaC0+c2l6ZWF2YWlsW2ldID0gR1JVX1NJWkVBVkFJTChQQUdFX1NISUZUKSB8Ci0JCQlHUlVfU0laRUFWQUlMKDIxKTsKLQl9Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLAotCQkJICAgICAgIGludCBhc2lkdmFsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRzcm1hcCkKLXsKLQljY2hfYWxsb2NhdGVfc2V0X2FzaWRzKGNjaCwgYXNpZHZhbCk7Ci0JY2NoLT5kc3JfYWxsb2NhdGlvbl9tYXAgPSBkc3JtYXA7Ci0JY2NoLT5jYnJfYWxsb2NhdGlvbl9tYXAgPSBjYnJtYXA7Ci0JY2NoLT5vcGMgPSBDQ0hPUF9BTExPQ0FURTsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9zdGFydChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKLXsKLQljY2gtPm9wYyA9IENDSE9QX1NUQVJUOwotCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7Ci0JcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2NoX2ludGVycnVwdChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKLXsKLQljY2gtPm9wYyA9IENDSE9QX0lOVEVSUlVQVDsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9kZWFsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQotewotCWNjaC0+b3BjID0gQ0NIT1BfREVBTExPQ0FURTsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9pbnRlcnJ1cHRfc3luYyhzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUKLQkJCQkgICAgICpjY2gpCi17Ci0JY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFRfU1lOQzsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRnaF9pbnZhbGlkYXRlKHN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaCwKLQkJCQkgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcm1hc2ssCi0JCQkJIGludCBhc2lkLCBpbnQgcGFnZXNpemUsIGludCBnbG9iYWwsIGludCBuLAotCQkJCSB1bnNpZ25lZCBzaG9ydCBjdHhiaXRtYXApCi17Ci0JdGdoLT52YWRkciA9IHZhZGRyOwotCXRnaC0+YXNpZCA9IGFzaWQ7Ci0JdGdoLT5wYWdlc2l6ZSA9IHBhZ2VzaXplOwotCXRnaC0+biA9IG47Ci0JdGdoLT5nbG9iYWwgPSBnbG9iYWw7Ci0JdGdoLT52YWRkcm1hc2sgPSB2YWRkcm1hc2s7Ci0JdGdoLT5jdHhiaXRtYXAgPSBjdHhiaXRtYXA7Ci0JdGdoLT5vcGMgPSBUR0hPUF9UTEJJTlY7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGdoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh0Z2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCi0JCQkJICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSkKLXsKLQl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKLQl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOwotCXRmaC0+cGZuID0gcGZuOwotCXRmaC0+ZGlydHkgPSBkaXJ0eTsKLQl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7Ci0JdGZoLT5vcGMgPSBURkhPUF9XUklURV9PTkxZOwotCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBnYWEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LAotCQkJCSAgICAgaW50IHBhZ2VzaXplKQotewotCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOwotCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7Ci0JdGZoLT5wZm4gPSBwYWRkciA+PiBHUlVfUEFERFJfU0hJRlQ7Ci0JdGZoLT5nYWEgPSBnYWE7Ci0JdGZoLT5kaXJ0eSA9IGRpcnR5OwotCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKLQl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX1JFU1RBUlQ7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQotewotCXRmaC0+b3BjID0gVEZIT1BfUkVTVEFSVDsKLQlzdGFydF9pbnN0cnVjdGlvbih0ZmgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZoX3VzZXJfcG9sbGluZ19tb2RlKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQotewotCXRmaC0+b3BjID0gVEZIT1BfVVNFUl9QT0xMSU5HX01PREU7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF9leGNlcHRpb24oc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCi17Ci0JdGZoLT5vcGMgPSBURkhPUF9FWENFUFRJT047Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KK2ludCBjY2hfc3RhcnQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IGNjaF9pbnRlcnJ1cHQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IGNjaF9kZWFsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKTsKK2ludCBjY2hfaW50ZXJydXB0X3N5bmMoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IHRnaF9pbnZhbGlkYXRlKHN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaCwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwl1bnNpZ25lZCBsb25nIHZhZGRybWFzaywgaW50IGFzaWQsIGludCBwYWdlc2l6ZSwgaW50IGdsb2JhbCwgaW50IG4sCisJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKTsKK3ZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsIHVuc2lnbmVkIGxvbmcgcGZuLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSk7Cit2b2lkIHRmaF93cml0ZV9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLCB1bnNpZ25lZCBsb25nIHBhZGRyLAorCWludCBnYWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSk7Cit2b2lkIHRmaF9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKTsKK3ZvaWQgdGZoX3VzZXJfcG9sbGluZ19tb2RlKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKTsKK3ZvaWQgdGZoX2V4Y2VwdGlvbihzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCk7CiAKICNlbmRpZiAvKiBfX0dSVUhBTkRMRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCmluZGV4IDg4MGM1NWQuLmQ4YmQ3ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCkBAIC01Miw4ICs1MiwxMCBAQAogICovCiAKIC8qIEJsYWRlIHBlcmNwdSByZXNvdXJjZXMgUEVSTUFORU5UTFkgcmVzZXJ2ZWQgZm9yIGtlcm5lbCB1c2UgKi8KLSNkZWZpbmUgR1JVX05VTV9LRVJORUxfQ0JSICAgICAgMQorI2RlZmluZSBHUlVfTlVNX0tFUk5FTF9DQlIJMQogI2RlZmluZSBHUlVfTlVNX0tFUk5FTF9EU1JfQllURVMgMjU2CisjZGVmaW5lIEdSVV9OVU1fS0VSTkVMX0RTUl9DTAkoR1JVX05VTV9LRVJORUxfRFNSX0JZVEVTIC8JCVwKKwkJCQkJR1JVX0NBQ0hFX0xJTkVfQllURVMpCiAjZGVmaW5lIEtFUk5FTF9DVFhOVU0gICAgICAgICAgIDE1CiAKIC8qIEdSVSBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzIGZvciBhbGwgaW5zdHJ1Y3Rpb25zICovCkBAIC05NCw3ICs5Niw2IEBACiAJY2hhcglmaWxsOwogfTsKIAotI2RlZmluZSBRTElORVMobXEpCSgobXEpICsgb2Zmc2V0b2Yoc3RydWN0IG1lc3NhZ2VfcXVldWUsIHFsaW5lcykpCiAjZGVmaW5lIEhTVEFUVVMobXEsIGgpCSgobXEpICsgb2Zmc2V0b2Yoc3RydWN0IG1lc3NhZ2VfcXVldWUsIGhzdGF0dXNbaF0pKQogCiBzdGF0aWMgaW50IGdydV9nZXRfY3B1X3Jlc291cmNlcyhpbnQgZHNyX2J5dGVzLCB2b2lkICoqY2IsIHZvaWQgKipkc3IpCkBAIC0xMjIsNyArMTIzLDcgQEAKIAlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfZXh0ZW5kZWQgKmNiZTsKIAogCWNiZSA9IGdldF9jYmUoR1JVQkFTRShjYiksIGdldF9jYl9udW1iZXIoY2IpKTsKLQlwcmVmZXRjaHcoY2JlKTsgICAgICAgICAvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCisJcHJlZmV0Y2h3KGNiZSk7CS8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAlleGNkZXQtPm9wYyA9IGNiZS0+b3BjY3B5OwogCWV4Y2RldC0+ZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCWV4Y2RldC0+ZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC0yNTAsNyArMjUxLDggQEAKICAqIENyZWF0ZSBhIG1lc3NhZ2UgcXVldWUuCiAgKiAJcWxpbmVzIC0gbWVzc2FnZSBxdWV1ZSBzaXplIGluIGNhY2hlIGxpbmVzLiBJbmNsdWRlcyAyLWxpbmUgaGVhZGVyLgogICovCi1pbnQgZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKHZvaWQgKnAsIHVuc2lnbmVkIGludCBieXRlcykKK2ludCBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJdm9pZCAqcCwgdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgbmFzaWQsIGludCB2ZWN0b3IsIGludCBhcGljaWQpCiB7CiAJc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gcDsKIAl1bnNpZ25lZCBpbnQgcWxpbmVzOwpAQCAtMjY1LDYgKzI2NywxMiBAQAogCW1xLT5oc3RhdHVzWzBdID0gMDsKIAltcS0+aHN0YXR1c1sxXSA9IDE7CiAJbXEtPmhlYWQgPSBncnVfbWVzcV9oZWFkKDIsIHFsaW5lcyAvIDIgKyAxKTsKKwltcWQtPm1xID0gbXE7CisJbXFkLT5tcV9ncGEgPSB1dl9ncGEobXEpOworCW1xZC0+cWxpbmVzID0gcWxpbmVzOworCW1xZC0+aW50ZXJydXB0X3Bub2RlID0gVVZfTkFTSURfVE9fUE5PREUobmFzaWQpOworCW1xZC0+aW50ZXJydXB0X3ZlY3RvciA9IHZlY3RvcjsKKwltcWQtPmludGVycnVwdF9hcGljaWQgPSBhcGljaWQ7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUpOwpAQCAtMjc3LDggKzI4NSw4IEBACiAgKgkJLTEgLSBpZiBtZXNxIHNlbnQgc3VjY2Vzc2Z1bGx5IGJ1dCBxdWV1ZSBub3QgZnVsbAogICoJCT4wIC0gdW5leHBlY3RlZCBlcnJvci4gTVFFX3h4eCByZXR1cm5lZAogICovCi1zdGF0aWMgaW50IHNlbmRfbm9vcF9tZXNzYWdlKHZvaWQgKmNiLAotCQkJCXVuc2lnbmVkIGxvbmcgbXEsIHZvaWQgKm1lc2cpCitzdGF0aWMgaW50IHNlbmRfbm9vcF9tZXNzYWdlKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2cpCiB7CiAJY29uc3Qgc3RydWN0IG1lc3NhZ2VfaGVhZGVyIG5vb3BfaGVhZGVyID0gewogCQkJCQkucHJlc2VudCA9IE1RU19OT09QLCAubGluZXMgPSAxfTsKQEAgLTI4OSw3ICsyOTcsNyBAQAogCVNUQVQobWVzcV9ub29wKTsKIAlzYXZlX21oZHIgPSAqbWhkcjsKIAkqbWhkciA9IG5vb3BfaGVhZGVyOwotCWdydV9tZXNxKGNiLCBtcSwgZ3J1X2dldF90cmkobWhkciksIDEsIElNQSk7CisJZ3J1X21lc3EoY2IsIG1xZC0+bXFfZ3BhLCBncnVfZ2V0X3RyaShtaGRyKSwgMSwgSU1BKTsKIAlyZXQgPSBncnVfd2FpdChjYik7CiAKIAlpZiAocmV0KSB7CkBAIC0zMTMsNyArMzIxLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIENCU1NfUFVUX05BQ0tFRDoKIAkJCVNUQVQobWVzcV9ub29wX3B1dF9uYWNrZWQpOwotCQkJbSA9IG1xICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOworCQkJbSA9IG1xZC0+bXFfZ3BhICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOwogCQkJZ3J1X3ZzdG9yZShjYiwgbSwgZ3J1X2dldF90cmkobWVzZyksIFhUWVBFX0NMLCAxLCAxLAogCQkJCQkJSU1BKTsKIAkJCWlmIChncnVfd2FpdChjYikgPT0gQ0JTX0lETEUpCkBAIC0zMzMsMzAgKzM0MSwyMCBAQAogLyoKICAqIEhhbmRsZSBhIGdydV9tZXNxIGZ1bGwuCiAgKi8KLXN0YXRpYyBpbnQgc2VuZF9tZXNzYWdlX3F1ZXVlX2Z1bGwodm9pZCAqY2IsCi0JCQkgICB1bnNpZ25lZCBsb25nIG1xLCB2b2lkICptZXNnLCBpbnQgbGluZXMpCitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2csIGludCBsaW5lcykKIHsKIAl1bmlvbiBncnVfbWVzcWhlYWQgbXFoOwogCXVuc2lnbmVkIGludCBsaW1pdCwgaGVhZDsKIAl1bnNpZ25lZCBsb25nIGF2YWx1ZTsKLQlpbnQgaGFsZiwgcWxpbmVzLCBzYXZlOworCWludCBoYWxmLCBxbGluZXM7CiAKIAkvKiBEZXRlcm1pbmUgaWYgc3dpdGNoaW5nIHRvIGZpcnN0L3NlY29uZCBoYWxmIG9mIHEgKi8KIAlhdmFsdWUgPSBncnVfZ2V0X2Ftb192YWx1ZShjYik7CiAJaGVhZCA9IGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpOwogCWxpbWl0ID0gZ3J1X2dldF9hbW9fdmFsdWVfbGltaXQoY2IpOwogCi0JLyoKLQkgKiBGZXRjaCAicWxpbmVzIiBmcm9tIHRoZSBxdWV1ZSBoZWFkZXIuIFNpbmNlIHRoZSBxdWV1ZSBtYXkgYmUKLQkgKiBpbiBtZW1vcnkgdGhhdCBjYW4ndCBiZSBhY2Nlc3NlZCB1c2luZyBzb2NrZXQgYWRkcmVzc2VzLCB1c2UKLQkgKiB0aGUgR1JVIHRvIGFjY2VzcyB0aGUgZGF0YS4gVXNlIERTUiBzcGFjZSBmcm9tIHRoZSBtZXNzYWdlLgotCSAqLwotCXNhdmUgPSAqKGludCAqKW1lc2c7Ci0JZ3J1X3Zsb2FkKGNiLCBRTElORVMobXEpLCBncnVfZ2V0X3RyaShtZXNnKSwgWFRZUEVfVywgMSwgMSwgSU1BKTsKLQlpZiAoZ3J1X3dhaXQoY2IpICE9IENCU19JRExFKQotCQlnb3RvIGNiZXJyOwotCXFsaW5lcyA9ICooaW50ICopbWVzZzsKLQkqKGludCAqKW1lc2cgPSBzYXZlOworCXFsaW5lcyA9IG1xZC0+cWxpbmVzOwogCWhhbGYgPSAobGltaXQgIT0gcWxpbmVzKTsKIAogCWlmIChoYWxmKQpAQCAtMzY1LDcgKzM2Myw3IEBACiAJCW1xaCA9IGdydV9tZXNxX2hlYWQoMiwgcWxpbmVzIC8gMiArIDEpOwogCiAJLyogVHJ5IHRvIGdldCBsb2NrIGZvciBzd2l0Y2hpbmcgaGVhZCBwb2ludGVyICovCi0JZ3J1X2dhbWlyKGNiLCBFT1BfSVJfQ0xSLCBIU1RBVFVTKG1xLCBoYWxmKSwgWFRZUEVfRFcsIElNQSk7CisJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfQ0xSLCBIU1RBVFVTKG1xZC0+bXFfZ3BhLCBoYWxmKSwgWFRZUEVfRFcsIElNQSk7CiAJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJZ290byBjYmVycjsKIAlpZiAoIWdydV9nZXRfYW1vX3ZhbHVlKGNiKSkgewpAQCAtMzc1LDggKzM3Myw4IEBACiAKIAkvKiBHb3QgdGhlIGxvY2suIFNlbmQgb3B0aW9uYWwgTk9QIGlmIHF1ZXVlIG5vdCBmdWxsLCAqLwogCWlmIChoZWFkICE9IGxpbWl0KSB7Ci0JCWlmIChzZW5kX25vb3BfbWVzc2FnZShjYiwgbXEsIG1lc2cpKSB7Ci0JCQlncnVfZ2FtaXIoY2IsIEVPUF9JUl9JTkMsIEhTVEFUVVMobXEsIGhhbGYpLAorCQlpZiAoc2VuZF9ub29wX21lc3NhZ2UoY2IsIG1xZCwgbWVzZykpIHsKKwkJCWdydV9nYW1pcihjYiwgRU9QX0lSX0lOQywgSFNUQVRVUyhtcWQtPm1xX2dwYSwgaGFsZiksCiAJCQkJCVhUWVBFX0RXLCBJTUEpOwogCQkJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJCQlnb3RvIGNiZXJyOwpAQCAtMzg3LDE0ICszODUsMTYgQEAKIAl9CiAKIAkvKiBUaGVuIGZsaXAgcXVldWVoZWFkIHRvIG90aGVyIGhhbGYgb2YgcXVldWUuICovCi0JZ3J1X2dhbWVyKGNiLCBFT1BfRVJSX0NTV0FQLCBtcSwgWFRZUEVfRFcsIG1xaC52YWwsIGF2YWx1ZSwgSU1BKTsKKwlncnVfZ2FtZXIoY2IsIEVPUF9FUlJfQ1NXQVAsIG1xZC0+bXFfZ3BhLCBYVFlQRV9EVywgbXFoLnZhbCwgYXZhbHVlLAorCQkJCQkJCUlNQSk7CiAJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJZ290byBjYmVycjsKIAogCS8qIElmIG5vdCBzdWNjZXNzZnVsbHkgaW4gc3dhcHBpbmcgcXVldWUgaGVhZCwgY2xlYXIgdGhlIGhzdGF0dXMgbG9jayAqLwogCWlmIChncnVfZ2V0X2Ftb192YWx1ZShjYikgIT0gYXZhbHVlKSB7CiAJCVNUQVQobWVzcV9xZl9zd2l0Y2hfaGVhZF9mYWlsZWQpOwotCQlncnVfZ2FtaXIoY2IsIEVPUF9JUl9JTkMsIEhTVEFUVVMobXEsIGhhbGYpLCBYVFlQRV9EVywgSU1BKTsKKwkJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfSU5DLCBIU1RBVFVTKG1xZC0+bXFfZ3BhLCBoYWxmKSwgWFRZUEVfRFcsCisJCQkJCQkJSU1BKTsKIAkJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJCWdvdG8gY2JlcnI7CiAJfQpAQCAtNDA0LDE1ICs0MDQsMjUgQEAKIAlyZXR1cm4gTVFFX1VORVhQRUNURURfQ0JfRVJSOwogfQogCisvKgorICogU2VuZCBhIGNyb3NzLXBhcnRpdGlvbiBpbnRlcnJ1cHQgdG8gdGhlIFNTSSB0aGF0IGNvbnRhaW5zIHRoZSB0YXJnZXQKKyAqIG1lc3NhZ2UgcXVldWUuIE5vcm1hbGx5LCB0aGUgaW50ZXJydXB0IGlzIGF1dG9tYXRpY2FsbHkgZGVsaXZlcmVkIGJ5IGhhcmR3YXJlCisgKiBidXQgc29tZSBlcnJvciBjb25kaXRpb25zIHJlcXVpcmUgZXhwbGljaXQgZGVsaXZlcnkuCisgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbWVzc2FnZV9xdWV1ZV9pbnRlcnJ1cHQoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCkKK3sKKwlpZiAobXFkLT5pbnRlcnJ1cHRfdmVjdG9yKQorCQl1dl9odWJfc2VuZF9pcGkobXFkLT5pbnRlcnJ1cHRfcG5vZGUsIG1xZC0+aW50ZXJydXB0X2FwaWNpZCwKKwkJCQltcWQtPmludGVycnVwdF92ZWN0b3IpOworfQorCiAKIC8qCiAgKiBIYW5kbGUgYSBncnVfbWVzcSBmYWlsdXJlLiBTb21lIG9mIHRoZXNlIGZhaWx1cmVzIGFyZSBzb2Z0d2FyZSByZWNvdmVyYWJsZQogICogb3IgcmV0cnlhYmxlLgogICovCi1zdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9mYWlsdXJlKHZvaWQgKmNiLAotCQkJCXVuc2lnbmVkIGxvbmcgbXEsCi0JCQkJdm9pZCAqbWVzZywKLQkJCQlpbnQgbGluZXMpCitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9mYWlsdXJlKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2csIGludCBsaW5lcykKIHsKIAlpbnQgc3Vic3RhdHVzLCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbTsKQEAgLTQyOSw3ICs0MzksNyBAQAogCQlicmVhazsKIAljYXNlIENCU1NfUUxJTUlUX1JFQUNIRUQ6CiAJCVNUQVQobWVzcV9zZW5kX3FsaW1pdF9yZWFjaGVkKTsKLQkJcmV0ID0gc2VuZF9tZXNzYWdlX3F1ZXVlX2Z1bGwoY2IsIG1xLCBtZXNnLCBsaW5lcyk7CisJCXJldCA9IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKGNiLCBtcWQsIG1lc2csIGxpbmVzKTsKIAkJYnJlYWs7CiAJY2FzZSBDQlNTX0FNT19OQUNLRUQ6CiAJCVNUQVQobWVzcV9zZW5kX2Ftb19uYWNrZWQpOwpAQCAtNDM3LDEyICs0NDcsMTQgQEAKIAkJYnJlYWs7CiAJY2FzZSBDQlNTX1BVVF9OQUNLRUQ6CiAJCVNUQVQobWVzcV9zZW5kX3B1dF9uYWNrZWQpOwotCQltID1tcSArIChncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKSA8PCA2KTsKKwkJbSA9IG1xZC0+bXFfZ3BhICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOwogCQlncnVfdnN0b3JlKGNiLCBtLCBncnVfZ2V0X3RyaShtZXNnKSwgWFRZUEVfQ0wsIGxpbmVzLCAxLCBJTUEpOwotCQlpZiAoZ3J1X3dhaXQoY2IpID09IENCU19JRExFKQorCQlpZiAoZ3J1X3dhaXQoY2IpID09IENCU19JRExFKSB7CiAJCQlyZXQgPSBNUUVfT0s7Ci0JCWVsc2UKKwkJCXNlbmRfbWVzc2FnZV9xdWV1ZV9pbnRlcnJ1cHQobXFkKTsKKwkJfSBlbHNlIHsKIAkJCXJldCA9IE1RRV9VTkVYUEVDVEVEX0NCX0VSUjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTQ1MiwxMiArNDY0LDEyIEBACiAKIC8qCiAgKiBTZW5kIGEgbWVzc2FnZSB0byBhIG1lc3NhZ2UgcXVldWUKLSAqIAljYglHUlUgY29udHJvbCBibG9jayB0byB1c2UgdG8gc2VuZCBtZXNzYWdlCi0gKiAJbXEJbWVzc2FnZSBxdWV1ZQorICogCW1xZAltZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKICAqIAltZXNnCW1lc3NhZ2UuIHVzdCBiZSB2YWRkciB3aXRoaW4gYSBHU0VHCiAgKiAJYnl0ZXMJbWVzc2FnZSBzaXplICg8PSAyIENMKQogICovCi1pbnQgZ3J1X3NlbmRfbWVzc2FnZV9ncGEodW5zaWduZWQgbG9uZyBtcSwgdm9pZCAqbWVzZywgdW5zaWduZWQgaW50IGJ5dGVzKQoraW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsIHZvaWQgKm1lc2csCisJCQkJdW5zaWduZWQgaW50IGJ5dGVzKQogewogCXN0cnVjdCBtZXNzYWdlX2hlYWRlciAqbWhkcjsKIAl2b2lkICpjYjsKQEAgLTQ4MSwxMCArNDkzLDEwIEBACiAKIAlkbyB7CiAJCXJldCA9IE1RRV9PSzsKLQkJZ3J1X21lc3EoY2IsIG1xLCBncnVfZ2V0X3RyaShtaGRyKSwgY2xpbmVzLCBJTUEpOworCQlncnVfbWVzcShjYiwgbXFkLT5tcV9ncGEsIGdydV9nZXRfdHJpKG1oZHIpLCBjbGluZXMsIElNQSk7CiAJCWlzdGF0dXMgPSBncnVfd2FpdChjYik7CiAJCWlmIChpc3RhdHVzICE9IENCU19JRExFKQotCQkJcmV0ID0gc2VuZF9tZXNzYWdlX2ZhaWx1cmUoY2IsIG1xLCBkc3IsIGNsaW5lcyk7CisJCQlyZXQgPSBzZW5kX21lc3NhZ2VfZmFpbHVyZShjYiwgbXFkLCBkc3IsIGNsaW5lcyk7CiAJfSB3aGlsZSAocmV0ID09IE1RSUVfQUdBSU4pOwogCWdydV9mcmVlX2NwdV9yZXNvdXJjZXMoY2IsIGRzcik7CiAKQEAgLTQ5Nyw5ICs1MDksOSBAQAogLyoKICAqIEFkdmFuY2UgdGhlIHJlY2VpdmUgcG9pbnRlciBmb3IgdGhlIHF1ZXVlIHRvIHRoZSBuZXh0IG1lc3NhZ2UuCiAgKi8KLXZvaWQgZ3J1X2ZyZWVfbWVzc2FnZSh2b2lkICpybXEsIHZvaWQgKm1lc2cpCit2b2lkIGdydV9mcmVlX21lc3NhZ2Uoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwgdm9pZCAqbWVzZykKIHsKLQlzdHJ1Y3QgbWVzc2FnZV9xdWV1ZSAqbXEgPSBybXE7CisJc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gbXFkLT5tcTsKIAlzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIgKm1oZHIgPSBtcS0+bmV4dDsKIAl2b2lkICpuZXh0LCAqcG5leHQ7CiAJaW50IGhhbGYgPSAtMTsKQEAgLTUyOSwxNiArNTQxLDE2IEBACiAgKiBwcmVzZW50LiBVc2VyIG11c3QgY2FsbCBuZXh0X21lc3NhZ2UoKSB0byBtb3ZlIHRvIG5leHQgbWVzc2FnZS4KICAqIAlybXEJbWVzc2FnZSBxdWV1ZQogICovCi12b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZSh2b2lkICpybXEpCit2b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkKQogewotCXN0cnVjdCBtZXNzYWdlX3F1ZXVlICptcSA9IHJtcTsKKwlzdHJ1Y3QgbWVzc2FnZV9xdWV1ZSAqbXEgPSBtcWQtPm1xOwogCXN0cnVjdCBtZXNzYWdlX2hlYWRlciAqbWhkciA9IG1xLT5uZXh0OwogCWludCBwcmVzZW50ID0gbWhkci0+cHJlc2VudDsKIAogCS8qIHNraXAgTk9PUCBtZXNzYWdlcyAqLwogCVNUQVQobWVzcV9yZWNlaXZlKTsKIAl3aGlsZSAocHJlc2VudCA9PSBNUVNfTk9PUCkgewotCQlncnVfZnJlZV9tZXNzYWdlKHJtcSwgbWhkcik7CisJCWdydV9mcmVlX21lc3NhZ2UobXFkLCBtaGRyKTsKIAkJbWhkciA9IG1xLT5uZXh0OwogCQlwcmVzZW50ID0gbWhkci0+cHJlc2VudDsKIAl9CkBAIC01NzYsNyArNTg4LDcgQEAKIAlpZiAoZ3J1X2dldF9jcHVfcmVzb3VyY2VzKEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUywgJmNiLCAmZHNyKSkKIAkJcmV0dXJuIE1RRV9CVUdfTk9fUkVTT1VSQ0VTOwogCWdydV9iY29weShjYiwgc3JjX2dwYSwgZGVzdF9ncGEsIGdydV9nZXRfdHJpKGRzciksCi0JCSAgWFRZUEVfQiwgYnl0ZXMsIEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUywgSU1BKTsKKwkJICBYVFlQRV9CLCBieXRlcywgR1JVX05VTV9LRVJORUxfRFNSX0NMLCBJTUEpOwogCXJldCA9IGdydV93YWl0KGNiKTsKIAlncnVfZnJlZV9jcHVfcmVzb3VyY2VzKGNiLCBkc3IpOwogCXJldHVybiByZXQ7CkBAIC02MTEsNyArNjIzLDcgQEAKIAogCWlmICh3b3JkMCAhPSB3b3JkMSB8fCB3b3JkMCAhPSBNQUdJQykgewogCQlwcmludGsKLQkJICAgICgiR1JVIHF1aWNrdGVzdCBlcnI6IGdydSAlZCwgZm91bmQgMHglbHgsIGV4cGVjdGVkIDB4JWx4XG4iLAorCQkgICAgKCJHUlUgcXVpY2t0ZXN0IGVycjogZ2lkICVkLCBmb3VuZCAweCVseCwgZXhwZWN0ZWQgMHglbHhcbiIsCiAJCSAgICAgZ3J1LT5nc19naWQsIHdvcmQxLCBNQUdJQyk7CiAJCUJVRygpOwkJLyogWlpaIHNob3VsZCBub3QgYmUgZmF0YWwgKi8KIAl9CkBAIC02NjAsMTUgKzY3MiwxNSBAQAogCWNjaC0+dGxiX2ludF9lbmFibGUgPSAwOwogCWNjaC0+dGZtX2RvbmVfYml0X2VuYWJsZSA9IDA7CiAJY2NoLT51bm1hcF9lbmFibGUgPSAxOwotCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIDAsIGNicl9tYXAsIGRzcl9tYXApOworCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIDAsIDAsIGNicl9tYXAsIGRzcl9tYXApOwogCWlmIChlcnIpIHsKIAkJZ3J1X2RiZyhncnVkZXYsCi0JCQkiVW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBDQ0g6IGdydSAlZCwgZXJyICVkXG4iLAorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgQ0NIOiBnaWQgJWQsIGVyciAlZFxuIiwKIAkJCWdydS0+Z3NfZ2lkLCBlcnIpOwogCQlCVUcoKTsKIAl9CiAJaWYgKGNjaF9zdGFydChjY2gpKSB7Ci0JCWdydV9kYmcoZ3J1ZGV2LCAiVW5hYmxlIHRvIHN0YXJ0IGtlcm5lbCBDQ0g6IGdydSAlZCwgZXJyICVkXG4iLAorCQlncnVfZGJnKGdydWRldiwgIlVuYWJsZSB0byBzdGFydCBrZXJuZWwgQ0NIOiBnaWQgJWQsIGVyciAlZFxuIiwKIAkJCWdydS0+Z3NfZ2lkLCBlcnIpOwogCQlCVUcoKTsKIAl9CkBAIC02NzgsMyArNjkwLDIyIEBACiAJCXF1aWNrdGVzdChncnUpOwogCXJldHVybiAwOwogfQorCit2b2lkIGdydV9rc2VydmljZXNfZXhpdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpCit7CisJc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2g7CisJc3RydWN0IGdydV9ibGFkZV9zdGF0ZSAqYnM7CisKKwlicyA9IGdydS0+Z3NfYmxhZGU7CisJaWYgKGdydSAhPSAmYnMtPmJzX2dydXNbMV0pCisJCXJldHVybjsKKworCWNjaCA9IGdldF9jY2goZ3J1LT5nc19ncnVfYmFzZV92YWRkciwgS0VSTkVMX0NUWE5VTSk7CisJbG9ja19jY2hfaGFuZGxlKGNjaCk7CisJaWYgKGNjaF9pbnRlcnJ1cHRfc3luYyhjY2gpKQorCQlCVUcoKTsKKwlpZiAoY2NoX2RlYWxsb2NhdGUoY2NoKSkKKwkJQlVHKCk7CisJdW5sb2NrX2NjaF9oYW5kbGUoY2NoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAppbmRleCBlYjE3ZTBhLi43NDdlZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaApAQCAtNDEsNiArNDEsMTUgQEAKICAqIAktIGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSgpIG5lZWRzIGludGVycnVwdCB2ZWN0b3IgaW5mbwogICovCiAKK3N0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjIHsKKwl2b2lkCQkqbXE7CQkJLyogbWVzc2FnZSBxdWV1ZSB2YWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJbXFfZ3BhOwkJCS8qIGdsb2JhbCBhZGRyZXNzIG9mIG1xICovCisJaW50CQlxbGluZXM7CQkJLyogcXVldWUgc2l6ZSBpbiBDTCAqLworCWludAkJaW50ZXJydXB0X3ZlY3RvcjsJLyogaW50ZXJydXB0IHZlY3RvciAqLworCWludAkJaW50ZXJydXB0X3Bub2RlOwkvKiBwbm9kZSBmb3IgaW50ZXJydXB0ICovCisJaW50CQlpbnRlcnJ1cHRfYXBpY2lkOwkvKiBsYXBpY2lkIGZvciBpbnRlcnJ1cHQgKi8KK307CisKIC8qCiAgKiBJbml0aWFsaXplIGEgdXNlciBhbGxvY2F0ZWQgY2h1bmsgb2YgbWVtb3J5IHRvIGJlIHVzZWQgYXMKICAqIGEgbWVzc2FnZSBxdWV1ZS4gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBxdWV1ZSBpcwpAQCAtNTEsMTQgKzYwLDE5IEBACiAgKiB0byBtYW5hZ2UgdGhlIHF1ZXVlLgogICoKICAqICBJbnB1dDoKLSAqIAlwCXBvaW50ZXIgdG8gdXNlciBhbGxvY2F0ZWQgbWVtb3J5LgorICogCW1xZAlwb2ludGVyIHRvIG1lc3NhZ2UgcXVldWUgZGVzY3JpcHRvcgorICogCXAJcG9pbnRlciB0byB1c2VyIGFsbG9jYXRlZCBtZXNxIG1lbW9yeS4KICAqIAlieXRlcwlzaXplIG9mIG1lc3NhZ2UgcXVldWUgaW4gYnl0ZXMKKyAqICAgICAgdmVjdG9yCWludGVycnVwdCB2ZWN0b3IgKHplcm8gaWYgbm8gaW50ZXJydXB0cykKKyAqICAgICAgbmFzaWQJbmFzaWQgb2YgYmxhZGUgd2hlcmUgaW50ZXJydXB0IGlzIGRlbGl2ZXJlZAorICogICAgICBhcGljaWQJYXBpY2lkIG9mIGNwdSBmb3IgaW50ZXJydXB0CiAgKgogICogIEVycm9yczoKICAqICAJMAlPSwogICogIAk+MAllcnJvcgogICovCi1leHRlcm4gaW50IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSh2b2lkICpwLCB1bnNpZ25lZCBpbnQgYnl0ZXMpOworZXh0ZXJuIGludCBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJdm9pZCAqcCwgdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgbmFzaWQsIGludCB2ZWN0b3IsIGludCBhcGljaWQpOwogCiAvKgogICogU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlLgpAQCAtNjgsNyArODIsNyBAQAogICoKICAqCiAgKiAgIElucHV0OgotICogCXhtcQltZXNzYWdlIHF1ZXVlIC0gbXVzdCBiZSBhIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzCisgKiAJbXFkCXBvaW50ZXIgdG8gbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yCiAgKiAJbWVzZwlwb2ludGVyIHRvIG1lc3NhZ2UuIE11c3QgYmUgNjQtYml0IGFsaWduZWQKICAqIAlieXRlcwlzaXplIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKICAqCkBAIC03Nyw4ICs5MSw4IEBACiAgKiAgICAgPjAJU2VuZCBmYWlsdXJlIC0gc2VlIGVycm9yIGNvZGVzIGJlbG93CiAgKgogICovCi1leHRlcm4gaW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHVuc2lnbmVkIGxvbmcgbXFfZ3BhLCB2b2lkICptZXNnLAotCQkJCQkJdW5zaWduZWQgaW50IGJ5dGVzKTsKK2V4dGVybiBpbnQgZ3J1X3NlbmRfbWVzc2FnZV9ncGEoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJCXZvaWQgKm1lc2csIHVuc2lnbmVkIGludCBieXRlcyk7CiAKIC8qIFN0YXR1cyB2YWx1ZXMgZm9yIGdydV9zZW5kX21lc3NhZ2UoKSAqLwogI2RlZmluZSBNUUVfT0sJCQkwCS8qIG1lc3NhZ2Ugc2VudCBzdWNjZXNzZnVsbHkgKi8KQEAgLTk0LDEwICsxMDgsMTEgQEAKICAqIEFQSSBleHRlbnNpb25zIG1heSBhbGxvdyBmb3Igb3V0LW9mLW9yZGVyIGZyZWVpbmcuCiAgKgogICogICBJbnB1dAotICogCW1xCW1lc3NhZ2UgcXVldWUKKyAqIAltcWQJcG9pbnRlciB0byBtZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKICAqIAltZXNxCW1lc3NhZ2UgYmVpbmcgZnJlZWQKICAqLwotZXh0ZXJuIHZvaWQgZ3J1X2ZyZWVfbWVzc2FnZSh2b2lkICptcSwgdm9pZCAqbWVzcSk7CitleHRlcm4gdm9pZCBncnVfZnJlZV9tZXNzYWdlKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsCisJCQkgICAgIHZvaWQgKm1lc3EpOwogCiAvKgogICogR2V0IG5leHQgbWVzc2FnZSBmcm9tIG1lc3NhZ2UgcXVldWUuIFJldHVybnMgcG9pbnRlciB0bwpAQCAtMTA2LDEzICsxMjEsMTMgQEAKICAqIGluIG9yZGVyIHRvIG1vdmUgdGhlIHF1ZXVlIHBvaW50ZXJzIHRvIG5leHQgbWVzc2FnZS4KICAqCiAgKiAgIElucHV0Ci0gKiAJbXEJbWVzc2FnZSBxdWV1ZQorICogCW1xZAlwb2ludGVyIHRvIG1lc3NhZ2UgcXVldWUgZGVzY3JpcHRvcgogICoKICAqICAgT3V0cHV0OgogICoJcAlwb2ludGVyIHRvIG1lc3NhZ2UKICAqCU5VTEwJbm8gbWVzc2FnZSBhdmFpbGFibGUKICAqLwotZXh0ZXJuIHZvaWQgKmdydV9nZXRfbmV4dF9tZXNzYWdlKHZvaWQgKm1xKTsKK2V4dGVybiB2b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCmluZGV4IDNkMmZjMjEuLmVjM2Y3YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKQEAgLTc2LDEwICs3Niw5IEBACiAvKiBIaXQgdGhlIGFzaWQgbGltaXQuIFN0YXJ0IG92ZXIgKi8KIHN0YXRpYyBpbnQgZ3J1X3dyYXBfYXNpZChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpCiB7Ci0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXBcbiIsIGdydSk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWRcbiIsIGdydS0+Z3NfZ2lkKTsKIAlTVEFUKGFzaWRfd3JhcCk7CiAJZ3J1LT5nc19hc2lkX2dlbisrOwotCWdydV9mbHVzaF9hbGxfdGxiKGdydSk7CiAJcmV0dXJuIE1JTl9BU0lEOwogfQogCkBAIC04OCwxOSArODcsMjEgQEAKIHsKIAlpbnQgaSwgZ2lkLCBpbnVzZV9hc2lkLCBsaW1pdDsKIAotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBhc2lkIDB4JXhcbiIsIGdydSwgYXNpZCk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWQsIGFzaWQgMHgleFxuIiwgZ3J1LT5nc19naWQsIGFzaWQpOwogCVNUQVQoYXNpZF9uZXh0KTsKIAlsaW1pdCA9IE1BWF9BU0lEOwogCWlmIChhc2lkID49IGxpbWl0KQogCQlhc2lkID0gZ3J1X3dyYXBfYXNpZChncnUpOworCWdydV9mbHVzaF9hbGxfdGxiKGdydSk7CiAJZ2lkID0gZ3J1LT5nc19naWQ7CiBhZ2FpbjoKIAlmb3IgKGkgPSAwOyBpIDwgR1JVX05VTV9DQ0g7IGkrKykgewogCQlpZiAoIWdydS0+Z3NfZ3RzW2ldKQogCQkJY29udGludWU7CiAJCWludXNlX2FzaWQgPSBncnUtPmdzX2d0c1tpXS0+dHNfZ21zLT5tc19hc2lkc1tnaWRdLm10X2FzaWQ7Ci0JCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBpbnVzZV9hc2lkIDB4JXgsIGN4dG51bSAlZCwgZ3RzICVwXG4iLAotCQkJZ3J1LCBpbnVzZV9hc2lkLCBpLCBncnUtPmdzX2d0c1tpXSk7CisJCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBndHMgJXAsIGdtcyAlcCwgaW51c2UgMHgleCwgY3h0ICVkXG4iLAorCQkJZ3J1LT5nc19naWQsIGdydS0+Z3NfZ3RzW2ldLCBncnUtPmdzX2d0c1tpXS0+dHNfZ21zLAorCQkJaW51c2VfYXNpZCwgaSk7CiAJCWlmIChpbnVzZV9hc2lkID09IGFzaWQpIHsKIAkJCWFzaWQgKz0gQVNJRF9JTkM7CiAJCQlpZiAoYXNpZCA+PSBsaW1pdCkgewpAQCAtMTIwLDggKzEyMSw4IEBACiAJfQogCWdydS0+Z3NfYXNpZF9saW1pdCA9IGxpbWl0OwogCWdydS0+Z3NfYXNpZCA9IGFzaWQ7Ci0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXAsIG5ldyBhc2lkIDB4JXgsIG5ld19saW1pdCAweCV4XG4iLCBncnUsIGFzaWQsCi0JCWxpbWl0KTsKKwlncnVfZGJnKGdydWRldiwgImdpZCAlZCwgbmV3IGFzaWQgMHgleCwgbmV3X2xpbWl0IDB4JXhcbiIsIGdydS0+Z3NfZ2lkLAorCQkJCQlhc2lkLCBsaW1pdCk7CiAJcmV0dXJuIGFzaWQ7CiB9CiAKQEAgLTEzMCwxNCArMTMxLDEyIEBACiB7CiAJaW50IGFzaWQ7CiAKLQlzcGluX2xvY2soJmdydS0+Z3NfYXNpZF9sb2NrKTsKIAlncnUtPmdzX2FzaWQgKz0gQVNJRF9JTkM7CiAJYXNpZCA9IGdydS0+Z3NfYXNpZDsKIAlpZiAoYXNpZCA+PSBncnUtPmdzX2FzaWRfbGltaXQpCiAJCWFzaWQgPSBncnVfcmVzZXRfYXNpZF9saW1pdChncnUsIGFzaWQpOwotCXNwaW5fdW5sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAKLQlncnVfZGJnKGdydWRldiwgImdydSAlcCwgYXNpZCAweCV4XG4iLCBncnUsIGFzaWQpOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBhc2lkIDB4JXhcbiIsIGdydS0+Z3NfZ2lkLCBhc2lkKTsKIAlyZXR1cm4gYXNpZDsKIH0KIApAQCAtMjE1LDE3ICsyMTQsMjAgQEAKICAqIFRMQiBtYW5hbmdtZW50IHJlcXVpcmVzIHRyYWNraW5nIGFsbCBHUlUgY2hpcGxldHMgdGhhdCBoYXZlIGxvYWRlZCBhIEdTRUcKICAqIGNvbnRleHQuCiAgKi8KLXN0YXRpYyBpbnQgZ3J1X2xvYWRfbW1fdHJhY2tlcihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsIHN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMsCi0JCQkgICAgICAgaW50IGN0eG51bSkKK3N0YXRpYyBpbnQgZ3J1X2xvYWRfbW1fdHJhY2tlcihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsCisJCQkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCiB7CisJc3RydWN0IGdydV9tbV9zdHJ1Y3QgKmdtcyA9IGd0cy0+dHNfZ21zOwogCXN0cnVjdCBncnVfbW1fdHJhY2tlciAqYXNpZHMgPSAmZ21zLT5tc19hc2lkc1tncnUtPmdzX2dpZF07Ci0JdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwID0gKDEgPDwgY3R4bnVtKTsKKwl1bnNpZ25lZCBzaG9ydCBjdHhiaXRtYXAgPSAoMSA8PCBndHMtPnRzX2N0eG51bSk7CiAJaW50IGFzaWQ7CiAKIAlzcGluX2xvY2soJmdtcy0+bXNfYXNpZF9sb2NrKTsKIAlhc2lkID0gYXNpZHMtPm10X2FzaWQ7CiAKLQlpZiAoYXNpZCA9PSAwIHx8IGFzaWRzLT5tdF9hc2lkX2dlbiAhPSBncnUtPmdzX2FzaWRfZ2VuKSB7CisJc3Bpbl9sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CisJaWYgKGFzaWQgPT0gMCB8fCAoYXNpZHMtPm10X2N0eGJpdG1hcCA9PSAwICYmIGFzaWRzLT5tdF9hc2lkX2dlbiAhPQorCQkJICBncnUtPmdzX2FzaWRfZ2VuKSkgewogCQlhc2lkID0gZ3J1X2Fzc2lnbl9hc2lkKGdydSk7CiAJCWFzaWRzLT5tdF9hc2lkID0gYXNpZDsKIAkJYXNpZHMtPm10X2FzaWRfZ2VuID0gZ3J1LT5nc19hc2lkX2dlbjsKQEAgLTIzMyw2ICsyMzUsNyBAQAogCX0gZWxzZSB7CiAJCVNUQVQoYXNpZF9yZXVzZSk7CiAJfQorCXNwaW5fdW5sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAKIAlCVUdfT04oYXNpZHMtPm10X2N0eGJpdG1hcCAmIGN0eGJpdG1hcCk7CiAJYXNpZHMtPm10X2N0eGJpdG1hcCB8PSBjdHhiaXRtYXA7CkBAIC0yNDEsMjQgKzI0NCwyOCBAQAogCXNwaW5fdW5sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CiAKIAlncnVfZGJnKGdydWRldiwKLQkJImdydSAleCwgZ21zICVwLCBjdHhudW0gMHglZCwgYXNpZCAweCV4LCBhc2lkbWFwIDB4JWx4XG4iLAotCQlncnUtPmdzX2dpZCwgZ21zLCBjdHhudW0sIGFzaWQsIGdtcy0+bXNfYXNpZG1hcFswXSk7CisJCSJnaWQgJWQsIGd0cyAlcCwgZ21zICVwLCBjdHhudW0gJWQsIGFzaWQgMHgleCwgYXNpZG1hcCAweCVseFxuIiwKKwkJZ3J1LT5nc19naWQsIGd0cywgZ21zLCBndHMtPnRzX2N0eG51bSwgYXNpZCwKKwkJZ21zLT5tc19hc2lkbWFwWzBdKTsKIAlyZXR1cm4gYXNpZDsKIH0KIAogc3RhdGljIHZvaWQgZ3J1X3VubG9hZF9tbV90cmFja2VyKHN0cnVjdCBncnVfc3RhdGUgKmdydSwKLQkJCQkgIHN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMsIGludCBjdHhudW0pCisJCQkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCiB7CisJc3RydWN0IGdydV9tbV9zdHJ1Y3QgKmdtcyA9IGd0cy0+dHNfZ21zOwogCXN0cnVjdCBncnVfbW1fdHJhY2tlciAqYXNpZHM7CiAJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwOwogCiAJYXNpZHMgPSAmZ21zLT5tc19hc2lkc1tncnUtPmdzX2dpZF07Ci0JY3R4Yml0bWFwID0gKDEgPDwgY3R4bnVtKTsKKwljdHhiaXRtYXAgPSAoMSA8PCBndHMtPnRzX2N0eG51bSk7CiAJc3Bpbl9sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CisJc3Bpbl9sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAJQlVHX09OKChhc2lkcy0+bXRfY3R4Yml0bWFwICYgY3R4Yml0bWFwKSAhPSBjdHhiaXRtYXApOwogCWFzaWRzLT5tdF9jdHhiaXRtYXAgXj0gY3R4Yml0bWFwOwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICV4LCBnbXMgJXAsIGN0eG51bSAweCVkLCBhc2lkbWFwIDB4JWx4XG4iLAotCQlncnUtPmdzX2dpZCwgZ21zLCBjdHhudW0sIGdtcy0+bXNfYXNpZG1hcFswXSk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWQsIGd0cyAlcCwgZ21zICVwLCBjdHhudW0gMHglZCwgYXNpZG1hcCAweCVseFxuIiwKKwkJZ3J1LT5nc19naWQsIGd0cywgZ21zLCBndHMtPnRzX2N0eG51bSwgZ21zLT5tc19hc2lkbWFwWzBdKTsKKwlzcGluX3VubG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOwogCXNwaW5fdW5sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CiB9CiAKQEAgLTMxOSw2ICszMjYsNyBAQAogCWd0cy0+dHNfdm1hID0gdm1hOwogCWd0cy0+dHNfdGxiX2ludF9zZWxlY3QgPSAtMTsKIAlndHMtPnRzX2dtcyA9IGdydV9yZWdpc3Rlcl9tbXVfbm90aWZpZXIoKTsKKwlndHMtPnRzX3NpemVhdmFpbCA9IEdSVV9TSVpFQVZBSUwoUEFHRV9TSElGVCk7CiAJaWYgKCFndHMtPnRzX2dtcykKIAkJZ290byBlcnI7CiAKQEAgLTM5OSw3ICs0MDcsNyBAQAogCXN0cnVjdCBncnVfc3RhdGUgKmdydTsKIAogCWdydSA9IGd0cy0+dHNfZ3J1OwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3RzICVwLCBncnUgJXBcbiIsIGd0cywgZ3J1KTsKKwlncnVfZGJnKGdydWRldiwgImd0cyAlcCwgZ2lkICVkXG4iLCBndHMsIGdydS0+Z3NfZ2lkKTsKIAogCXNwaW5fbG9jaygmZ3J1LT5nc19sb2NrKTsKIAlncnUtPmdzX2d0c1tndHMtPnRzX2N0eG51bV0gPSBOVUxMOwpAQCAtNDA4LDYgKzQxNiw3IEBACiAJX19jbGVhcl9iaXQoZ3RzLT50c19jdHhudW0sICZncnUtPmdzX2NvbnRleHRfbWFwKTsKIAlndHMtPnRzX2N0eG51bSA9IE5VTExDVFg7CiAJZ3RzLT50c19ncnUgPSBOVUxMOworCWd0cy0+dHNfYmxhZGUgPSAtMTsKIAlzcGluX3VubG9jaygmZ3J1LT5nc19sb2NrKTsKIAogCWd0c19kcm9wKGd0cyk7CkBAIC00MzIsOCArNDQxLDggQEAKIAlyZXR1cm4gR1JVX0hBTkRMRV9CWVRFUzsKIH0KIAotc3RhdGljIHZvaWQgZ3J1X3ByZWZldGNoX2NvbnRleHQodm9pZCAqZ3NlZywgdm9pZCAqY2IsIHZvaWQgKmNiZSwgdW5zaWduZWQgbG9uZyBjYnJtYXAsCi0JCQkJdW5zaWduZWQgbG9uZyBsZW5ndGgpCitzdGF0aWMgdm9pZCBncnVfcHJlZmV0Y2hfY29udGV4dCh2b2lkICpnc2VnLCB2b2lkICpjYiwgdm9pZCAqY2JlLAorCQkJCXVuc2lnbmVkIGxvbmcgY2JybWFwLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKIAlpbnQgaSwgc2NyOwogCkBAIC01MDAsMTIgKzUwOSwxMiBAQAogCXphcF92bWFfcHRlcyhndHMtPnRzX3ZtYSwgVUdSVUFERFIoZ3RzKSwgR1JVX0dTRUdfUEFHRVNJWkUpOwogCWNjaCA9IGdldF9jY2goZ3J1LT5nc19ncnVfYmFzZV92YWRkciwgY3R4bnVtKTsKIAorCWdydV9kYmcoZ3J1ZGV2LCAiZ3RzICVwXG4iLCBndHMpOwogCWxvY2tfY2NoX2hhbmRsZShjY2gpOwogCWlmIChjY2hfaW50ZXJydXB0X3N5bmMoY2NoKSkKIAkJQlVHKCk7Ci0JZ3J1X2RiZyhncnVkZXYsICJndHMgJXBcbiIsIGd0cyk7CiAKLQlncnVfdW5sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMtPnRzX2dtcywgZ3RzLT50c19jdHhudW0pOworCWdydV91bmxvYWRfbW1fdHJhY2tlcihncnUsIGd0cyk7CiAJaWYgKHNhdmVzdGF0ZSkKIAkJZ3J1X3VubG9hZF9jb250ZXh0X2RhdGEoZ3RzLT50c19nZGF0YSwgZ3J1LT5nc19ncnVfYmFzZV92YWRkciwKIAkJCQkJY3R4bnVtLCBndHMtPnRzX2Nicl9tYXAsCkBAIC01MzQsNyArNTQzLDcgQEAKIAljY2ggPSBnZXRfY2NoKGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsIGN0eG51bSk7CiAKIAlsb2NrX2NjaF9oYW5kbGUoY2NoKTsKLQlhc2lkID0gZ3J1X2xvYWRfbW1fdHJhY2tlcihncnUsIGd0cy0+dHNfZ21zLCBndHMtPnRzX2N0eG51bSk7CisJYXNpZCA9IGdydV9sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMpOwogCWNjaC0+dGZtX2ZhdWx0X2JpdF9lbmFibGUgPQogCSAgICAoZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9QT0xMCiAJICAgICB8fCBndHMtPnRzX3VzZXJfb3B0aW9ucyA9PSBHUlVfT1BUX01JU1NfRk1NX0lOVFIpOwpAQCAtNTQ0LDcgKzU1Myw4IEBACiAJCWNjaC0+dGxiX2ludF9zZWxlY3QgPSBndHMtPnRzX3RsYl9pbnRfc2VsZWN0OwogCX0KIAljY2gtPnRmbV9kb25lX2JpdF9lbmFibGUgPSAwOwotCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIGFzaWQsIGd0cy0+dHNfY2JyX21hcCwgZ3RzLT50c19kc3JfbWFwKTsKKwllcnIgPSBjY2hfYWxsb2NhdGUoY2NoLCBhc2lkLCBndHMtPnRzX3NpemVhdmFpbCwgZ3RzLT50c19jYnJfbWFwLAorCQkJCWd0cy0+dHNfZHNyX21hcCk7CiAJaWYgKGVycikgewogCQlncnVfZGJnKGdydWRldiwKIAkJCSJlcnIgJWQ6IGNjaCAlcCwgZ3RzICVwLCBjYnIgMHglbHgsIGRzciAweCVseFxuIiwKQEAgLTU2NSwxMSArNTc1LDEyIEBACiAvKgogICogVXBkYXRlIGZpZWxkcyBpbiBhbiBhY3RpdmUgQ0NIOgogICogCS0gcmV0YXJnZXQgaW50ZXJydXB0cyBvbiBsb2NhbCBibGFkZQorICogCS0gdXBkYXRlIHNpemVhdmFpbCBtYXNrCiAgKiAJLSBmb3JjZSBhIGRlbGF5ZWQgY29udGV4dCB1bmxvYWQgYnkgY2xlYXJpbmcgdGhlIENDSCBhc2lkcy4gVGhpcwogICogCSAgZm9yY2VzIFRMQiBtaXNzZXMgZm9yIG5ldyBHUlUgaW5zdHJ1Y3Rpb25zLiBUaGUgY29udGV4dCBpcyB1bmxvYWRlZAogICogCSAgd2hlbiB0aGUgbmV4dCBUTEIgbWlzcyBvY2N1cnMuCiAgKi8KLXN0YXRpYyBpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGludF9zZWxlY3QpCitpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGZvcmNlX3VubG9hZCkKIHsKIAlzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaDsKIAlzdHJ1Y3QgZ3J1X3N0YXRlICpncnUgPSBndHMtPnRzX2dydTsKQEAgLTU4Myw5ICs1OTQsMTEgQEAKIAkJCWdvdG8gZXhpdDsKIAkJaWYgKGNjaF9pbnRlcnJ1cHQoY2NoKSkKIAkJCUJVRygpOwotCQlpZiAoaW50X3NlbGVjdCA+PSAwKSB7Ci0JCQlndHMtPnRzX3RsYl9pbnRfc2VsZWN0ID0gaW50X3NlbGVjdDsKLQkJCWNjaC0+dGxiX2ludF9zZWxlY3QgPSBpbnRfc2VsZWN0OworCQlpZiAoIWZvcmNlX3VubG9hZCkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQljY2gtPnNpemVhdmFpbFtpXSA9IGd0cy0+dHNfc2l6ZWF2YWlsOworCQkJZ3RzLT50c190bGJfaW50X3NlbGVjdCA9IGdydV9jcHVfZmF1bHRfbWFwX2lkKCk7CisJCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKTsKIAkJfSBlbHNlIHsKIAkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQkJY2NoLT5hc2lkW2ldID0gMDsKQEAgLTYxNyw3ICs2MzAsNyBAQAogCiAJZ3J1X2RiZyhncnVkZXYsICJyZXRhcmdldCBmcm9tICVkIHRvICVkXG4iLCBndHMtPnRzX3RsYl9pbnRfc2VsZWN0LAogCQlncnVfY3B1X2ZhdWx0X21hcF9pZCgpKTsKLQlyZXR1cm4gZ3J1X3VwZGF0ZV9jY2goZ3RzLCBncnVfY3B1X2ZhdWx0X21hcF9pZCgpKTsKKwlyZXR1cm4gZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKTsKIH0KIAogCkBAIC02ODgsNyArNzAxLDcgQEAKIAkJU1RBVChzdGVhbF9jb250ZXh0X2ZhaWxlZCk7CiAJfQogCWdydV9kYmcoZ3J1ZGV2LAotCQkic3RvbGUgZ3J1ICV4LCBjdHhudW0gJWQgZnJvbSBndHMgJXAuIE5lZWQgY2IgJWQsIGRzICVkOyIKKwkJInN0b2xlIGdpZCAlZCwgY3R4bnVtICVkIGZyb20gZ3RzICVwLiBOZWVkIGNiICVkLCBkcyAlZDsiCiAJCSIgYXZhaWwgY2IgJWxkLCBkcyAlbGRcbiIsCiAJCWdydS0+Z3NfZ2lkLCBjdHhudW0sIG5ndHMsIGNiciwgZHNyLCBod2VpZ2h0NjQoZ3J1LT5nc19jYnJfbWFwKSwKIAkJaHdlaWdodDY0KGdydS0+Z3NfZHNyX21hcCkpOwpAQCAtNzI3LDYgKzc0MCw3IEBACiAJCX0KIAkJcmVzZXJ2ZV9ncnVfcmVzb3VyY2VzKGdydSwgZ3RzKTsKIAkJZ3RzLT50c19ncnUgPSBncnU7CisJCWd0cy0+dHNfYmxhZGUgPSBncnUtPmdzX2JsYWRlX2lkOwogCQlndHMtPnRzX2N0eG51bSA9CiAJCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCZncnUtPmdzX2NvbnRleHRfbWFwLCBHUlVfTlVNX0NDSCk7CiAJCUJVR19PTihndHMtPnRzX2N0eG51bSA9PSBHUlVfTlVNX0NDSCk7CkBAIC03MzcsNyArNzUxLDcgQEAKIAogCQlTVEFUKGFzc2lnbl9jb250ZXh0KTsKIAkJZ3J1X2RiZyhncnVkZXYsCi0JCQkiZ3NlZyAlcCwgZ3RzICVwLCBncnUgJXgsIGN0eCAlZCwgY2JyICVkLCBkc3IgJWRcbiIsCisJCQkiZ3NlZyAlcCwgZ3RzICVwLCBnaWQgJWQsIGN0eCAlZCwgY2JyICVkLCBkc3IgJWRcbiIsCiAJCQlnc2VnX3ZpcnR1YWxfYWRkcmVzcyhndHMtPnRzX2dydSwgZ3RzLT50c19jdHhudW0pLCBndHMsCiAJCQlndHMtPnRzX2dydS0+Z3NfZ2lkLCBndHMtPnRzX2N0eG51bSwKIAkJCWd0cy0+dHNfY2JyX2F1X2NvdW50LCBndHMtPnRzX2Rzcl9hdV9jb3VudCk7CkBAIC03NzMsOCArNzg3LDggQEAKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAogYWdhaW46Ci0JcHJlZW1wdF9kaXNhYmxlKCk7CiAJbXV0ZXhfbG9jaygmZ3RzLT50c19jdHhsb2NrKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoZ3RzLT50c19ncnUpIHsKIAkJaWYgKGd0cy0+dHNfZ3J1LT5nc19ibGFkZV9pZCAhPSB1dl9udW1hX2JsYWRlX2lkKCkpIHsKIAkJCVNUQVQobWlncmF0ZWRfbm9wZm5fdW5sb2FkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKaW5kZXggNzNiMGNhMC4uZWU3NDgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKQEAgLTYyLDcgKzYyLDkgQEAKIAlwcmludHN0YXQocywgYXNpZF93cmFwKTsKIAlwcmludHN0YXQocywgYXNpZF9yZXVzZSk7CiAJcHJpbnRzdGF0KHMsIGludHIpOworCXByaW50c3RhdChzLCBpbnRyX21tX2xvY2tfZmFpbGVkKTsKIAlwcmludHN0YXQocywgY2FsbF9vcyk7CisJcHJpbnRzdGF0KHMsIGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2UpOwogCXByaW50c3RhdChzLCBjYWxsX29zX2NoZWNrX2Zvcl9idWcpOwogCXByaW50c3RhdChzLCBjYWxsX29zX3dhaXRfcXVldWUpOwogCXByaW50c3RhdChzLCB1c2VyX2ZsdXNoX3RsYik7CkBAIC0xMjAsNiArMTIyLDMwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgaW50IG1jc19zdGF0aXN0aWNzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBvcDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsLCBjb3VudCwgbWF4OworCXN0YXRpYyBjaGFyICppZFtdID0geyJjY2hfYWxsb2NhdGUiLCAiY2NoX3N0YXJ0IiwgImNjaF9pbnRlcnJ1cHQiLAorCQkiY2NoX2ludGVycnVwdF9zeW5jIiwgImNjaF9kZWFsbG9jYXRlIiwgInRnaF9pbnZhbGlkYXRlIn07CisKKwlmb3IgKG9wID0gMDsgb3AgPCBtY3NvcF9sYXN0OyBvcCsrKSB7CisJCWNvdW50ID0gYXRvbWljX2xvbmdfcmVhZCgmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLmNvdW50KTsKKwkJdG90YWwgPSBhdG9taWNfbG9uZ19yZWFkKCZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0udG90YWwpOworCQltYXggPSBtY3Nfb3Bfc3RhdGlzdGljc1tvcF0ubWF4OworCQlzZXFfcHJpbnRmKHMsICIlLTIwcyUxMmxkJTEybGQlMTJsZFxuIiwgaWRbb3BdLCBjb3VudCwKKwkJCSAgIGNvdW50ID8gdG90YWwgLyBjb3VudCA6IDAsIG1heCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtY3Nfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKK3sKKwltZW1zZXQobWNzX29wX3N0YXRpc3RpY3MsIDAsIHNpemVvZihtY3Nfb3Bfc3RhdGlzdGljcykpOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGludCBvcHRpb25zX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQogewogCXNlcV9wcmludGYocywgIjB4JWx4XG4iLCBncnVfb3B0aW9ucyk7CkBAIC0xMzUsNiArMTYxLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIKIAkgICAgKGJ1ZiwgdXNlcmJ1ZiwgY291bnQgPCBzaXplb2YoYnVmKSA/IGNvdW50IDogc2l6ZW9mKGJ1ZikpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbY291bnQgLSAxXSA9ICdcMCc7CiAJaWYgKCFzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKIAkJZ3J1X29wdGlvbnMgPSB2YWw7CiAKQEAgLTE5OSw3ICsyMjYsNyBAQAogCiBzdGF0aWMgdm9pZCAqc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgbG9mZl90ICpnaWQpCiB7Ci0JaWYgKCpnaWQgPCBHUlVfTUFYX0dSVVMpCisJaWYgKCpnaWQgPCBncnVfbWF4X2dpZHMpCiAJCXJldHVybiBnaWQ7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMDcsNyArMjM0LDcgQEAKIHN0YXRpYyB2b2lkICpzZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKmRhdGEsIGxvZmZfdCAqZ2lkKQogewogCSgqZ2lkKSsrOwotCWlmICgqZ2lkIDwgR1JVX01BWF9HUlVTKQorCWlmICgqZ2lkIDwgZ3J1X21heF9naWRzKQogCQlyZXR1cm4gZ2lkOwogCXJldHVybiBOVUxMOwogfQpAQCAtMjMxLDYgKzI1OCwxMSBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzdGF0aXN0aWNzX3Nob3csIE5VTEwpOwogfQogCitzdGF0aWMgaW50IG1jc19zdGF0aXN0aWNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1jc19zdGF0aXN0aWNzX3Nob3csIE5VTEwpOworfQorCiBzdGF0aWMgaW50IG9wdGlvbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb3B0aW9uc19zaG93LCBOVUxMKTsKQEAgLTI1NSw2ICsyODcsMTQgQEAKIAkucmVsZWFzZSAJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1jc19zdGF0aXN0aWNzX2ZvcHMgPSB7CisJLm9wZW4gCQk9IG1jc19zdGF0aXN0aWNzX29wZW4sCisJLnJlYWQgCQk9IHNlcV9yZWFkLAorCS53cml0ZSAJCT0gbWNzX3N0YXRpc3RpY3Nfd3JpdGUsCisJLmxsc2VlayAJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHRpb25zX2ZvcHMgPSB7CiAJLm9wZW4gCQk9IG9wdGlvbnNfb3BlbiwKIAkucmVhZCAJCT0gc2VxX3JlYWQsCkBAIC0yODMsNiArMzIzLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogfSBwcm9jX2ZpbGVzW10gPSB7CiAJeyJzdGF0aXN0aWNzIiwgMDY0NCwgJnN0YXRpc3RpY3NfZm9wc30sCisJeyJtY3Nfc3RhdGlzdGljcyIsIDA2NDQsICZtY3Nfc3RhdGlzdGljc19mb3BzfSwKIAl7ImRlYnVnX29wdGlvbnMiLCAwNjQ0LCAmb3B0aW9uc19mb3BzfSwKIAl7ImNjaF9zdGF0dXMiLCAwNDQ0LCAmY2NoX2ZvcHN9LAogCXsiZ3J1X3N0YXR1cyIsIDA0NDQsICZncnVfZm9wc30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCmluZGV4IGE3OGY3MGQuLmJmMWVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCkBAIC0xNTMsNiArMTUzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZ3J1X3N0YXRzX3MgZ3J1X3N0YXRzOwogZXh0ZXJuIHN0cnVjdCBncnVfYmxhZGVfc3RhdGUgKmdydV9iYXNlW107CiBleHRlcm4gdW5zaWduZWQgbG9uZyBncnVfc3RhcnRfcGFkZHIsIGdydV9lbmRfcGFkZHI7CitleHRlcm4gdW5zaWduZWQgaW50IGdydV9tYXhfZ2lkczsKIAogI2RlZmluZSBHUlVfTUFYX0JMQURFUwkJTUFYX05VTU5PREVTCiAjZGVmaW5lIEdSVV9NQVhfR1JVUwkJKEdSVV9NQVhfQkxBREVTICogR1JVX0NISVBMRVRTX1BFUl9CTEFERSkKQEAgLTE4NCw3ICsxODUsOSBAQAogCWF0b21pY19sb25nX3QgYXNpZF93cmFwOwogCWF0b21pY19sb25nX3QgYXNpZF9yZXVzZTsKIAlhdG9taWNfbG9uZ190IGludHI7CisJYXRvbWljX2xvbmdfdCBpbnRyX21tX2xvY2tfZmFpbGVkOwogCWF0b21pY19sb25nX3QgY2FsbF9vczsKKwlhdG9taWNfbG9uZ190IGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2U7CiAJYXRvbWljX2xvbmdfdCBjYWxsX29zX2NoZWNrX2Zvcl9idWc7CiAJYXRvbWljX2xvbmdfdCBjYWxsX29zX3dhaXRfcXVldWU7CiAJYXRvbWljX2xvbmdfdCB1c2VyX2ZsdXNoX3RsYjsKQEAgLTIzNyw2ICsyNDAsMTcgQEAKIAogfTsKIAorZW51bSBtY3Nfb3Age2NjaG9wX2FsbG9jYXRlLCBjY2hvcF9zdGFydCwgY2Nob3BfaW50ZXJydXB0LCBjY2hvcF9pbnRlcnJ1cHRfc3luYywKKwljY2hvcF9kZWFsbG9jYXRlLCB0Z2hvcF9pbnZhbGlkYXRlLCBtY3NvcF9sYXN0fTsKKworc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgeworCWF0b21pY19sb25nX3QJY291bnQ7CisJYXRvbWljX2xvbmdfdAl0b3RhbDsKKwl1bnNpZ25lZCBsb25nCW1heDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbWNzX29wX3N0YXRpc3RpYyBtY3Nfb3Bfc3RhdGlzdGljc1ttY3NvcF9sYXN0XTsKKwogI2RlZmluZSBPUFRfRFBSSU5UCTEKICNkZWZpbmUgT1BUX1NUQVRTCTIKICNkZWZpbmUgR1JVX1FVSUNLTE9PSwk0CkBAIC0yNzgsMTMgKzI5MiwxMiBAQAogLyogR2VuZXJhdGUgYSBHUlUgYXNpZCB2YWx1ZSBmcm9tIGEgR1JVIGJhc2UgYXNpZCAmIGEgdmlydHVhbCBhZGRyZXNzLiAqLwogI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKICNkZWZpbmUgVkFERFJfSElfQklUCQk2NAotI2RlZmluZSBHUlVSRUdJT04oYWRkcikJCSgoYWRkcikgPj4gKFZBRERSX0hJX0JJVCAtIDMpICYgMykKICNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAogI2RlZmluZSBWQUREUl9ISV9CSVQJCTQ4Ci0jZGVmaW5lIEdSVVJFR0lPTihhZGRyKQkJKDApCQkvKiBaWlogY291bGQgZG8gYmV0dGVyICovCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiCiAjZW5kaWYKKyNkZWZpbmUgR1JVUkVHSU9OKGFkZHIpCQkoKGFkZHIpID4+IChWQUREUl9ISV9CSVQgLSAzKSAmIDMpCiAjZGVmaW5lIEdSVUFTSUQoYXNpZCwgYWRkcikJKChhc2lkKSArIEdSVVJFR0lPTihhZGRyKSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5NywxMiArMzEwLDEyIEBACiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwb2ludGVkIHRvIGZyb20gdGhlIG1tc3RydWN0IHZpYSB0aGUgbm90aWZpZXIgcG9pbnRlci4KICAqIFRoZXJlIGlzIG9uZSBvZiB0aGVzZSBwZXIgYWRkcmVzcyBzcGFjZS4KICAqLwotc3RydWN0IGdydV9tbV90cmFja2VyIHsKLQl1bnNpZ25lZCBpbnQJCW10X2FzaWRfZ2VuOwkvKiBBU0lEIHdyYXAgY291bnQgKi8KLQlpbnQJCQltdF9hc2lkOwkvKiBjdXJyZW50IGJhc2UgQVNJRCBmb3IgZ3J1ICovCi0JdW5zaWduZWQgc2hvcnQJCW10X2N0eGJpdG1hcDsJLyogYml0bWFwIG9mIGNvbnRleHRzIHVzaW5nCitzdHJ1Y3QgZ3J1X21tX3RyYWNrZXIgewkJCQkvKiBwYWNrIHRvIHJlZHVjZSBzaXplICovCisJdW5zaWduZWQgaW50CQltdF9hc2lkX2dlbjoyNDsJLyogQVNJRCB3cmFwIGNvdW50ICovCisJdW5zaWduZWQgaW50CQltdF9hc2lkOjI0OwkvKiBjdXJyZW50IGJhc2UgQVNJRCBmb3IgZ3J1ICovCisJdW5zaWduZWQgc2hvcnQJCW10X2N0eGJpdG1hcDoxNjsvKiBiaXRtYXAgb2YgY29udGV4dHMgdXNpbmcKIAkJCQkJCSAgIGFzaWQgKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGdydV9tbV9zdHJ1Y3QgewogCXN0cnVjdCBtbXVfbm90aWZpZXIJbXNfbm90aWZpZXI7CkBAIC0zNDgsNiArMzYxLDcgQEAKIAlsb25nCQkJdHNfdXNlcl9vcHRpb25zOy8qIG1pc2MgdXNlciBvcHRpb24gZmxhZ3MgKi8KIAlwaWRfdAkJCXRzX3RnaWRfb3duZXI7CS8qIHRhc2sgdGhhdCBpcyB1c2luZyB0aGUKIAkJCQkJCSAgIGNvbnRleHQgLSBmb3IgbWlncmF0aW9uICovCisJdW5zaWduZWQgc2hvcnQJCXRzX3NpemVhdmFpbDsJLyogUGFnZXNpemVzIGluIHVzZSAqLwogCWludAkJCXRzX3RzaWQ7CS8qIHRocmVhZCB0aGF0IG93bnMgdGhlCiAJCQkJCQkgICBzdHJ1Y3R1cmUgKi8KIAlpbnQJCQl0c190bGJfaW50X3NlbGVjdDsvKiB0YXJnZXQgY3B1IGlmIGludGVycnVwdHMKQEAgLTM1OSw2ICszNzMsOSBAQAogCQkJCQkJICAgcmVxdWlyZWQgZm9yIGNvbnRlc3QgKi8KIAl1bnNpZ25lZCBjaGFyCQl0c19jYnJfYXVfY291bnQ7LyogTnVtYmVyIG9mIENCUiByZXNvdXJjZXMKIAkJCQkJCSAgIHJlcXVpcmVkIGZvciBjb250ZXN0ICovCisJY2hhcgkJCXRzX2JsYWRlOwkvKiBJZiA+PSAwLCBtaWdyYXRlIGNvbnRleHQgaWYKKwkJCQkJCSAgIHJlZiBmcm9tIGRpZmVyZW50IGJsYWRlICovCisJY2hhcgkJCXRzX2ZvcmNlX2NjaF9yZWxvYWQ7CiAJY2hhcgkJCXRzX2ZvcmNlX3VubG9hZDsvKiBmb3JjZSBjb250ZXh0IHRvIGJlIHVubG9hZGVkCiAJCQkJCQkgICBhZnRlciBtaWdyYXRpb24gKi8KIAljaGFyCQkJdHNfY2JyX2lkeFtHUlVfQ0JSX0FVXTsvKiBDQlIgbnVtYmVycyBvZiBlYWNoCkBAIC0zOTIsMTIgKzQwOSwxMiBAQAogCQkJCQkJCSAgIGdydSBzZWdtZW50cyAoNjQpICovCiAJdm9pZAkJCSpnc19ncnVfYmFzZV92YWRkcjsJLyogVmlydHVhbCBhZGRyZXNzIG9mCiAJCQkJCQkJICAgZ3J1IHNlZ21lbnRzICg2NCkgKi8KLQl1bnNpZ25lZCBjaGFyCQlnc19naWQ7CQkJLyogdW5pcXVlIEdSVSBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAkJZ3NfZ2lkOwkJCS8qIHVuaXF1ZSBHUlUgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQJCWdzX2JsYWRlX2lkOwkJLyogYmxhZGUgb2YgR1JVICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2xvY2FsX3NoaWZ0OwkvKiB1c2VkIHRvIHBpY2sgVEdIIGZvcgogCQkJCQkJCSAgIGxvY2FsIGZsdXNoICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2ZpcnN0X3JlbW90ZTsJLyogc3RhcnRpbmcgVEdIIyBmb3IKIAkJCQkJCQkgICByZW1vdGUgZmx1c2ggKi8KLQl1bnNpZ25lZCBzaG9ydAkJZ3NfYmxhZGVfaWQ7CQkvKiBibGFkZSBvZiBHUlUgKi8KIAlzcGlubG9ja190CQlnc19hc2lkX2xvY2s7CQkvKiBsb2NrIHVzZWQgZm9yCiAJCQkJCQkJICAgYXNzaWduaW5nIGFzaWRzICovCiAJc3BpbmxvY2tfdAkJZ3NfbG9jazsJCS8qIGxvY2sgdXNlZCBmb3IKQEAgLTQ5Miw2ICs1MDksMTAgQEAKIAkJCShpKSA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7CQkJXAogCQkJKGkpKyssIChncnUpKyspCiAKKy8qIFNjYW4gYWxsIEdSVXMgKi8KKyNkZWZpbmUgZm9yZWFjaF9naWQoZ2lkKQkJCQkJCVwKKwlmb3IgKChnaWQpID0gMDsgKGdpZCkgPCBncnVfbWF4X2dpZHM7IChnaWQpKyspCisKIC8qIFNjYW4gYWxsIGFjdGl2ZSBHVFNzIG9uIGEgZ3J1LiBOb3RlOiBtdXN0IGhvbGQgc3NfbG9jayB0byB1c2UgdGhpcyBtYWNyby4gKi8KICNkZWZpbmUgZm9yX2VhY2hfZ3RzX29uX2dydShndHMsIGdydSwgY3R4bnVtKQkJCQlcCiAJZm9yICgoY3R4bnVtKSA9IDA7IChjdHhudW0pIDwgR1JVX05VTV9DQ0g7IChjdHhudW0pKyspCQlcCkBAIC01NzgsOSArNTk5LDExIEBACiBleHRlcm4gc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmdydV9hbGxvY190aHJlYWRfc3RhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0CiAJCQkJKnZtYSwgaW50IHRzaWQpOwogZXh0ZXJuIHZvaWQgZ3J1X3VubG9hZF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBzYXZlc3RhdGUpOworZXh0ZXJuIGludCBncnVfdXBkYXRlX2NjaChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLCBpbnQgZm9yY2VfdW5sb2FkKTsKIGV4dGVybiB2b2lkIGd0c19kcm9wKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpOwogZXh0ZXJuIHZvaWQgZ3J1X3RnaF9mbHVzaF9pbml0KHN0cnVjdCBncnVfc3RhdGUgKmdydSk7CiBleHRlcm4gaW50IGdydV9rc2VydmljZXNfaW5pdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpOworZXh0ZXJuIHZvaWQgZ3J1X2tzZXJ2aWNlc19leGl0KHN0cnVjdCBncnVfc3RhdGUgKmdydSk7CiBleHRlcm4gaXJxcmV0dXJuX3QgZ3J1X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiBpbnQgZ3J1X2hhbmRsZV91c2VyX2NhbGxfb3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiBpbnQgZ3J1X3VzZXJfZmx1c2hfdGxiKHVuc2lnbmVkIGxvbmcgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0bGJwdXJnZS5jCmluZGV4IGM4NDQ5NmEuLjFkMTI1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGxicHVyZ2UuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJIiAgRkxVU0ggZ3J1aWQgJWQsIGFzaWQgMHgleCwgbnVtICVsZCwgY2JtYXAgMHgleFxuIiwKIAkJCQlnaWQsIGFzaWQsIG51bSwgYXNpZHMtPm10X2N0eGJpdG1hcCk7CiAJCQl0Z2ggPSBnZXRfbG9ja190Z2hfaGFuZGxlKGdydSk7Ci0JCQl0Z2hfaW52YWxpZGF0ZSh0Z2gsIHN0YXJ0LCAwLCBhc2lkLCBncnVwYWdlc2l6ZSwgMCwKKwkJCXRnaF9pbnZhbGlkYXRlKHRnaCwgc3RhcnQsIH4wLCBhc2lkLCBncnVwYWdlc2l6ZSwgMCwKIAkJCQkgICAgICAgbnVtIC0gMSwgYXNpZHMtPm10X2N0eGJpdG1hcCk7CiAJCQlnZXRfdW5sb2NrX3RnaF9oYW5kbGUodGdoKTsKIAkJfSBlbHNlIHsKQEAgLTIxMCwxMSArMjEwLDEwIEBACiB7CiAJc3RydWN0IGdydV90bGJfZ2xvYmFsX2hhbmRsZSAqdGdoOwogCi0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXAsIGdpZCAlZFxuIiwgZ3J1LCBncnUtPmdzX2dpZCk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWRcbiIsIGdydS0+Z3NfZ2lkKTsKIAl0Z2ggPSBnZXRfbG9ja190Z2hfaGFuZGxlKGdydSk7Ci0JdGdoX2ludmFsaWRhdGUodGdoLCAwLCB+MCwgMCwgMSwgMSwgR1JVTUFYSU5WQUwgLSAxLCAwKTsKKwl0Z2hfaW52YWxpZGF0ZSh0Z2gsIDAsIH4wLCAwLCAxLCAxLCBHUlVNQVhJTlZBTCAtIDEsIDB4ZmZmZik7CiAJZ2V0X3VubG9ja190Z2hfaGFuZGxlKHRnaCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmggYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oCmluZGV4IDI3NWI3ODguLjExNDQ0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGMuaApAQCAtOTIsNyArOTIsOSBAQAogCXU4IHBhZDFbM107CQkvKiBhbGlnbiB0byBuZXh0IHU2NCBpbiAxc3QgNjQtYnl0ZSBjYWNoZWxpbmUgKi8KIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFyc19wYTsJLyogcGh5cyBhZGRyZXNzIG9mIHN0cnVjdCB4cGNfdmFycyAqLwotCQl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX21xX2dwYTsgLyogZ3J1IHBoeSBhZGRyIG9mIGFjdGl2YXRlX21xICovCisJCXVuc2lnbmVkIGxvbmcgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOyAvKiBwaHlzIGFkZHIgb2YgKi8KKwkJCQkJCQkvKiBhY3RpdmF0ZSBtcSdzICovCisJCQkJCQkJLyogZ3J1IG1xIGRlc2NyaXB0b3IgKi8KIAl9IHNuOwogCXVuc2lnbmVkIGxvbmcgdHNfamlmZmllczsgLyogdGltZXN0YW1wIHdoZW4gcnN2ZCBwZyB3YXMgc2V0dXAgYnkgWFBDICovCiAJdTY0IHBhZDJbMTBdOwkJLyogYWxpZ24gdG8gbGFzdCB1NjQgaW4gMm5kIDY0LWJ5dGUgY2FjaGVsaW5lICovCkBAIC0xODksNyArMTkxLDkgQEAKIAlpbnQgaXJxOwkJLyogaXJxIHJhaXNlZCB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgaW4gbXEgKi8KIAlpbnQgbW1yX2JsYWRlOwkJLyogYmxhZGUgd2hlcmUgd2F0Y2hsaXN0IHdhcyBhbGxvY2F0ZWQgZnJvbSAqLwogCXVuc2lnbmVkIGxvbmcgbW1yX29mZnNldDsgLyogb2Zmc2V0IG9mIGlycSBtbXIgbG9jYXRlZCBvbiBtbXJfYmxhZGUgKi8KKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsgLyogdmFsdWUgb2YgaXJxIG1tciBsb2NhdGVkIG9uIG1tcl9ibGFkZSAqLwogCWludCB3YXRjaGxpc3RfbnVtOwkvKiBudW1iZXIgb2Ygd2F0Y2hsaXN0IGFsbG9jYXRkIGJ5IEJJT1MgKi8KKwl2b2lkICpncnVfbXFfZGVzYzsJLyogb3BhcXVlIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBHUlUgZHJpdmVyICovCiB9OwogCiAvKgpAQCAtMTk3LDYgKzIwMSw3IEBACiAgKiBoZWFydGJlYXQsIHBhcnRpdGlvbiBhY3RpdmUgc3RhdGUsIGFuZCBjaGFubmVsIHN0YXRlLiBUaGlzIGlzIFVWIG9ubHkuCiAgKi8KIHN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2IHsKKwl1bnNpZ25lZCBpbnQgZ3J1X21zZ19oZHI7IC8qIEZPUiBHUlUgSU5URVJOQUwgVVNFIE9OTFkgKi8KIAlzaG9ydCBwYXJ0aWQ7CQkvKiBzZW5kZXIncyBwYXJ0aWQgKi8KIAl1OCBhY3Rfc3RhdGU7CQkvKiBzZW5kZXIncyBhY3Rfc3RhdGUgYXQgdGltZSBtc2cgc2VudCAqLwogCXU4IHR5cGU7CQkvKiBtZXNzYWdlJ3MgdHlwZSAqLwpAQCAtMjMyLDcgKzIzNyw3IEBACiBzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ19hY3RpdmF0ZV9yZXFfdXYgewogCXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2IGhkcjsKIAl1bnNpZ25lZCBsb25nIHJwX2dwYTsKLQl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX21xX2dwYTsKKwl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsKIH07CiAKIHN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnX2RlYWN0aXZhdGVfcmVxX3V2IHsKQEAgLTI2Myw3ICsyNjgsNyBAQAogCXNob3J0IGNoX251bWJlcjsKIAlzaG9ydCByZW1vdGVfbmVudHJpZXM7CS8qID8/PyBJcyB0aGlzIG5lZWRlZD8gV2hhdCBpcz8gKi8KIAlzaG9ydCBsb2NhbF9uZW50cmllczsJLyogPz8/IElzIHRoaXMgbmVlZGVkPyBXaGF0IGlzPyAqLwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfbm90aWZ5X21xX2dwYTsKKwl1bnNpZ25lZCBsb25nIG5vdGlmeV9ncnVfbXFfZGVzY19ncGE7CiB9OwogCiAvKgpAQCAtNTEwLDggKzUxNSw4IEBACiB9OwogCiBzdHJ1Y3QgeHBjX2NoYW5uZWxfdXYgewotCXVuc2lnbmVkIGxvbmcgcmVtb3RlX25vdGlmeV9tcV9ncGE7CS8qIGdydSBwaHlzIGFkZHJlc3Mgb2YgcmVtb3RlICovCi0JCQkJCQkvKiBwYXJ0aXRpb24ncyBub3RpZnkgbXEgKi8KKwl2b2lkICpjYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjOyAvKiByZW1vdGUgcGFydGl0aW9uJ3Mgbm90aWZ5IG1xJ3MgKi8KKwkJCQkJIC8qIGdydSBtcSBkZXNjcmlwdG9yICovCiAKIAlzdHJ1Y3QgeHBjX3NlbmRfbXNnX3Nsb3RfdXYgKnNlbmRfbXNnX3Nsb3RzOwogCXZvaWQgKnJlY3ZfbXNnX3Nsb3RzOwkvKiBlYWNoIHNsb3Qgd2lsbCBob2xkIGEgeHBjX25vdGlmeV9tcV9tc2dfdXYgKi8KQEAgLTY4Miw4ICs2ODcsMTIgQEAKIH07CiAKIHN0cnVjdCB4cGNfcGFydGl0aW9uX3V2IHsKLQl1bnNpZ25lZCBsb25nIHJlbW90ZV9hY3RpdmF0ZV9tcV9ncGE7CS8qIGdydSBwaHlzIGFkZHJlc3Mgb2YgcmVtb3RlICovCi0JCQkJCQkvKiBwYXJ0aXRpb24ncyBhY3RpdmF0ZSBtcSAqLworCXVuc2lnbmVkIGxvbmcgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOwkvKiBwaHlzIGFkZHIgb2YgcGFyaXRpdG9uJ3MgKi8KKwkJCQkJCS8qIGFjdGl2YXRlIG1xJ3MgZ3J1IG1xICovCisJCQkJCQkvKiBkZXNjcmlwdG9yICovCisJdm9pZCAqY2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjOyAvKiBjYWNoZWQgY29weSBvZiBwYXJ0aXRpb24ncyAqLworCQkJCQkgICAvKiBhY3RpdmF0ZSBtcSdzIGdydSBtcSBkZXNjcmlwdG9yICovCisJc3RydWN0IG11dGV4IGNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzY19tdXRleDsKIAlzcGlubG9ja190IGZsYWdzX2xvY2s7CS8qIHByb3RlY3QgdXBkYXRpbmcgb2YgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIGdlbmVyYWwgZmxhZ3MgKi8KIAl1OCByZW1vdGVfYWN0X3N0YXRlOwkvKiByZW1vdGUgcGFydGl0aW9uJ3MgYWN0X3N0YXRlICovCkBAIC02OTQsOCArNzAzLDkgQEAKIAogLyogc3RydWN0IHhwY19wYXJ0aXRpb25fdXYgZmxhZ3MgKi8KIAotI2RlZmluZSBYUENfUF9IRUFSVEJFQVRfT0ZGTElORV9VVgkweDAwMDAwMDAxCi0jZGVmaW5lIFhQQ19QX0VOR0FHRURfVVYJCTB4MDAwMDAwMDIKKyNkZWZpbmUgWFBDX1BfSEVBUlRCRUFUX09GRkxJTkVfVVYJCTB4MDAwMDAwMDEKKyNkZWZpbmUgWFBDX1BfRU5HQUdFRF9VVgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgWFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWCTB4MDAwMDAwMDQKIAogLyogc3RydWN0IHhwY19wYXJ0aXRpb25fdXYgYWN0X3N0YXRlIGNoYW5nZSByZXF1ZXN0cyAqLwogCkBAIC04MDQsNiArODE0LDcgQEAKIGV4dGVybiB2b2lkIHhwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICosIGludCwgaW50KTsKIGV4dGVybiB2b2lkIHhwY19kaXNjb25uZWN0X3dhaXQoaW50KTsKIGV4dGVybiBpbnQgKCp4cGNfc2V0dXBfcGFydGl0aW9uc19zbikgKHZvaWQpOworZXh0ZXJuIHZvaWQgKCp4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbikgKHZvaWQpOwogZXh0ZXJuIGVudW0geHBfcmV0dmFsICgqeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhKSAodm9pZCAqLCB1NjQgKiwKIAkJCQkJCQkgdW5zaWduZWQgbG9uZyAqLAogCQkJCQkJCSBzaXplX3QgKik7CkBAIC04NDYsOCArODU3LDggQEAKIAkJCQkJICAgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiB2b2lkICgqeHBjX3NlbmRfY2hjdGxfb3BlbnJlcGx5KSAoc3RydWN0IHhwY19jaGFubmVsICosIHVuc2lnbmVkIGxvbmcgKik7CiAKLWV4dGVybiB2b2lkICgqeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKSAoc3RydWN0IHhwY19jaGFubmVsICosCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBlbnVtIHhwX3JldHZhbCAoKnhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqLAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyk7CiAKIGV4dGVybiBlbnVtIHhwX3JldHZhbCAoKnhwY19zZW5kX3BheWxvYWQpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwgdTMyLCB2b2lkICosCiAJCQkJCSAgIHUxNiwgdTgsIHhwY19ub3RpZnlfZnVuYywgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX2NoYW5uZWwuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX2NoYW5uZWwuYwppbmRleCA0NWZkNjUzLi45OWEyNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19jaGFubmVsLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfY2hhbm5lbC5jCkBAIC0xODMsNiArMTgzLDcgQEAKIAkgICAgJnBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJnc1tjaF9udW1iZXJdOwogCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKIAllbnVtIHhwX3JldHZhbCByZWFzb247CisJZW51bSB4cF9yZXR2YWwgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwogCkBAIC0zOTksOCArNDAwLDEzIEBACiAJCURCVUdfT04oYXJncy0+bG9jYWxfbmVudHJpZXMgPT0gMCk7CiAJCURCVUdfT04oYXJncy0+cmVtb3RlX25lbnRyaWVzID09IDApOwogCisJCXJldCA9IHhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYShjaCwgYXJncy0+bG9jYWxfbXNncXVldWVfcGEpOworCQlpZiAocmV0ICE9IHhwU3VjY2VzcykgeworCQkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgcmV0LCAmaXJxX2ZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CiAJCWNoLT5mbGFncyB8PSBYUENfQ19ST1BFTlJFUExZOwotCQl4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEoY2gsIGFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhKTsKIAogCQlpZiAoYXJncy0+bG9jYWxfbmVudHJpZXMgPCBjaC0+cmVtb3RlX25lbnRyaWVzKSB7CiAJCQlkZXZfZGJnKHhwY19jaGFuLCAiWFBDX0NIQ1RMX09QRU5SRVBMWTogbmV3ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYwppbmRleCA2NTc2MTcwLi4xYWI5ZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCkBAIC0xNzEsNiArMTcxLDcgQEAKIH07CiAKIGludCAoKnhwY19zZXR1cF9wYXJ0aXRpb25zX3NuKSAodm9pZCk7Cit2b2lkICgqeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24pICh2b2lkKTsKIGVudW0geHBfcmV0dmFsICgqeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhKSAodm9pZCAqYnVmLCB1NjQgKmNvb2tpZSwKIAkJCQkJCSAgdW5zaWduZWQgbG9uZyAqcnBfcGEsCiAJCQkJCQkgIHNpemVfdCAqbGVuKTsKQEAgLTIxNyw4ICsyMTgsOCBAQAogdm9pZCAoKnhwY19zZW5kX2NoY3RsX29wZW5yZXBseSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCiAJCQkJICB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpOwogCi12b2lkICgqeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKSAoc3RydWN0IHhwY19jaGFubmVsICpjaCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbXNncXVldWVfcGEpOworZW51bSB4cF9yZXR2YWwgKCp4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dxdWV1ZV9wYSk7CiAKIGVudW0geHBfcmV0dmFsICgqeHBjX3NlbmRfcGF5bG9hZCkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHUzMiBmbGFncywKIAkJCQkgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfc2l6ZSwKQEAgLTk5OCw2ICs5OTksNyBAQAogc3RhdGljIHZvaWQKIHhwY190ZWFyZG93bl9wYXJ0aXRpb25zKHZvaWQpCiB7CisJeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24oKTsKIAlrZnJlZSh4cGNfcGFydGl0aW9ucyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3NuMi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKaW5kZXggMmU5NzU3Ni4uZWFhYTk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKQEAgLTY2LDYgKzY2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCit4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbl9zbjIodm9pZCkKK3sKKwkvKiBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgKi8KK30KKwogLyogU0hfSVBJX0FDQ0VTUyBzaHViIHJlZ2lzdGVyIHZhbHVlIG9uIHN0YXJ0dXAgKi8KIHN0YXRpYyB1NjQgeHBjX3NoMV9JUElfYWNjZXNzX3NuMjsKIHN0YXRpYyB1NjQgeHBjX3NoMl9JUElfYWNjZXNzMF9zbjI7CkBAIC00MzYsMTEgKzQ0MiwxMiBAQAogCVhQQ19TRU5EX0xPQ0FMX05PVElGWV9JUlFfU04yKGNoLCBYUENfQ0hDVExfTVNHUkVRVUVTVCk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYV9zbjIoc3RydWN0IHhwY19jaGFubmVsICpjaCwKIAkJCQl1bnNpZ25lZCBsb25nIG1zZ3F1ZXVlX3BhKQogewogCWNoLT5zbi5zbjIucmVtb3RlX21zZ3F1ZXVlX3BhID0gbXNncXVldWVfcGE7CisJcmV0dXJuIHhwU3VjY2VzczsKIH0KIAogLyoKQEAgLTE3MzcsMjAgKzE3NDQsMjAgQEAKIHsKIAlzdHJ1Y3QgeHBjX2NoYW5uZWxfc24yICpjaF9zbjIgPSAmY2gtPnNuLnNuMjsKIAlzdHJ1Y3QgeHBjX21zZ19zbjIgKm1zZzsKLQlzNjQgcHV0OworCXM2NCBwdXQsIHJlbW90ZV9uZW50cmllcyA9IGNoLT5yZW1vdGVfbmVudHJpZXM7CiAKIAkvKiBmbGFncyBhcmUgemVyb2VkIHdoZW4gdGhlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgKi8KLQlpZiAoY2hfc24yLT5yZW1vdGVfR1AucHV0IDwgY2gtPnJlbW90ZV9uZW50cmllcykKKwlpZiAoY2hfc24yLT5yZW1vdGVfR1AucHV0IDwgcmVtb3RlX25lbnRyaWVzKQogCQlyZXR1cm47CiAKLQlwdXQgPSBtYXgoY2hfc24yLT53X3JlbW90ZV9HUC5wdXQsIGNoLT5yZW1vdGVfbmVudHJpZXMpOworCXB1dCA9IG1heChjaF9zbjItPndfcmVtb3RlX0dQLnB1dCwgcmVtb3RlX25lbnRyaWVzKTsKIAlkbyB7CiAJCW1zZyA9IChzdHJ1Y3QgeHBjX21zZ19zbjIgKikoKHU2NCljaF9zbjItPnJlbW90ZV9tc2dxdWV1ZSArCi0JCQkJCSAgICAgKHB1dCAlIGNoLT5yZW1vdGVfbmVudHJpZXMpICoKKwkJCQkJICAgICAocHV0ICUgcmVtb3RlX25lbnRyaWVzKSAqCiAJCQkJCSAgICAgY2gtPmVudHJ5X3NpemUpOwogCQlEQlVHX09OKCEobXNnLT5mbGFncyAmIFhQQ19NX1NOMl9SRUFEWSkpOwogCQlEQlVHX09OKCEobXNnLT5mbGFncyAmIFhQQ19NX1NOMl9ET05FKSk7Ci0JCURCVUdfT04obXNnLT5udW1iZXIgIT0gcHV0IC0gY2gtPnJlbW90ZV9uZW50cmllcyk7CisJCURCVUdfT04obXNnLT5udW1iZXIgIT0gcHV0IC0gcmVtb3RlX25lbnRyaWVzKTsKIAkJbXNnLT5mbGFncyA9IDA7CiAJfSB3aGlsZSAoKytwdXQgPCBjaF9zbjItPnJlbW90ZV9HUC5wdXQpOwogfQpAQCAtMjMxNSw2ICsyMzIyLDcgQEAKIAlzaXplX3QgYnVmX3NpemU7CiAKIAl4cGNfc2V0dXBfcGFydGl0aW9uc19zbiA9IHhwY19zZXR1cF9wYXJ0aXRpb25zX3NuX3NuMjsKKwl4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbiA9IHhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuX3NuMjsKIAl4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGEgPSB4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGFfc24yOwogCXhwY19zZXR1cF9yc3ZkX3BhZ2Vfc24gPSB4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuX3NuMjsKIAl4cGNfaW5jcmVtZW50X2hlYXJ0YmVhdCA9IHhwY19pbmNyZW1lbnRfaGVhcnRiZWF0X3NuMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCmluZGV4IDI5YzA1MDIuLmY3ZmZmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYwpAQCAtMzEsNiArMzEsMjEgQEAKICNpbmNsdWRlICIuLi9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5oIgogI2luY2x1ZGUgInhwYy5oIgogCisjaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCitzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSB7CisJX191NjQJdmVjdG9yCQk6ICA4LAorCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCWRlc3RfbW9kZQk6ICAxLAorCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJcG9sYXJpdHkJOiAgMSwKKwkJX19yZXNlcnZlZF8xCTogIDEsCisJCXRyaWdnZXIJCTogIDEsCisJCW1hc2sJCTogIDEsCisJCV9fcmVzZXJ2ZWRfMgk6IDE1LAorCQlkZXN0CQk6IDMyOworfTsKKyNlbmRpZgorCiBzdGF0aWMgYXRvbWljNjRfdCB4cGNfaGVhcnRiZWF0X3V2Owogc3RhdGljIERFQ0xBUkVfQklUTUFQKHhwY19oZWFydGJlYXRpbmdfdG9fbWFza191diwgWFBfTUFYX05QQVJUSVRJT05TX1VWKTsKIApAQCAtNTYsMjYgKzcxLDUyIEBACiAJZm9yIChwYXJ0aWQgPSAwOyBwYXJ0aWQgPCBYUF9NQVhfTlBBUlRJVElPTlNfVVY7IHBhcnRpZCsrKSB7CiAJCXBhcnRfdXYgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXS5zbi51djsKIAorCQltdXRleF9pbml0KCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOwogCQlzcGluX2xvY2tfaW5pdCgmcGFydF91di0+ZmxhZ3NfbG9jayk7CiAJCXBhcnRfdXYtPnJlbW90ZV9hY3Rfc3RhdGUgPSBYUENfUF9BU19JTkFDVElWRTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCit4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbl91dih2b2lkKQoreworCXNob3J0IHBhcnRpZDsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbl91diAqcGFydF91djsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWZvciAocGFydGlkID0gMDsgcGFydGlkIDwgWFBfTUFYX05QQVJUSVRJT05TX1VWOyBwYXJ0aWQrKykgeworCQlwYXJ0X3V2ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF0uc24udXY7CisKKwkJaWYgKHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyAhPSBOVUxMKSB7CisJCQltdXRleF9sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCQlwYXJ0X3V2LT5mbGFncyAmPSB+WFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCWtmcmVlKHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyk7CisJCQlwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2MgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJ0X3V2LT4KKwkJCQkgICAgIGNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzY19tdXRleCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQKIHhwY19nZXRfZ3J1X21xX2lycV91dihzdHJ1Y3QgeHBjX2dydV9tcV91diAqbXEsIGludCBjcHUsIGNoYXIgKmlycV9uYW1lKQogeworCWludCBtbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtcS0+bW1yX2JsYWRlKTsKKwogI2lmIGRlZmluZWQgQ09ORklHX1g4Nl82NAogCW1xLT5pcnEgPSB1dl9zZXR1cF9pcnEoaXJxX25hbWUsIGNwdSwgbXEtPm1tcl9ibGFkZSwgbXEtPm1tcl9vZmZzZXQpOwogCWlmIChtcS0+aXJxIDwgMCkgewogCQlkZXZfZXJyKHhwY19wYXJ0LCAidXZfc2V0dXBfaXJxKCkgcmV0dXJuZWQgZXJyb3I9JWRcbiIsCi0JCQltcS0+aXJxKTsKKwkJCS1tcS0+aXJxKTsKKwkJcmV0dXJuIG1xLT5pcnE7CiAJfQogCi0jZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0X0dFTkVSSUMgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKLQlpbnQgbW1yX3Bub2RlOwotCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCW1xLT5tbXJfdmFsdWUgPSB1dl9yZWFkX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1xLT5tbXJfb2Zmc2V0KTsKIAorI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCiAJaWYgKHN0cmNtcChpcnFfbmFtZSwgWFBDX0FDVElWQVRFX0lSUV9OQU1FKSA9PSAwKQogCQltcS0+aXJxID0gU0dJX1hQQ19BQ1RJVkFURTsKIAllbHNlIGlmIChzdHJjbXAoaXJxX25hbWUsIFhQQ19OT1RJRllfSVJRX05BTUUpID09IDApCkBAIC04MywxMCArMTI0LDggQEAKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobXEtPm1tcl9ibGFkZSk7Ci0JbW1yX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpY3B1X3BoeXNpY2FsX2lkKGNwdSkgPDwgMzIgfCBtcS0+aXJxOwotCi0JdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbXEtPm1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7CisJbXEtPm1tcl92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKWNwdV9waHlzaWNhbF9pZChjcHUpIDw8IDMyIHwgbXEtPmlycTsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQobW1yX3Bub2RlLCBtcS0+bW1yX29mZnNldCwgbXEtPm1tcl92YWx1ZSk7CiAjZWxzZQogCSNlcnJvciBub3QgYSBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC0xMjcsNyArMTY2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAjZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0X0dFTkVSSUMgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKLQlyZXQgPSBzbl9tcV93YXRjaGxpc3RfYWxsb2MobXEtPm1tcl9ibGFkZSwgdXZfZ3BhKG1xLT5hZGRyZXNzKSwKKwlyZXQgPSBzbl9tcV93YXRjaGxpc3RfYWxsb2MobXEtPm1tcl9ibGFkZSwgKHZvaWQgKil1dl9ncGEobXEtPmFkZHJlc3MpLAogCQkJCSAgICBtcS0+b3JkZXIsICZtcS0+bW1yX29mZnNldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInNuX21xX3dhdGNobGlzdF9hbGxvYygpIGZhaWxlZCwgcmV0PSVkXG4iLApAQCAtMTY4LDEyICsyMDcsMjIgQEAKIAlpbnQgcGdfb3JkZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHhwY19ncnVfbXFfdXYgKm1xOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICptbXJfdmFsdWU7CiAKIAltcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGNfZ3J1X21xX3V2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1xID09IE5VTEwpIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInhwY19jcmVhdGVfZ3J1X21xX3V2KCkgZmFpbGVkIHRvIGttYWxsb2MoKSAiCiAJCQkiYSB4cGNfZ3J1X21xX3V2IHN0cnVjdHVyZVxuIik7CiAJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0XzA7CisJfQorCisJbXEtPmdydV9tcV9kZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKG1xLT5ncnVfbXFfZGVzYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoeHBjX3BhcnQsICJ4cGNfY3JlYXRlX2dydV9tcV91digpIGZhaWxlZCB0byBrbWFsbG9jKCkgIgorCQkJImEgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyBzdHJ1Y3R1cmVcbiIpOworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF8xOwogCX0KIApAQCAtMTk0LDE0ICsyNDMsNiBAQAogCX0KIAltcS0+YWRkcmVzcyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAotCXJldCA9IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZShtcS0+YWRkcmVzcywgbXFfc2l6ZSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoeHBjX3BhcnQsICJncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoKSByZXR1cm5lZCAiCi0JCQkiZXJyb3I9JWRcbiIsIHJldCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0XzM7Ci0JfQotCiAJLyogZW5hYmxlIGdlbmVyYXRpb24gb2YgaXJxIHdoZW4gR1JVIG1xIG9wZXJhdGlvbiBvY2N1cnMgdG8gdGhpcyBtcSAqLwogCXJldCA9IHhwY19ncnVfbXFfd2F0Y2hsaXN0X2FsbG9jX3V2KG1xKTsKIAlpZiAocmV0ICE9IDApCkBAIC0yMTQsMTAgKzI1NSwyMCBAQAogCXJldCA9IHJlcXVlc3RfaXJxKG1xLT5pcnEsIGlycV9oYW5kbGVyLCAwLCBpcnFfbmFtZSwgTlVMTCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJyZXF1ZXN0X2lycShpcnE9JWQpIHJldHVybmVkIGVycm9yPSVkXG4iLAotCQkJbXEtPmlycSwgcmV0KTsKKwkJCW1xLT5pcnEsIC1yZXQpOwogCQlnb3RvIG91dF81OwogCX0KIAorCW1tcl92YWx1ZSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtcS0+bW1yX3ZhbHVlOworCXJldCA9IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZShtcS0+Z3J1X21xX2Rlc2MsIG1xLT5hZGRyZXNzLCBtcV9zaXplLAorCQkJCSAgICAgICBuaWQsIG1tcl92YWx1ZS0+dmVjdG9yLCBtbXJfdmFsdWUtPmRlc3QpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKCkgcmV0dXJuZWQgIgorCQkJImVycm9yPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF82OworCX0KKwogCS8qIGFsbG93IG90aGVyIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoaXMgR1JVIG1xICovCiAJeHBfcmV0ID0geHBfZXhwYW5kX21lbXByb3RlY3QoeHBfcGEobXEtPmFkZHJlc3MpLCBtcV9zaXplKTsKIAlpZiAoeHBfcmV0ICE9IHhwU3VjY2VzcykgewpAQCAtMjM3LDggKzI4OCwxMCBAQAogb3V0XzM6CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltcS0+YWRkcmVzcywgcGdfb3JkZXIpOwogb3V0XzI6Ci0Ja2ZyZWUobXEpOworCWtmcmVlKG1xLT5ncnVfbXFfZGVzYyk7CiBvdXRfMToKKwlrZnJlZShtcSk7CitvdXRfMDoKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC0yNjgsMTMgKzMyMSwxNCBAQAogfQogCiBzdGF0aWMgZW51bSB4cF9yZXR2YWwKLXhwY19zZW5kX2dydV9tc2codW5zaWduZWQgbG9uZyBtcV9ncGEsIHZvaWQgKm1zZywgc2l6ZV90IG1zZ19zaXplKQoreHBjX3NlbmRfZ3J1X21zZyhzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqZ3J1X21xX2Rlc2MsIHZvaWQgKm1zZywKKwkJIHNpemVfdCBtc2dfc2l6ZSkKIHsKIAllbnVtIHhwX3JldHZhbCB4cF9yZXQ7CiAJaW50IHJldDsKIAogCXdoaWxlICgxKSB7Ci0JCXJldCA9IGdydV9zZW5kX21lc3NhZ2VfZ3BhKG1xX2dwYSwgbXNnLCBtc2dfc2l6ZSk7CisJCXJldCA9IGdydV9zZW5kX21lc3NhZ2VfZ3BhKGdydV9tcV9kZXNjLCBtc2csIG1zZ19zaXplKTsKIAkJaWYgKHJldCA9PSBNUUVfT0spIHsKIAkJCXhwX3JldCA9IHhwU3VjY2VzczsKIAkJCWJyZWFrOwpAQCAtNDIxLDcgKzQ3NSwxNSBAQAogCQlwYXJ0X3V2LT5hY3Rfc3RhdGVfcmVxID0gWFBDX1BfQVNSX0FDVElWQVRFX1VWOwogCQlwYXJ0LT5yZW1vdGVfcnBfcGEgPSBtc2ctPnJwX2dwYTsgLyogISEhIF9wYSBpcyBfZ3BhICovCiAJCXBhcnQtPnJlbW90ZV9ycF90c19qaWZmaWVzID0gbXNnX2hkci0+cnBfdHNfamlmZmllczsKLQkJcGFydF91di0+cmVtb3RlX2FjdGl2YXRlX21xX2dwYSA9IG1zZy0+YWN0aXZhdGVfbXFfZ3BhOworCisJCWlmIChtc2ctPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSAhPQorCQkgICAgcGFydF91di0+YWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCXBhcnRfdXYtPmZsYWdzICY9IH5YUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0X3V2LT5mbGFnc19sb2NrLCBpcnFfZmxhZ3MpOworCQkJcGFydF91di0+YWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhID0KKwkJCSAgICBtc2ctPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsKKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4cGNfYWN0aXZhdGVfSVJRX3JjdmRfbG9jaywgaXJxX2ZsYWdzKTsKIAogCQkoKndha2V1cF9oYl9jaGVja2VyKSsrOwpAQCAtNDk4LDcgKzU2MCw3IEBACiAJCWFyZ3MgPSAmcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzW21zZy0+Y2hfbnVtYmVyXTsKIAkJYXJncy0+cmVtb3RlX25lbnRyaWVzID0gbXNnLT5yZW1vdGVfbmVudHJpZXM7CiAJCWFyZ3MtPmxvY2FsX25lbnRyaWVzID0gbXNnLT5sb2NhbF9uZW50cmllczsKLQkJYXJncy0+bG9jYWxfbXNncXVldWVfcGEgPSBtc2ctPmxvY2FsX25vdGlmeV9tcV9ncGE7CisJCWFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhID0gbXNnLT5ub3RpZnlfZ3J1X21xX2Rlc2NfZ3BhOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5jaGN0bF9sb2NrLCBpcnFfZmxhZ3MpOwogCQlwYXJ0LT5jaGN0bC5mbGFnc1ttc2ctPmNoX251bWJlcl0gfD0gWFBDX0NIQ1RMX09QRU5SRVBMWTsKQEAgLTU1OCw5ICs2MjAsMTAgQEAKIAlzaG9ydCBwYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CiAJaW50IHdha2V1cF9oYl9jaGVja2VyID0gMDsKKwlpbnQgcGFydF9yZWZlcmVuY2VkOwogCiAJd2hpbGUgKDEpIHsKLQkJbXNnX2hkciA9IGdydV9nZXRfbmV4dF9tZXNzYWdlKHhwY19hY3RpdmF0ZV9tcV91di0+YWRkcmVzcyk7CisJCW1zZ19oZHIgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmdydV9tcV9kZXNjKTsKIAkJaWYgKG1zZ19oZHIgPT0gTlVMTCkKIAkJCWJyZWFrOwogCkBAIC01NzEsMTQgKzYzNCwxNSBAQAogCQkJCXBhcnRpZCk7CiAJCX0gZWxzZSB7CiAJCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07Ci0JCQlpZiAoeHBjX3BhcnRfcmVmKHBhcnQpKSB7Ci0JCQkJeHBjX2hhbmRsZV9hY3RpdmF0ZV9tcV9tc2dfdXYocGFydCwgbXNnX2hkciwKLQkJCQkJCQkgICAgJndha2V1cF9oYl9jaGVja2VyKTsKKworCQkJcGFydF9yZWZlcmVuY2VkID0geHBjX3BhcnRfcmVmKHBhcnQpOworCQkJeHBjX2hhbmRsZV9hY3RpdmF0ZV9tcV9tc2dfdXYocGFydCwgbXNnX2hkciwKKwkJCQkJCSAgICAgICZ3YWtldXBfaGJfY2hlY2tlcik7CisJCQlpZiAocGFydF9yZWZlcmVuY2VkKQogCQkJCXhwY19wYXJ0X2RlcmVmKHBhcnQpOwotCQkJfQogCQl9CiAKLQkJZ3J1X2ZyZWVfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmFkZHJlc3MsIG1zZ19oZHIpOworCQlncnVfZnJlZV9tZXNzYWdlKHhwY19hY3RpdmF0ZV9tcV91di0+Z3J1X21xX2Rlc2MsIG1zZ19oZHIpOwogCX0KIAogCWlmICh3YWtldXBfaGJfY2hlY2tlcikKQEAgLTU4OCwyMSArNjUyLDczIEBACiB9CiAKIHN0YXRpYyBlbnVtIHhwX3JldHZhbAoreHBjX2NhY2hlX3JlbW90ZV9ncnVfbXFfZGVzY191dihzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqZ3J1X21xX2Rlc2MsCisJCQkJdW5zaWduZWQgbG9uZyBncnVfbXFfZGVzY19ncGEpCit7CisJZW51bSB4cF9yZXR2YWwgcmV0OworCisJcmV0ID0geHBfcmVtb3RlX21lbWNweSh1dl9ncGEoZ3J1X21xX2Rlc2MpLCBncnVfbXFfZGVzY19ncGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjKSk7CisJaWYgKHJldCA9PSB4cFN1Y2Nlc3MpCisJCWdydV9tcV9kZXNjLT5tcSA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwY19zZW5kX2FjdGl2YXRlX0lSUV91dihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCwgdm9pZCAqbXNnLCBzaXplX3QgbXNnX3NpemUsCiAJCQkgaW50IG1zZ190eXBlKQogewogCXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2ICptc2dfaGRyID0gbXNnOworCXN0cnVjdCB4cGNfcGFydGl0aW9uX3V2ICpwYXJ0X3V2ID0gJnBhcnQtPnNuLnV2OworCXN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICpncnVfbXFfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwllbnVtIHhwX3JldHZhbCByZXQ7CiAKIAlEQlVHX09OKG1zZ19zaXplID4gWFBDX0FDVElWQVRFX01TR19TSVpFX1VWKTsKIAogCW1zZ19oZHItPnR5cGUgPSBtc2dfdHlwZTsKLQltc2dfaGRyLT5wYXJ0aWQgPSBYUENfUEFSVElEKHBhcnQpOworCW1zZ19oZHItPnBhcnRpZCA9IHhwX3BhcnRpdGlvbl9pZDsKIAltc2dfaGRyLT5hY3Rfc3RhdGUgPSBwYXJ0LT5hY3Rfc3RhdGU7CiAJbXNnX2hkci0+cnBfdHNfamlmZmllcyA9IHhwY19yc3ZkX3BhZ2UtPnRzX2ppZmZpZXM7CiAKKwltdXRleF9sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworYWdhaW46CisJaWYgKCEocGFydF91di0+ZmxhZ3MgJiBYUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVYpKSB7CisJCWdydV9tcV9kZXNjID0gcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjOworCQlpZiAoZ3J1X21xX2Rlc2MgPT0gTlVMTCkgeworCQkJZ3J1X21xX2Rlc2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QKKwkJCQkJICAgICAgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKGdydV9tcV9kZXNjID09IE5VTEwpIHsKKwkJCQlyZXQgPSB4cE5vTWVtb3J5OworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyA9IGdydV9tcV9kZXNjOworCQl9CisKKwkJcmV0ID0geHBjX2NhY2hlX3JlbW90ZV9ncnVfbXFfZGVzY191dihncnVfbXFfZGVzYywKKwkJCQkJCSAgICAgIHBhcnRfdXYtPgorCQkJCQkJICAgICAgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhKTsKKwkJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpCisJCQlnb3RvIGRvbmU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCXBhcnRfdXYtPmZsYWdzIHw9IFhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwl9CisKIAkvKiA/Pz8gSXMgaG9sZGluZyBhIHNwaW5fbG9jayAoY2gtPmxvY2spIGR1cmluZyB0aGlzIGNhbGwgYSBiYWQgaWRlYT8gKi8KLQlyZXR1cm4geHBjX3NlbmRfZ3J1X21zZyhwYXJ0LT5zbi51di5yZW1vdGVfYWN0aXZhdGVfbXFfZ3BhLCBtc2csCi0JCQkJbXNnX3NpemUpOworCXJldCA9IHhwY19zZW5kX2dydV9tc2cocGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjLCBtc2csCisJCQkgICAgICAgbXNnX3NpemUpOworCWlmIChyZXQgIT0geHBTdWNjZXNzKSB7CisJCXNtcF9ybWIoKTsJLyogZW5zdXJlIGEgZnJlc2ggY29weSBvZiBwYXJ0X3V2LT5mbGFncyAqLworCQlpZiAoIShwYXJ0X3V2LT5mbGFncyAmIFhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVikpCisJCQlnb3RvIGFnYWluOworCX0KK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02MjAsNyArNzM2LDcgQEAKIHhwY19zZW5kX2FjdGl2YXRlX0lSUV9jaF91dihzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MsCiAJCQkgdm9pZCAqbXNnLCBzaXplX3QgbXNnX3NpemUsIGludCBtc2dfdHlwZSkKIHsKLQlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+bnVtYmVyXTsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+cGFydGlkXTsKIAllbnVtIHhwX3JldHZhbCByZXQ7CiAKIAlyZXQgPSB4cGNfc2VuZF9hY3RpdmF0ZV9JUlFfdXYocGFydCwgbXNnLCBtc2dfc2l6ZSwgbXNnX3R5cGUpOwpAQCAtNjkyLDcgKzgwOCw4IEBACiBzdGF0aWMgaW50CiB4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuX3V2KHN0cnVjdCB4cGNfcnN2ZF9wYWdlICpycCkKIHsKLQlycC0+c24uYWN0aXZhdGVfbXFfZ3BhID0gdXZfZ3BhKHhwY19hY3RpdmF0ZV9tcV91di0+YWRkcmVzcyk7CisJcnAtPnNuLmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJICAgIHV2X2dwYSh4cGNfYWN0aXZhdGVfbXFfdXYtPmdydV9tcV9kZXNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzg3LDcgKzkwNCw4IEBACiAKIAlwYXJ0LT5yZW1vdGVfcnBfcGEgPSByZW1vdGVfcnBfZ3BhOyAvKiAhISEgX3BhIGhlcmUgaXMgcmVhbGx5IF9ncGEgKi8KIAlwYXJ0LT5yZW1vdGVfcnBfdHNfamlmZmllcyA9IHJlbW90ZV9ycC0+dHNfamlmZmllczsKLQlwYXJ0LT5zbi51di5yZW1vdGVfYWN0aXZhdGVfbXFfZ3BhID0gcmVtb3RlX3JwLT5zbi5hY3RpdmF0ZV9tcV9ncGE7CisJcGFydC0+c24udXYuYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhID0KKwkgICAgcmVtb3RlX3JwLT5zbi5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CiAKIAkvKgogCSAqID8/PyBJcyBpdCBhIGdvb2QgaWRlYSB0byBtYWtlIHRoaXMgY29uZGl0aW9uYWwgb24gd2hhdCBpcwpAQCAtNzk1LDcgKzkxMyw4IEBACiAJICovCiAJaWYgKHBhcnQtPnNuLnV2LnJlbW90ZV9hY3Rfc3RhdGUgPT0gWFBDX1BfQVNfSU5BQ1RJVkUpIHsKIAkJbXNnLnJwX2dwYSA9IHV2X2dwYSh4cGNfcnN2ZF9wYWdlKTsKLQkJbXNnLmFjdGl2YXRlX21xX2dwYSA9IHhwY19yc3ZkX3BhZ2UtPnNuLmFjdGl2YXRlX21xX2dwYTsKKwkJbXNnLmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJCSAgICB4cGNfcnN2ZF9wYWdlLT5zbi5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CiAJCXhwY19zZW5kX2FjdGl2YXRlX0lSUV9wYXJ0X3V2KHBhcnQsICZtc2csIHNpemVvZihtc2cpLAogCQkJCQkgICBYUENfQUNUSVZBVEVfTVFfTVNHX0FDVElWQVRFX1JFUV9VVik7CiAJfQpAQCAtODU3LDcgKzk3Niw4IEBACiAJCWlmIChoZWFkLT5maXJzdCA9PSBOVUxMKQogCQkJaGVhZC0+bGFzdCA9IE5VTEw7CiAJfQotCWhlYWQtPm5fZW50cmllcysrOworCWhlYWQtPm5fZW50cmllcy0tOworCUJVR19PTihoZWFkLT5uX2VudHJpZXMgPCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBpcnFfZmxhZ3MpOwogCWZpcnN0LT5uZXh0ID0gTlVMTDsKIAlyZXR1cm4gZmlyc3Q7CkBAIC04NzYsOCArOTk2LDcgQEAKIAllbHNlCiAJCWhlYWQtPmZpcnN0ID0gbGFzdDsKIAloZWFkLT5sYXN0ID0gbGFzdDsKLQloZWFkLT5uX2VudHJpZXMtLTsKLQlCVUdfT04oaGVhZC0+bl9lbnRyaWVzIDwgMCk7CisJaGVhZC0+bl9lbnRyaWVzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgaXJxX2ZsYWdzKTsKIH0KIApAQCAtMTAzNyw2ICsxMTU2LDEyIEBACiAKIAlEQlVHX09OKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKTsKIAorCWNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0CisJCQkJCQkgICBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjKSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCWlmIChjaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4geHBOb01lbW9yeTsKKwogCXJldCA9IHhwY19hbGxvY2F0ZV9zZW5kX21zZ19zbG90X3V2KGNoKTsKIAlpZiAocmV0ID09IHhwU3VjY2VzcykgewogCkBAIC0xMDYwLDcgKzExODUsOCBAQAogCiAJREJVR19PTighc3Bpbl9pc19sb2NrZWQoJmNoLT5sb2NrKSk7CiAKLQljaF91di0+cmVtb3RlX25vdGlmeV9tcV9ncGEgPSAwOworCWtmcmVlKGNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjKTsKKwljaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyA9IE5VTEw7CiAKIAlpZiAoY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApIHsKIAkJeHBjX2luaXRfZmlmb191digmY2hfdXYtPm1zZ19zbG90X2ZyZWVfbGlzdCk7CkBAIC0xMTExLDcgKzEyMzcsNyBAQAogCW1zZy5jaF9udW1iZXIgPSBjaC0+bnVtYmVyOwogCW1zZy5sb2NhbF9uZW50cmllcyA9IGNoLT5sb2NhbF9uZW50cmllczsKIAltc2cucmVtb3RlX25lbnRyaWVzID0gY2gtPnJlbW90ZV9uZW50cmllczsKLQltc2cubG9jYWxfbm90aWZ5X21xX2dwYSA9IHV2X2dwYSh4cGNfbm90aWZ5X21xX3V2KTsKKwltc2cubm90aWZ5X2dydV9tcV9kZXNjX2dwYSA9IHV2X2dwYSh4cGNfbm90aWZ5X21xX3V2LT5ncnVfbXFfZGVzYyk7CiAJeHBjX3NlbmRfYWN0aXZhdGVfSVJRX2NoX3V2KGNoLCBpcnFfZmxhZ3MsICZtc2csIHNpemVvZihtc2cpLAogCQkJCSAgICBYUENfQUNUSVZBVEVfTVFfTVNHX0NIQ1RMX09QRU5SRVBMWV9VVik7CiB9CkBAIC0xMTI4LDExICsxMjU0LDE1IEBACiAJeHBjX3dha2V1cF9jaGFubmVsX21ncihwYXJ0KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBlbnVtIHhwX3JldHZhbAogeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhX3V2KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dxdWV1ZV9wYSkKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGdydV9tcV9kZXNjX2dwYSkKIHsKLQljaC0+c24udXYucmVtb3RlX25vdGlmeV9tcV9ncGEgPSBtc2dxdWV1ZV9wYTsKKwlzdHJ1Y3QgeHBjX2NoYW5uZWxfdXYgKmNoX3V2ID0gJmNoLT5zbi51djsKKworCURCVUdfT04oY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MgPT0gTlVMTCk7CisJcmV0dXJuIHhwY19jYWNoZV9yZW1vdGVfZ3J1X21xX2Rlc2NfdXYoY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsCisJCQkJCSAgICAgICBncnVfbXFfZGVzY19ncGEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTMzOSw3ICsxNDY5LDggQEAKIAlzaG9ydCBwYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CiAKLQl3aGlsZSAoKG1zZyA9IGdydV9nZXRfbmV4dF9tZXNzYWdlKHhwY19ub3RpZnlfbXFfdXYpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChtc2cgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfbm90aWZ5X21xX3V2LT5ncnVfbXFfZGVzYykpICE9CisJICAgICAgIE5VTEwpIHsKIAogCQlwYXJ0aWQgPSBtc2ctPmhkci5wYXJ0aWQ7CiAJCWlmIChwYXJ0aWQgPCAwIHx8IHBhcnRpZCA+PSBYUF9NQVhfTlBBUlRJVElPTlNfVVYpIHsKQEAgLTEzNTQsNyArMTQ4NSw3IEBACiAJCQl9CiAJCX0KIAotCQlncnVfZnJlZV9tZXNzYWdlKHhwY19ub3RpZnlfbXFfdXYsIG1zZyk7CisJCWdydV9mcmVlX21lc3NhZ2UoeHBjX25vdGlmeV9tcV91di0+Z3J1X21xX2Rlc2MsIG1zZyk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTQzOCw3ICsxNTY5LDggQEAKIAltc2ctPmhkci5tc2dfc2xvdF9udW1iZXIgPSBtc2dfc2xvdC0+bXNnX3Nsb3RfbnVtYmVyOwogCW1lbWNweSgmbXNnLT5wYXlsb2FkLCBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOwogCi0JcmV0ID0geHBjX3NlbmRfZ3J1X21zZyhjaC0+c24udXYucmVtb3RlX25vdGlmeV9tcV9ncGEsIG1zZywgbXNnX3NpemUpOworCXJldCA9IHhwY19zZW5kX2dydV9tc2coY2gtPnNuLnV2LmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsIG1zZywKKwkJCSAgICAgICBtc2dfc2l6ZSk7CiAJaWYgKHJldCA9PSB4cFN1Y2Nlc3MpCiAJCWdvdG8gb3V0XzE7CiAKQEAgLTE1MjksNyArMTY2MSw3IEBACiAJbXNnLT5oZHIucGFydGlkID0geHBfcGFydGl0aW9uX2lkOwogCW1zZy0+aGRyLnNpemUgPSAwOwkvKiBzaXplIG9mIHplcm8gaW5kaWNhdGVzIHRoaXMgaXMgYW4gQUNLICovCiAKLQlyZXQgPSB4cGNfc2VuZF9ncnVfbXNnKGNoLT5zbi51di5yZW1vdGVfbm90aWZ5X21xX2dwYSwgbXNnLAorCXJldCA9IHhwY19zZW5kX2dydV9tc2coY2gtPnNuLnV2LmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsIG1zZywKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHhwY19ub3RpZnlfbXFfbXNnaGRyX3V2KSk7CiAJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpCiAJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTigmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF0sIHJldCk7CkBAIC0xNTQxLDYgKzE2NzMsNyBAQAogeHBjX2luaXRfdXYodm9pZCkKIHsKIAl4cGNfc2V0dXBfcGFydGl0aW9uc19zbiA9IHhwY19zZXR1cF9wYXJ0aXRpb25zX3NuX3V2OworCXhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuID0geHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc25fdXY7CiAJeHBjX3Byb2Nlc3NfYWN0aXZhdGVfSVJRX3JjdmQgPSB4cGNfcHJvY2Vzc19hY3RpdmF0ZV9JUlFfcmN2ZF91djsKIAl4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGEgPSB4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGFfdXY7CiAJeHBjX3NldHVwX3JzdmRfcGFnZV9zbiA9IHhwY19zZXR1cF9yc3ZkX3BhZ2Vfc25fdXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jIGIvZHJpdmVycy9tbWMvY2FyZC9zZGlvX3VhcnQuYwppbmRleCA3OGFkNDg3Li4zNmE4ZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvc2Rpb191YXJ0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgpAQCAtOTMzLDY3ICs5MzQsNjQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IHNkaW9fdWFydF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgc2Rpb191YXJ0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGksIGxlbiA9IDA7Ci0Jb2ZmX3QgYmVnaW4gPSAwOworCWludCBpOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInNlcmluZm86MS4wIGRyaXZlciVzJXMgcmV2aXNpb246JXNcbiIsCisJc2VxX3ByaW50ZihtLCAic2VyaW5mbzoxLjAgZHJpdmVyJXMlcyByZXZpc2lvbjolc1xuIiwKIAkJICAgICAgICIiLCAiIiwgIiIpOwotCWZvciAoaSA9IDA7IGkgPCBVQVJUX05SICYmIGxlbiA8IFBBR0VfU0laRSAtIDk2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCXN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCA9IHNkaW9fdWFydF9wb3J0X2dldChpKTsKIAkJaWYgKHBvcnQpIHsKLQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJWQ6IHVhcnQ6U0RJTyIsIGkpOworCQkJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6U0RJTyIsIGkpOwogCQkJaWYoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgdHg6JWQgcng6JWQiLAorCQkJCXNlcV9wcmludGYobSwgIiB0eDolZCByeDolZCIsCiAJCQkJCSAgICAgICBwb3J0LT5pY291bnQudHgsIHBvcnQtPmljb3VudC5yeCk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5mcmFtZSkKLQkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiBmZTolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBmZTolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LmZyYW1lKTsKIAkJCQlpZiAocG9ydC0+aWNvdW50LnBhcml0eSkKLQkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiBwZTolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBwZTolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LnBhcml0eSk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5icmspCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgYnJrOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LmJyayk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5vdmVycnVuKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIG9lOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIG9lOiVkIiwKIAkJCQkJCSAgICAgICBwb3J0LT5pY291bnQub3ZlcnJ1bik7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5jdHMpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgY3RzOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIGN0czolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LmN0cyk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5kc3IpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgZHNyOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIGRzcjolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LmRzcik7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5ybmcpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgcm5nOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIHJuZzolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LnJuZyk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5kY2QpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgZGNkOiVkIiwKKwkJCQkJc2VxX3ByaW50ZihtLCAiIGRjZDolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LmRjZCk7CiAJCQl9Ci0JCQlzdHJjYXQocGFnZSwgIlxuIik7Ci0JCQlsZW4rKzsKIAkJCXNkaW9fdWFydF9wb3J0X3B1dChwb3J0KTsKLQkJfQotCi0JCWlmIChsZW4gKyBiZWdpbiA+IG9mZiArIGNvdW50KQotCQkJZ290byBkb25lOwotCQlpZiAobGVuICsgYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJfQogCX0KLQkqZW9mID0gMTsKLQotZG9uZToKLQlpZiAob2ZmID49IGxlbiArIGJlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZiAtIGJlZ2luKTsKLQlyZXR1cm4gKGNvdW50IDwgYmVnaW4gKyBsZW4gLSBvZmYpID8gY291bnQgOiAoYmVnaW4gKyBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkaW9fdWFydF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNkaW9fdWFydF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZGlvX3VhcnRfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzZGlvX3VhcnRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNkaW9fdWFydF9vcHMgPSB7CiAJLm9wZW4JCQk9IHNkaW9fdWFydF9vcGVuLAogCS5jbG9zZQkJCT0gc2Rpb191YXJ0X2Nsb3NlLApAQCAtMTAwNyw3ICsxMDA1LDcgQEAKIAkuYnJlYWtfY3RsCQk9IHNkaW9fdWFydF9icmVha19jdGwsCiAJLnRpb2NtZ2V0CQk9IHNkaW9fdWFydF90aW9jbWdldCwKIAkudGlvY21zZXQJCT0gc2Rpb191YXJ0X3Rpb2Ntc2V0LAotCS5yZWFkX3Byb2MJCT0gc2Rpb191YXJ0X3JlYWRfcHJvYywKKwkucHJvY19mb3BzCQk9ICZzZGlvX3VhcnRfcHJvY19mb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpzZGlvX3VhcnRfdHR5X2RyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggZGY2Y2U0YS4uMTQ0NWVhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CkBAIC01MjMsNiArNTI0LDEwNSBAQAogfQogRVhQT1JUX1NZTUJPTChtbWNfdmRkcmFuZ2VfdG9fb2NybWFzayk7CiAKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisKKy8qKgorICogbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayAtIHJldHVybiBtYXNrIG9mIHN1cHBvcnRlZCB2b2x0YWdlcworICogQHN1cHBseTogcmVndWxhdG9yIHRvIHVzZQorICoKKyAqIFRoaXMgcmV0dXJucyBlaXRoZXIgYSBuZWdhdGl2ZSBlcnJubywgb3IgYSBtYXNrIG9mIHZvbHRhZ2VzIHRoYXQKKyAqIGNhbiBiZSBwcm92aWRlZCB0byBNTUMvU0QvU0RJTyBkZXZpY2VzIHVzaW5nIHRoZSBzcGVjaWZpZWQgdm9sdGFnZQorICogcmVndWxhdG9yLiAgVGhpcyB3b3VsZCBub3JtYWxseSBiZSBjYWxsZWQgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZQorICogTU1DIGhvc3QgYWRhcHRlci4KKyAqLworaW50IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2soc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5KQoreworCWludAkJCXJlc3VsdCA9IDA7CisJaW50CQkJY291bnQ7CisJaW50CQkJaTsKKworCWNvdW50ID0gcmVndWxhdG9yX2NvdW50X3ZvbHRhZ2VzKHN1cHBseSk7CisJaWYgKGNvdW50IDwgMCkKKwkJcmV0dXJuIGNvdW50OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaW50CQl2ZGRfdVY7CisJCWludAkJdmRkX21WOworCisJCXZkZF91ViA9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3VwcGx5LCBpKTsKKwkJaWYgKHZkZF91ViA8PSAwKQorCQkJY29udGludWU7CisKKwkJdmRkX21WID0gdmRkX3VWIC8gMTAwMDsKKwkJcmVzdWx0IHw9IG1tY192ZGRyYW5nZV90b19vY3JtYXNrKHZkZF9tViwgdmRkX21WKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKTsKKworLyoqCisgKiBtbWNfcmVndWxhdG9yX3NldF9vY3IgLSBzZXQgcmVndWxhdG9yIHRvIG1hdGNoIGhvc3QtPmlvcyB2b2x0YWdlCisgKiBAdmRkX2JpdDogemVybyBmb3IgcG93ZXIgb2ZmLCBlbHNlIGEgYml0IG51bWJlciAoaG9zdC0+aW9zLnZkZCkKKyAqIEBzdXBwbHk6IHJlZ3VsYXRvciB0byB1c2UKKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KKyAqCisgKiBNTUMgaG9zdCBkcml2ZXJzIG1heSB1c2UgdGhpcyB0byBlbmFibGUgb3IgZGlzYWJsZSBhIHJlZ3VsYXRvciB1c2luZworICogYSBwYXJ0aWN1bGFyIHN1cHBseSB2b2x0YWdlLiAgVGhpcyB3b3VsZCBub3JtYWxseSBiZSBjYWxsZWQgZnJvbSB0aGUKKyAqIHNldF9pb3MoKSBtZXRob2QuCisgKi8KK2ludCBtbWNfcmVndWxhdG9yX3NldF9vY3Ioc3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5LCB1bnNpZ25lZCBzaG9ydCB2ZGRfYml0KQoreworCWludAkJCXJlc3VsdCA9IDA7CisJaW50CQkJbWluX3VWLCBtYXhfdVY7CisJaW50CQkJZW5hYmxlZDsKKworCWVuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChzdXBwbHkpOworCWlmIChlbmFibGVkIDwgMCkKKwkJcmV0dXJuIGVuYWJsZWQ7CisKKwlpZiAodmRkX2JpdCkgeworCQlpbnQJCXRtcDsKKwkJaW50CQl2b2x0YWdlOworCisJCS8qIFJFVklTSVQgbW1jX3ZkZHJhbmdlX3RvX29jcm1hc2soKSBtYXkgaGF2ZSBzZXQgc29tZQorCQkgKiBiaXRzIHRoaXMgcmVndWxhdG9yIGRvZXNuJ3QgcXVpdGUgc3VwcG9ydCAuLi4gZG9uJ3QKKwkJICogYmUgdG9vIHBpY2t5LCBtb3N0IGNhcmRzIGFuZCByZWd1bGF0b3JzIGFyZSBPSyB3aXRoCisJCSAqIGEgMC4xViByYW5nZSBnb29mIChpdCdzIGEgc21hbGwgZXJyb3IgcGVyY2VudGFnZSkuCisJCSAqLworCQl0bXAgPSB2ZGRfYml0IC0gaWxvZzIoTU1DX1ZERF8xNjVfMTk1KTsKKwkJaWYgKHRtcCA9PSAwKSB7CisJCQltaW5fdVYgPSAxNjUwICogMTAwMDsKKwkJCW1heF91ViA9IDE5NTAgKiAxMDAwOworCQl9IGVsc2UgeworCQkJbWluX3VWID0gMTkwMCAqIDEwMDAgKyB0bXAgKiAxMDAgKiAxMDAwOworCQkJbWF4X3VWID0gbWluX3VWICsgMTAwICogMTAwMDsKKwkJfQorCisJCS8qIGF2b2lkIG5lZWRsZXNzIGNoYW5nZXMgdG8gdGhpcyB2b2x0YWdlOyB0aGUgcmVndWxhdG9yCisJCSAqIG1pZ2h0IG5vdCBhbGxvdyB0aGlzIG9wZXJhdGlvbgorCQkgKi8KKwkJdm9sdGFnZSA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdXBwbHkpOworCQlpZiAodm9sdGFnZSA8IDApCisJCQlyZXN1bHQgPSB2b2x0YWdlOworCQllbHNlIGlmICh2b2x0YWdlIDwgbWluX3VWIHx8IHZvbHRhZ2UgPiBtYXhfdVYpCisJCQlyZXN1bHQgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Uoc3VwcGx5LCBtaW5fdVYsIG1heF91Vik7CisJCWVsc2UKKwkJCXJlc3VsdCA9IDA7CisKKwkJaWYgKHJlc3VsdCA9PSAwICYmICFlbmFibGVkKQorCQkJcmVzdWx0ID0gcmVndWxhdG9yX2VuYWJsZShzdXBwbHkpOworCX0gZWxzZSBpZiAoZW5hYmxlZCkgeworCQlyZXN1bHQgPSByZWd1bGF0b3JfZGlzYWJsZShzdXBwbHkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19yZWd1bGF0b3Jfc2V0X29jcik7CisKKyNlbmRpZgorCiAvKgogICogTWFzayBvZmYgYW55IHZvbHRhZ2VzIHdlIGRvbid0IHN1cHBvcnQgYW5kIHNlbGVjdAogICogdGhlIGxvd2VzdCB2b2x0YWdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwppbmRleCBlOTAyNmNiLi41NzJkMzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB4YTJ4eF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGYwNjJiNDIuLjE2ODk5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtOTc0LDcgKzk3NCw3IEBACiAKIGNvbmZpZyBFVEhPQwogCXRyaXN0YXRlICJPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQKKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBIQVNfSU9NRU0KIAlzZWxlY3QgTUlJCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKQEAgLTI1NDcsNiArMjU0NywyMyBAQAogCSAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluIAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3MyaW8udHh0Pi4KIAorY29uZmlnIFZYR0UKKwl0cmlzdGF0ZSAiTmV0ZXJpb24gWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgU2VydmVyIEFkYXB0ZXIiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMCBHYkUgUENJZQorCSAgSS9PIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorCSAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdnhnZS50eHQ+LgorCitjb25maWcgVlhHRV9ERUJVR19UUkFDRV9BTEwKKwlib29sICJFbmFibGluZyBBbGwgRGVidWcgdHJhY2Ugc3RhdG1lbnRzIGluIGRyaXZlciIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIFZYR0UKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsaW5nIGFsbCB0aGUgZGVidWcgdHJhY2Ugc3RhdGVtZW50cyBpbgorCSAgZHJpdmVyLiBCeSAgZGVmYXVsdCBvbmx5IGZldyBkZWJ1ZyB0cmFjZSBzdGF0ZW1lbnRzIGFyZSBlbmFibGVkLgorCiBjb25maWcgTVlSSTEwR0UKIAl0cmlzdGF0ZSAiTXlyaWNvbSBNeXJpLTEwRyBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJICYmIElORVQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggOTg0MDljOS4uZWRjOWEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTIyMCw2ICsyMjAsNyBAQAogb2JqLSQoQ09ORklHX0FNRDgxMTFfRVRIKSArPSBhbWQ4MTExZS5vCiBvYmotJChDT05GSUdfSUJNVkVUSCkgKz0gaWJtdmV0aC5vCiBvYmotJChDT05GSUdfUzJJTykgKz0gczJpby5vCitvYmotJChDT05GSUdfVlhHRSkgKz0gdnhnZS8KIG9iai0kKENPTkZJR19NWVJJMTBHRSkgKz0gbXlyaTEwZ2UvCiBvYmotJChDT05GSUdfU01DOTFYKSArPSBzbWM5MXgubwogb2JqLSQoQ09ORklHX1NNQzkxMVgpICs9IHNtYzkxMXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggOWMzMjZhNS4uOTk2MTBmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0zNDQ0LDI1ICszNDQ0LDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZGlyKHZvaWQpCiB7Ci0JaW50IGxlbiA9IHN0cmxlbihEUlZfTkFNRSk7Ci0KLQlmb3IgKGJvbmRfcHJvY19kaXIgPSBpbml0X25ldC5wcm9jX25ldC0+c3ViZGlyOyBib25kX3Byb2NfZGlyOwotCSAgICAgYm9uZF9wcm9jX2RpciA9IGJvbmRfcHJvY19kaXItPm5leHQpIHsKLQkJaWYgKChib25kX3Byb2NfZGlyLT5uYW1lbGVuID09IGxlbikgJiYKLQkJICAgICFtZW1jbXAoYm9uZF9wcm9jX2Rpci0+bmFtZSwgRFJWX05BTUUsIGxlbikpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCiAJaWYgKCFib25kX3Byb2NfZGlyKSB7CiAJCWJvbmRfcHJvY19kaXIgPSBwcm9jX21rZGlyKERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JCWlmIChib25kX3Byb2NfZGlyKSB7Ci0JCQlib25kX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQl9IGVsc2UgeworCQlpZiAoIWJvbmRfcHJvY19kaXIpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCiAJCQkJIjogV2FybmluZzogY2Fubm90IGNyZWF0ZSAvcHJvYy9uZXQvJXNcbiIsCiAJCQkJRFJWX05BTUUpOwotCQl9CiAJfQogfQogCkBAIC0zNDcxLDI1ICszNDU4LDcgQEAKICAqLwogc3RhdGljIHZvaWQgYm9uZF9kZXN0cm95X3Byb2NfZGlyKHZvaWQpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZTsKLQotCWlmICghYm9uZF9wcm9jX2RpcikgewotCQlyZXR1cm47Ci0JfQotCi0JLyogdmVyaWZ5IHRoYXQgdGhlIC9wcm9jIGRpciBpcyBlbXB0eSAqLwotCWZvciAoZGUgPSBib25kX3Byb2NfZGlyLT5zdWJkaXI7IGRlOyBkZSA9IGRlLT5uZXh0KSB7Ci0JCS8qIGlnbm9yZSAuIGFuZCAuLiAqLwotCQlpZiAoKihkZS0+bmFtZSkgIT0gJy4nKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChkZSkgewotCQlpZiAoYm9uZF9wcm9jX2Rpci0+b3duZXIgPT0gVEhJU19NT0RVTEUpIHsKLQkJCWJvbmRfcHJvY19kaXItPm93bmVyID0gTlVMTDsKLQkJfQotCX0gZWxzZSB7CisJaWYgKGJvbmRfcHJvY19kaXIpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKIAkJYm9uZF9wcm9jX2RpciA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCAyNTRlYzYyLi5kODM1MDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtNTU5LDcgKzU1OSw3IEBACiBzdGF0aWMgdm9pZAogZG05MDAwX3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSBjb250YWluZXJfb2Yodywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSB0b19kZWxheWVkX3dvcmsodyk7CiAJYm9hcmRfaW5mb190ICpkYiA9IGNvbnRhaW5lcl9vZihkdywgYm9hcmRfaW5mb190LCBwaHlfcG9sbCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkYi0+bmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG5ldC5jIGIvZHJpdmVycy9uZXQvZG5ldC5jCmluZGV4IGRiMWUzMWYuLjMzZmE5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RuZXQuYworKysgYi9kcml2ZXJzL25ldC9kbmV0LmMKQEAgLTgsNyArOCw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKaW5kZXggY2Q4ZTk4Yi4uOGJiZTdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYworKysgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCkBAIC0xMjksNyArMTI5LDggQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQlza2IgPSBiY29tX3JldHJpZXZlX2J1ZmZlcihzLCBOVUxMLCAoc3RydWN0IGJjb21fYmQgKiopJmJkKTsKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsIGJkLT5za2JfcGEsIHNrYi0+bGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgYmQtPnNrYl9wYSwgc2tiLT5sZW4sCisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KIH0KQEAgLTE1MCw3ICsxNTEsNyBAQAogCQliZCA9IChzdHJ1Y3QgYmNvbV9mZWNfYmQgKiliY29tX3ByZXBhcmVfbmV4dF9idWZmZXIocnh0c2spOwogCiAJCWJkLT5zdGF0dXMgPSBGRUNfUlhfQlVGRkVSX1NJWkU7Ci0JCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgc2tiLT5kYXRhLAogCQkJCUZFQ19SWF9CVUZGRVJfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihyeHRzaywgc2tiKTsKQEAgLTI3MCwxNSArMjcxLDYgQEAKIAlwaHlfd3JpdGUocHJpdi0+cGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CiB9CiAKLXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfcGh5X21paV9pb2N0bChzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiwKLQkJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YSwgaW50IGNtZCkKLXsKLQlpZiAoIXByaXYtPnBoeWRldikKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgbWlpX2RhdGEsIGNtZCk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1wYzUyeHhfZmVjX3BoeV9od19pbml0KHN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2KQogewogCXN0cnVjdCBtcGM1Mnh4X2ZlYyBfX2lvbWVtICpmZWMgPSBwcml2LT5mZWM7CkBAIC0zNzAsNyArMzYyLDcgQEAKICAqIGludmFyaWFudCB3aWxsIGhvbGQgaWYgeW91IG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXRpZl8qX3F1ZXVlKCkKICAqIGNhbGxzIGFyZSBkb25lIGF0IHRoZSBwcm9wZXIgdGltZXMuCiAgKi8KLXN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1wYzUyeHhfZmVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGJjb21fZmVjX2JkICpiZDsKQEAgLTM3OCw3ICszNzAsNyBAQAogCWlmIChiY29tX3F1ZXVlX2Z1bGwocHJpdi0+dHhfZG1hdHNrKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJZGV2X2VycigmZGV2LT5kZXYsICJ0cmFuc21pdCBxdWV1ZSBvdmVycnVuXG4iKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKQEAgLTM4OCw3ICszODAsOCBAQAogCQliY29tX3ByZXBhcmVfbmV4dF9idWZmZXIocHJpdi0+dHhfZG1hdHNrKTsKIAogCWJkLT5zdGF0dXMgPSBza2ItPmxlbiB8IEJDT01fRkVDX1RYX0JEX1RGRCB8IEJDT01fRkVDX1RYX0JEX1RDOwotCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJICAgIERNQV9UT19ERVZJQ0UpOwogCiAJYmNvbV9zdWJtaXRfbmV4dF9idWZmZXIocHJpdi0+dHhfZG1hdHNrLCBza2IpOwogCkBAIC0zOTgsNyArMzkxLDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTQzMCw3ICs0MjMsOCBAQAogCQlzdHJ1Y3QgYmNvbV9mZWNfYmQgKmJkOwogCQlza2IgPSBiY29tX3JldHJpZXZlX2J1ZmZlcihwcml2LT50eF9kbWF0c2ssIE5VTEwsCiAJCQkJKHN0cnVjdCBiY29tX2JkICoqKSZiZCk7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+ZGV2LCBiZC0+c2tiX3BhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBiZC0+c2tiX3BhLCBza2ItPmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAl9CkBAIC00NTUsNyArNDQ5LDggQEAKIAogCQlyc2tiID0gYmNvbV9yZXRyaWV2ZV9idWZmZXIocHJpdi0+cnhfZG1hdHNrLCAmc3RhdHVzLAogCQkJCShzdHJ1Y3QgYmNvbV9iZCAqKikmYmQpOwotCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwgYmQtPnNrYl9wYSwgcnNrYi0+bGVuLCBETUFfRlJPTV9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgYmQtPnNrYl9wYSwgcnNrYi0+bGVuLAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCS8qIFRlc3QgZm9yIGVycm9ycyBpbiByZWNlaXZlZCBmcmFtZSAqLwogCQlpZiAoc3RhdHVzICYgQkNPTV9GRUNfUlhfQkRfRVJST1JTKSB7CkBAIC00NjQsNyArNDU5LDggQEAKIAkJCQliY29tX3ByZXBhcmVfbmV4dF9idWZmZXIocHJpdi0+cnhfZG1hdHNrKTsKIAogCQkJYmQtPnN0YXR1cyA9IEZFQ19SWF9CVUZGRVJfU0laRTsKLQkJCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHJza2ItPmRhdGEsCisJCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LAorCQkJCQlyc2tiLT5kYXRhLAogCQkJCQlGRUNfUlhfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJCWJjb21fc3VibWl0X25leHRfYnVmZmVyKHByaXYtPnJ4X2RtYXRzaywgcnNrYik7CkBAIC00OTksNyArNDk1LDcgQEAKIAkJCWJjb21fcHJlcGFyZV9uZXh0X2J1ZmZlcihwcml2LT5yeF9kbWF0c2spOwogCiAJCWJkLT5zdGF0dXMgPSBGRUNfUlhfQlVGRkVSX1NJWkU7Ci0JCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgc2tiLT5kYXRhLAogCQkJCUZFQ19SWF9CVUZGRVJfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihwcml2LT5yeF9kbWF0c2ssIHNrYik7CkBAIC04NDcsMTIgKzg0MywyMCBAQAogc3RhdGljIGludCBtcGM1Mnh4X2ZlY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOwogfQogCiBzdGF0aWMgaW50IG1wYzUyeHhfZmVjX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwcml2LT5waHlkZXYsIGNtZCk7CiB9CiAKQEAgLTg4Miw5ICs4ODYsMjggQEAKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXR1cm4gbXBjNTJ4eF9mZWNfcGh5X21paV9pb2N0bChwcml2LCBpZl9taWkocnEpLCBjbWQpOworCWlmICghcHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcmV0dXJuIHBoeV9taWlfaW9jdGwocHJpdi0+cGh5ZGV2LCBpZl9taWkocnEpLCBjbWQpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1wYzUyeHhfZmVjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbXBjNTJ4eF9mZWNfb3BlbiwKKwkubmRvX3N0b3AgPSBtcGM1Mnh4X2ZlY19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBtcGM1Mnh4X2ZlY19zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbXBjNTJ4eF9mZWNfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gbXBjNTJ4eF9mZWNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdmFsaWRhdGVfYWRkciA9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgPSBtcGM1Mnh4X2ZlY19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUgPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBtcGM1Mnh4X2ZlY190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzID0gbXBjNTJ4eF9mZWNfZ2V0X3N0YXRzLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBtcGM1Mnh4X2ZlY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKK307CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogT0YgRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTkyOSwyMiArOTUyLDEwIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBJbml0IGV0aGVyIG5kZXYgd2l0aCB3aGF0IHdlIGhhdmUgKi8KLQluZGV2LT5vcGVuCQk9IG1wYzUyeHhfZmVjX29wZW47Ci0JbmRldi0+c3RvcAkJPSBtcGM1Mnh4X2ZlY19jbG9zZTsKLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBtcGM1Mnh4X2ZlY19oYXJkX3N0YXJ0X3htaXQ7Ci0JbmRldi0+ZG9faW9jdGwJCT0gbXBjNTJ4eF9mZWNfaW9jdGw7CisJbmRldi0+bmV0ZGV2X29wcwk9ICZtcGM1Mnh4X2ZlY19uZXRkZXZfb3BzOwogCW5kZXYtPmV0aHRvb2xfb3BzCT0gJm1wYzUyeHhfZmVjX2V0aHRvb2xfb3BzOwotCW5kZXYtPmdldF9zdGF0cwkJPSBtcGM1Mnh4X2ZlY19nZXRfc3RhdHM7Ci0JbmRldi0+c2V0X21hY19hZGRyZXNzCT0gbXBjNTJ4eF9mZWNfc2V0X21hY19hZGRyZXNzOwotCW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1wYzUyeHhfZmVjX3NldF9tdWx0aWNhc3RfbGlzdDsKLQluZGV2LT50eF90aW1lb3V0CT0gbXBjNTJ4eF9mZWNfdHhfdGltZW91dDsKIAluZGV2LT53YXRjaGRvZ190aW1lbwk9IEZFQ19XQVRDSERPR19USU1FT1VUOwogCW5kZXYtPmJhc2VfYWRkcgkJPSBtZW0uc3RhcnQ7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBtcGM1Mnh4X2ZlY19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKLQotCXByaXYtPnRfaXJxID0gcHJpdi0+cl9pcnEgPSBuZGV2LT5pcnEgPSBOT19JUlE7IC8qIElSUSBhcmUgZnJlZSBmb3Igbm93ICovCiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKQEAgLTExMjMsOSArMTEzNCw5IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9mZWNfbWF0Y2hbXSA9IHsKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwgfSwKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiLCB9LAotCXsgLnR5cGUgPSAibmV0d29yayIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCmluZGV4IGIzMDc5YTUuLmFhMWViODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwpAQCAtMjA0LDYgKzIwNCw3IEBACiAJc25wcmludGYobmFtZSwgTUlJX0JVU19JRF9TSVpFLCAiJXNAJWxseCIsIG5wLT5uYW1lLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXRhZGRyKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZzbF9wcV9tZGlvX2J1c19uYW1lKTsKIAogLyogU2NhbiB0aGUgYnVzIGluIHJldmVyc2UsIGxvb2tpbmcgZm9yIGFuIGVtcHR5IHNwb3QgKi8KIHN0YXRpYyBpbnQgZnNsX3BxX21kaW9fZmluZF9mcmVlKHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzKQpAQCAtMzg3LDcgKzM4OCw3IEBACiAJICogVGhlIFRCSVBIWS1vbmx5IGJ1c2VzIHdpbGwgZmluZCBQSFlzIGF0IGV2ZXJ5IGFkZHJlc3MsCiAJICogc28gd2UgbWFzayB0aGVtIGFsbCBidXQgdGhlIFRCSQogCSAqLwotCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci1tZGlvIikpCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItdGJpIikpCiAJCW5ld19idXMtPnBoeV9tYXNrID0gfigxIDw8IHRiaWFkZHIpOwogCiAJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCA2YTM4ODAwLi42NWY1NTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0yODksOSArMjg5LDkgQEAKIAkJaWQgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CiAKIAkJb2Zfbm9kZV9wdXQocGh5KTsKLQkJb2Zfbm9kZV9wdXQobWRpbyk7CiAKIAkJZnNsX3BxX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlvZl9ub2RlX3B1dChtZGlvKTsKIAkJc25wcmludGYocHJpdi0+cGh5X2J1c19pZCwgc2l6ZW9mKHByaXYtPnBoeV9idXNfaWQpLCAiJXM6JTAyeCIsCiAJCQkJYnVzX25hbWUsICppZCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGRkNDk5ZDcuLjA2NDJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogCiAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBiZSBoYW5kbGVkIGluIG9uZSBjYWxsIG9mIGdmYXJfcG9sbCAqLwogI2RlZmluZSBHRkFSX0RFVl9XRUlHSFQgNjQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggODgxYmY4MS4uNzQ1OWIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTQ0NSw2ICs0NDUsNyBAQAogCS5uZG9fc3RvcCA9IHNjY19jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgPSBzY2Nfc2VuZF9wYWNrZXQsCiAJLm5kb19kb19pb2N0bCA9IHNjY19pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHNjY19zZXRfbWFjX2FkZHJlc3MsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hZGFwdGVyKGludCBjYXJkX2Jhc2UsIGludCB0eXBlLCBpbnQgbikKQEAgLTU4NCw3ICs1ODUsNiBAQAogCQlkZXYtPmlycSA9IGlycTsKIAkJZGV2LT5uZXRkZXZfb3BzID0gJnNjY19uZXRkZXZfb3BzOwogCQlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwotCQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNjY19zZXRfbWFjX2FkZHJlc3M7CiAJfQogCWlmIChyZWdpc3Rlcl9uZXRkZXYoaW5mby0+ZGV2WzBdKSkgewogCQlwcmludGsoS0VSTl9FUlIgImRtYXNjYzogY291bGQgbm90IHJlZ2lzdGVyICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA1MDBhNDBiLi5iMDY2OTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CkBAIC03MSw4ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8bGludXgveWFtLmg+Ci0jaW5jbHVkZSAieWFtOTYwMC5oIgotI2luY2x1ZGUgInlhbTEyMDAuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTgyLDYgKzgyLDkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKyNkZWZpbmUgRklSTVdBUkVfOTYwMAkieWFtLzk2MDAuYmluIgorI2RlZmluZSBGSVJNV0FSRV8xMjAwCSJ5YW0vMTIwMC5iaW4iCisKICNkZWZpbmUgWUFNXzk2MDAJMQogI2RlZmluZSBZQU1fMTIwMAkyCiAKQEAgLTM0Miw5ICszNDUsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmFkZF9tY3ModW5zaWduZWQgY2hhciAqYml0cywgaW50IGJpdHJhdGUpCisvKgorICogcHJlZGVmIHNob3VsZCBiZSAwIGZvciBsb2FkaW5nIHVzZXIgZGVmaW5lZCBtY3MKKyAqIHByZWRlZiBzaG91bGQgYmUgWUFNXzEyMDAgZm9yIGxvYWRpbmcgcHJlZGVmIDEyMDAgbWNzCisgKiBwcmVkZWYgc2hvdWxkIGJlIFlBTV85NjAwIGZvciBsb2FkaW5nIHByZWRlZiA5NjAwIG1jcworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqYWRkX21jcyh1bnNpZ25lZCBjaGFyICpiaXRzLCBpbnQgYml0cmF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwcmVkZWYpCiB7CisJY29uc3QgY2hhciAqZndfbmFtZVsyXSA9IHtGSVJNV0FSRV85NjAwLCBGSVJNV0FSRV8xMjAwfTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IHlhbV9tY3MgKnA7CisJaW50IGVycjsKKworCXN3aXRjaCAocHJlZGVmKSB7CisJY2FzZSAwOgorCQlmdyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgWUFNXzEyMDA6CisJY2FzZSBZQU1fOTYwMDoKKwkJcHJlZGVmLS07CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ5YW0iLCAwLCBOVUxMLCAwKTsKKwkJaWYgKElTX0VSUihwZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ5YW06IEZhaWxlZCB0byByZWdpc3RlciBmaXJtd2FyZVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtwcmVkZWZdLCAmcGRldi0+ZGV2KTsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJICAgICAgIGZ3X25hbWVbcHJlZGVmXSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoZnctPnNpemUgIT0gWUFNX0ZQR0FfU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBmdy0+c2l6ZSwgZndfbmFtZVtwcmVkZWZdKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJYml0cyA9ICh1bnNpZ25lZCBjaGFyICopZnctPmRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAieWFtOiBJbnZhbGlkIHByZWRlZiBudW1iZXIgJXVcbiIsIHByZWRlZik7CisJCXJldHVybiBOVUxMOworCX0KIAogCS8qIElmIGl0IGFscmVhZHkgZXhpc3RzLCByZXBsYWNlIHRoZSBiaXQgZGF0YSAqLwogCXAgPSB5YW1fZGF0YTsKQEAgLTM1OSw2ICs0MDQsNyBAQAogCS8qIEFsbG9jYXRlIGEgbmV3IG1jcyAqLwogCWlmICgocCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB5YW1fbWNzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiWUFNOiBubyBtZW1vcnkgdG8gYWxsb2NhdGUgbWNzXG4iKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAltZW1jcHkocC0+Yml0cywgYml0cywgWUFNX0ZQR0FfU0laRSk7CkBAIC0zNjYsNiArNDEyLDcgQEAKIAlwLT5uZXh0ID0geWFtX2RhdGE7CiAJeWFtX2RhdGEgPSBwOwogCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHAtPmJpdHM7CiB9CiAKQEAgLTM4Myw5ICs0MzAsMTEgQEAKIAkvKiBMb2FkIHByZWRlZmluZWQgbWNzIGRhdGEgKi8KIAlzd2l0Y2ggKGJpdHJhdGUpIHsKIAljYXNlIDEyMDA6Ci0JCXJldHVybiBhZGRfbWNzKGJpdHNfMTIwMCwgYml0cmF0ZSk7CisJCS8qIHNldHRpbmcgcHJlZGVmIGFzIFlBTV8xMjAwIGZvciBsb2FkaW5nIHByZWRlZiAxMjAwIG1jcyAqLworCQlyZXR1cm4gYWRkX21jcyhOVUxMLCBiaXRyYXRlLCBZQU1fMTIwMCk7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIGFkZF9tY3MoYml0c185NjAwLCBiaXRyYXRlKTsKKwkJLyogc2V0dGluZyBwcmVkZWYgYXMgWUFNXzk2MDAgZm9yIGxvYWRpbmcgcHJlZGVmIDk2MDAgbWNzICovCisJCXJldHVybiBhZGRfbWNzKE5VTEwsIGJpdHJhdGUsIFlBTV85NjAwKTsKIAl9CiB9CiAKQEAgLTkzNiw3ICs5ODUsOCBAQAogCQkJa2ZyZWUoeW0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYWRkX21jcyh5bS0+Yml0cywgeW0tPmJpdHJhdGUpOworCQkvKiBzZXR0aW5nIHByZWRlZiBhcyAwIGZvciBsb2FkaW5nIHVzZXJkZWZpbmVkIG1jcyBkYXRhICovCisJCWFkZF9tY3MoeW0tPmJpdHMsIHltLT5iaXRyYXRlLCAwKTsKIAkJa2ZyZWUoeW0pOwogCQlicmVhazsKIApAQCAtMTE1OSw2ICsxMjA5LDggQEAKIE1PRFVMRV9BVVRIT1IoIkZyZWRlcmljIFJpYmxlIEYxT0FUIGZyaWJsZUB0ZWFzZXIuZnIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWWFtIGFtYXRldXIgcmFkaW8gbW9kZW0gZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMTIwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfOTYwMCk7CiAKIG1vZHVsZV9pbml0KHlhbV9pbml0X2RyaXZlcik7CiBtb2R1bGVfZXhpdCh5YW1fY2xlYW51cF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtMTIwMC5oIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtMTIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2NhOGEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTEyMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKgotICoKLSAqIEZpbGUgeWFtMWsyYjUubWNzIGNvbnZlcnRlZCB0byBoIGZvcm1hdCBieSBtY3MyaAotICoKLSAqIChDKSBGNkZCQiAxOTk4Ci0gKgotICogVHVlIEF1ZyAyNSAyMDoyNDowOCAxOTk4Ci0gKgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJpdHNfMTIwMFtdPSB7Ci0weGZmLDB4ZjIsMHgwMCwweGE1LDB4YWQsMHhmZiwweGZlLDB4OWYsMHhmZiwweGVmLDB4ZjMsMHhjYiwweGZmLDB4ZGIsMHhmYywweGYyLAotMHhmZiwweGY2LDB4ZmYsMHgzYywweGJmLDB4ZmQsMHhiZiwweGRmLDB4NmUsMHgzZiwweDZmLDB4ZjEsMHg3ZCwweGI0LDB4ZmQsMHhiZiwKLTB4ZGYsMHg2ZiwweDNmLDB4NmYsMHhmNywweDBiLDB4ZmYsMHhkYiwweGZkLDB4ZjIsMHhmZiwweGY2LDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLAotMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwKLTB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZSwweDdmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLAotMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjcsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGJmLDB4ZmYsMHhmZiwweGRmLDB4ZjcsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGViLAotMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4YmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmYiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZjcsMHhiZiwweGU3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NzcsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZGIsCi0weGZmLDB4ZmYsMHhmNSwweGE1LDB4ZmQsMHg0YiwweDZlLDB4ZWYsMHgzMywweDMyLDB4ZGQsMHhkMywweDRhLDB4ZDYsMHg5MiwweGZlLAotMHhiMywweDNmLDB4YmQsMHhmMSwweGZhLDB4ZGIsMHhmZSwweGY3LDB4ZjYsMHg5NiwweGJkLDB4YmQsMHhmZiwweGJkLDB4ZmYsMHhlZCwKLTB4N2YsMHg2YiwweDdmLDB4ZmIsMHhkZiwweGZlLDB4ZmIsMHhmZSwweDkwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJlLDB4ZWYsCi0weGZmLDB4ZmYsMHhkYiwweDVmLDB4ZjYsMHhmZiwweGY2LDB4OGYsMHhmZCwweGE1LDB4ZGQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDZmLAotMHg3ZiwweGRiLDB4ZjEsMHhmYywweGJmLDB4ZmYsMHg2ZiwweGZmLDB4ZWYsMHhmYywweDViLDB4NWQsMHhkYSwweGRmLDB4ZjQsMHhmZiwKLTB4ZjIsMHhmZiwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmIsMHhlZiwweGI3LDB4ZmMsMHgzMywweGZmLDB4ZmIsMHhmZiwweDA0LDB4NmEsMHhmMywweDNjLDB4MzYsMHhmZiwweGYwLAotMHgwZiwweGYxLDB4MGYsMHhmZiwweGZmLDB4ZmYsMHhmMywweDE1LDB4NzIsMHgwZiwweGYxLDB4NmYsMHhmZiwweGZlLDB4OTQsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4N2IsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weGY3LDB4ZWYsMHhiNywweGZjLDB4MzMsMHhmZiwweGZmLDB4ZmYsMHgwNCwweDZhLDB4ZjMsMHgzYywweDM2LDB4ZmYsMHhmMCwweDBmLAotMHhmMSwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsMHgxNSwweDczLDB4OGYsMHhmMiwweDZmLDB4ZmYsMHhmZSwweDk0LDB4M2YsMHhmZiwKLTB4ZmYsMHhmZiwweDdkLDB4OWYsMHhmZiwweGYwLDB4MGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4OWUsCi0weGZmLDB4ZmMsMHhlZiwweGQzLDB4ZmIsMHhmZiwweDdmLDB4ZjUsMHg1ZiwweGZlLDB4NTksMHhmZiwweGZmLDB4ZmYsMHhmYywweGYxLAotMHhmZSwweDdmLDB4ZmYsMHhmZiwweGZhLDB4MTcsMHhmZiwweGU3LDB4ZWYsMHhlZiwweGZmLDB4ZmYsMHgzZiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4YmYsMHhmZiwweGZjLDB4ZWEsCi0weGZmLDB4ZjAsMHhmZiwweGZmLDB4YmYsMHhmOSwweDNmLDB4YjEsMHhlZiwweGZmLDB4ZDcsMHhmZiwweGZiLDB4ZmYsMHhmMCwweGZmLAotMHhmZiwweGYzLDB4ZmYsMHhkZiwweGZmLDB4N2IsMHhmZiwweGZkLDB4ZmYsMHhmNiwweGZmLDB4YmYsMHhmZiwweGZmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGRhLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjIsMHhjMCwweDAxLDB4MDAsMHgwMCwweDAyLDB4MDIsCi0weDAyLDB4MDIsMHgwMCwweDQwLDB4NDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE5LDB4MDAsMHgwNCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwKLTB4MDAsMHgzYywweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZkLDB4ZmYsCi0weGZmLDB4N2YsMHhmZiwweGZmLDB4YmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhkZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmZSwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwKLTB4ZGIsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJmLDB4ZGYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGRmLDB4ZGYsMHhmZiwweGVmLDB4ZmYsMHg5ZSwweGVmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmMSwweGVmLDB4ZmYsMHhmZiwweGZmLAotMHhmNywweGZhLDB4YmYsMHhmZiwweGZmLDB4ZmUsMHg0NywweGVmLDB4ZmYsMHhiZCwweGY2LDB4ZmYsMHhmZiwweGRmLDB4ZjUsMHhmMCwKLTB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAyLDB4MDgsCi0weDE2LDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAxLDB4MDIsMHgwMCwweDgwLDB4MDEsMHgwYywweDAyLDB4MDAsMHgwMCwweDAxLAotMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDIwLDB4MDAsMHgxMCwweDAwLDB4MTQsMHgwMCwweDA0LDB4YzEsMHhmMCwKLTB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4N2YsCi0weGVjLDB4ZmYsMHhmZiwweGZhLDB4ZmYsMHhiZiwweGZmLDB4NmYsMHhmZiwweGUxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZCwweGZlLAotMHg0NiwweGZmLDB4ZWYsMHg3ZiwweGNkLDB4ZGYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGJkLDB4ZmYsMHg3ZiwweDdmLDB4ZjAsMHg0ZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhhNCwweGJjLDB4Y2QsMHg2ZCwweDZiLDB4NmYsMHg1YiwweGRjLDB4MzMsCi0weDVhLDB4ZjYsMHhmNywweGY2LDB4YjMsMHgzZiwweGJkLDB4YzEsMHhmYSwweDVhLDB4ZjYsMHhmNiwweGI2LDB4ZjcsMHhmZiwweGJkLAotMHhiYiwweDNjLDB4Y2UsMHhjZiwweDM0LDB4ZWYsMHgzMywweGJiLDB4Y2MsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDRmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGY2LDB4ZDYsMHhmZiwweGZkLDB4ZmQsMHhiZiwweGZmLDB4YWQsCi0weGJmLDB4ZjksMHg3ZiwweDZmLDB4ZmMsMHhkYiwweGYxLDB4ZmQsMHhiZiwweGZmLDB4NmYsMHhmZiwweGZmLDB4ZGEsMHhkYiwweGZjLAotMHhkYiwweGZmLDB4NzYsMHg4ZiwweGY2LDB4ZmYsMHhjZCwweGFiLDB4ZmUsMHhmYiwweGZmLDB4ZDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZiwweDlmLDB4ZmYsMHhmNCwweDIwLDB4YWYsMHg2ZCwweDBiLDB4YzEsMHg3YiwweGZmLDB4ZmYsMHhmZiwweGNiLDB4ZmYsCi0weDNmLDB4ZjAsMHhlZiwweDdmLDB4MGYsMHhmMSwweGMzLDB4M2MsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmOCwweDBiLAotMHgxZCwweDZhLDB4NjQsMHgwNSwweDZiLDB4OTksMHgwMSwweGZmLDB4ZmQsMHhlZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZjQsMHgwMCwweDJmLDB4Y2MsMHgwYiwweGMzLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHgwYSwweGRmLDB4YmYsCi0weGZkLDB4N2YsMHhmZiwweGZmLDB4ZjEsMHhjMywweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0YSwweDBlLAotMHg5NiwweDY0LDB4MDIsMHg5NywweDk5LDB4MTAsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ODQsMHhmOSwweGQ1LDB4MjcsMHhmMSwweDdmLDB4ZmYsMHhmOCwweGViLDB4ZGYsMHhmMywweGNmLDB4M2YsCi0weDFmLDB4ZmYsMHhmNywweDExLDB4ZmYsMHhjZiwweGZmLDB4ZmUsMHg2NywweGZmLDB4ZmYsMHhmZiwweGZmLDB4YzQsMHhmZiwweGZmLAotMHhiMywweGExLDB4ZmYsMHhmOSwweGUwLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwKLTB4ZmYsMHhmYiwweDdmLDB4ZTAsMHhmZiwweGM3LDB4ZmUsMHg3ZiwweDNmLDB4ZmYsMHhmZCwweDc3LDB4OGQsMHg3ZiwweDBmLDB4ZmYsCi0weGMzLDB4ZmYsMHhmMSwweGJmLDB4OGYsMHhjZiwweGZmLDB4ZmYsMHhkZCwweDdiLDB4ZmYsMHhmNiwweGZhLDB4ZjcsMHhmZiwweDQwLAotMHg5ZiwweGY5LDB4N2YsMHhkOCwweGZmLDB4ZmYsMHhmYSwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYxLDB4YzAsMHgwMCwKLTB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MTAsCi0weDAwLDB4MDEsMHgwMCwweDEwLDB4MjAsMHgyMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMSwweDA1LDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDQwLDB4NDAsMHgwMCwweDAwLDB4M2MsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4N2YsMHg3ZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGVmLDB4ZjcsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmQsMHhmZiwweDdmLAotMHg3ZSwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiYiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZWIsMHhmZCwweDZmLDB4ZmYsMHhmNywweGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZmYsMHg3ZiwweGJmLDB4YjEsCi0weGZmLDB4ZmYsMHg5ZiwweGJmLDB4ZmIsMHhmZiwweGZlLDB4ZmYsMHhmZSwweGZmLDB4ZjcsMHhlYiwweGRmLDB4YmYsMHg1ZiwweGRkLAotMHhmZiwweGRiLDB4ZmQsMHhkMCwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgyMCwweDAwLDB4NDIsMHgwMCwKLTB4MDAsMHgwMCwweDMwLDB4MTgsMHgwNCwweDA4LDB4MDksMHgyMSwweDgyLDB4ODAsMHgwMiwweDAwLDB4MDgsMHgwMCwweDAxLDB4MDAsCi0weDAwLDB4MDAsMHgwYywweDIwLDB4MTAsMHgwMCwweDExLDB4MDAsMHg0NCwweDg0LDB4MDAsMHgyMCwweDIwLDB4ODQsMHg4MCwweDAwLAotMHgwMCwweDAwLDB4YzEsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGRkLDB4ZjksMHhmZiwKLTB4ZGEsMHhmZiwweGRjLDB4ZGQsMHhmYywweGZiLDB4ZmYsMHhiZiwweGZiLDB4M2UsMHhkNywweDk2LDB4ZmUsMHg2MSwweGY3LDB4ZmYsCi0weDdmLDB4ZmYsMHgzZiwweGZkLDB4ZmYsMHhkZiwweGNmLDB4ZjcsMHhkZiwweGY3LDB4YmYsMHhmZCwweGZmLDB4ZmUsMHhlZiwweGVmLAotMHhmZSwweGZmLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYzLDB4YmQsMHhmZCwweDRiLDB4NzQsMHhjZiwKLTB4NzMsMHg1YiwweGNiLDB4M2IsMHhkZiwweGZlLDB4ZjcsMHhmZSwweGQzLDB4NzUsMHhhYywweGExLDB4ZmIsMHhkZiwweGZlLDB4ZjcsCi0weDc2LDB4OTYsMHhiNSwweDI0LDB4YmQsMHhhNSwweGFkLDB4NDksMHgyZiwweDY5LDB4MmIsMHg1MiwweDViLDB4YmQsMHhmZiwweGZmLAotMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4ZmYsMHhjYywKLTB4YTcsMHhmYiwweGFkLDB4ZmYsMHg3ZiwweDZmLDB4ZmYsMHg2ZCwweDdmLDB4ZGIsMHhmMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4ZmYsCi0weDZmLDB4ZmYsMHhkYiwweGZmLDB4ZGIsMHhmZiwweGY2LDB4OTcsMHhmNiwweGZmLDB4YjUsMHhiNSwweGZmLDB4ZmYsMHhmZiwweGQwLAotMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhhNSwweGJjLDB4NDMsMHhmYywweDdjLDB4MDMsMHhlNywKLTB4ZmYsMHhmZiwweDIwLDB4ZmYsMHhmZiwweGZmLDB4Y2MsMHhmZCwweDdkLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGQ1LDB4NTksCi0weGJhLDB4NTYsMHg2NiwweDZhLDB4YWQsMHg5YSwweGE5LDB4OWEsMHg5NywweGE1LDB4YWEsMHhiYiwweGZmLDB4ZmYsMHhmMCwweDBmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZlLDB4ZmIsMHhmZiwweGZkLDB4ZjcsMHhmZCwweDQzLDB4ZmYsMHhmZCwweDZiLDB4ZTcsMHhmZiwKLTB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgzZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkNSwweDU5LDB4YjUsCi0weGE2LDB4NjYsMHg2YSwweGFkLDB4OWEsMHhhOSwweDk5LDB4NmIsMHg1YSwweGFhLDB4ZmYsMHhmZiwweGI3LDB4ZjAsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweDljLDB4ZjcsMHhmZCwweGQyLDB4NDEsMHhmZiwweGZmLDB4ZjIsMHg3ZiwKLTB4OGYsMHhmZiwweGZmLDB4M2QsMHhmMywweGZmLDB4MTcsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGRmLDB4ZmMsCi0weDhmLDB4MzgsMHhmZiwweGVmLDB4MjMsMHhmZiwweGZiLDB4ZjcsMHhjOCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZmQsMHhmZiwweGU0LDB4ZmYsMHhlYiwweGZmLDB4Y2YsMHhiZiwweGZhLDB4ZmYsMHhhYiwKLTB4ZWYsMHhmZiwweGZiLDB4ZmYsMHhmMywweGZkLDB4NjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZmYsMHhmYiwweGZkLDB4MGQsCi0weGZmLDB4ZmUsMHhmZiwweDQzLDB4N2YsMHhmZSwweGJmLDB4ZDAsMHhmZCwweGZmLDB4ZmEsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDIsMHgwMSwweDAwLDB4NjAsMHhjMCwweDQwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDM0LDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg4LDB4MDAsCi0weDAwLDB4MDMsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDNjLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHg3ZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHg1ZiwweGZmLDB4ZmYsMHhjYiwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLAotMHhmZiwweGZmLDB4ZmQsMHhmZiwweGVmLDB4ZTMsMHhkZSwweGVlLDB4ZDksMHhjNSwweDkzLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHhmZiwKLTB4ZmIsMHhlZSwweGZlLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGJmLDB4ZjcsMHhmZiwweGZmLDB4N2YsCi0weGFmLDB4YmQsMHhkZiwweGRmLDB4ZmIsMHhmMywweGYzLDB4ZjAsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDM0LAotMHgwMCwweDA2LDB4NjEsMHgwMCwweDE4LDB4MDEsMHhhMCwweDA1LDB4MTcsMHgwMCwweDIwLDB4MDUsMHgyOCwweDIwLDB4MDAsMHgwMCwKLTB4MDUsMHgwMCwweDQxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOSwweDAwLDB4MDEsMHgyMCwweDg2LDB4ODIsMHgwOCwweDQwLDB4MDMsCi0weDgwLDB4MzAsMHg3MCwweDA4LDB4MTQsMHgwMiwweGMxLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4YmQsMHhlZiwweGZiLDB4ZmYsMHhmZiwweGZiLDB4OWMsMHg3ZiwweGVmLDB4ZGYsMHhmZiwweGJmLDB4ZWIsMHhkZSwKLTB4ZmYsMHhjMSwweDdmLDB4ZmYsMHhmYiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGJmLDB4ZWYsCi0weDNmLDB4ZjcsMHg4ZiwweGVmLDB4N2YsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJkLAotMHhkZiwweGVmLDB4N2QsMHg2ZCwweDJiLDB4NWEsMHg1ZCwweGQyLDB4ZGYsMHhmNiwweDkyLDB4YjYsMHhiMiwweGIzLDB4YWMsMHhhMSwKLTB4ZmIsMHhkZiwweGZlLDB4ZjEsMHhlZSwweGY1LDB4ZjYsMHhiYywweDZiLDB4YmQsMHg3ZCwweGFmLDB4MWEsMHhlZiwweDVmLDB4NmIsCi0weGM2LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLAotMHhmNiwweGZmLDB4ZjYsMHhiNywweGZkLDB4YWQsMHhmZCwweGJmLDB4ZjMsMHg2ZiwweGZmLDB4NmYsMHhmZiwweGRiLDB4ZDEsMHhmZCwKLTB4YmYsMHhmZiwweDZmLDB4ZjUsMHg2YiwweGJjLDB4NWIsMHgzYywweGRhLDB4ZWYsMHgxNiwweGFmLDB4MTYsMHhmZiwweGNkLDB4YWIsCi0weGZmLDB4NmYsMHhmZiwweGQwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZjLDB4YmYsMHhmZiwweGZmLAotMHhmZiwweDZjLDB4MDMsMHgxMCwweGMxLDB4ZjMsMHhmZiwweGYzLDB4M2EsMHhmMywweGNhLDB4ZmYsMHhhZiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGQ5LDB4OTYsMHhhNiwweDY1LDB4YTYsMHg2NiwweDZhLDB4OTUsMHg2OSwweDY5LDB4NmEsMHg1YSwweDVhLDB4ZmYsCi0weGZmLDB4NWYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLAotMHhlYSwweDBmLDB4NTAsMHhjMywweGYzLDB4N2YsMHhmZiwweGYzLDB4ZjMsMHhjMywweGZmLDB4YWYsMHhmMSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhkOSwweDk2LDB4YTYsMHg2NSwweGE2LDB4NjYsMHg2YSwweDk1LDB4NjksMHg2OSwweDZhLDB4NWEsMHg1YSwweGZmLDB4ZmYsCi0weGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkNywweGZmLDB4ZmYsMHg1ZiwweGMxLAotMHgzZiwweGY3LDB4NWUsMHhmNSwweGNlLDB4OWUsMHg1ZiwweDNmLDB4MTcsMHhmZiwweGYzLDB4ZTEsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZDgsMHhmZiwweGZhLDB4ZmUsMHg2NywweGZmLDB4ZmUsMHhiZiwweDVhLDB4ZmYsMHhmZiwweGFmLDB4ZjUsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmNywweGZmLDB4ZmQsMHg0ZSwweDNkLAotMHgzZiwweGU3LDB4MGIsMHhiZiwweDhmLDB4ZjksMHhmZiwweGViLDB4ZTMsMHhmZiwweGUxLDB4ZmYsMHhmZiwweGZjLDB4ZmYsMHhjNywKLTB4OWYsMHhmZiwweDNlLDB4MzksMHhlNSwweGZmLDB4Y2YsMHg5YiwweGY5LDB4ZmYsMHhmZiwweGM1LDB4ZmYsMHhmZiwweGZhLDB4ZjAsCi0weDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgyMCwKLTB4MDAsMHgwMSwweDEwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweGYwLDB4NGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGJmLAotMHgzZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmNywKLTB4ZmYsMHhlZCwweGZmLDB4ZmIsMHhmZSwweGZmLDB4N2YsMHhmZiwweDdmLDB4ZGYsMHhmZiwweGZmLDB4ZGQsMHhmMCwweDNmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhmZiwweGYzLDB4ZmYsMHhmNywweGZmLDB4ZmUsMHg1ZiwweGZmLDB4ZjcsMHhmZiwweGZmLAotMHhkZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmUsMHg3YiwweGYxLDB4ZmYsMHhmZCwweGZkLDB4ZmYsMHhkZiwweGRmLDB4ZmYsMHg3ZCwKLTB4NzMsMHhmOSwweGZmLDB4YzMsMHg3ZSwweGZlLDB4ZmYsMHhlZiwweGQ3LDB4ZmYsMHhjZiwweGQwLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmOCwweDMwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAxLDB4NDEsMHgyMCwweDAwLDB4MDQsMHgwMCwweDAyLAotMHhkNSwweDA5LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwMCwweDBhLDB4MDQsMHgwMCwweDA3LDB4MDAsMHgwMSwKLTB4NTAsMHgwMSwweDgwLDB4MDIsMHg2MSwweDQwLDB4NDEsMHgwYywweDE0LDB4MDgsMHhjMSwweGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4Y2IsMHg1ZiwweGZlLDB4ZWYsMHhmZiwweGZlLAotMHhmZiwweDNmLDB4ZmYsMHg3ZiwweGZkLDB4YzEsMHhmZiwweGZmLDB4N2YsMHhmZiwweGRmLDB4ZmQsMHhmYywweGZkLDB4ZjcsMHhlZSwKLTB4ZmYsMHhmZiwweDRlLDB4ZmYsMHhkZiwweGNmLDB4ZGIsMHhlYiwweGZmLDB4ZmYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4N2YsCi0weGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLAotMHhmNywweGZiLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRkLDB4ZmYsCi0weGZmLDB4ZmYsMHhhNSwweGZmLDB4NmYsMHg2YiwweGU5LDB4NmYsMHhkYSwweGNhLDB4ZmIsMHhkZCwweGVlLDB4ZjcsMHhmNiwweGIyLAotMHhiMywweGE0LDB4YTEsMHg1YiwweDViLDB4ZjYsMHhkNywweGY0LDB4ZjcsMHg3YiwweGJkLDB4YmQsMHhhZCwweGNmLDB4ZWYsMHg3ZiwKLTB4NmIsMHg3ZiwweDNiLDB4ZGYsMHhkYiwweGZmLDB4ZmYsMHgzMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGY2LDB4ZmUsMHg5NiwweGZmLDB4ZmQsMHhiNSwweGZkLDB4YmYsMHhhZCwweDdmLDB4ZmYsMHg2ZiwweGZmLAotMHhkZSwweGQxLDB4YWQsMHhhZCwweGU5LDB4ZmYsMHhmMSwweGVjLDB4ZWYsMHhkZSwweDNmLDB4Y2IsMHhmZiwweGY2LDB4ZmYsMHgzMiwKLTB4ZmYsMHhjNSwweGJkLDB4ZmYsMHhmZiwweGZmLDB4ZDAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHhmYiwweGZmLDB4ZjQsCi0weDI4LDB4YmYsMHhmZiwweGZkLDB4ZmIsMHhkMywweGZmLDB4ZmYsMHg0MiwweGZmLDB4ZmYsMHhmZiwweGVhLDB4YjMsMHhmYywweGMzLAotMHhjMSwweGZmLDB4MzMsMHhmZiwweGMwLDB4MTUsMHg2YiwweDcwLDB4ZmYsMHhmMCwweGYyLDB4NGYsMHhmZiwweGZjLDB4M2UsMHg5NywKLTB4M2MsMHhmZiwweGZmLDB4ZmQsMHhlZiwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZlLDB4NzgsCi0weGJmLDB4ZmYsMHhmZCwweGYzLDB4ZWYsMHg1NSwweGZmLDB4N2UsMHhmZiwweGZmLDB4ZmYsMHhlYSwweGIzLDB4ZmMsMHhjMywweGMxLAotMHhmZiwweDMzLDB4ZmYsMHhjMCwweDE1LDB4NmYsMHhmZiwweDBmLDB4ZjAsMHhmMCwweDBmLDB4ZmYsMHhmYywweDNkLDB4NmIsMHhjMywKLTB4ZmYsMHhmZiwweGZlLDB4ZjcsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmYsCi0weGZmLDB4MjMsMHhmOCwweDdmLDB4ZmYsMHg0ZSwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZjksMHgxNywweGZmLDB4ZjYsMHhmMSwweGZmLAotMHhjZiwweGVmLDB4ZmYsMHhmZiwweDEzLDB4ZGYsMHhlNiwweDJmLDB4YzcsMHhmZiwweGZmLDB4ZTcsMHhjMSwweGZkLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGFlLDB4ZmYsCi0weGZmLDB4N2YsMHgzYiwweDNmLDB4ZmMsMHg3ZiwweGZjLDB4ZWYsMHhmZiwweGZjLDB4ZTIsMHg3YiwweGZmLDB4ZjEsMHhmZCwweGVkLAotMHhlZiwweGZmLDB4ZmYsMHgzNSwweDczLDB4ZmYsMHhmZiwweGZlLDB4ZmEsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYSwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYxLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwNCwweDAxLDB4NDAsMHg0MCwweDAwLAotMHgwMCwweDMwLDB4MjgsMHgwNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzgsMHhmMCwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4N2YsCi0weGZmLDB4ZmYsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZGYsMHhkZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhiZiwweGZmLDB4ZmYsMHhjMywKLTB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiZiwweGZkLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZkLDB4N2IsMHhmZiwweDdmLDB4ZmYsMHhiZCwweGZmLDB4ZjEsMHhlZiwweGZmLDB4ZmYsMHhmZCwweGRmLAotMHhmZCwweGZiLDB4ZmYsMHhmZiwweGJmLDB4YmUsMHhmZiwweGNkLDB4N2YsMHhmYywweGY3LDB4ZjcsMHg2ZiwweGJmLDB4ZDgsMHhmMCwKLTB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MDAsCi0weGMwLDB4MDAsMHgwMCwweDIwLDB4MzQsMHgwMCwweDAwLDB4MDAsMHgwYywweDgxLDB4MDAsMHgyMCwweGE0LDB4MjAsMHgwMCwweDEwLAotMHgwOCwweDA0LDB4NDgsMHgwOCwweDAwLDB4NDAsMHg5MywweDAwLDB4MTAsMHgwMCwweDM4LDB4MTgsMHgyMCwweGMxLDB4ZjAsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGI5LDB4ZGYsMHhmZSwweGIzLDB4ZmYsMHhmZiwweGU3LDB4ZmQsCi0weGZmLDB4ZmYsMHgzYiwweGZmLDB4N2YsMHhmZiwweGJmLDB4ZmYsMHhjMSwweGZmLDB4ZmMsMHhmZiwweGZmLDB4M2YsMHg3NywweGZlLAotMHhmZSwweGNmLDB4ZmYsMHhiZiwweGZkLDB4YmYsMHhmZiwweGZlLDB4ZWQsMHhmMiwweGZkLDB4ZjcsMHhmZiwweGYwLDB4MmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYzLDB4YWQsMHhjZiwweGVmLDB4NzAsMHhjOSwweDczLDB4M2IsMHhkZiwweDViLDB4NGEsCi0weGY2LDB4YjcsMHhmZSwweGQ3LDB4ZjUsMHhiYywweGMxLDB4MzMsMHhjYSwweGQ2LDB4YjcsMHg2ZSwweGY3LDB4ZmIsMHhiZCwweGM1LAotMHgyNCwweGNmLDB4NmYsMHgyZiwweDRkLDB4MmIsMHhiYSwweDVhLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjYsMHhmNiwweGQ3LDB4ZmYsMHhmZiwweGFkLDB4YmQsMHhmZiwweGZmLDB4ZmYsCi0weGVmLDB4ZjcsMHg3ZiwweGZjLDB4NWIsMHhiMSwweGZkLDB4YmQsMHg3NSwweDZmLDB4ZWYsMHg2YSwweGZkLDB4NWIsMHhmYiwweGRiLAotMHgzYSwweGJmLDB4OGUsMHg5ZiwweGZmLDB4YmYsMHhmZCwweGZmLDB4NmYsMHhmZiwweGQwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhiYiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZCwweGZiLDB4N2YsMHhkZSwweGZmLDB4ZmYsMHg1YSwweGQ2LDB4YmYsCi0weGQ4LDB4MmEsMHhiZiwweGJmLDB4ZjEsMHhlNSwweGZmLDB4Y2MsMHhjMCwweGE5LDB4NzAsMHhmZiwweGYzLDB4M2MsMHgzYywweGZkLAotMHg1NywweGZkLDB4OTgsMHgwMywweDAwLDB4YzMsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4M2QsMHhiZiwweGZmLDB4ZmQsMHhmYiwweGZmLDB4ZGIsMHhmZiwweGZmLDB4MGYsMHhmYywweDNmLDB4ZDgsCi0weDJhLDB4YmYsMHhiZiwweGYxLDB4ZWYsMHhmZiwweGNjLDB4YzAsMHg5NiwweGJlLDB4ZmYsMHhmMywweDNmLDB4ZmYsMHhmZCwweDU3LAotMHhmZCwweDk5LDB4MGYsMHhmZiwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmMSwweGU3LDB4ZmYsMHhmZiwweGYzLDB4OGUsMHg3YiwweGZmLDB4YTgsMHhmZiwweGRmLDB4N2YsMHg4ZSwweDc4LDB4NzMsCi0weGZmLDB4ZjEsMHg1MSwweDYyLDB4ZmYsMHhmYywweDRiLDB4ZmYsMHhmMywweGZmLDB4N2UsMHhjZiwweGY5LDB4ZmYsMHhmZCwweGZmLAotMHhmZiwweDdmLDB4ZmYsMHhlMCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwKLTB4ZmIsMHhmZCwweGFlLDB4ZmYsMHhmYywweGZlLDB4NmYsMHgzZiwweGY4LDB4ZmQsMHg3NywweGFmLDB4ZmUsMHgzNywweGZlLDB4N2IsCi0weGZmLDB4YjEsMHg4YywweGZmLDB4ZWYsMHhmZCwweGY4LDB4ZTcsMHhiZiwweGZmLDB4ZjEsMHhmZSwweDNlLDB4ZjcsMHhmZSwweDk1LAotMHgzZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMSwweGMwLDB4MDAsMHgwMCwKLTB4MDEsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAwLDB4MDAsMHgxMCwweDAwLDB4MTAsMHgwMCwweDEwLDB4MDgsCi0weDQxLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ODQsMHgwMCwweDBjLDB4MDQsMHgwMiwweDYxLDB4MDAsMHgwMCwweDgxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNkLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weDdmLDB4YmYsMHhmNywweDdmLDB4ZWYsMHhmZiwweGVmLDB4ZmYsMHhmNywweGZkLDB4ZmYsMHhmZiwweGZkLDB4N2YsMHhmZiwweGJlLAotMHhkZiwweGZmLDB4ZmYsMHhkOSwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmIsMHhmZiwweDdmLDB4ZmIsMHhmZiwKLTB4ZmIsMHhmZiwweGJmLDB4ZmYsMHhmMywweDdmLDB4ZmIsMHhmZCwweGViLDB4N2YsMHhkZiwweGZhLDB4ZmYsMHhkZSwweGYwLDB4ZWQsCi0weGZmLDB4YjEsMHhmNywweGY5LDB4MWYsMHhiNSwweDViLDB4ZmUsMHg3ZSwweGY3LDB4YmUsMHhmZCwweDdmLDB4NWYsMHhiNSwweGY3LAotMHhmZiwweGZmLDB4ZDAsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MDEsMHgwMCwweDA3LDB4NDIsMHgwMSwKLTB4MDAsMHg2YSwweDE4LDB4NTAsMHg4MCwweDAwLDB4MDAsMHgwMiwweDQwLDB4MDEsMHgwMSwweDIwLDB4MDEsMHgwMSwweDI0LDB4MTQsCi0weDIxLDB4MTAsMHgwMiwweDA4LDB4MDcsMHgwOCwweDAwLDB4NDAsMHgxMCwweDgwLDB4NTgsMHgwMCwweDg0LDB4ODAsMHgxOCwweDEwLAotMHg0MCwweGMxLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGRiLDB4YjcsMHhmMywKLTB4ZGYsMHg3YywweGY4LDB4NzQsMHhmZiwweGZmLDB4NmYsMHg3ZCwweDNmLDB4N2UsMHhlYywweDdmLDB4YzEsMHhmNSwweGZmLDB4Y2YsCi0weDZmLDB4OWYsMHhmOSwweGRmLDB4YmUsMHhlNSwweGU3LDB4ZmYsMHhkNywweGYzLDB4ZGQsMHhmYiwweGZmLDB4ZmMsMHhmZiwweGJmLAotMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkNywweGZmLDB4ZmYsMHhmZiwweGI0LDB4Y2YsMHhlZiwweDc3LDB4NmYsMHg3MywKLTB4M2EsMHg0YSwweDNhLDB4Y2IsMHhkNCwweGY3LDB4MmUsMHhkNiwweGJkLDB4YmQsMHhhMSwweDNiLDB4ZGYsMHhkNiwweGY3LDB4ZWUsCi0weGQzLDB4MzUsMHhiZCwweGZiLDB4YmQsMHhjZSwweGViLDB4MmIsMHg0ZCwweDJmLDB4YmIsMHhkYSwweGZmLDB4ZmYsMHhmZSwweGIwLAotMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweDVmLDB4MzYsMHhhZiwweDNmLDB4ZWQsMHhiNywKLTB4ZjUsMHhmZCwweGYzLDB4MmIsMHhlZiwweDc3LDB4ZmYsMHhmYiwweGRhLDB4YjEsMHhiZCwweGEzLDB4NzcsMHg2OSwweDdmLDB4NGYsCi0weGZmLDB4ZGIsMHhmYSwweDViLDB4ZmYsMHhmMiwweGZlLDB4ZmYsMHg5NiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4ZmYsMHhkMCwweGFmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4OGYsMHhmZCwweDQwLDB4NmYsMHg5ZSwweDgzLDB4NWEsMHgwZiwKLTB4ZmEsMHhjMywweGZmLDB4ZmYsMHhmYywweGU5LDB4N2YsMHhmMywweDAxLDB4ZDAsMHgwMCwweGZlLDB4YmYsMHhjZCwweDNmLDB4ZjAsCi0weGVmLDB4ZmMsMHhjNSwweDBjLDB4M2YsMHhmZCwweDY4LDB4MGIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4ZjAsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGJiLDB4ZmYsMHhmZCwweDg1LDB4ZmYsMHhkNCwweDZmLDB4OWYsMHhjMywweDVhLDB4MGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhlOSwweDdmLDB4ZjMsMHgwMSwweGYwLDB4ZmIsMHhjMiwweGJmLDB4ZmMsMHgwMCwweDM3LDB4ZWYsCi0weGZjLDB4Y2QsMHhiYywweDNmLDB4ZmYsMHgwYywweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NWYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkOSwweGY3LDB4ZDEsMHhiNywweDdlLDB4N2YsMHhmMSwweGU0LDB4ZmQsMHhmZiwKLTB4ZmIsMHhmYiwweGZmLDB4NWYsMHhmZiwweDdmLDB4YjEsMHhiYywweDBmLDB4NjcsMHhlYiwweGI4LDB4M2YsMHhmZiwweGUyLDB4ZmYsCi0weGU5LDB4ZmYsMHhmZCwweGUzLDB4ZmYsMHgzZiwweDlmLDB4YzIsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGY1LDB4N2YsMHhmZiwweGYwLDB4M2YsMHhiYywweGZmLDB4ZDUsMHhmNSwweGNlLDB4M2YsMHhmZSwweGZmLDB4ZmUsMHg2ZCwKLTB4ZmYsMHhmMSwweGJmLDB4N2IsMHhmZiwweGYxLDB4ZmQsMHhmZiwweDRmLDB4ZmYsMHg4NywweGZmLDB4YWUsMHhmZiwweGIxLDB4ZjgsCi0weGZlLDB4ZmYsMHhmZiwweDc4LDB4MDEsMHhiOSwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmMywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMiwweDEzLDB4MDIsMHgwMCwweDgwLDB4NDAsMHgwMCwweDkwLDB4MTAsMHgwMCwKLTB4MTAsMHgwMCwweDAyLDB4MDAsMHgwMSwweDIwLDB4ODAsMHgxMiwweDEwLDB4MDAsMHg0MCwweDA4LDB4MDAsMHgwNCwweDAwLDB4MDAsCi0weDAyLDB4MDAsMHgwMSwweDQwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgzYywweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLAotMHgxZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4N2YsMHhmNywweGRmLDB4ZjcsMHhmZiwKLTB4ZjcsMHhmYiwweGViLDB4ZDEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjcsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4N2UsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLAotMHhmZiwweGI3LDB4ZWIsMHhmNywweGRmLDB4ZmYsMHhmZSwweGY1LDB4NmIsMHhlNywweGVkLDB4ZjcsMHgzZSwweGVjLDB4ZmYsMHg1NCwKLTB4ZWYsMHg2ZiwweGYxLDB4ZjUsMHhhZiwweDZmLDB4ZjYsMHhmZCwweGZmLDB4ZGQsMHg3YiwweGZmLDB4ZWYsMHhiZiwweDdmLDB4ZmYsCi0weGZmLDB4ZjcsMHhmZiwweGYzLDB4NWYsMHhmNywweGQwLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAwLAotMHg4MCwweDQwLDB4MDQsMHgwMCwweDgxLDB4MmMsMHgwNCwweDI0LDB4MDAsMHgwMiwweDAxLDB4YzgsMHgwMiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMSwweGI0LDB4NDIsMHhkYywweDQ0LDB4MDIsMHgxNSwweDkwLDB4MDIsMHgwMywweDQ4LDB4MzksMHgxMCwweDAyLDB4MjQsCi0weGEwLDB4YmEsMHgwMCwweDAwLDB4NDAsMHhjMSwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZjLDB4ZjcsMHhmMCwweGVlLDB4YjYsMHg1ZCwweGZkLDB4ZjUsMHhmZiwweGRiLDB4ZjcsMHg3ZiwweDdmLDB4YmUsMHhmZiwKLTB4YzEsMHhmZSwweGJmLDB4ZmEsMHhmYSwweDVmLDB4ZmYsMHhhZCwweGZmLDB4ZWYsMHhmZiwweDdmLDB4ZGYsMHg3ZiwweGZlLDB4YmYsCi0weGI3LDB4OTQsMHhiZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZDcsMHhmZiwweGZmLDB4ZmIsMHhiNSwweGZmLAotMHhlZiwweDdjLDB4ZWIsMHgyYiwweDUyLDB4NWIsMHgzYiwweGRhLDB4ZDQsMHhmMywweDM2LDB4OTYsMHhiNSwweGJkLDB4ZjEsMHhmYiwKLTB4ZGEsMHhlZSwweGY2LDB4ZmUsMHhkMywweDM1LDB4YmQsMHhkZiwweGFkLDB4Y2YsMHhlZiwweDdlLDB4Y2QsMHg2YiwweGJiLDB4ZGYsCi0weGZmLDB4ZmYsMHhmZCwweGIwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDMsMHg1ZiwweGY2LAotMHhmZiwweGY2LDB4ZmYsMHhmZCwweGFkLDB4ZmQsMHhmZiwweDdmLDB4ZWYsMHhmZiwweDZmLDB4N2YsMHhkYiwweGYxLDB4YTUsMHhhMywKLTB4N2YsMHg2ZiwweDZiLDB4NGYsMHhmZiwweGRiLDB4ZmIsMHhjYiwweGZmLDB4ZjYsMHhmZiwweGY0LDB4ZDcsMHhmZCwweGJmLDB4ZmUsCi0weGRmLDB4ZmYsMHhkMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNywweGRmLDB4ZmYsMHhmZiwweGZmLAotMHgzZiwweDdmLDB4ZmMsMHhlNSwweGZmLDB4MjAsMHhmZSwweGZmLDB4ZmYsMHhkZiwweDdmLDB4ZmYsMHhmMSwweDdmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmMCwweDdjLDB4M2QsMHg0ZiwweGYzLDB4YzMsMHgzZiwweGZmLDB4ZmYsMHg2ZiwweGMzLDB4ZmYsMHgwZiwweGZmLDB4ZmYsCi0weGFmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZiLDB4YjcsMHhlMCwweDBmLDB4ZmYsMHhmZiwweDJiLAotMHhmZiwweDdkLDB4YmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGY4LDB4OWYsMHg3ZiwweGZmLDB4ZjEsMHg1NSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmQsMHg3YywweDNjLDB4ZmYsMHhmMywweGMzLDB4M2YsMHhmZiwweGZmLDB4ZWYsMHhjMywweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4OWYsMHhiZiwweDdmLAotMHhmOSwweDE5LDB4NDcsMHg4ZSwweGU3LDB4OWYsMHgzZiwweDE3LDB4ZmYsMHhmYywweDgxLDB4YzEsMHg3ZSwweGYzLDB4ZDksMHhmOSwKLTB4NzMsMHhkZiwweGY0LDB4N2YsMHhmYSwweGZmLDB4ZmYsMHhmZiwweGZiLDB4N2YsMHg3NywweGM3LDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZjcsMHgzZiwweGZjLDB4YmYsMHgzZSwweDNmLAotMHhlYywweGZmLDB4ODEsMHhhZiwweGZlLDB4NGYsMHhmMywweGJiLDB4ZmYsMHhmMCwweDdlLDB4ZmYsMHg2ZiwweGZmLDB4ODcsMHhmZiwKLTB4YmIsMHhmZiwweGQ1LDB4ZmMsMHhmZiwweDdmLDB4ZmMsMHg2ZiwweGZmLDB4ZWYsMHhlNywweGZmLDB4ZmYsMHhmYSwweGYwLDB4M2YsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLAotMHgwMCwweDMwLDB4MTAsMHg2MCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDEsMHgyMCwweDgwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg4MCwweDQwLDB4MDAsMHgwOCwweDIwLDB4M2MsMHhmMCwweDZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGY1LDB4YmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmUsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGYxLDB4ZGYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZGYsMHhmZiwKLTB4ZmQsMHhiZCwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDViLDB4ZjAsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmMCwweGJmLDB4YmYsMHhiZiwweGZmLDB4ZjcsMHhmYiwweGZmLDB4ZmUsMHhlZSwweGZhLDB4ZmYsMHhmZiwweGZmLAotMHgzZCwweDNiLDB4ZmYsMHhmZiwweGZlLDB4ZmIsMHhmMSwweGZmLDB4YmYsMHg3YiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZjcsMHhlZiwweGZmLDB4ZmIsMHhkMCwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYiwweDEwLDB4MDUsMHgwMSwweDAwLDB4MDgsMHgwMCwweDAyLAotMHgwMSwweDAxLDB4MDAsMHgwMCwweDEwLDB4MDEsMHhjOCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDAyLDB4MDAsMHgwMCwKLTB4MDAsMHg4MCwweDAyLDB4MDAsMHgwMCwweDQwLDB4MjQsMHg4MCwweDAwLDB4YzEsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZCwweGY3LDB4ZmEsMHhlZiwweGVlLDB4ZjksMHhmZCwweGZmLDB4ZjcsMHhmZSwweGJmLAotMHgxZiwweGZkLDB4OWUsMHhmZCwweGQxLDB4ZWYsMHhmZiwweGY3LDB4N2YsMHg5ZiwweGZmLDB4ZWYsMHhmZiwweGY2LDB4ZmYsMHhmZSwKLTB4ZmUsMHg3YiwweGZmLDB4YmQsMHhmZiwweDdlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZCwweGZmLDB4ZmYsMHhkZiwweGZmLAotMHhmZiwweDVmLDB4ZjEsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGVmLDB4ZmYsCi0weGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDNmLDB4ZmIsMHhmZiwweGZmLDB4ZWYsMHhmYiwweGZkLAotMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjcsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhlNywweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4Y2YsMHhmZiwweGZiLDB4ZmYsMHhmYiwweGYxLAotMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3YiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmMSwweGZmLAotMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHg1NywweGZmLDB4ZmUsMHhiZiwweGZiLDB4ZjEsMHhmZiwweGZmLAotMHhmZCwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZDcsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZGIsMHhmZiwweGRiLDB4ZmQsCi0weGY2LDB4ZmYsMHhmNiwweGZmLDB4M2MsMHhiYywweGJjLDB4YmYsMHhkZiwweDZmLDB4ZWYsMHgyZiwweGYxLDB4M2MsMHhiZiwweGJjLAotMHhiZiwweGRmLDB4NmYsMHhmZiwweDZmLDB4ZjcsMHhkYiwweGZmLDB4ZGIsMHhmZCwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmYsMHhmZiwKLTB4MDEsMHhlMiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTk2MDAuaCBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTk2MDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMWZlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW05NjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoKLSAqCi0gKiBGaWxlIHlhbTExMS5tY3MgY29udmVydGVkIHRvIGggZm9ybWF0IGJ5IG1jczJoCi0gKgotICogKEMpIEY2RkJCIDE5OTgKLSAqCi0gKiBUdWUgQXVnIDI1IDIwOjIzOjAzIDE5OTgKLSAqCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgYml0c185NjAwW109IHsKLTB4ZmYsMHhmMiwweDAwLDB4YTUsMHhhZCwweGZmLDB4ZmUsMHg5ZiwweGZmLDB4ZWYsMHhmYiwweGNiLDB4ZmYsMHhkYiwweGZlLDB4ZjIsCi0weGZmLDB4ZjYsMHhmZiwweDljLDB4YmYsMHhmZCwweGJmLDB4ZWYsMHgyZSwweDNmLDB4NmYsMHhmMSwweGZkLDB4YjQsMHhmZCwweGJmLAotMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZmLDB4MGIsMHhmZiwweGRiLDB4ZmYsMHhmMiwweGZmLDB4ZjYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsCi0weGZiLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweDdmLDB4ZjEsMHhmZiwweGZlLDB4ZmYsMHhiZiwweGJmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmMCwKLTB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsCi0weGZmLDB4ZmYsMHhmNywweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4N2UsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhkZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhlZiwweGZmLDB4ZjMsMHhmYiwweGZlLDB4ZmYsMHhmMSwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGYwLDB4N2YsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDBmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY1LAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGZmLDB4ZWYsCi0weGZmLDB4ZWYsMHhmZiwweDdmLDB4ZWYsMHhmMSwweGZmLDB4ZWYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4YmQsMHhmZiwweGVmLDB4N2YsMHhlZiwweDdmLDB4ZmIsMHhkZiwweGQzLDB4NWEsMHhmZSwweGQ3LDB4ZDYsCi0weGY3LDB4N2YsMHhiZCwweGYxLDB4YmIsMHg1ZCwweGQ2LDB4ZjcsMHhmZSwweDk2LDB4ZmYsMHhiZCwweGFmLDB4YWQsMHhiZiwweGVmLAotMHg3ZiwweDZiLDB4N2YsMHhmYiwweGQ2LDB4ZmUsMHhmNywweGZmLDB4MTAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmUsMHhlZiwKLTB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4YmYsMHhmZCwweGJmLDB4ZmYsMHg3ZiwweGZmLDB4N2YsCi0weGRmLDB4ZGIsMHhmMSwweGZkLDB4MzUsMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZmLDB4ZGIsMHhmZiwweGNiLDB4ZmYsMHhmNiwweGZmLAotMHhmMiwweGZkLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGQwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg1NSwweGZmLDB4Y2MsMHhjMCwweDNmLDB4ZmYsCi0weGZmLDB4ZjEsMHgyNCwweGYwLDB4ZmYsMHhmZiwweGNmLDB4ZWYsMHgzZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmYywweDNmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NTUsMHhmZiwweGNjLDB4YzAsMHgzZiwweGZmLDB4ZmYsCi0weGYxLDB4MDAsMHhmMCwweGZmLDB4ZmYsMHhjZiwweGRmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4N2QsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmUsMHg3ZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weGZmLDB4Y2YsMHhmZiwweGYzLDB4ZmYsMHg5NywweGZmLDB4ZmYsMHg4ZiwweGU3LDB4ZmYsMHhmZiwweGZjLDB4NzEsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZTMsMHhmNywweGVmLDB4ZmYsMHhmZiwweGZjLDB4N2IsMHhmZiwweGYxLDB4M2YsCi0weGZmLDB4ZWYsMHhmZiwweGNmLDB4ZTMsMHhlMywweGZmLDB4ZmYsMHhmZiwweGZmLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLAotMHhiZiwweGZmLDB4ZGEsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDNjLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweDlmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmNywweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhkYiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmIsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZiLDB4ZGYsMHhiZiwweGYxLDB4ZmUsMHhmZCwweGY3LDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NzcsMHhmZCwweGYyLAotMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDM4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDAsMHgwNCwweDI0LDB4MDAsCi0weDQwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDEsMHhjMCwweGYwLAotMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweDZmLDB4ZmYsMHhkZiwweGZmLDB4ZDEsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmIsMHhmZiwweGZiLDB4ZWYsMHhmZiwweGZmLDB4ZWUsMHhmZiwweGZmLDB4N2YsMHhmMCwweGRmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg4ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGFkLDB4ZmYsMHg2OSwweDJhLDB4ZWQsMHg2YiwweGZiLDB4ZGYsMHgzYSwKLTB4ZGMsMHhmNCwweDk2LDB4ZWUsMHhiMywweDNkLDB4MzUsMHhjMSwweGJiLDB4ZGQsMHhmZSwweGY2LDB4ZmUsMHhkNiwweGI1LDB4YWQsCi0weGJmLDB4YTUsMHhhZCwweDQ5LDB4MmYsMHg0ZiwweDJiLDB4ZGEsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmIsMHg1YiwweGY3LDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmQsMHhhNSwKLTB4ZjMsMHg2ZiwweGYzLDB4NmUsMHhmYSwweDdiLDB4ZDEsMHhmZCwweGI1LDB4NzcsMHg2ZiwweGU5LDB4NmYsMHhmZiwweGRiLDB4ZmIsCi0weGRiLDB4ZGYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4M2YsMHhmZSwweGY3LDB4ZmYsMHhkMCwweDRmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZmLDB4OWYsMHhmZiwweGZmLDB4MGYsMHhmZiwweGMwLDB4M2YsMHg5YywweDAzLDB4ZmYsMHhmZiwweDhiLDB4YTUsMHhmZSwKLTB4ODAsMHgzZSwweGMyLDB4YmYsMHhhYywweGIxLDB4MjQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwZiwweGZmLDB4YTMsCi0weGZmLDB4ZmQsMHg2YiwweGZmLDB4ZmYsMHhmMCwweGE1LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweDBmLDB4ZmYsMHhjMCwweDNmLDB4ZDQsMHg2YiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZmUsMHg4NiwKLTB4YmYsMHhjMiwweGJmLDB4MzAsMHhhMSwweDI0LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhjYywweGZmLDB4MGYsMHhmZiwweGEzLDB4ZmYsCi0weDA1LDB4NmIsMHhmZiwweGZmLDB4ZjAsMHhhNSwweGZmLDB4ZmYsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweGZmLDB4ZmIsMHhjNywweGZmLDB4YzQsMHhmZiwweGZmLDB4N2YsMHhmZiwweGVjLDB4ZmUsMHg3ZiwweGRmLDB4ZDgsMHhiOSwKLTB4NDcsMHhmYywweDM2LDB4YzEsMHhkZiwweGZmLDB4ZmYsMHhmOSwweGZmLDB4ZjMsMHhmZiwweGY3LDB4ZmYsMHhmYywweGZmLDB4ZmQsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHg3ZSwweGJkLDB4M2YsMHhmZiwweDJiLDB4ZmUsMHgyZiwweGY1LDB4YTMsMHhmYywKLTB4NWIsMHhmZSwweDYxLDB4OWYsMHg3ZiwweGVmLDB4ZmYsMHhmZiwweGE3LDB4ZmIsMHhmZiwweGZmLDB4ZmEsMHhmZSwweGZmLDB4MzMsCi0weGYxLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjEsMHhjMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDMwLDB4MjQsMHgwNCwKLTB4MDAsMHgwMSwweDAwLDB4ODAsMHg0MCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDEsMHgwMCwweDAyLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgzZCwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmQsMHhmZiwweGZkLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4N2YsMHhmNiwweGVmLDB4YmYsMHhmNywweGZmLDB4NzMsMHhlYiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmOSwweGZmLDB4ZmQsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZDksMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJmLDB4N2YsMHhmZiwweGZmLAotMHhmZiwweDdmLDB4ZmYsMHhmZiwweGRlLDB4ZmYsMHhmZiwweGVmLDB4ZGQsMHhkZSwweDc3LDB4ZjIsMHhmYiwweGVkLDB4ZTcsMHhmMSwKLTB4NzMsMHhmZCwweGZkLDB4ZGYsMHhmZiwweDdkLDB4YmUsMHhkZiwweGZmLDB4ZmIsMHhmZiwweGVmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGQwLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDIwLDB4MDIsMHgwMCwweDIyLAotMHg0MCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4NDEsMHgwMiwweDEyLDB4MDAsMHgyMSwweDg3LDB4ODEsMHgwMCwKLTB4MDAsMHg4MCwweDA0LDB4MGIsMHgyOCwweDAxLDB4YjAsMHgwMCwweDgyLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMSwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLAotMHhmNywweGZmLDB4ZmUsMHg3ZiwweGVkLDB4NzksMHhmZiwweGRlLDB4ZWIsMHg3ZiwweDc0LDB4ZjcsMHhmNywweGUxLDB4ZjksMHhmZiwKLTB4ZjYsMHg1ZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZDcsMHhkYiwweGVmLDB4ZmYsMHhiYiwweGZmLDB4ZmYsMHhmZiwweGNjLDB4ZmYsCi0weGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZjAsMHgwZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHgzZCwweGNkLDB4NDksMHg3ZiwweDZmLAotMHgyYiwweGJhLDB4NWMsMHhkMiwweGRhLDB4ZjYsMHhmMywweDNlLDB4ZjcsMHhmZiwweGJkLDB4ZjEsMHhmYSwweGRmLDB4ZmUsMHhmNywKLTB4Y2MsMHhmNiwweGJiLDB4YTUsMHhiMywweGFkLDB4YmYsMHg2ZiwweDdkLDB4NmYsMHg2YiwweGRiLDB4ZGYsMHhiZCwweGZmLDB4ZmUsCi0weGIwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZiLDB4ZGIsMHg1NywweGY2LDB4ZmUsMHg5ZiwweGQ1LAotMHhiNywweGZmLDB4YWYsMHhlNSwweDNmLDB4ZmYsMHhmZiwweDZmLDB4ZmYsMHhkYiwweGYxLDB4ZmQsMHhiZiwweGZmLDB4NmYsMHg2OSwKLTB4NmMsMHhkZiwweGRhLDB4ZGYsMHhjYiwweGZmLDB4ZjYsMHhmZiwweDc2LDB4ZmQsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDAsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YmQsMHgwOCwweDAzLDB4ODksMHg0ZiwweDVhLAotMHgwZiwweGYwLDB4ZmYsMHhmOCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweDVhLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMywKLTB4ZmEsMHhhMCwweGYwLDB4ZjIsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZkLDB4MDAsMHg2YiwweGZmLDB4ZmYsMHg1YSwweDBmLAotMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHg1YSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YjMsMHhmNSwKLTB4NTAsMHhmMCwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZDcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YmMsMHhmZiwweGU0LDB4ZTcsMHg3MSwweGZmLDB4ZjksMHhjNCwweGY0LAotMHg3ZiwweDdmLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmNywweDczLDB4YmYsMHgxNCwKLTB4ZmYsMHhlNiwweGZmLDB4ZmYsMHhlMSwweDdkLDB4ZmYsMHhmZiwweGU3LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmZSwweGQyLDB4ZmEsMHhmZiwweGM0LDB4ZjQsMHg1YywweGJmLDB4ZmEsMHhmZiwweGZmLAotMHhlYywweDdlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHg2YiwweGRiLDB4ZmYsMHhkZiwKLTB4ZjksMHhmYiwweGJmLDB4ZmYsMHhmMSwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjMsMHhjMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMSwweDA4LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAxLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMCwweDAxLDB4M2MsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGRmLDB4ZmYsMHhlZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmQsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGMzLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsCi0weGZmLDB4ZGYsMHhmZiwweGZmLDB4ZjcsMHgyMywweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZWYsMHhmZiwweGZlLDB4N2YsMHg3ZCwweGY3LAotMHhmZSwweGZmLDB4N2YsMHg3MSwweGZmLDB4ZmIsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweDZlLDB4ZmQsMHhmNywweGZkLDB4ZmYsMHhiZiwKLTB4ZmYsMHhiZiwweGY5LDB4ZmQsMHhmZiwweGRmLDB4ZWYsMHhmMCwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsCi0weDQwLDB4MDEsMHgwMCwweDgzLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwNiwweDA4LDB4MDQsMHgyNiwweDI2LDB4MDAsMHgwMCwweDA2LAotMHgwMywweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg3MCwweDA4LDB4ODAsMHgwMCwweDIwLDB4MDEsMHgyMCwKLTB4MDAsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4YzEsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHg3YiwweDNmLDB4ZjcsMHhmZiwweGQ3LDB4ZmUsMHhmZSwweGZiLDB4ZmUsMHgzYiwweGZlLDB4YmQsMHhmZiwweDJmLAotMHhmZiwweDcxLDB4ZmYsMHhmYiwweDdmLDB4ZTcsMHhmZiwweGY5LDB4ZWYsMHhmZiwweGQ3LDB4ZmEsMHhmZiwweGI3LDB4YmIsMHhmZSwKLTB4ZmYsMHhmZiwweDc0LDB4ZmYsMHhmNywweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YjUsCi0weGJkLDB4NmYsMHg3YywweGViLDB4N2YsMHhmYiwweGRiLDB4ZDMsMHg0YiwweGVlLDB4ZDYsMHhmNiwweGI3LDB4ZmQsMHhhYywweGExLAotMHhmYiwweGRmLDB4ZmUsMHhmNywweGY0LDB4OTYsMHhiZCwweGI0LDB4YzUsMHhhNSwweGFmLDB4NmYsMHg2OSwweDRmLDB4N2YsMHhiYSwKLTB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsCi0weGY2LDB4ZmYsMHhmNiwweGZmLDB4YmQsMHhiZiwweGE1LDB4YmYsMHhmZiwweDdkLDB4N2YsMHhlZiwweGZmLDB4ZmIsMHhmMSwweGZkLAotMHhiZiwweGZmLDB4NmYsMHhmZiwweDZiLDB4N2EsMHhkYiwweGZmLDB4ZGIsMHhkZiwweGY2LDB4ZmUsMHhiNiwweGZkLDB4ZmQsMHhiZiwKLTB4ZmUsMHhmNywweGZmLDB4ZDAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNCwweDJmLDB4ZmYsCi0weGZjLDB4NDMsMHg2YiwweGZmLDB4ZmYsMHhmZiwweDBkLDB4ZmYsMHhmYywweDMzLDB4M2YsMHhmMCwweDVmLDB4ZjEsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZjksMHhkZSwweGYwLDB4NGMsMHhmZSwweDc3LDB4YWYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGYwLDB4ZmYsMHhkYiwKLTB4ZmYsMHg1ZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmUsMHhmNywweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmQsCi0weDQzLDB4N2YsMHhmZiwweGZmLDB4ZjEsMHgwZiwweGZmLDB4ZmMsMHgzMywweDNmLDB4ZmYsMHhhZiwweGYxLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGY2LDB4ZDcsMHhmZiwweGJjLDB4ZmQsMHhiZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmYsMHhmZiwweGZiLDB4ZjEsCi0weGJmLDB4ZmYsMHhmOSwweGZkLDB4Y2YsMHhmMiwweDcwLDB4ZmYsMHgxZiwweDlmLDB4ZjMsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmYywweGY3LDB4ZmYsMHgxMywweDlmLDB4ZmMsMHhmZiwweGZmLDB4ODQsMHhmNywweGZmLDB4ZmYsMHg0NywweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZjLDB4ZmYsMHhmZSwweGZlLDB4NzksCi0weDNmLDB4ZmYsMHgxZCwweDQ2LDB4Y2YsMHhmZiwweGNmLDB4ZmMsMHg3YiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVkLAotMHhmMywweGFiLDB4ZmYsMHhjYiwweGZmLDB4ZjgsMHhmZiwweGZjLDB4ZjUsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwKLTB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsCi0weDAwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDQsMHgwOCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLAotMHgwYywweDAwLDB4MDAsMHgwNCwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHg3ZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZkLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGRmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGViLAotMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZiLDB4ZjcsMHg3ZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4YmYsMHhkYiwweGYwLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGY3LDB4ZmYsCi0weGJmLDB4YmYsMHhjZiwweGZmLDB4ZmYsMHhmZiwweDNlLDB4ZjEsMHg3ZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZkLDB4ZmYsMHhiZiwweGJkLDB4ZmUsMHhmZiwweGZiLDB4ZjcsMHhkZiwweGZiLDB4ZDAsMHhmMCwweDlmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGY4LDB4MzAsMHgyMCwweDAwLDB4NDAsMHgwMSwweDgwLDB4YzAsMHgzMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MTAsCi0weDUwLDB4ODgsMHgyMCwweDAwLDB4MDAsMHgxMywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDEsMHg4MCwweDA4LDB4MDAsMHgwMCwweGEwLDB4MDAsMHgxMCwweGMxLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZCwweGVmLDB4N2YsMHhmZiwweGZmLDB4YmYsMHhmZiwweGY3LDB4ZmYsMHhlZiwweGZiLDB4ZmQsMHg3NywweGVmLDB4YmYsCi0weGY3LDB4N2YsMHhmZiwweGZmLDB4YmYsMHhkMSwweDdmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhZiwweGZmLAotMHhkZiwweGY3LDB4ZmIsMHhmZiwweGZkLDB4ZmYsMHhmYywweGZmLDB4ZmQsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZTAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZGQsMHhmZiwKLTB4ZmYsMHhmZiwweGE1LDB4ZmQsMHg2ZiwweDdkLDB4NmQsMHg3ZiwweDUyLDB4ZGYsMHg1YSwweDRiLDB4ZWUsMHhiNiwweGVlLDB4ZjIsCi0weGJiLDB4YWMsMHhhMSwweDViLDB4NGQsMHhkNiwweGY3LDB4ZmUsMHhiMiwweGJkLDB4MzUsMHhiNSwweGI1LDB4ZGQsMHg2ZiwweDdmLAotMHhlOSwweDVmLDB4NTIsMHhkZiwweGJkLDB4ZmYsMHhmZiwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhkYiwweGZlLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmQsMHhiNSwweGJmLDB4ZjksMHg3ZiwweDZmLDB4ZmYsCi0weGRiLDB4ZjEsMHhmZCwweGJmLDB4ZmYsMHg2ZiwweGZmLDB4NjksMHg3ZiwweGRiLDB4ZmYsMHhkMywweGZmLDB4ZjYsMHhmZSwweGYyLAotMHhmZiwweGFkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwKLTB4MzAsMHgwZiwweGZmLDB4ZmYsMHhmZCwweDZiLDB4Y2EsMHhmZiwweGYwLDB4MGYsMHhkNiwweGJmLDB4Y2YsMHgzZiwweGZmLDB4ZmYsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4Y2EsMHhmZSwweGJmLDB4ZmYsMHhmMCwweDA1LDB4YWYsMHgwZiwweGZmLDB4ZmMsMHhmMCwweGNmLAotMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHgzMCwKLTB4MGYsMHhmZiwweGZmLDB4ZmMsMHgzZiwweGNhLDB4ZmYsMHgwZiwweDBmLDB4ZDYsMHhiZiwweGZmLDB4ZmYsMHhmNSwweDVmLDB4ZjEsCi0weGZmLDB4OGIsMHhmZiwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MGYsMHhmZiwweGZjLDB4ZjAsMHhjZiwweGYwLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4Y2YsMHhmZiwKLTB4ZmYsMHhiZiwweDlmLDB4M2YsMHhmZSwweGZjLDB4ZmYsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGYxLDB4ZmYsCi0weGRmLDB4ZmUsMHg3ZSwweDNmLDB4OWYsMHhmNCwweGZjLDB4N2YsMHhmYywweGZmLDB4ZmYsMHgzZiwweGZmLDB4M2YsMHhmZSwweDNmLAotMHhmZiwweGZmLDB4ZmYsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmYiwweGZmLDB4ZjgsMHhlZCwweGZmLDB4OGYsMHhmZiwweGJiLDB4ZmYsMHhiMSwweGYzLDB4ZWYsCi0weDhmLDB4ZjcsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGJmLDB4ZmQsMHg3OSwweGJmLDB4YmYsMHhmZiwweGZmLAotMHhmZiwweGZiLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDQsMHgwOCwweDA4LDB4MDEsMHgwMSwweDAwLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAxLAotMHgzYywweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg5ZiwweGZmLDB4YWYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGJmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGMzLAotMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4YmIsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZjYsMHhmZiwweDdmLDB4ZmIsMHhmZCwweGVkLDB4ZmYsMHhmMSwweGZmLDB4ZmUsMHg3ZiwweGZmLDB4ZmYsCi0weGZmLDB4NWYsMHhmZiwweGY3LDB4ZmYsMHg3ZSwweGZmLDB4ZmQsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmMCwweGYwLAotMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDgwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHg0MCwweDAyLDB4MDAsMHgwMywKLTB4MDAsMHgwNSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDEsMHhkMCwweDAwLDB4ODEsMHgwMCwweDIwLDB4MDQsMHgwNCwweDAwLDB4MDAsCi0weDgxLDB4MDQsMHgwOCwweDgwLDB4MTAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4YzEsMHhmMCwweDZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsMHhmZCwweGZmLDB4ZWQsMHhmYywKLTB4ZmYsMHhmZiwweDlmLDB4ZmIsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweDdmLDB4ZmIsMHgzZSwweGZmLDB4OWYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmOSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg2ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhiZCwweGZmLDB4ZWYsMHg3YywweGViLDB4N2YsMHhmYiwweGRiLDB4ZmEsMHhkYywKLTB4ZWUsMHhmNywweGY2LDB4ZDcsMHhmNSwweDJkLDB4YTEsMHhiYiwweGRkLDB4ZWUsMHhmNywweDU0LDB4ZjcsMHhmYiwweDJjLDB4YjUsCi0weGI0LDB4YmQsMHg2YiwweDZmLDB4ZWYsMHg2ZiwweGJiLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZmLDB4YmYsMHhlZiwKLTB4NmYsMHhmZiwweDZmLDB4ZmEsMHhkYiwweGYxLDB4YzUsMHhiZCwweGY1LDB4NmYsMHhmZiwweDZmLDB4Y2EsMHhkYiwweGZmLDB4ZGIsCi0weGZiLDB4ZjYsMHg5NywweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmUsMHhmNywweGZmLDB4ZDAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4OGIsMHg3ZiwweGZmLDB4ZmYsMHhlNywweDYzLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYywweDc3LDB4ZGYsMHhmMSwweGRiLDB4ZmYsMHhkNiwweGE4LDB4M2YsMHhmZiwweGZmLDB4MDgsMHgyZiwweGYwLDB4ZmYsCi0weGMzLDB4ZmYsMHhlYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg1ZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDhiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmMsMHhmZiwweGNmLDB4ZjEsMHhkYiwweGZmLDB4ZDYsMHhhOCwweDNmLDB4ZmYsMHhmZiwweDA4LDB4MmYsMHhmMCwweGZmLDB4YzMsCi0weGZmLDB4ZWIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGJmLDB4ZmYsMHhjYSwweGZmLDB4OWYsMHhmZiwweGZhLDB4YjksMHhlNywKLTB4OWYsMHhmMywweDgxLDB4ZmYsMHhmZiwweGZjLDB4NzMsMHhkNywweGZmLDB4ZmYsMHg3NywweGZmLDB4ZmQsMHhmZiwweGZjLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLAotMHhmZiwweGY3LDB4ZGUsMHhmZiwweGZlLDB4N2UsMHhmZiwweGJmLDB4ZmYsMHhiZiwweGYxLDB4YjMsMHhmZiwweGZmLDB4ZTMsMHhmYiwKLTB4ZmYsMHhlMSwweDFmLDB4N2YsMHhmZiwweGY4LDB4NzgsMHhmZiwweGZiLDB4MWUsMHhmZiwweGY3LDB4ZmUsMHhlNywweGZmLDB4ZmYsCi0weGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYSwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwKLTB4MDEsMHg4MCwweDQwLDB4NDAsMHgyMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsCi0weDgwLDB4MDAsMHgwMCwweDAxLDB4M2MsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmYiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjcsMHhmMSwKLTB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwweGRmLDB4ZmYsMHhmZiwweDdmLAotMHhmZiwweGZmLDB4ZmYsMHhiZSwweGQ3LDB4ZmYsMHhlZCwweGJkLDB4N2UsMHhiZiwweGZlLDB4ZjYsMHg3ZiwweGJmLDB4NzEsMHhmZiwKLTB4ZmYsMHhkYSwweGZmLDB4ZjksMHhmZiwweGJmLDB4N2YsMHhmZSwweGZmLDB4NmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weDdmLDB4ZmYsMHhkMCwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4MCwweGMxLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhjNCwweDAwLDB4MDAsMHgxMiwweDIwLDB4NDMsMHgyMiwweDgxLDB4ODQsMHgwMCwKLTB4MDAsMHgxNCwweDAwLDB4MDEsMHgwMCwweDA4LDB4ODAsMHgwMCwweDAyLDB4MDAsMHgwMiwweDAwLDB4MDQsMHgwMiwweDAwLDB4MDAsCi0weDEwLDB4YzEsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZGQsMHhmZSwweGZmLAotMHhiNiwweDc2LDB4ZTUsMHhiYywweGY5LDB4ZjcsMHhhZiwweDVmLDB4YmYsMHhmYywweGRmLDB4Y2YsMHhmMSwweGZmLDB4ZWYsMHg3OSwKLTB4ZmYsMHhiZCwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZjcsMHg2ZiwweDVmLDB4ZmYsMHhmZiwweGZkLDB4ZWYsMHhlZiwweGJmLDB4ZmYsCi0weGZmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRiLDB4ZmYsMHhmZiwweGZkLDB4MmQsMHhmZiwweDY5LDB4MmEsMHhlZiwweDc3LAotMHhiYiwweGRkLDB4NWEsMHhkZiwweGY2LDB4ZjYsMHhkNiwweGY3LDB4N2QsMHhiZCwweGQxLDB4YjIsMHg0YSwweGQ2LDB4YjIsMHhiZSwKLTB4OTcsMHhmNSwweGJkLDB4YjMsMHhhZCwweGZmLDB4ZWYsMHg3ZiwweDY5LDB4NmIsMHhmYiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4OWYsMHhkNCwweGJmLAotMHhlZCwweGFmLDB4ZmYsMHg2YiwweDZmLDB4ZjcsMHhmZiwweGRkLDB4ZGIsMHgzMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4N2YsMHhmZiwKLTB4ZmYsMHhkYiwweGZmLDB4Y2IsMHhkZiwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZlLDB4ZjcsMHhmZiwweGQwLDB4OGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHgxZiwweGZmLDB4NDYsMHgyZiwweDlmLDB4ZmYsMHhmZiwweGZmLAotMHhhNSwweGZmLDB4ZmYsMHhmZiwweGRmLDB4YjcsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmNywweGU5LDB4NmEsMHhiZiwKLTB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZkLDB4NTUsMHg1NywweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWYsMHhmMCwweDRmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZlLDB4ZGYsMHhmZiwweGZkLDB4MWYsMHhmZiwweDQ2LDB4MmYsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGE1LAotMHhmZiwweGZmLDB4ZmYsMHhjMCwweDM3LDB4ZmYsMHhmZiwweGYxLDB4OTksMHg4ZSwweGRjLDB4N2YsMHhlOSwweDZhLDB4YmYsMHhmZiwKLTB4ZjAsMHgwZiwweGZmLDB4ZmYsMHhmZCwweDU1LDB4NTcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgwZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDA3LDB4ZmYsMHhjMCwweGJlLDB4ZmYsMHhmZiwweGNmLDB4ZWYsMHg5ZiwweGZmLAotMHhmZiwweGZiLDB4ZmYsMHhlNywweGZmLDB4ZmYsMHhhMSwweGUzLDB4Y2UsMHgzYywweDU4LDB4M2YsMHhmMywweGZmLDB4ZmQsMHhlZiwKLTB4ZjksMHhmZiwweGZmLDB4ZjcsMHhmMSwweDdmLDB4ZmYsMHhjYiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZjAsMHhmZiwweGZlLDB4ZmYsMHhjNCwweDc1LDB4ZTcsMHhiOSwweGZmLDB4ZmYsMHhmZiwweGVmLAotMHhmZiwweGM3LDB4MzcsMHgzYiwweGZmLDB4ZjAsMHgxMywweDllLDB4MGYsMHhmNCwweGZmLDB4ZmUsMHhmYiwweGZmLDB4ZmYsMHhmOSwKLTB4ZmMsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGYzLDB4YzAsMHgwMSwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDIsMHgyMiwweDAwLDB4MDAsMHhjMCwweDQwLDB4MDAsMHg0MCwweDAwLAotMHgwNCwweDA4LDB4MDQsMHgwYSwweDAxLDB4MDEsMHgxMCwweDIwLDB4MjAsMHgwMCwweDAwLDB4MDQsMHgwOCwweDA4LDB4MDQsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweDdmLDB4ZmYsMHg3ZiwweGZmLDB4Y2YsMHg5ZCwweGZmLAotMHhmZiwweGY3LDB4ZmQsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGVlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsCi0weGZmLDB4ZmYsMHhmNywweGY3LDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmNywweGZmLDB4ZmYsMHg1YiwweGZmLDB4YmYsMHhmNywweGZmLAotMHhmZCwweDdmLDB4NzEsMHhmZCwweGZmLDB4ZWQsMHhmNywweGZlLDB4ZWYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGZmLDB4ZDAsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MTEsCi0weDAwLDB4NDgsMHg2MCwweDQwLDB4ODIsMHg2MCwweDI0LDB4NjAsMHgwMCwweGNjLDB4MDAsMHg4MCwweDA0LDB4MDEsMHgwMCwweDAwLAotMHgxNCwweDAxLDB4MGMsMHgwNCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA4LDB4MDAsMHgwMSwweDAwLDB4YzIsMHgwMCwKLTB4MDAsMHgwMiwweDAwLDB4ODAsMHgwMCwweGMxLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGY3LDB4N2IsMHhmZiwweGYzLDB4ZWIsMHhiZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhlNywweDVkLDB4M2YsMHhmZiwweGY2LAotMHhkMSwweGZkLDB4ZmYsMHhlYiwweGY3LDB4M2QsMHhmZiwweGZmLDB4ZmYsMHg1ZiwweGZmLDB4N2YsMHg3ZiwweGYzLDB4ZmYsMHhmZiwKLTB4ZWYsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGYwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGI1LDB4ZGYsCi0weDZmLDB4N2QsMHg2OSwweDdmLDB4ZmIsMHhkZiwweDUyLDB4NWYsMHhmNiwweGY3LDB4ZmUsMHhmNiwweGYzLDB4YmQsMHhiMSwweGRhLAotMHhjZCwweGZlLDB4ZjYsMHhlZSwweGQyLDB4YmQsMHhhNSwweGFmLDB4YmQsMHhmZiwweDZmLDB4N2MsMHhlYiwweDJiLDB4ZmEsMHhkYSwKLTB4ZmYsMHhmZSwweGRmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZjYsCi0weGZmLDB4ZjYsMHhmZiwweGJkLDB4YmYsMHhjZCwweGJmLDB4ZWIsMHg2ZiwweGY3LDB4NmYsMHhkZiwweGRiLDB4NTEsMHhmZCwweGJkLAotMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZiLDB4NWIsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4ZjYsMHhmZCwweGZkLDB4YmYsMHhmZSwKLTB4ZjcsMHhmZiwweGQwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZhLDB4NTAsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4NmYsMHhmZiwweGZmLDB4ZjAsMHg5NiwweGZmLDB4ZmYsMHhjNiwweDJiLDB4ZmYsMHhmZiwweGYxLDB4ZmMsMHhmZiwweGZmLAotMHhmNywweGRiLDB4YzMsMHhmZiwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGMxLDB4NGYsMHhjMywweGZmLDB4ZmYsMHhmZiwKLTB4YWYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGEwLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDZmLDB4ZmYsMHhmZiwweGYwLDB4OTYsMHhmZiwweGZmLDB4YzYsMHgyYiwweGZmLDB4ZmYsMHhmMSwweDVhLDB4ZmYsMHhmZiwweGZmLAotMHhmMywweGMzLDB4ZmYsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhjMSwweDRmLDB4YzMsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZmLDB4ZmYsMHg5ZiwweGYwLDB4N2YsCi0weGZmLDB4ZjksMHhmYywweDRmLDB4ZjMsMHhmZiwweDI3LDB4ZWIsMHhmZiwweGZjLDB4ODEsMHhmYywweDdmLDB4ZmUsMHg3YiwweGZmLAotMHhmNywweGZmLDB4MTIsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MTgsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwKLTB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZSwweGZmLDB4ZmMsMHg3ZSwweDdmLDB4YmYsCi0weGZmLDB4ZmYsMHhhZiwweGVmLDB4ZmYsMHhkZiwweGRmLDB4ZmIsMHhmZiwweGYxLDB4YzMsMHhmZSwweDZmLDB4ZjEsMHhjZiwweDNmLAotMHhmYiwweGZmLDB4ZmYsMHhjZiwweGZlLDB4ZmYsMHhmZiwweGZlLDB4N2YsMHhiZiwweGZmLDB4ZmYsMHhiZiwweGZhLDB4ZjAsMHhkZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCi0weDIwLDB4MDAsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDIsMHg4MCwweDAwLDB4MDIsMHgzYywweGYwLDB4MmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmIsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY1LDB4ZjEsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmMCwweDJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGJmLDB4ZmIsCi0weGZmLDB4ZmYsMHhmZiwweGRmLDB4ZjcsMHhmZiwweGYxLDB4ZjcsMHhiZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhkZSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWQsMHhmNywweGZmLDB4ZmYsMHg3ZiwweGQwLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmOCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMCwweDAwLDB4ODAsCi0weDIwLDB4MDEsMHgwMSwweDkyLDB4MDAsMHgwMSwweDAxLDB4MDAsMHhlMCwweDFjLDB4NjAsMHgyMCwweDMwLDB4MDgsMHgwOCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjMSwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZjLDB4N2YsMHhmYiwweGJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmNiwweGZmLDB4ZjcsMHg3ZSwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGY3LAotMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZGYsMHhmZiwweGI3LDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZGYsCi0weDU3LDB4ZWYsMHhmMSwweGZkLDB4ZmUsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmYiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGRmLDB4ZmYsCi0weGZmLDB4ZjEsMHhmZCwweGZmLDB4N2YsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNywweGZkLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZiLDB4NmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGYxLDB4ZmYsCi0weGY3LDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLAotMHhmZiwweGZmLDB4ZmYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweDU3LDB4ZmYsMHhmZCwweGJmLDB4ZmYsMHhmMSwweGZmLDB4ZWYsCi0weGZlLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhkZSwweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhkYiwweGZmLDB4ZGIsMHhmZCwKLTB4ZjYsMHhmZiwweGY2LDB4ZmYsMHgzYywweGJjLDB4YmMsMHhiZiwweGRmLDB4NmYsMHhlNywweDJmLDB4ZjEsMHgzYywweGJmLDB4ZmQsCi0weGJmLDB4ZGYsMHg2ZiwweGZmLDB4NmYsMHhmNywweGRiLDB4ZmYsMHhkYiwweGZkLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZiwweGZmLAotMHgwMiwweDAxLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IGRlMmQ0ODYuLmY1MGZhYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTQ0OCw4ICs0NDgsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogV2FpdCAxNW1zIGZvciBNQUMgdG8gY29uZmlndXJlIFBIWSBmcm9tIE5WTSBzZXR0aW5ncy4gKi8KLQltc2xlZXAoMTUpOworCS8qCisJICogV2FpdCAxMDBtcyBmb3IgTUFDIHRvIGNvbmZpZ3VyZSBQSFkgZnJvbSBOVk0gc2V0dGluZ3MsIHRvIGF2b2lkCisJICogdGltZW91dCBpc3N1ZXMgd2hlbiBMRlMgaXMgZW5hYmxlZC4KKwkgKi8KKwltc2xlZXAoMTAwKTsKIAogCS8qCiAJICogVGhlIE5WTSBzZXR0aW5ncyB3aWxsIGNvbmZpZ3VyZSBMUExVIGluIEQzIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBmYjA5YzhhLi4yN2VhZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMTQxOSw3ICsxNDE5LDYgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBjdHJsX3JlZyA9IDA7Ci0JdTMyIHN0YXRfcmVnID0gMDsKIAogCWh3LT5tYWMuYXV0b25lZyA9IGZhbHNlOwogCkBAIC0xNDQzLDE4ICsxNDQyLDExIEBACiAJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfRlJDU1BEIHwgLyogU2V0IHRoZSBGb3JjZSBTcGVlZCBCaXQgKi8KIAkJICAgICBFMTAwMF9DVFJMX0ZSQ0RQWCB8IC8qIFNldCB0aGUgRm9yY2UgRHVwbGV4IEJpdCAqLwogCQkgICAgIEUxMDAwX0NUUkxfU1BEXzEwMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMDAgKi8KLQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCisJCSAgICAgRTEwMDBfQ1RSTF9GRCB8CSAvKiBGb3JjZSBEdXBsZXggdG8gRlVMTCAqLworCQkgICAgIEUxMDAwX0NUUkxfU0xVKTsJIC8qIFNldCBsaW5rIHVwIGVuYWJsZSBiaXQgKi8KIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgJiYKLQkgICAgaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpCisJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KQogCQljdHJsX3JlZyB8PSBFMTAwMF9DVFJMX0lMT1M7IC8qIEludmVydCBMb3NzIG9mIFNpZ25hbCAqLwotCWVsc2UgewotCQkvKiBTZXQgdGhlIElMT1MgYml0IG9uIHRoZSBmaWJlciBOaWMgaWYgaGFsZiBkdXBsZXggbGluayBpcwotCQkgKiBkZXRlY3RlZC4gKi8KLQkJc3RhdF9yZWcgPSByZDMyKEUxMDAwX1NUQVRVUyk7Ci0JCWlmICgoc3RhdF9yZWcgJiBFMTAwMF9TVEFUVVNfRkQpID09IDApCi0JCQljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9JTE9TIHwgRTEwMDBfQ1RSTF9TTFUpOwotCX0KIAogCXdyMzIoRTEwMDBfQ1RSTCwgY3RybF9yZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGNhODQyMTYuLjAzYWE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0xMzUsOCArMTM1LDggQEAKIHN0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcik7CiAKLXN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKiwgcG1fbWVzc2FnZV90KTsKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKiwgcG1fbWVzc2FnZV90KTsKIHN0YXRpYyBpbnQgaWdiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqKTsKICNlbmRpZgogc3RhdGljIHZvaWQgaWdiX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtNDIwLDYgKzQyMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKIAkJbmV0aWZfbmFwaV9kZWwoJmFkYXB0ZXItPnJ4X3JpbmdbaV0ubmFwaSk7CiAKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMDsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMDsKKwogCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwogCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogfQpAQCAtMTQ3Niw5ICsxNDc5LDEwIEBACiAJCSBuZXRkZXYtPm5hbWUsCiAJCSAoKGh3LT5idXMuc3BlZWQgPT0gZTEwMDBfYnVzX3NwZWVkXzI1MDApCiAJCSAgPyAiMi41R2IvcyIgOiAidW5rbm93biIpLAotCQkgKChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3g0KQotCQkgID8gIldpZHRoIHg0IiA6IChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3gxKQotCQkgID8gIldpZHRoIHgxIiA6ICJ1bmtub3duIiksCisJCSAoKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDQpID8gIldpZHRoIHg0IiA6CisJCSAgKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDIpID8gIldpZHRoIHgyIiA6CisJCSAgKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDEpID8gIldpZHRoIHgxIiA6CisJCSAgICJ1bmtub3duIiksCiAJCSBuZXRkZXYtPmRldl9hZGRyKTsKIAogCWlnYl9yZWFkX3BhcnRfbnVtKGh3LCAmcGFydF9udW0pOwpAQCAtNTA1Niw3ICs1MDYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBfX2lnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtNTExNSwxNSArNTExOSw5IEBACiAJCXdyMzIoRTEwMDBfV1VGQywgMCk7CiAJfQogCi0JLyogbWFrZSBzdXJlIGFkYXB0ZXIgaXNuJ3QgYXNsZWVwIGlmIG1hbmFnZWFiaWxpdHkvd29sIGlzIGVuYWJsZWQgKi8KLQlpZiAod3VmYyB8fCBhZGFwdGVyLT5lbl9tbmdfcHQpIHsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKLQl9IGVsc2UgeworCSplbmFibGVfd2FrZSA9IHd1ZmMgfHwgYWRhcHRlci0+ZW5fbW5nX3B0OworCWlmICghKmVuYWJsZV93YWtlKQogCQlpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoaHcpOwotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwotCX0KIAogCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCiAJICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCkBAIC01MTMxLDEyICs1MTI5LDI5IEBACiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IHJldHZhbDsKKwlib29sIHdha2U7CisKKwlyZXR2YWwgPSBfX2lnYl9zaHV0ZG93bihwZGV2LCAmd2FrZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICh3YWtlKSB7CisJCXBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpOworCX0gZWxzZSB7CisJCXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaWdiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNTE4OSw3ICs1MjA0LDE0IEBACiAKIHN0YXRpYyB2b2lkIGlnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlpZ2Jfc3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOworCWJvb2wgd2FrZTsKKworCV9faWdiX3NodXRkb3duKHBkZXYsICZ3YWtlKTsKKworCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRikgeworCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIHdha2UpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKaW5kZXggMTI0M2JjOC4uYWMwZTRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKQEAgLTE4NzEsMTMgKzE4NzEsNiBAQAogCSAqIHdpdGhvdXQgcHJvY2ZzIC0gaXQncyBub3QgcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gd29yay4KIAkgKi8KIAl2bHNpX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoUFJPQ19ESVIsIE5VTEwpOwotCWlmICh2bHNpX3Byb2Nfcm9vdCkgewotCQkvKiBwcm90ZWN0IHJlZ2lzdGVyZWQgcHJvY2RpciBhZ2FpbnN0IG1vZHVsZSByZW1vdmFsLgotCQkgKiBCZWNhdXNlIHdlIGFyZSBpbiB0aGUgbW9kdWxlIGluaXQgcGF0aCB0aGVyZSdzIG5vIHJhY2UKLQkJICogd2luZG93IGFmdGVyIGNyZWF0ZV9wcm9jX2VudHJ5IChhbmQgbm8gYmFycmllciBuZWVkZWQpLgotCQkgKi8KLQkJdmxzaV9wcm9jX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmxzaV9pcmRhX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IGVkMjY1YTcuLmRlNGRiMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtNDExLDcgKzQxMSw4IEBACiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCiAJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCWlmICghaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyAmJiBody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYKKwkgICAgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQogCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CiAKIAlpZiAocmV0X3ZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggOGNmZDNmZC4uNjNhYjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTE5MzcsNyArMTkzNyw4IEBACiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCiAJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCWlmICghaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyAmJiBody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYKKwkgICAgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQogCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CiAKIAlpZiAocmV0X3ZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggN2U5NGQ2ZC4uMjRmNzNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTk2LDE0ICs5NiwxMSBAQAogI2RlZmluZSBJWEdCRV9XUklURV9GTFVTSChhKSBJWEdCRV9SRUFEX1JFRyhhLCBJWEdCRV9TVEFUVVMpCiAKICNpZmRlZiBERUJVRworZXh0ZXJuIGNoYXIgKml4Z2JlX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKICNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgXAotcHJpbnRrKEtFUk5fREVCVUcsICIlczogIiBmb3JtYXQsIGl4Z2JlX2dldF9od19kZXZfbmFtZShodyksICMjYXJnKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBpeGdiZV9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKLWh3X2RiZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIElYR0JFX0NPTU1PTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCAwYTg3MzFmLi5iZDBhMGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtOTAsNiArOTAsOCBAQAogCQkJc3JjX2RjYl9jZmctPnRjX2NvbmZpZ1tpIC0gRENCX1BGQ19VUF9BVFRSXzBdLmRjYl9wZmM7CiAJfQogCisJZHN0X2RjYl9jZmctPnBmY19tb2RlX2VuYWJsZSA9IHNyY19kY2JfY2ZnLT5wZmNfbW9kZV9lbmFibGU7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk4LDggKzMwMCwxMCBAQAogCiAJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLnRjX2NvbmZpZ1twcmlvcml0eV0uZGNiX3BmYyA9IHNldHRpbmc7CiAJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy50Y19jb25maWdbcHJpb3JpdHldLmRjYl9wZmMgIT0KLQkgICAgYWRhcHRlci0+ZGNiX2NmZy50Y19jb25maWdbcHJpb3JpdHldLmRjYl9wZmMpCisJICAgIGFkYXB0ZXItPmRjYl9jZmcudGNfY29uZmlnW3ByaW9yaXR5XS5kY2JfcGZjKSB7CiAJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9QRkM7CisJCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5wZmNfbW9kZV9lbmFibGUgPSB0cnVlOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0X3BmY19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDE4ZWNiYTcuLmFhZmMxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEyOSw2ICsxMjksMTUgQEAKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsOwogCQlpZiAoaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHBoeS5hdXRvbmVnX2FkdmVydGlzZWQgbWF5IG5vdCBiZQorCQkgKiBzZXQgeWV0LiAgSWYgc28gZGlzcGxheSB3aGF0IHRoZSBkZWZhdWx0IHdvdWxkIGJlIC0KKwkJICogYm90aCAxRyBhbmQgMTBHIHN1cHBvcnRlZC4KKwkJICovCisJCWlmICghKGVjbWQtPmFkdmVydGlzaW5nICYgKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkpKQorCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpIHsKQEAgLTIyNSw3ICsyMzQsMTYgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfZnVsbCA/IDEgOiAwKTsKKwkvKgorCSAqIEZsb3cgQ29udHJvbCBBdXRvbmVnIGlzbid0IG9uIGlmCisJICogIC0gd2UgZGlkbid0IGFzayBmb3IgaXQgT1IKKwkgKiAgLSBpdCBmYWlsZWQsIHdlIGtub3cgdGhpcyBieSB0eCAmIHJ4IGJlaW5nIG9mZgorCSAqLworCWlmIChody0+ZmMuZGlzYWJsZV9mY19hdXRvbmVnIHx8CisJICAgIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX25vbmUpKQorCQlwYXVzZS0+YXV0b25lZyA9IDA7CisJZWxzZQorCQlwYXVzZS0+YXV0b25lZyA9IDE7CiAKIAlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgewogCQlwYXVzZS0+cnhfcGF1c2UgPSAxOwpAQCAtMjQzLDggKzI2MSwxMiBAQAogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JaWYgKChwYXVzZS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpKQorCWlmIChwYXVzZS0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKKwkJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IHRydWU7CisJZWxzZQorCQlody0+ZmMuZGlzYWJsZV9mY19hdXRvbmVnID0gZmFsc2U7CisKKwlpZiAocGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKIAkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKIAllbHNlIGlmIChwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKIAkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfcnhfcGF1c2U7CkBAIC03MTIsOSArNzM0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqdGVtcF9yaW5nOworCXN0cnVjdCBpeGdiZV9yaW5nICp0ZW1wX3R4X3JpbmcsICp0ZW1wX3J4X3Jpbmc7CiAJaW50IGksIGVycjsKIAl1MzIgbmV3X3J4X2NvdW50LCBuZXdfdHhfY291bnQ7CisJYm9vbCBuZWVkX3VwZGF0ZSA9IGZhbHNlOwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MzMsODAgKzc1Niw5NCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl0ZW1wX3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCi0JICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBfcmluZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbXNsZWVwKDEpOwogCi0JaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nLT5jb3VudCkgeworCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghdGVtcF90eF9yaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NldHVwOworCX0KKworCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgeworCQltZW1jcHkodGVtcF90eF9yaW5nLCBhZGFwdGVyLT50eF9yaW5nLAorCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQl0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7Ci0JCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfcmluZ1tpXSk7CisJCQl0ZW1wX3R4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CisJCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF90eF9yaW5nW2ldKTsKIAkJCWlmIChlcnIpIHsKIAkJCQl3aGlsZSAoaSkgewogCQkJCQlpLS07CiAJCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3JpbmdbaV0pOworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF90eF9yaW5nW2ldKTsKIAkJCQl9CiAJCQkJZ290byBlcnJfc2V0dXA7CiAJCQl9Ci0JCQl0ZW1wX3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT50eF9yaW5nW2ldLnZfaWR4OworCQkJdGVtcF90eF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+dHhfcmluZ1tpXS52X2lkeDsKIAkJfQotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChuZXRkZXYpOwotCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKLQkJaXhnYmVfbmFwaV9kZWxfYWxsKGFkYXB0ZXIpOwotCQlJTklUX0xJU1RfSEVBRCgmbmV0ZGV2LT5uYXBpX2xpc3QpOwotCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKLQkJYWRhcHRlci0+dHhfcmluZyA9IHRlbXBfcmluZzsKLQkJdGVtcF9yaW5nID0gTlVMTDsKLQkJYWRhcHRlci0+dHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDsKKwkJbmVlZF91cGRhdGUgPSB0cnVlOwogCX0KIAotCXRlbXBfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghdGVtcF9yaW5nKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7Ci0JCXJldHVybiAtRU5PTUVNOworCXRlbXBfcnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCWlmICgoIXRlbXBfcnhfcmluZykgJiYgKG5lZWRfdXBkYXRlKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfdHhfcmluZ1tpXSk7CisJCWtmcmVlKHRlbXBfdHhfcmluZyk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NldHVwOwogCX0KIAotCWlmIChuZXdfcnhfY291bnQgIT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpIHsKKwlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKKwkJbWVtY3B5KHRlbXBfcnhfcmluZywgYWRhcHRlci0+cnhfcmluZywKKwkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQkJdGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OwotCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZ0ZW1wX3JpbmdbaV0pOworCQkJdGVtcF9yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJd2hpbGUgKGkpIHsKIAkJCQkJaS0tOwogCQkJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF9yaW5nW2ldKTsKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3J4X3JpbmdbaV0pOwogCQkJCX0KIAkJCQlnb3RvIGVycl9zZXR1cDsKIAkJCX0KLQkJCXRlbXBfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0udl9pZHg7CisJCQl0ZW1wX3J4X3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnZfaWR4OwogCQl9Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7Ci0JCWl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwotCQlpeGdiZV9uYXBpX2RlbF9hbGwoYWRhcHRlcik7Ci0JCUlOSVRfTElTVF9IRUFEKCZuZXRkZXYtPm5hcGlfbGlzdCk7Ci0JCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotCQlhZGFwdGVyLT5yeF9yaW5nID0gdGVtcF9yaW5nOwotCQl0ZW1wX3JpbmcgPSBOVUxMOworCQluZWVkX3VwZGF0ZSA9IHRydWU7CisJfQogCi0JCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CisJLyogaWYgcmluZ3MgbmVlZCB0byBiZSB1cGRhdGVkLCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGRvIGl0IGluIG9uZSBzaG90ICovCisJaWYgKG5lZWRfdXBkYXRlKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCisJCS8qIHR4ICovCisJCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgeworCQkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CisJCQlhZGFwdGVyLT50eF9yaW5nID0gdGVtcF90eF9yaW5nOworCQkJdGVtcF90eF9yaW5nID0gTlVMTDsKKwkJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJCX0KKworCQkvKiByeCAqLworCQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKKwkJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCQkJYWRhcHRlci0+cnhfcmluZyA9IHRlbXBfcnhfcmluZzsKKwkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CisJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCQl9CiAJfQogCiAJLyogc3VjY2VzcyEgKi8KIAllcnIgPSAwOwotZXJyX3NldHVwOgotCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CisJCWl4Z2JlX3VwKGFkYXB0ZXIpOwogCitlcnJfc2V0dXA6CiAJY2xlYXJfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNzlhYTgxMS4uMjg2ZWNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMTg3LDE1ICsxODcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV90eF9idWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0eF9idWZmZXJfaW5mbykKIHsKLQlpZiAodHhfYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCB0eF9idWZmZXJfaW5mby0+ZG1hLAotCQkgICAgICAgICAgICAgICB0eF9idWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmICh0eF9idWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgdHhfYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkodHhfYnVmZmVyX2luZm8tPnNrYik7CiAJCXR4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogdHhfYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yMDQsMTUgKzIwMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVvcCkKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBoZWFkLCB0YWlsOwogCiAJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQogCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGVvcCAqLwotCWhlYWQgPSBJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+aGVhZCk7Ci0JdGFpbCA9IElYR0JFX1JFQURfUkVHKGh3LCB0eF9yaW5nLT50YWlsKTsKIAlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IGZhbHNlOwotCWlmICgoaGVhZCAhPSB0YWlsKSAmJgotCSAgICB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgJiYKKwlpZiAodHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopICYmCiAJICAgICEoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URkNTKSAmIElYR0JFX1RGQ1NfVFhPRkYpKSB7CiAJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLwpAQCAtMjI3LDcgKzIyMiw4IEBACiAJCQkiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgogCQkJIiAgamlmZmllcyAgICAgICAgICAgICAgPCVseD5cbiIsCiAJCQl0eF9yaW5nLT5xdWV1ZV9pbmRleCwKLQkJCWhlYWQsIHRhaWwsCisJCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+aGVhZCksCisJCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCksCiAJCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSwgZW9wLAogCQkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLCBqaWZmaWVzKTsKIAkJcmV0dXJuIHRydWU7CkBAIC0yOTM0LDYgKzI5MzAsNyBAQAogICoqLwogc3RhdGljIGludCBpeGdiZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdmVjdG9yLCB2X2J1ZGdldDsKIApAQCAtMjk0OCwxMiArMjk0NSwxMiBAQAogCiAJLyoKIAkgKiBBdCB0aGUgc2FtZSB0aW1lLCBoYXJkd2FyZSBjYW4gb25seSBzdXBwb3J0IGEgbWF4aW11bSBvZgotCSAqIE1BWF9NU0lYX0NPVU5UIHZlY3RvcnMuICBXaXRoIGZlYXR1cmVzIHN1Y2ggYXMgUlNTIGFuZCBWTURxLAotCSAqIHdlIGNhbiBlYXNpbHkgcmVhY2ggdXB3YXJkcyBvZiA2NCBSeCBkZXNjcmlwdG9yIHF1ZXVlcyBhbmQKLQkgKiAzMiBUeCBxdWV1ZXMuICBUaHVzLCB3ZSBjYXAgaXQgb2ZmIGluIHRob3NlIHJhcmUgY2FzZXMgd2hlcmUKLQkgKiB0aGUgY3B1IGNvdW50IGFsc28gZXhjZWVkcyBvdXIgdmVjdG9yIGxpbWl0LgorCSAqIGh3Lm1hYy0+bWF4X21zaXhfdmVjdG9ycyB2ZWN0b3JzLiAgV2l0aCBmZWF0dXJlcworCSAqIHN1Y2ggYXMgUlNTIGFuZCBWTURxLCB3ZSBjYW4gZWFzaWx5IHN1cnBhc3MgdGhlIG51bWJlciBvZiBSeCBhbmQgVHgKKwkgKiBkZXNjcmlwdG9yIHF1ZXVlcyBzdXBwb3J0ZWQgYnkgb3VyIGRldmljZS4gIFRodXMsIHdlIGNhcCBpdCBvZmYgaW4KKwkgKiB0aG9zZSByYXJlIGNhc2VzIHdoZXJlIHRoZSBjcHUgY291bnQgYWxzbyBleGNlZWRzIG91ciB2ZWN0b3IgbGltaXQuCiAJICovCi0Jdl9idWRnZXQgPSBtaW4odl9idWRnZXQsIE1BWF9NU0lYX0NPVU5UKTsKKwl2X2J1ZGdldCA9IG1pbih2X2J1ZGdldCwgKGludClody0+bWFjLm1heF9tc2l4X3ZlY3RvcnMpOwogCiAJLyogQSBmYWlsdXJlIGluIE1TSS1YIGVudHJ5IGFsbG9jYXRpb24gaXNuJ3QgZmF0YWwsIGJ1dCBpdCBkb2VzCiAJICogbWVhbiB3ZSBkaXNhYmxlIE1TSS1YIGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlci4gKi8KQEAgLTMxNjksMTEgKzMxNjYsMTMgQEAKICNlbmRpZgogCiAJLyogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KLQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOworCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CS8qIGluaXQgZm9yIGV0aHRvb2wgb3V0cHV0ICovCiAJaHctPmZjLmhpZ2hfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRIOwogCWh3LT5mYy5sb3dfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRMOwogCWh3LT5mYy5wYXVzZV90aW1lID0gSVhHQkVfREVGQVVMVF9GQ1BBVVNFOwogCWh3LT5mYy5zZW5kX3hvbiA9IHRydWU7CisJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IGZhbHNlOwogCiAJLyogZW5hYmxlIGl0ciBieSBkZWZhdWx0IGluIGR5bmFtaWMgbW9kZSAqLwogCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKQEAgLTM0ODksMTAgKzM0ODgsMTAgQEAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAJaXhnYmVfZnJlZV9pcnEoYWRhcHRlcik7CiBlcnJfcmVxX2lycToKLQlpeGdiZV9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiBlcnJfc2V0dXBfcng6Ci0JaXhnYmVfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWl4Z2JlX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIGVycl9zZXR1cF90eDoKKwlpeGdiZV9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDE2MywzMiArNDE2MiwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZpcnN0KQogewogCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IGY7Ci0KLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisKIAl3aGlsZSAobGVuKSB7CiAJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgKHVpbnQpSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCk7CiAKIAkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CiAJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOwogCiAJCWxlbiAtPSBzaXplOwogCQlvZmZzZXQgKz0gc2l6ZTsKIAkJY291bnQrKzsKLQkJaSsrOwotCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCWkgPSAwOworCisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCQl9CiAJfQogCiAJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKQEAgLTQxOTYsMzMgKzQyMDIsMjcgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKIAkJCXNpemUgPSBtaW4obGVuLCAodWludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKIAogCQkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWctPnBhZ2UsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KLQlpZiAoaSA9PSAwKQotCQlpID0gdHhfcmluZy0+Y291bnQgLSAxOwotCWVsc2UKLQkJaSA9IGkgLSAxOworCiAJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtNDM4OCwxMyArNDM4OCwxOSBAQAogCSAgICAgICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfQ1NVTTsKIAotCWl4Z2JlX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGl4Z2JlX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0KSwKLQkgICAgICAgICAgICAgICBza2ItPmxlbiwgaGRyX2xlbik7CisJY291bnQgPSBpeGdiZV90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY291bnQpIHsKKwkJaXhnYmVfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsIGNvdW50LCBza2ItPmxlbiwKKwkJICAgICAgICAgICAgICAgaGRyX2xlbik7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlpeGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgREVTQ19ORUVERUQpOwogCi0JaXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIERFU0NfTkVFREVEKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTQ5ODcsOCArNDk5MywyMCBAQAogCiAJcmV0dXJuIHJldF92YWwgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLworI2lmZGVmIERFQlVHCisvKioKKyAqIGl4Z2JlX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKKyAqIHVzZWQgYnkgaGFyZHdhcmUgbGF5ZXIgdG8gcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgKiovCitjaGFyICppeGdiZV9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXJldHVybiBhZGFwdGVyLT5uZXRkZXYtPm5hbWU7Cit9CisKKyNlbmRpZgogbW9kdWxlX2V4aXQoaXhnYmVfZXhpdF9tb2R1bGUpOwogCiAvKiBpeGdiZV9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCAyYjJlY2JhLi4wMzBmZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC0yMDA1LDYgKzIwMDUsNyBAQAogCXUxNiBwYXVzZV90aW1lOyAvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgKi8KIAlib29sIHNlbmRfeG9uOyAvKiBGbG93IGNvbnRyb2wgc2VuZCBYT04gKi8KIAlib29sIHN0cmljdF9pZWVlOyAvKiBTdHJpY3QgSUVFRSBtb2RlICovCisJYm9vbCBkaXNhYmxlX2ZjX2F1dG9uZWc7IC8qIFR1cm4gb2ZmIGF1dG9uZWcgRkMgbW9kZSAqLwogCWVudW0gaXhnYmVfZmNfbW9kZSBjdXJyZW50X21vZGU7IC8qIEZDIG1vZGUgaW4gZWZmZWN0ICovCiAJZW51bSBpeGdiZV9mY19tb2RlIHJlcXVlc3RlZF9tb2RlOyAvKiBGQyBtb2RlIHJlcXVlc3RlZCBieSBjYWxsZXIgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmMgYi9kcml2ZXJzL25ldC9tZXRoLmMKaW5kZXggYzMzNmExZi4uYWEwODk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L21ldGguYwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCQlpbnQgbGVuID0gKHN0YXR1cyAmIDB4ZmZmZikgLSA0OyAvKiBvbWl0IENSQyAqLwogCQkJLyogbGVuZ3RoIHNhbml0eSBjaGVjayAqLwogCQkJaWYgKGxlbiA8IDYwIHx8IGxlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldCBzaXplOiAlbGQsIHN0YXR1cz0lIzJseC5cbiIsCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQgc2l6ZTogJWxkLCBzdGF0dXM9JSMyTHguXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIHByaXYtPnJ4X3dyaXRlLAogCQkJCSAgICAgICBwcml2LT5yeF9yaW5nW3ByaXYtPnJ4X3dyaXRlXS0+c3RhdHVzLnJhdyk7CiAJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDlmNjY0NGEuLjMwM2MyM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwpAQCAtNTA1LDcgKzUwNSw3IEBACiAKIHN0YXRpYyB2b2lkIG1seDRfZW5fZG9fZ2V0X3N0YXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9lbl9wcml2LAogCQkJCQkJIHN0YXRzX3Rhc2spOwogCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggYTQxMzBlNy4uN2U0MDc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIHZvaWQgbWx4NF9lbl9yeF9yZWZpbGwoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGVsYXksIHN0cnVjdCBtbHg0X2VuX3ByaXYsCiAJCQkJCQkgcmVmaWxsX3Rhc2spOwogCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKaW5kZXggNmQ1MDg5ZS4uZjM2YWU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIHN0YXRpYyB2b2lkIG1seDRfc2Vuc2VfcG9ydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9zZW5zZSwKIAkJCQkJCXNlbnNlX3BvbGwpOwogCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gc2Vuc2UtPmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCBkMzA0ZDM4Li5lY2VhZGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0yOTQsMTQgKzI5NCwxMiBAQAogCiBzdGF0aWMgc3NpemVfdCBzaG93X2xvY2FsX2lwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lZC4lZC4lZFxuIiwKLQkJCUhJUFFVQUQobnQtPm5wLmxvY2FsX2lwKSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXBJNFxuIiwgJm50LT5ucC5sb2NhbF9pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfcmVtb3RlX2lwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZC4lZC4lZC4lZFxuIiwKLQkJCUhJUFFVQUQobnQtPm5wLnJlbW90ZV9pcCkpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwSTRcbiIsICZudC0+bnAucmVtb3RlX2lwKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqYnVmKQpAQCAtNDM4LDcgKzQzNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW50LT5ucC5sb2NhbF9pcCA9IG50b2hsKGluX2F0b24oYnVmKSk7CisJbnQtPm5wLmxvY2FsX2lwID0gaW5fYXRvbihidWYpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC00NTQsNyArNDUyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbnQtPm5wLnJlbW90ZV9pcCA9IG50b2hsKGluX2F0b24oYnVmKSk7CisJbnQtPm5wLnJlbW90ZV9pcCA9IGluX2F0b24oYnVmKTsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk1MDEwLmMgYi9kcml2ZXJzL25ldC9uaTUwMTAuYwppbmRleCA1MzllMThhLi4yYThkYTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUwMTAuYworKysgYi9kcml2ZXJzL25ldC9uaTUwMTAuYwpAQCAtMTg5LDYgKzE4OSwxNyBAQAogCQlvdXRiKE1NX0VOX1hNVHxNTV9NVVgsIElFX01NT0RFKTsgLyogU3RhcnQgdHJhbnNtaXNzaW9uICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmk1MDEwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5pNTAxMF9vcGVuLAorCS5uZG9fc3RvcAkJPSBuaTUwMTBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5pNTAxMF9zZW5kX3BhY2tldCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG5pNTAxMF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG5pNTAxMF90aW1lb3V0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKK307CisKIC8qCiAgKiAgICAgIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gIExpbnV4IGhhcyBhIGhpc3Rvcnkgb2YgZnJpZW5kbHkgZGV2aWNlCiAgKiAgICAgIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gIEEgZ29vZCBkZXZpY2UgcHJvYmVzIGF2b2lkcyBkb2luZyB3cml0ZXMsIGFuZApAQCAtMzI4LDEzICszMzksOCBAQAogICAgICAgICAJb3V0YigwLCBJRV9SQlVGKTsJLyogc2V0IGJ1ZmZlciBieXRlIDAgdG8gMCBhZ2FpbiAqLwogCX0KICAgICAgICAgcHJpbnRrKCItPiBidWZzaXplIHJjdi94bXQ9JWQvJWRcbiIsIGJ1ZnNpemVfcmN2LCBOSTUwMTBfQlVGU0laRSk7Ci0JbWVtc2V0KG5ldGRldl9wcml2KGRldiksIDAsIHNpemVvZihzdHJ1Y3Qgbmk1MDEwX2xvY2FsKSk7CiAKLQlkZXYtPm9wZW4JCT0gbmk1MDEwX29wZW47Ci0JZGV2LT5zdG9wCQk9IG5pNTAxMF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG5pNTAxMF9zZW5kX3BhY2tldDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG5pNTAxMF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG5pNTAxMF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmbmk1MDEwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaLzIwOwogCiAJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsJLyogTXVsdGljYXN0IGRvZXNuJ3Qgd29yayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCA1MGMxMTEyLi4wMmMzN2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMzQ0MSw3ICszNDQxLDggQEAKIAlyZXR1cm4gbnVtX3JjcjsKIH0KIAotc3RhdGljIGludCBuaXVfcHJvY2Vzc19yeF9wa3Qoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJwKQorc3RhdGljIGludCBuaXVfcHJvY2Vzc19yeF9wa3Qoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3Qgbml1ICpucCwKKwkJCSAgICAgIHN0cnVjdCByeF9yaW5nX2luZm8gKnJwKQogewogCXVuc2lnbmVkIGludCBpbmRleCA9IHJwLT5yY3JfaW5kZXg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTM1MTgsNyArMzUxOSw3IEBACiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBucC0+ZGV2KTsKIAlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnAtPnJ4X2NoYW5uZWwpOwotCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogCiAJcmV0dXJuIG51bV9yY3I7CiB9CkBAIC0zNzA2LDcgKzM3MDcsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBuaXVfcnhfd29yayhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAsIGludCBidWRnZXQpCitzdGF0aWMgaW50IG5pdV9yeF93b3JrKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IG5pdSAqbnAsCisJCSAgICAgICBzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCwgaW50IGJ1ZGdldCkKIHsKIAlpbnQgcWxlbiwgcmNyX2RvbmUgPSAwLCB3b3JrX2RvbmUgPSAwOwogCXN0cnVjdCByeGRtYV9tYWlsYm94ICptYm94ID0gcnAtPm1ib3g7CkBAIC0zNzI4LDcgKzM3MzAsNyBAQAogCXJjcl9kb25lID0gd29ya19kb25lID0gMDsKIAlxbGVuID0gbWluKHFsZW4sIGJ1ZGdldCk7CiAJd2hpbGUgKHdvcmtfZG9uZSA8IHFsZW4pIHsKLQkJcmNyX2RvbmUgKz0gbml1X3Byb2Nlc3NfcnhfcGt0KG5wLCBycCk7CisJCXJjcl9kb25lICs9IG5pdV9wcm9jZXNzX3J4X3BrdChuYXBpLCBucCwgcnApOwogCQl3b3JrX2RvbmUrKzsKIAl9CiAKQEAgLTM3NzYsNyArMzc3OCw3IEBACiAJCWlmIChyeF92ZWMgJiAoMSA8PCBycC0+cnhfY2hhbm5lbCkpIHsKIAkJCWludCB0aGlzX3dvcmtfZG9uZTsKIAotCQkJdGhpc193b3JrX2RvbmUgPSBuaXVfcnhfd29yayhucCwgcnAsCisJCQl0aGlzX3dvcmtfZG9uZSA9IG5pdV9yeF93b3JrKCZscC0+bmFwaSwgbnAsIHJwLAogCQkJCQkJICAgICBidWRnZXQpOwogCiAJCQlidWRnZXQgLT0gdGhpc193b3JrX2RvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvb3NpdGVjaC5oIGIvZHJpdmVycy9uZXQvcGNtY2lhL29zaXRlY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyNmVmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvb3NpdGVjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmaXJtd2FyZSBvZiBTZXZlbiBvZiBEaWFtb25kcyBmcm9tIE9TSVRFQ0guCi0gICAgKFNwZWNpYWwgdGhhbmtzIHRvIEtldmluIE1hY1BoZXJzb24gb2YgT1NJVEVDSCkKLQotICAgIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKLSAgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotKi8KLQotICAgIHN0YXRpYyBjb25zdCB1X2NoYXIgX19YaWxpbng3T0RbXSA9IHsKLSAgICAweEZGLCAweDA0LCAweEEwLCAweDM2LCAweEYzLCAweEVDLCAweEZGLCAweEZGLCAweEZGLCAweERGLCAweEZCLCAweEZGLAotICAgIDB4RjMsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4M0YsIDB4RkYsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4N0YsIDB4RkUsIDB4RkYsCi0gICAgMHhDRSwgMHhGRSwgMHhGRSwgMHhGRSwgCi0gICAgMHhGRSwgMHhERSwgMHhCRCwgMHhERCwgMHhGRCwgMHhGRiwgMHhGRCwgMHhDRiwgMHhGNywgMHhCRiwgMHg3RiwgMHhGRiwKLSAgICAweDdGLCAweDNGLCAweEZFLCAweEJGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJDLCAweEZGLCAweEZGLCAweEJELCAweEI1LCAweDdGLCAweDdGLCAweEJGLCAweEJGLAotICAgIDB4N0YsIDB4RkYsIDB4RUYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RjcsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4REUsCi0gICAgMHhGRSwgMHhGRSwgMHhGQSwgMHhERSwgCi0gICAgMHhCRCwgMHhGRCwgMHhFRCwgMHhGRCwgMHhGRCwgMHhDRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhDNywgMHhERiwKLSAgICAweERGLCAweERGLCAweERGLCAweERGLCAKLSAgICAweEZGLCAweDdFLCAweEZFLCAweEZELCAweDdELCAweDZELCAweEVFLCAweEZFLCAweDdDLCAweEZCLCAweEY0LCAweEZCLAotICAgIDB4Q0YsIDB4REIsIDB4REYsIDB4RkYsIAotICAgIDB4RkYsIDB4QkIsIDB4N0YsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RjcsIDB4RkYsIDB4OUUsIDB4QkYsIDB4M0IsIDB4QkYsCi0gICAgMHhCRiwgMHg3RiwgMHg3RiwgMHg3RiwgCi0gICAgMHg3RSwgMHg2RiwgMHhERiwgMHhFRiwgMHhGNSwgMHhGNiwgMHhGRCwgMHhGNiwgMHhGNSwgMHhFRCwgMHhFQiwgMHhGRiwKLSAgICAweEVGLCAweEVGLCAweEVGLCAweDdFLCAKLSAgICAweDdGLCAweDdGLCAweDZGLCAweDdGLCAweEZGLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEVGLCAweEJGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkMsIDB4MUYsIDB4MUYsIDB4RUUsIDB4RkYsIDB4QkMsCi0gICAgMHhCNywgMHhGRiwgMHhERiwgMHhGRiwgCi0gICAgMHhERiwgMHhFRiwgMHgzQiwgMHhFMywgMHhEMywgMHhGRiwgMHhGQiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEJBLCAweEJGLCAweDJELCAKLSAgICAweERCLCAweEJELCAweEZELCAweERCLCAweERGLCAweEZBLCAweEZCLCAweEZGLCAweEVGLCAweEZCLCAweERCLCAweEYzLAotICAgIDB4RkYsIDB4REYsIDB4RkQsIDB4N0YsIAotICAgIDB4RUYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4QkUsIDB4QkYsIDB4MjcsIDB4QkEsIDB4RkUsIDB4RkIsIDB4REYsIDB4RkYsCi0gICAgMHhGNiwgMHhGRiwgMHhGRiwgMHhFRiwgCi0gICAgMHhGQiwgMHhEQiwgMHhGMywgMHhEOSwgMHg5QSwgMHgzRiwgMHhGRiwgMHhBRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhCRSwKLSAgICAweDNGLCAweDM3LCAweEJELCAweDk2LCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFFLCAweEZCLCAweEYzLCAweEYzLCAweEVCLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RjcsIDB4RkEsIDB4QkMsIDB4QUUsIDB4RkUsIDB4QkUsIDB4RkUsIDB4QkIsIDB4N0YsIDB4RkQsIDB4RkYsCi0gICAgMHg3RiwgMHhFRiwgMHhGNywgMHhGQiwgCi0gICAgMHhCQiwgMHhENywgMHhGNywgMHg3RiwgMHhGRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGNywgMHhCQywgMHhFRCwgMHhGRCwKLSAgICAweEJELCAweDlELCAweDdELCAweDdCLCAKLSAgICAweEZCLCAweDdCLCAweDdCLCAweEZCLCAweEFGLCAweEZGLCAweEZFLCAweEZELCAweEZELCAweEZFLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIAotICAgIDB4QUEsIDB4QjksIDB4QkYsIDB4OEYsIDB4QkYsIDB4REYsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkYsIDB4N0YsIDB4Q0YsCi0gICAgMHhGQiwgMHhFQiwgMHhDQiwgMHhFQiwgCi0gICAgMHhFRSwgMHhGRiwgMHhGRiwgMHhENywgMHhGRiwgMHhGRiwgMHhGRiwgMHgzRSwgMHgzMywgMHgzRiwgMHgxQywgMHg3QywKLSAgICAweEZDLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweENGLCAweEQzLCAweEYzLCAweEUzLCAweEYzLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUIsIDB4RkUsIDB4MzUsIAotICAgIDB4M0YsIDB4M0QsIDB4RkQsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RUYsIDB4NkYsIDB4RTMsCi0gICAgMHhFMywgMHhFMywgMHhFRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHgzRSwgMHg1RSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEFGLCAweENGLCAweEYyLCAweENCLCAweENGLCAweDhFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotICAgIDB4RkMsIDB4M0UsIDB4MUYsIDB4OUUsIAotICAgIDB4QUQsIDB4RkQsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4QjMsIDB4RjcsIDB4RTcsCi0gICAgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRSwgMHhFQiwgMHhBQiwgMHhBRiwgMHg5RiwgMHhFMywgMHg3RiwgMHhGRiwgMHhERSwKLSAgICAweEZGLCAweDdGLCAweEVFLCAweEZGLCAKLSAgICAweEZGLCAweEZCLCAweDNBLCAweEZBLCAweEZGLCAweEYyLCAweDc3LCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEZGLAotICAgIDB4RkUsIDB4QkQsIDB4QUUsIDB4REUsIAotICAgIDB4N0QsIDB4N0QsIDB4RkQsIDB4RkYsIDB4QkYsIDB4RUUsIDB4RkYsIDB4RkQsIDB4RkYsIDB4REIsIDB4RkIsIDB4RkYsCi0gICAgMHhGNywgMHhFRiwgMHhGQiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRSwgMHhGRiwgMHgyRCwgMHhBRiwgMHhCOSwgMHhGRCwgMHg3OSwgMHhGQiwgMHhGQSwgMHhGRiwgMHhCRiwKLSAgICAweEVGLCAweEZGLCAweEZGLCAweDkxLCAKLSAgICAweEZBLCAweEZCLCAweERGLCAweEY3LCAweEY3LCAweEZGLCAweEZGLCAweEZGLCAweEZDLCAweENGLCAweDM3LCAweEJGLAotICAgIDB4QkYsIDB4RkYsIDB4N0YsIDB4N0YsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4QUYsIDB4RkYsIDB4RkYsIDB4RjMsIDB4RkIsIDB4RkIsIDB4RkYsIDB4RjUsIDB4RUYsCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgCi0gICAgMHhGRiwgMHhGRiwgMHhFRSwgMHhGQSwgMHhGRSwgMHhGQiwgMHg1NSwgMHhERCwgMHhGRiwgMHg3RiwgMHhBRiwgMHhGRSwKLSAgICAweEZGLCAweEZCLCAweEZCLCAweEY1LCAKLSAgICAweEZGLCAweEY3LCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEJFLCAweEJELCAweEJELCAweEJELCAweEJELCAweDdELAotICAgIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIAotICAgIDB4RkIsIDB4QUUsIDB4RkYsIDB4RkQsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNywgMHhEQSwgMHhCNywgMHg2MSwgCi0gICAgMHhGRiwgMHhCOSwgMHg1OSwgMHhGMywgMHg3MywgMHhGMywgMHhERiwgMHg3RiwgMHg2RiwgMHhERiwgMHhFRiwgMHhGNywKLSAgICAweEVCLCAweEVCLCAweEQ3LCAweEZGLCAKLSAgICAweEQ3LCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweDdGLCAweEZCLCAweDNFLCAweDM4LCAweDczLCAweEY2LCAweDdGLAotICAgIDB4RkMsIDB4RkYsIDB4RkYsIDB4Q0YsIAotICAgIDB4RkYsIDB4QjcsIDB4RkIsIDB4QjMsIDB4QjMsIDB4NjcsIDB4RkYsIDB4RTcsIDB4RkQsIDB4RkYsIDB4RUYsIDB4RjYsCi0gICAgMHg3RiwgMHhCNywgMHhCQywgMHhGNSwgCi0gICAgMHg3QiwgMHhGNiwgMHhGNywgMHhGNSwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgMHhGNywgMHhGRiwgMHhGNywgMHhDRSwKLSAgICAweEU3LCAweEZGLCAweDlGLCAweEZGLCAKLSAgICAweEZGLCAweEY1LCAweEZFLCAweDdELCAweEZGLCAweDVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUYsIDB4RkYsIDB4RjYsIAotICAgIDB4Q0IsIDB4REIsIDB4RUUsIDB4RkUsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4N0YsIDB4QkUsCi0gICAgMHgxRSwgMHgzRSwgMHhGRSwgMHhGRiwgCi0gICAgMHg3RCwgMHhGRSwgMHhGRiwgMHhGRiwgMHhFRiwgMHhCRiwgMHhFNywgMHhGRiwgMHhFMywgMHhFMywgMHhGRiwgMHhERiwKLSAgICAweEU3LCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEI4LCAweEVGLCAweEI3LCAweDJGLCAweEVFLCAweEZGLCAweERGLCAweEZGLCAweEJGLCAweEZGLCAweDdGLCAweEVGLAotICAgIDB4RUIsIDB4QkYsIDB4QTMsIDB4RDMsIAotICAgIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4QkUsIDB4RkQsIDB4M0YsIDB4Q0YsIDB4RkQsCi0gICAgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhBRiwgMHhGQiwgMHhCRiwgMHhCQiwgMHhCRiwgMHhEQiwgMHhGRCwgMHhGQiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweDNFLCAweEZFLCAKLSAgICAweDNGLCAweEJBLCAweEJBLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEVGLCAweEMzLCAweDdGLAotICAgIDB4QjIsIDB4OUIsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4M0MsIDB4RkYsIDB4M0YsIDB4M0MsIDB4RkYsIDB4RkUsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhBRiwgMHhGMywgMHhGRSwgMHhGMywgMHhFMywgMHhFQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwgMHhGNywKLSAgICAweDlBLCAweEZFLCAweEFGLCAweDlFLCAKLSAgICAweEJFLCAweEZFLCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweDdCLCAweEVGLCAweEY3LCAweEJGLCAweEZCLCAweEZCLAotICAgIDB4RkIsIDB4RkYsIDB4RkYsIDB4N0YsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkMsIDB4QkQsIDB4RkQsIDB4QkQsIDB4REQsIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsCi0gICAgMHg3QiwgMHhGQiwgMHhBRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHg5QSwgMHhGRiwKLSAgICAweDlGLCAweEZGLCAweEFGLCAweEVGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweENGLCAweEYzLCAweEZGLCAweEVCLCAweEZGLCAweEVCLCAweEZGLAotICAgIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkUsIDB4RkYsIDB4MzcsIDB4RkMsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhDRiwgMHhFRiwgMHhGRCwgMHhGMywgCi0gICAgMHhGRiwgMHhFRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg2RSwgMHhGRCwgMHgyRiwgMHhGRCwKLSAgICAweEZGLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweENGLCAweEZGLCAweEYzLCAweEJGLCAweDY5LCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIAotICAgIDB4RkIsIDB4OUYsIDB4RkYsIDB4QkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4ODcsCi0gICAgMHhGRSwgMHhEQSwgMHhFRiwgMHhDRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhFRiwgMHhCRiwgMHhFRiwgMHhFRiwgMHhGRCwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEVGLCAweEZELCAweEZGLCAweDdCLCAweEZGLCAweEVCLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RUIsIDB4RjgsIDB4RkYsIDB4RUYsIAotICAgIDB4QUYsIDB4RkYsIDB4RkYsIDB4QkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUUsIDB4N0YsIDB4RUYsIDB4RkYsCi0gICAgMHhCQiwgMHhGRiwgMHhCRiwgMHhGQiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGNiwgMHhGQiwgMHhCRCwgMHhGRCwgMHhERCwgMHhGNSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEFGLCAKLSAgICAweEZGLCAweDVGLCAweEY1LCAweERGLCAweEZGLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY2LAotICAgIDB4RjMsIDB4RkYsIDB4REUsIDB4RkUsIAotICAgIDB4RUYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4REUsIDB4REYsIDB4NUYsIDB4REYsCi0gICAgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEFGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweEVELCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweERBLCAweEJELCAweEJFLAotICAgIDB4QUUsIDB4RkUsIDB4N0YsIDB4RkQsIAotICAgIDB4REYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUYsIDB4RkYsIDB4RkIsIDB4RkIsIDB4RkIsIDB4N0YsIDB4RjcsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgCi0gICAgMHhCQywgMHhGRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHhGRCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhBRSwKLSAgICAweEZGLCAweEZGLCAweEZELCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZBLCAweDlGLCAweEJGLCAweEJGLCAweENGLAotICAgIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4QUYsIDB4RkYsIDB4RUIsIDB4RUIsIDB4RUIsIDB4RkYsIDB4RDcsIDB4RkUsIDB4RkYsIDB4RkYsCi0gICAgMHhCRiwgMHhFNywgMHhGRSwgMHhCRiwgCi0gICAgMHg3RiwgMHhGQywgMHhGRiwgMHhGRiwgMHhFRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg0RiwgMHhGRiwgMHhGQiwKLSAgICAweEZCLCAweEZGLCAweEZGLCAweERELCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEJELCAweERGLCAweDlELCAweEZELCAweERGLCAweEI5LAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkYsIDB4RkIsIDB4RUYsIDB4RUIsIDB4RkYsIDB4REUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNiwgMHg5RiwgMHhGRiwgMHhGQywgCi0gICAgMHhGRSwgMHhGQiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhERiwgMHhGQSwgMHhDRCwgMHhDRiwKLSAgICAweEJGLCAweDlGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEJGLCAweEZGLCAweERGLCAweEVGLCAweDVGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4N0YsIDB4NkYsIDB4RkYsIAotICAgIDB4QkIsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0UsIDB4RkYsCi0gICAgMHg1RiwgMHhGRiwgMHhCRiwgMHhCRiwgCi0gICAgMHhGOSwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHg2RSwgMHg3QiwgMHhGRiwgMHhFRiwgMHhGRCwgMHhFQiwgMHhERiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEY3LCAweEI2LCAweDNFLCAweEZDLCAweEZELCAweEJGLCAweDdFLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEY3LAotICAgIDB4RUYsIDB4RjcsIDB4RjMsIDB4RjcsIAotICAgIDB4RkYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NkUsIDB4MzUsIDB4NzksIDB4RkYsCi0gICAgMHhCRiwgMHhGQywgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQiwgMHg1MywgMHhERiwgMHhGRiwgMHhFQiwgMHhCRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJDLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFGLCAweEY1LAotICAgIDB4RkYsIDB4RjcsIDB4RkYsIDB4RkIsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkEsIDB4QUEsIDB4RUUsIDB4RkUsIDB4M0YsIDB4N0QsCi0gICAgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHg3RiwgMHhBRiwgMHg3NywgMHhGQiwgMHhGQiwgMHhGRiwgMHhGQiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEY3LCAweEJFLCAweEJELCAweEJELCAKLSAgICAweEJELCAweEJELCAweEZELCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLCAweEFFLCAweEZGLCAweEVGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkMsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OUEsIDB4RDksIDB4QjgsIDB4RkYsIDB4RkYsIDB4NzksIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhDRiwgCi0gICAgMHhGQiwgMHhGRiwgMHhFQiwgMHhGRiwgMHhFQiwgMHhENywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywgMHhERSwKLSAgICAweEY4LCAweEZCLCAweEZFLCAweDNGLCAKLSAgICAweEZCLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENGLCAweEFELCAweEJGLCAweEZBLCAweEZGLCAweDczLAotICAgIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4M0EsIDB4RjUsIDB4QjcsIDB4RkMsIDB4M0YsIDB4RjksIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHg3RiwgMHhFRiwgMHhGMywgMHhGRiwgCi0gICAgMHhCRiwgMHhGRSwgMHhGMywgMHg5RiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHgzRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEJGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFGLCAweEQzLCAweEZFLCAweERCLCAweEZGLCAweERCLCAweERGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4M0UsIDB4RkYsIDB4QkYsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OEYsCi0gICAgMHhGMywgMHhGRiwgMHhFRCwgMHhGRiwgCi0gICAgMHhGNywgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGNiwgMHgzQywgMHhGRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDlGLCAweEVGLCAweEVGLCAweEQxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4N0UsIDB4QkYsIAotICAgIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkIsIDB4RUYsIDB4REYsIDB4RjEsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRSwgMHgzRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJGLCAKLSAgICAweEVGLCAweEZELCAweEMzLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLAotICAgIDB4RkMsIDB4M0UsIDB4RkUsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MkUsIDB4RUYsIDB4RjMsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhCQSwgMHhCRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweDdGLCAweEFGLCAweEZCLCAKLSAgICAweEZCLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEYyLCAweEQ2LCAweEVELAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4N0QsIAotICAgIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4QUYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHg5MiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwKLSAgICAweEFGLCAweEVCLCAweEVCLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEU3LCAweEZFLCAweDJFLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4NEYsIDB4RUYsIDB4RjMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgCi0gICAgMHgzQywgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhDRSwKLSAgICAweEMzLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweDVELCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RUYsIDB4Q0YsIDB4RUIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNywgMHhFRSwgMHgzRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhFRiwgMHhERiwgMHhFMiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZCLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY2LCAweEJFLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUUsIAotICAgIDB4NUYsIDB4RTYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0UsCi0gICAgMHg3RCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGMywgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJGLCAweEY3LCAweDM2LCAweEJFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUYsIDB4RDMsIDB4RjYsIAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkMsIDB4N0YsIDB4RUUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRiwgMHhFRiwgMHhFQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJBLCAweEJFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVFLAotICAgIDB4RkIsIDB4RkEsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RDYsIDB4RkQsIDB4QkQsIDB4QkQsIDB4QkQsCi0gICAgMHg3RCwgMHg3QiwgMHg3QiwgMHg3QiwgCi0gICAgMHg3QiwgMHhGQiwgMHhBRSwgMHhGRiwgMHg3RSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEY3LCAweEJBLCAweEJGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEVGLCAweEVCLCAweDZCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkUsIDB4QkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHg0RiwgMHhFRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwKLSAgICAweDNFLCAweDZFLCAweEZDLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEMzLCAweEM5LCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0UsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQiwgCi0gICAgMHhENSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDZGLCAweEVGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RjYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RkUsCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywgMHhGRiwgMHhGRSwgMHhGRiwgMHhGNywgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDdGLCAweEZBLCAweEVGLCAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RTcsIDB4RkYsIDB4RkUsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RkUsIDB4RUYsIDB4QkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBNywgMHhGRiwgMHhGQywgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDdGLCAKLSAgICAweEZFLCAweEFFLCAweEZGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEU3LAotICAgIDB4RjcsIDB4RkEsIDB4RkYsIDB4RkQsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4QUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhCRSwgMHhCRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHg3RCwgMHg3QiwgMHg3QiwKLSAgICAweDdCLCAweDdCLCAweEZCLCAweEFGLCAKLSAgICAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENBLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4NkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhFNywgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweENGLCAweEZFLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweERGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhFNywgMHhGMiwgMHhGQywgCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhBRSwgMHhFRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweDdFLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsCi0gICAgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhFRiwgMHhERCwgMHhGRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4QUYsIDB4RUYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkEsIDB4RkUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEY2LCAweDlDLCAweEJELCAweEJELCAweEJELCAweEJELCAweDdELCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLAotICAgIDB4QUUsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4N0EsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHg2RiwgMHhFRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEY3LCAweEZFLCAKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENGLCAweEVCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4OUUsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhFRiwgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZFLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEVGLCAweENCLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkUsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOCwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGQiwgMHhBRiwgMHg3RiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhFRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QUUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDdGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RjcsIDB4QkMsIDB4QkQsIAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4QUYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDdGLCAKLSAgICAweEFGLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4Q0YsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEVGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEVGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZFLCAweEZGLCAweDlGLCAweDlGLAotICAgIDB4OUYsIDB4M0YsIDB4M0YsIDB4M0YsIAotICAgIDB4M0YsIDB4M0YsIDB4RkYsIDB4RUYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4Q0YsIDB4QjcsIDB4QkYsIDB4QkYsCi0gICAgMHhCRiwgMHhCRiwgMHhGRiwgMHhCQywgCi0gICAgMHhCOSwgMHg5RCwgMHhCRCwgMHhCRCwgMHg3RCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhFRiwgMHhENywKLSAgICAweEY1LCAweEYzLCAweEYxLCAweEQxLCAKLSAgICAweDY1LCAweEUzLCAweEUzLCAweEUzLCAweEEzLCAweEZGLCAweEZFLCAweDdGLCAweEZFLCAweERFLCAweERFLCAweEZGLAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIAotICAgIDB4REYsIDB4RUYsIDB4RkIsIDB4RjcsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RTcsIDB4RTcsIDB4RTcsIDB4RTcsIDB4RTcsCi0gICAgMHhGQiwgMHhGRSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgotICAgIAotICAgIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDc3NDIzMmMuLjQ4ZGJiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC01NSwxNyArNTYsMTggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotLyogT3NpdGVjaCBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLwotI2luY2x1ZGUgIm9zaXRlY2guaCIKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKIAorLyogRmlybXdhcmUgbmFtZSAqLworI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkib3NpdGVjaC9YaWxpbng3T0QuYmluIgorCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNNQyA5MWM5MiBzZXJpZXMgUENNQ0lBIGV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogCiAjZGVmaW5lIElOVF9NT0RVTEVfUEFSTShuLCB2KSBzdGF0aWMgaW50IG4gPSB2OyBtb2R1bGVfcGFyYW0obiwgaW50LCAwKQogCkBAIC03NzEsNiArNzczLDI2IEBACiAgICAgcmV0dXJuIGk7CiB9CiAKK3N0YXRpYyBpbnQgb3NpX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIEZJUk1XQVJFX05BTUUsICZsaW5rLT5kZXYpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIERvd25sb2FkIHRoZSBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLworCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZTsgaSsrKSB7CisJICAgIG91dGIoZnctPmRhdGFbaV0sIGxpbmstPmlvLkJhc2VQb3J0MSArIDIpOworCSAgICB1ZGVsYXkoNTApOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG9zaV9zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgdV9zaG9ydCBtYW5maWQsIHVfc2hvcnQgY2FyZGlkKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwpAQCAtODExLDExICs4MzMsOSBAQAogCSAoY2FyZGlkID09IFBST0RJRF9PU0lURUNIX1NFVkVOKSkgfHwKIAkoKG1hbmZpZCA9PSBNQU5GSURfUFNJT04pICYmCiAJIChjYXJkaWQgPT0gUFJPRElEX1BTSU9OX05FVDEwMCkpKSB7Ci0JLyogRG93bmxvYWQgdGhlIFNldmVuIG9mIERpYW1vbmRzIGZpcm13YXJlICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihfX1hpbGlueDdPRCk7IGkrKykgewotCSAgICBvdXRiKF9fWGlsaW54N09EW2ldLCBsaW5rLT5pby5CYXNlUG9ydDErMik7Ci0JICAgIHVkZWxheSg1MCk7Ci0JfQorCXJjID0gb3NpX2xvYWRfZmlybXdhcmUobGluayk7CisJaWYgKHJjKQorCQlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9IGVsc2UgaWYgKG1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgewogCS8qIE1ha2Ugc3VyZSBib3RoIGZ1bmN0aW9ucyBhcmUgcG93ZXJlZCB1cCAqLwogCXNldF9iaXRzKDB4MzAwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyBPU0lURUNIX0FVSV9QV1IpOwpAQCAtODYyLDEwICs4ODIsMTAgQEAKIAkgICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHx8CiAJICAgICgoc21jLT5tYW5maWQgPT0gTUFORklEX1BTSU9OKSAmJgogCSAgICAgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9QU0lPTl9ORVQxMDApKSkgewotCQkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihfX1hpbGlueDdPRCk7IGkrKykgewotCQkJb3V0YihfX1hpbGlueDdPRFtpXSwgbGluay0+aW8uQmFzZVBvcnQxKzIpOwotCQkJdWRlbGF5KDUwKTsKKwkJaSA9IG9zaV9sb2FkX2Zpcm13YXJlKGxpbmspOworCQlpZiAoaSkgeworCQkJcHJfZXJyKCJzbWM5MWM5Ml9jczogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQkJcmV0dXJuIGk7CiAJCX0KIAl9CiAJaWYgKGxpbmstPm9wZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCA1OGI3M2IwLi4zZmYxZjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC03NTcsOCArNzU3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0KLQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0KIAkJCWNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKIAlpbnQgbmVlZHNfYW5lZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCBhNTAwNzg2Li45MTNiMmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgInFsZ2UuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggMDZjNTM1Mi4uZTFhNjM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0yMDc1LDggKzIwNzUsNyBAQAogCWlmICghdHAtPnBjaWVfY2FwICYmIG5ldGlmX21zZ19wcm9iZSh0cCkpCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJubyBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5XG4iKTsKIAotCS8qIFVubmVlZGVkID8gRG9uJ3QgbWVzcyB3aXRoIE1ycy4gTXVycGh5LiAqLwotCXJ0bDgxNjlfaXJxX21hc2tfYW5kX2Fjayhpb2FkZHIpOworCVJUTF9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CiAKIAkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwogCVJUTF9XOChDaGlwQ21kLCBDbWRSZXNldCk7CkBAIC0yMDg4LDYgKzIwODcsOCBAQAogCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxKTsKIAl9CiAKKwlSVExfVzE2KEludHJTdGF0dXMsIDB4ZmZmZik7CisKIAkvKiBJZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovCiAJcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24odHAsIGlvYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCAwMGMyM2IxLi5kZWUyM2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC00NDgsNiArNDQ4LDkgQEAKIAogCQlXQVJOX09OKGNoYW5uZWwtPnJ4X3BrdCAhPSBOVUxMKTsKIAkJZWZ4X3J4X3N0cmF0ZWd5KGNoYW5uZWwpOworCisJCW5ldGlmX25hcGlfYWRkKGNoYW5uZWwtPm5hcGlfZGV2LCAmY2hhbm5lbC0+bmFwaV9zdHIsCisJCQkgICAgICAgZWZ4X3BvbGwsIG5hcGlfd2VpZ2h0KTsKIAl9CiB9CiAKQEAgLTQ2MiwxMCArNDY1LDYgQEAKIAogCUVGWF9MT0coY2hhbm5lbC0+ZWZ4LCAic3RhcnRpbmcgY2hhbiAlZFxuIiwgY2hhbm5lbC0+Y2hhbm5lbCk7CiAKLQlpZiAoIShjaGFubmVsLT5lZngtPm5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkKLQkJbmV0aWZfbmFwaV9hZGQoY2hhbm5lbC0+bmFwaV9kZXYsICZjaGFubmVsLT5uYXBpX3N0ciwKLQkJCSAgICAgICBlZnhfcG9sbCwgbmFwaV93ZWlnaHQpOwotCiAJLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGlzIGNoYW5uZWwgbWF5IHNldCB3b3JrX3BlbmRpbmcKIAkgKiBhcyBzb29uIGFzIHdlIGVuYWJsZSBpdC4gIE1ha2Ugc3VyZSBpdCdzIGNsZWFyZWQgYmVmb3JlCiAJICogdGhlbi4gIFNpbWlsYXJseSwgbWFrZSBzdXJlIGl0IHNlZXMgdGhlIGVuYWJsZWQgZmxhZyBzZXQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDZjNDRmODYuLjkxMjMwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0zNDYsMzggKzM0Niw2IEBACiAjZGVmaW5lIFJQQ19MU0FfREVGQVVMVAkJUlBDX0xFRF9UWF9SWAogI2RlZmluZSBSUENfTFNCX0RFRkFVTFQJCVJQQ19MRURfMTAwXzEwCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTFYMDApCi0KLSNpbmNsdWRlIDxhdTF4eHguaD4KLQotLyogV2UgY2FuIG9ubHkgZG8gMTYtYml0IHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIHN0YXRpYyBtZW1vcnkgc3BhY2UuICovCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMAotI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCi0jZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTAKLSNkZWZpbmUgU01DX0lPX1NISUZUCQkwCi0jZGVmaW5lIFNNQ19OT1dBSVQJCTEKLQotI2RlZmluZSBTTUNfaW53KGEsIHIpCQlhdV9yZWFkdygodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJXAotCWRvIHsJXAotCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKLQkJaW50IF9sID0gKGwpOyBcCi0JCXUxNiAqX3AgPSAodTE2ICopKHApOyBcCi0JCXdoaWxlIChfbC0tID4gMCkgXAotCQkJKl9wKysgPSBhdV9yZWFkdyhfYSk7IFwKLQl9IHdoaWxlKDApCi0jZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCWF1X3dyaXRldyh2LCAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCVwKLQlkbyB7CVwKLQkJdW5zaWduZWQgbG9uZyBfYSA9ICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpOyBcCi0JCWludCBfbCA9IChsKTsgXAotCQljb25zdCB1MTYgKl9wID0gKGNvbnN0IHUxNiAqKShwKTsgXAotCQl3aGlsZSAoX2wtLSA+IDApIFwKLQkJCWF1X3dyaXRldygqX3ArKyAsIF9hKTsgXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKLQogI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEUpCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggYjUyYTFjMC4uZDkxZTk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAlkbyB7CiAJCXRjX3dyaXRlbChzdGF0dXMsICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCiAKLQkJaGFuZGxlZCA9IHRjMzU4MTVfZG9faW50ZXJydXB0KGRldiwgc3RhdHVzLCBsaW1pdCk7CisJCWhhbmRsZWQgPSB0YzM1ODE1X2RvX2ludGVycnVwdChkZXYsIHN0YXR1cywgYnVkZ2V0IC0gcmVjZWl2ZWQpOwogCQlpZiAoaGFuZGxlZCA+PSAwKSB7CiAJCQlyZWNlaXZlZCArPSBoYW5kbGVkOwogCQkJaWYgKHJlY2VpdmVkID49IGJ1ZGdldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggZWQ2MGIxOC4uNDM3NjgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTQzOTIsNyArNDM5Miw3IEBACiAjaWYgVEczX1ZMQU5fVEFHX1VTRUQKIHN0YXRpYyBpbnQgdGczX3ZsYW5fcngoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RhZykKIHsKLQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgdHAtPnZsZ3JwLCB2bGFuX3RhZyk7CisJcmV0dXJuIHZsYW5fZ3JvX3JlY2VpdmUoJnRwLT5uYXBpLCB0cC0+dmxncnAsIHZsYW5fdGFnLCBza2IpOwogfQogI2VuZGlmCiAKQEAgLTQ1MzksNyArNDUzOSw3IEBACiAJCQkJICAgIGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSyk7CiAJCX0gZWxzZQogI2VuZGlmCi0JCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdHAtPm5hcGksIHNrYik7CiAKIAkJcmVjZWl2ZWQrKzsKIAkJYnVkZ2V0LS07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IDRhNjVmYzIuLjUzNGMwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAKQEAgLTczLDggKzc0LDEwIEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSAgPSAKICIzYzM1OS5jIHYxLjIuMCAyLzE3LzAxIC0gTWlrZSBQaGlsbGlwcyAobWlrZXBAbGludXh0ci5uZXQpIiA7IAogCisjZGVmaW5lIEZXX05BTUUJCSIzY29tLzNDMzU5LmJpbiIKIE1PRFVMRV9BVVRIT1IoIk1pa2UgUGhpbGxpcHMgPG1pa2VwQGxpbnV4dHIubmV0PiIpIDsgCiBNT0RVTEVfREVTQ1JJUFRJT04oIjNDb20gM0MzNTkgVmVsb2NpdHkgWEwgVG9rZW4gUmluZyBBZGFwdGVyIERyaXZlciBcbiIpIDsKK01PRFVMRV9GSVJNV0FSRShGV19OQU1FKTsKIAogLyogTW9kdWxlIHBhcmFtdGVycyAqLwogCkBAIC0xMTQsOCArMTE3LDYgQEAKICAqCXdpbGwgYmUgc3R1Y2sgd2l0aCAxNTU1IGxpbmVzIG9mIGhleCAjJ3MgaW4gdGhlIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgIjNjMzU5X21pY3JvY29kZS5oIiAKLQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhsX3BjaV90YmxbXSA9CiB7CiAJe1BDSV9WRU5ET1JfSURfM0NPTSxQQ0lfREVWSUNFX0lEXzNDT01fM0MzNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCkBAIC0zNjQsMTAgKzM2NSwzMCBAQAogCXJldHVybiAwOyAKIH0KIAorc3RhdGljIGludCB4bF9pbml0X2Zpcm13YXJlKHN0cnVjdCB4bF9wcml2YXRlICp4bF9wcml2KQoreworCWludCBlcnI7CisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ4bF9wcml2LT5mdywgRldfTkFNRSwgJnhsX3ByaXYtPnBkZXYtPmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwgRldfTkFNRSk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHhsX3ByaXYtPmZ3LT5zaXplIDwgMTYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJCb2d1cyBsZW5ndGggJXp1IGluIFwiJXNcIlxuIiwKKwkJICAgICAgIHhsX3ByaXYtPmZ3LT5zaXplLCBGV19OQU1FKTsKKwkJcmVsZWFzZV9maXJtd2FyZSh4bF9wcml2LT5mdyk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIGludCBfX2RldmluaXQgeGxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKIHsKIAlzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIFxuIiwgdmVyc2lvbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEkvTyBhdCAlaHgsIE1NSU8gYXQgJXAsIHVzaW5nIGlycSAlZFxuIiwKQEAgLTM3NSw4ICszOTYsMTEgQEAKIAogCXNwaW5fbG9ja19pbml0KCZ4bF9wcml2LT54bF9sb2NrKSA7IAogCi0JcmV0dXJuIHhsX2h3X3Jlc2V0KGRldikgOyAKKwllcnIgPSB4bF9pbml0X2Zpcm13YXJlKHhsX3ByaXYpOworCWlmIChlcnIgPT0gMCkKKwkJZXJyID0geGxfaHdfcmVzZXQoZGV2KTsKIAorCXJldHVybiBlcnI7CiB9CiAKIApAQCAtMzg2LDcgKzQxMCw3IEBACiAgKi8KIAogc3RhdGljIGludCB4bF9od19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKLXsgCit7CiAJc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKnhsX21taW8gPSB4bF9wcml2LT54bF9tbWlvIDsgCiAJdW5zaWduZWQgbG9uZyB0IDsgCkBAIC0zOTYsNiArNDIwLDkgQEAKIAl1MTYgc3RhcnQgOyAKIAlpbnQgaiA7CiAKKwlpZiAoeGxfcHJpdi0+ZncgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgogCSAqICBSZXNldCB0aGUgY2FyZC4gIElmIHRoZSBjYXJkIGhhcyBnb3QgdGhlIG1pY3JvY29kZSBvbiBib2FyZCwgd2UgaGF2ZSAKICAgICAgICAgICogIG1pc3NlZCB0aGUgaW5pdGlhbGl6YXRpb24gaW50ZXJydXB0LCBzbyB3ZSBtdXN0IGFsd2F5cyBkbyB0aGlzLgpAQCAtNDU4LDI1ICs0ODUsMzAgQEAKIAogCQkvKiAKIAkJICogTm93IHRvIHdyaXRlIHRoZSBtaWNyb2NvZGUgaW50byB0aGUgc2hhcmVkIHJhbSAKLQkgCSAqIFRoZSBtaWNyb2NvZGUgbXVzdCBmaW5pc2ggYXQgcG9zaXRpb24gMHhGRkZGLCBzbyB3ZSBtdXN0IHN1YnRyYWN0Ci0JCSAqIHRvIGdldCB0aGUgc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBjb2RlCisJIAkgKiBUaGUgbWljcm9jb2RlIG11c3QgZmluaXNoIGF0IHBvc2l0aW9uIDB4RkZGRiwKKwkgCSAqIHNvIHdlIG11c3Qgc3VidHJhY3QgdG8gZ2V0IHRoZSBzdGFydCBwb3NpdGlvbiBmb3IgdGhlIGNvZGUKKwkgCSAqCisJCSAqIExvb2tzIHN0cmFuZ2UgYnV0IGVuc3VyZXMgY29tcGlsZXIgb25seSB1c2VzCisJCSAqIDE2IGJpdCB1bnNpZ25lZCBpbnQKIAkJICovCisJCXN0YXJ0ID0gKDB4RkZGRiAtICh4bF9wcml2LT5mdy0+c2l6ZSkgKyAxKSA7CiAKLQkJc3RhcnQgPSAoMHhGRkZGIC0gKG1jX3NpemUpICsgMSApIDsgLyogTG9va3Mgc3RyYW5nZSBidXQgZW5zdXJlcyBjb21waWxlciBvbmx5IHVzZXMgMTYgYml0IHVuc2lnbmVkIGludCBmb3IgdGhpcyAqLyAKLQkJCiAJCXByaW50ayhLRVJOX0lORk8gIjNDMzU5OiBVcGxvYWRpbmcgTWljcm9jb2RlOiAiKTsgCi0JCQotCQlmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGogPCBtY19zaXplOyBpKyssIGorKykgeyAKLQkJCXdyaXRlbChNRU1fQllURV9XUklURSB8IDBYRDAwMDAgfCBpLCB4bF9tbWlvICsgTU1JT19NQUNfQUNDRVNTX0NNRCkgOyAKLQkJCXdyaXRlYihtaWNyb2NvZGVbal0seGxfbW1pbyArIE1NSU9fTUFDREFUQSkgOyAKKworCQlmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGogPCB4bF9wcml2LT5mdy0+c2l6ZTsgaSsrLCBqKyspIHsKKwkJCXdyaXRlbChNRU1fQllURV9XUklURSB8IDBYRDAwMDAgfCBpLAorCQkJICAgICAgIHhsX21taW8gKyBNTUlPX01BQ19BQ0NFU1NfQ01EKTsKKwkJCXdyaXRlYih4bF9wcml2LT5mdy0+ZGF0YVtqXSwgeGxfbW1pbyArIE1NSU9fTUFDREFUQSk7CiAJCQlpZiAoaiAlIDEwMjQgPT0gMCkKIAkJCQlwcmludGsoIi4iKTsKIAkJfQogCQlwcmludGsoIlxuIikgOyAKIAotCQlmb3IgKGk9MDtpIDwgMTY7IGkrKykgeyAKLQkJCXdyaXRlbCggKE1FTV9CWVRFX1dSSVRFIHwgMHhERkZGMCkgKyBpLCB4bF9tbWlvICsgTU1JT19NQUNfQUNDRVNTX0NNRCkgOyAKLQkJCXdyaXRlYihtaWNyb2NvZGVbbWNfc2l6ZSAtIDE2ICsgaV0sIHhsX21taW8gKyBNTUlPX01BQ0RBVEEpIDsgCisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCQl3cml0ZWwoKE1FTV9CWVRFX1dSSVRFIHwgMHhERkZGMCkgKyBpLAorCQkJICAgICAgIHhsX21taW8gKyBNTUlPX01BQ19BQ0NFU1NfQ01EKTsKKwkJCXdyaXRlYih4bF9wcml2LT5mdy0+ZGF0YVt4bF9wcml2LT5mdy0+c2l6ZSAtIDE2ICsgaV0sCisJCQkgICAgICAgeGxfbW1pbyArIE1NSU9fTUFDREFUQSk7CiAJCX0KIAogCQkvKgpAQCAtMTc4Miw2ICsxODE0LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB4bF9wcml2YXRlICp4bF9wcml2PW5ldGRldl9wcml2KGRldik7CiAJCisJcmVsZWFzZV9maXJtd2FyZSh4bF9wcml2LT5mdyk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpb3VubWFwKHhsX3ByaXYtPnhsX21taW8pIDsgCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KSA7IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuaAppbmRleCA2NmIxZmY2Li5iY2IxYTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuaApAQCAtMjg0LDUgKzI4NCw4IEBACiAJdTggeGxfbGFhWzZdIDsgCiAJdTMyIHJ4X3JpbmdfZG1hX2FkZHIgOyAKIAl1MzIgdHhfcmluZ19kbWFfYWRkciA7IAorCisJLyogZmlybXdhcmUgc2VjdGlvbiAqLworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTlfbWljcm9jb2RlLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTlfbWljcm9jb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MDBjMDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5X21pY3JvY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU4MSArMCwwIEBACi0KLS8qCi0gKiBUaGUgZmlybXdhcmUgdGhpcyBkcml2ZXIgZG93bmxvYWRzIGludG8gdGhlIHRva2VucmluZyBjYXJkIGlzIGEKLSAqIHNlcGFyYXRlIHByb2dyYW0gYW5kIGlzIG5vdCBHUEwnZCBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhlIExpbnV4Ci0gKiBzaWRlIGRyaXZlciBhbmQgdGhlIHJvdXRpbmUgdGhhdCBsb2FkcyB0aGlzIGRhdGEgaW50byB0aGUgY2FyZCBhcmUuCi0gKgotICogVGhpcyBmaXJtd2FyZSBpcyBsaWNlbnNlZCB0byB5b3Ugc3RyaWN0bHkgZm9yIHVzZSBpbiBjb25qdW5jdGlvbgotICogd2l0aCB0aGUgdXNlIG9mIDNDb20gM0MzNTkgVG9rZW5SaW5nIGFkYXB0ZXJzLiBUaGVyZSBpcyBubwotICogd2FyYW50eSBleHByZXNzZWQgb3IgaW1wbGllZCBhYm91dCBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCi0gKi8KLQotLyogM2MzNTlfbWljcm9jb2RlLm1hYzogM0NvbSAzQzM1OSBUb2tlbnJpbmcgbWljcm9jb2RlLgotICoKLSAqIE5vdGVzOgotICogIC0gTG9hZGVkIGZyb20geGxfaW5pdCB1cG9uIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24uCi0gKgotICogQXZhaWxhYmxlIGZyb20gM0NvbSBhcyBwYXJ0IG9mIHRoZWlyIHN0YW5kYXJkIDNDMzU5IGRyaXZlci4gCi0gKgotICogbWNfc2l6ZSAqbXVzdCogbXVzdCBtYXRjaCB0aGUgbWljcm9jb2RlIGJlaW5nIHVzZWQsIGVhY2ggdmVyc2lvbiBpcyBhIAotICogZGlmZmVyZW50IGxlbmd0aC4KLSAqLwotCi1zdGF0aWMgaW50IG1jX3NpemUgPSAyNDg4MCA7IAotCi1zdGF0aWMgY29uc3QgdTggbWljcm9jb2RlW10gPSB7IAotIDB4ZmUsMHgzYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MzMsMHgyZiwweDMwLDB4MzIsMHgyZiwweDM5LDB4MzksMHgyMCwweDMxCi0sMHgzNywweDNhLDB4MzEsMHgzMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MzAsMHgzMSwweDMyLDB4MzMsMHgzNCwweDM1LDB4MzYsMHgzNywweDM4LDB4MzksMHg0MSwweDQyLDB4NDMsMHg0NCwweDQ1LDB4NDYKLSwweDAwLDB4MDAsMHgwNywweGZmLDB4MDIsMHgwMCwweGZlLDB4OWYsMHgwNiwweDAwLDB4MDAsMHg3YywweDQ4LDB4MDAsMHgwMCwweDcwCi0sMHg4MiwweDAwLDB4ZmYsMHhmZiwweDg2LDB4MDAsMHhmZiwweGZmLDB4ODgsMHgwMCwweGZmLDB4ZmYsMHg5YSwweDAwLDB4ZmYsMHhmZgotLDB4ZmYsMHhmZiwweDExLDB4MDAsMHhjMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYKLSwweDMzLDB4NDMsMHg0ZiwweDRkLDB4MjAsMHg0MiwweDQxLDB4NDIsMHg0NSwweDExLDB4NDAsMHhjMCwweDAwLDB4ZmYsMHhmZiwweGZmCi0sMHhmZiwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDUzLDB4NzQsMHg2MSwweDcyLDB4NzQsMHgyMCwweDZmLDB4NjYsMHgyMAotLDB4NGMsMHg0YywweDQzLDB4MjAsMHg2NiwweDcyLDB4NjEsMHg2ZCwweDY1LDB4MmUsMHgyMCwweDIwLDB4NTQsMHg2ZiwweDc0LDB4NjEKLSwweDZjLDB4MjAsMHg2NCwweDYxLDB4NzQsMHg2MSwweDIwLDB4NzMsMHg2OSwweDdhLDB4NjUsMHgyMCwweDY5LDB4NzMsMHgyMCwweDc4Ci0sMHg3OCwweDc4LDB4MjAsMHgyMCwweDIwLDB4NDIsMHg0MSwweDQyLDB4NDUsMHhlOCwweGQyLDB4MDEsMHg4MywweDNlLDB4ZjcsMHgzNAotLDB4MDAsMHg3NSwweDIxLDB4ZTgsMHg0MSwweDAwLDB4ODMsMHgzZSwweGY3LDB4MzQsMHgwMCwweDc1LDB4MTcsMHhlOCwweDgyLDB4MDAKLSwweDgzLDB4M2UsMHhmNywweDM0LDB4MDAsMHg3NSwweDBkLDB4ZTgsMHhiZiwweDAwLDB4ODMsMHgzZSwweGY3LDB4MzQsMHgwMCwweDc1Ci0sMHgwMywweGU4LDB4NDEsMHgwMiwweGMzLDB4MWUsMHhiOCwweDAwLDB4ZjAsMHg4ZSwweGQ4LDB4MzMsMHhmNiwweGI5LDB4MDAsMHg4MAotLDB4MzMsMHhkYiwweGFkLDB4MDMsMHhkOCwweGUyLDB4ZmIsMHgxZiwweGI4LDB4MDAsMHgwMCwweDgzLDB4ZmIsMHgwMCwweDc0LDB4MDMKLSwweGI4LDB4MjIsMHgwMCwweGEzLDB4ZjcsMHgzNCwweGMzLDB4ZmEsMHhiYSwweDU2LDB4MDAsMHhiMCwweGZmLDB4ZWUsMHgzMywweGMwCi0sMHg4ZSwweGMwLDB4MzMsMHhmNiwweGI5LDB4ZmYsMHg3ZiwweDgzLDB4M2UsMHhmZiwweDM0LDB4MDAsMHg3NCwweDA4LDB4OGQsMHgzZQotLDB4MzAsMHg2MSwweGQxLDB4ZWYsMHgyYiwweGNmLDB4MjYsMHg4YiwweDFjLDB4MjYsMHhjNywweDA0LDB4ZmYsMHhmZiwweDI2LDB4ODMKLSwweDNjLDB4ZmYsMHg3NSwweDE3LDB4MjYsMHhjNywweDA0LDB4MDAsMHgwMCwweDI2LDB4ODMsMHgzYywweDAwLDB4NzUsMHgwYywweDI2Ci0sMHg4OSwweDFjLDB4NDYsMHg0NiwweGUyLDB4ZTAsMHhiOCwweDAwLDB4MDAsMHhlYiwweDAzLDB4YjgsMHgyNCwweDAwLDB4YTMsMHhmNwotLDB4MzQsMHhjMywweGZhLDB4YjQsMHhkNywweDllLDB4NzMsMHgzYSwweDc1LDB4MzgsMHg3OSwweDM2LDB4N2IsMHgzNCwweDlmLDB4YjEKLSwweDA1LDB4ZDIsMHhlYywweDczLDB4MmQsMHhiMCwweDQwLDB4ZDAsMHhlMCwweDcxLDB4MjcsMHg3OSwweDI1LDB4ZDAsMHhlMCwweDczCi0sMHgyMSwweDdiLDB4MWYsMHgzMiwweGMwLDB4NzUsMHgxYiwweDMyLDB4ZTQsMHg5ZSwweDcyLDB4MTYsMHg3NCwweDE0LDB4NzgsMHgxMgotLDB4N2EsMHgxMCwweDlmLDB4ZDIsMHhlYywweDcyLDB4MGIsMHhkMCwweGU0LDB4NzAsMHgwNywweDc1LDB4MDUsMHhiOCwweDAwLDB4MDAKLSwweGViLDB4MDMsMHhiOCwweDI2LDB4MDAsMHhhMywweGY3LDB4MzQsMHhjMywweGZhLDB4YmEsMHg1YSwweDAwLDB4MzMsMHhjMCwweGVmCi0sMHhlZiwweGVmLDB4ZWYsMHhiMCwweDAwLDB4ZTYsMHg1NiwweGIwLDB4MDAsMHhlNiwweDU0LDB4YmEsMHg1MiwweDAwLDB4YjgsMHgwMQotLDB4MDEsMHhlZiwweGU4LDB4Y2EsMHgwMCwweDNjLDB4MDEsMHg3NSwweDdmLDB4ZTgsMHg4MywweDAwLDB4YmEsMHg1MiwweDAwLDB4YjgKLSwweDAyLDB4MDIsMHhlZiwweGU4LDB4YjksMHgwMCwweDNjLDB4MDIsMHg3NSwweDZlLDB4ZTgsMHg3YSwweDAwLDB4YmEsMHg1MiwweDAwCi0sMHhiOCwweDA0LDB4MDQsMHhlZiwweGU4LDB4YTgsMHgwMCwweDNjLDB4MDQsMHg3NSwweDVkLDB4ZTgsMHg3MSwweDAwLDB4YmEsMHg1MgotLDB4MDAsMHhiOCwweDA4LDB4MDgsMHhlZiwweGU4LDB4OTcsMHgwMCwweDNjLDB4MDgsMHg3NSwweDRjLDB4ZTgsMHg2OCwweDAwLDB4YmEKLSwweDUyLDB4MDAsMHhiOCwweDEwLDB4MTAsMHhlZiwweGU4LDB4ODYsMHgwMCwweDNjLDB4MTAsMHg3NSwweDNiLDB4ZTgsMHg1ZiwweDAwCi0sMHhiYSwweDUyLDB4MDAsMHhiOCwweDIwLDB4MjAsMHhlZiwweGU4LDB4NzUsMHgwMCwweDNjLDB4MjAsMHg3NSwweDJhLDB4ZTgsMHg1NgotLDB4MDAsMHhiYSwweDUyLDB4MDAsMHhiOCwweDQwLDB4NDAsMHhlZiwweGU4LDB4NjQsMHgwMCwweDNjLDB4NDAsMHg3NSwweDE5LDB4ZTgKLSwweDRkLDB4MDAsMHhiYSwweDUyLDB4MDAsMHhiOCwweDgwLDB4ODAsMHhlZiwweGU4LDB4NTMsMHgwMCwweDNjLDB4ODAsMHg3NSwweDA4Ci0sMHhlOCwweDQ0LDB4MDAsMHhiOCwweDAwLDB4MDAsMHhlYiwweDAzLDB4YjgsMHgyOCwweDAwLDB4YTMsMHhmNywweDM0LDB4YzMsMHhiYQotLDB4NWEsMHgwMCwweGI4LDB4MDAsMHg4MCwweGVmLDB4YzMsMHhiYSwweDVhLDB4MDAsMHhiOCwweDAxLDB4ODAsMHhlZiwweGMzLDB4YmEKLSwweDVhLDB4MDAsMHhiOCwweDAyLDB4ODAsMHhlZiwweGMzLDB4YmEsMHg1YSwweDAwLDB4YjgsMHgwMywweDgwLDB4ZWYsMHhjMywweGJhCi0sMHg1YSwweDAwLDB4YjgsMHgwNCwweDgwLDB4ZWYsMHhjMywweGJhLDB4NWEsMHgwMCwweGI4LDB4MDUsMHg4MCwweGVmLDB4YzMsMHhiYQotLDB4NWEsMHgwMCwweGI4LDB4MDYsMHg4MCwweGVmLDB4YzMsMHhiYSwweDVhLDB4MDAsMHhiOCwweDA3LDB4ODAsMHhlZiwweGMzLDB4YjkKLSwweGZmLDB4ZmYsMHhlNCwweDU4LDB4ZTQsMHg1NCwweDNjLDB4MDAsMHg3NSwweDAzLDB4NDksMHg3NSwweGY3LDB4YzMsMHhmYSwweDMyCi0sMHhjMCwweGU2LDB4NTYsMHhlNCwweDU2LDB4M2MsMHgwMCwweDc0LDB4MDMsMHhlOSwweDgyLDB4MDAsMHhiMCwweGZmLDB4ZTYsMHg1NgotLDB4ZTQsMHg1NiwweDNjLDB4ZmYsMHg3NSwweDc4LDB4YmEsMHg1MiwweDAwLDB4YjgsMHhmZiwweGZmLDB4ZWYsMHhlZCwweDNjLDB4ZmYKLSwweDc1LDB4NmMsMHhiOCwweDAwLDB4ZmYsMHhlZiwweGVkLDB4M2MsMHgwMCwweDc1LDB4NjMsMHhiMCwweGZmLDB4ZTYsMHg1NCwweGU0Ci0sMHg1NCwweDNjLDB4ZmYsMHg3NSwweDU5LDB4MzIsMHhjMCwweGU2LDB4NTQsMHhlNCwweDU0LDB4M2MsMHgwMCwweDc1LDB4NGYsMHhiMAotLDB4MGYsMHhlNiwweDUwLDB4ZTQsMHg1MCwweDI0LDB4MGYsMHgzYywweDBmLDB4NzUsMHg0MywweGIwLDB4MDAsMHhlNiwweDUwLDB4ZTQKLSwweDUwLDB4MjQsMHgwZiwweDNjLDB4MDAsMHg3NSwweDM3LDB4OGMsMHhjOCwweDhlLDB4YzAsMHhiZSwweDcwLDB4MDAsMHgyNiwweDhiCi0sMHgxNCwweDI2LDB4OGIsMHg1YywweDAyLDB4YjgsMHgwMCwweDAwLDB4ZWYsMHhlZCwweDIzLDB4YzMsMHgzZCwweDAwLDB4MDAsMHg3NQotLDB4MWQsMHhiOCwweGZmLDB4ZmYsMHgyMywweGMzLDB4ZWYsMHg4YiwweGM4LDB4ZWQsMHgyMywweGMzLDB4M2IsMHhjMSwweDc1LDB4MGUKLSwweDgzLDB4YzYsMHgwNCwweDI2LDB4ODMsMHgzYywweGZmLDB4NzUsMHhkNSwweGI4LDB4MDAsMHgwMCwweGViLDB4MDMsMHhiOCwweDJhCi0sMHgwMCwweGEzLDB4ZjcsMHgzNCwweGMzLDB4ZmEsMHgzMywweGMwLDB4YmYsMHgwMCwweDIwLDB4YjksMHgxNywweDAwLDB4ZjMsMHhhYgotLDB4YmYsMHgwMCwweDMwLDB4YjksMHgxNywweDAwLDB4ZjMsMHhhYiwweGJmLDB4MDAsMHgyMiwweGI5LDB4NDAsMHgwMCwweGYzLDB4YWIKLSwweGJmLDB4MDAsMHgzMiwweGI5LDB4NDAsMHgwMCwweGYzLDB4YWIsMHhmYywweDFlLDB4OGMsMHhjOCwweDhlLDB4ZDgsMHgzMywweGMwCi0sMHg4ZSwweGMwLDB4YmUsMHg5MiwweDAwLDB4YmYsMHgwMCwweDIwLDB4YjksMHgxNywweDAwLDB4ZjMsMHhhNCwweGJlLDB4YTksMHgwMAotLDB4YmYsMHgwMCwweDIyLDB4YjksMHg0MCwweDAwLDB4ZjMsMHhhNCwweDFmLDB4YzcsMHgwNiwweGZiLDB4MzQsMHg2NCwweDAwLDB4YmEKLSwweDA4LDB4MDAsMHhiOCwweDBmLDB4MDAsMHhlZiwweGU4LDB4ODIsMHgwMSwweGU4LDB4OWIsMHgwMSwweDcyLDB4MGQsMHhjNywweDA2Ci0sMHhmNywweDM0LDB4MmMsMHgwMCwweGM3LDB4MDYsMHhmOSwweDM0LDB4MDQsMHgwMCwweGMzLDB4YmEsMHgwYSwweDAwLDB4MzMsMHhjMAotLDB4ZWYsMHhlOCwweDk4LDB4MDEsMHhlOCwweGI1LDB4MDEsMHhiOCwweDE3LDB4MDAsMHhiYSwweDljLDB4MDAsMHhlZiwweGI4LDB4MDAKLSwweDEwLDB4YmEsMHg5YSwweDAwLDB4ZWYsMHhiOCwweDE3LDB4MDAsMHhhOSwweDAxLDB4MDAsMHg3NCwweDAxLDB4NDAsMHhiYSwweDhjCi0sMHgwMCwweGVmLDB4YjgsMHgwMCwweDE4LDB4YmEsMHg4NiwweDAwLDB4ZWYsMHhiOCwweDBjLDB4MDAsMHhiYSwweDgyLDB4MDAsMHhlZgotLDB4YmEsMHgwMiwweDAwLDB4ZWQsMHgyNSwweGY5LDB4ZmYsMHgwZCwweDAyLDB4MDAsMHhlZiwweGJhLDB4MDYsMHgwMCwweDMzLDB4YzAKLSwweGVmLDB4YmEsMHgwNCwweDAwLDB4YjgsMHg2MCwweDAwLDB4ZWYsMHhiYSwweDAwLDB4MDAsMHhiOCwweDE4LDB4MDAsMHhlZiwweGJhCi0sMHg4MCwweDAwLDB4YjksMHhmZiwweGZmLDB4ZWQsMHhhOSwweDAxLDB4MDAsMHg3NSwweDA0LDB4ZTIsMHhmOCwweGViLDB4M2UsMHhiYQotLDB4MGEsMHgwMCwweGVkLDB4YTksMHgwMCwweDQwLDB4NzQsMHgzNSwweGE5LDB4MDAsMHgyMCwweDc0LDB4MzAsMHgzMywweGMwLDB4ZWYKLSwweDUxLDB4YjksMHhjOCwweDAwLDB4ZTIsMHhmZSwweDU5LDB4MWUsMHgwNiwweDFmLDB4MjYsMHg4YiwweDBlLDB4MDIsMHgzMCwweDgzCi0sMHhmOSwweDE3LDB4NzUsMHgxOCwweDQ5LDB4NDksMHhiZSwweDAyLDB4MjAsMHhiZiwweDA2LDB4MzAsMHhmMywweGE2LDB4MWYsMHgyMwotLDB4YzksMHg3NSwweDBhLDB4ZmYsMHgwZSwweGZiLDB4MzQsMHg3NCwweDEyLDB4ZTksMHg0ZCwweGZmLDB4MWYsMHhiOCwweDJjLDB4MDAKLSwweGJiLDB4MDAsMHgwMCwweGEzLDB4ZjcsMHgzNCwweDg5LDB4MWUsMHhmOSwweDM0LDB4YzMsMHhjNywweDA2LDB4ZmIsMHgzNCwweDY0Ci0sMHgwMCwweGU4LDB4ZDMsMHgwMCwweDcyLDB4MGQsMHhjNywweDA2LDB4ZjcsMHgzNCwweDJjLDB4MDAsMHhjNywweDA2LDB4ZjksMHgzNAotLDB4MDQsMHgwMCwweGMzLDB4ZTgsMHhkNiwweDAwLDB4ZTgsMHhmMywweDAwLDB4YjgsMHgwMywweDAwLDB4YmEsMHg4MiwweDAwLDB4ZWYKLSwweGI4LDB4NDAsMHg4MCwweGJhLDB4OTgsMHgwMCwweGVmLDB4YjgsMHgwMCwweDExLDB4YmEsMHg5NiwweDAwLDB4ZWYsMHhiOCwweDQwCi0sMHgwMCwweGE5LDB4MDEsMHgwMCwweDc0LDB4MDEsMHg0MCwweGJhLDB4OTIsMHgwMCwweGVmLDB4YjgsMHgwMCwweDE5LDB4YmEsMHg4ZQotLDB4MDAsMHhlZiwweGJhLDB4MDIsMHgwMCwweGVkLDB4MjUsMHhmOSwweGZmLDB4MGQsMHgwNiwweDAwLDB4ZWYsMHhiYSwweDA2LDB4MDAKLSwweDMzLDB4YzAsMHhlZiwweGJhLDB4MDAsMHgwMCwweGI4LDB4MTgsMHgwMCwweGVmLDB4YmEsMHg4MCwweDAwLDB4YjksMHhmZiwweGZmCi0sMHhlZCwweGE5LDB4MjAsMHgwMCwweDc1LDB4MDQsMHhlMiwweGY4LDB4ZWIsMHg0MywweGJhLDB4MGEsMHgwMCwweGVkLDB4YTksMHgwMAotLDB4NDAsMHg3NCwweDNhLDB4YTksMHgwMCwweDIwLDB4NzQsMHgzNSwweDMzLDB4YzAsMHhlZiwweDUxLDB4YjksMHhjOCwweDAwLDB4ZTIKLSwweGZlLDB4NTksMHgxZSwweDA2LDB4MWYsMHgyNiwweDhiLDB4MGUsMHgwMiwweDMyLDB4ODMsMHhmOSwweDQwLDB4NzUsMHgxZCwweDQ5Ci0sMHg0OSwweGJlLDB4MDIsMHgyMiwweGJmLDB4MDYsMHgzMiwweGYzLDB4YTYsMHgxZiwweDIzLDB4YzksMHg3NSwweDBmLDB4ZmYsMHgwZQotLDB4ZmIsMHgzNCwweDc0LDB4MDMsMHhlOSwweDVhLDB4ZmYsMHhiOCwweDAwLDB4MDAsMHhlYiwweDBiLDB4MWYsMHhiOCwweDJjLDB4MDAKLSwweGJiLDB4MDIsMHgwMCwweDg5LDB4MWUsMHhmOSwweDM0LDB4YTMsMHhmNywweDM0LDB4YzMsMHhiYSwweDAyLDB4MDAsMHhiOCwweDAwCi0sMHg5YywweGVmLDB4YmEsMHgwMCwweDAwLDB4YjgsMHgwMCwweDg0LDB4ZWYsMHgzMywweGMwLDB4ZWYsMHhiYSwweDBhLDB4MDAsMHhlZgotLDB4YmEsMHgwZSwweDAwLDB4MzMsMHhjMCwweGVmLDB4YzMsMHhiYSwweDBhLDB4MDAsMHhiOSwweGZmLDB4ZmYsMHhlZCwweDI1LDB4MDAKLSwweDYwLDB4M2QsMHgwMCwweDYwLDB4NzQsMHgwNCwweGUyLDB4ZjUsMHhmOCwweGMzLDB4ZjksMHhjMywweGIwLDB4MDAsMHhlNiwweDU2Ci0sMHhiOCwweDAwLDB4ZmYsMHhiYSwweDUyLDB4MDAsMHhlZiwweGI5LDB4ZmYsMHhmZiwweGJhLDB4NTgsMHgwMCwweGVkLDB4MjUsMHhlZgotLDB4MDAsMHg3NCwweDA4LDB4YmEsMHg1YSwweDAwLDB4MzMsMHhjMCwweGVmLDB4ZTIsMHhlZiwweGMzLDB4YmEsMHg4MCwweDAwLDB4ZWQKLSwweGJhLDB4ODQsMHgwMCwweGVmLDB4YmEsMHg4MCwweDAwLDB4ZWQsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhjNiwweDA2LDB4ZWMsMHgzNCwweDE1LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHg4ZSwweGMwLDB4MWUsMHg4YywweGM4LDB4YmUsMHg0MAotLDB4NTQsMHhiZiwweDYwLDB4ZmUsMHg4ZSwweGQ4LDB4YjksMHgxMCwweDAwLDB4ZjMsMHhhNCwweDFmLDB4YzcsMHgwNiwweDgwLDB4MzYKLSwweDEwLDB4MzUsMHhjNywweDA2LDB4OGMsMHgzNiwweDMwLDB4MzUsMHg4ZCwweDA2LDB4MzgsMHgzNSwweGEzLDB4MzAsMHgzNSwweGEzCi0sMHgzMiwweDM1LDB4MDUsMHgzMywweDAxLDB4YTMsMHgzNCwweDM1LDB4YzcsMHgwNiwweDM2LDB4MzUsMHg1MCwweDAxLDB4YzcsMHgwNgotLDB4ODQsMHgzNiwweDgwLDB4ZmUsMHhjNywweDA2LDB4ODgsMHgzNiwweGMwLDB4ZmUsMHhjNiwweDA2LDB4YzIsMHhmZSwweGZmLDB4YzYKLSwweDA2LDB4OTMsMHgzNiwweDgwLDB4YzYsMHgwNiwweDkyLDB4MzYsMHgwMCwweGM2LDB4MDYsMHg4MCwweGZlLDB4ODAsMHhjNywweDA2Ci0sMHg4MiwweGZlLDB4NTQsMHg1MCwweGM3LDB4MDYsMHg4NCwweGZlLDB4MmIsMHg0ZCwweGU1LDB4Y2UsMHhhOSwweDAyLDB4MDAsMHg3NQotLDB4MDgsMHhjNiwweDA2LDB4ODEsMHhmZSwweDIzLDB4ZTksMHgwNSwweDAwLDB4YzYsMHgwNiwweDgxLDB4ZmUsMHgyMiwweGExLDB4ZjcKLSwweDM0LDB4YTMsMHg4NiwweGZlLDB4YjgsMHg0OCwweDM0LDB4ODYsMHhlMCwweGEzLDB4ODgsMHhmZSwweDhkLDB4MDYsMHg0ZSwweDM0Ci0sMHg4NiwweGUwLDB4YTMsMHg4YSwweGZlLDB4YjgsMHg1OCwweDM0LDB4ODYsMHhlMCwweGEzLDB4OGMsMHhmZSwweGI4LDB4OWMsMHgzNAotLDB4ODYsMHhlMCwweGEzLDB4OGUsMHhmZSwweDhkLDB4MDYsMHgyMCwweDAzLDB4ODYsMHhlMCwweGEzLDB4OTAsMHhmZSwweDMzLDB4YzAKLSwweGJhLDB4NzIsMHgwMCwweGVmLDB4MzMsMHhjMCwweGJhLDB4NzQsMHgwMCwweGVmLDB4YmEsMHg3NiwweDAwLDB4ZWYsMHhiOCwweDgwCi0sMHhmZSwweDg2LDB4ZTAsMHhiYSwweDcyLDB4MDAsMHhlZiwweGU4LDB4YmYsMHgwNywweGJhLDB4MGMsMHgwMSwweGI4LDB4NDAsMHg0MAotLDB4ZWYsMHhlZCwweGJhLDB4NmEsMHgwMCwweGI4LDB4MDMsMHgwMCwweGMxLDB4ZTAsMHgwOCwweDBkLDB4MDMsMHgwMCwweGVmLDB4YjkKLSwweDBhLDB4MDAsMHhlOCwweDk0LDB4MDAsMHhiYSwweDZhLDB4MDAsMHhiOCwweDAzLDB4MDAsMHhjMSwweGUwLDB4MDgsMHhlZiwweGExCi0sMHgzMiwweDM0LDB4YTMsMHhhMiwweDMzLDB4YzcsMHgwNiwweGE2LDB4MzMsMHgwNCwweDAwLDB4OGQsMHgwNiwweGEwLDB4MzMsMHhjMQotLDB4ZTgsMHgwNCwweGNkLDB4MzksMHhjNywweDA2LDB4OTAsMHgzNiwweGZmLDB4ZmYsMHhlOSwweGUzLDB4MDAsMHg2MywweDBkLDB4NjYKLSwweDBkLDB4NjYsMHgwZCwweDhhLDB4MGQsMHhlNiwweDBlLDB4NzUsMHgxMiwweDJlLDB4MGYsMHgwMywweDBmLDB4NTAsMHgwZiwweDYwCi0sMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4ZWQsMHgwZiwweGU5LDB4MTIsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MAotLDB4MGQsMHg2MCwweDBkLDB4MjIsMHgxMCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHhmZSwweDEwLDB4NjAKLSwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHhhZiwweDBmLDB4MzIsMHgxMCwweDM3Ci0sMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MAotLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAKLSwweDBkLDB4NjQsMHgwZSwweDAwLDB4MGYsMHg5NSwweDA5LDB4NjAsMHgwYSwweDQ5LDB4YmIsMHhmZiwweGZmLDB4YmEsMHg2YSwweDAwCi0sMHhlZCwweGE5LDB4MDAsMHgyMCwweDc0LDB4MzgsMHg4MCwweDNlLDB4ODAsMHhmZSwweDEyLDB4NzUsMHgzMSwweGU4LDB4NGEsMHgwMAotLDB4YTEsMHgzMiwweDM0LDB4YTMsMHhhMiwweDMzLDB4YzcsMHgwNiwweGE2LDB4MzMsMHgwNCwweDAwLDB4OGQsMHgwNiwweGEwLDB4MzMKLSwweGMxLDB4ZTgsMHgwNCwweGNkLDB4MzksMHhlOCwweDIyLDB4MDAsMHhjNywweDA2LDB4ZjMsMHgzNCwweDQ2LDB4MDAsMHhjNywweDA2Ci0sMHhmNSwweDM0LDB4ZmYsMHhmZiwweGM3LDB4MDYsMHg5MCwweDM2LDB4ZmYsMHhmZiwweDU4LDB4ZTksMHgzMiwweDAwLDB4NGIsMHg4MwotLDB4ZmIsMHgwMCwweDc1LDB4YjksMHg4MywweGY5LDB4MDAsMHg3NSwweGIwLDB4YzMsMHg1MiwweGJhLDB4NmEsMHgwMCwweGI4LDB4MDMKLSwweDAwLDB4YzEsMHhlMCwweDA4LDB4MGQsMHgwMywweDAwLDB4ZWYsMHg1YSwweGMzLDB4NTIsMHhiYSwweDZhLDB4MDAsMHhiOCwweDAzCi0sMHgwMCwweGMxLDB4ZTAsMHgwOCwweGVmLDB4NWEsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4NjgsMHg4MCwweDA3LDB4YTEsMHg5MCwweDM2LDB4Y2QsMHgzNSwweDhiLDB4MzYsMHgyNCwweDAyLDB4MmUsMHhmZiwweGE0LDB4MzUKLSwweDBhLDB4ZmEsMHg4YSwweDI2LDB4OTQsMHgzNiwweDg4LDB4MjYsMHhlOCwweDM0LDB4YzYsMHgwNiwweDk0LDB4MzYsMHgwMCwweGZiCi0sMHgyMiwweGU0LDB4NzUsMHgwMSwweGMzLDB4ZjYsMHhjNCwweDIwLDB4NzQsMHg3ZCwweGY2LDB4YzQsMHgwOCwweDc0LDB4MDUsMHg4MAotLDB4MGUsMHg5MiwweDM2LDB4MDQsMHg4MCwweDI2LDB4ZTgsMHgzNCwweGQ3LDB4YzQsMHgxZSwweDg0LDB4MzYsMHgyNiwweDhiLDB4MzcKLSwweDgxLDB4ZTYsMHhmZiwweDAwLDB4ODMsMHhmZSwweDIwLDB4NzYsMHgwNSwweGIwLDB4MDEsMHhlOSwweDI4LDB4MDAsMHg1MywweDA2Ci0sMHhkMSwweGU2LDB4MmUsMHhmZiwweDk0LDB4OWQsMHgwNiwweDA3LDB4NWIsMHgyNiwweDg4LDB4NDcsMHgwMiwweDNjLDB4ZmYsMHg3NAotLDB4MDcsMHgzYywweGZlLDB4NzUsMHgxMSwweGU5LDB4M2IsMHgwMCwweGY2LDB4MDYsMHg5MiwweDM2LDB4MDgsMHg3NSwweDM0LDB4ZjYKLSwweDA2LDB4OTIsMHgzNiwweDA0LDB4NzQsMHgyZCwweDgwLDB4MjYsMHg5MiwweDM2LDB4ZjMsMHg4MCwweDNlLDB4OTUsMHgzNiwweDAwCi0sMHg3NSwweDIxLDB4MjYsMHg4MCwweDNmLDB4MDUsMHg3NSwweDEzLDB4YzYsMHgwNiwweDk1LDB4MzYsMHgwMCwweDI2LDB4ODAsMHg3ZgotLDB4MDYsMHgwMCwweDc0LDB4MDcsMHgyNiwweDhiLDB4NDcsMHgwNCwweGEyLDB4OTUsMHgzNiwweGJhLDB4MGMsMHgwMSwweGI4LDB4NDAKLSwweDQwLDB4ZWYsMHhlZCwweDhhLDB4MjYsMHhlOCwweDM0LDB4ZjYsMHhjNCwweDEwLDB4NzUsMHgwMywweGU5LDB4NWIsMHgwMCwweGY2Ci0sMHhjNCwweDA0LDB4NzQsMHgwNSwweDgwLDB4MGUsMHg5MiwweDM2LDB4MDEsMHg4MCwweDI2LDB4ZTgsMHgzNCwweGViLDB4YzQsMHgzZQotLDB4ODgsMHgzNiwweDI2LDB4OGIsMHgzNSwweDgzLDB4ZTYsMHg3ZiwweDgzLDB4ZmUsMHgxMiwweDcyLDB4MDgsMHgyNiwweGM2LDB4NDUKLSwweDAyLDB4MDEsMHhlOSwweDI0LDB4MDAsMHg4MywweGM2LDB4MjAsMHhkMSwweGU2LDB4MmUsMHhmZiwweDk0LDB4OWQsMHgwNiwweGM0Ci0sMHgzZSwweDg4LDB4MzYsMHgyNiwweDg4LDB4NDUsMHgwMiwweDNjLDB4ZmYsMHg3NSwweDBlLDB4ZjYsMHgwNiwweDkyLDB4MzYsMHgwMQotLDB4NzQsMHgxNCwweGY2LDB4MDYsMHg5MiwweDM2LDB4MDIsMHg3NSwweDBkLDB4ODAsMHgyNiwweDkyLDB4MzYsMHhmYywweGJhLDB4MGMKLSwweDAxLDB4YjgsMHgyMCwweDIwLDB4ZWYsMHhlZCwweDhhLDB4MjYsMHhlOCwweDM0LDB4ZjYsMHhjNCwweDA4LDB4NzQsMHgyMiwweDgwCi0sMHgyNiwweGU4LDB4MzQsMHhmNywweDgwLDB4MGUsMHg5MiwweDM2LDB4MDQsMHhmNiwweDA2LDB4OTIsMHgzNiwweDA4LDB4NzQsMHgxMQotLDB4ODAsMHgyNiwweDkyLDB4MzYsMHhmMywweGJhLDB4MGMsMHgwMSwweGI4LDB4NDAsMHg0MCwweGVmLDB4ZWQsMHg4YSwweDI2LDB4ZTgKLSwweDM0LDB4ZjYsMHhjNCwweDA0LDB4NzQsMHgyMiwweDgwLDB4MjYsMHhlOCwweDM0LDB4ZmIsMHg4MCwweDBlLDB4OTIsMHgzNiwweDAxCi0sMHhmNiwweDA2LDB4OTIsMHgzNiwweDAyLDB4NzUsMHgxMSwweDgwLDB4MjYsMHg5MiwweDM2LDB4ZmUsMHhiYSwweDBjLDB4MDEsMHhiOAotLDB4MjAsMHgyMCwweGVmLDB4ZWQsMHg4YSwweDI2LDB4ZTgsMHgzNCwweGY2LDB4YzQsMHgwMSwweDc0LDB4NjcsMHg4MCwweDI2LDB4ZTgKLSwweDM0LDB4ZmUsMHg4MCwweDNlLDB4ZTgsMHhmZiwweDAwLDB4NzQsMHgzOSwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDQsMHg3NCwweDMyCi0sMHg4MCwweDNlLDB4ZTgsMHhmZiwweDAxLDB4NzUsMHgyMSwweGU1LDB4ODAsMHhhOSwweDAwLDB4MDcsMHg3NCwweDBhLDB4YmEsMHg5ZQotLDB4MDAsMHhiOCwweDAwLDB4MDIsMHhlZiwweGU5LDB4ZWYsMHhmZiwweGM2LDB4MDYsMHhlOCwweGZmLDB4MDMsMHhiYSwweDBjLDB4MDEKLSwweGI4LDB4MDgsMHgwOCwweGVmLDB4ZWQsMHhlOSwweDI4LDB4MDAsMHg4MCwweDNlLDB4ZTgsMHhmZiwweDAzLDB4NzQsMHgwNiwweGU5Ci0sMHgxZSwweDAwLDB4ZTksMHgwMCwweDAwLDB4YmEsMHgxMCwweDAxLDB4YjgsMHgwMiwweDAyLDB4ZWYsMHhlZCwweGU1LDB4MDAsMHgwZAotLDB4MTgsMHgwMCwweGU3LDB4MDAsMHhlNSwweDgyLDB4MGQsMHgwMiwweDAwLDB4ZTcsMHg4MiwweGM2LDB4MDYsMHhlOCwweGZmLDB4MDQKLSwweDhhLDB4MjYsMHhlOCwweDM0LDB4ZjYsMHhjNCwweDAyLDB4NzQsMHgwZCwweDgwLDB4MjYsMHhlOCwweDM0LDB4ZmQsMHg4MCwweDI2Ci0sMHg5MiwweDM2LDB4YmYsMHhlOCwweDRmLDB4MGIsMHhmYSwweGEwLDB4ZTgsMHgzNCwweDA4LDB4MDYsMHg5NCwweDM2LDB4YzYsMHgwNgotLDB4ZTgsMHgzNCwweDAwLDB4ZmIsMHhjMywweGU4LDB4ZTcsMHgwZiwweGM0LDB4MWUsMHg4NCwweDM2LDB4MmUsMHhmZiwweDE2LDB4MDEKLSwweDA3LDB4MjYsMHg4OCwweDQ3LDB4MDIsMHhlOSwweDdlLDB4ZmUsMHhlOCwweDJkLDB4MTAsMHhjNCwweDFlLDB4ODQsMHgzNiwweDJlCi0sMHhmZiwweDE2LDB4MDMsMHgwNywweDI2LDB4ODgsMHg0NywweDAyLDB4ZTksMHg2YiwweGZlLDB4OGUsMHgwNiwweDI2LDB4MDIsMHgyZQotLDB4ZmYsMHgxNiwweDA3LDB4MDcsMHhjMywweGMzLDB4ODMsMHgzZSwweGY1LDB4MzQsMHgwMCwweDc0LDB4MGYsMHhmZiwweDBlLDB4ZjMKLSwweDM0LDB4NzUsMHgwOSwweGU4LDB4YzQsMHhmZCwweGM3LDB4MDYsMHhmNSwweDM0LDB4MDAsMHgwMCwweGY2LDB4MDYsMHg5MywweDM2Ci0sMHgyMCwweDc0LDB4MzAsMHhhMSwweGMyLDB4MzQsMHgzYiwweDA2LDB4ZTksMHgzNCwweGEzLDB4ZTksMHgzNCwweDc0LDB4MjQsMHg4MAotLDB4M2UsMHg5NSwweDM2LDB4MDAsMHg3NSwweDFkLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgyMCwweDAwLDB4NzQsMHgxMiwweGE5LDB4MjAKLSwweDAwLDB4NzQsMHgwZCwweDgzLDB4MjYsMHhjMiwweDM0LDB4ZGYsMHg4MywweDI2LDB4ZTksMHgzNCwweGRmLDB4ZTksMHgwMywweDAwCi0sMHhlOCwweGRkLDB4MDksMHhiYSwweDA2LDB4MDEsMHhlZCwweDhiLDB4ZDAsMHg4MSwweGUyLDB4MDAsMHhjMCwweGMxLDB4ZWEsMHgwZQotLDB4MDMsMHgxNiwweDc0LDB4MzQsMHhjMSwweGUwLDB4MDIsMHgxMSwweDA2LDB4NzIsMHgzNCwweDczLDB4MDQsMHhmZiwweDA2LDB4NzQKLSwweDM0LDB4YmEsMHgwMiwweDAxLDB4ZWQsMHg4YiwweGQwLDB4ODEsMHhlMiwweDAwLDB4YzAsMHhjMSwweGVhLDB4MGUsMHgwMywweDE2Ci0sMHg3MCwweDM0LDB4YzEsMHhlMCwweDAyLDB4MTEsMHgwNiwweDZlLDB4MzQsMHg3MywweDA0LDB4ZmYsMHgwNiwweDcwLDB4MzQsMHhjNwotLDB4MDYsMHhhNiwweDMzLDB4MDQsMHgwMCwweGM3LDB4MDYsMHhhYSwweDMzLDB4MDAsMHgwMCwweDhkLDB4MDYsMHhhMCwweDMzLDB4YzEKLSwweGU4LDB4MDQsMHhjZCwweDM5LDB4YzMsMHg5NSwweDA5LDB4OTUsMHgwOSwweDY1LDB4MDksMHg3OCwweDA5LDB4OTUsMHgwOSwweDk1Ci0sMHgwOSwweDkxLDB4MDcsMHg5NSwweDA5LDB4OTYsMHgwOSwweDhiLDB4MDksMHg5NSwweDA5LDB4OTUsMHgwOSwweDk1LDB4MDksMHg5NQotLDB4MDksMHg5NSwweDA5LDB4OTUsMHgwOSwweDhiLDB4YzAsMHg4YiwweGMwLDB4OGIsMHhjMCwweDhiLDB4YzAsMHg4YiwweGMwLDB4OTAKLSwweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4ZTksMHhjYywweDAwLDB4OGMsMHhjMCwweDQwLDB4OGUsMHhjMCwweDI2Ci0sMHg4YiwweDBlLDB4MDYsMHgwMCwweDg2LDB4ZTksMHgyNiwweDg5LDB4MGUsMHgwNiwweDAwLDB4OGMsMHhjMiwweGMxLDB4ZTIsMHgwNAotLDB4YmUsMHgwZSwweDAwLDB4MjYsMHhhMSwweDA0LDB4MDAsMHhkMCwweGUwLDB4MjQsMHhjMCwweDhhLDB4ZTAsMHhjMCwweGVjLDB4MDQKLSwweDBhLDB4YzQsMHgyNiwweGEyLDB4MDUsMHgwMCwweDI2LDB4YTEsMHgwOCwweDAwLDB4YTksMHgwMCwweGMwLDB4NzQsMHgwMywweGU5Ci0sMHg5ZSwweDAwLDB4MjYsMHhmNiwweDA2LDB4MTAsMHgwMCwweDgwLDB4NzUsMHgwMywweGU5LDB4MGEsMHgwMCwweDI2LDB4YTAsMHgxNgotLDB4MDAsMHgyNCwweDFmLDB4MzIsMHhlNCwweDAzLDB4ZjAsMHg4MCwweDNlLDB4ZWMsMHgzNCwweDA2LDB4NzIsMHg1YywweDgwLDB4M2UKLSwweDk1LDB4MzYsMHgwMCwweDc1LDB4NjYsMHg4YiwweGZhLDB4MzMsMHhkYiwweDhlLDB4YzMsMHgyNiwweDg5LDB4MWQsMHgyNiwweDg4Ci0sMHg1ZCwweDA0LDB4NTEsMHg1MCwweGM0LDB4MWUsMHg4YywweDM2LDB4YjksMHgwZiwweDAwLDB4MzMsMHhjMCwweGU4LDB4MjEsMHgwOQotLDB4NTgsMHg1OSwweDBiLDB4ZGIsMHg3NCwweDM0LDB4ZmUsMHgwZSwweGU2LDB4M2EsMHgyNiwweGM2LDB4MDcsMHg4MSwweDI2LDB4YzYKLSwweDQ3LDB4MDEsMHgwMCwweDI2LDB4YzYsMHg0NywweDAyLDB4ZmYsMHgyNiwweGM3LDB4NDcsMHgwNCwweDAwLDB4MDAsMHgyNiwweDg5Ci0sMHg0ZiwweDBhLDB4ODYsMHhmMiwweDI2LDB4ODksMHg1NywweDA2LDB4MjYsMHg4OSwweDc3LDB4MDgsMHgyNiwweGM2LDB4NDcsMHgwOQotLDB4MDAsMHgyNiwweGM2LDB4NDcsMHgwYywweDAyLDB4ZTgsMHg4YywweDA5LDB4YzMsMHhmZiwweDA2LDB4ZWMsMHgzMywweDhjLDB4YzAKLSwweDQ4LDB4OGUsMHhjMCwweGZhLDB4ZTgsMHg5NywweDEwLDB4ZmIsMHhlOSwweGViLDB4ZmYsMHg4YywweGMwLDB4NDgsMHg4ZSwweGMwCi0sMHhmYSwweGU4LDB4OGEsMHgxMCwweGZiLDB4YzMsMHg4YywweGMwLDB4OGUsMHhjMCwweGZhLDB4ZTgsMHg4MCwweDEwLDB4ZmIsMHhjMwotLDB4ODAsMHgzZSwweDk1LDB4MzYsMHgwMCwweDc1LDB4MDMsMHhlOSwweGMyLDB4MDAsMHhiZiwweDA4LDB4MDAsMHgyNiwweGY2LDB4MDYKLSwweDEwLDB4MDAsMHg4MCwweDc1LDB4MDUsMHgwMywweGZlLDB4ZTksMHgwYywweDAwLDB4MjYsMHhhMCwweDE2LDB4MDAsMHgyNCwweDFmCi0sMHgzMiwweGU0LDB4MDMsMHhmMCwweDAzLDB4ZmUsMHhhMCwweDk1LDB4MzYsMHgzYywweDAwLDB4NzUsMHgwMywweGU5LDB4OWMsMHgwMAotLDB4M2MsMHgwMSwweDc0LDB4MGIsMHgzYywweDAyLDB4NzQsMHgxNCwweDNjLDB4MDMsMHg3NCwweDFkLDB4ZTksMHg4ZCwweDAwLDB4YzYKLSwweDA2LDB4OTYsMHgzNiwweDAxLDB4ZTgsMHgzYywweDAxLDB4NzIsMHgyNywweGU5LDB4ODAsMHgwMCwweGM2LDB4MDYsMHg5NiwweDM2Ci0sMHgwMiwweGU4LDB4ODMsMHgwMCwweDcyLDB4MWEsMHhlOSwweDczLDB4MDAsMHhjNiwweDA2LDB4OTYsMHgzNiwweDAxLDB4ZTgsMHgyMgotLDB4MDEsMHg3MiwweDBkLDB4YzYsMHgwNiwweDk2LDB4MzYsMHgwMiwweGU4LDB4NmMsMHgwMCwweDcyLDB4MDMsMHhlOSwweDVjLDB4MDAKLSwweDUzLDB4MDYsMHg1MCwweGM0LDB4MWUsMHg4YywweDM2LDB4YjksMHgwYiwweDAwLDB4MzMsMHhjMCwweGU4LDB4NDIsMHgwOCwweDU4Ci0sMHgyNiwweGM2LDB4MDcsMHg4MiwweDI2LDB4YzYsMHg0NywweDAyLDB4ZmYsMHg4ZCwweDA2LDB4ZTAsMHhmZSwweDg2LDB4YzQsMHgyNgotLDB4ODksMHg0NywweDA2LDB4YTAsMHg5NiwweDM2LDB4MjYsMHg4OCwweDQ3LDB4MDgsMHhlOCwweGM4LDB4MDgsMHgwNywweDViLDB4ODMKLSwweDI2LDB4YWQsMHgzNiwweGZlLDB4YTEsMHhhZCwweDM2LDB4ZTcsMHgwNCwweGJhLDB4MTAsMHgwMSwweGI4LDB4ODAsMHg4MCwweGVmCi0sMHhlZCwweGJhLDB4MTAsMHgwMSwweGI4LDB4MDIsMHgwMiwweGVmLDB4ZWQsMHg1MiwweGJhLDB4ZTAsMHgwMCwweGI4LDB4NDEsMHgxMAotLDB4ZWYsMHg1YSwweGI4LDB4OWMsMHgwMywweGNkLDB4MzksMHhjNiwweDA2LDB4OTUsMHgzNiwweDAwLDB4OGMsMHhjMCwweDQ4LDB4OGUKLSwweGMwLDB4ZmEsMHhlOCwweGE5LDB4MGYsMHhmYiwweGMzLDB4MWUsMHgwNiwweDFmLDB4MDYsMHgzMywweGMwLDB4OGUsMHhjMCwweDhiCi0sMHhmMCwweDhkLDB4M2UsMHgyMCwweGYzLDB4NTEsMHhiMSwweDBhLDB4MjYsMHg4MywweDdkLDB4MGMsMHgwMSwweDc1LDB4MmEsMHg1NwotLDB4MjYsMHg4MywweDdkLDB4MGUsMHgwMCwweDc0LDB4MDYsMHhlOCwweDJmLDB4MDAsMHhlOSwweDAzLDB4MDAsMHhlOCwweDY2LDB4MDcKLSwweDVmLDB4NzMsMHgxNiwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4MjYsMHg4YiwweDRkLDB4MTIsMHg4ZCwweDc1LDB4MjAsMHg4ZCwweDNlCi0sMHhlMCwweGZlLDB4ZjMsMHhhNCwweDU5LDB4MDcsMHgxZiwweGY5LDB4YzMsMHhmZSwweGM5LDB4NzQsMHgwNywweDgxLDB4YzcsMHgyMAotLDB4MDEsMHhlOSwweGM0LDB4ZmYsMHg1OSwweDA3LDB4MWYsMHhmOCwweGMzLDB4NTEsMHg1MCwweDUzLDB4NTYsMHg1MiwweDU3LDB4MzMKLSwweGRiLDB4MjYsMHg4YSwweDVkLDB4MGUsMHgyNiwweDhiLDB4NGQsMHgxMiwweDhkLDB4N2QsMHgyMCwweDVhLDB4ODcsMHhkNywweDI2Ci0sMHg4YSwweDQ1LDB4MTQsMHg4NywweGQ3LDB4NDIsMHgzMiwweGZmLDB4ODAsMHhmZiwweDA4LDB4NzUsMHgwOCwweGZlLDB4Y2IsMHgyMgotLDB4ZGIsMHg3NSwweGVhLDB4MzMsMHhkYiwweDIzLDB4ZGIsMHg3NCwweDA2LDB4ZmUsMHhjNywweGQwLDB4YzgsMHg3MywweDBjLDB4NTAKLSwweDI2LDB4OGEsMHgwNSwweDM4LDB4MDQsMHg1OCwweDc0LDB4MDMsMHhlOSwweDBhLDB4MDAsMHg0OSwweDQ2LDB4NDcsMHgyMywweGM5Ci0sMHg3NCwweDBhLDB4ZTksMHhkMywweGZmLDB4NWEsMHg1ZSwweDViLDB4NTgsMHg1OSwweGY4LDB4YzMsMHg1YSwweDVlLDB4NWIsMHg1OAotLDB4NTksMHhmOSwweGMzLDB4MWUsMHgwNiwweDFmLDB4MDYsMHgzMywweGMwLDB4OGUsMHhjMCwweDg2LDB4Y2QsMHgyYiwweGNlLDB4OGIKLSwweGY3LDB4OGIsMHhjMSwweDMzLDB4YzksMHg4MCwweDNjLDB4ZmYsMHg3NCwweDE2LDB4ODAsMHhmOSwweDA2LDB4NzMsMHgwOSwweDMyCi0sMHhjOSwweDQ2LDB4NDgsMHg3NCwweDJlLDB4ZTksMHhlZCwweGZmLDB4M2QsMHg2MCwweDAwLDB4NzMsMHgwYywweGU5LDB4MjMsMHgwMAotLDB4ZmUsMHhjMSwweDQ2LDB4NDgsMHg3NCwweDFkLDB4ZTksMHhkYywweGZmLDB4YjgsMHgxMCwweDAwLDB4OGQsMHgzZSwweDE4LDB4MzQKLSwweDMyLDB4ZWQsMHhiMSwweDA2LDB4ZjMsMHhhNiwweDc0LDB4MDMsMHhlOSwweDA4LDB4MDAsMHg0OCwweDIzLDB4YzAsMHg3NCwweDA3Ci0sMHhlOSwweGU5LDB4ZmYsMHgwNywweDFmLDB4ZjgsMHhjMywweDhkLDB4MzYsMHgxOCwweDM0LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHg4ZAotLDB4M2UsMHhlMCwweGZlLDB4YjgsMHgxMCwweDAwLDB4YjksMHgwNiwweDAwLDB4NTYsMHhmMywweGE0LDB4NWUsMHg0OCwweDNkLDB4MDAKLSwweDAwLDB4NzUsMHhmMywweDA3LDB4MWYsMHhmOSwweGMzLDB4ZmYsMHgwNiwweGU0LDB4MzMsMHhjNiwweDA2LDB4ZWIsMHgzNCwweDAwCi0sMHgyNiwweDhiLDB4NDUsMHgwNiwweDg2LDB4ZTAsMHhjMSwweGU4LDB4MDQsMHg0OCwweDA2LDB4OGUsMHhjMCwweGZlLDB4MDYsMHhlNgotLDB4M2EsMHhmYSwweGU4LDB4NjksMHgwZSwweGZiLDB4MDcsMHhiMCwweGZmLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGIwLDB4MDEsMHhjMywweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzCi0sMHg4YiwweDBlLDB4OTcsMHgzNiwweDgxLDB4ZTEsMHg4MCwweDMwLDB4MjYsMHg4YiwweDQ3LDB4MDQsMHgyNSwweDdmLDB4Y2YsMHgwYgotLDB4YzEsMHhhMywweDk3LDB4MzYsMHhhMywweGU2LDB4MzQsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzQKLSwweDAzLDB4YjAsMHgwMywweGMzLDB4MjYsMHg4YiwweDQ3LDB4MDgsMHhhMywweDk3LDB4MzYsMHhhMywweGU2LDB4MzQsMHgyNiwweDhhCi0sMHg0NywweDIwLDB4YTIsMHhmZCwweDM0LDB4M2MsMHgwMSwweDc1LDB4MDYsMHhjNywweDA2LDB4YTEsMHgzNiwweDAwLDB4MDAsMHgyNgotLDB4OGEsMHg0NywweDIxLDB4YTIsMHhmZSwweDM0LDB4MjYsMHg4YiwweDQ3LDB4MGEsMHhhMywweDE4LDB4MzQsMHhhMywweDU4LDB4MzQKLSwweDI2LDB4OGIsMHg0NywweDBjLDB4YTMsMHgxYSwweDM0LDB4YTMsMHg1YSwweDM0LDB4MjYsMHg4YiwweDQ3LDB4MGUsMHhhMywweDFjCi0sMHgzNCwweGEzLDB4NWMsMHgzNCwweGM2LDB4MDYsMHgyYSwweDM0LDB4YzAsMHgyNiwweDhiLDB4NDcsMHgxNCwweDI1LDB4N2YsMHhmZgotLDB4MDksMHgwNiwweDJjLDB4MzQsMHgyNiwweDhiLDB4NDcsMHgxNiwweDI1LDB4ZmYsMHhmZSwweDI1LDB4ZmYsMHhmYywweDA5LDB4MDYKLSwweDJlLDB4MzQsMHhjNiwweDA2LDB4MDAsMHgzNCwweGMwLDB4MjYsMHg4YiwweDQ3LDB4MTAsMHhhMywweDAyLDB4MzQsMHgyNiwweDhiCi0sMHg0NywweDEyLDB4YTMsMHgwNCwweDM0LDB4MDYsMHg1MywweGU4LDB4ODQsMHgwYSwweDViLDB4MDcsMHgzZCwweDAwLDB4MDAsMHg3NQotLDB4MDcsMHg4MCwweDBlLDB4OTIsMHgzNiwweDA4LDB4YjAsMHhmZSwweGMzLDB4YjksMHgwMCwweDAxLDB4YTEsMHhhYywweDMzLDB4MzMKLSwweGQyLDB4ZjcsMHhmOSwweGEzLDB4YWUsMHgzMywweDkxLDB4NDksMHgzMywweGQyLDB4ZjcsMHhlOSwweDA1LDB4MDAsMHgzYiwweGEzCi0sMHg0NiwweDM0LDB4YmYsMHgwMCwweDNiLDB4ODksMHgzZSwweDQ0LDB4MzQsMHhiYSwweDY4LDB4MDAsMHhiOCwweGUwLDB4ZTAsMHhlZgotLDB4YTEsMHhhZSwweDMzLDB4ZTcsMHg2MiwweGExLDB4YWUsMHgzMywweGJhLDB4MDgsMHgwMSwweGVmLDB4YTEsMHg0NCwweDM0LDB4ZTcKLSwweDY0LDB4YTEsMHg0NCwweDM0LDB4YmEsMHgwYSwweDAxLDB4ZWYsMHhiOCwweDAwLDB4MDEsMHgyZCwweDA0LDB4MDAsMHgwZCwweDAwCi0sMHgxMCwweGU3LDB4OTIsMHhjMywweDNkLDB4MDAsMHgwMCwweDc0LDB4MGEsMHgyNiwweDg5LDB4NDcsMHgwNywweGU4LDB4ODMsMHgzYQotLDB4YjAsMHgwNywweGMzLDB4YTEsMHhhZSwweDMzLDB4MjYsMHg4OSwweDQ3LDB4MmIsMHhhMSwweDQ0LDB4MzQsMHgyNiwweDg5LDB4NDcKLSwweDJkLDB4YTEsMHg0NiwweDM0LDB4MjYsMHg4OSwweDQ3LDB4MmYsMHg4MCwweDBlLDB4OTMsMHgzNiwweDIwLDB4YTEsMHg4OCwweDM2Ci0sMHg4NiwweGUwLDB4MjYsMHg4OSwweDQ3LDB4MDgsMHhhMSwweDg0LDB4MzYsMHg4NiwweGUwLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhhMQotLDB4ODAsMHgzNiwweDg2LDB4ZTAsMHgyNiwweDg5LDB4NDcsMHgwYywweGI4LDB4NjAsMHhmZSwweDg2LDB4ZTAsMHgyNiwweDg5LDB4NDcKLSwweDBlLDB4YTAsMHhhMSwweDM2LDB4MjYsMHg4OCwweDQ3LDB4MTAsMHg4YiwweDM2LDB4ODgsMHgzNiwweDI2LDB4YzYsMHg0NCwweDAyCi0sMHhmZiwweGU1LDB4OWUsMHhhOSwweDAwLDB4MDgsMHg3NCwweDBjLDB4YmEsMHg4NCwweDAwLDB4ZWQsMHgwZCwweDA4LDB4MDAsMHhlZgotLDB4YmEsMHg4ZSwweDAwLDB4ZWYsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4ZTcsMHgwMiwweGJhLDB4MTAsMHgwMSwweGI4LDB4MDIKLSwweDAyLDB4ZWYsMHhlZCwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwMSwweGMzCi0sMHg4MCwweDI2LDB4OTMsMHgzNiwweDlmLDB4ZTgsMHg4ZCwweDBhLDB4ODAsMHgwZSwweDkyLDB4MzYsMHgwOCwweGIwLDB4ZmUsMHhjMwotLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHhjNiwweDA2LDB4MmEKLSwweDM0LDB4YzAsMHgyNiwweDhiLDB4NDcsMHgwNiwweDI1LDB4N2YsMHhmZiwweGEzLDB4MmMsMHgzNCwweDI2LDB4OGIsMHg0NywweDA4Ci0sMHgyNSwweGZmLDB4ZmUsMHgyNSwweGZmLDB4ZmMsMHhhMywweDJlLDB4MzQsMHhjZCwweDUyLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNgotLDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweGM2LDB4MDYsMHgwMCwweDM0LDB4YzAsMHgyNiwweDhiLDB4NDcKLSwweDA2LDB4YTMsMHgwMiwweDM0LDB4MjYsMHg4YiwweDQ3LDB4MDgsMHhhMywweDA0LDB4MzQsMHhjZCwweDUyLDB4YjAsMHgwMCwweGMzCi0sMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweDU3LDB4OGQsMHg3ZiwweDA2LDB4NTEsMHhiOQotLDB4MDcsMHgwMCwweDMzLDB4YzAsMHhmMywweGFiLDB4NTksMHg4ZCwweDdmLDB4MDYsMHhhMSwweDdhLDB4MzQsMHgwMywweDA2LDB4MzkKLSwweDM3LDB4MjYsMHg4OCwweDA1LDB4YTEsMHg5NSwweDM3LDB4MjYsMHg4OCwweDQ1LDB4MDIsMHhhMSwweDgwLDB4MzQsMHgwMywweDA2Ci0sMHg3NiwweDM0LDB4MjYsMHg4OCwweDQ1LDB4MDcsMHhhMSwweGM2LDB4MzQsMHgyNiwweDg4LDB4NDUsMHgwOSwweGExLDB4ZDgsMHgzMwotLDB4MjYsMHg4OCwweDQ1LDB4MGEsMHgzMywweGMwLDB4YTMsMHg3YSwweDM0LDB4YTMsMHgzOSwweDM3LDB4YTMsMHg5NSwweDM3LDB4YTMKLSwweDgwLDB4MzQsMHhhMywweDc2LDB4MzQsMHhhMywweGM2LDB4MzQsMHhhMywweGQ4LDB4MzMsMHg1ZiwweGIwLDB4MDAsMHhjMywweGY2Ci0sMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHgyNiwweDhiLDB4NGYsMHgwNCwweDgzLDB4ZjksMHgwNgotLDB4NzQsMHgxMiwweDgzLDB4ZjksMHgwNCwweDc0LDB4MGQsMHg4MywweGY5LDB4MDAsMHg3NCwweDA4LDB4ODMsMHhmOSwweDAyLDB4NzQKLSwweDAzLDB4YjAsMHgwMSwweGMzLDB4ODksMHgwZSwweGU4LDB4M2EsMHg4MywweDI2LDB4YWIsMHgzNiwweGY5LDB4MDksMHgwZSwweGFiCi0sMHgzNiwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHgwYiwweGMxLDB4ZTcsMHgwMiwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MwotLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHgyNiwweDhiLDB4NGYsMHgwNCwweDgwLDB4ZjksMHhmZiwweDc0LDB4MDgKLSwweDgwLDB4ZjksMHgwMCwweDc0LDB4MTAsMHhiMCwweDAxLDB4YzMsMHg4MywweDBlLDB4YWQsMHgzNiwweDAyLDB4YTEsMHhhZCwweDM2Ci0sMHhlNywweDA0LDB4ZTksMHgwYSwweDAwLDB4ODMsMHgyNiwweGFkLDB4MzYsMHhmZCwweGExLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhiMAotLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4ZTgsMHhkNSwweDA0LDB4YjAKLSwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDgwLDB4NzUsMHgwMywweGIwLDB4MDEsMHhjMywweDI2LDB4ODMsMHg3ZiwweDA2Ci0sMHgwNSwweDc1LDB4MDMsMHhlOSwweDlkLDB4MDAsMHgyNiwweDhiLDB4NTcsMHgwNCwweDI2LDB4OGIsMHg0NywweDA4LDB4MjYsMHg4MQotLDB4N2YsMHgwNiwweDAwLDB4ODAsMHg3NSwweDA4LDB4ZWQsMHgyNiwweDg5LDB4NDcsMHgwYSwweGU5LDB4OWQsMHgwMCwweDI2LDB4ODMKLSwweDdmLDB4MDYsMHgwMSwweDc1LDB4MDQsMHhlZiwweGU5LDB4OTIsMHgwMCwweDI2LDB4ODEsMHg3ZiwweDA2LDB4MDEsMHg4MCwweDc1Ci0sMHgwOSwweGVmLDB4ZWQsMHgyNiwweDg5LDB4NDcsMHgwYSwweGU5LDB4ODEsMHgwMCwweDI2LDB4ODMsMHg3ZiwweDA2LDB4MDIsMHg3NQotLDB4MDcsMHgyNiwweDIxLDB4NDcsMHgwNCwweGU5LDB4NzMsMHgwMCwweDI2LDB4ODEsMHg3ZiwweDA2LDB4MDIsMHg4MCwweDc1LDB4MGMKLSwweDI2LDB4MjEsMHg0NywweDA0LDB4ZWQsMHgyNiwweDg5LDB4NDcsMHgwYSwweGU5LDB4NWYsMHgwMCwweDI2LDB4ODMsMHg3ZiwweDA2Ci0sMHgwMywweDc1LDB4MDcsMHgyNiwweDA5LDB4NDcsMHgwNCwweGU5LDB4NTEsMHgwMCwweDI2LDB4ODEsMHg3ZiwweDA2LDB4MDMsMHg4MAotLDB4NzUsMHgwYywweDI2LDB4MDksMHg0NywweDA0LDB4ZWQsMHgyNiwweDg5LDB4NDcsMHgwYSwweGU5LDB4M2QsMHgwMCwweDI2LDB4ODMKLSwweDdmLDB4MDYsMHgwNCwweDc1LDB4MDcsMHgyNiwweDMxLDB4NDcsMHgwNCwweGU5LDB4MmYsMHgwMCwweDI2LDB4ODEsMHg3ZiwweDA2Ci0sMHgwNCwweDgwLDB4NzUsMHgwYywweDI2LDB4MzEsMHg0NywweDA0LDB4ZWQsMHgyNiwweDg5LDB4NDcsMHgwYSwweGU5LDB4MWIsMHgwMAotLDB4YjAsMHgwMSwweGMzLDB4ZmEsMHg1MywweDI2LDB4OGIsMHg0ZiwweDA4LDB4MGIsMHhjOSwweDc0LDB4MGMsMHg4ZCwweDFlLDB4ZTAKLSwweGZlLDB4ZTgsMHg1MiwweGZmLDB4ODMsMHhjMywweDA4LDB4ZTIsMHhmOCwweDViLDB4ZmIsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2Ci0sMHg5MywweDM2LDB4ODAsMHg3NSwweDBhLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDAxLDB4YzMsMHg4ZAotLDB4M2UsMHhlMCwweGZlLDB4ZTUsMHgwMCwweDI2LDB4ODksMHgwNSwweGU1LDB4MDIsMHgyNiwweDg5LDB4NDUsMHgwMiwweGExLDB4YWQKLSwweDM2LDB4MjYsMHg4OSwweDQ1LDB4MDQsMHhlNSwweDA2LDB4MjYsMHg4OSwweDQ1LDB4MDYsMHhlNSwweDA4LDB4MjYsMHg4OSwweDQ1Ci0sMHgwOCwweGU1LDB4MGEsMHgyNiwweDg5LDB4NDUsMHgwYSwweGU1LDB4MGUsMHgyNiwweDg5LDB4NDUsMHgwYywweGU1LDB4NDgsMHgyNgotLDB4ODksMHg0NSwweDBlLDB4ZTUsMHg0YSwweDI2LDB4ODksMHg0NSwweDEwLDB4ZTUsMHg0YywweDI2LDB4ODksMHg0NSwweDEyLDB4YTEKLSwweGI3LDB4MzYsMHgyNiwweDg5LDB4NDUsMHgxNCwweGU1LDB4NTAsMHgyNiwweDg5LDB4NDUsMHgxNiwweGU1LDB4NTIsMHgyNiwweDg5Ci0sMHg0NSwweDE4LDB4ZTUsMHg1NCwweDI2LDB4ODksMHg0NSwweDFhLDB4ZTUsMHg1NiwweDI2LDB4ODksMHg0NSwweDFjLDB4ZTUsMHg1OAotLDB4MjYsMHg4OSwweDQ1LDB4MWUsMHhlNSwweDYyLDB4MjYsMHg4OSwweDQ1LDB4MjAsMHhlNSwweDY0LDB4MjYsMHg4OSwweDQ1LDB4MjIKLSwweGU1LDB4NjYsMHgyNiwweDg5LDB4NDUsMHgyNCwweGU1LDB4NjgsMHgyNiwweDg5LDB4NDUsMHgyNiwweGU1LDB4NmEsMHgyNiwweDg5Ci0sMHg0NSwweDI4LDB4ZTUsMHg2YywweDI2LDB4ODksMHg0NSwweDJhLDB4ZTUsMHg3MCwweDI2LDB4ODksMHg0NSwweDJjLDB4ZTUsMHg3MgotLDB4MjYsMHg4OSwweDQ1LDB4MmUsMHhlNSwweDc0LDB4MjYsMHg4OSwweDQ1LDB4MzAsMHhlNSwweDc2LDB4MjYsMHg4OSwweDQ1LDB4MzIKLSwweGU1LDB4N2MsMHgyNiwweDg5LDB4NDUsMHgzNCwweGU1LDB4N2UsMHgyNiwweDg5LDB4NDUsMHgzNiwweGU1LDB4ODAsMHgyNiwweDg5Ci0sMHg0NSwweDM4LDB4ZTUsMHg4MiwweDI2LDB4ODksMHg0NSwweDNhLDB4ZTUsMHg4NiwweDI2LDB4ODksMHg0NSwweDNjLDB4ZTUsMHg4OAotLDB4MjYsMHg4OSwweDQ1LDB4M2UsMHhlNSwweDlhLDB4MjYsMHg4OSwweDQ1LDB4NDAsMHhlNSwweDllLDB4MjYsMHg4OSwweDQ1LDB4NDIKLSwweGU1LDB4Y2MsMHgyNiwweDg5LDB4NDUsMHg0NCwweGU1LDB4Y2UsMHgyNiwweDg5LDB4NDUsMHg0NiwweGU1LDB4ZDAsMHgyNiwweDg5Ci0sMHg0NSwweDQ4LDB4ZTUsMHhkMiwweDI2LDB4ODksMHg0NSwweDRhLDB4YmEsMHgwMCwweDAxLDB4ZWQsMHgxMSwweDA2LDB4NjYsMHgzNAotLDB4NzMsMHgwNCwweGZmLDB4MDYsMHg2OCwweDM0LDB4MjYsMHg4OSwweDQ1LDB4NGMsMHhiYSwweDAyLDB4MDEsMHhlZCwweGMxLDB4ZTAKLSwweDAyLDB4MTEsMHgwNiwweDZlLDB4MzQsMHg3MywweDA0LDB4ZmYsMHgwNiwweDcwLDB4MzQsMHgyNiwweDg5LDB4NDUsMHg0ZSwweGJhCi0sMHgwNCwweDAxLDB4ZWQsMHgxMSwweDA2LDB4NmEsMHgzNCwweDczLDB4MDQsMHhmZiwweDA2LDB4NmMsMHgzNCwweDI2LDB4ODksMHg0NQotLDB4NTAsMHhiYSwweDA2LDB4MDEsMHhlZCwweGMxLDB4ZTAsMHgwMiwweDExLDB4MDYsMHg3MiwweDM0LDB4NzMsMHgwNCwweGZmLDB4MDYKLSwweDc0LDB4MzQsMHgyNiwweDg5LDB4NDUsMHg1MiwweGJhLDB4MDgsMHgwMSwweGVkLDB4MjYsMHg4OSwweDQ1LDB4NTQsMHhiYSwweDBhCi0sMHgwMSwweGVkLDB4MjYsMHg4OSwweDQ1LDB4NTYsMHhiYSwweDBjLDB4MDEsMHhlZCwweDI2LDB4ODksMHg0NSwweDU4LDB4YmEsMHgwZQotLDB4MDEsMHhlZCwweDAxLDB4MDYsMHg3YSwweDM0LDB4MjYsMHg4OSwweDQ1LDB4NWUsMHhiYSwweDEwLDB4MDEsMHhlZCwweDI2LDB4ODkKLSwweDQ1LDB4NWMsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDgwLDB4NzQsMHgwNywweGY2LDB4MDYsMHg5MywweDM2Ci0sMHgyMCwweDc1LDB4MDMsMHhiMCwweDAxLDB4YzMsMHgyNiwweDgwLDB4N2YsMHgwNiwweDAwLDB4NzUsMHgzMCwweDgwLDB4M2UsMHg5NQotLDB4MzYsMHgwMCwweDc0LDB4NTIsMHhjNiwweDA2LDB4OTUsMHgzNiwweDAwLDB4ODMsMHgyNiwweGFkLDB4MzYsMHhmZSwweGExLDB4YWQKLSwweDM2LDB4ZTcsMHgwNCwweGJhLDB4MTAsMHgwMSwweGI4LDB4ODAsMHg4MCwweGVmLDB4ZWQsMHhiYSwweDEwLDB4MDEsMHhiOCwweDAyCi0sMHgwMiwweGVmLDB4ZWQsMHhiYSwweGUwLDB4MDAsMHhiOCwweDAwLDB4MTAsMHhlZiwweGIwLDB4MDAsMHhjMywweDI2LDB4OGIsMHg0NwotLDB4MDQsMHgzZCwweDAwLDB4MDAsMHg3NCwweDIwLDB4M2QsMHgwMywweDAwLDB4NzcsMHgxYiwweGJhLDB4MTAsMHgwMSwweGI4LDB4MDIKLSwweDAwLDB4ZWYsMHhiYSwweGUwLDB4MDAsMHhiOCwweDAxLDB4MTAsMHhlZiwweDgzLDB4MGUsMHhhZCwweDM2LDB4MDEsMHhhMSwweGFkCi0sMHgzNiwweGU3LDB4MDQsMHhiMCwweDAwLDB4YzMsMHhiMCwweDA2LDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDgwLDB4NzUsMHgwMwotLDB4YjAsMHgwMSwweGMzLDB4MjYsMHg4MywweDdmLDB4MDQsMHgwMSwweDc0LDB4MGEsMHgyNiwweDgzLDB4N2YsMHgwNCwweDAyLDB4NzQKLSwweDE5LDB4YjAsMHgwNiwweGMzLDB4MjYsMHg4MywweDdmLDB4MDYsMHgwYywweDc3LDB4ZjYsMHgyNiwweDgzLDB4N2YsMHgwYSwweDYwCi0sMHg3NywweGVmLDB4ZTgsMHgxMCwweDAwLDB4NzIsMHgwYiwweGIwLDB4NDYsMHhjMywweGU4LDB4NGUsMHgwMCwweDcyLDB4MDMsMHhiMAotLDB4NDYsMHhjMywweGIwLDB4MDAsMHhjMywweDUxLDB4YjEsMHgwYSwweDhiLDB4M2UsMHgyMCwweGYzLDB4MjYsMHg4MywweDdkLDB4MGMKLSwweDAyLDB4NzUsMHgwMywweGU5LDB4MGUsMHgwMCwweGZlLDB4YzksMHg3NCwweDA3LDB4ODEsMHhjNywweDIwLDB4MDEsMHhlOSwweGViCi0sMHhmZiwweDU5LDB4ZjgsMHhjMywweDU3LDB4OGQsMHg3ZCwweDBlLDB4OGQsMHg3NywweDA2LDB4YjksMHgxMiwweDAwLDB4ZjMsMHhhNAotLDB4OGQsMHg3ZCwweDIwLDB4OGQsMHgzNiwweGUwLDB4ZmUsMHgyNiwweDhiLDB4NGQsMHgxMiwweGYzLDB4YTQsMHhmZiwweDA2LDB4MDEKLSwweDM1LDB4NWYsMHgyNiwweGM3LDB4NDUsMHgwYywweDAxLDB4MDAsMHg1OSwweGY5LDB4YzMsMHg1MSwweGIxLDB4MGEsMHg4ZCwweDNlCi0sMHgyMCwweGYzLDB4OGQsMHgzNiwweGUwLDB4ZmUsMHgyNiwweDgzLDB4N2QsMHgwYywweDAxLDB4NzUsMHgxYiwweDU3LDB4ZTgsMHgyNQotLDB4MDAsMHg1ZiwweDczLDB4MTQsMHgzMywweGMwLDB4YjksMHgyMCwweDAxLDB4ZjMsMHhhYSwweDI2LDB4YzcsMHg0NSwweDBjLDB4MDIKLSwweDAwLDB4ZmYsMHgwZSwweDAxLDB4MzUsMHg1OSwweGY5LDB4YzMsMHhmZSwweGM5LDB4NzQsMHgwNywweDgxLDB4YzcsMHgyMCwweDAxCi0sMHhlOSwweGQzLDB4ZmYsMHg1OSwweGY4LDB4YzMsMHg1MSwweDI2LDB4OGIsMHg0ZCwweDEyLDB4OGQsMHg3ZCwweDIwLDB4ZjMsMHhhNgotLDB4NzQsMHgwMywweDU5LDB4ZjgsMHhjMywweDU5LDB4ZjksMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDgwLDB4M2UsMHhlYywweDM0LDB4MDYsMHg3MiwweDMzLDB4ZmYsMHgwNiwweGYwLDB4MzMsMHg1MCwweGM0LDB4MWUsMHg4YywweDM2Ci0sMHhiOSwweDBmLDB4MDAsMHgzMywweGMwLDB4ZTgsMHgyOSwweDAwLDB4NTgsMHg4MSwweDI2LDB4YzIsMHgzNCwweGRmLDB4N2YsMHg4MQotLDB4MjYsMHhlOSwweDM0LDB4ZGYsMHg3ZiwweDBiLDB4ZGIsMHg3NCwweDExLDB4MjYsMHhjNiwweDA3LDB4ODQsMHgyNiwweGM2LDB4NDcKLSwweDAyLDB4ZmYsMHgyNiwweDg5LDB4NDcsMHgwNiwweGU4LDB4YWMsMHgwMCwweGMzLDB4ZmYsMHgwNiwweGVhLDB4MzMsMHhlOSwweGY1Ci0sMHhmZiwweDU3LDB4MjYsMHg4YiwweDNmLDB4MDMsMHhmOSwweDI2LDB4M2IsMHg3ZiwweDAyLDB4NzQsMHgxNiwweDI2LDB4M2IsMHg3ZgotLDB4MDQsMHg3YywweDJhLDB4M2QsMHgwMCwweDAwLDB4NzUsMHgxMywweDhkLDB4N2YsMHgwOCwweDAzLDB4ZjksMHgyNiwweDNiLDB4N2YKLSwweDAyLDB4N2MsMHgxNCwweGZmLDB4MDYsMHhkZSwweDMzLDB4MzMsMHhkYiwweDVmLDB4YzMsMHgyNiwweDhiLDB4N2YsMHgwMiwweDI2Ci0sMHg4OSwweDNmLDB4MDMsMHhmOSwweGU5LDB4MDYsMHgwMCwweDI2LDB4ODksMHgzZiwweDI2LDB4MjksMHgwZiwweDI2LDB4YzcsMHgwNQotLDB4ZmYsMHhmZiwweDI2LDB4ODcsMHgzZiwweDI2LDB4ODksMHgwZCwweDhkLDB4NWQsMHgwMiwweDUwLDB4OGIsMHhmYiwweDgzLDB4ZTkKLSwweDAyLDB4MzMsMHhjMCwweGYzLDB4YWEsMHg1OCwweGZlLDB4MGUsMHhlYywweDM0LDB4NWYsMHhjMywweDhiLDB4N2MsMHgwMiwweDNiCi0sMHgzYywweDc0LDB4MmYsMHg4MywweDNkLDB4ZmYsMHg3NSwweDBiLDB4OGQsMHg3YywweDA4LDB4ODksMHg3YywweDAyLDB4ODMsMHgzZAotLDB4ZmYsMHg3NCwweDFlLDB4OGEsMHg0NSwweDAyLDB4M2MsMHg4MSwweDc1LDB4MGMsMHg4MCwweDNlLDB4ZWIsMHgzNCwweDAwLDB4NzQKLSwweDA1LDB4MzMsMHhjMCwweGU5LDB4MGIsMHgwMCwweDhiLDB4MGQsMHgwMSwweDRjLDB4MDIsMHg4ZCwweDc1LDB4MDIsMHg4MywweGU5Ci0sMHgwMiwweGMzLDB4ODAsMHgzZSwweGVjLDB4MzQsMHgwNiwweDcyLDB4MDUsMHgzMywweGMwLDB4ZTksMHhmMywweGZmLDB4ZmYsMHgwNgotLDB4ZWUsMHgzMywweGU5LDB4YmUsMHhmZiwweGY2LDB4MDYsMHg5MiwweDM2LDB4NDAsMHg3NCwweDAxLDB4YzMsMHg1NywweDU2LDB4NTEKLSwweDUyLDB4OGIsMHgzNiwweDhjLDB4MzYsMHhlOCwweGE0LDB4ZmYsMHg3NSwweDAzLDB4ZTksMHgxYSwweDAwLDB4ZTksMHgxYywweDAwCi0sMHhmZSwweDA2LDB4ZWMsMHgzNCwweGM0LDB4M2UsMHg4MCwweDM2LDB4ZjMsMHhhNCwweDgwLDB4MGUsMHg5MiwweDM2LDB4NDAsMHhiYQotLDB4MGMsMHgwMSwweGI4LDB4ODAsMHg4MCwweGVmLDB4ZWQsMHg1YSwweDU5LDB4NWUsMHg1ZiwweGMzLDB4ZmYsMHgwNiwweGUwLDB4MzMKLSwweDgwLDB4M2MsMHg4MSwweDc1LDB4MGMsMHhmZiwweDA2LDB4ZTIsMHgzMywweGM2LDB4MDYsMHhlYiwweDM0LDB4MDEsMHhlOSwweGNmCi0sMHhmZiwweDgwLDB4M2MsMHg4NCwweDc1LDB4MDcsMHhmZiwweDA2LDB4ZTYsMHgzMywweGU5LDB4YzMsMHhmZiwweGZmLDB4MDYsMHhlOAotLDB4MzMsMHhlOSwweGJjLDB4ZmYsMHg4ZCwweDNlLDB4ZTAsMHhmZSwweGExLDB4NzIsMHgzNCwweGM3LDB4MDYsMHg3MiwweDM0LDB4MDAKLSwweDAwLDB4ODksMHgwNSwweGExLDB4NzQsMHgzNCwweGM3LDB4MDYsMHg3NCwweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgwMiwweGJhCi0sMHgwNCwweDAxLDB4ZWQsMHg4OSwweDQ1LDB4MDQsMHhjNywweDQ1LDB4MDYsMHgwMCwweDAwLDB4YTEsMHg2ZSwweDM0LDB4YzcsMHgwNgotLDB4NmUsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MDgsMHhhMSwweDcwLDB4MzQsMHhjNywweDA2LDB4NzAsMHgzNCwweDAwLDB4MDAKLSwweDg5LDB4NDUsMHgwYSwweGJhLDB4MDAsMHgwMSwweGVkLDB4ODksMHg0NSwweDBjLDB4YzcsMHg0NSwweDBlLDB4MDAsMHgwMCwweDMyCi0sMHhlNCwweGJhLDB4MGUsMHgwMSwweGVjLDB4ODksMHg0NSwweDEwLDB4YTEsMHg3ZSwweDM0LDB4YzcsMHgwNiwweDdlLDB4MzQsMHgwMAotLDB4MDAsMHg4OSwweDQ1LDB4MTIsMHhhMSwweDhjLDB4MzQsMHhjNywweDA2LDB4OGMsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MTQKLSwweGExLDB4OGEsMHgzNCwweGM3LDB4MDYsMHg4YSwweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgxNiwweGExLDB4N2MsMHgzNCwweGM3Ci0sMHgwNiwweDdjLDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDE4LDB4YTEsMHg4OCwweDM0LDB4YzcsMHgwNiwweDg4LDB4MzQsMHgwMAotLDB4MDAsMHg4OSwweDQ1LDB4MWEsMHhhMSwweGNhLDB4MzMsMHhjNywweDA2LDB4Y2EsMHgzMywweDAwLDB4MDAsMHg4OSwweDQ1LDB4MWMKLSwweGExLDB4NzgsMHgzNCwweGM3LDB4MDYsMHg3OCwweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgxZSwweGExLDB4YzYsMHgzNCwweGM3Ci0sMHgwNiwweGM2LDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDIwLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4ZmEsMHgzMywweGMwLDB4OGUsMHhkOCwweDhlLDB4YzAsMHhiOCwweGEwLDB4MDEsMHhjMSwweGU4LDB4MDQsMHg4ZSwweGQwLDB4OGQKLSwweDI2LDB4ODAsMHgwMCwweGU4LDB4MDAsMHgwMSwweGU4LDB4MTAsMHhlYiwweDhiLDB4MWUsMHhmNywweDM0LDB4OGIsMHgxNiwweGY5Ci0sMHgzNCwweDhiLDB4MzYsMHhmZiwweDM0LDB4MzMsMHhjMCwweGI5LDB4ZWYsMHhmZiwweDhkLDB4M2UsMHgxNCwweDAwLDB4MmIsMHhjZgotLDB4MmIsMHhjZSwweGQxLDB4ZTksMHhmMywweGFiLDB4ODksMHgxZSwweGY3LDB4MzQsMHg4OSwweDE2LDB4ZjksMHgzNCwweDgzLDB4ZmUKLSwweDAwLDB4NzQsMHgwYywweGI5LDB4ZWYsMHhmZiwweGJmLDB4ODAsMHhmZSwweDJiLDB4Y2YsMHhkMSwweGU5LDB4ZjMsMHhhYiwweGI5Ci0sMHhmZiwweGZmLDB4ODEsMHhlOSwweDAwLDB4M2IsMHg4MywweGZlLDB4MDAsMHg3NCwweDAzLDB4ZTksMHgxYiwweDAwLDB4NTEsMHgxZQotLDB4YjgsMHgwMCwweGUwLDB4OGUsMHhkOCwweDMzLDB4ZjYsMHg4ZCwweDNlLDB4MDAsMHhkOCwweGI5LDB4MDAsMHgwYywweGYzLDB4YTUKLSwweDFmLDB4NTksMHhiZSwweGZmLDB4ZmYsMHg4MSwweGVlLDB4MDAsMHhkOCwweDJiLDB4Y2UsMHg4MSwweGUxLDB4MDAsMHhmZiwweDg5Ci0sMHgwZSwweGFjLDB4MzMsMHg4ZCwweDA2LDB4MjAsMHgwMiwweGMxLDB4ZTgsMHgwNCwweGEzLDB4MzIsMHgzNCwweDhlLDB4ZDAsMHgzNgotLDB4YzcsMHgwNiwweDFlLDB4MDAsMHg4MCwweDE4LDB4MzYsMHhjNywweDA2LDB4MjIsMHgwMCwweGZmLDB4N2YsMHgzNiwweGM3LDB4MDYKLSwweDBhLDB4MDAsMHhmZiwweGZmLDB4MzYsMHhjNywweDA2LDB4MWMsMHgwMCwweDgwLDB4MDAsMHg4ZCwweDA2LDB4YTAsMHgwMiwweGMxCi0sMHhlOCwweDA0LDB4YTMsMHgzMCwweDM0LDB4OGUsMHhkMCwweDM2LDB4YzcsMHgwNiwweDFlLDB4MDAsMHg1MCwweDI4LDB4MzYsMHhjNwotLDB4MDYsMHgwYSwweDAwLDB4ZmYsMHhmZiwweDM2LDB4YzcsMHgwNiwweDFjLDB4MDAsMHg4MCwweDAwLDB4YjgsMHhhMCwweDAxLDB4YzEKLSwweGU4LDB4MDQsMHhhMywweDM0LDB4MzQsMHhhMywweGYyLDB4MzMsMHg4ZSwweGQwLDB4OGQsMHgyNiwweDgwLDB4MDAsMHhiOCwweDAwCi0sMHg5MCwweGU3LDB4MDIsMHg4ZCwweDNlLDB4NzAsMHgwMSwweDhiLDB4YzcsMHhjMSwweGU4LDB4MDQsMHhiOSwweDAzLDB4MDAsMHg4OQotLDB4NDUsMHgwZSwweDg5LDB4NDUsMHgwMiwweGM3LDB4MDUsMHhmZiwweGZmLDB4ODMsMHhjNywweDEwLDB4MDUsMHgwMSwweDAwLDB4ZTIKLSwweGVlLDB4ZTgsMHg1YiwweDAxLDB4ZTUsMHhjZSwweGEzLDB4YjUsMHgzNiwweGU4LDB4MjEsMHgwMCwweGU4LDB4NDUsMHgwMSwweGExCi0sMHgzMiwweDM0LDB4OGMsMHhjYiwweGNkLDB4MzcsMHgwZSwweDU4LDB4YTksMHgwMCwweGYwLDB4NzQsMHgwNywweDMzLDB4ZjYsMHg4OQotLDB4MzYsMHhmZiwweDM0LDB4YzMsMHg4ZCwweDM2LDB4MzAsMHg2MSwweDg5LDB4MzYsMHhmZiwweDM0LDB4YzMsMHgzMywweGMwLDB4OGIKLSwweGQwLDB4OGIsMHhmMiwweGI5LDB4NjgsMHgwMCwweDJlLDB4ODAsMHhiYywweGFjLDB4MTcsMHg4MCwweDc1LDB4MDEsMHhlZiwweDgzCi0sMHhjMiwweDAyLDB4NDYsMHhlMiwweGYxLDB4YjgsMHgwMiwweDAwLDB4ZTcsMHg1MCwweGI5LDB4NWEsMHgwMCwweDMzLDB4ZmYsMHhjNwotLDB4MDUsMHg2NSwweDE4LDB4OGMsMHg0ZCwweDAyLDB4ODMsMHhjNywweDA0LDB4ZTIsMHhmNCwweDMzLDB4YzAsMHg4ZSwweGMwLDB4OGMKLSwweGM4LDB4OGUsMHhkOCwweDhkLDB4M2UsMHg4MCwweDAwLDB4OGQsMHgzNiwweDljLDB4MTcsMHhiOSwweDA4LDB4MDAsMHhlOCwweDM3Ci0sMHgwMCwweDhkLDB4MzYsMHgyMCwweDIxLDB4OGQsMHgzZSwweGMwLDB4MDAsMHhiOSwweDBkLDB4MDAsMHhlOCwweDI5LDB4MDAsMHg4ZAotLDB4M2UsMHg0MCwweDAxLDB4YjksMHgwYSwweDAwLDB4ZTgsMHgxZiwweDAwLDB4ZTgsMHg0YiwweDBlLDB4MzMsMHhjMCwweDhlLDB4ZDgKLSwweGM3LDB4MDYsMHg0ZSwweDM3LDB4NmYsMHgxNywweGU3LDB4NDgsMHhlNywweDRjLDB4YjgsMHg0MCwweDljLDB4ZTcsMHg0YSwweGU1Ci0sMHg0OCwweDkwLDB4YjgsMHgwMCwweDcwLDB4ZTcsMHg0OCwweGMzLDB4YTUsMHg4MywweGM3LDB4MDIsMHhlMiwweGZhLDB4YzMsMHhlNQotLDB4NGMsMHhjMywweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNSwweDU4LDB4ZDEKLSwweGUwLDB4NzMsMHgxMSwweDhiLDB4ZjAsMHhkMSwweGU2LDB4MzMsMHhjMCwweDhlLDB4ZDgsMHg4YiwweGI0LDB4ODAsMHgwMCwweDgzCi0sMHhjNiwweDBiLDB4ZmYsMHhlNiwweDFmLDB4MDcsMHg1YSwweDVmLDB4NWUsMHg1OSwweDU4LDB4Y2YsMHg1OCwweDFjLDB4ZTQsMHgxYwotLDB4NmMsMHgxYywweDhlLDB4MWEsMHhjMCwweDFmLDB4NDAsMHgxYSwweDQ0LDB4MWMsMHg2NSwweDE4LDB4ODAsMHg4MCwweDgwLDB4ZmYKLSwweDgwLDB4MDMsMHgwMiwweDgwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCi0sMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgotLDB4ODAsMHgwMywweDAzLDB4NDMsMHg4MCwweDgwLDB4MDIsMHg4MCwweDQyLDB4MDMsMHgwMiwweGZmLDB4MDMsMHgwMSwweDAzLDB4MDEKLSwweDAxLDB4MDMsMHgwMiwweDAzLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAyLDB4MDMsMHgwMSwweDAzCi0sMHgwMywweGZmLDB4MDEsMHgwMSwweGZmLDB4MDEsMHhmZiwweDAxLDB4MDEsMHgwMywweDAzLDB4MDMsMHhmZiwweGZmLDB4ZmYsMHhmZgotLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKLSwweGZmLDB4ZmYsMHhmZiwweDAyLDB4YjgsMHgwZiwweDAwLDB4ZTcsMHg4NCwweGI4LDB4MGYsMHhmOCwweGU3LDB4ODIsMHhjMywweGI5Ci0sMHgwOCwweDAwLDB4ODksMHgwZSwweGU2LDB4M2EsMHg4ZCwweDA2LDB4MjAsMHgwMywweDhiLDB4ZDAsMHhjMSwweGU4LDB4MDQsMHhhMwotLDB4OTAsMHgwMSwweDhiLDB4YzIsMHg4YiwweGQ4LDB4YzEsMHhlOCwweDA0LDB4OGUsMHhjMCwweDA1LDB4NjEsMHgwMCwweDI2LDB4YTMKLSwweDAwLDB4MDAsMHhhMSwweDMwLDB4MzQsMHgyNiwweGEzLDB4MDIsMHgwMCwweDgzLDB4YzMsMHgxNCwweGQxLDB4ZWIsMHgyNiwweDg5Ci0sMHgxZSwweDA4LDB4MDAsMHg4MSwweGMyLDB4MTAsMHgwNiwweGUyLDB4ZDksMHgyNiwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZgotLDB4OGMsMHgwNiwweDkyLDB4MDEsMHhjMywweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgKLSwweGU3LDB4NWEsMHhmZiwweDA2LDB4YmUsMHgzMywweGJhLDB4ZDIsMHgwMCwweGVkLDB4Y2YsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg4YywweGNiLDB4YTEsMHgzMCwweDM0LDB4Y2QsMHgzNywweGU5LDB4MDYsMHhlZCwweGI4LDB4MzIsMHgwMCwweGMzLDB4ZTgsMHg4YwotLDB4MDEsMHhmZSwweDA2LDB4ZTIsMHgzNCwweGU4LDB4MjEsMHgwMSwweDc1LDB4ZjAsMHhlOCwweDUzLDB4MGUsMHg4MSwweDBlLDB4YWYKLSwweDM2LDB4MDAsMHhjMCwweGM3LDB4MDYsMHhhZCwweDM2LDB4NjAsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4ODAsMHgwMCwweDc1Ci0sMHgxYSwweGY3LDB4MDYsMHhlNiwweDM0LDB4MDAsMHgwOCwweDc0LDB4MDksMHhjNywweDA2LDB4YWIsMHgzNiwweDBiLDB4MDAsMHhlOQotLDB4MGYsMHgwMCwweGM3LDB4MDYsMHhhYiwweDM2LDB4MDMsMHgwMCwweGU5LDB4MDYsMHgwMCwweGM3LDB4MDYsMHhhYiwweDM2LDB4MTEKLSwweDljLDB4YzcsMHgwNiwweGE5LDB4MzYsMHgxOCwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHg4MCwweDAwLDB4NzUsMHgwZCwweGY3Ci0sMHgwNiwweGI1LDB4MzYsMHgwMiwweDAwLDB4NzQsMHgwNSwweDgzLDB4MGUsMHhhOSwweDM2LDB4MjAsMHhhMSwweGE5LDB4MzYsMHhlNwotLDB4MDAsMHhhMSwweGFiLDB4MzYsMHhlNywweDAyLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHg4MCwweDAwLDB4NzQsMHgyZSwweGU4LDB4ZjIKLSwweDJmLDB4MzMsMHhjMCwweDBkLDB4NDEsMHgwMCwweGU3LDB4NTYsMHhhMSwweGIxLDB4MzYsMHgwZCwweDAwLDB4MTAsMHhlNywweDA4Ci0sMHhhMSwweGIzLDB4MzYsMHhlNywweDBhLDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGI4LDB4NDAsMHgwMCwweGU3LDB4NGUsMHgzMwotLDB4YzAsMHhlNywweDBlLDB4YzcsMHgwNiwweDI2LDB4MDIsMHgwMCwweDAwLDB4ZTksMHgyMywweDAwLDB4YzcsMHgwNiwweDRlLDB4MzcKLSwweDNmLDB4MjAsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDgwLDB4NzQsMHgwNywweDI2Ci0sMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4ODAsMHhjNiwweDA2LDB4ZTAsMHgzNCwweDAxLDB4YjgsMHgwMCwweDAwLDB4YzMsMHhmZQotLDB4MDYsMHhlMSwweDM0LDB4YzYsMHgwNiwweGUwLDB4MzQsMHgwMCwweGExLDB4MjYsMHgwMiwweDBiLDB4YzAsMHg3NCwweDAxLDB4YzMKLSwweGU4LDB4MDQsMHgwMCwweGI4LDB4MDAsMHgwMCwweGMzLDB4YTEsMHhhOSwweDM2LDB4ZTcsMHgwMCwweDhiLDB4MWUsMHhhYiwweDM2Ci0sMHg4MywweGUzLDB4MDYsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4MGIsMHhjMywweDBkLDB4MTAsMHgwMCwweGU3LDB4MDIsMHhhMQotLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhjMywweGI4LDB4MGEsMHgwMCwweGU3LDB4ODQsMHhmZSwweDA2LDB4ZTUsMHgzNCwweGM2LDB4MDYKLSwweGUzLDB4MzQsMHgwMSwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4NDAsMHg3NCwweDA3Ci0sMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHg0MCwweGMzLDB4YzcsMHgwNiwweDRlLDB4MzcsMHg2ZiwweDE3LDB4ZmUsMHgwNgotLDB4ZTQsMHgzNCwweGM2LDB4MDYsMHhlMywweDM0LDB4MDAsMHhjMywweGMzLDB4ZjYsMHgwNiwweDE4LDB4MzQsMHg4MCwweDc1LDB4MGQKLSwweGExLDB4MTgsMHgzNCwweDBiLDB4MDYsMHgxYSwweDM0LDB4MGIsMHgwNiwweDFjLDB4MzQsMHg3NSwweDAxLDB4YzMsMHhhMSwweDJlCi0sMHgzNCwweDI1LDB4ZmYsMHhmZSwweDhiLDB4MTYsMHhlNywweDM2LDB4ODEsMHhlMiwweDAwLDB4MDEsMHgwYiwweGMyLDB4YTMsMHgyZQotLDB4MzQsMHg4ZCwweDE2LDB4MTAsMHgwMCwweGJmLDB4MDAsMHgwMCwweGI5LDB4MDgsMHgwMCwweDhiLDB4ODUsMHgwMCwweDM0LDB4ZWYKLSwweDgzLDB4YzIsMHgxMCwweDhiLDB4ODUsMHgwMiwweDM0LDB4ZWYsMHg4MywweGMyLDB4MTAsMHg4YiwweDg1LDB4MDQsMHgzNCwweGVmCi0sMHg4MywweGMyLDB4ZTIsMHg4MywweGM3LDB4MDYsMHg0OSwweDc1LDB4ZTIsMHhiOCwweDAwLDB4MDAsMHg4ZSwweGMwLDB4YmUsMHgwMAotLDB4MzQsMHhiZiwweGI5LDB4MzYsMHhiOSwweDE4LDB4MDAsMHhmMywweGE1LDB4YjgsMHgwMCwweDAwLDB4YzMsMHgzMywweGMwLDB4OGUKLSwweGMwLDB4OGQsMHgzZSwweGIwLDB4MzMsMHhiOSwweDA4LDB4MDAsMHhmMywweGFiLDB4OGQsMHgzZSwweDNlLDB4MzQsMHhiOSwweDAzCi0sMHgwMCwweGYzLDB4YWIsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3LDB4NWEsMHhmZiwweDA2LDB4YmEKLSwweDMzLDB4ZTUsMHg1NiwweDBkLDB4MjAsMHgwMCwweGU3LDB4NTYsMHhiYSwweDdhLDB4MDAsMHhlZCwweDA4LDB4MjYsMHg5NCwweDM2Ci0sMHgzMywweGMwLDB4YjEsMHgwOCwweDMyLDB4ZWQsMHgwNiwweDhlLDB4YzAsMHg4ZCwweDNlLDB4ZTAsMHhmZiwweGYzLDB4YWEsMHg4ZQotLDB4MDYsMHgzMiwweDM0LDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDIsMHgwNywweGU1LDB4NTYsMHgyNSwweGRmLDB4ZmYKLSwweGU3LDB4NTYsMHhlOSwweGY4LDB4ZmMsMHgwMCwweGJkLDB4MWIsMHgxMCwweDFiLDB4ZDksMHgxYSwweGYzLDB4MWEsMHg1MCwweDUxCi0sMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNywweDVhLDB4ZmYsMHgwNiwweGI2LDB4MzMsMHg1MwotLDB4MDYsMHg1MSwweGU1LDB4ODAsMHhhMywweGI0LDB4MzMsMHg4YiwweGQ4LDB4OGIsMHhjOCwweDI1LDB4MTAsMHgwMCwweGEzLDB4ZWQKLSwweDM0LDB4MGIsMHhjMCwweDc0LDB4MTQsMHhmZiwweDA2LDB4ODAsMHgzNCwweDgwLDB4M2UsMHhmZSwweDM0LDB4MDAsMHg3NCwweDAzCi0sMHhlOSwweDA2LDB4MDAsMHhiOCwweDgwLDB4MDAsMHhlOCwweDlkLDB4MDQsMHg4MywweGUzLDB4MDMsMHhkMSwweGUzLDB4MmUsMHhmZgotLDB4OTcsMHg4NiwweDFhLDB4NTksMHgwNywweDViLDB4ZTksMHhhNCwweGZjLDB4YmEsMHgyMCwweDAwLDB4OGUsMHgwNiwweDNjLDB4MzQKLSwweDgzLDB4M2UsMHgzYywweDM0LDB4MDAsMHg3NSwweDAzLDB4ZTksMHhmMCwweDAwLDB4YzcsMHgwNiwweDNjLDB4MzQsMHgwMCwweDAwCi0sMHhlOSwweDJhLDB4MDAsMHhiYSwweDEwLDB4MDAsMHg4ZSwweDA2LDB4M2EsMHgzNCwweDgzLDB4M2UsMHgzYSwweDM0LDB4MDAsMHg3NQotLDB4MDMsMHhlOSwweGQ1LDB4ZmYsMHhjNywweDA2LDB4M2EsMHgzNCwweDAwLDB4MDAsMHhlOCwweDEwLDB4MDAsMHhlOSwweGM5LDB4ZmYKLSwweGJhLDB4MTAsMHgwMCwweDhlLDB4MDYsMHgzYSwweDM0LDB4YzcsMHgwNiwweDNhLDB4MzQsMHgwMCwweDAwLDB4MjYsMHhhMSwweDE0Ci0sMHgwMCwweDI2LDB4YTMsMHgwYywweDAwLDB4MjYsMHhhMSwweDE2LDB4MDAsMHgyNiwweGEzLDB4MGUsMHgwMCwweDI2LDB4YzYsMHgwNgotLDB4MGEsMHgwMCwweDAwLDB4YzEsMHhlYSwweDAyLDB4MjMsMHhkMSwweDc0LDB4MWMsMHhiYSwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYKLSwweDBlLDB4MDAsMHhlYSwweDA1LDB4MjYsMHgwYiwweDE2LDB4MGMsMHgwMCwweDI2LDB4ODksMHgxNiwweDBjLDB4MDAsMHhmZiwweDA2Ci0sMHg4NiwweDM0LDB4ZmYsMHgwNiwweGRjLDB4MzMsMHgyNiwweGExLDB4MGMsMHgwMCwweGE5LDB4MDAsMHgzNywweDc0LDB4MTYsMHgyNgotLDB4YzYsMHgwNiwweDBhLDB4MDAsMHgwMiwweGE5LDB4MDAsMHgzMCwweDc0LDB4MDQsMHhmZiwweDA2LDB4N2EsMHgzNCwweGZmLDB4MDYKLSwweGRhLDB4MzMsMHhlOSwweDQ5LDB4MDAsMHhjMCwweGVjLDB4MDcsMHg4MywweDE2LDB4OGEsMHgzNCwweDAwLDB4MjQsMHgwNywweDNjCi0sMHgwNywweDc1LDB4MDQsMHhmZiwweDA2LDB4OGMsMHgzNCwweGZmLDB4MDYsMHg3ZSwweDM0LDB4YTEsMHgzMCwweDM0LDB4OGMsMHhjMwotLDB4OGUsMHhjMCwweDhlLDB4ZGIsMHgyNiwweDgzLDB4MGUsMHgwOCwweDAwLDB4NDAsMHg4YywweGQ4LDB4MjYsMHg4NywweDA2LDB4MTYKLSwweDAwLDB4MjYsMHg4MywweDNlLDB4MTQsMHgwMCwweGZmLDB4NzQsMHgwYSwweDhlLDB4YzAsMHgyNiwweDhjLDB4MWUsMHgwMCwweDAwCi0sMHhlOSwweDA1LDB4MDAsMHgyNiwweDhjLDB4MWUsMHgxNCwweDAwLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhjMywweGMzLDB4OGMsMHhjMAotLDB4ODcsMHgwNiwweDkyLDB4MDEsMHgzZCwweGZmLDB4ZmYsMHg3NCwweDBkLDB4OGUsMHhkOCwweDhjLDB4MDYsMHgwMCwweDAwLDB4MzMKLSwweGMwLDB4OGUsMHhkOCwweGU5LDB4MDQsMHgwMCwweDhjLDB4MDYsMHg5MCwweDAxLDB4ZTgsMHgwMSwweDAwLDB4YzMsMHgwNiwweDgzCi0sMHgzZSwweDkwLDB4MDEsMHhmZiwweDc0LDB4MjksMHg4MywweDNlLDB4M2EsMHgzNCwweDAwLDB4NzUsMHgxMSwweGJhLDB4ODYsMHgwMAotLDB4ZTgsMHgxZSwweDAwLDB4OGMsMHgwNiwweDNhLDB4MzQsMHg4MywweDNlLDB4OTAsMHgwMSwweGZmLDB4NzQsMHgxMSwweDgzLDB4M2UKLSwweDNjLDB4MzQsMHgwMCwweDc1LDB4MGEsMHhiYSwweDg4LDB4MDAsMHhlOCwweDA2LDB4MDAsMHg4YywweDA2LDB4M2MsMHgzNCwweDA3Ci0sMHhjMywweGExLDB4OTAsMHgwMSwweDhlLDB4YzAsMHgyNiwweGExLDB4MDgsMHgwMCwweGVmLDB4MjYsMHhhMSwweDAwLDB4MDAsMHgyNgotLDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmLDB4YTMsMHg5MCwweDAxLDB4M2QsMHhmZiwweGZmLDB4NzUsMHgwMywweGEzLDB4OTIKLSwweDAxLDB4ODMsMHgzZSwweGVkLDB4MzQsMHgwMCwweDc0LDB4MGIsMHhiOCwweDEwLDB4MDAsMHhlNywweDg0LDB4YzcsMHgwNiwweGVkCi0sMHgzNCwweDAwLDB4MDAsMHhjMywweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNwotLDB4NWEsMHhmZiwweDA2LDB4YmMsMHgzMywweGU5LDB4MjUsMHhmYiwweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMKLSwweGMwLDB4OGUsMHhkOCwweGU3LDB4NWEsMHhmZiwweDA2LDB4YjAsMHgzMywweGU5LDB4MTEsMHhmYiwweDUwLDB4NTEsMHg1NiwweDU3Ci0sMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3LDB4NWEsMHhmZiwweDA2LDB4YjQsMHgzMywweDA2LDB4ZmYsMHgwNgotLDB4NzYsMHgzNCwweDgwLDB4M2UsMHhmZSwweDM0LDB4MDAsMHg3NCwweDA0LDB4MDcsMHhlOSwweGYwLDB4ZmEsMHhiOCwweDgwLDB4MDAKLSwweGU4LDB4ZDMsMHgwMiwweDA3LDB4ZTksMHhlNiwweGZhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhjNiwweDFkLDB4MDgsMHgxZCwweDkxLDB4MWUsMHg1ZCwweDFlLDB4NzMsMHgxZSwweDg5LDB4MWUsMHg5MSwweDFlLDB4YTgsMHgxZAotLDB4OTEsMHgxZSwweDkxLDB4MWUsMHhhZiwweDFlLDB4YWYsMHgxZSwweDE1LDB4MWQsMHgxNSwweDFkLDB4OTEsMHgxZSwweDk5LDB4MWYKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwCi0sMHgwMCwweDAxLDB4MDAsMHgxMCwweDAwLDB4MDEsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMAotLDB4MDcsMHhlOSwweDk5LDB4ZmEsMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcKLSwweDVhLDB4ZmYsMHgwNiwweGIyLDB4MzMsMHgwNiwweDY4LDB4ZjYsMHgxYywweGU1LDB4MDYsMHhhMywweGIyLDB4MzMsMHg4YiwweGYwCi0sMHg4MywweGU2LDB4MWUsMHgyZSwweGZmLDB4YTQsMHhhMCwweDFjLDB4ZTUsMHgwYywweGE5LDB4ODAsMHgwMCwweDc0LDB4MDYsMHhlOAotLDB4YTQsMHgwMSwweGU1LDB4MDYsMHhjMywweDUzLDB4ZTUsMHgwYywweDhiLDB4ZDgsMHhhOSwweDAxLDB4MDAsMHg3NCwweDE0LDB4ODMKLSwweDNlLDB4ZTAsMHgzYSwweDAwLDB4NzQsMHgwZCwweDhlLDB4MDYsMHgzOCwweDM0LDB4ZTgsMHhiZiwweDA2LDB4YzcsMHgwNiwweGUwCi0sMHgzYSwweDAwLDB4MDAsMHhlNSwweDAwLDB4MGQsMHgxOCwweDAwLDB4ZTcsMHgwMCwweGU1LDB4MDIsMHgwZCwweDExLDB4MDAsMHhlNwotLDB4MDIsMHg4YiwweGMzLDB4NWIsMHhhOSwweDAxLDB4MDAsMHg3NCwweDAxLDB4YzMsMHg4YiwweGQwLDB4YjgsMHgwMCwweDA4LDB4ZTcKLSwweDg0LDB4OGIsMHhjMiwweDhlLDB4MDYsMHgzOCwweDM0LDB4MjYsMHhhMywweDBjLDB4MDAsMHg4YiwweGQwLDB4YzEsMHhlMCwweDAzCi0sMHg4MywweDE2LDB4ODgsMHgzNCwweDAwLDB4ZmYsMHgwNiwweDdjLDB4MzQsMHgyNiwweDgzLDB4M2UsMHgwNiwweDAwLDB4MGEsMHg3NQotLDB4MjEsMHg4YiwweGMyLDB4MjUsMHg0MCwweDE4LDB4M2QsMHg0MCwweDAwLDB4NzQsMHgwYywweDNkLDB4MDAsMHgxMCwweDc1LDB4MTIKLSwweDI2LDB4ZmUsMHgwZSwweDBhLDB4MDAsMHg3NCwweDBiLDB4ZjcsMHgwNiwweGVmLDB4MzQsMHgyMCwweDAwLDB4NzUsMHgwMywweGU5Ci0sMHg1YSwweDA2LDB4OGMsMHhjMCwweDI2LDB4OGUsMHgwNiwweDAyLDB4MDAsMHgyNiwweDgzLDB4MGUsMHgwOCwweDAwLDB4MjAsMHgyNgotLDB4YTMsMHgxMiwweDAwLDB4MjYsMHhhMywweDEwLDB4MDAsMHhjMywweGZmLDB4MDYsMHhjNCwweDMzLDB4ZTUsMHgwYywweGE5LDB4MDEKLSwweDAwLDB4NzUsMHgwMSwweGMzLDB4YTksMHhmMCwweDA3LDB4NzQsMHgwMSwweGMzLDB4ZmYsMHgwNiwweGQ0LDB4MzMsMHhlNSwweDAwCi0sMHgwZCwweDE4LDB4MDAsMHhlNywweDAwLDB4YzMsMHhmZiwweDA2LDB4Y2EsMHgzMywweDgwLDB4M2UsMHhhMCwweDM2LDB4MDgsMHg3NQotLDB4MTQsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDA4LDB4NzQsMHgwNywweDI2LDB4ODEKLSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDgsMHhlNSwweDgyLDB4MjUsMHhmZCwweGZmLDB4ZTcsMHg4MiwweGU1LDB4MGMsMHg1MCwweGU1Ci0sMHg4MCwweDI1LDB4MDAsMHgwNywweGEzLDB4ZTQsMHgzYSwweGU1LDB4OGMsMHgyNSwweDAwLDB4ODAsMHhhMywweGUyLDB4M2EsMHg1OAotLDB4YTksMHgwMiwweDAwLDB4NzUsMHgyNSwweDgzLDB4M2UsMHhlMiwweDNhLDB4MDAsMHg3NSwweDFlLDB4ODMsMHgzZSwweGU0LDB4M2EKLSwweDAwLDB4NzUsMHgxNywweGU1LDB4MDgsMHgwZCwweDAwLDB4MDQsMHgyNSwweGZmLDB4MDQsMHhlNywweDA4LDB4ZTgsMHg2YSwweDAxCi0sMHhlNSwweDgyLDB4MGQsMHgwMiwweDAwLDB4ZTcsMHg4MiwweGU5LDB4MjEsMHgwMCwweGU4LDB4MWEsMHgwNiwweDgwLDB4M2UsMHhlOAotLDB4ZmYsMHgwMCwweDc0LDB4MGEsMHg4MCwweDNlLDB4ZTgsMHhmZiwweDA0LDB4NzQsMHgwMywweGU5LDB4MGQsMHgwMCwweGM2LDB4MDYKLSwweGU4LDB4ZmYsMHgwMSwweGJhLDB4MGMsMHgwMSwweGI4LDB4MDgsMHgwOCwweGVmLDB4ZWQsMHg4MCwweDNlLDB4OWYsMHgzNiwweDA2Ci0sMHg3NSwweDA1LDB4ODMsMHgwZSwweDk5LDB4MzYsMHg0MCwweGI4LDB4MDAsMHgwMSwweGU5LDB4MDksMHgwMSwweGZmLDB4MDYsMHhjYwotLDB4MzMsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZjcsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ZmYsMHgwNiwweGM2LDB4MzQKLSwweGU5LDB4MWUsMHgwMCwweGZmLDB4MDYsMHhjZSwweDMzLDB4ZmYsMHgwNiwweDk1LDB4MzcsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmCi0sMHhlZiwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhlOSwweDA4LDB4MDAsMHhmZiwweDA2LDB4ZDAsMHgzMywweGZmLDB4MDYsMHg3YQotLDB4MzQsMHhmZiwweDA2LDB4ZDIsMHgzMywweGQxLDB4ZTYsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDJlLDB4OGIsMHg4NCwweGMwLDB4MWMKLSwweDI2LDB4MDksMHgwNiwweDA4LDB4MDAsMHgyZSwweDhiLDB4ODQsMHhjMiwweDFjLDB4MDksMHgwNiwweDY2LDB4MzcsMHhjMywweGU1Ci0sMHgwYywweGE5LDB4ODAsMHgwMCwweDc0LDB4NTYsMHg1MCwweGU4LDB4ZjAsMHgwMCwweDU4LDB4YTksMHgwMCwweDAxLDB4NzUsMHgwNwotLDB4ZmYsMHgwNiwweGM2LDB4MzMsMHhlOSwweDA4LDB4MDAsMHhmZiwweDA2LDB4NzgsMHgzNCwweGZmLDB4MDYsMHhjOCwweDMzLDB4ZTUKLSwweDgyLDB4MjUsMHhmZCwweGZmLDB4ZTcsMHg4MiwweGU4LDB4NmUsMHgwNSwweGJhLDB4MTAsMHgwMSwweGVkLDB4ODAsMHgzZSwweGU4Ci0sMHhmZiwweDAwLDB4NzQsMHgwYSwweDgwLDB4M2UsMHhlOCwweGZmLDB4MDQsMHg3NCwweDAzLDB4ZTksMHgxZCwweDAwLDB4YzYsMHgwNgotLDB4ZTgsMHhmZiwweDAxLDB4YmEsMHgwYywweDAxLDB4YjgsMHgwOCwweDA4LDB4ZWYsMHhlZCwweGU5LDB4MGQsMHgwMCwweGM2LDB4MDYKLSwweGU4LDB4ZmYsMHgwMywweGJhLDB4MGMsMHgwMSwweGI4LDB4MDgsMHgwOCwweGVmLDB4ZWQsMHhjMywweGE5LDB4MDEsMHgwMCwweDc0Ci0sMHgxYywweGU4LDB4MmMsMHgwMCwweDgzLDB4M2UsMHhlMCwweDNhLDB4MDAsMHg3NCwweDBmLDB4MDYsMHg4ZSwweDA2LDB4MzgsMHgzNAotLDB4ZTgsMHhjOSwweDA0LDB4YzcsMHgwNiwweGUwLDB4M2EsMHgwMCwweDAwLDB4MDcsMHhlOSwweDVkLDB4MDAsMHg4YiwweGQwLDB4OGUKLSwweDA2LDB4MzgsMHgzNCwweDI2LDB4YTMsMHgwYywweDAwLDB4ZTgsMHgwNiwweDAwLDB4NjgsMHg2OSwweDFkLDB4ZTksMHg0YSwweDAwCi0sMHhhOSwweDAwLDB4MDQsMHg3NCwweDBhLDB4YjgsMHgwMCwweDA0LDB4ZmYsMHgwNiwweGQ4LDB4MzMsMHhlOSwweDE3LDB4MDAsMHhhOQotLDB4MDAsMHgwMSwweDc0LDB4MGEsMHhmZiwweDA2LDB4MzksMHgzNywweGI4LDB4MDAsMHgwMSwweGU5LDB4MDgsMHgwMCwweGE5LDB4MTAKLSwweDAwLDB4YjgsMHgxMCwweDAwLDB4NzQsMHgxZCwweDA5LDB4MDYsMHg2NiwweDM3LDB4OGMsMHhjMCwweDhlLDB4MDYsMHgzMCwweDM0Ci0sMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwMSwweDc0LDB4MDcsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwMQotLDB4OGUsMHhjMCwweGMzLDB4ZmYsMHgwNiwweGMyLDB4MzMsMHhlOSwweGY4LDB4ZmYsMHhlNSwweDAwLDB4MGQsMHgxOCwweDAwLDB4ZTcKLSwweDAwLDB4ZTUsMHgwMiwweDBkLDB4MTEsMHgwMCwweGU3LDB4MDIsMHhjMywweDU4LDB4ZTksMHg0MywweGZkLDB4ZTUsMHgwOCwweDBkCi0sMHgwMCwweDA0LDB4MjUsMHhmZiwweDA0LDB4ZTcsMHgwOCwweGU5LDB4ZTAsMHhmZiwweGU1LDB4MGUsMHhhOSwweDAwLDB4MDgsMHg3NQotLDB4MDEsMHhjMywweGU5LDB4ZjUsMHhmZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNywweDVhLDB4ZmYsMHgwNiwweGI4Ci0sMHgzMywweGU1LDB4NDgsMHgwNiwweDUzLDB4NTcsMHhmZiwweDE2LDB4NGUsMHgzNywweDVmLDB4NWIsMHg4MywweDNlLDB4ODAsMHgwMQotLDB4ZmYsMHg3NCwweDU4LDB4OGUsMHgwNiwweDgwLDB4MDEsMHgyNiwweGZmLDB4MGUsMHgwOCwweDAwLDB4NzUsMHg0ZCwweDI2LDB4YTEKLSwweDAwLDB4MDAsMHhhMywweDgwLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDhjLDB4YzAsMHgyNiwweDhlCi0sMHgwNiwweDAyLDB4MDAsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4ODAsMHgwMCwweDhiLDB4ZDAsMHgyNiwweDg3LDB4MDYsMHgxYQotLDB4MDAsMHgyNiwweDgzLDB4M2UsMHgxOCwweDAwLDB4ZmYsMHg3NCwweDBhLDB4OGUsMHhjMCwweDI2LDB4ODksMHgxNiwweDAwLDB4MDAKLSwweGU5LDB4MDUsMHgwMCwweDI2LDB4ODksMHgxNiwweDE4LDB4MDAsMHg4MywweDNlLDB4ODAsMHgwMSwweGZmLDB4NzQsMHgwYywweDhlCi0sMHgwNiwweDgwLDB4MDEsMHgyNiwweDgzLDB4M2UsMHgwOCwweDAwLDB4MDAsMHg3NCwweGIzLDB4MDcsMHhlOSwweDNlLDB4ZjcsMHhlNQotLDB4NGMsMHg5MCwweGU1LDB4MDIsMHhhOSwweDAwLDB4MjAsMHg3NCwweDBkLDB4MjUsMHhmZiwweGRmLDB4MGQsMHgwMSwweDAwLDB4ZTcKLSwweDAyLDB4MGQsMHgwMCwweDIwLDB4ZTcsMHgwMiwweGU1LDB4MGEsMHg4YiwweGQ4LDB4YTMsMHhmNCwweDMzLDB4MjUsMHhjMywweDU3Ci0sMHgwZCwweDAwLDB4MTAsMHhlNywweDBhLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDgwLDB4NzQsMHgzNywweGY3LDB4YzMsMHgwMAotLDB4ODAsMHg3NCwweDA2LDB4ZjcsMHhjMywweDAwLDB4MDgsMHg3NCwweDVkLDB4ODEsMHgyNiwweGMyLDB4MzQsMHg3ZiwweGZmLDB4YzcKLSwweDA2LDB4MzUsMHgzNywweDA1LDB4MDAsMHhiOCwweDgwLDB4MDMsMHhjZCwweDM5LDB4ODEsMHgyNiwweDliLDB4MzYsMHhmZiwweDdmCi0sMHhjNywweDA2LDB4MGYsMHgzNywweDA0LDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDQwLDB4MDAsMHg3NSwweDA2LDB4YzcsMHgwNgotLDB4MGYsMHgzNywweDAzLDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NCwweDJhLDB4ZjcsMHhjMywweDAwLDB4MDgKLSwweDc0LDB4MjQsMHg4MCwweDNlLDB4OWQsMHgzNiwweDA2LDB4N2MsMHgxZCwweGZmLDB4MDYsMHg5NCwweDM0LDB4ODMsMHgwZSwweDY2Ci0sMHgzNywweDIwLDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwMSwweDc0LDB4MDcsMHgyNgotLDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDAxLDB4ZjcsMHhjMywweDAwLDB4MjAsMHg3NSwweDNiLDB4ZjcsMHgwNiwweDlhLDB4MzcKLSwweDgwLDB4MDAsMHg3NCwweDBiLDB4ZmYsMHgwNiwweDg5LDB4MzcsMHgzMywweGMwLDB4ZTcsMHgwZSwweGU5LDB4MDQsMHgwMCwweGZmCi0sMHgwNiwweDNiLDB4MzcsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NCwweDFjLDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZgotLDB4NzUsMHgxNSwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDgsMHg3NCwweDA3LDB4MjYKLSwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwOCwweGMzLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMiwweDIzLDB4MDIsMHgyMywweDAyLDB4MjMsMHgwMiwweDIzLDB4MDMsMHgyMywweGRkLDB4MjIsMHgwMiwweDIzLDB4ZmQsMHgyMQotLDB4MDIsMHgyMywweGE0LDB4MjQsMHhmMywweDI0LDB4MDIsMHgyMywweDhkLDB4MjIsMHg3YSwweDIzLDB4MDIsMHgyMywweDk3LDB4MjQKLSwweDFiLDB4MjQsMHg3NSwweDI0LDB4MDIsMHgyMywweDAyLDB4MjMsMHg4ZSwweDI1LDB4ZmIsMHg4ZSwweDA2LDB4N2UsMHgwMSwweGZiCi0sMHgyNiwweDgzLDB4M2UsMHgwMCwweDAwLDB4ZmYsMHg3NCwweGYyLDB4MjYsMHg4ZSwweDA2LDB4MDAsMHgwMCwweGZhLDB4MjYsMHg4YgotLDB4MWUsMHgwOCwweDAwLDB4MjYsMHgyMywweDFlLDB4MGEsMHgwMCwweDc0LDB4ZTUsMHg4YywweGMwLDB4OGUsMHhkMCwweDI2LDB4OGIKLSwweDI2LDB4MDIsMHgwMCwweDhjLDB4MTYsMHhmMiwweDMzLDB4MjIsMHhmZiwweDc1LDB4NmEsMHgyNiwweGExLDB4MWMsMHgwMCwweDhhCi0sMHhlMywweDhhLDB4ZGMsMHgyMiwweGQ4LDB4NzUsMHgwZCwweGQwLDB4ZTgsMHgyNCwweGY4LDB4MGEsMHhjMCwweDc1LDB4ZjIsMHhiMAotLDB4ODAsMHhlOSwweGVkLDB4ZmYsMHhkMCwweGU4LDB4MjQsMHhmOCwweDBhLDB4YzAsMHg3NSwweDAyLDB4YjAsMHg4MCwweDMyLDB4ZTQKLSwweDI2LDB4YTMsMHgxYywweDAwLDB4ZjcsMHhjMywweDA4LDB4MDAsMHg3NSwweDQ3LDB4MmUsMHg4YSwweDlmLDB4YzUsMHgyNSwweDJlCi0sMHg4YiwweGJmLDB4YzUsMHgyNiwweDgwLDB4YzMsMHgxMCwweDI2LDB4OGUsMHgxZCwweDI2LDB4OGMsMHgxZSwweDA2LDB4MDAsMHg4YgotLDB4MTYsMHgwMCwweDAwLDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmLDB4MjYsMHg4OSwweDE1LDB4ODMsMHhmYSwweGZmLDB4NzUKLSwweDBhLDB4MmUsMHg4YiwweDk3LDB4Y2QsMHgyNiwweDI2LDB4MjEsMHgxNiwweDA4LDB4MDAsMHgzMywweGMwLDB4OGUsMHhkOCwweDI2Ci0sMHg4OSwweDFlLDB4MDQsMHgwMCwweGMzLDB4OGEsMHhkZiwweGI3LDB4MDAsMHgyZSwweDhhLDB4OWYsMHhjNSwweDI1LDB4ZTksMHhlMAotLDB4ZmYsMHgyNiwweDgzLDB4MjYsMHgwOCwweDAwLDB4ZjcsMHg4MywweGMzLDB4MTAsMHhlOSwweGRlLDB4ZmYsMHg2MCwweDA2LDB4MWUKLSwweDY4LDB4ODcsMHgyNSwweDZhLDB4MDAsMHgxZiwweDhlLDB4MDYsMHhmMiwweDMzLDB4OGIsMHgwZSwweDM0LDB4MzQsMHgzOSwweDBlCi0sMHhmMiwweDMzLDB4NzQsMHgwZSwweDI2LDB4ODEsMHgwZSwweDBhLDB4MDAsMHgwMCwweDAyLDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMAotLDB4MDAsMHgwMiwweDI2LDB4ODksMHgyNiwweDAyLDB4MDAsMHhhMywweGYyLDB4MzMsMHg4ZSwweGQwLDB4OGQsMHgyNiwweDgwLDB4MDAKLSwweDM2LDB4ODksMHgyNiwweDAyLDB4MDAsMHgzNiwweDg5LDB4MWUsMHgyMCwweDAwLDB4MzYsMHhjNywweDA2LDB4MDgsMHgwMCwweDAwCi0sMHgwMCwweGI5LDB4MDQsMHgwMCwweGJlLDB4MDAsMHgwMCwweDJlLDB4OGIsMHhiYywweGM1LDB4MjYsMHgzNiwweGM3LDB4MDUsMHhmZgotLDB4ZmYsMHgzNiwweGM3LDB4NDUsMHgwMiwweGZmLDB4ZmYsMHg4MywweGM2LDB4MDIsMHhlMiwweGViLDB4OGUsMHgwNiwweDdlLDB4MDEKLSwweDM2LDB4OGIsMHgwZSwweDIyLDB4MDAsMHg4YywweGMwLDB4MjYsMHg4MywweDNlLDB4MDAsMHgwMCwweGZmLDB4MjYsMHg4ZSwweDA2Ci0sMHgwMCwweDAwLDB4NzQsMHgwNywweDI2LDB4M2IsMHgwZSwweDIyLDB4MDAsMHg3ZCwweGVhLDB4MzYsMHg4YywweDA2LDB4MDAsMHgwMAotLDB4OGUsMHhjMCwweDI2LDB4OGMsMHgxNiwweDAwLDB4MDAsMHhmYiwweDM2LDB4ZmYsMHgyZSwweDFlLDB4MDAsMHgwNiwweDFlLDB4NjgKLSwweDhiLDB4MjUsMHg2YSwweDAwLDB4MWYsMHgyNiwweDA5LDB4MzYsMHgwOCwweDAwLDB4ZjcsMHhjNiwweDAwLDB4ZmYsMHg3NCwweDAxCi0sMHhjMywweDU2LDB4NTIsMHgyZSwweDhiLDB4YjQsMHhjNSwweDI1LDB4ODEsMHhlNiwweGZmLDB4MDAsMHgyZSwweDhiLDB4YjQsMHhjNQotLDB4MjYsMHg4YywweGMyLDB4OGUsMHhjMCwweDI2LDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmLDB4OGUsMHhjMiwweDI2LDB4ODMKLSwweDNjLDB4ZmYsMHg3NCwweDBmLDB4OGIsMHhkMCwweDI2LDB4ODcsMHg1NCwweDAyLDB4OGUsMHhjMiwweDI2LDB4YTMsMHgwMCwweDAwCi0sMHhlOSwweDA3LDB4MDAsMHgyNiwweDg5LDB4NDQsMHgwMiwweDI2LDB4ODksMHgwNCwweDVhLDB4NWUsMHhjMywweDA2LDB4MWUsMHg2OAotLDB4OGIsMHgyNSwweDZhLDB4MDAsMHgxZiwweDhlLDB4MDYsMHhmMiwweDMzLDB4MjYsMHhhMywweDBhLDB4MDAsMHgyNiwweDg5LDB4MjYKLSwweDAyLDB4MDAsMHhhMSwweDM0LDB4MzQsMHg4ZSwweGQwLDB4OGQsMHgyNiwweDgwLDB4MDAsMHg4YywweDE2LDB4ZjIsMHgzMywweGU5Ci0sMHg0ZCwweGZlLDB4Y2YsMHg1MCwweDFlLDB4NTIsMHg1MywweDMzLDB4YzAsMHg4ZSwweGQ4LDB4MjYsMHg4MywweDNlLDB4MDQsMHgwMAotLDB4ZmYsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4MDAsMHgwMCwweDc0LDB4MDMsMHhlOSwweDFhLDB4MDAsMHg4MywweDNlLDB4ZTYKLSwweDNhLDB4MDIsMHg3NiwweDEzLDB4ZmYsMHgwNiwweGQ2LDB4MzMsMHg4YywweGMwLDB4OGUsMHgwNiwweDMyLDB4MzQsMHhiZSwweDQwCi0sMHgwMCwweDY4LDB4M2EsMHgyMywweGU5LDB4NWUsMHhmZiwweGU4LDB4ODQsMHhmOCwweDViLDB4NWEsMHgxZiwweDU4LDB4Y2YsMHhlOAotLDB4ZTEsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE4LDB4MDAsMHgxMCwweDI2LDB4OGEsMHgxZSwweDI5LDB4MDAsMHg4OCwweDFlLDB4MWIKLSwweDM3LDB4MjYsMHhjNywweDA2LDB4MGMsMHgwMCwweGZmLDB4N2YsMHgyNiwweGExLDB4MGUsMHgwMCwweGU3LDB4OWMsMHgyNiwweGExCi0sMHgwOCwweDAwLDB4ZTcsMHg5YSwweGU1LDB4MDAsMHg4MCwweGZiLDB4MDgsMHg3NCwweDA5LDB4MGQsMHgxOCwweGFjLDB4ZTcsMHgwMAotLDB4MDcsMHgxZiwweDU4LDB4Y2YsMHgwZCwweDE4LDB4MDAsMHhlOSwweGY0LDB4ZmYsMHg1MCwweDFlLDB4MDYsMHgzMywweGMwLDB4OGUKLSwweGQ4LDB4ODMsMHgzZSwweGExLDB4MzYsMHgwMCwweDc1LDB4YjcsMHgyNiwweDhiLDB4MzYsMHgwNiwweDAwLDB4MmUsMHhmZiwweDk0Ci0sMHhkYywweDIzLDB4MDcsMHgxZiwweDU4LDB4Y2YsMHhlOCwweDhhLDB4MDAsMHhlNSwweDAwLDB4MGQsMHgxOCwweDAwLDB4ZTcsMHgwMAotLDB4ZTgsMHg0OSwweDAwLDB4YzMsMHg1MywweGY3LDB4MDYsMHhlZiwweDM0LDB4MjAsMHgwMCwweDc1LDB4MmQsMHhlNSwweDhjLDB4MjUKLSwweDAwLDB4NzAsMHg4YiwweGQ4LDB4ZTUsMHg4YywweDI1LDB4MDAsMHg3MCwweDNiLDB4YzMsMHg3NCwweDA1LDB4OGIsMHhkOCwweGU5Ci0sMHhmMiwweGZmLDB4M2QsMHgwMCwweDMwLDB4NzUsMHgxMCwweGU1LDB4MDIsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyLDB4YzcsMHgwNgotLDB4ZTAsMHgzYSwweGZmLDB4ZmYsMHhlOSwweDAzLDB4MDAsMHhlOCwweDEyLDB4MDAsMHg1YiwweGMzLDB4YTMsMHgyMywweDk2LDB4MjMKLSwweGE0LDB4MjMsMHhhNCwweDIzLDB4OTYsMHgyMywweGE0LDB4MjMsMHg5NiwweDIzLDB4OTYsMHgyMywweDI2LDB4YTAsMHgyOSwweDAwCi0sMHhhMiwweDFiLDB4MzcsMHgyNiwweGM3LDB4MDYsMHgwYywweDAwLDB4ZmYsMHg3ZiwweDI2LDB4YTEsMHgwZSwweDAwLDB4ZTcsMHg5YwotLDB4MjYsMHhhMSwweDA4LDB4MDAsMHhlNywweDlhLDB4ZTUsMHgwMCwweDI1LDB4ZmYsMHg1MywweDI2LDB4OGIsMHgzNiwweDA2LDB4MDAKLSwweDgzLDB4ZTYsMHgwZSwweDJlLDB4MGIsMHg4NCwweGFkLDB4MjUsMHhlNywweDAwLDB4YzMsMHgwNiwweDFlLDB4NjgsMHg4YiwweDI1Ci0sMHg2YSwweDAwLDB4MWYsMHg4MywweDBlLDB4ZWYsMHgzNCwweDIwLDB4ODMsMHgwZSwweDliLDB4MzYsMHgwOCwweGU1LDB4MDAsMHgyNQotLDB4ZWYsMHhmZiwweDBkLDB4MDgsMHgwMCwweGU3LDB4MDAsMHhlNSwweDAwLDB4YTksMHgxMCwweDAwLDB4NzUsMHgwMSwweGMzLDB4ZTUKLSwweDAwLDB4YTksMHgxMCwweDAwLDB4NzUsMHhmOSwweGMzLDB4NTAsMHg1MywweDUxLDB4NTYsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlCi0sMHhkOCwweGI4LDB4MDUsMHgwMCwweGU3LDB4ODQsMHhlNSwweDA4LDB4MGQsMHgwMCwweDA0LDB4MjUsMHhmZiwweDA0LDB4ZTcsMHgwOAotLDB4ZTUsMHgwMCwweDBkLDB4MTgsMHgwMCwweGU3LDB4MDAsMHhlNSwweDAyLDB4MGQsMHgxMSwweDAwLDB4ZTcsMHgwMiwweDFmLDB4MDcKLSwweDVlLDB4NTksMHg1YiwweDU4LDB4YzMsMHg1MCwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhjNywweDA2LDB4ZWYsMHgzNCwweDAwCi0sMHgwMCwweDgzLDB4MjYsMHg5YiwweDM2LDB4ZjcsMHhlNSwweDAwLDB4MGQsMHgxOCwweDAwLDB4ZTcsMHgwMCwweGU1LDB4MDIsMHgwZAotLDB4MTEsMHgwMCwweGU3LDB4MDIsMHgxZiwweDU4LDB4Y2YsMHg2MCwweDA2LDB4MWUsMHg2OCwweDg3LDB4MjUsMHg2YSwweDAwLDB4MWYKLSwweGU4LDB4MTYsMHhmNSwweGMzLDB4MDYsMHgxZSwweDY4LDB4OGIsMHgyNSwweDZhLDB4MDAsMHgxZiwweDhlLDB4YzAsMHgyNiwweDgzCi0sMHgzZSwweDBhLDB4MDAsMHgwMCwweDc0LDB4MDMsMHhlOCwweDQzLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4ZmYsMHhmZgotLDB4MjYsMHg4YiwweDE2LDB4MDYsMHgwMCwweDhlLDB4MWUsMHg4ZSwweDAxLDB4OGMsMHhkOCwweDhiLDB4Y2EsMHg4MywweDNlLDB4MDAKLSwweDAwLDB4ZmYsMHg4ZSwweDFlLDB4MDAsMHgwMCwweDc0LDB4MGEsMHgyYiwweDE2LDB4MDgsMHgwMCwweDczLDB4ZWIsMHgyOSwweDBlCi0sMHgwOCwweDAwLDB4MjYsMHg4OSwweDBlLDB4MDgsMHgwMCwweDI2LDB4OGMsMHgxZSwweDAwLDB4MDAsMHg4ZSwweGQ4LDB4OGMsMHgwNgotLDB4MDAsMHgwMCwweGMzLDB4NjAsMHgwNiwweDFlLDB4NjgsMHg4NywweDI1LDB4NmEsMHgwMCwweDFmLDB4OGUsMHhjMCwweDhiLDB4YzgKLSwweDhlLDB4MWUsMHg4ZSwweDAxLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDAsMHg4YywweGQ4LDB4ODMsMHgzZSwweDAwCi0sMHgwMCwweGZmLDB4NzQsMHgyNSwweDNiLDB4MGUsMHgwMCwweDAwLDB4OGUsMHgxZSwweDAwLDB4MDAsMHg3NSwweGVkLDB4OGUsMHhkOAotLDB4MjYsMHhhMSwweDAwLDB4MDAsMHhhMywweDAwLDB4MDAsMHgzZCwweGZmLDB4ZmYsMHg3NCwweDU2LDB4OGUsMHhkOCwweDI2LDB4YTEKLSwweDA4LDB4MDAsMHgwMSwweDA2LDB4MDgsMHgwMCwweGU5LDB4NDksMHgwMCwweDI2LDB4OGUsMHgxZSwweDAyLDB4MDAsMHhiZSwweDE4Ci0sMHgwMCwweDgzLDB4M2MsMHhmZiwweDc0LDB4M2MsMHgzOSwweDBjLDB4NzQsMHgxOSwweDhlLDB4MWMsMHhiZSwweDAwLDB4MDAsMHg4MwotLDB4M2UsMHgwMCwweDAwLDB4ZmYsMHg3NCwweDJjLDB4MzksMHgwZSwweDAwLDB4MDAsMHg3NCwweDA3LDB4OGUsMHgxZSwweDAwLDB4MDAKLSwweGU5LDB4ZWMsMHhmZiwweDI2LDB4YTEsMHgwMCwweDAwLDB4ODksMHgwNCwweDMzLDB4YzksMHg4ZSwweGQ5LDB4M2QsMHhmZiwweGZmCi0sMHg3NSwweDEwLDB4ODMsMHhmZSwweDE4LDB4NzUsMHgwYiwweDI2LDB4OGUsMHgxZSwweDAyLDB4MDAsMHg4MSwweDI2LDB4MDgsMHgwMAotLDB4N2YsMHhmZiwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4YzMsMHgxZiwweDA3LDB4NjEsMHhjZiwweDFmLDB4MDcsMHhjZiwweDYwLDB4MDYKLSwweDFlLDB4NjgsMHg4NywweDI1LDB4NmEsMHgwMCwweDFmLDB4ZTUsMHgwNiwweDI1LDB4MWUsMHgwMCwweDNkLDB4MWUsMHgwMCwweDc1Ci0sMHhmNiwweGI5LDB4MDgsMHgwMCwweGU1LDB4NTgsMHhlNywweDVhLDB4MjMsMHhjMCwweGUwLDB4ZjgsMHhjMywweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YWMsMHgwMCwweDAwLDB4MDAsMHhhOCwweDAwLDB4OGMsMHgwMiwweDA0LDB4MDAKLSwweDAwLDB4MDgsMHgxMCwweDIwLDB4MDAsMHhmZiwweDBlLDB4MGMsMHgwYywweDBhLDB4MGEsMHgwYSwweDBhLDB4MDgsMHgwOCwweDA4Ci0sMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNgotLDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQKLSwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0Ci0sMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMgotLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIKLSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyCi0sMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMgotLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDE0LDB4MDAsMHgxMCwweDAwLDB4MGMsMHgwMCwweGZmLDB4N2YsMHhmZgotLDB4YmYsMHhmZiwweGRmLDB4ZmYsMHhlZiwweGZmLDB4ZjcsMHhmZiwweGZiLDB4ZmYsMHhmZCwweGZmLDB4ZmUsMHg3ZiwweGZmLDB4YmYKLSwweGZmLDB4ZGYsMHhmZiwweGVmLDB4ZmYsMHhmNywweGZmLDB4ZmIsMHhmZiwweGZkLDB4ZmYsMHhmZSwweGZmLDB4MDAsMHgwMCwweDAwCi0sMHg4MCwweDNlLDB4ZTIsMHgzNCwweDAxLDB4NzYsMHgwMywweGU5LDB4YTUsMHgwMCwweGI4LDB4MDAsMHgwMCwweGU3LDB4NGUsMHhiOQotLDB4MjgsMHgwMCwweGUyLDB4ZmUsMHhjNiwweDA2LDB4NDUsMHgzNywweDAyLDB4YmYsMHgzZiwweDI4LDB4MmUsMHg4YiwweDQ1LDB4MDgKLSwweGU3LDB4NGUsMHhiOSwweDI4LDB4MDAsMHhlMiwweGZlLDB4MmUsMHg4YiwweDFkLDB4YzcsMHgwNiwweGIzLDB4MzYsMHg0MCwweDExCi0sMHhjNywweDA2LDB4YjEsMHgzNiwweDI3LDB4MDAsMHhjNywweDA2LDB4NDYsMHgzNywweDAyLDB4MDAsMHhjNywweDA2LDB4NDgsMHgzNwotLDB4NjQsMHgwMCwweGY3LDB4MDYsMHhiNSwweDM2LDB4MDIsMHgwMCwweDc1LDB4MWMsMHgyZSwweDBiLDB4NWQsMHgwMiwweDgxLDB4MjYKLSwweGIzLDB4MzYsMHhmZiwweGZlLDB4YzcsMHgwNiwweGIxLDB4MzYsMHg5YywweDAwLDB4YzcsMHgwNiwweDQ2LDB4MzcsMHgwOCwweDAwCi0sMHhjNywweDA2LDB4NDgsMHgzNywweDkwLDB4MDEsMHg4OSwweDFlLDB4YjcsMHgzNiwweDg5LDB4MWUsMHhmZSwweDMzLDB4YmUsMHgyMAotLDB4MDAsMHg4YiwweGMzLDB4ZTcsMHg0ZSwweGI5LDB4MjgsMHgwMCwweGUyLDB4ZmUsMHgyZSwweDhiLDB4NDUsMHgwNCwweGU3LDB4NGUKLSwweGI5LDB4MjgsMHgwMCwweGUyLDB4ZmUsMHhlNSwweDRlLDB4OGIsMHhjYiwweDJlLDB4MjMsMHg0NSwweDA2LDB4MmUsMHgyMywweDRkCi0sMHgwNiwweDNhLDB4YzEsMHg3NCwweDM2LDB4NGUsMHg3NSwweGQ5LDB4ODAsMHgzZSwweDQ1LDB4MzcsMHgwMCwweDc0LDB4MGIsMHhjNgotLDB4MDYsMHg0NSwweDM3LDB4MDAsMHhiZiwweDJmLDB4MjgsMHhlOSwweDcyLDB4ZmYsMHhjNiwweDA2LDB4NDUsMHgzNywweDAxLDB4ZjcKLSwweDA2LDB4YjUsMHgzNiwweDAyLDB4MDAsMHg3NCwweDE0LDB4ZTUsMHhjZSwweDI1LDB4ZmQsMHhmZiwweGU3LDB4Y2UsMHhlOCwweDQzCi0sMHgwMCwweGU1LDB4Y2UsMHgwZCwweDAyLDB4MDAsMHhlNywweGNlLDB4ZTgsMHgzOSwweDAwLDB4ODAsMHgzZSwweGUyLDB4MzQsMHgwMQotLDB4NzYsMHgwMSwweGMzLDB4YjgsMHhlYSwweDA1LDB4ZTcsMHg4YywweGZhLDB4ZTgsMHgxMiwweGY0LDB4ZmIsMHg4ZCwweDA2LDB4ZDAKLSwweDM5LDB4OGIsMHhkOCwweGMxLDB4ZTgsMHgwNCwweGEzLDB4MzgsMHgzNCwweDhlLDB4YzAsMHhhMSwweDMwLDB4MzQsMHgyNiwweGEzCi0sMHgwMiwweDAwLDB4MjYsMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHg4MywweGMzLDB4MTgsMHhkMSwweGViLDB4MjYsMHg4OQotLDB4MWUsMHgwOCwweDAwLDB4YzMsMHhlNSwweDAyLDB4MGQsMHgwMCwweDQwLDB4ZTcsMHgwMiwweGU1LDB4MDAsMHgwZCwweDA0LDB4MDAKLSwweGU3LDB4MDAsMHhiOCwweDAwLDB4MDAsMHhlNywweDBhLDB4ZTUsMHgwYSwweGE5LDB4MDAsMHg4MCwweDc1LDB4MTQsMHhlNSwweDA4Ci0sMHgwZCwweDAwLDB4MTAsMHhlNywweDA4LDB4ZTUsMHgwYSwweDBkLDB4MDAsMHgwOCwweGI5LDB4MDUsMHgwMCwweGU3LDB4MGEsMHhlMgotLDB4ZmMsMHhjMywweGU1LDB4MDgsMHgwZCwweDAwLDB4MTAsMHhiOSwweDA1LDB4MDAsMHhlNywweDA4LDB4ZTIsMHhmYywweGMzLDB4MDQKLSwweDBjLDB4MjAsMHgwMCwweDAxLDB4MGMsMHg3ZSwweGZmLDB4MDAsMHgwYywweDAyLDB4MDAsMHgxMCwweDAwLDB4NDAsMHgwMCwweDBjCi0sMHhjNiwweDAxLDB4MDAsMHgwMCwweGMwLDB4ZjcsMHhmZiwweDAwLDB4YzAsMHgwMiwweDAwLDB4MTAsMHgwMCwweDQwLDB4MDAsMHgwMAotLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHg4ZCwweDNlLDB4NzIsMHg0OSwweDhkLDB4MzYsMHhiMCwweDM3LDB4YjksMHgxNCwweDAwLDB4OGIKLSwweDFlLDB4MzAsMHgzNCwweDg5LDB4NWMsMHgwMiwweDJlLDB4OGIsMHg0NSwweDAyLDB4ODksMHg0NCwweDA2LDB4MmUsMHg4YiwweDA1Ci0sMHg4OSwweDQ0LDB4MDQsMHg4MywweGM3LDB4MDQsMHg4MywweGM2LDB4MTAsMHhlMiwweGU4LDB4YzYsMHgwNiwweDllLDB4MzYsMHgwZQotLDB4ZTgsMHhmZCwweDI2LDB4NjgsMHg4MywweDI4LDB4YTEsMHhhYSwweDAyLDB4Y2QsMHgzNSwweDgzLDB4M2UsMHhhMSwweDM2LDB4MDAKLSwweDc0LDB4MDMsMHhlOSwweDNiLDB4MjcsMHgzMywweGZmLDB4OGUsMHgwNiwweGE2LDB4MDIsMHg4YiwweDM2LDB4YTQsMHgwMiwweDJlCi0sMHhmZiwweGE0LDB4MmUsMHgzMCwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQsMHhjNywweDA2LDB4MzcsMHgzNywweDAxLDB4MDAsMHhjNgotLDB4MDYsMHhjYSwweDM0LDB4MDEsMHhlOSwweDdkLDB4MTksMHg4MCwweDNlLDB4YTAsMHgzNiwweDA4LDB4NzQsMHhlNiwweDgwLDB4MjYKLSwweDllLDB4MzYsMHhmZiwweDc1LDB4MWEsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NCwweDEyLDB4ZjcsMHgwNiwweDliCi0sMHgzNiwweDAzLDB4MDAsMHg3NSwweDBhLDB4ODMsMHgwZSwweDY2LDB4MzcsMHgxMCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDgsMHhlOQotLDB4ZmIsMHgwMSwweDgwLDB4M2UsMHg5ZSwweDM2LDB4MDIsMHg3NSwweGNlLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGU5LDB4ZWMKLSwweDAxLDB4YzMsMHhlOSwweGU4LDB4MDEsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwMCwweDI2LDB4ZmYsMHgyNiwweDA0Ci0sMHgwMCwweGExLDB4ZDEsMHgzNiwweDI2LDB4MzksMHgwNiwweDFhLDB4MDAsMHg3NSwweDIyLDB4YTEsMHhkMywweDM2LDB4MjYsMHgzOQotLDB4MDYsMHgxYywweDAwLDB4NzUsMHgxOCwweGExLDB4ZDUsMHgzNiwweDI2LDB4MzksMHgwNiwweDFlLDB4MDAsMHg3NSwweDBlLDB4MjYKLSwweGY3LDB4MDYsMHgwYywweDAwLDB4NDAsMHgwMCwweDc0LDB4MDUsMHg4MywweDBlLDB4NjYsMHgzNywweDQwLDB4ODEsMHgwZSwweGFmCi0sMHgzNiwweDAwLDB4MTAsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwMiwweDc1LDB4MDYsMHhjZAotLDB4MzQsMHhlOSwweGEyLDB4MWEsMHhjMywweGY3LDB4MDYsMHg5YiwweDM2LDB4MTAsMHgwMCwweDc1LDB4NTQsMHgyNiwweGY2LDB4MDYKLSwweDBhLDB4MDAsMHhmZiwweDc1LDB4NGMsMHgyNiwweGEwLDB4MTksMHgwMCwweDI0LDB4YzAsMHgzYywweDQwLDB4NzUsMHgxMSwweDgwCi0sMHgzZSwweDk1LDB4MzYsMHgwMCwweDc0LDB4M2IsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZmYsMHhmZiwweGU5LDB4MzEsMHgwMAotLDB4ZTgsMHhmMSwweDA0LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMywweDAwLDB4NzQsMHgyZiwweDhiLDB4ZDgsMHhiOCwweDdkLDB4MDMKLSwweGNkLDB4M2EsMHg4YiwweGMzLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDIsMHgwMCwweDc1Ci0sMHgwNSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDQsMHg4MSwweDBlLDB4OWIsMHgzNiwweDgwLDB4MDAsMHg4MywweDI2LDB4OWIsMHgzNgotLDB4ZmMsMHhlOSwweDIzLDB4MDEsMHhlOCwweDg3LDB4MWQsMHhlOSwweDMzLDB4MDEsMHg1MCwweDI2LDB4YTEsMHgwYywweDAwLDB4MjUKLSwweDA3LDB4MDAsMHgzZCwweDA3LDB4MDAsMHg3NSwweDAzLDB4ZTksMHg4NCwweDAwLDB4M2QsMHgwNSwweDAwLDB4NzUsMHgwMywweGU5Ci0sMHg3YywweDAwLDB4ODMsMHgzZSwweGU4LDB4M2EsMHgwNCwweDc0LDB4NzUsMHg4MywweDNlLDB4ZTgsMHgzYSwweDAyLDB4NzQsMHg2ZQotLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgxOCwweDgwLDB4NzUsMHgwMywweGU5LDB4NmEsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MDAKLSwweDgwLDB4NzQsMHgzNSwweDI2LDB4ODAsMHgzZSwweDI5LDB4MDAsMHgwMiwweDc1LDB4MmQsMHg1MSwweDU2LDB4NTcsMHg4ZCwweDM2Ci0sMHgzZSwweDM0LDB4OGQsMHgzZSwweDIwLDB4MDAsMHhiOSwweDA2LDB4MDAsMHhmMywweGE2LDB4NWYsMHg1ZSwweDU5LDB4NzQsMHg0NQotLDB4MjYsMHhhMSwweDIwLDB4MDAsMHhhMywweDNlLDB4MzQsMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4NDAsMHgzNCwweDI2LDB4YTEKLSwweDI0LDB4MDAsMHhhMywweDQyLDB4MzQsMHhlOSwweDI2LDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDA4LDB4MDAsMHg3NCwweDBiCi0sMHgyNiwweDgwLDB4M2UsMHgxOSwweDAwLDB4MDAsMHg3NCwweDAzLDB4ZTksMHgxMywweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgxMAotLDB4MDAsMHg3NCwweDEyLDB4MjYsMHhhMCwweDI4LDB4MDAsMHhjMCwweGU4LDB4MDQsMHgyMiwweGMwLDB4NzQsMHgwNywweDI2LDB4YzcKLSwweDA2LDB4MDQsMHgwMCwweGZmLDB4ZmYsMHg1OCwweDIzLDB4YzAsMHg3NCwweDAzLDB4ZTksMHg1NywweGZmLDB4ODEsMHgyNiwweDliCi0sMHgzNiwweGZmLDB4ZmUsMHg4MywweGZlLDB4MDYsMHg3ZiwweDI0LDB4MjYsMHhhMSwweDIwLDB4MDAsMHgzYiwweDA2LDB4ZDEsMHgzNgotLDB4NzUsMHgxYSwweDI2LDB4YTEsMHgyMiwweDAwLDB4M2IsMHgwNiwweGQzLDB4MzYsMHg3NSwweDEwLDB4MjYsMHhhMSwweDI0LDB4MDAKLSwweDNiLDB4MDYsMHhkNSwweDM2LDB4NzUsMHgwNiwweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAsMHgwMSwweDI2LDB4YTEsMHgyMCwweDAwCi0sMHgyNSwweDdmLDB4ZmYsMHhhMywweGI4LDB4MzQsMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4YmEsMHgzNCwweDI2LDB4YTEsMHgyNAotLDB4MDAsMHhhMywweGJjLDB4MzQsMHg4YiwweGM2LDB4ODYsMHhjNCwweGEzLDB4YzAsMHgzNCwweGQxLDB4ZTYsMHg4MCwweGZjLDB4MDkKLSwweDc0LDB4MDMsMHhlOCwweGFhLDB4MWMsMHg4YiwweGM2LDB4MmUsMHhmZiwweGE0LDB4MzAsMHg0OSwweDI2LDB4YTEsMHgwYywweDAwCi0sMHgzZCwweGZmLDB4N2YsMHg3NCwweDBmLDB4MjYsMHhmZiwweDI2LDB4MDQsMHgwMCwweDhlLDB4MDYsMHgzOCwweDM0LDB4ZTgsMHgzNgotLDB4MDYsMHhjZCwweDUwLDB4YzMsMHhlOSwweDE2LDB4MDAsMHhjZCwweDM0LDB4ZTksMHgxMSwweDAwLDB4Y2QsMHgzNCwweDg5LDB4MzYKLSwweDNkLDB4MzcsMHhhMSwweDlkLDB4MzYsMHhhMywweDNmLDB4MzcsMHhjNiwweDA2LDB4YTAsMHgzNiwweDBjLDB4ZTgsMHg4ZSwweDAwCi0sMHhhMSwweDlmLDB4MzYsMHgyMiwweGU0LDB4NzUsMHgzMiwweGY3LDB4MDYsMHg0YywweDM3LDB4MDEsMHgwMCwweDc1LDB4MmEsMHhmNgotLDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDA3LDB4ODgsMHgyNiwweDllLDB4MzYsMHhlOSwweDMxLDB4MDAsMHgzYSwweDA2LDB4OWQKLSwweDM2LDB4YTMsMHg5ZCwweDM2LDB4NzQsMHgyOCwweDhiLDB4ZjAsMHgyZSwweGZmLDB4YTQsMHgwZCwweDJiLDB4NDQsMHgyOSwweGVlCi0sMHg0MiwweDE5LDB4NDQsMHhjZCwweDQ0LDB4MmYsMHg0NSwweDVhLDB4NDUsMHgzYSwweDI2LDB4OWUsMHgzNiwweDc1LDB4MDEsMHhjMwotLDB4MzIsMHhjMCwweDg2LDB4YzQsMHg4YiwweGYwLDB4YTIsMHg5ZSwweDM2LDB4MmUsMHhmZiwweGE0LDB4MjAsMHg0OSwweDhiLDB4MmUKLSwweDk5LDB4MzYsMHgyMywweGVkLDB4NzUsMHgwMSwweGMzLDB4YmYsMHgwMSwweDAwLDB4YmUsMHgwMCwweDAwLDB4ODUsMHhmZCwweDc1Ci0sMHgxYSwweDQ2LDB4ZDEsMHhlNywweGU5LDB4ZjYsMHhmZiwweDJhLDB4MDAsMHgyOSwweDAwLDB4MjgsMHgwMCwweDI3LDB4MDAsMHgyNQotLDB4MDAsMHgwNSwweDAwLDB4MDcsMHgwMCwweDI2LDB4MDAsMHgwNiwweDAwLDB4MjAsMHgwMCwweGY3LDB4ZDcsMHgyMSwweDNlLDB4OTkKLSwweDM2LDB4ZDEsMHhlNiwweDJlLDB4OGIsMHhiNCwweDQ3LDB4MmIsMHhlOSwweDRmLDB4ZmYsMHhlOSwweDU2LDB4ZmYsMHg4MCwweDI2Ci0sMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDE3LDB4ZjcsMHgwNiwweDRjLDB4MzcsMHgwMSwweDAwLDB4NzUsMHgwZiwweGY2LDB4MDYsMHg5ZAotLDB4MzYsMHg4MCwweDc0LDB4MDgsMHhmNywweDA2LDB4NjYsMHgzNywweGZmLDB4ZmYsMHg3NSwweDA3LDB4YzcsMHgwNiwweDY2LDB4MzcKLSwweDAwLDB4MDAsMHhjMywweGY3LDB4MDYsMHg0MSwweDM3LDB4MDEsMHgwMCwweDc1LDB4MGIsMHhiOCwweDdmLDB4MDMsMHhjZCwweDM5Ci0sMHhjNywweDA2LDB4NDEsMHgzNywweDAxLDB4MDAsMHgzMywweGY2LDB4YjgsMHgwMCwweDQwLDB4ODUsMHgwNiwweDY2LDB4MzcsMHg3NAotLDB4MjEsMHg4MCwweGJjLDB4NTQsMHgzNywweGZmLDB4NzQsMHgwNCwweGZlLDB4ODQsMHg1NCwweDM3LDB4ODAsMHhiYywweDk2LDB4MzQKLSwweGZmLDB4NzQsMHgwNCwweGZlLDB4ODQsMHg5NiwweDM0LDB4MzEsMHgwNiwweDY2LDB4MzcsMHg4MywweDNlLDB4NjYsMHgzNywweDAwCi0sMHg3NCwweDA1LDB4NDYsMHhkMSwweGU4LDB4NzMsMHhkNCwweGMzLDB4YTEsMHhmNCwweDMzLDB4YTksMHgwMCwweDg4LDB4NzQsMHgwYgotLDB4YTksMHgwMCwweDEwLDB4NzUsMHgwOSwweDhiLDB4MWUsMHg0MywweDM3LDB4ZmYsMHhlMywweGU5LDB4ZDcsMHgwMCwweGM3LDB4MDYKLSwweDM1LDB4MzcsMHgwNSwweDAwLDB4YzcsMHgwNiwweDQzLDB4MzcsMHgxZSwweDJjLDB4ZjcsMHgwNiwweGY0LDB4MzMsMHgwMCwweDA4Ci0sMHg3NCwweDA2LDB4YzcsMHgwNiwweDQzLDB4MzcsMHgxMCwweDJjLDB4YjgsMHg4MCwweDAzLDB4Y2QsMHgzOSwweGU5LDB4Y2QsMHhmZQotLDB4YTksMHgwMCwweDA4LDB4NzQsMHhkOSwweGZmLDB4MGUsMHgzNSwweDM3LDB4NzUsMHhlZCwweGU5LDB4NjYsMHgwMCwweGE5LDB4MDAKLSwweDA4LDB4NzUsMHhjYiwweGZmLDB4MGUsMHgzNSwweDM3LDB4NzUsMHhkZiwweDgxLDB4MGUsMHhjMiwweDM0LDB4YzAsMHgwMCwweGY2Ci0sMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4NDgsMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwLDB4ODAsMHhmNywweDA2LDB4OWIsMHgzNgotLDB4MDEsMHgwMCwweDc0LDB4MWUsMHhiOCwweDdkLDB4MDMsMHhjZCwweDNhLDB4ODEsMHgwZSwweDliLDB4MzYsMHg4MCwweDAwLDB4ODMKLSwweDI2LDB4OWIsMHgzNiwweGZlLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMiwweDAwLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNCwweGU5Ci0sMHg3YiwweGZlLDB4ODAsMHgzZSwweGEwLDB4MzYsMHgwNCwweDc1LDB4MDcsMHg4MywweDNlLDB4MGYsMHgzNywweDAxLDB4NzUsMHgwNQotLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDIsMHgwMCwweGU5LDB4NWYsMHhmZSwweGJlLDB4MDIKLSwweDAwLDB4ZTksMHg0YSwweGZlLDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZiwweDc1LDB4M2EsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwCi0sMHg3NCwweDJkLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzUsMHgyYiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhmZgotLDB4MDYsMHg5NCwweDM0LDB4ODMsMHgwZSwweDY2LDB4MzcsMHgyMCwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEKLSwweDAwLDB4MDAsMHgwMSwweDc0LDB4MDcsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwMSwweGU5LDB4MDYsMHgwMCwweGJlCi0sMHgwNCwweDAwLDB4ZTksMHgwOSwweGZlLDB4ODEsMHgwZSwweGFmLDB4MzYsMHgwMCwweDA4LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNgotLDB4ZTUsMHgwYSwweGE5LDB4MDAsMHg4MCwweDc0LDB4MGUsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZjcsMHhhMSwweGFmLDB4MzYKLSwweGU3LDB4MDYsMHhlOSwweDA5LDB4ZmYsMHhlOSwweGY1LDB4ZmQsMHhjNywweDA2LDB4NDEsMHgzNywweDAwLDB4MDAsMHg4MywweDBlCi0sMHg5OSwweDM2LDB4MDIsMHhlOSwweGU3LDB4ZmQsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHgxZCwweGY3LDB4MDYsMHg5YgotLDB4MzYsMHgwMCwweDQwLDB4NzUsMHgwNSwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDgsMHg4MywweDBlLDB4OTksMHgzNiwweDIwLDB4ODEKLSwweDI2LDB4OWIsMHgzNiwweGZmLDB4YmYsMHhiOCwweDg1LDB4MDMsMHhjZCwweDM5LDB4ZTksMHhjMCwweGZkLDB4ODAsMHgzZSwweDllCi0sMHgzNiwweDA2LDB4NzQsMHgwNywweDgwLDB4M2UsMHg5ZSwweDM2LDB4MGEsMHg3NSwweDM0LDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MAotLDB4NzUsMHgwNiwweGJlLDB4MDcsMHgwMCwweGU5LDB4OTYsMHhmZCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDQsMHg4MywweDNlLDB4MGYKLSwweDM3LDB4MDIsMHg3NCwweDFiLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNCwweDAwLDB4ODAsMHgzZSwweDllLDB4MzYsMHgwNiwweDc1Ci0sMHgwZSwweGY3LDB4MDYsMHg5YiwweDM2LDB4NDAsMHgwMCwweDc1LDB4MDYsMHhjNywweDA2LDB4MGYsMHgzNywweDAzLDB4MDAsMHhlOQotLDB4N2IsMHhmZCwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDQsMHg3NSwweDEyLDB4ODEsMHgwZSwweGMyLDB4MzQsMHgwMCwweDQwLDB4ZmYKLSwweDA2LDB4OTIsMHgzNCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhlOSwweDYyLDB4ZmQsMHhiZSwweDA1LDB4MDAsMHhlOSwweDRkCi0sMHhmZCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NSwweDE5LDB4ODMsMHgwZSwweGMyLDB4MzQsMHgwNCwweGJlLDB4MDYsMHgwMAotLDB4ZTksMHgzYiwweGZkLDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZiwweDc1LDB4YzUsMHhmZiwweDA2LDB4MzEsMHgzNywweGU5LDB4MDAKLSwweDAwLDB4ODMsMHgyNiwweGMyLDB4MzQsMHhiZiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhlOSwweDJmLDB4ZmQsMHhlNSwweDBhCi0sMHg1MCwweDI1LDB4YzMsMHhiZiwweGU3LDB4MGEsMHg1OCwweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDBkLDB4YTksMHgwMAotLDB4NDAsMHg3NSwweDA4LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGU5LDB4MTIsMHhmZCwweGI4LDB4ODMsMHgwMywweGNkLDB4MzkKLSwweGMzLDB4YjgsMHg3YywweDAzLDB4Y2QsMHgzOSwweGY3LDB4MDYsMHhmNCwweDMzLDB4MDAsMHgxMCwweDc1LDB4MDksMHhjNywweDA2Ci0sMHgzMywweDM3LDB4MDIsMHgwMCwweGU5LDB4ZjYsMHhmYywweGZmLDB4MGUsMHgzMywweDM3LDB4NzQsMHgwMywweGU5LDB4ZWQsMHhmYwotLDB4ZmYsMHgwNiwweDhlLDB4MzQsMHhlOCwweGY3LDB4MTksMHg4MywweDBlLDB4YzIsMHgzNCwweDA4LDB4YmUsMHgwMywweDAwLDB4ZTkKLSwweGNjLDB4ZmMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDQsMHgwNCwweDA1Ci0sMHgwNCwweDA0LDB4MDQsMHgwMCwweDAzLDB4MDAsMHgwMywweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwNCwweDAwLDB4MDgsMHgwOCwweDA1LDB4MDgsMHgwOCwweDA4LDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMywweDAwLDB4MDAKLSwweDAyLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MGEsMHgxNCwweDAwLDB4MDAsMHgxYSwweDAwCi0sMHgxYywweDAwLDB4MWUsMHgyMCwweDAwLDB4MDAsMHgwNCwweDQxLDB4MDYsMHgwYiwweDA4LDB4YzIsMHhmZiwweGU3LDB4MDQsMHgwMwotLDB4MDYsMHgwNCwweDA0LDB4MDUsMHgwNCwweDA2LDB4MDQsMHg4NywweDA0LDB4MDMsMHgwNiwweDA0LDB4MDQsMHg4NSwweDRlLDB4YTIKLSwweDA0LDB4Y2YsMHgwNCwweGNkLDB4YzcsMHgwNiwweGEyLDB4MzcsMHgwMCwweDAwLDB4YzcsMHgwNiwweGE2LDB4MzcsMHgwMCwweDAwCi0sMHgyNiwweGExLDB4MjAsMHgwMCwweDI1LDB4N2YsMHhmZiwweGEzLDB4ZjUsMHgzNiwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHhmNwotLDB4MzYsMHgyNiwweGExLDB4MjQsMHgwMCwweGEzLDB4ZjksMHgzNiwweGU4LDB4M2IsMHgxOSwweDhiLDB4ZjAsMHgyNiwweDhiLDB4MGUKLSwweDBlLDB4MDAsMHgyYiwweGM4LDB4ODMsMHhlOSwweDBlLDB4YjgsMHgwMSwweDgwLDB4ODMsMHhmOSwweDA0LDB4N2MsMHg1MSwweDI2Ci0sMHg4YSwweDU0LDB4MjgsMHg4OCwweDE2LDB4MWMsMHgzNywweDQwLDB4MjYsMHg4YiwweDZjLDB4MjYsMHg4NiwweGNkLDB4M2IsMHhjZAotLDB4ODYsMHhjZCwweDg5LDB4MGUsMHhhNCwweDM3LDB4NzUsMHgzOCwweDQwLDB4MzIsMHhmZiwweDI2LDB4OGEsMHg1YywweDI5LDB4ODAKLSwweGZiLDB4MTUsMHg3NywweDI1LDB4ODAsMHhmYiwweDBhLDB4NzQsMHgyMCwweDgwLDB4ZmIsMHgwMSwweDc0LDB4MWIsMHhiOCwweDA0Ci0sMHg4MCwweDJlLDB4M2EsMHg5NywweDAyLDB4MmUsMHg3NCwweDA3LDB4MmUsMHgzYSwweDk3LDB4MTgsMHgyZSwweDc1LDB4MTEsMHgzMwotLDB4YzAsMHg4MCwweGZiLDB4MDksMHg3NSwweDRmLDB4OGIsMHhmMywweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGZmLDB4ZmYKLSwweDUwLDB4NTIsMHhhMSwweGE0LDB4MzcsMHg4NiwweGM0LDB4MjYsMHgzYiwweDA2LDB4MjYsMHgwMCwweDdjLDB4MzIsMHgyNiwweDgxCi0sMHgzZSwweDI2LDB4MDAsMHgwMCwweDA0LDB4N2UsMHgyOSwweDhkLDB4NzQsMHgyYSwweDI2LDB4OGIsMHgxNCwweDIyLDB4ZDIsMHg3NAotLDB4MWYsMHg4MCwweGU2LDB4YmYsMHg4MCwweGZlLDB4MDksMHg3NSwweDE3LDB4YzcsMHgwNiwweGEyLDB4MzcsMHgwMSwweDAwLDB4ODAKLSwweGZhLDB4MDQsMHg3NSwweDBjLDB4MjYsMHg4YiwweDQ0LDB4MDIsMHhhMywweDAzLDB4MzcsMHg4NiwweGM0LDB4YTMsMHhkMCwweDM0Ci0sMHg1YSwweDU4LDB4ZTksMHhiMSwweGZmLDB4YmQsMHg3MiwweDM3LDB4MmUsMHg4YSwweDg3LDB4MmUsMHgyZSwweDIyLDB4YzAsMHg3NAotLDB4MTYsMHgwNSwweDQ0LDB4MmUsMHg4YiwweGY4LDB4MmUsMHg4YiwweDA1LDB4M2UsMHg4OSwweDQ2LDB4MDAsMHg4MywweGM1LDB4MDIKLSwweDgzLDB4YzcsMHgwMiwweDIyLDB4ZTQsMHg3ZCwweGVmLDB4OGQsMHg3NCwweDJhLDB4ODMsMHhlOSwweDA0LDB4NzUsMHgwMywweGU5Ci0sMHhhMSwweDAwLDB4MjYsMHg4YiwweDE0LDB4MjIsMHhkMiwweDc1LDB4MDMsMHhlOSwweDdjLDB4MDAsMHhjNywweDA2LDB4YTYsMHgzNwotLDB4MDEsMHgwMCwweGJmLDB4NzIsMHgzNywweDhiLDB4MDUsMHg4MywweGM3LDB4MDIsMHg4MCwweGU2LDB4YmYsMHg4MCwweGU0LDB4M2YKLSwweDgwLDB4ZmUsMHgwOSwweDc1LDB4MjIsMHg4MCwweGZhLDB4MDQsMHg3NSwweDVlLDB4YzcsMHgwNiwweGEyLDB4MzcsMHgwMSwweDAwCi0sMHgyNiwweDhiLDB4NDQsMHgwMiwweGEzLDB4MDMsMHgzNywweDg2LDB4YzQsMHhhMywweGQwLDB4MzQsMHg4NiwweGM0LDB4YzcsMHgwNgotLDB4YTYsMHgzNywweDAwLDB4MDAsMHhlOSwweDQ3LDB4MDAsMHgzYiwweGZkLDB4N2UsMHgxNSwweDI2LDB4OGIsMHgwNCwweGE4LDB4NDAKLSwweDc0LDB4MDYsMHhiOCwweDA3LDB4ODAsMHhlOSwweDM4LDB4ZmYsMHgzMiwweGMwLDB4MjYsMHg4YiwweDA0LDB4ZTksMHgyZSwweDAwCi0sMHgzYSwweGY0LDB4NzUsMHhiMSwweGM3LDB4NDUsMHhmZSwweDAwLDB4MDAsMHg4MCwweGZlLDB4MjIsMHg3NSwweDBkLDB4M2EsMHhkMAotLDB4NzcsMHgxNiwweGM3LDB4MDYsMHhhNiwweDM3LDB4MDAsMHgwMCwweGU5LDB4MTMsMHgwMCwweDNhLDB4ZDAsMHg3NSwweDA5LDB4YzcKLSwweDA2LDB4YTYsMHgzNywweDAwLDB4MDAsMHhlOSwweDA2LDB4MDAsMHhiOCwweDA1LDB4ODAsMHhlOSwweDAyLDB4ZmYsMHgzMiwweGY2Ci0sMHgwMywweGYyLDB4MmIsMHhjYSwweGI4LDB4MDUsMHg4MCwweDIzLDB4YzksMHg3NiwweDAzLDB4ZTksMHg2NCwweGZmLDB4NzQsMHgwMwotLDB4ZTksMHhlZCwweGZlLDB4MzMsMHhjMCwweGJmLDB4NzIsMHgzNywweDhiLDB4MTUsMHg0NywweDQ3LDB4M2IsMHhmZCwweDdmLDB4MWIKLSwweGY2LDB4YzYsMHg4MCwweDc0LDB4MTYsMHhmNywweDA2LDB4YTYsMHgzNywweDAxLDB4MDAsMHg3NCwweDA2LDB4YjgsMHgwOCwweDgwCi0sMHhlOSwweGMzLDB4ZmUsMHhmNiwweGM2LDB4NDAsMHg3NCwweGUwLDB4YjgsMHgwNywweDgwLDB4ZTksMHhiOCwweGZlLDB4N2QsMHg0MgotLDB4YTMsMHg0NSwweDQ0LDB4MjksMHg0NCwweDI5LDB4YjcsMHgyOCwweGUyLDB4MjgsMHhlZSwweDJiLDB4ZjIsMHgyOCwweGY1LDB4MjgKLSwweDAxLDB4MjksMHhhYywweDJhLDB4NDQsMHgyOSwweDQ0LDB4MjksMHg0NCwweDI5LDB4NDQsMHgyOSwweDQ0LDB4MjksMHgwMCwweDAwCi0sMHg3MywweDM2LDB4MDAsMHgwMCwweDAzLDB4MzYsMHhjNSwweDM1LDB4ODMsMHgzNSwweDQ1LDB4MzUsMHgwNywweDM1LDB4ZDIsMHgzNAotLDB4NDUsMHgzNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHhhNiwweDM4LDB4MDAsMHgwMCwweGUwLDB4MzgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4ZjIsMHgzMywweDAwLDB4MDAsMHhhNiwweDMzLDB4NjAsMHgzMywweGZkLDB4MzIsMHhiYywweDMyLDB4NzcsMHgzMiwweDNjLDB4MzIKLSwweGZiLDB4MzEsMHg2YSwweDMxLDB4MGEsMHgzMSwweGUwLDB4ZTAsMHgxMCwweDEwLDB4MTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAKLSwweGUwLDB4MzMsMHhmZiwweDI2LDB4ZjYsMHgwNiwweDFhLDB4MDAsMHg4MCwweDc0LDB4MWIsMHgyNiwweDgwLDB4MjYsMHgxYSwweDAwCi0sMHg3ZiwweDI2LDB4OGIsMHgzZSwweDI2LDB4MDAsMHg4MywweGU3LDB4MWYsMHg3NCwweDBiLDB4MjYsMHg4MCwweDBlLDB4MjAsMHgwMAotLDB4ODAsMHgyNiwweDAxLDB4M2UsMHgwZSwweDAwLDB4YzMsMHg2MCwweDJlLDB4OGIsMHg4NCwweGE2LDB4MzAsMHgyNiwweGEzLDB4MTgKLSwweDAwLDB4ZDEsMHhlNiwweDJlLDB4ZmYsMHg5NCwweDUwLDB4MzAsMHg2MSwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0Ci0sMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxNiwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNgotLDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4YmYsMHgwNSwweGU4LDB4OTgsMHgwNSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAKLSwweDAwLDB4MDgsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MmEsMHhiZiwweDJhCi0sMHgwMCwweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyYSwweGExLDB4OTMsMHgzNywweDMzLDB4ZGIsMHhhOQotLDB4NDAsMHgwMCwweDc1LDB4MDIsMHhiMywweDAxLDB4YTksMHgwMCwweDEwLDB4NzQsMHgwMiwweGI3LDB4ODgsMHhhOSwweDAwLDB4MDgKLSwweDc0LDB4MDMsMHg4MCwweGNmLDB4NDQsMHgyNiwweDg5LDB4NWQsMHgwMiwweGMzLDB4ODMsMHgwZSwweGMyLDB4MzQsMHgyMCwweDI2Ci0sMHhjNywweDA2LDB4MDQsMHgwMCwweDZiLDB4MmIsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MzAsMHgwMCwweDI2LDB4YzcsMHgwNgotLDB4MDYsMHgwMCwweDBhLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwYSwweDAwLDB4MDQsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAKLSwweDAwLDB4ZTgsMHg2OSwweDA1LDB4ZTgsMHgyYywweDA1LDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MjIsMHgyNiwweGM2Ci0sMHgwNiwweDI4LDB4MDAsMHg2MCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyOSwweGJmLDB4MmEsMHgwMCwweDI2LDB4YzYsMHgwNQotLDB4MDgsMHgyNiwweGM2LDB4NDUsMHgwMSwweDJkLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHg1NCwweDM3LDB4YjksMHgwMywweDAwLDB4ZjMKLSwweGE1LDB4MjYsMHhjNiwweDA1LDB4MDgsMHgyNiwweGM2LDB4NDUsMHgwMSwweDJlLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHg1YSwweDM3Ci0sMHhiOSwweDAzLDB4MDAsMHhmMywweGE1LDB4ZTgsMHhkNCwweDA1LDB4ZTgsMHg2NCwweDA1LDB4YjksMHgwNiwweDAwLDB4YmUsMHg1NAotLDB4MzcsMHg4ZCwweDJlLDB4MmMsMHgwMCwweDI2LDB4OGIsMHg0NiwweDAwLDB4MjksMHgwNCwweDgzLDB4YzYsMHgwMiwweDgzLDB4YzUKLSwweDAyLDB4ODMsMHhmOSwweDA0LDB4NzUsMHgwMiwweDQ1LDB4NDUsMHhlMiwweGViLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwCi0sMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDI0LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMAotLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHhlNCwweDA0LDB4ZTgsMHhhNywweDA0LDB4MjYsMHhjNywweDA2LDB4MjYKLSwweDAwLDB4MDAsMHgxNiwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg2MCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyOCwweGJmCi0sMHgyYSwweDAwLDB4ZTgsMHg1YiwweDA2LDB4ZTgsMHg3NCwweDA1LDB4ZTgsMHgwNCwweDA1LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNAotLDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDFhLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYKLSwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHhhMywweDA0LDB4ZTgsMHg2NiwweDA0LDB4MjYsMHhjNywweDA2Ci0sMHgyNiwweDAwLDB4MDAsMHgwYywweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg2MCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyNwotLDB4YmYsMHgyYSwweDAwLDB4ZTgsMHgyMSwweDA1LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcKLSwweDA2LDB4MGUsMHgwMCwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MGEsMHgwMCwweDI2LDB4YzcsMHgwNiwweDBhCi0sMHgwMCwweDA0LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDRiLDB4MDQsMHhlOCwweDI0LDB4MDQsMHgyNgotLDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEyLDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDQwLDB4MjYsMHhjNiwweDA2LDB4MjkKLSwweDAwLDB4MjYsMHhiZiwweDJhLDB4MDAsMHhlOCwweGY0LDB4MDQsMHhlOCwweDg0LDB4MDQsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0Ci0sMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MzQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNgotLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDBkLDB4MDQsMHhlOCwweGU2LDB4MDMsMHgyNiwweGM3LDB4MDYKLSwweDI2LDB4MDAsMHgwMCwweDI2LDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDQwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDI1Ci0sMHhiZiwweDJhLDB4MDAsMHhlOCwweGI2LDB4MDQsMHhlOCwweDQ2LDB4MDQsMHhlOCwweGZhLDB4MDQsMHhjMywweDI2LDB4YzcsMHgwNgotLDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MzgsMHgwMCwweGExLDB4YTIsMHgzNywweDUwLDB4MGIKLSwweGMwLDB4NzUsMHgwNywweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzNCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2Ci0sMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4OTksMHgwMywweGU4LDB4YTQsMHhmZCwweDI2LDB4YzcsMHg0NQotLDB4MjYsMHgwMCwweDJhLDB4NTgsMHgwYiwweGMwLDB4NzUsMHgwNiwweDI2LDB4YzcsMHg0NSwweDI2LDB4MDAsMHgyNiwweGExLDB4MWMKLSwweDM3LDB4YzEsMHhlMCwweDA0LDB4MjYsMHg4OCwweDQ1LDB4MjgsMHgyNiwweGM2LDB4NDUsMHgyOSwweDI0LDB4ODMsMHhjNywweDJhCi0sMHhlOCwweDI5LDB4MDQsMHhlOCwweGEwLDB4MDQsMHhlOCwweDIyLDB4MDUsMHhlOCwweGY4LDB4MDMsMHhlOCwweDA5LDB4MDQsMHhjMwotLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MzIsMHgwMCwweDI2LDB4YzcKLSwweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDQ1LDB4MDMsMHhlOCwweDUwCi0sMHhmZCwweDI2LDB4YzcsMHg0NSwweDI2LDB4MDAsMHgyNCwweGExLDB4MWMsMHgzNywweGMxLDB4ZTAsMHgwNCwweDI2LDB4ODgsMHg0NQotLDB4MjgsMHgyNiwweGM2LDB4NDUsMHgyOSwweDIzLDB4ODMsMHhjNywweDJhLDB4ZTgsMHhlMCwweDAzLDB4ZTgsMHg2YywweDA0LDB4ZTgKLSwweDhhLDB4MDQsMHhlOCwweDljLDB4MDQsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2Ci0sMHgwZSwweDAwLDB4MzQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMAotLDB4MDAsMHhlOCwweGZmLDB4MDIsMHhlOCwweDBhLDB4ZmQsMHgyNiwweGM3LDB4NDUsMHgyNiwweDAwLDB4MjYsMHhhMSwweDFjLDB4MzcKLSwweGMxLDB4ZTAsMHgwNCwweDI2LDB4ODgsMHg0NSwweDI4LDB4MjYsMHhjNiwweDQ1LDB4MjksMHgyMiwweDgzLDB4YzcsMHgyYSwweGU4Ci0sMHg5YSwweDAzLDB4ZTgsMHhjNywweDAzLDB4ZTgsMHg1NywweDAzLDB4ZTgsMHhmOCwweDAzLDB4ZTgsMHg3OCwweDA0LDB4ZTgsMHg4YQotLDB4MDQsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHg3NCwweDQ1LDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDNlLDB4MDAKLSwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweDA0LDB4MDAsMHgyNiwweGM2Ci0sMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4ZmMsMHgwMiwweGU4LDB4YTksMHgwMiwweDgzLDB4M2UsMHg4ZCwweDM3LDB4MDMsMHg3NQotLDB4MDEsMHg5MCwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDMwLDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDUwLDB4MjYKLSwweGM2LDB4MDYsMHgyOSwweDAwLDB4MjAsMHhiZiwweDJhLDB4MDAsMHhlOCwweGQwLDB4MDMsMHhlOCwweDAxLDB4MDMsMHhlOCwweGI1Ci0sMHgwMywweGU4LDB4OWYsMHgwMywweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDYxLDB4NDMsMHhiOSwweGYwLDB4MDAsMHg4MwotLDB4ZTksMHgwMiwweDI2LDB4ODksMHgwZSwweDBlLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDIsMHgwMCwweDI2LDB4YzYKLSwweDA2LDB4MTksMHgwMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWEsMHgwMCwweDAwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxYywweDAwCi0sMHgwMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWUsMHgwMCwweDAwLDB4MDAsMHhlOCwweDQ3LDB4MDIsMHg4MywweGU5LDB4MGUsMHg4NgotLDB4Y2QsMHgyNiwweDg5LDB4MGUsMHgyNiwweDAwLDB4ODYsMHhjZCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYKLSwweDA2LDB4MjksMHgwMCwweDA4LDB4YmYsMHgyYSwweDAwLDB4ODMsMHhlOSwweDA0LDB4MjYsMHg4OSwweDBkLDB4MjYsMHhjNiwweDQ1Ci0sMHgwMSwweDI2LDB4OGQsMHg3ZCwweDAyLDB4ODMsMHhlOSwweDAyLDB4YmIsMHgwMSwweDAwLDB4YjgsMHgzMCwweDMwLDB4NGIsMHg3NQotLDB4MTcsMHhiYiwweDBhLDB4MDAsMHg4YSwweGM0LDB4MjYsMHg4OCwweDA1LDB4YjAsMHgzMSwweDgwLDB4YzQsMHgwMSwweDgwLDB4ZmMKLSwweDNhLDB4NzUsMHgwYSwweGI0LDB4NjEsMHhlOSwweDA1LDB4MDAsMHgyNiwweDg4LDB4MDUsMHgwNCwweDAxLDB4NDcsMHg0OSwweDc1Ci0sMHhkZCwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDA0LDB4NDUsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MTIsMHgwMAotLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDEsMHhlOCwweGU1LDB4MDEKLSwweGU4LDB4ZDAsMHgwMSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDA0LDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDAwCi0sMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDcsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNwotLDB4MDYsMHgwZSwweDAwLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTkKLSwweDAwLDB4MDYsMHhlOCwweDA0LDB4MDIsMHhlOCwweDliLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMiwweDI2Ci0sMHhjNiwweDA2LDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDA2LDB4YmYsMHgyYSwweDAwLDB4ZTgsMHg2YgotLDB4MDIsMHhlOCwweGZiLDB4MDEsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUKLSwweDAwLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDA1Ci0sMHhlOCwweGM2LDB4MDEsMHhlOCwweDVkLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMiwweDI2LDB4YzYsMHgwNgotLDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDA1LDB4YmYsMHgyYSwweDAwLDB4ZTgsMHgyZCwweDAyLDB4ZTgKLSwweGJkLDB4MDEsMHhjMywweGZmLDB4MDYsMHg4MiwweDM0LDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDNkLDB4NDEsMHgyNiwweGM3Ci0sMHgwNiwweDBlLDB4MDAsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDBlLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOQotLDB4MDAsMHgwNCwweGU4LDB4ODQsMHgwMSwweGU4LDB4MWIsMHgwMSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEyLDB4MjYKLSwweGM2LDB4MDYsMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDQsMHhiZiwweDJhLDB4MDAsMHhlOCwweGViCi0sMHgwMSwweGU4LDB4N2IsMHgwMSwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDY3LDB4NDIsMHgyNiwweGM3LDB4MDYsMHgwZQotLDB4MDAsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA4LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDMKLSwweGU4LDB4NDYsMHgwMSwweGU4LDB4ZGQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDEyLDB4MjYsMHhjNiwweDA2Ci0sMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDMsMHhiZiwweDJhLDB4MDAsMHhlOCwweGFkLDB4MDEsMHhlOAotLDB4M2QsMHgwMSwweGMzLDB4ZmYsMHgwNiwweDg0LDB4MzQsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4NjcsMHg0MiwweDI2LDB4YzcKLSwweDA2LDB4MGUsMHgwMCwweDI0LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDgsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5Ci0sMHgwMCwweDAyLDB4ZTgsMHgwNCwweDAxLDB4ZTgsMHg5YiwweDAwLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTYsMHgyNgotLDB4YzYsMHgwNiwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwMiwweGJmLDB4MmEsMHgwMCwweDI2LDB4YzYKLSwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDAxLDB4YTEsMHgwZiwweDM3LDB4ODYsMHhlMCwweGY2LDB4MDYsMHg2ZiwweDM3Ci0sMHgwMSwweDc1LDB4MGYsMHgzOSwweDA2LDB4Y2MsMHgzNCwweDc0LDB4MDksMHg4YiwweGQ4LDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzOQotLDB4OGIsMHhjMywweGEzLDB4Y2MsMHgzNCwweDI2LDB4ODksMHg0NSwweDAyLDB4OGQsMHg3ZCwweDA0LDB4ZTgsMHgzZCwweDAxLDB4ZTgKLSwweGNkLDB4MDAsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDFjCi0sMHgwMCwweGExLDB4YTIsMHgzNywweDUwLDB4MGIsMHhjMCwweDc1LDB4MDcsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MTgsMHgwMAotLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDIzLDB4MDAKLSwweGU4LDB4MmUsMHhmYSwweDI2LDB4YzcsMHg0NSwweDI2LDB4MDAsMHgwZSwweDU4LDB4MGIsMHhjMCwweDc1LDB4MDYsMHgyNiwweGM3Ci0sMHg0NSwweDI2LDB4MDAsMHgwYSwweDI2LDB4YzYsMHg0NSwweDI5LDB4MDAsMHg4MywweGM3LDB4MmEsMHhlOCwweGJkLDB4MDAsMHhlOAotLDB4ZmYsMHgwMCwweGMzLDB4NTYsMHg1NywweDUxLDB4YjksMHgwMywweDAwLDB4YmUsMHhkMSwweDM2LDB4YmYsMHgyMCwweDAwLDB4ZjMKLSwweGE1LDB4NTksMHg1ZiwweDVlLDB4YzMsMHg1NiwweDU3LDB4NTEsMHhiOSwweDAzLDB4MDAsMHhiZSwweGQxLDB4MzYsMHhiZiwweDFhCi0sMHgwMCwweGYzLDB4YTUsMHg1OSwweDVmLDB4NWUsMHhjMywweDI2LDB4YzcsMHgwNiwweDFhLDB4MDAsMHhjMCwweDAwLDB4MjYsMHhjNwotLDB4MDYsMHgxYywweDAwLDB4MDAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFlLDB4MDAsMHgwMCwweDEwLDB4YzMsMHgyNiwweGM3LDB4MDYKLSwweDFhLDB4MDAsMHhjMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWMsMHgwMCwweDAwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxZSwweDAwCi0sMHgwMCwweDA4LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgxYSwweDAwLDB4YzAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFjLDB4MDAsMHgwMAotLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxZSwweDAwLDB4MDAsMHgwMiwweGMzLDB4MjYsMHhjNywweDA2LDB4MWEsMHgwMCwweGMwLDB4MDAKLSwweDI2LDB4YzcsMHgwNiwweDFjLDB4MDAsMHhmZiwweGZmLDB4MjYsMHhjNywweDA2LDB4MWUsMHgwMCwweGZmLDB4ZmYsMHhjMywweDI2Ci0sMHhjNiwweDA1LDB4MDgsMHgyNiwweGM2LDB4NDUsMHgwMSwweDAyLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHgwNSwweDM3LDB4YjksMHgwMwotLDB4MDAsMHhmMywweGE1LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MDYsMHhhMSwweDBkLDB4MzcKLSwweDI2LDB4ODksMHg0NSwweDAyLDB4OGQsMHg3ZCwweDA0LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxCi0sMHgwNywweGExLDB4MGIsMHgzNywweDI2LDB4ODksMHg0NSwweDAyLDB4ODMsMHhjNywweDA0LDB4YzMsMHhhMSwweGEyLDB4MzcsMHgwYgotLDB4YzAsMHg3NCwweDEzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDA5LDB4YTEsMHgwMywweDM3LDB4MjYKLSwweDg5LDB4NDUsMHgwMiwweDgzLDB4YzcsMHgwNCwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDgsMHgyNiwweGM2LDB4NDUsMHgwMSwweDAyCi0sMHg4ZCwweDdkLDB4MDIsMHhiZSwweDA1LDB4MzcsMHhiOSwweDAzLDB4MDAsMHhmMywweGE1LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNgotLDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwYiwweDhkLDB4N2QsMHgwMiwweGJlLDB4ZWYsMHgzNiwweGI5LDB4MDIsMHgwMCwweGYzLDB4YTUKLSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDYsMHgyNiwweGM2LDB4NDUsMHgwMSwweDIwLDB4YTEsMHg2OCwweDM3LDB4MjYsMHg4OSwweDQ1Ci0sMHgwMiwweGExLDB4NmEsMHgzNywweDI2LDB4ODgsMHg2NSwweDA1LDB4YzEsMHhlMCwweDA0LDB4MjYsMHg4OCwweDQ1LDB4MDQsMHg4MwotLDB4YzcsMHgwNiwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDIxLDB4MjYsMHhjNywweDQ1LDB4MDIKLSwweDAwLDB4MDAsMHg4MywweGM3LDB4MDQsMHhjMywweDI2LDB4YzYsMHgwNSwweDE0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyMiwweDhkCi0sMHg3ZCwweDAyLDB4YmUsMHgxZiwweDM3LDB4YjksMHgwOSwweDAwLDB4ZjMsMHhhNSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MGMsMHgyNgotLDB4YzYsMHg0NSwweDAxLDB4MjMsMHg4ZCwweDdkLDB4MDIsMHgxZSwweDBlLDB4MWYsMHg4ZCwweDM2LDB4NDAsMHg1NCwweGI5LDB4MDMKLSwweDAwLDB4ZjMsMHhhNSwweDMzLDB4YzAsMHhiOSwweDAyLDB4MDAsMHhmMywweGFiLDB4MWYsMHhjMywweDI2LDB4YzYsMHgwNSwweDA4Ci0sMHgyNiwweGM2LDB4NDUsMHgwMSwweDI4LDB4OGQsMHg3ZCwweDAyLDB4YmUsMHhkMSwweDM2LDB4YjksMHgwMywweDAwLDB4ZjMsMHhhNQotLDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwOCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjksMHhhMSwweGMyLDB4MzQsMHg4NiwweGUwLDB4MjYKLSwweDg5LDB4NDUsMHgwMiwweGExLDB4OWIsMHgzNiwweDI2LDB4ODksMHg0NSwweDA0LDB4MjYsMHg4OCwweDQ1LDB4MDYsMHgyNiwweDg4Ci0sMHg0NSwweDA3LDB4OGQsMHg3ZCwweDA4LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNiwweDI2LDB4YzYsMHg0NSwweDAxLDB4MmIsMHg4ZAotLDB4N2QsMHgwMiwweGJlLDB4YmIsMHgzNiwweGI5LDB4MDIsMHgwMCwweGYzLDB4YTUsMHhjMywweDI2LDB4YzYsMHgwNSwweDA2LDB4MjYKLSwweGM2LDB4NDUsMHgwMSwweDJjLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHhlNSwweDM2LDB4YjksMHgwMiwweDAwLDB4ZjMsMHhhNSwweGMzCi0sMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MzAsMHhhMSwweDM3LDB4MzcsMHg4NiwweGUwLDB4MjYsMHg4OQotLDB4NDUsMHgwMiwweDhkLDB4N2QsMHgwNCwweGMzLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDFlLDB4MDAsMHgyNiwweGM3LDB4MDYKLSwweDA2LDB4MDAsMHgwMiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHg2YywweGZlLDB4ZTgsMHgwMywweGZlCi0sMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHgzMCwweDI2LDB4YzYsMHgwNgotLDB4MjksMHgwMCwweDExLDB4YmYsMHgyYSwweDAwLDB4ZTgsMHgzNSwweDAwLDB4ZTgsMHg0NSwweDAwLDB4ZTgsMHg1NSwweDAwLDB4YzMKLSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxMiwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDAyLDB4MDAsMHgyNiwweGM2Ci0sMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4MzIsMHhmZSwweGU4LDB4YzksMHhmZCwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMAotLDB4MDQsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4MzAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MTMsMHhjMywweDI2LDB4YzYKLSwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDBjLDB4MjYsMHhjNywweDQ1LDB4MDIsMHgwMCwweDAxLDB4ODMsMHhjNywweDA0Ci0sMHhjMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwZSwweDI2LDB4YzcsMHg0NSwweDAyLDB4MDAsMHgwMgotLDB4ODMsMHhjNywweDA0LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjEsMHgyNiwweGM3LDB4NDUKLSwweDAyLDB4MDAsMHgwMCwweDgzLDB4YzcsMHgwNCwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhiMywweDM5LDB4YzksMHgzOSwweDgzLDB4M2EsMHhiMywweDM5LDB4YjMsMHgzOSwweGIzLDB4MzksMHgxYywweDNhLDB4MWMsMHgzYQotLDB4YTMsMHhiNiwweDM0LDB4YTEsMHhlOSwweDM2LDB4YTMsMHgxMSwweDM3LDB4YTMsMHhkMiwweDM0LDB4YTEsMHhlYiwweDM2LDB4YTMKLSwweDEzLDB4MzcsMHhhMywweGQ0LDB4MzQsMHhhMSwweGVkLDB4MzYsMHhhMywweDE1LDB4MzcsMHhhMywweGQ2LDB4MzQsMHhhMSwweDAxCi0sMHgzNywweGEzLDB4Y2UsMHgzNCwweGExLDB4ZjcsMHgzNiwweGEzLDB4MTcsMHgzNywweGEzLDB4ZGMsMHgzNCwweGExLDB4ZjksMHgzNgotLDB4YTMsMHgxOSwweDM3LDB4YTMsMHhkZSwweDM0LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMiwweDAwLDB4NzUsMHgwYywweDMzLDB4YzAKLSwweGEwLDB4OWUsMHgzNiwweDhiLDB4ZjAsMHgyZSwweGZmLDB4YTQsMHg1MCwweDM5LDB4ZTksMHgwZiwweDAxLDB4YmUsMHgwNywweDAwCi0sMHhlOSwweDE5LDB4ZjEsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHhmMywweGM2LDB4MDYsMHhhMCwweDM2LDB4MDIsMHhjNgotLDB4MDYsMHg2ZSwweDM3LDB4MDgsMHhjNiwweDA2LDB4NzAsMHgzNywweDAyLDB4YjgsMHg4OCwweDAzLDB4Y2QsMHgzOSwweGY2LDB4MDYKLSwweDZmLDB4MzcsMHgwMSwweDc1LDB4NGEsMHhhMSwweGQxLDB4MzYsMHgzYSwweDA2LDB4ZTksMHgzNiwweDc1LDB4NDEsMHgzYSwweDI2Ci0sMHhlYSwweDM2LDB4NzUsMHgzYiwweGExLDB4ZDMsMHgzNiwweDNhLDB4MDYsMHhlYiwweDM2LDB4NzUsMHgzMiwweDNhLDB4MjYsMHhlYwotLDB4MzYsMHg3NSwweDJjLDB4YTEsMHhkNSwweDM2LDB4M2EsMHgwNiwweGVkLDB4MzYsMHg3NSwweDIzLDB4M2EsMHgyNiwweGVlLDB4MzYKLSwweDc1LDB4MWQsMHhjNiwweDA2LDB4NzAsMHgzNywweDAyLDB4ZmUsMHgwZSwweDZlLDB4MzcsMHg3NSwweDBmLDB4YjgsMHg4OCwweDAzCi0sMHhjZCwweDNhLDB4ODMsMHgwZSwweDliLDB4MzYsMHgxMiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MGMsMHhlOSwweGE4LDB4ZjAsMHhhMQotLDB4MDUsMHgzNywweDI2LDB4M2IsMHgwNiwweDIwLDB4MDAsMHg3NSwweDQwLDB4YTEsMHgwNywweDM3LDB4MjYsMHgzYiwweDA2LDB4MjIKLSwweDAwLDB4NzUsMHgzNiwweGExLDB4MDksMHgzNywweDI2LDB4M2IsMHgwNiwweDI0LDB4MDAsMHg3NSwweDJjLDB4YTAsMHg5ZSwweDM2Ci0sMHgzYywweDAyLDB4NzUsMHgwOCwweDI2LDB4ZjYsMHgwNiwweDE4LDB4MDAsMHgwOCwweDc1LDB4NDcsMHhjNiwweDA2LDB4NmUsMHgzNwotLDB4MDgsMHhmZSwweDBlLDB4NzAsMHgzNywweDc1LDB4MWMsMHhjNiwweDA2LDB4NzAsMHgzNywweDAyLDB4ZTUsMHgwMiwweDBkLDB4MDEKLSwweDA0LDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMiwweGU5LDB4NWUsMHhmMCwweGM2LDB4MDYsMHg3MCwweDM3LDB4MDIsMHhjNiwweDA2Ci0sMHg2ZSwweDM3LDB4MDgsMHhlNSwweDAyLDB4MjUsMHhmZiwweGZiLDB4MGQsMHgwMSwweDAwLDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMgotLDB4ZTksMHg0NCwweGYwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAxLDB4NzQsMHgyNSwweDI2LDB4ZjYsMHgwNiwweDE4LDB4MDAKLSwweDA4LDB4NzUsMHhlZCwweDgxLDB4MjYsMHg5YiwweDM2LDB4N2YsMHhmZiwweGI4LDB4ODksMHgwMywweGNkLDB4M2EsMHhiOCwweDg0Ci0sMHgwMywweGNkLDB4M2EsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ODMsMHgyNiwweGMyLDB4MzQsMHhhZiwweGU5LDB4MTcsMHhmMAotLDB4YTEsMHgwMSwweDM3LDB4M2EsMHgyNiwweDBmLDB4MzcsMHg3ZiwweGM3LDB4ZTksMHhmNywweGZlLDB4ODMsMHgyNiwweDliLDB4MzYKLSwweGVjLDB4ZTgsMHgyYSwweDBkLDB4ODEsMHgwZSwweDliLDB4MzYsMHg4MCwweDAwLDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweGM2Ci0sMHgwNiwweGEwLDB4MzYsMHgwMiwweGU5LDB4ZjAsMHhlZiwweDgzLDB4MGUsMHg5YiwweDM2LDB4MTEsMHhjNiwweDA2LDB4YTAsMHgzNgotLDB4MGMsMHhlOSwweGY5LDB4ZWYsMHg0NCwweDNiLDB4MmMsMHgzYiwweGM3LDB4MmEsMHg2YiwweDNiLDB4NDQsMHgzYiwweGM3LDB4MmEKLSwweGM3LDB4MmEsMHhjNywweDJhLDB4YTMsMHhiNiwweDM0LDB4ODEsMHgwZSwweGMyLDB4MzQsMHgwMCwweDIwLDB4ZjcsMHgwNiwweDQxCi0sMHgzNywweDAxLDB4MDAsMHg3NCwweDFiLDB4OGMsMHhjMywweGM3LDB4MDYsMHg0MSwweDM3LDB4MDAsMHgwMCwweGI4LDB4N2YsMHgwMwotLDB4Y2QsMHgzYSwweDMzLDB4YzAsMHg4ZSwweGMwLDB4YmYsMHg1NCwweDM3LDB4YjksMHgwNiwweDAwLDB4ZjMsMHhhYiwweDhlLDB4YzMKLSwweDMzLDB4YzAsMHhhMCwweDllLDB4MzYsMHg4YiwweGYwLDB4MmUsMHhmZiwweGE0LDB4ZTQsMHgzYSwweGY3LDB4MDYsMHg5YiwweDM2Ci0sMHgwMCwweDAxLDB4NzUsMHgyMSwweDgzLDB4MjYsMHhjMiwweDM0LDB4YmYsMHhhMSwweGE5LDB4MzYsMHhlNywweDAwLDB4YTEsMHg5YgotLDB4MzYsMHhlOSwweDA5LDB4MDAsMHhhMSwweDliLDB4MzYsMHg4MSwweDI2LDB4OWIsMHgzNiwweGZmLDB4ZGYsMHhhOSwweDAwLDB4MjAKLSwweDc1LDB4MDYsMHhlOSwweDZlLDB4MDAsMHhlOSwweDZmLDB4ZWYsMHg4MywweDBlLDB4OTksMHgzNiwweDA0LDB4YzcsMHgwNiwweDM3Ci0sMHgzNywweDAxLDB4MDAsMHhjNiwweDA2LDB4Y2EsMHgzNCwweDAxLDB4ZTksMHg1OCwweDAwLDB4ODMsMHgwZSwweDliLDB4MzYsMHg0MAotLDB4ZTgsMHg1OCwweDAwLDB4YTEsMHgwNSwweDM3LDB4M2IsMHgwNiwweGU5LDB4MzYsMHg3NSwweDM3LDB4YTEsMHgwNywweDM3LDB4M2IKLSwweDA2LDB4ZWIsMHgzNiwweDc1LDB4MmUsMHhhMSwweDA5LDB4MzcsMHgzYiwweDA2LDB4ZWQsMHgzNiwweDc1LDB4MjUsMHhmZSwweDBlCi0sMHg3MSwweDM3LDB4NzUsMHgxYywweGI4LDB4ODcsMHgwMywweGNkLDB4M2EsMHg4MywweDBlLDB4OTksMHgzNiwweDEwLDB4YTEsMHg1MAotLDB4MzcsMHhjNywweDA2LDB4NTAsMHgzNywweDAwLDB4MDAsMHgwOSwweDA2LDB4OTksMHgzNiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDgKLSwweGU5LDB4MTQsMHhlZiwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQsMHhjNywweDA2LDB4MzcsMHgzNywweDAzLDB4MDAsMHhjNiwweDA2Ci0sMHhjYSwweDM0LDB4MDMsMHhjNiwweDA2LDB4YTAsMHgzNiwweDBhLDB4ZTksMHhmYywweGVlLDB4YTEsMHhkMSwweDM2LDB4MjYsMHgzYgotLDB4MDYsMHgyMCwweDAwLDB4NzUsMHgxNSwweGExLDB4ZDMsMHgzNiwweDI2LDB4M2IsMHgwNiwweDIyLDB4MDAsMHg3NSwweDEyLDB4YTEKLSwweGQ1LDB4MzYsMHgyNiwweDNiLDB4MDYsMHgyNCwweDAwLDB4NzUsMHgwZiwweGMzLDB4OGQsMHgzNiwweDIwLDB4MDAsMHhlOSwweDBiCi0sMHgwMCwweDhkLDB4MzYsMHgyMiwweDAwLDB4ZTksMHgwNCwweDAwLDB4OGQsMHgzNiwweDI0LDB4MDAsMHg4MywweGM0LDB4MDIsMHhmNwotLDB4MDYsMHhlNiwweDM0LDB4MDEsMHgwMCwweDc0LDB4MTUsMHgyNiwweDNhLDB4MDQsMHg3NywweDA4LDB4NzIsMHgwZSwweDI2LDB4M2EKLSwweDY0LDB4MDEsMHg3MiwweDA4LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweGU5LDB4YWIsMHhlZSwweGU4LDB4N2MsMHgwYSwweDhjCi0sMHhjMCwweDNkLDB4ZmYsMHhmZiwweDc0LDB4MWIsMHgyNiwweGM2LDB4MDYsMHgxOCwweDAwLDB4MTAsMHgyNiwweGM3LDB4MDYsMHgwNAotLDB4MDAsMHg0OSwweDNjLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDBjLDB4MDAsMHhjZCwweDUwLDB4YjksMHg0ZSwweDAwLDB4ZTIKLSwweGZlLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwYSwweGU5LDB4OTQsMHhlZSwweGU5LDB4N2IsMHhlZSwweDhmLDB4M2MsMHgwNiwweDNkCi0sMHgwNiwweDNkLDB4MDYsMHgzZCwweGQyLDB4M2MsMHhlYSwweDNjLDB4MDYsMHgzZCwweDA2LDB4M2QsMHhhMywweGI2LDB4MzQsMHg4MQotLDB4MjYsMHhjMiwweDM0LDB4YWYsMHhkZiwweGM3LDB4MDYsMHg0YywweDM3LDB4MDAsMHgwMCwweGI4LDB4OGEsMHgwMywweGNkLDB4M2EKLSwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDQsMHg3NSwweDBjLDB4ODAsMHgzZSwweDllLDB4MzYsMHgwNiwweDc0LDB4MDUsMHhjNiwweDA2Ci0sMHg5ZiwweDM2LDB4MDYsMHgzMywweGMwLDB4YTAsMHg5ZSwweDM2LDB4OGIsMHhmMCwweDJlLDB4ZmYsMHhhNCwweDRjLDB4M2MsMHhmNwotLDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc1LDB4MGUsMHg4MSwweDI2LDB4OWIsMHgzNiwweGZmLDB4YmYsMHhiOCwweDhiLDB4MDMKLSwweGNkLDB4M2EsMHhlOSwweDU0LDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEsMHg3NCwweDAzLDB4ZTksMHgxNywweGVlCi0sMHhjNywweDA2LDB4MzcsMHgzNywweDAyLDB4MDAsMHhjNiwweDA2LDB4Y2EsMHgzNCwweDAyLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNAotLDB4ODMsMHgwZSwweDUwLDB4MzcsMHgwNCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NSwweDJhLDB4ZTgsMHgxZiwweDBiLDB4ZTkKLSwweDI3LDB4MDAsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEsMHg3NSwweGQzLDB4YzcsMHgwNiwweDM3LDB4MzcsMHgwMiwweDAwCi0sMHhjNiwweDA2LDB4Y2EsMHgzNCwweDAyLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDAsMHhmNgotLDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDAzLDB4ZTgsMHhkZSwweDBhLDB4ODEsMHgyNiwweDliLDB4MzYsMHg3YywweGZmLDB4YmIKLSwweGZmLDB4ZmYsMHhjZCwweDUzLDB4Y2QsMHg1NCwweGU5LDB4YmUsMHhlZCwweGEzLDB4YjYsMHgzNCwweGU4LDB4YWQsMHgwMSwweGI4Ci0sMHg4NiwweDAzLDB4Y2QsMHgzOSwweGM3LDB4MDYsMHg0YywweDM3LDB4MDAsMHgwMCwweDgxLDB4MjYsMHhjMiwweDM0LDB4YWYsMHhkZgotLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MzQsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NCwweDU2LDB4ZjcKLSwweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEsMHg3NCwweDI3LDB4ZTgsMHgzNSwweDAxLDB4NzIsMHgxYywweGJlLDB4MDAsMHg0MCwweDg1Ci0sMHgzNiwweGMyLDB4MzQsMHg3NSwweDA4LDB4MDksMHgzNiwweGMyLDB4MzQsMHhmZiwweDA2LDB4OTIsMHgzNCwweGU4LDB4OGIsMHgwMQotLDB4NzMsMHgwNiwweDgxLDB4MGUsMHg5OSwweDM2LDB4ODAsMHgwMCwweGU5LDB4NmMsMHhlZCwweGU5LDB4YjUsMHgwMCwweGM3LDB4MDYKLSwweDM3LDB4MzcsMHgwMiwweDAwLDB4YzYsMHgwNiwweGNhLDB4MzQsMHgwMiwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQsMHg4MywweDBlCi0sMHg1MCwweDM3LDB4MDQsMHg4MCwweDNlLDB4OWUsMHgzNiwweDA4LDB4NzQsMHgwMywweGU4LDB4NWEsMHgwYSwweGU4LDB4ZWYsMHgwMAotLDB4NzIsMHhkNiwweGU5LDB4YzgsMHhmZiwweDgwLDB4M2UsMHg5ZSwweDM2LDB4MGEsMHg3NSwweDEyLDB4YzYsMHgwNiwweGEwLDB4MzYKLSwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwOCwweDAwLDB4NzQsMHgwMiwweGNkLDB4NTQsMHhlOCwweDM5LDB4MGEsMHg4MSwweDI2Ci0sMHg5YiwweDM2LDB4ZmYsMHhiZiwweGU4LDB4YzgsMHgwMCwweDcyLDB4YWYsMHhiOCwweDhiLDB4MDMsMHhjZCwweDM5LDB4ZTksMHg5YwotLDB4ZmYsMHhmNiwweDA2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHg1OCwweGEzLDB4YjYsMHgzNCwweGU4LDB4ZmUsMHgwMCwweDgxLDB4MjYKLSwweGMyLDB4MzQsMHhmZiwweGJmLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4NDgsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwCi0sMHgyMCwweDc0LDB4MjIsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4NDAsMHg3NSwweDA4LDB4ZTgsMHg5MSwweDAwLDB4NzIsMHgzMAotLDB4ZTksMHgyMiwweDAwLDB4MjYsMHhhMSwweDBjLDB4MDAsMHhhOSwweDYwLDB4MDAsMHg3NSwweDI0LDB4ODEsMHgwZSwweDY2LDB4MzcKLSwweDAwLDB4MDgsMHhlOSwweGQyLDB4ZWMsMHhjNywweDA2LDB4NGMsMHgzNywweDAwLDB4MDAsMHhlOCwweDcxLDB4MDAsMHg3MiwweDEwCi0sMHhiOCwweDhiLDB4MDMsMHhjZCwweDM5LDB4ZTgsMHhkMywweDAwLDB4NzMsMHgwNiwweDgxLDB4MGUsMHg5OSwweDM2LDB4ODAsMHgwMAotLDB4ZTksMHhiNCwweGVjLDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwNCwweDc1LDB4MGMsMHg4MCwweDNlLDB4OWUsMHgzNiwweDA2LDB4NzQKLSwweDQ2LDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwNiwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMSwweDc0LDB4MGMsMHg4MCwweDNlCi0sMHg5ZCwweDM2LDB4MDgsMHg3NSwweDA1LDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwYSwweGU4LDB4MzIsMHgwMCwweDcyLDB4ZDEsMHhlOAotLDB4OTksMHgwMCwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDgsMHg3NSwweDEzLDB4ODEsMHgwZSwweDk5LDB4MzYsMHg4MCwweDAwLDB4ZjcKLSwweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NSwweDA4LDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzOSwweGU5LDB4NjgsMHhlYywweGM2Ci0sMHgwNiwweDlmLDB4MzYsMHgwYSwweGU5LDB4NjAsMHhlYywweGI4LDB4ODYsMHgwMywweGNkLDB4M2EsMHhlOSwweDU4LDB4ZWMsMHgyNgotLDB4YTEsMHgwYywweDAwLDB4YTksMHg2MCwweDAwLDB4NzQsMHgwOCwweDgxLDB4MjYsMHhjMiwweDM0LDB4ZmYsMHhiZiwweGY5LDB4YzMKLSwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHg0MCwweDc0LDB4MTMsMHg4MSwweDBlLDB4NjYsMHgzNywweDAwLDB4MDgsMHhlOCwweDRhCi0sMHgwMCwweDczLDB4MDYsMHg4MSwweDBlLDB4OTksMHgzNiwweDgwLDB4MDAsMHhmOSwweGMzLDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMAotLDB4NDAsMHg4MCwweDI2LDB4NmYsMHgzNywweGZlLDB4ODEsMHgyNiwweDliLDB4MzYsMHg3ZiwweGZmLDB4YzYsMHgwNiwweGEwLDB4MzYKLSwweDAwLDB4ZjgsMHhjMywweDgxLDB4MGUsMHg5OSwweDM2LDB4MDAsMHgwMSwweGU5LDB4MjEsMHhlYywweDI2LDB4YTEsMHgyMCwweDAwCi0sMHhhMywweGZiLDB4MzYsMHhhMywweGFhLDB4MzQsMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4ZmQsMHgzNiwweGEzLDB4YWMsMHgzNAotLDB4MjYsMHhhMSwweDI0LDB4MDAsMHhhMywweGZmLDB4MzYsMHhhMywweGFlLDB4MzQsMHhjMywweGExLDB4MDUsMHgzNywweDI2LDB4M2IKLSwweDA2LDB4MjAsMHgwMCwweDc1LDB4MTksMHhhMSwweDA3LDB4MzcsMHgyNiwweDNiLDB4MDYsMHgyMiwweDAwLDB4NzUsMHgwZiwweGExCi0sMHgwOSwweDM3LDB4MjYsMHgzYiwweDA2LDB4MjQsMHgwMCwweDc1LDB4MDUsMHhlOCwweDAyLDB4MDAsMHhmOCwweGMzLDB4NTEsMHgxZQotLDB4MDYsMHg4YiwweGM3LDB4OGQsMHgzNiwweDIwLDB4MDAsMHhiZiwweDA1LDB4MzcsMHhiOSwweDAzLDB4MDAsMHgxZSwweDA2LDB4MWYKLSwweDA3LDB4ZjMsMHhhNSwweDhiLDB4ZjgsMHg4ZCwweDM2LDB4MjAsMHgwMCwweGJmLDB4YTAsMHgzNCwweGI5LDB4MDMsMHgwMCwweGYzCi0sMHhhNSwweDA3LDB4MWYsMHg1OSwweDhiLDB4ZjgsMHhhMSwweDA3LDB4MzcsMHhhMywweGE2LDB4MzQsMHhhMSwweDA5LDB4MzcsMHhhMwotLDB4YTgsMHgzNCwweGY5LDB4YzMsMHhjNiwweDA2LDB4YjYsMHgzNCwweDAxLDB4ZTksMHg4YiwweGViLDB4ZTgsMHg4NywweDA4LDB4OGIKLSwweGYwLDB4MDUsMHgxMiwweDAwLDB4MjYsMHgyOSwweDA2LDB4MGUsMHgwMCwweDI2LDB4OGIsMHg0NCwweDJhLDB4MjYsMHgzYSwweDA2Ci0sMHgwZSwweDAwLDB4NzUsMHg1YiwweDI2LDB4ODMsMHgyZSwweDBlLDB4MDAsMHgwMiwweDgwLDB4ZmMsMHgyNywweDc1LDB4NTAsMHgyNgotLDB4OGIsMHg0NCwweDJjLDB4YTksMHhmZiwweGZmLDB4NzUsMHg0NywweDhiLDB4ZmUsMHgzMywweGMwLDB4MjYsMHhmNiwweDQ1LDB4M2MKLSwweDgwLDB4NzQsMHgwNiwweDI2LDB4OGEsMHg0NSwweDNhLDB4MjQsMHgxZiwweDAzLDB4ZjgsMHgyNiwweDgwLDB4N2QsMHg0NSwweDA5Ci0sMHg3NSwweDJkLDB4OGMsMHhjMiwweDhlLDB4MDYsMHgzOCwweDM0LDB4OGUsMHhkYSwweDhiLDB4MGUsMHgwZSwweDAwLDB4MjYsMHg4OQotLDB4MGUsMHgwZSwweDAwLDB4OGQsMHg3NCwweDJjLDB4YmYsMHgxOCwweDAwLDB4ZjMsMHhhNCwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4MjYKLSwweGM3LDB4MDYsMHgwNCwweDAwLDB4YjUsMHgzZiwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4Y2QsMHg1MCwweGI4Ci0sMHgwNiwweDgwLDB4ZTksMHhlZiwweGU5LDB4MjYsMHhhMSwweDBjLDB4MDAsMHhhMywweDkzLDB4MzcsMHg4MywweDBlLDB4OTksMHgzNgotLDB4MDEsMHhlOSwweDAwLDB4ZWIsMHgyNiwweDgwLDB4M2UsMHgxYywweDAwLDB4ZmYsMHg3NSwweDJmLDB4MjYsMHg4MCwweDNlLDB4MWUKLSwweDAwLDB4ZmYsMHg3NSwweDI3LDB4MjYsMHhmNywweDA2LDB4MGMsMHgwMCwweDQwLDB4MDAsMHg3NSwweDFiLDB4YTEsMHhkMSwweDM2Ci0sMHgyNiwweGEzLDB4MWEsMHgwMCwweGExLDB4ZDMsMHgzNiwweDI2LDB4YTMsMHgxYywweDAwLDB4YTEsMHhkNSwweDM2LDB4MjYsMHhhMwotLDB4MWUsMHgwMCwweGI4LDB4MGEsMHg4MCwweGU4LDB4MzYsMHgwNywweGU5LDB4ZTIsMHhlYSwweGZmLDB4MDYsMHg5MCwweDM0LDB4YmUKLSwweDBhLDB4MDAsMHhjNiwweDA2LDB4YjYsMHgzNCwweDAxLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc1LDB4MDUsMHg4MywweDBlCi0sMHhjMiwweDM0LDB4MDEsMHhlOSwweGI2LDB4ZWEsMHg4MCwweDNlLDB4OWQsMHgzNiwweDBhLDB4NzUsMHgwZiwweDI2LDB4YTEsMHgwYwotLDB4MDAsMHgyNSwweDA3LDB4MDAsMHgzZCwweDA0LDB4MDAsMHg3NSwweDAzLDB4ZTgsMHg3OSwweDAwLDB4YTEsMHhmMywweDM2LDB4ODYKLSwweGUwLDB4ZTcsMHgxZSwweGEzLDB4ZTMsMHgzNiwweDgxLDB4MjYsMHgwYiwweDM3LDB4MDAsMHgwMywweDgxLDB4MjYsMHgwZCwweDM3Ci0sMHg3YiwweDdmLDB4ODMsMHgwZSwweDBkLDB4MzcsMHg0OCwweGU4LDB4MWUsMHgwMCwweDI2LDB4YTEsMHgwYywweDAwLDB4MjUsMHgwNwotLDB4MDAsMHgzZCwweDA0LDB4MDAsMHg3NCwweDA5LDB4MjYsMHhmNywweDA2LDB4MGMsMHgwMCwweDIwLDB4MDAsMHg3NSwweDA2LDB4YjgKLSwweDAxLDB4MDAsMHhlOSwweDNmLDB4ZTksMHhlOSwweDVmLDB4ZWEsMHhjNywweDA2LDB4NDEsMHgzNywweDAwLDB4MDAsMHhiOCwweDdmCi0sMHgwMywweGNkLDB4M2EsMHhhMSwweDFkLDB4MzcsMHhhMywweGM0LDB4MzQsMHg4NiwweGUwLDB4NjgsMHg3ZiwweDAzLDB4MWYsMHhhMwotLDB4MDYsMHgwMCwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4YTEsMHgwYiwweDM3LDB4YTMsMHhiMiwweDM0LDB4YTEsMHgwZCwweDM3LDB4YTMKLSwweGI0LDB4MzQsMHhhMSwweGYzLDB4MzYsMHhhMywweGM4LDB4MzQsMHhhMSwweGVmLDB4MzYsMHhhMywweDljLDB4MzQsMHhhMSwweGYxCi0sMHgzNiwweGEzLDB4OWUsMHgzNCwweGMzLDB4ODAsMHgwZSwweDlkLDB4MzYsMHg4MCwweGJlLDB4MDAsMHgwMCwweGU4LDB4YjQsMHgwNwotLDB4YjgsMHg3YiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2MsMHgwMywweGNkLDB4MzksMHhjNywweDA2LDB4MzMsMHgzNywweDAyLDB4MDAKLSwweGExLDB4ZTUsMHgzNiwweGU3LDB4MmUsMHhhMSwweGU3LDB4MzYsMHhlNywweDNlLDB4YjgsMHg4MiwweDAzLDB4Y2QsMHgzYSwweGY3Ci0sMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzUsMHgwMywweGU4LDB4ZmQsMHgwNiwweGExLDB4ZDMsMHgzNiwweGEzLDB4ZWYsMHgzNgotLDB4YTMsMHg5YywweDM0LDB4YTEsMHhkNSwweDM2LDB4YTMsMHhmMSwweDM2LDB4YTMsMHg5ZSwweDM0LDB4YzMsMHhmNiwweDA2LDB4OWQKLSwweDM2LDB4ODAsMHg3NCwweDMxLDB4YmUsMHgyMiwweDAwLDB4ZTksMHgxNywweDAwLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0Ci0sMHgyNCwweGJlLDB4MjMsMHgwMCwweGU5LDB4MGEsMHgwMCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDE3LDB4YmUsMHgyNAotLDB4MDAsMHg1NiwweGU4LDB4YTgsMHgwNSwweDhjLDB4YzAsMHgzZCwweGZmLDB4ZmYsMHg1ZSwweDc0LDB4MDUsMHhlOCwweGQ3LDB4ZWYKLSwweGNkLDB4NTAsMHhlOSwweDFmLDB4ZTgsMHhlOSwweDlmLDB4ZTksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhiOCwweDg0LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4YSwweDAzLDB4Y2QsMHgzOSwweGU5LDB4ZjcsMHgwMCwweDgwLDB4M2UsMHhhMAotLDB4MzYsMHgwOCwweDc1LDB4MmUsMHhhOSwweGQwLDB4MDcsMHg3NSwweDJjLDB4YTEsMHhiMSwweDM2LDB4MGQsMHgwMCwweDA0LDB4ZTcKLSwweDA4LDB4ZTUsMHgwMCwweDI1LDB4ZmYsMHg3MywweGU3LDB4MDAsMHhiOCwweDhhLDB4MDMsMHhjZCwweDNhLDB4ZTgsMHhjMywweDA2Ci0sMHgzMywweGMwLDB4ZTcsMHgwZSwweGU1LDB4MGEsMHgyNSwweGMzLDB4MTcsMHhlNywweDBhLDB4Y2QsMHg1NCwweGM2LDB4MDYsMHhhMAotLDB4MzYsMHgwMCwweGU5LDB4NjgsMHhlOSwweGJlLDB4MDQsMHgwMCwweGU5LDB4M2YsMHhlOSwweDgzLDB4MjYsMHg5YiwweDM2LDB4YmYKLSwweGM2LDB4MDYsMHg3MSwweDM3LDB4MDMsMHhiOCwweDg2LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4OCwweDAzLDB4Y2QsMHgzYSwweGI4Ci0sMHg4MywweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODcsMHgwMywweGNkLDB4MzksMHg4MSwweDBlLDB4YzIsMHgzNCwweDAwLDB4MjAsMHhlOQotLDB4OTIsMHgwMCwweGU4LDB4NDksMHgwNiwweGI4LDB4ODcsMHgwMywweGNkLDB4MzksMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4YjgKLSwweDg0LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4OCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OGIsMHgwMywweGNkLDB4M2EsMHhiOCwweDgzCi0sMHgwMywweGNkLDB4M2EsMHhiOCwweDg2LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NSwweDAzLDB4Y2QsMHgzYSwweGMzLDB4ZTUsMHgwMAotLDB4MjUsMHhmZiwweDUzLDB4ZTcsMHgwMCwweDgzLDB4MGUsMHhjMiwweDM0LDB4NDAsMHg4MywweDI2LDB4YzIsMHgzNCwweGVmLDB4ZTgKLSwweDBjLDB4MDYsMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4YjgsMHg4YSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODUsMHgwMywweGNkCi0sMHgzYSwweGI4LDB4ODYsMHgwMywweGNkLDB4M2EsMHhiOCwweDgzLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NywweDAzLDB4Y2QsMHgzYQotLDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODQsMHgwMywweGNkLDB4M2EsMHhiOCwweDg5LDB4MDMsMHhjZCwweDNhLDB4YzMKLSwweDgzLDB4MGUsMHhjMiwweDM0LDB4NTAsMHhlOCwweDE4LDB4MDQsMHhlOCwweGQzLDB4MDUsMHhmNiwweDA2LDB4NmYsMHgzNywweDAxCi0sMHg3NSwweDEyLDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzOSwweDgzLDB4M2UsMHgwZiwweDM3LDB4MDAsMHg3NSwweDA2LDB4YzcsMHgwNgotLDB4MGYsMHgzNywweDA0LDB4MDAsMHhhMSwweDlkLDB4MzYsMHg4MCwweGZjLDB4MDgsMHg3NCwweDA1LDB4YjgsMHg4NCwweDAzLDB4Y2QKLSwweDM5LDB4ZTUsMHgwMiwweDBkLDB4MDEsMHgwOCwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIsMHhhMSwweDlkLDB4MzYsMHg4NiwweGUwCi0sMHgzMiwweGU0LDB4OGIsMHhmMCwweGQxLDB4ZWUsMHgzMywweGMwLDB4MGQsMHgyMCwweDAwLDB4MDksMHgwNiwweGFkLDB4MzYsMHhhMQotLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhlOSwweDUzLDB4ZTgsMHhlOSwweDVhLDB4ZTgsMHgzMywweGMwLDB4YTAsMHgxYiwweDM3LDB4ZDEKLSwweGUwLDB4M2EsMHgwNiwweGEwLDB4MzYsMHg3NSwweDAzLDB4ZTksMHhiYSwweGZmLDB4ZTksMHg2MCwweGU4LDB4YzcsMHgwNiwweDQxCi0sMHgzNywweDAwLDB4MDAsMHhlOCwweGMxLDB4ZTEsMHhlOCwweDZhLDB4MDYsMHgzMywweGMwLDB4MGQsMHg0MSwweDAwLDB4ZTcsMHg1NgotLDB4YTEsMHhiMSwweDM2LDB4MGQsMHgwMCwweDEwLDB4ZTcsMHgwOCwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHgwZCwweDAzLDB4MDAKLSwweGU3LDB4MDIsMHhhMSwweGIzLDB4MzYsMHhlNywweDBhLDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGExLDB4YWQsMHgzNiwweGU3Ci0sMHgwNCwweGU4LDB4N2MsMHgwMywweGU4LDB4OWYsMHgwMywweGM3LDB4MDYsMHgxZCwweDM3LDB4MDAsMHhjOCwweGM3LDB4MDYsMHgwYgotLDB4MzcsMHgwMCwweDAzLDB4YzcsMHgwNiwweDBkLDB4MzcsMHg3YiwweDdmLDB4MzMsMHhjMCwweGEzLDB4OTksMHgzNiwweGEzLDB4OWIKLSwweDM2LDB4YTMsMHg5ZCwweDM2LDB4YTMsMHg5ZiwweDM2LDB4YTMsMHg0YywweDM3LDB4YTMsMHhmMywweDM2LDB4YTMsMHhlZiwweDM2Ci0sMHhhMywweGYxLDB4MzYsMHhlOCwweDgyLDB4ZmQsMHhjNiwweDA2LDB4OWYsMHgzNiwweDAyLDB4ZTksMHhlZiwweGU3LDB4ZTUsMHgwMgotLDB4MGQsMHgwMSwweDg4LDB4MjUsMHhlZiwweGZmLDB4MGQsMHgwMCwweDQwLDB4MGQsMHgwMCwweDA0LDB4ZTcsMHgwMiwweGU4LDB4ZjIKLSwweDA1LDB4ZTUsMHgwYSwweDBkLDB4NDAsMHgwMCwweGU3LDB4MGEsMHgzMywweGMwLDB4YTMsMHg4MSwweDM3LDB4YTMsMHg4NSwweDM3Ci0sMHhhMywweDgzLDB4MzcsMHhhMywweDg3LDB4MzcsMHhhMywweDg5LDB4MzcsMHhlNSwweDAwLDB4MGQsMHgwMCwweDg0LDB4ZTcsMHgwMAotLDB4YjgsMHg4YywweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODAsMHgwMCwweGNkLDB4MzUsMHhjNywweDA2LDB4YWEsMHgwMiwweGZmLDB4ZmYKLSwweGU1LDB4MDAsMHgyNSwweGZmLDB4N2IsMHhlNywweDAwLDB4ODEsMHgwZSwweDlhLDB4MzcsMHg4MCwweDAwLDB4YjgsMHg3ZSwweDAzCi0sMHhjZCwweDM5LDB4MzMsMHhjMCwweGU3LDB4MGUsMHhiZSwweDA4LDB4MDAsMHg4ZSwweDA2LDB4MzgsMHgzNCwweGU4LDB4YTcsMHhlZAotLDB4ODMsMHgyNiwweGVmLDB4MzQsMHhkZiwweGZmLDB4MDYsMHg4MSwweDM3LDB4Y2QsMHg1MCwweDgzLDB4MGUsMHhlZiwweDM0LDB4MjAKLSwweGMzLDB4ZjcsMHgwNiwweDlhLDB4MzcsMHg4MCwweDAwLDB4NzQsMHgzZCwweGE5LDB4ZDAsMHgwNywweDc0LDB4MTAsMHhhOSwweDAwCi0sMHgwNCwweDc0LDB4MTIsMHgzMywweGMwLDB4ZTcsMHgwZSwweGZmLDB4MDYsMHg4NywweDM3LDB4ZTksMHhkMiwweGZmLDB4ZmYsMHgwNgotLDB4ODUsMHgzNywweGU5LDB4Y2IsMHhmZiwweGZmLDB4MDYsMHg4MywweDM3LDB4ZTksMHhjNCwweGZmLDB4ODMsMHgyNiwweDlhLDB4MzcKLSwweDdmLDB4YTEsMHg4OSwweDM3LDB4MDMsMHgwNiwweDg3LDB4MzcsMHgzZCwweDA1LDB4MDAsMHg3ZiwweDAxLDB4YzMsMHhiYiwweGZmCi0sMHg3ZiwweGNkLDB4NTMsMHhlOSwweDAwLDB4MDAsMHhlNSwweDAyLDB4MjUsMHhmZiwweGZiLDB4MjUsMHhlZiwweGZmLDB4MGQsMHgwMQotLDB4MDAsMHhlNywweDAyLDB4YTEsMHg4MywweDM3LDB4M2IsMHgwNiwweDQ2LDB4MzcsMHg3ZiwweDJhLDB4YTEsMHg4NSwweDM3LDB4M2IKLSwweDA2LDB4NDgsMHgzNywweDdjLDB4MjEsMHhhMSwweDg5LDB4MzcsMHgwMywweDA2LDB4ODcsMHgzNywweDNkLDB4MDUsMHgwMCwweDdmCi0sMHgxNSwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MDQsMHhlNSwweDAyLDB4MjUsMHhmZiwweGY3LDB4MGQsMHgwMSwweDAwLDB4MjUsMHhlZgotLDB4ZmYsMHhlNywweDAyLDB4ZTksMHhmNywweGU2LDB4YmUsMHgwMSwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMywweDAwLDB4NzQKLSwweDBhLDB4ODMsMHgyNiwweDliLDB4MzYsMHhmYywweDgzLDB4MGUsMHhjMiwweDM0LDB4MDQsMHhlOSwweGQwLDB4ZTYsMHhiOCwweDdiCi0sMHgwMywweGNkLDB4MzksMHhlNSwweDAyLDB4MGQsMHgwMSwweDYwLDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMiwweGM3LDB4MDYsMHhmMQotLDB4MzQsMHgyMCwweDAzLDB4YjgsMHg4ZSwweDAzLDB4Y2QsMHgzOSwweGMzLDB4ODEsMHgyNiwweGMyLDB4MzQsMHg3ZiwweGZmLDB4ODAKLSwweDBlLDB4NmYsMHgzNywweDAxLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMywweDAwLDB4NzQsMHhkMiwweGI4LDB4N2IsMHgwMywweGNkCi0sMHgzYSwweGI4LDB4N2QsMHgwMywweGNkLDB4MzksMHg4MywweDI2LDB4OWIsMHgzNiwweGVmLDB4MzMsMHhjMCwweGIwLDB4OGEsMHhhMgotLDB4OWYsMHgzNiwweGEyLDB4OWQsMHgzNiwweGM3LDB4MDYsMHg0YywweDM3LDB4MDEsMHgwMCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDQKLSwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHg0MCwweDAwLDB4NzUsMHgwNiwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDMsMHgwMCwweGI4Ci0sMHg4ZCwweDAzLDB4Y2QsMHgzOSwweGU4LDB4MDAsMHhkNSwweGU1LDB4MDIsMHgwZCwweDAxLDB4NDAsMHgyNSwweGVmLDB4ZmYsMHg4YgotLDB4ZDgsMHhiOCwweDdjLDB4MDMsMHhjZCwweDM5LDB4YzcsMHgwNiwweDMzLDB4MzcsMHgwMiwweDAwLDB4OGIsMHhjMywweDBkLDB4MDAKLSwweDIwLDB4MjUsMHhmOSwweGZmLDB4MGIsMHgwNiwweGU4LDB4M2EsMHhlNywweDAyLDB4YzMsMHhmZiwweDBlLDB4ZjEsMHgzNCwweDc1Ci0sMHgwMSwweGMzLDB4ZTUsMHg0ZSwweGE5LDB4MDEsMHgwMCwweDc1LDB4MTIsMHhlNSwweDAwLDB4YTksMHgwMCwweDA0LDB4NzUsMHgwNQotLDB4MGQsMHgwMCwweDA0LDB4ZTcsMHgwMCwweGI4LDB4OGUsMHgwMywweGNkLDB4MzksMHhjMywweGU1LDB4MDAsMHhhOSwweDAwLDB4MDQKLSwweDc0LDB4ZjMsMHgyNSwweGZmLDB4ZmIsMHhlNywweDAwLDB4ZTksMHhlYiwweGZmLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNCwweDgzCi0sMHgyNiwweDliLDB4MzYsMHhmYywweDgxLDB4MGUsMHg5YiwweDM2LDB4ODAsMHgwMCwweGU5LDB4MTAsMHhlNiwweGI4LDB4OGUsMHgwMwotLDB4Y2QsMHgzYSwweGNkLDB4NTQsMHg4MSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MTgsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4YjgKLSwweDdiLDB4MDMsMHhjZCwweDM5LDB4YTEsMHhkMywweDM2LDB4YTMsMHg4ZiwweDM3LDB4YTEsMHhkNSwweDM2LDB4YTMsMHg5MSwweDM3Ci0sMHhjNywweDA2LDB4OGIsMHgzNywweDAyLDB4MDAsMHhjNywweDA2LDB4OGQsMHgzNywweDAyLDB4MDAsMHg4MywweDBlLDB4OTksMHgzNgotLDB4NDAsMHhlOSwweGQ5LDB4ZTUsMHg4MCwweDNlLDB4OWYsMHgzNiwweDA2LDB4NzUsMHgxNSwweGE5LDB4ZDAsMHgwNywweDc1LDB4ZWMKLSwweDI1LDB4MDAsMHgxOCwweDc1LDB4MGUsMHhmZiwweDBlLDB4OGIsMHgzNywweDc1LDB4ZTEsMHhjNiwweDA2LDB4OWYsMHgzNiwweDA4Ci0sMHhlOSwweGJhLDB4ZTUsMHhmZiwweDBlLDB4OGQsMHgzNywweDc1LDB4ZDMsMHhiZSwweDA4LDB4MDAsMHhlOSwweDlmLDB4ZTUsMHhiOAotLDB4N2IsMHgwMywweGNkLDB4MzksMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NCwweDA4LDB4YzYsMHgwNiwweDlmLDB4MzYKLSwweDBhLDB4ZTksMHgwZCwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDQwLDB4NzQsMHgwYiwweGI4LDB4OGIsMHgwMywweGNkCi0sMHgzOSwweDgxLDB4MGUsMHg5OSwweDM2LDB4ODAsMHgwMCwweGU5LDB4ODMsMHhlNSwweGI4LDB4N2IsMHgwMywweGNkLDB4MzksMHhjNwotLDB4MDYsMHg4YiwweDM3LDB4MDQsMHgwMCwweGM3LDB4MDYsMHg4ZCwweDM3LDB4MDQsMHgwMCwweDgxLDB4MGUsMHg5OSwweDM2LDB4MDAKLSwweDAyLDB4ZTksMHg2OSwweGU1LDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc1LDB4MWIsMHhhOSwweGQwLDB4MDcsMHg3NSwweGViCi0sMHhhOSwweDAwLDB4MTgsMHg3NSwweDBjLDB4ZmYsMHgwZSwweDhkLDB4MzcsMHg3NSwweGUwLDB4ZTgsMHgxNywweGZiLDB4ZTksMHg0YwotLDB4ZTUsMHhiOCwweDgyLDB4MDMsMHhjZCwweDM5LDB4YzMsMHhmZiwweDBlLDB4OGIsMHgzNywweDc1LDB4Y2UsMHhiZSwweDA5LDB4MDAKLSwweGU5LDB4MmIsMHhlNSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDAsMHgwMCwweGM3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMCwweGU4Ci0sMHgzYywweDAyLDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGU3LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweDgxLDB4MjYsMHg5YgotLDB4MzYsMHhmZiwweDdmLDB4ZTUsMHgwMiwweDBkLDB4MDEsMHgwMCwweDI1LDB4ZWYsMHhmZiwweDI1LDB4ZmYsMHhkZiwweGU3LDB4MDIKLSwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHgzMywweGMwLDB4YTMsMHg5ZCwweDM2LDB4YTMsMHg5ZiwweDM2LDB4ZTgsMHg1MCwweDAwCi0sMHhlOCwweDczLDB4MDAsMHhiOCwweDgxLDB4MDMsMHhjZCwweDM5LDB4YzMsMHhmNywweDA2LDB4OWIsMHgzNiwweDAzLDB4MDAsMHg3NAotLDB4MGQsMHhjNiwweDA2LDB4OWYsMHgzNiwweDAyLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwMCwweGU5LDB4ZGYsMHhlNCwweDgzLDB4MGUKLSwweDliLDB4MzYsMHgxMCwweGM3LDB4MDYsMHg5OSwweDM2LDB4MDAsMHgwMCwweGU4LDB4ZTcsMHgwMiwweGU1LDB4NTYsMHgwZCwweDAyCi0sMHgwMCwweGU3LDB4NTYsMHhjNywweDA2LDB4YTgsMHgwMiwweDAwLDB4MDAsMHg4YiwweDM2LDB4M2QsMHgzNywweGU4LDB4NDQsMHgwMgotLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwZSwweGU5LDB4YjUsMHhlNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDA2LDB4YjgsMHg4YSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODUsMHgwMywweGNkLDB4M2EsMHhiOCwweDg2LDB4MDMsMHhjZCwweDNhCi0sMHhiOCwweDgzLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NywweDAzLDB4Y2QsMHgzYSwweGI4LDB4OGIsMHgwMywweGNkLDB4M2EsMHhiOAotLDB4ODgsMHgwMywweGNkLDB4M2EsMHgwNywweGMzLDB4MDYsMHhiOCwweDg4LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3YiwweDAzLDB4Y2QKLSwweDNhLDB4YjgsMHg4MiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2YsMHgwMywweGNkLDB4M2EsMHhiOCwweDdjLDB4MDMsMHhjZCwweDNhCi0sMHhiOCwweDdlLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4MCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODEsMHgwMywweGNkLDB4M2EsMHhiOAotLDB4ODQsMHgwMywweGNkLDB4M2EsMHhiOCwweDg5LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3ZCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OGQKLSwweDAzLDB4Y2QsMHgzYSwweGM3LDB4MDYsMHg0MSwweDM3LDB4MDAsMHgwMCwweDA3LDB4YzMsMHgwNiwweDhlLDB4MDYsMHgzOCwweDM0Ci0sMHgxZiwweDhiLDB4MGUsMHgwZSwweDAwLDB4MjYsMHg4OSwweDBlLDB4MGUsMHgwMCwweGJlLDB4MTgsMHgwMCwweGJmLDB4MTgsMHgwMAotLDB4ZjMsMHhhNCwweDA2LDB4MWUsMHgwNywweGNkLDB4MzQsMHgwNywweDMzLDB4YzAsMHg4ZSwweGQ4LDB4YzMsMHgyNiwweGY2LDB4MDYKLSwweDIwLDB4MDAsMHg4MCwweDc0LDB4NDQsMHgzMywweGMwLDB4MjYsMHhhMCwweDI2LDB4MDAsMHgyNCwweDFmLDB4OGIsMHhmMCwweDI2Ci0sMHg4YiwweDVjLDB4MjgsMHg4OSwweDFlLDB4NmEsMHgzNywweDA2LDB4OGUsMHgwNiwweDM4LDB4MzQsMHgxZiwweGMwLDB4ZTMsMHgwNAotLDB4MjYsMHg4OCwweDVjLDB4MjgsMHg4YiwweGM2LDB4YjksMHgwNiwweDAwLDB4YmUsMHgyMCwweDAwLDB4YmYsMHgxYSwweDAwLDB4ZjMKLSwweGE0LDB4OGIsMHhjOCwweDgzLDB4YzcsMHgwNiwweGYzLDB4YTQsMHgyNiwweDgxLDB4MjYsMHgyNiwweDAwLDB4MWYsMHg4MCwweDI2Ci0sMHg4MSwweDM2LDB4MjYsMHgwMCwweDAwLDB4ODAsMHhlOSwweGE5LDB4ZmYsMHgyNiwweDhiLDB4MWUsMHgyOCwweDAwLDB4ODksMHgxZQotLDB4NmEsMHgzNywweDA2LDB4OGUsMHgwNiwweDM4LDB4MzQsMHgxZiwweGMwLDB4ZTMsMHgwNCwweDI2LDB4ODgsMHgxZSwweDI4LDB4MDAKLSwweGI5LDB4MDYsMHgwMCwweGJlLDB4MjAsMHgwMCwweGJmLDB4MWEsMHgwMCwweGYzLDB4YTQsMHhlOSwweDg0LDB4ZmYsMHg4NiwweGM0Ci0sMHhhMywweDY4LDB4MzcsMHhlOCwweDg3LDB4ZmYsMHhmNywweDA2LDB4NmEsMHgzNywweDBmLDB4MDAsMHg3NCwweDEwLDB4ODAsMHgzZQotLDB4OWUsMHgzNiwweDAwLDB4NzUsMHgwOSwweGJlLDB4MDAsMHgwMCwweGU4LDB4YWMsMHhlOSwweGNkLDB4NTAsMHhjMywweGMzLDB4NTAKLSwweDU2LDB4MDYsMHgzMywweGMwLDB4MjYsMHhmNiwweDA2LDB4MjAsMHgwMCwweDgwLDB4NzQsMHgwNiwweDI2LDB4YTAsMHgyNiwweDAwCi0sMHgyNCwweDFmLDB4OGIsMHhmMCwweDI2LDB4OGIsMHg1YywweDI2LDB4ODYsMHhmYiwweDgzLDB4ZWIsMHgwNCwweDc0LDB4NGYsMHg4MwotLDB4YzYsMHgyYSwweDhjLDB4YzAsMHg4ZSwweGQ4LDB4YjksMHgwNywweDAwLDB4MzMsMHhjMCwweDhlLDB4YzAsMHhiZiwweDcyLDB4MzcKLSwweGYzLDB4YWIsMHgzMywweGM5LDB4OGEsMHgwYywweDgwLDB4ZjksMHgwMCwweDc1LDB4MDMsMHhlOSwweDMwLDB4MDAsMHgzYiwweGQ5Ci0sMHg3MywweDAzLDB4ZTksMHgyOSwweDAwLDB4MmIsMHhkOSwweDhhLDB4NDQsMHgwMSwweDI1LDB4M2YsMHgwMCwweDc0LDB4MTksMHgzZAotLDB4MGIsMHgwMCwweDdkLDB4MTQsMHhkMSwweGUwLDB4OGIsMHhmOCwweDJlLDB4OGIsMHhiZCwweDVjLDB4NDksMHg4ZCwweDc0LDB4MDIKLSwweDgzLDB4ZTksMHgwMiwweGYzLDB4YTQsMHhlOSwweDAyLDB4MDAsMHgwMywweGYxLDB4MjMsMHhkYiwweDc1LDB4YzQsMHgzMywweGMwCi0sMHg4ZSwweGQ4LDB4MDcsMHg1ZSwweDU4LDB4YzMsMHgzMywweGMwLDB4MjYsMHhmNiwweDA2LDB4MjAsMHgwMCwweDgwLDB4NzQsMHgwNgotLDB4MjYsMHhhMCwweDI2LDB4MDAsMHgyNCwweDFmLDB4YzMsMHhlNSwweDBhLDB4MjUsMHhjMywweGJmLDB4ZTcsMHgwYSwweGI4LDB4ODYKLSwweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODMsMHgwMywweGNkLDB4MzksMHg4MSwweDI2LDB4OWIsMHgzNiwweDdjLDB4ZGYsMHhiOCwweDg1Ci0sMHgwMywweGNkLDB4M2EsMHhlNSwweDAyLDB4MjUsMHhmZiwweGYzLDB4MGQsMHgwMSwweDAwLDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMgotLDB4ZTUsMHgwMCwweDI1LDB4ZmYsMHg1MywweGU3LDB4MDAsMHhhMSwweGU3LDB4MzYsMHgyNSwweGZmLDB4ZmUsMHhhMywweGU3LDB4MzYKLSwweGU3LDB4M2UsMHg4MywweDI2LDB4OTksMHgzNiwweGNmLDB4ODEsMHgwZSwweGFmLDB4MzYsMHgwMCwweDEwLDB4YTEsMHhhZiwweDM2Ci0sMHhlNywweDA2LDB4YzMsMHhlNSwweDAyLDB4MGQsMHgwMSwweDBjLDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMiwweGExLDB4ZTcsMHgzNgotLDB4MGQsMHgwMCwweDAxLDB4ZTcsMHgzZSwweGEzLDB4ZTcsMHgzNiwweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAsMHgyMCwweDgzLDB4MGUKLSwweDk5LDB4MzYsMHgyMCwweDgxLDB4MjYsMHg5YiwweDM2LDB4N2MsMHhiZiwweDgxLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgxMCwweGExCi0sMHhhZiwweDM2LDB4ZTcsMHgwNiwweGI4LDB4ODYsMHgwMywweGNkLDB4MzksMHhiOCwweDg1LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MwotLDB4MDMsMHhjZCwweDNhLDB4YzMsMHgwYiwweGY2LDB4NzUsMHg0OSwweDA2LDB4OGUsMHgwNiwweDMyLDB4MzQsMHg4MCwweDNlLDB4ZTAKLSwweDM0LDB4MDEsMHg3NSwweDFiLDB4MjYsMHg4OSwweDM2LDB4MDYsMHgwMCwweDhlLDB4MDYsMHgzMiwweDM0LDB4MjYsMHhmNywweDA2Ci0sMHgwYSwweDAwLDB4MDAsMHgyMCwweDc0LDB4MDcsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgyMCwweDA3LDB4YzMsMHg4MAotLDB4M2UsMHhlMywweDM0LDB4MDEsMHg3NSwweDE5LDB4MjYsMHg4OSwweDM2LDB4MDYsMHgwMCwweDhlLDB4MDYsMHgzMiwweDM0LDB4MjYKLSwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgxMCwweDc0LDB4MDcsMHgyNiwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgxMCwweDA3Ci0sMHhjMywweGU5LDB4YjQsMHhmZiwweDUwLDB4NTEsMHg1NywweDMzLDB4YzAsMHhiOSwweDA2LDB4MDAsMHg4ZSwweGMwLDB4YmYsMHhkMQotLDB4MzYsMHhmMywweGFlLDB4NWYsMHg3NCwweDBjLDB4MjYsMHhmNiwweDA2LDB4MDAsMHgwMCwweGMwLDB4NzUsMHgwNCwweGY4LDB4NTkKLSwweDU4LDB4YzMsMHhmOSwweGU5LDB4ZjksMHhmZiwweDhiLDB4MDUsMHgwYiwweDQ1LDB4MDIsMHgwYiwweDQ1LDB4MDQsMHhjMywweDUyCi0sMHg1MCwweGU1LDB4MDYsMHgyNSwweDFlLDB4MDAsMHgzZCwweDFlLDB4MDAsMHg3NSwweGY2LDB4YjgsMHgwMSwweDgwLDB4ZTcsMHg1YQotLDB4NTgsMHg1YSwweGMzLDB4ZTgsMHhlOSwweGZmLDB4NTAsMHhlNSwweDAyLDB4MjUsMHhmZiwweDdmLDB4MGQsMHgwMSwweDAwLDB4MjUKLSwweGVmLDB4ZmYsMHhlNywweDAyLDB4MGQsMHgwMCwweDgwLDB4ZTcsMHgwMiwweGExLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhhMSwweGFmCi0sMHgzNiwweGU3LDB4MDYsMHg1OCwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MmUsMHgyYiwweGNlLDB4NDEsMHgxMCwweDQyLDB4N2IsMHg0MSwweDMwLDB4NDEsMHhhMiwweDQxLDB4YWYsMHg0NSwweDQ0LDB4MjkKLSwweGM3LDB4MmEsMHhjNywweDJhLDB4NjAsMHgzOSwweGY0LDB4M2EsMHg1YywweDNjLDB4MDksMHgzZCwweGIxLDB4M2QsMHgzNCwweDNmCi0sMHhjNywweDJhLDB4M2MsMHgzZiwweGM3LDB4MmEsMHhjNCwweDNmLDB4MTYsMHg0MCwweDE2LDB4NDAsMHhlZCwweDQwLDB4ZmEsMHg0MAotLDB4MDcsMHg0MSwweGM3LDB4MmEsMHhjNywweDJhLDB4YzcsMHgyYSwweGM3LDB4MmEsMHhkNiwweDUyLDB4MDAsMHgwMCwweDAxLDB4MzcKLSwweGU5LDB4MzYsMHhmMywweDM2LDB4ZWYsMHgzNiwweDFkLDB4MzcsMHgwZCwweDM3LDB4MGIsMHgzNywweDljLDB4MzcsMHgwMywweDM3Ci0sMHhmYiwweDM2LDB4NjIsMHgyZCwweDQwLDB4MDYsMHhkMSwweDJkLDB4ZjQsMHgwMSwweGJhLDB4NDQsMHg0MCwweDA2LDB4OGMsMHg0MwotLDB4NjQsMHgwMCwweGU4LDB4MmMsMHhjOCwweDAwLDB4ZDgsMHgyYiwweDA1LDB4MDAsMHhlOSwweDQ1LDB4NTAsMHgwMCwweDk3LDB4NDUKLSwweGZhLDB4MDAsMHhhZSwweDJkLDB4MDQsMHgwMSwweDZhLDB4NDIsMHgwMiwweDAwLDB4ZjYsMHgyYywweGJjLDB4MDIsMHg5MywweDJkCi0sMHhkYywweDA1LDB4MWQsMHgyZCwweDY0LDB4MDAsMHhhMSwweDJkLDB4MTQsMHgwMCwweGQ3LDB4M2EsMHgwOCwweDA3LDB4ODEsMHgyZAotLDB4NjQsMHgwMCwweGIzLDB4M2UsMHgwMiwweDAwLDB4MzAsMHg0MywweDY0LDB4MDAsMHhjNSwweDJjLDB4ZjQsMHgwMSwweDhiLDB4NDQKLSwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg4MCwweDNlLDB4ZmQsMHgzNCwweDAyLDB4NzQsMHgwYywweGU4LDB4MjAsMHgwNSwweGM3LDB4MDYsMHhhMSwweDM2LDB4MDAsMHgwMAotLDB4ZTksMHg5YSwweGY4LDB4ZmYsMHgwNiwweGMwLDB4MzMsMHhlOCwweDEwLDB4MDUsMHg4YiwweDM2LDB4M2QsMHgzNywweGU4LDB4NzMKLSwweGZlLDB4YzMsMHhjZCwweDM0LDB4ZTksMHhlOCwweDA1LDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwMCwweDAwLDB4YzcsMHgwNiwweDQxCi0sMHgzNywweDAwLDB4MDAsMHhlOCwweGVkLDB4ZmUsMHgzMywweGMwLDB4MGQsMHg0MSwweDAwLDB4ZTcsMHg1NiwweGExLDB4YjEsMHgzNgotLDB4MGQsMHgwMCwweDEwLDB4ZTcsMHgwOCwweGExLDB4YjMsMHgzNiwweGU3LDB4MGEsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4YTEKLSwweGFkLDB4MzYsMHhlNywweDA0LDB4ZTgsMHgyYiwweDA5LDB4YzcsMHgwNiwweDFkLDB4MzcsMHgwMCwweGM4LDB4YzcsMHgwNiwweDBiCi0sMHgzNywweDAwLDB4MDMsMHhjNywweDA2LDB4MGQsMHgzNywweDdiLDB4N2YsMHgzMywweGMwLDB4YTMsMHg5YiwweDM2LDB4YTMsMHg5ZAotLDB4MzYsMHhjNywweDA2LDB4NGMsMHgzNywweDAxLDB4MDAsMHhjNiwweDA2LDB4OWUsMHgzNiwweGZmLDB4YzcsMHgwNiwweDA1LDB4MzcKLSwweDAwLDB4MDAsMHhjNywweDA2LDB4MDcsMHgzNywweDAwLDB4MDAsMHhjNywweDA2LDB4MDksMHgzNywweDAwLDB4MDAsMHhhMywweGYzCi0sMHgzNiwweGEzLDB4ZWYsMHgzNiwweGEzLDB4ZjEsMHgzNiwweGU4LDB4ZmUsMHhmNSwweGU1LDB4MDIsMHgyNSwweGY5LDB4ZmYsMHgwZAotLDB4MDMsMHgwMCwweDBkLDB4MDAsMHg4OCwweDI1LDB4ZWYsMHhmZiwweDBkLDB4MDAsMHg0MCwweDBkLDB4MDAsMHgwNCwweGU3LDB4MDIKLSwweGI4LDB4OGYsMHgwMywweGNkLDB4MzksMHhiOCwweDgwLDB4MDAsMHhjZCwweDM1LDB4YzcsMHgwNiwweGFhLDB4MDIsMHhmZiwweGZmCi0sMHhhMSwweGE5LDB4MzYsMHhhMywweGE3LDB4MzYsMHgwZCwweDAwLDB4YTQsMHgwZCwweDAwLDB4MDgsMHhlNywweDAwLDB4YTMsMHhhOQotLDB4MzYsMHhjNywweDA2LDB4YTMsMHgzNiwweDAxLDB4MDAsMHhjNywweDA2LDB4YTUsMHgzNiwweDBjLDB4MDAsMHg4MywweDNlLDB4YTUKLSwweDM2LDB4MDAsMHg3NSwweDA5LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwNSwweDAwLDB4ZTksMHgxMywweGZmLDB4ZmYsMHgwZSwweGE1Ci0sMHgzNiwweGJlLDB4MTEsMHgwMCwweGU4LDB4MjIsMHgwNSwweGI4LDB4OTAsMHgwMywweGNkLDB4MzksMHhjMywweDgzLDB4M2UsMHhhMwotLDB4MzYsMHgwMSwweDc0LDB4ZDksMHhjMywweGI4LDB4OTAsMHgwMywweGNkLDB4M2EsMHgyNiwweGEwLDB4MmIsMHgwMCwweDI2LDB4OGIKLSwweDFlLDB4MmMsMHgwMCwweGNkLDB4MzQsMHg4MywweDNlLDB4YTMsMHgzNiwweDAxLDB4NzQsMHgwMywweGU5LDB4ZjAsMHgwNCwweDNjCi0sMHgwZiwweDc1LDB4MWUsMHg4MSwweGZiLDB4MDAsMHgwMiwweDc1LDB4MTgsMHgyNiwweGExLDB4MjAsMHgwMCwweGEzLDB4MDUsMHgzNwotLDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweDA3LDB4MzcsMHgyNiwweGExLDB4MjQsMHgwMCwweGEzLDB4MDksMHgzNywweGU5LDB4MDkKLSwweDAwLDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMSwweDAwLDB4ZTksMHhiNiwweGZlLDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwMiwweDAwCi0sMHhjNiwweDA2LDB4OWUsMHgzNiwweGZmLDB4ZTgsMHhjYiwweGZkLDB4ZTgsMHgxYywweGQ5LDB4MzMsMHhjMCwweGEzLDB4ODUsMHgzNwotLDB4YTMsMHg4MywweDM3LDB4YTMsMHg4NywweDM3LDB4YTMsMHg4OSwweDM3LDB4YjgsMHg5MSwweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODAKLSwweDAwLDB4Y2QsMHgzNSwweGM3LDB4MDYsMHhhYSwweDAyLDB4ZmYsMHhmZiwweGU1LDB4MDAsMHgyNSwweGZmLDB4NTMsMHhlNywweDAwCi0sMHg4MSwweDBlLDB4OWEsMHgzNywweDgwLDB4MDAsMHhiOCwweDkyLDB4MDMsMHhjZCwweDM5LDB4MzMsMHhjMCwweGU3LDB4MGUsMHhiZQotLDB4MDgsMHgwMCwweDhlLDB4MDYsMHgzOCwweDM0LDB4ZTgsMHg4ZSwweGU1LDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDdkLDB4NGIKLSwweDgzLDB4MjYsMHhlZiwweDM0LDB4ZGYsMHhjZCwweDUwLDB4ODMsMHgwZSwweGVmLDB4MzQsMHgyMCwweGMzLDB4ZjcsMHgwNiwweDlhCi0sMHgzNywweDgwLDB4MDAsMHg3NCwweDMyLDB4YTksMHhkMCwweDA3LDB4NzQsMHgwYywweGE5LDB4MDAsMHgwNCwweDc0LDB4MGUsMHgzMwotLDB4YzAsMHhlNywweDBlLDB4ZTksMHhkYSwweGZmLDB4ZmYsMHgwNiwweDg1LDB4MzcsMHhlOSwweGQzLDB4ZmYsMHhmZiwweDA2LDB4ODMKLSwweDM3LDB4ZTksMHhjYywweGZmLDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMSwweDAwLDB4ZTksMHgzNiwweGZlLDB4ODMsMHgyNiwweDlhCi0sMHgzNywweDdmLDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweGU1LDB4MDAsMHgwZCwweDAwLDB4YWMsMHhlNywweDAwLDB4ZTUsMHgwMgotLDB4MjUsMHhmZiwweGZiLDB4MjUsMHhlZiwweGZmLDB4MjUsMHhmZiwweGY3LDB4MGQsMHgwMSwweDAwLDB4ZTcsMHgwMiwweGExLDB4ODMKLSwweDM3LDB4M2IsMHgwNiwweDQ2LDB4MzcsMHg3ZiwweGNkLDB4YTEsMHg4NSwweDM3LDB4M2IsMHgwNiwweDQ4LDB4MzcsMHg3YywweGM0Ci0sMHhjNywweDA2LDB4YTMsMHgzNiwweDAzLDB4MDAsMHhiZSwweDEzLDB4MDAsMHhlOCwweGZkLDB4MDMsMHhiOCwweDkzLDB4MDMsMHhjZAotLDB4MzksMHhiOCwweDk0LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg5NiwweDAzLDB4Y2QsMHgzOSwweGI4LDB4OTUsMHgwMywweGNkLDB4MzkKLSwweGJlLDB4MDYsMHgwMCwweGU4LDB4ZTMsMHgwMywweGU5LDB4ZDYsMHgwMywweDgzLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NCwweDAxCi0sMHhjMywweGJlLDB4MTMsMHgwMCwweGU4LDB4ZDIsMHgwMywweGI4LDB4OTQsMHgwMywweGNkLDB4MzksMHhjMywweGI4LDB4OTQsMHgwMwotLDB4Y2QsMHgzYSwweDI2LDB4YTAsMHgyYiwweDAwLDB4MjYsMHg4YiwweDFlLDB4MmMsMHgwMCwweGNkLDB4MzQsMHg4MywweDNlLDB4YTMKLSwweDM2LDB4MDMsMHg3NCwweDAzLDB4ZTksMHhhOCwweDAzLDB4M2MsMHgwZCwweDc1LDB4M2UsMHg4MywweGZiLDB4MDAsMHg3NSwweDM5Ci0sMHhlNSwweDAyLDB4MGQsMHgwMCwweDIwLDB4ZTcsMHgwMiwweGI4LDB4OTMsMHgwMywweGNkLDB4M2EsMHhjNywweDA2LDB4YTMsMHgzNgotLDB4MDQsMHgwMCwweGJlLDB4MDAsMHgwMCwweGU4LDB4MGMsMHhmYywweGM2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHhjNiwweDA2LDB4OWUKLSwweDM2LDB4MDAsMHhjNywweDA2LDB4MzMsMHgzNywweDAyLDB4MDAsMHhiOCwweDlhLDB4MDMsMHhjZCwweDM5LDB4ZTgsMHhmYywweDAwCi0sMHhjNywweDA2LDB4NGMsMHgzNywweDAwLDB4MDAsMHhlOSwweDY2LDB4MDMsMHhjNywweDA2LDB4M2QsMHgzNywweDA4LDB4MDAsMHhlOQotLDB4NjEsMHhmZCwweDgzLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NSwweDA5LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwNSwweDAwLDB4ZTkKLSwweDUxLDB4ZmQsMHhlOSwweDRhLDB4MDMsMHg4MywweDNlLDB4YTMsMHgzNiwweDA0LDB4NzQsMHgxMiwweDgzLDB4M2UsMHhhMywweDM2Ci0sMHgwNSwweDc0LDB4MGIsMHhjZCwweDM0LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwNywweDAwLDB4ZTksMHgzNSwweGZkLDB4YzcsMHgwNgotLDB4YTMsMHgzNiwweDA2LDB4MDAsMHhjNiwweDA2LDB4OWUsMHgzNiwweGZmLDB4YjgsMHg5YSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTkKLSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTYsMHgwMywweGNkLDB4M2EsMHhiOCwweDk3LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg5OCwweDAzCi0sMHhjZCwweDM5LDB4YjgsMHg5YiwweDAzLDB4Y2QsMHgzOSwweGU5LDB4MTgsMHhmZCwweGNkLDB4MzQsMHg4MywweDNlLDB4YTMsMHgzNgotLDB4MDQsMHg3NywweDE4LDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMywweDc1LDB4MDgsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEKLSwweDc1LDB4MDksMHhjNywweDA2LDB4M2QsMHgzNywweDAxLDB4MDAsMHhlOSwweGU4LDB4ZmMsMHhlOSwweGUxLDB4MDIsMHhjZCwweDM0Ci0sMHg4MywweDNlLDB4YTMsMHgzNiwweDAyLDB4NzcsMHgwOSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDEsMHgwMCwweGU5LDB4ZDMsMHhmYwotLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNCwweDc3LDB4MDUsMHhiOCwweDk2LDB4MDMsMHhjZCwweDM5LDB4ZTksMHhjMCwweDAyLDB4ODMKLSwweDNlLDB4YTMsMHgzNiwweDAzLDB4NzUsMHgxMCwweDI2LDB4YTEsMHgwYywweDAwLDB4MjUsMHgwNywweDAwLDB4NTAsMHgzZCwweDA0Ci0sMHgwMCwweDc1LDB4MDMsMHhlOCwweDM2LDB4MDAsMHhhMSwweGYzLDB4MzYsMHg4NiwweGUwLDB4ZTcsMHgxZSwweGEzLDB4ZTMsMHgzNgotLDB4ODEsMHgyNiwweDBiLDB4MzcsMHgwMCwweDAzLDB4ODEsMHgyNiwweDBkLDB4MzcsMHg3YiwweDdmLDB4ODMsMHgwZSwweDBkLDB4MzcKLSwweDQ4LDB4ZTgsMHgxNCwweGYzLDB4NTgsMHgzZCwweDA0LDB4MDAsMHg3NCwweDA5LDB4MjYsMHhmNywweDA2LDB4MGMsMHgwMCwweDIwCi0sMHgwMCwweDc1LDB4MDYsMHhiOCwweDAxLDB4MDAsMHhlOSwweDdhLDB4MDIsMHhlOSwweDg2LDB4ZmMsMHhhMSwweGU1LDB4MzYsMHhlNwotLDB4MmUsMHhhMSwweGU3LDB4MzYsMHhlNywweDNlLDB4YTEsMHhkMywweDM2LDB4YTMsMHg5YywweDM0LDB4YTEsMHhkNSwweDM2LDB4YTMKLSwweDllLDB4MzQsMHhjMywweDI2LDB4ODAsMHgzZSwweDFjLDB4MDAsMHhmZiwweDc1LDB4MmYsMHgyNiwweDgwLDB4M2UsMHgxZSwweDAwCi0sMHhmZiwweDc1LDB4MjcsMHgyNiwweGY3LDB4MDYsMHgwYywweDAwLDB4NDAsMHgwMCwweDc1LDB4MWIsMHhhMSwweGQxLDB4MzYsMHgyNgotLDB4YTMsMHgxYSwweDAwLDB4YTEsMHhkMywweDM2LDB4MjYsMHhhMywweDFjLDB4MDAsMHhhMSwweGQ1LDB4MzYsMHgyNiwweGEzLDB4MWUKLSwweDAwLDB4YjgsMHgwYSwweDgwLDB4ZTksMHgyYywweDAyLDB4ZTksMHgzOCwweGZjLDB4ZmYsMHgwNiwweDkwLDB4MzQsMHhiZSwweDBhCi0sMHgwMCwweGM2LDB4MDYsMHhiNiwweDM0LDB4MDEsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzUsMHgwNSwweDgzLDB4MGUsMHhjMgotLDB4MzQsMHgwMSwweGNkLDB4MzQsMHhlOSwweDBjLDB4ZmMsMHg4MywweDNlLDB4YTMsMHgzNiwweDAzLDB4NzUsMHgwOSwweGM3LDB4MDYKLSwweDNkLDB4MzcsMHgwNSwweDAwLDB4ZTksMHhmYywweGZiLDB4ZTUsMHgwMiwweDBkLDB4MDMsMHgwMCwweDBkLDB4MDAsMHg4OCwweDBkCi0sMHgwMCwweDQwLDB4MGQsMHgwMCwweDA0LDB4ZTcsMHgwMiwweGM3LDB4MDYsMHhhMywweDM2LDB4MDUsMHgwMCwweGM2LDB4MDYsMHg5ZQotLDB4MzYsMHhmZiwweGJlLDB4MDIsMHgwMCwweGU4LDB4ZTEsMHgwMSwweGI4LDB4ODksMHgwMywweGNkLDB4M2EsMHhiOCwweDlhLDB4MDMKLSwweGNkLDB4M2EsMHhiOCwweDk5LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg5NywweDAzLDB4Y2QsMHgzOSwweGI4LDB4OTgsMHgwMywweGNkCi0sMHgzOSwweGU5LDB4YmIsMHgwMSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NCwweDBhLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNAotLDB4NzQsMHgwMywweGU5LDB4YWEsMHgwMSwweGJlLDB4MDYsMHgwMCwweGU4LDB4YWUsMHgwMSwweGI4LDB4OTUsMHgwMywweGNkLDB4MzkKLSwweGU5LDB4OWMsMHgwMSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDUsMHg3NCwweDAzLDB4ZTksMHg5MiwweDAxLDB4YmUsMHgwMiwweDAwCi0sMHhlOCwweDk2LDB4MDEsMHhiOCwweDk5LDB4MDMsMHhjZCwweDM5LDB4ZTksMHg4NCwweDAxLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNQotLDB4MDAsMHhlOSwweDdiLDB4MDEsMHhlNSwweDAyLDB4MjUsMHhmZiwweGRmLDB4ZTcsMHgwMiwweGM3LDB4MDYsMHhhMywweDM2LDB4MDcKLSwweDAwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNSwweDAwLDB4ZTksMHg2NSwweDAxLDB4ZTgsMHhkNSwweDA0LDB4YzYsMHgwNiwweDlkCi0sMHgzNiwweDAwLDB4YzcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNSwweDAwLDB4YzcsMHgwNgotLDB4YTgsMHgwMiwweDAwLDB4MDAsMHhjNywweDA2LDB4NGMsMHgzNywweDAxLDB4MDAsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4MGQKLSwweDAzLDB4MDAsMHgwZCwweDAwLDB4ODgsMHgyNSwweGVmLDB4ZmYsMHgwZCwweDAwLDB4NDAsMHgwZCwweDAwLDB4MDQsMHhlNywweDAyCi0sMHhlOSwweDY3LDB4ZmMsMHhiOCwweDlhLDB4MDMsMHhjZCwweDM5LDB4ZjcsMHgwNiwweGY0LDB4MzMsMHgwMCwweDEwLDB4NzUsMHgwOQotLDB4YzcsMHgwNiwweDMzLDB4MzcsMHgwMiwweDAwLDB4ZTksMHgxNiwweDAxLDB4ZmYsMHgwZSwweDMzLDB4MzcsMHg3NCwweDAzLDB4ZTkKLSwweDBkLDB4MDEsMHhmZiwweDA2LDB4OGUsMHgzNCwweDgzLDB4MGUsMHhjMiwweDM0LDB4MDgsMHhjNywweDA2LDB4M2QsMHgzNywweDAzCi0sMHgwMCwweGU5LDB4ZmYsMHhmYSwweGMzLDB4NTIsMHg1MCwweGJhLDB4ZTAsMHgwMCwweGI4LDB4MDAsMHgxMCwweGVmLDB4NTgsMHg1YQotLDB4YzMsMHhjNywweDA2LDB4M2QsMHgzNywweDAwLDB4MDAsMHhlOSwweGU5LDB4ZmEsMHhmYSwweGU4LDB4NTQsMHgwNCwweGI4LDB4ODAKLSwweDAzLDB4OGUsMHhjMCwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhkOCwweDJiLDB4YjgsMHg3ZiwweDAzLDB4OGUsMHhjMCwweDI2Ci0sMHhjNywweDA2LDB4MDQsMHgwMCwweGU4LDB4MmMsMHgzMywweGMwLDB4OGUsMHhjMCwweGExLDB4YTcsMHgzNiwweGEzLDB4YTksMHgzNgotLDB4YTEsMHhhOSwweDM2LDB4ZTcsMHgwMCwweGExLDB4YWIsMHgzNiwweGU3LDB4MDIsMHhjNywweDA2LDB4MDUsMHgzNywweDAwLDB4MDAKLSwweGM3LDB4MDYsMHgwNywweDM3LDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwOSwweDM3LDB4MDAsMHgwMCwweGM2LDB4MDYsMHg5ZCwweDM2Ci0sMHgwMCwweGM2LDB4MDYsMHg5ZSwweDM2LDB4ZmYsMHhjNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDAsMHhjNywweDA2LDB4YTMsMHgzNgotLDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDAsMHgwMCwweGM3LDB4MDYsMHhhOCwweDAyLDB4MDAsMHgwMCwweGM3LDB4MDYKLSwweDRjLDB4MzcsMHgwMSwweDAwLDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGU3LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGJiCi0sMHhmZiwweDdmLDB4Y2QsMHg1MywweGU4LDB4N2MsMHhmOSwweGU1LDB4NTYsMHgwZCwweDAyLDB4MDAsMHhlNywweDU2LDB4ZmIsMHhjMwotLDB4OGQsMHgzZSwweGMwLDB4NTMsMHg4ZCwweDM2LDB4ZjAsMHgzOCwweGI5LDB4MGUsMHgwMCwweDhiLDB4MWUsMHgzMCwweDM0LDB4ODkKLSwweDVjLDB4MDIsMHgyZSwweDhiLDB4NDUsMHgwMiwweDg5LDB4NDQsMHgwNiwweDJlLDB4OGIsMHgwNSwweDg5LDB4NDQsMHgwNCwweDgzCi0sMHhjNywweDA0LDB4ODMsMHhjNiwweDEwLDB4ZTIsMHhlOCwweGI4LDB4ODAsMHgwMywweDhlLDB4YzAsMHgyNiwweGM3LDB4MDYsMHgwNAotLDB4MDAsMHhlMiwweDUxLDB4YjgsMHg3ZiwweDAzLDB4OGUsMHhjMCwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhiMiwweDUyLDB4MzMKLSwweGMwLDB4OGUsMHhjMCwweGM3LDB4MDYsMHhhMSwweDM2LDB4MDEsMHgwMCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDUsMHgwMCwweGMzCi0sMHgzMywweGZmLDB4OGUsMHgwNiwweGE2LDB4MDIsMHg4YiwweDM2LDB4YTQsMHgwMiwweDJlLDB4ZmYsMHhhNCwweGEwLDB4NTMsMHhlOAotLDB4OGMsMHhkYiwweGMzLDB4ZTgsMHg0OCwweGY3LDB4ZTksMHhmNiwweGZmLDB4OGUsMHgwNiwweDM4LDB4MzQsMHhlOCwweDA3LDB4ZTEKLSwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhkZiwweDRmLDB4Y2QsMHg1MCwweGMzLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweDAwCi0sMHgwMCwweDI2LDB4ZmYsMHgyNiwweDA0LDB4MDAsMHhjZCwweDM0LDB4ZTksMHhkNCwweGZmLDB4YTEsMHhkMSwweDM2LDB4MjYsMHgzOQotLDB4MDYsMHgxYSwweDAwLDB4NzUsMHgyMiwweGExLDB4ZDMsMHgzNiwweDI2LDB4MzksMHgwNiwweDFjLDB4MDAsMHg3NSwweDE4LDB4YTEKLSwweGQ1LDB4MzYsMHgyNiwweDM5LDB4MDYsMHgxZSwweDAwLDB4NzUsMHgwZSwweDI2LDB4ZjcsMHgwNiwweDBjLDB4MDAsMHg0MCwweDAwCi0sMHg3NCwweDA1LDB4ODMsMHgwZSwweDY2LDB4MzcsMHg0MCwweDgxLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgxMCwweGExLDB4YWYsMHgzNgotLDB4ZTcsMHgwNiwweDgzLDB4M2UsMHhhMywweDM2LDB4MDIsMHg3NSwweDA1LDB4Y2QsMHgzNCwweGU5LDB4NTYsMHhmYiwweDgzLDB4M2UKLSwweGEzLDB4MzYsMHgwMCwweDc0LDB4YjEsMHg4MywweDNlLDB4YTMsMHgzNiwweDA1LDB4NzcsMHhhYSwweDI2LDB4ZjYsMHgwNiwweDBhCi0sMHgwMCwweGZmLDB4NzUsMHhhMiwweGU4LDB4ZmQsMHhkZCwweDUwLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhlOQotLDB4OGMsMHgwMCwweDI2LDB4YTEsMHgwYywweDAwLDB4MjUsMHgwNywweDAwLDB4M2QsMHgwNywweDAwLDB4NzUsMHgwMywweGU5LDB4NzYKLSwweDAwLDB4M2QsMHgwNSwweDAwLDB4NzUsMHgwMywweGU5LDB4NmUsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MTgsMHg4MCwweDc1Ci0sMHgwMywweGU5LDB4NmEsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MDAsMHg4MCwweDc0LDB4MzUsMHgyNiwweDgwLDB4M2UsMHgyOQotLDB4MDAsMHgwMiwweDc1LDB4MmQsMHg1MSwweDU2LDB4NTcsMHg4ZCwweDM2LDB4M2UsMHgzNCwweDhkLDB4M2UsMHgyMCwweDAwLDB4YjkKLSwweDA2LDB4MDAsMHhmMywweGE2LDB4NWYsMHg1ZSwweDU5LDB4NzUsMHg0NSwweDI2LDB4YTEsMHgyMCwweDAwLDB4YTMsMHgzZSwweDM0Ci0sMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4NDAsMHgzNCwweDI2LDB4YTEsMHgyNCwweDAwLDB4YTMsMHg0MiwweDM0LDB4ZTksMHgyNgotLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDA4LDB4MDAsMHg3NCwweDBiLDB4MjYsMHg4MCwweDNlLDB4MTksMHgwMCwweDAwLDB4NzQKLSwweDAzLDB4ZTksMHgxMywweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgxMCwweDAwLDB4NzQsMHgxMiwweDI2LDB4YTAsMHgyOCwweDAwCi0sMHhjMCwweGU4LDB4MDQsMHgyMiwweGMwLDB4NzQsMHgwNywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhmZiwweGZmLDB4NTgsMHgyMwotLDB4YzAsMHg3NCwweDAzLDB4ZTksMHhkZCwweGZlLDB4ODEsMHgyNiwweDliLDB4MzYsMHhmZiwweGZlLDB4MjYsMHhhMSwweDIwLDB4MDAKLSwweDNiLDB4MDYsMHhkMSwweDM2LDB4NzUsMHgxYSwweDI2LDB4YTEsMHgyMiwweDAwLDB4M2IsMHgwNiwweGQzLDB4MzYsMHg3NSwweDEwCi0sMHgyNiwweGExLDB4MjQsMHgwMCwweDNiLDB4MDYsMHhkNSwweDM2LDB4NzUsMHgwNiwweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAsMHgwMQotLDB4MjYsMHhhMSwweDIwLDB4MDAsMHgyNSwweDdmLDB4ZmYsMHhhMywweGI4LDB4MzQsMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4YmEKLSwweDM0LDB4MjYsMHhhMSwweDI0LDB4MDAsMHhhMywweGJjLDB4MzQsMHg4YiwweGM2LDB4ODYsMHhjNCwweGEzLDB4YzAsMHgzNCwweGQxCi0sMHhlNiwweDgwLDB4ZmMsMHgwOSwweDc0LDB4MDMsMHhlOCwweGY2LDB4ZjUsMHhhMSwweDA1LDB4MzcsMHgwYiwweDA2LDB4MDcsMHgzNwotLDB4MGIsMHgwNiwweDA5LDB4MzcsMHg3NCwweDNlLDB4MjYsMHhhMSwweDIwLDB4MDAsMHgzYiwweDA2LDB4MDUsMHgzNywweDc1LDB4MTcKLSwweDI2LDB4YTEsMHgyMiwweDAwLDB4M2IsMHgwNiwweDA3LDB4MzcsMHg3NSwweDBkLDB4MjYsMHhhMSwweDI0LDB4MDAsMHgzYiwweDA2Ci0sMHgwOSwweDM3LDB4NzUsMHgwMywweGU5LDB4MWQsMHgwMCwweDI2LDB4YTAsMHgyOCwweDAwLDB4MjQsMHgwZiwweDNjLDB4MDMsMHg3NAotLDB4MWIsMHgzYywweDAwLDB4NzUsMHgwZiwweDgzLDB4M2UsMHhhMywweDM2LDB4MDQsMHg3NCwweDEwLDB4ZjcsMHgwNiwweDliLDB4MzYKLSwweDAwLDB4MDEsMHg3NCwweDA4LDB4MmUsMHhmZiwweDk0LDB4ZjgsMHg1MywweGU5LDB4MzMsMHhmZSwweGNkLDB4MzQsMHhjNywweDA2Ci0sMHgzZCwweDM3LDB4MDEsMHgwMCwweGU5LDB4MmMsMHhmOCwweDgzLDB4M2UsMHhhMywweDM2LDB4MDUsMHg3NCwweDEwLDB4ODMsMHgzZQotLDB4YTMsMHgzNiwweDAxLDB4N2UsMHgwOSwweDgzLDB4ZWUsMHgxNiwweDJlLDB4ZmYsMHg5NCwweDI0LDB4NTQsMHhjMywweGNkLDB4MzQKLSwweGMzLDB4MjYsMHhhMSwweDBjLDB4MDAsMHgzZCwweGZmLDB4N2YsMHg3NCwweDA1LDB4MjYsMHhmZiwweDI2LDB4MDQsMHgwMCwweGU5Ci0sMHhmZCwweGZkLDB4YTEsMHhmNCwweDMzLDB4YTksMHgwMCwweDg4LDB4NzQsMHgwYiwweGE5LDB4MDAsMHgxMCwweDc1LDB4MDksMHg4YgotLDB4MWUsMHg0MywweDM3LDB4ZmYsMHhlMywweGU5LDB4OTcsMHgwMCwweGM3LDB4MDYsMHgzNSwweDM3LDB4MDUsMHgwMCwweGM3LDB4MDYKLSwweDQzLDB4MzcsMHgyOCwweDUyLDB4ZjcsMHgwNiwweGY0LDB4MzMsMHgwMCwweDA4LDB4NzQsMHgwNiwweGM3LDB4MDYsMHg0MywweDM3Ci0sMHgxYSwweDUyLDB4YjgsMHg4MCwweDAzLDB4Y2QsMHgzOSwweGU5LDB4YzUsMHhmZCwweGE5LDB4MDAsMHgwOCwweDc0LDB4ZDksMHhmZgotLDB4MGUsMHgzNSwweDM3LDB4NzUsMHhlZCwweGU5LDB4MzAsMHgwMCwweGE5LDB4MDAsMHgwOCwweDc1LDB4Y2IsMHhmZiwweDBlLDB4MzUKLSwweDM3LDB4NzUsMHhkZiwweDgxLDB4MGUsMHhjMiwweDM0LDB4YzAsMHgwMCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDBmCi0sMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwLDB4ODAsMHhjNywweDA2LDB4MGYsMHgzNywweDAyLDB4MDAsMHhlOSwweDkwLDB4ZmQsMHhjNwotLDB4MDYsMHgzZCwweDM3LDB4MDIsMHgwMCwweGU5LDB4OGIsMHhmNywweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDMwLDB4ZjYKLSwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgyMCwweGZmLDB4MDYsMHg5NCwweDM0LDB4ODMsMHgwZSwweDY2LDB4MzcsMHgyMCwweDhlCi0sMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwMSwweDc0LDB4MDcsMHgyNiwweDgxLDB4MGUsMHgwOAotLDB4MDAsMHgwMCwweDAxLDB4ZTksMHgwOSwweDAwLDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwNCwweDAwLDB4ZTksMHg1NCwweGY3LDB4ODEKLSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MDgsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ZTUsMHgwYSwweGE5LDB4MDAsMHg4MCwweDc0Ci0sMHgwZSwweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhmNywweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhlOSwweDQ5LDB4ZmYsMHhlOQotLDB4MmQsMHhmZCwweGM3LDB4MDYsMHg0MSwweDM3LDB4MDAsMHgwMCwweGJlLDB4MjksMHgwMCwweGU4LDB4MmIsMHhmZCwweGU5LDB4MWUKLSwweGZkLDB4Y2QsMHgzNCwweDgzLDB4M2UsMHhhMywweDM2LDB4MDQsMHg3NywweDA5LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMSwweDAwCi0sMHhlOSwweDEwLDB4ZjcsMHhlOSwweDA5LDB4ZmQsMHhjZCwweDM0LDB4YzMsMHhjNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDAsMHhlOAotLDB4MGMsMHhmNSwweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhlNywweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHg4MSwweDI2LDB4OWIKLSwweDM2LDB4ZmYsMHg3ZiwweGU1LDB4MDIsMHgwZCwweDAxLDB4MDAsMHgyNSwweGVmLDB4ZmYsMHgyNSwweGZmLDB4ZGYsMHhlNywweDAyCi0sMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4MzMsMHhjMCwweGEzLDB4OWQsMHgzNiwweGEzLDB4OWYsMHgzNiwweGU4LDB4MjAsMHhmMwotLDB4ZTgsMHg0MywweGYzLDB4ODMsMHgwZSwweDliLDB4MzYsMHgxMCwweGM3LDB4MDYsMHg5OSwweDM2LDB4MDAsMHgwMCwweGU4LDB4ZDIKLSwweGY1LDB4ZTUsMHg1NiwweDBkLDB4MDIsMHgwMCwweGU3LDB4NTYsMHhjNywweDA2LDB4YTgsMHgwMiwweDAwLDB4MDAsMHhiZSwweDAwCi0sMHgwMCwweGU4LDB4MzAsMHhmNSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MGUsMHhiOCwweDljLDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MAotLDB4MDAsMHhjZCwweDM1LDB4YzcsMHgwNiwweGFhLDB4MDIsMHhmZiwweGZmLDB4YzcsMHgwNiwweGExLDB4MzYsMHgwMSwweDAwLDB4ZTkKLSwweGE1LDB4ZjYsMHgwNiwweGI4LDB4OGYsMHgwMywweGNkLDB4M2EsMHhiOCwweDkwLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5MSwweDAzCi0sMHhjZCwweDNhLDB4YjgsMHg5MiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTMsMHgwMywweGNkLDB4M2EsMHhiOCwweDk0LDB4MDMsMHhjZAotLDB4M2EsMHhiOCwweDk1LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5NiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTcsMHgwMywweGNkLDB4M2EKLSwweGI4LDB4OTgsMHgwMywweGNkLDB4M2EsMHhiOCwweDk5LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5YSwweDAzLDB4Y2QsMHgzYSwweGI4Ci0sMHg5YiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2YsMHgwMywweGNkLDB4M2EsMHhiOCwweDgwLDB4MDMsMHhjZCwweDNhLDB4MDcsMHhjMwotLDB4ZjcsMHg0OSwweGYxLDB4NGUsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZjgsMHg1MSwweGRmLDB4NGYKLSwweGZhLDB4NGYsMHgwYiwweDUwLDB4ZDEsMHg1MSwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhkZiwweDRmCi0sMHhlNCwweDRlLDB4MDYsMHgwMCwweGNkLDB4NGEsMHgwNCwweDAwLDB4ZTQsMHg0ZSwweDE5LDB4MDAsMHhhZCwweDRiLDB4ZmEsMHgwMAotLDB4ODIsMHg0YywweDA4LDB4MDcsMHgwOSwweDRjLDB4MTQsMHgwMCwweDI0LDB4NGUsMHg2NCwweDAwLDB4ZDcsMHg0ZCwweGY0LDB4MDEKLSwweDY0LDB4NGUsMHhiYywweDAyLDB4N2EsMHg0ZSwweGU4LDB4MDMsMHg0MywweDRlLDB4MDIsMHgwMCwweGIzLDB4NGUsMHhmNCwweDAxCi0sMHg1YiwweDRlLDB4ZjQsMHgwMSwweGU1LDB4NGUsMHgxNCwweDAwLDB4MDYsMHg1MCwweDA2LDB4NTAsMHg5NSwweDRjLDB4YzEsMHg1MgotLDB4YzEsMHg1MiwweGZlLDB4NGMsMHhkYSwweDRjLDB4MDYsMHg1MCwweDA2LDB4NTAsMHgwNiwweDUwLDB4MDYsMHg1MCwweGI3LDB4NTEKLSwweGI3LDB4NTEsMHhiNywweDUxLDB4YjcsMHg1MSwweGI3LDB4NTEsMHhiNywweDUxLDB4MDYsMHg1MCwweGQ1LDB4NGEsMHgwNiwweDUwCi0sMHgxZCwweDRjLDB4MDYsMHg1MCwweDgzLDB4NGQsMHgxZiwweDRkLDB4MWYsMHg0ZCwweGVkLDB4NDAsMHhmYSwweDQwLDB4MDcsMHg0MQotLDB4MzcsMHgzNywweDJlLDB4MzcsMHgzNywweDIwLDB4MjAsMHg3OSwweDc5LDB4MmYsMHg3OSwweDc5LDB4MmYsMHg3OSwweDc5LDB4MjAKLSwweDMwLDB4MzEsMHgyZSwweDM5LDB4MzAsMHgyMCwweDIwLDB4MzAsMHgzMiwweDJmLDB4MzEsMHgzNywweDJmLDB4MzksMHgzOSwweDIwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4OTAsMHhlYSwweGMwLDB4MTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEzLDB4MDYKLX0gOyAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCA4NmE0NzlmLi5kM2YzOWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtMjIzLDEwICsyMjIsMTAgQEAKIAkJICAgICgoKHVuc2lnbmVkKXNrYi0+ZGF0YSkgJiAoVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UIC0KIAkJCQkJICAgICAgMSkpKTsKIAotCXNrYi0+ZGV2ID0gdWdldGgtPmRldjsKKwlza2ItPmRldiA9IHVnZXRoLT5uZGV2OwogCiAJb3V0X2JlMzIoJigoc3RydWN0IHFlX2JkIF9faW9tZW0gKiliZCktPmJ1ZiwKLQkJICAgICAgZG1hX21hcF9zaW5nbGUoJnVnZXRoLT5kZXYtPmRldiwKKwkJICAgICAgZG1hX21hcF9zaW5nbGUodWdldGgtPmRldiwKIAkJCQkgICAgIHNrYi0+ZGF0YSwKIAkJCQkgICAgIHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLm1heF9yeF9idWZfbGVuZ3RoICsKIAkJCQkgICAgIFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCwKQEAgLTE4NzIsNyArMTg3MSw3IEBACiAJCQljb250aW51ZTsKIAkJZm9yIChqID0gMDsgaiA8IHVnZXRoLT51Z19pbmZvLT5iZFJpbmdMZW5UeFtpXTsgaisrKSB7CiAJCQlpZiAodWdldGgtPnR4X3NrYnVmZltpXVtqXSkgewotCQkJCWRtYV91bm1hcF9zaW5nbGUoJnVnZXRoLT5kZXYtPmRldiwKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKHVnZXRoLT5kZXYsCiAJCQkJCQkgaW5fYmUzMigmKChzdHJ1Y3QgcWVfYmQgX19pb21lbSAqKWJkKS0+YnVmKSwKIAkJCQkJCSAoaW5fYmUzMigodTMyIF9faW9tZW0gKiliZCkgJgogCQkJCQkJICBCRF9MRU5HVEhfTUFTSyksCkBAIC0xOTAwLDcgKzE4OTksNyBAQAogCQkJYmQgPSB1Z2V0aC0+cF9yeF9iZF9yaW5nW2ldOwogCQkJZm9yIChqID0gMDsgaiA8IHVnZXRoLT51Z19pbmZvLT5iZFJpbmdMZW5SeFtpXTsgaisrKSB7CiAJCQkJaWYgKHVnZXRoLT5yeF9za2J1ZmZbaV1bal0pIHsKLQkJCQkJZG1hX3VubWFwX3NpbmdsZSgmdWdldGgtPmRldi0+ZGV2LAorCQkJCQlkbWFfdW5tYXBfc2luZ2xlKHVnZXRoLT5kZXYsCiAJCQkJCQlpbl9iZTMyKCYoKHN0cnVjdCBxZV9iZCBfX2lvbWVtICopYmQpLT5idWYpLAogCQkJCQkJdWdldGgtPnVnX2luZm8tPgogCQkJCQkJdWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCkBAIC0zMDcxLDcgKzMwNzAsNyBAQAogCiAJLyogc2V0IHVwIHRoZSBidWZmZXIgZGVzY3JpcHRvciAqLwogCW91dF9iZTMyKCYoKHN0cnVjdCBxZV9iZCBfX2lvbWVtICopYmQpLT5idWYsCi0JCSAgICAgIGRtYV9tYXBfc2luZ2xlKCZ1Z2V0aC0+ZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJICAgICAgZG1hX21hcF9zaW5nbGUodWdldGgtPmRldiwgc2tiLT5kYXRhLAogCQkJICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpKTsKIAogCS8qIHByaW50ayhLRVJOX0RFQlVHInNrYi0+ZGF0YSBpcyAweCV4XG4iLHNrYi0+ZGF0YSk7ICovCkBAIC0zMTI3LDcgKzMxMjYsNyBAQAogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19mdW5jX18pOwogCi0JZGV2ID0gdWdldGgtPmRldjsKKwlkZXYgPSB1Z2V0aC0+bmRldjsKIAogCS8qIGNvbGxlY3QgcmVjZWl2ZWQgYnVmZmVycyAqLwogCWJkID0gdWdldGgtPnJ4QmRbcnhRXTsKQEAgLTMxNjEsNyArMzE2MCw3IEBACiAJCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAogCQkJLyogVGVsbCB0aGUgc2tiIHdoYXQga2luZCBvZiBwYWNrZXQgdGhpcyBpcyAqLwotCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdWdldGgtPmRldik7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB1Z2V0aC0+bmRldik7CiAKIAkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJLyogU2VuZCB0aGUgcGFja2V0IHVwIHRoZSBzdGFjayAqLwpAQCAtMzQzMiw3ICszNDMxLDcgQEAKIAogCXVjY19nZXRoX3N0b3AodWdldGgpOwogCi0JZnJlZV9pcnEodWdldGgtPnVnX2luZm8tPnVmX2luZm8uaXJxLCB1Z2V0aC0+ZGV2KTsKKwlmcmVlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVnZXRoLT5uZGV2KTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtMzQ0Niw3ICszNDQ1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJdWdldGggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVjY19nZXRoX3ByaXZhdGUsIHRpbWVvdXRfd29yayk7Ci0JZGV2ID0gdWdldGgtPmRldjsKKwlkZXYgPSB1Z2V0aC0+bmRldjsKIAogCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fZnVuY19fKTsKIApAQCAtMzY0OCwxNSArMzY0NywxNiBAQAogCQltZGlvID0gb2ZfZ2V0X3BhcmVudChwaHkpOwogCiAJCWlmIChtZGlvID09IE5VTEwpCi0JCQlyZXR1cm4gLTE7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQllcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1kaW8sIDAsICZyZXMpOwotCQlvZl9ub2RlX3B1dChtZGlvKTsKIAotCQlpZiAoZXJyKQotCQkJcmV0dXJuIC0xOwotCisJCWlmIChlcnIpIHsKKwkJCW9mX25vZGVfcHV0KG1kaW8pOworCQkJcmV0dXJuIGVycjsKKwkJfQogCQlmc2xfcHFfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7CisJCW9mX25vZGVfcHV0KG1kaW8pOwogCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCiAJCQkiJXM6JTAyeCIsIGJ1c19uYW1lLCAqcHJvcCk7CiAJfQpAQCAtMzc1NSw3ICszNzU1LDggQEAKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLCA2KTsKIAogCXVnZXRoLT51Z19pbmZvID0gdWdfaW5mbzsKLQl1Z2V0aC0+ZGV2ID0gZGV2OworCXVnZXRoLT5kZXYgPSBkZXZpY2U7CisJdWdldGgtPm5kZXYgPSBkZXY7CiAJdWdldGgtPm5vZGUgPSBucDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggZTNhMjVlNi4uMmY4ZWU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9pbW1hcF9xZS5oPgogI2luY2x1ZGUgPGFzbS9xZS5oPgpAQCAtMTEyOSw3ICsxMTI4LDggQEAKIHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlIHsKIAlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbzsKIAlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGltZW91dF93b3JrOwogCXN0cnVjdCB1Y2NfZ2V0aCBfX2lvbWVtICp1Z19yZWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IGE3NTViZWEuLjZmY2I1MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBjZGU0MjNjLi5mODRiNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC01LDYgKzUsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOCBPcHRpb24gSW50ZXJuYXRpb25hbAogICogICAgICAgICAgICAgICAgICAgICBGaWxpcCBBYmVuIDxmLmFiZW5Ab3B0aW9uLmNvbT4KICAqICAgICAgICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyA8ZC5iYXJvd0BvcHRpb24uY29tPgorICogICAgICAgICAgICAgICAgICAgICBKYW4gRHVtb24gPGouZHVtb25Ab3B0aW9uLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kcmV3IEJpcmQgKFNwaGVyZSBTeXN0ZW1zIEx0ZCkKICAqICAJCQk8YWpiQHNwaGVyZXN5c3RlbXMuY28udWs+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CkBAIC00NjIsOSArNDYzLDE2IEBACiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc3MDEpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzgwMSl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3OTAxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYWYwLCAweDczNjEpfSwKLQl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDA1Nyl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg4MjAwKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDgyMDEpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDAzNSl9LAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDU1KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQxNTUpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDI1NSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMDU3KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQxNTcpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDI1Nyl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMzU3KX0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaHNvX2lkcyk7CkBAIC0yNDEwLDE0ICsyNDE4LDYgQEAKIAlpZiAoIWhzb19uZXQpCiAJCXJldHVybjsKIAotCS8qIHN0YXJ0IGZyZWVpbmcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTVVYX0JVTEtfUlhfQlVGX0NPVU5UOyBpKyspIHsKLQkJdXNiX2ZyZWVfdXJiKGhzb19uZXQtPm11eF9idWxrX3J4X3VyYl9wb29sW2ldKTsKLQkJa2ZyZWUoaHNvX25ldC0+bXV4X2J1bGtfcnhfYnVmX3Bvb2xbaV0pOwotCX0KLQl1c2JfZnJlZV91cmIoaHNvX25ldC0+bXV4X2J1bGtfdHhfdXJiKTsKLQlrZnJlZShoc29fbmV0LT5tdXhfYnVsa190eF9idWYpOwotCiAJcmVtb3ZlX25ldF9kZXZpY2UoaHNvX25ldC0+cGFyZW50KTsKIAogCWlmIChoc29fbmV0LT5uZXQpIHsKQEAgLTI0MjUsNiArMjQyNSwxNiBAQAogCQlmcmVlX25ldGRldihoc29fbmV0LT5uZXQpOwogCX0KIAorCS8qIHN0YXJ0IGZyZWVpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVVYX0JVTEtfUlhfQlVGX0NPVU5UOyBpKyspIHsKKwkJdXNiX2ZyZWVfdXJiKGhzb19uZXQtPm11eF9idWxrX3J4X3VyYl9wb29sW2ldKTsKKwkJa2ZyZWUoaHNvX25ldC0+bXV4X2J1bGtfcnhfYnVmX3Bvb2xbaV0pOworCQloc29fbmV0LT5tdXhfYnVsa19yeF9idWZfcG9vbFtpXSA9IE5VTEw7CisJfQorCXVzYl9mcmVlX3VyYihoc29fbmV0LT5tdXhfYnVsa190eF91cmIpOworCWtmcmVlKGhzb19uZXQtPm11eF9idWxrX3R4X2J1Zik7CisJaHNvX25ldC0+bXV4X2J1bGtfdHhfYnVmID0gTlVMTDsKKwogCWtmcmVlKGhzb19kZXYpOwogfQogCkBAIC0yNTI2LDE0ICsyNTM2LDE1IEBACiB9CiAKIC8qIENyZWF0ZXMgb3VyIG5ldHdvcmsgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IGhzb19kZXZpY2UgKmhzb19jcmVhdGVfbmV0X2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX25ldF9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCQkJCWludCBwb3J0X3NwZWMpCiB7CiAJaW50IHJlc3VsdCwgaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OwogCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0OwogCXN0cnVjdCBoc29fZGV2aWNlICpoc29fZGV2OwogCi0JaHNvX2RldiA9IGhzb19jcmVhdGVfZGV2aWNlKGludGVyZmFjZSwgSFNPX0lOVEZfTVVYIHwgSFNPX1BPUlRfTkVUV09SSyk7CisJaHNvX2RldiA9IGhzb19jcmVhdGVfZGV2aWNlKGludGVyZmFjZSwgcG9ydF9zcGVjKTsKIAlpZiAoIWhzb19kZXYpCiAJCXJldHVybiBOVUxMOwogCkBAIC0yNjEzLDEyICsyNjI0LDEyIEBACiB7CiAJc3RydWN0IGhzb190aW9jbWdldCAqdGlvY21nZXQgPSBzZXJpYWwtPnRpb2NtZ2V0OwogCWlmICh0aW9jbWdldCkgewotCQlrZnJlZSh0aW9jbWdldCk7CiAJCWlmICh0aW9jbWdldC0+dXJiKSB7CiAJCQl1c2JfZnJlZV91cmIodGlvY21nZXQtPnVyYik7CiAJCQl0aW9jbWdldC0+dXJiID0gTlVMTDsKIAkJfQogCQlzZXJpYWwtPnRpb2NtZ2V0ID0gTlVMTDsKKwkJa2ZyZWUodGlvY21nZXQpOwogCiAJfQogfQpAQCAtMjkzMyw3ICsyOTQ0LDggQEAKIAkJaWYgKChwb3J0X3NwZWMgJiBIU09fUE9SVF9NQVNLKSA9PSBIU09fUE9SVF9ORVRXT1JLKSB7CiAJCQkvKiBDcmVhdGUgdGhlIG5ldHdvcmsgZGV2aWNlICovCiAJCQlpZiAoIWRpc2FibGVfbmV0KSB7Ci0JCQkJaHNvX2RldiA9IGhzb19jcmVhdGVfbmV0X2RldmljZShpbnRlcmZhY2UpOworCQkJCWhzb19kZXYgPSBoc29fY3JlYXRlX25ldF9kZXZpY2UoaW50ZXJmYWNlLAorCQkJCQkJCQlwb3J0X3NwZWMpOwogCQkJCWlmICghaHNvX2RldikKIAkJCQkJZ290byBleGl0OwogCQkJCXRtcF9kZXYgPSBoc29fZGV2OwpAQCAtMjk2NSw3ICsyOTc3LDcgQEAKIAkJLyogSXQncyBhIHJlZ3VsYXIgYnVsayBpbnRlcmZhY2UgKi8KIAkJaWYgKCgocG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSykgPT0gSFNPX1BPUlRfTkVUV09SSykKIAkJICAgICYmICFkaXNhYmxlX25ldCkKLQkJCWhzb19kZXYgPSBoc29fY3JlYXRlX25ldF9kZXZpY2UoaW50ZXJmYWNlKTsKKwkJCWhzb19kZXYgPSBoc29fY3JlYXRlX25ldF9kZXZpY2UoaW50ZXJmYWNlLCBwb3J0X3NwZWMpOwogCQllbHNlCiAJCQloc29fZGV2ID0KIAkJCSAgICBoc29fY3JlYXRlX2J1bGtfc2VyaWFsX2RldmljZShpbnRlcmZhY2UsIHBvcnRfc3BlYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggN2NiMTBhMC4uM2QwZDBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtMzYsNyArMzYsNiBAQAogICogUnVuIHRlc3QgcHJvY2VkdXJlcwogICogRml4IGJ1Z3MgZnJvbSBwcmV2aW91cyB0d28gc3RlcHMKICAqIFNub29wIG90aGVyIE9TcyBmb3IgYW55IHRyaWNrcyB3ZSdyZSBub3QgZG9pbmcKLSAqIFNNUCBsb2NraW5nCiAgKiBSZWR1Y2UgYXJiaXRyYXJ5IHRpbWVvdXRzCiAgKiBTbWFydCBtdWx0aWNhc3Qgc3VwcG9ydAogICogVGVtcG9yYXJ5IE1BQyBjaGFuZ2Ugc3VwcG9ydApAQCAtNzk2LDcgKzc5NSw3IEBACiAKIAlpbnQgcmVzOwogCi0Jc3Bpbl9sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZrYXdldGgtPmRldmljZV9sb2NrKTsKIAogCWthd2V0aF9hc3luY19zZXRfcnhfbW9kZShrYXdldGgpOwogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKQEAgLTgxNCw3ICs4MTMsNyBAQAogCQlpZiAoIWNvcGllZF9za2IpIHsKIAkJCWthd2V0aC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQluZXRpZl9zdGFydF9xdWV1ZShuZXQpOwotCQkJc3Bpbl91bmxvY2soJmthd2V0aC0+ZGV2aWNlX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxKCZrYXdldGgtPmRldmljZV9sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtODQ4LDcgKzg0Nyw3IEBACiAJCW5ldC0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIAotCXNwaW5fdW5sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmthd2V0aC0+ZGV2aWNlX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvdnhnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTkyY2EyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMCBHYkUgUENJZSAjIEkvTworIyBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlciBsaW51eCBkcml2ZXIKKworb2JqLSQoQ09ORklHX1ZYR0UpICs9IHZ4Z2UubworCit2eGdlLW9ianMgOj0gdnhnZS1jb25maWcubyB2eGdlLXRyYWZmaWMubyB2eGdlLWV0aHRvb2wubyB2eGdlLW1haW4ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDFjODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKQEAgLTAsMCArMSw1MjY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1jb25maWcuYzogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+CisKKyNpbmNsdWRlICJ2eGdlLXRyYWZmaWMuaCIKKyNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgorCisvKgorICogX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGVzIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGNoYW5uZWwgYW5kIHZhcmlvdXMgYXJyYXlzCisgKiBpbiB0aGUgY2hhbm5lbAorICovCitzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwqCitfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBoLAorCQkJICAgZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlIHR5cGUsCisJdTMyIGxlbmd0aCwgdTMyIHBlcl9kdHJfc3BhY2UsIHZvaWQgKnVzZXJkYXRhKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJaW50IHNpemUgPSAwOworCXUzMiB2cF9pZDsKKworCWhsZGV2ID0gdnBoLT52cGF0aC0+aGxkZXY7CisJdnBfaWQgPSB2cGgtPnZwYXRoLT52cF9pZDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTzoKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2ZpZm8pOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkc6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY2hhbm5lbCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkKKwkJZ290byBleGl0MDsKKwlJTklUX0xJU1RfSEVBRCgmY2hhbm5lbC0+aXRlbSk7CisKKwljaGFubmVsLT5jb21tb25fcmVnID0gaGxkZXYtPmNvbW1vbl9yZWc7CisJY2hhbm5lbC0+Zmlyc3RfdnBfaWQgPSBobGRldi0+Zmlyc3RfdnBfaWQ7CisJY2hhbm5lbC0+dHlwZSA9IHR5cGU7CisJY2hhbm5lbC0+ZGV2aCA9IGhsZGV2OworCWNoYW5uZWwtPnZwaCA9IHZwaDsKKwljaGFubmVsLT51c2VyZGF0YSA9IHVzZXJkYXRhOworCWNoYW5uZWwtPnBlcl9kdHJfc3BhY2UgPSBwZXJfZHRyX3NwYWNlOworCWNoYW5uZWwtPmxlbmd0aCA9IGxlbmd0aDsKKwljaGFubmVsLT52cF9pZCA9IHZwX2lkOworCisJY2hhbm5lbC0+d29ya19hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwtPndvcmtfYXJyID09IE5VTEwpCisJCWdvdG8gZXhpdDE7CisKKwljaGFubmVsLT5mcmVlX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbC0+ZnJlZV9hcnIgPT0gTlVMTCkKKwkJZ290byBleGl0MTsKKwljaGFubmVsLT5mcmVlX3B0ciA9IGxlbmd0aDsKKworCWNoYW5uZWwtPnJlc2VydmVfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT5yZXNlcnZlX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gbGVuZ3RoOworCWNoYW5uZWwtPnJlc2VydmVfdG9wID0gMDsKKworCWNoYW5uZWwtPm9yaWdfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT5vcmlnX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCisJcmV0dXJuIGNoYW5uZWw7CitleGl0MToKKwlfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKGNoYW5uZWwpOworCitleGl0MDoKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX2ZyZWUgLSBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gZGVhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIGNoYW5uZWwgYW5kIHZhcmlvdXMgYXJyYXlzCisgKiBpbiB0aGUgY2hhbm5lbAorICovCit2b2lkIF9fdnhnZV9od19jaGFubmVsX2ZyZWUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCWtmcmVlKGNoYW5uZWwtPndvcmtfYXJyKTsKKwlrZnJlZShjaGFubmVsLT5mcmVlX2Fycik7CisJa2ZyZWUoY2hhbm5lbC0+cmVzZXJ2ZV9hcnIpOworCWtmcmVlKGNoYW5uZWwtPm9yaWdfYXJyKTsKKwlrZnJlZShjaGFubmVsKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUgLSBJbml0aWFsaXplIGEgY2hhbm5lbAorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGNoYW5uZWwgYnkgcHJvcGVybHkgc2V0dGluZyB0aGUKKyAqIHZhcmlvdXMgcmVmZXJlbmNlcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCXZwYXRoID0gY2hhbm5lbC0+dnBoLT52cGF0aDsKKworCWlmICgoY2hhbm5lbC0+cmVzZXJ2ZV9hcnIgIT0gTlVMTCkgJiYgKGNoYW5uZWwtPm9yaWdfYXJyICE9IE5VTEwpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5sZW5ndGg7IGkrKykKKwkJCWNoYW5uZWwtPm9yaWdfYXJyW2ldID0gY2hhbm5lbC0+cmVzZXJ2ZV9hcnJbaV07CisJfQorCisJc3dpdGNoIChjaGFubmVsLT50eXBlKSB7CisJY2FzZSBWWEdFX0hXX0NIQU5ORUxfVFlQRV9GSUZPOgorCQl2cGF0aC0+Zmlmb2ggPSAoc3RydWN0IF9fdnhnZV9od19maWZvICopY2hhbm5lbDsKKwkJY2hhbm5lbC0+c3RhdHMgPSAmKChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKikKKwkJCQljaGFubmVsKS0+c3RhdHMtPmNvbW1vbl9zdGF0czsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX0NIQU5ORUxfVFlQRV9SSU5HOgorCQl2cGF0aC0+cmluZ2ggPSAoc3RydWN0IF9fdnhnZV9od19yaW5nICopY2hhbm5lbDsKKwkJY2hhbm5lbC0+c3RhdHMgPSAmKChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKikKKwkJCQljaGFubmVsKS0+c3RhdHMtPmNvbW1vbl9zdGF0czsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCAtIFJlc2V0cyBhIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIGEgY2hhbm5lbCBieSBwcm9wZXJseSBzZXR0aW5nIHRoZSB2YXJpb3VzIHJlZmVyZW5jZXMKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2NoYW5uZWxfcmVzZXQoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXUzMiBpOworCisJZm9yIChpID0gMDsgaSA8IGNoYW5uZWwtPmxlbmd0aDsgaSsrKSB7CisJCWlmIChjaGFubmVsLT5yZXNlcnZlX2FyciAhPSBOVUxMKQorCQkJY2hhbm5lbC0+cmVzZXJ2ZV9hcnJbaV0gPSBjaGFubmVsLT5vcmlnX2FycltpXTsKKwkJaWYgKGNoYW5uZWwtPmZyZWVfYXJyICE9IE5VTEwpCisJCQljaGFubmVsLT5mcmVlX2FycltpXSA9IE5VTEw7CisJCWlmIChjaGFubmVsLT53b3JrX2FyciAhPSBOVUxMKQorCQkJY2hhbm5lbC0+d29ya19hcnJbaV0gPSBOVUxMOworCX0KKwljaGFubmVsLT5mcmVlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKwljaGFubmVsLT5yZXNlcnZlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKwljaGFubmVsLT5yZXNlcnZlX3RvcCA9IDA7CisJY2hhbm5lbC0+cG9zdF9pbmRleCA9IDA7CisJY2hhbm5lbC0+Y29tcGxfaW5kZXggPSAwOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQKKyAqIEluaXRpYWxpemUgY2VydGFpbiBQQ0kvUENJLVggY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIHdpdGggcmVjb21tZW5kZWQgdmFsdWVzLiBTYXZlIGNvbmZpZyBzcGFjZSBmb3IgZnV0dXJlIGh3IHJlc2V0cy4KKyAqLwordm9pZAorX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MTYgY21kID0gMDsKKworCS8qIFNldCB0aGUgUEVyciBSZXBjb25zZSBiaXQgYW5kIFNFUlIgaW4gUENJIGNvbW1hbmQgcmVnaXN0ZXIuICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwljbWQgfD0gMHgxNDA7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKworCXBjaV9zYXZlX3N0YXRlKGhsZGV2LT5wZGV2KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbAorICogV2lsbCBwb2xsIGNlcnRhaW4gcmVnaXN0ZXIgZm9yIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZS4KKyAqIFdpbGwgcG9sbCB1bnRpbCBtYXNrZWQgYml0IGlzIG5vdCBjbGVhcmVkLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwodm9pZCBfX2lvbWVtICpyZWcsIHU2NCBtYXNrLCB1MzIgbWF4X21pbGxpcykKK3sKKwl1NjQgdmFsNjQ7CisJdTMyIGkgPSAwOworCWVudW0gdnhnZV9od19zdGF0dXMgcmV0ID0gVlhHRV9IV19GQUlMOworCisJdWRlbGF5KDEwKTsKKworCWRvIHsKKwkJdmFsNjQgPSByZWFkcShyZWcpOworCQlpZiAoISh2YWw2NCAmIG1hc2spKQorCQkJcmV0dXJuIFZYR0VfSFdfT0s7CisJCXVkZWxheSgxMDApOworCX0gd2hpbGUgKCsraSA8PSA5KTsKKworCWkgPSAwOworCWRvIHsKKwkJdmFsNjQgPSByZWFkcShyZWcpOworCQlpZiAoISh2YWw2NCAmIG1hc2spKQorCQkJcmV0dXJuIFZYR0VfSFdfT0s7CisJCW1kZWxheSgxKTsKKwl9IHdoaWxlICgrK2kgPD0gbWF4X21pbGxpcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisgLyogX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrIC0gQ2hlY2sgaWYgdnBhdGggcmVzZXQKKyAqIGluIHByb2dyZXNzCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSB2cGF0aCByZXNldCBpbiBwcm9ncmVzcyByZWdpc3RlciBpcyB0dXJuZWQgemVybworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX3Jlc2V0X2luX3Byb2dfY2hlY2sodTY0IF9faW9tZW0gKnZwYXRoX3JzdF9pbl9wcm9nKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCh2cGF0aF9yc3RfaW5fcHJvZywKKwkJCVZYR0VfSFdfVlBBVEhfUlNUX0lOX1BST0dfVlBBVEhfUlNUX0lOX1BST0coMHgxZmZmZiksCisJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3RvY19nZXQKKyAqIFRoaXMgcm91dGluZSBzZXRzIHRoZSBzd2FwcGVyIGFuZCByZWFkcyB0aGUgdG9jIHBvaW50ZXIgYW5kIHJldHVybnMgdGhlCisgKiBtZW1vcnkgbWFwcGVkIGFkZHJlc3Mgb2YgdGhlIHRvYworICovCitzdHJ1Y3QgdnhnZV9od190b2NfcmVnIF9faW9tZW0gKgorX192eGdlX2h3X2RldmljZV90b2NfZ2V0KHZvaWQgX19pb21lbSAqYmFyMCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyBfX2lvbWVtICp0b2MgPSBOVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnID0KKwkJKHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqKWJhcjA7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfbGVnYWN5X3N3YXBwZXJfc2V0KGxlZ2FjeV9yZWcpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPQlyZWFkcSgmbGVnYWN5X3JlZy0+dG9jX2ZpcnN0X3BvaW50ZXIpOworCXRvYyA9IChzdHJ1Y3QgdnhnZV9od190b2NfcmVnIF9faW9tZW0gKikoYmFyMCt2YWw2NCk7CitleGl0OgorCXJldHVybiB0b2M7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ19hZGRyX2dldAorICogVGhpcyByb3V0aW5lIHNldHMgdGhlIHN3YXBwZXIgYW5kIHJlYWRzIHRoZSB0b2MgcG9pbnRlciBhbmQgaW5pdGlhbGl6ZXMgdGhlCisgKiByZWdpc3RlciBsb2NhdGlvbiBwb2ludGVycyBpbiB0aGUgZGV2aWNlIG9iamVjdC4gSXQgd2FpdHMgdW50aWwgdGhlIHJpYyBpcworICogY29tcGxldGVkIGluaXRpYWxpemluZyByZWdpc3RlcnMuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQ7CisJdTMyIGk7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaGxkZXYtPmxlZ2FjeV9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICopaGxkZXYtPmJhcjA7CisKKwlobGRldi0+dG9jX3JlZyA9IF9fdnhnZV9od19kZXZpY2VfdG9jX2dldChobGRldi0+YmFyMCk7CisJaWYgKGhsZGV2LT50b2NfcmVnICA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2NfY29tbW9uX3BvaW50ZXIpOworCWhsZGV2LT5jb21tb25fcmVnID0KKwkoc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZyBfX2lvbWVtICopKGhsZGV2LT5iYXIwICsgdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY19tcnBjaW1fcG9pbnRlcik7CisJaGxkZXYtPm1ycGNpbV9yZWcgPQorCQkoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZyBfX2lvbWVtICopKGhsZGV2LT5iYXIwICsgdmFsNjQpOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfVElUQU5fU1JQQ0lNX1JFR19TUEFDRVM7IGkrKykgeworCQl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX3NycGNpbV9wb2ludGVyW2ldKTsKKwkJaGxkZXYtPnNycGNpbV9yZWdbaV0gPQorCQkJKHN0cnVjdCB2eGdlX2h3X3NycGNpbV9yZWcgX19pb21lbSAqKQorCQkJCShobGRldi0+YmFyMCArIHZhbDY0KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19USVRBTl9WUE1HTVRfUkVHX1NQQUNFUzsgaSsrKSB7CisJCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2NfdnBtZ210X3BvaW50ZXJbaV0pOworCQlobGRldi0+dnBtZ210X3JlZ1tpXSA9CisJCShzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKikoaGxkZXYtPmJhcjAgKyB2YWw2NCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFUzsgaSsrKSB7CisJCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2NfdnBhdGhfcG9pbnRlcltpXSk7CisJCWhsZGV2LT52cGF0aF9yZWdbaV0gPQorCQkJKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopCisJCQkJKGhsZGV2LT5iYXIwICsgdmFsNjQpOworCX0KKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2Nfa2RmYyk7CisKKwlzd2l0Y2ggKFZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfQklSKHZhbDY0KSkgeworCWNhc2UgMDoKKwkJaGxkZXYtPmtkZmMgPSAodTggX19pb21lbSAqKShobGRldi0+YmFyMCArCisJCQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWw2NCkpOworCQlicmVhazsKKwljYXNlIDI6CisJCWhsZGV2LT5rZGZjID0gKHU4IF9faW9tZW0gKikoaGxkZXYtPmJhcjEgKworCQkJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsNjQpKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlobGRldi0+a2RmYyA9ICh1OCBfX2lvbWVtICopKGhsZGV2LT5iYXIyICsKKwkJCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbDY0KSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjaygKKwkJCSh1NjQgX19pb21lbSAqKSZobGRldi0+Y29tbW9uX3JlZy0+dnBhdGhfcnN0X2luX3Byb2cpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9pZF9nZXQKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHNldHMgdGhlIGRldmljZSBpZCBhbmQgcmV2aXNpb24gbnVtYmVycyBpbnRvIHRoZSBkZXZpY2UKKyAqIHN0cnVjdHVyZQorICovCit2b2lkIF9fdnhnZV9od19kZXZpY2VfaWRfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQ7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fYXNpY19pZCk7CisJaGxkZXYtPmRldmljZV9pZCA9CisJCSh1MTYpVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX0RFVklDRV9JRCh2YWw2NCk7CisKKwlobGRldi0+bWFqb3JfcmV2aXNpb24gPQorCQkodTgpVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX01BSk9SX1JFVklTSU9OKHZhbDY0KTsKKworCWhsZGV2LT5taW5vcl9yZXZpc2lvbiA9CisJCSh1OClWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfTUlOT1JfUkVWSVNJT04odmFsNjQpOworCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9hY2Nlc3NfcmlnaHRzX2dldDogR2V0IEFjY2VzcyBSaWdodHMgb2YgdGhlIGRyaXZlcgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIEFjY2VzcyBSaWdodHMgb2YgdGhlIGRyaXZlcgorICovCitzdGF0aWMgdTMyCitfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0KHUzMiBob3N0X3R5cGUsIHUzMiBmdW5jX2lkKQoreworCXUzMiBhY2Nlc3NfcmlnaHRzID0gVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1ZQQVRIOworCisJc3dpdGNoIChob3N0X3R5cGUpIHsKKwljYXNlIFZYR0VfSFdfTk9fTVJfTk9fU1JfTk9STUFMX0ZVTkNUSU9OOgorCQlpZiAoZnVuY19pZCA9PSAwKSB7CisJCQlhY2Nlc3NfcmlnaHRzIHw9IFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0gfAorCQkJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNOworCQl9CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19NUl9OT19TUl9WSDBfQkFTRV9GVU5DVElPTjoKKwkJYWNjZXNzX3JpZ2h0cyB8PSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNIHwKKwkJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfTk9fTVJfU1JfVkgwX0ZVTkNUSU9OMDoKKwkJYWNjZXNzX3JpZ2h0cyB8PSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNIHwKKwkJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNOworCQlicmVhazsKKwljYXNlIFZYR0VfSFdfTk9fTVJfU1JfVkgwX1ZJUlRVQUxfRlVOQ1RJT046CisJY2FzZSBWWEdFX0hXX1NSX1ZIX1ZJUlRVQUxfRlVOQ1RJT046CisJY2FzZSBWWEdFX0hXX01SX1NSX1ZIMF9JTlZBTElEX0NPTkZJRzoKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX1NSX1ZIX0ZVTkNUSU9OMDoKKwljYXNlIFZYR0VfSFdfVkhfTk9STUFMX0ZVTkNUSU9OOgorCQlhY2Nlc3NfcmlnaHRzIHw9IFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU07CisJCWJyZWFrOworCX0KKworCXJldHVybiBhY2Nlc3NfcmlnaHRzOworfQorLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldAorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGhvc3QgdHlwZSBhc3NpZ25tZW50cworICovCit2b2lkIF9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCXUzMiBpOworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPmhvc3RfdHlwZV9hc3NpZ25tZW50cyk7CisKKwlobGRldi0+aG9zdF90eXBlID0KKwkgICAodTMyKVZYR0VfSFdfSE9TVF9UWVBFX0FTU0lHTk1FTlRTX0dFVF9IT1NUX1RZUEVfQVNTSUdOTUVOVFModmFsNjQpOworCisJaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT52cGF0aF9hc3NpZ25tZW50cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCWhsZGV2LT5mdW5jX2lkID0KKwkJCV9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldChpLCBobGRldi0+dnBtZ210X3JlZ1tpXSk7CisKKwkJaGxkZXYtPmFjY2Vzc19yaWdodHMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2FjY2Vzc19yaWdodHNfZ2V0KAorCQkJaGxkZXYtPmhvc3RfdHlwZSwgaGxkZXYtPmZ1bmNfaWQpOworCisJCWhsZGV2LT5maXJzdF92cF9pZCA9IGk7CisJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od192ZXJpZnlfcGNpX2VfaW5mbyAtIFZhbGlkYXRlIHRoZSBwY2ktZSBsaW5rIHBhcmFtZXRlcnMgc3VjaCBhcworICogbGluayB3aWR0aCBhbmQgc2lnbmFsbGluZyByYXRlLgorICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZlcmlmeV9wY2lfZV9pbmZvKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlpbnQgZXhwX2NhcDsKKwl1MTYgbG5rOworCisJLyogR2V0IHRoZSBuZWdvdGlhdGVkIGxpbmsgd2lkdGggYW5kIHNwZWVkIGZyb20gUENJIGNvbmZpZyBzcGFjZSAqLworCWV4cF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGhsZGV2LT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoaGxkZXYtPnBkZXYsIGV4cF9jYXAgKyBQQ0lfRVhQX0xOS1NUQSwgJmxuayk7CisKKwlpZiAoKGxuayAmIFBDSV9FWFBfTE5LU1RBX0NMUykgIT0gMSkKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX0lOVkFMSURfUENJX0lORk87CisKKwlzd2l0Y2ggKChsbmsgJiBQQ0lfRVhQX0xOS1NUQV9OTFcpID4+IDQpIHsKKwljYXNlIFBDSUVfTE5LX1dJRFRIX1JFU1JWOgorCWNhc2UgUENJRV9MTktfWDE6CisJY2FzZSBQQ0lFX0xOS19YMjoKKwljYXNlIFBDSUVfTE5LX1g0OgorCWNhc2UgUENJRV9MTktfWDg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBWWEdFX0hXX0VSUl9JTlZBTElEX1BDSV9JTkZPOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlpZiAoKGhsZGV2LT5ob3N0X3R5cGUgPT0gVlhHRV9IV19OT19NUl9OT19TUl9OT1JNQUxfRlVOQ1RJT04gfHwKKwlobGRldi0+aG9zdF90eXBlID09IFZYR0VfSFdfTVJfTk9fU1JfVkgwX0JBU0VfRlVOQ1RJT04gfHwKKwlobGRldi0+aG9zdF90eXBlID09IFZYR0VfSFdfTk9fTVJfU1JfVkgwX0ZVTkNUSU9OMCkgJiYKKwkoaGxkZXYtPmZ1bmNfaWQgPT0gMCkpCisJCXJldHVybiBWWEdFX0hXX09LOworCWVsc2UKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKK30KKworLyoKKyAqIHZ4Z2VfaHdfd3JyX3JlYmFsYW5jZSAtIFJlYmFsYW5jZSB0aGUgUlhfV1JSIGFuZCBLREZDX1dSUiBjYWxhbmRhcnMuCisgKiBSZWJhbGFuY2UgdGhlIFJYX1dSUiBhbmQgS0RGQ19XUlIgY2FsYW5kYXJzLgorICovCitzdGF0aWMgZW51bQordnhnZV9od19zdGF0dXMgdnhnZV9od193cnJfcmViYWxhbmNlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQ7CisJdTMyIHdycl9zdGF0ZXNbVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFU107CisJdTMyIGksIGosIGhvd19vZnRlbiA9IDE7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCS8qIFJlc2V0IHRoZSBwcmlvcml0aWVzIGFzc2lnbmVkIHRvIHRoZSBXUlIgYXJiaXRyYXRpb24KKwlwaGFzZXMgZm9yIHRoZSByZWNlaXZlIHRyYWZmaWMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19XUlJfUklOR19DT1VOVDsgaSsrKQorCQl3cml0ZXEoMCwgKCgmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3dfcm91bmRfcm9iaW5fMCkgKyBpKSk7CisKKwkvKiBSZXNldCB0aGUgdHJhbnNtaXQgRklGTyBzZXJ2aWNpbmcgY2FsZW5kYXIgZm9yIEZJRk9zICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfV1JSX0ZJRk9fQ09VTlQ7IGkrKykgeworCQl3cml0ZXEoMCwgKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfd19yb3VuZF9yb2Jpbl8wKSArIGkpKTsKKwkJd3JpdGVxKDAsICgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX3dfcm91bmRfcm9iaW5fMjApICsgaSkpOworCX0KKworCS8qIEFzc2lnbiBXUlIgcHJpb3JpdHkgIDAgZm9yIGFsbCBGSUZPcyAqLworCWZvciAoaSA9IDE7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJd3JpdGVxKFZYR0VfSFdfS0RGQ19GSUZPXzBfQ1RSTF9XUlJfTlVNQkVSKDApLAorCQkJCSgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2ZpZm9fMF9jdHJsKSAgKyBpKSk7CisKKwkJd3JpdGVxKFZYR0VfSFdfS0RGQ19GSUZPXzE3X0NUUkxfV1JSX05VTUJFUigwKSwKKwkJCSgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2ZpZm9fMTdfY3RybCkgKyBpKSk7CisJfQorCisJLyogUmVzZXQgdG8gc2VydmljZSBub24tb2ZmbG9hZCBkb29yYmVsbHMgKi8KKwl3cml0ZXEoMCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2VudHJ5X3R5cGVfc2VsXzApOworCXdyaXRlcSgwLCAmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZW50cnlfdHlwZV9zZWxfMSk7CisKKwkvKiBTZXQgcHJpb3JpdHkgMCB0byBhbGwgcmVjZWl2ZSBxdWV1ZXMgKi8KKwl3cml0ZXEoMCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8wKTsKKwl3cml0ZXEoMCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8xKTsKKwl3cml0ZXEoMCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8yKTsKKworCS8qIEluaXRpYWxpemUgYWxsIHRoZSBzbG90cyBhcyB1bnVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFUzsgaSsrKQorCQl3cnJfc3RhdGVzW2ldID0gLTE7CisKKwkvKiBQcmVwYXJlIHRoZSBGaWZvIHNlcnZpY2Ugc3RhdGVzICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghaGxkZXYtPmNvbmZpZy52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aCkKKwkJCWNvbnRpbnVlOworCisJCWhvd19vZnRlbiA9IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCAvCisJCQkJaGxkZXYtPmNvbmZpZy52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aDsKKwkJaWYgKGhvd19vZnRlbikgeworCisJCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19XUlJfRklGT19TRVJWSUNFX1NUQVRFUzspIHsKKwkJCQlpZiAod3JyX3N0YXRlc1tqXSA9PSAtMSkgeworCQkJCQl3cnJfc3RhdGVzW2pdID0gaTsKKwkJCQkJLyogTWFrZSBzdXJlIGVhY2ggZmlmbyBpcyBzZXJ2aWNlZAorCQkJCQkgKiBhdGxlYXN0IG9uY2UgKi8KKwkJCQkJaWYgKGkgPT0gaikKKwkJCQkJCWogKz0gVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsKKwkJCQkJZWxzZQorCQkJCQkJaiArPSBob3dfb2Z0ZW47CisJCQkJfSBlbHNlCisJCQkJCWorKzsKKwkJCX0KKwkJfQorCX0KKworCS8qIEZpbGwgdGhlIHVudXNlZCBzbG90cyB3aXRoIDAgKi8KKwlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19XRUlHSFRFRF9SUl9TRVJWSUNFX1NUQVRFUzsgaisrKSB7CisJCWlmICh3cnJfc3RhdGVzW2pdID09IC0xKQorCQkJd3JyX3N0YXRlc1tqXSA9IDA7CisJfQorCisJLyogQXNzaWduIFdSUiBwcmlvcml0eSBudW1iZXIgZm9yIEZJRk9zICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQl3cml0ZXEoVlhHRV9IV19LREZDX0ZJRk9fMF9DVFJMX1dSUl9OVU1CRVIoaSksCisJCQkJKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZmlmb18wX2N0cmwpICsgaSkpOworCisJCXdyaXRlcShWWEdFX0hXX0tERkNfRklGT18xN19DVFJMX1dSUl9OVU1CRVIoaSksCisJCQkoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19maWZvXzE3X2N0cmwpICsgaSkpOworCX0KKworCS8qIE1vZGlmeSB0aGUgc2VydmljaW5nIGFsZ29yaXRobSBhcHBsaWVkIHRvIHRoZSAzIHR5cGVzIG9mIGRvb3JiZWxscy4KKwlpLmUsIG5vbmUtb2ZmbG9hZCwgbWVzc2FnZSBhbmQgb2ZmbG9hZCAqLworCXdyaXRlcShWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMCgwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzEoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8yKDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMygwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzQoMSkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl81KDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNigwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzcoMCksCisJCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2VudHJ5X3R5cGVfc2VsXzApOworCisJd3JpdGVxKFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8xX05VTUJFUl84KDEpLAorCQkJCSZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19lbnRyeV90eXBlX3NlbF8xKTsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgVlhHRV9IV19XUlJfRklGT19DT1VOVDsgaSsrKSB7CisKKwkJdmFsNjQgPSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8wKHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzEod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMih3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8zKHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzQod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNSh3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl82KHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzcod3JyX3N0YXRlc1tqKytdKTsKKworCQl3cml0ZXEodmFsNjQsICgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfd19yb3VuZF9yb2Jpbl8wICsgaSkpOworCQl3cml0ZXEodmFsNjQsICgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfd19yb3VuZF9yb2Jpbl8yMCArIGkpKTsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIHByaW9yaXRpZXMgYXNzaWduZWQgdG8gcmVjZWl2ZSBxdWV1ZXMgKi8KKwl3cml0ZXEoVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzAoMCkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzEoMSkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzIoMikgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzMoMykgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzQoNCkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzUoNSkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzYoNikgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzcoNyksCisJCQkmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzApOworCisJd3JpdGVxKFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl84KDgpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl85KDkpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMCgxMCkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzExKDExKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTIoMTIpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMygxMykgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzE0KDE0KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTUoMTUpLAorCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8xKTsKKworCXdyaXRlcShWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzJfUlhfUV9OVU1CRVJfMTYoMTYpLAorCQkJCSZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMik7CisKKwkvKiBJbml0aWFsaXplIGFsbCB0aGUgc2xvdHMgYXMgdW51c2VkICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVM7IGkrKykKKwkJd3JyX3N0YXRlc1tpXSA9IC0xOworCisJLyogUHJlcGFyZSB0aGUgUmluZyBzZXJ2aWNlIHN0YXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIWhsZGV2LT5jb25maWcudnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGgpCisJCQljb250aW51ZTsKKworCQlob3dfb2Z0ZW4gPSBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVggLworCQkJCWhsZGV2LT5jb25maWcudnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGg7CisKKwkJaWYgKGhvd19vZnRlbikgeworCQkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfV1JSX1JJTkdfU0VSVklDRV9TVEFURVM7KSB7CisJCQkJaWYgKHdycl9zdGF0ZXNbal0gPT0gLTEpIHsKKwkJCQkJd3JyX3N0YXRlc1tqXSA9IGk7CisJCQkJCS8qIE1ha2Ugc3VyZSBlYWNoIHJpbmcgaXMKKwkJCQkJICogc2VydmljZWQgYXRsZWFzdCBvbmNlICovCisJCQkJCWlmIChpID09IGopCisJCQkJCQlqICs9IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7CisJCQkJCWVsc2UKKwkJCQkJCWogKz0gaG93X29mdGVuOworCQkJCX0gZWxzZQorCQkJCQlqKys7CisJCQl9CisJCX0KKwl9CisKKwkvKiBGaWxsIHRoZSB1bnVzZWQgc2xvdHMgd2l0aCAwICovCisJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVM7IGorKykgeworCQlpZiAod3JyX3N0YXRlc1tqXSA9PSAtMSkKKwkJCXdycl9zdGF0ZXNbal0gPSAwOworCX0KKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgVlhHRV9IV19XUlJfUklOR19DT1VOVDsgaSsrKSB7CisJCXZhbDY0ID0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMCgKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18xKAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzIoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMygKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU180KAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzUoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNigKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU183KAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisKKwkJd3JpdGVxKHZhbDY0LCAoKCZobGRldi0+bXJwY2ltX3JlZy0+cnhfd19yb3VuZF9yb2Jpbl8wKSArIGkpKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUKKyAqIEluaXRpYWxpemUgVGl0YW4tViBoYXJkd2FyZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCS8qIFZhbGlkYXRlIHRoZSBwY2ktZSBsaW5rIHdpZHRoIGFuZCBzcGVlZCAqLworCXN0YXR1cyA9IF9fdnhnZV9od192ZXJpZnlfcGNpX2VfaW5mbyhobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2eGdlX2h3X3dycl9yZWJhbGFuY2UoaGxkZXYpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0IC0gR2V0IHRoZSBodyBpbmZvcm1hdGlvbgorICogUmV0dXJucyB0aGUgdnBhdGggbWFzayB0aGF0IGhhcyB0aGUgYml0cyBzZXQgZm9yIGVhY2ggdnBhdGggYWxsb2NhdGVkCisgKiBmb3IgdGhlIGRyaXZlciwgRlcgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzZSBmb3IKKyAqIGVhY2ggdnBhdGgKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQKK3Z4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0KHZvaWQgX19pb21lbSAqYmFyMCwKKwkJCSAgIHN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKQoreworCXUzMiBpOworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgdnhnZV9od190b2NfcmVnIF9faW9tZW0gKnRvYzsKKwlzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnIF9faW9tZW0gKm1ycGNpbV9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZyBfX2lvbWVtICpjb21tb25fcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICp2cG1nbXRfcmVnOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJbWVtc2V0KGh3X2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbykpOworCisJdG9jID0gX192eGdlX2h3X2RldmljZV90b2NfZ2V0KGJhcjApOworCWlmICh0b2MgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9DUklUSUNBTDsKKwkJZ290byBleGl0OworCX0KKworCXZhbDY0ID0gcmVhZHEoJnRvYy0+dG9jX2NvbW1vbl9wb2ludGVyKTsKKwljb21tb25fcmVnID0gKHN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcgX19pb21lbSAqKShiYXIwICsgdmFsNjQpOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrKAorCQkodTY0IF9faW9tZW0gKikmY29tbW9uX3JlZy0+dnBhdGhfcnN0X2luX3Byb2cpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJaHdfaW5mby0+dnBhdGhfbWFzayA9IHJlYWRxKCZjb21tb25fcmVnLT52cGF0aF9hc3NpZ25tZW50cyk7CisKKwl2YWw2NCA9IHJlYWRxKCZjb21tb25fcmVnLT5ob3N0X3R5cGVfYXNzaWdubWVudHMpOworCisJaHdfaW5mby0+aG9zdF90eXBlID0KKwkgICAodTMyKVZYR0VfSFdfSE9TVF9UWVBFX0FTU0lHTk1FTlRTX0dFVF9IT1NUX1RZUEVfQVNTSUdOTUVOVFModmFsNjQpOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKChod19pbmZvLT52cGF0aF9tYXNrKSAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cG1nbXRfcG9pbnRlcltpXSk7CisKKwkJdnBtZ210X3JlZyA9IChzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKikKKwkJCQkoYmFyMCArIHZhbDY0KTsKKworCQlod19pbmZvLT5mdW5jX2lkID0gX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KGksIHZwbWdtdF9yZWcpOworCQlpZiAoX192eGdlX2h3X2RldmljZV9hY2Nlc3NfcmlnaHRzX2dldChod19pbmZvLT5ob3N0X3R5cGUsCisJCQlod19pbmZvLT5mdW5jX2lkKSAmCisJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnRvYy0+dG9jX21ycGNpbV9wb2ludGVyKTsKKworCQkJbXJwY2ltX3JlZyA9IChzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnIF9faW9tZW0gKikKKwkJCQkJKGJhcjAgKyB2YWw2NCk7CisKKwkJCXdyaXRlcSgwLCAmbXJwY2ltX3JlZy0+eGdtYWNfZ2VuX2Z3X21lbW9fbWFzayk7CisJCQl3bWIoKTsKKwkJfQorCisJCXZhbDY0ID0gcmVhZHEoJnRvYy0+dG9jX3ZwYXRoX3BvaW50ZXJbaV0pOworCisJCXZwYXRoX3JlZyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqKShiYXIwICsgdmFsNjQpOworCisJCWh3X2luZm8tPmZ1bmN0aW9uX21vZGUgPQorCQkJX192eGdlX2h3X3ZwYXRoX3BjaV9mdW5jX21vZGVfZ2V0KGksIHZwYXRoX3JlZyk7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQoaSwgdnBhdGhfcmVnLCBod19pbmZvKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0KGksIHZwYXRoX3JlZywgaHdfaW5mbyk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoKGh3X2luZm8tPnZwYXRoX21hc2spICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXZhbDY0ID0gcmVhZHEoJnRvYy0+dG9jX3ZwYXRoX3BvaW50ZXJbaV0pOworCQl2cGF0aF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKikoYmFyMCArIHZhbDY0KTsKKworCQlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KGksIHZwYXRoX3JlZywKKwkJCQlod19pbmZvLT5tYWNfYWRkcnNbaV0sCisJCQkJaHdfaW5mby0+bWFjX2FkZHJfbWFza3NbaV0pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZSAtIEluaXRpYWxpemUgVGl0YW4gZGV2aWNlLgorICogSW5pdGlhbGl6ZSBUaXRhbiBkZXZpY2UuIE5vdGUgdGhhdCBhbGwgdGhlIGFyZ3VtZW50cyBvZiB0aGlzIHB1YmxpYyBBUEkKKyAqIGFyZSAnSU4nLCBpbmNsdWRpbmcgQGhsZGV2LiBEcml2ZXIgY29vcGVyYXRlcyB3aXRoCisgKiBPUyB0byBmaW5kIG5ldyBUaXRhbiBkZXZpY2UsIGxvY2F0ZSBpdHMgUENJIGFuZCBtZW1vcnkgc3BhY2VzLgorICoKKyAqIFdoZW4gZG9uZSwgdGhlIGRyaXZlciBhbGxvY2F0ZXMgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlKSBieXRlcyBmb3IgSFcKKyAqIHRvIGVuYWJsZSB0aGUgbGF0dGVyIHRvIHBlcmZvcm0gVGl0YW4gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0Cit2eGdlX2h3X2RldmljZV9pbml0aWFsaXplKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICoqZGV2aCwKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciAqYXR0ciwKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnKQoreworCXUzMiBpOworCXUzMiBuYmxvY2tzID0gMDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSBOVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrKGRldmljZV9jb25maWcpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikKKwkJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlKSk7CisJaWYgKGhsZGV2ID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCW1lbXNldChobGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlKSk7CisJaGxkZXYtPm1hZ2ljID0gVlhHRV9IV19ERVZJQ0VfTUFHSUM7CisKKwl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfRVJSLCBWWEdFX0NPTVBPTkVOVF9BTEwpOworCisJLyogYXBwbHkgY29uZmlnICovCisJbWVtY3B5KCZobGRldi0+Y29uZmlnLCBkZXZpY2VfY29uZmlnLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZykpOworCisJaGxkZXYtPmJhcjAgPSBhdHRyLT5iYXIwOworCWhsZGV2LT5iYXIxID0gYXR0ci0+YmFyMTsKKwlobGRldi0+YmFyMiA9IGF0dHItPmJhcjI7CisJaGxkZXYtPnBkZXYgPSBhdHRyLT5wZGV2OworCisJaGxkZXYtPnVsZF9jYWxsYmFja3MubGlua191cCA9IGF0dHItPnVsZF9jYWxsYmFja3MubGlua191cDsKKwlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd24gPSBhdHRyLT51bGRfY2FsbGJhY2tzLmxpbmtfZG93bjsKKwlobGRldi0+dWxkX2NhbGxiYWNrcy5jcml0X2VyciA9IGF0dHItPnVsZF9jYWxsYmFja3MuY3JpdF9lcnI7CisKKwlfX3Z4Z2VfaHdfZGV2aWNlX3BjaV9lX2luaXQoaGxkZXYpOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdfYWRkcl9nZXQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCV9fdnhnZV9od19kZXZpY2VfaWRfZ2V0KGhsZGV2KTsKKworCV9fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChobGRldik7CisKKwkvKiBJbmNyZW1lbnRpbmcgZm9yIHN0YXRzIGJsb2NrcyAqLworCW5ibG9ja3MrKzsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKGRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLmVuYWJsZSA9PQorCQkJVlhHRV9IV19SSU5HX0VOQUJMRSkKKwkJCW5ibG9ja3MgKz0gZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucmluZ19ibG9ja3M7CisKKwkJaWYgKGRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmVuYWJsZSA9PQorCQkJVlhHRV9IV19GSUZPX0VOQUJMRSkKKwkJCW5ibG9ja3MgKz0gZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZmlmb19ibG9ja3M7CisJCW5ibG9ja3MrKzsKKwl9CisKKwlpZiAoX192eGdlX2h3X2Jsb2NrcG9vbF9jcmVhdGUoaGxkZXYsCisJCSZobGRldi0+YmxvY2tfcG9vbCwKKwkJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9pbml0aWFsICsgbmJsb2NrcywKKwkJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9tYXggKyBuYmxvY2tzKSAhPSBWWEdFX0hXX09LKSB7CisKKwkJdnhnZV9od19kZXZpY2VfdGVybWluYXRlKGhsZGV2KTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZShobGRldik7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9od19kZXZpY2VfdGVybWluYXRlKGhsZGV2KTsKKwkJZ290byBleGl0OworCX0KKworCSpkZXZoID0gaGxkZXY7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUgLSBUZXJtaW5hdGUgVGl0YW4gZGV2aWNlLgorICogVGVybWluYXRlIEhXIGRldmljZS4KKyAqLwordm9pZAordnhnZV9od19kZXZpY2VfdGVybWluYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl2eGdlX2Fzc2VydChobGRldi0+bWFnaWMgPT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpOworCisJaGxkZXYtPm1hZ2ljID0gVlhHRV9IV19ERVZJQ0VfREVBRDsKKwlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koJmhsZGV2LT5ibG9ja19wb29sKTsKKwl2ZnJlZShobGRldik7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9zdGF0c19nZXQgLSBHZXQgdGhlIGRldmljZSBodyBzdGF0aXN0aWNzLgorICogUmV0dXJucyB0aGUgdnBhdGggaC93IHN0YXRzIGZvciB0aGUgZGV2aWNlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8gKmh3X3N0YXRzKQoreworCXUzMiBpOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSB8fAorCQkJKGhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLnZwX29wZW4gPT0KKwkJCQlWWEdFX0hXX1ZQX05PVF9PUEVOKSkKKwkJCWNvbnRpbnVlOworCisJCW1lbWNweShobGRldi0+dmlydHVhbF9wYXRoc1tpXS5od19zdGF0c19zYXYsCisJCQkJaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0uaHdfc3RhdHMsCisJCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KAorCQkJJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLAorCQkJaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0uaHdfc3RhdHMpOworCX0KKworCW1lbWNweShod19zdGF0cywgJmhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cywKKwkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbykpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZHJpdmVyX3N0YXRzX2dldCAtIEdldCB0aGUgZGV2aWNlIHN3IHN0YXRpc3RpY3MuCisgKiBSZXR1cm5zIHRoZSB2cGF0aCBzL3cgc3RhdHMgZm9yIHRoZSBkZXZpY2UuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kcml2ZXJfc3RhdHNfZ2V0KAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCW1lbWNweShzd19zdGF0cywgJmhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cywKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzIC0gQWNjZXNzIHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGdpdmVuIGxvY2F0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvZmZzZXQgYW5kIHBlcmZvcm0gYW4gb3BlcmF0aW9uCisgKiBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24gYW5kIG9mZnNldC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgICB1MzIgb3BlcmF0aW9uLCB1MzIgbG9jYXRpb24sIHUzMiBvZmZzZXQsIHU2NCAqc3RhdCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfT1Aob3BlcmF0aW9uKSB8CisJCVZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX1NUUk9CRSB8CisJCVZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX0xPQ19TRUwobG9jYXRpb24pIHwKKwkJVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfT0ZGU0VUX1NFTChvZmZzZXQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmaGxkZXYtPm1ycGNpbV9yZWctPnhtYWNfc3RhdHNfc3lzX2NtZCwKKwkJCQlWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9TVFJPQkUsCisJCQkJaGxkZXYtPmNvbmZpZy5kZXZpY2VfcG9sbF9taWxsaXMpOworCisJaWYgKChzdGF0dXMgPT0gVlhHRV9IV19PSykgJiYgKG9wZXJhdGlvbiA9PSBWWEdFX0hXX1NUQVRTX09QX1JFQUQpKQorCQkqc3RhdCA9IHJlYWRxKCZobGRldi0+bXJwY2ltX3JlZy0+eG1hY19zdGF0c19zeXNfZGF0YSk7CisJZWxzZQorCQkqc3RhdCA9IDA7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0IC0gR2V0IHRoZSBTdGF0aXN0aWNzIG9uIGFnZ3JlZ2F0ZSBwb3J0CisgKiBHZXQgdGhlIFN0YXRpc3RpY3Mgb24gYWdncmVnYXRlIHBvcnQKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2VfeG1hY19hZ2dyX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiBwb3J0LAorCQkJCSAgIHN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cyAqYWdncl9zdGF0cykKK3sKKwl1NjQgKnZhbDY0OworCWludCBpOworCXUzMiBvZmZzZXQgPSBWWEdFX0hXX1NUQVRTX0FHR1JuX09GRlNFVDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9ICh1NjQgKilhZ2dyX3N0YXRzOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfeG1hY19hZ2dyX3N0YXRzKSAvIDg7IGkrKykgeworCQlzdGF0dXMgPSB2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoaGxkZXYsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJVlhHRV9IV19TVEFUU19MT0NfQUdHUiwKKwkJCQkJKChvZmZzZXQgKyAoMTA0ICogcG9ydCkpID4+IDMpLCB2YWw2NCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlvZmZzZXQgKz0gODsKKwkJdmFsNjQrKzsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV94bWFjX3BvcnRfc3RhdHNfZ2V0IC0gR2V0IHRoZSBTdGF0aXN0aWNzIG9uIGEgcG9ydAorICogR2V0IHRoZSBTdGF0aXN0aWNzIG9uIHBvcnQKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2VfeG1hY19wb3J0X3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiBwb3J0LAorCQkJCSAgIHN0cnVjdCB2eGdlX2h3X3htYWNfcG9ydF9zdGF0cyAqcG9ydF9zdGF0cykKK3sKKwl1NjQgKnZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlpbnQgaTsKKwl1MzIgb2Zmc2V0ID0gMHgwOworCXZhbDY0ID0gKHU2NCAqKSBwb3J0X3N0YXRzOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzKSAvIDg7IGkrKykgeworCQlzdGF0dXMgPSB2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoaGxkZXYsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJVlhHRV9IV19TVEFUU19MT0NfQUdHUiwKKwkJCQkJKChvZmZzZXQgKyAoNjA4ICogcG9ydCkpID4+IDMpLCB2YWw2NCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlvZmZzZXQgKz0gODsKKwkJdmFsNjQrKzsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3htYWNfc3RhdHNfZ2V0IC0gR2V0IHRoZSBYTUFDIFN0YXRpc3RpY3MKKyAqIEdldCB0aGUgWE1BQyBTdGF0aXN0aWNzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgICAgIHN0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMgKnhtYWNfc3RhdHMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXUzMiBpOworCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfeG1hY19hZ2dyX3N0YXRzX2dldChobGRldiwKKwkJCQkJMCwgJnhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNbMF0pOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0KGhsZGV2LAorCQkJCTEsICZ4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzWzFdKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWZvciAoaSA9IDA7IGkgPD0gVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lEOyBpKyspIHsKKworCQlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV94bWFjX3BvcnRfc3RhdHNfZ2V0KGhsZGV2LAorCQkJCQlpLCAmeG1hY19zdGF0cy0+cG9ydF9zdGF0c1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQoCisJCQkJCSZobGRldi0+dmlydHVhbF9wYXRoc1tpXSwKKwkJCQkJJnhtYWNfc3RhdHMtPnZwYXRoX3R4X3N0YXRzW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCgKKwkJCQkJJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLAorCQkJCQkmeG1hY19zdGF0cy0+dnBhdGhfcnhfc3RhdHNbaV0pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfZGVidWdfc2V0IC0gU2V0IHRoZSBkZWJ1ZyBtb2R1bGUsIGxldmVsIGFuZCB0aW1lc3RhbXAKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgZGVidWcgb3V0cHV0CisgKi8KK3ZvaWQgdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgICAgIGVudW0gdnhnZV9kZWJ1Z19sZXZlbCBsZXZlbCwgdTMyIG1hc2spCit7CisJaWYgKGhsZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19UUkFDRV9NQVNLKSB8fCBcCisJZGVmaW5lZChWWEdFX0RFQlVHX0VSUl9NQVNLKQorCWhsZGV2LT5kZWJ1Z19tb2R1bGVfbWFzayA9IG1hc2s7CisJaGxkZXYtPmRlYnVnX2xldmVsID0gbGV2ZWw7CisjZW5kaWYKKworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19FUlJfTUFTSykKKwlobGRldi0+bGV2ZWxfZXJyID0gbGV2ZWwgJiBWWEdFX0VSUjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX1RSQUNFX01BU0spCisJaGxkZXYtPmxldmVsX3RyYWNlID0gbGV2ZWwgJiBWWEdFX1RSQUNFOworI2VuZGlmCit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQgLSBHZXQgdGhlIGVycm9yIGxldmVsCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY3VycmVudCBlcnJvciBsZXZlbCBzZXQKKyAqLwordTMyIHZ4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX0VSUl9NQVNLKQorCWlmIChobGRldiA9PSBOVUxMKQorCQlyZXR1cm4gVlhHRV9FUlI7CisJZWxzZQorCQlyZXR1cm4gaGxkZXYtPmxldmVsX2VycjsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldCAtIEdldCB0aGUgdHJhY2UgbGV2ZWwKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IHRyYWNlIGxldmVsIHNldAorICovCit1MzIgdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfVFJBQ0VfTUFTSykKKwlpZiAoaGxkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIFZYR0VfVFJBQ0U7CisJZWxzZQorCQlyZXR1cm4gaGxkZXYtPmxldmVsX3RyYWNlOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX2RlYnVnX21hc2tfZ2V0IC0gR2V0IHRoZSBkZWJ1ZyBtYXNrCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY3VycmVudCBkZWJ1ZyBtYXNrIHNldAorICovCit1MzIgdnhnZV9od19kZXZpY2VfZGVidWdfbWFza19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19UUkFDRV9NQVNLKSB8fCBkZWZpbmVkKFZYR0VfREVCVUdfRVJSX01BU0spCisJaWYgKGhsZGV2ID09IE5VTEwpCisJCXJldHVybiAwOworCXJldHVybiBobGRldi0+ZGVidWdfbW9kdWxlX21hc2s7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qCisgKiB2eGdlX2h3X2dldHBhdXNlX2RhdGEgLVBhdXNlIGZyYW1lIGZyYW1lIGdlbmVyYXRpb24gYW5kIHJlY2VwdGlvbi4KKyAqIFJldHVybnMgdGhlIFBhdXNlIGZyYW1lIGdlbmVyYXRpb24gYW5kIHJlY2VwdGlvbiBjYXBhYmlsaXR5IG9mIHRoZSBOSUMuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2VfZ2V0cGF1c2VfZGF0YShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkJCQkgdTMyIHBvcnQsIHUzMiAqdHgsIHUzMiAqcngpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgoaGxkZXYgPT0gTlVMTCkgfHwgKGhsZGV2LT5tYWdpYyAhPSBWWEdFX0hXX0RFVklDRV9NQUdJQykpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydCA+IFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1BPUlQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoIShobGRldi0+YWNjZXNzX3JpZ2h0cyAmIFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0pKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKKwkJZ290byBleGl0OworCX0KKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5tcnBjaW1fcmVnLT5yeG1hY19wYXVzZV9jZmdfcG9ydFtwb3J0XSk7CisJaWYgKHZhbDY0ICYgVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9HRU5fRU4pCisJCSp0eCA9IDE7CisJaWYgKHZhbDY0ICYgVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9SQ1ZfRU4pCisJCSpyeCA9IDE7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhIC0gIHNldC9yZXNldCBwYXVzZSBmcmFtZSBnZW5lcmF0aW9uLgorICogSXQgY2FuIGJlIHVzZWQgdG8gc2V0IG9yIHJlc2V0IFBhdXNlIGZyYW1lIGdlbmVyYXRpb24gb3IgcmVjZXB0aW9uCisgKiBzdXBwb3J0IG9mIHRoZSBOSUMuCisgKi8KKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCQkJCSB1MzIgcG9ydCwgdTMyIHR4LCB1MzIgcngpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgoaGxkZXYgPT0gTlVMTCkgfHwgKGhsZGV2LT5tYWdpYyAhPSBWWEdFX0hXX0RFVklDRV9NQUdJQykpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydCA+IFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1BPUlQ7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2lzX3ByaXZpbGFnZWQoaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPm1ycGNpbV9yZWctPnJ4bWFjX3BhdXNlX2NmZ19wb3J0W3BvcnRdKTsKKwlpZiAodHgpCisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfR0VOX0VOOworCWVsc2UKKwkJdmFsNjQgJj0gflZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfR0VOX0VOOworCWlmIChyeCkKKwkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9SQ1ZfRU47CisJZWxzZQorCQl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9SQ1ZfRU47CisKKwl3cml0ZXEodmFsNjQsICZobGRldi0+bXJwY2ltX3JlZy0+cnhtYWNfcGF1c2VfY2ZnX3BvcnRbcG9ydF0pOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MTYgdnhnZV9od19kZXZpY2VfbGlua193aWR0aF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCWludCBsaW5rX3dpZHRoLCBleHBfY2FwOworCXUxNiBsbms7CisKKwlleHBfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShobGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBleHBfY2FwICsgUENJX0VYUF9MTktTVEEsICZsbmspOworCWxpbmtfd2lkdGggPSAobG5rICYgVlhHRV9IV19QQ0lfRVhQX0xOS0NBUF9MTktfV0lEVEgpID4+IDQ7CisJcmV0dXJuIGxpbmtfd2lkdGg7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHggLSBSZXR1cm4gdGhlIG1lbWJsb2NrIGluZGV4CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIG1lbW9yeSBibG9jaworICovCitzdGF0aWMgaW5saW5lIHUzMgorX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4KHU4ICpibG9jaykKK3sKKwlyZXR1cm4gKHUzMikqKCh1NjQgKikoYmxvY2sgKyBWWEdFX0hXX1JJTkdfTUVNQkxPQ0tfSURYX09GRlNFVCkpOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4X3NldCAtIFNldHMgdGhlIG1lbWJsb2NrIGluZGV4CisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgaW5kZXggdG8gYSBtZW1vcnkgYmxvY2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHhfc2V0KHU4ICpibG9jaywgdTMyIG1lbWJsb2NrX2lkeCkKK3sKKwkqKCh1NjQgKikoYmxvY2sgKyBWWEdFX0hXX1JJTkdfTUVNQkxPQ0tfSURYX09GRlNFVCkpID0gbWVtYmxvY2tfaWR4OworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfYmxvY2tfbmV4dF9wb2ludGVyX3NldCAtIFNldHMgdGhlIG5leHQgYmxvY2sgcG9pbnRlcgorICogaW4gUnhEIGJsb2NrCisgKiBTZXRzIHRoZSBuZXh0IGJsb2NrIHBvaW50ZXIgaW4gUnhEIGJsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX192eGdlX2h3X3JpbmdfYmxvY2tfbmV4dF9wb2ludGVyX3NldCh1OCAqYmxvY2ssIGRtYV9hZGRyX3QgZG1hX25leHQpCit7CisJKigodTY0ICopKGJsb2NrICsgVlhHRV9IV19SSU5HX05FWFRfQkxPQ0tfUE9JTlRFUl9PRkZTRVQpKSA9IGRtYV9uZXh0OworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfZmlyc3RfYmxvY2tfYWRkcmVzc19nZXQgLSBSZXR1cm5zIHRoZSBkbWEgYWRkcmVzcyBvZiB0aGUKKyAqICAgICAgICAgICAgIGZpcnN0IGJsb2NrCisgKiBSZXR1cm5zIHRoZSBkbWEgYWRkcmVzcyBvZiB0aGUgZmlyc3QgUnhEIGJsb2NrCisgKi8KK3U2NCBfX3Z4Z2VfaHdfcmluZ19maXJzdF9ibG9ja19hZGRyZXNzX2dldChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3Q7CisKKwlkbWFfb2JqZWN0ID0gcmluZy0+bWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnI7CisJdnhnZV9hc3NlcnQoZG1hX29iamVjdCAhPSBOVUxMKTsKKworCXJldHVybiBkbWFfb2JqZWN0LT5hZGRyOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfaXRlbV9kbWFfYWRkciAtIFJldHVybiB0aGUgZG1hIGFkZHJlc3Mgb2YgYW4gaXRlbQorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkbWEgYWRkcmVzcyBvZiBhIGdpdmVuIGl0ZW0KKyAqLworc3RhdGljIGRtYV9hZGRyX3QgX192eGdlX2h3X3JpbmdfaXRlbV9kbWFfYWRkcihzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwkJCQkJICAgICAgIHZvaWQgKml0ZW0pCit7CisJdTMyIG1lbWJsb2NrX2lkeDsKKwl2b2lkICptZW1ibG9jazsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqbWVtYmxvY2tfZG1hX29iamVjdDsKKwlwdHJkaWZmX3QgZG1hX2l0ZW1fb2Zmc2V0OworCisJLyogZ2V0IG93bmVyIG1lbWJsb2NrIGluZGV4ICovCisJbWVtYmxvY2tfaWR4ID0gX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4KGl0ZW0pOworCisJLyogZ2V0IG93bmVyIG1lbWJsb2NrIGJ5IG1lbWJsb2NrIGluZGV4ICovCisJbWVtYmxvY2sgPSBtZW1wb29saC0+bWVtYmxvY2tzX2FyclttZW1ibG9ja19pZHhdOworCisJLyogZ2V0IG1lbWJsb2NrIERNQSBvYmplY3QgYnkgbWVtYmxvY2sgaW5kZXggKi8KKwltZW1ibG9ja19kbWFfb2JqZWN0ID0gbWVtcG9vbGgtPm1lbWJsb2Nrc19kbWFfYXJyICsgbWVtYmxvY2tfaWR4OworCisJLyogY2FsY3VsYXRlIG9mZnNldCBpbiB0aGUgbWVtYmxvY2sgb2YgdGhpcyBpdGVtICovCisJZG1hX2l0ZW1fb2Zmc2V0ID0gKHU4ICopaXRlbSAtICh1OCAqKW1lbWJsb2NrOworCisJcmV0dXJuIG1lbWJsb2NrX2RtYV9vYmplY3QtPmFkZHIgKyBkbWFfaXRlbV9vZmZzZXQ7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19yeGRibG9ja19saW5rIC0gTGluayB0aGUgUnhEIGJsb2NrcworICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkbWEgYWRkcmVzcyBvZiBhIGdpdmVuIGl0ZW0KKyAqLworc3RhdGljIHZvaWQgX192eGdlX2h3X3JpbmdfcnhkYmxvY2tfbGluayhzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwkJCQkJIHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdTMyIGZyb20sCisJCQkJCSB1MzIgdG8pCit7CisJdTggKnRvX2l0ZW0gLCAqZnJvbV9pdGVtOworCWRtYV9hZGRyX3QgdG9fZG1hOworCisJLyogZ2V0ICJmcm9tIiBSeEQgYmxvY2sgKi8KKwlmcm9tX2l0ZW0gPSBtZW1wb29saC0+aXRlbXNfYXJyW2Zyb21dOworCXZ4Z2VfYXNzZXJ0KGZyb21faXRlbSk7CisKKwkvKiBnZXQgInRvIiBSeEQgYmxvY2sgKi8KKwl0b19pdGVtID0gbWVtcG9vbGgtPml0ZW1zX2Fyclt0b107CisJdnhnZV9hc3NlcnQodG9faXRlbSk7CisKKwkvKiByZXR1cm4gYWRkcmVzcyBvZiB0aGUgYmVnaW5uaW5nIG9mIHByZXZpb3VzIFJ4RCBibG9jayAqLworCXRvX2RtYSA9IF9fdnhnZV9od19yaW5nX2l0ZW1fZG1hX2FkZHIobWVtcG9vbGgsIHRvX2l0ZW0pOworCisJLyogc2V0IG5leHQgcG9pbnRlciBmb3IgdGhpcyBSeEQgYmxvY2sgdG8gcG9pbnQgb24KKwkgKiBwcmV2aW91cyBpdGVtJ3MgRE1BIHN0YXJ0IGFkZHJlc3MgKi8KKwlfX3Z4Z2VfaHdfcmluZ19ibG9ja19uZXh0X3BvaW50ZXJfc2V0KGZyb21faXRlbSwgdG9fZG1hKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX21lbXBvb2xfaXRlbV9hbGxvYyAtIEFsbG9jYXRlIExpc3QgYmxvY2tzIGZvciBSeEQKKyAqIGJsb2NrIGNhbGxiYWNrCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxiYWNrIHBhc3NlZCB0byBfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUgdG8gY3JlYXRlIG1lbW9yeQorICogcG9vbCBmb3IgUnhEIGJsb2NrCisgKi8KK3N0YXRpYyB2b2lkCitfX3Z4Z2VfaHdfcmluZ19tZW1wb29sX2l0ZW1fYWxsb2Moc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJCQkJICB1MzIgbWVtYmxvY2tfaW5kZXgsCisJCQkJICBzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCwKKwkJCQkgIHUzMiBpbmRleCwgdTMyIGlzX2xhc3QpCit7CisJdTMyIGk7CisJdm9pZCAqaXRlbSA9IG1lbXBvb2xoLT5pdGVtc19hcnJbaW5kZXhdOworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZyA9CisJCShzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKiltZW1wb29saC0+dXNlcmRhdGE7CisKKwkvKiBmb3JtYXQgcnhkcyBhcnJheSAqLworCWZvciAoaSA9IDA7IGkgPCByaW5nLT5yeGRzX3Blcl9ibG9jazsgaSsrKSB7CisJCXZvaWQgKnJ4ZGJsb2NrX3ByaXY7CisJCXZvaWQgKnVsZF9wcml2OworCQlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwOworCisJCXUzMiByZXNlcnZlX2luZGV4ID0gcmluZy0+Y2hhbm5lbC5yZXNlcnZlX3B0ciAtCisJCQkJKGluZGV4ICogcmluZy0+cnhkc19wZXJfYmxvY2sgKyBpICsgMSk7CisJCXUzMiBtZW1ibG9ja19pdGVtX2lkeDsKKworCQlyaW5nLT5jaGFubmVsLnJlc2VydmVfYXJyW3Jlc2VydmVfaW5kZXhdID0gKCh1OCAqKWl0ZW0pICsKKwkJCQkJCWkgKiByaW5nLT5yeGRfc2l6ZTsKKworCQkvKiBOb3RlOiBtZW1ibG9ja19pdGVtX2lkeCBpcyBpbmRleCBvZiB0aGUgaXRlbSB3aXRoaW4KKwkJICogICAgICAgdGhlIG1lbWJsb2NrLiBGb3IgaW5zdGFuY2UsIGluIGNhc2Ugb2YgdGhyZWUgUnhELWJsb2NrcworCQkgKiAgICAgICBwZXIgbWVtYmxvY2sgdGhpcyB2YWx1ZSBjYW4gYmUgMCwgMSBvciAyLiAqLworCQlyeGRibG9ja19wcml2ID0gX192eGdlX2h3X21lbXBvb2xfaXRlbV9wcml2KG1lbXBvb2xoLAorCQkJCQltZW1ibG9ja19pbmRleCwgaXRlbSwKKwkJCQkJJm1lbWJsb2NrX2l0ZW1faWR4KTsKKworCQlyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKikKKwkJCQlyaW5nLT5jaGFubmVsLnJlc2VydmVfYXJyW3Jlc2VydmVfaW5kZXhdOworCisJCXVsZF9wcml2ID0gKCh1OCAqKXJ4ZGJsb2NrX3ByaXYgKyByaW5nLT5yeGRfcHJpdl9zaXplICogaSk7CisKKwkJLyogcHJlLWZvcm1hdCBIb3N0X0NvbnRyb2wgKi8KKwkJcnhkcC0+aG9zdF9jb250cm9sID0gKHU2NCkoc2l6ZV90KXVsZF9wcml2OworCX0KKworCV9fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeF9zZXQoaXRlbSwgbWVtYmxvY2tfaW5kZXgpOworCisJaWYgKGlzX2xhc3QpIHsKKwkJLyogbGluayBsYXN0IG9uZSB3aXRoIGZpcnN0IG9uZSAqLworCQlfX3Z4Z2VfaHdfcmluZ19yeGRibG9ja19saW5rKG1lbXBvb2xoLCByaW5nLCBpbmRleCwgMCk7CisJfQorCisJaWYgKGluZGV4ID4gMCkgeworCQkvKiBsaW5rIHRoaXMgUnhEIGJsb2NrIHdpdGggcHJldmlvdXMgb25lICovCisJCV9fdnhnZV9od19yaW5nX3J4ZGJsb2NrX2xpbmsobWVtcG9vbGgsIHJpbmcsIGluZGV4IC0gMSwgaW5kZXgpOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2luaXRpYWxfcmVwbGVuaXNoIC0gSW5pdGlhbCByZXBsZW5pc2ggb2YgUnhEcworICogVGhpcyBmdW5jdGlvbiByZXBsZW5pc2hlcyB0aGUgUnhEcyBmcm9tIHJlc2VydmUgYXJyYXkgdG8gd29yayBhcnJheQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdTE2IG1pbl9mbGFnKQoreworCXZvaWQgKnJ4ZDsKKwlpbnQgaSA9IDA7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXdoaWxlICh2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50KGNoYW5uZWwpID4gMCkgeworCisJCXN0YXR1cyA9IHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZShyaW5nLCAmcnhkKTsKKworCQl2eGdlX2Fzc2VydChzdGF0dXMgPT0gVlhHRV9IV19PSyk7CisKKwkJaWYgKHJpbmctPnJ4ZF9pbml0KSB7CisJCQlzdGF0dXMgPSByaW5nLT5yeGRfaW5pdChyeGQsIGNoYW5uZWwtPnVzZXJkYXRhKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCXZ4Z2VfaHdfcmluZ19yeGRfZnJlZShyaW5nLCByeGQpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCisJCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdChyaW5nLCByeGQpOworCQlpZiAobWluX2ZsYWcpIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IFZYR0VfSFdfUklOR19NSU5fQlVGRl9BTExPQ0FUSU9OKQorCQkJCWJyZWFrOworCQl9CisJfQorCXN0YXR1cyA9IFZYR0VfSFdfT0s7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19jcmVhdGUgLSBDcmVhdGUgYSBSaW5nCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgUmluZyBhbmQgaW5pdGlhbGl6ZXMgaXQuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfcmluZ19jcmVhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCQkgICAgICBzdHJ1Y3QgdnhnZV9od19yaW5nX2F0dHIgKmF0dHIpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZzsKKwl1MzIgcmluZ19sZW5ndGg7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJdTMyIHZwX2lkOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfY2JzIHJpbmdfbXBfY2FsbGJhY2s7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8IChhdHRyID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCWhsZGV2ID0gdnAtPnZwYXRoLT5obGRldjsKKwl2cF9pZCA9IHZwLT52cGF0aC0+dnBfaWQ7CisKKwljb25maWcgPSAmaGxkZXYtPmNvbmZpZy52cF9jb25maWdbdnBfaWRdLnJpbmc7CisKKwlyaW5nX2xlbmd0aCA9IGNvbmZpZy0+cmluZ19ibG9ja3MgKgorCQkJdnhnZV9od19yaW5nX3J4ZHNfcGVyX2Jsb2NrX2dldChjb25maWctPmJ1ZmZlcl9tb2RlKTsKKworCXJpbmcgPSAoc3RydWN0IF9fdnhnZV9od19yaW5nICopX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUodnAsCisJCQkJCQlWWEdFX0hXX0NIQU5ORUxfVFlQRV9SSU5HLAorCQkJCQkJcmluZ19sZW5ndGgsCisJCQkJCQlhdHRyLT5wZXJfcnhkX3NwYWNlLAorCQkJCQkJYXR0ci0+dXNlcmRhdGEpOworCisJaWYgKHJpbmcgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnAtPnZwYXRoLT5yaW5naCA9IHJpbmc7CisJcmluZy0+dnBfaWQgPSB2cF9pZDsKKwlyaW5nLT52cF9yZWcgPSB2cC0+dnBhdGgtPnZwX3JlZzsKKwlyaW5nLT5jb21tb25fcmVnID0gaGxkZXYtPmNvbW1vbl9yZWc7CisJcmluZy0+c3RhdHMgPSAmdnAtPnZwYXRoLT5zd19zdGF0cy0+cmluZ19zdGF0czsKKwlyaW5nLT5jb25maWcgPSBjb25maWc7CisJcmluZy0+Y2FsbGJhY2sgPSBhdHRyLT5jYWxsYmFjazsKKwlyaW5nLT5yeGRfaW5pdCA9IGF0dHItPnJ4ZF9pbml0OworCXJpbmctPnJ4ZF90ZXJtID0gYXR0ci0+cnhkX3Rlcm07CisJcmluZy0+YnVmZmVyX21vZGUgPSBjb25maWctPmJ1ZmZlcl9tb2RlOworCXJpbmctPnJ4ZHNfbGltaXQgPSBjb25maWctPnJ4ZHNfbGltaXQ7CisKKwlyaW5nLT5yeGRfc2l6ZSA9IHZ4Z2VfaHdfcmluZ19yeGRfc2l6ZV9nZXQoY29uZmlnLT5idWZmZXJfbW9kZSk7CisJcmluZy0+cnhkX3ByaXZfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3JpbmdfcnhkX3ByaXYpICsgYXR0ci0+cGVyX3J4ZF9zcGFjZTsKKwlyaW5nLT5wZXJfcnhkX3NwYWNlID0gYXR0ci0+cGVyX3J4ZF9zcGFjZTsKKworCXJpbmctPnJ4ZF9wcml2X3NpemUgPQorCQkoKHJpbmctPnJ4ZF9wcml2X3NpemUgKyBWWEdFX0NBQ0hFX0xJTkVfU0laRSAtIDEpIC8KKwkJVlhHRV9DQUNIRV9MSU5FX1NJWkUpICogVlhHRV9DQUNIRV9MSU5FX1NJWkU7CisKKwkvKiBob3cgbWFueSBSeERzIGNhbiBmaXQgaW50byBvbmUgYmxvY2suIERlcGVuZHMgb24gY29uZmlndXJlZAorCSAqIGJ1ZmZlcl9tb2RlLiAqLworCXJpbmctPnJ4ZHNfcGVyX2Jsb2NrID0KKwkJdnhnZV9od19yaW5nX3J4ZHNfcGVyX2Jsb2NrX2dldChjb25maWctPmJ1ZmZlcl9tb2RlKTsKKworCS8qIGNhbGN1bGF0ZSBhY3R1YWwgUnhEIGJsb2NrIHByaXZhdGUgc2l6ZSAqLworCXJpbmctPnJ4ZGJsb2NrX3ByaXZfc2l6ZSA9IHJpbmctPnJ4ZF9wcml2X3NpemUgKiByaW5nLT5yeGRzX3Blcl9ibG9jazsKKwlyaW5nX21wX2NhbGxiYWNrLml0ZW1fZnVuY19hbGxvYyA9IF9fdnhnZV9od19yaW5nX21lbXBvb2xfaXRlbV9hbGxvYzsKKwlyaW5nLT5tZW1wb29sID0gX192eGdlX2h3X21lbXBvb2xfY3JlYXRlKGhsZGV2LAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsCisJCQkJcmluZy0+cnhkYmxvY2tfcHJpdl9zaXplLAorCQkJCXJpbmctPmNvbmZpZy0+cmluZ19ibG9ja3MsCisJCQkJcmluZy0+Y29uZmlnLT5yaW5nX2Jsb2NrcywKKwkJCQkmcmluZ19tcF9jYWxsYmFjaywKKwkJCQlyaW5nKTsKKworCWlmIChyaW5nLT5tZW1wb29sID09IE5VTEwpIHsKKwkJX192eGdlX2h3X3JpbmdfZGVsZXRlKHZwKTsKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZSgmcmluZy0+Y2hhbm5lbCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBOb3RlOgorCSAqIFNwZWNpZnlpbmcgcnhkX2luaXQgY2FsbGJhY2sgbWVhbnMgdHdvIHRoaW5nczoKKwkgKiAxKSByeGRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgZHJpdmVyIGF0IGNoYW5uZWwtb3BlbiB0aW1lOworCSAqIDIpIHJ4ZHMgbmVlZCB0byBiZSBwb3N0ZWQgYXQgY2hhbm5lbC1vcGVuIHRpbWUKKwkgKiAgICAodGhhdCdzIHdoYXQgdGhlIGluaXRpYWxfcmVwbGVuaXNoKCkgYmVsb3cgZG9lcykKKwkgKiBDdXJyZW50bHkgd2UgZG9uJ3QgaGF2ZSBhIGNhc2Ugd2hlbiB0aGUgMSkgaXMgZG9uZSB3aXRob3V0IHRoZSAyKS4KKwkgKi8KKwlpZiAocmluZy0+cnhkX2luaXQpIHsKKwkJc3RhdHVzID0gdnhnZV9od19yaW5nX3JlcGxlbmlzaChyaW5nLCAxKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJLyogaW5pdGlhbCByZXBsZW5pc2ggd2lsbCBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgaW4gaXRzIHBvc3QoKSByb3V0aW5lLAorCSAqIHdlIGhhdmUgdG8gcmVzZXQgaXQgKi8KKwlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA9IDA7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19hYm9ydCAtIFJldHVybnMgdGhlIFJ4RAorICogVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHRoZSBSeERzIG9mIHJpbmcKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfcmluZ19hYm9ydChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJdm9pZCAqcnhkaDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwlmb3IgKDs7KSB7CisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfdHJ5X2NvbXBsZXRlKGNoYW5uZWwsICZyeGRoKTsKKworCQlpZiAocnhkaCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShjaGFubmVsKTsKKworCQlpZiAocmluZy0+cnhkX3Rlcm0pCisJCQlyaW5nLT5yeGRfdGVybShyeGRoLCBWWEdFX0hXX1JYRF9TVEFURV9QT1NURUQsCisJCQkJY2hhbm5lbC0+dXNlcmRhdGEpOworCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfZnJlZShjaGFubmVsLCByeGRoKTsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX3Jlc2V0IC0gUmVzZXRzIHRoZSByaW5nCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgcmluZyBkdXJpbmcgdnBhdGggcmVzZXQgb3BlcmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3JpbmdfcmVzZXQoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwlfX3Z4Z2VfaHdfcmluZ19hYm9ydChyaW5nKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX3Jlc2V0KGNoYW5uZWwpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocmluZy0+cnhkX2luaXQpIHsKKwkJc3RhdHVzID0gdnhnZV9od19yaW5nX3JlcGxlbmlzaChyaW5nLCAxKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2RlbGV0ZSAtIFJlbW92ZXMgdGhlIHJpbmcKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXVwIHRoZSBtZW1vcnkgcG9vbCBhbmQgcmVtb3ZlcyB0aGUgcmluZworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19yaW5nX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nID0gdnAtPnZwYXRoLT5yaW5naDsKKworCV9fdnhnZV9od19yaW5nX2Fib3J0KHJpbmcpOworCisJaWYgKHJpbmctPm1lbXBvb2wpCisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kocmluZy0+bWVtcG9vbCk7CisKKwl2cC0+dnBhdGgtPnJpbmdoID0gTlVMTDsKKwlfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKCZyaW5nLT5jaGFubmVsKTsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X21lbXBvb2xfZ3JvdworICogV2lsbCByZXNpemUgbWVtcG9vbCB1cCB0byAlbnVtX2FsbG9jYXRlIHZhbHVlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93KHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wsIHUzMiBudW1fYWxsb2NhdGUsCisJCSAgICAgICB1MzIgKm51bV9hbGxvY2F0ZWQpCit7CisJdTMyIGksIGZpcnN0X3RpbWUgPSBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkID09IDAgPyAxIDogMDsKKwl1MzIgbl9pdGVtcyA9IG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKKwl1MzIgc3RhcnRfYmxvY2tfaWR4ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZDsKKwl1MzIgZW5kX2Jsb2NrX2lkeCA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQgKyBudW1fYWxsb2NhdGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJKm51bV9hbGxvY2F0ZWQgPSAwOworCisJaWYgKGVuZF9ibG9ja19pZHggPiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSBzdGFydF9ibG9ja19pZHg7IGkgPCBlbmRfYmxvY2tfaWR4OyBpKyspIHsKKwkJdTMyIGo7CisJCXUzMiBpc19sYXN0ID0gKChlbmRfYmxvY2tfaWR4IC0gMSkgPT0gaSk7CisJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0ID0KKwkJCW1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyICsgaTsKKwkJdm9pZCAqdGhlX21lbWJsb2NrOworCisJCS8qIGFsbG9jYXRlIG1lbWJsb2NrJ3MgcHJpdmF0ZSBwYXJ0LiBFYWNoIERNQSBtZW1ibG9jaworCQkgKiBoYXMgYSBzcGFjZSBhbGxvY2F0ZWQgZm9yIGl0ZW0ncyBwcml2YXRlIHVzYWdlIHVwb24KKwkJICogbWVtcG9vbCdzIHVzZXIgcmVxdWVzdC4gRWFjaCB0aW1lIG1lbXBvb2wgZ3Jvd3MsIGl0IHdpbGwKKwkJICogYWxsb2NhdGUgbmV3IG1lbWJsb2NrIGFuZCBpdHMgcHJpdmF0ZSBwYXJ0IGF0IG9uY2UuCisJCSAqIFRoaXMgaGVscHMgdG8gbWluaW1pemUgbWVtb3J5IHVzYWdlIGEgbG90LiAqLworCQltZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0gPQorCQkJCXZtYWxsb2MobWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplICogbl9pdGVtcyk7CisJCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0gPT0gTlVMTCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0sIDAsCisJCQkgICAgIG1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZSAqIG5faXRlbXMpOworCisJCS8qIGFsbG9jYXRlIERNQS1jYXBhYmxlIG1lbWJsb2NrICovCisJCW1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0gPQorCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2MobWVtcG9vbC0+ZGV2aCwKKwkJCQltZW1wb29sLT5tZW1ibG9ja19zaXplLCBkbWFfb2JqZWN0KTsKKwkJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0gPT0gTlVMTCkgeworCQkJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW2ldKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQkoKm51bV9hbGxvY2F0ZWQpKys7CisJCW1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQrKzsKKworCQltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSwgMCwgbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZSk7CisKKwkJdGhlX21lbWJsb2NrID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXTsKKworCQkvKiBmaWxsIHRoZSBpdGVtcyBoYXNoIGFycmF5ICovCisJCWZvciAoaiA9IDA7IGogPCBuX2l0ZW1zOyBqKyspIHsKKwkJCXUzMiBpbmRleCA9IGkgKiBuX2l0ZW1zICsgajsKKworCQkJaWYgKGZpcnN0X3RpbWUgJiYgaW5kZXggPj0gbWVtcG9vbC0+aXRlbXNfaW5pdGlhbCkKKwkJCQlicmVhazsKKworCQkJbWVtcG9vbC0+aXRlbXNfYXJyW2luZGV4XSA9CisJCQkJKChjaGFyICopdGhlX21lbWJsb2NrICsgaiptZW1wb29sLT5pdGVtX3NpemUpOworCisJCQkvKiBsZXQgY2FsbGVyIHRvIGRvIG1vcmUgam9iIG9uIGVhY2ggaXRlbSAqLworCQkJaWYgKG1lbXBvb2wtPml0ZW1fZnVuY19hbGxvYyAhPSBOVUxMKQorCQkJCW1lbXBvb2wtPml0ZW1fZnVuY19hbGxvYyhtZW1wb29sLCBpLAorCQkJCQlkbWFfb2JqZWN0LCBpbmRleCwgaXNfbGFzdCk7CisKKwkJCW1lbXBvb2wtPml0ZW1zX2N1cnJlbnQgPSBpbmRleCArIDE7CisJCX0KKworCQlpZiAoZmlyc3RfdGltZSAmJiBtZW1wb29sLT5pdGVtc19jdXJyZW50ID09CisJCQkJCW1lbXBvb2wtPml0ZW1zX2luaXRpYWwpCisJCQlicmVhazsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X21lbXBvb2xfY3JlYXRlCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIG1lbW9yeSBwb29sIG9iamVjdC4gUG9vbCBtYXkgZ3JvdyBidXQgd2lsbAorICogbmV2ZXIgc2hyaW5rLiBQb29sIGNvbnNpc3RzIG9mIG51bWJlciBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmxvY2tzCisgKiB3aXRoIHNpemUgZW5vdWdoIHRvIGhvbGQgJWl0ZW1zX2luaXRpYWwgbnVtYmVyIG9mIGl0ZW1zLiBNZW1vcnkgaXMKKyAqIERNQS1hYmxlIGJ1dCBjbGllbnQgbXVzdCBtYXAvdW5tYXAgYmVmb3JlIGludGVyb3BlcmF0aW5nIHdpdGggdGhlIGRldmljZS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCoKK19fdnhnZV9od19tZW1wb29sX2NyZWF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIgbWVtYmxvY2tfc2l6ZSwKKwl1MzIgaXRlbV9zaXplLAorCXUzMiBpdGVtc19wcml2X3NpemUsCisJdTMyIGl0ZW1zX2luaXRpYWwsCisJdTMyIGl0ZW1zX21heCwKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyAqbXBfY2FsbGJhY2ssCisJdm9pZCAqdXNlcmRhdGEpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXUzMiBtZW1ibG9ja3NfdG9fYWxsb2NhdGU7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCA9IE5VTEw7CisJdTMyIGFsbG9jYXRlZDsKKworCWlmIChtZW1ibG9ja19zaXplIDwgaXRlbV9zaXplKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbXBvb2wgPSAoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqKQorCQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCkpOworCWlmIChtZW1wb29sID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQobWVtcG9vbCwgMCwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wpKTsKKworCW1lbXBvb2wtPmRldmgJCQk9IGRldmg7CisJbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZQkJPSBtZW1ibG9ja19zaXplOworCW1lbXBvb2wtPml0ZW1zX21heAkJPSBpdGVtc19tYXg7CisJbWVtcG9vbC0+aXRlbXNfaW5pdGlhbAkJPSBpdGVtc19pbml0aWFsOworCW1lbXBvb2wtPml0ZW1fc2l6ZQkJPSBpdGVtX3NpemU7CisJbWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplCT0gaXRlbXNfcHJpdl9zaXplOworCW1lbXBvb2wtPml0ZW1fZnVuY19hbGxvYwk9IG1wX2NhbGxiYWNrLT5pdGVtX2Z1bmNfYWxsb2M7CisJbWVtcG9vbC0+dXNlcmRhdGEJCT0gdXNlcmRhdGE7CisKKwltZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkID0gMDsKKworCW1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayA9IG1lbWJsb2NrX3NpemUgLyBpdGVtX3NpemU7CisKKwltZW1wb29sLT5tZW1ibG9ja3NfbWF4ID0gKGl0ZW1zX21heCArIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayAtIDEpIC8KKwkJCQkJbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrOworCisJLyogYWxsb2NhdGUgYXJyYXkgb2YgbWVtYmxvY2tzICovCisJbWVtcG9vbC0+bWVtYmxvY2tzX2FyciA9CisJCSh2b2lkICoqKSB2bWFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX2FyciwgMCwKKwkJc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKworCS8qIGFsbG9jYXRlIGFycmF5IG9mIHByaXZhdGUgcGFydHMgb2YgaXRlbXMgcGVyIG1lbWJsb2NrcyAqLworCW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciA9CisJCSh2b2lkICoqKSB2bWFsbG9jKHNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyciA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIsIDAsCisJCSAgICBzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCisJLyogYWxsb2NhdGUgYXJyYXkgb2YgbWVtYmxvY2tzIERNQSBvYmplY3RzICovCisJbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgPSAoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKikKKwkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEpICoKKwkJCW1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hKSAqCisJCQltZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKworCS8qIGFsbG9jYXRlIGhhc2ggYXJyYXkgb2YgaXRlbXMgKi8KKwltZW1wb29sLT5pdGVtc19hcnIgPQorCQkodm9pZCAqKikgdm1hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPml0ZW1zX21heCk7CisJaWYgKG1lbXBvb2wtPml0ZW1zX2FyciA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChtZW1wb29sLT5pdGVtc19hcnIsIDAsIHNpemVvZih2b2lkICopICogbWVtcG9vbC0+aXRlbXNfbWF4KTsKKworCS8qIGNhbGN1bGF0ZSBpbml0aWFsIG51bWJlciBvZiBtZW1ibG9ja3MgKi8KKwltZW1ibG9ja3NfdG9fYWxsb2NhdGUgPSAobWVtcG9vbC0+aXRlbXNfaW5pdGlhbCArCisJCQkJIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayAtIDEpIC8KKwkJCQkJCW1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKKworCS8qIHByZS1hbGxvY2F0ZSB0aGUgbWVtcG9vbCAqLworCXN0YXR1cyA9IF9fdnhnZV9od19tZW1wb29sX2dyb3cobWVtcG9vbCwgbWVtYmxvY2tzX3RvX2FsbG9jYXRlLAorCQkJCQkmYWxsb2NhdGVkKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIG1lbXBvb2w7Cit9CisKKy8qCisgKiB2eGdlX2h3X21lbXBvb2xfZGVzdHJveQorICovCit2b2lkIF9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCkKK3sKKwl1MzIgaSwgajsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCA9IG1lbXBvb2wtPmRldmg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZDsgaSsrKSB7CisJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0OworCisJCXZ4Z2VfYXNzZXJ0KG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0pOworCQl2eGdlX2Fzc2VydChtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciArIGkpOworCisJCWRtYV9vYmplY3QgPSBtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciArIGk7CisKKwkJZm9yIChqID0gMDsgaiA8IG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsgaisrKSB7CisJCQl1MzIgaW5kZXggPSBpICogbWVtcG9vbC0+aXRlbXNfcGVyX21lbWJsb2NrICsgajsKKworCQkJLyogdG8gc2tpcCBsYXN0IHBhcnRpYWxseSBmaWxsZWQoaWYgYW55KSBtZW1ibG9jayAqLworCQkJaWYgKGluZGV4ID49IG1lbXBvb2wtPml0ZW1zX2N1cnJlbnQpCisJCQkJYnJlYWs7CisJCX0KKworCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnJbaV0pOworCisJCV9fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShkZXZoLCBtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldLAorCQkJCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUsIGRtYV9vYmplY3QpOworCX0KKworCWlmIChtZW1wb29sLT5pdGVtc19hcnIpCisJCXZmcmVlKG1lbXBvb2wtPml0ZW1zX2Fycik7CisKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIpCisJCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyKTsKKworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIpCisJCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2Fycik7CisKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX2FycikKKwkJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX2Fycik7CisKKwl2ZnJlZShtZW1wb29sKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2sgLSBDaGVjayBmaWZvIGNvbmZpZ3VyYXRpb24uCisgKiBDaGVjayB0aGUgZmlmbyBjb25maWd1cmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgKmZpZm9fY29uZmlnKQoreworCWlmICgoZmlmb19jb25maWctPmZpZm9fYmxvY2tzIDwgVlhHRV9IV19NSU5fRklGT19CTE9DS1MpIHx8CisJICAgICAoZmlmb19jb25maWctPmZpZm9fYmxvY2tzID4gVlhHRV9IV19NQVhfRklGT19CTE9DS1MpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfRklGT19CTE9DS1M7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfdnBhdGhfY29uZmlnX2NoZWNrIC0gQ2hlY2sgdnBhdGggY29uZmlndXJhdGlvbi4KKyAqIENoZWNrIHRoZSB2cGF0aCBjb25maWd1cmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfdnBhdGhfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqdnBfY29uZmlnKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJaWYgKCh2cF9jb25maWctPm1pbl9iYW5kd2lkdGggPCBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NSU4pIHx8CisJCSh2cF9jb25maWctPm1pbl9iYW5kd2lkdGggPgorCQkJCQlWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVgpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfVlBBVEhfTUlOX0JBTkRXSURUSDsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfZmlmb19jb25maWdfY2hlY2soJnZwX2NvbmZpZy0+Zmlmbyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKCh2cF9jb25maWctPm10dSAhPSBWWEdFX0hXX1ZQQVRIX1VTRV9GTEFTSF9ERUZBVUxUX0lOSVRJQUxfTVRVKSAmJgorCQkoKHZwX2NvbmZpZy0+bXR1IDwgVlhHRV9IV19WUEFUSF9NSU5fSU5JVElBTF9NVFUpIHx8CisJCSh2cF9jb25maWctPm10dSA+IFZYR0VfSFdfVlBBVEhfTUFYX0lOSVRJQUxfTVRVKSkpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19WUEFUSF9NVFU7CisKKwlpZiAoKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9CisJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX1VTRV9GTEFTSF9ERUZBVUxUKSAmJgorCQkodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcgIT0KKwkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSAmJgorCQkodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcgIT0KKwkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRElTQUJMRSkpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUc7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrIC0gQ2hlY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKiBDaGVjayB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9jb25maWdfY2hlY2soc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqbmV3X2NvbmZpZykKK3sKKwl1MzIgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCWlmICgobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpICYmCisJICAgKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYKSAmJgorCSAgIChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgJiYKKwkgICAobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0RFRikpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19JTlRSX01PREU7CisKKwlpZiAoKG5ld19jb25maWctPnJ0c19tYWNfZW4gIT0gVlhHRV9IV19SVFNfTUFDX0RJU0FCTEUpICYmCisJICAgKG5ld19jb25maWctPnJ0c19tYWNfZW4gIT0gVlhHRV9IV19SVFNfTUFDX0VOQUJMRSkpCisJCXJldHVybiBWWEdFX0hXX0JBRENGR19SVFNfTUFDX0VOOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjaygKKwkJCQkmbmV3X2NvbmZpZy0+dnBfY29uZmlnW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ19kZWZhdWx0X2dldCAtIEluaXRpYWxpemUgZGV2aWNlIGNvbmZpZyB3aXRoIGRlZmF1bHRzLgorICogSW5pdGlhbGl6ZSBUaXRhbiBkZXZpY2UgY29uZmlnIHdpdGggZGVmYXVsdCB2YWx1ZXMuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0Cit2eGdlX2h3X2RldmljZV9jb25maWdfZGVmYXVsdF9nZXQoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZykKK3sKKwl1MzIgaTsKKworCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfaW5pdGlhbCA9CisJCQkJCVZYR0VfSFdfSU5JVElBTF9ETUFfQkxPQ0tfUE9PTF9TSVpFOworCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfbWF4ID0gVlhHRV9IV19NQVhfRE1BX0JMT0NLX1BPT0xfU0laRTsKKwlkZXZpY2VfY29uZmlnLT5pbnRyX21vZGUgPSBWWEdFX0hXX0lOVFJfTU9ERV9ERUY7CisJZGV2aWNlX2NvbmZpZy0+cnRoX2VuID0gVlhHRV9IV19SVEhfREVGQVVMVDsKKwlkZXZpY2VfY29uZmlnLT5ydGhfaXRfdHlwZSA9IFZYR0VfSFdfUlRIX0lUX1RZUEVfREVGQVVMVDsKKwlkZXZpY2VfY29uZmlnLT5kZXZpY2VfcG9sbF9taWxsaXMgPSAgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTOworCWRldmljZV9jb25maWctPnJ0c19tYWNfZW4gPSAgVlhHRV9IV19SVFNfTUFDX0RFRkFVTFQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnZwX2lkID0gaTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aCA9CisJCQkJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5lbmFibGUgPSBWWEdFX0hXX1JJTkdfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5yaW5nX2Jsb2NrcyA9CisJCQkJVlhHRV9IV19ERUZfUklOR19CTE9DS1M7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuYnVmZmVyX21vZGUgPQorCQkJCVZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5zY2F0dGVyX21vZGUgPQorCQkJCVZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucnhkc19saW1pdCA9CisJCQkJVlhHRV9IV19ERUZfUklOR19SWERTX0xJTUlUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmVuYWJsZSA9IFZYR0VfSFdfRklGT19FTkFCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZmlmb19ibG9ja3MgPQorCQkJCVZYR0VfSFdfTUlOX0ZJRk9fQkxPQ0tTOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLm1heF9mcmFncyA9CisJCQkJVlhHRV9IV19NQVhfRklGT19GUkFHUzsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5tZW1ibG9ja19zaXplID0KKwkJCQlWWEdFX0hXX0RFRl9GSUZPX01FTUJMT0NLX1NJWkU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uYWxpZ25tZW50X3NpemUgPQorCQkJCVZYR0VfSFdfREVGX0ZJRk9fQUxJR05NRU5UX1NJWkU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uaW50ciA9CisJCQkJVlhHRV9IV19GSUZPX1FVRVVFX0lOVFJfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5ub19zbm9vcF9iaXRzID0KKwkJCQlWWEdFX0hXX0ZJRk9fTk9fU05PT1BfREVGQVVMVDsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5pbnRyX2VuYWJsZSA9CisJCQkJVlhHRV9IV19USU1fSU5UUl9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkuYnRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX2FjX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfY2lfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9yaV9lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnJ0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51dGlsX3NlbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmx0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYSA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19hID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2IgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9jID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2MgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfZCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmludHJfZW5hYmxlID0KKwkJCQlWWEdFX0hXX1RJTV9JTlRSX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5idGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfYWNfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9jaV9lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX3JpX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkucnRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnV0aWxfc2VsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkubHRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9hID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2EgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19iID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2MgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYyA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19kID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5tdHUgPQorCQkJCVZYR0VfSFdfVlBBVEhfVVNFX0ZMQVNIX0RFRkFVTFRfSU5JVElBTF9NVFU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJwYV9zdHJpcF92bGFuX3RhZyA9CisJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19VU0VfRkxBU0hfREVGQVVMVDsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9od19sZWdhY3lfc3dhcHBlcl9zZXQgLSBTZXQgdGhlIHN3YXBwZXIgYml0cyBmb3IgdGhlIGxlZ2FjeSBzZWNpb24uCisgKiBTZXQgdGhlIHN3YXBwZXIgYml0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgbGFnYWN5IHNlY3Rpb24uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19sZWdhY3lfc3dhcHBlcl9zZXQoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IHJlYWRxKCZsZWdhY3lfcmVnLT50b2Nfc3dhcHBlcl9mYik7CisKKwl3bWIoKTsKKworCXN3aXRjaCAodmFsNjQpIHsKKworCWNhc2UgVlhHRV9IV19TV0FQUEVSX0lOSVRJQUxfVkFMVUU6CisJCXJldHVybiBzdGF0dXM7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9CWVRFX1NXQVBQRURfQklUX0ZMSVBQRUQ6CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfc3dhcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9mbGlwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3Jfc3dhcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQklUX0ZMQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3JfZmxpcF9lbik7CisJCWJyZWFrOworCisJY2FzZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVEOgorCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX3N3YXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9zd2FwX2VuKTsKKwkJYnJlYWs7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9CSVRfRkxJUFBFRDoKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX2ZsaXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX2ZsaXBfZW4pOworCQlicmVhazsKKwl9CisKKwl3bWIoKTsKKworCXZhbDY0ID0gcmVhZHEoJmxlZ2FjeV9yZWctPnRvY19zd2FwcGVyX2ZiKTsKKworCWlmICh2YWw2NCAhPSBWWEdFX0hXX1NXQVBQRVJfSU5JVElBTF9WQUxVRSkKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfU1dBUFBFUl9DVFJMOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9zd2FwcGVyX3NldCAtIFNldCB0aGUgc3dhcHBlciBiaXRzIGZvciB0aGUgdnBhdGguCisgKiBTZXQgdGhlIHN3YXBwZXIgYml0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgdnBhdGguCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKQoreworI2lmbmRlZiBfX0JJR19FTkRJQU4KKwl1NjQgdmFsNjQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnZwYXRoX2dlbmVyYWxfY2ZnMSk7CisJd21iKCk7CisJdmFsNjQgfD0gVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfQ1RMX0JZVEVfU1dBUEVOOworCXdyaXRlcSh2YWw2NCwgJnZwYXRoX3JlZy0+dnBhdGhfZ2VuZXJhbF9jZmcxKTsKKwl3bWIoKTsKKyNlbmRpZgorCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2tkZmNfc3dhcHBlcl9zZXQgLSBTZXQgdGhlIHN3YXBwZXIgYml0cyBmb3IgdGhlIGtkZmMuCisgKiBTZXQgdGhlIHN3YXBwZXIgYml0cyBhcHByb3ByaWF0ZWx5IGZvciB0aGUgdnBhdGguCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19rZGZjX3N3YXBwZXJfc2V0KAorCXN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZywKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKQoreworCXU2NCB2YWw2NDsKKworCXZhbDY0ID0gcmVhZHEoJmxlZ2FjeV9yZWctPnBpZm1fd3Jfc3dhcF9lbik7CisKKwlpZiAodmFsNjQgPT0gVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9FTkFCTEUpIHsKKwkJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5rZGZjY3RsX2NmZzApOworCQl3bWIoKTsKKworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMAl8CisJCQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMQl8CisJCQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMjsKKworCQl3cml0ZXEodmFsNjQsICZ2cGF0aF9yZWctPmtkZmNjdGxfY2ZnMCk7CisJCXdtYigpOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogdnhnZV9od19tZ210X2RldmljZV9jb25maWcgLSBSZXRyaWV2ZSBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqIEdldCBkZXZpY2UgY29uZmlndXJhdGlvbi4gUGVybWl0cyB0byByZXRyaWV2ZSBhdCBydW4tdGltZSBjb25maWd1cmF0aW9uCisgKiB2YWx1ZXMgdGhhdCB3ZXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbmQgY29uZmlndXJlIHRoZSBkZXZpY2UuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbWdtdF9kZXZpY2VfY29uZmlnKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldl9jb25maWcsIGludCBzaXplKQoreworCisJaWYgKChobGRldiA9PSBOVUxMKSB8fCAoaGxkZXYtPm1hZ2ljICE9IFZYR0VfSFdfREVWSUNFX01BR0lDKSkKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcpKQorCQlyZXR1cm4gVlhHRV9IV19FUlJfVkVSU0lPTl9DT05GTElDVDsKKworCW1lbWNweShkZXZfY29uZmlnLCAmaGxkZXYtPmNvbmZpZywKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcpKTsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogdnhnZV9od19tZ210X3JlZ19yZWFkIC0gUmVhZCBUaXRhbiByZWdpc3Rlci4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X3JlZ19yZWFkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJICAgICAgZW51bSB2eGdlX2h3X21nbXRfcmVnX3R5cGUgdHlwZSwKKwkJICAgICAgdTMyIGluZGV4LCB1MzIgb2Zmc2V0LCB1NjQgKnZhbHVlKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgoaGxkZXYgPT0gTlVMTCkgfHwgKGhsZGV2LT5tYWdpYyAhPSBWWEdFX0hXX0RFVklDRV9NQUdJQykpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9sZWdhY3k6CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+bGVnYWN5X3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3RvYzoKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od190b2NfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT50b2NfcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfY29tbW9uOgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPmNvbW1vbl9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW06CisJCWlmICghKGhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0pKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPm1ycGNpbV9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9zcnBjaW06CisJCWlmICghKGhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU0pKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1NSUENJTV9SRUdfU1BBQ0VTIC0gMSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfc3JwY2ltX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+c3JwY2ltX3JlZ1tpbmRleF0gKworCQkJCW9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3ZwbWdtdDoKKwkJaWYgKChpbmRleCA+IFZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVMgLSAxKSB8fAorCQkJKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGluZGV4KSkpKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT52cG1nbXRfcmVnW2luZGV4XSArCisJCQkJb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBhdGg6CisJCWlmICgoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVMgLSAxKSB8fAorCQkJKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGluZGV4KSkpKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluZGV4ID4gVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTIC0gMSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT52cGF0aF9yZWdbaW5kZXhdICsKKwkJCQlvZmZzZXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1RZUEU7CisJCWJyZWFrOworCX0KKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19tZ210X3JlZ19Xcml0ZSAtIFdyaXRlIFRpdGFuIHJlZ2lzdGVyLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJICAgICAgZW51bSB2eGdlX2h3X21nbXRfcmVnX3R5cGUgdHlwZSwKKwkJICAgICAgdTMyIGluZGV4LCB1MzIgb2Zmc2V0LCB1NjQgdmFsdWUpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKChobGRldiA9PSBOVUxMKSB8fCAoaGxkZXYtPm1hZ2ljICE9IFZYR0VfSFdfREVWSUNFX01BR0lDKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeToKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPmxlZ2FjeV9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV90b2M6CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT50b2NfcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfY29tbW9uOgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+Y29tbW9uX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbToKKwkJaWYgKCEoaGxkZXYtPmFjY2Vzc19yaWdodHMgJgorCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT5tcnBjaW1fcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfc3JwY2ltOgorCQlpZiAoIShobGRldi0+YWNjZXNzX3JpZ2h0cyAmCisJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluZGV4ID4gVlhHRV9IV19USVRBTl9TUlBDSU1fUkVHX1NQQUNFUyAtIDEpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3NycGNpbV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+c3JwY2ltX3JlZ1tpbmRleF0gKworCQkJb2Zmc2V0KTsKKworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cG1nbXQ6CisJCWlmICgoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1ZQTUdNVF9SRUdfU1BBQ0VTIC0gMSkgfHwKKwkJCSghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpbmRleCkpKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT52cG1nbXRfcmVnW2luZGV4XSArCisJCQlvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cGF0aDoKKwkJaWYgKChpbmRleCA+IFZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFUy0xKSB8fAorCQkJKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGluZGV4KSkpKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+dnBhdGhfcmVnW2luZGV4XSArCisJCQlvZmZzZXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1RZUEU7CisJCWJyZWFrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19maWZvX21lbXBvb2xfaXRlbV9hbGxvYyAtIEFsbG9jYXRlIExpc3QgYmxvY2tzIGZvciBUeEQKKyAqIGxpc3QgY2FsbGJhY2sKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGJhY2sgcGFzc2VkIHRvIF9fdnhnZV9od19tZW1wb29sX2NyZWF0ZSB0byBjcmVhdGUgbWVtb3J5CisgKiBwb29sIGZvciBUeEQgbGlzdAorICovCitzdGF0aWMgdm9pZAorX192eGdlX2h3X2ZpZm9fbWVtcG9vbF9pdGVtX2FsbG9jKAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2xoLAorCXUzMiBtZW1ibG9ja19pbmRleCwgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QsCisJdTMyIGluZGV4LCB1MzIgaXNfbGFzdCkKK3sKKwl1MzIgbWVtYmxvY2tfaXRlbV9pZHg7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqdHhkbF9wcml2OworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0KKwkJKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopbWVtcG9vbGgtPml0ZW1zX2FycltpbmRleF07CisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvID0KKwkJCShzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKiltZW1wb29saC0+dXNlcmRhdGE7CisJdm9pZCAqbWVtYmxvY2sgPSBtZW1wb29saC0+bWVtYmxvY2tzX2FyclttZW1ibG9ja19pbmRleF07CisKKwl2eGdlX2Fzc2VydCh0eGRwKTsKKworCXR4ZHAtPmhvc3RfY29udHJvbCA9ICh1NjQpIChzaXplX3QpCisJX192eGdlX2h3X21lbXBvb2xfaXRlbV9wcml2KG1lbXBvb2xoLCBtZW1ibG9ja19pbmRleCwgdHhkcCwKKwkJCQkJJm1lbWJsb2NrX2l0ZW1faWR4KTsKKworCXR4ZGxfcHJpdiA9IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdihmaWZvLCB0eGRwKTsKKworCXZ4Z2VfYXNzZXJ0KHR4ZGxfcHJpdik7CisKKwlmaWZvLT5jaGFubmVsLnJlc2VydmVfYXJyW2ZpZm8tPmNoYW5uZWwucmVzZXJ2ZV9wdHIgLSAxIC0gaW5kZXhdID0gdHhkcDsKKworCS8qIHByZS1mb3JtYXQgSFcncyBUeERMJ3MgcHJpdmF0ZSAqLworCXR4ZGxfcHJpdi0+ZG1hX29mZnNldCA9IChjaGFyICopdHhkcCAtIChjaGFyICopbWVtYmxvY2s7CisJdHhkbF9wcml2LT5kbWFfYWRkciA9IGRtYV9vYmplY3QtPmFkZHIgKyB0eGRsX3ByaXYtPmRtYV9vZmZzZXQ7CisJdHhkbF9wcml2LT5kbWFfaGFuZGxlID0gZG1hX29iamVjdC0+aGFuZGxlOworCXR4ZGxfcHJpdi0+bWVtYmxvY2sgICA9IG1lbWJsb2NrOworCXR4ZGxfcHJpdi0+Zmlyc3RfdHhkcCA9IHR4ZHA7CisJdHhkbF9wcml2LT5uZXh0X3R4ZGxfcHJpdiA9IE5VTEw7CisJdHhkbF9wcml2LT5hbGxvY19mcmFncyA9IDA7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19jcmVhdGUgLSBDcmVhdGUgYSBGSUZPCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgRklGTyBhbmQgaW5pdGlhbGl6ZXMgaXQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJCSAgICAgIHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciAqYXR0cikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvOworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnICpjb25maWc7CisJdTMyIHR4ZGxfc2l6ZSwgdHhkbF9wZXJfbWVtYmxvY2s7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgZmlmb19tcF9jYWxsYmFjazsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCWlmICgodnAgPT0gTlVMTCkgfHwgKGF0dHIgPT0gTlVMTCkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisJdnBhdGggPSB2cC0+dnBhdGg7CisJY29uZmlnID0gJnZwYXRoLT5obGRldi0+Y29uZmlnLnZwX2NvbmZpZ1t2cGF0aC0+dnBfaWRdLmZpZm87CisKKwl0eGRsX3NpemUgPSBjb25maWctPm1heF9mcmFncyAqIHNpemVvZihzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCk7CisKKwl0eGRsX3Blcl9tZW1ibG9jayA9IGNvbmZpZy0+bWVtYmxvY2tfc2l6ZSAvIHR4ZGxfc2l6ZTsKKworCWZpZm8gPSAoc3RydWN0IF9fdnhnZV9od19maWZvICopX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUodnAsCisJCQkJCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk8sCisJCQkJCWNvbmZpZy0+Zmlmb19ibG9ja3MgKiB0eGRsX3Blcl9tZW1ibG9jaywKKwkJCQkJYXR0ci0+cGVyX3R4ZGxfc3BhY2UsIGF0dHItPnVzZXJkYXRhKTsKKworCWlmIChmaWZvID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoLT5maWZvaCA9IGZpZm87CisJZmlmby0+bm9mbF9kYiA9IHZwYXRoLT5ub2ZsX2RiOworCisJZmlmby0+dnBfaWQgPSB2cGF0aC0+dnBfaWQ7CisJZmlmby0+dnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwlmaWZvLT5zdGF0cyA9ICZ2cGF0aC0+c3dfc3RhdHMtPmZpZm9fc3RhdHM7CisKKwlmaWZvLT5jb25maWcgPSBjb25maWc7CisKKwkvKiBhcHBseSAiaW50ZXJydXB0cyBwZXIgdHhkbCIgYXR0cmlidXRlICovCisJZmlmby0+aW50ZXJydXB0X3R5cGUgPSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9UWVBFX1VUSUxaOworCisJaWYgKGZpZm8tPmNvbmZpZy0+aW50cikKKwkJZmlmby0+aW50ZXJydXB0X3R5cGUgPSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9UWVBFX1BFUl9MSVNUOworCisJZmlmby0+bm9fc25vb3BfYml0cyA9IGNvbmZpZy0+bm9fc25vb3BfYml0czsKKworCS8qCisJICogRklGTyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneToKKwkgKgorCSAqIFR4REwgc3BsaXQgaW50byB0aHJlZSBpbmRlcGVuZGVudCBwYXJ0czoKKwkgKgktIHNldCBvZiBUeEQncworCSAqCS0gVHhEIEhXIHByaXZhdGUgcGFydAorCSAqCS0gZHJpdmVyIHByaXZhdGUgcGFydAorCSAqCisJICogQWRhcHRhdGl2ZSBtZW1vcnkgYWxsb2NhdGlvbiB1c2VkLiBpLmUuIE1lbW9yeSBhbGxvY2F0ZWQgb24KKwkgKiBkZW1hbmQgd2l0aCB0aGUgc2l6ZSB3aGljaCB3aWxsIGZpdCBpbnRvIG9uZSBtZW1vcnkgYmxvY2suCisJICogT25lIG1lbW9yeSBibG9jayBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIFR4REwuCisJICoKKwkgKiBEdXJpbmcgInJlc2VydmUiIG9wZXJhdGlvbnMgbW9yZSBtZW1vcnkgY2FuIGJlIGFsbG9jYXRlZCBvbiBkZW1hbmQKKwkgKiBmb3IgZXhhbXBsZSBkdWUgdG8gRklGTyBmdWxsIGNvbmRpdGlvbi4KKwkgKgorCSAqIFBvb2wgb2YgbWVtb3J5IG1lbWJsb2NrcyBuZXZlciBzaHJpbmtzIGV4Y2VwdCBpbiBfX3Z4Z2VfaHdfZmlmb19jbG9zZQorCSAqIHJvdXRpbmUgd2hpY2ggd2lsbCBlc3NlbnRpYWxseSBzdG9wIHRoZSBjaGFubmVsIGFuZCBmcmVlIHJlc291cmNlcy4KKwkgKi8KKworCS8qIFR4REwgY29tbW9uIHByaXZhdGUgc2l6ZSA9PSBUeERMIHByaXZhdGUgICsgIGRyaXZlciBwcml2YXRlICovCisJZmlmby0+cHJpdl9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYpICsgYXR0ci0+cGVyX3R4ZGxfc3BhY2U7CisJZmlmby0+cHJpdl9zaXplID0gKChmaWZvLT5wcml2X3NpemUgICsgIFZYR0VfQ0FDSEVfTElORV9TSVpFIC0gMSkgLworCQkJVlhHRV9DQUNIRV9MSU5FX1NJWkUpICogVlhHRV9DQUNIRV9MSU5FX1NJWkU7CisKKwlmaWZvLT5wZXJfdHhkbF9zcGFjZSA9IGF0dHItPnBlcl90eGRsX3NwYWNlOworCisJLyogcmVjb21wdXRlIHR4ZGwgc2l6ZSB0byBiZSBjYWNoZWxpbmUgYWxpZ25lZCAqLworCWZpZm8tPnR4ZGxfc2l6ZSA9IHR4ZGxfc2l6ZTsKKwlmaWZvLT50eGRsX3Blcl9tZW1ibG9jayA9IHR4ZGxfcGVyX21lbWJsb2NrOworCisJZmlmby0+dHhkbF90ZXJtID0gYXR0ci0+dHhkbF90ZXJtOworCWZpZm8tPmNhbGxiYWNrID0gYXR0ci0+Y2FsbGJhY2s7CisKKwlpZiAoZmlmby0+dHhkbF9wZXJfbWVtYmxvY2sgPT0gMCkgeworCQlfX3Z4Z2VfaHdfZmlmb19kZWxldGUodnApOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0JMT0NLX1NJWkU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmaWZvX21wX2NhbGxiYWNrLml0ZW1fZnVuY19hbGxvYyA9IF9fdnhnZV9od19maWZvX21lbXBvb2xfaXRlbV9hbGxvYzsKKworCWZpZm8tPm1lbXBvb2wgPQorCQlfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUodnBhdGgtPmhsZGV2LAorCQkJZmlmby0+Y29uZmlnLT5tZW1ibG9ja19zaXplLAorCQkJZmlmby0+dHhkbF9zaXplLAorCQkJZmlmby0+cHJpdl9zaXplLAorCQkJKGZpZm8tPmNvbmZpZy0+Zmlmb19ibG9ja3MgKiBmaWZvLT50eGRsX3Blcl9tZW1ibG9jayksCisJCQkoZmlmby0+Y29uZmlnLT5maWZvX2Jsb2NrcyAqIGZpZm8tPnR4ZGxfcGVyX21lbWJsb2NrKSwKKwkJCSZmaWZvX21wX2NhbGxiYWNrLAorCQkJZmlmbyk7CisKKwlpZiAoZmlmby0+bWVtcG9vbCA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19maWZvX2RlbGV0ZSh2cCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplKCZmaWZvLT5jaGFubmVsKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJX192eGdlX2h3X2ZpZm9fZGVsZXRlKHZwKTsKKwkJZ290byBleGl0OworCX0KKworCXZ4Z2VfYXNzZXJ0KGZpZm8tPmNoYW5uZWwucmVzZXJ2ZV9wdHIpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fYWJvcnQgLSBSZXR1cm5zIHRoZSBUeEQKKyAqIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB0aGUgVHhEcyBvZiBmaWZvCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fYWJvcnQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvKQoreworCXZvaWQgKnR4ZGxoOworCisJZm9yICg7OykgeworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZSgmZmlmby0+Y2hhbm5lbCwgJnR4ZGxoKTsKKworCQlpZiAodHhkbGggPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoJmZpZm8tPmNoYW5uZWwpOworCisJCWlmIChmaWZvLT50eGRsX3Rlcm0pIHsKKwkJCWZpZm8tPnR4ZGxfdGVybSh0eGRsaCwKKwkJCVZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQsCisJCQlmaWZvLT5jaGFubmVsLnVzZXJkYXRhKTsKKwkJfQorCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfZnJlZSgmZmlmby0+Y2hhbm5lbCwgdHhkbGgpOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fcmVzZXQgLSBSZXNldHMgdGhlIGZpZm8KKyAqIFRoaXMgZnVuY3Rpb24gcmVzZXRzIHRoZSBmaWZvIGR1cmluZyB2cGF0aCByZXNldCBvcGVyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfZmlmb19yZXNldChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8pCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJX192eGdlX2h3X2ZpZm9fYWJvcnQoZmlmbyk7CisJc3RhdHVzID0gX192eGdlX2h3X2NoYW5uZWxfcmVzZXQoJmZpZm8tPmNoYW5uZWwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19maWZvX2RlbGV0ZSAtIFJlbW92ZXMgdGhlIEZJRk8KKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXVwIHRoZSBtZW1vcnkgcG9vbCBhbmQgcmVtb3ZlcyB0aGUgRklGTworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19maWZvX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvID0gdnAtPnZwYXRoLT5maWZvaDsKKworCV9fdnhnZV9od19maWZvX2Fib3J0KGZpZm8pOworCisJaWYgKGZpZm8tPm1lbXBvb2wpCisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koZmlmby0+bWVtcG9vbCk7CisKKwl2cC0+dnBhdGgtPmZpZm9oID0gTlVMTDsKKworCV9fdnhnZV9od19jaGFubmVsX2ZyZWUoJmZpZm8tPmNoYW5uZWwpOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcGNpX3JlYWQgLSBSZWFkIHRoZSBjb250ZW50IG9mIGdpdmVuIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBwY2kgY29uZmlnIHNwYWNlLgorICogUmVhZCBmcm9tIHRoZSB2cGF0aCBwY2kgY29uZmlnIHNwYWNlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcGNpX3JlYWQoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQkgdTMyIHBoeV9mdW5jXzAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwl2YWw2NCA9CVZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMV9BRERSRVNTKG9mZnNldCk7CisKKwlpZiAocGh5X2Z1bmNfMCkKKwkJdmFsNjQgfD0gVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19DRkcxX1NFTF9GVU5DMDsKKworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cGNpX2NvbmZpZ19hY2Nlc3NfY2ZnMSk7CisJd21iKCk7CisJd3JpdGVxKFZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMl9SRVEsCisJCQkmdnBfcmVnLT5wY2lfY29uZmlnX2FjY2Vzc19jZmcyKTsKKwl3bWIoKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCgKKwkJCSZ2cF9yZWctPnBjaV9jb25maWdfYWNjZXNzX2NmZzIsCisJCQlWWEdFX0hXX0lOVFJfTUFTS19BTEwsIFZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cGNpX2NvbmZpZ19hY2Nlc3Nfc3RhdHVzKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfU1RBVFVTX0FDQ0VTU19FUlIpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQkqdmFsID0gMDsKKwl9IGVsc2UKKwkJKnZhbCA9ICh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMzIsIDMyKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldCAtIEdldCB0aGUgZnVuY3Rpb24gaWQgb2YgdGhlIHZwYXRoLgorICogUmV0dXJucyB0aGUgZnVuY3Rpb24gbnVtYmVyIG9mIHRoZSB2cGF0aC4KKyAqLwordTMyCitfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQodTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqdnBtZ210X3JlZykKK3sKKwl1NjQgdmFsNjQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cG1nbXRfcmVnLT52cGF0aF90b19mdW5jX21hcF9jZmcxKTsKKworCXJldHVybgorCSAodTMyKVZYR0VfSFdfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMV9HRVRfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMSh2YWw2NCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmVhZF9ydHNfZHMgLSBQcm9ncmFtIFJUUyBzdGVlcmluZyBjcml0aWVyaWEKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitfX3Z4Z2VfaHdfcmVhZF9ydHNfZHMoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwkJICAgICAgdTY0IGR0YV9zdHJ1Y3Rfc2VsKQoreworCXdyaXRlcSgwLCAmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCXdtYigpOworCXdyaXRlcShkdGFfc3RydWN0X3NlbCwgJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJd3JpdGVxKDAsICZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCXdtYigpOworCXJldHVybjsKK30KKworCisvKgorICogX192eGdlX2h3X3ZwYXRoX2NhcmRfaW5mb19nZXQgLSBHZXQgdGhlIHNlcmlhbCBudW1iZXJzLAorICogcGFydCBudW1iZXIgYW5kIHByb2R1Y3QgZGVzY3JpcHRpb24uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0KAorCXUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKQoreworCXUzMiBpLCBqOworCXU2NCB2YWw2NDsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXU4ICpzZXJpYWxfbnVtYmVyID0gaHdfaW5mby0+c2VyaWFsX251bWJlcjsKKwl1OCAqcGFydF9udW1iZXIgPSBod19pbmZvLT5wYXJ0X251bWJlcjsKKwl1OCAqcHJvZHVjdF9kZXNjID0gaHdfaW5mby0+cHJvZHVjdF9kZXNjOworCisJX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9TRVJJQUxfTlVNQkVSKTsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQkoKHU2NCAqKXNlcmlhbF9udW1iZXIpWzBdID0gYmU2NF90b19jcHUoZGF0YTEpOworCisJCWRhdGEyID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCSgodTY0ICopc2VyaWFsX251bWJlcilbMV0gPSBiZTY0X3RvX2NwdShkYXRhMik7CisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJfSBlbHNlCisJCSpzZXJpYWxfbnVtYmVyID0gMDsKKworCV9fdnhnZV9od19yZWFkX3J0c19kcyh2cGF0aF9yZWcsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1BBUlRfTlVNQkVSKTsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCisJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCSgodTY0ICopcGFydF9udW1iZXIpWzBdID0gYmU2NF90b19jcHUoZGF0YTEpOworCisJCWRhdGEyID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCSgodTY0ICopcGFydF9udW1iZXIpWzFdID0gYmU2NF90b19jcHUoZGF0YTIpOworCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl9IGVsc2UKKwkJKnBhcnRfbnVtYmVyID0gMDsKKworCWogPSAwOworCisJZm9yIChpID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzA7CisJICAgICBpIDw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18zOyBpKyspIHsKKworCQlfX3Z4Z2VfaHdfcmVhZF9ydHNfZHModnBhdGhfcmVnLCBpKTsKKworCQl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCisJCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQkJKCh1NjQgKilwcm9kdWN0X2Rlc2MpW2orK10gPSBiZTY0X3RvX2NwdShkYXRhMSk7CisKKwkJCWRhdGEyID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCQkoKHU2NCAqKXByb2R1Y3RfZGVzYylbaisrXSA9IGJlNjRfdG9fY3B1KGRhdGEyKTsKKworCQkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJfSBlbHNlCisJCQkqcHJvZHVjdF9kZXNjID0gMDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQgLSBHZXQgdGhlIGZ3IHZlcnNpb24KKyAqIFJldHVybnMgRlcgVmVyc2lvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfZndfdmVyX2dldCgKKwl1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbykKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uICpmd192ZXJzaW9uID0gJmh3X2luZm8tPmZ3X3ZlcnNpb247CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgKmZ3X2RhdGUgPSAmaHdfaW5mby0+ZndfZGF0ZTsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiAqZmxhc2hfdmVyc2lvbiA9ICZod19pbmZvLT5mbGFzaF92ZXJzaW9uOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlICpmbGFzaF9kYXRlID0gJmh3X2luZm8tPmZsYXNoX2RhdGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX0VOVFJZKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCisJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCWRhdGEyID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisKKwkJZndfZGF0ZS0+ZGF5ID0KKwkJCSh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfREFZKAorCQkJCQkJZGF0YTEpOworCQlmd19kYXRlLT5tb250aCA9CisJCQkodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01PTlRIKAorCQkJCQkJZGF0YTEpOworCQlmd19kYXRlLT55ZWFyID0KKwkJCSh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfWUVBUigKKwkJCQkJCWRhdGExKTsKKworCQlzbnByaW50Zihmd19kYXRlLT5kYXRlLCBWWEdFX0hXX0ZXX1NUUkxFTiwgIiUyLjJkLyUyLjJkLyU0LjRkIiwKKwkJCWZ3X2RhdGUtPm1vbnRoLCBmd19kYXRlLT5kYXksIGZ3X2RhdGUtPnllYXIpOworCisJCWZ3X3ZlcnNpb24tPm1ham9yID0KKwkJICAgICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUFKT1IoZGF0YTEpOworCQlmd192ZXJzaW9uLT5taW5vciA9CisJCSAgICAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01JTk9SKGRhdGExKTsKKwkJZndfdmVyc2lvbi0+YnVpbGQgPQorCQkgICAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9CVUlMRChkYXRhMSk7CisKKwkJc25wcmludGYoZndfdmVyc2lvbi0+dmVyc2lvbiwgVlhHRV9IV19GV19TVFJMRU4sICIlZC4lZC4lZCIsCisJCSAgICBmd192ZXJzaW9uLT5tYWpvciwgZndfdmVyc2lvbi0+bWlub3IsIGZ3X3ZlcnNpb24tPmJ1aWxkKTsKKworCQlmbGFzaF9kYXRlLT5kYXkgPQorCQkgICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfREFZKGRhdGEyKTsKKwkJZmxhc2hfZGF0ZS0+bW9udGggPQorCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NT05USChkYXRhMik7CisJCWZsYXNoX2RhdGUtPnllYXIgPQorCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9ZRUFSKGRhdGEyKTsKKworCQlzbnByaW50ZihmbGFzaF9kYXRlLT5kYXRlLCBWWEdFX0hXX0ZXX1NUUkxFTiwKKwkJCSIlMi4yZC8lMi4yZC8lNC40ZCIsCisJCQlmbGFzaF9kYXRlLT5tb250aCwgZmxhc2hfZGF0ZS0+ZGF5LCBmbGFzaF9kYXRlLT55ZWFyKTsKKworCQlmbGFzaF92ZXJzaW9uLT5tYWpvciA9CisJCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01BSk9SKGRhdGEyKTsKKwkJZmxhc2hfdmVyc2lvbi0+bWlub3IgPQorCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NSU5PUihkYXRhMik7CisJCWZsYXNoX3ZlcnNpb24tPmJ1aWxkID0KKwkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfQlVJTEQoZGF0YTIpOworCisJCXNucHJpbnRmKGZsYXNoX3ZlcnNpb24tPnZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOLCAiJWQuJWQuJWQiLAorCQkJZmxhc2hfdmVyc2lvbi0+bWFqb3IsIGZsYXNoX3ZlcnNpb24tPm1pbm9yLAorCQkJZmxhc2hfdmVyc2lvbi0+YnVpbGQpOworCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl9IGVsc2UKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3BjaV9mdW5jX21vZGVfZ2V0IC0gR2V0IHRoZSBwY2kgbW9kZQorICogUmV0dXJucyBwY2kgZnVuY3Rpb24gbW9kZQorICovCit1NjQKK19fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCgKKwl1MzIgIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpCit7CisJdTY0IHZhbDY0OworCXU2NCBkYXRhMSA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQ0lfTU9ERSk7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZSB7CisJCWRhdGExID0gMDsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCX0KK2V4aXQ6CisJcmV0dXJuIGRhdGExOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkIC0gRmxpY2sgKGJsaW5rKSBsaW5rIExFRC4KKyAqIEBobGRldjogSFcgZGV2aWNlLgorICogQG9uX29mZjogVFJVRSBpZiBmbGlja2VyaW5nIHRvIGJlIG9uLCBGQUxTRSB0byBiZSBvZmYKKyAqCisgKiBGbGlja2VyIHRoZSBsaW5rIExFRC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgICAgIHU2NCBvbl9vZmYpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJaWYgKGhsZGV2ID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cF9yZWcgPSBobGRldi0+dnBhdGhfcmVnW2hsZGV2LT5maXJzdF92cF9pZF07CisKKwl3cml0ZXEoMCwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKwl3bWIoKTsKKwl3cml0ZXEob25fb2ZmLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwl3cml0ZXEoMCwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJd21iKCk7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MRURfQ09OVFJPTCkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQoMCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0IC0gR2V0IHRoZSBlbnRyaWVzIGZyb20gUlRTIGFjY2VzcyB0YWJsZXMKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXUzMiBhY3Rpb24sIHUzMiBydHNfdGFibGUsIHUzMiBvZmZzZXQsIHU2NCAqZGF0YTEsIHU2NCAqZGF0YTIpCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTihhY3Rpb24pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKHJ0c190YWJsZSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQob2Zmc2V0KTsKKworCWlmICgocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfU09MT19JVCkgfHwKKwkgICAgKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUKSB8fAorCSAgICAocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTUFTSykgfHwKKwkgICAgKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0tFWSkpIHsKKwkJdmFsNjQgPSB2YWw2NCB8CVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1RBQkxFX1NFTDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKSB7CisKKwkJKmRhdGExID0gcmVhZHEoJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisKKwkJaWYgKChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8fAorCQkocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKSB7CisJCQkqZGF0YTIgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwkJfQorCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCAtIFNldCB0aGUgZW50cmllcyBvZiBSVFMgYWNjZXNzIHRhYmxlcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHUzMiBhY3Rpb24sIHUzMiBydHNfdGFibGUsCisJdTMyIG9mZnNldCwgdTY0IGRhdGExLCB1NjQgZGF0YTIpCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJd3JpdGVxKGRhdGExLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwl3bWIoKTsKKworCWlmICgocnRzX3RhYmxlID09IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfHwKKwkgICAgKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUKSkgeworCQl3cml0ZXEoZGF0YTIsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCQl3bWIoKTsKKwl9CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTihhY3Rpb24pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKHJ0c190YWJsZSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQob2Zmc2V0KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQl2cGF0aC0+aGxkZXYtPmNvbmZpZy5kZXZpY2VfcG9sbF9taWxsaXMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfYWRkcl9nZXQgLSBHZXQgdGhlIGh3IGFkZHJlc3MgZW50cnkgZm9yIHRoaXMgdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KAorCXUzMiB2cF9pZCwgc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLCB1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pCit7CisJdTMyIGk7CisJdTY0IHZhbDY0OworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfRklSU1RfRU5UUlkpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCisJCWRhdGExID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJCWRhdGEyID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisKKwkJZGF0YTEgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0RBX01BQ19BRERSKGRhdGExKTsKKwkJZGF0YTIgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soCisJCQkJCQkJZGF0YTIpOworCisJCWZvciAoaSA9IEVUSF9BTEVOOyBpID4gMDsgaS0tKSB7CisJCQltYWNhZGRyW2ktMV0gPSAodTgpKGRhdGExICYgMHhGRik7CisJCQlkYXRhMSA+Pj0gODsKKworCQkJbWFjYWRkcl9tYXNrW2ktMV0gPSAodTgpKGRhdGEyICYgMHhGRik7CisJCQlkYXRhMiA+Pj0gODsKKwkJfQorCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfc2V0IC0gU2V0L2NvbmZpZ3VyZSBSVFMgaGFzaGluZy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfc2V0KAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCQkJZW51bSB2eGdlX2h3X3J0aF9hbGdvcml0bXMgYWxnb3JpdGhtLAorCQkJc3RydWN0IHZ4Z2VfaHdfcnRoX2hhc2hfdHlwZXMgKmhhc2hfdHlwZSwKKwkJCXUxNiBidWNrZXRfc2l6ZSkKK3sKKwl1NjQgZGF0YTAsIGRhdGExOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQodnAsCisJCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlksCisJCSAgICAgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9HRU5fQ0ZHLAorCQkJMCwgJmRhdGEwLCAmZGF0YTEpOworCisJZGF0YTAgJj0gfihWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9CVUNLRVRfU0laRSgweGYpIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUwoMHgzKSk7CisKKwlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfRU4gfAorCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0JVQ0tFVF9TSVpFKGJ1Y2tldF9zaXplKSB8CisJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTChhbGdvcml0aG0pOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX3RjcGlwdjRfZW4pCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNF9FTjsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV9pcHY0X2VuKQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNF9FTjsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV90Y3BpcHY2X2VuKQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjZfRU47CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfaXB2Nl9lbikKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjZfRU47CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfdGNwaXB2NmV4X2VuKQorCQlkYXRhMCB8PQorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjZfRVhfRU47CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfaXB2NmV4X2VuKQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNl9FWF9FTjsKKworCWlmIChWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fQUNUSVZFX1RBQkxFKGRhdGEwKSkKKwkJZGF0YTAgJj0gflZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FDVElWRV9UQUJMRTsKKwllbHNlCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FDVElWRV9UQUJMRTsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHZwLAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fV1JJVEVfRU5UUlksCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfR0VOX0NGRywKKwkJMCwgZGF0YTAsIDApOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZAordnhnZV9od19ydHNfcnRoX2RhdGEwX2RhdGExX2dldCh1MzIgaiwgdTY0ICpkYXRhMCwgdTY0ICpkYXRhMSwKKwkJCQl1MTYgZmxhZywgdTggKml0YWJsZSkKK3sKKwlzd2l0Y2ggKGZsYWcpIHsKKwljYXNlIDE6CisJCSpkYXRhMCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfQlVDS0VUX05VTShqKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfRU5UUllfRU4gfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9CVUNLRVRfREFUQSgKKwkJCWl0YWJsZVtqXSk7CisJY2FzZSAyOgorCQkqZGF0YTAgfD0KKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfQlVDS0VUX05VTShqKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfRU5UUllfRU4gfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9CVUNLRVRfREFUQSgKKwkJCWl0YWJsZVtqXSk7CisJY2FzZSAzOgorCQkqZGF0YTEgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0JVQ0tFVF9OVU0oail8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0VOVFJZX0VOIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfQlVDS0VUX0RBVEEoCisJCQlpdGFibGVbal0pOworCWNhc2UgNDoKKwkJKmRhdGExIHw9CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0JVQ0tFVF9OVU0oail8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0VOVFJZX0VOIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfQlVDS0VUX0RBVEEoCisJCQlpdGFibGVbal0pOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9Cit9CisvKgorICogdnhnZV9od192cGF0aF9ydHNfcnRoX2l0YWJsZV9zZXQgLSBTZXQvY29uZmlndXJlIGluZGlyZWN0aW9uIHRhYmxlIChJVCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9ydHNfcnRoX2l0YWJsZV9zZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKnZwYXRoX2hhbmRsZXMsCisJCQl1MzIgdnBhdGhfY291bnQsCisJCQl1OCAqbXRhYmxlLAorCQkJdTggKml0YWJsZSwKKwkJCXUzMiBpdGFibGVfc2l6ZSkKK3sKKwl1MzIgaSwgaiwgYWN0aW9uLCBydHNfdGFibGU7CisJdTY0IGRhdGEwOworCXU2NCBkYXRhMTsKKwl1MzIgbWF4X2VudHJpZXM7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCA9IHZwYXRoX2hhbmRsZXNbMF07CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCW1heF9lbnRyaWVzID0gKCgodTMyKTEpIDw8IGl0YWJsZV9zaXplKTsKKworCWlmICh2cC0+dnBhdGgtPmhsZGV2LT5jb25maWcucnRoX2l0X3R5cGUKKwkJCQk9PSBWWEdFX0hXX1JUSF9JVF9UWVBFX1NPTE9fSVQpIHsKKwkJYWN0aW9uID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1dSSVRFX0VOVFJZOworCQlydHNfdGFibGUgPQorCQkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9TT0xPX0lUOworCisJCWZvciAoaiA9IDA7IGogPCBtYXhfZW50cmllczsgaisrKSB7CisKKwkJCWRhdGExID0gMDsKKworCQkJZGF0YTAgPQorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9TT0xPX0lUX0JVQ0tFVF9EQVRBKAorCQkJCWl0YWJsZVtqXSk7CisKKwkJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHZwYXRoX2hhbmRsZXNbMF0sCisJCQkJYWN0aW9uLCBydHNfdGFibGUsIGosIGRhdGEwLCBkYXRhMSk7CisKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgbWF4X2VudHJpZXM7IGorKykgeworCisJCQlkYXRhMSA9IDA7CisKKwkJCWRhdGEwID0KKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfU09MT19JVF9FTlRSWV9FTiB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX1NPTE9fSVRfQlVDS0VUX0RBVEEoCisJCQkJaXRhYmxlW2pdKTsKKworCQkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQoCisJCQkJdnBhdGhfaGFuZGxlc1ttdGFibGVbaXRhYmxlW2pdXV0sIGFjdGlvbiwKKwkJCQlydHNfdGFibGUsIGosIGRhdGEwLCBkYXRhMSk7CisKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCQlnb3RvIGV4aXQ7CisJCX0KKwl9IGVsc2UgeworCQlhY3Rpb24gPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fV1JJVEVfRU5UUlk7CisJCXJ0c190YWJsZSA9CisJCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUOworCQlmb3IgKGkgPSAwOyBpIDwgdnBhdGhfY291bnQ7IGkrKykgeworCisJCQlmb3IgKGogPSAwOyBqIDwgbWF4X2VudHJpZXM7KSB7CisKKwkJCQlkYXRhMCA9IDA7CisJCQkJZGF0YTEgPSAwOworCisJCQkJd2hpbGUgKGogPCBtYXhfZW50cmllcykgeworCQkJCQlpZiAobXRhYmxlW2l0YWJsZVtqXV0gIT0gaSkgeworCQkJCQkJaisrOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJdnhnZV9od19ydHNfcnRoX2RhdGEwX2RhdGExX2dldChqLAorCQkJCQkJJmRhdGEwLCAmZGF0YTEsIDEsIGl0YWJsZSk7CisJCQkJCWorKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJd2hpbGUgKGogPCBtYXhfZW50cmllcykgeworCQkJCQlpZiAobXRhYmxlW2l0YWJsZVtqXV0gIT0gaSkgeworCQkJCQkJaisrOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJdnhnZV9od19ydHNfcnRoX2RhdGEwX2RhdGExX2dldChqLAorCQkJCQkJJmRhdGEwLCAmZGF0YTEsIDIsIGl0YWJsZSk7CisJCQkJCWorKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJd2hpbGUgKGogPCBtYXhfZW50cmllcykgeworCQkJCQlpZiAobXRhYmxlW2l0YWJsZVtqXV0gIT0gaSkgeworCQkJCQkJaisrOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJdnhnZV9od19ydHNfcnRoX2RhdGEwX2RhdGExX2dldChqLAorCQkJCQkJJmRhdGEwLCAmZGF0YTEsIDMsIGl0YWJsZSk7CisJCQkJCWorKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJd2hpbGUgKGogPCBtYXhfZW50cmllcykgeworCQkJCQlpZiAobXRhYmxlW2l0YWJsZVtqXV0gIT0gaSkgeworCQkJCQkJaisrOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJdnhnZV9od19ydHNfcnRoX2RhdGEwX2RhdGExX2dldChqLAorCQkJCQkJJmRhdGEwLCAmZGF0YTEsIDQsIGl0YWJsZSk7CisJCQkJCWorKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKGRhdGEwICE9IDApIHsKKwkJCQkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQoCisJCQkJCQkJdnBhdGhfaGFuZGxlc1tpXSwKKwkJCQkJCQlhY3Rpb24sIHJ0c190YWJsZSwKKwkJCQkJCQkwLCBkYXRhMCwgZGF0YTEpOworCisJCQkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCQkJCWdvdG8gZXhpdDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9jaGVja19sZWFrIC0gQ2hlY2sgZm9yIG1lbW9yeSBsZWFrCisgKiBAcmluZ2g6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICoKKyAqIElmIFBSQ19SWERfRE9PUkJFTExfVlBuLk5FV19RV19DTlQgaXMgbGFyZ2VyIG9yIGVxdWFsIHRvCisgKiBQUkNfQ0ZHNl9WUG4uUlhEX1NQQVQgdGhlbiBhIGxlYWsgaGFzIG9jY3VycmVkLgorICogUmV0dXJuczogVlhHRV9IV19GQUlMLCBpZiBsZWFrIGhhcyBvY2N1cnJlZC4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfY2hlY2tfbGVhayhzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXU2NCByeGRfbmV3X2NvdW50LCByeGRfc3BhdDsKKworCWlmIChyaW5nID09IE5VTEwpCisJCXJldHVybiBzdGF0dXM7CisKKwlyeGRfbmV3X2NvdW50ID0gcmVhZGwoJnJpbmctPnZwX3JlZy0+cHJjX3J4ZF9kb29yYmVsbCk7CisJcnhkX3NwYXQgPSByZWFkcSgmcmluZy0+dnBfcmVnLT5wcmNfY2ZnNik7CisJcnhkX3NwYXQgPSBWWEdFX0hXX1BSQ19DRkc2X1JYRF9TUEFUKHJ4ZF9zcGF0KTsKKworCWlmIChyeGRfbmV3X2NvdW50ID49IHJ4ZF9zcGF0KQorCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX21nbXRfcmVhZAorICogVGhpcyByb3V0aW5lIHJlYWRzIHRoZSB2cGF0aF9tZ210IHJlZ2lzdGVycworICovCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX21nbXRfcmVhZCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgpCit7CisJdTMyIGksIG10dSA9IDAsIG1heF9weWxkID0gMDsKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRDsgaSsrKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwbWdtdF9yZWctPgorCQkJCXJ4bWFjX2NmZzBfcG9ydF92cG1nbXRfY2xvbmVbaV0pOworCQltYXhfcHlsZCA9CisJCQkodTMyKQorCQkJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0dFVF9NQVhfUFlMRF9MRU4KKwkJCSh2YWw2NCk7CisJCWlmIChtdHUgPCBtYXhfcHlsZCkKKwkJCW10dSA9IG1heF9weWxkOworCX0KKworCXZwYXRoLT5tYXhfbXR1ID0gbXR1ICsgVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwbWdtdF9yZWctPnhtYWNfdnNwb3J0X2Nob2ljZXNfdnApOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAodmFsNjQgJiB2eGdlX21CSVQoaSkpCisJCQl2cGF0aC0+dnNwb3J0X251bWJlciA9IGk7CisJfQorCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwbWdtdF9yZWctPnhnbWFjX2dlbl9zdGF0dXNfdnBtZ210X2Nsb25lKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfWEdNQUNfR0VOX1NUQVRVU19WUE1HTVRfQ0xPTkVfWE1BQ0pfTlRXS19PSykKKwkJVlhHRV9IV19ERVZJQ0VfTElOS19TVEFURV9TRVQodnBhdGgtPmhsZGV2LCBWWEdFX0hXX0xJTktfVVApOworCWVsc2UKKwkJVlhHRV9IV19ERVZJQ0VfTElOS19TVEFURV9TRVQodnBhdGgtPmhsZGV2LCBWWEdFX0hXX0xJTktfRE9XTik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3Jlc2V0X2NoZWNrIC0gQ2hlY2sgaWYgcmVzZXR0aW5nIHRoZSB2cGF0aCBjb21wbGV0ZWQKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHZwYXRoX3JzdF9pbl9wcm9nIHJlZ2lzdGVyIHRvIHNlZSBpZgorICogYWRhcHRlciBjb21wbGV0ZWQgdGhlIHJlc2V0IHByb2Nlc3MgZm9yIHRoZSB2cGF0aAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2soc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwoCisJCQkmdnBhdGgtPmhsZGV2LT5jb21tb25fcmVnLT52cGF0aF9yc3RfaW5fcHJvZywKKwkJCVZYR0VfSFdfVlBBVEhfUlNUX0lOX1BST0dfVlBBVEhfUlNUX0lOX1BST0coCisJCQkJMSA8PCAoMTYgLSB2cGF0aC0+dnBfaWQpKSwKKwkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3Jlc2V0CisgKiBUaGlzIHJvdXRpbmUgcmVzZXRzIHRoZSB2cGF0aCBvbiB0aGUgZGV2aWNlCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9yZXNldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzBfU1dfUkVTRVRfVlBBVEgoMSA8PCAoMTYgLSB2cF9pZCkpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwKKwkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPmNtbl9yc3RoZGxyX2NmZzApOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9zd19yZXNldAorICogVGhpcyByb3V0aW5lIHJlc2V0cyB0aGUgdnBhdGggc3RydWN0dXJlcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSAoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqKSZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisKKwlpZiAodnBhdGgtPnJpbmdoKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od19yaW5nX3Jlc2V0KHZwYXRoLT5yaW5naCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAodnBhdGgtPmZpZm9oKQorCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfZmlmb19yZXNldCh2cGF0aC0+Zmlmb2gpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBwcmMgcmVnaXN0ZXJzIG9mIHZpcnR1YWwgcGF0aCB1c2luZyB0aGUgY29uZmlnCisgKiBwYXNzZWQKKyAqLwordm9pZAorX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqdnBfY29uZmlnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwl2cF9jb25maWcgPSB2cGF0aC0+dnBfY29uZmlnOworCisJaWYgKHZwX2NvbmZpZy0+cmluZy5lbmFibGUgPT0gVlhHRV9IV19SSU5HX0RJU0FCTEUpCisJCXJldHVybjsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2NmZzEpOworCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzFfUlRJX1RJTlRfRElTQUJMRTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnByY19jZmcxKTsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnByY19jZmc2KTsKKwl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc2X0RPT1JCRUxMX01PREVfRU47CisJd3JpdGVxKHZhbDY0LCAmdnBhdGgtPnZwX3JlZy0+cHJjX2NmZzYpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfY2ZnNyk7CisKKwlpZiAodnBhdGgtPnZwX2NvbmZpZy0+cmluZy5zY2F0dGVyX21vZGUgIT0KKwkJVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9VU0VfRkxBU0hfREVGQVVMVCkgeworCisJCXZhbDY0ICY9IH5WWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERSgweDMpOworCisJCXN3aXRjaCAodnBhdGgtPnZwX2NvbmZpZy0+cmluZy5zY2F0dGVyX21vZGUpIHsKKwkJY2FzZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0E6CisJCQl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERSgKKwkJCQkJVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQSk7CisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0I6CisJCQl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERSgKKwkJCQkJVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQik7CisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0M6CisJCQl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERSgKKwkJCQkJVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cHJjX2NmZzcpOworCisJd3JpdGVxKFZYR0VfSFdfUFJDX0NGRzVfUlhEMF9BREQoCisJCQkJX192eGdlX2h3X3JpbmdfZmlyc3RfYmxvY2tfYWRkcmVzc19nZXQoCisJCQkJCXZwYXRoLT5yaW5naCkgPj4gMyksICZ2cF9yZWctPnByY19jZmc1KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2NmZzQpOworCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzRfSU5fU1ZDOworCXZhbDY0ICY9IH5WWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERSgweDMpOworCisJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREUoCisJCQlWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERV9PTkVfQlVGRkVSKTsKKworCWlmIChobGRldi0+Y29uZmlnLnJ0aF9lbiA9PSBWWEdFX0hXX1JUSF9ESVNBQkxFKQorCQl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc0X1JUSF9ESVNBQkxFOworCWVsc2UKKwkJdmFsNjQgJj0gflZYR0VfSFdfUFJDX0NGRzRfUlRIX0RJU0FCTEU7CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnByY19jZmc0KTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBrZGZjIHJlZ2lzdGVycyBvZiB2aXJ0dWFsIHBhdGggdXNpbmcgdGhlCisgKiBjb25maWcgcGFzc2VkCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9rZGZjX2NvbmZpZ3VyZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IHZwYXRoX3N0cmlkZTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCXN0YXR1cyA9IF9fdnhnZV9od19rZGZjX3N3YXBwZXJfc2V0KGhsZGV2LT5sZWdhY3lfcmVnLCB2cF9yZWcpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmtkZmNfZHJibF90cmlwbGV0X3RvdGFsKTsKKworCXZwYXRoLT5tYXhfa2RmY19kYiA9CisJCSh1MzIpVlhHRV9IV19LREZDX0RSQkxfVFJJUExFVF9UT1RBTF9HRVRfS0RGQ19NQVhfU0laRSgKKwkJCXZhbDY0KzEpLzI7CisKKwlpZiAodnBhdGgtPnZwX2NvbmZpZy0+Zmlmby5lbmFibGUgPT0gVlhHRV9IV19GSUZPX0VOQUJMRSkgeworCisJCXZwYXRoLT5tYXhfbm9mbF9kYiA9IHZwYXRoLT5tYXhfa2RmY19kYjsKKworCQlpZiAodnBhdGgtPm1heF9ub2ZsX2RiIDwKKwkJCSgodnBhdGgtPnZwX2NvbmZpZy0+Zmlmby5tZW1ibG9ja19zaXplIC8KKwkJCSh2cGF0aC0+dnBfY29uZmlnLT5maWZvLm1heF9mcmFncyAqCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQpKSkgKgorCQkJdnBhdGgtPnZwX2NvbmZpZy0+Zmlmby5maWZvX2Jsb2NrcykpIHsKKworCQkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX0ZJRk9fQkxPQ0tTOworCQl9CisJCXZhbDY0ID0gVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9QQVJUSVRJT05fTEVOR1RIXzAoCisJCQkJKHZwYXRoLT5tYXhfbm9mbF9kYioyKS0xKTsKKwl9CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPmtkZmNfZmlmb190cnBsX3BhcnRpdGlvbik7CisKKwl3cml0ZXEoVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9DVFJMX1RSSVBMRVRfRU5BQkxFLAorCQkmdnBfcmVnLT5rZGZjX2ZpZm9fdHJwbF9jdHJsKTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY190cnBsX2ZpZm9fMF9jdHJsKTsKKworCXZhbDY0ICY9IH4oVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERSgweDMpIHwKKwkJICAgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfU0VMRUNUKDB4RkYpKTsKKworCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREUoCisJCSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFX05PTl9PRkZMT0FEX09OTFkpIHwKKyNpZm5kZWYgX19CSUdfRU5ESUFOCisJCSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9TV0FQX0VOIHwKKyNlbmRpZgorCQkgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfU0VMRUNUKDApOworCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5rZGZjX3RycGxfZmlmb18wX2N0cmwpOworCXdyaXRlcSgodTY0KTAsICZ2cF9yZWctPmtkZmNfdHJwbF9maWZvXzBfd2JfYWRkcmVzcyk7CisJd21iKCk7CisJdnBhdGhfc3RyaWRlID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2Nfa2RmY192cGF0aF9zdHJpZGUpOworCisJdnBhdGgtPm5vZmxfZGIgPQorCQkoc3RydWN0IF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl93cmFwcGVyIF9faW9tZW0gKikKKwkJKGhsZGV2LT5rZGZjICsgKHZwX2lkICoKKwkJVlhHRV9IV19UT0NfS0RGQ19WUEFUSF9TVFJJREVfR0VUX1RPQ19LREZDX1ZQQVRIX1NUUklERSgKKwkJCQkJdnBhdGhfc3RyaWRlKSkpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX21hY19jb25maWd1cmUKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBtYWMgb2YgdmlydHVhbCBwYXRoIHVzaW5nIHRoZSBjb25maWcgcGFzc2VkCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9tYWNfY29uZmlndXJlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICp2cF9jb25maWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCXZwX2NvbmZpZyA9IHZwYXRoLT52cF9jb25maWc7CisKKwl3cml0ZXEoVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VfVlNQT1JUX05VTUJFUigKKwkJCXZwYXRoLT52c3BvcnRfbnVtYmVyKSwgJnZwX3JlZy0+eG1hY192c3BvcnRfY2hvaWNlKTsKKworCWlmICh2cF9jb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19FTkFCTEUpIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnhtYWNfcnBhX3ZjZmcpOworCisJCWlmICh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmICh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZykKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfU1RSSVBfVkxBTl9UQUc7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfWE1BQ19SUEFfVkNGR19TVFJJUF9WTEFOX1RBRzsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+eG1hY19ycGFfdmNmZyk7CisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJCWlmICh2cF9jb25maWctPm10dSAhPQorCQkJCVZYR0VfSFdfVlBBVEhfVVNFX0ZMQVNIX0RFRkFVTFRfSU5JVElBTF9NVFUpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTigweDNmZmYpOworCQkJaWYgKCh2cF9jb25maWctPm10dSAgKworCQkJCVZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSkgPCB2cGF0aC0+bWF4X210dSkKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTigKKwkJCQkJdnBfY29uZmlnLT5tdHUgICsKKwkJCQkJVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFKTsKKwkJCWVsc2UKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTigKKwkJCQkJdnBhdGgtPm1heF9tdHUpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5yeG1hY192Y2ZnMSk7CisKKwkJdmFsNjQgJj0gfihWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfQkRfTU9ERSgweDMpIHwKKwkJCVZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9FTl9NT0RFKTsKKworCQlpZiAoaGxkZXYtPmNvbmZpZy5ydGhfaXRfdHlwZSA9PQorCQkJCVZYR0VfSFdfUlRIX0lUX1RZUEVfTVVMVElfSVQpIHsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9CRF9NT0RFKAorCQkJCTB4MikgfAorCQkJCVZYR0VfSFdfUlhNQUNfVkNGRzFfUlRTX1JUSF9NVUxUSV9JVF9FTl9NT0RFOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5yeG1hY192Y2ZnMSk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfdGltX2NvbmZpZ3VyZQorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIHRpbSByZWdpc3RlcnMgb2YgdmlydHVhbCBwYXRoIHVzaW5nIHRoZSBjb25maWcKKyAqIHBhc3NlZAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfdGltX2NvbmZpZ3VyZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnICpjb25maWc7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwljb25maWcgPSB2cGF0aC0+dnBfY29uZmlnOworCisJd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX2Rlc3RfYWRkcik7CisJd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX3ZwYXRoX21hcCk7CisJd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX2JpdG1hcCk7CisJd3JpdGVxKCh1NjQpMCwgJnZwX3JlZy0+dGltX3JlbWFwKTsKKworCWlmIChjb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19FTkFCTEUpCisJCXdyaXRlcShWWEdFX0hXX1RJTV9SSU5HX0FTU05fSU5UX05VTSgKKwkJCSh2cF9pZCAqIFZYR0VfSFdfTUFYX0lOVFJfUEVSX1ZQKSArCisJCQlWWEdFX0hXX1ZQQVRIX0lOVFJfUlgpLCAmdnBfcmVnLT50aW1fcmluZ19hc3NuKTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX3BjaV9jZmcpOworCXZhbDY0IHw9IFZYR0VfSFdfVElNX1BDSV9DRkdfQUREX1BBRDsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9wY2lfY2ZnKTsKKworCWlmIChjb25maWctPmZpZm8uZW5hYmxlID09IFZYR0VfSFdfRklGT19FTkFCTEUpIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisKKwkJaWYgKGNvbmZpZy0+dHRpLmJ0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CVElNRVJfVkFMKAorCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQlRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT50dGkuYnRpbWVyX3ZhbCk7CisJCX0KKworCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JJVE1QX0VOOworCisJCWlmIChjb25maWctPnR0aS50aW1lcl9hY19lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT50dGkudGltZXJfYWNfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0FDOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQUM7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudGltZXJfY2lfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX2NpX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSTsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVyYW5nZV9hICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19BKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQSgKKwkJCQkJY29uZmlnLT50dGkudXJhbmdlX2EpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVyYW5nZV9iICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19CKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQigKKwkJCQkJY29uZmlnLT50dGkudXJhbmdlX2IpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVyYW5nZV9jICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19DKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQygKKwkJCQkJY29uZmlnLT50dGkudXJhbmdlX2MpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVlY19hICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0EoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQSgKKwkJCQkJCWNvbmZpZy0+dHRpLnVlY19hKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51ZWNfYiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19CKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0IoCisJCQkJCQljb25maWctPnR0aS51ZWNfYik7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudWVjX2MgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQygweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19DKAorCQkJCQkJY29uZmlnLT50dGkudWVjX2MpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVlY19kICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0QoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfRCgKKwkJCQkJCWNvbmZpZy0+dHRpLnVlY19kKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCisJCWlmIChjb25maWctPnR0aS50aW1lcl9yaV9lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT50dGkudGltZXJfcmlfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1RJTUVSX1JJOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVElNRVJfUkk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkucnRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9WQUwoCisJCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT50dGkucnRpbWVyX3ZhbCk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudXRpbF9zZWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCgweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCgKKwkJCQkJY29uZmlnLT50dGkudXRpbF9zZWwpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLmx0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9MVElNRVJfVkFMKAorCQkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX0xUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+dHRpLmx0aW1lcl92YWwpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCX0KKworCWlmIChjb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19FTkFCTEUpIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisKKwkJaWYgKGNvbmZpZy0+cnRpLmJ0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CVElNRVJfVkFMKAorCQkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+cnRpLmJ0aW1lcl92YWwpOworCQl9CisKKwkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CSVRNUF9FTjsKKworCQlpZiAoY29uZmlnLT5ydGkudGltZXJfYWNfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX2FjX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9BQzsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0FDOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX2NpX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnJ0aS50aW1lcl9jaV9lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQ0k7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51cmFuZ2VfYSAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQSgweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0EoCisJCQkJCWNvbmZpZy0+cnRpLnVyYW5nZV9hKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51cmFuZ2VfYiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQigweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0IoCisJCQkJCWNvbmZpZy0+cnRpLnVyYW5nZV9iKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51cmFuZ2VfYyAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQygweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0MoCisJCQkJCWNvbmZpZy0+cnRpLnVyYW5nZV9jKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCisJCWlmIChjb25maWctPnJ0aS51ZWNfYSAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19BKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0EoCisJCQkJCQljb25maWctPnJ0aS51ZWNfYSk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudWVjX2IgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQigweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19CKAorCQkJCQkJY29uZmlnLT5ydGkudWVjX2IpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVlY19jICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0MoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQygKKwkJCQkJCWNvbmZpZy0+cnRpLnVlY19jKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51ZWNfZCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19EKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0QoCisJCQkJCQljb25maWctPnJ0aS51ZWNfZCk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKworCQlpZiAoY29uZmlnLT5ydGkudGltZXJfcmlfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX3JpX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9USU1FUl9SSTsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1RJTUVSX1JJOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnJ0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfVkFMKAorCQkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+cnRpLnJ0aW1lcl92YWwpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnV0aWxfc2VsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoCisJCQkJCWNvbmZpZy0+cnRpLnV0aWxfc2VsKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS5sdGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fTFRJTUVSX1ZBTCgKKwkJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9MVElNRVJfVkFMKAorCQkJCQljb25maWctPnJ0aS5sdGltZXJfdmFsKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKwl9CisKKwl2YWw2NCA9IDA7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9FSU5UQV0pOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfRUlOVEFdKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0VJTlRBXSk7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9CTUFQXSk7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9CTUFQXSk7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9CTUFQXSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZmluYWwgcGhhc2Ugb2YgaW5pdCB3aGljaCBpbml0aWFsaXplcyB0aGUKKyAqIHJlZ2lzdGVycyBvZiB0aGUgdnBhdGggdXNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGFzc2VkLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJdTMyIHZhbDMyOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCisJaWYgKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKHZwX2lkKSkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX0FWQUlMQUJMRTsKKwkJZ290byBleGl0OworCX0KKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9zd2FwcGVyX3NldCh2cGF0aC0+dnBfcmVnKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9tYWNfY29uZmlndXJlKGhsZGV2LCB2cF9pZCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9ICBfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3RpbV9jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJd3JpdGVxKDAsICZ2cF9yZWctPmdlbmRtYV9pbnQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5ydGRtYV9yZF9vcHRpbWl6YXRpb25fY3RybCk7CisKKwkvKiBHZXQgTVJSUyB2YWx1ZSBmcm9tIGRldmljZSBjb250cm9sICovCisJc3RhdHVzICA9IF9fdnhnZV9od192cGF0aF9wY2lfcmVhZCh2cGF0aCwgMSwgMHg3OCwgJnZhbDMyKTsKKworCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCQl2YWwzMiA9ICh2YWwzMiAmIFZYR0VfSFdfUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMjsKKwkJdmFsNjQgJj0KKwkJICAgIH4oVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9GSUxMX1RIUkVTSCg3KSk7CisJCXZhbDY0IHw9CisJCSAgICBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0ZJTExfVEhSRVNIKHZhbDMyKTsKKworCQl2YWw2NCB8PSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX1dBSVRfRk9SX1NQQUNFOworCX0KKworCXZhbDY0ICY9IH4oVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9BRERSX0JEUlkoNykpOworCXZhbDY0IHw9CisJICAgIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfQUREUl9CRFJZKAorCQkgICAgVlhHRV9IV19NQVhfUEFZTE9BRF9TSVpFXzUxMik7CisKKwl2YWw2NCB8PSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0FERFJfQkRSWV9FTjsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnJ0ZG1hX3JkX29wdGltaXphdGlvbl9jdHJsKTsKKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwX2luaXRpYWxpemUgLSBJbml0aWFsaXplIFZpcnR1YWwgUGF0aCBzdHJ1Y3R1cmUKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgaW5pdGlhbCBwaGFzZSBvZiBpbml0IHdoaWNoIHJlc2V0cyB0aGUgdnBhdGggYW5kCisgKiBpbml0aWFsaXplcyB0aGUgc29mdHdhcmUgc3VwcG9ydCBzdHJ1Y3R1cmVzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCwKKwkJCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVCh2cF9pZCkpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9BVkFJTEFCTEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisKKwl2cGF0aC0+dnBfaWQgPSB2cF9pZDsKKwl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfT1BFTjsKKwl2cGF0aC0+aGxkZXYgPSBobGRldjsKKwl2cGF0aC0+dnBfY29uZmlnID0gY29uZmlnOworCXZwYXRoLT52cF9yZWcgPSBobGRldi0+dnBhdGhfcmVnW3ZwX2lkXTsKKwl2cGF0aC0+dnBtZ210X3JlZyA9IGhsZGV2LT52cG1nbXRfcmVnW3ZwX2lkXTsKKworCV9fdnhnZV9od192cGF0aF9yZXNldChobGRldiwgdnBfaWQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3Jlc2V0X2NoZWNrKHZwYXRoKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQltZW1zZXQodnBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoKSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfbWdtdF9yZWFkKGhsZGV2LCB2cGF0aCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnZwYXRoLT52cGF0aF9oYW5kbGVzKTsKKworCXZwYXRoLT5zd19zdGF0cyA9ICZobGRldi0+c3RhdHMuc3dfZGV2X2luZm9fc3RhdHMudnBhdGhfaW5mb1t2cF9pZF07CisKKwlWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfU0VUKGhsZGV2LT50aW1faW50X21hc2swLAorCQlobGRldi0+dGltX2ludF9tYXNrMSwgdnBfaWQpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUoaGxkZXYsIHZwX2lkKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShobGRldiwgdnBfaWQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZSAtIFRlcm1pbmF0ZSBWaXJ0dWFsIFBhdGggc3RydWN0dXJlCisgKiBUaGlzIHJvdXRpbmUgY2xvc2VzIGFsbCBjaGFubmVscyBpdCBvcGVuZWQgYW5kIGZyZWV1cCBtZW1vcnkKKyAqLwordm9pZAorX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKQorCQlnb3RvIGV4aXQ7CisKKwlWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfUkVTRVQodnBhdGgtPmhsZGV2LT50aW1faW50X21hc2swLAorCQl2cGF0aC0+aGxkZXYtPnRpbV9pbnRfbWFzazEsIHZwYXRoLT52cF9pZCk7CisJaGxkZXYtPnN0YXRzLmh3X2Rldl9pbmZvX3N0YXRzLnZwYXRoX2luZm9bdnBhdGgtPnZwX2lkXSA9IE5VTEw7CisKKwltZW1zZXQodnBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoKSk7CitleGl0OgorCXJldHVybjsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfbXR1X3NldCAtIFNldCBNVFUuCisgKiBTZXQgbmV3IE1UVSB2YWx1ZS4gRXhhbXBsZSwgdG8gdXNlIGp1bWJvIGZyYW1lczoKKyAqIHZ4Z2VfaHdfdnBhdGhfbXR1X3NldChteV9kZXZpY2UsIDk2MDApOworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX210dV9zZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCB1MzIgbmV3X210dSkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwluZXdfbXR1ICs9IFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRTsKKworCWlmICgobmV3X210dSA8IFZYR0VfSFdfTUlOX01UVSkgfHwgKG5ld19tdHUgPiB2cGF0aC0+bWF4X210dSkpCisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfTVRVX1NJWkU7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4oMHgzZmZmKTsKKwl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTihuZXdfbXR1KTsKKworCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCXZwYXRoLT52cF9jb25maWctPm10dSA9IG5ld19tdHUgLSBWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkU7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfb3BlbiAtIE9wZW4gYSB2aXJ0dWFsIHBhdGggb24gYSBnaXZlbiBhZGFwdGVyCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gb3BlbiBhY2Nlc3MgdG8gdmlydHVhbCBwYXRoIG9mIGFuCisgKiBhZGFwdGVyIGZvciBvZmZsb2FkLCBHUk8gb3BlcmF0aW9ucy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zCisgKiBzeW5jaHJvbm91c2x5LgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX29wZW4oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkgICBzdHJ1Y3QgdnhnZV9od192cGF0aF9hdHRyICphdHRyLAorCQkgICBzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKnZwYXRoX2hhbmRsZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1thdHRyLT52cF9pZF07CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfU1RBVEU7CisJCWdvdG8gdnBhdGhfb3Blbl9leGl0MTsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZShobGRldiwgYXR0ci0+dnBfaWQsCisJCQkmaGxkZXYtPmNvbmZpZy52cF9jb25maWdbYXR0ci0+dnBfaWRdKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byB2cGF0aF9vcGVuX2V4aXQxOworCisJdnAgPSAoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKikKKwkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUpKTsKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIHZwYXRoX29wZW5fZXhpdDI7CisJfQorCisJbWVtc2V0KHZwLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUpKTsKKworCXZwLT52cGF0aCA9IHZwYXRoOworCisJaWYgKHZwYXRoLT52cF9jb25maWctPmZpZm8uZW5hYmxlID09IFZYR0VfSFdfRklGT19FTkFCTEUpIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X2ZpZm9fY3JlYXRlKHZwLCAmYXR0ci0+Zmlmb19hdHRyKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byB2cGF0aF9vcGVuX2V4aXQ2OworCX0KKworCWlmICh2cGF0aC0+dnBfY29uZmlnLT5yaW5nLmVuYWJsZSA9PSBWWEdFX0hXX1JJTkdfRU5BQkxFKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od19yaW5nX2NyZWF0ZSh2cCwgJmF0dHItPnJpbmdfYXR0cik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gdnBhdGhfb3Blbl9leGl0NzsKKworCQlfX3Z4Z2VfaHdfdnBhdGhfcHJjX2NvbmZpZ3VyZShobGRldiwgYXR0ci0+dnBfaWQpOworCX0KKworCXZwYXRoLT5maWZvaC0+dHhfaW50cl9udW0gPQorCQkoYXR0ci0+dnBfaWQgKiBWWEdFX0hXX01BWF9JTlRSX1BFUl9WUCkgICsKKwkJCVZYR0VfSFdfVlBBVEhfSU5UUl9UWDsKKworCXZwYXRoLT5zdGF0c19ibG9jayA9IF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWxsb2NhdGUoaGxkZXYsCisJCQkJVlhHRV9IV19CTE9DS19TSVpFKTsKKworCWlmICh2cGF0aC0+c3RhdHNfYmxvY2sgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIHZwYXRoX29wZW5fZXhpdDg7CisJfQorCisJdnBhdGgtPmh3X3N0YXRzID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8gKil2cGF0aC0+CisJCQlzdGF0c19ibG9jay0+bWVtYmxvY2s7CisJbWVtc2V0KHZwYXRoLT5od19zdGF0cywgMCwKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCWhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW2F0dHItPnZwX2lkXSA9CisJCQkJCQl2cGF0aC0+aHdfc3RhdHM7CisKKwl2cGF0aC0+aHdfc3RhdHNfc2F2ID0KKwkJJmhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvX3NhdlthdHRyLT52cF9pZF07CisJbWVtc2V0KHZwYXRoLT5od19zdGF0c19zYXYsIDAsCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJd3JpdGVxKHZwYXRoLT5zdGF0c19ibG9jay0+ZG1hX2FkZHIsICZ2cGF0aC0+dnBfcmVnLT5zdGF0c19jZmcpOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUodnApOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byB2cGF0aF9vcGVuX2V4aXQ4OworCisJbGlzdF9hZGQoJnZwLT5pdGVtLCAmdnBhdGgtPnZwYXRoX2hhbmRsZXMpOworCisJaGxkZXYtPnZwYXRoc19kZXBsb3llZCB8PSB2eGdlX21CSVQodnBhdGgtPnZwX2lkKTsKKworCSp2cGF0aF9oYW5kbGUgPSB2cDsKKworCWF0dHItPmZpZm9fYXR0ci51c2VyZGF0YSA9IHZwYXRoLT5maWZvaDsKKwlhdHRyLT5yaW5nX2F0dHIudXNlcmRhdGEgPSB2cGF0aC0+cmluZ2g7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKKwordnBhdGhfb3Blbl9leGl0ODoKKwlpZiAodnBhdGgtPnJpbmdoICE9IE5VTEwpCisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7Cit2cGF0aF9vcGVuX2V4aXQ3OgorCWlmICh2cGF0aC0+Zmlmb2ggIT0gTlVMTCkKKwkJX192eGdlX2h3X2ZpZm9fZGVsZXRlKHZwKTsKK3ZwYXRoX29wZW5fZXhpdDY6CisJdmZyZWUodnApOwordnBhdGhfb3Blbl9leGl0MjoKKwlfX3Z4Z2VfaHdfdnBfdGVybWluYXRlKGhsZGV2LCBhdHRyLT52cF9pZCk7Cit2cGF0aF9vcGVuX2V4aXQxOgorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX3Bvc3QgLSBDbG9zZSB0aGUgaGFuZGxlIGdvdCBmcm9tIHByZXZpb3VzIHZwYXRoCisgKiAodnBhdGgpIG9wZW4KKyAqIEB2cDogSGFuZGxlIGdvdCBmcm9tIHByZXZpb3VzIHZwYXRoIG9wZW4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xvc2UgYWNjZXNzIHRvIHZpcnR1YWwgcGF0aCBvcGVuZWQKKyAqIGVhcmxpZXIuCisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSBOVUxMOworCXU2NCBuZXdfY291bnQsIHZhbDY0LCB2YWwxNjQ7CisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nOworCisJdnBhdGggPSB2cC0+dnBhdGg7CisJcmluZyA9IHZwYXRoLT5yaW5naDsKKworCW5ld19jb3VudCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeGRtZW1fc2l6ZSk7CisJbmV3X2NvdW50ICY9IDB4MWZmZjsKKwl2YWwxNjQgPSAoVlhHRV9IV19SWERNRU1fU0laRV9QUkNfUlhETUVNX1NJWkUobmV3X2NvdW50KSk7CisKKwl3cml0ZXEoVlhHRV9IV19QUkNfUlhEX0RPT1JCRUxMX05FV19RV19DTlQodmFsMTY0KSwKKwkJJnZwYXRoLT52cF9yZWctPnByY19yeGRfZG9vcmJlbGwpOworCXJlYWRsKCZ2cGF0aC0+dnBfcmVnLT5wcmNfcnhkX2Rvb3JiZWxsKTsKKworCXZhbDE2NCAvPSAyOworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnByY19jZmc2KTsKKwl2YWw2NCA9IFZYR0VfSFdfUFJDX0NGRzZfUlhEX1NQQVQodmFsNjQpOworCXZhbDY0ICY9IDB4MWZmOworCisJLyoKKwkgKiBFYWNoIFJ4RCBpcyBvZiA0IHF3b3JkcworCSAqLworCW5ld19jb3VudCAtPSAodmFsNjQgKyAxKTsKKwl2YWw2NCA9IG1pbih2YWwxNjQsIG5ld19jb3VudCkgLyA0OworCisJcmluZy0+cnhkc19saW1pdCA9IG1pbihyaW5nLT5yeGRzX2xpbWl0LCB2YWw2NCk7CisJaWYgKHJpbmctPnJ4ZHNfbGltaXQgPCA0KQorCQlyaW5nLT5yeGRzX2xpbWl0ID0gNDsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfY2xvc2UgLSBDbG9zZSB0aGUgaGFuZGxlIGdvdCBmcm9tIHByZXZpb3VzIHZwYXRoICh2cGF0aCkgb3BlbgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsb3NlIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb3BlbmVkCisgKiBlYXJsaWVyLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfY2xvc2Uoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCA9IE5VTEw7CisJdTMyIHZwX2lkID0gdnAtPnZwYXRoLT52cF9pZDsKKwl1MzIgaXNfZW1wdHkgPSBUUlVFOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZwYXRoID0gdnAtPnZwYXRoOworCWRldmggPSB2cGF0aC0+aGxkZXY7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byB2cGF0aF9jbG9zZV9leGl0OworCX0KKworCWxpc3RfZGVsKCZ2cC0+aXRlbSk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnZwYXRoLT52cGF0aF9oYW5kbGVzKSkgeworCQlsaXN0X2FkZCgmdnAtPml0ZW0sICZ2cGF0aC0+dnBhdGhfaGFuZGxlcyk7CisJCWlzX2VtcHR5ID0gRkFMU0U7CisJfQorCisJaWYgKCFpc19lbXB0eSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gdnBhdGhfY2xvc2VfZXhpdDsKKwl9CisKKwlkZXZoLT52cGF0aHNfZGVwbG95ZWQgJj0gfnZ4Z2VfbUJJVCh2cF9pZCk7CisKKwlpZiAodnBhdGgtPnJpbmdoICE9IE5VTEwpCisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisKKwlpZiAodnBhdGgtPmZpZm9oICE9IE5VTEwpCisJCV9fdnhnZV9od19maWZvX2RlbGV0ZSh2cCk7CisKKwlpZiAodnBhdGgtPnN0YXRzX2Jsb2NrICE9IE5VTEwpCisJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfZnJlZShkZXZoLCB2cGF0aC0+c3RhdHNfYmxvY2spOworCisJdmZyZWUodnApOworCisJX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShkZXZoLCB2cF9pZCk7CisKKwl2cGF0aC0+dnBfb3BlbiA9IFZYR0VfSFdfVlBfTk9UX09QRU47CisKK3ZwYXRoX2Nsb3NlX2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfcmVzZXQgLSBSZXNldHMgdnBhdGgKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXF1ZXN0IGEgcmVzZXQgb2YgdnBhdGgKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwl1MzIgdnBfaWQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSB2cC0+dnBhdGg7CisKKwl2cF9pZCA9IHZwYXRoLT52cF9pZDsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3Jlc2V0KHZwYXRoLT5obGRldiwgdnBfaWQpOworCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykKKwkJdnBhdGgtPnN3X3N0YXRzLT5zb2Z0X3Jlc2V0X2NudCsrOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQgLSBQb2xsIGZvciByZXNldCBjb21wbGV0ZSBhbmQgcmUtaW5pdGlhbGl6ZS4KKyAqIFRoaXMgZnVuY3Rpb24gcG9sbCdzIGZvciB0aGUgdnBhdGggcmVzZXQgY29tcGxldGlvbiBhbmQgcmUgaW5pdGlhbGl6ZXMKKyAqIHRoZSB2cGF0aC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJdTMyIHZwX2lkOworCisJdnBfaWQgPSB2cC0+dnBhdGgtPnZwX2lkOworCXZwYXRoID0gdnAtPnZwYXRoOworCWhsZGV2ID0gdnBhdGgtPmhsZGV2OworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2sodnBhdGgpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N3X3Jlc2V0KGhsZGV2LCB2cF9pZCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfaW5pdGlhbGl6ZShobGRldiwgdnBfaWQpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJaWYgKHZwYXRoLT5yaW5naCAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfdnBhdGhfcHJjX2NvbmZpZ3VyZShobGRldiwgdnBfaWQpOworCisJbWVtc2V0KHZwYXRoLT5od19zdGF0cywgMCwKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCW1lbXNldCh2cGF0aC0+aHdfc3RhdHNfc2F2LCAwLAorCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJd3JpdGVxKHZwYXRoLT5zdGF0c19ibG9jay0+ZG1hX2FkZHIsCisJCSZ2cGF0aC0+dnBfcmVnLT5zdGF0c19jZmcpOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9zdGF0c19lbmFibGUodnApOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2VuYWJsZSAtIEVuYWJsZSB2cGF0aC4KKyAqIFRoaXMgcm91dGluZSBjbGVhcnMgdGhlIHZwYXRoIHJlc2V0IHRoZXJlYnkgZW5hYmxpbmcgYSB2cGF0aAorICogdG8gc3RhcnQgZm9yd2FyZGluZyBmcmFtZXMgYW5kIGdlbmVyYXRpbmcgaW50ZXJydXB0cy4KKyAqLwordm9pZAordnhnZV9od192cGF0aF9lbmFibGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwl1NjQgdmFsNjQ7CisKKwlobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisKKwl2YWw2NCA9IFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHMV9DTFJfVlBBVEhfUkVTRVQoCisJCTEgPDwgKDE2IC0gdnAtPnZwYXRoLT52cF9pZCkpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwKKwkJJmhsZGV2LT5jb21tb25fcmVnLT5jbW5fcnN0aGRscl9jZmcxKTsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlIC0gRW5hYmxlIHZwYXRoIGgvd3N0YXRpc3RpY3MuCisgKiBFbmFibGUgdGhlIERNQSB2cGF0aCBzdGF0aXN0aWNzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIHRvIHJlLWVuYWJsZQorICogdGhlIGFkYXB0ZXIgdG8gdXBkYXRlIHN0YXRzIGludG8gdGhlIGhvc3QgbWVtb3J5CisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHZwYXRoLT5od19zdGF0c19zYXYsIHZwYXRoLT5od19zdGF0cywKKwkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KHZwYXRoLCB2cGF0aC0+aHdfc3RhdHMpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2VzcyAtIEdldCB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBnaXZlbiBsb2NhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Zmc2V0IGFuZCBwZXJmb3JtIGFuIG9wZXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJICAgICB1MzIgb3BlcmF0aW9uLCB1MzIgb2Zmc2V0LCB1NjQgKnN0YXQpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gdnBhdGhfc3RhdHNfYWNjZXNzX2V4aXQ7CisJfQorCisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXZhbDY0ID0gIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX09QKG9wZXJhdGlvbikgfAorCQkgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfU1RST0JFIHwKKwkJIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX09GRlNFVF9TRUwob2Zmc2V0KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwX3JlZy0+eG1hY19zdGF0c19hY2Nlc3NfY21kLAorCQkJCVZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX1NUUk9CRSwKKwkJCQl2cGF0aC0+aGxkZXYtPmNvbmZpZy5kZXZpY2VfcG9sbF9taWxsaXMpOworCisJaWYgKChzdGF0dXMgPT0gVlhHRV9IV19PSykgJiYgKG9wZXJhdGlvbiA9PSBWWEdFX0hXX1NUQVRTX09QX1JFQUQpKQorCQkqc3RhdCA9IHJlYWRxKCZ2cF9yZWctPnhtYWNfc3RhdHNfYWNjZXNzX2RhdGEpOworCWVsc2UKKwkJKnN0YXQgPSAwOworCit2cGF0aF9zdGF0c19hY2Nlc3NfZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0IC0gR2V0IHRoZSBUWCBTdGF0aXN0aWNzIG9mIGEgdnBhdGgKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMgKnZwYXRoX3R4X3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJaW50IGk7CisJdTMyIG9mZnNldCA9IFZYR0VfSFdfU1RBVFNfVlBBVEhfVFhfT0ZGU0VUOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gKHU2NCAqKSB2cGF0aF90eF9zdGF0czsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzKSAvIDg7IGkrKykgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKHZwYXRoLAorCQkJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsCisJCQkJCW9mZnNldCwgdmFsNjQpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJCW9mZnNldCsrOworCQl2YWw2NCsrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldCAtIEdldCB0aGUgUlggU3RhdGlzdGljcyBvZiBhIHZwYXRoCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3J4X3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgKnZwYXRoX3J4X3N0YXRzKQoreworCXU2NCAqdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCWludCBpOworCXUzMiBvZmZzZXQgPSBWWEdFX0hXX1NUQVRTX1ZQQVRIX1JYX09GRlNFVDsKKwl2YWw2NCA9ICh1NjQgKikgdnBhdGhfcnhfc3RhdHM7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMpIC8gODsgaSsrKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsCisJCQkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwKKwkJCQkJb2Zmc2V0ID4+IDMsIHZhbDY0KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCisJCW9mZnNldCArPSA4OworCQl2YWw2NCsrOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQgLSBHZXQgdGhlIHZwYXRoIGh3IHN0YXRpc3RpY3MuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMwKTsKKwlod19zdGF0cy0+aW5pX251bV9td3Jfc2VudCA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzBfR0VUX0lOSV9OVU1fTVdSX1NFTlQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czEpOworCWh3X3N0YXRzLT5pbmlfbnVtX21yZF9zZW50ID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMV9HRVRfSU5JX05VTV9NUkRfU0VOVCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMik7CisJaHdfc3RhdHMtPmluaV9udW1fY3BsX3JjdmQgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMyX0dFVF9JTklfTlVNX0NQTF9SQ1ZEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMzKTsKKwlod19zdGF0cy0+aW5pX251bV9td3JfYnl0ZV9zZW50ID0KKwkJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzNfR0VUX0lOSV9OVU1fTVdSX0JZVEVfU0VOVCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzNCk7CisJaHdfc3RhdHMtPmluaV9udW1fY3BsX2J5dGVfcmN2ZCA9CisJCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM0X0dFVF9JTklfTlVNX0NQTF9CWVRFX1JDVkQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czUpOworCWh3X3N0YXRzLT53cmNyZHRhcmJfeG9mZiA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzVfR0VUX1dSQ1JEVEFSQl9YT0ZGKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHM2KTsKKwlod19zdGF0cy0+cmRjcmR0YXJiX3hvZmYgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM2X0dFVF9SRENSRFRBUkJfWE9GRih2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MDEpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDAgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMCgKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDAxKTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQxID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDEoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQyMyk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MiA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQyKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MDEpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDMgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMygKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDQpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDQgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDRfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0KAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50NSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50NSA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDUoCisJCXZhbDY0KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCh2cGF0aCwgJmh3X3N0YXRzLT50eF9zdGF0cyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfeG1hY19yeF9zdGF0c19nZXQodnBhdGgsICZod19zdGF0cy0+cnhfc3RhdHMpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRCgKKwkJVlhHRV9IV19TVEFUU19WUEFUSF9QUk9HX0VWRU5UX1ZOVU0wX09GRlNFVCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMCA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTAodmFsNjQpOworCisJaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTEgPQorCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0xKHZhbDY0KTsKKworCVZYR0VfSFdfVlBBVEhfU1RBVFNfUElPX1JFQUQoCisJCVZYR0VfSFdfU1RBVFNfVlBBVEhfUFJPR19FVkVOVF9WTlVNMl9PRkZTRVQpOworCisJaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTIgPQorCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yKHZhbDY0KTsKKworCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0zID0KKwkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMyh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4X211bHRpX2Nhc3Rfc3RhdHMpOworCWh3X3N0YXRzLT5yeF9tdWx0aV9jYXN0X2ZyYW1lX2Rpc2NhcmQgPQorCQkodTE2KVZYR0VfSFdfUlhfTVVMVElfQ0FTVF9TVEFUU19HRVRfRlJBTUVfRElTQ0FSRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4X2ZybV90cmFuc2ZlcnJlZCk7CisJaHdfc3RhdHMtPnJ4X2ZybV90cmFuc2ZlcnJlZCA9CisJCSh1MzIpVlhHRV9IV19SWF9GUk1fVFJBTlNGRVJSRURfR0VUX1JYX0ZSTV9UUkFOU0ZFUlJFRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4ZF9yZXR1cm5lZCk7CisJaHdfc3RhdHMtPnJ4ZF9yZXR1cm5lZCA9CisJCSh1MTYpVlhHRV9IV19SWERfUkVUVVJORURfR0VUX1JYRF9SRVRVUk5FRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmRiZ19zdGF0c19yeF9tcGEpOworCWh3X3N0YXRzLT5yeF9tcGFfbGVuX2ZhaWxfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9MRU5fRkFJTF9GUk1TKHZhbDY0KTsKKwlod19zdGF0cy0+cnhfbXBhX21ya19mYWlsX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfTVJLX0ZBSUxfRlJNUyh2YWw2NCk7CisJaHdfc3RhdHMtPnJ4X21wYV9jcmNfZmFpbF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0NSQ19GQUlMX0ZSTVModmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5kYmdfc3RhdHNfcnhfZmF1KTsKKwlod19zdGF0cy0+cnhfcGVybWl0dGVkX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfUEVSTUlUVEVEX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF92cF9yZXNldF9kaXNjYXJkZWRfZnJtcyA9CisJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKHZhbDY0KTsKKwlod19zdGF0cy0+cnhfd29sX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfV09MX0ZSTVModmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtcyk7CisJaHdfc3RhdHMtPnR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zID0KKwkodTE2KVZYR0VfSFdfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVNfR0VUX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKAorCQl2YWw2NCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZSAtIENyZWF0ZSBibG9jayBwb29sCisgKi8KKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2Jsb2NrcG9vbF9jcmVhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJICAgc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgKmJsb2NrcG9vbCwKKwkJCSAgIHUzMiBwb29sX3NpemUsCisJCQkgICB1MzIgcG9vbF9tYXgpCit7CisJdTMyIGk7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwl2b2lkICptZW1ibG9jazsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXN0cnVjdCBwY2lfZGV2ICpkbWFfaGFuZGxlOworCXN0cnVjdCBwY2lfZGV2ICphY2NfaGFuZGxlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmIChibG9ja3Bvb2wgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCX0KKworCWJsb2NrcG9vbC0+aGxkZXYgPSBobGRldjsKKwlibG9ja3Bvb2wtPmJsb2NrX3NpemUgPSBWWEdFX0hXX0JMT0NLX1NJWkU7CisJYmxvY2twb29sLT5wb29sX3NpemUgPSAwOworCWJsb2NrcG9vbC0+cG9vbF9tYXggPSBwb29sX21heDsKKwlibG9ja3Bvb2wtPnJlcV9vdXQgPSAwOworCisJSU5JVF9MSVNUX0hFQUQoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IHBvb2xfc2l6ZSArIHBvb2xfbWF4OyBpKyspIHsKKwkJZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChlbnRyeSA9PSBOVUxMKSB7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBvb2xfc2l6ZTsgaSsrKSB7CisKKwkJbWVtYmxvY2sgPSB2eGdlX29zX2RtYV9tYWxsb2MoCisJCQkJaGxkZXYtPnBkZXYsCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLAorCQkJCSZkbWFfaGFuZGxlLAorCQkJCSZhY2NfaGFuZGxlKTsKKworCQlpZiAobWVtYmxvY2sgPT0gTlVMTCkgeworCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KGJsb2NrcG9vbCk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJCX0KKworCQlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGhsZGV2LT5wZGV2LCBtZW1ibG9jaywKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwkJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihobGRldi0+cGRldiwKKwkJCQlkbWFfYWRkcikpKSB7CisKKwkJCXZ4Z2Vfb3NfZG1hX2ZyZWUoaGxkZXYtPnBkZXYsIG1lbWJsb2NrLCAmYWNjX2hhbmRsZSk7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCisJCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCwKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJCWl0ZW0pOworCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJZW50cnkgPQorCQkJICAgIGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCQkJZW50cnktPmxlbmd0aCA9IFZYR0VfSFdfQkxPQ0tfU0laRTsKKwkJCWVudHJ5LT5tZW1ibG9jayA9IG1lbWJsb2NrOworCQkJZW50cnktPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJCQllbnRyeS0+YWNjX2hhbmRsZSA9IGFjY19oYW5kbGU7CisJCQllbnRyeS0+ZG1hX2hhbmRsZSA9IGRtYV9oYW5kbGU7CisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJCSAgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7CisJCX0gZWxzZSB7CisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koYmxvY2twb29sKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwkJfQorCX0KKworYmxvY2twb29sX2NyZWF0ZV9leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3kgLSBEZWFsbG9jYXRlcyB0aGUgYmxvY2sgcG9vbAorICovCisKK3ZvaWQgX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICpibG9ja3Bvb2wpCit7CisKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CisJdTE2IHJldDsKKworCWlmIChibG9ja3Bvb2wgPT0gTlVMTCkgeworCQlyZXQgPSAxOworCQlnb3RvIGV4aXQ7CisJfQorCisJaGxkZXYgPSBibG9ja3Bvb2wtPmhsZGV2OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkgeworCisJCXBjaV91bm1hcF9zaW5nbGUoaGxkZXYtPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmRtYV9hZGRyLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5sZW5ndGgsCisJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCXZ4Z2Vfb3NfZG1hX2ZyZWUoaGxkZXYtPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPm1lbWJsb2NrLAorCQkJJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikgcCktPmFjY19oYW5kbGUpOworCisJCWxpc3RfZGVsKAorCQkJJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+aXRlbSk7CisJCWtmcmVlKHApOworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpIHsKKwkJbGlzdF9kZWwoCisJCQkmKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5pdGVtKTsKKwkJa2ZyZWUoKHZvaWQgKilwKTsKKwl9CisJcmV0ID0gMDsKK2V4aXQ6CisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfYWRkIC0gUmVxdWVzdCBhZGRpdGlvbmFsIGJsb2NrcworICovCitzdGF0aWMKK3ZvaWQgX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfYWRkKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICpibG9ja3Bvb2wpCit7CisJdTMyIG5yZXEgPSAwLCBpOworCisJaWYgKChibG9ja3Bvb2wtPnBvb2xfc2l6ZSAgKyAgYmxvY2twb29sLT5yZXFfb3V0KSA8CisJCVZYR0VfSFdfTUlOX0RNQV9CTE9DS19QT09MX1NJWkUpIHsKKwkJbnJlcSA9IFZYR0VfSFdfSU5DUl9ETUFfQkxPQ0tfUE9PTF9TSVpFOworCQlibG9ja3Bvb2wtPnJlcV9vdXQgKz0gbnJlcTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJlcTsgaSsrKQorCQl2eGdlX29zX2RtYV9tYWxsb2NfYXN5bmMoCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopYmxvY2twb29sLT5obGRldiktPnBkZXYsCisJCQlibG9ja3Bvb2wtPmhsZGV2LCBWWEdFX0hXX0JMT0NLX1NJWkUpOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlIC0gRnJlZSBhZGRpdGlvbmFsIGJsb2NrcworICovCitzdGF0aWMKK3ZvaWQgX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICpibG9ja3Bvb2wpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSB7CisKKwkJaWYgKGJsb2NrcG9vbC0+cG9vbF9zaXplIDwgYmxvY2twb29sLT5wb29sX21heCkKKwkJCWJyZWFrOworCisJCXBjaV91bm1hcF9zaW5nbGUoCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopYmxvY2twb29sLT5obGRldiktPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmRtYV9hZGRyLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5sZW5ndGgsCisJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCXZ4Z2Vfb3NfZG1hX2ZyZWUoCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopYmxvY2twb29sLT5obGRldiktPnBkZXYsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPm1lbWJsb2NrLAorCQkJJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+YWNjX2hhbmRsZSk7CisKKwkJbGlzdF9kZWwoJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+aXRlbSk7CisKKwkJbGlzdF9hZGQocCwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCisJfQorfQorCisvKgorICogdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWRkIC0gY2FsbGJhY2sgZm9yIHZ4Z2Vfb3NfZG1hX21hbGxvY19hc3luYworICogQWRkcyBhIGJsb2NrIHRvIGJsb2NrIHBvb2wKKyAqLwordm9pZCB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCXZvaWQgKmJsb2NrX2FkZHIsCisJCQl1MzIgbGVuZ3RoLAorCQkJc3RydWN0IHBjaV9kZXYgKmRtYV9oLAorCQkJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGUpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgICplbnRyeSA9IE5VTEw7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdTMyIHJlcV9vdXQ7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChibG9ja19hZGRyID09IE5VTEwpIHsKKwkJYmxvY2twb29sLT5yZXFfb3V0LS07CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZGV2aC0+cGRldiwgYmxvY2tfYWRkciwgbGVuZ3RoLAorCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldmgtPnBkZXYsIGRtYV9hZGRyKSkpIHsKKworCQl2eGdlX29zX2RtYV9mcmVlKGRldmgtPnBkZXYsIGJsb2NrX2FkZHIsICZhY2NfaGFuZGxlKTsKKwkJYmxvY2twb29sLT5yZXFfb3V0LS07CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJZ290byBleGl0OworCX0KKworCisJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCisJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCwKKwkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQlpdGVtKTsKKworCWlmIChlbnRyeSA9PSBOVUxMKQorCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJdm1hbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpKTsKKwllbHNlCisJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisKKwlpZiAoZW50cnkgIT0gTlVMTCkgeworCQllbnRyeS0+bGVuZ3RoID0gbGVuZ3RoOworCQllbnRyeS0+bWVtYmxvY2sgPSBibG9ja19hZGRyOworCQllbnRyeS0+ZG1hX2FkZHIgPSBkbWFfYWRkcjsKKwkJZW50cnktPmFjY19oYW5kbGUgPSBhY2NfaGFuZGxlOworCQllbnRyeS0+ZG1hX2hhbmRsZSA9IGRtYV9oOworCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7CisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJfSBlbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisKKwlibG9ja3Bvb2wtPnJlcV9vdXQtLTsKKworCXJlcV9vdXQgPSBibG9ja3Bvb2wtPnJlcV9vdXQ7CitleGl0OgorCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jIC0gQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwb29sCisgKiBBbGxvY2F0ZXMgYSBibG9jayBvZiBtZW1vcnkgb2YgZ2l2ZW4gc2l6ZSwgZWl0aGVyIGZyb20gYmxvY2sgcG9vbAorICogb3IgYnkgY2FsbGluZyB2eGdlX29zX2RtYV9tYWxsb2MoKQorICovCit2b2lkICoKK19fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgc2l6ZSwKKwkJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCXZvaWQgKm1lbWJsb2NrID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChzaXplICE9IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCisJCW1lbWJsb2NrID0gdnhnZV9vc19kbWFfbWFsbG9jKGRldmgtPnBkZXYsIHNpemUsCisJCQkJCQkmZG1hX29iamVjdC0+aGFuZGxlLAorCQkJCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOworCisJCWlmIChtZW1ibG9jayA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBleGl0OworCQl9CisKKwkJZG1hX29iamVjdC0+YWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldmgtPnBkZXYsIG1lbWJsb2NrLCBzaXplLAorCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2aC0+cGRldiwKKwkJCQlkbWFfb2JqZWN0LT5hZGRyKSkpIHsKKwkJCXZ4Z2Vfb3NfZG1hX2ZyZWUoZGV2aC0+cGRldiwgbWVtYmxvY2ssCisJCQkJJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJfSBlbHNlIHsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgIT0gTlVMTCkgeworCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKwkJCWRtYV9vYmplY3QtPmFkZHIgPSBlbnRyeS0+ZG1hX2FkZHI7CisJCQlkbWFfb2JqZWN0LT5oYW5kbGUgPSBlbnRyeS0+ZG1hX2hhbmRsZTsKKwkJCWRtYV9vYmplY3QtPmFjY19oYW5kbGUgPSBlbnRyeS0+YWNjX2hhbmRsZTsKKwkJCW1lbWJsb2NrID0gZW50cnktPm1lbWJsb2NrOworCisJCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sCisJCQkJJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplLS07CisJCX0KKworCQlpZiAobWVtYmxvY2sgIT0gTlVMTCkKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOworCX0KK2V4aXQ6CisJcmV0dXJuIG1lbWJsb2NrOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9mcmVlIC0gRnJlZXMgdGhlIG1lbW9yeSBhbGxjb2F0ZWQgd2l0aAorCQkJCV9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jCisgKi8KK3ZvaWQKK19fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCXZvaWQgKm1lbWJsb2NrLCB1MzIgc2l6ZSwKKwkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7CisKKwlpZiAoc2l6ZSAhPSBibG9ja3Bvb2wtPmJsb2NrX3NpemUpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXZoLT5wZGV2LCBkbWFfb2JqZWN0LT5hZGRyLCBzaXplLAorCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJdnhnZV9vc19kbWFfZnJlZShkZXZoLT5wZGV2LCBtZW1ibG9jaywgJmRtYV9vYmplY3QtPmFjY19oYW5kbGUpOworCX0gZWxzZSB7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCkpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0LAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQkJaXRlbSk7CisKKwkJaWYgKGVudHJ5ID09IE5VTEwpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCXZtYWxsb2Moc2l6ZW9mKAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSkpOworCQllbHNlCisJCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCisJCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCQllbnRyeS0+bGVuZ3RoID0gc2l6ZTsKKwkJCWVudHJ5LT5tZW1ibG9jayA9IG1lbWJsb2NrOworCQkJZW50cnktPmRtYV9hZGRyID0gZG1hX29iamVjdC0+YWRkcjsKKwkJCWVudHJ5LT5hY2NfaGFuZGxlID0gZG1hX29iamVjdC0+YWNjX2hhbmRsZTsKKwkJCWVudHJ5LT5kbWFfaGFuZGxlID0gZG1hX29iamVjdC0+aGFuZGxlOworCQkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLAorCQkJCQkmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCQkJYmxvY2twb29sLT5wb29sX3NpemUrKzsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJCX0gZWxzZQorCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKworCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19yZW1vdmUoYmxvY2twb29sKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlIC0gQWxsb2NhdGVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbCBvciBmcm9tIHRoZSBzeXN0ZW0KKyAqLworc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKgorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIHNpemUpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKHNpemUgPT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0LAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQkJaXRlbSk7CisKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCQl9CisJfQorCisJaWYgKGVudHJ5ICE9IE5VTEwpCisJCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChibG9ja3Bvb2wpOworCisJcmV0dXJuIGVudHJ5OworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlIC0gRnJlZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKKyAqIEBkZXZoOiBIYWwgZGV2aWNlCisgKiBAZW50cnk6IEVudHJ5IG9mIGJsb2NrIHRvIGJlIGZyZWVkCisgKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbAorICovCit2b2lkCitfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2ZyZWUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChlbnRyeS0+bGVuZ3RoID09IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7CisJfQorCisJX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlKGJsb2NrcG9vbCk7CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiZGY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtMCwwICsxLDIyNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLWNvbmZpZy5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfQ09ORklHX0gKKyNkZWZpbmUgVlhHRV9DT05GSUdfSAorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2lmbmRlZiBWWEdFX0NBQ0hFX0xJTkVfU0laRQorI2RlZmluZSBWWEdFX0NBQ0hFX0xJTkVfU0laRSAxMjgKKyNlbmRpZgorCisjZGVmaW5lIHZ4Z2Vfb3NfdmFwcmludGYobGV2ZWwsIG1hc2ssIGZtdCwgLi4uKSB7IFwKKwljaGFyIGJ1ZmZbMjU1XTsgXAorCQlzbnByaW50ZihidWZmLCAyNTUsIGZtdCwgX19WQV9BUkdTX18pOyBcCisJCXByaW50ayhidWZmKTsgXAorCQlwcmludGsoIlxuIik7IFwKK30KKworI2lmbmRlZiBWWEdFX0FMSUdOCisjZGVmaW5lIFZYR0VfQUxJR04oYWRycywgc2l6ZSkgXAorCSgoKHNpemUpIC0gKCgodTY0KWFkcnMpICYgKChzaXplKS0xKSkpICYgKChzaXplKS0xKSkKKyNlbmRpZgorCisjZGVmaW5lIFZYR0VfSFdfTUlOX01UVQkJCQk2OAorI2RlZmluZSBWWEdFX0hXX01BWF9NVFUJCQkJOTYwMAorI2RlZmluZSBWWEdFX0hXX0RFRkFVTFRfTVRVCQkJMTUwMAorCisjaWZkZWYgVlhHRV9ERUJVR19BU1NFUlQKKworLyoqCisgKiB2eGdlX2Fzc2VydAorICogQHRlc3Q6IEMtY29uZGl0aW9uIHRvIGNoZWNrCisgKiBAZm10OiBwcmludGYgbGlrZSBmb3JtYXQgc3RyaW5nCisgKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRyYWRpdGlvbmFsIGFzc2VydC4gQnkgZGVmYXVsdCBhc3NlcnRpb25zCisgKiBhcmUgZW5hYmxlZC4gSXQgY2FuIGJlIGRpc2FibGVkIGJ5IHVuZGVmaW5pbmcgVlhHRV9ERUJVR19BU1NFUlQgbWFjcm8gaW4KKyAqIGNvbXBpbGF0aW9uCisgKiB0aW1lLgorICovCisjZGVmaW5lIHZ4Z2VfYXNzZXJ0KHRlc3QpIHsgXAorCWlmICghKHRlc3QpKSBcCisJCXZ4Z2Vfb3NfYnVnKCJiYWQgY29uZDogIiN0ZXN0IiBhdCAlczolZFxuIiwgXAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7IH0KKyNlbHNlCisjZGVmaW5lIHZ4Z2VfYXNzZXJ0KHRlc3QpCisjZW5kaWYgLyogZW5kIG9mIFZYR0VfREVCVUdfQVNTRVJUICovCisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfZGVidWdfbGV2ZWwKKyAqIEBWWEdFX05PTkU6IGRlYnVnIGRpc2FibGVkCisgKiBAVlhHRV9FUlI6IGFsbCBlcnJvcnMgZ29pbmcgdG8gYmUgbG9nZ2VkIG91dAorICogQFZYR0VfVFJBQ0U6IGFsbCBlcnJvcnMgcGx1cyBhbGwga2luZCBvZiB2ZXJib3NlIHRyYWNpbmcgcHJpbnQgb3V0cworICogICAgICAgICAgICAgICAgIGdvaW5nIHRvIGJlIGxvZ2dlZCBvdXQuIFZlcnkgbm9pc3kuCisgKgorICogVGhpcyBlbnVtZXJhdGlvbiBnb2luZyB0byBiZSB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudAorICogZGVidWcgbGV2ZWxzIGR1cmluZyBydW50aW1lIGlmIERFQlVHIG1hY3JvIGRlZmluZWQgZHVyaW5nCisgKiBjb21waWxhdGlvbi4gSWYgREVCVUcgbWFjcm8gbm90IGRlZmluZWQgdGhhbiBjb2RlIHdpbGwgYmUKKyAqIGNvbXBpbGVkIG91dC4KKyAqLworZW51bSB2eGdlX2RlYnVnX2xldmVsIHsKKwlWWEdFX05PTkUgICA9IDAsCisJVlhHRV9UUkFDRSAgPSAxLAorCVZYR0VfRVJSICAgID0gMgorfTsKKworI2RlZmluZSBOVUxMX1ZQSUQJCQkJCTB4RkZGRkZGRkYKKyNpZmRlZiBDT05GSUdfVlhHRV9ERUJVR19UUkFDRV9BTEwKKyNkZWZpbmUgVlhHRV9ERUJVR19NT0RVTEVfTUFTSyAgMHhmZmZmZmZmZgorI2RlZmluZSBWWEdFX0RFQlVHX1RSQUNFX01BU0sgICAweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfREVCVUdfRVJSX01BU0sgICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgVlhHRV9ERUJVR19NQVNLICAgICAgICAgMHgwMDAwMDFmZgorI2Vsc2UKKyNkZWZpbmUgVlhHRV9ERUJVR19NT0RVTEVfTUFTSyAgMHgyMDAwMDAwMAorI2RlZmluZSBWWEdFX0RFQlVHX1RSQUNFX01BU0sgICAweDIwMDAwMDAwCisjZGVmaW5lIFZYR0VfREVCVUdfRVJSX01BU0sgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlhHRV9ERUJVR19NQVNLICAgICAgICAgMHgwMDAwMDAwMQorI2VuZGlmCisKKy8qCisgKiBAVlhHRV9DT01QT05FTlRfTEw6IGRvIGRlYnVnIGZvciB2eGdlIGxpbmsgbGF5ZXIgbW9kdWxlCisgKiBAVlhHRV9DT01QT05FTlRfQUxMOiBhY3RpdmF0ZSBkZWJ1ZyBmb3IgYWxsIG1vZHVsZXMgd2l0aCBubyBleGNlcHRpb25zCisgKgorICogVGhpcyBlbnVtZXJhdGlvbiBnb2luZyB0byBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIG1vZHVsZXMKKyAqIG9yIGxpYnJhcmllcyBkdXJpbmcgY29tcGlsYXRpb24gYW5kIHJ1bnRpbWUuICBNYWtlZmlsZSBtdXN0IGRlY2xhcmUKKyAqIFZYR0VfREVCVUdfTU9EVUxFX01BU0sgbWFjcm8gYW5kIHNldCBpdCB0byBwcm9wZXIgdmFsdWUuCisgKi8KKyNkZWZpbmUJVlhHRV9DT01QT05FTlRfTEwJCQkJMHgyMDAwMDAwMAorI2RlZmluZQlWWEdFX0NPTVBPTkVOVF9BTEwJCQkJMHhmZmZmZmZmZgorCisjZGVmaW5lIFZYR0VfSFdfQkFTRV9JTkYJMTAwCisjZGVmaW5lIFZYR0VfSFdfQkFTRV9FUlIJMjAwCisjZGVmaW5lIFZYR0VfSFdfQkFTRV9CQURDRkcJMzAwCisKK2VudW0gdnhnZV9od19zdGF0dXMgeworCVZYR0VfSFdfT0sJCQkJICA9IDAsCisJVlhHRV9IV19GQUlMCQkJCSAgPSAxLAorCVZYR0VfSFdfUEVORElORwkJCQkgID0gMiwKKwlWWEdFX0hXX0NPTVBMRVRJT05TX1JFTUFJTgkJICA9IDMsCisKKwlWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUyA9IFZYR0VfSFdfQkFTRV9JTkYgKyAxLAorCVZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUwkJICA9IFZYR0VfSFdfQkFTRV9JTkYgKyAyLAorCisJVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEUJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMSwKKwlWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDIsCisJVlhHRV9IV19FUlJfVlBBVEhfTk9UX0FWQUlMQUJMRQkgIAkgID0gVlhHRV9IV19CQVNFX0VSUiArIDMsCisJVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU4JCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgNCwKKwlWWEdFX0hXX0VSUl9XUk9OR19JUlEJCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDUsCisJVlhHRV9IV19FUlJfU1dBUFBFUl9DVFJMCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDYsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9NVFVfU0laRQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA3LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVgJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgOCwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX1RZUEUJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgOSwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxMCwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxMSwKKwlWWEdFX0hXX0VSUl9WRVJTSU9OX0NPTkZMSUNUCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDEyLAorCVZYR0VfSFdfRVJSX0lOVkFMSURfUENJX0lORk8JCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTMsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9UQ09ERSAJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTQsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9CTE9DS19TSVpFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE1LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfU1RBVEUJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTYsCisJVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTcsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9QT1JUIAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxOCwKKwlWWEdFX0hXX0VSUl9GSUZPCQkgCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTksCisJVlhHRV9IV19FUlJfVlBBVEgJCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDIwLAorCVZYR0VfSFdfRVJSX0NSSVRJQ0FMCQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAyMSwKKwlWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRSAJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMjIsCisKKwlWWEdFX0hXX0JBRENGR19SSU5HX0lORElDQVRFX01BWF9QS1RTCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgMSwKKwlWWEdFX0hXX0JBRENGR19GSUZPX0JMT0NLUwkJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyAyLAorCVZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01UVQkJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyAzLAorCVZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBRwkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDQsCisJVlhHRV9IV19CQURDRkdfVlBBVEhfTUlOX0JBTkRXSURUSAkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDUsCisJVlhHRV9IV19CQURDRkdfSU5UUl9NT0RFCQkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDYsCisJVlhHRV9IV19CQURDRkdfUlRTX01BQ19FTgkJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyA3LAorCisJVlhHRV9IV19FT0ZfVFJBQ0VfQlVGCQkJICA9IC0xCit9OworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlIC0gTGluayBzdGF0ZSBlbnVtZXJhdGlvbi4KKyAqIEBWWEdFX0hXX0xJTktfTk9ORTogSW52YWxpZCBsaW5rIHN0YXRlLgorICogQFZYR0VfSFdfTElOS19ET1dOOiBMaW5rIGlzIGRvd24uCisgKiBAVlhHRV9IV19MSU5LX1VQOiBMaW5rIGlzIHVwLgorICoKKyAqLworZW51bSB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlIHsKKwlWWEdFX0hXX0xJTktfTk9ORSwKKwlWWEdFX0hXX0xJTktfRE9XTiwKKwlWWEdFX0hXX0xJTktfVVAKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgLSBEYXRlIEZvcm1hdAorICogQGRheTogRGF5CisgKiBAbW9udGg6IE1vbnRoCisgKiBAeWVhcjogWWVhcgorICogQGRhdGU6IERhdGUgaW4gc3RyaW5nIGZvcm1hdAorICoKKyAqIFN0cnVjdHVyZSBmb3IgcmV0dXJuaW5nIGRhdGUKKyAqLworCisjZGVmaW5lIFZYR0VfSFdfRldfU1RSTEVOCTMyCitzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSB7CisJdTMyICAgICBkYXk7CisJdTMyICAgICBtb250aDsKKwl1MzIgICAgIHllYXI7CisJY2hhciAgICBkYXRlW1ZYR0VfSFdfRldfU1RSTEVOXTsKK307CisKK3N0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uIHsKKwl1MzIgICAgIG1ham9yOworCXUzMiAgICAgbWlub3I7CisJdTMyICAgICBidWlsZDsKKwljaGFyICAgIHZlcnNpb25bVlhHRV9IV19GV19TVFJMRU5dOworfTsKKwordTY0CitfX3Z4Z2VfaHdfdnBhdGhfcGNpX2Z1bmNfbW9kZV9nZXQoCisJdTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpOworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvZiBmaWZvLgorICogQGVuYWJsZTogSXMgdGhpcyBmaWZvIHRvIGJlIGNvbW1pc3Npb25lZAorICogQGZpZm9fYmxvY2tzOiBOdW1iZXJzIG9mIFR4REwgKHRoYXQgaXMsIGxpc3RzIG9mIFR4IGRlc2NyaXB0b3JzKQorICogCQlibG9ja3MgcGVyIHF1ZXVlLgorICogQG1heF9mcmFnczogTWF4IG51bWJlciBvZiBUeCBidWZmZXJzIHBlciBUeERMICh0aGF0IGlzLCBwZXIgc2luZ2xlCisgKiAgICAgICAgICAgICB0cmFuc21pdCBvcGVyYXRpb24pLgorICogICAgICAgICAgICAgTm8gbW9yZSB0aGFuIDI1NiB0cmFuc21pdCBidWZmZXJzIGNhbiBiZSBzcGVjaWZpZWQuCisgKiBAbWVtYmxvY2tfc2l6ZTogRmlmbyBkZXNjcmlwdG9ycyBhcmUgYWxsb2NhdGVkIGluIGJsb2NrcyBvZiBAbWVtX2Jsb2NrX3NpemUKKyAqICAgICAgICAgICAgIGJ5dGVzLiBTZXR0aW5nIEBtZW1ibG9ja19zaXplIHRvIHBhZ2Ugc2l6ZSBlbnN1cmVzCisgKiAgICAgICAgICAgICBieS1wYWdlIGFsbG9jYXRpb24gb2YgZGVzY3JpcHRvcnMuIDEyOEsgYnl0ZXMgaXMgdGhlCisgKiAgICAgICAgICAgICBtYXhpbXVtIHN1cHBvcnRlZCBibG9jayBzaXplLgorICogQGFsaWdubWVudF9zaXplOiBwZXIgVHggZnJhZ21lbnQgRE1BLWFibGUgbWVtb3J5IHVzZWQgdG8gYWxpZ24gdHJhbnNtaXQgZGF0YQorICogICAgICAgICAgICAgKGUuZy4sIHRvIGFsaWduIG9uIGEgY2FjaGUgbGluZSkuCisgKiBAaW50cjogQm9vbGVhbi4gVXNlIDEgdG8gZ2VuZXJhdGUgaW50ZXJydXB0IGZvciBlYWNoIGNvbXBsZXRlZCBUeERMLgorICogICAgICAgICAgICAgVXNlIDAgb3RoZXJ3aXNlLgorICogQG5vX3Nub29wX2JpdHM6IElmIG5vbi16ZXJvLCBzcGVjaWZpZXMgbm8tc25vb3AgUENJIG9wZXJhdGlvbiwKKyAqICAgICAgICAgICAgIHdoaWNoIGdlbmVyYWxseSBpbXByb3ZlcyBsYXRlbmN5IG9mIHRoZSBob3N0IGJyaWRnZSBvcGVyYXRpb24KKyAqICAgICAgICAgICAgIChzZWUgUENJIHNwZWNpZmljYXRpb24pLiBGb3IgdmFsaWQgdmFsdWVzIHBsZWFzZSByZWZlcgorICogICAgICAgICAgICAgdG8gc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWd7fSBpbiB0aGUgZHJpdmVyIHNvdXJjZXMuCisgKiBDb25maWd1cmF0aW9uIG9mIGFsbCBUaXRhbiBmaWZvcy4KKyAqIE5vdGU6IFZhbGlkIChtaW4sIG1heCkgcmFuZ2UgZm9yIGVhY2ggYXR0cmlidXRlIGlzIHNwZWNpZmllZCBpbiB0aGUgYm9keSBvZgorICogdGhlIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlne30gc3RydWN0dXJlLgorICovCitzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyB7CisJdTMyCQkJCWVuYWJsZTsKKyNkZWZpbmUgVlhHRV9IV19GSUZPX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfRklGT19ESVNBQkxFCQkJCTAKKworCXUzMgkJCQlmaWZvX2Jsb2NrczsKKyNkZWZpbmUgVlhHRV9IV19NSU5fRklGT19CTE9DS1MJCQkJMgorI2RlZmluZSBWWEdFX0hXX01BWF9GSUZPX0JMT0NLUwkJCQkxMjgKKworCXUzMgkJCQltYXhfZnJhZ3M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0ZJRk9fRlJBR1MJCQkJMQorI2RlZmluZSBWWEdFX0hXX01BWF9GSUZPX0ZSQUdTCQkJCTI1NgorCisJdTMyCQkJCW1lbWJsb2NrX3NpemU7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0ZJRk9fTUVNQkxPQ0tfU0laRQkJCVZYR0VfSFdfQkxPQ0tfU0laRQorI2RlZmluZSBWWEdFX0hXX01BWF9GSUZPX01FTUJMT0NLX1NJWkUJCQkxMzEwNzIKKyNkZWZpbmUgVlhHRV9IV19ERUZfRklGT19NRU1CTE9DS19TSVpFCQkJODA5NgorCisJdTMyCQkgICAgICAgICAgICAgICAgYWxpZ25tZW50X3NpemU7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0ZJRk9fQUxJR05NRU5UX1NJWkUJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfRklGT19BTElHTk1FTlRfU0laRQkJNjU1MzYKKyNkZWZpbmUgVlhHRV9IV19ERUZfRklGT19BTElHTk1FTlRfU0laRQkJVlhHRV9DQUNIRV9MSU5FX1NJWkUKKworCXUzMgkJICAgICAgICAgICAgICAgIGludHI7CisjZGVmaW5lIFZYR0VfSFdfRklGT19RVUVVRV9JTlRSX0VOQUJMRQkJCTEKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1FVRVVFX0lOVFJfRElTQUJMRQkJCTAKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1FVRVVFX0lOVFJfREVGQVVMVAkJCTAKKworCXUzMgkJCQlub19zbm9vcF9iaXRzOworI2RlZmluZSBWWEdFX0hXX0ZJRk9fTk9fU05PT1BfRElTQUJMRUQJCQkwCisjZGVmaW5lIFZYR0VfSFdfRklGT19OT19TTk9PUF9UWEQJCQkxCisjZGVmaW5lIFZYR0VfSFdfRklGT19OT19TTk9PUF9GUk0JCQkyCisjZGVmaW5lIFZYR0VfSFdfRklGT19OT19TTk9PUF9BTEwJCQkzCisjZGVmaW5lIFZYR0VfSFdfRklGT19OT19TTk9PUF9ERUZBVUxUCQkJMAorCit9OworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZyAtIFJpbmcgY29uZmlndXJhdGlvbnMuCisgKiBAZW5hYmxlOiBJcyB0aGlzIHJpbmcgdG8gYmUgY29tbWlzc2lvbmVkCisgKiBAcmluZ19ibG9ja3M6IE51bWJlcnMgb2YgUnhEIGJsb2NrcyBpbiB0aGUgcmluZworICogQGJ1ZmZlcl9tb2RlOiBSZWNlaXZlIGJ1ZmZlciBtb2RlICgxLCAyLCAzLCBvciA1KTsgZm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyCisgKiAgICAgICAgICAgICB0byBUaXRhbiBVc2VyIEd1aWRlLgorICogQHNjYXR0ZXJfbW9kZTogVGl0YW4gc3VwcG9ydHMgdHdvIHJlY2VpdmUgc2NhdHRlciBtb2RlczogQSBhbmQgQi4KKyAqICAgICAgICAgICAgIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICogQHJ4X3RpbWVyX3ZhbDogVGhlIG51bWJlciBvZiAzMm5zIHBlcmlvZHMgdGhhdCB3b3VsZCBiZSBjb3VudGVkIGJldHdlZW4gdHdvCisgKiAgICAgICAgICAgICB0aW1lciBpbnRlcnJ1cHRzLgorICogQGdyZWVkeV9yZXR1cm46IElmIFNldCBpdCBmb3JjZXMgdGhlIGRldmljZSB0byByZXR1cm4gYWJzb2x1dGVseSBhbGwgUnhECisgKiAgICAgICAgICAgICB0aGF0IGFyZSBjb25zdW1lZCBhbmQgc3RpbGwgb24gYm9hcmQgd2hlbiBhIHRpbWVyIGludGVycnVwdAorICogICAgICAgICAgICAgdHJpZ2dlcnMuIElmIENsZWFyLCB0aGVuIGlmIHRoZSBkZXZpY2UgaGFzIGFscmVhZHkgcmV0dXJuZWQKKyAqICAgICAgICAgICAgIFJ4RCBiZWZvcmUgY3VycmVudCB0aW1lciBpbnRlcnJ1cHQgdHJpZ2VycmVkIGFuZCBhZnRlciB0aGUKKyAqICAgICAgICAgICAgIHByZXZpb3VzIHRpbWVyIGludGVycnVwdCB0cmlnZ2VyZWQsIHRoZW4gdGhlIGRldmljZSBpcyBub3QKKyAqICAgICAgICAgICAgIGZvcmNlZCB0byByZXR1cm5lZCB0aGUgcmVzdCBvZiB0aGUgY29uc3VtZWQgUnhEIHRoYXQgaXQgaGFzCisgKiAgICAgICAgICAgICBvbiBib2FyZCB3aGljaCBhY2NvdW50IGZvciBhIGJ5dGUgY291bnQgbGVzcyB0aGFuIHRoZSBvbmUKKyAqICAgICAgICAgICAgIHByb2dyYW1tZWQgaW50byBQUkNfQ0ZHNi5SWERfQ1JYRFQgZmllbGQKKyAqIEByeF90aW1lcl9jaTogVEJECisgKiBAYmFja29mZl9pbnRlcnZhbF91czogVGltZSAoaW4gbWljcm9zZWNvbmRzKSwgYWZ0ZXIgd2hpY2ggVGl0YW4KKyAqICAgICAgICAgICAgIHRyaWVzIHRvIGRvd25sb2FkIFJ4RHMgcG9zdGVkIGJ5IHRoZSBob3N0LgorICogICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSAiYmFja29mZiIgZG9lcyBub3QgaGFwcGVuIGlmIGhvc3QgcG9zdHMgcmVjZWl2ZQorICogICAgICAgICAgICAgZGVzY3JpcHRvcnMgaW4gdGhlIHRpbWVseSBmYXNoaW9uLgorICogUmluZyBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZyB7CisJdTMyCQkJCWVuYWJsZTsKKyNkZWZpbmUgVlhHRV9IV19SSU5HX0VOQUJMRQkJCQkJMQorI2RlZmluZSBWWEdFX0hXX1JJTkdfRElTQUJMRQkJCQkJMAorI2RlZmluZSBWWEdFX0hXX1JJTkdfREVGQVVMVAkJCQkJMQorCisJdTMyCQkJCXJpbmdfYmxvY2tzOworI2RlZmluZSBWWEdFX0hXX01JTl9SSU5HX0JMT0NLUwkJCQkxCisjZGVmaW5lIFZYR0VfSFdfTUFYX1JJTkdfQkxPQ0tTCQkJCTEyOAorI2RlZmluZSBWWEdFX0hXX0RFRl9SSU5HX0JMT0NLUwkJCQkyCisKKwl1MzIJCQkJYnVmZmVyX21vZGU7CisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfMQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfMwkJCQkzCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfNQkJCQk1CisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfREVGQVVMVAkJCTEKKworCXUzMgkJCQlzY2F0dGVyX21vZGU7CisjZGVmaW5lIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQgkJCQkxCisjZGVmaW5lIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQwkJCQkyCisjZGVmaW5lIFZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfVVNFX0ZMQVNIX0RFRkFVTFQJCTB4ZmZmZmZmZmYKKworCXU2NAkJCQlyeGRzX2xpbWl0OworI2RlZmluZSBWWEdFX0hXX0RFRl9SSU5HX1JYRFNfTElNSVQJCQkJNDQKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnIC0gQ29uZmlndXJhdGlvbiBvZiB2aXJ0dWFsIHBhdGgKKyAqIEB2cF9pZDogVmlydHVhbCBQYXRoIElkCisgKiBAbWluX2JhbmR3aWR0aDogTWluaW11bSBHdWFyYW50ZWVkIGJhbmR3aWR0aAorICogQHJpbmc6IFNlZSBzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZ3t9LgorICogQGZpZm86IFNlZSBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZ3t9LgorICogQHR0aTogQ29uZmlndXJhdGlvbiBvZiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIFRyYW5zbWl0LgorICogICAgICAgICAgICAgc2VlIHN0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZygpOworICogQHJ0aTogQ29uZmlndXJhdGlvbiBvZiBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIFJlY2VpdmUuCisgKiAgICAgICAgICAgICAgc2VlIHN0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZygpOworICogQG10dTogbXR1IHNpemUgdXNlZCBvbiB0aGlzIHBvcnQuCisgKiBAcnBhX3N0cmlwX3ZsYW5fdGFnOiBTdHJpcCBWTEFOIFRhZyBlbmFibGUvZGlzYWJsZS4gSW5zdHJ1Y3RzIHRoZSBkZXZpY2UgdG8KKyAqICAgICAgICAgICAgIHJlbW92ZSB0aGUgVkxBTiB0YWcgZnJvbSBhbGwgcmVjZWl2ZWQgdGFnZ2VkIGZyYW1lcyB0aGF0IGFyZSBub3QKKyAqICAgICAgICAgICAgIHJlcGxpY2F0ZWQgYXQgdGhlIGludGVybmFsIEwyIHN3aXRjaC4KKyAqICAgICAgICAgICAgIDAgLSBEbyBub3Qgc3RyaXAgdGhlIFZMQU4gdGFnLgorICogICAgICAgICAgICAgMSAtIFN0cmlwIHRoZSBWTEFOIHRhZy4gUmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcsIFZMQU4gdGFncyBhcmUKKyAqICAgICAgICAgICAgICAgICBhbHdheXMgcGxhY2VkIGludG8gdGhlIFJ4RE1BIGRlc2NyaXB0b3IuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgZHJpdmVyIHRvIHBhc3MgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB0bworICogY29uZmlndXJlIFZpcnR1YWwgUGF0aC4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnIHsKKwl1MzIJCQkJdnBfaWQ7CisKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUklPUklUWV9NSU4JCQkwCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFJJT1JJVFlfTUFYCQkJMTYKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUklPUklUWV9ERUZBVUxUCQkJMAorCisJdTMyCQkJCW1pbl9iYW5kd2lkdGg7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01JTgkJCTAKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYCQkJMTAwCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX0RFRkFVTFQJCQkwCisKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX2NvbmZpZwkJcmluZzsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZwkJZmlmbzsKKwlzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcJdHRpOworCXN0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZwlydGk7CisKKwl1MzIJCQkJbXR1OworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX01JTl9JTklUSUFMX01UVQkJCVZYR0VfSFdfTUlOX01UVQorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX01BWF9JTklUSUFMX01UVQkJCVZYR0VfSFdfTUFYX01UVQorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1VTRV9GTEFTSF9ERUZBVUxUX0lOSVRJQUxfTVRVCTB4ZmZmZmZmZmYKKworCXUzMgkJCQlycGFfc3RyaXBfdmxhbl90YWc7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRQkJCTEKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRElTQUJMRQkJMAorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19VU0VfRkxBU0hfREVGQVVMVAkweGZmZmZmZmZmCisKK307CisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgLSBEZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqIEBkbWFfYmxvY2twb29sX2luaXRpYWw6IEluaXRpYWwgc2l6ZSBvZiBETUEgUG9vbAorICogQGRtYV9ibG9ja3Bvb2xfbWF4OiBNYXhpbXVtIGJsb2NrcyBpbiBETUEgcG9vbAorICogQGludHJfbW9kZTogTGluZSwgb3IgTVNJLVggaW50ZXJydXB0LgorICoKKyAqIEBydGhfZW46IEVuYWJsZSBSZWNlaXZlIFRyYWZmaWMgSGFzaGluZyhSVEgpIHVzaW5nIElUKEluZGlyZWN0aW9uIFRhYmxlKS4KKyAqIEBydGhfaXRfdHlwZTogUlRIIElUIHRhYmxlIHByb2dyYW1taW5nIHR5cGUKKyAqIEBydHNfbWFjX2VuOiBFbmFibGUgUmVjZWl2ZSBUcmFmZmljIFN0ZWVyaW5nIHVzaW5nIE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKiBAdnBfY29uZmlnOiBDb25maWd1cmF0aW9uIGZvciB2aXJ0dWFsIHBhdGhzCisgKiBAZGV2aWNlX3BvbGxfbWlsbGlzOiBTcGVjaWZ5IHRoZSBpbnRlcnZhbCAoaW4gbXVsbGlzZWNvbmRzKQorICogCQkJdG8gd2FpdCBmb3IgcmVnaXN0ZXIgcmVhZHMKKyAqCisgKiBUaXRhbiBjb25maWd1cmF0aW9uLgorICogQ29udGFpbnMgcGVyLWRldmljZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGluY2x1ZGluZzoKKyAqIC0gc3RhdHMgc2FtcGxpbmcgaW50ZXJ2YWwsIGV0Yy4KKyAqCisgKiBJbiBhZGRpdGlvbiwgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ3t9IGluY2x1ZGVzICJzdWJvcmRpbmF0ZSIKKyAqIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmc6CisgKiAtIGZpZm9zIGFuZCByaW5nczsKKyAqIC0gTUFDIChkb25lIGF0IGZpcm13YXJlIGxldmVsKS4KKyAqCisgKiBTZWUgVGl0YW4gVXNlciBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgorICogTm90ZTogVmFsaWQgKG1pbiwgbWF4KSByYW5nZSBmb3IgZWFjaCBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIGluIHRoZSBib2R5IG9mCisgKiB0aGUgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ3t9IHN0cnVjdHVyZS4gUGxlYXNlIHJlZmVyIHRvIHRoZQorICogY29ycmVzcG9uZGluZyBpbmNsdWRlIGZpbGUuCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlne30uCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgeworCXUzMgkJCQlkbWFfYmxvY2twb29sX2luaXRpYWw7CisJdTMyCQkJCWRtYV9ibG9ja3Bvb2xfbWF4OworI2RlZmluZSBWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJMAorI2RlZmluZSBWWEdFX0hXX0lOSVRJQUxfRE1BX0JMT0NLX1BPT0xfU0laRQkJMAorI2RlZmluZSBWWEdFX0hXX0lOQ1JfRE1BX0JMT0NLX1BPT0xfU0laRQkJNAorI2RlZmluZSBWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFCQkJNDA5NgorCisjZGVmaW5lICAgICAgICBWWEdFX0hXX01BWF9QQVlMT0FEX1NJWkVfNTEyCQkyCisKKwl1MzIJCQkJaW50cl9tb2RlOworI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FCQkJMAorI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVAkJCTIKKworI2RlZmluZSBWWEdFX0hXX0lOVFJfTU9ERV9ERUYJCQkJMAorCisJdTMyCQkJCXJ0aF9lbjsKKyNkZWZpbmUgVlhHRV9IV19SVEhfRElTQUJMRQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfUlRIX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfUlRIX0RFRkFVTFQJCQkJMAorCisJdTMyCQkJCXJ0aF9pdF90eXBlOworI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX1NPTE9fSVQJCQkwCisjZGVmaW5lIFZYR0VfSFdfUlRIX0lUX1RZUEVfTVVMVElfSVQJCQkxCisjZGVmaW5lIFZYR0VfSFdfUlRIX0lUX1RZUEVfREVGQVVMVAkJCTAKKworCXUzMgkJCQlydHNfbWFjX2VuOworI2RlZmluZSBWWEdFX0hXX1JUU19NQUNfRElTQUJMRQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0VOQUJMRQkJCTEKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0RFRkFVTFQJCQkwCisKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJdnBfY29uZmlnW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCisJdTMyCQkJCWRldmljZV9wb2xsX21pbGxpczsKKyNkZWZpbmUgVlhHRV9IV19NSU5fREVWSUNFX1BPTExfTUlMTElTCQkJMQorI2RlZmluZSBWWEdFX0hXX01BWF9ERVZJQ0VfUE9MTF9NSUxMSVMJCQkxMDAwMDAKKyNkZWZpbmUgVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTCQkJMTAwMAorCit9OworCisvKioKKyAqIGZ1bmN0aW9uIHZ4Z2VfdWxkX2xpbmtfdXBfZiAtIExpbmstVXAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgZHJpdmVyLgorICogQGRldmg6IEhXIGRldmljZSBoYW5kbGUuCisgKiBMaW5rLXVwIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyLgorICogVGhpcyBpcyBvbmUgb2YgdGhlIHBlci1kcml2ZXIgY2FsbGJhY2tzLCBzZWUgc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30sIHZ4Z2VfdWxkX2xpbmtfZG93bl9me30sCisgKiB2eGdlX2h3X2RyaXZlcl9pbml0aWFsaXplKCkuCisgKi8KKworLyoqCisgKiBmdW5jdGlvbiB2eGdlX3VsZF9saW5rX2Rvd25fZiAtIExpbmstRG93biBjYWxsYmFjayBwcm92aWRlZCBieQorICogZHJpdmVyLgorICogQGRldmg6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogTGluay1Eb3duIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyLgorICogVGhpcyBpcyBvbmUgb2YgdGhlIHBlci1kcml2ZXIgY2FsbGJhY2tzLCBzZWUgc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30sIHZ4Z2VfdWxkX2xpbmtfdXBfZnt9LAorICogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgorICovCisKKy8qKgorICogZnVuY3Rpb24gdnhnZV91bGRfY3JpdF9lcnJfZiAtIENyaXRpY2FsIEVycm9yIG5vdGlmaWNhdGlvbiBjYWxsYmFjay4KKyAqIEBkZXZoOiBIVyBkZXZpY2UgaGFuZGxlLgorICogKHR5cGljYWxseSAtIGF0IEhXIGRldmljZSBpaW5pdGlhbGl6YXRpb24gdGltZSkuCisgKiBAdHlwZTogRW51bWVyYXRlZCBodyBlcnJvciwgZS5nLjogZG91YmxlIEVDQy4KKyAqIEBzZXJyX2RhdGE6IFRpdGFuIHN0YXR1cy4KKyAqIEBleHRfZGF0YTogRXh0ZW5kZWQgZGF0YS4gVGhlIGNvbnRlbnRzIGRlcGVuZHMgb24gdGhlIEB0eXBlLgorICoKKyAqIExpbmstRG93biBub3RpZmljYXRpb24gY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlci4KKyAqIFRoaXMgaXMgb25lIG9mIHRoZSBwZXItZHJpdmVyIGNhbGxiYWNrcywgc2VlIHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fS4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LCBlbnVtIHZ4Z2VfaHdfZXZlbnR7fSwKKyAqIHZ4Z2VfaHdfZHJpdmVyX2luaXRpYWxpemUoKS4KKyAqLworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3VsZF9jYnMgLSBkcml2ZXIgInNsb3ctcGF0aCIgY2FsbGJhY2tzLgorICogQGxpbmtfdXA6IFNlZSB2eGdlX3VsZF9saW5rX3VwX2Z7fS4KKyAqIEBsaW5rX2Rvd246IFNlZSB2eGdlX3VsZF9saW5rX2Rvd25fZnt9LgorICogQGNyaXRfZXJyOiBTZWUgdnhnZV91bGRfY3JpdF9lcnJfZnt9LgorICoKKyAqIERyaXZlciBzbG93LXBhdGggKHBlci1kcml2ZXIpIGNhbGxiYWNrcy4KKyAqIEltcGxlbWVudGVkIGJ5IGRyaXZlciBhbmQgcHJvdmlkZWQgdG8gSFcgdmlhCisgKiB2eGdlX2h3X2RyaXZlcl9pbml0aWFsaXplKCkuCisgKiBOb3RlIHRoYXQgdGhlc2UgY2FsbGJhY2tzIGFyZSBub3QgbWFuZGF0b3J5OiBIVyB3aWxsIG5vdCBpbnZva2UKKyAqIGEgY2FsbGJhY2sgaWYgTlVMTCBpcyBzcGVjaWZpZWQuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZHJpdmVyX2luaXRpYWxpemUoKS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdWxkX2NicyB7CisKKwl2b2lkICgqbGlua191cCkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCXZvaWQgKCpsaW5rX2Rvd24pKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwl2b2lkICgqY3JpdF9lcnIpKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJZW51bSB2eGdlX2h3X2V2ZW50IHR5cGUsIHU2NCBleHRfZGF0YSk7Cit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgLSBCbG9jayBwcml2YXRlIGRhdGEgc3RydWN0dXJlCisgKiBAaXRlbTogTGlzdCBoZWFkZXIgdXNlZCB0byBsaW5rLgorICogQGxlbmd0aDogTGVuZ3RoIG9mIHRoZSBibG9jaworICogQG1lbWJsb2NrOiBWaXJ0dWFsIGFkZHJlc3MgYmxvY2sKKyAqIEBkbWFfYWRkcjogRE1BIEFkZHJlc3Mgb2YgdGhlIGJsb2NrLgorICogQGRtYV9oYW5kbGU6IERNQSBoYW5kbGUgb2YgdGhlIGJsb2NrLgorICogQGFjY19oYW5kbGU6IERNQSBhY2MgaGFuZGxlCisgKgorICogQmxvY2sgaXMgYWxsb2NhdGVkIHdpdGggYSBoZWFkZXIgdG8gcHV0IHRoZSBibG9ja3MgaW50byBsaXN0LgorICoKKyAqLworc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQJaXRlbTsKKwl1MzIJCQlsZW5ndGg7CisJdm9pZAkJCSptZW1ibG9jazsKKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAJCSpkbWFfaGFuZGxlOworCXN0cnVjdCBwY2lfZGV2IAkJKmFjY19oYW5kbGU7Cit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgLSBCbG9jayBQb29sCisgKiBAaGxkZXY6IEhXIGRldmljZQorICogQGJsb2NrX3NpemU6IHNpemUgb2YgZWFjaCBibG9jay4KKyAqIEBQb29sX3NpemU6IE51bWJlciBvZiBibG9ja3MgaW4gdGhlIHBvb2wKKyAqIEBwb29sX21heDogTWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGFib3ZlIHdoaWNoIHRvIGZyZWUgYWRkaXRpb25hbCBibG9ja3MKKyAqIEByZXFfb3V0OiBOdW1iZXIgb2YgYmxvY2sgcmVxdWVzdHMgd2l0aCBPUyBvdXQgc3RhbmRpbmcKKyAqIEBmcmVlX2Jsb2NrX2xpc3Q6IExpc3Qgb2YgZnJlZSBibG9ja3MKKyAqCisgKiBCbG9jayBwb29sIGNvbnRhaW5zIHRoZSBETUEgYmxvY2tzIHByZWFsbG9jYXRlZC4KKyAqCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sIHsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJdTMyCQkJCWJsb2NrX3NpemU7CisJdTMyCQkJCXBvb2xfc2l6ZTsKKwl1MzIJCQkJcG9vbF9tYXg7CisJdTMyCQkJCXJlcV9vdXQ7CisJc3RydWN0IGxpc3RfaGVhZAkJZnJlZV9ibG9ja19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCWZyZWVfZW50cnlfbGlzdDsKK307CisKKy8qCisgKiBlbnVtIGVudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZSAtIEVudW1lcmF0ZWQgY2hhbm5lbCB0eXBlcy4KKyAqIEBWWEdFX0hXX0NIQU5ORUxfVFlQRV9VTktOT1dOOiBVbmtub3duIGNoYW5uZWwuCisgKiBAVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTzogZmlmby4KKyAqIEBWWEdFX0hXX0NIQU5ORUxfVFlQRV9SSU5HOiByaW5nLgorICogQFZYR0VfSFdfQ0hBTk5FTF9UWVBFX01BWDogTWF4aW11bSBudW1iZXIgb2YgSFctc3VwcG9ydGVkCisgKiAoYW5kIHJlY29nbml6ZWQpIGNoYW5uZWwgdHlwZXMuIEN1cnJlbnRseTogMi4KKyAqCisgKiBFbnVtZXJhdGVkIGNoYW5uZWwgdHlwZXMuIEN1cnJlbnRseSB0aGVyZSBhcmUgb25seSB0d28gbGluay1sYXllcgorICogY2hhbm5lbHMgLSBUaXRhbiBmaWZvIGFuZCBUaXRhbiByaW5nLiBJbiB0aGUgZnV0dXJlIHRoZSBsaXN0IHdpbGwgZ3Jvdy4KKyAqLworZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlIHsKKwlWWEdFX0hXX0NIQU5ORUxfVFlQRV9VTktOT1dOCQkJPSAwLAorCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk8JCQk9IDEsCisJVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORwkJCT0gMiwKKwlWWEdFX0hXX0NIQU5ORUxfVFlQRV9NQVgJCQk9IDMKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwKKyAqIEBpdGVtOiBMaXN0IGl0ZW07IHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIG9wZW4gY2hhbm5lbHMuCisgKiBAdHlwZTogQ2hhbm5lbCB0eXBlLiBTZWUgZW51bSB2eGdlX2h3X2NoYW5uZWxfdHlwZXt9LgorICogQGRldmg6IERldmljZSBoYW5kbGUuIEhXIGRldmljZSBvYmplY3QgdGhhdCBjb250YWlucyBfdGhpc18gY2hhbm5lbC4KKyAqIEB2cGg6IFZpcnR1YWwgcGF0aCBoYW5kbGUuIFZpcnR1YWwgUGF0aCBPYmplY3QgdGhhdCBjb250YWlucyBfdGhpc18gY2hhbm5lbC4KKyAqIEBsZW5ndGg6IENoYW5uZWwgbGVuZ3RoLiBDdXJyZW50bHkgYWxsb2NhdGVkIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKyAqICAgICAgICAgIFRoZSBjaGFubmVsIGxlbmd0aCAiZ3Jvd3MiIHdoZW4gbW9yZSBkZXNjcmlwdG9ycyBnZXQgYWxsb2NhdGVkLgorICogICAgICAgICAgU2VlIF9od19tZW1wb29sX2dyb3cuCisgKiBAcmVzZXJ2ZV9hcnI6IFJlc2VydmUgYXJyYXkuIENvbnRhaW5zIGRlc2NyaXB0b3JzIHRoYXQgY2FuIGJlIHJlc2VydmVkCisgKiAgICAgICAgICAgICAgIGJ5IGRyaXZlciBmb3IgdGhlIHN1YnNlcXVlbnQgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbi4KKyAqICAgICAgICAgICAgICAgU2VlIHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUoKSwKKyAqICAgICAgICAgICAgICAgdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKCkuCisgKiBAcmVzZXJ2ZV9wdHI6IEN1cnJlbnQgcG9pbnRlciBpbiB0aGUgcmVzcnZlIGFycmF5CisgKiBAcmVzZXJ2ZV90b3A6IFJlc2VydmUgdG9wIGdpdmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkdHJzIGF2YWlsYWJsZSBpbgorICogICAgICAgICAgcmVzZXJ2ZSBhcnJheS4KKyAqIEB3b3JrX2FycjogV29yayBhcnJheS4gQ29udGFpbnMgZGVzY3JpcHRvcnMgcG9zdGVkIHRvIHRoZSBjaGFubmVsLgorICogICAgICAgICAgICBOb3RlIHRoYXQgYXQgYW55IHBvaW50IGluIHRpbWUgQHdvcmtfYXJyIGNvbnRhaW5zIDMgdHlwZXMgb2YKKyAqICAgICAgICAgICAgZGVzY3JpcHRvcnM6CisgKiAgICAgICAgICAgIDEpIHBvc3RlZCBidXQgbm90IHlldCBjb25zdW1lZCBieSBUaXRhbiBkZXZpY2U7CisgKiAgICAgICAgICAgIDIpIGNvbnN1bWVkIGJ1dCBub3QgeWV0IGNvbXBsZXRlZDsKKyAqICAgICAgICAgICAgMykgY29tcGxldGVkIGJ1dCBub3QgeWV0IGZyZWVkCisgKiAgICAgICAgICAgICh2aWEgdnhnZV9od19maWZvX3R4ZGxfZnJlZSgpIG9yIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgpKQorICogQHBvc3RfaW5kZXg6IFBvc3QgaW5kZXguIEF0IGFueSBwb2ludCBpbiB0aW1lIHBvaW50cyBvbiB0aGUKKyAqICAgICAgICAgICAgICBwb3NpdGlvbiBpbiB0aGUgY2hhbm5lbCwgd2hpY2gnbGwgY29udGFpbiBuZXh0IHRvLWJlLXBvc3RlZAorICogICAgICAgICAgICAgIGRlc2NyaXB0b3IuCisgKiBAY29tcGxfaW5kZXg6IENvbXBsZXRpb24gaW5kZXguIEF0IGFueSBwb2ludCBpbiB0aW1lIHBvaW50cyBvbiB0aGUKKyAqICAgICAgICAgICAgICAgcG9zaXRpb24gaW4gdGhlIGNoYW5uZWwsIHdoaWNoIHdpbGwgY29udGFpbiBuZXh0CisgKiAgICAgICAgICAgICAgIHRvLWJlLWNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQGZyZWVfYXJyOiBGcmVlIGFycmF5LiBDb250YWlucyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgdGhhdCB3ZXJlIGZyZWVkCisgKiAgICAgICAgICAgIChpLmUuLCBoYW5kZWQgb3ZlciBiYWNrIHRvIEhXKSBieSBkcml2ZXIuCisgKiAgICAgICAgICAgIFNlZSB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKCksIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgpLgorICogQGZyZWVfcHRyOiBjdXJyZW50IHBvaW50ZXIgaW4gZnJlZSBhcnJheQorICogQHBlcl9kdHJfc3BhY2U6IFBlci1kZXNjcmlwdG9yIHNwYWNlIChpbiBieXRlcykgdGhhdCBjaGFubmVsIHVzZXIgY2FuIHV0aWxpemUKKyAqICAgICAgICAgICAgICAgICB0byBzdG9yZSBwZXItb3BlcmF0aW9uIGNvbnRyb2wgaW5mb3JtYXRpb24uCisgKiBAc3RhdHM6IFBvaW50ZXIgdG8gY29tbW9uIHN0YXRpc3RpY3MKKyAqIEB1c2VyZGF0YTogUGVyLWNoYW5uZWwgb3BhcXVlICh2b2lkKikgdXNlci1kZWZpbmVkIGNvbnRleHQsIHdoaWNoIG1heSBiZQorICogICAgICAgICAgICBkcml2ZXIgb2JqZWN0LCBVTFAgY29ubmVjdGlvbiwgZXRjLgorICogICAgICAgICAgICBPbmNlIGNoYW5uZWwgaXMgb3BlbiwgQHVzZXJkYXRhIGlzIHBhc3NlZCBiYWNrIHRvIHVzZXIgdmlhCisgKiAgICAgICAgICAgIHZ4Z2VfaHdfY2hhbm5lbF9jYWxsYmFja19mLgorICoKKyAqIEhXIGNoYW5uZWwgb2JqZWN0LgorICoKKyAqIFNlZSBhbHNvOiBlbnVtIHZ4Z2VfaHdfY2hhbm5lbF90eXBle30sIGVudW0gdnhnZV9od19jaGFubmVsX2ZsYWcKKyAqLworc3RydWN0IF9fdnhnZV9od19jaGFubmVsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpdGVtOworCWVudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZQl0eXBlOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlIAkqZGV2aDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAJKnZwaDsKKwl1MzIJCQlsZW5ndGg7CisJdTMyCQkJdnBfaWQ7CisJdm9pZAkJKipyZXNlcnZlX2FycjsKKwl1MzIJCQlyZXNlcnZlX3B0cjsKKwl1MzIJCQlyZXNlcnZlX3RvcDsKKwl2b2lkCQkqKndvcmtfYXJyOworCXUzMgkJCXBvc3RfaW5kZXggX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXUzMgkJCWNvbXBsX2luZGV4IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl2b2lkCQkqKmZyZWVfYXJyOworCXUzMgkJCWZyZWVfcHRyOworCXZvaWQJCSoqb3JpZ19hcnI7CisJdTMyCQkJcGVyX2R0cl9zcGFjZTsKKwl2b2lkCQkqdXNlcmRhdGE7CisJc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZwlfX2lvbWVtICpjb21tb25fcmVnOworCXUzMgkJCWZpcnN0X3ZwX2lkOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvICpzdGF0czsKKworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoIC0gVmlydHVhbCBQYXRoCisgKgorICogQHZwX2lkOiBWaXJ0dWFsIHBhdGggaWQKKyAqIEB2cF9vcGVuOiBUaGlzIGZsYWcgc3BlY2lmaWVzIGlmIHZ4Z2VfaHdfdnBfb3BlbiBpcyBjYWxsZWQgZnJvbSBMTCBEcml2ZXIKKyAqIEBobGRldjogSGFsIGRldmljZQorICogQHZwX2NvbmZpZzogVmlydHVhbCBQYXRoIENvbmZpZworICogQHZwX3JlZzogVlBBVEggUmVnaXN0ZXIgbWFwIGFkZHJlc3MgaW4gQkFSMAorICogQHZwbWdtdF9yZWc6IFZQQVRIX01HTVQgcmVnaXN0ZXIgbWFwIGFkZHJlc3MKKyAqIEBtYXhfbXR1OiBNYXggbXR1IHRoYXQgY2FuIGJlIHN1cHBvcnRlZAorICogQHZzcG9ydF9udW1iZXI6IHZzcG9ydCBhdHRhY2hlZCB0byB0aGlzIHZwYXRoCisgKiBAbWF4X2tkZmNfZGI6IE1heGltdW0ga2VybmVsIG1vZGUgZG9vcmJlbGxzCisgKiBAbWF4X25vZmxfZGI6IE1heGltdW0gbm9uIG9mZmxvYWQgZG9vcmJlbGxzCisgKiBAdHhfaW50cl9udW06IEludGVycnVwdCBOdW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBUWAorCisgKiBAcmluZ2g6IFJpbmcgUXVldWUKKyAqIEBmaWZvaDogRklGTyBRdWV1ZQorICogQHZwYXRoX2hhbmRsZXM6IFZpcnR1YWwgUGF0aCBoYW5kbGVzIGxpc3QKKyAqIEBzdGF0c19ibG9jazogTWVtb3J5IGZvciBETUFpbmcgc3RhdHMKKyAqIEBzdGF0czogVnBhdGggc3RhdGlzdGljcworICoKKyAqIFZpcnR1YWwgcGF0aCBzdHJ1Y3R1cmUgdG8gZW5jYXBzdWxhdGUgdGhlIGRhdGEgcmVsYXRlZCB0byBhIHZpcnR1YWwgcGF0aC4KKyAqIFZpcnR1YWwgcGF0aHMgYXJlIGFsbG9jYXRlZCBieSB0aGUgSFcgdXBvbiBnZXR0aW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUKKyAqIGRyaXZlciBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdCBvZiB2aXJ0dWFsIHBhdGhzLgorICovCitzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoIHsKKwl1MzIJCQkJdnBfaWQ7CisKKwl1MzIJCQkJdnBfb3BlbjsKKyNkZWZpbmUgVlhHRV9IV19WUF9OT1RfT1BFTgkwCisjZGVmaW5lCVZYR0VfSFdfVlBfT1BFTgkJMQorCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UJCSpobGRldjsKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJKnZwX2NvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcJX19pb21lbSAqdnBfcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcJX19pb21lbSAqdnBtZ210X3JlZzsKKwlzdHJ1Y3QgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3dyYXBwZXIJX19pb21lbSAqbm9mbF9kYjsKKworCXUzMgkJCQltYXhfbXR1OworCXUzMgkJCQl2c3BvcnRfbnVtYmVyOworCXUzMgkJCQltYXhfa2RmY19kYjsKKwl1MzIJCQkJbWF4X25vZmxfZGI7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKl9fX19jYWNoZWxpbmVfYWxpZ25lZCByaW5naDsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKl9fX19jYWNoZWxpbmVfYWxpZ25lZCBmaWZvaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQl2cGF0aF9oYW5kbGVzOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5CQkqc3RhdHNfYmxvY2s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbwkqaHdfc3RhdHM7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbwkqaHdfc3RhdHNfc2F2OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8JKnN3X3N0YXRzOworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlIC0gTGlzdCBpdGVtIHRvIHN0b3JlIGNhbGxiYWNrIGluZm9ybWF0aW9uCisgKiBAaXRlbTogTGlzdCBoZWFkIHRvIGtlZXAgdGhlIGl0ZW0gaW4gbGlua2VkIGxpc3QKKyAqIEB2cGF0aDogVmlydHVhbCBwYXRoIHRvIHdoaWNoIHRoaXMgaXRlbSBiZWxvbmdzCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzdG9yZSB0aGUgY2FsbGJhY2sgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxleworCXN0cnVjdCBsaXN0X2hlYWQJaXRlbTsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aDsKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X2RldmljZQorICoKKyAqIEhXIGRldmljZSBvYmplY3QuCisgKi8KKy8qKgorICogc3RydWN0IF9fdnhnZV9od19kZXZpY2UgIC0gSGFsIGRldmljZSBvYmplY3QKKyAqIEBtYWdpYzogTWFnaWMgTnVtYmVyCisgKiBAZGV2aWNlX2lkOiBQQ0kgRGV2aWNlIElkIG9mIHRoZSBhZGFwdGVyCisgKiBAbWFqb3JfcmV2aXNpb246IFBDSSBEZXZpY2UgbWFqb3IgcmV2aXNpb24KKyAqIEBtaW5vcl9yZXZpc2lvbjogUENJIERldmljZSBtaW5vciByZXZpc2lvbgorICogQGJhcjA6IEJBUjAgdmlydHVhbCBhZGRyZXNzLgorICogQGJhcjE6IEJBUjEgdmlydHVhbCBhZGRyZXNzLgorICogQGJhcjI6IEJBUjIgdmlydHVhbCBhZGRyZXNzLgorICogQHBkZXY6IFBoeXNpY2FsIGRldmljZSBoYW5kbGUKKyAqIEBjb25maWc6IENvbmZndXJhdGlvbiBwYXNzZWQgYnkgdGhlIExMIGRyaXZlciBhdCBpbml0aWFsaXphdGlvbgorICogQGxpbmtfc3RhdGU6IExpbmsgc3RhdGUKKyAqCisgKiBIVyBkZXZpY2Ugb2JqZWN0LiBSZXByZXNlbnRzIFRpdGFuIGFkYXB0ZXIKKyAqLworc3RydWN0IF9fdnhnZV9od19kZXZpY2UgeworCXUzMgkJCQltYWdpYzsKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfTUFHSUMJCTB4MTIzNDU2NzgKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfREVBRAkJMHhERUFEREVBRAorCXUxNgkJCQlkZXZpY2VfaWQ7CisJdTgJCQkJbWFqb3JfcmV2aXNpb247CisJdTgJCQkJbWlub3JfcmV2aXNpb247CisJdm9pZCBfX2lvbWVtCQkJKmJhcjA7CisJdm9pZCBfX2lvbWVtCQkJKmJhcjE7CisJdm9pZCBfX2lvbWVtCQkJKmJhcjI7CisJc3RydWN0IHBjaV9kZXYJCQkqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKm5kZXY7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZwljb25maWc7CisJZW51bSB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlCWxpbmtfc3RhdGU7CisKKwlzdHJ1Y3QgdnhnZV9od191bGRfY2JzCQl1bGRfY2FsbGJhY2tzOworCisJdTMyCQkJCWhvc3RfdHlwZTsKKwl1MzIJCQkJZnVuY19pZDsKKwl1MzIJCQkJYWNjZXNzX3JpZ2h0czsKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1ZQQVRIICAgICAgMHgxCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9TUlBDSU0gICAgIDB4MgorI2RlZmluZSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNICAgICAweDQKKwlzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnCV9faW9tZW0gKmxlZ2FjeV9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZwkJX19pb21lbSAqdG9jX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnCV9faW9tZW0gKmNvbW1vbl9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZwlfX2lvbWVtICptcnBjaW1fcmVnOworCXN0cnVjdCB2eGdlX2h3X3NycGNpbV9yZWcJX19pb21lbSAqc3JwY2ltX3JlZyBcCisJCQkJCVtWWEdFX0hXX1RJVEFOX1NSUENJTV9SRUdfU1BBQ0VTXTsKKwlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnCV9faW9tZW0gKnZwbWdtdF9yZWcgXAorCQkJCQlbVlhHRV9IV19USVRBTl9WUE1HTVRfUkVHX1NQQUNFU107CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnCV9faW9tZW0gKnZwYXRoX3JlZyBcCisJCQkJCVtWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVNdOworCXU4CQkJCV9faW9tZW0gKmtkZmM7CisJdTgJCQkJX19pb21lbSAqdXNkYzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCXZpcnR1YWxfcGF0aHMgXAorCQkJCQlbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisJdTY0CQkJCXZwYXRoX2Fzc2lnbm1lbnRzOworCXU2NAkJCQl2cGF0aHNfZGVwbG95ZWQ7CisJdTMyCQkJCWZpcnN0X3ZwX2lkOworCXU2NAkJCQl0aW1faW50X21hc2swWzRdOworCXUzMgkJCQl0aW1faW50X21hc2sxWzRdOworCisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wJYmxvY2tfcG9vbDsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHMJc3RhdHM7CisJdTMyCQkJCWRlYnVnX21vZHVsZV9tYXNrOworCXUzMgkJCQlkZWJ1Z19sZXZlbDsKKwl1MzIJCQkJbGV2ZWxfZXJyOworCXUzMgkJCQlsZXZlbF90cmFjZTsKK307CisKKyNkZWZpbmUgVlhHRV9IV19JTkZPX0xFTgk2NAorLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAtIERldmljZSBpbmZvcm1hdGlvbgorICogQGhvc3RfdHlwZTogSG9zdCBUeXBlCisgKiBAZnVuY19pZDogRnVuY3Rpb24gSWQKKyAqIEB2cGF0aF9tYXNrOiB2cGF0aCBiaXQgbWFzaworICogQGZ3X3ZlcnNpb246IEZpcm13YXJlIHZlcnNpb24KKyAqIEBmd19kYXRlOiBGaXJtd2FyZSBEYXRlCisgKiBAZmxhc2hfdmVyc2lvbjogRmlybXdhcmUgdmVyc2lvbgorICogQGZsYXNoX2RhdGU6IEZpcm13YXJlIERhdGUKKyAqIEBtYWNfYWRkcnM6IE1hYyBhZGRyZXNzZXMgZm9yIGVhY2ggdnBhdGgKKyAqIEBtYWNfYWRkcl9tYXNrczogTWFjIGFkZHJlc3MgbWFza3MgZm9yIGVhY2ggdnBhdGgKKyAqCisgKiBSZXR1cm5zIHRoZSB2cGF0aCBtYXNrIHRoYXQgaGFzIHRoZSBiaXRzIHNldCBmb3IgZWFjaCB2cGF0aCBhbGxvY2F0ZWQKKyAqIGZvciB0aGUgZHJpdmVyIGFuZCB0aGUgZmlyc3QgbWFjIGFkZHJlc3MgZm9yIGVhY2ggdnBhdGgKKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8geworCXUzMgkJaG9zdF90eXBlOworI2RlZmluZSBWWEdFX0hXX05PX01SX05PX1NSX05PUk1BTF9GVU5DVElPTgkJCTAKKyNkZWZpbmUgVlhHRV9IV19NUl9OT19TUl9WSDBfQkFTRV9GVU5DVElPTgkJCTEKKyNkZWZpbmUgVlhHRV9IV19OT19NUl9TUl9WSDBfRlVOQ1RJT04wCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19OT19NUl9TUl9WSDBfVklSVFVBTF9GVU5DVElPTgkJCTMKKyNkZWZpbmUgVlhHRV9IV19NUl9TUl9WSDBfSU5WQUxJRF9DT05GSUcJCQk0CisjZGVmaW5lIFZYR0VfSFdfU1JfVkhfRlVOQ1RJT04wCQkJCQk1CisjZGVmaW5lIFZYR0VfSFdfU1JfVkhfVklSVFVBTF9GVU5DVElPTgkJCQk2CisjZGVmaW5lIFZYR0VfSFdfVkhfTk9STUFMX0ZVTkNUSU9OCQkJCTcKKwl1NjQJCWZ1bmN0aW9uX21vZGU7CisjZGVmaW5lIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTgkJCTAKKyNkZWZpbmUgVlhHRV9IV19GVU5DVElPTl9NT0RFX1NJTkdMRV9GVU5DVElPTgkJCTEKKyNkZWZpbmUgVlhHRV9IV19GVU5DVElPTl9NT0RFX1NSSU9WCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19GVU5DVElPTl9NT0RFX01SSU9WCQkJCTMKKwl1MzIJCWZ1bmNfaWQ7CisJdTY0CQl2cGF0aF9tYXNrOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV92ZXJzaW9uIGZ3X3ZlcnNpb247CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgICAgZndfZGF0ZTsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiBmbGFzaF92ZXJzaW9uOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlICAgIGZsYXNoX2RhdGU7CisJdTgJCXNlcmlhbF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTl07CisJdTgJCXBhcnRfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU5dOworCXU4CQlwcm9kdWN0X2Rlc2NbVlhHRV9IV19JTkZPX0xFTl07CisJdTggKG1hY19hZGRycylbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU11bRVRIX0FMRU5dOworCXU4IChtYWNfYWRkcl9tYXNrcylbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU11bRVRIX0FMRU5dOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciAtIERldmljZSBtZW1vcnkgc3BhY2VzLgorICogQGJhcjA6IEJBUjAgdmlydHVhbCBhZGRyZXNzLgorICogQGJhcjE6IEJBUjEgdmlydHVhbCBhZGRyZXNzLgorICogQGJhcjI6IEJBUjIgdmlydHVhbCBhZGRyZXNzLgorICogQHBkZXY6IFBDSSBkZXZpY2Ugb2JqZWN0LgorICoKKyAqIERldmljZSBtZW1vcnkgc3BhY2VzLiBJbmNsdWRlcyBjb25maWd1cmF0aW9uLCBCQVIwLCBCQVIxLCBldGMuIHBlciBkZXZpY2UKKyAqIG1hcHBlZCBtZW1vcmllcy4gQWxzbywgaW5jbHVkZXMgYSBwb2ludGVyIHRvIE9TLXNwZWNpZmljIFBDSSBkZXZpY2Ugb2JqZWN0LgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciB7CisJdm9pZCBfX2lvbWVtCQkqYmFyMDsKKwl2b2lkIF9faW9tZW0JCSpiYXIxOworCXZvaWQgX19pb21lbQkJKmJhcjI7CisJc3RydWN0IHBjaV9kZXYgCQkqcGRldjsKKwlzdHJ1Y3QgdnhnZV9od191bGRfY2JzCXVsZF9jYWxsYmFja3M7Cit9OworCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX0xJTktfU1RBVEVfU0VUKGhsZGV2LCBscykJKGhsZGV2LT5saW5rX3N0YXRlID0gbHMpCisKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVChtMCwgbTEsIGkpIHsJXAorCWlmIChpIDwgMTYpIHsJCQkJXAorCQltMFswXSB8PSB2eGdlX3ZCSVQoMHg4LCAoaSo0KSwgNCk7CVwKKwkJbTBbMV0gfD0gdnhnZV92QklUKDB4NCwgKGkqNCksIDQpOwlcCisJfQkJCSAgICAgICAJCVwKKwllbHNlIHsJCQkJCVwKKwkJbTFbMF0gPSAweDgwMDAwMDAwOwkJXAorCQltMVsxXSA9IDB4NDAwMDAwMDA7CQlcCisJfQkJCQkJXAorfQorCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX1RJTV9JTlRfTUFTS19SRVNFVChtMCwgbTEsIGkpIHsJXAorCWlmIChpIDwgMTYpIHsJCQkJCVwKKwkJbTBbMF0gJj0gfnZ4Z2VfdkJJVCgweDgsIChpKjQpLCA0KTsJCVwKKwkJbTBbMV0gJj0gfnZ4Z2VfdkJJVCgweDQsIChpKjQpLCA0KTsJCVwKKwl9CQkJCQkJXAorCWVsc2UgewkJCQkJCVwKKwkJbTFbMF0gPSAwOwkJCQlcCisJCW0xWzFdID0gMDsJCQkJXAorCX0JCQkJCQlcCit9CisKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfU1RBVFNfUElPX1JFQUQobG9jLCBvZmZzZXQpIHsJCVwKKwlzdGF0dXMgPSB2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoaGxkZXYsIFwKKwkJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsIFwKKwkJCQlsb2MsIFwKKwkJCQlvZmZzZXQsIFwKKwkJCQkmdmFsNjQpOwkJCVwKKwkJCQkJCQkJXAorCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykJCQkJXAorCQlyZXR1cm4gc3RhdHVzOwkJCQkJCVwKK30KKworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1NUQVRTX1BJT19SRUFEKG9mZnNldCkgewkJCQlcCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2Vzcyh2cGF0aCwgXAorCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELCBcCisJCQlvZmZzZXQsIFwKKwkJCSZ2YWw2NCk7CQkJCQlcCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQkJCQkJXAorCQlyZXR1cm4gc3RhdHVzOwkJCQkJCVwKK30KKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAtIFJpbmcgY2hhbm5lbC4KKyAqIEBjaGFubmVsOiBDaGFubmVsICJiYXNlIiBvZiB0aGlzIHJpbmcsIHRoZSBjb21tb24gcGFydCBvZiBhbGwgSFcKKyAqICAgICAgICAgICBjaGFubmVscy4KKyAqIEBtZW1wb29sOiBNZW1vcnkgcG9vbCwgdGhlIHBvb2wgZnJvbSB3aGljaCBkZXNjcmlwdG9ycyBnZXQgYWxsb2NhdGVkLgorICogICAgICAgICAgIChTZWUgdnhnZV9od19tbS5oKS4KKyAqIEBjb25maWc6IFJpbmcgY29uZmlndXJhdGlvbiwgcGFydCBvZiBkZXZpY2UgY29uZmlndXJhdGlvbgorICogICAgICAgICAgKHNlZSBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlne30pLgorICogQHJpbmdfbGVuZ3RoOiBMZW5ndGggb2YgdGhlIHJpbmcKKyAqIEBidWZmZXJfbW9kZTogMSwgMywgb3IgNS4gVGhlIHZhbHVlIHNwZWNpZmllcyBhIHJlY2VpdmUgYnVmZmVyIG1vZGUsCisgKiAgICAgICAgICBhcyBwZXIgVGl0YW4gVXNlciBHdWlkZS4KKyAqIEByeGRfc2l6ZTogUnhEIHNpemVzIGZvciAxLSwgMy0gb3IgNS0gYnVmZmVyIG1vZGVzLiBBcyBwZXIgVGl0YW4gc3BlYywKKyAqICAgICAgICAgICAgMS1idWZmZXIgbW9kZSBkZXNjcmlwdG9yIGlzIDMyIGJ5dGUgbG9uZywgZXRjLgorICogQHJ4ZF9wcml2X3NpemU6IFBlciBSeEQgc2l6ZSByZXNlcnZlZCAoYnkgSFcpIGZvciBkcml2ZXIgdG8ga2VlcAorICogICAgICAgICAgICAgICAgIHBlci1kZXNjcmlwdG9yIGRhdGEgKGUuZy4sIERNQSBoYW5kbGUgZm9yIFNvbGFyaXMpCisgKiBAcGVyX3J4ZF9zcGFjZTogUGVyIHJ4ZCBzcGFjZSByZXF1ZXN0ZWQgYnkgZHJpdmVyCisgKiBAcnhkc19wZXJfYmxvY2s6IE51bWJlciBvZiBkZXNjcmlwdG9ycyBwZXIgaGFyZHdhcmUtZGVmaW5lZCBSeEQKKyAqICAgICAgICAgICAgICAgICAgYmxvY2suIERlcGVuZHMgb24gdGhlICgxLSwgMy0sIDUtKSBidWZmZXIgbW9kZS4KKyAqIEByeGRibG9ja19wcml2X3NpemU6IFJlc2VydmVkIGF0IHRoZSBlbmQgb2YgZWFjaCBSeEQgYmxvY2suIEhXIGludGVybmFsCisgKiAgICAgICAgICAgICAgICAgICAgICB1c2FnZS4gTm90IHRvIGNvbmZ1c2Ugd2l0aCBAcnhkX3ByaXZfc2l6ZS4KKyAqIEBjbXBsX2NudDogQ29tcGxldGlvbiBjb3VudGVyLiBJcyByZXNldCB0byB6ZXJvIHVwb24gZW50ZXJpbmcgdGhlIElTUi4KKyAqIEBjYWxsYmFjazogQ2hhbm5lbCBjb21wbGV0aW9uIGNhbGxiYWNrLiBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIHRoZXJlCisgKiAgICAgICAgICAgIGFyZSBuZXcgY29tcGxldGlvbnMgb24gdGhhdCBjaGFubmVsLiBJbiBtYW55IGltcGxlbWVudGF0aW9ucworICogICAgICAgICAgICB0aGUgQGNhbGxiYWNrIGV4ZWN1dGVzIGluIHRoZSBodyBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIEByeGRfaW5pdDogQ2hhbm5lbCdzIGRlc2NyaXB0b3ItaW5pdGlhbGl6ZSBjYWxsYmFjay4KKyAqICAgICAgICAgICAgU2VlIHZ4Z2VfaHdfcmluZ19yeGRfaW5pdF9me30uCisgKiAgICAgICAgICAgIElmIG5vdCBOVUxMLCBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIG9wZW5pbmcKKyAqICAgICAgICAgICAgdGhlIHJpbmcuCisgKiBAcnhkX3Rlcm06IENoYW5uZWwncyBkZXNjcmlwdG9yLXRlcm1pbmF0ZSBjYWxsYmFjay4gSWYgbm90IE5VTEwsCisgKiAgICAgICAgICBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIGNsb3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbm5lbC4KKyAqICAgICAgICAgIFNlZSBhbHNvIHZ4Z2VfaHdfY2hhbm5lbF9yeGRfdGVybV9me30uCisgKiBAc3RhdHM6IFN0YXRpc3RpY3MgZm9yIHJpbmcKKyAqIFJpbmcgY2hhbm5lbC4KKyAqCisgKiBOb3RlOiBUaGUgc3RydWN0dXJlIGlzIGNhY2hlIGxpbmUgYWxpZ25lZCB0byBiZXR0ZXIgdXRpbGl6ZQorICogICAgICAgQ1BVIGNhY2hlIHBlcmZvcm1hbmNlLgorICovCitzdHJ1Y3QgX192eGdlX2h3X3JpbmcgeworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbAkJY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sCQkJKm1lbXBvb2w7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnCQlfX2lvbWVtCSp2cF9yZWc7CisJc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZwkJX19pb21lbQkqY29tbW9uX3JlZzsKKwl1MzIJCQkJCXJpbmdfbGVuZ3RoOworCXUzMgkJCQkJYnVmZmVyX21vZGU7CisJdTMyCQkJCQlyeGRfc2l6ZTsKKwl1MzIJCQkJCXJ4ZF9wcml2X3NpemU7CisJdTMyCQkJCQlwZXJfcnhkX3NwYWNlOworCXUzMgkJCQkJcnhkc19wZXJfYmxvY2s7CisJdTMyCQkJCQlyeGRibG9ja19wcml2X3NpemU7CisJdTMyCQkJCQljbXBsX2NudDsKKwl1MzIJCQkJCXZwX2lkOworCXUzMgkJCQkJZG9vcmJlbGxfY250OworCXUzMgkJCQkJdG90YWxfZGJfY250OworCXU2NAkJCQkJcnhkc19saW1pdDsKKworCWVudW0gdnhnZV9od19zdGF0dXMgKCpjYWxsYmFjaykoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoLAorCQkJdm9pZCAqcnhkaCwKKwkJCXU4IHRfY29kZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCWVudW0gdnhnZV9od19zdGF0dXMgKCpyeGRfaW5pdCkoCisJCQl2b2lkICpyeGRoLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJdm9pZCAoKnJ4ZF90ZXJtKSgKKwkJCXZvaWQgKnJ4ZGgsCisJCQllbnVtIHZ4Z2VfaHdfcnhkX3N0YXRlIHN0YXRlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfcmluZ19pbmZvICpzdGF0cwlfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWcJCSpjb25maWc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od190eGRsX3N0YXRlIC0gRGVzY3JpcHRvciAoVFhETCkgc3RhdGUuCisgKiBAVlhHRV9IV19UWERMX1NUQVRFX05PTkU6IEludmFsaWQgc3RhdGUuCisgKiBAVlhHRV9IV19UWERMX1NUQVRFX0FWQUlMOiBEZXNjcmlwdG9yIGlzIGF2YWlsYWJsZSBmb3IgcmVzZXJ2YXRpb24uCisgKiBAVlhHRV9IV19UWERMX1NUQVRFX1BPU1RFRDogRGVzY3JpcHRvciBpcyBwb3N0ZWQgZm9yIHByb2Nlc3NpbmcgYnkgdGhlCisgKiBkZXZpY2UuCisgKiBAVlhHRV9IV19UWERMX1NUQVRFX0ZSRUVEOiBEZXNjcmlwdG9yIGlzIGZyZWUgYW5kIGNhbiBiZSByZXVzZWQgZm9yCisgKiBmaWxsaW5nLWluIGFuZCBwb3N0aW5nIGxhdGVyLgorICoKKyAqIFRpdGFuL0hXIGRlc2NyaXB0b3Igc3RhdGVzLgorICoKKyAqLworZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGUgeworCVZYR0VfSFdfVFhETF9TVEFURV9OT05FCT0gMCwKKwlWWEdFX0hXX1RYRExfU1RBVEVfQVZBSUwJPSAxLAorCVZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQJPSAyLAorCVZYR0VfSFdfVFhETF9TVEFURV9GUkVFRAk9IDMKK307CisvKgorICogc3RydWN0IF9fdnhnZV9od19maWZvIC0gRmlmby4KKyAqIEBjaGFubmVsOiBDaGFubmVsICJiYXNlIiBvZiB0aGlzIGZpZm8sIHRoZSBjb21tb24gcGFydCBvZiBhbGwgSFcKKyAqICAgICAgICAgICAgIGNoYW5uZWxzLgorICogQG1lbXBvb2w6IE1lbW9yeSBwb29sLCBmcm9tIHdoaWNoIGRlc2NyaXB0b3JzIGdldCBhbGxvY2F0ZWQuCisgKiBAY29uZmlnOiBGaWZvIGNvbmZpZ3VyYXRpb24sIHBhcnQgb2YgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgIChzZWUgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ3t9KS4KKyAqIEBpbnRlcnJ1cHRfdHlwZTogSW50ZXJydXB0IHR5cGUgdG8gYmUgdXNlZAorICogQG5vX3Nub29wX2JpdHM6IFNlZSBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZ3t9LgorICogQHR4ZGxfcGVyX21lbWJsb2NrOiBOdW1iZXIgb2YgVHhETHMgKFR4RCBsaXN0cykgcGVyIG1lbWJsb2NrLgorICogICAgICAgICAgICAgb24gVHhETCBwbGVhc2UgcmVmZXIgdG8gVGl0YW4gVUcuCisgKiBAdHhkbF9zaXplOiBDb25maWd1cmVkIFR4REwgc2l6ZSAoaS5lLiwgbnVtYmVyIG9mIFR4RHMgaW4gYSBsaXN0KSwgcGx1cworICogICAgICAgICAgICAgcGVyLVR4REwgSFcgcHJpdmF0ZSBzcGFjZSAoc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdikuCisgKiBAcHJpdl9zaXplOiBQZXItVHggZGVzY3JpcHRvciBzcGFjZSByZXNlcnZlZCBmb3IgZHJpdmVyCisgKiAgICAgICAgICAgICB1c2FnZS4KKyAqIEBwZXJfdHhkbF9zcGFjZTogUGVyIHR4ZGwgcHJpdmF0ZSBzcGFjZSBmb3IgdGhlIGRyaXZlcgorICogQGNhbGxiYWNrOiBGaWZvIGNvbXBsZXRpb24gY2FsbGJhY2suIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlcmUKKyAqICAgICAgICAgICAgIGFyZSBuZXcgY29tcGxldGlvbnMgb24gdGhhdCBmaWZvLiBJbiBtYW55IGltcGxlbWVudGF0aW9ucworICogICAgICAgICAgICAgdGhlIEBjYWxsYmFjayBleGVjdXRlcyBpbiB0aGUgaHcgaW50ZXJydXB0IGNvbnRleHQuCisgKiBAdHhkbF90ZXJtOiBGaWZvJ3MgZGVzY3JpcHRvci10ZXJtaW5hdGUgY2FsbGJhY2suIElmIG5vdCBOVUxMLAorICogICAgICAgICAgICAgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBjbG9zaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZpZm8uCisgKiAgICAgICAgICAgICBTZWUgYWxzbyB2eGdlX2h3X2ZpZm9fdHhkbF90ZXJtX2Z7fS4KKyAqIEBzdGF0czogU3RhdGlzdGljcyBvZiB0aGlzIGZpZm8KKyAqCisgKiBGaWZvIGNoYW5uZWwuCisgKiBOb3RlOiBUaGUgc3RydWN0dXJlIGlzIGNhY2hlIGxpbmUgYWxpZ25lZC4KKyAqLworc3RydWN0IF9fdnhnZV9od19maWZvIHsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwJCWNoYW5uZWw7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbAkJCSptZW1wb29sOworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnCQkqY29uZmlnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZwkJX19pb21lbSAqdnBfcmVnOworCXN0cnVjdCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfd3JhcHBlcglfX2lvbWVtICpub2ZsX2RiOworCXU2NAkJCQkJaW50ZXJydXB0X3R5cGU7CisJdTMyCQkJCQlub19zbm9vcF9iaXRzOworCXUzMgkJCQkJdHhkbF9wZXJfbWVtYmxvY2s7CisJdTMyCQkJCQl0eGRsX3NpemU7CisJdTMyCQkJCQlwcml2X3NpemU7CisJdTMyCQkJCQlwZXJfdHhkbF9zcGFjZTsKKwl1MzIJCQkJCXZwX2lkOworCXUzMgkJCQkJdHhfaW50cl9udW07CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqY2FsbGJhY2spKAorCQkJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2hhbmRsZSwKKwkJCXZvaWQgKnR4ZGxoLAorCQkJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlLAorCQkJdm9pZCAqdXNlcmRhdGEsCisJCQl2b2lkICoqc2tiX3B0cik7CisKKwl2b2lkICgqdHhkbF90ZXJtKSgKKwkJCXZvaWQgKnR4ZGxoLAorCQkJZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGUgc3RhdGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8gKnN0YXRzIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisvKgorICogc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAtIFRyYW5zbWl0IGRlc2NyaXB0b3IgSFctcHJpdmF0ZSBkYXRhLgorICogQGRtYV9hZGRyOiBETUEgKG1hcHBlZCkgYWRkcmVzcyBvZiBfdGhpc18gZGVzY3JpcHRvci4KKyAqIEBkbWFfaGFuZGxlOiBETUEgaGFuZGxlIHVzZWQgdG8gbWFwIHRoZSBkZXNjcmlwdG9yIG9udG8gZGV2aWNlLgorICogQGRtYV9vZmZzZXQ6IERlc2NyaXB0b3IncyBvZmZzZXQgaW4gdGhlIG1lbW9yeSBibG9jay4gSFcgYWxsb2NhdGVzCisgKgkgZGVzY3JpcHRvcnMgaW4gbWVtb3J5IGJsb2NrcyAoc2VlIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlne30pCisgKiAgICAgICAgICAgICBFYWNoIG1lbWJsb2NrIGlzIGEgY29udGlndW91cyBibG9jayBvZiBETUEtYWJsZSBtZW1vcnkuCisgKiBAZnJhZ3M6IFRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMgKHRoYXQgaXMsIGNvbnRpZ3VvdXMgZGF0YSBidWZmZXJzKQorICogY2FycmllZCBieSB0aGlzIFR4REwuCisgKiBAYWxpZ25fdmFkZHJfc3RhcnQ6IEFsaWduZWQgdmlydHVhbCBhZGRyZXNzIHN0YXJ0CisgKiBAYWxpZ25fdmFkZHI6IFZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgcGVyLVR4REwgYXJlYSBpbiBtZW1vcnkgdXNlZCBmb3IKKyAqICAgICAgICAgICAgIGFsaWduZW1lbnQuIFVzZWQgdG8gcGxhY2Ugb25lIG9yIG1vcmUgbWlzLWFsaWduZWQgZnJhZ21lbnRzCisgKiBAYWxpZ25fZG1hX2FkZHI6IERNQSBhZGRyZXNzIHRyYW5zbGF0ZWQgZnJvbSB0aGUgQGFsaWduX3ZhZGRyLgorICogQGFsaWduX2RtYV9oYW5kbGU6IERNQSBoYW5kbGUgdGhhdCBjb3JyZXNwb25kcyB0byBAYWxpZ25fZG1hX2FkZHIuCisgKiBAYWxpZ25fZG1hX2FjY2g6IERNQSBhY2Nlc3MgaGFuZGxlIGNvcnJlc3BvbmRzIHRvIEBhbGlnbl9kbWFfYWRkci4KKyAqIEBhbGlnbl9kbWFfb2Zmc2V0OiBUaGUgY3VycmVudCBvZmZzZXQgaW50byB0aGUgQGFsaWduX3ZhZGRyIGFyZWEuCisgKiBHcm93cyB3aGlsZSBmaWxsaW5nIHRoZSBkZXNjcmlwdG9yLCBnZXRzIHJlc2V0LgorICogQGFsaWduX3VzZWRfZnJhZ3M6IE51bWJlciBvZiBmcmFnbWVudHMgdXNlZC4KKyAqIEBhbGxvY19mcmFnczogVG90YWwgbnVtYmVyIG9mIGZyYWdtZW50cyBhbGxvY2F0ZWQuCisgKiBAdW51c2VkOiBUT0RPCisgKiBAbmV4dF90eGRsX3ByaXY6IChUT0RPKS4KKyAqIEBmaXJzdF90eGRwOiAoVE9ETykuCisgKiBAbGlua2VkX3R4ZGxfcHJpdjogUG9pbnRlciB0byBhbnkgbGlua2VkIFR4REwgZm9yIGNyZWF0aW5nIGNvbnRpZ3VvdXMKKyAqICAgICAgICAgICAgIFR4REwgbGlzdC4KKyAqIEB0eGRsaDogQ29ycmVzcG9uZGluZyB0eGRsaCB0byB0aGlzIFR4REwuCisgKiBAbWVtYmxvY2s6IFBvaW50ZXIgdG8gdGhlIFR4REwgbWVtb3J5IGJsb2NrIG9yIG1lbW9yeSBwYWdlLgorICogICAgICAgICAgICAgb24gdGhlIG5leHQgc2VuZCBvcGVyYXRpb24uCisgKiBAZG1hX29iamVjdDogRE1BIGFkZHJlc3MgYW5kIGhhbmRsZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgY29udGFpbnMKKyAqICAgICAgICAgICAgIHRoZSBkZXNjcmlwdG9yLiBUaGlzIG1lbWJlciBpcyB1c2VkIG9ubHkgaW4gdGhlICJjaGVja2VkIgorICogICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgSFcgKHRvIGVuZm9yY2UgY2VydGFpbiBhc3NlcnRpb25zKTsKKyAqICAgICAgICAgICAgIG90aGVyd2lzZSBpdCBnZXRzIGNvbXBpbGVkIG91dC4KKyAqIEBhbGxvY2F0ZWQ6IFRydWUgaWYgdGhlIGRlc2NyaXB0b3IgaXMgcmVzZXJ2ZWQsIDAgb3RoZXJ3aXNlLiBJbnRlcm5hbCB1c2FnZS4KKyAqCisgKiBQZXItdHJhbnNtaXQgZGVjc3JpcHRvciBIVy1wcml2YXRlIGRhdGEuIEhXIHVzZXMgdGhlIHNwYWNlIHRvIGtlZXAgRE1BCisgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2NyaXB0b3IuIE5vdGUgdGhhdCBkcml2ZXIgY2FuIGFzayBIVworICogdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBwZXItZGVzY3JpcHRvciBzcGFjZSBmb3IgaXRzIG93biAoZHJpdmVyLXNwZWNpZmljKQorICogcHVycG9zZXMuCisgKgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX3ByaXZ7fS4KKyAqLworc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiB7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IHBjaV9kZXYJKmRtYV9oYW5kbGU7CisJcHRyZGlmZl90CQlkbWFfb2Zmc2V0OworCXUzMgkJCQlmcmFnczsKKwl1OAkJCQkqYWxpZ25fdmFkZHJfc3RhcnQ7CisJdTgJCQkJKmFsaWduX3ZhZGRyOworCWRtYV9hZGRyX3QJCWFsaWduX2RtYV9hZGRyOworCXN0cnVjdCBwY2lfZGV2IAkqYWxpZ25fZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgcGNpX2RldgkqYWxpZ25fZG1hX2FjY2g7CisJcHRyZGlmZl90CQlhbGlnbl9kbWFfb2Zmc2V0OworCXUzMgkJCQlhbGlnbl91c2VkX2ZyYWdzOworCXUzMgkJCQlhbGxvY19mcmFnczsKKwl1MzIJCQkJdW51c2VkOworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYJKm5leHRfdHhkbF9wcml2OworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkCQkqZmlyc3RfdHhkcDsKKwl2b2lkCQkJKm1lbWJsb2NrOworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfd3JhcHBlciAtIE5vbi1vZmZsb2FkIERvb3JiZWxsIFdyYXBwZXIKKyAqIEBjb250cm9sXzA6IEJpdHMgMCB0byA3IC0gRG9vcmJlbGwgdHlwZS4KKyAqICAgICAgICAgICAgIEJpdHMgOCB0byAzMSAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0cyAzMiB0byAzOSAtIFRoZSBoaWdoZXN0IFR4RCBpbiB0aGlzIFR4REwuCisgKiAgICAgICAgICAgICBCaXRzIDQwIHRvIDQ3IC0gUmVzZXJ2ZWQuCisJKgkgICAgICAgQml0cyA0OCB0byA1NSAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0cyA1NiB0byA2MyAtIE5vIHNub29wIGZsYWdzLgorICogQHR4ZGxfcHRyOiAgVGhlIHN0YXJ0aW5nIGxvY2F0aW9uIG9mIHRoZSBUeERMIGluIGhvc3QgbWVtb3J5LgorICoKKyAqIENyZWF0ZWQgYnkgdGhlIGhvc3QgYW5kIHdyaXR0ZW4gdG8gdGhlIGFkYXB0ZXIgdmlhIFBJTyB0byBhIEtlcm5lbCBEb29yYmVsbAorICogRklGTy4gQWxsIG5vbi1vZmZsb2FkIGRvb3JiZWxsIHdyYXBwZXIgZmllbGRzIG11c3QgYmUgd3JpdHRlbiBieSB0aGUgaG9zdCBhcworICogcGFydCBvZiBhIGRvb3JiZWxsIHdyaXRlLiBDb25zdW1lZCBieSB0aGUgYWRhcHRlciBidXQgaXMgbm90IHdyaXR0ZW4gYnkgdGhlCisgKiBhZGFwdGVyLgorICovCitzdHJ1Y3QgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3dyYXBwZXIgeworCXU2NAkJY29udHJvbF8wOworI2RlZmluZQlWWEdFX0hXX05PREJXX0dFVF9UWVBFKGN0cmwwKQkJCXZ4Z2VfYlZBTG4oY3RybDAsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfTk9EQldfVFlQRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfTk9EQldfVFlQRV9OT0RCVwkJCQkwCisKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19HRVRfTEFTVF9UWERfTlVNQkVSKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19OT0RCV19MQVNUX1RYRF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKworI2RlZmluZQlWWEdFX0hXX05PREJXX0dFVF9OT19TTk9PUChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDU2LCA4KQorI2RlZmluZSBWWEdFX0hXX05PREJXX0xJU1RfTk9fU05PT1AodmFsKSB2eGdlX3ZCSVQodmFsLCA1NiwgOCkKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19MSVNUX05PX1NOT09QX1RYRF9SRUFEX1RYRDBfV1JJVEUJCTB4MgorI2RlZmluZQlWWEdFX0hXX05PREJXX0xJU1RfTk9fU05PT1BfVFhfRlJBTUVfREFUQV9SRUFECQkweDEKKworCXU2NAkJdHhkbF9wdHI7Cit9OworCisvKgorICogVFggRGVzY3JpcHRvcgorICovCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgLSBUcmFuc21pdCBEZXNjcmlwdG9yCisgKiBAY29udHJvbF8wOiBCaXRzIDAgdG8gNiAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0IDcgLSBMaXN0IE93bmVyc2hpcC4gVGhpcyBmaWVsZCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQKKyAqICAgICAgICAgICAgIHRvICcxJyBieSB0aGUgZHJpdmVyIGJlZm9yZSB0aGUgdHJhbnNtaXQgbGlzdCBwb2ludGVyIGlzCisgKiAgICAgICAgICAgICB3cml0dGVuIHRvIHRoZSBhZGFwdGVyLiBUaGlzIGZpZWxkIHdpbGwgYmUgc2V0IHRvICcwJyBieSB0aGUKKyAqICAgICAgICAgICAgIGFkYXB0ZXIgb25jZSBpdCBoYXMgY29tcGxldGVkIHRyYW5zbWl0dGluZyB0aGUgZnJhbWUgb3IgZnJhbWVzIGluCisgKiAgICAgICAgICAgICB0aGUgbGlzdC4gTm90ZSAtIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpbiBUeEQwLiBBZGRpdGlvbmFsbHksCisgKiAgICAgICAgICAgICBmb3IgbXVsdGktbGlzdCBzZXF1ZW5jZXMsIHRoZSBkcml2ZXIgc2hvdWxkIG5vdCByZWxlYXNlIGFueQorICogICAgICAgICAgICAgYnVmZmVycyB1bnRpbCB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXN0IGxpc3QgaW4gdGhlIG11bHRpLWxpc3QKKyAqICAgICAgICAgICAgIHNlcXVlbmNlIGhhcyBiZWVuIHJldHVybmVkIHRvIHRoZSBob3N0LgorICogICAgICAgICAgICAgQml0cyA4IHRvIDExIC0gUmVzZXJ2ZWQKKyAqICAgICAgICAgICAgIEJpdHMgMTIgdG8gMTUgLSBUcmFuc2Zlcl9Db2RlLiBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4KKyAqICAgICAgICAgICAgIFR4RDAuIEl0IGlzIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXQgZGF0YQorICogICAgICAgICAgICAgYnVmZmVyIHRyYW5zZmVyLiBUaGlzIGZpZWxkIGlzIGFsd2F5cyBvdmVyd3JpdHRlbiBieSB0aGUKKyAqICAgICAgICAgICAgIGFkYXB0ZXIsIHNvIHRoaXMgZmllbGQgbWF5IGJlIGluaXRpYWxpemVkIHRvIGFueSB2YWx1ZS4KKyAqICAgICAgICAgICAgIEJpdHMgMTYgdG8gMTcgLSBIb3N0IHN0ZWVyaW5nLiBUaGlzIGZpZWxkIGFsbG93cyB0aGUgaG9zdCB0bworICogICAgICAgICAgICAgb3ZlcnJpZGUgdGhlIHNlbGVjdGlvbiBvZiB0aGUgcGh5c2ljYWwgdHJhbnNtaXQgcG9ydC4KKyAqICAgICAgICAgICAgIEF0dGVudGlvbjoKKyAqICAgICAgICAgICAgIE5vcm1hbCBzb3VuZHMgYXMgaWYgbGVhcm5lZCBmcm9tIHRoZSBzd2l0Y2ggcmF0aGVyIHRoYW4gZnJvbQorICogICAgICAgICAgICAgdGhlIGFnZ3JlZ2F0aW9uIGFsZ29yeXRobXMuCisgKiAgICAgICAgICAgICAwMDogTm9ybWFsLiBVc2UgRGVzdGluYXRpb24vTUFDIEFkZHJlc3MKKyAqICAgICAgICAgICAgIGxvb2t1cCB0byBkZXRlcm1pbmUgdGhlIHRyYW5zbWl0IHBvcnQuCisgKiAgICAgICAgICAgICAwMTogU2VuZCBvbiBwaHlzaWNhbCBQb3J0MS4KKyAqICAgICAgICAgICAgIDEwOiBTZW5kIG9uIHBoeXNpY2FsIFBvcnQwLgorCSoJICAgICAgIDExOiBTZW5kIG9uIGJvdGggcG9ydHMuCisgKiAgICAgICAgICAgICBCaXRzIDE4IHRvIDIxIC0gUmVzZXJ2ZWQKKyAqICAgICAgICAgICAgIEJpdHMgMjIgdG8gMjMgLSBHYXRoZXJfQ29kZS4gVGhpcyBmaWVsZCBpcyBzZXQgYnkgdGhlIGhvc3QgYW5kCisgKiAgICAgICAgICAgICBpcyB1c2VkIHRvIGRlc2NyaWJlIGhvdyBpbmRpdmlkdWFsIGJ1ZmZlcnMgY29tcHJpc2UgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIDEwOiBGaXJzdCBkZXNjcmlwdG9yIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICAwMDogTWlkZGxlIG9mIGEgbXVsdGktZGVzY3JpcHRvciBmcmFtZS4KKyAqICAgICAgICAgICAgIDAxOiBMYXN0IGRlc2NyaXB0b3Igb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIDExOiBGaXJzdCBhbmQgbGFzdCBkZXNjcmlwdG9yIG9mIGEgZnJhbWUgKHRoZSBlbnRpcmUgZnJhbWUKKyAqICAgICAgICAgICAgIHJlc2lkZXMgaW4gYSBzaW5nbGUgYnVmZmVyKS4KKyAqICAgICAgICAgICAgIEZvciBtdWx0aS1kZXNjcmlwdG9yIGZyYW1lcywgdGhlIG9ubHkgdmFsaWQgZ2F0aGVyIGNvZGUgc2VxdWVuY2UKKyAqICAgICAgICAgICAgIGlzIHsxMCwgWzAwXSwgMDF9LiBJbiBvdGhlciB3b3JkcywgdGhlIGRlc2NyaXB0b3JzIG11c3QgYmUgcGxhY2VkCisgKiAgICAgICAgICAgICBpbiB0aGUgbGlzdCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKyAqICAgICAgICAgICAgIEJpdHMgMjQgdG8gMjcgLSBSZXNlcnZlZAorICogICAgICAgICAgICAgQml0cyAyOCB0byAyOSAtIExTT19Gcm1fRW5jYXAuIExTTyBGcmFtZSBFbmNhcHN1bGF0aW9uCisgKiAgICAgICAgICAgICBkZWZpbml0aW9uLiBPbmx5IHZhbGlkIGluIFR4RDAuIFRoaXMgZmllbGQgYWxsb3dzIHRoZSBob3N0IHRvCisgKiAgICAgICAgICAgICBpbmRpY2F0ZSB0aGUgRXRoZXJuZXQgZW5jYXBzdWxhdGlvbiBvZiBhbiBvdXRib3VuZCBMU08gcGFja2V0LgorICogICAgICAgICAgICAgMDAgLSBjbGFzc2ljIG1vZGUgKGJlc3QgZ3Vlc3MpCisgKiAgICAgICAgICAgICAwMSAtIExMQworICogICAgICAgICAgICAgMTAgLSBTTkFQCisgKiAgICAgICAgICAgICAxMSAtIERJWAorICogICAgICAgICAgICAgSWYgImNsYXNzaWMgbW9kZSIgaXMgc2VsZWN0ZWQsIHRoZSBhZGFwdGVyIHdpbGwgYXR0ZW1wdCB0bworICogICAgICAgICAgICAgZGVjb2RlIHRoZSBmcmFtZSdzIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gYnkgZXhhbWluaW5nIHRoZSBML1QKKyAqICAgICAgICAgICAgIGZpZWxkIGFzIGZvbGxvd3M6CisgKiAgICAgICAgICAgICA8PSAweDA1REMgTExDL1NOQVAgZW5jb2Rpbmc7IG11c3QgZXhhbWluZSBEU0FQL1NTQVAgdG8gZGV0ZXJtaW5lCisgKiAgICAgICAgICAgICBpZiBwYWNrZXQgaXMgSVB2NCBvciBJUHY2LgorICogICAgICAgICAgICAgMHg4ODcwIEp1bWJvLVNOQVAgZW5jb2RpbmcuCisgKiAgICAgICAgICAgICAweDA4MDAgSVB2NCBESVggZW5jb2RpbmcKKyAqICAgICAgICAgICAgIDB4ODZERCBJUHY2IERJWCBlbmNvZGluZworICogICAgICAgICAgICAgb3RoZXJzIGlsbGVnYWwgZW5jYXBzdWxhdGlvbgorICogICAgICAgICAgICAgQml0cyAzMCAtIExTT18gRmxhZy4gTGFyZ2UgU2VuZCBPZmZsb2FkIChMU08pIGZsYWcuCisgKiAgICAgICAgICAgICBTZXQgdG8gMSB0byBwZXJmb3JtIHNlZ21lbnRhdGlvbiBvZmZsb2FkIGZvciBUQ1AvVURQLgorICogICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyB2YWxpZCBvbmx5IGluIFR4RDAuCisgKiAgICAgICAgICAgICBCaXRzIDMxIHRvIDMzIC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXRzIDM0IHRvIDQ3IC0gTFNPX01TUy4gVENQL1VEUCBMU08gTWF4aW11bSBTZWdtZW50IFNpemUKKyAqICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gTFNPX0NvbnRyb2wgaXMgbm9uLXplcm8uCisgKiAgICAgICAgICAgICBXaGVuIExTT19Db250cm9sIGlzIHNldCB0byBUQ1BfTFNPLCB0aGUgc2luZ2xlIChwb3NzaWJseSBsYXJnZSkKKyAqICAgICAgICAgICAgIFRDUCBzZWdtZW50IGRlc2NyaWJlZCBieSB0aGlzIFR4REwgd2lsbCBiZSBzZW50IGFzIGEgc2VyaWVzIG9mCisgKiAgICAgICAgICAgICBUQ1Agc2VnbWVudHMgZWFjaCBvZiB3aGljaCBjb250YWlucyBubyBtb3JlIHRoYW4gTFNPX01TUworICogICAgICAgICAgICAgcGF5bG9hZCBieXRlcy4KKyAqICAgICAgICAgICAgIFdoZW4gTFNPX0NvbnRyb2wgaXMgc2V0IHRvIFVEUF9MU08sIHRoZSBzaW5nbGUgKHBvc3NpYmx5IGxhcmdlKQorICogICAgICAgICAgICAgVURQIGRhdGFncmFtIGRlc2NyaWJlZCBieSB0aGlzIFR4REwgd2lsbCBiZSBzZW50IGFzIGEgc2VyaWVzIG9mCisgKiAgICAgICAgICAgICBVRFAgZGF0YWdyYW1zIGVhY2ggb2Ygd2hpY2ggY29udGFpbnMgbm8gbW9yZSB0aGFuIExTT19NU1MKKyAqICAgICAgICAgICAgIHBheWxvYWQgYnl0ZXMuCisgKiAgICAgICAgICAgICBBbGwgb3V0Z29pbmcgZnJhbWVzIGZyb20gdGhpcyBUeERMIHdpbGwgaGF2ZSBMU09fTVNTIGJ5dGVzIG9mIFVEUAorICogICAgICAgICAgICAgb3IgVENQIHBheWxvYWQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgbGFzdCwgd2hpY2ggd2lsbCBoYXZlCisgKiAgICAgICAgICAgICA8PSBMU09fTVNTIGJ5dGVzIG9mIHBheWxvYWQuCisgKiAgICAgICAgICAgICBCaXRzIDQ4IHRvIDYzIC0gQnVmZmVyX1NpemUuIE51bWJlciBvZiB2YWxpZCBieXRlcyBpbiB0aGUKKyAqICAgICAgICAgICAgIGJ1ZmZlciB0byBiZSByZWFkIGJ5IHRoZSBhZGFwdGVyLiBUaGlzIGZpZWxkIGlzIHdyaXR0ZW4gYnkgdGhlCisgKiAgICAgICAgICAgICBob3N0LiBBIHZhbHVlIG9mIDAgaXMgaWxsZWdhbC4KKyAqCSAgICAgICBCaXRzIDMyIHRvIDYzIC0gVGhpcyB2YWx1ZSBpcyB3cml0dGVuIGJ5IHRoZSBhZGFwdGVyIHVwb24KKyAqCSAgICAgICBjb21wbGV0aW9uIG9mIGEgVURQIG9yIFRDUCBMU08gb3BlcmF0aW9uIGFuZCBpbmRpY2F0ZXMgdGhlIG51bWJlcgorICogICAgICAgICAgICAgb2YgVURQIG9yIFRDUCBwYXlsb2FkIGJ5dGVzIHRoYXQgd2VyZSB0cmFuc21pdHRlZC4gMHgwMDAwIHdpbGwgYmUKKyAqICAgICAgICAgICAgIHJldHVybmVkIGZvciBhbnkgbm9uLUxTTyBvcGVyYXRpb24uCisgKiBAY29udHJvbF8xOiBCaXRzIDAgdG8gNCAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0IDUgLSBUeF9DS09fSVB2NCBTZXQgdG8gYSAnMScgdG8gZW5hYmxlIElQdjQgaGVhZGVyIGNoZWNrc3VtCisgKiAgICAgICAgICAgICBvZmZsb2FkLiBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0IDYgLSBUeF9DS09fVENQIFNldCB0byBhICcxJyB0byBlbmFibGUgVENQIGNoZWNrc3VtIG9mZmxvYWQuCisgKiAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZiBhIGZyYW1lICh0aGUgVHhEJ3MKKyAqICAgICAgICAgICAgIGdhdGhlciBjb2RlIG11c3QgYmUgMTAgb3IgMTEpLiBUaGUgZHJpdmVyIHNob3VsZCBvbmx5IHNldCB0aGlzCisgKiAgICAgICAgICAgICBiaXQgaWYgaXQgY2FuIGd1YXJhbnRlZSB0aGF0IFRDUCBpcyBwcmVzZW50LgorICogICAgICAgICAgICAgQml0IDcgLSBUeF9DS09fVURQIFNldCB0byBhICcxJyB0byBlbmFibGUgVURQIGNoZWNrc3VtIG9mZmxvYWQuCisgKiAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZiBhIGZyYW1lICh0aGUgVHhEJ3MKKyAqICAgICAgICAgICAgIGdhdGhlciBjb2RlIG11c3QgYmUgMTAgb3IgMTEpLiBUaGUgZHJpdmVyIHNob3VsZCBvbmx5IHNldCB0aGlzCisgKiAgICAgICAgICAgICBiaXQgaWYgaXQgY2FuIGd1YXJhbnRlZSB0aGF0IFVEUCBpcyBwcmVzZW50LgorICogICAgICAgICAgICAgQml0cyA4IHRvIDE0IC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXQgMTUgLSBUeF9WTEFOX0VuYWJsZSBWTEFOIHRhZyBpbnNlcnRpb24gZmxhZy4gU2V0IHRvIGEgJzEnIHRvCisgKiAgICAgICAgICAgICBpbnN0cnVjdCB0aGUgYWRhcHRlciB0byBpbnNlcnQgdGhlIFZMQU4gdGFnIHNwZWNpZmllZCBieSB0aGUKKyAqICAgICAgICAgICAgIFR4X1ZMQU5fVGFnIGZpZWxkLiBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZgorICogICAgICAgICAgICAgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdHMgMTYgdG8gMzEgLSBUeF9WTEFOX1RhZy4gVmFyaWFibGUgcG9ydGlvbiBvZiB0aGUgVkxBTiB0YWcKKyAqICAgICAgICAgICAgIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGZyYW1lIGJ5IHRoZSBhZGFwdGVyICh0aGUgZmlyc3QgdHdvIGJ5dGVzCisgKiAgICAgICAgICAgICBvZiBhIFZMQU4gdGFnIGFyZSBhbHdheXMgMHg4MTAwKS4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGlmIHRoZQorICogICAgICAgICAgICAgVHhfVkxBTl9FbmFibGUgZmllbGQgaXMgc2V0IHRvICcxJy4KKyAqICAgICAgICAgICAgIEJpdHMgMzIgdG8gMzMgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdHMgMzQgdG8gMzkgLSBUeF9JbnRfTnVtYmVyLiBJbmRpY2F0ZXMgd2hpY2ggVHggaW50ZXJydXB0CisgKiAgICAgICAgICAgICBudW1iZXIgdGhlIGZyYW1lIGFzc29jaWF0ZWQgd2l0aC4gVGhpcyBmaWVsZCBpcyB3cml0dGVuIGJ5IHRoZQorICogICAgICAgICAgICAgaG9zdC4gSXQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXRzIDQwIHRvIDQyIC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXQgNDMgLSBTZXQgdG8gMSB0byBleGNsdWRlIHRoZSBmcmFtZSBmcm9tIGJhbmR3aWR0aCBtZXRlcmluZworICogICAgICAgICAgICAgZnVuY3Rpb25zLiBUaGlzIGZpZWxkIGlzIHZhbGlkIG9ubHkgaW4gdGhlIGZpcnN0IFR4RAorICogICAgICAgICAgICAgb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdHMgNDQgdG8gNDUgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdCA0NiAtIFR4X0ludF9QZXJfTGlzdCBTZXQgdG8gYSAnMScgdG8gaW5zdHJ1Y3QgdGhlIGFkYXB0ZXIgdG8KKyAqICAgICAgICAgICAgIGdlbmVyYXRlIGFuIGludGVycnVwdCBhcyBzb29uIGFzIGFsbCBvZiB0aGUgZnJhbWVzIGluIHRoZSBsaXN0CisgKiAgICAgICAgICAgICBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuIEluIG9yZGVyIHRvIGhhdmUgcGVyLWZyYW1lIGludGVycnVwdHMsCisgKiAgICAgICAgICAgICB0aGUgZHJpdmVyIHNob3VsZCBwbGFjZSBhIG1heGltdW0gb2Ygb25lIGZyYW1lIHBlciBsaXN0LiBUaGlzCisgKiAgICAgICAgICAgICBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdCA0NyAtIFR4X0ludF9VdGlsaXphdGlvbiBTZXQgdG8gYSAnMScgdG8gaW5zdHJ1Y3QgdGhlIGFkYXB0ZXIKKyAqICAgICAgICAgICAgIHRvIGNvdW50IHRoZSBmcmFtZSB0b3dhcmQgdGhlIHV0aWxpemF0aW9uIGludGVycnVwdCBzcGVjaWZpZWQgaW4KKyAqICAgICAgICAgICAgIHRoZSBUeF9JbnRfTnVtYmVyIGZpZWxkLiBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0CisgKiAgICAgICAgICAgICBUeEQgb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdHMgNDggdG8gNjMgLSBSZXNlcnZlZC4KKyAqIEBidWZmZXJfcG9pbnRlcjogQnVmZmVyIHN0YXJ0IGFkZHJlc3MuCisgKiBAaG9zdF9jb250cm9sOiBIb3N0X0NvbnRyb2wuT3BhcXVlIDY0Yml0IGRhdGEgc3RvcmVkIGJ5IGRyaXZlciBpbnNpZGUgdGhlCisgKiAgICAgICAgICAgIFRpdGFuIGRlc2NyaXB0b3IgcHJpb3IgdG8gcG9zdGluZyB0aGUgbGF0dGVyIG9uIHRoZSBmaWZvCisgKiAgICAgICAgICAgIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkuVGhlICVob3N0X2NvbnRyb2wgaXMgcmV0dXJuZWQgYXMgaXMKKyAqICAgICAgICAgICAgdG8gdGhlIGRyaXZlciB3aXRoIGVhY2ggY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKgorICogVHJhbnNtaXQgZGVzY3JpcHRvciAoVHhEKS5GaWZvIGRlc2NyaXB0b3IgY29udGFpbnMgY29uZmlndXJlZCBudW1iZXIKKyAqIChsaXN0KSBvZiBUeERzLiAqIEZvciBtb3JlIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVzZXIgR3VpZGUsCisgKiBTZWN0aW9uIDUuNC4yICJUcmFuc21pdCBEZXNjcmlwdG9yIChUeEQpIEZvcm1hdCIuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkIHsKKwl1NjQgY29udHJvbF8wOworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0xJU1RfT1dOX0FEQVBURVIJCXZ4Z2VfbUJJVCg3KQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVF9DT0RFX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RfQ09ERSh2YWwpIAkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RfQ09ERV9VTlVTRUQJCVZYR0VfSFdfRklGT19UX0NPREVfVU5VU0VECisKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFKHZhbCkgCQl2eGdlX3ZCSVQodmFsLCAyMiwgMikKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9GSVJTVAlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1QKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9MQVNUCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9MQVNUCisKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0xTT19FTgkJCQl2eGdlX21CSVQoMzApCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9MU09fTVNTKHZhbCkgCQkJdnhnZV92QklUKHZhbCwgMzQsIDE0KQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfQlVGRkVSX1NJWkUodmFsKSAJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKworCXU2NCBjb250cm9sXzE7CisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVFhfQ0tPX0lQVjRfRU4JCQl2eGdlX21CSVQoNSkKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fVENQX0VOCQkJdnhnZV9tQklUKDYpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVFhfQ0tPX1VEUF9FTgkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1ZMQU5fRU5BQkxFCQkJdnhnZV9tQklUKDE1KQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVkxBTl9UQUcodmFsKSAJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9JTlRfTlVNQkVSKHZhbCkgCQl2eGdlX3ZCSVQodmFsLCAzNCwgNikKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9UWVBFX1BFUl9MSVNUCQl2eGdlX21CSVQoNDYpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfSU5UX1RZUEVfVVRJTFoJCQl2eGdlX21CSVQoNDcpCisKKwl1NjQgYnVmZmVyX3BvaW50ZXI7CisKKwl1NjQgaG9zdF9jb250cm9sOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xIC0gT25lIGJ1ZmZlciBtb2RlIFJ4RCBmb3IgcmluZworICogQGhvc3RfY29udHJvbDogVGhpcyBmaWVsZCBpcyBleGNsdXNpdmVseSBmb3IgaG9zdCB1c2UgYW5kIGlzICJyZWFkb25seSIKKyAqICAgICAgICAgICAgIGZyb20gdGhlIGFkYXB0ZXIncyBwZXJzcGVjdGl2ZS4KKyAqIEBjb250cm9sXzA6Qml0cyAwIHRvIDYgLSBSVEhfQnVja2V0IGdldAorICoJICAgICAgQml0IDcgLSBPd24gRGVzY3JpcHRvciBvd25lcnNoaXAgYml0LiBUaGlzIGJpdCBpcyBzZXQgdG8gMQorICogICAgICAgICAgICBieSB0aGUgaG9zdCwgYW5kIGlzIHNldCB0byAwIGJ5IHRoZSBhZGFwdGVyLgorICoJICAgICAgMCAtIEhvc3Qgb3ducyBSeEQgYW5kIGJ1ZmZlci4KKyAqCSAgICAgIDEgLSBUaGUgYWRhcHRlciBvd25zIFJ4RCBhbmQgYnVmZmVyLgorICoJICAgICAgQml0IDggLSBGYXN0X1BhdGhfRWxpZ2libGUgV2hlbiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZQorICogICAgICAgICAgICByZWNlaXZlZCBmcmFtZSBtZWV0cyBhbGwgb2YgdGhlIGNyaXRlcmlhIGZvciBmYXN0IHBhdGggcHJvY2Vzc2luZy4KKyAqICAgICAgICAgICAgVGhlIHJlcXVpcmVkIGNyaXRlcmlhIGFyZSBhcyBmb2xsb3dzOgorICogICAgICAgICAgICAhU1lOICYKKyAqICAgICAgICAgICAgKFRyYW5zZmVyX0NvZGUgPT0gIlRyYW5zZmVyIE9LIikgJgorICogICAgICAgICAgICAoIUlzX0lQX0ZyYWdtZW50KSAmCisgKiAgICAgICAgICAgICgoSXNfSVB2NCAmIGNvbXB1dGVkX0wzX2NoZWNrc3VtID09IDB4RkZGRikgfAorICogICAgICAgICAgICAoSXNfSVB2NikpICYKKyAqICAgICAgICAgICAgKChJc19UQ1AgJiBjb21wdXRlZF9MNF9jaGVja3N1bSA9PSAweEZGRkYpIHwKKyAqICAgICAgICAgICAgKElzX1VEUCAmIChjb21wdXRlZF9MNF9jaGVja3N1bSA9PSAweEZGRkYgfAorICogICAgICAgICAgICBjb21wdXRlZCBfTDRfY2hlY2tzdW0gPT0gMHgwMDAwKSkpCisgKiAgICAgICAgICAgIChzYW1lIG1lYW5pbmcgZm9yIGFsbCBSeEQgYnVmZmVyIG1vZGVzKQorICoJICAgICAgQml0IDkgLSBMMyBDaGVja3N1bSBDb3JyZWN0CisgKgkgICAgICBCaXQgMTAgLSBMNCBDaGVja3N1bSBDb3JyZWN0CisgKgkgICAgICBCaXQgMTEgLSBSZXNlcnZlZAorICoJICAgICAgQml0IDEyIHRvIDE1IC0gVGhpcyBmaWVsZCBpcyB3cml0dGVuIGJ5IHRoZSBhZGFwdGVyLiBJdCBpcworICogICAgICAgICAgICB1c2VkIHRvIHJlcG9ydCB0aGUgc3RhdHVzIG9mIHRoZSBmcmFtZSB0cmFuc2ZlciB0byB0aGUgaG9zdC4KKyAqCSAgICAgIDB4MCAtIFRyYW5zZmVyIE9LCisgKgkgICAgICAweDQgLSBSREEgRmFpbHVyZSBEdXJpbmcgVHJhbnNmZXIKKyAqCSAgICAgIDB4NSAtIFVucGFyc2VhYmxlIFBhY2tldCwgc3VjaCBhcyB1bmtub3duIElQdjYgaGVhZGVyLgorICoJICAgICAgMHg2IC0gRnJhbWUgaW50ZWdyaXR5IGVycm9yIChGQ1Mgb3IgRUNDKS4KKyAqCSAgICAgIDB4NyAtIEJ1ZmZlciBTaXplIEVycm9yLiBUaGUgcHJvdmlkZWQgYnVmZmVyKHMpIHdlcmUgbm90CisgKiAgICAgICAgICAgICAgICAgIGFwcHJvcHJpYXRlbHkgc2l6ZWQgYW5kIGRhdGEgbG9zcyBvY2N1cnJlZC4KKyAqCSAgICAgIDB4OCAtIEludGVybmFsIEVDQyBFcnJvci4gUnhEIGNvcnJ1cHRlZC4KKyAqCSAgICAgIDB4OSAtIElQdjQgQ2hlY2tzdW0gZXJyb3IKKyAqCSAgICAgIDB4QSAtIFRDUC9VRFAgQ2hlY2tzdW0gZXJyb3IKKyAqCSAgICAgIDB4RiAtIFVua25vd24gRXJyb3Igb3IgTXVsdGlwbGUgRXJyb3IuIEluZGljYXRlcyBhbgorICogICAgICAgICAgICAgICB1bmtub3duIHByb2JsZW0gb3IgdGhhdCBtb3JlIHRoYW4gb25lIG9mIHRyYW5zZmVyIGNvZGVzIGlzIHNldC4KKyAqCSAgICAgIEJpdCAxNiAtIFNZTiBUaGUgYWRhcHRlciBzZXRzIHRoaXMgZmllbGQgdG8gaW5kaWNhdGUgdGhhdAorICogICAgICAgICAgICAgICAgdGhlIGluY29taW5nIGZyYW1lIGNvbnRhaW5lZCBhIFRDUCBzZWdtZW50IHdpdGggaXRzIFNZTiBiaXQKKyAqCSAgICAgICAgICBzZXQgYW5kIGl0cyBBQ0sgYml0IE5PVCBzZXQuIChzYW1lIG1lYW5pbmcgZm9yIGFsbCBSeEQgYnVmZmVyCisgKiAgICAgICAgICAgICAgICBtb2RlcykKKyAqCSAgICAgIEJpdCAxNyAtIElzIElDTVAKKyAqCSAgICAgIEJpdCAxOCAtIFJUSF9TUERNX0hJVCBTZXQgdG8gMSBpZiB0aGVyZSB3YXMgYSBtYXRjaCBpbiB0aGUKKyAqICAgICAgICAgICAgICAgIFNvY2tldCBQYWlyIERpcmVjdCBNYXRjaCBUYWJsZSBhbmQgdGhlIGZyYW1lIHdhcyBzdGVlcmVkIGJhc2VkCisgKiAgICAgICAgICAgICAgICBvbiBTUERNLgorICoJICAgICAgQml0IDE5IC0gUlRIX0lUX0hJVCBTZXQgdG8gMSBpZiB0aGVyZSB3YXMgYSBtYXRjaCBpbiB0aGUKKyAqICAgICAgICAgICAgSW5kaXJlY3Rpb24gVGFibGUgYW5kIHRoZSBmcmFtZSB3YXMgc3RlZXJlZCBiYXNlZCBvbiBoYXNoCisgKiAgICAgICAgICAgIGluZGlyZWN0aW9uLgorICoJICAgICAgQml0IDIwIHRvIDIzIC0gUlRIX0hBU0hfVFlQRSBJbmRpY2F0ZXMgdGhlIGZ1bmN0aW9uIChoYXNoCisgKgkgICAgICAgICAgdHlwZSkgdGhhdCB3YXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGhhc2guCisgKgkgICAgICBCaXQgMTkgLSBJU19WTEFOIFNldCB0byAnMScgaWYgdGhlIGZyYW1lIHdhcy9pcyBWTEFOCisgKgkgICAgICAgICAgdGFnZ2VkLgorICoJICAgICAgQml0IDI1IHRvIDI2IC0gRVRIRVJfRU5DQVAgUmVmbGVjdHMgdGhlIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24KKyAqICAgICAgICAgICAgICAgIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqCSAgICAgIDB4MCAtIEV0aGVybmV0IERJWAorICoJICAgICAgMHgxIC0gTExDCisgKgkgICAgICAweDIgLSBTTkFQIChpbmNsdWRlcyBKdW1iby1TTkFQKQorICoJICAgICAgMHgzIC0gSVBYCisgKgkgICAgICBCaXQgMjcgLSBJU19JUFY0IFNldCB0byAnMScgaWYgdGhlIGZyYW1lIGNvbnRhaW5zIGFuIElQdjQJcGFja2V0LgorICoJICAgICAgQml0IDI4IC0gSVNfSVBWNiBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSBjb250YWlucyBhbiBJUHY2IHBhY2tldC4KKyAqCSAgICAgIEJpdCAyOSAtIElTX0lQX0ZSQUcgU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgY29udGFpbnMgYSBmcmFnbWVudGVkCisgKiAgICAgICAgICAgIElQIHBhY2tldC4KKyAqCSAgICAgIEJpdCAzMCAtIElTX1RDUCBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSBjb250YWlucyBhIFRDUCBzZWdtZW50LgorICoJICAgICAgQml0IDMxIC0gSVNfVURQIFNldCB0byAnMScgaWYgdGhlIGZyYW1lIGNvbnRhaW5zIGEgVURQIG1lc3NhZ2UuCisgKgkgICAgICBCaXQgMzIgdG8gNDcgLSBMM19DaGVja3N1bVswOjE1XSBUaGUgSVB2NCBjaGVja3N1bSB2YWx1ZSAJdGhhdAorICogICAgICAgICAgICBhcnJpdmVkIHdpdGggdGhlIGZyYW1lLiBJZiB0aGUgcmVzdWx0aW5nIGNvbXB1dGVkIElQdjQgaGVhZGVyCisgKiAgICAgICAgICAgIGNoZWNrc3VtIGZvciB0aGUgZnJhbWUgZGlkIG5vdCBwcm9kdWNlIHRoZSBleHBlY3RlZCAweEZGRkYgdmFsdWUsCisgKiAgICAgICAgICAgIHRoZW4gdGhlIHRyYW5zZmVyIGNvZGUgd291bGQgYmUgc2V0IHRvIDB4OS4KKyAqCSAgICAgIEJpdCA0OCB0byA2MyAtIEw0X0NoZWNrc3VtWzA6MTVdIFRoZSBUQ1AvVURQIGNoZWNrc3VtIHZhbHVlIHRoYXQKKyAqICAgICAgICAgICAgYXJyaXZlZCB3aXRoIHRoZSBmcmFtZS4gSWYgdGhlIHJlc3VsdGluZyBjb21wdXRlZCBUQ1AvVURQIGNoZWNrc3VtCisgKiAgICAgICAgICAgIGZvciB0aGUgZnJhbWUgZGlkIG5vdCBwcm9kdWNlIHRoZSBleHBlY3RlZCAweEZGRkYgdmFsdWUsIHRoZW4gdGhlCisgKiAgICAgICAgICAgIHRyYW5zZmVyIGNvZGUgd291bGQgYmUgc2V0IHRvIDB4QS4KKyAqIEBjb250cm9sXzE6Qml0cyAwIHRvIDEgLSBSZXNlcnZlZAorICogICAgICAgICAgICBCaXRzIDIgdG8gMTUgLSBCdWZmZXIwX1NpemUuVGhpcyBmaWVsZCBpcyBzZXQgYnkgdGhlIGhvc3QgYW5kCisgKiAgICAgICAgICAgIGV2ZW50dWFsbHkgb3ZlcndyaXR0ZW4gYnkgdGhlIGFkYXB0ZXIuIFRoZSBob3N0IHdyaXRlcyB0aGUKKyAqICAgICAgICAgICAgYXZhaWxhYmxlIGJ1ZmZlciBzaXplIGluIGJ5dGVzIHdoZW4gaXQgcGFzc2VzIHRoZSBkZXNjcmlwdG9yIHRvCisgKiAgICAgICAgICAgIHRoZSBhZGFwdGVyLiBXaGVuIGEgZnJhbWUgaXMgZGVsaXZlcmVkIHRoZSBob3N0LCB0aGUgYWRhcHRlcgorICogICAgICAgICAgICBwb3B1bGF0ZXMgdGhpcyBmaWVsZCB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpbnRvIHRoZQorICogICAgICAgICAgICBidWZmZXIuIFRoZSBsYXJnZXN0IHN1cHBvcnRlZCBidWZmZXIgaXMgMTYsIDM4MyBieXRlcy4KKyAqCSAgICAgIEJpdCAxNiB0byA0NyAtIFJUSCBIYXNoIFZhbHVlIDMyLWJpdCBSVEggaGFzaCB2YWx1ZS4gT25seSB2YWxpZCBpZgorICoJICAgICAgUlRIX0hBU0hfVFlQRSAoQ29udHJvbF8wLCBiaXRzIDIwOjIzKSBpcyBub256ZXJvLgorICoJICAgICAgQml0IDQ4IHRvIDYzIC0gVkxBTl9UYWdbMDoxNV0gVGhlIGNvbnRlbnRzIG9mIHRoZSB2YXJpYWJsZSBwb3J0aW9uCisgKiAgICAgICAgICAgIG9mIHRoZSBWTEFOIHRhZywgaWYgb25lIHdhcyBkZXRlY3RlZCBieSB0aGUgYWRhcHRlci4gVGhpcyBmaWVsZCBpcworICogICAgICAgICAgICBwb3B1bGF0ZWQgZXZlbiBpZiBWTEFOLXRhZyBzdHJpcHBpbmcgaXMgZW5hYmxlZC4KKyAqIEBidWZmZXIwX3B0cjogUG9pbnRlciB0byBidWZmZXIuIFRoaXMgZmllbGQgaXMgcG9wdWxhdGVkIGJ5IHRoZSBkcml2ZXIuCisgKgorICogT25lIGJ1ZmZlciBtb2RlIFJ4RCBmb3IgcmluZyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSB7CisJdTY0IGhvc3RfY29udHJvbDsKKwl1NjQgY29udHJvbF8wOworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1JUSF9CVUNLRVRfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMCwgNykKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0xJU1RfT1dOX0FEQVBURVIJCXZ4Z2VfbUJJVCg3KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfRkFTVF9QQVRIX0VMSUdJQkxFX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgOCwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0wzX0NLU1VNX0NPUlJFQ1RfR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCA5LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fQ09SUkVDVF9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDEwLCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfVF9DT0RFX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1RfQ09ERSh2YWwpIAkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfVF9DT0RFX1VOVVNFRAkJVlhHRV9IV19SSU5HX1RfQ09ERV9VTlVTRUQKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1NZTl9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAxNiwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0lTX0lDTVBfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMTcsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9SVEhfU1BETV9ISVRfR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCAxOCwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1JUSF9JVF9ISVRfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMTksIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9SVEhfSEFTSF9UWVBFX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgMjAsIDQpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9JU19WTEFOX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDI0LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfRVRIRVJfRU5DQVBfR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMjUsIDIpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9GUkFNRV9QUk9UT19HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAyNywgNSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0wzX0NLU1VNX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgMzIsIDE2KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCA0OCwgMTYpCisKKwl1NjQgY29udHJvbF8xOworCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkVfR0VUKGN0cmwxKQl2eGdlX2JWQUxuKGN0cmwxLCAyLCAxNCkKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDE0KQorI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFX01BU0sJCXZ4Z2VfdkJJVCgweDNGRkYsIDIsIDE0KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfMV9SVEhfSEFTSF9WQUxfR0VUKGN0cmwxKSAgICB2eGdlX2JWQUxuKGN0cmwxLCAxNiwgMzIpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9WTEFOX1RBR19HRVQoY3RybDEpCXZ4Z2VfYlZBTG4oY3RybDEsIDQ4LCAxNikKKworCXU2NCBidWZmZXIwX3B0cjsKK307CisKK2VudW0gdnhnZV9od19ydGhfYWxnb3JpdG1zIHsKKwlSVEhfQUxHX0pFTktJTlMgPSAwLAorCVJUSF9BTEdfTVNfUlNTCT0gMSwKKwlSVEhfQUxHX0NSQzMyQwk9IDIKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfcnRoX2hhc2hfdHlwZXMgLSBSVEggaGFzaCB0eXBlcy4KKyAqIEBoYXNoX3R5cGVfdGNwaXB2NF9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZVRjcElQdjQKKyAqIEBoYXNoX3R5cGVfaXB2NF9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZUlQdjQKKyAqIEBoYXNoX3R5cGVfdGNwaXB2Nl9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZVRjcElQdjYKKyAqIEBoYXNoX3R5cGVfaXB2Nl9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZUlQdjYKKyAqIEBoYXNoX3R5cGVfdGNwaXB2NmV4X2VuOiBFbmFibGVzIFJUSCBmaWVsZCB0eXBlIEhhc2hUeXBlVGNwSVB2NkV4CisgKiBAaGFzaF90eXBlX2lwdjZleF9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZUlQdjZFeAorICoKKyAqIFVzZWQgdG8gcGFzcyBSVEggaGFzaCB0eXBlcyB0byBydHNfcnRzX3NldC4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgpLCB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfZ2V0KCkuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzIHsKKwl1OCBoYXNoX3R5cGVfdGNwaXB2NF9lbjsKKwl1OCBoYXNoX3R5cGVfaXB2NF9lbjsKKwl1OCBoYXNoX3R5cGVfdGNwaXB2Nl9lbjsKKwl1OCBoYXNoX3R5cGVfaXB2Nl9lbjsKKwl1OCBoYXNoX3R5cGVfdGNwaXB2NmV4X2VuOworCXU4IGhhc2hfdHlwZV9pcHY2ZXhfZW47Cit9OworCit1MzIKK3Z4Z2VfaHdfZGV2aWNlX2RlYnVnX21hc2tfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJZW51bSB2eGdlX2RlYnVnX2xldmVsIGxldmVsLAorCXUzMiBtYXNrKTsKKwordTMyCit2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit1MzIKK3Z4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3UzMgordnhnZV9od19kZXZpY2VfZGVidWdfbWFza19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfc2l6ZV9nZXQJLSBHZXQgdGhlIHNpemUgb2YgcmluZyBkZXNjcmlwdG9yLgorICogQGJ1Zl9tb2RlOiBCdWZmZXIgbW9kZSAoMSwgMyBvciA1KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiBSeEQgZm9yIGdpdmVuIGJ1ZmZlciBtb2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHZ4Z2VfaHdfcmluZ19yeGRfc2l6ZV9nZXQodTMyIGJ1Zl9tb2RlKQoreworCXJldHVybiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZHNfcGVyX2Jsb2NrX2dldCAtIEdldCB0aGUgbnVtYmVyIG9mIHJ4ZHMgcGVyIGJsb2NrLgorICogQGJ1Zl9tb2RlOiBCdWZmZXIgbW9kZSAoMSBidWZmZXIgbW9kZSBvbmx5KQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIFJ4RCBmb3IgUnhEIGJsb2NrIGZvciBnaXZlbiBidWZmZXIgbW9kZQorICovCitzdGF0aWMgaW5saW5lIHUzMiB2eGdlX2h3X3Jpbmdfcnhkc19wZXJfYmxvY2tfZ2V0KHUzMiBidWZfbW9kZSkKK3sKKwlyZXR1cm4gKHUzMikoKFZYR0VfSFdfQkxPQ0tfU0laRS0xNikgLworCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSkpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfMWJfc2V0IC0gUHJlcGFyZSAxLWJ1ZmZlci1tb2RlIGRlc2NyaXB0b3IuCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAZG1hX3BvaW50ZXI6IERNQSBhZGRyZXNzIG9mCWEgc2luZ2xlIHJlY2VpdmUgYnVmZmVyCXRoaXMgZGVzY3JpcHRvcgorICogc2hvdWxkIGNhcnJ5LiBOb3RlIHRoYXQgYnkgdGhlIHRpbWUgdnhnZV9od19yaW5nX3J4ZF8xYl9zZXQgaXMgY2FsbGVkLAorICogdGhlIHJlY2VpdmUgYnVmZmVyIHNob3VsZCBiZSBhbHJlYWR5IG1hcHBlZCB0byB0aGUgZGV2aWNlCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgcmVjZWl2ZSBAZG1hX3BvaW50ZXIgYnVmZmVyLgorICoKKyAqIFByZXBhcmUgMS1idWZmZXItbW9kZSBSeAlkZXNjcmlwdG9yIGZvciBwb3N0aW5nCisgKiAodmlhCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdCgpKS4KKyAqCisgKiBUaGlzCWlubGluZSBoZWxwZXItZnVuY3Rpb24gZG9lcyBub3QJcmV0dXJuIGFueSBwYXJhbWV0ZXJzIGFuZCBhbHdheXMKKyAqIHN1Y2NlZWRzLgorICoKKyAqLworc3RhdGljIGlubGluZQordm9pZCB2eGdlX2h3X3JpbmdfcnhkXzFiX3NldCgKKwl2b2lkICpyeGRoLAorCWRtYV9hZGRyX3QgZG1hX3BvaW50ZXIsCisJdTMyIHNpemUpCit7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKwlyeGRwLT5idWZmZXIwX3B0ciA9IGRtYV9wb2ludGVyOworCXJ4ZHAtPmNvbnRyb2xfMQkmPSB+VlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRV9NQVNLOworCXJ4ZHAtPmNvbnRyb2xfMQl8PSBWWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFKHNpemUpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfMWJfZ2V0IC0gR2V0IGRhdGEgZnJvbSB0aGUgY29tcGxldGVkIDEtYnVmCisgKiBkZXNjcmlwdG9yLgorICogQHZwYXRoX2hhbmRsZTogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEBkbWFfcG9pbnRlcjogRE1BIGFkZHJlc3Mgb2YJYSBzaW5nbGUgcmVjZWl2ZSBidWZmZXIJdGhpcyBkZXNjcmlwdG9yCisgKiBjYXJyaWVzLiBSZXR1cm5lZCBieSBIVy4KKyAqIEBwa3RfbGVuZ3RoOglMZW5ndGggKGluIGJ5dGVzKSBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkKKyAqCisgKiBSZXRyaWV2ZSBwcm90b2NvbCBkYXRhIGZyb20gdGhlIGNvbXBsZXRlZCAxLWJ1ZmZlci1tb2RlIFJ4IGRlc2NyaXB0b3IuCisgKiBUaGlzCWlubGluZSBoZWxwZXItZnVuY3Rpb24gdXNlcyBjb21wbGV0ZWQgZGVzY3JpcHRvciB0byBwb3B1bGF0ZSByZWNlaXZlCisgKiBidWZmZXIgcG9pbnRlciBhbmQgb3RoZXIgIm91dCIgcGFyYW1ldGVycy4gVGhlIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF8xYl9nZXQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKKwl2b2lkICpyeGRoLAorCXUzMiAqcGt0X2xlbmd0aCkKK3sKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRoOworCisJKnBrdF9sZW5ndGggPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkVfR0VUKHJ4ZHAtPmNvbnRyb2xfMSk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF8xYl9pbmZvX2dldCAtIEdldCBleHRlbmRlZCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyAqIGEgY29tcGxldGVkIHJlY2VpdmUgZGVzY3JpcHRvciBmb3IgMWIgbW9kZS4KKyAqIEB2cGF0aF9oYW5kbGU6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAcnhkX2luZm86IERlc2NyaXB0b3IgaW5mb3JtYXRpb24KKyAqCisgKiBSZXRyaWV2ZSBleHRlbmRlZCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBjb21wbGV0ZWQgcmVjZWl2ZSBkZXNjcmlwdG9yLgorICoKKyAqLworc3RhdGljIGlubGluZQordm9pZCB2eGdlX2h3X3JpbmdfcnhkXzFiX2luZm9fZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCwKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvICpyeGRfaW5mbykKK3sKKworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJcnhkX2luZm8tPnN5bl9mbGFnID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1NZTl9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+aXNfaWNtcCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9JU19JQ01QX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5mYXN0X3BhdGhfZWxpZ2libGUgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfRkFTVF9QQVRIX0VMSUdJQkxFX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5sM19ja3N1bV92YWxpZCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9MM19DS1NVTV9DT1JSRUNUX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5sM19ja3N1bSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9MM19DS1NVTV9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+bDRfY2tzdW1fdmFsaWQgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fQ09SUkVDVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+bDRfY2tzdW0gPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDRfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7OworCXJ4ZF9pbmZvLT5mcmFtZSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9FVEhFUl9FTkNBUF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+cHJvdG8gPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfRlJBTUVfUFJPVE9fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmlzX3ZsYW4gPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfSVNfVkxBTl9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+dmxhbiA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9WTEFOX1RBR19HRVQocnhkcC0+Y29udHJvbF8xKTsKKwlyeGRfaW5mby0+cnRoX2J1Y2tldCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9SVEhfQlVDS0VUX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5ydGhfaXRfaGl0ID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1JUSF9JVF9ISVRfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnJ0aF9zcGRtX2hpdCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9SVEhfU1BETV9ISVRfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnJ0aF9oYXNoX3R5cGUgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfUlRIX0hBU0hfVFlQRV9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+cnRoX3ZhbHVlID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEXzFfUlRIX0hBU0hfVkFMX0dFVChyeGRwLT5jb250cm9sXzEpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQgLSBHZXQgZHJpdmVyIHByaXZhdGUgcGVyLWRlc2NyaXB0b3IgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgb2YgMWIgbW9kZSAzYiBtb2RlIHJpbmcuCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogUmV0dXJuczogcHJpdmF0ZSBkcml2ZXIJaW5mbyBhc3NvY2lhdGVkCXdpdGggdGhlIGRlc2NyaXB0b3IuCisgKiBkcml2ZXIgcmVxdWVzdHMJcGVyLWRlc2NyaXB0b3Igc3BhY2UgdmlhIHZ4Z2VfaHdfcmluZ19hdHRyLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkICp2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKwlyZXR1cm4gKHZvaWQgKikoc2l6ZV90KXJ4ZHAtPmhvc3RfY29udHJvbDsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cyAtIE9mZmxvYWQgY2hlY2tzdW0uCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQGNrc3VtX2JpdHM6IFNwZWNpZmllcyB3aGljaCBjaGVja3N1bXMgYXJlIHRvIGJlIG9mZmxvYWRlZDogSVB2NCwKKyAqICAgICAgICAgICAgICBhbmQvb3IgVENQIGFuZC9vciBVRFAuCisgKgorICogQXNrIFRpdGFuIHRvIGNhbGN1bGF0ZSBJUHY0ICYgdHJhbnNwb3J0IGNoZWNrc3VtcyBmb3IgX3RoaXNfIHRyYW5zbWl0CisgKiBkZXNjcmlwdG9yLgorICogVGhpcyBBUEkgaXMgcGFydCBvZiB0aGUgcHJlcGFyYXRpb24gb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgZm9yIHBvc3RpbmcKKyAqICh2aWEgdnhnZV9od19maWZvX3R4ZGxfcG9zdCgpKS4gVGhlIHJlbGF0ZWQgInByZXBhcmF0aW9uIiBBUElzIGluY2x1ZGUKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX21zc19zZXQoKSwgdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldF9hbGlnbmVkKCksCisgKiBhbmQgdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldCgpLgorICogQWxsIHRoZXNlIEFQSXMgZmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBmaWZvIGRlc2NyaXB0b3IsCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRpdGFuIHNwZWNpZmljYXRpb24uCisgKgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9od19maWZvX3R4ZGxfY2tzdW1fc2V0X2JpdHModm9pZCAqdHhkbGgsIHU2NCBja3N1bV9iaXRzKQoreworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisJdHhkcC0+Y29udHJvbF8xIHw9IGNrc3VtX2JpdHM7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldCAtIFNldCBNU1MuCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQG1zczogTVNTIHNpemUgZm9yIF90aGlzXyBUQ1AgY29ubmVjdGlvbi4gUGFzc2VkIGJ5IFRDUCBzdGFjayBkb3duIHRvIHRoZQorICogICAgICAgZHJpdmVyLCB3aGljaCBpbiB0dXJuIGluc2VydHMgdGhlIE1TUyBpbnRvIHRoZSBAdHhkbGguCisgKgorICogVGhpcyBBUEkgaXMgcGFydCBvZiB0aGUgcHJlcGFyYXRpb24gb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgZm9yIHBvc3RpbmcKKyAqICh2aWEgdnhnZV9od19maWZvX3R4ZGxfcG9zdCgpKS4gVGhlIHJlbGF0ZWQgInByZXBhcmF0aW9uIiBBUElzIGluY2x1ZGUKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoKSwgdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldF9hbGlnbmVkKCksCisgKiBhbmQgdnhnZV9od19maWZvX3R4ZGxfY2tzdW1fc2V0X2JpdHMoKS4KKyAqIEFsbCB0aGVzZSBBUElzIGZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZmlmbyBkZXNjcmlwdG9yLAorICogaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBUaXRhbiBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX21zc19zZXQodm9pZCAqdHhkbGgsIGludCBtc3MpCit7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaDsKKworCXR4ZHAtPmNvbnRyb2xfMCB8PSBWWEdFX0hXX0ZJRk9fVFhEX0xTT19FTjsKKwl0eGRwLT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9MU09fTVNTKG1zcyk7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfdmxhbl9zZXQgLSBTZXQgVkxBTiB0YWcuCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQHZsYW5fdGFnOiAxNmJpdCBWTEFOIHRhZy4KKyAqCisgKiBJbnNlcnQgVkxBTiB0YWcgaW50byBzcGVjaWZpZWQgdHJhbnNtaXQgZGVzY3JpcHRvci4KKyAqIFRoZSBhY3R1YWwgaW5zZXJ0aW9uIG9mIHRoZSB0YWcgaW50byBvdXRnb2luZyBmcmFtZSBpcyBkb25lIGJ5IHRoZSBoYXJkd2FyZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX3ZsYW5fc2V0KHZvaWQgKnR4ZGxoLCB1MTYgdmxhbl90YWcpCit7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaDsKKworCXR4ZHAtPmNvbnRyb2xfMSB8PSBWWEdFX0hXX0ZJRk9fVFhEX1ZMQU5fRU5BQkxFOworCXR4ZHAtPmNvbnRyb2xfMSB8PSBWWEdFX0hXX0ZJRk9fVFhEX1ZMQU5fVEFHKHZsYW5fdGFnKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldCAtIFJldHJpZXZlIHBlci1kZXNjcmlwdG9yIHByaXZhdGUgZGF0YS4KKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogUmV0cmlldmUgcGVyLWRlc2NyaXB0b3IgcHJpdmF0ZSBkYXRhLgorICogTm90ZSB0aGF0IGRyaXZlciByZXF1ZXN0cyBwZXItZGVzY3JpcHRvciBzcGFjZSB2aWEKKyAqIHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciBwYXNzZWQgdG8KKyAqIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLgorICoKKyAqIFJldHVybnM6IHByaXZhdGUgZHJpdmVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnZ4Z2VfaHdfZmlmb190eGRsX3ByaXZhdGVfZ2V0KHZvaWQgKnR4ZGxoKQoreworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwICA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoOworCisJcmV0dXJuICh2b2lkICopKHNpemVfdCl0eGRwLT5ob3N0X2NvbnRyb2w7Cit9CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyIC0gUmluZyBvcGVuICJ0ZW1wbGF0ZSIuCisgKiBAY2FsbGJhY2s6IFJpbmcgY29tcGxldGlvbiBjYWxsYmFjay4gSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGVyZQorICogICAgICAgICAgICBhcmUgbmV3IGNvbXBsZXRpb25zIG9uIHRoYXQgcmluZy4gSW4gbWFueSBpbXBsZW1lbnRhdGlvbnMKKyAqICAgICAgICAgICAgdGhlIEBjYWxsYmFjayBleGVjdXRlcyBpbiB0aGUgaHcgaW50ZXJydXB0IGNvbnRleHQuCisgKiBAcnhkX2luaXQ6IFJpbmcncyBkZXNjcmlwdG9yLWluaXRpYWxpemUgY2FsbGJhY2suCisgKiAgICAgICAgICAgIFNlZSB2eGdlX2h3X3JpbmdfcnhkX2luaXRfZnt9LgorICogICAgICAgICAgICBJZiBub3QgTlVMTCwgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBvcGVuaW5nCisgKiAgICAgICAgICAgIHRoZSByaW5nLgorICogQHJ4ZF90ZXJtOiBSaW5nJ3MgZGVzY3JpcHRvci10ZXJtaW5hdGUgY2FsbGJhY2suIElmIG5vdCBOVUxMLAorICogICAgICAgICAgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBjbG9zaW5nIHRoZSBjb3JyZXNwb25kaW5nIHJpbmcuCisgKiAgICAgICAgICBTZWUgYWxzbyB2eGdlX2h3X3JpbmdfcnhkX3Rlcm1fZnt9LgorICogQHVzZXJkYXRhOiBVc2VyLWRlZmluZWQgImNvbnRleHQiIG9mIF90aGF0XyByaW5nLiBQYXNzZWQgYmFjayB0byB0aGUKKyAqICAgICAgICAgICAgdXNlciBhcyBvbmUgb2YgdGhlIEBjYWxsYmFjaywgQHJ4ZF9pbml0LCBhbmQgQHJ4ZF90ZXJtIGFyZ3VtZW50cy4KKyAqIEBwZXJfcnhkX3NwYWNlOiBJZiBzcGVjaWZpZWQgKGkuZS4sIGdyZWF0ZXIgdGhhbiB6ZXJvKTogZXh0cmEgc3BhY2UKKyAqICAgICAgICAgICAgICByZXNlcnZlZCBieSBIVyBwZXIgZWFjaCByZWNlaXZlIGRlc2NyaXB0b3IuCisgKiAgICAgICAgICAgICAgQ2FuIGJlIHVzZWQgdG8gc3RvcmUKKyAqICAgICAgICAgICAgICBhbmQgcmV0cmlldmUgb24gY29tcGxldGlvbiwgaW5mb3JtYXRpb24gc3BlY2lmaWMKKyAqICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyLgorICoKKyAqIFJpbmcgb3BlbiAidGVtcGxhdGUiLiBVc2VyIGZpbGxzIHRoZSBzdHJ1Y3R1cmUgd2l0aCByaW5nCisgKiBhdHRyaWJ1dGVzIGFuZCBwYXNzZXMgaXQgdG8gdnhnZV9od192cGF0aF9vcGVuKCkuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciB7CisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKmNhbGxiYWNrKSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gsCisJCQl2b2lkICpyeGRoLAorCQkJdTggdF9jb2RlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKnJ4ZF9pbml0KSgKKwkJCXZvaWQgKnJ4ZGgsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwl2b2lkICgqcnhkX3Rlcm0pKAorCQkJdm9pZCAqcnhkaCwKKwkJCWVudW0gdnhnZV9od19yeGRfc3RhdGUgc3RhdGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwl2b2lkCQkqdXNlcmRhdGE7CisJdTMyCQlwZXJfcnhkX3NwYWNlOworfTsKKworLyoqCisgKiBmdW5jdGlvbiB2eGdlX2h3X2ZpZm9fY2FsbGJhY2tfZiAtIEZJRk8gY2FsbGJhY2suCisgKiBAdnBhdGhfaGFuZGxlOiBWaXJ0dWFsIHBhdGggd2hvc2UgRmlmbyAiY29udGFpbmluZyIgMSBvciBtb3JlIGNvbXBsZXRlZAorICogICAgICAgICAgICAgZGVzY3JpcHRvcnMuCisgKiBAdHhkbGg6IEZpcnN0IGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQHR4ZGxfcHJpdjogUG9pbnRlciB0byBwZXIgdHhkbCBzcGFjZSBhbGxvY2F0ZWQKKyAqIEB0X2NvZGU6IFRyYW5zZmVyIGNvZGUsIGFzIHBlciBUaXRhbiBVc2VyIEd1aWRlLgorICogICAgICAgICAgUmV0dXJuZWQgYnkgSFcuCisgKiBAaG9zdF9jb250cm9sOiBPcGFxdWUgNjRiaXQgZGF0YSBzdG9yZWQgYnkgZHJpdmVyIGluc2lkZSB0aGUgVGl0YW4KKyAqICAgICAgICAgICAgZGVzY3JpcHRvciBwcmlvciB0byBwb3N0aW5nIHRoZSBsYXR0ZXIgb24gdGhlIGZpZm8KKyAqICAgICAgICAgICAgdmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKS4gVGhlIEBob3N0X2NvbnRyb2wgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgYXMgaXMgdG8gdGhlIGRyaXZlciB3aXRoIGVhY2ggY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAdXNlcmRhdGE6IE9wYXF1ZSBwZXItZmlmbyBkYXRhIHNwZWNpZmllZCBhdCBmaWZvIG9wZW4KKyAqICAgICAgICAgICAgdGltZSwgdmlhIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLgorICoKKyAqIEZpZm8gY29tcGxldGlvbiBjYWxsYmFjayAodHlwZSBkZWNsYXJhdGlvbikuIEEgc2luZ2xlIHBlci1maWZvCisgKiBjYWxsYmFjayBpcyBzcGVjaWZpZWQgYXQgZmlmbyBvcGVuIHRpbWUsIHZpYQorICogdnhnZV9od192cGF0aF9vcGVuKCkuIFR5cGljYWxseSBnZXRzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBwcm9jZXNzaW5nCisgKiBvZiB0aGUgSW50ZXJydXB0IFNlcnZpY2UgUm91dGluZS4KKyAqCisgKiBGaWZvIGNhbGxiYWNrIGdldHMgY2FsbGVkIGJ5IEhXIGlmLCBhbmQgb25seSBpZiwgdGhlcmUgaXMgYXQgbGVhc3QKKyAqIG9uZSBuZXcgY29tcGxldGlvbiBvbiBhIGdpdmVuIGZpZm8uIFVwb24gcHJvY2Vzc2luZyB0aGUgZmlyc3QgQHR4ZGxoIGRyaXZlcgorICogaXMgX3N1cHBvc2VkXyB0byBjb250aW51ZSBjb25zdW1pbmcgY29tcGxldGlvbnMgdXNpbmc6CisgKiAgICAtIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKCkKKyAqCisgKiBOb3RlIHRoYXQgZmFpbHVyZSB0byBwcm9jZXNzIG5ldyBjb21wbGV0aW9ucyBpbiBhIHRpbWVseSBmYXNoaW9uCisgKiBsZWFkcyB0byBWWEdFX0hXX0lORl9PVVRfT0ZfREVTQ1JJUFRPUlMgY29uZGl0aW9uLgorICoKKyAqIE5vbi16ZXJvIEB0X2NvZGUgbWVhbnMgZmFpbHVyZSB0byBwcm9jZXNzIHRyYW5zbWl0IGRlc2NyaXB0b3IuCisgKgorICogSW4gdGhlICJ0cmFuc21pdCIgY2FzZSB0aGUgZmFpbHVyZSBjb3VsZCBoYXBwZW4sIGZvciBpbnN0YW5jZSwgd2hlbiB0aGUKKyAqIGxpbmsgaXMgZG93biwgaW4gd2hpY2ggY2FzZSBUaXRhbiBjb21wbGV0ZXMgdGhlIGRlc2NyaXB0b3IgYmVjYXVzZSBpdAorICogaXMgbm90IGFibGUgdG8gc2VuZCB0aGUgZGF0YSBvdXQuCisgKgorICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVzZXIgR3VpZGUuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKCksIHZ4Z2VfaHdfZmlmb190eGRsX3Rlcm1fZnt9LgorICovCisvKioKKyAqIGZ1bmN0aW9uIHZ4Z2VfaHdfZmlmb190eGRsX3Rlcm1fZiAtIFRlcm1pbmF0ZSBkZXNjcmlwdG9yIGNhbGxiYWNrLgorICogQHR4ZGxoOiBGaXJzdCBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEB0eGRsX3ByaXY6IFBvaW50ZXIgdG8gcGVyIHR4ZGwgc3BhY2UgYWxsb2NhdGVkCisgKiBAc3RhdGU6IE9uZSBvZiB0aGUgZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGV7fSBlbnVtZXJhdGVkIHN0YXRlcy4KKyAqIEB1c2VyZGF0YTogUGVyLWZpZm8gdXNlciBkYXRhIChhLmsuYS4gY29udGV4dCkgc3BlY2lmaWVkIGF0CisgKiBmaWZvIG9wZW4gdGltZSwgdmlhIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLgorICoKKyAqIFRlcm1pbmF0ZSBkZXNjcmlwdG9yIGNhbGxiYWNrLiBVbmxlc3MgTlVMTCBpcyBzcGVjaWZpZWQgaW4gdGhlCisgKiBzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHJ7fSBzdHJ1Y3R1cmUgcGFzc2VkIHRvIHZ4Z2VfaHdfdnBhdGhfb3BlbigpKSwKKyAqIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIGFzIHBhcnQgb2YgY2xvc2luZyBmaWZvLCBwcmlvciB0bworICogZGUtYWxsb2NhdGluZyB0aGUgcmluZyBhbmQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMKKyAqIChpbmNsdWRpbmcgZGVzY3JpcHRvcnMpLgorICogZHJpdmVyIHNob3VsZCB1dGlsaXplIHRoZSBjYWxsYmFjayB0byAoZm9yIGluc3RhbmNlKSB1bm1hcAorICogYW5kIGZyZWUgRE1BIGRhdGEgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggdGhlIHBvc3RlZCAoc3RhdGUgPQorICogVlhHRV9IV19UWERMX1NUQVRFX1BPU1RFRCkgZGVzY3JpcHRvcnMsCisgKiBhcyB3ZWxsIGFzIG90aGVyIHJlbGV2YW50IGNsZWFudXAgZnVuY3Rpb25zLgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHJ7fQorICovCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciAtIEZpZm8gb3BlbiAidGVtcGxhdGUiLgorICogQGNhbGxiYWNrOiBGaWZvIGNvbXBsZXRpb24gY2FsbGJhY2suIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlcmUKKyAqICAgICAgICAgICAgYXJlIG5ldyBjb21wbGV0aW9ucyBvbiB0aGF0IGZpZm8uIEluIG1hbnkgaW1wbGVtZW50YXRpb25zCisgKiAgICAgICAgICAgIHRoZSBAY2FsbGJhY2sgZXhlY3V0ZXMgaW4gdGhlIGh3IGludGVycnVwdCBjb250ZXh0LgorICogQHR4ZGxfdGVybTogRmlmbydzIGRlc2NyaXB0b3ItdGVybWluYXRlIGNhbGxiYWNrLiBJZiBub3QgTlVMTCwKKyAqICAgICAgICAgIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gY2xvc2luZyB0aGUgY29ycmVzcG9uZGluZyBmaWZvLgorICogICAgICAgICAgU2VlIGFsc28gdnhnZV9od19maWZvX3R4ZGxfdGVybV9me30uCisgKiBAdXNlcmRhdGE6IFVzZXItZGVmaW5lZCAiY29udGV4dCIgb2YgX3RoYXRfIGZpZm8uIFBhc3NlZCBiYWNrIHRvIHRoZQorICogICAgICAgICAgICB1c2VyIGFzIG9uZSBvZiB0aGUgQGNhbGxiYWNrLCBhbmQgQHR4ZGxfdGVybSBhcmd1bWVudHMuCisgKiBAcGVyX3R4ZGxfc3BhY2U6IElmIHNwZWNpZmllZCAoaS5lLiwgZ3JlYXRlciB0aGFuIHplcm8pOiBleHRyYSBzcGFjZQorICogICAgICAgICAgICAgIHJlc2VydmVkIGJ5IEhXIHBlciBlYWNoIHRyYW5zbWl0IGRlc2NyaXB0b3IuIENhbiBiZSB1c2VkIHRvCisgKiAgICAgICAgICAgICAgc3RvcmUsIGFuZCByZXRyaWV2ZSBvbiBjb21wbGV0aW9uLCBpbmZvcm1hdGlvbiBzcGVjaWZpYworICogICAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIuCisgKgorICogRmlmbyBvcGVuICJ0ZW1wbGF0ZSIuIFVzZXIgZmlsbHMgdGhlIHN0cnVjdHVyZSB3aXRoIGZpZm8KKyAqIGF0dHJpYnV0ZXMgYW5kIHBhc3NlcyBpdCB0byB2eGdlX2h3X3ZwYXRoX29wZW4oKS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyIHsKKworCWVudW0gdnhnZV9od19zdGF0dXMgKCpjYWxsYmFjaykoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgsCisJCQllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsCisJCQl2b2lkICp1c2VyZGF0YSwKKwkJCXZvaWQgKipza2JfcHRyKTsKKworCXZvaWQgKCp0eGRsX3Rlcm0pKAorCQkJdm9pZCAqdHhkbGgsCisJCQllbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZSBzdGF0ZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXZvaWQJCSp1c2VyZGF0YTsKKwl1MzIJCXBlcl90eGRsX3NwYWNlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9hdHRyIC0gQXR0cmlidXRlcyBvZiB2aXJ0dWFsIHBhdGgKKyAqIEB2cF9pZDogSWRlbnRpZmllciBvZiBWaXJ0dWFsIFBhdGgKKyAqIEByaW5nX2F0dHI6IEF0dHJpYnV0ZXMgb2YgcmluZyBmb3Igbm9uLW9mZmxvYWQgcmVjZWl2ZQorICogQGZpZm9fYXR0cjogQXR0cmlidXRlcyBvZiBmaWZvIGZvciBub24tb2ZmbG9hZCB0cmFuc21pdAorICoKKyAqIEF0dHJpYnV0ZXMgb2YgdmlydHVhbCBwYXRoLiAgVGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGFzIHBhcmFtZXRlcgorICogdG8gdGhlIHZ4Z2VfaHdfdnBhdGhfb3BlbigpIHJvdXRpbmUgdG8gc2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHJpbmcgYW5kIGZpZm8uCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX2F0dHIgeworCXUzMgkJCQl2cF9pZDsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX2F0dHIJcmluZ19hdHRyOworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0cglmaWZvX2F0dHI7Cit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfYmxvY2twb29sX2NyZWF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbCwKKwkJCXUzMiBwb29sX3NpemUsCisJCQl1MzIgcG9vbF9tYXgpOworCit2b2lkCitfX3Z4Z2VfaHdfYmxvY2twb29sX2Rlc3Ryb3koc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2wpOworCitzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqCitfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXUzMiBzaXplKTsKKwordm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSk7CisKK3ZvaWQgKgorX192eGdlX2h3X2Jsb2NrcG9vbF9tYWxsb2Moc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJdTMyIHNpemUsCisJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCk7CisKK3ZvaWQKK19fdnhnZV9od19ibG9ja3Bvb2xfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQl2b2lkICptZW1ibG9jaywKKwkJCXUzMiBzaXplLAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnICpmaWZvX2NvbmZpZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKm5ld19jb25maWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfZGV2aWNlX2NvbmZpZyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZwkqZGV2X2NvbmZpZywgaW50IHNpemUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdCB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldCgKKwl2b2lkIF9faW9tZW0gKmJhcjAsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfZndfdmVyX2dldCgKKwl1MzIJdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0KAorCXUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQgdnhnZV9od19kZXZpY2VfY29uZmlnX2RlZmF1bHRfZ2V0KAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcpOworCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGVfZ2V0IC0gR2V0IGxpbmsgc3RhdGUuCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBHZXQgbGluayBzdGF0ZS4KKyAqIFJldHVybnM6IGxpbmsgc3RhdGUuCisgKi8KK3N0YXRpYyBpbmxpbmUKK2VudW0gdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZSB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCkKK3sKKwlyZXR1cm4gZGV2aC0+bGlua19zdGF0ZTsKK30KKwordm9pZCB2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitjb25zdCB1OCAqCit2eGdlX2h3X2RldmljZV9zZXJpYWxfbnVtYmVyX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3UxNiB2eGdlX2h3X2RldmljZV9saW5rX3dpZHRoX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2NvbnN0IHU4ICoKK3Z4Z2VfaHdfZGV2aWNlX3Byb2R1Y3RfbmFtZV9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdCB2eGdlX2h3X2RldmljZV9pbml0aWFsaXplKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICoqZGV2aCwKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciAqYXR0ciwKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9nZXRwYXVzZV9kYXRhKAorCSBzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkgdTMyIHBvcnQsCisJIHUzMiAqdHgsCisJIHUzMiAqcngpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIHBvcnQsCisJdTMyIHR4LAorCXUzMiByeCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqdnhnZV9vc19kbWFfbWFsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJdW5zaWduZWQgbG9uZyBzaXplLAorCQkJc3RydWN0IHBjaV9kZXYgKipwX2RtYWgsCisJCQlzdHJ1Y3QgcGNpX2RldiAqKnBfZG1hX2FjY2gpCit7CisJZ2ZwX3QgZmxhZ3M7CisJdm9pZCAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBtaXNhbGlnbmVkID0gMDsKKwkqcF9kbWFfYWNjaCA9ICpwX2RtYWggPSBOVUxMOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlmbGFncyA9IEdGUF9BVE9NSUMgfCBHRlBfRE1BOworCWVsc2UKKwkJZmxhZ3MgPSBHRlBfS0VSTkVMIHwgR0ZQX0RNQTsKKworCXNpemUgKz0gVlhHRV9DQUNIRV9MSU5FX1NJWkU7CisKKwl2YWRkciA9IGttYWxsb2MoKHNpemUpLCBmbGFncyk7CisJaWYgKHZhZGRyID09IE5VTEwpCisJCXJldHVybiB2YWRkcjsKKwltaXNhbGlnbmVkID0gKHVuc2lnbmVkIGxvbmcpVlhHRV9BTElHTigqKCh1NjQgKikmdmFkZHIpLAorCQkJCVZYR0VfQ0FDSEVfTElORV9TSVpFKTsKKwkqKHVuc2lnbmVkIGxvbmcgKilwX2RtYV9hY2NoID0gbWlzYWxpZ25lZDsKKwl2YWRkciA9ICh2b2lkICopKCh1OCAqKXZhZGRyICsgbWlzYWxpZ25lZCk7CisJcmV0dXJuIHZhZGRyOworfQorCitleHRlcm4gdm9pZCB2eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hZGQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCXZvaWQgKmJsb2NrX2FkZHIsCisJCQl1MzIgbGVuZ3RoLAorCQkJc3RydWN0IHBjaV9kZXYgKmRtYV9oLAorCQkJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGUpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICpkZXZoLAorCQkJCQl1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZ2ZwX3QgZmxhZ3M7CisJdm9pZCAqdmFkZHI7CisKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCWZsYWdzID0gR0ZQX0FUT01JQyB8IEdGUF9ETUE7CisJZWxzZQorCQlmbGFncyA9IEdGUF9LRVJORUwgfCBHRlBfRE1BOworCisJdmFkZHIgPSBrbWFsbG9jKChzaXplKSwgZmxhZ3MpOworCisJdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWRkKGRldmgsIHZhZGRyLCBzaXplLCBwZGV2LCBwZGV2KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2Vfb3NfZG1hX2ZyZWUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHZvaWQgKnZhZGRyLAorCQkJc3RydWN0IHBjaV9kZXYgKipwX2RtYV9hY2NoKQoreworCXVuc2lnbmVkIGxvbmcgbWlzYWxpZ25lZCA9ICoodW5zaWduZWQgbG9uZyAqKXBfZG1hX2FjY2g7CisJdTggKnRtcCA9ICh1OCAqKXZhZGRyOworCXRtcCAtPSBtaXNhbGlnbmVkOworCWtmcmVlKCh2b2lkICopdG1wKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19tZW1wb29sX2l0ZW1fcHJpdiAtIHdpbGwgcmV0dXJuIHBvaW50ZXIgb24gcGVyIGl0ZW0gcHJpdmF0ZSBzcGFjZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQqCitfX3Z4Z2VfaHdfbWVtcG9vbF9pdGVtX3ByaXYoCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCwKKwl1MzIgbWVtYmxvY2tfaWR4LAorCXZvaWQgKml0ZW0sCisJdTMyICptZW1ibG9ja19pdGVtX2lkeCkKK3sKKwlwdHJkaWZmX3Qgb2Zmc2V0OworCXZvaWQgKm1lbWJsb2NrID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FyclttZW1ibG9ja19pZHhdOworCisKKwlvZmZzZXQgPSAodTMyKSgodTggKilpdGVtIC0gKHU4ICopbWVtYmxvY2spOworCXZ4Z2VfYXNzZXJ0KG9mZnNldCA+PSAwICYmICh1MzIpb2Zmc2V0IDwgbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZSk7CisKKwkoKm1lbWJsb2NrX2l0ZW1faWR4KSA9ICh1MzIpIG9mZnNldCAvIG1lbXBvb2wtPml0ZW1fc2l6ZTsKKwl2eGdlX2Fzc2VydCgoKm1lbWJsb2NrX2l0ZW1faWR4KSA8IG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayk7CisKKwlyZXR1cm4gKHU4ICopbWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW21lbWJsb2NrX2lkeF0gKworCQkJICAgICgqbWVtYmxvY2tfaXRlbV9pZHgpICogbWVtcG9vbC0+aXRlbXNfcHJpdl9zaXplOworfQorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93KAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wsCisJdTMyIG51bV9hbGxvY2F0ZSwKKwl1MzIgKm51bV9hbGxvY2F0ZWQpOworCitzdHJ1Y3QgdnhnZV9od19tZW1wb29sKgorX192eGdlX2h3X21lbXBvb2xfY3JlYXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMiBtZW1ibG9ja19zaXplLAorCXUzMiBpdGVtX3NpemUsCisJdTMyIHByaXZhdGVfc2l6ZSwKKwl1MzIgaXRlbXNfaW5pdGlhbCwKKwl1MzIgaXRlbXNfbWF4LAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfY2JzICptcF9jYWxsYmFjaywKKwl2b2lkICp1c2VyZGF0YSk7CisKK3N0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCoKK19fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGgsCisJCQllbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUgdHlwZSwgdTMyIGxlbmd0aCwKKwkJCXUzMiBwZXJfZHRyX3NwYWNlLCB2b2lkICp1c2VyZGF0YSk7CisKK3ZvaWQKK19fdnhnZV9od19jaGFubmVsX2ZyZWUoCisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCisvKgorICogX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2IC0gUmV0dXJuIHRoZSBtYXggZnJhZ21lbnRzIGFsbG9jYXRlZAorICogZm9yIHRoZSBmaWZvLgorICogQGZpZm86IEZpZm8KKyAqIEB0eGRwOiBQb25pdGVyIHRvIGEgVHhECisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqCitfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwKQoreworCXJldHVybiAoc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqKQorCQkJKCgoY2hhciAqKSgodWxvbmcpdHhkcC0+aG9zdF9jb250cm9sKSkgKworCQkJCWZpZm8tPnBlcl90eGRsX3NwYWNlKTsKK30KKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX29wZW4oCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciAqYXR0ciwKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjayh1NjQgX19pb21lbSAqdnBhdGhfcnN0X2luX3Byb2cpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfY2xvc2UoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCit2b2lkCit2eGdlX2h3X3ZwYXRoX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2NoZWNrX2xlYWsoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9tdHVfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyIG5ld19tdHUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAorCXUzMgkJCW9wZXJhdGlvbiwKKwl1MzIJCQlvZmZzZXQsCisJdTY0CQkJKnN0YXQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGgsCisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAqdnBhdGhfdHhfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfeG1hY19yeF9zdGF0c19nZXQoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGgsCisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cyAqdnBhdGhfcnhfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8gKmh3X3N0YXRzKTsKKwordm9pZAordnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfdnBhdGhfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqdnBfY29uZmlnKTsKKwordm9pZAorX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19sZWdhY3lfc3dhcHBlcl9zZXQoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfa2RmY19zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbCgKKwl2b2lkIF9faW9tZW0JKnJlZywKKwl1NjQgbWFzaywgdTMyIG1heF9taWxsaXMpOworCisjaWZuZGVmIHJlYWRxCitzdGF0aWMgaW5saW5lIHU2NCByZWFkcSh2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJdTY0IHJldCA9IDA7CisJcmV0ID0gcmVhZGwoYWRkciArIDQpOworCXJldCA8PD0gMzI7CisJcmV0IHw9IHJlYWRsKGFkZHIpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisjaWZuZGVmIHdyaXRlcQorc3RhdGljIGlubGluZSB2b2lkIHdyaXRlcSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsKKwl3cml0ZWwoKHUzMikgKHZhbCA+PiAzMiksIChhZGRyICsgNCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsLCBhZGRyICsgNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX2xvd2VyKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl3cml0ZWwodmFsLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHU2NCB2YWw2NCwgdm9pZCBfX2lvbWVtICphZGRyLAorCQkJICB1NjQgbWFzaywgdTMyIG1heF9taWxsaXMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl9sb3dlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDMyLCAzMiksIGFkZHIpOworCXdtYigpOworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAwLCAzMiksIGFkZHIpOworCXdtYigpOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKGFkZHIsIG1hc2ssIG1heF9taWxsaXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqCitfX3Z4Z2VfaHdfZGV2aWNlX3RvY19nZXQodm9pZCBfX2lvbWVtICpiYXIwKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9yZWdfYWRkcl9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKwordm9pZAorX192eGdlX2h3X2RldmljZV9pZF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKwordm9pZAorX192eGdlX2h3X2RldmljZV9ob3N0X2luZm9fZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1NjQgb25fb2ZmKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9wY2lfcmVhZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwl1MzIJCQlwaHlfZnVuY18wLAorCXUzMgkJCW9mZnNldCwKKwl1MzIJCQkqdmFsKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0KAorCXUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKTsKKwordTMyCitfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQoCisJdTMyIHZwX2lkLCBzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcmVzZXRfY2hlY2soc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgpOworCisvKioKKyAqIHZ4Z2VfZGVidWcKKyAqIEBsZXZlbDogbGV2ZWwgb2YgZGVidWcgdmVyYm9zaXR5LgorICogQG1hc2s6IG1hc2sgZm9yIHRoZSBkZWJ1ZworICogQGJ1ZjogQ2lyY3VsYXIgYnVmZmVyIGZvciB0cmFjaW5nCisgKiBAZm10OiBwcmludGYgbGlrZSBmb3JtYXQgc3RyaW5nCisgKgorICogUHJvdmlkZXMgbG9nZ2luZyBmYWNpbGl0aWVzLiBDYW4gYmUgY3VzdG9taXplZCBvbiBwZXItbW9kdWxlCisgKiBiYXNpcyBvci9hbmQgd2l0aCBkZWJ1ZyBsZXZlbHMuIElucHV0IHBhcmFtZXRlcnMsIGV4Y2VwdAorICogbW9kdWxlIGFuZCBsZXZlbCwgYXJlIHRoZSBzYW1lIGFzIHBvc2l4IHByaW50Zi4gVGhpcyBmdW5jdGlvbgorICogbWF5IGJlIGNvbXBpbGVkIG91dCBpZiBERUJVRyBtYWNybyB3YXMgbmV2ZXIgZGVmaW5lZC4KKyAqIFNlZSBhbHNvOiBlbnVtIHZ4Z2VfZGVidWdfbGV2ZWx7fS4KKyAqLworCisjZGVmaW5lIHZ4Z2VfdHJhY2VfYXV4KGxldmVsLCBtYXNrLCBmbXQsIC4uLikgXAore1wKKwkJdnhnZV9vc192YXByaW50ZihsZXZlbCwgbWFzaywgZm10LCBfX1ZBX0FSR1NfXyk7XAorfQorCisjZGVmaW5lIHZ4Z2VfZGVidWcobW9kdWxlLCBsZXZlbCwgbWFzaywgZm10LCAuLi4pIHsgXAoraWYgKChsZXZlbCA+PSBWWEdFX1RSQUNFICYmICgobW9kdWxlICYgVlhHRV9ERUJVR19UUkFDRV9NQVNLKSA9PSBtb2R1bGUpKSB8fCBcCisJKGxldmVsID49IFZYR0VfRVJSICYmICgobW9kdWxlICYgVlhHRV9ERUJVR19FUlJfTUFTSykgPT0gbW9kdWxlKSkpIHtcCisJaWYgKChtYXNrICYgVlhHRV9ERUJVR19NQVNLKSA9PSBtYXNrKVwKKwkJdnhnZV90cmFjZV9hdXgobGV2ZWwsIG1hc2ssIGZtdCwgX19WQV9BUkdTX18pOyBcCit9IFwKK30KKworI2lmIChWWEdFX0NPTVBPTkVOVF9MTCAmIFZYR0VfREVCVUdfTU9EVUxFX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfbGwobGV2ZWwsIG1hc2ssIGZtdCwgLi4uKSBcCit7XAorCXZ4Z2VfZGVidWcoVlhHRV9DT01QT05FTlRfTEwsIGxldmVsLCBtYXNrLCBmbXQsIF9fVkFfQVJHU19fKTtcCit9CisKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfbGwobGV2ZWwsIG1hc2ssIGZtdCwgLi4uKQorI2VuZGlmCisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9ydHNfcnRoX2l0YWJsZV9zZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKnZwYXRoX2hhbmRsZXMsCisJCQl1MzIgdnBhdGhfY291bnQsCisJCQl1OCAqbXRhYmxlLAorCQkJdTggKml0YWJsZSwKKwkJCXUzMiBpdGFibGVfc2l6ZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCWVudW0gdnhnZV9od19ydGhfYWxnb3JpdG1zIGFsZ29yaXRobSwKKwlzdHJ1Y3QgdnhnZV9od19ydGhfaGFzaF90eXBlcyAqaGFzaF90eXBlLAorCXUxNiBidWNrZXRfc2l6ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MzZiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMKQEAgLTAsMCArMSwxMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1ldGh0b29sLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZTxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgInZ4Z2UtZXRodG9vbC5oIgorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9zc2V0IC0gU2V0cyBkaWZmZXJlbnQgbGluayBwYXJhbWV0ZXJzLgorICogQGRldjogZGV2aWNlIHBvaW50ZXIuCisgKiBAaW5mbzogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sIHRvIHNldAorICogbGluayBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gc2V0cyBkaWZmZXJlbnQgbGluayBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIG9udG8KKyAqIHRoZSBOSUMuCisgKiBSZXR1cm4gdmFsdWU6CisgKiAwIG9uIHN1Y2Nlc3MuCisgKi8KKworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfc3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmluZm8pCit7CisJLyogV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCAxMEdiL0ZVTEwgKi8KKwlpZiAoKGluZm8tPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHx8CisJICAgIChpbmZvLT5zcGVlZCAhPSBTUEVFRF8xMDAwMCkgfHwgKGluZm8tPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX2dzZXQgLSBSZXR1cm4gbGluayBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyLgorICogQGluZm86IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbAorICogdG8gcmV0dXJuIGxpbmsgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJucyBsaW5rIHNwZWNpZmljIGluZm9ybWF0aW9uIGxpa2Ugc3BlZWQsIGR1cGxleCBldGMuLiB0byBldGh0b29sLgorICogUmV0dXJuIHZhbHVlIDoKKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICppbmZvKQoreworCWluZm8tPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwlpbmZvLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfRklCUkUpOworCWluZm8tPnBvcnQgPSBQT1JUX0ZJQlJFOworCisJaW5mby0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQlpbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQlpbmZvLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwl9IGVsc2UgeworCQlpbmZvLT5zcGVlZCA9IC0xOworCQlpbmZvLT5kdXBsZXggPSAtMTsKKwl9CisKKwlpbmZvLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9nZHJ2aW5mbyAtIFJldHVybnMgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uLgorICogQGRldjogZGV2aWNlIHBvaW50ZXIuCisgKiBAaW5mbzogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sIHRvCisgKiByZXR1cm4gZHJpdmVyIGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnMgZHJpdmVyIHNwZWNlZmljIGluZm9ybWF0aW9uIGxpa2UgbmFtZSwgdmVyc2lvbiBldGMuLiB0byBldGh0b29sLgorICovCitzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RybGNweShpbmZvLT5kcml2ZXIsIFZYR0VfRFJJVkVSX05BTUUsIHNpemVvZihWWEdFX0RSSVZFUl9OQU1FKSk7CisJc3RybGNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgc2l6ZW9mKERSVl9WRVJTSU9OKSk7CisJc3RybGNweShpbmZvLT5md192ZXJzaW9uLCB2ZGV2LT5md192ZXJzaW9uLCBWWEdFX0hXX0ZXX1NUUkxFTik7CisJc3RybGNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUodmRldi0+cGRldiksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCWluZm8tPnJlZ2R1bXBfbGVuID0gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykKKwkJCQkqIHZkZXYtPm5vX29mX3ZwYXRoOworCisJaW5mby0+bl9zdGF0cyA9IFNUQVRfTEVOOworfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9ncmVncyAtIGR1bXBzIHRoZSBlbnRpcmUgc3BhY2Ugb2YgVGl0YW4gaW50byB0aGUgYnVmZmVyLgorICogQGRldjogZGV2aWNlIHBvaW50ZXIuCisgKiBAcmVnczogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sIGZvcgorICogZHVtcGluZyB0aGUgcmVnaXN0ZXJzLgorICogQHJlZ19zcGFjZTogVGhlIGlucHV0IGFyZ3VtbmV0IGludG8gd2hpY2ggYWxsIHRoZSByZWdpc3RlcnMgYXJlIGR1bXBlZC4KKyAqCisgKiBEdW1wcyB0aGUgdnBhdGggcmVnaXN0ZXIgc3BhY2Ugb2YgVGl0YW4gTklDIGludG8gdGhlIHVzZXIgZ2l2ZW4KKyAqIGJ1ZmZlciBhcmVhLgorICovCitzdGF0aWMgdm9pZCB2eGdlX2V0aHRvb2xfZ3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnNwYWNlKQoreworCWludCBpbmRleCwgb2Zmc2V0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXU2NCByZWc7CisJdTggKnJlZ19zcGFjZSA9ICh1OCAqKSBzcGFjZTsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKQorCQkJCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwlyZWdzLT5sZW4gPSBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKSAqIHZkZXYtPm5vX29mX3ZwYXRoOworCXJlZ3MtPnZlcnNpb24gPSB2ZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpbmRleCsrKSB7CisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyk7CisJCQkJb2Zmc2V0ICs9IDgpIHsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfcmVhZChobGRldiwKKwkJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoLAorCQkJCQl2ZGV2LT52cGF0aHNbaW5kZXhdLmRldmljZV9pZCwKKwkJCQkJb2Zmc2V0LCAmcmVnKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzOiVkIEdldHRpbmcgcmVnIGR1bXAgRmFpbGVkIiwKKwkJCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQltZW1jcHkoKHJlZ19zcGFjZSArIG9mZnNldCksICZyZWcsIDgpOworCQl9CisJfQorfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9pZG5pYyAtIFRvIHBoeXNpY2FsbHkgaWRlbnRpZnkgdGhlIG5pYyBvbiB0aGUgc3lzdGVtLgorICogQGRldiA6IGRldmljZSBwb2ludGVyLgorICogQGlkIDogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggaWRlbnRpZmljYXRpb24gcGFyYW1ldGVycyBnaXZlbiBieQorICogZXRodG9vbC4KKyAqCisgKiBVc2VkIHRvIHBoeXNpY2FsbHkgaWRlbnRpZnkgdGhlIE5JQyBvbiB0aGUgc3lzdGVtLgorICogVGhlIExpbmsgTEVEIHdpbGwgYmxpbmsgZm9yIGEgdGltZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCisgKiBSZXR1cm4gdmFsdWU6CisgKiAwIG9uIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfaWRuaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopCisJCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwl2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChobGRldiwgVlhHRV9GTElDS0VSX09OKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZShkYXRhID8gKGRhdGEgKiBIWikgOiBWWEdFX01BWF9GTElDS0VSX1RJTUUpOworCXZ4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKGhsZGV2LCBWWEdFX0ZMSUNLRVJfT0ZGKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9nZXRwYXVzZV9kYXRhIC0gUGF1c2UgZnJhbWUgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcmVjZXB0aW9uLgorICogQGRldiA6IGRldmljZSBwb2ludGVyLgorICogQGVwIDogcG9pbnRlciB0byB0aGUgc3RydWN0dXJlIHdpdGggcGF1c2UgcGFyYW1ldGVycyBnaXZlbiBieSBldGh0b29sLgorICogRGVzY3JpcHRpb246CisgKiBSZXR1cm5zIHRoZSBQYXVzZSBmcmFtZSBnZW5lcmF0aW9uIGFuZCByZWNlcHRpb24gY2FwYWJpbGl0eSBvZiB0aGUgTklDLgorICogUmV0dXJuIHZhbHVlOgorICogIHZvaWQKKyAqLworc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dldHBhdXNlX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopCisJCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwl2eGdlX2h3X2RldmljZV9nZXRwYXVzZV9kYXRhKGhsZGV2LCAwLCAmZXAtPnR4X3BhdXNlLCAmZXAtPnJ4X3BhdXNlKTsKK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfc2V0cGF1c2VfZGF0YSAtICBzZXQvcmVzZXQgcGF1c2UgZnJhbWUgZ2VuZXJhdGlvbi4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqIEBlcCA6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhdXNlIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbC4KKyAqIERlc2NyaXB0aW9uOgorICogSXQgY2FuIGJlIHVzZWQgdG8gc2V0IG9yIHJlc2V0IFBhdXNlIGZyYW1lIGdlbmVyYXRpb24gb3IgcmVjZXB0aW9uCisgKiBzdXBwb3J0IG9mIHRoZSBOSUMuCisgKiBSZXR1cm4gdmFsdWU6CisgKiBpbnQsIHJldHVybnMgMCBvbiBTdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX3NldHBhdXNlX2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopCisJCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwl2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhKGhsZGV2LCAwLCBlcC0+dHhfcGF1c2UsIGVwLT5yeF9wYXVzZSk7CisKKwl2ZGV2LT5jb25maWcudHhfcGF1c2VfZW5hYmxlID0gZXAtPnR4X3BhdXNlOworCXZkZXYtPmNvbmZpZy5yeF9wYXVzZV9lbmFibGUgPSBlcC0+cnhfcGF1c2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnhnZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBldGh0b29sX3N0YXRzICplc3RhdHMsIHU2NCAqdG1wX3N0YXRzKQoreworCWludCBqLCBrOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWVudW0gdnhnZV9od19zdGF0dXMgc3dzdGF0dXM7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKKworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gdmRldi0+ZGV2aDsKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzICp4bWFjX3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvICpzd19zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHM7CisKKwl1NjQgKnB0ciA9IHRtcF9zdGF0czsKKworCW1lbXNldCh0bXBfc3RhdHMsIDAsCisJCXZ4Z2VfZXRodG9vbF9nZXRfc3NldF9jb3VudChkZXYsIEVUSF9TU19TVEFUUykgKiBzaXplb2YodTY0KSk7CisKKwl4bWFjX3N0YXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyksIEdGUF9LRVJORUwpOworCWlmICh4bWFjX3N0YXRzID09IE5VTEwpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogJWQgTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIGZvciB4bWFjX3N0YXRzIiwKKwkJCQkgX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0dXJuOworCX0KKworCXN3X3N0YXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8pLAorCQkJCUdGUF9LRVJORUwpOworCWlmIChzd19zdGF0cyA9PSBOVUxMKSB7CisJCWtmcmVlKHhtYWNfc3RhdHMpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiAlZCBNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgZm9yIHN3X3N0YXRzIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybjsKKwl9CisKKwlod19zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoaHdfc3RhdHMgPT0gTlVMTCkgeworCQlrZnJlZSh4bWFjX3N0YXRzKTsKKwkJa2ZyZWUoc3dfc3RhdHMpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiAlZCBNZW1vcnkgQWxsb2NhdGlvbiBmYWlsZWQgZm9yIGh3X3N0YXRzIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybjsKKwl9CisKKwkqcHRyKysgPSAwOworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX3htYWNfc3RhdHNfZ2V0KGhsZGV2LCB4bWFjX3N0YXRzKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT04pIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXMgOiAlZCBGYWlsdXJlIGluIGdldHRpbmcgeG1hYyBzdGF0cyIsCisJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwkJfQorCX0KKwlzd3N0YXR1cyA9IHZ4Z2VfaHdfZHJpdmVyX3N0YXRzX2dldChobGRldiwgc3dfc3RhdHMpOworCWlmIChzd3N0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6ICVkIEZhaWx1cmUgaW4gZ2V0dGluZyBzdyBzdGF0cyIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCX0KKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2dldChobGRldiwgaHdfc3RhdHMpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiAlZCBod19zdGF0c19nZXQgZXJyb3IiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCX0KKworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5ub19vZl92cGF0aDsgaysrKSB7CisJCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8gKnZwYXRoX2luZm87CisKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2tdOworCQlqID0gdnBhdGgtPmRldmljZV9pZDsKKwkJdnBhdGhfaW5mbyA9IGh3X3N0YXRzLT52cGF0aF9pbmZvW2pdOworCQlpZiAoIXZwYXRoX2luZm8pIHsKKwkJCW1lbXNldChwdHIsIDAsIChWWEdFX0hXX1ZQQVRIX1RYX1NUQVRTX0xFTiArCisJCQkJVlhHRV9IV19WUEFUSF9SWF9TVEFUU19MRU4pICogc2l6ZW9mKHU2NCkpOworCQkJcHRyICs9IChWWEdFX0hXX1ZQQVRIX1RYX1NUQVRTX0xFTiArCisJCQkJVlhHRV9IV19WUEFUSF9SWF9TVEFUU19MRU4pOworCQkJY29udGludWU7CisJCX0KKworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF90dGxfZXRoX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3R0bF9ldGhfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfbWNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfYmNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdWNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdGFnZ2VkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3ZsZF9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdmxkX2lwX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfaWNtcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdGNwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9yc3RfdGNwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF91ZHA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3Vua25vd25fcHJvdG9jb2w7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X2xvc3RfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3BhcnNlX2Vycm9yOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF90Y3Bfb2ZmbG9hZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfcmV0eF90Y3Bfb2ZmbG9hZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfbG9zdF9pcF9vZmZsb2FkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfZXRoX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3ZsZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9vZmZsb2FkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF9ldGhfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfb2ZmbG9hZF9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3ZsZF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF92bGRfYmNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3RhZ2dlZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9sb25nX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3VzaXplZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9vc2l6ZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfZnJhZ19mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9qYWJiZXJfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzY0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF82NV8xMjdfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzEyOF8yNTVfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzI1Nl81MTFfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzUxMl8xMDIzX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF8xMDI0XzE1MThfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzE1MTlfNDA5NV9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfNDA5Nl84MTkxX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF84MTkyX21heF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfZ3RfbWF4X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9hY2NlcHRlZF9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfaXBfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9lcnJfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2ljbXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3RjcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdWRwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9lcnJfdGNwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9sb3N0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2xvc3RfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2xvc3RfaXBfb2ZmbG9hZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdmFyaW91c19kaXNjYXJkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9zbGVlcF9kaXNjYXJkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9yZWRfZGlzY2FyZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfcXVldWVfZnVsbF9kaXNjYXJkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9tcGFfb2tfZnJtczsKKwl9CisJKnB0cisrID0gMDsKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bWF4X2NvbmZpZ19wb3J0OyBrKyspIHsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfYmNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9kaXNjYXJkZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9lcnJvcmVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfZGlzY2FyZGVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfZXJyb3JlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X3Vua25vd25fc2xvd19wcm90b19mcm1zOworCX0KKwkqcHRyKysgPSAwOworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5tYXhfY29uZmlnX3BvcnQ7IGsrKykgeworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3R0bF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3R0bF9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfbWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3VjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdGFnZ2VkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdmxkX2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3ZsZF9pcF9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfaWNtcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF90Y3A7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfcnN0X3RjcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF91ZHA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfcGFyc2VfZXJyb3I7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdW5rbm93bl9wcm90b2NvbDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9wYXVzZV9jdHJsX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfbWFya2VyX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2xhY3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2Ryb3BfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfbWFya2VyX3Jlc3BfcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfeGdtaWlfY2hhcjJfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfeGdtaWlfY2hhcjFfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfeGdtaWlfY29sdW1uMl9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF94Z21paV9jb2x1bW4xX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2FueV9lcnJfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9kcm9wX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdmxkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfb2ZmbG9hZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfb2ZmbG9hZF9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdmxkX21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdmxkX2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9hY2NlcHRlZF9udWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90YWdnZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9sb25nX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdXNpemVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfb3NpemVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZnJhZ19mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2phYmJlcl9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF82NF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF82NV8xMjdfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfMTI4XzI1NV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF8yNTZfNTExX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzUxMl8xMDIzX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzEwMjRfMTUxOF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF8xNTE5XzQwOTVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfNDA5Nl84MTkxX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzgxOTJfbWF4X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsX2d0X21heF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2FjY2VwdGVkX2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2lwX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9lcnJfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfaWNtcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90Y3A7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdWRwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Vycl90Y3A7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcGF1c2VfY291bnQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcGF1c2VfY3RybF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3Vuc3VwX2N0cmxfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9mY3NfZXJyX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfaW5fcm5nX2xlbl9lcnJfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9vdXRfcm5nX2xlbl9lcnJfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9kcm9wX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZGlzY2FyZGVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZHJvcF9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9kcm9wX3VkcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9tYXJrZXJfcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbGFjcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdW5rbm93bl9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9mY3NfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9pbGxlZ2FsX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3N3aXRjaF9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2xlbl9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3JwYV9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2wyX21nbXRfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9ydHNfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90cmFzaF9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2J1ZmZfZnVsbF9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3JlZF9kaXNjYXJkOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2N0cmxfZXJyX2NudDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9kYXRhX2Vycl9jbnQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfY2hhcjFfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfZXJyX3N5bTsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9jb2x1bW4xX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2NoYXIyX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2xvY2FsX2ZhdWx0OworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfamV0dGlzb247CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcmVtb3RlX2ZhdWx0OworCX0KKworCSpwdHIrKyA9IDA7CisJZm9yIChrID0gMDsgayA8IHZkZXYtPm5vX29mX3ZwYXRoOyBrKyspIHsKKwkJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyAqdnBhdGhfaW5mbzsKKworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNba107CisJCWogPSB2cGF0aC0+ZGV2aWNlX2lkOworCQl2cGF0aF9pbmZvID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gKikKKwkJCQkmc3dfc3RhdHMtPnZwYXRoX2luZm9bal07CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnNvZnRfcmVzZXRfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy51bmtub3duX2FsYXJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfZmF1bHQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLm5ldHdvcmtfc3VzdGFpbmVkX29rOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9wb2lzb247CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfZG1hX2Vycm9yOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5kYmxnZW5fZmlmbzBfb3ZlcmZsb3c7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnN0YXRzYl9waWZfY2hhaW5fZXJyb3I7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnN0YXRzYl9kcm9wX3RpbWVvdXQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnRhcmdldF9pbGxlZ2FsX2FjY2VzczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMuaW5pX3NlcnJfZGV0OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5wcmNfcmluZ19idW1wczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2VycjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2Fib3J0OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5wcmNfcXVhbnRhX3NpemVfZXJyOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLmNvbW1vbl9zdGF0cy5mdWxsX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5jb21tb25fc3RhdHMudXNhZ2VfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLmNvbW1vbl9zdGF0cy51c2FnZV9tYXg7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMuY29tbW9uX3N0YXRzLgorCQkJCQlyZXNlcnZlX2ZyZWVfc3dhcHNfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLmNvbW1vbl9zdGF0cy50b3RhbF9jb21wbF9jbnQ7CisJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX0RUUl9NQVhfVF9DT0RFOyBqKyspCisJCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLnJ4ZF90X2NvZGVfZXJyX2NudFtqXTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy5jb21tb25fc3RhdHMuZnVsbF9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMuY29tbW9uX3N0YXRzLnVzYWdlX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy5jb21tb25fc3RhdHMudXNhZ2VfbWF4OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLmNvbW1vbl9zdGF0cy4KKwkJCQkJCXJlc2VydmVfZnJlZV9zd2Fwc19jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMuY29tbW9uX3N0YXRzLnRvdGFsX2NvbXBsX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy50b3RhbF9wb3N0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy50b3RhbF9idWZmZXJzOworCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19EVFJfTUFYX1RfQ09ERTsgaisrKQorCQkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy50eGRfdF9jb2RlX2Vycl9jbnRbal07CisJfQorCisJKnB0cisrID0gMDsKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGsrKykgeworCQlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICp2cGF0aF9pbmZvOworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNba107CisJCWogPSB2cGF0aC0+ZGV2aWNlX2lkOworCQl2cGF0aF9pbmZvID0gaHdfc3RhdHMtPnZwYXRoX2luZm9bal07CisJCWlmICghdnBhdGhfaW5mbykgeworCQkJbWVtc2V0KHB0ciwgMCwgVlhHRV9IV19WUEFUSF9TVEFUU19MRU4gKiBzaXplb2YodTY0KSk7CisJCQlwdHIgKz0gVlhHRV9IV19WUEFUSF9TVEFUU19MRU47CisJCQljb250aW51ZTsKKwkJfQorCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5pbmlfbnVtX213cl9zZW50OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5pbmlfbnVtX21yZF9zZW50OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5pbmlfbnVtX2NwbF9yY3ZkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5pbmlfbnVtX213cl9ieXRlX3NlbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmluaV9udW1fY3BsX2J5dGVfcmN2ZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+d3JjcmR0YXJiX3hvZmY7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJkY3JkdGFyYl94b2ZmOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50MTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQyOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50NDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ1OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5wcm9nX2V2ZW50X3ZudW0wOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5wcm9nX2V2ZW50X3ZudW0xOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5wcm9nX2V2ZW50X3ZudW0yOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5wcm9nX2V2ZW50X3ZudW0zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9tdWx0aV9jYXN0X2ZyYW1lX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X2ZybV90cmFuc2ZlcnJlZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhkX3JldHVybmVkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9tcGFfbGVuX2ZhaWxfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfbXBhX21ya19mYWlsX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X21wYV9jcmNfZmFpbF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9wZXJtaXR0ZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3dvbF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczsKKwl9CisKKwkqcHRyKysgPSAwOworCSpwdHIrKyA9IHZkZXYtPnN0YXRzLnZwYXRoc19vcGVuOworCSpwdHIrKyA9IHZkZXYtPnN0YXRzLnZwYXRoX29wZW5fZmFpbDsKKwkqcHRyKysgPSB2ZGV2LT5zdGF0cy5saW5rX3VwOworCSpwdHIrKyA9IHZkZXYtPnN0YXRzLmxpbmtfZG93bjsKKworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5ub19vZl92cGF0aDsgaysrKSB7CisJCSpwdHIgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZnJtczsKKwkJKihwdHIgKyAxKSArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9lcnJvcnM7CisJCSoocHRyICsgMikgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfYnl0ZXM7CisJCSoocHRyICsgMykgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhkX25vdF9mcmVlOworCQkqKHB0ciArIDQpICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4ZF9vdXRfb2ZfZGVzYzsKKwkJKihwdHIgKyA1KSArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9mcm1zOworCQkqKHB0ciArIDYpICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2Vycm9yczsKKwkJKihwdHIgKyA3KSArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9ieXRlczsKKwkJKihwdHIgKyA4KSArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9tY2FzdDsKKwkJKihwdHIgKyA5KSArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy5wY2lfbWFwX2ZhaWwgKworCQkJCXZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnBjaV9tYXBfZmFpbDsKKwkJKihwdHIgKyAxMCkgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMuc2tiX2FsbG9jX2ZhaWw7CisJfQorCisJcHRyICs9IDEyOworCisJa2ZyZWUoeG1hY19zdGF0cyk7CisJa2ZyZWUoc3dfc3RhdHMpOworCWtmcmVlKGh3X3N0YXRzKTsKK30KKworc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3sKKwlpbnQgc3RhdF9zaXplID0gMDsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJdnhnZV9hZGRfc3RyaW5nKCJWUEFUSCBTVEFUSVNUSUNTJXNcdFx0XHQiLAorCQkJJnN0YXRfc2l6ZSwgZGF0YSwgIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90dGxfZXRoX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdHRsX2V0aF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9iY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3VjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdGFnZ2VkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdmxkX2lwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3ZsZF9pcF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9pY21wXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdGNwXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcnN0X3RjcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91ZHBfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91bmtub3duX3Byb3RvXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2xvc3RfaXBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcGFyc2VfZXJyb3JfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdGNwX29mZmxvYWRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcmV0eF90Y3Bfb2ZmbG9hZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbG9zdF9pcF9vZmZsb2FkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfZXRoX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb2ZmbG9hZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9ldGhfb2N0ZWN0c18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29mZmxvYWRfb2N0ZWN0c18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX21jYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9iY2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF91Y2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF9udWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdGFnZ2VkX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9uZ19mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3VzaXplZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29zaXplZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ZyYWdfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9qYWJiZXJfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNjRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNjVfMTI3X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xMjhfMjU1X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8yNTZfNTExX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF81MTJfMTAyM19mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTAyNF8xNTE4X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xNTE5XzQwOTVfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzQwOTZfODE5MV9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfODE5Ml9tYXhfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX2d0X21heF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pcCVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfaXBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaXBfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9lcnJfaXBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaWNtcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3RjcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3VkcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Vycl90Y3BfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9zdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvc3RfaXBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9zdF9pcF9vZmZsb2FkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92YXJpb3VzX2Rpc2NhcmRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3NsZWVwX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcmVkX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcXVldWVfZnVsbF9kaXNjYXJkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tcGFfb2tfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQl9CisKKwkJdnhnZV9hZGRfc3RyaW5nKCJcbkFHR1IgU1RBVElTVElDUyVzXHRcdFx0XHQiLAorCQkJJnN0YXRfc2l6ZSwgZGF0YSwgIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bWF4X2NvbmZpZ19wb3J0OyBpKyspIHsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZnJtc18lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2JjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kaXNjYXJkZWRfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9lcnJvcmVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mcm1zXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYmNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Rpc2NhcmRlZF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Vycm9yZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3Vua25vd25fc2xvd19wcm90b19mcm1zXyVkXHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQl9CisKKwkJdnhnZV9hZGRfc3RyaW5nKCJcblBPUlQgU1RBVElTVElDUyVzXHRcdFx0XHQiLAorCQkJJnN0YXRfc2l6ZSwgZGF0YSwgIiIpOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bWF4X2NvbmZpZ19wb3J0OyBpKyspIHsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdHRsX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90dGxfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X21jYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9iY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3RhZ2dlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdmxkX2lwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdmxkX2lwX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfaWNtcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdGNwXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9yc3RfdGNwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdWRwXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9wYXJzZV9lcnJvcl8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3Vua25vd25fcHJvdG9jb2xfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcGF1c2VfY3RybF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X21hcmtlcl9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9sYWNwZHVfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2Ryb3BfaXBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9tYXJrZXJfcmVzcF9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF94Z21paV9jaGFyMl9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF94Z21paV9jaGFyMV9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF94Z21paV9jb2x1bW4yX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3hnbWlpX2NvbHVtbjFfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfYW55X2Vycl9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZHJvcF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29mZmxvYWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb2ZmbG9hZF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9tY2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9iY2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX3VjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdGFnZ2VkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb25nX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91c2l6ZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29zaXplZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZnJhZ19mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfamFiYmVyX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNjRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF82NV8xMjdfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTI4XzI1NV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8yNTZfNTExX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzUxMl8xMDIzX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzEwMjRfMTUxOF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xNTE5XzQwOTVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNDA5Nl84MTkxX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzgxOTJfbWF4X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX2d0X21heF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2lwXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF9pcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2lwX29jdGV0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Vycl9pcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ljbXBfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3RjcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdWRwXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9lcnJfdGNwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcGF1c2VfY291bnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9wYXVzZV9jdHJsX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdW5zdXBfY3RybF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Zjc19lcnJfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2luX3JuZ19sZW5fZXJyX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfb3V0X3JuZ19sZW5fZXJyX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZHJvcF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZGlzY2FyZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZHJvcF9pcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Ryb3BfdWRwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbWFya2VyX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xhY3BkdV9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdW5rbm93bl9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tYXJrZXJfcmVzcF9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mY3NfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2lsbGVnYWxfcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfc3dpdGNoX2Rpc2NhcmRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbGVuX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9ycGFfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2wyX21nbXRfZGlzY2FyZF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9ydHNfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3RyYXNoX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9idWZmX2Z1bGxfZGlzY2FyZF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9yZWRfZGlzY2FyZF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2N0cmxfZXJyX2NudF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9kYXRhX2Vycl9jbnRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfY2hhcjFfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfZXJyX3N5bV8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2NvbHVtbjFfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfY2hhcjJfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9jYWxfZmF1bHRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9jb2x1bW4yX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2pldHRpc29uXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcmVtb3RlX2ZhdWx0XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJfQorCisJCXZ4Z2VfYWRkX3N0cmluZygiXG4gU09GVFdBUkUgU1RBVElTVElDUyVzXHRcdFx0IiwKKwkJCSZzdGF0X3NpemUsIGRhdGEsICIiKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYWRkX3N0cmluZygic29mdF9yZXNldF9jbnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ1bmtub3duX2FsYXJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoIm5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoIm5ldHdvcmtfc3VzdGFpbmVkX29rXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImtkZmNjdGxfZmlmbzBfcG9pc29uXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImtkZmNjdGxfZmlmbzBfZG1hX2Vycm9yXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImRibGdlbl9maWZvMF9vdmVyZmxvd18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJzdGF0c2JfcGlmX2NoYWluX2Vycm9yXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInN0YXRzYl9kcm9wX3RpbWVvdXRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidGFyZ2V0X2lsbGVnYWxfYWNjZXNzXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9zZXJyX2RldF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByY19yaW5nX2J1bXBzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJjX3J4ZGNtX3NjX2Vycl8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByY19yeGRjbV9zY19hYm9ydF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcmNfcXVhbnRhX3NpemVfZXJyXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJpbmdfZnVsbF9jbnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyaW5nX3VzYWdlX2NudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJpbmdfdXNhZ2VfbWF4XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmluZ19yZXNlcnZlX2ZyZWVfc3dhcHNfY250XyVkXHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyaW5nX3RvdGFsX2NvbXBsX2NudF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfRFRSX01BWF9UX0NPREU7IGorKykKKwkJCQl2eGdlX2FkZF9zdHJpbmcoInJ4ZF90X2NvZGVfZXJyX2NudCVkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGosIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX2Z1bGxfY250XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb191c2FnZV9jbnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3VzYWdlX21heF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudF8lZFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb190b3RhbF9jb21wbF9jbnRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb190b3RhbF9wb3N0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fdG90YWxfYnVmZmVyc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfRFRSX01BWF9UX0NPREU7IGorKykKKwkJCQl2eGdlX2FkZF9zdHJpbmcoInR4ZF90X2NvZGVfZXJyX2NudCVkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGosIGkpOworCQl9CisKKwkJdnhnZV9hZGRfc3RyaW5nKCJcbiBIQVJEV0FSRSBTVEFUSVNUSUNTJXNcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsICIiKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX251bV9td3Jfc2VudF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfbnVtX21yZF9zZW50XyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9udW1fY3BsX3JjdmRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX251bV9td3JfYnl0ZV9zZW50XyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfbnVtX2NwbF9ieXRlX3JjdmRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoIndyY3JkdGFyYl94b2ZmXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJkY3JkdGFyYl94b2ZmXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50MF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQxXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDJfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50M18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQ0XyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDVfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByb2dfZXZlbnRfdm51bTBfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJvZ19ldmVudF92bnVtMV8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcm9nX2V2ZW50X3ZudW0yXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByb2dfZXZlbnRfdm51bTNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbXVsdGlfY2FzdF9mcmFtZV9kaXNjYXJkXyVkXHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZnJtX3RyYW5zZmVycmVkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeGRfcmV0dXJuZWRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbXBhX2xlbl9mYWlsX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21wYV9tcmtfZmFpbF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tcGFfY3JjX2ZhaWxfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcGVybWl0dGVkX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zXyVkXHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfd29sX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXNfJWRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQl9CisKKwkJbWVtY3B5KGRhdGEgKyBzdGF0X3NpemUsICZldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzLAorCQkJc2l6ZW9mKGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKSAqIHZkZXYtPm5vX29mX3ZwYXRoOworfQorCitzdGF0aWMgdTMyIHZ4Z2VfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gdmRldi0+cnhfY3N1bTsKK30KKworc3RhdGljIGludCB2eGdlX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChkYXRhKQorCQl2ZGV2LT5yeF9jc3VtID0gMTsKKwllbHNlCisJCXZkZXYtPnJ4X2NzdW0gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX29wX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJaWYgKGRhdGEpCisJCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KTsKKwllbHNlCisJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBWWEdFX1RJVExFX0xFTiArCisJCQkodmRldi0+bm9fb2ZfdnBhdGggKiBWWEdFX0hXX1ZQQVRIX1NUQVRTX0xFTikgKworCQkJKHZkZXYtPm1heF9jb25maWdfcG9ydCAqIFZYR0VfSFdfQUdHUl9TVEFUU19MRU4pICsKKwkJCSh2ZGV2LT5tYXhfY29uZmlnX3BvcnQgKiBWWEdFX0hXX1BPUlRfU1RBVFNfTEVOKSArCisJCQkodmRldi0+bm9fb2ZfdnBhdGggKiBWWEdFX0hXX1ZQQVRIX1RYX1NUQVRTX0xFTikgKworCQkJKHZkZXYtPm5vX29mX3ZwYXRoICogVlhHRV9IV19WUEFUSF9SWF9TVEFUU19MRU4pICsKKwkJCSh2ZGV2LT5ub19vZl92cGF0aCAqIFZYR0VfU1dfU1RBVFNfTEVOKSArCisJCQlEUklWRVJfU1RBVF9MRU47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2eGdlX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MJCT0gdnhnZV9ldGh0b29sX2dzZXQsCisJLnNldF9zZXR0aW5ncwkJPSB2eGdlX2V0aHRvb2xfc3NldCwKKwkuZ2V0X2RydmluZm8JCT0gdnhnZV9ldGh0b29sX2dkcnZpbmZvLAorCS5nZXRfcmVnc19sZW4JCT0gdnhnZV9ldGh0b29sX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MJCT0gdnhnZV9ldGh0b29sX2dyZWdzLAorCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfcGF1c2VwYXJhbQkJPSB2eGdlX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YSwKKwkuc2V0X3BhdXNlcGFyYW0JCT0gdnhnZV9ldGh0b29sX3NldHBhdXNlX2RhdGEsCisJLmdldF9yeF9jc3VtCQk9IHZ4Z2VfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IHZ4Z2Vfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtCQk9IGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0sCisJLmdldF9zZwkJCT0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZwkJCT0gZXRodG9vbF9vcF9zZXRfc2csCisJLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvCQk9IHZ4Z2VfZXRodG9vbF9vcF9zZXRfdHNvLAorCS5nZXRfc3RyaW5ncwkJPSB2eGdlX2V0aHRvb2xfZ2V0X3N0cmluZ3MsCisJLnBoeXNfaWQJCT0gdnhnZV9ldGh0b29sX2lkbmljLAorCS5nZXRfc3NldF9jb3VudAkJPSB2eGdlX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gdnhnZV9nZXRfZXRodG9vbF9zdGF0cywKK307CisKK3ZvaWQgaW5pdGlhbGl6ZV9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmRldiwgJnZ4Z2VfZXRodG9vbF9vcHMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWV0aHRvb2wuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzZGYwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtZXRodG9vbC5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVlhHRV9FVEhUT09MX0gKKyNkZWZpbmUgX1ZYR0VfRVRIVE9PTF9ICisKKyNpbmNsdWRlICJ2eGdlLW1haW4uaCIKKworLyogRXRodG9vbCByZWxhdGVkIHZhcmlhYmxlcyBhbmQgTWFjcm9zLiAqLworc3RhdGljIGludCB2eGdlX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpOworCitzdGF0aWMgY2hhciBldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwl7IlxuIERSSVZFUiBTVEFUSVNUSUNTIn0sCisJeyJ2cGF0aHNfb3BlbmVkIn0sCisJeyJ2cGF0aF9vcGVuX2ZhaWxfY250In0sCisJeyJsaW5rX3VwX2NudCJ9LAorCXsibGlua19kb3duX2NudCJ9LAorCXsidHhfZnJtcyJ9LAorCXsidHhfZXJyb3JzIn0sCisJeyJ0eF9ieXRlcyJ9LAorCXsidHhkX25vdF9mcmVlIn0sCisJeyJ0eGRfb3V0X29mX2Rlc2MifSwKKwl7InJ4X2ZybXMifSwKKwl7InJ4X2Vycm9ycyJ9LAorCXsicnhfYnl0ZXMifSwKKwl7InJ4X21jYXN0In0sCisJeyJwY2lfbWFwX2ZhaWxfY250In0sCisJeyJza2JfYWxsb2NfZmFpbF9jbnQifQorfTsKKworI2RlZmluZSBWWEdFX1RJVExFX0xFTgkJCTUKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9TVEFUU19MRU4gCTI3CisjZGVmaW5lIFZYR0VfSFdfQUdHUl9TVEFUU19MRU4gIAkxMworI2RlZmluZSBWWEdFX0hXX1BPUlRfU1RBVFNfTEVOICAJOTQKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9UWF9TVEFUU19MRU4JMTkKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SWF9TVEFUU19MRU4JNDIKKyNkZWZpbmUgVlhHRV9TV19TVEFUU19MRU4JCTYwCisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfTEVOCShWWEdFX0hXX1ZQQVRIX1NUQVRTX0xFTiArXAorCQkJCVZYR0VfSFdfQUdHUl9TVEFUU19MRU4gK1wKKwkJCQlWWEdFX0hXX1BPUlRfU1RBVFNfTEVOICtcCisJCQkJVlhHRV9IV19WUEFUSF9UWF9TVEFUU19MRU4gK1wKKwkJCQlWWEdFX0hXX1ZQQVRIX1JYX1NUQVRTX0xFTikKKworI2RlZmluZSBEUklWRVJfU1RBVF9MRU4gKHNpemVvZihldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzKS9FVEhfR1NUUklOR19MRU4pCisjZGVmaW5lIFNUQVRfTEVOIChWWEdFX0hXX1NUQVRTX0xFTiArIERSSVZFUl9TVEFUX0xFTiArIFZYR0VfU1dfU1RBVFNfTEVOKQorCisvKiBNYXhpbXVtIGZsaWNrZXIgdGltZSBvZiBhZGFwdGVyIExFRCAqLworI2RlZmluZSBWWEdFX01BWF9GTElDS0VSX1RJTUUgKDYwICogSFopIC8qIDYwIHNlY29uZHMgKi8KKyNkZWZpbmUgVlhHRV9GTElDS0VSX09OCQkxCisjZGVmaW5lIFZYR0VfRkxJQ0tFUl9PRkYJMAorCisjZGVmaW5lIHZ4Z2VfYWRkX3N0cmluZyhmbXQsIHNpemUsIGJ1ZiwgLi4uKSB7XAorCXNucHJpbnRmKGJ1ZiArICpzaXplLCBFVEhfR1NUUklOR19MRU4sIGZtdCwgX19WQV9BUkdTX18pOyBcCisJKnNpemUgKz0gRVRIX0dTVFJJTkdfTEVOOyBcCit9CisKKyNlbmRpZiAvKl9WWEdFX0VUSFRPT0xfSCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWVmMTYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYwpAQCAtMCwwICsxLDQ1MDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorKgorKiB2eGdlLW1haW4uYzogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyogICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyoKKyogVGhlIG1vZHVsZSBsb2FkYWJsZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGFuZCBhIGJyaWVmCisqIGV4cGxhbmF0aW9uIG9mIGFsbCB0aGUgdmFyaWFibGVzOgorKiB2bGFuX3RhZ19zdHJpcDoKKyoJU3RyaXAgVkxBTiBUYWcgZW5hYmxlL2Rpc2FibGUuIEluc3RydWN0cyB0aGUgZGV2aWNlIHRvIHJlbW92ZQorKgl0aGUgVkxBTiB0YWcgZnJvbSBhbGwgcmVjZWl2ZWQgdGFnZ2VkIGZyYW1lcyB0aGF0IGFyZSBub3QKKyoJcmVwbGljYXRlZCBhdCB0aGUgaW50ZXJuYWwgTDIgc3dpdGNoLgorKgkJMCAtIERvIG5vdCBzdHJpcCB0aGUgVkxBTiB0YWcuCisqCQkxIC0gU3RyaXAgdGhlIFZMQU4gdGFnLgorKgorKiBhZGRyX2xlYXJuX2VuOgorKglFbmFibGUgbGVhcm5pbmcgdGhlIG1hYyBhZGRyZXNzIG9mIHRoZSBndWVzdCBPUyBpbnRlcmZhY2UgaW4KKyoJYSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4KKyoJCTAgLSBESVNBQkxFCisqCQkxIC0gRU5BQkxFCisqCisqIG1heF9jb25maWdfcG9ydDoKKyoJTWF4aW11bSBudW1iZXIgb2YgcG9ydCB0byBiZSBzdXBwb3J0ZWQuCisqCQlNSU4gLTEgYW5kIE1BWCAtIDIKKyoKKyogbWF4X2NvbmZpZ192cGF0aDoKKyoJVGhpcyBjb25maWd1cmVzIHRoZSBtYXhpbXVtIG5vIG9mIFZQQVRIIGNvbmZpZ3VyZXMgZm9yIGVhY2gKKyogCWRldmljZSBmdW5jdGlvbi4KKyoJCU1JTiAtIDEgYW5kIE1BWCAtIDE3CisqCisqIG1heF9jb25maWdfZGV2OgorKglUaGlzIGNvbmZpZ3VyZXMgbWF4aW11bSBubyBvZiBEZXZpY2UgZnVuY3Rpb24gdG8gYmUgZW5hYmxlZC4KKyoJCU1JTiAtIDEgYW5kIE1BWCAtIDE3CisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlICJ2eGdlLW1haW4uaCIKKyNpbmNsdWRlICJ2eGdlLXJlZy5oIgorCitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGVyaW9uJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PIgorCSJWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlciIpOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnhnZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CisJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9XSU4sIFBDSV9BTllfSUQsCisJUENJX0FOWV9JRH0sCisJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9VTkksIFBDSV9BTllfSUQsCisJUENJX0FOWV9JRH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdnhnZV9pZF90YWJsZSk7CisKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVCh2bGFuX3RhZ19zdHJpcCwgVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKTsKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVChhZGRyX2xlYXJuX2VuLCBWWEdFX0hXX01BQ19BRERSX0xFQVJOX0RFRkFVTFQpOworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKG1heF9jb25maWdfcG9ydCwgVlhHRV9NQVhfQ09ORklHX1BPUlQpOworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKG1heF9jb25maWdfdnBhdGgsIFZYR0VfVVNFX0RFRkFVTFQpOworVlhHRV9NT0RVTEVfUEFSQU1fSU5UKG1heF9tYWNfdnBhdGgsIFZYR0VfTUFYX01BQ19BRERSX0NPVU5UKTsKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVChtYXhfY29uZmlnX2RldiwgVlhHRV9NQVhfQ09ORklHX0RFVik7CisKK3N0YXRpYyB1MTYgdnBhdGhfc2VsZWN0b3JbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU10gPQorCQl7MCwgMSwgMywgMywgNywgNywgNywgNywgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAzMX07CitzdGF0aWMgdW5zaWduZWQgaW50IGJ3X3BlcmNlbnRhZ2VbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU10gPQorCXtbMCAuLi4oVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUyAtIDEpXSA9IDB4RkZ9OworbW9kdWxlX3BhcmFtX2FycmF5KGJ3X3BlcmNlbnRhZ2UsIHVpbnQsIE5VTEwsIDApOworCitzdGF0aWMgc3RydWN0IHZ4Z2VfZHJ2X2NvbmZpZyAqZHJpdmVyX2NvbmZpZzsKKworc3RhdGljIGlubGluZSBpbnQgaXNfdnhnZV9jYXJkX3VwKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCXJldHVybiB0ZXN0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFZYR0VfQ09NUExFVEVfVlBBVEhfVFgoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3B0ciA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKip0ZW1wLCAqaGVhZCwgKnNrYjsKKworCWlmIChzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpKSB7CisJCXZ4Z2VfaHdfdnBhdGhfcG9sbF90eChmaWZvLT5oYW5kbGUsICh2b2lkICoqKSZza2JfcHRyKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCX0KKwkvKiBmcmVlIFNLQnMgKi8KKwloZWFkID0gc2tiX3B0cjsKKwl3aGlsZSAoaGVhZCkgeworCQlza2IgPSBoZWFkOworCQl0ZW1wID0gKHN0cnVjdCBza19idWZmICoqKSZza2ItPmNiOworCQloZWFkID0gKnRlbXA7CisJCSp0ZW1wID0gTlVMTDsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBWWEdFX0NPTVBMRVRFX0FMTF9UWChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKworCS8qIENvbXBsZXRlIGFsbCB0cmFuc21pdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJVlhHRV9DT01QTEVURV9WUEFUSF9UWCgmdmRldi0+dnBhdGhzW2ldLmZpZm8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9BTExfUlgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZzsKKworCS8qIENvbXBsZXRlIGFsbCByZWNlaXZlcyovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJcmluZyA9ICZ2ZGV2LT52cGF0aHNbaV0ucmluZzsKKwkJdnhnZV9od192cGF0aF9wb2xsX3J4KHJpbmctPmhhbmRsZSk7CisJfQorfQorCisvKgorICogTXVsdGlRIG1hbmlwdWxhdGlvbiBoZWxwZXIgZnVuY3Rpb25zCisgKi8KK3ZvaWQgdnhnZV9zdG9wX2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmRldi0+bmRldjsKKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSAhPSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUT1A7CisJfQorCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOworfQorCit2b2lkIHZ4Z2Vfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgdnhnZV9maWZvICpmaWZvKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmaWZvLT5uZGV2OworCisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gTlVMTDsKKwlpZiAoZmlmby0+dHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpCisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBmaWZvLT5kcml2ZXJfaWQpOworCWVsc2UgeworCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJCWZpZm8tPnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RPUDsKKwl9CisKKwluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Cit9CisKK3ZvaWQgdnhnZV9zdGFydF9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZkZXYtPm5kZXY7CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfTVVMVElRX1NURUVSSU5HKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ucXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVEFSVDsKKwl9CisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOworfQorCitzdGF0aWMgdm9pZCB2eGdlX3dha2VfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2ZGV2LT5uZGV2OworCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlICE9IFRYX01VTFRJUV9TVEVFUklORykgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RBUlQ7CisJfQorCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhkZXYpOworfQorCit2b2lkIHZ4Z2Vfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgdnhnZV9maWZvICpmaWZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmaWZvLT5uZGV2OworCisJaW50IHZwYXRoX25vID0gZmlmby0+ZHJpdmVyX2lkOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IE5VTEw7CisJaWYgKGZpZm8tPnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKSB7CisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCB2cGF0aF9ubyk7CisJCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpCisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CisJfSBlbHNlIHsKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCQlpZiAoZmlmby0+cXVldWVfc3RhdGUgPT0gVlBBVEhfUVVFVUVfU1RPUCkKKwkJCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKKwkJCQlmaWZvLT5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUQVJUOworCQkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKKwkJCX0KKwl9Cit9CisKKy8qCisgKiB2eGdlX2NhbGxiYWNrX2xpbmtfdXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgaW50ZXJydXB0IGNvbnRleHQgdG8gbm90aWZ5IGxpbmsgdXAgc3RhdGUKKyAqIGNoYW5nZS4KKyAqLwordm9pZAordnhnZV9jYWxsYmFja19saW5rX3VwKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaGxkZXYtPm5kZXY7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTGluayBVcFxuIiwgdmRldi0+bmRldi0+bmFtZSk7CisJdmRldi0+c3RhdHMubGlua191cCsrOworCisJbmV0aWZfY2Fycmllcl9vbih2ZGV2LT5uZGV2KTsKKwl2eGdlX3dha2VfYWxsX3R4X3F1ZXVlKHZkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoKKyAqIHZ4Z2VfY2FsbGJhY2tfbGlua19kb3duCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGludGVycnVwdCBjb250ZXh0IHRvIG5vdGlmeSBsaW5rIGRvd24gc3RhdGUKKyAqIGNoYW5nZS4KKyAqLwordm9pZAordnhnZV9jYWxsYmFja19saW5rX2Rvd24oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBobGRldi0+bmRldjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIERvd25cbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCisJdmRldi0+c3RhdHMubGlua19kb3duKys7CisJbmV0aWZfY2Fycmllcl9vZmYodmRldi0+bmRldik7CisJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qCisgKiB2eGdlX3J4X2FsbG9jCisgKgorICogQWxsb2NhdGUgU0tCLgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYqCit2eGdlX3J4X2FsbG9jKHZvaWQgKmR0cmgsIHN0cnVjdCB2eGdlX3JpbmcgKnJpbmcsIGNvbnN0IGludCBza2Jfc2l6ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICAqZGV2OworCXN0cnVjdCBza19idWZmICAgICAgICpza2I7CisJc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdjsKKworCWRldiA9IHJpbmctPm5kZXY7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHJoKTsKKworCS8qIHRyeSB0byBhbGxvY2F0ZSBza2IgZmlyc3QuIHRoaXMgb25lIG1heSBmYWlsICovCisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHNrYl9zaXplICsKKwlWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTik7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCXZ4Z2VfZGVidWdfbWVtKFZYR0VfRVJSLAorCQkJIiVzOiBvdXQgb2YgbWVtb3J5IHRvIGFsbG9jYXRlIFNLQiIsIGRldi0+bmFtZSk7CisJCXJpbmctPnN0YXRzLnNrYl9hbGxvY19mYWlsKys7CisJCXJldHVybiBOVUxMOworCX0KKworCXZ4Z2VfZGVidWdfbWVtKFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgIFNrYiA6IDB4JXAiLCByaW5nLT5uZGV2LT5uYW1lLAorCQlfX2Z1bmNfXywgX19MSU5FX18sIHNrYik7CisKKwlza2JfcmVzZXJ2ZShza2IsIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOKTsKKworCXJ4X3ByaXYtPnNrYiA9IHNrYjsKKwlyeF9wcml2LT5kYXRhX3NpemUgPSBza2Jfc2l6ZTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCByaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKKyAqIHZ4Z2VfcnhfbWFwCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9yeF9tYXAodm9pZCAqZHRyaCwgc3RydWN0IHZ4Z2VfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2OworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHJoKTsKKworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwgcnhfcHJpdi0+c2tiLT5kYXRhLAorCQkJCXJ4X3ByaXYtPmRhdGFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWlmIChkbWFfYWRkciA9PSAwKSB7CisJCXJpbmctPnN0YXRzLnBjaV9tYXBfZmFpbCsrOworCQlyZXR1cm4gLUVJTzsKKwl9CisJdnhnZV9kZWJ1Z19tZW0oVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCAgMSBidWZmZXIgbW9kZSBkbWFfYWRkciA9IDB4JWxseCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfYWRkcik7CisJdnhnZV9od19yaW5nX3J4ZF8xYl9zZXQoZHRyaCwgZG1hX2FkZHIsIHJ4X3ByaXYtPmRhdGFfc2l6ZSk7CisKKwlyeF9wcml2LT5kYXRhX2RtYSA9IGRtYV9hZGRyOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZ4Z2VfcnhfaW5pdGlhbF9yZXBsZW5pc2gKKyAqIEFsbG9jYXRpb24gb2YgUnhEIGFzIGFuIGluaXRpYWwgcmVwbGVuaXNoIHByb2NlZHVyZS4KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfcnhfaW5pdGlhbF9yZXBsZW5pc2godm9pZCAqZHRyaCwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9IChzdHJ1Y3QgdnhnZV9yaW5nICopdXNlcmRhdGE7CisJc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdjsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWlmICh2eGdlX3J4X2FsbG9jKGR0cmgsIHJpbmcsCisJCQkgIFZYR0VfTExfTUFYX0ZSQU1FX1NJWkUocmluZy0+bmRldikpID09IE5VTEwpCisJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisKKwlpZiAodnhnZV9yeF9tYXAoZHRyaCwgcmluZykpIHsKKwkJcnhfcHJpdiA9IHZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQoZHRyaCk7CisJCWRldl9rZnJlZV9za2IocnhfcHJpdi0+c2tiKTsKKworCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCX0KKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCByaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordnhnZV9yeF9jb21wbGV0ZShzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbiwKKwkJIGludCBwa3RfbGVuZ3RoLCBzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvICpleHRfaW5mbykKK3sKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcmluZy0+ZHJpdmVyX2lkKTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByaW5nLT5uZGV2KTsKKworCXJpbmctPnN0YXRzLnJ4X2ZybXMrKzsKKwlyaW5nLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuZ3RoOworCisJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkKKwkJcmluZy0+c3RhdHMucnhfbWNhc3QrKzsKKworCXZ4Z2VfZGVidWdfcngoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCAgc2tiIHByb3RvY29sID0gJWQiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIHNrYi0+cHJvdG9jb2wpOworCisJaWYgKHJpbmctPmdyb19lbmFibGUpIHsKKwkJaWYgKHJpbmctPnZsZ3JwICYmIGV4dF9pbmZvLT52bGFuICYmCisJCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KKwkJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQorCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcmluZy0+bmFwaSwgcmluZy0+dmxncnAsCisJCQkJCWV4dF9pbmZvLT52bGFuLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyaW5nLT5uYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChyaW5nLT52bGdycCAmJiB2bGFuICYmCisJCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KKwkJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcmluZy0+dmxncnAsIHZsYW4pOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0KKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCByaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9yZV9wcmVfcG9zdCh2b2lkICpkdHIsIHN0cnVjdCB2eGdlX3JpbmcgKnJpbmcsCisJCQkJICAgIHN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXYpCit7CisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPnBkZXYsCisJCXJ4X3ByaXYtPmRhdGFfZG1hLCByeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwl2eGdlX2h3X3JpbmdfcnhkXzFiX3NldChkdHIsIHJ4X3ByaXYtPmRhdGFfZG1hLCByeF9wcml2LT5kYXRhX3NpemUpOworCXZ4Z2VfaHdfcmluZ19yeGRfcHJlX3Bvc3QocmluZy0+aGFuZGxlLCBkdHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnhnZV9wb3N0KGludCAqZHRyX2NudCwgdm9pZCAqKmZpcnN0X2R0ciwKKwkJCSAgICAgdm9pZCAqcG9zdF9kdHIsIHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gpCit7CisJaW50IGR0cl9jb3VudCA9ICpkdHJfY250OworCWlmICgoKmR0cl9jbnQgJSBWWEdFX0hXX1JYU1lOQ19GUkVRX0NOVCkgPT0gMCkgeworCQlpZiAoKmZpcnN0X2R0cikKKwkJCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYihyaW5naCwgKmZpcnN0X2R0cik7CisJCSpmaXJzdF9kdHIgPSBwb3N0X2R0cjsKKwl9IGVsc2UKKwkJdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3QocmluZ2gsIHBvc3RfZHRyKTsKKwlkdHJfY291bnQrKzsKKwkqZHRyX2NudCA9IGR0cl9jb3VudDsKK30KKworLyoKKyAqIHZ4Z2VfcnhfMWJfY29tcGwKKyAqCisgKiBJZiB0aGUgaW50ZXJydXB0IGlzIGJlY2F1c2Ugb2YgYSByZWNlaXZlZCBmcmFtZSBvciBpZiB0aGUgcmVjZWl2ZSByaW5nCisgKiBjb250YWlucyBmcmVzaCBhcyB5ZXQgdW4tcHJvY2Vzc2VkIGZyYW1lcywgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfcnhfMWJfY29tcGwoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCwgdm9pZCAqZHRyLAorCQkgdTggdF9jb2RlLCB2b2lkICp1c2VyZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nID0gKHN0cnVjdCB2eGdlX3JpbmcgKil1c2VyZGF0YTsKKwlzdHJ1Y3QgIG5ldF9kZXZpY2UgKmRldiA9IHJpbmctPm5kZXY7CisJdW5zaWduZWQgaW50IGRtYV9zaXplczsKKwl2b2lkICpmaXJzdF9kdHIgPSBOVUxMOworCWludCBkdHJfY250ID0gMDsKKwlpbnQgZGF0YV9zaXplOworCWRtYV9hZGRyX3QgZGF0YV9kbWE7CisJaW50IHBrdF9sZW5ndGg7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2OworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX2luZm8gZXh0X2luZm87CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmluZy0+cGt0c19wcm9jZXNzZWQgPSAwOworCisJdnhnZV9od19yaW5nX3JlcGxlbmlzaChyaW5naCwgMCk7CisKKwlkbyB7CisJCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cik7CisJCXNrYiA9IHJ4X3ByaXYtPnNrYjsKKwkJZGF0YV9zaXplID0gcnhfcHJpdi0+ZGF0YV9zaXplOworCQlkYXRhX2RtYSA9IHJ4X3ByaXYtPmRhdGFfZG1hOworCisJCXZ4Z2VfZGVidWdfcngoVlhHRV9UUkFDRSwKKwkJCSIlczogJXM6JWQgIHNrYiA9IDB4JXAiLAorCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBza2IpOworCisJCXZ4Z2VfaHdfcmluZ19yeGRfMWJfZ2V0KHJpbmdoLCBkdHIsICZkbWFfc2l6ZXMpOworCQlwa3RfbGVuZ3RoID0gZG1hX3NpemVzOworCisJCXZ4Z2VfZGVidWdfcngoVlhHRV9UUkFDRSwKKwkJCSIlczogJXM6JWQgIFBhY2tldCBMZW5ndGggPSAlZCIsCisJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIHBrdF9sZW5ndGgpOworCisJCXZ4Z2VfaHdfcmluZ19yeGRfMWJfaW5mb19nZXQocmluZ2gsIGR0ciwgJmV4dF9pbmZvKTsKKworCQkvKiBjaGVjayBza2IgdmFsaWRpdHkgKi8KKwkJdnhnZV9hc3NlcnQoc2tiKTsKKworCQlwcmVmZXRjaCgoY2hhciAqKXNrYiArIEwxX0NBQ0hFX0JZVEVTKTsKKwkJaWYgKHVubGlrZWx5KHRfY29kZSkpIHsKKworCQkJaWYgKHZ4Z2VfaHdfcmluZ19oYW5kbGVfdGNvZGUocmluZ2gsIGR0ciwgdF9jb2RlKSAhPQorCQkJCVZYR0VfSFdfT0spIHsKKworCQkJCXJpbmctPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXZ4Z2VfZGVidWdfcngoVlhHRV9UUkFDRSwKKwkJCQkJIiVzOiAlcyA6JWQgUnggVF9jb2RlIGlzICVkIiwKKwkJCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sCisJCQkJCV9fTElORV9fLCB0X2NvZGUpOworCisJCQkJLyogSWYgdGhlIHRfY29kZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpZiB0aGUKKwkJCQkgKiB0X2NvZGUgaXMgb3RoZXIgdGhhbiAweDUgKHVucGFyc2VhYmxlIHBhY2tldAorCQkJCSAqIHN1Y2ggYXMgdW5rbm93biBVUFY2IGhlYWRlciksIERyb3AgaXQgISEhCisJCQkJICovCisJCQkJdnhnZV9yZV9wcmVfcG9zdChkdHIsIHJpbmcsIHJ4X3ByaXYpOworCisJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsIHJpbmdoKTsKKwkJCQlyaW5nLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAocGt0X2xlbmd0aCA+IFZYR0VfTExfUlhfQ09QWV9USFJFU0hPTEQpIHsKKworCQkJaWYgKHZ4Z2VfcnhfYWxsb2MoZHRyLCByaW5nLCBkYXRhX3NpemUpICE9IE5VTEwpIHsKKworCQkJCWlmICghdnhnZV9yeF9tYXAoZHRyLCByaW5nKSkgeworCQkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbmd0aCk7CisKKwkJCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5wZGV2LCBkYXRhX2RtYSwKKwkJCQkJCWRhdGFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJCQl2eGdlX2h3X3JpbmdfcnhkX3ByZV9wb3N0KHJpbmdoLCBkdHIpOworCQkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwKKwkJCQkJCXJpbmdoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkZXZfa2ZyZWVfc2tiKHJ4X3ByaXYtPnNrYik7CisJCQkJCXJ4X3ByaXYtPnNrYiA9IHNrYjsKKwkJCQkJcnhfcHJpdi0+ZGF0YV9zaXplID0gZGF0YV9zaXplOworCQkJCQl2eGdlX3JlX3ByZV9wb3N0KGR0ciwgcmluZywgcnhfcHJpdik7CisKKwkJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsCisJCQkJCQlyaW5naCk7CisJCQkJCXJpbmctPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl2eGdlX3JlX3ByZV9wb3N0KGR0ciwgcmluZywgcnhfcHJpdik7CisKKwkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwgcmluZ2gpOworCQkJCXJpbmctPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBza19idWZmICpza2JfdXA7CisKKwkJCXNrYl91cCA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwa3RfbGVuZ3RoICsKKwkJCQlWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTik7CisJCQlpZiAoc2tiX3VwICE9IE5VTEwpIHsKKwkJCQlza2JfcmVzZXJ2ZShza2JfdXAsCisJCQkJICAgIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOKTsKKworCQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nLT5wZGV2LAorCQkJCQlkYXRhX2RtYSwgZGF0YV9zaXplLAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQkJdnhnZV9kZWJ1Z19tZW0oVlhHRV9UUkFDRSwKKwkJCQkJIiVzOiAlczolZCAgc2tiX3VwID0gJXAiLAorCQkJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywKKwkJCQkJX19MSU5FX18sIHNrYik7CisJCQkJbWVtY3B5KHNrYl91cC0+ZGF0YSwgc2tiLT5kYXRhLCBwa3RfbGVuZ3RoKTsKKworCQkJCXZ4Z2VfcmVfcHJlX3Bvc3QoZHRyLCByaW5nLCByeF9wcml2KTsKKworCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLAorCQkJCQlyaW5naCk7CisJCQkJLyogd2lsbCBuZXRpZl9yeCBzbWFsbCBTS0IgaW5zdGVhZCAqLworCQkJCXNrYiA9IHNrYl91cDsKKwkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbmd0aCk7CisJCQl9IGVsc2UgeworCQkJCXZ4Z2VfcmVfcHJlX3Bvc3QoZHRyLCByaW5nLCByeF9wcml2KTsKKworCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLCByaW5naCk7CisJCQkJdnhnZV9kZWJ1Z19yeChWWEdFX0VSUiwKKwkJCQkJIiVzOiB2eGdlX3J4XzFiX2NvbXBsOiBvdXQgb2YgIgorCQkJCQkibWVtb3J5IiwgZGV2LT5uYW1lKTsKKwkJCQlyaW5nLT5zdGF0cy5za2JfYWxsb2NfZmFpbCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKChleHRfaW5mby5wcm90byAmIFZYR0VfSFdfRlJBTUVfUFJPVE9fVENQX09SX1VEUCkgJiYKKwkJICAgICEoZXh0X2luZm8ucHJvdG8gJiBWWEdFX0hXX0ZSQU1FX1BST1RPX0lQX0ZSQUcpICYmCisJCSAgICByaW5nLT5yeF9jc3VtICYmIC8qIE9mZmxvYWQgUnggc2lkZSBDU1VNICovCisJCSAgICBleHRfaW5mby5sM19ja3N1bSA9PSBWWEdFX0hXX0wzX0NLU1VNX09LICYmCisJCSAgICBleHRfaW5mby5sNF9ja3N1bSA9PSBWWEdFX0hXX0w0X0NLU1VNX09LKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJZWxzZQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJCXZ4Z2VfcnhfY29tcGxldGUocmluZywgc2tiLCBleHRfaW5mby52bGFuLAorCQkJcGt0X2xlbmd0aCwgJmV4dF9pbmZvKTsKKworCQlyaW5nLT5idWRnZXQtLTsKKwkJcmluZy0+cGt0c19wcm9jZXNzZWQrKzsKKwkJaWYgKCFyaW5nLT5idWRnZXQpCisJCQlicmVhazsKKworCX0gd2hpbGUgKHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQocmluZ2gsICZkdHIsCisJCSZ0X2NvZGUpID09IFZYR0VfSFdfT0spOworCisJaWYgKGZpcnN0X2R0cikKKwkJdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iKHJpbmdoLCBmaXJzdF9kdHIpOworCisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCQkJIiVzOiVkICBFeGl0aW5nLi4uIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogdnhnZV94bWl0X2NvbXBsCisgKgorICogSWYgYW4gaW50ZXJydXB0IHdhcyByYWlzZWQgdG8gaW5kaWNhdGUgRE1BIGNvbXBsZXRlIG9mIHRoZSBUeCBwYWNrZXQsCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXQgaWRlbnRpZmllcyB0aGUgbGFzdCBUeEQgd2hvc2UgYnVmZmVyIHdhcworICogZnJlZWQgYW5kIGZyZWVzIGFsbCBza2JzIHdob3NlIGRhdGEgaGF2ZSBhbHJlYWR5IERNQSdlZCBpbnRvIHRoZSBOSUNzCisgKiBpbnRlcm5hbCBtZW1vcnkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfeG1pdF9jb21wbChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faHcsIHZvaWQgKmR0ciwKKwkJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlLCB2b2lkICp1c2VyZGF0YSwKKwkJdm9pZCAqKnNrYl9wdHIpCit7CisJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IChzdHJ1Y3QgdnhnZV9maWZvICopdXNlcmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKmhlYWQgPSBOVUxMOworCXN0cnVjdCBza19idWZmICoqdGVtcDsKKwlpbnQgcGt0X2NudCA9IDA7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgRW50ZXJlZC4uLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJZG8geworCQlpbnQgZnJnX2NudDsKKwkJc2tiX2ZyYWdfdCAqZnJhZzsKKwkJaW50IGkgPSAwLCBqOworCQlzdHJ1Y3QgdnhnZV90eF9wcml2ICp0eGRfcHJpdiA9CisJCQl2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldChkdHIpOworCisJCXNrYiA9IHR4ZF9wcml2LT5za2I7CisJCWZyZ19jbnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisKKwkJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkJCSIlczogJXM6JWQgZmlmb19odyA9ICVwIGR0ciA9ICVwICIKKwkJCQkidGNvZGUgPSAweCV4IiwgZmlmby0+bmRldi0+bmFtZSwgX19mdW5jX18sCisJCQkJX19MSU5FX18sIGZpZm9faHcsIGR0ciwgdF9jb2RlKTsKKwkJLyogY2hlY2sgc2tiIHZhbGlkaXR5ICovCisJCXZ4Z2VfYXNzZXJ0KHNrYik7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJCSIlczogJXM6JWQgc2tiID0gJXAgaXR4ZF9wcml2ID0gJXAgZnJnX2NudCA9ICVkIiwKKwkJCWZpZm8tPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJCXNrYiwgdHhkX3ByaXYsIGZyZ19jbnQpOworCQlpZiAodW5saWtlbHkodF9jb2RlKSkgeworCQkJZmlmby0+c3RhdHMudHhfZXJyb3JzKys7CisJCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJCSIlczogdHg6IGR0ciAlcCBjb21wbGV0ZWQgZHVlIHRvICIKKwkJCQkiZXJyb3IgdF9jb2RlICUwMXgiLCBmaWZvLT5uZGV2LT5uYW1lLAorCQkJCWR0ciwgdF9jb2RlKTsKKwkJCXZ4Z2VfaHdfZmlmb19oYW5kbGVfdGNvZGUoZmlmb19odywgZHRyLCB0X2NvZGUpOworCQl9CisKKwkJLyogIGZvciB1bmZyYWdtZW50ZWQgc2tiICovCisJCXBjaV91bm1hcF9zaW5nbGUoZmlmby0+cGRldiwgdHhkX3ByaXYtPmRtYV9idWZmZXJzW2krK10sCisJCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwkJZm9yIChqID0gMDsgaiA8IGZyZ19jbnQ7IGorKykgeworCQkJcGNpX3VubWFwX3BhZ2UoZmlmby0+cGRldiwKKwkJCQkJdHhkX3ByaXYtPmRtYV9idWZmZXJzW2krK10sCisJCQkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZnJhZyArPSAxOworCQl9CisKKwkJdnhnZV9od19maWZvX3R4ZGxfZnJlZShmaWZvX2h3LCBkdHIpOworCisJCS8qIFVwZGF0aW5nIHRoZSBzdGF0aXN0aWNzIGJsb2NrICovCisJCWZpZm8tPnN0YXRzLnR4X2ZybXMrKzsKKwkJZmlmby0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJdGVtcCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKikmc2tiLT5jYjsKKwkJKnRlbXAgPSBoZWFkOworCQloZWFkID0gc2tiOworCisJCXBrdF9jbnQrKzsKKwkJaWYgKHBrdF9jbnQgPiBmaWZvLT5pbmRpY2F0ZV9tYXhfcGt0cykKKwkJCWJyZWFrOworCisJfSB3aGlsZSAodnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQoZmlmb19odywKKwkJCQkmZHRyLCAmdF9jb2RlKSA9PSBWWEdFX0hXX09LKTsKKworCXZ4Z2Vfd2FrZV90eF9xdWV1ZShmaWZvLCBza2IpOworCisJaWYgKHNrYl9wdHIpCisJCSpza2JfcHRyID0gKHZvaWQgKikgaGVhZDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCQkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCQkJZmlmby0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyogc2VsZWN0IGEgdnBhdGggdG8gdHJhc21pdCB0aGUgcGFja2V0ICovCitzdGF0aWMgdTMyIHZ4Z2VfZ2V0X3ZwYXRoX25vKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCWludCAqZG9fbG9jaykKK3sKKwl1MTYgcXVldWVfbGVuLCBjb3VudGVyID0gMDsKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJc3RydWN0IGlwaGRyICppcDsKKwkJc3RydWN0IHRjcGhkciAqdGg7CisKKwkJaXAgPSBpcF9oZHIoc2tiKTsKKworCQlpZiAoKGlwLT5mcmFnX29mZiAmIGh0b25zKElQX09GRlNFVHxJUF9NRikpID09IDApIHsKKwkJCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoKCh1bnNpZ25lZCBjaGFyICopaXApICsKKwkJCQkJaXAtPmlobCo0KTsKKworCQkJcXVldWVfbGVuID0gdmRldi0+bm9fb2ZfdnBhdGg7CisJCQljb3VudGVyID0gKG50b2hzKHRoLT5zb3VyY2UpICsKKwkJCQludG9ocyh0aC0+ZGVzdCkpICYKKwkJCQl2ZGV2LT52cGF0aF9zZWxlY3RvcltxdWV1ZV9sZW4gLSAxXTsKKwkJCWlmIChjb3VudGVyID49IHF1ZXVlX2xlbikKKwkJCQljb3VudGVyID0gcXVldWVfbGVuIC0gMTsKKworCQkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgeworI2lmZGVmIE5FVElGX0ZfTExUWAorCQkJCSpkb19sb2NrID0gMDsKKyNlbmRpZgorCQkJfQorCQl9CisJfQorCXJldHVybiBjb3VudGVyOworfQorCitzdGF0aWMgZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3NlYXJjaF9tYWNfYWRkcl9pbl9saXN0KAorCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgdTY0IGRlbF9tYWMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpuZXh0OworCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCWlmICgoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+bWFjYWRkciA9PSBkZWxfbWFjKQorCQkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGludCB2eGdlX2xlYXJuX21hYyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwgdTggKm1hY19oZWFkZXIpCit7CisJc3RydWN0IG1hY0luZm8gbWFjX2luZm87CisJdTggKm1hY19hZGRyZXNzID0gTlVMTDsKKwl1NjQgbWFjX2FkZHIgPSAwLCB2cGF0aF92ZWN0b3IgPSAwOworCWludCB2cGF0aF9pZHggPSAwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCW1hY19hZGRyZXNzID0gKHU4ICopJm1hY19hZGRyOworCW1lbWNweShtYWNfYWRkcmVzcywgbWFjX2hlYWRlciwgRVRIX0FMRU4pOworCisJLyogSXMgdGhpcyBtYWMgYWRkcmVzcyBhbHJlYWR5IGluIHRoZSBsaXN0PyAqLworCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwYXRoX2lkeCsrKSB7CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdOworCQlpZiAodnhnZV9zZWFyY2hfbWFjX2FkZHJfaW5fbGlzdCh2cGF0aCwgbWFjX2FkZHIpKQorCQkJcmV0dXJuIHZwYXRoX2lkeDsKKwl9CisKKwltZW1zZXQoJm1hY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKKwltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWFjX2hlYWRlciwgRVRIX0FMRU4pOworCisJLyogQW55IHZwYXRoIGhhcyByb29tIHRvIGFkZCBtYWMgYWRkcmVzcyB0byBpdHMgZGEgdGFibGU/ICovCisJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBhdGhfaWR4KyspIHsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwYXRoX2lkeF07CisJCWlmICh2cGF0aC0+bWFjX2FkZHJfY250IDwgdnBhdGgtPm1heF9tYWNfYWRkcl9jbnQpIHsKKwkJCS8qIEFkZCB0aGlzIG1hYyBhZGRyZXNzIHRvIHRoaXMgdnBhdGggKi8KKwkJCW1hY19pbmZvLnZwYXRoX25vID0gdnBhdGhfaWR4OworCQkJbWFjX2luZm8uc3RhdGUgPSBWWEdFX0xMX01BQ19BRERSX0lOX0RBX1RBQkxFOworCQkJc3RhdHVzID0gdnhnZV9hZGRfbWFjX2FkZHIodmRldiwgJm1hY19pbmZvKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJcmV0dXJuIHZwYXRoX2lkeDsKKwkJfQorCX0KKworCW1hY19pbmZvLnN0YXRlID0gVlhHRV9MTF9NQUNfQUREUl9JTl9MSVNUOworCXZwYXRoX2lkeCA9IDA7CisJbWFjX2luZm8udnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJLyogSXMgdGhlIGZpcnN0IHZwYXRoIGFscmVhZHkgc2VsZWN0ZWQgYXMgY2F0Y2gtYmFzaW4gPyAqLworCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdOworCWlmICh2cGF0aC0+bWFjX2FkZHJfY250ID4gdnBhdGgtPm1heF9tYWNfYWRkcl9jbnQpIHsKKwkJLyogQWRkIHRoaXMgbWFjIGFkZHJlc3MgdG8gdGhpcyB2cGF0aCAqLworCQlpZiAoRkFMU0UgPT0gdnhnZV9tYWNfbGlzdF9hZGQodnBhdGgsICZtYWNfaW5mbykpCisJCQlyZXR1cm4gLUVQRVJNOworCQlyZXR1cm4gdnBhdGhfaWR4OworCX0KKworCS8qIFNlbGVjdCBmaXJzdCB2cGF0aCBhcyBjYXRjaC1iYXNpbiAqLworCXZwYXRoX3ZlY3RvciA9IHZ4Z2VfbUJJVCh2cGF0aC0+ZGV2aWNlX2lkKTsKKwlzdGF0dXMgPSB2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZwYXRoLT52ZGV2LT5kZXZoLAorCQkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCQkJMCwKKwkJCQkodWxvbmcpb2Zmc2V0b2YoCisJCQkJCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQkJCXJ0c19tZ3JfY2Jhc2luX2NmZyksCisJCQkJdnBhdGhfdmVjdG9yKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCSIlczogVW5hYmxlIHRvIHNldCB0aGUgdnBhdGgtJWQgaW4gY2F0Y2gtYmFzaW4gbW9kZSIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCB2cGF0aC0+ZGV2aWNlX2lkKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpZiAoRkFMU0UgPT0gdnhnZV9tYWNfbGlzdF9hZGQodnBhdGgsICZtYWNfaW5mbykpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gdnBhdGhfaWR4OworfQorCisvKioKKyAqIHZ4Z2VfeG1pdAorICogQHNrYiA6IHRoZSBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFR4IGRhdGEuCisgKiBAZGV2IDogZGV2aWNlIHBvaW50ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgVHggZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4gTmV0ZXJpb24gTklDIHN1cHBvcnRzCisgKiBjZXJ0YWluIHByb3RvY29sIGFzc2lzdCBmZWF0dXJlcyBvbiBUeCBzaWRlLCBuYW1lbHkgIENTTywgUy9HLCBMU08uCisgKiBOT1RFOiB3aGVuIGRldmljZSBjYW50IHF1ZXVlIHRoZSBwa3QsIGp1c3QgdGhlIHRyYW5zX3N0YXJ0IHZhcmlhYmxlIHdpbGwKKyAqIG5vdCBiZSB1cGFkdGVkLgorKi8KK3N0YXRpYyBpbnQKK3Z4Z2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8gPSBOVUxMOworCXZvaWQgKmR0cl9wcml2OworCXZvaWQgKmR0ciA9IE5VTEw7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBOVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBmcmdfY250LCBmaXJzdF9mcmdfbGVuOworCXNrYl9mcmFnX3QgKmZyYWc7CisJaW50IGkgPSAwLCBqID0gMCwgYXZhaWw7CisJdTY0IGRtYV9wb2ludGVyOworCXN0cnVjdCB2eGdlX3R4X3ByaXYgKnR4ZGxfcHJpdiA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2h3OworCXUzMiBtYXhfbXNzID0gMHgwOworCWludCBvZmZsb2FkX3R5cGU7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHZwYXRoX25vID0gMDsKKwlpbnQgZG9fc3Bpbl90eF9sb2NrID0gMTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJLyogQSBidWZmZXIgd2l0aCBubyBkYXRhIHdpbGwgYmUgZHJvcHBlZCAqLworCWlmICh1bmxpa2VseShza2ItPmxlbiA8PSAwKSkgeworCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJIiVzOiBCdWZmZXIgaGFzIG5vIGRhdGEuLiIsIGRldi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkgeworCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJIiVzOiB2ZGV2IG5vdCBpbml0aWFsaXplZCIsIGRldi0+bmFtZSk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLmFkZHJfbGVhcm5fZW4pIHsKKwkJdnBhdGhfbm8gPSB2eGdlX2xlYXJuX21hYyh2ZGV2LCBza2ItPmRhdGEgKyBFVEhfQUxFTik7CisJCWlmICh2cGF0aF9ubyA9PSAtRVBFUk0pIHsKKwkJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkJIiVzOiBGYWlsZWQgdG8gc3RvcmUgdGhlIG1hYyBhZGRyZXNzIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwkJfQorCX0KKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpCisJCXZwYXRoX25vID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJZWxzZSBpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfUE9SVF9TVEVFUklORykKKwkJdnBhdGhfbm8gPSB2eGdlX2dldF92cGF0aF9ubyh2ZGV2LCBza2IsICZkb19zcGluX3R4X2xvY2spOworCisJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLCAiJXM6IHZwYXRoX25vPSAlZCIsIGRldi0+bmFtZSwgdnBhdGhfbm8pOworCisJaWYgKHZwYXRoX25vID49IHZkZXYtPm5vX29mX3ZwYXRoKQorCQl2cGF0aF9ubyA9IDA7CisKKwlmaWZvID0gJnZkZXYtPnZwYXRoc1t2cGF0aF9ub10uZmlmbzsKKwlmaWZvX2h3ID0gZmlmby0+aGFuZGxlOworCisJaWYgKGRvX3NwaW5fdHhfbG9jaykKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwllbHNlIHsKKwkJaWYgKHVubGlrZWx5KCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpKSkKKwkJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOworCX0KKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKKwkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQoZGV2LCBza2IpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9IGVsc2UgaWYgKHVubGlrZWx5KGZpZm8tPnF1ZXVlX3N0YXRlID09IFZQQVRIX1FVRVVFX1NUT1ApKSB7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQorCX0KKwlhdmFpbCA9IHZ4Z2VfaHdfZmlmb19mcmVlX3R4ZGxfY291bnRfZ2V0KGZpZm9faHcpOworCWlmIChhdmFpbCA9PSAwKSB7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkiJXM6IE5vIGZyZWUgVFhEcyBhdmFpbGFibGUiLCBkZXYtPm5hbWUpOworCQlmaWZvLT5zdGF0cy50eGRfbm90X2ZyZWUrKzsKKwkJdnhnZV9zdG9wX3R4X3F1ZXVlKGZpZm8pOworCQlnb3RvIF9leGl0MjsKKwl9CisKKwlzdGF0dXMgPSB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKGZpZm9faHcsICZkdHIsICZkdHJfcHJpdik7CisJaWYgKHVubGlrZWx5KHN0YXR1cyAhPSBWWEdFX0hXX09LKSkgeworCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkgICAiJXM6IE91dCBvZiBkZXNjcmlwdG9ycyAuIiwgZGV2LT5uYW1lKTsKKwkJZmlmby0+c3RhdHMudHhkX291dF9vZl9kZXNjKys7CisJCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKKwkJZ290byBfZXhpdDI7CisJfQorCisJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIGZpZm9faHcgPSAlcCBkdHIgPSAlcCBkdHJfcHJpdiA9ICVwIiwKKwkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCWZpZm9faHcsIGR0ciwgZHRyX3ByaXYpOworCisJaWYgKHZkZXYtPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQl1MTYgdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJdnhnZV9od19maWZvX3R4ZGxfdmxhbl9zZXQoZHRyLCB2bGFuX3RhZyk7CisJfQorCisJZmlyc3RfZnJnX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisKKwlkbWFfcG9pbnRlciA9IHBjaV9tYXBfc2luZ2xlKGZpZm8tPnBkZXYsIHNrYi0+ZGF0YSwgZmlyc3RfZnJnX2xlbiwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZmlmby0+cGRldiwgZG1hX3BvaW50ZXIpKSkgeworCQl2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKGZpZm9faHcsIGR0cik7CisJCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKKwkJZmlmby0+c3RhdHMucGNpX21hcF9mYWlsKys7CisJCWdvdG8gX2V4aXQyOworCX0KKworCXR4ZGxfcHJpdiA9IHZ4Z2VfaHdfZmlmb190eGRsX3ByaXZhdGVfZ2V0KGR0cik7CisJdHhkbF9wcml2LT5za2IgPSBza2I7CisJdHhkbF9wcml2LT5kbWFfYnVmZmVyc1tqXSA9IGRtYV9wb2ludGVyOworCisJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkJIiVzOiAlczolZCBza2IgPSAlcCB0eGRsX3ByaXYgPSAlcCAiCisJCQkiZnJhZ19jbnQgPSAlZCBkbWFfcG9pbnRlciA9IDB4JWxseCIsIGRldi0+bmFtZSwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgc2tiLCB0eGRsX3ByaXYsCisJCQlmcmdfY250LCAodW5zaWduZWQgbG9uZyBsb25nKWRtYV9wb2ludGVyKTsKKworCXZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoZmlmb19odywgZHRyLCBqKyssIGRtYV9wb2ludGVyLAorCQlmaXJzdF9mcmdfbGVuKTsKKworCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJnX2NudDsgaSsrKSB7CisJCS8qIGlnbm9yZSAwIGxlbmd0aCBmcmFnbWVudCAqLworCQlpZiAoIWZyYWctPnNpemUpCisJCQljb250aW51ZTsKKworCQlkbWFfcG9pbnRlciA9CisJCQkodTY0KXBjaV9tYXBfcGFnZShmaWZvLT5wZGV2LCBmcmFnLT5wYWdlLAorCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoZmlmby0+cGRldiwgZG1hX3BvaW50ZXIpKSkKKwkJCWdvdG8gX2V4aXQwOworCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCQkiJXM6ICVzOiVkIGZyYWcgPSAlZCBkbWFfcG9pbnRlciA9IDB4JWxseCIsCisJCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIGksCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfcG9pbnRlcik7CisKKwkJdHhkbF9wcml2LT5kbWFfYnVmZmVyc1tqXSA9IGRtYV9wb2ludGVyOworCQl2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0KGZpZm9faHcsIGR0ciwgaisrLCBkbWFfcG9pbnRlciwKKwkJCQkJZnJhZy0+c2l6ZSk7CisJCWZyYWcgKz0gMTsKKwl9CisKKwlvZmZsb2FkX3R5cGUgPSB2eGdlX29mZmxvYWRfdHlwZShza2IpOworCisJaWYgKG9mZmxvYWRfdHlwZSAmIChTS0JfR1NPX1RDUFY0IHwgU0tCX0dTT19UQ1BWNikpIHsKKworCQlpbnQgbXNzID0gdnhnZV90Y3BfbXNzKHNrYik7CisJCWlmIChtc3MpIHsKKwkJCW1heF9tc3MgPSBkZXYtPm10dSArIEVUSF9ITEVOIC0KKwkJCQlWWEdFX0hXX1RDUElQX0hFQURFUl9NQVhfU0laRTsKKwkJCWlmIChtc3MgPiBtYXhfbXNzKQorCQkJCW1zcyA9IG1heF9tc3M7CisJCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCQkJIiVzOiAlczolZCBtc3MgPSAlZCIsCisJCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIG1zcyk7CisJCQl2eGdlX2h3X2ZpZm9fdHhkbF9tc3Nfc2V0KGR0ciwgbXNzKTsKKwkJfSBlbHNlIHsKKwkJCXZ4Z2VfYXNzZXJ0KHNrYi0+bGVuIDw9CisJCQkJZGV2LT5tdHUgKyBWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkUpOworCQkJdnhnZV9hc3NlcnQoMCk7CisJCQlnb3RvIF9leGl0MTsKKwkJfQorCX0KKworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQorCQl2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cyhkdHIsCisJCQkJCVZYR0VfSFdfRklGT19UWERfVFhfQ0tPX0lQVjRfRU4gfAorCQkJCQlWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19UQ1BfRU4gfAorCQkJCQlWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19VRFBfRU4pOworCisJdnhnZV9od19maWZvX3R4ZGxfcG9zdChmaWZvX2h3LCBkdHIpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKworCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoZmlmbyk7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gMDsKKworX2V4aXQwOgorCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwgIiVzOiBwY2lfbWFwX3BhZ2UgZmFpbGVkIiwgZGV2LT5uYW1lKTsKKworX2V4aXQxOgorCWogPSAwOworCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKKworCXBjaV91bm1hcF9zaW5nbGUoZmlmby0+cGRldiwgdHhkbF9wcml2LT5kbWFfYnVmZmVyc1tqKytdLAorCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlmb3IgKDsgaiA8IGk7IGorKykgeworCQlwY2lfdW5tYXBfcGFnZShmaWZvLT5wZGV2LCB0eGRsX3ByaXYtPmRtYV9idWZmZXJzW2pdLAorCQkJZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCWZyYWcgKz0gMTsKKwl9CisKKwl2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKGZpZm9faHcsIGR0cik7CitfZXhpdDI6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKGZpZm8pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2eGdlX3J4X3Rlcm0KKyAqCisgKiBGdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBodyBmdW5jdGlvbiB0byBhYm9ydCBhbGwgb3V0c3RhbmRpbmcgcmVjZWl2ZQorICogZGVzY3JpcHRvcnMuCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3J4X3Rlcm0odm9pZCAqZHRyaCwgZW51bSB2eGdlX2h3X3J4ZF9zdGF0ZSBzdGF0ZSwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9IChzdHJ1Y3QgdnhnZV9yaW5nICopdXNlcmRhdGE7CisJc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdiA9CisJCXZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQoZHRyaCk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJaWYgKHN0YXRlICE9IFZYR0VfSFdfUlhEX1NUQVRFX1BPU1RFRCkKKwkJcmV0dXJuOworCisJcGNpX3VubWFwX3NpbmdsZShyaW5nLT5wZGV2LCByeF9wcml2LT5kYXRhX2RtYSwKKwkJcnhfcHJpdi0+ZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJZGV2X2tmcmVlX3NrYihyeF9wcml2LT5za2IpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qCisgKiB2eGdlX3R4X3Rlcm0KKyAqCisgKiBGdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBhYm9ydCBhbGwgb3V0c3RhbmRpbmcgdHggZGVzY3JpcHRvcnMKKyAqLworc3RhdGljIHZvaWQKK3Z4Z2VfdHhfdGVybSh2b2lkICpkdHJoLCBlbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZSBzdGF0ZSwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IChzdHJ1Y3QgdnhnZV9maWZvICopdXNlcmRhdGE7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaSA9IDAsIGosIGZyZ19jbnQ7CisJc3RydWN0IHZ4Z2VfdHhfcHJpdiAqdHhkX3ByaXYgPSB2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldChkdHJoKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhkX3ByaXYtPnNrYjsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlpZiAoc3RhdGUgIT0gVlhHRV9IV19UWERMX1NUQVRFX1BPU1RFRCkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgc2tiIHZhbGlkaXR5ICovCisJdnhnZV9hc3NlcnQoc2tiKTsKKwlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisKKwkvKiAgZm9yIHVuZnJhZ21lbnRlZCBza2IgKi8KKwlwY2lfdW5tYXBfc2luZ2xlKGZpZm8tPnBkZXYsIHR4ZF9wcml2LT5kbWFfYnVmZmVyc1tpKytdLAorCQlza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCWZvciAoaiA9IDA7IGogPCBmcmdfY250OyBqKyspIHsKKwkJcGNpX3VubWFwX3BhZ2UoZmlmby0+cGRldiwgdHhkX3ByaXYtPmRtYV9idWZmZXJzW2krK10sCisJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCWZyYWcgKz0gMTsKKwl9CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIHZ4Z2Vfc2V0X211bHRpY2FzdAorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEVudHJ5IHBvaW50IGZvciBtdWx0aWNhc3QgYWRkcmVzcyBlbmFibGUvZGlzYWJsZQorICogVGhpcyBmdW5jdGlvbiBpcyBhIGRyaXZlciBlbnRyeSBwb2ludCB3aGljaCBnZXRzIGNhbGxlZCBieSB0aGUga2VybmVsCisgKiB3aGVuZXZlciBtdWx0aWNhc3QgYWRkcmVzc2VzIG11c3QgYmUgZW5hYmxlZC9kaXNhYmxlZC4gVGhpcyBhbHNvIGdldHMKKyAqIGNhbGxlZCB0byBzZXQvcmVzZXQgcHJvbWlzY3VvdXMgbW9kZS4gRGVwZW5kaW5nIG9uIHRoZSBkZWl2Y2UgZmxhZywgd2UKKyAqIGRldGVybWluZSwgaWYgbXVsdGljYXN0IGFkZHJlc3MgbXVzdCBiZSBlbmFibGVkIG9yIGlmIHByb21pc2N1b3VzIG1vZGUKKyAqIGlzIHRvIGJlIGRpc2FibGVkIGV0Yy4KKyAqLworc3RhdGljIHZvaWQgdnhnZV9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJaW50IGksIG1jYXN0X2NudCA9IDA7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IG1hY0luZm8gbWFjX2luZm87CisJaW50IHZwYXRoX2lkeCA9IDA7CisJc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICptYWNfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKwl1OCAqbWFjX2FkZHJlc3MgPSBOVUxMOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKXZkZXYtPmRldmg7CisKKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCisJCXJldHVybjsKKworCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgJiYgKCF2ZGV2LT5hbGxfbXVsdGlfZmxnKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCXZkZXYtPmFsbF9tdWx0aV9mbGcgPSAxOworCQl9CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgJiYgKHZkZXYtPmFsbF9tdWx0aV9mbGcpKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2Rpc2FibGUoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCXZkZXYtPmFsbF9tdWx0aV9mbGcgPSAxOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiZmFpbGVkIHRvICVzIG11bHRpY2FzdCwgc3RhdHVzICVkIiwKKwkJCWRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgPworCQkJImVuYWJsZSIgOiAiZGlzYWJsZSIsIHN0YXR1cyk7CisKKwlpZiAoIXZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOworCQkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19lbmFibGUoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOworCQkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlKAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQl9CisJCX0KKwl9CisKKwltZW1zZXQoJm1hY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKKwkvKiBVcGRhdGUgaW5kaXZpZHVhbCBNX0NBU1QgYWRkcmVzcyBsaXN0ICovCisJaWYgKCghdmRldi0+YWxsX211bHRpX2ZsZykgJiYgZGV2LT5tY19jb3VudCkgeworCisJCW1jYXN0X2NudCA9IHZkZXYtPnZwYXRoc1swXS5tY2FzdF9hZGRyX2NudDsKKwkJbGlzdF9oZWFkID0gJnZkZXYtPnZwYXRoc1swXS5tYWNfYWRkcl9saXN0OworCQlpZiAoKGRldi0+bWNfY291bnQgKworCQkJKHZkZXYtPnZwYXRoc1swXS5tYWNfYWRkcl9jbnQgLSBtY2FzdF9jbnQpKSA+CisJCQkJdmRldi0+dnBhdGhzWzBdLm1heF9tYWNfYWRkcl9jbnQpCisJCQlnb3RvIF9zZXRfYWxsX21jYXN0OworCisJCS8qIERlbGV0ZSBwcmV2aW91cyBNQydzICovCisJCWZvciAoaSA9IDA7IGkgPCBtY2FzdF9jbnQ7IGkrKykgeworCQkJaWYgKCFsaXN0X2VtcHR5KGxpc3RfaGVhZCkpCisJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKQorCQkJCQlsaXN0X2ZpcnN0X2VudHJ5KGxpc3RfaGVhZCwKKwkJCQkJCXN0cnVjdCB2eGdlX21hY19hZGRycywKKwkJCQkJCWl0ZW0pOworCisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsIGxpc3RfaGVhZCkgeworCisJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKSBlbnRyeTsKKwkJCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgKi8KKwkJCQltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfZW50cnktPm1hY2FkZHI7CisJCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisKKwkJCQkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJCQlpZiAoMHgwMSAmIG1hY19pbmZvLm1hY2FkZHJbMF0pIHsKKwkJCQkJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPAorCQkJCQkJdmRldi0+bm9fb2ZfdnBhdGg7CisJCQkJCQl2cGF0aF9pZHgrKykgeworCQkJCQkJbWFjX2luZm8udnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCQkJCQlzdGF0dXMgPSB2eGdlX2RlbF9tYWNfYWRkcigKKwkJCQkJCQkJdmRldiwKKwkJCQkJCQkJJm1hY19pbmZvKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIEFkZCBuZXcgb25lcyAqLworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50OworCQkJaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKworCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7CisJCQkJCXZwYXRoX2lkeCsrKSB7CisJCQkJbWFjX2luZm8udnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCQkJbWFjX2luZm8uc3RhdGUgPSBWWEdFX0xMX01BQ19BRERSX0lOX0RBX1RBQkxFOworCQkJCXN0YXR1cyA9IHZ4Z2VfYWRkX21hY19hZGRyKHZkZXYsICZtYWNfaW5mbyk7CisJCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJCSIlczolZCBTZXR0aW5nIGluZGl2aWR1YWwiCisJCQkJCQkibXVsdGljYXN0IGFkZHJlc3MgZmFpbGVkIiwKKwkJCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQkJCWdvdG8gX3NldF9hbGxfbWNhc3Q7CisJCQkJfQorCQkJfQorCQl9CisKKwkJcmV0dXJuOworX3NldF9hbGxfbWNhc3Q6CisJCW1jYXN0X2NudCA9IHZkZXYtPnZwYXRoc1swXS5tY2FzdF9hZGRyX2NudDsKKwkJLyogRGVsZXRlIHByZXZpb3VzIE1DJ3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IG1jYXN0X2NudDsgaSsrKSB7CisKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgbGlzdF9oZWFkKSB7CisKKwkJCQltYWNfZW50cnkgPSAoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopIGVudHJ5OworCQkJCS8qIENvcHkgdGhlIG1hYyBhZGRyZXNzIHRvIGRlbGV0ZSAqLworCQkJCW1hY19hZGRyZXNzID0gKHU4ICopJm1hY19lbnRyeS0+bWFjYWRkcjsKKwkJCQltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKworCQkJCS8qIElzIHRoaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAqLworCQkJCWlmICgweDAxICYgbWFjX2luZm8ubWFjYWRkclswXSkKKwkJCQkJYnJlYWs7CisJCQl9CisKKwkJCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7CisJCQkJCXZwYXRoX2lkeCsrKSB7CisJCQkJbWFjX2luZm8udnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCQkJc3RhdHVzID0gdnhnZV9kZWxfbWFjX2FkZHIodmRldiwgJm1hY19pbmZvKTsKKwkJCX0KKwkJfQorCisJCS8qIEVuYWJsZSBhbGwgbXVsdGljYXN0ICovCisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfb3Blbik7CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkiJXM6JWQgRW5hYmxpbmcgYWxsIG11bHRpY2FzdHMgZmFpbGVkIiwKKwkJCQkJIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQl9CisJCQl2ZGV2LT5hbGxfbXVsdGlfZmxnID0gMTsKKwkJfQorCQlkZXYtPmZsYWdzIHw9IElGRl9BTExNVUxUSTsKKwl9CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIHZ4Z2Vfc2V0X21hY19hZGRyCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVXBkYXRlIGVudHJ5ICIwIiAoZGVmYXVsdCBNQUMgYWRkcikKKyAqLworc3RhdGljIGludCB2eGdlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IG1hY0luZm8gbWFjX2luZm9fbmV3LCBtYWNfaW5mb19vbGQ7CisJaW50IHZwYXRoX2lkeCA9IDA7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSB2ZGV2LT5kZXZoOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmbWFjX2luZm9fbmV3LCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKKwltZW1zZXQoJm1hY19pbmZvX29sZCwgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQgIEV4aXRpbmcuLi4iLAorCQlfX2Z1bmNfXywgX19MSU5FX18pOworCisJLyogR2V0IHRoZSBvbGQgYWRkcmVzcyAqLworCW1lbWNweShtYWNfaW5mb19vbGQubWFjYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisKKwkvKiBDb3B5IHRoZSBuZXcgYWRkcmVzcyAqLworCW1lbWNweShtYWNfaW5mb19uZXcubWFjYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisKKwkvKiBGaXJzdCBkZWxldGUgdGhlIG9sZCBtYWMgYWRkcmVzcyBmcm9tIGFsbCB0aGUgdnBhdGhzCisJYXMgd2UgY2FuJ3Qgc3BlY2lmeSB0aGUgaW5kZXggd2hpbGUgYWRkaW5nIG5ldyBtYWMgYWRkcmVzcyAqLworCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwYXRoX2lkeCsrKSB7CisJCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XTsKKwkJaWYgKCF2cGF0aC0+aXNfb3BlbikgeworCQkJLyogVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhpcyBpbnRlcmZhY2UgaXMgYWRkZWQvcmVtb3ZlZAorCQkJdG8gdGhlIGJvbmRpbmcgaW50ZXJmYWNlLiBEZWxldGUgdGhpcyBzdGF0aW9uIGFkZHJlc3MKKwkJCWZyb20gdGhlIGxpbmtlZCBsaXN0ICovCisJCQl2eGdlX21hY19saXN0X2RlbCh2cGF0aCwgJm1hY19pbmZvX29sZCk7CisKKwkJCS8qIEFkZCB0aGlzIG5ldyBhZGRyZXNzIHRvIHRoZSBsaW5rZWQgbGlzdAorCQkJZm9yIGxhdGVyIHJlc3RvcmluZyAqLworCQkJdnhnZV9tYWNfbGlzdF9hZGQodnBhdGgsICZtYWNfaW5mb19uZXcpOworCisJCQljb250aW51ZTsKKwkJfQorCQkvKiBEZWxldGUgdGhlIHN0YXRpb24gYWRkcmVzcyAqLworCQltYWNfaW5mb19vbGQudnBhdGhfbm8gPSB2cGF0aF9pZHg7CisJCXN0YXR1cyA9IHZ4Z2VfZGVsX21hY19hZGRyKHZkZXYsICZtYWNfaW5mb19vbGQpOworCX0KKworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkgeworCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJCXJldHVybiBWWEdFX0hXX09LOworCX0KKworCS8qIFNldCB0aGlzIG1hYyBhZGRyZXNzIHRvIGFsbCB0aGUgdnBhdGhzICovCisJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBhdGhfaWR4KyspIHsKKwkJbWFjX2luZm9fbmV3LnZwYXRoX25vID0gdnBhdGhfaWR4OworCQltYWNfaW5mb19uZXcuc3RhdGUgPSBWWEdFX0xMX01BQ19BRERSX0lOX0RBX1RBQkxFOworCQlzdGF0dXMgPSB2eGdlX2FkZF9tYWNfYWRkcih2ZGV2LCAmbWFjX2luZm9fbmV3KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfdnBhdGhfaW50cl9lbmFibGUKKyAqIEB2ZGV2OiBwb2ludGVyIHRvIHZkZXYKKyAqIEB2cF9pZDogdnBhdGggZm9yIHdoaWNoIHRvIGVuYWJsZSB0aGUgaW50ZXJydXB0cworICoKKyAqIEVuYWJsZXMgdGhlIGludGVycnVwdHMgZm9yIHRoZSB2cGF0aAorKi8KK3ZvaWQgdnhnZV92cGF0aF9pbnRyX2VuYWJsZShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKQoreworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBfaWRdOworCWludCBtc2l4X2lkLCBhbGFybV9tc2l4X2lkOworCWludCB0aW1fbXNpeF9pZFs0XSA9IHtbMCAuLi4zXSA9IDB9OworCisJdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSh2cGF0aC0+aGFuZGxlKTsKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpCisJCXZ4Z2VfaHdfdnBhdGhfaW50YV91bm1hc2tfdHhfcngodnBhdGgtPmhhbmRsZSk7CisJZWxzZSB7CisJCW1zaXhfaWQgPSB2cF9pZCAqIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkU7CisJCWFsYXJtX21zaXhfaWQgPQorCQkJVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSAqIHZkZXYtPm5vX29mX3ZwYXRoIC0gMjsKKworCQl0aW1fbXNpeF9pZFswXSA9IG1zaXhfaWQ7CisJCXRpbV9tc2l4X2lkWzFdID0gbXNpeF9pZCArIDE7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9zZXQodnBhdGgtPmhhbmRsZSwgdGltX21zaXhfaWQsCisJCQlhbGFybV9tc2l4X2lkKTsKKworCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHZwYXRoLT5oYW5kbGUsIG1zaXhfaWQpOworCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHZwYXRoLT5oYW5kbGUsIG1zaXhfaWQgKyAxKTsKKworCQkvKiBlbmFibGUgdGhlIGFsYXJtIHZlY3RvciAqLworCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHZwYXRoLT5oYW5kbGUsIGFsYXJtX21zaXhfaWQpOworCX0KK30KKworLyoKKyAqIHZ4Z2VfdnBhdGhfaW50cl9kaXNhYmxlCisgKiBAdmRldjogcG9pbnRlciB0byB2ZGV2CisgKiBAdnBfaWQ6IHZwYXRoIGZvciB3aGljaCB0byBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCisgKgorICogRGlzYWJsZXMgdGhlIGludGVycnVwdHMgZm9yIHRoZSB2cGF0aAorKi8KK3ZvaWQgdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCB2cF9pZCkKK3sKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwX2lkXTsKKwlpbnQgbXNpeF9pZDsKKworCXZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKHZwYXRoLT5oYW5kbGUpOworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkKKwkJdnhnZV9od192cGF0aF9pbnRhX21hc2tfdHhfcngodnBhdGgtPmhhbmRsZSk7CisJZWxzZSB7CisJCW1zaXhfaWQgPSB2cF9pZCAqIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkU7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrKHZwYXRoLT5oYW5kbGUsIG1zaXhfaWQpOworCQl2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayh2cGF0aC0+aGFuZGxlLCBtc2l4X2lkICsgMSk7CisKKwkJLyogZGlzYWJsZSB0aGUgYWxhcm0gdmVjdG9yICovCisJCW1zaXhfaWQgPSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFICogdmRldi0+bm9fb2ZfdnBhdGggLSAyOworCQl2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayh2cGF0aC0+aGFuZGxlLCBtc2l4X2lkKTsKKwl9Cit9CisKKy8qCisgKiB2eGdlX3Jlc2V0X3ZwYXRoCisgKiBAdmRldjogcG9pbnRlciB0byB2ZGV2CisgKiBAdnBfaWQ6IHZwYXRoIHRvIHJlc2V0CisgKgorICogUmVzZXRzIHRoZSB2cGF0aAorKi8KK3N0YXRpYyBpbnQgdnhnZV9yZXNldF92cGF0aChzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGNoZWNrIGlmIGRldmljZSBpcyBkb3duIGFscmVhZHkgKi8KKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCisJCXJldHVybiAwOworCisJLyogaXMgZGV2aWNlIHJlc2V0IGFscmVhZHkgc2NoZWR1bGVkICovCisJaWYgKHRlc3RfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKQorCQlyZXR1cm4gMDsKKworCWlmICh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSkgeworCQlpZiAodnhnZV9od192cGF0aF9yZXNldCh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSkKKwkJCQk9PSBWWEdFX0hXX09LKSB7CisJCQlpZiAoaXNfdnhnZV9jYXJkX3VwKHZkZXYpICYmCisJCQkJdnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoCisJCQkJCXZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKQorCQkJCQkhPSBWWEdFX0hXX09LKSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkidnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQiCisJCQkJCSJmYWlsZWQgZm9yIHZwYXRoOiVkIiwgdnBfaWQpOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJInZ4Z2VfaHdfdnBhdGhfcmVzZXQgZmFpbGVkIGZvciIKKwkJCQkidnBhdGg6JWQiLCB2cF9pZCk7CisJCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCisJdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKCZ2ZGV2LT52cGF0aHNbdnBfaWRdKTsKKwl2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKCZ2ZGV2LT52cGF0aHNbdnBfaWRdKTsKKworCS8qIEVuYWJsZSBhbGwgYnJvYWRjYXN0ICovCisJdnhnZV9od192cGF0aF9iY2FzdF9lbmFibGUodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpOworCisJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHRzICovCisJdnhnZV92cGF0aF9pbnRyX2VuYWJsZSh2ZGV2LCB2cF9pZCk7CisKKwlzbXBfd21iKCk7CisKKwkvKiBFbmFibGUgdGhlIGZsb3cgb2YgdHJhZmZpYyB0aHJvdWdoIHRoZSB2cGF0aCAqLworCXZ4Z2VfaHdfdnBhdGhfZW5hYmxlKHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKTsKKworCXNtcF93bWIoKTsKKwl2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpOworCXZkZXYtPnZwYXRoc1t2cF9pZF0ucmluZy5sYXN0X3N0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwkvKiBWcGF0aCByZXNldCBkb25lICovCisJY2xlYXJfYml0KHZwX2lkLCAmdmRldi0+dnBfcmVzZXQpOworCisJLyogU3RhcnQgdGhlIHZwYXRoIHF1ZXVlICovCisJdnhnZV93YWtlX3R4X3F1ZXVlKCZ2ZGV2LT52cGF0aHNbdnBfaWRdLmZpZm8sIE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb192eGdlX3Jlc2V0KHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgZXZlbnQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IHJldCA9IDAsIHZwX2lkLCBpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWlmICgoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB8fCAoZXZlbnQgPT0gVlhHRV9MTF9TVEFSVF9SRVNFVCkpIHsKKwkJLyogY2hlY2sgaWYgZGV2aWNlIGlzIGRvd24gYWxyZWFkeSAqLworCQlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBpcyByZXNldCBhbHJlYWR5IHNjaGVkdWxlZCAqLworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHsKKwkJLyogd2FpdCBmb3IgYWxsIHRoZSB2cGF0aCByZXNldCB0byBjb21wbGV0ZSAqLworCQlmb3IgKHZwX2lkID0gMDsgdnBfaWQgPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBfaWQrKykgeworCQkJd2hpbGUgKHRlc3RfYml0KHZwX2lkLCAmdmRldi0+dnBfcmVzZXQpKQorCQkJCW1zbGVlcCg1MCk7CisJCX0KKworCQkvKiBpZiBleGVjdXRpb24gbW9kZSBpcyBzZXQgdG8gZGVidWcsIGRvbid0IHJlc2V0IHRoZSBhZGFwdGVyICovCisJCWlmICh1bmxpa2VseSh2ZGV2LT5leGVjX21vZGUpKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBleGVjdXRpb24gbW9kZSBpcyBkZWJ1ZywgcmV0dXJuaW5nLi4iLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgeworCQl2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUodmRldi0+ZGV2aCk7CisKKwkJc3dpdGNoICh2ZGV2LT5jcmljX2Vycl9ldmVudCkgeworCQljYXNlIFZYR0VfSFdfRVZFTlRfVU5LTk9XTjoKKwkJCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJImZhdGFsOiAlczogRGlzYWJsaW5nIGRldmljZSBkdWUgdG8iCisJCQkJInVua25vd24gZXJyb3IiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDoKKwkJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfQ09NUExFVEU6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9MSU5LX0RPV046CisJCWNhc2UgVlhHRV9IV19FVkVOVF9MSU5LX1VQOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRDoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0VDQ0VSUjoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9FQ0NFUlI6CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSOgorCQkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlI6CisJCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgorCQkJCSJzZXJpb3VzIGVycm9yIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCS8qIFNPUCBvciBkZXZpY2UgcmVzZXQgcmVxdWlyZWQgKi8KKwkJCS8qIFRoaXMgZXZlbnQgaXMgbm90IGN1cnJlbnRseSB1c2VkICovCisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1NFUlI6CisJCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgorCQkJCSJzZXJpb3VzIGVycm9yIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlI6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9NUlBDSU1fU0VSUjoKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkU6CisJCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgorCQkJCSJzbG90IGZyZWV6ZSIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwl9CisKKwlpZiAoKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgfHwgKGV2ZW50ID09IFZYR0VfTExfU1RBUlRfUkVTRVQpKQorCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCisJaWYgKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgeworCQlzdGF0dXMgPSB2eGdlX3Jlc2V0X2FsbF92cGF0aHModmRldik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJmYXRhbDogJXM6IGNhbiBub3QgcmVzZXQgdnBhdGhzIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGV2ZW50ID09IFZYR0VfTExfQ09NUExfUkVTRVQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQlpZiAodmRldi0+dnBhdGhzW2ldLmhhbmRsZSkgeworCQkJCWlmICh2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCgKKwkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSkKKwkJCQkJCSE9IFZYR0VfSFdfT0spIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkJInZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl8iCisJCQkJCQkiZnJvbV9yZXNldCBmYWlsZWQgZm9yIHZwYXRoOiAiCisJCQkJCQkiJWQiLCBpKTsKKwkJCQkJcmV0ID0gLUVQRVJNOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkidnhnZV9od192cGF0aF9yZXNldCBmYWlsZWQgZm9yICIKKwkJCQkJCSJ2cGF0aDolZCIsIGkpOworCQkJCQlyZXQgPSAtRVBFUk07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwl9CisKKwlpZiAoKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgfHwgKGV2ZW50ID09IFZYR0VfTExfQ09NUExfUkVTRVQpKSB7CisJCS8qIFJlcHJvZ3JhbSB0aGUgREEgdGFibGUgd2l0aCBwb3B1bGF0ZWQgbWFjIGFkZHJlc3NlcyAqLworCQlmb3IgKHZwX2lkID0gMDsgdnBfaWQgPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBfaWQrKykgeworCQkJdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKCZ2ZGV2LT52cGF0aHNbdnBfaWRdKTsKKwkJCXZ4Z2VfcmVzdG9yZV92cGF0aF92aWRfdGFibGUoJnZkZXYtPnZwYXRoc1t2cF9pZF0pOworCQl9CisKKwkJLyogZW5hYmxlIHZwYXRoIGludGVycnVwdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQl2eGdlX3ZwYXRoX2ludHJfZW5hYmxlKHZkZXYsIGkpOworCisJCXZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKHZkZXYtPmRldmgpOworCisJCXNtcF93bWIoKTsKKworCQkvKiBJbmRpY2F0ZSBjYXJkIHVwICovCisJCXNldF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisKKwkJLyogR2V0IHRoZSB0cmFmZmljIHRvIGZsb3cgdGhyb3VnaCB0aGUgdnBhdGhzICovCisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2h3X3ZwYXRoX2VuYWJsZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCXNtcF93bWIoKTsKKwkJCXZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJfQorCisJCXZ4Z2Vfd2FrZV9hbGxfdHhfcXVldWUodmRldik7CisJfQorCitvdXQ6CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCS8qIEluZGljYXRlIHJlc2V0IGRvbmUgKi8KKwlpZiAoKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgfHwgKGV2ZW50ID09IFZYR0VfTExfQ09NUExfUkVTRVQpKQorCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZ4Z2VfcmVzZXQKKyAqIEB2ZGV2OiBwb2ludGVyIHRvIGxsIGRldmljZQorICoKKyAqIGRyaXZlciBtYXkgcmVzZXQgdGhlIGNoaXAgb24gZXZlbnRzIG9mIHNlcnIsIGVjY2VyciwgZXRjCisgKi8KK2ludCB2eGdlX3Jlc2V0KHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWRvX3Z4Z2VfcmVzZXQodmRldiwgVlhHRV9MTF9GVUxMX1JFU0VUKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX3BvbGwgLSBSZWNlaXZlIGhhbmRsZXIgd2hlbiBSZWNlaXZlIFBvbGxpbmcgaXMgdXNlZC4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBAYnVkZ2V0OiBOdW1iZXIgb2YgcGFja2V0cyBidWRnZXRlZCB0byBiZSBwcm9jZXNzZWQgaW4gdGhpcyBpdGVyYXRpb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21lcyBpbnRvIHBpY3R1cmUgb25seSBpZiBSZWNlaXZlIHNpZGUgaXMgYmVpbmcgaGFuZGxlZAorICogdGhyb3VnaCBwb2xsaW5nIChjYWxsZWQgTkFQSSBpbiBsaW51eCkuIEl0IG1vc3RseSBkb2VzIHdoYXQgdGhlIG5vcm1hbAorICogUnggaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBpbiB0ZXJtcyBvZiBkZXNjcmlwdG9yIGFuZCBwYWNrZXQgcHJvY2Vzc2luZworICogYnV0IG5vdCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4gQWxzbyBpdCB3aWxsIHByb2Nlc3MgYSBzcGVjaWZpZWQgbnVtYmVyCisgKiBvZiBwYWNrZXRzIGF0IG1vc3QgaW4gb25lIGl0ZXJhdGlvbi4gVGhpcyB2YWx1ZSBpcyBwYXNzZWQgZG93biBieSB0aGUKKyAqIGtlcm5lbCBhcyB0aGUgZnVuY3Rpb24gYXJndW1lbnQgJ2J1ZGdldCcuCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9wb2xsX21zaXgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmcgPQorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IHZ4Z2VfcmluZywgbmFwaSk7CisJaW50IGJ1ZGdldF9vcmcgPSBidWRnZXQ7CisJcmluZy0+YnVkZ2V0ID0gYnVkZ2V0OworCisJdnhnZV9od192cGF0aF9wb2xsX3J4KHJpbmctPmhhbmRsZSk7CisKKwlpZiAocmluZy0+cGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCS8qIFJlIGVuYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHZwYXRoICovCisJCXZ4Z2VfaHdfY2hhbm5lbF9tc2l4X3VubWFzaygKKwkJCQkoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICopcmluZy0+aGFuZGxlLAorCQkJCXJpbmctPnJ4X3ZlY3Rvcl9ubyk7CisJfQorCisJcmV0dXJuIHJpbmctPnBrdHNfcHJvY2Vzc2VkOworfQorCitzdGF0aWMgaW50IHZ4Z2VfcG9sbF9pbnRhKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdnhnZWRldiwgbmFwaSk7CisJaW50IHBrdHNfcHJvY2Vzc2VkID0gMDsKKwlpbnQgaTsKKwlpbnQgYnVkZ2V0X29yZyA9IGJ1ZGdldDsKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nOworCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKQorCQlwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlyaW5nID0gJnZkZXYtPnZwYXRoc1tpXS5yaW5nOworCQlyaW5nLT5idWRnZXQgPSBidWRnZXQ7CisJCXZ4Z2VfaHdfdnBhdGhfcG9sbF9yeChyaW5nLT5oYW5kbGUpOworCQlwa3RzX3Byb2Nlc3NlZCArPSByaW5nLT5wa3RzX3Byb2Nlc3NlZDsKKwkJYnVkZ2V0IC09IHJpbmctPnBrdHNfcHJvY2Vzc2VkOworCQlpZiAoYnVkZ2V0IDw9IDApCisJCQlicmVhazsKKwl9CisKKwlWWEdFX0NPTVBMRVRFX0FMTF9UWCh2ZGV2KTsKKworCWlmIChwa3RzX3Byb2Nlc3NlZCA8IGJ1ZGdldF9vcmcpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJLyogUmUgZW5hYmxlIHRoZSBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgcmluZyAqLworCQl2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKGhsZGV2KTsKKwkJdnhnZV9od19kZXZpY2VfZmx1c2hfaW8oaGxkZXYpOworCX0KKworCXJldHVybiBwa3RzX3Byb2Nlc3NlZDsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisvKioKKyAqIHZ4Z2VfbmV0cG9sbCAtIG5ldHBvbGwgZXZlbnQgaGFuZGxlciBlbnRyeSBwb2ludAorICogQGRldiA6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB1cHBlciBsYXllciB0byBjaGVjayBmb3IgZXZlbnRzIG9uIHRoZQorICogaW50ZXJmYWNlIGluIHNpdHVhdGlvbnMgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIEl0IGlzIHVzZWQgZm9yCisgKiBzcGVjaWZpYyBpbi1rZXJuZWwgbmV0d29ya2luZyB0YXNrcywgc3VjaCBhcyByZW1vdGUgY29uc29sZXMgYW5kIGtlcm5lbAorICogZGVidWdnaW5nIG92ZXIgdGhlIG5ldHdvcmsgKGV4YW1wbGUgbmV0ZHVtcCBpbiBSZWRIYXQpLgorICovCitzdGF0aWMgdm9pZCB2eGdlX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKHZkZXYtPnBkZXYpKQorCQlyZXR1cm47CisKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcngoaGxkZXYpOworCisJdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcngoaGxkZXYpOworCVZYR0VfQ09NUExFVEVfQUxMX1JYKHZkZXYpOworCVZYR0VfQ09NUExFVEVfQUxMX1RYKHZkZXYpOworCisJZW5hYmxlX2lycShkZXYtPmlycSk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybjsKK30KKyNlbmRpZgorCisvKiBSVEggY29uZmlndXJhdGlvbiAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9ydGhfY29uZmlndXJlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od19ydGhfaGFzaF90eXBlcyBoYXNoX3R5cGVzOworCXU4IGl0YWJsZVsyNTZdID0gezB9OyAvKiBpbmRpcmVjdGlvbiB0YWJsZSAqLworCXU4IG10YWJsZVsyNTZdID0gezB9OyAvKiBDUFUgdG8gdnBhdGggbWFwcGluZyAgKi8KKwlpbnQgaW5kZXg7CisKKwkvKgorCSAqIEZpbGxpbmcKKwkgKiAJLSBpdGFibGUgd2l0aCBidWNrZXQgbnVtYmVycworCSAqIAktIG10YWJsZSB3aXRoIGJ1Y2tldC10by12cGF0aCBtYXBwaW5nCisJICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgKDEgPDwgdmRldi0+Y29uZmlnLnJ0aF9ia3Rfc3opOyBpbmRleCsrKSB7CisJCWl0YWJsZVtpbmRleF0gPSBpbmRleDsKKwkJbXRhYmxlW2luZGV4XSA9IGluZGV4ICUgdmRldi0+bm9fb2ZfdnBhdGg7CisJfQorCisJLyogRmlsbCBSVEggaGFzaCB0eXBlcyAqLworCWhhc2hfdHlwZXMuaGFzaF90eXBlX3RjcGlwdjRfZW4gICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjQ7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfaXB2NF9lbiAgICAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NDsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV90Y3BpcHY2X2VuICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX2lwdjZfZW4gICAgICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjY7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfdGNwaXB2NmV4X2VuID0KKwkJCQkJdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NmV4OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX2lwdjZleF9lbiAgICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjZleDsKKworCS8qIHNldCBpbmRpcmVjdGlvbiB0YWJsZSwgYnVja2V0LXRvLXZwYXRoIG1hcHBpbmcgKi8KKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfaXRhYmxlX3NldCh2ZGV2LT52cF9oYW5kbGVzLAorCQkJCQkJdmRldi0+bm9fb2ZfdnBhdGgsCisJCQkJCQltdGFibGUsIGl0YWJsZSwKKwkJCQkJCXZkZXYtPmNvbmZpZy5ydGhfYmt0X3N6KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIlJUSCBpbmRpcmVjdGlvbiB0YWJsZSBjb25maWd1cmF0aW9uIGZhaWxlZCAiCisJCQkiZm9yIHZwYXRoOiVkIiwgdmRldi0+dnBhdGhzWzBdLmRldmljZV9pZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyoKKwkqIEJlY2F1c2UgdGhlIGl0YWJsZV9zZXQoKSBtZXRob2QgdXNlcyB0aGUgYWN0aXZlX3RhYmxlIGZpZWxkCisJKiBmb3IgdGhlIHRhcmdldCB2aXJ0dWFsIHBhdGggdGhlIFJUSCBjb25maWcgc2hvdWxkIGJlIHVwZGF0ZWQKKwkqIGZvciBhbGwgVlBBVEhzLiBUaGUgaC93IG9ubHkgdXNlcyB0aGUgbG93ZXN0IG51bWJlcmVkIFZQQVRICisJKiB3aGVuIHN0ZWVyaW5nIGZyYW1lcy4KKwkqLworCSBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2ZGV2LT5ub19vZl92cGF0aDsgaW5kZXgrKykgeworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3J0c19ydGhfc2V0KAorCQkJCXZkZXYtPnZwYXRoc1tpbmRleF0uaGFuZGxlLAorCQkJCXZkZXYtPmNvbmZpZy5ydGhfYWxnb3JpdGhtLAorCQkJCSZoYXNoX3R5cGVzLAorCQkJCXZkZXYtPmNvbmZpZy5ydGhfYmt0X3N6KTsKKworCQkgaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIlJUSCBjb25maWd1cmF0aW9uIGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJCXZkZXYtPnZwYXRoc1tpbmRleF0uZGV2aWNlX2lkKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCSB9CisJIH0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCB2eGdlX21hY19saXN0X2FkZChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICpuZXdfbWFjX2VudHJ5OworCXU4ICptYWNfYWRkcmVzcyA9IE5VTEw7CisKKwlpZiAodnBhdGgtPm1hY19hZGRyX2NudCA+PSBWWEdFX01BWF9MRUFSTl9NQUNfQUREUl9DTlQpCisJCXJldHVybiBUUlVFOworCisJbmV3X21hY19lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX21hY19hZGRycyksIEdGUF9BVE9NSUMpOworCWlmICghbmV3X21hY19lbnRyeSkgeworCQl2eGdlX2RlYnVnX21lbShWWEdFX0VSUiwKKwkJCSIlczogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJbGlzdF9hZGQoJm5ld19tYWNfZW50cnktPml0ZW0sICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCk7CisKKwkvKiBDb3B5IHRoZSBuZXcgbWFjIGFkZHJlc3MgdG8gdGhlIGxpc3QgKi8KKwltYWNfYWRkcmVzcyA9ICh1OCAqKSZuZXdfbWFjX2VudHJ5LT5tYWNhZGRyOworCW1lbWNweShtYWNfYWRkcmVzcywgbWFjLT5tYWNhZGRyLCBFVEhfQUxFTik7CisKKwluZXdfbWFjX2VudHJ5LT5zdGF0ZSA9IG1hYy0+c3RhdGU7CisJdnBhdGgtPm1hY19hZGRyX2NudCsrOworCisJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCisJaWYgKDB4MDEgJiBtYWMtPm1hY2FkZHJbMF0pCisJCXZwYXRoLT5tY2FzdF9hZGRyX2NudCsrOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIEFkZCBhIG1hYyBhZGRyZXNzIHRvIERBIHRhYmxlICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfYWRkX21hY19hZGRyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZF9tb2RlIGR1cGxpY2F0ZV9tb2RlOworCisJaWYgKDB4MDEgJiBtYWMtPm1hY2FkZHJbMF0pIC8qIG11bHRpY2FzdCBhZGRyZXNzICovCisJCWR1cGxpY2F0ZV9tb2RlID0gVlhHRV9IV19WUEFUSF9NQUNfQUREUl9BRERfRFVQTElDQVRFOworCWVsc2UKKwkJZHVwbGljYXRlX21vZGUgPSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX1JFUExBQ0VfRFVQTElDQVRFOworCisJdnBhdGggPSAmdmRldi0+dnBhdGhzW21hYy0+dnBhdGhfbm9dOworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkKHZwYXRoLT5oYW5kbGUsIG1hYy0+bWFjYWRkciwKKwkJCQkJCW1hYy0+bWFjbWFzaywgZHVwbGljYXRlX21vZGUpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiREEgY29uZmlnIGFkZCBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCXZwYXRoLT5kZXZpY2VfaWQpOworCX0gZWxzZQorCQlpZiAoRkFMU0UgPT0gdnhnZV9tYWNfbGlzdF9hZGQodnBhdGgsIG1hYykpCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgdnhnZV9tYWNfbGlzdF9kZWwoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKwl1NjQgZGVsX21hYyA9IDA7CisJdTggKm1hY19hZGRyZXNzID0gKHU4ICopICgmZGVsX21hYyk7CisKKwkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgZnJvbSB0aGUgbGlzdCAqLworCW1lbWNweShtYWNfYWRkcmVzcywgbWFjLT5tYWNhZGRyLCBFVEhfQUxFTik7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkgeworCQlpZiAoKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPm1hY2FkZHIgPT0gZGVsX21hYykgeworCQkJbGlzdF9kZWwoZW50cnkpOworCQkJa2ZyZWUoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KTsKKwkJCXZwYXRoLT5tYWNfYWRkcl9jbnQtLTsKKworCQkJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCisJCQlpZiAoMHgwMSAmIG1hYy0+bWFjYWRkclswXSkKKwkJCQl2cGF0aC0+bWNhc3RfYWRkcl9jbnQtLTsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorLyogZGVsZXRlIGEgbWFjIGFkZHJlc3MgZnJvbSBEQSB0YWJsZSAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2RlbF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCisJdnBhdGggPSAmdmRldi0+dnBhdGhzW21hYy0+dnBhdGhfbm9dOworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKHZwYXRoLT5oYW5kbGUsIG1hYy0+bWFjYWRkciwKKwkJCQkJCW1hYy0+bWFjbWFzayk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJEQSBjb25maWcgZGVsZXRlIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJfSBlbHNlCisJCXZ4Z2VfbWFjX2xpc3RfZGVsKHZwYXRoLCBtYWMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGxpc3QgYWxsIG1hYyBhZGRyZXNzZXMgZnJvbSBEQSB0YWJsZSAqLworZW51bSB2eGdlX2h3X3N0YXR1cworc3RhdGljIHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwKKwkJCQkJc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJdW5zaWduZWQgY2hhciBtYWNtYXNrW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIG1hY2FkZHJbRVRIX0FMRU5dOworCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQodnBhdGgtPmhhbmRsZSwKKwkJCQltYWNhZGRyLCBtYWNtYXNrKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkRBIGNvbmZpZyBsaXN0IGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJdnBhdGgtPmRldmljZV9pZCk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJd2hpbGUgKG1lbWNtcChtYWMtPm1hY2FkZHIsIG1hY2FkZHIsIEVUSF9BTEVOKSkgeworCisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQodnBhdGgtPmhhbmRsZSwKKwkJCQltYWNhZGRyLCBtYWNtYXNrKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogU3RvcmUgYWxsIHZsYW4gaWRzIGZyb20gdGhlIGxpc3QgdG8gdGhlIHZpZCB0YWJsZSAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSB2cGF0aC0+dmRldjsKKwl1MTYgdmlkOworCisJaWYgKHZkZXYtPnZsZ3JwICYmIHZwYXRoLT5pc19vcGVuKSB7CisKKwkJZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgdmlkKyspIHsKKwkJCWlmICghdmxhbl9ncm91cF9nZXRfZGV2aWNlKHZkZXYtPnZsZ3JwLCB2aWQpKQorCQkJCWNvbnRpbnVlOworCQkJLyogQWRkIHRoZXNlIHZsYW4gdG8gdGhlIHZpZCB0YWJsZSAqLworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF92aWRfYWRkKHZwYXRoLT5oYW5kbGUsIHZpZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBTdG9yZSBhbGwgbWFjIGFkZHJlc3NlcyBmcm9tIHRoZSBsaXN0IHRvIHRoZSBEQSB0YWJsZSAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgbWFjSW5mbyBtYWNfaW5mbzsKKwl1OCAqbWFjX2FkZHJlc3MgPSBOVUxMOworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKworCW1lbXNldCgmbWFjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCisJaWYgKHZwYXRoLT5pc19vcGVuKSB7CisKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCAmdnBhdGgtPm1hY19hZGRyX2xpc3QpIHsKKwkJCW1hY19hZGRyZXNzID0KKwkJCQkodTggKikmCisJCQkJKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPm1hY2FkZHI7CisJCQltZW1jcHkobWFjX2luZm8ubWFjYWRkciwgbWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwkJCSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5zdGF0ZSA9CisJCQkJVlhHRV9MTF9NQUNfQUREUl9JTl9EQV9UQUJMRTsKKwkJCS8qIGRvZXMgdGhpcyBtYWMgYWRkcmVzcyBhbHJlYWR5IGV4aXN0IGluIGRhIHRhYmxlPyAqLworCQkJc3RhdHVzID0gdnhnZV9zZWFyY2hfbWFjX2FkZHJfaW5fZGFfdGFibGUodnBhdGgsCisJCQkJJm1hY19pbmZvKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCS8qIEFkZCB0aGlzIG1hYyBhZGRyZXNzIHRvIHRoZSBEQSB0YWJsZSAqLworCQkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkKAorCQkJCQl2cGF0aC0+aGFuZGxlLCBtYWNfaW5mby5tYWNhZGRyLAorCQkJCQltYWNfaW5mby5tYWNtYXNrLAorCQkJCSAgICBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEUpOworCQkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSAgICAiREEgYWRkIGVudHJ5IGZhaWxlZCBmb3IgdnBhdGg6JWQiLAorCQkJCQkgICAgdnBhdGgtPmRldmljZV9pZCk7CisJCQkJCSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5zdGF0ZQorCQkJCQkJPSBWWEdFX0xMX01BQ19BRERSX0lOX0xJU1Q7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogcmVzZXQgdnBhdGhzICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJaWYgKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpIHsKKwkJCWlmICh2eGdlX2h3X3ZwYXRoX3Jlc2V0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpCisJCQkJCT09IFZYR0VfSFdfT0spIHsKKwkJCQlpZiAoaXNfdnhnZV9jYXJkX3VwKHZkZXYpICYmCisJCQkJCXZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSkKKwkJCQkJCSE9IFZYR0VfSFdfT0spIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkJInZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl8iCisJCQkJCQkiZnJvbV9yZXNldCBmYWlsZWQgZm9yIHZwYXRoOiAiCisJCQkJCQkiJWQiLCBpKTsKKwkJCQkJcmV0dXJuIHN0YXR1czsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJInZ4Z2VfaHdfdnBhdGhfcmVzZXQgZmFpbGVkIGZvciAiCisJCQkJCSJ2cGF0aDolZCIsIGkpOworCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogY2xvc2UgdnBhdGhzICovCit2b2lkIHZ4Z2VfY2xvc2VfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgaW5kZXgpCit7CisJaW50IGk7CisJZm9yIChpID0gaW5kZXg7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCWlmICh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlICYmIHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKSB7CisJCQl2eGdlX2h3X3ZwYXRoX2Nsb3NlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4tLTsKKwkJfQorCQl2ZGV2LT52cGF0aHNbaV0uaXNfb3BlbiA9IDA7CisJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUgID0gTlVMTDsKKwl9Cit9CisKKy8qIG9wZW4gdnBhdGhzICovCitpbnQgdnhnZV9vcGVuX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKwl1MzIgdnBfaWQgPSAwOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX2F0dHIgYXR0cjsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19jb25maWd1cmVkKTsKKwkJYXR0ci52cF9pZCA9IHZkZXYtPnZwYXRoc1tpXS5kZXZpY2VfaWQ7CisJCWF0dHIuZmlmb19hdHRyLmNhbGxiYWNrID0gdnhnZV94bWl0X2NvbXBsOworCQlhdHRyLmZpZm9fYXR0ci50eGRsX3Rlcm0gPSB2eGdlX3R4X3Rlcm07CisJCWF0dHIuZmlmb19hdHRyLnBlcl90eGRsX3NwYWNlID0gc2l6ZW9mKHN0cnVjdCB2eGdlX3R4X3ByaXYpOworCQlhdHRyLmZpZm9fYXR0ci51c2VyZGF0YSA9ICh2b2lkICopJnZkZXYtPnZwYXRoc1tpXS5maWZvOworCisJCWF0dHIucmluZ19hdHRyLmNhbGxiYWNrID0gdnhnZV9yeF8xYl9jb21wbDsKKwkJYXR0ci5yaW5nX2F0dHIucnhkX2luaXQgPSB2eGdlX3J4X2luaXRpYWxfcmVwbGVuaXNoOworCQlhdHRyLnJpbmdfYXR0ci5yeGRfdGVybSA9IHZ4Z2VfcnhfdGVybTsKKwkJYXR0ci5yaW5nX2F0dHIucGVyX3J4ZF9zcGFjZSA9IHNpemVvZihzdHJ1Y3QgdnhnZV9yeF9wcml2KTsKKwkJYXR0ci5yaW5nX2F0dHIudXNlcmRhdGEgPSAodm9pZCAqKSZ2ZGV2LT52cGF0aHNbaV0ucmluZzsKKworCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5uZGV2ID0gdmRldi0+bmRldjsKKwkJdmRldi0+dnBhdGhzW2ldLnJpbmcucGRldiA9IHZkZXYtPnBkZXY7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfb3Blbih2ZGV2LT5kZXZoLCAmYXR0ciwKKwkJCQkmKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpKTsKKwkJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5oYW5kbGUgPQorCQkJICAgIChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKilhdHRyLmZpZm9fYXR0ci51c2VyZGF0YTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLmhhbmRsZSA9CisJCQkgICAgKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKWF0dHIucmluZ19hdHRyLnVzZXJkYXRhOworCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8udHhfc3RlZXJpbmdfdHlwZSA9CisJCQkJdmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGU7CisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5uZGV2ID0gdmRldi0+bmRldjsKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnBkZXYgPSB2ZGV2LT5wZGV2OworCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8uaW5kaWNhdGVfbWF4X3BrdHMgPQorCQkJCXZkZXYtPmNvbmZpZy5maWZvX2luZGljYXRlX21heF9wa3RzOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcucnhfdmVjdG9yX25vID0gMDsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnJ4X2NzdW0gPSB2ZGV2LT5yeF9jc3VtOworCQkJdmRldi0+dnBhdGhzW2ldLmlzX29wZW4gPSAxOworCQkJdmRldi0+dnBfaGFuZGxlc1tpXSA9IHZkZXYtPnZwYXRoc1tpXS5oYW5kbGU7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5ncm9fZW5hYmxlID0KKwkJCQkJCXZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcudmxhbl90YWdfc3RyaXAgPQorCQkJCQkJdmRldi0+dmxhbl90YWdfc3RyaXA7CisJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbisrOworCQl9IGVsc2UgeworCQkJdmRldi0+c3RhdHMudnBhdGhfb3Blbl9mYWlsKys7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiB2cGF0aDogJWQgZmFpbGVkIHRvIG9wZW4gIgorCQkJCSJ3aXRoIHN0YXR1czogJWQiLAorCQkJICAgIHZkZXYtPm5kZXYtPm5hbWUsIHZkZXYtPnZwYXRoc1tpXS5kZXZpY2VfaWQsCisJCQkJc3RhdHVzKTsKKwkJCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDApOworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCisJCXZwX2lkID0KKwkJICAoKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICopdmRldi0+dnBhdGhzW2ldLmhhbmRsZSktPgorCQkgIHZwYXRoLT52cF9pZDsKKwkJdmRldi0+dnBhdGhzX2RlcGxveWVkIHw9IHZ4Z2VfbUJJVCh2cF9pZCk7CisJfQorCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogIHZ4Z2VfaXNyX25hcGkKKyAqICBAaXJxOiB0aGUgaXJxIG9mIHRoZSBkZXZpY2UuCisgKiAgQGRldl9pZDogYSB2b2lkIHBvaW50ZXIgdG8gdGhlIGhsZGV2IHN0cnVjdHVyZSBvZiB0aGUgVGl0YW4gZGV2aWNlCisgKiAgQHB0cmVnczogcG9pbnRlciB0byB0aGUgcmVnaXN0ZXJzIHB1c2hlZCBvbiB0aGUgc3RhY2suCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgdGhlIElTUiBoYW5kbGVyIG9mIHRoZSBkZXZpY2Ugd2hlbiBuYXBpIGlzIGVuYWJsZWQuIEl0CisgKiAgaWRlbnRpZmllcyB0aGUgcmVhc29uIGZvciB0aGUgaW50ZXJydXB0IGFuZCBjYWxscyB0aGUgcmVsZXZhbnQgc2VydmljZQorICogIHJvdXRpbmVzLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgdnhnZV9pc3JfbmFwaShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKilkZXZfaWQ7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1NjQgcmVhc29uOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJdnhnZV9kZWJ1Z19pbnRyKFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlkZXYgPSBobGRldi0+bmRldjsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKHZkZXYtPnBkZXYpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycShobGRldiwgdmRldi0+ZXhlY19tb2RlLAorCQkJJnJlYXNvbik7CisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKGhsZGV2KTsKKworCQlpZiAocmVhc29uICYKKwkJCVZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1ZQQVRIX1RSQUZGSUNfSU5UKAorCQkJdmRldi0+dnBhdGhzX2RlcGxveWVkID4+CisJCQkoNjQgLSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKSkpIHsKKworCQkJdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcngoaGxkZXYpOworCQkJbmFwaV9zY2hlZHVsZSgmdmRldi0+bmFwaSk7CisJCQl2eGdlX2RlYnVnX2ludHIoVlhHRV9UUkFDRSwKKwkJCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXZ4Z2VfaHdfZGV2aWNlX3VubWFza19hbGwoaGxkZXYpOworCX0gZWxzZSBpZiAodW5saWtlbHkoKHN0YXR1cyA9PSBWWEdFX0hXX0VSUl9WUEFUSCkgfHwKKwkJKHN0YXR1cyA9PSBWWEdFX0hXX0VSUl9DUklUSUNBTCkgfHwKKwkJKHN0YXR1cyA9PSBWWEdFX0hXX0VSUl9GSUZPKSkpIHsKKwkJdnhnZV9od19kZXZpY2VfbWFza19hbGwoaGxkZXYpOworCQl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhobGRldik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRSkpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXZ4Z2VfZGVidWdfaW50cihWWEdFX1RSQUNFLCAiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiBJUlFfTk9ORTsKK30KKworI2lmZGVmIENPTkZJR19QQ0lfTVNJCisKK3N0YXRpYyBpcnFyZXR1cm5fdAordnhnZV90eF9tc2l4X2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IChzdHJ1Y3QgdnhnZV9maWZvICopZGV2X2lkOworCisJVlhHRV9DT01QTEVURV9WUEFUSF9UWChmaWZvKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90Cit2eGdlX3J4X21zaXhfbmFwaV9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmcgPSAoc3RydWN0IHZ4Z2VfcmluZyAqKWRldl9pZDsKKworCS8qIE1TSVhfSURYIGZvciBSeCBpcyAxICovCisJdnhnZV9od19jaGFubmVsX21zaXhfbWFzaygoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICopcmluZy0+aGFuZGxlLAorCQkJCQlyaW5nLT5yeF92ZWN0b3Jfbm8pOworCisJbmFwaV9zY2hlZHVsZSgmcmluZy0+bmFwaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3Z4Z2VfYWxhcm1fbXNpeF9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWludCBpOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9IChzdHJ1Y3QgdnhnZV92cGF0aCAqKWRldl9pZDsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IHZwYXRoLT52ZGV2OworCWludCBhbGFybV9tc2l4X2lkID0KKwkJVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSAqIHZkZXYtPm5vX29mX3ZwYXRoIC0gMjsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCisJCQlhbGFybV9tc2l4X2lkKTsKKworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3ModmRldi0+dnBhdGhzW2ldLmhhbmRsZSwKKwkJCXZkZXYtPmV4ZWNfbW9kZSk7CisJCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCisJCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCisJCQkJYWxhcm1fbXNpeF9pZCk7CisJCQljb250aW51ZTsKKwkJfQorCQl2eGdlX2RlYnVnX2ludHIoVlhHRV9FUlIsCisJCQkiJXM6IHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcyBmYWlsZWQgJXggIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIHN0YXR1cyk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB2eGdlX2FsbG9jX21zaXgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGosIGksIHJldCA9IDA7CisJaW50IGludHJfY250ID0gMDsKKwlpbnQgYWxhcm1fbXNpeF9pZCA9IDAsIG1zaXhfaW50cl92ZWN0ID0gMDsKKwl2ZGV2LT5pbnRyX2NudCA9IDA7CisKKwkvKiBUeC9SeCBNU0lYIFZlY3RvcnMgY291bnQgKi8KKwl2ZGV2LT5pbnRyX2NudCA9IHZkZXYtPm5vX29mX3ZwYXRoICogMjsKKworCS8qIEFsYXJtIE1TSVggVmVjdG9ycyBjb3VudCAqLworCXZkZXYtPmludHJfY250Kys7CisKKwlpbnRyX2NudCA9ICh2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkICogMikgKyAxOworCXZkZXYtPmVudHJpZXMgPSBremFsbG9jKGludHJfY250ICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSwKKwkJCQkJCUdGUF9LRVJORUwpOworCWlmICghdmRldi0+ZW50cmllcykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCisJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0dXJuICAtRU5PTUVNOworCX0KKworCXZkZXYtPnZ4Z2VfZW50cmllcyA9IGt6YWxsb2MoaW50cl9jbnQgKiBzaXplb2Yoc3RydWN0IHZ4Z2VfbXNpeF9lbnRyeSksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZGV2LT52eGdlX2VudHJpZXMpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLCAiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCisJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJa2ZyZWUodmRldi0+ZW50cmllcyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIExhc3QgdmVjdG9yIGluIHRoZSBsaXN0IGlzIHVzZWQgZm9yIGFsYXJtICovCisJYWxhcm1fbXNpeF9pZCA9IFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgKiB2ZGV2LT5ub19vZl92cGF0aCAtIDI7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkOyBpKyspIHsKKworCQltc2l4X2ludHJfdmVjdCA9IGkgKiBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFOworCisJCS8qIEluaXRpYWxpemUgdGhlIGZpZm8gdmVjdG9yICovCisJCXZkZXYtPmVudHJpZXNbal0uZW50cnkgPSBtc2l4X2ludHJfdmVjdDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmVudHJ5ID0gbXNpeF9pbnRyX3ZlY3Q7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5pbl91c2UgPSAwOworCQlqKys7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgcmluZyB2ZWN0b3IgKi8KKwkJdmRldi0+ZW50cmllc1tqXS5lbnRyeSA9IG1zaXhfaW50cl92ZWN0ICsgMTsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmVudHJ5ID0gbXNpeF9pbnRyX3ZlY3QgKyAxOworCQl2ZGV2LT52eGdlX2VudHJpZXNbal0uaW5fdXNlID0gMDsKKwkJaisrOworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIGFsYXJtIHZlY3RvciAqLworCXZkZXYtPmVudHJpZXNbal0uZW50cnkgPSBhbGFybV9tc2l4X2lkOworCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5lbnRyeSA9IGFsYXJtX21zaXhfaWQ7CisJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmluX3VzZSA9IDA7CisKKwlyZXQgPSBwY2lfZW5hYmxlX21zaXgodmRldi0+cGRldiwgdmRldi0+ZW50cmllcywgaW50cl9jbnQpOworCS8qIGlmIGRyaXZlciByZXF1ZXN0IGV4Y2VlZWRzIGF2YWlsYWJsZSBpcnEncywgcmVxdWVzdCB3aXRoIGEgc21hbGwKKwkgKiBudW1iZXIuCisJKi8KKwlpZiAocmV0ID4gMCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IE1TSS1YIGVuYWJsZSBmYWlsZWQgZm9yICVkIHZlY3RvcnMsIGF2YWlsYWJsZTogJWQiLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgaW50cl9jbnQsIHJldCk7CisJCXZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgPSB2ZGV2LT5ub19vZl92cGF0aDsKKwkJaW50cl9jbnQgPSAodmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCAqIDIpICsgMTsKKworCQkvKiBSZXNldCB0aGUgYWxhcm0gdmVjdG9yIHNldHRpbmcgKi8KKwkJdmRldi0+ZW50cmllc1tqXS5lbnRyeSA9IDA7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5lbnRyeSA9IDA7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgYWxhcm0gdmVjdG9yIHdpdGggbmV3IHNldHRpbmcgKi8KKwkJdmRldi0+ZW50cmllc1tpbnRyX2NudCAtIDFdLmVudHJ5ID0gYWxhcm1fbXNpeF9pZDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250IC0gMV0uZW50cnkgPSBhbGFybV9tc2l4X2lkOworCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnQgLSAxXS5pbl91c2UgPSAwOworCisJCXJldCA9IHBjaV9lbmFibGVfbXNpeCh2ZGV2LT5wZGV2LCB2ZGV2LT5lbnRyaWVzLCBpbnRyX2NudCk7CisJCWlmICghcmV0KQorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogTVNJLVggZW5hYmxlZCBmb3IgJWQgdmVjdG9ycyIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwgaW50cl9jbnQpOworCX0KKworCWlmIChyZXQpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBNU0ktWCBlbmFibGUgZmFpbGVkIGZvciAlZCB2ZWN0b3JzLCByZXQ6ICVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIGludHJfY250LCByZXQpOworCQlrZnJlZSh2ZGV2LT5lbnRyaWVzKTsKKwkJa2ZyZWUodmRldi0+dnhnZV9lbnRyaWVzKTsKKwkJdmRldi0+ZW50cmllcyA9IE5VTEw7CisJCXZkZXYtPnZ4Z2VfZW50cmllcyA9IE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2eGdlX2VuYWJsZV9tc2l4KHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCisJaW50IGksIHJldCA9IDA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJLyogMCAtIFR4LCAxIC0gUnggICovCisJaW50IHRpbV9tc2l4X2lkWzRdOworCWludCBhbGFybV9tc2l4X2lkID0gMCwgbXNpeF9pbnRyX3ZlY3QgPSAwOzsKKwl2ZGV2LT5pbnRyX2NudCA9IDA7CisKKwkvKiBhbGxvY2F0ZSBtc2l4IHZlY3RvcnMgKi8KKwlyZXQgPSB2eGdlX2FsbG9jX21zaXgodmRldik7CisJaWYgKCFyZXQpIHsKKwkJLyogTGFzdCB2ZWN0b3IgaW4gdGhlIGxpc3QgaXMgdXNlZCBmb3IgYWxhcm0gKi8KKwkJYWxhcm1fbXNpeF9pZCA9CisJCQlWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFICogdmRldi0+bm9fb2ZfdnBhdGggLSAyOworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCisJCQkvKiBJZiBmaWZvIG9yIHJpbmcgYXJlIG5vdCBlbmFibGVkCisJCQkgICB0aGUgTVNJWCB2ZWN0b3IgZm9yIHRoYXQgc2hvdWxkIGJlIHNldCB0byAwCisJCQkgICBIZW5jZSBpbml0aWFsaXplaW5nIHRoaXMgYXJyYXkgdG8gYWxsIDBzLgorCQkJKi8KKwkJCW1lbXNldCh0aW1fbXNpeF9pZCwgMCwgc2l6ZW9mKHRpbV9tc2l4X2lkKSk7CisJCQltc2l4X2ludHJfdmVjdCA9IGkgKiBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFOworCQkJdGltX21zaXhfaWRbMF0gPSBtc2l4X2ludHJfdmVjdDsKKworCQkJdGltX21zaXhfaWRbMV0gPSBtc2l4X2ludHJfdmVjdCArIDE7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5yeF92ZWN0b3Jfbm8gPSB0aW1fbXNpeF9pZFsxXTsKKworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tc2l4X3NldCgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCisJCQkJCQl0aW1fbXNpeF9pZCwgYWxhcm1fbXNpeF9pZCk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSJ2eGdlX2h3X3ZwYXRoX21zaXhfc2V0ICIKKwkJCQkJImZhaWxlZCB3aXRoIHN0YXR1cyA6ICV4Iiwgc3RhdHVzKTsKKwkJCQlrZnJlZSh2ZGV2LT5lbnRyaWVzKTsKKwkJCQlrZnJlZSh2ZGV2LT52eGdlX2VudHJpZXMpOworCQkJCXBjaV9kaXNhYmxlX21zaXgodmRldi0+cGRldik7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2eGdlX3JlbV9tc2l4X2lzcihzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaW50cl9jbnQ7CisKKwlmb3IgKGludHJfY250ID0gMDsgaW50cl9jbnQgPCAodmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCAqIDIgKyAxKTsKKwkJaW50cl9jbnQrKykgeworCQlpZiAodmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5pbl91c2UpIHsKKwkJCXN5bmNocm9uaXplX2lycSh2ZGV2LT5lbnRyaWVzW2ludHJfY250XS52ZWN0b3IpOworCQkJZnJlZV9pcnEodmRldi0+ZW50cmllc1tpbnRyX2NudF0udmVjdG9yLAorCQkJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uYXJnKTsKKwkJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uaW5fdXNlID0gMDsKKwkJfQorCX0KKworCWtmcmVlKHZkZXYtPmVudHJpZXMpOworCWtmcmVlKHZkZXYtPnZ4Z2VfZW50cmllcyk7CisJdmRldi0+ZW50cmllcyA9IE5VTEw7CisJdmRldi0+dnhnZV9lbnRyaWVzID0gTlVMTDsKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKQorCQlwY2lfZGlzYWJsZV9tc2l4KHZkZXYtPnBkZXYpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHZ4Z2VfcmVtX2lzcihzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKSB7CisJCXZ4Z2VfcmVtX21zaXhfaXNyKHZkZXYpOworCX0gZWxzZQorI2VuZGlmCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkgeworCQkJc3luY2hyb25pemVfaXJxKHZkZXYtPnBkZXYtPmlycSk7CisJCQlmcmVlX2lycSh2ZGV2LT5wZGV2LT5pcnEsIGhsZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9hZGRfaXNyKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPQorCQkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCWludCB2cF9pZHggPSAwLCBpbnRyX2lkeCA9IDAsIGludHJfY250ID0gMCwgbXNpeF9pZHggPSAwLCBpcnFfcmVxID0gMDsKKwl1NjQgZnVuY3Rpb25fbW9kZSA9IHZkZXYtPmNvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jdGlvbl9tb2RlOworCWludCBwY2lfZnVuID0gUENJX0ZVTkModmRldi0+cGRldi0+ZGV2Zm4pOworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpCisJCXJldCA9IHZ4Z2VfZW5hYmxlX21zaXgodmRldik7CisKKwlpZiAocmV0KSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogRW5hYmxpbmcgTVNJLVggRmFpbGVkIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCWlmICgoZnVuY3Rpb25fbW9kZSA9PSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04pICYmCisJCQl0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLAorCQkJCSZkcml2ZXJfY29uZmlnLT5pbnRhX2Rldl9vcGVuKSkKKwkJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisJCWVsc2UgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogRGVmYXVsdGluZyB0byBJTlRBIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCQl2ZGV2LT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKKwkJCXZ4Z2VfaHdfZGV2aWNlX3NldF9pbnRyX3R5cGUodmRldi0+ZGV2aCwKKwkJCQlWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKTsKKwkJCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDEpOworCQkJdmRldi0+bm9fb2ZfdnBhdGggPSAxOworCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4gPSAxOworCQl9CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpIHsKKwkJZm9yIChpbnRyX2lkeCA9IDA7CisJCSAgICAgaW50cl9pZHggPCAodmRldi0+bm9fb2ZfdnBhdGggKgorCQkJVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSk7IGludHJfaWR4KyspIHsKKworCQkJbXNpeF9pZHggPSBpbnRyX2lkeCAlIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkU7CisJCQlpcnFfcmVxID0gMDsKKworCQkJc3dpdGNoIChtc2l4X2lkeCkgeworCQkJY2FzZSAwOgorCQkJCXNucHJpbnRmKHZkZXYtPmRlc2NbaW50cl9jbnRdLCBWWEdFX0lOVFJfU1RSTEVOLAorCQkJCQkiJXM6dnhnZSBmbjogJWQgdnBhdGg6ICVkIFR4IE1TSS1YOiAlZCIsCisJCQkJCXZkZXYtPm5kZXYtPm5hbWUsIHBjaV9mdW4sIHZwX2lkeCwKKwkJCQkJdmRldi0+ZW50cmllc1tpbnRyX2NudF0uZW50cnkpOworCQkJCXJldCA9IHJlcXVlc3RfaXJxKAorCQkJCSAgICB2ZGV2LT5lbnRyaWVzW2ludHJfY250XS52ZWN0b3IsCisJCQkJCXZ4Z2VfdHhfbXNpeF9oYW5kbGUsIDAsCisJCQkJCXZkZXYtPmRlc2NbaW50cl9jbnRdLAorCQkJCQkmdmRldi0+dnBhdGhzW3ZwX2lkeF0uZmlmbyk7CisJCQkJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uYXJnID0KKwkJCQkJCSZ2ZGV2LT52cGF0aHNbdnBfaWR4XS5maWZvOworCQkJCWlycV9yZXEgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXNucHJpbnRmKHZkZXYtPmRlc2NbaW50cl9jbnRdLCBWWEdFX0lOVFJfU1RSTEVOLAorCQkJCQkiJXM6dnhnZSBmbjogJWQgdnBhdGg6ICVkIFJ4IE1TSS1YOiAlZCIsCisJCQkJCXZkZXYtPm5kZXYtPm5hbWUsIHBjaV9mdW4sIHZwX2lkeCwKKwkJCQkJdmRldi0+ZW50cmllc1tpbnRyX2NudF0uZW50cnkpOworCQkJCXJldCA9IHJlcXVlc3RfaXJxKAorCQkJCSAgICB2ZGV2LT5lbnRyaWVzW2ludHJfY250XS52ZWN0b3IsCisJCQkJCXZ4Z2VfcnhfbXNpeF9uYXBpX2hhbmRsZSwKKwkJCQkJMCwKKwkJCQkJdmRldi0+ZGVzY1tpbnRyX2NudF0sCisJCQkJCSZ2ZGV2LT52cGF0aHNbdnBfaWR4XS5yaW5nKTsKKwkJCQkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5hcmcgPQorCQkJCQkJJnZkZXYtPnZwYXRoc1t2cF9pZHhdLnJpbmc7CisJCQkJaXJxX3JlcSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChyZXQpIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSIlczogTVNJWCAtICVkICBSZWdpc3RyYXRpb24gZmFpbGVkIiwKKwkJCQkJdmRldi0+bmRldi0+bmFtZSwgaW50cl9jbnQpOworCQkJCXZ4Z2VfcmVtX21zaXhfaXNyKHZkZXYpOworCQkJCWlmICgoZnVuY3Rpb25fbW9kZSA9PQorCQkJCQlWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04pICYmCisJCQkJCXRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsCisJCQkJCQkmZHJpdmVyX2NvbmZpZy0+aW50YV9kZXZfb3BlbikpCisJCQkJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisJCQkJZWxzZSB7CisJCQkJCXZ4Z2VfaHdfZGV2aWNlX3NldF9pbnRyX3R5cGUoCisJCQkJCQl2ZGV2LT5kZXZoLAorCQkJCQkJVlhHRV9IV19JTlRSX01PREVfSVJRTElORSk7CisJCQkJCQl2ZGV2LT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkJIiVzOiBEZWZhdWx0aW5nIHRvIElOVEEiCisJCQkJCQksIHZkZXYtPm5kZXYtPm5hbWUpOworCQkJCQl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAxKTsKKwkJCQkJdmRldi0+bm9fb2ZfdnBhdGggPSAxOworCQkJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbiA9IDE7CisJCQkJCWdvdG8gSU5UQV9NT0RFOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGlycV9yZXEpIHsKKwkJCQkvKiBXZSByZXF1ZXN0ZWQgZm9yIHRoaXMgbXNpeCBpbnRlcnJ1cHQgKi8KKwkJCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmluX3VzZSA9IDE7CisJCQkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzaygKKwkJCQkJdmRldi0+dnBhdGhzW3ZwX2lkeF0uaGFuZGxlLAorCQkJCQlpbnRyX2lkeCk7CisJCQkJaW50cl9jbnQrKzsKKwkJCX0KKworCQkJLyogUG9pbnQgdG8gbmV4dCB2cGF0aCBoYW5kbGVyICovCisJCQlpZiAoKChpbnRyX2lkeCArIDEpICUgVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSA9PSAwKQorCQkJCSYmICh2cF9pZHggPCAodmRldi0+bm9fb2ZfdnBhdGggLSAxKSkpCisJCQkJCXZwX2lkeCsrOworCQl9CisKKwkJaW50cl9jbnQgPSB2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkICogMjsKKwkJc25wcmludGYodmRldi0+ZGVzY1tpbnRyX2NudF0sIFZYR0VfSU5UUl9TVFJMRU4sCisJCQkiJXM6dnhnZSBBbGFybSBmbjogJWQgTVNJLVg6ICVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUsIHBjaV9mdW4sCisJCQl2ZGV2LT5lbnRyaWVzW2ludHJfY250XS5lbnRyeSk7CisJCS8qIEZvciBBbGFybSBpbnRlcnJ1cHRzICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHZkZXYtPmVudHJpZXNbaW50cl9jbnRdLnZlY3RvciwKKwkJCQkJdnhnZV9hbGFybV9tc2l4X2hhbmRsZSwgMCwKKwkJCQkJdmRldi0+ZGVzY1tpbnRyX2NudF0sCisJCQkJCSZ2ZGV2LT52cGF0aHNbdnBfaWR4XSk7CisJCWlmIChyZXQpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IE1TSVggLSAlZCBSZWdpc3RyYXRpb24gZmFpbGVkIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lLCBpbnRyX2NudCk7CisJCQl2eGdlX3JlbV9tc2l4X2lzcih2ZGV2KTsKKwkJCWlmICgoZnVuY3Rpb25fbW9kZSA9PQorCQkJCVZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTikgJiYKKwkJCQl0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLAorCQkJCQkJJmRyaXZlcl9jb25maWctPmludGFfZGV2X29wZW4pKQorCQkJCXJldHVybiBWWEdFX0hXX0ZBSUw7CisJCQllbHNlIHsKKwkJCQl2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlKHZkZXYtPmRldmgsCisJCQkJCQlWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKTsKKwkJCQl2ZGV2LT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSIlczogRGVmYXVsdGluZyB0byBJTlRBIiwKKwkJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQkJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMSk7CisJCQkJdmRldi0+bm9fb2ZfdnBhdGggPSAxOworCQkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuID0gMTsKKwkJCQlnb3RvIElOVEFfTU9ERTsKKwkJCX0KKwkJfQorCisJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sodmRldi0+dnBhdGhzW3ZwX2lkeF0uaGFuZGxlLAorCQkJCQlpbnRyX2lkeCAtIDIpOworCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmluX3VzZSA9IDE7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uYXJnID0gJnZkZXYtPnZwYXRoc1t2cF9pZHhdOworCX0KK0lOVEFfTU9ERToKKyNlbmRpZgorCXNucHJpbnRmKHZkZXYtPmRlc2NbMF0sIFZYR0VfSU5UUl9TVFJMRU4sICIlczp2eGdlIiwgdmRldi0+bmRldi0+bmFtZSk7CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKChpbnQpIHZkZXYtPnBkZXYtPmlycSwKKwkJCXZ4Z2VfaXNyX25hcGksCisJCQlJUlFGX1NIQVJFRCwgdmRldi0+ZGVzY1swXSwgaGxkZXYpOworCQlpZiAocmV0KSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzICVzLSVkOiBJU1IgcmVnaXN0cmF0aW9uIGZhaWxlZCIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwgIklSUSIsIHZkZXYtPnBkZXYtPmlycSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSJuZXcgJXMtJWQgbGluZSBhbGxvY2F0ZWQiLAorCQkJIklSUSIsIHZkZXYtPnBkZXYtPmlycSk7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfcG9sbF92cF9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKilkYXRhOworCWludCBpLCBqID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCAmdmRldi0+dnBfcmVzZXQpKSB7CisJCQl2eGdlX3Jlc2V0X3ZwYXRoKHZkZXYsIGkpOworCQkJaisrOworCQl9CisJfQorCWlmIChqICYmICh2ZGV2LT5jb25maWcuaW50cl90eXBlICE9IE1TSV9YKSkgeworCQl2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKHZkZXYtPmRldmgpOworCQl2eGdlX2h3X2RldmljZV9mbHVzaF9pbyh2ZGV2LT5kZXZoKTsKKwl9CisKKwltb2RfdGltZXIoJnZkZXYtPnZwX3Jlc2V0X3RpbWVyLCBqaWZmaWVzICsgSFogLyAyKTsKK30KKworc3RhdGljIHZvaWQgdnhnZV9wb2xsX3ZwX2xvY2t1cCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKilkYXRhOworCWludCBpOworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmc7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJcmluZyA9ICZ2ZGV2LT52cGF0aHNbaV0ucmluZzsKKwkJLyogRGlkIHRoaXMgdnBhdGggcmVjZWl2ZWQgYW55IHBhY2tldHMgKi8KKwkJaWYgKHJpbmctPnN0YXRzLnByZXZfcnhfZnJtcyA9PSByaW5nLT5zdGF0cy5yeF9mcm1zKSB7CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2NoZWNrX2xlYWsocmluZy0+aGFuZGxlKTsKKworCQkJLyogRGlkIGl0IHJlY2VpdmVkIGFueSBwYWNrZXRzIGxhc3QgdGltZSAqLworCQkJaWYgKChWWEdFX0hXX0ZBSUwgPT0gc3RhdHVzKSAmJgorCQkJCShWWEdFX0hXX0ZBSUwgPT0gcmluZy0+bGFzdF9zdGF0dXMpKSB7CisKKwkJCQkvKiBzY2hlZHVsZSB2cGF0aCByZXNldCAqLworCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmdmRldi0+dnBfcmVzZXQpKSB7CisKKwkJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIHZwYXRoICovCisJCQkJCXZ4Z2VfdnBhdGhfaW50cl9kaXNhYmxlKHZkZXYsIGkpOworCisJCQkJCS8qIHN0b3AgdGhlIHF1ZXVlIGZvciB0aGlzIHZwYXRoICovCisJCQkJCXZ4Z2Vfc3RvcF90eF9xdWV1ZSgmdmRldi0+dnBhdGhzW2ldLgorCQkJCQkJCQlmaWZvKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCXJpbmctPnN0YXRzLnByZXZfcnhfZnJtcyA9IHJpbmctPnN0YXRzLnJ4X2ZybXM7CisJCXJpbmctPmxhc3Rfc3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qIENoZWNrIGV2ZXJ5IDEgbWlsbGkgc2Vjb25kICovCisJbW9kX3RpbWVyKCZ2ZGV2LT52cF9sb2NrdXBfdGltZXIsIGppZmZpZXMgKyBIWiAvIDEwMDApOworfQorCisvKioKKyAqIHZ4Z2Vfb3BlbgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvcGVuIGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuIEl0IG1haW5seSBjYWxscyBhCisgKiBmdW5jdGlvbiB0byBhbGxvY2F0ZSBSeCBidWZmZXJzIGFuZCBpbnNlcnRzIHRoZW0gaW50byB0aGUgYnVmZmVyCisgKiBkZXNjcmlwdG9ycyBhbmQgdGhlbiBlbmFibGVzIHRoZSBSeCBwYXJ0IG9mIHRoZSBOSUMuCisgKiBSZXR1cm4gdmFsdWU6ICcwJyBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSAoLSl2ZSBpbnRlZ2VyIGFzCisgKiBkZWZpbmVkIGluIGVycm5vLmggZmlsZSBvbiBmYWlsdXJlLgorICovCitpbnQKK3Z4Z2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwl1NjQgdmFsNjQsIGZ1bmN0aW9uX21vZGU7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCIsIGRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopIHBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKwlmdW5jdGlvbl9tb2RlID0gdmRldi0+Y29uZmlnLmRldmljZV9od19pbmZvLmZ1bmN0aW9uX21vZGU7CisKKwkvKiBtYWtlIHN1cmUgeW91IGhhdmUgbGluayBvZmYgYnkgZGVmYXVsdCBldmVyeSB0aW1lIE5pYyBpcworCSAqIGluaXRpYWxpemVkICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCS8qIENoZWNrIGZvciBhbm90aGVyIGRldmljZSBhbHJlYWR5IG9wbiB3aXRoIElOVEEgKi8KKwlpZiAoKGZ1bmN0aW9uX21vZGUgPT0gVlhHRV9IV19GVU5DVElPTl9NT0RFX01VTFRJX0ZVTkNUSU9OKSAmJgorCQl0ZXN0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJmRyaXZlcl9jb25maWctPmludGFfZGV2X29wZW4pKSB7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBvdXQwOworCX0KKworCS8qIE9wZW4gVlBBVEhzICovCisJc3RhdHVzID0gdnhnZV9vcGVuX3ZwYXRocyh2ZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBmYXRhbDogVnBhdGggb3BlbiBmYWlsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDA7CisJfQorCisJdmRldi0+bXR1ID0gZGV2LT5tdHU7CisKKwlzdGF0dXMgPSB2eGdlX2FkZF9pc3IodmRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogZmF0YWw6IElTUiBhZGQgZmFpbGVkIiwgZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIG91dDE7CisJfQorCisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSAhPSBNU0lfWCkgeworCQluZXRpZl9uYXBpX2FkZChkZXYsICZ2ZGV2LT5uYXBpLCB2eGdlX3BvbGxfaW50YSwKKwkJCXZkZXYtPmNvbmZpZy5uYXBpX3dlaWdodCk7CisJCW5hcGlfZW5hYmxlKCZ2ZGV2LT5uYXBpKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSwKKwkJCSAgICB2eGdlX3BvbGxfbXNpeCwgdmRldi0+Y29uZmlnLm5hcGlfd2VpZ2h0KTsKKwkJCW5hcGlfZW5hYmxlKCZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpKTsKKwkJfQorCX0KKworCS8qIGNvbmZpZ3VyZSBSVEggKi8KKwlpZiAodmRldi0+Y29uZmlnLnJ0aF9zdGVlcmluZykgeworCQlzdGF0dXMgPSB2eGdlX3J0aF9jb25maWd1cmUodmRldik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogZmF0YWw6IFJUSCBjb25maWd1cmF0aW9uIGZhaWxlZCIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0MjsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCS8qIHNldCBpbml0aWFsIG10dSBiZWZvcmUgZW5hYmxpbmcgdGhlIGRldmljZSAqLworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX210dV9zZXQodmRldi0+dnBhdGhzW2ldLmhhbmRsZSwKKwkJCQkJCXZkZXYtPm10dSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogZmF0YWw6IGNhbiBub3Qgc2V0IG5ldyBNVFUiLCBkZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQyOworCQl9CisJfQorCisJVlhHRV9ERVZJQ0VfREVCVUdfTEVWRUxfU0VUKFZYR0VfVFJBQ0UsIFZYR0VfQ09NUE9ORU5UX0xMLCB2ZGV2KTsKKwl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczogTVRVIGlzICVkIiwgdmRldi0+bmRldi0+bmFtZSwgdmRldi0+bXR1KTsKKwlWWEdFX0RFVklDRV9ERUJVR19MRVZFTF9TRVQoVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0xMLCB2ZGV2KTsKKworCS8qIFJlcHJvZ3JhbSB0aGUgREEgdGFibGUgd2l0aCBwb3B1bGF0ZWQgbWFjIGFkZHJlc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcigmdmRldi0+dnBhdGhzW2ldKTsKKwkJdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSgmdmRldi0+dnBhdGhzW2ldKTsKKwl9CisKKwkvKiBFbmFibGUgdnBhdGggdG8gc25pZmYgYWxsIHVuaWNhc3QvbXVsdGljYXN0IHRyYWZmaWMgdGhhdCBub3QKKwkgKiBhZGRyZXNzZWQgdG8gdGhlbS4gV2UgYWxsb3cgcHJvbWlzY291cyBtb2RlIGZvciBQRiBvbmx5CisJICovCisKKwl2YWw2NCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykKKwkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19BVVRIT1JJWkVfQUxMX0FERFJfVlAoaSk7CisKKwl2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCisJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCTAsCisJCSh1bG9uZylvZmZzZXRvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJcnhtYWNfYXV0aG9yaXplX2FsbF9hZGRyKSwKKwkJdmFsNjQpOworCisJdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkwLAorCQkodWxvbmcpb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCXJ4bWFjX2F1dGhvcml6ZV9hbGxfdmlkKSwKKwkJdmFsNjQpOworCisJdnhnZV9zZXRfbXVsdGljYXN0KGRldik7CisKKwkvKiBFbmFibGluZyBCY2FzdCBhbmQgbWNhc3QgZm9yIGFsbCB2cGF0aCAqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzIDogQ2FuIG5vdCBlbmFibGUgYmNhc3QgZm9yIHZwYXRoICIKKwkJCQkiaWQgJWQiLCBkZXYtPm5hbWUsIGkpOworCQlpZiAodmRldi0+Y29uZmlnLmFkZHJfbGVhcm5fZW4pIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkiJXMgOiBDYW4gbm90IGVuYWJsZSBtY2FzdCBmb3IgdnBhdGggIgorCQkJCQkiaWQgJWQiLCBkZXYtPm5hbWUsIGkpOworCQl9CisJfQorCisJdnhnZV9od19kZXZpY2Vfc2V0cGF1c2VfZGF0YSh2ZGV2LT5kZXZoLCAwLAorCQl2ZGV2LT5jb25maWcudHhfcGF1c2VfZW5hYmxlLAorCQl2ZGV2LT5jb25maWcucnhfcGF1c2VfZW5hYmxlKTsKKworCWlmICh2ZGV2LT52cF9yZXNldF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKQorCQl2eGdlX29zX3RpbWVyKHZkZXYtPnZwX3Jlc2V0X3RpbWVyLAorCQkJdnhnZV9wb2xsX3ZwX3Jlc2V0LCB2ZGV2LCAoSFovMikpOworCisJaWYgKHZkZXYtPnZwX2xvY2t1cF90aW1lci5mdW5jdGlvbiA9PSBOVUxMKQorCQl2eGdlX29zX3RpbWVyKHZkZXYtPnZwX2xvY2t1cF90aW1lciwKKwkJCXZ4Z2VfcG9sbF92cF9sb2NrdXAsIHZkZXYsIChIWi8yKSk7CisKKwlzZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCisJc21wX3dtYigpOworCisJaWYgKHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGVfZ2V0KHZkZXYtPmRldmgpID09IFZYR0VfSFdfTElOS19VUCkgeworCQluZXRpZl9jYXJyaWVyX29uKHZkZXYtPm5kZXYpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIFVwXG4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdmRldi0+c3RhdHMubGlua191cCsrOworCX0KKworCXZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKHZkZXYtPmRldmgpOworCisJc21wX3dtYigpOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJdnhnZV9od192cGF0aF9lbmFibGUodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCXNtcF93bWIoKTsKKwkJdnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCX0KKworCXZ4Z2Vfc3RhcnRfYWxsX3R4X3F1ZXVlKHZkZXYpOworCWdvdG8gb3V0MDsKKworb3V0MjoKKwl2eGdlX3JlbV9pc3IodmRldik7CisKKwkvKiBEaXNhYmxlIG5hcGkgKi8KKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSAhPSBNU0lfWCkKKwkJbmFwaV9kaXNhYmxlKCZ2ZGV2LT5uYXBpKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQluYXBpX2Rpc2FibGUoJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGkpOworCX0KKworb3V0MToKKwl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAwKTsKK291dDA6CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIHJldDsKK30KKworLyogTG9vcCB0aHJvdWdodCB0aGUgbWFjIGFkZHJlc3MgbGlzdCBhbmQgZGVsZXRlIGFsbCB0aGUgZW50cmllcyAqLwordm9pZCB2eGdlX2ZyZWVfbWFjX2FkZF9saXN0KHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKK3sKKworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKwlpZiAobGlzdF9lbXB0eSgmdnBhdGgtPm1hY19hZGRyX2xpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkgeworCQlsaXN0X2RlbChlbnRyeSk7CisJCWtmcmVlKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB2eGdlX25hcGlfZGVsX2FsbChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSAhPSBNU0lfWCkKKwkJbmV0aWZfbmFwaV9kZWwoJnZkZXYtPm5hcGkpOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCW5ldGlmX25hcGlfZGVsKCZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpKTsKKwl9CisJcmV0dXJuOworfQorCitpbnQgZG9fdnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZG9faW8pCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCWludCBpOworCXU2NCB2YWw2NCwgdnBhdGhfdmVjdG9yOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwkvKiBJZiB2eGdlX2hhbmRsZV9jcml0X2VyciB0YXNrIGlzIGV4ZWN1dGluZywKKwkgKiB3YWl0IHRpbGwgaXQgY29tcGxldGVzLiAqLworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpKQorCQltc2xlZXAoNTApOworCisJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCWlmIChkb19pbykgeworCQkvKiBQdXQgdGhlIHZwYXRoIGJhY2sgaW4gbm9ybWFsIG1vZGUgKi8KKwkJdnBhdGhfdmVjdG9yID0gdnhnZV9tQklUKHZkZXYtPnZwYXRoc1swXS5kZXZpY2VfaWQpOworCQlzdGF0dXMgPSB2eGdlX2h3X21nbXRfcmVnX3JlYWQodmRldi0+ZGV2aCwKKwkJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkJCTAsCisJCQkJKHVsb25nKW9mZnNldG9mKAorCQkJCQlzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJCQlydHNfbWdyX2NiYXNpbl9jZmcpLAorCQkJCSZ2YWw2NCk7CisKKwkJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCQl2YWw2NCAmPSB+dnBhdGhfdmVjdG9yOworCQkJc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCQkJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkJCQkwLAorCQkJCQkodWxvbmcpb2Zmc2V0b2YoCisJCQkJCQlzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJCQkJcnRzX21ncl9jYmFzaW5fY2ZnKSwKKwkJCQkJdmFsNjQpOworCQl9CisKKwkJLyogUmVtb3ZlIHRoZSBmdW5jdGlvbiAwIGZyb20gcHJvbWlzY291cyBtb2RlICovCisJCXZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCQkwLAorCQkJKHVsb25nKW9mZnNldG9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQkJcnhtYWNfYXV0aG9yaXplX2FsbF9hZGRyKSwKKwkJCTApOworCisJCXZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW0sCisJCQkwLAorCQkJKHVsb25nKW9mZnNldG9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQkJcnhtYWNfYXV0aG9yaXplX2FsbF92aWQpLAorCQkJMCk7CisKKwkJc21wX3dtYigpOworCX0KKwlkZWxfdGltZXJfc3luYygmdmRldi0+dnBfbG9ja3VwX3RpbWVyKTsKKworCWRlbF90aW1lcl9zeW5jKCZ2ZGV2LT52cF9yZXNldF90aW1lcik7CisKKwkvKiBEaXNhYmxlIG5hcGkgKi8KKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSAhPSBNU0lfWCkKKwkJbmFwaV9kaXNhYmxlKCZ2ZGV2LT5uYXBpKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQluYXBpX2Rpc2FibGUoJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGkpOworCX0KKworCW5ldGlmX2NhcnJpZXJfb2ZmKHZkZXYtPm5kZXYpOworCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgRG93blxuIiwgdmRldi0+bmRldi0+bmFtZSk7CisJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKworCS8qIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50IHhtaXQoKSBpcyBzdG9wcGVkIGJ5IHVwcGVyIGxheWVyICovCisJaWYgKGRvX2lvKQorCQl2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUodmRldi0+ZGV2aCk7CisKKwltZGVsYXkoMTAwMCk7CisKKwl2eGdlX3JlbV9pc3IodmRldik7CisKKwl2eGdlX25hcGlfZGVsX2FsbCh2ZGV2KTsKKworCWlmIChkb19pbykKKwkJdnhnZV9yZXNldF9hbGxfdnBhdGhzKHZkZXYpOworCisJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMCk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwgZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmZHJpdmVyX2NvbmZpZy0+aW50YV9kZXZfb3Blbik7CisJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9jbG9zZQorICogQGRldjogZGV2aWNlIHBvaW50ZXIuCisgKgorICogVGhpcyBpcyB0aGUgc3RvcCBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLiBJdCBuZWVkcyB0byB1bmRvIGV4YWN0bHkKKyAqIHdoYXRldmVyIHdhcyBkb25lIGJ5IHRoZSBvcGVuIGVudHJ5IHBvaW50LCB0aHVzIGl0J3MgdXN1YWxseSByZWZlcnJlZCB0bworICogYXMgdGhlIGNsb3NlIGZ1bmN0aW9uLkFtb25nIG90aGVyIHRoaW5ncyB0aGlzIGZ1bmN0aW9uIG1haW5seSBzdG9wcyB0aGUKKyAqIFJ4IHNpZGUgb2YgdGhlIE5JQyBhbmQgZnJlZXMgYWxsIHRoZSBSeCBidWZmZXJzIGluIHRoZSBSeCByaW5ncy4KKyAqIFJldHVybiB2YWx1ZTogJzAnIG9uIHN1Y2Nlc3MgYW5kIGFuIGFwcHJvcHJpYXRlICgtKXZlIGludGVnZXIgYXMKKyAqIGRlZmluZWQgaW4gZXJybm8uaCBmaWxlIG9uIGZhaWx1cmUuCisgKi8KK2ludAordnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRvX3Z4Z2VfY2xvc2UoZGV2LCAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2NoYW5nZV9tdHUKKyAqIEBkZXY6IG5ldCBkZXZpY2UgcG9pbnRlci4KKyAqIEBuZXdfbXR1IDp0aGUgbmV3IE1UVSBzaXplIGZvciB0aGUgZGV2aWNlLgorICoKKyAqIEEgZHJpdmVyIGVudHJ5IHBvaW50IHRvIGNoYW5nZSBNVFUgc2l6ZSBmb3IgdGhlIGRldmljZS4gQmVmb3JlIGNoYW5naW5nCisgKiB0aGUgTVRVIHRoZSBkZXZpY2UgbXVzdCBiZSBzdG9wcGVkLgorICovCitzdGF0aWMgaW50IHZ4Z2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IG5ldGRldl9wcml2KGRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlpZiAoKG5ld19tdHUgPCBWWEdFX0hXX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gVlhHRV9IV19NQVhfTVRVKSkgeworCQl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfZXJyLAorCQkJIiVzOiBtdHUgc2l6ZSBpcyBpbnZhbGlkIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKiBjaGVjayBpZiBkZXZpY2UgaXMgZG93biBhbHJlYWR5ICovCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKSB7CisJCS8qIGp1c3Qgc3RvcmUgbmV3IHZhbHVlLCB3aWxsIHVzZSBsYXRlciBvbiBvcGVuKCkgKi8KKwkJZGV2LT5tdHUgPSBuZXdfbXR1OworCQl2eGdlX2RlYnVnX2luaXQodmRldi0+bGV2ZWxfZXJyLAorCQkJIiVzIiwgImRldmljZSBpcyBkb3duIG9uIE1UVSBjaGFuZ2UiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkidHJ5aW5nIHRvIGFwcGx5IG5ldyBNVFUgJWQiLCBuZXdfbXR1KTsKKworCWlmICh2eGdlX2Nsb3NlKGRldikpCisJCXJldHVybiAtRUlPOworCisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXZkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAodnhnZV9vcGVuKGRldikpCisJCXJldHVybiAtRUlPOworCisJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6IE1UVSBjaGFuZ2VkIHRvICVkIiwgdmRldi0+bmRldi0+bmFtZSwgbmV3X210dSk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfZ2V0X3N0YXRzCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVXBkYXRlcyB0aGUgZGV2aWNlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGRldmljZQorICogc3RhdGlzdGljcyBzdHJ1Y3R1cmUgaW4gdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlIGFuZCByZXR1cm5zIGEgcG9pbnRlcgorICogdG8gdGhlIHNhbWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCit2eGdlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfc3RhdHM7CisJaW50IGs7CisKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldF9zdGF0cyA9ICZ2ZGV2LT5zdGF0cy5uZXRfc3RhdHM7CisKKwltZW1zZXQobmV0X3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5ub19vZl92cGF0aDsgaysrKSB7CisJCW5ldF9zdGF0cy0+cnhfcGFja2V0cyArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9mcm1zOworCQluZXRfc3RhdHMtPnJ4X2J5dGVzICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2J5dGVzOworCQluZXRfc3RhdHMtPnJ4X2Vycm9ycyArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9lcnJvcnM7CisJCW5ldF9zdGF0cy0+bXVsdGljYXN0ICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X21jYXN0OworCQluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgKz0KKwkJCXZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnJ4X2Ryb3BwZWQ7CisKKwkJbmV0X3N0YXRzLT50eF9wYWNrZXRzICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2ZybXM7CisJCW5ldF9zdGF0cy0+dHhfYnl0ZXMgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfYnl0ZXM7CisJCW5ldF9zdGF0cy0+dHhfZXJyb3JzICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2Vycm9yczsKKwl9CisKKwlyZXR1cm4gbmV0X3N0YXRzOworfQorCisvKioKKyAqIHZ4Z2VfaW9jdGwKKyAqIEBkZXY6IERldmljZSBwb2ludGVyLgorICogQGlmcjogQW4gSU9DVEwgc3BlY2lmaWMgc3RydWN0dXJlLCB0aGF0IGNhbiBjb250YWluIGEgcG9pbnRlciB0bworICogICAgICAgYSBwcm9wcmlldGFyeSBzdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIHRvIHRoZSBkcml2ZXIuCisgKiBAY21kOiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbW1hbmRzIHRoYXQKKyAqICAgICAgIGNhbiBiZSBwYXNzZWQgdG8gdGhlIElPQ1RMIGZ1bmN0aW9ucy4KKyAqCisgKiBFbnRyeSBwb2ludCBmb3IgdGhlIElvY3RsLgorICovCitzdGF0aWMgaW50IHZ4Z2VfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKy8qKgorICogdnhnZV90eF93YXRjaGRvZworICogQGRldjogcG9pbnRlciB0byBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFdhdGNoZG9nIGZvciB0cmFuc21pdCBzaWRlLgorICogVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgaWYgdGhlIFR4IFF1ZXVlIGlzIHN0b3BwZWQKKyAqIGZvciBhIHByZS1kZWZpbmVkIGFtb3VudCBvZiB0aW1lIHdoZW4gdGhlIEludGVyZmFjZSBpcyBzdGlsbCB1cC4KKyAqLworc3RhdGljIHZvaWQKK3Z4Z2VfdHhfd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZkZXYtPmNyaWNfZXJyX2V2ZW50ID0gVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDsKKworCXZ4Z2VfcmVzZXQodmRldik7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoqCisgKiB2eGdlX3ZsYW5fcnhfcmVnaXN0ZXIKKyAqIEBkZXY6IG5ldCBkZXZpY2UgcG9pbnRlci4KKyAqIEBncnA6IHZsYW4gZ3JvdXAKKyAqCisgKiBWbGFuIGdyb3VwIHJlZ2lzdHJhdGlvbgorICovCitzdGF0aWMgdm9pZAordnhnZV92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCWludCB2cDsKKwl1NjQgdmlkOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJdnBhdGggPSAmdmRldi0+dnBhdGhzWzBdOworCWlmICgoTlVMTCA9PSBncnApICYmICh2cGF0aC0+aXNfb3BlbikpIHsKKwkJLyogR2V0IHRoZSBmaXJzdCB2bGFuICovCisJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfdmlkX2dldCh2cGF0aC0+aGFuZGxlLCAmdmlkKTsKKworCQl3aGlsZSAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKworCQkJLyogRGVsZXRlIHRoaXMgdmxhbiBmcm9tIHRoZSB2aWQgdGFibGUgKi8KKwkJCWZvciAodnAgPSAwOyB2cCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cCsrKSB7CisJCQkJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwXTsKKwkJCQlpZiAoIXZwYXRoLT5pc19vcGVuKQorCQkJCQljb250aW51ZTsKKworCQkJCXZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSh2cGF0aC0+aGFuZGxlLCB2aWQpOworCQkJfQorCisJCQkvKiBHZXQgdGhlIG5leHQgdmxhbiB0byBiZSBkZWxldGVkICovCisJCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbMF07CisJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQodnBhdGgtPmhhbmRsZSwgJnZpZCk7CisJCX0KKwl9CisKKwl2ZGV2LT52bGdycCA9IGdycDsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCWlmICh2ZGV2LT52cGF0aHNbaV0uaXNfY29uZmlndXJlZCkKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnZsZ3JwID0gZ3JwOworCX0KKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogdnhnZV92bGFuX3J4X2FkZF92aWQKKyAqIEBkZXY6IG5ldCBkZXZpY2UgcG9pbnRlci4KKyAqIEB2aWQ6IHZpZAorICoKKyAqIEFkZCB0aGUgdmxhbiBpZCB0byB0aGUgZGV2aWNlcyB2bGFuIGlkIHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCWludCB2cF9pZDsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJLyogQWRkIHRoZXNlIHZsYW4gdG8gdGhlIHZpZCB0YWJsZSAqLworCWZvciAodnBfaWQgPSAwOyB2cF9pZCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cF9pZCsrKSB7CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cF9pZF07CisJCWlmICghdnBhdGgtPmlzX29wZW4pCisJCQljb250aW51ZTsKKwkJdnhnZV9od192cGF0aF92aWRfYWRkKHZwYXRoLT5oYW5kbGUsIHZpZCk7CisJfQorfQorCisvKioKKyAqIHZ4Z2Vfdmxhbl9yeF9hZGRfdmlkCisgKiBAZGV2OiBuZXQgZGV2aWNlIHBvaW50ZXIuCisgKiBAdmlkOiB2aWQKKyAqCisgKiBSZW1vdmUgdGhlIHZsYW4gaWQgZnJvbSB0aGUgZGV2aWNlJ3MgdmxhbiBpZCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordnhnZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGg7CisJaW50IHZwX2lkOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJdmxhbl9ncm91cF9zZXRfZGV2aWNlKHZkZXYtPnZsZ3JwLCB2aWQsIE5VTEwpOworCisJLyogRGVsZXRlIHRoaXMgdmxhbiBmcm9tIHRoZSB2aWQgdGFibGUgKi8KKwlmb3IgKHZwX2lkID0gMDsgdnBfaWQgPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBfaWQrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBfaWRdOworCQlpZiAoIXZwYXRoLT5pc19vcGVuKQorCQkJY29udGludWU7CisJCXZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSh2cGF0aC0+aGFuZGxlLCB2aWQpOworCX0KKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ4Z2VfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IHZ4Z2Vfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICAgICA9IHZ4Z2VfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMgICAgICAgICAgPSB2eGdlX2dldF9zdGF0cywKKwkubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IHZ4Z2VfeG1pdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgICAgICA9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdnhnZV9zZXRfbXVsdGljYXN0LAorCisJLm5kb19kb19pb2N0bCAgICAgICAgICAgPSB2eGdlX2lvY3RsLAorCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSB2eGdlX3NldF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUgICAgICAgICA9IHZ4Z2VfY2hhbmdlX210dSwKKwkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIgICA9IHZ4Z2Vfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQgICA9IHZ4Z2Vfdmxhbl9yeF9raWxsX3ZpZCwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IHZ4Z2Vfdmxhbl9yeF9hZGRfdmlkLAorCisJLm5kb190eF90aW1lb3V0ICAgICAgICAgPSB2eGdlX3R4X3dhdGNoZG9nLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgICAgPSB2eGdlX25ldHBvbGwsCisjZW5kaWYKK307CisKK2ludCBfX2RldmluaXQgdnhnZV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJCSAgIHN0cnVjdCB2eGdlX2NvbmZpZyAqY29uZmlnLAorCQkJCSAgIGludCBoaWdoX2RtYSwgaW50IG5vX29mX3ZwYXRoLAorCQkJCSAgIHN0cnVjdCB2eGdlZGV2ICoqdmRldl9vdXQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCWludCBpLCByZXQgPSAwLCBub19vZl9xdWV1ZSA9IDE7CisJdTY0IHN0YXQ7CisKKwkqdmRldl9vdXQgPSBOVUxMOworCWlmIChjb25maWctPnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKQorCQlub19vZl9xdWV1ZSA9IG5vX29mX3ZwYXRoOworCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgdnhnZWRldiksCisJCQlub19vZl9xdWV1ZSk7CisJaWYgKG5kZXYgPT0gTlVMTCkgeworCQl2eGdlX2RlYnVnX2luaXQoCisJCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkiJXMgOiBkZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX291dDA7CisJfQorCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoCisJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCSIlczogJXM6JWQgIEVudGVyaW5nLi4uIiwKKwkJbmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwltZW1zZXQodmRldiwgMCwgc2l6ZW9mKHN0cnVjdCB2eGdlZGV2KSk7CisKKwl2ZGV2LT5uZGV2ID0gbmRldjsKKwl2ZGV2LT5kZXZoID0gaGxkZXY7CisJdmRldi0+cGRldiA9IGhsZGV2LT5wZGV2OworCW1lbWNweSgmdmRldi0+Y29uZmlnLCBjb25maWcsIHNpemVvZihzdHJ1Y3QgdnhnZV9jb25maWcpKTsKKwl2ZGV2LT5yeF9jc3VtID0gMTsJLyogRW5hYmxlIFJ4IENTVU0gYnkgZGVmYXVsdC4gKi8KKworCVNFVF9ORVRERVZfREVWKG5kZXYsICZ2ZGV2LT5wZGV2LT5kZXYpOworCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCQlORVRJRl9GX0hXX1ZMQU5fRklMVEVSOworCS8qICBEcml2ZXIgZW50cnkgcG9pbnRzICovCisJbmRldi0+aXJxID0gdmRldi0+cGRldi0+aXJxOworCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSBobGRldi0+YmFyMDsKKworCW5kZXYtPm5ldGRldl9vcHMgPSAmdnhnZV9uZXRkZXZfb3BzOworCisJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBWWEdFX0xMX1dBVENIX0RPR19USU1FT1VUOworCisJaW5pdGlhbGl6ZV9ldGh0b29sX29wcyhuZGV2KTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdnBhdGggKi8KKwl2ZGV2LT52cGF0aHMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IHZ4Z2VfdnBhdGgpKSAqCisJCQkJbm9fb2ZfdnBhdGgsIEdGUF9LRVJORUwpOworCWlmICghdmRldi0+dnBhdGhzKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogdnBhdGggbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9vdXQxOworCX0KKworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJdnhnZV9kZWJ1Z19pbml0KHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCSIlcyA6IGNoZWNrc3VtaW5nIGVuYWJsZWQiLCBfX2Z1bmNfXyk7CisKKwlpZiAoaGlnaF9kbWEpIHsKKwkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJCSIlcyA6IHVzaW5nIEhpZ2ggRE1BIiwgX19mdW5jX18pOworCX0KKworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082OworCisJaWYgKHZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlKQorCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9NVUxUSVFfU1RFRVJJTkcpCisJCW5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IG5vX29mX3ZwYXRoOworCisjaWZkZWYgTkVUSUZfRl9MTFRYCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MTFRYOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgbm9fb2ZfdnBhdGg7IGkrKykKKwkJc3Bpbl9sb2NrX2luaXQoJnZkZXYtPnZwYXRoc1tpXS5maWZvLnR4X2xvY2spOworCisJaWYgKHJlZ2lzdGVyX25ldGRldihuZGV2KSkgeworCQl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJCSIlczogJXMgOiBkZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZCEiLAorCQkJbmRldi0+bmFtZSwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9vdXQyOworCX0KKworCS8qICBTZXQgdGhlIGZhY3RvcnkgZGVmaW5lZCBNQUMgYWRkcmVzcyBpbml0aWFsbHkgKi8KKwluZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOworCisJLyogTWFrZSBMaW5rIHN0YXRlIGFzIG9mZiBhdCB0aGlzIHBvaW50LCB3aGVuIHRoZSBMaW5rIGNoYW5nZQorCSAqIGludGVycnVwdCBjb21lcyB0aGUgc3RhdGUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNoYW5nZWQgdG8KKwkgKiB0aGUgcmlnaHQgc3RhdGUuCisJICovCisJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisKKwl2eGdlX2RlYnVnX2luaXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJIiVzOiBFdGhlcm5ldCBkZXZpY2UgcmVnaXN0ZXJlZCIsCisJCW5kZXYtPm5hbWUpOworCisJKnZkZXZfb3V0ID0gdmRldjsKKworCS8qIFJlc2V0dGluZyB0aGUgRGV2aWNlIHN0YXRzICovCisJc3RhdHVzID0gdnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzKAorCQkJCWhsZGV2LAorCQkJCVZYR0VfSFdfU1RBVFNfT1BfQ0xFQVJfQUxMX1NUQVRTLAorCQkJCTAsCisJCQkJMCwKKwkJCQkmc3RhdCk7CisKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTikKKwkJdnhnZV9kZWJ1Z19pbml0KAorCQkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJCSIlczogZGV2aWNlIHN0YXRzIGNsZWFyIHJldHVybnMiCisJCQkiVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OIiwgbmRldi0+bmFtZSk7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJbmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiByZXQ7Citfb3V0MjoKKwlrZnJlZSh2ZGV2LT52cGF0aHMpOworX291dDE6CisJZnJlZV9uZXRkZXYobmRldik7Citfb3V0MDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdnhnZV9kZXZpY2VfdW5yZWdpc3RlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB1bnJlZ2lzdGVyIGFuZCBmcmVlIG5ldHdvcmsgZGV2aWNlCisgKi8KK3ZvaWQKK3Z4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJY2hhciBidWZbSUZOQU1TSVpdOworI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCisJKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKKwl1MzIgbGV2ZWxfdHJhY2U7CisjZW5kaWYKKworCWRldiA9IGhsZGV2LT5uZGV2OworCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCisJKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKKwlsZXZlbF90cmFjZSA9IHZkZXYtPmxldmVsX3RyYWNlOworI2VuZGlmCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCisJCSIlczogJXM6JWQiLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJbWVtY3B5KGJ1ZiwgdmRldi0+bmRldi0+bmFtZSwgSUZOQU1TSVopOworCisJLyogaW4gMi42IHdpbGwgY2FsbCBzdG9wKCkgaWYgZGV2aWNlIGlzIHVwICovCisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwl2eGdlX2RlYnVnX2luaXQobGV2ZWxfdHJhY2UsICIlczogZXRoZXJuZXQgZGV2aWNlIHVucmVnaXN0ZXJlZCIsIGJ1Zik7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCisJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLCBidWYsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qCisgKiB2eGdlX2NhbGxiYWNrX2NyaXRfZXJyCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGFsYXJtIGhhbmRsZXIgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiBEcml2ZXIgbXVzdCBhbmFseXplIGl0IGJhc2VkIG9uIHRoZSBldmVudCB0eXBlLgorICovCitzdGF0aWMgdm9pZAordnhnZV9jYWxsYmFja19jcml0X2VycihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQllbnVtIHZ4Z2VfaHdfZXZlbnQgdHlwZSwgdTY0IHZwX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBobGRldi0+bmRldjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaW50IHZwYXRoX2lkeDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6ICVzOiVkIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCS8qIE5vdGU6IFRoaXMgZXZlbnQgdHlwZSBzaG91bGQgYmUgdXNlZCBmb3IgZGV2aWNlIHdpZGUKKwkgKiBpbmRpY2F0aW9ucyBvbmx5IC0gU2VyaW91cyBlcnJvcnMsIFNsb3QgZnJlZXplIGFuZCBjcml0aWNhbCBlcnJvcnMKKwkgKi8KKwl2ZGV2LT5jcmljX2Vycl9ldmVudCA9IHR5cGU7CisKKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykKKwkJaWYgKHZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdLmRldmljZV9pZCA9PSB2cF9pZCkKKwkJCWJyZWFrOworCisJaWYgKCF0ZXN0X2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKSkgeworCQlpZiAodHlwZSA9PSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBTbG90IGlzIGZyb3plbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQl9IGVsc2UgaWYgKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9TRVJSKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBFbmNvdW50ZXJlZCBTZXJpb3VzIEVycm9yIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmICh0eXBlID09IFZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSKQorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogRW5jb3VudGVyZWQgQ3JpdGljYWwgRXJyb3IiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCX0KKworCWlmICgodHlwZSA9PSBWWEdFX0hXX0VWRU5UX1NFUlIpIHx8CisJCSh0eXBlID09IFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpKSB7CisJCWlmICh1bmxpa2VseSh2ZGV2LT5leGVjX21vZGUpKQorCQkJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCX0gZWxzZSBpZiAodHlwZSA9PSBWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUikgeworCQl2eGdlX2h3X2RldmljZV9tYXNrX2FsbChobGRldik7CisJCWlmICh1bmxpa2VseSh2ZGV2LT5leGVjX21vZGUpKQorCQkJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCX0gZWxzZSBpZiAoKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9GSUZPX0VSUikgfHwKKwkJICAodHlwZSA9PSBWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUikpIHsKKworCQlpZiAodW5saWtlbHkodmRldi0+ZXhlY19tb2RlKSkKKwkJCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKwkJZWxzZSB7CisJCQkvKiBjaGVjayBpZiB0aGlzIHZwYXRoIGlzIGFscmVhZHkgc2V0IGZvciByZXNldCAqLworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KHZwYXRoX2lkeCwgJnZkZXYtPnZwX3Jlc2V0KSkgeworCisJCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGlzIHZwYXRoICovCisJCQkJdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUodmRldiwgdnBhdGhfaWR4KTsKKworCQkJCS8qIHN0b3AgdGhlIHF1ZXVlIGZvciB0aGlzIHZwYXRoICovCisJCQkJdnhnZV9zdG9wX3R4X3F1ZXVlKCZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XS4KKwkJCQkJCQlmaWZvKTsKKwkJCX0KKwkJfQorCX0KKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIHZvaWQgdmVyaWZ5X2JhbmR3aWR0aCh2b2lkKQoreworCWludCBpLCBiYW5kX3dpZHRoLCB0b3RhbCA9IDAsIGVxdWFsX3ByaW9yaXR5ID0gMDsKKworCS8qIDEuIElmIHVzZXIgZW50ZXJzIDAgZm9yIHNvbWUgZmlmbywgZ2l2ZSBlcXVhbCBwcmlvcml0eSB0byBhbGwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWlmIChid19wZXJjZW50YWdlW2ldID09IDApIHsKKwkJCWVxdWFsX3ByaW9yaXR5ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFlcXVhbF9wcmlvcml0eSkgeworCQkvKiAyLiBJZiBzdW0gZXhjZWVkcyAxMDAsIGdpdmUgZXF1YWwgcHJpb3JpdHkgdG8gYWxsICovCisJCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJCWlmIChid19wZXJjZW50YWdlW2ldID09IDB4RkYpCisJCQkJYnJlYWs7CisKKwkJCXRvdGFsICs9IGJ3X3BlcmNlbnRhZ2VbaV07CisJCQlpZiAodG90YWwgPiBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVgpIHsKKwkJCQllcXVhbF9wcmlvcml0eSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWVxdWFsX3ByaW9yaXR5KSB7CisJCS8qIElzIGFsbCB0aGUgYmFuZHdpZHRoIGNvbnN1bWVkPyAqLworCQlpZiAodG90YWwgPCBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVgpIHsKKwkJCWlmIChpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUykgeworCQkJCS8qIFNwbGl0IHJlc3Qgb2YgYncgZXF1YWxseSBhbW9uZyBuZXh0IFZQcyovCisJCQkJYmFuZF93aWR0aCA9CisJCQkJICAoVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYICAtIHRvdGFsKSAvCisJCQkJCShWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTIC0gaSk7CisJCQkJaWYgKGJhbmRfd2lkdGggPCAyKSAvKiBtaW4gb2YgMiUgKi8KKwkJCQkJZXF1YWxfcHJpb3JpdHkgPSAxOworCQkJCWVsc2UgeworCQkJCQlmb3IgKDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7CisJCQkJCQlpKyspCisJCQkJCQlid19wZXJjZW50YWdlW2ldID0KKwkJCQkJCQliYW5kX3dpZHRoOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUykKKwkJCWVxdWFsX3ByaW9yaXR5ID0gMTsKKwl9CisKKwlpZiAoZXF1YWxfcHJpb3JpdHkpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBBc3NpZ25pbmcgZXF1YWwgYmFuZHdpZHRoIHRvIGFsbCB0aGUgdnBhdGhzIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlid19wZXJjZW50YWdlWzBdID0gVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYIC8KKwkJCQkJVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsKKwkJZm9yIChpID0gMTsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykKKwkJCWJ3X3BlcmNlbnRhZ2VbaV0gPSBid19wZXJjZW50YWdlWzBdOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIFZwYXRoIGNvbmZpZ3VyYXRpb24KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgdnhnZV9jb25maWdfdnBhdGhzKAorCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZywKKwkJCXU2NCB2cGF0aF9tYXNrLCBzdHJ1Y3QgdnhnZV9jb25maWcgKmNvbmZpZ19wYXJhbSkKK3sKKwlpbnQgaSwgbm9fb2ZfdnBhdGhzID0gMCwgZGVmYXVsdF9ub192cGF0aCA9IDAsIHRlbXA7CisJdTMyIHR4ZGxfc2l6ZSwgdHhkbF9wZXJfbWVtYmxvY2s7CisKKwl0ZW1wID0gZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldjsKKwlpZiAoKGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPT0gVlhHRV9VU0VfREVGQVVMVCkgJiYKKwkJKG1heF9jb25maWdfZGV2ID09IFZYR0VfTUFYX0NPTkZJR19ERVYpKSB7CisJCS8qIE5vIG1vcmUgQ1BVLiBSZXR1cm4gdnBhdGggbnVtYmVyIGFzIHplcm8uKi8KKwkJaWYgKGRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA9PSAtMSkKKwkJCXJldHVybiAwOworCisJCWlmICghZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzKQorCQkJZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID0gbnVtX29ubGluZV9jcHVzKCk7CisKKwkJZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9IGRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA+PiAxOworCQlpZiAoIWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYpCisJCQlkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID0gMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKQorCQkJaWYgKCF2eGdlX2JWQUxuKHZwYXRoX21hc2ssIGksIDEpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZQorCQkJCWRlZmF1bHRfbm9fdnBhdGgrKzsKKwkJaWYgKGRlZmF1bHRfbm9fdnBhdGggPCBkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2KQorCQkJZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9IGRlZmF1bHRfbm9fdnBhdGg7CisKKwkJZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID0gZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzIC0KKwkJCQkoZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiAqIDIpOworCQlpZiAoZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzIDw9IDApCisJCQlkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPSAtMTsKKwl9CisKKwlpZiAoZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9PSAxKSB7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXM6IERpc2FibGUgdHggYW5kIHJ4IHN0ZWVyaW5nLCAiCisJCQkiYXMgc2luZ2xlIHZwYXRoIGlzIGNvbmZpZ3VyZWQiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJY29uZmlnX3BhcmFtLT5ydGhfc3RlZXJpbmcgPSBOT19TVEVFUklORzsKKwkJY29uZmlnX3BhcmFtLT50eF9zdGVlcmluZ190eXBlID0gTk9fU1RFRVJJTkc7CisJCWRldmljZV9jb25maWctPnJ0aF9lbiA9IDA7CisJfQorCisJLyogY29uZmlndXJlIGJhbmR3aWR0aCAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoID0gYndfcGVyY2VudGFnZVtpXTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnZwX2lkID0gaTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLm10dSA9IFZYR0VfSFdfREVGQVVMVF9NVFU7CisJCWlmIChub19vZl92cGF0aHMgPCBkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2KSB7CisJCQlpZiAoIXZ4Z2VfYlZBTG4odnBhdGhfbWFzaywgaSwgMSkpIHsKKwkJCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJCQkiJXM6IHZwYXRoOiAlZCBpcyBub3QgYXZhaWxhYmxlIiwKKwkJCQkJVlhHRV9EUklWRVJfTkFNRSwgaSk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkJCSIlczogdnBhdGg6ICVkIGF2YWlsYWJsZSIsCisJCQkJCVZYR0VfRFJJVkVSX05BTUUsIGkpOworCQkJCW5vX29mX3ZwYXRocysrOworCQkJfQorCQl9IGVsc2UgeworCQkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCQkiJXM6IHZwYXRoOiAlZCBpcyBub3QgY29uZmlndXJlZCwgIgorCQkJCSJtYXhfY29uZmlnX3ZwYXRoIGV4Y2VlZGVkIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FLCBpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ29uZmlndXJlIFR4IGZpZm8ncyAqLworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5lbmFibGUgPQorCQkJCQkJVlhHRV9IV19GSUZPX0VOQUJMRTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8ubWF4X2ZyYWdzID0KKwkJCQlNQVhfU0tCX0ZSQUdTOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5tZW1ibG9ja19zaXplID0KKwkJCVZYR0VfSFdfTUlOX0ZJRk9fTUVNQkxPQ0tfU0laRTsKKworCQl0eGRsX3NpemUgPSBNQVhfU0tCX0ZSQUdTICogc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkKTsKKwkJdHhkbF9wZXJfbWVtYmxvY2sgPSBWWEdFX0hXX01JTl9GSUZPX01FTUJMT0NLX1NJWkUgLyB0eGRsX3NpemU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZmlmb19ibG9ja3MgPQorCQkJKChWWEdFX0RFRl9GSUZPX0xFTkdUSCAtIDEpIC8gdHhkbF9wZXJfbWVtYmxvY2spICsgMTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5pbnRyID0KKwkJCQlWWEdFX0hXX0ZJRk9fUVVFVUVfSU5UUl9ESVNBQkxFOworCisJCS8qIENvbmZpZ3VyZSB0dGkgcHJvcGVydGllcyAqLworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmludHJfZW5hYmxlID0KKwkJCQkJVlhHRV9IV19USU1fSU5UUl9FTkFCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5idGltZXJfdmFsID0KKwkJCShWWEdFX1RUSV9CVElNRVJfVkFMICogMTAwMCkgLyAyNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9hY19lbiA9CisJCQkJVlhHRV9IV19USU1fVElNRVJfQUNfRU5BQkxFOworCisJCS8qIEZvciBtc2kteCB3aXRoIG5hcGkgKGVhY2ggdmVjdG9yCisJCWhhcyBhIGhhbmRsZXIgb2YgaXRzIG93bikgLQorCQlTZXQgQ0kgdG8gT0ZGIGZvciBhbGwgdnBhdGhzICovCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfY2lfZW4gPQorCQkJVlhHRV9IV19USU1fVElNRVJfQ0lfRElTQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX3JpX2VuID0KKwkJCQlWWEdFX0hXX1RJTV9USU1FUl9SSV9ESVNBQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXRpbF9zZWwgPQorCQkJVlhHRV9IV19USU1fVVRJTF9TRUxfTEVHQUNZX1RYX05FVF9VVElMOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkubHRpbWVyX3ZhbCA9CisJCQkoVlhHRV9UVElfTFRJTUVSX1ZBTCAqIDEwMDApIC8gMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkucnRpbWVyX3ZhbCA9CisJCQkoVlhHRV9UVElfUlRJTUVSX1ZBTCAqIDEwMDApIC8gMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2EgPSBUVElfVFhfVVJBTkdFX0E7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2IgPSBUVElfVFhfVVJBTkdFX0I7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2MgPSBUVElfVFhfVVJBTkdFX0M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2EgPSBUVElfVFhfVUZDX0E7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2IgPSBUVElfVFhfVUZDX0I7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2MgPSBUVElfVFhfVUZDX0M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2QgPSBUVElfVFhfVUZDX0Q7CisKKwkJLyogQ29uZmlndXJlIFJ4IHJpbmdzICovCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLmVuYWJsZSAgPQorCQkJCQkJVlhHRV9IV19SSU5HX0VOQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5yaW5nX2Jsb2NrcyAgPQorCQkJCQkJVlhHRV9IV19ERUZfUklOR19CTE9DS1M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLmJ1ZmZlcl9tb2RlID0KKwkJCVZYR0VfSFdfUklOR19SWERfQlVGRkVSX01PREVfMTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucnhkc19saW1pdCAgPQorCQkJCVZYR0VfSFdfREVGX1JJTkdfUlhEU19MSU1JVDsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuc2NhdHRlcl9tb2RlID0KKwkJCQkJVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9BOworCisJCS8qIENvbmZpZ3VyZSBydGkgcHJvcGVydGllcyAqLworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmludHJfZW5hYmxlID0KKwkJCQkJVlhHRV9IV19USU1fSU5UUl9FTkFCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5idGltZXJfdmFsID0KKwkJCShWWEdFX1JUSV9CVElNRVJfVkFMICogMTAwMCkvMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfYWNfZW4gPQorCQkJCQkJVlhHRV9IV19USU1fVElNRVJfQUNfRU5BQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfY2lfZW4gPQorCQkJCQkJVlhHRV9IV19USU1fVElNRVJfQ0lfRElTQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX3JpX2VuID0KKwkJCQkJCVZYR0VfSFdfVElNX1RJTUVSX1JJX0RJU0FCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51dGlsX3NlbCA9CisJCQkJVlhHRV9IV19USU1fVVRJTF9TRUxfTEVHQUNZX1JYX05FVF9VVElMOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2EgPQorCQkJCQkJUlRJX1JYX1VSQU5HRV9BOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9iID0KKwkJCQkJCVJUSV9SWF9VUkFOR0VfQjsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYyA9CisJCQkJCQlSVElfUlhfVVJBTkdFX0M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2EgPSBSVElfUlhfVUZDX0E7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2IgPSBSVElfUlhfVUZDX0I7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2MgPSBSVElfUlhfVUZDX0M7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2QgPSBSVElfUlhfVUZDX0Q7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5ydGltZXJfdmFsID0KKwkJCShWWEdFX1JUSV9SVElNRVJfVkFMICogMTAwMCkgLyAyNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5sdGltZXJfdmFsID0KKwkJCShWWEdFX1JUSV9MVElNRVJfVkFMICogMTAwMCkgLyAyNzI7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJwYV9zdHJpcF92bGFuX3RhZyA9CisJCQl2bGFuX3RhZ19zdHJpcDsKKwl9CisKKwlkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID0gdGVtcDsKKwlyZXR1cm4gbm9fb2ZfdnBhdGhzOworfQorCisvKiBpbml0aWFsaXplIGRldmljZSBjb25maWd1cmF0cmlvbnMgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB2eGdlX2RldmljZV9jb25maWdfaW5pdCgKKwkJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnLAorCQkJCWludCAqaW50cl90eXBlKQoreworCS8qIFVzZWQgZm9yIENRUlEvU1JRLiAqLworCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfaW5pdGlhbCA9CisJCQlWWEdFX0hXX0lOSVRJQUxfRE1BX0JMT0NLX1BPT0xfU0laRTsKKworCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfbWF4ID0KKwkJCVZYR0VfSFdfTUFYX0RNQV9CTE9DS19QT09MX1NJWkU7CisKKwlpZiAobWF4X21hY192cGF0aCA+IFZYR0VfTUFYX01BQ19BRERSX0NPVU5UKQorCQltYXhfbWFjX3ZwYXRoID0gVlhHRV9NQVhfTUFDX0FERFJfQ09VTlQ7CisKKyNpZm5kZWYgQ09ORklHX1BDSV9NU0kKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCSIlczogVGhpcyBLZXJuZWwgZG9lcyBub3Qgc3VwcG9ydCAiCisJCSJNU0ktWC4gRGVmYXVsdGluZyB0byBJTlRBIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJKmludHJfdHlwZSA9IElOVEE7CisjZW5kaWYKKworCS8qIENvbmZpZ3VyZSB3aGV0aGVyIE1TSS1YIG9yIElSUUwuICovCisJc3dpdGNoICgqaW50cl90eXBlKSB7CisJY2FzZSBJTlRBOgorCQlkZXZpY2VfY29uZmlnLT5pbnRyX21vZGUgPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FOworCQlicmVhazsKKworCWNhc2UgTVNJX1g6CisJCWRldmljZV9jb25maWctPmludHJfbW9kZSA9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVg7CisJCWJyZWFrOworCX0KKwkvKiBUaW1lciBwZXJpb2QgYmV0d2VlbiBkZXZpY2UgcG9sbCAqLworCWRldmljZV9jb25maWctPmRldmljZV9wb2xsX21pbGxpcyA9IFZYR0VfVElNRVJfREVMQVk7CisKKwkvKiBDb25maWd1cmUgbWFjIGJhc2VkIHN0ZWVyaW5nLiAqLworCWRldmljZV9jb25maWctPnJ0c19tYWNfZW4gPSBhZGRyX2xlYXJuX2VuOworCisJLyogQ29uZmlndXJlIFZwYXRocyAqLworCWRldmljZV9jb25maWctPnJ0aF9pdF90eXBlID0gVlhHRV9IV19SVEhfSVRfVFlQRV9NVUxUSV9JVDsKKworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICIlcyA6IERldmljZSBDb25maWcgUGFyYW1zICIsCisJCQlfX2Z1bmNfXyk7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImRtYV9ibG9ja3Bvb2xfaW5pdGlhbCA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfaW5pdGlhbCk7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgImRtYV9ibG9ja3Bvb2xfbWF4IDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+ZG1hX2Jsb2NrcG9vbF9tYXgpOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJpbnRyX21vZGUgOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5pbnRyX21vZGUpOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJkZXZpY2VfcG9sbF9taWxsaXMgOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5kZXZpY2VfcG9sbF9taWxsaXMpOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJydHNfbWFjX2VuIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+cnRzX21hY19lbik7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgInJ0aF9lbiA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPnJ0aF9lbik7CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwgInJ0aF9pdF90eXBlIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+cnRoX2l0X3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdnhnZV9wcmludF9wYXJtKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCB1NjQgdnBhdGhfbWFzaykKK3sKKwlpbnQgaTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkiJXM6ICVkIFZwYXRoKHMpIG9wZW5lZCIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIHZkZXYtPm5vX29mX3ZwYXRoKTsKKworCXN3aXRjaCAodmRldi0+Y29uZmlnLmludHJfdHlwZSkgeworCWNhc2UgSU5UQToKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IEludGVycnVwdCB0eXBlIElOVEEiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TSV9YOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogSW50ZXJydXB0IHR5cGUgTVNJLVgiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy5ydGhfc3RlZXJpbmcpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFJUSCBzdGVlcmluZyBlbmFibGVkIGZvciBUQ1BfSVBWNCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogUlRIIHN0ZWVyaW5nIGRpc2FibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJfQorCisJc3dpdGNoICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSkgeworCWNhc2UgTk9fU1RFRVJJTkc6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBzdGVlcmluZyBkaXNhYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFRYX1BSSU9SSVRZX1NURUVSSU5HOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVW5zdXBwb3J0ZWQgdHggc3RlZXJpbmcgb3B0aW9uIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggc3RlZXJpbmcgZGlzYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPSAwOworCQlicmVhazsKKwljYXNlIFRYX1ZMQU5fU1RFRVJJTkc6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBVbnN1cHBvcnRlZCB0eCBzdGVlcmluZyBvcHRpb24iLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBzdGVlcmluZyBkaXNhYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IDA7CisJCWJyZWFrOworCWNhc2UgVFhfTVVMVElRX1NURUVSSU5HOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggbXVsdGlxdWV1ZSBzdGVlcmluZyBlbmFibGVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFRYX1BPUlRfU1RFRVJJTkc6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBwb3J0IHN0ZWVyaW5nIGVuYWJsZWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogVW5zdXBwb3J0ZWQgdHggc3RlZXJpbmcgdHlwZSIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IHN0ZWVyaW5nIGRpc2FibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCXZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID0gMDsKKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLmdyb19lbmFibGUpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBHZW5lcmljIHJlY2VpdmUgb2ZmbG9hZCBlbmFibGVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCX0gZWxzZQorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogR2VuZXJpYyByZWNlaXZlIG9mZmxvYWQgZGlzYWJsZWQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisKKwlpZiAodmRldi0+Y29uZmlnLmFkZHJfbGVhcm5fZW4pCisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBNQUMgQWRkcmVzcyBsZWFybmluZyBlbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJIiVzOiBSeCBkb29yYmVsbCBtb2RlIGVuYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJaWYgKCF2eGdlX2JWQUxuKHZwYXRoX21hc2ssIGksIDEpKQorCQkJY29udGludWU7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXM6IE1UVSBzaXplIC0gJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KKwkJCQljb25maWcudnBfY29uZmlnW2ldLm10dSk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBWTEFOIHRhZyBzdHJpcHBpbmcgJXMiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KKwkJCQljb25maWcudnBfY29uZmlnW2ldLnJwYV9zdHJpcF92bGFuX3RhZworCQkJPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFJpbmcgYmxvY2tzIDogJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KKwkJCQljb25maWcudnBfY29uZmlnW2ldLnJpbmcucmluZ19ibG9ja3MpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogRmlmbyBibG9ja3MgOiAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgorCQkJCWNvbmZpZy52cF9jb25maWdbaV0uZmlmby5maWZvX2Jsb2Nrcyk7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkiJXM6IE1heCBmcmFncyA6ICVkIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+CisJCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5maWZvLm1heF9mcmFncyk7CisJCWJyZWFrOworCX0KK30KKworI2lmZGVmIENPTkZJR19QTQorLyoqCisgKiB2eGdlX3BtX3N1c3BlbmQgLSB2eGdlIHBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCBlbnRyeSBwb2ludAorICoKKyAqLworc3RhdGljIGludCB2eGdlX3BtX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKy8qKgorICogdnhnZV9wbV9yZXN1bWUgLSB2eGdlIHBvd2VyIG1hbmFnZW1lbnQgcmVzdW1lIGVudHJ5IHBvaW50CisgKgorICovCitzdGF0aWMgaW50IHZ4Z2VfcG1fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXJldHVybiAtRU5PU1lTOworfQorCisjZW5kaWYKKworLyoqCisgKiB2eGdlX2lvX2Vycm9yX2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0aW9uIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVzIGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHZ4Z2VfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCQlwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPQorCQkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGxkZXYtPm5kZXY7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCS8qIEJyaW5nIGRvd24gdGhlIGNhcmQsIHdoaWxlIGF2b2lkaW5nIFBDSSBJL08gKi8KKwkJZG9fdnhnZV9jbG9zZShuZXRkZXYsIDApOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKioKKyAqIHZ4Z2VfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2OiBQb2ludGVyIHRvIFBDSSBkZXZpY2UKKyAqCisgKiBSZXN0YXJ0IHRoZSBjYXJkIGZyb20gc2NyYXRjaCwgYXMgaWYgZnJvbSBhIGNvbGQtYm9vdC4KKyAqIEF0IHRoaXMgcG9pbnQsIHRoZSBjYXJkIGhhcyBleHByaWVuY2VkIGEgaGFyZCByZXNldCwKKyAqIGZvbGxvd2VkIGJ5IGZpeHVwcyBieSBCSU9TLCBhbmQgaGFzIGl0cyBjb25maWcgc3BhY2UKKyAqIHNldCB1cCBpZGVudGljYWxseSB0byB3aGF0IGl0IHdhcyBhdCBjb2xkIGJvb3QuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IHZ4Z2VfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGhsZGV2LT5uZGV2OworCisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICIKKwkJCSJDYW5ub3QgcmUtZW5hYmxlIGRldmljZSBhZnRlciByZXNldFxuIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwl2eGdlX3Jlc2V0KHZkZXYpOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworLyoqCisgKiB2eGdlX2lvX3Jlc3VtZSAtIGNhbGxlZCB3aGVuIHRyYWZmaWMgY2FuIHN0YXJ0IGZsb3dpbmcgYWdhaW4uCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgZXJyb3IgcmVjb3ZlcnkgZHJpdmVyIHRlbGxzCisgKiB1cyB0aGF0IGl0cyBPSyB0byByZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgdnhnZV9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9CisJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBobGRldi0+bmRldjsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKHZ4Z2Vfb3BlbihuZXRkZXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiCisJCQkJIkNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iLAorCQkJCVZYR0VfRFJJVkVSX05BTUUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworfQorCisvKioKKyAqIHZ4Z2VfcHJvYmUKKyAqIEBwZGV2IDogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIFBDSSByZWxhdGVkIGluZm9ybWF0aW9uIG9mIHRoZSBkZXZpY2UuCisgKiBAcHJlOiBMaXN0IG9mIFBDSSBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyIGxpc3RlZCBpbiB2eGdlX2lkX3RhYmxlLgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgbmV3IFBDSSBkZXZpY2UgZ2V0cyBkZXRlY3RlZCBhbmQgaW5pdGlhbGl6ZXMKKyAqIGl0LgorICogUmV0dXJuIHZhbHVlOgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAordnhnZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnByZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCByZXQ7CisJaW50IGhpZ2hfZG1hID0gMDsKKwl1NjQgdnBhdGhfbWFzayA9IDA7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IHZ4Z2VfY29uZmlnIGxsX2NvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnID0gTlVMTDsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciBhdHRyOworCWludCBpLCBqLCBub19vZl92cGF0aCA9IDAsIG1heF92cGF0aF9zdXBwb3J0ZWQgPSAwOworCXU4ICptYWNhZGRyOworCXN0cnVjdCB2eGdlX21hY19hZGRycyAqZW50cnk7CisJc3RhdGljIGludCBidXMgPSAtMSwgZGV2aWNlID0gLTE7CisJdTggbmV3X2RldmljZSA9IDA7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWF0dHIucGRldiA9IHBkZXY7CisKKwlpZiAoYnVzICE9IHBkZXYtPmJ1cy0+bnVtYmVyKQorCQluZXdfZGV2aWNlID0gMTsKKwlpZiAoZGV2aWNlICE9IFBDSV9TTE9UKHBkZXYtPmRldmZuKSkKKwkJbmV3X2RldmljZSA9IDE7CisKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKwlkZXZpY2UgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisKKwlpZiAobmV3X2RldmljZSkgeworCQlpZiAoZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgJiYKKwkJICAgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICE9CisJCQlkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250KSkKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IENvbmZpZ3VyZWQgJWQgb2YgJWQgZGV2aWNlcyIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwKKwkJCQlkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCwKKwkJCQlkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250KTsKKwkJZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgPSAwOworCQlkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250ID0gMDsKKwkJZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID0gMDsKKwkJZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9IG1heF9jb25maWdfdnBhdGg7CisJfQorCisJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCsrOworCWlmICgrK2RyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ID4gbWF4X2NvbmZpZ19kZXYpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBfZXhpdDA7CisJfQorCisJZGV2aWNlX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcpLAorCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRldmljZV9jb25maWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJImRldmljZV9jb25maWcgOiBtYWxsb2MgZmFpbGVkICVzICVkIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCWdvdG8gX2V4aXQwOworCX0KKworCW1lbXNldCgmbGxfY29uZmlnLCAwLCBzaXplb2Yoc3RydWN0IHZ4Z2VfY29uZmlnKSk7CisJbGxfY29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPSBUWF9NVUxUSVFfU1RFRVJJTkc7CisJbGxfY29uZmlnLmludHJfdHlwZSA9IE1TSV9YOworCWxsX2NvbmZpZy5uYXBpX3dlaWdodCA9IE5FV19OQVBJX1dFSUdIVDsKKwlsbF9jb25maWcucnRoX3N0ZWVyaW5nID0gUlRIX1NURUVSSU5HOworCisJLyogZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCXZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ19kZWZhdWx0X2dldChkZXZpY2VfY29uZmlnKTsKKworCS8qIGluaXRpYWxpemUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisJdnhnZV9kZXZpY2VfY29uZmlnX2luaXQoZGV2aWNlX2NvbmZpZywgJmxsX2NvbmZpZy5pbnRyX3R5cGUpOworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiBjYW4gbm90IGVuYWJsZSBQQ0kgZGV2aWNlIiwgX19mdW5jX18pOworCQlnb3RvIF9leGl0MDsKKwl9CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkgeworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzIDogdXNpbmcgNjRiaXQgRE1BIiwgX19mdW5jX18pOworCisJCWhpZ2hfZG1hID0gMTsKKworCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCisJCQkJCQkweGZmZmZmZmZmZmZmZmZmZmZVTEwpKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzIDogdW5hYmxlIHRvIG9idGFpbiA2NGJpdCBETUEgZm9yICIKKwkJCQkiY29uc2lzdGVudCBhbGxvY2F0aW9ucyIsIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIF9leGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgMHhmZmZmZmZmZlVMKSkgeworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzIDogdXNpbmcgMzJiaXQgRE1BIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gX2V4aXQxOworCX0KKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIFZYR0VfRFJJVkVSX05BTUUpKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6IHJlcXVlc3QgcmVnaW9ucyBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX2V4aXQxOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJYXR0ci5iYXIwID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCWlmICghYXR0ci5iYXIwKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6IGNhbm5vdCByZW1hcCBpbyBtZW1vcnkgYmFyMCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfZXhpdDI7CisJfQorCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCSJwY2kgaW9yZW1hcCBiYXIwOiAlcDoweCVsbHgiLAorCQlhdHRyLmJhcjAsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKTsKKworCWF0dHIuYmFyMSA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAyKTsKKwlpZiAoIWF0dHIuYmFyMSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiBjYW5ub3QgcmVtYXAgaW8gbWVtb3J5IGJhcjIiLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX2V4aXQzOworCX0KKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkicGNpIGlvcmVtYXAgYmFyMTogJXA6MHglbGx4IiwKKwkJYXR0ci5iYXIxLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSk7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldChhdHRyLmJhcjAsCisJCQkmbGxfY29uZmlnLmRldmljZV9od19pbmZvKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBSZWFkaW5nIG9mIGhhcmR3YXJlIGluZm8gZmFpbGVkLiIKKwkJCSJQbGVhc2UgdHJ5IHVwZ3JhZGluZyB0aGUgZmlybXdhcmUuIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gX2V4aXQ0OworCX0KKworCWlmIChsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvciAhPQorCQlWWEdFX0RSSVZFUl9WRVJTSU9OX01BSk9SKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJGVyBWZXIuKG1haik6ICVkIG5vdCBkcml2ZXIncyBleHBlY3RlZCB2ZXJzaW9uOiAlZCIsCisJCQlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvciwKKwkJCVZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIF9leGl0NDsKKwl9CisKKwl2cGF0aF9tYXNrID0gbGxfY29uZmlnLmRldmljZV9od19pbmZvLnZwYXRoX21hc2s7CisJaWYgKHZwYXRoX21hc2sgPT0gMCkgeworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzOiBObyB2cGF0aHMgYXZhaWxhYmxlIGluIGRldmljZSIsIFZYR0VfRFJJVkVSX05BTUUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIF9leGl0NDsKKwl9CisKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkiJXM6JWQgIFZwYXRoIG1hc2sgPSAlbGx4IiwgX19mdW5jX18sIF9fTElORV9fLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXZwYXRoX21hc2spOworCisJLyogQ2hlY2sgaG93IG1hbnkgdnBhdGhzIGFyZSBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWlmICghKCh2cGF0aF9tYXNrKSAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKwkJbWF4X3ZwYXRoX3N1cHBvcnRlZCsrOworCX0KKworCS8qCisJICogQ29uZmlndXJlIHZwYXRocyBhbmQgZ2V0IGRyaXZlciBjb25maWd1cmVkIG51bWJlciBvZiB2cGF0aHMKKwkgKiB3aGljaCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1heGltdW0gdnBhdGhzIHBlciBmdW5jdGlvbi4KKwkgKi8KKwlub19vZl92cGF0aCA9IHZ4Z2VfY29uZmlnX3ZwYXRocyhkZXZpY2VfY29uZmlnLCB2cGF0aF9tYXNrLCAmbGxfY29uZmlnKTsKKwlpZiAoIW5vX29mX3ZwYXRoKSB7CisJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfRVJSLAorCQkJIiVzOiBObyBtb3JlIHZwYXRocyB0byBjb25maWd1cmUiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0ID0gMDsKKwkJZ290byBfZXhpdDQ7CisJfQorCisJLyogU2V0dGluZyBkcml2ZXIgY2FsbGJhY2tzICovCisJYXR0ci51bGRfY2FsbGJhY2tzLmxpbmtfdXAgPSB2eGdlX2NhbGxiYWNrX2xpbmtfdXA7CisJYXR0ci51bGRfY2FsbGJhY2tzLmxpbmtfZG93biA9IHZ4Z2VfY2FsbGJhY2tfbGlua19kb3duOworCWF0dHIudWxkX2NhbGxiYWNrcy5jcml0X2VyciA9IHZ4Z2VfY2FsbGJhY2tfY3JpdF9lcnI7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9pbml0aWFsaXplKCZobGRldiwgJmF0dHIsIGRldmljZV9jb25maWcpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiRmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlICglZCkiLCBzdGF0dXMpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gX2V4aXQ0OworCX0KKworCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0xMKTsKKworCS8qIHNldCBwcml2YXRlIGRldmljZSBpbmZvICovCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGhsZGV2KTsKKworCWxsX2NvbmZpZy5ncm9fZW5hYmxlID0gVlhHRV9HUk9fQUxXQVlTX0FHR1JFR0FURTsKKwlsbF9jb25maWcuZmlmb19pbmRpY2F0ZV9tYXhfcGt0cyA9IFZYR0VfRklGT19JTkRJQ0FURV9NQVhfUEtUUzsKKwlsbF9jb25maWcuYWRkcl9sZWFybl9lbiA9IGFkZHJfbGVhcm5fZW47CisJbGxfY29uZmlnLnJ0aF9hbGdvcml0aG0gPSBSVEhfQUxHX0pFTktJTlM7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjQ7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfaXB2NCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY2ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjYgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NmV4ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjZleCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWcucnRoX2JrdF9zeiA9IFJUSF9CVUNLRVRfU0laRTsKKwlsbF9jb25maWcudHhfcGF1c2VfZW5hYmxlID0gVlhHRV9QQVVTRV9DVFJMX0VOQUJMRTsKKwlsbF9jb25maWcucnhfcGF1c2VfZW5hYmxlID0gVlhHRV9QQVVTRV9DVFJMX0VOQUJMRTsKKworCWlmICh2eGdlX2RldmljZV9yZWdpc3RlcihobGRldiwgJmxsX2NvbmZpZywgaGlnaF9kbWEsIG5vX29mX3ZwYXRoLAorCQkmdmRldikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBfZXhpdDU7CisJfQorCisJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX1RSQUNFLCBWWEdFX0NPTVBPTkVOVF9MTCk7CisJVlhHRV9DT1BZX0RFQlVHX0lORk9fVE9fTEwodmRldiwgdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSk7CisKKwkvKiBzZXQgcHJpdmF0ZSBIVyBkZXZpY2UgaW5mbyAqLworCWhsZGV2LT5uZGV2ID0gdmRldi0+bmRldjsKKwl2ZGV2LT5tdHUgPSBWWEdFX0hXX0RFRkFVTFRfTVRVOworCXZkZXYtPmJhcjAgPSBhdHRyLmJhcjA7CisJdmRldi0+YmFyMSA9IGF0dHIuYmFyMTsKKwl2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkID0gbWF4X3ZwYXRoX3N1cHBvcnRlZDsKKwl2ZGV2LT5ub19vZl92cGF0aCA9IG5vX29mX3ZwYXRoOworCisJLyogVmlydHVhbCBQYXRoIGNvdW50ICovCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJaWYgKCF2eGdlX2JWQUxuKHZwYXRoX21hc2ssIGksIDEpKQorCQkJY29udGludWU7CisJCWlmIChqID49IHZkZXYtPm5vX29mX3ZwYXRoKQorCQkJYnJlYWs7CisKKwkJdmRldi0+dnBhdGhzW2pdLmlzX2NvbmZpZ3VyZWQgPSAxOworCQl2ZGV2LT52cGF0aHNbal0uZGV2aWNlX2lkID0gaTsKKwkJdmRldi0+dnBhdGhzW2pdLmZpZm8uZHJpdmVyX2lkID0gajsKKwkJdmRldi0+dnBhdGhzW2pdLnJpbmcuZHJpdmVyX2lkID0gajsKKwkJdmRldi0+dnBhdGhzW2pdLnZkZXYgPSB2ZGV2OworCQl2ZGV2LT52cGF0aHNbal0ubWF4X21hY19hZGRyX2NudCA9IG1heF9tYWNfdnBhdGg7CisJCW1lbWNweSgodTggKil2ZGV2LT52cGF0aHNbal0ubWFjYWRkciwKKwkJCQkodTggKilsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ubWFjX2FkZHJzW2ldLAorCQkJCUVUSF9BTEVOKTsKKworCQkvKiBJbml0aWFsaXplIHRoZSBtYWMgYWRkcmVzcyBsaXN0IGhlYWRlciAqLworCQlJTklUX0xJU1RfSEVBRCgmdmRldi0+dnBhdGhzW2pdLm1hY19hZGRyX2xpc3QpOworCisJCXZkZXYtPnZwYXRoc1tqXS5tYWNfYWRkcl9jbnQgPSAwOworCQl2ZGV2LT52cGF0aHNbal0ubWNhc3RfYWRkcl9jbnQgPSAwOworCQlqKys7CisJfQorCXZkZXYtPmV4ZWNfbW9kZSA9IFZYR0VfRVhFQ19NT0RFX0RJU0FCTEU7CisJdmRldi0+bWF4X2NvbmZpZ19wb3J0ID0gbWF4X2NvbmZpZ19wb3J0OworCisJdmRldi0+dmxhbl90YWdfc3RyaXAgPSB2bGFuX3RhZ19zdHJpcDsKKworCS8qIG1hcCB0aGUgaGFzaGluZyBzZWxlY3RvciB0YWJsZSB0byB0aGUgY29uZmlndXJlZCB2cGF0aHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJdmRldi0+dnBhdGhfc2VsZWN0b3JbaV0gPSB2cGF0aF9zZWxlY3RvcltpXTsKKworCW1hY2FkZHIgPSAodTggKil2ZGV2LT52cGF0aHNbMF0ubWFjYWRkcjsKKworCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5zZXJpYWxfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU4gLSAxXSA9ICdcMCc7CisJbGxfY29uZmlnLmRldmljZV9od19pbmZvLnByb2R1Y3RfZGVzY1tWWEdFX0hXX0lORk9fTEVOIC0gMV0gPSAnXDAnOworCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wYXJ0X251bWJlcltWWEdFX0hXX0lORk9fTEVOIC0gMV0gPSAnXDAnOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogU0VSSUFMIE5VTUJFUjogJXMiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uc2VyaWFsX251bWJlcik7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBQQVJUIE5VTUJFUjogJXMiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucGFydF9udW1iZXIpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTmV0ZXJpb24gJXMgU2VydmVyIEFkYXB0ZXIiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucHJvZHVjdF9kZXNjKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkiJXM6IE1BQyBBRERSOiAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIG1hY2FkZHJbMF0sIG1hY2FkZHJbMV0sIG1hY2FkZHJbMl0sCisJCW1hY2FkZHJbM10sIG1hY2FkZHJbNF0sIG1hY2FkZHJbNV0pOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTGluayBXaWR0aCB4JWQiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCB2eGdlX2h3X2RldmljZV9saW5rX3dpZHRoX2dldChobGRldikpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCSIlczogRmlybXdhcmUgdmVyc2lvbiA6ICVzIERhdGUgOiAlcyIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md192ZXJzaW9uLnZlcnNpb24sCisJCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5md19kYXRlLmRhdGUpOworCisJdnhnZV9wcmludF9wYXJtKHZkZXYsIHZwYXRoX21hc2spOworCisJLyogU3RvcmUgdGhlIGZ3IHZlcnNpb24gZm9yIGV0aHR0b29sIG9wdGlvbiAqLworCXN0cmNweSh2ZGV2LT5md192ZXJzaW9uLCBsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi52ZXJzaW9uKTsKKwltZW1jcHkodmRldi0+bmRldi0+ZGV2X2FkZHIsICh1OCAqKXZkZXYtPnZwYXRoc1swXS5tYWNhZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHZkZXYtPm5kZXYtPnBlcm1fYWRkciwgdmRldi0+bmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCS8qIENvcHkgdGhlIHN0YXRpb24gbWFjIGFkZHJlc3MgdG8gdGhlIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQllbnRyeSA9CShzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikKKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKE5VTEwgPT0gZW50cnkpIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IG1hY19hZGRyX2xpc3QgOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBfZXhpdDY7CisJCX0KKwkJbWFjYWRkciA9ICh1OCAqKSZlbnRyeS0+bWFjYWRkcjsKKwkJbWVtY3B5KG1hY2FkZHIsIHZkZXYtPm5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwgJnZkZXYtPnZwYXRoc1tpXS5tYWNfYWRkcl9saXN0KTsKKwkJdmRldi0+dnBhdGhzW2ldLm1hY19hZGRyX2NudCA9IDE7CisJfQorCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfRVJSLCBWWEdFX0NPTVBPTkVOVF9MTCk7CisJVlhHRV9DT1BZX0RFQlVHX0lORk9fVE9fTEwodmRldiwgdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSk7CisKKwlyZXR1cm4gMDsKKworX2V4aXQ2OgorCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQl2eGdlX2ZyZWVfbWFjX2FkZF9saXN0KCZ2ZGV2LT52cGF0aHNbaV0pOworCisJdnhnZV9kZXZpY2VfdW5yZWdpc3RlcihobGRldik7CitfZXhpdDU6CisJdnhnZV9od19kZXZpY2VfdGVybWluYXRlKGhsZGV2KTsKK19leGl0NDoKKwlpb3VubWFwKGF0dHIuYmFyMSk7CitfZXhpdDM6CisJaW91bm1hcChhdHRyLmJhcjApOworX2V4aXQyOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitfZXhpdDE6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworX2V4aXQwOgorCWtmcmVlKGRldmljZV9jb25maWcpOworCWRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250LS07CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdnhnZV9yZW1fbmljIC0gRnJlZSB0aGUgUENJIGRldmljZQorICogQHBkZXY6IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBQQ0kgcmVsYXRlZCBpbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlLgorICogRGVzY3JpcHRpb246IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBQY2kgc3Vic3lzdGVtIHRvIHJlbGVhc2UgYQorICogUENJIGRldmljZSBhbmQgZnJlZSB1cCBhbGwgcmVzb3VyY2UgaGVsZCB1cCBieSB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3Z4Z2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGkgPSAwOworI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCisJKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKKwl1MzIgbGV2ZWxfdHJhY2U7CisjZW5kaWYKKworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaGxkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWRldiA9IGhsZGV2LT5uZGV2OworCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisjaWYgKChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spIHx8IFwKKwkoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spKQorCWxldmVsX3RyYWNlID0gdmRldi0+bGV2ZWxfdHJhY2U7CisjZW5kaWYKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbF90cmFjZSwKKwkJIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZ4Z2VfZGVidWdfaW5pdChsZXZlbF90cmFjZSwKKwkJIiVzIDogcmVtb3ZpbmcgUENJIGRldmljZS4uLiIsIF9fZnVuY19fKTsKKwl2eGdlX2RldmljZV91bnJlZ2lzdGVyKGhsZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZ4Z2VfZnJlZV9tYWNfYWRkX2xpc3QoJnZkZXYtPnZwYXRoc1tpXSk7CisJCXZkZXYtPnZwYXRoc1tpXS5tY2FzdF9hZGRyX2NudCA9IDA7CisJCXZkZXYtPnZwYXRoc1tpXS5tYWNfYWRkcl9jbnQgPSAwOworCX0KKworCWtmcmVlKHZkZXYtPnZwYXRocyk7CisKKwlpb3VubWFwKHZkZXYtPmJhcjApOworCWlvdW5tYXAodmRldi0+YmFyMSk7CisKKwkvKiB3ZSBhcmUgc2FmZSB0byBmcmVlIGl0IG5vdyAqLworCWZyZWVfbmV0ZGV2KGRldik7CisKKwl2eGdlX2RlYnVnX2luaXQobGV2ZWxfdHJhY2UsCisJCSIlczolZCAgRGV2aWNlIHVucmVnaXN0ZXJlZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2eGdlX2h3X2RldmljZV90ZXJtaW5hdGUoaGxkZXYpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsX3RyYWNlLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyB2eGdlX2Vycl9oYW5kbGVyID0geworCS5lcnJvcl9kZXRlY3RlZCA9IHZ4Z2VfaW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSB2eGdlX2lvX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSA9IHZ4Z2VfaW9fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZ4Z2VfZHJpdmVyID0geworCS5uYW1lID0gVlhHRV9EUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSB2eGdlX2lkX3RhYmxlLAorCS5wcm9iZSA9IHZ4Z2VfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHZ4Z2VfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHZ4Z2VfcG1fc3VzcGVuZCwKKwkucmVzdW1lID0gdnhnZV9wbV9yZXN1bWUsCisjZW5kaWYKKwkuZXJyX2hhbmRsZXIgPSAmdnhnZV9lcnJfaGFuZGxlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0Cit2eGdlX3N0YXJ0ZXIodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwljaGFyIHZlcnNpb25bMzJdOworCXNucHJpbnRmKHZlcnNpb24sIDMyLCAiJXMiLCBEUlZfVkVSU0lPTik7CisKKwlwcmludGsoS0VSTl9DUklUICIlczogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmNcbiIsCisJCVZYR0VfRFJJVkVSX05BTUUpOworCXByaW50ayhLRVJOX0NSSVQgIiVzOiBEcml2ZXIgdmVyc2lvbjogJXNcbiIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCB2ZXJzaW9uKTsKKworCXZlcmlmeV9iYW5kd2lkdGgoKTsKKworCWRyaXZlcl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9kcnZfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcml2ZXJfY29uZmlnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnZ4Z2VfZHJpdmVyKTsKKworCWlmIChkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCAmJgorCSAgIChkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCAhPSBkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250KSkKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBDb25maWd1cmVkICVkIG9mICVkIGRldmljZXMiLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQsCisJCQlkcml2ZXJfY29uZmlnLT50b3RhbF9kZXZfY250KTsKKworCWlmIChyZXQpCisJCWtmcmVlKGRyaXZlcl9jb25maWcpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cit2eGdlX2Nsb3Nlcih2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdnhnZV9kcml2ZXIpOworCWtmcmVlKGRyaXZlcl9jb25maWcpOworfQorbW9kdWxlX2luaXQodnhnZV9zdGFydGVyKTsKK21vZHVsZV9leGl0KHZ4Z2VfY2xvc2VyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MDRiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCkBAIC0wLDAgKzEsNTU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1tYWluLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfTUFJTl9ICisjZGVmaW5lIFZYR0VfTUFJTl9ICisKKyNpbmNsdWRlICJ2eGdlLXRyYWZmaWMuaCIKKyNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgorI2luY2x1ZGUgInZ4Z2UtdmVyc2lvbi5oIgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2RlZmluZSBWWEdFX0RSSVZFUl9OQU1FCQkidnhnZSIKKyNkZWZpbmUgVlhHRV9EUklWRVJfVkVORE9SCQkiTmV0ZXJpb24sIEluYyIKKyNkZWZpbmUgVlhHRV9EUklWRVJfVkVSU0lPTl9NQUpPUiAwCisKKyNkZWZpbmUgRFJWX1ZFUlNJT04JVlhHRV9WRVJTSU9OX01BSk9SIi4iVlhHRV9WRVJTSU9OX01JTk9SIi4iXAorCVZYR0VfVkVSU0lPTl9GSVgiLiJWWEdFX1ZFUlNJT05fQlVJTEQiLSJcCisJVlhHRV9WRVJTSU9OX0ZPUgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fV0lOCQkweDU3MzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl9VTkkJCTB4NTgzMworI2RlZmluZQlWWEdFX1VTRV9ERUZBVUxUCQkweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUJNAorI2RlZmluZSBWWEdFX0hXX1JYU1lOQ19GUkVRX0NOVAkJNAorI2RlZmluZSBWWEdFX0xMX1dBVENIX0RPR19USU1FT1VUCSgxNSAqIEhaKQorI2RlZmluZSBWWEdFX0xMX1JYX0NPUFlfVEhSRVNIT0xECTI1NgorI2RlZmluZSBWWEdFX0RFRl9GSUZPX0xFTkdUSAkJODQKKworI2RlZmluZSBOT19TVEVFUklORwkJMAorI2RlZmluZSBQT1JUX1NURUVSSU5HCQkweDEKKyNkZWZpbmUgUlRIX1NURUVSSU5HCQkweDIKKyNkZWZpbmUgUlhfVE9TX1NURUVSSU5HCQkweDMKKyNkZWZpbmUgUlhfVkxBTl9TVEVFUklORwkweDQKKyNkZWZpbmUgUlRIX0JVQ0tFVF9TSVpFCQk0CisKKyNkZWZpbmUJVFhfUFJJT1JJVFlfU1RFRVJJTkcJMQorI2RlZmluZQlUWF9WTEFOX1NURUVSSU5HCTIKKyNkZWZpbmUJVFhfUE9SVF9TVEVFUklORwkzCisjZGVmaW5lCVRYX01VTFRJUV9TVEVFUklORwk0CisKKyNkZWZpbmUgVlhHRV9IV19NQUNfQUREUl9MRUFSTl9ERUZBVUxUIFZYR0VfSFdfUlRTX01BQ19ESVNBQkxFCisKKyNkZWZpbmUgVlhHRV9UVElfQlRJTUVSX1ZBTCAyNTAwMDAKKworI2RlZmluZSBWWEdFX1RUSV9MVElNRVJfVkFMIDEwMDAKKyNkZWZpbmUgVlhHRV9UVElfUlRJTUVSX1ZBTCAwCisjZGVmaW5lIFZYR0VfUlRJX0JUSU1FUl9WQUwgMjUwCisjZGVmaW5lIFZYR0VfUlRJX0xUSU1FUl9WQUwgMTAwCisjZGVmaW5lIFZYR0VfUlRJX1JUSU1FUl9WQUwgMAorI2RlZmluZSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFMgVlhHRV9ERUZfRklGT19MRU5HVEgKKyNkZWZpbmUgVlhHRV9JU1JfUE9MTElOR19DTlQgCTgKKyNkZWZpbmUgVlhHRV9NQVhfQ09ORklHX0RFVgkweEZGCisjZGVmaW5lIFZYR0VfRVhFQ19NT0RFX0RJU0FCTEUJMAorI2RlZmluZSBWWEdFX0VYRUNfTU9ERV9FTkFCTEUJMQorI2RlZmluZSBWWEdFX01BWF9DT05GSUdfUE9SVAkxCisjZGVmaW5lIFZYR0VfQUxMX1ZJRF9ESVNBQkxFCTAKKyNkZWZpbmUgVlhHRV9BTExfVklEX0VOQUJMRQkxCisjZGVmaW5lIFZYR0VfUEFVU0VfQ1RSTF9ESVNBQkxFCTAKKyNkZWZpbmUgVlhHRV9QQVVTRV9DVFJMX0VOQUJMRQkxCisKKyNkZWZpbmUgVFRJX1RYX1VSQU5HRV9BCTUKKyNkZWZpbmUgVFRJX1RYX1VSQU5HRV9CCTE1CisjZGVmaW5lIFRUSV9UWF9VUkFOR0VfQwk0MAorI2RlZmluZSBUVElfVFhfVUZDX0EJNQorI2RlZmluZSBUVElfVFhfVUZDX0IJNDAKKyNkZWZpbmUgVFRJX1RYX1VGQ19DCTYwCisjZGVmaW5lIFRUSV9UWF9VRkNfRAkxMDAKKworI2RlZmluZSBSVElfUlhfVVJBTkdFX0EJNQorI2RlZmluZSBSVElfUlhfVVJBTkdFX0IJMTUKKyNkZWZpbmUgUlRJX1JYX1VSQU5HRV9DCTQwCisjZGVmaW5lIFJUSV9SWF9VRkNfQQkxCisjZGVmaW5lIFJUSV9SWF9VRkNfQgk1CisjZGVmaW5lIFJUSV9SWF9VRkNfQwkxMAorI2RlZmluZSBSVElfUlhfVUZDX0QJMTUKKworLyogTWlsbGkgc2VjcyB0aW1lciBwZXJpb2QgKi8KKyNkZWZpbmUgVlhHRV9USU1FUl9ERUxBWQkJMTAwMDAKKworI2RlZmluZSBWWEdFX0xMX01BWF9GUkFNRV9TSVpFKGRldikgKChkZXYpLT5tdHUgKyBWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkUpCisKK2VudW0gdnhnZV9yZXNldF9ldmVudCB7CisJLyogcmVzZXQgZXZlbnRzICovCisJVlhHRV9MTF9WUEFUSF9SRVNFVAk9IDAsCisJVlhHRV9MTF9ERVZJQ0VfUkVTRVQJPSAxLAorCVZYR0VfTExfRlVMTF9SRVNFVAk9IDIsCisJVlhHRV9MTF9TVEFSVF9SRVNFVAk9IDMsCisJVlhHRV9MTF9DT01QTF9SRVNFVAk9IDQKK307CisvKiBUaGVzZSBmbGFncyByZXByZXNlbnQgdGhlIGRldmljZXMgdGVtcG9yYXJ5IHN0YXRlICovCitlbnVtIHZ4Z2VfZGV2aWNlX3N0YXRlX3QgeworX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQgPSAwLAorX19WWEdFX1NUQVRFX0NBUkRfVVAKK307CisKK2VudW0gdnhnZV9tYWNfYWRkcl9zdGF0ZSB7CisJLyogbWFjIGFkZHJlc3Mgc3RhdGVzICovCisJVlhHRV9MTF9NQUNfQUREUl9JTl9MSVNUICAgICAgICA9IDAsCisJVlhHRV9MTF9NQUNfQUREUl9JTl9EQV9UQUJMRSAgICA9IDEKK307CisKK3N0cnVjdCB2eGdlX2Rydl9jb25maWcgeworCWludCBjb25maWdfZGV2X2NudDsKKwlpbnQgdG90YWxfZGV2X2NudDsKKwl1bnNpZ25lZCBsb25nIGludGFfZGV2X29wZW47CisJaW50IGdfbm9fY3B1czsKKwl1bnNpZ25lZCBpbnQgdnBhdGhfcGVyX2RldjsKK307CisKK3N0cnVjdCBtYWNJbmZvIHsKKwl1bnNpZ25lZCBjaGFyIG1hY2FkZHJbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgbWFjbWFza1tFVEhfQUxFTl07CisJdW5zaWduZWQgaW50IHZwYXRoX25vOworCWVudW0gdnhnZV9tYWNfYWRkcl9zdGF0ZSBzdGF0ZTsKK307CisKK3N0cnVjdCB2eGdlX2NvbmZpZyB7CisJaW50CQl0eF9wYXVzZV9lbmFibGU7CisJaW50CQlyeF9wYXVzZV9lbmFibGU7CisKKyNkZWZpbmUJTkVXX05BUElfV0VJR0hUCTY0CisJaW50CQluYXBpX3dlaWdodDsKKyNkZWZpbmUgVlhHRV9HUk9fRE9OT1RfQUdHUkVHQVRFCQkwCisjZGVmaW5lIFZYR0VfR1JPX0FMV0FZU19BR0dSRUdBVEUJCTEKKwlpbnQJCWdyb19lbmFibGU7CisJaW50CQlpbnRyX3R5cGU7CisjZGVmaW5lIElOVEEJMAorI2RlZmluZSBNU0kJMQorI2RlZmluZSBNU0lfWAkyCisKKwlpbnQJCWFkZHJfbGVhcm5fZW47CisKKwlpbnQJCXJ0aF9zdGVlcmluZzsKKwlpbnQJCXJ0aF9hbGdvcml0aG07CisJaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjQ7CisJaW50CQlydGhfaGFzaF90eXBlX2lwdjQ7CisJaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjY7CisJaW50CQlydGhfaGFzaF90eXBlX2lwdjY7CisJaW50CQlydGhfaGFzaF90eXBlX3RjcGlwdjZleDsKKwlpbnQJCXJ0aF9oYXNoX3R5cGVfaXB2NmV4OworCWludAkJcnRoX2JrdF9zejsKKwlpbnQJCXJ0aF9qaGFzaF9nb2xkZW5fcmF0aW87CisJaW50CQl0eF9zdGVlcmluZ190eXBlOworCWludCAJZmlmb19pbmRpY2F0ZV9tYXhfcGt0czsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyBkZXZpY2VfaHdfaW5mbzsKK307CisKK3N0cnVjdCB2eGdlX21zaXhfZW50cnkgeworCS8qIE1pbWljaW5nIHRoZSBtc2l4X2VudHJ5IHN0cnVjdCBvZiBLZXJuZWwuICovCisJdTE2IHZlY3RvcjsKKwl1MTYgZW50cnk7CisJdTE2IGluX3VzZTsKKwl2b2lkICphcmc7Cit9OworCisvKiBTb2Z0d2FyZSBTdGF0aXN0aWNzICovCisKK3N0cnVjdCB2eGdlX3N3X3N0YXRzIHsKKwkvKiBOZXR3b3JrIFN0YXRzIChpbnRlcmZhY2Ugc3RhdHMpICovCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOworCisJLyogVHggKi8KKwl1NjQgdHhfZnJtczsKKwl1NjQgdHhfZXJyb3JzOworCXU2NCB0eF9ieXRlczsKKwl1NjQgdHhkX25vdF9mcmVlOworCXU2NCB0eGRfb3V0X29mX2Rlc2M7CisKKwkvKiBWaXJ0dWFsIFBhdGggKi8KKwl1NjQgdnBhdGhzX29wZW47CisJdTY0IHZwYXRoX29wZW5fZmFpbDsKKworCS8qIFJ4ICovCisJdTY0IHJ4X2ZybXM7CisJdTY0IHJ4X2Vycm9yczsKKwl1NjQgcnhfYnl0ZXM7CisJdTY0IHJ4X21jYXN0OworCisJLyogTWlzYy4gKi8KKwl1NjQgbGlua191cDsKKwl1NjQgbGlua19kb3duOworCXU2NCBwY2lfbWFwX2ZhaWw7CisJdTY0IHNrYl9hbGxvY19mYWlsOworfTsKKworc3RydWN0IHZ4Z2VfbWFjX2FkZHJzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGl0ZW07CisJdTY0IG1hY2FkZHI7CisJdTY0IG1hY21hc2s7CisJZW51bSB2eGdlX21hY19hZGRyX3N0YXRlIHN0YXRlOworfTsKKworc3RydWN0IHZ4Z2VkZXY7CisKK3N0cnVjdCB2eGdlX2ZpZm9fc3RhdHMgeworCXU2NCB0eF9mcm1zOworCXU2NCB0eF9lcnJvcnM7CisJdTY0IHR4X2J5dGVzOworCXU2NCB0eGRfbm90X2ZyZWU7CisJdTY0IHR4ZF9vdXRfb2ZfZGVzYzsKKwl1NjQgcGNpX21hcF9mYWlsOworfTsKKworc3RydWN0IHZ4Z2VfZmlmbyB7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5kZXY7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqaGFuZGxlOworCisJLyogVGhlIHZwYXRoIGlkIG1haW50YWluZWQgaW4gdGhlIGRyaXZlciAtCisJICogMCB0byAnbWF4aW11bV92cGF0aHNfaW5fZnVuY3Rpb24gLSAxJworCSAqLworCWludCBkcml2ZXJfaWQ7CisJaW50IHR4X3N0ZWVyaW5nX3R5cGU7CisJaW50IGluZGljYXRlX21heF9wa3RzOworCXNwaW5sb2NrX3QgdHhfbG9jazsKKwkvKiBmbGFnIHVzZWQgdG8gbWFpbnRhaW4gcXVldWUgc3RhdGUgd2hlbiBNVUxUSVEgaXMgbm90IGVuYWJsZWQgKi8KKyNkZWZpbmUgVlBBVEhfUVVFVUVfU1RBUlQgICAgICAgMAorI2RlZmluZSBWUEFUSF9RVUVVRV9TVE9QICAgICAgICAxCisJaW50IHF1ZXVlX3N0YXRlOworCisJLyogVHggc3RhdHMgKi8KKwlzdHJ1Y3QgdnhnZV9maWZvX3N0YXRzIHN0YXRzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0cnVjdCB2eGdlX3Jpbmdfc3RhdHMgeworCXU2NCBwcmV2X3J4X2ZybXM7CisJdTY0IHJ4X2ZybXM7CisJdTY0IHJ4X2Vycm9yczsKKwl1NjQgcnhfZHJvcHBlZDsKKwl1NjQgcnhfYnl0ZXM7CisJdTY0IHJ4X21jYXN0OworCXU2NCBwY2lfbWFwX2ZhaWw7CisJdTY0IHNrYl9hbGxvY19mYWlsOworfTsKKworc3RydWN0IHZ4Z2VfcmluZyB7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5kZXY7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZwkqaGFuZGxlOworCS8qIFRoZSB2cGF0aCBpZCBtYWludGFpbmVkIGluIHRoZSBkcml2ZXIgLQorCSAqIDAgdG8gJ21heGltdW1fdnBhdGhzX2luX2Z1bmN0aW9uIC0gMScKKwkgKi8KKwlpbnQgZHJpdmVyX2lkOworCisJIC8qIGNvcHkgb2YgdGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJ4X2NzdW0gaXMgdG8gYmUgdXNlZCAqLworCXUzMiByeF9jc3VtOworCisJaW50IHBrdHNfcHJvY2Vzc2VkOworCWludCBidWRnZXQ7CisJaW50IGdyb19lbmFibGU7CisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKworI2RlZmluZSBWWEdFX01BWF9NQUNfQUREUl9DT1VOVAkJMzAKKworCWludCB2bGFuX3RhZ19zdHJpcDsKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CisJaW50IHJ4X3ZlY3Rvcl9ubzsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIGxhc3Rfc3RhdHVzOworCisJLyogUnggc3RhdHMgKi8KKwlzdHJ1Y3QgdnhnZV9yaW5nX3N0YXRzIHN0YXRzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0cnVjdCB2eGdlX3ZwYXRoIHsKKworCXN0cnVjdCB2eGdlX2ZpZm8gZmlmbzsKKwlzdHJ1Y3QgdnhnZV9yaW5nIHJpbmc7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqaGFuZGxlOworCisJLyogQWN0dWFsIHZwYXRoIGlkIGZvciB0aGlzIHZwYXRoIGluIHRoZSBkZXZpY2UgLSAwIHRvIDE2ICovCisJaW50IGRldmljZV9pZDsKKwlpbnQgbWF4X21hY19hZGRyX2NudDsKKwlpbnQgaXNfY29uZmlndXJlZDsKKwlpbnQgaXNfb3BlbjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dOworCXU4IChtYWNtYXNrKVtFVEhfQUxFTl07CisKKyNkZWZpbmUgVlhHRV9NQVhfTEVBUk5fTUFDX0FERFJfQ05UCTIwNDgKKwkvKiBtYWMgYWRkcmVzc2VzIGN1cnJlbnRseSBwcm9ncmFtbWVkIGludG8gTklDICovCisJdTE2IG1hY19hZGRyX2NudDsKKwl1MTYgbWNhc3RfYWRkcl9jbnQ7CisJc3RydWN0IGxpc3RfaGVhZCBtYWNfYWRkcl9saXN0OworCisJdTMyIGxldmVsX2VycjsKKwl1MzIgbGV2ZWxfdHJhY2U7Cit9OworI2RlZmluZSBWWEdFX0NPUFlfREVCVUdfSU5GT19UT19MTCh2ZGV2LCBlcnIsIHRyYWNlKSB7CVwKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewkJXAorCQl2ZGV2LT52cGF0aHNbaV0ubGV2ZWxfZXJyID0gZXJyOwkJXAorCQl2ZGV2LT52cGF0aHNbaV0ubGV2ZWxfdHJhY2UgPSB0cmFjZTsJCVwKKwl9CQkJCQkJCVwKKwl2ZGV2LT5sZXZlbF9lcnIgPSBlcnI7CQkJCQlcCisJdmRldi0+bGV2ZWxfdHJhY2UgPSB0cmFjZTsJCQkJXAorfQorCitzdHJ1Y3QgdnhnZWRldiB7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5kZXY7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoOworCXN0cnVjdCB2bGFuX2dyb3VwCSp2bGdycDsKKwlpbnQgdmxhbl90YWdfc3RyaXA7CisJc3RydWN0IHZ4Z2VfY29uZmlnCWNvbmZpZzsKKwl1bnNpZ25lZCBsb25nCXN0YXRlOworCisJLyogSW5kaWNhdGVzIHdoaWNoIHZwYXRoIHRvIHJlc2V0ICovCisJdW5zaWduZWQgbG9uZyAgdnBfcmVzZXQ7CisKKwkvKiBUaW1lciB1c2VkIGZvciBwb2xsaW5nIHZwYXRoIHJlc2V0cyAqLworCXN0cnVjdCB0aW1lcl9saXN0IHZwX3Jlc2V0X3RpbWVyOworCisJLyogVGltZXIgdXNlZCBmb3IgcG9sbGluZyB2cGF0aCBsb2NrdXAgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2cF9sb2NrdXBfdGltZXI7CisKKwkvKgorCSAqIEZsYWdzIHRvIHRyYWNrIHdoZXRoZXIgZGV2aWNlIGlzIGluIEFsbCBNdWx0aWNhc3QKKwkgKiBvciBpbiBwcm9taXNjdW91cyBtb2RlLgorCSAqLworCXUxNgkJYWxsX211bHRpX2ZsZzsKKworCSAvKiBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJ4X2NzdW0gaXMgdG8gYmUgdXNlZCBvciBub3QuICovCisJdTMyCXJ4X2NzdW07CisKKwlzdHJ1Y3QgdnhnZV9tc2l4X2VudHJ5ICp2eGdlX2VudHJpZXM7CisJc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXM7CisJLyoKKwkgKiA0IGZvciBlYWNoIHZwYXRoICogMTc7CisJICogdG90YWwgaXMgNjgKKwkgKi8KKyNkZWZpbmUJVlhHRV9NQVhfUkVRVUVTVEVEX01TSVgJNjgKKyNkZWZpbmUgVlhHRV9JTlRSX1NUUkxFTiA4MAorCWNoYXIgZGVzY1tWWEdFX01BWF9SRVFVRVNURURfTVNJWF1bVlhHRV9JTlRSX1NUUkxFTl07CisKKwllbnVtIHZ4Z2VfaHdfZXZlbnQgY3JpY19lcnJfZXZlbnQ7CisKKwlpbnQgbWF4X3ZwYXRoX3N1cHBvcnRlZDsKKwlpbnQgbm9fb2ZfdnBhdGg7CisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwkvKiBBIGRlYnVnIG9wdGlvbiwgd2hlbiBlbmFibGVkIGFuZCBpZiBlcnJvciBjb25kaXRpb24gb2NjdXJzLAorCSAqIHRoZSBkcml2ZXIgd2lsbCBkbyBmb2xsb3dpbmcgc3RlcHM6CisJICogLSBtYXNrIGFsbCBpbnRlcnJ1cHRzCisJICogLSBOb3QgY2xlYXIgdGhlIHNvdXJjZSBvZiB0aGUgYWxhcm0KKwkgKiAtIGdyYWNlZnVsbHkgc3RvcCBhbGwgSS9PCisJICogQSBkaWFnbm9zdGljIGR1bXAgb2YgcmVnaXN0ZXIgYW5kIHN0YXRzIGF0IHRoaXMgcG9pbnQKKwkgKiByZXZlYWxzIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uLgorCSAqLworCWludCBleGVjX21vZGU7CisJaW50IG1heF9jb25maWdfcG9ydDsKKwlzdHJ1Y3QgdnhnZV92cGF0aAkqdnBhdGhzOworCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwX2hhbmRsZXNbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisJdm9pZCBfX2lvbWVtICpiYXIwOworCXZvaWQgX19pb21lbSAqYmFyMTsKKwlzdHJ1Y3QgdnhnZV9zd19zdGF0cwlzdGF0czsKKwlpbnQJCW10dTsKKwkvKiBCZWxvdyB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIHZwYXRoIHNlbGVjdGlvbiB0byB0cmFuc21pdCBhIHBhY2tldCAqLworCXU4IAkJdnBhdGhfc2VsZWN0b3JbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisJdTY0CQl2cGF0aHNfZGVwbG95ZWQ7CisKKwl1MzIgCQlpbnRyX2NudDsKKwl1MzIgCQlsZXZlbF9lcnI7CisJdTMyIAkJbGV2ZWxfdHJhY2U7CisJY2hhcgkJZndfdmVyc2lvbltWWEdFX0hXX0ZXX1NUUkxFTl07Cit9OworCitzdHJ1Y3QgdnhnZV9yeF9wcml2IHsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlkbWFfYWRkcl90CQlkYXRhX2RtYTsKKwlkbWFfYWRkcl90CQlkYXRhX3NpemU7Cit9OworCitzdHJ1Y3QgdnhnZV90eF9wcml2IHsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwlkbWFfYWRkcl90CQlkbWFfYnVmZmVyc1tNQVhfU0tCX0ZSQUdTKzFdOworfTsKKworI2RlZmluZSBWWEdFX01PRFVMRV9QQVJBTV9JTlQocCwgdmFsKSBcCisJc3RhdGljIGludCBwID0gdmFsOyBcCisJbW9kdWxlX3BhcmFtKHAsIGludCwgMCkKKworI2RlZmluZSB2eGdlX29zX2J1ZyhmbXQuLi4pCQl7IHByaW50ayhmbXQpOyBCVUcoKTsgfQorCisjZGVmaW5lIHZ4Z2Vfb3NfdGltZXIodGltZXIsIGhhbmRsZSwgYXJnLCBleHApIGRvIHsgXAorCQlpbml0X3RpbWVyKCZ0aW1lcik7IFwKKwkJdGltZXIuZnVuY3Rpb24gPSBoYW5kbGU7IFwKKwkJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhcmc7IFwKKwkJbW9kX3RpbWVyKCZ0aW1lciwgKGppZmZpZXMgKyBleHApKTsgXAorCX0gd2hpbGUgKDApOworCitpbnQgX19kZXZpbml0IHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJCSAgICBzdHJ1Y3QgdnhnZV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgaW50IGhpZ2hfZG1hLCBpbnQgbm9fb2ZfdnBhdGgsCisJCQkJICAgIHN0cnVjdCB2eGdlZGV2ICoqdmRldik7CisKK3ZvaWQgdnhnZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQgdnhnZV92cGF0aF9pbnRyX2VuYWJsZShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKTsKKwordm9pZCB2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IHZwX2lkKTsKKwordm9pZCB2eGdlX2NhbGxiYWNrX2xpbmtfdXAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit2b2lkIHZ4Z2VfY2FsbGJhY2tfbGlua19kb3duKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2FkZF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwKKwlzdHJ1Y3QgbWFjSW5mbyAqbWFjKTsKKworaW50IHZ4Z2VfbWFjX2xpc3RfZGVsKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYyk7CisKK2ludCB2eGdlX3Jlc2V0KHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9yeF8xYl9jb21wbChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoLCB2b2lkICpkdHIsCisJdTggdF9jb2RlLCB2b2lkICp1c2VyZGF0YSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfeG1pdF9jb21wbChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faHcsIHZvaWQgKmR0ciwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhLCB2b2lkICoqc2tiX3B0cik7CisKK2ludCB2eGdlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitpbnQgdnhnZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCit2b2lkIHZ4Z2VfY2xvc2VfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgaW5kZXgpOworCitpbnQgdnhnZV9vcGVuX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXNldF9hbGxfdnBhdGhzKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKKwordm9pZCB2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKKwordm9pZCB2eGdlX3N0b3BfdHhfcXVldWUoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyk7CisKK3ZvaWQgdnhnZV9zdGFydF9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpOworCit2b2lkIHZ4Z2Vfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgdnhnZV9maWZvICpmaWZvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2FkZF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwKKwlzdHJ1Y3QgbWFjSW5mbyAqbWFjKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2RlbF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwKKwlzdHJ1Y3QgbWFjSW5mbyAqbWFjKTsKKworaW50IHZ4Z2VfbWFjX2xpc3RfYWRkKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwKKwlzdHJ1Y3QgbWFjSW5mbyAqbWFjKTsKKwordm9pZCB2eGdlX2ZyZWVfbWFjX2FkZF9saXN0KHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZShzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpOworCitpbnQgZG9fdnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZG9faW8pOworZXh0ZXJuIHZvaWQgaW5pdGlhbGl6ZV9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CisvKioKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19JTklUOiBkZWJ1ZyBmb3IgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfVFgJIDogZGVidWcgdHJhbnNtaXQgcmVsYXRlZCBmdW5jdGlvbnMKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19SWCAgOiBkZWJ1ZyByZWNldmljZSByZWxhdGVkIGZ1bmN0aW9ucworICogI2RlZmluZSBWWEdFX0RFQlVHX01FTSA6IGRlYnVnIG1lbW9yeSBtb2R1bGUKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19MT0NLOiBkZWJ1ZyBsb2NrcworICogI2RlZmluZSBWWEdFX0RFQlVHX1NFTSA6IGRlYnVnIHNlbWFwaG9yZQorICogI2RlZmluZSBWWEdFX0RFQlVHX0VOVFJZRVhJVDogZGVidWcgZnVuY3Rpb25zIGJ5IGFkZGluZyBlbnRyeSBleGl0IHN0YXRlbWVudHMKKyovCisjZGVmaW5lIFZYR0VfREVCVUdfSU5JVAkJMHgwMDAwMDAwMQorI2RlZmluZSBWWEdFX0RFQlVHX1RYCQkweDAwMDAwMDAyCisjZGVmaW5lIFZYR0VfREVCVUdfUlgJCTB4MDAwMDAwMDQKKyNkZWZpbmUgVlhHRV9ERUJVR19NRU0JCTB4MDAwMDAwMDgKKyNkZWZpbmUgVlhHRV9ERUJVR19MT0NLCQkweDAwMDAwMDEwCisjZGVmaW5lIFZYR0VfREVCVUdfU0VNCQkweDAwMDAwMDIwCisjZGVmaW5lIFZYR0VfREVCVUdfRU5UUllFWElUCTB4MDAwMDAwNDAKKyNkZWZpbmUgVlhHRV9ERUJVR19JTlRSCQkweDAwMDAwMDgwCisjZGVmaW5lIFZYR0VfREVCVUdfTExfQ09ORklHCTB4MDAwMDAxMDAKKworLyogRGVidWcgdHJhY2luZyBmb3IgVlhHRSBkcml2ZXIgKi8KKyNpZm5kZWYgVlhHRV9ERUJVR19NQVNLCisjZGVmaW5lIFZYR0VfREVCVUdfTUFTSwkweDAKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfTExfQ09ORklHICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX2xsX2NvbmZpZyhsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX0xMX0NPTkZJRywgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfbGxfY29uZmlnKGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfSU5JVCAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19pbml0KGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfSU5JVCwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfaW5pdChsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX1RYICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX3R4KGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfVFgsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX3R4KGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfUlggJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfcngobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19SWCwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfcngobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19NRU0gJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfbWVtKGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfTUVNLCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19tZW0obGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19FTlRSWUVYSVQgJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfRU5UUllFWElULCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19JTlRSICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX2ludHIobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19JTlRSLCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z19pbnRyKGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjZGVmaW5lIFZYR0VfREVWSUNFX0RFQlVHX0xFVkVMX1NFVChsZXZlbCwgbWFzaywgdmRldikge1wKKwl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKXZkZXYtPmRldmgsIFwKKwkJbGV2ZWwsIG1hc2spO1wKKwlWWEdFX0NPUFlfREVCVUdfSU5GT19UT19MTCh2ZGV2LCBcCisJCXZ4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldCgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIFwKKwkJCXZkZXYtPmRldmgpLCBcCisJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldCgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIFwKKwkJCXZkZXYtPmRldmgpKTtcCit9CisKKyNpZmRlZiBORVRJRl9GX0dTTworI2RlZmluZSB2eGdlX3RjcF9tc3Moc2tiKSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkKKyNkZWZpbmUgdnhnZV91ZHBfbXNzKHNrYikgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpCisjZGVmaW5lIHZ4Z2Vfb2ZmbG9hZF90eXBlKHNrYikgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmNGRhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaApAQCAtMCwwICsxLDQ2MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLXJlZy5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTyBWaXJ0dWFsaXplZAorICogICAgICAgICAgICAgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfUkVHX0gKKyNkZWZpbmUgVlhHRV9SRUdfSAorCisvKgorICogdnhnZV9tQklUKGxvYykgLSBzZXQgYml0IGF0IG9mZnNldAorICovCisjZGVmaW5lIHZ4Z2VfbUJJVChsb2MpCQkoMHg4MDAwMDAwMDAwMDAwMDAwVUxMID4+IChsb2MpKQorCisvKgorICogdnhnZV92QklUKHZhbCwgbG9jLCBzeikgLSBzZXQgYml0cyBhdCBvZmZzZXQKKyAqLworI2RlZmluZSB2eGdlX3ZCSVQodmFsLCBsb2MsIHN6KQkoKCh1NjQpKHZhbCkpIDw8ICg2NC0obG9jKS0oc3opKSkKKyNkZWZpbmUgdnhnZV92QklUMzIodmFsLCBsb2MsIHN6KQkoKCh1MzIpKHZhbCkpIDw8ICgzMi0obG9jKS0oc3opKSkKKworLyoKKyAqIHZ4Z2VfYlZBTG4oYml0cywgbG9jLCBuKSAtIEdldCB0aGUgdmFsdWUgb2YgbiBiaXRzIGF0IGxvY2F0aW9uCisgKi8KKyNkZWZpbmUgdnhnZV9iVkFMbihiaXRzLCBsb2MsIG4pIFwKKwkoKCgodTY0KWJpdHMpID4+ICg2NC0obG9jK24pKSkgJiAoKDB4MVVMTCA8PCBuKSAtIDEpKQorCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9ERVZJQ0VfSUQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9NQUpPUl9SRVZJU0lPTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX01JTk9SX1JFVklTSU9OKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDU2LCA4KQorCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMV9HRVRfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCA1KQorI2RlZmluZQlWWEdFX0hXX0hPU1RfVFlQRV9BU1NJR05NRU5UU19HRVRfSE9TVF9UWVBFX0FTU0lHTk1FTlRTKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfUEZfU1dfUkVTRVRfQ09NTUFORAkJCQkweEE1CisKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9QQ0lDRkdNR01UX1JFR19TUEFDRVMJCTE3CisjZGVmaW5lIFZYR0VfSFdfVElUQU5fU1JQQ0lNX1JFR19TUEFDRVMJCQkxNworI2RlZmluZSBWWEdFX0hXX1RJVEFOX1ZQTUdNVF9SRUdfU1BBQ0VTCQkJMTcKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTCQkJMTcKKworI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9SRVNFUlZFRAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfQVNJQ19NT0RFX05PX0lPVgkJCQkxCisjZGVmaW5lIFZYR0VfSFdfQVNJQ19NT0RFX1NSX0lPVgkJCQkyCisjZGVmaW5lIFZYR0VfSFdfQVNJQ19NT0RFX01SX0lPVgkJCQkzCisKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fQ0ZHMV9UTUFDX1BFUk1BX1NUT1BfRU4JCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9DRkcxX0JMT0NLX0JDQVNUX1RPX1dJUkUJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fQ0ZHMV9CTE9DS19CQ0FTVF9UT19TV0lUQ0gJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9DRkcxX0hPU1RfQVBQRU5EX0ZDUwkJCXZ4Z2VfbUJJVCgzMSkKKworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0lTX0ZJUlNUX0dFVF9WUEFUSF9JU19GSVJTVChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisKKyNkZWZpbmUJVlhHRV9IV19USU1fVlBBVEhfQVNTSUdOTUVOVF9HRVRfQk1BUF9ST09UKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0dFVF9NQVhfUFlMRF9MRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNTAsIDE0KQorCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFU19WUF9HRVRfVlNQT1JUX1ZFQ1RPUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAxNykKKworI2RlZmluZQlWWEdFX0hXX1hNQUNfVlBBVEhfVE9fVlNQT1JUX1ZQTUdNVF9DTE9ORV9HRVRfVlNQT1JUX05VTUJFUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCA1KQorCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19EUkJMX1RSSVBMRVRfVE9UQUxfR0VUX0tERkNfTUFYX1NJWkUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTcsIDE1KQorCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREVfTEVHQUNZX01PREUJCQkwCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREVfTk9OX09GRkxPQURfT05MWQkJMQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFX01VTFRJX09QX01PREUJCTIKKworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9NT0RFX01FU1NBR0VTX09OTFkJCTAKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfTU9ERV9NVUxUSV9PUF9NT0RFCQkxCisKKyNkZWZpbmUJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsKSBcCisJCQkJKHZhbCZ+VlhHRV9IV19UT0NfS0RGQ19JTklUSUFMX0JJUig3KSkKKyNkZWZpbmUJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9CSVIodmFsKSBcCisJCQkJdnhnZV9iVkFMbih2YWwsIDYxLCAzKQorI2RlZmluZQlWWEdFX0hXX1RPQ19HRVRfVVNEQ19JTklUSUFMX09GRlNFVCh2YWwpIFwKKwkJCQkodmFsJn5WWEdFX0hXX1RPQ19VU0RDX0lOSVRJQUxfQklSKDcpKQorI2RlZmluZQlWWEdFX0hXX1RPQ19HRVRfVVNEQ19JTklUSUFMX0JJUih2YWwpIFwKKwkJCQl2eGdlX2JWQUxuKHZhbCwgNjEsIDMpCisKKyNkZWZpbmUJVlhHRV9IV19UT0NfS0RGQ19WUEFUSF9TVFJJREVfR0VUX1RPQ19LREZDX1ZQQVRIX1NUUklERShiaXRzKQliaXRzCisjZGVmaW5lCVZYR0VfSFdfVE9DX0tERkNfRklGT19TVFJJREVfR0VUX1RPQ19LREZDX0ZJRk9fU1RSSURFKGJpdHMpCWJpdHMKKworI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9HRVRfS0RGQ19SQ1RSMChiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDEsIDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9HRVRfS0RGQ19SQ1RSMShiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE3LCAxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfR0VUX0tERkNfUkNUUjIoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMywgMTUpCisKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19WQVBUSF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCA0MiwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19GSUZPX05VTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ3LCAyKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX0ZJRk9fT0ZGU0VUKHZhbCkgXAorCQkJCQl2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREVfT05FX0JVRkZFUgkJCTAKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREVfVEhSRUVfQlVGRkVSCQkJMQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc0X1JJTkdfTU9ERV9GSVZFX0JVRkZFUgkJCTIKKworI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9BCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQgkJCQkyCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0MJCQkJMQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX1dFX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfV0VfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1ZJRCAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRVRZUEUgICAgICAgICAgICAgICAyCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9QTiAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JBTkdFX1BOICAgICAgICAgICAgNAorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0dFTl9DRkcgICAgICAgICA1CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfU09MT19JVCAgICAgICAgIDYKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9KSEFTSF9DRkcgICAgICAgNworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01BU0sgICAgICAgICAgICA4CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfS0VZICAgICAgICAgICAgIDkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1FPUyAgICAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RTICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCAgICAgICAgMTIKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX1ZFUlNJT04gICAgICAgICAgMTMKKworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTBfR0VUX0RBX01BQ19BRERSKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTBfREFfTUFDX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9BRERfUFJJVklMRUdFRF9NT0RFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDU0KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX0FERF9WUEFUSChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1NSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0RBX01BQ19BRERSX0FERF9WUEFUSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9BRERfTU9ERShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA2MiwgMikKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCA2MiwgMikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fQUREX0VOVFJZCQkJMAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fREVMRVRFX0VOVFJZCQkxCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX0ZJUlNUX0VOVFJZCQkyCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX05FWFRfRU5UUlkJCTMKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfRU5UUlkJCQkwCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9XUklURV9FTlRSWQkJMQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZCQkzCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MRURfQ09OVFJPTAkJNAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fQUxMX0NMRUFSCQkJMTcyCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBCQkwCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQJCTEKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0VUWVBFCQkyCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9QTgkJMworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0dFTl9DRkcJNQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQJNgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0pIQVNIX0NGRwk3CisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTUFTSwkJOAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0tFWQkJOQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUU9TCQkxMAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRFMJCTExCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQJMTIKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8JCTEzCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9EQV9NQUNfQUREUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RBX01BQ19BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9WTEFOX0lEKGJpdHMpIHZ4Z2VfYlZBTG4oYml0cywgMCwgMTIpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9WTEFOX0lEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9FVFlQRShiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDExKQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRVRZUEUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1BOX1NSQ19ERVNUX1NFTChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUE5fU1JDX0RFU1RfU0VMCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9QTl9UQ1BfVURQX1NFTChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA3LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUE5fVENQX1VEUF9TRUwJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1BOX1BPUlRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUE5fUE9SVF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCA4LCAxNikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9FTgkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9CVUNLRVRfU0laRShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9CVUNLRVRfU0laRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fQUxHX1NFTChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxMCwgMikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMCwgMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTF9KRU5LSU5TCTAKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTF9NU19SU1MJMQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMX0NSQzMyQwkyCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfVENQX0lQVjRfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTUsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNF9FTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfSVBWNF9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxOSwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjRfRU4JdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDIzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjZfRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX0lQVjZfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjcsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY2X0VOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FWF9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMSwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VYX0VOIHZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9JUFY2X0VYX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDM1LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNl9FWF9FTgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9BQ1RJVkVfVEFCTEUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzksIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FDVElWRV9UQUJMRQl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SRVBMX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SRVBMX0VOVFJZX0VOCXZ4Z2VfbUJJVCg0MykKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9TT0xPX0lUX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfU09MT19JVF9FTlRSWV9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfU09MT19JVF9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX1NPTE9fSVRfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgNykKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMF9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMF9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0VOVFJZX0VOCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMF9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0xX0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTFfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjQsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfRU5UUllfRU4JdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMV9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMV9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTBfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTBfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9FTlRSWV9FTgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTBfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMV9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0xX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI0LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0VOVFJZX0VOCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTFfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjUsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTFfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjUsIDcpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSkhBU0hfQ0ZHX0dPTERFTl9SQVRJTyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9KSEFTSF9DRkdfR09MREVOX1JBVElPKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9KSEFTSF9DRkdfSU5JVF9WQUxVRShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSkhBU0hfQ0ZHX0lOSVRfVkFMVUUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfSVBWNl9TQV9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfSVBWNl9TQV9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0lQVjZfREFfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19JUFY2X0RBX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0lQVjRfU0FfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0lQVjRfU0FfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19JUFY0X0RBX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19JUFY0X0RBX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfTDRTUF9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQwLCAyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfTDRTUF9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQwLCAyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0w0RFBfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MiwgMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0w0RFBfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MiwgMikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9LRVlfS0VZKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDY0KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0tFWV9LRVkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9RT1NfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1FPU19FTlRSWV9FTgkJdnhnZV9tQklUKDMpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9EU19FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRFNfRU5UUllfRU4JCXZ4Z2VfbUJJVCgzKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NT0RFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDYyLCAyKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU00X0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNF9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU00X0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTRfRU5UUllfRU4JdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU00X0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTRfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTVfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNV9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNV9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNV9FTlRSWV9FTgl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU01X0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI1LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU01X0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI1LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNl9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU02X0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU02X0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQwLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU02X0VOVFJZX0VOCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTZfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDEsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTZfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDEsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU03X0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTdfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTdfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNTYsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTdfRU5UUllfRU4JdnhnZV9tQklUKDU2KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNN19CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1NywgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNN19CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NywgNykKKworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1BBUlRfTlVNQkVSICAgICAgICAgICAwCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fU0VSSUFMX05VTUJFUiAgICAgICAgIDEKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9WRVJTSU9OICAgICAgICAgICAgICAgMgorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1BDSV9NT0RFICAgICAgICAgICAgICAzCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18wICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzEgICAgICAgICAgICAgICAgNQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMiAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18zICAgICAgICAgICAgICAgIDcKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTEVEX0NPTlRST0xfT04JCQkxCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9MRURfQ09OVFJPTF9PRkYJCQkwCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfREFZKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfREFZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTU9OVEgoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9NT05USCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX1lFQVIoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfWUVBUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUFKT1IoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9NQUpPUiB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfTUlOT1IoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0ZXX1ZFUl9NSU5PUiB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfQlVJTEQoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0OCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfQlVJTEQgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0RBWShiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfREFZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTU9OVEgoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9NT05USCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX1lFQVIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX1lFQVIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01BSk9SKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX01BSk9SIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NSU5PUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9NSU5PUiB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfQlVJTEQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX0JVSUxEIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19WUEFUSF9BTEFSTV9SRUdfR0VUX1BQSUZfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNKGJpdHMpXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTgpCisKKyNkZWZpbmUJVlhHRV9IV19SWF9NVUxUSV9DQVNUX1NUQVRTX0dFVF9GUkFNRV9ESVNDQVJEKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKKyNkZWZpbmUJVlhHRV9IV19SWF9GUk1fVFJBTlNGRVJSRURfR0VUX1JYX0ZSTV9UUkFOU0ZFUlJFRChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfUlhEX1JFVFVSTkVEX0dFVF9SWERfUkVUVVJORUQoYml0cykJdnhnZV9iVkFMbihiaXRzLCA0OCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMwX0dFVF9JTklfTlVNX01XUl9TRU5UKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMV9HRVRfSU5JX05VTV9NUkRfU0VOVChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzJfR0VUX0lOSV9OVU1fQ1BMX1JDVkQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMzX0dFVF9JTklfTlVNX01XUl9CWVRFX1NFTlQoYml0cykJKGJpdHMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM0X0dFVF9JTklfTlVNX0NQTF9CWVRFX1JDVkQoYml0cykJKGJpdHMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM1X0dFVF9XUkNSRFRBUkJfWE9GRihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM2X0dFVF9SRENSRFRBUkJfWE9GRihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDAoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQzKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQyKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDRfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0KGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TX0dFVF9UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUyhiaXRzXAorKSB2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9DUkNfRkFJTF9GUk1TKGJpdHMpIHZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfTVJLX0ZBSUxfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfTEVOX0ZBSUxfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfV09MX0ZSTVMoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfUEVSTUlUVEVEX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDE2KQorCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMF9HRVRfSU5JX1dSX0RST1AoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMF9HRVRfSU5JX1JEX0RST1AoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzFfR0VUX1ZQTEFORV9XUkNSRFRBUkJfUEhfQ1JEVF9ERVBMRVRFRChiaXRzXAorKSB2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMyX0dFVF9WUExBTkVfV1JDUkRUQVJCX1BEX0NSRFRfREVQTEVURUQoYml0c1wKKykgdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lIFwKK1ZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTM19HRVRfVlBMQU5FX1JEQ1JEVEFSQl9OUEhfQ1JEVF9ERVBMRVRFRChiaXRzKSBcCisJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTNF9HRVRfSU5JX1dSX1ZQSU5fRFJPUChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFM0X0dFVF9JTklfUkRfVlBJTl9EUk9QKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDAxX0dFVF9HRU5TVEFUU19DT1VOVDEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQwMV9HRVRfR0VOU1RBVFNfQ09VTlQwKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDIzX0dFVF9HRU5TVEFUU19DT1VOVDMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQyM19HRVRfR0VOU1RBVFNfQ09VTlQyKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUU19DT1VOVDRfR0VUX0dFTlNUQVRTX0NPVU5UNChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQ1X0dFVF9HRU5TVEFUU19DT1VOVDUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMwX0dFVF9SU1REUk9QX01TRyhiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTMF9HRVRfUlNURFJPUF9DUEwoYml0cykJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMxX0dFVF9SU1REUk9QX0NMSUVOVDAoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzFfR0VUX1JTVERST1BfQ0xJRU5UMShiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzJfR0VUX1JTVERST1BfQ0xJRU5UMihiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTM19HRVRfVlBMQU5FX0RFUExfUEgoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzNfR0VUX1ZQTEFORV9ERVBMX05QSChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzNfR0VUX1ZQTEFORV9ERVBMX0NQTEgoYml0cykJdnhnZV9iVkFMbihiaXRzLCAzMiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFM0X0dFVF9WUExBTkVfREVQTF9QRChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTNF9HRVRfVlBMQU5FX0RFUExfTlBEKGJpdHMpCWJWQUwoYml0cywgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTNF9HRVRfVlBMQU5FX0RFUExfQ1BMRChiaXRzKQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAxNikKKworI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19UUEFfVFhfUEFUSF9HRVRfVFhfUEVSTUlUVEVEX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfR0VUX1BPUlQwX1RYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfR0VUX1BPUlQxX1RYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfR0VUX1BPUlQyX1RYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCA4KQorCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfR0VUX1BPUlQwX1JYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfR0VUX1BPUlQxX1JYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfR0VUX1BPUlQyX1JYX0FOWV9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCA4KQorCisjZGVmaW5lIFZYR0VfSFdfQ09ORklHX1BSSVZfSAorCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9JTklUSUFMX1ZBTFVFCQkJMHgwMTIzNDU2Nzg5YWJjZGVmVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9CWVRFX1NXQVBQRUQJCQkweGVmY2RhYjg5Njc0NTIzMDFVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX0JJVF9GTElQUEVECQkJMHg4MGM0YTJlNjkxZDViM2Y3VUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9CWVRFX1NXQVBQRURfQklUX0ZMSVBQRUQJMHhmN2IzZDU5MWU2YTJjNDgwVUxMCisKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0VOQUJMRQkJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JZVEVfU1dBUF9ESVNBQkxFCQkweDAwMDAwMDAwMDAwMDAwMDBVTEwKKworI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9FTkFCTEUJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9ESVNBQkxFCQkweDAwMDAwMDAwMDAwMDAwMDBVTEwKKworI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0VOQUJMRQkJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwVUxMCisKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0VOQUJMRQkJMHhGRkZGRkZGRkZGRkZGRkZGVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9XUklURV9CSVRfRkxBUF9ESVNBQkxFCQkweDAwMDAwMDAwMDAwMDAwMDBVTEwKKworLyoKKyAqIFRoZSByZWdpc3RlcnMgYXJlIG1lbW9yeSBtYXBwZWQgYW5kIGFyZSBuYXRpdmUgYmlnLWVuZGlhbiBieXRlIG9yZGVyLiBUaGUKKyAqIGxpdHRsZS1lbmRpYW4gaG9zdHMgYXJlIGhhbmRsZWQgYnkgZW5hYmxpbmcgaGFyZHdhcmUgYnl0ZS1zd2FwcGluZyBmb3IKKyAqIHJlZ2lzdGVyIGFuZCBkbWEgb3BlcmF0aW9ucy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyB7CisKKwl1OAl1bnVzZWQwMDAxMFsweDAwMDEwXTsKKworLyoweDAwMDEwKi8JdTY0CXRvY19zd2FwcGVyX2ZiOworI2RlZmluZSBWWEdFX0hXX1RPQ19TV0FQUEVSX0ZCX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwMTgqLwl1NjQJcGlmbV9yZF9zd2FwX2VuOworI2RlZmluZSBWWEdFX0hXX1BJRk1fUkRfU1dBUF9FTl9QSUZNX1JEX1NXQVBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDAyMCovCXU2NAlwaWZtX3JkX2ZsaXBfZW47CisjZGVmaW5lIFZYR0VfSFdfUElGTV9SRF9GTElQX0VOX1BJRk1fUkRfRkxJUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDI4Ki8JdTY0CXBpZm1fd3Jfc3dhcF9lbjsKKyNkZWZpbmUgVlhHRV9IV19QSUZNX1dSX1NXQVBfRU5fUElGTV9XUl9TV0FQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwMzAqLwl1NjQJcGlmbV93cl9mbGlwX2VuOworI2RlZmluZSBWWEdFX0hXX1BJRk1fV1JfRkxJUF9FTl9QSUZNX1dSX0ZMSVBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDAzOCovCXU2NAl0b2NfZmlyc3RfcG9pbnRlcjsKKyNkZWZpbmUgVlhHRV9IV19UT0NfRklSU1RfUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDQwKi8JdTY0CWhvc3RfYWNjZXNzX2VuOworI2RlZmluZSBWWEdFX0hXX0hPU1RfQUNDRVNTX0VOX0hPU1RfQUNDRVNTX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X3RvY19yZWcgeworCisJdTgJdW51c2VkMDAwNTBbMHgwMDA1MF07CisKKy8qMHgwMDA1MCovCXU2NAl0b2NfY29tbW9uX3BvaW50ZXI7CisjZGVmaW5lIFZYR0VfSFdfVE9DX0NPTU1PTl9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwNTgqLwl1NjQJdG9jX21lbXJlcGFpcl9wb2ludGVyOworI2RlZmluZSBWWEdFX0hXX1RPQ19NRU1SRVBBSVJfUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDYwKi8JdTY0CXRvY19wY2ljZmdtZ210X3BvaW50ZXJbMTddOworI2RlZmluZSBWWEdFX0hXX1RPQ19QQ0lDRkdNR01UX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDFlMFsweDAwMWUwLTB4MDAwZThdOworCisvKjB4MDAxZTAqLwl1NjQJdG9jX21ycGNpbV9wb2ludGVyOworI2RlZmluZSBWWEdFX0hXX1RPQ19NUlBDSU1fUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMWU4Ki8JdTY0CXRvY19zcnBjaW1fcG9pbnRlclsxN107CisjZGVmaW5lIFZYR0VfSFdfVE9DX1NSUENJTV9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDAyNzhbMHgwMDI3OC0weDAwMjcwXTsKKworLyoweDAwMjc4Ki8JdTY0CXRvY192cG1nbXRfcG9pbnRlclsxN107CisjZGVmaW5lIFZYR0VfSFdfVE9DX1ZQTUdNVF9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDAzOTBbMHgwMDM5MC0weDAwMzAwXTsKKworLyoweDAwMzkwKi8JdTY0CXRvY192cGF0aF9wb2ludGVyWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19UT0NfVlBBVEhfUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwNGEwWzB4MDA0YTAtMHgwMDQxOF07CisKKy8qMHgwMDRhMCovCXU2NAl0b2Nfa2RmYzsKKyNkZWZpbmUgVlhHRV9IV19UT0NfS0RGQ19JTklUSUFMX09GRlNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDYxKQorI2RlZmluZSBWWEdFX0hXX1RPQ19LREZDX0lOSVRJQUxfQklSKHZhbCkgdnhnZV92QklUKHZhbCwgNjEsIDMpCisvKjB4MDA0YTgqLwl1NjQJdG9jX3VzZGM7CisjZGVmaW5lIFZYR0VfSFdfVE9DX1VTRENfSU5JVElBTF9PRkZTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2MSkKKyNkZWZpbmUgVlhHRV9IV19UT0NfVVNEQ19JTklUSUFMX0JJUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYxLCAzKQorLyoweDAwNGIwKi8JdTY0CXRvY19rZGZjX3ZwYXRoX3N0cmlkZTsKKyNkZWZpbmUJVlhHRV9IV19UT0NfS0RGQ19WUEFUSF9TVFJJREVfSU5JVElBTF9UT0NfS0RGQ19WUEFUSF9TVFJJREUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDA0YjgqLwl1NjQJdG9jX2tkZmNfZmlmb19zdHJpZGU7CisjZGVmaW5lCVZYR0VfSFdfVE9DX0tERkNfRklGT19TVFJJREVfSU5JVElBTF9UT0NfS0RGQ19GSUZPX1NUUklERSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZyB7CisKKwl1OAl1bnVzZWQwMGEwMFsweDAwYTAwXTsKKworLyoweDAwYTAwKi8JdTY0CXByY19zdGF0dXMxOworI2RlZmluZSBWWEdFX0hXX1BSQ19TVEFUVVMxX1BSQ19WUF9RVUlFU0NFTlQobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMDgqLwl1NjQJcnhkY21fcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfUlhEQ01fUkVTRVRfSU5fUFJPR1JFU1NfUFJDX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTEwKi8JdTY0CXJlcGxpY3FfZmx1c2hfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfUkVQTElDUV9GTFVTSF9JTl9QUk9HUkVTU19OT0FfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMTgqLwl1NjQJcnhwZV9jbWRzX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX1JYUEVfQ01EU19SRVNFVF9JTl9QUk9HUkVTU19OT0FfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMjAqLwl1NjQJbXhwX2NtZHNfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfTVhQX0NNRFNfUkVTRVRfSU5fUFJPR1JFU1NfTk9BX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTI4Ki8JdTY0CW5vZmZsb2FkX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX05PRkZMT0FEX1JFU0VUX0lOX1BST0dSRVNTX1BSQ19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEzMCovCXU2NAlyZF9yZXFfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfUkRfUkVRX0lOX1BST0dSRVNTX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTM4Ki8JdTY0CXJkX3JlcV9vdXRzdGFuZGluZzsKKyNkZWZpbmUgVlhHRV9IV19SRF9SRVFfT1VUU1RBTkRJTkdfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhNDAqLwl1NjQJa2RmY19yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1JFU0VUX0lOX1BST0dSRVNTX05PQV9WUChuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMGIwMFsweDAwYjAwLTB4MDBhNDhdOworCisvKjB4MDBiMDAqLwl1NjQJb25lX2NmZ192cDsKKyNkZWZpbmUgVlhHRV9IV19PTkVfQ0ZHX1ZQX1JEWShuKQl2eGdlX21CSVQobikKKy8qMHgwMGIwOCovCXU2NAlvbmVfY29tbW9uOworI2RlZmluZSBWWEdFX0hXX09ORV9DT01NT05fUEVUX1ZQQVRIX1JFU0VUX0lOX1BST0dSRVNTKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAwYjgwWzB4MDBiODAtMHgwMGIxMF07CisKKy8qMHgwMGI4MCovCXU2NAl0aW1faW50X2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRfRU5fVElNX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYjg4Ki8JdTY0CXRpbV9zZXRfaW50X2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9TRVRfSU5UX0VOX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYjkwKi8JdTY0CXRpbV9jbHJfaW50X2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9DTFJfSU5UX0VOX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYjk4Ki8JdTY0CXRpbV9tYXNrX2ludF9kdXJpbmdfcmVzZXQ7CisjZGVmaW5lIFZYR0VfSFdfVElNX01BU0tfSU5UX0RVUklOR19SRVNFVF9WUEFUSChuKQl2eGdlX21CSVQobikKKy8qMHgwMGJhMCovCXU2NAl0aW1fcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfVElNX1JFU0VUX0lOX1BST0dSRVNTX1RJTV9WUEFUSChuKQl2eGdlX21CSVQobikKKy8qMHgwMGJhOCovCXU2NAl0aW1fb3V0c3RhbmRpbmdfYm1hcDsKKyNkZWZpbmUgVlhHRV9IV19USU1fT1VUU1RBTkRJTkdfQk1BUF9USU1fVlBBVEgobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDBjMDBbMHgwMGMwMC0weDAwYmIwXTsKKworLyoweDAwYzAwKi8JdTY0CW1zZ19yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19NU0dfUkVTRVRfSU5fUFJPR1JFU1NfTVNHX0NPTVBPU0lURSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwYzA4Ki8JdTY0CW1zZ19teHBfbXJfcmVhZHk7CisjZGVmaW5lIFZYR0VfSFdfTVNHX01YUF9NUl9SRUFEWV9NUF9CT09URUQobikJdnhnZV9tQklUKG4pCisvKjB4MDBjMTAqLwl1NjQJbXNnX3V4cF9tcl9yZWFkeTsKKyNkZWZpbmUgVlhHRV9IV19NU0dfVVhQX01SX1JFQURZX1VQX0JPT1RFRChuKQl2eGdlX21CSVQobikKKy8qMHgwMGMxOCovCXU2NAltc2dfZG1xX25vbmlfcnRsX3ByZWZldGNoOworI2RlZmluZSBWWEdFX0hXX01TR19ETVFfTk9OSV9SVExfUFJFRkVUQ0hfQllQQVNTX0VOQUJMRShuKQl2eGdlX21CSVQobikKKy8qMHgwMGMyMCovCXU2NAltc2dfdW1xX3J0bF9id3I7CisjZGVmaW5lIFZYR0VfSFdfTVNHX1VNUV9SVExfQldSX1BSRUZFVENIX0RJU0FCTEUobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDBkMDBbMHgwMGQwMC0weDAwYzI4XTsKKworLyoweDAwZDAwKi8JdTY0CWNtbl9yc3RoZGxyX2NmZzA7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHMF9TV19SRVNFVF9WUEFUSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZDA4Ki8JdTY0CWNtbl9yc3RoZGxyX2NmZzE7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHMV9DTFJfVlBBVEhfUkVTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGQxMCovCXU2NAljbW5fcnN0aGRscl9jZmcyOworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzJfU1dfUkVTRVRfRklGTzAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGQxOCovCXU2NAljbW5fcnN0aGRscl9jZmczOworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzNfU1dfUkVTRVRfRklGTzEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGQyMCovCXU2NAljbW5fcnN0aGRscl9jZmc0OworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzRfU1dfUkVTRVRfRklGTzIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMGQ0MFsweDAwZDQwLTB4MDBkMjhdOworCisvKjB4MDBkNDAqLwl1NjQJY21uX3JzdGhkbHJfY2ZnODsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkc4X0lOQ1JfVlBBVEhfSU5TVF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGQ0OCovCXU2NAlzdGF0c19jZmcwOworI2RlZmluZSBWWEdFX0hXX1NUQVRTX0NGRzBfU1RBVFNfRU5BQkxFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDBkYThbMHgwMGRhOC0weDAwZDUwXTsKKworLyoweDAwZGE4Ki8JdTY0CWNsZWFyX21zaXhfbWFza192ZWN0WzRdOworI2RlZmluZSBWWEdFX0hXX0NMRUFSX01TSVhfTUFTS19WRUNUX0NMRUFSX01TSVhfTUFTS19WRUNUKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkYzgqLwl1NjQJc2V0X21zaXhfbWFza192ZWN0WzRdOworI2RlZmluZSBWWEdFX0hXX1NFVF9NU0lYX01BU0tfVkVDVF9TRVRfTVNJWF9NQVNLX1ZFQ1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGRlOCovCXU2NAljbGVhcl9tc2l4X21hc2tfYWxsX3ZlY3Q7CisjZGVmaW5lCVZYR0VfSFdfQ0xFQVJfTVNJWF9NQVNLX0FMTF9WRUNUX0NMRUFSX01TSVhfTUFTS19BTExfVkVDVCh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGRmMCovCXU2NAlzZXRfbXNpeF9tYXNrX2FsbF92ZWN0OworI2RlZmluZQlWWEdFX0hXX1NFVF9NU0lYX01BU0tfQUxMX1ZFQ1RfU0VUX01TSVhfTUFTS19BTExfVkVDVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGRmOCovCXU2NAltYXNrX3ZlY3Rvcls0XTsKKyNkZWZpbmUgVlhHRV9IV19NQVNLX1ZFQ1RPUl9NQVNLX1ZFQ1RPUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZTE4Ki8JdTY0CW1zaXhfcGVuZGluZ192ZWN0b3JbNF07CisjZGVmaW5lIFZYR0VfSFdfTVNJWF9QRU5ESU5HX1ZFQ1RPUl9NU0lYX1BFTkRJTkdfVkVDVE9SKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZTM4Ki8JdTY0CWNscl9tc2l4X29uZV9zaG90X3ZlY1s0XTsKKyNkZWZpbmUJVlhHRV9IV19DTFJfTVNJWF9PTkVfU0hPVF9WRUNfQ0xSX01TSVhfT05FX1NIT1RfVkVDKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZTU4Ki8JdTY0CXRpdGFuX2FzaWNfaWQ7CisjZGVmaW5lIFZYR0VfSFdfVElUQU5fQVNJQ19JRF9JTklUSUFMX0RFVklDRV9JRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX1RJVEFOX0FTSUNfSURfSU5JVElBTF9NQUpPUl9SRVZJU0lPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCA4KQorI2RlZmluZSBWWEdFX0hXX1RJVEFOX0FTSUNfSURfSU5JVElBTF9NSU5PUl9SRVZJU0lPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU2LCA4KQorLyoweDAwZTYwKi8JdTY0CXRpdGFuX2dlbmVyYWxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfTVJQQ0lNX0FMQVJNX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfU1JQQ0lNX0FMQVJNX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfQUxBUk1fSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19WUEFUSF9UUkFGRklDX0lOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCAxNykKKwl1OAl1bnVzZWQwMGU3MFsweDAwZTcwLTB4MDBlNjhdOworCisvKjB4MDBlNzAqLwl1NjQJdGl0YW5fbWFza19hbGxfaW50OworI2RlZmluZQlWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9BTEFSTQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9NQVNLX0FMTF9JTlRfVFJBRkZJQwl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDBlODBbMHgwMGU4MC0weDAwZTc4XTsKKworLyoweDAwZTgwKi8JdTY0CXRpbV9pbnRfc3RhdHVzMDsKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UX1NUQVRVUzBfVElNX0lOVF9TVEFUVVMwKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBlODgqLwl1NjQJdGltX2ludF9tYXNrMDsKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UX01BU0swX1RJTV9JTlRfTUFTSzAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGU5MCovCXU2NAl0aW1faW50X3N0YXR1czE7CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVF9TVEFUVVMxX1RJTV9JTlRfU1RBVFVTMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisvKjB4MDBlOTgqLwl1NjQJdGltX2ludF9tYXNrMTsKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UX01BU0sxX1RJTV9JTlRfTUFTSzEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorLyoweDAwZWEwKi8JdTY0CXJ0aV9pbnRfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX1JUSV9JTlRfU1RBVFVTX1JUSV9JTlRfU1RBVFVTKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlYTgqLwl1NjQJcnRpX2ludF9tYXNrOworI2RlZmluZSBWWEdFX0hXX1JUSV9JTlRfTUFTS19SVElfSU5UX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGViMCovCXU2NAlhZGFwdGVyX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19SVERNQV9SVERNQV9SRUFEWQl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19XUkRNQV9XUkRNQV9SRUFEWQl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19LREZDX0tERkNfUkVBRFkJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfVFBBX1RNQUNfQlVGX0VNUFRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1JEQ1RMX1BJQ19RVUlFU0NFTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfWEdNQUNfTkVUV09SS19GQVVMVAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19ST0NSQ19PRkZMT0FEX1FVSUVTQ0VOVAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19HM0lGX0ZCX0czSUZfRkJfR0REUjNfUkVBRFkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfRzNJRl9DTV9HM0lGX0NNX0dERFIzX1JFQURZCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1JJQ19SSUNfUlVOTklORwl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19DTUdfQ19QTExfSU5fTE9DSwl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfWEdNQUNfWF9QTExfSU5fTE9DSwl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfRkJJRl9NX1BMTF9JTl9MT0NLCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUgVlhHRV9IV19BREFQVEVSX1NUQVRVU19QQ0NfUENDX0lETEUodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19BREFQVEVSX1NUQVRVU19ST0NSQ19SQ19QUkNfUVVJRVNDRU5UKHZhbCkgdnhnZV92QklUKHZhbCwgNDQsIDgpCisvKjB4MDBlYjgqLwl1NjQJZ2VuX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX01SUENJTV9XUl9ESVMJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX01SUENJTV9SRF9ESVMJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX1NSUENJTV9XUl9ESVMJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX1NSUENJTV9SRF9ESVMJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX0RFQlVHX0RJUwl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19HRU5fQ1RSTF9TUElfQVBQX0xUU1NNX1RJTUVSX0RJUwl2eGdlX21CSVQoNSkKKyNkZWZpbmUgVlhHRV9IV19HRU5fQ1RSTF9TUElfTk9UX1VTRUQodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCA0KQorCXU4CXVudXNlZDAwZWQwWzB4MDBlZDAtMHgwMGVjMF07CisKKy8qMHgwMGVkMCovCXU2NAlhZGFwdGVyX3JlYWR5OworI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfUkVBRFlfQURBUFRFUl9SRUFEWQl2eGdlX21CSVQoNjMpCisvKjB4MDBlZDgqLwl1NjQJb3V0c3RhbmRpbmdfcmVhZDsKKyNkZWZpbmUgVlhHRV9IV19PVVRTVEFORElOR19SRUFEX09VVFNUQU5ESU5HX1JFQUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGVlMCovCXU2NAl2cGF0aF9yc3RfaW5fcHJvZzsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SU1RfSU5fUFJPR19WUEFUSF9SU1RfSU5fUFJPRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZWU4Ki8JdTY0CXZwYXRoX3JlZ19tb2RpZmllZDsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SRUdfTU9ESUZJRURfVlBBVEhfUkVHX01PRElGSUVEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDBmYzBbMHgwMGZjMC0weDAwZWYwXTsKKworLyoweDAwZmMwKi8JdTY0CWNwX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX0NQX1JFU0VUX0lOX1BST0dSRVNTX0NQX1ZQQVRIKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAxMDgwWzB4MDEwODAtMHgwMGZjOF07CisKKy8qMHgwMTA4MCovCXU2NAl4Z21hY19yZWFkeTsKKyNkZWZpbmUgVlhHRV9IV19YR01BQ19SRUFEWV9YTUFDSl9SRUFEWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAxMGMwWzB4MDEwYzAtMHgwMTA4OF07CisKKy8qMHgwMTBjMCovCXU2NAlmYmlmX3JlYWR5OworI2RlZmluZSBWWEdFX0hXX0ZCSUZfUkVBRFlfRkFVX1JFQURZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDExMDBbMHgwMTEwMC0weDAxMGM4XTsKKworLyoweDAxMTAwKi8JdTY0CXZwbGFuZV9hc3NpZ25tZW50czsKKyNkZWZpbmUgVlhHRV9IV19WUExBTkVfQVNTSUdOTUVOVFNfVlBMQU5FX0FTU0lHTk1FTlRTKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKy8qMHgwMTEwOCovCXU2NAl2cGF0aF9hc3NpZ25tZW50czsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9BU1NJR05NRU5UU19WUEFUSF9BU1NJR05NRU5UUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMTEwKi8JdTY0CXJlc291cmNlX2Fzc2lnbm1lbnRzOworI2RlZmluZSBWWEdFX0hXX1JFU09VUkNFX0FTU0lHTk1FTlRTX1JFU09VUkNFX0FTU0lHTk1FTlRTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDExMTgqLwl1NjQJaG9zdF90eXBlX2Fzc2lnbm1lbnRzOworI2RlZmluZQlWWEdFX0hXX0hPU1RfVFlQRV9BU1NJR05NRU5UU19IT1NUX1RZUEVfQVNTSUdOTUVOVFModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNSwgMykKKwl1OAl1bnVzZWQwMTEyOFsweDAxMTI4LTB4MDExMjBdOworCisvKjB4MDExMjgqLwl1NjQJbWF4X3Jlc291cmNlX2Fzc2lnbm1lbnRzOworI2RlZmluZSBWWEdFX0hXX01BWF9SRVNPVVJDRV9BU1NJR05NRU5UU19QQ0lfTUFYX1ZQTEFORSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX01BWF9SRVNPVVJDRV9BU1NJR05NRU5UU19QQ0lfTUFYX1ZQQVRIUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorLyoweDAxMTMwKi8JdTY0CXBmX3ZwYXRoX2Fzc2lnbm1lbnRzOworI2RlZmluZSBWWEdFX0hXX1BGX1ZQQVRIX0FTU0lHTk1FTlRTX1BGX1ZQQVRIX0FTU0lHTk1FTlRTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDEyMDBbMHgwMTIwMC0weDAxMTM4XTsKKworLyoweDAxMjAwKi8JdTY0CXJ0c19hY2Nlc3NfaWNtcDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX0lDTVBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIwOCovCXU2NAlydHNfYWNjZXNzX3RjcHN5bjsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1RDUFNZTl9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjEwKi8JdTY0CXJ0c19hY2Nlc3Nfemw0cHlsZDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1pMNFBZTERfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIxOCovCXU2NAlydHNfYWNjZXNzX2w0cHJ0Y2xfdGNwOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfTDRQUlRDTF9UQ1BfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIyMCovCXU2NAlydHNfYWNjZXNzX2w0cHJ0Y2xfdWRwOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfTDRQUlRDTF9VRFBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIyOCovCXU2NAlydHNfYWNjZXNzX2w0cHJ0Y2xfZmxleDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX0w0UFJUQ0xfRkxFWF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMjMwKi8JdTY0CXJ0c19hY2Nlc3NfaXBmcmFnOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfSVBGUkFHX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X21lbXJlcGFpcl9yZWcgeworCXU2NAl1bnVzZWQxOworCXU2NAl1bnVzZWQyOworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfcGNpY2ZnbWdtdF9yZWcgeworCisvKjB4MDAwMDAqLwl1NjQJcmVzb3VyY2Vfbm87CisjZGVmaW5lCVZYR0VfSFdfUkVTT1VSQ0VfTk9fUEZOX09SX1ZGCUJJVCgzKQorLyoweDAwMDA4Ki8JdTY0CWJhcmdycF9wZl9vcl92Zl9iYXIwX21hc2s7CisjZGVmaW5lCVZYR0VfSFdfQkFSR1JQX1BGX09SX1ZGX0JBUjBfTUFTS19CQVJHUlBfUEZfT1JfVkZfQkFSMF9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDYpCisvKjB4MDAwMTAqLwl1NjQJYmFyZ3JwX3BmX29yX3ZmX2JhcjFfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19CQVJHUlBfUEZfT1JfVkZfQkFSMV9NQVNLX0JBUkdSUF9QRl9PUl9WRl9CQVIxX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgNikKKy8qMHgwMDAxOCovCXU2NAliYXJncnBfcGZfb3JfdmZfYmFyMl9tYXNrOworI2RlZmluZQlWWEdFX0hXX0JBUkdSUF9QRl9PUl9WRl9CQVIyX01BU0tfQkFSR1JQX1BGX09SX1ZGX0JBUjJfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCA2KQorLyoweDAwMDIwKi8JdTY0CW1zaXhncnBfbm87CisjZGVmaW5lIFZYR0VfSFdfTVNJWEdSUF9OT19UQUJMRV9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMTEpCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcgeworLyoweDAwMDAwKi8JdTY0CWczZmJjdF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0czRkJDVF9JTlRfU1RBVFVTX0VSUl9HM0lGX0lOVAl2eGdlX21CSVQoMCkKKy8qMHgwMDAwOCovCXU2NAlnM2ZiY3RfaW50X21hc2s7CisvKjB4MDAwMTAqLwl1NjQJZzNmYmN0X2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9TTV9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9HRERSM19ERUNDCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfR0REUjNfVV9ERUNDCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfQ1RSTF9GSUZPX0RFQ0MJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9HRERSM19TRUNDCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0dERFIzX1VfU0VDQwl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9DVFJMX0ZJRk9fU0VDQwl2eGdlX21CSVQoMzEpCisvKjB4MDAwMTgqLwl1NjQJZzNmYmN0X2Vycl9tYXNrOworLyoweDAwMDIwKi8JdTY0CWczZmJjdF9lcnJfYWxhcm07CisKKwl1OAl1bnVzZWQwMGEwMFsweDAwYTAwLTB4MDAwMjhdOworCisvKjB4MDBhMDAqLwl1NjQJd3JkbWFfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JDX0FMQVJNX1JDX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JYRFJNX1NNX0VSUl9SWERSTV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SWERDTV9TTV9FUlJfUlhEQ01fU01fSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUlhEV01fU01fRVJSX1JYRFdNX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JEQV9FUlJfUkRBX0lOVAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JEQV9FQ0NfREJfUkRBX0VDQ19EQl9JTlQJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SREFfRUNDX1NHX1JEQV9FQ0NfU0dfSU5UCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfRlJGX0FMQVJNX0ZSRl9JTlQJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUk9DUkNfQUxBUk1fUk9DUkNfSU5UCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1dERTBfQUxBUk1fV0RFMF9JTlQJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfV0RFMV9BTEFSTV9XREUxX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19XREUyX0FMQVJNX1dERTJfSU5UCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1dERTNfQUxBUk1fV0RFM19JTlQJdnhnZV9tQklUKDE3KQorLyoweDAwYTA4Ki8JdTY0CXdyZG1hX2ludF9tYXNrOworLyoweDAwYTEwKi8JdTY0CXJjX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfRlRDX1NNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfRlRDX1NNX1BIQVNFX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfQlREV01fU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19CVENfU01fRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19CVERDTV9TTV9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0JURFJNX1NNX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfUk1NX1JYRF9SQ19FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19STU1fUlhEX1JDX0VDQ19TR19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX1JIU19SWERfUkhTX0VDQ19EQl9FUlIJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX1JIU19SWERfUkhTX0VDQ19TR19FUlIJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX1JNTV9TTV9FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19CVENfVlBBVEhfTUlTTUFUQ0hfRVJSCXZ4Z2VfbUJJVCgxMikKKy8qMHgwMGExOCovCXU2NAlyY19hbGFybV9tYXNrOworLyoweDAwYTIwKi8JdTY0CXJjX2FsYXJtX2FsYXJtOworLyoweDAwYTI4Ki8JdTY0CXJ4ZHJtX3NtX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUlhEUk1fU01fRVJSX1JFR19QUkNfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMzAqLwl1NjQJcnhkcm1fc21fZXJyX21hc2s7CisvKjB4MDBhMzgqLwl1NjQJcnhkcm1fc21fZXJyX2FsYXJtOworLyoweDAwYTQwKi8JdTY0CXJ4ZGNtX3NtX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUlhEQ01fU01fRVJSX1JFR19QUkNfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhNDgqLwl1NjQJcnhkY21fc21fZXJyX21hc2s7CisvKjB4MDBhNTAqLwl1NjQJcnhkY21fc21fZXJyX2FsYXJtOworLyoweDAwYTU4Ki8JdTY0CXJ4ZHdtX3NtX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUlhEV01fU01fRVJSX1JFR19QUkNfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhNjAqLwl1NjQJcnhkd21fc21fZXJyX21hc2s7CisvKjB4MDBhNjgqLwl1NjQJcnhkd21fc21fZXJyX2FsYXJtOworLyoweDAwYTcwKi8JdTY0CXJkYV9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9TTTBfRVJSX0FMQVJNCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9NSVNDX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfUENJWF9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX1JYRF9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9GUk1fRUNDX0RCX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfVVFNX0VDQ19EQl9FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX0lNTV9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9USU1fRUNDX0RCX0VSUgl2eGdlX21CSVQoNykKKy8qMHgwMGE3OCovCXU2NAlyZGFfZXJyX21hc2s7CisvKjB4MDBhODAqLwl1NjQJcmRhX2Vycl9hbGFybTsKKy8qMHgwMGE4OCovCXU2NAlyZGFfZWNjX2RiX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19SREFfRUNDX0RCX1JFR19SREFfUlhEX0VSUihuKQl2eGdlX21CSVQobikKKy8qMHgwMGE5MCovCXU2NAlyZGFfZWNjX2RiX21hc2s7CisvKjB4MDBhOTgqLwl1NjQJcmRhX2VjY19kYl9hbGFybTsKKy8qMHgwMGFhMCovCXU2NAlyZGFfZWNjX3NnX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19SREFfRUNDX1NHX1JFR19SREFfUlhEX0VSUihuKQl2eGdlX21CSVQobikKKy8qMHgwMGFhOCovCXU2NAlyZGFfZWNjX3NnX21hc2s7CisvKjB4MDBhYjAqLwl1NjQJcmRhX2VjY19zZ19hbGFybTsKKy8qMHgwMGFiOCovCXU2NAlycWFfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19SUUFfRVJSX1JFR19SUUFfU01fRVJSX0FMQVJNCXZ4Z2VfbUJJVCgwKQorLyoweDAwYWMwKi8JdTY0CXJxYV9lcnJfbWFzazsKKy8qMHgwMGFjOCovCXU2NAlycWFfZXJyX2FsYXJtOworLyoweDAwYWQwKi8JdTY0CWZyZl9hbGFybV9yZWc7CisjZGVmaW5lIFZYR0VfSFdfRlJGX0FMQVJNX1JFR19QUkNfVlBfRlJGX1NNX0VSUihuKQl2eGdlX21CSVQobikKKy8qMHgwMGFkOCovCXU2NAlmcmZfYWxhcm1fbWFzazsKKy8qMHgwMGFlMCovCXU2NAlmcmZfYWxhcm1fYWxhcm07CisvKjB4MDBhZTgqLwl1NjQJcm9jcmNfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfUUNDX0JZUF9FQ0NfREIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9RQ0NfQllQX0VDQ19TRwl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX05NQV9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9JTU1NX0VDQ19EQgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX0lNTU1fRUNDX1NHCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19VRFFfVU1RTV9FQ0NfREIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1VEUV9VTVFNX0VDQ19TRwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX1JDQk1fRUNDX0RCCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX1JDQk1fRUNDX1NHCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX01VTFRJX0VHQl9SU1ZEX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9NVUxUSV9FR0JfT1dOX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9NVUxUSV9CWVBfT1dOX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9PV05fTk9UX0FTU0lHTkVEX0VSUgl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9PV05fUlNWRF9TWU5DX0VSUgl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9MT1NUX0VHQl9FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19SQ1FfQllQUTBfT1ZFUkZMT1cJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19SQ1FfQllQUTFfT1ZFUkZMT1cJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19SQ1FfQllQUTJfT1ZFUkZMT1cJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfV0NUX0NNRF9GSUZPX0VSUgl2eGdlX21CSVQoMjIpCisvKjB4MDBhZjAqLwl1NjQJcm9jcmNfYWxhcm1fbWFzazsKKy8qMHgwMGFmOCovCXU2NAlyb2NyY19hbGFybV9hbGFybTsKKy8qMHgwMGIwMCovCXU2NAl3ZGUwX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19XREUwX0FMQVJNX1JFR19XREUwX0RDQ19TTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV0RFMF9BTEFSTV9SRUdfV0RFMF9QUk1fU01fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dERTBfQUxBUk1fUkVHX1dERTBfQ1BfU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dERTBfQUxBUk1fUkVHX1dERTBfQ1BfQ01EX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XREUwX0FMQVJNX1JFR19XREUwX1BDUl9TTV9FUlIJdnhnZV9tQklUKDQpCisvKjB4MDBiMDgqLwl1NjQJd2RlMF9hbGFybV9tYXNrOworLyoweDAwYjEwKi8JdTY0CXdkZTBfYWxhcm1fYWxhcm07CisvKjB4MDBiMTgqLwl1NjQJd2RlMV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfV0RFMV9BTEFSTV9SRUdfV0RFMV9EQ0NfU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dERTFfQUxBUk1fUkVHX1dERTFfUFJNX1NNX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XREUxX0FMQVJNX1JFR19XREUxX0NQX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XREUxX0FMQVJNX1JFR19XREUxX0NQX0NNRF9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV0RFMV9BTEFSTV9SRUdfV0RFMV9QQ1JfU01fRVJSCXZ4Z2VfbUJJVCg0KQorLyoweDAwYjIwKi8JdTY0CXdkZTFfYWxhcm1fbWFzazsKKy8qMHgwMGIyOCovCXU2NAl3ZGUxX2FsYXJtX2FsYXJtOworLyoweDAwYjMwKi8JdTY0CXdkZTJfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1dERTJfQUxBUk1fUkVHX1dERTJfRENDX1NNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XREUyX0FMQVJNX1JFR19XREUyX1BSTV9TTV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV0RFMl9BTEFSTV9SRUdfV0RFMl9DUF9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV0RFMl9BTEFSTV9SRUdfV0RFMl9DUF9DTURfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dERTJfQUxBUk1fUkVHX1dERTJfUENSX1NNX0VSUgl2eGdlX21CSVQoNCkKKy8qMHgwMGIzOCovCXU2NAl3ZGUyX2FsYXJtX21hc2s7CisvKjB4MDBiNDAqLwl1NjQJd2RlMl9hbGFybV9hbGFybTsKKy8qMHgwMGI0OCovCXU2NAl3ZGUzX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19XREUzX0FMQVJNX1JFR19XREUzX0RDQ19TTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV0RFM19BTEFSTV9SRUdfV0RFM19QUk1fU01fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dERTNfQUxBUk1fUkVHX1dERTNfQ1BfU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dERTNfQUxBUk1fUkVHX1dERTNfQ1BfQ01EX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XREUzX0FMQVJNX1JFR19XREUzX1BDUl9TTV9FUlIJdnhnZV9tQklUKDQpCisvKjB4MDBiNTAqLwl1NjQJd2RlM19hbGFybV9tYXNrOworLyoweDAwYjU4Ki8JdTY0CXdkZTNfYWxhcm1fYWxhcm07CisKKwl1OAl1bnVzZWQwMGJlOFsweDAwYmU4LTB4MDBiNjBdOworCisvKjB4MDBiZTgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8wOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18yKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU181KHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGJmMCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfOCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfOSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzEwKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTEodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xMih2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzEzKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTQodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xNSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYmY4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMjsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzJfUlhfV19QUklPUklUWV9TU18xNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMTcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMTgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMTkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMjAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMjEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMjIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMjModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMDAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8zOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fM19SWF9XX1BSSU9SSVRZX1NTXzI0KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18zMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18zMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMwOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzQ7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl80X1JYX1dfUFJJT1JJVFlfU1NfMzIodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzMzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzM5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzEwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fNTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzVfUlhfV19QUklPUklUWV9TU180MCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMTgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl82OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNl9SWF9XX1BSSU9SSVRZX1NTXzQ4KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU180OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU181NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMyMCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzc7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl83X1JYX1dfUFJJT1JJVFlfU1NfNTYodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzU3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzU4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzU5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzYwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzYxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzYyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzYzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzI4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fODsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU182NCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjkodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU183MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzhfUlhfV19QUklPUklUWV9TU183MSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzMwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fOTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzlfUlhfV19QUklPUklUWV9TU183Mih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMzgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xMDsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzgyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzg1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184Nih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNDAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xMTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfODgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfODkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzkwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzkzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNDgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xMjsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfOTYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfOTcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzk4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU185OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfMTAwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU18xMDEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzEwMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfMTAzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzUwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTM7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTEwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMTEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNTgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xNDsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTEyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM2MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE1OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTIxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTI0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTI3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzY4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTY7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEyOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMjkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTMxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTM0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNzAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xNzsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTM2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzEzNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTM4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xMzkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzE0MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTQxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xNDIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzE0Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM3OCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE4OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE1MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTUxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzgwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTk7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjODgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8yMDsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTYwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTYyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2NCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTY1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM5MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzIxOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjFfUlhfV19QUklPUklUWV9TU18xNjgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIxX1JYX1dfUFJJT1JJVFlfU1NfMTY5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjFfUlhfV19QUklPUklUWV9TU18xNzAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisKKyNkZWZpbmUgVlhHRV9IV19XUlJfUklOR19TRVJWSUNFX1NUQVRFUwkJCTE3MQorI2RlZmluZSBWWEdFX0hXX1dSUl9SSU5HX0NPVU5UCQkJCTIyCisKKy8qMHgwMGM5OCovCXU2NAlyeF9xdWV1ZV9wcmlvcml0eV8wOworI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjYTAqLwl1NjQJcnhfcXVldWVfcHJpb3JpdHlfMTsKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzgodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfOSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTAodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzExKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTModmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzE0KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwY2E4Ki8JdTY0CXJ4X3F1ZXVlX3ByaW9yaXR5XzI7CisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMl9SWF9RX05VTUJFUl8xNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisJdTgJdW51c2VkMDBjYzhbMHgwMGNjOC0weDAwY2IwXTsKKworLyoweDAwY2M4Ki8JdTY0CXJlcGxpY2F0aW9uX3F1ZXVlX3ByaW9yaXR5OworI2RlZmluZQlWWEdFX0hXX1JFUExJQ0FUSU9OX1FVRVVFX1BSSU9SSVRZX1JFUExJQ0FUSU9OX1FVRVVFX1BSSU9SSVRZKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwY2QwKi8JdTY0CXJ4X3F1ZXVlX3NlbGVjdDsKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9TRUxFQ1RfTlVNQkVSKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZQlWWEdFX0hXX1JYX1FVRVVFX1NFTEVDVF9FTkFCTEVfQ09ERQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlhfUVVFVUVfU0VMRUNUX0VOQUJMRV9ISUVSQVJDSElDQUxfUFJUWQl2eGdlX21CSVQoMjMpCisvKjB4MDBjZDgqLwl1NjQJcnFhX3ZwYnBfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19SUUFfVlBCUF9DVFJMX1dSX1hPTl9ESVMJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JRQV9WUEJQX0NUUkxfUk9DUkNfRElTCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SUUFfVlBCUF9DVFJMX1RYUEVfRElTCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMGNlMCovCXU2NAlyeF9tdWx0aV9jYXN0X2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMX1RJTUVfT1VUX0RJUwl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkxfRlJNX0RST1BfRElTCXZ4Z2VfbUJJVCgxKQorI2RlZmluZSBWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTF9OT19SWERfVElNRV9PVVRfQ05UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDMwKQorI2RlZmluZSBWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTF9USU1FX09VVF9DTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDBjZTgqLwl1NjQJd2RlX3BybV9jdHJsOworI2RlZmluZSBWWEdFX0hXX1dERV9QUk1fQ1RSTF9TUEFWX1RIUkVTSE9MRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDEwKQorI2RlZmluZSBWWEdFX0hXX1dERV9QUk1fQ1RSTF9TUExJVF9USFJFU0hPTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAxOCwgMTQpCisjZGVmaW5lCVZYR0VfSFdfV0RFX1BSTV9DVFJMX1NQTElUX09OXzFTVF9ST1cJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX1dERV9QUk1fQ1RSTF9TUExJVF9PTl9ST1dfQk5EUlkJdnhnZV9tQklUKDMzKQorI2RlZmluZSBWWEdFX0hXX1dERV9QUk1fQ1RSTF9GQl9ST1dfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ2LCAyKQorLyoweDAwY2YwKi8JdTY0CW5vYV9jdHJsOworI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX0ZSTV9QUlRZX1FVT1RBKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9OT05fRlJNX1BSVFlfUVVPVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUJVlhHRV9IV19OT0FfQ1RSTF9JR05PUkVfS0RGQ19JRl9TVEFUVVMJdnhnZV9tQklUKDE2KQorI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX01BWF9KT0JfQ05UX0ZPUl9XREUwKHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDQpCisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfTUFYX0pPQl9DTlRfRk9SX1dERTEodmFsKSB2eGdlX3ZCSVQodmFsLCA0NSwgNCkKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9NQVhfSk9CX0NOVF9GT1JfV0RFMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUzLCA0KQorI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX01BWF9KT0JfQ05UX0ZPUl9XREUzKHZhbCkgdnhnZV92QklUKHZhbCwgNjAsIDQpCisvKjB4MDBjZjgqLwl1NjQJcGhhc2VfY2ZnOworI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19RQ0NfV1JfUEhBU0VfRU4JdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1FDQ19SRF9QSEFTRV9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfSU1NTV9XUl9QSEFTRV9FTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfSU1NTV9SRF9QSEFTRV9FTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1VNUU1fV1JfUEhBU0VfRU4JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19VTVFNX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUkNCTV9XUl9QSEFTRV9FTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JDQk1fUkRfUEhBU0VfRU4JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SWERfUkNfV1JfUEhBU0VfRU4JdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SWERfUkNfUkRfUEhBU0VfRU4JdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SWERfUkhTX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUlhEX1JIU19SRF9QSEFTRV9FTgl2eGdlX21CSVQoNDMpCisvKjB4MDBkMDAqLwl1NjQJcmNxX2J5cHFfY2ZnOworI2RlZmluZSBWWEdFX0hXX1JDUV9CWVBRX0NGR19PVkVSRkxPV19USFJFU0hPTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAxMCwgMjIpCisjZGVmaW5lIFZYR0VfSFdfUkNRX0JZUFFfQ0ZHX0JZUF9PTl9USFJFU0hPTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAzOSwgOSkKKyNkZWZpbmUgVlhHRV9IV19SQ1FfQllQUV9DRkdfQllQX09GRl9USFJFU0hPTEQodmFsKSB2eGdlX3ZCSVQodmFsLCA1NSwgOSkKKwl1OAl1bnVzZWQwMGUwMFsweDAwZTAwLTB4MDBkMDhdOworCisvKjB4MDBlMDAqLwl1NjQJZG9vcmJlbGxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19ET09SQkVMTF9JTlRfU1RBVFVTX0tERkNfRVJSX1JFR19UWERNQV9LREZDX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19ET09SQkVMTF9JTlRfU1RBVFVTX1VTRENfRVJSX1JFR19UWERNQV9VU0RDX0lOVAl2eGdlX21CSVQoMTUpCisvKjB4MDBlMDgqLwl1NjQJZG9vcmJlbGxfaW50X21hc2s7CisvKjB4MDBlMTAqLwl1NjQJa2RmY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19LREZDX0tERkNfRUNDX1NHX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfS0RGQ19LREZDX0VDQ19EQl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19LREZDX0tERkNfU01fRVJSX0FMQVJNCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfS0RGQ19LREZDX01JU0NfRVJSXzEJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19LREZDX0tERkNfUENJWF9FUlIJdnhnZV9tQklUKDM5KQorLyoweDAwZTE4Ki8JdTY0CWtkZmNfZXJyX21hc2s7CisvKjB4MDBlMjAqLwl1NjQJa2RmY19lcnJfcmVnX2FsYXJtOworI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19BTEFSTV9LREZDX0tERkNfRUNDX1NHX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfQUxBUk1fS0RGQ19LREZDX0VDQ19EQl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19BTEFSTV9LREZDX0tERkNfU01fRVJSX0FMQVJNCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfQUxBUk1fS0RGQ19LREZDX01JU0NfRVJSXzEJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfRVJSX1JFR19BTEFSTV9LREZDX0tERkNfUENJWF9FUlIJdnhnZV9tQklUKDM5KQorCXU4CXVudXNlZDAwZTQwWzB4MDBlNDAtMHgwMGUyOF07CisvKjB4MDBlNDAqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fMDsKKyNkZWZpbmUJVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8wX0VOQUJMRQl2eGdlX21CSVQoMCkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8wX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8wX0xFTkdUSF8wKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzBfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8wX0xFTkdUSF8xKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTQ4Ki8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzE7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMV9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMV9MRU5HVEhfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8xX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMV9MRU5HVEhfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU1MCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl8yOworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzJfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzJfTEVOR1RIXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMl9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzJfTEVOR1RIXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNTgqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fMzsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8zX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8zX0xFTkdUSF82KHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzNfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8zX0xFTkdUSF83KHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTYwKi8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzQ7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNF9MRU5HVEhfOCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl80X0xFTkdUSF85KHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTY4Ki8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzU7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNV9MRU5HVEhfMTAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNV9MRU5HVEhfMTEodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNzAqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fNjsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl82X0xFTkdUSF8xMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl82X0xFTkdUSF8xMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU3OCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl83OworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzdfTEVOR1RIXzE0KHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzdfTEVOR1RIXzE1KHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTgwKi8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzg7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fOF9MRU5HVEhfMTYodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisvKjB4MDBlODgqLwl1NjQJa2RmY193X3JvdW5kX3JvYmluXzA7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisKKwl1OAl1bnVzZWQwZjI4WzB4MGYyOC0weDBlOTBdOworCisvKjB4MDBmMjgqLwl1NjQJa2RmY193X3JvdW5kX3JvYmluXzIwOworI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzIwX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisKKyNkZWZpbmUgVlhHRV9IV19XUlJfRklGT19DT1VOVAkJCQkyMAorCisJdTgJdW51c2VkMGZjOFsweDBmYzgtMHgwZjMwXTsKKworLyoweDAwZmM4Ki8JdTY0CWtkZmNfd19yb3VuZF9yb2Jpbl80MDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl80MF9OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorCisJdTgJdW51c2VkMTA2OFsweDAxMDY4LTB4MGZkMF07CisKKy8qMHgwMTA2OCovCXU2NAlrZGZjX2VudHJ5X3R5cGVfc2VsXzA7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAyMiwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAzMCwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzOCwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0NiwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1NCwgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA2MiwgMikKKy8qMHgwMTA3MCovCXU2NAlrZGZjX2VudHJ5X3R5cGVfc2VsXzE7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8xX05VTUJFUl84KHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKy8qMHgwMTA3OCovCXU2NAlrZGZjX2ZpZm9fMF9jdHJsOworI2RlZmluZSBWWEdFX0hXX0tERkNfRklGT18wX0NUUkxfV1JSX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVMJCTE3NgorI2RlZmluZSBWWEdFX0hXX1dSUl9GSUZPX1NFUlZJQ0VfU1RBVEVTCQkJMTUzCisKKwl1OAl1bnVzZWQxMTAwWzB4MDExMDAtMHgxMDgwXTsKKworLyoweDAxMTAwKi8JdTY0CWtkZmNfZmlmb18xN19jdHJsOworI2RlZmluZSBWWEdFX0hXX0tERkNfRklGT18xN19DVFJMX1dSUl9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorCisJdTgJdW51c2VkMTYwMFsweDAxNjAwLTB4MTEwOF07CisKKy8qMHgwMTYwMCovCXU2NAlyeG1hY19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0lOVF9TVEFUVVNfUlhNQUNfR0VOX0VSUl9SWE1BQ19HRU5fSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0lOVF9TVEFUVVNfUlhNQUNfRUNDX0VSUl9SWE1BQ19FQ0NfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0lOVF9TVEFUVVNfUlhNQUNfVkFSSU9VU19FUlJfUlhNQUNfVkFSSU9VU19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisvKjB4MDE2MDgqLwl1NjQJcnhtYWNfaW50X21hc2s7CisJdTgJdW51c2VkMDE2MThbMHgwMTYxOC0weDAxNjEwXTsKKworLyoweDAxNjE4Ki8JdTY0CXJ4bWFjX2dlbl9lcnJfcmVnOworLyoweDAxNjIwKi8JdTY0CXJ4bWFjX2dlbl9lcnJfbWFzazsKKy8qMHgwMTYyOCovCXU2NAlyeG1hY19nZW5fZXJyX2FsYXJtOworLyoweDAxNjMwKi8JdTY0CXJ4bWFjX2VjY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDBfUk1BQ19SVFNfUEFSVF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQwX1JNQUNfUlRTX1BBUlRfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMV9STUFDX1JUU19QQVJUX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDFfUk1BQ19SVFNfUEFSVF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMl9STUFDX1JUU19QQVJUX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQyX1JNQUNfUlRTX1BBUlRfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EQV9MS1BfUFJUMF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RBX0xLUF9QUlQwX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNiwgMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfREFfTEtQX1BSVDFfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI4LCAyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EQV9MS1BfUFJUMV9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzAsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1ZJRF9MS1BfU0dfRVJSCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfVklEX0xLUF9EQl9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMF9TR19FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMF9EQl9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMV9TR19FUlIJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMV9EQl9FUlIJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMl9TR19FUlIJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19QTl9MS1BfUFJUMl9EQl9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19SVEhfTUFTS19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDAsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1JUSF9NQVNLX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0NywgNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUlRIX0xLUF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTQsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1JUSF9MS1BfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU3LCAzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EU19MS1BfU0dfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoNjApCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RTX0xLUF9EQl9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCg2MSkKKy8qMHgwMTYzOCovCXU2NAlyeG1hY19lY2NfZXJyX21hc2s7CisvKjB4MDE2NDAqLwl1NjQJcnhtYWNfZWNjX2Vycl9hbGFybTsKKy8qMHgwMTY0OCovCXU2NAlyeG1hY192YXJpb3VzX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkFSSU9VU19FUlJfUkVHX1JNQUNfUk1BQ19QT1JUMF9GU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZBUklPVVNfRVJSX1JFR19STUFDX1JNQUNfUE9SVDFfRlNNX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQVJJT1VTX0VSUl9SRUdfUk1BQ19STUFDX1BPUlQyX0ZTTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkFSSU9VU19FUlJfUkVHX1JNQUNKX1JNQUNKX0ZTTV9FUlIJdnhnZV9tQklUKDMpCisvKjB4MDE2NTAqLwl1NjQJcnhtYWNfdmFyaW91c19lcnJfbWFzazsKKy8qMHgwMTY1OCovCXU2NAlyeG1hY192YXJpb3VzX2Vycl9hbGFybTsKKy8qMHgwMTY2MCovCXU2NAlyeG1hY19nZW5fY2ZnOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0dFTl9DRkdfU0NBTEVfUk1BQ19VVElMCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMTY2OCovCXU2NAlyeG1hY19hdXRob3JpemVfYWxsX2FkZHI7CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfQVVUSE9SSVpFX0FMTF9BRERSX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxNjcwKi8JdTY0CXJ4bWFjX2F1dGhvcml6ZV9hbGxfdmlkOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX0FVVEhPUklaRV9BTExfVklEX1ZQKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAxNmMwWzB4MDE2YzAtMHgwMTY3OF07CisKKy8qMHgwMTZjMCovCXU2NAlyeG1hY19yZWRfcmF0ZV9yZXBsX3F1ZXVlOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfQ1JBVEVfVEhSMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9DUkFURV9USFIxKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0NSQVRFX1RIUjIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfQ1JBVEVfVEhSMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfRlJBVEVfVEhSMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfRlJBVEVfVEhSMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfRlJBVEVfVEhSMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfRlJBVEVfVEhSMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI4LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfVFJJQ0tMRV9FTgl2eGdlX21CSVQoMzUpCisJdTgJdW51c2VkMDE2ZTBbMHgwMTZlMC0weDAxNmM4XTsKKworLyoweDAxNmUwKi8JdTY0CXJ4bWFjX2NmZzBfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfUk1BQ19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfU1RSSVBfRkNTCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9ESVNDQVJEX1BGUk0JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9JR05PUkVfRkNTX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX0lHTk9SRV9MT05HX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX0lHTk9SRV9VU0laRURfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfSUdOT1JFX0xFTl9NSVNNQVRDSAl2eGdlX21CSVQoMjcpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX01BWF9QWUxEX0xFTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUwLCAxNCkKKwl1OAl1bnVzZWQwMTcxMFsweDAxNzEwLTB4MDE2ZjhdOworCisvKjB4MDE3MTAqLwl1NjQJcnhtYWNfY2ZnMl9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzJfUE9SVF9QUk9NX0VOCXZ4Z2VfbUJJVCgzKQorLyoweDAxNzI4Ki8JdTY0CXJ4bWFjX3BhdXNlX2NmZ19wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0dFTl9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9SQ1ZfRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfQUNDRUxfU0VORCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfRFVBTF9USFIJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0hJR0hfUFRJTUUodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfSUdOT1JFX1BGX0ZDU19FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0lHTk9SRV9QRl9MRU5fRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9MSU1JVEVSX0VOCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9NQVhfTElNSVQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9QRVJNSVRfUkFURU1HTVRfQ1RSTAl2eGdlX21CSVQoNTkpCisJdTgJdW51c2VkMDE3NThbMHgwMTc1OC0weDAxNzQwXTsKKworLyoweDAxNzU4Ki8JdTY0CXJ4bWFjX3JlZF9jZmcwX3BvcnRbM107CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX0NGRzBfUE9SVF9SRURfRU5fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDE3NzAqLwl1NjQJcnhtYWNfcmVkX2NmZzFfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SRURfQ0ZHMV9QT1JUX0ZJTkVfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUkVEX0NGRzFfUE9SVF9SRURfRU5fUkVQTF9RVUVVRQl2eGdlX21CSVQoMTEpCisvKjB4MDE3ODgqLwl1NjQJcnhtYWNfcmVkX2NmZzJfcG9ydFszXTsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfQ0ZHMl9QT1JUX1RSSUNLTEVfRU5fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDE3YTAqLwl1NjQJcnhtYWNfbGlua191dGlsX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfTElOS19VVElMX1BPUlRfUk1BQ19STUFDX1VUSUxJWkFUSU9OKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfTElOS19VVElMX1BPUlRfUk1BQ19VVElMX0NGRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfTElOS19VVElMX1BPUlRfUk1BQ19STUFDX0ZSQUNfVVRJTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19MSU5LX1VUSUxfUE9SVF9STUFDX1BLVF9XRUlHSFQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19MSU5LX1VUSUxfUE9SVF9STUFDX1JNQUNfU0NBTEVfRkFDVE9SCXZ4Z2VfbUJJVCgyMykKKwl1OAl1bnVzZWQwMTdkMFsweDAxN2QwLTB4MDE3YjhdOworCisvKjB4MDE3ZDAqLwl1NjQJcnhtYWNfc3RhdHVzX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfU1RBVFVTX1BPUlRfUk1BQ19SWF9GUk1fUkNWRAl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwMTgwMFsweDAxODAwLTB4MDE3ZThdOworCisvKjB4MDE4MDAqLwl1NjQJcnhtYWNfcnhfcGFfY2ZnMDsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX0lHTk9SRV9GUkFNRV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9TVVBQT1JUX1NOQVBfQUJfTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1NFQVJDSF9GT1JfSEFPCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1NVUFBPUlRfTU9CSUxFX0lQVjZfSERSUwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9JUFY2X1NUT1BfU0VBUkNISU5HCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX05PX1BTX0lGX1VOS05PV04JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfU0VBUkNIX0ZPUl9FVFlQRQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX0FOWV9GUk1fSUZfTDNfQ1NVTV9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19PRkZMRF9GUk1fSUZfTDNfQ1NVTV9FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19BTllfRlJNX0lGX0w0X0NTVU1fRVJSCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfT0ZGTERfRlJNX0lGX0w0X0NTVU1fRVJSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfQU5ZX0ZSTV9JRl9SUEFfRVJSCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfT0ZGTERfRlJNX0lGX1JQQV9FUlIJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfSlVNQk9fU05BUF9FTgl2eGdlX21CSVQoNjMpCisvKjB4MDE4MDgqLwl1NjQJcnhtYWNfcnhfcGFfY2ZnMTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfSVBWNF9UQ1BfSU5DTF9QSAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfSVBWNl9UQ1BfSU5DTF9QSAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfSVBWNF9VRFBfSU5DTF9QSAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX0lQVjZfVURQX0lOQ0xfUEgJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9MNF9JTkNMX0NGCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfU1RSSVBfVkxBTl9UQUcJdnhnZV9tQklUKDIzKQorCXU4CXVudXNlZDAxODI4WzB4MDE4MjgtMHgwMTgxMF07CisKKy8qMHgwMTgyOCovCXU2NAlydHNfbWdyX2NmZzA7CisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1JUU19EUF9TUF9QUklPUklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NGRzBfRkxFWF9MNFBSVENMX1ZBTFVFKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX0lDTVBfVFJBU0gJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9UQ1BTWU5fVFJBU0gJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9aTDRQWUxEX1RSQVNICXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfTDRQUlRDTF9UQ1BfVFJBU0gJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9MNFBSVENMX1VEUF9UUkFTSAl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX0w0UFJUQ0xfRkxFWF9UUkFTSAl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX0lQRlJBR19UUkFTSAl2eGdlX21CSVQoNTkpCisvKjB4MDE4MzAqLwl1NjQJcnRzX21ncl9jZmcxOworI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMV9EQV9BQ1RJVkVfVEFCTEUJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcxX1BOX0FDVElWRV9UQUJMRQl2eGdlX21CSVQoNykKKy8qMHgwMTgzOCovCXU2NAlydHNfbWdyX2NyaXRlcmlhX3ByaW9yaXR5OworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfRVRZUEUodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfSUNNUF9UQ1BTWU4odmFsKSB2eGdlX3ZCSVQodmFsLCA5LCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfTDRQTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEzLCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfUkFOR0VfTDRQTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfUlRIX0lUKHZhbCkgdnhnZV92QklUKHZhbCwgMjEsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9EUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI1LCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfUU9TKHZhbCkgdnhnZV92QklUKHZhbCwgMjksIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9aTDRQWUxEKHZhbCkgdnhnZV92QklUKHZhbCwgMzMsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9MNFBSVENMKHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisvKjB4MDE4NDAqLwl1NjQJcnRzX21ncl9kYV9wYXVzZV9jZmc7CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9EQV9QQVVTRV9DRkdfVlBBVEhfVkVDVE9SKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDE4NDgqLwl1NjQJcnRzX21ncl9kYV9zbG93X3Byb3RvX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0RBX1NMT1dfUFJPVE9fQ0ZHX1ZQQVRIX1ZFQ1RPUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMTg5MFsweDAxODkwLTB4MDE4NTBdOworLyoweDAxODkwKi8gICAgIHU2NCAgICAgcnRzX21ncl9jYmFzaW5fY2ZnOworCXU4CXVudXNlZDAxOTY4WzB4MDE5NjgtMHgwMTg5OF07CisKKy8qMHgwMTk2OCovCXU2NAlkYmdfc3RhdF9yeF9hbnlfZnJtczsKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19QT1JUMF9SWF9BTllfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfUE9SVDFfUlhfQU5ZX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX1BPUlQyX1JYX0FOWV9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorCXU4CXVudXNlZDAxYTAwWzB4MDFhMDAtMHgwMTk3MF07CisKKy8qMHgwMWEwMCovCXU2NAlyeG1hY19yZWRfcmF0ZV92cFsxN107CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfQ1JBVEVfVEhSMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfQ1JBVEVfVEhSMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfQ1JBVEVfVEhSMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfQ1JBVEVfVEhSMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0ZSQVRFX1RIUjAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9GUkFURV9USFIxKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfRlJBVEVfVEhSMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0ZSQVRFX1RIUjModmFsKSB2eGdlX3ZCSVQodmFsLCAyOCwgNCkKKwl1OAl1bnVzZWQwMWUwMFsweDAxZTAwLTB4MDFhODhdOworCisvKjB4MDFlMDAqLwl1NjQJeGdtYWNfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX1hNQUNfR0VOX0VSUl9YTUFDX0dFTl9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19YTUFDX0xJTktfRVJSX1BPUlQwX1hNQUNfTElOS19JTlRfUE9SVDAgXAorCQkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX1hNQUNfTElOS19FUlJfUE9SVDFfWE1BQ19MSU5LX0lOVF9QT1JUMSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX1hHWFNfR0VOX0VSUl9YR1hTX0dFTl9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfQVNJQ19OVFdLX0VSUl9BU0lDX05UV0tfSU5UCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX0FTSUNfR1BJT19FUlJfQVNJQ19HUElPX0lOVAl2eGdlX21CSVQoMjMpCisvKjB4MDFlMDgqLwl1NjQJeGdtYWNfaW50X21hc2s7CisvKjB4MDFlMTAqLwl1NjQJeG1hY19nZW5fZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQwX0FDVE9SX0NIVVJOX0RFVEVDVEVEIFwKKwkJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMF9QQVJUTkVSX0NIVVJOX0RFVEVDVEVEIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDBfUkVDRUlWRURfTEFDUERVCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQxX0FDVE9SX0NIVVJOX0RFVEVDVEVEIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDFfUEFSVE5FUl9DSFVSTl9ERVRFQ1RFRCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQxX1JFQ0VJVkVEX0xBQ1BEVQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YTENNX0xBR19GQUlMT1ZFUl9ERVRFQ1RFRAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDAsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMV9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDQsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMV9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMl9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFMl9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTAsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFM19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTIsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFM19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFNF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTYsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YU1RBVFNfUk1BQ19TVEFUU19USUxFNF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTgsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YTUFDSl9YTUFDX0ZTTV9FUlIJdnhnZV9tQklUKDYzKQorLyoweDAxZTE4Ki8JdTY0CXhtYWNfZ2VuX2Vycl9tYXNrOworLyoweDAxZTIwKi8JdTY0CXhtYWNfZ2VuX2Vycl9hbGFybTsKKy8qMHgwMWUyOCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfcmVnWzJdOworI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9ET1dOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9VUAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfV0VOVF9ET1dOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfV0VOVF9VUAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1JFQUZGSVJNRURfRkFVTFQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1JFQUZGSVJNRURfT0sJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfTElOS19ET1dOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX0xJTktfVVAJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfUkFURU1HTVRfUkFURV9DSEFOR0UJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfUkFURU1HTVRfTEFTSV9JTlYJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1ESU9fTURJT19NR1JfQUNDRVNTX0NPTVBMRVRFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDQ3KQorLyoweDAxZTMwKi8JdTY0CXhtYWNfbGlua19lcnJfcG9ydF9tYXNrWzJdOworLyoweDAxZTM4Ki8JdTY0CXhtYWNfbGlua19lcnJfcG9ydF9hbGFybVsyXTsKKy8qMHgwMWU1OCovCXU2NAl4Z3hzX2dlbl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1hHWFNfR0VOX0VSUl9SRUdfWEdYU19YR1hTX0ZTTV9FUlIJdnhnZV9tQklUKDYzKQorLyoweDAxZTYwKi8JdTY0CXhneHNfZ2VuX2Vycl9tYXNrOworLyoweDAxZTY4Ki8JdTY0CXhneHNfZ2VuX2Vycl9hbGFybTsKKy8qMHgwMWU3MCovCXU2NAlhc2ljX250d2tfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX0RPV04JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19VUAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX1dFTlRfRE9XTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19XRU5UX1VQCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX1JFQUZGSVJNRURfRkFVTFQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9PSwl2eGdlX21CSVQoMjMpCisvKjB4MDFlNzgqLwl1NjQJYXNpY19udHdrX2Vycl9tYXNrOworLyoweDAxZTgwKi8JdTY0CWFzaWNfbnR3a19lcnJfYWxhcm07CisvKjB4MDFlODgqLwl1NjQJYXNpY19ncGlvX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfQVNJQ19HUElPX0VSUl9SRUdfWE1BQ0pfR1BJT19JTlQobikJdnhnZV9tQklUKG4pCisvKjB4MDFlOTAqLwl1NjQJYXNpY19ncGlvX2Vycl9tYXNrOworLyoweDAxZTk4Ki8JdTY0CWFzaWNfZ3Bpb19lcnJfYWxhcm07CisvKjB4MDFlYTAqLwl1NjQJeGdtYWNfZ2VuX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fU1RBVFVTX1hNQUNKX05UV0tfT0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX1NUQVRVU19YTUFDSl9OVFdLX0RBVEFfUkFURQl2eGdlX21CSVQoMTEpCisvKjB4MDFlYTgqLwl1NjQJeGdtYWNfZ2VuX2Z3X21lbW9fc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9GV19NRU1PX1NUQVRVU19YTUFDSl9FVkVOVFNfUEVORElORyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMWViMCovCXU2NAl4Z21hY19nZW5fZndfbWVtb19tYXNrOworI2RlZmluZSBWWEdFX0hXX1hHTUFDX0dFTl9GV19NRU1PX01BU0tfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxZWI4Ki8JdTY0CXhnbWFjX2dlbl9md192cGF0aF90b192c3BvcnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9GV19WUEFUSF9UT19WU1BPUlRfU1RBVFVTX1hNQUNKX0VWRU5UU19QRU5ESU5HKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDFlYzAqLwl1NjQJeGdtYWNfbWFpbl9jZmdfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19NQUlOX0NGR19QT1JUX1BPUlRfRU4JdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDFmNDBbMHgwMWY0MC0weDAxZWQwXTsKKworLyoweDAxZjQwKi8JdTY0CXhtYWNfZ2VuX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX0dFTl9DRkdfUkFURU1HTVRfTUFDX1JBVEVfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfVFhfSEVBRF9EUk9QX1dIRU5fRkFVTFQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX0ZBVUxUX0JFSEFWSU9VUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1BFUklPRF9OVFdLX1VQKHZhbCkgdnhnZV92QklUKHZhbCwgMjgsIDQpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1BFUklPRF9OVFdLX0RPV04odmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgNCkKKy8qMHgwMWY0OCovCXU2NAl4bWFjX3RpbWVzdGFtcDsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9VU0VfTElOS19JRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfSU5URVJWQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9USU1FUl9SRVNUQVJUCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9YTUFDSl9ST0xMT1ZFUl9DTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisvKjB4MDFmNTAqLwl1NjQJeG1hY19zdGF0c19nZW5fY2ZnOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19QUlRBR0dSX0NVTV9USU1FUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1ZQQVRIX0NVTV9USU1FUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1ZMQU5fSEFORExJTkcJdnhnZV9tQklUKDE1KQorLyoweDAxZjU4Ki8JdTY0CXhtYWNfc3RhdHNfc3lzX2NtZDsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfT1AodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9TVFJPQkUJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9MT0NfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX09GRlNFVF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKy8qMHgwMWY2MCovCXU2NAl4bWFjX3N0YXRzX3N5c19kYXRhOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0RBVEFfWFNNR1JfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAxZjgwWzB4MDFmODAtMHgwMWY2OF07CisKKy8qMHgwMWY4MCovCXU2NAlhc2ljX250d2tfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfQ1RSTF9SRVFfVEVTVF9OVFdLCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19DVFJMX1BPUlQwX1JFUV9URVNUX1BPUlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19DVFJMX1BPUlQxX1JFUV9URVNUX1BPUlQJdnhnZV9tQklUKDE1KQorLyoweDAxZjg4Ki8JdTY0CWFzaWNfbnR3a19jZmdfc2hvd19wb3J0X2luZm87CisjZGVmaW5lIFZYR0VfSFdfQVNJQ19OVFdLX0NGR19TSE9XX1BPUlRfSU5GT19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMWY5MCovCXU2NAlhc2ljX250d2tfY2ZnX3BvcnRfbnVtOworI2RlZmluZSBWWEdFX0hXX0FTSUNfTlRXS19DRkdfUE9SVF9OVU1fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDFmOTgqLwl1NjQJeG1hY19jZmdfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1hHTUlJX0xPT1BCQUNLCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfWEdNSUlfUkVWRVJTRV9MT09QQkFDSwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1hHTUlJX1RYX0JFSEFWCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1hHTUlJX1JYX0JFSEFWCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMWZiMCovCXU2NAl4bWFjX3N0YXRpb25fYWRkcl9wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVElPTl9BRERSX1BPUlRfTUFDX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKwl1OAl1bnVzZWQwMjAyMFsweDAyMDIwLTB4MDFmYzBdOworCisvKjB4MDIwMjAqLwl1NjQJbGFnX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19MQUdfQ0ZHX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX0xBR19DRkdfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0NGR19UWF9ESVNDQVJEX0JFSEFWCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQ0ZHX1JYX0RJU0NBUkRfQkVIQVYJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19DRkdfUFJFRl9JTkRJVl9QT1JUX05VTQl2eGdlX21CSVQoMTkpCisvKjB4MDIwMjgqLwl1NjQJbGFnX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19MQUdfU1RBVFVTX1hMQ01fV0FJVElOR19UT19GQUlMQkFDSwl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfU1RBVFVTX1hMQ01fVElNRVJfVkFMX0NPTERfRkFJTE9WRVIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgOCkKKy8qMHgwMjAzMCovCXU2NAlsYWdfYWN0aXZlX3Bhc3NpdmVfY2ZnOworI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfSE9UX1NUQU5EQlkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19MQUNQX0RFQ0lERVMJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19QUkVGX0FDVElWRV9QT1JUX05VTQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19BVVRPX0ZBSUxCQUNLCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX0ZBSUxCQUNLX0VOCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX0NPTERfRkFJTE9WRVJfVElNRU9VVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisJdTgJdW51c2VkMDIwNDBbMHgwMjA0MC0weDAyMDM4XTsKKworLyoweDAyMDQwKi8JdTY0CWxhZ19sYWNwX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19MQUdfTEFDUF9DRkdfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0xBQ1BfQ0ZHX0xBQ1BfQkVHSU4JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0xBQ1BfQ0ZHX0RJU0NBUkRfTEFDUAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0xBQ1BfQ0ZHX0xJQkVSQUxfTEVOX0NISwl2eGdlX21CSVQoMTUpCisvKjB4MDIwNDgqLwl1NjQJbGFnX3RpbWVyX2NmZ18xOworI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMV9GQVNUX1BFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMV9TTE9XX1BFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzFfU0hPUlRfVElNRU9VVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzFfTE9OR19USU1FT1VUKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAyMDUwKi8JdTY0CWxhZ190aW1lcl9jZmdfMjsKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzJfQ0hVUk5fREVUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18yX0FHR1JfV0FJVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzJfU0hPUlRfVElNRVJfU0NBTEUodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18yX0xPTkdfVElNRVJfU0NBTEUodmFsKSAgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAyMDU4Ki8JdTY0CWxhZ19zeXNfaWQ7CisjZGVmaW5lIFZYR0VfSFdfTEFHX1NZU19JRF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1NZU19JRF9VU0VfUE9SVF9BRERSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfU1lTX0lEX0FERFJfU0VMCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwMjA2MCovCXU2NAlsYWdfc3lzX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19MQUdfU1lTX0NGR19TWVNfUFJJKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisJdTgJdW51c2VkMDIwNzBbMHgwMjA3MC0weDAyMDY4XTsKKworLyoweDAyMDcwKi8JdTY0CWxhZ19hZ2dyX2FkZHJfY2ZnWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX0FERFJfQ0ZHX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9BRERSX0NGR19VU0VfUE9SVF9BRERSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9BRERSX0NGR19BRERSX1NFTAl2eGdlX21CSVQoNTUpCisvKjB4MDIwODAqLwl1NjQJbGFnX2FnZ3JfaWRfY2ZnWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX0lEX0NGR19JRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorLyoweDAyMDkwKi8JdTY0CWxhZ19hZ2dyX2FkbWluX2tleVsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9BRE1JTl9LRVlfS0VZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisvKjB4MDIwYTAqLwl1NjQJbGFnX2FnZ3JfYWx0X2FkbWluX2tleTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9BTFRfQURNSU5fS0VZX0tFWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX0FMVF9BRE1JTl9LRVlfQUxUX0FHR1IJdnhnZV9tQklUKDE5KQorLyoweDAyMGE4Ki8JdTY0CWxhZ19hZ2dyX29wZXJfa2V5WzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX09QRVJfS0VZX0xBR0NfS0VZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisvKjB4MDIwYjgqLwl1NjQJbGFnX2FnZ3JfcGFydG5lcl9zeXNfaWRbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfUEFSVE5FUl9TWVNfSURfTEFHQ19BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisvKjB4MDIwYzgqLwl1NjQJbGFnX2FnZ3JfcGFydG5lcl9pbmZvWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX1BBUlRORVJfSU5GT19MQUdDX1NZU19QUkkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9QQVJUTkVSX0lORk9fTEFHQ19PUEVSX0tFWSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKy8qMHgwMjBkOCovCXU2NAlsYWdfYWdncl9zdGF0ZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9TVEFURV9MQUdDX1RYCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX1NUQVRFX0xBR0NfUlgJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfU1RBVEVfTEFHQ19SRUFEWQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfU1RBVEVfTEFHQ19JTkRJVklEVUFMCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwMjBmMFsweDAyMGYwLTB4MDIwZThdOworCisvKjB4MDIwZjAqLwl1NjQJbGFnX3BvcnRfY2ZnWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0NGR19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9DRkdfRElTQ0FSRF9TTE9XX1BST1RPCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0NGR19IT1NUX0NIT1NFTl9BR0dSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9DRkdfRElTQ0FSRF9VTktOT1dOX1NMT1dfUFJPVE8JdnhnZV9tQklUKDE1KQorLyoweDAyMTAwKi8JdTY0CWxhZ19wb3J0X2FjdG9yX2FkbWluX2NmZ1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9DRkdfUE9SVF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9DRkdfUE9SVF9QUkkodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fQ0ZHX0tFWV8xMEcodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fQ0ZHX0tFWV8xRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMjExMCovCXU2NAlsYWdfcG9ydF9hY3Rvcl9hZG1pbl9zdGF0ZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9MQUNQX0FDVElWSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0xBQ1BfVElNRU9VVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9BR0dSRUdBVElPTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfU1lOQ0hST05JWkFUSU9OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9DT0xMRUNUSU5HCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9ESVNUUklCVVRJTkcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0RFRkFVTFRFRAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfRVhQSVJFRAl2eGdlX21CSVQoMzEpCisvKjB4MDIxMjAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9hZG1pbl9zeXNfaWRbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TWVNfSURfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorLyoweDAyMTMwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfYWRtaW5fY2ZnWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fQ0ZHX1NZU19QUkkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX0NGR19LRVkodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9DRkdfUE9SVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fQ0ZHX1BPUlRfUFJJKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMjE0MCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX2FkbWluX3N0YXRlWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfTEFDUF9BQ1RJVklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0xBQ1BfVElNRU9VVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0FHR1JFR0FUSU9OCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX1NZTkNIUk9OSVpBVElPTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9DT0xMRUNUSU5HCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0RJU1RSSUJVVElORwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9ERUZBVUxURUQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfRVhQSVJFRAl2eGdlX21CSVQoMzEpCisvKjB4MDIxNTAqLwl1NjQJbGFnX3BvcnRfdG9fYWdnclsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9UT19BR0dSX0xBR0NfQUdHUl9JRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1RPX0FHR1JfTEFHQ19BR0dSX1ZMRF9JRAl2eGdlX21CSVQoMTkpCisvKjB4MDIxNjAqLwl1NjQJbGFnX3BvcnRfYWN0b3Jfb3Blcl9rZXlbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9LRVlfTEFHQ19LRVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKy8qMHgwMjE3MCovCXU2NAlsYWdfcG9ydF9hY3Rvcl9vcGVyX3N0YXRlWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19MQUNQX0FDVElWSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19MQUNQX1RJTUVPVVQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0FHR1JFR0FUSU9OCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfU1lOQ0hST05JWkFUSU9OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfQ09MTEVDVElORwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0RJU1RSSUJVVElORwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0RFRkFVTFRFRAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0VYUElSRUQJdnhnZV9tQklUKDMxKQorLyoweDAyMTgwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfb3Blcl9zeXNfaWRbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NZU19JRF9MQUdDX0FERFIodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKy8qMHgwMjE5MCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX29wZXJfaW5mb1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfSU5GT19MQUdDX1NZU19QUkkodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfSU5GT19MQUdDX0tFWSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfSU5GT19MQUdDX1BPUlRfTlVNKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9JTkZPX0xBR0NfUE9SVF9QUkkodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDIxYTAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9vcGVyX3N0YXRlWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0xBQ1BfQUNUSVZJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfTEFDUF9USU1FT1VUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0FHR1JFR0FUSU9OCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19TWU5DSFJPTklaQVRJT04gXAorCQkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfQ09MTEVDVElORwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfRElTVFJJQlVUSU5HCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19ERUZBVUxURUQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0VYUElSRUQJdnhnZV9tQklUKDMxKQorLyoweDAyMWIwKi8JdTY0CWxhZ19wb3J0X3N0YXRlX3ZhcnNbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1JFQURZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19TRUxFQ1RFRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0FHR1JfTlVNCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUE9SVF9NT1ZFRAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BPUlRfRU5BQkxFRAl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BPUlRfRElTQUJMRUQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19OVFQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19BQ1RPUl9DSFVSTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BBUlRORVJfQ0hVUk4JdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19BQ1RPUl9JTkZPX0xFTl9NSVNNQVRDSCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUEFSVE5FUl9JTkZPX0xFTl9NSVNNQVRDSCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQ09MTF9JTkZPX0xFTl9NSVNNQVRDSAl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1RFUk1fSU5GT19MRU5fTUlTTUFUQ0gJdnhnZV9tQklUKDM1KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19SWF9GU01fU1RBVEUodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfTVVYX0ZTTV9TVEFURSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MSwgMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfTVVYX1JFQVNPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ0LCA0KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19BQ1RPUl9DSFVSTl9TVEFURQl2eGdlX21CSVQoNTQpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BBUlRORVJfQ0hVUk5fU1RBVEUJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19BQ1RPUl9DSFVSTl9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NiwgNCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUEFSVE5FUl9DSFVSTl9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA2MCwgNCkKKy8qMHgwMjFjMCovCXU2NAlsYWdfcG9ydF90aW1lcl9jbnRyWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19DVVJSRU5UX1dISUxFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfUEVSSU9ESUNfV0hJTEUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfV0FJVF9XSElMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19UWF9MQUNQKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX0FDVE9SX1NZTkNfVFJBTlNJVElPTl9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfUEFSVE5FUl9TWU5DX1RSQU5TSVRJT05fQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX0FDVE9SX0NIQU5HRV9DT1VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfUEFSVE5FUl9DSEFOR0VfQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTYsIDgpCisJdTgJdW51c2VkMDIyMDhbMHgwMjcwMC0weDAyMWQwXTsKKworLyoweDAyNzAwKi8JdTY0CXJ0ZG1hX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUlRETUFfSU5UX1NUQVRVU19QREFfQUxBUk1fUERBX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9JTlRfU1RBVFVTX1BDQ19FUlJPUl9QQ0NfSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX0lOVF9TVEFUVVNfTFNPX0VSUk9SX0xTT19JTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfSU5UX1NUQVRVU19TTV9FUlJPUl9TTV9JTlQJdnhnZV9tQklUKDUpCisvKjB4MDI3MDgqLwl1NjQJcnRkbWFfaW50X21hc2s7CisvKjB4MDI3MTAqLwl1NjQJcGRhX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19QREFfQUxBUk1fUkVHX1BEQV9IU0NfRklGT19FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUERBX0FMQVJNX1JFR19QREFfU01fRVJSCXZ4Z2VfbUJJVCgxKQorLyoweDAyNzE4Ki8JdTY0CXBkYV9hbGFybV9tYXNrOworLyoweDAyNzIwKi8JdTY0CXBkYV9hbGFybV9hbGFybTsKKy8qMHgwMjcyOCovCXU2NAlwY2NfZXJyb3JfcmVnOworI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19GUk1fQlVGX1NCRShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfVFhET19TQkUobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX0ZSTV9CVUZfREJFKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19UWERPX0RCRShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfRlNNX0VSUl9BTEFSTShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfU0VSUihuKQl2eGdlX21CSVQobikKKy8qMHgwMjczMCovCXU2NAlwY2NfZXJyb3JfbWFzazsKKy8qMHgwMjczOCovCXU2NAlwY2NfZXJyb3JfYWxhcm07CisvKjB4MDI3NDAqLwl1NjQJbHNvX2Vycm9yX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19MU09fRVJST1JfUkVHX1BDQ19MU09fQUJPUlQobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfTFNPX0VSUk9SX1JFR19QQ0NfTFNPX0ZTTV9FUlJfQUxBUk0obikJdnhnZV9tQklUKG4pCisvKjB4MDI3NDgqLwl1NjQJbHNvX2Vycm9yX21hc2s7CisvKjB4MDI3NTAqLwl1NjQJbHNvX2Vycm9yX2FsYXJtOworLyoweDAyNzU4Ki8JdTY0CXNtX2Vycm9yX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TTV9FUlJPUl9SRUdfU01fRlNNX0VSUl9BTEFSTQl2eGdlX21CSVQoMTUpCisvKjB4MDI3NjAqLwl1NjQJc21fZXJyb3JfbWFzazsKKy8qMHgwMjc2OCovCXU2NAlzbV9lcnJvcl9hbGFybTsKKworCXU4CXVudXNlZDAyN2E4WzB4MDI3YTgtMHgwMjc3MF07CisKKy8qMHgwMjdhOCovCXU2NAl0eGRfb3duZXJzaGlwX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfVFhEX09XTkVSU0hJUF9DVFJMX0tFRVBfT1dORVJTSElQCXZ4Z2VfbUJJVCg3KQorLyoweDAyN2IwKi8JdTY0CXBjY19jZmc7CisjZGVmaW5lIFZYR0VfSFdfUENDX0NGR19QQ0NfRU5BQkxFKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19DRkdfUENDX0VDQ19FTkFCTEVfTihuKQl2eGdlX21CSVQobikKKy8qMHgwMjdiOCovCXU2NAlwY2NfY29udHJvbDsKKyNkZWZpbmUgVlhHRV9IV19QQ0NfQ09OVFJPTF9GRV9FTkFCTEUodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX1BDQ19DT05UUk9MX0VBUkxZX0FTU0lHTl9FTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUENDX0NPTlRST0xfVU5CTE9DS19EQl9FUlIJdnhnZV9tQklUKDMxKQorLyoweDAyN2MwKi8JdTY0CXBkYV9zdGF0dXMxOworI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzBfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF8xX0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzJfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfM19DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCAyOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF80X0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM2LCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzVfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgNDQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfNl9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCA1MiwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF83X0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYwLCA0KQorLyoweDAyN2M4Ki8JdTY0CXJ0ZG1hX2J3X3RpbWVyOworI2RlZmluZSBWWEdFX0hXX1JURE1BX0JXX1RJTUVSX1RJTUVSX0NUUkwodmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKworCXU4CXVudXNlZDAyOTAwWzB4MDI5MDAtMHgwMjdkMF07CisvKjB4MDI5MDAqLwl1NjQJZzNjbWN0X2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0lOVF9TVEFUVVNfRVJSX0czSUZfSU5UCXZ4Z2VfbUJJVCgwKQorLyoweDAyOTA4Ki8JdTY0CWczY21jdF9pbnRfbWFzazsKKy8qMHgwMjkxMCovCXU2NAlnM2NtY3RfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX1NNX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0dERFIzX0RFQ0MJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9HRERSM19VX0RFQ0MJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9DVFJMX0ZJRk9fREVDQwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0dERFIzX1NFQ0MJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfR0REUjNfVV9TRUNDCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0NUUkxfRklGT19TRUNDCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjkxOCovCXU2NAlnM2NtY3RfZXJyX21hc2s7CisvKjB4MDI5MjAqLwl1NjQJZzNjbWN0X2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwMzAwMFsweDAzMDAwLTB4MDI5MjhdOworCisvKjB4MDMwMDAqLwl1NjQJbWNfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19NQ19JTlRfU1RBVFVTX01DX0VSUl9NQ19JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTUNfSU5UX1NUQVRVU19HUk9DUkNfQUxBUk1fUk9DUkNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01DX0lOVF9TVEFUVVNfRkFVX0dFTl9FUlJfRkFVX0dFTl9JTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01DX0lOVF9TVEFUVVNfRkFVX0VDQ19FUlJfRkFVX0VDQ19JTlQJdnhnZV9tQklUKDE1KQorLyoweDAzMDA4Ki8JdTY0CW1jX2ludF9tYXNrOworLyoweDAzMDEwKi8JdTY0CW1jX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19YRk1EX01FTV9FQ0NfU0dfRVJSX0EJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19YRk1EX01FTV9FQ0NfU0dfRVJSX0IJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19HM0lGX1JEX0ZJRk9fRUNDX1NHX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX01JUklfRUNDX1NHX0VSUl8wCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfTUlSSV9FQ0NfU0dfRVJSXzEJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19YRk1EX01FTV9FQ0NfREJfRVJSX0EJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfWEZNRF9NRU1fRUNDX0RCX0VSUl9CCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX0czSUZfUkRfRklGT19FQ0NfREJfRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX01JUklfRUNDX0RCX0VSUl8wCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX01JUklfRUNDX0RCX0VSUl8xCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX1NNX0VSUgl2eGdlX21CSVQoMTUpCisvKjB4MDMwMTgqLwl1NjQJbWNfZXJyX21hc2s7CisvKjB4MDMwMjAqLwl1NjQJbWNfZXJyX2FsYXJtOworLyoweDAzMDI4Ki8JdTY0CWdyb2NyY19hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfR1JPQ1JDX0FMQVJNX1JFR19YRk1EX1dSX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dST0NSQ19BTEFSTV9SRUdfV0RFMk1TUl9SRF9GSUZPX0VSUgl2eGdlX21CSVQoNykKKy8qMHgwMzAzMCovCXU2NAlncm9jcmNfYWxhcm1fbWFzazsKKy8qMHgwMzAzOCovCXU2NAlncm9jcmNfYWxhcm1fYWxhcm07CisJdTgJdW51c2VkMDMxMDBbMHgwMzEwMC0weDAzMDQwXTsKKworLyoweDAzMTAwKi8JdTY0CXJ4X3RocmVzaF9jZmdfcmVwbDsKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUEFVU0VfTE9XX1RIUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1BBVVNFX0hJR0hfVEhSKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUkVEX1RIUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1JFRF9USFJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9SRURfVEhSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUkVEX1RIUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX0dMT0JBTF9XT0xfRU4JdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9FWEFDVF9WUF9NQVRDSF9SRVEJdnhnZV9tQklUKDYzKQorCXU4CXVudXNlZDAzM2I4WzB4MDMzYjgtMHgwMzEwOF07CisKKy8qMHgwMzNiOCovCXU2NAlmYm1jX2VjY19jZmc7CisjZGVmaW5lIFZYR0VfSFdfRkJNQ19FQ0NfQ0ZHX0VOQUJMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisJdTgJdW51c2VkMDM0MDBbMHgwMzQwMC0weDAzM2MwXTsKKworLyoweDAzNDAwKi8JdTY0CXBjaXBpZl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1BDSVBJRl9JTlRfU1RBVFVTX0RCRUNDX0VSUl9EQkVDQ19FUlJfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BDSVBJRl9JTlRfU1RBVFVTX1NCRUNDX0VSUl9TQkVDQ19FUlJfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BDSVBJRl9JTlRfU1RBVFVTX0dFTkVSQUxfRVJSX0dFTkVSQUxfRVJSX0lOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUENJUElGX0lOVF9TVEFUVVNfU1JQQ0lNX01TR19TUlBDSU1fTVNHX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUENJUElGX0lOVF9TVEFUVVNfTVJQQ0lNX1NQQVJFX1IxX01SUENJTV9TUEFSRV9SMV9JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTkpCisvKjB4MDM0MDgqLwl1NjQJcGNpcGlmX2ludF9tYXNrOworLyoweDAzNDEwKi8JdTY0CWRiZWNjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfUkVUUllfQlVGX0RCX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9SRVRSWV9TT1RfREJfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX1BfSERSX0RCX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfUF9EQVRBX0RCX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfTlBfSERSX0RCX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfTlBfREFUQV9EQl9FUlIJdnhnZV9tQklUKDIzKQorLyoweDAzNDE4Ki8JdTY0CWRiZWNjX2Vycl9tYXNrOworLyoweDAzNDIwKi8JdTY0CWRiZWNjX2Vycl9hbGFybTsKKy8qMHgwMzQyOCovCXU2NAlzYmVjY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX1JFVFJZX0JVRl9TR19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfUkVUUllfU09UX1NHX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9QX0hEUl9TR19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX1BfREFUQV9TR19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX05QX0hEUl9TR19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX05QX0RBVEFfU0dfRVJSCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMzQzMCovCXU2NAlzYmVjY19lcnJfbWFzazsKKy8qMHgwMzQzOCovCXU2NAlzYmVjY19lcnJfYWxhcm07CisvKjB4MDM0NDAqLwl1NjQJZ2VuZXJhbF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfRFJPUFBFRF9JTExFR0FMX0NGRwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX0lMTEVHQUxfTUVNX01BUF9QUk9HCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfTElOS19SU1RfRlNNX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9SWF9JTExFR0FMX1RMUF9WUExBTkUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfVFJBSU5JTkdfUkVTRVRfREVUCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX1BDSV9MSU5LX0RPV05fREVUCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX1JFU0VUX0FDS19ETExQCXZ4Z2VfbUJJVCgyNykKKy8qMHgwMzQ0OCovCXU2NAlnZW5lcmFsX2Vycl9tYXNrOworLyoweDAzNDUwKi8JdTY0CWdlbmVyYWxfZXJyX2FsYXJtOworLyoweDAzNDU4Ki8JdTY0CXNycGNpbV9tc2dfcmVnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUwX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTFfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMl9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUzX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTRfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FNV9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU2X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTdfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FOF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU5X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTEwX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxMV9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTJfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTEzX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxNF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTVfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTE2X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE2KQorLyoweDAzNDYwKi8JdTY0CXNycGNpbV9tc2dfbWFzazsKKy8qMHgwMzQ2OCovCXU2NAlzcnBjaW1fbXNnX2FsYXJtOworCXU4CXVudXNlZDAzNjAwWzB4MDM2MDAtMHgwMzQ3MF07CisKKy8qMHgwMzYwMCovCXU2NAlnY21nMV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQ0NfRVJSX0dTU0NDX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MwX0VSUjBfR1NTQzBfMF9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMF9FUlIxX0dTU0MwXzFfSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzFfRVJSMF9HU1NDMV8wX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MxX0VSUjFfR1NTQzFfMV9JTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMl9FUlIwX0dTU0MyXzBfSU5UCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzJfRVJSMV9HU1NDMl8xX0lOVAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX1VRTV9FUlJfVVFNX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dRQ0NfRVJSX0dRQ0NfSU5UCXZ4Z2VfbUJJVCg4KQorLyoweDAzNjA4Ki8JdTY0CWdjbWcxX2ludF9tYXNrOworCXU4CXVudXNlZDAzYTAwWzB4MDNhMDAtMHgwMzYxMF07CisKKy8qMHgwM2EwMCovCXU2NAlwY21nMV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1BDTUcxX0lOVF9TVEFUVVNfUFNTQ0NfRVJSX1BTU0NDX0lOVAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19QQ01HMV9JTlRfU1RBVFVTX1BRQ0NfRVJSX1BRQ0NfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1BDTUcxX0lOVF9TVEFUVVNfUFFDQ19DUU1fRVJSX1BRQ0NfQ1FNX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19QQ01HMV9JTlRfU1RBVFVTX1BRQ0NfU1FNX0VSUl9QUUNDX1NRTV9JTlQJdnhnZV9tQklUKDMpCisvKjB4MDNhMDgqLwl1NjQJcGNtZzFfaW50X21hc2s7CisJdTgJdW51c2VkMDQwMDBbMHgwNDAwMC0weDAzYTEwXTsKKworLyoweDA0MDAwKi8JdTY0CW9uZV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1JYUEVfRVJSX1JYUEVfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1RYUEVfQkNDX01FTV9TR19FQ0NfRVJSX1RYUEVfQkNDX01FTV9TR19FQ0NfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfVFhQRV9CQ0NfTUVNX0RCX0VDQ19FUlJfVFhQRV9CQ0NfTUVNX0RCX0VDQ19JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19UWFBFX0VSUl9UWFBFX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfRExNX0VSUl9ETE1fSU5UCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19QRV9FUlJfUEVfSU5UCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19SUEVfRVJSX1JQRV9JTlQJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1JQRV9GU01fRVJSX1JQRV9GU01fSU5UCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19PRVNfRVJSX09FU19JTlQJdnhnZV9tQklUKDU1KQorLyoweDA0MDA4Ki8JdTY0CW9uZV9pbnRfbWFzazsKKwl1OAl1bnVzZWQwNDgxOFsweDA0ODE4LTB4MDQwMTBdOworCisvKjB4MDQ4MTgqLwl1NjQJbm9hX3djdF9jdHJsOworI2RlZmluZQlWWEdFX0hXX05PQV9XQ1RfQ1RSTF9WUF9JTlRfTlVNCXZ4Z2VfbUJJVCgwKQorLyoweDA0ODIwKi8JdTY0CXJjX2NmZzI7CisjZGVmaW5lIFZYR0VfSFdfUkNfQ0ZHMl9CVUZGMV9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUkNfQ0ZHMl9CVUZGMl9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JDX0NGRzJfQlVGRjNfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19SQ19DRkcyX0JVRkY0X1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDQ4MjgqLwl1NjQJcmNfY2ZnMzsKKyNkZWZpbmUgVlhHRV9IV19SQ19DRkczX0JVRkY1X1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKy8qMHgwNDgzMCovCXU2NAlyeF9tdWx0aV9jYXN0X2N0cmwxOworI2RlZmluZQlWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTDFfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTDFfREVMQVlfQ09VTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKy8qMHgwNDgzOCovCXU2NAlyeGRtX2RiZ19yZDsKKyNkZWZpbmUgVlhHRV9IV19SWERNX0RCR19SRF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisjZGVmaW5lCVZYR0VfSFdfUlhETV9EQkdfUkRfRU5BQkxFCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwNDg0MCovCXU2NAlyeGRtX2RiZ19yZF9kYXRhOworI2RlZmluZSBWWEdFX0hXX1JYRE1fREJHX1JEX0RBVEFfUk1DX1JYRE1fREJHX1JEX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwNDg0OCovCXU2NAlycWFfdG9wX3BydHlfZm9yX3ZoWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19SUUFfVE9QX1BSVFlfRk9SX1ZIX1JRQV9UT1BfUFJUWV9GT1JfVkgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisJdTgJdW51c2VkMDQ5MDBbMHgwNDkwMC0weDA0OGQwXTsKKworLyoweDA0OTAwKi8JdTY0CXRpbV9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVElNX1NUQVRVU19USU1fUkVTRVRfSU5fUFJPR1JFU1MJdnhnZV9tQklUKDApCisvKjB4MDQ5MDgqLwl1NjQJdGltX2VjY19lbmFibGU7CisjZGVmaW5lCVZYR0VfSFdfVElNX0VDQ19FTkFCTEVfVkJMU19OCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FQ0NfRU5BQkxFX0JNQVBfTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VDQ19FTkFCTEVfQk1BUF9NU0dfTgl2eGdlX21CSVQoMjMpCisvKjB4MDQ5MTAqLwl1NjQJdGltX2JwX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfVElNX0JQX0NUUkxfUkRfWE9OCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RJTV9CUF9DVFJMX1dSX1hPTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVElNX0JQX0NUUkxfUk9DUkNfQllQCXZ4Z2VfbUJJVCgyMykKKy8qMHgwNDkxOCovCXU2NAl0aW1fcmVzb3VyY2VfYXNzaWdubWVudF92aFsxN107CisjZGVmaW5lIFZYR0VfSFdfVElNX1JFU09VUkNFX0FTU0lHTk1FTlRfVkhfQk1BUF9ST09UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDQ5YTAqLwl1NjQJdGltX2JtYXBfbWFwcGluZ192cF9lcnJbMTddOworI2RlZmluZSBWWEdFX0hXX1RJTV9CTUFQX01BUFBJTkdfVlBfRVJSX1RJTV9ERVNUX1ZQQVRIKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKwl1OAl1bnVzZWQwNGIwMFsweDA0YjAwLTB4MDRhMjhdOworCisvKjB4MDRiMDAqLwl1NjQJZ2NtZzJfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HQ01HMl9JTlRfU1RBVFVTX0dYVE1DX0VSUl9HWFRNQ19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzJfSU5UX1NUQVRVU19HQ1BfRVJSX0dDUF9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0dDTUcyX0lOVF9TVEFUVVNfQ01DX0VSUl9DTUNfSU5UCXZ4Z2VfbUJJVCgyMykKKy8qMHgwNGIwOCovCXU2NAlnY21nMl9pbnRfbWFzazsKKy8qMHgwNGIxMCovCXU2NAlneHRtY19lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfTUVNX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lIFZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9NRU1fU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01DX1JEX0RBVEFfREJfRVJSCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19SRVFfRklGT19FUlIJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1JFUV9EQVRBX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfV1JfUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfUkRfUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX1dSUF9GSUZPX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9XUlBfRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX1JSUF9GSUZPX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9SUlBfRVJSCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX0RBVEFfU01fRVJSCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX0NNQzBfSUZfRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9BUkJfU01fRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9DRkNfU01fRVJSCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9ERkVUQ0hfQ1JFRElUX09WRVJGTE9XIFwKKwkJCQkJCQl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfREZFVENIX0NSRURJVF9VTkRFUkZMT1cgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9ERkVUQ0hfU01fRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9SQ1RSTF9DUkVESVRfT1ZFUkZMT1cgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9SQ1RSTF9DUkVESVRfVU5ERVJGTE9XIFwKKwkJCQkJCQl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfUkNUUkxfU01fRVJSCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9XQ09NUExfU01fRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9XQ09NUExfVEFHX0VSUgl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfV1JFUV9TTV9FUlIJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1dSRVFfRklGT19FUlIJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DUDJCRFRfUkZJRk9fUE9QX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1hUTUNfQkRUX0NNSV9PUF9FUlIJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19YVE1DX0JEVF9ERkVUQ0hfT1BfRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfWFRNQ19CRFRfREZJRk9fRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ01JX0FSQl9TTV9FUlIJdnhnZV9tQklUKDM1KQorLyoweDA0YjE4Ki8JdTY0CWd4dG1jX2Vycl9tYXNrOworLyoweDA0YjIwKi8JdTY0CWd4dG1jX2Vycl9hbGFybTsKKy8qMHgwNGIyOCovCXU2NAljbWNfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19DTUNfRVJSX1JFR19DTUNfQ01DX1NNX0VSUgl2eGdlX21CSVQoMCkKKy8qMHgwNGIzMCovCXU2NAljbWNfZXJyX21hc2s7CisvKjB4MDRiMzgqLwl1NjQJY21jX2Vycl9hbGFybTsKKy8qMHgwNGI0MCovCXU2NAlnY3BfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HQ1BfRVJSX1JFR19DUF9IMkwyQ1BfRklGT19FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfR0NQX0VSUl9SRUdfQ1BfU1RDMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0dDUF9FUlJfUkVHX0NQX1NURTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19HQ1BfRVJSX1JFR19DUF9UVEUyQ1BfRklGT19FUlIJdnhnZV9tQklUKDMpCisvKjB4MDRiNDgqLwl1NjQJZ2NwX2Vycl9tYXNrOworLyoweDA0YjUwKi8JdTY0CWdjcF9lcnJfYWxhcm07CisJdTgJdW51c2VkMDRmMDBbMHgwNGYwMC0weDA0YjU4XTsKKworLyoweDA0ZjAwKi8JdTY0CXBjbWcyX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUENNRzJfSU5UX1NUQVRVU19QWFRNQ19FUlJfUFhUTUNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BDTUcyX0lOVF9TVEFUVVNfQ1BfRVhDX0NQX1hUX0VYQ19JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1BDTUcyX0lOVF9TVEFUVVNfQ1BfRVJSX0NQX0VSUl9JTlQJdnhnZV9tQklUKDIzKQorLyoweDA0ZjA4Ki8JdTY0CXBjbWcyX2ludF9tYXNrOworLyoweDA0ZjEwKi8JdTY0CXB4dG1jX2Vycl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1hUX1BJRl9TUkFNX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9SRVFfRklGT19FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9QUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfV1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1BSU1BfRklGT19FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9XUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUFJTUF9GSUZPX0VSUgl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1dSU1BfRklGT19FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19SRVFfRklGT19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19SRVFfREFUQV9GSUZPX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1dSX1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1JEX1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9SRVFfU0hBRE9XX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01QVF9SU1BfU0hBRE9XX0VSUgl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9SRVFfU0hBRE9XX0VSUgl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9SU1BfU0hBRE9XX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9SRVFfU0hBRE9XX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9SU1BfU0hBRE9XX0VSUgl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1hJTF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQVJCX1NIQURPV19FUlIJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19SQU1fU0hBRE9XX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NNV19TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ01SX1NIQURPV19FUlIJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUkVRX0ZTTV9FUlIJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUlNQX0ZTTV9FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUkVRX0ZTTV9FUlIJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUlNQX0ZTTV9FUlIJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUkVRX0ZTTV9FUlIJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUlNQX0ZTTV9FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19YSUxfRlNNX0VSUgl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0FSQl9GU01fRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ01XX0ZTTV9FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DTVJfRlNNX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9SRF9QUk9UX0VSUgl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9SRF9QUk9UX0VSUgl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9SRF9QUk9UX0VSUgl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9XUl9QUk9UX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9XUl9QUk9UX0VSUgl2eGdlX21CSVQoNDApCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9XUl9QUk9UX0VSUgl2eGdlX21CSVQoNDEpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9JTlZfQUREUl9FUlIJdnhnZV9tQklUKDQyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfSU5WX0FERFJfRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX0lOVl9BRERSX0VSUgl2eGdlX21CSVQoNDQpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9SRF9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg0NSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX1JEX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDQ2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfUkRfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9XUl9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg0OCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX1dSX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDQ5KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfV1JfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX01YUF9JTlZfQUREUl9JTkZPX0VSUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9JTlZfQUREUl9JTkZPX0VSUgl2eGdlX21CSVQoNTIpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9JTlZfQUREUl9JTkZPX0VSUgl2eGdlX21CSVQoNTMpCisjZGVmaW5lIFZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1hUX1BJRl9TUkFNX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU0LCAyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUDJCRFRfREZJRk9fUFVTSF9FUlIJdnhnZV9tQklUKDU2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUDJCRFRfUkZJRk9fUFVTSF9FUlIJdnhnZV9tQklUKDU3KQorLyoweDA0ZjE4Ki8JdTY0CXB4dG1jX2Vycl9tYXNrOworLyoweDA0ZjIwKi8JdTY0CXB4dG1jX2Vycl9hbGFybTsKKy8qMHgwNGYyOCovCXU2NAljcF9lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfRENBQ0hFX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9JQ0FDSEVfU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgMikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0RUQUdfU0dfRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0lUQUdfU0dfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX1RSQUNFX1NHX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9ETUEyQ1BfU0dfRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX01QMkNQX1NHX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9RQ0MyQ1BfU0dfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX1NUQzJDUF9TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMikKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0RDQUNIRV9EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0lDQUNIRV9EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0RUQUdfREJfRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0lUQUdfREJfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX1RSQUNFX0RCX0VSUgl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9ETUEyQ1BfREJfRVJSCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX01QMkNQX0RCX0VSUgl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9RQ0MyQ1BfREJfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX1NUQzJDUF9EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgMikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0gyTDJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNDgpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9TVEMyQ1BfRklGT19FUlIJdnhnZV9tQklUKDQ5KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfU1RFMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1RURTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9TV0lGMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1MikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQMkRNQV9GSUZPX0VSUgl2eGdlX21CSVQoNTMpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9EQU0yQ1BfRklGT19FUlIJdnhnZV9tQklUKDU0KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfTVAyQ1BfRklGT19FUlIJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfUUNDMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0RNQTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTcpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9XQUtFX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg2MCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX1BNT05fRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDYxKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfRE1BX1JEX1NIQURPV19FUlIJdnhnZV9tQklUKDYyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfUElGVF9DUkVESVRfRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNGYzMCovCXU2NAljcF9lcnJfbWFzazsKKy8qMHgwNGYzOCovCXU2NAljcF9lcnJfYWxhcm07CisJdTgJdW51c2VkMDRmZThbMHgwNGY1MC0weDA0ZjQwXTsKKworLyoweDA0ZjUwKi8JdTY0CWNwX2V4Y19yZWc7CisjZGVmaW5lCVZYR0VfSFdfQ1BfRVhDX1JFR19DUF9DUF9DQVVTRV9JTkZPX0lOVAl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVhDX1JFR19DUF9DUF9DQVVTRV9DUklUX0lOVAl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVhDX1JFR19DUF9DUF9TRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNGY1OCovCXU2NAljcF9leGNfbWFzazsKKy8qMHgwNGY2MCovCXU2NAljcF9leGNfYWxhcm07CisvKjB4MDRmNjgqLwl1NjQJY3BfZXhjX2NhdXNlOworI2RlZmluZSBWWEdFX0hXX0NQX0VYQ19DQVVTRV9DUF9DUF9DQVVTRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwNTIwMFsweDA1MjAwLTB4MDRmNzBdOworCisvKjB4MDUyMDAqLwl1NjQJbXNnX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfTVNHX0lOVF9TVEFUVVNfVElNX0VSUl9USU1fSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19JTlRfU1RBVFVTX01TR19FWENfTVNHX1hUX0VYQ19JTlQJdnhnZV9tQklUKDYwKQorI2RlZmluZQlWWEdFX0hXX01TR19JTlRfU1RBVFVTX01TR19FUlIzX01TR19FUlIzX0lOVAl2eGdlX21CSVQoNjEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0lOVF9TVEFUVVNfTVNHX0VSUjJfTVNHX0VSUjJfSU5UCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfSU5UX1NUQVRVU19NU0dfRVJSX01TR19FUlJfSU5UCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNTIwOCovCXU2NAltc2dfaW50X21hc2s7CisvKjB4MDUyMTAqLwl1NjQJdGltX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX1ZCTFNfU0dfRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX1BBX1NHX0VSUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9QQl9TR19FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfTVNHX1NHX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fVkJMU19EQl9FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX1BBX0RCX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfUEJfREJfRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9NU0dfREJfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9NRU1fQ05UUkxfU01fRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9NU0dfTUVNX0NOVFJMX1NNX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX01QSUZfUENJV1JfRVJSCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fUk9DUkNfQk1BUF9VUERUX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQ1JFQVRFX0JNQVBNU0dfRklGT19FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9ST0NSQ0lGX01JU01BVENICXZ4Z2VfbUJJVCg0NikKKyNkZWZpbmUgVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9NQVBQSU5HX1ZQX0VSUihuKQl2eGdlX21CSVQobikKKy8qMHgwNTIxOCovCXU2NAl0aW1fZXJyX21hc2s7CisvKjB4MDUyMjAqLwl1NjQJdGltX2Vycl9hbGFybTsKKy8qMHgwNTIyOCovCXU2NAltc2dfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfV0FLRV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfV0FLRV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNUV9ETUFfUkVBRF9DTURfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNUV9ETUFfUkVTUF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1RX09XTl9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1BEQV9BQ0NfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX1BNT05fRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX1BNT05fRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX0RUQUdfU0dfRVJSCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9JVEFHX1NHX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX0RUQUdfU0dfRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfSVRBR19TR19FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9UUkFDRV9TR19FUlIJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9UUkFDRV9TR19FUlIJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQ01HMk1TR19TR19FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVFhQRTJNU0dfU0dfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JYUEUyTVNHX1NHX0VSUgl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SUEUyTVNHX1NHX0VSUgl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9VTVFfU0dfRVJSCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0JXUl9QRl9TR19FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1RX0VDQ19TR19FUlIJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1BX1JFU1BfRUNDX1NHX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1hGTURRUllfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19GUk1RUllfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVU1RX1dSSVRFX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1VNUV9CV1JfUEZfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMzYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SRUdfUkVTUF9GSUZPX0VSUgl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX0RUQUdfREJfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfSVRBR19EQl9FUlIJdnhnZV9tQklUKDQxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9EVEFHX0RCX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX0lUQUdfREJfRVJSCXZ4Z2VfbUJJVCg0NSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfVFJBQ0VfREJfRVJSCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfVFJBQ0VfREJfRVJSCXZ4Z2VfbUJJVCg0OCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0NNRzJNU0dfREJfRVJSCXZ4Z2VfbUJJVCg0OSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1RYUEUyTVNHX0RCX0VSUgl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SWFBFMk1TR19EQl9FUlIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUlBFMk1TR19EQl9FUlIJdnhnZV9tQklUKDUyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUkVHX1JFQURfRklGT19FUlIJdnhnZV9tQklUKDUzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfTVhQMlVYUF9GSUZPX0VSUgl2eGdlX21CSVQoNTQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9LREZDX1NJRl9GSUZPX0VSUgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9DWFAyU1dJRl9GSUZPX0VSUgl2eGdlX21CSVQoNTYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9VTVFfREJfRVJSCXZ4Z2VfbUJJVCg1NykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0JXUl9QRl9EQl9FUlIJdnhnZV9tQklUKDU4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQldSX1NJRl9GSUZPX0VSUgl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETVFfRUNDX0RCX0VSUgl2eGdlX21CSVQoNjApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETUFfUkVBRF9GSUZPX0VSUgl2eGdlX21CSVQoNjEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETUFfUkVTUF9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1VYUDJNWFBfRklGT19FUlIJdnhnZV9tQklUKDYzKQorLyoweDA1MjMwKi8JdTY0CW1zZ19lcnJfbWFzazsKKy8qMHgwNTIzOCovCXU2NAltc2dfZXJyX2FsYXJtOworCXU4CXVudXNlZDA1MzQwWzB4MDUzNDAtMHgwNTI0MF07CisKKy8qMHgwNTM0MCovCXU2NAltc2dfZXhjX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19NUF9NWFBfQ0FVU0VfSU5GT19JTlQJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX01QX01YUF9DQVVTRV9DUklUX0lOVAl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfVVBfVVhQX0NBVVNFX0lORk9fSU5UCXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19VUF9VWFBfQ0FVU0VfQ1JJVF9JTlQJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX01QX01YUF9TRVJSCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19VUF9VWFBfU0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDUzNDgqLwl1NjQJbXNnX2V4Y19tYXNrOworLyoweDA1MzUwKi8JdTY0CW1zZ19leGNfYWxhcm07CisvKjB4MDUzNTgqLwl1NjQJbXNnX2V4Y19jYXVzZTsKKyNkZWZpbmUgVlhHRV9IV19NU0dfRVhDX0NBVVNFX01QX01YUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX01TR19FWENfQ0FVU0VfVVBfVVhQKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA1MzY4WzB4MDUzODAtMHgwNTM2MF07CisKKy8qMHgwNTM4MCovCXU2NAltc2dfZXJyMl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfQ01HMk1TR19ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfRE1RX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfU1dJRl9ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1BJQ19XUklURV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1NXSUZSRUdfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfVElNX1dSSVRFX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfVU1RX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1RYUEVfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfUlhQRV9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9TV0lGX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0RNQV9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfQ1BfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTZfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTE1X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExNF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTNfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTEyX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExMV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTBfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTlfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQThfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTdfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTZfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTVfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTRfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTNfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTJfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTFfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTBfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9GQk1DX09XTl9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfVFhQRTJNU0dfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9SWFBFMk1TR19ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1JQRTJNU0dfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVBfTVBfUElGVF9JRl9DUkVESVRfQ05UX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX1VQX1VQX1BJRlRfSUZfQ1JFRElUX0NOVF9FUlIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1VNUTJQSUNfQ01EX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfVElNX1RJTTJNU0dfQ01EX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNTM4OCovCXU2NAltc2dfZXJyMl9tYXNrOworLyoweDA1MzkwKi8JdTY0CW1zZ19lcnIyX2FsYXJtOworLyoweDA1Mzk4Ki8JdTY0CW1zZ19lcnIzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlIwCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjEJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSMgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlIzCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSNQl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlI2CXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjcJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9JQ0FDSEVfU0dfRVJSMAl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0lDQUNIRV9TR19FUlIxCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjAJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjEJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjMJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjQJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjUJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjYJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX1NHX0VSUjcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfSUNBQ0hFX1NHX0VSUjAJdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfSUNBQ0hFX1NHX0VSUjEJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjAJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjEJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjIJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjMJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjQJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjUJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjYJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX0RCX0VSUjcJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfSUNBQ0hFX0RCX0VSUjAJdnhnZV9tQklUKDQwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfSUNBQ0hFX0RCX0VSUjEJdnhnZV9tQklUKDQxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjAJdnhnZV9tQklUKDQ4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjEJdnhnZV9tQklUKDQ5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjIJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjMJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjQJdnhnZV9tQklUKDUyKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjUJdnhnZV9tQklUKDUzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjYJdnhnZV9tQklUKDU0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfRENBQ0hFX0RCX0VSUjcJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfSUNBQ0hFX0RCX0VSUjAJdnhnZV9tQklUKDU2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19NUF9NWFBfSUNBQ0hFX0RCX0VSUjEJdnhnZV9tQklUKDU3KQorLyoweDA1M2EwKi8JdTY0CW1zZ19lcnIzX21hc2s7CisvKjB4MDUzYTgqLwl1NjQJbXNnX2VycjNfYWxhcm07CisJdTgJdW51c2VkMDU2MDBbMHgwNTYwMC0weDA1M2IwXTsKKworLyoweDA1NjAwKi8JdTY0CWZhdV9nZW5fZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19GQVVfR0VOX0VSUl9SRUdfRk1QRl9QT1JUMF9QRVJNQU5FTlRfU1RPUAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19GQVVfR0VOX0VSUl9SRUdfRk1QRl9QT1JUMV9QRVJNQU5FTlRfU1RPUAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19GQVVfR0VOX0VSUl9SRUdfRk1QRl9QT1JUMl9QRVJNQU5FTlRfU1RPUAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0dFTl9FUlJfUkVHX0ZBTFJfQVVUT19MUk9fTk9USUZJQ0FUSU9OCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwNTYwOCovCXU2NAlmYXVfZ2VuX2Vycl9tYXNrOworLyoweDA1NjEwKi8JdTY0CWZhdV9nZW5fZXJyX2FsYXJtOworLyoweDA1NjE4Ki8JdTY0CWZhdV9lY2NfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQwX0ZBVV9NQUMyRl9OX1NHX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQwX0ZBVV9NQUMyRl9OX0RCX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQwX0ZBVV9NQUMyRl9XX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDBfRkFVX01BQzJGX1dfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMV9GQVVfTUFDMkZfTl9TR19FUlIJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMV9GQVVfTUFDMkZfTl9EQl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMV9GQVVfTUFDMkZfV19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQxX0ZBVV9NQUMyRl9XX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMCwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQyX0ZBVV9NQUMyRl9OX1NHX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMl9GQVVfTUFDMkZfTl9EQl9FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDJfRkFVX01BQzJGX1dfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDJfRkFVX01BQzJGX1dfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAyKQorI2RlZmluZSBWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfRkFVX1hGTURfSU5TX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOCwgMikKKyNkZWZpbmUgVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX0ZBVV9YRk1EX0lOU19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVUpfRkFVX0ZTTV9FUlIJdnhnZV9tQklUKDMxKQorLyoweDA1NjIwKi8JdTY0CWZhdV9lY2NfZXJyX21hc2s7CisvKjB4MDU2MjgqLwl1NjQJZmF1X2VjY19lcnJfYWxhcm07CisJdTgJdW51c2VkMDU2NThbMHgwNTY1OC0weDA1NjMwXTsKKy8qMHgwNTY1OCovCXU2NAlmYXVfcGFfY2ZnOworI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfUkVQTF9MNF9DT01QX0NTVU0JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19SRVBMX0wzX0lOQ0xfQ0YJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19SRVBMX0wzX0NPTVBfQ1NVTQl2eGdlX21CSVQoMTEpCisJdTgJdW51c2VkMDU2NjhbMHgwNTY2OC0weDA1NjYwXTsKKworLyoweDA1NjY4Ki8JdTY0CWRiZ19zdGF0c19mYXVfcnhfcGF0aDsKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfRkFVX1JYX1BBVEhfUlhfUEVSTUlUVEVEX0ZSTVModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDU2YzBbMHgwNTZjMC0weDA1NjcwXTsKKworLyoweDA1NmMwKi8JdTY0CWZhdV9sYWdfY2ZnOworI2RlZmluZSBWWEdFX0hXX0ZBVV9MQUdfQ0ZHX0NPTExfQUxHKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfTEFHX0NGR19JTkNSX1JYX0FHR1JfU1RBVFMJdnhnZV9tQklUKDcpCisJdTgJdW51c2VkMDU4MDBbMHgwNTgwMC0weDA1NmM4XTsKKworLyoweDA1ODAwKi8JdTY0CXRwYV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1RQQV9JTlRfU1RBVFVTX09SUF9FUlJfT1JQX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0lOVF9TVEFUVVNfUFRNX0FMQVJNX1BUTV9JTlQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1RQQV9JTlRfU1RBVFVTX1RQQV9FUlJPUl9UUEFfSU5UCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwNTgwOCovCXU2NAl0cGFfaW50X21hc2s7CisvKjB4MDU4MTAqLwl1NjQJb3JwX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX0ZJRk9fU0dfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9GSUZPX0RCX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfWEZNRF9GSUZPX1VGTE9XX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX0ZSTV9GSUZPX1VGTE9XX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX1hGTURfUkNWX0ZTTV9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PVVRSRUFEX0ZTTV9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PVVRRRU1fRlNNX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX1hGTURfUkNWX1NIQURPV19FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PVVRSRUFEX1NIQURPV19FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PVVRRRU1fU0hBRE9XX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09VVEZSTV9TSEFET1dfRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1BUUFJTX1NIQURPV19FUlIJdnhnZV9tQklUKDQ3KQorLyoweDA1ODE4Ki8JdTY0CW9ycF9lcnJfbWFzazsKKy8qMHgwNTgyMCovCXU2NAlvcnBfZXJyX2FsYXJtOworLyoweDA1ODI4Ki8JdTY0CXB0bV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUFRNX0FMQVJNX1JFR19QVE1fUkRDVFJMX1NZTkNfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BUTV9BTEFSTV9SRUdfUFRNX1JEQ1RSTF9GSUZPX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QVE1fQUxBUk1fUkVHX1hGTURfUkRfRklGT19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1BUTV9BTEFSTV9SRUdfV0RFMk1TUl9XUl9GSUZPX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfUFRNX0FMQVJNX1JFR19QVE1fRlJNTV9FQ0NfREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMTgsIDIpCisjZGVmaW5lIFZYR0VfSFdfUFRNX0FMQVJNX1JFR19QVE1fRlJNTV9FQ0NfU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMjIsIDIpCisvKjB4MDU4MzAqLwl1NjQJcHRtX2FsYXJtX21hc2s7CisvKjB4MDU4MzgqLwl1NjQJcHRtX2FsYXJtX2FsYXJtOworLyoweDA1ODQwKi8JdTY0CXRwYV9lcnJvcl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfVFBBX0VSUk9SX1JFR19UUEFfRlNNX0VSUl9BTEFSTQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UUEFfRVJST1JfUkVHX1RQQV9UUEFfREFfTEtVUF9QUlQwX0RCX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19UUEFfRVJST1JfUkVHX1RQQV9UUEFfREFfTEtVUF9QUlQwX1NHX0VSUgl2eGdlX21CSVQoMTEpCisvKjB4MDU4NDgqLwl1NjQJdHBhX2Vycm9yX21hc2s7CisvKjB4MDU4NTAqLwl1NjQJdHBhX2Vycm9yX2FsYXJtOworLyoweDA1ODU4Ki8JdTY0CXRwYV9nbG9iYWxfY2ZnOworI2RlZmluZQlWWEdFX0hXX1RQQV9HTE9CQUxfQ0ZHX1NVUFBPUlRfU05BUF9BQl9OCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RQQV9HTE9CQUxfQ0ZHX0VDQ19FTkFCTEVfTgl2eGdlX21CSVQoMzUpCisJdTgJdW51c2VkMDU4NjhbMHgwNTg3MC0weDA1ODYwXTsKKworLyoweDA1ODcwKi8JdTY0CXB0bV9lY2NfY2ZnOworI2RlZmluZQlWWEdFX0hXX1BUTV9FQ0NfQ0ZHX1BUTV9GUk1NX0VDQ19FTl9OCXZ4Z2VfbUJJVCgzKQorLyoweDA1ODc4Ki8JdTY0CXB0bV9waGFzZV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfUFRNX1BIQVNFX0NGR19GUk1NX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BUTV9QSEFTRV9DRkdfRlJNTV9SRF9QSEFTRV9FTgl2eGdlX21CSVQoNykKKwl1OAl1bnVzZWQwNTg5OFsweDA1ODk4LTB4MDU4ODBdOworCisvKjB4MDU4OTgqLwl1NjQJZGJnX3N0YXRzX3RwYV90eF9wYXRoOworI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19UUEFfVFhfUEFUSF9UWF9QRVJNSVRURURfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDU5MDBbMHgwNTkwMC0weDA1OGEwXTsKKworLyoweDA1OTAwKi8JdTY0CXRtYWNfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19UTUFDX0lOVF9TVEFUVVNfVFhNQUNfR0VOX0VSUl9UWE1BQ19HRU5fSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RNQUNfSU5UX1NUQVRVU19UWE1BQ19FQ0NfRVJSX1RYTUFDX0VDQ19JTlQJdnhnZV9tQklUKDcpCisvKjB4MDU5MDgqLwl1NjQJdG1hY19pbnRfbWFzazsKKy8qMHgwNTkxMCovCXU2NAl0eG1hY19nZW5fZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fRVJSX1JFR19UTUFDSl9QRVJNQU5FTlRfU1RPUAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fRVJSX1JFR19UTUFDSl9OT19WQUxJRF9WU1BPUlQJdnhnZV9tQklUKDcpCisvKjB4MDU5MTgqLwl1NjQJdHhtYWNfZ2VuX2Vycl9tYXNrOworLyoweDA1OTIwKi8JdTY0CXR4bWFjX2dlbl9lcnJfYWxhcm07CisvKjB4MDU5MjgqLwl1NjQJdHhtYWNfZWNjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTUFDX1NHX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNQUNfREJfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1fU0JfU0dfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNX1NCX0RCX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTV9EQV9TR19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1fREFfREJfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDX1RNQUNfUE9SVDBfRlNNX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ19UTUFDX1BPUlQxX0ZTTV9FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNfVE1BQ19QT1JUMl9GU01fRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDSl9GU01fRVJSCXZ4Z2VfbUJJVCgzOSkKKy8qMHgwNTkzMCovCXU2NAl0eG1hY19lY2NfZXJyX21hc2s7CisvKjB4MDU5MzgqLwl1NjQJdHhtYWNfZWNjX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwNTk3OFsweDA1OTc4LTB4MDU5NDBdOworCisvKjB4MDU5NzgqLwl1NjQJZGJnX3N0YXRfdHhfYW55X2ZybXM7CisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfUE9SVDBfVFhfQU5ZX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX1BPUlQxX1RYX0FOWV9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19QT1JUMl9UWF9BTllfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKwl1OAl1bnVzZWQwNTlhMFsweDA1OWEwLTB4MDU5ODBdOworCisvKjB4MDU5YTAqLwl1NjQJdHhtYWNfbGlua191dGlsX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfTElOS19VVElMX1BPUlRfVE1BQ19UTUFDX1VUSUxJWkFUSU9OKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfTElOS19VVElMX1BPUlRfVE1BQ19VVElMX0NGRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfTElOS19VVElMX1BPUlRfVE1BQ19UTUFDX0ZSQUNfVVRJTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19MSU5LX1VUSUxfUE9SVF9UTUFDX1BLVF9XRUlHSFQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19MSU5LX1VUSUxfUE9SVF9UTUFDX1RNQUNfU0NBTEVfRkFDVE9SCXZ4Z2VfbUJJVCgyMykKKy8qMHgwNTliOCovCXU2NAl0eG1hY19jZmcwX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX1RNQUNfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX0FQUEVORF9QQUQJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX1BBRF9CWVRFKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKy8qMHgwNTlkMCovCXU2NAl0eG1hY19jZmcxX3BvcnRbM107CisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfQ0ZHMV9QT1JUX0FWR19JUEcodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKy8qMHgwNTllOCovCXU2NAl0eG1hY19zdGF0dXNfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19TVEFUVVNfUE9SVF9UTUFDX1RYX0ZSTV9TRU5UCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDA1YTIwWzB4MDVhMjAtMHgwNWEwMF07CisKKy8qMHgwNWEyMCovCXU2NAlsYWdfZGlzdHJpYl9kZXN0OworI2RlZmluZSBWWEdFX0hXX0xBR19ESVNUUklCX0RFU1RfTUFQX1ZQQVRIKG4pCXZ4Z2VfbUJJVChuKQorLyoweDA1YTI4Ki8JdTY0CWxhZ19tYXJrZXJfY2ZnOworI2RlZmluZQlWWEdFX0hXX0xBR19NQVJLRVJfQ0ZHX0dFTl9SQ1ZSX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19NQVJLRVJfQ0ZHX1JFU1BfRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfTEFHX01BUktFUl9DRkdfUkVTUF9USU1FT1VUKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19NQVJLRVJfQ0ZHX1NMT1dfUFJPVE9fTVJLUl9NSU5fSU5URVJWQUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19NQVJLRVJfQ0ZHX1RIUk9UVExFX01SS1JfUkVTUAl2eGdlX21CSVQoNTEpCisvKjB4MDVhMzAqLwl1NjQJbGFnX3R4X2NmZzsKKyNkZWZpbmUJVlhHRV9IV19MQUdfVFhfQ0ZHX0lOQ1JfVFhfQUdHUl9TVEFUUwl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfVFhfQ0ZHX0RJU1RSSUJfQUxHX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1RYX0NGR19ESVNUUklCX1JFTUFQX0lGX0ZBSUwJdnhnZV9tQklUKDExKQorI2RlZmluZSBWWEdFX0hXX0xBR19UWF9DRkdfQ09MTF9NQVhfREVMQVkodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisvKjB4MDVhMzgqLwl1NjQJbGFnX3R4X3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19MQUdfVFhfU1RBVFVTX1RMQUdfVElNRVJfVkFMX0VNUFRJRURfTElOSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19UWF9TVEFUVVNfVExBR19USU1FUl9WQUxfU0xPV19QUk9UT19NUktSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1RYX1NUQVRVU19UTEFHX1RJTUVSX1ZBTF9TTE9XX1BST1RPX01SS1JSRVNQKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorCXU4CXVudXNlZDA1ZDQ4WzB4MDVkNDgtMHgwNWE0MF07CisKKy8qMHgwNWQ0OCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX3ZwbGFuZV9ybXNnWzE3XTsKKyNkZWZpbmUJXAorVlhHRV9IQUxfU1JQQ0lNX1RPX01SUENJTV9WUExBTkVfUk1TR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FX1JNU0codmFsKVwKKyB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwkJdTgJdW51c2VkMDY0MjBbMHgwNjQyMC0weDA1ZGQwXTsKKworLyoweDA2NDIwKi8JdTY0CW1ycGNpbV90b19zcnBjaW1fdnBsYW5lX3dtc2dbMTddOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9UT19TUlBDSU1fVlBMQU5FX1dNU0dfTVJQQ0lNX1RPX1NSUENJTV9WUExBTkVfV01TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwNjRhOCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX3ZwbGFuZV93bXNnX3RyaWdbMTddOworCisvKjB4MDY1MzAqLwl1NjQJZGVidWdfc3RhdHMwOworI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTMF9SU1REUk9QX01TRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTMF9SU1REUk9QX0NQTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwNjUzOCovCXU2NAlkZWJ1Z19zdGF0czE7CisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMxX1JTVERST1BfQ0xJRU5UMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTMV9SU1REUk9QX0NMSUVOVDEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDY1NDAqLwl1NjQJZGVidWdfc3RhdHMyOworI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTMl9SU1REUk9QX0NMSUVOVDIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwNjU0OCovCXU2NAlkZWJ1Z19zdGF0czNfdnBsYW5lWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzNfVlBMQU5FX0RFUExfUEgodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzNfVlBMQU5FX0RFUExfTlBIKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTM19WUExBTkVfREVQTF9DUExIKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorLyoweDA2NWQwKi8JdTY0CWRlYnVnX3N0YXRzNF92cGxhbmVbMTddOworI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTNF9WUExBTkVfREVQTF9QRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTNF9WUExBTkVfREVQTF9OUEQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFM0X1ZQTEFORV9ERVBMX0NQTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisKKwl1OAl1bnVzZWQwNzAwMFsweDA3MDAwLTB4MDY2NThdOworCisvKjB4MDcwMDAqLwl1NjQJbXJwY2ltX2dlbmVyYWxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BJQ19JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QQ0lfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUlRETUFfSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRzNDTUNUX0lOVAl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0dDTUcxX0lOVAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0dDTUcyX0lOVAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0dDTUczX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0czQ01JRkxfSU5UCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRzNDTUlGVV9JTlQJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QQ01HMV9JTlQJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUENNRzJfSU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BDTUczX0lOVAl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVAl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19SWE1BQ19JTlQJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfVE1BQ19JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRzNGQklGX0lOVAl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19GQk1DX0lOVAl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HM0ZCQ1RfSU5UCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1RQQV9JTlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRFJCRUxMX0lOVAl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19PTkVfSU5UCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX01TR19JTlQJdnhnZV9tQklUKDIyKQorLyoweDA3MDA4Ki8JdTY0CW1ycGNpbV9nZW5lcmFsX2ludF9tYXNrOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BJQ19JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUENJX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19SVERNQV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfV1JETUFfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0czQ01DVF9JTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfR0NNRzFfSU5UCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0dDTUcyX0lOVAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HQ01HM19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRzNDTUlGTF9JTlQJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRzNDTUlGVV9JTlQJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUENNRzFfSU5UCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QQ01HMl9JTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BDTUczX0lOVAl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfWE1BQ19JTlQJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1JYTUFDX0lOVAl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfVE1BQ19JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0czRkJJRl9JTlQJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0ZCTUNfSU5UCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HM0ZCQ1RfSU5UCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19UUEFfSU5UCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19EUkJFTExfSU5UCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19PTkVfSU5UCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19NU0dfSU5UCXZ4Z2VfbUJJVCgyMikKKy8qMHgwNzAxMCovCXU2NAltcnBjaW1fcHBpZl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfSU5JX0VSUk9SU19JTklfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfRE1BX0VSUk9SU19ETUFfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfVEdUX0VSUk9SU19UR1RfSU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NPTkZJR19FUlJPUlNfQ09ORklHX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19DUkRUX0lOVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19QTExfRVJST1JTX1BMTF9JTlQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMF9DUkRfSU5UX1ZQTEFORTBfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTFfQ1JEX0lOVF9WUExBTkUxX0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUyX0NSRF9JTlRfVlBMQU5FMl9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FM19DUkRfSU5UX1ZQTEFORTNfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTRfQ1JEX0lOVF9WUExBTkU0X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU1X0NSRF9JTlRfVlBMQU5FNV9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FNl9DUkRfSU5UX1ZQTEFORTZfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTdfQ1JEX0lOVF9WUExBTkU3X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU4X0NSRF9JTlRfVlBMQU5FOF9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FOV9DUkRfSU5UX1ZQTEFORTlfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUgXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTEwX0NSRF9JTlRfVlBMQU5FMTBfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDEpCisjZGVmaW5lIFwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxMV9DUkRfSU5UX1ZQTEFORTExX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQyKQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTJfQ1JEX0lOVF9WUExBTkUxMl9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTEzX0NSRF9JTlRfVlBMQU5FMTNfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDQpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxNF9DUkRfSU5UX1ZQTEFORTE0X0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQ1KQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTVfQ1JEX0lOVF9WUExBTkUxNV9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NikKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTE2X0NSRF9JTlRfVlBMQU5FMTZfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19WUEFUSF9UT19NUlBDSU1fQUxBUk1fVlBBVEhfVE9fTVJQQ0lNX0FMQVJNX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDU1KQorLyoweDA3MDE4Ki8JdTY0CW1ycGNpbV9wcGlmX2ludF9tYXNrOworCXU4CXVudXNlZDA3MDI4WzB4MDcwMjgtMHgwNzAyMF07CisKKy8qMHgwNzAyOCovCXU2NAlpbmlfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19TQ1BMX0NQTF9USU1FT1VUX1VOVVNFRF9UQUcJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfU0NQTF9DUExfVElNRU9VVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19EQ1BMX0ZTTV9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0RDUExfUE9JU09OCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19EQ1BMX1VOU1VQUE9SVEVECXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19EQ1BMX0FCT1JUCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfVExQX0FCT1JUCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfRExMUF9BQk9SVAl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0VDUkNfRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfQlVGX0RCX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0JVRl9TR19FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9EQVRBX09WRVJGTE9XCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfTVJEX1NZU19EUk9QCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfTVdSX1NZU19EUk9QCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfTVJEX0NMSUVOVF9EUk9QCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfTVdSX0NMSUVOVF9EUk9QCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNzAzMCovCXU2NAlpbmlfZXJyb3JzX21hc2s7CisvKjB4MDcwMzgqLwl1NjQJaW5pX2Vycm9yc19hbGFybTsKKy8qMHgwNzA0MCovCXU2NAlkbWFfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19SREFSQl9GU01fRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX1dSQVJCX0ZTTV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1dSX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfV1JfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfV1JETUFfV1JfREFUQV9PVkVSRkxPVwl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1dSX0RBVEFfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfTVNHX1dSX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX01TR19XUl9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfTVNHX1dSX0RBVEFfT1ZFUkZMT1cJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9NU0dfV1JfREFUQV9VTkRFUkZMT1cJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9TVEFUU19XUl9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9TVEFUU19XUl9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfU1RBVFNfV1JfREFUQV9PVkVSRkxPVwl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1NUQVRTX1dSX0RBVEFfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfV1JfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfV1JfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1dSX0RBVEFfT1ZFUkZMT1cJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9XUl9EQVRBX1VOREVSRkxPVwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1JEX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1JEX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9SRF9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9SRF9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19EQkxHRU5fRlNNX0VSUgl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfREJMR0VOX0NSRURJVF9GU01fRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19EQkxHRU5fRE1BX1dSUl9TTV9FUlIJdnhnZV9tQklUKDM0KQorLyoweDA3MDQ4Ki8JdTY0CWRtYV9lcnJvcnNfbWFzazsKKy8qMHgwNzA1MCovCXU2NAlkbWFfZXJyb3JzX2FsYXJtOworLyoweDA3MDU4Ki8JdTY0CXRndF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9WRU5ET1JfTVNHCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9NU0dfVU5MT0NLCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9JTExFR0FMX1RMUF9CRQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfQk9PVF9XUklURQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfUElGX1dSX0NST1NTX1FXUkFOR0UJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1BJRl9SRUFEX0NST1NTX1FXUkFOR0UJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX0tERkNfUkVBRAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfVVNEQ19SRUFECXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9VU0RDX1dSX0NST1NTX1FXUkFOR0UJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX01TSVhfQkVZT05EX1JBTkdFCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9XUl9UT19LREZDX1BPSVNPTgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1dSX1RPX1VTRENfUE9JU09OCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfV1JfVE9fUElGX1BPSVNPTgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1dSX1RPX01TSVhfUE9JU09OCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfV1JfVE9fTVJJT1ZfUE9JU09OCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfTk9UX01FTV9UTFAJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9VTktOT1dOX01FTV9UTFAJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9SRVFfRlNNX0VSUgl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX0NQTF9GU01fRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfS0RGQ19QUk9UX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1NXSUZfUFJPVF9FUlIJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9NUklPVl9NRU1fTUFQX0NGR19FUlIJdnhnZV9tQklUKDIxKQorLyoweDA3MDYwKi8JdTY0CXRndF9lcnJvcnNfbWFzazsKKy8qMHgwNzA2OCovCXU2NAl0Z3RfZXJyb3JzX2FsYXJtOworLyoweDA3MDcwKi8JdTY0CWNvbmZpZ19lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19JTExFR0FMX1NUT1BfQ09ORAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfSUxMRUdBTF9TVEFSVF9DT05ECXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19FWFBfUkRfQ05UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfRVhUUkFfQ1lDTEUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19NQUlOX0ZTTV9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0kyQ19SRVFfQ09MTElTSU9OCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfUkVHX0ZTTV9FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0NGR01fSTJDX1RJTUVPVVQJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1JJQ19JMkNfVElNRU9VVAl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfQ0ZHTV9GU01fRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19SSUNfRlNNX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUElGTV9JTExFR0FMX0FDQ0VTUwl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUElGTV9USU1FT1VUCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19QSUZNX0ZTTV9FUlIJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1BJRk1fVE9fRlNNX0VSUgl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUklDX1JJQ19SRF9USU1FT1VUCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNzA3OCovCXU2NAljb25maWdfZXJyb3JzX21hc2s7CisvKjB4MDcwODAqLwl1NjQJY29uZmlnX2Vycm9yc19hbGFybTsKKwl1OAl1bnVzZWQwNzA5MFsweDA3MDkwLTB4MDcwODhdOworCisvKjB4MDcwOTAqLwl1NjQJY3JkdF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19XUkNSRFRBUkJfRlNNX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1dSQ1JEVEFSQl9JTlRDVExfSUxMRUdBTF9DUkRfREVBTCBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19XUkNSRFRBUkJfUERBX0lMTEVHQUxfQ1JEX0RFQUwJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19XUkNSRFRBUkJfUENJX01TR19JTExFR0FMX0NSRF9ERUFMIFwKKwkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1JEQ1JEVEFSQl9GU01fRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfUkRDUkRUQVJCX1JEQV9JTExFR0FMX0NSRF9ERUFMCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfUkRDUkRUQVJCX1BEQV9JTExFR0FMX0NSRF9ERUFMCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfUkRDUkRUQVJCX0RCTEdFTl9JTExFR0FMX0NSRF9ERUFMIFwKKwkJCQkJCQl2eGdlX21CSVQoNDcpCisvKjB4MDcwOTgqLwl1NjQJY3JkdF9lcnJvcnNfbWFzazsKKy8qMHgwNzBhMCovCXU2NAljcmR0X2Vycm9yc19hbGFybTsKKwl1OAl1bnVzZWQwNzBiMFsweDA3MGIwLTB4MDcwYThdOworCisvKjB4MDcwYjAqLwl1NjQJbXJwY2ltX2dlbmVyYWxfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1NUQVRTQl9GU01fRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfWEdFTl9GU01fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfWE1FTV9GU01fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX0tERkNDVExfRlNNX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19NUklPVkNUTF9GU01fRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1NQSV9GTFNIX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19TUElfSUlDX0FDS19FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfU1BJX0lJQ19DSEtTVU1fRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX0lOSV9TRVJSX0RFVAl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19JTlRDVExfTVNJWF9GU01fRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX0lOVENUTF9NU0lfT1ZFUkZMT1cJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfUFBJRl9QQ0lfTk9UX0ZMVVNIX0RVUklOR19TV19SRVNFVCBcCisJCQkJCQkJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfUFBJRl9TV19SRVNFVF9GU01fRVJSCXZ4Z2VfbUJJVCg1MSkKKy8qMHgwNzBiOCovCXU2NAltcnBjaW1fZ2VuZXJhbF9lcnJvcnNfbWFzazsKKy8qMHgwNzBjMCovCXU2NAltcnBjaW1fZ2VuZXJhbF9lcnJvcnNfYWxhcm07CisJdTgJdW51c2VkMDcwZDBbMHgwNzBkMC0weDA3MGM4XTsKKworLyoweDA3MGQwKi8JdTY0CXBsbF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX1BMTF9FUlJPUlNfUkVHX0NPUkVfQ01HX1BMTF9PT0wJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUExMX0VSUk9SU19SRUdfQ09SRV9GQl9QTExfT09MCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BMTF9FUlJPUlNfUkVHX0NPUkVfWF9QTExfT09MCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwNzBkOCovCXU2NAlwbGxfZXJyb3JzX21hc2s7CisvKjB4MDcwZTAqLwl1NjQJcGxsX2Vycm9yc19hbGFybTsKKy8qMHgwNzBlOCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fTVJQQ0lNX0FMQVJNX1JFR19QUElGX1NSUENJTV9UT19NUlBDSU1fQUxBUk0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDcwZjAqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV9hbGFybV9tYXNrOworLyoweDA3MGY4Ki8JdTY0CXNycGNpbV90b19tcnBjaW1fYWxhcm1fYWxhcm07CisvKjB4MDcxMDAqLwl1NjQJdnBhdGhfdG9fbXJwY2ltX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19NUlBDSU1fQUxBUk1fUkVHX1BQSUZfVlBBVEhfVE9fTVJQQ0lNX0FMQVJNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDA3MTA4Ki8JdTY0CXZwYXRoX3RvX21ycGNpbV9hbGFybV9tYXNrOworLyoweDA3MTEwKi8JdTY0CXZwYXRoX3RvX21ycGNpbV9hbGFybV9hbGFybTsKKwl1OAl1bnVzZWQwNzEyOFsweDA3MTI4LTB4MDcxMThdOworCisvKjB4MDcxMjgqLwl1NjQJY3JkdF9lcnJvcnNfdnBsYW5lX3JlZ1sxN107CisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19XUkNSRFRBUkJfUF9IX0NPTlNVTUVfQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfV1JDUkRUQVJCX1BfRF9DT05TVU1FX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1dSQ1JEVEFSQl9QX0hfUkVUVVJOX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19XUkNSRFRBUkJfUF9EX1JFVFVSTl9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfUkRDUkRUQVJCX05QX0hfQ09OU1VNRV9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfUkRDUkRUQVJCX05QX0hfUkVUVVJOX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19SRENSRFRBUkJfVEFHX0NPTlNVTUVfVEFHX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfUkRDUkRUQVJCX1RBR19SRVRVUk5fVEFHX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDMxKQorLyoweDA3MTMwKi8JdTY0CWNyZHRfZXJyb3JzX3ZwbGFuZV9tYXNrWzE3XTsKKy8qMHgwNzEzOCovCXU2NAljcmR0X2Vycm9yc192cGxhbmVfYWxhcm1bMTddOworCXU4CXVudXNlZDA3MmYwWzB4MDcyZjAtMHgwNzJjMF07CisKKy8qMHgwNzJmMCovCXU2NAltcnBjaW1fcnN0X2luX3Byb2c7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1JTVF9JTl9QUk9HX01SUENJTV9SU1RfSU5fUFJPRwl2eGdlX21CSVQoNykKKy8qMHgwNzJmOCovCXU2NAltcnBjaW1fcmVnX21vZGlmaWVkOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9SRUdfTU9ESUZJRURfTVJQQ0lNX1JFR19NT0RJRklFRAl2eGdlX21CSVQoNykKKworCXU4CXVudXNlZDA3Mzc4WzB4MDczNzgtMHgwNzMwMF07CisKKy8qMHgwNzM3OCovCXU2NAl3cml0ZV9hcmJfcGVuZGluZzsKKyNkZWZpbmUJVlhHRV9IV19XUklURV9BUkJfUEVORElOR19XUkFSQl9XUkRNQQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XUklURV9BUkJfUEVORElOR19XUkFSQl9SVERNQQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19XUklURV9BUkJfUEVORElOR19XUkFSQl9NU0cJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1dSSVRFX0FSQl9QRU5ESU5HX1dSQVJCX1NUQVRTQgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfV1JJVEVfQVJCX1BFTkRJTkdfV1JBUkJfSU5UQ1RMCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwNzM4MCovCXU2NAlyZWFkX2FyYl9wZW5kaW5nOworI2RlZmluZQlWWEdFX0hXX1JFQURfQVJCX1BFTkRJTkdfUkRBUkJfV1JETUEJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUkVBRF9BUkJfUEVORElOR19SREFSQl9SVERNQQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SRUFEX0FSQl9QRU5ESU5HX1JEQVJCX0RCTEdFTgl2eGdlX21CSVQoMTEpCisvKjB4MDczODgqLwl1NjQJZG1haWZfZG1hZGJsX3BlbmRpbmc7CisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfV1JETUFfV1IJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfV1JETUFfUkQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfUlRETUFfV1IJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfUlRETUFfUkQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfRE1BSUZfRE1BREJMX1BFTkRJTkdfRE1BSUZfTVNHX1dSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX1NUQVRTX1dSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RCTEdFTl9JTl9QUk9HKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEzLCA1MSkKKy8qMHgwNzM5MCovCXU2NAl3cmNyZHRhcmJfc3RhdHVzMF92cGxhbmVbMTddOworI2RlZmluZQlWWEdFX0hXX1dSQ1JEVEFSQl9TVEFUVVMwX1ZQTEFORV9XUkNSRFRBUkJfQUJTX0FWQUlMX1BfSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA4KQorLyoweDA3NDE4Ki8JdTY0CXdyY3JkdGFyYl9zdGF0dXMxX3ZwbGFuZVsxN107CisjZGVmaW5lCVZYR0VfSFdfV1JDUkRUQVJCX1NUQVRVUzFfVlBMQU5FX1dSQ1JEVEFSQl9BQlNfQVZBSUxfUF9EKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDEyKQorCXU4CXVudXNlZDA3NTAwWzB4MDc1MDAtMHgwNzRhMF07CisKKy8qMHgwNzUwMCovCXU2NAltcnBjaW1fZ2VuZXJhbF9jZmcxOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzFfQ0xFQVJfU0VSUgl2eGdlX21CSVQoNykKKy8qMHgwNzUwOCovCXU2NAltcnBjaW1fZ2VuZXJhbF9jZmcyOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSU5TX1RYX1dSX1RECXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSU5TX1RYX1JEX1RECXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSU5TX1RYX0NQTF9URAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JTklfVElNRU9VVF9FTl9NV1IJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSU5JX1RJTUVPVVRfRU5fTVJECXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lHTk9SRV9WUEFUSF9SU1RfRk9SX01TSVgJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfRkxBU0hfUkVBRF9NU0IJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfRElTX0hPU1RfUElQRUxJTkVfV1IJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfTVJQQ0lNX1NUQVRTX0VOQUJMRQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9NUlBDSU1fU1RBVFNfTUFQX1RPX1ZQQVRIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ3LCA1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfRU5fQkxPQ0tfTVNJWF9EVUVfVE9fU0VSUgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9GT1JDRV9TRU5ESU5HX0lOVEEJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfRElTX1NXSUZfUFJPVF9PTl9SRFMJdnhnZV9tQklUKDYzKQorLyoweDA3NTEwKi8JdTY0CW1ycGNpbV9nZW5lcmFsX2NmZzM7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19QUk9URUNUSU9OX0NBX09SX1VOU1VQTgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX0lMTEVHQUxfUkRfQ0FfT1JfVU5TVVBOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfUkRfQllURV9TV0FQRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19SRF9CSVRfRkxJUEVOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1dSX0JZVEVfU1dBUEVOCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1dSX0JJVF9GTElQRU4JdnhnZV9tQklUKDE5KQorI2RlZmluZSBWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfTVJfTUFYX01WRlModmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19NUl9NVkZfVEJMX1NJWkUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzYsIDE2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfUEYwX1NXX1JFU0VUX0VOCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUgVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1JFR19NT0RJRklFRF9DRkcodmFsKSB2eGdlX3ZCSVQodmFsLCA1NiwgMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX0NQTF9FQ0NfRU5BQkxFX04JdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfQllQQVNTX0RBSVNZX0NIQUlOCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNzUxOCovCXU2NAltcnBjaW1fc3RhdHNfc3RhcnRfaG9zdF9hZGRyOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9TVEFUU19TVEFSVF9IT1NUX0FERFJfTVJQQ0lNX1NUQVRTX1NUQVJUX0hPU1RfQUREUih2YWwpXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDU3KQorCisJdTgJdW51c2VkMDc5NTBbMHgwNzk1MC0weDA3NTIwXTsKKworLyoweDA3OTUwKi8JdTY0CXJkY3JkdGFyYl9jZmcwOworI2RlZmluZSBWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX1JEQV9NQVhfT1VUU1RBTkRJTkdfUkRTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMTgsIDYpCisjZGVmaW5lIFZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfUERBX01BWF9PVVRTVEFORElOR19SRFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNiwgNikKKyNkZWZpbmUgVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9EQkxHRU5fTUFYX09VVFNUQU5ESU5HX1JEUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM0LCA2KQorI2RlZmluZSBWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX1dBSVRfQ05UKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDQpCisjZGVmaW5lIFZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfTUFYX09VVFNUQU5ESU5HX1JEUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU0LCA2KQorI2RlZmluZQlWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX0VOX1hPTgl2eGdlX21CSVQoNjMpCisJdTgJdW51c2VkMDdiZThbMHgwN2JlOC0weDA3OTU4XTsKKworLyoweDA3YmU4Ki8JdTY0CWJmX3N3X3Jlc2V0OworI2RlZmluZSBWWEdFX0hXX0JGX1NXX1JFU0VUX0JGX1NXX1JFU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKy8qMHgwN2JmMCovCXU2NAlzd19yZXNldF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfU1dfUkVTRVRfU1RBVFVTX1JFU0VUX0NNUExUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1NXX1JFU0VUX1NUQVRVU19JTklUX0NNUExUCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwN2QzMFsweDA3ZDMwLTB4MDdiZjhdOworCisvKjB4MDdkMzAqLwl1NjQJbXJwY2ltX2RlYnVnX3N0YXRzMDsKKyNkZWZpbmUgVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMwX0lOSV9XUl9EUk9QKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMF9JTklfUkRfRFJPUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2QzOCovCXU2NAltcnBjaW1fZGVidWdfc3RhdHMxX3ZwbGFuZVsxN107CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMV9WUExBTkVfV1JDUkRUQVJCX1BIX0NSRFRfREVQTEVURUQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZGMwKi8JdTY0CW1ycGNpbV9kZWJ1Z19zdGF0czJfdnBsYW5lWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMyX1ZQTEFORV9XUkNSRFRBUkJfUERfQ1JEVF9ERVBMRVRFRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlNDgqLwl1NjQJbXJwY2ltX2RlYnVnX3N0YXRzM192cGxhbmVbMTddOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzNfVlBMQU5FX1JEQ1JEVEFSQl9OUEhfQ1JEVF9ERVBMRVRFRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlZDAqLwl1NjQJbXJwY2ltX2RlYnVnX3N0YXRzNDsKKyNkZWZpbmUgVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFM0X0lOSV9XUl9WUElOX0RST1AodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFM0X0lOSV9SRF9WUElOX0RST1AodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZWQ4Ki8JdTY0CWdlbnN0YXRzX2NvdW50MDE7CisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQwMV9HRU5TVEFUU19DT1VOVDEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDAxX0dFTlNUQVRTX0NPVU5UMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2VlMCovCXU2NAlnZW5zdGF0c19jb3VudDIzOworI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMjNfR0VOU1RBVFNfQ09VTlQzKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQyM19HRU5TVEFUU19DT1VOVDIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlZTgqLwl1NjQJZ2Vuc3RhdHNfY291bnQ0OworI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UNF9HRU5TVEFUU19DT1VOVDQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlZjAqLwl1NjQJZ2Vuc3RhdHNfY291bnQ1OworI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UNV9HRU5TVEFUU19DT1VOVDUodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisKKwl1OAl1bnVzZWQwN2YwOFsweDA3ZjA4LTB4MDdlZjhdOworCisvKjB4MDdmMDgqLwl1NjQJZ2Vuc3RhdHNfY2ZnWzZdOworI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NGR19EVFlQRV9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NGR19DTElFTlRfTk9fU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgMykKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DRkdfV1JfUkRfQ1BMX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NGR19WUEFUSF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzMSwgMTcpCisvKjB4MDdmMzgqLwl1NjQJZ2Vuc3RhdF82NGJpdF9jZmc7CisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVF82NEJJVF9DRkdfRU5fRk9SX0dFTlNUQVRTMAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HRU5TVEFUXzY0QklUX0NGR19FTl9GT1JfR0VOU1RBVFMyCXZ4Z2VfbUJJVCg3KQorCXU4CXVudXNlZDA4MDAwWzB4MDgwMDAtMHgwN2Y0MF07CisvKjB4MDgwMDAqLwl1NjQJZ2NtZzNfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dTVENfRVJSMF9HU1RDMF9JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HU1RDX0VSUjFfR1NUQzFfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR0gyTF9FUlIwX0dIMkwwX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dIU1FfRVJSX0dIMkwxX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dIU1FfRVJSMl9HSDJMMl9JTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HSDJMX1NNRVJSMF9HSDJMM19JTlQJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HSFNRX0VSUjNfR0gyTDRfSU5UCXZ4Z2VfbUJJVCg2KQorLyoweDA4MDA4Ki8JdTY0CWdjbWczX2ludF9tYXNrOworCXU4CXVudXNlZDA5MDAwWzB4MDkwMDAtMHg4MDEwXTsKKworLyoweDA5MDAwKi8JdTY0CWczaWZjbWRfZmJfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0ZCX0lOVF9TVEFUVVNfRVJSX0czSUZfSU5UCXZ4Z2VfbUJJVCgwKQorLyoweDA5MDA4Ki8JdTY0CWczaWZjbWRfZmJfaW50X21hc2s7CisvKjB4MDkwMTAqLwl1NjQJZzNpZmNtZF9mYl9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfRkJfRVJSX1JFR19HM0lGX0NLX0RMTF9MT0NLCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfRkJfRVJSX1JFR19HM0lGX1NNX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19HM0lGQ01EX0ZCX0VSUl9SRUdfRzNJRl9SV0RRU19ETExfTE9DSyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfRkJfRVJSX1JFR19HM0lGX0lPQ0FMX0ZBVUxUCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwOTAxOCovCXU2NAlnM2lmY21kX2ZiX2Vycl9tYXNrOworLyoweDA5MDIwKi8JdTY0CWczaWZjbWRfZmJfZXJyX2FsYXJtOworCisJdTgJdW51c2VkMDk0MDBbMHgwOTQwMC0weDA5MDI4XTsKKworLyoweDA5NDAwKi8JdTY0CWczaWZjbWRfY211X2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTVVfSU5UX1NUQVRVU19FUlJfRzNJRl9JTlQJdnhnZV9tQklUKDApCisvKjB4MDk0MDgqLwl1NjQJZzNpZmNtZF9jbXVfaW50X21hc2s7CisvKjB4MDk0MTAqLwl1NjQJZzNpZmNtZF9jbXVfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNVV9FUlJfUkVHX0czSUZfQ0tfRExMX0xPQ0sJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTVVfRVJSX1JFR19HM0lGX1NNX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19HM0lGQ01EX0NNVV9FUlJfUkVHX0czSUZfUldEUVNfRExMX0xPQ0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTVVfRVJSX1JFR19HM0lGX0lPQ0FMX0ZBVUxUCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwOTQxOCovCXU2NAlnM2lmY21kX2NtdV9lcnJfbWFzazsKKy8qMHgwOTQyMCovCXU2NAlnM2lmY21kX2NtdV9lcnJfYWxhcm07CisKKwl1OAl1bnVzZWQwOTgwMFsweDA5ODAwLTB4MDk0MjhdOworCisvKjB4MDk4MDAqLwl1NjQJZzNpZmNtZF9jbWxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNTF9JTlRfU1RBVFVTX0VSUl9HM0lGX0lOVAl2eGdlX21CSVQoMCkKKy8qMHgwOTgwOCovCXU2NAlnM2lmY21kX2NtbF9pbnRfbWFzazsKKy8qMHgwOTgxMCovCXU2NAlnM2lmY21kX2NtbF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01MX0VSUl9SRUdfRzNJRl9DS19ETExfTE9DSwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNTF9FUlJfUkVHX0czSUZfU01fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0czSUZDTURfQ01MX0VSUl9SRUdfRzNJRl9SV0RRU19ETExfTE9DSyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01MX0VSUl9SRUdfRzNJRl9JT0NBTF9GQVVMVAl2eGdlX21CSVQoNTUpCisvKjB4MDk4MTgqLwl1NjQJZzNpZmNtZF9jbWxfZXJyX21hc2s7CisvKjB4MDk4MjAqLwl1NjQJZzNpZmNtZF9jbWxfZXJyX2FsYXJtOworCXU4CXVudXNlZDA5YjAwWzB4MDliMDAtMHgwOTgyOF07CisKKy8qMHgwOWIwMCovCXU2NAl2cGF0aF90b192cGxhbmVfbWFwWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9UT19WUExBTkVfTUFQX1ZQQVRIX1RPX1ZQTEFORV9NQVAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKwl1OAl1bnVzZWQwOWMzMFsweDA5YzMwLTB4MDliODhdOworCisvKjB4MDljMzAqLwl1NjQJeGd4c19jZmdfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1NJR19ERVRFQ1RfRk9SQ0VfTE9TKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9TSUdfREVURUNUX0ZPUkNFX1ZBTElEKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19DRkdfUE9SVF9TRUxfSU5GT18wCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1NFTF9JTkZPXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAyOSwgMykKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1RYX0xBTkUwX1NLRVcodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1RYX0xBTkUxX1NLRVcodmFsKSB2eGdlX3ZCSVQodmFsLCAzNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1RYX0xBTkUyX1NLRVcodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0NGR19QT1JUX1RYX0xBTkUzX1NLRVcodmFsKSB2eGdlX3ZCSVQodmFsLCA0NCwgNCkKKy8qMHgwOWM0MCovCXU2NAl4Z3hzX3J4YmVyX2NmZ19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hHWFNfUlhCRVJfQ0ZHX1BPUlRfSU5URVJWQUxfRFVSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1JYQkVSX0NGR19QT1JUX1JYR1hTX0lOVEVSVkFMX0NOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgNDgpCisvKjB4MDljNTAqLwl1NjQJeGd4c19yeGJlcl9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1JYQkVSX1NUQVRVU19QT1JUX1JYR1hTX1JYR1hTX0xBTkVfQV9FUlJfQ05UKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfUlhCRVJfU1RBVFVTX1BPUlRfUlhHWFNfUlhHWFNfTEFORV9CX0VSUl9DTlQodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfUlhCRVJfU1RBVFVTX1BPUlRfUlhHWFNfUlhHWFNfTEFORV9DX0VSUl9DTlQodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfUlhCRVJfU1RBVFVTX1BPUlRfUlhHWFNfUlhHWFNfTEFORV9EX0VSUl9DTlQodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDA5YzYwKi8JdTY0CXhneHNfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfVFhfQUNUSVZJVFkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX1JYX0FDVElWSVRZKHZhbCkgdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19DVENfRklGT19FUlIJQklUKDExKQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX0JZVEVfU1lOQ19MT1NUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX0NUQ19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19BTElHTk1FTlRfRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19ERUNfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfU0tJUF9JTlNfUkVRKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX1NLSVBfREVMX1JFUSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNiwgNCkKKy8qMHgwOWM3MCovCXU2NAl4Z3hzX3BtYV9yZXNldF9wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hHWFNfUE1BX1JFU0VUX1BPUlRfU0VSREVTX1JFU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKwl1OAl1bnVzZWQwOWM5MFsweDA5YzkwLTB4MDljODBdOworCisvKjB4MDljOTAqLwl1NjQJeGd4c19zdGF0aWNfY2ZnX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfWEdYU19TVEFUSUNfQ0ZHX1BPUlRfRldfQ1RSTF9TRVJERVMJdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDlkNDBbMHgwOWQ0MC0weDA5Y2EwXTsKKworLyoweDA5ZDQwKi8JdTY0CXhneHNfaW5mb19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hHWFNfSU5GT19QT1JUX1hNQUNKX0lORk9fMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX1hHWFNfSU5GT19QT1JUX1hNQUNKX0lORk9fMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwOWQ1MCovCXU2NAlyYXRlbWdtdF9jZmdfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19SQVRFTUdNVF9DRkdfUE9SVF9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgMiwgMikKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9DRkdfUE9SVF9SQVRFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0NGR19QT1JUX0ZJWEVEX1VTRV9GU00JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0NGR19QT1JUX0FOVFBfVVNFX0ZTTQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQ0ZHX1BPUlRfQU5CRV9VU0VfRlNNCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwOWQ2MCovCXU2NAlyYXRlbWdtdF9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DT01QTEVURQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9SQVRFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX1NUQVRVU19QT1JUX1JBVEVNR01UX01BQ19NQVRDSEVTX1BIWQl2eGdlX21CSVQoMTEpCisJdTgJdW51c2VkMDlkODBbMHgwOWQ4MC0weDA5ZDcwXTsKKworLyoweDA5ZDgwKi8JdTY0CXJhdGVtZ210X2ZpeGVkX2NmZ19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0ZJWEVEX0NGR19QT1JUX1JFU1RBUlQJdnhnZV9tQklUKDcpCisvKjB4MDlkOTAqLwl1NjQJcmF0ZW1nbXRfYW50cF9jZmdfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1JFU1RBUlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9VU0VfUFJFQU1CTEVfRVhUX1BIWQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9VU0VfQUNUX1NFTAl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9UX1JFVFJZX1BIWV9RVUVSWSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1RfV0FJVF9NRElPX1JFU1BPTlNFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfVF9MRE9XTl9SRUFVVE9fUkVTUE9OU0UodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjQsIDQpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9BRFZFUlRJU0VfMTBHCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX0FEVkVSVElTRV8xRwl2eGdlX21CSVQoMzUpCisvKjB4MDlkYTAqLwl1NjQJcmF0ZW1nbXRfYW5iZV9jZmdfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1JFU1RBUlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9QQVJBTExFTF9ERVRFQ1RfMTBHX0tYNF9FTkFCTEUgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9QQVJBTExFTF9ERVRFQ1RfMUdfS1hfRU5BQkxFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfVF9TWU5DXzEwR19LWDQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1RfU1lOQ18xR19LWCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZSBWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfVF9ETUVfRVhDSEFOR0UodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX0FEVkVSVElTRV8xMEdfS1g0CXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX0FEVkVSVElTRV8xR19LWAl2eGdlX21CSVQoMzUpCisvKjB4MDlkYjAqLwl1NjQJYW5iZV9jZmdfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19BTkJFX0NGR19QT1JUX1JFU0VUX0NGR19SRUdTKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19BTkJFX0NGR19QT1JUX0FMSUdOXzEwR19LWDRfT1ZFUlJJREUodmFsKSB2eGdlX3ZCSVQodmFsLCAxMCwgMikKKyNkZWZpbmUgVlhHRV9IV19BTkJFX0NGR19QT1JUX1NZTkNfMUdfS1hfT1ZFUlJJREUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKy8qMHgwOWRjMCovCXU2NAlhbmJlX21ncl9jdHJsX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5CRV9NR1JfQ1RSTF9QT1JUX1dFCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfTUdSX0NUUkxfUE9SVF9TVFJPQkUJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfQU5CRV9NR1JfQ1RSTF9QT1JUX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNSwgOSkKKyNkZWZpbmUgVlhHRV9IV19BTkJFX01HUl9DVFJMX1BPUlRfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwOWRlMFsweDA5ZGUwLTB4MDlkZDBdOworCisvKjB4MDlkZTAqLwl1NjQJYW5iZV9md19tc3RyX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5CRV9GV19NU1RSX1BPUlRfQ09OTkVDVF9CRUFOX1RPX1NFUkRFUwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0ZXX01TVFJfUE9SVF9UWF9aRVJPRVNfVE9fU0VSREVTCXZ4Z2VfbUJJVCg3KQorLyoweDA5ZGYwKi8JdTY0CWFuYmVfaHdmc21fZ2VuX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzEwR19LWDRfVVNJTkdfUEQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzEwR19LWDRfVVNJTkdfRE1FIFwKKwkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xR19LWF9VU0lOR19QRCBcCisJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzFHX0tYX1VTSU5HX0RNRSBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0FOQkVGU01fU1RBVEUodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTgsIDYpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQkVBTl9ORVhUX1BBR0VfUkVDRUlWRUQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CRUFOX0JBU0VfUEFHRV9SRUNFSVZFRCBcCisJCQkJCQkJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0JFQU5fQVVUT05FR19DT01QTEVURSBcCisJCQkJCQkJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfTlBfQkVGT1JFX0JQIFwKKwkJCQkJCQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVwKK1ZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9BTl9DT01QTEVURV9CRUZPUkVfQlAgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJXAorVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX0FOX0NPTVBMRVRFX0JFRk9SRV9OUCBcCit2eGdlX21CSVQoNTEpCisjZGVmaW5lCVwKK1ZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9NT0RFX1dIRU5fQU5fQ09NUExFVEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DT1VOVF9CUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NiwgNCkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DT1VOVF9OUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA2MCwgNCkKKy8qMHgwOWUwMCovCXU2NAlhbmJlX2h3ZnNtX2JwX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfRkVDX0VOQUJMRSBcCisJCQkJCQkJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfRkVDX0FCSUxJVFkgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQXzEwR19LUl9DQVBBQkxFIFwKKwkJCQkJCQl2eGdlX21CSVQoNDApCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF8xMEdfS1g0X0NBUEFCTEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQXzFHX0tYX0NBUEFCTEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MikKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1RYX05PTkNFKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfTlAJdnhnZV9tQklUKDQ4KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfQUNLCXZ4Z2VfbUJJVCg0OSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1JFTU9URV9GQVVMVCBcCisJCQkJCQkJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfQVNNX0RJUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9QQVVTRQl2eGdlX21CSVQoNTMpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9FQ0hPRURfTk9OQ0UodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTQsIDUpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9TRUxFQ1RPUl9GSUVMRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwOWUxMCovCXU2NAlhbmJlX2h3ZnNtX25wX3N0YXR1c19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfTlBfQklUU180N19UT18zMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9OUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9OUF9CSVRTXzMxX1RPXzAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA5ZTMwWzB4MDllMzAtMHgwOWUyMF07CisKKy8qMHgwOWUzMCovCXU2NAlhbnRwX2dlbl9jZmdfcG9ydFsyXTsKKy8qMHgwOWU0MCovCXU2NAlhbnRwX2h3ZnNtX2dlbl9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xMEcJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMUcJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQU5UUEZTTV9TVEFURSh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMCwgNikKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9BVVRPTkVHX0NPTVBMRVRFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfTk9fTFBfWE5QIFwKKwkJCQkJCQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfR09UX0xQX1hOUAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9NRVNTQUdFX0NPREUgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX05PX0hDRCBcCisJCQkJCQkJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0ZPVU5EX0hDRAl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9JTlZBTElEX1JBVEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9WQUxJRF9SQVRFCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9QRVJTSVNURU5UX0xET1dOIFwKKwkJCQkJCQl2eGdlX21CSVQoNTkpCisvKjB4MDllNTAqLwl1NjQJYW50cF9od2ZzbV9icF9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX05QCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfQUNLCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfUkYJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9YTlAJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9BQklMSVRZX0ZJRUxEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDcpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9TRUxFQ1RPUl9GSUVMRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKy8qMHgwOWU2MCovCXU2NAlhbnRwX2h3ZnNtX3hucF9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfTlAJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX0FDSwl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfTVAJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX0FDSzIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX1RPR0dMRQl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfTUVTU0FHRV9DT0RFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUsIDExKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9VTkZfQ09ERV9GSUVMRDEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9VTkZfQ09ERV9GSUVMRDIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorLyoweDA5ZTcwKi8JdTY0CW1kaW9fbWdyX2FjY2Vzc19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX1NUUk9CRV9PTkUJQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfT1BfVFlQRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfREVWQUQodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfU1RfUEFUVEVSTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAyKQorI2RlZmluZQlWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX1BSRUFNQkxFCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9QUlRBRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU1LCA1KQorI2RlZmluZQlWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX1NUUk9CRV9UV08JdnhnZV9tQklUKDYzKQorCXU4CXVudXNlZDBhMjAwWzB4MGEyMDAtMHgwOWU4MF07CisvKjB4MGEyMDAqLwl1NjQJeG1hY192c3BvcnRfY2hvaWNlc192aFsxN107CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFU19WSF9WU1BPUlRfVkVDVE9SKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMGE0MDBbMHgwYTQwMC0weDBhMjg4XTsKKworLyoweDBhNDAwKi8JdTY0CXJ4X3RocmVzaF9jZmdfdnBbMTddOworI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUEFVU0VfTE9XX1RIUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9QQVVTRV9ISUdIX1RIUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9SRURfVEhSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1JFRF9USFJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUkVEX1RIUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9SRURfVEhSXzModmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKwl1OAl1bnVzZWQwYWM5MFsweDBhYzkwLTB4MGE0ODhdOworfSBfX3BhY2tlZDsKKworLypWWEdFX0hXX1NSUENJTV9SRUdTX0gqLworc3RydWN0IHZ4Z2VfaHdfc3JwY2ltX3JlZyB7CisKKy8qMHgwMDAwMCovCXU2NAl0aW1fbXIyc3JfcmVzb3VyY2VfYXNzaWdubWVudF92aDsKKyNkZWZpbmUJVlhHRV9IV19USU1fTVIyU1JfUkVTT1VSQ0VfQVNTSUdOTUVOVF9WSF9CTUFQX1JPT1QodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMzIpCisJdTgJdW51c2VkMDAxMDBbMHgwMDEwMC0weDAwMDA4XTsKKworLyoweDAwMTAwKi8JdTY0CXNycGNpbV9wY2lwaWZfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fUENJUElGX0lOVF9TVEFUVVNfTVJQQ0lNX01TR19NUlBDSU1fTVNHX0lOVAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fUENJUElGX0lOVF9TVEFUVVNfVlBBVEhfTVNHX1ZQQVRIX01TR19JTlQJQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1BDSVBJRl9JTlRfU1RBVFVTX1NSUENJTV9TUEFSRV9SMV9TUlBDSU1fU1BBUkVfUjFfSU5UIFwKKwkJCQkJCQkJCUJJVCgxMSkKKy8qMHgwMDEwOCovCXU2NAlzcnBjaW1fcGNpcGlmX2ludF9tYXNrOworLyoweDAwMTEwKi8JdTY0CW1ycGNpbV9tc2dfcmVnOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9NU0dfUkVHX1NXSUZfTVJQQ0lNX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMykKKy8qMHgwMDExOCovCXU2NAltcnBjaW1fbXNnX21hc2s7CisvKjB4MDAxMjAqLwl1NjQJbXJwY2ltX21zZ19hbGFybTsKKy8qMHgwMDEyOCovCXU2NAl2cGF0aF9tc2dfcmVnOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDBfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDFfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDJfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDNfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDRfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDVfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDZfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDdfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDhfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDlfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDEwX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTFfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxMl9UT19TUlBDSU1fUk1TR19JTlQJQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDEzX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTRfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxNV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDE2X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTYpCisvKjB4MDAxMzAqLwl1NjQJdnBhdGhfbXNnX21hc2s7CisvKjB4MDAxMzgqLwl1NjQJdnBhdGhfbXNnX2FsYXJtOworCXU4CXVudXNlZDAwMTYwWzB4MDAxNjAtMHgwMDE0MF07CisKKy8qMHgwMDE2MCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX3dtc2c7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX01SUENJTV9XTVNHX1NSUENJTV9UT19NUlBDSU1fV01TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDE2OCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX3dtc2dfdHJpZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fTVJQQ0lNX1dNU0dfVFJJR19TUlBDSU1fVE9fTVJQQ0lNX1dNU0dfVFJJRwlCSVQoMCkKKy8qMHgwMDE3MCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX3Jtc2c7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1RPX1NSUENJTV9STVNHX1NXSUZfTVJQQ0lNX1RPX1NSUENJTV9STVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMTc4Ki8JdTY0CXZwYXRoX3RvX3NycGNpbV9ybXNnX3NlbDsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19TUlBDSU1fUk1TR19TRUxfVlBBVEhfVE9fU1JQQ0lNX1JNU0dfU0VMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDUpCisvKjB4MDAxODAqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX3Jtc2c7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fU1JQQ0lNX1JNU0dfU1dJRl9WUEFUSF9UT19TUlBDSU1fUk1TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDIwMFsweDAwMjAwLTB4MDAxODhdOworCisvKjB4MDAyMDAqLwl1NjQJc3JwY2ltX2dlbmVyYWxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BJQ19JTlQJQklUKDApCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QQ0lfSU5UCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQJQklUKDcpCisJdTgJdW51c2VkMDAyMTBbMHgwMDIxMC0weDAwMjA4XTsKKworLyoweDAwMjEwKi8JdTY0CXNycGNpbV9nZW5lcmFsX2ludF9tYXNrOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BJQ19JTlQJQklUKDApCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUENJX0lOVAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfTUFTS19YTUFDX0lOVAlCSVQoNykKKwl1OAl1bnVzZWQwMDIyMFsweDAwMjIwLTB4MDAyMThdOworCisvKjB4MDAyMjAqLwl1NjQJc3JwY2ltX3BwaWZfaW50X3N0YXR1czsKKworLyoweDAwMjI4Ki8JdTY0CXNycGNpbV9wcGlmX2ludF9tYXNrOworLyoweDAwMjMwKi8JdTY0CXNycGNpbV9nZW5fZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfUENJQ09ORklHX1BGX1NUQVRVU19FUlIJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX1BDSUNPTkZJR19QRl9VTkNPUl9FUlIJQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX1BDSUNPTkZJR19QRl9DT1JfRVJSCUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfSU5UQ1RSTF9TQ0hFRF9JTlQJQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19JTklfU0VSUl9ERVQJQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19UR1RfUEZfSUxMRUdBTF9BQ0NFU1MJQklUKDIzKQorLyoweDAwMjM4Ki8JdTY0CXNycGNpbV9nZW5fZXJyb3JzX21hc2s7CisvKjB4MDAyNDAqLwl1NjQJc3JwY2ltX2dlbl9lcnJvcnNfYWxhcm07CisvKjB4MDAyNDgqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1RPX1NSUENJTV9BTEFSTV9SRUdfUFBJRl9NUlBDSU1fVE9fU1JQQ0lNX0FMQVJNCUJJVCgzKQorLyoweDAwMjUwKi8JdTY0CW1ycGNpbV90b19zcnBjaW1fYWxhcm1fbWFzazsKKy8qMHgwMDI1OCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX2FsYXJtX2FsYXJtOworLyoweDAwMjYwKi8JdTY0CXZwYXRoX3RvX3NycGNpbV9hbGFybV9yZWc7CisKKy8qMHgwMDI2OCovCXU2NAl2cGF0aF90b19zcnBjaW1fYWxhcm1fbWFzazsKKy8qMHgwMDI3MCovCXU2NAl2cGF0aF90b19zcnBjaW1fYWxhcm1fYWxhcm07CisJdTgJdW51c2VkMDAyODBbMHgwMDI4MC0weDAwMjc4XTsKKworLyoweDAwMjgwKi8JdTY0CXBmX3N3X3Jlc2V0OworI2RlZmluZSBWWEdFX0hXX1BGX1NXX1JFU0VUX1BGX1NXX1JFU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKy8qMHgwMDI4OCovCXU2NAlzcnBjaW1fZ2VuZXJhbF9jZmcxOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfQk9PVF9CWVRFX1NXQVBFTglCSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9CT09UX0JJVF9GTElQRU4JQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfTVNJWF9BRERSX1NXQVBFTglCSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9NU0lYX0FERFJfRkxJUEVOCUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX01TSVhfREFUQV9TV0FQRU4JQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfTVNJWF9EQVRBX0ZMSVBFTglCSVQoMzkpCisvKjB4MDAyOTAqLwl1NjQJc3JwY2ltX2ludGVycnVwdF9jZmcxOworI2RlZmluZSBWWEdFX0hXX1NSUENJTV9JTlRFUlJVUFRfQ0ZHMV9BTEFSTV9NQVBfVE9fTVNHKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKyNkZWZpbmUgVlhHRV9IV19TUlBDSU1fSU5URVJSVVBUX0NGRzFfVFJBRkZJQ19DTEFTUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDMpCisJdTgJdW51c2VkMDAyYThbMHgwMDJhOC0weDAwMjk4XTsKKworLyoweDAwMmE4Ki8JdTY0CXNycGNpbV9jbGVhcl9tc2l4X21hc2s7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0NMRUFSX01TSVhfTUFTS19TUlBDSU1fQ0xFQVJfTVNJWF9NQVNLCUJJVCgwKQorLyoweDAwMmIwKi8JdTY0CXNycGNpbV9zZXRfbXNpeF9tYXNrOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9TRVRfTVNJWF9NQVNLX1NSUENJTV9TRVRfTVNJWF9NQVNLCUJJVCgwKQorLyoweDAwMmI4Ki8JdTY0CXNycGNpbV9jbHJfbXNpeF9vbmVfc2hvdDsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fQ0xSX01TSVhfT05FX1NIT1RfU1JQQ0lNX0NMUl9NU0lYX09ORV9TSE9UCUJJVCgwKQorLyoweDAwMmMwKi8JdTY0CXNycGNpbV9yc3RfaW5fcHJvZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fUlNUX0lOX1BST0dfU1JQQ0lNX1JTVF9JTl9QUk9HCUJJVCg3KQorLyoweDAwMmM4Ki8JdTY0CXNycGNpbV9yZWdfbW9kaWZpZWQ7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1JFR19NT0RJRklFRF9TUlBDSU1fUkVHX01PRElGSUVECUJJVCg3KQorLyoweDAwMmQwKi8JdTY0CXRndF9wZl9pbGxlZ2FsX2FjY2VzczsKKyNkZWZpbmUgVlhHRV9IV19UR1RfUEZfSUxMRUdBTF9BQ0NFU1NfU1dJRl9SRUdJT04odmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorLyoweDAwMmQ4Ki8JdTY0CXNycGNpbV9tc2l4X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNJWF9TVEFUVVNfSU5UQ1RMX1NSUENJTV9NU0lYX01BU0sJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TSVhfU1RBVFVTX0lOVENUTF9TUlBDSU1fTVNJWF9QRU5ESU5HX1ZFQ1RPUglCSVQoNykKKwl1OAl1bnVzZWQwMDg4MFsweDAwODgwLTB4MDAyZTBdOworCisvKjB4MDA4ODAqLwl1NjQJeGdtYWNfc3JfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19TUl9JTlRfU1RBVFVTX0FTSUNfTlRXS19TUl9FUlJfQVNJQ19OVFdLX1NSX0lOVAlCSVQoMykKKy8qMHgwMDg4OCovCXU2NAl4Z21hY19zcl9pbnRfbWFzazsKKy8qMHgwMDg5MCovCXU2NAlhc2ljX250d2tfc3JfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfU1JfRVJSX1JFR19YTUFDSl9OVFdLX1NVU1RBSU5FRF9GQVVMVAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfU1JfRVJSX1JFR19YTUFDSl9OVFdLX1NVU1RBSU5FRF9PSwlCSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfU1JfRVJSX1JFR19YTUFDSl9OVFdLX1NVU1RBSU5FRF9GQVVMVF9PQ0NVUlJFRCBcCisJCQkJCQkJCQlCSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1NSX0VSUl9SRUdfWE1BQ0pfTlRXS19TVVNUQUlORURfT0tfT0NDVVJSRUQJQklUKDE1KQorLyoweDAwODk4Ki8JdTY0CWFzaWNfbnR3a19zcl9lcnJfbWFzazsKKy8qMHgwMDhhMCovCXU2NAlhc2ljX250d2tfc3JfZXJyX2FsYXJtOworCXU4CXVudXNlZDAwOGMwWzB4MDA4YzAtMHgwMDhhOF07CisKKy8qMHgwMDhjMCovCXU2NAl4bWFjX3ZzcG9ydF9jaG9pY2VzX3NyX2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRVNfU1JfQ0xPTkVfVlNQT1JUX1ZFQ1RPUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMDkwMFsweDAwOTAwLTB4MDA4YzhdOworCisvKjB4MDA5MDAqLwl1NjQJbXJfcnFhX3RvcF9wcnR5X2Zvcl92aDsKKyNkZWZpbmUJVlhHRV9IV19NUl9SUUFfVE9QX1BSVFlfRk9SX1ZIX1JRQV9UT1BfUFJUWV9GT1JfVkgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDA5MDgqLwl1NjQJdW1xX3ZoX2RhdGFfbGlzdF9lbXB0eTsKKyNkZWZpbmUJVlhHRV9IV19VTVFfVkhfREFUQV9MSVNUX0VNUFRZX1JPQ1JDX1VNUV9WSF9EQVRBX0xJU1RfRU1QVFkgXAorCQkJCQkJCUJJVCgwKQorLyoweDAwOTEwKi8JdTY0CXdkZV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfTVdCX1NUQVJUCUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX01XQl9FTkQJQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfUUJfU1RBUlQJQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfUUJfRU5ECUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX01QU0JfU1RBUlQJQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfRk9SQ0VfTVBTQl9FTkQJQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfTVdCX09QVF9FTglCSVQoNikKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9RQl9PUFRfRU4JQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfTVBTQl9PUFRfRU4JQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfTVdCX1NUQVJUCUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX01XQl9FTkQJQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX1FCX1NUQVJUCUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9RQl9FTkQJQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX01QU0JfU1RBUlQJQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX01QU0JfRU5ECUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9NV0JfT1BUX0VOCUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9RQl9PUFRfRU4JQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX01QU0JfT1BUX0VOCUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX0RJU0FCTEVfUVBBRF9GT1JfVU5BTElHTkVEX0FERFIJQklUKDE5KQorI2RlZmluZSBWWEdFX0hXX1dERV9DRkdfQUxJR05NRU5UX1BSRUZFUkVOQ0UodmFsKSB2eGdlX3ZCSVQodmFsLCAzMCwgMikKKyNkZWZpbmUgVlhHRV9IV19XREVfQ0ZHX01FTV9XT1JEX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCA0NiwgMikKKworfSBfX3BhY2tlZDsKKworLypWWEdFX0hXX1ZQTUdNVF9SRUdTX0gqLworc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyB7CisKKwl1OAl1bnVzZWQwMDA0MFsweDAwMDQwLTB4MDAwMDBdOworCisvKjB4MDAwNDAqLwl1NjQJdnBhdGhfdG9fZnVuY19tYXBfY2ZnMTsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9UT19GVU5DX01BUF9DRkcxX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKy8qMHgwMDA0OCovCXU2NAl2cGF0aF9pc19maXJzdDsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JU19GSVJTVF9WUEFUSF9JU19GSVJTVAl2eGdlX21CSVQoMykKKy8qMHgwMDA1MCovCXU2NAlzcnBjaW1fdG9fdnBhdGhfd21zZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fVlBBVEhfV01TR19TUlBDSU1fVE9fVlBBVEhfV01TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDA1OCovCXU2NAlzcnBjaW1fdG9fdnBhdGhfd21zZ190cmlnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19WUEFUSF9XTVNHX1RSSUdfU1JQQ0lNX1RPX1ZQQVRIX1dNU0dfVFJJRyBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgwKQorCXU4CXVudXNlZDAwMTAwWzB4MDAxMDAtMHgwMDA2MF07CisKKy8qMHgwMDEwMCovCXU2NAl0aW1fdnBhdGhfYXNzaWdubWVudDsKKyNkZWZpbmUgVlhHRV9IV19USU1fVlBBVEhfQVNTSUdOTUVOVF9CTUFQX1JPT1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKwl1OAl1bnVzZWQwMDE0MFsweDAwMTQwLTB4MDAxMDhdOworCisvKjB4MDAxNDAqLwl1NjQJcnFhX3RvcF9wcnR5X2Zvcl92cDsKKyNkZWZpbmUgVlhHRV9IV19SUUFfVE9QX1BSVFlfRk9SX1ZQX1JRQV9UT1BfUFJUWV9GT1JfVlAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisJdTgJdW51c2VkMDAxYzBbMHgwMDFjMC0weDAwMTQ4XTsKKworLyoweDAwMWMwKi8JdTY0CXJ4bWFjX3J4X3BhX2NmZzBfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX0lHTk9SRV9GUkFNRV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfU1VQUE9SVF9TTkFQX0FCX04JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfU0VBUkNIX0ZPUl9IQU8JdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1NVUFBPUlRfTU9CSUxFX0lQVjZfSERSUyBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9JUFY2X1NUT1BfU0VBUkNISU5HIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX05PX1BTX0lGX1VOS05PV04JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1NFQVJDSF9GT1JfRVRZUEUJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfQU5ZX0ZSTV9JRl9MM19DU1VNX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX09GRkxEX0ZSTV9JRl9MM19DU1VNX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX0FOWV9GUk1fSUZfTDRfQ1NVTV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19PRkZMRF9GUk1fSUZfTDRfQ1NVTV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19BTllfRlJNX0lGX1JQQV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19PRkZMRF9GUk1fSUZfUlBBX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9KVU1CT19TTkFQX0VOCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMDFjOCovCXU2NAlydHNfbWdyX2NmZzBfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfUlRTX0RQX1NQX1BSSU9SSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfRkxFWF9MNFBSVENMX1ZBTFVFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfSUNNUF9UUkFTSAl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9UQ1BTWU5fVFJBU0gJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfWkw0UFlMRF9UUkFTSAl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9MNFBSVENMX1RDUF9UUkFTSAl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9MNFBSVENMX1VEUF9UUkFTSAl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX1ZQTUdNVF9DTE9ORV9MNFBSVENMX0ZMRVhfVFJBU0gJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfSVBGUkFHX1RSQVNICXZ4Z2VfbUJJVCg1OSkKKy8qMHgwMDFkMCovCXU2NAlydHNfbWdyX2NyaXRlcmlhX3ByaW9yaXR5X3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9FVFlQRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX0lDTVBfVENQU1lOKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfTDRQTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMywgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9SQU5HRV9MNFBOKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE3LCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX1JUSF9JVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9EUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9RT1ModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjksIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfWkw0UFlMRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMywgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9MNFBSVENMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorLyoweDAwMWQ4Ki8JdTY0CXJ4bWFjX2NmZzBfcG9ydF92cG1nbXRfY2xvbmVbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9STUFDX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfU1RSSVBfRkNTCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfRElTQ0FSRF9QRlJNCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9GQ1NfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9MT05HX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfVVNJWkVEX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfTEVOX01JU01BVENIIFwKKwkJCQkJCQkJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfTUFYX1BZTERfTEVOKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUwLCAxNCkKKy8qMHgwMDFmMCovCXU2NAlyeG1hY19wYXVzZV9jZmdfcG9ydF92cG1nbXRfY2xvbmVbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0dFTl9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfUkNWX0VOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9BQ0NFTF9TRU5EKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0RVQUxfVEhSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfSElHSF9QVElNRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0lHTk9SRV9QRl9GQ1NfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfUEZfTEVOX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfTElNSVRFUl9FTgl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX01BWF9MSU1JVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfUEVSTUlUX1JBVEVNR01UX0NUUkwgXAorCQkJCQkJCXZ4Z2VfbUJJVCg1OSkKKwl1OAl1bnVzZWQwMDI0MFsweDAwMjQwLTB4MDAyMDhdOworCisvKjB4MDAyNDAqLwl1NjQJeG1hY192c3BvcnRfY2hvaWNlc192cDsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VTX1ZQX1ZTUE9SVF9WRUNUT1IodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMDI2MFsweDAwMjYwLTB4MDAyNDhdOworCisvKjB4MDAyNjAqLwl1NjQJeGdtYWNfZ2VuX3N0YXR1c192cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX1NUQVRVU19WUE1HTVRfQ0xPTkVfWE1BQ0pfTlRXS19PSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fU1RBVFVTX1ZQTUdNVF9DTE9ORV9YTUFDSl9OVFdLX0RBVEFfUkFURSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMDI2OCovCXU2NAl4Z21hY19zdGF0dXNfcG9ydF92cG1nbXRfY2xvbmVbMl07CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfU1RBVFVTX1BPUlRfVlBNR01UX0NMT05FX1JNQUNfUkVNT1RFX0ZBVUxUIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfU1RBVFVTX1BPUlRfVlBNR01UX0NMT05FX1JNQUNfTE9DQUxfRkFVTFQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfU1RBVFVTX1BPUlRfVlBNR01UX0NMT05FX1hNQUNKX01BQ19QSFlfTEFZRVJfQVZBSUwgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfU1RBVFVTX1BPUlRfVlBNR01UX0NMT05FX1hNQUNKX1BPUlRfT0sJdnhnZV9tQklUKDE1KQorLyoweDAwMjc4Ki8JdTY0CXhtYWNfZ2VuX2NmZ192cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9SQVRFTUdNVF9NQUNfUkFURV9TRUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfVlBNR01UX0NMT05FX1RYX0hFQURfRFJPUF9XSEVOX0ZBVUxUIFwKKwkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfVlBNR01UX0NMT05FX0ZBVUxUX0JFSEFWSU9VUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9QRVJJT0RfTlRXS19VUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9DRkdfVlBNR01UX0NMT05FX1BFUklPRF9OVFdLX0RPV04odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDQpCisvKjB4MDAyODAqLwl1NjQJeG1hY190aW1lc3RhbXBfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1ZQTUdNVF9DTE9ORV9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9WUE1HTVRfQ0xPTkVfVVNFX0xJTktfSUQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9WUE1HTVRfQ0xPTkVfSU5URVJWQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9WUE1HTVRfQ0xPTkVfVElNRVJfUkVTVEFSVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVlBNR01UX0NMT05FX1hNQUNKX1JPTExPVkVSX0NOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisvKjB4MDAyODgqLwl1NjQJeG1hY19zdGF0c19nZW5fY2ZnX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfVlBNR01UX0NMT05FX1BSVEFHR1JfQ1VNX1RJTUVSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9WUEFUSF9DVU1fVElNRVIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfVlBNR01UX0NMT05FX1ZMQU5fSEFORExJTkcJdnhnZV9tQklUKDE1KQorLyoweDAwMjkwKi8JdTY0CXhtYWNfY2ZnX3BvcnRfdnBtZ210X2Nsb25lWzNdOworI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1hHTUlJX0xPT1BCQUNLCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1hHTUlJX1JFVkVSU0VfTE9PUEJBQ0sgXAorCQkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9YR01JSV9UWF9CRUhBVgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfWEdNSUlfUlhfQkVIQVYJdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDAwMmMwWzB4MDAyYzAtMHgwMDJhOF07CisKKy8qMHgwMDJjMCovCXU2NAl0eG1hY19nZW5fY2ZnMF92cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0NGRzBfVlBNR01UX0NMT05FX0NIT1NFTl9UWF9QT1JUCXZ4Z2VfbUJJVCg3KQorLyoweDAwMmM4Ki8JdTY0CXR4bWFjX2NmZzBfcG9ydF92cG1nbXRfY2xvbmVbM107CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9UTUFDX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfQVBQRU5EX1BBRAl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX1BBRF9CWVRFKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKwl1OAl1bnVzZWQwMDMwMFsweDAwMzAwLTB4MDAyZTBdOworCisvKjB4MDAzMDAqLwl1NjQJd29sX21wX2NyYzsKKyNkZWZpbmUgVlhHRV9IV19XT0xfTVBfQ1JDX0NSQyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1dPTF9NUF9DUkNfUkNfRU4JdnhnZV9tQklUKDYzKQorLyoweDAwMzA4Ki8JdTY0CXdvbF9tcF9tYXNrX2E7CisjZGVmaW5lIFZYR0VfSFdfV09MX01QX01BU0tfQV9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAzMTAqLwl1NjQJd29sX21wX21hc2tfYjsKKyNkZWZpbmUgVlhHRV9IV19XT0xfTVBfTUFTS19CX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDM2MFsweDAwMzYwLTB4MDAzMThdOworCisvKjB4MDAzNjAqLwl1NjQJZmF1X3BhX2NmZ192cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19WUE1HTVRfQ0xPTkVfUkVQTF9MNF9DT01QX0NTVU0JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1BBX0NGR19WUE1HTVRfQ0xPTkVfUkVQTF9MM19JTkNMX0NGCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfVlBNR01UX0NMT05FX1JFUExfTDNfQ09NUF9DU1VNCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMDM2OCovCXU2NAlyeF9kYXRhcGF0aF91dGlsX3ZwX2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1JYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfRkFVX1JYX1VUSUxJWkFUSU9OKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDcsIDkpCisjZGVmaW5lCVZYR0VfSFdfUlhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9SWF9VVElMX0NGRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX0ZBVV9SWF9GUkFDX1VUSUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9SWF9QS1RfV0VJR0hUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorCXU4CXVudXNlZDAwMzgwWzB4MDAzODAtMHgwMDM3MF07CisKKy8qMHgwMDM4MCovCXU2NAl0eF9kYXRhcGF0aF91dGlsX3ZwX2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1RYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfVFBBX1RYX1VUSUxJWkFUSU9OKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDcsIDkpCisjZGVmaW5lCVZYR0VfSFdfVFhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9UWF9VVElMX0NGRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUJVlhHRV9IV19UWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1RQQV9UWF9GUkFDX1VUSUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lCVZYR0VfSFdfVFhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9UWF9QS1RfV0VJR0hUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgeworCisJdTgJdW51c2VkMDAzMDBbMHgwMDMwMF07CisKKy8qMHgwMDMwMCovCXU2NAl1c2RjX3ZwYXRoOworI2RlZmluZSBWWEdFX0hXX1VTRENfVlBBVEhfU0dSUF9BU1NJR04odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKwl1OAl1bnVzZWQwMGEwMFsweDAwYTAwLTB4MDAzMDhdOworCisvKjB4MDBhMDAqLwl1NjQJd3JkbWFfYWxhcm1fc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1dSRE1BX0FMQVJNX1NUQVRVU19QUkNfQUxBUk1fUFJDX0lOVAl2eGdlX21CSVQoMSkKKy8qMHgwMGEwOCovCXU2NAl3cmRtYV9hbGFybV9tYXNrOworCXU4CXVudXNlZDAwYTMwWzB4MDBhMzAtMHgwMGExMF07CisKKy8qMHgwMGEzMCovCXU2NAlwcmNfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JJTkdfQlVNUAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SWERDTV9TQ19FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfQUJPUlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUVVBTlRBX1NJWkVfRVJSCXZ4Z2VfbUJJVCgzKQorLyoweDAwYTM4Ki8JdTY0CXByY19hbGFybV9tYXNrOworLyoweDAwYTQwKi8JdTY0CXByY19hbGFybV9hbGFybTsKKy8qMHgwMGE0OCovCXU2NAlwcmNfY2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHMV9SWF9USU1FUl9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCAyOSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHMV9USU1fUklOR19CVU1QX0lOVF9FTkFCTEUJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkcxX1JUSV9USU5UX0RJU0FCTEUJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkcxX0dSRUVEWV9SRVRVUk4JdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkcxX1FVSUNLX1NIT1QJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkcxX1JYX1RJTUVSX0NJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHMV9SRVNFVF9USU1FUl9PTl9SWERfUkVUKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDIpCisJdTgJdW51c2VkMDBhNjBbMHgwMGE2MC0weDAwYTUwXTsKKworLyoweDAwYTYwKi8JdTY0CXByY19jZmc0OworI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X0lOX1NWQwl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9SWERfTk9fU05PT1AJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X0ZSTV9OT19TTk9PUAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfUlRIX0RJU0FCTEUJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X0lHTk9SRV9PV05FUlNISVAJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X1NJR05BTF9CRU5JR05fT1ZGTFcJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X0JJTU9EQUxfSU5URVJSVVBUCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNF9CQUNLT0ZGX0lOVEVSVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDI0KQorLyoweDAwYTY4Ki8JdTY0CXByY19jZmc1OworI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc1X1JYRDBfQUREKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjEpCisvKjB4MDBhNzAqLwl1NjQJcHJjX2NmZzY7CisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfRlJNX1BBRF9FTgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNl9RU0laRV9BTElHTkVEX1JYRAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNl9ET09SQkVMTF9NT0RFX0VOCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc2X0wzX0NQQ19UUlNGUl9DT0RFX0VOCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc2X0w0X0NQQ19UUlNGUl9DT0RFX0VOCXZ4Z2VfbUJJVCg5KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc2X1JYRF9DUlhEVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIzLCA5KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc2X1JYRF9TUEFUKHZhbCkgdnhnZV92QklUKHZhbCwgMzYsIDkpCisvKjB4MDBhNzgqLwl1NjQJcHJjX2NmZzc7CisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHN19TTUFSVF9TQ0FUX0VOCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHN19SWERfTlNfQ0hHX0VOCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHN19OT19IRFJfU0VQQVJBVElPTgl2eGdlX21CSVQoMTQpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfUlhEX0JVRkZfU0laRV9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDQpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfQlVGRl9TSVpFMF9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMjcsIDUpCisvKjB4MDBhODAqLwl1NjQJdGltX2Rlc3RfYWRkcjsKKyNkZWZpbmUgVlhHRV9IV19USU1fREVTVF9BRERSX1RJTV9ERVNUX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGE4OCovCXU2NAlwcmNfcnhkX2Rvb3JiZWxsOworI2RlZmluZSBWWEdFX0hXX1BSQ19SWERfRE9PUkJFTExfTkVXX1FXX0NOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMGE5MCovCXU2NAlycWFfcHJ0eV9mb3JfdnA7CisjZGVmaW5lIFZYR0VfSFdfUlFBX1BSVFlfRk9SX1ZQX1JRQV9QUlRZX0ZPUl9WUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYTk4Ki8JdTY0CXJ4ZG1lbV9zaXplOworI2RlZmluZSBWWEdFX0hXX1JYRE1FTV9TSVpFX1BSQ19SWERNRU1fU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCAxMykKKy8qMHgwMGFhMCovCXU2NAlmcm1faW5fcHJvZ3Jlc3NfY250OworI2RlZmluZQlWWEdFX0hXX0ZSTV9JTl9QUk9HUkVTU19DTlRfUFJDX0ZSTV9JTl9QUk9HUkVTU19DTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBhYTgqLwl1NjQJcnhfbXVsdGlfY2FzdF9zdGF0czsKKyNkZWZpbmUgVlhHRV9IV19SWF9NVUxUSV9DQVNUX1NUQVRTX0ZSQU1FX0RJU0NBUkQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDBhYjAqLwl1NjQJcnhfZnJtX3RyYW5zZmVycmVkOworI2RlZmluZQlWWEdFX0hXX1JYX0ZSTV9UUkFOU0ZFUlJFRF9SWF9GUk1fVFJBTlNGRVJSRUQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAwYWI4Ki8JdTY0CXJ4ZF9yZXR1cm5lZDsKKyNkZWZpbmUgVlhHRV9IV19SWERfUkVUVVJORURfUlhEX1JFVFVSTkVEKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorCXU4CXVudXNlZDAwYzAwWzB4MDBjMDAtMHgwMGFjMF07CisKKy8qMHgwMGMwMCovCXU2NAlrZGZjX2ZpZm9fdHJwbF9wYXJ0aXRpb247CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19GSUZPX1RSUExfUEFSVElUSU9OX0xFTkdUSF8wKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfRklGT19UUlBMX1BBUlRJVElPTl9MRU5HVEhfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMzLCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9QQVJUSVRJT05fTEVOR1RIXzIodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBjMDgqLwl1NjQJa2RmY19maWZvX3RycGxfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9DVFJMX1RSSVBMRVRfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorLyoweDAwYzEwKi8JdTY0CWtkZmNfdHJwbF9maWZvXzBfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9GTElQX0VOCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfU1dBUF9FTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0lOVF9DVFJMKHZhbCkgdnhnZV92QklUKHZhbCwgMjYsIDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0NUUkxfU1RSVUMJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9BRERfUEFECXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTk9fU05PT1AJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9STFhfT1JECXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfU0VMRUNUKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX0lOVF9OTyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQxLCA3KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9CSVRfTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAwYzE4Ki8JdTY0CWtkZmNfdHJwbF9maWZvXzFfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE0LCAyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9GTElQX0VOCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfU1dBUF9FTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0lOVF9DVFJMKHZhbCkgdnhnZV92QklUKHZhbCwgMjYsIDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0NUUkxfU1RSVUMJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9BRERfUEFECXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfTk9fU05PT1AJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9STFhfT1JECXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfU0VMRUNUKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX0lOVF9OTyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQxLCA3KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9CSVRfTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAwYzIwKi8JdTY0CWtkZmNfdHJwbF9maWZvXzJfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfRkxJUF9FTgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX1NXQVBfRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9JTlRfQ1RSTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI2LCAyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9DVFJMX1NUUlVDCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfQUREX1BBRAl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX05PX1NOT09QCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfUkxYX09SRAl2eGdlX21CSVQoMzEpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX1NFTEVDVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9JTlRfTk8odmFsKSB2eGdlX3ZCSVQodmFsLCA0MSwgNykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfQklUX01BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMGMyOCovCXU2NAlrZGZjX3RycGxfZmlmb18wX3diX2FkZHJlc3M7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9XQl9BRERSRVNTX0FERCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwYzMwKi8JdTY0CWtkZmNfdHJwbF9maWZvXzFfd2JfYWRkcmVzczsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX1dCX0FERFJFU1NfQUREKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBjMzgqLwl1NjQJa2RmY190cnBsX2ZpZm9fMl93Yl9hZGRyZXNzOworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfV0JfQUREUkVTU19BREQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGM0MCovCXU2NAlrZGZjX3RycGxfZmlmb19vZmZzZXQ7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfUkNUUjAodmFsKSB2eGdlX3ZCSVQodmFsLCAxLCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19SQ1RSMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19SQ1RSMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMzLCAxNSkKKy8qMHgwMGM0OCovCXU2NAlrZGZjX2RyYmxfdHJpcGxldF90b3RhbDsKKyNkZWZpbmUJVlhHRV9IV19LREZDX0RSQkxfVFJJUExFVF9UT1RBTF9LREZDX01BWF9TSVpFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKwl1OAl1bnVzZWQwMGM2MFsweDAwYzYwLTB4MDBjNTBdOworCisvKjB4MDBjNjAqLwl1NjQJdXNkY19kcmJsX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfVVNEQ19EUkJMX0NUUkxfRkxJUF9FTgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfVVNEQ19EUkJMX0NUUkxfU1dBUF9FTgl2eGdlX21CSVQoMjMpCisvKjB4MDBjNjgqLwl1NjQJdXNkY192cF9yZWFkeTsKKyNkZWZpbmUJVlhHRV9IV19VU0RDX1ZQX1JFQURZX1VTRENfSFROX1JFQURZCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1VTRENfVlBfUkVBRFlfVVNEQ19TUlFfUkVBRFkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1VTRENfVlBfUkVBRFlfVVNEQ19DUVJRX1JFQURZCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMGM3MCovCXU2NAlrZGZjX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19LREZDX1NUQVRVU19LREZDX1dSUl8wX1JFQURZCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0tERkNfU1RBVFVTX0tERkNfV1JSXzFfUkVBRFkJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19TVEFUVVNfS0RGQ19XUlJfMl9SRUFEWQl2eGdlX21CSVQoMikKKwl1OAl1bnVzZWQwMGM4MFsweDAwYzgwLTB4MDBjNzhdOworCisvKjB4MDBjODAqLwl1NjQJeG1hY19ycGFfdmNmZzsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX0lQVjRfVENQX0lOQ0xfUEgJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19JUFY2X1RDUF9JTkNMX1BICXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfSVBWNF9VRFBfSU5DTF9QSAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19JUFY2X1VEUF9JTkNMX1BICXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX0w0X0lOQ0xfQ0YJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfU1RSSVBfVkxBTl9UQUcJdnhnZV9tQklUKDIzKQorLyoweDAwYzg4Ki8JdTY0CXJ4bWFjX3ZjZmcwOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NQVhfRlJNX0xFTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDE0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19VU0VfTUlOX0xFTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01JTl9GUk1fTEVOKHZhbCkgdnhnZV92QklUKHZhbCwgMjYsIDE0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcwX1VDQVNUX0FMTF9BRERSX0VOCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTgl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzBfQkNBU1RfRU4JdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcwX0FMTF9WSURfRU4JdnhnZV9tQklUKDU1KQorLyoweDAwYzkwKi8JdTY0CXJ4bWFjX3ZjZmcxOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfQkRfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQyLCAyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfRU5fTU9ERQl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzFfQ09OVFJJQl9MMl9GTE9XCXZ4Z2VfbUJJVCg1MSkKKy8qMHgwMGM5OCovCXU2NAlydHNfYWNjZXNzX3N0ZWVyX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0JFSEFWX1RCTF9TRUwJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9UQUJMRV9TRUwJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMJdnhnZV9tQklUKDApCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorLyoweDAwY2EwKi8JdTY0CXJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTA7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBjYTgqLwl1NjQJcnRzX2FjY2Vzc19zdGVlcl9kYXRhMTsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMGQwMFsweDAwZDAwLTB4MDBjYjBdOworCisvKjB4MDBkMDAqLwl1NjQJeG1hY192c3BvcnRfY2hvaWNlOworI2RlZmluZSBWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRV9WU1BPUlRfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKy8qMHgwMGQwOCovCXU2NAl4bWFjX3N0YXRzX2NmZzsKKy8qMHgwMGQxMCovCXU2NAl4bWFjX3N0YXRzX2FjY2Vzc19jbWQ7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX09QKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfU1RST0JFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX0FDQ0VTU19DTURfT0ZGU0VUX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorLyoweDAwZDE4Ki8JdTY0CXhtYWNfc3RhdHNfYWNjZXNzX2RhdGE7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfREFUQV9YU01HUl9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBkMjAqLwl1NjQJYXNpY19udHdrX3ZwX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0NUUkxfUkVRX1RFU1RfTlRXSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfVlBfQ1RSTF9YTUFDSl9TSE9XX1BPUlRfSU5GTwl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0NUUkxfWE1BQ0pfUE9SVF9OVU0JdnhnZV9tQklUKDYzKQorCXU4CXVudXNlZDAwZDMwWzB4MDBkMzAtMHgwMGQyOF07CisKKy8qMHgwMGQzMCovCXU2NAl4Z21hY192cF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX1ZQX0lOVF9TVEFUVVNfQVNJQ19OVFdLX1ZQX0VSUl9BU0lDX05UV0tfVlBfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisvKjB4MDBkMzgqLwl1NjQJeGdtYWNfdnBfaW50X21hc2s7CisvKjB4MDBkNDAqLwl1NjQJYXNpY19udHdrX3ZwX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVF9PQ0NVUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PS19PQ0NVUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfVlBfRVJSX1JFR19YTUFDSl9OVFdLX1JFQUZGSVJNRURfRkFVTFQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfVlBfRVJSX1JFR19YTUFDSl9OVFdLX1JFQUZGSVJNRURfT0sJdnhnZV9tQklUKDIzKQorLyoweDAwZDQ4Ki8JdTY0CWFzaWNfbnR3a192cF9lcnJfbWFzazsKKy8qMHgwMGQ1MCovCXU2NAlhc2ljX250d2tfdnBfZXJyX2FsYXJtOworCXU4CXVudXNlZDAwZDgwWzB4MDBkODAtMHgwMGQ1OF07CisKKy8qMHgwMGQ4MCovCXU2NAlydGRtYV9id19jdHJsOworI2RlZmluZQlWWEdFX0hXX1JURE1BX0JXX0NUUkxfQldfQ1RSTF9FTgl2eGdlX21CSVQoMzkpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfQldfQ1RSTF9ERVNJUkVEX0JXKHZhbCkgdnhnZV92QklUKHZhbCwgNDYsIDE4KQorLyoweDAwZDg4Ki8JdTY0CXJ0ZG1hX3JkX29wdGltaXphdGlvbl9jdHJsOworI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0dFTl9JTlRfQUZURVJfQUJPUlQJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfUEFEX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1BBRF9QQVRURVJOKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9XQUlUX0ZPUl9TUEFDRQl2eGdlX21CSVQoMTkpCisjZGVmaW5lIFZYR0VfSFdfUENJX0VYUF9ERVZDVExfUkVBRFJRICAgMHg3MDAwICAvKiBNYXhfUmVhZF9SZXF1ZXN0X1NpemUgKi8KKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9GSUxMX1RIUkVTSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfUFlMRF9XTUFSS19FTgl2eGdlX21CSVQoMjgpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX1BZTERfV01BUksodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjksIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfQUREUl9CRFJZX0VOCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9BRERSX0JEUlkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX1dBSVRfRk9SX1NQQUNFCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9UWERfRklMTF9USFJFU0godmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX0FERFJfQkRSWV9FTgl2eGdlX21CSVQoNTkpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX0FERFJfQkRSWSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA2MSwgMykKKy8qMHgwMGQ5MCovCXU2NAlwZGFfcGNjX2pvYl9tb25pdG9yOworI2RlZmluZQlWWEdFX0hXX1BEQV9QQ0NfSk9CX01PTklUT1JfUERBX1BDQ19KT0JfU1RBVFVTCXZ4Z2VfbUJJVCg3KQorLyoweDAwZDk4Ki8JdTY0CXR4X3Byb3RvY29sX2Fzc2lzdF9jZmc7CisjZGVmaW5lCVZYR0VfSFdfVFhfUFJPVE9DT0xfQVNTSVNUX0NGR19MU09WMl9FTgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19UWF9QUk9UT0NPTF9BU1NJU1RfQ0ZHX0lQVjZfS0VFUF9TRUFSQ0hJTkcJdnhnZV9tQklUKDcpCisJdTgJdW51c2VkMDEwMDBbMHgwMTAwMC0weDAwZGEwXTsKKworLyoweDAxMDAwKi8JdTY0CXRpbV9jZmcxX2ludF9udW1bNF07CisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CVElNRVJfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMjYpCisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CSVRNUF9FTgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9UWEZSTV9DTlRfRU4JdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVFhEX0NOVF9FTgl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9BQwl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSQl2eGdlX21CSVQoMzkpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0EodmFsKSB2eGdlX3ZCSVQodmFsLCA0MSwgNykKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCA3KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19DKHZhbCkgdnhnZV92QklUKHZhbCwgNTcsIDcpCisvKjB4MDEwMjAqLwl1NjQJdGltX2NmZzJfaW50X251bVs0XTsKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19BKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19DKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0QodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDEwNDAqLwl1NjQJdGltX2NmZzNfaW50X251bVs0XTsKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1RJTUVSX1JJCXZ4Z2VfbUJJVCgwKQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX0VWRU5UX1NGKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNCkKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyNikKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9MVElNRVJfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMzgsIDI2KQorLyoweDAxMDYwKi8JdTY0CXRpbV93cmtsZF9jbGM7CisjZGVmaW5lIFZYR0VfSFdfVElNX1dSS0xEX0NMQ19XUktMRF9FVkFMX1BSRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX1RJTV9XUktMRF9DTENfV1JLTERfRVZBTF9ESVYodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUJVlhHRV9IV19USU1fV1JLTERfQ0xDX0NOVF9GUk1fQllURQl2eGdlX21CSVQoNDApCisjZGVmaW5lIFZYR0VfSFdfVElNX1dSS0xEX0NMQ19DTlRfUlhfVFgodmFsKSB2eGdlX3ZCSVQodmFsLCA0MSwgMikKKyNkZWZpbmUJVlhHRV9IV19USU1fV1JLTERfQ0xDX0NOVF9MTktfRU4JdnhnZV9tQklUKDQzKQorI2RlZmluZSBWWEdFX0hXX1RJTV9XUktMRF9DTENfSE9TVF9VVElMKHZhbCkgdnhnZV92QklUKHZhbCwgNTcsIDcpCisvKjB4MDEwNjgqLwl1NjQJdGltX2JpdG1hcDsKKyNkZWZpbmUgVlhHRV9IV19USU1fQklUTUFQX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19USU1fQklUTUFQX0xMUk9PVF9SWERfRU4JdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX1RJTV9CSVRNQVBfTExST09UX1RYRF9FTgl2eGdlX21CSVQoMzMpCisvKjB4MDEwNzAqLwl1NjQJdGltX3JpbmdfYXNzbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fUklOR19BU1NOX0lOVF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorLyoweDAxMDc4Ki8JdTY0CXRpbV9yZW1hcDsKKyNkZWZpbmUJVlhHRV9IV19USU1fUkVNQVBfVFhfRU4JdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfVElNX1JFTUFQX1JYX0VOCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1RJTV9SRU1BUF9PRkZMT0FEX0VOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1RJTV9SRU1BUF9UT19WUEFUSF9OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKy8qMHgwMTA4MCovCXU2NAl0aW1fdnBhdGhfbWFwOworI2RlZmluZSBWWEdFX0hXX1RJTV9WUEFUSF9NQVBfQk1BUF9ST09UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDEwODgqLwl1NjQJdGltX3BjaV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfVElNX1BDSV9DRkdfQUREX1BBRAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19USU1fUENJX0NGR19OT19TTk9PUAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVElNX1BDSV9DRkdfUkVMQVhFRAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVElNX1BDSV9DRkdfQ1RMX1NUUgl2eGdlX21CSVQoMzEpCisJdTgJdW51c2VkMDExMDBbMHgwMTEwMC0weDAxMDkwXTsKKworLyoweDAxMTAwKi8JdTY0CXNncnBfYXNzaWduOworI2RlZmluZSBWWEdFX0hXX1NHUlBfQVNTSUdOX1NHUlBfQVNTSUdOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDExMDgqLwl1NjQJc2dycF9hb2FfYW5kX3Jlc3VsdDsKKyNkZWZpbmUJVlhHRV9IV19TR1JQX0FPQV9BTkRfUkVTVUxUX1BFVF9TR1JQX0FPQV9BTkRfUkVTVUxUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxMTEwKi8JdTY0CXJwZV9wY2lfY2ZnOworI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9MUk9fREFUQV9FTkFCTEUJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0xST19IRFJfRU5BQkxFCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9MUk9fQ1FFX0VOQUJMRQl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfTk9OTExfQ1FFX0VOQUJMRQl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0JBU0VfTExfQ1FFX0VOQUJMRQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0xMX0NRRV9JREFUQV9FTkFCTEUJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9DUVJRX0lSX0VOQUJMRQl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0NRU1FfSVJfRU5BQkxFCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfQ1FSUl9JUl9FTkFCTEUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfREFUQQl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9OT05MTF9DUUUJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfTExfQ1FFCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX0NRUlFfSVIJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfQ1FTUV9JUgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9DUVJSX0lSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX0RBVEEJdnhnZV9tQklUKDI2KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfTk9OTExfQ1FFCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX0xMX0NRRQl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9DUVJRX0lSCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX0NRU1FfSVIJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfQ1FSUl9JUgl2eGdlX21CSVQoMzEpCisvKjB4MDExMTgqLwl1NjQJcnBlX2xyb19jZmc7CisjZGVmaW5lCVZYR0VfSFdfUlBFX0xST19DRkdfU1VQUFJFU1NfTFJPX0VUSF9UUkxSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JQRV9MUk9fQ0ZHX0FMTE9XX0xST19TTkFQX1NOQVBKVU1CT19NUkcJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JQRV9MUk9fQ0ZHX0FMTE9XX0xST19MTENfTExDSlVNQk9fTVJHCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfTFJPX0NGR19JTkNMX0FDS19DTlRfSU5fQ1FFCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMTEyMCovCXU2NAlwZV9tcjJ2cF9hY2tfYmxrX2xpbWl0OworI2RlZmluZSBWWEdFX0hXX1BFX01SMlZQX0FDS19CTEtfTElNSVRfQkxLX0xJTUlUKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAxMTI4Ki8JdTY0CXBlX21yMnZwX3JpcnJfbGlycl9ibGtfbGltaXQ7CisjZGVmaW5lCVZYR0VfSFdfUEVfTVIyVlBfUklSUl9MSVJSX0JMS19MSU1JVF9SSVJSX0JMS19MSU1JVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19QRV9NUjJWUF9SSVJSX0xJUlJfQkxLX0xJTUlUX0xJUlJfQkxLX0xJTUlUKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMTEzMCovCXU2NAl0eHBlX3BjaV9uY2VfY2ZnOworI2RlZmluZSBWWEdFX0hXX1RYUEVfUENJX05DRV9DRkdfTkNFX1RIUkVTSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1RYUEVfUENJX05DRV9DRkdfUEFEX1RPV0lfRU5BQkxFCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19UWFBFX1BDSV9OQ0VfQ0ZHX05PU05PT1BfVE9XSQl2eGdlX21CSVQoNjMpCisJdTgJdW51c2VkMDExODBbMHgwMTE4MC0weDAxMTM4XTsKKworLyoweDAxMTgwKi8JdTY0CW1zZ19xcGFkX2VuX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfVU1RX0JXUl9SRUFECXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19ETVFfQldSX1JFQUQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX01YUF9HRU5ETUFfUkVBRAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX1VYUF9HRU5ETUFfUkVBRAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX1VNUV9NU0dfV1JJVEUJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19VTVFETVFfSVJfV1JJVEUJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19NWFBfR0VORE1BX1dSSVRFCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfVVhQX0dFTkRNQV9XUklURQl2eGdlX21CSVQoMzEpCisvKjB4MDExODgqLwl1NjQJbXNnX3BjaV9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX1BDSV9DRkdfR0VORE1BX05PX1NOT09QCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01TR19QQ0lfQ0ZHX1VNUURNUV9JUl9OT19TTk9PUAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUENJX0NGR19VTVFfTk9fU05PT1AJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01TR19QQ0lfQ0ZHX0RNUV9OT19TTk9PUAl2eGdlX21CSVQoMTUpCisvKjB4MDExOTAqLwl1NjQJdW1xZG1xX2lyX2luaXQ7CisjZGVmaW5lIFZYR0VfSFdfVU1RRE1RX0lSX0lOSVRfSE9TVF9XUklURV9BREQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMTE5OCovCXU2NAlkbXFfaXJfaW50OworI2RlZmluZQlWWEdFX0hXX0RNUV9JUl9JTlRfSU1NRURfRU5BQkxFCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0RNUV9JUl9JTlRfRVZFTlRfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0RNUV9JUl9JTlRfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUgVlhHRV9IV19ETVFfSVJfSU5UX0JJVE1BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKy8qMHgwMTFhMCovCXU2NAlkbXFfYndyX2luaXRfYWRkOworI2RlZmluZSBWWEdFX0hXX0RNUV9CV1JfSU5JVF9BRERfSE9TVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxMWE4Ki8JdTY0CWRtcV9id3JfaW5pdF9ieXRlOworI2RlZmluZSBWWEdFX0hXX0RNUV9CV1JfSU5JVF9CWVRFX0NPVU5UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDExYjAqLwl1NjQJZG1xX2lyOworI2RlZmluZSBWWEdFX0hXX0RNUV9JUl9QT0xJQ1kodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorLyoweDAxMWI4Ki8JdTY0CXVtcV9pbnQ7CisjZGVmaW5lCVZYR0VfSFdfVU1RX0lOVF9JTU1FRF9FTkFCTEUJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVU1RX0lOVF9FVkVOVF9FTkFCTEUJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfVU1RX0lOVF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZSBWWEdFX0hXX1VNUV9JTlRfQklUTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorLyoweDAxMWMwKi8JdTY0CXVtcV9tcjJ2cF9id3JfcGZjaF9pbml0OworI2RlZmluZSBWWEdFX0hXX1VNUV9NUjJWUF9CV1JfUEZDSF9JTklUX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisvKjB4MDExYzgqLwl1NjQJdW1xX2J3cl9wZmNoX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfVU1RX0JXUl9QRkNIX0NUUkxfUE9MTF9FTgl2eGdlX21CSVQoMykKKy8qMHgwMTFkMCovCXU2NAl1bXFfbXIydnBfYndyX2VvbDsKKyNkZWZpbmUgVlhHRV9IV19VTVFfTVIyVlBfQldSX0VPTF9QT0xMX0xBVEVOQ1kodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDExZDgqLwl1NjQJdW1xX2J3cl9pbml0X2FkZDsKKyNkZWZpbmUgVlhHRV9IV19VTVFfQldSX0lOSVRfQUREX0hPU1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMTFlMCovCXU2NAl1bXFfYndyX2luaXRfYnl0ZTsKKyNkZWZpbmUgVlhHRV9IV19VTVFfQldSX0lOSVRfQllURV9DT1VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAxMWU4Ki8JdTY0CWdlbmRtYV9pbnQ7CisjZGVmaW5lCVZYR0VfSFdfR0VORE1BX0lOVF9JTU1FRF9FTkFCTEUJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfR0VORE1BX0lOVF9FVkVOVF9FTkFCTEUJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfR0VORE1BX0lOVF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZSBWWEdFX0hXX0dFTkRNQV9JTlRfQklUTUFQKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorLyoweDAxMWYwKi8JdTY0CXVtcWRtcV9pcl9pbml0X25vdGlmeTsKKyNkZWZpbmUJVlhHRV9IV19VTVFETVFfSVJfSU5JVF9OT1RJRllfUFVMU0UJdnhnZV9tQklUKDMpCisvKjB4MDExZjgqLwl1NjQJZG1xX2luaXRfbm90aWZ5OworI2RlZmluZQlWWEdFX0hXX0RNUV9JTklUX05PVElGWV9QVUxTRQl2eGdlX21CSVQoMykKKy8qMHgwMTIwMCovCXU2NAl1bXFfaW5pdF9ub3RpZnk7CisjZGVmaW5lCVZYR0VfSFdfVU1RX0lOSVRfTk9USUZZX1BVTFNFCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDAxMzgwWzB4MDEzODAtMHgwMTIwOF07CisKKy8qMHgwMTM4MCovCXU2NAl0cGFfY2ZnOworI2RlZmluZQlWWEdFX0hXX1RQQV9DRkdfSUdOT1JFX0ZSQU1FX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UUEFfQ0ZHX0lQVjZfU1RPUF9TRUFSQ0hJTkcJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0NGR19MNF9QU0hEUl9QUkVTRU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19UUEFfQ0ZHX1NVUFBPUlRfTU9CSUxFX0lQVjZfSERSUwl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDE0MDBbMHgwMTQwMC0weDAxMzg4XTsKKworLyoweDAxNDAwKi8JdTY0CXR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOworI2RlZmluZQlWWEdFX0hXX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKwl1OAl1bnVzZWQwMTQ4MFsweDAxNDgwLTB4MDE0MDhdOworCisvKjB4MDE0ODAqLwl1NjQJZmF1X3JwYV92Y2ZnOworI2RlZmluZQlWWEdFX0hXX0ZBVV9SUEFfVkNGR19MNF9DT01QX0NTVU0JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRkFVX1JQQV9WQ0ZHX0wzX0lOQ0xfQ0YJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9SUEFfVkNGR19MM19DT01QX0NTVU0JdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDAxNGQwWzB4MDE0ZDAtMHgwMTQ4OF07CisKKy8qMHgwMTRkMCovCXU2NAlkYmdfc3RhdHNfcnhfbXBhOworI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUU19SWF9NUEFfQ1JDX0ZBSUxfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUU19SWF9NUEFfTVJLX0ZBSUxfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVFNfUlhfTVBBX0xFTl9GQUlMX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisvKjB4MDE0ZDgqLwl1NjQJZGJnX3N0YXRzX3J4X2ZhdTsKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVFNfUlhfRkFVX1JYX1dPTF9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX1JYX0ZBVV9SWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX1JYX0ZBVV9SWF9QRVJNSVRURURfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDE0ZjBbMHgwMTRmMC0weDAxNGUwXTsKKworLyoweDAxNGYwKi8JdTY0CWZibWNfdnBfcmR5OworI2RlZmluZQlWWEdFX0hXX0ZCTUNfVlBfUkRZX1FVRVVFX1NQQVZfRk0JdnhnZV9tQklUKDApCisJdTgJdW51c2VkMDFlMDBbMHgwMWUwMC0weDAxNGY4XTsKKworLyoweDAxZTAwKi8JdTY0CXZwYXRoX3BjaXBpZl9pbnRfc3RhdHVzOworI2RlZmluZSBcCitWWEdFX0hXX1ZQQVRIX1BDSVBJRl9JTlRfU1RBVFVTX1NSUENJTV9NU0dfVE9fVlBBVEhfU1JQQ0lNX01TR19UT19WUEFUSF9JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QQ0lQSUZfSU5UX1NUQVRVU19WUEFUSF9TUEFSRV9SMV9WUEFUSF9TUEFSRV9SMV9JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoNykKKy8qMHgwMWUwOCovCXU2NAl2cGF0aF9wY2lwaWZfaW50X21hc2s7CisJdTgJdW51c2VkMDFlMjBbMHgwMWUyMC0weDAxZTEwXTsKKworLyoweDAxZTIwKi8JdTY0CXNycGNpbV9tc2dfdG9fdnBhdGhfcmVnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfVE9fVlBBVEhfUkVHX1NXSUZfU1JQQ0lNX1RPX1ZQQVRIX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisvKjB4MDFlMjgqLwl1NjQJc3JwY2ltX21zZ190b192cGF0aF9tYXNrOworLyoweDAxZTMwKi8JdTY0CXNycGNpbV9tc2dfdG9fdnBhdGhfYWxhcm07CisJdTgJdW51c2VkMDFlYTBbMHgwMWVhMC0weDAxZTM4XTsKKworLyoweDAxZWEwKi8JdTY0CXZwYXRoX3RvX3NycGNpbV93bXNnOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1RPX1NSUENJTV9XTVNHX1ZQQVRIX1RPX1NSUENJTV9XTVNHKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxZWE4Ki8JdTY0CXZwYXRoX3RvX3NycGNpbV93bXNnX3RyaWc7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fU1JQQ0lNX1dNU0dfVFJJR19WUEFUSF9UT19TUlBDSU1fV01TR19UUklHIFwKKwkJCQkJCQl2eGdlX21CSVQoMCkKKwl1OAl1bnVzZWQwMjAwMFsweDAyMDAwLTB4MDFlYjBdOworCisvKjB4MDIwMDAqLwl1NjQJdnBhdGhfZ2VuZXJhbF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QQ0lfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19XUkRNQV9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVAl2eGdlX21CSVQoMTkpCisvKjB4MDIwMDgqLwl1NjQJdnBhdGhfZ2VuZXJhbF9pbnRfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9NQVNLX1BJQ19JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfTUFTS19QQ0lfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX01BU0tfV1JETUFfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9NQVNLX1hNQUNfSU5UCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjAxMCovCXU2NAl2cGF0aF9wcGlmX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0tERkNDVExfRVJST1JTX0tERkNDVExfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfR0VORVJBTF9FUlJPUlNfR0VORVJBTF9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BQSUZfSU5UX1NUQVRVU19QQ0lfQ09ORklHX0VSUk9SU19QQ0lfQ09ORklHX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZSBcCitWWEdFX0hXX1ZQQVRIX1BQSUZfSU5UX1NUQVRVU19NUlBDSU1fVE9fVlBBVEhfQUxBUk1fTVJQQ0lNX1RPX1ZQQVRIX0FMQVJNX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZSBcCitWWEdFX0hXX1ZQQVRIX1BQSUZfSU5UX1NUQVRVU19TUlBDSU1fVE9fVlBBVEhfQUxBUk1fU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDE5KQorLyoweDAyMDE4Ki8JdTY0CXZwYXRoX3BwaWZfaW50X21hc2s7CisvKjB4MDIwMjAqLwl1NjQJa2RmY2N0bF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX09WUldSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX09WUldSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8yX09WUldSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9QT0lTT04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX1BPSVNPTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzJfUE9JU09OCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9ETUFfRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9ETUFfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9ETUFfRVJSCXZ4Z2VfbUJJVCgzOSkKKy8qMHgwMjAyOCovCXU2NAlrZGZjY3RsX2Vycm9yc19tYXNrOworLyoweDAyMDMwKi8JdTY0CWtkZmNjdGxfZXJyb3JzX2FsYXJtOworCXU4CXVudXNlZDAyMDQwWzB4MDIwNDAtMHgwMjAzOF07CisKKy8qMHgwMjA0MCovCXU2NAlnZW5lcmFsX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMF9PVlJGTE9XCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19EQkxHRU5fRklGTzFfT1ZSRkxPVwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8yX09WUkZMT1cJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfUElGX0NIQUlOX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1NUQVRTQl9EUk9QX1RJTUVPVVRfUkVRCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfVEdUX0lMTEVHQUxfQUNDRVNTCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfSU5JX1NFUlJfREVUCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjA0OCovCXU2NAlnZW5lcmFsX2Vycm9yc19tYXNrOworLyoweDAyMDUwKi8JdTY0CWdlbmVyYWxfZXJyb3JzX2FsYXJtOworLyoweDAyMDU4Ki8JdTY0CXBjaV9jb25maWdfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0VSUk9SU19SRUdfUENJQ09ORklHX1NUQVRVU19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19FUlJPUlNfUkVHX1BDSUNPTkZJR19VTkNPUl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19FUlJPUlNfUkVHX1BDSUNPTkZJR19DT1JfRVJSCXZ4Z2VfbUJJVCgxMSkKKy8qMHgwMjA2MCovCXU2NAlwY2lfY29uZmlnX2Vycm9yc19tYXNrOworLyoweDAyMDY4Ki8JdTY0CXBjaV9jb25maWdfZXJyb3JzX2FsYXJtOworLyoweDAyMDcwKi8JdTY0CW1ycGNpbV90b192cGF0aF9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1RPX1ZQQVRIX0FMQVJNX1JFR19QUElGX01SUENJTV9UT19WUEFUSF9BTEFSTSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorLyoweDAyMDc4Ki8JdTY0CW1ycGNpbV90b192cGF0aF9hbGFybV9tYXNrOworLyoweDAyMDgwKi8JdTY0CW1ycGNpbV90b192cGF0aF9hbGFybV9hbGFybTsKKy8qMHgwMjA4OCovCXU2NAlzcnBjaW1fdG9fdnBhdGhfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19WUEFUSF9BTEFSTV9SRUdfUFBJRl9TUlBDSU1fVE9fVlBBVEhfQUxBUk0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDIwOTAqLwl1NjQJc3JwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2s7CisvKjB4MDIwOTgqLwl1NjQJc3JwY2ltX3RvX3ZwYXRoX2FsYXJtX2FsYXJtOworCXU4CXVudXNlZDAyMTA4WzB4MDIxMDgtMHgwMjBhMF07CisKKy8qMHgwMjEwOCovCXU2NAlrZGZjY3RsX3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8wX1BSRVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzFfUFJFUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMl9QUkVTKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMF9PVlJXUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzFfT1ZSV1IodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8yX09WUldSKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDgpCisvKjB4MDIxMTAqLwl1NjQJcnN0aGRscl9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfUlNUSERMUl9TVEFUVVNfUlNUSERMUl9DVVJSRU5UX1JFU0VUCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX1JTVEhETFJfU1RBVFVTX1JTVEhETFJfQ1VSUkVOVF9WUElOKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKy8qMHgwMjExOCovCXU2NAlmaWZvMF9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfRklGTzBfU1RBVFVTX0RCTEdFTl9GSUZPMF9SRElEWCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorLyoweDAyMTIwKi8JdTY0CWZpZm8xX3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19GSUZPMV9TVEFUVVNfREJMR0VOX0ZJRk8xX1JESURYKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisvKjB4MDIxMjgqLwl1NjQJZmlmbzJfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX0ZJRk8yX1NUQVRVU19EQkxHRU5fRklGTzJfUkRJRFgodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKwl1OAl1bnVzZWQwMjE1OFsweDAyMTU4LTB4MDIxMzBdOworCisvKjB4MDIxNTgqLwl1NjQJdGd0X2lsbGVnYWxfYWNjZXNzOworI2RlZmluZSBWWEdFX0hXX1RHVF9JTExFR0FMX0FDQ0VTU19TV0lGX1JFR0lPTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisJdTgJdW51c2VkMDIyMDBbMHgwMjIwMC0weDAyMTYwXTsKKworLyoweDAyMjAwKi8JdTY0CXZwYXRoX2dlbmVyYWxfY2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfVENfVkFMVUUodmFsKSB2eGdlX3ZCSVQodmFsLCAxLCAzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9EQVRBX0JZVEVfU1dBUEVOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9EQVRBX0ZMSVBFTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX0NUTF9CWVRFX1NXQVBFTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX0NUTF9GTElQRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9NU0lYX0FERFJfU1dBUEVOCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfTVNJWF9BRERSX0ZMSVBFTgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX01TSVhfREFUQV9TV0FQRU4JdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9NU0lYX0RBVEFfRkxJUEVOCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMjIwOCovCXU2NAl2cGF0aF9nZW5lcmFsX2NmZzI7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcyX1NJWkVfUVVBTlRVTSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDMpCisvKjB4MDIyMTAqLwl1NjQJdnBhdGhfZ2VuZXJhbF9jZmczOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHM19JR05PUkVfVlBBVEhfUlNUX0ZPUl9JTlRBCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDAyMjIwWzB4MDIyMjAtMHgwMjIxOF07CisKKy8qMHgwMjIyMCovCXU2NAlrZGZjY3RsX2NmZzA7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8wCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JJVF9GTElQRU5fRklGTzAJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JJVF9GTElQRU5fRklGTzEJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JJVF9GTElQRU5fRklGTzIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMF9GSUZPMAl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUwX0ZJRk8xCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUwX0ZJRk8yCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUxX0ZJRk8wCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUxX0ZJRk8xCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUxX0ZJRk8yCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUyX0ZJRk8wCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUyX0ZJRk8xCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUyX0ZJRk8yCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUzX0ZJRk8wCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUzX0ZJRk8xCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEUzX0ZJRk8yCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU0X0ZJRk8wCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU0X0ZJRk8xCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU0X0ZJRk8yCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU1X0ZJRk8wCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU1X0ZJRk8xCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU1X0ZJRk8yCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU2X0ZJRk8wCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU2X0ZJRk8xCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU2X0ZJRk8yCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU3X0ZJRk8wCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU3X0ZJRk8xCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9NQVNLX0JZVEU3X0ZJRk8yCXZ4Z2VfbUJJVCgzOSkKKworCXU4CXVudXNlZDAyMjY4WzB4MDIyNjgtMHgwMjIyOF07CisKKy8qMHgwMjI2OCovCXU2NAlzdGF0c19jZmc7CisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfQ0ZHX1NUQVJUX0hPU1RfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDU3KQorLyoweDAyMjcwKi8JdTY0CWludGVycnVwdF9jZmcwOworI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX01TSVhfRk9SX1JYVEkodmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMF9NU0lYX0ZPUl9UWFRJKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDFfTVNJWF9GT1JfVFhUSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCA3KQorI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMl9NU0lYX0ZPUl9UWFRJKHZhbCkgdnhnZV92QklUKHZhbCwgMjUsIDcpCisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAzX01TSVhfRk9SX1RYVEkodmFsKSB2eGdlX3ZCSVQodmFsLCAzMywgNykKKwl1OAl1bnVzZWQwMjI4MFsweDAyMjgwLTB4MDIyNzhdOworCisvKjB4MDIyODAqLwl1NjQJaW50ZXJydXB0X2NmZzI7CisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzJfQUxBUk1fTUFQX1RPX01TRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisvKjB4MDIyODgqLwl1NjQJb25lX3Nob3RfdmVjdDBfZW47CisjZGVmaW5lCVZYR0VfSFdfT05FX1NIT1RfVkVDVDBfRU5fT05FX1NIT1RfVkVDVDBfRU4JdnhnZV9tQklUKDMpCisvKjB4MDIyOTAqLwl1NjQJb25lX3Nob3RfdmVjdDFfZW47CisjZGVmaW5lCVZYR0VfSFdfT05FX1NIT1RfVkVDVDFfRU5fT05FX1NIT1RfVkVDVDFfRU4JdnhnZV9tQklUKDMpCisvKjB4MDIyOTgqLwl1NjQJb25lX3Nob3RfdmVjdDJfZW47CisjZGVmaW5lCVZYR0VfSFdfT05FX1NIT1RfVkVDVDJfRU5fT05FX1NIT1RfVkVDVDJfRU4JdnhnZV9tQklUKDMpCisvKjB4MDIyYTAqLwl1NjQJb25lX3Nob3RfdmVjdDNfZW47CisjZGVmaW5lCVZYR0VfSFdfT05FX1NIT1RfVkVDVDNfRU5fT05FX1NIT1RfVkVDVDNfRU4JdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDIyYjBbMHgwMjJiMC0weDAyMmE4XTsKKworLyoweDAyMmIwKi8JdTY0CXBjaV9jb25maWdfYWNjZXNzX2NmZzE7CisjZGVmaW5lIFZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMV9BRERSRVNTKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMV9TRUxfRlVOQzAJdnhnZV9tQklUKDE1KQorLyoweDAyMmI4Ki8JdTY0CXBjaV9jb25maWdfYWNjZXNzX2NmZzI7CisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMl9SRVEJdnhnZV9tQklUKDApCisvKjB4MDIyYzAqLwl1NjQJcGNpX2NvbmZpZ19hY2Nlc3Nfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX1NUQVRVU19BQ0NFU1NfRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZSBWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX1NUQVRVU19EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDAyMzAwWzB4MDIzMDAtMHgwMjJjOF07CisKKy8qMHgwMjMwMCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czA7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMwX0lOSV9OVU1fTVdSX1NFTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMjMwOCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czE7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMxX0lOSV9OVU1fTVJEX1NFTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMjMxMCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czI7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMyX0lOSV9OVU1fQ1BMX1JDVkQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMjMxOCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czM7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMzX0lOSV9OVU1fTVdSX0JZVEVfU0VOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMjMyMCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czQ7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM0X0lOSV9OVU1fQ1BMX0JZVEVfUkNWRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMjMyOCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czU7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM1X1dSQ1JEVEFSQl9YT0ZGKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAyMzMwKi8JdTY0CXZwYXRoX2RlYnVnX3N0YXRzNjsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzZfUkRDUkRUQVJCX1hPRkYodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDIzMzgqLwl1NjQJdnBhdGhfZ2Vuc3RhdHNfY291bnQwMTsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAyMzQwKi8JdTY0CXZwYXRoX2dlbnN0YXRzX2NvdW50MjM7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMjM0OCovCXU2NAl2cGF0aF9nZW5zdGF0c19jb3VudDQ7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0X1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMjM1MCovCXU2NAl2cGF0aF9nZW5zdGF0c19jb3VudDU7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1X1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwMjY0OFsweDAyNjQ4LTB4MDIzNThdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBWWEdFX0hXX0VFUFJPTV9TSVpFCSgweDAxIDw8IDExKQorCisvKiBDYXBhYmlsaXR5IGxpc3RzICovCisjZGVmaW5lICBWWEdFX0hXX1BDSV9FWFBfTE5LQ0FQX0xOS19TUEVFRCAgICAweGYgIC8qIFN1cHBvcnRlZCBMaW5rIHNwZWVkcyAqLworI2RlZmluZSAgVlhHRV9IV19QQ0lfRVhQX0xOS0NBUF9MTktfV0lEVEggICAgMHgzZjAgLyogU3VwcG9ydGVkIExpbmsgc3BlZWRzLiAqLworI2RlZmluZSAgVlhHRV9IV19QQ0lfRVhQX0xOS0NBUF9MV19SRVMgICAgICAgMHgwICAvKiBSZXNlcnZlZC4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmUwYWUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKQEAgLTAsMCArMSwyNTI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS10cmFmZmljLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgInZ4Z2UtdHJhZmZpYy5oIgorI2luY2x1ZGUgInZ4Z2UtY29uZmlnLmgiCisjaW5jbHVkZSAidnhnZS1tYWluLmgiCisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlIC0gRW5hYmxlIHZwYXRoIGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogRW5hYmxlIHZwYXRoIGludGVycnVwdHMuIFRoZSBmdW5jdGlvbiBpcyB0byBiZSBleGVjdXRlZCB0aGUgbGFzdCBpbgorICogdnBhdGggaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKCkKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnBjaV9jb25maWdfZXJyb3JzX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+bXJwY2ltX3RvX3ZwYXRoX2FsYXJtX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX3RvX3ZwYXRoX2FsYXJtX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+dnBhdGhfcHBpZl9pbnRfc3RhdHVzKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fbXNnX3RvX3ZwYXRoX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+dnBhdGhfcGNpcGlmX2ludF9zdGF0dXMpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnByY19hbGFybV9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPndyZG1hX2FsYXJtX3N0YXR1cyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnhnbWFjX3ZwX2ludF9zdGF0dXMpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJLyogTWFzayB1bndhbnRlZCBpbnRlcnJ1cHRzICovCisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+dnBhdGhfcGNpcGlmX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fbXNnX3RvX3ZwYXRoX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV90b192cGF0aF9hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5tcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+cGNpX2NvbmZpZ19lcnJvcnNfbWFzayk7CisKKwkvKiBVbm1hc2sgdGhlIGluZGl2aWR1YWwgaW50ZXJydXB0cyAqLworCisJd3JpdGVxKCh1MzIpdnhnZV9iVkFMbigoVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8xX09WUkZMT1d8CisJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMl9PVlJGTE9XfAorCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfRFJPUF9USU1FT1VUX1JFUXwKKwkJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX1BJRl9DSEFJTl9FUlIpLCAwLCAzMiksCisJCSZ2cF9yZWctPmdlbmVyYWxfZXJyb3JzX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKChWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX09WUldSfAorCQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8yX09WUldSfAorCQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX1BPSVNPTnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9QT0lTT058CisJCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfRE1BX0VSUnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9ETUFfRVJSKSwgMCwgMzIpLAorCQkmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoMCwgJnZwX3JlZy0+dnBhdGhfcHBpZl9pbnRfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkodTMyKXZ4Z2VfYlZBTG4oVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SSU5HX0JVTVAsIDAsIDMyKSwKKwkJJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigwLCAmdnBfcmVnLT53cmRtYV9hbGFybV9tYXNrKTsKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKDAsICZ2cF9yZWctPnhnbWFjX3ZwX2ludF9tYXNrKTsKKworCWlmICh2cGF0aC0+aGxkZXYtPmZpcnN0X3ZwX2lkICE9IHZwYXRoLT52cF9pZCkKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisJZWxzZQorCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbigoCisJCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX0ZBVUxUIHwKKwkJVlhHRV9IV19BU0lDX05UV0tfVlBfRVJSX1JFR19YTUFDSl9OVFdLX1JFQUZGSVJNRURfT0spLCAwLCAzMiksCisJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKDAsCisJCSZ2cF9yZWctPnZwYXRoX2dlbmVyYWxfaW50X21hc2spOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworCit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSAtIERpc2FibGUgdnBhdGggaW50ZXJydXB0cy4KKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqCisgKiBEaXNhYmxlIHZwYXRoIGludGVycnVwdHMuIFRoZSBmdW5jdGlvbiBpcyB0byBiZSBleGVjdXRlZCB0aGUgbGFzdCBpbgorICogdnBhdGggaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfaW50cl9lbmFibGUoKQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXU2NCB2YWw2NDsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCSZ2cF9yZWctPnZwYXRoX2dlbmVyYWxfaW50X21hc2spOworCisJdmFsNjQgPSBWWEdFX0hXX1RJTV9DTFJfSU5UX0VOX1ZQKDEgPDwgKDE2IC0gdnBhdGgtPnZwX2lkKSk7CisKKwl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLCAmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wY2lfY29uZmlnX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5tcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV9tc2dfdG9fdnBhdGhfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+dnBhdGhfcGNpcGlmX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT53cmRtYV9hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wcmNfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+eGdtYWNfdnBfaW50X21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2NoYW5uZWxfbXNpeF9tYXNrIC0gTWFzayBNU0lYIFZlY3Rvci4KKyAqIEBjaGFubmVoOiBDaGFubmVsIGZvciByeCBvciB0eCBoYW5kbGUKKyAqIEBtc2l4X2lkOiAgTVNJWCBJRAorICoKKyAqIFRoZSBmdW5jdGlvbiBtYXNrcyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMAorICovCit2b2lkIHZ4Z2VfaHdfY2hhbm5lbF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCBpbnQgbXNpeF9pZCkKK3sKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoY2hhbm5lbC0+Zmlyc3RfdnBfaWQrKG1zaXhfaWQvNCkpLAorCQkJMCwgMzIpLAorCQkmY2hhbm5lbC0+Y29tbW9uX3JlZy0+c2V0X21zaXhfbWFza192ZWN0W21zaXhfaWQlNF0pOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9tc2l4X3VubWFzayAtIFVubWFzayB0aGUgTVNJWCBWZWN0b3IuCisgKiBAY2hhbm5laDogQ2hhbm5lbCBmb3Igcnggb3IgdHggaGFuZGxlCisgKiBAbXNpeF9pZDogIE1TSSBJRAorICoKKyAqIFRoZSBmdW5jdGlvbiB1bm1hc2tzIHRoZSBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIG1zaXhfaWQKKyAqCisgKiBSZXR1cm5zOiAwCisgKi8KK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9tc2l4X3VubWFzayhzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwsIGludCBtc2l4X2lkKQoreworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKHZ4Z2VfbUJJVChjaGFubmVsLT5maXJzdF92cF9pZCsobXNpeF9pZC80KSksCisJCQkwLCAzMiksCisJCSZjaGFubmVsLT5jb21tb25fcmVnLT5jbGVhcl9tc2l4X21hc2tfdmVjdFttc2l4X2lkJTRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlIC0gVXBkYXRlcyB0aGUgY29uZmlndXJhdGlvbgorICoJCXdpdGggbmV3IGludGVycnVwdCB0eXBlLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQGludHJfbW9kZTogTmV3IGludGVycnVwdCB0eXBlCisgKi8KK3UzMiB2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIGludHJfbW9kZSkKK3sKKworCWlmICgoaW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpICYmCisJICAgKGludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYKSAmJgorCSAgIChpbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgJiYKKwkgICAoaW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX0RFRikpCisJCWludHJfbW9kZSA9IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkU7CisKKwlobGRldi0+Y29uZmlnLmludHJfbW9kZSA9IGludHJfbW9kZTsKKwlyZXR1cm4gaW50cl9tb2RlOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlIC0gRW5hYmxlIGludGVycnVwdHMuCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKiBAb3A6IE9uZSBvZiB0aGUgZW51bSB2eGdlX2h3X2RldmljZV9pbnRyIGVudW1lcmF0ZWQgdmFsdWVzIHNwZWNpZnlpbmcKKyAqICAgICAgdGhlIHR5cGUocykgb2YgaW50ZXJydXB0cyB0byBlbmFibGUuCisgKgorICogRW5hYmxlIFRpdGFuIGludGVycnVwdHMuIFRoZSBmdW5jdGlvbiBpcyB0byBiZSBleGVjdXRlZCB0aGUgbGFzdCBpbgorICogVGl0YW4gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX2ludHJfZGlzYWJsZSgpCisgKi8KK3ZvaWQgdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXUzMiBpOworCXU2NCB2YWw2NDsKKwl1MzIgdmFsMzI7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQl2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKAorCQkJVlhHRV9IV19WSVJUVUFMX1BBVEhfSEFORExFKCZobGRldi0+dmlydHVhbF9wYXRoc1tpXSkpOworCX0KKworCWlmIChobGRldi0+Y29uZmlnLmludHJfbW9kZSA9PSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKSB7CisJCXZhbDY0ID0gaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQlobGRldi0+dGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdOworCisJCWlmICh2YWw2NCAhPSAwKSB7CisJCQl3cml0ZXEodmFsNjQsICZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9zdGF0dXMwKTsKKworCQkJd3JpdGVxKH52YWw2NCwgJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKwkJfQorCisJCXZhbDMyID0gaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQlobGRldi0+dGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdOworCisJCWlmICh2YWwzMiAhPSAwKSB7CisJCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKHZhbDMyLAorCQkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfc3RhdHVzMSk7CisKKwkJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIofnZhbDMyLAorCQkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazEpOworCQl9CisJfQorCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnRpdGFuX2dlbmVyYWxfaW50X3N0YXR1cyk7CisKKwl2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKGhsZGV2KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUgLSBEaXNhYmxlIFRpdGFuIGludGVycnVwdHMuCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKiBAb3A6IE9uZSBvZiB0aGUgZW51bSB2eGdlX2h3X2RldmljZV9pbnRyIGVudW1lcmF0ZWQgdmFsdWVzIHNwZWNpZnlpbmcKKyAqICAgICAgdGhlIHR5cGUocykgb2YgaW50ZXJydXB0cyB0byBkaXNhYmxlLgorICoKKyAqIERpc2FibGUgVGl0YW4gaW50ZXJydXB0cy4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUoKQorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ludHJfZGlzYWJsZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTMyIGk7CisKKwl2eGdlX2h3X2RldmljZV9tYXNrX2FsbChobGRldik7CisKKwkvKiBtYXNrIGFsbCB0aGUgdGltIGludGVycnVwdHMgKi8KKwl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLCAmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoVlhHRV9IV19ERUZBVUxUXzMyLAorCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazEpOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJdnhnZV9od192cGF0aF9pbnRyX2Rpc2FibGUoCisJCQlWWEdFX0hXX1ZJUlRVQUxfUEFUSF9IQU5ETEUoJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldKSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsIC0gTWFzayBhbGwgZGV2aWNlIGludGVycnVwdHMuCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogTWFzawlhbGwgZGV2aWNlIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX3VubWFza19hbGwoKQorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQ7CisKKwl2YWw2NCA9IFZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX0FMQVJNIHwKKwkJVlhHRV9IV19USVRBTl9NQVNLX0FMTF9JTlRfVFJBRkZJQzsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9tYXNrX2FsbF9pbnQpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX3VubWFza19hbGwgLSBVbm1hc2sgYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIFVubWFzayBhbGwgZGV2aWNlIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKCkKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1NjQgdmFsNjQgPSAwOworCisJaWYgKGhsZGV2LT5jb25maWcuaW50cl9tb2RlID09IFZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpCisJCXZhbDY0ID0gIFZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX1RSQUZGSUM7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9tYXNrX2FsbF9pbnQpOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvIC0gRmx1c2ggaW8gd3JpdGVzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIFRoZSBmdW5jdGlvbglwZXJmb3JtcyBhIHJlYWQgb3BlcmF0aW9uIHRvIGZsdXNoIGlvIHdyaXRlcy4KKyAqCisgKiBSZXR1cm5zOiB2b2lkCisgKi8KK3ZvaWQgdnhnZV9od19kZXZpY2VfZmx1c2hfaW8oc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXUzMiB2YWwzMjsKKworCXZhbDMyID0gcmVhZGwoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycSAtIEJlZ2luIElSUSBwcm9jZXNzaW5nLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQHNraXBfYWxhcm1zOiBEbyBub3QgY2xlYXIgdGhlIGFsYXJtcworICogQHJlYXNvbjogIlJlYXNvbiIgZm9yIHRoZSBpbnRlcnJ1cHQsIHRoZSB2YWx1ZSBvZiBUaXRhbidzCisgKglnZW5lcmFsX2ludF9zdGF0dXMgcmVnaXN0ZXIuCisgKgorICogVGhlIGZ1bmN0aW9uCXBlcmZvcm1zIHR3byBhY3Rpb25zLCBJdCBmaXJzdCBjaGVja3Mgd2hldGhlciAoc2hhcmVkIElSUSkgdGhlCisgKiBpbnRlcnJ1cHQgd2FzIHJhaXNlZAlieSB0aGUgZGV2aWNlLiBOZXh0LCBpdAltYXNrcyB0aGUgZGV2aWNlIGludGVycnVwdHMuCisgKgorICogTm90ZToKKyAqIHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycSgpIGRvZXMgbm90IGZsdXNoIE1NSU8gd3JpdGVzIHRocm91Z2ggdGhlCisgKiBicmlkZ2UuIFRoZXJlZm9yZSwgdHdvIGJhY2stdG8tYmFjayBpbnRlcnJ1cHRzIGFyZSBwb3RlbnRpYWxseSBwb3NzaWJsZS4KKyAqCisgKiBSZXR1cm5zOiAwLCBpZiB0aGUgaW50ZXJydXB0CWlzIG5vdCAib3VycyIgKG5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlCisgKiBkZXZpY2UgcmVtYWluIGVuYWJsZWQpLgorICogT3RoZXJ3aXNlLCB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoKSByZXR1cm5zIDY0Yml0IGdlbmVyYWwgYWRhcHRlcgorICogc3RhdHVzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkJCSAgICAgdTMyIHNraXBfYWxhcm1zLCB1NjQgKnJlYXNvbikKK3sKKwl1MzIgaTsKKwl1NjQgdmFsNjQ7CisJdTY0IGFkYXB0ZXJfc3RhdHVzOworCXU2NCB2cGF0aF9tYXNrOworCWVudW0gdnhnZV9od19zdGF0dXMgcmV0ID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJaWYgKHVubGlrZWx5KCF2YWw2NCkpIHsKKwkJLyogbm90IFRpdGFuIGludGVycnVwdAkqLworCQkqcmVhc29uCT0gMDsKKwkJcmV0ID0gVlhHRV9IV19FUlJfV1JPTkdfSVJROworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHVubGlrZWx5KHZhbDY0ID09IFZYR0VfSFdfQUxMX0ZPWEVTKSkgeworCisJCWFkYXB0ZXJfc3RhdHVzID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT5hZGFwdGVyX3N0YXR1cyk7CisKKwkJaWYgKGFkYXB0ZXJfc3RhdHVzID09IFZYR0VfSFdfQUxMX0ZPWEVTKSB7CisKKwkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKGhsZGV2LAorCQkJCU5VTExfVlBJRCwgVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSk7CisJCQkqcmVhc29uCT0gMDsKKwkJCXJldCA9IFZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLnRvdGFsX2ludHJfY250Kys7CisKKwkqcmVhc29uCT0gdmFsNjQ7CisKKwl2cGF0aF9tYXNrID0gaGxkZXYtPnZwYXRoc19kZXBsb3llZCA+PgorCQkJCSg2NCAtIFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMpOworCisJaWYgKHZhbDY0ICYKKwkgICAgVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfVFJBRkZJQ19JTlQodnBhdGhfbWFzaykpIHsKKwkJaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLnRyYWZmaWNfaW50cl9jbnQrKzsKKworCQlyZXR1cm4gVlhHRV9IV19PSzsKKwl9CisKKwlobGRldi0+c3RhdHMuc3dfZGV2X2luZm9fc3RhdHMubm90X3RyYWZmaWNfaW50cl9jbnQrKzsKKworCWlmICh1bmxpa2VseSh2YWw2NCAmCisJCQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19WUEFUSF9BTEFSTV9JTlQpKSB7CisKKwkJZW51bSB2eGdlX2h3X3N0YXR1cyBlcnJvcl9sZXZlbCA9IFZYR0VfSFdfT0s7CisKKwkJaGxkZXYtPnN0YXRzLnN3X2Rldl9lcnJfc3RhdHMudnBhdGhfYWxhcm1zKys7CisKKwkJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCisJCQkJJmhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLCBza2lwX2FsYXJtcyk7CisKKwkJCWVycm9yX2xldmVsID0gVlhHRV9IV19TRVRfTEVWRUwocmV0LCBlcnJvcl9sZXZlbCk7CisKKwkJCWlmICh1bmxpa2VseSgocmV0ID09IFZYR0VfSFdfRVJSX0NSSVRJQ0FMKSB8fAorCQkJCShyZXQgPT0gVlhHRV9IV19FUlJfU0xPVF9GUkVFWkUpKSkKKwkJCQlicmVhazsKKwkJfQorCisJCXJldCA9IGVycm9yX2xldmVsOworCX0KK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogTGluayB1cCBpbmRpY2F0aW9uIGhhbmRsZXIuIFRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIGJ5IEhXIHdoZW4KKyAqIFRpdGFuIGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIHVwIGZvciBwcm9ncmFtbWFibGUgYW1vdW50IG9mIHRpbWUuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsaW5rIHN0YXRlIGlzIG5vdCBkb3duLCByZXR1cm4uCisJICovCisJaWYgKGhsZGV2LT5saW5rX3N0YXRlID09IFZYR0VfSFdfTElOS19VUCkKKwkJZ290byBleGl0OworCisJaGxkZXYtPmxpbmtfc3RhdGUgPSBWWEdFX0hXX0xJTktfVVA7CisKKwkvKiBub3RpZnkgZHJpdmVyICovCisJaWYgKGhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXApCisJCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXAoaGxkZXYpOworZXhpdDoKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfZG93bl9pbmQKKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBMaW5rIGRvd24gaW5kaWNhdGlvbiBoYW5kbGVyLiBUaGUgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBIVyB3aGVuCisgKiBUaXRhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluayBpcyBkb3duLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwkvKgorCSAqIElmIHRoZSBwcmV2aW91cyBsaW5rIHN0YXRlIGlzIG5vdCBkb3duLCByZXR1cm4uCisJICovCisJaWYgKGhsZGV2LT5saW5rX3N0YXRlID09IFZYR0VfSFdfTElOS19ET1dOKQorCQlnb3RvIGV4aXQ7CisKKwlobGRldi0+bGlua19zdGF0ZSA9IFZYR0VfSFdfTElOS19ET1dOOworCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd24pCisJCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfZG93bihobGRldik7CitleGl0OgorCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKioKKyAqIF9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yIC0gSGFuZGxlIGVycm9yCisgKiBAaGxkZXY6IEhXIGRldmljZQorICogQHZwX2lkOiBWcGF0aCBJZAorICogQHR5cGU6IEVycm9yIHR5cGUuIFBsZWFzZSBzZWUgZW51bSB2eGdlX2h3X2V2ZW50e30KKyAqCisgKiBIYW5kbGUgZXJyb3IuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKAorCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCXUzMiB2cF9pZCwKKwkJZW51bSB2eGdlX2h3X2V2ZW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBWWEdFX0hXX0VWRU5UX1VOS05PV046CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDoKKwljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfQ09NUExFVEU6CisJY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfRE9XTjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfTElOS19VUDoKKwkJZ290byBvdXQ7CisJY2FzZSBWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQ6CisJCWdvdG8gb3V0OworCWNhc2UgVlhHRV9IV19FVkVOVF9FQ0NFUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9FQ0NFUlI6CisJCWdvdG8gb3V0OworCWNhc2UgVlhHRV9IV19FVkVOVF9GSUZPX0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX1NFUlI6CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19FVkVOVF9TUlBDSU1fU0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfTVJQQ0lNX1NFUlI6CisJCWdvdG8gb3V0OworCWNhc2UgVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdnhnZV9hc3NlcnQoMCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIG5vdGlmeSBkcml2ZXIgKi8KKwlpZiAoaGxkZXYtPnVsZF9jYWxsYmFja3MuY3JpdF9lcnIpCisJCWhsZGV2LT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyKAorCQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopaGxkZXYsCisJCQl0eXBlLCB2cF9pZCk7CitvdXQ6CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeCAtIEFja25vd2xlZGdlICh0aGF0IGlzLCBjbGVhcikgdGhlCisgKiBjb25kaXRpb24gdGhhdCBoYXMgY2F1c2VkIHRoZSBUeCBhbmQgUlggaW50ZXJydXB0LgorICogQGhsZGV2OiBIVyBkZXZpY2UuCisgKgorICogQWNrbm93bGVkZ2UgKHRoYXQgaXMsIGNsZWFyKSB0aGUgY29uZGl0aW9uIHRoYXQgaGFzIGNhdXNlZAorICogdGhlIFR4IGFuZCBSeCBpbnRlcnJ1cHQuCisgKiBTZWUgYWxzbzogdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKCksCisgKiB2eGdlX2h3X2RldmljZV9tYXNrX3R4X3J4KCksIHZ4Z2VfaHdfZGV2aWNlX3VubWFza190eF9yeCgpLgorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2NsZWFyX3R4X3J4KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKworCWlmICgoaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSAhPSAwKSB8fAorCSAgIChobGRldi0+dGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdICE9IDApKSB7CisJCXdyaXRlcSgoaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQkJIGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9zdGF0dXMwKTsKKwl9CisKKwlpZiAoKGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkgICAoaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkJCShobGRldi0+dGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCQkgaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X3N0YXR1czEpOworCX0KKworCXJldHVybjsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2MgLSBBbGxvY2F0ZSBhIGR0ciBmcm9tIHRoZSBjaGFubmVsCisgKiBAY2hhbm5lbDogQ2hhbm5lbAorICogQGR0cmg6IEJ1ZmZlciB0byByZXR1cm4gdGhlIERUUiBwb2ludGVyCisgKgorICogQWxsb2NhdGVzIGEgZHRyIGZyb20gdGhlIHJlc2VydmUgYXJyYXkuIElmIHRoZSByZXNlcnZlIGFycmF5IGlzIGVtcHR5LAorICogaXQgc3dhcHMgdGhlIHJlc2VydmUgYW5kIGZyZWUgYXJyYXlzLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19jaGFubmVsX2R0cl9hbGxvYyhzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKipkdHJoKQoreworCXZvaWQgKip0bXBfYXJyOworCisJaWYgKGNoYW5uZWwtPnJlc2VydmVfcHRyIC0gY2hhbm5lbC0+cmVzZXJ2ZV90b3AgPiAwKSB7CitfYWxsb2NfYWZ0ZXJfc3dhcDoKKwkJKmR0cmggPQljaGFubmVsLT5yZXNlcnZlX2FyclstLWNoYW5uZWwtPnJlc2VydmVfcHRyXTsKKworCQlyZXR1cm4gVlhHRV9IV19PSzsKKwl9CisKKwkvKiBzd2l0Y2ggYmV0d2VlbiBlbXB0eQlhbmQgZnVsbCBhcnJheXMJKi8KKworCS8qIHRoZSBpZGVhIGJlaGluZCBzdWNoCWEgZGVzaWduIGlzIHRoYXQgYnkgaGF2aW5nIGZyZWUJYW5kIHJlc2VydmVkCisJICogYXJyYXlzIHNlcGFyYXRlZCB3ZSBiYXNpY2FsbHkgc2VwYXJhdGVkIGlycSBhbmQgbm9uLWlycSBwYXJ0cy4KKwkgKiBpLmUuCW5vIGFkZGl0aW9uYWwgbG9jayBuZWVkCXRvIGJlIGRvbmUgd2hlbgl3ZSBmcmVlCWEgcmVzb3VyY2UgKi8KKworCWlmIChjaGFubmVsLT5sZW5ndGggLSBjaGFubmVsLT5mcmVlX3B0ciA+IDApIHsKKworCQl0bXBfYXJyCT0gY2hhbm5lbC0+cmVzZXJ2ZV9hcnI7CisJCWNoYW5uZWwtPnJlc2VydmVfYXJyID0gY2hhbm5lbC0+ZnJlZV9hcnI7CisJCWNoYW5uZWwtPmZyZWVfYXJyID0gdG1wX2FycjsKKwkJY2hhbm5lbC0+cmVzZXJ2ZV9wdHIgPSBjaGFubmVsLT5sZW5ndGg7CisJCWNoYW5uZWwtPnJlc2VydmVfdG9wID0gY2hhbm5lbC0+ZnJlZV9wdHI7CisJCWNoYW5uZWwtPmZyZWVfcHRyID0gY2hhbm5lbC0+bGVuZ3RoOworCisJCWNoYW5uZWwtPnN0YXRzLT5yZXNlcnZlX2ZyZWVfc3dhcHNfY250Kys7CisKKwkJZ290byBfYWxsb2NfYWZ0ZXJfc3dhcDsKKwl9CisKKwljaGFubmVsLT5zdGF0cy0+ZnVsbF9jbnQrKzsKKworCSpkdHJoID0JTlVMTDsKKwlyZXR1cm4gVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl9wb3N0IC0gUG9zdCBhIGR0ciB0byB0aGUgY2hhbm5lbAorICogQGNoYW5uZWxoOiBDaGFubmVsCisgKiBAZHRyaDogRFRSIHBvaW50ZXIKKyAqCisgKiBQb3N0cyBhIGR0ciB0byB3b3JrIGFycmF5LgorICoKKyAqLwordm9pZCB2eGdlX2h3X2NoYW5uZWxfZHRyX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICpkdHJoKQoreworCXZ4Z2VfYXNzZXJ0KGNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPnBvc3RfaW5kZXhdID09IE5VTEwpOworCisJY2hhbm5lbC0+d29ya19hcnJbY2hhbm5lbC0+cG9zdF9pbmRleCsrXSA9IGR0cmg7CisKKwkvKiB3cmFwLWFyb3VuZCAqLworCWlmIChjaGFubmVsLT5wb3N0X2luZGV4CT09IGNoYW5uZWwtPmxlbmd0aCkKKwkJY2hhbm5lbC0+cG9zdF9pbmRleCA9IDA7Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZSAtIFJldHVybnMgbmV4dCBjb21wbGV0ZWQgZHRyCisgKiBAY2hhbm5lbDogQ2hhbm5lbAorICogQGR0cjogQnVmZmVyIHRvIHJldHVybiB0aGUgbmV4dCBjb21wbGV0ZWQgRFRSIHBvaW50ZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IGNvbXBsZXRlZCBkdHIgd2l0aCBvdXQgcmVtb3ZpbmcgaXQgZnJvbSB3b3JrIGFycmF5CisgKgorICovCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKipkdHJoKQoreworCXZ4Z2VfYXNzZXJ0KGNoYW5uZWwtPmNvbXBsX2luZGV4IDwgY2hhbm5lbC0+bGVuZ3RoKTsKKworCSpkdHJoID0JY2hhbm5lbC0+d29ya19hcnJbY2hhbm5lbC0+Y29tcGxfaW5kZXhdOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZSAtIFJlbW92ZXMgbmV4dCBjb21wbGV0ZWQgZHRyIGZyb20gdGhlIHdvcmsgYXJyYXkKKyAqIEBjaGFubmVsOiBDaGFubmVsIGhhbmRsZQorICoKKyAqIFJlbW92ZXMgdGhlIG5leHQgY29tcGxldGVkIGR0ciBmcm9tIHdvcmsgYXJyYXkKKyAqCisgKi8KK3ZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJY2hhbm5lbC0+d29ya19hcnJbY2hhbm5lbC0+Y29tcGxfaW5kZXhdCT0gTlVMTDsKKworCS8qIHdyYXAtYXJvdW5kICovCisJaWYgKCsrY2hhbm5lbC0+Y29tcGxfaW5kZXggPT0gY2hhbm5lbC0+bGVuZ3RoKQorCQljaGFubmVsLT5jb21wbF9pbmRleCA9IDA7CisKKwljaGFubmVsLT5zdGF0cy0+dG90YWxfY29tcGxfY250Kys7Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUgLSBGcmVlcyBhIGR0cgorICogQGNoYW5uZWw6IENoYW5uZWwgaGFuZGxlCisgKiBAZHRyOiAgRFRSIHBvaW50ZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBkdHIgdG8gZnJlZSBhcnJheQorICoKKyAqLwordm9pZCB2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICpkdHJoKQoreworCWNoYW5uZWwtPmZyZWVfYXJyWy0tY2hhbm5lbC0+ZnJlZV9wdHJdID0gZHRyaDsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQKKyAqIEBjaGFubmVsOiBDaGFubmVsIGhhbmRsZS4gT2J0YWluZWQgdmlhIHZ4Z2VfaHdfY2hhbm5lbF9vcGVuKCkuCisgKgorICogUmV0cmVpdmUgbnVtYmVyIG9mIERUUnMgYXZhaWxhYmxlLiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgYmUgY2FsbGVkCisgKiBmcm9tIGRhdGEgcGF0aC4gcmluZ19pbml0aWFsX3JlcGxlbmlzaGkoKSBpcyB0aGUgb25seSB1c2VyLgorICovCitpbnQgdnhnZV9od19jaGFubmVsX2R0cl9jb3VudChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJcmV0dXJuIChjaGFubmVsLT5yZXNlcnZlX3B0ciAtIGNoYW5uZWwtPnJlc2VydmVfdG9wKSArCisJCShjaGFubmVsLT5sZW5ndGggLSBjaGFubmVsLT5mcmVlX3B0cik7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlCS0gUmVzZXJ2ZSByaW5nIGRlc2NyaXB0b3IuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogUmVzZXJ2ZWQgZGVzY3JpcHRvci4gT24gc3VjY2VzcyBIVyBmaWxscyB0aGlzICJvdXQiIHBhcmFtZXRlcgorICogd2l0aCBhIHZhbGlkIGhhbmRsZS4KKyAqCisgKiBSZXNlcnZlIFJ4IGRlc2NyaXB0b3IgZm9yIHRoZSBzdWJzZXF1ZW50IGZpbGxpbmctaW4gZHJpdmVyCisgKiBhbmQgcG9zdGluZyBvbiB0aGUgY29ycmVzcG9uZGluZyBjaGFubmVsIChAY2hhbm5lbGgpCisgKiB2aWEgdnhnZV9od19yaW5nX3J4ZF9wb3N0KCkuCisgKgorICogUmV0dXJuczogVlhHRV9IV19PSyAtIHN1Y2Nlc3MuCisgKiBWWEdFX0hXX0lORl9PVVRfT0ZfREVTQ1JJUFRPUlMgLSBDdXJyZW50bHkgbm8gZGVzY3JpcHRvcnMgYXZhaWxhYmxlLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfcnhkX3Jlc2VydmUoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLAorCXZvaWQgKipyeGRoKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2MoY2hhbm5lbCwgcnhkaCk7CisKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9CisJCQkoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKSpyeGRoOworCisJCXJ4ZHAtPmNvbnRyb2xfMAk9IHJ4ZHAtPmNvbnRyb2xfMSA9IDA7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX2ZyZWUgLSBGcmVlIGRlc2NyaXB0b3IuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogRnJlZQl0aGUgcmVzZXJ2ZWQgZGVzY3JpcHRvci4gVGhpcyBvcGVyYXRpb24gaXMgInN5bW1ldHJpY2FsIiB0bworICogdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlLiBUaGUgImZyZWUtaW5nIiBjb21wbGV0ZXMgdGhlIGRlc2NyaXB0b3IncworICogbGlmZWN5Y2xlLgorICoKKyAqIEFmdGVyIGZyZWUtaW5nIChzZWUgdnhnZV9od19yaW5nX3J4ZF9mcmVlKCkpIHRoZSBkZXNjcmlwdG9yIGFnYWluIGNhbgorICogYmU6CisgKgorICogLSByZXNlcnZlZCAodnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKTsKKyAqCisgKiAtIHBvc3RlZAkodnhnZV9od19yaW5nX3J4ZF9wb3N0KTsKKyAqCisgKiAtIGNvbXBsZXRlZCAodnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCk7CisgKgorICogLSBhbmQgcmVjeWNsZWQgYWdhaW4JKHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSkuCisgKgorICogRm9yIGFsdGVybmF0aXZlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBtb3JlIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvCisgKiB0aGUgZGVzaWduIGRvYy4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdm9pZCAqcnhkaCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoY2hhbm5lbCwgcnhkaCk7CisKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3ByZV9wb3N0IC0gUHJlcGFyZSByeGQgYW5kIHBvc3QKKyAqIEByaW5nOiBIYW5kbGUgdG8gdGhlIHJpbmcgb2JqZWN0IHVzZWQgZm9yIHJlY2VpdmUKKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJlcGFyZXMgYSByeGQgYW5kIHBvc3RzCisgKi8KK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KGNoYW5uZWwsIHJ4ZGgpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0IC0gUHJvY2VzcyByeGQgYWZ0ZXIgcG9zdC4KKyAqIEByaW5nOiBIYW5kbGUgdG8gdGhlIHJpbmcgb2JqZWN0IHVzZWQgZm9yIHJlY2VpdmUKKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqCisgKiBQcm9jZXNzZXMgcnhkIGFmdGVyIHBvc3QKKyAqLwordm9pZCB2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwlyeGRwLT5jb250cm9sXzAJfD0gVlhHRV9IV19SSU5HX1JYRF9MSVNUX09XTl9BREFQVEVSOworCisJaWYgKHJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250ID4gMCkKKwkJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQtLTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3Bvc3QgLSBQb3N0IGRlc2NyaXB0b3Igb24gdGhlIHJpbmcuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBvYnRhaW5lZCB2aWEgdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKCkuCisgKgorICogUG9zdAlkZXNjcmlwdG9yIG9uIHRoZSByaW5nLgorICogUHJpb3IgdG8gcG9zdGluZyB0aGUJZGVzY3JpcHRvciBzaG91bGQgYmUgZmlsbGVkIGluIGFjY29yZGFuY2Ugd2l0aAorICogSG9zdC9UaXRhbiBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgYSBnaXZlbiBzZXJ2aWNlIChMTCwgZXRjLikuCisgKgorICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwl3bWIoKTsKKwlyeGRwLT5jb250cm9sXzAJfD0gVlhHRV9IV19SSU5HX1JYRF9MSVNUX09XTl9BREFQVEVSOworCisJdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KGNoYW5uZWwsIHJ4ZGgpOworCisJaWYgKHJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250ID4gMCkKKwkJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQtLTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdF93bWIgLSBQcm9jZXNzIHJ4ZCBhZnRlciBwb3N0IHdpdGggbWVtb3J5IGJhcnJpZXIuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogUHJvY2Vzc2VzIHJ4ZCBhZnRlciBwb3N0IHdpdGggbWVtb3J5IGJhcnJpZXIuCisgKi8KK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdm9pZCAqcnhkaCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwl3bWIoKTsKKwl2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdChyaW5nLCByeGRoKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkIC0gR2V0IHRoZSBfbmV4dF8gY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuIFJldHVybmVkIGJ5IEhXLgorICogQHRfY29kZToJVHJhbnNmZXIgY29kZSwgYXMgcGVyIFRpdGFuIFVzZXIgR3VpZGUsCisgKgkgUmVjZWl2ZSBEZXNjcmlwdG9yIEZvcm1hdC4gUmV0dXJuZWQgYnkgSFcuCisgKgorICogUmV0cmlldmUgdGhlCV9uZXh0XyBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEhXIHVzZXMgcmluZyBjYWxsYmFjayAoKnZ4Z2VfaHdfcmluZ19jYWxsYmFja19mKSB0byBub3RpZml5CisgKiBkcml2ZXIgb2YgbmV3IGNvbXBsZXRlZCBkZXNjcmlwdG9ycy4gQWZ0ZXIgdGhhdAorICogdGhlIGRyaXZlciBjYW4gdXNlIHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQgdG8gcmV0cmlldmUgdGhlIHJlc3QKKyAqIGNvbXBsZXRpb25zICh0aGUgdmVyeSBmaXJzdCBjb21wbGV0aW9uIGlzIHBhc3NlZCBieSBIVyB2aWEKKyAqIHZ4Z2VfaHdfcmluZ19jYWxsYmFja19mKS4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbi13aXNlLCB0aGUgZHJpdmVyIGlzIGZyZWUgdG8gY2FsbAorICogdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCBlaXRoZXIgaW1tZWRpYXRlbHkgZnJvbSBpbnNpZGUgdGhlCisgKiByaW5nIGNhbGxiYWNrLCBvciBpbiBhIGRlZmVycmVkIGZhc2hpb24gYW5kIHNlcGFyYXRlIChmcm9tIEhXKQorICogY29udGV4dC4KKyAqCisgKiBOb24temVybyBAdF9jb2RlIG1lYW5zIGZhaWx1cmUgdG8gZmlsbC1pbiByZWNlaXZlIGJ1ZmZlcihzKQorICogb2YgdGhlIGRlc2NyaXB0b3IuCisgKiBGb3IgaW5zdGFuY2UsIHBhcml0eQllcnJvciBkZXRlY3RlZCBkdXJpbmcgdGhlIGRhdGEgdHJhbnNmZXIuCisgKiBJbiB0aGlzIGNhc2UJVGl0YW4gd2lsbCBjb21wbGV0ZSB0aGUgZGVzY3JpcHRvciBhbmQgaW5kaWNhdGUKKyAqIGZvciB0aGUgaG9zdAl0aGF0IHRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCB0byBiZSB1c2VkLgorICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVzZXIgR3VpZGUuCisgKgorICogUmV0dXJuczogVlhHRV9IV19PSyAtIHN1Y2Nlc3MuCisgKiBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUyAtIE5vIGNvbXBsZXRlZCBkZXNjcmlwdG9ycworICogYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfcmluZ19jYWxsYmFja19me30sCisgKiB2eGdlX2h3X2ZpZm9fcnhkX25leHRfY29tcGxldGVkKCksIGVudW0gdnhnZV9od19zdGF0dXN7fS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdm9pZCAqKnJ4ZGgsIHU4ICp0X2NvZGUpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHA7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoY2hhbm5lbCwgcnhkaCk7CisKKwlyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKikqcnhkaDsKKwlpZiAocnhkcCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfSU5GX05PX01PUkVfQ09NUExFVEVEX0RFU0NSSVBUT1JTOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogY2hlY2sgd2hldGhlciBpdCBpcyBub3QgdGhlIGVuZCAqLworCWlmICghKHJ4ZHAtPmNvbnRyb2xfMCAmCVZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUikpIHsKKworCQl2eGdlX2Fzc2VydCgoKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRwKS0+aG9zdF9jb250cm9sICE9CisJCQkJMCk7CisKKwkJKytyaW5nLT5jbXBsX2NudDsKKwkJdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShjaGFubmVsKTsKKworCQkqdF9jb2RlCT0gKHU4KVZYR0VfSFdfUklOR19SWERfVF9DT0RFX0dFVChyeGRwLT5jb250cm9sXzApOworCisJCXZ4Z2VfYXNzZXJ0KCp0X2NvZGUgIT0gVlhHRV9IV19SSU5HX1JYRF9UX0NPREVfVU5VU0VEKTsKKworCQlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCsrOworCQlpZiAocmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPAorCQkJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250KQorCQkJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPQorCQkJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250OworCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiByZXNldCBpdC4gc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZXR1cm4KKwkgKiBnYXJiYWdlIHRvIHRoZSBkcml2ZXIgKi8KKwkqcnhkaCA9CU5VTEw7CisJc3RhdHVzID0gVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlM7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX2hhbmRsZV90Y29kZSAtIEhhbmRsZSB0cmFuc2ZlciBjb2RlLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQHRfY29kZTogT25lIG9mIHRoZSBlbnVtZXJhdGVkIChhbmQgZG9jdW1lbnRlZCBpbiB0aGUgVGl0YW4gdXNlciBndWlkZSkKKyAqICJ0cmFuc2ZlciBjb2RlcyIuCisgKgorICogSGFuZGxlIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBjb2RlLiBUaGUgbGF0dGVyIGNvbWVzIHdpdGggZWFjaCBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3IuCisgKgorICogUmV0dXJuczogb25lIG9mIHRoZSBlbnVtIHZ4Z2VfaHdfc3RhdHVze30gZW51bWVyYXRlZCB0eXBlcy4KKyAqIFZYR0VfSFdfT0sJCQktIGZvciBzdWNjZXNzLgorICogVlhHRV9IV19FUlJfQ1JJVElDQUwgICAgICAgICAtIHdoZW4gZW5jb3VudGVycyBjcml0aWNhbCBlcnJvci4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfaGFuZGxlX3Rjb2RlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywgdm9pZCAqcnhkaCwgdTggdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwkvKiBJZiB0aGUgdF9jb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGlmIHRoZQorCSAqIHRfY29kZSBpcyBvdGhlciB0aGFuIDB4NSAodW5wYXJzZWFibGUgcGFja2V0CisJICogc3VjaCBhcyB1bmtub3duIFVQVjYgaGVhZGVyKSwgRHJvcCBpdCAhISEKKwkgKi8KKworCWlmICh0X2NvZGUgPT0gMCB8fCB0X2NvZGUgPT0gNSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHRfY29kZSA+IDB4RikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1RDT0RFOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmluZy0+c3RhdHMtPnJ4ZF90X2NvZGVfZXJyX2NudFt0X2NvZGVdKys7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3Bvc3QgLSBQb3N0IG5vbiBvZmZsb2FkIGRvb3JiZWxsCisgKgorICogQGZpZm86IGZpZm9oYW5kbGUKKyAqIEB0eGRsX3B0cjogVGhlIHN0YXJ0aW5nIGxvY2F0aW9uIG9mIHRoZSBUeERMIGluIGhvc3QgbWVtb3J5CisgKiBAbnVtX3R4ZHM6IFRoZSBoaWdoZXN0IFR4RCBpbiB0aGlzIFR4REwgKDAgdG8gMjU1IG1lYW5zIDEgdG8gMjU2KQorICogQG5vX3Nub29wOiBObyBzbm9vcCBmbGFncworICoKKyAqIFRoaXMgZnVuY3Rpb24gcG9zdHMgYSBub24tb2ZmbG9hZCBkb29yYmVsbCB0byBkb29yYmVsbCBGSUZPCisgKgorICovCitzdGF0aWMgdm9pZCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfcG9zdChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJdTY0IHR4ZGxfcHRyLCB1MzIgbnVtX3R4ZHMsIHUzMiBub19zbm9vcCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl3cml0ZXEoVlhHRV9IV19OT0RCV19UWVBFKFZYR0VfSFdfTk9EQldfVFlQRV9OT0RCVykgfAorCQlWWEdFX0hXX05PREJXX0xBU1RfVFhEX05VTUJFUihudW1fdHhkcykgfAorCQlWWEdFX0hXX05PREJXX0dFVF9OT19TTk9PUChub19zbm9vcCksCisJCSZmaWZvLT5ub2ZsX2RiLT5jb250cm9sXzApOworCisJd21iKCk7CisKKwl3cml0ZXEodHhkbF9wdHIsICZmaWZvLT5ub2ZsX2RiLT50eGRsX3B0cik7CisJd21iKCk7CisKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fZnJlZV90eGRsX2NvdW50X2dldCAtIHJldHVybnMgdGhlIG51bWJlciBvZiB0eGRscyBhdmFpbGFibGUgaW4KKyAqIHRoZSBmaWZvCisgKiBAZmlmb2g6IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICovCit1MzIgdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCkKK3sKKwlyZXR1cm4gdnhnZV9od19jaGFubmVsX2R0cl9jb3VudCgmZmlmb2gtPmNoYW5uZWwpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUgLSBSZXNlcnZlIGZpZm8gZGVzY3JpcHRvci4KKyAqIEBmaWZvaDogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IFJlc2VydmVkIGRlc2NyaXB0b3IuIE9uIHN1Y2Nlc3MgSFcgZmlsbHMgdGhpcyAib3V0IiBwYXJhbWV0ZXIKKyAqICAgICAgICB3aXRoIGEgdmFsaWQgaGFuZGxlLgorICogQHR4ZGxfcHJpdjogQnVmZmVyIHRvIHJldHVybiB0aGUgcG9pbnRlciB0byBwZXIgdHhkbCBzcGFjZQorICoKKyAqIFJlc2VydmUgYSBzaW5nbGUgVHhETCAodGhhdCBpcywgZmlmbyBkZXNjcmlwdG9yKQorICogZm9yIHRoZSBzdWJzZXF1ZW50IGZpbGxpbmctaW4gYnkgZHJpdmVyKQorICogYW5kIHBvc3Rpbmcgb24gdGhlIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCAoQGNoYW5uZWxoKQorICogdmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKS4KKyAqCisgKiBOb3RlOiBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgZHJpdmVyIHRvIHJlc2VydmUgbXVsdGlwbGUgZGVzY3JpcHRvcnMKKyAqIGZvciBsZW5ndGh5IChlLmcuLCBMU08pIHRyYW5zbWl0IG9wZXJhdGlvbi4gQSBzaW5nbGUgZmlmbyBkZXNjcmlwdG9yCisgKiBjYXJyaWVzIHVwIHRvIGNvbmZpZ3VyZWQgbnVtYmVyIChmaWZvLm1heF9mcmFncykgb2YgY29udGlndW91cyBidWZmZXJzLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzOworICogVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTIC0gQ3VycmVudGx5IG5vIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywKKwl2b2lkICoqdHhkbGgsIHZvaWQgKip0eGRsX3ByaXYpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCBpOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJc3RhdHVzID0gdnhnZV9od19jaGFubmVsX2R0cl9hbGxvYyhjaGFubmVsLCB0eGRsaCk7CisKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHAgPQorCQkJKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopKnR4ZGxoOworCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2ICpwcml2OworCisJCXByaXYgPSBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoZmlmbywgdHhkcCk7CisKKwkJLyogcmVzZXQgdGhlIFR4REwncyBwcml2YXRlICovCisJCXByaXYtPmFsaWduX2RtYV9vZmZzZXQgPSAwOworCQlwcml2LT5hbGlnbl92YWRkcl9zdGFydCA9IHByaXYtPmFsaWduX3ZhZGRyOworCQlwcml2LT5hbGlnbl91c2VkX2ZyYWdzID0gMDsKKwkJcHJpdi0+ZnJhZ3MgPSAwOworCQlwcml2LT5hbGxvY19mcmFncyA9IGZpZm8tPmNvbmZpZy0+bWF4X2ZyYWdzOworCQlwcml2LT5uZXh0X3R4ZGxfcHJpdiA9IE5VTEw7CisKKwkJKnR4ZGxfcHJpdiA9ICh2b2lkICopKHNpemVfdCl0eGRwLT5ob3N0X2NvbnRyb2w7CisKKwkJZm9yIChpID0gMDsgaSA8IGZpZm8tPmNvbmZpZy0+bWF4X2ZyYWdzOyBpKyspIHsKKwkJCXR4ZHAgPSAoKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopKnR4ZGxoKSArIGk7CisJCQl0eGRwLT5jb250cm9sXzAgPSB0eGRwLT5jb250cm9sXzEgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0IC0gU2V0IHRyYW5zbWl0IGJ1ZmZlciBwb2ludGVyIGluIHRoZQorICogZGVzY3JpcHRvci4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAZnJhZ19pZHg6IEluZGV4IG9mIHRoZSBkYXRhIGJ1ZmZlciBpbiB0aGUgY2FsbGVyJ3Mgc2NhdHRlci1nYXRoZXIgbGlzdAorICogICAgICAgICAgICAob2YgYnVmZmVycykuCisgKiBAZG1hX3BvaW50ZXI6IERNQSBhZGRyZXNzIG9mIHRoZSBkYXRhIGJ1ZmZlciByZWZlcmVuY2VkIGJ5IEBmcmFnX2lkeC4KKyAqIEBzaXplOiBTaXplIG9mIHRoZSBkYXRhIGJ1ZmZlciAoaW4gYnl0ZXMpLgorICoKKyAqIFRoaXMgQVBJIGlzIHBhcnQgb2YgdGhlIHByZXBhcmF0aW9uIG9mIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIGZvciBwb3N0aW5nCisgKiAodmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKSkuIFRoZSByZWxhdGVkICJwcmVwYXJhdGlvbiIgQVBJcyBpbmNsdWRlCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9tc3Nfc2V0KCkgYW5kIHZ4Z2VfaHdfZmlmb190eGRsX2Nrc3VtX3NldF9iaXRzKCkuCisgKiBBbGwgdGhyZWUgQVBJcyBmaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGZpZm8gZGVzY3JpcHRvciwKKyAqIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgVGl0YW4gc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldChzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJCQkJICB2b2lkICp0eGRsaCwgdTMyIGZyYWdfaWR4LAorCQkJCSAgZG1hX2FkZHJfdCBkbWFfcG9pbnRlciwgdTMyIHNpemUpCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqdHhkbF9wcml2OworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwLCAqdHhkcF9sYXN0OworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXR4ZGxfcHJpdiA9IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdihmaWZvLCB0eGRsaCk7CisJdHhkcCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoICArICB0eGRsX3ByaXYtPmZyYWdzOworCisJaWYgKGZyYWdfaWR4ICE9IDApCisJCXR4ZHAtPmNvbnRyb2xfMCA9IHR4ZHAtPmNvbnRyb2xfMSA9IDA7CisJZWxzZSB7CisJCXR4ZHAtPmNvbnRyb2xfMCB8PSBWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFKAorCQkJVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9GSVJTVCk7CisJCXR4ZHAtPmNvbnRyb2xfMSB8PSBmaWZvLT5pbnRlcnJ1cHRfdHlwZTsKKwkJdHhkcC0+Y29udHJvbF8xIHw9IFZYR0VfSFdfRklGT19UWERfSU5UX05VTUJFUigKKwkJCWZpZm8tPnR4X2ludHJfbnVtKTsKKwkJaWYgKHR4ZGxfcHJpdi0+ZnJhZ3MpIHsKKwkJCXR4ZHBfbGFzdCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoICArCisJCQkodHhkbF9wcml2LT5mcmFncyAtIDEpOworCQkJdHhkcF9sYXN0LT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERSgKKwkJCQlWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFX0xBU1QpOworCQl9CisJfQorCisJdnhnZV9hc3NlcnQoZnJhZ19pZHggPCB0eGRsX3ByaXYtPmFsbG9jX2ZyYWdzKTsKKworCXR4ZHAtPmJ1ZmZlcl9wb2ludGVyID0gKHU2NClkbWFfcG9pbnRlcjsKKwl0eGRwLT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9CVUZGRVJfU0laRShzaXplKTsKKwlmaWZvLT5zdGF0cy0+dG90YWxfYnVmZmVycysrOworCXR4ZGxfcHJpdi0+ZnJhZ3MrKzsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0IC0gUG9zdCBkZXNjcmlwdG9yIG9uIHRoZSBmaWZvIGNoYW5uZWwuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3Igb2J0YWluZWQgdmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUoKQorICogQGZyYWdzOiBOdW1iZXIgb2YgY29udGlndW91cyBidWZmZXJzIHRoYXQgYXJlIHBhcnQgb2YgYSBzaW5nbGUKKyAqICAgICAgICAgdHJhbnNtaXQgb3BlcmF0aW9uLgorICoKKyAqIFBvc3QgZGVzY3JpcHRvciBvbiB0aGUgJ2ZpZm8nIHR5cGUgY2hhbm5lbCBmb3IgdHJhbnNtaXNzaW9uLgorICogUHJpb3IgdG8gcG9zdGluZyB0aGUgZGVzY3JpcHRvciBzaG91bGQgYmUgZmlsbGVkIGluIGFjY29yZGFuY2Ugd2l0aAorICogSG9zdC9UaXRhbiBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiBmb3IgYSBnaXZlbiBzZXJ2aWNlIChMTCwgZXRjLikuCisgKgorICovCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLCB2b2lkICp0eGRsaCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2ICp0eGRsX3ByaXY7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHBfbGFzdDsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcF9maXJzdDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl0eGRsX3ByaXYgPSBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoZmlmbywgdHhkbGgpOworCXR4ZHBfZmlyc3QgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaDsKKworCXR4ZHBfbGFzdCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoICArICAodHhkbF9wcml2LT5mcmFncyAtIDEpOworCXR4ZHBfbGFzdC0+Y29udHJvbF8wIHw9CisJICAgICAgVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERShWWEdFX0hXX0ZJRk9fVFhEX0dBVEhFUl9DT0RFX0xBU1QpOworCXR4ZHBfZmlyc3QtPmNvbnRyb2xfMCB8PSBWWEdFX0hXX0ZJRk9fVFhEX0xJU1RfT1dOX0FEQVBURVI7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX3Bvc3QoJmZpZm8tPmNoYW5uZWwsIHR4ZGxoKTsKKworCV9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl9wb3N0KGZpZm8sCisJCSh1NjQpKHNpemVfdCl0eGRsX3ByaXYtPmRtYV9hZGRyLAorCQl0eGRsX3ByaXYtPmZyYWdzIC0gMSwKKwkJZmlmby0+bm9fc25vb3BfYml0cyk7CisKKwlmaWZvLT5zdGF0cy0+dG90YWxfcG9zdHMrKzsKKwlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCsrOworCWlmIChmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX21heCA8CisJCWZpZm8tPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250KQorCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX21heCA9CisJCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudDsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCAtIFJldHJpZXZlIG5leHQgY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLiBSZXR1cm5lZCBieSBIVy4KKyAqIEB0X2NvZGU6IFRyYW5zZmVyIGNvZGUsIGFzIHBlciBUaXRhbiBVc2VyIEd1aWRlLAorICogICAgICAgICAgVHJhbnNtaXQgRGVzY3JpcHRvciBGb3JtYXQuCisgKiAgICAgICAgICBSZXR1cm5lZCBieSBIVy4KKyAqCisgKiBSZXRyaWV2ZSB0aGUgX25leHRfIGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogSFcgdXNlcyBjaGFubmVsIGNhbGxiYWNrICgqdnhnZV9od19jaGFubmVsX2NhbGxiYWNrX2YpIHRvIG5vdGlmaXkKKyAqIGRyaXZlciBvZiBuZXcgY29tcGxldGVkIGRlc2NyaXB0b3JzLiBBZnRlciB0aGF0CisgKiB0aGUgZHJpdmVyIGNhbiB1c2UgdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQgdG8gcmV0cmlldmUgdGhlIHJlc3QKKyAqIGNvbXBsZXRpb25zICh0aGUgdmVyeSBmaXJzdCBjb21wbGV0aW9uIGlzIHBhc3NlZCBieSBIVyB2aWEKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9jYWxsYmFja19mKS4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbi13aXNlLCB0aGUgZHJpdmVyIGlzIGZyZWUgdG8gY2FsbAorICogdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQgZWl0aGVyIGltbWVkaWF0ZWx5IGZyb20gaW5zaWRlIHRoZQorICogY2hhbm5lbCBjYWxsYmFjaywgb3IgaW4gYSBkZWZlcnJlZCBmYXNoaW9uIGFuZCBzZXBhcmF0ZSAoZnJvbSBIVykKKyAqIGNvbnRleHQuCisgKgorICogTm9uLXplcm8gQHRfY29kZSBtZWFucyBmYWlsdXJlIHRvIHByb2Nlc3MgdGhlIGRlc2NyaXB0b3IuCisgKiBUaGUgZmFpbHVyZSBjb3VsZCBoYXBwZW4sIGZvciBpbnN0YW5jZSwgd2hlbiB0aGUgbGluayBpcworICogZG93biwgaW4gd2hpY2ggY2FzZSBUaXRhbiBjb21wbGV0ZXMgdGhlIGRlc2NyaXB0b3IgYmVjYXVzZSBpdAorICogaXMgbm90IGFibGUgdG8gc2VuZCB0aGUgZGF0YSBvdXQuCisgKgorICogRm9yIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVzZXIgR3VpZGUuCisgKgorICogUmV0dXJuczogVlhHRV9IV19PSyAtIHN1Y2Nlc3MuCisgKiBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUyAtIE5vIGNvbXBsZXRlZCBkZXNjcmlwdG9ycworICogYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgZm9yIHByb2Nlc3NpbmcuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywgdm9pZCAqKnR4ZGxoLAorCWVudW0gdnhnZV9od19maWZvX3Rjb2RlICp0X2NvZGUpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfdHJ5X2NvbXBsZXRlKGNoYW5uZWwsIHR4ZGxoKTsKKworCXR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKikqdHhkbGg7CisJaWYgKHR4ZHAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIHdoZXRoZXIgaG9zdCBvd25zIGl0ICovCisJaWYgKCEodHhkcC0+Y29udHJvbF8wICYgVlhHRV9IV19GSUZPX1RYRF9MSVNUX09XTl9BREFQVEVSKSkgeworCisJCXZ4Z2VfYXNzZXJ0KHR4ZHAtPmhvc3RfY29udHJvbCAhPSAwKTsKKworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2NvbXBsZXRlKGNoYW5uZWwpOworCisJCSp0X2NvZGUgPSAodTgpVlhHRV9IV19GSUZPX1RYRF9UX0NPREVfR0VUKHR4ZHAtPmNvbnRyb2xfMCk7CisKKwkJaWYgKGZpZm8tPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250ID4gMCkKKwkJCWZpZm8tPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250LS07CisKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJZ290byBleGl0OworCX0KKworCS8qIG5vIG1vcmUgY29tcGxldGlvbnMgKi8KKwkqdHhkbGggPSBOVUxMOworCXN0YXR1cyA9IFZYR0VfSFdfSU5GX05PX01PUkVfQ09NUExFVEVEX0RFU0NSSVBUT1JTOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb19oYW5kbGVfdGNvZGUgLSBIYW5kbGUgdHJhbnNmZXIgY29kZS4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAdF9jb2RlOiBPbmUgb2YgdGhlIGVudW1lcmF0ZWQgKGFuZCBkb2N1bWVudGVkIGluIHRoZSBUaXRhbiB1c2VyIGd1aWRlKQorICogICAgICAgICAgInRyYW5zZmVyIGNvZGVzIi4KKyAqCisgKiBIYW5kbGUgZGVzY3JpcHRvcidzIHRyYW5zZmVyIGNvZGUuIFRoZSBsYXR0ZXIgY29tZXMgd2l0aCBlYWNoIGNvbXBsZXRlZAorICogZGVzY3JpcHRvci4KKyAqCisgKiBSZXR1cm5zOiBvbmUgb2YgdGhlIGVudW0gdnhnZV9od19zdGF0dXN7fSBlbnVtZXJhdGVkIHR5cGVzLgorICogVlhHRV9IV19PSyAtIGZvciBzdWNjZXNzLgorICogVlhHRV9IV19FUlJfQ1JJVElDQUwgLSB3aGVuIGVuY291bnRlcnMgY3JpdGljYWwgZXJyb3IuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19maWZvX2hhbmRsZV90Y29kZShzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJCQkJCSAgICAgIHZvaWQgKnR4ZGxoLAorCQkJCQkgICAgICBlbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCWlmICgoKHRfY29kZSAmIDB4NykgPCAwKSB8fCAoKHRfY29kZSAmIDB4NykgPiAweDQpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfVENPREU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmaWZvLT5zdGF0cy0+dHhkX3RfY29kZV9lcnJfY250W3RfY29kZV0rKzsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlIC0gRnJlZSBkZXNjcmlwdG9yLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqCisgKiBGcmVlIHRoZSByZXNlcnZlZCBkZXNjcmlwdG9yLiBUaGlzIG9wZXJhdGlvbiBpcyAic3ltbWV0cmljYWwiIHRvCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlLiBUaGUgImZyZWUtaW5nIiBjb21wbGV0ZXMgdGhlIGRlc2NyaXB0b3IncworICogbGlmZWN5Y2xlLgorICoKKyAqIEFmdGVyIGZyZWUtaW5nIChzZWUgdnhnZV9od19maWZvX3R4ZGxfZnJlZSgpKSB0aGUgZGVzY3JpcHRvciBhZ2FpbiBjYW4KKyAqIGJlOgorICoKKyAqIC0gcmVzZXJ2ZWQgKHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUpOworICoKKyAqIC0gcG9zdGVkICh2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KTsKKyAqCisgKiAtIGNvbXBsZXRlZCAodnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQpOworICoKKyAqIC0gYW5kIHJlY3ljbGVkIGFnYWluICh2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKS4KKyAqCisgKiBGb3IgYWx0ZXJuYXRpdmUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIG1vcmUgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8KKyAqIHRoZSBkZXNpZ24gZG9jLgorICoKKyAqLwordm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywgdm9pZCAqdHhkbGgpCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqdHhkbF9wcml2OworCXUzMiBtYXhfZnJhZ3M7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJdHhkbF9wcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sCisJCQkoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCk7CisKKwltYXhfZnJhZ3MgPSBmaWZvLT5jb25maWctPm1heF9mcmFnczsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfZnJlZShjaGFubmVsLCB0eGRsaCk7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQgLSBBZGQgdGhlIG1hYyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIHRvIE1BQyBhZGRyZXNzIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAbWFjYWRkcjogTUFDIGFkZHJlc3MgdG8gYmUgYWRkZWQgZm9yIHRoaXMgdnBhdGggaW50byB0aGUgbGlzdAorICogQG1hY2FkZHJfbWFzazogTUFDIGFkZHJlc3MgbWFzayBmb3IgbWFjYWRkcgorICogQGR1cGxpY2F0ZV9tb2RlOiBEdXBsaWNhdGUgTUFDIGFkZHJlc3MgYWRkIG1vZGUuIFBsZWFzZSBzZWUKKyAqICAgICAgICAgICAgIGVudW0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGRfbW9kZXt9CisgKgorICogQWRkcyB0aGUgZ2l2ZW4gbWFjIGFkZHJlc3MgYW5kIG1hYyBhZGRyZXNzIG1hc2sgaW50byB0aGUgbGlzdCBmb3IgdGhpcworICogdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF9tYWNfYWRkcl9kZWxldGUsIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dLAorCWVudW0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGRfbW9kZSBkdXBsaWNhdGVfbW9kZSkKK3sKKwl1MzIgaTsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgeworCQlkYXRhMSA8PD0gODsKKwkJZGF0YTEgfD0gKHU4KW1hY2FkZHJbaV07CisKKwkJZGF0YTIgPDw9IDg7CisJCWRhdGEyIHw9ICh1OCltYWNhZGRyX21hc2tbaV07CisJfQorCisJc3dpdGNoIChkdXBsaWNhdGVfbW9kZSkgeworCWNhc2UgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9BRERfRFVQTElDQVRFOgorCQlpID0gMDsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0RJU0NBUkRfRFVQTElDQVRFOgorCQlpID0gMTsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX1ZQQVRIX01BQ19BRERSX1JFUExBQ0VfRFVQTElDQVRFOgorCQlpID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaSA9IDA7CisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0FERF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSwKKwkJCTAsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfREFfTUFDX0FERFIoZGF0YTEpLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01BU0soZGF0YTIpfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0RBX01BQ19BRERSX01PREUoaSkpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0IC0gR2V0IHRoZSBmaXJzdCBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIE1BQyBhZGRyZXNzIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAbWFjYWRkcjogRmlyc3QgTUFDIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMgdnBhdGggaW4gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqCisgKiBSZXR1cm5zIHRoZSBmaXJzdCBtYWMgYWRkcmVzcyBhbmQgbWFjIGFkZHJlc3MgbWFzayBpbiB0aGUgbGlzdCBmb3IgdGhpcworICogdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKQoreworCXUzMiBpOworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfRklSU1RfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEsCisJCQkwLCAmZGF0YTEsICZkYXRhMik7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWRhdGExID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9EQV9NQUNfQUREUihkYXRhMSk7CisKKwlkYXRhMiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfTUFTSyhkYXRhMik7CisKKwlmb3IgKGkgPSBFVEhfQUxFTjsgaSA+IDA7IGktLSkgeworCQltYWNhZGRyW2ktMV0gPSAodTgpKGRhdGExICYgMHhGRik7CisJCWRhdGExID4+PSA4OworCisJCW1hY2FkZHJfbWFza1tpLTFdID0gKHU4KShkYXRhMiAmIDB4RkYpOworCQlkYXRhMiA+Pj0gODsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dCAtIEdldCB0aGUgbmV4dCBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcworICogdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IE5leHQgTUFDIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMgdnBhdGggaW4gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqCisgKiBSZXR1cm5zIHRoZSBuZXh0IG1hYyBhZGRyZXNzIGFuZCBtYWMgYWRkcmVzcyBtYXNrIGluIHRoZSBsaXN0IGZvciB0aGlzCisgKiB2cGF0aC4KKyAqIHNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pCit7CisJdTMyIGk7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQodnAsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9ORVhUX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwgJmRhdGExLCAmZGF0YTIpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoZGF0YTEpOworCisJZGF0YTIgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soZGF0YTIpOworCisJZm9yIChpID0gRVRIX0FMRU47IGkgPiAwOyBpLS0pIHsKKwkJbWFjYWRkcltpLTFdID0gKHU4KShkYXRhMSAmIDB4RkYpOworCQlkYXRhMSA+Pj0gODsKKworCQltYWNhZGRyX21hc2tbaS0xXSA9ICh1OCkoZGF0YTIgJiAweEZGKTsKKwkJZGF0YTIgPj49IDg7CisJfQorCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tYWNfYWRkcl9kZWxldGUgLSBEZWxldGUgdGhlIG1hYyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIHRvIE1BQyBhZGRyZXNzIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAbWFjYWRkcjogTUFDIGFkZHJlc3MgdG8gYmUgYWRkZWQgZm9yIHRoaXMgdnBhdGggaW50byB0aGUgbGlzdAorICogQG1hY2FkZHJfbWFzazogTUFDIGFkZHJlc3MgbWFzayBmb3IgbWFjYWRkcgorICoKKyAqIERlbGV0ZSB0aGUgZ2l2ZW4gbWFjIGFkZHJlc3MgYW5kIG1hYyBhZGRyZXNzIG1hc2sgaW50byB0aGUgbGlzdCBmb3IgdGhpcworICogdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGQsIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXRfbmV4dAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tYWNfYWRkcl9kZWxldGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKQoreworCXUzMiBpOworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKSB7CisJCWRhdGExIDw8PSA4OworCQlkYXRhMSB8PSAodTgpbWFjYWRkcltpXTsKKworCQlkYXRhMiA8PD0gODsKKwkJZGF0YTIgfD0gKHU4KW1hY2FkZHJfbWFza1tpXTsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9ERUxFVEVfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEsCisJCQkwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RBX01BQ19BRERSKGRhdGExKSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NQVNLKGRhdGEyKSk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF92aWRfYWRkIC0gQWRkIHRoZSB2bGFuIGlkIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIHRvIHZsYW4gaWQgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEB2aWQ6IHZsYW4gaWQgdG8gYmUgYWRkZWQgZm9yIHRoaXMgdnBhdGggaW50byB0aGUgbGlzdAorICoKKyAqIEFkZHMgdGhlIGdpdmVuIHZsYW4gaWQgaW50byB0aGUgbGlzdCBmb3IgdGhpcyAgdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF92aWRfZGVsZXRlLCB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQgYW5kCisgKiB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXRfbmV4dAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfYWRkKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTY0IHZpZCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0FERF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQsCisJCQkwLCBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfVkxBTl9JRCh2aWQpLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQgLSBHZXQgdGhlIGZpcnN0IHZpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIHZsYW4gaWQgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEB2aWQ6IEJ1ZmZlciB0byByZXR1cm4gdmxhbiBpZAorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IHZsYW4gaWQgaW4gdGhlIGxpc3QgZm9yIHRoaXMgdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2dldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHU2NCAqdmlkKQoreworCXU2NCBkYXRhOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQodnAsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9GSVJTVF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQsCisJCQkwLCB2aWQsICZkYXRhKTsKKworCSp2aWQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1ZMQU5fSUQoKnZpZCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQgLSBHZXQgdGhlIG5leHQgdmlkIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIGZyb20gdmxhbiBpZCB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQHZpZDogQnVmZmVyIHRvIHJldHVybiB2bGFuIGlkCisgKgorICogUmV0dXJucyB0aGUgbmV4dCB2bGFuIGlkIGluIHRoZSBsaXN0IGZvciB0aGlzIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2dldAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZ2V0X25leHQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCB1NjQgKnZpZCkKK3sKKwl1NjQgZGF0YTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfTkVYVF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQsCisJCQkwLCB2aWQsICZkYXRhKTsKKworCSp2aWQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1ZMQU5fSUQoKnZpZCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF92aWRfZGVsZXRlIC0gRGVsZXRlIHRoZSB2bGFuIGlkIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIHRvIHZsYW4gaWQgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEB2aWQ6IHZsYW4gaWQgdG8gYmUgYWRkZWQgZm9yIHRoaXMgdnBhdGggaW50byB0aGUgbGlzdAorICoKKyAqIEFkZHMgdGhlIGdpdmVuIHZsYW4gaWQgaW50byB0aGUgbGlzdCBmb3IgdGhpcyAgdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF92aWRfYWRkLCB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQgYW5kCisgKiB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXRfbmV4dAorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZGVsZXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTY0IHZpZCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0RFTEVURV9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQsCisJCQkwLCBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfVkxBTl9JRCh2aWQpLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlIC0gRW5hYmxlIHByb21pc2N1b3VzIG1vZGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSBvZiBUaXRhbi1lIG9wZXJhdGlvbi4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoKS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8ICh2cC0+dnBhdGgtPnJpbmdoID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwkvKiBFbmFibGUgcHJvbWlzY291cyBtb2RlIGZvciBmdW5jdGlvbiAwIG9ubHkgKi8KKwlpZiAoISh2cGF0aC0+aGxkZXYtPmFjY2Vzc19yaWdodHMgJgorCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSkKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwlpZiAoISh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4pKSB7CisKKwkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19WQ0ZHMF9VQ0FTVF9BTExfQUREUl9FTiB8CisJCQkgVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTiB8CisJCQkgVlhHRV9IV19SWE1BQ19WQ0ZHMF9CQ0FTVF9FTiB8CisJCQkgVlhHRV9IV19SWE1BQ19WQ0ZHMF9BTExfVklEX0VOOworCisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUgLSBEaXNhYmxlIHByb21pc2N1b3VzIG1vZGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBEaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgb2YgVGl0YW4tZSBvcGVyYXRpb24uCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19lbmFibGUoKS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZGlzYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SWE1BQ19WQ0ZHMF9VQ0FTVF9BTExfQUREUl9FTikgeworCisJCXZhbDY0ICY9IH4oVlhHRV9IV19SWE1BQ19WQ0ZHMF9VQ0FTVF9BTExfQUREUl9FTiB8CisJCQkgICBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOIHwKKwkJCSAgIFZYR0VfSFdfUlhNQUNfVkNGRzBfQUxMX1ZJRF9FTik7CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlIC0gRW5hYmxlIGJyb2FkY2FzdAorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKgorICogRW5hYmxlIHJlY2VpdmluZyBicm9hZGNhc3RzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8ICh2cC0+dnBhdGgtPnJpbmdoID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwlpZiAoISh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfVkNGRzBfQkNBU1RfRU4pKSB7CisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfQkNBU1RfRU47CisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUgLSBFbmFibGUgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICoKKyAqIEVuYWJsZSBUaXRhbi1lIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKiBSZXR1cm5zOiBWWEdFX0hXX09LIG9uIHN1Y2Nlc3MuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8ICh2cC0+dnBhdGgtPnJpbmdoID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwlpZiAoISh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfVkNGRzBfTUNBU1RfQUxMX0FERFJfRU4pKSB7CisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfTUNBU1RfQUxMX0FERFJfRU47CisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlIC0gRGlzYWJsZSAgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICoKKyAqIERpc2FibGUgVGl0YW4tZSBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICogUmV0dXJuczogVlhHRV9IV19PSyAtIHN1Y2Nlc3MuCisgKiBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRSAtIEludmFsaWQgaGFuZGxlCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21jYXN0X2Rpc2FibGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8ICh2cC0+dnBhdGgtPnJpbmdoID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOKSB7CisJCXZhbDY0ICY9IH5WWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOOworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MgLSBQcm9jZXNzIEFsYXJtcy4KKyAqIEB2cGF0aDogVmlydHVhbCBQYXRoLgorICogQHNraXBfYWxhcm1zOiBEbyBub3QgY2xlYXIgdGhlIGFsYXJtcworICoKKyAqIFByb2Nlc3MgdnBhdGggYWxhcm1zLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJdTMyIHNraXBfYWxhcm1zKQoreworCXU2NCB2YWw2NDsKKwl1NjQgYWxhcm1fc3RhdHVzOworCXU2NCBwaWNfc3RhdHVzOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IE5VTEw7CisJZW51bSB2eGdlX2h3X2V2ZW50IGFsYXJtX2V2ZW50ID0gVlhHRV9IV19FVkVOVF9VTktOT1dOOworCXU2NCBtYXNrNjQ7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyAqc3dfc3RhdHM7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWlmICh2cGF0aCA9PSBOVUxMKSB7CisJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoVlhHRV9IV19FVkVOVF9VTktOT1dOLAorCQkJYWxhcm1fZXZlbnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlobGRldiA9IHZwYXRoLT5obGRldjsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCWFsYXJtX3N0YXR1cyA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbmVyYWxfaW50X3N0YXR1cyk7CisKKwlpZiAoYWxhcm1fc3RhdHVzID09IFZYR0VfSFdfQUxMX0ZPWEVTKSB7CisJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSwKKwkJCWFsYXJtX2V2ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJc3dfc3RhdHMgPSB2cGF0aC0+c3dfc3RhdHM7CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgfigKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVCB8CisJCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BDSV9JTlQgfAorCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19XUkRNQV9JTlQgfAorCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVCkpIHsKKwkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnVua25vd25fYWxhcm1zKys7CisKKwkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTChWWEdFX0hXX0VWRU5UX1VOS05PV04sCisJCQlhbGFybV9ldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhbGFybV9zdGF0dXMgJiBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19YTUFDX0lOVCkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+eGdtYWNfdnBfaW50X3N0YXR1cyk7CisKKwkJaWYgKHZhbDY0ICYKKwkJVlhHRV9IV19YR01BQ19WUF9JTlRfU1RBVFVTX0FTSUNfTlRXS19WUF9FUlJfQVNJQ19OVFdLX1ZQX0lOVCkgeworCisJCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfcmVnKTsKKworCQkJaWYgKCgodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFQpICYmCisJCQkgICAgKCEodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSykpKSB8fAorCQkJICAgICgodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFRfT0NDVVJSKQorCQkJCSYmICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0tfT0NDVVJSKQorCQkJKSkpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfZmF1bHQrKzsKKworCQkJCXdyaXRlcSgKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxULAorCQkJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCisJCQkJX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChobGRldik7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9MSU5LX0RPV04sIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCgodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSykgJiYKKwkJCSAgICAoISh2YWw2NCAmCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCkpKSB8fAorCQkJICAgICgodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PS19PQ0NVUlIpCisJCQkJJiYgKCEodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFRfT0NDVVJSKQorCQkJKSkpIHsKKworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5uZXR3b3JrX3N1c3RhaW5lZF9vaysrOworCisJCQkJd3JpdGVxKAorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9PSywKKwkJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9tYXNrKTsKKworCQkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfdXBfaW5kKGhsZGV2KTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0xJTktfVVAsIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX3JlZyk7CisKKwkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVELCBhbGFybV9ldmVudCk7CisKKwkJCWlmIChza2lwX2FsYXJtcykKKwkJCQlyZXR1cm4gVlhHRV9IV19PSzsKKwkJfQorCX0KKworCWlmIChhbGFybV9zdGF0dXMgJiBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UKSB7CisKKwkJcGljX3N0YXR1cyA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X3N0YXR1cyk7CisKKwkJaWYgKHBpY19zdGF0dXMgJgorCQkgICAgVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfR0VORVJBTF9FUlJPUlNfR0VORVJBTF9JTlQpIHsKKworCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19yZWcpOworCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfbWFzayk7CisKKwkJCWlmICgodmFsNjQgJgorCQkJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0lOSV9TRVJSX0RFVCkgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMuaW5pX3NlcnJfZGV0Kys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX1NFUlIsIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8wX09WUkZMT1cpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmRibGdlbl9maWZvMF9vdmVyZmxvdysrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwgYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfUElGX0NIQUlOX0VSUikgJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnN0YXRzYl9waWZfY2hhaW5fZXJyb3IrKzsKKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICBWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfRFJPUF9USU1FT1VUX1JFUSkgJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnN0YXRzYl9kcm9wX3RpbWVvdXQrKzsKKworCQkJaWYgKCh2YWw2NCAmCisJCQkJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfVEdUX0lMTEVHQUxfQUNDRVNTKSAmCisJCQkJfm1hc2s2NCkKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMudGFyZ2V0X2lsbGVnYWxfYWNjZXNzKys7CisKKwkJCWlmICghc2tpcF9hbGFybXMpIHsKKwkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19yZWcpOworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCQl9CisKKwkJaWYgKHBpY19zdGF0dXMgJgorCQkgICAgVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfS0RGQ0NUTF9FUlJPUlNfS0RGQ0NUTF9JTlQpIHsKKworCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19yZWcpOworCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgIFZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfT1ZSV1IpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSLAorCQkJCQlhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgIFZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfUE9JU09OKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX3BvaXNvbisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX0RNQV9FUlIpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfZG1hX2Vycm9yKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSLAorCQkJCQlhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICghc2tpcF9hbGFybXMpIHsKKwkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJCQkmdnBfcmVnLT5rZGZjY3RsX2Vycm9yc19yZWcpOworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCQl9CisKKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT53cmRtYV9hbGFybV9zdGF0dXMpOworCisJCWlmICh2YWw2NCAmIFZYR0VfSFdfV1JETUFfQUxBUk1fU1RBVFVTX1BSQ19BTEFSTV9QUkNfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2FsYXJtX3JlZyk7CisJCQltYXNrNjQgPSByZWFkcSgmdnBfcmVnLT5wcmNfYWxhcm1fbWFzayk7CisKKwkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JJTkdfQlVNUCkmCisJCQkJfm1hc2s2NCkKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3JpbmdfYnVtcHMrKzsKKworCQkJaWYgKCh2YWw2NCAmIFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfRVJSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5wcmNfcnhkY21fc2NfZXJyKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SWERDTV9TQ19BQk9SVCkKKwkJCQkmIH5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2Fib3J0Kys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQkJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIsCisJCQkJCQlhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1FVQU5UQV9TSVpFX0VSUikKKwkJCQkgJiB+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19xdWFudGFfc2l6ZV9lcnIrKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSLAorCQkJCQlhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICghc2tpcF9hbGFybXMpIHsKKwkJCQl3cml0ZXEoVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJCQkmdnBfcmVnLT5wcmNfYWxhcm1fcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQkJVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVELAorCQkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCQl9CisJfQorb3V0OgorCWhsZGV2LT5zdGF0cy5zd19kZXZfZXJyX3N0YXRzLnZwYXRoX2FsYXJtcysrOworCisJaWYgKChhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQpIHx8CisJCShhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX1VOS05PV04pKQorCQlyZXR1cm4gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKGhsZGV2LCB2cGF0aC0+dnBfaWQsIGFsYXJtX2V2ZW50KTsKKworCWlmIChhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX1NFUlIpCisJCXJldHVybiBWWEdFX0hXX0VSUl9DUklUSUNBTDsKKworCXJldHVybiAoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSkgPworCQlWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRSA6CisJCShhbGFybV9ldmVudCA9PSBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSKSA/IFZYR0VfSFdfRVJSX0ZJRk8gOgorCQlWWEdFX0hXX0VSUl9WUEFUSDsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcyAtIFByb2Nlc3MgQWxhcm1zLgorICogQHZwYXRoOiBWaXJ0dWFsIFBhdGguCisgKiBAc2tpcF9hbGFybXM6IERvIG5vdCBjbGVhciB0aGUgYWxhcm1zCisgKgorICogUHJvY2VzcyB2cGF0aCBhbGFybXMuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwkJCXUzMiBza2lwX2FsYXJtcykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKHZwLT52cGF0aCwgc2tpcF9hbGFybXMpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbXNpeF9zZXQgLSBBc3NvY2lhdGUgTVNJWCB2ZWN0b3JzIHdpdGggVElNIGludGVycnVwdHMgYW5kCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJtcworICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQHRpbV9tc2l4X2lkOiBNU0lYIHZlY3RvcnMgYXNzb2NpYXRlZCB3aXRoIFZYR0VfSFdfTUFYX0lOVFJfUEVSX1ZQIG51bWJlciBvZgorICogICAgICAgICAgICAgaW50ZXJydXB0cyhDYW4gYmUgcmVwZWF0ZWQpLiBJZiBmaWZvIG9yIHJpbmcgYXJlIG5vdCBlbmFibGVkCisgKiAgICAgICAgICAgICB0aGUgTVNJWCB2ZWN0b3IgZm9yIHRoYXQgc2hvdWxkIGJlIHNldCB0byAwCisgKiBAYWxhcm1fbXNpeF9pZDogTVNJWCB2ZWN0b3IgZm9yIGFsYXJtLgorICoKKyAqIFRoaXMgQVBJIHdpbGwgYXNzb2NpYXRlIGEgZ2l2ZW4gTVNJWCB2ZWN0b3IgbnVtYmVycyB3aXRoIHRoZSBmb3VyIFRJTQorICogaW50ZXJydXB0cyBhbmQgYWxhcm0gaW50ZXJydXB0LgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21zaXhfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgaW50ICp0aW1fbXNpeF9pZCwKKwkJICAgICAgIGludCBhbGFybV9tc2l4X2lkKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IHZwLT52cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwl1MzIgZmlyc3RfdnBfaWQgPSB2cGF0aC0+aGxkZXYtPmZpcnN0X3ZwX2lkOworCisJdmFsNjQgPSAgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDBfTVNJWF9GT1JfVFhUSSgKKwkJICAoZmlyc3RfdnBfaWQgKiA0KSArIHRpbV9tc2l4X2lkWzBdKSB8CisJCSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMV9NU0lYX0ZPUl9UWFRJKAorCQkgIChmaXJzdF92cF9pZCAqIDQpICsgdGltX21zaXhfaWRbMV0pIHwKKwkJIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAyX01TSVhfRk9SX1RYVEkoCisJCQkoZmlyc3RfdnBfaWQgKiA0KSArIHRpbV9tc2l4X2lkWzJdKTsKKworCQl2YWw2NCB8PSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQM19NU0lYX0ZPUl9UWFRJKAorCQkJKGZpcnN0X3ZwX2lkICogNCkgKyB0aW1fbXNpeF9pZFszXSk7CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPmludGVycnVwdF9jZmcwKTsKKworCXdyaXRlcShWWEdFX0hXX0lOVEVSUlVQVF9DRkcyX0FMQVJNX01BUF9UT19NU0coCisJCQkoZmlyc3RfdnBfaWQgKiA0KSArIGFsYXJtX21zaXhfaWQpLAorCQkJJnZwX3JlZy0+aW50ZXJydXB0X2NmZzIpOworCisJaWYgKHZwYXRoLT5obGRldi0+Y29uZmlnLmludHJfbW9kZSA9PQorCQkJCQlWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKAorCQkJCVZYR0VfSFdfT05FX1NIT1RfVkVDVDFfRU5fT05FX1NIT1RfVkVDVDFfRU4sCisJCQkJMCwgMzIpLCAmdnBfcmVnLT5vbmVfc2hvdF92ZWN0MV9lbik7CisJfQorCisJaWYgKHZwYXRoLT5obGRldi0+Y29uZmlnLmludHJfbW9kZSA9PQorCQlWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKAorCQkJCVZYR0VfSFdfT05FX1NIT1RfVkVDVDJfRU5fT05FX1NIT1RfVkVDVDJfRU4sCisJCQkJMCwgMzIpLCAmdnBfcmVnLT5vbmVfc2hvdF92ZWN0Ml9lbik7CisKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4oCisJCQkJVlhHRV9IV19PTkVfU0hPVF9WRUNUM19FTl9PTkVfU0hPVF9WRUNUM19FTiwKKwkJCQkwLCAzMiksICZ2cF9yZWctPm9uZV9zaG90X3ZlY3QzX2VuKTsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayAtIE1hc2sgTVNJWCBWZWN0b3IuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKiBAbXNpeF9pZDogIE1TSVggSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gbWFza3MgdGhlIG1zaXggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gbXNpeF9pZAorICoKKyAqIFJldHVybnM6IDAsCisgKiBPdGhlcndpc2UsIFZYR0VfSFdfRVJSX1dST05HX0lSUSBpZiB0aGUgbXNpeCBpbmRleCBpcyBvdXQgb2YgcmFuZ2UKKyAqIHN0YXR1cy4KKyAqIFNlZSBhbHNvOgorICovCit2b2lkCit2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayhzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCBtc2l4X2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMikgdnhnZV9iVkFMbih2eGdlX21CSVQoaGxkZXYtPmZpcnN0X3ZwX2lkICsKKwkJCShtc2l4X2lkICAvIDQpKSwgMCwgMzIpLAorCQkmaGxkZXYtPmNvbW1vbl9yZWctPnNldF9tc2l4X21hc2tfdmVjdFttc2l4X2lkICUgNF0pOworCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbXNpeF9jbGVhciAtIENsZWFyIE1TSVggVmVjdG9yLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQG1zaXhfaWQ6ICBNU0kgSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gY2xlYXJzIHRoZSBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIG1zaXhfaWQKKyAqCisgKiBSZXR1cm5zOiAwLAorICogT3RoZXJ3aXNlLCBWWEdFX0hXX0VSUl9XUk9OR19JUlEgaWYgdGhlIG1zaXggaW5kZXggaXMgb3V0IG9mIHJhbmdlCisgKiBzdGF0dXMuCisgKiBTZWUgYWxzbzoKKyAqLwordm9pZAordnhnZV9od192cGF0aF9tc2l4X2NsZWFyKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgaW50IG1zaXhfaWQpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gdnAtPnZwYXRoLT5obGRldjsKKwlpZiAoaGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0KKwkJCVZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QpIHsKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoaGxkZXYtPmZpcnN0X3ZwX2lkICsKKwkJCQkobXNpeF9pZC80KSksIDAsIDMyKSwKKwkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPgorCQkJCQljbHJfbXNpeF9vbmVfc2hvdF92ZWNbbXNpeF9pZCU0XSk7CisJfSBlbHNlIHsKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoaGxkZXYtPmZpcnN0X3ZwX2lkICsKKwkJCQkobXNpeF9pZC80KSksIDAsIDMyKSwKKwkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPgorCQkJCQljbGVhcl9tc2l4X21hc2tfdmVjdFttc2l4X2lkJTRdKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tc2l4X3VubWFzayAtIFVubWFzayB0aGUgTVNJWCBWZWN0b3IuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKiBAbXNpeF9pZDogIE1TSSBJRAorICoKKyAqIFRoZSBmdW5jdGlvbiB1bm1hc2tzIHRoZSBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIG1zaXhfaWQKKyAqCisgKiBSZXR1cm5zOiAwLAorICogT3RoZXJ3aXNlLCBWWEdFX0hXX0VSUl9XUk9OR19JUlEgaWYgdGhlIG1zaXggaW5kZXggaXMgb3V0IG9mIHJhbmdlCisgKiBzdGF0dXMuCisgKiBTZWUgYWxzbzoKKyAqLwordm9pZAordnhnZV9od192cGF0aF9tc2l4X3VubWFzayhzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCBtc2l4X2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoaGxkZXYtPmZpcnN0X3ZwX2lkICsKKwkJCShtc2l4X2lkLzQpKSwgMCwgMzIpLAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT5jbGVhcl9tc2l4X21hc2tfdmVjdFttc2l4X2lkJTRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfbWFza19hbGwgLSBNYXNrIGFsbCBNU0lYIHZlY3RvcnMgZm9yIHRoZSB2cGF0aC4KKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24gbWFza3MgYWxsIG1zaXggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gdnBhdGgKKyAqCisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKHZwLT52cGF0aC0+dnBfaWQpLCAwLCAzMiksCisJCSZ2cC0+dnBhdGgtPmhsZGV2LT5jb21tb25fcmVnLT5zZXRfbXNpeF9tYXNrX2FsbF92ZWN0KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeCAtIE1hc2sgVHggYW5kIFJ4IGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogTWFzayBUeCBhbmQgUnggdnBhdGggaW50ZXJydXB0cy4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9pbnRhX21hc2tfdHhfcngoKQorICovCit2b2lkIHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQJdGltX2ludF9tYXNrMFs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXUzMgl0aW1faW50X21hc2sxWzRdID0ge1swIC4uLjNdID0gMH07CisJdTY0CXZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisKKwlWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfU0VUKHRpbV9pbnRfbWFzazAsCisJCXRpbV9pbnRfbWFzazEsIHZwLT52cGF0aC0+dnBfaWQpOworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCisJaWYgKCh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkJKHRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQl3cml0ZXEoKHRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQl0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gfCB2YWw2NCksCisJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCX0KKworCXZhbDY0ID0gcmVhZGwoJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKworCWlmICgodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJCSh0aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gIT0gMCkpIHsKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCSh0aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJdGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdIHwgdmFsNjQpLAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9pbnRhX3VubWFza190eF9yeCAtIFVubWFzayBUeCBhbmQgUnggaW50ZXJydXB0cy4KKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqCisgKiBVbm1hc2sgVHggYW5kIFJ4IHZwYXRoIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KCkKKyAqLwordm9pZCB2eGdlX2h3X3ZwYXRoX2ludGFfdW5tYXNrX3R4X3J4KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQJdGltX2ludF9tYXNrMFs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXUzMgl0aW1faW50X21hc2sxWzRdID0ge1swIC4uLjNdID0gMH07CisJdTY0CXZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisKKwlWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfU0VUKHRpbV9pbnRfbWFzazAsCisJCXRpbV9pbnRfbWFzazEsIHZwLT52cGF0aC0+dnBfaWQpOworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCisJaWYgKCh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkgICAodGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdICE9IDApKSB7CisJCXdyaXRlcSgofih0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJdGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKSkgJiB2YWw2NCwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMCk7CisJfQorCisJaWYgKCh0aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkgICAodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdICE9IDApKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkofih0aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJICB0aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pKSAmIHZhbDY0LAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wb2xsX3J4IC0gUG9sbCBSeCBWaXJ0dWFsIFBhdGggZm9yIGNvbXBsZXRlZAorICogZGVzY3JpcHRvcnMgYW5kIHByb2Nlc3MgdGhlIHNhbWUuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKgorICogVGhlIGZ1bmN0aW9uCXBvbGxzIHRoZSBSeCBmb3IgdGhlIGNvbXBsZXRlZAlkZXNjcmlwdG9ycyBhbmQJY2FsbHMKKyAqIHRoZSBkcml2ZXIgdmlhIHN1cHBsaWVkIGNvbXBsZXRpb24JY2FsbGJhY2suCisgKgorICogUmV0dXJuczogVlhHRV9IV19PSywgaWYgdGhlIHBvbGxpbmcgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWwuCisgKiBWWEdFX0hXX0NPTVBMRVRJT05TX1JFTUFJTjogVGhlcmUgYXJlIHN0aWxsIG1vcmUgY29tcGxldGVkCisgKiBkZXNjcmlwdG9ycyBhdmFpbGFibGUgd2hpY2ggYXJlIHlldCB0byBiZSBwcm9jZXNzZWQuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeCgpCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3J4KHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZykKK3sKKwl1OCB0X2NvZGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXZvaWQgKmZpcnN0X3J4ZGg7CisJdTY0IHZhbDY0ID0gMDsKKwlpbnQgbmV3X2NvdW50ID0gMDsKKworCXJpbmctPmNtcGxfY250ID0gMDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQocmluZywgJmZpcnN0X3J4ZGgsICZ0X2NvZGUpOworCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykKKwkJcmluZy0+Y2FsbGJhY2socmluZywgZmlyc3RfcnhkaCwKKwkJCXRfY29kZSwgcmluZy0+Y2hhbm5lbC51c2VyZGF0YSk7CisKKwlpZiAocmluZy0+Y21wbF9jbnQgIT0gMCkgeworCQlyaW5nLT5kb29yYmVsbF9jbnQgKz0gcmluZy0+Y21wbF9jbnQ7CisJCWlmIChyaW5nLT5kb29yYmVsbF9jbnQgPj0gcmluZy0+cnhkc19saW1pdCkgeworCQkJLyoKKwkJCSAqIEVhY2ggUnhEIGlzIG9mIDQgcXdvcmRzLCB1cGRhdGUgdGhlIG51bWJlciBvZgorCQkJICogcXdvcmRzIHJlcGxlbmlzaGVkCisJCQkgKi8KKwkJCW5ld19jb3VudCA9IChyaW5nLT5kb29yYmVsbF9jbnQgKiA0KTsKKworCQkJLyogRm9yIGVhY2ggYmxvY2sgYWRkIDQgbW9yZSBxd29yZHMgKi8KKwkJCXJpbmctPnRvdGFsX2RiX2NudCArPSByaW5nLT5kb29yYmVsbF9jbnQ7CisJCQlpZiAocmluZy0+dG90YWxfZGJfY250ID49IHJpbmctPnJ4ZHNfcGVyX2Jsb2NrKSB7CisJCQkJbmV3X2NvdW50ICs9IDQ7CisJCQkJLyogUmVzZXQgdG90YWwgY291bnQgKi8KKwkJCQlyaW5nLT50b3RhbF9kYl9jbnQgJT0gcmluZy0+cnhkc19wZXJfYmxvY2s7CisJCQl9CisJCQl3cml0ZXEoVlhHRV9IV19QUkNfUlhEX0RPT1JCRUxMX05FV19RV19DTlQobmV3X2NvdW50KSwKKwkJCQkmcmluZy0+dnBfcmVnLT5wcmNfcnhkX2Rvb3JiZWxsKTsKKwkJCXZhbDY0ID0KKwkJCSAgcmVhZGwoJnJpbmctPmNvbW1vbl9yZWctPnRpdGFuX2dlbmVyYWxfaW50X3N0YXR1cyk7CisJCQlyaW5nLT5kb29yYmVsbF9jbnQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX3BvbGxfdHggLSBQb2xsIFR4IGZvciBjb21wbGV0ZWQgZGVzY3JpcHRvcnMgYW5kIHByb2Nlc3MKKyAqIHRoZSBzYW1lLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICoKKyAqIFRoZSBmdW5jdGlvbglwb2xscyB0aGUgVHggZm9yIHRoZSBjb21wbGV0ZWQJZGVzY3JpcHRvcnMgYW5kCWNhbGxzCisgKiB0aGUgZHJpdmVyIHZpYSBzdXBwbGllZCBjb21wbGV0aW9uIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0ssIGlmIHRoZSBwb2xsaW5nIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsLgorICogVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU46IFRoZXJlIGFyZSBzdGlsbCBtb3JlIGNvbXBsZXRlZAorICogZGVzY3JpcHRvcnMgYXZhaWxhYmxlIHdoaWNoIGFyZSB5ZXQgdG8gYmUgcHJvY2Vzc2VkLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoKS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCQkJCQl2b2lkICoqc2tiX3B0cikKK3sKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGU7CisJdm9pZCAqZmlyc3RfdHhkbGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKGZpZm8sCisJCQkJJmZpcnN0X3R4ZGxoLCAmdF9jb2RlKTsKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCisJCWlmIChmaWZvLT5jYWxsYmFjayhmaWZvLCBmaXJzdF90eGRsaCwKKwkJCXRfY29kZSwgY2hhbm5lbC0+dXNlcmRhdGEsIHNrYl9wdHIpICE9IFZYR0VfSFdfT0spCisJCQlzdGF0dXMgPSBWWEdFX0hXX0NPTVBMRVRJT05TX1JFTUFJTjsKKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTY3YTExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApAQCAtMCwwICsxLDI0MDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLXRyYWZmaWMuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVlhHRV9UUkFGRklDX0gKKyNkZWZpbmUgVlhHRV9UUkFGRklDX0gKKworI2luY2x1ZGUgInZ4Z2UtcmVnLmgiCisjaW5jbHVkZSAidnhnZS12ZXJzaW9uLmgiCisKKyNkZWZpbmUgVlhHRV9IV19EVFJfTUFYX1RfQ09ERQkJMTYKKyNkZWZpbmUgVlhHRV9IV19BTExfRk9YRVMJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZSBWWEdFX0hXX0lOVFJfTUFTS19BTEwJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZQlWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTCTE3CisKKyNkZWZpbmUgVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lECTIKKworI2RlZmluZSBWWEdFX0hXX0RFRkFVTFRfMzIJCTB4ZmZmZmZmZmYKKy8qIGZyYW1lcyBzaXplcyAqLworI2RlZmluZSBWWEdFX0hXX0hFQURFUl84MDJfMl9TSVpFCTMKKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfU05BUF9TSVpFCTUKKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfVkxBTl9TSVpFCTQKKyNkZWZpbmUgVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFIFwKKwkJCShFVEhfSExFTiArIFwKKwkJCVZYR0VfSFdfSEVBREVSXzgwMl8yX1NJWkUgKyBcCisJCQlWWEdFX0hXX0hFQURFUl9WTEFOX1NJWkUgKyBcCisJCQlWWEdFX0hXX0hFQURFUl9TTkFQX1NJWkUpCisKKyNkZWZpbmUgVlhHRV9IV19UQ1BJUF9IRUFERVJfTUFYX1NJWkUJKDY0ICsgNjQpCisKKy8qIDMyYml0IGFsaWdubWVudHMgKi8KKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfRVRIRVJORVRfSUlfODAyXzNfQUxJR04JCTIKKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfODAyXzJfU05BUF9BTElHTgkJCTIKKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfODAyXzJfQUxJR04JCQkzCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX1NOQVBfQUxJR04JCQkxCisKKyNkZWZpbmUgVlhHRV9IV19MM19DS1NVTV9PSwkJCQkweEZGRkYKKyNkZWZpbmUgVlhHRV9IV19MNF9DS1NVTV9PSwkJCQkweEZGRkYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlOworc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGU7CitzdHJ1Y3QgdnhnZV9od192cF9jb25maWc7CitzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoOworc3RydWN0IF9fdnhnZV9od19jaGFubmVsOworc3RydWN0IF9fdnhnZV9od19maWZvOworc3RydWN0IF9fdnhnZV9od19yaW5nOworc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyOworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbDsKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKKy8qVlhHRV9IV19TVEFUVVNfSCovCisKKyNkZWZpbmUgVlhHRV9IV19FVkVOVF9CQVNFCQkJMAorI2RlZmluZSBWWEdFX0xMX0VWRU5UX0JBU0UJCQkxMDAKKworLyoqCisgKiBlbnVtIHZ4Z2VfaHdfZXZlbnQtIEVudW1lcmF0ZXMgc2xvdy1wYXRoIEhXIGV2ZW50cy4KKyAqIEBWWEdFX0hXX0VWRU5UX1VOS05PV046IFVua25vd24gKGFuZCBpbnZhbGlkKSBldmVudC4KKyAqIEBWWEdFX0hXX0VWRU5UX1NFUlI6IFNlcmlvdXMgdnBhdGggaGFyZHdhcmUgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9FQ0NFUlI6IHZwYXRoIEVDQyBlcnJvciBldmVudC4KKyAqIEBWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUjogRXJyb3IgbG9jYWwgdG8gdGhlIHJlc3BlY3RpdmUgdnBhdGgKKyAqIEBWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSOiBGSUZPIERvb3JiZWxsIGZpZm8gZXJyb3IuCisgKiBAVlhHRV9IV19FVkVOVF9TUlBDSU1fU0VSUjogc3JwY2ltIGhhcmR3YXJlIGVycm9yIGV2ZW50LgorICogQFZYR0VfSFdfRVZFTlRfTVJQQ0lNX1NFUlI6IG1ycGNpbSBoYXJkd2FyZSBlcnJvciBldmVudC4KKyAqIEBWWEdFX0hXX0VWRU5UX01SUENJTV9FQ0NFUlI6IG1ycGNpbSBlY2MgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVDogUHJpdmlsZWdlZCBlbnRpdHkgaXMgc3RhcnRpbmcgZGV2aWNlIHJlc2V0CisgKiBAVlhHRV9IV19FVkVOVF9SRVNFVF9DT01QTEVURTogRGV2aWNlIHJlc2V0IGhhcyBiZWVuIGNvbXBsZXRlZAorICogQFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkU6IFNsb3QtZnJlZXplIGV2ZW50LiBEcml2ZXIgdHJpZXMgdG8gZGlzdGluZ3Vpc2gKKyAqIHNsb3QtZnJlZXplIGZyb20gdGhlIHJlc3QgY3JpdGljYWwgZXZlbnRzIChlLmcuIEVDQykgd2hlbiBpdCBpcworICogaW1wb3NzaWJsZSB0byBQSU8gcmVhZCAidGhyb3VnaCIgdGhlIGJ1cywgaS5lLiB3aGVuIGdldHRpbmcgYWxsLWZveGVzLgorICoKKyAqIGVudW0gdnhnZV9od19ldmVudCBlbnVtZXJhdGVzIHNsb3ctcGF0aCBIVyBldmVudGlzLgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30sIHZ4Z2VfdWxkX2xpbmtfdXBfZnt9LAorICogdnhnZV91bGRfbGlua19kb3duX2Z7fS4KKyAqLworZW51bSB2eGdlX2h3X2V2ZW50IHsKKwlWWEdFX0hXX0VWRU5UX1VOS05PV04JCT0gMCwKKwkvKiBIVyBldmVudHMgKi8KKwlWWEdFX0hXX0VWRU5UX1JFU0VUX1NUQVJUCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMSwKKwlWWEdFX0hXX0VWRU5UX1JFU0VUX0NPTVBMRVRFCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMiwKKwlWWEdFX0hXX0VWRU5UX0xJTktfRE9XTgkJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAzLAorCVZYR0VfSFdfRVZFTlRfTElOS19VUAkJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyA0LAorCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRAk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDUsCisJVlhHRV9IV19FVkVOVF9FQ0NFUlIJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgNiwKKwlWWEdFX0hXX0VWRU5UX01SUENJTV9FQ0NFUlIJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyA3LAorCVZYR0VfSFdfRVZFTlRfRklGT19FUlIJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgOCwKKwlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUgkJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyA5LAorCVZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMTAsCisJVlhHRV9IV19FVkVOVF9TRVJSCQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDExLAorCVZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlIJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAxMiwKKwlWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMTMsCisJVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDE0LAorfTsKKworI2RlZmluZSBWWEdFX0hXX1NFVF9MRVZFTChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisKKy8qCisgKiBzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAtIFJlcHJlc2VudHMgRE1BIG9iamVjdHMgcGFzc2VkIHRvIHRoZQorCWNhbGxlci4KKyAqLworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgeworCWRtYV9hZGRyX3QJCQlhZGRyOworCXN0cnVjdCBwY2lfZGV2ICpoYW5kbGU7CisJc3RydWN0IHBjaV9kZXYgKmFjY19oYW5kbGU7Cit9OworCisvKgorICogdnhnZV9od19tZW1wb29sX2l0ZW1fZiAgLSBNZW1wb29sIGl0ZW0gYWxsb2MvZnJlZSBjYWxsYmFjaworICogQG1lbXBvb2xoOiBNZW1vcnkgcG9vbCBoYW5kbGUuCisgKiBAbWVtYmxvY2s6IEFkZHJlc3Mgb2YgbWVtb3J5IGJsb2NrCisgKiBAbWVtYmxvY2tfaW5kZXg6IEluZGV4IG9mIG1lbW9yeSBibG9jaworICogQGl0ZW06IEl0ZW0gdGhhdCBnZXRzIGFsbG9jYXRlZCBvciBmcmVlZC4KKyAqIEBpbmRleDogSXRlbSdzIGluZGV4IGluIHRoZSBtZW1vcnkgcG9vbC4KKyAqIEBpc19sYXN0OiBUcnVlLCBpZiB0aGlzIGl0ZW0gaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBwb29sOyBmYWxzZSAtIG90aGVyd2lzZS4KKyAqIHVzZXJkYXRhOiBQZXItcG9vbCB1c2VyIGNvbnRleHQuCisgKgorICogTWVtb3J5IHBvb2wgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY2FsbGJhY2suCisgKi8KKworLyoKKyAqIHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgLSBNZW1vcnkgcG9vbC4KKyAqLworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCB7CisKKwl2b2lkICgqaXRlbV9mdW5jX2FsbG9jKSgKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwl1MzIJCQltZW1ibG9ja19pbmRleCwKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYQkqZG1hX29iamVjdCwKKwl1MzIJCQlpbmRleCwKKwl1MzIJCQlpc19sYXN0KTsKKworCXZvaWQJCSp1c2VyZGF0YTsKKwl2b2lkCQkqKm1lbWJsb2Nrc19hcnI7CisJdm9pZAkJKiptZW1ibG9ja3NfcHJpdl9hcnI7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEJKm1lbWJsb2Nrc19kbWFfYXJyOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoOworCXUzMgkJCW1lbWJsb2NrX3NpemU7CisJdTMyCQkJbWVtYmxvY2tzX21heDsKKwl1MzIJCQltZW1ibG9ja3NfYWxsb2NhdGVkOworCXUzMgkJCWl0ZW1fc2l6ZTsKKwl1MzIJCQlpdGVtc19tYXg7CisJdTMyCQkJaXRlbXNfaW5pdGlhbDsKKwl1MzIJCQlpdGVtc19jdXJyZW50OworCXUzMgkJCWl0ZW1zX3Blcl9tZW1ibG9jazsKKwl2b2lkCQkqKml0ZW1zX2FycjsKKwl1MzIJCQlpdGVtc19wcml2X3NpemU7Cit9OworCisjZGVmaW5lCVZYR0VfSFdfTUFYX0lOVFJfUEVSX1ZQCQkJCTQKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JTlRSX1RYCQkJCTAKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JTlRSX1JYCQkJCTEKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JTlRSX0VJTlRBCQkJMgorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUAkJCQkzCisKKyNkZWZpbmUgVlhHRV9IV19CTE9DS19TSVpFCQkJCTQwOTYKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcgLSBUaXRhbiBUaW0gaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uCisgKiBAaW50cl9lbmFibGU6IFNldCB0byAxLCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAqIEBidGltZXJfdmFsOiBCb3VuZGFyeSBUaW1lciBJbml0aWFsaXphdGlvbiB2YWx1ZSBpbiB1bml0cyBvZiAyNzIgbnMuCisgKiBAdGltZXJfYWNfZW46IFRpbWVyIEF1dG9tYXRpYyBDYW5jZWwuIDEgOiBBdXRvbWF0aWMgQ2FuY2VsaW5nIEVuYWJsZTogd2hlbgorICogICAgICAgICAgICAgYXNzZXJ0ZWQsIG90aGVyIGludGVycnVwdC1nZW5lcmF0aW5nIGVudGl0aWVzIHdpbGwgY2FuY2VsIHRoZQorICogICAgICAgICAgICAgc2NoZWR1bGVkIHRpbWVyIGludGVycnVwdC4KKyAqIEB0aW1lcl9jaV9lbjogVGltZXIgQ29udGludW91cyBJbnRlcnJ1cHQuIDEgOiBDb250aW51b3VzIEludGVycnVwdGluZyBFbmFibGU6CisgKiAgICAgICAgICAgICBXaGVuIGFzc2VydGVkLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZSBnZW5lcmF0ZWQgZXZlcnkgdGltZSB0aGUKKyAqICAgICAgICAgICAgIGJvdW5kYXJ5IHRpbWVyIGV4cGlyZXMsIGV2ZW4gaWYgbm8gdHJhZmZpYyBoYXMgYmVlbiB0cmFuc21pdHRlZAorICogICAgICAgICAgICAgb24gdGhpcyBpbnRlcnJ1cHQuCisgKiBAdGltZXJfcmlfZW46IFRpbWVyIENvbnNlY3V0aXZlIChSZS0pIEludGVycnVwdCAxIDogQ29uc2VjdXRpdmUKKyAqICAgICAgICAgICAgIChSZS0pIEludGVycnVwdCBFbmFibGU6IFdoZW4gYXNzZXJ0ZWQsIGFuIGludGVycnVwdCB3aWxsIGJlCisgKiAgICAgICAgICAgICBnZW5lcmF0ZWQgdGhlIG5leHQgdGltZSB0aGUgdGltZXIgZXhwaXJlcywgZXZlbiBpZiBubyB0cmFmZmljIGhhcworICogICAgICAgICAgICAgYmVlbiB0cmFuc21pdHRlZCBvbiB0aGlzIGludGVycnVwdC4gKFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBvbmNlCisgKiAgICAgICAgICAgICBlYWNoIHRpbWUgdGhhdCB0aGlzIHZhbHVlIGlzIHdyaXR0ZW4gdG8gdGhlIFRJTS4pIFRoaXMgYml0IGlzCisgKiAgICAgICAgICAgICBjbGVhcmVkIGJ5IEgvVyBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50LXRpbWVyLWludGVydmFsIHdoZW4KKyAqICAgICAgICAgICAgIHRoZSBpbnRlcnJ1cHQgaXMgdHJpZ2dlcmVkLgorICogQHJ0aW1lcl92YWw6IFJlc3RyaWN0aW9uIFRpbWVyIEluaXRpYWxpemF0aW9uIHZhbHVlIGluIHVuaXRzIG9mIDI3MiBucy4KKyAqIEB1dGlsX3NlbDogVXRpbGl6YXRpb24gU2VsZWN0b3IuIFNlbGVjdHMgd2hpY2ggb2YgdGhlIHdvcmtsb2FkIGFwcHJveGltYXRpb25zCisgKiAgICAgICAgICAgICB0byB1c2UgKGUuZy4gbGVnYWN5IFR4IHV0aWxpemF0aW9uLCBUeC9SeCB1dGlsaXphdGlvbiwgaG9zdAorICogICAgICAgICAgICAgc3BlY2lmaWVkIHV0aWxpemF0aW9uIGV0Yy4pLCBzZWxlY3RzIG9uZSBvZgorICogICAgICAgICAgICAgdGhlIDE3IGhvc3QgY29uZmlndXJlZCB2YWx1ZXMuCisgKiAgICAgICAgICAgICAwLVZpcnR1YWwgUGF0aCAwCisgKiAgICAgICAgICAgICAxLVZpcnR1YWwgUGF0aCAxCisgKiAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgIDE2LVZpcnR1YWwgUGF0aCAxNworICogICAgICAgICAgICAgMTctTGVnYWN5IFR4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IFRQQQorICogICAgICAgICAgICAgMTgtTGVnYWN5IFJ4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IEZBVQorICogICAgICAgICAgICAgMTktQXZlcmFnZSBvZiBsZWdhY3kgUnggYW5kIFR4IHV0aWxpemF0aW9uIGNhbGN1bGF0ZWQgZnJvbSBsaW5rCisgKiAgICAgICAgICAgICAgICB1dGlsaXphdGlvbiB2YWx1ZXMuCisgKiAgICAgICAgICAgICAyMC0zMS1JbnZhbGlkIGNvbmZpZ3VyYXRpb25zCisgKiAgICAgICAgICAgICAzMi1Ib3N0IHV0aWxpemF0aW9uIGZvciBWaXJ0dWFsIFBhdGggMAorICogICAgICAgICAgICAgMzMtSG9zdCB1dGlsaXphdGlvbiBmb3IgVmlydHVhbCBQYXRoIDEKKyAqICAgICAgICAgICAgIC4uLgorICogICAgICAgICAgICAgNDgtSG9zdCB1dGlsaXphdGlvbiBmb3IgVmlydHVhbCBQYXRoIDE3CisgKiAgICAgICAgICAgICA0OS1MZWdhY3kgVHggbmV0d29yayB1dGlsaXphdGlvbiwgcHJvdmlkZWQgYnkgVFBBCisgKiAgICAgICAgICAgICA1MC1MZWdhY3kgUnggbmV0d29yayB1dGlsaXphdGlvbiwgcHJvdmlkZWQgYnkgRkFVCisgKiAgICAgICAgICAgICA1MS1BdmVyYWdlIG9mIGxlZ2FjeSBSeCBhbmQgVHggdXRpbGl6YXRpb24gY2FsY3VsYXRlZCBmcm9tCisgKiAgICAgICAgICAgICAgICBsaW5rIHV0aWxpemF0aW9uIHZhbHVlcy4KKyAqICAgICAgICAgICAgIDUyLTYzLUludmFsaWQgY29uZmlndXJhdGlvbnMKKyAqIEBsdGltZXJfdmFsOiBMYXRlbmN5IFRpbWVyIEluaXRpYWxpemF0aW9uIFZhbHVlIGluIHVuaXRzIG9mIDI3MiBucy4KKyAqIEB0eGRfY250X2VuOiBUeEQgUmV0dXJuIEV2ZW50IENvdW50IEVuYWJsZS4gVGhpcyBjb25maWd1cmF0aW9uIGJpdCB3aGVuIHNldAorICogICAgICAgICAgICAgdG8gMSBlbmFibGVzIGNvdW50aW5nIG9mIFR4RDAgcmV0dXJucyAoc2lnbmFsbGVkIGJ5IFBDQydzKSwKKyAqICAgICAgICAgICAgIHRvd2FyZHMgdXRpbGl6YXRpb24gZXZlbnQgY291bnQgdmFsdWVzLgorICogQHVyYW5nZV9hOiBEZWZpbmVzIHRoZSB1cHBlciBsaW1pdCAoaW4gcGVyY2VudCkgZm9yIHRoaXMgdXRpbGl6YXRpb24gcmFuZ2UKKyAqICAgICAgICAgICAgIHRvIGJlIGFjdGl2ZS4gVGhpcyByYW5nZSBpcyBjb25zaWRlcmVkIGFjdGl2ZQorICogICAgICAgICAgICAgaWYgMCA9IFVUSUwgPSBVUk5HX0EKKyAqICAgICAgICAgICAgIGFuZCB0aGUgVUVDX0EgZmllbGQgKGJlbG93KSBpcyBub24temVyby4KKyAqIEB1ZWNfYTogVXRpbGl6YXRpb24gRXZlbnQgQ291bnQgQS4gSWYgdGhpcyByYW5nZSBpcyBhY3RpdmUsIHRoZSBhZGFwdGVyIHdpbGwKKyAqICAgICAgICAgICAgIHdhaXQgdW50aWwgVUVDX0EgZXZlbnRzIGhhdmUgb2NjdXJyZWQgb24gdGhlIGludGVycnVwdCBiZWZvcmUKKyAqICAgICAgICAgICAgIGdlbmVyYXRpbmcgYW4gaW50ZXJydXB0LgorICogQHVyYW5nZV9iOiBMaW5rIHV0aWxpemF0aW9uIHJhbmdlIEIuCisgKiBAdWVjX2I6IFV0aWxpemF0aW9uIEV2ZW50IENvdW50IEIuCisgKiBAdXJhbmdlX2M6IExpbmsgdXRpbGl6YXRpb24gcmFuZ2UgQy4KKyAqIEB1ZWNfYzogVXRpbGl6YXRpb24gRXZlbnQgQ291bnQgQy4KKyAqIEB1cmFuZ2VfZDogTGluayB1dGlsaXphdGlvbiByYW5nZSBELgorICogQHVlY19kOiBVdGlsaXphdGlvbiBFdmVudCBDb3VudCBELgorICogVHJhZmZpYyBJbnRlcnJ1cHQgQ29udHJvbGxlciBNb2R1bGUgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZyB7CisKKwl1MzIJCQkJaW50cl9lbmFibGU7CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVFJfRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UUl9ESVNBQkxFCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UUl9ERUZBVUxUCQkJCTAKKworCXUzMgkJCQlidGltZXJfdmFsOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fQlRJTUVSX1ZBTAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9CVElNRVJfVkFMCQkJCTY3MTA4ODY0CisjZGVmaW5lIFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQJCQkJMHhmZmZmZmZmZgorCisJdTMyCQkJCXRpbWVyX2FjX2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9BQ19FTkFCTEUJCQkJMQorI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9BQ19ESVNBQkxFCQkJCTAKKworCXUzMgkJCQl0aW1lcl9jaV9lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQ0lfRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQ0lfRElTQUJMRQkJCQkwCisKKwl1MzIJCQkJdGltZXJfcmlfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX1JJX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX1JJX0RJU0FCTEUJCQkJMAorCisJdTMyCQkJCXJ0aW1lcl92YWw7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9SVElNRVJfVkFMCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1JUSU1FUl9WQUwJCQkJNjcxMDg4NjQKKworCXUzMgkJCQl1dGlsX3NlbDsKKyNkZWZpbmUgVlhHRV9IV19USU1fVVRJTF9TRUxfTEVHQUNZX1RYX05FVF9VVElMCQkxNworI2RlZmluZSBWWEdFX0hXX1RJTV9VVElMX1NFTF9MRUdBQ1lfUlhfTkVUX1VUSUwJCTE4CisjZGVmaW5lIFZYR0VfSFdfVElNX1VUSUxfU0VMX0xFR0FDWV9UWF9SWF9BVkVfTkVUX1VUSUwJCTE5CisjZGVmaW5lIFZYR0VfSFdfVElNX1VUSUxfU0VMX1BFUl9WUEFUSAkJCQk2MworCisJdTMyCQkJCWx0aW1lcl92YWw7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9MVElNRVJfVkFMCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX0xUSU1FUl9WQUwJCQkJNjcxMDg4NjQKKworCS8qIExpbmUgdXRpbGl6YXRpb24gaW50ZXJydXB0cyAqLworCXUzMgkJCQl1cmFuZ2VfYTsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VSQU5HRV9BCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VSQU5HRV9BCQkJCTEwMAorCisJdTMyCQkJCXVlY19hOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVUVDX0EJCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VFQ19BCQkJCQk2NTUzNQorCisJdTMyCQkJCXVyYW5nZV9iOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVVJBTkdFX0IJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVVJBTkdFX0IJCQkJMTAwCisKKwl1MzIJCQkJdWVjX2I7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VRUNfQgkJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVUVDX0IJCQkJCTY1NTM1CisKKwl1MzIJCQkJdXJhbmdlX2M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VUkFOR0VfQwkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VUkFOR0VfQwkJCQkxMDAKKworCXUzMgkJCQl1ZWNfYzsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VFQ19DCQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VRUNfQwkJCQkJNjU1MzUKKworCXUzMgkJCQl1ZWNfZDsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VFQ19ECQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VRUNfRAkJCQkJNjU1MzUKK307CisKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19PUF9SRUFECQkJCQkwCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfT1BfQ0xFQVJfU1RBVAkJCQkxCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfT1BfQ0xFQVJfQUxMX1ZQQVRIX1NUQVRTCQkJMgorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9TVEFUU19PRl9MT0MJCQkyCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfT1BfQ0xFQVJfQUxMX1NUQVRTCQkJMworCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfTE9DX0FHR1IJCQkJCTE3CisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfQUdHUm5fT0ZGU0VUCQkJCTB4MDA3MjAKKworI2RlZmluZSBWWEdFX0hXX1NUQVRTX1ZQQVRIX1RYX09GRlNFVAkJCQkweDAKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19WUEFUSF9SWF9PRkZTRVQJCQkJMHgwMDA5MAorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfVlBBVEhfUFJPR19FVkVOVF9WTlVNMF9PRkZTRVQJICAgKDB4MDAxZDAgPj4gMykKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMChiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTEoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yX09GRlNFVAkgICAoMHgwMDFkOCA+PiAzKQorI2RlZmluZQlWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0yKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMyhiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgLSBQZXItQWdncmVnYXRvciBYTUFDIFN0YXRpc3RpY3MKKyAqCisgKiBAdHhfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgdHJhbnNtaXR0ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIG9uIGFsbAorICogICAgICAgICAgICAgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIExBQ1BEVXMgb3IgTWFya2VyIFBEVXMuCisgKiAgICAgICAgICAgICBIb3dldmVyLCBkb2VzIGluY2x1ZGUgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGUgRGlzdHJpYnV0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEB0eF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2YgZnJhbWVzIHRyYW5zbWl0dGVkCisgKiAgICAgICAgICAgICBvbiB0aGlzIEFnZ3JlZ2F0b3Igb24gYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZQorICogICAgICAgICAgICAgb2N0ZXRzIG9mIExBQ1BEVXMgb3IgTWFya2VyIFBEVXMuIEhvd2V2ZXIsIGRvZXMgaW5jbHVkZSBvY3RldHMgb2YKKyAqICAgICAgICAgICAgIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbiBmdW5jdGlvbi4KKyAqIEB0eF9tY2FzdF9mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyB0cmFuc21pdHRlZCAodG8gYSBncm91cCBkZXN0aW5hdGlvbgorICogICAgICAgICAgICAgYWRkcmVzcyBvdGhlciB0aGFuIHRoZSBicm9hZGNhc3QgYWRkcmVzcykgb24gdGhpcyBBZ2dyZWdhdG9yIG9uCisgKiAgICAgICAgICAgICBhbGwgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIExBQ1BEVXMgb3IgTWFya2VyCisgKiAgICAgICAgICAgICBQRFVzLiBIb3dldmVyLCBkb2VzIGluY2x1ZGUgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGUgRGlzdHJpYnV0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEB0eF9iY2FzdF9mcm1zOiBDb3VudCBvZiBicm9hZGNhc3QgZGF0YSBmcmFtZXMgdHJhbnNtaXR0ZWQgb24gdGhpcyBBZ2dyZWdhdG9yCisgKiAgICAgICAgICAgICBvbiBhbGwgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIExBQ1BEVXMgb3IgTWFya2VyCisgKiAgICAgICAgICAgICBQRFVzLiBIb3dldmVyLCBkb2VzIGluY2x1ZGUgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGUgRGlzdHJpYnV0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEB0eF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgdG8gYmUgdHJhbnNtaXR0ZWQgb24gdGhpcyBBZ2dyZWdhdG9yCisgKiAgICAgICAgICAgICB0aGF0IGFyZSBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbiBmdW5jdGlvbi4gVGhpcyBvY2N1cnMgd2hlbgorICogICAgICAgICAgICAgY29udmVyc2F0aW9uIGFyZSBhbGxvY2F0ZWQgdG8gZGlmZmVyZW50IHBvcnRzIGFuZCBoYXZlIHRvIGJlCisgKiAgICAgICAgICAgICBmbHVzaGVkIG9uIG9sZCBwb3J0cworICogQHR4X2Vycm9yZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgdHJhbnNtaXR0ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIHRoYXQKKyAqICAgICAgICAgICAgIGV4cGVyaWVuY2UgdHJhbnNtaXNzaW9uIGVycm9ycyBvbiBpdHMgQWdncmVnYXRpb24gcG9ydHMuCisgKiBAcnhfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIG9uIGFsbCBpdHMKKyAqICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIExBQ1BEVXMgb3IgTWFya2VyIFBEVXMuCisgKiAgICAgICAgICAgICBBbHNvLCBkb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIENvbGxlY3Rpb24KKyAqICAgICAgICAgICAgIGZ1bmN0aW9uLgorICogQHJ4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcworICogICAgICAgICAgICAgQWdncmVnYXRvciBvbiBhbGwgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIG9jdGV0cworICogICAgICAgICAgICAgb2YgTEFDUERVcyBvciBNYXJrZXIgUERVcy4gQWxzbywgZG9lcyBub3QgaW5jbHVkZQorICogICAgICAgICAgICAgb2N0ZXRzIG9mIGZyYW1lcworICogICAgICAgICAgICAgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uIGZ1bmN0aW9uLgorICogQHJ4X21jYXN0X2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHJlY2VpdmVkIChmcm9tIGEgZ3JvdXAgZGVzdGluYXRpb24KKyAqICAgICAgICAgICAgIGFkZHJlc3Mgb3RoZXIgdGhhbiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MpIG9uIHRoaXMgQWdncmVnYXRvciBvbgorICogICAgICAgICAgICAgYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gQWxzbywgZG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEByeF9iY2FzdF9mcm1zOiBDb3VudCBvZiBicm9hZGNhc3QgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIG9uCisgKiAgICAgICAgICAgICBhbGwgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLiBEb2VzIG5vdCBpbmNsdWRlIExBQ1BEVXMgb3IgTWFya2VyCisgKiAgICAgICAgICAgICBQRFVzLiBBbHNvLCBkb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIENvbGxlY3Rpb24KKyAqICAgICAgICAgICAgIGZ1bmN0aW9uLgorICogQHJ4X2Rpc2NhcmRlZF9mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIEFnZ3JlZ2F0b3IgdGhhdCBhcmUKKyAqICAgICAgICAgICAgIGRpc2NhcmRlZCBieSB0aGUgQ29sbGVjdGlvbiBmdW5jdGlvbiBiZWNhdXNlIHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbiB3YXMgZGlzYWJsZWQgb24gdGhlIHBvcnQgd2hpY2ggdGhlIGZyYW1lcyBhcmUgcmVjZWl2ZWQuCisgKiBAcnhfZXJyb3JlZF9mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIEFnZ3JlZ2F0b3IgdGhhdCBhcmUKKyAqICAgICAgICAgICAgIGRpc2NhcmRlZCBieSBpdHMgQWdncmVnYXRpb24gcG9ydHMsIG9yIGFyZSBkaXNjYXJkZWQgYnkgdGhlCisgKiAgICAgICAgICAgICBDb2xsZWN0aW9uIGZ1bmN0aW9uIG9mIHRoZSBBZ2dyZWdhdG9yLCBvciB0aGF0IGFyZSBkaXNjYXJkZWQgYnkKKyAqICAgICAgICAgICAgIHRoZSBBZ2dyZWdhdG9yIGR1ZSB0byBkZXRlY3Rpb24gb2YgYW4gaWxsZWdhbCBTbG93IFByb3RvY29scyBQRFUuCisgKiBAcnhfdW5rbm93bl9zbG93X3Byb3RvX2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRvcgorICogICAgICAgICAgICAgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5IGl0cyBBZ2dyZWdhdGlvbiBwb3J0cyBkdWUgdG8gZGV0ZWN0aW9uIG9mCisgKiAgICAgICAgICAgICBhbiB1bmtub3duIFNsb3cgUHJvdG9jb2xzIFBEVS4KKyAqCisgKiBQZXIgYWdncmVnYXRvciBYTUFDIFJYIHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cyB7CisvKjB4MDAwKi8JCXU2NAl0eF9mcm1zOworLyoweDAwOCovCQl1NjQJdHhfZGF0YV9vY3RldHM7CisvKjB4MDEwKi8JCXU2NAl0eF9tY2FzdF9mcm1zOworLyoweDAxOCovCQl1NjQJdHhfYmNhc3RfZnJtczsKKy8qMHgwMjAqLwkJdTY0CXR4X2Rpc2NhcmRlZF9mcm1zOworLyoweDAyOCovCQl1NjQJdHhfZXJyb3JlZF9mcm1zOworLyoweDAzMCovCQl1NjQJcnhfZnJtczsKKy8qMHgwMzgqLwkJdTY0CXJ4X2RhdGFfb2N0ZXRzOworLyoweDA0MCovCQl1NjQJcnhfbWNhc3RfZnJtczsKKy8qMHgwNDgqLwkJdTY0CXJ4X2JjYXN0X2ZybXM7CisvKjB4MDUwKi8JCXU2NAlyeF9kaXNjYXJkZWRfZnJtczsKKy8qMHgwNTgqLwkJdTY0CXJ4X2Vycm9yZWRfZnJtczsKKy8qMHgwNjAqLwkJdTY0CXJ4X3Vua25vd25fc2xvd19wcm90b19mcm1zOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgLSBYTUFDIFBvcnQgU3RhdGlzdGljcworICoKKyAqIEB0eF90dGxfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIE1BQyBmcmFtZXMKKyAqIEB0eF90dGxfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuIFRvIGRldGVybWluZSB0aGUKKyAqICAgICAgICAgICAgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcywgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycywKKyAqICAgICAgICAgICAgbXVsdGlwbHkgUE9SVG5fVFhfVFRMX0ZSTVMgYnkgOCBhbmQgYWRkIGl0IHRvIHRoaXMgc3RhdCAodW5sZXNzCisgKiAgICAgICAgICAgIG90aGVyd2lzZSBjb25maWd1cmVkLCB0aGlzIHN0YXQgb25seSBjb3VudHMgZnJhbWVzIHRoYXQgaGF2ZQorICogICAgICAgICAgICA4IGJ5dGVzIG9mIHByZWFtYmxlIGZvciBlYWNoIGZyYW1lKS4gVGhpcyBzdGF0IGNhbiBiZSBjb25maWd1cmVkCisgKiAgICAgICAgICAgIChzZWUgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLlRUTF9GUk1TX0hBTkRMSU5HKSB0byBjb3VudCBldmVyeXRoaW5nCisgKiAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgcHJlYW1ibGUgb2N0ZXRzLgorICogQHR4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQKKyAqICAgICAgICAgICAgZnJhbWVzLgorICogQHR4X21jYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgdG8gYSBncm91cCBhZGRyZXNzCisgKiAgICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorICogQHR4X2JjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgdG8gdGhlIGJyb2FkY2FzdAorICogICAgICAgICAgICBncm91cCBhZGRyZXNzLgorICogQHR4X3VjYXN0X2ZybXM6IENvdW50IG9mIHRyYW5zbWl0dGVkIGZyYW1lcyBjb250YWluaW5nIGEgdW5pY2FzdCBhZGRyZXNzLgorICogICAgICAgICAgICBJbmNsdWRlcyBkaXNjYXJkZWQgZnJhbWVzIHRoYXQgYXJlIG5vdCBzZW50IHRvIHRoZSBuZXR3b3JrLgorICogQHR4X3RhZ2dlZF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhIFZMQU4gdGFnLgorICogQHR4X3ZsZF9pcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgbmV0d29yay4KKyAqIEB0eF92bGRfaXBfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQKKyAqICAgICAgICAgICAgYXJlIHBhc3NlZCB0byB0aGUgbmV0d29yay4KKyAqIEB0eF9pY21wOiBDb3VudCBvZiB0cmFuc21pdHRlZCBJQ01QIG1lc3NhZ2VzLiBJbmNsdWRlcyBtZXNzYWdlcyBub3Qgc2VudAorICogICAgICAgICAgICBkdWUgdG8gcHJvYmxlbXMgd2l0aGluIElDTVAuCisgKiBAdHhfdGNwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBUQ1Agc2VnbWVudHMuIERvZXMgbm90IGluY2x1ZGUgc2VnbWVudHMKKyAqICAgICAgICAgICAgY29udGFpbmluZyByZXRyYW5zbWl0dGVkIG9jdGV0cy4KKyAqIEB0eF9yc3RfdGNwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBUQ1Agc2VnbWVudHMgY29udGFpbmluZyB0aGUgUlNUIGZsYWcuCisgKiBAdHhfdWRwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBVRFAgZGF0YWdyYW1zLgorICogQHR4X3BhcnNlX2Vycm9yOiBJbmNyZW1lbnRzIHdoZW4gdGhlIFRQQSBpcyB1bmFibGUgdG8gcGFyc2UgYSBwYWNrZXQuIFRoaXMKKyAqICAgICAgICAgICAgZ2VuZXJhbGx5IG9jY3VycyB3aGVuIGEgcGFja2V0IGlzIGNvcnJ1cHQgc29tZWhvdywgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIHBhY2tldHMgdGhhdCBoYXZlIElQIHZlcnNpb24gbWlzbWF0Y2hlcywgaW52YWxpZCBMYXllciAyIGNvbnRyb2wKKyAqICAgICAgICAgICAgZmllbGRzLCBldGMuIEwzL0w0IGNoZWNrc3VtcyBhcmUgbm90IG9mZmxvYWRlZCwgYnV0IHRoZSBwYWNrZXQKKyAqICAgICAgICAgICAgaXMgc3RpbGwgYmUgdHJhbnNtaXR0ZWQuCisgKiBAdHhfdW5rbm93bl9wcm90b2NvbDogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgZW5jb3VudGVycyBhbiB1bmtub3duCisgKiAgICAgICAgICAgIHByb3RvY29sLCBzdWNoIGFzIGEgbmV3IElQdjYgZXh0ZW5zaW9uIGhlYWRlciwgb3IgYW4gdW5zdXBwb3J0ZWQKKyAqICAgICAgICAgICAgUm91dGluZyBUeXBlLiBUaGUgcGFja2V0IHN0aWxsIGhhcyBhIGNoZWNrc3VtIGNhbGN1bGF0ZWQgYnV0IGl0CisgKiAgICAgICAgICAgIG1heSBiZSBpbmNvcnJlY3QuCisgKiBAdHhfcGF1c2VfY3RybF9mcm1zOiBDb3VudCBvZiBNQUMgUEFVU0UgY29udHJvbCBmcmFtZXMgdGhhdCBhcmUgdHJhbnNtaXR0ZWQuCisgKiAgICAgICAgICAgIFNpbmNlLCB0aGUgb25seSBjb250cm9sIGZyYW1lcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgYXJlCisgKiAgICAgICAgICAgIFBBVVNFIGZyYW1lcywgdGhpcyByZWdpc3RlciBpcyBhIGNvdW50IG9mIGFsbCB0cmFuc21pdHRlZCBNQUMKKyAqICAgICAgICAgICAgY29udHJvbCBmcmFtZXMuCisgKiBAdHhfbWFya2VyX3BkdV9mcm1zOiBDb3VudCBvZiBNYXJrZXIgUERVcyB0cmFuc21pdHRlZAorICogb24gdGhpcyBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHR4X2xhY3BkdV9mcm1zOiBDb3VudCBvZiBMQUNQRFVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydC4KKyAqIEB0eF9kcm9wX2lwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBuZXR3b3JrLiBJbmNyZW1lbnRzIGJlY2F1c2Ugb2Y6CisgKiAgICAgICAgICAgIDEpIEFuIGludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IKKyAqICAgICAgICAgICAgKHN1Y2ggYXMgYW4gdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IpLiAyKSBBIGZyYW1lIHBhcnNpbmcgZXJyb3IKKyAqICAgICAgICAgICAgZHVyaW5nIElQIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICogQHR4X21hcmtlcl9yZXNwX3BkdV9mcm1zOiBDb3VudCBvZiBNYXJrZXIgUmVzcG9uc2UgUERVcyB0cmFuc21pdHRlZCBvbiB0aGlzCisgKiAgICAgICAgICAgIEFnZ3JlZ2F0aW9uIHBvcnQuCisgKiBAdHhfeGdtaWlfY2hhcjJfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgWEdNSUkKKyAqICAgICAgICAgICAgY2hhcmFjdGVycyB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoCisgKiAgICAgICAgICAgIHJlZ2lzdGVyIFhNQUNfU1RBVFNfVFhfWEdNSUlfQ0hBUl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4KKyAqICAgICAgICAgICAgaXMgc2V0IHRvIC9ULyAoaS5lLiB0aGUgdGVybWluYXRlIGNoYXJhY3RlciksIHRodXMgdGhlIHN0YXRpc3RpYworICogICAgICAgICAgICB0cmFja3MgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBUZXJtaW5hdGUgY2hhcmFjdGVycy4KKyAqIEB0eF94Z21paV9jaGFyMV9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBYR01JSQorICogICAgICAgICAgICBjaGFyYWN0ZXJzIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2gKKyAqICAgICAgICAgICAgcmVnaXN0ZXIgWE1BQ19TVEFUU19UWF9YR01JSV9DSEFSX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybgorICogICAgICAgICAgICBpcyBzZXQgdG8gL1MvIChpLmUuIHRoZSBzdGFydCBjaGFyYWN0ZXIpLAorICogICAgICAgICAgICB0aHVzIHRoZSBzdGF0aXN0aWMgdHJhY2tzCisgKiAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgU3RhcnQgY2hhcmFjdGVycy4KKyAqIEB0eF94Z21paV9jb2x1bW4yX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFhHTUlJCisgKiAgICAgICAgICAgIGNvbHVtbnMgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaCByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX1RYX1hHTUlJX0NPTFVNTjJfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuIGlzIHNldAorICogICAgICAgICAgICB0byA0IHggL0UvIChpLmUuIGEgY29sdW1uIGNvbnRhaW5pbmcgYWxsIGVycm9yIGNoYXJhY3RlcnMpLCB0aHVzCisgKiAgICAgICAgICAgIHRoZSBzdGF0aXN0aWMgdHJhY2tzIHRoZSBudW1iZXIgb2YgRXJyb3IgY29sdW1ucyB0cmFuc21pdHRlZCBhdAorICogICAgICAgICAgICBhbnkgdGltZS4gSWYgWE1BQ19TVEFUU19UWF9YR01JSV9CRUhBVl9DT0xVTU4yX1BPUlRuLk5FQVJfQ09MMSBpcworICogICAgICAgICAgICBzZXQgdG8gMSwgdGhlbiB0aGlzIHN0YXQgaW5jcmVtZW50cyB3aGVuIENPTFVNTjIgaXMgZm91bmQgd2l0aGluCisgKiAgICAgICAgICAgICduJyBjbG9ja3MgYWZ0ZXIgQ09MVU1OMS4gSGVyZSwgJ24nIGlzIGRlZmluZWQgYnkKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19UWF9YR01JSV9CRUhBVl9DT0xVTU4yX1BPUlRuLk5VTV9DT0wgKGlmICduJyBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gMCwgdGhlbiBpdCBtZWFucyB0byBzZWFyY2ggYW55d2hlcmUgZm9yIENPTFVNTjIpLgorICogQHR4X3hnbWlpX2NvbHVtbjFfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgWEdNSUkKKyAqICAgICAgICAgICAgY29sdW1ucyB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoIHJlZ2lzdGVyCisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfVFhfWEdNSUlfQ09MVU1OMV9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4gaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDQgeCAvSS8gKGkuZS4gYSBjb2x1bW4gY29udGFpbmluZyBhbGwgaWRsZSBjaGFyYWN0ZXJzKSwKKyAqICAgICAgICAgICAgdGh1cyB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIElkbGUgY29sdW1ucy4KKyAqIEB0eF9hbnlfZXJyX2ZybXM6IENvdW50IG9mIHRyYW5zbWl0dGVkIGZyYW1lcyBjb250YWluaW5nIGFueSBlcnJvciB0aGF0CisgKiAgICAgICAgICAgIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuIEluY3JlbWVudHMgaWYKKyAqICAgICAgICAgICAgdGhlcmUgaXMgYW4gRUNDIHdoaWxlIHJlYWRpbmcgdGhlIGZyYW1lIG91dCBvZiB0aGUgdHJhbnNtaXQKKyAqICAgICAgICAgICAgYnVmZmVyLiBBbHNvIGluY3JlbWVudHMgaWYgdGhlIHRyYW5zbWl0IHByb3RvY29sIGFzc2lzdCAoVFBBKQorICogICAgICAgICAgICBibG9jayBkZXRlcm1pbmVzIHRoYXQgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgc2VudC4KKyAqIEB0eF9kcm9wX2ZybXM6IENvdW50IG9mIGZyYW1lcyB0aGF0IGNvdWxkIG5vdCBiZSBzZW50IGZvciBubyBvdGhlciByZWFzb24KKyAqICAgICAgICAgICAgdGhhbiBpbnRlcm5hbCBNQUMgcHJvY2Vzc2luZy4gSW5jcmVtZW50cyBvbmNlIHdoZW5ldmVyIHRoZQorICogICAgICAgICAgICB0cmFuc21pdCBidWZmZXIgaXMgZmx1c2hlZCAoZHVlIHRvIGFuIEVDQyBlcnJvciBvbiBhIG1lbW9yeQorICogICAgICAgICAgICBkZXNjcmlwdG9yKS4KKyAqIEByeF90dGxfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcywgaW5jbHVkaW5nIGZyYW1lcyByZWNlaXZlZAorICogICAgICAgICAgICB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuIFRoaXMgc3RhdCBjYW4gYmUKKyAqICAgICAgICAgICAgY29uZmlndXJlZCAoc2VlIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5UVExfRlJNU19IQU5ETElORykgdG8gY291bnQKKyAqICAgICAgICAgICAgZXZlcnl0aGluZywgZXZlbiAiZnJhbWVzIiBhcyBzbWFsbCBvbmUgYnl0ZSBvZiBwcmVhbWJsZS4KKyAqIEByeF92bGRfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMuIERvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9vZmZsb2FkX2ZybXM6IENvdW50IG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBob3N0LgorICogQHJ4X3R0bF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cyBvZiByZWNlaXZlZCBmcmFtZXMsIG5vdCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgZnJhbWluZyBjaGFyYWN0ZXJzIChpLmUuIGxlc3MgZnJhbWluZyBiaXRzKS4gVG8gZGV0ZXJtaW5lIHRoZQorICogICAgICAgICAgICB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBpbmNsdWRpbmcgZnJhbWluZyBjaGFyYWN0ZXJzLAorICogICAgICAgICAgICBtdWx0aXBseSBQT1JUbl9SWF9UVExfRlJNUyBieSA4IGFuZCBhZGQgaXQgdG8gdGhpcyBzdGF0ICh1bmxlc3MKKyAqICAgICAgICAgICAgb3RoZXJ3aXNlIGNvbmZpZ3VyZWQsIHRoaXMgc3RhdCBvbmx5IGNvdW50cyBmcmFtZXMgdGhhdCBoYXZlIDgKKyAqICAgICAgICAgICAgYnl0ZXMgb2YgcHJlYW1ibGUgZm9yIGVhY2ggZnJhbWUpLiBUaGlzIHN0YXQgY2FuIGJlIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgICAgKHNlZSBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVFRMX0ZSTVNfSEFORExJTkcpIHRvIGNvdW50IGV2ZXJ5dGhpbmcsCisgKiAgICAgICAgICAgIGV2ZW4gdGhlIHByZWFtYmxlIG9jdGV0cyBvZiAiZnJhbWVzIiBhcyBzbWFsbCBvbmUgYnl0ZSBvZiBwcmVhbWJsZQorICogQHJ4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfb2ZmbG9hZF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cywgbm90IGluY2x1ZGluZyBmcmFtaW5nCisgKiAgICAgICAgICAgIGNoYXJhY3RlcnMsIG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkCisgKiAgICAgICAgICAgIHRvIHRoZSBob3N0LgorICogQHJ4X3ZsZF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nIGEKKyAqCSAgICAgIG5vbmJyb2FkY2FzdCBncm91cCBhZGRyZXNzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZAorICogICAgICAgICAgICB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdmxkX2JjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBNQUMgZnJhbWVzIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgdGhlIGJyb2FkY2FzdCBncm91cCBhZGRyZXNzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZAorICogICAgICAgICAgICB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfYWNjZXB0ZWRfdWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyYW1lcyBjb250YWluaW5nCisgKiAgICAgICAgICAgIGEgdW5pY2FzdCBhZGRyZXNzLiBPbmx5IGluY2x1ZGVzIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8KKyAqICAgICAgICAgICAgdGhlIHN5c3RlbS4KKyAqIEByeF9hY2NlcHRlZF9udWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyYW1lcyBjb250YWluaW5nCisgKiAgICAgICAgICAgIGEgbm9uLXVuaWNhc3QgKGJyb2FkY2FzdCBvciBtdWx0aWNhc3QpIGFkZHJlc3MuIE9ubHkgaW5jbHVkZXMKKyAqICAgICAgICAgICAgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgc3lzdGVtLiBDb3VsZCBpbmNsdWRlLCBmb3IgaW5zdGFuY2UsCisgKiAgICAgICAgICAgIG5vbi11bmljYXN0IGZyYW1lcyB0aGF0IGNvbnRhaW4gRkNTIGVycm9ycyBpZiB0aGUgTUFDX0VSUk9SX0NGRworICogICAgICAgICAgICByZWdpc3RlciBpcyBzZXQgdG8gcGFzcyBGQ1MtZXJyb3JlZCBmcmFtZXMgdG8gdGhlIGhvc3QuCisgKiBAcnhfdGFnZ2VkX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBjb250YWluaW5nIGEgVkxBTiB0YWcuCisgKiBAcnhfbG9uZ19mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgbG9uZ2VyIHRoYW4gUlhfTUFYX1BZTERfTEVOCisgKiAgICAgICAgICAgICsgMTggYnl0ZXMgKCsgMjIgYnl0ZXMgaWYgVkxBTi10YWdnZWQpLgorICogQHJ4X3VzaXplZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbGVzcyB0aGFuIDY0IG9jdGV0cywgdGhhdCBhcmUgb3RoZXJ3aXNlIHdlbGwtZm9ybWVkLgorICogICAgICAgICAgICBJbiBvdGhlciB3b3JkcywgY291bnRzIHJ1bnRzLgorICogQHJ4X29zaXplZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbW9yZSB0aGFuIDE1MTggb2N0ZXRzLCB0aGF0IGFyZSBvdGhlcndpc2UKKyAqICAgICAgICAgICAgd2VsbC1mb3JtZWQuIE5vdGU6IElmIHJlZ2lzdGVyIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5WTEFOX0hBTkRMSU5HCisgKiAgICAgICAgICAgIGlzIHNldCB0byAxLCB0aGVuICJtb3JlIHRoYW4gMTUxOCBvY3RldHMiIGJlY29tZXMgIm1vcmUgdGhhbiAxNTE4CisgKiAgICAgICAgICAgICgxNTIyIGlmIFZMQU4tdGFnZ2VkKSBvY3RldHMiLgorICogQHJ4X2ZyYWdfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIGxlc3MgdGhhbiA2NCBvY3RldHMgdGhhdCBoYWQgYmFkIEZDUy4gSW4gb3RoZXIKKyAqICAgICAgICAgICAgd29yZHMsIGNvdW50cyBmcmFnbWVudHMuCisgKiBAcnhfamFiYmVyX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBtb3JlIHRoYW4gMTUxOCBvY3RldHMgdGhhdCBoYWQgYmFkIEZDUy4gSW4gb3RoZXIKKyAqICAgICAgICAgICAgd29yZHMsIGNvdW50cyBqYWJiZXJzLiBOb3RlOiBJZiByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVkxBTl9IQU5ETElORyBpcyBzZXQgdG8gMSwgdGhlbiAibW9yZSB0aGFuCisgKiAgICAgICAgICAgIDE1MTggb2N0ZXRzIiBiZWNvbWVzICJtb3JlIHRoYW4gMTUxOCAoMTUyMiBpZiBWTEFOLXRhZ2dlZCkKKyAqICAgICAgICAgICAgb2N0ZXRzIi4KKyAqIEByeF90dGxfNjRfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aCAoaW5jbHVkaW5nCisgKiAgICAgICAgICAgIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGV4YWN0bHkgNjQgb2N0ZXRzLiBJbmNsdWRlcyBmcmFtZXMKKyAqICAgICAgICAgICAgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF82NV8xMjdfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNjUgYW5kIDEyNworICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xMjhfMjU1X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDEyOCBhbmQgMjU1CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzI1Nl81MTFfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gMjU2IGFuZCA1MTEKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNTEyXzEwMjNfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNTEyIGFuZCAxMDIzCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzEwMjRfMTUxOF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxMDI0IGFuZCAxNTE4CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzE1MTlfNDA5NV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxNTE5IGFuZCA0MDk1CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzQwOTZfODE5MV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA0MDk2IGFuZCA4MTkxCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzgxOTJfbWF4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDgxOTIgYW5kCisgKiAgICAgICAgICAgIFJYX01BWF9QWUxEX0xFTisxOCBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF9ndF9tYXhfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIGV4Y2VlZGluZworICogICAgICAgICAgICBSWF9NQVhfUFlMRF9MRU4rMTggKCsyMiBieXRlcyBpZiBWTEFOLXRhZ2dlZCkgb2N0ZXRzIGluY2x1c2l2ZS4KKyAqICAgICAgICAgICAgSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zLiBJbmNsdWRlcyBlcnJvcmVkIElQIGRhdGFncmFtcy4KKyAqIEByeF9hY2NlcHRlZF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQKKyAqIAkJYXJlIHBhc3NlZCB0byB0aGUgc3lzdGVtLgorICogQHJ4X2lwX29jdGV0czogQ291bnQgb2YgbnVtYmVyIG9mIG9jdGV0cyBpbiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMuIEluY2x1ZGVzCisgKiAgICAgICAgICAgIGVycm9yZWQgSVAgZGF0YWdyYW1zLgorICogQHJ4X2Vycl9pcDogCUNvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyBjb250YWluaW5nIGVycm9ycy4gRm9yIGV4YW1wbGUsCisgKiAgICAgICAgICAgIGJhZCBJUCBjaGVja3N1bS4KKyAqIEByeF9pY21wOiBDb3VudCBvZiByZWNlaXZlZCBJQ01QIG1lc3NhZ2VzLiBJbmNsdWRlcyBlcnJvcmVkIElDTVAgbWVzc2FnZXMuCisgKiBAcnhfdGNwOiBDb3VudCBvZiByZWNlaXZlZCBUQ1Agc2VnbWVudHMuIEluY2x1ZGVzIGVycm9yZWQgVENQIHNlZ21lbnRzLgorICogICAgICAgICAgICBOb3RlOiBUaGlzIHN0YXQgY29udGFpbnMgYSBjb3VudCBvZiBhbGwgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLAorICogICAgICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZXkgcGVydGFpbiB0byBhbiBlc3RhYmxpc2hlZAorICogICAgICAgICAgICBjb25uZWN0aW9uLgorICogQHJ4X3VkcDogQ291bnQgb2YgcmVjZWl2ZWQgVURQIGRhdGFncmFtcy4KKyAqIEByeF9lcnJfdGNwOiBDb3VudCBvZiByZWNlaXZlZCBUQ1Agc2VnbWVudHMgY29udGFpbmluZyBlcnJvcnMuIEZvciBleGFtcGxlLAorICogICAgICAgICAgICBiYWQgVENQIGNoZWNrc3VtLgorICogQHJ4X3BhdXNlX2NvdW50OiBDb3VudCBvZiBudW1iZXIgb2YgcGF1c2UgcXVhbnRhIHRoYXQgdGhlIE1BQyBoYXMgYmVlbiBpbgorICogICAgICAgICAgICB0aGUgcGF1c2VkIHN0YXRlLiBSZWNhbGwsIG9uZSBwYXVzZSBxdWFudHVtIGVxdWF0ZXMgdG8gNTEyCisgKiAgICAgICAgICAgIGJpdCB0aW1lcy4KKyAqIEByeF9wYXVzZV9jdHJsX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIE1BQyBQQVVTRSBjb250cm9sIGZyYW1lcy4KKyAqIEByeF91bnN1cF9jdHJsX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIE1BQyBjb250cm9sIGZyYW1lcyB0aGF0IGRvIG5vdAorICogICAgICAgICAgICBjb250YWluIHRoZSBQQVVTRSBvcGNvZGUuIFRoZSBzdW0gb2YgUlhfUEFVU0VfQ1RSTF9GUk1TIGFuZAorICogICAgICAgICAgICB0aGlzIHJlZ2lzdGVyIGlzIGEgY291bnQgb2YgYWxsIHJlY2VpdmVkIE1BQyBjb250cm9sIGZyYW1lcy4KKyAqICAgICAgICAgICAgTm90ZTogVGhpcyBzdGF0IG1heSBiZSBjb25maWd1cmVkIHRvIGNvdW50IGFsbCBsYXllciAyIGVycm9ycworICogICAgICAgICAgICAoaS5lLiBsZW5ndGggZXJyb3JzIGFuZCBGQ1MgZXJyb3JzKS4KKyAqIEByeF9mY3NfZXJyX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIE1BQyBmcmFtZXMgdGhhdCBkbyBub3QgcGFzcyBGQ1MuIERvZXMKKyAqICAgICAgICAgICAgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcgb3IKKyAqICAgICAgICAgICAgZnJhbWUtdG9vLXNob3J0IGVycm9yLgorICogQHJ4X2luX3JuZ19sZW5fZXJyX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoL3R5cGUgZmllbGQKKyAqICAgICAgICAgICAgdmFsdWUgYmV0d2VlbiA0NiAoNDIgZm9yIFZMQU4tdGFnZ2VkIGZyYW1lcykgYW5kIDE1MDAgKGFsc28gMTUwMAorICogICAgICAgICAgICBmb3IgVkxBTi10YWdnZWQgZnJhbWVzKSwgaW5jbHVzaXZlLCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZQorICogICAgICAgICAgICBudW1iZXIgb2YgZGF0YSBvY3RldHMgKGluY2x1ZGluZyBwYWQpIHJlY2VpdmVkLiBBbHNvIGNvbnRhaW5zCisgKiAgICAgICAgICAgIGEgY291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggYSBsZW5ndGgvdHlwZSBmaWVsZCBsZXNzIHRoYW4KKyAqICAgICAgICAgICAgNDYgKDQyIGZvciBWTEFOLXRhZ2dlZCBmcmFtZXMpIGFuZCB0aGUgbnVtYmVyIG9mIGRhdGEgb2N0ZXRzCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgcGFkKSByZWNlaXZlZCBpcyBncmVhdGVyIHRoYW4gNDYgKDQyIGZvciBWTEFOLXRhZ2dlZAorICogICAgICAgICAgICBmcmFtZXMpLgorICogQHJ4X291dF9ybmdfbGVuX2Vycl9mcm1zOiAgQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHdpdGggbGVuZ3RoL3R5cGUgZmllbGQKKyAqICAgICAgICAgICAgYmV0d2VlbiAxNTAxIGFuZCAxNTM1IGRlY2ltYWwsIGluY2x1c2l2ZS4KKyAqIEByeF9kcm9wX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlIGhvc3QuCisgKiAgICAgICAgICAgIFNlZSBQT1JUbl9SWF9MMl9NR01UX0RJU0NBUkQsIFBPUlRuX1JYX1JQQV9ESVNDQVJELAorICogICAgICAgICAgICBQT1JUbl9SWF9UUkFTSF9ESVNDQVJELCBQT1JUbl9SWF9SVFNfRElTQ0FSRCwgUE9SVG5fUlhfUkVEX0RJU0NBUkQKKyAqICAgICAgICAgICAgZm9yIGEgbGlzdCBvZiByZWFzb25zLiBCZWNhdXNlIHRoZSBSTUFDIGRyb3BzIG9uZSBmcmFtZSBhdCBhIHRpbWUsCisgKiAgICAgICAgICAgIHRoaXMgc3RhdCBhbHNvIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRyb3AgZXZlbnRzLgorICogQHJ4X2Rpc2NhcmRlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogCQlhbnkgZXJyb3IgdGhhdCBwcmV2ZW50cworICogICAgICAgICAgICB0aGVtIGZyb20gYmVpbmcgcGFzc2VkIHRvIHRoZSBzeXN0ZW0uIFNlZSBQT1JUbl9SWF9GQ1NfRElTQ0FSRCwKKyAqICAgICAgICAgICAgUE9SVG5fUlhfTEVOX0RJU0NBUkQsIGFuZCBQT1JUbl9SWF9TV0lUQ0hfRElTQ0FSRCBmb3IgYSBsaXN0IG9mCisgKiAgICAgICAgICAgIHJlYXNvbnMuCisgKiBAcnhfZHJvcF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0byB0aGUKKyAqICAgICAgICAgICAgaG9zdC4gU2VlIFBPUlRuX1JYX0RST1BfRlJNUyBmb3IgYSBsaXN0IG9mIHJlYXNvbnMuCisgKiBAcnhfZHJvcF91ZHA6IENvdW50IG9mIHJlY2VpdmVkIFVEUCBkYXRhZ3JhbXMgdGhhdCBhcmUgbm90IGRlbGl2ZXJlZCB0byB0aGUKKyAqICAgICAgICAgICAgaG9zdC4gU2VlIFBPUlRuX1JYX0RST1BfRlJNUyBmb3IgYSBsaXN0IG9mIHJlYXNvbnMuCisgKiBAcnhfbWFya2VyX3BkdV9mcm1zOiBDb3VudCBvZiB2YWxpZCBNYXJrZXIgUERVcyByZWNlaXZlZCBvbiB0aGlzIEFnZ3JlZ2F0aW9uCisgKiAgICAgICAgICAgIHBvcnQuCisgKiBAcnhfbGFjcGR1X2ZybXM6IENvdW50IG9mIHZhbGlkIExBQ1BEVXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHJ4X3Vua25vd25fcGR1X2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyAob24gdGhpcyBBZ2dyZWdhdGlvbiBwb3J0KQorICogICAgICAgICAgICB0aGF0IGNhcnJ5IHRoZSBTbG93IFByb3RvY29scyBFdGhlclR5cGUsIGJ1dCBjb250YWluIGFuIHVua25vd24KKyAqICAgICAgICAgICAgUERVLiBPciBmcmFtZXMgdGhhdCBjb250YWluIHRoZSBTbG93IFByb3RvY29scyBncm91cCBNQUMgYWRkcmVzcywKKyAqICAgICAgICAgICAgYnV0IGRvIG5vdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLgorICogQHJ4X21hcmtlcl9yZXNwX3BkdV9mcm1zOiBDb3VudCBvZiB2YWxpZCBNYXJrZXIgUmVzcG9uc2UgUERVcyByZWNlaXZlZCBvbgorICogICAgICAgICAgICB0aGlzIEFnZ3JlZ2F0aW9uIHBvcnQuCisgKiBAcnhfZmNzX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZSB0aGUKKyAqICAgICAgICAgICAgRkNTIGNoZWNrIGZhaWxlZC4KKyAqIEByeF9pbGxlZ2FsX3BkdV9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgKG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydCkKKyAqICAgICAgICAgICAgdGhhdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLCBidXQgY29udGFpbiBhIGJhZGx5CisgKiAgICAgICAgICAgIGZvcm1lZCBQRFUuIE9yIGZyYW1lcyB0aGF0IGNhcnJ5IHRoZSBTbG93IFByb3RvY29scyBFdGhlclR5cGUsCisgKiAgICAgICAgICAgIGJ1dCBjb250YWluIGFuIGlsbGVnYWwgdmFsdWUgb2YgUHJvdG9jb2wgU3VidHlwZS4KKyAqIEByeF9zd2l0Y2hfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBieSB0aGUKKyAqICAgICAgICAgICAgaW50ZXJuYWwgc3dpdGNoIGJlY2F1c2UgdGhleSBkaWQgbm90IGhhdmUgYW4gZW50cnkgaW4gdGhlCisgKiAgICAgICAgICAgIEZpbHRlcmluZyBEYXRhYmFzZS4gVGhpcyBpbmNsdWRlcyBmcmFtZXMgdGhhdCBoYWQgYW4gaW52YWxpZAorICogICAgICAgICAgICBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcyBvciBWTEFOIElELiBJdCBhbHNvIGluY2x1ZGVzIGZyYW1lcyBhcmUKKyAqICAgICAgICAgICAgZGlzY2FyZGVkIGJlY2F1c2UgdGhleSBkaWQgbm90IHNhdGlzZnkgdGhlIGxlbmd0aCByZXF1aXJlbWVudHMKKyAqICAgICAgICAgICAgb2YgdGhlIHRhcmdldCBWUEFUSC4KKyAqIEByeF9sZW5fZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIG9mIGFuCisgKiAgICAgICAgICAgIGludmFsaWQgZnJhbWUgbGVuZ3RoIChpbmNsdWRlcyBmcmFnbWVudHMsIG92ZXJzaXplZCBmcmFtZXMgYW5kCisgKiAgICAgICAgICAgIG1pc21hdGNoIGJldHdlZW4gZnJhbWUgbGVuZ3RoIGFuZCBsZW5ndGgvdHlwZSBmaWVsZCkuIFRoaXMgc3RhdAorICogICAgICAgICAgICBjYW4gYmUgY29uZmlndXJlZAorICogICAgICAgICAgICAoc2VlIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5MRU5fRElTQ0FSRF9IQU5ETElORykuCisgKiBAcnhfcnBhX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IHdlcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgIHJlY2VpdmUgcHJvdG9jb2wgYXNzaXN0IChSUEEpIGRpc2NvdmVyZWQgYW5kIGVycm9yIGluIHRoZSBmcmFtZQorICogICAgICAgICAgICBvciB3YXMgdW5hYmxlIHRvIHBhcnNlIHRoZSBmcmFtZS4KKyAqIEByeF9sMl9tZ210X2Rpc2NhcmQ6IENvdW50IG9mIExheWVyIDIgbWFuYWdlbWVudCBmcmFtZXMgKGVnLiBwYXVzZSBmcmFtZXMsCisgKiAgICAgICAgICAgIExpbmsgQWdncmVnYXRpb24gQ29udHJvbCBQcm90b2NvbCAoTEFDUCkgZnJhbWVzLCBldGMuKSB0aGF0IGFyZQorICogICAgICAgICAgICBkaXNjYXJkZWQuCisgKiBAcnhfcnRzX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYnkgdGhlIHJlY2VpdmUKKyAqICAgICAgICAgICAgdHJhZmZpYyBzdGVlcmluZyAoUlRTKSBsb2dpYy4gSW5jbHVkZXMgdGhvc2UgZnJhbWUgZGlzY2FyZGVkCisgKiAgICAgICAgICAgIGJlY2F1c2UgdGhlIFNTQyByZXNwb25zZSBjb250cmFkaWN0ZWQgdGhlIHN3aXRjaCB0YWJsZSwgYmVjYXVzZQorICogICAgICAgICAgICB0aGUgU1NDIHRpbWVkIG91dCwgb3IgYmVjYXVzZSB0aGUgdGFyZ2V0IHF1ZXVlIGNvdWxkIG5vdCBmaXQgdGhlCisgKiAgICAgICAgICAgIGZyYW1lLgorICogQHJ4X3RyYXNoX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZQorICogICAgICAgICAgICByZWNlaXZlIHRyYWZmaWMgc3RlZXJpbmcgKFJUUykgc3RlZXJlZCB0aGUgZnJhbWUgdG8gdGhlIHRyYXNoCisgKiAgICAgICAgICAgIHF1ZXVlLgorICogQHJ4X2J1ZmZfZnVsbF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UKKyAqICAgICAgICAgICAgaW50ZXJuYWwgYnVmZmVycyBhcmUgZnVsbC4gSW5jbHVkZXMgZnJhbWVzIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICogICAgICAgICAgICBSVFMgbG9naWMgaXMgd2FpdGluZyBmb3IgYW4gU1NDIGxvb2t1cCB0aGF0IGhhcyBubyB0aW1lb3V0IGJvdW5kLgorICogICAgICAgICAgICBBbHNvLCBpbmNsdWRlcyBmcmFtZXMgdGhhdCBhcmUgZHJvcHBlZCBiZWNhdXNlIHRoZSBNQUMyRkFVIGJ1ZmZlcgorICogICAgICAgICAgICBpcyBuZWFybHkgZnVsbCAtLSB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGV4dGVybmFsIHJlY2VpdmUgYnVmZmVyCisgKiAgICAgICAgICAgIGlzIGZ1bGwgYW5kIHRoZSByZWNlaXZlIHBhdGggaXMgYmFja2luZyB1cC4KKyAqIEByeF9yZWRfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIG9mIFJFRAorICogICAgICAgICAgICAoUmFuZG9tIEVhcmx5IERpc2NhcmQpLgorICogQHJ4X3hnbWlpX2N0cmxfZXJyX2NudDogTWFpbnRhaW5zIGEgY291bnQgb2YgdW5leHBlY3RlZCBvciBtaXNwbGFjZWQgY29udHJvbAorICogICAgICAgICAgICBjaGFyYWN0ZXJzIG9jY3VyaW5nIGJldHdlZW4gdGltZXMgb2Ygbm9ybWFsIGRhdGEgdHJhbnNtaXNzaW9uCisgKiAgICAgICAgICAgIChpLmUuIG5vdCBpbmNsdWRlZCBpbiBSWF9YR01JSV9EQVRBX0VSUl9DTlQpLiBUaGlzIGNvdW50ZXIgaXMKKyAqICAgICAgICAgICAgaW5jcmVtZW50ZWQgd2hlbiBlaXRoZXIgLQorICogICAgICAgICAgICAxKSBUaGUgUmVjb25jaWxpYXRpb24gU3VibGF5ZXIgKFJTKSBpcyBleHBlY3Rpbmcgb25lIGNvbnRyb2wKKyAqICAgICAgICAgICAgICAgY2hhcmFjdGVyIGFuZCBnZXRzIGFub3RoZXIgKGkuZS4gaXMgZXhwZWN0aW5nIGEgU3RhcnQKKyAqICAgICAgICAgICAgICAgY2hhcmFjdGVyLCBidXQgZ2V0cyBhbm90aGVyIGNvbnRyb2wgY2hhcmFjdGVyKS4KKyAqICAgICAgICAgICAgMikgU3RhcnQgY29udHJvbCBjaGFyYWN0ZXIgaXMgbm90IGluIGxhbmUgMAorICogICAgICAgICAgICBPbmx5IGluY3JlbWVudHMgdGhlIGNvdW50IGJ5IG9uZSBmb3IgZWFjaCBYR01JSSBjb2x1bW4uCisgKiBAcnhfeGdtaWlfZGF0YV9lcnJfY250OiBNYWludGFpbnMgYSBjb3VudCBvZiB1bmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVycworICogICAgICAgICAgICBkdXJpbmcgbm9ybWFsIGRhdGEgdHJhbnNtaXNzaW9uLiBJZiB0aGUgUmVjb25jaWxpYXRpb24gU3VibGF5ZXIKKyAqICAgICAgICAgICAgKFJTKSByZWNlaXZlcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBvdGhlciB0aGFuIGEgdGVybWluYXRlIGNvbnRyb2wKKyAqICAgICAgICAgICAgY2hhcmFjdGVyLCBkdXJpbmcgcmVjZWlwdCBvZiBkYXRhIG9jdGV0cyB0aGVuIHRoaXMgcmVnaXN0ZXIgaXMKKyAqICAgICAgICAgICAgaW5jcmVtZW50ZWQuIEFsc28gaW5jcmVtZW50cyBpZiB0aGUgc3RhcnQgZnJhbWUgZGVsaW1pdGVyIGlzIG5vdAorICogICAgICAgICAgICBmb3VuZCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4gT25seSBpbmNyZW1lbnRzIHRoZSBjb3VudCBieSBvbmUKKyAqICAgICAgICAgICAgZm9yIGVhY2ggWEdNSUkgY29sdW1uLgorICogQHJ4X3hnbWlpX2NoYXIxX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIFhHTUlJIGNoYXJhY3RlcnMKKyAqICAgICAgICAgICAgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaCByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX1JYX1hHTUlJX0NIQVJfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuIGlzIHNldAorICogICAgICAgICAgICB0byAvRS8gKGkuZS4gdGhlIGVycm9yIGNoYXJhY3RlciksIHRodXMgdGhlIHN0YXRpc3RpYyB0cmFja3MgdGhlCisgKiAgICAgICAgICAgIG51bWJlciBvZiBFcnJvciBjaGFyYWN0ZXJzIHJlY2VpdmVkIGF0IGFueSB0aW1lLgorICogQHJ4X3hnbWlpX2Vycl9zeW06IENvdW50IG9mIHRoZSBudW1iZXIgb2Ygc3ltYm9sIGVycm9ycyBpbiB0aGUgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgWEdNSUkgZGF0YSAoaS5lLiBQSFkgaW5kaWNhdGVzICJSZWNlaXZlIEVycm9yIiBvbiB0aGUgWEdNSUkpLgorICogICAgICAgICAgICBPbmx5IGluY2x1ZGVzIHN5bWJvbCBlcnJvcnMgdGhhdCBhcmUgb2JzZXJ2ZWQgYmV0d2VlbiB0aGUgWEdNSUkKKyAqICAgICAgICAgICAgU3RhcnQgRnJhbWUgRGVsaW1pdGVyIGFuZCBFbmQgRnJhbWUgRGVsaW1pdGVyLCBpbmNsdXNpdmUuIEFuZAorICogICAgICAgICAgICBvbmx5IGluY3JlbWVudHMgdGhlIGNvdW50IGJ5IG9uZSBmb3IgZWFjaCBmcmFtZS4KKyAqIEByeF94Z21paV9jb2x1bW4xX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIFhHTUlJIGNvbHVtbnMKKyAqICAgICAgICAgICAgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaCByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX1JYX1hHTUlJX0NPTFVNTjFfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuIGlzIHNldAorICogICAgICAgICAgICB0byA0IHggL0UvIChpLmUuIGEgY29sdW1uIGNvbnRhaW5pbmcgYWxsIGVycm9yIGNoYXJhY3RlcnMpLCB0aHVzCisgKiAgICAgICAgICAgIHRoZSBzdGF0aXN0aWMgdHJhY2tzIHRoZSBudW1iZXIgb2YgRXJyb3IgY29sdW1ucyByZWNlaXZlZCBhdCBhbnkKKyAqICAgICAgICAgICAgdGltZS4KKyAqIEByeF94Z21paV9jaGFyMl9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjaGFyYWN0ZXJzCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DSEFSX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gL0UvIChpLmUuIHRoZSBlcnJvciBjaGFyYWN0ZXIpLCB0aHVzIHRoZSBzdGF0aXN0aWMgdHJhY2tzIHRoZQorICogICAgICAgICAgICBudW1iZXIgb2YgRXJyb3IgY2hhcmFjdGVycyByZWNlaXZlZCBhdCBhbnkgdGltZS4KKyAqIEByeF9sb2NhbF9mYXVsdDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGxpbmsKKyAqICAgICAgICAgICAgdHJhbnNpdGlvbmVkIGZyb20gInVwIiB0byAiZG93biIgZHVlIHRvIGEgbG9jYWwgZmF1bHQuCisgKiBAcnhfeGdtaWlfY29sdW1uMl9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjb2x1bW5zCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DT0xVTU4yX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gNCB4IC9FLyAoaS5lLiBhIGNvbHVtbiBjb250YWluaW5nIGFsbCBlcnJvciBjaGFyYWN0ZXJzKSwgdGh1cworICogICAgICAgICAgICB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIEVycm9yIGNvbHVtbnMgcmVjZWl2ZWQgYXQgYW55CisgKiAgICAgICAgICAgIHRpbWUuIElmIFhNQUNfU1RBVFNfUlhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5ORUFSX0NPTDEgaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDEsIHRoZW4gdGhpcyBzdGF0IGluY3JlbWVudHMgd2hlbiBDT0xVTU4yIGlzIGZvdW5kIHdpdGhpbiAnbicKKyAqICAgICAgICAgICAgY2xvY2tzIGFmdGVyIENPTFVNTjEuIEhlcmUsICduJyBpcyBkZWZpbmVkIGJ5CisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfUlhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5OVU1fQ09MIChpZiAnbicgaXMgc2V0IHRvCisgKiAgICAgICAgICAgIDAsIHRoZW4gaXQgbWVhbnMgdG8gc2VhcmNoIGFueXdoZXJlIGZvciBDT0xVTU4yKS4KKyAqIEByeF9qZXR0aXNvbjogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGpldHRpc29uZWQgYmVjYXVzZSBpbnRlcm5hbAorICogICAgICAgICAgICBidWZmZXJzIGFyZSBmdWxsLgorICogQHJ4X3JlbW90ZV9mYXVsdDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGxpbmsKKyAqICAgICAgICAgICAgdHJhbnNpdGlvbmVkIGZyb20gInVwIiB0byAiZG93biIgZHVlIHRvIGEgcmVtb3RlIGZhdWx0LgorICoKKyAqIFhNQUMgUG9ydCBTdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgeworLyoweDAwMCovCQl1NjQJdHhfdHRsX2ZybXM7CisvKjB4MDA4Ki8JCXU2NAl0eF90dGxfb2N0ZXRzOworLyoweDAxMCovCQl1NjQJdHhfZGF0YV9vY3RldHM7CisvKjB4MDE4Ki8JCXU2NAl0eF9tY2FzdF9mcm1zOworLyoweDAyMCovCQl1NjQJdHhfYmNhc3RfZnJtczsKKy8qMHgwMjgqLwkJdTY0CXR4X3VjYXN0X2ZybXM7CisvKjB4MDMwKi8JCXU2NAl0eF90YWdnZWRfZnJtczsKKy8qMHgwMzgqLwkJdTY0CXR4X3ZsZF9pcDsKKy8qMHgwNDAqLwkJdTY0CXR4X3ZsZF9pcF9vY3RldHM7CisvKjB4MDQ4Ki8JCXU2NAl0eF9pY21wOworLyoweDA1MCovCQl1NjQJdHhfdGNwOworLyoweDA1OCovCQl1NjQJdHhfcnN0X3RjcDsKKy8qMHgwNjAqLwkJdTY0CXR4X3VkcDsKKy8qMHgwNjgqLwkJdTMyCXR4X3BhcnNlX2Vycm9yOworLyoweDA2YyovCQl1MzIJdHhfdW5rbm93bl9wcm90b2NvbDsKKy8qMHgwNzAqLwkJdTY0CXR4X3BhdXNlX2N0cmxfZnJtczsKKy8qMHgwNzgqLwkJdTMyCXR4X21hcmtlcl9wZHVfZnJtczsKKy8qMHgwN2MqLwkJdTMyCXR4X2xhY3BkdV9mcm1zOworLyoweDA4MCovCQl1MzIJdHhfZHJvcF9pcDsKKy8qMHgwODQqLwkJdTMyCXR4X21hcmtlcl9yZXNwX3BkdV9mcm1zOworLyoweDA4OCovCQl1MzIJdHhfeGdtaWlfY2hhcjJfbWF0Y2g7CisvKjB4MDhjKi8JCXUzMgl0eF94Z21paV9jaGFyMV9tYXRjaDsKKy8qMHgwOTAqLwkJdTMyCXR4X3hnbWlpX2NvbHVtbjJfbWF0Y2g7CisvKjB4MDk0Ki8JCXUzMgl0eF94Z21paV9jb2x1bW4xX21hdGNoOworLyoweDA5OCovCQl1MzIJdW51c2VkMTsKKy8qMHgwOWMqLwkJdTE2CXR4X2FueV9lcnJfZnJtczsKKy8qMHgwOWUqLwkJdTE2CXR4X2Ryb3BfZnJtczsKKy8qMHgwYTAqLwkJdTY0CXJ4X3R0bF9mcm1zOworLyoweDBhOCovCQl1NjQJcnhfdmxkX2ZybXM7CisvKjB4MGIwKi8JCXU2NAlyeF9vZmZsb2FkX2ZybXM7CisvKjB4MGI4Ki8JCXU2NAlyeF90dGxfb2N0ZXRzOworLyoweDBjMCovCQl1NjQJcnhfZGF0YV9vY3RldHM7CisvKjB4MGM4Ki8JCXU2NAlyeF9vZmZsb2FkX29jdGV0czsKKy8qMHgwZDAqLwkJdTY0CXJ4X3ZsZF9tY2FzdF9mcm1zOworLyoweDBkOCovCQl1NjQJcnhfdmxkX2JjYXN0X2ZybXM7CisvKjB4MGUwKi8JCXU2NAlyeF9hY2NlcHRlZF91Y2FzdF9mcm1zOworLyoweDBlOCovCQl1NjQJcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM7CisvKjB4MGYwKi8JCXU2NAlyeF90YWdnZWRfZnJtczsKKy8qMHgwZjgqLwkJdTY0CXJ4X2xvbmdfZnJtczsKKy8qMHgxMDAqLwkJdTY0CXJ4X3VzaXplZF9mcm1zOworLyoweDEwOCovCQl1NjQJcnhfb3NpemVkX2ZybXM7CisvKjB4MTEwKi8JCXU2NAlyeF9mcmFnX2ZybXM7CisvKjB4MTE4Ki8JCXU2NAlyeF9qYWJiZXJfZnJtczsKKy8qMHgxMjAqLwkJdTY0CXJ4X3R0bF82NF9mcm1zOworLyoweDEyOCovCQl1NjQJcnhfdHRsXzY1XzEyN19mcm1zOworLyoweDEzMCovCQl1NjQJcnhfdHRsXzEyOF8yNTVfZnJtczsKKy8qMHgxMzgqLwkJdTY0CXJ4X3R0bF8yNTZfNTExX2ZybXM7CisvKjB4MTQwKi8JCXU2NAlyeF90dGxfNTEyXzEwMjNfZnJtczsKKy8qMHgxNDgqLwkJdTY0CXJ4X3R0bF8xMDI0XzE1MThfZnJtczsKKy8qMHgxNTAqLwkJdTY0CXJ4X3R0bF8xNTE5XzQwOTVfZnJtczsKKy8qMHgxNTgqLwkJdTY0CXJ4X3R0bF80MDk2XzgxOTFfZnJtczsKKy8qMHgxNjAqLwkJdTY0CXJ4X3R0bF84MTkyX21heF9mcm1zOworLyoweDE2OCovCQl1NjQJcnhfdHRsX2d0X21heF9mcm1zOworLyoweDE3MCovCQl1NjQJcnhfaXA7CisvKjB4MTc4Ki8JCXU2NAlyeF9hY2NlcHRlZF9pcDsKKy8qMHgxODAqLwkJdTY0CXJ4X2lwX29jdGV0czsKKy8qMHgxODgqLwkJdTY0CXJ4X2Vycl9pcDsKKy8qMHgxOTAqLwkJdTY0CXJ4X2ljbXA7CisvKjB4MTk4Ki8JCXU2NAlyeF90Y3A7CisvKjB4MWEwKi8JCXU2NAlyeF91ZHA7CisvKjB4MWE4Ki8JCXU2NAlyeF9lcnJfdGNwOworLyoweDFiMCovCQl1NjQJcnhfcGF1c2VfY291bnQ7CisvKjB4MWI4Ki8JCXU2NAlyeF9wYXVzZV9jdHJsX2ZybXM7CisvKjB4MWMwKi8JCXU2NAlyeF91bnN1cF9jdHJsX2ZybXM7CisvKjB4MWM4Ki8JCXU2NAlyeF9mY3NfZXJyX2ZybXM7CisvKjB4MWQwKi8JCXU2NAlyeF9pbl9ybmdfbGVuX2Vycl9mcm1zOworLyoweDFkOCovCQl1NjQJcnhfb3V0X3JuZ19sZW5fZXJyX2ZybXM7CisvKjB4MWUwKi8JCXU2NAlyeF9kcm9wX2ZybXM7CisvKjB4MWU4Ki8JCXU2NAlyeF9kaXNjYXJkZWRfZnJtczsKKy8qMHgxZjAqLwkJdTY0CXJ4X2Ryb3BfaXA7CisvKjB4MWY4Ki8JCXU2NAlyeF9kcm9wX3VkcDsKKy8qMHgyMDAqLwkJdTMyCXJ4X21hcmtlcl9wZHVfZnJtczsKKy8qMHgyMDQqLwkJdTMyCXJ4X2xhY3BkdV9mcm1zOworLyoweDIwOCovCQl1MzIJcnhfdW5rbm93bl9wZHVfZnJtczsKKy8qMHgyMGMqLwkJdTMyCXJ4X21hcmtlcl9yZXNwX3BkdV9mcm1zOworLyoweDIxMCovCQl1MzIJcnhfZmNzX2Rpc2NhcmQ7CisvKjB4MjE0Ki8JCXUzMglyeF9pbGxlZ2FsX3BkdV9mcm1zOworLyoweDIxOCovCQl1MzIJcnhfc3dpdGNoX2Rpc2NhcmQ7CisvKjB4MjFjKi8JCXUzMglyeF9sZW5fZGlzY2FyZDsKKy8qMHgyMjAqLwkJdTMyCXJ4X3JwYV9kaXNjYXJkOworLyoweDIyNCovCQl1MzIJcnhfbDJfbWdtdF9kaXNjYXJkOworLyoweDIyOCovCQl1MzIJcnhfcnRzX2Rpc2NhcmQ7CisvKjB4MjJjKi8JCXUzMglyeF90cmFzaF9kaXNjYXJkOworLyoweDIzMCovCQl1MzIJcnhfYnVmZl9mdWxsX2Rpc2NhcmQ7CisvKjB4MjM0Ki8JCXUzMglyeF9yZWRfZGlzY2FyZDsKKy8qMHgyMzgqLwkJdTMyCXJ4X3hnbWlpX2N0cmxfZXJyX2NudDsKKy8qMHgyM2MqLwkJdTMyCXJ4X3hnbWlpX2RhdGFfZXJyX2NudDsKKy8qMHgyNDAqLwkJdTMyCXJ4X3hnbWlpX2NoYXIxX21hdGNoOworLyoweDI0NCovCQl1MzIJcnhfeGdtaWlfZXJyX3N5bTsKKy8qMHgyNDgqLwkJdTMyCXJ4X3hnbWlpX2NvbHVtbjFfbWF0Y2g7CisvKjB4MjRjKi8JCXUzMglyeF94Z21paV9jaGFyMl9tYXRjaDsKKy8qMHgyNTAqLwkJdTMyCXJ4X2xvY2FsX2ZhdWx0OworLyoweDI1NCovCQl1MzIJcnhfeGdtaWlfY29sdW1uMl9tYXRjaDsKKy8qMHgyNTgqLwkJdTMyCXJ4X2pldHRpc29uOworLyoweDI1YyovCQl1MzIJcnhfcmVtb3RlX2ZhdWx0OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzIC0gWE1BQyBWcGF0aCBUeCBTdGF0aXN0aWNzCisgKgorICogQHR4X3R0bF9ldGhfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIE1BQyBmcmFtZXMuCisgKiBAdHhfdHRsX2V0aF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBmcmFtZXMsCisgKiAgICAgICAgICAgICBub3QgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuCisgKiAgICAgICAgICAgICBUbyBkZXRlcm1pbmUgdGhlIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBmcmFtZXMsIGluY2x1ZGluZworICogICAgICAgICAgICAgZnJhbWluZyBjaGFyYWN0ZXJzLCBtdWx0aXBseSBUWF9UVExfRVRIX0ZSTVMgYnkgOCBhbmQgYWRkIGl0IHRvCisgKiAgICAgICAgICAgICB0aGlzIHN0YXQgKHRoZSBkZXZpY2UgYWx3YXlzIHByZXBlbmRzIDggYnl0ZXMgb2YgcHJlYW1ibGUgZm9yCisgKiAgICAgICAgICAgICBlYWNoIGZyYW1lKQorICogQHR4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQKKyAqICAgICAgICAgICAgIGZyYW1lcy4KKyAqIEB0eF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIGEgZ3JvdXAgYWRkcmVzcworICogICAgICAgICAgICAgb3RoZXIgdGhhbiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCisgKiBAdHhfYmNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIGZyYW1lcyB0byB0aGUgYnJvYWRjYXN0CisgKiAgICAgICAgICAgICBncm91cCBhZGRyZXNzLgorICogQHR4X3VjYXN0X2ZybXM6IENvdW50IG9mIHRyYW5zbWl0dGVkIGZyYW1lcyBjb250YWluaW5nIGEgdW5pY2FzdCBhZGRyZXNzLgorICogICAgICAgICAgICAgSW5jbHVkZXMgZGlzY2FyZGVkIGZyYW1lcyB0aGF0IGFyZSBub3Qgc2VudCB0byB0aGUgbmV0d29yay4KKyAqIEB0eF90YWdnZWRfZnJtczogQ291bnQgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzIGNvbnRhaW5pbmcgYSBWTEFOIHRhZy4KKyAqIEB0eF92bGRfaXA6IENvdW50IG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfdmxkX2lwX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0CisgKiAgICAgICAgICAgIGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfaWNtcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgbWVzc2FnZXMgbm90IHNlbnQgZHVlCisgKiAgICAgICAgICAgIHRvIHByb2JsZW1zIHdpdGhpbiBJQ01QLgorICogQHR4X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzLiBEb2VzIG5vdCBpbmNsdWRlIHNlZ21lbnRzCisgKiAgICAgICAgICAgIGNvbnRhaW5pbmcgcmV0cmFuc21pdHRlZCBvY3RldHMuCisgKiBAdHhfcnN0X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIFJTVCBmbGFnLgorICogQHR4X3VkcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVURQIGRhdGFncmFtcy4KKyAqIEB0eF91bmtub3duX3Byb3RvY29sOiBJbmNyZW1lbnRzIHdoZW4gdGhlIFRQQSBlbmNvdW50ZXJzIGFuIHVua25vd24gcHJvdG9jb2wsCisgKiAgICAgICAgICAgIHN1Y2ggYXMgYSBuZXcgSVB2NiBleHRlbnNpb24gaGVhZGVyLCBvciBhbiB1bnN1cHBvcnRlZCBSb3V0aW5nCisgKiAgICAgICAgICAgIFR5cGUuIFRoZSBwYWNrZXQgc3RpbGwgaGFzIGEgY2hlY2tzdW0gY2FsY3VsYXRlZCBidXQgaXQgbWF5IGJlCisgKiAgICAgICAgICAgIGluY29ycmVjdC4KKyAqIEB0eF9sb3N0X2lwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkCisgKiAgICAgICAgICAgIHRvIHRoZSBuZXR3b3JrLiBJbmNyZW1lbnRzIGJlY2F1c2Ugb2Y6IDEpIEFuIGludGVybmFsIHByb2Nlc3NpbmcKKyAqICAgICAgICAgICAgZXJyb3IgKHN1Y2ggYXMgYW4gdW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IpLiAyKSBBIGZyYW1lIHBhcnNpbmcKKyAqICAgICAgICAgICAgZXJyb3IgZHVyaW5nIElQIGNoZWNrc3VtIGNhbGN1bGF0aW9uLgorICogQHR4X3BhcnNlX2Vycm9yOiBJbmNyZW1lbnRzIHdoZW4gdGhlIFRQQSBpcyB1bmFibGUgdG8gcGFyc2UgYSBwYWNrZXQuIFRoaXMKKyAqICAgICAgICAgICAgZ2VuZXJhbGx5IG9jY3VycyB3aGVuIGEgcGFja2V0IGlzIGNvcnJ1cHQgc29tZWhvdywgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIHBhY2tldHMgdGhhdCBoYXZlIElQIHZlcnNpb24gbWlzbWF0Y2hlcywgaW52YWxpZCBMYXllciAyIGNvbnRyb2wKKyAqICAgICAgICAgICAgZmllbGRzLCBldGMuIEwzL0w0IGNoZWNrc3VtcyBhcmUgbm90IG9mZmxvYWRlZCwgYnV0IHRoZSBwYWNrZXQKKyAqICAgICAgICAgICAgaXMgc3RpbGwgYmUgdHJhbnNtaXR0ZWQuCisgKiBAdHhfdGNwX29mZmxvYWQ6IEZvciBmcmFtZXMgYmVsb25naW5nIHRvIG9mZmxvYWRlZCBzZXNzaW9ucyBvbmx5LCBhIGNvdW50CisgKiAgICAgICAgICAgIG9mIHRyYW5zbWl0dGVkIFRDUCBzZWdtZW50cy4gRG9lcyBub3QgaW5jbHVkZSBzZWdtZW50cyBjb250YWluaW5nCisgKiAgICAgICAgICAgIHJldHJhbnNtaXR0ZWQgb2N0ZXRzLgorICogQHR4X3JldHhfdGNwX29mZmxvYWQ6IEZvciBmcmFtZXMgYmVsb25naW5nIHRvIG9mZmxvYWRlZCBzZXNzaW9ucyBvbmx5LCB0aGUKKyAqICAgICAgICAgICAgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzIHJldHJhbnNtaXR0ZWQuIFJldHJhbnNtaXR0ZWQgc2VnbWVudHMKKyAqICAgICAgICAgICAgdGhhdCBhcmUgc291cmNlZCBieSB0aGUgaG9zdCBhcmUgY291bnRlZCBieSB0aGUgaG9zdC4KKyAqIEB0eF9sb3N0X2lwX29mZmxvYWQ6IEZvciBmcmFtZXMgYmVsb25naW5nIHRvIG9mZmxvYWRlZCBzZXNzaW9ucyBvbmx5LCBhIGNvdW50CisgKiAgICAgICAgICAgIG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlCisgKiAgICAgICAgICAgIG5ldHdvcmsuCisgKgorICogWE1BQyBWcGF0aCBUWCBTdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzIHsKKwl1NjQJdHhfdHRsX2V0aF9mcm1zOworCXU2NAl0eF90dGxfZXRoX29jdGV0czsKKwl1NjQJdHhfZGF0YV9vY3RldHM7CisJdTY0CXR4X21jYXN0X2ZybXM7CisJdTY0CXR4X2JjYXN0X2ZybXM7CisJdTY0CXR4X3VjYXN0X2ZybXM7CisJdTY0CXR4X3RhZ2dlZF9mcm1zOworCXU2NAl0eF92bGRfaXA7CisJdTY0CXR4X3ZsZF9pcF9vY3RldHM7CisJdTY0CXR4X2ljbXA7CisJdTY0CXR4X3RjcDsKKwl1NjQJdHhfcnN0X3RjcDsKKwl1NjQJdHhfdWRwOworCXUzMgl0eF91bmtub3duX3Byb3RvY29sOworCXUzMgl0eF9sb3N0X2lwOworCXUzMgl1bnVzZWQxOworCXUzMgl0eF9wYXJzZV9lcnJvcjsKKwl1NjQJdHhfdGNwX29mZmxvYWQ7CisJdTY0CXR4X3JldHhfdGNwX29mZmxvYWQ7CisJdTY0CXR4X2xvc3RfaXBfb2ZmbG9hZDsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cyAtIFhNQUMgVnBhdGggUlggU3RhdGlzdGljcworICoKKyAqIEByeF90dGxfZXRoX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBNQUMgZnJhbWVzLgorICogQHJ4X3ZsZF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcy4gRG9lcyBub3QgaW5jbHVkZQorICogICAgICAgICAgICBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X29mZmxvYWRfZnJtczogQ291bnQgb2Ygb2ZmbG9hZGVkIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8KKyAqICAgICAgICAgICAgdGhlIGhvc3QuCisgKiBAcnhfdHRsX2V0aF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cyBvZiByZWNlaXZlZCBmcmFtZXMsIG5vdCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgZnJhbWluZyBjaGFyYWN0ZXJzIChpLmUuIGxlc3MgZnJhbWluZyBiaXRzKS4gT25seSBjb3VudHMgb2N0ZXRzCisgKiAgICAgICAgICAgIG9mIGZyYW1lcyB0aGF0IGFyZSBhdCBsZWFzdCAxNCBieXRlcyAoMTggYnl0ZXMgZm9yIFZMQU4tdGFnZ2VkKQorICogICAgICAgICAgICBiZWZvcmUgRkNTLiBUbyBkZXRlcm1pbmUgdGhlIHRvdGFsIG9jdGV0cyBvZiByZWNlaXZlZCBmcmFtZXMsCisgKiAgICAgICAgICAgIGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMsIG11bHRpcGx5IFJYX1RUTF9FVEhfRlJNUyBieSA4IGFuZAorICogICAgICAgICAgICBhZGQgaXQgdG8gdGhpcyBzdGF0ICh0aGUgc3RhdCBSWF9UVExfRVRIX0ZSTVMgb25seSBjb3VudHMgZnJhbWVzCisgKiAgICAgICAgICAgIHRoYXQgaGF2ZSB0aGUgcmVxdWlyZWQgOCBieXRlcyBvZiBwcmVhbWJsZSkuCisgKiBAcnhfZGF0YV9vY3RldHM6IENvdW50IG9mIGRhdGEgYW5kIHBhZGRpbmcgb2N0ZXRzIG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZAorICogICAgICAgICAgICBmcmFtZXMuIERvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9vZmZsb2FkX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzLCBub3QgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycywKKyAqICAgICAgICAgICAgb2Ygb2ZmbG9hZGVkIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIGhvc3QuCisgKiBAcnhfdmxkX21jYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBNQUMgZnJhbWVzIGNvbnRhaW5pbmcgYQorICogICAgICAgICAgICBub25icm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQgd2l0aAorICogICAgICAgICAgICBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3ZsZF9iY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nIHRoZQorICogICAgICAgICAgICBicm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQgd2l0aAorICogICAgICAgICAgICBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X2FjY2VwdGVkX3VjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIHVuaWNhc3QgYWRkcmVzcy4gT25seSBpbmNsdWRlcyBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZQorICogICAgICAgICAgICBzeXN0ZW0uCisgKiBAcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIG5vbi11bmljYXN0IChicm9hZGNhc3Qgb3IgbXVsdGljYXN0KSBhZGRyZXNzLiBPbmx5IGluY2x1ZGVzCisgKiAgICAgICAgICAgIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHN5c3RlbS4gQ291bGQgaW5jbHVkZSwgZm9yIGluc3RhbmNlLAorICogICAgICAgICAgICBub24tdW5pY2FzdCBmcmFtZXMgdGhhdCBjb250YWluIEZDUyBlcnJvcnMgaWYgdGhlIE1BQ19FUlJPUl9DRkcKKyAqICAgICAgICAgICAgcmVnaXN0ZXIgaXMgc2V0IHRvIHBhc3MgRkNTLWVycm9yZWQgZnJhbWVzIHRvIHRoZSBob3N0LgorICogQHJ4X3RhZ2dlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZyBhIFZMQU4gdGFnLgorICogQHJ4X2xvbmdfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIFJYX01BWF9QWUxEX0xFTgorICogICAgICAgICAgICArIDE4IGJ5dGVzICgrIDIyIGJ5dGVzIGlmIFZMQU4tdGFnZ2VkKS4KKyAqIEByeF91c2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIGxlc3MgdGhhbiA2NCBvY3RldHMsIHRoYXQgYXJlIG90aGVyd2lzZSB3ZWxsLWZvcm1lZC4KKyAqICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNvdW50cyBydW50cy4KKyAqIEByeF9vc2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIG1vcmUgdGhhbiAxNTE4IG9jdGV0cywgdGhhdCBhcmUgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgIHdlbGwtZm9ybWVkLgorICogQHJ4X2ZyYWdfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIGxlc3MgdGhhbiA2NCBvY3RldHMgdGhhdCBoYWQgYmFkIEZDUy4KKyAqICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNvdW50cyBmcmFnbWVudHMuCisgKiBAcnhfamFiYmVyX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBtb3JlIHRoYW4gMTUxOCBvY3RldHMgdGhhdCBoYWQgYmFkIEZDUy4gSW4gb3RoZXIKKyAqICAgICAgICAgICAgd29yZHMsIGNvdW50cyBqYWJiZXJzLgorICogQHJ4X3R0bF82NF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoIChpbmNsdWRpbmcKKyAqICAgICAgICAgICAgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgZXhhY3RseSA2NCBvY3RldHMuIEluY2x1ZGVzIGZyYW1lcworICogICAgICAgICAgICByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzY1XzEyN19mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzCisgKiAJCXdpdGggbGVuZ3RoIChpbmNsdWRpbmcKKyAqICAgICAgICAgICAgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA2NSBhbmQgMTI3IG9jdGV0cyBpbmNsdXNpdmUuCisgKiAgICAgICAgICAgIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsCisgKiAgICAgICAgICAgIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzEyOF8yNTVfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpCisgKiAgICAgICAgICAgIG9mIGJldHdlZW4gMTI4IGFuZCAyNTUgb2N0ZXRzCisgKiAgICAgICAgICAgIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywKKyAqICAgICAgICAgICAgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfMjU2XzUxMV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykKKyAqICAgICAgICAgICAgb2YgYmV0d2VlbiAyNTYgYW5kIDUxMSBvY3RldHMKKyAqICAgICAgICAgICAgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvcgorICogICAgICAgICAgICBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF81MTJfMTAyM19mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA1MTIgYW5kIDEwMjMKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfMTAyNF8xNTE4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDEwMjQgYW5kIDE1MTgKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfMTUxOV80MDk1X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDE1MTkgYW5kIDQwOTUKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNDA5Nl84MTkxX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDQwOTYgYW5kIDgxOTEKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfODE5Ml9tYXhfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gODE5MiBhbmQKKyAqICAgICAgICAgICAgUlhfTUFYX1BZTERfTEVOKzE4IG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZAorICogICAgICAgICAgICB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsX2d0X21heF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgZXhjZWVkaW5nIFJYX01BWF9QWUxEX0xFTisxOAorICogICAgICAgICAgICAoKzIyIGJ5dGVzIGlmIFZMQU4tdGFnZ2VkKSBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMKKyAqICAgICAgICAgICAgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X2lwOiBDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMuIEluY2x1ZGVzIGVycm9yZWQgSVAgZGF0YWdyYW1zLgorICogQHJ4X2FjY2VwdGVkX2lwOiBDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMgdGhhdAorICogCQlhcmUgcGFzc2VkIHRvIHRoZSBzeXN0ZW0uCisgKiBAcnhfaXBfb2N0ZXRzOiBDb3VudCBvZiBudW1iZXIgb2Ygb2N0ZXRzIGluIHJlY2VpdmVkIElQIGRhdGFncmFtcy4KKyAqICAgICAgICAgICAgSW5jbHVkZXMgZXJyb3JlZCBJUCBkYXRhZ3JhbXMuCisgKiBAcnhfZXJyX2lwOiBDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMgY29udGFpbmluZyBlcnJvcnMuIEZvciBleGFtcGxlLAorICogICAgICAgICAgICBiYWQgSVAgY2hlY2tzdW0uCisgKiBAcnhfaWNtcDogQ291bnQgb2YgcmVjZWl2ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgZXJyb3JlZCBJQ01QIG1lc3NhZ2VzLgorICogQHJ4X3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLiBJbmNsdWRlcyBlcnJvcmVkIFRDUCBzZWdtZW50cy4KKyAqICAgICAgICAgICAgIE5vdGU6IFRoaXMgc3RhdCBjb250YWlucyBhIGNvdW50IG9mIGFsbCByZWNlaXZlZCBUQ1Agc2VnbWVudHMsCisgKiAgICAgICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZXkgcGVydGFpbiB0byBhbiBlc3RhYmxpc2hlZAorICogICAgICAgICAgICAgY29ubmVjdGlvbi4KKyAqIEByeF91ZHA6IENvdW50IG9mIHJlY2VpdmVkIFVEUCBkYXRhZ3JhbXMuCisgKiBAcnhfZXJyX3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgZXJyb3JzLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgIGJhZCBUQ1AgY2hlY2tzdW0uCisgKiBAcnhfbG9zdF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICogICAgICAgICAgICAgU2VlIFJYX1FVRVVFX0ZVTExfRElTQ0FSRCBhbmQgUlhfUkVEX0RJU0NBUkQKKyAqICAgICAgICAgICAgIGZvciBhIGxpc3Qgb2YgcmVhc29ucy4KKyAqIEByeF9sb3N0X2lwOiBDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgICB0aGUgaG9zdC4gU2VlIFJYX0xPU1RfRlJNUyBmb3IgYSBsaXN0IG9mIHJlYXNvbnMuCisgKiBAcnhfbG9zdF9pcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgYSBjb3VudAorICogICAgICAgICAgICAgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKyAqICAgICAgICAgICAgIFNlZSBSWF9MT1NUX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X3ZhcmlvdXNfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlCisgKiAgICAgICAgICAgICB0aGUgdGFyZ2V0IHJlY2VpdmUgcXVldWUgaXMgZnVsbC4KKyAqIEByeF9zbGVlcF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgIHRhcmdldCBWUEFUSCBpcyBhc2xlZXAgKGEgV2FrZS1vbi1MQU4gbWFnaWMgcGFja2V0IGNhbiBiZSB1c2VkCisgKiAgICAgICAgICAgIHRvIGF3YWtlbiB0aGUgVlBBVEgpLgorICogQHJ4X3JlZF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2Ugb2YgUkVECisgKiAgICAgICAgICAgIChSYW5kb20gRWFybHkgRGlzY2FyZCkuCisgKiBAcnhfcXVldWVfZnVsbF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UKKyAqICAgICAgICAgICAgIHRoZSB0YXJnZXQgcmVjZWl2ZSBxdWV1ZSBpcyBmdWxsLgorICogQHJ4X21wYV9va19mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBwYXNzIHRoZSBNUEEgY2hlY2tzLgorICoKKyAqIFhNQUMgVnBhdGggUlggU3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cyB7CisJdTY0CXJ4X3R0bF9ldGhfZnJtczsKKwl1NjQJcnhfdmxkX2ZybXM7CisJdTY0CXJ4X29mZmxvYWRfZnJtczsKKwl1NjQJcnhfdHRsX2V0aF9vY3RldHM7CisJdTY0CXJ4X2RhdGFfb2N0ZXRzOworCXU2NAlyeF9vZmZsb2FkX29jdGV0czsKKwl1NjQJcnhfdmxkX21jYXN0X2ZybXM7CisJdTY0CXJ4X3ZsZF9iY2FzdF9mcm1zOworCXU2NAlyeF9hY2NlcHRlZF91Y2FzdF9mcm1zOworCXU2NAlyeF9hY2NlcHRlZF9udWNhc3RfZnJtczsKKwl1NjQJcnhfdGFnZ2VkX2ZybXM7CisJdTY0CXJ4X2xvbmdfZnJtczsKKwl1NjQJcnhfdXNpemVkX2ZybXM7CisJdTY0CXJ4X29zaXplZF9mcm1zOworCXU2NAlyeF9mcmFnX2ZybXM7CisJdTY0CXJ4X2phYmJlcl9mcm1zOworCXU2NAlyeF90dGxfNjRfZnJtczsKKwl1NjQJcnhfdHRsXzY1XzEyN19mcm1zOworCXU2NAlyeF90dGxfMTI4XzI1NV9mcm1zOworCXU2NAlyeF90dGxfMjU2XzUxMV9mcm1zOworCXU2NAlyeF90dGxfNTEyXzEwMjNfZnJtczsKKwl1NjQJcnhfdHRsXzEwMjRfMTUxOF9mcm1zOworCXU2NAlyeF90dGxfMTUxOV80MDk1X2ZybXM7CisJdTY0CXJ4X3R0bF80MDk2XzgxOTFfZnJtczsKKwl1NjQJcnhfdHRsXzgxOTJfbWF4X2ZybXM7CisJdTY0CXJ4X3R0bF9ndF9tYXhfZnJtczsKKwl1NjQJcnhfaXA7CisJdTY0CXJ4X2FjY2VwdGVkX2lwOworCXU2NAlyeF9pcF9vY3RldHM7CisJdTY0CXJ4X2Vycl9pcDsKKwl1NjQJcnhfaWNtcDsKKwl1NjQJcnhfdGNwOworCXU2NAlyeF91ZHA7CisJdTY0CXJ4X2Vycl90Y3A7CisJdTY0CXJ4X2xvc3RfZnJtczsKKwl1NjQJcnhfbG9zdF9pcDsKKwl1NjQJcnhfbG9zdF9pcF9vZmZsb2FkOworCXUxNglyeF92YXJpb3VzX2Rpc2NhcmQ7CisJdTE2CXJ4X3NsZWVwX2Rpc2NhcmQ7CisJdTE2CXJ4X3JlZF9kaXNjYXJkOworCXUxNglyeF9xdWV1ZV9mdWxsX2Rpc2NhcmQ7CisJdTY0CXJ4X21wYV9va19mcm1zOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzIC0gWE1BQyBTdGF0aXN0aWNzCisgKgorICogQGFnZ3Jfc3RhdHM6IFN0YXRpc3RpY3Mgb24gYWdncmVnYXRlIHBvcnQocG9ydCAwLCBwb3J0IDEpCisgKiBAcG9ydF9zdGF0czogU3RhdGljc3RpY3Mgb24gcG9ydHMod2lyZSAwLCB3aXJlIDEsIGxhZykKKyAqIEB2cGF0aF90eF9zdGF0czogUGVyIHZwYXRoIFhNQUMgVFggc3RhdHMKKyAqIEB2cGF0aF9yeF9zdGF0czogUGVyIHZwYXRoIFhNQUMgUlggc3RhdHMKKyAqCisgKiBYTUFDIFN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMgeworCXN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cworCQkJCWFnZ3Jfc3RhdHNbVlhHRV9IV19NQUNfTUFYX01BQ19QT1JUX0lEXTsKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMKKwkJCQlwb3J0X3N0YXRzW1ZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRCsxXTsKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzCisJCQkJdnBhdGhfdHhfc3RhdHNbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF9yeF9zdGF0cworCQkJCXZwYXRoX3J4X3N0YXRzW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvIC0gVGl0YW4gdnBhdGggaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqIEBpbmlfbnVtX213cl9zZW50OiBUaGUgbnVtYmVyIG9mIFBDSSBtZW1vcnkgd3JpdGVzIGluaXRpYXRlZCBieSB0aGUgUElDIGJsb2NrCisgKiAgICAgICAgICAgICBmb3IgdGhlIGdpdmVuIFZQQVRICisgKiBAaW5pX251bV9tcmRfc2VudDogVGhlIG51bWJlciBvZiBQQ0kgbWVtb3J5IHJlYWRzIGluaXRpYXRlZCBieSB0aGUgUElDIGJsb2NrCisgKiBAaW5pX251bV9jcGxfcmN2ZDogVGhlIG51bWJlciBvZiBQQ0kgcmVhZCBjb21wbGV0aW9ucyByZWNlaXZlZCBieSB0aGUKKyAqICAgICAgICAgICAgIFBJQyBibG9jaworICogQGluaV9udW1fbXdyX2J5dGVfc2VudDogVGhlIG51bWJlciBvZiBQQ0kgbWVtb3J5IHdyaXRlIGJ5dGVzIHNlbnQgYnkgdGhlIFBJQworICogICAgICAgICAgICAgYmxvY2sgdG8gdGhlIGhvc3QKKyAqIEBpbmlfbnVtX2NwbF9ieXRlX3JjdmQ6IFRoZSBudW1iZXIgb2YgUENJIHJlYWQgY29tcGxldGlvbiBieXRlcyByZWNlaXZlZCBieQorICogICAgICAgICAgICAgdGhlIFBJQyBibG9jaworICogQHdyY3JkdGFyYl94b2ZmOiBUQkQKKyAqIEByZGNyZHRhcmJfeG9mZjogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQwOiBUQkQKKyAqIEB2cGF0aF9nZW5zdGF0c19jb3VudDE6IFRCRAorICogQHZwYXRoX2dlbnN0YXRzX2NvdW50MjogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQzOiBUQkQKKyAqIEB2cGF0aF9nZW5zdGF0c19jb3VudDQ6IFRCRAorICogQHZwYXRoX2dlbm5zdGF0c19jb3VudDU6IFRCRAorICogQHR4X3N0YXRzOiBUcmFuc21pdCBzdGF0cworICogQHJ4X3N0YXRzOiBSZWNlaXZlIHN0YXRzCisgKiBAcHJvZ19ldmVudF92bnVtMTogUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4gSW5jcmVtZW50cyB3aGVuIGludGVybmFsIGxvZ2ljCisgKiAgICAgICAgICAgICBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICBYTUFDX1NUQVRTX0NGRy5FVkVOVF9WTlVNMV9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAcHJvZ19ldmVudF92bnVtMDogUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4gSW5jcmVtZW50cyB3aGVuIGludGVybmFsIGxvZ2ljCisgKiAgICAgICAgICAgICBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICBYTUFDX1NUQVRTX0NGRy5FVkVOVF9WTlVNMF9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAcHJvZ19ldmVudF92bnVtMzogUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4gSW5jcmVtZW50cyB3aGVuIGludGVybmFsIGxvZ2ljCisgKiAgICAgICAgICAgICBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICBYTUFDX1NUQVRTX0NGRy5FVkVOVF9WTlVNM19DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAcHJvZ19ldmVudF92bnVtMjogUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4gSW5jcmVtZW50cyB3aGVuIGludGVybmFsIGxvZ2ljCisgKiAgICAgICAgICAgICBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgICAgICAgICAgICBYTUFDX1NUQVRTX0NGRy5FVkVOVF9WTlVNMl9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAcnhfbXVsdGlfY2FzdF9mcmFtZV9kaXNjYXJkOiBUQkQKKyAqIEByeF9mcm1fdHJhbnNmZXJyZWQ6IFRCRAorICogQHJ4ZF9yZXR1cm5lZDogVEJECisgKiBAcnhfbXBhX2xlbl9mYWlsX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcworICogCQl0aGF0IGZhaWwgdGhlIE1QQSBsZW5ndGggY2hlY2sKKyAqIEByeF9tcGFfbXJrX2ZhaWxfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzCisgKiAJCXRoYXQgZmFpbCB0aGUgTVBBIG1hcmtlciBjaGVjaworICogQHJ4X21wYV9jcmNfZmFpbF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBmYWlsIHRoZSBNUEEgQ1JDIGNoZWNrCisgKiBAcnhfcGVybWl0dGVkX2ZybXM6IENvdW50IG9mIGZyYW1lcyB0aGF0IHBhc3MgdGhyb3VnaCB0aGUgRkFVIGFuZCBvbiB0byB0aGUKKyAqICAgICAgICAgICAgIGZyYW1lIGJ1ZmZlciAoYW5kIHN1YnNlcXVlbnRseSB0byB0aGUgaG9zdCkuCisgKiBAcnhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM6IENvdW50IG9mIHJlY2VpdmUgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZAorICogICAgICAgICAgICAgYmVjYXVzZSB0aGUgVlBBVEggaXMgaW4gcmVzZXQKKyAqIEByeF93b2xfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgIm1hZ2ljIHBhY2tldCIgZnJhbWVzLiBTdGF0IGluY3JlbWVudHMKKyAqICAgICAgICAgICAgIHdoZW5ldmVyIHRoZSByZWNlaXZlZCBmcmFtZSBtYXRjaGVzIHRoZSBWUEFUSCdzIFdha2Utb24tTEFOCisgKiAgICAgICAgICAgICBzaWduYXR1cmUocykgQ1JDLgorICogQHR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkCisgKiAgICAgICAgICAgICBiZWNhdXNlIHRoZSBWUEFUSCBpcyBpbiByZXNldC4gSW5jbHVkZXMgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZAorICogICAgICAgICAgICAgYmVjYXVzZSB0aGUgY3VycmVudCBWUElOIGRvZXMgbm90IG1hdGNoIHRoYXQgVlBJTiBvZiB0aGUgZnJhbWUKKyAqCisgKiBUaXRhbiB2cGF0aCBoYXJkd2FyZSBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvIHsKKy8qMHgwMDAqLwl1MzIgaW5pX251bV9td3Jfc2VudDsKKy8qMHgwMDQqLwl1MzIgdW51c2VkMTsKKy8qMHgwMDgqLwl1MzIgaW5pX251bV9tcmRfc2VudDsKKy8qMHgwMGMqLwl1MzIgdW51c2VkMjsKKy8qMHgwMTAqLwl1MzIgaW5pX251bV9jcGxfcmN2ZDsKKy8qMHgwMTQqLwl1MzIgdW51c2VkMzsKKy8qMHgwMTgqLwl1NjQgaW5pX251bV9td3JfYnl0ZV9zZW50OworLyoweDAyMCovCXU2NCBpbmlfbnVtX2NwbF9ieXRlX3JjdmQ7CisvKjB4MDI4Ki8JdTMyIHdyY3JkdGFyYl94b2ZmOworLyoweDAyYyovCXUzMiB1bnVzZWQ0OworLyoweDAzMCovCXUzMiByZGNyZHRhcmJfeG9mZjsKKy8qMHgwMzQqLwl1MzIgdW51c2VkNTsKKy8qMHgwMzgqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQwOworLyoweDAzYyovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDE7CisvKjB4MDQwKi8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50MjsKKy8qMHgwNDQqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQzOworLyoweDA0OCovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDQ7CisvKjB4MDRjKi8JdTMyIHVudXNlZDY7CisvKjB4MDUwKi8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50NTsKKy8qMHgwNTQqLwl1MzIgdW51c2VkNzsKKy8qMHgwNTgqLwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzIHR4X3N0YXRzOworLyoweDBlOCovCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgcnhfc3RhdHM7CisvKjB4MjIwKi8JdTY0IHVudXNlZDk7CisvKjB4MjI4Ki8JdTMyIHByb2dfZXZlbnRfdm51bTE7CisvKjB4MjJjKi8JdTMyIHByb2dfZXZlbnRfdm51bTA7CisvKjB4MjMwKi8JdTMyIHByb2dfZXZlbnRfdm51bTM7CisvKjB4MjM0Ki8JdTMyIHByb2dfZXZlbnRfdm51bTI7CisvKjB4MjM4Ki8JdTE2IHJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZDsKKy8qMHgyM2EqLwl1OCB1bnVzZWQxMFs2XTsKKy8qMHgyNDAqLwl1MzIgcnhfZnJtX3RyYW5zZmVycmVkOworLyoweDI0NCovCXUzMiB1bnVzZWQxMTsKKy8qMHgyNDgqLwl1MTYgcnhkX3JldHVybmVkOworLyoweDI0YSovCXU4IHVudXNlZDEyWzZdOworLyoweDI1MiovCXUxNiByeF9tcGFfbGVuX2ZhaWxfZnJtczsKKy8qMHgyNTQqLwl1MTYgcnhfbXBhX21ya19mYWlsX2ZybXM7CisvKjB4MjU2Ki8JdTE2IHJ4X21wYV9jcmNfZmFpbF9mcm1zOworLyoweDI1OCovCXUxNiByeF9wZXJtaXR0ZWRfZnJtczsKKy8qMHgyNWMqLwl1NjQgcnhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7CisvKjB4MjVlKi8JdTY0IHJ4X3dvbF9mcm1zOworLyoweDI2MCovCXU2NCB0eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczsKK30gX19wYWNrZWQ7CisKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfbXJwY2ltX2luZm8gLSBUaXRhbiBtcnBjaW0gaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqIEBwaWMuaW5pX3JkX2Ryb3AgIAkgMHgwMDAwICAJIDQgIAkgTnVtYmVyIG9mIERNQSByZWFkcyBpbml0aWF0ZWQKKyAqICBieSB0aGUgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIFZQQVRIIGlzIG91dCBvZiBzZXJ2aWNlCisgKiBAcGljLmluaV93cl9kcm9wIAkweDAwMDQgCTQgCU51bWJlciBvZiBETUEgd3JpdGVzIGluaXRpYXRlZCBieSB0aGUKKyAqICBhZGFwdGVyIHRoYXQgd2VyZSBkaXNjYXJlZCBiZWNhdXNlIHRoZSBWUEFUSCBpcyBvdXQgb2Ygc2VydmljZQorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUwXSAJMHgwMDA4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMV0gCTB4MDAxMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTJdIAkweDAwMTggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUzXSAJMHgwMDIwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNF0gCTB4MDAyOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTVdIAkweDAwMzAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU2XSAJMHgwMDM4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lN10gCTB4MDA0MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZThdIAkweDAwNDggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU5XSAJMHgwMDUwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTBdIAkweDAwNTggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMV0gCTB4MDA2MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEyXSAJMHgwMDY4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTNdIAkweDAwNzAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNF0gCTB4MDA3OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE1XSAJMHgwMDgwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTZdIAkweDAwODggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUwXSAJMHgwMDkwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTFdIAkweDAwOTggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMl0gCTB4MDBhMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUzXSAJMHgwMGE4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTRdIAkweDAwYjAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNV0gCTB4MDBiOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU2XSAJMHgwMGMwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTddIAkweDAwYzggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOF0gCTB4MDBkMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU5XSAJMHgwMGQ4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEwXSAJMHgwMGUwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTExXSAJMHgwMGU4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEyXSAJMHgwMGYwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEzXSAJMHgwMGY4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE0XSAJMHgwMTAwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE1XSAJMHgwMTA4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE2XSAJMHgwMTEwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUwXSAJMHgwMTE4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTFdIAkweDAxMjAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMl0gCTB4MDEyOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUzXSAJMHgwMTMwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTRdIAkweDAxMzggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNV0gCTB4MDE0MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU2XSAJMHgwMTQ4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTddIAkweDAxNTAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOF0gCTB4MDE1OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU5XSAJMHgwMTYwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEwXSAJMHgwMTY4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTExXSAJMHgwMTcwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEyXSAJMHgwMTc4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEzXSAJMHgwMTgwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE0XSAJMHgwMTg4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE1XSAJMHgwMTkwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE2XSAJMHgwMTk4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMuaW5pX3JkX3ZwaW5fZHJvcCAJMHgwMWEwIAk0IAlOdW1iZXIgb2YgRE1BIHJlYWRzIGluaXRpYXRlZCBieQorICogIHRoZSBhZGFwdGVyIHRoYXQgd2VyZSBkaXNjYXJkZWQgYmVjYXVzZSB0aGUgVlBBVEggaW5zdGFuY2UgbnVtYmVyIGRvZXMKKyAqICBub3QgbWF0Y2gKKyAqIEBwaWMuaW5pX3dyX3ZwaW5fZHJvcCAJMHgwMWE0IAk0IAlOdW1iZXIgb2YgRE1BIHdyaXRlcyBpbml0aWF0ZWQKKyAqICBieSB0aGUgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIFZQQVRIIGluc3RhbmNlIG51bWJlcgorICogIGRvZXMgbm90IG1hdGNoCisgKiBAcGljLmdlbnN0YXRzX2NvdW50MCAJMHgwMWE4IAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICMxLiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzBfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBpYy5nZW5zdGF0c19jb3VudDEgCTB4MDFhYyAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjMi4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFMxX0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQyIAkweDAxYjAgCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzMuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTMl9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGljLmdlbnN0YXRzX2NvdW50MyAJMHgwMWI0IAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICM0LiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzNfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBpYy5nZW5zdGF0c19jb3VudDQgCTB4MDFiOCAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjNS4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFM0X0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQ1IAkweDAxYzAgCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzYuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTNV9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGNpLnJzdGRyb3BfY3BsIAkweDAxYzggCTQKKyAqIEBwY2kucnN0ZHJvcF9tc2cgCTB4MDFjYyAJNAorICogQHBjaS5yc3Rkcm9wX2NsaWVudDEgCTB4MDFkMCAJNAorICogQHBjaS5yc3Rkcm9wX2NsaWVudDAgCTB4MDFkNCAJNAorICogQHBjaS5yc3Rkcm9wX2NsaWVudDIgCTB4MDFkOCAJNAorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMF0gCTB4MDFlMiAJMiAJTnVtYmVyIG9mIHRpbWVzIGNvbXBsZXRpb24KKyAqICBoZWFkZXIgY3JlZGl0cyB3ZXJlIGRlcGxldGVkCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTBdIAkweDAxZTQgCTIgCU51bWJlciBvZiB0aW1lcyBub24gcG9zdGVkCisgKiAgaGVhZGVyIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTBdIAkweDAxZTYgCTIgCU51bWJlciBvZiB0aW1lcyB0aGUgcG9zdGVkCisgKiAgaGVhZGVyIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMV0gCTB4MDFlYSAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmUxXSAJMHgwMWVjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMV0gCTB4MDFlZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMl0gCTB4MDFmMiAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmUyXSAJMHgwMWY0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMl0gCTB4MDFmNiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lM10gCTB4MDFmYSAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmUzXSAJMHgwMWZjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lM10gCTB4MDFmZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lNF0gCTB4MDIwMiAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU0XSAJMHgwMjA0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lNF0gCTB4MDIwNiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lNV0gCTB4MDIwYSAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU1XSAJMHgwMjBjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lNV0gCTB4MDIwZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lNl0gCTB4MDIxMiAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU2XSAJMHgwMjE0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lNl0gCTB4MDIxNiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lN10gCTB4MDIxYSAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU3XSAJMHgwMjFjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lN10gCTB4MDIxZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lOF0gCTB4MDIyMiAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU4XSAJMHgwMjI0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lOF0gCTB4MDIyNiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lOV0gCTB4MDIyYSAJMgorICogQHBjaS5kZXBsX25waFt2cGxhbmU5XSAJMHgwMjJjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lOV0gCTB4MDIyZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTBdIAkweDAyMzIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTBdIAkweDAyMzQgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxMF0gCTB4MDIzNiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTFdIAkweDAyM2EgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTFdIAkweDAyM2MgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxMV0gCTB4MDIzZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTJdIAkweDAyNDIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTJdIAkweDAyNDQgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxMl0gCTB4MDI0NiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTNdIAkweDAyNGEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTNdIAkweDAyNGMgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxM10gCTB4MDI0ZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTRdIAkweDAyNTIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTRdIAkweDAyNTQgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxNF0gCTB4MDI1NiAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTVdIAkweDAyNWEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTVdIAkweDAyNWMgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxNV0gCTB4MDI1ZSAJMgorICogQHBjaS5kZXBsX2NwbGhbdnBsYW5lMTZdIAkweDAyNjIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMTZdIAkweDAyNjQgCTIKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUxNl0gCTB4MDI2NiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMF0gCTB4MDI2YSAJMiAJTnVtYmVyIG9mIHRpbWVzIGNvbXBsZXRpb24gZGF0YQorICogIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX25wZFt2cGxhbmUwXSAJMHgwMjZjIAkyIAlOdW1iZXIgb2YgdGltZXMgbm9uIHBvc3RlZCBkYXRhCisgKiAgY3JlZGl0cyB3ZXJlIGRlcGxldGVkCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMF0gCTB4MDI2ZSAJMiAJTnVtYmVyIG9mIHRpbWVzIHRoZSBwb3N0ZWQgZGF0YQorICogIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMV0gCTB4MDI3MiAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmUxXSAJMHgwMjc0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMV0gCTB4MDI3NiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMl0gCTB4MDI3YSAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmUyXSAJMHgwMjdjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMl0gCTB4MDI3ZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lM10gCTB4MDI4MiAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmUzXSAJMHgwMjg0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lM10gCTB4MDI4NiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lNF0gCTB4MDI4YSAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU0XSAJMHgwMjhjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lNF0gCTB4MDI4ZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lNV0gCTB4MDI5MiAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU1XSAJMHgwMjk0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lNV0gCTB4MDI5NiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lNl0gCTB4MDI5YSAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU2XSAJMHgwMjljIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lNl0gCTB4MDI5ZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lN10gCTB4MDJhMiAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU3XSAJMHgwMmE0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lN10gCTB4MDJhNiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lOF0gCTB4MDJhYSAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU4XSAJMHgwMmFjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lOF0gCTB4MDJhZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lOV0gCTB4MDJiMiAJMgorICogQHBjaS5kZXBsX25wZFt2cGxhbmU5XSAJMHgwMmI0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lOV0gCTB4MDJiNiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTBdIAkweDAyYmEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTBdIAkweDAyYmMgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxMF0gCTB4MDJiZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTFdIAkweDAyYzIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTFdIAkweDAyYzQgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxMV0gCTB4MDJjNiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTJdIAkweDAyY2EgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTJdIAkweDAyY2MgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxMl0gCTB4MDJjZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTNdIAkweDAyZDIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTNdIAkweDAyZDQgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxM10gCTB4MDJkNiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTRdIAkweDAyZGEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTRdIAkweDAyZGMgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxNF0gCTB4MDJkZSAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTVdIAkweDAyZTIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTVdIAkweDAyZTQgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxNV0gCTB4MDJlNiAJMgorICogQHBjaS5kZXBsX2NwbGRbdnBsYW5lMTZdIAkweDAyZWEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMTZdIAkweDAyZWMgCTIKKyAqIEBwY2kuZGVwbF9wZFt2cGxhbmUxNl0gCTB4MDJlZSAJMgorICogQHhnbWFjX3BvcnRbM107CisgKiBAeGdtYWNfYWdnclsyXTsKKyAqIEB4Z21hYy5nbG9iYWxfcHJvZ19ldmVudF9nbnVtMCAJMHgwYWUwIAk4IAlQcm9ncmFtbWFibGUgc3RhdGlzdGljLgorICogIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYyBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLkVWRU5UX0dOVU0wX0NGRyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqIEB4Z21hYy5nbG9iYWxfcHJvZ19ldmVudF9nbnVtMSAJMHgwYWU4IAk4IAlQcm9ncmFtbWFibGUgc3RhdGlzdGljLgorICogIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYyBkZXRlY3RzIGEgY2VydGFpbiBldmVudC4gU2VlIHJlZ2lzdGVyCisgKiAgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLkVWRU5UX0dOVU0xX0NGRyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqIEB4Z21hYy5vcnBfbHJvX2V2ZW50cyAJMHgwYWY4IAk4CisgKiBAeGdtYWMub3JwX2JzX2V2ZW50cyAJMHgwYjAwIAk4CisgKiBAeGdtYWMub3JwX2l3YXJwX2V2ZW50cyAJMHgwYjA4IAk4CisgKiBAeGdtYWMudHhfcGVybWl0dGVkX2ZybXMgCTB4MGIxNCAJNAorICogQHhnbWFjLnBvcnQyX3R4X2FueV9mcm1zIAkweDBiMWQgCTEKKyAqIEB4Z21hYy5wb3J0MV90eF9hbnlfZnJtcyAJMHgwYjFlIAkxCisgKiBAeGdtYWMucG9ydDBfdHhfYW55X2ZybXMgCTB4MGIxZiAJMQorICogQHhnbWFjLnBvcnQyX3J4X2FueV9mcm1zIAkweDBiMjUgCTEKKyAqIEB4Z21hYy5wb3J0MV9yeF9hbnlfZnJtcyAJMHgwYjI2IAkxCisgKiBAeGdtYWMucG9ydDBfcnhfYW55X2ZybXMgCTB4MGIyNyAJMQorICoKKyAqIFRpdGFuIG1ycGNpbSBoYXJkd2FyZSBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfbXJwY2ltX2luZm8geworLyoweDAwMDAqLwl1MzIJcGljX2luaV9yZF9kcm9wOworLyoweDAwMDQqLwl1MzIJcGljX2luaV93cl9kcm9wOworLyoweDAwMDgqLwlzdHJ1Y3QgeworCS8qMHgwMDAwKi8JdTMyCXBpY193cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZDsKKwkvKjB4MDAwNCovCXUzMgl1bnVzZWQxOworCQl9IHBpY193cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZF92cGxhbmVbMTddOworLyoweDAwOTAqLwlzdHJ1Y3QgeworCS8qMHgwMDAwKi8JdTMyCXBpY193cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZDsKKwkvKjB4MDAwNCovCXUzMgl1bnVzZWQyOworCQl9IHBpY193cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZF92cGxhbmVbMTddOworLyoweDAxMTgqLwlzdHJ1Y3QgeworCS8qMHgwMDAwKi8JdTMyCXBpY19yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWQ7CisJLyoweDAwMDQqLwl1MzIJdW51c2VkMzsKKwkJfSBwaWNfcmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkX3ZwbGFuZVsxN107CisvKjB4MDFhMCovCXUzMglwaWNfaW5pX3JkX3ZwaW5fZHJvcDsKKy8qMHgwMWE0Ki8JdTMyCXBpY19pbmlfd3JfdnBpbl9kcm9wOworLyoweDAxYTgqLwl1MzIJcGljX2dlbnN0YXRzX2NvdW50MDsKKy8qMHgwMWFjKi8JdTMyCXBpY19nZW5zdGF0c19jb3VudDE7CisvKjB4MDFiMCovCXUzMglwaWNfZ2Vuc3RhdHNfY291bnQyOworLyoweDAxYjQqLwl1MzIJcGljX2dlbnN0YXRzX2NvdW50MzsKKy8qMHgwMWI4Ki8JdTMyCXBpY19nZW5zdGF0c19jb3VudDQ7CisvKjB4MDFiYyovCXUzMgl1bnVzZWQ0OworLyoweDAxYzAqLwl1MzIJcGljX2dlbnN0YXRzX2NvdW50NTsKKy8qMHgwMWM0Ki8JdTMyCXVudXNlZDU7CisvKjB4MDFjOCovCXUzMglwY2lfcnN0ZHJvcF9jcGw7CisvKjB4MDFjYyovCXUzMglwY2lfcnN0ZHJvcF9tc2c7CisvKjB4MDFkMCovCXUzMglwY2lfcnN0ZHJvcF9jbGllbnQxOworLyoweDAxZDQqLwl1MzIJcGNpX3JzdGRyb3BfY2xpZW50MDsKKy8qMHgwMWQ4Ki8JdTMyCXBjaV9yc3Rkcm9wX2NsaWVudDI7CisvKjB4MDFkYyovCXUzMgl1bnVzZWQ2OworLyoweDAxZTAqLwlzdHJ1Y3QgeworCS8qMHgwMDAwKi8JdTE2CXVudXNlZDc7CisJLyoweDAwMDIqLwl1MTYJcGNpX2RlcGxfY3BsaDsKKwkvKjB4MDAwNCovCXUxNglwY2lfZGVwbF9ucGg7CisJLyoweDAwMDYqLwl1MTYJcGNpX2RlcGxfcGg7CisJCX0gcGNpX2RlcGxfaF92cGxhbmVbMTddOworLyoweDAyNjgqLwlzdHJ1Y3QgeworCS8qMHgwMDAwKi8JdTE2CXVudXNlZDg7CisJLyoweDAwMDIqLwl1MTYJcGNpX2RlcGxfY3BsZDsKKwkvKjB4MDAwNCovCXUxNglwY2lfZGVwbF9ucGQ7CisJLyoweDAwMDYqLwl1MTYJcGNpX2RlcGxfcGQ7CisJCX0gcGNpX2RlcGxfZF92cGxhbmVbMTddOworLyoweDAyZjAqLwlzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgeGdtYWNfcG9ydFszXTsKKy8qMHgwYTEwKi8Jc3RydWN0IHZ4Z2VfaHdfeG1hY19hZ2dyX3N0YXRzIHhnbWFjX2FnZ3JbMl07CisvKjB4MGFlMCovCXU2NAl4Z21hY19nbG9iYWxfcHJvZ19ldmVudF9nbnVtMDsKKy8qMHgwYWU4Ki8JdTY0CXhnbWFjX2dsb2JhbF9wcm9nX2V2ZW50X2dudW0xOworLyoweDBhZjAqLwl1NjQJdW51c2VkNzsKKy8qMHgwYWY4Ki8JdTY0CXVudXNlZDg7CisvKjB4MGIwMCovCXU2NAl1bnVzZWQ5OworLyoweDBiMDgqLwl1NjQJdW51c2VkMTA7CisvKjB4MGIxMCovCXUzMgl1bnVzZWQxMTsKKy8qMHgwYjE0Ki8JdTMyCXhnbWFjX3R4X3Blcm1pdHRlZF9mcm1zOworLyoweDBiMTgqLwl1MzIJdW51c2VkMTI7CisvKjB4MGIxYyovCXU4CXVudXNlZDEzOworLyoweDBiMWQqLwl1OAl4Z21hY19wb3J0Ml90eF9hbnlfZnJtczsKKy8qMHgwYjFlKi8JdTgJeGdtYWNfcG9ydDFfdHhfYW55X2ZybXM7CisvKjB4MGIxZiovCXU4CXhnbWFjX3BvcnQwX3R4X2FueV9mcm1zOworLyoweDBiMjAqLwl1MzIJdW51c2VkMTQ7CisvKjB4MGIyNCovCXU4CXVudXNlZDE1OworLyoweDBiMjUqLwl1OAl4Z21hY19wb3J0Ml9yeF9hbnlfZnJtczsKKy8qMHgwYjI2Ki8JdTgJeGdtYWNfcG9ydDFfcnhfYW55X2ZybXM7CisvKjB4MGIyNyovCXU4CXhnbWFjX3BvcnQwX3J4X2FueV9mcm1zOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAtIFRpdGFuIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKiBAdnBhdGhfaW5mbzogVlBhdGggc3RhdGlzdGljcworICogQHZwYXRoX2luZm9fc2F2OiBWcGF0aCBzdGF0aXN0aWNzIHNhdmVkCisgKgorICogVGl0YW4gaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8geworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8KKwkJKnZwYXRoX2luZm9bVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbworCQl2cGF0aF9pbmZvX3NhdltWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8gLSBIVyBjb21tb24KKyAqIHN0YXRpc3RpY3MgZm9yIHF1ZXVlcy4KKyAqIEBmdWxsX2NudDogTnVtYmVyIG9mIHRpbWVzIHRoZSBxdWV1ZSB3YXMgZnVsbAorICogQHVzYWdlX2NudDogdXNhZ2UgY291bnQuCisgKiBAdXNhZ2VfbWF4OiBNYXhpbXVtIHVzYWdlCisgKiBAcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudDogUmVzZXJ2ZS9mcmVlIHN3YXAgY291bnRlci4gSW50ZXJuYWwgdXNhZ2UuCisgKiBAdG90YWxfY29tcGxfY250OiBUb3RhbCBkZXNjcmlwdG9yIGNvbXBsZXRpb24gY291bnQuCisgKgorICogSHcgcXVldWUgY291bnRlcnMKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm97fSwKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mb3t9LAorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19jb21tb25faW5mbyB7CisJdTMyCWZ1bGxfY250OworCXUzMgl1c2FnZV9jbnQ7CisJdTMyCXVzYWdlX21heDsKKwl1MzIJcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudDsKKwl1MzIgdG90YWxfY29tcGxfY250OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8gLSBIVyBmaWZvIHN0YXRpc3RpY3MKKyAqIEBjb21tb25fc3RhdHM6IENvbW1vbiBjb3VudGVycyBmb3IgYWxsIHF1ZXVlcworICogQHRvdGFsX3Bvc3RzOiBUb3RhbCBudW1iZXIgb2YgcG9zdGluZ3Mgb24gdGhlIHF1ZXVlLgorICogQHRvdGFsX2J1ZmZlcnM6IFRvdGFsIG51bWJlciBvZiBidWZmZXJzIHBvc3RlZC4KKyAqIEB0eGRfdF9jb2RlX2Vycl9jbnQ6IEFycmF5IG9mIHRyYW5zbWl0IHRyYW5zZmVyIGNvZGVzLiBUaGUgcG9zaXRpb24KKyAqIChpbmRleCkgaW4gdGhpcyBhcnJheSByZWZsZWN0cyB0aGUgdHJhbnNmZXIgY29kZSB0eXBlLCBmb3IgaW5zdGFuY2UKKyAqIDB4QSAtICJsb3NzIG9mIGxpbmsiLgorICogVmFsdWUgdHhkX3RfY29kZV9lcnJfY250W2ldIHJlZmxlY3RzIHRoZQorICogbnVtYmVyIG9mIHRpbWVzIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZmVyIGNvZGUgd2FzIGVuY291bnRlcmVkLgorICoKKyAqIEhXIGZpZm8gY291bnRlcnMKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19jb21tb25faW5mb3t9LAorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfcmluZ19pbmZve30sCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2ZpZm9faW5mbyB7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8gY29tbW9uX3N0YXRzOworCXUzMiB0b3RhbF9wb3N0czsKKwl1MzIgdG90YWxfYnVmZmVyczsKKwl1MzIgdHhkX3RfY29kZV9lcnJfY250W1ZYR0VfSFdfRFRSX01BWF9UX0NPREVdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8gLSBIVyByaW5nIHN0YXRpc3RpY3MKKyAqIEBjb21tb25fc3RhdHM6IENvbW1vbiBjb3VudGVycyBmb3IgYWxsIHF1ZXVlcworICogQHJ4ZF90X2NvZGVfZXJyX2NudDogQXJyYXkgb2YgcmVjZWl2ZSB0cmFuc2ZlciBjb2Rlcy4gVGhlIHBvc2l0aW9uCisgKiAgICAgICAgICAgICAoaW5kZXgpIGluIHRoaXMgYXJyYXkgcmVmbGVjdHMgdGhlIHRyYW5zZmVyIGNvZGUgdHlwZSwKKyAqICAgICAgICAgICAgIGZvciBpbnN0YW5jZQorICogICAgICAgICAgICAgMHg3IC0gZm9yICJpbnZhbGlkIHJlY2VpdmUgYnVmZmVyIHNpemUiLCBvciAweDggLSBmb3IgRUNDLgorICogICAgICAgICAgICAgVmFsdWUgcnhkX3RfY29kZV9lcnJfY250W2ldIHJlZmxlY3RzIHRoZQorICogICAgICAgICAgICAgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZmVyIGNvZGUgd2FzIGVuY291bnRlcmVkLgorICoKKyAqIEhXIHJpbmcgY291bnRlcnMKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19jb21tb25faW5mb3t9LAorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZve30sCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mbyB7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8gY29tbW9uX3N0YXRzOworCXUzMiByeGRfdF9jb2RlX2Vycl9jbnRbVlhHRV9IV19EVFJfTUFYX1RfQ09ERV07CisKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZXJyIC0gSFcgdnBhdGggZXJyb3Igc3RhdGlzdGljcworICogQHVua25vd25fYWxhcm1zOgorICogQG5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0OgorICogQG5ldHdvcmtfc3VzdGFpbmVkX29rOgorICogQGtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlOgorICogQGtkZmNjdGxfZmlmbzBfcG9pc29uOgorICogQGtkZmNjdGxfZmlmbzBfZG1hX2Vycm9yOgorICogQGRibGdlbl9maWZvMF9vdmVyZmxvdzoKKyAqIEBzdGF0c2JfcGlmX2NoYWluX2Vycm9yOgorICogQHN0YXRzYl9kcm9wX3RpbWVvdXQ6CisgKiBAdGFyZ2V0X2lsbGVnYWxfYWNjZXNzOgorICogQGluaV9zZXJyX2RldDoKKyAqIEBwcmNfcmluZ19idW1wczoKKyAqIEBwcmNfcnhkY21fc2NfZXJyOgorICogQHByY19yeGRjbV9zY19hYm9ydDoKKyAqIEBwcmNfcXVhbnRhX3NpemVfZXJyOgorICoKKyAqIEhXIHZwYXRoIGVycm9yIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZXJyIHsKKwl1MzIJdW5rbm93bl9hbGFybXM7CisJdTMyCW5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0OworCXUzMgluZXR3b3JrX3N1c3RhaW5lZF9vazsKKwl1MzIJa2RmY2N0bF9maWZvMF9vdmVyd3JpdGU7CisJdTMyCWtkZmNjdGxfZmlmbzBfcG9pc29uOworCXUzMglrZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcjsKKwl1MzIJZGJsZ2VuX2ZpZm8wX292ZXJmbG93OworCXUzMglzdGF0c2JfcGlmX2NoYWluX2Vycm9yOworCXUzMglzdGF0c2JfZHJvcF90aW1lb3V0OworCXUzMgl0YXJnZXRfaWxsZWdhbF9hY2Nlc3M7CisJdTMyCWluaV9zZXJyX2RldDsKKwl1MzIJcHJjX3JpbmdfYnVtcHM7CisJdTMyCXByY19yeGRjbV9zY19lcnI7CisJdTMyCXByY19yeGRjbV9zY19hYm9ydDsKKwl1MzIJcHJjX3F1YW50YV9zaXplX2VycjsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyAtIEhXIHZwYXRoIHN3IHN0YXRpc3RpY3MKKyAqIEBzb2Z0X3Jlc2V0X2NudDogTnVtYmVyIG9mIHRpbWVzIHNvZnQgcmVzZXQgaXMgZG9uZSBvbiB0aGlzIHZwYXRoLgorICogQGVycm9yX3N0YXRzOiBlcnJvciBjb3VudGVycyBmb3IgdGhlIHZwYXRoCisgKiBAcmluZ19zdGF0czogY291bnRlcnMgZm9yIHJpbmcgYmVsb25naW5nIHRvIHRoZSB2cGF0aAorICogQGZpZm9fc3RhdHM6IGNvdW50ZXJzIGZvciBmaWZvIGJlbG9uZ2luZyB0byB0aGUgdnBhdGgKKyAqCisgKiBIVyB2cGF0aCBzdyBzdGF0aXN0aWNzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2luZm97fSB9LgorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvIHsKKwl1MzIgICAgc29mdF9yZXNldF9jbnQ7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZXJyCWVycm9yX3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mbwlyaW5nX3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2ZpZm9faW5mbwlmaWZvX3N0YXRzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyAtIEhXIG93biBwZXItZGV2aWNlIHN0YXRpc3RpY3MuCisgKgorICogQG5vdF90cmFmZmljX2ludHJfY250OiBOdW1iZXIgb2YgdGltZXMgdGhlIGhvc3Qgd2FzIGludGVycnVwdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgbmV3IGNvbXBsZXRpb25zLgorICogICAgICAgICAgICAgICAgICAgICAgICAiTm9uLXRyYWZmaWMgaW50ZXJydXB0IGNvdW50ZXIiLgorICogQHRyYWZmaWNfaW50cl9jbnQ6IE51bWJlciBvZiB0cmFmZmljIGludGVycnVwdHMgZm9yIHRoZSBkZXZpY2UuCisgKiBAdG90YWxfaW50cl9jbnQ6IFRvdGFsIG51bWJlciBvZiB0cmFmZmljIGludGVycnVwdHMgZm9yIHRoZSBkZXZpY2UuCisgKiAgICAgICAgICAgICAgICAgIEB0b3RhbF9pbnRyX2NudCA9PSBAdHJhZmZpY19pbnRyX2NudCArCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RfdHJhZmZpY19pbnRyX2NudAorICogQHNvZnRfcmVzZXRfY250OiBOdW1iZXIgb2YgdGltZXMgc29mdCByZXNldCBpcyBkb25lIG9uIHRoaXMgZGV2aWNlLgorICogQHZwYXRoX2luZm86IHBsZWFzZSBzZWUgc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mb3t9CisgKiBIVyBwZXItZGV2aWNlIHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvIHsKKwl1MzIJbm90X3RyYWZmaWNfaW50cl9jbnQ7CisJdTMyCXRyYWZmaWNfaW50cl9jbnQ7CisJdTMyCXRvdGFsX2ludHJfY250OworCXUzMglzb2Z0X3Jlc2V0X2NudDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvCisJCXZwYXRoX2luZm9bVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19lcnIgLSBIVyBkZXZpY2UgZXJyb3Igc3RhdGlzdGljcy4KKyAqIEB2cGF0aF9hbGFybXM6IE51bWJlciBvZiB2cGF0aCBhbGFybXMKKyAqCisgKiBIVyBEZXZpY2UgZXJyb3Igc3RhdHMKKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2VyciB7CisJdTMyICAgICB2cGF0aF9hbGFybXM7Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0cyAtIENvbnRhaW5zIEhXIHBlci1kZXZpY2Ugc3RhdGlzdGljcywKKyAqIGluY2x1ZGluZyBody4KKyAqIEBkZXZoOiBIVyBkZXZpY2UgaGFuZGxlLgorICogQGRtYV9hZGRyOiBETUEgYWRkcmVzIG9mIHRoZSAlaHdfaW5mby4gR2l2ZW4gdG8gZGV2aWNlIHRvIGZpbGwtaW4gdGhlIHN0YXRzLgorICogQGh3X2luZm9fZG1haDogRE1BIGhhbmRsZSB1c2VkIHRvIG1hcCBodyBzdGF0aXN0aWNzIG9udG8gdGhlIGRldmljZSBtZW1vcnkKKyAqICAgICAgICAgICAgICAgIHNwYWNlLgorICogQGh3X2luZm9fZG1hX2FjY2g6IE9uZSBtb3JlIERNQSBoYW5kbGUgdXNlZCBzdWJzZXF1ZW50bHkgdG8gZnJlZSB0aGUKKyAqICAgICAgICAgICAgICAgICAgICBETUEgb2JqZWN0LiBOb3RlIHRoYXQgdGhpcyBhbmQgdGhlIHByZXZpb3VzIGhhbmRsZSBoYXZlCisgKiAgICAgICAgICAgICAgICAgICAgcGh5c2ljYWwgbWVhbmluZyBmb3IgU29sYXJpczsgb24gV2luZG93cyBhbmQgTGludXggdGhlCisgKiAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIHNpbXBseSBwb2ludGVyIHRvIFBDSSBkZXZpY2UuCisgKgorICogQGh3X2Rldl9pbmZvX3N0YXRzOiBUaXRhbiBzdGF0aXN0aWNzIG1haW50YWluZWQgYnkgdGhlIGhhcmR3YXJlLgorICogQHN3X2Rldl9pbmZvX3N0YXRzOiBIVydzICJzb2Z0IiBkZXZpY2UgaW5mb3JtYXRpb25hbCBzdGF0aXN0aWNzLCBlLmcuIG51bWJlcgorICogICAgICAgICAgICAgICAgICAgICBvZiBjb21wbGV0aW9ucyBwZXIgaW50ZXJydXB0LgorICogQHN3X2Rldl9lcnJfc3RhdHM6IEhXJ3MgInNvZnQiIGRldmljZSBlcnJvciBzdGF0aXN0aWNzLgorICoKKyAqIFN0cnVjdHVyZS1jb250YWluZXIgb2YgSFcgcGVyLWRldmljZSBzdGF0aXN0aWNzLiBOb3RlIHRoYXQgcGVyLWNoYW5uZWwKKyAqIHN0YXRpc3RpY3MgYXJlIGtlcHQgaW4gc2VwYXJhdGUgc3RydWN0dXJlcyB1bmRlciBIVydzIGZpZm8gYW5kIHJpbmcKKyAqIGNoYW5uZWxzLgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHMgeworCS8qIGhhbmRsZXMgKi8KKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aDsKKworCS8qIEhXIGRldmljZSBoYXJkd2FyZSBzdGF0aXN0aWNzICovCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8JaHdfZGV2X2luZm9fc3RhdHM7CisKKwkvKiBIVyBkZXZpY2UgInNvZnQiIHN0YXRzICovCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2VyciAgIHN3X2Rldl9lcnJfc3RhdHM7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gIHN3X2Rldl9pbmZvX3N0YXRzOworCit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX2h3X3N0YXRzX2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9zdGF0c19nZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvICpod19zdGF0cyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kcml2ZXJfc3RhdHNfZ2V0KAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyAqc3dfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19tcnBjaW1fc3RhdHNfZGlzYWJsZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIgb3BlcmF0aW9uLAorCXUzMiBsb2NhdGlvbiwKKwl1MzIgb2Zmc2V0LAorCXU2NCAqc3RhdCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfYWdncl9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBwb3J0LAorCQkJCSAgIHN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cyAqYWdncl9zdGF0cyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfcG9ydF9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBwb3J0LAorCQkJCSAgIHN0cnVjdCB2eGdlX2h3X3htYWNfcG9ydF9zdGF0cyAqcG9ydF9zdGF0cyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJICAgICAgc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyAqeG1hY19zdGF0cyk7CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSAtIFJlZ2lzdGVyIHR5cGVzLgorICoKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbGVnYWN5OiBMZWdhY3kgcmVnaXN0ZXJzCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX3RvYzogVE9DIFJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9jb21tb246IENvbW1vbiBSZWdpc3RlcnMKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltOiBtcnBjaW0gcmVnaXN0ZXJzCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX3NycGNpbTogc3JwY2ltIHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cG1nbXQ6IHZwYXRoIG1hbmFnZW1lbnQgcmVnaXN0ZXJzCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoOiB2cGF0aCByZWdpc3RlcnMKKyAqCisgKiBSZWdpc3RlciB0eXBlIGVudW1hcmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19tZ210X3JlZ190eXBlIHsKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbGVnYWN5ID0gMCwKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfdG9jID0gMSwKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfY29tbW9uID0gMiwKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltID0gMywKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfc3JwY2ltID0gNCwKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBtZ210ID0gNSwKKwl2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBhdGggPSA2Cit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfcmVnX3JlYWQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCSAgICAgIGVudW0gdnhnZV9od19tZ210X3JlZ190eXBlIHR5cGUsCisJCSAgICAgIHUzMiBpbmRleCwKKwkJICAgICAgdTMyIG9mZnNldCwKKwkJICAgICAgdTY0ICp2YWx1ZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbWdtdF9yZWdfd3JpdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCSAgICAgIGVudW0gdnhnZV9od19tZ210X3JlZ190eXBlIHR5cGUsCisJCSAgICAgIHUzMiBpbmRleCwKKwkJICAgICAgdTMyIG9mZnNldCwKKwkJICAgICAgdTY0IHZhbHVlKTsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od19yeGRfc3RhdGUgLSBEZXNjcmlwdG9yIChSWEQpIHN0YXRlLgorICogQFZYR0VfSFdfUlhEX1NUQVRFX05PTkU6IEludmFsaWQgc3RhdGUuCisgKiBAVlhHRV9IV19SWERfU1RBVEVfQVZBSUw6IERlc2NyaXB0b3IgaXMgYXZhaWxhYmxlIGZvciByZXNlcnZhdGlvbi4KKyAqIEBWWEdFX0hXX1JYRF9TVEFURV9QT1NURUQ6IERlc2NyaXB0b3IgaXMgcG9zdGVkIGZvciBwcm9jZXNzaW5nIGJ5IHRoZQorICogZGV2aWNlLgorICogQFZYR0VfSFdfUlhEX1NUQVRFX0ZSRUVEOiBEZXNjcmlwdG9yIGlzIGZyZWUgYW5kIGNhbiBiZSByZXVzZWQgZm9yCisgKiBmaWxsaW5nLWluIGFuZCBwb3N0aW5nIGxhdGVyLgorICoKKyAqIFRpdGFuL0hXIGRlc2NyaXB0b3Igc3RhdGVzLgorICoKKyAqLworZW51bSB2eGdlX2h3X3J4ZF9zdGF0ZSB7CisJVlhHRV9IV19SWERfU1RBVEVfTk9ORQkJPSAwLAorCVZYR0VfSFdfUlhEX1NUQVRFX0FWQUlMCQk9IDEsCisJVlhHRV9IV19SWERfU1RBVEVfUE9TVEVECT0gMiwKKwlWWEdFX0hXX1JYRF9TVEFURV9GUkVFRAkJPSAzCit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX2luZm8gLSBFeHRlbmRlZCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYQorICogY29tcGxldGVkIHJpbmcgZGVzY3JpcHRvci4KKyAqIEBzeW5fZmxhZzogU1lOIGZsYWcKKyAqIEBpc19pY21wOiBJcyBJQ01QCisgKiBAZmFzdF9wYXRoX2VsaWdpYmxlOiBGYXN0IFBhdGggRWxpZ2libGUgZmxhZworICogQGwzX2Nrc3VtOiBpbiBMMyBjaGVja3N1bSBpcyB2YWxpZAorICogQGwzX2Nrc3VtOiBSZXN1bHQgb2YgSVAgY2hlY2tzdW0gY2hlY2sgKGJ5IFRpdGFuIGhhcmR3YXJlKS4KKyAqICAgICAgICAgICAgVGhpcyBmaWVsZCBjb250YWluaW5nIFZYR0VfSFdfTDNfQ0tTVU1fT0sgd291bGQgbWVhbiB0aGF0CisgKiAgICAgICAgICAgIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LCBvdGhlcndpc2UgLSB0aGUgZGF0YWdyYW0gaXMKKyAqICAgICAgICAgICAgY29ycnVwdGVkLgorICogQGw0X2Nrc3VtOiBpbiBMNCBjaGVja3N1bSBpcyB2YWxpZAorICogQGw0X2Nrc3VtOiBSZXN1bHQgb2YgVENQL1VEUCBjaGVja3N1bSBjaGVjayAoYnkgVGl0YW4gaGFyZHdhcmUpLgorICogICAgICAgICAgICBUaGlzIGZpZWxkIGNvbnRhaW5pbmcgVlhHRV9IV19MNF9DS1NVTV9PSyB3b3VsZCBtZWFuIHRoYXQKKyAqICAgICAgICAgICAgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuIE90aGVyd2lzZSAtIHRoZSBwYWNrZXQgaXMKKyAqICAgICAgICAgICAgY29ycnVwdGVkLgorICogQGZyYW1lOiBaZXJvIG9yIG1vcmUgb2YgZW51bSB2eGdlX2h3X2ZyYW1lX3R5cGUgZmxhZ3MuCisgKiAJCVNlZSBlbnVtIHZ4Z2VfaHdfZnJhbWVfdHlwZXt9LgorICogQHByb3RvOiB6ZXJvIG9yIG1vcmUgb2YgZW51bSB2eGdlX2h3X2ZyYW1lX3Byb3RvIGZsYWdzLiAgUmVwb3J0aW5nIGJpdHMgZm9yCisgKiAgICAgICAgICAgIHZhcmlvdXMgaGlnaGVyLWxheWVyIHByb3RvY29scywgaW5jbHVkaW5nIChidXQgbm90ZSByZXN0cmljdGVkIHRvKQorICogICAgICAgICAgICBUQ1AgYW5kIFVEUC4gU2VlIGVudW0gdnhnZV9od19mcmFtZV9wcm90b3t9LgorICogQGlzX3ZsYW46IElmIHZsYW4gdGFnIGlzIHZhbGlkCisgKiBAdmxhbjogVkxBTiB0YWcgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2VpdmVkIGZyYW1lLgorICogQHJ0aF9idWNrZXQ6IFJUSCBidWNrZXQKKyAqIEBydGhfaXRfaGl0OiBTZXQsIElmIFJUSCBoYXNoIHZhbHVlIGNhbGN1bGF0ZWQgYnkgdGhlIFRpdGFuIGhhcmR3YXJlCisgKiAgICAgICAgICAgICBoYXMgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgSW5kaXJlY3Rpb24gdGFibGUuCisgKiBAcnRoX3NwZG1faGl0OiBTZXQsIElmIFJUSCBoYXNoIHZhbHVlIGNhbGN1bGF0ZWQgYnkgdGhlIFRpdGFuIGhhcmR3YXJlCisgKiAgICAgICAgICAgICBoYXMgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgU29ja2V0IFBhaXIgRGlyZWN0IE1hdGNoIHRhYmxlLgorICogQHJ0aF9oYXNoX3R5cGU6IFJUSCBoYXNoIGNvZGUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBoYXNoLgorICogQHJ0aF92YWx1ZTogUmVjZWl2ZSBUcmFmZmljIEhhc2hpbmcoUlRIKSBoYXNoIHZhbHVlLiBQcm9kdWNlZCBieSBUaXRhbgorICogICAgICAgICAgICAgaGFyZHdhcmUgaWYgUlRIIGlzIGVuYWJsZWQuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3JpbmdfcnhkX2luZm8geworCXUzMglzeW5fZmxhZzsKKwl1MzIJaXNfaWNtcDsKKwl1MzIJZmFzdF9wYXRoX2VsaWdpYmxlOworCXUzMglsM19ja3N1bV92YWxpZDsKKwl1MzIJbDNfY2tzdW07CisJdTMyCWw0X2Nrc3VtX3ZhbGlkOworCXUzMglsNF9ja3N1bTsKKwl1MzIJZnJhbWU7CisJdTMyCXByb3RvOworCXUzMglpc192bGFuOworCXUzMgl2bGFuOworCXUzMglydGhfYnVja2V0OworCXUzMglydGhfaXRfaGl0OworCXUzMglydGhfc3BkbV9oaXQ7CisJdTMyCXJ0aF9oYXNoX3R5cGU7CisJdTMyCXJ0aF92YWx1ZTsKK307CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfcmluZ19oYXNoX3R5cGUgLSBSVEggaGFzaCB0eXBlcworICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTogTm8gSGFzaAorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjQ6IFRDUCBJUHY0CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNDogVURQIElQdjQKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjQ6IElQdjQKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY2OiBUQ1AgSVB2NgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjY6IFVEUCBJUHY2CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY2OiBJUHY2CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNl9FWDogVENQIElQdjYgZXh0ZW5zaW9uCisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNl9FWDogVURQIElQdjYgZXh0ZW5zaW9uCisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY2X0VYOiBJUHY2IGV4dGVuc2lvbgorICoKKyAqIFJUSCBoYXNoIHR5cGVzCisgKi8KK2VudW0gdnhnZV9od19yaW5nX2hhc2hfdHlwZSB7CisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FCQkJPSAweDAsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNAkJPSAweDEsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNAkJPSAweDIsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY0CQkJPSAweDMsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNgkJPSAweDQsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNgkJPSAweDUsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY2CQkJPSAweDYsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNl9FWAk9IDB4NywKKwlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY2X0VYCT0gMHg4LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNl9FWAkJPSAweDkKK307CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqKnJ4ZGgpOworCit2b2lkCit2eGdlX2h3X3JpbmdfcnhkX3ByZV9wb3N0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCk7CisKK3ZvaWQKK3Z4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfcmluZ19yZXBsZW5pc2goc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwgdTE2IG1pbl9mbGFnKTsKKwordm9pZAordnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCk7CisKK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9wb3N0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKipyeGRoLAorCXU4ICp0X2NvZGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfcmluZ19oYW5kbGVfdGNvZGUoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKKwl2b2lkICpyeGRoLAorCXU4IHRfY29kZSk7CisKK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9mcmVlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCk7CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZnJhbWVfcHJvdG8gLSBIaWdoZXItbGF5ZXIgZXRoZXJuZXQgcHJvdG9jb2xzLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fVkxBTl9UQUdHRUQ6IFZMQU4uCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19JUFY0OiBJUHY0LgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBWNjogSVB2Ni4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX0lQX0ZSQUc6IElQIGZyYWdtZW50ZWQuCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19UQ1A6IFRDUC4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX1VEUDogVURQLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fVENQX09SX1VEUDogVENQIG9yIFVEUC4KKyAqCisgKiBIaWdoZXIgbGF5ZXIgZXRoZXJuZXQgcHJvdG9jb2xzIGFuZCBvcHRpb25zLgorICovCitlbnVtIHZ4Z2VfaHdfZnJhbWVfcHJvdG8geworCVZYR0VfSFdfRlJBTUVfUFJPVE9fVkxBTl9UQUdHRUQgPSAweDgwLAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fSVBWNAkJPSAweDEwLAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fSVBWNgkJPSAweDA4LAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fSVBfRlJBRwkJPSAweDA0LAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fVENQCQkJPSAweDAyLAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fVURQCQkJPSAweDAxLAorCVZYR0VfSFdfRlJBTUVfUFJPVE9fVENQX09SX1VEUAk9IChWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUCB8IFwKKwkJCQkJCSAgIFZYR0VfSFdfRlJBTUVfUFJPVE9fVURQKQorfTsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od19maWZvX2dhdGhlcl9jb2RlIC0gR2F0aGVyIGNvZGVzIHVzZWQgaW4gZmlmbyBUeEQKKyAqIEBWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1Q6IEZpcnN0IFR4REwKKyAqIEBWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfTUlERExFOiBNaWRkbGUgVHhETAorICogQFZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9MQVNUOiBMYXN0IFR4REwKKyAqIEBWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1RfTEFTVDogRmlyc3QgYW5kIExhc3QgVHhETC4KKyAqCisgKiBUaGVzZSBnYXRoZXIgY29kZXMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHBvc2l0aW9uIG9mIGEgVHhEIGluIGEgVHhEIGxpc3QKKyAqLworZW51bSB2eGdlX2h3X2ZpZm9fZ2F0aGVyX2NvZGUgeworCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9GSVJTVAkJPSAweDIsCisJVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX01JRERMRQkJPSAweDAsCisJVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0xBU1QJCT0gMHgxLAorCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9GSVJTVF9MQVNUCT0gMHgzCit9OworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgLSB0Y29kZXMgdXNlZCBpbiBmaWZvCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9PSzogVHJhbnNmZXIgT0sKKyAqIEBWWEdFX0hXX0ZJRk9fVF9DT0RFX1BDSV9SRUFEX0NPUlJVUFQ6IFBDSSByZWFkIHRyYW5zYWN0aW9uIChlaXRoZXIgVHhEIG9yCisgKiAgICAgICAgICAgICBmcmFtZSBkYXRhKSByZXR1cm5lZCB3aXRoIGNvcnJ1cHQgZGF0YS4KKyAqIEBWWEdFX0hXX0ZJRk9fVF9DT0RFX1BDSV9SRUFEX0ZBSUw6UENJIHJlYWQgdHJhbnNhY3Rpb24gd2FzIHJldHVybmVkCisgKiAgICAgICAgICAgICB3aXRoIG5vIGRhdGEuCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9JTlZBTElEX01TUzogVGhlIGhvc3QgYXR0ZW1wdGVkIHRvIHNlbmQgZWl0aGVyIGEKKyAqICAgICAgICAgICAgIGZyYW1lIG9yIExTTyBNU1MgdGhhdCB3YXMgdG9vIGxvbmcgKD45ODAwQikuCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9MU09fRVJST1I6IEVycm9yIGRldGVjdGVkIGR1cmluZyBUQ1AvVURQIExhcmdlIFNlbmQKKwkqCSAgICAgICBPZmZsb2FkIG9wZXJhdGlvbiwgZHVlIHRvIGltcHJvcGVyIGhlYWRlciB0ZW1wbGF0ZSwKKwkqCSAgICAgICB1bnN1cHBvcnRlZCBwcm90b2NvbCwgZXRjLgorICogQFZYR0VfSFdfRklGT19UX0NPREVfVU5VU0VEOiBVbnVzZWQKKyAqIEBWWEdFX0hXX0ZJRk9fVF9DT0RFX01VTFRJX0VSUk9SOiBTZXQgdG8gMSBieSB0aGUgYWRhcHRlciBpZiBtdWx0aXBsZQorICogICAgICAgICAgICAgZGF0YSBidWZmZXIgdHJhbnNmZXIgZXJyb3JzIGFyZSBlbmNvdW50ZXJlZCAoc2VlIGJlbG93KS4KKyAqICAgICAgICAgICAgIE90aGVyd2lzZSBpdCBpcyBzZXQgdG8gMC4KKyAqCisgKiBUaGVzZSB0Y29kZXMgYXJlIHJldHVybmVkIGluIHZhcmlvdXMgQVBJIGZvciBUeEQgc3RhdHVzCisgKi8KK2VudW0gdnhnZV9od19maWZvX3Rjb2RlIHsKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX09LCQkJPSAweDAsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9QQ0lfUkVBRF9DT1JSVVBUCT0gMHgxLAorCVZYR0VfSFdfRklGT19UX0NPREVfUENJX1JFQURfRkFJTAk9IDB4MiwKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX0lOVkFMSURfTVNTCQk9IDB4MywKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX0xTT19FUlJPUgkJPSAweDQsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9VTlVTRUQJCT0gMHg3LAorCVZYR0VfSFdfRklGT19UX0NPREVfTVVMVElfRVJST1IJCT0gMHg4Cit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb190eGRsX3Jlc2VydmUoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCwKKwl2b2lkICoqdHhkbGgsCisJdm9pZCAqKnR4ZGxfcHJpdik7CisKK3ZvaWQgdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19oYW5kbGUsCisJCQl2b2lkICp0eGRsaCwKKwkJCXUzMiBmcmFnX2lkeCwKKwkJCWRtYV9hZGRyX3QgZG1hX3BvaW50ZXIsCisJCQl1MzIgc2l6ZSk7CisKK3ZvaWQgdnhnZV9od19maWZvX3R4ZGxfcG9zdCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19oYW5kbGUsCisJCQl2b2lkICp0eGRsaCk7CisKK3UzMiB2eGdlX2h3X2ZpZm9fZnJlZV90eGRsX2NvdW50X2dldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqKnR4ZGxoLAorCWVudW0gdnhnZV9od19maWZvX3Rjb2RlICp0X2NvZGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb19oYW5kbGVfdGNvZGUoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCwKKwl2b2lkICp0eGRsaCwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUpOworCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCwKKwl2b2lkICp0eGRsaCk7CisKKy8qCisgKiBEZXZpY2UKKyAqLworCisjZGVmaW5lIFZYR0VfSFdfUklOR19ORVhUX0JMT0NLX1BPSU5URVJfT0ZGU0VUCShWWEdFX0hXX0JMT0NLX1NJWkUtOCkKKyNkZWZpbmUgVlhHRV9IV19SSU5HX01FTUJMT0NLX0lEWF9PRkZTRVQJCShWWEdFX0hXX0JMT0NLX1NJWkUtMTYpCisjZGVmaW5lIFZYR0VfSFdfUklOR19NSU5fQlVGRl9BTExPQ0FUSU9OCQk2NAorCisvKgorICogc3RydWN0IF9fdnhnZV9od19yaW5nX3J4ZF9wcml2IC0gUmVjZWl2ZSBkZXNjcmlwdG9yIEhXLXByaXZhdGUgZGF0YS4KKyAqIEBkbWFfYWRkcjogRE1BIChtYXBwZWQpIGFkZHJlc3Mgb2YgX3RoaXNfIGRlc2NyaXB0b3IuCisgKiBAZG1hX2hhbmRsZTogRE1BIGhhbmRsZSB1c2VkIHRvIG1hcCB0aGUgZGVzY3JpcHRvciBvbnRvIGRldmljZS4KKyAqIEBkbWFfb2Zmc2V0OiBEZXNjcmlwdG9yJ3Mgb2Zmc2V0IGluIHRoZSBtZW1vcnkgYmxvY2suIEhXIGFsbG9jYXRlcworICogICAgICAgICAgICAgIGRlc2NyaXB0b3JzIGluIG1lbW9yeSBibG9ja3Mgb2YgJVZYR0VfSFdfQkxPQ0tfU0laRQorICogICAgICAgICAgICAgIGJ5dGVzLiBFYWNoIG1lbWJsb2NrIGlzIGNvbnRpZ3VvdXMgRE1BLWFibGUgbWVtb3J5LiBFYWNoCisgKiAgICAgICAgICAgICAgbWVtYmxvY2sgY29udGFpbnMgMSBvciBtb3JlIDRLQiBSeEQgYmxvY2tzIHZpc2libGUgdG8gdGhlCisgKiAgICAgICAgICAgICAgVGl0YW4gaGFyZHdhcmUuCisgKiBAZG1hX29iamVjdDogRE1BIGFkZHJlc3MgYW5kIGhhbmRsZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgY29udGFpbnMKKyAqICAgICAgICAgICAgICB0aGUgZGVzY3JpcHRvci4gVGhpcyBtZW1iZXIgaXMgdXNlZCBvbmx5IGluIHRoZSAiY2hlY2tlZCIKKyAqICAgICAgICAgICAgICB2ZXJzaW9uIG9mIHRoZSBIVyAodG8gZW5mb3JjZSBjZXJ0YWluIGFzc2VydGlvbnMpOworICogICAgICAgICAgICAgIG90aGVyd2lzZSBpdCBnZXRzIGNvbXBpbGVkIG91dC4KKyAqIEBhbGxvY2F0ZWQ6IFRydWUgaWYgdGhlIGRlc2NyaXB0b3IgaXMgcmVzZXJ2ZWQsIDAgb3RoZXJ3aXNlLiBJbnRlcm5hbCB1c2FnZS4KKyAqCisgKiBQZXItcmVjZWl2ZSBkZWNzcmlwdG9yIEhXLXByaXZhdGUgZGF0YS4gSFcgdXNlcyB0aGUgc3BhY2UgdG8ga2VlcCBETUEKKyAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzY3JpcHRvci4gTm90ZSB0aGF0IGRyaXZlciBjYW4gYXNrIEhXCisgKiB0byBhbGxvY2F0ZSBhZGRpdGlvbmFsIHBlci1kZXNjcmlwdG9yIHNwYWNlIGZvciBpdHMgb3duIChkcml2ZXItc3BlY2lmaWMpCisgKiBwdXJwb3Nlcy4KKyAqLworc3RydWN0IF9fdnhnZV9od19yaW5nX3J4ZF9wcml2IHsKKwlkbWFfYWRkcl90CWRtYV9hZGRyOworCXN0cnVjdCBwY2lfZGV2ICpkbWFfaGFuZGxlOworCXB0cmRpZmZfdAlkbWFfb2Zmc2V0OworI2lmZGVmIFZYR0VfREVCVUdfQVNTRVJUCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEJKmRtYV9vYmplY3Q7CisjZW5kaWYKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gUklORyBQUklWQVRFIEFQSSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordTY0CitfX3Z4Z2VfaHdfcmluZ19maXJzdF9ibG9ja19hZGRyZXNzX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfY3JlYXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyICphdHRyKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfYWJvcnQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX3Jlc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfcmluZ19kZWxldGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gRklGTyBQUklWQVRFIEFQSSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHI7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2NyZWF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXN0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciAqYXR0cik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2Fib3J0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2ZpZm9fZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyB7CisJdm9pZCAoKml0ZW1fZnVuY19hbGxvYykoCisJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwkJCXUzMgkJCW1lbWJsb2NrX2luZGV4LAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEJKmRtYV9vYmplY3QsCisJCQl1MzIJCQlpbmRleCwKKwkJCXUzMgkJCWlzX2xhc3QpOworfTsKKwordm9pZAorX192eGdlX2h3X21lbXBvb2xfZGVzdHJveSgKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sKTsKKworI2RlZmluZSBWWEdFX0hXX1ZJUlRVQUxfUEFUSF9IQU5ETEUodnBhdGgpCQkJCVwKKwkJKChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKSh2cGF0aCktPnZwYXRoX2hhbmRsZXMubmV4dCkKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9nZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1MzIJCQlhY3Rpb24sCisJdTMyCQkJcnRzX3RhYmxlLAorCXUzMgkJCW9mZnNldCwKKwl1NjQJCQkqZGF0YTEsCisJdTY0CQkJKmRhdGEyKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1MzIJCQlhY3Rpb24sCisJdTMyCQkJcnRzX3RhYmxlLAorCXUzMgkJCW9mZnNldCwKKwl1NjQJCQlkYXRhMSwKKwl1NjQJCQlkYXRhMik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zd19yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCit2b2lkCitfX3Z4Z2VfaHdfdnBhdGhfcHJjX2NvbmZpZ3VyZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9rZGZjX2NvbmZpZ3VyZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9tYWNfY29uZmlndXJlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3RpbV9jb25maWd1cmUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cF9pbml0aWFsaXplKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZwkqY29uZmlnKTsKKwordm9pZAorX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAorCXUzMgkJCXNraXBfYWxhcm1zKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9pbnRyX2VuYWJsZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3UzMiB2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgaW50cl9tb2RlKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIHNraXBfYWxhcm1zLAorCXU2NCAqcmVhc29uKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKKy8qCisgKiAgVmlydHVhbCBQYXRocworICovCisKK3UzMiB2eGdlX2h3X3ZwYXRoX2lkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgeworCVZYR0VfSFdfVlBBVEhfTUFDX0FERFJfQUREX0RVUExJQ0FURSA9IDAsCisJVlhHRV9IV19WUEFUSF9NQUNfQUREUl9ESVNDQVJEX0RVUExJQ0FURSA9IDEsCisJVlhHRV9IV19WUEFUSF9NQUNfQUREUl9SRVBMQUNFX0RVUExJQ0FURSA9IDIKK307CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0sCisJZW51bSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZF9tb2RlIGR1cGxpY2F0ZV9tb2RlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3ZpZF9hZGQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQl2aWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQkqdmlkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQkqdmlkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJdmlkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9ldHlwZV9hZGQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQlldHlwZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJKmV0eXBlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9ldHlwZV9nZXRfbmV4dCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCSpldHlwZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJZXR5cGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9iY2FzdF9lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvaCwKKwl2b2lkICoqc2tiX3B0cik7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyIHNraXBfYWxhcm1zKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tc2l4X3NldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkgICAgICAgaW50ICp0aW1fbXNpeF9pZCwgaW50IGFsYXJtX21zaXhfaWQpOworCit2b2lkCit2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayhzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkJaW50IG1zaXhfaWQpOworCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X2NsZWFyKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJCQkgaW50IG1zaXhfaWQpOworCit2b2lkCit2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJCQkgIGludCBtc2l4X2lkKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X21hc2tfYWxsKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfaW50cl9lbmFibGUoCisJCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9pbnRyX2Rpc2FibGUoCisJCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK3ZvaWQgdnhnZV9od192cGF0aF9pbnRhX21hc2tfdHhfcngoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK3ZvaWQgdnhnZV9od192cGF0aF9pbnRhX3VubWFza190eF9yeCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX21zaXhfbWFzayhzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWxoLCBpbnQgbXNpeF9pZCk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9tc2l4X3VubWFzayhzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWxoLCBpbnQgbXNpeF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2Moc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICoqZHRyaCk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwsIHZvaWQgKmR0cmgpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJIHZvaWQgKipkdHJoKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICpkdHJoKTsKKworaW50Cit2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09IFBSSVZBVEUgQVBJID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaGFuZGxlX2Vycm9yKAorCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCXUzMiB2cF9pZCwKKwkJZW51bSB2eGdlX2h3X2V2ZW50IHR5cGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTAyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLXZlcnNpb24uaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVlhHRV9WRVJTSU9OX0gKKworI2RlZmluZSBWWEdFX1ZFUlNJT05fSAorCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9NQUpPUgkiMiIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX01JTk9SCSIwIgorI2RlZmluZSBWWEdFX1ZFUlNJT05fRklYCSIxIgorI2RlZmluZSBWWEdFX1ZFUlNJT05fQlVJTEQJIjE3MTI5IgorI2RlZmluZSBWWEdFX1ZFUlNJT05fRk9SCSJrIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggN2U4MGFiYS4uZjIxYTYxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtMjc1Miw3ICsyNzUyLDYgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAogCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIH07CiAKQEAgLTI3NjUsNyArMjc2NCw2IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBhaXJvX3NldF9tYWNfYWRkcmVzcywKIAkubmRvX2RvX2lvY3RsCQk9IGFpcm9faW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGFpcm9fY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCkBAIC00NDk0LDcgKzQ0OTIsNiBAQAogCQlnb3RvIGZhaWw7CiAJYXByaXYtPnByb2NfZW50cnktPnVpZCA9IHByb2NfdWlkOwogCWFwcml2LT5wcm9jX2VudHJ5LT5naWQgPSBwcm9jX2dpZDsKLQlhcHJpdi0+cHJvY19lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIFNldHVwIHRoZSBTdGF0c0RlbHRhICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKCJTdGF0c0RlbHRhIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggZjYxNzRmZC4uZTE3YTQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTExNTkzLDcgKzExNTkzLDYgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwppbmRleCAxNjZlZDk1Li5lMjZkN2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYwpAQCAtODAzLDcgKzgwMyw2IEBACiAJLm5kb190eF90aW1lb3V0CQk9IGlzbHBjaV9ldGhfdHhfdGltZW91dCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBwcmlzbTU0X3NldF9tYWNfYWRkcmVzcywKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA5YjI0NGM5Li41ZmFiZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMTcyNSw3ICsxNzI1LDYgQEAKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gemQxMjAxX3NldF9tYWNfYWRkcmVzcywKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNlLmMgYi9kcml2ZXJzL29mL2Jhc2UuYwppbmRleCBjZDE3MDkyLi40MWM1ZGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL2Jhc2UuYworKysgYi9kcml2ZXJzL29mL2Jhc2UuYwpAQCAtNDQ2LDYgKzQ0Niw3IEBACiB9Owogc3RhdGljIHN0cnVjdCBvZl9tb2RhbGlhc190YWJsZSBvZl9tb2RhbGlhc190YWJsZVtdID0gewogCXsgImZzbCxtY3UtbXBjODM0OWVtaXR4IiwgIm1jdS1tcGM4MzQ5ZW1pdHgiIH0sCisJeyAibW1jLXNwaS1zbG90IiwgIm1tY19zcGkiIH0sCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwppbmRleCBjM2VhNWZhLi4yYzlhYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IGJ1ZmZlcl9zeW5jX2NsZWFudXAodm9pZCkKK3ZvaWQgYnVmZmVyX3N5bmNfY2xlYW51cCh2b2lkKQogewogCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvYXNwLmMgYi9kcml2ZXJzL3BhcmlzYy9hc3AuYwppbmRleCA3OTMxMTMzNS4uOWNhMjEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvYXNwLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvYXNwLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlhc3AuaHBhID0gQVNQX0lOVEVSUlVQVF9BRERSOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdmVyc2lvbiAlZCBhdCAweCVseCBmb3VuZC5cbiIsIAotCQlhc3AubmFtZSwgYXNwLnZlcnNpb24sIGRldi0+aHBhLnN0YXJ0KTsKKwkJYXNwLm5hbWUsIGFzcC52ZXJzaW9uLCAodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAkvKiB0aGUgSVJRIEFTUCBzaG91bGQgdXNlICovCiAJcmV0ID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYyBiL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKaW5kZXggY2Q0ZGQ3ZS4uNWQ2MTBjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYworKysgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCkBAIC00MDYsOCArNDA2LDYgQEAKIAl9CiAJaW9jLT5hdmdfc2VhcmNoW2lvYy0+YXZnX2lkeCsrXSA9IGNyX3N0YXJ0OwogCWlvYy0+YXZnX2lkeCAmPSBDQ0lPX1NFQVJDSF9TQU1QTEUgLSAxOwotI2VuZGlmCi0jaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJaW9jLT51c2VkX3BhZ2VzICs9IHBhZ2VzX25lZWRlZDsKICNlbmRpZgogCS8qIApAQCAtNDUzLDEwICs0NTEsMTAgQEAKIAkJdW5zaWduZWQgbG9uZyBtYXNrID0gfih+MFVMID4+IHBhZ2VzX21hcHBlZCk7CiAJCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIG1hc2ssIDgpOwogI2Vsc2UKLQkJQ0NJT19GUkVFX01BUFBJTkdTKGlvYywgcmVzX2lkeCwgMHhmZiwgOCk7CisJCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIDB4ZmZVTCwgOCk7CiAjZW5kaWYKIAl9IGVsc2UgaWYocGFnZXNfbWFwcGVkIDw9IDE2KSB7Ci0JCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIDB4ZmZmZiwgMTYpOworCQlDQ0lPX0ZSRUVfTUFQUElOR1MoaW9jLCByZXNfaWR4LCAweGZmZmZVTCwgMTYpOwogCX0gZWxzZSBpZihwYWdlc19tYXBwZWQgPD0gMzIpIHsKIAkJQ0NJT19GUkVFX01BUFBJTkdTKGlvYywgcmVzX2lkeCwgfih1bnNpZ25lZCBpbnQpMCwgMzIpOwogI2lmZGVmIF9fTFA2NF9fCkBAIC0xMDI4LDggKzEwMjYsMTAgQEAKIAogCXdoaWxlIChpb2MgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBpbnQgdG90YWxfcGFnZXMgPSBpb2MtPnJlc19zaXplIDw8IDM7CisjaWZkZWYgQ0NJT19DT0xMRUNUX1NUQVRTCiAJCXVuc2lnbmVkIGxvbmcgYXZnID0gMCwgbWluLCBtYXg7CiAJCWludCBqOworI2VuZGlmCiAKIAkJbGVuICs9IHNlcV9wcmludGYobSwgIiVzXG4iLCBpb2MtPm5hbWUpOwogCQkKQEAgLTEwNjAsOCArMTA2MCw3IEBACiAJCWF2ZyAvPSBDQ0lPX1NFQVJDSF9TQU1QTEU7CiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICIgIEJpdG1hcCBzZWFyY2ggOiAlbGQvJWxkLyVsZCAobWluL2F2Zy9tYXggQ1BVIEN5Y2xlcylcbiIsCiAJCQkJICBtaW4sIGF2ZywgbWF4KTsKLSNlbmRpZgotI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUworCiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICJwY2lfbWFwX3NpbmdsZSgpOiAlOGxkIGNhbGxzICAlOGxkIHBhZ2VzIChhdmcgJWQvMTAwMClcbiIsCiAJCQkJICBpb2MtPm1zaW5nbGVfY2FsbHMsIGlvYy0+bXNpbmdsZV9wYWdlcywKIAkJCQkgIChpbnQpKChpb2MtPm1zaW5nbGVfcGFnZXMgKiAxMDAwKS9pb2MtPm1zaW5nbGVfY2FsbHMpKTsKQEAgLTE0MDAsNyArMTM5OSw3IEBACiAJcmVzdWx0ID0gaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkIHRvIGNsYWltIENDSU8gYnVzIGFkZHJlc3Mgc3BhY2UgKCUwOGx4LCUwOGx4KVxuIiwgCi0JCQlfX2Z1bmNfXywgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQkJX19mdW5jX18sICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kKTsKIAl9CiB9CiAKQEAgLTE1NTEsNyArMTU1MCw4IEBACiAKIAlpb2MtPm5hbWUgPSBkZXYtPmlkLmh2ZXJzaW9uID09IFUyX0lPQV9SVU5XQVkgPyAiVTIiIDogIlVUdXJuIjsKIAotCXByaW50ayhLRVJOX0lORk8gIkZvdW5kICVzIGF0IDB4JWx4XG4iLCBpb2MtPm5hbWUsIGRldi0+aHBhLnN0YXJ0KTsKKwlwcmludGsoS0VSTl9JTkZPICJGb3VuZCAlcyBhdCAweCVseFxuIiwgaW9jLT5uYW1lLAorCQkodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaW9jX2NvdW50OyBpKyspIHsKIAkJaW9jX3AgPSAmKCppb2NfcCktPm5leHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9kaW5vLmMgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKaW5kZXggYmI1YTFjOS4uNTJhZTBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZGluby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYwpAQCAtODE5LDcgKzgxOSw5IEBACiAKIAkJcmVzdWx0ID0gY2Npb19yZXF1ZXN0X3Jlc291cmNlKGRpbm9fZGV2LT5oYmEuZGV2LCAmcmVzW2ldKTsKIAkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjbGFpbSBQQ0kgQnVzIGFkZHJlc3Mgc3BhY2UgJWQgKDB4JWx4LTB4JWx4KSFcbiIsIG5hbWUsIGksIHJlc1tpXS5zdGFydCwgcmVzW2ldLmVuZCk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY2xhaW0gUENJIEJ1cyBhZGRyZXNzICIKKwkJCSAgICAgICAic3BhY2UgJWQgKDB4JWx4LTB4JWx4KSFcbiIsIG5hbWUsIGksCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcmVzW2ldLnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXNbaV0uZW5kKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0KIAl9CkBAIC04OTksNyArOTAxLDggQEAKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCByZXMpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0IEkvTyBQb3J0IHJlZ2lvbiBmYWlsZWQgIgogCQkgICAgICAgIjB4JWx4LyVseCAoaHBhIDB4JXApXG4iLAotCQkgICAgICAgbmFtZSwgcmVzLT5zdGFydCwgcmVzLT5lbmQsIGRpbm9fZGV2LT5oYmEuYmFzZV9hZGRyKTsKKwkJICAgICAgIG5hbWUsICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kLAorCQkgICAgICAgZGlub19kZXYtPmhiYS5iYXNlX2FkZHIpOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwppbmRleCA3ODkxZGI1Li5mNDE1ZmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZWlzYS5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAljaGFyICpuYW1lID0gaXNfbW9uZ29vc2UoZGV2KSA/ICJNb25nb29zZSIgOiAiV2F4IjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIEVJU0EgQWRhcHRlciBmb3VuZCBhdCAweCUwOGx4XG4iLCAKLQkJbmFtZSwgZGV2LT5ocGEuc3RhcnQpOworCQluYW1lLCAodW5zaWduZWQgbG9uZylkZXYtPmhwYS5zdGFydCk7CiAKIAllaXNhX2Rldi5oYmEuZGV2ID0gZGV2OwogCWVpc2FfZGV2LmhiYS5pb21tdSA9IGNjaW9fZ2V0X2lvbW11KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCmluZGV4IDZkOGFhZTAuLmM3MDllY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jCkBAIC05OCw3ICs5OCw3IEBACiAJCQlyZXMtPnN0YXJ0ID0gbWVtX3BhcmVudC0+c3RhcnQgKyBnZXRfMjQoYnVmK2xlbisyKTsKIAkJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIGdldF8xNihidWYrbGVuKzUpKjEwMjQ7CiAJCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JCQlwcmludGsoIm1lbW9yeSAlbHgtJWx4ICIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50aygibWVtb3J5ICVseC0lbHggIiwgKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcpcmVzLT5lbmQpOwogCQkJcmVzdWx0ID0gcmVxdWVzdF9yZXNvdXJjZShtZW1fcGFyZW50LCByZXMpOwogCQkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCQlwcmludGsoIlxuIiBLRVJOX0VSUiAiRUlTQSBFbnVtZXJhdG9yOiBmYWlsZWQgdG8gY2xhaW0gRUlTQSBCdXMgYWRkcmVzcyBzcGFjZSFcbiIpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCQlyZXMtPnN0YXJ0ID0gZ2V0XzE2KGJ1ZitsZW4rMSk7CiAJCQlyZXMtPmVuZCA9IGdldF8xNihidWYrbGVuKzEpKyhjJkhQRUVfUE9SVF9TSVpFX01BU0spKzE7CiAJCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQkJCXByaW50aygiaW9wb3J0cyAlbHgtJWx4ICIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCXByaW50aygiaW9wb3J0cyAlbHgtJWx4ICIsICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kKTsKIAkJCXJlc3VsdCA9IHJlcXVlc3RfcmVzb3VyY2UoaW9fcGFyZW50LCByZXMpOwogCQkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCQlwcmludGsoIlxuIiBLRVJOX0VSUiAiRUlTQSBFbnVtZXJhdG9yOiBmYWlsZWQgdG8gY2xhaW0gRUlTQSBCdXMgYWRkcmVzcyBzcGFjZSFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCmluZGV4IDUwMWFhZjEuLjczMzQ4YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYworKysgYi9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKQEAgLTcxNCw3ICs3MTQsNyBAQAogCWlmIChkZXN0X2NwdSA8IDApCiAJCXJldHVybjsKIAotCWlycV9kZXNjW2lycV0uYWZmaW5pdHkgPSBjcHVtYXNrX29mX2NwdShkZXN0X2NwdSk7CisJY3B1bWFza19jb3B5KGlycV9kZXNjW2lycV0uYWZmaW5pdHksIGNwdW1hc2tfb2YoZGVzdF9jcHUpKTsKIAl2aS0+dHhuX2FkZHIgPSB0eG5fYWZmaW5pdHlfYWRkcihpcnEsIGRlc3RfY3B1KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb3NhcGljX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKaW5kZXggNDU0YjY1My4uOTU4MWQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvbGVkLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvbGVkLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgUmVkIEhhdCBTb2Z0d2FyZQogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDAgSGVsZ2UgRGVsbGVyIDxoZGVsbGVyQHJlZGhhdC5jb20+Ci0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KKyAqICAgICAgKGMpIENvcHlyaWdodCAyMDAxLTIwMDkgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgogICogICAgICAoYykgQ29weXJpZ2h0IDIwMDEgUmFuZG9scGggQ2h1bmcgPHRhdXNxQGRlYmlhbi5vcmc+CiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjQzLDEzICsyNDMsMTEgQEAKIAogCXByb2NfcGRjX3Jvb3QgPSBwcm9jX21rZGlyKCJwZGMiLCAwKTsKIAlpZiAoIXByb2NfcGRjX3Jvb3QpIHJldHVybiAtMTsKLQlwcm9jX3BkY19yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJsZWQiLCBTX0lGUkVHfFNfSVJVR098U19JV1VTUiwgcHJvY19wZGNfcm9vdCk7CiAJaWYgKCFlbnQpIHJldHVybiAtMTsKIAllbnQtPmRhdGEgPSAodm9pZCAqKUxFRF9OT0xDRDsgLyogTEVEICovCiAJZW50LT5yZWFkX3Byb2MgPSBsZWRfcHJvY19yZWFkOwogCWVudC0+d3JpdGVfcHJvYyA9IGxlZF9wcm9jX3dyaXRlOwotCWVudC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChsZWRfdHlwZSA9PSBMRURfSEFTTENEKQogCXsKQEAgLTI1OCw3ICsyNTYsNiBAQAogCQllbnQtPmRhdGEgPSAodm9pZCAqKUxFRF9IQVNMQ0Q7IC8qIExDRCAqLwogCQllbnQtPnJlYWRfcHJvYyA9IGxlZF9wcm9jX3JlYWQ7CiAJCWVudC0+d3JpdGVfcHJvYyA9IGxlZF9wcm9jX3dyaXRlOwotCQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NjMsOSArNDYwLDIwIEBACiAJaWYgKGxpa2VseShsZWRfbGFucnh0eCkpICBjdXJyZW50bGVkcyB8PSBsZWRfZ2V0X25ldF9hY3Rpdml0eSgpOwogCWlmIChsaWtlbHkobGVkX2Rpc2tpbykpICAgY3VycmVudGxlZHMgfD0gbGVkX2dldF9kaXNraW9fYWN0aXZpdHkoKTsKIAotCS8qIGJsaW5rIGFsbCBMRURzIHR3aWNlIGEgc2Vjb25kIGlmIHdlIGdvdCBhbiBPb3BzIChIUE1DKSAqLwotCWlmICh1bmxpa2VseShvb3BzX2luX3Byb2dyZXNzKSkgCi0JCWN1cnJlbnRsZWRzID0gKGNvdW50X0haPD0oSFovMikpID8gMCA6IDB4ZmY7CisJLyogYmxpbmsgTEVEcyBpZiB3ZSBnb3QgYW4gT29wcyAoSFBNQykgKi8KKwlpZiAodW5saWtlbHkob29wc19pbl9wcm9ncmVzcykpIHsKKwkJaWYgKGJvb3RfY3B1X2RhdGEuY3B1X3R5cGUgPj0gcGN4bDIpIHsKKwkJCS8qIG5ld2VyIG1hY2hpbmVzIGRvbid0IGhhdmUgbG9hZGF2Zy4gTEVEcywgc28gd2UKKwkJCSAqIGxldCBhbGwgTEVEcyBibGluayB0d2ljZSBwZXIgc2Vjb25kIGluc3RlYWQgKi8KKwkJCWN1cnJlbnRsZWRzID0gKGNvdW50X0haIDw9IChIWi8yKSkgPyAwIDogMHhmZjsKKwkJfSBlbHNlIHsKKwkJCS8qIG9sZCBtYWNoaW5lczogYmxpbmsgbG9hZGF2Zy4gTEVEcyB0d2ljZSBwZXIgc2Vjb25kICovCisJCQlpZiAoY291bnRfSFogPD0gKEhaLzIpKQorCQkJCWN1cnJlbnRsZWRzICY9IH4oTEVENHxMRUQ1fExFRDZ8TEVENyk7CisJCQllbHNlCisJCQkJY3VycmVudGxlZHMgfD0gKExFRDR8TEVENXxMRUQ2fExFRDcpOworCQl9CisJfQogCiAJaWYgKGN1cnJlbnRsZWRzICE9IGxhc3RsZWRzKQogCXsKQEAgLTUxMSw3ICs1MTksNyBAQAogCQogCS8qIENhbmNlbCB0aGUgd29yayBpdGVtIGFuZCBkZWxldGUgdGhlIHF1ZXVlICovCiAJaWYgKGxlZF93cSkgewotCQljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUobGVkX3dxLCAmbGVkX3Rhc2spOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxlZF90YXNrKTsKIAkJZGVzdHJveV93b3JrcXVldWUobGVkX3dxKTsKIAkJbGVkX3dxID0gTlVMTDsKIAl9CkBAIC02MzAsNyArNjM4LDcgQEAKIAkKIAkvKiB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBsZWQgd29yayB0YXNrICovCiAJaWYgKGxlZF93cSkKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGxlZF93cSwgJmxlZF90YXNrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsZWRfdGFzayk7CiAKIAkvKiBjb3B5IGRpc3BsYXkgc3RyaW5nIHRvIGJ1ZmZlciBmb3IgcHJvY2ZzICovCiAJc3RybGNweShsY2RfdGV4dCwgc3RyLCBzaXplb2YobGNkX3RleHQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKaW5kZXggMDMyZGI4MS4uZjM0OTIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAl0aXRhbl8yMTBsLAogCW5ldG1vc185eHg1X2NvbWJvLAogCW5ldG1vc185ODU1LAorCW5ldG1vc185ODU1XzJwLAogCWF2bGFiXzFzMXAsCiAJYXZsYWJfMXMycCwKIAlhdmxhYl8yczFwLApAQCAtNjIsNyArNjMsNyBAQAogCQkJCXN0cnVjdCBwYXJwb3J0X3BjX3BjaSAqY2FyZCwgaW50IGZhaWxlZCk7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRtb3NfcGFyYWxsZWxfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGFycG9ydF9wY19wY2kgKmNhcmQsIGludCBhdXRvaXJxLCBpbnQgYXV0b2RtYSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5ldG1vc19wYXJhbGxlbF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwYXJwb3J0X3BjX3BjaSAqcGFyLCBpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCiB7CiAJLyogdGhlIHJ1bGUgZGVzY3JpYmVkIGJlbG93IGRvZXNuJ3QgaG9sZCBmb3IgdGhpcyBkZXZpY2UgKi8KIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSAmJgpAQCAtNzQsOSArNzUsMTcgQEAKIAkgKiBhbmQgc2VyaWFsIHBvcnRzLiAgVGhlIGZvcm0gaXMgMHgwMFBTLCB3aGVyZSA8UD4gaXMgdGhlIG51bWJlciBvZgogCSAqIHBhcmFsbGVsIHBvcnRzIGFuZCA8Uz4gaXMgdGhlIG51bWJlciBvZiBzZXJpYWwgcG9ydHMuCiAJICovCi0JY2FyZC0+bnVtcG9ydHMgPSAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmMCkgPj4gNDsKLQlpZiAoY2FyZC0+bnVtcG9ydHMgPiBBUlJBWV9TSVpFKGNhcmQtPmFkZHIpKQotCQljYXJkLT5udW1wb3J0cyA9IEFSUkFZX1NJWkUoY2FyZC0+YWRkcik7CisJcGFyLT5udW1wb3J0cyA9IChkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGYwKSA+PiA0OworCWlmIChwYXItPm51bXBvcnRzID4gQVJSQVlfU0laRShwYXItPmFkZHIpKQorCQlwYXItPm51bXBvcnRzID0gQVJSQVlfU0laRShwYXItPmFkZHIpOworCS8qCisJICogVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgb25seSBjYWxsZWQgZm9yIGNhcmRzIHdpdGggdXAgdG8KKwkgKiBvbmUgcGFyYWxsZWwgcG9ydC4KKwkgKiBQYXJhbGxlbCBwb3J0IEJBUiBpcyBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHNlcmlhbCBwb3J0cyBCQVJTOworCSAqIGhlbmNlLCBsbyBzaG91bGQgYmUgZWl0aGVyIDAgb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBzZXJpYWwgcG9ydHMuCisJICovCisJaWYgKHBhci0+YWRkclswXS5sbyAhPSAwKQorCQlwYXItPmFkZHJbMF0ubG8gPSBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgJiAweGY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0LDcgKzkzLDggQEAKIAkvKiB0aXRhbl8xMTBsICovCQl7IDEsIHsgeyAzLCAtMSB9LCB9IH0sCiAJLyogdGl0YW5fMjEwbCAqLwkJeyAxLCB7IHsgMywgLTEgfSwgfSB9LAogCS8qIG5ldG1vc185eHg1X2NvbWJvICovCQl7IDEsIHsgeyAyLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAotCS8qIG5ldG1vc185ODU1ICovCQl7IDEsIHsgeyAyLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAorCS8qIG5ldG1vc185ODU1ICovCQl7IDEsIHsgeyAwLCAtMSB9LCB9LCBuZXRtb3NfcGFyYWxsZWxfaW5pdCB9LAorCS8qIG5ldG1vc185ODU1XzJwICovCQl7IDIsIHsgeyAwLCAtMSB9LCB7IDIsIC0xIH0sIH0gfSwKIAkvKiBhdmxhYl8xczFwICAgICAqLwkJeyAxLCB7IHsgMSwgMn0sIH0gfSwKIAkvKiBhdmxhYl8xczJwICAgICAqLwkJeyAyLCB7IHsgMSwgMn0sIHsgMywgNCB9LH0gfSwKIAkvKiBhdmxhYl8yczFwICAgICAqLwkJeyAxLCB7IHsgMiwgM30sIH0gfSwKQEAgLTExMCw2ICsxMjAsMTAgQEAKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzl4eDVfY29tYm8gfSwKIAl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1LAorCSAgMHgxMDAwLCAweDAwMjAsIDAsIDAsIG5ldG1vc185ODU1XzJwIH0sCisJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSwKKwkgIDB4MTAwMCwgMHgwMDIyLCAwLCAwLCBuZXRtb3NfOTg1NV8ycCB9LAorCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUsCiAJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBuZXRtb3NfOTg1NSB9LAogCS8qIFBDSV9WRU5ET1JfSURfQVZMQUIvSW50ZWsyMSBoYXMgYW5vdGhlciBidW5jaCBvZiBjYXJkcyAuLi4qLwogCXsgUENJX1ZFTkRPUl9JRF9BRkFWTEFCLCAweDIxMTAsCkBAIC0xOTIsNiArMjA2LDEyIEBACiAJCS51YXJ0X29mZnNldAk9IDgsCiAJfSwKIAlbbmV0bW9zXzk4NTVdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTIgfCBGTF9CQVNFX0JBUlMsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAorCQkudWFydF9vZmZzZXQJPSA4LAorCX0sCisJW25ldG1vc185ODU1XzJwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0U0IHwgRkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzCT0gMSwKIAkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnCmluZGV4IDJhNDUwMWQuLmZkYzg2NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvS2NvbmZpZwpAQCAtNTksMyArNTksMTMgQEAKIAkgICBUaGlzIGFsbG93cyBuYXRpdmUgaHlwZXJ0cmFuc3BvcnQgZGV2aWNlcyB0byB1c2UgaW50ZXJydXB0cy4KIAogCSAgIElmIHVuc3VyZSBzYXkgWS4KKworY29uZmlnIFBDSV9JT1YKKwlib29sICJQQ0kgSU9WIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBJL08gVmlydHVhbGl6YXRpb24gaXMgYSBQQ0kgZmVhdHVyZSBzdXBwb3J0ZWQgYnkgc29tZSBkZXZpY2VzCisJICB3aGljaCBhbGxvd3MgdGhlbSB0byBjcmVhdGUgdmlydHVhbCBkZXZpY2VzIHdoaWNoIHNoYXJlIHRoZWlyCisJICBwaHlzaWNhbCByZXNvdXJjZXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDNkMDdjZTIuLmJhNmFmMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0yOSw2ICsyOSw4IEBACiAKIG9iai0kKENPTkZJR19JTlRSX1JFTUFQKSArPSBkbWFyLm8gaW50cl9yZW1hcHBpbmcubwogCitvYmotJChDT05GSUdfUENJX0lPVikgKz0gaW92Lm8KKwogIwogIyBTb21lIGFyY2hpdGVjdHVyZXMgdXNlIHRoZSBnZW5lcmljIFBDSSBzZXR1cCBmdW5jdGlvbnMKICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggNTJiNTRmMC4uNjhmOTFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICoKICAqIENhbGwgaG90cGx1ZyBmb3IgZWFjaCBuZXcgZGV2aWNlcy4KICAqLwotdm9pZCBwY2lfYnVzX2FkZF9kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCit2b2lkIHBjaV9idXNfYWRkX2RldmljZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCBwY2lfYnVzICpjaGlsZDsKQEAgLTE4NCw4ICsxODQsMTAgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkgewotCQkJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKLQkJCXBjaV9zZXRfbWFzdGVyKGRldik7CisJCQlpZiAoYXRvbWljX3JlYWQoJmRldi0+ZW5hYmxlX2NudCkgPT0gMCkgeworCQkJCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJCQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwkJCX0KIAkJCXBjaV9lbmFibGVfYnJpZGdlcyhkZXYtPnN1Ym9yZGluYXRlKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCA1ZjMzMzQwLi5kMzEzMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSA8bGludXgvaW92YS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI3VuZGVmIFBSRUZJWAogI2RlZmluZSBQUkVGSVggIkRNQVI6IgpAQCAtNTA5LDYgKzUxMSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaW9tbXUtPnNlcV9pZCA9IGlvbW11X2FsbG9jYXRlZCsrOworCXNwcmludGYgKGlvbW11LT5uYW1lLCAiZG1hciVkIiwgaW9tbXUtPnNlcV9pZCk7CiAKIAlpb21tdS0+cmVnID0gaW9yZW1hcChkcmhkLT5yZWdfYmFzZV9hZGRyLCBWVERfUEFHRV9TSVpFKTsKIAlpZiAoIWlvbW11LT5yZWcpIHsKQEAgLTc1MSw2ICs3NTQsNDIgQEAKIH0KIAogLyoKKyAqIERpc2FibGUgUXVldWVkIEludmFsaWRhdGlvbiBpbnRlcmZhY2UuCisgKi8KK3ZvaWQgZG1hcl9kaXNhYmxlX3FpKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RzOworCWN5Y2xlc190IHN0YXJ0X3RpbWUgPSBnZXRfY3ljbGVzKCk7CisKKwlpZiAoIWVjYXBfcWlzKGlvbW11LT5lY2FwKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7CisKKwlzdHMgPSAgZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9HU1RTX1JFRyk7CisJaWYgKCEoc3RzICYgRE1BX0dTVFNfUUlFUykpCisJCWdvdG8gZW5kOworCisJLyoKKwkgKiBHaXZlIGEgY2hhbmNlIHRvIEhXIHRvIGNvbXBsZXRlIHRoZSBwZW5kaW5nIGludmFsaWRhdGlvbiByZXF1ZXN0cy4KKwkgKi8KKwl3aGlsZSAoKHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0lRVF9SRUcpICE9CisJCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0lRSF9SRUcpKSAmJgorCQkoRE1BUl9PUEVSQVRJT05fVElNRU9VVCA+IChnZXRfY3ljbGVzKCkgLSBzdGFydF90aW1lKSkpCisJCWNwdV9yZWxheCgpOworCisJaW9tbXUtPmdjbWQgJj0gfkRNQV9HQ01EX1FJRTsKKworCXdyaXRlbChpb21tdS0+Z2NtZCwgaW9tbXUtPnJlZyArIERNQVJfR0NNRF9SRUcpOworCisJSU9NTVVfV0FJVF9PUChpb21tdSwgRE1BUl9HU1RTX1JFRywgcmVhZGwsCisJCSAgICAgICEoc3RzICYgRE1BX0dTVFNfUUlFUyksIHN0cyk7CitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKK30KKworLyoKICAqIEVuYWJsZSBRdWV1ZWQgSW52YWxpZGF0aW9uIGludGVyZmFjZS4gVGhpcyBpcyBhIG11c3QgdG8gc3VwcG9ydAogICogaW50ZXJydXB0LXJlbWFwcGluZy4gQWxzbyB1c2VkIGJ5IERNQS1yZW1hcHBpbmcsIHdoaWNoIHJlcGxhY2VzCiAgKiByZWdpc3RlciBiYXNlZCBJT1RMQiBpbnZhbGlkYXRpb24uCkBAIC03NzAsMjAgKzgwOSwyMCBAQAogCWlmIChpb21tdS0+cWkpCiAJCXJldHVybiAwOwogCi0JaW9tbXUtPnFpID0ga21hbGxvYyhzaXplb2YoKnFpKSwgR0ZQX0tFUk5FTCk7CisJaW9tbXUtPnFpID0ga21hbGxvYyhzaXplb2YoKnFpKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFpb21tdS0+cWkpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcWkgPSBpb21tdS0+cWk7CiAKLQlxaS0+ZGVzYyA9ICh2b2lkICopKGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKSk7CisJcWktPmRlc2MgPSAodm9pZCAqKShnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQykpOwogCWlmICghcWktPmRlc2MpIHsKIAkJa2ZyZWUocWkpOwogCQlpb21tdS0+cWkgPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlxaS0+ZGVzY19zdGF0dXMgPSBrbWFsbG9jKFFJX0xFTkdUSCAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwlxaS0+ZGVzY19zdGF0dXMgPSBrbWFsbG9jKFFJX0xFTkdUSCAqIHNpemVvZihpbnQpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXFpLT5kZXNjX3N0YXR1cykgewogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHFpLT5kZXNjKTsKIAkJa2ZyZWUocWkpOwpAQCAtODEyLDMgKzg1MSwyNTQgQEAKIAogCXJldHVybiAwOwogfQorCisvKiBpb21tdSBpbnRlcnJ1cHQgaGFuZGxpbmcuIE1vc3Qgc3R1ZmYgYXJlIE1TSS1saWtlLiAqLworCitlbnVtIGZhdWx0dHlwZSB7CisJRE1BX1JFTUFQLAorCUlOVFJfUkVNQVAsCisJVU5LTk9XTiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkbWFfcmVtYXBfZmF1bHRfcmVhc29uc1tdID0KK3sKKwkiU29mdHdhcmUiLAorCSJQcmVzZW50IGJpdCBpbiByb290IGVudHJ5IGlzIGNsZWFyIiwKKwkiUHJlc2VudCBiaXQgaW4gY29udGV4dCBlbnRyeSBpcyBjbGVhciIsCisJIkludmFsaWQgY29udGV4dCBlbnRyeSIsCisJIkFjY2VzcyBiZXlvbmQgTUdBVyIsCisJIlBURSBXcml0ZSBhY2Nlc3MgaXMgbm90IHNldCIsCisJIlBURSBSZWFkIGFjY2VzcyBpcyBub3Qgc2V0IiwKKwkiTmV4dCBwYWdlIHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKKwkiUm9vdCB0YWJsZSBhZGRyZXNzIGludmFsaWQiLAorCSJDb250ZXh0IHRhYmxlIHB0ciBpcyBpbnZhbGlkIiwKKwkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIFJUUCIsCisJIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBDVFAiLAorCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUFRFIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnNbXSA9Cit7CisJIkRldGVjdGVkIHJlc2VydmVkIGZpZWxkcyBpbiB0aGUgZGVjb2RlZCBpbnRlcnJ1cHQtcmVtYXBwZWQgcmVxdWVzdCIsCisJIkludGVycnVwdCBpbmRleCBleGNlZWRlZCB0aGUgaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBzaXplIiwKKwkiUHJlc2VudCBmaWVsZCBpbiB0aGUgSVJURSBlbnRyeSBpcyBjbGVhciIsCisJIkVycm9yIGFjY2Vzc2luZyBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIHBvaW50ZWQgYnkgSVJUQV9SRUciLAorCSJEZXRlY3RlZCByZXNlcnZlZCBmaWVsZHMgaW4gdGhlIElSVEUgZW50cnkiLAorCSJCbG9ja2VkIGEgY29tcGF0aWJpbGl0eSBmb3JtYXQgaW50ZXJydXB0IHJlcXVlc3QiLAorCSJCbG9ja2VkIGFuIGludGVycnVwdCByZXF1ZXN0IGR1ZSB0byBzb3VyY2UtaWQgdmVyaWZpY2F0aW9uIGZhaWx1cmUiLAorfTsKKworI2RlZmluZSBNQVhfRkFVTFRfUkVBU09OX0lEWCAJKEFSUkFZX1NJWkUoZmF1bHRfcmVhc29uX3N0cmluZ3MpIC0gMSkKKworY29uc3QgY2hhciAqZG1hcl9nZXRfZmF1bHRfcmVhc29uKHU4IGZhdWx0X3JlYXNvbiwgaW50ICpmYXVsdF90eXBlKQoreworCWlmIChmYXVsdF9yZWFzb24gPj0gMHgyMCAmJiAoZmF1bHRfcmVhc29uIDw9IDB4MjAgKworCQkJCSAgICAgQVJSQVlfU0laRShpbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnMpKSkgeworCQkqZmF1bHRfdHlwZSA9IElOVFJfUkVNQVA7CisJCXJldHVybiBpbnRyX3JlbWFwX2ZhdWx0X3JlYXNvbnNbZmF1bHRfcmVhc29uIC0gMHgyMF07CisJfSBlbHNlIGlmIChmYXVsdF9yZWFzb24gPCBBUlJBWV9TSVpFKGRtYV9yZW1hcF9mYXVsdF9yZWFzb25zKSkgeworCQkqZmF1bHRfdHlwZSA9IERNQV9SRU1BUDsKKwkJcmV0dXJuIGRtYV9yZW1hcF9mYXVsdF9yZWFzb25zW2ZhdWx0X3JlYXNvbl07CisJfSBlbHNlIHsKKwkJKmZhdWx0X3R5cGUgPSBVTktOT1dOOworCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKwordm9pZCBkbWFyX21zaV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJLyogdW5tYXNrIGl0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl3cml0ZWwoMCwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCisJcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3ZvaWQgZG1hcl9tc2lfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7CisKKwkvKiBtYXNrIGl0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl3cml0ZWwoRE1BX0ZFQ1RMX0lNLCBpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCS8qIFJlYWQgYSByZWcgdG8gZm9yY2UgZmx1c2ggdGhlIHBvc3Qgd3JpdGUgKi8KKwlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKK30KKwordm9pZCBkbWFyX21zaV93cml0ZShpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCXdyaXRlbChtc2ctPmRhdGEsIGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOworCXdyaXRlbChtc2ctPmFkZHJlc3NfbG8sIGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOworCXdyaXRlbChtc2ctPmFkZHJlc3NfaGksIGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3ZvaWQgZG1hcl9tc2lfcmVhZChpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCW1zZy0+ZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOworCW1zZy0+YWRkcmVzc19sbyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOworCW1zZy0+YWRkcmVzc19oaSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Cit9CisKK3N0YXRpYyBpbnQgZG1hcl9mYXVsdF9kb19vbmUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IHR5cGUsCisJCXU4IGZhdWx0X3JlYXNvbiwgdTE2IHNvdXJjZV9pZCwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCit7CisJY29uc3QgY2hhciAqcmVhc29uOworCWludCBmYXVsdF90eXBlOworCisJcmVhc29uID0gZG1hcl9nZXRfZmF1bHRfcmVhc29uKGZhdWx0X3JlYXNvbiwgJmZhdWx0X3R5cGUpOworCisJaWYgKGZhdWx0X3R5cGUgPT0gSU5UUl9SRU1BUCkKKwkJcHJpbnRrKEtFUk5fRVJSICJJTlRSLVJFTUFQOiBSZXF1ZXN0IGRldmljZSBbWyUwMng6JTAyeC4lZF0gIgorCQkgICAgICAgImZhdWx0IGluZGV4ICVsbHhcbiIKKwkJCSJJTlRSLVJFTUFQOltmYXVsdCByZWFzb24gJTAyZF0gJXNcbiIsCisJCQkoc291cmNlX2lkID4+IDgpLCBQQ0lfU0xPVChzb3VyY2VfaWQgJiAweEZGKSwKKwkJCVBDSV9GVU5DKHNvdXJjZV9pZCAmIDB4RkYpLCBhZGRyID4+IDQ4LAorCQkJZmF1bHRfcmVhc29uLCByZWFzb24pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRE1BUjpbJXNdIFJlcXVlc3QgZGV2aWNlIFslMDJ4OiUwMnguJWRdICIKKwkJICAgICAgICJmYXVsdCBhZGRyICVsbHggXG4iCisJCSAgICAgICAiRE1BUjpbZmF1bHQgcmVhc29uICUwMmRdICVzXG4iLAorCQkgICAgICAgKHR5cGUgPyAiRE1BIFJlYWQiIDogIkRNQSBXcml0ZSIpLAorCQkgICAgICAgKHNvdXJjZV9pZCA+PiA4KSwgUENJX1NMT1Qoc291cmNlX2lkICYgMHhGRiksCisJCSAgICAgICBQQ0lfRlVOQyhzb3VyY2VfaWQgJiAweEZGKSwgYWRkciwgZmF1bHRfcmVhc29uLCByZWFzb24pOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBSSU1BUllfRkFVTFRfUkVHX0xFTiAoMTYpCitpcnFyZXR1cm5fdCBkbWFyX2ZhdWx0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZGV2X2lkOworCWludCByZWcsIGZhdWx0X2luZGV4OworCXUzMiBmYXVsdF9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwlmYXVsdF9zdGF0dXMgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisJaWYgKGZhdWx0X3N0YXR1cykKKwkJcHJpbnRrKEtFUk5fRVJSICJEUkhEOiBoYW5kbGluZyBmYXVsdCBzdGF0dXMgcmVnICV4XG4iLAorCQkgICAgICAgZmF1bHRfc3RhdHVzKTsKKworCS8qIFRCRDogaWdub3JlIGFkdmFuY2VkIGZhdWx0IGxvZyBjdXJyZW50bHkgKi8KKwlpZiAoIShmYXVsdF9zdGF0dXMgJiBETUFfRlNUU19QUEYpKQorCQlnb3RvIGNsZWFyX3Jlc3Q7CisKKwlmYXVsdF9pbmRleCA9IGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChmYXVsdF9zdGF0dXMpOworCXJlZyA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGlvbW11LT5jYXApOworCXdoaWxlICgxKSB7CisJCXU4IGZhdWx0X3JlYXNvbjsKKwkJdTE2IHNvdXJjZV9pZDsKKwkJdTY0IGd1ZXN0X2FkZHI7CisJCWludCB0eXBlOworCQl1MzIgZGF0YTsKKworCQkvKiBoaWdoZXN0IDMyIGJpdHMgKi8KKwkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKworCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOworCQlpZiAoIShkYXRhICYgRE1BX0ZSQ0RfRikpCisJCQlicmVhazsKKworCQlmYXVsdF9yZWFzb24gPSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oZGF0YSk7CisJCXR5cGUgPSBkbWFfZnJjZF90eXBlKGRhdGEpOworCisJCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKKwkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDgpOworCQlzb3VyY2VfaWQgPSBkbWFfZnJjZF9zb3VyY2VfaWQoZGF0YSk7CisKKwkJZ3Vlc3RfYWRkciA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIHJlZyArCisJCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4pOworCQlndWVzdF9hZGRyID0gZG1hX2ZyY2RfcGFnZV9hZGRyKGd1ZXN0X2FkZHIpOworCQkvKiBjbGVhciB0aGUgZmF1bHQgKi8KKwkJd3JpdGVsKERNQV9GUkNEX0YsIGlvbW11LT5yZWcgKyByZWcgKworCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCisJCWRtYXJfZmF1bHRfZG9fb25lKGlvbW11LCB0eXBlLCBmYXVsdF9yZWFzb24sCisJCQkJc291cmNlX2lkLCBndWVzdF9hZGRyKTsKKworCQlmYXVsdF9pbmRleCsrOworCQlpZiAoZmF1bHRfaW5kZXggPiBjYXBfbnVtX2ZhdWx0X3JlZ3MoaW9tbXUtPmNhcCkpCisJCQlmYXVsdF9pbmRleCA9IDA7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJfQorY2xlYXJfcmVzdDoKKwkvKiBjbGVhciBhbGwgdGhlIG90aGVyIGZhdWx0cyAqLworCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKKwl3cml0ZWwoZmF1bHRfc3RhdHVzLCBpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgZG1hcl9zZXRfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJaW50IGlycSwgcmV0OworCisJLyoKKwkgKiBDaGVjayBpZiB0aGUgZmF1bHQgaW50ZXJydXB0IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGlvbW11LT5pcnEpCisJCXJldHVybiAwOworCisJaXJxID0gY3JlYXRlX2lycSgpOworCWlmICghaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IG5vIGZyZWUgdmVjdG9yc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNldF9pcnFfZGF0YShpcnEsIGlvbW11KTsKKwlpb21tdS0+aXJxID0gaXJxOworCisJcmV0ID0gYXJjaF9zZXR1cF9kbWFyX21zaShpcnEpOworCWlmIChyZXQpIHsKKwkJc2V0X2lycV9kYXRhKGlycSwgTlVMTCk7CisJCWlvbW11LT5pcnEgPSAwOworCQlkZXN0cm95X2lycShpcnEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYXJfZmF1bHQsIDAsIGlvbW11LT5uYW1lLCBpb21tdSk7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogY2FuJ3QgcmVxdWVzdCBpcnFcbiIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisKKwkvKgorCSAqIEVuYWJsZSBmYXVsdCBjb250cm9sIGludGVycnVwdC4KKwkgKi8KKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpbnQgcmV0OworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZHJoZC0+aW9tbXU7CisJCXJldCA9IGRtYXJfc2V0X2ludGVycnVwdChpb21tdSk7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJEUkhEICVMeDogZmFpbGVkIHRvIGVuYWJsZSBmYXVsdCwgIgorCQkJICAgICAgICIgaW50ZXJydXB0LCByZXQgJWRcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkcmhkLT5yZWdfYmFzZV9hZGRyLCByZXQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCmluZGV4IDFjMTE0MTguLmZiYzYzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCkBAIC0zMCw5ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2RlZmluZSBNWV9OQU1FCSJhY3BpX3BjaWhwIgogCkBAIC0zMzMsMTkgKzMzMiwxNCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKIAlhY3BpX2hhbmRsZSBoYW5kbGUsIHBoYW5kbGU7Ci0Jc3RydWN0IHBjaV9idXMgKnBidXMgPSBidXM7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IHBjaV9idXMgKnBidXM7CiAKLQlkbyB7Ci0JCXBkZXYgPSBwYnVzLT5zZWxmOwotCQlpZiAoIXBkZXYpIHsKLQkJCWhhbmRsZSA9IGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSgKLQkJCQlwY2lfZG9tYWluX25yKHBidXMpLCBwYnVzLT5udW1iZXIpOworCWhhbmRsZSA9IE5VTEw7CisJZm9yIChwYnVzID0gYnVzOyBwYnVzOyBwYnVzID0gcGJ1cy0+cGFyZW50KSB7CisJCWhhbmRsZSA9IGFjcGlfcGNpX2dldF9icmlkZ2VfaGFuZGxlKHBidXMpOworCQlpZiAoaGFuZGxlKQogCQkJYnJlYWs7Ci0JCX0KLQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7Ci0JCXBidXMgPSBwYnVzLT5wYXJlbnQ7Ci0JfSB3aGlsZSAoIWhhbmRsZSk7CisJfQogCiAJLyoKIAkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCkBAIC0zNzgsMTIgKzM3MiwxMCBAQAogICoKICAqIEF0dGVtcHQgdG8gdGFrZSBob3RwbHVnIGNvbnRyb2wgZnJvbSBmaXJtd2FyZS4KICAqLwotaW50IGFjcGlfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgZmxhZ3MpCitpbnQgYWNwaV9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaGFuZGxlIGNoYW5kbGUsIGhhbmRsZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldjsKLQlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBzdHJpbmcgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKIAlmbGFncyAmPSAoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwKQEAgLTQwOCwzMyArNDAwLDI1IEBACiAJCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZzdHJpbmcpOwogCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlc1xuIiwKIAkJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKLQkJc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsIGZsYWdzKTsKKwkJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwgZmxhZ3MpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCQlnb3RvIGdvdF9vbmU7CiAJCWtmcmVlKHN0cmluZy5wb2ludGVyKTsKIAkJc3RyaW5nID0gKHN0cnVjdCBhY3BpX2J1ZmZlcil7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJfQogCi0JcGRldiA9IGRldjsKLQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJmRldi0+ZGV2KTsKLQl3aGlsZSAoIWhhbmRsZSkgeworCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KTsKKwlpZiAoIWhhbmRsZSkgewogCQkvKgogCQkgKiBUaGlzIGhvdHBsdWcgY29udHJvbGxlciB3YXMgbm90IGxpc3RlZCBpbiB0aGUgQUNQSSBuYW1lCiAJCSAqIHNwYWNlIGF0IGFsbC4gVHJ5IHRvIGdldCBhY3BpIGhhbmRsZSBvZiBwYXJlbnQgcGNpIGJ1cy4KIAkJICovCi0JCWlmICghcGRldiB8fCAhcGRldi0+YnVzLT5wYXJlbnQpCi0JCQlicmVhazsKLQkJcGFyZW50ID0gcGRldi0+YnVzLT5wYXJlbnQ7Ci0JCWRiZygiQ291bGQgbm90IGZpbmQgJXMgaW4gYWNwaSBuYW1lc3BhY2UsIHRyeWluZyBwYXJlbnRcbiIsCi0JCSAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCWlmICghcGFyZW50LT5zZWxmKQotCQkJLyogUGFyZW50IG11c3QgYmUgYSBob3N0IGJyaWRnZSAqLwotCQkJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAotCQkJCQlwY2lfZG9tYWluX25yKHBhcmVudCksCi0JCQkJCXBhcmVudC0+bnVtYmVyKTsKLQkJZWxzZQotCQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGFyZW50LT5zZWxmLT5kZXYpKTsKLQkJcGRldiA9IHBhcmVudC0+c2VsZjsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CisJCWZvciAocGJ1cyA9IHBkZXYtPmJ1czsgcGJ1czsgcGJ1cyA9IHBidXMtPnBhcmVudCkgeworCQkJaGFuZGxlID0gYWNwaV9wY2lfZ2V0X2JyaWRnZV9oYW5kbGUocGJ1cyk7CisJCQlpZiAoaGFuZGxlKQorCQkJCWJyZWFrOworCQl9CiAJfQogCiAJd2hpbGUgKGhhbmRsZSkgewpAQCAtNDUzLDEzICs0MzcsMTMgQEAKIAl9CiAKIAlkYmcoIkNhbm5vdCBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGZvciBwY2kgJXNcbiIsCi0JICAgIHBjaV9uYW1lKGRldikpOworCSAgICBwY2lfbmFtZShwZGV2KSk7CiAKIAlrZnJlZShzdHJpbmcucG9pbnRlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiBnb3Rfb25lOgotCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLCBwY2lfbmFtZShkZXYpLAotCQkJKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJZGJnKCJHYWluZWQgY29udHJvbCBmb3IgaG90cGx1ZyBIVyBmb3IgcGNpICVzICglcylcbiIsCisJICAgIHBjaV9uYW1lKHBkZXYpLCAoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKIAlrZnJlZShzdHJpbmcucG9pbnRlcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCmluZGV4IGQ4NjQ5ZTEuLjYxNTEzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCkBAIC0xLDM5NSArMSwxNjMgQEAKLS8qCi0gKiBGYWtlIFBDSSBIb3QgUGx1ZyBDb250cm9sbGVyIERyaXZlcgorLyogV29ya3MgbGlrZSB0aGUgZmFrZXBocCBkcml2ZXIgdXNlZCB0bywgZXhjZXB0IGEgbGl0dGxlIGJldHRlci4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBSb2xmIEVpa2UgQmVlciA8ZWlrZS1rZXJuZWxAc2YtdGVjLmRlPgorICogLSBJdCdzIHBvc3NpYmxlIHRvIHJlbW92ZSBkZXZpY2VzIHdpdGggc3Vib3JkaW5hdGUgYnVzc2VzLgorICogLSBOZXcgUENJIGRldmljZXMgdGhhdCBhcHBlYXIgdmlhIGFueSBtZXRob2QsIG5vdCBqdXN0IGEgZmFrZXBocCB0cmlnZ2VyZWQKKyAqICAgcmVzY2FuLCB3aWxsIGJlIG5vdGljZWQuCisgKiAtIERldmljZXMgdGhhdCBhcmUgcmVtb3ZlZCB2aWEgYW55IG1ldGhvZCwgbm90IGp1c3QgYSBmYWtlcGhwIHRyaWdnZXJlZAorICogICByZW1vdmFsLCB3aWxsIGFsc28gYmUgbm90aWNlZC4KICAqCi0gKiBCYXNlZCBvbiBpZGVhcyBhbmQgY29kZSBmcm9tOgotICogCVZsYWRpbWlyIEtvbmRyYXRpZXYgPHZsYWRpbWlyLmtvbmRyYXRpZXZAaW50ZWwuY29tPgotICoJUm9sZiBFaWtlIEJlZXIgPGVpa2Uta2VybmVsQHNmLXRlYy5kZT4KKyAqIFVzZXMgbm90aGluZyBmcm9tIHRoZSBwY2ktaG90cGx1ZyBzdWJzeXN0ZW0uCiAgKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4KICAqLwogCi0vKgotICoKLSAqIFRoaXMgZHJpdmVyIHdpbGwgImVtdWxhdGUiIHJlbW92aW5nIFBDSSBkZXZpY2VzIGZyb20gdGhlIHN5c3RlbS4gIElmCi0gKiB0aGUgInBvd2VyIiBmaWxlIGlzIHdyaXR0ZW4gdG8gd2l0aCAiMCIgdGhlbiB0aGUgc3BlY2lmaWVkIFBDSSBkZXZpY2UKLSAqIHdpbGwgYmUgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbC4KLSAqCi0gKiBXQVJOSU5HLCB0aGlzIGRvZXMgTk9UIHR1cm4gb2ZmIHRoZSBwb3dlciB0byB0aGUgUENJIGRldmljZS4gIFRoaXMgaXMKLSAqIGEgImxvZ2ljYWwiIHJlbW92YWwsIG5vdCBhIHBoeXNpY2FsIG9yIGVsZWN0cmljYWwgcmVtb3ZhbC4KLSAqCi0gKiBVc2UgdGhpcyBtb2R1bGUgYXQgeW91ciBvd24gcmlzaywgeW91IGhhdmUgYmVlbiB3YXJuZWQhCi0gKgotICogRW5hYmxpbmcgUENJIGRldmljZXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICIuLi9wY2kuaCIKIAotI2lmICFkZWZpbmVkKE1PRFVMRSkKLQkjZGVmaW5lIE1ZX05BTUUJImZha2VwaHAiCi0jZWxzZQotCSNkZWZpbmUgTVlfTkFNRQlUSElTX01PRFVMRS0+bmFtZQotI2VuZGlmCi0KLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpZiAoZGVidWcpCQkJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LAlcCi0JCQkJTVlfTkFNRSAsICMjIGFyZyk7IAkJXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SCSJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MJIkZha2UgUENJIEhvdCBQbHVnIENvbnRyb2xsZXIgRHJpdmVyIgotCi1zdHJ1Y3QgZHVtbXlfc2xvdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVtb3ZlX3dvcms7Ci0JdW5zaWduZWQgbG9uZyByZW1vdmVkOworc3RydWN0IGxlZ2FjeV9zbG90IHsKKwlzdHJ1Y3Qga29iamVjdAkJa29iajsKKwlzdHJ1Y3QgcGNpX2RldgkJKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCi1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBkdXBfc2xvdHM7Ci1zdGF0aWMgTElTVF9IRUFEKHNsb3RfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmR1bW15cGhwX3dxOworc3RhdGljIExJU1RfSEVBRChsZWdhY3lfbGlzdCk7CiAKLXN0YXRpYyB2b2lkIHBjaV9yZXNjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgREVDTEFSRV9XT1JLKHBjaV9yZXNjYW5fd29yaywgcGNpX3Jlc2Nhbl93b3JrZXIpOwotCi1zdGF0aWMgaW50IGVuYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKLXN0YXRpYyBpbnQgZGlzYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKLQotc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIGR1bW15X2hvdHBsdWdfc2xvdF9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuZW5hYmxlX3Nsb3QJCT0gZW5hYmxlX3Nsb3QsCi0JLmRpc2FibGVfc2xvdAkJPSBkaXNhYmxlX3Nsb3QsCi19OwotCi1zdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpCitzdGF0aWMgc3NpemVfdCBsZWdhY3lfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3QgPSBzbG90LT5wcml2YXRlOwotCi0JbGlzdF9kZWwoJmRzbG90LT5ub2RlKTsKLQlrZnJlZShkc2xvdC0+c2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoZHNsb3QtPnNsb3QpOwotCXBjaV9kZXZfcHV0KGRzbG90LT5kZXYpOwotCWtmcmVlKGRzbG90KTsKKwlzdHJ1Y3QgbGVnYWN5X3Nsb3QgKnNsb3QgPSBjb250YWluZXJfb2Yoa29iaiwgdHlwZW9mKCpzbG90KSwga29iaik7CisJc3RyY3B5KGJ1ZiwgIjFcbiIpOworCXJldHVybiAyOwogfQogCi0jZGVmaW5lIFNMT1RfTkFNRV9TSVpFCTgKLQotc3RhdGljIGludCBhZGRfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcmVtb3ZlX2NhbGxiYWNrKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGR1bW15X3Nsb3QgKmRzbG90OwotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3Q7Ci0JY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQlzdGF0aWMgaW50IGNvdW50ID0gMTsKKwlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoKHN0cnVjdCBwY2lfZGV2ICopZGF0YSk7Cit9CiAKLQlzbG90ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghc2xvdCkKLQkJZ290byBlcnJvcjsKK3N0YXRpYyBzc2l6ZV90IGxlZ2FjeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90ID0gY29udGFpbmVyX29mKGtvYmosIHR5cGVvZigqc2xvdCksIGtvYmopOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0Jc2xvdC0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghc2xvdC0+aW5mbykKLQkJZ290byBlcnJvcl9zbG90OworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzbG90LT5pbmZvLT5wb3dlcl9zdGF0dXMgPSAxOwotCXNsb3QtPmluZm8tPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlzbG90LT5pbmZvLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlkc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdW1teV9zbG90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc2xvdCkKLQkJZ290byBlcnJvcl9pbmZvOwotCi0JaWYgKGR1cF9zbG90cykKLQkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICJmYWtlIik7CisJaWYgKHZhbCkKKwkJcGNpX3Jlc2Nhbl9idXMoc2xvdC0+ZGV2LT5idXMpOwogCWVsc2UKLQkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICJmYWtlJWQiLCBjb3VudCsrKTsKLQlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgbmFtZSk7Ci0Jc2xvdC0+b3BzID0gJmR1bW15X2hvdHBsdWdfc2xvdF9vcHM7Ci0Jc2xvdC0+cmVsZWFzZSA9ICZkdW1teV9yZWxlYXNlOwotCXNsb3QtPnByaXZhdGUgPSBkc2xvdDsKKwkJc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soJnNsb3QtPmRldi0+ZGV2LmtvYmosIHJlbW92ZV9jYWxsYmFjaywKKwkJCQkJc2xvdC0+ZGV2LCBUSElTX01PRFVMRSk7CisJcmV0dXJuIGxlbjsKK30KIAotCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LCBkZXYtPmJ1cywgUENJX1NMT1QoZGV2LT5kZXZmbiksIG5hbWUpOwotCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCWdvdG8gZXJyb3JfZHNsb3Q7Ci0JfQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZ2FjeV9hdHRyc1tdID0geworCSYoc3RydWN0IGF0dHJpYnV0ZSl7IC5uYW1lID0gInBvd2VyIiwgLm1vZGUgPSAwNjQ0IH0sCisJTlVMTCwKK307CiAKLQlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwotCWRzbG90LT5zbG90ID0gc2xvdDsKLQlkc2xvdC0+ZGV2ID0gcGNpX2Rldl9nZXQoZGV2KTsKLQlsaXN0X2FkZCAoJmRzbG90LT5ub2RlLCAmc2xvdF9saXN0KTsKLQlyZXR1cm4gcmV0dmFsOworc3RhdGljIHZvaWQgbGVnYWN5X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90ID0gY29udGFpbmVyX29mKGtvYmosIHR5cGVvZigqc2xvdCksIGtvYmopOwogCi1lcnJvcl9kc2xvdDoKLQlrZnJlZShkc2xvdCk7Ci1lcnJvcl9pbmZvOgotCWtmcmVlKHNsb3QtPmluZm8pOwotZXJyb3Jfc2xvdDoKKwlwY2lfZGV2X3B1dChzbG90LT5kZXYpOwogCWtmcmVlKHNsb3QpOwotZXJyb3I6Ci0JcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGNpX3NjYW5fYnVzZXModm9pZCkKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGxlZ2FjeV9rdHlwZSA9IHsKKwkuc3lzZnNfb3BzID0gJihzdHJ1Y3Qgc3lzZnNfb3BzKXsKKwkJLnN0b3JlID0gbGVnYWN5X3N0b3JlLCAuc2hvdyA9IGxlZ2FjeV9zaG93CisJfSwKKwkucmVsZWFzZSA9ICZsZWdhY3lfcmVsZWFzZSwKKwkuZGVmYXVsdF9hdHRycyA9IGxlZ2FjeV9hdHRycywKK307CisKK3N0YXRpYyBpbnQgbGVnYWN5X2FkZF9zbG90KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCWludCBsYXN0c2xvdCA9IDA7Ci0KLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pID4gMCAmJgotCQkJCWxhc3RzbG90ID09IFBDSV9TTE9UKGRldi0+ZGV2Zm4pKQotCQkJY29udGludWU7Ci0JCWxhc3RzbG90ID0gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci0JCWFkZF9zbG90KGRldik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9zbG90KHN0cnVjdCBkdW1teV9zbG90ICpkc2xvdCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JZGJnKCJyZW1vdmluZyBzbG90ICVzXG4iLCBob3RwbHVnX3Nsb3RfbmFtZShkc2xvdC0+c2xvdCkpOwotCXJldHZhbCA9IHBjaV9ocF9kZXJlZ2lzdGVyKGRzbG90LT5zbG90KTsKLQlpZiAocmV0dmFsKQotCQllcnIoIlByb2JsZW0gdW5yZWdpc3RlcmluZyBhIHNsb3QgJXNcbiIsCi0JCQlob3RwbHVnX3Nsb3RfbmFtZShkc2xvdC0+c2xvdCkpOwotfQotCi0vKiBjYWxsZWQgZnJvbSB0aGUgc2luZ2xlLXRocmVhZGVkIHdvcmtxdWV1ZSBoYW5kbGVyIHRvIHJlbW92ZSBhIHNsb3QgKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9zbG90X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGR1bW15X3Nsb3QgKmRzbG90ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkdW1teV9zbG90LCByZW1vdmVfd29yayk7Ci0JcmVtb3ZlX3Nsb3QoZHNsb3QpOwotfQotCi0vKioKLSAqIHBjaV9yZXNjYW5fc2xvdCAtIFJlc2NhbiBzbG90Ci0gKiBAdGVtcDogRGV2aWNlIHRlbXBsYXRlLiBTaG91bGQgYmUgc2V0OiBidXMgYW5kIGRldmZuLgotICoKLSAqIFRyaWVzIGhhcmQgbm90IHRvIHJlLWVuYWJsZSBhbHJlYWR5IGV4aXN0aW5nIGRldmljZXM7Ci0gKiBhbHNvIGhhbmRsZXMgc2Nhbm5pbmcgb2Ygc3ViZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW50IHBjaV9yZXNjYW5fc2xvdChzdHJ1Y3QgcGNpX2RldiAqdGVtcCkKLXsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gdGVtcC0+YnVzOwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0JaW50IGZ1bmM7Ci0JdTggaGRyX3R5cGU7Ci0JaW50IGNvdW50ID0gMDsKLQotCWlmICghcGNpX3JlYWRfY29uZmlnX2J5dGUodGVtcCwgUENJX0hFQURFUl9UWVBFLCAmaGRyX3R5cGUpKSB7Ci0JCXRlbXAtPmhkcl90eXBlID0gaGRyX3R5cGUgJiAweDdmOwotCQlpZiAoKGRldiA9IHBjaV9nZXRfc2xvdChidXMsIHRlbXAtPmRldmZuKSkgIT0gTlVMTCkKLQkJCXBjaV9kZXZfcHV0KGRldik7Ci0JCWVsc2UgewotCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIHRlbXAtPmRldmZuKTsKLQkJCWlmIChkZXYpIHsKLQkJCQlkYmcoIk5ldyBkZXZpY2Ugb24gJXMgZnVuY3Rpb24gJXg6JXhcbiIsCi0JCQkJCWJ1cy0+bmFtZSwgdGVtcC0+ZGV2Zm4gPj4gMywKLQkJCQkJdGVtcC0+ZGV2Zm4gJiA3KTsKLQkJCQljb3VudCsrOwotCQkJfQotCQl9Ci0JCS8qIG11bHRpZnVuY3Rpb24gZGV2aWNlPyAqLwotCQlpZiAoIShoZHJfdHlwZSAmIDB4ODApKQotCQkJcmV0dXJuIGNvdW50OwotCi0JCS8qIGNvbnRpbnVlIHNjYW5uaW5nIGZvciBvdGhlciBmdW5jdGlvbnMgKi8KLQkJZm9yIChmdW5jID0gMSwgdGVtcC0+ZGV2Zm4rKzsgZnVuYyA8IDg7IGZ1bmMrKywgdGVtcC0+ZGV2Zm4rKykgewotCQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKHRlbXAsIFBDSV9IRUFERVJfVFlQRSwgJmhkcl90eXBlKSkKLQkJCQljb250aW51ZTsKLQkJCXRlbXAtPmhkcl90eXBlID0gaGRyX3R5cGUgJiAweDdmOwotCi0JCQlpZiAoKGRldiA9IHBjaV9nZXRfc2xvdChidXMsIHRlbXAtPmRldmZuKSkgIT0gTlVMTCkKLQkJCQlwY2lfZGV2X3B1dChkZXYpOwotCQkJZWxzZSB7Ci0JCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIHRlbXAtPmRldmZuKTsKLQkJCQlpZiAoZGV2KSB7Ci0JCQkJCWRiZygiTmV3IGRldmljZSBvbiAlcyBmdW5jdGlvbiAleDoleFxuIiwKLQkJCQkJCWJ1cy0+bmFtZSwgdGVtcC0+ZGV2Zm4gPj4gMywKLQkJCQkJCXRlbXAtPmRldmZuICYgNyk7Ci0JCQkJCWNvdW50Kys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi0KLS8qKgotICogcGNpX3Jlc2Nhbl9idXMgLSBSZXNjYW4gUENJIGJ1cwotICogQGJ1czogdGhlIFBDSSBidXMgdG8gcmVzY2FuCi0gKgotICogQ2FsbCBwY2lfcmVzY2FuX3Nsb3QgZm9yIGVhY2ggcG9zc2libGUgZnVuY3Rpb24gb2YgdGhlIGJ1cy4KLSAqLwotc3RhdGljIHZvaWQgcGNpX3Jlc2Nhbl9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlpbnQgcmV0dmFsOwotCWludCBmb3VuZCA9IDA7Ci0JZGV2ID0gYWxsb2NfcGNpX2RldigpOwotCWlmICghZGV2KQotCQlyZXR1cm47Ci0KLQlkZXYtPmJ1cyA9IChzdHJ1Y3QgcGNpX2J1cyopYnVzOwotCWRldi0+c3lzZGF0YSA9IGJ1cy0+c3lzZGF0YTsKLQlmb3IgKGRldmZuID0gMDsgZGV2Zm4gPCAweDEwMDsgZGV2Zm4gKz0gOCkgewotCQlkZXYtPmRldmZuID0gZGV2Zm47Ci0JCWZvdW5kICs9IHBjaV9yZXNjYW5fc2xvdChkZXYpOwotCX0KLQotCWlmIChmb3VuZCkgewotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7Ci0JCQkvKiBTa2lwIGFscmVhZHktYWRkZWQgZGV2aWNlcyAqLwotCQkJaWYgKGRldi0+aXNfYWRkZWQpCi0JCQkJCWNvbnRpbnVlOwotCQkJcmV0dmFsID0gcGNpX2J1c19hZGRfZGV2aWNlKGRldik7Ci0JCQlpZiAocmV0dmFsKQotCQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCQkiRXJyb3IgYWRkaW5nIGRldmljZSwgY29udGludWluZ1xuIik7Ci0JCQllbHNlCi0JCQkJYWRkX3Nsb3QoZGV2KTsKLQkJfQotCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JfQotCWtmcmVlKGRldik7Ci19Ci0KLS8qIHJlY3Vyc2l2ZWx5IHNjYW4gYWxsIGJ1c2VzICovCi1zdGF0aWMgdm9pZCBwY2lfcmVzY2FuX2J1c2VzKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0JY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbDsKLQlsaXN0X2Zvcl9lYWNoKGwsbGlzdCkgewotCQljb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYiA9IHBjaV9idXNfYihsKTsKLQkJcGNpX3Jlc2Nhbl9idXMoYik7Ci0JCXBjaV9yZXNjYW5fYnVzZXMoJmItPmNoaWxkcmVuKTsKLQl9Ci19Ci0KLS8qIGluaXRpYXRlIHJlc2NhbiBvZiBhbGwgcGNpIGJ1c2VzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc2Nhbih2b2lkKSB7Ci0JcGNpX3Jlc2Nhbl9idXNlcygmcGNpX3Jvb3RfYnVzZXMpOwotfQotCi0vKiBjYWxsZWQgZnJvbSB0aGUgc2luZ2xlLXRocmVhZGVkIHdvcmtxdWV1ZSBoYW5kbGVyIHRvIHJlc2NhbiBhbGwgcGNpIGJ1c2VzICovCi1zdGF0aWMgdm9pZCBwY2lfcmVzY2FuX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JcGNpX3Jlc2NhbigpOwotfQotCi1zdGF0aWMgaW50IGVuYWJsZV9zbG90KHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCkKLXsKLQkvKiBtaXMtdXNlIGVuYWJsZV9zbG90IGZvciByZXNjYW5uaW5nIG9mIHRoZSBwY2kgYnVzICovCi0JY2FuY2VsX3dvcmtfc3luYygmcGNpX3Jlc2Nhbl93b3JrKTsKLQlxdWV1ZV93b3JrKGR1bW15cGhwX3dxLCAmcGNpX3Jlc2Nhbl93b3JrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCkKLXsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3Q7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlpbnQgZnVuYzsKKwlzdHJ1Y3QgbGVnYWN5X3Nsb3QgKnNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFzbG90KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlkc2xvdCA9IHNsb3QtPnByaXZhdGU7Ci0KLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwotCi0JZm9yIChmdW5jID0gNzsgZnVuYyA+PSAwOyBmdW5jLS0pIHsKLQkJZGV2ID0gcGNpX2dldF9zbG90KGRzbG90LT5kZXYtPmJ1cywgZHNsb3QtPmRldi0+ZGV2Zm4gKyBmdW5jKTsKLQkJaWYgKCFkZXYpCi0JCQljb250aW51ZTsKLQotCQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmZHNsb3QtPnJlbW92ZWQpKSB7Ci0JCQlkYmcoIlNsb3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHJlbW92YWxcbiIpOwotCQkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLQkJLyogcmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgcGNpIGNvcmUgKi8KLQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7Ci0KLQkJLyogcXVldWUgd29yayBpdGVtIHRvIGJsb3cgYXdheSB0aGlzIHN5c2ZzIGVudHJ5IGFuZCBvdGhlcgotCQkgKiBwYXJ0cy4KLQkJICovCi0JCUlOSVRfV09SSygmZHNsb3QtPnJlbW92ZV93b3JrLCByZW1vdmVfc2xvdF93b3JrZXIpOwotCQlxdWV1ZV93b3JrKGR1bW15cGhwX3dxLCAmZHNsb3QtPnJlbW92ZV93b3JrKTsKLQotCQlwY2lfZGV2X3B1dChkZXYpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW51cF9zbG90cyAodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3Q7Ci0KLQlkZXN0cm95X3dvcmtxdWV1ZShkdW1teXBocF93cSk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlICh0bXAsIG5leHQsICZzbG90X2xpc3QpIHsKLQkJZHNsb3QgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCBkdW1teV9zbG90LCBub2RlKTsKLQkJcmVtb3ZlX3Nsb3QoZHNsb3QpOwotCX0KLQkKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHVtbXlwaHBfaW5pdCh2b2lkKQotewotCWluZm8oRFJJVkVSX0RFU0MgIlxuIik7Ci0KLQlkdW1teXBocF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKE1ZX05BTUUpOwotCWlmICghZHVtbXlwaHBfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIHBjaV9zY2FuX2J1c2VzKCk7CisJaWYgKGtvYmplY3RfaW5pdF9hbmRfYWRkKCZzbG90LT5rb2JqLCAmbGVnYWN5X2t0eXBlLAorCQkJCSAmcGNpX3Nsb3RzX2tzZXQtPmtvYmosICIlcyIsCisJCQkJIGRldl9uYW1lKCZwZGV2LT5kZXYpKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZWQgbGVnYWN5IGZha2Ugc2xvdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzbG90LT5kZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKKworCWxpc3RfYWRkKCZzbG90LT5saXN0LCAmbGVnYWN5X2xpc3QpOworCisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIHZvaWQgX19leGl0IGR1bW15cGhwX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgbGVnYWN5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQogewotCWNsZWFudXBfc2xvdHMoKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGF0YSk7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRSkgeworCQlsZWdhY3lfYWRkX3Nsb3QocGRldik7CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9ERUxfREVWSUNFKSB7CisJCXN0cnVjdCBsZWdhY3lfc2xvdCAqc2xvdDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZsZWdhY3lfbGlzdCwgbGlzdCkKKwkJCWlmIChzbG90LT5kZXYgPT0gcGRldikKKwkJCQlnb3RvIGZvdW5kOworCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJNaXNzaW5nIGxlZ2FjeSBmYWtlIHNsb3Q/Iik7CisJCXJldHVybiAtRU5PREVWOworZm91bmQ6CisJCWtvYmplY3RfZGVsKCZzbG90LT5rb2JqKTsKKwkJbGlzdF9kZWwoJnNsb3QtPmxpc3QpOworCQlrb2JqZWN0X3B1dCgmc2xvdC0+a29iaik7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KGR1bW15cGhwX2luaXQpOwotbW9kdWxlX2V4aXQoZHVtbXlwaHBfZXhpdCk7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGxlZ2FjeV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGxlZ2FjeV9ub3RpZnkKK307CiAKLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworc3RhdGljIGludCBfX2luaXQgaW5pdF9sZWdhY3kodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisKKwkvKiBBZGQgZXhpc3RpbmcgZGV2aWNlcyAqLworCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSkKKwkJbGVnYWN5X2FkZF9zbG90KHBkZXYpOworCisJLyogQmUgYWxlcnRlZCBvZiBhbnkgbmV3IG9uZXMgKi8KKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBjaV9idXNfdHlwZSwgJmxlZ2FjeV9ub3RpZmllcik7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChpbml0X2xlZ2FjeSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZW1vdmVfbGVnYWN5KHZvaWQpCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90LCAqdG1wOworCisJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJnBjaV9idXNfdHlwZSwgJmxlZ2FjeV9ub3RpZmllcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xvdCwgdG1wLCAmbGVnYWN5X2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnNsb3QtPmxpc3QpOworCQlrb2JqZWN0X2RlbCgmc2xvdC0+a29iaik7CisJCWtvYmplY3RfcHV0KCZzbG90LT5rb2JqKTsKKwl9Cit9Cittb2R1bGVfZXhpdChyZW1vdmVfbGVnYWN5KTsKKworCitNT0RVTEVfQVVUSE9SKCJUcmVudCBQaWVwaG8gPHh5enp5QHNwZWFrZWFzeS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxlZ2FjeSB2ZXJzaW9uIG9mIHRoZSBmYWtlcGhwIGludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1vZGUgZW5hYmxlZCBvciBub3QiKTsKLW1vZHVsZV9wYXJhbShkdXBfc2xvdHMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHVwX3Nsb3RzLCAiRm9yY2UgZHVwbGljYXRlIHNsb3QgbmFtZXMgZm9yIGRlYnVnZ2luZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggMzlhZTM3NS4uMGEzNjg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC00NiwxMCArNDYsMTAgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcGNpZWhwX3dxOwogCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAocGNpZWhwX2RlYnVnKQkJCQkJXAotCQkJcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCi0JfSB3aGlsZSAoMCkKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHBjaWVocF9kZWJ1ZykJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgY3RybF9kYmcoY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAocGNpZWhwX2RlYnVnKQkJCQkJXAotCQkJZGV2X3ByaW50aygsICZjdHJsLT5wY2llLT5kZXZpY2UsCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZjdHJsLT5wY2llLT5kZXZpY2UsCVwKIAkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXApAQCAtMTA4LDEwICsxMDgsMTEgQEAKIAl1MzIgc2xvdF9jYXA7CiAJdTggY2FwX2Jhc2U7CiAJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKLQlpbnQgY21kX2J1c3k7CisJdW5zaWduZWQgaW50IGNtZF9idXN5OjE7CiAJdW5zaWduZWQgaW50IG5vX2NtZF9jb21wbGV0ZToxOwogCXVuc2lnbmVkIGludCBsaW5rX2FjdGl2ZV9yZXBvcnRpbmc6MTsKIAl1bnNpZ25lZCBpbnQgbm90aWZpY2F0aW9uX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQgcG93ZXJfZmF1bHRfZGV0ZWN0ZWQ7CiB9OwogCiAjZGVmaW5lIElOVF9CVVRUT05fSUdOT1JFCQkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9hY3BpLmMKaW5kZXggNDM4ZDc5NS4uOTYwNDgwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2FjcGkuYwpAQCAtNjcsMzcgKzY3LDI3IEBACiAJcmV0dXJuIFBDSUVIUF9ERVRFQ1RfREVGQVVMVDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCBfX2luaXRkYXRhIHBvcnRfcGNpX2lkc1tdID0gewotCXsKLQkJLnZlbmRvciA9IFBDSV9BTllfSUQsCi0JCS5kZXZpY2UgPSBQQ0lfQU5ZX0lELAotCQkucG9ydF90eXBlID0gUENJRV9BTllfUE9SVCwKLQkJLnNlcnZpY2VfdHlwZSA9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAotCQkuZHJpdmVyX2RhdGEgPSAgMCwKLSAgICAgICAgfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKLQogc3RhdGljIGludCBfX2luaXRkYXRhIGR1cF9zbG90X2lkOwogc3RhdGljIGludCBfX2luaXRkYXRhIGFjcGlfc2xvdF9kZXRlY3RlZDsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIF9faW5pdGRhdGEgZHVtbXlfc2xvdHMgPSBMSVNUX0hFQURfSU5JVChkdW1teV9zbG90cyk7CiAKIC8qIER1bW15IGRyaXZlciBmb3IgZHVtcGxpY2F0ZSBuYW1lIGRldGVjdGlvbiAqLwotc3RhdGljIGludCBfX2luaXQgZHVtbXlfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2luaXQgZHVtbXlfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJaW50IHBvczsKIAl1MzIgc2xvdF9jYXA7CiAJc3RydWN0IHNsb3QgKnNsb3QsICp0bXA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXYtPnBvcnQ7CiAJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKLQlpZiAoIShzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwogCS8qIE5vdGU6IHBjaWVocF9kZXRlY3RfbW9kZSAhPSBQQ0lFSFBfREVURUNUX0FDUEkgaGVyZSAqLwogCWlmIChwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShwZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcG9zICsgUENJX0VYUF9TTFRDQVAsICZzbG90X2NhcCk7CisJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG90KQorCQlyZXR1cm4gLUVOT01FTTsKIAlzbG90LT5udW1iZXIgPSBzbG90X2NhcCA+PiAxOTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmR1bW15X3Nsb3RzLCBzbG90X2xpc3QpIHsKIAkJaWYgKHRtcC0+bnVtYmVyID09IHNsb3QtPm51bWJlcikKQEAgLTExMSw3ICsxMDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBfX2luaXRkYXRhIGR1bW15X2RyaXZlciA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gInBjaWVocF9kdW1teSIsCi0gICAgICAgIC5pZF90YWJsZSAgICAgICA9IHBvcnRfcGNpX2lkcywKKwkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAogICAgICAgICAucHJvYmUgICAgICAgICAgPSBkdW1teV9wcm9iZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwppbmRleCA2ODFlMzkxLi5mYjI1NGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2llaHBfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHBjaWVocF9wcm9iZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CkBAIC00NzUsNyArNDc1LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2llaHBfc3VzcGVuZCAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcGNpZWhwX3N1c3BlbmQgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCWRldl9pbmZvKCZkZXYtPmRldmljZSwgIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CkBAIC01MDMsMjAgKzUwMywxMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkIHBvcnRfcGNpX2lkc1tdID0geyB7Ci0JLnZlbmRvciA9IFBDSV9BTllfSUQsCi0JLmRldmljZSA9IFBDSV9BTllfSUQsCi0JLnBvcnRfdHlwZSA9IFBDSUVfQU5ZX1BPUlQsCi0JLnNlcnZpY2VfdHlwZSA9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAotCS5kcml2ZXJfZGF0YSA9CTAsCi0JfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKKyNlbmRpZiAvKiBQTSAqLwogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBocGRyaXZlcl9wb3J0ZHJ2ID0gewogCS5uYW1lCQk9IFBDSUVfTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlCT0gJnBvcnRfcGNpX2lkc1swXSwKKwkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAogCiAJLnByb2JlCQk9IHBjaWVocF9wcm9iZSwKIAkucmVtb3ZlCQk9IHBjaWVocF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDdhMTZjNjguLjA3YmQzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC01NDgsMjMgKzU0OCwyMSBAQAogCiAJc2xvdF9jbWQgPSBQT1dFUl9PTjsKIAljbWRfbWFzayA9IFBDSV9FWFBfU0xUQ1RMX1BDQzsKLQkvKiBFbmFibGUgZGV0ZWN0aW9uIHRoYXQgd2UgdHVybmVkIG9mZiBhdCBzbG90IHBvd2VyLW9mZiB0aW1lICovCiAJaWYgKCFwY2llaHBfcG9sbF9tb2RlKSB7Ci0JCXNsb3RfY21kIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7Ci0JCWNtZF9tYXNrIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7CisJCS8qIEVuYWJsZSBwb3dlciBmYXVsdCBkZXRlY3Rpb24gdHVybmVkIG9mZiBhdCBwb3dlciBvZmYgdGltZSAqLworCQlzbG90X2NtZCB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOworCQljbWRfbWFzayB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOwogCX0KIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7Ci0KIAlpZiAocmV0dmFsKSB7CiAJCWN0cmxfZXJyKGN0cmwsICJXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIHNsb3RfY21kKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKIAkJIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFBDSV9FWFBfU0xUQ1RMLCBzbG90X2NtZCk7CiAKKwljdHJsLT5wb3dlcl9mYXVsdF9kZXRlY3RlZCA9IDA7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjIxLDE4ICs2MTksMTAgQEAKIAogCXNsb3RfY21kID0gUE9XRVJfT0ZGOwogCWNtZF9tYXNrID0gUENJX0VYUF9TTFRDVExfUENDOwotCS8qCi0JICogSWYgd2UgZ2V0IE1STCBvciBwcmVzZW5jZSBkZXRlY3QgaW50ZXJydXB0cyBub3csIHRoZSBpc3IKLQkgKiB3aWxsIG5vdGljZSB0aGUgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCB0b28gYW5kIGlzc3VlIHBvd2VyCi0JICogaW5kaWNhdG9yIGNoYW5nZSBjb21tYW5kcy4gVGhpcyB3aWxsIGxlYWQgdG8gYW4gZW5kbGVzcyBsb29wCi0JICogb2YgY29tbWFuZCBjb21wbGV0aW9ucywgc2luY2UgdGhlIHBvd2VyLWZhdWx0IGJpdCByZW1haW5zIG9uCi0JICogdGlsbCB0aGUgc2xvdCBpcyBwb3dlcmVkIG9uIGFnYWluLgotCSAqLwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkgewotCQlzbG90X2NtZCAmPSB+KFBDSV9FWFBfU0xUQ1RMX1BGREUgfCBQQ0lfRVhQX1NMVENUTF9NUkxTQ0UgfAotCQkJICAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7Ci0JCWNtZF9tYXNrIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7CisJCS8qIERpc2FibGUgcG93ZXIgZmF1bHQgZGV0ZWN0aW9uICovCisJCXNsb3RfY21kICY9IH5QQ0lfRVhQX1NMVENUTF9QRkRFOworCQljbWRfbWFzayB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOwogCX0KIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7CkBAIC02NzIsMTAgKzY2MiwxMSBAQAogCQlkZXRlY3RlZCAmPSAoUENJX0VYUF9TTFRTVEFfQUJQIHwgUENJX0VYUF9TTFRTVEFfUEZEIHwKIAkJCSAgICAgUENJX0VYUF9TTFRTVEFfTVJMU0MgfCBQQ0lfRVhQX1NMVFNUQV9QREMgfAogCQkJICAgICBQQ0lfRVhQX1NMVFNUQV9DQyk7CisJCWRldGVjdGVkICY9IH5pbnRyX2xvYzsKIAkJaW50cl9sb2MgfD0gZGV0ZWN0ZWQ7CiAJCWlmICghaW50cl9sb2MpCiAJCQlyZXR1cm4gSVJRX05PTkU7Ci0JCWlmIChkZXRlY3RlZCAmJiBwY2llaHBfd3JpdGV3KGN0cmwsIFBDSV9FWFBfU0xUU1RBLCBkZXRlY3RlZCkpIHsKKwkJaWYgKGRldGVjdGVkICYmIHBjaWVocF93cml0ZXcoY3RybCwgUENJX0VYUF9TTFRTVEEsIGludHJfbG9jKSkgewogCQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVU1xuIiwKIAkJCQkgX19mdW5jX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwpAQCAtNzA5LDkgKzcwMCwxMCBAQAogCQlwY2llaHBfaGFuZGxlX3ByZXNlbmNlX2NoYW5nZShwX3Nsb3QpOwogCiAJLyogQ2hlY2sgUG93ZXIgRmF1bHQgRGV0ZWN0ZWQgKi8KLQlpZiAoaW50cl9sb2MgJiBQQ0lfRVhQX1NMVFNUQV9QRkQpCisJaWYgKChpbnRyX2xvYyAmIFBDSV9FWFBfU0xUU1RBX1BGRCkgJiYgIWN0cmwtPnBvd2VyX2ZhdWx0X2RldGVjdGVkKSB7CisJCWN0cmwtPnBvd2VyX2ZhdWx0X2RldGVjdGVkID0gMTsKIAkJcGNpZWhwX2hhbmRsZV9wb3dlcl9mYXVsdChwX3Nsb3QpOwotCisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKaW5kZXggNmFiYTBiNi4uOTc0ZTkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC00OCwxMCArNDgsMTAgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2hwY2hwX3dxOwogCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoc2hwY2hwX2RlYnVnKQkJCQkJXAotCQkJcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCi0JfSB3aGlsZSAoMCkKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNocGNocF9kZWJ1ZykJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKQEAgLTYyLDcgKzYyLDcgQEAKICNkZWZpbmUgY3RybF9kYmcoY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoc2hwY2hwX2RlYnVnKQkJCQkJXAotCQkJZGV2X3ByaW50aygsICZjdHJsLT5wY2lfZGV2LT5kZXYsCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZjdHJsLT5wY2lfZGV2LT5kZXYsCVwKIAkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCAxMzhmMTYxLi5hYTMxNWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCQkJCQkJYnVzbnIpKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCWlmIChidXNuciA+PSBlbmQpIHsKKwkJCWlmIChidXNuciA+IGVuZCkgewogCQkJCWN0cmxfZXJyKGN0cmwsCiAJCQkJCSAiTm8gZnJlZSBidXMgZm9yIGhvdC1hZGRlZCBicmlkZ2VcbiIpOwogCQkJCXBjaV9kZXZfcHV0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBmM2Y2ODY1Li4yM2U1NmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTE2NCw3ICsxNjQsOCBAQAogICogMTogd3JpdGFibGUKICAqIDItNjogcmVzZXJ2ZWQKICAqIDc6IHN1cGVyIHBhZ2UKLSAqIDgtMTE6IGF2YWlsYWJsZQorICogOC0xMDogYXZhaWxhYmxlCisgKiAxMTogc25vb3AgYmVoYXZpb3IKICAqIDEyLTYzOiBIb3N0IHBoeXNjaWFsIGFkZHJlc3MKICAqLwogc3RydWN0IGRtYV9wdGUgewpAQCAtMTg2LDYgKzE4NywxMSBAQAogCXB0ZS0+dmFsIHw9IERNQV9QVEVfV1JJVEU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc2V0X3B0ZV9zbnAoc3RydWN0IGRtYV9wdGUgKnB0ZSkKK3sKKwlwdGUtPnZhbCB8PSBETUFfUFRFX1NOUDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zZXRfcHRlX3Byb3Qoc3RydWN0IGRtYV9wdGUgKnB0ZSwgdW5zaWduZWQgbG9uZyBwcm90KQogewogCXB0ZS0+dmFsID0gKHB0ZS0+dmFsICYgfjMpIHwgKHByb3QgJiAzKTsKQEAgLTIzMSw2ICsyMzcsNyBAQAogCWludAkJZmxhZ3M7CQkvKiBmbGFncyB0byBmaW5kIG91dCB0eXBlIG9mIGRvbWFpbiAqLwogCiAJaW50CQlpb21tdV9jb2hlcmVuY3k7LyogaW5kaWNhdGUgY29oZXJlbmN5IG9mIGlvbW11IGFjY2VzcyAqLworCWludAkJaW9tbXVfc25vb3Bpbmc7IC8qIGluZGljYXRlIHNub29waW5nIGNvbnRyb2wgZmVhdHVyZSovCiAJaW50CQlpb21tdV9jb3VudDsJLyogcmVmZXJlbmNlIGNvdW50IG9mIGlvbW11ICovCiAJc3BpbmxvY2tfdAlpb21tdV9sb2NrOwkvKiBwcm90ZWN0IGlvbW11IHNldCBpbiBkb21haW4gKi8KIAl1NjQJCW1heF9hZGRyOwkvKiBtYXhpbXVtIG1hcHBlZCBhZGRyZXNzICovCkBAIC00MjEsNyArNDI4LDYgQEAKIAlyZXR1cm4gZ19pb21tdXNbaW9tbXVfaWRdOwogfQogCi0vKiAiQ29oZXJlbmN5IiBjYXBhYmlsaXR5IG1heSBiZSBkaWZmZXJlbnQgYWNyb3NzIGlvbW11cyAqLwogc3RhdGljIHZvaWQgZG9tYWluX3VwZGF0ZV9pb21tdV9jb2hlcmVuY3koc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCiB7CiAJaW50IGk7CkBAIC00MzgsNiArNDQ0LDI5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBkb21haW5fdXBkYXRlX2lvbW11X3Nub29waW5nKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQoreworCWludCBpOworCisJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDE7CisKKwlpID0gZmluZF9maXJzdF9iaXQoJmRvbWFpbi0+aW9tbXVfYm1wLCBnX251bV9vZl9pb21tdXMpOworCWZvciAoOyBpIDwgZ19udW1fb2ZfaW9tbXVzOyApIHsKKwkJaWYgKCFlY2FwX3NjX3N1cHBvcnQoZ19pb21tdXNbaV0tPmVjYXApKSB7CisJCQlkb21haW4tPmlvbW11X3Nub29waW5nID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWkgPSBmaW5kX25leHRfYml0KCZkb21haW4tPmlvbW11X2JtcCwgZ19udW1fb2ZfaW9tbXVzLCBpKzEpOworCX0KK30KKworLyogU29tZSBjYXBhYmlsaXRpZXMgbWF5IGJlIGRpZmZlcmVudCBhY3Jvc3MgaW9tbXVzICovCitzdGF0aWMgdm9pZCBkb21haW5fdXBkYXRlX2lvbW11X2NhcChzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKK3sKKwlkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShkb21haW4pOworCWRvbWFpbl91cGRhdGVfaW9tbXVfc25vb3BpbmcoZG9tYWluKTsKK30KKwogc3RhdGljIHN0cnVjdCBpbnRlbF9pb21tdSAqZGV2aWNlX3RvX2lvbW11KHU4IGJ1cywgdTggZGV2Zm4pCiB7CiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkID0gTlVMTDsKQEAgLTY4OSwxNSArNzE4LDE3IEBACiBzdGF0aWMgdm9pZCBkbWFfcHRlX2NsZWFyX3JhbmdlKHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluLCB1NjQgc3RhcnQsIHU2NCBlbmQpCiB7CiAJaW50IGFkZHJfd2lkdGggPSBhZ2F3X3RvX3dpZHRoKGRvbWFpbi0+YWdhdyk7CisJaW50IG5wYWdlczsKIAogCXN0YXJ0ICY9ICgoKHU2NCkxKSA8PCBhZGRyX3dpZHRoKSAtIDE7CiAJZW5kICY9ICgoKHU2NCkxKSA8PCBhZGRyX3dpZHRoKSAtIDE7CiAJLyogaW4gY2FzZSBpdCdzIHBhcnRpYWwgcGFnZSAqLwogCXN0YXJ0ID0gUEFHRV9BTElHTihzdGFydCk7CiAJZW5kICY9IFBBR0VfTUFTSzsKKwlucGFnZXMgPSAoZW5kIC0gc3RhcnQpIC8gVlREX1BBR0VfU0laRTsKIAogCS8qIHdlIGRvbid0IG5lZWQgbG9jayBoZXJlLCBub2JvZHkgZWxzZSB0b3VjaGVzIHRoZSBpb3ZhIHJhbmdlICovCi0Jd2hpbGUgKHN0YXJ0IDwgZW5kKSB7CisJd2hpbGUgKG5wYWdlcy0tKSB7CiAJCWRtYV9wdGVfY2xlYXJfb25lKGRvbWFpbiwgc3RhcnQpOwogCQlzdGFydCArPSBWVERfUEFHRV9TSVpFOwogCX0KQEAgLTEwMDQsMTk0ICsxMDM1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogaW9tbXUgaW50ZXJydXB0IGhhbmRsaW5nLiBNb3N0IHN0dWZmIGFyZSBNU0ktbGlrZS4gKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgKmZhdWx0X3JlYXNvbl9zdHJpbmdzW10gPQotewotCSJTb2Z0d2FyZSIsCi0JIlByZXNlbnQgYml0IGluIHJvb3QgZW50cnkgaXMgY2xlYXIiLAotCSJQcmVzZW50IGJpdCBpbiBjb250ZXh0IGVudHJ5IGlzIGNsZWFyIiwKLQkiSW52YWxpZCBjb250ZXh0IGVudHJ5IiwKLQkiQWNjZXNzIGJleW9uZCBNR0FXIiwKLQkiUFRFIFdyaXRlIGFjY2VzcyBpcyBub3Qgc2V0IiwKLQkiUFRFIFJlYWQgYWNjZXNzIGlzIG5vdCBzZXQiLAotCSJOZXh0IHBhZ2UgdGFibGUgcHRyIGlzIGludmFsaWQiLAotCSJSb290IHRhYmxlIGFkZHJlc3MgaW52YWxpZCIsCi0JIkNvbnRleHQgdGFibGUgcHRyIGlzIGludmFsaWQiLAotCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUlRQIiwKLQkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIENUUCIsCi0JIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBQVEUiLAotfTsKLSNkZWZpbmUgTUFYX0ZBVUxUX1JFQVNPTl9JRFggCShBUlJBWV9TSVpFKGZhdWx0X3JlYXNvbl9zdHJpbmdzKSAtIDEpCi0KLWNvbnN0IGNoYXIgKmRtYXJfZ2V0X2ZhdWx0X3JlYXNvbih1OCBmYXVsdF9yZWFzb24pCi17Ci0JaWYgKGZhdWx0X3JlYXNvbiA+IE1BWF9GQVVMVF9SRUFTT05fSURYKQotCQlyZXR1cm4gIlVua25vd24iOwotCWVsc2UKLQkJcmV0dXJuIGZhdWx0X3JlYXNvbl9zdHJpbmdzW2ZhdWx0X3JlYXNvbl07Ci19Ci0KLXZvaWQgZG1hcl9tc2lfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCS8qIHVubWFzayBpdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0Jd3JpdGVsKDAsIGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0JLyogUmVhZCBhIHJlZyB0byBmb3JjZSBmbHVzaCB0aGUgcG9zdCB3cml0ZSAqLwotCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi12b2lkIGRtYXJfbXNpX21hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOwotCi0JLyogbWFzayBpdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0Jd3JpdGVsKERNQV9GRUNUTF9JTSwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCi0JcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci19Ci0KLXZvaWQgZG1hcl9tc2lfd3JpdGUoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQl3cml0ZWwobXNnLT5kYXRhLCBpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKLQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLCBpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKLQl3cml0ZWwobXNnLT5hZGRyZXNzX2hpLCBpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi12b2lkIGRtYXJfbXNpX3JlYWQoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQltc2ctPmRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRURBVEFfUkVHKTsKLQltc2ctPmFkZHJlc3NfbG8gPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUFERFJfUkVHKTsKLQltc2ctPmFkZHJlc3NfaGkgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRVVBRERSX1JFRyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotfQotCi1zdGF0aWMgaW50IGlvbW11X3BhZ2VfZmF1bHRfZG9fb25lKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCB0eXBlLAotCQl1OCBmYXVsdF9yZWFzb24sIHUxNiBzb3VyY2VfaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQotewotCWNvbnN0IGNoYXIgKnJlYXNvbjsKLQotCXJlYXNvbiA9IGRtYXJfZ2V0X2ZhdWx0X3JlYXNvbihmYXVsdF9yZWFzb24pOwotCi0JcHJpbnRrKEtFUk5fRVJSCi0JCSJETUFSOlslc10gUmVxdWVzdCBkZXZpY2UgWyUwMng6JTAyeC4lZF0gIgotCQkiZmF1bHQgYWRkciAlbGx4IFxuIgotCQkiRE1BUjpbZmF1bHQgcmVhc29uICUwMmRdICVzXG4iLAotCQkodHlwZSA/ICJETUEgUmVhZCIgOiAiRE1BIFdyaXRlIiksCi0JCShzb3VyY2VfaWQgPj4gOCksIFBDSV9TTE9UKHNvdXJjZV9pZCAmIDB4RkYpLAotCQlQQ0lfRlVOQyhzb3VyY2VfaWQgJiAweEZGKSwgYWRkciwgZmF1bHRfcmVhc29uLCByZWFzb24pOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFBSSU1BUllfRkFVTFRfUkVHX0xFTiAoMTYpCi1zdGF0aWMgaXJxcmV0dXJuX3QgaW9tbXVfcGFnZV9mYXVsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGRldl9pZDsKLQlpbnQgcmVnLCBmYXVsdF9pbmRleDsKLQl1MzIgZmF1bHRfc3RhdHVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JZmF1bHRfc3RhdHVzID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOwotCi0JLyogVEJEOiBpZ25vcmUgYWR2YW5jZWQgZmF1bHQgbG9nIGN1cnJlbnRseSAqLwotCWlmICghKGZhdWx0X3N0YXR1cyAmIERNQV9GU1RTX1BQRikpCi0JCWdvdG8gY2xlYXJfb3ZlcmZsb3c7Ci0KLQlmYXVsdF9pbmRleCA9IGRtYV9mc3RzX2ZhdWx0X3JlY29yZF9pbmRleChmYXVsdF9zdGF0dXMpOwotCXJlZyA9IGNhcF9mYXVsdF9yZWdfb2Zmc2V0KGlvbW11LT5jYXApOwotCXdoaWxlICgxKSB7Ci0JCXU4IGZhdWx0X3JlYXNvbjsKLQkJdTE2IHNvdXJjZV9pZDsKLQkJdTY0IGd1ZXN0X2FkZHI7Ci0JCWludCB0eXBlOwotCQl1MzIgZGF0YTsKLQotCQkvKiBoaWdoZXN0IDMyIGJpdHMgKi8KLQkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKwotCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgMTIpOwotCQlpZiAoIShkYXRhICYgRE1BX0ZSQ0RfRikpCi0JCQlicmVhazsKLQotCQlmYXVsdF9yZWFzb24gPSBkbWFfZnJjZF9mYXVsdF9yZWFzb24oZGF0YSk7Ci0JCXR5cGUgPSBkbWFfZnJjZF90eXBlKGRhdGEpOwotCi0JCWRhdGEgPSByZWFkbChpb21tdS0+cmVnICsgcmVnICsKLQkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDgpOwotCQlzb3VyY2VfaWQgPSBkbWFfZnJjZF9zb3VyY2VfaWQoZGF0YSk7Ci0KLQkJZ3Vlc3RfYWRkciA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIHJlZyArCi0JCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4pOwotCQlndWVzdF9hZGRyID0gZG1hX2ZyY2RfcGFnZV9hZGRyKGd1ZXN0X2FkZHIpOwotCQkvKiBjbGVhciB0aGUgZmF1bHQgKi8KLQkJd3JpdGVsKERNQV9GUkNEX0YsIGlvbW11LT5yZWcgKyByZWcgKwotCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCi0JCWlvbW11X3BhZ2VfZmF1bHRfZG9fb25lKGlvbW11LCB0eXBlLCBmYXVsdF9yZWFzb24sCi0JCQkJc291cmNlX2lkLCBndWVzdF9hZGRyKTsKLQotCQlmYXVsdF9pbmRleCsrOwotCQlpZiAoZmF1bHRfaW5kZXggPiBjYXBfbnVtX2ZhdWx0X3JlZ3MoaW9tbXUtPmNhcCkpCi0JCQlmYXVsdF9pbmRleCA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JfQotY2xlYXJfb3ZlcmZsb3c6Ci0JLyogY2xlYXIgcHJpbWFyeSBmYXVsdCBvdmVyZmxvdyAqLwotCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKLQlpZiAoZmF1bHRfc3RhdHVzICYgRE1BX0ZTVFNfUEZPKQotCQl3cml0ZWwoRE1BX0ZTVFNfUEZPLCBpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgZG1hcl9zZXRfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCi17Ci0JaW50IGlycSwgcmV0OwotCi0JaXJxID0gY3JlYXRlX2lycSgpOwotCWlmICghaXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IG5vIGZyZWUgdmVjdG9yc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNldF9pcnFfZGF0YShpcnEsIGlvbW11KTsKLQlpb21tdS0+aXJxID0gaXJxOwotCi0JcmV0ID0gYXJjaF9zZXR1cF9kbWFyX21zaShpcnEpOwotCWlmIChyZXQpIHsKLQkJc2V0X2lycV9kYXRhKGlycSwgTlVMTCk7Ci0JCWlvbW11LT5pcnEgPSAwOwotCQlkZXN0cm95X2lycShpcnEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBGb3JjZSBmYXVsdCByZWdpc3RlciBpcyBjbGVhcmVkICovCi0JaW9tbXVfcGFnZV9mYXVsdChpcnEsIGlvbW11KTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaW9tbXVfcGFnZV9mYXVsdCwgMCwgaW9tbXUtPm5hbWUsIGlvbW11KTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBjYW4ndCByZXF1ZXN0IGlycVxuIik7Ci0JcmV0dXJuIHJldDsKLX0KIAogc3RhdGljIGludCBpb21tdV9pbml0X2RvbWFpbnMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKIHsKQEAgLTE0MjksNiArMTI3MiwxMSBAQAogCWVsc2UKIAkJZG9tYWluLT5pb21tdV9jb2hlcmVuY3kgPSAwOwogCisJaWYgKGVjYXBfc2Nfc3VwcG9ydChpb21tdS0+ZWNhcCkpCisJCWRvbWFpbi0+aW9tbXVfc25vb3BpbmcgPSAxOworCWVsc2UKKwkJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDA7CisKIAlkb21haW4tPmlvbW11X2NvdW50ID0gMTsKIAogCS8qIGFsd2F5cyBhbGxvY2F0ZSB0aGUgdG9wIHBnZCAqLwpAQCAtMTU1Nyw3ICsxNDA1LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFncyk7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGlvbW11LT5zZXFfaWQsICZkb21haW4tPmlvbW11X2JtcCkpIHsKIAkJZG9tYWluLT5pb21tdV9jb3VudCsrOwotCQlkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShkb21haW4pOworCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKQEAgLTE2NTcsNiArMTUwNSw4IEBACiAJCUJVR19PTihkbWFfcHRlX2FkZHIocHRlKSk7CiAJCWRtYV9zZXRfcHRlX2FkZHIocHRlLCBzdGFydF9wZm4gPDwgVlREX1BBR0VfU0hJRlQpOwogCQlkbWFfc2V0X3B0ZV9wcm90KHB0ZSwgcHJvdCk7CisJCWlmIChwcm90ICYgRE1BX1BURV9TTlApCisJCQlkbWFfc2V0X3B0ZV9zbnAocHRlKTsKIAkJZG9tYWluX2ZsdXNoX2NhY2hlKGRvbWFpbiwgcHRlLCBzaXplb2YoKnB0ZSkpOwogCQlzdGFydF9wZm4rKzsKIAkJaW5kZXgrKzsKQEAgLTE5NzAsNyArMTgyMCw3IEBACiAJcmV0ID0gaW9tbXVfcHJlcGFyZV9pZGVudGl0eV9tYXAocGRldiwgMCwgMTYqMTAyNCoxMDI0KTsKIAogCWlmIChyZXQpCi0JCXByaW50aygiSU9NTVU6IEZhaWxlZCB0byBjcmVhdGUgMC02NE0gaWRlbnRpdHkgbWFwLCAiCisJCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IEZhaWxlZCB0byBjcmVhdGUgMC02NE0gaWRlbnRpdHkgbWFwLCAiCiAJCQkiZmxvcHB5IG1pZ2h0IG5vdCB3b3JrXG4iKTsKIAogfQpAQCAtMTk4Nyw3ICsxODM3LDcgQEAKIAlzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgKnJtcnI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKLQlpbnQgaSwgcmV0LCB1bml0ID0gMDsKKwlpbnQgaSwgcmV0OwogCiAJLyoKIAkgKiBmb3IgZWFjaCBkcmhkCkBAIC0yMDQzLDExICsxODkzLDQwIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFN0YXJ0IGZyb20gdGhlIHNhbmUgaW9tbXUgaGFyZHdhcmUgc3RhdGUuCisJICovCiAJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKIAkJaWYgKGRyaGQtPmlnbm9yZWQpCiAJCQljb250aW51ZTsKIAogCQlpb21tdSA9IGRyaGQtPmlvbW11OworCisJCS8qCisJCSAqIElmIHRoZSBxdWV1ZWQgaW52YWxpZGF0aW9uIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgdXMKKwkJICogKGZvciBleGFtcGxlLCB3aGlsZSBlbmFibGluZyBpbnRlcnJ1cHQtcmVtYXBwaW5nKSB0aGVuCisJCSAqIHdlIGdvdCB0aGUgdGhpbmdzIGFscmVhZHkgcm9sbGluZyBmcm9tIGEgc2FuZSBzdGF0ZS4KKwkJICovCisJCWlmIChpb21tdS0+cWkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDbGVhciBhbnkgcHJldmlvdXMgZmF1bHRzLgorCQkgKi8KKwkJZG1hcl9mYXVsdCgtMSwgaW9tbXUpOworCQkvKgorCQkgKiBEaXNhYmxlIHF1ZXVlZCBpbnZhbGlkYXRpb24gaWYgc3VwcG9ydGVkIGFuZCBhbHJlYWR5IGVuYWJsZWQKKwkJICogYmVmb3JlIE9TIGhhbmRvdmVyLgorCQkgKi8KKwkJZG1hcl9kaXNhYmxlX3FpKGlvbW11KTsKKwl9CisKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpZiAoZHJoZC0+aWdub3JlZCkKKwkJCWNvbnRpbnVlOworCisJCWlvbW11ID0gZHJoZC0+aW9tbXU7CisKIAkJaWYgKGRtYXJfZW5hYmxlX3FpKGlvbW11KSkgewogCQkJLyoKIAkJCSAqIFF1ZXVlZCBJbnZhbGlkYXRlIG5vdCBlbmFibGVkLCB1c2UgUmVnaXN0ZXIgQmFzZWQKQEAgLTIxMDksNyArMTk4OCw2IEBACiAJCWlmIChkcmhkLT5pZ25vcmVkKQogCQkJY29udGludWU7CiAJCWlvbW11ID0gZHJoZC0+aW9tbXU7Ci0JCXNwcmludGYgKGlvbW11LT5uYW1lLCAiZG1hciVkIiwgdW5pdCsrKTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwogCkBAIC0yMjc5LDE2ICsyMTU3LDE4IEBACiBlcnJvcjoKIAlpZiAoaW92YSkKIAkJX19mcmVlX2lvdmEoJmRvbWFpbi0+aW92YWQsIGlvdmEpOwotCXByaW50ayhLRVJOX0VSUiJEZXZpY2UgJXMgcmVxdWVzdDogJWx4QCVsbHggZGlyICVkIC0tLSBmYWlsZWRcbiIsCisJcHJpbnRrKEtFUk5fRVJSIkRldmljZSAlcyByZXF1ZXN0OiAlenhAJWxseCBkaXIgJWQgLS0tIGZhaWxlZFxuIiwKIAkJcGNpX25hbWUocGRldiksIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsIGRpcik7CiAJcmV0dXJuIDA7CiB9CiAKLWRtYV9hZGRyX3QgaW50ZWxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsCi0JCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgZG1hX2FkZHJfdCBpbnRlbF9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIF9faW50ZWxfbWFwX3NpbmdsZShod2RldiwgcGFkZHIsIHNpemUsIGRpciwKLQkJCQkgIHRvX3BjaV9kZXYoaHdkZXYpLT5kbWFfbWFzayk7CisJcmV0dXJuIF9faW50ZWxfbWFwX3NpbmdsZShkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCwgc2l6ZSwKKwkJCQkgIGRpciwgdG9fcGNpX2RldihkZXYpLT5kbWFfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsdXNoX3VubWFwcyh2b2lkKQpAQCAtMjM1Miw4ICsyMjMyLDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc3luY191bWFwX2ZsdXNoX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJCWludCBkaXIpCitzdGF0aWMgdm9pZCBpbnRlbF91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CkBAIC0yMzc1LDcgKzIyNTYsNyBAQAogCXN0YXJ0X2FkZHIgPSBpb3ZhLT5wZm5fbG8gPDwgUEFHRV9TSElGVDsKIAlzaXplID0gYWxpZ25lZF9zaXplKCh1NjQpZGV2X2FkZHIsIHNpemUpOwogCi0JcHJfZGVidWcoIkRldmljZSAlcyB1bm1hcHBpbmc6ICVseEAlbGx4XG4iLAorCXByX2RlYnVnKCJEZXZpY2UgJXMgdW5tYXBwaW5nOiAlenhAJWxseFxuIiwKIAkJcGNpX25hbWUocGRldiksIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfYWRkcik7CiAKIAkvKiAgY2xlYXIgdGhlIHdob2xlIHBhZ2UgKi8KQEAgLTIzOTcsOCArMjI3OCwxNCBAQAogCX0KIH0KIAotdm9pZCAqaW50ZWxfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAotCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MpCitzdGF0aWMgdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZGlyKQoreworCWludGVsX3VubWFwX3BhZ2UoZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgKmludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQogewogCXZvaWQgKnZhZGRyOwogCWludCBvcmRlcjsKQEAgLTI0MjEsOCArMjMwOCw4IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgaW50ZWxfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAotCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3N0YXRpYyB2b2lkIGludGVsX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKKwkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUpCiB7CiAJaW50IG9yZGVyOwogCkBAIC0yNDMzLDEwICsyMzIwLDkgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBvcmRlcik7CiB9CiAKLSNkZWZpbmUgU0dfRU5UX1ZJUlRfQUREUkVTUyhzZykJKHNnX3ZpcnQoKHNnKSkpCi0KLXZvaWQgaW50ZWxfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkgICAgaW50IG5lbGVtcywgaW50IGRpcikKK3N0YXRpYyB2b2lkIGludGVsX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWludCBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2Rldik7CkBAIC0yNDQ0LDcgKzIzMzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcjsKIAlzdHJ1Y3QgaW92YSAqaW92YTsKIAlzaXplX3Qgc2l6ZSA9IDA7Ci0Jdm9pZCAqYWRkcjsKKwlwaHlzX2FkZHJfdCBhZGRyOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIApAQCAtMjQ2MCw3ICsyMzQ2LDcgQEAKIAlpZiAoIWlvdmEpCiAJCXJldHVybjsKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKLQkJYWRkciA9IFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpOworCQlhZGRyID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNpemUgKz0gYWxpZ25lZF9zaXplKCh1NjQpYWRkciwgc2ctPmxlbmd0aCk7CiAJfQogCkBAIC0yNDg3LDE2ICsyMzczLDE2IEBACiAKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKIAkJQlVHX09OKCFzZ19wYWdlKHNnKSk7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHZpcnRfdG9fYnVzKFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpKTsKKwkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAl9CiAJcmV0dXJuIG5lbGVtczsKIH0KIAotaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCSBpbnQgZGlyKQorc3RhdGljIGludCBpbnRlbF9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQl2b2lkICphZGRyOworCXBoeXNfYWRkcl90IGFkZHI7CiAJaW50IGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3ZGV2KTsKIAlzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbjsKQEAgLTI1MjAsOCArMjQwNiw3IEBACiAJaW9tbXUgPSBkb21haW5fZ2V0X2lvbW11KGRvbWFpbik7CiAKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKLQkJYWRkciA9IFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpOwotCQlhZGRyID0gKHZvaWQgKil2aXJ0X3RvX3BoeXMoYWRkcik7CisJCWFkZHIgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJc2l6ZSArPSBhbGlnbmVkX3NpemUoKHU2NClhZGRyLCBzZy0+bGVuZ3RoKTsKIAl9CiAKQEAgLTI1NDQsOCArMjQyOSw3IEBACiAJc3RhcnRfYWRkciA9IGlvdmEtPnBmbl9sbyA8PCBQQUdFX1NISUZUOwogCW9mZnNldCA9IDA7CiAJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7Ci0JCWFkZHIgPSBTR19FTlRfVklSVF9BRERSRVNTKHNnKTsKLQkJYWRkciA9ICh2b2lkICopdmlydF90b19waHlzKGFkZHIpOworCQlhZGRyID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNpemUgPSBhbGlnbmVkX3NpemUoKHU2NClhZGRyLCBzZy0+bGVuZ3RoKTsKIAkJcmV0ID0gZG9tYWluX3BhZ2VfbWFwcGluZyhkb21haW4sIHN0YXJ0X2FkZHIgKyBvZmZzZXQsCiAJCQkoKHU2NClhZGRyKSAmIFBBR0VfTUFTSywKQEAgLTI1NzQsMTMgKzI0NTgsMTkgQEAKIAlyZXR1cm4gbmVsZW1zOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBpbnRlbF9kbWFfb3BzID0geworc3RhdGljIGludCBpbnRlbF9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gIWRtYV9hZGRyOworfQorCitzdHJ1Y3QgZG1hX21hcF9vcHMgaW50ZWxfZG1hX29wcyA9IHsKIAkuYWxsb2NfY29oZXJlbnQgPSBpbnRlbF9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IGludGVsX2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBpbnRlbF9tYXBfc2luZ2xlLAotCS51bm1hcF9zaW5nbGUgPSBpbnRlbF91bm1hcF9zaW5nbGUsCiAJLm1hcF9zZyA9IGludGVsX21hcF9zZywKIAkudW5tYXBfc2cgPSBpbnRlbF91bm1hcF9zZywKKwkubWFwX3BhZ2UgPSBpbnRlbF9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZSA9IGludGVsX3VubWFwX3BhZ2UsCisJLm1hcHBpbmdfZXJyb3IgPSBpbnRlbF9tYXBwaW5nX2Vycm9yLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaW9tbXVfZG9tYWluX2NhY2hlX2luaXQodm9pZCkKQEAgLTI3NzIsNiArMjY2MiwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpb21tdV9kZXRhY2hfZGVwZW5kZW50X2RldmljZXMoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwKKwkJCQkJICAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnRtcCwgKnBhcmVudDsKKworCWlmICghaW9tbXUgfHwgIXBkZXYpCisJCXJldHVybjsKKworCS8qIGRlcGVuZGVudCBkZXZpY2UgZGV0YWNoICovCisJdG1wID0gcGNpX2ZpbmRfdXBzdHJlYW1fcGNpZV9icmlkZ2UocGRldik7CisJLyogU2Vjb25kYXJ5IGludGVyZmFjZSdzIGJ1cyBudW1iZXIgYW5kIGRldmZuIDAgKi8KKwlpZiAodG1wKSB7CisJCXBhcmVudCA9IHBkZXYtPmJ1cy0+c2VsZjsKKwkJd2hpbGUgKHBhcmVudCAhPSB0bXApIHsKKwkJCWlvbW11X2RldGFjaF9kZXYoaW9tbXUsIHBhcmVudC0+YnVzLT5udW1iZXIsCisJCQkJcGFyZW50LT5kZXZmbik7CisJCQlwYXJlbnQgPSBwYXJlbnQtPmJ1cy0+c2VsZjsKKwkJfQorCQlpZiAodG1wLT5pc19wY2llKSAvKiB0aGlzIGlzIGEgUENJRS10by1QQ0kgYnJpZGdlICovCisJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LAorCQkJCXRtcC0+c3Vib3JkaW5hdGUtPm51bWJlciwgMCk7CisJCWVsc2UgLyogdGhpcyBpcyBhIGxlZ2FjeSBQQ0kgYnJpZGdlICovCisJCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LAorCQkJCXRtcC0+YnVzLT5udW1iZXIsIHRtcC0+ZGV2Zm4pOworCX0KK30KKwogc3RhdGljIHZvaWQgdm1fZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCiAJCQkJCSAgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0yNzk3LDYgKzI3MTQsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2RvbWFpbl9sb2NrLCBmbGFncyk7CiAKIAkJCWlvbW11X2RldGFjaF9kZXYoaW9tbXUsIGluZm8tPmJ1cywgaW5mby0+ZGV2Zm4pOworCQkJaW9tbXVfZGV0YWNoX2RlcGVuZGVudF9kZXZpY2VzKGlvbW11LCBwZGV2KTsKIAkJCWZyZWVfZGV2aW5mb19tZW0oaW5mbyk7CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfZG9tYWluX2xvY2ssIGZsYWdzKTsKQEAgLTI4MjAsNyArMjczOCw3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CiAJCWNsZWFyX2JpdChpb21tdS0+c2VxX2lkLCAmZG9tYWluLT5pb21tdV9ibXApOwogCQlkb21haW4tPmlvbW11X2NvdW50LS07Ci0JCWRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KGRvbWFpbik7CisJCWRvbWFpbl91cGRhdGVfaW9tbXVfY2FwKGRvbWFpbik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgdG1wX2ZsYWdzKTsKIAl9CiAKQEAgLTI4NDYsMTUgKzI3NjQsMTYgQEAKIAogCQlpb21tdSA9IGRldmljZV90b19pb21tdShpbmZvLT5idXMsIGluZm8tPmRldmZuKTsKIAkJaW9tbXVfZGV0YWNoX2Rldihpb21tdSwgaW5mby0+YnVzLCBpbmZvLT5kZXZmbik7CisJCWlvbW11X2RldGFjaF9kZXBlbmRlbnRfZGV2aWNlcyhpb21tdSwgaW5mby0+ZGV2KTsKIAogCQkvKiBjbGVhciB0aGlzIGlvbW11IGluIGlvbW11X2JtcCwgdXBkYXRlIGlvbW11IGNvdW50Ci0JCSAqIGFuZCBjb2hlcmVuY3kKKwkJICogYW5kIGNhcGFiaWxpdGllcwogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MyKTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpb21tdS0+c2VxX2lkLAogCQkJCSAgICAgICAmZG9tYWluLT5pb21tdV9ibXApKSB7CiAJCQlkb21haW4tPmlvbW11X2NvdW50LS07Ci0JCQlkb21haW5fdXBkYXRlX2lvbW11X2NvaGVyZW5jeShkb21haW4pOworCQkJZG9tYWluX3VwZGF0ZV9pb21tdV9jYXAoZG9tYWluKTsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIGZsYWdzMik7CiAKQEAgLTMwNzcsNiArMjk5Niw4IEBACiAJCXByb3QgfD0gRE1BX1BURV9SRUFEOwogCWlmIChpb21tdV9wcm90ICYgSU9NTVVfV1JJVEUpCiAJCXByb3QgfD0gRE1BX1BURV9XUklURTsKKwlpZiAoKGlvbW11X3Byb3QgJiBJT01NVV9DQUNIRSkgJiYgZG1hcl9kb21haW4tPmlvbW11X3Nub29waW5nKQorCQlwcm90IHw9IERNQV9QVEVfU05QOwogCiAJbWF4X2FkZHIgPSAoaW92YSAmIFZURF9QQUdFX01BU0spICsgVlREX1BBR0VfQUxJR04oc2l6ZSk7CiAJaWYgKGRtYXJfZG9tYWluLT5tYXhfYWRkciA8IG1heF9hZGRyKSB7CkBAIC0zMTMwLDYgKzMwNTEsMTcgQEAKIAlyZXR1cm4gcGh5czsKIH0KIAorc3RhdGljIGludCBpbnRlbF9pb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYXApCit7CisJc3RydWN0IGRtYXJfZG9tYWluICpkbWFyX2RvbWFpbiA9IGRvbWFpbi0+cHJpdjsKKworCWlmIChjYXAgPT0gSU9NTVVfQ0FQX0NBQ0hFX0NPSEVSRU5DWSkKKwkJcmV0dXJuIGRtYXJfZG9tYWluLT5pb21tdV9zbm9vcGluZzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBpbnRlbF9pb21tdV9vcHMgPSB7CiAJLmRvbWFpbl9pbml0CT0gaW50ZWxfaW9tbXVfZG9tYWluX2luaXQsCiAJLmRvbWFpbl9kZXN0cm95ID0gaW50ZWxfaW9tbXVfZG9tYWluX2Rlc3Ryb3ksCkBAIC0zMTM4LDYgKzMwNzAsNyBAQAogCS5tYXAJCT0gaW50ZWxfaW9tbXVfbWFwX3JhbmdlLAogCS51bm1hcAkJPSBpbnRlbF9pb21tdV91bm1hcF9yYW5nZSwKIAkuaW92YV90b19waHlzCT0gaW50ZWxfaW9tbXVfaW92YV90b19waHlzLAorCS5kb21haW5faGFzX2NhcCA9IGludGVsX2lvbW11X2RvbWFpbl9oYXNfY2FwLAogfTsKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2lvbW11X3J3YmYoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDlkMDdhMDUuLmIwNDFhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMTE3LDIxICsxMTcsMjIgQEAKIHsKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZW50cnkpCiAJCXJldHVybiAtMTsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAJKmVudHJ5ID0gKihpcnFfaW9tbXUtPmlvbW11LT5pcl90YWJsZS0+YmFzZSArIGluZGV4KTsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MSw2ICsxNDIsNyBAQAogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OwogCXUxNiBpbmRleCwgc3RhcnRfaW5kZXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAlpZiAoIWNvdW50KQpAQCAtMTcwLDcgKzE3Miw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJZG8gewogCQlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7IGkrKykKIAkJCWlmICAodGFibGUtPmJhc2VbaV0ucHJlc2VudCkKQEAgLTE4Miw3ICsxODQsNyBAQAogCQlpbmRleCA9IChpbmRleCArIGNvdW50KSAlIElOVFJfUkVNQVBfVEFCTEVfRU5UUklFUzsKIAogCQlpZiAoaW5kZXggPT0gc3RhcnRfaW5kZXgpIHsKLQkJCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWxsb2NhdGUgYW4gSVJURVxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTE5Myw3ICsxOTUsNyBAQAogCiAJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXVfYWxsb2MoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDMsNyArMjA1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gbWFzazsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaW5kZXg7CiB9CkBAIC0yMjMsMzAgKzIyNSwzMiBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAkqc3ViX2hhbmRsZSA9IGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleDsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiBpbmRleDsKIH0KIAogaW50IHNldF9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgsIHUxNiBzdWJoYW5kbGUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCWlycV9pb21tdSA9IGlycV8yX2lvbW11X2FsbG9jKGlycSk7CiAKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBpcnFfMl9pb21tdVxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yNTYsNyArMjYwLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSBzdWJoYW5kbGU7CiAJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY0LDExICsyNjgsMTIgQEAKIGludCBjbGVhcl9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzcsNyArMjgyLDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV8yX2lvbW11KGlycSktPmlydGVfbWFzayA9IDA7CiAKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODksMTEgKzI5NCwxMiBAQAogCXN0cnVjdCBpcnRlICppcnRlOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7CiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlpcnFfaW9tbXUgPSB2YWxpZF9pcnFfMl9pb21tdShpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDIsMTEgKzMwOCwxMSBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWlydGUgPSAmaW9tbXUtPmlyX3RhYmxlLT5iYXNlW2luZGV4XTsKIAotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKWlydGUsIGlydGVfbW9kaWZpZWQtPmxvdyB8ICgxIDw8IDEpKTsKKwlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCBpcnRlX21vZGlmaWVkLT5sb3cpOwogCV9faW9tbXVfZmx1c2hfY2FjaGUoaW9tbXUsIGlydGUsIHNpemVvZigqaXJ0ZSkpOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCAwKTsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzE3LDExICszMjMsMTIgQEAKIAlpbnQgaW5kZXg7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMzMCw3ICszMzcsNyBAQAogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4ICsgaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCiAJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7Ci0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTM2MywxMSArMzcwLDEyIEBACiAJc3RydWN0IGlydGUgKmlydGU7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM3OCw3ICszODYsNyBAQAogCiAJaWYgKCFpcnFfaW9tbXUtPnN1Yl9oYW5kbGUpIHsKIAkJZm9yIChpID0gMDsgaSA8ICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsgaSsrKQotCQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgMCk7CisJCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikoaXJ0ZSArIGkpLCAwKTsKIAkJcmMgPSBxaV9mbHVzaF9pZWMoaW9tbXUsIGluZGV4LCBpcnFfaW9tbXUtPmlydGVfbWFzayk7CiAJfQogCkBAIC0zODcsNyArMzk1LDcgQEAKIAlpcnFfaW9tbXUtPnN1Yl9oYW5kbGUgPSAwOwogCWlycV9pb21tdS0+aXJ0ZV9tYXNrID0gMDsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC00MzksMTIgKzQ0NywxMiBAQAogCXN0cnVjdCBwYWdlICpwYWdlczsKIAogCWlyX3RhYmxlID0gaW9tbXUtPmlyX3RhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX3RhYmxlKSwKLQkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJCQkJICAgICBHRlBfQVRPTUlDKTsKIAogCWlmICghaW9tbXUtPmlyX3RhYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIElOVFJfUkVNQVBfUEFHRV9PUkRFUik7CisJcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywgSU5UUl9SRU1BUF9QQUdFX09SREVSKTsKIAogCWlmICghcGFnZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgb2Ygb3JkZXIgJWRcbiIsCkBAIC00NTksMTEgKzQ2Nyw1NSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRGlzYWJsZSBJbnRlcnJ1cHQgUmVtYXBwaW5nLgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2ludHJfcmVtYXBwaW5nKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgc3RzOworCisJaWYgKCFlY2FwX2lyX3N1cHBvcnQoaW9tbXUtPmVjYXApKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCXN0cyA9IGRtYXJfcmVhZHEoaW9tbXUtPnJlZyArIERNQVJfR1NUU19SRUcpOworCWlmICghKHN0cyAmIERNQV9HU1RTX0lSRVMpKQorCQlnb3RvIGVuZDsKKworCWlvbW11LT5nY21kICY9IH5ETUFfR0NNRF9JUkU7CisJd3JpdGVsKGlvbW11LT5nY21kLCBpb21tdS0+cmVnICsgRE1BUl9HQ01EX1JFRyk7CisKKwlJT01NVV9XQUlUX09QKGlvbW11LCBETUFSX0dTVFNfUkVHLAorCQkgICAgICByZWFkbCwgIShzdHMgJiBETUFfR1NUU19JUkVTKSwgc3RzKTsKKworZW5kOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFncyk7Cit9CisKIGludCBfX2luaXQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCBlaW0pCiB7CiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCWludCBzZXR1cCA9IDA7CiAKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZHJoZC0+aW9tbXU7CisKKwkJLyoKKwkJICogQ2xlYXIgcHJldmlvdXMgZmF1bHRzLgorCQkgKi8KKwkJZG1hcl9mYXVsdCgtMSwgaW9tbXUpOworCisJCS8qCisJCSAqIERpc2FibGUgaW50ciByZW1hcHBpbmcgYW5kIHF1ZXVlZCBpbnZhbGlkYXRpb24sIGlmIGFscmVhZHkKKwkJICogZW5hYmxlZCBwcmlvciB0byBPUyBoYW5kb3Zlci4KKwkJICovCisJCWRpc2FibGVfaW50cl9yZW1hcHBpbmcoaW9tbXUpOworCisJCWRtYXJfZGlzYWJsZV9xaShpb21tdSk7CisJfQorCiAJLyoKIAkgKiBjaGVjayBmb3IgdGhlIEludGVycnVwdC1yZW1hcHBpbmcgc3VwcG9ydAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92LmMgYi9kcml2ZXJzL3BjaS9pb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI3ZWZjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2lvdi5jCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogZHJpdmVycy9wY2kvaW92LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIFl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorICoKKyAqIFBDSSBFeHByZXNzIEkvTyBWaXJ0dWFsaXphdGlvbiAoSU9WKSBzdXBwb3J0LgorICogICBTaW5nbGUgUm9vdCBJT1YgMS4wCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJwY2kuaCIKKworI2RlZmluZSBWSVJURk5fSURfTEVOCTE2CisKK3N0YXRpYyBpbmxpbmUgdTggdmlydGZuX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQpCit7CisJcmV0dXJuIGRldi0+YnVzLT5udW1iZXIgKyAoKGRldi0+ZGV2Zm4gKyBkZXYtPnNyaW92LT5vZmZzZXQgKworCQkJCSAgICBkZXYtPnNyaW92LT5zdHJpZGUgKiBpZCkgPj4gOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggdmlydGZuX2RldmZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCkKK3sKKwlyZXR1cm4gKGRldi0+ZGV2Zm4gKyBkZXYtPnNyaW92LT5vZmZzZXQgKworCQlkZXYtPnNyaW92LT5zdHJpZGUgKiBpZCkgJiAweGZmOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9idXMgKnZpcnRmbl9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBidXNucikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCisJaWYgKGJ1cy0+bnVtYmVyID09IGJ1c25yKQorCQlyZXR1cm4gYnVzOworCisJY2hpbGQgPSBwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihidXMpLCBidXNucik7CisJaWYgKGNoaWxkKQorCQlyZXR1cm4gY2hpbGQ7CisKKwljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhidXMsIE5VTEwsIGJ1c25yKTsKKwlpZiAoIWNoaWxkKQorCQlyZXR1cm4gTlVMTDsKKworCWNoaWxkLT5zdWJvcmRpbmF0ZSA9IGJ1c25yOworCWNoaWxkLT5kZXYucGFyZW50ID0gYnVzLT5icmlkZ2U7CisJcmMgPSBwY2lfYnVzX2FkZF9jaGlsZChjaGlsZCk7CisJaWYgKHJjKSB7CisJCXBjaV9yZW1vdmVfYnVzKGNoaWxkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNoaWxkOworfQorCitzdGF0aWMgdm9pZCB2aXJ0Zm5fcmVtb3ZlX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgYnVzbnIpCit7CisJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCisJaWYgKGJ1cy0+bnVtYmVyID09IGJ1c25yKQorCQlyZXR1cm47CisKKwljaGlsZCA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKTsKKwlCVUdfT04oIWNoaWxkKTsKKworCWlmIChsaXN0X2VtcHR5KCZjaGlsZC0+ZGV2aWNlcykpCisJCXBjaV9yZW1vdmVfYnVzKGNoaWxkKTsKK30KKworc3RhdGljIGludCB2aXJ0Zm5fYWRkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCwgaW50IHJlc2V0KQoreworCWludCBpOworCWludCByYzsKKwl1NjQgc2l6ZTsKKwljaGFyIGJ1ZltWSVJURk5fSURfTEVOXTsKKwlzdHJ1Y3QgcGNpX2RldiAqdmlydGZuOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwl2aXJ0Zm4gPSBhbGxvY19wY2lfZGV2KCk7CisJaWYgKCF2aXJ0Zm4pCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwl2aXJ0Zm4tPmJ1cyA9IHZpcnRmbl9hZGRfYnVzKGRldi0+YnVzLCB2aXJ0Zm5fYnVzKGRldiwgaWQpKTsKKwlpZiAoIXZpcnRmbi0+YnVzKSB7CisJCWtmcmVlKHZpcnRmbik7CisJCW11dGV4X3VubG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXZpcnRmbi0+ZGV2Zm4gPSB2aXJ0Zm5fZGV2Zm4oZGV2LCBpZCk7CisJdmlydGZuLT52ZW5kb3IgPSBkZXYtPnZlbmRvcjsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1ZGX0RJRCwgJnZpcnRmbi0+ZGV2aWNlKTsKKwlwY2lfc2V0dXBfZGV2aWNlKHZpcnRmbik7CisJdmlydGZuLT5kZXYucGFyZW50ID0gZGV2LT5kZXYucGFyZW50OworCisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWlmICghcmVzLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5uYW1lID0gcGNpX25hbWUodmlydGZuKTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJCWRvX2RpdihzaXplLCBpb3YtPnRvdGFsKTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5zdGFydCA9IHJlcy0+c3RhcnQgKyBzaXplICogaWQ7CisJCXZpcnRmbi0+cmVzb3VyY2VbaV0uZW5kID0gdmlydGZuLT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOworCQlyYyA9IHJlcXVlc3RfcmVzb3VyY2UocmVzLCAmdmlydGZuLT5yZXNvdXJjZVtpXSk7CisJCUJVR19PTihyYyk7CisJfQorCisJaWYgKHJlc2V0KQorCQlwY2lfZXhlY3V0ZV9yZXNldF9mdW5jdGlvbih2aXJ0Zm4pOworCisJcGNpX2RldmljZV9hZGQodmlydGZuLCB2aXJ0Zm4tPmJ1cyk7CisJbXV0ZXhfdW5sb2NrKCZpb3YtPmRldi0+c3Jpb3YtPmxvY2spOworCisJdmlydGZuLT5waHlzZm4gPSBwY2lfZGV2X2dldChkZXYpOworCXZpcnRmbi0+aXNfdmlydGZuID0gMTsKKworCXJjID0gcGNpX2J1c19hZGRfZGV2aWNlKHZpcnRmbik7CisJaWYgKHJjKQorCQlnb3RvIGZhaWxlZDE7CisJc3ByaW50ZihidWYsICJ2aXJ0Zm4ldSIsIGlkKTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAmdmlydGZuLT5kZXYua29iaiwgYnVmKTsKKwlpZiAocmMpCisJCWdvdG8gZmFpbGVkMTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ2aXJ0Zm4tPmRldi5rb2JqLCAmZGV2LT5kZXYua29iaiwgInBoeXNmbiIpOworCWlmIChyYykKKwkJZ290byBmYWlsZWQyOworCisJa29iamVjdF91ZXZlbnQoJnZpcnRmbi0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKKworCXJldHVybiAwOworCitmYWlsZWQyOgorCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCBidWYpOworZmFpbGVkMToKKwlwY2lfZGV2X3B1dChkZXYpOworCW11dGV4X2xvY2soJmlvdi0+ZGV2LT5zcmlvdi0+bG9jayk7CisJcGNpX3JlbW92ZV9idXNfZGV2aWNlKHZpcnRmbik7CisJdmlydGZuX3JlbW92ZV9idXMoZGV2LT5idXMsIHZpcnRmbl9idXMoZGV2LCBpZCkpOworCW11dGV4X3VubG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdmlydGZuX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQsIGludCByZXNldCkKK3sKKwljaGFyIGJ1ZltWSVJURk5fSURfTEVOXTsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXN0cnVjdCBwY2lfZGV2ICp2aXJ0Zm47CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gZGV2LT5zcmlvdjsKKworCWJ1cyA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGRldi0+YnVzKSwgdmlydGZuX2J1cyhkZXYsIGlkKSk7CisJaWYgKCFidXMpCisJCXJldHVybjsKKworCXZpcnRmbiA9IHBjaV9nZXRfc2xvdChidXMsIHZpcnRmbl9kZXZmbihkZXYsIGlkKSk7CisJaWYgKCF2aXJ0Zm4pCisJCXJldHVybjsKKworCXBjaV9kZXZfcHV0KHZpcnRmbik7CisKKwlpZiAocmVzZXQpIHsKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZ2aXJ0Zm4tPmRldik7CisJCXBjaV9leGVjdXRlX3Jlc2V0X2Z1bmN0aW9uKHZpcnRmbik7CisJfQorCisJc3ByaW50ZihidWYsICJ2aXJ0Zm4ldSIsIGlkKTsKKwlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgYnVmKTsKKwlzeXNmc19yZW1vdmVfbGluaygmdmlydGZuLT5kZXYua29iaiwgInBoeXNmbiIpOworCisJbXV0ZXhfbG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodmlydGZuKTsKKwl2aXJ0Zm5fcmVtb3ZlX2J1cyhkZXYtPmJ1cywgdmlydGZuX2J1cyhkZXYsIGlkKSk7CisJbXV0ZXhfdW5sb2NrKCZpb3YtPmRldi0+c3Jpb3YtPmxvY2spOworCisJcGNpX2Rldl9wdXQoZGV2KTsKK30KKworc3RhdGljIGludCBzcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgc3RhdHVzOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlpZiAoIWlvdi0+bnJfdmlydGZuKQorCQlyZXR1cm4gMDsKKworCWlmICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoIShzdGF0dXMgJiBQQ0lfU1JJT1ZfU1RBVFVTX1ZGTSkpCisJCXJldHVybiAwOworCisJc2NoZWR1bGVfd29yaygmaW92LT5tdGFzayk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3Jpb3ZfbWlncmF0aW9uX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBpOworCXU4IHN0YXRlOworCXUxNiBzdGF0dXM7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY2lfc3Jpb3YsIG10YXNrKTsKKworCWZvciAoaSA9IGlvdi0+aW5pdGlhbDsgaSA8IGlvdi0+bnJfdmlydGZuOyBpKyspIHsKKwkJc3RhdGUgPSByZWFkYihpb3YtPm1zdGF0ZSArIGkpOworCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9NSSkgeworCQkJd3JpdGViKFBDSV9TUklPVl9WRk1fQVYsIGlvdi0+bXN0YXRlICsgaSk7CisJCQlzdGF0ZSA9IHJlYWRiKGlvdi0+bXN0YXRlICsgaSk7CisJCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9BVikKKwkJCQl2aXJ0Zm5fYWRkKGlvdi0+c2VsZiwgaSwgMSk7CisJCX0gZWxzZSBpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9NTykgeworCQkJdmlydGZuX3JlbW92ZShpb3YtPnNlbGYsIGksIDEpOworCQkJd3JpdGViKFBDSV9TUklPVl9WRk1fVUEsIGlvdi0+bXN0YXRlICsgaSk7CisJCQlzdGF0ZSA9IHJlYWRiKGlvdi0+bXN0YXRlICsgaSk7CisJCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9BVikKKwkJCQl2aXJ0Zm5fYWRkKGlvdi0+c2VsZiwgaSwgMCk7CisJCX0KKwl9CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChpb3YtPnNlbGYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1NUQVRVUywgJnN0YXR1cyk7CisJc3RhdHVzICY9IH5QQ0lfU1JJT1ZfU1RBVFVTX1ZGTTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaW92LT5zZWxmLCBpb3YtPnBvcyArIFBDSV9TUklPVl9TVEFUVVMsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgc3Jpb3ZfZW5hYmxlX21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQoreworCWludCBiaXI7CisJdTMyIHRhYmxlOworCXJlc291cmNlX3NpemVfdCBwYTsKKwlzdHJ1Y3QgcGNpX3NyaW92ICppb3YgPSBkZXYtPnNyaW92OworCisJaWYgKG5yX3ZpcnRmbiA8PSBpb3YtPmluaXRpYWwpCisJCXJldHVybiAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfVkZNLCAmdGFibGUpOworCWJpciA9IFBDSV9TUklPVl9WRk1fQklSKHRhYmxlKTsKKwlpZiAoYmlyID4gUENJX1NURF9SRVNPVVJDRV9FTkQpCisJCXJldHVybiAtRUlPOworCisJdGFibGUgPSBQQ0lfU1JJT1ZfVkZNX09GRlNFVCh0YWJsZSk7CisJaWYgKHRhYmxlICsgbnJfdmlydGZuID4gcGNpX3Jlc291cmNlX2xlbihkZXYsIGJpcikpCisJCXJldHVybiAtRUlPOworCisJcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiaXIpICsgdGFibGU7CisJaW92LT5tc3RhdGUgPSBpb3JlbWFwKHBhLCBucl92aXJ0Zm4pOworCWlmICghaW92LT5tc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9XT1JLKCZpb3YtPm10YXNrLCBzcmlvdl9taWdyYXRpb25fdGFzayk7CisKKwlpb3YtPmN0cmwgfD0gUENJX1NSSU9WX0NUUkxfVkZNIHwgUENJX1NSSU9WX0NUUkxfSU5UUjsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9DVFJMLCBpb3YtPmN0cmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X2Rpc2FibGVfbWlncmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gZGV2LT5zcmlvdjsKKworCWlvdi0+Y3RybCAmPSB+KFBDSV9TUklPVl9DVFJMX1ZGTSB8IFBDSV9TUklPVl9DVFJMX0lOVFIpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsIGlvdi0+Y3RybCk7CisKKwljYW5jZWxfd29ya19zeW5jKCZpb3YtPm10YXNrKTsKKwlpb3VubWFwKGlvdi0+bXN0YXRlKTsKK30KKworc3RhdGljIGludCBzcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG5yX3ZpcnRmbikKK3sKKwlpbnQgcmM7CisJaW50IGksIGo7CisJaW50IG5yZXM7CisJdTE2IG9mZnNldCwgc3RyaWRlLCBpbml0aWFsOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlpZiAoIW5yX3ZpcnRmbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW92LT5ucl92aXJ0Zm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9JTklUSUFMX1ZGLCAmaW5pdGlhbCk7CisJaWYgKGluaXRpYWwgPiBpb3YtPnRvdGFsIHx8CisJICAgICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pICYmIChpbml0aWFsICE9IGlvdi0+dG90YWwpKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobnJfdmlydGZuIDwgMCB8fCBucl92aXJ0Zm4gPiBpb3YtPnRvdGFsIHx8CisJICAgICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pICYmIChucl92aXJ0Zm4gPiBpbml0aWFsKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCBucl92aXJ0Zm4pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfVkZfT0ZGU0VULCAmb2Zmc2V0KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1ZGX1NUUklERSwgJnN0cmlkZSk7CisJaWYgKCFvZmZzZXQgfHwgKG5yX3ZpcnRmbiA+IDEgJiYgIXN0cmlkZSkpCisJCXJldHVybiAtRUlPOworCisJbnJlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWlmIChyZXMtPnBhcmVudCkKKwkJCW5yZXMrKzsKKwl9CisJaWYgKG5yZXMgIT0gaW92LT5ucmVzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm90IGVub3VnaCBNTUlPIHJlc291cmNlcyBmb3IgU1ItSU9WXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW92LT5vZmZzZXQgPSBvZmZzZXQ7CisJaW92LT5zdHJpZGUgPSBzdHJpZGU7CisKKwlpZiAodmlydGZuX2J1cyhkZXYsIG5yX3ZpcnRmbiAtIDEpID4gZGV2LT5idXMtPnN1Ym9yZGluYXRlKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiU1ItSU9WOiBidXMgbnVtYmVyIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChpb3YtPmxpbmsgIT0gZGV2LT5kZXZmbikgeworCQlwZGV2ID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBpb3YtPmxpbmspOworCQlpZiAoIXBkZXYpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlwY2lfZGV2X3B1dChwZGV2KTsKKworCQlpZiAoIXBkZXYtPmlzX3BoeXNmbikKKwkJCXJldHVybiAtRU5PREVWOworCisJCXJjID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZGV2LmtvYmosCisJCQkJCSZwZGV2LT5kZXYua29iaiwgImRlcF9saW5rIik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisKKwlpb3YtPmN0cmwgfD0gUENJX1NSSU9WX0NUUkxfVkZFIHwgUENJX1NSSU9WX0NUUkxfTVNFOworCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9DVFJMLCBpb3YtPmN0cmwpOworCW1zbGVlcCgxMDApOworCXBjaV91bmJsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCisJaW92LT5pbml0aWFsID0gaW5pdGlhbDsKKwlpZiAobnJfdmlydGZuIDwgaW5pdGlhbCkKKwkJaW5pdGlhbCA9IG5yX3ZpcnRmbjsKKworCWZvciAoaSA9IDA7IGkgPCBpbml0aWFsOyBpKyspIHsKKwkJcmMgPSB2aXJ0Zm5fYWRkKGRldiwgaSwgMCk7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbGVkOworCX0KKworCWlmIChpb3YtPmNhcCAmIFBDSV9TUklPVl9DQVBfVkZNKSB7CisJCXJjID0gc3Jpb3ZfZW5hYmxlX21pZ3JhdGlvbihkZXYsIG5yX3ZpcnRmbik7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbGVkOworCX0KKworCWtvYmplY3RfdWV2ZW50KCZkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7CisJaW92LT5ucl92aXJ0Zm4gPSBucl92aXJ0Zm47CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCXZpcnRmbl9yZW1vdmUoZGV2LCBqLCAwKTsKKworCWlvdi0+Y3RybCAmPSB+KFBDSV9TUklPVl9DVFJMX1ZGRSB8IFBDSV9TUklPVl9DVFJMX01TRSk7CisJcGNpX2Jsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsIGlvdi0+Y3RybCk7CisJc3NsZWVwKDEpOworCXBjaV91bmJsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCisJaWYgKGlvdi0+bGluayAhPSBkZXYtPmRldmZuKQorCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgImRlcF9saW5rIik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGNpX3NyaW92ICppb3YgPSBkZXYtPnNyaW92OworCisJaWYgKCFpb3YtPm5yX3ZpcnRmbikKKwkJcmV0dXJuOworCisJaWYgKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pCisJCXNyaW92X2Rpc2FibGVfbWlncmF0aW9uKGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW92LT5ucl92aXJ0Zm47IGkrKykKKwkJdmlydGZuX3JlbW92ZShkZXYsIGksIDApOworCisJaW92LT5jdHJsICY9IH4oUENJX1NSSU9WX0NUUkxfVkZFIHwgUENJX1NSSU9WX0NUUkxfTVNFKTsKKwlwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgaW92LT5jdHJsKTsKKwlzc2xlZXAoMSk7CisJcGNpX3VuYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CisKKwlpZiAoaW92LT5saW5rICE9IGRldi0+ZGV2Zm4pCisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAiZGVwX2xpbmsiKTsKKworCWlvdi0+bnJfdmlydGZuID0gMDsKK30KKworc3RhdGljIGludCBzcmlvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MpCit7CisJaW50IGk7CisJaW50IHJjOworCWludCBucmVzOworCXUzMiBwZ3N6OworCXUxNiBjdHJsLCB0b3RhbCwgb2Zmc2V0LCBzdHJpZGU7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJaWYgKGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQgJiYKKwkgICAgZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX0VORFBPSU5UKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX0NUUkwsICZjdHJsKTsKKwlpZiAoY3RybCAmIFBDSV9TUklPVl9DVFJMX1ZGRSkgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgMCk7CisJCXNzbGVlcCgxKTsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9UT1RBTF9WRiwgJnRvdGFsKTsKKwlpZiAoIXRvdGFsKQorCQlyZXR1cm4gMDsKKworCWN0cmwgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJmRldi0+YnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKHBkZXYtPmlzX3BoeXNmbikKKwkJCWdvdG8gZm91bmQ7CisKKwlwZGV2ID0gTlVMTDsKKwlpZiAocGNpX2FyaV9lbmFibGVkKGRldi0+YnVzKSkKKwkJY3RybCB8PSBQQ0lfU1JJT1ZfQ1RSTF9BUkk7CisKK2ZvdW5kOgorCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9DVFJMLCBjdHJsKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCB0b3RhbCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfVkZfT0ZGU0VULCAmb2Zmc2V0KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9WRl9TVFJJREUsICZzdHJpZGUpOworCWlmICghb2Zmc2V0IHx8ICh0b3RhbCA+IDEgJiYgIXN0cmlkZSkpCisJCXJldHVybiAtRUlPOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX1NVUF9QR1NJWkUsICZwZ3N6KTsKKwlpID0gUEFHRV9TSElGVCA+IDEyID8gUEFHRV9TSElGVCAtIDEyIDogMDsKKwlwZ3N6ICY9IH4oKDEgPDwgaSkgLSAxKTsKKwlpZiAoIXBnc3opCisJCXJldHVybiAtRUlPOworCisJcGdzeiAmPSB+KHBnc3ogLSAxKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX1NZU19QR1NJWkUsIHBnc3opOworCisJbnJlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWkgKz0gX19wY2lfcmVhZF9iYXNlKGRldiwgcGNpX2Jhcl91bmtub3duLCByZXMsCisJCQkJICAgICBwb3MgKyBQQ0lfU1JJT1ZfQkFSICsgaSAqIDQpOworCQlpZiAoIXJlcy0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKHJlc291cmNlX3NpemUocmVzKSAmIChQQUdFX1NJWkUgLSAxKSkgeworCQkJcmMgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgcmVzb3VyY2Vfc2l6ZShyZXMpICogdG90YWwgLSAxOworCQlucmVzKys7CisJfQorCisJaW92ID0ga3phbGxvYyhzaXplb2YoKmlvdiksIEdGUF9LRVJORUwpOworCWlmICghaW92KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaW92LT5wb3MgPSBwb3M7CisJaW92LT5ucmVzID0gbnJlczsKKwlpb3YtPmN0cmwgPSBjdHJsOworCWlvdi0+dG90YWwgPSB0b3RhbDsKKwlpb3YtPm9mZnNldCA9IG9mZnNldDsKKwlpb3YtPnN0cmlkZSA9IHN0cmlkZTsKKwlpb3YtPnBnc3ogPSBwZ3N6OworCWlvdi0+c2VsZiA9IGRldjsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQ0FQLCAmaW92LT5jYXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgUENJX1NSSU9WX0ZVTkNfTElOSywgJmlvdi0+bGluayk7CisKKwlpZiAocGRldikKKwkJaW92LT5kZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKKwllbHNlIHsKKwkJaW92LT5kZXYgPSBkZXY7CisJCW11dGV4X2luaXQoJmlvdi0+bG9jayk7CisJfQorCisJZGV2LT5zcmlvdiA9IGlvdjsKKwlkZXYtPmlzX3BoeXNmbiA9IDE7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1ZfTlVNX0JBUlM7IGkrKykgeworCQlyZXMgPSBkZXYtPnJlc291cmNlICsgUENJX0lPVl9SRVNPVVJDRVMgKyBpOworCQlyZXMtPmZsYWdzID0gMDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlCVUdfT04oZGV2LT5zcmlvdi0+bnJfdmlydGZuKTsKKworCWlmIChkZXYgPT0gZGV2LT5zcmlvdi0+ZGV2KQorCQltdXRleF9kZXN0cm95KCZkZXYtPnNyaW92LT5sb2NrKTsKKwllbHNlCisJCXBjaV9kZXZfcHV0KGRldi0+c3Jpb3YtPmRldik7CisKKwlrZnJlZShkZXYtPnNyaW92KTsKKwlkZXYtPnNyaW92ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc3Jpb3ZfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCXUxNiBjdHJsOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsICZjdHJsKTsKKwlpZiAoY3RybCAmIFBDSV9TUklPVl9DVFJMX1ZGRSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gUENJX0lPVl9SRVNPVVJDRVM7IGkgPD0gUENJX0lPVl9SRVNPVVJDRV9FTkQ7IGkrKykKKwkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIGkpOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1NZU19QR1NJWkUsIGlvdi0+cGdzeik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCBpb3YtPm5yX3ZpcnRmbik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgaW92LT5jdHJsKTsKKwlpZiAoaW92LT5jdHJsICYgUENJX1NSSU9WX0NUUkxfVkZFKQorCQltc2xlZXAoMTAwKTsKK30KKworLyoqCisgKiBwY2lfaW92X2luaXQgLSBpbml0aWFsaXplIHRoZSBJT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqLworaW50IHBjaV9pb3ZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3M7CisKKwlpZiAoIWRldi0+aXNfcGNpZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTsKKwlpZiAocG9zKQorCQlyZXR1cm4gc3Jpb3ZfaW5pdChkZXYsIHBvcyk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqCisgKiBwY2lfaW92X3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBJT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfaW92X3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5pc19waHlzZm4pCisJCXNyaW92X3JlbGVhc2UoZGV2KTsKK30KKworLyoqCisgKiBwY2lfaW92X3Jlc291cmNlX2JhciAtIGdldCBwb3NpdGlvbiBvZiB0aGUgU1ItSU9WIEJBUgorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqIEByZXNubzogdGhlIHJlc291cmNlIG51bWJlcgorICogQHR5cGU6IHRoZSBCQVIgdHlwZSB0byBiZSBmaWxsZWQgaW4KKyAqCisgKiBSZXR1cm5zIHBvc2l0aW9uIG9mIHRoZSBCQVIgZW5jYXBzdWxhdGVkIGluIHRoZSBTUi1JT1YgY2FwYWJpbGl0eS4KKyAqLworaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywKKwkJCSBlbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSkKK3sKKwlpZiAocmVzbm8gPCBQQ0lfSU9WX1JFU09VUkNFUyB8fCByZXNubyA+IFBDSV9JT1ZfUkVTT1VSQ0VfRU5EKQorCQlyZXR1cm4gMDsKKworCUJVR19PTighZGV2LT5pc19waHlzZm4pOworCisJKnR5cGUgPSBwY2lfYmFyX3Vua25vd247CisKKwlyZXR1cm4gZGV2LT5zcmlvdi0+cG9zICsgUENJX1NSSU9WX0JBUiArCisJCTQgKiAocmVzbm8gLSBQQ0lfSU9WX1JFU09VUkNFUyk7Cit9CisKKy8qKgorICogcGNpX3Jlc3RvcmVfaW92X3N0YXRlIC0gcmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIElPViBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICovCit2b2lkIHBjaV9yZXN0b3JlX2lvdl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChkZXYtPmlzX3BoeXNmbikKKwkJc3Jpb3ZfcmVzdG9yZV9zdGF0ZShkZXYpOworfQorCisvKioKKyAqIHBjaV9pb3ZfYnVzX3JhbmdlIC0gZmluZCBidXMgcmFuZ2UgdXNlZCBieSBWaXJ0dWFsIEZ1bmN0aW9uCisgKiBAYnVzOiB0aGUgUENJIGJ1cworICoKKyAqIFJldHVybnMgbWF4IG51bWJlciBvZiBidXNlcyAoZXhjbHVkZSBjdXJyZW50IG9uZSkgdXNlZCBieSBWaXJ0dWFsCisgKiBGdW5jdGlvbnMuCisgKi8KK2ludCBwY2lfaW92X2J1c19yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWludCBtYXggPSAwOworCXU4IGJ1c25yOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaWYgKCFkZXYtPmlzX3BoeXNmbikKKwkJCWNvbnRpbnVlOworCQlidXNuciA9IHZpcnRmbl9idXMoZGV2LCBkZXYtPnNyaW92LT50b3RhbCAtIDEpOworCQlpZiAoYnVzbnIgPiBtYXgpCisJCQltYXggPSBidXNucjsKKwl9CisKKwlyZXR1cm4gbWF4ID8gbWF4IC0gYnVzLT5udW1iZXIgOiAwOworfQorCisvKioKKyAqIHBjaV9lbmFibGVfc3Jpb3YgLSBlbmFibGUgdGhlIFNSLUlPViBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcmlvdl9lbmFibGUoZGV2LCBucl92aXJ0Zm4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9zcmlvdik7CisKKy8qKgorICogcGNpX2Rpc2FibGVfc3Jpb3YgLSBkaXNhYmxlIHRoZSBTUi1JT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm47CisKKwlzcmlvdl9kaXNhYmxlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9zcmlvdik7CisKKy8qKgorICogcGNpX3NyaW92X21pZ3JhdGlvbiAtIG5vdGlmeSBTUi1JT1YgY29yZSBvZiBWaXJ0dWFsIEZ1bmN0aW9uIE1pZ3JhdGlvbgorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIElSUV9IQU5ETEVEIGlmIHRoZSBJUlEgaXMgaGFuZGxlZCwgb3IgSVJRX05PTkUgaWYgbm90LgorICoKKyAqIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlciBpcyByZXNwb25zaWJsZSB0byByZWdpc3RlciBJUlEgaGFuZGxlciB1c2luZworICogVkYgTWlncmF0aW9uIEludGVycnVwdCBNZXNzYWdlIE51bWJlciwgYW5kIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZQorICogaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUuCisgKi8KK2lycXJldHVybl90IHBjaV9zcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlyZXR1cm4gc3Jpb3ZfbWlncmF0aW9uKGRldikgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NyaW92X21pZ3JhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGJhYmEyZWIuLjZmMmU2MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0yNyw0OCArMjcsNTMgQEAKIAogLyogQXJjaCBob29rcyAqLwogCi1pbnQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKKyNpZm5kZWYgYXJjaF9tc2lfY2hlY2tfZGV2aWNlCitpbnQgYXJjaF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKIHsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCi1pbnQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCi1hcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKKyNpZm5kZWYgYXJjaF9zZXR1cF9tc2lfaXJxcworaW50IGFyY2hfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJaW50IHJldDsKIAorCS8qCisJICogSWYgYW4gYXJjaGl0ZWN0dXJlIHdhbnRzIHRvIHN1cHBvcnQgbXVsdGlwbGUgTVNJLCBpdCBuZWVkcyB0bworCSAqIG92ZXJyaWRlIGFyY2hfc2V0dXBfbXNpX2lycXMoKQorCSAqLworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJICYmIG52ZWMgPiAxKQorCQlyZXR1cm4gMTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCXJldCA9IGFyY2hfc2V0dXBfbXNpX2lycShkZXYsIGVudHJ5KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorI2lmbmRlZiBhcmNoX3RlYXJkb3duX21zaV9pcnFzCit2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5pcnEgIT0gMCkKLQkJCWFyY2hfdGVhcmRvd25fbXNpX2lycShlbnRyeS0+aXJxKTsKKwkJaW50IGksIG52ZWM7CisJCWlmIChlbnRyeS0+aXJxID09IDApCisJCQljb250aW51ZTsKKwkJbnZlYyA9IDEgPDwgZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGU7CisJCWZvciAoaSA9IDA7IGkgPCBudmVjOyBpKyspCisJCQlhcmNoX3RlYXJkb3duX21zaV9pcnEoZW50cnktPmlycSArIGkpOwogCX0KIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21zaV9zZXRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCBlbmFibGUpCiB7CkBAIC0xMTEsMjcgKzExNiwxNCBAQAogCXJldHVybiAoMSA8PCAoMSA8PCB4KSkgLSAxOwogfQogCi1zdGF0aWMgdm9pZCBtc2l4X2ZsdXNoX3dyaXRlcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTMyIG1zaV9jYXBhYmxlX21hc2sodTE2IGNvbnRyb2wpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlyZXR1cm4gbXNpX21hc2soKGNvbnRyb2wgPj4gMSkgJiA3KTsKK30KIAotCWVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKLQlCVUdfT04oIWVudHJ5IHx8ICFlbnRyeS0+ZGV2KTsKLQlzd2l0Y2ggKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKLQljYXNlIFBDSV9DQVBfSURfTVNJOgotCQkvKiBub3RoaW5nIHRvIGRvICovCi0JCWJyZWFrOwotCWNhc2UgUENJX0NBUF9JRF9NU0lYOgotCXsKLQkJaW50IG9mZnNldCA9IGVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCi0JCQlQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTF9PRkZTRVQ7Ci0JCXJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyB1MzIgbXNpX2VuYWJsZWRfbWFzayh1MTYgY29udHJvbCkKK3sKKwlyZXR1cm4gbXNpX21hc2soKGNvbnRyb2wgPj4gNCkgJiA3KTsKIH0KIAogLyoKQEAgLTE0Myw0OSArMTM1LDcxIEBACiAgKiBSZXR1cm5zIDEgaWYgaXQgc3VjY2VlZGVkIGluIG1hc2tpbmcgdGhlIGludGVycnVwdCBhbmQgMCBpZiB0aGUgZGV2aWNlCiAgKiBkb2Vzbid0IHN1cHBvcnQgTVNJIG1hc2tpbmcuCiAgKi8KLXN0YXRpYyBpbnQgbXNpX3NldF9tYXNrX2JpdHMoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCitzdGF0aWMgdm9pZCBtc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwl1MzIgbWFza19iaXRzID0gZGVzYy0+bWFza2VkOwogCi0JZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwotCUJVR19PTighZW50cnkgfHwgIWVudHJ5LT5kZXYpOwotCXN3aXRjaCAoZW50cnktPm1zaV9hdHRyaWIudHlwZSkgewotCWNhc2UgUENJX0NBUF9JRF9NU0k6Ci0JCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7Ci0JCQlpbnQgcG9zOwotCQkJdTMyIG1hc2tfYml0czsKKwlpZiAoIWRlc2MtPm1zaV9hdHRyaWIubWFza2JpdCkKKwkJcmV0dXJuOwogCi0JCQlwb3MgPSAobG9uZyllbnRyeS0+bWFza19iYXNlOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIHBvcywgJm1hc2tfYml0cyk7Ci0JCQltYXNrX2JpdHMgJj0gfihtYXNrKTsKLQkJCW1hc2tfYml0cyB8PSBmbGFnICYgbWFzazsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZW50cnktPmRldiwgcG9zLCBtYXNrX2JpdHMpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSVg6Ci0JewotCQlpbnQgb2Zmc2V0ID0gZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnIgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKLQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVDsKLQkJd3JpdGVsKGZsYWcsIGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwotCQlyZWFkbChlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKLQkJYnJlYWs7CisJbWFza19iaXRzICY9IH5tYXNrOworCW1hc2tfYml0cyB8PSBmbGFnOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGVzYy0+ZGV2LCBkZXNjLT5tYXNrX3BvcywgbWFza19iaXRzKTsKKwlkZXNjLT5tYXNrZWQgPSBtYXNrX2JpdHM7Cit9CisKKy8qCisgKiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGRvZXMgbm90IGZsdXNoIFBDSSB3cml0ZXMgdG8gdGhlIGRldmljZS4KKyAqIEFsbCB1c2VycyBtdXN0IGVuc3VyZSB0aGF0IHRoZXkgcmVhZCBmcm9tIHRoZSBkZXZpY2UgYmVmb3JlIGVpdGhlcgorICogYXNzdW1pbmcgdGhhdCB0aGUgZGV2aWNlIHN0YXRlIGlzIHVwIHRvIGRhdGUsIG9yIHJldHVybmluZyBvdXQgb2YgdGhpcworICogZmlsZS4gIFRoaXMgc2F2ZXMgYSBmZXcgbWlsbGlzZWNvbmRzIHdoZW4gaW5pdGlhbGlzaW5nIGRldmljZXMgd2l0aCBsb3RzCisgKiBvZiBNU0ktWCBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCit7CisJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCisJCQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVDsKKwltYXNrX2JpdHMgJj0gfjE7CisJbWFza19iaXRzIHw9IGZsYWc7CisJd3JpdGVsKG1hc2tfYml0cywgZGVzYy0+bWFza19iYXNlICsgb2Zmc2V0KTsKKwlkZXNjLT5tYXNrZWQgPSBtYXNrX2JpdHM7Cit9CisKK3N0YXRpYyB2b2lkIG1zaV9zZXRfbWFza19iaXQodW5zaWduZWQgaXJxLCB1MzIgZmxhZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX21zaShpcnEpOworCisJaWYgKGRlc2MtPm1zaV9hdHRyaWIuaXNfbXNpeCkgeworCQltc2l4X21hc2tfaXJxKGRlc2MsIGZsYWcpOworCQlyZWFkbChkZXNjLT5tYXNrX2Jhc2UpOwkJLyogRmx1c2ggd3JpdGUgdG8gZGV2aWNlICovCisJfSBlbHNlIHsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gaXJxIC0gZGVzYy0+ZGV2LT5pcnE7CisJCW1zaV9tYXNrX2lycShkZXNjLCAxIDw8IG9mZnNldCwgZmxhZyA8PCBvZmZzZXQpOwogCX0KLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJYnJlYWs7Ci0JfQotCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tlZCA9ICEhZmxhZzsKLQlyZXR1cm4gMTsKK30KKwordm9pZCBtYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwltc2lfc2V0X21hc2tfYml0KGlycSwgMSk7Cit9CisKK3ZvaWQgdW5tYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwltc2lfc2V0X21hc2tfYml0KGlycSwgMCk7CiB9CiAKIHZvaWQgcmVhZF9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwotCXN3aXRjaChlbnRyeS0+bXNpX2F0dHJpYi50eXBlKSB7Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSToKLQl7CisJaWYgKGVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXgpIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gZW50cnktPm1hc2tfYmFzZSArCisJCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAqIFBDSV9NU0lYX0VOVFJZX1NJWkU7CisKKwkJbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKKwkJbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFJfT0ZGU0VUKTsKKwkJbXNnLT5kYXRhID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0RBVEFfT0ZGU0VUKTsKKwl9IGVsc2UgewogCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZW50cnktPmRldjsKIAkJaW50IHBvcyA9IGVudHJ5LT5tc2lfYXR0cmliLnBvczsKIAkJdTE2IGRhdGE7CkBAIC0yMDEsMjEgKzIxNSw2IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9kYXRhX3JlZyhwb3MsIDApLCAmZGF0YSk7CiAJCX0KIAkJbXNnLT5kYXRhID0gZGF0YTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgUENJX0NBUF9JRF9NU0lYOgotCXsKLQkJdm9pZCBfX2lvbWVtICpiYXNlOwotCQliYXNlID0gZW50cnktPm1hc2tfYmFzZSArCi0JCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAqIFBDSV9NU0lYX0VOVFJZX1NJWkU7Ci0KLQkJbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKLQkJbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFJfT0ZGU0VUKTsKLQkJbXNnLT5kYXRhID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0RBVEFfT0ZGU0VUKTsKLSAJCWJyZWFrOwotIAl9Ci0gCWRlZmF1bHQ6Ci0JCUJVRygpOwogCX0KIH0KIApAQCAtMjI5LDExICsyMjgsMjUgQEAKIHZvaWQgd3JpdGVfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKLQlzd2l0Y2ggKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKLQljYXNlIFBDSV9DQVBfSURfTVNJOgotCXsKKwlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgeworCQl2b2lkIF9faW9tZW0gKmJhc2U7CisJCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKKwkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKKworCQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLAorCQkJYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKKwkJd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwKKwkJCWJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSX09GRlNFVCk7CisJCXdyaXRlbChtc2ctPmRhdGEsIGJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9EQVRBX09GRlNFVCk7CisJfSBlbHNlIHsKIAkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGVudHJ5LT5kZXY7CiAJCWludCBwb3MgPSBlbnRyeS0+bXNpX2F0dHJpYi5wb3M7CisJCXUxNiBtc2djdGw7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJm1zZ2N0bCk7CisJCW1zZ2N0bCAmPSB+UENJX01TSV9GTEFHU19RU0laRTsKKwkJbXNnY3RsIHw9IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlIDw8IDQ7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCBtc2djdGwpOwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKIAkJCQkJbXNnLT5hZGRyZXNzX2xvKTsKQEAgLTI0NiwyMyArMjU5LDYgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1zaV9kYXRhX3JlZyhwb3MsIDApLAogCQkJCQkJbXNnLT5kYXRhKTsKIAkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSVg6Ci0JewotCQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKLQkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKLQotCQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLAotCQkJYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKLQkJd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwKLQkJCWJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSX09GRlNFVCk7Ci0JCXdyaXRlbChtc2ctPmRhdGEsIGJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9EQVRBX09GRlNFVCk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlCVUcoKTsKIAl9CiAJZW50cnktPm1zZyA9ICptc2c7CiB9CkBAIC0yNzQsMzcgKzI3MCwxOCBAQAogCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCBtc2cpOwogfQogCi12b2lkIG1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0KLQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCAxKTsKLQltc2l4X2ZsdXNoX3dyaXRlcyhkZXNjKTsKLX0KLQotdm9pZCB1bm1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0KLQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCAwKTsKLQltc2l4X2ZsdXNoX3dyaXRlcyhkZXNjKTsKLX0KLQogc3RhdGljIGludCBtc2lfZnJlZV9pcnFzKHN0cnVjdCBwY2lfZGV2KiBkZXYpOwogCi1zdGF0aWMgc3RydWN0IG1zaV9kZXNjKiBhbGxvY19tc2lfZW50cnkodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbXNpX2Rlc2MgKmFsbG9jX21zaV9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7Ci0KLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2lfZGVzYyksIEdGUF9LRVJORUwpOwotCWlmICghZW50cnkpCisJc3RydWN0IG1zaV9kZXNjICpkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MpCiAJCXJldHVybiBOVUxMOwogCi0JSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKLQllbnRyeS0+aXJxID0gMDsKLQllbnRyeS0+ZGV2ID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmZGVzYy0+bGlzdCk7CisJZGVzYy0+ZGV2ID0gZGV2OwogCi0JcmV0dXJuIGVudHJ5OworCXJldHVybiBkZXNjOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfaW50eF9mb3JfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBlbmFibGUpCkBAIC0zMjgsMTUgKzMwNSwxMSBAQAogCXBjaV9pbnR4X2Zvcl9tc2koZGV2LCAwKTsKIAltc2lfc2V0X2VuYWJsZShkZXYsIDApOwogCXdyaXRlX21zaV9tc2coZGV2LT5pcnEsICZlbnRyeS0+bXNnKTsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkZXYtPmlycSk7Ci0JCW1zaV9zZXRfbWFza19iaXRzKGRlc2MsIGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2ssCi0JCQkJICBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOwotCX0KIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgJmNvbnRyb2wpOworCW1zaV9tYXNrX2lycShlbnRyeSwgbXNpX2NhcGFibGVfbWFzayhjb250cm9sKSwgZW50cnktPm1hc2tlZCk7CiAJY29udHJvbCAmPSB+UENJX01TSV9GTEFHU19RU0laRTsKLQljb250cm9sIHw9IFBDSV9NU0lfRkxBR1NfRU5BQkxFOworCWNvbnRyb2wgfD0gKGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlIDw8IDQpIHwgUENJX01TSV9GTEFHU19FTkFCTEU7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgY29udHJvbCk7CiB9CiAKQEAgLTM1NCw5ICszMjcsOCBAQAogCW1zaXhfc2V0X2VuYWJsZShkZXYsIDApOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZW50cnktPmlycSk7CiAJCXdyaXRlX21zaV9tc2coZW50cnktPmlycSwgJmVudHJ5LT5tc2cpOwotCQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOworCQltc2l4X21hc2tfaXJxKGVudHJ5LCBlbnRyeS0+bWFza2VkKTsKIAl9CiAKIAlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT5tc2lfbGlzdCkpOwpAQCAtMzc4LDUyICszNTAsNDggQEAKIC8qKgogICogbXNpX2NhcGFiaWxpdHlfaW5pdCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKICAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgorICogQG52ZWM6IG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGFsbG9jYXRlCiAgKgotICogU2V0dXAgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVuY3Rpb24gd2l0aCBhIHNpbmdsZQotICogTVNJIGlycSwgcmVnYXJkbGVzcyBvZiBkZXZpY2UgZnVuY3Rpb24gaXMgY2FwYWJsZSBvZiBoYW5kbGluZwotICogbXVsdGlwbGUgbWVzc2FnZXMuIEEgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoZSBzdWNjZXNzZnVsIHNldHVwCi0gKiBvZiBhbiBlbnRyeSB6ZXJvIHdpdGggdGhlIG5ldyBNU0kgaXJxIG9yIG5vbi16ZXJvIGZvciBvdGhlcndpc2UuCi0gKiovCi1zdGF0aWMgaW50IG1zaV9jYXBhYmlsaXR5X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKKyAqIFNldHVwIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb2YgdGhlIGRldmljZSB3aXRoIHRoZSByZXF1ZXN0ZWQKKyAqIG51bWJlciBvZiBpbnRlcnJ1cHRzLiAgQSByZXR1cm4gdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3NmdWwKKyAqIHNldHVwIG9mIGFuIGVudHJ5IHdpdGggdGhlIG5ldyBNU0kgaXJxLiAgQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCisgKiBhbiBlcnJvciwgYW5kIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMKKyAqIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQuCisgKi8KK3N0YXRpYyBpbnQgbXNpX2NhcGFiaWxpdHlfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCWludCBwb3MsIHJldDsKIAl1MTYgY29udHJvbDsKKwl1bnNpZ25lZCBtYXNrOwogCiAJbXNpX3NldF9lbmFibGUoZGV2LCAwKTsJLyogRW5zdXJlIG1zaSBpcyBkaXNhYmxlZCBhcyBJIHNldCBpdCB1cCAqLwogCiAgICAJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CiAJLyogTVNJIEVudHJ5IEluaXRpYWxpemF0aW9uICovCi0JZW50cnkgPSBhbGxvY19tc2lfZW50cnkoKTsKKwllbnRyeSA9IGFsbG9jX21zaV9lbnRyeShkZXYpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZW50cnktPm1zaV9hdHRyaWIudHlwZSA9IFBDSV9DQVBfSURfTVNJOworCWVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXggPSAwOwogCWVudHJ5LT5tc2lfYXR0cmliLmlzXzY0ID0gaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKTsKIAllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciA9IDA7CiAJZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCA9IGlzX21hc2tfYml0X3N1cHBvcnQoY29udHJvbCk7Ci0JZW50cnktPm1zaV9hdHRyaWIubWFza2VkID0gMTsKIAllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycSA9IGRldi0+aXJxOwkvKiBTYXZlIElPQVBJQyBJUlEgKi8KIAllbnRyeS0+bXNpX2F0dHJpYi5wb3MgPSBwb3M7Ci0JZW50cnktPmRldiA9IGRldjsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQl1bnNpZ25lZCBpbnQgYmFzZSwgbWFza2JpdHMsIHRlbXA7CiAKLQkJYmFzZSA9IG1zaV9tYXNrX2JpdHNfcmVnKHBvcywgZW50cnktPm1zaV9hdHRyaWIuaXNfNjQpOwotCQllbnRyeS0+bWFza19iYXNlID0gKHZvaWQgX19pb21lbSAqKShsb25nKWJhc2U7CisJZW50cnktPm1hc2tfcG9zID0gbXNpX21hc2tfYml0c19yZWcocG9zLCBlbnRyeS0+bXNpX2F0dHJpYi5pc182NCk7CisJLyogQWxsIE1TSXMgYXJlIHVubWFza2VkIGJ5IGRlZmF1bHQsIE1hc2sgdGhlbSBhbGwgKi8KKwlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZW50cnktPm1hc2tfcG9zLCAmZW50cnktPm1hc2tlZCk7CisJbWFzayA9IG1zaV9jYXBhYmxlX21hc2soY29udHJvbCk7CisJbXNpX21hc2tfaXJxKGVudHJ5LCBtYXNrLCBtYXNrKTsKIAotCQkvKiBBbGwgTVNJcyBhcmUgdW5tYXNrZWQgYnkgZGVmYXVsdCwgTWFzayB0aGVtIGFsbCAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBiYXNlLCAmbWFza2JpdHMpOwotCQl0ZW1wID0gbXNpX21hc2soKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX1FNQVNLKSA+PiAxKTsKLQkJbWFza2JpdHMgfD0gdGVtcDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGJhc2UsIG1hc2tiaXRzKTsKLQkJZW50cnktPm1zaV9hdHRyaWIubWFza2JpdHNfbWFzayA9IHRlbXA7Ci0JfQogCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmZGV2LT5tc2lfbGlzdCk7CiAKIAkvKiBDb25maWd1cmUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCi0JcmV0ID0gYXJjaF9zZXR1cF9tc2lfaXJxcyhkZXYsIDEsIFBDSV9DQVBfSURfTVNJKTsKKwlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0kpOwogCWlmIChyZXQpIHsKIAkJbXNpX2ZyZWVfaXJxcyhkZXYpOwogCQlyZXR1cm4gcmV0OwpAQCAtNDc2LDI2ICs0NDQsMjggQEAKIAogCS8qIE1TSS1YIFRhYmxlIEluaXRpYWxpemF0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykgewotCQllbnRyeSA9IGFsbG9jX21zaV9lbnRyeSgpOworCQllbnRyeSA9IGFsbG9jX21zaV9lbnRyeShkZXYpOwogCQlpZiAoIWVudHJ5KQogCQkJYnJlYWs7CiAKICAJCWogPSBlbnRyaWVzW2ldLmVudHJ5OwotCQllbnRyeS0+bXNpX2F0dHJpYi50eXBlID0gUENJX0NBUF9JRF9NU0lYOworCQllbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4ID0gMTsKIAkJZW50cnktPm1zaV9hdHRyaWIuaXNfNjQgPSAxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciA9IGo7Ci0JCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQgPSAxOwotCQllbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQgPSAxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycSA9IGRldi0+aXJxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5wb3MgPSBwb3M7Ci0JCWVudHJ5LT5kZXYgPSBkZXY7CiAJCWVudHJ5LT5tYXNrX2Jhc2UgPSBiYXNlOworCQllbnRyeS0+bWFza2VkID0gcmVhZGwoYmFzZSArIGogKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKKwkJCQkJUENJX01TSVhfRU5UUllfVkVDVE9SX0NUUkxfT0ZGU0VUKTsKKwkJbXNpeF9tYXNrX2lycShlbnRyeSwgMSk7CiAKIAkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAl9CiAKIAlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKLQlpZiAocmV0KSB7CisJaWYgKHJldCA8IDApIHsKKwkJLyogSWYgd2UgaGFkIHNvbWUgc3VjY2VzcyByZXBvcnQgdGhlIG51bWJlciBvZiBpcnFzCisJCSAqIHdlIHN1Y2NlZWRlZCBpbiBzZXR0aW5nIHVwLiAqLwogCQlpbnQgYXZhaWwgPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQkJaWYgKGVudHJ5LT5pcnEgIT0gMCkgewpAQCAtNTAzLDE0ICs0NzMsMTMgQEAKIAkJCX0KIAkJfQogCi0JCW1zaV9mcmVlX2lycXMoZGV2KTsKKwkJaWYgKGF2YWlsICE9IDApCisJCQlyZXQgPSBhdmFpbDsKKwl9CiAKLQkJLyogSWYgd2UgaGFkIHNvbWUgc3VjY2VzcyByZXBvcnQgdGhlIG51bWJlciBvZiBpcnFzCi0JCSAqIHdlIHN1Y2NlZWRlZCBpbiBzZXR0aW5nIHVwLgotCQkgKi8KLQkJaWYgKGF2YWlsID09IDApCi0JCQlhdmFpbCA9IHJldDsKLQkJcmV0dXJuIGF2YWlsOworCWlmIChyZXQpIHsKKwkJbXNpX2ZyZWVfaXJxcyhkZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWkgPSAwOwpAQCAtNTc1LDM5ICs1NDQsNTQgQEAKIH0KIAogLyoqCi0gKiBwY2lfZW5hYmxlX21zaSAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKLSAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgorICogcGNpX2VuYWJsZV9tc2lfYmxvY2sgLSBjb25maWd1cmUgZGV2aWNlJ3MgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCisgKiBAZGV2OiBkZXZpY2UgdG8gY29uZmlndXJlCisgKiBAbnZlYzogbnVtYmVyIG9mIGludGVycnVwdHMgdG8gY29uZmlndXJlCiAgKgotICogU2V0dXAgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVuY3Rpb24gd2l0aAotICogYSBzaW5nbGUgTVNJIGlycSB1cG9uIGl0cyBzb2Z0d2FyZSBkcml2ZXIgY2FsbCB0byByZXF1ZXN0IGZvcgotICogTVNJIG1vZGUgZW5hYmxlZCBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlIGZ1bmN0aW9uLiBBIHJldHVybiBvZiB6ZXJvCi0gKiBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3NmdWwgc2V0dXAgb2YgYW4gZW50cnkgemVybyB3aXRoIHRoZSBuZXcgTVNJCi0gKiBpcnEgb3Igbm9uLXplcm8gZm9yIG90aGVyd2lzZS4KLSAqKi8KLWludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiogZGV2KQorICogQWxsb2NhdGUgSVJRcyBmb3IgYSBkZXZpY2Ugd2l0aCB0aGUgTVNJIGNhcGFiaWxpdHkuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBpZiBhbiBlcnJvciBvY2N1cnMuICBJZiBpdAorICogaXMgdW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyByZXF1ZXN0ZWQsIGl0IHJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBpdCBtaWdodCBiZSBhYmxlIHRvIGFsbG9jYXRlLiAgSWYgaXQgc3VjY2Vzc2Z1bGx5CisgKiBhbGxvY2F0ZXMgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHJlcXVlc3RlZCwgaXQgcmV0dXJucyAwIGFuZAorICogdXBkYXRlcyB0aGUgQGRldidzIGlycSBtZW1iZXIgdG8gdGhlIGxvd2VzdCBuZXcgaW50ZXJydXB0IG51bWJlcjsgdGhlCisgKiBvdGhlciBpbnRlcnJ1cHQgbnVtYmVycyBhbGxvY2F0ZWQgdG8gdGhpcyBkZXZpY2UgYXJlIGNvbnNlY3V0aXZlLgorICovCitpbnQgcGNpX2VuYWJsZV9tc2lfYmxvY2soc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG52ZWMpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCBwb3MsIG1heHZlYzsKKwl1MTYgbXNnY3RsOwogCi0Jc3RhdHVzID0gcGNpX21zaV9jaGVja19kZXZpY2UoZGV2LCAxLCBQQ0lfQ0FQX0lEX01TSSk7CisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmbXNnY3RsKTsKKwltYXh2ZWMgPSAxIDw8ICgobXNnY3RsICYgUENJX01TSV9GTEFHU19RTUFTSykgPj4gMSk7CisJaWYgKG52ZWMgPiBtYXh2ZWMpCisJCXJldHVybiBtYXh2ZWM7CisKKwlzdGF0dXMgPSBwY2lfbXNpX2NoZWNrX2RldmljZShkZXYsIG52ZWMsIFBDSV9DQVBfSURfTVNJKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCiAJV0FSTl9PTighIWRldi0+bXNpX2VuYWJsZWQpOwogCi0JLyogQ2hlY2sgd2hldGhlciBkcml2ZXIgYWxyZWFkeSByZXF1ZXN0ZWQgZm9yIE1TSS1YIGlycXMgKi8KKwkvKiBDaGVjayB3aGV0aGVyIGRyaXZlciBhbHJlYWR5IHJlcXVlc3RlZCBNU0ktWCBpcnFzICovCiAJaWYgKGRldi0+bXNpeF9lbmFibGVkKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgImNhbid0IGVuYWJsZSBNU0kgIgogCQkJICIoTVNJLVggYWxyZWFkeSBlbmFibGVkKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzdGF0dXMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldik7CisKKwlzdGF0dXMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldiwgbnZlYyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2kpOworRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX21zaV9ibG9jayk7CiAKLXZvaWQgcGNpX21zaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiogZGV2KQordm9pZCBwY2lfbXNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisJdTMyIG1hc2s7CisJdTE2IGN0cmw7CiAKIAlpZiAoIXBjaV9tc2lfZW5hYmxlIHx8ICFkZXYgfHwgIWRldi0+bXNpX2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTYxNywxOSArNjAxLDE1IEBACiAJZGV2LT5tc2lfZW5hYmxlZCA9IDA7CiAKIAlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT5tc2lfbGlzdCkpOwotCWVudHJ5ID0gbGlzdF9lbnRyeShkZXYtPm1zaV9saXN0Lm5leHQsIHN0cnVjdCBtc2lfZGVzYywgbGlzdCk7Ci0JLyogUmV0dXJuIHRoZSB0aGUgcGNpIHJlc2V0IHdpdGggbXNpIGlycXMgdW5tYXNrZWQgKi8KLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQl1MzIgbWFzayA9IGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2s7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGRldi0+aXJxKTsKLQkJbXNpX3NldF9tYXNrX2JpdHMoZGVzYywgbWFzaywgfm1hc2spOwotCX0KLQlpZiAoIWVudHJ5LT5kZXYgfHwgZW50cnktPm1zaV9hdHRyaWIudHlwZSAhPSBQQ0lfQ0FQX0lEX01TSSkKLQkJcmV0dXJuOworCWRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXYtPm1zaV9saXN0LCBzdHJ1Y3QgbXNpX2Rlc2MsIGxpc3QpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGVzYy0+bXNpX2F0dHJpYi5wb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmY3RybCk7CisJbWFzayA9IG1zaV9jYXBhYmxlX21hc2soY3RybCk7CisJbXNpX21hc2tfaXJxKGRlc2MsIG1hc2ssIH5tYXNrKTsKIAogCS8qIFJlc3RvcmUgZGV2LT5pcnEgdG8gaXRzIGRlZmF1bHQgcGluLWFzc2VydGlvbiBpcnEgKi8KLQlkZXYtPmlycSA9IGVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxOworCWRldi0+aXJxID0gZGVzYy0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycTsKIH0KKwogdm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwpAQCAtNjQwLDcgKzYyMCw3IEBACiAJcGNpX21zaV9zaHV0ZG93bihkZXYpOwogCiAJZW50cnkgPSBsaXN0X2VudHJ5KGRldi0+bXNpX2xpc3QubmV4dCwgc3RydWN0IG1zaV9kZXNjLCBsaXN0KTsKLQlpZiAoIWVudHJ5LT5kZXYgfHwgZW50cnktPm1zaV9hdHRyaWIudHlwZSAhPSBQQ0lfQ0FQX0lEX01TSSkKKwlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkKIAkJcmV0dXJuOwogCiAJbXNpX2ZyZWVfaXJxcyhkZXYpOwpAQCAtNjUyLDE0ICs2MzIsMTggQEAKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCAqdG1wOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5pcnEpCi0JCQlCVUdfT04oaXJxX2hhc19hY3Rpb24oZW50cnktPmlycSkpOworCQlpbnQgaSwgbnZlYzsKKwkJaWYgKCFlbnRyeS0+aXJxKQorCQkJY29udGludWU7CisJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOworCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQorCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7CiAJfQogCiAJYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhkZXYpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWlmIChlbnRyeS0+bXNpX2F0dHJpYi50eXBlID09IFBDSV9DQVBfSURfTVNJWCkgeworCQlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgewogCQkJd3JpdGVsKDEsIGVudHJ5LT5tYXNrX2Jhc2UgKyBlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9ucgogCQkJCSAgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFCiAJCQkJICArIFBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVCk7CkBAIC02NzUsNiArNjU5LDIzIEBACiB9CiAKIC8qKgorICogcGNpX21zaXhfdGFibGVfc2l6ZSAtIHJldHVybiB0aGUgbnVtYmVyIG9mIGRldmljZSdzIE1TSS1YIHRhYmxlIGVudHJpZXMKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJLVggZGV2aWNlIGZ1bmN0aW9uCisgKi8KK2ludCBwY2lfbXNpeF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MTYgY29udHJvbDsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwlyZXR1cm4gbXVsdGlfbXNpeF9jYXBhYmxlKGNvbnRyb2wpOworfQorCisvKioKICAqIHBjaV9lbmFibGVfbXNpeCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZQogICogQGRldjogcG9pbnRlciB0byB0aGUgcGNpX2RldiBkYXRhIHN0cnVjdHVyZSBvZiBNU0ktWCBkZXZpY2UgZnVuY3Rpb24KICAqIEBlbnRyaWVzOiBwb2ludGVyIHRvIGFuIGFycmF5IG9mIE1TSS1YIGVudHJpZXMKQEAgLTY5MSw5ICs2OTIsOCBAQAogICoqLwogaW50IHBjaV9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiogZGV2LCBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCiB7Ci0JaW50IHN0YXR1cywgcG9zLCBucl9lbnRyaWVzOworCWludCBzdGF0dXMsIG5yX2VudHJpZXM7CiAJaW50IGksIGo7Ci0JdTE2IGNvbnRyb2w7CiAKIAlpZiAoIWVudHJpZXMpCiAgCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcwMiw5ICs3MDIsNyBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7Ci0JbnJfZW50cmllcyA9IG11bHRpX21zaXhfY2FwYWJsZShjb250cm9sKTsKKwlucl9lbnRyaWVzID0gcGNpX21zaXhfdGFibGVfc2l6ZShkZXYpOwogCWlmIChudmVjID4gbnJfZW50cmllcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5oIGIvZHJpdmVycy9wY2kvbXNpLmgKaW5kZXggMzg5OGY1Mi4uNzFmNGRmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmgKKysrIGIvZHJpdmVycy9wY2kvbXNpLmgKQEAgLTIwLDE0ICsyMCw4IEBACiAjZGVmaW5lIG1zaV9tYXNrX2JpdHNfcmVnKGJhc2UsIGlzNjRiaXQpIFwKIAkoIChpczY0Yml0ID09IDEpID8gYmFzZStQQ0lfTVNJX01BU0tfQklUIDogYmFzZStQQ0lfTVNJX01BU0tfQklULTQpCiAjZGVmaW5lIG1zaV9kaXNhYmxlKGNvbnRyb2wpCQljb250cm9sICY9IH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRQotI2RlZmluZSBtdWx0aV9tc2lfY2FwYWJsZShjb250cm9sKSBcCi0JKDEgPDwgKChjb250cm9sICYgUENJX01TSV9GTEFHU19RTUFTSykgPj4gMSkpCi0jZGVmaW5lIG11bHRpX21zaV9lbmFibGUoY29udHJvbCwgbnVtKSBcCi0JY29udHJvbCB8PSAoKChudW0gPj4gMSkgPDwgNCkgJiBQQ0lfTVNJX0ZMQUdTX1FTSVpFKTsKICNkZWZpbmUgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKQkoISEoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpKQogI2RlZmluZSBpc19tYXNrX2JpdF9zdXBwb3J0KGNvbnRyb2wpCSghIShjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKSkKLSNkZWZpbmUgbXNpX2VuYWJsZShjb250cm9sLCBudW0pIG11bHRpX21zaV9lbmFibGUoY29udHJvbCwgbnVtKTsgXAotCWNvbnRyb2wgfD0gUENJX01TSV9GTEFHU19FTkFCTEUKIAogI2RlZmluZSBtc2l4X3RhYmxlX29mZnNldF9yZWcoYmFzZSkJKGJhc2UgKyAweDA0KQogI2RlZmluZSBtc2l4X3BiYV9vZmZzZXRfcmVnKGJhc2UpCShiYXNlICsgMHgwOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IGRlZWE4YTEuLmZhYzVlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMTgsMjIxICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KICNpbmNsdWRlICJwY2kuaCIKIAotc3RydWN0IGFjcGlfb3NjX2RhdGEgewotCWFjcGlfaGFuZGxlIGhhbmRsZTsKLQl1MzIgc3VwcG9ydF9zZXQ7Ci0JdTMyIGNvbnRyb2xfc2V0OwotCXUzMiBjb250cm9sX3F1ZXJ5OwotCWludCBpc19xdWVyaWVkOwotCXN0cnVjdCBsaXN0X2hlYWQgc2liaWxpbmc7Ci19Owotc3RhdGljIExJU1RfSEVBRChhY3BpX29zY19kYXRhX2xpc3QpOwotCi1zdHJ1Y3QgYWNwaV9vc2NfYXJncyB7Ci0JdTMyIGNhcGJ1ZlszXTsKLX07Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgocGNpX2FjcGlfbG9jayk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqYWNwaV9nZXRfb3NjX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBhY3BpX29zY19kYXRhICpkYXRhOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkYXRhLCAmYWNwaV9vc2NfZGF0YV9saXN0LCBzaWJpbGluZykgewotCQlpZiAoZGF0YS0+aGFuZGxlID09IGhhbmRsZSkKLQkJCXJldHVybiBkYXRhOwotCX0KLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiBOVUxMOwotCUlOSVRfTElTVF9IRUFEKCZkYXRhLT5zaWJpbGluZyk7Ci0JZGF0YS0+aGFuZGxlID0gaGFuZGxlOwotCWxpc3RfYWRkX3RhaWwoJmRhdGEtPnNpYmlsaW5nLCAmYWNwaV9vc2NfZGF0YV9saXN0KTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLAotCQkJICAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKLQotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcnVuX29zYyhhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkJc3RydWN0IGFjcGlfb3NjX2FyZ3MgKm9zY19hcmdzLCB1MzIgKnJldHZhbCkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7Ci0JdW5pb24gYWNwaV9vYmplY3QgaW5fcGFyYW1zWzRdOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqOwotCXUzMiBlcnJvcnMsIGZsYWdzID0gb3NjX2FyZ3MtPmNhcGJ1ZltPU0NfUVVFUllfVFlQRV07Ci0KLQkvKiBTZXR0aW5nIHVwIGlucHV0IHBhcmFtZXRlcnMgKi8KLQlpbnB1dC5jb3VudCA9IDQ7Ci0JaW5wdXQucG9pbnRlciA9IGluX3BhcmFtczsKLQlpbl9wYXJhbXNbMF0udHlwZSAJCT0gQUNQSV9UWVBFX0JVRkZFUjsKLQlpbl9wYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCAJPSAxNjsKLQlpbl9wYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIJPSBPU0NfVVVJRDsKLQlpbl9wYXJhbXNbMV0udHlwZSAJCT0gQUNQSV9UWVBFX0lOVEVHRVI7Ci0JaW5fcGFyYW1zWzFdLmludGVnZXIudmFsdWUgCT0gMTsKLQlpbl9wYXJhbXNbMl0udHlwZSAJCT0gQUNQSV9UWVBFX0lOVEVHRVI7Ci0JaW5fcGFyYW1zWzJdLmludGVnZXIudmFsdWUJPSAzOwotCWluX3BhcmFtc1szXS50eXBlCQk9IEFDUElfVFlQRV9CVUZGRVI7Ci0JaW5fcGFyYW1zWzNdLmJ1ZmZlci5sZW5ndGggCT0gMTI7Ci0JaW5fcGFyYW1zWzNdLmJ1ZmZlci5wb2ludGVyIAk9ICh1OCAqKW9zY19hcmdzLT5jYXBidWY7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAoIW91dHB1dC5sZW5ndGgpCi0JCXJldHVybiBBRV9OVUxMX09CSkVDVDsKLQotCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKLQlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFdmFsdWF0ZSBfT1NDIHJldHVybnMgd3JvbmcgdHlwZVxuIik7Ci0JCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCWdvdG8gb3V0X2tmcmVlOwotCX0KLQkvKiBOZWVkIHRvIGlnbm9yZSB0aGUgYml0MCBpbiByZXN1bHQgY29kZSAqLwotCWVycm9ycyA9ICooKHUzMiAqKW91dF9vYmotPmJ1ZmZlci5wb2ludGVyKSAmIH4oMSA8PCAwKTsKLQlpZiAoZXJyb3JzKSB7Ci0JCWlmIChlcnJvcnMgJiBPU0NfUkVRVUVTVF9FUlJPUikKLQkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIHJlcXVlc3QgZmFpbHNcbiIpOyAKLQkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1VVSURfRVJST1IpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIFVVSURcbiIpOyAKLQkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1JFVklTSU9OX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgaW52YWxpZCByZXZpc2lvblxuIik7IAotCQlpZiAoZXJyb3JzICYgT1NDX0NBUEFCSUxJVElFU19NQVNLX0VSUk9SKSB7Ci0JCQlpZiAoZmxhZ3MgJiBPU0NfUVVFUllfRU5BQkxFKQotCQkJCWdvdG8gb3V0X3N1Y2Nlc3M7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBGVyBub3QgZ3JhbnQgcmVxLiBjb250cm9sXG4iKTsKLQkJCXN0YXR1cyA9IEFFX1NVUFBPUlQ7Ci0JCQlnb3RvIG91dF9rZnJlZTsKLQkJfQotCQlzdGF0dXMgPSBBRV9FUlJPUjsKLQkJZ290byBvdXRfa2ZyZWU7Ci0JfQotb3V0X3N1Y2Nlc3M6Ci0JKnJldHZhbCA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDgpKTsKLQlzdGF0dXMgPSBBRV9PSzsKLQotb3V0X2tmcmVlOgotCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgX19hY3BpX3F1ZXJ5X29zYyh1MzIgZmxhZ3MsIHN0cnVjdCBhY3BpX29zY19kYXRhICpvc2NfZGF0YSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHN1cHBvcnRfc2V0LCByZXN1bHQ7Ci0Jc3RydWN0IGFjcGlfb3NjX2FyZ3Mgb3NjX2FyZ3M7Ci0KLQkvKiBkbyBfT1NDIHF1ZXJ5IGZvciBhbGwgcG9zc2libGUgY29udHJvbHMgKi8KLQlzdXBwb3J0X3NldCA9IG9zY19kYXRhLT5zdXBwb3J0X3NldCB8IChmbGFncyAmIE9TQ19TVVBQT1JUX01BU0tTKTsKLQlvc2NfYXJncy5jYXBidWZbT1NDX1FVRVJZX1RZUEVdID0gT1NDX1FVRVJZX0VOQUJMRTsKLQlvc2NfYXJncy5jYXBidWZbT1NDX1NVUFBPUlRfVFlQRV0gPSBzdXBwb3J0X3NldDsKLQlvc2NfYXJncy5jYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSBPU0NfQ09OVFJPTF9NQVNLUzsKLQotCXN0YXR1cyA9IGFjcGlfcnVuX29zYyhvc2NfZGF0YS0+aGFuZGxlLCAmb3NjX2FyZ3MsICZyZXN1bHQpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlvc2NfZGF0YS0+c3VwcG9ydF9zZXQgPSBzdXBwb3J0X3NldDsKLQkJb3NjX2RhdGEtPmNvbnRyb2xfcXVlcnkgPSByZXN1bHQ7Ci0JCW9zY19kYXRhLT5pc19xdWVyaWVkID0gMTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogcGNpX2FjcGlfb3NjX3N1cHBvcnQ6IEludm9rZSBfT1NDIGluZGljYXRpbmcgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGZlYXR1cmUKLSAqIEBmbGFnczogQml0bWFzayBvZiBmbGFncyB0byBzdXBwb3J0Ci0gKgotICogU2VlIHRoZSBBQ1BJIHNwZWMgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmbGFncwotICovCi1pbnQgcGNpX2FjcGlfb3NjX3N1cHBvcnQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaGFuZGxlIHRtcDsKLQlzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqb3NjX2RhdGE7Ci0JaW50IHJjID0gMDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfT1NDIiwgJnRtcCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gLUVOT1RUWTsKLQotCW11dGV4X2xvY2soJnBjaV9hY3BpX2xvY2spOwotCW9zY19kYXRhID0gYWNwaV9nZXRfb3NjX2RhdGEoaGFuZGxlKTsKLQlpZiAoIW9zY19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWNwaSBvc2MgZGF0YSBhcnJheSBpcyBmdWxsXG4iKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlfX2FjcGlfcXVlcnlfb3NjKGZsYWdzLCBvc2NfZGF0YSk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogcGNpX29zY19jb250cm9sX3NldCAtIGNvbW1pdCByZXF1ZXN0ZWQgY29udHJvbCB0byBGaXJtd2FyZQotICogQGhhbmRsZTogYWNwaV9oYW5kbGUgZm9yIHRoZSB0YXJnZXQgQUNQSSBvYmplY3QKLSAqIEBmbGFnczogZHJpdmVyJ3MgcmVxdWVzdGVkIGNvbnRyb2wgYml0cwotICoKLSAqIEF0dGVtcHQgdG8gdGFrZSBjb250cm9sIGZyb20gRmlybXdhcmUgb24gcmVxdWVzdGVkIGNvbnRyb2wgYml0cy4KLSAqKi8KLWFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXUzMiBjb250cm9sX3JlcSwgY29udHJvbF9zZXQsIHJlc3VsdDsKLQlhY3BpX2hhbmRsZSB0bXA7Ci0Jc3RydWN0IGFjcGlfb3NjX2RhdGEgKm9zY19kYXRhOwotCXN0cnVjdCBhY3BpX29zY19hcmdzIG9zY19hcmdzOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9PU0MiLCAmdG1wKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZwY2lfYWNwaV9sb2NrKTsKLQlvc2NfZGF0YSA9IGFjcGlfZ2V0X29zY19kYXRhKGhhbmRsZSk7Ci0JaWYgKCFvc2NfZGF0YSkgewotCQlwcmludGsoS0VSTl9FUlIgImFjcGkgb3NjIGRhdGEgYXJyYXkgaXMgZnVsbFxuIik7Ci0JCXN0YXR1cyA9IEFFX0VSUk9SOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljb250cm9sX3JlcSA9IChmbGFncyAmIE9TQ19DT05UUk9MX01BU0tTKTsKLQlpZiAoIWNvbnRyb2xfcmVxKSB7Ci0JCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIE5vIG5lZWQgdG8gZXZhbHVhdGUgX09TQyBpZiB0aGUgY29udHJvbCB3YXMgYWxyZWFkeSBncmFudGVkLiAqLwotCWlmICgob3NjX2RhdGEtPmNvbnRyb2xfc2V0ICYgY29udHJvbF9yZXEpID09IGNvbnRyb2xfcmVxKQotCQlnb3RvIG91dDsKLQotCWlmICghb3NjX2RhdGEtPmlzX3F1ZXJpZWQpIHsKLQkJc3RhdHVzID0gX19hY3BpX3F1ZXJ5X29zYyhvc2NfZGF0YS0+c3VwcG9ydF9zZXQsIG9zY19kYXRhKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChvc2NfZGF0YS0+Y29udHJvbF9xdWVyeSAmIGNvbnRyb2xfcmVxKSAhPSBjb250cm9sX3JlcSkgewotCQlzdGF0dXMgPSBBRV9TVVBQT1JUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljb250cm9sX3NldCA9IG9zY19kYXRhLT5jb250cm9sX3NldCB8IGNvbnRyb2xfcmVxOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gPSAwOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfU1VQUE9SVF9UWVBFXSA9IG9zY19kYXRhLT5zdXBwb3J0X3NldDsKLQlvc2NfYXJncy5jYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSBjb250cm9sX3NldDsKLQlzdGF0dXMgPSBhY3BpX3J1bl9vc2MoaGFuZGxlLCAmb3NjX2FyZ3MsICZyZXN1bHQpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJb3NjX2RhdGEtPmNvbnRyb2xfc2V0ID0gcmVzdWx0Owotb3V0OgotCW11dGV4X3VubG9jaygmcGNpX2FjcGlfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX29zY19jb250cm9sX3NldCk7Ci0KIC8qCiAgKiBfU3hEIHJldHVybnMgdGhlIEQtc3RhdGUgd2l0aCB0aGUgaGlnaGVzdCBwb3dlcgogICogKGxvd2VzdCBELXN0YXRlIG51bWJlcikgc3VwcG9ydGVkIGluIHRoZSBTLXN0YXRlICJ4Ii4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCA5M2VhYzE0Li5jMGNiYmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC05OSw2ICs5OSw1MiBAQAogfQogc3RhdGljIERSSVZFUl9BVFRSKG5ld19pZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfbmV3X2lkKTsKIAorLyoqCisgKiBzdG9yZV9yZW1vdmVfaWQgLSByZW1vdmUgYSBQQ0kgZGV2aWNlIElEIGZyb20gdGhpcyBkcml2ZXIKKyAqIEBkcml2ZXI6IHRhcmdldCBkZXZpY2UgZHJpdmVyCisgKiBAYnVmOiBidWZmZXIgZm9yIHNjYW5uaW5nIGRldmljZSBJRCBkYXRhCisgKiBAY291bnQ6IGlucHV0IHNpemUKKyAqCisgKiBSZW1vdmVzIGEgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyLgorICovCitzdGF0aWMgc3NpemVfdAorc3RvcmVfcmVtb3ZlX2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkLCAqbjsKKwlzdHJ1Y3QgcGNpX2RyaXZlciAqcGRydiA9IHRvX3BjaV9kcml2ZXIoZHJpdmVyKTsKKwlfX3UzMiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkJc3ViZGV2aWNlID0gUENJX0FOWV9JRCwgY2xhc3MgPSAwLCBjbGFzc19tYXNrID0gMDsKKwlpbnQgZmllbGRzID0gMDsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKworCWZpZWxkcyA9IHNzY2FuZihidWYsICIleCAleCAleCAleCAleCAleCIsCisJCQkmdmVuZG9yLCAmZGV2aWNlLCAmc3VidmVuZG9yLCAmc3ViZGV2aWNlLAorCQkJJmNsYXNzLCAmY2xhc3NfbWFzayk7CisJaWYgKGZpZWxkcyA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR5bmlkLCBuLCAmcGRydi0+ZHluaWRzLmxpc3QsIG5vZGUpIHsKKwkJc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkID0gJmR5bmlkLT5pZDsKKwkJaWYgKChpZC0+dmVuZG9yID09IHZlbmRvcikgJiYKKwkJICAgIChpZC0+ZGV2aWNlID09IGRldmljZSkgJiYKKwkJICAgIChzdWJ2ZW5kb3IgPT0gUENJX0FOWV9JRCB8fCBpZC0+c3VidmVuZG9yID09IHN1YnZlbmRvcikgJiYKKwkJICAgIChzdWJkZXZpY2UgPT0gUENJX0FOWV9JRCB8fCBpZC0+c3ViZGV2aWNlID09IHN1YmRldmljZSkgJiYKKwkJICAgICEoKGlkLT5jbGFzcyBeIGNsYXNzKSAmIGNsYXNzX21hc2spKSB7CisJCQlsaXN0X2RlbCgmZHluaWQtPm5vZGUpOworCQkJa2ZyZWUoZHluaWQpOworCQkJcmV0dmFsID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CisKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBEUklWRVJfQVRUUihyZW1vdmVfaWQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX3JlbW92ZV9pZCk7CisKIHN0YXRpYyB2b2lkCiBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKIHsKQEAgLTEyNSw2ICsxNzEsMjAgQEAKIHsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmRydi0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfbmV3X2lkKTsKIH0KKworc3RhdGljIGludAorcGNpX2NyZWF0ZV9yZW1vdmVpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCit7CisJaW50IGVycm9yID0gMDsKKwlpZiAoZHJ2LT5wcm9iZSAhPSBOVUxMKQorCQllcnJvciA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmZHJ2LT5kcml2ZXIsJmRyaXZlcl9hdHRyX3JlbW92ZV9pZCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBwY2lfcmVtb3ZlX3JlbW92ZWlkX2ZpbGUoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmRydi0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfcmVtb3ZlX2lkKTsKK30KICNlbHNlIC8qICFDT05GSUdfSE9UUExVRyAqLwogc3RhdGljIGlubGluZSB2b2lkIHBjaV9mcmVlX2R5bmlkcyhzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7fQogc3RhdGljIGlubGluZSBpbnQgcGNpX2NyZWF0ZV9uZXdpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCkBAIC0xMzIsNiArMTkyLDExIEBACiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbW92ZV9uZXdpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHt9CitzdGF0aWMgaW5saW5lIGludCBwY2lfY3JlYXRlX3JlbW92ZWlkX2ZpbGUoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcmVtb3ZlX3JlbW92ZWlkX2ZpbGUoc3RydWN0IHBjaV9kcml2ZXIgKmRydikge30KICNlbmRpZgogCiAvKioKQEAgLTM1Miw1MyArNDE3LDYwIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBwY2lfZHJpdmVyICogZHJ2ID0gcGNpX2Rldi0+ZHJpdmVyOwotCWludCBpID0gMDsKKworCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CiAKIAlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZCkgewogCQlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwkJaW50IGVycm9yOwogCi0JCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CisJCWVycm9yID0gZHJ2LT5zdXNwZW5kKHBjaV9kZXYsIHN0YXRlKTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+c3VzcGVuZCwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaSA9IGRydi0+c3VzcGVuZChwY2lfZGV2LCBzdGF0ZSk7Ci0JCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnN1c3BlbmQsIGkpOwotCQlpZiAoaSkKLQkJCXJldHVybiBpOwotCi0JCWlmIChwY2lfZGV2LT5zdGF0ZV9zYXZlZCkKLQkJCWdvdG8gRml4dXA7Ci0KLQkJaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKIAkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKIAkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCiAJCQkJIlBDSSBQTTogRGV2aWNlIHN0YXRlIG5vdCBzYXZlZCBieSAlcEZcbiIsCiAJCQkJZHJ2LT5zdXNwZW5kKTsKLQkJCWdvdG8gRml4dXA7CiAJCX0KIAl9CiAKLQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQkvKgotCSAqIFRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBjb2RlIHdpdGggbGVnYWN5IFBNIHN1cHBvcnQuCi0JICovCi0JcGNpX3BtX3NldF91bmtub3duX3N0YXRlKHBjaV9kZXYpOwotCi0gRml4dXA6CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CiAKLQlyZXR1cm4gaTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfbGVnYWN5X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7Ci0JaW50IGkgPSAwOwogCiAJaWYgKGRydiAmJiBkcnYtPnN1c3BlbmRfbGF0ZSkgewotCQlpID0gZHJ2LT5zdXNwZW5kX2xhdGUocGNpX2Rldiwgc3RhdGUpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kX2xhdGUsIGkpOworCQlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gZHJ2LT5zdXNwZW5kX2xhdGUocGNpX2Rldiwgc3RhdGUpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kX2xhdGUsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKKwkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkJIlBDSSBQTTogRGV2aWNlIHN0YXRlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQkJZHJ2LT5zdXNwZW5kX2xhdGUpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9Ci0JcmV0dXJuIGk7CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKworCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9sZWdhY3lfcmVzdW1lX2Vhcmx5KHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTQyMyw2ICs0OTUsMjMgQEAKIAogLyogQXV4aWxpYXJ5IGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBuZXcgcG93ZXIgbWFuYWdlbWVudCBmcmFtZXdvcmsgKi8KIAorLyoqCisgKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQorICogQHBjaV9kZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQoreworCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShwY2lfZGV2LCBQQ0lfVU5LTk9XTik7CisKKwlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDApIHsKKwkJaW50IGVycm9yID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIHBjaV9kZXYtPnN0YXRlX3NhdmVkID8gcGNpX3Jlc3RvcmVfc3RhdGUocGNpX2RldikgOiAwOworfQorCiBzdGF0aWMgdm9pZCBwY2lfcG1fZGVmYXVsdF9yZXN1bWVfbm9pcnEoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CiAJcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHBjaV9kZXYpOwpAQCAtNDQzLDcgKzUzMiw2IEBACiAJLyogRGlzYWJsZSBub24tYnJpZGdlIGRldmljZXMgd2l0aG91dCBQTSBzdXBwb3J0ICovCiAJaWYgKCFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQogCQlwY2lfZGlzYWJsZV9lbmFibGVkX2RldmljZShwY2lfZGV2KTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIH0KIAogc3RhdGljIGJvb2wgcGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKQEAgLTQ5MywxMyArNTgxLDEzIEBACiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX1NVU1BFTkQpOwogCisJcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPSBmYWxzZTsKKwogCWlmICghcG0pIHsKIAkJcGNpX3BtX2RlZmF1bHRfc3VzcGVuZChwY2lfZGV2KTsKIAkJZ290byBGaXh1cDsKIAl9CiAKLQlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOwotCiAJaWYgKHBtLT5zdXNwZW5kKSB7CiAJCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOwogCQlpbnQgZXJyb3I7CkBAIC01MDksMjQgKzU5NywxNCBAQAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAKLQkJaWYgKHBjaV9kZXYtPnN0YXRlX3NhdmVkKQotCQkJZ290byBGaXh1cDsKLQotCQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAogCQkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgewogCQkJV0FSTl9PTkNFKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gcHJldiwKIAkJCQkiUENJIFBNOiBTdGF0ZSBvZiBkZXZpY2Ugbm90IHNhdmVkIGJ5ICVwRlxuIiwKIAkJCQlwbS0+c3VzcGVuZCk7Ci0JCQlnb3RvIEZpeHVwOwogCQl9CiAJfQogCi0JaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCkgewotCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQkJaWYgKCFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQotCQkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGNpX2Rldik7Ci0JfQotCiAgRml4dXA6CiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfc3VzcGVuZCwgcGNpX2Rldik7CiAKQEAgLTUzNiwyMSArNjE0LDQzIEBACiBzdGF0aWMgaW50IHBjaV9wbV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19TVVNQRU5EKTsKIAotCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKSB7Ci0JCWVycm9yID0gZHJ2LT5wbS0+c3VzcGVuZF9ub2lycShkZXYpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+c3VzcGVuZF9ub2lycSwgZXJyb3IpOworCWlmICghcG0pIHsKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJCXJldHVybiAwOwogCX0KIAotCWlmICghZXJyb3IpCi0JCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKwlpZiAocG0tPnN1c3BlbmRfbm9pcnEpIHsKKwkJcGNpX3Bvd2VyX3QgcHJldiA9IHBjaV9kZXYtPmN1cnJlbnRfc3RhdGU7CisJCWludCBlcnJvcjsKIAotCXJldHVybiBlcnJvcjsKKwkJZXJyb3IgPSBwbS0+c3VzcGVuZF9ub2lycShkZXYpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocG0tPnN1c3BlbmRfbm9pcnEsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJICAgICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX1VOS05PV04pIHsKKwkJCVdBUk5fT05DRShwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IHByZXYsCisJCQkJIlBDSSBQTTogU3RhdGUgb2YgZGV2aWNlIG5vdCBzYXZlZCBieSAlcEZcbiIsCisJCQkJcG0tPnN1c3BlbmRfbm9pcnEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKSB7CisJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCQlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCisJCQlwY2lfcHJlcGFyZV90b19zbGVlcChwY2lfZGV2KTsKKwl9CisKKwlwY2lfcG1fc2V0X3Vua25vd25fc3RhdGUocGNpX2Rldik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfcG1fcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTYxNywxMyArNzE3LDEzIEBACiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0ZSRUVaRSk7CiAKKwlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOworCiAJaWYgKCFwbSkgewogCQlwY2lfcG1fZGVmYXVsdF9zdXNwZW5kKHBjaV9kZXYpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOwotCiAJaWYgKHBtLT5mcmVlemUpIHsKIAkJaW50IGVycm9yOwogCkBAIC02MzMsOSArNzMzLDYgQEAKIAkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQotCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC02NDMsMjAgKzc0MCwyNSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfRlJFRVpFKTsKIAogCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5mcmVlemVfbm9pcnEpIHsKKwkJaW50IGVycm9yOworCiAJCWVycm9yID0gZHJ2LT5wbS0+ZnJlZXplX25vaXJxKGRldik7CiAJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5mcmVlemVfbm9pcnEsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmICghZXJyb3IpCi0JCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKwlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKQorCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIAotCXJldHVybiBlcnJvcjsKKwlwY2lfcG1fc2V0X3Vua25vd25fc3RhdGUocGNpX2Rldik7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2lfcG1fdGhhd19ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02OTksNDYgKzgwMSw1NiBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKLQlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CiAKKwlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOworCiAJaWYgKCFwbSkgewogCQlwY2lfcG1fZGVmYXVsdF9zdXNwZW5kKHBjaV9kZXYpOwogCQlnb3RvIEZpeHVwOwogCX0KIAotCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7Ci0KIAlpZiAocG0tPnBvd2Vyb2ZmKSB7CisJCWludCBlcnJvcjsKKwogCQllcnJvciA9IHBtLT5wb3dlcm9mZihkZXYpOwogCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQocG0tPnBvd2Vyb2ZmLCBlcnJvcik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKyBGaXh1cDoKKwlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOworCisJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQodG9fcGNpX2RldihkZXYpKSkKKwkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19ISUJFUk5BVEUpOworCisJaWYgKCFkcnYgfHwgIWRydi0+cG0pCisJCXJldHVybiAwOworCisJaWYgKGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKSB7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKGRldik7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5wb3dlcm9mZl9ub2lycSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCiAJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiAhcGNpX2lzX2JyaWRnZShwY2lfZGV2KSkKIAkJcGNpX3ByZXBhcmVfdG9fc2xlZXAocGNpX2Rldik7CiAKLSBGaXh1cDoKLQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBwY2lfcG1fcG93ZXJvZmZfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlpbnQgZXJyb3IgPSAwOwotCi0JaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQodG9fcGNpX2RldihkZXYpKSkKLQkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19ISUJFUk5BVEUpOwotCi0JaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKSB7Ci0JCWVycm9yID0gZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsKLQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxLCBlcnJvcik7Ci0JfQotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9wbV9yZXN0b3JlX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTg1MiwxMyArOTY0LDIzIEBACiAJLyogcmVnaXN0ZXIgd2l0aCBjb3JlICovCiAJZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBvdXQ7CiAKIAllcnJvciA9IHBjaV9jcmVhdGVfbmV3aWRfZmlsZShkcnYpOwogCWlmIChlcnJvcikKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwkJZ290byBvdXRfbmV3aWQ7CiAKKwllcnJvciA9IHBjaV9jcmVhdGVfcmVtb3ZlaWRfZmlsZShkcnYpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcmVtb3ZlaWQ7CitvdXQ6CiAJcmV0dXJuIGVycm9yOworCitvdXRfcmVtb3ZlaWQ6CisJcGNpX3JlbW92ZV9uZXdpZF9maWxlKGRydik7CitvdXRfbmV3aWQ6CisJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKKwlnb3RvIG91dDsKIH0KIAogLyoqCkBAIC04NzQsNiArOTk2LDcgQEAKIHZvaWQKIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQogeworCXBjaV9yZW1vdmVfcmVtb3ZlaWRfZmlsZShkcnYpOwogCXBjaV9yZW1vdmVfbmV3aWRfZmlsZShkcnYpOwogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiAJcGNpX2ZyZWVfZHluaWRzKGRydik7CkBAIC05NzMsNiArMTA5Niw3IEBACiAJLnJlbW92ZQkJPSBwY2lfZGV2aWNlX3JlbW92ZSwKIAkuc2h1dGRvd24JPSBwY2lfZGV2aWNlX3NodXRkb3duLAogCS5kZXZfYXR0cnMJPSBwY2lfZGV2X2F0dHJzLAorCS5idXNfYXR0cnMJPSBwY2lfYnVzX2F0dHJzLAogCS5wbQkJPSBQQ0lfUE1fT1BTX1BUUiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggZGZjNGUwZC4uZTlhODcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTIxOSw2ICsyMTksODMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVRworc3RhdGljIERFRklORV9NVVRFWChwY2lfcmVtb3ZlX3Jlc2Nhbl9tdXRleCk7CitzdGF0aWMgc3NpemVfdCBidXNfcmVzY2FuX3N0b3JlKHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjb25zdCBjaGFyICpidWYsCisJCQkJc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCBwY2lfYnVzICpiID0gTlVMTDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsKSB7CisJCW11dGV4X2xvY2soJnBjaV9yZW1vdmVfcmVzY2FuX211dGV4KTsKKwkJd2hpbGUgKChiID0gcGNpX2ZpbmRfbmV4dF9idXMoYikpICE9IE5VTEwpCisJCQlwY2lfcmVzY2FuX2J1cyhiKTsKKwkJbXV0ZXhfdW5sb2NrKCZwY2lfcmVtb3ZlX3Jlc2Nhbl9tdXRleCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RydWN0IGJ1c19hdHRyaWJ1dGUgcGNpX2J1c19hdHRyc1tdID0geworCV9fQVRUUihyZXNjYW4sIChTX0lXVVNSfFNfSVdHUlApLCBOVUxMLCBidXNfcmVzY2FuX3N0b3JlKSwKKwlfX0FUVFJfTlVMTAorfTsKKworc3RhdGljIHNzaXplX3QKK2Rldl9yZXNjYW5fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwpIHsKKwkJbXV0ZXhfbG9jaygmcGNpX3JlbW92ZV9yZXNjYW5fbXV0ZXgpOworCQlwY2lfcmVzY2FuX2J1cyhwZGV2LT5idXMpOworCQltdXRleF91bmxvY2soJnBjaV9yZW1vdmVfcmVzY2FuX211dGV4KTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCisJbXV0ZXhfbG9jaygmcGNpX3JlbW92ZV9yZXNjYW5fbXV0ZXgpOworCXBjaV9yZW1vdmVfYnVzX2RldmljZShwZGV2KTsKKwltdXRleF91bmxvY2soJnBjaV9yZW1vdmVfcmVzY2FuX211dGV4KTsKK30KKworc3RhdGljIHNzaXplX3QKK3JlbW92ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKKwkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwY2lfaXNfcm9vdF9idXMocGRldi0+YnVzKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEFuIGF0dHJpYnV0ZSBjYW5ub3QgYmUgdW5yZWdpc3RlcmVkIGJ5IG9uZSBvZiBpdHMgb3duIG1ldGhvZHMsCisJICogc28gd2UgaGF2ZSB0byB1c2UgdGhpcyByb3VuZGFib3V0IGFwcHJvYWNoLgorCSAqLworCWlmICh2YWwpCisJCXJldCA9IGRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhkZXYsIHJlbW92ZV9jYWxsYmFjayk7CisJaWYgKHJldCkKKwkJY291bnQgPSByZXQ7CisJcmV0dXJuIGNvdW50OworfQorI2VuZGlmCisKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjaV9kZXZfYXR0cnNbXSA9IHsKIAlfX0FUVFJfUk8ocmVzb3VyY2UpLAogCV9fQVRUUl9STyh2ZW5kb3IpLApAQCAtMjM3LDEwICszMTQsMjUgQEAKIAlfX0FUVFIoYnJva2VuX3Bhcml0eV9zdGF0dXMsKFNfSVJVR098U19JV1VTUiksCiAJCWJyb2tlbl9wYXJpdHlfc3RhdHVzX3Nob3csYnJva2VuX3Bhcml0eV9zdGF0dXNfc3RvcmUpLAogCV9fQVRUUihtc2lfYnVzLCAwNjQ0LCBtc2lfYnVzX3Nob3csIG1zaV9idXNfc3RvcmUpLAorI2lmZGVmIENPTkZJR19IT1RQTFVHCisJX19BVFRSKHJlbW92ZSwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIHJlbW92ZV9zdG9yZSksCisJX19BVFRSKHJlc2NhbiwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIGRldl9yZXNjYW5fc3RvcmUpLAorI2VuZGlmCiAJX19BVFRSX05VTEwsCiB9OwogCiBzdGF0aWMgc3NpemVfdAorYm9vdF92Z2Ffc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJISEocGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgJgorCQkgICBJT1JFU09VUkNFX1JPTV9TSEFET1cpKTsKK30KK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHZnYV9hdHRyID0gX19BVFRSX1JPKGJvb3RfdmdhKTsKKworc3RhdGljIHNzaXplX3QKIHBjaV9yZWFkX2NvbmZpZyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAogCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKQEAgLTQ5Myw2ICs1ODUsMTkgQEAKIH0KIAogLyoqCisgKiBwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyIC0gYWRqdXN0bWVudCBvZiBsZWdhY3kgZmlsZSBhdHRyaWJ1dGVzCisgKiBAYjogYnVzIHRvIGNyZWF0ZSBmaWxlcyB1bmRlcgorICogQG1tYXBfdHlwZTogSS9PIHBvcnQgb3IgbWVtb3J5CisgKgorICogU3R1YiBpbXBsZW1lbnRhdGlvbi4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgYXJjaCBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQgX193ZWFrCitwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyKHN0cnVjdCBwY2lfYnVzICpiLCBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfdHlwZSkKK3sKKwlyZXR1cm47Cit9CisKKy8qKgogICogcGNpX2NyZWF0ZV9sZWdhY3lfZmlsZXMgLSBjcmVhdGUgbGVnYWN5IEkvTyBwb3J0IGFuZCBtZW1vcnkgZmlsZXMKICAqIEBiOiBidXMgdG8gY3JlYXRlIGZpbGVzIHVuZGVyCiAgKgpAQCAtNTE4LDYgKzYyMyw3IEBACiAJYi0+bGVnYWN5X2lvLT5yZWFkID0gcGNpX3JlYWRfbGVnYWN5X2lvOwogCWItPmxlZ2FjeV9pby0+d3JpdGUgPSBwY2lfd3JpdGVfbGVnYWN5X2lvOwogCWItPmxlZ2FjeV9pby0+bW1hcCA9IHBjaV9tbWFwX2xlZ2FjeV9pbzsKKwlwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyKGIsIHBjaV9tbWFwX2lvKTsKIAllcnJvciA9IGRldmljZV9jcmVhdGVfYmluX2ZpbGUoJmItPmRldiwgYi0+bGVnYWN5X2lvKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gbGVnYWN5X2lvX2VycjsKQEAgLTUyOCw2ICs2MzQsNyBAQAogCWItPmxlZ2FjeV9tZW0tPnNpemUgPSAxMDI0KjEwMjQ7CiAJYi0+bGVnYWN5X21lbS0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CiAJYi0+bGVnYWN5X21lbS0+bW1hcCA9IHBjaV9tbWFwX2xlZ2FjeV9tZW07CisJcGNpX2FkanVzdF9sZWdhY3lfYXR0cihiLCBwY2lfbW1hcF9tZW0pOwogCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfbWVtKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gbGVnYWN5X21lbV9lcnI7CkBAIC03MTksOCArODI2LDggQEAKIAlyZXR1cm4gMDsKIH0KICNlbHNlIC8qICFIQVZFX1BDSV9NTUFQICovCi1zdGF0aWMgaW5saW5lIGludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcmVtb3ZlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuOyB9CitpbnQgX193ZWFrIHBjaV9jcmVhdGVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQordm9pZCBfX3dlYWsgcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybjsgfQogI2VuZGlmIC8qIEhBVkVfUENJX01NQVAgKi8KIAogLyoqCkBAIC04ODQsMTggKzk5MSwyNyBAQAogCQlwZGV2LT5yb21fYXR0ciA9IGF0dHI7CiAJfQogCisJaWYgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpIHsKKwkJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZ2Z2FfYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycl9yb21fZmlsZTsKKwl9CisKIAkvKiBhZGQgcGxhdGZvcm0tc3BlY2lmaWMgYXR0cmlidXRlcyAqLwogCXJldHZhbCA9IHBjaWJpb3NfYWRkX3BsYXRmb3JtX2VudHJpZXMocGRldik7CiAJaWYgKHJldHZhbCkKLQkJZ290byBlcnJfcm9tX2ZpbGU7CisJCWdvdG8gZXJyX3ZnYV9maWxlOwogCiAJLyogYWRkIHN5c2ZzIGVudHJpZXMgZm9yIHZhcmlvdXMgY2FwYWJpbGl0aWVzICovCiAJcmV0dmFsID0gcGNpX2NyZWF0ZV9jYXBhYmlsaXRpZXNfc3lzZnMocGRldik7CiAJaWYgKHJldHZhbCkKLQkJZ290byBlcnJfcm9tX2ZpbGU7CisJCWdvdG8gZXJyX3ZnYV9maWxlOwogCiAJcmV0dXJuIDA7CiAKK2Vycl92Z2FfZmlsZToKKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZ2Z2FfYXR0cik7CiBlcnJfcm9tX2ZpbGU6CiAJaWYgKHJvbV9zaXplKSB7CiAJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHBkZXYtPnJvbV9hdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggZGFiMzNhMi4uNDQ1ZmI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9wbV93YWtldXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CS8qIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKIHVuc2lnbmVkIGludCBwY2lfcG1fZDNfZGVsYXkgPSBQQ0lfUE1fRDNfV0FJVDsKQEAgLTQyNiw3ICs0MjgsNiBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICBnaXZlbiBQQ0kgZGV2aWNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KLSAqIEB3YWl0OiBJZiAndHJ1ZScsIHdhaXQgZm9yIHRoZSBkZXZpY2UgdG8gY2hhbmdlIGl0cyBwb3dlciBzdGF0ZQogICoKICAqIFJFVFVSTiBWQUxVRToKICAqIC1FSU5WQUwgaWYgdGhlIHJlcXVlc3RlZCBzdGF0ZSBpcyBpbnZhbGlkLgpAQCAtNDM1LDEyICs0MzYsMTUgQEAKICAqIDAgaWYgZGV2aWNlIGFscmVhZHkgaXMgaW4gdGhlIHJlcXVlc3RlZCBzdGF0ZS4KICAqIDAgaWYgZGV2aWNlJ3MgcG93ZXIgc3RhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNoYW5nZWQuCiAgKi8KLXN0YXRpYyBpbnQKLXBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlLCBib29sIHdhaXQpCitzdGF0aWMgaW50IHBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQogewogCXUxNiBwbWNzcjsKIAlib29sIG5lZWRfcmVzdG9yZSA9IGZhbHNlOwogCisJLyogQ2hlY2sgaWYgd2UncmUgYWxyZWFkeSB0aGVyZSAqLworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpCisJCXJldHVybiAwOworCiAJaWYgKCFkZXYtPnBtX2NhcCkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTQ1MSwxMCArNDU1LDcgQEAKIAkgKiBDYW4gZW50ZXIgRDAgZnJvbSBhbnkgc3RhdGUsIGJ1dCBpZiB3ZSBjYW4gb25seSBnbyBkZWVwZXIgCiAJICogdG8gc2xlZXAgaWYgd2UncmUgYWxyZWFkeSBpbiBhIGxvdyBwb3dlciBzdGF0ZQogCSAqLwotCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpIHsKLQkJLyogd2UncmUgYWxyZWFkeSB0aGVyZSAqLwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPD0gUENJX0QzY29sZAorCWlmIChzdGF0ZSAhPSBQQ0lfRDAgJiYgZGV2LT5jdXJyZW50X3N0YXRlIDw9IFBDSV9EM2NvbGQKIAkgICAgJiYgZGV2LT5jdXJyZW50X3N0YXRlID4gc3RhdGUpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJpbnZhbGlkIHBvd2VyIHRyYW5zaXRpb24gIgogCQkJIihmcm9tIHN0YXRlICVkIHRvICVkKVxuIiwgZGV2LT5jdXJyZW50X3N0YXRlLCBzdGF0ZSk7CkBAIC00ODEsMTAgKzQ4Miw4IEBACiAJCWJyZWFrOwogCWNhc2UgUENJX1VOS05PV046IC8qIEJvb3QtdXAgKi8KIAkJaWYgKChwbWNzciAmIFBDSV9QTV9DVFJMX1NUQVRFX01BU0spID09IFBDSV9EM2hvdAotCQkgJiYgIShwbWNzciAmIFBDSV9QTV9DVFJMX05PX1NPRlRfUkVTRVQpKSB7CisJCSAmJiAhKHBtY3NyICYgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVCkpCiAJCQluZWVkX3Jlc3RvcmUgPSB0cnVlOwotCQkJd2FpdCA9IHRydWU7Ci0JCX0KIAkJLyogRmFsbC10aHJvdWdoOiBmb3JjZSB0byBEMCAqLwogCWRlZmF1bHQ6CiAJCXBtY3NyID0gMDsKQEAgLTQ5NCw5ICs0OTMsNiBAQAogCS8qIGVudGVyIHNwZWNpZmllZCBzdGF0ZSAqLwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKIAotCWlmICghd2FpdCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBNYW5kYXRvcnkgcG93ZXIgbWFuYWdlbWVudCB0cmFuc2l0aW9uIGRlbGF5cyAqLwogCS8qIHNlZSBQQ0kgUE0gMS4xIDUuNi4xIHRhYmxlIDE4ICovCiAJaWYgKHN0YXRlID09IFBDSV9EM2hvdCB8fCBkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QzaG90KQpAQCAtNTIxLDcgKzUxNyw3IEBACiAJaWYgKG5lZWRfcmVzdG9yZSkKIAkJcGNpX3Jlc3RvcmVfYmFycyhkZXYpOwogCi0JaWYgKHdhaXQgJiYgZGV2LT5idXMtPnNlbGYpCisJaWYgKGRldi0+YnVzLT5zZWxmKQogCQlwY2llX2FzcG1fcG1fc3RhdGVfY2hhbmdlKGRldi0+YnVzLT5zZWxmKTsKIAogCXJldHVybiAwOwpAQCAtNTQ2LDYgKzU0Miw1MyBAQAogfQogCiAvKioKKyAqIHBjaV9wbGF0Zm9ybV9wb3dlcl90cmFuc2l0aW9uIC0gVXNlIHBsYXRmb3JtIHRvIGNoYW5nZSBkZXZpY2UgcG93ZXIgc3RhdGUKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBTdGF0ZSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgorICovCitzdGF0aWMgaW50IHBjaV9wbGF0Zm9ybV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQoreworCWludCBlcnJvcjsKKworCWlmIChwbGF0Zm9ybV9wY2lfcG93ZXJfbWFuYWdlYWJsZShkZXYpKSB7CisJCWVycm9yID0gcGxhdGZvcm1fcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKKwkJaWYgKCFlcnJvcikKKwkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIHN0YXRlKTsKKwl9IGVsc2UgeworCQllcnJvciA9IC1FTk9ERVY7CisJCS8qIEZhbGwgYmFjayB0byBQQ0lfRDAgaWYgbmF0aXZlIFBNIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgUENJX0QwKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogX19wY2lfc3RhcnRfcG93ZXJfdHJhbnNpdGlvbiAtIFN0YXJ0IHBvd2VyIHRyYW5zaXRpb24gb2YgYSBQQ0kgZGV2aWNlCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogU3RhdGUgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KKyAqLworc3RhdGljIHZvaWQgX19wY2lfc3RhcnRfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUgPT0gUENJX0QwKQorCQlwY2lfcGxhdGZvcm1fcG93ZXJfdHJhbnNpdGlvbihkZXYsIFBDSV9EMCk7Cit9CisKKy8qKgorICogX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbiAtIENvbXBsZXRlIHBvd2VyIHRyYW5zaXRpb24gb2YgYSBQQ0kgZGV2aWNlCisgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogU3RhdGUgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IGRldmljZSBkcml2ZXJzLgorICovCitpbnQgX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUgPiBQQ0lfRDAgPworCQkJcGNpX3BsYXRmb3JtX3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSkgOiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbik7CisKKy8qKgogICogcGNpX3NldF9wb3dlcl9zdGF0ZSAtIFNldCB0aGUgcG93ZXIgc3RhdGUgb2YgYSBQQ0kgZGV2aWNlCiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KQEAgLTU3NywzMCArNjIwLDIxIEBACiAJCSAqLwogCQlyZXR1cm4gMDsKIAotCWlmIChzdGF0ZSA9PSBQQ0lfRDAgJiYgcGxhdGZvcm1fcGNpX3Bvd2VyX21hbmFnZWFibGUoZGV2KSkgewotCQkvKgotCQkgKiBBbGxvdyB0aGUgcGxhdGZvcm0gdG8gY2hhbmdlIHRoZSBzdGF0ZSwgZm9yIGV4YW1wbGUgdmlhIEFDUEkKLQkJICogX1BSMCwgX1BTMCBhbmQgc29tZSBzdWNoLCBidXQgZG8gbm90IHRydXN0IGl0LgotCQkgKi8KLQkJaW50IHJldCA9IHBsYXRmb3JtX3BjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwotCQlpZiAoIXJldCkKLQkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIFBDSV9EMCk7Ci0JfQorCS8qIENoZWNrIGlmIHdlJ3JlIGFscmVhZHkgdGhlcmUgKi8KKwlpZiAoZGV2LT5jdXJyZW50X3N0YXRlID09IHN0YXRlKQorCQlyZXR1cm4gMDsKKworCV9fcGNpX3N0YXJ0X3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSk7CisKIAkvKiBUaGlzIGRldmljZSBpcyBxdWlya2VkIG5vdCB0byBiZSBwdXQgaW50byBEMywgc28KIAkgICBkb24ndCBwdXQgaXQgaW4gRDMgKi8KIAlpZiAoc3RhdGUgPT0gUENJX0QzaG90ICYmIChkZXYtPmRldl9mbGFncyAmIFBDSV9ERVZfRkxBR1NfTk9fRDMpKQogCQlyZXR1cm4gMDsKIAotCWVycm9yID0gcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUoZGV2LCBzdGF0ZSwgdHJ1ZSk7CisJZXJyb3IgPSBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKIAotCWlmIChzdGF0ZSA+IFBDSV9EMCAmJiBwbGF0Zm9ybV9wY2lfcG93ZXJfbWFuYWdlYWJsZShkZXYpKSB7Ci0JCS8qIEFsbG93IHRoZSBwbGF0Zm9ybSB0byBmaW5hbGl6ZSB0aGUgdHJhbnNpdGlvbiAqLwotCQlpbnQgcmV0ID0gcGxhdGZvcm1fcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlKTsKLQkJaWYgKCFyZXQpIHsKLQkJCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIHN0YXRlKTsKLQkJCWVycm9yID0gMDsKLQkJfQotCX0KKwlpZiAoIV9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24oZGV2LCBzdGF0ZSkpCisJCWVycm9yID0gMDsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTY0NSw2ICs2NzksOCBAQAogCiBFWFBPUlRfU1lNQk9MKHBjaV9jaG9vc2Vfc3RhdGUpOwogCisjZGVmaW5lIFBDSV9FWFBfU0FWRV9SRUdTCTcKKwogc3RhdGljIGludCBwY2lfc2F2ZV9wY2llX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJaW50IHBvcywgaSA9IDA7CkBAIC02NTcsNyArNjkzLDcgQEAKIAogCXNhdmVfc3RhdGUgPSBwY2lfZmluZF9zYXZlZF9jYXAoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CiAJaWYgKCFzYXZlX3N0YXRlKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiYnVmZmVyIG5vdCBmb3VuZCBpbiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJidWZmZXIgbm90IGZvdW5kIGluICVzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAljYXAgPSAodTE2ICopJnNhdmVfc3RhdGUtPmRhdGFbMF07CkBAIC02NjYsNiArNzAyLDkgQEAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmY2FwW2krK10pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9TTFRDVEwsICZjYXBbaSsrXSk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX1JUQ1RMLCAmY2FwW2krK10pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9ERVZDVEwyLCAmY2FwW2krK10pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwyLCAmY2FwW2krK10pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9TTFRDVEwyLCAmY2FwW2krK10pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02ODYsNiArNzI1LDkgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgY2FwW2krK10pOwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfU0xUQ1RMLCBjYXBbaSsrXSk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9SVENUTCwgY2FwW2krK10pOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWQ1RMMiwgY2FwW2krK10pOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMMiwgY2FwW2krK10pOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfU0xUQ1RMMiwgY2FwW2krK10pOwogfQogCiAKQEAgLTcwMCw3ICs3NDIsNyBAQAogCiAJc2F2ZV9zdGF0ZSA9IHBjaV9maW5kX3NhdmVkX2NhcChkZXYsIFBDSV9DQVBfSURfUENJWCk7CiAJaWYgKCFzYXZlX3N0YXRlKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiYnVmZmVyIG5vdCBmb3VuZCBpbiAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJidWZmZXIgbm90IGZvdW5kIGluICVzXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtNzczLDYgKzgxNSw3IEBACiAJfQogCXBjaV9yZXN0b3JlX3BjaXhfc3RhdGUoZGV2KTsKIAlwY2lfcmVzdG9yZV9tc2lfc3RhdGUoZGV2KTsKKwlwY2lfcmVzdG9yZV9pb3Zfc3RhdGUoZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIzMSw3ICsxMjc0LDcgQEAKIAlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKIAkJcmV0dXJuIC1FSU87CiAKLQlwY2lfZW5hYmxlX3dha2UoZGV2LCB0YXJnZXRfc3RhdGUsIHRydWUpOworCXBjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSk7CiAKIAllcnJvciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCB0YXJnZXRfc3RhdGUpOwogCkBAIC0xMzY5LDcgKzE0MTIsOCBAQAogewogCWludCBlcnJvcjsKIAotCWVycm9yID0gcGNpX2FkZF9jYXBfc2F2ZV9idWZmZXIoZGV2LCBQQ0lfQ0FQX0lEX0VYUCwgNCAqIHNpemVvZih1MTYpKTsKKwllcnJvciA9IHBjaV9hZGRfY2FwX3NhdmVfYnVmZmVyKGRldiwgUENJX0NBUF9JRF9FWFAsCisJCQkJCVBDSV9FWFBfU0FWRV9SRUdTICogc2l6ZW9mKHUxNikpOwogCWlmIChlcnJvcikKIAkJZGV2X2VycigmZGV2LT5kZXYsCiAJCQkidW5hYmxlIHRvIHByZWFsbG9jYXRlIFBDSSBFeHByZXNzIHNhdmUgYnVmZmVyXG4iKTsKQEAgLTEzODEsNTAgKzE0MjUsNiBAQAogfQogCiAvKioKLSAqIHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyAtIHJlc3RvcmUgc3RhbmRhcmQgY29uZmlnIHJlZ2lzdGVycyBvZiBQQ0kgZGV2aWNlCi0gKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBkZXZpY2UncyBjb25maWd1cmF0aW9uIHNwYWNlIGlzIGFjY2Vzc2libGUuCi0gKiBJZiB0aGUgZGV2aWNlIG5lZWRzIHRvIGJlIHBvd2VyZWQgdXAsIHRoZSBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIGl0IHRvCi0gKiBjaGFuZ2UgdGhlIHN0YXRlLgotICovCi1pbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcGNpX3Bvd2VyX3QgcHJldl9zdGF0ZTsKLQlpbnQgZXJyb3I7Ci0KLQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUoZGV2LCBQQ0lfRDApOwotCi0JcHJldl9zdGF0ZSA9IGRldi0+Y3VycmVudF9zdGF0ZTsKLQlpZiAocHJldl9zdGF0ZSA9PSBQQ0lfRDApCi0JCWdvdG8gUmVzdG9yZTsKLQotCWVycm9yID0gcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDAsIGZhbHNlKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCS8qCi0JICogVGhpcyBhc3N1bWVzIHRoYXQgd2Ugd29uJ3QgZ2V0IGEgYnVzIGluIEIyIG9yIEIzIGZyb20gdGhlIEJJT1MsIGJ1dAotCSAqIHdlJ3ZlIG1hZGUgdGhpcyBhc3N1bXB0aW9uIGZvcmV2ZXIgYW5kIGl0IGFwcGVhcnMgdG8gYmUgdW5pdmVyc2FsbHkKLQkgKiBzYXRpc2ZpZWQuCi0JICovCi0Jc3dpdGNoKHByZXZfc3RhdGUpIHsKLQljYXNlIFBDSV9EM2NvbGQ6Ci0JY2FzZSBQQ0lfRDNob3Q6Ci0JCW1kZWxheShwY2lfcG1fZDNfZGVsYXkpOwotCQlicmVhazsKLQljYXNlIFBDSV9EMjoKLQkJdWRlbGF5KFBDSV9QTV9EMl9ERUxBWSk7Ci0JCWJyZWFrOwotCX0KLQotCXBjaV91cGRhdGVfY3VycmVudF9zdGF0ZShkZXYsIFBDSV9EMCk7Ci0KLSBSZXN0b3JlOgotCXJldHVybiBkZXYtPnN0YXRlX3NhdmVkID8gcGNpX3Jlc3RvcmVfc3RhdGUoZGV2KSA6IDA7Ci19Ci0KLS8qKgogICogcGNpX2VuYWJsZV9hcmkgLSBlbmFibGUgQVJJIGZvcndhcmRpbmcgaWYgaGFyZHdhcmUgc3VwcG9ydCBpdAogICogQGRldjogdGhlIFBDSSBkZXZpY2UKICAqLwpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAKIAlpZiAoIXBpbikKIAkJcmV0dXJuIC0xOwogCi0Jd2hpbGUgKGRldi0+YnVzLT5zZWxmKSB7CisJd2hpbGUgKGRldi0+YnVzLT5wYXJlbnQpIHsKIAkJcGluID0gcGNpX3N3aXp6bGVfaW50ZXJydXB0X3BpbihkZXYsIHBpbik7CiAJCWRldiA9IGRldi0+YnVzLT5zZWxmOwogCX0KQEAgLTE1MDQsNyArMTUwNCw3IEBACiB7CiAJdTggcGluID0gKnBpbnA7CiAKLQl3aGlsZSAoZGV2LT5idXMtPnNlbGYpIHsKKwl3aGlsZSAoZGV2LT5idXMtPnBhcmVudCkgewogCQlwaW4gPSBwY2lfc3dpenpsZV9pbnRlcnJ1cHRfcGluKGRldiwgcGluKTsKIAkJZGV2ID0gZGV2LT5idXMtPnNlbGY7CiAJfQpAQCAtMjAyOCwxOCArMjAyOCwyNCBAQAogCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKIAogCS8qIFdhaXQgZm9yIFRyYW5zYWN0aW9uIFBlbmRpbmcgYml0IGNsZWFuICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBleHBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnN0YXR1cyk7CisJaWYgKCEoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpKQorCQlnb3RvIHRyYW5zYWN0aW9uX2RvbmU7CisKIAltc2xlZXAoMTAwKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWU1RBLCAmc3RhdHVzKTsKLQlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpIHsKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQnVzeSBhZnRlciAxMDBtcyB3aGlsZSB0cnlpbmcgdG8gcmVzZXQ7ICIKLQkJCSJzbGVlcGluZyBmb3IgMSBzZWNvbmRcbiIpOwotCQlzc2xlZXAoMSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZXhwcG9zICsgUENJX0VYUF9ERVZTVEEsICZzdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCi0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCi0JCQkJInByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOwotCX0KKwlpZiAoIShzdGF0dXMgJiBQQ0lfRVhQX0RFVlNUQV9UUlBORCkpCisJCWdvdG8gdHJhbnNhY3Rpb25fZG9uZTsKIAorCWRldl9pbmZvKCZkZXYtPmRldiwgIkJ1c3kgYWZ0ZXIgMTAwbXMgd2hpbGUgdHJ5aW5nIHRvIHJlc2V0OyAiCisJCQkic2xlZXBpbmcgZm9yIDEgc2Vjb25kXG4iKTsKKwlzc2xlZXAoMSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBleHBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnN0YXR1cyk7CisJaWYgKHN0YXR1cyAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCisJCQkJInByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOworCit0cmFuc2FjdGlvbl9kb25lOgogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWQ1RMLAogCQkJCVBDSV9FWFBfREVWQ1RMX0JDUl9GTFIpOwogCW1kZWxheSgxMDApOwpAQCAtMjA2NiwxOCArMjA3MiwyNCBAQAogCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKIAogCS8qIFdhaXQgZm9yIFRyYW5zYWN0aW9uIFBlbmRpbmcgYml0IGNsZWFuICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoIShzdGF0dXMgJiBQQ0lfQUZfU1RBVFVTX1RQKSkKKwkJZ290byB0cmFuc2FjdGlvbl9kb25lOworCiAJbXNsZWVwKDEwMCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKLQlpZiAoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkgewotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCdXN5IGFmdGVyIDEwMG1zIHdoaWxlIHRyeWluZyB0byIKLQkJCQkiIHJlc2V0OyBzbGVlcGluZyBmb3IgMSBzZWNvbmRcbiIpOwotCQlzc2xlZXAoMSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwKLQkJCQljYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKLQkJaWYgKHN0YXR1cyAmIFBDSV9BRl9TVEFUVVNfVFApCi0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCi0JCQkJCSJwcm9jZWVkaW5nIHdpdGggcmVzZXQgYW55d2F5XG4iKTsKLQl9CisJaWYgKCEoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkpCisJCWdvdG8gdHJhbnNhY3Rpb25fZG9uZTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkJ1c3kgYWZ0ZXIgMTAwbXMgd2hpbGUgdHJ5aW5nIHRvIgorCQkJIiByZXNldDsgc2xlZXBpbmcgZm9yIDEgc2Vjb25kXG4iKTsKKwlzc2xlZXAoMSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiU3RpbGwgYnVzeSBhZnRlciAxczsgIgorCQkJCSJwcm9jZWVkaW5nIHdpdGggcmVzZXQgYW55d2F5XG4iKTsKKwordHJhbnNhY3Rpb25fZG9uZToKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfQ1RSTCwgUENJX0FGX0NUUkxfRkxSKTsKIAltZGVsYXkoMTAwKTsKIApAQCAtMjM0NiwxOCArMjM1OCwxNDAgQEAKICAqLwogaW50IHBjaV9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLCBlbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSkKIHsKKwlpbnQgcmVnOworCiAJaWYgKHJlc25vIDwgUENJX1JPTV9SRVNPVVJDRSkgewogCQkqdHlwZSA9IHBjaV9iYXJfdW5rbm93bjsKIAkJcmV0dXJuIFBDSV9CQVNFX0FERFJFU1NfMCArIDQgKiByZXNubzsKIAl9IGVsc2UgaWYgKHJlc25vID09IFBDSV9ST01fUkVTT1VSQ0UpIHsKIAkJKnR5cGUgPSBwY2lfYmFyX21lbTMyOwogCQlyZXR1cm4gZGV2LT5yb21fYmFzZV9yZWc7CisJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CisJCS8qIGRldmljZSBzcGVjaWZpYyByZXNvdXJjZSAqLworCQlyZWcgPSBwY2lfaW92X3Jlc291cmNlX2JhcihkZXYsIHJlc25vLCB0eXBlKTsKKwkJaWYgKHJlZykKKwkJCXJldHVybiByZWc7CiAJfQogCiAJZGV2X2VycigmZGV2LT5kZXYsICJCQVI6IGludmFsaWQgcmVzb3VyY2UgIyVkXG4iLCByZXNubyk7CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgUkVTT1VSQ0VfQUxJR05NRU5UX1BBUkFNX1NJWkUgQ09NTUFORF9MSU5FX1NJWkUKK3N0YXRpYyBjaGFyIHJlc291cmNlX2FsaWdubWVudF9wYXJhbVtSRVNPVVJDRV9BTElHTk1FTlRfUEFSQU1fU0laRV0gPSB7MH07CitzcGlubG9ja190IHJlc291cmNlX2FsaWdubWVudF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisvKioKKyAqIHBjaV9zcGVjaWZpZWRfcmVzb3VyY2VfYWxpZ25tZW50IC0gZ2V0IHJlc291cmNlIGFsaWdubWVudCBzcGVjaWZpZWQgYnkgdXNlci4KKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHRvIGdldAorICoKKyAqIFJFVFVSTlM6IFJlc291cmNlIGFsaWdubWVudCBpZiBpdCBpcyBzcGVjaWZpZWQuCisgKiAgICAgICAgICBaZXJvIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgKi8KK3Jlc291cmNlX3NpemVfdCBwY2lfc3BlY2lmaWVkX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWxpZ25fb3JkZXIsIGNvdW50OworCXJlc291cmNlX3NpemVfdCBhbGlnbiA9IDA7CisJY2hhciAqcDsKKworCXNwaW5fbG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXAgPSByZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW07CisJd2hpbGUgKCpwKSB7CisJCWNvdW50ID0gMDsKKwkJaWYgKHNzY2FuZihwLCAiJWQlbiIsICZhbGlnbl9vcmRlciwgJmNvdW50KSA9PSAxICYmCisJCQkJCQkJcFtjb3VudF0gPT0gJ0AnKSB7CisJCQlwICs9IGNvdW50ICsgMTsKKwkJfSBlbHNlIHsKKwkJCWFsaWduX29yZGVyID0gLTE7CisJCX0KKwkJaWYgKHNzY2FuZihwLCAiJXg6JXg6JXguJXglbiIsCisJCQkmc2VnLCAmYnVzLCAmc2xvdCwgJmZ1bmMsICZjb3VudCkgIT0gNCkgeworCQkJc2VnID0gMDsKKwkJCWlmIChzc2NhbmYocCwgIiV4OiV4LiV4JW4iLAorCQkJCQkmYnVzLCAmc2xvdCwgJmZ1bmMsICZjb3VudCkgIT0gMykgeworCQkJCS8qIEludmFsaWQgZm9ybWF0ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IENhbid0IHBhcnNlIHJlc291cmNlX2FsaWdubWVudCBwYXJhbWV0ZXI6ICVzXG4iLAorCQkJCQlwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwICs9IGNvdW50OworCQlpZiAoc2VnID09IHBjaV9kb21haW5fbnIoZGV2LT5idXMpICYmCisJCQlidXMgPT0gZGV2LT5idXMtPm51bWJlciAmJgorCQkJc2xvdCA9PSBQQ0lfU0xPVChkZXYtPmRldmZuKSAmJgorCQkJZnVuYyA9PSBQQ0lfRlVOQyhkZXYtPmRldmZuKSkgeworCQkJaWYgKGFsaWduX29yZGVyID09IC0xKSB7CisJCQkJYWxpZ24gPSBQQUdFX1NJWkU7CisJCQl9IGVsc2UgeworCQkJCWFsaWduID0gMSA8PCBhbGlnbl9vcmRlcjsKKwkJCX0KKwkJCS8qIEZvdW5kICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoKnAgIT0gJzsnICYmICpwICE9ICcsJykgeworCQkJLyogRW5kIG9mIHBhcmFtIG9yIGludmFsaWQgZm9ybWF0ICovCisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCXNwaW5fdW5sb2NrKCZyZXNvdXJjZV9hbGlnbm1lbnRfbG9jayk7CisJcmV0dXJuIGFsaWduOworfQorCisvKioKKyAqIHBjaV9pc19yZWFzc2lnbmRldiAtIGNoZWNrIGlmIHNwZWNpZmllZCBQQ0kgaXMgdGFyZ2V0IGRldmljZSB0byByZWFzc2lnbgorICogQGRldjogdGhlIFBDSSBkZXZpY2UgdG8gY2hlY2sKKyAqCisgKiBSRVRVUk5TOiBub24temVybyBmb3IgUENJIGRldmljZSBpcyBhIHRhcmdldCBkZXZpY2UgdG8gcmVhc3NpZ24sCisgKiAgICAgICAgICBvciB6ZXJvIGlzIG5vdC4KKyAqLworaW50IHBjaV9pc19yZWFzc2lnbmRldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAocGNpX3NwZWNpZmllZF9yZXNvdXJjZV9hbGlnbm1lbnQoZGV2KSAhPSAwKTsKK30KKworc3NpemVfdCBwY2lfc2V0X3Jlc291cmNlX2FsaWdubWVudF9wYXJhbShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoY291bnQgPiBSRVNPVVJDRV9BTElHTk1FTlRfUEFSQU1fU0laRSAtIDEpCisJCWNvdW50ID0gUkVTT1VSQ0VfQUxJR05NRU5UX1BBUkFNX1NJWkUgLSAxOworCXNwaW5fbG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXN0cm5jcHkocmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtLCBidWYsIGNvdW50KTsKKwlyZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW1bY291bnRdID0gJ1wwJzsKKwlzcGluX3VubG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3NpemVfdCBwY2lfZ2V0X3Jlc291cmNlX2FsaWdubWVudF9wYXJhbShjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBjb3VudDsKKwlzcGluX2xvY2soJnJlc291cmNlX2FsaWdubWVudF9sb2NrKTsKKwljb3VudCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiVzIiwgcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKTsKKwlzcGluX3VubG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zaG93KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHBjaV9nZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKGJ1ZiwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zdG9yZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBjaV9zZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKGJ1ZiwgY291bnQpOworfQorCitCVVNfQVRUUihyZXNvdXJjZV9hbGlnbm1lbnQsIDA2NDQsIHBjaV9yZXNvdXJjZV9hbGlnbm1lbnRfc2hvdywKKwkJCQkJcGNpX3Jlc291cmNlX2FsaWdubWVudF9zdG9yZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9yZXNvdXJjZV9hbGlnbm1lbnRfc3lzZnNfaW5pdCh2b2lkKQoreworCXJldHVybiBidXNfY3JlYXRlX2ZpbGUoJnBjaV9idXNfdHlwZSwKKwkJCQkJJmJ1c19hdHRyX3Jlc291cmNlX2FsaWdubWVudCk7Cit9CisKK2xhdGVfaW5pdGNhbGwocGNpX3Jlc291cmNlX2FsaWdubWVudF9zeXNmc19pbml0KTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9ub19kb21haW5zKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCkBAIC0yNDA2LDYgKzI1NDAsOSBAQAogCQkJCXBjaV9jYXJkYnVzX2lvX3NpemUgPSBtZW1wYXJzZShzdHIgKyA5LCAmc3RyKTsKIAkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiY2JtZW1zaXplPSIsIDEwKSkgewogCQkJCXBjaV9jYXJkYnVzX21lbV9zaXplID0gbWVtcGFyc2Uoc3RyICsgMTAsICZzdHIpOworCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJyZXNvdXJjZV9hbGlnbm1lbnQ9IiwgMTkpKSB7CisJCQkJcGNpX3NldF9yZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW0oc3RyICsgMTksCisJCQkJCQkJc3RybGVuKHN0ciArIDE5KSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmtub3duIG9wdGlvbiBgJXMnXG4iLAogCQkJCQkJc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMDdjMGFhNS4uZDAzZjZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIERSSVZFUlNfUENJX0gKICNkZWZpbmUgRFJJVkVSU19QQ0lfSAogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKICNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCTI1NgogI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFCTQwOTYKIApAQCAtNDksNyArNTEsNiBAQAogZXh0ZXJuIHZvaWQgcGNpX3BtX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9wY2lfd2FrZXVwX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCBwY2lfYWxsb2NhdGVfY2FwX3NhdmVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLWV4dGVybiBpbnQgcGNpX3Jlc3RvcmVfc3RhbmRhcmRfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2lzX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKQEAgLTEzNiw2ICsxMzcsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwY2lfZGV2X2F0dHJzW107CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfY3B1YWZmaW5pdHk7CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfY3B1bGlzdGFmZmluaXR5OworI2lmZGVmIENPTkZJR19IT1RQTFVHCitleHRlcm4gc3RydWN0IGJ1c19hdHRyaWJ1dGUgcGNpX2J1c19hdHRyc1tdOworI2Vsc2UKKyNkZWZpbmUgcGNpX2J1c19hdHRycwlOVUxMCisjZW5kaWYKKwogCiAvKioKICAqIHBjaV9tYXRjaF9vbmVfZGV2aWNlIC0gVGVsbCBpZiBhIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGhhcyBhIG1hdGNoaW5nCkBAIC0xNzgsNiArMTg1LDcgQEAKIAlwY2lfYmFyX21lbTY0LAkJLyogQSA2NC1iaXQgbWVtb3J5IEJBUiAqLwogfTsKIAorZXh0ZXJuIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBfX3BjaV9yZWFkX2Jhc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSBwY2lfYmFyX3R5cGUgdHlwZSwKIAkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IHJlZyk7CiBleHRlcm4gaW50IHBjaV9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLApAQCAtMTk1LDQgKzIwMyw2MCBAQAogCXJldHVybiBidXMtPnNlbGYgJiYgYnVzLT5zZWxmLT5hcmlfZW5hYmxlZDsKIH0KIAorI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCitleHRlcm4gaW50IHBjaV9pc19yZWFzc2lnbmRldihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3Jlc291cmNlX3NpemVfdCBwY2lfc3BlY2lmaWVkX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHBjaV9kaXNhYmxlX2JyaWRnZV93aW5kb3coc3RydWN0IHBjaV9kZXYgKmRldik7CisjZW5kaWYKKworLyogU2luZ2xlIFJvb3QgSS9PIFZpcnR1YWxpemF0aW9uICovCitzdHJ1Y3QgcGNpX3NyaW92IHsKKwlpbnQgcG9zOwkJLyogY2FwYWJpbGl0eSBwb3NpdGlvbiAqLworCWludCBucmVzOwkJLyogbnVtYmVyIG9mIHJlc291cmNlcyAqLworCXUzMiBjYXA7CQkvKiBTUi1JT1YgQ2FwYWJpbGl0aWVzICovCisJdTE2IGN0cmw7CQkvKiBTUi1JT1YgQ29udHJvbCAqLworCXUxNiB0b3RhbDsJCS8qIHRvdGFsIFZGcyBhc3NvY2lhdGVkIHdpdGggdGhlIFBGICovCisJdTE2IGluaXRpYWw7CQkvKiBpbml0aWFsIFZGcyBhc3NvY2lhdGVkIHdpdGggdGhlIFBGICovCisJdTE2IG5yX3ZpcnRmbjsJCS8qIG51bWJlciBvZiBWRnMgYXZhaWxhYmxlICovCisJdTE2IG9mZnNldDsJCS8qIGZpcnN0IFZGIFJvdXRpbmcgSUQgb2Zmc2V0ICovCisJdTE2IHN0cmlkZTsJCS8qIGZvbGxvd2luZyBWRiBzdHJpZGUgKi8KKwl1MzIgcGdzejsJCS8qIHBhZ2Ugc2l6ZSBmb3IgQkFSIGFsaWdubWVudCAqLworCXU4IGxpbms7CQkvKiBGdW5jdGlvbiBEZXBlbmRlbmN5IExpbmsgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OwkvKiBsb3dlc3QgbnVtYmVyZWQgUEYgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqc2VsZjsJLyogdGhpcyBQRiAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkvKiBsb2NrIGZvciBWRiBidXMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXRhc2s7IC8qIFZGIE1pZ3JhdGlvbiB0YXNrICovCisJdTggX19pb21lbSAqbXN0YXRlOwkvKiBWRiBNaWdyYXRpb24gU3RhdGUgQXJyYXkgKi8KK307CisKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorZXh0ZXJuIGludCBwY2lfaW92X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gdm9pZCBwY2lfaW92X3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywKKwkJCQllbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSk7CitleHRlcm4gdm9pZCBwY2lfcmVzdG9yZV9pb3Zfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9pb3ZfYnVzX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9pb3ZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAtRU5PREVWOworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9pb3ZfcmVsZWFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBwY2lfaW92X3Jlc291cmNlX2JhcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sCisJCQkJICAgICAgIGVudW0gcGNpX2Jhcl90eXBlICp0eXBlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZXN0b3JlX2lvdl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2lvdl9idXNfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCiAjZW5kaWYgLyogRFJJVkVSU19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwppbmRleCBlMzkwNzA3Li4zMmFkZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMzgsMzAgKzM4LDEzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZXJfcHJvYmUgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAotCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQgKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFlcl9wcm9iZSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYWVyX3JlbW92ZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFlcl9zdXNwZW5kKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17cmV0dXJuIDA7fQotc3RhdGljIGludCBhZXJfcmVzdW1lKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KSB7cmV0dXJuIDA7fQogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYWVyX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBlcnJvcik7CiBzdGF0aWMgdm9pZCBhZXJfZXJyb3JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYWVyX3Jvb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldik7CiAKLS8qCi0gKiBQQ0kgRXhwcmVzcyBidXMncyBBRVIgUm9vdCBzZXJ2aWNlIGRyaXZlciBkYXRhIHN0cnVjdHVyZQotICovCi1zdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkIGFlcl9pZFtdID0gewotCXsKLQkudmVuZG9yIAk9IFBDSV9BTllfSUQsCi0JLmRldmljZSAJPSBQQ0lfQU5ZX0lELAotCS5wb3J0X3R5cGUgCT0gUENJRV9SQ19QT1JULAotCS5zZXJ2aWNlX3R5cGUgCT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAotCX0sCi0JeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKLQogc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgYWVyX2Vycm9yX2hhbmRsZXJzID0gewogCS5lcnJvcl9kZXRlY3RlZCA9IGFlcl9lcnJvcl9kZXRlY3RlZCwKIAkucmVzdW1lID0gYWVyX2Vycm9yX3Jlc3VtZSwKQEAgLTY5LDE0ICs1MiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBhZXJkcml2ZXIgPSB7CiAJLm5hbWUJCT0gImFlciIsCi0JLmlkX3RhYmxlCT0gJmFlcl9pZFswXSwKKwkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUiwKIAogCS5wcm9iZQkJPSBhZXJfcHJvYmUsCiAJLnJlbW92ZQkJPSBhZXJfcmVtb3ZlLAogCi0JLnN1c3BlbmQJPSBhZXJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFlcl9yZXN1bWUsCi0KIAkuZXJyX2hhbmRsZXIJPSAmYWVyX2Vycm9yX2hhbmRsZXJzLAogCiAJLnJlc2V0X2xpbmsJPSBhZXJfcm9vdF9yZXNldCwKQEAgLTIwNyw4ICsxODgsNyBAQAogICoKICAqIEludm9rZWQgd2hlbiBQQ0kgRXhwcmVzcyBidXMgbG9hZHMgQUVSIHNlcnZpY2UgZHJpdmVyLgogICoqLwotc3RhdGljIGludCBfX2RldmluaXQgYWVyX3Byb2JlIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwKLQkJCQljb25zdCBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgKmlkICkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFlcl9wcm9iZSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgYWVyX3JwYyAqcnBjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMKaW5kZXggZWJjZTI2Yy4uOGVkYjJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAloYW5kbGUgPSBhY3BpX2ZpbmRfcm9vdF9icmlkZ2VfaGFuZGxlKHBkZXYpOwogCWlmIChoYW5kbGUpIHsKLQkJc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsCisJCXN0YXR1cyA9IGFjcGlfcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsCiAJCQkJCU9TQ19QQ0lfRVhQUkVTU19BRVJfQ09OVFJPTCB8CiAJCQkJCU9TQ19QQ0lfRVhQUkVTU19DQVBfU1RSVUNUVVJFX0NPTlRST0wpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCmluZGV4IDM4MjU3NTAuLjMwNzQ1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwpAQCAtMzUxLDIxICszNTEsMjEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKnNlcnZpY2VfZHJpdmVyOwotCXN0cnVjdCBwY2llX2RldmljZSAqcGNpZV9kZXY7CiAJc3RydWN0IGZpbmRfYWVyX3NlcnZpY2VfZGF0YSAqcmVzdWx0OwogCiAJcmVzdWx0ID0gKHN0cnVjdCBmaW5kX2Flcl9zZXJ2aWNlX2RhdGEgKikgZGF0YTsKIAogCWlmIChkZXZpY2UtPmJ1cyA9PSAmcGNpZV9wb3J0X2J1c190eXBlKSB7Ci0JCXBjaWVfZGV2ID0gdG9fcGNpZV9kZXZpY2UoZGV2aWNlKTsKLQkJaWYgKHBjaWVfZGV2LT5pZC5wb3J0X3R5cGUgPT0gUENJRV9TV19ET1dOU1RSRUFNX1BPUlQpCisJCXN0cnVjdCBwY2llX3BvcnRfZGF0YSAqcG9ydF9kYXRhOworCisJCXBvcnRfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YSh0b19wY2llX2RldmljZShkZXZpY2UpLT5wb3J0KTsKKwkJaWYgKHBvcnRfZGF0YS0+cG9ydF90eXBlID09IFBDSUVfU1dfRE9XTlNUUkVBTV9QT1JUKQogCQkJcmVzdWx0LT5pc19kb3duc3RyZWFtID0gMTsKIAogCQlkcml2ZXIgPSBkZXZpY2UtPmRyaXZlcjsKIAkJaWYgKGRyaXZlcikgewogCQkJc2VydmljZV9kcml2ZXIgPSB0b19zZXJ2aWNlX2RyaXZlcihkcml2ZXIpOwotCQkJaWYgKHNlcnZpY2VfZHJpdmVyLT5pZF90YWJsZS0+c2VydmljZV90eXBlID09Ci0JCQkJCVBDSUVfUE9SVF9TRVJWSUNFX0FFUikgeworCQkJaWYgKHNlcnZpY2VfZHJpdmVyLT5zZXJ2aWNlID09IFBDSUVfUE9SVF9TRVJWSUNFX0FFUikgewogCQkJCXJlc3VsdC0+YWVyX2RyaXZlciA9IHNlcnZpY2VfZHJpdmVyOwogCQkJCXJldHVybiAxOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmggYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAppbmRleCAyNTI5ZjNmLi4xN2FkNTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaAorKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaApAQCAtMjUsMTkgKzI1LDIxIEBACiAjZGVmaW5lIFBDSUVfQ0FQQUJJTElUSUVTX1JFRwkJMHgyCiAjZGVmaW5lIFBDSUVfU0xPVF9DQVBBQklMSVRJRVNfUkVHCTB4MTQKICNkZWZpbmUgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUwk0CisjZGVmaW5lIFBDSUVfUE9SVF9NU0lfVkVDVE9SX01BU0sJMHgxZgorLyoKKyAqIEFjY29yZGluZyB0byB0aGUgUENJIEV4cHJlc3MgQmFzZSBTcGVjaWZpY2F0aW9uIDIuMCwgdGhlIGluZGljZXMgb2YgdGhlIE1TSS1YCisgKiB0YWJsZSBlbnRpcmVzIHVzZWQgYnkgcG9ydCBzZXJ2aWNlcyBtdXN0IG5vdCBleGNlZWQgMzEKKyAqLworI2RlZmluZSBQQ0lFX1BPUlRfTUFYX01TSVhfRU5UUklFUwkzMgogCiAjZGVmaW5lIGdldF9kZXNjcmlwdG9yX2lkKHR5cGUsIHNlcnZpY2UpICgoKHR5cGUgLSA0KSA8PCA0KSB8IHNlcnZpY2UpCiAKLXN0cnVjdCBwY2llX3BvcnRfZGV2aWNlX2V4dCB7Ci0JaW50IGludGVycnVwdF9tb2RlOwkvKiBbMDpJTlR4IHwgMTpNU0kgfCAyOk1TSS1YXSAqLwotfTsKLQogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBwY2llX3BvcnRfYnVzX3R5cGU7CiBleHRlcm4gaW50IHBjaWVfcG9ydF9kZXZpY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gaW50IHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjaWZkZWYgQ09ORklHX1BNCi1leHRlcm4gaW50IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotZXh0ZXJuIGludCBwY2llX3BvcnRfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CiAjZW5kaWYKIGV4dGVybiB2b2lkIHBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBfX211c3RfY2hlY2sgcGNpZV9wb3J0X2J1c19yZWdpc3Rlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9idXMuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9idXMuYwppbmRleCBlZWM4OWI3Li5lZjNhNGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2J1cy5jCkBAIC0yNiwyMCArMjYsMjIgQEAKIHN0YXRpYyBpbnQgcGNpZV9wb3J0X2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CiAJc3RydWN0IHBjaWVfZGV2aWNlICpwY2llZGV2OworCXN0cnVjdCBwY2llX3BvcnRfZGF0YSAqcG9ydF9kYXRhOwogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKmRyaXZlcjsKIAogCWlmIChkcnYtPmJ1cyAhPSAmcGNpZV9wb3J0X2J1c190eXBlIHx8IGRldi0+YnVzICE9ICZwY2llX3BvcnRfYnVzX3R5cGUpCiAJCXJldHVybiAwOwotCQorCiAJcGNpZWRldiA9IHRvX3BjaWVfZGV2aWNlKGRldik7CiAJZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZHJ2KTsKLQlpZiAoICAgKGRyaXZlci0+aWRfdGFibGUtPnZlbmRvciAhPSBQQ0lfQU5ZX0lEICYmIAotCQlkcml2ZXItPmlkX3RhYmxlLT52ZW5kb3IgIT0gcGNpZWRldi0+aWQudmVuZG9yKSB8fAotCSAgICAgICAoZHJpdmVyLT5pZF90YWJsZS0+ZGV2aWNlICE9IFBDSV9BTllfSUQgJiYKLQkJZHJpdmVyLT5pZF90YWJsZS0+ZGV2aWNlICE9IHBjaWVkZXYtPmlkLmRldmljZSkgfHwJCi0JICAgICAgIChkcml2ZXItPmlkX3RhYmxlLT5wb3J0X3R5cGUgIT0gUENJRV9BTllfUE9SVCAmJgotCQlkcml2ZXItPmlkX3RhYmxlLT5wb3J0X3R5cGUgIT0gcGNpZWRldi0+aWQucG9ydF90eXBlKSB8fAotCQlkcml2ZXItPmlkX3RhYmxlLT5zZXJ2aWNlX3R5cGUgIT0gcGNpZWRldi0+aWQuc2VydmljZV90eXBlICkKKworCWlmIChkcml2ZXItPnNlcnZpY2UgIT0gcGNpZWRldi0+c2VydmljZSkKKwkJcmV0dXJuIDA7CisKKwlwb3J0X2RhdGEgPSBwY2lfZ2V0X2RydmRhdGEocGNpZWRldi0+cG9ydCk7CisKKwlpZiAoZHJpdmVyLT5wb3J0X3R5cGUgIT0gUENJRV9BTllfUE9SVAorCSAgICAgJiYgZHJpdmVyLT5wb3J0X3R5cGUgIT0gcG9ydF9kYXRhLT5wb3J0X3R5cGUpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwppbmRleCA4YjNmOGMxLi5lMzk5ODI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKQEAgLTE1LDEwICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAKKyNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJwb3J0ZHJ2LmgiCiAKLWV4dGVybiBpbnQgcGNpZV9tY2hfcXVpcms7CS8qIE1TSS1xdWlyayBJbmRpY2F0b3IgKi8KLQogLyoqCiAgKiByZWxlYXNlX3BjaWVfZGV2aWNlIC0gZnJlZSBQQ0kgRXhwcmVzcyBwb3J0IHNlcnZpY2UgZGV2aWNlIHN0cnVjdHVyZQogICogQGRldjogUG9ydCBzZXJ2aWNlIGRldmljZSB0byByZWxlYXNlCkBAIC0zMSwyNiArMzAsMTUwIEBACiAJa2ZyZWUodG9fcGNpZV9kZXZpY2UoZGV2KSk7CQkJCiB9CiAKLXN0YXRpYyBpbnQgaXNfbXNpX3F1aXJrZWQoc3RydWN0IHBjaV9kZXYgKmRldikKKy8qKgorICogcGNpZV9wb3J0X21zaXhfYWRkX2VudHJ5IC0gYWRkIGVudHJ5IHRvIGdpdmVuIGFycmF5IG9mIE1TSS1YIGVudHJpZXMKKyAqIEBlbnRyaWVzOiBBcnJheSBvZiBNU0ktWCBlbnRyaWVzCisgKiBAbmV3X2VudHJ5OiBJbmRleCBvZiB0aGUgZW50cnkgdG8gYWRkIHRvIHRoZSBhcnJheQorICogQG5yX2VudHJpZXM6IE51bWJlciBvZiBlbnRyaWVzIGFsZWFkeSBpbiB0aGUgYXJyYXkKKyAqCisgKiBSZXR1cm4gdmFsdWU6IFBvc2l0aW9uIG9mIHRoZSBhZGRlZCBlbnRyeSBpbiB0aGUgYXJyYXkKKyAqLworc3RhdGljIGludCBwY2llX3BvcnRfbXNpeF9hZGRfZW50cnkoCisJc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXMsIGludCBuZXdfZW50cnksIGludCBucl9lbnRyaWVzKQogewotCWludCBwb3J0X3R5cGUsIHF1aXJrID0gMDsKLQl1MTYgcmVnMTY7CisJaW50IGo7CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIAotCQlwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApICsgCi0JCVBDSUVfQ0FQQUJJTElUSUVTX1JFRywgJnJlZzE2KTsKLQlwb3J0X3R5cGUgPSAocmVnMTYgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSzsKLQlzd2l0Y2gocG9ydF90eXBlKSB7Ci0JY2FzZSBQQ0lFX1JDX1BPUlQ6Ci0JCWlmIChwY2llX21jaF9xdWlyayA9PSAxKQotCQkJcXVpcmsgPSAxOwotCQlicmVhazsKLQljYXNlIFBDSUVfU1dfVVBTVFJFQU1fUE9SVDoKLQljYXNlIFBDSUVfU1dfRE9XTlNUUkVBTV9QT1JUOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwkKKwlmb3IgKGogPSAwOyBqIDwgbnJfZW50cmllczsgaisrKQorCQlpZiAoZW50cmllc1tqXS5lbnRyeSA9PSBuZXdfZW50cnkpCisJCQlyZXR1cm4gajsKKworCWVudHJpZXNbal0uZW50cnkgPSBuZXdfZW50cnk7CisJcmV0dXJuIGo7Cit9CisKKy8qKgorICogcGNpZV9wb3J0X2VuYWJsZV9tc2l4IC0gdHJ5IHRvIHNldCB1cCBNU0ktWCBhcyBpbnRlcnJ1cHQgbW9kZSBmb3IgZ2l2ZW4gcG9ydAorICogQGRldjogUENJIEV4cHJlc3MgcG9ydCB0byBoYW5kbGUKKyAqIEB2ZWN0b3JzOiBBcnJheSBvZiBpbnRlcnJ1cHQgdmVjdG9ycyB0byBwb3B1bGF0ZQorICogQG1hc2s6IEJpdG1hc2sgb2YgcG9ydCBjYXBhYmlsaXRpZXMgcmV0dXJuZWQgYnkgZ2V0X3BvcnRfZGV2aWNlX2NhcGFiaWxpdHkoKQorICoKKyAqIFJldHVybiB2YWx1ZTogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBwY2llX3BvcnRfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp2ZWN0b3JzLCBpbnQgbWFzaykKK3sKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzOworCWludCBpZHhbUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFU107CisJaW50IG5yX2VudHJpZXMsIHN0YXR1cywgcG9zLCBpLCBudmVjOworCXUxNiByZWcxNjsKKwl1MzIgcmVnMzI7CisKKwlucl9lbnRyaWVzID0gcGNpX21zaXhfdGFibGVfc2l6ZShkZXYpOworCWlmICghbnJfZW50cmllcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5yX2VudHJpZXMgPiBQQ0lFX1BPUlRfTUFYX01TSVhfRU5UUklFUykKKwkJbnJfZW50cmllcyA9IFBDSUVfUE9SVF9NQVhfTVNJWF9FTlRSSUVTOworCisJbXNpeF9lbnRyaWVzID0ga3phbGxvYyhzaXplb2YoKm1zaXhfZW50cmllcykgKiBucl9lbnRyaWVzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zaXhfZW50cmllcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIEFsbG9jYXRlIGFzIG1hbnkgZW50cmllcyBhcyB0aGUgcG9ydCB3YW50cywgc28gdGhhdCB3ZSBjYW4gY2hlY2sKKwkgKiB3aGljaCBvZiB0aGVtIHdpbGwgYmUgdXNlZnVsLiAgTW9yZW92ZXIsIGlmIG5yX2VudHJpZXMgaXMgY29ycmVjdGx5CisJICogZXF1YWwgdG8gdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoaXMgcG9ydCBhY3R1YWxseSB1c2VzLCB3ZSdsbCBoYXBwaWx5CisJICogZ28gdGhyb3VnaCB3aXRob3V0IGFueSB0cmlja3MuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5yX2VudHJpZXM7IGkrKykKKwkJbXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgbnJfZW50cmllcyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBFeGl0OworCisJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKKwkJaWR4W2ldID0gLTE7CisJc3RhdHVzID0gLUVJTzsKKwludmVjID0gMDsKKworCWlmIChtYXNrICYgKFBDSUVfUE9SVF9TRVJWSUNFX1BNRSB8IFBDSUVfUE9SVF9TRVJWSUNFX0hQKSkgeworCQlpbnQgZW50cnk7CisKKwkJLyoKKwkJICogVGhlIGNvZGUgYmVsb3cgZm9sbG93cyB0aGUgUENJIEV4cHJlc3MgQmFzZSBTcGVjaWZpY2F0aW9uIDIuMAorCQkgKiBzdGF0aW5nIGluIFNlY3Rpb24gNi4xLjYgdGhhdCAiUE1FIGFuZCBIb3QtUGx1ZyBFdmVudAorCQkgKiBpbnRlcnJ1cHRzICh3aGVuIGJvdGggYXJlIGltcGxlbWVudGVkKSBhbHdheXMgc2hhcmUgdGhlIHNhbWUKKwkJICogTVNJIG9yIE1TSS1YIHZlY3RvciwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBJbnRlcnJ1cHQgTWVzc2FnZQorCQkgKiBOdW1iZXIgZmllbGQgaW4gdGhlIFBDSSBFeHByZXNzIENhcGFiaWxpdGllcyByZWdpc3RlciIsIHdoZXJlCisJCSAqIGFjY29yZGluZyB0byBTZWN0aW9uIDcuOC4yIG9mIHRoZSBzcGVjaWZpY2F0aW9uICJGb3IgTVNJLVgsCisJCSAqIHRoZSB2YWx1ZSBpbiB0aGlzIGZpZWxkIGluZGljYXRlcyB3aGljaCBNU0ktWCBUYWJsZSBlbnRyeSBpcworCQkgKiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBpbnRlcnJ1cHQgbWVzc2FnZS4iCisJCSAqLworCQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSUVfQ0FQQUJJTElUSUVTX1JFRywgJnJlZzE2KTsKKwkJZW50cnkgPSAocmVnMTYgPj4gOSkgJiBQQ0lFX1BPUlRfTVNJX1ZFQ1RPUl9NQVNLOworCQlpZiAoZW50cnkgPj0gbnJfZW50cmllcykKKwkJCWdvdG8gRXJyb3I7CisKKwkJaSA9IHBjaWVfcG9ydF9tc2l4X2FkZF9lbnRyeShtc2l4X2VudHJpZXMsIGVudHJ5LCBudmVjKTsKKwkJaWYgKGkgPT0gbnZlYykKKwkJCW52ZWMrKzsKKworCQlpZHhbUENJRV9QT1JUX1NFUlZJQ0VfUE1FX1NISUZUXSA9IGk7CisJCWlkeFtQQ0lFX1BPUlRfU0VSVklDRV9IUF9TSElGVF0gPSBpOwogCX0KLQlyZXR1cm4gcXVpcms7CisKKwlpZiAobWFzayAmIFBDSUVfUE9SVF9TRVJWSUNFX0FFUikgeworCQlpbnQgZW50cnk7CisKKwkJLyoKKwkJICogVGhlIGNvZGUgYmVsb3cgZm9sbG93cyBTZWN0aW9uIDcuMTAuMTAgb2YgdGhlIFBDSSBFeHByZXNzCisJCSAqIEJhc2UgU3BlY2lmaWNhdGlvbiAyLjAgc3RhdGluZyB0aGF0IGJpdHMgMzEtMjcgb2YgdGhlIFJvb3QKKwkJICogRXJyb3IgU3RhdHVzIFJlZ2lzdGVyIGNvbnRhaW4gYSB2YWx1ZSBpbmRpY2F0aW5nIHdoaWNoIG9mIHRoZQorCQkgKiBNU0kvTVNJLVggdmVjdG9ycyBhc3NpZ25lZCB0byB0aGUgcG9ydCBpcyBnb2luZyB0byBiZSB1c2VkCisJCSAqIGZvciBBRVIsIHdoZXJlICJGb3IgTVNJLVgsIHRoZSB2YWx1ZSBpbiB0aGlzIHJlZ2lzdGVyCisJCSAqIGluZGljYXRlcyB3aGljaCBNU0ktWCBUYWJsZSBlbnRyeSBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZQorCQkgKiBpbnRlcnJ1cHQgbWVzc2FnZS4iCisJCSAqLworCQlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUik7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsICZyZWczMik7CisJCWVudHJ5ID0gcmVnMzIgPj4gMjc7CisJCWlmIChlbnRyeSA+PSBucl9lbnRyaWVzKQorCQkJZ290byBFcnJvcjsKKworCQlpID0gcGNpZV9wb3J0X21zaXhfYWRkX2VudHJ5KG1zaXhfZW50cmllcywgZW50cnksIG52ZWMpOworCQlpZiAoaSA9PSBudmVjKQorCQkJbnZlYysrOworCisJCWlkeFtQQ0lFX1BPUlRfU0VSVklDRV9BRVJfU0hJRlRdID0gaTsKKwl9CisKKwkvKgorCSAqIElmIG52ZWMgaXMgZXF1YWwgdG8gdGhlIGFsbG9jYXRlZCBudW1iZXIgb2YgZW50cmllcywgd2UgY2FuIGp1c3QgdXNlCisJICogd2hhdCB3ZSBoYXZlLiAgT3RoZXJ3aXNlLCB0aGUgcG9ydCBoYXMgc29tZSBleHRyYSBlbnRyaWVzIG5vdCBmb3IgdGhlCisJICogc2VydmljZXMgd2Uga25vdyBhbmQgd2UgbmVlZCB0byB3b3JrIGFyb3VuZCB0aGF0LgorCSAqLworCWlmIChudmVjID09IG5yX2VudHJpZXMpIHsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2UgeworCQkvKiBEcm9wIHRoZSB0ZW1wb3JhcnkgTVNJLVggc2V0dXAgKi8KKwkJcGNpX2Rpc2FibGVfbXNpeChkZXYpOworCisJCS8qIE5vdyBhbGxvY2F0ZSB0aGUgTVNJLVggdmVjdG9ycyBmb3IgcmVhbCAqLworCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIG52ZWMpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBFeGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTOyBpKyspCisJCXZlY3RvcnNbaV0gPSBpZHhbaV0gPj0gMCA/IG1zaXhfZW50cmllc1tpZHhbaV1dLnZlY3RvciA6IC0xOworCisgRXhpdDoKKwlrZnJlZShtc2l4X2VudHJpZXMpOworCXJldHVybiBzdGF0dXM7CisKKyBFcnJvcjoKKwlwY2lfZGlzYWJsZV9tc2l4KGRldik7CisJZ290byBFeGl0OwogfQogCiAvKioKQEAgLTY0LDQ3ICsxODcsMzIgQEAKICAqLwogc3RhdGljIGludCBhc3NpZ25faW50ZXJydXB0X21vZGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp2ZWN0b3JzLCBpbnQgbWFzaykKIHsKLQlpbnQgaSwgcG9zLCBudmVjLCBzdGF0dXMgPSAtRUlOVkFMOwotCWludCBpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9JTlR4X01PREU7CisJc3RydWN0IHBjaWVfcG9ydF9kYXRhICpwb3J0X2RhdGEgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaXJxLCBpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9OT19JUlE7CisJaW50IGk7CiAKLQkvKiBTZXQgSU5UeCBhcyBkZWZhdWx0ICovCi0JZm9yIChpID0gMCwgbnZlYyA9IDA7IGkgPCBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTOyBpKyspIHsKLQkJaWYgKG1hc2sgJiAoMSA8PCBpKSkgCi0JCQludmVjKys7Ci0JCXZlY3RvcnNbaV0gPSBkZXYtPmlycTsKLQl9Ci0JCiAJLyogQ2hlY2sgTVNJIHF1aXJrICovCi0JaWYgKGlzX21zaV9xdWlya2VkKGRldikpCi0JCXJldHVybiBpbnRlcnJ1cHRfbW9kZTsKKwlpZiAocG9ydF9kYXRhLT5wb3J0X3R5cGUgPT0gUENJRV9SQ19QT1JUICYmIHBjaWVfbWNoX3F1aXJrKQorCQlnb3RvIEZhbGxiYWNrOwogCi0JLyogU2VsZWN0IE1TSS1YIG92ZXIgTVNJIGlmIHN1cHBvcnRlZCAqLwkJCi0JcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJWCk7Ci0JaWYgKHBvcykgewotCQlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFU10gPSAKLQkJCXt7MCwgMH0sIHswLCAxfSwgezAsIDJ9LCB7MCwgM319OwotCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaXgoZGV2LCBtc2l4X2VudHJpZXMsIG52ZWMpOwotCQlpZiAoIXN0YXR1cykgewotCQkJaW50IGogPSAwOworCS8qIFRyeSB0byB1c2UgTVNJLVggaWYgc3VwcG9ydGVkICovCisJaWYgKCFwY2llX3BvcnRfZW5hYmxlX21zaXgoZGV2LCB2ZWN0b3JzLCBtYXNrKSkKKwkJcmV0dXJuIFBDSUVfUE9SVF9NU0lYX01PREU7CiAKLQkJCWludGVycnVwdF9tb2RlID0gUENJRV9QT1JUX01TSVhfTU9ERTsKLQkJCWZvciAoaSA9IDA7IGkgPCBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTOyBpKyspIHsKLQkJCQlpZiAobWFzayAmICgxIDw8IGkpKSAKLQkJCQkJdmVjdG9yc1tpXSA9IG1zaXhfZW50cmllc1tqKytdLnZlY3RvcjsKLQkJCX0KLQkJfQotCX0gCi0JaWYgKHN0YXR1cykgewotCQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0kpOwotCQlpZiAocG9zKSB7Ci0JCQlzdGF0dXMgPSBwY2lfZW5hYmxlX21zaShkZXYpOwotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9NU0lfTU9ERTsKLQkJCQlmb3IgKGkgPSAwO2kgPCBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTO2krKykKLQkJCQkJdmVjdG9yc1tpXSA9IGRldi0+aXJxOwotCQkJfQotCQl9Ci0JfSAKKwkvKiBXZSdyZSBub3QgZ29pbmcgdG8gdXNlIE1TSS1YLCBzbyB0cnkgTVNJIGFuZCBmYWxsIGJhY2sgdG8gSU5UeCAqLworCWlmICghcGNpX2VuYWJsZV9tc2koZGV2KSkKKwkJaW50ZXJydXB0X21vZGUgPSBQQ0lFX1BPUlRfTVNJX01PREU7CisKKyBGYWxsYmFjazoKKwlpZiAoaW50ZXJydXB0X21vZGUgPT0gUENJRV9QT1JUX05PX0lSUSAmJiBkZXYtPnBpbikKKwkJaW50ZXJydXB0X21vZGUgPSBQQ0lFX1BPUlRfSU5UeF9NT0RFOworCisJaXJxID0gaW50ZXJydXB0X21vZGUgIT0gUENJRV9QT1JUX05PX0lSUSA/IGRldi0+aXJxIDogLTE7CisJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKKwkJdmVjdG9yc1tpXSA9IGlycTsKKworCXZlY3RvcnNbUENJRV9QT1JUX1NFUlZJQ0VfVkNfU0hJRlRdID0gLTE7CisKIAlyZXR1cm4gaW50ZXJydXB0X21vZGU7CiB9CiAKQEAgLTEzMiwxMyArMjQwLDExIEBACiAJCQlwb3MgKyBQQ0lFX1NMT1RfQ0FQQUJJTElUSUVTX1JFRywgJnJlZzMyKTsKIAkJaWYgKHJlZzMyICYgU0xPVF9IUF9DQVBBQkxFX01BU0spCiAJCQlzZXJ2aWNlcyB8PSBQQ0lFX1BPUlRfU0VSVklDRV9IUDsKLQl9IAotCS8qIFBNRSBDYXBhYmxlIC0gcm9vdCBwb3J0IGNhcGFiaWxpdHkgKi8KLQlpZiAoKChyZWcxNiA+PiA0KSAmIFBPUlRfVFlQRV9NQVNLKSA9PSBQQ0lFX1JDX1BPUlQpCi0JCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1BNRTsKLQorCX0KKwkvKiBBRVIgY2FwYWJsZSAqLwogCWlmIChwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX0VSUikpCiAJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUjsKKwkvKiBWQyBzdXBwb3J0ICovCiAJaWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfVkMpKQogCQlzZXJ2aWNlcyB8PSBQQ0lFX1BPUlRfU0VSVklDRV9WQzsKIApAQCAtMTUyLDIwICsyNTgsMTcgQEAKICAqIEBwb3J0X3R5cGU6IFR5cGUgb2YgdGhlIHBvcnQKICAqIEBzZXJ2aWNlX3R5cGU6IFR5cGUgb2Ygc2VydmljZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZSBkZXZpY2UKICAqIEBpcnE6IEludGVycnVwdCB2ZWN0b3IgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UgZGV2aWNlCi0gKiBAaXJxX21vZGU6IEludGVycnVwdCBtb2RlIG9mIHRoZSBzZXJ2aWNlIChJTlR4LCBNU0ktWCwgTVNJKQogICovCiBzdGF0aWMgdm9pZCBwY2llX2RldmljZV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwYXJlbnQsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCAKLQlpbnQgcG9ydF90eXBlLCBpbnQgc2VydmljZV90eXBlLCBpbnQgaXJxLCBpbnQgaXJxX21vZGUpCisJaW50IHNlcnZpY2VfdHlwZSwgaW50IGlycSkKIHsKKwlzdHJ1Y3QgcGNpZV9wb3J0X2RhdGEgKnBvcnRfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShwYXJlbnQpOwogCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKKwlpbnQgcG9ydF90eXBlID0gcG9ydF9kYXRhLT5wb3J0X3R5cGU7CiAKIAlkZXYtPnBvcnQgPSBwYXJlbnQ7Ci0JZGV2LT5pbnRlcnJ1cHRfbW9kZSA9IGlycV9tb2RlOwogCWRldi0+aXJxID0gaXJxOwotCWRldi0+aWQudmVuZG9yID0gcGFyZW50LT52ZW5kb3I7Ci0JZGV2LT5pZC5kZXZpY2UgPSBwYXJlbnQtPmRldmljZTsKLQlkZXYtPmlkLnBvcnRfdHlwZSA9IHBvcnRfdHlwZTsKLQlkZXYtPmlkLnNlcnZpY2VfdHlwZSA9ICgxIDw8IHNlcnZpY2VfdHlwZSk7CisJZGV2LT5zZXJ2aWNlID0gc2VydmljZV90eXBlOwogCiAJLyogSW5pdGlhbGl6ZSBnZW5lcmljIGRldmljZSBpbnRlcmZhY2UgKi8KIAlkZXZpY2UgPSAmZGV2LT5kZXZpY2U7CkBAIC0xODUsMTAgKzI4OCw5IEBACiAgKiBAcG9ydF90eXBlOiBUeXBlIG9mIHRoZSBwb3J0CiAgKiBAc2VydmljZV90eXBlOiBUeXBlIG9mIHNlcnZpY2UgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UgZGV2aWNlCiAgKiBAaXJxOiBJbnRlcnJ1cHQgdmVjdG9yIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlIGRldmljZQotICogQGlycV9tb2RlOiBJbnRlcnJ1cHQgbW9kZSBvZiB0aGUgc2VydmljZSAoSU5UeCwgTVNJLVgsIE1TSSkKICAqLwogc3RhdGljIHN0cnVjdCBwY2llX2RldmljZSogYWxsb2NfcGNpZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBhcmVudCwKLQlpbnQgcG9ydF90eXBlLCBpbnQgc2VydmljZV90eXBlLCBpbnQgaXJxLCBpbnQgaXJxX21vZGUpCisJaW50IHNlcnZpY2VfdHlwZSwgaW50IGlycSkKIHsKIAlzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldmljZTsKIApAQCAtMTk2LDcgKzI5OCw3IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiBOVUxMOwogCi0JcGNpZV9kZXZpY2VfaW5pdChwYXJlbnQsIGRldmljZSwgcG9ydF90eXBlLCBzZXJ2aWNlX3R5cGUsIGlycSxpcnFfbW9kZSk7CisJcGNpZV9kZXZpY2VfaW5pdChwYXJlbnQsIGRldmljZSwgc2VydmljZV90eXBlLCBpcnEpOwogCXJldHVybiBkZXZpY2U7CiB9CiAKQEAgLTIzMCw2MyArMzMyLDkwIEBACiAgKi8KIGludCBwY2llX3BvcnRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IHBjaWVfcG9ydF9kZXZpY2VfZXh0ICpwX2V4dDsKLQlpbnQgc3RhdHVzLCB0eXBlLCBjYXBhYmlsaXRpZXMsIGlycV9tb2RlLCBpOworCXN0cnVjdCBwY2llX3BvcnRfZGF0YSAqcG9ydF9kYXRhOworCWludCBzdGF0dXMsIGNhcGFiaWxpdGllcywgaXJxX21vZGUsIGksIG5yX3NlcnY7CiAJaW50IHZlY3RvcnNbUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFU107CiAJdTE2IHJlZzE2OwogCi0JLyogQWxsb2NhdGUgcG9ydCBkZXZpY2UgZXh0ZW5zaW9uICovCi0JaWYgKCEocF9leHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpZV9wb3J0X2RldmljZV9leHQpLCBHRlBfS0VSTkVMKSkpCisJcG9ydF9kYXRhID0ga3phbGxvYyhzaXplb2YoKnBvcnRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcG9ydF9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIHBfZXh0KTsKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBwb3J0X2RhdGEpOwogCiAJLyogR2V0IHBvcnQgdHlwZSAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwKIAkJcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKSArCiAJCVBDSUVfQ0FQQUJJTElUSUVTX1JFRywgJnJlZzE2KTsKLQl0eXBlID0gKHJlZzE2ID4+IDQpICYgUE9SVF9UWVBFX01BU0s7CisJcG9ydF9kYXRhLT5wb3J0X3R5cGUgPSAocmVnMTYgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSzsKIAotCS8qIE5vdyBnZXQgcG9ydCBzZXJ2aWNlcyAqLwogCWNhcGFiaWxpdGllcyA9IGdldF9wb3J0X2RldmljZV9jYXBhYmlsaXR5KGRldik7CisJLyogUm9vdCBwb3J0cyBhcmUgY2FwYWJsZSBvZiBnZW5lcmF0aW5nIFBNRSB0b28gKi8KKwlpZiAocG9ydF9kYXRhLT5wb3J0X3R5cGUgPT0gUENJRV9SQ19QT1JUKQorCQljYXBhYmlsaXRpZXMgfD0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FOworCiAJaXJxX21vZGUgPSBhc3NpZ25faW50ZXJydXB0X21vZGUoZGV2LCB2ZWN0b3JzLCBjYXBhYmlsaXRpZXMpOwotCXBfZXh0LT5pbnRlcnJ1cHRfbW9kZSA9IGlycV9tb2RlOworCWlmIChpcnFfbW9kZSA9PSBQQ0lFX1BPUlRfTk9fSVJRKSB7CisJCS8qCisJCSAqIERvbid0IHVzZSBzZXJ2aWNlIGRldmljZXMgdGhhdCByZXF1aXJlIGludGVycnVwdHMgaWYgdGhlcmUgaXMKKwkJICogbm8gd2F5IHRvIGdlbmVyYXRlIHRoZW0uCisJCSAqLworCQlpZiAoIShjYXBhYmlsaXRpZXMgJiBQQ0lFX1BPUlRfU0VSVklDRV9WQykpIHsKKwkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlnb3RvIEVycm9yOworCQl9CisJCWNhcGFiaWxpdGllcyA9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOworCX0KKwlwb3J0X2RhdGEtPnBvcnRfaXJxX21vZGUgPSBpcnFfbW9kZTsKKworCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBFcnJvcjsKKwlwY2lfc2V0X21hc3RlcihkZXYpOwogCiAJLyogQWxsb2NhdGUgY2hpbGQgc2VydmljZXMgaWYgYW55ICovCi0JZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykgeworCWZvciAoaSA9IDAsIG5yX3NlcnYgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKSB7CiAJCXN0cnVjdCBwY2llX2RldmljZSAqY2hpbGQ7CisJCWludCBzZXJ2aWNlID0gMSA8PCBpOwogCi0JCWlmIChjYXBhYmlsaXRpZXMgJiAoMSA8PCBpKSkgewotCQkJY2hpbGQgPSBhbGxvY19wY2llX2RldmljZSgKLQkJCQlkZXYsIAkJLyogcGFyZW50ICovCi0JCQkJdHlwZSwJCS8qIHBvcnQgdHlwZSAqLwotCQkJCWksCQkvKiBzZXJ2aWNlIHR5cGUgKi8KLQkJCQl2ZWN0b3JzW2ldLAkvKiBpcnEgKi8KLQkJCQlpcnFfbW9kZQkvKiBpbnRlcnJ1cHQgbW9kZSAqLyk7Ci0JCQlpZiAoY2hpbGQpIHsKLQkJCQlzdGF0dXMgPSBkZXZpY2VfcmVnaXN0ZXIoJmNoaWxkLT5kZXZpY2UpOwotCQkJCWlmIChzdGF0dXMpIHsKLQkJCQkJa2ZyZWUoY2hpbGQpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJZ2V0X2RldmljZSgmY2hpbGQtPmRldmljZSk7Ci0JCQl9CisJCWlmICghKGNhcGFiaWxpdGllcyAmIHNlcnZpY2UpKQorCQkJY29udGludWU7CisKKwkJY2hpbGQgPSBhbGxvY19wY2llX2RldmljZShkZXYsIHNlcnZpY2UsIHZlY3RvcnNbaV0pOworCQlpZiAoIWNoaWxkKQorCQkJY29udGludWU7CisKKwkJc3RhdHVzID0gZGV2aWNlX3JlZ2lzdGVyKCZjaGlsZC0+ZGV2aWNlKTsKKwkJaWYgKHN0YXR1cykgeworCQkJa2ZyZWUoY2hpbGQpOworCQkJY29udGludWU7CiAJCX0KKworCQlnZXRfZGV2aWNlKCZjaGlsZC0+ZGV2aWNlKTsKKwkJbnJfc2VydisrOwogCX0KKwlpZiAoIW5yX3NlcnYpIHsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gRXJyb3I7CisJfQorCiAJcmV0dXJuIDA7CisKKyBFcnJvcjoKKwlrZnJlZShwb3J0X2RhdGEpOworCXJldHVybiBzdGF0dXM7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc3VzcGVuZF9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpzZXJ2aWNlX2RyaXZlcjsKLQlwbV9tZXNzYWdlX3Qgc3RhdGUgPSAqIChwbV9tZXNzYWdlX3QgKikgZGF0YTsKIAogIAlpZiAoKGRldi0+YnVzID09ICZwY2llX3BvcnRfYnVzX3R5cGUpICYmCiAgCSAgICAoZGV2LT5kcml2ZXIpKSB7CiAgCQlzZXJ2aWNlX2RyaXZlciA9IHRvX3NlcnZpY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKICAJCWlmIChzZXJ2aWNlX2RyaXZlci0+c3VzcGVuZCkKLSAJCQlzZXJ2aWNlX2RyaXZlci0+c3VzcGVuZCh0b19wY2llX2RldmljZShkZXYpLCBzdGF0ZSk7CisgCQkJc2VydmljZV9kcml2ZXItPnN1c3BlbmQodG9fcGNpZV9kZXZpY2UoZGV2KSk7CiAgIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTQsMTEgKzQyMywxMCBAQAogLyoqCiAgKiBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQgLSBzdXNwZW5kIHBvcnQgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIGEgUENJZSBwb3J0CiAgKiBAZGV2OiBQQ0kgRXhwcmVzcyBwb3J0IHRvIGhhbmRsZQotICogQHN0YXRlOiBSZXByZXNlbnRhdGlvbiBvZiBzeXN0ZW0gcG93ZXIgbWFuYWdlbWVudCB0cmFuc2l0aW9uIGluIHByb2dyZXNzCiAgKi8KLWludCBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZzdGF0ZSwgc3VzcGVuZF9pdGVyKTsKKwlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgc3VzcGVuZF9pdGVyKTsKIH0KIAogc3RhdGljIGludCByZXN1bWVfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCkBAIC0zMTgsMjQgKzQ0NiwxNyBAQAogICogcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kIC0gcmVzdW1lIHBvcnQgc2VydmljZXMgYXNzb2NpYXRlZCB3aXRoIGEgUENJZSBwb3J0CiAgKiBAZGV2OiBQQ0kgRXhwcmVzcyBwb3J0IHRvIGhhbmRsZQogICovCi1pbnQgcGNpZV9wb3J0X2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK2ludCBwY2llX3BvcnRfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsIE5VTEwsIHJlc3VtZV9pdGVyKTsKKwlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGRldiwgTlVMTCwgcmVzdW1lX2l0ZXIpOwogfQotI2VuZGlmCisjZW5kaWYgLyogUE0gKi8KIAogc3RhdGljIGludCByZW1vdmVfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqc2VydmljZV9kcml2ZXI7Ci0KIAlpZiAoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgewotCQlpZiAoZGV2LT5kcml2ZXIpIHsKLQkJCXNlcnZpY2VfZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCQkJaWYgKHNlcnZpY2VfZHJpdmVyLT5yZW1vdmUpCi0JCQkJc2VydmljZV9kcml2ZXItPnJlbW92ZSh0b19wY2llX2RldmljZShkZXYpKTsKLQkJfQotCQkqKHVuc2lnbmVkIGxvbmcqKWRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7Ci0JCXJldHVybiAxOworCQlwdXRfZGV2aWNlKGRldik7CisJCWRldmljZV91bnJlZ2lzdGVyKGRldik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzQ5LDI1ICs0NzAsMjEgQEAKICAqLwogdm9pZCBwY2llX3BvcnRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKLQl1bnNpZ25lZCBsb25nIGRldmljZV9hZGRyOwotCWludCBpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9JTlR4X01PREU7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgcGNpZV9wb3J0X2RhdGEgKnBvcnRfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZG8gewotCQlzdGF0dXMgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmZGV2aWNlX2FkZHIsIHJlbW92ZV9pdGVyKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZGV2aWNlID0gKHN0cnVjdCBkZXZpY2UqKWRldmljZV9hZGRyOwotCQkJaW50ZXJydXB0X21vZGUgPSAodG9fcGNpZV9kZXZpY2UoZGV2aWNlKSktPmludGVycnVwdF9tb2RlOwotCQkJcHV0X2RldmljZShkZXZpY2UpOwotCQkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJfQotCX0gd2hpbGUgKHN0YXR1cyk7Ci0JLyogU3dpdGNoIHRvIElOVHggYnkgZGVmYXVsdCBpZiBNU0kgZW5hYmxlZCAqLwotCWlmIChpbnRlcnJ1cHRfbW9kZSA9PSBQQ0lFX1BPUlRfTVNJWF9NT0RFKQorCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsIE5VTEwsIHJlbW92ZV9pdGVyKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworCXN3aXRjaCAocG9ydF9kYXRhLT5wb3J0X2lycV9tb2RlKSB7CisJY2FzZSBQQ0lFX1BPUlRfTVNJWF9NT0RFOgogCQlwY2lfZGlzYWJsZV9tc2l4KGRldik7Ci0JZWxzZSBpZiAoaW50ZXJydXB0X21vZGUgPT0gUENJRV9QT1JUX01TSV9NT0RFKQorCQlicmVhazsKKwljYXNlIFBDSUVfUE9SVF9NU0lfTU9ERToKIAkJcGNpX2Rpc2FibGVfbXNpKGRldik7CisJCWJyZWFrOworCX0KKworCWtmcmVlKHBvcnRfZGF0YSk7CiB9CiAKIC8qKgpAQCAtMzkyLDcgKzUwOSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJcGNpZWRldiA9IHRvX3BjaWVfZGV2aWNlKGRldik7Ci0Jc3RhdHVzID0gZHJpdmVyLT5wcm9iZShwY2llZGV2LCBkcml2ZXItPmlkX3RhYmxlKTsKKwlzdGF0dXMgPSBkcml2ZXItPnByb2JlKHBjaWVkZXYpOwogCWlmICghc3RhdHVzKSB7CiAJCWRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAic2VydmljZSBkcml2ZXIgJXMgbG9hZGVkXG4iLAogCQkJZHJpdmVyLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCA1ZWE1NjZlLi5iOTI0ZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCkBAIC0zMiwxMSArMzIsNiBAQAogLyogZ2xvYmFsIGRhdGEgKi8KIHN0YXRpYyBjb25zdCBjaGFyIGRldmljZV9uYW1lW10gPSAicGNpZXBvcnQtZHJpdmVyIjsKIAotc3RhdGljIGludCBwY2llX3BvcnRkcnZfc2F2ZV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gcGNpX3NhdmVfc3RhdGUoZGV2KTsKLX0KLQogc3RhdGljIGludCBwY2llX3BvcnRkcnZfcmVzdG9yZV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlpbnQgcmV0dmFsOwpAQCAtNDksMjEgKzQ0LDIxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXJldHVybiBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQoZGV2LCBzdGF0ZSk7CitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcGNpZV9wb3J0ZHJ2X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lLAorCS5mcmVlemUJCT0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kLAorCS50aGF3CQk9IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lLAorCS5wb3dlcm9mZgk9IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdG9yZQk9IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lLAorfTsKIAotfQorI2RlZmluZSBQQ0lFX1BPUlREUlZfUE1fT1BTCSgmcGNpZV9wb3J0ZHJ2X3BtX29wcykKIAotc3RhdGljIGludCBwY2llX3BvcnRkcnZfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcGNpX3NldF9tYXN0ZXIoZGV2KTsKLQlyZXR1cm4gcGNpZV9wb3J0X2RldmljZV9yZXN1bWUoZGV2KTsKLX0KLSNlbHNlCi0jZGVmaW5lIHBjaWVfcG9ydGRydl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgcGNpZV9wb3J0ZHJ2X3Jlc3VtZSBOVUxMCi0jZW5kaWYKKyNlbHNlIC8qICFQTSAqLworCisjZGVmaW5lIFBDSUVfUE9SVERSVl9QTV9PUFMJTlVMTAorI2VuZGlmIC8qICFQTSAqLwogCiAvKgogICogcGNpZV9wb3J0ZHJ2X3Byb2JlIC0gUHJvYmUgUENJLUV4cHJlc3MgcG9ydCBkZXZpY2VzCkBAIC04MiwyMCArNzcsMTUgQEAKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikgPCAwKSAKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCi0JcGNpX3NldF9tYXN0ZXIoZGV2KTsKICAgICAgICAgaWYgKCFkZXYtPmlycSAmJiBkZXYtPnBpbikgewogCQlkZXZfd2FybigmZGV2LT5kZXYsICJkZXZpY2UgWyUwNHg6JTA0eF0gaGFzIGludmFsaWQgSVJROyAiCiAJCQkgImNoZWNrIHZlbmRvciBCSU9TXG4iLCBkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UpOwogCX0KLQlpZiAocGNpZV9wb3J0X2RldmljZV9yZWdpc3RlcihkZXYpKSB7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJc3RhdHVzID0gcGNpZV9wb3J0X2RldmljZV9yZWdpc3RlcihkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CiAKLQlwY2llX3BvcnRkcnZfc2F2ZV9jb25maWcoZGV2KTsKKwlwY2lfc2F2ZV9zdGF0ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDQsNyArOTQsNiBAQAogewogCXBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0Ja2ZyZWUocGNpX2dldF9kcnZkYXRhKGRldikpOwogfQogCiBzdGF0aWMgaW50IGVycm9yX2RldGVjdGVkX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKQpAQCAtMjc4LDEwICsyNjcsOSBAQAogCS5wcm9iZQkJPSBwY2llX3BvcnRkcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBwY2llX3BvcnRkcnZfcmVtb3ZlLAogCi0JLnN1c3BlbmQJPSBwY2llX3BvcnRkcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHBjaWVfcG9ydGRydl9yZXN1bWUsCi0KIAkuZXJyX2hhbmRsZXIgCT0gJnBjaWVfcG9ydGRydl9lcnJfaGFuZGxlciwKKworCS5kcml2ZXIucG0gCT0gUENJRV9QT1JURFJWX1BNX09QUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCA1NWVjNDRhLi5lMmYzZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpOwogCi0JaWYgKCFkZXYpCQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLworCWlmICghY2hpbGQtPnBhcmVudCkJLyogSXQncyBhIGhvc3QgYnVzLCBub3RoaW5nIHRvIHJlYWQgKi8KIAkJcmV0dXJuOwogCiAJaWYgKGRldi0+dHJhbnNwYXJlbnQpIHsKQEAgLTUxMSwyMSArNTExLDIxIEBACiAKIAkJLyoKIAkJICogSWYgd2UgYWxyZWFkeSBnb3QgdG8gdGhpcyBidXMgdGhyb3VnaCBhIGRpZmZlcmVudCBicmlkZ2UsCi0JCSAqIGlnbm9yZSBpdC4gIFRoaXMgY2FuIGhhcHBlbiB3aXRoIHRoZSBpNDUwTlggY2hpcHNldC4KKwkJICogZG9uJ3QgcmUtYWRkIGl0LiBUaGlzIGNhbiBoYXBwZW4gd2l0aCB0aGUgaTQ1ME5YIGNoaXBzZXQuCisJCSAqCisJCSAqIEhvd2V2ZXIsIHdlIGNvbnRpbnVlIHRvIGRlc2NlbmQgZG93biB0aGUgaGllcmFyY2h5IGFuZAorCQkgKiBzY2FuIHJlbWFpbmluZyBjaGlsZCBidXNlcy4KIAkJICovCi0JCWlmIChwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihidXMpLCBidXNucikpIHsKLQkJCWRldl9pbmZvKCZkZXYtPmRldiwgImJ1cyAlMDR4OiUwMnggYWxyZWFkeSBrbm93blxuIiwKLQkJCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXNucik7Ci0JCQlnb3RvIG91dDsKKwkJY2hpbGQgPSBwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihidXMpLCBidXNucik7CisJCWlmICghY2hpbGQpIHsKKwkJCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGJ1cywgZGV2LCBidXNucik7CisJCQlpZiAoIWNoaWxkKQorCQkJCWdvdG8gb3V0OworCQkJY2hpbGQtPnByaW1hcnkgPSBidXNlcyAmIDB4RkY7CisJCQljaGlsZC0+c3Vib3JkaW5hdGUgPSAoYnVzZXMgPj4gMTYpICYgMHhGRjsKKwkJCWNoaWxkLT5icmlkZ2VfY3RsID0gYmN0bDsKIAkJfQogCi0JCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGJ1cywgZGV2LCBidXNucik7Ci0JCWlmICghY2hpbGQpCi0JCQlnb3RvIG91dDsKLQkJY2hpbGQtPnByaW1hcnkgPSBidXNlcyAmIDB4RkY7Ci0JCWNoaWxkLT5zdWJvcmRpbmF0ZSA9IChidXNlcyA+PiAxNikgJiAweEZGOwotCQljaGlsZC0+YnJpZGdlX2N0bCA9IGJjdGw7Ci0KIAkJY21heCA9IHBjaV9zY2FuX2NoaWxkX2J1cyhjaGlsZCk7CiAJCWlmIChjbWF4ID4gbWF4KQogCQkJbWF4ID0gY21heDsKQEAgLTY3NCw2ICs2NzQsMTkgQEAKIAlkZXYtPmlycSA9IGlycTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3BjaWVfcG9ydF90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBwb3M7CisJdTE2IHJlZzE2OworCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCFwb3MpCisJCXJldHVybjsKKwlwZGV2LT5pc19wY2llID0gMTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX0ZMQUdTLCAmcmVnMTYpOworCXBkZXYtPnBjaWVfdHlwZSA9IChyZWcxNiAmIFBDSV9FWFBfRkxBR1NfVFlQRSkgPj4gNDsKK30KKwogI2RlZmluZSBMRUdBQ1lfSU9fUkVTT1VSQ0UJKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX1BDSV9GSVhFRCkKIAogLyoqCkBAIC02ODMsMTIgKzY5NiwzMyBAQAogICogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UncyAKICAqIHZlbmRvcixjbGFzcyxtZW1vcnkgYW5kIElPLXNwYWNlIGFkZHJlc3NlcyxJUlEgbGluZXMgZXRjLgogICogQ2FsbGVkIGF0IGluaXRpYWxpc2F0aW9uIG9mIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBieSBDYXJkQnVzIHNlcnZpY2VzLgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGlmIHVua25vd24gdHlwZSBvZiBkZXZpY2UgKG5vdCBub3JtYWwsIGJyaWRnZQotICogb3IgQ2FyZEJ1cykuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgaWYgdW5rbm93biB0eXBlIG9mIGRldmljZSAobm90IG5vcm1hbCwKKyAqIGJyaWRnZSBvciBDYXJkQnVzKS4KICAqLwotc3RhdGljIGludCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICogZGV2KQoraW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgY2xhc3M7CisJdTggaGRyX3R5cGU7CisJc3RydWN0IHBjaV9zbG90ICpzbG90OworCisJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0hFQURFUl9UWVBFLCAmaGRyX3R5cGUpKQorCQlyZXR1cm4gLUVJTzsKKworCWRldi0+c3lzZGF0YSA9IGRldi0+YnVzLT5zeXNkYXRhOworCWRldi0+ZGV2LnBhcmVudCA9IGRldi0+YnVzLT5icmlkZ2U7CisJZGV2LT5kZXYuYnVzID0gJnBjaV9idXNfdHlwZTsKKwlkZXYtPmhkcl90eXBlID0gaGRyX3R5cGUgJiAweDdmOworCWRldi0+bXVsdGlmdW5jdGlvbiA9ICEhKGhkcl90eXBlICYgMHg4MCk7CisJZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKKwlzZXRfcGNpZV9wb3J0X3R5cGUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgJmRldi0+YnVzLT5zbG90cywgbGlzdCkKKwkJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IHNsb3QtPm51bWJlcikKKwkJCWRldi0+c2xvdCA9IHNsb3Q7CisKKwkvKiBBc3N1bWUgMzItYml0IFBDSTsgbGV0IDY0LWJpdCBQQ0kgY2FyZHMgKHdoaWNoIGFyZSBmYXIgcmFyZXIpCisJICAgc2V0IHRoaXMgaGlnaGVyLCBhc3N1bWluZyB0aGUgc3lzdGVtIGV2ZW4gc3VwcG9ydHMgaXQuICAqLworCWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwogCiAJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwNHg6JTAyeDolMDJ4LiVkIiwgcGNpX2RvbWFpbl9ucihkZXYtPmJ1cyksCiAJCSAgICAgZGV2LT5idXMtPm51bWJlciwgUENJX1NMT1QoZGV2LT5kZXZmbiksCkBAIC03MDMsMTIgKzczNywxNCBAQAogCWRldl9kYmcoJmRldi0+ZGV2LCAiZm91bmQgWyUwNHg6JTA0eF0gY2xhc3MgJTA2eCBoZWFkZXIgdHlwZSAlMDJ4XG4iLAogCQkgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLCBjbGFzcywgZGV2LT5oZHJfdHlwZSk7CiAKKwkvKiBuZWVkIHRvIGhhdmUgZGV2LT5jbGFzcyByZWFkeSAqLworCWRldi0+Y2ZnX3NpemUgPSBwY2lfY2ZnX3NwYWNlX3NpemUoZGV2KTsKKwogCS8qICJVbmtub3duIHBvd2VyIHN0YXRlIiAqLwogCWRldi0+Y3VycmVudF9zdGF0ZSA9IFBDSV9VTktOT1dOOwogCiAJLyogRWFybHkgZml4dXBzLCBiZWZvcmUgcHJvYmluZyB0aGUgQkFScyAqLwogCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2Vhcmx5LCBkZXYpOwotCWNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OwogCiAJc3dpdGNoIChkZXYtPmhkcl90eXBlKSB7CQkgICAgLyogaGVhZGVyIHR5cGUgKi8KIAljYXNlIFBDSV9IRUFERVJfVFlQRV9OT1JNQUw6CQkgICAgLyogc3RhbmRhcmQgaGVhZGVyICovCkBAIC03NzAsNyArODA2LDcgQEAKIAlkZWZhdWx0OgkJCQkgICAgLyogdW5rbm93biBoZWFkZXIgKi8KIAkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmtub3duIGhlYWRlciB0eXBlICUwMngsICIKIAkJCSJpZ25vcmluZyBkZXZpY2VcbiIsIGRldi0+aGRyX3R5cGUpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlPOwogCiAJYmFkOgogCQlkZXZfZXJyKCZkZXYtPmRldiwgImlnbm9yaW5nIGNsYXNzICUwMnggKGRvZXNuJ3QgbWF0Y2ggaGVhZGVyICIKQEAgLTc4NSw2ICs4MjEsNyBAQAogc3RhdGljIHZvaWQgcGNpX3JlbGVhc2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcGNpX3ZwZF9yZWxlYXNlKGRldik7CisJcGNpX2lvdl9yZWxlYXNlKGRldik7CiB9CiAKIC8qKgpAQCAtODAzLDE5ICs4NDAsNiBAQAogCWtmcmVlKHBjaV9kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JaW50IHBvczsKLQl1MTYgcmVnMTY7Ci0KLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKLQlpZiAoIXBvcykKLQkJcmV0dXJuOwotCXBkZXYtPmlzX3BjaWUgPSAxOwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfRkxBR1MsICZyZWcxNik7Ci0JcGRldi0+cGNpZV90eXBlID0gKHJlZzE2ICYgUENJX0VYUF9GTEFHU19UWVBFKSA+PiA0OwotfQotCiAvKioKICAqIHBjaV9jZmdfc3BhY2Vfc2l6ZSAtIGdldCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSBzaXplIG9mIHRoZSBQQ0kgZGV2aWNlLgogICogQGRldjogUENJIGRldmljZQpAQCAtODQ3LDYgKzg3MSwxMSBAQAogewogCWludCBwb3M7CiAJdTMyIHN0YXR1czsKKwl1MTYgY2xhc3M7CisKKwljbGFzcyA9IGRldi0+Y2xhc3MgPj4gODsKKwlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlyZXR1cm4gcGNpX2NmZ19zcGFjZV9zaXplX2V4dChkZXYpOwogCiAJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAlpZiAoIXBvcykgewpAQCAtODkxLDkgKzkyMCw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9zY2FuX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3Q7CiAJdTMyIGw7Ci0JdTggaGRyX3R5cGU7CiAJaW50IGRlbGF5ID0gMTsKIAogCWlmIChwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFBDSV9WRU5ET1JfSUQsICZsKSkKQEAgLTkyMCwzNCArOTQ3LDE2IEBACiAJCX0KIAl9CiAKLQlpZiAocGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJmhkcl90eXBlKSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAlkZXYgPSBhbGxvY19wY2lfZGV2KCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwogCiAJZGV2LT5idXMgPSBidXM7Ci0JZGV2LT5zeXNkYXRhID0gYnVzLT5zeXNkYXRhOwotCWRldi0+ZGV2LnBhcmVudCA9IGJ1cy0+YnJpZGdlOwotCWRldi0+ZGV2LmJ1cyA9ICZwY2lfYnVzX3R5cGU7CiAJZGV2LT5kZXZmbiA9IGRldmZuOwotCWRldi0+aGRyX3R5cGUgPSBoZHJfdHlwZSAmIDB4N2Y7Ci0JZGV2LT5tdWx0aWZ1bmN0aW9uID0gISEoaGRyX3R5cGUgJiAweDgwKTsKIAlkZXYtPnZlbmRvciA9IGwgJiAweGZmZmY7CiAJZGV2LT5kZXZpY2UgPSAobCA+PiAxNikgJiAweGZmZmY7Ci0JZGV2LT5jZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZShkZXYpOwotCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7Ci0Jc2V0X3BjaWVfcG9ydF90eXBlKGRldik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZidXMtPnNsb3RzLCBsaXN0KQotCQlpZiAoUENJX1NMT1QoZGV2Zm4pID09IHNsb3QtPm51bWJlcikKLQkJCWRldi0+c2xvdCA9IHNsb3Q7Ci0KLQkvKiBBc3N1bWUgMzItYml0IFBDSTsgbGV0IDY0LWJpdCBQQ0kgY2FyZHMgKHdoaWNoIGFyZSBmYXIgcmFyZXIpCi0JICAgc2V0IHRoaXMgaGlnaGVyLCBhc3N1bWluZyB0aGUgc3lzdGVtIGV2ZW4gc3VwcG9ydHMgaXQuICAqLwotCWRldi0+ZG1hX21hc2sgPSAweGZmZmZmZmZmOwotCWlmIChwY2lfc2V0dXBfZGV2aWNlKGRldikgPCAwKSB7CisJaWYgKHBjaV9zZXR1cF9kZXZpY2UoZGV2KSkgewogCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC05NzIsNiArOTgxLDkgQEAKIAogCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgRm9yd2FyZGluZyAqLwogCXBjaV9lbmFibGVfYXJpKGRldik7CisKKwkvKiBTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKi8KKwlwY2lfaW92X2luaXQoZGV2KTsKIH0KIAogdm9pZCBwY2lfZGV2aWNlX2FkZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpAQCAtMTAwNiw2ICsxMDE4LDEyIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAorCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIGRldmZuKTsKKwlpZiAoZGV2KSB7CisJCXBjaV9kZXZfcHV0KGRldik7CisJCXJldHVybiBkZXY7CisJfQorCiAJZGV2ID0gcGNpX3NjYW5fZGV2aWNlKGJ1cywgZGV2Zm4pOwogCWlmICghZGV2KQogCQlyZXR1cm4gTlVMTDsKQEAgLTEwMjQsMzUgKzEwNDIsMjcgQEAKICAqIFNjYW4gYSBQQ0kgc2xvdCBvbiB0aGUgc3BlY2lmaWVkIFBDSSBidXMgZm9yIGRldmljZXMsIGFkZGluZwogICogZGlzY292ZXJlZCBkZXZpY2VzIHRvIHRoZSBAYnVzLT5kZXZpY2VzIGxpc3QuICBOZXcgZGV2aWNlcwogICogd2lsbCBub3QgaGF2ZSBpc19hZGRlZCBzZXQuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG5ldyBkZXZpY2VzIGZvdW5kLgogICovCiBpbnQgcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pCiB7Ci0JaW50IGZ1bmMsIG5yID0gMDsKLQlpbnQgc2Nhbl9hbGxfZm5zOworCWludCBmbiwgbnIgPSAwOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKLQlzY2FuX2FsbF9mbnMgPSBwY2liaW9zX3NjYW5fYWxsX2ZucyhidXMsIGRldmZuKTsKKwlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgZGV2Zm4pOworCWlmIChkZXYgJiYgIWRldi0+aXNfYWRkZWQpCS8qIG5ldyBkZXZpY2U/ICovCisJCW5yKys7CiAKLQlmb3IgKGZ1bmMgPSAwOyBmdW5jIDwgODsgZnVuYysrLCBkZXZmbisrKSB7Ci0JCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0KLQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuKTsKLQkJaWYgKGRldikgewotCQkJbnIrKzsKLQotCQkJLyoKLQkJIAkgKiBJZiB0aGlzIGlzIGEgc2luZ2xlIGZ1bmN0aW9uIGRldmljZSwKLQkJIAkgKiBkb24ndCBzY2FuIHBhc3QgdGhlIGZpcnN0IGZ1bmN0aW9uLgotCQkgCSAqLwotCQkJaWYgKCFkZXYtPm11bHRpZnVuY3Rpb24pIHsKLQkJCQlpZiAoZnVuYyA+IDApIHsKLQkJCQkJZGV2LT5tdWx0aWZ1bmN0aW9uID0gMTsKLQkJCQl9IGVsc2UgewotIAkJCQkJYnJlYWs7Ci0JCQkJfQorCWlmICgoZGV2ICYmIGRldi0+bXVsdGlmdW5jdGlvbikgfHwKKwkgICAgKCFkZXYgJiYgcGNpYmlvc19zY2FuX2FsbF9mbnMoYnVzLCBkZXZmbikpKSB7CisJCWZvciAoZm4gPSAxOyBmbiA8IDg7IGZuKyspIHsKKwkJCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbiArIGZuKTsKKwkJCWlmIChkZXYpIHsKKwkJCQlpZiAoIWRldi0+aXNfYWRkZWQpCisJCQkJCW5yKys7CisJCQkJZGV2LT5tdWx0aWZ1bmN0aW9uID0gMTsKIAkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChmdW5jID09IDAgJiYgIXNjYW5fYWxsX2ZucykKLQkJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTA3NCwxMiArMTA4NCwyMSBAQAogCWZvciAoZGV2Zm4gPSAwOyBkZXZmbiA8IDB4MTAwOyBkZXZmbiArPSA4KQogCQlwY2lfc2Nhbl9zbG90KGJ1cywgZGV2Zm4pOwogCisJLyogUmVzZXJ2ZSBidXNlcyBmb3IgU1ItSU9WIGNhcGFiaWxpdHkuICovCisJbWF4ICs9IHBjaV9pb3ZfYnVzX3JhbmdlKGJ1cyk7CisKIAkvKgogCSAqIEFmdGVyIHBlcmZvcm1pbmcgYXJjaC1kZXBlbmRlbnQgZml4dXAgb2YgdGhlIGJ1cywgbG9vayBiZWhpbmQKIAkgKiBhbGwgUENJLXRvLVBDSSBicmlkZ2VzIG9uIHRoaXMgYnVzLgogCSAqLwotCXByX2RlYnVnKCJQQ0k6IEZpeHVwcyBmb3IgYnVzICUwNHg6JTAyeFxuIiwgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7Ci0JcGNpYmlvc19maXh1cF9idXMoYnVzKTsKKwlpZiAoIWJ1cy0+aXNfYWRkZWQpIHsKKwkJcHJfZGVidWcoIlBDSTogRml4dXBzIGZvciBidXMgJTA0eDolMDJ4XG4iLAorCQkJIHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIpOworCQlwY2liaW9zX2ZpeHVwX2J1cyhidXMpOworCQlpZiAocGNpX2lzX3Jvb3RfYnVzKGJ1cykpCisJCQlidXMtPmlzX2FkZGVkID0gMTsKKwl9CisKIAlmb3IgKHBhc3M9MDsgcGFzcyA8IDI7IHBhc3MrKykKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8CkBAIC0xMTE0LDcgKzExMzMsNyBAQAogCWlmICghYikKIAkJcmV0dXJuIE5VTEw7CiAKLQlkZXYgPSBrbWFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KXsKIAkJa2ZyZWUoYik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTEzMyw3ICsxMTUyLDYgQEAKIAlsaXN0X2FkZF90YWlsKCZiLT5ub2RlLCAmcGNpX3Jvb3RfYnVzZXMpOwogCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAKLQltZW1zZXQoZGV2LCAwLCBzaXplb2YoKmRldikpOwogCWRldi0+cGFyZW50ID0gcGFyZW50OwogCWRldi0+cmVsZWFzZSA9IHBjaV9yZWxlYXNlX2J1c19icmlkZ2VfZGV2OwogCWRldl9zZXRfbmFtZShkZXYsICJwY2klMDR4OiUwMngiLCBwY2lfZG9tYWluX25yKGIpLCBidXMpOwpAQCAtMTE5Myw2ICsxMjExLDM4IEBACiBFWFBPUlRfU1lNQk9MKHBjaV9zY2FuX2J1c19wYXJlbnRlZCk7CiAKICNpZmRlZiBDT05GSUdfSE9UUExVRworLyoqCisgKiBwY2lfcmVzY2FuX2J1cyAtIHNjYW4gYSBQQ0kgYnVzIGZvciBkZXZpY2VzLgorICogQGJ1czogUENJIGJ1cyB0byBzY2FuCisgKgorICogU2NhbiBhIFBDSSBidXMgYW5kIGNoaWxkIGJ1c2VzIGZvciBuZXcgZGV2aWNlcywgYWRkcyB0aGVtLAorICogYW5kIGVuYWJsZXMgdGhlbS4KKyAqCisgKiBSZXR1cm5zIHRoZSBtYXggbnVtYmVyIG9mIHN1Ym9yZGluYXRlIGJ1cyBkaXNjb3ZlcmVkLgorICovCit1bnNpZ25lZCBpbnQgX19kZXZpbml0IHBjaV9yZXNjYW5fYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJdW5zaWduZWQgaW50IG1heDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbWF4ID0gcGNpX3NjYW5fY2hpbGRfYnVzKGJ1cyk7CisKKwlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCisJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKKwkJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpCisJCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkKKwkJCQlwY2lfYnVzX3NpemVfYnJpZGdlcyhkZXYtPnN1Ym9yZGluYXRlKTsKKwl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CisKKwlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKKwlwY2lfZW5hYmxlX2JyaWRnZXMoYnVzKTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisKKwlyZXR1cm4gbWF4OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3Jlc2Nhbl9idXMpOworCiBFWFBPUlRfU1lNQk9MKHBjaV9hZGRfbmV3X2J1cyk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zY2FuX3Nsb3QpOwogRVhQT1JUX1NZTUJPTChwY2lfc2Nhbl9icmlkZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA5MmI5ZWZlLi45YjJmMGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlICJwY2kuaCIKIAogaW50IGlzYV9kbWFfYnJpZGdlX2J1Z2d5OwpAQCAtMzQsNiArMzUsNjUgQEAKIEVYUE9SVF9TWU1CT0wocGNpZV9tY2hfcXVpcmspOwogCiAjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKKy8qCisgKiBUaGlzIHF1aXJrIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBkZXZpY2UgYW5kIHJlbGVhc2VzIHJlc291cmNlcworICogd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IGtlcm5lbCdzIGJvb3QgcGFyYW1ldGVyICdwY2k9cmVzb3VyY2VfYWxpZ25tZW50PScuCisgKiBJdCBhbHNvIHJvdW5kcyB1cCBzaXplIHRvIHNwZWNpZmllZCBhbGlnbm1lbnQuCisgKiBMYXRlciBvbiwgdGhlIGtlcm5lbCB3aWxsIGFzc2lnbiBwYWdlLWFsaWduZWQgbWVtb3J5IHJlc291cmNlIGJhY2sKKyAqIHRvIHRoYXQgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfcmVzb3VyY2VfYWxpZ25tZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHJlc291cmNlICpyOworCXJlc291cmNlX3NpemVfdCBhbGlnbiwgc2l6ZTsKKworCWlmICghcGNpX2lzX3JlYXNzaWduZGV2KGRldikpCisJCXJldHVybjsKKworCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwgJiYKKwkgICAgKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKSB7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSJDYW4ndCByZWFzc2lnbiByZXNvdXJjZXMgdG8gaG9zdCBicmlkZ2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkRpc2FibGluZyBkZXZpY2UgYW5kIHJlbGVhc2UgcmVzb3VyY2VzLlxuIik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CisKKwlhbGlnbiA9IHBjaV9zcGVjaWZpZWRfcmVzb3VyY2VfYWxpZ25tZW50KGRldik7CisJZm9yIChpPTA7IGkgPCBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSsrKSB7CisJCXIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKKwkJaWYgKCEoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkpCisJCQljb250aW51ZTsKKwkJc2l6ZSA9IHJlc291cmNlX3NpemUocik7CisJCWlmIChzaXplIDwgYWxpZ24pIHsKKwkJCXNpemUgPSBhbGlnbjsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkiUm91bmRpbmcgdXAgc2l6ZSBvZiByZXNvdXJjZSAjJWQgdG8gJSNsbHguXG4iLAorCQkJCWksICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSk7CisJCX0KKwkJci0+ZW5kID0gc2l6ZSAtIDE7CisJCXItPnN0YXJ0ID0gMDsKKwl9CisJLyogTmVlZCB0byBkaXNhYmxlIGJyaWRnZSdzIHJlc291cmNlIHdpbmRvdywKKwkgKiB0byBlbmFibGUgdGhlIGtlcm5lbCB0byByZWFzc2lnbiBuZXcgcmVzb3VyY2UKKwkgKiB3aW5kb3cgbGF0ZXIgb24uCisJICovCisJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSAmJgorCSAgICAoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkgeworCQlmb3IgKGkgPSBQQ0lfQlJJREdFX1JFU09VUkNFUzsgaSA8IFBDSV9OVU1fUkVTT1VSQ0VTOyBpKyspIHsKKwkJCXIgPSAmZGV2LT5yZXNvdXJjZVtpXTsKKwkJCWlmICghKHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKQorCQkJCWNvbnRpbnVlOworCQkJci0+ZW5kID0gcmVzb3VyY2Vfc2l6ZShyKSAtIDE7CisJCQlyLT5zdGFydCA9IDA7CisJCX0KKwkJcGNpX2Rpc2FibGVfYnJpZGdlX3dpbmRvdyhkZXYpOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19yZXNvdXJjZV9hbGlnbm1lbnQpOworCiAvKiBUaGUgTWVsbGFub3ggVGF2b3IgZGV2aWNlIGdpdmVzIGZhbHNlIHBvc2l0aXZlIHBhcml0eSBlcnJvcnMKICAqIE1hcmsgdGhpcyBkZXZpY2Ugd2l0aCBhIGJyb2tlbl9wYXJpdHlfc3RhdHVzLCB0byBhbGxvdwogICogUENJIHNjYW5uaW5nIGNvZGUgdG8gInNraXAiIHRoaXMgbm93IGJsYWNrbGlzdGVkIGRldmljZS4KQEAgLTExMjYsMTAgKzExODYsMTUgQEAKIAkJCQkgKiBpdHMgb24tYm9hcmQgVkdBIGNvbnRyb2xsZXIgKi8KIAkJCQlhc3VzX2hpZGVzX3NtYnVzID0gMTsKIAkJCX0KLQkJZWxzZSBpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcpCisJCWVsc2UgaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8yKQogCQkJc3dpdGNoKGRldi0+c3Vic3lzdGVtX2RldmljZSkgewogCQkJY2FzZSAweDAwYjg6IC8qIENvbXBhcSBFdm8gRDUxMCBDTVQgKi8KIAkJCWNhc2UgMHgwMGI5OiAvKiBDb21wYXEgRXZvIEQ1MTAgU0ZGICovCisJCQkJLyogTW90aGVyYm9hcmQgZG9lc24ndCBoYXZlIEhvc3QgYnJpZGdlCisJCQkJICogc3VidmVuZG9yL3N1YmRldmljZSBJRHMgYW5kIG9uLWJvYXJkIFZHQQorCQkJCSAqIGNvbnRyb2xsZXIgaXMgZGlzYWJsZWQgaWYgYW4gQUdQIGNhcmQgaXMKKwkJCQkgKiBpbnNlcnRlZCwgdGhlcmVmb3JlIGNoZWNraW5nIFVTQiBVSENJCisJCQkJICogQ29udHJvbGxlciAjMSAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQogCQllbHNlIGlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X0NHQykKQEAgLTExNTQsNyArMTIxOSw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCLCBhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2UpOwogCiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzMsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzIsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgxNV9DR0MsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSk7CiAKIHN0YXRpYyB2b2lkIGFzdXNfaGlkZXNfc21idXNfbHBjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0xNjY0LDkgKzE3MjksMTMgQEAKIAkgKiBvZiBwYXJhbGxlbCBwb3J0cyBhbmQgPFM+IGlzIHRoZSBudW1iZXIgb2Ygc2VyaWFsIHBvcnRzLgogCSAqLwogCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzU6CisJCS8qIFdlbGwsIHRoaXMgcnVsZSBkb2Vzbid0IGhvbGQgZm9yIHRoZSBmb2xsb3dpbmcgOTgzNSBkZXZpY2UgKi8KKwkJaWYgKGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lCTSAmJgorCQkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAyOTkpCisJCQlyZXR1cm47CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FVE1PU185NzM1OgogCWNhc2UgUENJX0RFVklDRV9JRF9ORVRNT1NfOTc0NToKLQljYXNlIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzU6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1OgogCWNhc2UgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NToKIAkJaWYgKChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX1NFUklBTCAmJgpAQCAtMjA3OCw2ICsyMTQ3LDkyIEBACiAJCQlQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTUsCiAJCQludmVuZXRfbXNpX2Rpc2FibGUpOwogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBodF9jaGVja19tc2lfbWFwcGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3MsIHR0bCA9IDQ4OworCWludCBmb3VuZCA9IDA7CisKKwkvKiBjaGVjayBpZiB0aGVyZSBpcyBIVCBNU0kgY2FwIG9yIGVuYWJsZWQgb24gdGhpcyBkZXZpY2UgKi8KKwlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGRldiwgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7CisJd2hpbGUgKHBvcyAmJiB0dGwtLSkgeworCQl1OCBmbGFnczsKKworCQlpZiAoZm91bmQgPCAxKQorCQkJZm91bmQgPSAxOworCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCisJCQkJCSAmZmxhZ3MpID09IDApIHsKKwkJCWlmIChmbGFncyAmIEhUX01TSV9GTEFHU19FTkFCTEUpIHsKKwkJCQlpZiAoZm91bmQgPCAyKSB7CisJCQkJCWZvdW5kID0gMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCXBvcyA9IHBjaV9maW5kX25leHRfaHRfY2FwYWJpbGl0eShkZXYsIHBvcywKKwkJCQkJCSAgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBob3N0X2JyaWRnZV93aXRoX2xlYWYoc3RydWN0IHBjaV9kZXYgKmhvc3RfYnJpZGdlKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IHBvczsKKwlpbnQgaSwgZGV2X25vOworCWludCBmb3VuZCA9IDA7CisKKwlkZXZfbm8gPSBob3N0X2JyaWRnZS0+ZGV2Zm4gPj4gMzsKKwlmb3IgKGkgPSBkZXZfbm8gKyAxOyBpIDwgMHgyMDsgaSsrKSB7CisJCWRldiA9IHBjaV9nZXRfc2xvdChob3N0X2JyaWRnZS0+YnVzLCBQQ0lfREVWRk4oaSwgMCkpOworCQlpZiAoIWRldikKKwkJCWNvbnRpbnVlOworCisJCS8qIGZvdW5kIG5leHQgaG9zdCBicmlkZ2UgPyovCisJCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoZGV2LCBIVF9DQVBUWVBFX1NMQVZFKTsKKwkJaWYgKHBvcyAhPSAwKSB7CisJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaHRfY2hlY2tfbXNpX21hcHBpbmcoZGV2KSkgeworCQkJZm91bmQgPSAxOworCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCWJyZWFrOworCQl9CisJCXBjaV9kZXZfcHV0KGRldik7CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisjZGVmaW5lIFBDSV9IVF9DQVBfU0xBVkVfQ1RSTDAgICAgIDQgICAgLyogbGluayBjb250cm9sICovCisjZGVmaW5lIFBDSV9IVF9DQVBfU0xBVkVfQ1RSTDEgICAgIDggICAgLyogbGluayBjb250cm9sIHRvICovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlzX2VuZF9vZl9odF9jaGFpbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3MsIGN0cmxfb2ZmOworCWludCBlbmQgPSAwOworCXUxNiBmbGFncywgY3RybDsKKworCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoZGV2LCBIVF9DQVBUWVBFX1NMQVZFKTsKKworCWlmICghcG9zKQorCQlnb3RvIG91dDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0NBUF9GTEFHUywgJmZsYWdzKTsKKworCWN0cmxfb2ZmID0gKChmbGFncyA+PiAxMCkgJiAxKSA/CisJCQlQQ0lfSFRfQ0FQX1NMQVZFX0NUUkwwIDogUENJX0hUX0NBUF9TTEFWRV9DVFJMMTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIGN0cmxfb2ZmLCAmY3RybCk7CisKKwlpZiAoY3RybCAmICgxIDw8IDYpKQorCQllbmQgPSAxOworCitvdXQ6CisJcmV0dXJuIGVuZDsKK30KKwogc3RhdGljIHZvaWQgX19kZXZpbml0IG52X2h0X2VuYWJsZV9tc2lfbWFwcGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpob3N0X2JyaWRnZTsKQEAgLTIxMDIsNiArMjI1NywxMSBAQAogCWlmICghZm91bmQpCiAJCXJldHVybjsKIAorCS8qIGRvbid0IGVuYWJsZSBlbmRfZGV2aWNlL2hvc3RfYnJpZGdlIHdpdGggbGVhZiBkaXJlY3RseSBoZXJlICovCisJaWYgKGhvc3RfYnJpZGdlID09IGRldiAmJiBpc19lbmRfb2ZfaHRfY2hhaW4oaG9zdF9icmlkZ2UpICYmCisJICAgIGhvc3RfYnJpZGdlX3dpdGhfbGVhZihob3N0X2JyaWRnZSkpCisJCWdvdG8gb3V0OworCiAJLyogcm9vdCBkaWQgdGhhdCAhICovCiAJaWYgKG1zaV9odF9jYXBfZW5hYmxlZChob3N0X2JyaWRnZSkpCiAJCWdvdG8gb3V0OwpAQCAtMjEzMiw0NCArMjI5MiwxMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaHRfY2hlY2tfbXNpX21hcHBpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgcG9zLCB0dGwgPSA0ODsKLQlpbnQgZm91bmQgPSAwOwotCi0JLyogY2hlY2sgaWYgdGhlcmUgaXMgSFQgTVNJIGNhcCBvciBlbmFibGVkIG9uIHRoaXMgZGV2aWNlICovCi0JcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOwotCXdoaWxlIChwb3MgJiYgdHRsLS0pIHsKLQkJdTggZmxhZ3M7Ci0KLQkJaWYgKGZvdW5kIDwgMSkKLQkJCWZvdW5kID0gMTsKLQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgSFRfTVNJX0ZMQUdTLAotCQkJCQkgJmZsYWdzKSA9PSAwKSB7Ci0JCQlpZiAoZmxhZ3MgJiBIVF9NU0lfRkxBR1NfRU5BQkxFKSB7Ci0JCQkJaWYgKGZvdW5kIDwgMikgewotCQkJCQlmb3VuZCA9IDI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlwb3MgPSBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoZGV2LCBwb3MsCi0JCQkJCQkgIEhUX0NBUFRZUEVfTVNJX01BUFBJTkcpOwotCX0KLQotCXJldHVybiBmb3VuZDsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IG52X21zaV9odF9jYXBfcXVpcmsoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBfX252X21zaV9odF9jYXBfcXVpcmsoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGFsbCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2U7CiAJaW50IHBvczsKIAlpbnQgZm91bmQ7CiAKLQkvKiBFbmFibGluZyBIVCBNU0kgbWFwcGluZyBvbiB0aGlzIGRldmljZSBicmVha3MgTUNQNTEgKi8KLQlpZiAoZGV2LT5kZXZpY2UgPT0gMHgyNzApCi0JCXJldHVybjsKLQogCS8qIGNoZWNrIGlmIHRoZXJlIGlzIEhUIE1TSSBjYXAgb3IgZW5hYmxlZCBvbiB0aGlzIGRldmljZSAqLwogCWZvdW5kID0gaHRfY2hlY2tfbXNpX21hcHBpbmcoZGV2KTsKIApAQCAtMjE5Myw3ICsyMzIxLDEwIEBACiAJCS8qIEhvc3QgYnJpZGdlIGlzIHRvIEhUICovCiAJCWlmIChmb3VuZCA9PSAxKSB7CiAJCQkvKiBpdCBpcyBub3QgZW5hYmxlZCwgdHJ5IHRvIGVuYWJsZSBpdCAqLwotCQkJbnZfaHRfZW5hYmxlX21zaV9tYXBwaW5nKGRldik7CisJCQlpZiAoYWxsKQorCQkJCWh0X2VuYWJsZV9tc2lfbWFwcGluZyhkZXYpOworCQkJZWxzZQorCQkJCW52X2h0X2VuYWJsZV9tc2lfbWFwcGluZyhkZXYpOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC0yMjA1LDggKzIzMzYsMjAgQEAKIAkvKiBIb3N0IGJyaWRnZSBpcyBub3QgdG8gSFQsIGRpc2FibGUgSFQgTVNJIG1hcHBpbmcgb24gdGhpcyBkZXZpY2UgKi8KIAlodF9kaXNhYmxlX21zaV9tYXBwaW5nKGRldik7CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCwgbnZfbXNpX2h0X2NhcF9xdWlyayk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrKTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IG52X21zaV9odF9jYXBfcXVpcmtfYWxsKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIF9fbnZfbXNpX2h0X2NhcF9xdWlyayhkZXYsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbnZfbXNpX2h0X2NhcF9xdWlya19sZWFmKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIF9fbnZfbXNpX2h0X2NhcF9xdWlyayhkZXYsIDApOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0FOWV9JRCwgbnZfbXNpX2h0X2NhcF9xdWlya19sZWFmKTsKKworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0FOWV9JRCwgbnZfbXNpX2h0X2NhcF9xdWlya19hbGwpOwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbXNpX2ludHhfZGlzYWJsZV9idWcoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JlbW92ZS5jIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKaW5kZXggMDQyZTA4OS4uODY1MDNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKysrIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKQEAgLTcxLDYgKzcxLDkgQEAKIAlkb3duX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAJbGlzdF9kZWwoJnBjaV9idXMtPm5vZGUpOwogCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7CisJaWYgKCFwY2lfYnVzLT5pc19hZGRlZCkKKwkJcmV0dXJuOworCiAJcGNpX3JlbW92ZV9sZWdhY3lfZmlsZXMocGNpX2J1cyk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwY2lfYnVzLT5kZXYsICZkZXZfYXR0cl9jcHVhZmZpbml0eSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwY2lfYnVzLT5kZXYsICZkZXZfYXR0cl9jcHVsaXN0YWZmaW5pdHkpOwpAQCAtOTIsNiArOTUsNyBAQAogICovCiB2b2lkIHBjaV9yZW1vdmVfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXBjaV9zdG9wX2J1c19kZXZpY2UoZGV2KTsKIAlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkgewogCQlzdHJ1Y3QgcGNpX2J1cyAqYiA9IGRldi0+c3Vib3JkaW5hdGU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggNWFmOGJkNS4uNzEwZDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlpZiAocGRldi0+aXNfcGNpZSkKIAkJcmV0dXJuIE5VTEw7CiAJd2hpbGUgKDEpIHsKLQkJaWYgKCFwZGV2LT5idXMtPnNlbGYpCisJCWlmICghcGRldi0+YnVzLT5wYXJlbnQpCiAJCQlicmVhazsKIAkJcGRldiA9IHBkZXYtPmJ1cy0+c2VsZjsKIAkJLyogYSBwMnAgYnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCmluZGV4IDcwNDYwODkuLjMzNDI4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAKLXN0YXRpYyB2b2lkIHBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoc3RydWN0IHBjaV9idXMgKmJ1cykKK3N0YXRpYyB2b2lkIHBidXNfYXNzaWduX3Jlc291cmNlc19zb3J0ZWQoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMTQ0LDYgKzE0NCw5IEBACiAJc3RydWN0IHBjaV9idXNfcmVnaW9uIHJlZ2lvbjsKIAl1MzIgbCwgYnUsIGx1LCBpb191cHBlcjE2OwogCisJaWYgKCFwY2lfaXNfcm9vdF9idXMoYnVzKSAmJiBidXMtPmlzX2FkZGVkKQorCQlyZXR1cm47CisKIAlkZXZfaW5mbygmYnJpZGdlLT5kZXYsICJQQ0kgYnJpZGdlLCBzZWNvbmRhcnkgYnVzICUwNHg6JTAyeFxuIiwKIAkJIHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIpOwogCkBAIC00OTUsNyArNDk4LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2J1c19zaXplX2JyaWRnZXMpOwogCi12b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQordm9pZCBfX3JlZiBwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwppbmRleCAzMmU4ZDg4Li4zMDM5ZmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYwpAQCAtMTIwLDYgKzEyMCwyMSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJX1FVSVJLUwordm9pZCBwY2lfZGlzYWJsZV9icmlkZ2Vfd2luZG93KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJZGV2X2RiZygmZGV2LT5kZXYsICJEaXNhYmxpbmcgYnJpZGdlIHdpbmRvdy5cbiIpOworCisJLyogTU1JTyBCYXNlL0xpbWl0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9NRU1PUllfQkFTRSwgMHgwMDAwZmZmMCk7CisKKwkvKiBQcmVmZXRjaGFibGUgTU1JTyBCYXNlL0xpbWl0ICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUkVGX0xJTUlUX1VQUEVSMzIsIDApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgMHgwMDAwZmZmMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUkVGX0JBU0VfVVBQRVIzMiwgMHhmZmZmZmZmZik7Cit9CisjZW5kaWYJLyogQ09ORklHX1BDSV9RVUlSS1MgKi8KKwogaW50IHBjaV9hc3NpZ25fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQogewogCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Nsb3QuYyBiL2RyaXZlcnMvcGNpL3Nsb3QuYwppbmRleCA1YThjY2I0Li4yMTE4OTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zbG90LmMKKysrIGIvZHJpdmVycy9wY2kvc2xvdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIGRyaXZlcnMvcGNpL3Nsb3QuYwogICogQ29weXJpZ2h0IChDKSAyMDA2IE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiAJQWxleCBDaGlhbmcgPGFjaGlhbmdAaHAuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCUFsZXggQ2hpYW5nIDxhY2hpYW5nQGhwLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgpAQCAtNTIsOCArNTIsOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9zbG90ICpzbG90ID0gdG9fcGNpX3Nsb3Qoa29iaik7CiAKLQlwcl9kZWJ1ZygiJXM6IHJlbGVhc2luZyBwY2lfc2xvdCBvbiAleDolZFxuIiwgX19mdW5jX18sCi0JCSBzbG90LT5idXMtPm51bWJlciwgc2xvdC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZzbG90LT5idXMtPmRldiwgImRldiAlMDJ4LCByZWxlYXNlZCBwaHlzaWNhbCBzbG90ICVzXG4iLAorCQlzbG90LT5udW1iZXIsIHBjaV9zbG90X25hbWUoc2xvdCkpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzbG90LT5idXMtPmRldmljZXMsIGJ1c19saXN0KQogCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gc2xvdC0+bnVtYmVyKQpAQCAtMjQ4LDkgKzI0OCw4IEBACiAJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSBzbG90X25yKQogCQkJZGV2LT5zbG90ID0gc2xvdDsKIAotCS8qIERvbid0IGNhcmUgaWYgZGVidWcgcHJpbnRrIGhhcyBhIC0xIGZvciBzbG90X25yICovCi0JcHJfZGVidWcoIiVzOiBjcmVhdGVkIHBjaV9zbG90IG9uICUwNHg6JTAyeDolMDJ4XG4iLAotCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcGFyZW50LT5udW1iZXIsIHNsb3RfbnIpOworCWRldl9kYmcoJnBhcmVudC0+ZGV2LCAiZGV2ICUwMngsIGNyZWF0ZWQgcGh5c2ljYWwgc2xvdCAlc1xuIiwKKwkJc2xvdF9uciwgcGNpX3Nsb3RfbmFtZShzbG90KSk7CiAKIG91dDoKIAlrZnJlZShzbG90X25hbWUpOwpAQCAtMjk5LDkgKzI5OCw4IEBACiAgKi8KIHZvaWQgcGNpX2Rlc3Ryb3lfc2xvdChzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QpCiB7Ci0JcHJfZGVidWcoIiVzOiBkZWMgcmVmY291bnQgdG8gJWQgb24gJTA0eDolMDJ4OiUwMnhcbiIsIF9fZnVuY19fLAotCQkgYXRvbWljX3JlYWQoJnNsb3QtPmtvYmoua3JlZi5yZWZjb3VudCkgLSAxLAotCQkgcGNpX2RvbWFpbl9ucihzbG90LT5idXMpLCBzbG90LT5idXMtPm51bWJlciwgc2xvdC0+bnVtYmVyKTsKKwlkZXZfZGJnKCZzbG90LT5idXMtPmRldiwgImRldiAlMDJ4LCBkZWMgcmVmY291bnQgdG8gJWRcbiIsCisJCXNsb3QtPm51bWJlciwgYXRvbWljX3JlYWQoJnNsb3QtPmtvYmoua3JlZi5yZWZjb3VudCkgLSAxKTsKIAogCWRvd25fd3JpdGUoJnBjaV9idXNfc2VtKTsKIAlrb2JqZWN0X3B1dCgmc2xvdC0+a29iaik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA0ZWQ2NGQ4Li41MTQzYTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJCQkgICAgICAgc3RydWN0IHBjbWNpYV9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50IGNkID0gc2t0LT5uciA/IEdQSU9fUENNQ0lBX1MxX0NEX1ZBTElEIDogR1BJT19QQ01DSUFfUzBfQ0RfVkFMSUQ7Ci0JaW50IHJkeSA9IHNrdC0+bnIgPyBHUElPX1BDTUNJQV9TMF9SRFlJTlQgOiBHUElPX1BDTUNJQV9TMV9SRFlJTlQ7CisJaW50IHJkeSA9IHNrdC0+bnIgPyBHUElPX1BDTUNJQV9TMV9SRFlJTlQgOiBHUElPX1BDTUNJQV9TMF9SRFlJTlQ7CiAKIAlzdGF0ZS0+ZGV0ZWN0ID0gIWdwaW9fZ2V0X3ZhbHVlKGNkKTsKIAlzdGF0ZS0+cmVhZHkgID0gISFncGlvX2dldF92YWx1ZShyZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwppbmRleCBkNjNmMjZlLi5iYTFmNzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwpAQCAtOTg3LDcgKzk4Nyw2IEBACiAJcHJvYy0+d3JpdGVfcHJvYyA9IHdyaXRlZnVuYzsKIAlwcm9jLT5yZWFkX3Byb2MgPSByZWFkZnVuYzsKIAlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcHJvYy0+dWlkID0gYXN1c191aWQ7CiAJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJcmV0dXJuIDA7CkBAIC0xMDIwLDcgKzEwMTksNiBAQAogCWlmIChwcm9jKSB7CiAJCXByb2MtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9pbmZvOwogCQlwcm9jLT5kYXRhID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCQlwcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAkJcHJvYy0+Z2lkID0gYXN1c19naWQ7CiAJfSBlbHNlIHsKQEAgLTE0MzYsNyArMTQzNCw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiQXN1cyBBQ1BJOiBVbmFibGUgdG8gY3JlYXRlIC9wcm9jIGVudHJ5XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFzdXNfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwppbmRleCAxNmUxMWMyLi5hZjlmNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWRhX251bV90b2tlbnMgKz0gdG9rZW5zOwogfQogCi1zdGF0aWMgdm9pZCBmaW5kX3Rva2Vucyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0pCitzdGF0aWMgdm9pZCBmaW5kX3Rva2Vucyhjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqZG0sIHZvaWQgKmR1bW15KQogewogCXN3aXRjaCAoZG0tPnR5cGUpIHsKIAljYXNlIDB4ZDQ6IC8qIEluZGV4ZWQgSU8gKi8KQEAgLTM1Niw3ICszNTYsNyBAQAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShkZWxsX2RldmljZV90YWJsZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZG1pX3dhbGsoZmluZF90b2tlbnMpOworCWRtaV93YWxrKGZpbmRfdG9rZW5zLCBOVUxMKTsKIAogCWlmICghZGFfdG9rZW5zKSAgewogCQlwcmludGsoS0VSTl9JTkZPICJkZWxsLWxhcHRvcDogVW5hYmxlIHRvIGZpbmQgZG1pIHRva2Vuc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggODE0Y2I2NS4uZDk5ZjFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtNjk5Miw3ICs2OTkyLDYgQEAKIAkJCXJldCA9IC1FTk9ERVY7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWVudHJ5LT5kYXRhID0gaWJtOwogCQllbnRyeS0+cmVhZF9wcm9jID0gJmRpc3BhdGNoX3Byb2Nmc19yZWFkOwogCQlpZiAoaWJtLT53cml0ZSkKQEAgLTc0MDUsNyArNzQwNCw2IEBACiAJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0cGFjcGlfcGRyaXZlcik7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCA0MGU2MGZjLi45ZjE4NzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtNjc5LDggKzY3OSw2IEBACiAJCQkJCSAgICAgIHRvc2hpYmFfcHJvY19kaXIsCiAJCQkJCSAgICAgIChyZWFkX3Byb2NfdCAqKSBkaXNwYXRjaF9yZWFkLAogCQkJCQkgICAgICBpdGVtKTsKLQkJaWYgKHByb2MpCi0JCQlwcm9jLT5vd25lciA9IFRISVNfTU9EVUxFOwogCQlpZiAocHJvYyAmJiBpdGVtLT53cml0ZV9mdW5jKQogCQkJcHJvYy0+d3JpdGVfcHJvYyA9ICh3cml0ZV9wcm9jX3QgKikgZGlzcGF0Y2hfd3JpdGU7CiAJfQpAQCAtNzcyLDcgKzc3MCw2IEBACiAJCXRvc2hpYmFfYWNwaV9leGl0KCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7Ci0JCXRvc2hpYmFfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXN0YXR1cyA9IGFkZF9kZXZpY2UoKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQl0b3NoaWJhX2FjcGlfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwppbmRleCA5OTZmNjQ4Li5jZmU4Njg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwpAQCAtOTQsNyArOTQsNiBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAotc3RhdGljIGludCB1bmxvYWRpbmcgPSAwOwogc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHVubG9hZF9zZW07CiAKIC8qCkBAIC0xNTgsNyArMTU3LDcgQEAKIAlpbnQgZG9ja2VkID0gLTEsIGQgPSAwOwogCiAJc2V0X2ZyZWV6YWJsZSgpOwotCXdoaWxlICghdW5sb2FkaW5nKSB7CisJd2hpbGUgKDEpIHsKIAkJaW50IHN0YXR1czsKIAogCQkvKgpAQCAtNTc1LDggKzU3NCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBucGJpb3NfdGhyZWFkX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19QUEMpCiAJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoUE5QQklPU19CQVNFKSkKIAkJcmV0dXJuIDA7CkBAIC01ODQsMTAgKzU4MSwxMyBAQAogCWlmIChwbnBiaW9zX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKICNpZmRlZiBDT05GSUdfSE9UUExVRwotCWluaXRfY29tcGxldGlvbigmdW5sb2FkX3NlbSk7Ci0JdGFzayA9IGt0aHJlYWRfcnVuKHBucF9kb2NrX3RocmVhZCwgTlVMTCwgImtwbnBiaW9zZCIpOwotCWlmICghSVNfRVJSKHRhc2spKQotCQl1bmxvYWRpbmcgPSAwOworCXsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCQlpbml0X2NvbXBsZXRpb24oJnVubG9hZF9zZW0pOworCQl0YXNrID0ga3RocmVhZF9ydW4ocG5wX2RvY2tfdGhyZWFkLCBOVUxMLCAia3BucGJpb3NkIik7CisJCWlmIChJU19FUlIodGFzaykpCisJCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKKwl9CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3BzM2F2LmMgYi9kcml2ZXJzL3BzMy9wczNhdi5jCmluZGV4IDUzMjQ5NzguLjIzNWU4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3BzM2F2LmMKKysrIGIvZHJpdmVycy9wczMvcHMzYXYuYwpAQCAtODM4LDcgKzgzOCw3IEBACiB9CiAKIC8qIHNldCBtb2RlIHVzaW5nIGlkICovCi1pbnQgcHMzYXZfc2V0X3ZpZGVvX21vZGUodTMyIGlkKQoraW50IHBzM2F2X3NldF92aWRlb19tb2RlKGludCBpZCkKIHsKIAlpbnQgc2l6ZTsKIAl1MzIgb3B0aW9uOwpAQCAtOTQwLDcgKzk0MCw3IEBACiBzdGF0aWMgaW50IHBzM2F2X3Byb2JlKHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzOwotCXUzMiBpZDsKKwlpbnQgaWQ7CiAKIAlkZXZfZGJnKCZkZXYtPmNvcmUsICIgLT4gJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiICB0aW1lb3V0PSVkXG4iLCB0aW1lb3V0KTsKQEAgLTk2Miw4ICs5NjIsMTAgQEAKIAlpbml0X2NvbXBsZXRpb24oJnBzM2F2LT5kb25lKTsKIAljb21wbGV0ZSgmcHMzYXYtPmRvbmUpOwogCXBzM2F2LT53cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJwczNhdmQiKTsKLQlpZiAoIXBzM2F2LT53cSkKKwlpZiAoIXBzM2F2LT53cSkgeworCQlyZXMgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CisJfQogCiAJc3dpdGNoIChwczNfb3NfYXJlYV9nZXRfYXZfbXVsdGlfb3V0KCkpIHsKIAljYXNlIFBTM19QQVJBTV9BVl9NVUxUSV9PVVRfTlRTQzoKQEAgLTk5NCw2ICs5OTYsMTIgQEAKIAkJc2FmZV9tb2RlID0gMTsKICNlbmRpZiAvKiBDT05GSUdfRkIgKi8KIAlpZCA9IHBzM2F2X2F1dG9fdmlkZW9tb2RlKCZwczNhdi0+YXZfaHdfY29uZik7CisJaWYgKGlkIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIGlkIDolZFxuIiwgX19mdW5jX18sIGlkKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKwogCXNhZmVfbW9kZSA9IDA7CiAKIAltdXRleF9sb2NrKCZwczNhdi0+bXV0ZXgpOwpAQCAtMTAwNyw3ICsxMDE1LDcgQEAKIGZhaWw6CiAJa2ZyZWUocHMzYXYpOwogCXBzM2F2ID0gTlVMTDsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50IHBzM2F2X3JlbW92ZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCBlN2UwY2YxLi5lNThjMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTI5LDggKzI5LDEyIEBACiAJICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0LgogCiBjb25maWcgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKLQl0cmlzdGF0ZQorCXRyaXN0YXRlICJGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0IgogCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9ycywKKwkgIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aGljaCB1c2UgYSBjb21iaW5hdGlvbiBvZiBzb2Z0d2FyZQorCSAgbWFuYWdlZCByZWd1bGF0b3JzIGFuZCBzaW1wbGUgbm9uLWNvbmZpZ3VyYWJsZSByZWd1bGF0b3JzLgogCiBjb25maWcgUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIKIAl0cmlzdGF0ZSAiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydCIKQEAgLTUyLDYgKzU2LDEzIEBACiAJICBjaGFyZ2luZyBzZWxlY3QgYmV0d2VlbiAxMDAgbUEgYW5kIDUwMCBtQSBjaGFyZ2luZyBjdXJyZW50CiAJICBsaW1pdC4KIAorY29uZmlnIFJFR1VMQVRPUl9UV0w0MDMwCisJYm9vbCAiVEkgVFdMNDAzMC9UV0w1MDMwL1RQUzY5NXgwIFBNSUMiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgdm9sdGFnZSByZWd1bGF0b3JzIHByb3ZpZGVkIGJ5CisJICB0aGlzIGZhbWlseSBvZiBjb21wYW5pb24gY2hpcHMuCisKIGNvbmZpZyBSRUdVTEFUT1JfV004MzUwCiAJdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmNpcyBXTTgzNTAgQXVkaW9QbHVzIFBNSUMiCiAJZGVwZW5kcyBvbiBNRkRfV004MzUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDYxYjMwYzYuLmJhYzEzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSKSArPSB2aXJ0dWFsLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyKSArPSBicTI0MDIyLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMCkgKz0gdHdsNDAzMC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzNTApICs9IHdtODM1MC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg0MDApICs9IHdtODQwMC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9EQTkwM1gpCSs9IGRhOTAzeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMKaW5kZXggYzE3NWUzOC4uN2VjYjgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2JxMjQwMjIuYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2lzZXQyLCAwKTsKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fbmNlLCAxKTsKIAotCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgJnBkZXYtPmRldiwgcGRhdGEpOworCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgJnBkZXYtPmRldiwKKwkJCQkgICAgIHBkYXRhLT5pbml0X2RhdGEsIHBkYXRhKTsKIAlpZiAoSVNfRVJSKGJxMjQwMjIpKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IFBUUl9FUlIoYnEyNDAyMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZjUxMWE0MC4uMDFmNzcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMjgsMzMgKzI4LDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChyZWd1bGF0b3JfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKHJlZ3VsYXRvcl9tYXBfbGlzdCk7Ci0KLS8qCi0gKiBzdHJ1Y3QgcmVndWxhdG9yX2RldgotICoKLSAqIFZvbHRhZ2UgLyBDdXJyZW50IHJlZ3VsYXRvciBjbGFzcyBkZXZpY2UuIE9uZSBmb3IgZWFjaCByZWd1bGF0b3IuCi0gKi8KLXN0cnVjdCByZWd1bGF0b3JfZGV2IHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2M7Ci0JaW50IHVzZV9jb3VudDsKLQotCS8qIGxpc3RzIHdlIGJlbG9uZyB0byAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogbGlzdCBvZiBhbGwgcmVndWxhdG9ycyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7IC8qIGxpc3Qgb2Ygc3VwcGxpZWQgcmVndWxhdG9ycyAqLwotCi0JLyogbGlzdHMgd2Ugb3duICovCi0Jc3RydWN0IGxpc3RfaGVhZCBjb25zdW1lcl9saXN0OyAvKiBjb25zdW1lcnMgd2Ugc3VwcGx5ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzdXBwbHlfbGlzdDsgLyogcmVndWxhdG9ycyB3ZSBzdXBwbHkgKi8KLQotCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIG5vdGlmaWVyOwotCXN0cnVjdCBtdXRleCBtdXRleDsgLyogY29uc3VtZXIgbG9jayAqLwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXN0cnVjdCBkZXZpY2UgZGV2OwotCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjb25zdHJhaW50czsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqc3VwcGx5OwkvKiBmb3IgdHJlZSAqLwotCi0Jdm9pZCAqcmVnX2RhdGE7CQkvKiByZWd1bGF0b3JfZGV2IGRhdGEgKi8KLX07CitzdGF0aWMgaW50IGhhc19mdWxsX2NvbnN0cmFpbnRzOwogCiAvKgogICogc3RydWN0IHJlZ3VsYXRvcl9tYXAKQEAgLTc5LDcgKzUzLDYgQEAKIAlpbnQgdUFfbG9hZDsKIAlpbnQgbWluX3VWOwogCWludCBtYXhfdVY7Ci0JaW50IGVuYWJsZWQ7IC8qIGNvdW50IG9mIGNsaWVudCBlbmFibGVzICovCiAJY2hhciAqc3VwcGx5X25hbWU7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CkBAIC0zMTIsNiArMjg1LDQ3IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA0NDQsIHJlZ3VsYXRvcl9zdGF0ZV9zaG93LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHN0YXR1czsKKwljaGFyICpsYWJlbDsKKworCXN0YXR1cyA9IHJkZXYtPmRlc2MtPm9wcy0+Z2V0X3N0YXR1cyhyZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX09GRjoKKwkJbGFiZWwgPSAib2ZmIjsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX09OOgorCQlsYWJlbCA9ICJvbiI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19FUlJPUjoKKwkJbGFiZWwgPSAiZXJyb3IiOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9TVEFUVVNfRkFTVDoKKwkJbGFiZWwgPSAiZmFzdCI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19OT1JNQUw6CisJCWxhYmVsID0gIm5vcm1hbCI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19JRExFOgorCQlsYWJlbCA9ICJpZGxlIjsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX1NUQU5EQlk6CisJCWxhYmVsID0gInN0YW5kYnkiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbGFiZWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgMDQ0NCwgcmVndWxhdG9yX3N0YXR1c19zaG93LCBOVUxMKTsKKwogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21pbl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY3OCw2ICs2OTIsNzMgQEAKIAllbHNlCiAJCW5hbWUgPSAicmVndWxhdG9yIjsKIAorCS8qIGNvbnN0cmFpbiBtYWNoaW5lLWxldmVsIHZvbHRhZ2Ugc3BlY3MgdG8gZml0CisJICogdGhlIGFjdHVhbCByYW5nZSBzdXBwb3J0ZWQgYnkgdGhpcyByZWd1bGF0b3IuCisJICovCisJaWYgKG9wcy0+bGlzdF92b2x0YWdlICYmIHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMpIHsKKwkJaW50CWNvdW50ID0gcmRldi0+ZGVzYy0+bl92b2x0YWdlczsKKwkJaW50CWk7CisJCWludAltaW5fdVYgPSBJTlRfTUFYOworCQlpbnQJbWF4X3VWID0gSU5UX01JTjsKKwkJaW50CWNtaW4gPSBjb25zdHJhaW50cy0+bWluX3VWOworCQlpbnQJY21heCA9IGNvbnN0cmFpbnRzLT5tYXhfdVY7CisKKwkJLyogaXQncyBzYWZlIHRvIGF1dG9jb25maWd1cmUgZml4ZWQtdm9sdGFnZSBzdXBwbGllcyAqLworCQlpZiAoY291bnQgPT0gMSAmJiAhY21pbikgeworCQkJY21pbiA9IElOVF9NSU47CisJCQljbWF4ID0gSU5UX01BWDsKKwkJfQorCisJCS8qIHZvbHRhZ2UgY29uc3RyYWludHMgYXJlIG9wdGlvbmFsICovCisJCWlmICgoY21pbiA9PSAwKSAmJiAoY21heCA9PSAwKSkKKwkJCWdvdG8gb3V0OworCisJCS8qIGVsc2UgcmVxdWlyZSBleHBsaWNpdCBtYWNoaW5lLWxldmVsIGNvbnN0cmFpbnRzICovCisJCWlmIChjbWluIDw9IDAgfHwgY21heCA8PSAwIHx8IGNtYXggPCBjbWluKSB7CisJCQlwcl9lcnIoIiVzOiAlcyAnJXMnIHZvbHRhZ2UgY29uc3RyYWludHNcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAiaW52YWxpZCIsIG5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogaW5pdGlhbDogW2NtaW4uLmNtYXhdIHZhbGlkLCBbbWluX3VWLi5tYXhfdVZdIG5vdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJaW50CXZhbHVlOworCisJCQl2YWx1ZSA9IG9wcy0+bGlzdF92b2x0YWdlKHJkZXYsIGkpOworCQkJaWYgKHZhbHVlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIG1heWJlIGFkanVzdCBbbWluX3VWLi5tYXhfdVZdICovCisJCQlpZiAodmFsdWUgPj0gY21pbiAmJiB2YWx1ZSA8IG1pbl91VikKKwkJCQltaW5fdVYgPSB2YWx1ZTsKKwkJCWlmICh2YWx1ZSA8PSBjbWF4ICYmIHZhbHVlID4gbWF4X3VWKQorCQkJCW1heF91ViA9IHZhbHVlOworCQl9CisKKwkJLyogZmluYWw6IFttaW5fdVYuLm1heF91Vl0gdmFsaWQgaWZmIGNvbnN0cmFpbnRzIHZhbGlkICovCisJCWlmIChtYXhfdVYgPCBtaW5fdVYpIHsKKwkJCXByX2VycigiJXM6ICVzICclcycgdm9sdGFnZSBjb25zdHJhaW50c1xuIiwKKwkJCQkgICAgICAgX19mdW5jX18sICJ1bnN1cHBvcnRhYmxlIiwgbmFtZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiB1c2UgcmVndWxhdG9yJ3Mgc3Vic2V0IG9mIG1hY2hpbmUgY29uc3RyYWludHMgKi8KKwkJaWYgKGNvbnN0cmFpbnRzLT5taW5fdVYgPCBtaW5fdVYpIHsKKwkJCXByX2RlYnVnKCIlczogb3ZlcnJpZGUgJyVzJyAlcywgJWQgLT4gJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCAibWluX3VWIiwKKwkJCQkJY29uc3RyYWludHMtPm1pbl91ViwgbWluX3VWKTsKKwkJCWNvbnN0cmFpbnRzLT5taW5fdVYgPSBtaW5fdVY7CisJCX0KKwkJaWYgKGNvbnN0cmFpbnRzLT5tYXhfdVYgPiBtYXhfdVYpIHsKKwkJCXByX2RlYnVnKCIlczogb3ZlcnJpZGUgJyVzJyAlcywgJWQgLT4gJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCAibWF4X3VWIiwKKwkJCQkJY29uc3RyYWludHMtPm1heF91ViwgbWF4X3VWKTsKKwkJCWNvbnN0cmFpbnRzLT5tYXhfdVYgPSBtYXhfdVY7CisJCX0KKwl9CisKIAlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOwogCiAJLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCkBAIC02OTUsMTAgKzc3Niw2IEBACiAJCQl9CiAJfQogCi0JLyogYXJlIHdlIGVuYWJsZWQgYXQgYm9vdCB0aW1lIGJ5IGZpcm13YXJlIC8gYm9vdGxvYWRlciAqLwotCWlmIChyZGV2LT5jb25zdHJhaW50cy0+Ym9vdF9vbikKLQkJcmRldi0+dXNlX2NvdW50ID0gMTsKLQogCS8qIGRvIHdlIG5lZWQgdG8gc2V0dXAgb3VyIHN1c3BlbmQgc3RhdGUgKi8KIAlpZiAoY29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpIHsKIAkJcmV0ID0gc3VzcGVuZF9wcmVwYXJlKHJkZXYsIGNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKTsKQEAgLTcxMCwxMSArNzg3LDI3IEBACiAJCX0KIAl9CiAKLQkvKiBpZiBhbHdheXNfb24gaXMgc2V0IHRoZW4gdHVybiB0aGUgcmVndWxhdG9yIG9uIGlmIGl0J3Mgbm90Ci0JICogYWxyZWFkeSBvbi4gKi8KLQlpZiAoY29uc3RyYWludHMtPmFsd2F5c19vbiAmJiBvcHMtPmVuYWJsZSAmJgotCSAgICAoKG9wcy0+aXNfZW5hYmxlZCAmJiAhb3BzLT5pc19lbmFibGVkKHJkZXYpKSB8fAotCSAgICAgKCFvcHMtPmlzX2VuYWJsZWQgJiYgIWNvbnN0cmFpbnRzLT5ib290X29uKSkpIHsKKwlpZiAoY29uc3RyYWludHMtPmluaXRpYWxfbW9kZSkgeworCQlpZiAoIW9wcy0+c2V0X21vZGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHNldF9tb2RlIG9wZXJhdGlvbiBmb3IgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb3BzLT5zZXRfbW9kZShyZGV2LCBjb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogZmFpbGVkIHRvIHNldCBpbml0aWFsIG1vZGUgZm9yICVzOiAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogSWYgdGhlIGNvbnN0cmFpbnRzIHNheSB0aGUgcmVndWxhdG9yIHNob3VsZCBiZSBvbiBhdCB0aGlzIHBvaW50CisJICogYW5kIHdlIGhhdmUgY29udHJvbCB0aGVuIG1ha2Ugc3VyZSBpdCBpcyBlbmFibGVkLgorCSAqLworCWlmICgoY29uc3RyYWludHMtPmFsd2F5c19vbiB8fCBjb25zdHJhaW50cy0+Ym9vdF9vbikgJiYgb3BzLT5lbmFibGUpIHsKIAkJcmV0ID0gb3BzLT5lbmFibGUocmRldik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZW5hYmxlICVzXG4iLApAQCAtODE3LDYgKzkxMCwxOSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfbWFwICpub2RlLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7CisJCWlmIChyZGV2ID09IG5vZGUtPnJlZ3VsYXRvcikgeworCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOworCQkJa2ZyZWUobm9kZSk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKICNkZWZpbmUgUkVHX1NUUl9TSVpFCTMyCiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpjcmVhdGVfcmVndWxhdG9yKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LApAQCAtODk4LDkgKzEwMDQsMTIgQEAKICAqIEBpZDogU3VwcGx5IG5hbWUgb3IgcmVndWxhdG9yIElELgogICoKICAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKLSAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgVXNlIG9mIHN1cHBseSBuYW1lcwotICogY29uZmlndXJlZCB2aWEgcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KCkgaXMgc3Ryb25nbHkKLSAqIGVuY291cmFnZWQuCisgKiBvciBJU19FUlIoKSBjb25kaXRpb24gY29udGFpbmluZyBlcnJuby4KKyAqCisgKiBVc2Ugb2Ygc3VwcGx5IG5hbWVzIGNvbmZpZ3VyZWQgdmlhIHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseSgpIGlzCisgKiBzdHJvbmdseSBlbmNvdXJhZ2VkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3VwcGx5IG5hbWUgdXNlZAorICogc2hvdWxkIG1hdGNoIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBzdXBwbHkgYW5kL29yIHRoZSByZWxldmFudAorICogZGV2aWNlIHBpbnMgaW4gdGhlIGRhdGFzaGVldC4KICAqLwogc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewpAQCAtOTIyLDggKzEwMzEsNiBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgcmVndWxhdG9yOiAlc1xuIiwKLQkgICAgICAgaWQpOwogCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJldHVybiByZWd1bGF0b3I7CiAKQEAgLTk2MSwxMCArMTA2OCw2IEBACiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CiAKLQlpZiAoV0FSTihyZWd1bGF0b3ItPmVuYWJsZWQsICJSZWxlYXNpbmcgc3VwcGx5ICVzIHdoaWxlIGVuYWJsZWRcbiIsCi0JCQkgICAgICAgcmVndWxhdG9yLT5zdXBwbHlfbmFtZSkpCi0JCV9yZWd1bGF0b3JfZGlzYWJsZShyZGV2KTsKLQogCS8qIHJlbW92ZSBhbnkgc3lzZnMgZW50cmllcyAqLwogCWlmIChyZWd1bGF0b3ItPmRldikgewogCQlzeXNmc19yZW1vdmVfbGluaygmcmRldi0+ZGV2LmtvYmosIHJlZ3VsYXRvci0+c3VwcGx5X25hbWUpOwpAQCAtMTAzOSwxMiArMTE0Miw3IEBACiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0JaWYgKHJlZ3VsYXRvci0+ZW5hYmxlZCA9PSAwKQotCQlyZXQgPSBfcmVndWxhdG9yX2VuYWJsZShyZGV2KTsKLQllbHNlIGlmIChyZWd1bGF0b3ItPmVuYWJsZWQgPCAwKQotCQlyZXQgPSAtRUlPOwotCWlmIChyZXQgPT0gMCkKLQkJcmVndWxhdG9yLT5lbmFibGVkKys7CisJcmV0ID0gX3JlZ3VsYXRvcl9lbmFibGUocmRldik7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwNTUsNiArMTE1MywxMSBAQAogewogCWludCByZXQgPSAwOwogCisJaWYgKFdBUk4ocmRldi0+dXNlX2NvdW50IDw9IDAsCisJCQkidW5iYWxhbmNlZCBkaXNhYmxlcyBmb3IgJXNcbiIsCisJCQlyZGV2LT5kZXNjLT5uYW1lKSkKKwkJcmV0dXJuIC1FSU87CisKIAkvKiBhcmUgd2UgdGhlIGxhc3QgdXNlciBhbmQgcGVybWl0dGVkIHRvIGRpc2FibGUgPyAqLwogCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikgewogCkBAIC0xMTAzLDE2ICsxMjA2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKLQlpZiAocmVndWxhdG9yLT5lbmFibGVkID09IDEpIHsKLQkJcmV0ID0gX3JlZ3VsYXRvcl9kaXNhYmxlKHJkZXYpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZWd1bGF0b3ItPnVBX2xvYWQgPSAwOwotCX0gZWxzZSBpZiAoV0FSTihyZWd1bGF0b3ItPmVuYWJsZWQgPD0gMCwKLQkJCSJ1bmJhbGFuY2VkIGRpc2FibGVzIGZvciBzdXBwbHkgJXNcbiIsCi0JCQlyZWd1bGF0b3ItPnN1cHBseV9uYW1lKSkKLQkJcmV0ID0gLUVJTzsKLQlpZiAocmV0ID09IDApCi0JCXJlZ3VsYXRvci0+ZW5hYmxlZC0tOworCXJldCA9IF9yZWd1bGF0b3JfZGlzYWJsZShyZGV2KTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE1OSw3ICsxMjUzLDYgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7Ci0JcmVndWxhdG9yLT5lbmFibGVkID0gMDsKIAlyZWd1bGF0b3ItPnVBX2xvYWQgPSAwOwogCXJldCA9IF9yZWd1bGF0b3JfZm9yY2VfZGlzYWJsZShyZWd1bGF0b3ItPnJkZXYpOwogCW11dGV4X3VubG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7CkBAIC0xMjA0LDYgKzEyOTcsNTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9pc19lbmFibGVkKTsKIAogLyoqCisgKiByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMgLSBjb3VudCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKCkgc2VsZWN0b3JzCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKgorICogUmV0dXJucyBudW1iZXIgb2Ygc2VsZWN0b3JzLCBvciBuZWdhdGl2ZSBlcnJuby4gIFNlbGVjdG9ycyBhcmUKKyAqIG51bWJlcmVkIHN0YXJ0aW5nIGF0IHplcm8sIGFuZCB0eXBpY2FsbHkgY29ycmVzcG9uZCB0byBiaXRmaWVsZHMKKyAqIGluIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqLworaW50IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CisKKwlyZXR1cm4gcmRldi0+ZGVzYy0+bl92b2x0YWdlcyA/IDogLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyk7CisKKy8qKgorICogcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSAtIGVudW1lcmF0ZSBzdXBwb3J0ZWQgdm9sdGFnZXMKKyAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKKyAqIEBzZWxlY3RvcjogaWRlbnRpZnkgdm9sdGFnZSB0byBsaXN0CisgKiBDb250ZXh0OiBjYW4gc2xlZXAKKyAqCisgKiBSZXR1cm5zIGEgdm9sdGFnZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSgpLAorICogemVybyBpZiB0aGlzIHNlbGVjdG9yIGNvZGUgY2FuJ3QgYmUgdXNlZCBvbiB0aGlzIHN5dGVtLCBvciBhCisgKiBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yLCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldgkqcmRldiA9IHJlZ3VsYXRvci0+cmRldjsKKwlzdHJ1Y3QgcmVndWxhdG9yX29wcwkqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCWludAkJCXJldDsKKworCWlmICghb3BzLT5saXN0X3ZvbHRhZ2UgfHwgc2VsZWN0b3IgPj0gcmRldi0+ZGVzYy0+bl92b2x0YWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisJcmV0ID0gb3BzLT5saXN0X3ZvbHRhZ2UocmRldiwgc2VsZWN0b3IpOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOworCisJaWYgKHJldCA+IDApIHsKKwkJaWYgKHJldCA8IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYpCisJCQlyZXQgPSAwOworCQllbHNlIGlmIChyZXQgPiByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKQorCQkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2xpc3Rfdm9sdGFnZSk7CisKKy8qKgogICogcmVndWxhdG9yX3NldF92b2x0YWdlIC0gc2V0IHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZQogICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQogICogQG1pbl91VjogTWluaW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWCkBAIC0xMjQzLDYgKzEzODYsNyBAQAogCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOwogCiBvdXQ6CisJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwgUkVHVUxBVE9SX0VWRU5UX1ZPTFRBR0VfQ0hBTkdFLCBOVUxMKTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU0MywyMCArMTY4NywyMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX3VucmVnaXN0ZXJfbm90aWZpZXIpOwogCi0vKiBub3RpZnkgcmVndWxhdG9yIGNvbnN1bWVycyBhbmQgZG93bnN0cmVhbSByZWd1bGF0b3IgY29uc3VtZXJzICovCisvKiBub3RpZnkgcmVndWxhdG9yIGNvbnN1bWVycyBhbmQgZG93bnN0cmVhbSByZWd1bGF0b3IgY29uc3VtZXJzLgorICogTm90ZSBtdXRleCBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLgorICovCiBzdGF0aWMgdm9pZCBfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKl9yZGV2OwogCiAJLyogY2FsbCByZGV2IGNoYWluIGZpcnN0ICovCi0JbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwogCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnJkZXYtPm5vdGlmaWVyLCBldmVudCwgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAKIAkvKiBub3cgbm90aWZ5IHJlZ3VsYXRvciB3ZSBzdXBwbHkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9yZGV2LCAmcmRldi0+c3VwcGx5X2xpc3QsIHNsaXN0KQotCQlfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoX3JkZXYsICZyZGV2LT5zdXBwbHlfbGlzdCwgc2xpc3QpIHsKKwkgIG11dGV4X2xvY2soJl9yZGV2LT5tdXRleCk7CisJICBfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOworCSAgbXV0ZXhfdW5sb2NrKCZfcmRldi0+bXV0ZXgpOworCX0KIH0KIAogLyoqCkBAIC0xNzAzLDYgKzE4NTAsNyBAQAogICoKICAqIENhbGxlZCBieSByZWd1bGF0b3IgZHJpdmVycyB0byBub3RpZnkgY2xpZW50cyBhIHJlZ3VsYXRvciBldmVudCBoYXMKICAqIG9jY3VycmVkLiBXZSBhbHNvIG5vdGlmeSByZWd1bGF0b3IgY2xpZW50cyBkb3duc3RyZWFtLgorICogTm90ZSBsb2NrIG11c3QgYmUgaGVsZCBieSBjYWxsZXIuCiAgKi8KIGludCByZWd1bGF0b3Jfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCkBAIC0xNzQ0LDYgKzE4OTIsMTEgQEAKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlyZXR1cm4gc3RhdHVzOwogCX0KKwlpZiAob3BzLT5nZXRfc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdGF0dXMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJfQogCiAJLyogc29tZSBhdHRyaWJ1dGVzIGFyZSB0eXBlLXNwZWNpZmljICovCiAJaWYgKHJkZXYtPmRlc2MtPnR5cGUgPT0gUkVHVUxBVE9SX0NVUlJFTlQpIHsKQEAgLTE4MjgsMTcgKzE5ODEsMTggQEAKICAqIHJlZ3VsYXRvcl9yZWdpc3RlciAtIHJlZ2lzdGVyIHJlZ3VsYXRvcgogICogQHJlZ3VsYXRvcl9kZXNjOiByZWd1bGF0b3IgdG8gcmVnaXN0ZXIKICAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgZm9yIHRoZSByZWd1bGF0b3IKKyAqIEBpbml0X2RhdGE6IHBsYXRmb3JtIHByb3ZpZGVkIGluaXQgZGF0YSwgcGFzc2VkIHRocm91Z2ggYnkgZHJpdmVyCiAgKiBAZHJpdmVyX2RhdGE6IHByaXZhdGUgcmVndWxhdG9yIGRhdGEKICAqCiAgKiBDYWxsZWQgYnkgcmVndWxhdG9yIGRyaXZlcnMgdG8gcmVnaXN0ZXIgYSByZWd1bGF0b3IuCiAgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwogc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcl9yZWdpc3RlcihzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ3VsYXRvcl9kZXNjLAotCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJpdmVyX2RhdGEpCisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXZvaWQgKmRyaXZlcl9kYXRhKQogewogCXN0YXRpYyBhdG9taWNfdCByZWd1bGF0b3Jfbm8gPSBBVE9NSUNfSU5JVCgwKTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQsIGk7CiAKIAlpZiAocmVndWxhdG9yX2Rlc2MgPT0gTlVMTCkKQEAgLTE5NDUsNiArMjA5OSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKKwl1bnNldF9yZWd1bGF0b3Jfc3VwcGxpZXMocmRldik7CiAJbGlzdF9kZWwoJnJkZXYtPmxpc3QpOwogCWlmIChyZGV2LT5zdXBwbHkpCiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgInN1cHBseSIpOwpAQCAtMTk4OSw2ICsyMTQ0LDIzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3Jfc3VzcGVuZF9wcmVwYXJlKTsKIAogLyoqCisgKiByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHMgLSB0aGUgc3lzdGVtIGhhcyBmdWxseSBzcGVjaWZpZWQgY29uc3RyYWludHMKKyAqCisgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSB0aGUgcmVndWxhdG9yIEFQSSB0byBkaXNhYmxlIGFsbAorICogcmVndWxhdG9ycyB3aGljaCBoYXZlIGEgemVybyB1c2UgY291bnQgYW5kIGRvbid0IGhhdmUgYW4gYWx3YXlzX29uCisgKiBjb25zdHJhaW50IGluIGEgbGF0ZV9pbml0Y2FsbC4KKyAqCisgKiBUaGUgaW50ZW50aW9uIGlzIHRoYXQgdGhpcyB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaW4gYQorICogZnV0dXJlIGtlcm5lbCByZWxlYXNlIHNvIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIGZhY2lsaXR5CisgKiBub3cuCisgKi8KK3ZvaWQgcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKHZvaWQpCit7CisJaGFzX2Z1bGxfY29uc3RyYWludHMgPSAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKTsKKworLyoqCiAgKiByZGV2X2dldF9kcnZkYXRhIC0gZ2V0IHJkZXYgcmVndWxhdG9yIGRyaXZlciBkYXRhCiAgKiBAcmRldjogcmVndWxhdG9yCiAgKgpAQCAtMjA1NSwzICsyMjI3LDc3IEBACiAKIC8qIGluaXQgZWFybHkgdG8gYWxsb3cgb3VyIGNvbnN1bWVycyB0byBjb21wbGV0ZSBzeXN0ZW0gYm9vdGluZyAqLwogY29yZV9pbml0Y2FsbChyZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl9pbml0X2NvbXBsZXRlKHZvaWQpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wczsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqYzsKKwlpbnQgZW5hYmxlZCwgcmV0OworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CisKKwkvKiBJZiB3ZSBoYXZlIGEgZnVsbCBjb25maWd1cmF0aW9uIHRoZW4gZGlzYWJsZSBhbnkgcmVndWxhdG9ycworCSAqIHdoaWNoIGFyZSBub3QgaW4gdXNlIG9yIGFsd2F5c19vbi4gIFRoaXMgd2lsbCBiZWNvbWUgdGhlCisJICogZGVmYXVsdCBiZWhhdmlvdXIgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgeworCQlvcHMgPSByZGV2LT5kZXNjLT5vcHM7CisJCWMgPSByZGV2LT5jb25zdHJhaW50czsKKworCQlpZiAoYy0+bmFtZSkKKwkJCW5hbWUgPSBjLT5uYW1lOworCQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQorCQkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CisJCWVsc2UKKwkJCW5hbWUgPSAicmVndWxhdG9yIjsKKworCQlpZiAoIW9wcy0+ZGlzYWJsZSB8fCBjLT5hbHdheXNfb24pCisJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisKKwkJaWYgKHJkZXYtPnVzZV9jb3VudCkKKwkJCWdvdG8gdW5sb2NrOworCisJCS8qIElmIHdlIGNhbid0IHJlYWQgdGhlIHN0YXR1cyBhc3N1bWUgaXQncyBvbi4gKi8KKwkJaWYgKG9wcy0+aXNfZW5hYmxlZCkKKwkJCWVuYWJsZWQgPSBvcHMtPmlzX2VuYWJsZWQocmRldik7CisJCWVsc2UKKwkJCWVuYWJsZWQgPSAxOworCisJCWlmICghZW5hYmxlZCkKKwkJCWdvdG8gdW5sb2NrOworCisJCWlmIChoYXNfZnVsbF9jb25zdHJhaW50cykgeworCQkJLyogV2UgbG9nIHNpbmNlIHRoaXMgbWF5IGtpbGwgdGhlIHN5c3RlbSBpZiBpdAorCQkJICogZ29lcyB3cm9uZy4gKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmV0ID0gb3BzLT5kaXNhYmxlKHJkZXYpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogY291bGRuJ3QgZGlzYWJsZSAlczogJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCByZXQpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogVGhlIGludGVudGlvbiBpcyB0aGF0IGluIGZ1dHVyZSB3ZSB3aWxsCisJCQkgKiBhc3N1bWUgdGhhdCBmdWxsIGNvbnN0cmFpbnRzIGFyZSBwcm92aWRlZAorCQkJICogc28gd2FybiBldmVuIGlmIHdlIGFyZW4ndCBnb2luZyB0byBkbworCQkJICogYW55dGhpbmcgaGVyZS4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogaW5jb21wbGV0ZSBjb25zdHJhaW50cywgbGVhdmluZyAlcyBvblxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCX0KKwordW5sb2NrOgorCQltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKwl9CisKKwltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChyZWd1bGF0b3JfaW5pdF9jb21wbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCmluZGV4IGZlNzc3MzAuLjcyYjE1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC00NzEsNyArNDcxLDggQEAKIAlpZiAocmktPmRlc2MuaWQgPT0gREE5MDMwX0lEX0xETzEgfHwgcmktPmRlc2MuaWQgPT0gREE5MDMwX0lEX0xETzE1KQogCQlyaS0+ZGVzYy5vcHMgPSAmZGE5MDMwX3JlZ3VsYXRvcl9sZG8xXzE1X29wczsKIAotCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJpLT5kZXNjLCAmcGRldi0+ZGV2LCByaSk7CisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmktPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgcmkpOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKIAkJCQlyaS0+ZGVzYy5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCmluZGV4IGQzMWRiM2UuLjIzZDU1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwpAQCAtNzMsNyArNzMsOCBAQAogCiAJZHJ2ZGF0YS0+bWljcm92b2x0cyA9IGNvbmZpZy0+bWljcm92b2x0czsKIAotCWRydmRhdGEtPmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmZHJ2ZGF0YS0+ZGVzYywgZHJ2ZGF0YSk7CisJZHJ2ZGF0YS0+ZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkcnZkYXRhLT5kZXNjLCAmcGRldi0+ZGV2LAorCQkJCQkgIGNvbmZpZy0+aW5pdF9kYXRhLCBkcnZkYXRhKTsKIAlpZiAoSVNfRVJSKGRydmRhdGEtPmRldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkcnZkYXRhLT5kZXYpOwogCQlnb3RvIGVycl9uYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwppbmRleCA0Y2M4NWVjLi5jZDc2MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwpAQCAtMjg0LDcgKzI4NCw4IEBACiAJLyogQWxyZWFkeSBzZXQgYnkgY29yZSBkcml2ZXIgKi8KIAlwY2YgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJlZ3VsYXRvcnNbcGRldi0+aWRdLCAmcGRldi0+ZGV2LCBwY2YpOworCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJlZ3VsYXRvcnNbcGRldi0+aWRdLCAmcGRldi0+ZGV2LAorCQkJCSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHBjZik7CiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bDQwMzAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDMyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsNTAwIEBACisvKgorICogdHdsNDAzMC1yZWd1bGF0b3IuYyAtLSBzdXBwb3J0IHJlZ3VsYXRvcnMgaW4gdHdsNDAzMCBmYW1pbHkgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworCisvKgorICogVGhlIFRXTDQwMzAvVFc1MDMwL1RQUzY1OXgwIGZhbWlseSBjaGlwcyBpbmNsdWRlIHBvd2VyIG1hbmFnZW1lbnQsIGEKKyAqIFVTQiBPVEcgdHJhbnNjZWl2ZXIsIGFuIFJUQywgQURDLCBQV00sIGFuZCBsb3RzIG1vcmUuICBTb21lIHZlcnNpb25zCisgKiBpbmNsdWRlIGFuIGF1ZGlvIGNvZGVjLCBiYXR0ZXJ5IGNoYXJnZXIsIGFuZCBtb3JlIHZvbHRhZ2UgcmVndWxhdG9ycy4KKyAqIFRoZXNlIGNoaXBzIGFyZSBvZnRlbiB1c2VkIGluIE9NQVAtYmFzZWQgc3lzdGVtcy4KKyAqCisgKiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHNvZnR3YXJlLWJhc2VkIHJlc291cmNlIGNvbnRyb2wgZm9yIHZhcmlvdXMKKyAqIHZvbHRhZ2UgcmVndWxhdG9ycy4gIFRoaXMgaXMgdXN1YWxseSBhdWdtZW50ZWQgd2l0aCBzdGF0ZSBtYWNoaW5lCisgKiBiYXNlZCBjb250cm9sLgorICovCisKK3N0cnVjdCB0d2xyZWdfaW5mbyB7CisJLyogc3RhcnQgb2YgcmVndWxhdG9yJ3MgUE1fUkVDRUlWRVIgY29udHJvbCByZWdpc3RlciBiYW5rICovCisJdTgJCQliYXNlOworCisJLyogdHdsNDAzMCByZXNvdXJjZSBJRCwgZm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZSAqLworCXU4CQkJaWQ7CisKKwkvKiB2b2x0YWdlIGluIG1WID0gdGFibGVbVlNFTF07IHRhYmxlX2xlbiBtdXN0IGJlIGEgcG93ZXItb2YtdHdvICovCisJdTgJCQl0YWJsZV9sZW47CisJY29uc3QgdTE2CQkqdGFibGU7CisKKwkvKiBjaGlwIGNvbnN0cmFpbnRzIG9uIHJlZ3VsYXRvciBiZWhhdmlvciAqLworCXUxNgkJCW1pbl9tVjsKKworCS8qIHVzZWQgYnkgcmVndWxhdG9yIGNvcmUgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MJZGVzYzsKK307CisKKworLyogTERPIGNvbnRyb2wgcmVnaXN0ZXJzIC4uLiBvZmZzZXQgaXMgZnJvbSB0aGUgYmFzZSBvZiBpdHMgcmVnaXN0ZXIgYmFuay4KKyAqIFRoZSBmaXJzdCB0aHJlZSByZWdpc3RlcnMgb2YgYWxsIHBvd2VyIHJlc291cmNlIGJhbmtzIGhlbHAgaGFyZHdhcmUgdG8KKyAqIG1hbmFnZSB0aGUgdmFyaW91cyByZXNvdXJjZSBncm91cHMuCisgKi8KKyNkZWZpbmUgVlJFR19HUlAJCTAKKyNkZWZpbmUgVlJFR19UWVBFCQkxCisjZGVmaW5lIFZSRUdfUkVNQVAJCTIKKyNkZWZpbmUgVlJFR19ERURJQ0FURUQJCTMJLyogTERPIGNvbnRyb2wgKi8KKworCitzdGF0aWMgaW5saW5lIGludAordHdsNDAzMHJlZ19yZWFkKHN0cnVjdCB0d2xyZWdfaW5mbyAqaW5mbywgdW5zaWduZWQgb2Zmc2V0KQoreworCXU4IHZhbHVlOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJJnZhbHVlLCBpbmZvLT5iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0d2w0MDMwcmVnX3dyaXRlKHN0cnVjdCB0d2xyZWdfaW5mbyAqaW5mbywgdW5zaWduZWQgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsCisJCQl2YWx1ZSwgaW5mby0+YmFzZSArIG9mZnNldCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGdlbmVyaWMgcG93ZXIgcmVzb3VyY2Ugb3BlcmF0aW9ucywgd2hpY2ggd29yayBvbiBhbGwgcmVndWxhdG9ycyAqLworCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZ3JwKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiB0d2w0MDMwcmVnX3JlYWQocmRldl9nZXRfZHJ2ZGF0YShyZGV2KSwgVlJFR19HUlApOworfQorCisvKgorICogRW5hYmxlL2Rpc2FibGUgcmVndWxhdG9ycyBieSBqb2luaW5nL2xlYXZpbmcgdGhlIFAxIChwcm9jZXNzb3IpIGdyb3VwLgorICogV2UgYXNzdW1lIG5vYm9keSBlbHNlIGlzIHVwZGF0aW5nIHRoZSBERVZfR1JQIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIFAzX0dSUAkJQklUKDcpCQkvKiAicGVyaXBoZXJhbHMiICovCisjZGVmaW5lIFAyX0dSUAkJQklUKDYpCQkvKiBzZWNvbmRhcnkgcHJvY2Vzc29yLCBtb2RlbSwgZXRjICovCisjZGVmaW5lIFAxX0dSUAkJQklUKDUpCQkvKiBDUFUvTGludXggKi8KKworc3RhdGljIGludCB0d2w0MDMwcmVnX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaW50CXN0YXRlID0gdHdsNDAzMHJlZ19ncnAocmRldik7CisKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm4gc3RhdGU7CisKKwlyZXR1cm4gKHN0YXRlICYgUDFfR1JQKSAhPSAwOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJZ3JwOworCisJZ3JwID0gdHdsNDAzMHJlZ19yZWFkKGluZm8sIFZSRUdfR1JQKTsKKwlpZiAoZ3JwIDwgMCkKKwkJcmV0dXJuIGdycDsKKworCWdycCB8PSBQMV9HUlA7CisJcmV0dXJuIHR3bDQwMzByZWdfd3JpdGUoaW5mbywgVlJFR19HUlAsIGdycCk7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMHJlZ19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJZ3JwOworCisJZ3JwID0gdHdsNDAzMHJlZ19yZWFkKGluZm8sIFZSRUdfR1JQKTsKKwlpZiAoZ3JwIDwgMCkKKwkJcmV0dXJuIGdycDsKKworCWdycCAmPSB+UDFfR1JQOworCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfR1JQLCBncnApOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZ2V0X3N0YXR1cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlpbnQJc3RhdGUgPSB0d2w0MDMwcmVnX2dycChyZGV2KTsKKworCWlmIChzdGF0ZSA8IDApCisJCXJldHVybiBzdGF0ZTsKKwlzdGF0ZSAmPSAweDBmOworCisJLyogYXNzdW1lIHN0YXRlICE9IFdBUk1fUkVTRVQ7IHdlJ2Qgbm90IGJlIHJ1bm5pbmcuLi4gICovCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIFJFR1VMQVRPUl9TVEFUVVNfT0ZGOworCXJldHVybiAoc3RhdGUgJiBCSVQoMykpCisJCT8gUkVHVUxBVE9SX1NUQVRVU19OT1JNQUwKKwkJOiBSRUdVTEFUT1JfU1RBVFVTX1NUQU5EQlk7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMHJlZ19zZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgbW9kZSkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkCQltZXNzYWdlOworCWludAkJCXN0YXR1czsKKworCS8qIFdlIGNhbiBvbmx5IHNldCB0aGUgbW9kZSB0aHJvdWdoIHN0YXRlIG1hY2hpbmUgY29tbWFuZHMuLi4gKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJbWVzc2FnZSA9IE1TR19TSU5HVUxBUihERVZfR1JQX1AxLCBpbmZvLT5pZCwgUkVTX1NUQVRFX0FDVElWRSk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJbWVzc2FnZSA9IE1TR19TSU5HVUxBUihERVZfR1JQX1AxLCBpbmZvLT5pZCwgUkVTX1NUQVRFX1NMRUVQKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRW5zdXJlIHRoZSByZXNvdXJjZSBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBncm91cCAqLworCXN0YXR1cyA9IHR3bDQwMzByZWdfZ3JwKHJkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmICghKHN0YXR1cyAmIChQM19HUlAgfCBQMl9HUlAgfCBQMV9HUlApKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsCisJCQltZXNzYWdlID4+IDgsIDB4MTUgLyogUEJfV09SRF9NU0IgKi8gKTsKKwlpZiAoc3RhdHVzID49IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLAorCQkJbWVzc2FnZSwgMHgxNiAvKiBQQl9XT1JEX0xTQiAqLyApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU3VwcG9ydCBmb3IgYWRqdXN0YWJsZS12b2x0YWdlIExET3MgdXNlcyBhIGZvdXIgYml0IChvciBsZXNzKSB2b2x0YWdlCisgKiBzZWxlY3QgZmllbGQgaW4gaXRzIGNvbnRyb2wgcmVnaXN0ZXIuICAgV2UgdXNlIHRhYmxlcyBpbmRleGVkIGJ5IFZTRUwKKyAqIHRvIHJlY29yZCB2b2x0YWdlcyBpbiBtaWxsaVZvbHRzLiAgKEFjY3VyYWN5IGlzIGFib3V0IHRocmVlIHBlcmNlbnQuKQorICoKKyAqIE5vdGUgdGhhdCBWU0VMIHZhbHVlcyBmb3IgVkFVWDIgY2hhbmdlZCBpbiB0d2w1MDMwIGFuZCBuZXdlciBzaWxpY29uOworICogY3VycmVudGx5IGhhbmRsZWQgYnkgbGlzdGluZyB0d28gc2xpZ2h0bHkgZGlmZmVyZW50IFZBVVgyIHJlZ3VsYXRvcnMsCisgKiBvbmx5IG9uZSBvZiB3aGljaCB3aWxsIGJlIGNvbmZpZ3VyZWQuCisgKgorICogVlNFTCB2YWx1ZXMgZG9jdW1lbnRlZCBhcyAiVEkgY2Fubm90IHN1cHBvcnQgdGhlc2UgdmFsdWVzIiBhcmUgZmxhZ2dlZAorICogaW4gdGhlc2UgdGFibGVzIGFzIFVOU1VQKCkgdmFsdWVzOyB3ZSBub3JtYWxseSB3b24ndCBhc3NpZ24gdGhlbS4KKyAqCisgKiBWQVVYMyBhdCAzViBpcyBpbmNvcnJlY3RseSBsaXN0ZWQgaW4gc29tZSBUSSBtYW51YWxzIGFzIHVuc3VwcG9ydGVkLgorICogVEkgYXJlIHJldmlzaW5nIHRoZSB0d2w1MDMwL3RwczY1OXgwIHNwZWNzIHRvIHN1cHBvcnQgdGhhdCAzLjBWIHNldHRpbmcuCisgKi8KKyNpZmRlZiBDT05GSUdfVFdMNDAzMF9BTExPV19VTlNVUFBPUlRFRAorI2RlZmluZSBVTlNVUF9NQVNLCTB4MDAwMAorI2Vsc2UKKyNkZWZpbmUgVU5TVVBfTUFTSwkweDgwMDAKKyNlbmRpZgorCisjZGVmaW5lIFVOU1VQKHgpCShVTlNVUF9NQVNLIHwgKHgpKQorI2RlZmluZSBJU19VTlNVUCh4KQkoVU5TVVBfTUFTSyAmICh4KSkKKyNkZWZpbmUgTERPX01WKHgpCSh+VU5TVVBfTUFTSyAmICh4KSkKKworCitzdGF0aWMgY29uc3QgdTE2IFZBVVgxX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxNTAwKSwgVU5TVVAoMTgwMCksIDI1MDAsIDI4MDAsCisJMzAwMCwgMzAwMCwgMzAwMCwgMzAwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVgyXzQwMzBfVlNFTF90YWJsZVtdID0geworCVVOU1VQKDEwMDApLCBVTlNVUCgxMDAwKSwgVU5TVVAoMTIwMCksIDEzMDAsCisJMTUwMCwgMTgwMCwgVU5TVVAoMTg1MCksIDI1MDAsCisJVU5TVVAoMjYwMCksIDI4MDAsIFVOU1VQKDI4NTApLCBVTlNVUCgzMDAwKSwKKwlVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVgyX1ZTRUxfdGFibGVbXSA9IHsKKwkxNzAwLCAxNzAwLCAxOTAwLCAxMzAwLAorCTE1MDAsIDE4MDAsIDIwMDAsIDI1MDAsCisJMjEwMCwgMjgwMCwgMjIwMCwgMjMwMCwKKwkyNDAwLCAyNDAwLCAyNDAwLCAyNDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDNfVlNFTF90YWJsZVtdID0geworCTE1MDAsIDE4MDAsIDI1MDAsIDI4MDAsCisJMzAwMCwgMzAwMCwgMzAwMCwgMzAwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVg0X1ZTRUxfdGFibGVbXSA9IHsKKwk3MDAsIDEwMDAsIDEyMDAsIFVOU1VQKDEzMDApLAorCTE1MDAsIDE4MDAsIFVOU1VQKDE4NTApLCAyNTAwLAorCVVOU1VQKDI2MDApLCAyODAwLCBVTlNVUCgyODUwKSwgVU5TVVAoMzAwMCksCisJVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksCit9Oworc3RhdGljIGNvbnN0IHUxNiBWTU1DMV9WU0VMX3RhYmxlW10gPSB7CisJMTg1MCwgMjg1MCwgMzAwMCwgMzE1MCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZNTUMyX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxMDAwKSwgVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCBVTlNVUCgxMzAwKSwKKwlVTlNVUCgxNTAwKSwgVU5TVVAoMTgwMCksIDE4NTAsIFVOU1VQKDI1MDApLAorCTI2MDAsIDI4MDAsIDI4NTAsIDMwMDAsCisJMzE1MCwgMzE1MCwgMzE1MCwgMzE1MCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZQTEwxX1ZTRUxfdGFibGVbXSA9IHsKKwkxMDAwLCAxMjAwLCAxMzAwLCAxODAwLAorCVVOU1VQKDI4MDApLCBVTlNVUCgzMDAwKSwgVU5TVVAoMzAwMCksIFVOU1VQKDMwMDApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVlBMTDJfVlNFTF90YWJsZVtdID0geworCTcwMCwgMTAwMCwgMTIwMCwgMTMwMCwKKwlVTlNVUCgxNTAwKSwgMTgwMCwgVU5TVVAoMTg1MCksIFVOU1VQKDI1MDApLAorCVVOU1VQKDI2MDApLCBVTlNVUCgyODAwKSwgVU5TVVAoMjg1MCksIFVOU1VQKDMwMDApLAorCVVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVlNJTV9WU0VMX3RhYmxlW10gPSB7CisJVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCBVTlNVUCgxMzAwKSwgMTgwMCwKKwkyODAwLCAzMDAwLCAzMDAwLCAzMDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkRBQ19WU0VMX3RhYmxlW10gPSB7CisJMTIwMCwgMTMwMCwgMTgwMCwgMTgwMCwKK307CisKKworc3RhdGljIGludCB0d2w0MDMwbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCQltViA9IGluZm8tPnRhYmxlW2luZGV4XTsKKworCXJldHVybiBJU19VTlNVUChtVikgPyAwIDogKExET19NVihtVikgKiAxMDAwKTsKK30KKworc3RhdGljIGludAordHdsNDAzMGxkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCXZzZWw7CisKKwlmb3IgKHZzZWwgPSAwOyB2c2VsIDwgaW5mby0+dGFibGVfbGVuOyB2c2VsKyspIHsKKwkJaW50IG1WID0gaW5mby0+dGFibGVbdnNlbF07CisJCWludCB1VjsKKworCQlpZiAoSVNfVU5TVVAobVYpKQorCQkJY29udGludWU7CisJCXVWID0gTERPX01WKG1WKSAqIDEwMDA7CisKKwkJLyogUkVWSVNJVCBmb3IgVkFVWDIsIGZpcnN0IG1hdGNoIG1heSBub3QgYmUgYmVzdC9sb3dlc3QgKi8KKworCQkvKiB1c2UgdGhlIGZpcnN0IGluLXJhbmdlIHZhbHVlICovCisJCWlmIChtaW5fdVYgPD0gdVYgJiYgdVYgPD0gbWF4X3VWKQorCQkJcmV0dXJuIHR3bDQwMzByZWdfd3JpdGUoaW5mbywgVlJFR19ERURJQ0FURUQsIHZzZWwpOworCX0KKworCXJldHVybiAtRURPTTsKK30KKworc3RhdGljIGludCB0d2w0MDMwbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJdnNlbCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0RFRElDQVRFRCk7CisKKwlpZiAodnNlbCA8IDApCisJCXJldHVybiB2c2VsOworCisJdnNlbCAmPSBpbmZvLT50YWJsZV9sZW4gLSAxOworCXJldHVybiBMRE9fTVYoaW5mby0+dGFibGVbdnNlbF0pICogMTAwMDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHR3bDQwMzBsZG9fb3BzID0geworCS5saXN0X3ZvbHRhZ2UJPSB0d2w0MDMwbGRvX2xpc3Rfdm9sdGFnZSwKKworCS5zZXRfdm9sdGFnZQk9IHR3bDQwMzBsZG9fc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gdHdsNDAzMGxkb19nZXRfdm9sdGFnZSwKKworCS5lbmFibGUJCT0gdHdsNDAzMHJlZ19lbmFibGUsCisJLmRpc2FibGUJPSB0d2w0MDMwcmVnX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSB0d2w0MDMwcmVnX2lzX2VuYWJsZWQsCisKKwkuc2V0X21vZGUJPSB0d2w0MDMwcmVnX3NldF9tb2RlLAorCisJLmdldF9zdGF0dXMJPSB0d2w0MDMwcmVnX2dldF9zdGF0dXMsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRml4ZWQgdm9sdGFnZSBMRE9zIGRvbid0IGhhdmUgYSBWU0VMIGZpZWxkIHRvIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCB0d2w0MDMwZml4ZWRfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbmRleCkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIGluZm8tPm1pbl9tViAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMGZpeGVkX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gaW5mby0+bWluX21WICogMTAwMDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHR3bDQwMzBmaXhlZF9vcHMgPSB7CisJLmxpc3Rfdm9sdGFnZQk9IHR3bDQwMzBmaXhlZF9saXN0X3ZvbHRhZ2UsCisKKwkuZ2V0X3ZvbHRhZ2UJPSB0d2w0MDMwZml4ZWRfZ2V0X3ZvbHRhZ2UsCisKKwkuZW5hYmxlCQk9IHR3bDQwMzByZWdfZW5hYmxlLAorCS5kaXNhYmxlCT0gdHdsNDAzMHJlZ19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gdHdsNDAzMHJlZ19pc19lbmFibGVkLAorCisJLnNldF9tb2RlCT0gdHdsNDAzMHJlZ19zZXRfbW9kZSwKKworCS5nZXRfc3RhdHVzCT0gdHdsNDAzMHJlZ19nZXRfc3RhdHVzLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBUV0xfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbnVtKSB7IFwKKwkuYmFzZSA9IG9mZnNldCwgXAorCS5pZCA9IG51bSwgXAorCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKGxhYmVsIyNfVlNFTF90YWJsZSksIFwKKwkudGFibGUgPSBsYWJlbCMjX1ZTRUxfdGFibGUsIFwKKwkuZGVzYyA9IHsgXAorCQkubmFtZSA9ICNsYWJlbCwgXAorCQkuaWQgPSBUV0w0MDMwX1JFR18jI2xhYmVsLCBcCisJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShsYWJlbCMjX1ZTRUxfdGFibGUpLCBcCisJCS5vcHMgPSAmdHdsNDAzMGxkb19vcHMsIFwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAorCQl9LCBcCisJfQorCisjZGVmaW5lIFRXTF9GSVhFRF9MRE8obGFiZWwsIG9mZnNldCwgbVZvbHRzLCBudW0pIHsgXAorCS5iYXNlID0gb2Zmc2V0LCBcCisJLmlkID0gbnVtLCBcCisJLm1pbl9tViA9IG1Wb2x0cywgXAorCS5kZXNjID0geyBcCisJCS5uYW1lID0gI2xhYmVsLCBcCisJCS5pZCA9IFRXTDQwMzBfUkVHXyMjbGFiZWwsIFwKKwkJLm5fdm9sdGFnZXMgPSAxLCBcCisJCS5vcHMgPSAmdHdsNDAzMGZpeGVkX29wcywgXAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLCBcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLCBcCisJCX0sIFwKKwl9CisKKy8qCisgKiBXZSBsaXN0IHJlZ3VsYXRvcnMgaGVyZSBpZiBzeXN0ZW1zIG5lZWQgc29tZSBsZXZlbCBvZgorICogc29mdHdhcmUgY29udHJvbCBvdmVyIHRoZW0gYWZ0ZXIgYm9vdC4KKyAqLworc3RhdGljIHN0cnVjdCB0d2xyZWdfaW5mbyB0d2w0MDMwX3JlZ3NbXSA9IHsKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDEsIDB4MTcsIDEpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYMl80MDMwLCAweDFiLCAyKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDIsIDB4MWIsIDIpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYMywgMHgxZiwgMyksCisJVFdMX0FESlVTVEFCTEVfTERPKFZBVVg0LCAweDIzLCA0KSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVk1NQzEsIDB4MjcsIDUpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWTU1DMiwgMHgyYiwgNiksCisJLyoKKwlUV0xfQURKVVNUQUJMRV9MRE8oVlBMTDEsIDB4MmYsIDcpLAorCSovCisJVFdMX0FESlVTVEFCTEVfTERPKFZQTEwyLCAweDMzLCA4KSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVlNJTSwgMHgzNywgOSksCisJVFdMX0FESlVTVEFCTEVfTERPKFZEQUMsIDB4M2IsIDEwKSwKKwkvKgorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5UQU5BMSwgMHgzZiwgMTEpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5UQU5BMiwgMHg0MywgMTIpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5URElHLCAweDQ3LCAxMyksCisJVFdMX1NNUFMoVklPLCAweDRiLCAxNCksCisJVFdMX1NNUFMoVkREMSwgMHg1NSwgMTUpLAorCVRXTF9TTVBTKFZERDIsIDB4NjMsIDE2KSwKKwkgKi8KKwlUV0xfRklYRURfTERPKFZVU0IxVjUsIDB4NzEsIDE1MDAsIDE3KSwKKwlUV0xfRklYRURfTERPKFZVU0IxVjgsIDB4NzQsIDE4MDAsIDE4KSwKKwlUV0xfRklYRURfTERPKFZVU0IzVjEsIDB4NzcsIDMxMDAsIDE5KSwKKwkvKiBWVVNCQ1AgaXMgbWFuYWdlZCAqb25seSogYnkgdGhlIFVTQiBzdWJjaGlwICovCit9OworCitzdGF0aWMgaW50IHR3bDQwMzByZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQJCQkJaTsKKwlzdHJ1Y3QgdHdscmVnX2luZm8JCSppbmZvOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCSppbml0ZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cwkqYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldgkJKnJkZXY7CisKKwlmb3IgKGkgPSAwLCBpbmZvID0gTlVMTDsgaSA8IEFSUkFZX1NJWkUodHdsNDAzMF9yZWdzKTsgaSsrKSB7CisJCWlmICh0d2w0MDMwX3JlZ3NbaV0uZGVzYy5pZCAhPSBwZGV2LT5pZCkKKwkJCWNvbnRpbnVlOworCQlpbmZvID0gdHdsNDAzMF9yZWdzICsgaTsKKwkJYnJlYWs7CisJfQorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0ZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghaW5pdGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29uc3RyYWluIGJvYXJkLXNwZWNpZmljIGNhcGFiaWxpdGllcyBhY2NvcmRpbmcgdG8gd2hhdAorCSAqIHRoaXMgZHJpdmVyIGFuZCB0aGUgY2hpcCBpdHNlbGYgY2FuIGFjdHVhbGx5IGRvLgorCSAqLworCWMgPSAmaW5pdGRhdGEtPmNvbnN0cmFpbnRzOworCWMtPnZhbGlkX21vZGVzX21hc2sgJj0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwgUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKKwljLT52YWxpZF9vcHNfbWFzayAmPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVM7CisKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZpbmZvLT5kZXNjLCAmcGRldi0+ZGV2LCBpbml0ZGF0YSwgaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciAlcywgJWxkXG4iLAorCQkJCWluZm8tPmRlc2MubmFtZSwgUFRSX0VSUihyZGV2KSk7CisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZGV2KTsKKworCS8qIE5PVEU6ICBtYW55IHJlZ3VsYXRvcnMgc3VwcG9ydCBzaG9ydC1jaXJjdWl0IElSUXMgKHByZXNlbnRhYmxlCisJICogYXMgUkVHVUxBVE9SX09WRVJfQ1VSUkVOVCBub3RpZmljYXRpb25zPykgY29uZmlndXJlZCB2aWE6CisJICogIC0gU0NfQ09ORklHCisJICogIC0gU0NfREVURUNUMSAodmludGFuYTIsIHZtbWMxLzIsIHZhdXgxLzIvMy80KQorCSAqICAtIFNDX0RFVEVDVDIgKHZ1c2IsIHZkYWMsIHZpbywgdmRkMS8yLCB2cGxsMikKKwkgKiAgLSBJVF9DT05GSUcKKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0d2w0MDMwcmVnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX3JlZyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2w0MDMwcmVnX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdHdsNDAzMHJlZ19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHR3bDQwMzByZWdfcmVtb3ZlKSwKKwkvKiBOT1RFOiBzaG9ydCBuYW1lLCB0byB3b3JrIGFyb3VuZCBkcml2ZXIgbW9kZWwgdHJ1bmNhdGlvbiBvZgorCSAqICJ0d2w0MDMwX3JlZ3VsYXRvci4xMiIgKGFuZCBmcmllbmRzKSB0byAidHdsNDAzMF9yZWd1bGF0b3IuMSIuCisJICovCisJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfcmVnIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2w0MDMwcmVnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0d2w0MDMwcmVnX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHdsNDAzMHJlZ19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDQwMzByZWdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0d2w0MDMwcmVnX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwcmVnX2V4aXQpCisKK01PRFVMRV9ERVNDUklQVElPTigiVFdMNDAzMCByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKaW5kZXggNWRkYjQ2NC4uM2QwODM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYwpAQCAtMjI2LDEzICsyMjYsMTcgQEAKIAl1bnNpZ25lZCBpbnQgbW9kZTsKIAlpbnQgcmV0OwogCi0JaWYgKHN0cm5jbXAoYnVmLCAiZmFzdCIsIHN0cmxlbigiZmFzdCIpKSA9PSAwKQorCS8qCisJICogc3lzZnNfc3RyZXEoKSBkb2Vzbid0IG5lZWQgdGhlIFxuJ3MsIGJ1dCB3ZSBhZGQgdGhlbSBzbyB0aGUgc3RyaW5ncworCSAqIHdpbGwgYmUgc2hhcmVkIHdpdGggc2hvd19tb2RlKCksIGFib3ZlLgorCSAqLworCWlmIChzeXNmc19zdHJlcShidWYsICJmYXN0XG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfRkFTVDsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIm5vcm1hbCIsIHN0cmxlbigibm9ybWFsIikpID09IDApCisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAibm9ybWFsXG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiaWRsZSIsIHN0cmxlbigiaWRsZSIpKSA9PSAwKQorCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgImlkbGVcbiIpID09IDApCiAJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9JRExFOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic3RhbmRieSIsIHN0cmxlbigic3RhbmRieSIpKSA9PSAwKQorCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInN0YW5kYnlcbiIpID09IDApCiAJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOwogCWVsc2UgewogCQlkZXZfZXJyKGRldiwgIkNvbmZpZ3VyaW5nIGludmFsaWQgbW9kZVxuIik7CkBAIC0yNTYsNyArMjYwLDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihtYXhfbWljcm9hbXBzLCAwNjY2LCBzaG93X21heF91QSwgc2V0X21heF91QSk7CiBzdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgMDY2Niwgc2hvd19tb2RlLCBzZXRfbW9kZSk7CiAKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfbWluX21pY3Jvdm9sdHMsCiAJJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLAogCSZkZXZfYXR0cl9taW5fbWljcm9hbXBzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IDUwNTZlMjMuLjc3MWVjYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAorLyogTWF4aW11bSB2YWx1ZSBwb3NzaWJsZSBmb3IgVlNFTCAqLworI2RlZmluZSBXTTgzNTBfRENEQ19NQVhfVlNFTCAweDY2CisKIC8qIE1pY3JvYW1wcyAqLwogc3RhdGljIGNvbnN0IGludCBpc2lua19jdXJbXSA9IHsKIAk0LApAQCAtMzg1LDYgKzM4OCwxNCBAQAogCXJldHVybiB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHZhbCkgKiAxMDAwOwogfQogCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004MzUwX0RDRENfTUFYX1ZTRUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHNlbGVjdG9yKSAqIDEwMDA7Cit9CisKIHN0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X3N1c3BlbmRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CkBAIC03NzUsNiArNzg2LDE0IEBACiAJcmV0dXJuIHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004MzUwX0xETzFfVlNFTF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gd204MzUwX2xkb192YWxfdG9fbXZvbHRzKHNlbGVjdG9yKSAqIDEwMDA7Cit9CisKIGludCB3bTgzNTBfZGNkY19zZXRfc2xvdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCB1MTYgc3RhcnQsCiAJCQkgdTE2IHN0b3AsIHUxNiBmYXVsdCkKIHsKQEAgLTEwMzEsMTggKzEwNTAsMzAgQEAKIAlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCXUxNiBtYXNrLCBzbGVlcCwgYWN0aXZlLCBmb3JjZTsKIAlpbnQgbW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKwlpbnQgcmVnOwogCi0JaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCXN3aXRjaCAoZGNkYykgeworCWNhc2UgV004MzUwX0RDRENfMToKKwkJcmVnID0gV004MzUwX0RDREMxX0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQlyZWcgPSBXTTgzNTBfRENEQzNfRk9SQ0VfUFdNOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXJlZyA9IFdNODM1MF9EQ0RDNF9GT1JDRV9QV007CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNjoKKwkJcmVnID0gV004MzUwX0RDREM2X0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGNkYyA9PSBXTTgzNTBfRENEQ18yIHx8IGRjZGMgPT0gV004MzUwX0RDRENfNSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJbWFzayA9IDEgPDwgKGRjZGMgLSBXTTgzNTBfRENEQ18xKTsKIAlhY3RpdmUgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQ19BQ1RJVkVfT1BUSU9OUykgJiBtYXNrOworCWZvcmNlID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgcmVnKSAmIFdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BOwogCXNsZWVwID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDRENfU0xFRVBfT1BUSU9OUykgJiBtYXNrOwotCWZvcmNlID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREMxX0ZPUkNFX1BXTSkKLQkgICAgJiBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNX0VOQTsKKwogCWRldl9kYmcod204MzUwLT5kZXYsICJtYXNrICV4IGFjdGl2ZSAleCBzbGVlcCAleCBmb3JjZSAleCIsCiAJCW1hc2ssIGFjdGl2ZSwgc2xlZXAsIGZvcmNlKTsKIApAQCAtMTE1MCw2ICsxMTgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzNTBfZGNkY19vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlID0gd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZSA9IHdtODM1MF9kY2RjX2xpc3Rfdm9sdGFnZSwKIAkuZW5hYmxlID0gd204MzUwX2RjZGNfZW5hYmxlLAogCS5kaXNhYmxlID0gd204MzUwX2RjZGNfZGlzYWJsZSwKIAkuZ2V0X21vZGUgPSB3bTgzNTBfZGNkY19nZXRfbW9kZSwKQEAgLTExNzMsNiArMTIwNSw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzUwX2xkb19vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzUwX2xkb19zZXRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSB3bTgzNTBfbGRvX2dldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB3bTgzNTBfbGRvX2xpc3Rfdm9sdGFnZSwKIAkuZW5hYmxlID0gd204MzUwX2xkb19lbmFibGUsCiAJLmRpc2FibGUgPSB3bTgzNTBfbGRvX2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQgPSB3bTgzNTBfbGRvX2lzX2VuYWJsZWQsCkBAIC0xMTk3LDYgKzEyMzAsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjEzLDYgKzEyNDcsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMzLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjIxLDYgKzEyNTYsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM0LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjM3LDYgKzEyNzMsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM2LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjQ1LDYgKzEyODIsNyBAQAogCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAogCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE8xLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9MRE8xX1ZTRUxfTUFTSyArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI1Myw2ICsxMjkxLDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPMiwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfTERPMl9WU0VMX01BU0sgKyAxLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKQEAgLTEyNjEsNiArMTMwMCw3IEBACiAJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzMsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gV004MzUwX0xETzNfVlNFTF9NQVNLICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjY5LDYgKzEzMDksNyBAQAogCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAogCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE80LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9MRE80X1ZTRUxfTUFTSyArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI5Myw2ICsxMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKWRhdGE7CiAKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CiAJaWYgKGlycSA9PSBXTTgzNTBfSVJRX0NTMSB8fCBpcnEgPT0gV004MzUwX0lSUV9DUzIpCiAJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCiAJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9SRUdVTEFUSU9OX09VVCwKQEAgLTEzMDEsNiArMTM0Myw3IEBACiAJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCiAJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9VTkRFUl9WT0xUQUdFLAogCQkJCQkgICAgICB3bTgzNTApOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTEzMzMsOSArMTM3Niw5IEBACiAJCWJyZWFrOwogCX0KIAotCiAJLyogcmVnaXN0ZXIgcmVndWxhdG9yICovCiAJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3Rlcigmd204MzUwX3JlZ1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwKIAkJCQkgIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKaW5kZXggNTZlMjNkNC4uMTU3NDI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwpAQCAtNDMsNiArNDMsMTggQEAKIAkJCSAgICAgICBXTTg0MDBfTERPMV9FTkEsIDApOwogfQogCitzdGF0aWMgaW50IHdtODQwMF9sZG9fbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004NDAwX0xETzFfVlNFTF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA8IDE1KQorCQlyZXR1cm4gOTAwMDAwICsgKHNlbGVjdG9yICogNTAwMDApOworCWVsc2UKKwkJcmV0dXJuIDE2MDAwMDAgKyAoKHNlbGVjdG9yIC0gMTQpICogMTAwMDAwKTsKK30KKwogc3RhdGljIGludCB3bTg0MDBfbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNTEsMTAgKzYzLDcgQEAKIAl2YWwgPSB3bTg0MDBfcmVnX3JlYWQod204NDAwLCBXTTg0MDBfTERPMV9DT05UUk9MICsgcmRldl9nZXRfaWQoZGV2KSk7CiAJdmFsICY9IFdNODQwMF9MRE8xX1ZTRUxfTUFTSzsKIAotCWlmICh2YWwgPCAxNSkKLQkJcmV0dXJuIDkwMDAwMCArICh2YWwgKiA1MDAwMCk7Ci0JZWxzZQotCQlyZXR1cm4gMTYwMDAwMCArICgodmFsIC0gMTQpICogMTAwMDAwKTsKKwlyZXR1cm4gd204NDAwX2xkb19saXN0X3ZvbHRhZ2UoZGV2LCB2YWwpOwogfQogCiBzdGF0aWMgaW50IHdtODQwMF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKQEAgLTkyLDYgKzEwMSw3IEBACiAJLmlzX2VuYWJsZWQgPSB3bTg0MDBfbGRvX2lzX2VuYWJsZWQsCiAJLmVuYWJsZSA9IHdtODQwMF9sZG9fZW5hYmxlLAogCS5kaXNhYmxlID0gd204NDAwX2xkb19kaXNhYmxlLAorCS5saXN0X3ZvbHRhZ2UgPSB3bTg0MDBfbGRvX2xpc3Rfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSB3bTg0MDBfbGRvX2dldF92b2x0YWdlLAogCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9sZG9fc2V0X3ZvbHRhZ2UsCiB9OwpAQCAtMTI0LDYgKzEzNCwxNSBAQAogCQkJICAgICAgIFdNODQwMF9EQzFfRU5BLCAwKTsKIH0KIAorc3RhdGljIGludCB3bTg0MDBfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004NDAwX0RDMV9WU0VMX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDg1MDAwMCArIChzZWxlY3RvciAqIDI1MDAwKTsKK30KKwogc3RhdGljIGludCB3bTg0MDBfZGNkY19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQogewogCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTIzNyw2ICsyNTYsNyBAQAogCS5pc19lbmFibGVkID0gd204NDAwX2RjZGNfaXNfZW5hYmxlZCwKIAkuZW5hYmxlID0gd204NDAwX2RjZGNfZW5hYmxlLAogCS5kaXNhYmxlID0gd204NDAwX2RjZGNfZGlzYWJsZSwKKwkubGlzdF92b2x0YWdlID0gd204NDAwX2RjZGNfbGlzdF92b2x0YWdlLAogCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX2dldF92b2x0YWdlLAogCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX3NldF92b2x0YWdlLAogCS5nZXRfbW9kZSA9IHdtODQwMF9kY2RjX2dldF9tb2RlLApAQCAtMjQ5LDYgKzI2OSw3IEBACiAJCS5uYW1lID0gIkxETzEiLAogCQkuaWQgPSBXTTg0MDBfTERPMSwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPMV9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjU2LDYgKzI3Nyw3IEBACiAJCS5uYW1lID0gIkxETzIiLAogCQkuaWQgPSBXTTg0MDBfTERPMiwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPMl9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjYzLDYgKzI4NSw3IEBACiAJCS5uYW1lID0gIkxETzMiLAogCQkuaWQgPSBXTTg0MDBfTERPMywKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPM19WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjcwLDYgKzI5Myw3IEBACiAJCS5uYW1lID0gIkxETzQiLAogCQkuaWQgPSBXTTg0MDBfTERPNCwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPNF9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjc3LDYgKzMwMSw3IEBACiAJCS5uYW1lID0gIkRDREMxIiwKIAkJLmlkID0gV004NDAwX0RDREMxLAogCQkub3BzID0gJndtODQwMF9kY2RjX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfREMxX1ZTRUxfTUFTSyArIDEsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCkBAIC0yODQsNiArMzA5LDcgQEAKIAkJLm5hbWUgPSAiRENEQzIiLAogCQkuaWQgPSBXTTg0MDBfRENEQzIsCiAJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkubl92b2x0YWdlcyA9IFdNODQwMF9EQzJfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI5NCw3ICszMjAsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCiAJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCi0JCXBkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBwZGV2LT5kZXYuZHJpdmVyX2RhdGEpOwogCiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA4MTQ1MGZiLi5mZmUzNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTEyOSwxMyArMTI5LDE0IEBACiBpZiBJMkMKIAogY29uZmlnIFJUQ19EUlZfRFMxMzA3Ci0JdHJpc3RhdGUgIkRhbGxhcy9NYXhpbSBEUzEzMDcvMzcvMzgvMzkvNDAsIFNUIE00MVQwMCIKKwl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERTMTMwNy8zNy8zOC8zOS80MCwgU1QgTTQxVDAwLCBFUFNPTiBSWC04MDI1IgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2YXJpb3VzIGNvbXBhdGlibGUgUlRDCiAJICBjaGlwcyAob2Z0ZW4gd2l0aCBiYXR0ZXJ5IGJhY2t1cCkgY29ubmVjdGVkIHdpdGggSTJDLiBUaGlzIGRyaXZlcgogCSAgc2hvdWxkIGhhbmRsZSBEUzEzMDcsIERTMTMzNywgRFMxMzM4LCBEUzEzMzksIERTMTM0MCwgU1QgTTQxVDAwLAotCSAgYW5kIHByb2JhYmx5IG90aGVyIGNoaXBzLiBJbiBzb21lIGNhc2VzIHRoZSBSVEMgbXVzdCBhbHJlYWR5Ci0JICBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKGJ5IG1hbnVmYWN0dXJpbmcgb3IgYSBib290bG9hZGVyKS4KKwkgIEVQU09OIFJYLTgwMjUgYW5kIHByb2JhYmx5IG90aGVyIGNoaXBzLiBJbiBzb21lIGNhc2VzIHRoZSBSVEMKKwkgIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKGJ5IG1hbnVmYWN0dXJpbmcgb3IgYQorCSAgYm9vdGxvYWRlcikuCiAKIAkgIFRoZSBmaXJzdCBzZXZlbiByZWdpc3RlcnMgb24gdGhlc2UgY2hpcHMgaG9sZCBhbiBSVEMsIGFuZCBvdGhlcgogCSAgcmVnaXN0ZXJzIG1heSBhZGQgZmVhdHVyZXMgc3VjaCBhcyBOVlJBTSwgYSB0cmlja2xlIGNoYXJnZXIgZm9yCkBAIC0yMjQsMTEgKzIyNSwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKIGNvbmZpZyBSVENfRFJWX000MVQ4MAotCXRyaXN0YXRlICJTVCBNNDFUNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgorCXRyaXN0YXRlICJTVCBNNDFUNjIvNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgU1QgTTQxVDYwCiAJICBhbmQgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBjaGlwcyBhcmUKLQkgIHN1cHBvcnRlZDogTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCisJICBzdXBwb3J0ZWQ6IE00MVQ2MiwgTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCiAJICBNNDFTVDg1LCBhbmQgTTQxU1Q4Ny4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCkBAIC00NDAsNiArNDQxLDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczE3NDIuCiAKK2NvbmZpZyBSVENfRFJWX0VGSQorCXRyaXN0YXRlICJFRkkgUlRDIgorCWRlcGVuZHMgb24gSUE2NAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZSBFRkkKKwkgIFJlYWwgVGltZSBDbG9jay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtZWZpLgorCiBjb25maWcgUlRDX0RSVl9TVEsxN1RBOAogCXRyaXN0YXRlICJTaW10ZWsgU1RLMTdUQTgiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MKQEAgLTY3NywyMiArNjg4LDE2IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBSaWNvaCBSUzVDMzEzIFJUQyBjaGlwcy4KIAotY29uZmlnIFJUQ19EUlZfUEFSSVNDCi0JdHJpc3RhdGUgIlBBLVJJU0MgZmlybXdhcmUgUlRDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQVJJU0MKK2NvbmZpZyBSVENfRFJWX0dFTkVSSUMKKwl0cmlzdGF0ZSAiR2VuZXJpYyBSVEMgc3VwcG9ydCIKKwkjIFBsZWFzZSBjb25zaWRlciB3cml0aW5nIGEgbmV3IFJUQyBkcml2ZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2VuZXJpYworCSMgUlRDIGFic3RyYWN0aW9uCisJZGVwZW5kcyBvbiBQQVJJU0MgfHwgTTY4SyB8fCBQUEMKIAloZWxwCi0JICBTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIFJUQyBzdXBwb3J0IG9uIFBBLVJJU0Mgc3lzdGVtcyB1c2luZwotCSAgZmlybXdhcmUgY2FsbHMuIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQKKwkgIFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgUlRDIHN1cHBvcnQgb24gc3lzdGVtcyB1c2luZyB0aGUgZ2VuZXJpYworCSAgUlRDIGFic3RyYWN0aW9uLiBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkCiAJICBqdXN0IHNheSBZLgogCi1jb25maWcgUlRDX0RSVl9QUEMKLSAgICAgICB0cmlzdGF0ZSAiUG93ZXJQQyBtYWNoaW5lIGRlcGVuZGVudCBSVEMgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIFBQQwotICAgICAgIGhlbHAKLQkgVGhlIFBvd2VyUEMga2VybmVsIGhhcyBtYWNoaW5lLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nCi0JIHRoZSBSVEMuIFRoaXMgZXhwb3NlcyB0aGF0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0aGUgZ2VuZXJpYyBSVEMKLQkgY2xhc3MuCi0KIGNvbmZpZyBSVENfRFJWX1BYQQogICAgICAgIHRyaXN0YXRlICJQWEEyN3gvUFhBM3h4IgogICAgICAgIGRlcGVuZHMgb24gQVJDSF9QWEEKQEAgLTczNiw0ICs3NDEsMTMgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW12LgogCitjb25maWcgUlRDX0RSVl9QUzMKKwl0cmlzdGF0ZSAiUFMzIFJUQyIKKwlkZXBlbmRzIG9uIFBQQ19QUzMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgUlRDIG9uIFBTMy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcHMzLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCAwZTY5N2FhLi42YzA2MzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtMzYsNiArMzYsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNjcyKQkrPSBydGMtZHMxNjcyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTc0MikJKz0gcnRjLWRzMTc0Mi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzMyMzQpCSs9IHJ0Yy1kczMyMzQubworb2JqLSQoQ09ORklHX1JUQ19EUlZfRUZJKQkrPSBydGMtZWZpLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfSVNMMTIwOCkJKz0gcnRjLWlzbDEyMDgubwpAQCAtNTUsOCArNTYsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUENGODU4MykJKz0gcnRjLXBjZjg1ODMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzApCSs9IHJ0Yy1wbDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KLW9iai0kKENPTkZJR19SVENfRFJWX1BBUklTQykJKz0gcnRjLXBhcmlzYy5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9QUEMpCSs9IHJ0Yy1wcGMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfR0VORVJJQykJKz0gcnRjLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFhBKQkrPSBydGMtcHhhLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzMxMykJKz0gcnRjLXJzNWMzMTMubwpAQCAtNzYsMyArNzYsNCBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfV004MzUwKQkrPSBydGMtd204MzUwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1gxMjA1KQkrPSBydGMteDEyMDUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUENGNTA2MzMpCSs9IHJ0Yy1wY2Y1MDYzMy5vCitvYmotJChDT05GSUdfUlRDX0RSVl9QUzMpCSs9IHJ0Yy1wczMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDdlNTE1NWUuLjJjNGE2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBKYW1lcyBDaGFwbWFuIChkczEzMzcgY29yZSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWF0dGhpYXMgRnVjaHMgKHJ4ODAyNSBzdXBwb3J0KQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzEsNiArMzIsNyBAQAogCWRzXzEzMzksCiAJZHNfMTM0MCwKIAltNDF0MDAsCisJcnhfODAyNSwKIAkvLyByczVjMzcyIHRvbz8gIGRpZmZlcmVudCBhZGRyZXNzLi4uCiB9OwogCkBAIC04Myw2ICs4NSwxMiBAQAogI2RlZmluZSBEUzEzMzlfUkVHX0FMQVJNMV9TRUNTCTB4MDcKICNkZWZpbmUgRFMxMzM5X1JFR19UUklDS0xFCTB4MTAKIAorI2RlZmluZSBSWDgwMjVfUkVHX0NUUkwxCTB4MGUKKyMJZGVmaW5lIFJYODAyNV9CSVRfMjQxMgkJMHgyMAorI2RlZmluZSBSWDgwMjVfUkVHX0NUUkwyCTB4MGYKKyMJZGVmaW5lIFJYODAyNV9CSVRfUE9OCQkweDEwCisjCWRlZmluZSBSWDgwMjVfQklUX1ZERVQJCTB4NDAKKyMJZGVmaW5lIFJYODAyNV9CSVRfWFNUCQkweDIwCiAKIAogc3RydWN0IGRzMTMwNyB7CkBAIC05NCw2ICsxMDIsMTAgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlCSpydGM7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJczMyICgqcmVhZF9ibG9ja19kYXRhKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorCQkJICAgICAgIHU4IGxlbmd0aCwgdTggKnZhbHVlcyk7CisJczMyICgqd3JpdGVfYmxvY2tfZGF0YSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCQl1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpOwogfTsKIAogc3RydWN0IGNoaXBfZGVzYyB7CkBAIC0xMTcsNiArMTI5LDggQEAKIFtkc18xMzQwXSA9IHsKIH0sCiBbbTQxdDAwXSA9IHsKK30sCitbcnhfODAyNV0gPSB7CiB9LCB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMxMzA3X2lkW10gPSB7CkBAIC0xMjYsMTIgKzE0MCw4NiBAQAogCXsgImRzMTMzOSIsIGRzXzEzMzkgfSwKIAl7ICJkczEzNDAiLCBkc18xMzQwIH0sCiAJeyAibTQxdDAwIiwgbTQxdDAwIH0sCisJeyAicng4MDI1IiwgcnhfODAyNSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczEzMDdfaWQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjZGVmaW5lIEJMT0NLX0RBVEFfTUFYX1RSSUVTIDEwCisKK3N0YXRpYyBzMzIgZHMxMzA3X3JlYWRfYmxvY2tfZGF0YV9vbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCisJCQkJICB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpCit7CisJczMyIGksIGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJZGF0YSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQgKyBpKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIGRhdGE7CisJCXZhbHVlc1tpXSA9IGRhdGE7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgczMyIGRzMTMwN19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCQkgIHU4IGxlbmd0aCwgdTggKnZhbHVlcykKK3sKKwl1OCBvbGR2YWx1ZXNbSTJDX1NNQlVTX0JMT0NLX01BWF07CisJczMyIHJldDsKKwlpbnQgdHJpZXMgPSAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJkczEzMDdfcmVhZF9ibG9ja19kYXRhIChsZW5ndGg9JWQpXG4iLCBsZW5ndGgpOworCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwgdmFsdWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkbyB7CisJCWlmICgrK3RyaWVzID4gQkxPQ0tfREFUQV9NQVhfVFJJRVMpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJkczEzMDdfcmVhZF9ibG9ja19kYXRhIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZW1jcHkob2xkdmFsdWVzLCB2YWx1ZXMsIGxlbmd0aCk7CisJCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwKKwkJCQkJCSAgdmFsdWVzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0gd2hpbGUgKG1lbWNtcChvbGR2YWx1ZXMsIHZhbHVlcywgbGVuZ3RoKSk7CisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHMzMiBkczEzMDdfd3JpdGVfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorCQkJCSAgIHU4IGxlbmd0aCwgY29uc3QgdTggKnZhbHVlcykKK3sKKwl1OCBjdXJydmFsdWVzW0kyQ19TTUJVU19CTE9DS19NQVhdOworCWludCB0cmllcyA9IDA7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRzMTMwN193cml0ZV9ibG9ja19kYXRhIChsZW5ndGg9JWQpXG4iLCBsZW5ndGgpOworCWRvIHsKKwkJczMyIGksIHJldDsKKworCQlpZiAoKyt0cmllcyA+IEJMT0NLX0RBVEFfTUFYX1RSSUVTKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiZHMxMzA3X3dyaXRlX2Jsb2NrX2RhdGEgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQgKyBpLAorCQkJCQkJCXZhbHVlc1tpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwKKwkJCQkJCSAgY3VycnZhbHVlcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9IHdoaWxlIChtZW1jbXAoY3VycnZhbHVlcywgdmFsdWVzLCBsZW5ndGgpKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgogICogVGhlIElSUSBsb2dpYyBpbmNsdWRlcyBhICJyZWFsIiBoYW5kbGVyIHJ1bm5pbmcgaW4gSVJRIGNvbnRleHQganVzdAogICogbG9uZyBlbm91Z2ggdG8gc2NoZWR1bGUgdGhpcyB3b3JrcXVldWUgZW50cnkuICAgV2UgbmVlZCBhIHRhc2sgY29udGV4dApAQCAtMjAyLDcgKzI5MCw3IEBACiAJaW50CQl0bXA7CiAKIAkvKiByZWFkIHRoZSBSVEMgZGF0ZSBhbmQgdGltZSByZWdpc3RlcnMgYWxsIGF0IG9uY2UgKi8KLQl0bXAgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKKwl0bXAgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKIAkJRFMxMzA3X1JFR19TRUNTLCA3LCBkczEzMDctPnJlZ3MpOwogCWlmICh0bXAgIT0gNykgewogCQlkZXZfZXJyKGRldiwgIiVzIGVycm9yICVkXG4iLCAicmVhZCIsIHRtcCk7CkBAIC0yNzksNyArMzY3LDcgQEAKIAkJIndyaXRlIiwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAogCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdKTsKIAotCXJlc3VsdCA9IGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwgMCwgNywgYnVmKTsKKwlyZXN1bHQgPSBkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsIDAsIDcsIGJ1Zik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgIndyaXRlIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTI5Nyw3ICszODUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlYWQgYWxsIEFMQVJNMSwgQUxBUk0yLCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBhdCBvbmNlICovCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LAorCXJldCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGRzMTMwNy0+cmVncyk7CiAJaWYgKHJldCAhPSA5KSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJhbGFybSByZWFkIiwgcmV0KTsKQEAgLTM1Niw3ICs0NDQsNyBAQAogCQl0LT5lbmFibGVkLCB0LT5wZW5kaW5nKTsKIAogCS8qIHJlYWQgY3VycmVudCBzdGF0dXMgb2YgYm90aCBhbGFybXMgYW5kIHRoZSBjaGlwICovCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LAorCXJldCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGJ1Zik7CiAJaWYgKHJldCAhPSA5KSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJhbGFybSB3cml0ZSIsIHJldCk7CkBAIC0zOTEsNyArNDc5LDcgQEAKIAl9CiAJYnVmWzhdID0gc3RhdHVzICYgfihEUzEzMzdfQklUX0ExSSB8IERTMTMzN19CSVRfQTJJKTsKIAotCXJldCA9IGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsCisJcmV0ID0gZHMxMzA3LT53cml0ZV9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgYWxhcm0gdGltZVxuIik7CkBAIC00NzksNyArNTY3LDcgQEAKIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCi0JcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCA4ICsgb2ZmLCBjb3VudCwgYnVmKTsKKwlyZXN1bHQgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShjbGllbnQsIDggKyBvZmYsIGNvdW50LCBidWYpOwogCWlmIChyZXN1bHQgPCAwKQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzIGVycm9yICVkXG4iLCAibnZyYW0gcmVhZCIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTQ5MCw5ICs1NzgsMTEgQEAKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3OwogCWludAkJCXJlc3VsdDsKIAogCWNsaWVudCA9IGtvYmpfdG9faTJjX2NsaWVudChrb2JqKTsKKwlkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWlmICh1bmxpa2VseShvZmYgPj0gTlZSQU1fU0laRSkpCiAJCXJldHVybiAtRUZCSUc7CkBAIC01MDEsNyArNTkxLDcgQEAKIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCi0JcmVzdWx0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgOCArIG9mZiwgY291bnQsIGJ1Zik7CisJcmVzdWx0ID0gZHMxMzA3LT53cml0ZV9ibG9ja19kYXRhKGNsaWVudCwgOCArIG9mZiwgY291bnQsIGJ1Zik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlcyBlcnJvciAlZFxuIiwgIm52cmFtIHdyaXRlIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTUzNSw5ICs2MjUsOCBAQAogCWludAkJCXdhbnRfaXJxID0gZmFsc2U7CiAJdW5zaWduZWQgY2hhcgkJKmJ1ZjsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwKLQkJCUkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8Ci0JCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKQorCSAgICAmJiAhaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoIShkczEzMDcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMxMzA3KSwgR0ZQX0tFUk5FTCkpKQpAQCAtNTQ3LDYgKzYzNiwxMyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRzMTMwNyk7CiAJZHMxMzA3LT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOwogCWJ1ZiA9IGRzMTMwNy0+cmVnczsKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkgeworCQlkczEzMDctPnJlYWRfYmxvY2tfZGF0YSA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhOworCQlkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGE7CisJfSBlbHNlIHsKKwkJZHMxMzA3LT5yZWFkX2Jsb2NrX2RhdGEgPSBkczEzMDdfcmVhZF9ibG9ja19kYXRhOworCQlkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEgPSBkczEzMDdfd3JpdGVfYmxvY2tfZGF0YTsKKwl9CiAKIAlzd2l0Y2ggKGRzMTMwNy0+dHlwZSkgewogCWNhc2UgZHNfMTMzNzoKQEAgLTU1Nyw3ICs2NTMsNyBAQAogCQkJd2FudF9pcnEgPSB0cnVlOwogCQl9CiAJCS8qIGdldCByZWdpc3RlcnMgdGhhdCB0aGUgInJ0YyIgcmVhZCBiZWxvdyB3b24ndCByZWFkLi4uICovCi0JCXRtcCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LAorCQl0bXAgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKIAkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIDIsIGJ1Zik7CiAJCWlmICh0bXAgIT0gMikgewogCQkJcHJfZGVidWcoInJlYWQgZXJyb3IgJWRcbiIsIHRtcCk7CkBAIC01ODksMTMgKzY4NSw3OSBAQAogCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKIAkJfQogCQlicmVhazsKKworCWNhc2UgcnhfODAyNToKKwkJdG1wID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsCisJCQkJUlg4MDI1X1JFR19DVFJMMSA8PCA0IHwgMHgwOCwgMiwgYnVmKTsKKwkJaWYgKHRtcCAhPSAyKSB7CisJCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCisJCS8qIG9zY2lsbGF0b3Igb2ZmPyAgdHVybiBpdCBvbiwgc28gY2xvY2sgY2FuIHRpY2suICovCisJCWlmICghKGRzMTMwNy0+cmVnc1sxXSAmIFJYODAyNV9CSVRfWFNUKSkgeworCQkJZHMxMzA3LT5yZWdzWzFdIHw9IFJYODAyNV9CSVRfWFNUOworCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgIFJYODAyNV9SRUdfQ1RSTDIgPDwgNCB8IDB4MDgsCisJCQkJCQkgIGRzMTMwNy0+cmVnc1sxXSk7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJvc2NpbGxhdG9yIHN0b3AgZGV0ZWN0ZWQgLSBTRVQgVElNRSFcbiIpOworCQl9CisKKwkJaWYgKGRzMTMwNy0+cmVnc1sxXSAmIFJYODAyNV9CSVRfUE9OKSB7CisJCQlkczEzMDctPnJlZ3NbMV0gJj0gflJYODAyNV9CSVRfUE9OOworCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgIFJYODAyNV9SRUdfQ1RSTDIgPDwgNCB8IDB4MDgsCisJCQkJCQkgIGRzMTMwNy0+cmVnc1sxXSk7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJwb3dlci1vbiBkZXRlY3RlZFxuIik7CisJCX0KKworCQlpZiAoZHMxMzA3LT5yZWdzWzFdICYgUlg4MDI1X0JJVF9WREVUKSB7CisJCQlkczEzMDctPnJlZ3NbMV0gJj0gflJYODAyNV9CSVRfVkRFVDsKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICBSWDgwMjVfUkVHX0NUUkwyIDw8IDQgfCAweDA4LAorCQkJCQkJICBkczEzMDctPnJlZ3NbMV0pOworCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAidm9sdGFnZSBkcm9wIGRldGVjdGVkXG4iKTsKKwkJfQorCisJCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBpbiAyNGhvdXIgbW9kZSAqLworCQlpZiAoIShkczEzMDctPnJlZ3NbMF0gJiBSWDgwMjVfQklUXzI0MTIpKSB7CisJCQl1OCBob3VyOworCisJCQkvKiBzd2l0Y2ggdG8gMjQgaG91ciBtb2RlICovCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgUlg4MDI1X1JFR19DVFJMMSA8PCA0IHwgMHgwOCwKKwkJCQkJCSAgZHMxMzA3LT5yZWdzWzBdIHwKKwkJCQkJCSAgUlg4MDI1X0JJVF8yNDEyKTsKKworCQkJdG1wID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsCisJCQkJCVJYODAyNV9SRUdfQ1RSTDEgPDwgNCB8IDB4MDgsIDIsIGJ1Zik7CisJCQlpZiAodG1wICE9IDIpIHsKKwkJCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKKwkJCQllcnIgPSAtRUlPOworCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJfQorCisJCQkvKiBjb3JyZWN0IGhvdXIgKi8KKwkJCWhvdXIgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdKTsKKwkJCWlmIChob3VyID09IDEyKQorCQkJCWhvdXIgPSAwOworCQkJaWYgKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdICYgRFMxMzA3X0JJVF9QTSkKKwkJCQlob3VyICs9IDEyOworCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgRFMxMzA3X1JFR19IT1VSIDw8IDQgfCAweDA4LAorCQkJCQkJICBob3VyKTsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKIHJlYWRfcnRjOgogCS8qIHJlYWQgUlRDIHJlZ2lzdGVycyAqLwotCXRtcCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LCAwLCA4LCBidWYpOworCXRtcCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LCAwLCA4LCBidWYpOwogCWlmICh0bXAgIT0gOCkgewogCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKIAkJZXJyID0gLUVJTzsKQEAgLTY0OSw2ICs4MTEsNyBAQAogCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKIAkJfQogCQlicmVhazsKKwljYXNlIHJ4XzgwMjU6CiAJY2FzZSBkc18xMzM3OgogCWNhc2UgZHNfMTMzOToKIAkJYnJlYWs7CkBAIC02NjIsNiArODI1LDggQEAKIAkJICogc3lzdGVtcyB0aGF0IHdpbGwgcnVuIHRocm91Z2ggeWVhciAyMTAwLgogCQkgKi8KIAkJYnJlYWs7CisJY2FzZSByeF84MDI1OgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoISh0bXAgJiBEUzEzMDdfQklUXzEySFIpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKaW5kZXggYTViMGZjMC4uNGQzMmUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwpAQCAtMjIyLDE2ICsyMjIsMTYgQEAKIAlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZuZXdfYWxhcm0pOwogCXJ0Y190bV90b190aW1lKCZub3csICZpdGltZSk7CiAKLQluZXdfYWxhcm0gLT0gaXRpbWU7Ci0KIAkvKiBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2VzLCBpbiBhZGRpdGlvbiB0byBkYXRlcyB0aGF0IGFyZQogCSAqIHRydWx5IGluIHRoZSBwYXN0LiAgVG8gYXZvaWQgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gY2hlY2sgZm9yCiAJICogcmFjZXMsIGRhdGVzIGluIHRoZSBwYXN0IGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZSByZWNlbnQgcGFzdAogCSAqIChpLmUuIG5vdCBzb21ldGhpbmcgdGhhdCB3ZSdkIHJhdGhlciB0aGUgY2FsbGVyIGtub3cgYWJvdXQgdmlhCiAJICogYW4gZXJyb3IpLCBhbmQgdGhlIGFsYXJtIGlzIHNldCB0byBnbyBvZmYgYXMgc29vbiBhcyBwb3NzaWJsZS4KIAkgKi8KLQlpZiAobmV3X2FsYXJtIDw9IDApCisJaWYgKHRpbWVfYmVmb3JlX2VxKG5ld19hbGFybSwgaXRpbWUpKQogCQluZXdfYWxhcm0gPSAxOworCWVsc2UKKwkJbmV3X2FsYXJtIC09IGl0aW1lOwogCiAJbXV0ZXhfbG9jaygmZHMxMzc0LT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lZmkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1lZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAyOTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVmaS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogcnRjLWVmaTogUlRDIENsYXNzIERyaXZlciBmb3IgRUZJLWJhc2VkIHN5c3RlbXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKiBBdXRob3I6IGRhbm4gZnJhemllciA8ZGFubmZAaHAuY29tPgorICogQmFzZWQgb24gZWZpcnRjLmMgYnkgU3RlcGhhbmUgRXJhbmlhbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorCisjZGVmaW5lIEVGSV9JU0RTVCAoRUZJX1RJTUVfQURKVVNUX0RBWUxJR0hUfEVGSV9USU1FX0lOX0RBWUxJR0hUKQorLyoKKyAqIEVGSSBFcG9jaCBpcyAxLzEvMTk5OAorICovCisjZGVmaW5lIEVGSV9SVENfRVBPQ0gJCTE5OTgKKworLyoKKyAqIHJldHVybnMgZGF5IG9mIHRoZSB5ZWFyIFswLTM2NV0KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2NvbXB1dGVfeWRheShlZmlfdGltZV90ICplZnQpCit7CisJLyogZWZpX3RpbWVfdC5tb250aCBpcyBpbiB0aGUgWzEtMTJdIHNvLCB3ZSBuZWVkIC0xICovCisJcmV0dXJuIHJ0Y195ZWFyX2RheXMoZWZ0LT5kYXkgLSAxLCBlZnQtPm1vbnRoIC0gMSwgZWZ0LT55ZWFyKTsKK30KKy8qCisgKiByZXR1cm5zIGRheSBvZiB0aGUgd2VlayBbMC02XSAwPVN1bmRheQorICoKKyAqIERvbid0IHRyeSB0byBwcm92aWRlIGEgeWVhciB0aGF0J3MgYmVmb3JlIDE5OTgsIHBsZWFzZSAhCisgKi8KK3N0YXRpYyBpbnQKK2NvbXB1dGVfd2RheShlZmlfdGltZV90ICplZnQpCit7CisJaW50IHk7CisJaW50IG5kYXlzID0gMDsKKworCWlmIChlZnQtPnllYXIgPCAxOTk4KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWZpcnRjOiBFRkkgeWVhciA8IDE5OTgsIGludmFsaWQgZGF0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKHkgPSBFRklfUlRDX0VQT0NIOyB5IDwgZWZ0LT55ZWFyOyB5KyspCisJCW5kYXlzICs9IDM2NSArIChpc19sZWFwX3llYXIoeSkgPyAxIDogMCk7CisKKwluZGF5cyArPSBjb21wdXRlX3lkYXkoZWZ0KTsKKworCS8qCisJICogND0xLzEvMTk5OCB3YXMgYSBUaHVyc2RheQorCSAqLworCXJldHVybiAobmRheXMgKyA0KSAlIDc7Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X3RvX2VmaV90aW1lKHN0cnVjdCBydGNfdGltZSAqd3RpbWUsIGVmaV90aW1lX3QgKmVmdCkKK3sKKwllZnQtPnllYXIJPSB3dGltZS0+dG1feWVhciArIDE5MDA7CisJZWZ0LT5tb250aAk9IHd0aW1lLT50bV9tb24gKyAxOworCWVmdC0+ZGF5CT0gd3RpbWUtPnRtX21kYXk7CisJZWZ0LT5ob3VyCT0gd3RpbWUtPnRtX2hvdXI7CisJZWZ0LT5taW51dGUJPSB3dGltZS0+dG1fbWluOworCWVmdC0+c2Vjb25kIAk9IHd0aW1lLT50bV9zZWM7CisJZWZ0LT5uYW5vc2Vjb25kID0gMDsKKwllZnQtPmRheWxpZ2h0CT0gd3RpbWUtPnRtX2lzZHN0ID8gRUZJX0lTRFNUIDogMDsKKwllZnQtPnRpbWV6b25lCT0gRUZJX1VOU1BFQ0lGSUVEX1RJTUVaT05FOworfQorCitzdGF0aWMgdm9pZAorY29udmVydF9mcm9tX2VmaV90aW1lKGVmaV90aW1lX3QgKmVmdCwgc3RydWN0IHJ0Y190aW1lICp3dGltZSkKK3sKKwltZW1zZXQod3RpbWUsIDAsIHNpemVvZigqd3RpbWUpKTsKKwl3dGltZS0+dG1fc2VjICA9IGVmdC0+c2Vjb25kOworCXd0aW1lLT50bV9taW4gID0gZWZ0LT5taW51dGU7CisJd3RpbWUtPnRtX2hvdXIgPSBlZnQtPmhvdXI7CisJd3RpbWUtPnRtX21kYXkgPSBlZnQtPmRheTsKKwl3dGltZS0+dG1fbW9uICA9IGVmdC0+bW9udGggLSAxOworCXd0aW1lLT50bV95ZWFyID0gZWZ0LT55ZWFyIC0gMTkwMDsKKworCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwl3dGltZS0+dG1fd2RheSA9IGNvbXB1dGVfd2RheShlZnQpOworCisJLyogZGF5IGluIHRoZSB5ZWFyIFsxLTM2NV0qLworCXd0aW1lLT50bV95ZGF5ID0gY29tcHV0ZV95ZGF5KGVmdCk7CisKKworCXN3aXRjaCAoZWZ0LT5kYXlsaWdodCAmIEVGSV9JU0RTVCkgeworCWNhc2UgRUZJX0lTRFNUOgorCQl3dGltZS0+dG1faXNkc3QgPSAxOworCQlicmVhazsKKwljYXNlIEVGSV9USU1FX0FESlVTVF9EQVlMSUdIVDoKKwkJd3RpbWUtPnRtX2lzZHN0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3RpbWUtPnRtX2lzZHN0ID0gLTE7CisJfQorfQorCitzdGF0aWMgaW50IGVmaV9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKndrYWxybSkKK3sKKwllZmlfdGltZV90IGVmdDsKKwllZmlfc3RhdHVzX3Qgc3RhdHVzOworCisJLyoKKwkgKiBBcyBvZiBFRkkgdjEuMTAsIHRoaXMgY2FsbCBhbHdheXMgcmV0dXJucyBhbiB1bnN1cHBvcnRlZCBzdGF0dXMKKwkgKi8KKwlzdGF0dXMgPSBlZmkuZ2V0X3dha2V1cF90aW1lKChlZmlfYm9vbF90ICopJndrYWxybS0+ZW5hYmxlZCwKKwkJCQkgICAgIChlZmlfYm9vbF90ICopJndrYWxybS0+cGVuZGluZywgJmVmdCk7CisKKwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbnZlcnRfZnJvbV9lZmlfdGltZSgmZWZ0LCAmd2thbHJtLT50aW1lKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0oJndrYWxybS0+dGltZSk7Cit9CisKK3N0YXRpYyBpbnQgZWZpX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp3a2Fscm0pCit7CisJZWZpX3RpbWVfdCBlZnQ7CisJZWZpX3N0YXR1c190IHN0YXR1czsKKworCWNvbnZlcnRfdG9fZWZpX3RpbWUoJndrYWxybS0+dGltZSwgJmVmdCk7CisKKwkvKgorCSAqIFhYWCBGaXhtZToKKwkgKiBBcyBvZiBFRkkgMC45MiB3aXRoIHRoZSBmaXJtd2FyZSBJIGhhdmUgb24gbXkKKwkgKiBtYWNoaW5lIHRoaXMgY2FsbCBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgcXVpdGUKKwkgKiByaWdodAorCSAqCisJICogQXMgb2YgdjEuMTAsIHRoaXMgY2FsbCBhbHdheXMgcmV0dXJucyBhbiB1bnN1cHBvcnRlZCBzdGF0dXMKKwkgKi8KKwlzdGF0dXMgPSBlZmkuc2V0X3dha2V1cF90aW1lKChlZmlfYm9vbF90KXdrYWxybS0+ZW5hYmxlZCwgJmVmdCk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ3cml0ZSBzdGF0dXMgaXMgJWRcbiIsIChpbnQpc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXMgPT0gRUZJX1NVQ0NFU1MgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIGludCBlZmlfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwllZmlfc3RhdHVzX3Qgc3RhdHVzOworCWVmaV90aW1lX3QgZWZ0OworCWVmaV90aW1lX2NhcF90IGNhcDsKKworCXN0YXR1cyA9IGVmaS5nZXRfdGltZSgmZWZ0LCAmY2FwKTsKKworCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKwkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlwcmludGsoS0VSTl9FUlIgImVmaXRpbWU6IGNhbid0IHJlYWQgdGltZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnZlcnRfZnJvbV9lZmlfdGltZSgmZWZ0LCB0bSk7CisKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBlZmlfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWVmaV9zdGF0dXNfdCBzdGF0dXM7CisJZWZpX3RpbWVfdCBlZnQ7CisKKwljb252ZXJ0X3RvX2VmaV90aW1lKHRtLCAmZWZ0KTsKKworCXN0YXR1cyA9IGVmaS5zZXRfdGltZSgmZWZ0KTsKKworCXJldHVybiBzdGF0dXMgPT0gRUZJX1NVQ0NFU1MgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGVmaV9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBlZmlfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IGVmaV9zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IGVmaV9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBlZmlfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWZpX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1lZmkiLCAmZGV2LT5kZXYsICZlZmlfcnRjX29wcywKKwkJCQkJVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBlZmlfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlZmlfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtZWZpIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBlZmlfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChlZmlfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlZmlfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZlZmlfcnRjX2RyaXZlciwgZWZpX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZmlfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWZpX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlZmlfcnRjX2luaXQpOworbW9kdWxlX2V4aXQoZWZpX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiZGFubiBmcmF6aWVyIDxkYW5uZkBocC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVGSSBSVEMgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZ2VuZXJpYy5jIGIvZHJpdmVycy9ydGMvcnRjLWdlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMyMjAwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1nZW5lcmljLmMKQEAgLTAsMCArMSw4NCBAQAorLyogcnRjLWdlbmVyaWM6IFJUQyBkcml2ZXIgdXNpbmcgdGhlIGdlbmVyaWMgUlRDIGFic3RyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworc3RhdGljIGludCBnZW5lcmljX2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gZ2V0X3J0Y190aW1lKHRtKTsKKworCWlmIChyZXQgJiBSVENfQkFUVF9CQUQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWlmIChzZXRfcnRjX3RpbWUodG0pIDwgMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBnZW5lcmljX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IGdlbmVyaWNfZ2V0X3RpbWUsCisJLnNldF90aW1lID0gZ2VuZXJpY19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicnRjLWdlbmVyaWMiLCAmZGV2LT5kZXYsICZnZW5lcmljX3J0Y19vcHMsCisJCQkJICBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGdlbmVyaWNfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZW5lcmljX3J0Y19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLWdlbmVyaWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChnZW5lcmljX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmdlbmVyaWNfcnRjX2RyaXZlciwgZ2VuZXJpY19ydGNfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXJpY19ydGNfZmluaSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChnZW5lcmljX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KGdlbmVyaWNfcnRjX2ZpbmkpOworCitNT0RVTEVfQVVUSE9SKCJLeWxlIE1jTWFydGluIDxreWxlQG1jbWFydGluLmNhPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwppbmRleCBkZDcwYmY3Li43NzM4NTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCkBAIC0yNiwxNCArMjYsMTMgQEAKIH07CiAKICNkZWZpbmUgTEVBUFNfVEhSVV9FTkRfT0YoeSkgKCh5KS80IC0gKHkpLzEwMCArICh5KS80MDApCi0jZGVmaW5lIExFQVBfWUVBUih5ZWFyKSAoKCEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSkgfHwgISh5ZWFyICUgNDAwKSkKIAogLyoKICAqIFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgbW9udGguCiAgKi8KIGludCBydGNfbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKQogewotCXJldHVybiBydGNfZGF5c19pbl9tb250aFttb250aF0gKyAoTEVBUF9ZRUFSKHllYXIpICYmIG1vbnRoID09IDEpOworCXJldHVybiBydGNfZGF5c19pbl9tb250aFttb250aF0gKyAoaXNfbGVhcF95ZWFyKHllYXIpICYmIG1vbnRoID09IDEpOwogfQogRVhQT1JUX1NZTUJPTChydGNfbW9udGhfZGF5cyk7CiAKQEAgLTQyLDcgKzQxLDcgQEAKICAqLwogaW50IHJ0Y195ZWFyX2RheXModW5zaWduZWQgaW50IGRheSwgdW5zaWduZWQgaW50IG1vbnRoLCB1bnNpZ25lZCBpbnQgeWVhcikKIHsKLQlyZXR1cm4gcnRjX3lkYXlzW0xFQVBfWUVBUih5ZWFyKV1bbW9udGhdICsgZGF5LTE7CisJcmV0dXJuIHJ0Y195ZGF5c1tpc19sZWFwX3llYXIoeWVhcildW21vbnRoXSArIGRheS0xOwogfQogRVhQT1JUX1NZTUJPTChydGNfeWVhcl9kYXlzKTsKIApAQCAtNjYsNyArNjUsNyBAQAogCQktIExFQVBTX1RIUlVfRU5EX09GKDE5NzAgLSAxKTsKIAlpZiAoZGF5cyA8IDApIHsKIAkJeWVhciAtPSAxOwotCQlkYXlzICs9IDM2NSArIExFQVBfWUVBUih5ZWFyKTsKKwkJZGF5cyArPSAzNjUgKyBpc19sZWFwX3llYXIoeWVhcik7CiAJfQogCXRtLT50bV95ZWFyID0geWVhciAtIDE5MDA7CiAJdG0tPnRtX3lkYXkgPSBkYXlzICsgMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA4OTNmN2RlLi42MGZlMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC02NCwxMCArNjQsMTIgQEAKICNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfQkwJKDEgPDwgMSkJLyogQmF0dGVyeSBsb3cgaW5kaWNhdG9yICovCiAjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1NRCSgxIDw8IDIpCS8qIFNxdWFyZXdhdmUgZmVhdHVyZSAqLwogI2RlZmluZSBNNDFUODBfRkVBVFVSRV9XRAkoMSA8PCAzKQkvKiBFeHRyYSB3YXRjaGRvZyByZXNvbHV0aW9uICovCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1NRX0FMVAkoMSA8PCA0KQkvKiBSU3ggYml0cyBhcmUgaW4gcmVnIDQgKi8KIAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wNSIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG00MXQ4MF9pZFtdID0geworCXsgIm00MXQ2MiIsIE00MVQ4MF9GRUFUVVJFX1NRIHwgTTQxVDgwX0ZFQVRVUkVfU1FfQUxUIH0sCiAJeyAibTQxdDY1IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9XRCB9LAogCXsgIm00MXQ4MCIsIE00MVQ4MF9GRUFUVVJFX1NRIH0sCiAJeyAibTQxdDgxIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9TUX0sCkBAIC0zOTMsMTIgKzM5NSwxNSBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHZhbDsKKwlpbnQgdmFsLCByZWdfc3F3OwogCiAJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcpOworCXJlZ19zcXcgPSBNNDFUODBfUkVHX1NRVzsKKwlpZiAoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUV9BTFQpCisJCXJlZ19zcXcgPSBNNDFUODBfUkVHX1dEQVk7CisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnX3Nxdyk7CiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiAtRUlPOwogCXZhbCA9ICh2YWwgPj4gNCkgJiAweGY7CkBAIC00MTksNyArNDI0LDcgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBtNDF0ODBfZGF0YSAqY2xpZW50ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBhbG1vbiwgc3F3OworCWludCBhbG1vbiwgc3F3LCByZWdfc3F3OwogCWludCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCkBAIC00NDAsMTMgKzQ0NSwxNiBAQAogCWFsbW9uID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04pOwogCWlmIChhbG1vbiA8IDApCiAJCXJldHVybiAtRUlPOwotCXNxdyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfU1FXKTsKKwlyZWdfc3F3ID0gTTQxVDgwX1JFR19TUVc7CisJaWYgKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfU1FfQUxUKQorCQlyZWdfc3F3ID0gTTQxVDgwX1JFR19XREFZOworCXNxdyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZ19zcXcpOwogCWlmIChzcXcgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAlzcXcgPSAoc3F3ICYgMHgwZikgfCAodmFsIDw8IDQpOwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sCiAJCQkJICAgICAgYWxtb24gJiB+TTQxVDgwX0FMTU9OX1NRV0UpIDwgMCB8fAotCSAgICBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcsIHNxdykgPCAwKQorCSAgICBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnX3Nxdywgc3F3KSA8IDApCiAJCXJldHVybiAtRUlPOwogCWlmICh2YWwgJiYgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fTU9OLAogCQkJCQkgICAgIGFsbW9uIHwgTTQxVDgwX0FMTU9OX1NRV0UpIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiZmE2Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGFyaXNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyogcnRjLXBhcmlzYzogUlRDIGZvciBIUCBQQS1SSVNDIGZpcm13YXJlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLQotLyogYXMgc2ltcGxlIGFzIGNhbiBiZSwgYW5kIG5vIHNpbXBsZXIuICovCi1zdHJ1Y3QgcGFyaXNjX3J0YyB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCi1zdGF0aWMgaW50IHBhcmlzY19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0Jc3RydWN0IHBhcmlzY19ydGMgKnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGdldF9ydGNfdGltZSh0bSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHJldCAmIFJUQ19CQVRUX0JBRCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyaXNjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQlzdHJ1Y3QgcGFyaXNjX3J0YyAqcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gc2V0X3J0Y190aW1lKHRtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwYXJpc2NfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lID0gcGFyaXNjX2dldF90aW1lLAotCS5zZXRfdGltZSA9IHBhcmlzY19zZXRfdGltZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcmlzY19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwYXJpc2NfcnRjICpwOwotCi0JcCA9IGt6YWxsb2Moc2l6ZW9mICgqcCksIEdGUF9LRVJORUwpOwotCWlmICghcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzcGluX2xvY2tfaW5pdCgmcC0+bG9jayk7Ci0KLQlwLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtcGFyaXNjIiwgJmRldi0+ZGV2LCAmcGFyaXNjX3J0Y19vcHMsCi0JCQkJCVRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHAtPnJ0YykpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIocC0+cnRjKTsKLQkJa2ZyZWUocCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBwYXJpc2NfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBhcmlzY19ydGMgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHAtPnJ0Yyk7Ci0Ja2ZyZWUocCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGFyaXNjX3J0Y19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicnRjLXBhcmlzYyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gcGFyaXNjX3J0Y19wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AocGFyaXNjX3J0Y19yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyaXNjX3J0Y19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFyaXNjX3J0Y19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGFyaXNjX3J0Y19maW5pKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhcmlzY19ydGNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocGFyaXNjX3J0Y19pbml0KTsKLW1vZHVsZV9leGl0KHBhcmlzY19ydGNfZmluaSk7Ci0KLU1PRFVMRV9BVVRIT1IoIkt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkhQIFBBLVJJU0MgUlRDIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBwYy5jIGIvZHJpdmVycy9ydGMvcnRjLXBwYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU5N2UyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcGMuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBSVEMgZHJpdmVyIGZvciBwcGNfbWQgUlRDIGZ1bmN0aW9ucwotICoKLSAqIMKpIDIwMDcgUmVkIEhhdCwgSW5jLgotICoKLSAqIEF1dGhvcjogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLQotc3RhdGljIGludCBwcGNfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JcHBjX21kLmdldF9ydGNfdGltZSh0bSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHBjX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JcmV0dXJuIHBwY19tZC5zZXRfcnRjX3RpbWUodG0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcHBjX3J0Y19vcHMgPSB7Ci0JLnNldF90aW1lID0gcHBjX3J0Y19zZXRfdGltZSwKLQkucmVhZF90aW1lID0gcHBjX3J0Y19yZWFkX3RpbWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwcGNfcnRjX3BkZXY7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBwY19ydGNfaW5pdCh2b2lkKQotewotCWlmICghcHBjX21kLmdldF9ydGNfdGltZSB8fCAhcHBjX21kLnNldF9ydGNfdGltZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcGNfcnRjX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwcGMtcnRjIiwgMCwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihwcGNfcnRjX3BkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihwcGNfcnRjX3BkZXYpOwotCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicHBjX21kIiwgJnBwY19ydGNfcGRldi0+ZGV2LAotCQkJCSAgJnBwY19ydGNfb3BzLCBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBwY19ydGNfcGRldik7Ci0JCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwcGNfcnRjX2V4aXQodm9pZCkKLXsKLQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwcGNfcnRjX3BkZXYpOwotfQotCi1tb2R1bGVfaW5pdChwcGNfcnRjX2luaXQpOwotbW9kdWxlX2V4aXQocHBjX3J0Y19leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFJUQyBjbGFzcyBkcml2ZXIgZm9yIFBvd2VyUEMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCmluZGV4IDBjNjI1N2EuLmMwODZmYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwpAQCAtMTA1LDE0ICsxMDUsOCBAQAogCiB2b2lkIHJ0Y19wcm9jX2FkZF9kZXZpY2Uoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKIHsKLQlpZiAocnRjLT5pZCA9PSAwKSB7Ci0JCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCi0JCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoImRyaXZlci9ydGMiLCAwLCBOVUxMLAotCQkJCSAgICAgICAmcnRjX3Byb2NfZm9wcywgcnRjKTsKLQkJaWYgKGVudCkKLQkJCWVudC0+b3duZXIgPSBydGMtPm93bmVyOwotCX0KKwlpZiAocnRjLT5pZCA9PSAwKQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJkcml2ZXIvcnRjIiwgMCwgTlVMTCwgJnJ0Y19wcm9jX2ZvcHMsIHJ0Yyk7CiB9CiAKIHZvaWQgcnRjX3Byb2NfZGVsX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBzMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBzMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODEzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHMzLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBQUzMgUlRDIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDA5IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisKKyNpbmNsdWRlIDxhc20vbHYxY2FsbC5oPgorI2luY2x1ZGUgPGFzbS9wczMuaD4KKworCitzdGF0aWMgdTY0IHJlYWRfcnRjKHZvaWQpCit7CisJaW50IHJlc3VsdDsKKwl1NjQgcnRjX3ZhbDsKKwl1NjQgdGJfdmFsOworCisJcmVzdWx0ID0gbHYxX2dldF9ydGMoJnJ0Y192YWwsICZ0Yl92YWwpOworCUJVR19PTihyZXN1bHQpOworCisJcmV0dXJuIHJ0Y192YWw7Cit9CisKK3N0YXRpYyBpbnQgcHMzX2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlydGNfdGltZV90b190bShyZWFkX3J0YygpICsgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKCksIHRtKTsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBwczNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXVuc2lnbmVkIGxvbmcgbm93OworCisJcnRjX3RtX3RvX3RpbWUodG0sICZub3cpOworCXBzM19vc19hcmVhX3NldF9ydGNfZGlmZihub3cgLSByZWFkX3J0YygpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBzM19ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBwczNfZ2V0X3RpbWUsCisJLnNldF90aW1lID0gcHMzX3NldF90aW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHMzX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1wczMiLCAmZGV2LT5kZXYsICZwczNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpCisJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHBzM19ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBzM19ydGNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJ0Yy1wczMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChwczNfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwczNfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZwczNfcnRjX2RyaXZlciwgcHMzX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwczNfcnRjX2Zpbmkodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHMzX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChwczNfcnRjX2luaXQpOworbW9kdWxlX2V4aXQocHMzX3J0Y19maW5pKTsKKworTU9EVUxFX0FVVEhPUigiU29ueSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJwczMgUlRDIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpydGMtcHMzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCmluZGV4IDE0ZDRmMDMuLmFkMTY0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCkBAIC0yNywxNyArMjcsMTYyIEBACiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLXYzMDIwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjdW5kZWYgREVCVUcKIAorc3RydWN0IHYzMDIwOworCitzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgeworCWludCAoKm1hcF9pbykoc3RydWN0IHYzMDIwICpjaGlwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkgICAgICBzdHJ1Y3QgdjMwMjBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCXZvaWQgKCp1bm1hcF9pbykoc3RydWN0IHYzMDIwICpjaGlwKTsKKwl1bnNpZ25lZCBjaGFyICgqcmVhZF9iaXQpKHN0cnVjdCB2MzAyMCAqY2hpcCk7CisJdm9pZCAoKndyaXRlX2JpdCkoc3RydWN0IHYzMDIwICpjaGlwLCB1bnNpZ25lZCBjaGFyIGJpdCk7Cit9OworCisjZGVmaW5lIFYzMDIwX0NTCTAKKyNkZWZpbmUgVjMwMjBfV1IJMQorI2RlZmluZSBWMzAyMF9SRAkyCisjZGVmaW5lIFYzMDIwX0lPCTMKKworc3RydWN0IHYzMDIwX2dwaW8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGdwaW87Cit9OworCiBzdHJ1Y3QgdjMwMjAgeworCS8qIE1NSU8gYWNjZXNzICovCiAJdm9pZCBfX2lvbWVtICppb2FkZHJlc3M7CiAJaW50IGxlZnRzaGlmdDsKKworCS8qIEdQSU8gYWNjZXNzICovCisJc3RydWN0IHYzMDIwX2dwaW8gKmdwaW87CisKKwlzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgKm9wczsKKwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiB9OwogCisKK3N0YXRpYyBpbnQgdjMwMjBfbW1pb19tYXAoc3RydWN0IHYzMDIwICpjaGlwLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICBzdHJ1Y3QgdjMwMjBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX01FTSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWNoaXAtPmxlZnRzaGlmdCA9IHBkYXRhLT5sZWZ0c2hpZnQ7CisJY2hpcC0+aW9hZGRyZXNzID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgMSk7CisJaWYgKGNoaXAtPmlvYWRkcmVzcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHYzMDIwX21taW9fdW5tYXAoc3RydWN0IHYzMDIwICpjaGlwKQoreworCWlvdW5tYXAoY2hpcC0+aW9hZGRyZXNzKTsKK30KKworc3RhdGljIHZvaWQgdjMwMjBfbW1pb193cml0ZV9iaXQoc3RydWN0IHYzMDIwICpjaGlwLCB1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwl3cml0ZWwoYml0IDw8IGNoaXAtPmxlZnRzaGlmdCwgY2hpcC0+aW9hZGRyZXNzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdjMwMjBfbW1pb19yZWFkX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJcmV0dXJuIHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpOworfQorCitzdGF0aWMgc3RydWN0IHYzMDIwX2NoaXBfb3BzIHYzMDIwX21taW9fb3BzID0geworCS5tYXBfaW8JCT0gdjMwMjBfbW1pb19tYXAsCisJLnVubWFwX2lvCT0gdjMwMjBfbW1pb191bm1hcCwKKwkucmVhZF9iaXQJPSB2MzAyMF9tbWlvX3JlYWRfYml0LAorCS53cml0ZV9iaXQJPSB2MzAyMF9tbWlvX3dyaXRlX2JpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdjMwMjBfZ3BpbyB2MzAyMF9ncGlvW10gPSB7CisJeyAiUlRDIENTIiwgMCB9LAorCXsgIlJUQyBXUiIsIDAgfSwKKwl7ICJSVEMgUkQiLCAwIH0sCisJeyAiUlRDIElPIiwgMCB9LAorfTsKKworc3RhdGljIGludCB2MzAyMF9ncGlvX21hcChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpbnQgaSwgZXJyOworCisJdjMwMjBfZ3Bpb1tWMzAyMF9DU10uZ3BpbyA9IHBkYXRhLT5ncGlvX2NzOworCXYzMDIwX2dwaW9bVjMwMjBfV1JdLmdwaW8gPSBwZGF0YS0+Z3Bpb193cjsKKwl2MzAyMF9ncGlvW1YzMDIwX1JEXS5ncGlvID0gcGRhdGEtPmdwaW9fcmQ7CisJdjMwMjBfZ3Bpb1tWMzAyMF9JT10uZ3BpbyA9IHBkYXRhLT5ncGlvX2lvOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodjMwMjBfZ3Bpbyk7IGkrKykgeworCQllcnIgPSBncGlvX3JlcXVlc3QodjMwMjBfZ3Bpb1tpXS5ncGlvLCB2MzAyMF9ncGlvW2ldLm5hbWUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfcmVxdWVzdDsKKworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodjMwMjBfZ3Bpb1tpXS5ncGlvLCAxKTsKKwl9CisKKwljaGlwLT5ncGlvID0gdjMwMjBfZ3BpbzsKKworCXJldHVybiAwOworCitlcnJfcmVxdWVzdDoKKwl3aGlsZSAoLS1pID49IDApCisJCWdwaW9fZnJlZSh2MzAyMF9ncGlvW2ldLmdwaW8pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdjMwMjBfZ3Bpb191bm1hcChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2MzAyMF9ncGlvKTsgaSsrKQorCQlncGlvX2ZyZWUodjMwMjBfZ3Bpb1tpXS5ncGlvKTsKK30KKworc3RhdGljIHZvaWQgdjMwMjBfZ3Bpb193cml0ZV9iaXQoc3RydWN0IHYzMDIwICpjaGlwLCB1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2hpcC0+Z3Bpb1tWMzAyMF9JT10uZ3BpbywgYml0KTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAwKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1dSXS5ncGlvLCAwKTsKKwl1ZGVsYXkoMSk7CisJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+Z3Bpb1tWMzAyMF9XUl0uZ3BpbywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+Z3Bpb1tWMzAyMF9DU10uZ3BpbywgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHYzMDIwX2dwaW9fcmVhZF9iaXQoc3RydWN0IHYzMDIwICpjaGlwKQoreworCWludCBiaXQ7CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChjaGlwLT5ncGlvW1YzMDIwX0lPXS5ncGlvKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAwKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1JEXS5ncGlvLCAwKTsKKwl1ZGVsYXkoMSk7CisJYml0ID0gISFncGlvX2dldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0lPXS5ncGlvKTsKKwl1ZGVsYXkoMSk7CisJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+Z3Bpb1tWMzAyMF9SRF0uZ3BpbywgMSk7CisJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+Z3Bpb1tWMzAyMF9DU10uZ3BpbywgMSk7CisKKwlyZXR1cm4gYml0OworfQorCitzdGF0aWMgc3RydWN0IHYzMDIwX2NoaXBfb3BzIHYzMDIwX2dwaW9fb3BzID0geworCS5tYXBfaW8JCT0gdjMwMjBfZ3Bpb19tYXAsCisJLnVubWFwX2lvCT0gdjMwMjBfZ3Bpb191bm1hcCwKKwkucmVhZF9iaXQJPSB2MzAyMF9ncGlvX3JlYWRfYml0LAorCS53cml0ZV9iaXQJPSB2MzAyMF9ncGlvX3dyaXRlX2JpdCwKK307CisKIHN0YXRpYyB2b2lkIHYzMDIwX3NldF9yZWcoc3RydWN0IHYzMDIwICpjaGlwLCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MsCiAJCQl1bnNpZ25lZCBjaGFyIGRhdGEpCiB7CkBAIC00Niw3ICsxOTEsNyBAQAogCiAJdG1wID0gYWRkcmVzczsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXdyaXRlbCgodG1wICYgMSkgPDwgY2hpcC0+bGVmdHNoaWZ0LCBjaGlwLT5pb2FkZHJlc3MpOworCQljaGlwLT5vcHMtPndyaXRlX2JpdChjaGlwLCAodG1wICYgMSkpOwogCQl0bXAgPj49IDE7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC01NCw3ICsxOTksNyBAQAogCS8qIENvbW1hbmRzIGRvbnQgaGF2ZSBkYXRhICovCiAJaWYgKCFWMzAyMF9JU19DT01NQU5EKGFkZHJlc3MpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJCXdyaXRlbCgoZGF0YSAmIDEpIDw8IGNoaXAtPmxlZnRzaGlmdCwgY2hpcC0+aW9hZGRyZXNzKTsKKwkJCWNoaXAtPm9wcy0+d3JpdGVfYml0KGNoaXAsIChkYXRhICYgMSkpOwogCQkJZGF0YSA+Pj0gMTsKIAkJCXVkZWxheSgxKTsKIAkJfQpAQCAtNjMsMTggKzIwOCwxOCBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9nZXRfcmVnKHN0cnVjdCB2MzAyMCAqY2hpcCwgdW5zaWduZWQgY2hhciBhZGRyZXNzKQogewotCXVuc2lnbmVkIGludCBkYXRhPTA7CisJdW5zaWduZWQgaW50IGRhdGEgPSAwOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQl3cml0ZWwoKGFkZHJlc3MgJiAxKSA8PCBjaGlwLT5sZWZ0c2hpZnQsIGNoaXAtPmlvYWRkcmVzcyk7CisJCWNoaXAtPm9wcy0+d3JpdGVfYml0KGNoaXAsIChhZGRyZXNzICYgMSkpOwogCQlhZGRyZXNzID4+PSAxOwogCQl1ZGVsYXkoMSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlkYXRhID4+PSAxOwotCQlpZiAocmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCkpCisJCWlmIChjaGlwLT5vcHMtPnJlYWRfYml0KGNoaXApKQogCQkJZGF0YSB8PSAweDgwOwogCQl1ZGVsYXkoMSk7CiAJfQpAQCAtMTA2LDE2ICsyNTEsMTQgQEAKIAl0bXAgPSB2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1lFQVIpOwogCWR0LT50bV95ZWFyID0gYmNkMmJpbih0bXApKzEwMDsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJcbiVzIDogUmVhZCBSVEMgdmFsdWVzXG4iLF9fZnVuY19fKTsKLQlwcmludGsoInRtX2hvdXI6ICVpXG4iLGR0LT50bV9ob3VyKTsKLQlwcmludGsoInRtX21pbiA6ICVpXG4iLGR0LT50bV9taW4pOwotCXByaW50aygidG1fc2VjIDogJWlcbiIsZHQtPnRtX3NlYyk7Ci0JcHJpbnRrKCJ0bV95ZWFyOiAlaVxuIixkdC0+dG1feWVhcik7Ci0JcHJpbnRrKCJ0bV9tb24gOiAlaVxuIixkdC0+dG1fbW9uKTsKLQlwcmludGsoInRtX21kYXk6ICVpXG4iLGR0LT50bV9tZGF5KTsKLQlwcmludGsoInRtX3dkYXk6ICVpXG4iLGR0LT50bV93ZGF5KTsKLSNlbmRpZgorCWRldl9kYmcoZGV2LCAiXG4lcyA6IFJlYWQgUlRDIHZhbHVlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZGV2LCAidG1faG91cjogJWlcbiIsIGR0LT50bV9ob3VyKTsKKwlkZXZfZGJnKGRldiwgInRtX21pbiA6ICVpXG4iLCBkdC0+dG1fbWluKTsKKwlkZXZfZGJnKGRldiwgInRtX3NlYyA6ICVpXG4iLCBkdC0+dG1fc2VjKTsKKwlkZXZfZGJnKGRldiwgInRtX3llYXI6ICVpXG4iLCBkdC0+dG1feWVhcik7CisJZGV2X2RiZyhkZXYsICJ0bV9tb24gOiAlaVxuIiwgZHQtPnRtX21vbik7CisJZGV2X2RiZyhkZXYsICJ0bV9tZGF5OiAlaVxuIiwgZHQtPnRtX21kYXkpOworCWRldl9kYmcoZGV2LCAidG1fd2RheTogJWlcbiIsIGR0LT50bV93ZGF5KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI1LDE1ICsyNjgsMTMgQEAKIHsKIAlzdHJ1Y3QgdjMwMjAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotI2lmZGVmIERFQlVHCi0JcHJpbnRrKCJcbiVzIDogU2V0dGluZyBSVEMgdmFsdWVzXG4iLF9fZnVuY19fKTsKLQlwcmludGsoInRtX3NlYyA6ICVpXG4iLGR0LT50bV9zZWMpOwotCXByaW50aygidG1fbWluIDogJWlcbiIsZHQtPnRtX21pbik7Ci0JcHJpbnRrKCJ0bV9ob3VyOiAlaVxuIixkdC0+dG1faG91cik7Ci0JcHJpbnRrKCJ0bV9tZGF5OiAlaVxuIixkdC0+dG1fbWRheSk7Ci0JcHJpbnRrKCJ0bV93ZGF5OiAlaVxuIixkdC0+dG1fd2RheSk7Ci0JcHJpbnRrKCJ0bV95ZWFyOiAlaVxuIixkdC0+dG1feWVhcik7Ci0jZW5kaWYKKwlkZXZfZGJnKGRldiwgIlxuJXMgOiBTZXR0aW5nIFJUQyB2YWx1ZXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgInRtX3NlYyA6ICVpXG4iLCBkdC0+dG1fc2VjKTsKKwlkZXZfZGJnKGRldiwgInRtX21pbiA6ICVpXG4iLCBkdC0+dG1fbWluKTsKKwlkZXZfZGJnKGRldiwgInRtX2hvdXI6ICVpXG4iLCBkdC0+dG1faG91cik7CisJZGV2X2RiZyhkZXYsICJ0bV9tZGF5OiAlaVxuIiwgZHQtPnRtX21kYXkpOworCWRldl9kYmcoZGV2LCAidG1fd2RheTogJWlcbiIsIGR0LT50bV93ZGF5KTsKKwlkZXZfZGJnKGRldiwgInRtX3llYXI6ICVpXG4iLCBkdC0+dG1feWVhcik7CiAKIAkvKiBXcml0ZSBhbGwgdGhlIHZhbHVlcyB0byByYW0uLi4gKi8KIAl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMsIAliaW4yYmNkKGR0LT50bV9zZWMpKTsKQEAgLTE2OCwzMCArMzA5LDI4IEBACiAJaW50IGk7CiAJaW50IHRlbXA7CiAKLQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNKQotCQlyZXR1cm4gLUVCVVNZOwotCiAJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mICpjaGlwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JY2hpcC0+bGVmdHNoaWZ0ID0gcGRhdGEtPmxlZnRzaGlmdDsKLQljaGlwLT5pb2FkZHJlc3MgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAxKTsKLQlpZiAoY2hpcC0+aW9hZGRyZXNzID09IE5VTEwpCisJaWYgKHBkYXRhLT51c2VfZ3BpbykKKwkJY2hpcC0+b3BzID0gJnYzMDIwX2dwaW9fb3BzOworCWVsc2UKKwkJY2hpcC0+b3BzID0gJnYzMDIwX21taW9fb3BzOworCisJcmV0dmFsID0gY2hpcC0+b3BzLT5tYXBfaW8oY2hpcCwgcGRldiwgcGRhdGEpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX2NoaXA7CiAKIAkvKiBNYWtlIHN1cmUgdGhlIHYzMDIwIGV4cGVjdHMgYSBjb21tdW5pY2F0aW9uIGN5Y2xlCiAJICogYnkgcmVhZGluZyA4IHRpbWVzICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJdGVtcCA9IHJlYWRsKGNoaXAtPmlvYWRkcmVzcyk7CisJCXRlbXAgPSBjaGlwLT5vcHMtPnJlYWRfYml0KGNoaXApOwogCiAJLyogVGVzdCBjaGlwIGJ5IGRvaW5nIGEgd3JpdGUvcmVhZCBzZXF1ZW5jZQogCSAqIHRvIHRoZSBjaGlwIHJhbSAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgMHgzMyk7Ci0JaWYodjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTKSAhPSAweDMzKSB7CisJaWYgKHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUykgIT0gMHgzMykgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGVycl9pbzsKIAl9CkBAIC0yMDAsMTAgKzMzOSwxNyBAQAogCSAqIGFyZSBhbGwgZGlzYWJsZWQgKi8KIAl2MzAyMF9zZXRfcmVnKGNoaXAsIFYzMDIwX1NUQVRVU18wLCAweDApOwogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkNoaXAgYXZhaWxhYmxlIGF0IHBoeXNpY2FsIGFkZHJlc3MgMHglbGx4LCIKLQkJImRhdGEgY29ubmVjdGVkIHRvIEQlZFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKLQkJY2hpcC0+bGVmdHNoaWZ0KTsKKwlpZiAocGRhdGEtPnVzZV9ncGlvKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ2hpcCBhdmFpbGFibGUgYXQgR1BJT3MgIgorCQkJICIlZCwgJWQsICVkLCAlZFxuIiwKKwkJCSBjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCBjaGlwLT5ncGlvW1YzMDIwX1dSXS5ncGlvLAorCQkJIGNoaXAtPmdwaW9bVjMwMjBfUkRdLmdwaW8sIGNoaXAtPmdwaW9bVjMwMjBfSU9dLmdwaW8pOworCWVsc2UKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNoaXAgYXZhaWxhYmxlIGF0ICIKKwkJCSAicGh5c2ljYWwgYWRkcmVzcyAweCVsbHgsIgorCQkJICJkYXRhIGNvbm5lY3RlZCB0byBEJWRcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCSBjaGlwLT5sZWZ0c2hpZnQpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2hpcCk7CiAKQEAgLTIxOCw3ICszNjQsNyBAQAogCXJldHVybiAwOwogCiBlcnJfaW86Ci0JaW91bm1hcChjaGlwLT5pb2FkZHJlc3MpOworCWNoaXAtPm9wcy0+dW5tYXBfaW8oY2hpcCk7CiBlcnJfY2hpcDoKIAlrZnJlZShjaGlwKTsKIApAQCAtMjMzLDcgKzM3OSw3IEBACiAJaWYgKHJ0YykKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiAKLQlpb3VubWFwKGNoaXAtPmlvYWRkcmVzcyk7CisJY2hpcC0+b3BzLT51bm1hcF9pbyhjaGlwKTsKIAlrZnJlZShjaGlwKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jIGIvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCmluZGV4IDVjNWUzYWEuLmM5MWVkYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtd204MzUwLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCWRvIHsKIAkJcnRjX2N0cmwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfUlRDX1RJTUVfQ09OVFJPTCk7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCX0gd2hpbGUgKHJldHJpZXMtLSAmJiAhKHJ0Y19jdHJsICYgV004MzUwX1JUQ19TVFMpKTsKKwl9IHdoaWxlICgtLXJldHJpZXMgJiYgIShydGNfY3RybCAmIFdNODM1MF9SVENfU1RTKSk7CiAKIAlpZiAoIXJldHJpZXMpIHsKIAkJZGV2X2VycihkZXYsICJ0aW1lZCBvdXQgb24gc2V0IGNvbmZpcm1hdGlvblxuIik7CkBAIC0yMzYsNiArMjM2LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgd204MzUwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZW5hYmxlZCkKKwkJcmV0dXJuIHdtODM1MF9ydGNfc3RhcnRfYWxhcm0od204MzUwKTsKKwllbHNlCisJCXJldHVybiB3bTgzNTBfcnRjX3N0b3BfYWxhcm0od204MzUwKTsKK30KKwogc3RhdGljIGludCB3bTgzNTBfcnRjX3NldGFsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCiB7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0yOTEsMzAgKzMwMiwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBIYW5kbGUgY29tbWFuZHMgZnJvbSB1c2VyLXNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgd204MzUwX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHdtODM1MF9ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0dXJuIHdtODM1MF9ydGNfc3RvcF9hbGFybSh3bTgzNTApOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJcmV0dXJuIHdtODM1MF9ydGNfc3RhcnRfYWxhcm0od204MzUwKTsKLQotCWNhc2UgUlRDX1VJRV9PRkY6Ci0JCXdtODM1MF9tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX1VJRV9PTjoKKwlpZiAoZW5hYmxlZCkKIAkJd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCWVsc2UKKwkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ1LDExICszNDEsMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHdtODM1MF9ydGNfb3BzID0gewotCS5pb2N0bCA9IHdtODM1MF9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZSA9IHdtODM1MF9ydGNfcmVhZHRpbWUsCiAJLnNldF90aW1lID0gd204MzUwX3J0Y19zZXR0aW1lLAogCS5yZWFkX2FsYXJtID0gd204MzUwX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybSA9IHdtODM1MF9ydGNfc2V0YWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSB3bTgzNTBfcnRjX2FsYXJtX2lycV9lbmFibGUsCisJLnVwZGF0ZV9pcnFfZW5hYmxlID0gd204MzUwX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTQ0MCw3ICs0MzcsNyBAQAogCQlkbyB7CiAJCQl0aW1lY3RsID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwKIAkJCQkJCSAgV004MzUwX1JUQ19USU1FX0NPTlRST0wpOwotCQl9IHdoaWxlICh0aW1lY3RsICYgV004MzUwX1JUQ19TVFMgJiYgcmV0cmllcy0tKTsKKwkJfSB3aGlsZSAodGltZWN0bCAmIFdNODM1MF9SVENfU1RTICYmIC0tcmV0cmllcyk7CiAKIAkJaWYgKHJldHJpZXMgPT0gMCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0OiB0aW1lb3V0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDJmZDY0ZTUuLjA1NzA3OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjM2Myw2ICsyMzYzLDcgQEAKIAlyZXQgPSAwOwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENJT19HT05FOgorCWNhc2UgQ0lPX0JPWEVEOgogCWNhc2UgQ0lPX05PX1BBVEg6CiAJCS8qIEZpcnN0IG9mIGFsbCBjYWxsIGV4dGVuZGVkIGVycm9yIHJlcG9ydGluZy4gKi8KIAkJZGFzZF9lZXJfd3JpdGUoZGV2aWNlLCBOVUxMLCBEQVNEX0VFUl9OT1BBVEgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCmluZGV4IDIwODBiYTYuLjY1NGRhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKQEAgLTMyMCw3ICszMjAsNiBAQAogCWRhc2RfcHJvY19yb290X2VudHJ5ID0gcHJvY19ta2RpcigiZGFzZCIsIE5VTEwpOwogCWlmICghZGFzZF9wcm9jX3Jvb3RfZW50cnkpCiAJCWdvdG8gb3V0X25vZGFzZDsKLQlkYXNkX3Byb2Nfcm9vdF9lbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXNkX2RldmljZXNfZW50cnkgPSBwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsCiAJCQkJCSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJCSBkYXNkX3Byb2Nfcm9vdF9lbnRyeSwKQEAgLTMzNCw3ICszMzMsNiBAQAogCQlnb3RvIG91dF9ub3N0YXRpc3RpY3M7CiAJZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5yZWFkX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3NfcmVhZDsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnktPndyaXRlX3Byb2MgPSBkYXNkX3N0YXRpc3RpY3Nfd3JpdGU7Ci0JZGFzZF9zdGF0aXN0aWNzX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOwogCiAgb3V0X25vc3RhdGlzdGljczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGM0ZDJmNjYuLjM1NDQxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtMzEwLDggKzMxMCw2IEBACiAJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KIHN0YXRpYyB2b2lkCiBjY3dfZGV2aWNlX3JlbW92ZV9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CkBAIC0zMzUsMTEgKzMzMywxMCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGNkZXYtPmNjd2xvY2ssIGZsYWdzKTsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCiAJCQkJY2N3X2RldmljZV9yZW1vdmVfb3JwaGFuX2NiKTsKKwkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOwogCX0gZWxzZQogCQkvKiBEZXJlZ2lzdGVyIHN1YmNoYW5uZWwsIHdoaWNoIHdpbGwga2lsbCB0aGUgY2N3IGRldmljZS4gKi8KLQkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkJY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CisJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CiB9CiAKIC8qKgpAQCAtNDcxLDcgKzQ2OCw3IEBACiAJaW50IHJldDsKIAogCS8qIERvIGRldmljZSByZWNvZ25pdGlvbiwgaWYgbmVlZGVkLiAqLwotCWlmIChjZGV2LT5pZC5jdV90eXBlID09IDApIHsKKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSB7CiAJCXJldCA9IGNjd19kZXZpY2VfcmVjb2duaXRpb24oY2Rldik7CiAJCWlmIChyZXQpIHsKIAkJCUNJT19NU0dfRVZFTlQoMCwgIkNvdWxkbid0IHN0YXJ0IHJlY29nbml0aW9uICIKQEAgLTQ4MiwxNyArNDc5LDIxIEBACiAJCX0KIAkJd2FpdF9ldmVudChjZGV2LT5wcml2YXRlLT53YWl0X3EsCiAJCQkgICBjZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lKTsKKwkJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PRkZMSU5FKQorCQkJLyogcmVjb2duaXRpb24gZmFpbGVkICovCisJCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vbmxpbmUpCiAJCWNjd19kZXZpY2Vfc2V0X29ubGluZShjZGV2KTsKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIGludCBvbmxpbmVfc3RvcmVfaGFuZGxlX29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGZvcmNlKQogewogCWludCByZXQ7CiAKIAlyZXQgPSBvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShjZGV2KTsKLQlpZiAocmV0KQorCWlmIChyZXQgJiYgIWZvcmNlKQogCQlyZXR1cm4gcmV0OwogCWlmIChmb3JjZSAmJiBjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpIHsKIAkJcmV0ID0gY2N3X2RldmljZV9zdGxjayhjZGV2KTsKQEAgLTUwMCw3ICs1MDEsOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJaWYgKGNkZXYtPmlkLmN1X3R5cGUgPT0gMCkKIAkJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOwotCQlvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShjZGV2KTsKKwkJcmV0ID0gb25saW5lX3N0b3JlX3JlY29nX2FuZF9vbmxpbmUoY2Rldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTUxMiw3ICs1MTUsMTEgQEAKIAlpbnQgZm9yY2UsIHJldDsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlpZiAoYXRvbWljX2NtcHhjaGcoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwLCAxKSAhPSAwKQorCWlmICgoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09GRkxJTkUgJiYKKwkgICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9PTkxJTkUgJiYKKwkgICAgIGNkZXYtPnByaXZhdGUtPnN0YXRlICE9IERFVl9TVEFURV9CT1hFRCAmJgorCSAgICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRCkgfHwKKwkgICAgYXRvbWljX2NtcHhjaGcoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwLCAxKSAhPSAwKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChjZGV2LT5kcnYgJiYgIXRyeV9tb2R1bGVfZ2V0KGNkZXYtPmRydi0+b3duZXIpKSB7CkBAIC0xMDE0LDYgKzEwMjEsMTMgQEAKIAlwdXRfZGV2aWNlKCZzY2gtPmRldik7CiB9CiAKK3ZvaWQgY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKK3sKKwlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKKwkJICAgICBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOworCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKK30KKwogLyoKICAqIHN1YmNoYW5uZWwgcmVjb2duaXRpb24gZG9uZS4gQ2FsbGVkIGZyb20gdGhlIHN0YXRlIG1hY2hpbmUuCiAgKi8KQEAgLTEwMjUsMTkgKzEwMzksMTcgQEAKIAkJcmV0dXJuOwogCX0KIAlzd2l0Y2ggKGNkZXYtPnByaXZhdGUtPnN0YXRlKSB7CisJY2FzZSBERVZfU1RBVEVfQk9YRUQ6CisJCS8qIERldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS4gKi8KIAljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CiAJCS8qIFJlbW92ZSBkZXZpY2UgZm91bmQgbm90IG9wZXJhdGlvbmFsLiAqLwogCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCiAJCQlicmVhazsKLQkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCi0JCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7Ci0JCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkpCiAJCQl3YWtlX3VwKCZjY3dfZGV2aWNlX2luaXRfd3EpOwogCQlicmVhazsKLQljYXNlIERFVl9TVEFURV9CT1hFRDoKLQkJLyogRGV2aWNlIGRpZCBub3QgcmVzcG9uZCBpbiB0aW1lLiAqLwogCWNhc2UgREVWX1NUQVRFX09GRkxJTkU6CiAJCS8qIAogCQkgKiBXZSBjYW4ndCByZWdpc3RlciB0aGUgZGV2aWNlIGluIGludGVycnVwdCBjb250ZXh0IHNvCkBAIC0xNTUxLDggKzE1NjMsNyBAQAogCQlnb3RvIG91dDsKIAlDSU9fTVNHX0VWRU5UKDMsICJjY3c6IHB1cmdpbmcgMC4leC4lMDR4XG4iLCBwcml2LT5kZXZfaWQuc3NpZCwKIAkJICAgICAgcHJpdi0+ZGV2X2lkLmRldm5vKTsKLQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKLQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CisJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKIAogb3V0OgogCS8qIEFib3J0IGxvb3AgaW4gY2FzZSBvZiBwZW5kaW5nIHNpZ25hbC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmggYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCmluZGV4IDg1ZTAxODQuLmYxY2JiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaApAQCAtODcsNiArODcsNyBAQAogaW50IGNjd19kZXZpY2VfcmVjb2duaXRpb24oc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X2RldmljZV9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X2RldmljZV9vZmZsaW5lKHN0cnVjdCBjY3dfZGV2aWNlICopOwordm9pZCBjY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogaW50IGNjd19wdXJnZV9ibGFja2xpc3RlZCh2b2lkKTsKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgZGV2aWNlIHN0YXR1cyBhbmQgYmFzaWMgc2Vuc2Ugc3R1ZmYuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IDg3YjRiZmMuLmU0NjA0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0yNTYsMTMgKzI1NiwxMiBAQAogCQlvbGRfbHBtID0gMDsKIAlpZiAoc2NoLT5scG0gIT0gb2xkX2xwbSkKIAkJX19yZWNvdmVyX2xvc3RfY2hwaWRzKHNjaCwgb2xkX2xwbSk7Ci0JaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURURfU0VOU0VfSUQpIHsKLQkJaWYgKHN0YXRlID09IERFVl9TVEFURV9OT1RfT1BFUikgewotCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7Ci0JCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9ESVNDT05ORUNURUQ7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogQm94ZWQgZGV2aWNlcyBkb24ndCBuZWVkIGV4dHJhIHRyZWF0bWVudC4gKi8KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRF9TRU5TRV9JRCAmJgorCSAgICAoc3RhdGUgPT0gREVWX1NUQVRFX05PVF9PUEVSIHx8IHN0YXRlID09IERFVl9TVEFURV9CT1hFRCkpIHsKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CisJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDsKKwkJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKKwkJcmV0dXJuOwogCX0KIAlub3RpZnkgPSAwOwogCXNhbWVfZGV2ID0gMDsgLyogS2VlcCB0aGUgY29tcGlsZXIgcXVpZXQuLi4gKi8KQEAgLTI3NCw3ICsyNzMsNyBAQAogCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubyk7CiAJCWJyZWFrOwogCWNhc2UgREVWX1NUQVRFX09GRkxJTkU6Ci0JCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEX1NFTlNFX0lEKSB7CisJCWlmIChjZGV2LT5vbmxpbmUpIHsKIAkJCXNhbWVfZGV2ID0gY2N3X2RldmljZV9oYW5kbGVfb3BlcihjZGV2KTsKIAkJCW5vdGlmeSA9IDE7CiAJCX0KQEAgLTMwNywxMiArMzA2LDE3IEBACiAJCQkgICAgICAiIHN1YmNoYW5uZWwgMC4leC4lMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAogCQkJICAgICAgc2NoLT5zY2hpZC5zc2lkLCBzY2gtPnNjaGlkLnNjaF9ubyk7CisJCWlmIChjZGV2LT5pZC5jdV90eXBlICE9IDApIHsgLyogZGV2aWNlIHdhcyByZWNvZ25pemVkIGJlZm9yZSAqLworCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CisJCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9CT1hFRDsKKwkJCXdha2VfdXAoJmNkZXYtPnByaXZhdGUtPndhaXRfcSk7CisJCQlyZXR1cm47CisJCX0KIAkJYnJlYWs7CiAJfQogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gc3RhdGU7CiAJaW9fc3ViY2hhbm5lbF9yZWNvZ19kb25lKGNkZXYpOwotCWlmIChzdGF0ZSAhPSBERVZfU1RBVEVfTk9UX09QRVIpCi0JCXdha2VfdXAoJmNkZXYtPnByaXZhdGUtPndhaXRfcSk7CisJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKIH0KIAogLyoKQEAgLTM5MCwxMCArMzk0LDEzIEBACiAKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IHN0YXRlOwogCi0KLQlpZiAoc3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKQorCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiQm94ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAlMDR4XG4iLAogCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLCBzY2gtPnNjaGlkLnNjaF9ubyk7CisJCWlmIChjZGV2LT5vbmxpbmUgJiYgIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19CT1hFRCkpCisJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb25vdGlmeSA9IDA7CisJfQogCiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5KSB7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmMKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuaAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCAxZmUxZTJlLi5jZmIwZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTE3Niw2ICsxNzYsMTEgQEAKIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCiAJCQkJCSJjY25vdGk0IiwgTlVMTCk7CiAJCWJyZWFrOworCWNhc2UgQ0lPX0JPWEVEOgorCQlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCQkJICJUaGUgY2N3IGRldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS5cbiIpOworCQl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY25vdGk1IiwgTlVMTCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwppbmRleCBhYWI4MTIzLi5lOGQwMzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCkBAIC05NCw3ICs5NCw3IEBACiAKIHN0YXRpYyB2b2lkIHpmY3Bfd2thX3BvcnRfb2ZmbGluZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0ID0KIAkJCWNvbnRhaW5lcl9vZihkdywgc3RydWN0IHpmY3Bfd2thX3BvcnQsIHdvcmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKaW5kZXggMDk5YjU0NS4uYjEzNDgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYwpAQCAtNTk2LDggKzU5Niw2IEBACiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCi0JcC0+b3duZXIgPSBUSElTX01PRFVMRTsKICNlbmRpZiAvKiBDT05GSUdfU0NTSV9QUk9DX0ZTICovCiAKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKaW5kZXggODJmN2IyZC4uNzdmYmRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYwpAQCAtMTE1LDggKzExNSw2IEBACiAgICAgICAgIAlpZiAoIXNodC0+cHJvY19kaXIpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwcm9jX21rZGlyIGZhaWxlZCBmb3IgJXNcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIHNodC0+cHJvY19uYW1lKTsKLQkJZWxzZQotCQkJc2h0LT5wcm9jX2Rpci0+b3duZXIgPSBzaHQtPm1vZHVsZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZnbG9iYWxfaG9zdF90ZW1wbGF0ZV9tdXRleCk7CiB9CkBAIC0xNjMsNyArMTYxLDYgQEAKIAl9IAogCiAJcC0+d3JpdGVfcHJvYyA9IHByb2Nfc2NzaV93cml0ZV9wcm9jOwotCXAtPm93bmVyID0gc2h0LT5tb2R1bGU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IGJkZTRiNGIuLjVjNmVmNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKQEAgLTQwNiw2ICs0MDYsMTggQEAKIAogCXByX2RlYnVnKCJDUE0gdWFydFslZF06c3RhcnR1cFxuIiwgcG9ydC0+bGluZSk7CiAKKwkvKiBJZiB0aGUgcG9ydCBpcyBub3QgdGhlIGNvbnNvbGUsIG1ha2Ugc3VyZSByeCBpcyBkaXNhYmxlZC4gKi8KKwlpZiAoIShwaW5mby0+ZmxhZ3MgJiBGTEFHX0NPTlNPTEUpKSB7CisJCS8qIERpc2FibGUgVUFSVCByeCAqLworCQlpZiAoSVNfU01DKHBpbmZvKSkgeworCQkJY2xyYml0czE2KCZwaW5mby0+c21jcC0+c21jX3NtY21yLCBTTUNNUl9SRU4pOworCQkJY2xyYml0czgoJnBpbmZvLT5zbWNwLT5zbWNfc21jbSwgU01DTV9SWCk7CisJCX0gZWxzZSB7CisJCQljbHJiaXRzMzIoJnBpbmZvLT5zY2NwLT5zY2NfZ3NtcmwsIFNDQ19HU01STF9FTlIpOworCQkJY2xyYml0czE2KCZwaW5mby0+c2NjcC0+c2NjX3NjY20sIFVBUlRfU0NDTV9SWCk7CisJCX0KKwkJY3BtX2xpbmVfY3JfY21kKHBpbmZvLCBDUE1fQ1JfSU5JVF9UUlgpOworCX0KIAkvKiBJbnN0YWxsIGludGVycnVwdCBoYW5kbGVyLiAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKHBvcnQtPmlycSwgY3BtX3VhcnRfaW50LCAwLCAiY3BtX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0dmFsKQpAQCAtNDIwLDggKzQzMiw2IEBACiAJCXNldGJpdHMzMigmcGluZm8tPnNjY3AtPnNjY19nc21ybCwgKFNDQ19HU01STF9FTlIgfCBTQ0NfR1NNUkxfRU5UKSk7CiAJfQogCi0JaWYgKCEocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKSkKLQkJY3BtX2xpbmVfY3JfY21kKHBpbmZvLCBDUE1fQ1JfSU5JVF9UUlgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IDU2ODQxZmUuLjBlZWZiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC01MTMsNyArNTEzLDcgQEAKIAlpbnQgcGFyaXR5ID0gJ24nOwogCWludCBmbG93ID0gJ24nOwogCi0JaWYgKChjby0+aW5kZXggPj0gMCkgJiYgKGNvLT5pbmRleCA8PSBNQ0ZfTUFYUE9SVFMpKQorCWlmICgoY28tPmluZGV4IDwgMCkgfHwgKGNvLT5pbmRleCA+PSBNQ0ZfTUFYUE9SVFMpKQogCQljby0+aW5kZXggPSAwOwogCXBvcnQgPSAmbWNmX3BvcnRzW2NvLT5pbmRleF0ucG9ydDsKIAlpZiAocG9ydC0+bWVtYmFzZSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCAwYzNhMmFiLi43ZjcyZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNTAsOCArNTAsOCBAQAogLyogT0YgUGxhdGZvcm0gZGV2aWNlIFVzYWdlIDoKICAqCiAgKiBUaGlzIGRyaXZlciBpcyBvbmx5IHVzZWQgZm9yIFBTQ3MgY29uZmlndXJlZCBpbiB1YXJ0IG1vZGUuICBUaGUgZGV2aWNlCi0gKiB0cmVlIHdpbGwgaGF2ZSBhIG5vZGUgZm9yIGVhY2ggUFNDIGluIHVhcnQgbW9kZSB3LyBkZXZpY2VfdHlwZSA9ICJzZXJpYWwiCi0gKiBhbmQgIm1wYzUyeHgtcHNjLXVhcnQiIGluIHRoZSBjb21wYXRpYmxlIHN0cmluZworICogdHJlZSB3aWxsIGhhdmUgYSBub2RlIGZvciBlYWNoIFBTQyB3aXRoICJtcGM1Mnh4LXBzYy11YXJ0IiBpbiB0aGUgY29tcGF0aWJsZQorICogbGlzdC4KICAqCiAgKiBCeSBkZWZhdWx0LCBQU0MgZGV2aWNlcyBhcmUgZW51bWVyYXRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZm91bmQuICBIb3dldmVyCiAgKiBhIHBhcnRpY3VsYXIgUFNDIG51bWJlciBjYW4gYmUgZm9yY2VzIGJ5IGFkZGluZyAnZGV2aWNlX25vID0gPHBvcnQjPicKQEAgLTUyMiw3ICs1MjIsNyBAQAogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIG1wYzUyeHhfdWFydF9pbnQsCi0JCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTIxMiwzMCArMTIxMiwxOCBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1tcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZHgpCittcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JaW50IGZyZWVfaWR4ID0gLTE7CiAJaW50IGk7CiAKLQkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIG5vZGUgKi8KKwkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIFBTQyBudW1iZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTVBDNTJ4eF9QU0NfTUFYTlVNOyBpKyspIHsKIAkJaWYgKG1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9PSBOVUxMKSB7Ci0JCQlmcmVlX2lkeCA9IGk7Ci0JCQlicmVhazsKKwkJCW9mX25vZGVfZ2V0KG5wKTsKKwkJCW1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9IG5wOworCQkJcmV0dXJuOwogCQl9CiAJfQotCi0JaWYgKChpZHggPCAwKSB8fCAoaWR4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkpCi0JCWlkeCA9IGZyZWVfaWR4OwotCi0JaWYgKGlkeCA8IDApCi0JCXJldHVybjsgLyogTm8gZnJlZSBzbG90OyBhYm9ydCAqLwotCi0Jb2Zfbm9kZV9nZXQobnApOwotCS8qIElmIHRoZSBzbG90IGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gc3dhcCBzbG90cyAqLwotCWlmIChtcGM1Mnh4X3VhcnRfbm9kZXNbaWR4XSAmJiAoZnJlZV9pZHggIT0gLTEpKQotCQltcGM1Mnh4X3VhcnRfbm9kZXNbZnJlZV9pZHhdID0gbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF07Ci0JbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF0gPSBucDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyNDMsMjMgKzEyMzEsMTcgQEAKIHsKIAlzdGF0aWMgaW50IGVudW1fZG9uZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWNvbnN0IHVuc2lnbmVkIGludCAqZGV2bm87CiAJY29uc3Qgc3RydWN0ICBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCWludCBpOwogCiAJaWYgKGVudW1fZG9uZSkKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAic2VyaWFsIikgeworCS8qIEFzc2lnbiBpbmRleCB0byBlYWNoIFBTQyBpbiBkZXZpY2UgdHJlZSAqLworCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIG1wYzUyeHhfdWFydF9vZl9tYXRjaCkgewogCQltYXRjaCA9IG9mX21hdGNoX25vZGUobXBjNTJ4eF91YXJ0X29mX21hdGNoLCBucCk7Ci0JCWlmICghbWF0Y2gpCi0JCQljb250aW51ZTsKLQogCQlwc2Nfb3BzID0gbWF0Y2gtPmRhdGE7Ci0KLQkJLyogSXMgYSBwYXJ0aWN1bGFyIGRldmljZSBudW1iZXIgcmVxdWVzdGVkPyAqLwotCQlkZXZubyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBvcnQtbnVtYmVyIiwgTlVMTCk7Ci0JCW1wYzUyeHhfdWFydF9vZl9hc3NpZ24obnAsIGRldm5vID8gKmRldm5vIDogLTEpOworCQltcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKG5wKTsKIAl9CiAKIAllbnVtX2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggNDJmNGU2Ni4uYjBiYjI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTY4MiwyMCArMTY4NCwyMCBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotc3RhdGljIGludCB1YXJ0X2xpbmVfaW5mbyhjaGFyICpidWYsIHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBpbnQgaSkKK3N0YXRpYyB2b2lkIHVhcnRfbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBpKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyBpOwogCWludCBwbV9zdGF0ZTsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CiAJY2hhciBzdGF0X2J1ZlszMl07CiAJdW5zaWduZWQgaW50IHN0YXR1czsKLQlpbnQgbW1pbywgcmV0OworCWludCBtbWlvOwogCiAJaWYgKCFwb3J0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJbW1pbyA9IHBvcnQtPmlvdHlwZSA+PSBVUElPX01FTTsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkOiB1YXJ0OiVzICVzJTA4bGxYIGlycTolZCIsCisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgJXMlMDhsbFggaXJxOiVkIiwKIAkJCXBvcnQtPmxpbmUsIHVhcnRfdHlwZShwb3J0KSwKIAkJCW1taW8gPyAibW1pbzoweCIgOiAicG9ydDoiLAogCQkJbW1pbyA/ICh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+bWFwYmFzZQpAQCAtMTcwMyw4ICsxNzA1LDggQEAKIAkJCXBvcnQtPmlycSk7CiAKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pIHsKLQkJc3RyY2F0KGJ1ZiwgIlxuIik7Ci0JCXJldHVybiByZXQgKyAxOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CkBAIC0xNzE5LDE5ICsxNzIxLDE5IEBACiAJCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgcG1fc3RhdGUpOwogCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAKLQkJcmV0ICs9IHNwcmludGYoYnVmICsgcmV0LCAiIHR4OiVkIHJ4OiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiIHR4OiVkIHJ4OiVkIiwKIAkJCQlwb3J0LT5pY291bnQudHgsIHBvcnQtPmljb3VudC5yeCk7CiAJCWlmIChwb3J0LT5pY291bnQuZnJhbWUpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYgKyByZXQsICIgZmU6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKIAkJCQlwb3J0LT5pY291bnQuZnJhbWUpOwogCQlpZiAocG9ydC0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBwZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLAogCQkJCXBvcnQtPmljb3VudC5wYXJpdHkpOwogCQlpZiAocG9ydC0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBicms6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsCiAJCQkJcG9ydC0+aWNvdW50LmJyayk7CiAJCWlmIChwb3J0LT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBvZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLAogCQkJCXBvcnQtPmljb3VudC5vdmVycnVuKTsKIAogI2RlZmluZSBJTkZPQklUKGJpdCwgc3RyKSBcCkBAIC0xNzUzLDQ1ICsxNzU1LDM5IEBACiAJCVNUQVRCSVQoVElPQ01fUk5HLCAifFJJIik7CiAJCWlmIChzdGF0X2J1ZlswXSkKIAkJCXN0YXRfYnVmWzBdID0gJyAnOwotCQlzdHJjYXQoc3RhdF9idWYsICJcbiIpOwogCi0JCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgc3RhdF9idWYpOwotCX0gZWxzZSB7Ci0JCXN0cmNhdChidWYsICJcbiIpOwotCQlyZXQrKzsKKwkJc2VxX3B1dHMobSwgc3RhdF9idWYpOwogCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKICN1bmRlZiBTVEFUQklUCiAjdW5kZWYgSU5GT0JJVAotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdWFydF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHVhcnRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5ZHJ2ID0gZGF0YTsKKwlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5ZHJ2ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiA9IHR0eWRydi0+ZHJpdmVyX3N0YXRlOwotCWludCBpLCBsZW4gPSAwLCBsOwotCW9mZl90IGJlZ2luID0gMDsKKwlpbnQgaTsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzZXJpbmZvOjEuMCBkcml2ZXIlcyVzIHJldmlzaW9uOiVzXG4iLAorCXNlcV9wcmludGYobSwgInNlcmluZm86MS4wIGRyaXZlciVzJXMgcmV2aXNpb246JXNcbiIsCiAJCQkiIiwgIiIsICIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5uciAmJiBsZW4gPCBQQUdFX1NJWkUgLSA5NjsgaSsrKSB7Ci0JCWwgPSB1YXJ0X2xpbmVfaW5mbyhwYWdlICsgbGVuLCBkcnYsIGkpOwotCQlsZW4gKz0gbDsKLQkJaWYgKGxlbiArIGJlZ2luID4gb2ZmICsgY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4gKyBiZWdpbiA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuOwotCQkJbGVuID0gMDsKLQkJfQotCX0KLQkqZW9mID0gMTsKLSBkb25lOgotCWlmIChvZmYgPj0gbGVuICsgYmVnaW4pCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyAob2ZmIC0gYmVnaW4pOwotCXJldHVybiAoY291bnQgPCBiZWdpbiArIGxlbiAtIG9mZikgPyBjb3VudCA6IChiZWdpbiArIGxlbiAtIG9mZik7CisJZm9yIChpID0gMDsgaSA8IGRydi0+bnI7IGkrKykKKwkJdWFydF9saW5lX2luZm8obSwgZHJ2LCBpKTsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCB1YXJ0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdWFydF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YXJ0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdWFydF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX0NPTlNPTEVfUE9MTCkKQEAgLTIyOTksNyArMjI5NSw3IEBACiAJLmJyZWFrX2N0bAk9IHVhcnRfYnJlYWtfY3RsLAogCS53YWl0X3VudGlsX3NlbnQ9IHVhcnRfd2FpdF91bnRpbF9zZW50LAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JLnJlYWRfcHJvYwk9IHVhcnRfcmVhZF9wcm9jLAorCS5wcm9jX2ZvcHMJPSAmdWFydF9wcm9jX2ZvcHMsCiAjZW5kaWYKIAkudGlvY21nZXQJPSB1YXJ0X3Rpb2NtZ2V0LAogCS50aW9jbXNldAk9IHVhcnRfdGlvY21zZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCBkMjg2NmMyLi4yNmJkMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTE3OCw4ICsxNzgsMTAgQEAKIAlpZiAoaXNfYWN0aXZlKQogCQlzZXRzY2soc3BpLCBzcGktPm1vZGUgJiBTUElfQ1BPTCk7CiAKLQkvKiBTUEkgaXMgbm9ybWFsbHkgYWN0aXZlLWxvdyAqLwotCWdwaW9fc2V0X3ZhbHVlKGNzLCAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpID8gaXNfYWN0aXZlIDogIWlzX2FjdGl2ZSk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpIHsKKwkJLyogU1BJIGlzIG5vcm1hbGx5IGFjdGl2ZS1sb3cgKi8KKwkJZ3Bpb19zZXRfdmFsdWUoY3MsIChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCkgPyBpc19hY3RpdmUgOiAhaXNfYWN0aXZlKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc3BpX2dwaW9fc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTE5MSwxNSArMTkzLDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpIHsKLQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKLQkJaWYgKHN0YXR1cykKLQkJCXJldHVybiBzdGF0dXM7Ci0JCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQlpZiAoY3MgIT0gU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVCkgeworCQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQl9CiAJfQogCWlmICghc3RhdHVzKQogCQlzdGF0dXMgPSBzcGlfYml0YmFuZ19zZXR1cChzcGkpOwogCWlmIChzdGF0dXMpIHsKLQkJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpCisJCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlICYmIGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCiAJCQlncGlvX2ZyZWUoY3MpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjA5LDcgKzIxMyw4IEBACiB7CiAJdW5zaWduZWQgbG9uZwljcyA9ICh1bnNpZ25lZCBsb25nKSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAotCWdwaW9fZnJlZShjcyk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCisJCWdwaW9fZnJlZShjcyk7CiAJc3BpX2JpdGJhbmdfY2xlYW51cChzcGkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCA0NGEyYjQ2Li5mNDU3M2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMjMsNyArMjUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3NwaS5oPgogCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTc5LDcgKzg3LDcgQEAKIAl1MzIoKmdldF90eCkgKHN0cnVjdCBtcGM4M3h4X3NwaSAqKTsKIAogCXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgaXJxOworCXVuc2lnbmVkIGludCBpcnE7CiAKIAl1bnNpZ25lZCBuc2VjczsJCS8qIChjbG9jayBjeWNsZSB0aW1lKS8yICovCiAKQEAgLTg5LDkgKzk3LDYgQEAKIAogCWJvb2wgcWVfbW9kZTsKIAotCXZvaWQgKCphY3RpdmF0ZV9jcykgKHU4IGNzLCB1OCBwb2xhcml0eSk7Ci0Jdm9pZCAoKmRlYWN0aXZhdGVfY3MpICh1OCBjcywgdTggcG9sYXJpdHkpOwotCiAJdTggYnVzeTsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CkBAIC0xMjMsNiArMTI4LDcgQEAKIH0KIAogI2RlZmluZSBNUEM4M1hYX1NQSV9SWF9CVUYodHlwZSkgCQkJCQkgIFwKK3N0YXRpYwkJCQkJCQkJCSAgXAogdm9pZCBtcGM4M3h4X3NwaV9yeF9idWZfIyN0eXBlKHUzMiBkYXRhLCBzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpKSBcCiB7CQkJCQkJCQkJICBcCiAJdHlwZSAqIHJ4ID0gbXBjODN4eF9zcGktPnJ4OwkJCQkJICBcCkBAIC0xMzEsNiArMTM3LDcgQEAKIH0KIAogI2RlZmluZSBNUEM4M1hYX1NQSV9UWF9CVUYodHlwZSkJCQkJXAorc3RhdGljCQkJCQkJCQlcCiB1MzIgbXBjODN4eF9zcGlfdHhfYnVmXyMjdHlwZShzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpKQlcCiB7CQkJCQkJCQlcCiAJdTMyIGRhdGE7CQkJCQkJXApAQCAtMTUxLDE1ICsxNTgsMTQgQEAKIAogc3RhdGljIHZvaWQgbXBjODN4eF9zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKLQl1OCBwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwOworCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwlib29sIHBvbCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOwogCXN0cnVjdCBzcGlfbXBjODN4eF9jcwkqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CiAKLQltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCiAJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKLQkJaWYgKG1wYzgzeHhfc3BpLT5kZWFjdGl2YXRlX2NzKQotCQkJbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwkJaWYgKHBkYXRhLT5jc19jb250cm9sKQorCQkJcGRhdGEtPmNzX2NvbnRyb2woc3BpLCAhcG9sKTsKIAl9CiAKIAlpZiAodmFsdWUgPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKQEAgLTE3Miw3ICsxNzgsNyBAQAogCiAJCWlmIChjcy0+aHdfbW9kZSAhPSByZWd2YWwpIHsKIAkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCQl2b2lkICp0bXBfcHRyID0gJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlOworCQkJX19iZTMyIF9faW9tZW0gKm1vZGUgPSAmbXBjODN4eF9zcGktPmJhc2UtPm1vZGU7CiAKIAkJCXJlZ3ZhbCA9IGNzLT5od19tb2RlOwogCQkJLyogVHVybiBvZmYgSVJRcyBsb2NhbGx5IHRvIG1pbmltaXplIHRpbWUgdGhhdApAQCAtMTgwLDEyICsxODYsMTIgQEAKIAkJCSAqLwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJLyogVHVybiBvZmYgU1BJIHVuaXQgcHJpb3IgY2hhbmdpbmcgbW9kZSAqLwotCQkJbXBjODN4eF9zcGlfd3JpdGVfcmVnKHRtcF9wdHIsIHJlZ3ZhbCAmIH5TUE1PREVfRU5BQkxFKTsKLQkJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwpOworCQkJbXBjODN4eF9zcGlfd3JpdGVfcmVnKG1vZGUsIHJlZ3ZhbCAmIH5TUE1PREVfRU5BQkxFKTsKKwkJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyhtb2RlLCByZWd2YWwpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9Ci0JCWlmIChtcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MpCi0JCQltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwkJaWYgKHBkYXRhLT5jc19jb250cm9sKQorCQkJcGRhdGEtPmNzX2NvbnRyb2woc3BpLCBwb2wpOwogCX0KIH0KIApAQCAtMjg0LDcgKzI5MCw3IEBACiAJcmVndmFsID0gIG1wYzgzeHhfc3BpX3JlYWRfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSk7CiAJaWYgKGNzLT5od19tb2RlICE9IHJlZ3ZhbCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl2b2lkICp0bXBfcHRyID0gJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlOworCQlfX2JlMzIgX19pb21lbSAqbW9kZSA9ICZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZTsKIAogCQlyZWd2YWwgPSBjcy0+aHdfbW9kZTsKIAkJLyogVHVybiBvZmYgSVJRcyBsb2NhbGx5IHRvIG1pbmltaXplIHRpbWUKQEAgLTI5Miw4ICsyOTgsOCBAQAogCQkgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkvKiBUdXJuIG9mZiBTUEkgdW5pdCBwcmlvciBjaGFuZ2luZyBtb2RlICovCi0JCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwgJiB+U1BNT0RFX0VOQUJMRSk7Ci0JCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwpOworCQltcGM4M3h4X3NwaV93cml0ZV9yZWcobW9kZSwgcmVndmFsICYgflNQTU9ERV9FTkFCTEUpOworCQltcGM4M3h4X3NwaV93cml0ZV9yZWcobW9kZSwgcmVndmFsKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ4Myw3ICs0ODksNyBAQAogCXJldHVybiAwOwogfQogCi1pcnFyZXR1cm5fdCBtcGM4M3h4X3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQorc3RhdGljIGlycXJldHVybl90IG1wYzgzeHhfc3BpX2lycShzMzIgaXJxLCB2b2lkICpjb250ZXh0X2RhdGEpCiB7CiAJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaSA9IGNvbnRleHRfZGF0YTsKIAl1MzIgZXZlbnQ7CkBAIC01NDUsNDMgKzU1MSwyOCBAQAogCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1wYzgzeHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgc3BpX21hc3RlciAqIF9fZGV2aW5pdAorbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgdW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7Ci0Jc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyOwogCXUzMiByZWd2YWw7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBHZXQgcmVzb3VyY2VzKG1lbW9yeSwgSVJRKSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSAqLwotCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG1wYzgzeHhfc3BpKSk7Ci0KKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mKHN0cnVjdCBtcGM4M3h4X3NwaSkpOwogCWlmIChtYXN0ZXIgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7Ci0JcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CiAKLQlpZiAocGRhdGEgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbWFzdGVyOwotCX0KLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKHIgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbWFzdGVyOwotCX0KIAltYXN0ZXItPnNldHVwID0gbXBjODN4eF9zcGlfc2V0dXA7CiAJbWFzdGVyLT50cmFuc2ZlciA9IG1wYzgzeHhfc3BpX3RyYW5zZmVyOwogCW1hc3Rlci0+Y2xlYW51cCA9IG1wYzgzeHhfc3BpX2NsZWFudXA7CiAKIAltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MgPSBwZGF0YS0+YWN0aXZhdGVfY3M7Ci0JbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3MgPSBwZGF0YS0+ZGVhY3RpdmF0ZV9jczsKIAltcGM4M3h4X3NwaS0+cWVfbW9kZSA9IHBkYXRhLT5xZV9tb2RlOwogCW1wYzgzeHhfc3BpLT5nZXRfcnggPSBtcGM4M3h4X3NwaV9yeF9idWZfdTg7CiAJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91ODsKQEAgLTU5NiwxOCArNTg3LDEzIEBACiAKIAlpbml0X2NvbXBsZXRpb24oJm1wYzgzeHhfc3BpLT5kb25lKTsKIAotCW1wYzgzeHhfc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwltcGM4M3h4X3NwaS0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CiAJaWYgKG1wYzgzeHhfc3BpLT5iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBwdXRfbWFzdGVyOwogCX0KIAotCW1wYzgzeHhfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7Ci0KLQlpZiAobXBjODN4eF9zcGktPmlycSA8IDApIHsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIHVubWFwX2lvOwotCX0KKwltcGM4M3h4X3NwaS0+aXJxID0gaXJxOwogCiAJLyogUmVnaXN0ZXIgZm9yIFNQSSBJbnRlcnJ1cHQgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShtcGM4M3h4X3NwaS0+aXJxLCBtcGM4M3h4X3NwaV9pcnEsCkBAIC02NDksOSArNjM1LDkgQEAKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIiVzOiBNUEM4M3h4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldl9uYW1lKCZkZXYtPmRldiksIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKwkgICAgICAgZGV2X25hbWUoZGV2KSwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbWFzdGVyOwogCiB1bnJlZ19tYXN0ZXI6CiAJZGVzdHJveV93b3JrcXVldWUobXBjODN4eF9zcGktPndvcmtxdWV1ZSk7CkBAIC02NjEsMTggKzY0NywxNiBAQAogCWlvdW5tYXAobXBjODN4eF9zcGktPmJhc2UpOwogcHV0X21hc3RlcjoKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotZnJlZV9tYXN0ZXI6Ci0Ja2ZyZWUobWFzdGVyKTsKIGVycjoKLQlyZXR1cm4gcmV0OworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG1wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGM4M3h4X3NwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAotCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKIAlmbHVzaF93b3JrcXVldWUobXBjODN4eF9zcGktPndvcmtxdWV1ZSk7CkBAIC02ODUsMjMgKzY2OSwyOTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8geworCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJaW50ICpncGlvczsKKwlib29sICphbG93X2ZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtcGM4M3h4X3NwaV9wcm9iZV9pbmZvICoKK3RvX29mX3BpbmZvKHN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXJldHVybiBjb250YWluZXJfb2YocGRhdGEsIHN0cnVjdCBtcGM4M3h4X3NwaV9wcm9iZV9pbmZvLCBwZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3BpX2NzX2NvbnRyb2woc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBvbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcGktPmRldi5wYXJlbnQ7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8oZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwl1MTYgY3MgPSBzcGktPmNoaXBfc2VsZWN0OworCWludCBncGlvID0gcGluZm8tPmdwaW9zW2NzXTsKKwlib29sIGFsb3cgPSBwaW5mby0+YWxvd19mbGFnc1tjc107CisKKwlncGlvX3NldF92YWx1ZShncGlvLCBvbiBeIGFsb3cpOworfQorCitzdGF0aWMgaW50IG9mX21wYzgzeHhfc3BpX2dldF9jaGlwc2VsZWN0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSk7CisJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8ocGRhdGEpOworCXVuc2lnbmVkIGludCBuZ3Bpb3M7CisJaW50IGkgPSAwOworCWludCByZXQ7CisKKwluZ3Bpb3MgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwlpZiAoIW5ncGlvcykgeworCQkvKgorCQkgKiBTUEkgdy9vIGNoaXAtc2VsZWN0IGxpbmUuIE9uZSBTUEkgZGV2aWNlIGlzIHN0aWxsIHBlcm1pdHRlZAorCQkgKiB0aG91Z2guCisJCSAqLworCQlwZGF0YS0+bWF4X2NoaXBzZWxlY3QgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaW5mby0+Z3Bpb3MgPSBrbWFsbG9jKG5ncGlvcyAqIHNpemVvZihwaW5mby0+Z3Bpb3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbmZvLT5ncGlvcykKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHBpbmZvLT5ncGlvcywgLTEsIG5ncGlvcyAqIHNpemVvZihwaW5mby0+Z3Bpb3MpKTsKKworCXBpbmZvLT5hbG93X2ZsYWdzID0ga3phbGxvYyhuZ3Bpb3MgKiBzaXplb2YocGluZm8tPmFsb3dfZmxhZ3MpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbmZvLT5hbG93X2ZsYWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2ZsYWdzOworCX0KKworCWZvciAoOyBpIDwgbmdwaW9zOyBpKyspIHsKKwkJaW50IGdwaW87CisJCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFnczsKKworCQlncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MobnAsIGksICZmbGFncyk7CisJCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGdwaW8gIyVkOiAlZFxuIiwgaSwgZ3Bpbyk7CisJCQlnb3RvIGVycl9sb29wOworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldl9uYW1lKGRldikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgZ3BpbyAjJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJZ290byBlcnJfbG9vcDsKKwkJfQorCisJCXBpbmZvLT5ncGlvc1tpXSA9IGdwaW87CisJCXBpbmZvLT5hbG93X2ZsYWdzW2ldID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBpbmZvLT5ncGlvc1tpXSwKKwkJCQkJICAgIHBpbmZvLT5hbG93X2ZsYWdzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgb3V0cHV0IGRpcmVjdGlvbiBmb3IgZ3BpbyAiCisJCQkJIiMlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycl9sb29wOworCQl9CisJfQorCisJcGRhdGEtPm1heF9jaGlwc2VsZWN0ID0gbmdwaW9zOworCXBkYXRhLT5jc19jb250cm9sID0gbXBjODN4eF9zcGlfY3NfY29udHJvbDsKKworCXJldHVybiAwOworCitlcnJfbG9vcDoKKwl3aGlsZSAoaSA+PSAwKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBpbmZvLT5ncGlvc1tpXSkpCisJCQlncGlvX2ZyZWUocGluZm8tPmdwaW9zW2ldKTsKKwkJaS0tOworCX0KKworCWtmcmVlKHBpbmZvLT5hbG93X2ZsYWdzKTsKKwlwaW5mby0+YWxvd19mbGFncyA9IE5VTEw7CitlcnJfYWxsb2NfZmxhZ3M6CisJa2ZyZWUocGluZm8tPmdwaW9zKTsKKwlwaW5mby0+Z3Bpb3MgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2ZfbXBjODN4eF9zcGlfZnJlZV9jaGlwc2VsZWN0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8ocGRhdGEpOworCWludCBpOworCisJaWYgKCFwaW5mby0+Z3Bpb3MpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXhfY2hpcHNlbGVjdDsgaSsrKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBpbmZvLT5ncGlvc1tpXSkpCisJCQlncGlvX2ZyZWUocGluZm8tPmdwaW9zW2ldKTsKKwl9CisKKwlrZnJlZShwaW5mby0+Z3Bpb3MpOworCWtmcmVlKHBpbmZvLT5hbG93X2ZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb2ZfbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZpZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvOworCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHJlc291cmNlIG1lbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgaXJxOworCWNvbnN0IHZvaWQgKnByb3A7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlwaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCpwaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcGluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEgPSAmcGluZm8tPnBkYXRhOworCWRldi0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCisJLyogQWxsb2NhdGUgYnVzIG51bSBkeW5hbWljYWxseS4gKi8KKwlwZGF0YS0+YnVzX251bSA9IC0xOworCisJLyogU1BJIGNvbnRyb2xsZXIgaXMgZWl0aGVyIGNsb2NrZWQgZnJvbSBRRSBvciBTb0MgY2xvY2suICovCisJcGRhdGEtPnN5c2NsayA9IGdldF9icmdmcmVxKCk7CisJaWYgKHBkYXRhLT5zeXNjbGsgPT0gLTEpIHsKKwkJcGRhdGEtPnN5c2NsayA9IGZzbF9nZXRfc3lzX2ZyZXEoKTsKKwkJaWYgKHBkYXRhLT5zeXNjbGsgPT0gLTEpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9jbGs7CisJCX0KKwl9CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZSIsIE5VTEwpOworCWlmIChwcm9wICYmICFzdHJjbXAocHJvcCwgImNwdS1xZSIpKQorCQlwZGF0YS0+cWVfbW9kZSA9IDE7CisKKwlyZXQgPSBvZl9tcGM4M3h4X3NwaV9nZXRfY2hpcHNlbGVjdHMoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZtZW0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmaXJxKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltYXN0ZXIgPSBtcGM4M3h4X3NwaV9wcm9iZShkZXYsICZtZW0sIGlycS5zdGFydCk7CisJaWYgKElTX0VSUihtYXN0ZXIpKSB7CisJCXJldCA9IFBUUl9FUlIobWFzdGVyKTsKKwkJZ290byBlcnI7CisJfQorCisJb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMobWFzdGVyLCBucCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCW9mX21wYzgzeHhfc3BpX2ZyZWVfY2hpcHNlbGVjdHMoZGV2KTsKK2Vycl9jbGs6CisJa2ZyZWUocGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9mX21wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXBjODN4eF9zcGlfcmVtb3ZlKCZvZmRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW9mX21wYzgzeHhfc3BpX2ZyZWVfY2hpcHNlbGVjdHMoJm9mZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9tcGM4M3h4X3NwaV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLHNwaSIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9tcGM4M3h4X3NwaV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX21wYzgzeHhfc3BpX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibXBjODN4eF9zcGkiLAorCS5tYXRjaF90YWJsZQk9IG9mX21wYzgzeHhfc3BpX21hdGNoLAorCS5wcm9iZQkJPSBvZl9tcGM4M3h4X3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9mX21wYzgzeHhfc3BpX3JlbW92ZSksCit9OworCisjaWZkZWYgQ09ORklHX01QQzgzMnhfUkRCCisvKgorICogCQkJCVhYWCBYWFggWFhYCisgKiBUaGlzIGlzICJsZWdhY3kiIHBsYXRmb3JtIGRyaXZlciwgd2FzIHVzZWQgYnkgdGhlIE1QQzgzMjNFLVJEQiBib2FyZHMKKyAqIG9ubHkuIFRoZSBkcml2ZXIgc2hvdWxkIGdvIGF3YXkgc29vbiwgc2luY2UgbmV3ZXIgTVBDODMyM0UtUkRCJ3MgZGV2aWNlCisgKiB0cmVlIGNhbiB3b3JrIHdpdGggT3BlbkZpcm13YXJlIGRyaXZlci4gQnV0IGZvciBub3cgd2Ugc3VwcG9ydCBvbGQgdHJlZXMKKyAqIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBsYXRfbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIWlycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXN0ZXIgPSBtcGM4M3h4X3NwaV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CisJaWYgKElTX0VSUihtYXN0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihtYXN0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbGF0X21wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBtcGM4M3h4X3NwaV9yZW1vdmUoJnBkZXYtPmRldik7Cit9CisKIE1PRFVMRV9BTElBUygicGxhdGZvcm06bXBjODN4eF9zcGkiKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzgzeHhfc3BpX2RyaXZlciA9IHsKLQkucmVtb3ZlID0gX19leGl0X3AobXBjODN4eF9zcGlfcmVtb3ZlKSwKKwkucHJvYmUgPSBwbGF0X21wYzgzeHhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChwbGF0X21wYzgzeHhfc3BpX3JlbW92ZSksCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibXBjODN4eF9zcGkiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAorc3RhdGljIGJvb2wgbGVnYWN5X2RyaXZlcl9mYWlsZWQ7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsZWdhY3lfZHJpdmVyX3JlZ2lzdGVyKHZvaWQpCit7CisJbGVnYWN5X2RyaXZlcl9mYWlsZWQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWdhY3lfZHJpdmVyX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpZiAobGVnYWN5X2RyaXZlcl9mYWlsZWQpCisJCXJldHVybjsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjODN4eF9zcGlfZHJpdmVyKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgbGVnYWN5X2RyaXZlcl9yZWdpc3Rlcih2b2lkKSB7fQorc3RhdGljIHZvaWQgX19leGl0IGxlZ2FjeV9kcml2ZXJfdW5yZWdpc3Rlcih2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19NUEM4MzJ4X1JEQiAqLworCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3NwaV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXBjODN4eF9zcGlfZHJpdmVyLCBtcGM4M3h4X3NwaV9wcm9iZSk7CisJbGVnYWN5X2RyaXZlcl9yZWdpc3RlcigpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX21wYzgzeHhfc3BpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGM4M3h4X3NwaV9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX21wYzgzeHhfc3BpX2RyaXZlcik7CisJbGVnYWN5X2RyaXZlcl91bnJlZ2lzdGVyKCk7CiB9CiAKIG1vZHVsZV9pbml0KG1wYzgzeHhfc3BpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IGZlN2U1ZjMuLjQ5NGQzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCWlmICh4c3BpLT5yZWdzID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgImlvcmVtYXAgZmFpbHVyZVxuIik7Ci0JCWdvdG8gcHV0X21hc3RlcjsKKwkJZ290byByZWxlYXNlX21lbTsKIAl9CiAJeHNwaS0+aXJxID0gcl9pcnEtPnN0YXJ0OwogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAieGxueCxudW0tc3MtYml0cyIsICZsZW4pOwogCWlmICghcHJvcCB8fCBsZW4gPCBzaXplb2YoKnByb3ApKSB7CiAJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gJ3hsbngsbnVtLXNzLWJpdHMnIHByb3BlcnR5XG4iKTsKLQkJZ290byBwdXRfbWFzdGVyOworCQlnb3RvIHVubWFwX2lvOwogCX0KIAltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gKnByb3A7CiAKQEAgLTM5Nyw2ICszOTcsOCBAQAogCWZyZWVfaXJxKHhzcGktPmlycSwgeHNwaSk7CiB1bm1hcF9pbzoKIAlpb3VubWFwKHhzcGktPnJlZ3MpOworcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyX21lbSkpOwogcHV0X21hc3RlcjoKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwogCXJldHVybiByYzsKQEAgLTQwNiw2ICs0MDgsNyBAQAogewogCXN0cnVjdCB4aWxpbnhfc3BpICp4c3BpOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHJlc291cmNlIHJfbWVtOwogCiAJbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEob2ZkZXYpOwogCXhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CkBAIC00MTMsNiArNDE2LDggQEAKIAlzcGlfYml0YmFuZ19zdG9wKCZ4c3BpLT5iaXRiYW5nKTsKIAlmcmVlX2lycSh4c3BpLT5pcnEsIHhzcGkpOwogCWlvdW5tYXAoeHNwaS0+cmVncyk7CisJaWYgKCFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcl9tZW0pKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocl9tZW0uc3RhcnQsIHJlc291cmNlX3NpemUoJnJfbWVtKSk7CiAJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCAwKTsKIAlzcGlfbWFzdGVyX3B1dCh4c3BpLT5iaXRiYW5nLm1hc3Rlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IGU1NzUyZjYuLjgwZjljYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNzE5LDcgKzcxOSw3IEBACiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQogdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHNvZnRtYWNfc2Nhbl93cSk7CiAjZWxzZQogdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQpAQCAtNzc3LDcgKzc3Nyw3IEBACiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQogdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBzb2Z0bWFjX3NjYW5fd3EpOwogI2Vsc2UKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTI5ODAsNyArMjk4MCw3IEBACiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQogdm9pZCBpZWVlODAyMTFfc3RhcnRfaWJzc193cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBzdGFydF9pYnNzX3dxKTsKICNlbHNlCiB2b2lkIGllZWU4MDIxMV9zdGFydF9pYnNzX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQpAQCAtMzE2Miw3ICszMTYyLDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVfcmV0cnlfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgYXNzb2NpYXRlX3JldHJ5X3dxKTsKICNlbHNlCiB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGVfcmV0cnlfd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDY2ZGU1Y2MuLmZmMWYyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC01NDM4LDcgKzU0MzgsNyBAQAogLy8Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CiAvLwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqKQogLy8JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod193YWtldXBfd3EpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAjZWxzZQpAQCAtNTQ1OSw3ICs1NDU5LDcgQEAKIC8vICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CiAvLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19zbGVlcF93cSk7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAjZWxzZQpAQCAtNjQwNyw3ICs2NDA3LDcgQEAKIHZvaWQgcnRsODE4MF90eF9pcnFfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCS8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHJlc2V0X3dxKTsKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwpAQCAtNjY5MSw3ICs2NjkxLDcgQEAKICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCiB2b2lkIEdQSU9DaGFuZ2VSRldvcmtJdGVtQ2FsbEJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCS8vc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJLy9zdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgR1BJT0NoYW5nZVJGV29ya0l0ZW0ud29yayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCA3NDJhNWJjLi4yYTcwNTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtNDIxLDU3ICs0MjIsNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCQkJCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNlcmlhbF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7Ci0JaW50IGxlbmd0aCA9IDA7CiAJaW50IGk7Ci0Jb2ZmX3QgYmVnaW4gPSAwOwogCWNoYXIgdG1wWzQwXTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0JbGVuZ3RoICs9IHNwcmludGYocGFnZSwgInVzYnNlcmluZm86MS4wIGRyaXZlcjoyLjBcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBTRVJJQUxfVFRZX01JTk9SUyAmJiBsZW5ndGggPCBQQUdFX1NJWkU7ICsraSkgeworCXNlcV9wdXRzKG0sICJ1c2JzZXJpbmZvOjEuMCBkcml2ZXI6Mi4wXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkgewogCQlzZXJpYWwgPSB1c2Jfc2VyaWFsX2dldF9ieV9pbmRleChpKTsKIAkJaWYgKHNlcmlhbCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJbGVuZ3RoICs9IHNwcmludGYocGFnZStsZW5ndGgsICIlZDoiLCBpKTsKKwkJc2VxX3ByaW50ZihtLCAiJWQ6IiwgaSk7CiAJCWlmIChzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikKLQkJCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIG1vZHVsZTolcyIsCisJCQlzZXFfcHJpbnRmKG0sICIgbW9kdWxlOiVzIiwKIAkJCQltb2R1bGVfbmFtZShzZXJpYWwtPnR5cGUtPmRyaXZlci5vd25lcikpOwotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBuYW1lOlwiJXNcIiIsCisJCXNlcV9wcmludGYobSwgIiBuYW1lOlwiJXNcIiIsCiAJCQkJc2VyaWFsLT50eXBlLT5kZXNjcmlwdGlvbik7Ci0JCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIHZlbmRvcjolMDR4IHByb2R1Y3Q6JTA0eCIsCisJCXNlcV9wcmludGYobSwgIiB2ZW5kb3I6JTA0eCBwcm9kdWN0OiUwNHgiLAogCQkJbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7Ci0JCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiIG51bV9wb3J0czolZCIsCi0JCQkJCQkJc2VyaWFsLT5udW1fcG9ydHMpOwotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBwb3J0OiVkIiwKLQkJCQkJCQlpIC0gc2VyaWFsLT5taW5vciArIDEpOworCQlzZXFfcHJpbnRmKG0sICIgbnVtX3BvcnRzOiVkIiwgc2VyaWFsLT5udW1fcG9ydHMpOworCQlzZXFfcHJpbnRmKG0sICIgcG9ydDolZCIsIGkgLSBzZXJpYWwtPm1pbm9yICsgMSk7CiAJCXVzYl9tYWtlX3BhdGgoc2VyaWFsLT5kZXYsIHRtcCwgc2l6ZW9mKHRtcCkpOwotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBwYXRoOiVzIiwgdG1wKTsKKwkJc2VxX3ByaW50ZihtLCAiIHBhdGg6JXMiLCB0bXApOwogCi0JCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiXG4iKTsKLQkJaWYgKChsZW5ndGggKyBiZWdpbikgPiAob2ZmICsgY291bnQpKSB7Ci0JCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwotCQkJZ290byBkb25lOwotCQl9Ci0JCWlmICgobGVuZ3RoICsgYmVnaW4pIDwgb2ZmKSB7Ci0JCQliZWdpbiArPSBsZW5ndGg7Ci0JCQlsZW5ndGggPSAwOwotCQl9CisJCXNlcV9wdXRjKG0sICdcbicpOwogCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwogCX0KLQkqZW9mID0gMTsKLWRvbmU6Ci0JaWYgKG9mZiA+PSAobGVuZ3RoICsgYmVnaW4pKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuIChjb3VudCA8IGJlZ2luK2xlbmd0aC1vZmYpID8gY291bnQgOiBiZWdpbitsZW5ndGgtb2ZmOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNlcmlhbF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNlcmlhbF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXJpYWxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzZXJpYWxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgaW50IHNlcmlhbF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTExMTMsOSArMTEwOSw5IEBACiAJLnVudGhyb3R0bGUgPQkJc2VyaWFsX3VudGhyb3R0bGUsCiAJLmJyZWFrX2N0bCA9CQlzZXJpYWxfYnJlYWssCiAJLmNoYXJzX2luX2J1ZmZlciA9CXNlcmlhbF9jaGFyc19pbl9idWZmZXIsCi0JLnJlYWRfcHJvYyA9CQlzZXJpYWxfcmVhZF9wcm9jLAogCS50aW9jbWdldCA9CQlzZXJpYWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCXNlcmlhbF90aW9jbXNldCwKKwkucHJvY19mb3BzID0JCSZzZXJpYWxfcHJvY19mb3BzLAogfTsKIAogc3RydWN0IHR0eV9kcml2ZXIgKnVzYl9zZXJpYWxfdHR5X2RyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCmluZGV4IDg4MmM1N2IuLmZkYmEyZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIApAQCAtMzI4LDcgKzMyOSw3IEBACiAKIHN0cnVjdCBpc2QyMDBfaW5mbyB7CiAJc3RydWN0IGlucXVpcnlfZGF0YSBJbnF1aXJ5RGF0YTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQ7CisJdTE2ICppZDsKIAlzdHJ1Y3QgaXNkMjAwX2NvbmZpZyBDb25maWdEYXRhOwogCXVuc2lnbmVkIGNoYXIgKlJlZ3NCdWY7CiAJdW5zaWduZWQgY2hhciBBVEFSZWdzWzhdOwpAQCAtNDE5LDE5ICs0MjAsMTkgQEAKIAkJYnVmLT5GbGFncyA9IFVOSVRfQVRURU5USU9OOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGUgPSAwOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUNvZGVRdWFsaWZpZXIgPSAwOwotCX0gZWxzZSBpZihlcnJvciAmIE1DUl9FUlIpIHsKKwl9IGVsc2UgaWYgKGVycm9yICYgQVRBX01DUikgewogCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKIAkJYnVmLT5GbGFncyA9ICBVTklUX0FUVEVOVElPTjsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKLQl9IGVsc2UgaWYoZXJyb3IgJiBUUkswX0VSUikgeworCX0gZWxzZSBpZiAoZXJyb3IgJiBBVEFfVFJLME5GKSB7CiAJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOwogCQlidWYtPkZsYWdzID0gIE5PVF9SRUFEWTsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKLQl9IGVsc2UgaWYoZXJyb3IgJiBFQ0NfRVJSKSB7CisJfSBlbHNlIGlmIChlcnJvciAmIEFUQV9VTkMpIHsKIAkJYnVmLT5FcnJvckNvZGUgPSAweDcwIHwgU0VOU0VfRVJSQ09ERV9WQUxJRDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VMZW5ndGggPSAweGI7CiAJCWJ1Zi0+RmxhZ3MgPSAgREFUQV9QUk9URUNUOwpAQCAtNTQ3LDE2ICs1NDgsMTYgQEAKIAkJYXRhLmdlbmVyaWMuQWN0aW9uU2VsZWN0ID0gQUNUSU9OX1NFTEVDVF8xfEFDVElPTl9TRUxFQ1RfNTsKIAkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfREVWSUNFX0hFQUQgfCBSRUdfQ09NTUFORDsKIAkJYXRhLndyaXRlLkRldmljZUhlYWRCeXRlID0gaW5mby0+RGV2aWNlSGVhZDsKLQkJYXRhLndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1NSU1Q7CisJCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DTURfREVWX1JFU0VUOwogCQlpc2QyMDBfc2V0X3NyYihpbmZvLCBETUFfTk9ORSwgTlVMTCwgMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1RJT05fSURFTlRJRlk6CiAJCVVTX0RFQlVHUCgiICAgaXNkMjAwX2FjdGlvbihJREVOVElGWSlcbiIpOwogCQlhdGEuZ2VuZXJpYy5SZWdpc3RlclNlbGVjdCA9IFJFR19DT01NQU5EOwotCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fSURFTlRJRlk7CisJCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IEFUQV9DTURfSURfQVRBOwogCQlpc2QyMDBfc2V0X3NyYihpbmZvLCBETUFfRlJPTV9ERVZJQ0UsIGluZm8tPmlkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCkpOworCQkJCUFUQV9JRF9XT1JEUyAqIDIpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05NDQsMjIgKzk0NSwyMiBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKCFkZXRlY3QpIHsKLQkJCWlmIChyZWdzW0FUQV9SRUdfU1RBVFVTX09GRlNFVF0gJiBCVVNZX1NUQVQpIHsKKwkJCWlmIChyZWdzW0FUQV9SRUdfU1RBVFVTX09GRlNFVF0gJiBBVEFfQlVTWSkgewogCQkJCVVTX0RFQlVHUCgiICAgJXMgc3RhdHVzIGlzIHN0aWxsIEJTWSwgdHJ5IGFnYWluLi4uXG4iLG1zdHIpOwogCQkJfSBlbHNlIHsKIAkJCQlVU19ERUJVR1AoIiAgICVzIHN0YXR1cyAhQlNZLCBjb250aW51ZSB3aXRoIG5leHQgb3BlcmF0aW9uXG4iLG1zdHIpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCS8qIGNoZWNrIGZvciBCVVNZX1NUQVQgYW5kICovCi0JCS8qIFdSRVJSX1NUQVQgKHdvcmthcm91bmQgQVRBIFppcCBkcml2ZSkgYW5kICovIAotCQkvKiBFUlJfU1RBVCAod29ya2Fyb3VuZCBmb3IgQXJjaG9zIENELVJPTSkgKi8KKwkJLyogY2hlY2sgZm9yIEFUQV9CVVNZIGFuZCAqLworCQkvKiBBVEFfREYgKHdvcmthcm91bmQgQVRBIFppcCBkcml2ZSkgYW5kICovCisJCS8qIEFUQV9FUlIgKHdvcmthcm91bmQgZm9yIEFyY2hvcyBDRC1ST00pICovCiAJCWVsc2UgaWYgKHJlZ3NbQVRBX1JFR19TVEFUVVNfT0ZGU0VUXSAmCi0JCQkgKEJVU1lfU1RBVCB8IFdSRVJSX1NUQVQgfCBFUlJfU1RBVCApKSB7CisJCQkgKEFUQV9CVVNZIHwgQVRBX0RGIHwgQVRBX0VSUikpIHsKIAkJCVVTX0RFQlVHUCgiICAgU3RhdHVzIGluZGljYXRlcyBpdCBpcyBub3QgcmVhZHksIHRyeSBhZ2Fpbi4uLlxuIik7CiAJCX0KIAkJLyogY2hlY2sgZm9yIERSRFksIEFUQSBkZXZpY2VzIHNldCBEUkRZIGFmdGVyIFNSU1QgKi8KLQkJZWxzZSBpZiAocmVnc1tBVEFfUkVHX1NUQVRVU19PRkZTRVRdICYgUkVBRFlfU1RBVCkgeworCQllbHNlIGlmIChyZWdzW0FUQV9SRUdfU1RBVFVTX09GRlNFVF0gJiBBVEFfRFJEWSkgewogCQkJVVNfREVCVUdQKCIgICBJZGVudGlmaWVkIEFUQSBkZXZpY2VcbiIpOwogCQkJaW5mby0+RGV2aWNlRmxhZ3MgfD0gREZfQVRBX0RFVklDRTsKIAkJCWluZm8tPkRldmljZUhlYWQgPSBtYXN0ZXJfc2xhdmU7CkBAIC0xMDUzLDEwMyArMTA1NCw1MCBAQAogCXJldHVybihyZXRTdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBpc2QyMDBfZml4X2RyaXZlaWQgKHN0cnVjdCBoZF9kcml2ZWlkICppZCkKK3N0YXRpYyB2b2lkIGlzZDIwMF9maXhfZHJpdmVpZCh1MTYgKmlkKQogewogI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KICMgaWZkZWYgX19CSUdfRU5ESUFOCiAJaW50IGk7Ci0JdTE2ICpzdHJpbmdjYXN0OwogCi0JaWQtPmNvbmZpZyAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y29uZmlnKTsKLQlpZC0+Y3lscyAgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jeWxzKTsKLQlpZC0+cmVzZXJ2ZWQyICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5yZXNlcnZlZDIpOwotCWlkLT5oZWFkcyAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmhlYWRzKTsKLQlpZC0+dHJhY2tfYnl0ZXMgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT50cmFja19ieXRlcyk7Ci0JaWQtPnNlY3Rvcl9ieXRlcyAgID0gX19sZTE2X3RvX2NwdShpZC0+c2VjdG9yX2J5dGVzKTsKLQlpZC0+c2VjdG9ycyAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5zZWN0b3JzKTsKLQlpZC0+dmVuZG9yMCAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT52ZW5kb3IwKTsKLQlpZC0+dmVuZG9yMSAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT52ZW5kb3IxKTsKLQlpZC0+dmVuZG9yMiAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT52ZW5kb3IyKTsKLQlzdHJpbmdjYXN0ID0gKHUxNiAqKSZpZC0+c2VyaWFsX25vWzBdOwotCWZvciAoaSA9IDA7IGkgPCAoMjAvMik7IGkrKykKLQkJc3RyaW5nY2FzdFtpXSA9IF9fbGUxNl90b19jcHUoc3RyaW5nY2FzdFtpXSk7Ci0JaWQtPmJ1Zl90eXBlICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+YnVmX3R5cGUpOwotCWlkLT5idWZfc2l6ZSAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmJ1Zl9zaXplKTsKLQlpZC0+ZWNjX2J5dGVzICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5lY2NfYnl0ZXMpOwotCXN0cmluZ2Nhc3QgPSAodTE2ICopJmlkLT5md19yZXZbMF07Ci0JZm9yIChpID0gMDsgaSA8ICg4LzIpOyBpKyspCi0JCXN0cmluZ2Nhc3RbaV0gPSBfX2xlMTZfdG9fY3B1KHN0cmluZ2Nhc3RbaV0pOwotCXN0cmluZ2Nhc3QgPSAodTE2ICopJmlkLT5tb2RlbFswXTsKLQlmb3IgKGkgPSAwOyBpIDwgKDQwLzIpOyBpKyspCi0JCXN0cmluZ2Nhc3RbaV0gPSBfX2xlMTZfdG9fY3B1KHN0cmluZ2Nhc3RbaV0pOwotCWlkLT5kd29yZF9pbyAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmR3b3JkX2lvKTsKLQlpZC0+cmVzZXJ2ZWQ1MCAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5yZXNlcnZlZDUwKTsKLQlpZC0+ZmllbGRfdmFsaWQgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5maWVsZF92YWxpZCk7Ci0JaWQtPmN1cl9jeWxzICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3VyX2N5bHMpOwotCWlkLT5jdXJfaGVhZHMgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmN1cl9oZWFkcyk7Ci0JaWQtPmN1cl9zZWN0b3JzICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3VyX3NlY3RvcnMpOwotCWlkLT5jdXJfY2FwYWNpdHkwICA9IF9fbGUxNl90b19jcHUoaWQtPmN1cl9jYXBhY2l0eTApOwotCWlkLT5jdXJfY2FwYWNpdHkxICA9IF9fbGUxNl90b19jcHUoaWQtPmN1cl9jYXBhY2l0eTEpOwotCWlkLT5sYmFfY2FwYWNpdHkgICA9IF9fbGUzMl90b19jcHUoaWQtPmxiYV9jYXBhY2l0eSk7Ci0JaWQtPmRtYV8xd29yZCAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZG1hXzF3b3JkKTsKLQlpZC0+ZG1hX213b3JkICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5kbWFfbXdvcmQpOwotCWlkLT5laWRlX3Bpb19tb2RlcyA9IF9fbGUxNl90b19jcHUoaWQtPmVpZGVfcGlvX21vZGVzKTsKLQlpZC0+ZWlkZV9kbWFfbWluICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5laWRlX2RtYV9taW4pOwotCWlkLT5laWRlX2RtYV90aW1lICA9IF9fbGUxNl90b19jcHUoaWQtPmVpZGVfZG1hX3RpbWUpOwotCWlkLT5laWRlX3BpbyAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmVpZGVfcGlvKTsKLQlpZC0+ZWlkZV9waW9faW9yZHkgPSBfX2xlMTZfdG9fY3B1KGlkLT5laWRlX3Bpb19pb3JkeSk7Ci0JZm9yIChpID0gMDsgaSA8IDI7ICsraSkKLQkJaWQtPndvcmRzNjlfNzBbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczY5XzcwW2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQotCQlpZC0+d29yZHM3MV83NFtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzNzFfNzRbaV0pOwotCWlkLT5xdWV1ZV9kZXB0aCAgICA9IF9fbGUxNl90b19jcHUoaWQtPnF1ZXVlX2RlcHRoKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQotCQlpZC0+d29yZHM3Nl83OVtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzNzZfNzlbaV0pOwotCWlkLT5tYWpvcl9yZXZfbnVtICA9IF9fbGUxNl90b19jcHUoaWQtPm1ham9yX3Jldl9udW0pOwotCWlkLT5taW5vcl9yZXZfbnVtICA9IF9fbGUxNl90b19jcHUoaWQtPm1pbm9yX3Jldl9udW0pOwotCWlkLT5jb21tYW5kX3NldF8xICA9IF9fbGUxNl90b19jcHUoaWQtPmNvbW1hbmRfc2V0XzEpOwotCWlkLT5jb21tYW5kX3NldF8yICA9IF9fbGUxNl90b19jcHUoaWQtPmNvbW1hbmRfc2V0XzIpOwotCWlkLT5jZnNzZSAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmNmc3NlKTsKLQlpZC0+Y2ZzX2VuYWJsZV8xICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jZnNfZW5hYmxlXzEpOwotCWlkLT5jZnNfZW5hYmxlXzIgICA9IF9fbGUxNl90b19jcHUoaWQtPmNmc19lbmFibGVfMik7Ci0JaWQtPmNzZl9kZWZhdWx0ICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3NmX2RlZmF1bHQpOwotCWlkLT5kbWFfdWx0cmEgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmRtYV91bHRyYSk7Ci0JaWQtPnRyc2V1YyAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+dHJzZXVjKTsKLQlpZC0+dHJzRXVjICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT50cnNFdWMpOwotCWlkLT5DdXJBUE12YWx1ZXMgICA9IF9fbGUxNl90b19jcHUoaWQtPkN1ckFQTXZhbHVlcyk7Ci0JaWQtPm1wcmMgICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+bXByYyk7Ci0JaWQtPmh3X2NvbmZpZyAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+aHdfY29uZmlnKTsKLQlpZC0+YWNvdXN0aWMgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5hY291c3RpYyk7Ci0JaWQtPm1zcnFzICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+bXNycXMpOwotCWlkLT5zeGZlcnQgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnN4ZmVydCk7Ci0JaWQtPnNhbCAgICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+c2FsKTsKLQlpZC0+c3BnICAgICAgICAgICAgPSBfX2xlMzJfdG9fY3B1KGlkLT5zcGcpOwotCWlkLT5sYmFfY2FwYWNpdHlfMiA9IF9fbGU2NF90b19jcHUoaWQtPmxiYV9jYXBhY2l0eV8yKTsKLQlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykKLQkJaWQtPndvcmRzMTA0XzEyNVtpXSAgID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMxMDRfMTI1W2ldKTsKLQlpZC0+bGFzdF9sdW4gICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5sYXN0X2x1bik7Ci0JaWQtPndvcmQxMjcgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+d29yZDEyNyk7Ci0JaWQtPmRsZiAgICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZGxmKTsKLQlpZC0+Y3NmbyAgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jc2ZvKTsKLQlmb3IgKGkgPSAwOyBpIDwgMjY7IGkrKykKLQkJaWQtPndvcmRzMTMwXzE1NVtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMTMwXzE1NVtpXSk7Ci0JaWQtPndvcmQxNTYgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+d29yZDE1Nik7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJaWQtPndvcmRzMTU3XzE1OVtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMTU3XzE1OVtpXSk7Ci0JaWQtPmNmYV9wb3dlciAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y2ZhX3Bvd2VyKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykKLQkJaWQtPndvcmRzMTYxXzE3NVtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMTYxXzE3NVtpXSk7Ci0JZm9yIChpID0gMDsgaSA8IDMxOyBpKyspCi0JCWlkLT53b3JkczE3Nl8yMDVbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczE3Nl8yMDVbaV0pOwotCWZvciAoaSA9IDA7IGkgPCA0ODsgaSsrKQotCQlpZC0+d29yZHMyMDZfMjU0W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMyMDZfMjU0W2ldKTsKLQlpZC0+aW50ZWdyaXR5X3dvcmQgID0gX19sZTE2X3RvX2NwdShpZC0+aW50ZWdyaXR5X3dvcmQpOworCWZvciAoaSA9IDA7IGkgPCBBVEFfSURfV09SRFM7IGkrKykKKwkJaWRbaV0gPSBfX2xlMTZfdG9fY3B1KGlkW2ldKTsKICMgZWxzZQogIyAgZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCiAjIGVuZGlmCiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQgaXNkMjAwX2R1bXBfZHJpdmVpZCh1MTYgKmlkKQoreworCVVTX0RFQlVHUCgiICAgSWRlbnRpZnkgRGF0YSBTdHJ1Y3R1cmU6XG4iKTsKKwlVU19ERUJVR1AoIiAgICAgIGNvbmZpZyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NPTkZJR10pOworCVVTX0RFQlVHUCgiICAgICAgY3lscyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NZTFNdKTsKKwlVU19ERUJVR1AoIiAgICAgIGhlYWRzID0gMHgleFxuIiwJICBpZFtBVEFfSURfSEVBRFNdKTsKKwlVU19ERUJVR1AoIiAgICAgIHRyYWNrX2J5dGVzID0gMHgleFxuIiwJICBpZFs0XSk7CisJVVNfREVCVUdQKCIgICAgICBzZWN0b3JfYnl0ZXMgPSAweCV4XG4iLCAgaWRbNV0pOworCVVTX0RFQlVHUCgiICAgICAgc2VjdG9ycyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX1NFQ1RPUlNdKTsKKwlVU19ERUJVR1AoIiAgICAgIHNlcmlhbF9ub1swXSA9IDB4JXhcbiIsICAqKGNoYXIgKikmaWRbQVRBX0lEX1NFUk5PXSk7CisJVVNfREVCVUdQKCIgICAgICBidWZfdHlwZSA9IDB4JXhcbiIsCSAgaWRbMjBdKTsKKwlVU19ERUJVR1AoIiAgICAgIGJ1Zl9zaXplID0gMHgleFxuIiwJICBpZFtBVEFfSURfQlVGX1NJWkVdKTsKKwlVU19ERUJVR1AoIiAgICAgIGVjY19ieXRlcyA9IDB4JXhcbiIsCSAgaWRbMjJdKTsKKwlVU19ERUJVR1AoIiAgICAgIGZ3X3JldlswXSA9IDB4JXhcbiIsCSAgKihjaGFyICopJmlkW0FUQV9JRF9GV19SRVZdKTsKKwlVU19ERUJVR1AoIiAgICAgIG1vZGVsWzBdID0gMHgleFxuIiwJICAqKGNoYXIgKikmaWRbQVRBX0lEX1BST0RdKTsKKwlVU19ERUJVR1AoIiAgICAgIG1heF9tdWx0c2VjdCA9IDB4JXhcbiIsICBpZFtBVEFfSURfTUFYX01VTFRTRUNUXSAmIDB4ZmYpOworCVVTX0RFQlVHUCgiICAgICAgZHdvcmRfaW8gPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9EV09SRF9JT10pOworCVVTX0RFQlVHUCgiICAgICAgY2FwYWJpbGl0eSA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NBUEFCSUxJVFldID4+IDgpOworCVVTX0RFQlVHUCgiICAgICAgdFBJTyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX09MRF9QSU9fTU9ERVNdID4+IDgpOworCVVTX0RFQlVHUCgiICAgICAgdERNQSA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX09MRF9ETUFfTU9ERVNdID4+IDgpOworCVVTX0RFQlVHUCgiICAgICAgZmllbGRfdmFsaWQgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0pOworCVVTX0RFQlVHUCgiICAgICAgY3VyX2N5bHMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DVVJfQ1lMU10pOworCVVTX0RFQlVHUCgiICAgICAgY3VyX2hlYWRzID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ1VSX0hFQURTXSk7CisJVVNfREVCVUdQKCIgICAgICBjdXJfc2VjdG9ycyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NVUl9TRUNUT1JTXSk7CisJVVNfREVCVUdQKCIgICAgICBjdXJfY2FwYWNpdHkgPSAweCV4XG4iLCAgYXRhX2lkX3UzMihpZCwgNTcpKTsKKwlVU19ERUJVR1AoIiAgICAgIG11bHRzZWN0ID0gMHgleFxuIiwJICBpZFtBVEFfSURfTVVMVFNFQ1RdICYgMHhmZik7CisJVVNfREVCVUdQKCIgICAgICBsYmFfY2FwYWNpdHkgPSAweCV4XG4iLCAgYXRhX2lkX3UzMihpZCwgQVRBX0lEX0xCQV9DQVBBQ0lUWSkpOworCVVTX0RFQlVHUCgiICAgICAgY29tbWFuZF9zZXRfMSA9IDB4JXhcbiIsIGlkW0FUQV9JRF9DT01NQU5EX1NFVF8xXSk7CisJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8yID0gMHgleFxuIiwgaWRbQVRBX0lEX0NPTU1BTkRfU0VUXzJdKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YQpAQCAtMTE2Myw3ICsxMTExLDcgQEAKIHsKIAlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOwogCWludCByZXRTdGF0dXMgPSBJU0QyMDBfR09PRDsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBpbmZvLT5pZDsKKwl1MTYgKmlkID0gaW5mby0+aWQ7CiAKIAlVU19ERUJVR1AoIkVudGVyaW5nIGlzZDIwMF9nZXRfaW5xdWlyeV9kYXRhXG4iKTsKIApAQCAtMTE4MCw4ICsxMTI4LDcgQEAKIAkJCS8qIHRoaXMgbXVzdCBiZSBhbiBBVEEgZGV2aWNlICovCiAJCQkvKiBwZXJmb3JtIGFuIEFUQSBDb21tYW5kIElkZW50aWZ5ICovCiAJCQl0cmFuc2ZlclN0YXR1cyA9IGlzZDIwMF9hY3Rpb24oIHVzLCBBQ1RJT05fSURFTlRJRlksCi0JCQkJCQkJaWQsIAotCQkJCQkJCXNpemVvZihzdHJ1Y3QgaGRfZHJpdmVpZCkgKTsKKwkJCQkJCQlpZCwgQVRBX0lEX1dPUkRTICogMik7CiAJCQlpZiAodHJhbnNmZXJTdGF0dXMgIT0gSVNEMjAwX1RSQU5TUE9SVF9HT09EKSB7CiAJCQkJLyogRXJyb3IgaXNzdWluZyBBVEEgQ29tbWFuZCBJZGVudGlmeSAqLwogCQkJCVVTX0RFQlVHUCgiICAgRXJyb3IgaXNzdWluZyBBVEEgQ29tbWFuZCBJZGVudGlmeVxuIik7CkBAIC0xMTkxLDM1ICsxMTM4LDkgQEAKIAkJCQlpbnQgaTsKIAkJCQlfX2JlMTYgKnNyYzsKIAkJCQlfX3UxNiAqZGVzdDsKLQkJCQlpc2QyMDBfZml4X2RyaXZlaWQoaWQpOwogCi0JCQkJVVNfREVCVUdQKCIgICBJZGVudGlmeSBEYXRhIFN0cnVjdHVyZTpcbiIpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY29uZmlnID0gMHgleFxuIiwgaWQtPmNvbmZpZyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjeWxzID0gMHgleFxuIiwgaWQtPmN5bHMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgaGVhZHMgPSAweCV4XG4iLCBpZC0+aGVhZHMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgdHJhY2tfYnl0ZXMgPSAweCV4XG4iLCBpZC0+dHJhY2tfYnl0ZXMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgc2VjdG9yX2J5dGVzID0gMHgleFxuIiwgaWQtPnNlY3Rvcl9ieXRlcyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBzZWN0b3JzID0gMHgleFxuIiwgaWQtPnNlY3RvcnMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgc2VyaWFsX25vWzBdID0gMHgleFxuIiwgaWQtPnNlcmlhbF9ub1swXSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBidWZfdHlwZSA9IDB4JXhcbiIsIGlkLT5idWZfdHlwZSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBidWZfc2l6ZSA9IDB4JXhcbiIsIGlkLT5idWZfc2l6ZSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBlY2NfYnl0ZXMgPSAweCV4XG4iLCBpZC0+ZWNjX2J5dGVzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGZ3X3JldlswXSA9IDB4JXhcbiIsIGlkLT5md19yZXZbMF0pOwotCQkJCVVTX0RFQlVHUCgiICAgICAgbW9kZWxbMF0gPSAweCV4XG4iLCBpZC0+bW9kZWxbMF0pOwotCQkJCVVTX0RFQlVHUCgiICAgICAgbWF4X211bHRzZWN0ID0gMHgleFxuIiwgaWQtPm1heF9tdWx0c2VjdCk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBkd29yZF9pbyA9IDB4JXhcbiIsIGlkLT5kd29yZF9pbyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjYXBhYmlsaXR5ID0gMHgleFxuIiwgaWQtPmNhcGFiaWxpdHkpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgdFBJTyA9IDB4JXhcbiIsIGlkLT50UElPKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHRETUEgPSAweCV4XG4iLCBpZC0+dERNQSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBmaWVsZF92YWxpZCA9IDB4JXhcbiIsIGlkLT5maWVsZF92YWxpZCk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjdXJfY3lscyA9IDB4JXhcbiIsIGlkLT5jdXJfY3lscyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjdXJfaGVhZHMgPSAweCV4XG4iLCBpZC0+Y3VyX2hlYWRzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9zZWN0b3JzID0gMHgleFxuIiwgaWQtPmN1cl9zZWN0b3JzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGN1cl9jYXBhY2l0eSA9IDB4JXhcbiIsIChpZC0+Y3VyX2NhcGFjaXR5MSA8PCAxNikgKyBpZC0+Y3VyX2NhcGFjaXR5MCApOwotCQkJCVVTX0RFQlVHUCgiICAgICAgbXVsdHNlY3QgPSAweCV4XG4iLCBpZC0+bXVsdHNlY3QpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgbGJhX2NhcGFjaXR5ID0gMHgleFxuIiwgaWQtPmxiYV9jYXBhY2l0eSk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjb21tYW5kX3NldF8xID0gMHgleFxuIiwgaWQtPmNvbW1hbmRfc2V0XzEpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY29tbWFuZF9zZXRfMiA9IDB4JXhcbiIsIGlkLT5jb21tYW5kX3NldF8yKTsKKwkJCQlpc2QyMDBfZml4X2RyaXZlaWQoaWQpOworCQkJCWlzZDIwMF9kdW1wX2RyaXZlaWQoaWQpOwogCiAJCQkJbWVtc2V0KCZpbmZvLT5JbnF1aXJ5RGF0YSwgMCwgc2l6ZW9mKGluZm8tPklucXVpcnlEYXRhKSk7CiAKQEAgLTEyMjksMzAgKzExNTAsMzAgQEAKIAkJCQkvKiBUaGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMzYgKDUgKyAzMSkgKi8KIAkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5BZGRpdGlvbmFsTGVuZ3RoID0gMHgxRjsKIAotCQkJCWlmIChpZC0+Y29tbWFuZF9zZXRfMSAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CisJCQkJaWYgKGlkW0FUQV9JRF9DT01NQU5EX1NFVF8xXSAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CiAJCQkJCS8qIHNldCB0aGUgcmVtb3ZhYmxlIGJpdCAqLwogCQkJCQlpbmZvLT5JbnF1aXJ5RGF0YS5EZXZpY2VUeXBlTW9kaWZpZXIgPSBERVZJQ0VfUkVNT1ZBQkxFOwogCQkJCQlpbmZvLT5EZXZpY2VGbGFncyB8PSBERl9SRU1PVkFCTEVfTUVESUE7CiAJCQkJfQogCiAJCQkJLyogRmlsbCBpbiB2ZW5kb3IgaWRlbnRpZmljYXRpb24gZmllbGRzICovCi0JCQkJc3JjID0gKF9fYmUxNiopaWQtPm1vZGVsOworCQkJCXNyYyA9IChfX2JlMTYgKikmaWRbQVRBX0lEX1BST0RdOwogCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlZlbmRvcklkOwogCQkJCWZvciAoaT0wO2k8NDtpKyspCiAJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOwogCi0JCQkJc3JjID0gKF9fYmUxNiopKGlkLT5tb2RlbCs4KTsKKwkJCQlzcmMgPSAoX19iZTE2ICopJmlkW0FUQV9JRF9QUk9EICsgOC8yXTsKIAkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5Qcm9kdWN0SWQ7CiAJCQkJZm9yIChpPTA7aTw4O2krKykKIAkJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KHNyY1tpXSk7CiAKLQkJCQlzcmMgPSAoX19iZTE2KilpZC0+ZndfcmV2OworCQkJCXNyYyA9IChfX2JlMTYgKikmaWRbQVRBX0lEX0ZXX1JFVl07CiAJCQkJZGVzdCA9IChfX3UxNiopaW5mby0+SW5xdWlyeURhdGEuUHJvZHVjdFJldmlzaW9uTGV2ZWw7CiAJCQkJZm9yIChpPTA7aTwyO2krKykKIAkJCQkJZGVzdFtpXSA9IGJlMTZfdG9fY3B1KHNyY1tpXSk7CiAKIAkJCQkvKiBkZXRlcm1pbmUgaWYgaXQgc3VwcG9ydHMgTWVkaWEgU3RhdHVzIE5vdGlmaWNhdGlvbiAqLwotCQkJCWlmIChpZC0+Y29tbWFuZF9zZXRfMiAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CisJCQkJaWYgKGlkW0FUQV9JRF9DT01NQU5EX1NFVF8yXSAmIENPTU1BTkRTRVRfTUVESUFfU1RBVFVTKSB7CiAJCQkJCVVTX0RFQlVHUCgiICAgRGV2aWNlIHN1cHBvcnRzIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb25cbiIpOwogCiAJCQkJCS8qIEluZGljYXRlIHRoYXQgaXQgaXMgZW5hYmxlZCwgZXZlbiB0aG91Z2ggaXQgaXMgbm90CkBAIC0xMzAxLDcgKzEyMjIsNyBAQAogCQkJICAgICAgdW5pb24gYXRhX2NkYiAqIGF0YUNkYikKIHsKIAlzdHJ1Y3QgaXNkMjAwX2luZm8gKmluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopdXMtPmV4dHJhOwotCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGluZm8tPmlkOworCXUxNiAqaWQgPSBpbmZvLT5pZDsKIAlpbnQgc2VuZFRvVHJhbnNwb3J0ID0gMTsKIAl1bnNpZ25lZCBjaGFyIHNlY3RudW0sIGhlYWQ7CiAJdW5zaWduZWQgc2hvcnQgY3lsaW5kZXI7CkBAIC0xMzY5LDEzICsxMjkwLDEyIEBACiAKIAkJVVNfREVCVUdQKCIgICBBVEEgT1VUIC0gU0NTSU9QX1JFQURfQ0FQQUNJVFlcbiIpOwogCi0JCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBICkgewotCQkJY2FwYWNpdHkgPSBpZC0+bGJhX2NhcGFjaXR5IC0gMTsKLQkJfSBlbHNlIHsKLQkJCWNhcGFjaXR5ID0gKGlkLT5oZWFkcyAqCi0JCQkJICAgIGlkLT5jeWxzICoKLQkJCQkgICAgaWQtPnNlY3RvcnMpIC0gMTsKLQkJfQorCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKQorCQkJY2FwYWNpdHkgPSBhdGFfaWRfdTMyKGlkLCBBVEFfSURfTEJBX0NBUEFDSVRZKSAtIDE7CisJCWVsc2UKKwkJCWNhcGFjaXR5ID0gKGlkW0FUQV9JRF9IRUFEU10gKiBpZFtBVEFfSURfQ1lMU10gKgorCQkJCSAgICBpZFtBVEFfSURfU0VDVE9SU10pIC0gMTsKKwogCQlyZWFkQ2FwYWNpdHlEYXRhLkxvZ2ljYWxCbG9ja0FkZHJlc3MgPSBjcHVfdG9fYmUzMihjYXBhY2l0eSk7CiAJCXJlYWRDYXBhY2l0eURhdGEuQnl0ZXNQZXJCbG9jayA9IGNwdV90b19iZTMyKDB4MjAwKTsKIApAQCAtMTM5MiwxNiArMTMxMiwxNiBAQAogCQlsYmEgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSZzcmItPmNtbmRbMl0pOwogCQlibG9ja0NvdW50ID0gKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzddPDw4IHwgKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzhdOwogCi0JCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBKSB7CisJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikobGJhKTsKIAkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmE+PjgpOwogCQkJaGVhZCA9IEFUQV9BRERSRVNTX0RFVkhFQURfTEJBX01PREUgfCAodW5zaWduZWQgY2hhcikobGJhPj4yNCAmIDB4MEYpOwogCQl9IGVsc2UgewotCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKSgobGJhICUgaWQtPnNlY3RvcnMpICsgMSk7Ci0JCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhIC8gKGlkLT5zZWN0b3JzICoKLQkJCQkJCQkgICBpZC0+aGVhZHMpKTsKLQkJCWhlYWQgPSAodW5zaWduZWQgY2hhcikoKGxiYSAvIGlkLT5zZWN0b3JzKSAlCi0JCQkJCSAgICAgICBpZC0+aGVhZHMpOworCQkJc2VjdG51bSA9ICh1OCkoKGxiYSAlIGlkW0FUQV9JRF9TRUNUT1JTXSkgKyAxKTsKKwkJCWN5bGluZGVyID0gKHUxNikobGJhIC8gKGlkW0FUQV9JRF9TRUNUT1JTXSAqCisJCQkJCWlkW0FUQV9JRF9IRUFEU10pKTsKKwkJCWhlYWQgPSAodTgpKChsYmEgLyBpZFtBVEFfSURfU0VDVE9SU10pICUKKwkJCQkJaWRbQVRBX0lEX0hFQURTXSk7CiAJCX0KIAkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CiAJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOwpAQCAtMTQxNSw3ICsxMzM1LDcgQEAKIAkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckhpZ2hCeXRlID0gKHVuc2lnbmVkIGNoYXIpKGN5bGluZGVyPj44KTsKIAkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckxvd0J5dGUgPSAodW5zaWduZWQgY2hhciljeWxpbmRlcjsKIAkJYXRhQ2RiLT53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IChoZWFkIHwgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQpOwotCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1JFQUQ7CisJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ01EX1BJT19SRUFEOwogCQlicmVhazsKIAogCWNhc2UgV1JJVEVfMTA6CkBAIC0xNDI0LDE0ICsxMzQ0LDE2IEBACiAJCWxiYSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopJnNyYi0+Y21uZFsyXSk7CiAJCWJsb2NrQ291bnQgPSAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbN108PDggfCAodW5zaWduZWQgbG9uZylzcmItPmNtbmRbOF07CiAKLQkJaWYgKGlkLT5jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9MQkEpIHsKKwkJaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSkgewogCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKShsYmEpOwogCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYT4+OCk7CiAJCQloZWFkID0gQVRBX0FERFJFU1NfREVWSEVBRF9MQkFfTU9ERSB8ICh1bnNpZ25lZCBjaGFyKShsYmE+PjI0ICYgMHgwRik7CiAJCX0gZWxzZSB7Ci0JCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgJSBpZC0+c2VjdG9ycykgKyAxKTsKLQkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmEgLyAoaWQtPnNlY3RvcnMgKiBpZC0+aGVhZHMpKTsKLQkJCWhlYWQgPSAodW5zaWduZWQgY2hhcikoKGxiYSAvIGlkLT5zZWN0b3JzKSAlIGlkLT5oZWFkcyk7CisJCQlzZWN0bnVtID0gKHU4KSgobGJhICUgaWRbQVRBX0lEX1NFQ1RPUlNdKSArIDEpOworCQkJY3lsaW5kZXIgPSAodTE2KShsYmEgLyAoaWRbQVRBX0lEX1NFQ1RPUlNdICoKKwkJCQkJaWRbQVRBX0lEX0hFQURTXSkpOworCQkJaGVhZCA9ICh1OCkoKGxiYSAvIGlkW0FUQV9JRF9TRUNUT1JTXSkgJQorCQkJCQlpZFtBVEFfSURfSEVBRFNdKTsKIAkJfQogCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTAgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1ham9yQ29tbWFuZDsKIAkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUxID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNaW5vckNvbW1hbmQ7CkBAIC0xNDQ1LDcgKzEzNjcsNyBAQAogCQlhdGFDZGItPndyaXRlLkN5bGluZGVySGlnaEJ5dGUgPSAodW5zaWduZWQgY2hhcikoY3lsaW5kZXI+PjgpOwogCQlhdGFDZGItPndyaXRlLkN5bGluZGVyTG93Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyKWN5bGluZGVyOwogCQlhdGFDZGItPndyaXRlLkRldmljZUhlYWRCeXRlID0gKGhlYWQgfCBBVEFfQUREUkVTU19ERVZIRUFEX1NURCk7Ci0JCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBXSU5fV1JJVEU7CisJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ01EX1BJT19XUklURTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMTE9XX01FRElVTV9SRU1PVkFMOgpAQCAtMTQ1OSw3ICsxMzgxLDcgQEAKIAkJCWF0YUNkYi0+Z2VuZXJpYy5UcmFuc2ZlckJsb2NrU2l6ZSA9IDE7CiAJCQlhdGFDZGItPmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKIAkJCWF0YUNkYi0+d3JpdGUuQ29tbWFuZEJ5dGUgPSAoc3JiLT5jbW5kWzRdICYgMHgxKSA/Ci0JCQkJV0lOX0RPT1JMT0NLIDogV0lOX0RPT1JVTkxPQ0s7CisJCQkJQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7CiAJCQlpc2QyMDBfc3JiX3NldF9idWZmbGVuKHNyYiwgMCk7CiAJCX0gZWxzZSB7CiAJCQlVU19ERUJVR1AoIiAgIE5vdCByZW1vdmVhYmxlIG1lZGlhLCBqdXN0IHJlcG9ydCBva2F5XG4iKTsKQEAgLTE1MzksOCArMTQ2MSw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CiAJZWxzZSB7Ci0JCWluZm8tPmlkID0gKHN0cnVjdCBoZF9kcml2ZWlkICopCi0JCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpLCBHRlBfS0VSTkVMKTsKKwkJaW5mby0+aWQgPSBremFsbG9jKEFUQV9JRF9XT1JEUyAqIDIsIEdGUF9LRVJORUwpOwogCQlpbmZvLT5SZWdzQnVmID0gKHVuc2lnbmVkIGNoYXIgKikKIAkJCQlrbWFsbG9jKHNpemVvZihpbmZvLT5BVEFSZWdzKSwgR0ZQX0tFUk5FTCk7CiAJCWluZm8tPnNyYi5zZW5zZV9idWZmZXIgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCmluZGV4IGYwYWFjMGMuLjM4NmVhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKQEAgLTQ3MSw3ICs0NzEsNyBAQAogICovCiBzdGF0aWMgdm9pZCB3dXNiaGNfa2VlcF9hbGl2ZV9ydW4oc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3cywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSB0b19kZWxheWVkX3dvcmsod3MpOwogCXN0cnVjdCB3dXNiaGMgKnd1c2JoYyA9CWNvbnRhaW5lcl9vZihkdywgc3RydWN0IHd1c2JoYywga2VlcF9hbGl2ZV90aW1lcik7CiAKIAltdXRleF9sb2NrKCZ3dXNiaGMtPm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vNjgzMjhmYi5jIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKaW5kZXggN2Y5MDdmYi4uMGIxNzgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby82ODMyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKQEAgLTQ3MSw5ICs0NzEsMTEgQEAKIAlmYl9pbmZvLnBzZXVkb19wYWxldHRlID0gJm1jNjh4MzI4ZmJfcHNldWRvX3BhbGV0dGU7CiAJZmJfaW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfWVBBTjsKIAotCWZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwgMjU2LCAwKTsKKwlpZiAoZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAyNTYsIDApKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CisJCWZiX2RlYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OTQsNiArNDk2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYzY4eDMyOGZiX2NsZWFudXAodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CiB9CiAKIG1vZHVsZV9leGl0KG1jNjh4MzI4ZmJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNDFjMjdhNC4uZmZlMmYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTU5NywzMiArMTU5Nyw4IEBACiAJICBEcml2ZXIgZm9yIENhc3RsZVJvY2sgaW50ZWdyYXRlZCBncmFwaGljcyBjb3JlIGluIHRoZQogCSAgVklBIFZUODYyMyBbQXBvbGxvIENMRTI2Nl0gY2hpcHNldC4KIAotY29uZmlnIEZCX0NZQkxBCi0JdHJpc3RhdGUgIkN5YmVyYmxhZGUvaTEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiBYODZfMzIgJiYgITY0QklUCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBzdXBwb3J0IHRoZSBUcmlkZW50IEN5YmVyYmxhZGUvaTEKLQkgIGdyYXBoaWNzIGNvcmUgaW50ZWdyYXRlZCBpbiB0aGUgVklBIFZUODYwMUEgTm9ydGggQnJpZGdlLAotCSAgYWxzbyBrbm93biBhcyBWSUEgQXBvbGxvIFBMRTEzMy4KLQotCSAgU3RhdHVzOgotCSAgIC0gRGV2ZWxvcGVkLCB0ZXN0ZWQgYW5kIHdvcmtpbmcgb24gRVBJQSA1MDAwIGFuZCBFUElBIDgwMC4KLQkgICAtIERvZXMgd29yayByZWxpYWJsZSBvbiBhbGwgc3lzdGVtcyB3aXRoIENSVC9MQ0QgY29ubmVjdGVkIHRvCi0JICAgICBub3JtYWwgVkdBIHBvcnRzLgotCSAgIC0gU2hvdWxkIHdvcmsgb24gc3lzdGVtcyB0aGF0IGRvIHVzZSB0aGUgaW50ZXJuYWwgTENEIHBvcnQsIGJ1dAotCSAgICAgdGhpcyBpcyBhYnNvbHV0ZWx5IG5vdCB0ZXN0ZWQuCi0KLQkgIENoYXJhY3RlciBpbWFnZWJsaXQsIGNvcHlhcmVhIGFuZCByZWN0YW5nbGUgZmlsbCBhcmUgaHcgYWNjZWxlcmF0ZWQsCi0JICB5cGFuIHNjcm9sbGluZyBpcyB1c2VkIGJ5IGRlZmF1bHQuCi0KLQkgIFBsZWFzZSBkbyByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvY3libGFmYi8qPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3libGFmYi4KLQogY29uZmlnIEZCX1RSSURFTlQKLQl0cmlzdGF0ZSAiVHJpZGVudCBzdXBwb3J0IgorCXRyaXN0YXRlICJUcmlkZW50L0N5YmVyWFhYL0N5YmVyQmxhZGUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCkBAIC0xNjMzLDIxICsxNjA5LDE0IEBACiAJICBhbmQgQmxhZGUgWFAuCiAJICBUaGVyZSBhcmUgYWxzbyBpbnRlZ3JhdGVkIHZlcnNpb25zIG9mIHRoZXNlIGNoaXBzIGNhbGxlZCBDeWJlclhYWFgsCiAJICBDeWJlckltYWdlIG9yIEN5YmVyQmxhZGUuIFRoZXNlIGNoaXBzIGFyZSBtb3N0bHkgZm91bmQgaW4gbGFwdG9wcwotCSAgYnV0IGFsc28gb24gc29tZSBtb3RoZXJib2FyZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQ+CisJICBidXQgYWxzbyBvbiBzb21lIG1vdGhlcmJvYXJkcyBpbmNsdWRpbmcgZWFybHkgVklBIEVQSUEgbW90aGVyYm9hcmRzLgorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9mYi90cmlkZW50ZmIudHh0PgogCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRyaWRlbnRmYi4KIAotY29uZmlnIEZCX1RSSURFTlRfQUNDRUwKLQlib29sICJUcmlkZW50IEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBGQl9UUklERU5UICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQlUaGlzIHdpbGwgY29tcGlsZSB0aGUgVHJpZGVudCBmcmFtZSBidWZmZXIgZGV2aWNlIHdpdGgKLQlhY2NlbGVyYXRpb24gZnVuY3Rpb25zLgotCiBjb25maWcgRkJfQVJLCiAJdHJpc3RhdGUgIkFSSyAyMDAwUFYgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtMTkyMCw2ICsxODg5LDMwIEBACiAJZGVwZW5kcyBvbiBGQl9UTUlPCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBGQl9TM0MKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MgZnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUzNDNjRYWAorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgYnVpbHQtaW4gRkIgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZworCSAgU29DIGxpbmUgZnJvbSB0aGUgUzNDMjQ0MyBvbndhcmRzLCBpbmNsdWRpbmcgdGhlIFMzQzI0MTYsIFMzQzI0NTAsCisJICBhbmQgdGhlIFMzQzY0WFggc2VyaWVzIHN1Y2ggYXMgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAuCisKKwkgIFRoZXNlIGNoaXBzIGFsbCBoYXZlIHRoZSBzYW1lIGJhc2ljIGZyYW1lYnVmZmVyIGRlc2lnbiB3aXRoIHRoZQorCSAgYWN0dWFsIGNhcGFiaWxpdGllcyBkZXBlbmRpbmcgb24gdGhlIGNoaXAuIEZvciBpbnN0YW5jZSB0aGUgUzNDNjQwMAorCSAgYW5kIFMzQzY0MTAgc3VwcG9ydCA0IGhhcmR3YXJlIHdpbmRvd3Mgd2hlcmVhcyB0aGUgUzNDMjRYWCBzZXJpZXMKKwkgIGN1cnJlbnRseSBvbmx5IGhhdmUgdHdvLgorCisJICBDdXJyZW50bHkgdGhlIHN1cHBvcnQgaXMgb25seSBmb3IgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAgU29Dcy4KKworY29uZmlnIEZCX1MzQ19ERUJVR19SRUdXUklURQorICAgICAgIGJvb2wgIkRlYnVnIHJlZ2lzdGVyIHdyaXRlcyIKKyAgICAgICBkZXBlbmRzIG9uIEZCX1MzQworICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgIFNob3cgYWxsIHJlZ2lzdGVyIHdyaXRlcyB2aWEgcHJpbnRrKEtFUk5fREVCVUcpCisKIGNvbmZpZyBGQl9TM0MyNDEwCiAJdHJpc3RhdGUgIlMzQzI0MTAgTENEIGZyYW1lYnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IGJiMjY1ZWMuLjBkYmQ2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0YWZiX2lwbGFuMnAyLm8gYXRhZmJfaXBsYW4ycDQubyBhdGFmYl9pcGxhbjJwOC5vCiBvYmotJChDT05GSUdfRkJfTUFDKSAgICAgICAgICAgICAgKz0gbWFjZmIubwogb2JqLSQoQ09ORklHX0ZCX0hFQ1VCQSkgICAgICAgICAgICs9IGhlY3ViYWZiLm8KK29iai0kKENPTkZJR19GQl9ONDExKSAgICAgICAgICAgICArPSBuNDExLm8KIG9iai0kKENPTkZJR19GQl9IR0EpICAgICAgICAgICAgICArPSBoZ2FmYi5vCiBvYmotJChDT05GSUdfRkJfWFZSNTAwKSAgICAgICAgICAgKz0gc3VueHZyNTAwLm8KIG9iai0kKENPTkZJR19GQl9YVlIyNTAwKSAgICAgICAgICArPSBzdW54dnIyNTAwLm8KQEAgLTExMCw2ICsxMTEsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubwogb2JqLSQoQ09ORklHX0ZCX1NINzc2MCkJCSAgKz0gc2g3NzYwZmIubwogb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KK29iai0kKENPTkZJR19GQl9TM0MpCQkgICs9IHMzYy1mYi5vCiBvYmotJChDT05GSUdfRkJfUzNDMjQxMCkJICArPSBzM2MyNDEwZmIubwogb2JqLSQoQ09ORklHX0ZCX0ZTTF9ESVUpCSAgKz0gZnNsLWRpdS1mYi5vCiBvYmotJChDT05GSUdfRkJfQ09CQUxUKSAgICAgICAgICAgKz0gY29iYWx0X2xjZGZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCmluZGV4IDRlMDQ2ZmUuLjYxMDUwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwpAQCAtNDA4LDcgKzQwOCw5IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBjb2xvdXJtYXAuCiAJICovCi0JZmJfYWxsb2NfY21hcCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJcmV0ID0gZmJfYWxsb2NfY21hcCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcDsKIAogCS8qCiAJICogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgpAQCAtNDI2LDYgKzQyOCw4IEBACiAKIAlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IGNhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlciAoJWQpXG4iLCByZXQpOwogCisJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21hcCk7CisgdW5tYXA6CiAJaW91bm1hcChmYi0+cmVncyk7CiAgZnJlZV9jbGs6CiAJY2xrX3B1dChmYi0+Y2xrKTsKQEAgLTQ4NSw2ICs0ODksOCBAQAogCiAJY2xjZGZiX2Rpc2FibGUoZmIpOwogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiLT5mYik7CisJaWYgKGZiLT5mYi5jbWFwLmxlbikKKwkJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21hcCk7CiAJaW91bm1hcChmYi0+cmVncyk7CiAJY2xrX3B1dChmYi0+Y2xrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWlmYi5jIGIvZHJpdmVycy92aWRlby9hbWlmYi5jCmluZGV4IDEwMGYyMzYuLjgyYmVkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1pZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKQEAgLTI0MzcsNyArMjQzNyw5IEBACiAJCWdvdG8gYW1pZmJfZXJyb3I7CiAJfQogCi0JZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAxPDxmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CisJZXJyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAxPDxmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CisJaWYgKGVycikKKwkJZ290byBhbWlmYl9lcnJvcjsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0yNDU2LDcgKzI0NTgsOCBAQAogCiBzdGF0aWMgdm9pZCBhbWlmYl9kZWluaXQodm9pZCkKIHsKLQlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CisJaWYgKGZiX2luZm8uY21hcC5sZW4pCisJCWZiX2RlYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwKTsKIAljaGlwZnJlZSgpOwogCWlmICh2aWRlb21lbW9yeSkKIAkJaW91bm1hcCgodm9pZCopdmlkZW9tZW1vcnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmtmYi5jIGIvZHJpdmVycy92aWRlby9hcmtmYi5jCmluZGV4IDMxNGQxODYuLmQ1ODNiZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJrZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCiAJd2hpbGUgKGNvdW50ICE9IDApCiAJewotCQl2Z2Ffd3NlcShOVUxMLCAweDFDLCByZWd2YWwgfCAoY29kZVswXSAmIDQpID8gMHg4MCA6IDApOworCQl2Z2Ffd3NlcShOVUxMLCAweDFDLCByZWd2YWwgfCAoY29kZVswXSAmIDQgPyAweDgwIDogMCkpOwogCQljb2RlWzFdID0gdmdhX3IoTlVMTCwgZGFjX3JlZ3NbY29kZVswXSAmIDNdKTsKIAkJY291bnQtLTsKIAkJY29kZSArPSAyOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAKIAl3aGlsZSAoY291bnQgIT0gMCkKIAl7Ci0JCXZnYV93c2VxKE5VTEwsIDB4MUMsIHJlZ3ZhbCB8IChjb2RlWzBdICYgNCkgPyAweDgwIDogMCk7CisJCXZnYV93c2VxKE5VTEwsIDB4MUMsIHJlZ3ZhbCB8IChjb2RlWzBdICYgNCA/IDB4ODAgOiAwKSk7CiAJCXZnYV93KE5VTEwsIGRhY19yZWdzW2NvZGVbMF0gJiAzXSwgY29kZVsxXSk7CiAJCWNvdW50LS07CiAJCWNvZGUgKz0gMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jIGIvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKaW5kZXggMWZkMjJmNC4uMWExZjk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKQEAgLTUwNSwxOSArNTA1LDI3IEBACiAJLnZzeW5jX2xlbiAJPSAyLAogfTsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfYXNpbGlhbnQoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfYXNpbGlhbnQoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlpbnQgZXJyOworCiAJcC0+Zml4CQkJPSBhc2lsaWFudGZiX2ZpeDsKIAlwLT5maXguc21lbV9zdGFydAk9IGFkZHI7CiAJcC0+dmFyCQkJPSBhc2lsaWFudGZiX3ZhcjsKIAlwLT5mYm9wcwkJPSAmYXNpbGlhbnRmYl9vcHM7CiAJcC0+ZmxhZ3MJCT0gRkJJTkZPX0RFRkFVTFQ7CiAKLQlmYl9hbGxvY19jbWFwKCZwLT5jbWFwLCAyNTYsIDApOworCWVyciA9IGZiX2FsbG9jX2NtYXAoJnAtPmNtYXAsIDI1NiwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkMmVCA2OTAwMCBmYiBmYWlsZWQgdG8gYWxsb2MgY21hcCBtZW1vcnlcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKSA8IDApIHsKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkMmVCA2OTAwMCBmcmFtZWJ1ZmZlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOwotCQlyZXR1cm47CisJCWZiX2RlYWxsb2NfY21hcCgmcC0+Y21hcCk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogQXNpbGlhbnQgNjkwMDAgZnJhbWUgYnVmZmVyICglZEsgUkFNIGRldGVjdGVkKVxuIiwKQEAgLTUzMiw2ICs1NDAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqcDsKKwlpbnQgZXJyOwogCiAJaWYgKChkcC0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NjAsNyArNTY5LDEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkcCwgNCwgMHgwMjgwMDA4Myk7CiAJd3JpdGViKDMsIHAtPnNjcmVlbl9iYXNlICsgMHg0MDA3ODQpOwogCi0JaW5pdF9hc2lsaWFudChwLCBhZGRyKTsKKwllcnIgPSBpbml0X2FzaWxpYW50KHAsIGFkZHIpOworCWlmIChlcnIpIHsKKwkJaW91bm1hcChwLT5zY3JlZW5fYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihhZGRyLCBzaXplKTsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShwKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlwY2lfc2V0X2RydmRhdGEoZHAsIHApOwogCXJldHVybiAwOwpAQCAtNTcxLDYgKzU4Niw3IEBACiAJc3RydWN0IGZiX2luZm8gKnAgPSBwY2lfZ2V0X2RydmRhdGEoZHApOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKTsKKwlmYl9kZWFsbG9jX2NtYXAoJnAtPmNtYXApOwogCWlvdW5tYXAocC0+c2NyZWVuX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZHAsIDApLCBwY2lfcmVzb3VyY2VfbGVuKGRwLCAwKSk7CiAJcGNpX3NldF9kcnZkYXRhKGRwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKaW5kZXggYThmNjBjMy4uMGNjOTcyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKQEAgLTM5LDcgKzM5LDggQEAKIHsKIAkvKiByZXNldCBlbmdpbmUgKi8KIAlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLAotCQlhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpICYgfkdVSV9FTkdJTkVfRU5BQkxFLCBwYXIpOworCQlhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpICYKKwkJfihHVUlfRU5HSU5FX0VOQUJMRSB8IEhXQ1VSU09SX0VOQUJMRSksIHBhcik7CiAJLyogZW5hYmxlIGVuZ2luZSAqLwogCWF0eV9zdF9sZTMyKEdFTl9URVNUX0NOVEwsCiAJCWF0eV9sZF9sZTMyKEdFTl9URVNUX0NOVEwsIHBhcikgfCBHVUlfRU5HSU5FX0VOQUJMRSwgcGFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYwppbmRleCBmYWY5NWRhLi4wNGM3MTA4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMKQEAgLTc3LDkgKzc3LDEzIEBACiAJaWYgKHBhci0+YXNsZWVwKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JLyogSGlkZSBjdXJzb3IgKi8KIAl3YWl0X2Zvcl9maWZvKDEsIHBhcik7Ci0JYXR5X3N0X2xlMzIoR0VOX1RFU1RfQ05UTCwgYXR5X2xkX2xlMzIoR0VOX1RFU1RfQ05UTCwgcGFyKSAmIH5IV0NVUlNPUl9FTkFCTEUsIHBhcik7CisJaWYgKGN1cnNvci0+ZW5hYmxlKQorCQlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLCBhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpCisJCQkgICAgfCBIV0NVUlNPUl9FTkFCTEUsIHBhcik7CisJZWxzZQorCQlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLCBhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpCisJCQkJJiB+SFdDVVJTT1JfRU5BQkxFLCBwYXIpOwogCiAJLyogc2V0IHBvc2l0aW9uICovCiAJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFBPUykgewpAQCAtMTA5LDcgKzExMyw3IEBACiAJCQl5PDw9MTsKIAkJCWg8PD0xOwogCQl9Ci0JCXdhaXRfZm9yX2ZpZm8oNCwgcGFyKTsKKwkJd2FpdF9mb3JfZmlmbygzLCBwYXIpOwogCQlhdHlfc3RfbGUzMihDVVJfT0ZGU0VULCAoaW5mby0+Zml4LnNtZW1fbGVuID4+IDMpICsgKHlvZmYgPDwgMSksIHBhcik7CiAJCWF0eV9zdF9sZTMyKENVUl9IT1JaX1ZFUlRfT0ZGLAogCQkJICAgICgodTMyKSAoNjQgLSBoICsgeW9mZikgPDwgMTYpIHwgeG9mZiwgcGFyKTsKQEAgLTE3NywxMSArMTgxLDYgQEAKIAkgICAgfQogCX0KIAotCWlmIChjdXJzb3ItPmVuYWJsZSkgewotCQl3YWl0X2Zvcl9maWZvKDEsIHBhcik7Ci0JCWF0eV9zdF9sZTMyKEdFTl9URVNUX0NOVEwsIGF0eV9sZF9sZTMyKEdFTl9URVNUX0NOVEwsIHBhcikKLQkJCSAgICB8IEhXQ1VSU09SX0VOQUJMRSwgcGFyKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggYzZkN2NjNy4uOTdhMWYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTg5LDYgKzg5LDkgQEAKIAlCVUdGSVgoIkFjZXIgQXNwaXJlIDIwMTAiLAogCSAgICAgICBQQ0lfVkVORE9SX0lEX0FJLCAweDAwNjEsCiAJICAgICAgIHJhZGVvbl9wbV9vZmYsIHJhZGVvbl9yZWluaXRpYWxpemVfTTEwKSwKKwlCVUdGSVgoIkFjZXIgVHJhdmVsbWF0ZSAyOTBELzI5MkxNaSIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfQUksIDB4MDA1YSwKKwkgICAgICAgcmFkZW9uX3BtX29mZiwgcmFkZW9uX3JlaW5pdGlhbGl6ZV9NMTApLAogCXsgLmlkZW50ID0gTlVMTCB9CiB9OwogCkBAIC0yNTgyLDcgKzI1ODUsNyBAQAogCQkgKiBjYWxsaW5nIHBjaV9zZXRfcG93ZXJfc3RhdGUoKQogCQkgKi8KIAkJcmFkZW9uZmJfd2hhY2tfcG93ZXJfc3RhdGUocmluZm8sIFBDSV9EMik7Ci0JCXBjaV9zZXRfcG93ZXJfc3RhdGUocmluZm8tPnBkZXYsIFBDSV9EMik7CisJCV9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24ocmluZm8tPnBkZXYsIFBDSV9EMik7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHN3aXRjaGluZyB0byBEMCBzdGF0ZS4uLlxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHJpbmZvLT5wZGV2KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLmRkMzdjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC0zNSw2ICszNSw4IEBACiAJCXJldHVybiAwOwogCiAJYmQgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UsIGZiX25vdGlmKTsKKwlpZiAoIWxvY2tfZmJfaW5mbyhldmRhdGEtPmluZm8pKQorCQlyZXR1cm4gLUVOT0RFVjsKIAltdXRleF9sb2NrKCZiZC0+b3BzX2xvY2spOwogCWlmIChiZC0+b3BzKQogCQlpZiAoIWJkLT5vcHMtPmNoZWNrX2ZiIHx8CkBAIC00Nyw2ICs0OSw3IEBACiAJCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAJCX0KIAltdXRleF91bmxvY2soJmJkLT5vcHNfbG9jayk7CisJdW5sb2NrX2ZiX2luZm8oZXZkYXRhLT5pbmZvKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiNjQ0OTQ3Li4wYmIxM2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtNDAsNiArNDAsOCBAQAogCWlmICghbGQtPm9wcykKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWxvY2tfZmJfaW5mbyhldmRhdGEtPmluZm8pKQorCQlyZXR1cm4gLUVOT0RFVjsKIAltdXRleF9sb2NrKCZsZC0+b3BzX2xvY2spOwogCWlmICghbGQtPm9wcy0+Y2hlY2tfZmIgfHwgbGQtPm9wcy0+Y2hlY2tfZmIobGQsIGV2ZGF0YS0+aW5mbykpIHsKIAkJaWYgKGV2ZW50ID09IEZCX0VWRU5UX0JMQU5LKSB7CkBAIC01MSw2ICs1Myw3IEBACiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZsZC0+b3BzX2xvY2spOworCXVubG9ja19mYl9pbmZvKGV2ZGF0YS0+aW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwppbmRleCBhMmFhNmRkLi5kNDJlMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCkBAIC0zNCw4ICszNCw2IEBACiAgKgogICovCiAKLSNkZWZpbmUgQ0lSUlVTRkJfVkVSU0lPTiAiMi4wLXByZTIiCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNzIsMjAgKzcwLDkgQEAKICAqCiAgKi8KIAotLyogZW5hYmxlIGRlYnVnIG91dHB1dD8gKi8KLS8qICNkZWZpbmUgQ0lSUlVTRkJfREVCVUcgMSAqLwotCiAvKiBkaXNhYmxlIHJ1bnRpbWUgYXNzZXJ0aW9ucz8gKi8KIC8qICNkZWZpbmUgQ0lSUlVTRkJfTkRFQlVHICovCiAKLS8qIGRlYnVnIG91dHB1dCAqLwotI2lmZGVmIENJUlJVU0ZCX0RFQlVHCi0jZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQogLyogZGVidWdnaW5nIGFzc2VydGlvbnMgKi8KICNpZm5kZWYgQ0lSUlVTRkJfTkRFQlVHCiAjZGVmaW5lIGFzc2VydChleHByKSBcCkBAIC0xMDgsMTQgKzk1LDE1IEBACiAvKiBib2FyZCB0eXBlcyAqLwogZW51bSBjaXJydXNfYm9hcmQgewogCUJUX05PTkUgPSAwLAotCUJUX1NENjQsCi0JQlRfUElDQ09MTywKLQlCVF9QSUNBU1NPLAotCUJUX1NQRUNUUlVNLAorCUJUX1NENjQsCS8qIEdENTQzNCAqLworCUJUX1BJQ0NPTE8sCS8qIEdENTQyNiAqLworCUJUX1BJQ0FTU08sCS8qIEdENTQyNiBvciBHRDU0MjggKi8KKwlCVF9TUEVDVFJVTSwJLyogR0Q1NDI2IG9yIEdENTQyOCAqLwogCUJUX1BJQ0FTU080LAkvKiBHRDU0NDYgKi8KIAlCVF9BTFBJTkUsCS8qIEdENTQzeC80eCAqLwogCUJUX0dENTQ4MCwKLQlCVF9MQUdVTkEsCS8qIEdENTQ2eCAqLworCUJUX0xBR1VOQSwJLyogR0Q1NDYyLzY0ICovCisJQlRfTEFHVU5BQiwJLyogR0Q1NDY1ICovCiB9OwogCiAvKgpAQCAtMTUwLDE1ICsxMzgsMTcgQEAKIAkJLm1heGNsb2NrCQk9IHsKIAkJCS8qIGd1ZXNzICovCiAJCQkvKiB0aGUgU0Q2NC9QNCBoYXZlIGEgaGlnaGVyIG1heC4gdmlkZW9jbG9jayAqLwotCQkJMTQwMDAwLCAxNDAwMDAsIDE0MDAwMCwgMTQwMDAwLCAxNDAwMDAsCisJCQkxMzUxMDAsIDEzNTEwMCwgODU1MDAsIDg1NTAwLCAwCiAJCX0sCiAJCS5pbml0X3NyMDcJCT0gdHJ1ZSwKIAkJLmluaXRfc3IxZgkJPSB0cnVlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEYwLAogCQkuc3IwN18xYnBwCQk9IDB4RjAsCisJCS5zcjA3XzFicHBfbXV4CQk9IDB4RjYsCiAJCS5zcjA3XzhicHAJCT0gMHhGMSwKLQkJLnNyMWYJCQk9IDB4MjAKKwkJLnNyMDdfOGJwcF9tdXgJCT0gMHhGNywKKwkJLnNyMWYJCQk9IDB4MUUKIAl9LAogCVtCVF9QSUNDT0xPXSA9IHsKIAkJLm5hbWUJCQk9ICJDTCBQaWNjb2xvIiwKQEAgLTIxMCw5ICsyMDAsMTEgQEAKIAkJLmluaXRfc3IwNwkJPSB0cnVlLAogCQkuaW5pdF9zcjFmCQk9IGZhbHNlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCi0JCS5zcjA3CQkJPSAweDIwLAotCQkuc3IwN18xYnBwCQk9IDB4MjAsCi0JCS5zcjA3XzhicHAJCT0gMHgyMSwKKwkJLnNyMDcJCQk9IDB4QTAsCisJCS5zcjA3XzFicHAJCT0gMHhBMCwKKwkJLnNyMDdfMWJwcF9tdXgJCT0gMHhBNiwKKwkJLnNyMDdfOGJwcAkJPSAweEExLAorCQkuc3IwN184YnBwX211eAkJPSAweEE3LAogCQkuc3IxZgkJCT0gMAogCX0sCiAJW0JUX0FMUElORV0gPSB7CkBAIC0yMjUsOCArMjE3LDggQEAKIAkJLmluaXRfc3IxZgkJPSB0cnVlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEEwLAotCQkuc3IwN18xYnBwCQk9IDB4QTEsCi0JCS5zcjA3XzFicHBfbXV4CQk9IDB4QTcsCisJCS5zcjA3XzFicHAJCT0gMHhBMCwKKwkJLnNyMDdfMWJwcF9tdXgJCT0gMHhBNiwKIAkJLnNyMDdfOGJwcAkJPSAweEExLAogCQkuc3IwN184YnBwX211eAkJPSAweEE3LAogCQkuc3IxZgkJCT0gMHgxQwpAQCAtMjQ3LDggKzIzOSwxOCBAQAogCVtCVF9MQUdVTkFdID0gewogCQkubmFtZQkJCT0gIkNMIExhZ3VuYSIsCiAJCS5tYXhjbG9jawkJPSB7Ci0JCQkvKiBndWVzcyAqLwotCQkJMTM1MTAwLCAxMzUxMDAsIDEzNTEwMCwgMTM1MTAwLCAxMzUxMDAsCisJCQkvKiB0YWtlbiBmcm9tIFgxMSBjb2RlICovCisJCQkxNzAwMDAsIDE3MDAwMCwgMTcwMDAwLCAxNzAwMDAsIDEzNTEwMCwKKwkJfSwKKwkJLmluaXRfc3IwNwkJPSBmYWxzZSwKKwkJLmluaXRfc3IxZgkJPSBmYWxzZSwKKwkJLnNjcm5fc3RhcnRfYml0MTkJPSB0cnVlLAorCX0sCisJW0JUX0xBR1VOQUJdID0geworCQkubmFtZQkJCT0gIkNMIExhZ3VuYSBBR1AiLAorCQkubWF4Y2xvY2sJCT0geworCQkJLyogdGFrZW4gZnJvbSBYMTEgY29kZSAqLworCQkJMTcwMDAwLCAyNTAwMDAsIDE3MDAwMCwgMTcwMDAwLCAxMzUxMDAsCiAJCX0sCiAJCS5pbml0X3NyMDcJCT0gZmFsc2UsCiAJCS5pbml0X3NyMWYJCT0gZmFsc2UsCkBAIC0yNjIsOCArMjY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNpcnJ1c2ZiX3BjaV90YWJsZVtdID0gewogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNiwgQlRfQUxQSU5FKSwKLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfOCwgQlRfQUxQSU5FKSwKLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfNCwgQlRfQUxQSU5FKSwKKwlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfOCwgQlRfU0Q2NCksCisJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM0XzQsIEJUX1NENjQpLAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzMCwgQlRfQUxQSU5FKSwgLyogR0QtNTQ0MCBpcyBzYW1lIGlkICovCiAJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQzLCBCVF9BTFBJTkUpLAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0OCwgQlRfQUxQSU5FKSwKQEAgLTI3MSw3ICsyNzMsNyBAQAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ0NiwgQlRfUElDQVNTTzQpLCAvKiBQaWNhc3NvIDQgaXMgNTQ0NiAqLwogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2MiwgQlRfTEFHVU5BKSwgLyogQ0wgTGFndW5hICovCiAJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU181NDY0LCBCVF9MQUdVTkEpLCAvKiBDTCBMYWd1bmEgM0QgKi8KLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NjUsIEJUX0xBR1VOQSksIC8qIENMIExhZ3VuYSAzREEqLworCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NSwgQlRfTEFHVU5BQiksIC8qIENMIExhZ3VuYSAzREEqLwogCXsgMCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjaXJydXNmYl9wY2lfdGFibGUpOwpAQCAtMzI2LDEwICszMjgsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIAotc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgewotCWludCBtdWx0aXBsZXhpbmc7Ci19OwotCiAjaWZkZWYgQ0lSUlVTRkJfREVCVUcKIGVudW0gY2lycnVzZmJfZGJnX3JlZ19jbGFzcyB7CiAJQ1JULApAQCAtMzQwLDEwICszMzgsMTIgQEAKIC8qIGluZm8gYWJvdXQgYm9hcmQgKi8KIHN0cnVjdCBjaXJydXNmYl9pbmZvIHsKIAl1OCBfX2lvbWVtICpyZWdiYXNlOworCXU4IF9faW9tZW0gKmxhZ3VuYV9tbWlvOwogCWVudW0gY2lycnVzX2JvYXJkIGJ0eXBlOwogCXVuc2lnbmVkIGNoYXIgU0ZSOwkvKiBTaGFkb3cgb2Ygc3BlY2lhbCBmdW5jdGlvbiByZWdpc3RlciAqLwogCi0Jc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgY3VycmVudG1vZGU7CisJaW50IG11bHRpcGxleGluZzsKKwlpbnQgZG91YmxlVkNMSzsKIAlpbnQgYmxhbmtfbW9kZTsKIAl1MzIgcHNldWRvX3BhbGV0dGVbMTZdOwogCkBAIC0zNTcsNDMgKzM1Nyw4IEBACiAvKioqKiBCRUdJTiBQUk9UT1RZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyotLS0gSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX2luaXQodm9pZCk7Ci0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBjaXJydXNmYl9zZXR1cChjaGFyICpvcHRpb25zKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpOwotc3RhdGljIGludCBjaXJydXNmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkIGNpcnJ1c2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWdpb24pOwotc3RhdGljIHZvaWQgY2lycnVzZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpOwotc3RhdGljIHZvaWQgY2lycnVzZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwotCi0vKiBmdW5jdGlvbiB0YWJsZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zICovCi1zdGF0aWMgc3RydWN0IGZiX29wcyBjaXJydXNmYl9vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9vcGVuCT0gY2lycnVzZmJfb3BlbiwKLQkuZmJfcmVsZWFzZQk9IGNpcnJ1c2ZiX3JlbGVhc2UsCi0JLmZiX3NldGNvbHJlZwk9IGNpcnJ1c2ZiX3NldGNvbHJlZywKLQkuZmJfY2hlY2tfdmFyCT0gY2lycnVzZmJfY2hlY2tfdmFyLAotCS5mYl9zZXRfcGFyCT0gY2lycnVzZmJfc2V0X3BhciwKLQkuZmJfcGFuX2Rpc3BsYXkgPSBjaXJydXNmYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsJPSBjaXJydXNmYl9ibGFuaywKLQkuZmJfZmlsbHJlY3QJPSBjaXJydXNmYl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEJPSBjaXJydXNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2lycnVzZmJfaW1hZ2VibGl0LAotfTsKIAogLyotLS0gSW50ZXJuYWwgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBpbml0X3ZnYWNoaXAoc3RydWN0IGZiX2luZm8gKmluZm8pOwpAQCAtNDIxLDIyICszODYsMjcgQEAKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX1JlY3RGaWxsKHU4IF9faW9tZW0gKnJlZ2Jhc2UsIGludCBiaXRzX3Blcl9waXhlbCwKIAkJCSAgICAgIHVfc2hvcnQgeCwgdV9zaG9ydCB5LAogCQkJICAgICAgdV9zaG9ydCB3aWR0aCwgdV9zaG9ydCBoZWlnaHQsCi0JCQkgICAgICB1X2NoYXIgY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgpOworCQkJICAgICAgdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsCisJCQkgICAgICB1X3Nob3J0IGxpbmVfbGVuZ3RoLCB1X2NoYXIgYmxpdG1vZGUpOwogCiBzdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBpbnQgKm5vbSwgaW50ICpkZW4sIGludCAqZGl2KTsKIAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9kdW1wKHZvaWQpOwotc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3JlZ19kdW1wKGNhZGRyX3QgcmVnYmFzZSk7Ci1zdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfcmVncyhjYWRkcl90IHJlZ2Jhc2UsCitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcmVnX2R1bXAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNhZGRyX3QgcmVnYmFzZSk7CitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfcmVncyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY2FkZHJfdCByZWdiYXNlLAogCQkJCSAgICBlbnVtIGNpcnJ1c2ZiX2RiZ19yZWdfY2xhc3MgcmVnX2NsYXNzLCAuLi4pOwotc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3ByaW50X2J5dGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciB2YWwpOwogI2VuZGlmIC8qIENJUlJVU0ZCX0RFQlVHICovCiAKIC8qKiogRU5EICAgUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiogQkVHSU4gSW50ZXJmYWNlIFVzZWQgYnkgdGhlIFdvcmxkICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGlubGluZSBpbnQgaXNfbGFndW5hKGNvbnN0IHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbykKK3sKKwlyZXR1cm4gY2luZm8tPmJ0eXBlID09IEJUX0xBR1VOQSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfTEFHVU5BQjsKK30KKwogc3RhdGljIGludCBvcGVuY291bnQ7CiAKIC8qLS0tIE9wZW4gL2Rldi9mYnggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ2MCw4NSArNDMwLDk0IEBACiAvKioqKiBCRUdJTiBIYXJkd2FyZSBzcGVjaWZpYyBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ2hlY2sgaWYgdGhlIE1DTEsgaXMgbm90IGEgYmV0dGVyIGNsb2NrIHNvdXJjZSAqLwotc3RhdGljIGludCBjaXJydXNmYl9jaGVja19tY2xrKHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywgbG9uZyBmcmVxKQorc3RhdGljIGludCBjaXJydXNmYl9jaGVja19tY2xrKHN0cnVjdCBmYl9pbmZvICppbmZvLCBsb25nIGZyZXEpCiB7CisJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCWxvbmcgbWNsayA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYpICYgMHgzZjsKIAogCS8qIFJlYWQgTUNMSyB2YWx1ZSAqLwogCW1jbGsgPSAoMTQzMTggKiBtY2xrKSA+PiAzOwotCURQUklOVEsoIlJlYWQgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIlJlYWQgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKIAogCS8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIE1DTEsgaW5zdGVhZCBvZiBWQ0xLLCBhbmQgaWYgc28sIHdoYXQgd2UKIAkgKiBzaG91bGQgZGl2aWRlIGl0IGJ5IHRvIGdldCBWQ0xLCiAJICovCiAKIAlpZiAoYWJzKGZyZXEgLSBtY2xrKSA8IDI1MCkgewotCQlEUFJJTlRLKCJVc2luZyBWQ0xLID0gTUNMS1xuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVXNpbmcgVkNMSyA9IE1DTEtcbiIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgaWYgKGFicyhmcmVxIC0gKG1jbGsgLyAyKSkgPCAyNTApIHsKLQkJRFBSSU5USygiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7CiAJCXJldHVybiAyOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX3BpeGNsb2NrKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWxvbmcgZnJlcTsKKwlsb25nIG1heGNsb2NrOworCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBtYXhjbG9ja2lkeCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKKworCS8qIGNvbnZlcnQgZnJvbSBwcyB0byBrSHogKi8KKwlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOworCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJkZXNpcmVkIHBpeGNsb2NrOiAlbGQga0h6XG4iLCBmcmVxKTsKKworCW1heGNsb2NrID0gY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdLm1heGNsb2NrW21heGNsb2NraWR4XTsKKwljaW5mby0+bXVsdGlwbGV4aW5nID0gMDsKKworCS8qIElmIHRoZSBmcmVxdWVuY3kgaXMgZ3JlYXRlciB0aGFuIHdlIGNhbiBzdXBwb3J0LCB3ZSBtaWdodCBiZSBhYmxlCisJICogdG8gdXNlIG11bHRpcGxleGluZyBmb3IgdGhlIHZpZGVvIG1vZGUgKi8KKwlpZiAoZnJlcSA+IG1heGNsb2NrKSB7CisJCWRldl9lcnIoaW5mby0+ZGV2aWNlLAorCQkJIkZyZXF1ZW5jeSBncmVhdGVyIHRoYW4gbWF4Y2xvY2sgKCVsZCBrSHopXG4iLAorCQkJbWF4Y2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyoKKwkgKiBBZGRpdGlvbmFsIGNvbnN0cmFpbnQ6IDhicHAgdXNlcyBEQUMgY2xvY2sgZG91YmxpbmcgdG8gYWxsb3cgbWF4aW11bQorCSAqIHBpeGVsIGNsb2NrCisJICovCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCkgeworCQlzd2l0Y2ggKGNpbmZvLT5idHlwZSkgeworCQljYXNlIEJUX0FMUElORToKKwkJY2FzZSBCVF9TRDY0OgorCQljYXNlIEJUX1BJQ0FTU080OgorCQkJaWYgKGZyZXEgPiA4NTUwMCkKKwkJCQljaW5mby0+bXVsdGlwbGV4aW5nID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEJUX0dENTQ4MDoKKwkJCWlmIChmcmVxID4gMTM1MTAwKQorCQkJCWNpbmZvLT5tdWx0aXBsZXhpbmcgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSWYgd2UgaGF2ZSBhIDFNQiA1NDM0LCB3ZSBuZWVkIHRvIHB1dCBvdXJzZWx2ZXMgaW4gYSBtb2RlIHdoZXJlCisJICogdGhlIFZDTEsgaXMgZG91YmxlIHRoZSBwaXhlbCBjbG9jay4gKi8KKwljaW5mby0+ZG91YmxlVkNMSyA9IDA7CisJaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9TRDY0ICYmIGluZm8tPmZpeC5zbWVtX2xlbiA8PSBNQl8gJiYKKwkgICAgdmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQljaW5mby0+ZG91YmxlVkNMSyA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2lycnVzZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJaW50IHlyZXM7CiAJLyogbWVtb3J5IHNpemUgaW4gcGl4ZWxzICovCiAJdW5zaWduZWQgcGl4ZWxzID0gaW5mby0+c2NyZWVuX3NpemUgKiA4IC8gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMToKLQkJcGl4ZWxzIC89IDQ7Ci0JCWJyZWFrOwkJLyogOCBwaXhlbCBwZXIgYnl0ZSwgb25seSAxLzR0aCBvZiBtZW0gdXNhYmxlICovCi0JY2FzZSA4OgotCWNhc2UgMTY6Ci0JY2FzZSAzMjoKLQkJYnJlYWs7CQkvKiAxIHBpeGVsID09IDEgYnl0ZSAqLwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQuLi4iCi0JCQkiY29sb3IgZGVwdGggbm90IHN1cHBvcnRlZC5cbiIsCi0JCQl2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCURQUklOVEsoIkVYSVQgLSBFSU5WQUwgZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCi0JCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOwotCS8qIHVzZSBoaWdoZXN0IHBvc3NpYmxlIHZpcnR1YWwgcmVzb2x1dGlvbiAqLwotCWlmICh2YXItPnlyZXNfdmlydHVhbCA9PSAtMSkgewotCQl2YXItPnlyZXNfdmlydHVhbCA9IHBpeGVscyAvIHZhci0+eHJlc192aXJ0dWFsOwotCi0JCXByaW50ayhLRVJOX0lORk8gImNpcnJ1c2ZiOiB2aXJ0dWFsIHJlc29sdXRpb24gc2V0IHRvICIKLQkJCSJtYXhpbXVtIG9mICVkeCVkXG4iLCB2YXItPnhyZXNfdmlydHVhbCwKLQkJCXZhci0+eXJlc192aXJ0dWFsKTsKLQl9Ci0JaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQotCQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKLQotCWlmICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsID4gcGl4ZWxzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQuLi4gIgotCQkgICAgICAidmlydHVhbCByZXNvbHV0aW9uIHRvbyBoaWdoIHRvIGZpdCBpbnRvIHZpZGVvIG1lbW9yeSFcbiIsCi0JCQl2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwsCi0JCQl2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJRFBSSU5USygiRVhJVCAtIEVJTlZBTCBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCi0JaWYgKHZhci0+eG9mZnNldCA8IDApCi0JCXZhci0+eG9mZnNldCA9IDA7Ci0JaWYgKHZhci0+eW9mZnNldCA8IDApCi0JCXZhci0+eW9mZnNldCA9IDA7Ci0KLQkvKiB0cnVuY2F0ZSB4b2Zmc2V0IGFuZCB5b2Zmc2V0IHRvIG1heGltdW0gaWYgdG9vIGhpZ2ggKi8KLQlpZiAodmFyLT54b2Zmc2V0ID4gdmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXMpCi0JCXZhci0+eG9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzIC0gMTsKLQlpZiAodmFyLT55b2Zmc2V0ID4gdmFyLT55cmVzX3ZpcnR1YWwgLSB2YXItPnlyZXMpCi0JCXZhci0+eW9mZnNldCA9IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzIC0gMTsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE6CkBAIC01NTAsNyArNTI5LDcgQEAKIAogCWNhc2UgODoKIAkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKIAkJdmFyLT5ncmVlbiA9IHZhci0+cmVkOwogCQl2YXItPmJsdWUgPSB2YXItPnJlZDsKIAkJYnJlYWs7CkBAIC01NjEsMjAgKzU0MCwyMCBAQAogCQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAtMzsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQgPSA4OwogCQl9IGVsc2UgewotCQkJdmFyLT5yZWQub2Zmc2V0ID0gMTA7CisJCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKIAkJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwogCQl9CiAJCXZhci0+cmVkLmxlbmd0aCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwogCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKIAkJYnJlYWs7CiAKLQljYXNlIDMyOgorCWNhc2UgMjQ6CiAJCWlmIChpc1BSZVApIHsKLQkJCXZhci0+cmVkLm9mZnNldCA9IDg7Ci0JCQl2YXItPmdyZWVuLm9mZnNldCA9IDE2OwotCQkJdmFyLT5ibHVlLm9mZnNldCA9IDI0OworCQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQgPSAxNjsKIAkJfSBlbHNlIHsKIAkJCXZhci0+cmVkLm9mZnNldCA9IDE2OwogCQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwpAQCAtNTg2LDEyICs1NjUsNDUgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlEUFJJTlRLKCJVbnN1cHBvcnRlZCBicHAgc2l6ZTogJWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJCSJVbnN1cHBvcnRlZCBicHAgc2l6ZTogJWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCQlhc3NlcnQoZmFsc2UpOwogCQkvKiBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJYnJlYWs7CiAJfQogCisJaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKwkvKiB1c2UgaGlnaGVzdCBwb3NzaWJsZSB2aXJ0dWFsIHJlc29sdXRpb24gKi8KKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPT0gLTEpIHsKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSBwaXhlbHMgLyB2YXItPnhyZXNfdmlydHVhbDsKKworCQlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsCisJCQkgInZpcnR1YWwgcmVzb2x1dGlvbiBzZXQgdG8gbWF4aW11bSBvZiAlZHglZFxuIiwKKwkJCSB2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwpOworCX0KKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOworCisJaWYgKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT55cmVzX3ZpcnR1YWwgPiBwaXhlbHMpIHsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJtb2RlICVkeCVkeCVkIHJlamVjdGVkLi4uICIKKwkJICAgICAgInZpcnR1YWwgcmVzb2x1dGlvbiB0b28gaGlnaCB0byBmaXQgaW50byB2aWRlbyBtZW1vcnkhXG4iLAorCQkJdmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLAorCQkJdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YXItPnhvZmZzZXQgPCAwKQorCQl2YXItPnhvZmZzZXQgPSAwOworCWlmICh2YXItPnlvZmZzZXQgPCAwKQorCQl2YXItPnlvZmZzZXQgPSAwOworCisJLyogdHJ1bmNhdGUgeG9mZnNldCBhbmQgeW9mZnNldCB0byBtYXhpbXVtIGlmIHRvbyBoaWdoICovCisJaWYgKHZhci0+eG9mZnNldCA+IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzKQorCQl2YXItPnhvZmZzZXQgPSB2YXItPnhyZXNfdmlydHVhbCAtIHZhci0+eHJlcyAtIDE7CisJaWYgKHZhci0+eW9mZnNldCA+IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzKQorCQl2YXItPnlvZmZzZXQgPSB2YXItPnlyZXNfdmlydHVhbCAtIHZhci0+eXJlcyAtIDE7CisKIAl2YXItPnJlZC5tc2JfcmlnaHQgPQogCSAgICB2YXItPmdyZWVuLm1zYl9yaWdodCA9CiAJICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPQpAQCAtNjA2LDk5ICs2MTgsMzEgQEAKIAkJeXJlcyA9ICh5cmVzICsgMSkgLyAyOwogCiAJaWYgKHlyZXMgPj0gMTI4MCkgewotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBFUlJPUjogVmVydGljYWxUb3RhbCA+PSAxMjgwOyAiCisJCWRldl9lcnIoaW5mby0+ZGV2aWNlLCAiRVJST1I6IFZlcnRpY2FsVG90YWwgPj0gMTI4MDsgIgogCQkJInNwZWNpYWwgdHJlYXRtZW50IHJlcXVpcmVkISAoVE9ETylcbiIpOwotCQlEUFJJTlRLKCJFWElUIC0gRUlOVkFMIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGNpcnJ1c2ZiX2NoZWNrX3BpeGNsb2NrKHZhciwgaW5mbykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpc19sYWd1bmEoY2luZm8pKQorCQl2YXItPmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaXJydXNmYl9kZWNvZGVfdmFyKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJCXN0cnVjdCBjaXJydXNmYl9yZWdzICpyZWdzLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZGl2KQogewotCWxvbmcgZnJlcTsKLQlsb25nIG1heGNsb2NrOwotCWludCBtYXhjbG9ja2lkeCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7Ci0KLQlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDE6Ci0JCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsIC8gODsKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMTA7Ci0JCWJyZWFrOwotCi0JY2FzZSA4OgotCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbDsKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQkJYnJlYWs7Ci0KLQljYXNlIDE2OgotCWNhc2UgMzI6Ci0JCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsICogbWF4Y2xvY2tpZHg7Ci0JCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURQUklOVEsoIlVuc3VwcG9ydGVkIGJwcCBzaXplOiAlZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCWFzc2VydChmYWxzZSk7Ci0JCS8qIHNob3VsZCBuZXZlciBvY2N1ciAqLwotCQlicmVhazsKLQl9Ci0KLQlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQotCS8qIGNvbnZlcnQgZnJvbSBwcyB0byBrSHogKi8KLQlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOwotCi0JRFBSSU5USygiZGVzaXJlZCBwaXhjbG9jazogJWxkIGtIelxuIiwgZnJlcSk7Ci0KLQltYXhjbG9jayA9IGNpcnJ1c2ZiX2JvYXJkX2luZm9bY2luZm8tPmJ0eXBlXS5tYXhjbG9ja1ttYXhjbG9ja2lkeF07Ci0JcmVncy0+bXVsdGlwbGV4aW5nID0gMDsKLQotCS8qIElmIHRoZSBmcmVxdWVuY3kgaXMgZ3JlYXRlciB0aGFuIHdlIGNhbiBzdXBwb3J0LCB3ZSBtaWdodCBiZSBhYmxlCi0JICogdG8gdXNlIG11bHRpcGxleGluZyBmb3IgdGhlIHZpZGVvIG1vZGUgKi8KLQlpZiAoZnJlcSA+IG1heGNsb2NrKSB7Ci0JCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7Ci0JCWNhc2UgQlRfQUxQSU5FOgotCQljYXNlIEJUX0dENTQ4MDoKLQkJCXJlZ3MtPm11bHRpcGxleGluZyA9IDE7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogRnJlcXVlbmN5IGdyZWF0ZXIgIgotCQkJCSJ0aGFuIG1heGNsb2NrICglbGQga0h6KVxuIiwgbWF4Y2xvY2spOwotCQkJRFBSSU5USygiRVhJVCAtIHJldHVybiAtRUlOVkFMXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotI2lmIDAKLQkvKiBUT0RPOiBJZiB3ZSBoYXZlIGEgMU1CIDU0MzQsIHdlIG5lZWQgdG8gcHV0IG91cnNlbHZlcyBpbiBhIG1vZGUgd2hlcmUKLQkgKiB0aGUgVkNMSyBpcyBkb3VibGUgdGhlIHBpeGVsIGNsb2NrLiAqLwotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMTY6Ci0JY2FzZSAzMjoKLQkJaWYgKHZhci0+eHJlcyA8PSA4MDApCi0JCQkvKiBYYmggaGFzIHRoaXMgdHlwZSBvZiBjbG9jayBmb3IgMzItYml0ICovCi0JCQlmcmVxIC89IDI7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9zZXRfbWNsa19hc19zb3VyY2UoY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLAotCQkJCQlpbnQgZGl2KQotewogCXVuc2lnbmVkIGNoYXIgb2xkMWYsIG9sZDFlOworCiAJYXNzZXJ0KGNpbmZvICE9IE5VTEwpOwogCW9sZDFmID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRikgJiB+MHg0MDsKIAogCWlmIChkaXYpIHsKLQkJRFBSSU5USygiU2V0ICVzIGFzIHBpeGNsb2NrIHNvdXJjZS5cbiIsCi0JCQkJCShkaXYgPT0gMikgPyAiTUNMSy8yIiA6ICJNQ0xLIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiU2V0ICVzIGFzIHBpeGNsb2NrIHNvdXJjZS5cbiIsCisJCQkoZGl2ID09IDIpID8gIk1DTEsvMiIgOiAiTUNMSyIpOwogCQlvbGQxZiB8PSAweDQwOwogCQlvbGQxZSA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUpICYgfjB4MTsKIAkJaWYgKGRpdiA9PSAyKQpAQCAtNzE4LDEwMSArNjYyLDExOSBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0Jc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgcmVnczsKIAl1OCBfX2lvbWVtICpyZWdiYXNlID0gY2luZm8tPnJlZ2Jhc2U7CiAJdW5zaWduZWQgY2hhciB0bXA7Ci0JaW50IG9mZnNldCA9IDAsIGVycjsKKwlpbnQgcGl0Y2g7CiAJY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2JvYXJkX2luZm9fcmVjICpiaTsKIAlpbnQgaGRpc3BlbmQsIGhzeW5jc3RhcnQsIGhzeW5jZW5kLCBodG90YWw7CiAJaW50IHlyZXMsIHZkaXNwZW5kLCB2c3luY3N0YXJ0LCB2c3luY2VuZCwgdnRvdGFsOwogCWxvbmcgZnJlcTsKIAlpbnQgbm9tLCBkZW4sIGRpdjsKKwl1bnNpZ25lZCBpbnQgY29udHJvbCA9IDAsIGZvcm1hdCA9IDAsIHRocmVzaG9sZCA9IDA7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0JRFBSSU5USygiUmVxdWVzdGVkIG1vZGU6ICVkeCVkeCVkXG4iLAorCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiUmVxdWVzdGVkIG1vZGU6ICVkeCVkeCVkXG4iLAogCSAgICAgICB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JRFBSSU5USygicGl4Y2xvY2s6ICVkXG4iLCB2YXItPnBpeGNsb2NrKTsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgLyA4OworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8xMDsKKwkJYnJlYWs7CisKKwljYXNlIDg6CisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQlicmVhazsKKworCWNhc2UgMTY6CisJY2FzZSAyNDoKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKgorCQkJCQl2YXItPmJpdHNfcGVyX3BpeGVsID4+IDM7CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKwl9CisJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAKIAlpbml0X3ZnYWNoaXAoaW5mbyk7CiAKLQllcnIgPSBjaXJydXNmYl9kZWNvZGVfdmFyKHZhciwgJnJlZ3MsIGluZm8pOwotCWlmIChlcnIpIHsKLQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlEUFJJTlRLKCJtb2RlIGNoYW5nZSBhYm9ydGVkLiAgaW52YWxpZCB2YXIuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJYmkgPSAmY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdOwogCiAJaHN5bmNzdGFydCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luOwogCWhzeW5jZW5kID0gaHN5bmNzdGFydCArIHZhci0+aHN5bmNfbGVuOwotCWh0b3RhbCA9IChoc3luY2VuZCArIHZhci0+bGVmdF9tYXJnaW4pIC8gOCAtIDU7Ci0JaGRpc3BlbmQgPSB2YXItPnhyZXMgLyA4IC0gMTsKLQloc3luY3N0YXJ0ID0gaHN5bmNzdGFydCAvIDggKyAxOwotCWhzeW5jZW5kID0gaHN5bmNlbmQgLyA4ICsgMTsKKwlodG90YWwgPSAoaHN5bmNlbmQgKyB2YXItPmxlZnRfbWFyZ2luKSAvIDg7CisJaGRpc3BlbmQgPSB2YXItPnhyZXMgLyA4OworCWhzeW5jc3RhcnQgPSBoc3luY3N0YXJ0IC8gODsKKwloc3luY2VuZCA9IGhzeW5jZW5kIC8gODsKIAotCXlyZXMgPSB2YXItPnlyZXM7Ci0JdnN5bmNzdGFydCA9IHlyZXMgKyB2YXItPmxvd2VyX21hcmdpbjsKKwl2ZGlzcGVuZCA9IHZhci0+eXJlczsKKwl2c3luY3N0YXJ0ID0gdmRpc3BlbmQgKyB2YXItPmxvd2VyX21hcmdpbjsKIAl2c3luY2VuZCA9IHZzeW5jc3RhcnQgKyB2YXItPnZzeW5jX2xlbjsKIAl2dG90YWwgPSB2c3luY2VuZCArIHZhci0+dXBwZXJfbWFyZ2luOwotCXZkaXNwZW5kID0geXJlcyAtIDE7CiAKIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgewotCQl5cmVzICo9IDI7CisJCXZkaXNwZW5kICo9IDI7CiAJCXZzeW5jc3RhcnQgKj0gMjsKIAkJdnN5bmNlbmQgKj0gMjsKIAkJdnRvdGFsICo9IDI7CiAJfSBlbHNlIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgewotCQl5cmVzID0gKHlyZXMgKyAxKSAvIDI7CisJCXZkaXNwZW5kID0gKHZkaXNwZW5kICsgMSkgLyAyOwogCQl2c3luY3N0YXJ0ID0gKHZzeW5jc3RhcnQgKyAxKSAvIDI7CiAJCXZzeW5jZW5kID0gKHZzeW5jZW5kICsgMSkgLyAyOwogCQl2dG90YWwgPSAodnRvdGFsICsgMSkgLyAyOwogCX0KLQotCXZ0b3RhbCAtPSAyOwotCXZzeW5jc3RhcnQgLT0gMTsKLQl2c3luY2VuZCAtPSAxOwotCisJeXJlcyA9IHZkaXNwZW5kOwogCWlmICh5cmVzID49IDEwMjQpIHsKIAkJdnRvdGFsIC89IDI7CiAJCXZzeW5jc3RhcnQgLz0gMjsKIAkJdnN5bmNlbmQgLz0gMjsKIAkJdmRpc3BlbmQgLz0gMjsKIAl9Ci0JaWYgKHJlZ3MubXVsdGlwbGV4aW5nKSB7CisKKwl2ZGlzcGVuZCAtPSAxOworCXZzeW5jc3RhcnQgLT0gMTsKKwl2c3luY2VuZCAtPSAxOworCXZ0b3RhbCAtPSAyOworCisJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpIHsKIAkJaHRvdGFsIC89IDI7CiAJCWhzeW5jc3RhcnQgLz0gMjsKIAkJaHN5bmNlbmQgLz0gMjsKIAkJaGRpc3BlbmQgLz0gMjsKIAl9CisKKwlodG90YWwgLT0gNTsKKwloZGlzcGVuZCAtPSAxOworCWhzeW5jc3RhcnQgKz0gMTsKKwloc3luY2VuZCArPSAxOworCiAJLyogdW5sb2NrIHJlZ2lzdGVyIFZHQV9DUlRDX0hfVE9UQUwuLkNSVDcgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfRU5ELCAweDIwKTsJLyogcHJldmlvdXNseTogMHgwMCkgKi8KIAogCS8qIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhbGwgcGFyYW1ldGVycyBnZXQgb3V0cHV0IGJlZm9yZSB3cml0aW5nICovCi0JRFBSSU5USygiQ1JUMDogJWRcbiIsIGh0b3RhbCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQwOiAlZFxuIiwgaHRvdGFsKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1RPVEFMLCBodG90YWwpOwogCi0JRFBSSU5USygiQ1JUMTogJWRcbiIsIGhkaXNwZW5kKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDE6ICVkXG4iLCBoZGlzcGVuZCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9ESVNQLCBoZGlzcGVuZCk7CiAKLQlEUFJJTlRLKCJDUlQyOiAlZFxuIiwgdmFyLT54cmVzIC8gOCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQyOiAlZFxuIiwgdmFyLT54cmVzIC8gOCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19TVEFSVCwgdmFyLT54cmVzIC8gOCk7CiAKIAkvKiAgKyAxMjg6IENvbXBhdGlibGUgcmVhZCAqLwotCURQUklOVEsoIkNSVDM6IDEyOCslZFxuIiwgKGh0b3RhbCArIDUpICUgMzIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMzogMTI4KyVkXG4iLCAoaHRvdGFsICsgNSkgJSAzMik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19FTkQsCiAJCSAxMjggKyAoKGh0b3RhbCArIDUpICUgMzIpKTsKIAotCURQUklOVEsoIkNSVDQ6ICVkXG4iLCBoc3luY3N0YXJ0KTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDQ6ICVkXG4iLCBoc3luY3N0YXJ0KTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfU1RBUlQsIGhzeW5jc3RhcnQpOwogCiAJdG1wID0gaHN5bmNlbmQgJSAzMjsKIAlpZiAoKGh0b3RhbCArIDUpICYgMzIpCiAJCXRtcCArPSAxMjg7Ci0JRFBSSU5USygiQ1JUNTogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQ1OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfRU5ELCB0bXApOwogCi0JRFBSSU5USygiQ1JUNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfVE9UQUwsIHZ0b3RhbCAmIDB4ZmYpOwogCiAJdG1wID0gMTY7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzkgKi8KQEAgLTgzMCw3ICs3OTIsNyBAQAogCQl0bXAgfD0gNjQ7CiAJaWYgKHZzeW5jc3RhcnQgJiA1MTIpCiAJCXRtcCB8PSAxMjg7Ci0JRFBSSU5USygiQ1JUNzogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQ3OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19PVkVSRkxPVywgdG1wKTsKIAogCXRtcCA9IDB4NDA7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzggKi8KQEAgLTgzOCwyNSArODAwLDI1IEBACiAJCXRtcCB8PSAweDIwOwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfRE9VQkxFKQogCQl0bXAgfD0gMHg4MDsKLQlEUFJJTlRLKCJDUlQ5OiAlZFxuIiwgdG1wKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDk6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX01BWF9TQ0FOLCB0bXApOwogCi0JRFBSSU5USygiQ1JUMTA6ICVkXG4iLCB2c3luY3N0YXJ0ICYgMHhmZik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxMDogJWRcbiIsIHZzeW5jc3RhcnQgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfU1RBUlQsIHZzeW5jc3RhcnQgJiAweGZmKTsKIAotCURQUklOVEsoIkNSVDExOiA2NCszMislZFxuIiwgdnN5bmNlbmQgJSAxNik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxMTogNjQrMzIrJWRcbiIsIHZzeW5jZW5kICUgMTYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZzeW5jZW5kICUgMTYgKyA2NCArIDMyKTsKIAotCURQUklOVEsoIkNSVDEyOiAlZFxuIiwgdmRpc3BlbmQgJiAweGZmKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDEyOiAlZFxuIiwgdmRpc3BlbmQgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0RJU1BfRU5ELCB2ZGlzcGVuZCAmIDB4ZmYpOwogCi0JRFBSSU5USygiQ1JUMTU6ICVkXG4iLCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMTU6ICVkXG4iLCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfU1RBUlQsICh2ZGlzcGVuZCArIDEpICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMTY6ICVkXG4iLCB2dG90YWwgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX0VORCwgdnRvdGFsICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxODogMHhmZlxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxODogMHhmZlxuIik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTElORV9DT01QQVJFLCAweGZmKTsKIAogCXRtcCA9IDA7CkBAIC04NzEsNDEgKzgzMyw3NSBAQAogCWlmICh2dG90YWwgJiA1MTIpCiAJCXRtcCB8PSAxMjg7CiAKLQlEUFJJTlRLKCJDUlQxYTogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxYTogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUEsIHRtcCk7CiAKIAlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KQorCQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkKKwkJCWZyZXEgKj0gMzsKKwlpZiAoY2luZm8tPm11bHRpcGxleGluZykKKwkJZnJlcSAvPSAyOworCWlmIChjaW5mby0+ZG91YmxlVkNMSykKKwkJZnJlcSAqPSAyOworCiAJYmVzdGNsb2NrKGZyZXEsICZub20sICZkZW4sICZkaXYpOwogCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWQ0xLIGZyZXE6ICVsZCBrSHogIG5vbTogJWQgIGRlbjogJWQgIGRpdjogJWRcbiIsCisJCWZyZXEsIG5vbSwgZGVuLCBkaXYpOworCiAJLyogc2V0IFZDTEswICovCiAJLyogaGFyZHdhcmUgUmVmQ2xvY2s6IDE0LjMxODE4IE1IeiAqLwogCS8qIGZvcm11bGE6IFZDbGsgPSAoT1NDICogTikgLyAoRCAqICgxK1ApKSAqLwogCS8qIEV4YW1wbGU6IFZDbGsgPSAoMTQuMzE4MTggKiA5MSkgLyAoMjMgKiAoMSsxKSkgPSAyOC4zMjUgTUh6ICovCiAKLQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgeworCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FIHx8IGNpbmZvLT5idHlwZSA9PSBCVF9QSUNBU1NPNCB8fAorCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgewogCQkvKiBpZiBmcmVxIGlzIGNsb3NlIHRvIG1jbGsgb3IgbWNsay8yIHNlbGVjdCBtY2xrCiAJCSAqIGFzIGNsb2NrIHNvdXJjZQogCQkgKi8KLQkJaW50IGRpdk1DTEsgPSBjaXJydXNmYl9jaGVja19tY2xrKGNpbmZvLCBmcmVxKTsKLQkJaWYgKGRpdk1DTEspICB7CisJCWludCBkaXZNQ0xLID0gY2lycnVzZmJfY2hlY2tfbWNsayhpbmZvLCBmcmVxKTsKKwkJaWYgKGRpdk1DTEspCiAJCQlub20gPSAwOwotCQkJY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNpbmZvLCBkaXZNQ0xLKTsKKwkJY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGluZm8sIGRpdk1DTEspOworCX0KKwlpZiAoaXNfbGFndW5hKGNpbmZvKSkgeworCQlsb25nIHBjaWZjID0gZmJfcmVhZGwoY2luZm8tPmxhZ3VuYV9tbWlvICsgMHgzZmMpOworCQl1bnNpZ25lZCBjaGFyIHRpbGUgPSBmYl9yZWFkYihjaW5mby0+bGFndW5hX21taW8gKyAweDQwNyk7CisJCXVuc2lnbmVkIHNob3J0IHRpbGVfY29udHJvbDsKKworCQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0xBR1VOQUIpIHsKKwkJCXRpbGVfY29udHJvbCA9IGZiX3JlYWR3KGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4MmM0KTsKKwkJCXRpbGVfY29udHJvbCAmPSB+MHg4MDsKKwkJCWZiX3dyaXRldyh0aWxlX2NvbnRyb2wsIGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4MmM0KTsKIAkJfQorCisJCWZiX3dyaXRlbChwY2lmYyB8IDB4MTAwMDAwMDBsLCBjaW5mby0+bGFndW5hX21taW8gKyAweDNmYyk7CisJCWZiX3dyaXRlYih0aWxlICYgMHgzZiwgY2luZm8tPmxhZ3VuYV9tbWlvICsgMHg0MDcpOworCQljb250cm9sID0gZmJfcmVhZHcoY2luZm8tPmxhZ3VuYV9tbWlvICsgMHg0MDIpOworCQl0aHJlc2hvbGQgPSBmYl9yZWFkdyhjaW5mby0+bGFndW5hX21taW8gKyAweGVhKTsKKwkJY29udHJvbCAmPSB+MHg2ODAwOworCQlmb3JtYXQgPSAwOworCQl0aHJlc2hvbGQgJj0gMHhmZmMwICYgMHgzZmJmOwogCX0KIAlpZiAobm9tKSB7Ci0JCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJCLCBub20pOwogCQl0bXAgPSBkZW4gPDwgMTsKIAkJaWYgKGRpdiAhPSAwKQogCQkJdG1wIHw9IDE7Ci0KIAkJLyogNiBiaXQgZGVub207IE9OTFkgNTQzNCEhISAoYnVnZ2VkIG1lIDEwIGRheXMpICovCiAJCWlmICgoY2luZm8tPmJ0eXBlID09IEJUX1NENjQpIHx8CiAJCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgfHwKIAkJICAgIChjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKSkKIAkJCXRtcCB8PSAweDgwOwogCi0JCURQUklOVEsoIkNMX1NFUVIxQjogJWxkXG4iLCAobG9uZykgdG1wKTsKLQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFCLCB0bXApOworCQkvKiBMYWd1bmEgY2hpcHNldCBoYXMgcmV2ZXJzZWQgY2xvY2sgcmVnaXN0ZXJzICovCisJCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSRSwgdG1wKTsKKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRSwgbm9tKTsKKwkJfSBlbHNlIHsKKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJFLCBub20pOworCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFFLCB0bXApOworCQl9CiAJfQogCiAJaWYgKHlyZXMgPj0gMTAyNCkKQEAgLTkxNiw5ICs5MTIsNiBAQAogCQkgKiBhZGRyZXNzIHdyYXAsIG5vIGNvbXBhdC4gKi8KIAkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTU9ERSwgMHhjMyk7CiAKLS8qIEhBRUg/CXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIDB4MjApOwotICogcHJldmlvdXNseTogMHgwMCAgdW5sb2NrIFZHQV9DUlRDX0hfVE9UQUwuLkNSVDcgKi8KLQogCS8qIGRvbid0IGtub3cgaWYgaXQgd291bGQgaHVydCB0byBhbHNvIHByb2dyYW0gdGhpcyBpZiBubyBpbnRlcmxhY2VkICovCiAJLyogbW9kZSBpcyB1c2VkLCBidXQgSSBmZWVsIGJldHRlciB0aGlzIHdheS4uIDotKSAqLwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKQEAgLTkyNiwxOSArOTE5LDE1IEBACiAJZWxzZQogCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19SRUdTLCAweDAwKTsJLyogaW50ZXJsYWNlIGNvbnRyb2wgKi8KIAotCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfQ0hBUkFDVEVSX01BUCwgMCk7Ci0KLQkvKiBhZGp1c3QgaG9yaXpvbnRhbC92ZXJ0aWNhbCBzeW5jIHR5cGUgKGxvdy9oaWdoKSAqLworCS8qIGFkanVzdCBob3Jpem9udGFsL3ZlcnRpY2FsIHN5bmMgdHlwZSAobG93L2hpZ2gpLCB1c2UgVkNMSzMgKi8KIAkvKiBlbmFibGUgZGlzcGxheSBtZW1vcnkgJiBDUlRDIEkvTyBhZGRyZXNzIGZvciBjb2xvciBtb2RlICovCi0JdG1wID0gMHgwMzsKKwl0bXAgPSAweDAzIHwgMHhjOwogCWlmICh2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKIAkJdG1wIHw9IDB4NDA7CiAJaWYgKHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKIAkJdG1wIHw9IDB4ODA7CiAJV0dlbihjaW5mbywgVkdBX01JU19XLCB0bXApOwogCi0JLyogU2NyZWVuIEEgUHJlc2V0IFJvdy1TY2FuIHJlZ2lzdGVyICovCi0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfUFJFU0VUX1JPVywgMCk7CiAJLyogdGV4dCBjdXJzb3Igb24gYW5kIHN0YXJ0IGxpbmUgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19DVVJTT1JfU1RBUlQsIDApOwogCS8qIHRleHQgY3Vyc29yIGVuZCBsaW5lICovCkBAIC05NTIsNyArOTQxLDcgQEAKIAogCS8qIHByb2dyYW1taW5nIGZvciBkaWZmZXJlbnQgY29sb3IgZGVwdGhzICovCiAJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMSkgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAxIGJpdCBkZWVwIGRpc3BsYXlcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgInByZXBhcmluZyBmb3IgMSBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9NT0RFLCAwKTsJLyogbW9kZSByZWdpc3RlciAqLwogCiAJCS8qIFNSMDcgKi8KQEAgLTk2NCw2OCArOTUzLDUzIEBACiAJCWNhc2UgQlRfUElDQVNTTzQ6CiAJCWNhc2UgQlRfQUxQSU5FOgogCQljYXNlIEJUX0dENTQ4MDoKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCi0JCQkJICByZWdzLm11bHRpcGxleGluZyA/CisJCQkJIGNpbmZvLT5tdWx0aXBsZXhpbmcgPwogCQkJCQliaS0+c3IwN18xYnBwX211eCA6IGJpLT5zcjA3XzFicHApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9MQUdVTkE6Ci0JCQlEUFJJTlRLKCIgKGZvciBHRDU0NngpXG4iKTsKKwkJY2FzZSBCVF9MQUdVTkFCOgogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCiAJCQkJdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUjcpICYgfjB4MDEpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNpcnJ1c2ZiOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZSAqLwogCQlzd2l0Y2ggKGNpbmZvLT5idHlwZSkgewotCQljYXNlIEJUX1NENjQ6Ci0JCQkvKiBzZXR0aW5nIHRoZSBTRVFSRiBvbiBTRDY0IGlzIG5vdCBuZWNlc3NhcnkKLQkJCSAqIChvbmx5IGR1cmluZyBpbml0KQotCQkJICovCi0JCQlEUFJJTlRLKCIoZm9yIFNENjQpXG4iKTsKLQkJCS8qICBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFhKTsKLQkJCWJyZWFrOwogCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKLQkJCURQUklOVEsoIihmb3IgUGljY29sby9TcGVjdHJ1bSlcbiIpOwotCQkJLyogIyMjIHVlYmVyYWxsIDB4MjI/ICovCi0JCQkvKiAjI3ZvcmhlciAxYyBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDIyKTsKIAkJCS8qIGV2dGwgZDAgYmVpIDEgYml0PyBhdm9pZCBGSUZPIHVuZGVycnVucy4uPyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9QSUNBU1NPOgotCQkJRFBSSU5USygiKGZvciBQaWNhc3NvKVxuIik7Ci0JCQkvKiAjI3ZvcmhlciAyMiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDIyKTsKIAkJCS8qICMjIHZvcmhlciBkMCBhdm9pZCBGSUZPIHVuZGVycnVucy4uPyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4ZDApOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgogCQljYXNlIEJUX0FMUElORToKIAkJY2FzZSBCVF9HRDU0ODA6CiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NHh4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCS8qIGRvIG5vdGhpbmcgKi8KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaXJydXNmYjogdW5rbm93biBCb2FyZFxuIik7CisJCQlkZXZfd2FybihpbmZvLT5kZXZpY2UsICJ1bmtub3duIEJvYXJkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGZvciBmaXJzdCBwbGFuZSAqLwogCQlXR2VuKGNpbmZvLCBWR0FfUEVMX01TSywgMHgwMSk7Ci0JCWlmIChyZWdzLm11bHRpcGxleGluZykKKwkJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpCiAJCQkvKiBoaWRkZW4gZGFjIHJlZzogMTI4MHgxMDI0ICovCiAJCQlXSERSKGNpbmZvLCAweDRhKTsKIAkJZWxzZQpAQCAtMTAzNSw3ICsxMDA5LDYgQEAKIAkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwNik7CiAJCS8qIHBsYW5lIG1hc2s6IG9ubHkgd3JpdGUgdG8gZmlyc3QgcGxhbmUgKi8KIAkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHgwMSk7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gMTY7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA0NSw3ICsxMDE4LDcgQEAKIAkgKi8KIAogCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCkgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciA4IGJpdCBkZWVwIGRpc3BsYXlcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgInByZXBhcmluZyBmb3IgOCBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKIAkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0NPTE86CkBAIC0xMDU0LDM0ICsxMDI3LDI3IEBACiAJCWNhc2UgQlRfUElDQVNTTzQ6CiAJCWNhc2UgQlRfQUxQSU5FOgogCQljYXNlIEJUX0dENTQ4MDoKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCi0JCQkJICByZWdzLm11bHRpcGxleGluZyA/CisJCQkJICBjaW5mby0+bXVsdGlwbGV4aW5nID8KIAkJCQkJYmktPnNyMDdfOGJwcF9tdXggOiBiaS0+c3IwN184YnBwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSB8IDB4MDEpOworCQkJdGhyZXNob2xkIHw9IDB4MTA7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lycnVzZmI6IHVua25vd24gQm9hcmRcbiIpOworCQkJZGV2X3dhcm4oaW5mby0+ZGV2aWNlLCAidW5rbm93biBCb2FyZFxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7Ci0JCWNhc2UgQlRfU0Q2NDoKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWQpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBCVF9QSUNDT0xPOgogCQljYXNlIEJUX1BJQ0FTU086CiAJCWNhc2UgQlRfU1BFQ1RSVU06Ci0JCQkvKiAjIyMgdm9yaGVyIDFjIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJLyogRmFzdCBQYWdlLU1vZGUgd3JpdGVzICovCiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSRiwgMHhiMCk7CiAJCQlicmVhazsKQEAgLTEwOTEsNDAgKzEwNTcsMjcgQEAKIAkJCS8qICMjIyBJTkNPTVBMRVRFISEgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGI4KTsKICNlbmRpZgotLyoJICAJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgxYyk7ICovCi0JCQlicmVhazsKLQogCQljYXNlIEJUX0FMUElORToKLQkJCURQUklOVEsoIiAoZm9yIEdENTQzeClcbiIpOwotCQkJLyogV2UgYWxyZWFkeSBzZXQgU1JGIGFuZCBTUjFGICovCi0JCQlicmVhazsKLQorCQljYXNlIEJUX1NENjQ6CiAJCWNhc2UgQlRfR0Q1NDgwOgogCQljYXNlIEJUX0xBR1VOQToKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOworCQljYXNlIEJUX0xBR1VOQUI6CiAJCQkvKiBkbyBub3RoaW5nICovCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lycnVzZmI6IHVua25vd24gQm9hcmRcbiIpOworCQkJZGV2X3dhcm4oaW5mby0+ZGV2aWNlLCAidW5rbm93biBib2FyZFxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIG1vZGUgcmVnaXN0ZXI6IDI1NiBjb2xvciBtb2RlICovCiAJCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfTU9ERSwgNjQpOwotCQkvKiBwaXhlbCBtYXNrOiBwYXNzLXRocm91Z2ggYWxsIHBsYW5lcyAqLwotCQlXR2VuKGNpbmZvLCBWR0FfUEVMX01TSywgMHhmZik7Ci0JCWlmIChyZWdzLm11bHRpcGxleGluZykKKwkJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpCiAJCQkvKiBoaWRkZW4gZGFjIHJlZzogMTI4MHgxMDI0ICovCiAJCQlXSERSKGNpbmZvLCAweDRhKTsKIAkJZWxzZQogCQkJLyogaGlkZGVuIGRhYzogbm90aGluZyAqLwogCQkJV0hEUihjaW5mbywgMCk7Ci0JCS8qIG1lbW9yeSBtb2RlOiBjaGFpbjQsIGV4dC4gbWVtb3J5ICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUsIDB4MGEpOwotCQkvKiBwbGFuZSBtYXNrOiBlbmFibGUgd3JpdGluZyB0byBhbGwgNCBwbGFuZXMgKi8KLQkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gODsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTM0LDE0NyArMTA4NywxMTAgQEAKIAkgKi8KIAogCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKLQkJRFBSSU5USygiY2lycnVzZmI6IHByZXBhcmluZyBmb3IgMTYgYml0IGRlZXAgZGlzcGxheVxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAicHJlcGFyaW5nIGZvciAxNiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKLQkJY2FzZSBCVF9TRDY0OgotCQkJLyogRXh0ZW5kZWQgU2VxdWVuY2VyIE1vZGU6IDI1NmMgY29sLiBtb2RlICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhmNyk7Ci0JCQkvKiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweDg3KTsKIAkJCS8qIEZhc3QgUGFnZS1Nb2RlIHdyaXRlcyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwotCQkJLyogTUNMSyBzZWxlY3QgKi8KLQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgyMik7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX1BJQ0FTU086CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgyNyk7CiAJCQkvKiBGYXN0IFBhZ2UtTW9kZSB3cml0ZXMgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGIwKTsKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4MjcpOwotLyoJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWMpOyAgKi8KLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfQUxQSU5FOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhNyk7CisJCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZTogMjU2YyBjb2wuIG1vZGUgKi8KKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAorCQkJCQljaW5mby0+ZG91YmxlVkNMSyA/IDB4YTMgOiAweGE3KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDgwKVxuIik7CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxNyk7CiAJCQkvKiBXZSBhbHJlYWR5IHNldCBTUkYgYW5kIFNSMUYgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSAmIH4weDAxKTsKKwkJCWNvbnRyb2wgfD0gMHgyMDAwOworCQkJZm9ybWF0IHw9IDB4MTQwMDsKKwkJCXRocmVzaG9sZCB8PSAweDEwOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJUlJVU0ZCOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBtb2RlIHJlZ2lzdGVyOiAyNTYgY29sb3IgbW9kZSAqLwogCQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX01PREUsIDY0KTsKLQkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGFsbCBwbGFuZXMgKi8KLQkJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwogI2lmZGVmIENPTkZJR19QQ0kKLQkJV0hEUihjaW5mbywgMHhjMCk7CS8qIENvcHkgWGJoICovCisJCVdIRFIoY2luZm8sIGNpbmZvLT5kb3VibGVWQ0xLID8gMHhlMSA6IDB4YzEpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWk9SUk8pCiAJCS8qIEZJWE1FOiBDT05GSUdfUENJIGFuZCBDT05GSUdfWk9SUk8gbWF5IGJlIGRlZmluZWQgYm90aCAqLwogCQlXSERSKGNpbmZvLCAweGEwKTsJLyogaGlkZGVuIGRhYyByZWc6IG5vdGhpbmcgc3BlY2lhbCAqLwogI2VuZGlmCi0JCS8qIG1lbW9yeSBtb2RlOiBjaGFpbjQsIGV4dC4gbWVtb3J5ICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUsIDB4MGEpOwotCQkvKiBwbGFuZSBtYXNrOiBlbmFibGUgd3JpdGluZyB0byBhbGwgNCBwbGFuZXMgKi8KLQkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gNDsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICoKLQkgKiAzMiBicHAKKwkgKiAyNCBicHAKIAkgKgogCSAqLwogCi0JZWxzZSBpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAzMiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKKwllbHNlIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KSB7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAicHJlcGFyaW5nIGZvciAyNCBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKLQkJY2FzZSBCVF9TRDY0OgotCQkJLyogRXh0ZW5kZWQgU2VxdWVuY2VyIE1vZGU6IDI1NmMgY29sLiBtb2RlICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhmOSk7Ci0JCQkvKiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweDg1KTsKIAkJCS8qIEZhc3QgUGFnZS1Nb2RlIHdyaXRlcyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwotCQkJLyogTUNMSyBzZWxlY3QgKi8KLQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgyMik7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX1BJQ0FTU086CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgyNSk7CiAJCQkvKiBGYXN0IFBhZ2UtTW9kZSB3cml0ZXMgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGIwKTsKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4MjUpOwotLyoJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWMpOyAgKi8KLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfQUxQSU5FOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhOSk7CisJCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZTogMjU2YyBjb2wuIG1vZGUgKi8KKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGE1KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDgwKVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxOSk7CisJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxNSk7CiAJCQkvKiBXZSBhbHJlYWR5IHNldCBTUkYgYW5kIFNSMUYgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSAmIH4weDAxKTsKKwkJCWNvbnRyb2wgfD0gMHg0MDAwOworCQkJZm9ybWF0IHw9IDB4MjQwMDsKKwkJCXRocmVzaG9sZCB8PSAweDIwOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNpcnJ1c2ZiOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBtb2RlIHJlZ2lzdGVyOiAyNTYgY29sb3IgbW9kZSAqLwogCQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX01PREUsIDY0KTsKLQkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGFsbCBwbGFuZXMgKi8KLQkJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwogCQkvKiBoaWRkZW4gZGFjIHJlZzogOC04LTggbW9kZSAoMjQgb3IgMzIpICovCiAJCVdIRFIoY2luZm8sIDB4YzUpOwotCQkvKiBtZW1vcnkgbW9kZTogY2hhaW40LCBleHQuIG1lbW9yeSAqLwotCQl2Z2Ffd3NlcShyZWdiYXNlLCBWR0FfU0VRX01FTU9SWV9NT0RFLCAweDBhKTsKLQkJLyogcGxhbmUgbWFzazogZW5hYmxlIHdyaXRpbmcgdG8gYWxsIDQgcGxhbmVzICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfUExBTkVfV1JJVEUsIDB4ZmYpOwotCQlvZmZzZXQgPSB2YXItPnhyZXNfdmlydHVhbCAvIDQ7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI4NCw2NyArMTIwMCw1NSBAQAogCSAqLwogCiAJZWxzZQotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBXaGF0J3MgdGhpcz8/ICIKLQkJCSIgcmVxdWVzdGVkIGNvbG9yIGRlcHRoID09ICVkLlxuIiwKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsCisJCQkiV2hhdCdzIHRoaXM/IHJlcXVlc3RlZCBjb2xvciBkZXB0aCA9PSAlZC5cbiIsCiAJCQl2YXItPmJpdHNfcGVyX3BpeGVsKTsKIAotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX09GRlNFVCwgb2Zmc2V0ICYgMHhmZik7CisJcGl0Y2ggPSBpbmZvLT5maXgubGluZV9sZW5ndGggPj4gMzsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19PRkZTRVQsIHBpdGNoICYgMHhmZik7CiAJdG1wID0gMHgyMjsKLQlpZiAob2Zmc2V0ICYgMHgxMDApCisJaWYgKHBpdGNoICYgMHgxMDApCiAJCXRtcCB8PSAweDEwOwkvKiBvZmZzZXQgb3ZlcmZsb3cgYml0ICovCiAKIAkvKiBzY3JlZW4gc3RhcnQgYWRkciAjMTYtMTgsIGZhc3RwYWdlbW9kZSBjeWNsZXMgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBDTF9DUlQxQiwgdG1wKTsKIAotCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCB8fAotCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfUElDQVNTTzQgfHwKLQkgICAgY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fAotCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKQotCQkvKiBzY3JlZW4gc3RhcnQgYWRkcmVzcyBiaXQgMTkgKi8KLQkJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUQsIDB4MDApOworCS8qIHNjcmVlbiBzdGFydCBhZGRyZXNzIGJpdCAxOSAqLworCWlmIChjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV0uc2Nybl9zdGFydF9iaXQxOSkKKwkJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUQsIChwaXRjaCA+PiA5KSAmIDEpOwogCi0JLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gaGlnaCAqLwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0NVUlNPUl9ISSwgMCk7Ci0JLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gbG93ICovCi0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX0xPLCAwKTsKLQkvKiB1bmRlcmxpbmUgcm93IHNjYW5saW5lID0gYXQgdmVyeSBib3R0b20gKi8KLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19VTkRFUkxJTkUsIDApOworCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCXRtcCA9IDA7CisJCWlmICgoaHRvdGFsICsgNSkgJiAyNTYpCisJCQl0bXAgfD0gMTI4OworCQlpZiAoaGRpc3BlbmQgJiAyNTYpCisJCQl0bXAgfD0gNjQ7CisJCWlmIChoc3luY3N0YXJ0ICYgMjU2KQorCQkJdG1wIHw9IDQ4OworCQlpZiAodnRvdGFsICYgMTAyNCkKKwkJCXRtcCB8PSA4OworCQlpZiAodmRpc3BlbmQgJiAxMDI0KQorCQkJdG1wIHw9IDQ7CisJCWlmICh2c3luY3N0YXJ0ICYgMTAyNCkKKwkJCXRtcCB8PSAzOwogCi0JLyogY29udHJvbGxlciBtb2RlICovCi0JdmdhX3dhdHRyKHJlZ2Jhc2UsIFZHQV9BVENfTU9ERSwgMSk7Ci0JLyogb3ZlcnNjYW4gKGJvcmRlcikgY29sb3IgKi8KLQl2Z2Ffd2F0dHIocmVnYmFzZSwgVkdBX0FUQ19PVkVSU0NBTiwgMCk7Ci0JLyogY29sb3IgcGxhbmUgZW5hYmxlICovCi0JdmdhX3dhdHRyKHJlZ2Jhc2UsIFZHQV9BVENfUExBTkVfRU5BQkxFLCAxNSk7CisJCXZnYV93Y3J0KHJlZ2Jhc2UsIENMX0NSVDFFLCB0bXApOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDFlOiAlZFxuIiwgdG1wKTsKKwl9CisKIAkvKiBwaXhlbCBwYW5uaW5nICovCiAJdmdhX3dhdHRyKHJlZ2Jhc2UsIENMX0FSMzMsIDApOwotCS8qIGNvbG9yIHNlbGVjdCAqLwotCXZnYV93YXR0cihyZWdiYXNlLCBWR0FfQVRDX0NPTE9SX1BBR0UsIDApOwogCiAJLyogWyBFR1M6IFNldE9mZnNldCgpOyBdICovCiAJLyogRnJvbSBTZXRPZmZzZXQoKTogVHVybiBvbiBWaWRlb0VuYWJsZSBiaXQgaW4gQXR0cmlidXRlIGNvbnRyb2xsZXIgKi8KIAlBdHRyT24oY2luZm8pOwogCi0JLyogc2V0L3Jlc2V0IHJlZ2lzdGVyICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9WQUxVRSwgMCk7Ci0JLyogc2V0L3Jlc2V0IGVuYWJsZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfU1JfRU5BQkxFLCAwKTsKLQkvKiBjb2xvciBjb21wYXJlICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9DT01QQVJFX1ZBTFVFLCAwKTsKLQkvKiBkYXRhIHJvdGF0ZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfREFUQV9ST1RBVEUsIDApOwotCS8qIHJlYWQgbWFwIHNlbGVjdCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfUExBTkVfUkVBRCwgMCk7Ci0JLyogbWlzY2VsbGFuZW91cyByZWdpc3RlciAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfTUlTQywgMSk7Ci0JLyogY29sb3IgZG9uJ3QgY2FyZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfQ09NUEFSRV9NQVNLLCAxNSk7Ci0JLyogYml0IG1hc2sgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX0JJVF9NQVNLLCAyNTUpOwotCi0JLyogZ3JhcGhpY3MgY3Vyc29yIGF0dHJpYnV0ZXM6IG5vdGhpbmcgc3BlY2lhbCAqLwotCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxMiwgMHgwKTsKLQorCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCS8qIG5vIHRpbGVzICovCisJCWZiX3dyaXRldyhjb250cm9sIHwgMHgxMDAwLCBjaW5mby0+bGFndW5hX21taW8gKyAweDQwMik7CisJCWZiX3dyaXRldyhmb3JtYXQsIGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4YzApOworCQlmYl93cml0ZXcodGhyZXNob2xkLCBjaW5mby0+bGFndW5hX21taW8gKyAweGVhKTsKKwl9CiAJLyogZmluYWxseSwgdHVybiBvbiBldmVyeXRoaW5nIC0gdHVybiBvZmYgIkZ1bGxCYW5kd2lkdGgiIGJpdCAqLwogCS8qIGFsc28sIHNldCAiRG90Q2xvY2slMiIgYml0IHdoZXJlIHJlcXVlc3RlZCAqLwogCXRtcCA9IDB4MDE7CkBAIC0xMzU1LDE4ICsxMjU5LDEyIEBACiAqLwogCiAJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCB0bXApOwotCURQUklOVEsoIkNMX1NFUVIxOiAlZFxuIiwgdG1wKTsKLQotCWNpbmZvLT5jdXJyZW50bW9kZSA9IHJlZ3M7Ci0KLQkvKiBwYW4gdG8gcmVxdWVzdGVkIG9mZnNldCAqLwotCWNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHZhciwgaW5mbyk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDTF9TRVFSMTogJWRcbiIsIHRtcCk7CiAKICNpZmRlZiBDSVJSVVNGQl9ERUJVRwotCWNpcnJ1c2ZiX2R1bXAoKTsKKwljaXJydXNmYl9kYmdfcmVnX2R1bXAoaW5mbywgTlVMTCk7CiAjZW5kaWYKIAotCURQUklOVEsoIkVYSVRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDE4LDI3ICsxMzE2LDE5IEBACiBzdGF0aWMgaW50IGNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWludCB4b2Zmc2V0ID0gMDsKLQlpbnQgeW9mZnNldCA9IDA7CisJaW50IHhvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwotCXVuc2lnbmVkIGNoYXIgdG1wID0gMCwgdG1wMiA9IDAsIHhwaXg7CisJdW5zaWduZWQgY2hhciB0bXAsIHhwaXg7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCURQUklOVEsoInZpcnR1YWwgb2Zmc2V0OiAoJWQsJWQpXG4iLCB2YXItPnhvZmZzZXQsIHZhci0+eW9mZnNldCk7Ci0KIAkvKiBubyByYW5nZSBjaGVja3MgZm9yIHhvZmZzZXQgYW5kIHlvZmZzZXQsICAgKi8KIAkvKiBhcyBmYl9wYW5fZGlzcGxheSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgKi8KIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwotCWluZm8tPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwotCiAJeG9mZnNldCA9IHZhci0+eG9mZnNldCAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7Ci0JeW9mZnNldCA9IHZhci0+eW9mZnNldDsKIAotCWJhc2UgPSB5b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgeG9mZnNldDsKKwliYXNlID0gdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgeG9mZnNldDsKIAogCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMSkgewogCQkvKiBiYXNlIGlzIGFscmVhZHkgY29ycmVjdCAqLwpAQCAtMTQ0OCwxNCArMTMzOCwxNSBAQAogCQl4cGl4ID0gKHVuc2lnbmVkIGNoYXIpICgoeG9mZnNldCAlIDQpICogMik7CiAJfQogCi0JY2lycnVzZmJfV2FpdEJMVChjaW5mby0+cmVnYmFzZSk7IC8qIG1ha2Ugc3VyZSBhbGwgdGhlIEJMVCdzIGFyZSBkb25lICovCisJaWYgKCFpc19sYWd1bmEoY2luZm8pKQorCQljaXJydXNmYl9XYWl0QkxUKGNpbmZvLT5yZWdiYXNlKTsKIAogCS8qIGxvd2VyIDggKyA4IGJpdHMgb2Ygc2NyZWVuIHN0YXJ0IGFkZHJlc3MgKi8KLQl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfTE8sCi0JCSAodW5zaWduZWQgY2hhcikgKGJhc2UgJiAweGZmKSk7Ci0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX1NUQVJUX0hJLAotCQkgKHVuc2lnbmVkIGNoYXIpIChiYXNlID4+IDgpKTsKKwl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfTE8sIGJhc2UgJiAweGZmKTsKKwl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfSEksIChiYXNlID4+IDgpICYgMHhmZik7CiAKKwkvKiAweGYyIGlzICUxMTExMDAxMCwgZXhjbHVkZSB0bXAgYml0cyAqLworCXRtcCA9IHZnYV9yY3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQxQikgJiAweGYyOwogCS8qIGNvbnN0cnVjdCBiaXRzIDE2LCAxNyBhbmQgMTggb2Ygc2NyZWVuIHN0YXJ0IGFkZHJlc3MgKi8KIAlpZiAoYmFzZSAmIDB4MTAwMDApCiAJCXRtcCB8PSAweDAxOwpAQCAtMTQ2NCwxMyArMTM1NSwxNyBAQAogCWlmIChiYXNlICYgMHg0MDAwMCkKIAkJdG1wIHw9IDB4MDg7CiAKLQkvKiAweGYyIGlzICUxMTExMDAxMCwgZXhjbHVkZSB0bXAgYml0cyAqLwotCXRtcDIgPSAodmdhX3JjcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCKSAmIDB4ZjIpIHwgdG1wOwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQxQiwgdG1wMik7CisJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCLCB0bXApOwogCiAJLyogY29uc3RydWN0IGJpdCAxOSBvZiBzY3JlZW4gc3RhcnQgYWRkcmVzcyAqLwotCWlmIChjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV0uc2Nybl9zdGFydF9iaXQxOSkKLQkJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFELCAoYmFzZSA+PiAxMikgJiAweDgwKTsKKwlpZiAoY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdLnNjcm5fc3RhcnRfYml0MTkpIHsKKwkJdG1wID0gdmdhX3JjcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFEKTsKKwkJaWYgKGlzX2xhZ3VuYShjaW5mbykpCisJCQl0bXAgPSAodG1wICYgfjB4MTgpIHwgKChiYXNlID4+IDE2KSAmIDB4MTgpOworCQllbHNlCisJCQl0bXAgPSAodG1wICYgfjB4ODApIHwgKChiYXNlID4+IDEyKSAmIDB4ODApOworCQl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgQ0xfQ1JUMUQsIHRtcCk7CisJfQogCiAJLyogd3JpdGUgcGl4ZWwgcGFubmluZyB2YWx1ZSB0byBBUjMzOyB0aGlzIGRvZXMgbm90IHF1aXRlIHdvcmsgaW4gOGJwcAogCSAqCkBAIC0xNDc5LDkgKzEzNzQsNiBAQAogCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMSkKIAkJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBDTF9BUjMzLCB4cGl4KTsKIAotCWNpcnJ1c2ZiX1dhaXRCTFQoY2luZm8tPnJlZ2Jhc2UpOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MDIsNTcgKzEzOTQsNTQgQEAKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAJaW50IGN1cnJlbnRfbW9kZSA9IGNpbmZvLT5ibGFua19tb2RlOwogCi0JRFBSSU5USygiRU5URVIsIGJsYW5rIG1vZGUgPSAlZFxuIiwgYmxhbmtfbW9kZSk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJFTlRFUiwgYmxhbmsgbW9kZSA9ICVkXG4iLCBibGFua19tb2RlKTsKIAogCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fAogCSAgICBjdXJyZW50X21vZGUgPT0gYmxhbmtfbW9kZSkgewotCQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBVbmRvIGN1cnJlbnQgKi8KIAlpZiAoY3VycmVudF9tb2RlID09IEZCX0JMQU5LX05PUk1BTCB8fAotCSAgICBjdXJyZW50X21vZGUgPT0gRkJfQkxBTktfVU5CTEFOSykgewotCQkvKiB1bmJsYW5rIHRoZSBzY3JlZW4gKi8KLQkJdmFsID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSk7CisJICAgIGN1cnJlbnRfbW9kZSA9PSBGQl9CTEFOS19VTkJMQU5LKQogCQkvKiBjbGVhciAiRnVsbEJhbmR3aWR0aCIgYml0ICovCi0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUsIHZhbCAmIDB4ZGYpOwotCQkvKiBhbmQgdW5kbyBWRVNBIHN1c3BlbmQgdHJpY2tlcnkgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwMCk7Ci0JfQotCi0JLyogc2V0IG5ldyAqLwotCWlmIChibGFua19tb2RlID4gRkJfQkxBTktfTk9STUFMKSB7Ci0JCS8qIGJsYW5rIHRoZSBzY3JlZW4gKi8KLQkJdmFsID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSk7CisJCXZhbCA9IDA7CisJZWxzZQogCQkvKiBzZXQgIkZ1bGxCYW5kd2lkdGgiIGJpdCAqLwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCB2YWwgfCAweDIwKTsKLQl9CisJCXZhbCA9IDB4MjA7CisKKwl2YWwgfD0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSkgJiAweGRmOworCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUsIHZhbCk7CiAKIAlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCXZhbCA9IDB4MDA7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwNCk7CisJCXZhbCA9IDB4MDQ7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwMik7CisJCXZhbCA9IDB4MDI7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1JFLCAweDA2KTsKKwkJdmFsID0gMHgwNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIDFcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIkVYSVQsIHJldHVybmluZyAxXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCisJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgdmFsKTsKKwogCWNpbmZvLT5ibGFua19tb2RlID0gYmxhbmtfbW9kZTsKLQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJFWElULCByZXR1cm5pbmcgMFxuIik7CiAKIAkvKiBMZXQgZmJjb24gZG8gYSBzb2Z0IGJsYW5rIGZvciB1cyAqLwogCXJldHVybiAoYmxhbmtfbW9kZSA9PSBGQl9CTEFOS19OT1JNQUwpID8gMSA6IDA7CiB9CisKIC8qKioqIEVORCAgIEhhcmR3YXJlIHNwZWNpZmljIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKiBCRUdJTiBJbnRlcm5hbCBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NjIsOCArMTQ1MSw2IEBACiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCWNvbnN0IHN0cnVjdCBjaXJydXNmYl9ib2FyZF9pbmZvX3JlYyAqYmk7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAlhc3NlcnQoY2luZm8gIT0gTlVMTCk7CiAKIAliaSA9ICZjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV07CkBAIC0xNTkxLDI1ICsxNDc4LDIzIEBACiAJCS8qIGRpc2FibGUgZmxpY2tlcmZpeGVyICovCiAJCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQ1MSwgMHgwMCk7CiAJCW1kZWxheSgxMDApOwotCQkvKiBmcm9tIEtsYXVzJyBOZXRCU0QgZHJpdmVyOiAqLwotCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IyRiwgMHgwMCk7Ci0JCS8qIHB1dCBibGl0dGVyIGludG8gNTQyeCBjb21wYXQgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzMsIDB4MDApOwogCQkvKiBtb2RlICovCiAJCXZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUjMxLCAweDAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEJUX0dENTQ4MDoKKwljYXNlIEJUX0dENTQ4MDogIC8qIGZhbGwgdGhyb3VnaCAqLwogCQkvKiBmcm9tIEtsYXVzJyBOZXRCU0QgZHJpdmVyOiAqLwogCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IyRiwgMHgwMCk7CisJY2FzZSBCVF9BTFBJTkU6ICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJLyogcHV0IGJsaXR0ZXIgaW50byA1NDJ4IGNvbXBhdCAqLworCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IzMywgMHgwMCk7CiAJCWJyZWFrOwogCi0JY2FzZSBCVF9BTFBJTkU6CisJY2FzZSBCVF9MQUdVTkE6CisJY2FzZSBCVF9MQUdVTkFCOgogCQkvKiBOb3RoaW5nIHRvIGRvIHRvIHJlc2V0IHRoZSBib2FyZC4gKi8KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBXYXJuaW5nOiBVbmtub3duIGJvYXJkIHR5cGVcbiIpOworCQlkZXZfZXJyKGluZm8tPmRldmljZSwgIldhcm5pbmc6IFVua25vd24gYm9hcmQgdHlwZVxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTYyOSwzMSArMTUxNCwyOCBAQAogCQkJV0dlbihjaW5mbywgQ0xfVlNTTTIsIDB4MDEpOwogCiAJCS8qIHJlc2V0IHNlcXVlbmNlciBsb2dpYyAqLwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjAsIDB4MDMpOworCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgwMyk7CiAKIAkJLyogRnVsbEJhbmR3aWR0aCAodmlkZW8gb2ZmKSBhbmQgOC85IGRvdCBjbG9jayAqLwogCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCAweDIxKTsKLQkJLyogcG9sYXJpdHkgKC0vLSksIGRpc2FibGUgYWNjZXNzIHRvIGRpc3BsYXkgbWVtb3J5LAotCQkgKiBWR0FfQ1JUQ19TVEFSVF9ISSBiYXNlIGFkZHJlc3M6IGNvbG9yCi0JCSAqLwotCQlXR2VuKGNpbmZvLCBWR0FfTUlTX1csIDB4YzEpOwogCiAJCS8qICJtYWdpYyBjb29raWUiIC0gZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBtZS4uICovCiAvKiAgICAgIHZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUkEsIDB4Y2UpOyAgICovCiAJCS8qIHVubG9jayBhbGwgZXh0ZW5zaW9uIHJlZ2lzdGVycyAqLwogCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjYsIDB4MTIpOwogCi0JCS8qIHJlc2V0IGJsaXR0ZXIgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzEsIDB4MDQpOwotCiAJCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7CiAJCWNhc2UgQlRfR0Q1NDgwOgogCQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVJGLCAweDk4KTsKIAkJCWJyZWFrOwogCQljYXNlIEJUX0FMUElORToKKwkJY2FzZSBCVF9MQUdVTkE6CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCWJyZWFrOwogCQljYXNlIEJUX1NENjQ6CisjaWZkZWYgQ09ORklHX1pPUlJPCiAJCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjgpOworI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMTYsIDB4MGYpOwpAQCAtMTY2NSw4ICsxNTQ3LDggQEAKIAl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7CiAJLyogY2hhcmFjdGVyIG1hcCBzZWxlY3Q6IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaW4gZ3ggbW9kZSAqLwogCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NIQVJBQ1RFUl9NQVAsIDB4MDApOwotCS8qIG1lbW9yeSBtb2RlOiBjaGFpbi00LCBubyBvZGQvZXZlbiwgZXh0LiBtZW1vcnkgKi8KLQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwZSk7CisJLyogbWVtb3J5IG1vZGU6IGNoYWluNCwgZXh0LiBtZW1vcnkgKi8KKwl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwYSk7CiAKIAkvKiBjb250cm9sbGVyLWludGVybmFsIGJhc2UgYWRkcmVzcyBvZiB2aWRlbyBtZW1vcnkgKi8KIAlpZiAoYmktPmluaXRfc3IwNykKQEAgLTE2OTIsMjAgKzE1NzQsMTIgQEAKIAkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxOCwgMHgwMik7CiAJfQogCi0JLyogTUNMSyBzZWxlY3QgZXRjLiAqLwotCWlmIChiaS0+aW5pdF9zcjFmKQotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCBiaS0+c3IxZik7Ci0KIAkvKiBTY3JlZW4gQSBwcmVzZXQgcm93IHNjYW46IG5vbmUgKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfUFJFU0VUX1JPVywgMHgwMCk7CiAJLyogVGV4dCBjdXJzb3Igc3RhcnQ6IGRpc2FibGUgdGV4dCBjdXJzb3IgKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX1NUQVJULCAweDIwKTsKIAkvKiBUZXh0IGN1cnNvciBlbmQ6IC0gKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX0VORCwgMHgwMCk7Ci0JLyogU2NyZWVuIHN0YXJ0IGFkZHJlc3MgaGlnaDogMCAqLwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBWR0FfQ1JUQ19TVEFSVF9ISSwgMHgwMCk7Ci0JLyogU2NyZWVuIHN0YXJ0IGFkZHJlc3MgbG93OiAwICovCi0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX1NUQVJUX0xPLCAweDAwKTsKIAkvKiB0ZXh0IGN1cnNvciBsb2NhdGlvbiBoaWdoOiAwICovCiAJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX0NVUlNPUl9ISSwgMHgwMCk7CiAJLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gbG93OiAwICovCkBAIC0xNzEzLDEwICsxNTg3LDYgQEAKIAogCS8qIFVuZGVybGluZSBSb3cgc2NhbmxpbmU6IC0gKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfVU5ERVJMSU5FLCAweDAwKTsKLQkvKiBtb2RlIGNvbnRyb2w6IHRpbWluZyBlbmFibGUsIGJ5dGUgbW9kZSwgbm8gY29tcGF0IG1vZGVzICovCi0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX01PREUsIDB4YzMpOwotCS8qIExpbmUgQ29tcGFyZTogbm90IG5lZWRlZCAqLwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBWR0FfQ1JUQ19MSU5FX0NPTVBBUkUsIDB4MDApOwogCS8qICMjIyBhZGQgMHg0MCBmb3IgdGV4dCBtb2RlcyB3aXRoID4gMzAgTUh6IHBpeGNsb2NrICovCiAJLyogZXh0LiBkaXNwbGF5IGNvbnRyb2xzOiBleHQuYWRyLiB3cmFwICovCiAJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCLCAweDAyKTsKQEAgLTE3MzksNyArMTYwOSw5IEBACiAJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIFZHQV9HRlhfQ09NUEFSRV9NQVNLLCAweDBmKTsKIAkvKiBCaXQgTWFzazogbm8gbWFzayBhdCBhbGwgKi8KIAl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgVkdBX0dGWF9CSVRfTUFTSywgMHhmZik7Ci0JaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUpCisKKwlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCB8fAorCSAgICBpc19sYWd1bmEoY2luZm8pKQogCQkvKiAoNTQzNCBjYW4ndCBoYXZlIGJpdCAzIHNldCBmb3IgYml0Ymx0KSAqLwogCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1JCLCAweDIwKTsKIAllbHNlCkBAIC0xNzc5LDE4ICsxNjUxLDExIEBACiAJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRDX09WRVJTQ0FOLCAweDAwKTsKIAkvKiBDb2xvciBQbGFuZSBlbmFibGU6IEVuYWJsZSBhbGwgNCBwbGFuZXMgKi8KIAl2Z2Ffd2F0dHIoY2luZm8tPnJlZ2Jhc2UsIFZHQV9BVENfUExBTkVfRU5BQkxFLCAweDBmKTsKLS8qICMjIyAgdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBDTF9BUjMzLCAweDAwKTsgKiBQaXhlbCBQYW5uaW5nOiAtICovCiAJLyogQ29sb3IgU2VsZWN0OiAtICovCiAJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRDX0NPTE9SX1BBR0UsIDB4MDApOwogCiAJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwkvKiBQaXhlbCBtYXNrOiBubyBtYXNrICovCiAKLQlpZiAoY2luZm8tPmJ0eXBlICE9IEJUX0FMUElORSAmJiBjaW5mby0+YnR5cGUgIT0gQlRfR0Q1NDgwKQotCS8qIHBvbGFyaXR5ICgtLy0pLCBlbmFibGUgZGlzcGxheSBtZW0sCi0JICogVkdBX0NSVENfU1RBUlRfSEkgaS9vIGJhc2UgPSBjb2xvcgotCSAqLwotCQlXR2VuKGNpbmZvLCBWR0FfTUlTX1csIDB4YzMpOwotCiAJLyogQkxUIFN0YXJ0L3N0YXR1czogQmxpdHRlciByZXNldCAqLwogCXZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUjMxLCAweDA0KTsKIAkvKiAtICIgLQkgICA6ICJlbmQtb2YtcmVzZXQiICovCkBAIC0xNzk4LDggKzE2NjMsNiBAQAogCiAJLyogbWlzYy4uLiAqLwogCVdIRFIoY2luZm8sIDApOwkvKiBIaWRkZW4gREFDIHJlZ2lzdGVyOiAtICovCi0KLQlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm47CiB9CiAKQEAgLTE4MDgsOCArMTY3MSw2IEBACiAjaWZkZWYgQ09ORklHX1pPUlJPIC8qIG9ubHkgd29ya3Mgb24gWm9ycm8gYm9hcmRzICovCiAJc3RhdGljIGludCBJc09uID0gMDsJLyogWFhYIG5vdCBvayBmb3IgbXVsdGlwbGUgYm9hcmRzICovCiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU080KQogCQlyZXR1cm47CQkvKiBub3RoaW5nIHRvIHN3aXRjaCAqLwogCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FKQpAQCAtMTgxOSw4ICsxNjgwLDYgQEAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08pIHsKIAkJaWYgKChvbiAmJiAhSXNPbikgfHwgKCFvbiAmJiBJc09uKSkKIAkJCVdTRlIoY2luZm8sIDB4ZmYpOwotCi0JCURQUklOVEsoIkVYSVRcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmIChvbikgewpAQCAtMTg0NywxMSArMTcwNiwxMCBAQAogCQljYXNlIEJUX1NQRUNUUlVNOgogCQkJV1NGUihjaW5mbywgMHg0Zik7CiAJCQlicmVhazsKLQkJZGVmYXVsdDogLyogZG8gbm90aGluZyAqLyBicmVhazsKKwkJZGVmYXVsdDogLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIH0KIApAQCAtMTg1OSw2ICsxNzE3LDE3IEBACiAvKiBMaW51eCAyLjYtc3R5bGUgIGFjY2VsZXJhdGVkIGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGludCBjaXJydXNmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKworCWlmICghaXNfbGFndW5hKGNpbmZvKSkgeworCQl3aGlsZSAodmdhX3JnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzEpICYgMHgwMykKKwkJCWNwdV9yZWxheCgpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2lycnVzZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlZ2lvbikKIHsKQEAgLTE4OTQsOCArMTc2Myw4IEBACiAJCQkgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKIAkJCSAgKHJlZ2lvbi0+ZHggKiBtKSAvIDgsIHJlZ2lvbi0+ZHksCiAJCQkgIChyZWdpb24tPndpZHRoICogbSkgLyA4LCByZWdpb24tPmhlaWdodCwKLQkJCSAgY29sb3IsCi0JCQkgIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisJCQkgIGNvbG9yLCBjb2xvciwKKwkJCSAgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCAweDQwKTsKIH0KIAogc3RhdGljIHZvaWQgY2lycnVzZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0xOTQzLDkgKzE4MTIsNDYgQEAKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBjaGFyIG9wID0gKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgPyAweGMgOiAweDQ7CiAKLQljaXJydXNmYl9XYWl0QkxUKGNpbmZvLT5yZWdiYXNlKTsKLQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKwkvKiBBbHBpbmUvU0Q2NCBkb2VzIG5vdCB3b3JrIGF0IDI0YnBwID8/PyAqLworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8IGltYWdlLT5kZXB0aCAhPSAxKQorCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwllbHNlIGlmICgoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgJiYKKwkJICBvcCA9PSAweGMpCisJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCWVsc2UgeworCQl1bnNpZ25lZCBzaXplID0gKChpbWFnZS0+d2lkdGggKyA3KSA+PiAzKSAqIGltYWdlLT5oZWlnaHQ7CisJCWludCBtID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQl1MzIgZmcsIGJnOworCisJCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCkgeworCQkJZmcgPSBpbWFnZS0+ZmdfY29sb3I7CisJCQliZyA9IGltYWdlLT5iZ19jb2xvcjsKKwkJfSBlbHNlIHsKKwkJCWZnID0gKCh1MzIgKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYmcgPSAoKHUzMiAqKShpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07CisJCX0KKwkJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgeworCQkJLyogY2xlYXIgYmFja2dyb3VuZCBmaXJzdCAqLworCQkJY2lycnVzZmJfUmVjdEZpbGwoY2luZm8tPnJlZ2Jhc2UsCisJCQkJCSAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLAorCQkJCQkgIChpbWFnZS0+ZHggKiBtKSAvIDgsIGltYWdlLT5keSwKKwkJCQkJICAoaW1hZ2UtPndpZHRoICogbSkgLyA4LAorCQkJCQkgIGltYWdlLT5oZWlnaHQsCisJCQkJCSAgYmcsIGJnLAorCQkJCQkgIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgMHg0MCk7CisJCX0KKwkJY2lycnVzZmJfUmVjdEZpbGwoY2luZm8tPnJlZ2Jhc2UsCisJCQkJICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCQkJICAoaW1hZ2UtPmR4ICogbSkgLyA4LCBpbWFnZS0+ZHksCisJCQkJICAoaW1hZ2UtPndpZHRoICogbSkgLyA4LCBpbWFnZS0+aGVpZ2h0LAorCQkJCSAgZmcsIGJnLAorCQkJCSAgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBvcCk7CisJCW1lbWNweShpbmZvLT5zY3JlZW5fYmFzZSwgaW1hZ2UtPmRhdGEsIHNpemUpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFJFUApAQCAtMTk1MywxMiArMTg1OSw4IEBACiAjZGVmaW5lIFBSRVBfSU9fQkFTRSAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgMHg4MDAwMDAwMCkKIHN0YXRpYyB2b2lkIGdldF9wcmVwX2FkZHJzKHVuc2lnbmVkIGxvbmcgKmRpc3BsYXksIHVuc2lnbmVkIGxvbmcgKnJlZ2lzdGVycykKIHsKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAkqZGlzcGxheSA9IFBSRVBfVklERU9fQkFTRTsKIAkqcmVnaXN0ZXJzID0gKHVuc2lnbmVkIGxvbmcpIFBSRVBfSU9fQkFTRTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAjZW5kaWYJCQkJLyogQ09ORklHX1BQQ19QUkVQICovCkBAIC0xOTcwLDQwICsxODcyLDQzIEBACiAgKiBiYXNlZCBvbiB0aGUgRFJBTSBiYW5kd2lkdGggYml0IGFuZCBEUkFNIGJhbmsgc3dpdGNoaW5nIGJpdC4gIFRoaXMKICAqIHdvcmtzIHdpdGggMU1CLCAyTUIgYW5kIDRNQiBjb25maWd1cmF0aW9ucyAod2hpY2ggdGhlIE1vdG9yb2xhIGJvYXJkcwogICogc2VlbSB0byBoYXZlLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgY2lycnVzZmJfZ2V0X21lbXNpemUodTggX19pb21lbSAqcmVnYmFzZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX2dldF9tZW1zaXplKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCQkJICAgdTggX19pb21lbSAqcmVnYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1lbTsKLQl1bnNpZ25lZCBjaGFyIFNSRjsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7CisJaWYgKGlzX2xhZ3VuYShjaW5mbykpIHsKKwkJdW5zaWduZWQgY2hhciBTUjE0ID0gdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUjE0KTsKIAotCVNSRiA9IHZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVJGKTsKLQlzd2l0Y2ggKChTUkYgJiAweDE4KSkgewotCWNhc2UgMHgwODoKLQkJbWVtID0gNTEyICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSAweDEwOgotCQltZW0gPSAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JLyogNjQtYml0IERSQU0gZGF0YSBidXMgd2lkdGg7IGFzc3VtZSAyTUIuIEFsc28gaW5kaWNhdGVzIDJNQiBtZW1vcnkKLQkgKiBvbiB0aGUgNTQzMC4KLQkgKi8KLQljYXNlIDB4MTg6Ci0JCW1lbSA9IDIwNDggKiAxMDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDTGdlbmZiOiBVbmtub3duIG1lbW9yeSBzaXplIVxuIik7Ci0JCW1lbSA9IDEwMjQgKiAxMDI0OworCQltZW0gPSAoKFNSMTQgJiA3KSArIDEpIDw8IDIwOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgU1JGID0gdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUkYpOworCQlzd2l0Y2ggKChTUkYgJiAweDE4KSkgeworCQljYXNlIDB4MDg6CisJCQltZW0gPSA1MTIgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgMHgxMDoKKwkJCW1lbSA9IDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCS8qIDY0LWJpdCBEUkFNIGRhdGEgYnVzIHdpZHRoOyBhc3N1bWUgMk1CLgorCQkgKiBBbHNvIGluZGljYXRlcyAyTUIgbWVtb3J5IG9uIHRoZSA1NDMwLgorCQkgKi8KKwkJY2FzZSAweDE4OgorCQkJbWVtID0gMjA0OCAqIDEwMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgIlVua25vd24gbWVtb3J5IHNpemUhXG4iKTsKKwkJCW1lbSA9IDEwMjQgKiAxMDI0OworCQl9CisJCS8qIElmIERSQU0gYmFuayBzd2l0Y2hpbmcgaXMgZW5hYmxlZCwgdGhlcmUgbXVzdCBiZQorCQkgKiB0d2ljZSBhcyBtdWNoIG1lbW9yeSBpbnN0YWxsZWQuICg0TUIgb24gdGhlIDU0MzQpCisJCSAqLworCQlpZiAoY2luZm8tPmJ0eXBlICE9IEJUX0FMUElORSAmJiAoU1JGICYgMHg4MCkgIT0gMCkKKwkJCW1lbSAqPSAyOwogCX0KLQlpZiAoU1JGICYgMHg4MCkKLQkvKiBJZiBEUkFNIGJhbmsgc3dpdGNoaW5nIGlzIGVuYWJsZWQsIHRoZXJlIG11c3QgYmUgdHdpY2UgYXMgbXVjaAotCSAqIG1lbW9yeSBpbnN0YWxsZWQuICg0TUIgb24gdGhlIDU0MzQpCi0JICovCi0JCW1lbSAqPSAyOwogCiAJLyogVE9ETzogSGFuZGxpbmcgb2YgR0Q1NDQ2LzU0ODAgKHNlZSBYRjg2IHNvdXJjZXMgLi4uKSAqLwotCi0JRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIG1lbTsKIH0KIApAQCAtMjAxNCw4ICsxOTE5LDYgQEAKIAlhc3NlcnQoZGlzcGxheSAhPSBOVUxMKTsKIAlhc3NlcnQocmVnaXN0ZXJzICE9IE5VTEwpOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCiAJKmRpc3BsYXkgPSAwOwogCSpyZWdpc3RlcnMgPSAwOwogCkBAIC0yMDMwLDE0ICsxOTMzLDE1IEBACiAJfQogCiAJYXNzZXJ0KCpkaXNwbGF5ICE9IDApOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX3BjaV91bm1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaW5mby0+ZGV2aWNlKTsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKKwlpZiAoY2luZm8tPmxhZ3VuYV9tbWlvID09IE5VTEwpCisJCWlvdW5tYXAoY2luZm8tPmxhZ3VuYV9tbWlvKTsKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKICNpZiAwIC8qIGlmIHN5c3RlbSBkaWRuJ3QgY2xhaW0gdGhpcyByZWdpb24sIHdlIHdvdWxkLi4uICovCiAJcmVsZWFzZV9tZW1fcmVnaW9uKDB4QTAwMDAsIDY1NTM1KTsKQEAgLTIwNjcsNiArMTk3MSwyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCisvKiBmdW5jdGlvbiB0YWJsZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IGZiX29wcyBjaXJydXNmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9vcGVuCT0gY2lycnVzZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQk9IGNpcnJ1c2ZiX3JlbGVhc2UsCisJLmZiX3NldGNvbHJlZwk9IGNpcnJ1c2ZiX3NldGNvbHJlZywKKwkuZmJfY2hlY2tfdmFyCT0gY2lycnVzZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gY2lycnVzZmJfc2V0X3BhciwKKwkuZmJfcGFuX2Rpc3BsYXkgPSBjaXJydXNmYl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsJPSBjaXJydXNmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QJPSBjaXJydXNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjaXJydXNmYl9jb3B5YXJlYSwKKwkuZmJfc3luYwk9IGNpcnJ1c2ZiX3N5bmMsCisJLmZiX2ltYWdlYmxpdAk9IGNpcnJ1c2ZiX2ltYWdlYmxpdCwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3NldF9mYmluZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwpAQCAtMjA3NywxMCArMTk5NywxNiBAQAogCQkgICAgfCBGQklORk9fSFdBQ0NFTF9YUEFOCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX1lQQU4KIAkJICAgIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QKKwkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBOwotCWlmIChub2FjY2VsKQorCWlmIChub2FjY2VsIHx8IGlzX2xhZ3VuYShjaW5mbykpIHsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7CisJfSBlbHNlCisJCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX0NJUlJVU19BTFBJTkU7CisKIAlpbmZvLT5mYm9wcyA9ICZjaXJydXNmYl9vcHM7CisKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgewogCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikKIAkJCWluZm8tPnNjcmVlbl9iYXNlICs9IDEgKiBNQl87CkBAIC0yMTA0LDcgKzIwMzAsNiBAQAogCiAJLyogRklYTUU6IG1hcCByZWdpb24gYXQgMHhCODAwMCBpZiBhdmFpbGFibGUsIGZpbGwgaW4gaGVyZSAqLwogCWluZm8tPmZpeC5tbWlvX2xlbiAgID0gMDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOwogCiAJZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKIApAQCAtMjExNSw3MCArMjA0MCw1NiBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlpbnQgZXJyOwotCWVudW0gY2lycnVzX2JvYXJkIGJ0eXBlOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiY2lycnVzZmI6IERyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGJhc2VkICIKLQkJImdyYXBoaWMgYm9hcmRzLCB2IiBDSVJSVVNGQl9WRVJTSU9OICJcbiIpOwotCi0JYnR5cGUgPSBjaW5mby0+YnR5cGU7CiAKIAkvKiBzYW5pdHkgY2hlY2tzICovCi0JYXNzZXJ0KGJ0eXBlICE9IEJUX05PTkUpOworCWFzc2VydChjaW5mby0+YnR5cGUgIT0gQlRfTk9ORSk7CiAKIAkvKiBzZXQgYWxsIHRoZSB2aXRhbCBzdHVmZiAqLwogCWNpcnJ1c2ZiX3NldF9mYmluZm8oaW5mbyk7CiAKLQlEUFJJTlRLKCJjaXJydXNmYjogKFJBTSBzdGFydCBzZXQgdG86IDB4JXApXG4iLCBpbmZvLT5zY3JlZW5fYmFzZSk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIoUkFNIHN0YXJ0IHNldCB0bzogMHglcClcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKIAogCWVyciA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgOCk7CiAJaWYgKCFlcnIpIHsKLQkJRFBSSU5USygid3JvbmcgaW5pdGlhbCB2aWRlbyBtb2RlXG4iKTsKKwkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJ3cm9uZyBpbml0aWFsIHZpZGVvIG1vZGVcbiIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCiAJaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCi0JZXJyID0gY2lycnVzZmJfZGVjb2RlX3ZhcigmaW5mby0+dmFyLCAmY2luZm8tPmN1cnJlbnRtb2RlLCBpbmZvKTsKKwllcnIgPSBjaXJydXNmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlEUFJJTlRLKCJjaG9raW5nIG9uIGRlZmF1bHQgdmFyLi4uIHVtbSwgbm8gZ29vZC5cbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJCSJjaG9raW5nIG9uIGRlZmF1bHQgdmFyLi4uIHVtbSwgbm8gZ29vZC5cbiIpOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogY291bGQgbm90IHJlZ2lzdGVyICIKLQkJCSJmYiBkZXZpY2U7IGVyciA9ICVkIVxuIiwgZXJyKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsCisJCQkiY291bGQgbm90IHJlZ2lzdGVyIGZiIGRldmljZTsgZXJyID0gJWQhXG4iLCBlcnIpOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCi0JRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwogCXJldHVybiAwOwogCiBlcnJfZGVhbGxvY19jbWFwOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7Ci0JY2luZm8tPnVubWFwKGluZm8pOwotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGNpcnJ1c2ZiX2NsZWFudXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwotCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCXN3aXRjaF9tb25pdG9yKGNpbmZvLCAwKTsKLQogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLQlwcmludGsoIkZyYW1lYnVmZmVyIHVucmVnaXN0ZXJlZFxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJGcmFtZWJ1ZmZlciB1bnJlZ2lzdGVyZWRcbiIpOwogCWNpbmZvLT51bm1hcChpbmZvKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yMTg3LDcgKzIwOTgsNiBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbzsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQllbnVtIGNpcnJ1c19ib2FyZCBidHlwZTsKIAl1bnNpZ25lZCBsb25nIGJvYXJkX2FkZHIsIGJvYXJkX3NpemU7CiAJaW50IHJldDsKIApAQCAtMjIwMSwxNSArMjExMSwxNyBAQAogCWlmICghaW5mbykgewogCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGlzYWJsZTsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCWNpbmZvID0gaW5mby0+cGFyOwotCWNpbmZvLT5idHlwZSA9IGJ0eXBlID0gKGVudW0gY2lycnVzX2JvYXJkKSBlbnQtPmRyaXZlcl9kYXRhOworCWNpbmZvLT5idHlwZSA9IChlbnVtIGNpcnJ1c19ib2FyZCkgZW50LT5kcml2ZXJfZGF0YTsKIAotCURQUklOVEsoIiBGb3VuZCBQQ0kgZGV2aWNlLCBiYXNlIGFkZHJlc3MgMCBpcyAweCV4LCBidHlwZSBzZXQgdG8gJWRcbiIsCi0JCXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCBidHlwZSk7Ci0JRFBSSU5USygiIGJhc2UgYWRkcmVzcyAxIGlzIDB4JXhcbiIsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0KTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJIiBGb3VuZCBQQ0kgZGV2aWNlLCBiYXNlIGFkZHJlc3MgMCBpcyAweCVMeCwgYnR5cGUgc2V0IHRvICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAgY2luZm8tPmJ0eXBlKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIiBiYXNlIGFkZHJlc3MgMSBpcyAweCVMeFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCk7CiAKIAlpZiAoaXNQUmVQKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0JBU0VfQUREUkVTU18wLCAweDAwMDAwMDAwKTsKQEAgLTIyMTksMzAgKzIxMzEsMzAgQEAKIAkvKiBQUmVQIGRpZXMgaWYgd2UgaW9yZW1hcCB0aGUgSU8gcmVnaXN0ZXJzLCBidXQgaXQgd29ya3Mgdy9vdXQuLi4gKi8KIAkJY2luZm8tPnJlZ2Jhc2UgPSAoY2hhciBfX2lvbWVtICopIGluZm8tPmZpeC5tbWlvX3N0YXJ0OwogCX0gZWxzZSB7Ci0JCURQUklOVEsoIkF0dGVtcHQgdG8gZ2V0IFBDSSBpbmZvIGZvciBDaXJydXMgR3JhcGhpY3MgQ2FyZFxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLAorCQkJIkF0dGVtcHQgdG8gZ2V0IFBDSSBpbmZvIGZvciBDaXJydXMgR3JhcGhpY3MgQ2FyZFxuIik7CiAJCWdldF9wY2lfYWRkcnMocGRldiwgJmJvYXJkX2FkZHIsICZpbmZvLT5maXgubW1pb19zdGFydCk7CiAJCS8qIEZJWE1FOiB0aGlzIGZvcmNlcyBWR0EuICBhbHRlcm5hdGl2ZXM/ICovCiAJCWNpbmZvLT5yZWdiYXNlID0gTlVMTDsKKwkJY2luZm8tPmxhZ3VuYV9tbWlvID0gaW9yZW1hcChpbmZvLT5maXgubW1pb19zdGFydCwgMHgxMDAwKTsKIAl9CiAKLQlEUFJJTlRLKCJCb2FyZCBhZGRyZXNzOiAweCVseCwgcmVnaXN0ZXIgYWRkcmVzczogMHglbHhcbiIsCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJCb2FyZCBhZGRyZXNzOiAweCVseCwgcmVnaXN0ZXIgYWRkcmVzczogMHglbHhcbiIsCiAJCWJvYXJkX2FkZHIsIGluZm8tPmZpeC5tbWlvX3N0YXJ0KTsKIAotCWJvYXJkX3NpemUgPSAoYnR5cGUgPT0gQlRfR0Q1NDgwKSA/Ci0JCTMyICogTUJfIDogY2lycnVzZmJfZ2V0X21lbXNpemUoY2luZm8tPnJlZ2Jhc2UpOworCWJvYXJkX3NpemUgPSAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgPworCQkzMiAqIE1CXyA6IGNpcnJ1c2ZiX2dldF9tZW1zaXplKGluZm8sIGNpbmZvLT5yZWdiYXNlKTsKIAogCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImNpcnJ1c2ZiIik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogY2Fubm90IHJlc2VydmUgcmVnaW9uIDB4JWx4LCAiCi0JCSAgICAgICAiYWJvcnRcbiIsCi0JCSAgICAgICBib2FyZF9hZGRyKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsIGFib3J0XG4iLAorCQkJYm9hcmRfYWRkcik7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogI2lmIDAgLyogaWYgdGhlIHN5c3RlbSBkaWRuJ3QgY2xhaW0gdGhpcyByZWdpb24sIHdlIHdvdWxkLi4uICovCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oMHhBMDAwMCwgNjU1MzUsICJjaXJydXNmYiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IGNhbm5vdCByZXNlcnZlIHJlZ2lvbiAweCVseCwgYWJvcnRcbiIKLSwKLQkJICAgICAgIDB4QTAwMDBMKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsIGFib3J0XG4iLAorCQkJMHhBMDAwMEwpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uczsKIAl9CkBAIC0yMjYwLDE2ICsyMTcyLDE3IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBib2FyZF9zaXplOwogCWNpbmZvLT51bm1hcCA9IGNpcnJ1c2ZiX3BjaV91bm1hcDsKIAotCXByaW50ayhLRVJOX0lORk8gIlJBTSAoJWx1IGtCKSBhdCAweCVseCwgQ2lycnVzICIKLQkJCSJMb2dpYyBjaGlwc2V0IG9uIFBDSSBidXNcbiIsCi0JCQlpbmZvLT5zY3JlZW5fc2l6ZSA+PiAxMCwgYm9hcmRfYWRkcik7CisJZGV2X2luZm8oaW5mby0+ZGV2aWNlLAorCQkgIkNpcnJ1cyBMb2dpYyBjaGlwc2V0IG9uIFBDSSBidXMsIFJBTSAoJWx1IGtCKSBhdCAweCVseFxuIiwKKwkJIGluZm8tPnNjcmVlbl9zaXplID4+IDEwLCBib2FyZF9hZGRyKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXQgPSBjaXJydXNmYl9yZWdpc3RlcihpbmZvKTsKLQlpZiAocmV0KQotCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlyZXR1cm4gcmV0OworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKIAorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIGVycl9yZWxlYXNlX2xlZ2FjeToKIAlpZiAocmVsZWFzZV9pb19wb3J0cykKIAkJcmVsZWFzZV9yZWdpb24oMHgzQzAsIDMyKTsKQEAgLTIyNzksOCArMjE5Miw5IEBACiAjZW5kaWYKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX3JlbGVhc2VfZmI6CisJaWYgKGNpbmZvLT5sYWd1bmFfbW1pbyAhPSBOVUxMKQorCQlpb3VubWFwKGNpbmZvLT5sYWd1bmFfbW1pbyk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKLWVycl9kaXNhYmxlOgogZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI4OCwxMSArMjIwMiw4IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2lycnVzZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JRFBSSU5USygiRU5URVJcbiIpOwogCiAJY2lycnVzZmJfY2xlYW51cChpbmZvKTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2lycnVzZmJfcGNpX2RyaXZlciA9IHsKQEAgLTIzMjQsOCArMjIzNSw2IEBACiAJaWYgKGNpcnJ1c2ZiX3pvcnJvX3RhYmxlMltidHlwZV0uaWQyKQogCQl6MiA9IHpvcnJvX2ZpbmRfZGV2aWNlKGNpcnJ1c2ZiX3pvcnJvX3RhYmxlMltidHlwZV0uaWQyLCBOVUxMKTsKIAlzaXplID0gY2lycnVzZmJfem9ycm9fdGFibGUyW2J0eXBlXS5zaXplOwotCXByaW50ayhLRVJOX0lORk8gImNpcnJ1c2ZiOiAlcyBib2FyZCBkZXRlY3RlZDsgIiwKLQkgICAgICAgY2lycnVzZmJfYm9hcmRfaW5mb1tidHlwZV0ubmFtZSk7CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaXJydXNmYl9pbmZvKSwgJnotPmRldik7CiAJaWYgKCFpbmZvKSB7CkBAIC0yMzM0LDYgKzIyNDMsOSBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiJXMgYm9hcmQgZGV0ZWN0ZWRcbiIsCisJCSBjaXJydXNmYl9ib2FyZF9pbmZvW2J0eXBlXS5uYW1lKTsKKwogCWNpbmZvID0gaW5mby0+cGFyOwogCWNpbmZvLT5idHlwZSA9IGJ0eXBlOwogCkBAIC0yMzQ1LDE5ICsyMjU3LDE2IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwogCiAJaWYgKCF6b3Jyb19yZXF1ZXN0X2RldmljZSh6LCAiY2lycnVzZmIiKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsICIKLQkJICAgICAgICJhYm9ydFxuIiwKLQkJICAgICAgIGJvYXJkX2FkZHIpOworCQlkZXZfZXJyKGluZm8tPmRldmljZSwgImNhbm5vdCByZXNlcnZlIHJlZ2lvbiAweCVseCwgYWJvcnRcbiIsCisJCQlib2FyZF9hZGRyKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVycl9yZWxlYXNlX2ZiOwogCX0KIAotCXByaW50aygiIFJBTSAoJWx1IE1CKSBhdCAkJWx4LCAiLCBib2FyZF9zaXplIC8gTUJfLCBib2FyZF9hZGRyKTsKLQogCXJldCA9IC1FSU87CiAKIAlpZiAoYnR5cGUgPT0gQlRfUElDQVNTTzQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIFJFRyBhdCAkJWx4XG4iLCBib2FyZF9hZGRyICsgMHg2MDAwMDApOworCQlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICIgUkVHIGF0ICQlbHhcbiIsIGJvYXJkX2FkZHIgKyAweDYwMDAwMCk7CiAKIAkJLyogVG8gYmUgcHJlY2lzZSwgZm9yIHRoZSBQNCB0aGlzIGlzIG5vdCB0aGUgKi8KIAkJLyogYmVnaW4gb2YgdGhlIGJvYXJkLCBidXQgdGhlIGJlZ2luIG9mIFJBTS4gKi8KQEAgLTIzNjcsNyArMjI3Niw3IEBACiAJCWlmICghY2luZm8tPnJlZ2Jhc2UpCiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAotCQlEUFJJTlRLKCJjaXJydXNmYjogVmlydHVhbCBhZGRyZXNzIGZvciBib2FyZCBzZXQgdG86ICQlcFxuIiwKKwkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWaXJ0dWFsIGFkZHJlc3MgZm9yIGJvYXJkIHNldCB0bzogJCVwXG4iLAogCQkJY2luZm8tPnJlZ2Jhc2UpOwogCQljaW5mby0+cmVnYmFzZSArPSAweDYwMDAwMDsKIAkJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBib2FyZF9hZGRyICsgMHg2MDAwMDA7CkBAIC0yMzc3LDggKzIyODYsOCBAQAogCQlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKQogCQkJZ290byBlcnJfdW5tYXBfcmVnYmFzZTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICIgUkVHIGF0ICQlbHhcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgejItPnJlc291cmNlLnN0YXJ0KTsKKwkJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiIFJFRyBhdCAkJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSB6Mi0+cmVzb3VyY2Uuc3RhcnQpOwogCiAJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gYm9hcmRfYWRkcjsKIAkJaWYgKGJvYXJkX2FkZHIgPiAweDAxMDAwMDAwKQpAQCAtMjM5MiwyNyArMjMwMSwzMiBAQAogCQljaW5mby0+cmVnYmFzZSA9IChjYWRkcl90KSBaVFdPX1ZBRERSKHoyLT5yZXNvdXJjZS5zdGFydCk7CiAJCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gejItPnJlc291cmNlLnN0YXJ0OwogCi0JCURQUklOVEsoImNpcnJ1c2ZiOiBWaXJ0dWFsIGFkZHJlc3MgZm9yIGJvYXJkIHNldCB0bzogJCVwXG4iLAorCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIlZpcnR1YWwgYWRkcmVzcyBmb3IgYm9hcmQgc2V0IHRvOiAkJXBcbiIsCiAJCQljaW5mby0+cmVnYmFzZSk7CiAJfQogCWNpbmZvLT51bm1hcCA9IGNpcnJ1c2ZiX3pvcnJvX3VubWFwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ2lycnVzIExvZ2ljIGNoaXBzZXQgb24gWm9ycm8gYnVzXG4iKTsKKwlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsCisJCSAiQ2lycnVzIExvZ2ljIGNoaXBzZXQgb24gWm9ycm8gYnVzLCBSQU0gKCVsdSBNQikgYXQgJCVseFxuIiwKKwkJIGJvYXJkX3NpemUgLyBNQl8sIGJvYXJkX2FkZHIpOworCiAJem9ycm9fc2V0X2RydmRhdGEoeiwgaW5mbyk7CiAKKwkvKiBNQ0xLIHNlbGVjdCBldGMuICovCisJaWYgKGNpcnJ1c2ZiX2JvYXJkX2luZm9bYnR5cGVdLmluaXRfc3IxZikKKwkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwKKwkJCSBjaXJydXNmYl9ib2FyZF9pbmZvW2J0eXBlXS5zcjFmKTsKKwogCXJldCA9IGNpcnJ1c2ZiX3JlZ2lzdGVyKGluZm8pOwotCWlmIChyZXQpIHsKLQkJaWYgKGJ0eXBlID09IEJUX1BJQ0FTU080KSB7Ci0JCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQkJCWlvdW5tYXAoY2luZm8tPnJlZ2Jhc2UgLSAweDYwMDAwMCk7Ci0JCX0gZWxzZSBpZiAoYm9hcmRfYWRkciA+IDB4MDEwMDAwMDApCi0JCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYnR5cGUgPT0gQlRfUElDQVNTTzQgfHwgYm9hcmRfYWRkciA+IDB4MDEwMDAwMDApCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCiBlcnJfdW5tYXBfcmVnYmFzZToKLQkvKiBQYXJlbnRhbCBhZHZpc29yeTogZXhwbGljaXQgaGFjayAqLwotCWlvdW5tYXAoY2luZm8tPnJlZ2Jhc2UgLSAweDYwMDAwMCk7CisJaWYgKGJ0eXBlID09IEJUX1BJQ0FTU080KQorCQlpb3VubWFwKGNpbmZvLT5yZWdiYXNlIC0gMHg2MDAwMDApOwogZXJyX3JlbGVhc2VfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKGJvYXJkX2FkZHIsIGJvYXJkX3NpemUpOwogZXJyX3JlbGVhc2VfZmI6CkBAIC0yNDI0LDExICsyMzM4LDggQEAKIHZvaWQgX19kZXZleGl0IGNpcnJ1c2ZiX3pvcnJvX3VucmVnaXN0ZXIoc3RydWN0IHpvcnJvX2RldiAqeikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHpvcnJvX2dldF9kcnZkYXRhKHopOwotCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWNpcnJ1c2ZiX2NsZWFudXAoaW5mbyk7Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogc3RhdGljIHN0cnVjdCB6b3Jyb19kcml2ZXIgY2lycnVzZmJfem9ycm9fZHJpdmVyID0gewpAQCAtMjQzOSw2ICsyMzUwLDM3IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgY2lycnVzZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKHRoaXNfb3B0LCAibm9hY2NlbCIpKQorCQkJbm9hY2NlbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibW9kZToiLCA1KSkKKwkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQgKyA1OworCQllbHNlCisJCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgTW9kdWxhcml6YXRpb24KKyAgICAgKi8KKworTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IDE5OTksMjAwMCBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFjY2VsZXJhdGVkIEZCRGV2IGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGNoaXBzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIHN0YXRpYyBpbnQgX19pbml0IGNpcnJ1c2ZiX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMjQ2MCw0MCArMjQwMiw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBfX2luaXQgY2lycnVzZmJfc2V0dXAoY2hhciAqb3B0aW9ucykgewotCWNoYXIgKnRoaXNfb3B0OwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWlmICghKnRoaXNfb3B0KQotCQkJY29udGludWU7Ci0KLQkJRFBSSU5USygiY2lycnVzZmJfc2V0dXA6IG9wdGlvbiAnJXMnXG4iLCB0aGlzX29wdCk7Ci0KLQkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2FjY2VsIikpCi0JCQlub2FjY2VsID0gMTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJtb2RlOiIsIDUpKQotCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdCArIDU7Ci0JCWVsc2UKLQkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQ7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSAgICAvKgotICAgICAqICBNb2R1bGFyaXphdGlvbgotICAgICAqLwotCi1NT0RVTEVfQVVUSE9SKCJDb3B5cmlnaHQgMTk5OSwyMDAwIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWNjZWxlcmF0ZWQgRkJEZXYgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgY2hpcHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RhdGljIHZvaWQgX19leGl0IGNpcnJ1c2ZiX2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yNTYwLDggKzI0NjgsNiBAQAogewogCWFzc2VydChjaW5mbyAhPSBOVUxMKTsKIAotCURQUklOVEsoIkVOVEVSXG4iKTsKLQogCWlmICh2Z2FfcmNydChjaW5mby0+cmVnYmFzZSwgQ0xfQ1JUMjQpICYgMHg4MCkgewogCQkvKiBpZiB3ZSdyZSBqdXN0IGluICJ3cml0ZSB2YWx1ZSIgbW9kZSwgd3JpdGUgYmFjayB0aGUgKi8KIAkJLyogc2FtZSB2YWx1ZSBhcyBiZWZvcmUgdG8gbm90IG1vZGlmeSBhbnl0aGluZyAqLwpAQCAtMjU3NCw4ICsyNDgwLDYgQEAKIAogCS8qIGR1bW15IHdyaXRlIG9uIFJlZzAgdG8gYmUgb24gIndyaXRlIGluZGV4IiBtb2RlIG5leHQgdGltZSAqLwogCXZnYV93KGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRUX0lXLCAweDAwKTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAvKioqIFdIRFIoKSAtIHdyaXRlIGludG8gdGhlIEhpZGRlbiBEQUMgcmVnaXN0ZXIgKioqLwpAQCAtMjU4OCw2ICsyNDkyLDggQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGR1bW15OwogCisJaWYgKGlzX2xhZ3VuYShjaW5mbykpCisJCXJldHVybjsKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08pIHsKIAkJLyogS2xhdXMnIGhpbnQgZm9yIGNvcnJlY3QgYWNjZXNzIHRvIEhEUiBvbiBzb21lIGJvYXJkcyAqLwogCQkvKiBmaXJzdCB3cml0ZSAwIHRvIHBpeGVsIG1hc2sgKDNjNikgKi8KQEAgLTI2NTUsNyArMjU2MSw4IEBACiAJdmdhX3coY2luZm8tPnJlZ2Jhc2UsIFZHQV9QRUxfSVcsIHJlZ251bSk7CiAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08gfHwgY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU080IHx8Ci0JICAgIGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUgfHwgY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgeworCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FIHx8IGNpbmZvLT5idHlwZSA9PSBCVF9HRDU0ODAgfHwKKwkgICAgY2luZm8tPmJ0eXBlID09IEJUX1NENjQgfHwgaXNfbGFndW5hKGNpbmZvKSkgewogCQkvKiBidXQgREFDIGRhdGEgcmVnaXN0ZXIgSVMsIGF0IGxlYXN0IGZvciBQaWNhc3NvIElJICovCiAJCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfUElDQVNTTykKIAkJCWRhdGEgKz0gMHhmZmY7CkBAIC0yNzAyLDkgKzI2MDksOCBAQAogLyogRklYTUU6IHVzZSBpbnRlcnJ1cHRzIGluc3RlYWQgKi8KIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX1dhaXRCTFQodTggX19pb21lbSAqcmVnYmFzZSkKIHsKLQkvKiBub3cgYnVzeS13YWl0IHVudGlsIHdlJ3JlIGRvbmUgKi8KIAl3aGlsZSAodmdhX3JnZngocmVnYmFzZSwgQ0xfR1IzMSkgJiAweDA4KQotCQkvKiBkbyBub3RoaW5nICovIDsKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNzEzLDYwICsyNjE5LDEyIEBACiAJcGVyZm9ybSBhY2NlbGVyYXRlZCAic2Nyb2xsaW5nIgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGNpcnJ1c2ZiX0JpdEJMVCh1OCBfX2lvbWVtICpyZWdiYXNlLCBpbnQgYml0c19wZXJfcGl4ZWwsCi0JCQkgICAgdV9zaG9ydCBjdXJ4LCB1X3Nob3J0IGN1cnksCi0JCQkgICAgdV9zaG9ydCBkZXN0eCwgdV9zaG9ydCBkZXN0eSwKLQkJCSAgICB1X3Nob3J0IHdpZHRoLCB1X3Nob3J0IGhlaWdodCwKLQkJCSAgICB1X3Nob3J0IGxpbmVfbGVuZ3RoKQorc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X2JsaXR0ZXIodTggX19pb21lbSAqcmVnYmFzZSwKKwkJCSAgICB1X3Nob3J0IG53aWR0aCwgdV9zaG9ydCBuaGVpZ2h0LAorCQkJICAgIHVfbG9uZyBuc3JjLCB1X2xvbmcgbmRlc3QsCisJCQkgICAgdV9zaG9ydCBibHRtb2RlLCB1X3Nob3J0IGxpbmVfbGVuZ3RoKQorCiB7Ci0JdV9zaG9ydCBud2lkdGgsIG5oZWlnaHQ7Ci0JdV9sb25nIG5zcmMsIG5kZXN0OwotCXVfY2hhciBibHRtb2RlOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JbndpZHRoID0gd2lkdGggLSAxOwotCW5oZWlnaHQgPSBoZWlnaHQgLSAxOwotCi0JYmx0bW9kZSA9IDB4MDA7Ci0JLyogaWYgc291cmNlIGFkciA8IGRlc3QgYWRkciwgZG8gdGhlIEJsdCBiYWNrd2FyZHMgKi8KLQlpZiAoY3VyeSA8PSBkZXN0eSkgewotCQlpZiAoY3VyeSA9PSBkZXN0eSkgewotCQkJLyogaWYgc3JjIGFuZCBkZXN0IGFyZSBvbiB0aGUgc2FtZSBsaW5lLCBjaGVjayB4ICovCi0JCQlpZiAoY3VyeCA8IGRlc3R4KQotCQkJCWJsdG1vZGUgfD0gMHgwMTsKLQkJfSBlbHNlCi0JCQlibHRtb2RlIHw9IDB4MDE7Ci0JfQotCWlmICghYmx0bW9kZSkgewotCQkvKiBzdGFuZGFyZCBjYXNlOiBmb3J3YXJkIGJsaXR0aW5nICovCi0JCW5zcmMgPSAoY3VyeSAqIGxpbmVfbGVuZ3RoKSArIGN1cng7Ci0JCW5kZXN0ID0gKGRlc3R5ICogbGluZV9sZW5ndGgpICsgZGVzdHg7Ci0JfSBlbHNlIHsKLQkJLyogdGhpcyBtZWFucyBzdGFydCBhZGRyZXNzZXMgYXJlIGF0IHRoZSBlbmQsCi0JCSAqIGNvdW50aW5nIGJhY2t3YXJkcwotCQkgKi8KLQkJbnNyYyA9IGN1cnkgKiBsaW5lX2xlbmd0aCArIGN1cnggKwotCQkJbmhlaWdodCAqIGxpbmVfbGVuZ3RoICsgbndpZHRoOwotCQluZGVzdCA9IGRlc3R5ICogbGluZV9sZW5ndGggKyBkZXN0eCArCi0JCQluaGVpZ2h0ICogbGluZV9sZW5ndGggKyBud2lkdGg7Ci0JfQotCi0JLyoKLQkgICBydW4tZG93biBvZiByZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZDoKLQkgICBkZXN0aW5hdGlvbiBwaXRjaAotCSAgIHNvdXJjZSBwaXRjaAotCSAgIEJMVCB3aWR0aC9oZWlnaHQKLQkgICBzb3VyY2Ugc3RhcnQKLQkgICBkZXN0aW5hdGlvbiBzdGFydAotCSAgIEJMVCBtb2RlCi0JICAgQkxUIFJPUAotCSAgIFZHQV9HRlhfU1JfVkFMVUUgLyBWR0FfR0ZYX1NSX0VOQUJMRTogImZpbGwgY29sb3IiCi0JICAgc3RhcnQvc3RvcAotCSAqLwotCi0JY2lycnVzZmJfV2FpdEJMVChyZWdiYXNlKTsKLQogCS8qIHBpdGNoOiBzZXQgdG8gbGluZV9sZW5ndGggKi8KIAkvKiBkZXN0IHBpdGNoIGxvdyAqLwogCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjQsIGxpbmVfbGVuZ3RoICYgMHhmZik7CkBAIC0yODEzLDggKzI2NzEsNTAgQEAKIAogCS8qIGFuZCBmaW5hbGx5OiBHTyEgKi8KIAl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMxLCAweDAyKTsJLyogQkxUIFN0YXJ0L3N0YXR1cyAqLworfQogCi0JRFBSSU5USygiRVhJVFxuIik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCWNpcnJ1c2ZiX0JpdEJMVCgpCisKKwlwZXJmb3JtIGFjY2VsZXJhdGVkICJzY3JvbGxpbmciCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY2lycnVzZmJfQml0QkxUKHU4IF9faW9tZW0gKnJlZ2Jhc2UsIGludCBiaXRzX3Blcl9waXhlbCwKKwkJCSAgICB1X3Nob3J0IGN1cngsIHVfc2hvcnQgY3VyeSwKKwkJCSAgICB1X3Nob3J0IGRlc3R4LCB1X3Nob3J0IGRlc3R5LAorCQkJICAgIHVfc2hvcnQgd2lkdGgsIHVfc2hvcnQgaGVpZ2h0LAorCQkJICAgIHVfc2hvcnQgbGluZV9sZW5ndGgpCit7CisJdV9zaG9ydCBud2lkdGggPSB3aWR0aCAtIDE7CisJdV9zaG9ydCBuaGVpZ2h0ID0gaGVpZ2h0IC0gMTsKKwl1X2xvbmcgbnNyYywgbmRlc3Q7CisJdV9jaGFyIGJsdG1vZGU7CisKKwlibHRtb2RlID0gMHgwMDsKKwkvKiBpZiBzb3VyY2UgYWRyIDwgZGVzdCBhZGRyLCBkbyB0aGUgQmx0IGJhY2t3YXJkcyAqLworCWlmIChjdXJ5IDw9IGRlc3R5KSB7CisJCWlmIChjdXJ5ID09IGRlc3R5KSB7CisJCQkvKiBpZiBzcmMgYW5kIGRlc3QgYXJlIG9uIHRoZSBzYW1lIGxpbmUsIGNoZWNrIHggKi8KKwkJCWlmIChjdXJ4IDwgZGVzdHgpCisJCQkJYmx0bW9kZSB8PSAweDAxOworCQl9IGVsc2UKKwkJCWJsdG1vZGUgfD0gMHgwMTsKKwl9CisJLyogc3RhbmRhcmQgY2FzZTogZm9yd2FyZCBibGl0dGluZyAqLworCW5zcmMgPSAoY3VyeSAqIGxpbmVfbGVuZ3RoKSArIGN1cng7CisJbmRlc3QgPSAoZGVzdHkgKiBsaW5lX2xlbmd0aCkgKyBkZXN0eDsKKwlpZiAoYmx0bW9kZSkgeworCQkvKiB0aGlzIG1lYW5zIHN0YXJ0IGFkZHJlc3NlcyBhcmUgYXQgdGhlIGVuZCwKKwkJICogY291bnRpbmcgYmFja3dhcmRzCisJCSAqLworCQluc3JjICs9IG5oZWlnaHQgKiBsaW5lX2xlbmd0aCArIG53aWR0aDsKKwkJbmRlc3QgKz0gbmhlaWdodCAqIGxpbmVfbGVuZ3RoICsgbndpZHRoOworCX0KKworCWNpcnJ1c2ZiX1dhaXRCTFQocmVnYmFzZSk7CisKKwljaXJydXNmYl9zZXRfYmxpdHRlcihyZWdiYXNlLCBud2lkdGgsIG5oZWlnaHQsCisJCQkgICAgbnNyYywgbmRlc3QsIGJsdG1vZGUsIGxpbmVfbGVuZ3RoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4MjUsNzkgKzI3MjUsMzcgQEAKIAogc3RhdGljIHZvaWQgY2lycnVzZmJfUmVjdEZpbGwodTggX19pb21lbSAqcmVnYmFzZSwgaW50IGJpdHNfcGVyX3BpeGVsLAogCQkgICAgIHVfc2hvcnQgeCwgdV9zaG9ydCB5LCB1X3Nob3J0IHdpZHRoLCB1X3Nob3J0IGhlaWdodCwKLQkJICAgICB1X2NoYXIgY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgpCisJCSAgICAgdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgsCisJCSAgICAgdV9jaGFyIGJsaXRtb2RlKQogewotCXVfc2hvcnQgbndpZHRoLCBuaGVpZ2h0OwotCXVfbG9uZyBuZGVzdDsKKwl1X2xvbmcgbmRlc3QgPSAoeSAqIGxpbmVfbGVuZ3RoKSArIHg7CiAJdV9jaGFyIG9wOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JbndpZHRoID0gd2lkdGggLSAxOwotCW5oZWlnaHQgPSBoZWlnaHQgLSAxOwotCi0JbmRlc3QgPSAoeSAqIGxpbmVfbGVuZ3RoKSArIHg7Ci0KIAljaXJydXNmYl9XYWl0QkxUKHJlZ2Jhc2UpOwogCi0JLyogcGl0Y2g6IHNldCB0byBsaW5lX2xlbmd0aCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjQsIGxpbmVfbGVuZ3RoICYgMHhmZik7CS8qIGRlc3QgcGl0Y2ggbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyNSwgbGluZV9sZW5ndGggPj4gOCk7CS8qIGRlc3QgcGl0Y2ggaGkgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjI2LCBsaW5lX2xlbmd0aCAmIDB4ZmYpOwkvKiBzb3VyY2UgcGl0Y2ggbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyNywgbGluZV9sZW5ndGggPj4gOCk7CS8qIHNvdXJjZSBwaXRjaCBoaSAqLwotCi0JLyogQkxUIHdpZHRoOiBhY3R1YWwgbnVtYmVyIG9mIHBpeGVscyAtIDEgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjIwLCBud2lkdGggJiAweGZmKTsJLyogQkxUIHdpZHRoIGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjEsIG53aWR0aCA+PiA4KTsJLyogQkxUIHdpZHRoIGhpICovCi0KLQkvKiBCTFQgaGVpZ2h0OiBhY3R1YWwgbnVtYmVyIG9mIGxpbmVzIC0xICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyMiwgbmhlaWdodCAmIDB4ZmYpOwkvKiBCTFQgaGVpZ2h0IGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjMsIG5oZWlnaHQgPj4gOCk7CS8qIEJMVCB3aWR0aCBoaSAqLwotCi0JLyogQkxUIGRlc3RpbmF0aW9uICovCi0JLyogQkxUIGRlc3QgbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyOCwgKHVfY2hhcikgKG5kZXN0ICYgMHhmZikpOwotCS8qIEJMVCBkZXN0IG1pZCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjksICh1X2NoYXIpIChuZGVzdCA+PiA4KSk7Ci0JLyogQkxUIGRlc3QgaGkgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjJBLCAodV9jaGFyKSAobmRlc3QgPj4gMTYpKTsKLQotCS8qIEJMVCBzb3VyY2U6IHNldCB0byAwIChpcyBhIGR1bW15IGhlcmUgYW55d2F5KSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkMsIDB4MDApOwkvKiBCTFQgc3JjIGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkQsIDB4MDApOwkvKiBCTFQgc3JjIG1pZCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkUsIDB4MDApOwkvKiBCTFQgc3JjIGhpICovCi0KIAkvKiBUaGlzIGlzIGEgQ29sb3JFeHBhbmQgQmx0LCB1c2luZyB0aGUgKi8KIAkvKiBzYW1lIGNvbG9yIGZvciBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9WQUxVRSwgY29sb3IpOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9FTkFCTEUsIGNvbG9yKTsJLyogYmFja2dyb3VuZCBjb2xvciAqLworCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfU1JfVkFMVUUsIGJnX2NvbG9yKTsKKwl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX1NSX0VOQUJMRSwgZmdfY29sb3IpOwogCi0Jb3AgPSAweGMwOwotCWlmIChiaXRzX3Blcl9waXhlbCA9PSAxNikgewotCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjEwLCBjb2xvcik7CS8qIGZvcmVncm91bmQgY29sb3IgKi8KLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMSwgY29sb3IpOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCW9wID0gMHg1MDsKLQkJb3AgPSAweGQwOwotCX0gZWxzZSBpZiAoYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMCwgY29sb3IpOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTEsIGNvbG9yKTsJLyogYmFja2dyb3VuZCBjb2xvciAqLwotCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjEyLCBjb2xvcik7CS8qIGZvcmVncm91bmQgY29sb3IgKi8KLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMywgY29sb3IpOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTQsIDApOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTUsIDApOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCW9wID0gMHg1MDsKLQkJb3AgPSAweGYwOworCW9wID0gMHg4MDsKKwlpZiAoYml0c19wZXJfcGl4ZWwgPj0gMTYpIHsKKwkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMCwgYmdfY29sb3IgPj4gOCk7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTEsIGZnX2NvbG9yID4+IDgpOworCQlvcCA9IDB4OTA7CiAJfQotCS8qIEJMVCBtb2RlOiBjb2xvciBleHBhbmQsIEVuYWJsZSA4eDggY29weSAoZmFzdGVyPykgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMwLCBvcCk7CS8qIEJMVCBtb2RlICovCi0KLQkvKiBCTFQgUk9QOiBTcmNDb3B5ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IzMiwgMHgwZCk7CS8qIEJMVCBST1AgKi8KLQotCS8qIGFuZCBmaW5hbGx5OiBHTyEgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMxLCAweDAyKTsJLyogQkxUIFN0YXJ0L3N0YXR1cyAqLwotCi0JRFBSSU5USygiRVhJVFxuIik7CisJaWYgKGJpdHNfcGVyX3BpeGVsID49IDI0KSB7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTIsIGJnX2NvbG9yID4+IDE2KTsKKwkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMywgZmdfY29sb3IgPj4gMTYpOworCQlvcCA9IDB4YTA7CisJfQorCWlmIChiaXRzX3Blcl9waXhlbCA9PSAzMikgeworCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjE0LCBiZ19jb2xvciA+PiAyNCk7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTUsIGZnX2NvbG9yID4+IDI0KTsKKwkJb3AgPSAweGIwOworCX0KKwljaXJydXNmYl9zZXRfYmxpdHRlcihyZWdiYXNlLCB3aWR0aCAtIDEsIGhlaWdodCAtIDEsCisJCQkgICAgMCwgbmRlc3QsIG9wIHwgYmxpdG1vZGUsIGxpbmVfbGVuZ3RoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTE3LDggKzI3NzUsNiBAQAogCSpkZW4gPSAwOwogCSpkaXYgPSAwOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCiAJaWYgKGZyZXEgPCA4MDAwKQogCQlmcmVxID0gODAwMDsKIApAQCAtMjk2MCwxMiArMjgxNiw2IEBACiAJCQl9CiAJCX0KIAl9Ci0KLQlEUFJJTlRLKCJCZXN0IHBvc3NpYmxlIHZhbHVlcyBmb3IgZ2l2ZW4gZnJlcXVlbmN5OlxuIik7Ci0JRFBSSU5USygiCWZyZXE6ICVsZCBrSHogIG5vbTogJWQgIGRlbjogJWQgIGRpdjogJWRcbiIsCi0JCWZyZXEsICpub20sICpkZW4sICpkaXYpOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5NzgsMzIgKzI4MjgsNiBAQAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCiAKIC8qKgotICogY2lycnVzZmJfZGJnX3ByaW50X2J5dGUKLSAqIEBuYW1lOiBuYW1lIGFzc29jaWF0ZWQgd2l0aCBieXRlIHZhbHVlIHRvIGJlIGRpc3BsYXllZAotICogQHZhbDogYnl0ZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqIERpc3BsYXkgYW4gaW5kZW50ZWQgc3RyaW5nLCBhbG9uZyB3aXRoIGEgaGV4aWRlY2ltYWwgYnl0ZSB2YWx1ZSwgYW5kCi0gKiBpdHMgZGVjb2RlZCBiaXRzLiAgQml0cyA3IHRocm91Z2ggMCBhcmUgbGlzdGVkIGluIGxlZnQtdG8tcmlnaHQKLSAqIG9yZGVyLgotICovCi0KLXN0YXRpYwotdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfYnl0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlEUFJJTlRLKCIlOHMgPSAweCUwMlggKGJpdHMgNy0wOiAlYyVjJWMlYyVjJWMlYyVjKVxuIiwKLQkJbmFtZSwgdmFsLAotCQl2YWwgJiAweDgwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDQwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDIwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDEwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDA4ID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDA0ID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDAyID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDAxID8gJzEnIDogJzAnKTsKLX0KLQotLyoqCiAgKiBjaXJydXNmYl9kYmdfcHJpbnRfcmVncwogICogQGJhc2U6IElmIHVzaW5nIG5ld21taW8sIHRoZSBuZXdtbWlvIGJhc2UgYWRkcmVzcywgb3RoZXJ3aXNlICVOVUxMCiAgKiBAcmVnX2NsYXNzOiB0eXBlIG9mIHJlZ2lzdGVycyB0byByZWFkOiAlQ1JULCBvciAlU0VRCkBAIC0zMDE0LDkgKzI4MzgsOSBAQAogICogdXNlZCBhdCB0aGUgZ2l2ZW4gQGJhc2UgYWRkcmVzcyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCiAgKi8KIAotc3RhdGljCi12b2lkIGNpcnJ1c2ZiX2RiZ19wcmludF9yZWdzKGNhZGRyX3QgcmVnYmFzZSwKLQkJCSAgICAgZW51bSBjaXJydXNmYl9kYmdfcmVnX2NsYXNzIHJlZ19jbGFzcywgLi4uKQorc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3ByaW50X3JlZ3Moc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgIGNhZGRyX3QgcmVnYmFzZSwKKwkJCQkgICAgZW51bSBjaXJydXNmYl9kYmdfcmVnX2NsYXNzIHJlZ19jbGFzcywgLi4uKQogewogCXZhX2xpc3QgbGlzdDsKIAl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CkBAIC0zMDQyLDcgKzI4NjYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQljaXJydXNmYl9kYmdfcHJpbnRfYnl0ZShuYW1lLCB2YWwpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiU4cyA9IDB4JTAyWFxuIiwgbmFtZSwgdmFsKTsKIAogCQluYW1lID0gdmFfYXJnKGxpc3QsIGNoYXIgKik7CiAJfQpAQCAtMzA1MSwxOCArMjg3NSw2IEBACiB9CiAKIC8qKgotICogY2lycnVzZmJfZHVtcAotICogQGNpcnJ1c2ZiaW5mbzoKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqLwotCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9kdW1wKHZvaWQpCi17Ci0JY2lycnVzZmJfZGJnX3JlZ19kdW1wKE5VTEwpOwotfQotCi0vKioKICAqIGNpcnJ1c2ZiX2RiZ19yZWdfZHVtcAogICogQGJhc2U6IElmIHVzaW5nIG5ld21taW8sIHRoZSBuZXdtbWlvIGJhc2UgYWRkcmVzcywgb3RoZXJ3aXNlICVOVUxMCiAgKgpAQCAtMzA3MiwxMiArMjg4NCwxMSBAQAogICogdXNlZCBhdCB0aGUgZ2l2ZW4gQGJhc2UgYWRkcmVzcyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCiAgKi8KIAotc3RhdGljCi12b2lkIGNpcnJ1c2ZiX2RiZ19yZWdfZHVtcChjYWRkcl90IHJlZ2Jhc2UpCitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcmVnX2R1bXAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNhZGRyX3QgcmVnYmFzZSkKIHsKLQlEUFJJTlRLKCJDSVJSVVNGQiBWR0EgQ1JUQyByZWdpc3RlciBkdW1wOlxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWR0EgQ1JUQyByZWdpc3RlciBkdW1wOlxuIik7CiAKLQljaXJydXNmYl9kYmdfcHJpbnRfcmVncyhyZWdiYXNlLCBDUlQsCisJY2lycnVzZmJfZGJnX3ByaW50X3JlZ3MoaW5mbywgcmVnYmFzZSwgQ1JULAogCQkJICAgIkNSMDAiLCAweDAwLAogCQkJICAgIkNSMDEiLCAweDAxLAogCQkJICAgIkNSMDIiLCAweDAyLApAQCAtMzEyNywxMSArMjkzOCwxMSBAQAogCQkJICAgIkNSM0YiLCAweDNGLAogCQkJICAgTlVMTCk7CiAKLQlEUFJJTlRLKCJcbiIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiXG4iKTsKIAotCURQUklOVEsoIkNJUlJVU0ZCIFZHQSBTRVEgcmVnaXN0ZXIgZHVtcDpcbiIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVkdBIFNFUSByZWdpc3RlciBkdW1wOlxuIik7CiAKLQljaXJydXNmYl9kYmdfcHJpbnRfcmVncyhyZWdiYXNlLCBTRVEsCisJY2lycnVzZmJfZGJnX3ByaW50X3JlZ3MoaW5mbywgcmVnYmFzZSwgU0VRLAogCQkJICAgIlNSMDAiLCAweDAwLAogCQkJICAgIlNSMDEiLCAweDAxLAogCQkJICAgIlNSMDIiLCAweDAyLApAQCAtMzE2MCw3ICsyOTcxLDcgQEAKIAkJCSAgICJTUjFGIiwgMHgxRiwKIAkJCSAgIE5VTEwpOwogCi0JRFBSSU5USygiXG4iKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIlxuIik7CiB9CiAKICNlbmRpZgkJCQkvKiBDSVJSVVNGQl9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCAxNjU3Yjk2Li4yY2Q1MDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMjk1NCw4ICsyOTU0LDExIEBACiAKIHN0YXRpYyBpbnQgZmJjb25fZmJfdW5yZWdpc3RlcmVkKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWludCBpLCBpZHggPSBpbmZvLT5ub2RlOworCWludCBpLCBpZHg7CiAKKwlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWR4ID0gaW5mby0+bm9kZTsKIAlmb3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspIHsKIAkJaWYgKGNvbjJmYl9tYXBbaV0gPT0gaWR4KQogCQkJY29uMmZiX21hcFtpXSA9IC0xOwpAQCAtMjk3OSwxMyArMjk4MiwxNCBAQAogCQl9CiAJfQogCi0JaWYgKCFudW1fcmVnaXN0ZXJlZF9mYikKLQkJdW5yZWdpc3Rlcl9jb25fZHJpdmVyKCZmYl9jb24pOwotCi0KIAlpZiAocHJpbWFyeV9kZXZpY2UgPT0gaWR4KQogCQlwcmltYXJ5X2RldmljZSA9IC0xOwogCisJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisKKwlpZiAoIW51bV9yZWdpc3RlcmVkX2ZiKQorCQl1bnJlZ2lzdGVyX2Nvbl9kcml2ZXIoJmZiX2Nvbik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAyMSw5ICszMDI1LDEzIEBACiAKIHN0YXRpYyBpbnQgZmJjb25fZmJfcmVnaXN0ZXJlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlpbnQgcmV0ID0gMCwgaSwgaWR4ID0gaW5mby0+bm9kZTsKKwlpbnQgcmV0ID0gMCwgaSwgaWR4OwogCisJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCisJCXJldHVybiAtRU5PREVWOworCWlkeCA9IGluZm8tPm5vZGU7CiAJZmJjb25fc2VsZWN0X3ByaW1hcnkoaW5mbyk7CisJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAKIAlpZiAoaW5mb19pZHggPT0gLTEpIHsKIAkJZm9yIChpID0gZmlyc3RfZmJfdmM7IGkgPD0gbGFzdF9mYl92YzsgaSsrKSB7CkBAIC0zMTI0LDcgKzMxMzIsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBmYmNvbl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCAKK3N0YXRpYyBpbnQgZmJjb25fZXZlbnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBmYl9ldmVudCAqZXZlbnQgPSBkYXRhOwpAQCAtMzEzMiw3ICszMTQwLDcgQEAKIAlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwogCXN0cnVjdCBmYl9jb24yZmJtYXAgKmNvbjJmYjsKIAlzdHJ1Y3QgZmJfYmxpdF9jYXBzICpjYXBzOwotCWludCByZXQgPSAwOworCWludCBpZHgsIHJldCA9IDA7CiAKIAkvKgogCSAqIGlnbm9yZSBhbGwgZXZlbnRzIGV4Y2VwdCBkcml2ZXIgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbgpAQCAtMzE0NCwyMyArMzE1Miw1NCBAQAogCiAJc3dpdGNoKGFjdGlvbikgewogCWNhc2UgRkJfRVZFTlRfU1VTUEVORDoKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJZmJjb25fc3VzcGVuZGVkKGluZm8pOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9SRVNVTUU6CisJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBkb25lOworCQl9CiAJCWZiY29uX3Jlc3VtZWQoaW5mbyk7CisJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX01PREVfQ0hBTkdFOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9tb2RlY2hhbmdlZChpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfTU9ERV9DSEFOR0VfQUxMOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9zZXRfYWxsX3ZjcyhpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfTU9ERV9ERUxFVEU6CiAJCW1vZGUgPSBldmVudC0+ZGF0YTsKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJcmV0ID0gZmJjb25fbW9kZV9kZWxldGVkKGluZm8sIG1vZGUpOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9GQl9VTkJJTkQ6Ci0JCXJldCA9IGZiY29uX2ZiX3VuYmluZChpbmZvLT5ub2RlKTsKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWR4ID0gaW5mby0+bm9kZTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisJCXJldCA9IGZiY29uX2ZiX3VuYmluZChpZHgpOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX0ZCX1JFR0lTVEVSRUQ6CiAJCXJldCA9IGZiY29uX2ZiX3JlZ2lzdGVyZWQoaW5mbyk7CkBAIC0zMTc4LDE3ICszMjE3LDMxIEBACiAJCWNvbjJmYi0+ZnJhbWVidWZmZXIgPSBjb24yZmJfbWFwW2NvbjJmYi0+Y29uc29sZSAtIDFdOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX0JMQU5LOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9mYl9ibGFua2VkKGluZm8sICooaW50ICopZXZlbnQtPmRhdGEpOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9ORVdfTU9ERUxJU1Q6CisJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBkb25lOworCQl9CiAJCWZiY29uX25ld19tb2RlbGlzdChpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfR0VUX1JFUToKIAkJY2FwcyA9IGV2ZW50LT5kYXRhOworCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9nZXRfcmVxdWlyZW1lbnQoaW5mbywgY2Fwcyk7CisJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlicmVhazsKIAl9Ci0KIGRvbmU6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3libGFmYi5jIGIvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDRiNzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjgzICswLDAgQEAKLS8qCi0gKiBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciBUcmlkZW50IEN5YmVyYmxhZGUvaTEgZ3JhcGhpY3MgY29yZQotICoKLSAqIENvcHlyaWdodCAyMDA1IEtudXQgUGV0ZXJzZW4gPEtudXRfUGV0ZXJzZW5AdC1vbmxpbmUuZGU+Ci0gKgotICogQ1JFRElUUzoKLSAqCXRyaWRlbnRmYi5jIGJ5IEphbmkgTW9ub3NlcwotICoJc2VlIGZpbGVzIGFib3ZlIGZvciBmdXJ0aGVyIGNyZWRpdHMKLSAqCi0gKi8KLQotI2RlZmluZSBDWUJMQUZCX0RFQlVHIDAKLSNkZWZpbmUgQ1lCTEFGQl9LRF9HUkFQSElDU19RVUlSSyAxCi0KLSNkZWZpbmUgQ1lCTEFGQl9QSVhNQVBTSVpFIDgxOTIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPHZpZGVvL2N5YmxhZmIuaD4KLQotI2RlZmluZSBWRVJTSU9OICIwLjYyIgotCi1zdHJ1Y3QgY3libGFmYl9wYXIgewotCXUzMiBwc2V1ZG9fcGFsWzE2XTsKLQlzdHJ1Y3QgZmJfb3BzIG9wczsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gY3libGFmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKLQkuaWQgPSAiQ3lCbGEiLAotCS50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAotCS54cGFuc3RlcCA9IDEsCi0JLnlwYW5zdGVwID0gMSwKLQkueXdyYXBzdGVwID0gMSwKLQkudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SLAotCS5hY2NlbCA9IEZCX0FDQ0VMX05PTkUsCi19OwotCi1zdGF0aWMgY2hhciAqbW9kZSBfX2RldmluaXRkYXRhID0gTlVMTDsKLXN0YXRpYyBpbnQgYnBwIF9fZGV2aW5pdGRhdGEgPSA4Owotc3RhdGljIGludCByZWYgX19kZXZpbml0ZGF0YSA9IDc1Owotc3RhdGljIGludCBmcCBfX2RldmluaXRkYXRhOwotc3RhdGljIGludCBjcnQgX19kZXZpbml0ZGF0YTsKLXN0YXRpYyBpbnQgbWVtc2l6ZSBfX2RldmluaXRkYXRhOwotCi1zdGF0aWMgaW50IGJhc2VzdHJpZGU7Ci1zdGF0aWMgaW50IHZlc2FmYjsKLXN0YXRpYyBpbnQgbmF0aXZleDsKLXN0YXRpYyBpbnQgY2VudGVyOwotc3RhdGljIGludCBzdHJldGNoOwotc3RhdGljIGludCBwY2l3YiA9IDE7Ci1zdGF0aWMgaW50IHBjaXJiID0gMTsKLXN0YXRpYyBpbnQgcGNpd3IgPSAxOwotc3RhdGljIGludCBwY2lyciA9IDE7Ci1zdGF0aWMgaW50IGRpc2FibGVkOwotc3RhdGljIGludCB2ZXJib3NpdHk7Ci1zdGF0aWMgaW50IGRpc3BsYXl0eXBlOwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICppb192aXJ0OwkvLyBpb3NwYWNlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLQotbW9kdWxlX3BhcmFtKG1vZGUsIGNoYXJwLCAwKTsKLW1vZHVsZV9wYXJhbShicHAsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocmVmLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGZwLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGNydCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShuYXRpdmV4LCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGNlbnRlciwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShzdHJldGNoLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXdiLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXJiLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXdyLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXJyLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKG1lbXNpemUsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0odmVyYm9zaXR5LCBpbnQsIDApOwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gV2VsbCwgd2UgaGF2ZSB0byBmaXggdGhlIHVwcGVyIGxheWVycy4KLS8vIFVudGlsIHRoaXMgaGFzIGJlZW4gZG9uZSwgd2Ugd29yayBhcm91bmQKLS8vIHRoZSBidWdzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmIChDWUJMQUZCX0tEX0dSQVBISUNTX1FVSVJLICYmIENZQkxBRkJfREVCVUcpCi0JaWYgKGRpc2FibGVkKSB7IFwKLQkJcHJpbnRrKCIqKioqKioqKlxuIik7XAotCQlkdW1wX3N0YWNrKCk7XAotCQlyZXR1cm4gdmFsO1wKLQl9Ci0KLSNlbGlmIENZQkxBRkJfS0RfR1JBUEhJQ1NfUVVJUksKLSNkZWZpbmUgS0RfR1JBUEhJQ1NfUkVUVVJOKHZhbClcCi0JaWYgKGRpc2FibGVkKSB7XAotCQlyZXR1cm4gdmFsO1wKLQl9Ci0jZWxzZQotI2RlZmluZSBLRF9HUkFQSElDU19SRVRVUk4odmFsKQotI2VuZGlmCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBQb3J0IGFjY2VzcyBtYWNyb3MgZm9yIG1lbW9yeSBtYXBwZWQgaW8KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNkZWZpbmUgb3V0OChyLCB2KSB3cml0ZWIodiwgaW9fdmlydCArIHIpCi0jZGVmaW5lIG91dDMyKHIsIHYpIHdyaXRlbCh2LCBpb192aXJ0ICsgcikKLSNkZWZpbmUgaW44KHIpIHJlYWRiKGlvX3ZpcnQgKyByKQotI2RlZmluZSBpbjMyKHIpIHJlYWRsKGlvX3ZpcnQgKyByKQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gSGFyZHdhcmUgYWNjZXNzIGlubGluZSBmdW5jdGlvbnMKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNYNCh1MzIgcmVnKQotewotCW91dDgoMHgzRDQsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNENSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNDNCh1MzIgcmVnKQotewotCW91dDgoMHgzQzQsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNDNSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNDRSh1MzIgcmVnKQotewotCW91dDgoMHgzQ0UsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNDRik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZTNYNCh1MzIgcmVnLCB1OCB2YWwpCi17Ci0Jb3V0OCgweDNENCwgcmVnKTsKLQlvdXQ4KDB4M0Q1LCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUzQzQodTMyIHJlZywgdTggdmFsKQotewotCW91dDgoMHgzQzQsIHJlZyk7Ci0Jb3V0OCgweDNDNSwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlM0NFKHUzMiByZWcsIHU4IHZhbCkKLXsKLQlvdXQ4KDB4M0NFLCByZWcpOwotCW91dDgoMHgzQ0YsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZTNDMCh1MzIgcmVnLCB1OCB2YWwpCi17Ci0JaW44KDB4M0RBKTsJCS8vIHJlYWQgdG8gcmVzZXQgaW5kZXgKLQlvdXQ4KDB4M0MwLCByZWcpOwotCW91dDgoMHgzQzAsIHZhbCk7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEVuYWJsZSBtZW1vcnkgbWFwcGVkIGlvIGFuZCB1bnByb3RlY3QgcmVnaXN0ZXJzCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9tbWlvKHZvaWQpCi17Ci0JdTggdG1wOwotCi0Jb3V0YigweDBCLCAweDNDNCk7Ci0JaW5iKDB4M0M1KTsJCS8vIFNldCBORVcgbW9kZQotCW91dGIoU1IwRSwgMHgzQzQpOwkvLyB3cml0ZSBlbmFibGUgYSBsb3Qgb2YgZXh0ZW5kZWQgcG9ydHMKLQlvdXRiKDB4ODAsIDB4M0M1KTsKLQotCW91dGIoU1IxMSwgMHgzQzQpOwkvLyB3cml0ZSBlbmFibGUgdGhvc2UgZXh0ZW5kZWQgcG9ydHMgdGhhdAotCW91dGIoMHg4NywgMHgzQzUpOwkvLyBhcmUgbm90IGFmZmVjdGVkIGJ5IFNSMEVfTmV3Ci0KLQlvdXRiKENSMUUsIDB4M2Q0KTsJLy8gY2xlYXIgd3JpdGUgcHJvdGVjdCBiaXQgZm9yIHBvcnQgMHgzYzIKLQl0bXAgPSBpbmIoMHgzZDUpICYgMHhCRjsKLQlvdXRiKENSMUUsIDB4M2Q0KTsKLQlvdXRiKHRtcCwgMHgzZDUpOwotCi0Jb3V0YihDUjM5LCAweDNENCk7Ci0Jb3V0YihpbmIoMHgzRDUpIHwgMHgwMSwgMHgzRDUpOyAvLyBFbmFibGUgbW1pbwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBTZXQgcGl4ZWwgY2xvY2sgVkNMSzEKLS8vIC0gbXVsdGlwbGllcnMgc2V0IGVsc3doZXJlCi0vLyAtIGZyZXEgaW4gdW5pdHMgb2YgMC4wMSBNSHoKLS8vCi0vLyBIYXJkd2FyZSBidWc6IFNSMTggPj0gMjUwIGlzIGJyb2tlbiBmb3IgdGhlCi0vLwkJIGN5YmVyYmxhZGUvaTEKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgc2V0X3ZjbGsoc3RydWN0IGN5YmxhZmJfcGFyICpwYXIsIGludCBmcmVxKQotewotCXUzMiBtLCBuLCBrOwotCWludCBmLCBmaSwgZCwgZGk7Ci0JdTggbG8gPSAwLCBoaSA9IDA7Ci0KLQlkID0gMjAwMDsKLQlrID0gZnJlcSA+PSAxMDAwMCA/IDAgOiBmcmVxID49IDUwMDAgPyAxIDogZnJlcSA+PSAyNTAwID8gMiA6IDM7Ci0JZm9yIChtID0gMDsgbSA8IDY0OyBtKyspCi0JCWZvciAobiA9IDA7IG4gPCAyNTA7IG4rKykgewotCQkJZmkgPSAoaW50KSgoKDU4NjQ3MjcgKiAobiArIDgpKSAvCi0JCQkJICAgICgobSArIDIpICogKDEgPDwgaykpKSA+PiAxMik7Ci0JCQlpZiAoKGRpID0gYWJzKGZpIC0gZnJlcSkpIDwgZCkgewotCQkJCWQgPSBkaTsKLQkJCQlmID0gZmk7Ci0JCQkJbG8gPSAodTgpIG47Ci0JCQkJaGkgPSAodTgpICgoayA8PCA2KSB8IG0pOwotCQkJfQotCQl9Ci0Jd3JpdGUzQzQoU1IxOSwgaGkpOwotCXdyaXRlM0M0KFNSMTgsIGxvKTsKLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJwaXhjbG9jayA9ICVkLiUwMmQgTUh6LCBrL20vbiAleCAleCAleFxuIiwKLQkJICAgICAgIGZyZXEgLyAxMDAsIGZyZXEgJSAxMDAsIChoaSAmIDB4YzApID4+IDYsIGhpICYgMHgzZiwgbG8pOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgR3JhcGhpY3MgRW5naW5lIChHRSkgc2V0dXAKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX3NldHVwX0dFKGludCBwaXRjaCwgaW50IGJwcCkKLXsKLQlLRF9HUkFQSElDU19SRVRVUk4oKTsKLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQliYXNlc3RyaWRlID0gKChwaXRjaCA+PiAzKSA8PCAyMCkgfCAoMCA8PCAyOSk7Ci0JCWJyZWFrOwotCWNhc2UgMTU6Ci0JCWJhc2VzdHJpZGUgPSAoKHBpdGNoID4+IDMpIDw8IDIwKSB8ICg1IDw8IDI5KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJYmFzZXN0cmlkZSA9ICgocGl0Y2ggPj4gMykgPDwgMjApIHwgKDEgPDwgMjkpOwotCQlicmVhazsKLQljYXNlIDI0OgotCWNhc2UgMzI6Ci0JCWJhc2VzdHJpZGUgPSAoKHBpdGNoID4+IDMpIDw8IDIwKSB8ICgyIDw8IDI5KTsKLQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGUzWDQoQ1IzNiwgMHg5MCk7CS8vIHJlc2V0IEdFCi0Jd3JpdGUzWDQoQ1IzNiwgMHg4MCk7CS8vIGVuYWJsZSBHRQotCW91dDMyKEdFMjQsIDEgPDwgNyk7CS8vIHJlc2V0IGFsbCBHRSBwb2ludGVycyBieSB0b2dnbGluZwotCW91dDMyKEdFMjQsIDApOyAJLy8gICBkNyBvZiBHRTI0Ci0Jd3JpdGUzWDQoQ1IyRCwgMHgwMCk7CS8vIEdFIFRpbWluaWdzLCBubyBkZWxheXMKLQlvdXQzMihHRTZDLCAwKTsgCS8vIFBhdHRlcm4gYW5kIFN0eWxlLCBwIDEyOSwgb2sKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBDeWJlcmJsYWRlIHNwZWNpZmljIHN5bmNpbmcKLS8vCi0vLyAgIEEgdGltZW91dCBtaWdodCBiZSBjYXVzZWQgYnkgZGlzYWJsZWQgbW1pby4KLS8vICAgQ2F1c2U6Ci0vLyAgICAgLSBiaXQgQ1IzOSAmIDEgPT0gMCB1cG9uIHJldHVybiwgWCB0cmlkZW50IGRyaXZlciBidWcKLS8vICAgICAtIGtkbSBidWcgKEtEX0dSQVBISUNTIG5vdCBzZXQgb24gZmlyc3Qgc3dpdGNoKQotLy8gICAgIC0ga2VybmVsIGRlc2lnbiBmbGF3IChpdCBiZWxpZXZlcyBpbiB0aGUgY29ycmVjdG5lc3MKLS8vCSBvZiBrZG0vWAotLy8gICBGaXJzdCB3ZSB0cnkgdG8gc3luYyBpZ25vcmluZyB0aGF0IHByb2JsZW0sIGFzIG1vc3Qgb2YgdGhlCi0vLyAgIHRpbWUgdGhhdCB3aWxsIHN1Y2NlZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBlbmFibGVfbW1pbygpCi0vLyAgIHdvdWxkIG9ubHkgZGVncmFkZSBwZXJmb3JtYW5jZS4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1MzIgc3RhdHVzLCBpID0gMTAwMDAwOwotCi0JS0RfR1JBUEhJQ1NfUkVUVVJOKDApOwotCi0Jd2hpbGUgKCgoc3RhdHVzID0gaW4zMihHRTIwKSkgJiAweEZlODAwMDAwKSAmJiBpICE9IDApCi0JCWktLTsKLQotCWlmIChpID09IDApIHsKLQkJZW5hYmxlX21taW8oKTsKLQkJaSA9IDEwMDAwMDA7Ci0JCXdoaWxlICgoKHN0YXR1cyA9IGluMzIoR0UyMCkpICYgMHhGQTgwMDAwMCkgJiYgaSAhPSAwKQotCQkJaS0tOwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlvdXRwdXQoIkdFIFRpbWVvdXQsIHN0YXR1czogJXhcbiIsIHN0YXR1cyk7Ci0JCQlpZiAoc3RhdHVzICYgMHg4MDAwMDAwMCkKLQkJCQlvdXRwdXQoIkJyZXNlbmhhbSBFbmdpbmUgOiBCdXN5XG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDQwMDAwMDAwKQotCQkJCW91dHB1dCgiU2V0dXAgRW5naW5lICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MjAwMDAwMDApCi0JCQkJb3V0cHV0KCJTUCAvIERQRSAgICAgICAgIDogQnVzeVxuIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgxMDAwMDAwMCkKLQkJCQlvdXRwdXQoIk1lbW9yeSBJbnRlcmZhY2UgOiBCdXN5XG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDA4MDAwMDAwKQotCQkJCW91dHB1dCgiQ29tIExzdCBQcm9jICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MDQwMDAwMDApCi0JCQkJb3V0cHV0KCJCbG9jayBXcml0ZSAgICAgIDogQnVzeVxuIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgwMjAwMDAwMCkKLQkJCQlvdXRwdXQoIkNvbW1hbmQgQnVmZmVyICAgOiBGdWxsXG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDAxMDAwMDAwKQotCQkJCW91dHB1dCgiUkVTRVJWRUQgICAgICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MDA4MDAwMDApCi0JCQkJb3V0cHV0KCJQQ0kgV3JpdGUgQnVmZmVyIDogQnVzeVxuIik7Ci0JCQljeWJsYWZiX3NldHVwX0dFKGluZm8tPnZhci54cmVzLAotCQkJCQkgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgZmlsbHJlY3QKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKmZyKQotewotCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIGNvbCwgZGVzdHksIGhlaWdodDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigpOwotCi0Jc3dpdGNoIChicHApIHsKLQlkZWZhdWx0OgotCWNhc2UgODoKLQkJY29sID0gZnItPmNvbG9yOwotCQljb2wgfD0gY29sIDw8IDg7Ci0JCWNvbCB8PSBjb2wgPDwgMTY7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ZyLT5jb2xvcl07Ci0JCWNvbCB8PSBjb2wgPDwgMTY7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ZyLT5jb2xvcl07Ci0JCWJyZWFrOwotCX0KLQotCWRlc3R5ID0gZnItPmR5OwotCWhlaWdodCA9IGZyLT5oZWlnaHQ7Ci0Jd2hpbGUgKGhlaWdodCkgewotCQlvdXQzMihHRUI4LCBiYXNlc3RyaWRlIHwgKChkZXN0eSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCQkgICBicHApID4+IDYpKTsKLQkJb3V0MzIoR0U2MCwgY29sKTsKLQkJb3V0MzIoR0U0OCwgZnItPnJvcCA/IDB4NjYgOiBST1BfUyk7Ci0JCW91dDMyKEdFNDQsIDB4MjAwMDAwMDAgfCAxIDw8IDE5IHwgMSA8PCA0IHwgMiA8PCAyKTsKLQkJb3V0MzIoR0UwOCwgcG9pbnQoZnItPmR4LCAwKSk7Ci0JCW91dDMyKEdFMEMsIHBvaW50KGZyLT5keCArIGZyLT53aWR0aCAtIDEsCi0JCQkJICBoZWlnaHQgPiA0MDk2ID8gNDA5NSA6IGhlaWdodCAtIDEpKTsKLQkJaWYgKGxpa2VseShoZWlnaHQgPD0gNDA5NikpCi0JCQlyZXR1cm47Ci0JCWRlc3R5ICs9IDQwOTY7Ci0JCWhlaWdodCAtPSA0MDk2OwotCX0KLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBDeWJlcmJsYWRlIHNwZWNpZmljIGNvcHlhcmVhCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBzaWxlbnRseSBhc3N1bWVzIHRoYXQgaXQgbmV2ZXIKLS8vIHdpbGwgYmUgY2FsbGVkIHdpdGggd2lkdGggb3IgaGVpZ2h0IGV4Y2VlZGluZwotLy8gNDA5Ni4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmNhKQotewotCXUzMiBzMSwgczIsIGQxLCBkMiwgZGlyZWN0aW9uOwotCi0JS0RfR1JBUEhJQ1NfUkVUVVJOKCk7Ci0KLQlzMSA9IHBvaW50KGNhLT5zeCwgMCk7Ci0JczIgPSBwb2ludChjYS0+c3ggKyBjYS0+d2lkdGggLSAxLCBjYS0+aGVpZ2h0IC0gMSk7Ci0JZDEgPSBwb2ludChjYS0+ZHgsIDApOwotCWQyID0gcG9pbnQoY2EtPmR4ICsgY2EtPndpZHRoIC0gMSwgY2EtPmhlaWdodCAtIDEpOwotCi0JaWYgKChjYS0+c3kgPiBjYS0+ZHkpIHx8ICgoY2EtPnN5ID09IGNhLT5keSkgJiYgKGNhLT5zeCA+IGNhLT5keCkpKQotCQlkaXJlY3Rpb24gPSAwOwotCWVsc2UKLQkJZGlyZWN0aW9uID0gMjsKLQotCW91dDMyKEdFQjgsIGJhc2VzdHJpZGUgfCAoKGNhLT5keSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgPj4gNikpOwotCW91dDMyKEdFQzgsIGJhc2VzdHJpZGUgfCAoKGNhLT5zeSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgPj4gNikpOwotCW91dDMyKEdFNDQsIDB4YTAwMDAwMDAgfCAxIDw8IDE5IHwgMSA8PCAyIHwgZGlyZWN0aW9uKTsKLQlvdXQzMihHRTAwLCBkaXJlY3Rpb24gPyBzMiA6IHMxKTsKLQlvdXQzMihHRTA0LCBkaXJlY3Rpb24gPyBzMSA6IHMyKTsKLQlvdXQzMihHRTA4LCBkaXJlY3Rpb24gPyBkMiA6IGQxKTsKLQlvdXQzMihHRTBDLCBkaXJlY3Rpb24gPyBkMSA6IGQyKTsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgaW1hZ2VibGl0Ci0vLwotLy8gQWNjZWxlcmF0ZWQgZm9yIHRoZSBtb3N0IHVzdWFsIGNhc2UsIGJsaXR0aW5nIDEgLSBiaXQgZGVlcAotLy8gY2hhcmFjdGVyIGltYWdlcy4gRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCB0byB0aGUgZ2VuZXJpYyBpbWFnZWJsaXQKLS8vIHVubGVzcyBpdCBpcyBzbyBpbnNhbmUgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gcHJpbnRrIGFuIGFsZXJ0LgotLy8KLS8vIEhhcmR3YXJlIGJ1ZzogX05ldmVyXyBibGl0IGFjcm9zcyBwaXhlbCBjb2x1bW4gMjA0OCwgdGhhdCB3aWxsIGxvY2sKLS8vIHRoZSBzeXN0ZW0uIFdlIHNwbGl0IHRob3NlIGJsaXQgcmVxdWVzdHMgaW50byB0aHJlZSBibGl0dGluZwotLy8gb3BlcmF0aW9ucy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB2b2lkIGN5YmxhZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKLXsKLQl1MzIgZmdjb2wsIGJnY29sOwotCXUzMiAqcGQgPSAodTMyICopIGltYWdlLT5kYXRhOwotCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0KLQlLRF9HUkFQSElDU19SRVRVUk4oKTsKLQotCS8vIFVzZWQgb25seSBmb3IgZHJhd2luZyB0aGUgcGVuZ3VpbmUgKGltYWdlLT5kZXB0aCA+IDEpCi0JaWYgKGltYWdlLT5kZXB0aCAhPSAxKSB7Ci0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQlyZXR1cm47Ci0JfQotCS8vIFRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGl0IHdvdWxkIGJlIGZhdGFsCi0JaWYgKGltYWdlLT53aWR0aCA9PSAwIHx8IGltYWdlLT5oZWlnaHQgPT0gMCkgewotCQlvdXRwdXQoImltYWdlYmxpdDogd2lkdGgvaGVpZ2h0IDAgZGV0ZWN0ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAotCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgewotCQlmZ2NvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07Ci0JCWJnY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQl9IGVsc2UgewotCQlmZ2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKLQkJYmdjb2wgPSBpbWFnZS0+YmdfY29sb3I7Ci0JfQotCi0Jc3dpdGNoIChicHApIHsKLQljYXNlIDg6Ci0JCWZnY29sIHw9IGZnY29sIDw8IDg7Ci0JCWJnY29sIHw9IGJnY29sIDw8IDg7Ci0JY2FzZSAxNjoKLQkJZmdjb2wgfD0gZmdjb2wgPDwgMTY7Ci0JCWJnY29sIHw9IGJnY29sIDw8IDE2OwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCW91dDMyKEdFQjgsIGJhc2VzdHJpZGUgfCAoKGltYWdlLT5keSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGJwcCkgPj4gNikpOwotCW91dDMyKEdFNjAsIGZnY29sKTsKLQlvdXQzMihHRTY0LCBiZ2NvbCk7Ci0KLQlpZiAoIShpbWFnZS0+ZHggPCAyMDQ4ICYmIChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGggLSAxKSA+PSAyMDQ4KSkgewotCQl1MzIgZGRzID0gKChpbWFnZS0+d2lkdGggKyAzMSkgPj4gNSkgKiBpbWFnZS0+aGVpZ2h0OwotCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQlvdXQzMihHRTA4LCBwb2ludChpbWFnZS0+ZHgsIDApKTsKLQkJb3V0MzIoR0UwQywgcG9pbnQoaW1hZ2UtPmR4ICsgaW1hZ2UtPndpZHRoIC0gMSwKLQkJCQkgIGltYWdlLT5oZWlnaHQgLSAxKSk7Ci0JCXdoaWxlIChkZHMtLSkKLQkJCW91dDMyKEdFOUMsICpwZCsrKTsKLQl9IGVsc2UgewotCQlpbnQgaSwgajsKLQkJdTMyIGRkc3RvdGFsID0gKGltYWdlLT53aWR0aCArIDMxKSA+PiA1OwotCQl1MzIgZGRzbGVmdCA9ICgyMDQ4IC0gaW1hZ2UtPmR4ICsgMzEpID4+IDU7Ci0JCXUzMiBza2lwbGVmdCA9IGRkc3RvdGFsIC0gZGRzbGVmdDsKLQotCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQlvdXQzMihHRTA4LCBwb2ludChpbWFnZS0+ZHgsIDApKTsKLQkJb3V0MzIoR0UwQywgcG9pbnQoMjA0OCAtIDEsIGltYWdlLT5oZWlnaHQgLSAxKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPCBkZHNsZWZ0OyBqKyspCi0JCQkJb3V0MzIoR0U5QywgKnBkKyspOwotCQkJcGQgKz0gc2tpcGxlZnQ7Ci0JCX0KLQotCQlpZiAoaW1hZ2UtPmR4ICUgMzIpIHsKLQkJCW91dDMyKEdFNDQsIDB4YTAwMDAwMDAgfCAxIDw8IDIwIHwgMSA8PCAxOSk7Ci0JCQlvdXQzMihHRTA4LCBwb2ludCgyMDQ4LCAwKSk7Ci0JCQlpZiAoaW1hZ2UtPndpZHRoID4gZGRzbGVmdCA8PCA1KQotCQkJCW91dDMyKEdFMEMsIHBvaW50KGltYWdlLT5keCArIChkZHNsZWZ0IDw8IDUpIC0KLQkJCQkJCSAgMSwgaW1hZ2UtPmhlaWdodCAtIDEpKTsKLQkJCWVsc2UKLQkJCQlvdXQzMihHRTBDLCBwb2ludChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGggLSAxLAotCQkJCQkJICBpbWFnZS0+aGVpZ2h0IC0gMSkpOwotCQkJcGQgPSAoKHUzMiAqKSBpbWFnZS0+ZGF0YSkgKyBkZHN0b3RhbCAtIHNraXBsZWZ0IC0gMTsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCQlvdXQzMihHRTlDLCBzd2FiMzIoc3dhYjMyKCpwZCkgPDwgKCgzMiAtCi0JCQkJCSAgICAoaW1hZ2UtPmR4ICYgMzEpKSAmIDMxKSkpOwotCQkJCXBkICs9IGRkc3RvdGFsOwotCQkJfQotCQl9Ci0KLQkJaWYgKHNraXBsZWZ0KSB7Ci0JCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQkJb3V0MzIoR0UwOCwgcG9pbnQoaW1hZ2UtPmR4ICsgKGRkc2xlZnQgPDwgNSksIDApKTsKLQkJCW91dDMyKEdFMEMsIHBvaW50KGltYWdlLT5keCArIGltYWdlLT53aWR0aCAtIDEsCi0JCQkJCSAgaW1hZ2UtPmhlaWdodCAtIDEpKTsKLQkJCXBkID0gKHUzMiAqKSBpbWFnZS0+ZGF0YTsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCQlwZCArPSBkZHNsZWZ0OwotCQkJCWZvciAoaiA9IDA7IGogPCBza2lwbGVmdDsgaisrKQotCQkJCQlvdXQzMihHRTlDLCAqcGQrKyk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIENoZWNrIGlmIHZpZGVvIG1vZGUgaXMgYWNjZXB0YWJsZS4gV2UgY2hhbmdlIHZhci0+Pz8/IGlmCi0vLyB2aWRlbyBtb2RlIGlzIHNsaWdodGx5IG9mZiBvciByZXR1cm4gZXJyb3Igb3RoZXJ3aXNlLgotLy8gaW5mby0+Pz8/IG11c3Qgbm90IGJlIGNoYW5nZWQhCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgY3libGFmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCWludCBicHAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwotCi0JLy8KLQkvLyB3ZSB0cnkgdG8gc3VwcG9ydCA4LCAxNiwgMjQgYW5kIDMyIGJwcCBtb2RlcywKLQkvLyBkZWZhdWx0IHRvIDgKLQkvLwotCS8vIHRoZXJlIGlzIGEgMjQgYnBwIG1vZGUsIGJ1dCBmb3Igbm93IHdlIGNoYW5nZSByZXF1ZXN0cyB0byAzMiBicHAKLQkvLyAoVGhpcyBpcyB3aGF0IHRyaWRlbnRmYiBkb2VzIC4uLiB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkKLQkvLwotCS8vCi0JaWYgKGJwcCAlIDggIT0gMCB8fCBicHAgPCA4IHx8IGJwcCA+IDMyKQotCQlicHAgPSA4OwotCWlmIChicHAgPT0gMjQpCi0JCWJwcCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKLQotCS8vCi0JLy8gaW50ZXJsYWNlZCBtb2RlcyBhcmUgYnJva2VuLCBmYWlsIGlmIG9uZSBpcyByZXF1ZXN0ZWQKLQkvLwotCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvLwotCS8vIGZhaWwgaWYgcmVxdWVzdGVkIHJlc29sdXRpb24gaXMgaGlnaGVyIHRoYW4gcGh5c2ljYWwKLQkvLyBmbGF0cGFuZWwgcmVzb2x1dGlvbgotCS8vCi0JaWYgKChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKSAmJiBuYXRpdmV4ICYmIHZhci0+eHJlcyA+IG5hdGl2ZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLy8KLQkvLyB3ZSBkbyBub3QgYWxsb3cgdmNsayB0byBleGNlZWQgMjMwIE1Iei4gSWYgdGhlIHJlcXVlc3RlZAotCS8vIHZjbGsgaXMgdG9vIGhpZ2gsIHdlIGRlZmF1bHQgdG8gMjAwIE1IegotCS8vCi0JaWYgKChicHAgPT0gMzIgPyAyMDAwMDAwMDAgOiAxMDAwMDAwMDApIC8gdmFyLT5waXhjbG9jayA+IDIzMDAwKQotCQl2YXItPnBpeGNsb2NrID0gKGJwcCA9PSAzMiA/IDIwMDAwMDAwMCA6IDEwMDAwMDAwMCkgLyAyMDAwMDsKLQotCS8vCi0JLy8gZW5mb3JjZSAoaHx2KXN5bmNfbGVuIGxpbWl0cwotCS8vCi0JdmFyLT5oc3luY19sZW4gJj0gfjc7Ci0JaWYodmFyLT5oc3luY19sZW4gPiAyNDgpCi0JCXZhci0+aHN5bmNfbGVuID0gMjQ4OwotCi0JdmFyLT52c3luY19sZW4gJj0gMTU7Ci0KLQkvLwotCS8vIEVuZm9yY2UgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgaGFyZHdhcmUgbGltaXRzLgotCS8vIDE2MDB4MTIwMCBpcyBtZW50aW9uZWQgYXMgYSBtYXhpbXVtLCBidXQgaGlnaGVyIHJlc29sdXRpb25zIGNvdWxkCi0JLy8gd29yayB3aXRoIHNsb3cgcmVmcmVzaCwgc21hbGwgbWFyZ2lucyBhbmQgc2hvcnQgc3luYy4KLQkvLwotCXZhci0+eHJlcyAmPSB+NzsKLQotCWlmICgoKHZhci0+eHJlcyArIHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnJpZ2h0X21hcmdpbiArCi0JCQl2YXItPmhzeW5jX2xlbikgPiAoYnBwID09IDMyID8gMjA0MCA6IDQwODgpKSB8fAotCQkJKCh2YXItPnlyZXMgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luICsKLQkJCXZhci0+dnN5bmNfbGVuKSA+IDIwNDcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgodmFyLT54cmVzID4gMTYwMCkgfHwgKHZhci0+eXJlcyA+IDEyMDApKQotCQlvdXRwdXQoIk1vZGUgJWR4JWQgZXhjZWVkcyBkb2N1bWVudGVkIGxpbWl0cy5cbiIsCi0JCQkJCSAgIHZhci0+eHJlcywgdmFyLT55cmVzKTsKLQkvLwotCS8vIHRyeSB0byBiZSBzbWFydCBhYm91dCAoeHx5KXJlc192aXJ0dWFsIHByb2JsZW1zLgotCS8vCi0JaWYgKHZhci0+eHJlcyA+IHZhci0+eHJlc192aXJ0dWFsKQotCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKLQlpZiAodmFyLT55cmVzID4gdmFyLT55cmVzX3ZpcnR1YWwpCi0JCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwotCi0JaWYgKGJwcCA9PSA4IHx8IGJwcCA9PSAxNikgewotCQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiA0MDg4KQotCQkJdmFyLT54cmVzX3ZpcnR1YWwgPSA0MDg4OwotCX0gZWxzZSB7Ci0JCWlmICh2YXItPnhyZXNfdmlydHVhbCA+IDIwNDApCi0JCQl2YXItPnhyZXNfdmlydHVhbCA9IDIwNDA7Ci0JfQotCXZhci0+eHJlc192aXJ0dWFsICY9IH43OwotCXdoaWxlICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsICogYnBwIC8gOCA+Ci0JICAgICAgIGluZm8tPmZpeC5zbWVtX2xlbikgewotCQlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPiB2YXItPnlyZXMpCi0JCQl2YXItPnlyZXNfdmlydHVhbC0tOwotCQllbHNlIGlmICh2YXItPnhyZXNfdmlydHVhbCA+IHZhci0+eHJlcykKLQkJCXZhci0+eHJlc192aXJ0dWFsIC09IDg7Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQl2YXItPnJlZC5vZmZzZXQgPSAwOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA2OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA2OwotCQlicmVhazsKLQljYXNlIDE2OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIFBhbiB0aGUgZGlzcGxheQotLy8KLS8vIFRoZSBkYXRhc2hlZXRzIGRlZmluZXMgY3J0IHN0YXJ0IGFkZHJlc3MgdG8gYmUgMjAgYml0cyB3aWRlIGFuZAotLy8gdG8gYmUgcHJvZ3JhbW1lZCB0byBDUjBDLCBDUjBELCBDUjFFIGFuZCBDUjI3LiBBY3R1YWxseSB0aGVyZSBpcwotLy8gQ1IyQls1XSBhcyBhbiB1bmRvY3VtZW50ZWQgZXh0ZW5zaW9uIGJpdC4gRXBpYSBCSU9TIDIuMDcgZG9lcyB1c2UKLS8vIGl0LCBzbyBpdCBpcyBhbHNvIHNhZmUgdG8gYmUgdXNlZCBoZXJlLiBCVFc6IGRhdGFzaGVldCBDUjBFIG9uIHBhZ2UKLS8vIDkwIHJlYWxseSBpcyBDUjFFLCB0aGUgcmVhbCBDUkUgaXMgZG9jdW1lbnRlZCBvbiBwYWdlIDcyLgotLy8KLS8vIEJVVDoKLS8vCi0vLyBBcyBvZiBpbnRlcm5hbCB2ZXJzaW9uIDAuNjAgd2UgZG8gbm90IHVzZSB2Z2EgcGFubmluZyBhbnkgbG9uZ2VyLgotLy8gVmdhIHBhbm5pbmcgZGlkIG5vdCBhbGxvdyB1cyB0aGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgdmlkZW8gbWVtb3J5Ci0vLyBhbmQgdGh1cyBwcmV2ZW50ZWQgeXdyYXAgc2Nyb2xsaW5nLiBXZSBkbyB1c2UgdGhlICJyaWdodCB2aWV3IgotLy8gcmVnaXN0ZXIgbm93LgotLy8KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JS0RfR1JBUEhJQ1NfUkVUVVJOKDApOwotCi0JaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0Jb3V0MzIoR0UxMCwgMHg4MDAwMDAwMCB8ICgodmFyLT54b2Zmc2V0ICsgKHZhci0+eW9mZnNldCAqCi0JCSAgICB2YXItPnhyZXNfdmlydHVhbCkpICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDMyKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBUaGlzIHdpbGwgcmVhbGx5IGhlbHAgaW4gY2FzZSBvZiBhIGJ1ZyAuLi4KLS8vIGR1bXAgbW9zdCBnYXBoaWNzIGNvcmUgcmVnaXN0ZXJzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgcmVnZHVtcChzdHJ1Y3QgY3libGFmYl9wYXIgKnBhcikKLXsKLQlpbnQgaTsKLQotCWlmICh2ZXJib3NpdHkgPCAyKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIlxuIik7Ci0JZm9yIChpID0gMDsgaSA8PSAweGZmOyBpKyspIHsKLQkJb3V0YihpLCAweDNkNCk7Ci0JCXByaW50aygiQ1IlMDJ4PSUwMnggIiwgaSwgaW5iKDB4M2Q1KSk7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0Jb3V0YigweDMwLCAweDNjZSk7Ci0Jb3V0YihpbmIoMHgzY2YpIHwgMHg0MCwgMHgzY2YpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxZjsgaSsrKSB7Ci0JCWlmIChpID09IDAgfHwgKGkgPiAyICYmIGkgPCA4KSB8fCBpID09IDB4MTAgfHwgaSA9PSAweDExCi0JCSAgICB8fCBpID09IDB4MTYpIHsKLQkJCW91dGIoaSwgMHgzZDQpOwotCQkJcHJpbnRrKCJDUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzZDUpKTsKLQkJfSBlbHNlCi0JCQlwcmludGsoIi0tLS0tLS0gIik7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCW91dGIoMHgzMCwgMHgzY2UpOwotCW91dGIoaW5iKDB4M2NmKSAmIDB4YmYsIDB4M2NmKTsKLQotCXByaW50aygiXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4N2Y7IGkrKykgewotCQlvdXRiKGksIDB4M2NlKTsKLQkJcHJpbnRrKCJHUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzY2YpKTsKLQkJaWYgKGkgJSAxNiA9PSAxNSkKLQkJCXByaW50aygiXG4iKTsKLQl9Ci0KLQlwcmludGsoIlxuIik7Ci0JZm9yIChpID0gMDsgaSA8PSAweGZmOyBpKyspIHsKLQkJb3V0YihpLCAweDNjNCk7Ci0JCXByaW50aygiU1IlMDJ4PSUwMnggIiwgaSwgaW5iKDB4M2M1KSk7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKCJcbiIpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxRjsgaSsrKSB7Ci0JCWluYigweDNkYSk7CS8vIG5leHQgYWNjZXNzIGlzIGluZGV4IQotCQlvdXRiKGksIDB4M2MwKTsKLQkJcHJpbnRrKCJBUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzYzEpKTsKLQkJaWYgKGkgJSAxNiA9PSAxNSkKLQkJCXByaW50aygiXG4iKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotCi0JaW5iKDB4M0RBKTsJCS8vIHJlc2V0IGludGVybmFsIGZsYWcgdG8gM2MwIGluZGV4Ci0Jb3V0YigweDIwLCAweDNDMCk7CS8vIGVuYWJsZSBhdHRyCi0KLQlyZXR1cm47Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBTYXZlIFN0YXRlCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgYSBzd2l0Y2ggdG8gS0RfVEVYVCBpcyBpbiBwcm9ncmVzcywKLS8vIGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgY3libGFmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBjeWJsYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoIlN3aXRjaGluZyB0byBLRF9URVhUXG4iKTsKLQlkaXNhYmxlZCA9IDA7Ci0JcmVnZHVtcChwYXIpOwotCWVuYWJsZV9tbWlvKCk7Ci0JcmV0dXJuOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gUmVzdG9yZSBTdGF0ZQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGEgc3dpdGNoIHRvIEtEX0dSQVBISUNTIGlzIGluIHByb2dyZXNzLAotLy8gV2UgaGF2ZSB0byB0dXJuIG9uIHZnYSBzdHlsZSBwYW5uaW5nIHJlZ2lzdGVycyBhZ2FpbiBiZWNhdXNlIHRoZQotLy8gdHJpZGVudCBkcml2ZXIgb2YgWCBkb2VzIG5vdCBrbm93IGFib3V0IEdFMTAuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaWYgKHZlcmJvc2l0eSA+IDApCi0JCW91dHB1dCgiU3dpdGNoaW5nIHRvIEtEX0dSQVBISUNTXG4iKTsKLQlvdXQzMihHRTEwLCAwKTsKLQlkaXNhYmxlZCA9IDE7Ci0JcmV0dXJuOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gU2V0IGhhcmR3YXJlIHRvIHJlcXVlc3RlZCB2aWRlbyBtb2RlCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY3libGFmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQl1MzIgaHRvdGFsLCBoZGlzcGVuZCwgaHN5bmNzdGFydCwgaHN5bmNlbmQsIGhibGFua3N0YXJ0LAotCSAgICBoYmxhbmtlbmQsIHByZWVuZGZldGNoLCB2dG90YWwsIHZkaXNwZW5kLCB2c3luY3N0YXJ0LAotCSAgICB2c3luY2VuZCwgdmJsYW5rc3RhcnQsIHZibGFua2VuZDsKLQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0JaW50IGJwcCA9IHZhci0+Yml0c19wZXJfcGl4ZWw7Ci0JaW50IGk7Ci0KLQlLRF9HUkFQSElDU19SRVRVUk4oMCk7Ci0KLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJTd2l0Y2hpbmcgdG8gbmV3IG1vZGU6ICIKLQkJICAgICAgICJmYnNldCAtZyAlZCAlZCAlZCAlZCAlZCAtdCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJICAgICAgIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPnhyZXNfdmlydHVhbCwKLQkJICAgICAgIHZhci0+eXJlc192aXJ0dWFsLCB2YXItPmJpdHNfcGVyX3BpeGVsLCB2YXItPnBpeGNsb2NrLAotCQkgICAgICAgdmFyLT5sZWZ0X21hcmdpbiwgdmFyLT5yaWdodF9tYXJnaW4sIHZhci0+dXBwZXJfbWFyZ2luLAotCQkgICAgICAgdmFyLT5sb3dlcl9tYXJnaW4sIHZhci0+aHN5bmNfbGVuLCB2YXItPnZzeW5jX2xlbik7Ci0KLQlodG90YWwgPSAodmFyLT54cmVzICsgdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+cmlnaHRfbWFyZ2luICsKLQkJICB2YXItPmhzeW5jX2xlbikgLyA4IC0gNTsKLQloZGlzcGVuZCA9IHZhci0+eHJlcyAvIDggLSAxOwotCWhzeW5jc3RhcnQgPSAodmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4pIC8gODsKLQloc3luY2VuZCA9IHZhci0+aHN5bmNfbGVuIC8gODsKLQloYmxhbmtzdGFydCA9IGhkaXNwZW5kICsgMTsKLQloYmxhbmtlbmQgPSBodG90YWwgKyAzOyAvLyBzaG91bGQgYmUgaHRvdGFsICsgNSwgYmlvcyBkb2VzIGl0IHRoaXMgd2F5Ci0JcHJlZW5kZmV0Y2ggPSAoKHZhci0+eHJlcyA+PiAzKSArIDEpICogKChicHAgKyAxKSA+PiAzKTsKLQotCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW4gKwotCQkJCQkJCXZhci0+dnN5bmNfbGVuIC0gMjsKLQl2ZGlzcGVuZCA9IHZhci0+eXJlcyAtIDE7Ci0JdnN5bmNzdGFydCA9IHZhci0+eXJlcyArIHZhci0+bG93ZXJfbWFyZ2luOwotCXZibGFua3N0YXJ0ID0gdmFyLT55cmVzOwotCXZibGFua2VuZCA9IHZ0b3RhbDsgLy8gc2hvdWxkIGJlIHZ0b3RhbCArIDIsIGJ1dCBiaW9zIGRvZXMgaXQgdGhpcyB3YXkKLQl2c3luY2VuZCA9IHZhci0+dnN5bmNfbGVuOwotCi0JZW5hYmxlX21taW8oKTsJCS8vIG5lY2Vzc2FyeSEgLi4uIGNoZWNrIFggLi4uCi0KLQl3cml0ZTNYNChDUjExLCByZWFkM1g0KENSMTEpICYgMHg3Rik7CS8vIHVubG9jayBjcjAwIC4uIGNyMDcKLQotCXdyaXRlM0NFKEdSMzAsIDgpOwotCi0JaWYgKChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKSAmJiB2YXItPnhyZXMgPCBuYXRpdmV4KSB7Ci0KLQkJLy8gc3RyZXRjaCBvciBjZW50ZXIgPwotCi0JCW91dDgoMHgzQzIsIDB4RUIpOwotCi0JCXdyaXRlM0NFKEdSMzAsIHJlYWQzQ0UoR1IzMCkgfCAweDgxKTsJLy8gc2hhZG93IG1vZGUgb24KLQotCQlpZiAoY2VudGVyKSB7Ci0JCQl3cml0ZTNDRShHUjUyLCAocmVhZDNDRShHUjUyKSAmIDB4N0MpIHwgMHg4MCk7Ci0JCQl3cml0ZTNDRShHUjUzLCAocmVhZDNDRShHUjUzKSAmIDB4N0MpIHwgMHg4MCk7Ci0JCX0gZWxzZSBpZiAoc3RyZXRjaCkgewotCQkJd3JpdGUzQ0UoR1I1RCwgMCk7Ci0JCQl3cml0ZTNDRShHUjUyLCAocmVhZDNDRShHUjUyKSAmIDB4N0MpIHwgMSk7Ci0JCQl3cml0ZTNDRShHUjUzLCAocmVhZDNDRShHUjUzKSAmIDB4N0MpIHwgMSk7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCW91dDgoMHgzQzIsIDB4MkIpOwotCQl3cml0ZTNDRShHUjMwLCA4KTsKLQl9Ci0KLQkvLwotCS8vIFNldHVwIENSeHggcmVncwotCS8vCi0KLQl3cml0ZTNYNChDUjAwLCBodG90YWwgJiAweEZGKTsKLQl3cml0ZTNYNChDUjAxLCBoZGlzcGVuZCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMDIsIGhibGFua3N0YXJ0ICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IwMywgaGJsYW5rZW5kICYgMHgxRik7Ci0Jd3JpdGUzWDQoQ1IwNCwgaHN5bmNzdGFydCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMDUsIChoc3luY2VuZCAmIDB4MUYpIHwgKChoYmxhbmtlbmQgJiAweDIwKSA8PCAyKSk7Ci0Jd3JpdGUzWDQoQ1IwNiwgdnRvdGFsICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IwNywgKHZ0b3RhbCAmIDB4MTAwKSA+PiA4IHwKLQkJICAgICAgICh2ZGlzcGVuZCAmIDB4MTAwKSA+PiA3IHwKLQkJICAgICAgICh2c3luY3N0YXJ0ICYgMHgxMDApID4+IDYgfAotCQkgICAgICAgKHZibGFua3N0YXJ0ICYgMHgxMDApID4+IDUgfAotCQkgICAgICAgMHgxMCB8Ci0JCSAgICAgICAodnRvdGFsICYgMHgyMDApID4+IDQgfAotCQkgICAgICAgKHZkaXNwZW5kICYgMHgyMDApID4+IDMgfCAodnN5bmNzdGFydCAmIDB4MjAwKSA+PiAyKTsKLQl3cml0ZTNYNChDUjA4LCAwKTsKLQl3cml0ZTNYNChDUjA5LCAodmJsYW5rc3RhcnQgJiAweDIwMCkgPj4gNCB8IDB4NDAgfAkvLyBGSVggISEhCi0JCSAgICAgICAoKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgPyAweDgwIDogMCkpOwotCXdyaXRlM1g0KENSMEEsIDApOwkvLyBJbml0IHRvIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0Ci0Jd3JpdGUzWDQoQ1IwQiwgMCk7CS8vIEluaXQgdG8gc29tZSByZWFzb25hYmxlIGRlZmF1bHQKLQl3cml0ZTNYNChDUjBDLCAwKTsJLy8gT2Zmc2V0IDAKLQl3cml0ZTNYNChDUjBELCAwKTsJLy8gT2Zmc2V0IDAKLQl3cml0ZTNYNChDUjBFLCAwKTsJLy8gSW5pdCB0byBzb21lIHJlYXNvbmFibGUgZGVmYXVsdAotCXdyaXRlM1g0KENSMEYsIDApOwkvLyBJbml0IHRvIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0Ci0Jd3JpdGUzWDQoQ1IxMCwgdnN5bmNzdGFydCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMTEsICh2c3luY2VuZCAmIDB4MEYpKTsKLQl3cml0ZTNYNChDUjEyLCB2ZGlzcGVuZCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMTMsICgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIGJwcCkgLyAoNCAqIDE2KSkgJiAweEZGKTsKLQl3cml0ZTNYNChDUjE0LCAweDQwKTsJLy8gZG91YmxlIHdvcmQgbW9kZQotCXdyaXRlM1g0KENSMTUsIHZibGFua3N0YXJ0ICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IxNiwgdmJsYW5rZW5kICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IxNywgMHhFMyk7Ci0Jd3JpdGUzWDQoQ1IxOCwgMHhGRik7Ci0JLy8JIENSMTk6IG5lZWRlZCBmb3IgaW50ZXJsYWNlZCBtb2RlcyAuLi4gaWdub3JlIGl0IGZvciBub3cKLQl3cml0ZTNYNChDUjFBLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDEKLQl3cml0ZTNYNChDUjFCLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDIKLQl3cml0ZTNYNChDUjFDLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDMKLQl3cml0ZTNYNChDUjFELCAweDAwKTsJLy8gRG9uJ3Qga25vdywgZG9lc24ndCBodXJ0IDsgLSkKLQl3cml0ZTNYNChDUjFFLCAoaW5mby0+dmFyLnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgPyAweDg0IDogMHg4MCk7Ci0JLy8JIENSMUY6IGRvIG5vdCBzZXQsIGNvbnRhaW5zIEJJT1MgaW5mbyBhYm91dCBtZW1zaXplCi0Jd3JpdGUzWDQoQ1IyMCwgMHgyMCk7CS8vIGVuYWJlIHdyIGJ1ZiwgZGlzYWJsZSAxNmJpdCBwbGFuYXIgbW9kZQotCXdyaXRlM1g0KENSMjEsIDB4MjApOwkvLyBlbmFibGUgbGluZWFyIG1lbW9yeSBhY2Nlc3MKLQkvLwkgQ1IyMjogUk8gY3B1IGxhdGNoIHJlYWRiYWNrCi0JLy8JIENSMjM6ID8/PwotCS8vCSBDUjI0OiBSTyBBUiBmbGFnIHN0YXRlCi0JLy8JIENSMjU6IFJBTURBQyBydyB0aW1pbmcsIHBjbGsgYnVmZmVyIHRyaXN0YXRlIGNvbnRyb2wgPz8/PwotCS8vCSBDUjI2OiA/Pz8KLQl3cml0ZTNYNChDUjI3LCAodmRpc3BlbmQgJiAweDQwMCkgPj4gNiB8Ci0JCSAgICAgICAodnN5bmNzdGFydCAmIDB4NDAwKSA+PiA1IHwKLQkJICAgICAgICh2YmxhbmtzdGFydCAmIDB4NDAwKSA+PiA0IHwKLQkJICAgICAgICh2dG90YWwgJiAweDQwMCkgPj4gMyB8Ci0JCSAgICAgICAweDgpOwotCS8vCSBDUjI4OiA/Pz8KLQl3cml0ZTNYNChDUjI5LCAocmVhZDNYNChDUjI5KSAmIDB4Q0YpIHwgKCgoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJYnBwKSAvICg0ICogMTYpKSAmIDB4MzAwKSA+PiA0KSk7Ci0Jd3JpdGUzWDQoQ1IyQSwgcmVhZDNYNChDUjJBKSB8IDB4NDApOwotCXdyaXRlM1g0KENSMkIsIChodG90YWwgJiAweDEwMCkgPj4gOCB8Ci0JCSAgICAgICAoaGRpc3BlbmQgJiAweDEwMCkgPj4gNyB8Ci0JCSAgICAgICAvLyAoMHgwMCAmIDB4MTAwKSA+PiA2IHwgICBoaW50ZXJsYWNlIHBhcmEgYml0IDggPz8/Ci0JCSAgICAgICAoaHN5bmNzdGFydCAmIDB4MTAwKSA+PiA1IHwKLQkJICAgICAgIChoYmxhbmtzdGFydCAmIDB4MTAwKSA+PiA0KTsKLQkvLwkgQ1IyQzogPz8/Ci0JLy8JIENSMkQ6IGluaXRpYWxpemVkIGluIGN5YmxhZmJfc2V0dXBfR0UoKQotCXdyaXRlM1g0KENSMkYsIDB4OTIpOwkvLyBjb25zZXJ2YXRpdmUsIGJldHRlciBzaWduYWwgcXVhbGl0eQotCS8vCSBDUjMwOiByZXNlcnZlZAotCS8vCSBDUjMxOiByZXNlcnZlZAotCS8vCSBDUjMyOiByZXNlcnZlZAotCS8vCSBDUjMzOiByZXNlcnZlZAotCS8vCSBDUjM0OiBkaXNhYmxlZCBpbiBDUjM2Ci0JLy8JIENSMzU6IGRpc2FibGVkIGluIENSMzYKLQkvLwkgQ1IzNjogaW5pdGlhbGl6ZWQgaW4gY3libGFmYl9zZXR1cF9HRQotCS8vCSBDUjM3OiBpMmMsIGlnbm9yZSBmb3Igbm93Ci0Jd3JpdGUzWDQoQ1IzOCwgKGJwcCA9PSA4KSA/IDB4MDAgOgkvLwotCQkgICAgICAgKGJwcCA9PSAxNikgPyAweDA1IDoJLy8gaGlnaGNvbG9yCi0JCSAgICAgICAoYnBwID09IDI0KSA/IDB4MjkgOgkvLyBwYWNrZWQgMjRiaXQgdHJ1ZWNvbG9yCi0JCSAgICAgICAoYnBwID09IDMyKSA/IDB4MDkgOiAwKTsgLy8gdHJ1ZWNvbG9yLCAxNiBiaXQgcGl4ZWxidXMKLQl3cml0ZTNYNChDUjM5LCAweDAxIHwJLy8gTU1JTyBlbmFibGUKLQkJICAgICAgIChwY2lyYiA/IDB4MDIgOiAwKSB8CS8vIHBjaSByZWFkIGJ1cnN0IGVuYWJsZQotCQkgICAgICAgKHBjaXdiID8gMHgwNCA6IDApKTsJLy8gcGNpIHdyaXRlIGJ1cnN0IGVuYWJsZQotCXdyaXRlM1g0KENSNTUsIDB4MUYgfCAvLyBwY2kgY2xvY2tzICogMiBmb3IgU1RPUCMgZHVyaW5nIDFzdCBkYXRhIHBoYXNlCi0JCSAgICAgICAocGNpcnIgPyAweDQwIDogMCkgfAkvLyBwY2kgcmVhZCByZXRyeSBlbmFibGUKLQkJICAgICAgIChwY2l3ciA/IDB4ODAgOiAwKSk7CS8vIHBjaSB3cml0ZSByZXRyeSBlbmFibGUKLQl3cml0ZTNYNChDUjU2LCBwcmVlbmRmZXRjaCA+PiA4IDwgMiA/IChwcmVlbmRmZXRjaCA+PiA4ICYgMHgwMSkgfCAyCi0JCQkJCSAgICA6IDApOwotCXdyaXRlM1g0KENSNTcsIHByZWVuZGZldGNoID4+IDggPCAyID8gcHJlZW5kZmV0Y2ggJiAweGZmIDogMCk7Ci0Jd3JpdGUzWDQoQ1I1OCwgMHg4Mik7CS8vIEJpb3MgZG9lcyB0aGlzIC4uLi4gZG9uJ3Qga25vdyBtb3JlCi0JLy8KLQkvLyBTZXR1cCBTUnh4IHJlZ3MKLQkvLwotCXdyaXRlM0M0KFNSMDAsIDMpOwotCXdyaXRlM0M0KFNSMDEsIDEpOwkvL3NldCBjaGFyIGNsb2NrIDggZG90cyB3aWRlCi0Jd3JpdGUzQzQoU1IwMiwgMHgwRik7CS8vZW5hYmxlIDQgbWFwcyBuZWVkZWQgaW4gY2hhaW40IG1vZGUKLQl3cml0ZTNDNChTUjAzLCAwKTsJLy9ubyBjaGFyYWN0ZXIgbWFwIHNlbGVjdAotCXdyaXRlM0M0KFNSMDQsIDB4MEUpOwkvL21lbW9yeSBtb2RlOiBleHQgbWVtLCBldmVuLCBjaGFpbjQKLQotCW91dDgoMHgzQzQsIDB4MGIpOwotCWluOCgweDNDNSk7CQkvLyBTZXQgTkVXIG1vZGUKLQl3cml0ZTNDNChTUjBELCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQotCXNldF92Y2xrKHBhciwgKGJwcCA9PSAzMiA/IDIwMDAwMDAwMCA6IDEwMDAwMDAwMCkKLQkJCQkJLyBpbmZvLT52YXIucGl4Y2xvY2spOwkvL1NSMTgsIFNSMTkKLQotCS8vCi0JLy8gU2V0dXAgR1J4eCByZWdzCi0JLy8KLQl3cml0ZTNDRShHUjAwLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAxLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAyLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAzLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjA0LCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjA1LCAweDQwKTsJLy8gbm8gQ0dBIGNvbXBhdCwgYWxsb3cgMjU2IGNvbAotCXdyaXRlM0NFKEdSMDYsIDB4MDUpOwkvLyBncmFwaGljcyBtb2RlCi0Jd3JpdGUzQ0UoR1IwNywgMHgwRik7CS8vIHBsYW5lcz8KLQl3cml0ZTNDRShHUjA4LCAweEZGKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjBGLCAoYnBwID09IDMyKSA/IDB4MUEgOiAweDEyKTsgLy8gdmNsayAvIDIgaWYgMzJicHAsIGNoYWluNAotCXdyaXRlM0NFKEdSMjAsIDB4QzApOwkvLyB0ZXN0IC4uLiBjaGVjawotCXdyaXRlM0NFKEdSMkYsIDB4QTApOwkvLyBQQ0xLID0gVkNMSywgbm8gc2tldywKLQotCS8vCi0JLy8gU2V0dXAgQVJ4eCByZWdzCi0JLy8KLQlmb3IgKGkgPSAwOyBpIDwgMHgxMDsgaSsrKQkvLyBzZXQgQVIwMCAuLiBBUjBmCi0JCXdyaXRlM0MwKGksIGkpOwotCXdyaXRlM0MwKEFSMTAsIDB4NDEpOwkvLyBncmFwaGljcyBtb2RlIGFuZCBzdXBwb3J0IDI1NiBjb2xvciBtb2RlcwotCXdyaXRlM0MwKEFSMTIsIDB4MEYpOwkvLyBwbGFuZXMKLQl3cml0ZTNDMChBUjEzLCAwKTsJLy8gaG9yaXpvbnRhbCBwZWwgcGFubmluZwotCWluOCgweDNEQSk7CQkvLyByZXNldCBpbnRlcm5hbCBmbGFnIHRvIDNjMCBpbmRleAotCW91dDgoMHgzQzAsIDB4MjApOwkvLyBlbmFibGUgYXR0cgotCi0JLy8KLQkvLyBTZXR1cCBoaWRkZW4gUkFNREFDIGNvbW1hbmQgcmVnaXN0ZXIKLQkvLwotCWluOCgweDNDOCk7CQkvLyB0aGVzZSByZWFkcyBhcmUKLQlpbjgoMHgzQzYpOwkJLy8gbmVjZXNzYXJ5IHRvCi0JaW44KDB4M0M2KTsJCS8vIHVubWFzayB0aGUgUkFNREFDCi0JaW44KDB4M0M2KTsJCS8vIGNvbW1hbmQgcmVnLCBvdGhlcndpc2UKLQlpbjgoMHgzQzYpOwkJLy8gd2Ugd291bGQgd3JpdGUgdGhlIHBpeGVsbWFzayByZWchCi0Jb3V0OCgweDNDNiwgKGJwcCA9PSA4KSA/IDB4MDAgOiAvLyAyNTYgY29sb3JzCi0JICAgICAoYnBwID09IDE1KSA/IDB4MTAgOgkvLwotCSAgICAgKGJwcCA9PSAxNikgPyAweDMwIDoJLy8gaGljb2xvcgotCSAgICAgKGJwcCA9PSAyNCkgPyAweEQwIDoJLy8gdHJ1ZWNvbG9yCi0JICAgICAoYnBwID09IDMyKSA/IDB4RDAgOiAwKTsJLy8gdHJ1ZWNvbG9yCi0JaW44KDB4M0M4KTsKLQotCS8vCi0JLy8gR1IzMSBpcyBub3QgbWVudGlvbmVkIGluIHRoZSBkYXRhc2hlZXQKLQkvLwotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQl3cml0ZTNDRShHUjMxLCAocmVhZDNDRShHUjMxKSAmIDB4OEYpIHwKLQkJCSAoKGluZm8tPnZhci55cmVzID4gMTAyNCkgPyAweDUwIDoKLQkJCSAgKGluZm8tPnZhci55cmVzID4gNzY4KSA/IDB4MzAgOgotCQkJICAoaW5mby0+dmFyLnlyZXMgPiA2MDApID8gMHgyMCA6Ci0JCQkgIChpbmZvLT52YXIueXJlcyA+IDQ4MCkgPyAweDEwIDogMCkpOwotCi0JaW5mby0+Zml4LnZpc3VhbCA9IChicHAgPT0gOCkgPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IKLQkJCQkgICAgICA6IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIChicHAgPj4gMyk7Ci0JaW5mby0+Y21hcC5sZW4gPSAoYnBwID09IDgpID8gMjU2IDogMTY7Ci0KLQkvLwotCS8vIGluaXQgYWNjZWxlcmF0aW9uIGVuZ2luZQotCS8vCi0JY3libGFmYl9zZXR1cF9HRShpbmZvLT52YXIueHJlc192aXJ0dWFsLCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwotCi0JLy8KLQkvLyBTZXQvY2xlYXIgZmxhZ3MgdG8gYWxsb3cgcHJvcGVyIHNjcm9sbCBtb2RlIHNlbGVjdGlvbi4KLQkvLwotCWlmICh2YXItPnhyZXMgPT0gdmFyLT54cmVzX3ZpcnR1YWwpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9YUEFOOwotCWVsc2UKLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfWFBBTjsKLQotCWlmICh2YXItPnlyZXMgPT0gdmFyLT55cmVzX3ZpcnR1YWwpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9ZUEFOOwotCWVsc2UKLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfWVBBTjsKLQotCWlmIChpbmZvLT5maXguc21lbV9sZW4gIT0KLQkgICAgdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqIGJwcCAvIDgpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9ZV1JBUDsKLQllbHNlCi0JCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX1lXUkFQOwotCi0JcmVnZHVtcChwYXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gU2V0IG9uZSBjb2xvciByZWdpc3RlcgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgY3libGFmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaW50IGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigwKTsKLQotCWlmIChyZWdubyA+PSBpbmZvLT5jbWFwLmxlbikKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYnBwID09IDgpIHsKLQkJb3V0OCgweDNDNiwgMHhGRik7Ci0JCW91dDgoMHgzQzgsIHJlZ25vKTsKLQkJb3V0OCgweDNDOSwgcmVkID4+IDEwKTsKLQkJb3V0OCgweDNDOSwgZ3JlZW4gPj4gMTApOwotCQlvdXQ4KDB4M0M5LCBibHVlID4+IDEwKTsKLQotCX0gZWxzZSBpZiAocmVnbm8gPCAxNikgewotCQlpZiAoYnBwID09IDE2KQkvLyBSR0IgNTY1Ci0JCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0KLQkJCQkocmVkICYgMHhGODAwKSB8Ci0JCQkJKChncmVlbiAmIDB4RkMwMCkgPj4gNSkgfAotCQkJCSgoYmx1ZSAmIDB4RjgwMCkgPj4gMTEpOwotCQllbHNlIGlmIChicHAgPT0gMzIpCS8vIEFSR0IgODg4OAotCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9Ci0JCQkJKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8Ci0JCQkJKChyZWQgJiAweEZGMDApIDw8IDgpIHwKLQkJCQkoKGdyZWVuICYgMHhGRjAwKSkgfCAoKGJsdWUgJiAweEZGMDApID4+IDgpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBUcnkgYmxhbmtpbmcgdGhlIHNjcmVlbi4gRm9yIGZsYXQgcGFuZWxzIGl0IGRvZXMgbm90aGluZwotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXVuc2lnbmVkIGNoYXIgUE1Db250LCBEUE1TQ29udDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigwKTsKLQotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQlyZXR1cm4gMDsKLQotCW91dDgoMHg4M0M4LCAweDA0KTsJLy8gRFBNUyBDb250cm9sCi0JUE1Db250ID0gaW44KDB4ODNDNikgJiAweEZDOwotCi0JRFBNU0NvbnQgPSByZWFkM0NFKEdSMjMpICYgMHhGQzsKLQotCXN3aXRjaCAoYmxhbmtfbW9kZSkgewotCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoJLy8gU2NyZWVuOiBPbiwgSFN5bmM6IE9uLCBWU3luYzogT24KLQljYXNlIEZCX0JMQU5LX05PUk1BTDoJLy8gU2NyZWVuOiBPZmYsIEhTeW5jOiBPbiwgVlN5bmM6IE9uCi0JCVBNQ29udCB8PSAweDAzOwotCQlEUE1TQ29udCB8PSAweDAwOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CS8vIFNjcmVlbjogT2ZmLCBIU3luYzogT2ZmLCBWU3luYzogT24KLQkJUE1Db250IHw9IDB4MDI7Ci0JCURQTVNDb250IHw9IDB4MDE7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoJLy8gU2NyZWVuOiBPZmYsIEhTeW5jOiBPbiwgVlN5bmM6IE9mZgotCQlQTUNvbnQgfD0gMHgwMjsKLQkJRFBNU0NvbnQgfD0gMHgwMjsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CS8vIFNjcmVlbjogT2ZmLCBIU3luYzogT2ZmLCBWU3luYzogT2ZmCi0JCVBNQ29udCB8PSAweDAwOwotCQlEUE1TQ29udCB8PSAweDAzOwotCQlicmVhazsKLQl9Ci0KLQl3cml0ZTNDRShHUjIzLCBEUE1TQ29udCk7Ci0Jb3V0OCgweDgzQzgsIDQpOwotCW91dDgoMHg4M0M2LCBQTUNvbnQpOwotCS8vCi0JLy8gbGV0IGZiY29uIGRvIGEgc29mdGJsYW5rIGZvciB1cwotCS8vCi0JcmV0dXJuIChibGFua19tb2RlID09IEZCX0JMQU5LX05PUk1BTCkgPyAxIDogMDsKLX0KLQotc3RhdGljIHN0cnVjdCBmYl9vcHMgY3libGFmYl9vcHMgX19kZXZpbml0ZGF0YSA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuZmJfc2V0Y29scmVnID0gY3libGFmYl9zZXRjb2xyZWcsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gY3libGFmYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsgPSBjeWJsYWZiX2JsYW5rLAotCS5mYl9jaGVja192YXIgPSBjeWJsYWZiX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IGN5YmxhZmJfc2V0X3BhciwKLQkuZmJfZmlsbHJlY3QgPSBjeWJsYWZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IGN5YmxhZmJfY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdCA9IGN5YmxhZmJfaW1hZ2VibGl0LAotCS5mYl9zeW5jID0gY3libGFmYl9zeW5jLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gY3libGFmYl9yZXN0b3JlX3N0YXRlLAotCS5mYl9zYXZlX3N0YXRlID0gY3libGFmYl9zYXZlX3N0YXRlLAotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIGdldHN0YXJ0dXBtb2RlKCkgZGVjaWRlcyBhYm91dCB0aGUgaW5pdGFsIHZpZGVvIG1vZGUKLS8vCi0vLyBUaGVyZSBpcyBubyByZWFzb24gdG8gdXNlIG1vZGVkYiwgYSBsb3Qgb2YgdmlkZW8gbW9kZXMgdGhlcmUgd291bGQKLS8vIG5lZWQgYWx0ZXJlZCB0aW1pbmdzIHRvIGRpc3BsYXkgY29ycmVjdGx5LiBTbyBJIGRlY2lkZWQgdGhhdCBpdCBpcyBtdWNoCi0vLyBiZXR0ZXIgdG8gcHJvdmlkZSBhIGxpbWl0ZWQgb3B0aW1pemVkIHNldCBvZiBtb2RlcyBwbHVzIHRoZSBvcHRpb24gb2YKLS8vIHVzaW5nIHRoZSBtb2RlIGluIGVmZmVjdCBhdCBzdGFydHVwIHRpbWUgKG1pZ2h0IGJlIHNlbGVjdGVkIHVzaW5nIHRoZQotLy8gdmdhPT8/PyBwYXJhbWV0ZXIpLiBBZnRlciB0aGF0IHRoZSB1c2VyIG1pZ2h0IHVzZSBmYnNldCB0byBzZWxlY3QgYW55Ci0vLyBtb2RlIGhlIGxpa2VzLCBjaGVja192YXIgd2lsbCBub3QgdHJ5IHRvIGFsdGVyIGdlb21ldHJ5IHBhcmFtZXRlcnMgYXMKLS8vIGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSBvdGhlcndpc2UuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRzdGFydHVwbW9kZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1MzIgaHRvdGFsLCBoZGlzcGVuZCwgaHN5bmNzdGFydCwgaHN5bmNlbmQsIGhibGFua3N0YXJ0LCBoYmxhbmtlbmQsCi0JICAgIHZ0b3RhbCwgdmRpc3BlbmQsIHZzeW5jc3RhcnQsIHZzeW5jZW5kLCB2YmxhbmtzdGFydCwgdmJsYW5rZW5kLAotCSAgICBjcjAwLCBjcjAxLCBjcjAyLCBjcjAzLCBjcjA0LCBjcjA1LCBjcjJiLAotCSAgICBjcjA2LCBjcjA3LCBjcjA5LCBjcjEwLCBjcjExLCBjcjEyLCBjcjE1LCBjcjE2LCBjcjI3LAotCSAgICBjcjM4LCBzcjBkLCBzcjE4LCBzcjE5LCBncjBmLCBmaSwgcHhjbGtkaXYsIHZjbGtkaXYsIHRtcCwgaTsKLQotCXN0cnVjdCBtb2R1cyB7Ci0JCWludCB4cmVzOyBpbnQgdnhyZXM7IGludCB5cmVzOyBpbnQgdnlyZXM7Ci0JCWludCBicHA7IGludCBweGNsazsKLQkJaW50IGxlZnRfbWFyZ2luOyBpbnQgcmlnaHRfbWFyZ2luOwotCQlpbnQgdXBwZXJfbWFyZ2luOyBpbnQgbG93ZXJfbWFyZ2luOwotCQlpbnQgaHN5bmNfbGVuOyBpbnQgdnN5bmNfbGVuOwotCX0gbW9kZWRiWzVdID0gewotCQl7Ci0JCTAsIDIwNDgsIDAsIDQwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LCB7Ci0JCTY0MCwgMjA0OCwgNDgwLCA0MDk2LCAwLCAwLCAtNDAsIDI0LCAxNywgMCwgMjE2LCAzfSwgewotCQk4MDAsIDIwNDgsIDYwMCwgNDA5NiwgMCwgMCwgOTYsIDI0LCAxNCwgMCwgMTM2LCAxMX0sIHsKLQkJMTAyNCwgMjA0OCwgNzY4LCA0MDk2LCAwLCAwLCAxNDQsIDI0LCAyOSwgMCwgMTIwLCAzfSwgewotCQkxMjgwLCAyMDQ4LCAxMDI0LCA0MDk2LCAwLCAwLCAyMzIsIDE2LCAzOSwgMCwgMTYwLCAzfQotCX07Ci0KLQlvdXRiKDB4MDAsIDB4M2Q0KTsgY3IwMCA9IGluYigweDNkNSk7Ci0Jb3V0YigweDAxLCAweDNkNCk7IGNyMDEgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwMiwgMHgzZDQpOyBjcjAyID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MDMsIDB4M2Q0KTsgY3IwMyA9IGluYigweDNkNSk7Ci0Jb3V0YigweDA0LCAweDNkNCk7IGNyMDQgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwNSwgMHgzZDQpOyBjcjA1ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MDYsIDB4M2Q0KTsgY3IwNiA9IGluYigweDNkNSk7Ci0Jb3V0YigweDA3LCAweDNkNCk7IGNyMDcgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwOSwgMHgzZDQpOyBjcjA5ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MTAsIDB4M2Q0KTsgY3IxMCA9IGluYigweDNkNSk7Ci0Jb3V0YigweDExLCAweDNkNCk7IGNyMTEgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgxMiwgMHgzZDQpOyBjcjEyID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MTUsIDB4M2Q0KTsgY3IxNSA9IGluYigweDNkNSk7Ci0Jb3V0YigweDE2LCAweDNkNCk7IGNyMTYgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgyNywgMHgzZDQpOyBjcjI3ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MmIsIDB4M2Q0KTsgY3IyYiA9IGluYigweDNkNSk7Ci0Jb3V0YigweDM4LCAweDNkNCk7IGNyMzggPSBpbmIoMHgzZDUpOwotCi0Jb3V0YigweDBiLCAweDNjNCk7Ci0JaW5iKDB4M2M1KTsKLQotCW91dGIoMHgwZCwgMHgzYzQpOyBzcjBkID0gaW5iKDB4M2M1KTsKLQlvdXRiKDB4MTgsIDB4M2M0KTsgc3IxOCA9IGluYigweDNjNSk7Ci0Jb3V0YigweDE5LCAweDNjNCk7IHNyMTkgPSBpbmIoMHgzYzUpOwotCW91dGIoMHgwZiwgMHgzY2UpOyBncjBmID0gaW5iKDB4M2NmKTsKLQotCWh0b3RhbCA9IGNyMDAgfCAoY3IyYiAmIDB4MDEpIDw8IDg7Ci0JaGRpc3BlbmQgPSBjcjAxIHwgKGNyMmIgJiAweDAyKSA8PCA3OwotCWhibGFua3N0YXJ0ID0gY3IwMiB8IChjcjJiICYgMHgxMCkgPDwgNDsKLQloYmxhbmtlbmQgPSAoY3IwMyAmIDB4MWYpIHwgKGNyMDUgJiAweDgwKSA+PiAyOwotCWhzeW5jc3RhcnQgPSBjcjA0IHwgKGNyMmIgJiAweDA4KSA8PCA1OwotCWhzeW5jZW5kID0gY3IwNSAmIDB4MWY7Ci0KLQltb2RlZGJbMF0ueHJlcyA9IGhibGFua3N0YXJ0ICogODsKLQltb2RlZGJbMF0uaHN5bmNfbGVuID0gaHN5bmNlbmQgKiA4OwotCW1vZGVkYlswXS5yaWdodF9tYXJnaW4gPSBoc3luY3N0YXJ0ICogOCAtIG1vZGVkYlswXS54cmVzOwotCW1vZGVkYlswXS5sZWZ0X21hcmdpbiA9IChodG90YWwgKyA1KSAqIDggLSBtb2RlZGJbMF0ueHJlcyAtCi0JICAgIG1vZGVkYlswXS5yaWdodF9tYXJnaW4gLSBtb2RlZGJbMF0uaHN5bmNfbGVuOwotCi0JdnRvdGFsID0gY3IwNiB8IChjcjA3ICYgMHgwMSkgPDwgOCB8IChjcjA3ICYgMHgyMCkgPDwgNAotCSAgICB8IChjcjI3ICYgMHg4MCkgPDwgMzsKLQl2ZGlzcGVuZCA9IGNyMTIgfCAoY3IwNyAmIDB4MDIpIDw8IDcgfCAoY3IwNyAmIDB4NDApIDw8IDMKLQkgICAgfCAoY3IyNyAmIDB4MTApIDw8IDY7Ci0JdnN5bmNzdGFydCA9IGNyMTAgfCAoY3IwNyAmIDB4MDQpIDw8IDYgfCAoY3IwNyAmIDB4ODApIDw8IDIKLQkgICAgfCAoY3IyNyAmIDB4MjApIDw8IDU7Ci0JdnN5bmNlbmQgPSBjcjExICYgMHgwZjsKLQl2YmxhbmtzdGFydCA9IGNyMTUgfCAoY3IwNyAmIDB4MDgpIDw8IDUgfCAoY3IwOSAmIDB4MjApIDw8IDQKLQkgICAgfCAoY3IyNyAmIDB4NDApIDw8IDQ7Ci0JdmJsYW5rZW5kID0gY3IxNjsKLQotCW1vZGVkYlswXS55cmVzID0gdmRpc3BlbmQgKyAxOwotCW1vZGVkYlswXS52c3luY19sZW4gPSB2c3luY2VuZDsKLQltb2RlZGJbMF0ubG93ZXJfbWFyZ2luID0gdnN5bmNzdGFydCAtIG1vZGVkYlswXS55cmVzOwotCW1vZGVkYlswXS51cHBlcl9tYXJnaW4gPSB2dG90YWwgLSBtb2RlZGJbMF0ueXJlcyAtCi0JICAgIG1vZGVkYlswXS5sb3dlcl9tYXJnaW4gLSBtb2RlZGJbMF0udnN5bmNfbGVuICsgMjsKLQotCXRtcCA9IGNyMzggJiAweDNjOwotCW1vZGVkYlswXS5icHAgPSB0bXAgPT0gMCA/IDggOiB0bXAgPT0gNCA/IDE2IDogdG1wID09IDI4ID8gMjQgOgotCSAgICB0bXAgPT0gOCA/IDMyIDogODsKLQotCWZpID0gKCg1ODY0NzI3ICogKHNyMTggKyA4KSkgLwotCSAgICAgICgoKHNyMTkgJiAweDNmKSArIDIpICogKDEgPDwgKChzcjE5ICYgMHhjMCkgPj4gNikpKSkgPj4gMTI7Ci0JcHhjbGtkaXYgPSAoKGdyMGYgJiAweDA4KSA+PiAzIHwgKGdyMGYgJiAweDQwKSA+PiA1KSArIDE7Ci0JdG1wID0gc3IwZCAmIDB4MDY7Ci0JdmNsa2RpdiA9IHRtcCA9PSAwID8gMiA6IHRtcCA9PSAyID8gNCA6IHRtcCA9PSA0ID8gOCA6IDM7IC8vICogMiAhCi0JbW9kZWRiWzBdLnB4Y2xrID0gKCgxMDAwMDAwMDAgKiBweGNsa2RpdiAqIHZjbGtkaXYpID4+IDEpIC8gZmk7Ci0KLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJkZXRlY3RlZCBzdGFydHVwIG1vZGU6ICIKLQkJICAgICAgICJmYnNldCAtZyAlZCAlZCAlZCA/Pz8gJWQgLXQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCi0JCSAgICAgICBtb2RlZGJbMF0ueHJlcywgbW9kZWRiWzBdLnlyZXMsIG1vZGVkYlswXS54cmVzLAotCQkgICAgICAgbW9kZWRiWzBdLmJwcCwgbW9kZWRiWzBdLnB4Y2xrLCBtb2RlZGJbMF0ubGVmdF9tYXJnaW4sCi0JCSAgICAgICBtb2RlZGJbMF0ucmlnaHRfbWFyZ2luLCBtb2RlZGJbMF0udXBwZXJfbWFyZ2luLAotCQkgICAgICAgbW9kZWRiWzBdLmxvd2VyX21hcmdpbiwgbW9kZWRiWzBdLmhzeW5jX2xlbiwKLQkJICAgICAgIG1vZGVkYlswXS52c3luY19sZW4pOwotCi0JLy8KLQkvLyBXZSB1c2UgdGhpcyBnb3RvIHRhcmdldCBpbiBjYXNlIG9mIGEgZmFpbGVkIGNoZWNrX3Zhci4gTm8sIEkgcmVhbGx5Ci0JLy8gZG8gbm90IHdhbnQgdG8gZG8gaXQgaW4gYW5vdGhlciB3YXkhCi0JLy8KLQotICAgICAgdHJ5YWdhaW46Ci0KLQlpID0gKG1vZGUgPT0gTlVMTCkgPyAwIDoKLQkgICAgIXN0cm5jbXAobW9kZSwgIjY0MHg0ODAiLCA3KSA/IDEgOgotCSAgICAhc3RybmNtcChtb2RlLCAiODAweDYwMCIsIDcpID8gMiA6Ci0JICAgICFzdHJuY21wKG1vZGUsICIxMDI0eDc2OCIsIDgpID8gMyA6Ci0JICAgICFzdHJuY21wKG1vZGUsICIxMjgweDEwMjQiLCA5KSA/IDQgOiAwOwotCi0JcmVmID0gKHJlZiA8IDUwKSA/IDUwIDogKHJlZiA+IDg1KSA/IDg1IDogcmVmOwotCi0JaWYgKGkgPT0gMCkgewotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSBtb2RlZGJbaV0ucHhjbGs7Ci0JCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IG1vZGVkYltpXS5icHA7Ci0JfSBlbHNlIHsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gKDEwMDAwMDAwMCAvCi0JCQkJICAgICAgKChtb2RlZGJbaV0ubGVmdF9tYXJnaW4gKwotCQkJCQltb2RlZGJbaV0ueHJlcyArCi0JCQkJCW1vZGVkYltpXS5yaWdodF9tYXJnaW4gKwotCQkJCQltb2RlZGJbaV0uaHN5bmNfbGVuKSAqCi0JCQkJICAgICAgIChtb2RlZGJbaV0udXBwZXJfbWFyZ2luICsKLQkJCQkJbW9kZWRiW2ldLnlyZXMgKwotCQkJCQltb2RlZGJbaV0ubG93ZXJfbWFyZ2luICsKLQkJCQkJbW9kZWRiW2ldLnZzeW5jX2xlbikgKiByZWYgLyAxMDAwMCkpOwotCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBicHA7Ci0JfQotCi0JaW5mby0+dmFyLmxlZnRfbWFyZ2luID0gbW9kZWRiW2ldLmxlZnRfbWFyZ2luOwotCWluZm8tPnZhci5yaWdodF9tYXJnaW4gPSBtb2RlZGJbaV0ucmlnaHRfbWFyZ2luOwotCWluZm8tPnZhci54cmVzID0gbW9kZWRiW2ldLnhyZXM7Ci0JaWYgKCEobW9kZWRiW2ldLnlyZXMgPT0gMTI4MCAmJiBtb2RlZGJbaV0uYnBwID09IDMyKSkKLQkJaW5mby0+dmFyLnhyZXNfdmlydHVhbCA9IG1vZGVkYltpXS52eHJlczsKLQllbHNlCi0JCWluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBtb2RlZGJbaV0ueHJlczsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLmhzeW5jX2xlbiA9IG1vZGVkYltpXS5oc3luY19sZW47Ci0JaW5mby0+dmFyLnVwcGVyX21hcmdpbiA9IG1vZGVkYltpXS51cHBlcl9tYXJnaW47Ci0JaW5mby0+dmFyLnlyZXMgPSBtb2RlZGJbaV0ueXJlczsKLQlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gbW9kZWRiW2ldLnZ5cmVzOwotCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIubG93ZXJfbWFyZ2luID0gbW9kZWRiW2ldLmxvd2VyX21hcmdpbjsKLQlpbmZvLT52YXIudnN5bmNfbGVuID0gbW9kZWRiW2ldLnZzeW5jX2xlbjsKLQlpbmZvLT52YXIuc3luYyA9IDA7Ci0JaW5mby0+dmFyLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKLQotCWlmIChjeWJsYWZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKSkgewotCQkvLyA2NDB4NDgwIC0gOEA3NSBzaG91bGQgcmVhbGx5IG5ldmVyIGZhaWwuIE9uZSBjYXNlIHdvdWxkCi0JCS8vIGJlIGZwID09IDEgYW5kIG5hdGl2ZXggPCA2NDAgLi4uIGdpdmUgdXAgdGhlbgotCQlpZiAoaSA9PSAxICYmIGJwcCA9PSA4ICYmIHJlZiA9PSA3NSkgewotCQkJb3V0cHV0KCJDYW4ndCBmaW5kIGEgdmFsaWQgbW9kZSA6LShcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJLy8gT3VyIGRldGVjdGVkIG1vZGUgaXMgdW5saWtlbHkgdG8gZmFpbC4gSWYgaXQgZG9lcywKLQkJLy8gdHJ5IDY0MHg0ODAgLSA4QDc1IC4uLgotCQlpZiAoaSA9PSAwKSB7Ci0JCQltb2RlID0gIjY0MHg0ODAiOwotCQkJYnBwID0gODsKLQkJCXJlZiA9IDc1OwotCQkJb3V0cHV0KCJEZXRlY3RlZCBtb2RlIGZhaWxlZCBjaGVja192YXIhICIKLQkJCSAgICAgICAiVHJ5aW5nIDY0MHg0ODAgLSA4QDc1XG4iKTsKLQkJCWdvdG8gdHJ5YWdhaW47Ci0JCX0KLQkJLy8gQSBzcGVjaWZpZWQgdmlkZW8gbW9kZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotCQkvLyBUcnkgdGhlIHN0YXJ0dXAgbW9kZSBmaXJzdAotCQlvdXRwdXQoIlNwZWNpZmllZCBtb2RlICclcycgZmFpbGVkIGNoZWNrISAiCi0JCSAgICAgICAiRmFsbGluZyBiYWNrIHRvIHN0YXJ0dXAgbW9kZS5cbiIsIG1vZGUpOwotCQltb2RlID0gTlVMTDsKLQkJZ290byB0cnlhZ2FpbjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIERldGVjdCBhY3RpdmF0ZWQgbWVtb3J5IHNpemUuIFVuZGVmaW5lZCB2YWx1ZXMgcmVxdWlyZQotLy8gbWVtc2l6ZSBwYXJhbWV0ZXIuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBnZXRfbWVtc2l6ZSh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdG1wOwotCXVuc2lnbmVkIGludCBrOwotCi0JaWYgKG1lbXNpemUpCi0JCWsgPSBtZW1zaXplICogS2I7Ci0JZWxzZSB7Ci0JCXRtcCA9IHJlYWQzWDQoQ1IxRikgJiAweDBGOwotCQlzd2l0Y2ggKHRtcCkgewotCQljYXNlIDB4MDM6Ci0JCQlrID0gMSAqIDEwMjQgKiAxMDI0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwNzoKLQkJCWsgPSAyICogMTAyNCAqIDEwMjQ7Ci0JCQlicmVhazsKLQkJY2FzZSAweDBGOgotCQkJayA9IDQgKiAxMDI0ICogMTAyNDsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDQ6Ci0JCQlrID0gOCAqIDEwMjQgKiAxMDI0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlrID0gMSAqIDEwMjQgKiAxMDI0OwotCQkJb3V0cHV0KCJVbmtub3duIG1lbW9yeSBzaXplIGNvZGUgJXggaW4gQ1IxRi4iCi0JCQkgICAgICAgIiBXZSBkZWZhdWx0IHRvIDEgTWIgZm9yIG5vdywgcGxlYXNlIgotCQkJICAgICAgICIgZG8gcHJvdmlkZSBhIG1lbXNpemUgcGFyYW1ldGVyIVxuIiwgdG1wKTsKLQkJfQotCX0KLQotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoImZyYW1lYnVmZmVyIHNpemUgPSAlZCBLYlxuIiwgayAvIEtiKTsKLQlyZXR1cm4gazsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBEZXRlY3QgaWYgYSBmbGF0IHBhbmVsIG1vbml0b3IgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWFsCi0vLyBpbnRlcmZhY2UgaXMgYWN0aXZlLiBPdmVycmlkZSBpcyBwb3NzaWJsZSBieSBmcCBhbmQgY3J0Ci0vLyBwYXJhbWV0ZXJzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGdldF9kaXNwbGF5dHlwZSh2b2lkKQotewotCWlmIChmcCkKLQkJcmV0dXJuIERJU1BMQVlfRlA7Ci0JaWYgKGNydCkKLQkJcmV0dXJuIERJU1BMQVlfQ1JUOwotCXJldHVybiAocmVhZDNDRShHUjMzKSAmIDB4MTApID8gRElTUExBWV9GUCA6IERJU1BMQVlfQ1JUOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBHZXQgbmF0aXZlIHJlc29sdXRpb24gb2YgZmxhdCBwYW5lbAotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfbmF0aXZleCh2b2lkKQotewotCWludCB4LCB5LCB0bXA7Ci0KLQlpZiAobmF0aXZleCkKLQkJcmV0dXJuIG5hdGl2ZXg7Ci0KLQl0bXAgPSAocmVhZDNDRShHUjUyKSA+PiA0KSAmIDM7Ci0KLQlzd2l0Y2ggKHRtcCkgewotCWNhc2UgMDogeCA9IDEyODA7IHkgPSAxMDI0OwotCQlicmVhazsKLQljYXNlIDI6IHggPSAxMDI0OyB5ID0gNzY4OwotCQlicmVhazsKLQljYXNlIDM6IHggPSA4MDA7ICB5ID0gNjAwOwotCQlicmVhazsKLQljYXNlIDQ6IHggPSAxNDAwOyB5ID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCWRlZmF1bHQ6Ci0JCXggPSA2NDA7IHkgPSA0ODA7Ci0JCWJyZWFrOwotCX0KLQotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoIiVkeCVkIGZsYXQgcGFuZWwgZm91bmRcbiIsIHgsIHkpOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjeWJsYV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgY3libGFmYl9wYXIgKnBhcjsKLQotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGN5YmxhZmJfcGFyKSwgJmRldi0+ZGV2KTsKLQlpZiAoIWluZm8pCi0JCWdvdG8gZXJyb3V0X2FsbG9jX2luZm87Ci0KLQlpbmZvLT5waXhtYXAuYWRkciA9IGt6YWxsb2MoQ1lCTEFGQl9QSVhNQVBTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8tPnBpeG1hcC5hZGRyKSB7Ci0JCW91dHB1dCgiYWxsb2NhdGlvbiBvZiBwaXhtYXAgYnVmZmVyIGZhaWxlZCFcbiIpOwotCQlnb3RvIGVycm91dF9hbGxvY19waXhtYXA7Ci0JfQotCWluZm8tPnBpeG1hcC5zaXplID0gQ1lCTEFGQl9QSVhNQVBTSVpFIC0gNDsKLQlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKLQlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7Ci0JaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKLQlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDQ7Ci0KLQlwYXIgPSBpbmZvLT5wYXI7Ci0JcGFyLT5vcHMgPSBjeWJsYWZiX29wczsKLQotCWluZm8tPmZpeCA9IGN5YmxhZmJfZml4OwotCWluZm8tPmZib3BzID0gJnBhci0+b3BzOwotCWluZm8tPmZpeCA9IGN5YmxhZmJfZml4OwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpIHsKLQkJb3V0cHV0KCJjb3VsZCBub3QgZW5hYmxlIGRldmljZSFcbiIpOwotCQlnb3RvIGVycm91dF9lbmFibGU7Ci0JfQotCS8vIG1pZ2h0IGFscmVhZHkgYmUgcmVxdWVzdGVkIGJ5IHZnYSBjb25zb2xlIG9yIHZlc2FmYiwKLQkvLyBzbyB3ZSBkbyBjYXJlIGFib3V0IHN1Y2Nlc3MKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4M2MwLCAweDIwLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uIDB4M2MwLzB4MjAgYWxyZWFkeSByZXNlcnZlZFxuIik7Ci0JCXZlc2FmYiB8PSAxOwotCi0JfQotCS8vCi0JLy8gR3JhcGhpY3MgRW5naW5lIFJlZ2lzdGVycwotCS8vCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihHRUJhc2UsIDB4MTAwLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uICUjeC8weDEwMCBhbHJlYWR5IHJlc2VydmVkXG4iLCBHRUJhc2UpOwotCQl2ZXNhZmIgfD0gMjsKLQl9Ci0KLQlyZWdkdW1wKHBhcik7Ci0KLQllbmFibGVfbW1pbygpOwotCi0JLy8gc2V0dXAgTU1JTyByZWdpb24KLQlpbmZvLT5maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDEpOwotCWluZm8tPmZpeC5tbWlvX2xlbiA9IDB4MjAwMDA7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwKLQkJCQlpbmZvLT5maXgubW1pb19sZW4sICJjeWJsYWZiIikpIHsKLQkJb3V0cHV0KCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIGZvciBtbWlvIHJlZ2lvbiFcbiIpOwotCQlnb3RvIGVycm91dF9tbWlvX3JlcW1lbTsKLQl9Ci0KLQlpb192aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwotCi0JaWYgKCFpb192aXJ0KSB7Ci0JCW91dHB1dCgiaW9yZW1hcCBmYWlsZWQgZm9yIG1taW8gcmVnaW9uXG4iKTsKLQkJZ290byBlcnJvdXRfbW1pb19yZW1hcDsKLQl9Ci0JLy8gc2V0dXAgZnJhbWVidWZmZXIgbWVtb3J5IC4uLiBtaWdodCBhbHJlYWR5IGJlIHJlcXVlc3RlZAotCS8vIGJ5IHZlc2FmYi4gTm90IHRvIGZhaWwgaW4gY2FzZSBvZiBhbiB1bnN1Y2Nlc3NmdWwgcmVxdWVzdAotCS8vIGlzIHVzZWZ1bCBpZiBib3RoIGFyZSBsb2FkZWQuCi0JaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQlpbmZvLT5maXguc21lbV9sZW4gPSBnZXRfbWVtc2l6ZSgpOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsCi0JCQkJaW5mby0+Zml4LnNtZW1fbGVuLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uICUjbHgvJSN4IGFscmVhZHkgcmVzZXJ2ZWRcbiIsCi0JCSAgICAgICBpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKLQkJdmVzYWZiIHw9IDQ7Ci0JfQotCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCi0JCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwotCi0JaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewotCQlvdXRwdXQoImlvcmVtYXAgZmFpbGVkIGZvciBzbWVtIHJlZ2lvblxuIik7Ci0JCWdvdG8gZXJyb3V0X3NtZW1fcmVtYXA7Ci0JfQotCi0JZGlzcGxheXR5cGUgPSBnZXRfZGlzcGxheXR5cGUoKTsKLQotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQluYXRpdmV4ID0gZ2V0X25hdGl2ZXgoKTsKLQotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCi0JCSAgICB8IEZCSU5GT19SRUFEU19GQVNUCi0vLwkJICAgIHwgRkJJTkZPX1BBUlRJQUxfUEFOX09LCi0JCSAgICB8IEZCSU5GT19NSVNDX0FMV0FZU19TRVRQQVI7Ci0KLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbDsKLQotCWlmIChnZXRzdGFydHVwbW9kZShpbmZvKSkKLQkJZ290byBlcnJvdXRfZmluZG1vZGU7Ci0KLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwotCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pKSB7Ci0JCW91dHB1dCgiQ291bGQgbm90IHJlZ2lzdGVyIEN5QmxhIGZyYW1lYnVmZmVyXG4iKTsKLQkJZ290byBlcnJvdXRfcmVnaXN0ZXI7Ci0JfQotCi0JcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7Ci0KLQkvLwotCS8vIG5vcm1hbCBleGl0IGFuZCBlcnJvciBwYXRocwotCS8vCi0KLQlyZXR1cm4gMDsKLQotICAgICAgZXJyb3V0X3JlZ2lzdGVyOgotICAgICAgZXJyb3V0X2ZpbmRtb2RlOgotCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwotICAgICAgZXJyb3V0X3NtZW1fcmVtYXA6Ci0JaWYgKCEodmVzYWZiICYgNCkpCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKLQlpb3VubWFwKGlvX3ZpcnQpOwotICAgICAgZXJyb3V0X21taW9fcmVtYXA6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwotICAgICAgZXJyb3V0X21taW9fcmVxbWVtOgotCWlmICghKHZlc2FmYiAmIDEpKQotCQlyZWxlYXNlX3JlZ2lvbigweDNjMCwgMzIpOwotICAgICAgZXJyb3V0X2VuYWJsZToKLQlrZnJlZShpbmZvLT5waXhtYXAuYWRkcik7Ci0gICAgICBlcnJvdXRfYWxsb2NfcGl4bWFwOgotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Ci0gICAgICBlcnJvdXRfYWxsb2NfaW5mbzoKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBhYm9ydGluZyBpbml0LlxuIiwgVkVSU0lPTik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjeWJsYV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7Ci0JaW91bm1hcChpb192aXJ0KTsKLQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlpZiAoISh2ZXNhZmIgJiA0KSkKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCWlmICghKHZlc2FmYiAmIDIpKQotCQlyZWxlYXNlX3JlZ2lvbihHRUJhc2UsIDB4MTAwKTsKLQlpZiAoISh2ZXNhZmIgJiAxKSkKLQkJcmVsZWFzZV9yZWdpb24oMHgzYzAsIDMyKTsKLQlrZnJlZShpbmZvLT5waXhtYXAuYWRkcik7Ci0JZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBub3JtYWwgZXhpdC5cbiIsIFZFUlNJT04pOwotfQotCi0vLwotLy8gTGlzdCBvZiBib2FyZHMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHN1cHBvcnQKLS8vCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3libGFfZGV2aWNlc1tdID0gewotCXtQQ0lfVkVORE9SX0lEX1RSSURFTlQsIENZQkVSQkxBREVpMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JezAsfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN5YmxhX2RldmljZXMpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3libGFmYl9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gImN5YmxhZmIiLAotCS5pZF90YWJsZSA9IGN5YmxhX2RldmljZXMsCi0JLnByb2JlID0gY3libGFfcGNpX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChjeWJsYV9wY2lfcmVtb3ZlKQotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8ga2VybmVsIGNvbW1hbmQgbGluZSBleGFtcGxlOgotLy8KLS8vCXZpZGVvPWN5YmxhZmI6MTI4MHgxMDI0LCBicHA9MTYsIHJlZj01MCAuLi4KLS8vCi0vLyBtb2Rwcm9iZSBjb21tYW5kIGxpbmUgZXhhbXBsZToKLS8vCi0vLwltb2Rwcm9iZSBjeWJsYWZiIG1vZGU9MTI4MHgxMDI0IGJwcD0xNiByZWY9NTAgLi4uCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGN5YmxhZmJfaW5pdCh2b2lkKQotewotI2lmbmRlZiBNT0RVTEUKLQljaGFyICpvcHRpb25zID0gTlVMTDsKLQljaGFyICpvcHQ7Ci0KLQlpZiAoZmJfZ2V0X29wdGlvbnMoImN5YmxhZmIiLCAmb3B0aW9ucykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG9wdGlvbnMgJiYgKm9wdGlvbnMpCi0JCXdoaWxlICgob3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCQlpZiAoISpvcHQpCi0JCQkJY29udGludWU7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJicHA9IiwgNCkpCi0JCQkJYnBwID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJyZWY9IiwgNCkpCi0JCQkJcmVmID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJmcCIsIDIpKQotCQkJCWRpc3BsYXl0eXBlID0gRElTUExBWV9GUDsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImNydCIsIDMpKQotCQkJCWRpc3BsYXl0eXBlID0gRElTUExBWV9DUlQ7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJuYXRpdmV4PSIsIDgpKQotCQkJCW5hdGl2ZXggPSBzaW1wbGVfc3RydG91bChvcHQgKyA4LCBOVUxMLCAwKTsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImNlbnRlciIsIDYpKQotCQkJCWNlbnRlciA9IDE7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJzdHJldGNoIiwgNykpCi0JCQkJc3RyZXRjaCA9IDE7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwY2l3Yj0iLCA2KSkKLQkJCQlwY2l3YiA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDYsIE5VTEwsIDApOwotCQkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAicGNpcmI9IiwgNikpCi0JCQkJcGNpcmIgPSBzaW1wbGVfc3RydG91bChvcHQgKyA2LCBOVUxMLCAwKTsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInBjaXdyPSIsIDYpKQotCQkJCXBjaXdyID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNiwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwY2lycj0iLCA2KSkKLQkJCQlwY2lyciA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDYsIE5VTEwsIDApOwotCQkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAibWVtc2l6ZT0iLCA4KSkKLQkJCQltZW1zaXplID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgOCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ2ZXJib3NpdHk9IiwgMTApKQotCQkJCXZlcmJvc2l0eSA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDEwLCBOVUxMLCAwKTsKLQkJCWVsc2UKLQkJCQltb2RlID0gb3B0OwotCQl9Ci0jZW5kaWYKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBpbml0aWFsaXppbmdcbiIsIFZFUlNJT04pOwotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeWJsYWZiX3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY3libGFmYl9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeWJsYWZiX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChjeWJsYWZiX2luaXQpOwotbW9kdWxlX2V4aXQoY3libGFmYl9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiS251dCBQZXRlcnNlbiA8a251dF9wZXRlcnNlbkB0LW9ubGluZS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBDeWJlcmJsYWRlL2kxIGdyYXBoaWNzIGNvcmUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBkYWY5YjgxLi4wYzViOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xMjksNiArMTI5LDggQEAKIAkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gaW5mby0+d2lkdGg7CiAJaWYgKHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPT0gMCkKIAkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGluZm8tPmhlaWdodDsKKwlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSAwKQorCQlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID0gVklERU9fVFlQRV9FRkk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3NCw5ICszNzYsMTAgQEAKIAlpbnQgcmV0OwogCWNoYXIgKm9wdGlvbiA9IE5VTEw7CiAKKwlkbWlfY2hlY2tfc3lzdGVtKGRtaV9zeXN0ZW1fdGFibGUpOworCiAJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgIT0gVklERU9fVFlQRV9FRkkpCiAJCXJldHVybiAtRU5PREVWOwotCWRtaV9jaGVja19zeXN0ZW0oZG1pX3N5c3RlbV90YWJsZSk7CiAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImVmaWZiIiwgJm9wdGlvbikpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCmluZGV4IDA4MjAyNjUuLjBhN2E2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKQEAgLTg1LDggKzg1LDkgQEAKIAogLyogdm1fb3BzLT5wYWdlX21rd3JpdGUgaGFuZGxlciAqLwogc3RhdGljIGludCBmYl9kZWZlcnJlZF9pb19ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkJICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbyA9IGluZm8tPmZiZGVmaW87CiAJc3RydWN0IHBhZ2UgKmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBjZmQ5ZGNlLi4yYWMzMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00Niw2ICs0NiwxNyBAQAogc3RydWN0IGZiX2luZm8gKnJlZ2lzdGVyZWRfZmJbRkJfTUFYXSBfX3JlYWRfbW9zdGx5OwogaW50IG51bV9yZWdpc3RlcmVkX2ZiIF9fcmVhZF9tb3N0bHk7CiAKK2ludCBsb2NrX2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisJaWYgKCFpbmZvLT5mYm9wcykgeworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKGxvY2tfZmJfaW5mbyk7CisKIC8qCiAgKiBIZWxwZXJzCiAgKi8KQEAgLTEwODYsMTMgKzEwOTcsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOwogCQlldmVudC5kYXRhID0gJmNvbjJmYjsKLQotCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKLQkJCXJldHVybiAtRU5PREVWOwogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsICZldmVudCk7Ci0JCXVubG9ja19mYl9pbmZvKGluZm8pOwotCiAJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmY29uMmZiLCBzaXplb2YoY29uMmZiKSkgPyAtRUZBVUxUIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKQEAgLTExMDksMTIgKzExMTUsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQotCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWV2ZW50LmluZm8gPSBpbmZvOwotCQlyZXQgPSBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKLQkJCQkJICAgICAgJmV2ZW50KTsKLQkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisJCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQLCAmZXZlbnQpOwogCQlicmVhazsKIAljYXNlIEZCSU9CTEFOSzoKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYwppbmRleCBkOTYyN2I1Li4xMzVhZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3NldHVwLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogCWNhc2UgMHgwMTg2OgogCWNhc2UgMHgwMTg3OgogCWNhc2UgMHgwMThEOgorCWNhc2UgMHgwMUQ3OgogCWNhc2UgMHgwMjI4OgogCWNhc2UgMHgwMjg2OgogCWNhc2UgMHgwMjhDOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oCmluZGV4IGYxMzJhYWIuLmMwM2Y3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3R5cGUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl90eXBlLmgKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjZGVmaW5lIE5WX0FSQ0hfMDQgIDB4MDQKQEAgLTk5LDcgKzk4LDYgQEAKIAlSSVZBX0hXX1NUQVRFIGluaXRpYWxfc3RhdGU7CiAJUklWQV9IV19TVEFURSAqQ3VycmVudFN0YXRlOwogCXN0cnVjdCB2Z2FzdGF0ZSB2Z2FzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwogCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMyIEFyY2hpdGVjdHVyZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKaW5kZXggOWRiYjVhNS4uZWZlMTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKQEAgLTEwMDQsMTUgKzEwMDQsMTIgQEAKIHsKIAlzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOwotCiAJaWYgKCFwYXItPm9wZW5fY291bnQpIHsKIAkJc2F2ZV92Z2FfeDg2KHBhcik7CiAJCW52aWRpYV9zYXZlX3ZnYShwYXIsICZwYXItPmluaXRpYWxfc3RhdGUpOwogCX0KIAogCXBhci0+b3Blbl9jb3VudCsrOwotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMDIxLDggKzEwMTgsNiBAQAogCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGVyciA9IDA7CiAKLQltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7Ci0KIAlpZiAoIXBhci0+b3Blbl9jb3VudCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CkBAIC0xMDM1LDcgKzEwMzAsNiBAQAogCiAJcGFyLT5vcGVuX2NvdW50LS07CiBkb25lOgotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMDAsNyArMTI5NCw2IEBACiAKIAlwYXIgPSBpbmZvLT5wYXI7CiAJcGFyLT5wY2lfZGV2ID0gcGQ7Ci0JbXV0ZXhfaW5pdCgmcGFyLT5vcGVuX2xvY2spOwogCWluZm8tPnBpeG1hcC5hZGRyID0ga3phbGxvYyg4ICogMTAyNCwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoaW5mby0+cGl4bWFwLmFkZHIgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYwppbmRleCBmMjRkZjBiLi44YWE2ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jCkBAIC03NDIsNyArNzQyLDcgQEAKIAkJaWYgKGNhbGNfcmVnX3RpbWluZyhzeXNjbGssIGRpdikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoZGl2ID4gbWF4X2Nsa19kaXYpCisJaWYgKGRpdiA+PSBtYXhfY2xrX2RpdikKIAkJZ290byBlcnI7CiAKIAkqZXh0aWZfbWVtX2RpdiA9IGRpdjsKQEAgLTc1Miw3ICs3NTIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGRpdiA+IG1heF9jbGtfZGl2KQorCWlmIChkaXYgPj0gbWF4X2Nsa19kaXYpCiAJCWdvdG8gZXJyOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCmluZGV4IDFhNDk1MTkuLjA2MGQ3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7CiAJc3dpdGNoIChibGFuaykgewotCWNhc2UgVkVTQV9OT19CTEFOS0lORzoKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJCWlmIChmYmRldi0+c3RhdGUgPT0gT01BUEZCX1NVU1BFTkRFRCkgewogCQkJaWYgKGZiZGV2LT5jdHJsLT5yZXN1bWUpCiAJCQkJZmJkZXYtPmN0cmwtPnJlc3VtZSgpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCQkJZG9fdXBkYXRlID0gMTsKIAkJfQogCQlicmVhazsKLQljYXNlIFZFU0FfUE9XRVJET1dOOgorCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgogCQlpZiAoZmJkZXYtPnN0YXRlID09IE9NQVBGQl9BQ1RJVkUpIHsKIAkJCWZiZGV2LT5wYW5lbC0+ZGlzYWJsZShmYmRldi0+cGFuZWwpOwogCQkJaWYgKGZiZGV2LT5jdHJsLT5zdXNwZW5kKQpAQCAtMTgxOCw3ICsxODE4LDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCW9tYXBmYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgZmJkZXYtPmZiX2luZm9bMF0pOworCW9tYXBmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGZiZGV2LT5mYl9pbmZvWzBdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgyOCw3ICsxODI4LDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCW9tYXBmYl9ibGFuayhWRVNBX05PX0JMQU5LSU5HLCBmYmRldi0+ZmJfaW5mb1swXSk7CisJb21hcGZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiZGV2LT5mYl9pbmZvWzBdKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBhN2IwMWQyLi4wNzI2YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNTAsOSArNTAsMjIgQEAKICNkZWZpbmUgZGJnKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBpbnQgX19kZXZpbml0Y29uc3QgczFkMTN4eHhmYl9yZXZpc2lvbnNbXSA9IHsKLQlTMUQxMzUwNl9DSElQX1JFViwJLyogUmV2LjQgb24gSFAgSm9ybmFkYSA3eHggUzFEMTM1MDYgKi8KLQlTMUQxMzgwNl9DSElQX1JFViwJLyogUmV2Ljcgb24gLi4gKi8KKy8qCisgKiBMaXN0IG9mIGNhcmQgcHJvZHVjdGlvbiBpZHMKKyAqLworc3RhdGljIGNvbnN0IGludCBzMWQxM3h4eGZiX3Byb2RfaWRzW10gPSB7CisJUzFEMTM1MDVfUFJPRF9JRCwKKwlTMUQxMzUwNl9QUk9EX0lELAorCVMxRDEzODA2X1BST0RfSUQsCit9OworCisvKgorICogTGlzdCBvZiBjYXJkIHN0cmluZ3MKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnMxZDEzeHh4ZmJfcHJvZF9uYW1lc1tdID0geworCSJTMUQxMzUwNSIsCisJIlMxRDEzNTA2IiwKKwkiUzFEMTM4MDYiLAogfTsKIAogLyoKQEAgLTM3Nyw3ICszOTAsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgczFkMTN4eHhmYl9mYm9wcyA9IHsKQEAgLTU0NCw3ICs1NTYsNyBAQAogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7Ci0JdTggcmV2aXNpb247CisJdTggcmV2aXNpb24sIHByb2RfaWQ7CiAKIAlkYmcoInByb2JlIGNhbGxlZDogZGV2aWNlIGlzICVwXG4iLCBwZGV2KTsKIApAQCAtNjEzLDE5ICs2MjUsMzEgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXJldmlzaW9uID0gczFkMTN4eHhmYl9yZWFkcmVnKGRlZmF1bHRfcGFyLCBTMURSRUdfUkVWX0NPREUpID4+IDI7Ci0KKwkvKiBwcm9kdWN0aW9uIGlkIGlzIHRvcCA2IGJpdHMgKi8KKwlwcm9kX2lkID0gczFkMTN4eHhmYl9yZWFkcmVnKGRlZmF1bHRfcGFyLCBTMURSRUdfUkVWX0NPREUpID4+IDI7CisJLyogcmV2aXNpb24gaWQgaXMgbG93ZXIgMiBiaXRzICovCisJcmV2aXNpb24gPSBzMWQxM3h4eGZiX3JlYWRyZWcoZGVmYXVsdF9wYXIsIFMxRFJFR19SRVZfQ09ERSkgJiAweDM7CiAJcmV0ID0gLUVOT0RFVjsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfcmV2aXNpb25zKTsgaSsrKSB7Ci0JCWlmIChyZXZpc2lvbiA9PSBzMWQxM3h4eGZiX3JldmlzaW9uc1tpXSkKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMWQxM3h4eGZiX3Byb2RfaWRzKTsgaSsrKSB7CisJCWlmIChwcm9kX2lkID09IHMxZDEzeHh4ZmJfcHJvZF9pZHNbaV0pIHsKKwkJCS8qIGxvb2tzIGxpa2Ugd2UgZ290IGl0IGluIG91ciBsaXN0ICovCisJCQlkZWZhdWx0X3Bhci0+cHJvZF9pZCA9IHByb2RfaWQ7CisJCQlkZWZhdWx0X3Bhci0+cmV2aXNpb24gPSByZXZpc2lvbjsKIAkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWlmICghcmV0KQorCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHByb2R1Y3Rpb24gaWQgJWkgPSAlc1xuIiwKKwkJCXByb2RfaWQsIHMxZDEzeHh4ZmJfcHJvZF9uYW1lc1tpXSk7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHJldmlzaW9uICVpXG4iLCByZXZpc2lvbik7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmtub3duIGNoaXAgcmV2aXNpb24gJWlcbiIsIHJldmlzaW9uKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJInVua25vd24gY2hpcCBwcm9kdWN0aW9uIGlkICVpLCByZXZpc2lvbiAlaVxuIiwKKwkJCXByb2RfaWQsIHJldmlzaW9uKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBsZWFzZSBjb250YW50IG1haW50YWluZXJcbiIpOwogCQlnb3RvIGJhaWw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTljNjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwpAQCAtMCwwICsxLDEwMzYgQEAKKy8qIGxpbnV4L2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFNhbXN1bmcgU29DIEZyYW1lYnVmZmVyIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisKKy8qIFRoaXMgZHJpdmVyIHdpbGwgZXhwb3J0IGEgbnVtYmVyIG9mIGZyYW1lYnVmZmVyIGludGVyZmFjZXMgZGVwZW5kaW5nCisgKiBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXNzZWQgaW4gdmlhIHRoZSBwbGF0Zm9ybSBkYXRhLiBFYWNoIGZiIGluc3RhbmNlCisgKiBtYXBzIHRvIGEgaGFyZHdhcmUgd2luZG93LiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgcnVudGltZQorICogc2V0dGluZyBvZiB0aGUgYWxwaGEtYmxlbmRpbmcgZnVuY3Rpb25zIHRoYXQgZWFjaCB3aW5kb3cgaGFzLCBzbyBvbmx5CisgKiB3aW5kb3cgMCBpcyBhY3R1YWxseSB1c2VmdWwuCisgKgorICogV2luZG93IDAgaXMgdHJlYXRlZCBzcGVjaWFsbHksIGl0IGlzIHVzZWQgZm9yIHRoZSBiYXNpcyBvZiB0aGUgTENECisgKiBvdXRwdXQgdGltaW5ncyBhbmQgYXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBvdXRwdXQgcG93ZXItZG93biBzdGF0ZS4KKyovCisKKy8qIG5vdGUsIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgYXJlIGRlcml2ZWQgZnJvbSBpbmNsdWRpbmcKKyAqIDxtYWNoL3JlZ3MtZmIuaD4gYXMgdGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb2RlCisgKiBpcyBiZWluZyBidWlsdCBmb3IuCisqLworCisjaWZkZWYgQ09ORklHX0ZCX1MzQ19ERUJVR19SRUdXUklURQorI3VuZGVmIHdyaXRlbAorI2RlZmluZSB3cml0ZWwodiwgcikgZG8geyBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDh4ID0+ICVwXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludCl2LCByKTsgXAorCV9fcmF3X3dyaXRlbCh2LCByKTsgfSB3aGlsZSgwKQorI2VuZGlmIC8qIEZCX1MzQ19ERUJVR19SRUdXUklURSAqLworCitzdHJ1Y3QgczNjX2ZiOworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfd2luIC0gcGVyIHdpbmRvdyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggZnJhbWVidWZmZXIuCisgKiBAd2luZGF0YTogVGhlIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWQgZm9yIHRoZSB3aW5kb3cgY29uZmlndXJhdGlvbi4KKyAqIEBwYXJlbnQ6IFRoZSBoYXJkd2FyZSB0aGF0IHRoaXMgd2luZG93IGlzIHBhcnQgb2YuCisgKiBAZmJpbmZvOiBQb2ludGVyIHBhY2sgdG8gdGhlIGZyYW1lYnVmZmVyIGluZm8gZm9yIHRoaXMgd2luZG93LgorICogQHBhbGV0dGVfYnVmZmVyOiBCdWZmZXIvY2FjaGUgdG8gaG9sZCBwYWxldHRlIGVudHJpZXMuCisgKiBAcHNldWRvX3BhbGV0dGU6IEZvciB1c2UgaW4gVFJVRUNPTE9VUiBtb2RlcyBmb3IgZW50cmllcyAwLi4xNS8KKyAqIEBpbmRleDogVGhlIHdpbmRvdyBudW1iZXIgb2YgdGhpcyB3aW5kb3cuCisgKiBAcGFsZXR0ZTogVGhlIGJpdGZpZWxkcyBmb3IgY2hhbmdpbmcgci9nL2IgaW50byBhIGhhcmR3YXJlIHBhbGV0dGUgZW50cnkuCisgKi8KK3N0cnVjdCBzM2NfZmJfd2luIHsKKwlzdHJ1Y3QgczNjX2ZiX3BkX3dpbgkqd2luZGF0YTsKKwlzdHJ1Y3QgczNjX2ZiCQkqcGFyZW50OworCXN0cnVjdCBmYl9pbmZvCQkqZmJpbmZvOworCXN0cnVjdCBzM2NfZmJfcGFsZXR0ZQkgcGFsZXR0ZTsKKworCXUzMgkJCSpwYWxldHRlX2J1ZmZlcjsKKwl1MzIJCQkgcHNldWRvX3BhbGV0dGVbMTZdOworCXVuc2lnbmVkIGludAkJIGluZGV4OworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2ZiIC0gb3ZlcmFsbCBoYXJkd2FyZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKKyAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB3ZSBib3VuZCB0bywgZm9yIHByaW50aW5nLCBldGMuCisgKiBAcmVnc19yZXM6IFRoZSByZXNvdXJjZSB3ZSBjbGFpbWVkIGZvciB0aGUgSU8gcmVnaXN0ZXJzLgorICogQGJ1c19jbGs6IFRoZSBjbGsgKGhjbGspIGZlZWRpbmcgb3VyIGludGVyZmFjZSBhbmQgcG9zc2libHkgcGl4Y2xrLgorICogQHJlZ3M6IFRoZSBtYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICogQGVuYWJsZWQ6IEEgYml0bWFzayBvZiBlbmFibGVkIGhhcmR3YXJlIHdpbmRvd3MuCisgKiBAcGRhdGE6IFRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGRhdGEgcGFzc2VkIHdpdGggdGhlIGRldmljZS4KKyAqIEB3aW5kb3dzOiBUaGUgaGFyZHdhcmUgd2luZG93cyB0aGF0IGhhdmUgYmVlbiBjbGFpbWVkLgorICovCitzdHJ1Y3QgczNjX2ZiIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3NfcmVzOworCXN0cnVjdCBjbGsJCSpidXNfY2xrOworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisKKwl1bnNpZ25lZCBjaGFyCQkgZW5hYmxlZDsKKworCXN0cnVjdCBzM2NfZmJfcGxhdGRhdGEJKnBkYXRhOworCXN0cnVjdCBzM2NfZmJfd2luCSp3aW5kb3dzW1MzQ19GQl9NQVhfV0lOXTsKK307CisKKy8qKgorICogczNjX2ZiX3dpbl9oYXNfcGFsZXR0ZSgpIC0gZGV0ZXJtaW5lIGlmIGEgbW9kZSBoYXMgYSBwYWxldHRlCisgKiBAd2luOiBUaGUgd2luZG93IG51bWJlciBiZWluZyBxdWVyaWVkLgorICogQGJwcDogVGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCB0byB0ZXN0LgorICoKKyAqIFdvcmsgb3V0IGlmIHRoZSBnaXZlbiB3aW5kb3cgc3VwcG9ydHMgcGFsbGV0aXNlZCBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgYnBwLgorICovCitzdGF0aWMgaW50IHMzY19mYl93aW5faGFzX3BhbGV0dGUodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKK3sKKwlyZXR1cm4gczNjX2ZiX3dpbl9wYWxfc2l6ZSh3aW4pIDw9ICgxIDw8IGJwcCk7Cit9CisKKy8qKgorICogczNjX2ZiX2NoZWNrX3ZhcigpIC0gZnJhbWVidWZmZXIgbGF5ZXIgcmVxdWVzdCB0byB2ZXJpZnkgYSBnaXZlbiBtb2RlLgorICogQHZhcjogVGhlIHNjcmVlbiBpbmZvcm1hdGlvbiB0byB2ZXJpZnkuCisgKiBAaW5mbzogVGhlIGZyYW1lYnVmZmVyIGRldmljZS4KKyAqCisgKiBGcmFtZWJ1ZmZlciBsYXllciBjYWxsIHRvIHZlcmlmeSB0aGUgZ2l2ZW4gaW5mb3JtYXRpb24gYW5kIGFsbG93IHVzIHRvCisgKiB1cGRhdGUgdmFyaW91cyBpbmZvcm1hdGlvbiBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4KKyAqLworc3RhdGljIGludCBzM2NfZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGEgPSB3aW4tPndpbmRhdGE7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiY2hlY2tpbmcgcGFyYW1ldGVyc1xuIik7CisKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1heCgodW5zaWduZWQgaW50KXdpbmRhdGEtPnZpcnR1YWxfeCwgdmFyLT54cmVzKTsKKwl2YXItPnlyZXNfdmlydHVhbCA9IG1heCgodW5zaWduZWQgaW50KXdpbmRhdGEtPnZpcnR1YWxfeSwgdmFyLT55cmVzKTsKKworCWlmICghczNjX2ZiX3ZhbGlkYXRlX3dpbl9icHAod2luLT5pbmRleCwgdmFyLT5iaXRzX3Blcl9waXhlbCkpIHsKKwkJZGV2X2RiZyhzZmItPmRldiwgIndpbiAlZDogdW5zdXBwb3J0ZWQgYnBwICVkXG4iLAorCQkJd2luLT5pbmRleCwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsd2F5cyBlbnN1cmUgdGhlc2UgYXJlIHplcm8sIGZvciBkcm9wIHRocm91Z2ggY2FzZXMgYmVsb3cgKi8KKwl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCWlmICghczNjX2ZiX3dpbl9oYXNfcGFsZXR0ZSh3aW4tPmluZGV4LCB2YXItPmJpdHNfcGVyX3BpeGVsKSkgeworCQkJLyogbm9uIHBhbGxldGlzZWQsIEE6MSxSOjIsRzozLEI6MiBtb2RlICovCisJCQl2YXItPnJlZC5vZmZzZXQJCT0gNDsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gMjsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOworCQkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCQl2YXItPmdyZWVuLmxlbmd0aAk9IDM7CisJCQl2YXItPmJsdWUubGVuZ3RoCT0gMjsKKwkJCXZhci0+dHJhbnNwLm9mZnNldAk9IDc7CisJCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAxOworCQl9IGVsc2UgeworCQkJdmFyLT5yZWQub2Zmc2V0CT0gMDsKKwkJCXZhci0+cmVkLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCQl2YXItPmdyZWVuCT0gdmFyLT5yZWQ7CisJCQl2YXItPmJsdWUJPSB2YXItPnJlZDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMTk6CisJCS8qIDY2NiB3aXRoIG9uZSBiaXQgYWxwaGEvdHJhbnNwYXJlbmN5ICovCisJCXZhci0+dHJhbnNwLm9mZnNldAk9IDE4OworCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAxOworCWNhc2UgMTg6CisJCXZhci0+Yml0c19wZXJfcGl4ZWwJPSAzMjsKKworCQkvKiA2NjYgZm9ybWF0ICovCisJCXZhci0+cmVkLm9mZnNldAkJPSAxMjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA2OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDY7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDY7CisJCWJyZWFrOworCisJY2FzZSAxNjoKKwkJLyogMTYgYnBwLCA1NjUgZm9ybWF0ICovCisJCXZhci0+cmVkLm9mZnNldAkJPSAxMTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDU7CisJCWJyZWFrOworCisJY2FzZSAyODoKKwljYXNlIDI1OgorCQl2YXItPnRyYW5zcC5sZW5ndGgJPSB2YXItPmJpdHNfcGVyX3BpeGVsIC0gMjQ7CisJCXZhci0+dHJhbnNwLm9mZnNldAk9IDI0OworCQkvKiBkcm9wIHRocm91Z2ggKi8KKwljYXNlIDI0OgorCQkvKiBvdXIgMjRicHAgaXMgdW5wYWNrZWQsIHNvIDMyYnBwICovCisJCXZhci0+Yml0c19wZXJfcGl4ZWwJPSAzMjsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQJCT0gMTY7CisJCXZhci0+cmVkLmxlbmd0aAkJPSA4OworCQl2YXItPmdyZWVuLm9mZnNldAk9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gODsKKwkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGgJPSA4OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoc2ZiLT5kZXYsICJpbnZhbGlkIGJwcFxuIik7CisJfQorCisJZGV2X2RiZyhzZmItPmRldiwgIiVzOiB2ZXJpZmllZCBwYXJhbWV0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX2NhbGNfcGl4Y2xrKCkgLSBjYWxjdWxhdGUgdGhlIGRpdmlkZXIgdG8gY3JlYXRlIHRoZSBwaXhlbCBjbG9jay4KKyAqIEBzZmI6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqIEBwaXhjbG9jazogVGhlIHBpeGVsIGNsb2NrIHdhbnRlZCwgaW4gcGljb3NlY29uZHMuCisgKgorICogR2l2ZW4gdGhlIHNwZWNpZmllZCBwaXhlbCBjbG9jaywgd29yayBvdXQgdGhlIG5lY2Vzc2FyeSBkaXZpZGVyIHRvIGdldAorICogY2xvc2UgdG8gdGhlIG91dHB1dCBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbnQgczNjX2ZiX2NhbGNfcGl4Y2xrKHN0cnVjdCBzM2NfZmIgKnNmYiwgdW5zaWduZWQgaW50IHBpeGNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGNsayA9IGNsa19nZXRfcmF0ZShzZmItPmJ1c19jbGspOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCXRtcCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2xrOworCXRtcCAqPSBwaXhjbGs7CisKKwlkb19kaXYodG1wLCAxMDAwMDAwMDAwVUwpOworCXJlc3VsdCA9ICh1bnNpZ25lZCBpbnQpdG1wIC8gMTAwMDsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJwaXhjbGs9JXUsIGNsaz0lbHUsIGRpdj0lZCAoJWx1KVxuIiwKKwkJcGl4Y2xrLCBjbGssIHJlc3VsdCwgY2xrIC8gcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogczNjX2ZiX2FsaWduX3dvcmQoKSAtIGFsaWduIHBpeGVsIGNvdW50IHRvIHdvcmQgYm91bmRhcnkKKyAqIEBicHA6IFRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwKKyAqIEBwaXg6IFRoZSB2YWx1ZSB0byBiZSBhbGlnbmVkLgorICoKKyAqIEFsaWduIHRoZSBnaXZlbiBwaXhlbCBjb3VudCBzbyB0aGF0IGl0IHdpbGwgc3RhcnQgb24gYW4gMzJiaXQgd29yZAorICogYm91bmRhcnkuCisgKi8KK3N0YXRpYyBpbnQgczNjX2ZiX2FsaWduX3dvcmQodW5zaWduZWQgaW50IGJwcCwgdW5zaWduZWQgaW50IHBpeCkKK3sKKwlpbnQgcGl4X3Blcl93b3JkOworCisJaWYgKGJwcCA+IDE2KQorCQlyZXR1cm4gcGl4OworCisJcGl4X3Blcl93b3JkID0gKDggKiAzMikgLyBicHA7CisJcmV0dXJuIEFMSUdOKHBpeCwgcGl4X3Blcl93b3JkKTsKK30KKworLyoqCisgKiBzM2NfZmJfc2V0X3BhcigpIC0gZnJhbWVidWZmZXIgcmVxdWVzdCB0byBzZXQgbmV3IGZyYW1lYnVmZmVyIHN0YXRlLgorICogQGluZm86IFRoZSBmcmFtZWJ1ZmZlciB0byBjaGFuZ2UuCisgKgorICogRnJhbWVidWZmZXIgbGF5ZXIgcmVxdWVzdCB0byBzZXQgYSBuZXcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZWJ1ZmZlcgorICovCitzdGF0aWMgaW50IHMzY19mYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luID0gaW5mby0+cGFyOworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCXZvaWQgX19pb21lbSAqcmVncyA9IHNmYi0+cmVnczsKKwlpbnQgd2luX25vID0gd2luLT5pbmRleDsKKwl1MzIgZGF0YTsKKwl1MzIgcGFnZXdpZHRoOworCWludCBjbGtkaXY7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAic2V0dGluZyBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzXG4iKTsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJY2FzZSAyNDoKKwljYXNlIDE2OgorCWNhc2UgMTI6CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKwljYXNlIDg6CisJCWlmIChzM2NfZmJfd2luX2hhc19wYWxldHRlKHdpbl9ubywgOCkpCisJCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQllbHNlCisJCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8wMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwkJYnJlYWs7CisJfQorCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCkgLyA4OworCisJLyogZGlzYWJsZSB0aGUgd2luZG93IHdoaWxzdCB3ZSB1cGRhdGUgaXQgKi8KKwl3cml0ZWwoMCwgcmVncyArIFdJTkNPTih3aW5fbm8pKTsKKworCS8qIHVzZSB3aW5kb3cgMCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBsY2Qgb3V0cHV0IHRpbWluZ3MgKi8KKworCWlmICh3aW5fbm8gPT0gMCkgeworCQljbGtkaXYgPSBzM2NfZmJfY2FsY19waXhjbGsoc2ZiLCB2YXItPnBpeGNsb2NrKTsKKworCQlkYXRhID0gc2ZiLT5wZGF0YS0+dmlkY29uMDsKKwkJZGF0YSAmPSB+KFZJRENPTjBfQ0xLVkFMX0ZfTUFTSyB8IFZJRENPTjBfQ0xLRElSKTsKKworCQlpZiAoY2xrZGl2ID4gMSkKKwkJCWRhdGEgfD0gVklEQ09OMF9DTEtWQUxfRihjbGtkaXYtMSkgfCBWSURDT04wX0NMS0RJUjsKKwkJZWxzZQorCQkJZGF0YSAmPSB+VklEQ09OMF9DTEtESVI7CS8qIDE6MSBjbG9jayAqLworCisJCS8qIHdyaXRlIHRoZSB0aW1pbmcgZGF0YSB0byB0aGUgcGFuZWwgKi8KKworCQlkYXRhIHw9IFZJRENPTjBfRU5WSUQgfCBWSURDT04wX0VOVklEX0Y7CisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEQ09OMCk7CisKKwkJZGF0YSA9IFZJRFRDT04wX1ZCUEQodmFyLT51cHBlcl9tYXJnaW4gLSAxKSB8CisJCSAgICAgICBWSURUQ09OMF9WRlBEKHZhci0+bG93ZXJfbWFyZ2luIC0gMSkgfAorCQkgICAgICAgVklEVENPTjBfVlNQVyh2YXItPnZzeW5jX2xlbiAtIDEpOworCisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEVENPTjApOworCisJCWRhdGEgPSBWSURUQ09OMV9IQlBEKHZhci0+bGVmdF9tYXJnaW4gLSAxKSB8CisJCSAgICAgICBWSURUQ09OMV9IRlBEKHZhci0+cmlnaHRfbWFyZ2luIC0gMSkgfAorCQkgICAgICAgVklEVENPTjFfSFNQVyh2YXItPmhzeW5jX2xlbiAtIDEpOworCisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEVENPTjEpOworCisJCWRhdGEgPSBWSURUQ09OMl9MSU5FVkFMKHZhci0+eXJlcyAtIDEpIHwKKwkJICAgICAgIFZJRFRDT04yX0hPWlZBTCh2YXItPnhyZXMgLSAxKTsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURUQ09OMik7CisJfQorCisJLyogd3JpdGUgdGhlIGJ1ZmZlciBhZGRyZXNzICovCisKKwl3cml0ZWwoaW5mby0+Zml4LnNtZW1fc3RhcnQsIHJlZ3MgKyBWSURXX0JVRl9TVEFSVCh3aW5fbm8pKTsKKworCWRhdGEgPSBpbmZvLT5maXguc21lbV9zdGFydCArIGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIHZhci0+eXJlczsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFdfQlVGX0VORCh3aW5fbm8pKTsKKworCXBhZ2V3aWR0aCA9ICh2YXItPnhyZXMgKiB2YXItPmJpdHNfcGVyX3BpeGVsKSA+PiAzOworCWRhdGEgPSBWSURXX0JVRl9TSVpFX09GRlNFVChpbmZvLT5maXgubGluZV9sZW5ndGggLSBwYWdld2lkdGgpIHwKKwkgICAgICAgVklEV19CVUZfU0laRV9QQUdFV0lEVEgocGFnZXdpZHRoKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFdfQlVGX1NJWkUod2luX25vKSk7CisKKwkvKiB3cml0ZSAnT1NEJyByZWdpc3RlcnMgdG8gY29udHJvbCBwb3NpdGlvbiBvZiBmcmFtZWJ1ZmZlciAqLworCisJZGF0YSA9IFZJRE9TRHhBX1RPUExFRlRfWCgwKSB8IFZJRE9TRHhBX1RPUExFRlRfWSgwKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRE9TRF9BKHdpbl9ubykpOworCisJZGF0YSA9IFZJRE9TRHhCX0JPVFJJR0hUX1goczNjX2ZiX2FsaWduX3dvcmQodmFyLT5iaXRzX3Blcl9waXhlbCwKKwkJCQkJCSAgICAgdmFyLT54cmVzIC0gMSkpIHwKKwkgICAgICAgVklET1NEeEJfQk9UUklHSFRfWSh2YXItPnlyZXMgLSAxKTsKKworCXdyaXRlbChkYXRhLCByZWdzICsgVklET1NEX0Iod2luX25vKSk7CisKKwlkYXRhID0gdmFyLT54cmVzICogdmFyLT55cmVzOworCWlmIChzM2NfZmJfaGFzX29zZF9kKHdpbl9ubykpIHsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfRCh3aW5fbm8pKTsKKwkJd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQyh3aW5fbm8pKTsKKwl9IGVsc2UKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfQyh3aW5fbm8pKTsKKworCWRhdGEgPSBXSU5DT054X0VOV0lOOworCisJLyogbm90ZSwgc2luY2Ugd2UgaGF2ZSB0byByb3VuZCB1cCB0aGUgYml0cy1wZXItcGl4ZWwsIHdlIGVuZCB1cAorCSAqIHJlbHlpbmcgb24gdGhlIGJpdGZpZWxkIGluZm9ybWF0aW9uIGZvciByL2cvYi9hIHRvIHdvcmsgb3V0CisJICogZXhhY3RseSB3aGljaCBtb2RlIG9mIG9wZXJhdGlvbiBpcyBpbnRlbmRlZC4gKi8KKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwkJZGF0YSB8PSBXSU5DT04wX0JQUE1PREVfMUJQUDsKKwkJZGF0YSB8PSBXSU5DT054X0JJVFNXUDsKKwkJZGF0YSB8PSBXSU5DT054X0JVUlNUTEVOXzRXT1JEOworCQlicmVhazsKKwljYXNlIDI6CisJCWRhdGEgfD0gV0lOQ09OMF9CUFBNT0RFXzJCUFA7CisJCWRhdGEgfD0gV0lOQ09OeF9CSVRTV1A7CisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl84V09SRDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkYXRhIHw9IFdJTkNPTjBfQlBQTU9ERV80QlBQOworCQlkYXRhIHw9IFdJTkNPTnhfQklUU1dQOworCQlkYXRhIHw9IFdJTkNPTnhfQlVSU1RMRU5fOFdPUkQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCAhPSAwKQorCQkJZGF0YSB8PSBXSU5DT04xX0JQUE1PREVfOEJQUF8xMjMyOworCQllbHNlCisJCQlkYXRhIHw9IFdJTkNPTjBfQlBQTU9ERV84QlBQX1BBTEVUVEU7CisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl84V09SRDsKKwkJZGF0YSB8PSBXSU5DT054X0JZVFNXUDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCAhPSAwKQorCQkJZGF0YSB8PSBXSU5DT04xX0JQUE1PREVfMTZCUFBfQTE1NTU7CisJCWVsc2UKKwkJCWRhdGEgfD0gV0lOQ09OMF9CUFBNT0RFXzE2QlBQXzU2NTsKKwkJZGF0YSB8PSBXSU5DT054X0hBV1NXUDsKKwkJZGF0YSB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09SRDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlpZiAodmFyLT5yZWQubGVuZ3RoID09IDYpIHsKKwkJCWlmICh2YXItPnRyYW5zcC5sZW5ndGggIT0gMCkKKwkJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8xOUJQUF9BMTY2NjsKKwkJCWVsc2UKKwkJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8xOEJQUF82NjY7CisJCX0gZWxzZSBpZiAodmFyLT50cmFuc3AubGVuZ3RoICE9IDApCisJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8yNUJQUF9BMTg4ODsKKwkJZWxzZQorCQkJZGF0YSB8PSBXSU5DT04wX0JQUE1PREVfMjRCUFBfODg4OworCisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChkYXRhLCByZWdzICsgV0lOQ09OKHdpbl9ubykpOworCXdyaXRlbCgweDAsIHJlZ3MgKyBXSU54TUFQKHdpbl9ubykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX3VwZGF0ZV9wYWxldHRlKCkgLSBzZXQgb3Igc2NoZWR1bGUgYSBwYWxldHRlIHVwZGF0ZS4KKyAqIEBzZmI6IFRoZSBoYXJkd2FyZSBpbmZvcm1hdGlvbi4KKyAqIEB3aW46IFRoZSB3aW5kb3cgYmVpbmcgdXBkYXRlZC4KKyAqIEByZWc6IFRoZSBwYWxldHRlIGluZGV4IGJlaW5nIGNoYW5nZWQuCisgKiBAdmFsdWU6IFRoZSBjb21wdXRlZCBwYWxldHRlIHZhbHVlLgorICoKKyAqIENoYW5nZSB0aGUgdmFsdWUgb2YgYSBwYWxldHRlIHJlZ2lzdGVyLCBlaXRoZXIgYnkgZGlyZWN0bHkgd3JpdGluZyB0bworICogdGhlIHBhbGV0dGUgKHRoaXMgcmVxdWlyZXMgdGhlIHBhbGV0dGUgUkFNIHRvIGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZQorICogaGFyZHdhcmUgd2hpbHN0IHRoaXMgaXMgaW4gcHJvZ3Jlc3MpIG9yIHNjaGVkdWxlIHRoZSB1cGRhdGUgZm9yIGxhdGVyLgorICoKKyAqIEF0IHRoZSBtb21lbnQsIHNpbmNlIHdlIGhhdmUgbm8gVlNZTkMgaW50ZXJydXB0IHN1cHBvcnQsIHdlIHNpbXBseSBzZXQKKyAqIHRoZSBwYWxldHRlIGVudHJ5IGRpcmVjdGx5LgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfdXBkYXRlX3BhbGV0dGUoc3RydWN0IHMzY19mYiAqc2ZiLAorCQkJCSAgc3RydWN0IHMzY19mYl93aW4gKndpbiwKKwkJCQkgIHVuc2lnbmVkIGludCByZWcsCisJCQkJICB1MzIgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpwYWxyZWc7CisJdTMyIHBhbGNvbjsKKworCXBhbHJlZyA9IHNmYi0+cmVncyArIHMzY19mYl9wYWxfcmVnKHdpbi0+aW5kZXgsIHJlZyk7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiJXM6IHdpbiAlZCwgcmVnICVkICglcCk6ICUwOHhcbiIsCisJCV9fZnVuY19fLCB3aW4tPmluZGV4LCByZWcsIHBhbHJlZywgdmFsdWUpOworCisJd2luLT5wYWxldHRlX2J1ZmZlcltyZWddID0gdmFsdWU7CisKKwlwYWxjb24gPSByZWFkbChzZmItPnJlZ3MgKyBXUEFMQ09OKTsKKwl3cml0ZWwocGFsY29uIHwgV1BBTENPTl9QQUxfVVBEQVRFLCBzZmItPnJlZ3MgKyBXUEFMQ09OKTsKKworCWlmIChzM2NfZmJfcGFsX2lzMTYod2luLT5pbmRleCkpCisJCXdyaXRldyh2YWx1ZSwgcGFscmVnKTsKKwllbHNlCisJCXdyaXRlbCh2YWx1ZSwgcGFscmVnKTsKKworCXdyaXRlbChwYWxjb24sIHNmYi0+cmVncyArIFdQQUxDT04pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjaGFuX3RvX2ZpZWxkKHVuc2lnbmVkIGludCBjaGFuLAorCQkJCQkgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworLyoqCisgKiBzM2NfZmJfc2V0Y29scmVnKCkgLSBmcmFtZWJ1ZmZlciBsYXllciByZXF1ZXN0IHRvIGNoYW5nZSBwYWxldHRlLgorICogQHJlZ25vOiBUaGUgcGFsZXR0ZSBpbmRleCB0byBjaGFuZ2UuCisgKiBAcmVkOiBUaGUgcmVkIGZpZWxkIGZvciB0aGUgcGFsZXR0ZSBkYXRhLgorICogQGdyZWVuOiBUaGUgZ3JlZW4gZmllbGQgZm9yIHRoZSBwYWxldHRlIGRhdGEuCisgKiBAYmx1ZTogVGhlIGJsdWUgZmllbGQgZm9yIHRoZSBwYWxldHRlIGRhdGEuCisgKiBAdHJhbnM6IFRoZSB0cmFuc3BhcmVuY3kgKGFscGhhKSBmaWVsZCBmb3IgdGhlIHBhbGV0dGUgZGF0YS4KKyAqIEBpbmZvOiBUaGUgZnJhbWVidWZmZXIgYmVpbmcgY2hhbmdlZC4KKyAqLworc3RhdGljIGludCBzM2NfZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLAorCQkJICAgIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsCisJCQkgICAgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luID0gaW5mby0+cGFyOworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCXVuc2lnbmVkIGludCB2YWw7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiJXM6IHdpbiAlZDogJWQgPT4gcmdiPSVkLyVkLyVkXG4iLAorCQlfX2Z1bmNfXywgd2luLT5pbmRleCwgcmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUpOworCisJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQkvKiB0cnVlLWNvbG91ciwgdXNlIHBzZXVkby1wYWxldHRlICovCisKKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisKKwkJCXZhbCAgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgICAmaW5mby0+dmFyLnJlZCk7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmluZm8tPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAgJmluZm8tPnZhci5ibHVlKTsKKworCQkJcGFsW3JlZ25vXSA9IHZhbDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgorCQlpZiAocmVnbm8gPCBzM2NfZmJfd2luX3BhbF9zaXplKHdpbi0+aW5kZXgpKSB7CisJCQl2YWwgID0gY2hhbl90b19maWVsZChyZWQsICZ3aW4tPnBhbGV0dGUucik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJndpbi0+cGFsZXR0ZS5nKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZ3aW4tPnBhbGV0dGUuYik7CisKKwkJCXMzY19mYl91cGRhdGVfcGFsZXR0ZShzZmIsIHdpbiwgcmVnbm8sIHZhbCk7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAxOwkvKiB1bmtub3duIHR5cGUgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzM2NfZmJfZW5hYmxlKCkgLSBTZXQgdGhlIHN0YXRlIG9mIHRoZSBtYWluIExDRCBvdXRwdXQKKyAqIEBzZmI6IFRoZSBtYWluIGZyYW1lYnVmZmVyIHN0YXRlLgorICogQGVuYWJsZTogVGhlIHN0YXRlIHRvIHNldC4KKyAqLworc3RhdGljIHZvaWQgczNjX2ZiX2VuYWJsZShzdHJ1Y3QgczNjX2ZiICpzZmIsIGludCBlbmFibGUpCit7CisJdTMyIHZpZGNvbjAgPSByZWFkbChzZmItPnJlZ3MgKyBWSURDT04wKTsKKworCWlmIChlbmFibGUpCisJCXZpZGNvbjAgfD0gVklEQ09OMF9FTlZJRCB8IFZJRENPTjBfRU5WSURfRjsKKwllbHNlIHsKKwkJLyogc2VlIHRoZSBub3RlIGluIHRoZSBmcmFtZWJ1ZmZlciBkYXRhc2hlZXQgYWJvdXQKKwkJICogd2h5IHlvdSBjYW5ub3QgdGFrZSBib3RoIG9mIHRoZXNlIGJpdHMgZG93biBhdCB0aGUKKwkJICogc2FtZSB0aW1lLiAqLworCisJCWlmICghKHZpZGNvbjAgJiBWSURDT04wX0VOVklEKSkKKwkJCXJldHVybjsKKworCQl2aWRjb24wIHw9IFZJRENPTjBfRU5WSUQ7CisJCXZpZGNvbjAgJj0gflZJRENPTjBfRU5WSURfRjsKKwl9CisKKwl3cml0ZWwodmlkY29uMCwgc2ZiLT5yZWdzICsgVklEQ09OMCk7Cit9CisKKy8qKgorICogczNjX2ZiX2JsYW5rKCkgLSBibGFuayBvciB1bmJsYW5rIHRoZSBnaXZlbiB3aW5kb3cKKyAqIEBibGFua19tb2RlOiBUaGUgYmxhbmsgc3RhdGUgZnJvbSBGQl9CTEFOS18qCisgKiBAaW5mbzogVGhlIGZyYW1lYnVmZmVyIHRvIGJsYW5rLgorICoKKyAqIEZyYW1lYnVmZmVyIGxheWVyIHJlcXVlc3QgdG8gY2hhbmdlIHRoZSBwb3dlciBzdGF0ZS4KKyAqLworc3RhdGljIGludCBzM2NfZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisJdW5zaWduZWQgaW50IGluZGV4ID0gd2luLT5pbmRleDsKKwl1MzIgd2luY29uOworCisJZGV2X2RiZyhzZmItPmRldiwgImJsYW5rIG1vZGUgJWRcbiIsIGJsYW5rX21vZGUpOworCisJd2luY29uID0gcmVhZGwoc2ZiLT5yZWdzICsgV0lOQ09OKGluZGV4KSk7CisKKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJd2luY29uICY9IH5XSU5DT054X0VOV0lOOworCQlzZmItPmVuYWJsZWQgJj0gfigxIDw8IGluZGV4KTsKKwkJLyogZmFsbCB0aHJvdWdoIHRvIEZCX0JMQU5LX05PUk1BTCAqLworCisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCS8qIGRpc2FibGUgdGhlIERNQSBhbmQgZGlzcGxheSAweDAgKGJsYWNrKSAqLworCQl3cml0ZWwoV0lOeE1BUF9NQVAgfCBXSU54TUFQX01BUF9DT0xPVVIoMHgwKSwKKwkJICAgICAgIHNmYi0+cmVncyArIFdJTnhNQVAoaW5kZXgpKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCXdyaXRlbCgweDAsIHNmYi0+cmVncyArIFdJTnhNQVAoaW5kZXgpKTsKKwkJd2luY29uIHw9IFdJTkNPTnhfRU5XSU47CisJCXNmYi0+ZW5hYmxlZCB8PSAoMSA8PCBpbmRleCk7CisJCWJyZWFrOworCisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwl3cml0ZWwod2luY29uLCBzZmItPnJlZ3MgKyBXSU5DT04oaW5kZXgpKTsKKworCS8qIENoZWNrIHRoZSBlbmFibGVkIHN0YXRlIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGJlIHJ1bm5pbmcgdGhlCisJICogbWFpbiBMQ0QgaW50ZXJmYWNlLCBhcyBpZiB0aGVyZSBhcmUgbm8gYWN0aXZlIHdpbmRvd3MgdGhlbgorCSAqIGl0IGlzIGhpZ2hseSBsaWtlbHkgdGhhdCB3ZSBhbHNvIGRvIG5vdCBuZWVkIHRvIG91dHB1dAorCSAqIGFueXRoaW5nLgorCSAqLworCisJLyogV2UgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBjb2RlLCBidXQgdGhlIGN1cnJlbnQKKwkgKiBzeXN0ZW0gb2YgdXNpbmcgZnJhbWVidWZmZXIgZXZlbnRzIG1lYW5zIHRoYXQgd2UgY2Fubm90IG1ha2UKKwkgKiB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBqdXN0IHdpbmRvdyAwIGJlaW5nIGluYWN0aXZlIGFuZCBhbGwKKwkgKiB0aGUgd2luZG93cyBiZWluZyBkb3duLgorCSAqCisJICogczNjX2ZiX2VuYWJsZShzZmIsIHNmYi0+ZW5hYmxlZCA/IDEgOiAwKTsKKwkqLworCisJLyogd2UncmUgc3R1Y2sgd2l0aCB0aGlzIHVudGlsIHdlIGNhbiBkbyBzb21ldGhpbmcgYWJvdXQgb3ZlcnJpZGluZworCSAqIHRoZSBwb3dlciBjb250cm9sIHVzaW5nIHRoZSBibGFua2luZyBldmVudCBmb3IgYSBzaW5nbGUgZmIuCisJICovCisJaWYgKGluZGV4ID09IDApCisJCXMzY19mYl9lbmFibGUoc2ZiLCBibGFua19tb2RlICE9IEZCX0JMQU5LX1BPV0VSRE9XTiA/IDEgOiAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBzM2NfZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0gczNjX2ZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IHMzY19mYl9zZXRfcGFyLAorCS5mYl9ibGFuawk9IHMzY19mYl9ibGFuaywKKwkuZmJfc2V0Y29scmVnCT0gczNjX2ZiX3NldGNvbHJlZywKKwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorfTsKKworLyoqCisgKiBzM2NfZmJfYWxsb2NfbWVtb3J5KCkgLSBhbGxvY2F0ZSBkaXNwbGF5IG1lbW9yeSBmb3IgZnJhbWVidWZmZXIgd2luZG93CisgKiBAc2ZiOiBUaGUgYmFzZSByZXNvdXJjZXMgZm9yIHRoZSBoYXJkd2FyZS4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gaW5pdGlhbGlzZSBtZW1vcnkgZm9yLgorICoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGdpdmVuIGZyYW1lYnVmZmVyLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfZmJfYWxsb2NfbWVtb3J5KHN0cnVjdCBzM2NfZmIgKnNmYiwKKwkJCQkJIHN0cnVjdCBzM2NfZmJfd2luICp3aW4pCit7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGEgPSB3aW4tPndpbmRhdGE7CisJdW5zaWduZWQgaW50IHJlYWxfc2l6ZSwgdmlydF9zaXplLCBzaXplOworCXN0cnVjdCBmYl9pbmZvICpmYmkgPSB3aW4tPmZiaW5mbzsKKwlkbWFfYWRkcl90IG1hcF9kbWE7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiYWxsb2NhdGluZyBtZW1vcnkgZm9yIGRpc3BsYXlcbiIpOworCisJcmVhbF9zaXplID0gd2luZGF0YS0+d2luX21vZGUueHJlcyAqIHdpbmRhdGEtPndpbl9tb2RlLnlyZXM7CisJdmlydF9zaXplID0gd2luZGF0YS0+dmlydHVhbF94ICogd2luZGF0YS0+dmlydHVhbF95OworCisJZGV2X2RiZyhzZmItPmRldiwgInJlYWxfc2l6ZT0ldSAoJXUuJXUpLCB2aXJ0X3NpemU9JXUgKCV1LiV1KVxuIiwKKwkJcmVhbF9zaXplLCB3aW5kYXRhLT53aW5fbW9kZS54cmVzLCB3aW5kYXRhLT53aW5fbW9kZS55cmVzLAorCQl2aXJ0X3NpemUsIHdpbmRhdGEtPnZpcnR1YWxfeCwgd2luZGF0YS0+dmlydHVhbF95KTsKKworCXNpemUgPSAocmVhbF9zaXplID4gdmlydF9zaXplKSA/IHJlYWxfc2l6ZSA6IHZpcnRfc2l6ZTsKKwlzaXplICo9ICh3aW5kYXRhLT5tYXhfYnBwID4gMTYpID8gMzIgOiB3aW5kYXRhLT5tYXhfYnBwOworCXNpemUgLz0gODsKKworCWZiaS0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJ3YW50ICV1IGJ5dGVzIGZvciB3aW5kb3dcbiIsIHNpemUpOworCisJZmJpLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoc2ZiLT5kZXYsIHNpemUsCisJCQkJCQkgICZtYXBfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZiaS0+c2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2RiZyhzZmItPmRldiwgIm1hcHBlZCAleCB0byAlcFxuIiwKKwkJKHVuc2lnbmVkIGludCltYXBfZG1hLCBmYmktPnNjcmVlbl9iYXNlKTsKKworCW1lbXNldChmYmktPnNjcmVlbl9iYXNlLCAweDAsIHNpemUpOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBtYXBfZG1hOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX2ZyZWVfbWVtb3J5KCkgLSBmcmVlIHRoZSBkaXNwbGF5IG1lbW9yeSBmb3IgdGhlIGdpdmVuIHdpbmRvdworICogQHNmYjogVGhlIGJhc2UgcmVzb3VyY2VzIGZvciB0aGUgaGFyZHdhcmUuCisgKiBAd2luOiBUaGUgd2luZG93IHRvIGZyZWUgdGhlIGRpc3BsYXkgbWVtb3J5IGZvci4KKyAqCisgKiBGcmVlIHRoZSBkaXNwbGF5IG1lbW9yeSBhbGxvY2F0ZWQgYnkgczNjX2ZiX2FsbG9jX21lbW9yeSgpLgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfZnJlZV9tZW1vcnkoc3RydWN0IHMzY19mYiAqc2ZiLCBzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luKQoreworCXN0cnVjdCBmYl9pbmZvICpmYmkgPSB3aW4tPmZiaW5mbzsKKworCWRtYV9mcmVlX3dyaXRlY29tYmluZShzZmItPmRldiwgUEFHRV9BTElHTihmYmktPmZpeC5zbWVtX2xlbiksCisJCQkgICAgICBmYmktPnNjcmVlbl9iYXNlLCBmYmktPmZpeC5zbWVtX3N0YXJ0KTsKK30KKworLyoqCisgKiBzM2NfZmJfcmVsZWFzZV93aW4oKSAtIHJlbGVhc2UgcmVzb3VyY2VzIGZvciBhIGZyYW1lYnVmZmVyIHdpbmRvdy4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gY2xlYW51cCB0aGUgcmVzb3VyY2VzIGZvci4KKyAqCisgKiBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdGhhdCB3aGVyZSBjbGFpbWVkIGZvciB0aGUgaGFyZHdhcmUgd2luZG93LAorICogc3VjaCBhcyB0aGUgZnJhbWVidWZmZXIgaW5zdGFuY2UgYW5kIGFueSBtZW1vcnkgY2xhaW1lZCBmb3IgaXQuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19mYl9yZWxlYXNlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHN0cnVjdCBzM2NfZmJfd2luICp3aW4pCit7CisJZmJfZGVhbGxvY19jbWFwKCZ3aW4tPmZiaW5mby0+Y21hcCk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih3aW4tPmZiaW5mbyk7CisJczNjX2ZiX2ZyZWVfbWVtb3J5KHNmYiwgd2luKTsKK30KKworLyoqCisgKiBzM2NfZmJfcHJvYmVfd2luKCkgLSByZWdpc3RlciBhbiBoYXJkd2FyZSB3aW5kb3cKKyAqIEBzZmI6IFRoZSBiYXNlIHJlc291cmNlcyBmb3IgdGhlIGhhcmR3YXJlCisgKiBAcmVzOiBQb2ludGVyIHRvIHdoZXJlIHRvIHBsYWNlIHRoZSByZXN1bHRhbnQgd2luZG93LgorICoKKyAqIEFsbG9jYXRlIGFuZCBkbyB0aGUgYmFzaWMgaW5pdGlhbGlzYXRpb24gZm9yIG9uZSBvZiB0aGUgaGFyZHdhcmUncyBncmFwaGljcworICogd2luZG93cy4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgczNjX2ZiX3Byb2JlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHVuc2lnbmVkIGludCB3aW5fbm8sCisJCQkJICAgICAgc3RydWN0IHMzY19mYl93aW4gKipyZXMpCit7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqaW5pdG1vZGU7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGE7CisJc3RydWN0IHMzY19mYl93aW4gKndpbjsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpbmZvOworCWludCBwYWxldHRlX3NpemU7CisJaW50IHJldDsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJwcm9iaW5nIHdpbmRvdyAlZFxuIiwgd2luX25vKTsKKworCXBhbGV0dGVfc2l6ZSA9IHMzY19mYl93aW5fcGFsX3NpemUod2luX25vKTsKKworCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2ZiX3dpbikgKworCQkJCSAgIHBhbGV0dGVfc2l6ZSAqIHNpemVvZih1MzIpLCBzZmItPmRldik7CisJaWYgKCFmYmluZm8pIHsKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXdpbmRhdGEgPSBzZmItPnBkYXRhLT53aW5bd2luX25vXTsKKwlpbml0bW9kZSA9ICZ3aW5kYXRhLT53aW5fbW9kZTsKKworCVdBUk5fT04od2luZGF0YS0+bWF4X2JwcCA9PSAwKTsKKwlXQVJOX09OKHdpbmRhdGEtPndpbl9tb2RlLnhyZXMgPT0gMCk7CisJV0FSTl9PTih3aW5kYXRhLT53aW5fbW9kZS55cmVzID09IDApOworCisJd2luID0gZmJpbmZvLT5wYXI7CisJdmFyID0gJmZiaW5mby0+dmFyOworCXdpbi0+ZmJpbmZvID0gZmJpbmZvOworCXdpbi0+cGFyZW50ID0gc2ZiOworCXdpbi0+d2luZGF0YSA9IHdpbmRhdGE7CisJd2luLT5pbmRleCA9IHdpbl9ubzsKKwl3aW4tPnBhbGV0dGVfYnVmZmVyID0gKHUzMiAqKSh3aW4gKyAxKTsKKworCXJldCA9IHMzY19mYl9hbGxvY19tZW1vcnkoc2ZiLCB3aW4pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkaXNwbGF5IG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2ZyYW1lYnVmZmVyOworCX0KKworCS8qIHNldHVwIHRoZSByL2IvZyBwb3NpdGlvbnMgZm9yIHRoZSB3aW5kb3cncyBwYWxldHRlICovCisJczNjX2ZiX2luaXRfcGFsZXR0ZSh3aW5fbm8sICZ3aW4tPnBhbGV0dGUpOworCisJLyogc2V0dXAgdGhlIGluaXRpYWwgdmlkZW8gbW9kZSBmcm9tIHRoZSB3aW5kb3cgKi8KKwlmYl92aWRlb21vZGVfdG9fdmFyKCZmYmluZm8tPnZhciwgaW5pdG1vZGUpOworCisJZmJpbmZvLT5maXgudHlwZQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmYmluZm8tPmZpeC5hY2NlbAk9IEZCX0FDQ0VMX05PTkU7CisJZmJpbmZvLT52YXIuYWN0aXZhdGUJPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJpbmZvLT52YXIudm1vZGUJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gd2luZGF0YS0+ZGVmYXVsdF9icHA7CisJZmJpbmZvLT5mYm9wcwkJPSAmczNjX2ZiX29wczsKKwlmYmluZm8tPmZsYWdzCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJZmJpbmZvLT5wc2V1ZG9fcGFsZXR0ZSAgPSAmd2luLT5wc2V1ZG9fcGFsZXR0ZTsKKworCS8qIHByZXBhcmUgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIGZyYW1lYnVmZmVyICovCisKKwlyZXQgPSBzM2NfZmJfY2hlY2tfdmFyKCZmYmluZm8tPnZhciwgZmJpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHNmYi0+ZGV2LCAiY2hlY2tfdmFyIGZhaWxlZCBvbiBpbml0aWFsIHZpZGVvIHBhcmFtc1xuIik7CisJCWdvdG8gZXJyX2FsbG9jX21lbTsKKwl9CisKKwkvKiBjcmVhdGUgaW5pdGlhbCBjb2xvdXIgbWFwICovCisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZmYmluZm8tPmNtYXAsIHMzY19mYl93aW5fcGFsX3NpemUod2luX25vKSwgMSk7CisJaWYgKHJldCA9PSAwKQorCQlmYl9zZXRfY21hcCgmZmJpbmZvLT5jbWFwLCBmYmluZm8pOworCWVsc2UKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBmYiBjbWFwXG4iKTsKKworCXMzY19mYl9zZXRfcGFyKGZiaW5mbyk7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiYWJvdXQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOworCisJLyogcnVuIHRoZSBjaGVja192YXIgYW5kIHNldF9wYXIgb24gb3VyIGNvbmZpZ3VyYXRpb24uICovCisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoc2ZiLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOworCQlnb3RvIGVycl9hbGxvY19tZW07CisJfQorCisJKnJlcyA9IHdpbjsKKwlkZXZfaW5mbyhzZmItPmRldiwgIndpbmRvdyAlZDogZmIgJXNcbiIsIHdpbl9ubywgZmJpbmZvLT5maXguaWQpOworCisJcmV0dXJuIDA7CisKK2Vycl9hbGxvY19tZW06CisJczNjX2ZiX2ZyZWVfbWVtb3J5KHNmYiwgd2luKTsKKworZXJyX2ZyYW1lYnVmZmVyOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzY19mYl9jbGVhcl93aW4oKSAtIGNsZWFyIGhhcmR3YXJlIHdpbmRvdyByZWdpc3RlcnMuCisgKiBAc2ZiOiBUaGUgYmFzZSByZXNvdXJjZXMgZm9yIHRoZSBoYXJkd2FyZS4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gcHJvY2Vzcy4KKyAqCisgKiBSZXNldCB0aGUgc3BlY2lmaWMgd2luZG93IHJlZ2lzdGVycyB0byBhIGtub3duIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfY2xlYXJfd2luKHN0cnVjdCBzM2NfZmIgKnNmYiwgaW50IHdpbikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZmItPnJlZ3M7CisKKwl3cml0ZWwoMCwgcmVncyArIFdJTkNPTih3aW4pKTsKKwl3cml0ZWwoMHhmZmZmZmYsIHJlZ3MgKyBXeEtFWUNPTnkod2luLCAwKSk7CisJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV3hLRVlDT055KHdpbiwgMSkpOworCisJd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQSh3aW4pKTsKKwl3cml0ZWwoMCwgcmVncyArIFZJRE9TRF9CKHdpbikpOworCXdyaXRlbCgwLCByZWdzICsgVklET1NEX0Mod2luKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHMzY19mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQ7CisJc3RydWN0IHMzY19mYiAqc2ZiOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCB3aW47CisJaW50IHJldCA9IDA7CisKKwlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGQpIHsKKwkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNmYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2NfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNmYikgeworCQlkZXZfZXJyKGRldiwgIm5vIG1lbW9yeSBmb3IgZnJhbWVidWZmZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2ZiLT5kZXYgPSBkZXY7CisJc2ZiLT5wZGF0YSA9IHBkOworCisJc2ZiLT5idXNfY2xrID0gY2xrX2dldChkZXYsICJsY2QiKTsKKwlpZiAoSVNfRVJSKHNmYi0+YnVzX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGJ1cyBjbG9ja1xuIik7CisJCWdvdG8gZXJyX3NmYjsKKwl9CisKKwljbGtfZW5hYmxlKHNmYi0+YnVzX2Nsayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXNmYi0+cmVnc19yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgICBkZXZfbmFtZShkZXYpKTsKKwlpZiAoIXNmYi0+cmVnc19yZXMpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY2xhaW0gcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXNmYi0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXNmYi0+cmVncykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9yZXFfcmVnaW9uOworCX0KKworCWRldl9kYmcoZGV2LCAiZ290IHJlc291cmNlcyAocmVncyAlcCksIHByb2Jpbmcgd2luZG93c1xuIiwgc2ZiLT5yZWdzKTsKKworCS8qIHNldHVwIGdwaW8gYW5kIG91dHB1dCBwb2xhcml0eSBjb250cm9scyAqLworCisJcGQtPnNldHVwX2dwaW8oKTsKKworCXdyaXRlbChwZC0+dmlkY29uMSwgc2ZiLT5yZWdzICsgVklEQ09OMSk7CisKKwkvKiB6ZXJvIGFsbCB3aW5kb3dzIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBTM0NfRkJfTUFYX1dJTjsgd2luKyspCisJCXMzY19mYl9jbGVhcl93aW4oc2ZiLCB3aW4pOworCisJLyogd2UgaGF2ZSB0aGUgcmVnaXN0ZXIgc2V0dXAsIHN0YXJ0IGFsbG9jYXRpbmcgZnJhbWVidWZmZXJzICovCisKKwlmb3IgKHdpbiA9IDA7IHdpbiA8IFMzQ19GQl9NQVhfV0lOOyB3aW4rKykgeworCQlpZiAoIXBkLT53aW5bd2luXSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHMzY19mYl9wcm9iZV93aW4oc2ZiLCB3aW4sICZzZmItPndpbmRvd3Nbd2luXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgd2luZG93ICVkXG4iLCB3aW4pOworCQkJZm9yICg7IHdpbiA+PSAwOyB3aW4tLSkKKwkJCQlzM2NfZmJfcmVsZWFzZV93aW4oc2ZiLCBzZmItPndpbmRvd3Nbd2luXSk7CisJCQlnb3RvIGVycl9pb3JlbWFwOworCQl9CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2ZiKTsKKworCXJldHVybiAwOworCitlcnJfaW9yZW1hcDoKKwlpb3VubWFwKHNmYi0+cmVncyk7CisKK2Vycl9yZXFfcmVnaW9uOgorCXJlbGVhc2VfcmVzb3VyY2Uoc2ZiLT5yZWdzX3Jlcyk7CisJa2ZyZWUoc2ZiLT5yZWdzX3Jlcyk7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGUoc2ZiLT5idXNfY2xrKTsKKwljbGtfcHV0KHNmYi0+YnVzX2Nsayk7CisKK2Vycl9zZmI6CisJa2ZyZWUoc2ZiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzY19mYl9yZW1vdmUoKSAtIENsZWFudXAgb24gbW9kdWxlIGZpbmFsaXNhdGlvbgorICogQHBkZXY6IFRoZSBwbGF0Zm9ybSBkZXZpY2Ugd2UgYXJlIGJvdW5kIHRvLgorICoKKyAqIFNodXRkb3duIGFuZCB0aGVuIHJlbGVhc2UgYWxsIHRoZSByZXNvdXJjZXMgdGhhdCB0aGUgZHJpdmVyIGFsbG9jYXRlZAorICogb24gaW5pdGlhbGlzYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IHMzY19mYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgd2luOworCisJZm9yICh3aW4gPSAwOyB3aW4gPD0gUzNDX0ZCX01BWF9XSU47IHdpbisrKQorCQlzM2NfZmJfcmVsZWFzZV93aW4oc2ZiLCBzZmItPndpbmRvd3Nbd2luXSk7CisKKwlpb3VubWFwKHNmYi0+cmVncyk7CisKKwljbGtfZGlzYWJsZShzZmItPmJ1c19jbGspOworCWNsa19wdXQoc2ZiLT5idXNfY2xrKTsKKworCXJlbGVhc2VfcmVzb3VyY2Uoc2ZiLT5yZWdzX3Jlcyk7CisJa2ZyZWUoc2ZiLT5yZWdzX3Jlcyk7CisKKwlrZnJlZShzZmIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgczNjX2ZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzM2NfZmJfd2luICp3aW47CisJaW50IHdpbl9ubzsKKworCWZvciAod2luX25vID0gUzNDX0ZCX01BWF9XSU47IHdpbl9ubyA+PSAwOyB3aW5fbm8tLSkgeworCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKKwkJaWYgKCF3aW4pCisJCQljb250aW51ZTsKKworCQkvKiB1c2UgdGhlIGJsYW5rIGZ1bmN0aW9uIHRvIHB1c2ggaW50byBwb3dlci1kb3duICovCisJCXMzY19mYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIHdpbi0+ZmJpbmZvKTsKKwl9CisKKwljbGtfZGlzYWJsZShzZmItPmJ1c19jbGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19mYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luOworCWludCB3aW5fbm87CisKKwljbGtfZW5hYmxlKHNmYi0+YnVzX2Nsayk7CisKKwlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IFMzQ19GQl9NQVhfV0lOOyB3aW5fbm8rKykgeworCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKKwkJaWYgKCF3aW4pCisJCQljb250aW51ZTsKKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXN1bWluZyB3aW5kb3cgJWRcbiIsIHdpbl9ubyk7CisJCXMzY19mYl9zZXRfcGFyKHdpbi0+ZmJpbmZvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzY19mYl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjX2ZiX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19mYl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHMzY19mYl9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzY19mYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2NfZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzY19mYl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYy1mYiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2NfZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19mYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjX2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjX2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHMzY19mYl9pbml0KTsKK21vZHVsZV9leGl0KHMzY19mYl9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFMzQyBTb0MgRnJhbWVidWZmZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYy1mYiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwppbmRleCBmNTI1MmMyLi5iYmE1MzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwpAQCAtODM3LDYgKzgzNyw4IEBACiAJCWlvdW5tYXAocGFyLT5yZWdzKTsKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihEQkVfUkVHX1BIWVMsIERCRV9SRUdfU0laRSk7CisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYwppbmRleCBkZjUzMzY1Li5hNDM5MTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYwpAQCAtNzk1LDggKzc5NSw5IEBACiAgICAgaWYgKCFyZXR2YWwgfHwgcmV0dmFsID09IDQpCiAJcmV0dXJuIC1FSU5WQUw7CQkJCiAKLSAgICAvKiBUaGlzIGhhcyB0byBiZWVuIGRvbmUgISEhICovCQotICAgIGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIGNtYXBfbGVuLCAwKTsKKyAgICAvKiBUaGlzIGhhcyB0byBiZSBkb25lISAqLworICAgIGlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBjbWFwX2xlbiwgMCkpCisJcmV0dXJuIC1FTk9NRU07CiAJCiAgICAgLyogCiAgICAgICogVGhlIGZvbGxvd2luZyBpcyBkb25lIGluIHRoZSBjYXNlIG9mIGhhdmluZyBoYXJkd2FyZSB3aXRoIGEgc3RhdGljIApAQCAtODIwLDggKzgyMSwxMCBAQAogICAgICAqLwogICAgIC8qIHh4eGZiX3NldF9wYXIoaW5mbyk7ICovCiAKLSAgICBpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQorICAgIGlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCXJldHVybiAtRUlOVkFMOworICAgIH0KICAgICBwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAogCSAgIGluZm8tPmZpeC5pZCk7CiAgICAgcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7IC8qIG9yIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCmluZGV4IGRjZDk4NzkuLmViNWQ3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCkBAIC0xNTI1LDcgKzE1MjUsMTAgQEAKIAl9CiAKIAkvKiBpbml0aWFsaXNlIGFuZCBzZXQgdGhlIHBhbGV0dGUgKi8KLQlmYl9hbGxvY19jbWFwKCZmYi0+Y21hcCwgTlJfUEFMRVRURSwgMCk7CisJaWYgKGZiX2FsbG9jX2NtYXAoJmZiLT5jbWFwLCBOUl9QQUxFVFRFLCAwKSkgeworCQlkZXZfZXJyKGluZm8tPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjbWFwIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlmYl9zZXRfY21hcCgmZmItPmNtYXAsIGZiKTsKIAogCXJldCA9IChmYi0+ZmJvcHMtPmZiX2NoZWNrX3ZhcikoJmZiLT52YXIsIGZiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwppbmRleCA1YjExYTAwLi42MDlkMGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zc3RmYi5jCkBAIC0xNDIxLDEzICsxNDIxLDE2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAJCi0JZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInNzdGZiOiBjYW4ndCBhbGxvYyBjbWFwIG1lbW9yeS5cbiIpOworCQlnb3RvIGZhaWw7CisJfQogCiAJLyogcmVnaXN0ZXIgZmIgKi8KIAlpbmZvLT5kZXZpY2UgPSAmcGRldi0+ZGV2OwogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzc3RmYjogY2FuJ3QgcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CiAJfQogCiAJc3N0ZmJfY2xlYXJfc2NyZWVuKGluZm8pOwpAQCAtMTQ0MSw4ICsxNDQ0LDkgQEAKIAogCXJldHVybiAwOwogCi1mYWlsOgorZmFpbF9yZWdpc3RlcjoKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworZmFpbDoKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIGZhaWxfZmJfcmVtYXA6CiAJaW91bm1hcChwYXItPm1taW9fdmJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdGlmYi5jIGIvZHJpdmVycy92aWRlby9zdGlmYi5jCmluZGV4IDE2NjQ4MTQuLmVhYmFhZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3RpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKQEAgLTEyNjIsMjQgKzEyNjIsMjUgQEAKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gJmZiLT5wc2V1ZG9fcGFsZXR0ZTsKIAotCS8qIFRoaXMgaGFzIHRvIGJlZW4gZG9uZSAhISEgKi8KLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBOUl9QQUxFVFRFLCAwKTsKKwkvKiBUaGlzIGhhcyB0byBiZSBkb25lICEhISAqLworCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBOUl9QQUxFVFRFLCAwKSkKKwkJZ290byBvdXRfZXJyMTsKIAlzdGlmYl9pbml0X2Rpc3BsYXkoZmIpOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZml4LT5zbWVtX3N0YXJ0LCBmaXgtPnNtZW1fbGVuLCAic3RpZmIgZmIiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInN0aWZiOiBjYW5ub3QgcmVzZXJ2ZSBmYiByZWdpb24gMHglMDRseC0weCUwNGx4XG4iLAogCQkJCWZpeC0+c21lbV9zdGFydCwgZml4LT5zbWVtX3N0YXJ0K2ZpeC0+c21lbV9sZW4pOwotCQlnb3RvIG91dF9lcnIxOworCQlnb3RvIG91dF9lcnIyOwogCX0KIAkJCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZml4LT5tbWlvX3N0YXJ0LCBmaXgtPm1taW9fbGVuLCAic3RpZmIgbW1pbyIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3RpZmI6IGNhbm5vdCByZXNlcnZlIHN0aSBtbWlvIHJlZ2lvbiAweCUwNGx4LTB4JTA0bHhcbiIsCiAJCQkJZml4LT5tbWlvX3N0YXJ0LCBmaXgtPm1taW9fc3RhcnQrZml4LT5tbWlvX2xlbik7Ci0JCWdvdG8gb3V0X2VycjI7CisJCWdvdG8gb3V0X2VycjM7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+aW5mbykgPCAwKQotCQlnb3RvIG91dF9lcnIzOworCQlnb3RvIG91dF9lcnI0OwogCiAJc3RpLT5pbmZvID0gaW5mbzsgLyogc2F2ZSBmb3IgdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpICovCiAKQEAgLTEyOTcsMTMgKzEyOTgsMTQgQEAKIAlyZXR1cm4gMDsKIAogCi1vdXRfZXJyMzoKK291dF9lcnI0OgogCXJlbGVhc2VfbWVtX3JlZ2lvbihmaXgtPm1taW9fc3RhcnQsIGZpeC0+bW1pb19sZW4pOwotb3V0X2VycjI6CitvdXRfZXJyMzoKIAlyZWxlYXNlX21lbV9yZWdpb24oZml4LT5zbWVtX3N0YXJ0LCBmaXgtPnNtZW1fbGVuKTsKK291dF9lcnIyOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBvdXRfZXJyMToKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogb3V0X2VycjA6CiAJa2ZyZWUoZmIpOwogCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jIGIvZHJpdmVycy92aWRlby9zdW54dnI1MDAuYwppbmRleCBjMmJhNTFiLi4xOGI5NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMKQEAgLTM0OSwxMSArMzQ5LDE0IEBACiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlM2Q6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlciAlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZ290byBlcnJfdW5tYXBfZmI7CisJCWdvdG8gZXJyX2ZyZWVfY21hcDsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXJyX2ZyZWVfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCiBlcnJfdW5tYXBfZmI6CiAJaW91bm1hcChlcC0+ZmJfYmFzZSk7CiAKQEAgLTM4OSw2ICszOTIsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMSk7CiAKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogICAgICAgICBmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggMTRiZDNmMy4uZWU2NDc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC0xMzkzLDYgKzEzOTMsNyBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKaW5kZXggNjgwNjQyYy4uYTg2MDQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Z2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGdhZmIuYwpAQCAtMTY2Myw3ICsxNjYzLDcgQEAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGdhZmI6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnIyOwogCX0KIAogCWlmICh0Z2FfYnVzX3BjaSkgewpAQCAtMTY4Miw2ICsxNjgyLDggQEAKIAogCXJldHVybiAwOwogCisgZXJyMjoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogIGVycjE6CiAJaWYgKG1lbV9iYXNlKQogCQlpb3VubWFwKG1lbV9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jCmluZGV4IDQ3OWIyZTcuLjAzYTljMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMKKysrIGIvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIFRyaWRlbnQgVEdVSSwgQmxhZGUgYW5kIEltYWdlIHNlcmllcwogICoKICAqIENvcHlyaWdodCAyMDAxLCAyMDAyIC0gSmFuaSBNb25vc2VzICAgPGphbmlAaXYucm8+Ci0gKgorICogQ29weXJpZ2h0IDIwMDkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KICAqCiAgKiBDUkVESVRTOihpbiBvcmRlciBvZiBhcHBlYXJhbmNlKQogICoJc2tlbGV0b25mYi5jIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiBhbmQgb3RoZXIgZmIgY29kZSBpbiBkcml2ZXJzL3ZpZGVvCkBAIC00OTAsNyArNDkwLDYgQEAKIC8qCiAgKiBBY2NlbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRoZSB1cHBlciBsYXllcnMKICAqLwotI2lmZGVmIENPTkZJR19GQl9UUklERU5UX0FDQ0VMCiBzdGF0aWMgdm9pZCB0cmlkZW50ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpmcikKIHsKQEAgLTU2NSwxMSArNTY0LDYgQEAKIAkJcGFyLT53YWl0X2VuZ2luZShwYXIpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgdHJpZGVudGZiX2ZpbGxyZWN0IGNmYl9maWxscmVjdAotI2RlZmluZSB0cmlkZW50ZmJfY29weWFyZWEgY2ZiX2NvcHlhcmVhCi0jZGVmaW5lIHRyaWRlbnRmYl9pbWFnZWJsaXQgY2ZiX2ltYWdlYmxpdAotI2VuZGlmIC8qIENPTkZJR19GQl9UUklERU5UX0FDQ0VMICovCiAKIC8qCiAgKiBIYXJkd2FyZSBhY2Nlc3MgZnVuY3Rpb25zCkBAIC0xMzMzLDkgKzEzMjcsNyBAQAogCS5mYl9maWxscmVjdCA9IHRyaWRlbnRmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSB0cmlkZW50ZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IHRyaWRlbnRmYl9pbWFnZWJsaXQsCi0jaWZkZWYgQ09ORklHX0ZCX1RSSURFTlRfQUNDRUwKIAkuZmJfc3luYyA9IHRyaWRlbnRmYl9zeW5jLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cmlkZW50X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMTM1OSwxMCArMTM1MSw2IEBACiAKIAljaGlwX2lkID0gaWQtPmRldmljZTsKIAotI2lmbmRlZiBDT05GSUdfRkJfVFJJREVOVF9BQ0NFTAotCW5vYWNjZWwgPSAxOwotI2VuZGlmCi0KIAkvKiBJZiBQQ0kgaWQgaXMgMHg5NjYwIHRoZW4gZnVydGhlciBkZXRlY3QgY2hpcCB0eXBlICovCiAKIAlpZiAoY2hpcF9pZCA9PSBUR1VJOTY2MCkgewpAQCAtMTQ5MCw2ICsxNDc4LDkgQEAKIAl9IGVsc2UKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CiAKKwlpZiAoaXNfYmxhZGUoY2hpcF9pZCkgJiYgY2hpcF9pZCAhPSBCTEFERTNEKQorCQlpbmZvLT5mbGFncyB8PSBGQklORk9fUkVBRFNfRkFTVDsKKwogCWluZm8tPnBpeG1hcC5hZGRyID0ga21hbGxvYyg0MDk2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8tPnBpeG1hcC5hZGRyKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xNTYzLDYgKzE1NTQsNyBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbih0cmlkZW50ZmJfZml4Lm1taW9fc3RhcnQsIHRyaWRlbnRmYl9maXgubW1pb19sZW4pOwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8tPnBpeG1hcC5hZGRyKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKQEAgLTE2NjMsNCArMTY1NSw1IEBACiBNT0RVTEVfQVVUSE9SKCJKYW5pIE1vbm9zZXMgPGphbmlAaXYucm8+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVHJpZGVudCBjYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJjeWJsYWZiIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggNzRhZTc1OC4uMGIzNzBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCXV2ZmJfdGFza3Nbc2VxXSA9IHRhc2s7CiAJbXV0ZXhfdW5sb2NrKCZ1dmZiX2xvY2spOwogCi0JZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIGdmcF9hbnkoKSk7CisJZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPT0gLUVTUkNIKSB7CiAJCS8qCiAJCSAqIFRyeSB0byBzdGFydCB0aGUgdXNlcnNwYWNlIGhlbHBlciBpZiBzZW5kaW5nCkBAIC04NTAsMTQgKzg1MCwxNiBAQAogCWlmICh2YmVtb2RlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwYXItPnZiZV9tb2Rlc19jbnQ7IGkrKykgewogCQkJaWYgKHBhci0+dmJlX21vZGVzW2ldLm1vZGVfaWQgPT0gdmJlbW9kZSkgeworCQkJCW1vZGVpZCA9IGk7CisJCQkJdXZlc2FmYl9zZXR1cF92YXIoJmluZm8tPnZhciwgaW5mbywKKwkJCQkJCSZwYXItPnZiZV9tb2Rlc1ttb2RlaWRdKTsKIAkJCQlmYl9nZXRfbW9kZShGQl9WU1lOQ1RJTUlOR1MgfCBGQl9JR05PUkVNT04sIDYwLAotCQkJCQkJCSZpbmZvLT52YXIsIGluZm8pOworCQkJCQkJJmluZm8tPnZhciwgaW5mbyk7CiAJCQkJLyoKIAkJCQkgKiBXaXRoIHBpeGNsb2NrIHNldCB0byAwLCB0aGUgZGVmYXVsdCBCSU9TCiAJCQkJICogdGltaW5ncyB3aWxsIGJlIHVzZWQgaW4gc2V0X3BhcigpLgogCQkJCSAqLwogCQkJCWluZm8tPnZhci5waXhjbG9jayA9IDA7Ci0JCQkJbW9kZWlkID0gaTsKIAkJCQlnb3RvIGdvdG1vZGU7CiAJCQl9CiAJCX0KQEAgLTkwNCw4ICs5MDYsMTEgQEAKIAkJCWZiX3ZpZGVvbW9kZV90b192YXIoJmluZm8tPnZhciwgbW9kZSk7CiAJCX0gZWxzZSB7CiAJCQltb2RlaWQgPSBwYXItPnZiZV9tb2Rlc1swXS5tb2RlX2lkOworCQkJdXZlc2FmYl9zZXR1cF92YXIoJmluZm8tPnZhciwgaW5mbywKKwkJCQkJJnBhci0+dmJlX21vZGVzW21vZGVpZF0pOwogCQkJZmJfZ2V0X21vZGUoRkJfVlNZTkNUSU1JTkdTIHwgRkJfSUdOT1JFTU9OLCA2MCwKLQkJCQkgICAgJmluZm8tPnZhciwgaW5mbyk7CisJCQkJCSZpbmZvLT52YXIsIGluZm8pOworCiAJCQlnb3RvIGdvdG1vZGU7CiAJCX0KIAl9CkBAIC05MTcsOSArOTIyLDkgQEAKIAlpZiAobW9kZWlkID09IC0xKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotZ290bW9kZToKIAl1dmVzYWZiX3NldHVwX3ZhcigmaW5mby0+dmFyLCBpbmZvLCAmcGFyLT52YmVfbW9kZXNbbW9kZWlkXSk7CiAKK2dvdG1vZGU6CiAJLyoKIAkgKiBJZiB3ZSBhcmUgbm90IFZCRTMuMCsgY29tcGxpYW50LCB3ZSdyZSBkb25lIC0tIHRoZSBCSU9TIHdpbGwKIAkgKiBpZ25vcmUgb3VyIHRpbWluZ3MgYW55d2F5LgpAQCAtMTU1Miw3ICsxNTU3LDcgQEAKIAl9CiAKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAotCQkJKHBhci0+eXBhbikgPyBGQklORk9fSFdBQ0NFTF9ZUEFOIDogMDsKKwkJCShwYXItPnlwYW4gPyBGQklORk9fSFdBQ0NFTF9ZUEFOIDogMCk7CiAKIAlpZiAoIXBhci0+eXBhbikKIAkJaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKaW5kZXggN2IwY2VmOS4uNGJiOWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKQEAgLTExOSw3ICsxMTksNyBAQAogc3RhdGljIGludCB2YWxreXJpZV92YXJfdG9fcGFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCXN0cnVjdCBmYl9wYXJfdmFsa3lyaWUgKnBhciwgY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwogCi1zdGF0aWMgdm9pZCB2YWxreXJpZV9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKTsKK3N0YXRpYyBpbnQgdmFsa3lyaWVfaW5pdF9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfaW5mb192YWxreXJpZSAqcCk7CiBzdGF0aWMgdm9pZCB2YWxreXJpZV9wYXJfdG9fZml4KHN0cnVjdCBmYl9wYXJfdmFsa3lyaWUgKnBhciwgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgpOwogc3RhdGljIHZvaWQgdmFsa3lyaWVfaW5pdF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIHN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKTsKIApAQCAtMzgxLDE4ICszODEsMjIgQEAKIAogCXZhbGt5cmllX2Nob29zZV9tb2RlKHApOwogCW1hY192bW9kZV90b192YXIoZGVmYXVsdF92bW9kZSwgZGVmYXVsdF9jbW9kZSwgJnAtPmluZm8udmFyKTsKLQl2YWxreXJpZV9pbml0X2luZm8oJnAtPmluZm8sIHApOworCWVyciA9IHZhbGt5cmllX2luaXRfaW5mbygmcC0+aW5mbywgcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CiAJdmFsa3lyaWVfaW5pdF9maXgoJnAtPmluZm8uZml4LCBwKTsKIAlpZiAodmFsa3lyaWVmYl9zZXRfcGFyKCZwLT5pbmZvKSkKIAkJLyogImNhbid0IGhhcHBlbiIgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJ2YWxreXJpZWZiOiBjYW4ndCBzZXQgZGVmYXVsdCB2aWRlbyBtb2RlXG4iKTsKIAogCWlmICgoZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJnAtPmluZm8pKSAhPSAwKQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF9jbWFwX2ZyZWU7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiB2YWxreXJpZSBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBwLT5pbmZvLm5vZGUpOwogCXJldHVybiAwOwogCisgb3V0X2NtYXBfZnJlZToKKwlmYl9kZWFsbG9jX2NtYXAoJnAtPmluZm8uY21hcCk7CiAgb3V0X2ZyZWU6CiAJaWYgKHAtPmZyYW1lX2J1ZmZlcikKIAkJaW91bm1hcChwLT5mcmFtZV9idWZmZXIpOwpAQCAtNTM4LDE0ICs1NDIsMTUgQEAKIAkJLyogeXdyYXBzdGVwLCB4cGFuc3RlcCwgeXBhbnN0ZXAgKi8KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHZhbGt5cmllX2luaXRfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2luZm9fdmFsa3lyaWUgKnApCitzdGF0aWMgaW50IF9faW5pdCB2YWxreXJpZV9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCXN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKQogewogCWluZm8tPmZib3BzID0gJnZhbGt5cmllZmJfb3BzOwogCWluZm8tPnNjcmVlbl9iYXNlID0gcC0+ZnJhbWVfYnVmZmVyICsgMHgxMDAwOwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBwLT5wc2V1ZG9fcGFsZXR0ZTsKLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwogCWluZm8tPnBhciA9ICZwLT5wYXI7CisJcmV0dXJuIGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggZTE2MzIyZC4uZDY4NTZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAlpbmZvLT52YXIgPSB2ZXNhZmJfZGVmaW5lZDsKIAlpbmZvLT5maXggPSB2ZXNhZmJfZml4OwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8Ci0JCSh5cGFuKSA/IEZCSU5GT19IV0FDQ0VMX1lQQU4gOiAwOworCQkoeXBhbiA/IEZCSU5GT19IV0FDQ0VMX1lQQU4gOiAwKTsKIAogCWlmICgheXBhbikKIAkJaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCmluZGV4IDkzZmUwOGQuLmNjOTE5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZmIuYwpAQCAtNTQzLDYgKzU0Myw3IEBACiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJcnZmcmVlKHZpZGVvbWVtb3J5LCB2aWRlb21lbW9yeXNpemUpOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCmluZGV4IDYzMjUyM2YuLjQ1YzU0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYwpAQCAtMjY3LDEzICsyNjcsMTcgQEAKIAlpbnQgbG9vcCA9IDA7CiAKIAl3aGlsZSAoIShyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKLQkJCVZJQV9WUl9RVUVVRV9CVVNZKSAmJiAobG9vcCsrIDwgTUFYTE9PUCkpCisJCQlWSUFfVlJfUVVFVUVfQlVTWSkgJiYgKGxvb3AgPCBNQVhMT09QKSkgeworCQlsb29wKys7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCXdoaWxlICgocmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1RBVFVTKSAmCiAJCSAgICAoVklBX0NNRF9SR1RSX0JVU1kgfCBWSUFfMkRfRU5HX0JVU1kgfCBWSUFfM0RfRU5HX0JVU1kpKSAmJgotCQkgICAgKGxvb3ArKyA8IE1BWExPT1ApKQorCQkgICAgKGxvb3AgPCBNQVhMT09QKSkgeworCQlsb29wKys7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCXJldHVybiBsb29wID49IE1BWExPT1A7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCAzN2I0MzNhLi5lMzI3Yjg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0yMDU5LDI1ICsyMDU5LDIxIEBACiAJaWYgKHZpYWZiX2VudHJ5KSB7CiAJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImR2cDAiLCAwLCAqdmlhZmJfZW50cnkpOwogCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY19yZWFkOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kdnAwX3Byb2Nfd3JpdGU7CiAJCX0KIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMSIsIDAsICp2aWFmYl9lbnRyeSk7CiAJCWlmIChlbnRyeSkgewotCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMV9wcm9jX3JlYWQ7CiAJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDFfcHJvY193cml0ZTsKIAkJfQogCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZnBoIiwgMCwgKnZpYWZiX2VudHJ5KTsKIAkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2NfcmVhZDsKIAkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZGZwaF9wcm9jX3dyaXRlOwogCQl9CiAJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRmcGwiLCAwLCAqdmlhZmJfZW50cnkpOwogCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY19yZWFkOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBsX3Byb2Nfd3JpdGU7CiAJCX0KQEAgLTIwODYsNyArMjA4Miw2IEBACiAJCSAgICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSkgewogCQkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgidnQxNjM2IiwgMCwgKnZpYWZiX2VudHJ5KTsKIAkJCWlmIChlbnRyeSkgewotCQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY19yZWFkOwogCQkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfdnQxNjM2X3Byb2Nfd3JpdGU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCA1Nzc3MTk2Li41YzUyMzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTIzLDE1ICsyMywyMSBAQAogCiAjaWZkZWYgREVCVUcKIC8qIEZvciBkZXZlbG9wbWVudCwgd2Ugd2FudCB0byBjcmFzaCB3aGVuZXZlciB0aGUgcmluZyBpcyBzY3Jld2VkLiAqLwotI2RlZmluZSBCQURfUklORyh2cSwgZm10Li4uKQkJCVwKLQlkbyB7IGRldl9lcnIoJnZxLT52cS52ZGV2LT5kZXYsIGZtdCk7IEJVRygpOyB9IHdoaWxlKDApCi0jZGVmaW5lIFNUQVJUX1VTRSh2cSkgXAotCWRvIHsgaWYgKCh2cSktPmluX3VzZSkgcGFuaWMoImluX3VzZSA9ICVpXG4iLCAodnEpLT5pbl91c2UpOyAodnEpLT5pbl91c2UgPSBfX0xJTkVfXzsgbWIoKTsgfSB3aGlsZSgwKQotI2RlZmluZSBFTkRfVVNFKHZxKSBcCi0JZG8geyBCVUdfT04oISh2cSktPmluX3VzZSk7ICh2cSktPmluX3VzZSA9IDA7IG1iKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQuLi4pCQkJXAorCWRvIHsgZGV2X2VycigmKF92cSktPnZxLnZkZXYtPmRldiwgZm10KTsgQlVHKCk7IH0gd2hpbGUoMCkKKy8qIENhbGxlciBpcyBzdXBwb3NlZCB0byBndWFyYW50ZWUgbm8gcmVlbnRyeS4gKi8KKyNkZWZpbmUgU1RBUlRfVVNFKF92cSkJCQkJCQlcCisJZG8gewkJCQkJCQlcCisJCWlmICgoX3ZxKS0+aW5fdXNlKQkJCQlcCisJCQlwYW5pYygiaW5fdXNlID0gJWlcbiIsIChfdnEpLT5pbl91c2UpOwlcCisJCShfdnEpLT5pbl91c2UgPSBfX0xJTkVfXzsJCQlcCisJCW1iKCk7CQkJCQkJXAorCX0gd2hpbGUoMCkKKyNkZWZpbmUgRU5EX1VTRShfdnEpIFwKKwlkbyB7IEJVR19PTighKF92cSktPmluX3VzZSk7IChfdnEpLT5pbl91c2UgPSAwOyBtYigpOyB9IHdoaWxlKDApCiAjZWxzZQotI2RlZmluZSBCQURfUklORyh2cSwgZm10Li4uKQkJCVwKLQlkbyB7IGRldl9lcnIoJnZxLT52cS52ZGV2LT5kZXYsIGZtdCk7ICh2cSktPmJyb2tlbiA9IHRydWU7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQkFEX1JJTkcoX3ZxLCBmbXQuLi4pCQkJXAorCWRvIHsgZGV2X2VycigmX3ZxLT52cS52ZGV2LT5kZXYsIGZtdCk7IChfdnEpLT5icm9rZW4gPSB0cnVlOyB9IHdoaWxlKDApCiAjZGVmaW5lIFNUQVJUX1VTRSh2cSkKICNkZWZpbmUgRU5EX1VTRSh2cSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS93MV9pby5jIGIvZHJpdmVycy93MS93MV9pby5jCmluZGV4IDQ0MmJkOGIuLjNlYmU5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvdzFfaW8uYworKysgYi9kcml2ZXJzL3cxL3cxX2lvLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkJcmV0dXJuIHcxX3JlYWRfYml0KGRldik7CiAJZWxzZSB7CiAJCXcxX3dyaXRlX2JpdChkZXYsIDApOwotCQlyZXR1cm4oMCk7CisJCXJldHVybiAwOwogCX0KIH0KIApAQCAtMTg0LDE3ICsxODQsMTcgQEAKICAqLwogdTggdzFfdHJpcGxldChzdHJ1Y3QgdzFfbWFzdGVyICpkZXYsIGludCBiZGlyKQogewotCWlmICggZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0ICkKLQkJcmV0dXJuKGRldi0+YnVzX21hc3Rlci0+dHJpcGxldChkZXYtPmJ1c19tYXN0ZXItPmRhdGEsIGJkaXIpKTsKKwlpZiAoZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0KQorCQlyZXR1cm4gZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0KGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgYmRpcik7CiAJZWxzZSB7CiAJCXU4IGlkX2JpdCAgID0gdzFfdG91Y2hfYml0KGRldiwgMSk7CiAJCXU4IGNvbXBfYml0ID0gdzFfdG91Y2hfYml0KGRldiwgMSk7CiAJCXU4IHJldHZhbDsKIAotCQlpZiAoIGlkX2JpdCAmJiBjb21wX2JpdCApCi0JCQlyZXR1cm4oMHgwMyk7ICAvKiBlcnJvciAqLworCQlpZiAoaWRfYml0ICYmIGNvbXBfYml0KQorCQkJcmV0dXJuIDB4MDM7ICAvKiBlcnJvciAqLwogCi0JCWlmICggIWlkX2JpdCAmJiAhY29tcF9iaXQgKSB7CisJCWlmICghaWRfYml0ICYmICFjb21wX2JpdCkgewogCQkJLyogQm90aCBiaXRzIGFyZSB2YWxpZCwgdGFrZSB0aGUgZGlyZWN0aW9uIGdpdmVuICovCiAJCQlyZXR2YWwgPSBiZGlyID8gMHgwNCA6IDA7CiAJCX0gZWxzZSB7CkBAIC0yMDMsMTEgKzIwMywxMSBAQAogCQkJcmV0dmFsID0gaWRfYml0ID8gMHgwNSA6IDB4MDI7CiAJCX0KIAotCQlpZiAoIGRldi0+YnVzX21hc3Rlci0+dG91Y2hfYml0ICkKKwkJaWYgKGRldi0+YnVzX21hc3Rlci0+dG91Y2hfYml0KQogCQkJdzFfdG91Y2hfYml0KGRldiwgYmRpcik7CiAJCWVsc2UKIAkJCXcxX3dyaXRlX2JpdChkZXYsIGJkaXIpOwotCQlyZXR1cm4ocmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCA1NWY2NGFmLi42MzAyNDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC03NzIsNyArNzcyLDcgQEAKIAogY29uZmlnIEdFRl9XRFQKIAl0cmlzdGF0ZSAiR0UgRmFudWMgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBHRUZfU0JDNjEwCisJZGVwZW5kcyBvbiBHRUZfU0JDNjEwIHx8IEdFRl9TQkMzMTAgfHwgR0VGX1BQQzlBCiAJLS0taGVscC0tLQogCSAgV2F0Y2hkb2cgdGltZXIgZm91bmQgaW4gYSBudW1iZXIgb2YgR0UgRmFudWMgc2luZ2xlIGJvYXJkIGNvbXB1dGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCmluZGV4IDZjZjE1NWQuLjMxMzczNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKQEAgLTM4MCw3ICszODAsNyBAQAogICoJVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBvciBub3QgYSBTTUJJT1MvRE1JIHJlY29yZCBpcwogICoJdGhlIDY0Yml0IENSVSBpbmZvIG9yIG5vdAogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZG1pX2ZpbmRfY3J1KGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbWlfZmluZF9jcnUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB2b2lkICpkdW1teSkKIHsKIAlzdHJ1Y3Qgc21iaW9zX2NydTY0X2luZm8gKnNtYmlvc19jcnU2NF9wdHI7CiAJdW5zaWduZWQgbG9uZyBjcnVfcGh5c2ljYWxfYWRkcmVzczsKQEAgLTQwMyw3ICs0MDMsNyBAQAogewogCWNydV9yb21fYWRkciA9IE5VTEw7CiAKLQlkbWlfd2FsayhkbWlfZmluZF9jcnUpOworCWRtaV93YWxrKGRtaV9maW5kX2NydSwgTlVMTCk7CiAKIAkvKiBpZiBjcnVfcm9tX2FkZHIgaGFzIGJlZW4gc2V0IHRoZW4gd2UgZm91bmQgYSBDUlUgc2VydmljZSAqLwogCXJldHVybiAoKGNydV9yb21fYWRkciAhPSBOVUxMKSA/IDAgOiAtRU5PREVWKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggM2NjZDM0OC4uMGQ2MWRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTM5LDEyICszOSw2IEBACiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQllcnIgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogZGV2aWNlX3Bvd2VyX2Rvd24gZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQogCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInhlbl9zdXNwZW5kOiBzeXNkZXZfc3VzcGVuZCBmYWlsZWQ6ICVkXG4iLApAQCAtNjksNyArNjMsNiBAQAogCXhlbl9tbV91bnBpbl9hbGwoKTsKIAogCXN5c2Rldl9yZXN1bWUoKTsKLQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwogCiAJaWYgKCEqY2FuY2VsbGVkKSB7CiAJCXhlbl9pcnFfcmVzdW1lKCk7CkBAIC0xMDgsNiArMTAxLDEyIEBACiAJLyogWFhYIHVzZSBub3JtYWwgZGV2aWNlIHRyZWU/ICovCiAJeGVuYnVzX3N1c3BlbmQoKTsKIAorCWVyciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImRldmljZV9wb3dlcl9kb3duIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gcmVzdW1lX2RldmljZXM7CisJfQorCiAJZXJyID0gc3RvcF9tYWNoaW5lKHhlbl9zdXNwZW5kLCAmY2FuY2VsbGVkLCBjcHVtYXNrX29mKDApKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHN0YXJ0IHhlbl9zdXNwZW5kOiAlZFxuIiwgZXJyKTsKQEAgLTEyMCw2ICsxMTksOSBAQAogCX0gZWxzZQogCQl4ZW5idXNfc3VzcGVuZF9jYW5jZWwoKTsKIAorCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CisKK3Jlc3VtZV9kZXZpY2VzOgogCWRldmljZV9yZXN1bWUoUE1TR19SRVNVTUUpOwogCiAJLyogTWFrZSBzdXJlIHRpbWVyIGV2ZW50cyBnZXQgcmV0cmlnZ2VyZWQgb24gYWxsIENQVXMgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlLzNjb20vM0MzNTkuYmluLmloZXggYi9maXJtd2FyZS8zY29tLzNDMzU5LmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MWJhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS8zY29tLzNDMzU5LmJpbi5paGV4CkBAIC0wLDAgKzEsMTU3MyBAQAorOjEwMDAwMDAwRkUzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMzAzMzJGMzAzMjJGMzkzOTIwMzFDQQorOjEwMDA1MDAwMzczQTMxMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwMDA2MDAwMzAzMTMyMzMzNDM1MzYzNzM4Mzk0MTQyNDM0NDQ1NDZFRQorOjEwMDA3MDAwMDAwMDA3RkYwMjAwRkU5RjA2MDAwMDdDNDgwMDAwNzBBMQorOjEwMDA4MDAwODIwMEZGRkY4NjAwRkZGRjg4MDBGRkZGOUEwMEZGRkY0RQorOjEwMDA5MDAwRkZGRjExMDBDMDAwRkZGRkZGRkYxMTIyMzM0NDU1NjYzMAorOjEwMDBBMDAwMzM0MzRGNEQyMDQyNDE0MjQ1MTE0MEMwMDBGRkZGRkYwNgorOjEwMDBCMDAwRkYxMTIyMzM0NDU1NjY1Mzc0NjE3Mjc0MjA2RjY2MjBCOQorOjEwMDBDMDAwNEM0QzQzMjA2NjcyNjE2RDY1MkUyMDIwNTQ2Rjc0NjEyNAorOjEwMDBEMDAwNkMyMDY0NjE3NDYxMjA3MzY5N0E2NTIwNjk3MzIwNzg4QgorOjEwMDBFMDAwNzg3ODIwMjAyMDQyNDE0MjQ1RThEMjAxODMzRUY3MzQwRgorOjEwMDBGMDAwMDA3NTIxRTg0MTAwODMzRUY3MzQwMDc1MTdFODgyMDA1RgorOjEwMDEwMDAwODMzRUY3MzQwMDc1MERFOEJGMDA4MzNFRjczNDAwNzU3OQorOjEwMDExMDAwMDNFODQxMDJDMzFFQjgwMEYwOEVEODMzRjZCOTAwODA2MAorOjEwMDEyMDAwMzNEQkFEMDNEOEUyRkIxRkI4MDAwMDgzRkIwMDc0MDM5MAorOjEwMDEzMDAwQjgyMjAwQTNGNzM0QzNGQUJBNTYwMEIwRkZFRTMzQzBCQQorOjEwMDE0MDAwOEVDMDMzRjZCOUZGN0Y4MzNFRkYzNDAwNzQwODhEM0VDNgorOjEwMDE1MDAwMzA2MUQxRUYyQkNGMjY4QjFDMjZDNzA0RkZGRjI2ODNFRgorOjEwMDE2MDAwM0NGRjc1MTcyNkM3MDQwMDAwMjY4MzNDMDA3NTBDMjY0QgorOjEwMDE3MDAwODkxQzQ2NDZFMkUwQjgwMDAwRUIwM0I4MjQwMEEzRjc3MAorOjEwMDE4MDAwMzRDM0ZBQjRENzlFNzMzQTc1Mzg3OTM2N0IzNDlGQjE0RAorOjEwMDE5MDAwMDVEMkVDNzMyREIwNDBEMEUwNzEyNzc5MjVEMEUwNzMwMworOjEwMDFBMDAwMjE3QjFGMzJDMDc1MUIzMkU0OUU3MjE2NzQxNDc4MTJDNAorOjEwMDFCMDAwN0ExMDlGRDJFQzcyMEJEMEU0NzAwNzc1MDVCODAwMDA3RQorOjEwMDFDMDAwRUIwM0I4MjYwMEEzRjczNEMzRkFCQTVBMDAzM0MwRUZFMgorOjEwMDFEMDAwRUZFRkVGQjAwMEU2NTZCMDAwRTY1NEJBNTIwMEI4MDFCNworOjEwMDFFMDAwMDFFRkU4Q0EwMDNDMDE3NTdGRTg4MzAwQkE1MjAwQjgwRAorOjEwMDFGMDAwMDIwMkVGRThCOTAwM0MwMjc1NkVFODdBMDBCQTUyMDBEQworOjEwMDIwMDAwQjgwNDA0RUZFOEE4MDAzQzA0NzU1REU4NzEwMEJBNTIzOAorOjEwMDIxMDAwMDBCODA4MDhFRkU4OTcwMDNDMDg3NTRDRTg2ODAwQkE5OQorOjEwMDIyMDAwNTIwMEI4MTAxMEVGRTg4NjAwM0MxMDc1M0JFODVGMDAwNAorOjEwMDIzMDAwQkE1MjAwQjgyMDIwRUZFODc1MDAzQzIwNzUyQUU4NTYzNQorOjEwMDI0MDAwMDBCQTUyMDBCODQwNDBFRkU4NjQwMDNDNDA3NTE5RTgzRAorOjEwMDI1MDAwNEQwMEJBNTIwMEI4ODA4MEVGRTg1MzAwM0M4MDc1MDgyQQorOjEwMDI2MDAwRTg0NDAwQjgwMDAwRUIwM0I4MjgwMEEzRjczNEMzQkE5MQorOjEwMDI3MDAwNUEwMEI4MDA4MEVGQzNCQTVBMDBCODAxODBFRkMzQkE4MQorOjEwMDI4MDAwNUEwMEI4MDI4MEVGQzNCQTVBMDBCODAzODBFRkMzQkE2RAorOjEwMDI5MDAwNUEwMEI4MDQ4MEVGQzNCQTVBMDBCODA1ODBFRkMzQkE1OQorOjEwMDJBMDAwNUEwMEI4MDY4MEVGQzNCQTVBMDBCODA3ODBFRkMzQjk0NgorOjEwMDJCMDAwRkZGRkU0NThFNDU0M0MwMDc1MDM0OTc1RjdDM0ZBMzI3NAorOjEwMDJDMDAwQzBFNjU2RTQ1NjNDMDA3NDAzRTk4MjAwQjBGRkU2NTZFRgorOjEwMDJEMDAwRTQ1NjNDRkY3NTc4QkE1MjAwQjhGRkZGRUZFRDNDRkZFMworOjEwMDJFMDAwNzU2Q0I4MDBGRkVGRUQzQzAwNzU2M0IwRkZFNjU0RTRCOQorOjEwMDJGMDAwNTQzQ0ZGNzU1OTMyQzBFNjU0RTQ1NDNDMDA3NTRGQjA4RAorOjEwMDMwMDAwMEZFNjUwRTQ1MDI0MEYzQzBGNzU0M0IwMDBFNjUwRTQ3NAorOjEwMDMxMDAwNTAyNDBGM0MwMDc1Mzc4Q0M4OEVDMEJFNzAwMDI2OEJGMQorOjEwMDMyMDAwMTQyNjhCNUMwMkI4MDAwMEVGRUQyM0MzM0QwMDAwNzU3RQorOjEwMDMzMDAwMURCOEZGRkYyM0MzRUY4QkM4RUQyM0MzM0JDMTc1MEU3MAorOjEwMDM0MDAwODNDNjA0MjY4MzNDRkY3NUQ1QjgwMDAwRUIwM0I4MkFBQQorOjEwMDM1MDAwMDBBM0Y3MzRDM0ZBMzNDMEJGMDAyMEI5MTcwMEYzQUJEMgorOjEwMDM2MDAwQkYwMDMwQjkxNzAwRjNBQkJGMDAyMkI5NDAwMEYzQUJCOAorOjEwMDM3MDAwQkYwMDMyQjk0MDAwRjNBQkZDMUU4Q0M4OEVEODMzQzAyRQorOjEwMDM4MDAwOEVDMEJFOTIwMEJGMDAyMEI5MTcwMEYzQTRCRUE5MDAyMgorOjEwMDM5MDAwQkYwMDIyQjk0MDAwRjNBNDFGQzcwNkZCMzQ2NDAwQkFCMworOjEwMDNBMDAwMDgwMEI4MEYwMEVGRTg4MjAxRTg5QjAxNzIwREM3MDY1NAorOjEwMDNCMDAwRjczNDJDMDBDNzA2RjkzNDA0MDBDM0JBMEEwMDMzQzA2RQorOjEwMDNDMDAwRUZFODk4MDFFOEI1MDFCODE3MDBCQTlDMDBFRkI4MDA1MworOjEwMDNEMDAwMTBCQTlBMDBFRkI4MTcwMEE5MDEwMDc0MDE0MEJBOEM1NgorOjEwMDNFMDAwMDBFRkI4MDAxOEJBODYwMEVGQjgwQzAwQkE4MjAwRUYzMAorOjEwMDNGMDAwQkEwMjAwRUQyNUY5RkYwRDAyMDBFRkJBMDYwMDMzQzA4NgorOjEwMDQwMDAwRUZCQTA0MDBCODYwMDBFRkJBMDAwMEI4MTgwMEVGQkEwNQorOjEwMDQxMDAwODAwMEI5RkZGRkVEQTkwMTAwNzUwNEUyRjhFQjNFQkFEOAorOjEwMDQyMDAwMEEwMEVEQTkwMDQwNzQzNUE5MDAyMDc0MzAzM0MwRUZGNAorOjEwMDQzMDAwNTFCOUM4MDBFMkZFNTkxRTA2MUYyNjhCMEUwMjMwODNGQQorOjEwMDQ0MDAwRjkxNzc1MTg0OTQ5QkUwMjIwQkYwNjMwRjNBNjFGMjNDRAorOjEwMDQ1MDAwQzk3NTBBRkYwRUZCMzQ3NDEyRTk0REZGMUZCODJDMDA1QQorOjEwMDQ2MDAwQkIwMDAwQTNGNzM0ODkxRUY5MzRDM0M3MDZGQjM0NjQwQworOjEwMDQ3MDAwMDBFOEQzMDA3MjBEQzcwNkY3MzQyQzAwQzcwNkY5MzQyNAorOjEwMDQ4MDAwMDQwMEMzRThENjAwRThGMzAwQjgwMzAwQkE4MjAwRUYyNgorOjEwMDQ5MDAwQjg0MDgwQkE5ODAwRUZCODAwMTFCQTk2MDBFRkI4NDBBMworOjEwMDRBMDAwMDBBOTAxMDA3NDAxNDBCQTkyMDBFRkI4MDAxOUJBOEU5OQorOjEwMDRCMDAwMDBFRkJBMDIwMEVEMjVGOUZGMEQwNjAwRUZCQTA2MDBDNQorOjEwMDRDMDAwMzNDMEVGQkEwMDAwQjgxODAwRUZCQTgwMDBCOUZGRkZFMAorOjEwMDREMDAwRURBOTIwMDA3NTA0RTJGOEVCNDNCQTBBMDBFREE5MDA4QgorOjEwMDRFMDAwNDA3NDNBQTkwMDIwNzQzNTMzQzBFRjUxQjlDODAwRTIxNgorOjEwMDRGMDAwRkU1OTFFMDYxRjI2OEIwRTAyMzI4M0Y5NDA3NTFENDlEOAorOjEwMDUwMDAwNDlCRTAyMjJCRjA2MzJGM0E2MUYyM0M5NzUwRkZGMEU5NAorOjEwMDUxMDAwRkIzNDc0MDNFOTVBRkZCODAwMDBFQjBCMUZCODJDMDA0MgorOjEwMDUyMDAwQkIwMjAwODkxRUY5MzRBM0Y3MzRDM0JBMDIwMEI4MDAzNQorOjEwMDUzMDAwOUNFRkJBMDAwMEI4MDA4NEVGMzNDMEVGQkEwQTAwRUZCNgorOjEwMDU0MDAwQkEwRTAwMzNDMEVGQzNCQTBBMDBCOUZGRkZFRDI1MDBCMQorOjEwMDU1MDAwNjAzRDAwNjA3NDA0RTJGNUY4QzNGOUMzQjAwMEU2NTZFQworOjEwMDU2MDAwQjgwMEZGQkE1MjAwRUZCOUZGRkZCQTU4MDBFRDI1RUYwRgorOjEwMDU3MDAwMDA3NDA4QkE1QTAwMzNDMEVGRTJFRkMzQkE4MDAwRUQ0RQorOjEwMDU4MDAwQkE4NDAwRUZCQTgwMDBFREMzMDAwMDAwMDAwMDAwMDA1NAorOjEwMDU5MDAwQzYwNkVDMzQxNTMzQzA4RUQ4OEVDMDFFOENDOEJFNDA0MworOjEwMDVBMDAwNTRCRjYwRkU4RUQ4QjkxMDAwRjNBNDFGQzcwNjgwMzY3MgorOjEwMDVCMDAwMTAzNUM3MDY4QzM2MzAzNThEMDYzODM1QTMzMDM1QTM1NworOjEwMDVDMDAwMzIzNTA1MzMwMUEzMzQzNUM3MDYzNjM1NTAwMUM3MDYyOQorOjEwMDVEMDAwODQzNjgwRkVDNzA2ODgzNkMwRkVDNjA2QzJGRUZGQzY0OQorOjEwMDVFMDAwMDY5MzM2ODBDNjA2OTIzNjAwQzYwNjgwRkU4MEM3MDY5MQorOjEwMDVGMDAwODJGRTU0NTBDNzA2ODRGRTJCNERFNUNFQTkwMjAwNzUzRAorOjEwMDYwMDAwMDhDNjA2ODFGRTIzRTkwNTAwQzYwNjgxRkUyMkExRjc4MQorOjEwMDYxMDAwMzRBMzg2RkVCODQ4MzQ4NkUwQTM4OEZFOEQwNjRFMzRBNworOjEwMDYyMDAwODZFMEEzOEFGRUI4NTgzNDg2RTBBMzhDRkVCODlDMzREQQorOjEwMDYzMDAwODZFMEEzOEVGRThEMDYyMDAzODZFMEEzOTBGRTMzQzBFNQorOjEwMDY0MDAwQkE3MjAwRUYzM0MwQkE3NDAwRUZCQTc2MDBFRkI4ODAyOAorOjEwMDY1MDAwRkU4NkUwQkE3MjAwRUZFOEJGMDdCQTBDMDFCODQwNDA2RQorOjEwMDY2MDAwRUZFREJBNkEwMEI4MDMwMEMxRTAwODBEMDMwMEVGQjk2RQorOjEwMDY3MDAwMEEwMEU4OTQwMEJBNkEwMEI4MDMwMEMxRTAwOEVGQTFEQworOjEwMDY4MDAwMzIzNEEzQTIzM0M3MDZBNjMzMDQwMDhEMDZBMDMzQzFCQgorOjEwMDY5MDAwRTgwNENEMzlDNzA2OTAzNkZGRkZFOUUzMDA2MzBENjYzNQorOjEwMDZBMDAwMEQ2NjBEOEEwREU2MEU3NTEyMkUwRjAzMEY1MDBGNjBBQQorOjEwMDZCMDAwMEQ2MDBENjAwREVEMEZFOTEyNjAwRDYwMEQ2MDBENjBCNQorOjEwMDZDMDAwMEQ2MDBEMjIxMDYwMEQ2MDBENjAwRDYwMERGRTEwNjA1QworOjEwMDZEMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwREFGMEYzMjEwMzdCNQorOjEwMDZFMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjBBMgorOjEwMDZGMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjA5MgorOjEwMDcwMDAwMEQ2NDBFMDAwRjk1MDk2MDBBNDlCQkZGRkZCQTZBMDAyRAorOjEwMDcxMDAwRURBOTAwMjA3NDM4ODAzRTgwRkUxMjc1MzFFODRBMDA1MQorOjEwMDcyMDAwQTEzMjM0QTNBMjMzQzcwNkE2MzMwNDAwOEQwNkEwMzMzQQorOjEwMDczMDAwQzFFODA0Q0QzOUU4MjIwMEM3MDZGMzM0NDYwMEM3MDZGNQorOjEwMDc0MDAwRjUzNEZGRkZDNzA2OTAzNkZGRkY1OEU5MzIwMDRCODNCMAorOjEwMDc1MDAwRkIwMDc1Qjk4M0Y5MDA3NUIwQzM1MkJBNkEwMEI4MDNEQgorOjEwMDc2MDAwMDBDMUUwMDgwRDAzMDBFRjVBQzM1MkJBNkEwMEI4MDM5MworOjEwMDc3MDAwMDBDMUUwMDhFRjVBQzMwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwMDc4MDAwNjg4MDA3QTE5MDM2Q0QzNThCMzYyNDAyMkVGRkE0MzUyNAorOjEwMDc5MDAwMEFGQThBMjY5NDM2ODgyNkU4MzRDNjA2OTQzNjAwRkI4MAorOjEwMDdBMDAwMjJFNDc1MDFDM0Y2QzQyMDc0N0RGNkM0MDg3NDA1ODA4NAorOjEwMDdCMDAwMEU5MjM2MDQ4MDI2RTgzNEQ3QzQxRTg0MzYyNjhCMzc0MgorOjEwMDdDMDAwODFFNkZGMDA4M0ZFMjA3NjA1QjAwMUU5MjgwMDUzMDY4QworOjEwMDdEMDAwRDFFNjJFRkY5NDlEMDYwNzVCMjY4ODQ3MDIzQ0ZGNzRGNgorOjEwMDdFMDAwMDczQ0ZFNzUxMUU5M0IwMEY2MDY5MjM2MDg3NTM0RjZCMworOjEwMDdGMDAwMDY5MjM2MDQ3NDJEODAyNjkyMzZGMzgwM0U5NTM2MDA5QworOjEwMDgwMDAwNzUyMTI2ODAzRjA1NzUxM0M2MDY5NTM2MDAyNjgwN0YyNAorOjEwMDgxMDAwMDYwMDc0MDcyNjhCNDcwNEEyOTUzNkJBMEMwMUI4NDAyRgorOjEwMDgyMDAwNDBFRkVEOEEyNkU4MzRGNkM0MTA3NTAzRTk1QjAwRjY2NAorOjEwMDgzMDAwQzQwNDc0MDU4MDBFOTIzNjAxODAyNkU4MzRFQkM0M0U3MQorOjEwMDg0MDAwODgzNjI2OEIzNTgzRTY3RjgzRkUxMjcyMDgyNkM2NDVERQorOjEwMDg1MDAwMDIwMUU5MjQwMDgzQzYyMEQxRTYyRUZGOTQ5RDA2QzQ0MAorOjEwMDg2MDAwM0U4ODM2MjY4ODQ1MDIzQ0ZGNzUwRUY2MDY5MjM2MDExNAorOjEwMDg3MDAwNzQxNEY2MDY5MjM2MDI3NTBEODAyNjkyMzZGQ0JBMEM3OAorOjEwMDg4MDAwMDFCODIwMjBFRkVEOEEyNkU4MzRGNkM0MDg3NDIyODBFRgorOjEwMDg5MDAwMjZFODM0Rjc4MDBFOTIzNjA0RjYwNjkyMzYwODc0MTE3NAorOjEwMDhBMDAwODAyNjkyMzZGM0JBMEMwMUI4NDA0MEVGRUQ4QTI2RTg3NAorOjEwMDhCMDAwMzRGNkM0MDQ3NDIyODAyNkU4MzRGQjgwMEU5MjM2MDE5QworOjEwMDhDMDAwRjYwNjkyMzYwMjc1MTE4MDI2OTIzNkZFQkEwQzAxQjhGMQorOjEwMDhEMDAwMjAyMEVGRUQ4QTI2RTgzNEY2QzQwMTc0Njc4MDI2RTgwQworOjEwMDhFMDAwMzRGRTgwM0VFOEZGMDA3NDM5ODAzRUU4RkYwNDc0MzIzNQorOjEwMDhGMDAwODAzRUU4RkYwMTc1MjFFNTgwQTkwMDA3NzQwQUJBOUVEMQorOjEwMDkwMDAwMDBCODAwMDJFRkU5RUZGRkM2MDZFOEZGMDNCQTBDMDFFQQorOjEwMDkxMDAwQjgwODA4RUZFREU5MjgwMDgwM0VFOEZGMDM3NDA2RTkxNworOjEwMDkyMDAwMUUwMEU5MDAwMEJBMTAwMUI4MDIwMkVGRURFNTAwMEQ2QgorOjEwMDkzMDAwMTgwMEU3MDBFNTgyMEQwMjAwRTc4MkM2MDZFOEZGMDQyMgorOjEwMDk0MDAwOEEyNkU4MzRGNkM0MDI3NDBEODAyNkU4MzRGRDgwMjYzOQorOjEwMDk1MDAwOTIzNkJGRTg0RjBCRkFBMEU4MzQwODA2OTQzNkM2MDY3NAorOjEwMDk2MDAwRTgzNDAwRkJDM0U4RTcwRkM0MUU4NDM2MkVGRjE2MDFFRgorOjEwMDk3MDAwMDcyNjg4NDcwMkU5N0VGRUU4MkQxMEM0MUU4NDM2MkUyNQorOjEwMDk4MDAwRkYxNjAzMDcyNjg4NDcwMkU5NkJGRThFMDYyNjAyMkUxNQorOjEwMDk5MDAwRkYxNjA3MDdDM0MzODMzRUY1MzQwMDc0MEZGRjBFRjM0MQorOjEwMDlBMDAwMzQ3NTA5RThDNEZEQzcwNkY1MzQwMDAwRjYwNjkzMzYzMQorOjEwMDlCMDAwMjA3NDMwQTFDMjM0M0IwNkU5MzRBM0U5MzQ3NDI0ODBBNgorOjEwMDlDMDAwM0U5NTM2MDA3NTFERjcwNkU2MzQyMDAwNzQxMkE5MjAwNgorOjEwMDlEMDAwMDA3NDBEODMyNkMyMzRERjgzMjZFOTM0REZFOTAzMDA4NworOjEwMDlFMDAwRThERDA5QkEwNjAxRUQ4QkQwODFFMjAwQzBDMUVBMEU1NAorOjEwMDlGMDAwMDMxNjc0MzRDMUUwMDIxMTA2NzIzNDczMDRGRjA2NzRFNgorOjEwMEEwMDAwMzRCQTAyMDFFRDhCRDA4MUUyMDBDMEMxRUEwRTAzMTZCOAorOjEwMEExMDAwNzAzNEMxRTAwMjExMDY2RTM0NzMwNEZGMDY3MDM0QzdFRgorOjEwMEEyMDAwMDZBNjMzMDQwMEM3MDZBQTMzMDAwMDhEMDZBMDMzQzExMgorOjEwMEEzMDAwRTgwNENEMzlDMzk1MDk5NTA5NjUwOTc4MDk5NTA5OTVBMworOjEwMEE0MDAwMDk5MTA3OTUwOTk2MDk4QjA5OTUwOTk1MDk5NTA5OTVDNQorOjEwMEE1MDAwMDk5NTA5OTUwOThCQzA4QkMwOEJDMDhCQzA4QkMwOTA0QQorOjEwMEE2MDAwRjYwNjkzMzYyMDc1MDNFOUNDMDA4Q0MwNDA4RUMwMjY3NAorOjEwMEE3MDAwOEIwRTA2MDA4NkU5MjY4OTBFMDYwMDhDQzJDMUUyMDRCMAorOjEwMEE4MDAwQkUwRTAwMjZBMTA0MDBEMEUwMjRDMDhBRTBDMEVDMDQyMQorOjEwMEE5MDAwMEFDNDI2QTIwNTAwMjZBMTA4MDBBOTAwQzA3NDAzRTkyMworOjEwMEFBMDAwOUUwMDI2RjYwNjEwMDA4MDc1MDNFOTBBMDAyNkEwMTZBRgorOjEwMEFCMDAwMDAyNDFGMzJFNDAzRjA4MDNFRUMzNDA2NzI1QzgwM0U3QQorOjEwMEFDMDAwOTUzNjAwNzU2NjhCRkEzM0RCOEVDMzI2ODkxRDI2ODgyMgorOjEwMEFEMDAwNUQwNDUxNTBDNDFFOEMzNkI5MEYwMDMzQzBFODIxMDlBMworOjEwMEFFMDAwNTg1OTBCREI3NDM0RkUwRUU2M0EyNkM2MDc4MTI2QzYzQgorOjEwMEFGMDAwNDcwMTAwMjZDNjQ3MDJGRjI2Qzc0NzA0MDAwMDI2ODk5MworOjEwMEIwMDAwNEYwQTg2RjIyNjg5NTcwNjI2ODk3NzA4MjZDNjQ3MDk5RQorOjEwMEIxMDAwMDAyNkM2NDcwQzAyRTg4QzA5QzNGRjA2RUMzMzhDQzBFNAorOjEwMEIyMDAwNDg4RUMwRkFFODk3MTBGQkU5RUJGRjhDQzA0ODhFQzBGNgorOjEwMEIzMDAwRkFFODhBMTBGQkMzOENDMDhFQzBGQUU4ODAxMEZCQzNCMQorOjEwMEI0MDAwODAzRTk1MzYwMDc1MDNFOUMyMDBCRjA4MDAyNkY2MDYxMAorOjEwMEI1MDAwMTAwMDgwNzUwNTAzRkVFOTBDMDAyNkEwMTYwMDI0MUY3NgorOjEwMEI2MDAwMzJFNDAzRjAwM0ZFQTA5NTM2M0MwMDc1MDNFOTlDMDBENworOjEwMEI3MDAwM0MwMTc0MEIzQzAyNzQxNDNDMDM3NDFERTk4RDAwQzZFNworOjEwMEI4MDAwMDY5NjM2MDFFODNDMDE3MjI3RTk4MDAwQzYwNjk2MzZEMworOjEwMEI5MDAwMDJFODgzMDA3MjFBRTk3MzAwQzYwNjk2MzYwMUU4MjI1RAorOjEwMEJBMDAwMDE3MjBEQzYwNjk2MzYwMkU4NkMwMDcyMDNFOTVDMDAxRAorOjEwMEJCMDAwNTMwNjUwQzQxRThDMzZCOTBCMDAzM0MwRTg0MjA4NThBNworOjEwMEJDMDAwMjZDNjA3ODIyNkM2NDcwMkZGOEQwNkUwRkU4NkM0MjY5QgorOjEwMEJEMDAwODk0NzA2QTA5NjM2MjY4ODQ3MDhFOEM4MDgwNzVCODMzOQorOjEwMEJFMDAwMjZBRDM2RkVBMUFEMzZFNzA0QkExMDAxQjg4MDgwRUYxRAorOjEwMEJGMDAwRURCQTEwMDFCODAyMDJFRkVENTJCQUUwMDBCODQxMTBCMAorOjEwMEMwMDAwRUY1QUI4OUMwM0NEMzlDNjA2OTUzNjAwOENDMDQ4OEU4NQorOjEwMEMxMDAwQzBGQUU4QTkwRkZCQzMxRTA2MUYwNjMzQzA4RUMwOEJBNworOjEwMEMyMDAwRjA4RDNFMjBGMzUxQjEwQTI2ODM3RDBDMDE3NTJBNTdDMQorOjEwMEMzMDAwMjY4MzdEMEUwMDc0MDZFODJGMDBFOTAzMDBFODY2MDdBRQorOjEwMEM0MDAwNUY3MzE2MzNDMDhFRDgyNjhCNEQxMjhENzUyMDhEM0U2NgorOjEwMEM1MDAwRTBGRUYzQTQ1OTA3MUZGOUMzRkVDOTc0MDc4MUM3MjAzQQorOjEwMEM2MDAwMDFFOUM0RkY1OTA3MUZGOEMzNTE1MDUzNTY1MjU3MzM3NworOjEwMEM3MDAwREIyNjhBNUQwRTI2OEI0RDEyOEQ3RDIwNUE4N0Q3MjY2NgorOjEwMEM4MDAwOEE0NTE0ODdENzQyMzJGRjgwRkYwODc1MDhGRUNCMjJDMQorOjEwMEM5MDAwREI3NUVBMzNEQjIzREI3NDA2RkVDN0QwQzg3MzBDNTA2OAorOjEwMENBMDAwMjY4QTA1MzgwNDU4NzQwM0U5MEEwMDQ5NDY0NzIzQzlDRgorOjEwMENCMDAwNzQwQUU5RDNGRjVBNUU1QjU4NTlGOEMzNUE1RTVCNTgxMQorOjEwMENDMDAwNTlGOUMzMUUwNjFGMDYzM0MwOEVDMDg2Q0QyQkNFOEJBRQorOjEwMENEMDAwRjc4QkMxMzNDOTgwM0NGRjc0MTY4MEY5MDY3MzA5MzI2MworOjEwMENFMDAwQzk0NjQ4NzQyRUU5RURGRjNENjAwMDczMENFOTIzMDAwRQorOjEwMENGMDAwRkVDMTQ2NDg3NDFERTlEQ0ZGQjgxMDAwOEQzRTE4MzQ3MworOjEwMEQwMDAwMzJFREIxMDZGM0E2NzQwM0U5MDgwMDQ4MjNDMDc0MDc2NgorOjEwMEQxMDAwRTlFOUZGMDcxRkY4QzM4RDM2MTgzNDMzQzA4RUQ4OEQyQworOjEwMEQyMDAwM0VFMEZFQjgxMDAwQjkwNjAwNTZGM0E0NUU0ODNEMDA1MAorOjEwMEQzMDAwMDA3NUYzMDcxRkY5QzNGRjA2RTQzM0M2MDZFQjM0MDA2MgorOjEwMEQ0MDAwMjY4QjQ1MDY4NkUwQzFFODA0NDgwNjhFQzBGRTA2RTYwRQorOjEwMEQ1MDAwM0FGQUU4NjkwRUZCMDdCMEZGQzMwMDAwMDAwMDAwMDA4QworOjEwMEQ2MDAwQjAwMUMzQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDA0QzNDOAorOjEwMEQ3MDAwOEIwRTk3MzY4MUUxODAzMDI2OEI0NzA0MjU3RkNGMEI4MQorOjEwMEQ4MDAwQzFBMzk3MzZBM0U2MzRCMDAwQzNGNjA2OTMzNjIwNzRBOQorOjEwMEQ5MDAwMDNCMDAzQzMyNjhCNDcwOEEzOTczNkEzRTYzNDI2OEFGRAorOjEwMERBMDAwNDcyMEEyRkQzNDNDMDE3NTA2QzcwNkExMzYwMDAwMjY4NworOjEwMERCMDAwOEE0NzIxQTJGRTM0MjY4QjQ3MEFBMzE4MzRBMzU4MzQ0RAorOjEwMERDMDAwMjY4QjQ3MENBMzFBMzRBMzVBMzQyNjhCNDcwRUEzMUMzOAorOjEwMEREMDAwMzRBMzVDMzRDNjA2MkEzNEMwMjY4QjQ3MTQyNTdGRkYxMworOjEwMERFMDAwMDkwNjJDMzQyNjhCNDcxNjI1RkZGRTI1RkZGQzA5MDYzNQorOjEwMERGMDAwMkUzNEM2MDYwMDM0QzAyNjhCNDcxMEEzMDIzNDI2OEIzRgorOjEwMEUwMDAwNDcxMkEzMDQzNDA2NTNFODg0MEE1QjA3M0QwMDAwNzVDQgorOjEwMEUxMDAwMDc4MDBFOTIzNjA4QjBGRUMzQjkwMDAxQTFBQzMzMzM4RgorOjEwMEUyMDAwRDJGN0Y5QTNBRTMzOTE0OTMzRDJGN0U5MDUwMDNCQTNEQQorOjEwMEUzMDAwNDYzNEJGMDAzQjg5M0U0NDM0QkE2ODAwQjhFMEUwRUY3NgorOjEwMEU0MDAwQTFBRTMzRTc2MkExQUUzM0JBMDgwMUVGQTE0NDM0RTdBMworOjEwMEU1MDAwNjRBMTQ0MzRCQTBBMDFFRkI4MDAwMTJEMDQwMDBEMDA2QQorOjEwMEU2MDAwMTBFNzkyQzMzRDAwMDA3NDBBMjY4OTQ3MDdFODgzM0FEOQorOjEwMEU3MDAwQjAwN0MzQTFBRTMzMjY4OTQ3MkJBMTQ0MzQyNjg5NDc0NgorOjEwMEU4MDAwMkRBMTQ2MzQyNjg5NDcyRjgwMEU5MzM2MjBBMTg4MzYxRgorOjEwMEU5MDAwODZFMDI2ODk0NzA4QTE4NDM2ODZFMDI2ODk0NzBBQTE4QworOjEwMEVBMDAwODAzNjg2RTAyNjg5NDcwQ0I4NjBGRTg2RTAyNjg5NDdCMgorOjEwMEVCMDAwMEVBMEExMzYyNjg4NDcxMDhCMzY4ODM2MjZDNjQ0MDJGNworOjEwMEVDMDAwRkZFNTlFQTkwMDA4NzQwQ0JBODQwMEVEMEQwODAwRUY0MAorOjEwMEVEMDAwQkE4RTAwRUZFNTAyMjVGOUZGRTcwMkJBMTAwMUI4MDI2OQorOjEwMEVFMDAwMDJFRkVEQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDAxQzNFMAorOjEwMEVGMDAwODAyNjkzMzY5RkU4OEQwQTgwMEU5MjM2MDhCMEZFQzM5NgorOjEwMEYwMDAwQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDA0QzNDNjA2MkFBNAorOjEwMEYxMDAwMzRDMDI2OEI0NzA2MjU3RkZGQTMyQzM0MjY4QjQ3MDgzOQorOjEwMEYyMDAwMjVGRkZFMjVGRkZDQTMyRTM0Q0Q1MkIwMDBDM0Y2MDZFQworOjEwMEYzMDAwOTMzNjIwNzUwM0IwMDRDM0M2MDYwMDM0QzAyNjhCNDcyMQorOjEwMEY0MDAwMDZBMzAyMzQyNjhCNDcwOEEzMDQzNENENTJCMDAwQzM1NQorOjEwMEY1MDAwRjYwNjkzMzYyMDc1MDNCMDA0QzM1NzhEN0YwNjUxQjk0QQorOjEwMEY2MDAwMDcwMDMzQzBGM0FCNTk4RDdGMDZBMTdBMzQwMzA2MzlFRAorOjEwMEY3MDAwMzcyNjg4MDVBMTk1MzcyNjg4NDUwMkExODAzNDAzMDZDNworOjEwMEY4MDAwNzYzNDI2ODg0NTA3QTFDNjM0MjY4ODQ1MDlBMUQ4MzM3QQorOjEwMEY5MDAwMjY4ODQ1MEEzM0MwQTM3QTM0QTMzOTM3QTM5NTM3QTNFQgorOjEwMEZBMDAwODAzNEEzNzYzNEEzQzYzNEEzRDgzMzVGQjAwMEMzRjYyRAorOjEwMEZCMDAwMDY5MzM2MjA3NTAzQjAwNEMzMjY4QjRGMDQ4M0Y5MDZDRAorOjEwMEZDMDAwNzQxMjgzRjkwNDc0MEQ4M0Y5MDA3NDA4ODNGOTAyNzRCMAorOjEwMEZEMDAwMDNCMDAxQzM4OTBFRTgzQTgzMjZBQjM2RjkwOTBFQUI5QworOjEwMEZFMDAwMzZFNTAyMjVGOUZGMEJDMUU3MDJCMDAwQzNGNjA2OTMxMAorOjEwMEZGMDAwMzYyMDc1MDNCMDA0QzMyNjhCNEYwNDgwRjlGRjc0MDhCNAorOjEwMTAwMDAwODBGOTAwNzQxMEIwMDFDMzgzMEVBRDM2MDJBMUFEMzY3NQorOjEwMTAxMDAwRTcwNEU5MEEwMDgzMjZBRDM2RkRBMUFEMzZFNzA0QjA0QQorOjEwMTAyMDAwMDBDM0Y2MDY5MzM2MjA3NTAzQjAwNEMzRThENTA0QjBCOAorOjEwMTAzMDAwMDBDM0Y2MDY5MzM2ODA3NTAzQjAwMUMzMjY4MzdGMDY4RQorOjEwMTA0MDAwMDU3NTAzRTk5RDAwMjY4QjU3MDQyNjhCNDcwODI2ODFFQQorOjEwMTA1MDAwN0YwNjAwODA3NTA4RUQyNjg5NDcwQUU5OUQwMDI2ODNGMgorOjEwMTA2MDAwN0YwNjAxNzUwNEVGRTk5MjAwMjY4MTdGMDYwMTgwNzVGNQorOjEwMTA3MDAwMDlFRkVEMjY4OTQ3MEFFOTgxMDAyNjgzN0YwNjAyNzU3QworOjEwMTA4MDAwMDcyNjIxNDcwNEU5NzMwMDI2ODE3RjA2MDI4MDc1MEMzQworOjEwMTA5MDAwMjYyMTQ3MDRFRDI2ODk0NzBBRTk1RjAwMjY4MzdGMDY1QgorOjEwMTBBMDAwMDM3NTA3MjYwOTQ3MDRFOTUxMDAyNjgxN0YwNjAzODA1RQorOjEwMTBCMDAwNzUwQzI2MDk0NzA0RUQyNjg5NDcwQUU5M0QwMDI2ODM3OQorOjEwMTBDMDAwN0YwNjA0NzUwNzI2MzE0NzA0RTkyRjAwMjY4MTdGMDYzNQorOjEwMTBEMDAwMDQ4MDc1MEMyNjMxNDcwNEVEMjY4OTQ3MEFFOTFCMDA3OAorOjEwMTBFMDAwQjAwMUMzRkE1MzI2OEI0RjA4MEJDOTc0MEM4RDFFRTA1OAorOjEwMTBGMDAwRkVFODUyRkY4M0MzMDhFMkY4NUJGQkIwMDBDM0Y2MDZDQworOjEwMTEwMDAwOTMzNjgwNzUwQUY2MDY5MzM2MjA3NTAzQjAwMUMzOERCOQorOjEwMTExMDAwM0VFMEZFRTUwMDI2ODkwNUU1MDIyNjg5NDUwMkExQURFRgorOjEwMTEyMDAwMzYyNjg5NDUwNEU1MDYyNjg5NDUwNkU1MDgyNjg5NDVDQgorOjEwMTEzMDAwMDhFNTBBMjY4OTQ1MEFFNTBFMjY4OTQ1MENFNTQ4MjY3NAorOjEwMTE0MDAwODk0NTBFRTU0QTI2ODk0NTEwRTU0QzI2ODk0NTEyQTFCOAorOjEwMTE1MDAwQjczNjI2ODk0NTE0RTU1MDI2ODk0NTE2RTU1MjI2ODk3NQorOjEwMTE2MDAwNDUxOEU1NTQyNjg5NDUxQUU1NTYyNjg5NDUxQ0U1NTg1MworOjEwMTE3MDAwMjY4OTQ1MUVFNTYyMjY4OTQ1MjBFNTY0MjY4OTQ1MjJBMworOjEwMTE4MDAwRTU2NjI2ODk0NTI0RTU2ODI2ODk0NTI2RTU2QTI2ODk5NworOjEwMTE5MDAwNDUyOEU1NkMyNjg5NDUyQUU1NzAyNjg5NDUyQ0U1NzJBNworOjEwMTFBMDAwMjY4OTQ1MkVFNTc0MjY4OTQ1MzBFNTc2MjY4OTQ1MzIxRgorOjEwMTFCMDAwRTU3QzI2ODk0NTM0RTU3RTI2ODk0NTM2RTU4MDI2ODkwNQorOjEwMTFDMDAwNDUzOEU1ODIyNjg5NDUzQUU1ODYyNjg5NDUzQ0U1ODgwNQorOjEwMTFEMDAwMjY4OTQ1M0VFNTlBMjY4OTQ1NDBFNTlFMjY4OTQ1NDI3MQorOjEwMTFFMDAwRTVDQzI2ODk0NTQ0RTVDRTI2ODk0NTQ2RTVEMDI2ODlDNQorOjEwMTFGMDAwNDU0OEU1RDIyNjg5NDU0QUJBMDAwMUVEMTEwNjY2MzQxNAorOjEwMTIwMDAwNzMwNEZGMDY2ODM0MjY4OTQ1NENCQTAyMDFFREMxRTAzQgorOjEwMTIxMDAwMDIxMTA2NkUzNDczMDRGRjA2NzAzNDI2ODk0NTRFQkFGNworOjEwMTIyMDAwMDQwMUVEMTEwNjZBMzQ3MzA0RkYwNjZDMzQyNjg5NDUwNworOjEwMTIzMDAwNTBCQTA2MDFFREMxRTAwMjExMDY3MjM0NzMwNEZGMDZENAorOjEwMTI0MDAwNzQzNDI2ODk0NTUyQkEwODAxRUQyNjg5NDU1NEJBMEFGNAorOjEwMTI1MDAwMDFFRDI2ODk0NTU2QkEwQzAxRUQyNjg5NDU1OEJBMEU4RQorOjEwMTI2MDAwMDFFRDAxMDY3QTM0MjY4OTQ1NUVCQTEwMDFFRDI2ODkyMgorOjEwMTI3MDAwNDU1Q0IwMDBDM0Y2MDY5MzM2ODA3NDA3RjYwNjkzMzZENQorOjEwMTI4MDAwMjA3NTAzQjAwMUMzMjY4MDdGMDYwMDc1MzA4MDNFOTUyRgorOjEwMTI5MDAwMzYwMDc0NTJDNjA2OTUzNjAwODMyNkFEMzZGRUExQURFMworOjEwMTJBMDAwMzZFNzA0QkExMDAxQjg4MDgwRUZFREJBMTAwMUI4MDIzOQorOjEwMTJCMDAwMDJFRkVEQkFFMDAwQjgwMDEwRUZCMDAwQzMyNjhCNDc5NAorOjEwMTJDMDAwMDQzRDAwMDA3NDIwM0QwMzAwNzcxQkJBMTAwMUI4MDJGMgorOjEwMTJEMDAwMDBFRkJBRTAwMEI4MDExMEVGODMwRUFEMzYwMUExQUQwQQorOjEwMTJFMDAwMzZFNzA0QjAwMEMzQjAwNkMzRjYwNjkzMzY4MDc1MDMzNAorOjEwMTJGMDAwQjAwMUMzMjY4MzdGMDQwMTc0MEEyNjgzN0YwNDAyNzQyRAorOjEwMTMwMDAwMTlCMDA2QzMyNjgzN0YwNjBDNzdGNjI2ODM3RjBBNjAxMgorOjEwMTMxMDAwNzdFRkU4MTAwMDcyMEJCMDQ2QzNFODRFMDA3MjAzQjBERQorOjEwMTMyMDAwNDZDM0IwMDBDMzUxQjEwQThCM0UyMEYzMjY4MzdEMEMyNworOjEwMTMzMDAwMDI3NTAzRTkwRTAwRkVDOTc0MDc4MUM3MjAwMUU5RUJCRAorOjEwMTM0MDAwRkY1OUY4QzM1NzhEN0QwRThENzcwNkI5MTIwMEYzQTRBRgorOjEwMTM1MDAwOEQ3RDIwOEQzNkUwRkUyNjhCNEQxMkYzQTRGRjA2MDExNQorOjEwMTM2MDAwMzU1RjI2Qzc0NTBDMDEwMDU5RjlDMzUxQjEwQThEM0VCRQorOjEwMTM3MDAwMjBGMzhEMzZFMEZFMjY4MzdEMEMwMTc1MUI1N0U4MjU5MgorOjEwMTM4MDAwMDA1RjczMTQzM0MwQjkyMDAxRjNBQTI2Qzc0NTBDMDJDRAorOjEwMTM5MDAwMDBGRjBFMDEzNTU5RjlDM0ZFQzk3NDA3ODFDNzIwMDE0QQorOjEwMTNBMDAwRTlEM0ZGNTlGOEMzNTEyNjhCNEQxMjhEN0QyMEYzQTY0QQorOjEwMTNCMDAwNzQwMzU5RjhDMzU5RjlDMzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMTNDMDAwODAzRUVDMzQwNjcyMzNGRjA2RjAzMzUwQzQxRThDMzY3OAorOjEwMTNEMDAwQjkwRjAwMzNDMEU4MjkwMDU4ODEyNkMyMzRERjdGODE2RAorOjEwMTNFMDAwMjZFOTM0REY3RjBCREI3NDExMjZDNjA3ODQyNkM2NDc0NworOjEwMTNGMDAwMDJGRjI2ODk0NzA2RThBQzAwQzNGRjA2RUEzM0U5RjU5OQorOjEwMTQwMDAwRkY1NzI2OEIzRjAzRjkyNjNCN0YwMjc0MTYyNjNCN0Y0RQorOjEwMTQxMDAwMDQ3QzJBM0QwMDAwNzUxMzhEN0YwODAzRjkyNjNCN0Y2RAorOjEwMTQyMDAwMDI3QzE0RkYwNkRFMzMzM0RCNUZDMzI2OEI3RjAyMjY4QworOjEwMTQzMDAwODkzRjAzRjlFOTA2MDAyNjg5M0YyNjI5MEYyNkM3MDVCQgorOjEwMTQ0MDAwRkZGRjI2ODczRjI2ODkwRDhENUQwMjUwOEJGQjgzRTlDOAorOjEwMTQ1MDAwMDIzM0MwRjNBQTU4RkUwRUVDMzQ1RkMzOEI3QzAyM0IxMAorOjEwMTQ2MDAwM0M3NDJGODMzREZGNzUwQjhEN0MwODg5N0MwMjgzM0Q4NgorOjEwMTQ3MDAwRkY3NDFFOEE0NTAyM0M4MTc1MEM4MDNFRUIzNDAwNzQ3QgorOjEwMTQ4MDAwMDUzM0MwRTkwQjAwOEIwRDAxNEMwMjhENzUwMjgzRTkxOQorOjEwMTQ5MDAwMDJDMzgwM0VFQzM0MDY3MjA1MzNDMEU5RjNGRkZGMDY1OQorOjEwMTRBMDAwRUUzM0U5QkVGRkY2MDY5MjM2NDA3NDAxQzM1NzU2NTEzQgorOjEwMTRCMDAwNTI4QjM2OEMzNkU4QTRGRjc1MDNFOTFBMDBFOTFDMDA0QworOjEwMTRDMDAwRkUwNkVDMzRDNDNFODAzNkYzQTQ4MDBFOTIzNjQwQkE1OQorOjEwMTREMDAwMEMwMUI4ODA4MEVGRUQ1QTU5NUU1RkMzRkYwNkUwMzMyMAorOjEwMTRFMDAwODAzQzgxNzUwQ0ZGMDZFMjMzQzYwNkVCMzQwMUU5Q0Y4MAorOjEwMTRGMDAwRkY4MDNDODQ3NTA3RkYwNkU2MzNFOUMzRkZGRjA2RTg3QgorOjEwMTUwMDAwMzNFOUJDRkY4RDNFRTBGRUExNzIzNEM3MDY3MjM0MDBBMQorOjEwMTUxMDAwMDA4OTA1QTE3NDM0QzcwNjc0MzQwMDAwODk0NTAyQkFGNQorOjEwMTUyMDAwMDQwMUVEODk0NTA0Qzc0NTA2MDAwMEExNkUzNEM3MDZENQorOjEwMTUzMDAwNkUzNDAwMDA4OTQ1MDhBMTcwMzRDNzA2NzAzNDAwMDA3RAorOjEwMTU0MDAwODk0NTBBQkEwMDAxRUQ4OTQ1MENDNzQ1MEUwMDAwMzJGNQorOjEwMTU1MDAwRTRCQTBFMDFFQzg5NDUxMEExN0UzNEM3MDY3RTM0MDA0MgorOjEwMTU2MDAwMDA4OTQ1MTJBMThDMzRDNzA2OEMzNDAwMDA4OTQ1MTRDQgorOjEwMTU3MDAwQTE4QTM0QzcwNjhBMzQwMDAwODk0NTE2QTE3QzM0Qzc4NQorOjEwMTU4MDAwMDY3QzM0MDAwMDg5NDUxOEExODgzNEM3MDY4ODM0MDBEOQorOjEwMTU5MDAwMDA4OTQ1MUFBMUNBMzNDNzA2Q0EzMzAwMDA4OTQ1MUMxMQorOjEwMTVBMDAwQTE3ODM0QzcwNjc4MzQwMDAwODk0NTFFQTFDNjM0QzcyNworOjEwMTVCMDAwMDZDNjM0MDAwMDg5NDUyMEMzMDAwMDAwMDAwMDAwMDA3QQorOjEwMTVDMDAwRkEzM0MwOEVEODhFQzBCOEEwMDFDMUU4MDQ4RUQwOEQ4OQorOjEwMTVEMDAwMjY4MDAwRTgwMDAxRTgxMEVCOEIxRUY3MzQ4QjE2RjkyQgorOjEwMTVFMDAwMzQ4QjM2RkYzNDMzQzBCOUVGRkY4RDNFMTQwMDJCQ0Y2MAorOjEwMTVGMDAwMkJDRUQxRTlGM0FCODkxRUY3MzQ4OTE2RjkzNDgzRkU3QgorOjEwMTYwMDAwMDA3NDBDQjlFRkZGQkY4MEZFMkJDRkQxRTlGM0FCQjk2QgorOjEwMTYxMDAwRkZGRjgxRTkwMDNCODNGRTAwNzQwM0U5MUIwMDUxMUVCQworOjEwMTYyMDAwQjgwMEUwOEVEODMzRjY4RDNFMDBEOEI5MDAwQ0YzQTU5MworOjEwMTYzMDAwMUY1OUJFRkZGRjgxRUUwMEQ4MkJDRTgxRTEwMEZGODk0QworOjEwMTY0MDAwMEVBQzMzOEQwNjIwMDJDMUU4MDRBMzMyMzQ4RUQwMzZBRQorOjEwMTY1MDAwQzcwNjFFMDA4MDE4MzZDNzA2MjIwMEZGN0YzNkM3MDY2MQorOjEwMTY2MDAwMEEwMEZGRkYzNkM3MDYxQzAwODAwMDhEMDZBMDAyQzFERAorOjEwMTY3MDAwRTgwNEEzMzAzNDhFRDAzNkM3MDYxRTAwNTAyODM2Qzc4MworOjEwMTY4MDAwMDYwQTAwRkZGRjM2QzcwNjFDMDA4MDAwQjhBMDAxQzE5MworOjEwMTY5MDAwRTgwNEEzMzQzNEEzRjIzMzhFRDA4RDI2ODAwMEI4MDA0MgorOjEwMTZBMDAwOTBFNzAyOEQzRTcwMDE4QkM3QzFFODA0QjkwMzAwODk0MQorOjEwMTZCMDAwNDUwRTg5NDUwMkM3MDVGRkZGODNDNzEwMDUwMTAwRTJGQgorOjEwMTZDMDAwRUVFODVCMDFFNUNFQTNCNTM2RTgyMTAwRTg0NTAxQTFDRgorOjEwMTZEMDAwMzIzNDhDQ0JDRDM3MEU1OEE5MDBGMDc0MDczM0Y2ODkxRAorOjEwMTZFMDAwMzZGRjM0QzM4RDM2MzA2MTg5MzZGRjM0QzMzM0MwOEI0NworOjEwMTZGMDAwRDA4QkYyQjk2ODAwMkU4MEJDQUMxNzgwNzUwMUVGODNFNworOjEwMTcwMDAwQzIwMjQ2RTJGMUI4MDIwMEU3NTBCOTVBMDAzM0ZGQzdGRgorOjEwMTcxMDAwMDU2NTE4OEM0RDAyODNDNzA0RTJGNDMzQzA4RUMwOEM3QgorOjEwMTcyMDAwQzg4RUQ4OEQzRTgwMDA4RDM2OUMxN0I5MDgwMEU4MzdFQQorOjEwMTczMDAwMDA4RDM2MjAyMThEM0VDMDAwQjkwRDAwRTgyOTAwOERCNgorOjEwMTc0MDAwM0U0MDAxQjkwQTAwRTgxRjAwRTg0QjBFMzNDMDhFRDhCNgorOjEwMTc1MDAwQzcwNjRFMzc2RjE3RTc0OEU3NENCODQwOUNFNzRBRTVBNQorOjEwMTc2MDAwNDg5MEI4MDA3MEU3NDhDM0E1ODNDNzAyRTJGQUMzRTUxMgorOjEwMTc3MDAwNENDMzUwNTE1NjU3NTIwNjFFMzNDMDhFRDhFNTU4RDEyRgorOjEwMTc4MDAwRTA3MzExOEJGMEQxRTYzM0MwOEVEODhCQjQ4MDAwODMyOAorOjEwMTc5MDAwQzYwQkZGRTYxRjA3NUE1RjVFNTk1OENGNTgxQ0U0MUM2MgorOjEwMTdBMDAwNkMxQzhFMUFDMDFGNDAxQTQ0MUM2NTE4ODA4MDgwRkY3NAorOjEwMTdCMDAwODAwMzAyODBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzMAorOjEwMTdDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyOQorOjEwMTdEMDAwODAwMzAzNDM4MDgwMDI4MDQyMDMwMkZGMDMwMTAzMDE3MAorOjEwMTdFMDAwMDEwMzAyMDNGRkZGRkZGRkZGRkZGRkZGMDIwMzAxMDNFRgorOjEwMTdGMDAwMDNGRjAxMDFGRjAxRkYwMTAxMDMwMzAzRkZGRkZGRkZERgorOjEwMTgwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFOAorOjEwMTgxMDAwRkZGRkZGMDJCODBGMDBFNzg0QjgwRkY4RTc4MkMzQjlGMworOjEwMTgyMDAwMDgwMDg5MEVFNjNBOEQwNjIwMDM4QkQwQzFFODA0QTM5OAorOjEwMTgzMDAwOTAwMThCQzI4QkQ4QzFFODA0OEVDMDA1NjEwMDI2QTMzRAorOjEwMTg0MDAwMDAwMEExMzAzNDI2QTMwMjAwODNDMzE0RDFFQjI2ODkwMworOjEwMTg1MDAwMUUwODAwODFDMjEwMDZFMkQ5MjZDNzA2MDAwMEZGRkY1RAorOjEwMTg2MDAwOEMwNjkyMDFDMzUwNTE1NjU3NTIwNjFFMzNDMDhFRDg3MworOjEwMTg3MDAwRTc1QUZGMDZCRTMzQkFEMjAwRURDRjAwMDAwMDAwMDBFOQorOjEwMTg4MDAwOENDQkExMzAzNENEMzdFOTA2RURCODMyMDBDM0U4OENGQgorOjEwMTg5MDAwMDFGRTA2RTIzNEU4MjEwMTc1RjBFODUzMEU4MTBFQUYzNworOjEwMThBMDAwMzYwMEMwQzcwNkFEMzY2MDAwRjcwNkU2MzQ4MDAwNzUyNgorOjEwMThCMDAwMUFGNzA2RTYzNDAwMDg3NDA5QzcwNkFCMzYwQjAwRTlEMAorOjEwMThDMDAwMEYwMEM3MDZBQjM2MDMwMEU5MDYwMEM3MDZBQjM2MTFBQQorOjEwMThEMDAwOUNDNzA2QTkzNjE4MDBGNzA2RTYzNDgwMDA3NTBERjc5OAorOjEwMThFMDAwMDZCNTM2MDIwMDc0MDU4MzBFQTkzNjIwQTFBOTM2RTc5NQorOjEwMThGMDAwMDBBMUFCMzZFNzAyRjcwNkU2MzQ4MDAwNzQyRUU4RjI2QQorOjEwMTkwMDAwMkYzM0MwMEQ0MTAwRTc1NkExQjEzNjBEMDAxMEU3MDg5NgorOjEwMTkxMDAwQTFCMzM2RTcwQUExQUYzNkU3MDZCODQwMDBFNzRFMzM3OQorOjEwMTkyMDAwQzBFNzBFQzcwNjI2MDIwMDAwRTkyMzAwQzcwNjRFMzdBRgorOjEwMTkzMDAwM0YyMDhFMDYzMDM0MjZGNzA2MEEwMDAwODA3NDA3MjYwMgorOjEwMTk0MDAwODEwRTA4MDAwMDgwQzYwNkUwMzQwMUI4MDAwMEMzRkUyNgorOjEwMTk1MDAwMDZFMTM0QzYwNkUwMzQwMEExMjYwMjBCQzA3NDAxQzNDMAorOjEwMTk2MDAwRTgwNDAwQjgwMDAwQzNBMUE5MzZFNzAwOEIxRUFCMzYxRgorOjEwMTk3MDAwODNFMzA2RTUwMjI1RjlGRjBCQzMwRDEwMDBFNzAyQTE4MgorOjEwMTk4MDAwQUQzNkU3MDRDM0I4MEEwMEU3ODRGRTA2RTUzNEM2MDZCMAorOjEwMTk5MDAwRTMzNDAxOEUwNjMwMzQyNkY3MDYwQTAwMDA0MDc0MDc0RgorOjEwMTlBMDAwMjY4MTBFMDgwMDAwNDBDM0M3MDY0RTM3NkYxN0ZFMDY5QgorOjEwMTlCMDAwRTQzNEM2MDZFMzM0MDBDM0MzRjYwNjE4MzQ4MDc1MEQ1QworOjEwMTlDMDAwQTExODM0MEIwNjFBMzQwQjA2MUMzNDc1MDFDM0ExMkU2MgorOjEwMTlEMDAwMzQyNUZGRkU4QjE2RTczNjgxRTIwMDAxMEJDMkEzMkVGMQorOjEwMTlFMDAwMzQ4RDE2MTAwMEJGMDAwMEI5MDgwMDhCODUwMDM0RUY1RAorOjEwMTlGMDAwODNDMjEwOEI4NTAyMzRFRjgzQzIxMDhCODUwNDM0RUZEMQorOjEwMUEwMDAwODNDMkUyODNDNzA2NDk3NUUyQjgwMDAwOEVDMEJFMDBGQgorOjEwMUExMDAwMzRCRkI5MzZCOTE4MDBGM0E1QjgwMDAwQzMzM0MwOEU3RgorOjEwMUEyMDAwQzA4RDNFQjAzM0I5MDgwMEYzQUI4RDNFM0UzNEI5MDNGMAorOjEwMUEzMDAwMDBGM0FCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUE0MDAwNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3NUFGRjA2QkE3OQorOjEwMUE1MDAwMzNFNTU2MEQyMDAwRTc1NkJBN0EwMEVEMDgyNjk0MzY5NQorOjEwMUE2MDAwMzNDMEIxMDgzMkVEMDY4RUMwOEQzRUUwRkZGM0FBOEU4MgorOjEwMUE3MDAwMDYzMjM0MjY4MTBFMDgwMDAwMDIwN0U1NTYyNURGRkZGNgorOjEwMUE4MDAwRTc1NkU5RjhGQzAwQkQxQjEwMUJEOTFBRjMxQTUwNTE5OAorOjEwMUE5MDAwNTY1NzUyMDYxRTMzQzA4RUQ4RTc1QUZGMDZCNjMzNTM0OAorOjEwMUFBMDAwMDY1MUU1ODBBM0I0MzM4QkQ4OEJDODI1MTAwMEEzRUQ3NQorOjEwMUFCMDAwMzQwQkMwNzQxNEZGMDY4MDM0ODAzRUZFMzQwMDc0MDM3RgorOjEwMUFDMDAwRTkwNjAwQjg4MDAwRTg5RDA0ODNFMzAzRDFFMzJFRkYxQworOjEwMUFEMDAwOTc4NjFBNTkwNzVCRTlBNEZDQkEyMDAwOEUwNjNDMzRBRAorOjEwMUFFMDAwODMzRTNDMzQwMDc1MDNFOUYwMDBDNzA2M0MzNDAwMDAzNworOjEwMUFGMDAwRTkyQTAwQkExMDAwOEUwNjNBMzQ4MzNFM0EzNDAwNzU2MworOjEwMUIwMDAwMDNFOUQ1RkZDNzA2M0EzNDAwMDBFODEwMDBFOUM5RkYzMQorOjEwMUIxMDAwQkExMDAwOEUwNjNBMzRDNzA2M0EzNDAwMDAyNkExMTRFMworOjEwMUIyMDAwMDAyNkEzMEMwMDI2QTExNjAwMjZBMzBFMDAyNkM2MDYzQQorOjEwMUIzMDAwMEEwMDAwQzFFQTAyMjNEMTc0MUNCQTIwMDAyNkM3MDY5RAorOjEwMUI0MDAwMEUwMEVBMDUyNjBCMTYwQzAwMjY4OTE2MEMwMEZGMDY2RgorOjEwMUI1MDAwODYzNEZGMDZEQzMzMjZBMTBDMDBBOTAwMzc3NDE2MjY1NAorOjEwMUI2MDAwQzYwNjBBMDAwMkE5MDAzMDc0MDRGRjA2N0EzNEZGMDY5NAorOjEwMUI3MDAwREEzM0U5NDkwMEMwRUMwNzgzMTY4QTM0MDAyNDA3M0NCNQorOjEwMUI4MDAwMDc3NTA0RkYwNjhDMzRGRjA2N0UzNEExMzAzNDhDQzMwNQorOjEwMUI5MDAwOEVDMDhFREIyNjgzMEUwODAwNDA4Q0Q4MjY4NzA2MTY2MgorOjEwMUJBMDAwMDAyNjgzM0UxNDAwRkY3NDBBOEVDMDI2OEMxRTAwMDA5RgorOjEwMUJCMDAwRTkwNTAwMjY4QzFFMTQwMDMzQzA4RUQ4QzNDMzhDQzAyOAorOjEwMUJDMDAwODcwNjkyMDEzREZGRkY3NDBEOEVEODhDMDYwMDAwMzMwRQorOjEwMUJEMDAwQzA4RUQ4RTkwNDAwOEMwNjkwMDFFODAxMDBDMzA2ODM5QQorOjEwMUJFMDAwM0U5MDAxRkY3NDI5ODMzRTNBMzQwMDc1MTFCQTg2MDA5NQorOjEwMUJGMDAwRTgxRTAwOEMwNjNBMzQ4MzNFOTAwMUZGNzQxMTgzM0U0OAorOjEwMUMwMDAwM0MzNDAwNzUwQUJBODgwMEU4MDYwMDhDMDYzQzM0MDdBQworOjEwMUMxMDAwQzNBMTkwMDE4RUMwMjZBMTA4MDBFRjI2QTEwMDAwMjZENgorOjEwMUMyMDAwQzcwNjAwMDBGRkZGQTM5MDAxM0RGRkZGNzUwM0EzOTJDRAorOjEwMUMzMDAwMDE4MzNFRUQzNDAwNzQwQkI4MTAwMEU3ODRDNzA2RUQ1NQorOjEwMUM0MDAwMzQwMDAwQzM1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4RTc5OQorOjEwMUM1MDAwNUFGRjA2QkMzM0U5MjVGQjUwNTE1NjU3NTIwNjFFMzMzNgorOjEwMUM2MDAwQzA4RUQ4RTc1QUZGMDZCMDMzRTkxMUZCNTA1MTU2NTdFMgorOjEwMUM3MDAwNTIwNjFFMzNDMDhFRDhFNzVBRkYwNkI0MzMwNkZGMDY1RAorOjEwMUM4MDAwNzYzNDgwM0VGRTM0MDA3NDA0MDdFOUYwRkFCODgwMDAzMAorOjEwMUM5MDAwRThEMzAyMDdFOUU2RkEwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwMUNBMDAwQzYxRDA4MUQ5MTFFNUQxRTczMUU4OTFFOTExRUE4MUQ1NgorOjEwMUNCMDAwOTExRTkxMUVBRjFFQUYxRTE1MUQxNTFEOTExRTk5MUY2MQorOjEwMUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMjAwMDAwRQorOjEwMUNEMDAwMDAwMTAwMTAwMDAxMDA0MDAwMDAwMDAwMDAwMTAwMDBCMQorOjEwMUNFMDAwMDdFOTk5RkE1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4RTc2RAorOjEwMUNGMDAwNUFGRjA2QjIzMzA2NjhGNjFDRTUwNkEzQjIzMzhCRjAzMgorOjEwMUQwMDAwODNFNjFFMkVGRkE0QTAxQ0U1MENBOTgwMDA3NDA2RTg0MworOjEwMUQxMDAwQTQwMUU1MDZDMzUzRTUwQzhCRDhBOTAxMDA3NDE0ODMxNAorOjEwMUQyMDAwM0VFMDNBMDA3NDBEOEUwNjM4MzRFOEJGMDZDNzA2RTA4MAorOjEwMUQzMDAwM0EwMDAwRTUwMDBEMTgwMEU3MDBFNTAyMEQxMTAwRTc4QworOjEwMUQ0MDAwMDI4QkMzNUJBOTAxMDA3NDAxQzM4QkQwQjgwMDA4RTcwNAorOjEwMUQ1MDAwODQ4QkMyOEUwNjM4MzQyNkEzMEMwMDhCRDBDMUUwMDNERQorOjEwMUQ2MDAwODMxNjg4MzQwMEZGMDY3QzM0MjY4MzNFMDYwMDBBNzVGRAorOjEwMUQ3MDAwMjE4QkMyMjU0MDE4M0Q0MDAwNzQwQzNEMDAxMDc1MTJBNworOjEwMUQ4MDAwMjZGRTBFMEEwMDc0MEJGNzA2RUYzNDIwMDA3NTAzRTlGNworOjEwMUQ5MDAwNUEwNjhDQzAyNjhFMDYwMjAwMjY4MzBFMDgwMDIwMjZENgorOjEwMURBMDAwQTMxMjAwMjZBMzEwMDBDM0ZGMDZDNDMzRTUwQ0E5MDE0QgorOjEwMURCMDAwMDA3NTAxQzNBOUYwMDc3NDAxQzNGRjA2RDQzM0U1MDAyMQorOjEwMURDMDAwMEQxODAwRTcwMEMzRkYwNkNBMzM4MDNFQTAzNjA4NzUzMQorOjEwMUREMDAwMTQ4RTA2MzAzNDI2RjcwNjBBMDAwMDA4NzQwNzI2ODFBMAorOjEwMURFMDAwMEUwODAwMDAwOEU1ODIyNUZERkZFNzgyRTUwQzUwRTVCRQorOjEwMURGMDAwODAyNTAwMDdBM0U0M0FFNThDMjUwMDgwQTNFMjNBNTg0OQorOjEwMUUwMDAwQTkwMjAwNzUyNTgzM0VFMjNBMDA3NTFFODMzRUU0M0EzRQorOjEwMUUxMDAwMDA3NTE3RTUwODBEMDAwNDI1RkYwNEU3MDhFODZBMDFDRQorOjEwMUUyMDAwRTU4MjBEMDIwMEU3ODJFOTIxMDBFODFBMDY4MDNFRTgxQgorOjEwMUUzMDAwRkYwMDc0MEE4MDNFRThGRjA0NzQwM0U5MEQwMEM2MDY0MworOjEwMUU0MDAwRThGRjAxQkEwQzAxQjgwODA4RUZFRDgwM0U5RjM2MDZBNgorOjEwMUU1MDAwNzUwNTgzMEU5OTM2NDBCODAwMDFFOTA5MDFGRjA2Q0NFQgorOjEwMUU2MDAwMzM4MTI2QUYzNkZGRjdBMUFGMzZFNzA2RkYwNkM2MzQ0QgorOjEwMUU3MDAwRTkxRTAwRkYwNkNFMzNGRjA2OTUzNzgxMjZBRjM2RkZGOQorOjEwMUU4MDAwRUZBMUFGMzZFNzA2RTkwODAwRkYwNkQwMzNGRjA2N0E3OAorOjEwMUU5MDAwMzRGRjA2RDIzM0QxRTY4RTA2MzAzNDJFOEI4NEMwMUMzQworOjEwMUVBMDAwMjYwOTA2MDgwMDJFOEI4NEMyMUMwOTA2NjYzN0MzRTU4NgorOjEwMUVCMDAwMENBOTgwMDA3NDU2NTBFOEYwMDA1OEE5MDAwMTc1MDc3RAorOjEwMUVDMDAwRkYwNkM2MzNFOTA4MDBGRjA2NzgzNEZGMDZDODMzRTU4RAorOjEwMUVEMDAwODIyNUZERkZFNzgyRTg2RTA1QkExMDAxRUQ4MDNFRTgzRAorOjEwMUVFMDAwRkYwMDc0MEE4MDNFRThGRjA0NzQwM0U5MUQwMEM2MDY4MworOjEwMUVGMDAwRThGRjAxQkEwQzAxQjgwODA4RUZFREU5MEQwMEM2MDZDRAorOjEwMUYwMDAwRThGRjAzQkEwQzAxQjgwODA4RUZFREMzQTkwMTAwNzQ5QgorOjEwMUYxMDAwMUNFODJDMDA4MzNFRTAzQTAwNzQwRjA2OEUwNjM4MzQyRAorOjEwMUYyMDAwRThDOTA0QzcwNkUwM0EwMDAwMDdFOTVEMDA4QkQwOEVERgorOjEwMUYzMDAwMDYzODM0MjZBMzBDMDBFODA2MDA2ODY5MURFOTRBMDA0QgorOjEwMUY0MDAwQTkwMDA0NzQwQUI4MDAwNEZGMDZEODMzRTkxNzAwQTlGMQorOjEwMUY1MDAwMDAwMTc0MEFGRjA2MzkzN0I4MDAwMUU5MDgwMEE5MTAyQQorOjEwMUY2MDAwMDBCODEwMDA3NDFEMDkwNjY2Mzc4Q0MwOEUwNjMwMzQyOAorOjEwMUY3MDAwMjZGNzA2MEEwMDAwMDE3NDA3MjY4MTBFMDgwMDAwMDFGQQorOjEwMUY4MDAwOEVDMEMzRkYwNkMyMzNFOUY4RkZFNTAwMEQxODAwRTc3NQorOjEwMUY5MDAwMDBFNTAyMEQxMTAwRTcwMkMzNThFOTQzRkRFNTA4MEQxNQorOjEwMUZBMDAwMDAwNDI1RkYwNEU3MDhFOUUwRkZFNTBFQTkwMDA4NzUzNQorOjEwMUZCMDAwMDFDM0U5RjVGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMUZDMDAwNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3NUFGRjA2QjhGNgorOjEwMUZEMDAwMzNFNTQ4MDY1MzU3RkYxNjRFMzc1RjVCODMzRTgwMDE1QgorOjEwMUZFMDAwRkY3NDU4OEUwNjgwMDEyNkZGMEUwODAwNzU0RDI2QTE0RAorOjEwMUZGMDAwMDAwMEEzODAwMTI2QzcwNjAwMDBGRkZGOENDMDI2OEVDQworOjEwMjAwMDAwMDYwMjAwMjY4MTBFMDgwMDgwMDA4QkQwMjY4NzA2MUE2MworOjEwMjAxMDAwMDAyNjgzM0UxODAwRkY3NDBBOEVDMDI2ODkxNjAwMDAzMQorOjEwMjAyMDAwRTkwNTAwMjY4OTE2MTgwMDgzM0U4MDAxRkY3NDBDOEU5NgorOjEwMjAzMDAwMDY4MDAxMjY4MzNFMDgwMDAwNzRCMzA3RTkzRUY3RTVGOQorOjEwMjA0MDAwNEM5MEU1MDJBOTAwMjA3NDBEMjVGRkRGMEQwMTAwRTc4QgorOjEwMjA1MDAwMDIwRDAwMjBFNzAyRTUwQThCRDhBM0Y0MzMyNUMzNTcwRAorOjEwMjA2MDAwMEQwMDEwRTcwQUY3MDY5QjM2MDA4MDc0MzdGN0MzMDBBRgorOjEwMjA3MDAwODA3NDA2RjdDMzAwMDg3NDVEODEyNkMyMzQ3RkZGQzdGMQorOjEwMjA4MDAwMDYzNTM3MDUwMEI4ODAwM0NEMzk4MTI2OUIzNkZGN0ZBMgorOjEwMjA5MDAwQzcwNjBGMzcwNDAwRjcwNjlCMzY0MDAwNzUwNkM3MDZEMworOjEwMjBBMDAwMEYzNzAzMDBGNzA2OUIzNjAwMjA3NDJBRjdDMzAwMDg5OQorOjEwMjBCMDAwNzQyNDgwM0U5RDM2MDY3QzFERkYwNjk0MzQ4MzBFNjY5NAorOjEwMjBDMDAwMzcyMDhFMDYzMDM0MjZGNzA2MEEwMDAwMDE3NDA3MjZGMgorOjEwMjBEMDAwODEwRTA4MDAwMDAxRjdDMzAwMjA3NTNCRjcwNjlBMzcxMAorOjEwMjBFMDAwODAwMDc0MEJGRjA2ODkzNzMzQzBFNzBFRTkwNDAwRkY1OAorOjEwMjBGMDAwMDYzQjM3RjcwNjlCMzYwMDIwNzQxQzgwMjY5RTM2RkY3MQorOjEwMjEwMDAwNzUxNThFMDYzMDM0MjZGNzA2MEEwMDAwMDg3NDA3MjY3NworOjEwMjExMDAwODEwRTA4MDAwMDA4QzNDMzAwMDAwMDAwMDAwMDAwMDA5QQorOjEwMjEyMDAwMDIyMzAyMjMwMjIzMDIyMzAzMjNERDIyMDIyM0ZEMjFCMworOjEwMjEzMDAwMDIyM0E0MjRGMzI0MDIyMzhEMjI3QTIzMDIyMzk3MjQ0QQorOjEwMjE0MDAwMUIyNDc1MjQwMjIzMDIyMzhFMjVGQjhFMDY3RTAxRkJCMQorOjEwMjE1MDAwMjY4MzNFMDAwMEZGNzRGMjI2OEUwNjAwMDBGQTI2OEJDRQorOjEwMjE2MDAwMUUwODAwMjYyMzFFMEEwMDc0RTU4Q0MwOEVEMDI2OEIyNAorOjEwMjE3MDAwMjYwMjAwOEMxNkYyMzMyMkZGNzU2QTI2QTExQzAwOEEwMworOjEwMjE4MDAwRTM4QURDMjJEODc1MEREMEU4MjRGODBBQzA3NUYyQjBENQorOjEwMjE5MDAwODBFOUVERkZEMEU4MjRGODBBQzA3NTAyQjA4MDMyRTQ4RgorOjEwMjFBMDAwMjZBMzFDMDBGN0MzMDgwMDc1NDcyRThBOUZDNTI1MkU1RAorOjEwMjFCMDAwOEJCRkM1MjY4MEMzMTAyNjhFMUQyNjhDMUUwNjAwOEI2NQorOjEwMjFDMDAwMTYwMDAwQzcwNjAwMDBGRkZGMjY4OTE1ODNGQUZGNzU3OQorOjEwMjFEMDAwMEEyRThCOTdDRDI2MjYyMTE2MDgwMDMzQzA4RUQ4MjZDRQorOjEwMjFFMDAwODkxRTA0MDBDMzhBREZCNzAwMkU4QTlGQzUyNUU5RTA1NworOjEwMjFGMDAwRkYyNjgzMjYwODAwRjc4M0MzMTBFOURFRkY2MDA2MUU3MgorOjEwMjIwMDAwNjg4NzI1NkEwMDFGOEUwNkYyMzM4QjBFMzQzNDM5MEUzMAorOjEwMjIxMDAwRjIzMzc0MEUyNjgxMEUwQTAwMDAwMjI2ODEwRTA4MDA5OQorOjEwMjIyMDAwMDAwMjI2ODkyNjAyMDBBM0YyMzM4RUQwOEQyNjgwMDA3QworOjEwMjIzMDAwMzY4OTI2MDIwMDM2ODkxRTIwMDAzNkM3MDYwODAwMDBBRgorOjEwMjI0MDAwMDBCOTA0MDBCRTAwMDAyRThCQkNDNTI2MzZDNzA1RkZCMgorOjEwMjI1MDAwRkYzNkM3NDUwMkZGRkY4M0M2MDJFMkVCOEUwNjdFMDExMgorOjEwMjI2MDAwMzY4QjBFMjIwMDhDQzAyNjgzM0UwMDAwRkYyNjhFMDY5MQorOjEwMjI3MDAwMDAwMDc0MDcyNjNCMEUyMjAwN0RFQTM2OEMwNjAwMDAyMworOjEwMjI4MDAwOEVDMDI2OEMxNjAwMDBGQjM2RkYyRTFFMDAwNjFFNjgzMAorOjEwMjI5MDAwOEIyNTZBMDAxRjI2MDkzNjA4MDBGN0M2MDBGRjc0MDE2NworOjEwMjJBMDAwQzM1NjUyMkU4QkI0QzUyNTgxRTZGRjAwMkU4QkI0QzVENAorOjEwMjJCMDAwMjY4Q0MyOEVDMDI2QzcwNjAwMDBGRkZGOEVDMjI2ODM3MgorOjEwMjJDMDAwM0NGRjc0MEY4QkQwMjY4NzU0MDI4RUMyMjZBMzAwMDBEOQorOjEwMjJEMDAwRTkwNzAwMjY4OTQ0MDIyNjg5MDQ1QTVFQzMwNjFFNjg1RgorOjEwMjJFMDAwOEIyNTZBMDAxRjhFMDZGMjMzMjZBMzBBMDAyNjg5MjY1NAorOjEwMjJGMDAwMDIwMEExMzQzNDhFRDA4RDI2ODAwMDhDMTZGMjMzRTk5MgorOjEwMjMwMDAwNERGRUNGNTAxRTUyNTMzM0MwOEVEODI2ODMzRTA0MDA1QworOjEwMjMxMDAwRkYyNkM3MDYwNDAwMDAwMDc0MDNFOTFBMDA4MzNFRTZBNgorOjEwMjMyMDAwM0EwMjc2MTNGRjA2RDYzMzhDQzA4RTA2MzIzNEJFNDA5NgorOjEwMjMzMDAwMDA2ODNBMjNFOTVFRkZFODg0Rjg1QjVBMUY1OENGRTg0QgorOjEwMjM0MDAwRTEwMDI2QzYwNjE4MDAxMDI2OEExRTI5MDA4ODFFMUJEQQorOjEwMjM1MDAwMzcyNkM3MDYwQzAwRkY3RjI2QTEwRTAwRTc5QzI2QTFBQQorOjEwMjM2MDAwMDgwMEU3OUFFNTAwODBGQjA4NzQwOTBEMThBQ0U3MDA0NworOjEwMjM3MDAwMDcxRjU4Q0YwRDE4MDBFOUY0RkY1MDFFMDYzM0MwOEUxQQorOjEwMjM4MDAwRDg4MzNFQTEzNjAwNzVCNzI2OEIzNjA2MDAyRUZGOTQwMworOjEwMjM5MDAwREMyMzA3MUY1OENGRTg4QTAwRTUwMDBEMTgwMEU3MDA4RQorOjEwMjNBMDAwRTg0OTAwQzM1M0Y3MDZFRjM0MjAwMDc1MkRFNThDMjU2RQorOjEwMjNCMDAwMDA3MDhCRDhFNThDMjUwMDcwM0JDMzc0MDU4QkQ4RTk4MQorOjEwMjNDMDAwRjJGRjNEMDAzMDc1MTBFNTAyMjVFRkZGRTcwMkM3MDY3QQorOjEwMjNEMDAwRTAzQUZGRkZFOTAzMDBFODEyMDA1QkMzQTMyMzk2MjM2MgorOjEwMjNFMDAwQTQyM0E0MjM5NjIzQTQyMzk2MjM5NjIzMjZBMDI5MDA3RQorOjEwMjNGMDAwQTIxQjM3MjZDNzA2MEMwMEZGN0YyNkExMEUwMEU3OUMxNAorOjEwMjQwMDAwMjZBMTA4MDBFNzlBRTUwMDI1RkY1MzI2OEIzNjA2MDAzMworOjEwMjQxMDAwODNFNjBFMkUwQjg0QUQyNUU3MDBDMzA2MUU2ODhCMjVEMAorOjEwMjQyMDAwNkEwMDFGODMwRUVGMzQyMDgzMEU5QjM2MDhFNTAwMjVEQgorOjEwMjQzMDAwRUZGRjBEMDgwMEU3MDBFNTAwQTkxMDAwNzUwMUMzRTVGNgorOjEwMjQ0MDAwMDBBOTEwMDA3NUY5QzM1MDUzNTE1NjA2MUUzM0MwOEVCMworOjEwMjQ1MDAwRDhCODA1MDBFNzg0RTUwODBEMDAwNDI1RkYwNEU3MDg2NworOjEwMjQ2MDAwRTUwMDBEMTgwMEU3MDBFNTAyMEQxMTAwRTcwMjFGMDc2NworOjEwMjQ3MDAwNUU1OTVCNThDMzUwMUUzM0MwOEVEOEM3MDZFRjM0MDA3OAorOjEwMjQ4MDAwMDA4MzI2OUIzNkY3RTUwMDBEMTgwMEU3MDBFNTAyMERGNgorOjEwMjQ5MDAwMTEwMEU3MDIxRjU4Q0Y2MDA2MUU2ODg3MjU2QTAwMUZEQgorOjEwMjRBMDAwRTgxNkY1QzMwNjFFNjg4QjI1NkEwMDFGOEVDMDI2ODNCQQorOjEwMjRCMDAwM0UwQTAwMDA3NDAzRTg0MzAwMjZDNzA2MEEwMEZGRkYzNworOjEwMjRDMDAwMjY4QjE2MDYwMDhFMUU4RTAxOENEODhCQ0E4MzNFMDA4QQorOjEwMjREMDAwMDBGRjhFMUUwMDAwNzQwQTJCMTYwODAwNzNFQjI5MEVGNQorOjEwMjRFMDAwMDgwMDI2ODkwRTA4MDAyNjhDMUUwMDAwOEVEODhDMDY1NworOjEwMjRGMDAwMDAwMEMzNjAwNjFFNjg4NzI1NkEwMDFGOEVDMDhCQzg1NworOjEwMjUwMDAwOEUxRThFMDEyNkM3MDYwQTAwMDAwMDhDRDg4MzNFMDA2RQorOjEwMjUxMDAwMDBGRjc0MjUzQjBFMDAwMDhFMUUwMDAwNzVFRDhFRDg2NgorOjEwMjUyMDAwMjZBMTAwMDBBMzAwMDAzREZGRkY3NDU2OEVEODI2QTEwRgorOjEwMjUzMDAwMDgwMDAxMDYwODAwRTk0OTAwMjY4RTFFMDIwMEJFMThBOAorOjEwMjU0MDAwMDA4MzNDRkY3NDNDMzkwQzc0MTk4RTFDQkUwMDAwODM2MAorOjEwMjU1MDAwM0UwMDAwRkY3NDJDMzkwRTAwMDA3NDA3OEUxRTAwMDAzMAorOjEwMjU2MDAwRTlFQ0ZGMjZBMTAwMDA4OTA0MzNDOThFRDkzREZGRkZBNQorOjEwMjU3MDAwNzUxMDgzRkUxODc1MEIyNjhFMUUwMjAwODEyNjA4MDAzQQorOjEwMjU4MDAwN0ZGRjMzQzA4RUQ4QzMxRjA3NjFDRjFGMDdDRjYwMDYwMAorOjEwMjU5MDAwMUU2ODg3MjU2QTAwMUZFNTA2MjUxRTAwM0QxRTAwNzU4MgorOjEwMjVBMDAwRjZCOTA4MDBFNTU4RTc1QTIzQzBFMEY4QzMwMDAwMDA3OAorOjEwMjVCMDAwMDAwMDAwMDAwMDAwQUMwMDAwMDBBODAwOEMwMjA0MDAzNQorOjEwMjVDMDAwMDAwODEwMjAwMEZGMEUwQzBDMEEwQTBBMEEwODA4MDg2RQorOjEwMjVEMDAwMDgwODA4MDgwODA2MDYwNjA2MDYwNjA2MDYwNjA2MDY5MQorOjEwMjVFMDAwMDYwNjA2MDYwNjA0MDQwNDA0MDQwNDA0MDQwNDA0MDRBMQorOjEwMjVGMDAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ5QgorOjEwMjYwMDAwMDQwNDA0MDQwNDAyMDIwMjAyMDIwMjAyMDIwMjAyMDJBMAorOjEwMjYxMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI5QQorOjEwMjYyMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI4QQorOjEwMjYzMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI3QQorOjEwMjY0MDAwMDIwMjAyMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwMjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMjZDMDAwMDAwMDAwMDAwMDE4MDAxNDAwMTAwMDBDMDBGRjdGRkY0NQorOjEwMjZEMDAwQkZGRkRGRkZFRkZGRjdGRkZCRkZGREZGRkU3RkZGQkY0OQorOjEwMjZFMDAwRkZERkZGRUZGRkY3RkZGQkZGRkRGRkZFRkYwMDAwMDAzNgorOjEwMjZGMDAwODAzRUUyMzQwMTc2MDNFOUE1MDBCODAwMDBFNzRFQjk1OAorOjEwMjcwMDAwMjgwMEUyRkVDNjA2NDUzNzAyQkYzRjI4MkU4QjQ1MDg0QgorOjEwMjcxMDAwRTc0RUI5MjgwMEUyRkUyRThCMURDNzA2QjMzNjQwMTFFNgorOjEwMjcyMDAwQzcwNkIxMzYyNzAwQzcwNjQ2MzcwMjAwQzcwNjQ4MzczNgorOjEwMjczMDAwNjQwMEY3MDZCNTM2MDIwMDc1MUMyRTBCNUQwMjgxMjY3QgorOjEwMjc0MDAwQjMzNkZGRkVDNzA2QjEzNjlDMDBDNzA2NDYzNzA4MDAwMQorOjEwMjc1MDAwQzcwNjQ4Mzc5MDAxODkxRUI3MzY4OTFFRkUzM0JFMjA1MgorOjEwMjc2MDAwMDA4QkMzRTc0RUI5MjgwMEUyRkUyRThCNDUwNEU3NEVFRQorOjEwMjc3MDAwQjkyODAwRTJGRUU1NEU4QkNCMkUyMzQ1MDYyRTIzNERENQorOjEwMjc4MDAwMDYzQUMxNzQzNjRFNzVEOTgwM0U0NTM3MDA3NDBCQzY4MworOjEwMjc5MDAwMDY0NTM3MDBCRjJGMjhFOTcyRkZDNjA2NDUzNzAxRjcwNworOjEwMjdBMDAwMDZCNTM2MDIwMDc0MTRFNUNFMjVGREZGRTdDRUU4NDNGQQorOjEwMjdCMDAwMDBFNUNFMEQwMjAwRTdDRUU4MzkwMDgwM0VFMjM0MDFBQworOjEwMjdDMDAwNzYwMUMzQjhFQTA1RTc4Q0ZBRTgxMkY0RkI4RDA2RDA2RgorOjEwMjdEMDAwMzk4QkQ4QzFFODA0QTMzODM0OEVDMEExMzAzNDI2QTM4NQorOjEwMjdFMDAwMDIwMDI2QzcwNjAwMDBGRkZGODNDMzE4RDFFQjI2ODkyRAorOjEwMjdGMDAwMUUwODAwQzNFNTAyMEQwMDQwRTcwMkU1MDAwRDA0MDBERAorOjEwMjgwMDAwRTcwMEI4MDAwMEU3MEFFNTBBQTkwMDgwNzUxNEU1MDhBQQorOjEwMjgxMDAwMEQwMDEwRTcwOEU1MEEwRDAwMDhCOTA1MDBFNzBBRTIxNworOjEwMjgyMDAwRkNDM0U1MDgwRDAwMTBCOTA1MDBFNzA4RTJGQ0MzMDQ4RAorOjEwMjgzMDAwMEMyMDAwMDEwQzdFRkYwMDBDMDIwMDEwMDA0MDAwMEM3OAorOjEwMjg0MDAwQzYwMTAwMDBDMEY3RkYwMEMwMDIwMDEwMDA0MDAwMDBGOQorOjEwMjg1MDAwMzNDMDhFRDg4RDNFNzI0OThEMzZCMDM3QjkxNDAwOEI5NworOjEwMjg2MDAwMUUzMDM0ODk1QzAyMkU4QjQ1MDI4OTQ0MDYyRThCMDU2RQorOjEwMjg3MDAwODk0NDA0ODNDNzA0ODNDNjEwRTJFOEM2MDY5RTM2MEU2OAorOjEwMjg4MDAwRThGRDI2Njg4MzI4QTFBQTAyQ0QzNTgzM0VBMTM2MDA0MworOjEwMjg5MDAwNzQwM0U5M0IyNzMzRkY4RTA2QTYwMjhCMzZBNDAyMkU3MworOjEwMjhBMDAwRkZBNDJFMzA4MzBFOTkzNjA0QzcwNjM3MzcwMTAwQzZDMQorOjEwMjhCMDAwMDZDQTM0MDFFOTdEMTk4MDNFQTAzNjA4NzRFNjgwMjZGOAorOjEwMjhDMDAwOUUzNkZGNzUxQUY3MDY5QjM2MDAyMDc0MTJGNzA2OUI5QQorOjEwMjhEMDAwMzYwMzAwNzUwQTgzMEU2NjM3MTBDNjA2QTAzNjA4RTk2RgorOjEwMjhFMDAwRkIwMTgwM0U5RTM2MDI3NUNFQzYwNkEwMzYwNkU5RUM5OAorOjEwMjhGMDAwMDFDM0U5RTgwMTI2QzcwNjBBMDAwMDAwMjZGRjI2MDRGNgorOjEwMjkwMDAwMDBBMUQxMzYyNjM5MDYxQTAwNzUyMkExRDMzNjI2MzkwMAorOjEwMjkxMDAwMDYxQzAwNzUxOEExRDUzNjI2MzkwNjFFMDA3NTBFMjYzMAorOjEwMjkyMDAwRjcwNjBDMDA0MDAwNzQwNTgzMEU2NjM3NDA4MTBFQUYzOQorOjEwMjkzMDAwMzYwMDEwQTFBRjM2RTcwNjgwM0U5RDM2MDI3NTA2Q0QwMworOjEwMjk0MDAwMzRFOUEyMUFDM0Y3MDY5QjM2MTAwMDc1NTQyNkY2MDYyMgorOjEwMjk1MDAwMEEwMEZGNzU0QzI2QTAxOTAwMjRDMDNDNDA3NTExODA2OAorOjEwMjk2MDAwM0U5NTM2MDA3NDNCMjZDNzA2MDQwMEZGRkZFOTMxMDBBMAorOjEwMjk3MDAwRThGMTA0RjcwNjlCMzYwMzAwNzQyRjhCRDhCODdEMDM2QgorOjEwMjk4MDAwQ0QzQThCQzNDNjA2QTAzNjA2RjcwNjlCMzYwMjAwNzUwNQorOjEwMjk5MDAwMDVDNjA2QTAzNjA0ODEwRTlCMzY4MDAwODMyNjlCMzYzMgorOjEwMjlBMDAwRkNFOTIzMDFFODg3MURFOTMzMDE1MDI2QTEwQzAwMjUyRAorOjEwMjlCMDAwMDcwMDNEMDcwMDc1MDNFOTg0MDAzRDA1MDA3NTAzRTk0NAorOjEwMjlDMDAwN0MwMDgzM0VFODNBMDQ3NDc1ODMzRUU4M0EwMjc0NkVGNAorOjEwMjlEMDAwRjcwNkU2MzQxODgwNzUwM0U5NkEwMEY3MDZFNjM0MDA2NgorOjEwMjlFMDAwODA3NDM1MjY4MDNFMjkwMDAyNzUyRDUxNTY1NzhEMzY0QworOjEwMjlGMDAwM0UzNDhEM0UyMDAwQjkwNjAwRjNBNjVGNUU1OTc0NDU1MworOjEwMkEwMDAwMjZBMTIwMDBBMzNFMzQyNkExMjIwMEEzNDAzNDI2QTEwMworOjEwMkExMDAwMjQwMEEzNDIzNEU5MjYwMEY3MDZFNjM0MDgwMDc0MEJDQworOjEwMkEyMDAwMjY4MDNFMTkwMDAwNzQwM0U5MTMwMEY3MDZFNjM0MTAwRgorOjEwMkEzMDAwMDA3NDEyMjZBMDI4MDBDMEU4MDQyMkMwNzQwNzI2QzcyQworOjEwMkE0MDAwMDYwNDAwRkZGRjU4MjNDMDc0MDNFOTU3RkY4MTI2OUI0QgorOjEwMkE1MDAwMzZGRkZFODNGRTA2N0YyNDI2QTEyMDAwM0IwNkQxMzZFQQorOjEwMkE2MDAwNzUxQTI2QTEyMjAwM0IwNkQzMzY3NTEwMjZBMTI0MDAzNAorOjEwMkE3MDAwM0IwNkQ1MzY3NTA2ODEwRTlCMzYwMDAxMjZBMTIwMDA0NworOjEwMkE4MDAwMjU3RkZGQTNCODM0MjZBMTIyMDBBM0JBMzQyNkExMjRBRgorOjEwMkE5MDAwMDBBM0JDMzQ4QkM2ODZDNEEzQzAzNEQxRTY4MEZDMDkzNQorOjEwMkFBMDAwNzQwM0U4QUExQzhCQzYyRUZGQTQzMDQ5MjZBMTBDMDA5MworOjEwMkFCMDAwM0RGRjdGNzQwRjI2RkYyNjA0MDA4RTA2MzgzNEU4MzY2QgorOjEwMkFDMDAwMDZDRDUwQzNFOTE2MDBDRDM0RTkxMTAwQ0QzNDg5MzY2NgorOjEwMkFEMDAwM0QzN0ExOUQzNkEzM0YzN0M2MDZBMDM2MENFODhFMDBEMQorOjEwMkFFMDAwQTE5RjM2MjJFNDc1MzJGNzA2NEMzNzAxMDA3NTJBRjZBRAorOjEwMkFGMDAwMDY5RDM2ODA3NDA3ODgyNjlFMzZFOTMxMDAzQTA2OUQ4OQorOjEwMkIwMDAwMzZBMzlEMzY3NDI4OEJGMDJFRkZBNDBEMkI0NDI5RUU5RQorOjEwMkIxMDAwNDIxOTQ0Q0Q0NDJGNDU1QTQ1M0EyNjlFMzY3NTAxQzM4NQorOjEwMkIyMDAwMzJDMDg2QzQ4QkYwQTI5RTM2MkVGRkE0MjA0OThCMkU4NQorOjEwMkIzMDAwOTkzNjIzRUQ3NTAxQzNCRjAxMDBCRTAwMDA4NUZENzUwOAorOjEwMkI0MDAwMUE0NkQxRTdFOUY2RkYyQTAwMjkwMDI4MDAyNzAwMjVDOAorOjEwMkI1MDAwMDAwNTAwMDcwMDI2MDAwNjAwMjAwMEY3RDcyMTNFOTk1NworOjEwMkI2MDAwMzZEMUU2MkU4QkI0NDcyQkU5NEZGRkU5NTZGRjgwMjY3RQorOjEwMkI3MDAwOUUzNkZGNzUxN0Y3MDY0QzM3MDEwMDc1MEZGNjA2OUQ1OAorOjEwMkI4MDAwMzY4MDc0MDhGNzA2NjYzN0ZGRkY3NTA3QzcwNjY2Mzc5NQorOjEwMkI5MDAwMDAwMEMzRjcwNjQxMzcwMTAwNzUwQkI4N0YwM0NEMzkzQworOjEwMkJBMDAwQzcwNjQxMzcwMTAwMzNGNkI4MDA0MDg1MDY2NjM3NzQyMgorOjEwMkJCMDAwMjE4MEJDNTQzN0ZGNzQwNEZFODQ1NDM3ODBCQzk2MzRBMworOjEwMkJDMDAwRkY3NDA0RkU4NDk2MzQzMTA2NjYzNzgzM0U2NjM3MDAxMAorOjEwMkJEMDAwNzQwNTQ2RDFFODczRDRDM0ExRjQzM0E5MDA4ODc0MEJGQgorOjEwMkJFMDAwQTkwMDEwNzUwOThCMUU0MzM3RkZFM0U5RDcwMEM3MDYxQworOjEwMkJGMDAwMzUzNzA1MDBDNzA2NDMzNzFFMkNGNzA2RjQzMzAwMDhBNworOjEwMkMwMDAwNzQwNkM3MDY0MzM3MTAyQ0I4ODAwM0NEMzlFOUNERkVEMgorOjEwMkMxMDAwQTkwMDA4NzREOUZGMEUzNTM3NzVFREU5NjYwMEE5MDBFMworOjEwMkMyMDAwMDg3NUNCRkYwRTM1Mzc3NURGODEwRUMyMzRDMDAwRjY1NAorOjEwMkMzMDAwMDY5RDM2ODA3NDQ4ODEwRTlCMzYwMDgwRjcwNjlCMzZEMQorOjEwMkM0MDAwMDEwMDc0MUVCODdEMDNDRDNBODEwRTlCMzY4MDAwODM0RgorOjEwMkM1MDAwMjY5QjM2RkVDNzA2MEYzNzAyMDBDNjA2QTAzNjA0RTlEQgorOjEwMkM2MDAwN0JGRTgwM0VBMDM2MDQ3NTA3ODMzRTBGMzcwMTc1MDU1NQorOjEwMkM3MDAwQzYwNkEwMzYwNkM3MDYwRjM3MDIwMEU5NUZGRUJFMDI5MQorOjEwMkM4MDAwMDBFOTRBRkU4MDI2OUUzNkZGNzUzQUY2MDY5RDM2ODA5QworOjEwMkM5MDAwNzQyREY3MDY5QjM2MDAyMDc1MkJDNjA2QTAzNjA2RkY1RQorOjEwMkNBMDAwMDY5NDM0ODMwRTY2MzcyMDhFMDYzMDM0MjZGNzA2MEFFMworOjEwMkNCMDAwMDAwMDAxNzQwNzI2ODEwRTA4MDAwMDAxRTkwNjAwQkUyRAorOjEwMkNDMDAwMDQwMEU5MDlGRTgxMEVBRjM2MDAwOEExQUYzNkU3MDYyMQorOjEwMkNEMDAwRTUwQUE5MDA4MDc0MEU4MTI2QUYzNkZGRjdBMUFGMzY1MgorOjEwMkNFMDAwRTcwNkU5MDlGRkU5RjVGREM3MDY0MTM3MDAwMDgzMEU1NQorOjEwMkNGMDAwOTkzNjAyRTlFN0ZEODAyNjlFMzZGRjc1MURGNzA2OUI5MworOjEwMkQwMDAwMzYwMDQwNzUwNTgzMEU5OTM2MDg4MzBFOTkzNjIwODE2QQorOjEwMkQxMDAwMjY5QjM2RkZCRkI4ODUwM0NEMzlFOUMwRkQ4MDNFOUVCNgorOjEwMkQyMDAwMzYwNjc0MDc4MDNFOUUzNjBBNzUzNEY2MDY5RDM2ODA1OAorOjEwMkQzMDAwNzUwNkJFMDcwMEU5OTZGREM2MDZBMDM2MDQ4MzNFMEY2MQorOjEwMkQ0MDAwMzcwMjc0MUJDNzA2MEYzNzA0MDA4MDNFOUUzNjA2NzU5NworOjEwMkQ1MDAwMEVGNzA2OUIzNjQwMDA3NTA2QzcwNjBGMzcwMzAwRTlERAorOjEwMkQ2MDAwN0JGRDgwM0U5RDM2MDQ3NTEyODEwRUMyMzQwMDQwRkYwQgorOjEwMkQ3MDAwMDY5MjM0QzYwNkEwMzYwNkU5NjJGREJFMDUwMEU5NEQ5RQorOjEwMkQ4MDAwRkRGNjA2OUQzNjgwNzUxOTgzMEVDMjM0MDRCRTA2MDAxQQorOjEwMkQ5MDAwRTkzQkZEODAyNjlFMzZGRjc1QzVGRjA2MzEzN0U5MDAwOQorOjEwMkRBMDAwMDA4MzI2QzIzNEJGQzYwNkEwMzYwNkU5MkZGREU1MEExOQorOjEwMkRCMDAwNTAyNUMzQkZFNzBBNTg4MDI2OUUzNkZGNzUwREE5MDAyRgorOjEwMkRDMDAwNDA3NTA4QzYwNkEwMzYwNkU5MTJGREI4ODMwM0NEMzk2MgorOjEwMkREMDAwQzNCODdDMDNDRDM5RjcwNkY0MzMwMDEwNzUwOUM3MDY3NAorOjEwMkRFMDAwMzMzNzAyMDBFOUY2RkNGRjBFMzMzNzc0MDNFOUVERkNEQworOjEwMkRGMDAwRkYwNjhFMzRFOEY3MTk4MzBFQzIzNDA4QkUwMzAwRTlEQgorOjEwMkUwMDAwQ0NGQzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwNDA0MDVFOQorOjEwMkUxMDAwMDQwNDA0MDAwMzAwMDMwMzAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkUyMDAwMDAwNDAwMDgwODA1MDgwODA4MDAwMzAwMDMwMzAwMDA2OAorOjEwMkUzMDAwMDIwNDA0MDQwNDAwMDAwODAwMDAwQTE0MDAwMDFBMDA0MAorOjEwMkU0MDAwMUMwMDFFMjAwMDAwMDQ0MTA2MEIwOEMyRkZFNzA0MDMxQgorOjEwMkU1MDAwMDYwNDA0MDUwNDA2MDQ4NzA0MDMwNjA0MDQ4NTRFQTI0MAorOjEwMkU2MDAwMDRDRjA0Q0RDNzA2QTIzNzAwMDBDNzA2QTYzNzAwMDA2RQorOjEwMkU3MDAwMjZBMTIwMDAyNTdGRkZBM0Y1MzYyNkExMjIwMEEzRjc3NworOjEwMkU4MDAwMzYyNkExMjQwMEEzRjkzNkU4M0IxOThCRjAyNjhCMEVEOQorOjEwMkU5MDAwMEUwMDJCQzg4M0U5MEVCODAxODA4M0Y5MDQ3QzUxMjYwQgorOjEwMkVBMDAwOEE1NDI4ODgxNjFDMzc0MDI2OEI2QzI2ODZDRDNCQ0Q0RAorOjEwMkVCMDAwODZDRDg5MEVBNDM3NzUzODQwMzJGRjI2OEE1QzI5ODA3QQorOjEwMkVDMDAwRkIxNTc3MjU4MEZCMEE3NDIwODBGQjAxNzQxQkI4MDQ3NgorOjEwMkVEMDAwODAyRTNBOTcwMjJFNzQwNzJFM0E5NzE4MkU3NTExMzNDQQorOjEwMkVFMDAwQzA4MEZCMDk3NTRGOEJGM0MzMjZDNzA2MDQwMEZGRkZBNAorOjEwMkVGMDAwNTA1MkExQTQzNzg2QzQyNjNCMDYyNjAwN0MzMjI2ODE4OAorOjEwMkYwMDAwM0UyNjAwMDAwNDdFMjk4RDc0MkEyNjhCMTQyMkQyNzQ1QQorOjEwMkYxMDAwMUY4MEU2QkY4MEZFMDk3NTE3QzcwNkEyMzcwMTAwODAzMworOjEwMkYyMDAwRkEwNDc1MEMyNjhCNDQwMkEzMDMzNzg2QzRBM0QwMzQ1RAorOjEwMkYzMDAwNUE1OEU5QjFGRkJENzIzNzJFOEE4NzJFMkUyMkMwNzRFRgorOjEwMkY0MDAwMTYwNTQ0MkU4QkY4MkU4QjA1M0U4OTQ2MDA4M0M1MDI1QworOjEwMkY1MDAwODNDNzAyMjJFNDdERUY4RDc0MkE4M0U5MDQ3NTAzRTlCNworOjEwMkY2MDAwQTEwMDI2OEIxNDIyRDI3NTAzRTk3QzAwQzcwNkE2Mzc4MAorOjEwMkY3MDAwMDEwMEJGNzIzNzhCMDU4M0M3MDI4MEU2QkY4MEU0M0Y0NAorOjEwMkY4MDAwODBGRTA5NzUyMjgwRkEwNDc1NUVDNzA2QTIzNzAxMDAyQgorOjEwMkY5MDAwMjY4QjQ0MDJBMzAzMzc4NkM0QTNEMDM0ODZDNEM3MDY1NQorOjEwMkZBMDAwQTYzNzAwMDBFOTQ3MDAzQkZEN0UxNTI2OEIwNEE4NDBBQworOjEwMkZCMDAwNzQwNkI4MDc4MEU5MzhGRjMyQzAyNjhCMDRFOTJFMDA3QQorOjEwMkZDMDAwM0FGNDc1QjFDNzQ1RkUwMDAwODBGRTIyNzUwRDNBRDA3NworOjEwMkZEMDAwNzcxNkM3MDZBNjM3MDAwMEU5MTMwMDNBRDA3NTA5Qzc2RgorOjEwMkZFMDAwMDZBNjM3MDAwMEU5MDYwMEI4MDU4MEU5MDJGRjMyRjZDMAorOjEwMkZGMDAwMDNGMjJCQ0FCODA1ODAyM0M5NzYwM0U5NjRGRjc0MDM4MgorOjEwMzAwMDAwRTlFREZFMzNDMEJGNzIzNzhCMTU0NzQ3M0JGRDdGMUI5MQorOjEwMzAxMDAwRjZDNjgwNzQxNkY3MDZBNjM3MDEwMDc0MDZCODA4ODA1NQorOjEwMzAyMDAwRTlDM0ZFRjZDNjQwNzRFMEI4MDc4MEU5QjhGRTdENDIwOQorOjEwMzAzMDAwQTM0NTQ0Mjk0NDI5QjcyOEUyMjhFRTJCRjIyOEY1Mjg5NQorOjEwMzA0MDAwMDEyOUFDMkE0NDI5NDQyOTQ0Mjk0NDI5NDQyOTAwMDA1RgorOjEwMzA1MDAwNzMzNjAwMDAwMzM2QzUzNTgzMzU0NTM1MDczNUQyMzQyMAorOjEwMzA2MDAwNDUzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMzA3MDAwMDAwMEE2MzgwMDAwRTAzODAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMzA5MDAwRjIzMzAwMDBBNjMzNjAzM0ZEMzJCQzMyNzczMjNDMzI2QgorOjEwMzBBMDAwRkIzMTZBMzEwQTMxRTBFMDEwMTAxMEUwRTBFMEUwMDBBRQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzBDMDAwMDAwMDAwMDAwMDAwRTAwMEUwRTBFMEUwRTBFMEUwRTAyMAorOjEwMzBEMDAwRTAzM0ZGMjZGNjA2MUEwMDgwNzQxQjI2ODAyNjFBMDBBRAorOjEwMzBFMDAwN0YyNjhCM0UyNjAwODNFNzFGNzQwQjI2ODAwRTIwMDA3MAorOjEwMzBGMDAwODAyNjAxM0UwRTAwQzM2MDJFOEI4NEE2MzAyNkEzMThDNgorOjEwMzEwMDAwMDBEMUU2MkVGRjk0NTAzMDYxQzMyNkM3MDYwNDAwQzRFOAorOjEwMzExMDAwMkEyNkM3MDYwRTAwMTYwMDI2QzcwNjA2MDAwNjAwMjY0OQorOjEwMzEyMDAwQzYwNjE5MDAwMEU4QkYwNUU4OTgwNTI2QzcwNjI2MDA3MAorOjEwMzEzMDAwMDAwODI2QzYwNjI4MDA0MDI2QzYwNjI5MDAyQUJGMkFGRgorOjEwMzE0MDAwMDAyNkM2MDUwNDI2QzY0NTAxMkFBMTkzMzczM0RCQTkwQworOjEwMzE1MDAwNDAwMDc1MDJCMzAxQTkwMDEwNzQwMkI3ODhBOTAwMDhFNQorOjEwMzE2MDAwNzQwMzgwQ0Y0NDI2ODk1RDAyQzM4MzBFQzIzNDIwMjZCNworOjEwMzE3MDAwQzcwNjA0MDA2QjJCMjZDNzA2MEUwMDMwMDAyNkM3MDZDNAorOjEwMzE4MDAwMDYwMDBBMDAyNkM3MDYwQTAwMDQwMDI2QzYwNjE5MDAyMworOjEwMzE5MDAwMDBFODY5MDVFODJDMDUyNkM3MDYyNjAwMDAyMjI2QzY5OQorOjEwMzFBMDAwMDYyODAwNjAyNkM2MDYyOTAwMjlCRjJBMDAyNkM2MDU3MworOjEwMzFCMDAwMDgyNkM2NDUwMTJEOEQ3RDAyQkU1NDM3QjkwMzAwRjNBNAorOjEwMzFDMDAwQTUyNkM2MDUwODI2QzY0NTAxMkU4RDdEMDJCRTVBMzdBNgorOjEwMzFEMDAwQjkwMzAwRjNBNUU4RDQwNUU4NjQwNUI5MDYwMEJFNTRCOAorOjEwMzFFMDAwMzc4RDJFMkMwMDI2OEI0NjAwMjkwNDgzQzYwMjgzQzUwQQorOjEwMzFGMDAwMDI4M0Y5MDQ3NTAyNDU0NUUyRUJDMzI2QzcwNjA0MDBDNQorOjEwMzIwMDAwQzQyQTI2QzcwNjBFMDAyNDAwMjZDNzA2MDYwMDA2MDBBQworOjEwMzIxMDAwMjZDNjA2MTkwMDAwRThFNDA0RThBNzA0MjZDNzA2MjYyNworOjEwMzIyMDAwMDAwMDE2MjZDNjA2MjgwMDYwMjZDNjA2MjkwMDI4QkYwQworOjEwMzIzMDAwMkEwMEU4NUIwNkU4NzQwNUU4MDQwNUMzMjZDNzA2MDQwRgorOjEwMzI0MDAwMDBDNDJBMjZDNzA2MEUwMDFBMDAyNkM3MDYwNjAwMDY3NgorOjEwMzI1MDAwMDAyNkM2MDYxOTAwMDBFOEEzMDRFODY2MDQyNkM3MDY4RgorOjEwMzI2MDAwMjYwMDAwMEMyNkM2MDYyODAwNjAyNkM2MDYyOTAwMjc3MAorOjEwMzI3MDAwQkYyQTAwRTgyMTA1QzMyNkM3MDYwNDAwQzQyQTI2QzdDMgorOjEwMzI4MDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwQTAwMjZDNzA2MEEwQQorOjEwMzI5MDAwMDAwNDAwMjZDNjA2MTkwMDAwRTg0QjA0RTgyNDA0MjZCMgorOjEwMzJBMDAwQzcwNjI2MDAwMDEyMjZDNjA2MjgwMDQwMjZDNjA2MjlBNAorOjEwMzJCMDAwMDAyNkJGMkEwMEU4RjQwNEU4ODQwNEMzMjZDNzA2MDRGNQorOjEwMzJDMDAwMDBDNDJBMjZDNzA2MEUwMDM0MDAyNkM3MDYwNjAwMDZEQworOjEwMzJEMDAwMDAyNkM2MDYxOTAwMDBFODBEMDRFOEU2MDMyNkM3MDYyNgorOjEwMzJFMDAwMjYwMDAwMjYyNkM2MDYyODAwNDAyNkM2MDYyOTAwMjVGOAorOjEwMzJGMDAwQkYyQTAwRThCNjA0RTg0NjA0RThGQTA0QzMyNkM3MDY3NQorOjEwMzMwMDAwMDQwMEM0MkEyNkM3MDYwRTAwMzgwMEExQTIzNzUwMEJCRAorOjEwMzMxMDAwQzA3NTA3MjZDNzA2MEUwMDM0MDAyNkM3MDYwNjAwMDYzRAorOjEwMzMyMDAwMDAyNkM2MDYxOTAwMDBFODk5MDNFOEE0RkQyNkM3NDU1MworOjEwMzMzMDAwMjYwMDJBNTgwQkMwNzUwNjI2Qzc0NTI2MDAyNkExMUM2NAorOjEwMzM0MDAwMzdDMUUwMDQyNjg4NDUyODI2QzY0NTI5MjQ4M0M3MkE5NAorOjEwMzM1MDAwRTgyOTA0RThBMDA0RTgyMjA1RThGODAzRTgwOTA0QzMyMgorOjEwMzM2MDAwMjZDNzA2MDQwMEM0MkEyNkM3MDYwRTAwMzIwMDI2Qzc1OAorOjEwMzM3MDAwMDYwNjAwMDYwMDI2QzYwNjE5MDAwMEU4NDUwM0U4NTBDOAorOjEwMzM4MDAwRkQyNkM3NDUyNjAwMjRBMTFDMzdDMUUwMDQyNjg4NDUzOAorOjEwMzM5MDAwMjgyNkM2NDUyOTIzODNDNzJBRThFMDAzRTg2QzA0RTgwOQorOjEwMzNBMDAwOEEwNEU4OUMwNEMzMjZDNzA2MDQwMEM0MkEyNkM3MDY2QworOjEwMzNCMDAwMEUwMDM0MDAyNkM3MDYwNjAwMDYwMDI2QzYwNjE5MDBDMQorOjEwMzNDMDAwMDBFOEZGMDJFODBBRkQyNkM3NDUyNjAwMjZBMTFDMzdCMworOjEwMzNEMDAwQzFFMDA0MjY4ODQ1MjgyNkM2NDUyOTIyODNDNzJBRTg1NQorOjEwMzNFMDAwOUEwM0U4QzcwM0U4NTcwM0U4RjgwM0U4NzgwNEU4OEE5MworOjEwMzNGMDAwMDRDMzI2QzcwNjA0MDA3NDQ1MjZDNzA2MEUwMDNFMDAxNworOjEwMzQwMDAwMjZDNzA2MDYwMDA2MDAyNkM3MDYwQTAwMDQwMDI2QzZEMAorOjEwMzQxMDAwMDYxOTAwMDBFOEZDMDJFOEE5MDI4MzNFOEQzNzAzNzUxNworOjEwMzQyMDAwMDE5MDI2QzcwNjI2MDAwMDMwMjZDNjA2MjgwMDUwMjYzMgorOjEwMzQzMDAwQzYwNjI5MDAyMEJGMkEwMEU4RDAwM0U4MDEwM0U4QjU0QQorOjEwMzQ0MDAwMDNFODlGMDNDMzI2QzcwNjA0MDA2MTQzQjlGMDAwODM2NQorOjEwMzQ1MDAwRTkwMjI2ODkwRTBFMDAyNkM3MDYwNjAwMDIwMDI2QzZDRgorOjEwMzQ2MDAwMDYxOTAwMDAyNkM3MDYxQTAwMDAwMDI2QzcwNjFDMDAyMQorOjEwMzQ3MDAwMDAwMDI2QzcwNjFFMDAwMDAwRTg0NzAyODNFOTBFODYwQQorOjEwMzQ4MDAwQ0QyNjg5MEUyNjAwODZDRDI2QzYwNjI4MDAwMDI2QzYzMworOjEwMzQ5MDAwMDYyOTAwMDhCRjJBMDA4M0U5MDQyNjg5MEQyNkM2NDVBRgorOjEwMzRBMDAwMDEyNjhEN0QwMjgzRTkwMkJCMDEwMEI4MzAzMDRCNzVFNworOjEwMzRCMDAwMTdCQjBBMDA4QUM0MjY4ODA1QjAzMTgwQzQwMTgwRkM4RAorOjEwMzRDMDAwM0E3NTBBQjQ2MUU5MDUwMDI2ODgwNTA0MDE0NzQ5NzU4MworOjEwMzREMDAwRERDMzI2QzcwNjA0MDAwNDQ1MjZDNzA2MEUwMDEyMDBGOQorOjEwMzRFMDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDFFOEU1MDEwMworOjEwMzRGMDAwRThEMDAxMjZDNzA2MjYwMDAwMDQyNkM2MDYyODAwMDBEQworOjEwMzUwMDAwMjZDNjA2MjkwMDA3QzMyNkM3MDYwNDAwQzQyQTI2QzcwNAorOjEwMzUxMDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwNjAwMjZDNjA2MTk2RAorOjEwMzUyMDAwMDAwNkU4MDQwMkU4OUIwMTI2QzcwNjI2MDAwMDEyMjZEMgorOjEwMzUzMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwNkJGMkEwMEU4NkIzQQorOjEwMzU0MDAwMDJFOEZCMDFDMzI2QzcwNjA0MDBDNDJBMjZDNzA2MEVFQworOjEwMzU1MDAwMDAyMDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDUzQworOjEwMzU2MDAwRThDNjAxRTg1RDAxMjZDNzA2MjYwMDAwMTIyNkM2MDY0OQorOjEwMzU3MDAwMjgwMDAwMjZDNjA2MjkwMDA1QkYyQTAwRTgyRDAyRTgxQgorOjEwMzU4MDAwQkQwMUMzRkYwNjgyMzQyNkM3MDYwNDAwM0Q0MTI2Qzc5RAorOjEwMzU5MDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwRTAwMjZDNjA2MTlFNQorOjEwMzVBMDAwMDAwNEU4ODQwMUU4MUIwMTI2QzcwNjI2MDAwMDEyMjY1NQorOjEwMzVCMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwNEJGMkEwMEU4RUIzQworOjEwMzVDMDAwMDFFODdCMDFDMzI2QzcwNjA0MDA2NzQyMjZDNzA2MEUzMgorOjEwMzVEMDAwMDAyMDAwMjZDNzA2MDYwMDA4MDAyNkM2MDYxOTAwMDNCQworOjEwMzVFMDAwRTg0NjAxRThERDAwMjZDNzA2MjYwMDAwMTIyNkM2MDZDQQorOjEwMzVGMDAwMjgwMDAwMjZDNjA2MjkwMDAzQkYyQTAwRThBRDAxRTgxRQorOjEwMzYwMDAwM0QwMUMzRkYwNjg0MzQyNkM3MDYwNDAwNjc0MjI2Qzc2RgorOjEwMzYxMDAwMDYwRTAwMjQwMDI2QzcwNjA2MDAwODAwMjZDNjA2MTk2NgorOjEwMzYyMDAwMDAwMkU4MDQwMUU4OUIwMDI2QzcwNjI2MDAwMDE2MjZEMworOjEwMzYzMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwMkJGMkEwMDI2QzZBNAorOjEwMzY0MDAwMDUwNDI2QzY0NTAxMDFBMTBGMzc4NkUwRjYwNjZGMzc0RgorOjEwMzY1MDAwMDE3NTBGMzkwNkNDMzQ3NDA5OEJEOEI4ODkwM0NEMzk3QworOjEwMzY2MDAwOEJDM0EzQ0MzNDI2ODk0NTAyOEQ3RDA0RTgzRDAxRTg1NworOjEwMzY3MDAwQ0QwMEMzMjZDNzA2MDQwMEM0MkEyNkM3MDYwRTAwMUNCOAorOjEwMzY4MDAwMDBBMUEyMzc1MDBCQzA3NTA3MjZDNzA2MEUwMDE4MDAxMAorOjEwMzY5MDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDBFODIzMDAxNQorOjEwMzZBMDAwRTgyRUZBMjZDNzQ1MjYwMDBFNTgwQkMwNzUwNjI2QzcxOQorOjEwMzZCMDAwNDUyNjAwMEEyNkM2NDUyOTAwODNDNzJBRThCRDAwRTgzQQorOjEwMzZDMDAwRkYwMEMzNTY1NzUxQjkwMzAwQkVEMTM2QkYyMDAwRjNFNworOjEwMzZEMDAwQTU1OTVGNUVDMzU2NTc1MUI5MDMwMEJFRDEzNkJGMUExNAorOjEwMzZFMDAwMDBGM0E1NTk1RjVFQzMyNkM3MDYxQTAwQzAwMDI2QzdBRgorOjEwMzZGMDAwMDYxQzAwMDAwMDI2QzcwNjFFMDAwMDEwQzMyNkM3MDZEMQorOjEwMzcwMDAwMUEwMEMwMDAyNkM3MDYxQzAwMDAwMDI2QzcwNjFFMDBCRgorOjEwMzcxMDAwMDAwOEMzMjZDNzA2MUEwMEMwMDAyNkM3MDYxQzAwMDAwMgorOjEwMzcyMDAwMDAyNkM3MDYxRTAwMDAwMkMzMjZDNzA2MUEwMEMwMDBGNgorOjEwMzczMDAwMjZDNzA2MUMwMEZGRkYyNkM3MDYxRTAwRkZGRkMzMjY4NAorOjEwMzc0MDAwQzYwNTA4MjZDNjQ1MDEwMjhEN0QwMkJFMDUzN0I5MDNCMAorOjEwMzc1MDAwMDBGM0E1QzMyNkM2MDUwNDI2QzY0NTAxMDZBMTBEMzdGQworOjEwMzc2MDAwMjY4OTQ1MDI4RDdEMDRDMzI2QzYwNTA0MjZDNjQ1MDE2QgorOjEwMzc3MDAwMDdBMTBCMzcyNjg5NDUwMjgzQzcwNEMzQTFBMjM3MEJEMworOjEwMzc4MDAwQzA3NDEzMjZDNjA1MDQyNkM2NDUwMTA5QTEwMzM3MjZDMQorOjEwMzc5MDAwODk0NTAyODNDNzA0QzMyNkM2MDUwODI2QzY0NTAxMDIxQgorOjEwMzdBMDAwOEQ3RDAyQkUwNTM3QjkwMzAwRjNBNUMzMjZDNjA1MDYwNQorOjEwMzdCMDAwMjZDNjQ1MDEwQjhEN0QwMkJFRUYzNkI5MDIwMEYzQTU4QQorOjEwMzdDMDAwQzMyNkM2MDUwNjI2QzY0NTAxMjBBMTY4MzcyNjg5NDVCOQorOjEwMzdEMDAwMDJBMTZBMzcyNjg4NjUwNUMxRTAwNDI2ODg0NTA0ODM2RQorOjEwMzdFMDAwQzcwNkMzMjZDNjA1MDQyNkM2NDUwMTIxMjZDNzQ1MDJDRAorOjEwMzdGMDAwMDAwMDgzQzcwNEMzMjZDNjA1MTQyNkM2NDUwMTIyOEREMgorOjEwMzgwMDAwN0QwMkJFMUYzN0I5MDkwMEYzQTVDMzI2QzYwNTBDMjZFNQorOjEwMzgxMDAwQzY0NTAxMjM4RDdEMDIxRTBFMUY4RDM2NDA1NEI5MDMwRgorOjEwMzgyMDAwMDBGM0E1MzNDMEI5MDIwMEYzQUIxRkMzMjZDNjA1MDhEOQorOjEwMzgzMDAwMjZDNjQ1MDEyODhEN0QwMkJFRDEzNkI5MDMwMEYzQTUwOQorOjEwMzg0MDAwQzMyNkM2MDUwODI2QzY0NTAxMjlBMUMyMzQ4NkUwMjYzRQorOjEwMzg1MDAwODk0NTAyQTE5QjM2MjY4OTQ1MDQyNjg4NDUwNjI2ODg4NworOjEwMzg2MDAwNDUwNzhEN0QwOEMzMjZDNjA1MDYyNkM2NDUwMTJCOEQ1NgorOjEwMzg3MDAwN0QwMkJFQkIzNkI5MDIwMEYzQTVDMzI2QzYwNTA2MjZFNworOjEwMzg4MDAwQzY0NTAxMkM4RDdEMDJCRUU1MzZCOTAyMDBGM0E1QzMwNQorOjEwMzg5MDAwMjZDNjA1MDQyNkM2NDUwMTMwQTEzNzM3ODZFMDI2ODlBRAorOjEwMzhBMDAwNDUwMjhEN0QwNEMzMjZDNzA2MEUwMDFFMDAyNkM3MDZFRQorOjEwMzhCMDAwMDYwMDAyMDAyNkM2MDYxOTAwMDBFODZDRkVFODAzRkVCQQorOjEwMzhDMDAwMjZDNzA2MjYwMDAwMTAyNkM2MDYyODAwMzAyNkM2MDY5MworOjEwMzhEMDAwMjkwMDExQkYyQTAwRTgzNTAwRTg0NTAwRTg1NTAwQzM3QgorOjEwMzhFMDAwMjZDNzA2MEUwMDEyMDAyNkM3MDYwNjAwMDIwMDI2QzZERQorOjEwMzhGMDAwMDYxOTAwMDBFODMyRkVFOEM5RkQyNkM3MDYyNjAwMDBDQQorOjEwMzkwMDAwMDQyNkM2MDYyODAwMzAyNkM2MDYyOTAwMTNDMzI2QzY4QworOjEwMzkxMDAwMDUwNDI2QzY0NTAxMEMyNkM3NDUwMjAwMDE4M0M3MDRERAorOjEwMzkyMDAwQzMyNkM2MDUwNDI2QzY0NTAxMEUyNkM3NDUwMjAwMDI2OQorOjEwMzkzMDAwODNDNzA0QzMyNkM2MDUwNDI2QzY0NTAxMjEyNkM3NDVGQworOjEwMzk0MDAwMDIwMDAwODNDNzA0QzMwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMzk1MDAwQjMzOUM5Mzk4MzNBQjMzOUIzMzlCMzM5MUMzQTFDM0E0QworOjEwMzk2MDAwQTNCNjM0QTFFOTM2QTMxMTM3QTNEMjM0QTFFQjM2QTMxMQorOjEwMzk3MDAwMTMzN0EzRDQzNEExRUQzNkEzMTUzN0EzRDYzNEExMDE1MAorOjEwMzk4MDAwMzdBM0NFMzRBMUY3MzZBMzE3MzdBM0RDMzRBMUY5MzYxOQorOjEwMzk5MDAwQTMxOTM3QTNERTM0RjcwNjlCMzYwMjAwNzUwQzMzQzAzQgorOjEwMzlBMDAwQTA5RTM2OEJGMDJFRkZBNDUwMzlFOTBGMDFCRTA3MDAxMAorOjEwMzlCMDAwRTkxOUYxRjYwNjlEMzY4MDc0RjNDNjA2QTAzNjAyQzZGNAorOjEwMzlDMDAwMDY2RTM3MDhDNjA2NzAzNzAyQjg4ODAzQ0QzOUY2MDY4QQorOjEwMzlEMDAwNkYzNzAxNzU0QUExRDEzNjNBMDZFOTM2NzU0MTNBMjY2NAorOjEwMzlFMDAwRUEzNjc1M0JBMUQzMzYzQTA2RUIzNjc1MzIzQTI2RUMwOQorOjEwMzlGMDAwMzY3NTJDQTFENTM2M0EwNkVEMzY3NTIzM0EyNkVFMzZDNQorOjEwM0EwMDAwNzUxREM2MDY3MDM3MDJGRTBFNkUzNzc1MEZCODg4MDMzNworOjEwM0ExMDAwQ0QzQTgzMEU5QjM2MTJDNjA2QTAzNjBDRTlBOEYwQTE1QgorOjEwM0EyMDAwMDUzNzI2M0IwNjIwMDA3NTQwQTEwNzM3MjYzQjA2MjJCNgorOjEwM0EzMDAwMDA3NTM2QTEwOTM3MjYzQjA2MjQwMDc1MkNBMDlFMzY1QQorOjEwM0E0MDAwM0MwMjc1MDgyNkY2MDYxODAwMDg3NTQ3QzYwNjZFMzc0QworOjEwM0E1MDAwMDhGRTBFNzAzNzc1MUNDNjA2NzAzNzAyRTUwMjBEMDFCMAorOjEwM0E2MDAwMDQyNUVGRkZFNzAyRTk1RUYwQzYwNjcwMzcwMkM2MDZERQorOjEwM0E3MDAwNkUzNzA4RTUwMjI1RkZGQjBEMDEwMDI1RUZGRkU3MDI4OQorOjEwM0E4MDAwRTk0NEYwRjcwNjlCMzYwMDAxNzQyNTI2RjYwNjE4MDA3NworOjEwM0E5MDAwMDg3NUVEODEyNjlCMzY3RkZGQjg4OTAzQ0QzQUI4ODQzRgorOjEwM0FBMDAwMDNDRDNBQzYwNkEwMzYwNjgzMjZDMjM0QUZFOTE3RjAyNgorOjEwM0FCMDAwQTEwMTM3M0EyNjBGMzc3RkM3RTlGN0ZFODMyNjlCMzZFOQorOjEwM0FDMDAwRUNFODJBMEQ4MTBFOUIzNjgwMDBCQkZGN0ZDRDUzQzZFQworOjEwM0FEMDAwMDZBMDM2MDJFOUYwRUY4MzBFOUIzNjExQzYwNkEwMzYyQgorOjEwM0FFMDAwMENFOUY5RUY0NDNCMkMzQkM3MkE2QjNCNDQzQkM3MkEwQworOjEwM0FGMDAwQzcyQUM3MkFBM0I2MzQ4MTBFQzIzNDAwMjBGNzA2NDE3NAorOjEwM0IwMDAwMzcwMTAwNzQxQjhDQzNDNzA2NDEzNzAwMDBCODdGMDMyMAorOjEwM0IxMDAwQ0QzQTMzQzA4RUMwQkY1NDM3QjkwNjAwRjNBQjhFQzM2NQorOjEwM0IyMDAwMzNDMEEwOUUzNjhCRjAyRUZGQTRFNDNBRjcwNjlCMzZGNgorOjEwM0IzMDAwMDAwMTc1MjE4MzI2QzIzNEJGQTFBOTM2RTcwMEExOUJFRAorOjEwM0I0MDAwMzZFOTA5MDBBMTlCMzY4MTI2OUIzNkZGREZBOTAwMjBCQworOjEwM0I1MDAwNzUwNkU5NkUwMEU5NkZFRjgzMEU5OTM2MDRDNzA2MzdFNAorOjEwM0I2MDAwMzcwMTAwQzYwNkNBMzQwMUU5NTgwMDgzMEU5QjM2NDA2RgorOjEwM0I3MDAwRTg1ODAwQTEwNTM3M0IwNkU5MzY3NTM3QTEwNzM3M0IwMgorOjEwM0I4MDAwMDZFQjM2NzUyRUExMDkzNzNCMDZFRDM2NzUyNUZFMEU4MAorOjEwM0I5MDAwNzEzNzc1MUNCODg3MDNDRDNBODMwRTk5MzYxMEExNTA0MgorOjEwM0JBMDAwMzdDNzA2NTAzNzAwMDAwOTA2OTkzNkM2MDZBMDM2MDgwMgorOjEwM0JCMDAwRTkxNEVGODMwRTk5MzYwNEM3MDYzNzM3MDMwMEM2MDZBQgorOjEwM0JDMDAwQ0EzNDAzQzYwNkEwMzYwQUU5RkNFRUExRDEzNjI2M0I2QworOjEwM0JEMDAwMDYyMDAwNzUxNUExRDMzNjI2M0IwNjIyMDA3NTEyQTFEQQorOjEwM0JFMDAwRDUzNjI2M0IwNjI0MDA3NTBGQzM4RDM2MjAwMEU5MEIyMQorOjEwM0JGMDAwMDA4RDM2MjIwMEU5MDQwMDhEMzYyNDAwODNDNDAyRjdDQworOjEwM0MwMDAwMDZFNjM0MDEwMDc0MTUyNjNBMDQ3NzA4NzIwRTI2M0E0NworOjEwM0MxMDAwNjQwMTcyMDhDNjA2QTAzNjA2RTlBQkVFRTg3QzBBOENBMQorOjEwM0MyMDAwQzAzREZGRkY3NDFCMjZDNjA2MTgwMDEwMjZDNzA2MDRGOQorOjEwM0MzMDAwMDA0OTNDMjZDNzA2MDYwMDBDMDBDRDUwQjk0RTAwRTJGNAorOjEwM0M0MDAwRkVDNjA2QTAzNjBBRTk5NEVFRTk3QkVFOEYzQzA2M0RGRgorOjEwM0M1MDAwMDYzRDA2M0REMjNDRUEzQzA2M0QwNjNEQTNCNjM0ODExNgorOjEwM0M2MDAwMjZDMjM0QUZERkM3MDY0QzM3MDAwMEI4OEEwM0NEM0EwRQorOjEwM0M3MDAwODAzRTlEMzYwNDc1MEM4MDNFOUUzNjA2NzQwNUM2MDY1MQorOjEwM0M4MDAwOUYzNjA2MzNDMEEwOUUzNjhCRjAyRUZGQTQ0QzNDRjcyNworOjEwM0M5MDAwMDY5QjM2MDAyMDc1MEU4MTI2OUIzNkZGQkZCODhCMDMyRQorOjEwM0NBMDAwQ0QzQUU5NTQwMEY3MDY5QjM2MDAwMTc0MDNFOTE3RUU5QworOjEwM0NCMDAwQzcwNjM3MzcwMjAwQzYwNkNBMzQwMjgzMEU5OTM2MDQ5NworOjEwM0NDMDAwODMwRTUwMzcwNEY2MDY5RDM2ODA3NTJBRTgxRjBCRTlFRgorOjEwM0NEMDAwMjcwMEY3MDY5QjM2MDAwMTc1RDNDNzA2MzczNzAyMDA2OQorOjEwM0NFMDAwQzYwNkNBMzQwMjgzMEU5OTM2MDRDNjA2QTAzNjAwRjYwQworOjEwM0NGMDAwMDY5RDM2ODA3NDAzRThERTBBODEyNjlCMzY3Q0ZGQkI3NgorOjEwM0QwMDAwRkZGRkNENTNDRDU0RTlCRUVEQTNCNjM0RThBRDAxQjgwNQorOjEwM0QxMDAwODYwM0NEMzlDNzA2NEMzNzAwMDA4MTI2QzIzNEFGREY5OQorOjEwM0QyMDAwRjYwNjlEMzY4MDc0MzRGNzA2OUIzNjAwMjA3NDU2RjdFRAorOjEwM0QzMDAwMDY5QjM2MDAwMTc0MjdFODM1MDE3MjFDQkUwMDQwODVFMQorOjEwM0Q0MDAwMzZDMjM0NzUwODA5MzZDMjM0RkYwNjkyMzRFODhCMDE1NgorOjEwM0Q1MDAwNzMwNjgxMEU5OTM2ODAwMEU5NkNFREU5QjUwMEM3MDY1RgorOjEwM0Q2MDAwMzczNzAyMDBDNjA2Q0EzNDAyODMwRTk5MzYwNDgzMEUyMgorOjEwM0Q3MDAwNTAzNzA0ODAzRTlFMzYwODc0MDNFODVBMEFFOEVGMDA4NAorOjEwM0Q4MDAwNzJENkU5QzhGRjgwM0U5RTM2MEE3NTEyQzYwNkEwMzY3NgorOjEwM0Q5MDAwMDBGNzA2OUIzNjA4MDA3NDAyQ0Q1NEU4MzkwQTgxMjZFNAorOjEwM0RBMDAwOUIzNkZGQkZFOEM4MDA3MkFGQjg4QjAzQ0QzOUU5OUNFMgorOjEwM0RCMDAwRkZGNjA2OUUzNkZGNzU1OEEzQjYzNEU4RkUwMDgxMjY0RQorOjEwM0RDMDAwQzIzNEZGQkZGNjA2OUQzNjgwNzQ0OEY3MDY5QjM2MDA2NgorOjEwM0REMDAwMjA3NDIyRjcwNjlCMzYwMDQwNzUwOEU4OTEwMDcyMzA4NworOjEwM0RFMDAwRTkyMjAwMjZBMTBDMDBBOTYwMDA3NTI0ODEwRTY2MzcyNworOjEwM0RGMDAwMDAwOEU5RDJFQ0M3MDY0QzM3MDAwMEU4NzEwMDcyMTBFOQorOjEwM0UwMDAwQjg4QjAzQ0QzOUU4RDMwMDczMDY4MTBFOTkzNjgwMDA1NAorOjEwM0UxMDAwRTlCNEVDODAzRTlEMzYwNDc1MEM4MDNFOUUzNjA2NzRGNworOjEwM0UyMDAwNDZDNjA2OUYzNjA2RjcwNjlCMzYwMDAxNzQwQzgwM0U5OAorOjEwM0UzMDAwOUQzNjA4NzUwNUM2MDY5RjM2MEFFODMyMDA3MkQxRTgzRAorOjEwM0U0MDAwOTkwMDgwM0U5RDM2MDg3NTEzODEwRTk5MzY4MDAwRjdFMworOjEwM0U1MDAwMDY5QjM2MDAyMDc1MDhCODhCMDNDRDM5RTk2OEVDQzY5RgorOjEwM0U2MDAwMDY5RjM2MEFFOTYwRUNCODg2MDNDRDNBRTk1OEVDMjY5RAorOjEwM0U3MDAwQTEwQzAwQTk2MDAwNzQwODgxMjZDMjM0RkZCRkY5QzNGOQorOjEwM0U4MDAwRjcwNjlCMzYwMDQwNzQxMzgxMEU2NjM3MDAwOEU4NEEzNworOjEwM0U5MDAwMDA3MzA2ODEwRTk5MzY4MDAwRjlDMzgxMEU5QjM2MDBBRgorOjEwM0VBMDAwNDA4MDI2NkYzN0ZFODEyNjlCMzY3RkZGQzYwNkEwMzZGMAorOjEwM0VCMDAwMDBGOEMzODEwRTk5MzYwMDAxRTkyMUVDMjZBMTIwMDAwQgorOjEwM0VDMDAwQTNGQjM2QTNBQTM0MjZBMTIyMDBBM0ZEMzZBM0FDMzQ1QgorOjEwM0VEMDAwMjZBMTI0MDBBM0ZGMzZBM0FFMzRDM0ExMDUzNzI2M0I5OQorOjEwM0VFMDAwMDYyMDAwNzUxOUExMDczNzI2M0IwNjIyMDA3NTBGQTE5MQorOjEwM0VGMDAwMDkzNzI2M0IwNjI0MDA3NTA1RTgwMjAwRjhDMzUxMUU2OQorOjEwM0YwMDAwMDY4QkM3OEQzNjIwMDBCRjA1MzdCOTAzMDAxRTA2MUY3QworOjEwM0YxMDAwMDdGM0E1OEJGODhEMzYyMDAwQkZBMDM0QjkwMzAwRjM1QQorOjEwM0YyMDAwQTUwNzFGNTk4QkY4QTEwNzM3QTNBNjM0QTEwOTM3QTMwQQorOjEwM0YzMDAwQTgzNEY5QzNDNjA2QjYzNDAxRTk4QkVCRTg4NzA4OEJEMQorOjEwM0Y0MDAwRjAwNTEyMDAyNjI5MDYwRTAwMjY4QjQ0MkEyNjNBMDY4MgorOjEwM0Y1MDAwMEUwMDc1NUIyNjgzMkUwRTAwMDI4MEZDMjc3NTUwMjYwRQorOjEwM0Y2MDAwOEI0NDJDQTlGRkZGNzU0NzhCRkUzM0MwMjZGNjQ1M0NEQQorOjEwM0Y3MDAwODA3NDA2MjY4QTQ1M0EyNDFGMDNGODI2ODA3RDQ1MDk2OQorOjEwM0Y4MDAwNzUyRDhDQzI4RTA2MzgzNDhFREE4QjBFMEUwMDI2ODk4MworOjEwM0Y5MDAwMEUwRTAwOEQ3NDJDQkYxODAwRjNBNDMzQzA4RUQ4MjZFQgorOjEwM0ZBMDAwQzcwNjA0MDBCNTNGMjZDNzA2MDYwMDA2MDBDRDUwQjg3OAorOjEwM0ZCMDAwMDY4MEU5RUZFOTI2QTEwQzAwQTM5MzM3ODMwRTk5MzYxQQorOjEwM0ZDMDAwMDFFOTAwRUIyNjgwM0UxQzAwRkY3NTJGMjY4MDNFMUU3NworOjEwM0ZEMDAwMDBGRjc1MjcyNkY3MDYwQzAwNDAwMDc1MUJBMUQxMzY5RgorOjEwM0ZFMDAwMjZBMzFBMDBBMUQzMzYyNkEzMUMwMEExRDUzNjI2QTNFQQorOjEwM0ZGMDAwMUUwMEI4MEE4MEU4MzYwN0U5RTJFQUZGMDY5MDM0QkUwMAorOjEwNDAwMDAwMEEwMEM2MDZCNjM0MDFGNjA2OUQzNjgwNzUwNTgzMEU5NQorOjEwNDAxMDAwQzIzNDAxRTlCNkVBODAzRTlEMzYwQTc1MEYyNkExMEMyRQorOjEwNDAyMDAwMDAyNTA3MDAzRDA0MDA3NTAzRTg3OTAwQTFGMzM2ODZGQQorOjEwNDAzMDAwRTBFNzFFQTNFMzM2ODEyNjBCMzcwMDAzODEyNjBEMzcwOAorOjEwNDA0MDAwN0I3RjgzMEUwRDM3NDhFODFFMDAyNkExMEMwMDI1MDc1NAorOjEwNDA1MDAwMDAzRDA0MDA3NDA5MjZGNzA2MEMwMDIwMDA3NTA2QjgyMAorOjEwNDA2MDAwMDEwMEU5M0ZFOUU5NUZFQUM3MDY0MTM3MDAwMEI4N0Y5MAorOjEwNDA3MDAwMDNDRDNBQTExRDM3QTNDNDM0ODZFMDY4N0YwMzFGQTM5NAorOjEwNDA4MDAwMDYwMDMzQzA4RUQ4QTEwQjM3QTNCMjM0QTEwRDM3QTNERAorOjEwNDA5MDAwQjQzNEExRjMzNkEzQzgzNEExRUYzNkEzOUMzNEExRjEwNAorOjEwNDBBMDAwMzZBMzlFMzRDMzgwMEU5RDM2ODBCRTAwMDBFOEI0MDc2MAorOjEwNDBCMDAwQjg3QjAzQ0QzQUI4N0MwM0NEMzlDNzA2MzMzNzAyMDA0RAorOjEwNDBDMDAwQTFFNTM2RTcyRUExRTczNkU3M0VCODgyMDNDRDNBRjcwMQorOjEwNDBEMDAwMDY5QjM2MDAyMDc1MDNFOEZEMDZBMUQzMzZBM0VGMzYxNAorOjEwNDBFMDAwQTM5QzM0QTFENTM2QTNGMTM2QTM5RTM0QzNGNjA2OUQxNgorOjEwNDBGMDAwMzY4MDc0MzFCRTIyMDBFOTE3MDBGNjA2OUQzNjgwNzRDMgorOjEwNDEwMDAwMjRCRTIzMDBFOTBBMDBGNjA2OUQzNjgwNzQxN0JFMjRGQgorOjEwNDExMDAwMDA1NkU4QTgwNThDQzAzREZGRkY1RTc0MDVFOEQ3RUZBOAorOjEwNDEyMDAwQ0Q1MEU5MUZFOEU5OUZFOTAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNDEzMDAwQjg4NDAzQ0QzQUI4OEEwM0NEMzlFOUY3MDA4MDNFQTBCMAorOjEwNDE0MDAwMzYwODc1MkVBOUQwMDc3NTJDQTFCMTM2MEQwMDA0RTdFRAorOjEwNDE1MDAwMDhFNTAwMjVGRjczRTcwMEI4OEEwM0NEM0FFOEMzMDZGNworOjEwNDE2MDAwMzNDMEU3MEVFNTBBMjVDMzE3RTcwQUNENTRDNjA2QTBGQgorOjEwNDE3MDAwMzYwMEU5NjhFOUJFMDQwMEU5M0ZFOTgzMjY5QjM2QkZDMworOjEwNDE4MDAwQzYwNjcxMzcwM0I4ODYwM0NEM0FCODg4MDNDRDNBQjg2RQorOjEwNDE5MDAwODMwM0NEM0FCODg3MDNDRDM5ODEwRUMyMzQwMDIwRTlCQworOjEwNDFBMDAwOTIwMEU4NDkwNkI4ODcwM0NEMzlCQkZGN0ZDRDUzQjhFRAorOjEwNDFCMDAwODQwM0NEM0FCODg4MDNDRDNBQjg4QjAzQ0QzQUI4ODM5RgorOjEwNDFDMDAwMDNDRDNBQjg4NjAzQ0QzQUI4ODUwM0NEM0FDM0U1MDBBRQorOjEwNDFEMDAwMjVGRjUzRTcwMDgzMEVDMjM0NDA4MzI2QzIzNEVGRTg0NAorOjEwNDFFMDAwMEMwNkJCRkY3RkNENTNCODhBMDNDRDNBQjg4NTAzQ0QwQgorOjEwNDFGMDAwM0FCODg2MDNDRDNBQjg4MzAzQ0QzQUI4ODcwM0NEM0FBRgorOjEwNDIwMDAwQjg4QjAzQ0QzQUI4ODQwM0NEM0FCODg5MDNDRDNBQzMwRAorOjEwNDIxMDAwODMwRUMyMzQ1MEU4MTgwNEU4RDMwNUY2MDY2RjM3MDE2MAorOjEwNDIyMDAwNzUxMkI4ODkwM0NEMzk4MzNFMEYzNzAwNzUwNkM3MDY2RQorOjEwNDIzMDAwMEYzNzA0MDBBMTlEMzY4MEZDMDg3NDA1Qjg4NDAzQ0RCNworOjEwNDI0MDAwMzlFNTAyMEQwMTA4MjVFRkZGRTcwMkExOUQzNjg2RTA2MgorOjEwNDI1MDAwMzJFNDhCRjBEMUVFMzNDMDBEMjAwMDA5MDZBRDM2QTE1QgorOjEwNDI2MDAwQUQzNkU3MDRFOTUzRThFOTVBRTgzM0MwQTAxQjM3RDE3QgorOjEwNDI3MDAwRTAzQTA2QTAzNjc1MDNFOUJBRkZFOTYwRThDNzA2NDFFRgorOjEwNDI4MDAwMzcwMDAwRThDMUUxRTg2QTA2MzNDMDBENDEwMEU3NTY5NworOjEwNDI5MDAwQTFCMTM2MEQwMDEwRTcwOEU1MDIyNUY5RkYwRDAzMDA3NgorOjEwNDJBMDAwRTcwMkExQjMzNkU3MEFBMUFGMzZFNzA2QTFBRDM2RTdDQworOjEwNDJCMDAwMDRFODdDMDNFODlGMDNDNzA2MUQzNzAwQzhDNzA2MEI0OAorOjEwNDJDMDAwMzcwMDAzQzcwNjBEMzc3QjdGMzNDMEEzOTkzNkEzOUIwNgorOjEwNDJEMDAwMzZBMzlEMzZBMzlGMzZBMzRDMzdBM0YzMzZBM0VGMzYwMAorOjEwNDJFMDAwQTNGMTM2RTg4MkZEQzYwNjlGMzYwMkU5RUZFN0U1MDI1NAorOjEwNDJGMDAwMEQwMTg4MjVFRkZGMEQwMDQwMEQwMDA0RTcwMkU4RjJGNAorOjEwNDMwMDAwMDVFNTBBMEQ0MDAwRTcwQTMzQzBBMzgxMzdBMzg1MzdDRQorOjEwNDMxMDAwQTM4MzM3QTM4NzM3QTM4OTM3RTUwMDBEMDA4NEU3MDAxRgorOjEwNDMyMDAwQjg4QzAzQ0QzOUI4ODAwMENEMzVDNzA2QUEwMkZGRkY4RgorOjEwNDMzMDAwRTUwMDI1RkY3QkU3MDA4MTBFOUEzNzgwMDBCODdFMDNGOQorOjEwNDM0MDAwQ0QzOTMzQzBFNzBFQkUwODAwOEUwNjM4MzRFOEE3RUQzRAorOjEwNDM1MDAwODMyNkVGMzRERkZGMDY4MTM3Q0Q1MDgzMEVFRjM0MjAwNAorOjEwNDM2MDAwQzNGNzA2OUEzNzgwMDA3NDNEQTlEMDA3NzQxMEE5MDBERQorOjEwNDM3MDAwMDQ3NDEyMzNDMEU3MEVGRjA2ODczN0U5RDJGRkZGMDY0OQorOjEwNDM4MDAwODUzN0U5Q0JGRkZGMDY4MzM3RTlDNEZGODMyNjlBMzdEOQorOjEwNDM5MDAwN0ZBMTg5MzcwMzA2ODczNzNEMDUwMDdGMDFDM0JCRkYzNworOjEwNDNBMDAwN0ZDRDUzRTkwMDAwRTUwMjI1RkZGQjI1RUZGRjBEMDE1RQorOjEwNDNCMDAwMDBFNzAyQTE4MzM3M0IwNjQ2Mzc3RjJBQTE4NTM3M0JCQQorOjEwNDNDMDAwMDY0ODM3N0MyMUExODkzNzAzMDY4NzM3M0QwNTAwN0ZFMgorOjEwNDNEMDAwMTVDNjA2OUYzNjA0RTUwMjI1RkZGNzBEMDEwMDI1RUZGRgorOjEwNDNFMDAwRkZFNzAyRTlGN0U2QkUwMTAwRjcwNjlCMzYwMzAwNzQxQgorOjEwNDNGMDAwMEE4MzI2OUIzNkZDODMwRUMyMzQwNEU5RDBFNkI4N0JFMAorOjEwNDQwMDAwMDNDRDM5RTUwMjBEMDE2MDI1RUZGRkU3MDJDNzA2RjE5NAorOjEwNDQxMDAwMzQyMDAzQjg4RTAzQ0QzOUMzODEyNkMyMzQ3RkZGODA5OAorOjEwNDQyMDAwMEU2RjM3MDFGNzA2OUIzNjAzMDA3NEQyQjg3QjAzQ0RCRAorOjEwNDQzMDAwM0FCODdEMDNDRDM5ODMyNjlCMzZFRjMzQzBCMDhBQTJDQworOjEwNDQ0MDAwOUYzNkEyOUQzNkM3MDY0QzM3MDEwMEM3MDYwRjM3MDRCQQorOjEwNDQ1MDAwMDBGNzA2OUIzNjQwMDA3NTA2QzcwNjBGMzcwMzAwQjgwNQorOjEwNDQ2MDAwOEQwM0NEMzlFODAwRDVFNTAyMEQwMTQwMjVFRkZGOEIyNgorOjEwNDQ3MDAwRDhCODdDMDNDRDM5QzcwNjMzMzcwMjAwOEJDMzBEMDA5MworOjEwNDQ4MDAwMjAyNUY5RkYwQjA2RTgzQUU3MDJDM0ZGMEVGMTM0NzU2OQorOjEwNDQ5MDAwMDFDM0U1NEVBOTAxMDA3NTEyRTUwMEE5MDAwNDc1MDVFOAorOjEwNDRBMDAwMEQwMDA0RTcwMEI4OEUwM0NEMzlDM0U1MDBBOTAwMDQ3MAorOjEwNDRCMDAwNzRGMzI1RkZGQkU3MDBFOUVCRkZDNjA2QTAzNjA0ODM5MworOjEwNDRDMDAwMjY5QjM2RkM4MTBFOUIzNjgwMDBFOTEwRTZCODhFMDNGMQorOjEwNDREMDAwQ0QzQUNENTQ4MTBFQUYzNjAwMThBMUFGMzZFNzA2QjhGRAorOjEwNDRFMDAwN0IwM0NEMzlBMUQzMzZBMzhGMzdBMUQ1MzZBMzkxMzcxRQorOjEwNDRGMDAwQzcwNjhCMzcwMjAwQzcwNjhEMzcwMjAwODMwRTk5MzYzOAorOjEwNDUwMDAwNDBFOUQ5RTU4MDNFOUYzNjA2NzUxNUE5RDAwNzc1RUNDMAorOjEwNDUxMDAwMjUwMDE4NzUwRUZGMEU4QjM3NzVFMUM2MDY5RjM2MDgwRAorOjEwNDUyMDAwRTlCQUU1RkYwRThEMzc3NUQzQkUwODAwRTk5RkU1QjhGRgorOjEwNDUzMDAwN0IwM0NEMzlGNzA2OUIzNjAwMjA3NDA4QzYwNjlGMzZFQworOjEwNDU0MDAwMEFFOTBEMDBGNzA2OUIzNjAwNDA3NDBCQjg4QjAzQ0RDQgorOjEwNDU1MDAwMzk4MTBFOTkzNjgwMDBFOTgzRTVCODdCMDNDRDM5QzdGMAorOjEwNDU2MDAwMDY4QjM3MDQwMEM3MDY4RDM3MDQwMDgxMEU5OTM2MDA4QworOjEwNDU3MDAwMDJFOTY5RTVGNjA2OUQzNjgwNzUxQkE5RDAwNzc1RUI0MworOjEwNDU4MDAwQTkwMDE4NzUwQ0ZGMEU4RDM3NzVFMEU4MTdGQkU5NEM5NAorOjEwNDU5MDAwRTVCODgyMDNDRDM5QzNGRjBFOEIzNzc1Q0VCRTA5MDA1NworOjEwNDVBMDAwRTkyQkU1QzcwNjNEMzcwMDAwQzcwNjlCMzYwMDAwRTg0QgorOjEwNDVCMDAwM0MwMjgxMjZBRjM2RkZFN0ExQUYzNkU3MDY4MTI2OUI5NgorOjEwNDVDMDAwMzZGRjdGRTUwMjBEMDEwMDI1RUZGRjI1RkZERkU3MDI0MworOjEwNDVEMDAwQkJGRjdGQ0Q1MzMzQzBBMzlEMzZBMzlGMzZFODUwMDA2OQorOjEwNDVFMDAwRTg3MzAwQjg4MTAzQ0QzOUMzRjcwNjlCMzYwMzAwNzQyNgorOjEwNDVGMDAwMERDNjA2OUYzNjAyQzYwNkEwMzYwMEU5REZFNDgzMEUyQworOjEwNDYwMDAwOUIzNjEwQzcwNjk5MzYwMDAwRThFNzAyRTU1NjBEMDIxMgorOjEwNDYxMDAwMDBFNzU2QzcwNkE4MDIwMDAwOEIzNjNEMzdFODQ0MDI4MworOjEwNDYyMDAwQzYwNkEwMzYwRUU5QjVFNDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwNDYzMDAwMDZCODhBMDNDRDNBQjg4NTAzQ0QzQUI4ODYwM0NEM0E5OQorOjEwNDY0MDAwQjg4MzAzQ0QzQUI4ODcwM0NEM0FCODhCMDNDRDNBQjhENworOjEwNDY1MDAwODgwM0NEM0EwN0MzMDZCODg4MDNDRDNBQjg3QjAzQ0RBQgorOjEwNDY2MDAwM0FCODgyMDNDRDNBQjg3RjAzQ0QzQUI4N0MwM0NEM0E0RAorOjEwNDY3MDAwQjg3RTAzQ0QzQUI4ODAwM0NEM0FCODgxMDNDRDNBQjhCRAorOjEwNDY4MDAwODQwM0NEM0FCODg5MDNDRDNBQjg3RDAzQ0QzQUI4OERDRAorOjEwNDY5MDAwMDNDRDNBQzcwNjQxMzcwMDAwMDdDMzA2OEUwNjM4MzRGQgorOjEwNDZBMDAwMUY4QjBFMEUwMDI2ODkwRTBFMDBCRTE4MDBCRjE4MDBDQworOjEwNDZCMDAwRjNBNDA2MUUwN0NEMzQwNzMzQzA4RUQ4QzMyNkY2MDZGMgorOjEwNDZDMDAwMjAwMDgwNzQ0NDMzQzAyNkEwMjYwMDI0MUY4QkYwMjZDRgorOjEwNDZEMDAwOEI1QzI4ODkxRTZBMzcwNjhFMDYzODM0MUZDMEUzMDRCNworOjEwNDZFMDAwMjY4ODVDMjg4QkM2QjkwNjAwQkUyMDAwQkYxQTAwRjNERQorOjEwNDZGMDAwQTQ4QkM4ODNDNzA2RjNBNDI2ODEyNjI2MDAxRjgwMjYyNAorOjEwNDcwMDAwODEzNjI2MDAwMDgwRTlBOUZGMjY4QjFFMjgwMDg5MUUxRAorOjEwNDcxMDAwNkEzNzA2OEUwNjM4MzQxRkMwRTMwNDI2ODgxRTI4MDAzOAorOjEwNDcyMDAwQjkwNjAwQkUyMDAwQkYxQTAwRjNBNEU5ODRGRjg2QzRDNgorOjEwNDczMDAwQTM2ODM3RTg4N0ZGRjcwNjZBMzcwRjAwNzQxMDgwM0VEQQorOjEwNDc0MDAwOUUzNjAwNzUwOUJFMDAwMEU4QUNFOUNENTBDM0MzNTBFOQorOjEwNDc1MDAwNTYwNjMzQzAyNkY2MDYyMDAwODA3NDA2MjZBMDI2MDBFMgorOjEwNDc2MDAwMjQxRjhCRjAyNjhCNUMyNjg2RkI4M0VCMDQ3NDRGODMxRgorOjEwNDc3MDAwQzYyQThDQzA4RUQ4QjkwNzAwMzNDMDhFQzBCRjcyMzcyRQorOjEwNDc4MDAwRjNBQjMzQzk4QTBDODBGOTAwNzUwM0U5MzAwMDNCRDlEQgorOjEwNDc5MDAwNzMwM0U5MjkwMDJCRDk4QTQ0MDEyNTNGMDA3NDE5M0Q5MAorOjEwNDdBMDAwMEIwMDdEMTREMUUwOEJGODJFOEJCRDVDNDk4RDc0MDIxQgorOjEwNDdCMDAwODNFOTAyRjNBNEU5MDIwMDAzRjEyM0RCNzVDNDMzQzBFQgorOjEwNDdDMDAwOEVEODA3NUU1OEMzMzNDMDI2RjYwNjIwMDA4MDc0MDZENAorOjEwNDdEMDAwMjZBMDI2MDAyNDFGQzNFNTBBMjVDM0JGRTcwQUI4ODYyMgorOjEwNDdFMDAwMDNDRDM5Qjg4MzAzQ0QzOTgxMjY5QjM2N0NERkI4ODU2QworOjEwNDdGMDAwMDNDRDNBRTUwMjI1RkZGMzBEMDEwMDI1RUZGRkU3MDJBNworOjEwNDgwMDAwRTUwMDI1RkY1M0U3MDBBMUU3MzYyNUZGRkVBM0U3MzZDNQorOjEwNDgxMDAwRTczRTgzMjY5OTM2Q0Y4MTBFQUYzNjAwMTBBMUFGMzYyMgorOjEwNDgyMDAwRTcwNkMzRTUwMjBEMDEwQzI1RUZGRkU3MDJBMUU3MzYxRAorOjEwNDgzMDAwMEQwMDAxRTczRUEzRTczNjgxMEU5QjM2MDAyMDgzMEU3NAorOjEwNDg0MDAwOTkzNjIwODEyNjlCMzY3Q0JGODEwRUFGMzYwMDEwQTFBMQorOjEwNDg1MDAwQUYzNkU3MDZCODg2MDNDRDM5Qjg4NTAzQ0QzOUI4ODNCRQorOjEwNDg2MDAwMDNDRDNBQzMwQkY2NzU0OTA2OEUwNjMyMzQ4MDNFRTAxRQorOjEwNDg3MDAwMzQwMTc1MUIyNjg5MzYwNjAwOEUwNjMyMzQyNkY3MDY2QgorOjEwNDg4MDAwMEEwMDAwMjA3NDA3MjY4MTBFMDgwMDAwMjAwN0MzODA1QworOjEwNDg5MDAwM0VFMzM0MDE3NTE5MjY4OTM2MDYwMDhFMDYzMjM0MjYyOQorOjEwNDhBMDAwRjcwNjBBMDAwMDEwNzQwNzI2ODEwRTA4MDAwMDEwMDdBMgorOjEwNDhCMDAwQzNFOUI0RkY1MDUxNTczM0MwQjkwNjAwOEVDMEJGRDExMQorOjEwNDhDMDAwMzZGM0FFNUY3NDBDMjZGNjA2MDAwMEMwNzUwNEY4NTk4NgorOjEwNDhEMDAwNThDM0Y5RTlGOUZGOEIwNTBCNDUwMjBCNDUwNEMzNTI5OAorOjEwNDhFMDAwNTBFNTA2MjUxRTAwM0QxRTAwNzVGNkI4MDE4MEU3NUEwQQorOjEwNDhGMDAwNTg1QUMzRThFOUZGNTBFNTAyMjVGRjdGMEQwMTAwMjU2NgorOjEwNDkwMDAwRUZGRkU3MDIwRDAwODBFNzAyQTFBRDM2RTcwNEExQUY5QgorOjEwNDkxMDAwMzZFNzA2NThDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNDkyMDAwMkUyQkNFNDExMDQyN0I0MTMwNDFBMjQxQUY0NTQ0Mjk1QworOjEwNDkzMDAwQzcyQUM3MkE2MDM5RjQzQTVDM0MwOTNEQjEzRDM0M0Y4RgorOjEwNDk0MDAwQzcyQTNDM0ZDNzJBQzQzRjE2NDAxNjQwRUQ0MEZBNDBGNAorOjEwNDk1MDAwMDc0MUM3MkFDNzJBQzcyQUM3MkFENjUyMDAwMDAxMzdFQgorOjEwNDk2MDAwRTkzNkYzMzZFRjM2MUQzNzBEMzcwQjM3OUMzNzAzMzdGMworOjEwNDk3MDAwRkIzNjYyMkQ0MDA2RDEyREY0MDFCQTQ0NDAwNjhDNDMyQgorOjEwNDk4MDAwNjQwMEU4MkNDODAwRDgyQjA1MDBFOTQ1NTAwMDk3NDU4NQorOjEwNDk5MDAwRkEwMEFFMkQwNDAxNkE0MjAyMDBGNjJDQkMwMjkzMkRFRgorOjEwNDlBMDAwREMwNTFEMkQ2NDAwQTEyRDE0MDBENzNBMDgwNzgxMkRDOAorOjEwNDlCMDAwNjQwMEIzM0UwMjAwMzA0MzY0MDBDNTJDRjQwMThCNDQxNAorOjEwNDlDMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNDlEMDAwODAzRUZEMzQwMjc0MENFODIwMDVDNzA2QTEzNjAwMDBCNQorOjEwNDlFMDAwRTk5QUY4RkYwNkMwMzNFODEwMDU4QjM2M0QzN0U4NzNDNworOjEwNDlGMDAwRkVDM0NEMzRFOUU4MDVDNzA2QTMzNjAwMDBDNzA2NDE2QgorOjEwNEEwMDAwMzcwMDAwRThFREZFMzNDMDBENDEwMEU3NTZBMUIxMzY5NgorOjEwNEExMDAwMEQwMDEwRTcwOEExQjMzNkU3MEFBMUFGMzZFNzA2QTFGQgorOjEwNEEyMDAwQUQzNkU3MDRFODJCMDlDNzA2MUQzNzAwQzhDNzA2MEJEQgorOjEwNEEzMDAwMzcwMDAzQzcwNjBEMzc3QjdGMzNDMEEzOUIzNkEzOUQ4QQorOjEwNEE0MDAwMzZDNzA2NEMzNzAxMDBDNjA2OUUzNkZGQzcwNjA1MzczNworOjEwNEE1MDAwMDAwMEM3MDYwNzM3MDAwMEM3MDYwOTM3MDAwMEEzRjNBOAorOjEwNEE2MDAwMzZBM0VGMzZBM0YxMzZFOEZFRjVFNTAyMjVGOUZGMEQ5MgorOjEwNEE3MDAwMDMwMDBEMDA4ODI1RUZGRjBEMDA0MDBEMDAwNEU3MDI0NAorOjEwNEE4MDAwQjg4RjAzQ0QzOUI4ODAwMENEMzVDNzA2QUEwMkZGRkYyNQorOjEwNEE5MDAwQTFBOTM2QTNBNzM2MEQwMEE0MEQwMDA4RTcwMEEzQTkxRAorOjEwNEFBMDAwMzZDNzA2QTMzNjAxMDBDNzA2QTUzNjBDMDA4MzNFQTUwRgorOjEwNEFCMDAwMzYwMDc1MDlDNzA2M0QzNzA1MDBFOTEzRkZGRjBFQTU0RgorOjEwNEFDMDAwMzZCRTExMDBFODIyMDVCODkwMDNDRDM5QzM4MzNFQTM1QQorOjEwNEFEMDAwMzYwMTc0RDlDM0I4OTAwM0NEM0EyNkEwMkIwMDI2OEI5QgorOjEwNEFFMDAwMUUyQzAwQ0QzNDgzM0VBMzM2MDE3NDAzRTlGMDA0M0M1MAorOjEwNEFGMDAwMEY3NTFFODFGQjAwMDI3NTE4MjZBMTIwMDBBMzA1Mzc0MworOjEwNEIwMDAwMjZBMTIyMDBBMzA3MzcyNkExMjQwMEEzMDkzN0U5MDkxQgorOjEwNEIxMDAwMDBDNzA2M0QzNzAxMDBFOUI2RkVDNzA2QTMzNjAyMDAwRQorOjEwNEIyMDAwQzYwNjlFMzZGRkU4Q0JGREU4MUNEOTMzQzBBMzg1MzcwNworOjEwNEIzMDAwQTM4MzM3QTM4NzM3QTM4OTM3Qjg5MTAzQ0QzOUI4ODBDQQorOjEwNEI0MDAwMDBDRDM1QzcwNkFBMDJGRkZGRTUwMDI1RkY1M0U3MDBBOQorOjEwNEI1MDAwODEwRTlBMzc4MDAwQjg5MjAzQ0QzOTMzQzBFNzBFQkU3QworOjEwNEI2MDAwMDgwMDhFMDYzODM0RTg4RUU1MjZDNzA2MDQwMDdENEIyMworOjEwNEI3MDAwODMyNkVGMzRERkNENTA4MzBFRUYzNDIwQzNGNzA2OUEzRgorOjEwNEI4MDAwMzc4MDAwNzQzMkE5RDAwNzc0MENBOTAwMDQ3NDBFMzM2NgorOjEwNEI5MDAwQzBFNzBFRTlEQUZGRkYwNjg1MzdFOUQzRkZGRjA2ODM5QQorOjEwNEJBMDAwMzdFOUNDRkZDNzA2M0QzNzAxMDBFOTM2RkU4MzI2OUE3OAorOjEwNEJCMDAwMzc3RkJCRkY3RkNENTNFNTAwMEQwMEFDRTcwMEU1MDI3QQorOjEwNEJDMDAwMjVGRkZCMjVFRkZGMjVGRkY3MEQwMTAwRTcwMkExODM3RAorOjEwNEJEMDAwMzczQjA2NDYzNzdGQ0RBMTg1MzczQjA2NDgzNzdDQzQzNworOjEwNEJFMDAwQzcwNkEzMzYwMzAwQkUxMzAwRThGRDAzQjg5MzAzQ0Q0OAorOjEwNEJGMDAwMzlCODk0MDNDRDM5Qjg5NjAzQ0QzOUI4OTUwM0NEMzk3QQorOjEwNEMwMDAwQkUwNjAwRThFMzAzRTlENjAzODMzRUEzMzYwMzc0MDEzRQorOjEwNEMxMDAwQzNCRTEzMDBFOEQyMDNCODk0MDNDRDM5QzNCODk0MDNEQworOjEwNEMyMDAwQ0QzQTI2QTAyQjAwMjY4QjFFMkMwMENEMzQ4MzNFQTMyQworOjEwNEMzMDAwMzYwMzc0MDNFOUE4MDMzQzBENzUzRTgzRkIwMDc1MzkwOAorOjEwNEM0MDAwRTUwMjBEMDAyMEU3MDJCODkzMDNDRDNBQzcwNkEzMzY2QworOjEwNEM1MDAwMDQwMEJFMDAwMEU4MENGQ0M2MDY5RDM2ODBDNjA2OUUxOQorOjEwNEM2MDAwMzYwMEM3MDYzMzM3MDIwMEI4OUEwM0NEMzlFOEZDMDA5NgorOjEwNEM3MDAwQzcwNjRDMzcwMDAwRTk2NjAzQzcwNjNEMzcwODAwRTk2MAorOjEwNEM4MDAwNjFGRDgzM0VBMzM2MDM3NTA5QzcwNjNEMzcwNTAwRTk3QworOjEwNEM5MDAwNTFGREU5NEEwMzgzM0VBMzM2MDQ3NDEyODMzRUEzMzZEMgorOjEwNENBMDAwMDU3NDBCQ0QzNEM3MDYzRDM3MDcwMEU5MzVGREM3MDY0RgorOjEwNENCMDAwQTMzNjA2MDBDNjA2OUUzNkZGQjg5QTAzQ0QzQUI4OTlDOQorOjEwNENDMDAwMDNDRDNBQjg5NjAzQ0QzQUI4OTcwM0NEMzlCODk4MDNENworOjEwNENEMDAwQ0QzOUI4OUIwM0NEMzlFOTE4RkRDRDM0ODMzRUEzMzZEOQorOjEwNENFMDAwMDQ3NzE4ODMzRUEzMzYwMzc1MDhGNzA2OUIzNjAwMDE0OAorOjEwNENGMDAwNzUwOUM3MDYzRDM3MDEwMEU5RThGQ0U5RTEwMkNEMzQ1QQorOjEwNEQwMDAwODMzRUEzMzYwMjc3MDlDNzA2M0QzNzAxMDBFOUQzRkM4RAorOjEwNEQxMDAwODMzRUEzMzYwNDc3MDVCODk2MDNDRDM5RTlDMDAyODNGNAorOjEwNEQyMDAwM0VBMzM2MDM3NTEwMjZBMTBDMDAyNTA3MDA1MDNEMDQ1NAorOjEwNEQzMDAwMDA3NTAzRTgzNjAwQTFGMzM2ODZFMEU3MUVBM0UzMzZFQworOjEwNEQ0MDAwODEyNjBCMzcwMDAzODEyNjBEMzc3QjdGODMwRTBEMzdCRAorOjEwNEQ1MDAwNDhFODE0RjM1ODNEMDQwMDc0MDkyNkY3MDYwQzAwMjBCNworOjEwNEQ2MDAwMDA3NTA2QjgwMTAwRTk3QTAyRTk4NkZDQTFFNTM2RTc5QworOjEwNEQ3MDAwMkVBMUU3MzZFNzNFQTFEMzM2QTM5QzM0QTFENTM2QTNCNgorOjEwNEQ4MDAwOUUzNEMzMjY4MDNFMUMwMEZGNzUyRjI2ODAzRTFFMDBFOQorOjEwNEQ5MDAwRkY3NTI3MjZGNzA2MEMwMDQwMDA3NTFCQTFEMTM2MjZBQgorOjEwNERBMDAwQTMxQTAwQTFEMzM2MjZBMzFDMDBBMUQ1MzYyNkEzMUUyNAorOjEwNERCMDAwMDBCODBBODBFOTJDMDJFOTM4RkNGRjA2OTAzNEJFMEFFQworOjEwNERDMDAwMDBDNjA2QjYzNDAxRjYwNjlEMzY4MDc1MDU4MzBFQzIxMAorOjEwNEREMDAwMzQwMUNEMzRFOTBDRkM4MzNFQTMzNjAzNzUwOUM3MDZDNAorOjEwNERFMDAwM0QzNzA1MDBFOUZDRkJFNTAyMEQwMzAwMEQwMDg4MEREMQorOjEwNERGMDAwMDA0MDBEMDAwNEU3MDJDNzA2QTMzNjA1MDBDNjA2OUU2NAorOjEwNEUwMDAwMzZGRkJFMDIwMEU4RTEwMUI4ODkwM0NEM0FCODlBMDM0MworOjEwNEUxMDAwQ0QzQUI4OTkwM0NEMzlCODk3MDNDRDM5Qjg5ODAzQ0RCOQorOjEwNEUyMDAwMzlFOUJCMDE4MzNFQTMzNjAzNzQwQTgzM0VBMzM2MDRFQgorOjEwNEUzMDAwNzQwM0U5QUEwMUJFMDYwMEU4QUUwMUI4OTUwM0NEMzlCNgorOjEwNEU0MDAwRTk5QzAxODMzRUEzMzYwNTc0MDNFOTkyMDFCRTAyMDA4QQorOjEwNEU1MDAwRTg5NjAxQjg5OTAzQ0QzOUU5ODQwMUM3MDYwRjM3MDVGMworOjEwNEU2MDAwMDBFOTdCMDFFNTAyMjVGRkRGRTcwMkM3MDZBMzM2MDc1RAorOjEwNEU3MDAwMDBDNzA2MEYzNzA1MDBFOTY1MDFFOEQ1MDRDNjA2OURBMQorOjEwNEU4MDAwMzYwMEM3MDY5QjM2MDAwMEM3MDYwRjM3MDUwMEM3MDY2OQorOjEwNEU5MDAwQTgwMjAwMDBDNzA2NEMzNzAxMDBFNTAyMjVGOUZGMEQwNgorOjEwNEVBMDAwMDMwMDBEMDA4ODI1RUZGRjBEMDA0MDBEMDAwNEU3MDIxMAorOjEwNEVCMDAwRTk2N0ZDQjg5QTAzQ0QzOUY3MDZGNDMzMDAxMDc1MDk5OQorOjEwNEVDMDAwQzcwNjMzMzcwMjAwRTkxNjAxRkYwRTMzMzc3NDAzRTlEMgorOjEwNEVEMDAwMEQwMUZGMDY4RTM0ODMwRUMyMzQwOEM3MDYzRDM3MDMyQQorOjEwNEVFMDAwMDBFOUZGRkFDMzUyNTBCQUUwMDBCODAwMTBFRjU4NUE3OAorOjEwNEVGMDAwQzNDNzA2M0QzNzAwMDBFOUU5RkFGQUU4NTQwNEI4ODA3MAorOjEwNEYwMDAwMDM4RUMwMjZDNzA2MDQwMEQ4MkJCODdGMDM4RUMwMjZBOAorOjEwNEYxMDAwQzcwNjA0MDBFODJDMzNDMDhFQzBBMUE3MzZBM0E5MzY2QgorOjEwNEYyMDAwQTFBOTM2RTcwMEExQUIzNkU3MDJDNzA2MDUzNzAwMDBBNgorOjEwNEYzMDAwQzcwNjA3MzcwMDAwQzcwNjA5MzcwMDAwQzYwNjlEMzZCQQorOjEwNEY0MDAwMDBDNjA2OUUzNkZGQzcwNjlCMzYwMDAwQzcwNkEzMzY3RQorOjEwNEY1MDAwMDAwMEM3MDYwRjM3MDAwMEM3MDZBODAyMDAwMEM3MDZGQQorOjEwNEY2MDAwNEMzNzAxMDA4MTI2QUYzNkZGRTdBMUFGMzZFNzA2QkIxRAorOjEwNEY3MDAwRkY3RkNENTNFODdDRjlFNTU2MEQwMjAwRTc1NkZCQzNGMQorOjEwNEY4MDAwOEQzRUMwNTM4RDM2RjAzOEI5MEUwMDhCMUUzMDM0ODlGQgorOjEwNEY5MDAwNUMwMjJFOEI0NTAyODk0NDA2MkU4QjA1ODk0NDA0ODNDRQorOjEwNEZBMDAwQzcwNDgzQzYxMEUyRThCODgwMDM4RUMwMjZDNzA2MDQ5MworOjEwNEZCMDAwMDBFMjUxQjg3RjAzOEVDMDI2QzcwNjA0MDBCMjUyMzMwOAorOjEwNEZDMDAwQzA4RUMwQzcwNkExMzYwMTAwQzcwNjBGMzcwNTAwQzM1MworOjEwNEZEMDAwMzNGRjhFMDZBNjAyOEIzNkE0MDIyRUZGQTRBMDUzRTg1MAorOjEwNEZFMDAwOENEQkMzRTg0OEY3RTlGNkZGOEUwNjM4MzRFODA3RTFDMgorOjEwNEZGMDAwMjZDNzA2MDQwMERGNEZDRDUwQzMyNkM3MDYwQTAwMDBBRgorOjEwNTAwMDAwMDAyNkZGMjYwNDAwQ0QzNEU5RDRGRkExRDEzNjI2Mzk4RAorOjEwNTAxMDAwMDYxQTAwNzUyMkExRDMzNjI2MzkwNjFDMDA3NTE4QTE4MAorOjEwNTAyMDAwRDUzNjI2MzkwNjFFMDA3NTBFMjZGNzA2MEMwMDQwMDAwMAorOjEwNTAzMDAwNzQwNTgzMEU2NjM3NDA4MTBFQUYzNjAwMTBBMUFGMzY3RgorOjEwNTA0MDAwRTcwNjgzM0VBMzM2MDI3NTA1Q0QzNEU5NTZGQjgzM0U2MQorOjEwNTA1MDAwQTMzNjAwNzRCMTgzM0VBMzM2MDU3N0FBMjZGNjA2MEE2NgorOjEwNTA2MDAwMDBGRjc1QTJFOEZEREQ1MEY2MDY5MzM2MjA3NTAzRTlEMgorOjEwNTA3MDAwOEMwMDI2QTEwQzAwMjUwNzAwM0QwNzAwNzUwM0U5NzY4QQorOjEwNTA4MDAwMDAzRDA1MDA3NTAzRTk2RTAwRjcwNkU2MzQxODgwNzVFQgorOjEwNTA5MDAwMDNFOTZBMDBGNzA2RTYzNDAwODA3NDM1MjY4MDNFMjk2RAorOjEwNTBBMDAwMDAwMjc1MkQ1MTU2NTc4RDM2M0UzNDhEM0UyMDAwQjk4NQorOjEwNTBCMDAwMDYwMEYzQTY1RjVFNTk3NTQ1MjZBMTIwMDBBMzNFMzQ4NQorOjEwNTBDMDAwMjZBMTIyMDBBMzQwMzQyNkExMjQwMEEzNDIzNEU5MjZDRAorOjEwNTBEMDAwMDBGNzA2RTYzNDA4MDA3NDBCMjY4MDNFMTkwMDAwNzRDMQorOjEwNTBFMDAwMDNFOTEzMDBGNzA2RTYzNDEwMDA3NDEyMjZBMDI4MDAyNgorOjEwNTBGMDAwQzBFODA0MjJDMDc0MDcyNkM3MDYwNDAwRkZGRjU4MjMzNworOjEwNTEwMDAwQzA3NDAzRTlEREZFODEyNjlCMzZGRkZFMjZBMTIwMDA0OAorOjEwNTExMDAwM0IwNkQxMzY3NTFBMjZBMTIyMDAzQjA2RDMzNjc1MTAwMAorOjEwNTEyMDAwMjZBMTI0MDAzQjA2RDUzNjc1MDY4MTBFOUIzNjAwMDE2QworOjEwNTEzMDAwMjZBMTIwMDAyNTdGRkZBM0I4MzQyNkExMjIwMEEzQkExMAorOjEwNTE0MDAwMzQyNkExMjQwMEEzQkMzNDhCQzY4NkM0QTNDMDM0RDFBQQorOjEwNTE1MDAwRTY4MEZDMDk3NDAzRThGNkY1QTEwNTM3MEIwNjA3Mzc2RQorOjEwNTE2MDAwMEIwNjA5Mzc3NDNFMjZBMTIwMDAzQjA2MDUzNzc1MTc0QworOjEwNTE3MDAwMjZBMTIyMDAzQjA2MDczNzc1MEQyNkExMjQwMDNCMDYxOQorOjEwNTE4MDAwMDkzNzc1MDNFOTFEMDAyNkEwMjgwMDI0MEYzQzAzNzQ4RAorOjEwNTE5MDAwMUIzQzAwNzUwRjgzM0VBMzM2MDQ3NDEwRjcwNjlCMzY0NAorOjEwNTFBMDAwMDAwMTc0MDgyRUZGOTRGODUzRTkzM0ZFQ0QzNEM3MDY4RQorOjEwNTFCMDAwM0QzNzAxMDBFOTJDRjg4MzNFQTMzNjA1NzQxMDgzM0U4OQorOjEwNTFDMDAwQTMzNjAxN0UwOTgzRUUxNjJFRkY5NDI0NTRDM0NEMzRGQQorOjEwNTFEMDAwQzMyNkExMEMwMDNERkY3Rjc0MDUyNkZGMjYwNDAwRTlDRAorOjEwNTFFMDAwRkRGREExRjQzM0E5MDA4ODc0MEJBOTAwMTA3NTA5OEI4QgorOjEwNTFGMDAwMUU0MzM3RkZFM0U5OTcwMEM3MDYzNTM3MDUwMEM3MDZBQQorOjEwNTIwMDAwNDMzNzI4NTJGNzA2RjQzMzAwMDg3NDA2QzcwNjQzMzdCRAorOjEwNTIxMDAwMUE1MkI4ODAwM0NEMzlFOUM1RkRBOTAwMDg3NEQ5RkYzOQorOjEwNTIyMDAwMEUzNTM3NzVFREU5MzAwMEE5MDAwODc1Q0JGRjBFMzU1NgorOjEwNTIzMDAwMzc3NURGODEwRUMyMzRDMDAwRjYwNjlEMzY4MDc0MEZDQworOjEwNTI0MDAwODEwRTlCMzYwMDgwQzcwNjBGMzcwMjAwRTk5MEZEQzcyQworOjEwNTI1MDAwMDYzRDM3MDIwMEU5OEJGNzgwMjY5RTM2RkY3NTMwRjY1MworOjEwNTI2MDAwMDY5RDM2ODA3NDIwRkYwNjk0MzQ4MzBFNjYzNzIwOEVBOAorOjEwNTI3MDAwMDYzMDM0MjZGNzA2MEEwMDAwMDE3NDA3MjY4MTBFMDg1RQorOjEwNTI4MDAwMDAwMDAxRTkwOTAwQzcwNjNEMzcwNDAwRTk1NEY3ODEzMQorOjEwNTI5MDAwMEVBRjM2MDAwOEExQUYzNkU3MDZFNTBBQTkwMDgwNzQxNAorOjEwNTJBMDAwMEU4MTI2QUYzNkZGRjdBMUFGMzZFNzA2RTk0OUZGRTlFMQorOjEwNTJCMDAwMkRGREM3MDY0MTM3MDAwMEJFMjkwMEU4MkJGREU5MUU4MQorOjEwNTJDMDAwRkRDRDM0ODMzRUEzMzYwNDc3MDlDNzA2M0QzNzAxMDA4MAorOjEwNTJEMDAwRTkxMEY3RTkwOUZEQ0QzNEMzQzcwNjlCMzYwMDAwRThBNQorOjEwNTJFMDAwMENGNTgxMjZBRjM2RkZFN0ExQUYzNkU3MDY4MTI2OUI5NgorOjEwNTJGMDAwMzZGRjdGRTUwMjBEMDEwMDI1RUZGRjI1RkZERkU3MDIwNgorOjEwNTMwMDAwQkJGRjdGQ0Q1MzMzQzBBMzlEMzZBMzlGMzZFODIwRjM2OAorOjEwNTMxMDAwRTg0M0YzODMwRTlCMzYxMEM3MDY5OTM2MDAwMEU4RDJBNworOjEwNTMyMDAwRjVFNTU2MEQwMjAwRTc1NkM3MDZBODAyMDAwMEJFMDBDQworOjEwNTMzMDAwMDBFODMwRjVDNjA2QTAzNjBFQjg5QzAzQ0QzOUI4ODAxQgorOjEwNTM0MDAwMDBDRDM1QzcwNkFBMDJGRkZGQzcwNkExMzYwMTAwRTk1NgorOjEwNTM1MDAwQTVGNjA2Qjg4RjAzQ0QzQUI4OTAwM0NEM0FCODkxMDNCRAorOjEwNTM2MDAwQ0QzQUI4OTIwM0NEM0FCODkzMDNDRDNBQjg5NDAzQ0Q3MQorOjEwNTM3MDAwM0FCODk1MDNDRDNBQjg5NjAzQ0QzQUI4OTcwM0NEM0FFQgorOjEwNTM4MDAwQjg5ODAzQ0QzQUI4OTkwM0NEM0FCODlBMDNDRDNBQjg1NAorOjEwNTM5MDAwOUIwM0NEM0FCODdGMDNDRDNBQjg4MDAzQ0QzQTA3QzMxQgorOjEwNTNBMDAwRjc0OUYxNEVERjRGREY0RkRGNEZERjRGRjg1MURGNEY0RgorOjEwNTNCMDAwRkE0RjBCNTBEMTUxREY0RkRGNEZERjRGREY0RkRGNEY0MQorOjEwNTNDMDAwRTQ0RTA2MDBDRDRBMDQwMEU0NEUxOTAwQUQ0QkZBMDA0RAorOjEwNTNEMDAwODI0QzA4MDcwOTRDMTQwMDI0NEU2NDAwRDc0REY0MDE5OAorOjEwNTNFMDAwNjQ0RUJDMDI3QTRFRTgwMzQzNEUwMjAwQjM0RUY0MDExMQorOjEwNTNGMDAwNUI0RUY0MDFFNTRFMTQwMDA2NTAwNjUwOTU0Q0MxNTIyOAorOjEwNTQwMDAwQzE1MkZFNENEQTRDMDY1MDA2NTAwNjUwMDY1MEI3NTFCOQorOjEwNTQxMDAwQjc1MUI3NTFCNzUxQjc1MUI3NTEwNjUwRDU0QTA2NTA5OQorOjEwNTQyMDAwMUQ0QzA2NTA4MzREMUY0RDFGNERFRDQwRkE0MDA3NDE2NgorOjEwNTQzMDAwMzczNzJFMzczNzIwMjA3OTc5MkY3OTc5MkY3OTc5MjBDRQorOjEwNTQ0MDAwMzAzMTJFMzkzMDIwMjAzMDMyMkYzMTM3MkYzOTM5MjA2QQorOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwNTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwNTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwNTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwNTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwNTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwNTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwNTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwNTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwNTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwNTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwNTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwNTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwNTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwNTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwNTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwNTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwNTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwNTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwNTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwNTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwNTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwNTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwNTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwNTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwNTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwNTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwNTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwNTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwNTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwNTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwNTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwNTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwNTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwNTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwNTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwNTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwNTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwNTdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwNTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwNTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwNTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwNTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwNTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwNTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwNTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwNThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwNThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwNThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwNThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwNThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwNThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwNTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwNTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwNTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwNTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwNTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwNTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwNTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwNTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwNTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwNTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwNTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwNUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwNUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwNUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwNUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwNUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwNUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwNUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwNUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwNUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwNUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwNUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwNUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwNUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwNUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwNUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwNUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwNUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwNUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwNUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwNUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwNUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwNUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwNUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwNUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwNUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwNUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwNUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwNUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwNUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwNUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwNUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwNUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwNUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwNUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwNUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwNUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwNUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwNUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwNUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwNUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwNUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwNUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwNUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwNUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwNUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwNUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwNURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwNUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwNURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwNURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwNUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwNUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwNUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwNUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwNUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwNUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwNUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwNUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwNUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwNUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwNUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwNUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwNUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwNUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwNUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwNUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwNUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwNUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwNjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNjEyMDAwOTBFQUMwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDEzMDYwNworOjAwMDAwMDAxRkYKKy8qCisgKiBUaGUgZmlybXdhcmUgdGhpcyBkcml2ZXIgZG93bmxvYWRzIGludG8gdGhlIHRva2VucmluZyBjYXJkIGlzIGEKKyAqIHNlcGFyYXRlIHByb2dyYW0gYW5kIGlzIG5vdCBHUEwnZCBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhlIExpbnV4CisgKiBzaWRlIGRyaXZlciBhbmQgdGhlIHJvdXRpbmUgdGhhdCBsb2FkcyB0aGlzIGRhdGEgaW50byB0aGUgY2FyZCBhcmUuCisgKgorICogVGhpcyBmaXJtd2FyZSBpcyBsaWNlbnNlZCB0byB5b3Ugc3RyaWN0bHkgZm9yIHVzZSBpbiBjb25qdW5jdGlvbgorICogd2l0aCB0aGUgdXNlIG9mIDNDb20gM0MzNTkgVG9rZW5SaW5nIGFkYXB0ZXJzLiBUaGVyZSBpcyBubworICogd2FyYW50eSBleHByZXNzZWQgb3IgaW1wbGllZCBhYm91dCBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisgKi8KKworLyogM2MzNTlfbWljcm9jb2RlLm1hYzogM0NvbSAzQzM1OSBUb2tlbnJpbmcgbWljcm9jb2RlLgorICoKKyAqIE5vdGVzOgorICogIC0gTG9hZGVkIGZyb20geGxfaW5pdCB1cG9uIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogQXZhaWxhYmxlIGZyb20gM0NvbSBhcyBwYXJ0IG9mIHRoZWlyIHN0YW5kYXJkIDNDMzU5IGRyaXZlci4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCBjNmFmNjFiLi5iYWY1YWU0IDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogZWxzZQogYWNlbmljLW9ianMgOj0gYWNlbmljL3RnMS5iaW4gYWNlbmljL3RnMi5iaW4KIGVuZGlmCitmdy1zaGlwcGVkLSQoQ09ORklHXzNDMzU5KSArPSAzY29tLzNDMzU5LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19BQ0VOSUMpICs9ICQoYWNlbmljLW9ianMpCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FEQVBURUNfU1RBUkZJUkUpICs9IGFkYXB0ZWMvc3RhcmZpcmVfcnguYmluIFwKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCkBAIC0zOSw2ICs0MCw3IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9UVFVTQl9CVURHRVQpICs9IHR0dXNiLWJ1ZGdldC9kc3Bib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRTEwMCkgKz0gZTEwMC9kMTAxbV91Y29kZS5iaW4gZTEwMC9kMTAxc191Y29kZS5iaW4gXAogCQkJICAgICBlMTAwL2QxMDJlX3Vjb2RlLmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19QQ01DSUFfU01DOTFDOTIpICs9IG9zaXRlY2gvWGlsaW54N09ELmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19TTUNUUikgKz0gdHJfc21jdHIuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9LT1JHMTIxMikgKz0ga29yZy9rMTIxMi5kc3AKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX01BRVNUUk8zKSArPSBlc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZncgXApAQCAtOTEsNiArOTMsNyBAQAogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSkgKz0ga2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdwogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfVklDQU0pICs9IHZpY2FtL2Zpcm13YXJlLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX1ZJREVPX0NQSUEyKSArPSBjcGlhMi9zdHYwNjcyX3ZwNC5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfWUFNKSArPSB5YW0vMTIwMC5iaW4geWFtLzk2MDAuYmluCiAKIGZ3LXNoaXBwZWQtYWxsIDo9ICQoZnctc2hpcHBlZC15KSAkKGZ3LXNoaXBwZWQtbSkgJChmdy1zaGlwcGVkLSkKIApkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IDAwYjZlM2MuLjM4MTRkN2QgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTQ5MywzICs0OTMsNTMgQEAKIEZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogWUFNIC0gWUFNIGRyaXZlciBmb3IgQVguMjUKKworRmlsZTogeWFtLzEyMDAuYmluCitGaWxlOiB5YW0vOTYwMC5iaW4KKworTGljZW5jZToKKyAqIChDKSBGNkZCQiAxOTk4CisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogM0MzNTkgLSAzQ29tIDNDMzU5IFRva2VuIExpbmsgVmVsb2NpdHkgWEwgYWRhcHRlcgorCitGaWxlOiAzY29tLzNDMzU5LmJpbgorCitMaWNlbmNlOgorLyoKKyAqIFRoZSBmaXJtd2FyZSB0aGlzIGRyaXZlciBkb3dubG9hZHMgaW50byB0aGUgdG9rZW5yaW5nIGNhcmQgaXMgYQorICogc2VwYXJhdGUgcHJvZ3JhbSBhbmQgaXMgbm90IEdQTCdkIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGUgTGludXgKKyAqIHNpZGUgZHJpdmVyIGFuZCB0aGUgcm91dGluZSB0aGF0IGxvYWRzIHRoaXMgZGF0YSBpbnRvIHRoZSBjYXJkIGFyZS4KKyAqCisgKiBUaGlzIGZpcm13YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSBzdHJpY3RseSBmb3IgdXNlIGluIGNvbmp1bmN0aW9uCisgKiB3aXRoIHRoZSB1c2Ugb2YgM0NvbSAzQzM1OSBUb2tlblJpbmcgYWRhcHRlcnMuIFRoZXJlIGlzIG5vCisgKiB3YXJhbnR5IGV4cHJlc3NlZCBvciBpbXBsaWVkIGFib3V0IGl0cyBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KKyAqLworLyogM2MzNTlfbWljcm9jb2RlLm1hYzogM0NvbSAzQzM1OSBUb2tlbnJpbmcgbWljcm9jb2RlLgorICoKKyAqIE5vdGVzOgorICogIC0gTG9hZGVkIGZyb20geGxfaW5pdCB1cG9uIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogQXZhaWxhYmxlIGZyb20gM0NvbSBhcyBwYXJ0IG9mIHRoZWlyIHN0YW5kYXJkIDNDMzU5IGRyaXZlci4KKyAqLworCitGb3VuZCBpbiBoZXggZm9ybSBpbiBrZXJuZWwgc291cmNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEcml2ZXI6IFBDTUNJQV9TTUM5MUM5MiAtIFNNQyA5MUN4eCBQQ01DSUEKKworRmlsZTogb3NpdGVjaC9YaWxpbng3T0QuYmluCisKK0xpY2VuY2U6IEFsbGVnZWRseSBHUEwsIGJ1dCBubyBzb3VyY2UgdmlzaWJsZS4gTWFya2VkOgorICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZmlybXdhcmUgb2YgU2V2ZW4gb2YgRGlhbW9uZHMgZnJvbSBPU0lURUNILgorICAgIChTcGVjaWFsIHRoYW5rcyB0byBLZXZpbiBNYWNQaGVyc29uIG9mIE9TSVRFQ0gpCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9maXJtd2FyZS9vc2l0ZWNoL1hpbGlueDdPRC5iaW4uaWhleCBiL2Zpcm13YXJlL29zaXRlY2gvWGlsaW54N09ELmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTgwODUKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9vc2l0ZWNoL1hpbGlueDdPRC5iaW4uaWhleApAQCAtMCwwICsxLDE3NyBAQAorOjEwMDAwMDAwRkYwNEEwMzZGM0VDRkZGRkZGREZGQkZGRjNGRkZGRkY3MgorOjEwMDAxMDAwRUYzRkZGRjdGRkZGRkZGRkVGN0ZGRUZGQ0VGRUZFRkU4RAorOjEwMDAyMDAwRkVERUJERERGREZGRkRDRkY3QkY3RkZGN0YzRkZFQkZFMworOjEwMDAzMDAwRkZGRkZGQkNGRkZGQkRCNTdGN0ZCRkJGN0ZGRkVGRkZBRgorOjEwMDA0MDAwRkZGRkZCRkZGN0Y3RkZGRkZGRkZGRURFRkVGRUZBREUxRQorOjEwMDA1MDAwQkRGREVERkRGRENGRUZFRkVGRUZDN0RGREZERkRGREY1MgorOjEwMDA2MDAwRkY3RUZFRkQ3RDZERUVGRTdDRkJGNEZCQ0ZEQkRGRkY1NAorOjEwMDA3MDAwRkZCQjdGRkY3RkZGRjdGRjlFQkYzQkJGQkY3RjdGN0Y0MQorOjEwMDA4MDAwN0U2RkRGRUZGNUY2RkRGNkY1RURFQkZGRUZFRkVGN0VDMAorOjEwMDA5MDAwN0Y3RjZGN0ZGRkZFRkVGRUZFRkVFRkJGRkZGRkZGRkZENQorOjEwMDBBMDAwRkZGRkZGRkZGRkZGQkMxRjFGRUVGRkJDQjdGRkRGRkYxRgorOjEwMDBCMDAwREZFRjNCRTNEM0ZGRkJGRkZGREZGRkZGRkZCQUJGMkQwNworOjEwMDBDMDAwREJCREZEREJERkZBRkJGRkVGRkJEQkYzRkZERkZEN0ZEQgorOjEwMDBEMDAwRUZGQkZGRkZCRUJGMjdCQUZFRkJERkZGRjZGRkZGRUYyMAorOjEwMDBFMDAwRkJEQkYzRDk5QTNGRkZBRkJGRkZGRkJFM0YzN0JEOTZBMworOjEwMDBGMDAwRkZGRkZGRkZGRkZGQUVGQkYzRjNFQkZGRkZGRkZGRkY5MQorOjEwMDEwMDAwRkZGN0ZBQkNBRUZFQkVGRUJCN0ZGREZGN0ZFRkY3RkI0NQorOjEwMDExMDAwQkJEN0Y3N0ZGRkY3RkZGRkY3QkNFREZEQkQ5RDdEN0JGNAorOjEwMDEyMDAwRkI3QjdCRkJBRkZGRkVGREZERkVGRUZGRkZGRkZGRjc0RQorOjEwMDEzMDAwQUFCOUJGOEZCRkRGRkY3RkZGRkY3RkNGRkJFQkNCRUIwQQorOjEwMDE0MDAwRUVGRkZGRDdGRkZGRkYzRTMzM0YxQzdDRkNGRkZGRkZBRQorOjEwMDE1MDAwRkZGRkNGRDNGM0UzRjNGQkZGRkZGRkZGRkZFQkZFMzUyMgorOjEwMDE2MDAwM0YzREZERkRGRkZGRkZCRkZGRUY2RkUzRTNFM0VGRkY2OQorOjEwMDE3MDAwRkZERkZGRkZGN0ZFM0U1RUZFRkZGRkZGRkZGREZGRkYxRAorOjEwMDE4MDAwQUZDRkYyQ0JDRjhFRkZGRkZGRkZGRkZERkMzRTFGOUVFOAorOjEwMDE5MDAwQURGREZGRkZCRkZGRkZFRkZGQjNGN0U3RjdGQUZGRkY4QworOjEwMDFBMDAwRkZGRkZGRUVFQkFCQUY5RkUzN0ZGRkRFRkY3RkVFRkZENgorOjEwMDFCMDAwRkZGQjNBRkFGRkYyNzdGRkZGRjdGRUZGRkVCREFFREU3MAorOjEwMDFDMDAwN0Q3REZERkZCRkVFRkZGREZGREJGQkZGRjdFRkZCRkZEQworOjEwMDFEMDAwRkZGRUZGMkRBRkI5RkQ3OUZCRkFGRkJGRUZGRkZGOTFFNworOjEwMDFFMDAwRkFGQkRGRjdGN0ZGRkZGRkZDQ0YzN0JGQkZGRjdGN0ZEMworOjEwMDFGMDAwRkZGRkZGQUZGRkZGRjNGQkZCRkZGNUVGRkZGRkY3RkE5QQorOjEwMDIwMDAwRkZGRkVFRkFGRUZCNTVEREZGN0ZBRkZFRkZGQkZCRjVDOAorOjEwMDIxMDAwRkZGN0VGRkZGRkZGQkVCREJEQkRCRDdEN0I3QjdCN0JFMQorOjEwMDIyMDAwRkJBRUZGRkRGRUZGRkZGRkZGRkZGRkZGRjdEQUI3NjE0OQorOjEwMDIzMDAwRkZCOTU5RjM3M0YzREY3RjZGREZFRkY3RUJFQkQ3RkYxNgorOjEwMDI0MDAwRDdGRkZGRjdGRTdGRkIzRTM4NzNGNjdGRkNGRkZGQ0Y0MworOjEwMDI1MDAwRkZCN0ZCQjNCMzY3RkZFN0ZERkZFRkY2N0ZCN0JDRjU3MgorOjEwMDI2MDAwN0JGNkY3RjVGRkZGRUZGRkY3RkZGN0NFRTdGRjlGRkYwNgorOjEwMDI3MDAwRkZGNUZFN0RGRjVGRkZGRkZGRkZGRkZGRkZFRkZGRjZENAorOjEwMDI4MDAwQ0JEQkVFRkVGRkRGRkZGRkZGRkU3RkJFMUUzRUZFRkY2RAorOjEwMDI5MDAwN0RGRUZGRkZFRkJGRTdGRkUzRTNGRkRGRTdGRkZGRkZDOQorOjEwMDJBMDAwQjhFRkI3MkZFRUZGREZGRkJGRkY3RkVGRUJCRkEzRDNBQQorOjEwMDJCMDAwRkY3RkZGRkZGRkZGRjdCRUZEM0ZDRkZERkJGRkZGRkYwRgorOjEwMDJDMDAwRkZGRkFGRkJCRkJCQkZEQkZERkJGRkZGRkZGRjNFRkU0MgorOjEwMDJEMDAwM0ZCQUJBRkVGRkZGRkZFRkZGRUZDMzdGQjI5QkZGRkYwNgorOjEwMDJFMDAwRkZGRkZFRkZGRjNDRkYzRjNDRkZGRUZGRkZGRkZGRkY2NgorOjEwMDJGMDAwQUZGM0ZFRjNFM0VCRkZGRkZGRkJGRkY3OUFGRUFGOUVDQQorOjEwMDMwMDAwQkVGRUZGREZGRkZGN0JFRkY3QkZGQkZCRkJGRkZGN0ZDNworOjEwMDMxMDAwRkZGRkZGQkNCREZEQkRERDdEN0I3QjdCN0JGQkFFRkZCRgorOjEwMDMyMDAwRkZGRkZFRkVGRkZERkZGRkZGRjc5QUZGOUZGRkFGRUYwRQorOjEwMDMzMDAwRkZGRkZGRkY3RkNGRjNGRkVCRkZFQkZGRkZCRkZGRkZGMQorOjEwMDM0MDAwRUZGRUZGMzdGQ0JGRkZGRkZGRkZGRkZGQ0ZFRkZERjMyNworOjEwMDM1MDAwRkZFRUZFRkZGRkZGRkZGRjZFRkQyRkZERkZGREZGRkYyNgorOjEwMDM2MDAwRkZGRkZGRUZDRkZGRjNCRjY5RkZGRkZGRkZGRkZGRkVDMAorOjEwMDM3MDAwRkI5RkZGQkZGREZGRkZGRkZGRkZFRjg3RkVEQUVGQ0YyMQorOjEwMDM4MDAwRkZGRkZGRkZGRkZGRkVFRkJGRUZFRkZERkZGRkZGRkZGMAorOjEwMDM5MDAwRkZFRkZERkY3QkZGRUJGRUZGRkZGRkZGRUJGOEZGRUY0MworOjEwMDNBMDAwQUZGRkZGQkRGRkZGRkY3RkVFN0ZFRkZGQkJGRkJGRkI5OAorOjEwMDNCMDAwRkZGRkZGRjdGNkZCQkRGRERERjVGRkZGRkZGRkZGQUYyMgorOjEwMDNDMDAwRkY1RkY1REZGRjdGRkZGRkZGRkZGRkY2RjNGRkRFRkVCRQorOjEwMDNEMDAwRUZGREZGRkZGRkZGRUZGRkRFREY1RkRGRkRGRkZGRkY1MgorOjEwMDNFMDAwRkZGRkZFRkZGRkZFRkVGRkZERkZGRkZGRkZBRkZGRkY3MgorOjEwMDNGMDAwRUZFREZGREZGRkZGRkJGRkZGREFCREJFQUVGRTdGRkRDRgorOjEwMDQwMDAwREZGRkZGN0ZFRkZGRkJGQkZCN0ZGN0ZGRkZGRkZGRjc0OAorOjEwMDQxMDAwQkNGREJEQkRCREZEN0I3QjdCN0JGQkFFRkZGRkZERkY2MAorOjEwMDQyMDAwRkZGRkZERkZGRkZGRkZGQTlGQkZCRkNGN0ZGRkZGRkY3MworOjEwMDQzMDAwRkZGRkFGRkZFQkVCRUJGRkQ3RkVGRkZGQkZFN0ZFQkYxQQorOjEwMDQ0MDAwN0ZGQ0ZGRkZFREZGRkZGRkZGNEZGRkZCRkJGRkZGREQyQgorOjEwMDQ1MDAwRkZGRkZGRkZGRkZFQkRERjlERkRERkI5RkZGRkZGRkZEOQorOjEwMDQ2MDAwRUZGRkZCRUZFQkZGREVGRkZGRkZGRkZGRjY5RkZGRkM2MQorOjEwMDQ3MDAwRkVGQkZERkZGRkZGRkZFRkRGRkFDRENGQkY5RkZGRkZDQQorOjEwMDQ4MDAwRkZGRkY3RkVCRkZGREZFRjVGRkZGRkZGRkY3RjZGRkZBNQorOjEwMDQ5MDAwQkJGREZGRkZGRkZGRkZGRkZGRkY3RUZGNUZGRkJGQkY1MworOjEwMDRBMDAwRjlGRkZGRkY3RjZFN0JGRkVGRkRFQkRGRkZGRkZGRkYzRAorOjEwMDRCMDAwRjdCNjNFRkNGREJGN0VGQkZGRkZGRkY3RUZGN0YzRjc1QworOjEwMDRDMDAwRkZGQkZGRkZGRkZGRkZGRjZFMzU3OUZGQkZGQ0ZGRkY2NAorOjEwMDREMDAwRkZGRkZGRUZGQjUzREZGRkVCQkZGRkZGRkZGRkZGQkNBMworOjEwMDRFMDAwRkZGRkZGQkZGRkZERkZGRkZGRkZBRkY1RkZGN0ZGRkJDNAorOjEwMDRGMDAwRkZGRkZGRkZGRkZGQkFBQUVFRkUzRjdERkRGRkZGRkZGQworOjEwMDUwMDAwN0ZBRjc3RkJGQkZGRkJGN0ZGRkZGRkZGRjdCRUJEQkQzNAorOjEwMDUxMDAwQkRCREZEN0I3QjdCN0JGQkFFRkZFRkZGRkZGRkZGRkNFOQorOjEwMDUyMDAwRkZGRkZGRkY5QUQ5QjhGRkZGNzlGRkZGRkZGRkZGQ0Y2MworOjEwMDUzMDAwRkJGRkVCRkZFQkQ3RkZGRkZGRkZFN0RFRjhGQkZFM0YyNAorOjEwMDU0MDAwRkJGREZGRkZGRkZGQ0ZBREJGRkFGRjczREZGRkZGRkYzNAorOjEwMDU1MDAwRkZGRjNBRjVCN0ZDM0ZGOUZERkZGRkZGN0ZFRkYzRkYyOQorOjEwMDU2MDAwQkZGRUYzOUZGRUZGRkZGRkY3M0VGRkZGRkZCRkZGRkY1MgorOjEwMDU3MDAwRkZGRkZGRkZBRkQzRkVEQkZGREJERkZGRkZGRkZGRkY3MAorOjEwMDU4MDAwM0VGRkJGRkY3RkZGRkRGRkZGRkZGRjhGRjNGRkVERkY4QworOjEwMDU5MDAwRjdGQkZGRkZGRkZGRUZGNjNDRkVGRkZGRkZGRkZGRkY1NAorOjEwMDVBMDAwRkY5RkVGRUZEMUZGRkZGRkZGRkZGRkZGRkZGRjdFQkZDQQorOjEwMDVCMDAwRkRGRkZGRkZGRkZGRkZGRkJCRUZERkYxRkZGRkZGRkZDRgorOjEwMDVDMDAwRkZGRkZGRkZGRkVFM0VGRUZGRkZGRkZGRkZGRkZGQkY0RQorOjEwMDVEMDAwRUZGREMzRkZGRkZGRkZGRkZGRkZCRkZGRkMzRUZFRkY3RQorOjEwMDVFMDAwRkZGRkZGRkZGRkZGRkYyRUVGRjNGRkZGRkZGRkZGRkYwOAorOjEwMDVGMDAwRkZGRkY3QkFCRUZFRkZGRkZGRkZGRkZGRkY3RkFGRkI2RQorOjEwMDYwMDAwRkJGREZGRkZGRkZFRkZGRkZGRjJENkVEQkRCREJEN0Q5MQorOjEwMDYxMDAwN0I3QjdCN0JGQkFGREZGRkZGRkZGRkZGRkZGRkZGRkY2RQorOjEwMDYyMDAwRkY5MkJGRkZGRkZGRkZGRkZGRkZGRjdGQUZFQkVCRkY3RgorOjEwMDYzMDAwRkZGRkZGRkZGRkZGRkZFN0ZFMkVGRUZGRkZGRkZGRkZCNQorOjEwMDY0MDAwRkZGRkZGNEZFRkYzRkZGRkZGRkZGRkZGRkZGRkZGRkU4NworOjEwMDY1MDAwM0NGRUZGRkZGRkZGRkZGRkZGRkZFRkNFQzNGREZGRkZFRAorOjEwMDY2MDAwRkZGRkZGRkZGRkZGRkU1REZGRkZGRkZGRkZGRkZGRkYzRAorOjEwMDY3MDAwRkZFRkNGRUJGRkZGRkZGRkZGRkZGRkZGRjdFRTNFRkZCOAorOjEwMDY4MDAwRkZGRkZGRkZGRkZGRkY3RkVGREZFMkZGRkZGRkZCRkY0QgorOjEwMDY5MDAwRkZGRkZGRkZGNkJFRkNGRkZGRkZGRkZGRkZGRjdGRUU0OAorOjEwMDZBMDAwNUZFNkZGRkZGRkZGRkZGRkZGRkZGRjNFN0RGRkZGRkY1NgorOjEwMDZCMDAwRkZGRkZGRkZGRkZGRUZGM0ZCRkZGRkZGRkZGRkZGRkY2QQorOjEwMDZDMDAwQkZGNzM2QkVGRUZGRkZGRkZGRkZGRkZGRkZFRkQzRjZEMgorOjEwMDZEMDAwRkVGRkZGRkZGRkZGRkZGRkZGRkM3RkVFRkZGRkZGRkZCRgorOjEwMDZFMDAwRkZGRkZGRkZBRkVGRUJGRkZGRkZGRkZGRkZGRkZGRkY4RQorOjEwMDZGMDAwQkFCRUZFRkZGRkZGRkZGRkZGRkZGRkVFRkJGQUZGRkZBQgorOjEwMDcwMDAwRkZGRkZGRkZGRkZGRjdENkZEQkRCREJEN0Q3QjdCN0IwMAorOjEwMDcxMDAwN0JGQkFFRkY3RUZGRkZGRkZGRkZGRkZGRkZGN0JBQkZEMAorOjEwMDcyMDAwRkZGRkZGRkZGRkZGRkZGRjdGRUZFQjZCRkZGRkZGRkYxMQorOjEwMDczMDAwRkZGRkZGRkZGN0ZFQkVGRUZGRkZGRkZGRkZGRkZGRkYxNAorOjEwMDc0MDAwNEZFRkY3RkZGRkZGRkZGRkZGRkZGRkVGM0U2RUZDRkZFNgorOjEwMDc1MDAwRkZGRkZGRkZGRkZGRkZFRkMzQzlGRkZGRkZGRkZGRkYyQgorOjEwMDc2MDAwRkZGRkZGM0VCRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkJBRQorOjEwMDc3MDAwRDVGRkZGRkZGRkZGRkZGRkZGRkZGRUZFRkVGRkZGRkZCNgorOjEwMDc4MDAwRkZGRkZGRkZGRjZGRUZGQkZGRkZGRkZCRkZGRkZGRkYyMQorOjEwMDc5MDAwRkZGNkRGRkZGRkZGRkZGRkZGRkY3RkZFRUZGRkZGRkYyMworOjEwMDdBMDAwRkZGRkZGRkZGRkZGRTdGRkZFRkZGN0ZGRkZGRkZGRkY3QQorOjEwMDdCMDAwRkY3RkZBRUZCRkZGRkZGRkZGRkZGRkZGRkZFN0ZGRkUzNworOjEwMDdDMDAwRkZGRkZGRkZGRkZGRkZGRjdGRkVFRkJGRkZGRkZGRkYwQQorOjEwMDdEMDAwRkZGRkZGRkZBN0ZGRkNGN0ZGRkZGRkZGRkZGRkZGN0YwQworOjEwMDdFMDAwRkVBRUZGRkZGREZGRkZGRkZGRkZGRkU3RjdGQUZGRkQ5NAorOjEwMDdGMDAwRkZGRkZGRkZGRkZGRkY3RkFGRkZGRkZGRkZGRkZGRkZEOQorOjEwMDgwMDAwRkZGRkZGRjdCRUJEQkRCREJEN0Q3QjdCN0I3QkZCQUYyRgorOjEwMDgxMDAwN0ZGRkZGRkZGRkZGRkZGRkZGRkZGRkNBRkZGRkZGRkY5RAorOjEwMDgyMDAwRkZGRkZGRkZGRjdGNkZGRkZGRkZGRkZGRkZGRkZGRkZFOAorOjEwMDgzMDAwRkZFN0ZFRkZGRkZGRkZGRkZGRkZGRkZGRkZDRkZFRkYxMgorOjEwMDg0MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkVERkZGRkZGRkZGRkZEOQorOjEwMDg1MDAwRkZGRkZGRkZFRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZCOQorOjEwMDg2MDAwRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZBOQorOjEwMDg3MDAwRkZGRkZGRkZGRkZGRjdGRUZGRkZGRkZGRkZGRkZGRkY5MQorOjEwMDg4MDAwRkZGRkVGRkZGRUZGRkZGRkZCRkZGRkZGRkZFN0YyRkNCNQorOjEwMDg5MDAwRUZGRkZGRkZGRkZGRkZGRjdGQUVFRkZGRkZGRkZGRkY1OQorOjEwMDhBMDAwRkZGRkZGRkZGNzdFRkRGRkZGRkZGRkZGRkZGRkZGRkZFMworOjEwMDhCMDAwRUZGRkZFRkZGRkZGQkZGRkZGRkZCRkZGRkVGRUZGRkZEQgorOjEwMDhDMDAwRkZGRkZGRkZGRkZGREZFRkRERkVGRkZGRkZGRkZGRkY4QgorOjEwMDhEMDAwRkZGRkZGRkVGRUZGRkZGRkZGRkZGRkZGRkZGRkFGRUY4QQorOjEwMDhFMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZCQUZFRkZGRkZGRkY1RQorOjEwMDhGMDAwRkZGRkZGRkZGRkVGRkFGRUZGRkZGRkZGRkZGRkZGRkYxRQorOjEwMDkwMDAwRjY5Q0JEQkRCREJEN0Q3QjdCN0I3QkZCQUVGRkZGRkY1MgorOjEwMDkxMDAwRkZGRkZGRkZGRkZGRkZGNzdBRkZGRkZGRkZERkZGRkY5NAorOjEwMDkyMDAwRkZGRjZGRUZGN0ZGRkZGRkRGRkZGRkZGRkZGRkY3RkVBOAorOjEwMDkzMDAwRkVGRkZGRkZERkZGRkZGRkZGRkZDRkVCRkZGRkZGRkYyQworOjEwMDk0MDAwRkZGRkZGRkZGRkVGOUVGQ0ZGRkZGRkZGRkZGRkZGRkYyQgorOjEwMDk1MDAwRkZFRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZDOAorOjEwMDk2MDAwRkZGRkZGRkZGRkZGRkY3RkVGQ0JGRkZGRkZGRkZGRkQ1RAorOjEwMDk3MDAwRkZGRkZGRkZCRUZERkZGRkZGRkZGRkZGRkZGRkZGRUZEQQorOjEwMDk4MDAwRUZGRkZGRkZERkZGRkZGRkZGRkZGRkY4RkZGRkZGRkZBRQorOjEwMDk5MDAwQkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZCNworOjEwMDlBMDAwRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkJBRjdGRkYyQworOjEwMDlCMDAwRkZGRkRGRkZGRkZGRkZGRkZGRkVFRkZGRkZGRkZGRkY3OAorOjEwMDlDMDAwRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkJGRkY4NworOjEwMDlEMDAwRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkFFRkZGRkZGRkY3OQorOjEwMDlFMDAwRkZGRkZGRkZGRkZGRjdGQUZGRkZGRkZGRkZGRkZGRkYyNAorOjEwMDlGMDAwRkY3RkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0JDQkQyNAorOjEwMEEwMDAwQkRCREJEN0Q3QjdCN0I3QkZCQUZGRkZGRkZGRkZGRkZBMgorOjEwMEExMDAwRkZGRkZGRkZGN0ZBRkZGRkZGRkZGRkZGRkZGRkZGN0Y3MworOjEwMEEyMDAwQUY3RkZGRkZGRkZGRkZGRkZGRkZGRkVGRkVGRkZGRkZCNworOjEwMEEzMDAwRkZGRkZGRkZGRkZGRkZDRkZGRkZGRkZGRkZGRkZGRkZGNgorOjEwMEE0MDAwRkZGRkZGRkVGRkZGRkZGRkZGRkZGQkZGRkZGRkVGRkZDQgorOjEwMEE1MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZBNworOjEwMEE2MDAwRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGQkZGRkZGRkZFNgorOjEwMEE3MDAwRkZGQ0ZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkY5OQorOjEwMEE4MDAwRkZGRkZCRkZGRkZGRkZFRkZFRkY5RjlGOUYzRjNGM0ZFQgorOjEwMEE5MDAwM0YzRkZGRUZERkRGREZERkNGQjdCRkJGQkZCRkZGQkMzMQorOjEwMEFBMDAwQjk5REJEQkQ3RDdCN0I3QjdCRkJFRkQ3RjVGM0YxRDFBMgorOjEwMEFCMDAwNjVFM0UzRTNBM0ZGRkU3RkZFREVERUZGQkRCREJEQkQ1QworOjEwMEFDMDAwREZFRkZCRjdGM0YzRjNFN0U3RTdFN0U3RkJGRUZGRkYxMworOjBBMEFEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkYyNgorOjAwMDAwMDAxRkYKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZmlybXdhcmUgb2YgU2V2ZW4gb2YgRGlhbW9uZHMgZnJvbSBPU0lURUNILgorKFNwZWNpYWwgdGhhbmtzIHRvIEtldmluIE1hY1BoZXJzb24gb2YgT1NJVEVDSCkKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3lhbS8xMjAwLmJpbi5paGV4IGIvZmlybXdhcmUveWFtLzEyMDAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNGU1NgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3lhbS8xMjAwLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQyIEBACis6MTAwMDAwMDBGRkYyMDBBNUFERkZGRTlGRkZFRkYzQ0JGRkRCRkNGMjlECis6MTAwMDEwMDBGRkY2RkYzQ0JGRkRCRkRGNkUzRjZGRjE3REI0RkRCRjVDCis6MTAwMDIwMDBERjZGM0Y2RkY3MEJGRkRCRkRGMkZGRjZGRkZGRkZGRjE4Cis6MTAwMDMwMDBGMENGRkZGRkZGRkVGRkZGREZGRkZGRkZFRkZGRkZGRjQwCis6MTAwMDQwMDBGREZGRkZGRkZFRkZGRkZGRkZGRkYxRkZGRkZGRkZCRjExCis6MTAwMDUwMDBGRkZGRjdGRkZGRkJGRkZGRkZGQ0ZGRkVGRkZGRkZGMENGCis6MTAwMDYwMDA1RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQxCis6MTAwMDcwMDBGRkZGRkZGRkZGRjdGRkZGRkZGMUZGRkZGRTdGQkZGRjY3Cis6MTAwMDgwMDBGRkZGRkZGRkZGRkZGRkZGRjdGRkZCRkZGRkZGRjA5RkZCCis6MTAwMDkwMDBGRkZGRkZGRUZGRkRGRkZGRkZGRkRGRkZGRkZGRjdGRjlCCis6MTAwMEEwMDBGRkZGRkJGRkZCRkZGRkZGRjBGRkZGRkZGRkZGRkZGRjc3Cis6MTAwMEIwMDBGN0ZGRkZGQkZGRkZGRkZFRkZGRkZGRUZGRkYwNUZGRjFDCis6MTAwMEMwMDBGRkZGRkVGRkZGRUZGRkZGRkJGRkZGRkZGRkZGRkZGRjU1Cis6MTAwMEQwMDBGRkJGRkZGRkRGRjdGRkYxRkZGRkZGRkZGRkZGRkZGRkE2Cis6MTAwMEUwMDBGRkZGRkZGRkZGRkJGRUZGRkZGRkZGRkZGMEZGRkZGRjM0Cis6MTAwMEYwMDBGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFQjI1Cis6MTAwMTAwMDBGRkZGRkZGREZGQkZGMUZGRkZGRkZGREZGRkZGRkZGQjczCis6MTAwMTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2RkZGRkZGRjhFCis6MTAwMTIwMDBGRUZGRkZGRkZGRkZGRkZGRkZGRkRGRkZGRkZGRkZGRjAwCis6MTAwMTMwMDBGRkZGRjdGRkZGRjFGRkZGRjdCRkU3RkZGRkZGRkZGQjQ5Cis6MTAwMTQwMDBGRkZGRkZGRkZGRkY3N0ZGRkZGRkYwRkZGRkZGRkZGRTU3Cis6MTAwMTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFGCis6MTAwMTYwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTAwMTcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDFGRkZGRkZGRkVEQkEzCis6MTAwMTgwMDBGRkZGRjVBNUZENEI2RUVGMzMzMkRERDM0QUQ2OTJGRTZECis6MTAwMTkwMDBCMzNGQkRGMUZBREJGRUY3RjY5NkJEQkRGRkJERkZFRDQ3Cis6MTAwMUEwMDA3RjZCN0ZGQkRGRkVGQkZFOTBDRkZGRkZGRkZFQkVFRjBFCis6MTAwMUIwMDBGRkZGREI1RkY2RkZGNjhGRkRBNURERkZGRkZGRkY2RkEzCis6MTAwMUMwMDA3RkRCRjFGQ0JGRkY2RkZGRUZGQzVCNUREQURGRjRGRjZECis6MTAwMUQwMDBGMkZGRkRCRkZGRkZGRkQwMUZGRkZGRkZGRUZGRkZGRjhFCis6MTAwMUUwMDBGRkZCRUZCN0ZDMzNGRkZCRkYwNDZBRjMzQzM2RkZGMDg1Cis6MTAwMUYwMDAwRkYxMEZGRkZGRkZGMzE1NzIwRkYxNkZGRkZFOTQzRjNBCis6MTAwMjAwMDBGRkZGRkY3QkZGRkZGMEZGRkZGRkZGRkVGRkZGRkZGMEExCis6MTAwMjEwMDBGN0VGQjdGQzMzRkZGRkZGMDQ2QUYzM0MzNkZGRjAwRjQ0Cis6MTAwMjIwMDBGMTBGRkZGRkZGRjMxNTczOEZGMjZGRkZGRTk0M0ZGRjk3Cis6MTAwMjMwMDBGRkZGN0Q5RkZGRjAwRkZGRkZGRkZFRkZGRkZGRkY5RTExCis6MTAwMjQwMDBGRkZDRUZEM0ZCRkY3RkY1NUZGRTU5RkZGRkZGRkNGMUUzCis6MTAwMjUwMDBGRTdGRkZGRkZBMTdGRkU3RUZFRkZGRkYzRkYxRkZGRjIyCis6MTAwMjYwMDBGRkZGRkZGRkYwRkZGRkZGRkZGRUY1RkZCRkZGRkNFQTEwCis6MTAwMjcwMDBGRkYwRkZGRkJGRjkzRkIxRUZGRkQ3RkZGQkZGRjBGRjNDCis6MTAwMjgwMDBGRkYzRkZERkZGN0JGRkZERkZGNkZGQkZGRkZGQkZGRkI5Cis6MTAwMjkwMDBGRkZGREFGMEZGRkZGRkZGRkVGMkMwMDEwMDAwMDIwMkU1Cis6MTAwMkEwMDAwMjAyMDA0MDQwNDAxMDAwMDAwMDIwMDAwMDAxMDAwMDU5Cis6MTAwMkIwMDAwMDAwMDAwMDE5MDAwNDA0MDAwMDAwMDAwMDAwMDAxMDBECis6MTAwMkMwMDAwMDNDRjBBRkZGRkZGRkZFRkRCRkZGRkZGQkZGRkRGRkE4Cis6MTAwMkQwMDBGRjdGRkZGRkJGRkZFRkZGRkZGREZGRkZGMUZGREZGRjJFCis6MTAwMkUwMDBGRkZGRkZGRkZGQkZGRUZGRkZGRUZGRkZGRkZGRkZERjgwCis6MTAwMkYwMDBEQkYwNkZGRkZGRkZGRUYwQkZERkZGN0ZGRkZGRkZGRkMxCis6MTAwMzAwMDBERkRGRkZFRkZGOUVFRkZGRkY3RkZGRjFFRkZGRkZGRjVDCis6MTAwMzEwMDBGN0ZBQkZGRkZGRkU0N0VGRkZCREY2RkZGRkRGRjVGMDg3Cis6MTAwMzIwMDBGMEVGRkZGRkZGRkVGODMwMDAwMDAwMDQwMDAxMDIwOEJDCis6MTAwMzMwMDAxNjAwMDAwMDgwMDAwMTAyMDA4MDAxMEMwMjAwMDAwMTk0Cis6MTAwMzQwMDAwMDAwMjAwMDAwMDYwMDIwMDAxMDAwMTQwMDA0QzFGMDhFCis6MTAwMzUwMDAyRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGQkZGRkY3RjAyCis6MTAwMzYwMDBFQ0ZGRkZGQUZGQkZGRjZGRkZFMUZGRkZGRkZGQkRGRUU2Cis6MTAwMzcwMDA0NkZGRUY3RkNEREZGRkZGRkRGRkJERkY3RjdGRjA0RjJCCis6MTAwMzgwMDBGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdFCis6MTAwMzkwMDBGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRjdCCis6MTAwM0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMEZGRjVDCis6MTAwM0IwMDBGRkZGRkVGRkZGRkZGREE0QkNDRDZENkI2RjVCREMzMzY5Cis6MTAwM0MwMDA1QUY2RjdGNkIzM0ZCREMxRkE1QUY2RjZCNkY3RkZCREQ3Cis6MTAwM0QwMDBCQjNDQ0VDRjM0RUYzM0JCQ0NGRkZGRkZGMDRGRkZGRjcyCis6MTAwM0UwMDBGRkZFQkZGRkZGRkZEQkZGRjZENkZGRkRGREJGRkZBRDRBCis6MTAwM0YwMDBCRkY5N0Y2RkZDREJGMUZEQkZGRjZGRkZGRkRBREJGQ0I2Cis6MTAwNDAwMDBEQkZGNzY4RkY2RkZDREFCRkVGQkZGRDBGRkZGRkZGRkRDCis6MTAwNDEwMDBGRUZGOUZGRkY0MjBBRjZEMEJDMTdCRkZGRkZGQ0JGRjAzCis6MTAwNDIwMDAzRkYwRUY3RjBGRjFDMzNDRkZGRkZGRkZGRkZGRjgwQjMzCis6MTAwNDMwMDAxRDZBNjQwNTZCOTkwMUZGRkRFRkYwMkZGRkZGRkZGRUMyCis6MTAwNDQwMDBGRkZGRkZGNDAwMkZDQzBCQzM3RkZGRkZGRjBBREZCRkNFCis6MTAwNDUwMDBGRDdGRkZGRkYxQzNCRkZGRkZGRkZGRkZGRkYwNEEwRTZECis6MTAwNDYwMDA5NjY0MDI5Nzk5MTBGRkZGRkZGMERGRkZGRkZGRkVGRjhBCis6MTAwNDcwMDBGRkZGRkU4NEY5RDUyN0YxN0ZGRkY4RUJERkYzQ0YzRkQ1Cis6MTAwNDgwMDAxRkZGRjcxMUZGQ0ZGRkZFNjdGRkZGRkZGRkM0RkZGRjU2Cis6MTAwNDkwMDBCM0ExRkZGOUUwRkZGRkZGRjBFRkZGRkZGRkZFRjVGRjY1Cis6MTAwNEEwMDBGRkZCN0ZFMEZGQzdGRTdGM0ZGRkZENzc4RDdGMEZGRkU0Cis6MTAwNEIwMDBDM0ZGRjFCRjhGQ0ZGRkZGREQ3QkZGRjZGQUY3RkY0MEYxCis6MTAwNEMwMDA5RkY5N0ZEOEZGRkZGQUYwMUZGRkZGRkZGRUYxQzAwMDhBCis6MTAwNEQwMDAwMDAzMDAwMDAwMDAwMDAwMDAwMDQwMDAxMDAwMDAxMEI5Cis6MTAwNEUwMDAwMDAxMDAxMDIwMjAwMDAwMTAwMDA0MDEwNTAwMDAwMEExCis6MTAwNEYwMDAwMDQwNDAwMDAwM0NGMDFGRkZGRkZGRkVGREJGRkZGRjdDCis6MTAwNTAwMDBGRkZGRkU3RjdGRkZFRkZGRkZERkZGRkZERkZGRUZGNzY0Cis6MTAwNTEwMDBGMUZGRkZGRkZGREZGRkZGRjdGRkZGRkZGQ0ZERkY3RkE2Cis6MTAwNTIwMDA3RUZGRkZGRkRCRjA2RkZGRkZGRkZFRjBCQkZGRkZGRjczCis6MTAwNTMwMDBGRkZGRkVFQkZENkZGRkY3RkVGNTdGRkZGRjdGQkZCMTEzCis6MTAwNTQwMDBGRkZGOUZCRkZCRkZGRUZGRkVGRkY3RUJERkJGNUZERDlGCis6MTAwNTUwMDBGRkRCRkREMEYwNkZGRkZGRkZGRUY4MzAyMDAwNDIwMDEwCis6MTAwNTYwMDAwMDAwMzAxODA0MDgwOTIxODI4MDAyMDAwODAwMDEwMDAwCis6MTAwNTcwMDAwMDAwMEMyMDEwMDAxMTAwNDQ4NDAwMjAyMDg0ODAwMDIyCis6MTAwNTgwMDAwMDAwQzFGMERGRkZGRkZGRkVGRkY3RkZGQkRERjlGRjFCCis6MTAwNTkwMDBEQUZGRENEREZDRkJGRkJGRkIzRUQ3OTZGRTYxRjdGRjE5Cis6MTAwNUEwMDA3RkZGM0ZGREZGREZDRkY3REZGN0JGRkRGRkZFRUZFRjgwCis6MTAwNUIwMDBGRUZGRjA3RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkRDCis6MTAwNUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRjQ5Cis6MTAwNUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJCCis6MTAwNUUwMDBGRkYwMkZGRkZGRkZGRUZGRkZGRkYzQkRGRDRCNzRDRkJBCis6MTAwNUYwMDA3MzVCQ0IzQkRGRkVGN0ZFRDM3NUFDQTFGQkRGRkVGN0YxCis6MTAwNjAwMDA3Njk2QjUyNEJEQTVBRDQ5MkY2OTJCNTI1QkJERkZGRjgyCis6MTAwNjEwMDBGMENGRkZGRkZGRkVCRkZGRkZGRkRCRkZGNkZFRkZDQ0NCCis6MTAwNjIwMDBBN0ZCQURGRjdGNkZGRjZEN0ZEQkYxRkRCRkZGNkZGRkFFCis6MTAwNjMwMDA2RkZGREJGRkRCRkZGNjk3RjZGRkI1QjVGRkZGRkZEMERGCis6MTAwNjQwMDBFRkZGRkZGRkZFRkZGRkZGRkRBNUJDNDNGQzdDMDNFN0MwCis6MTAwNjUwMDBGRkZGMjBGRkZGRkZDQ0ZEN0RGMUZGRkZGRkZGRDU1OTFFCis6MTAwNjYwMDBCQTU2NjY2QUFEOUFBOTlBOTdBNUFBQkJGRkZGRjAwRjgyCis6MTAwNjcwMDBGRkZGRkZGRUZFRkJGRkZERjdGRDQzRkZGRDZCRTdGRjA2Cis6MTAwNjgwMDBGRkRGRkZGRkZGRkZGRjNGRjFGRkZGRkZGRkQ1NTlCNTgyCis6MTAwNjkwMDBBNjY2NkFBRDlBQTk5OTZCNUFBQUZGRkZCN0YwM0ZGRjA5Cis6MTAwNkEwMDBGRkZGRkVGRkZGRkZGRTlDRjdGREQyNDFGRkZGRjI3RjQxCis6MTAwNkIwMDA4RkZGRkYzREYzRkYxN0YxRkZGRkZGRkZGRjdGREZGQzIxCis6MTAwNkMwMDA4RjM4RkZFRjIzRkZGQkY3QzhGRkZGRkZGMDlGRkZGRjBGCis6MTAwNkQwMDBGRkZFRjU3RkZGRkRGRkU0RkZFQkZGQ0ZCRkZBRkZBQkFGCis6MTAwNkUwMDBFRkZGRkJGRkYzRkQ2MUZGRkZGRkZGRkFGRkZCRkQwREQ3Cis6MTAwNkYwMDBGRkZFRkY0MzdGRkVCRkQwRkRGRkZBRjAzRkZGRkZGRjhECis6MTAwNzAwMDBGRUYzQzAwMDAwMDAwMjAwMDIwMTAwNjBDMDQwMDAwMEQzCis6MTAwNzEwMDAwMDAwMzQwNDAwMDEwMDAwMDAwMDAwMDAwMDA4ODgwMDEwCis6MTAwNzIwMDAwMDAzMDAwMDQwMDA0MDAwMDAzQ0YwM0ZGRkZGRkZGRUUwCis6MTAwNzMwMDBGRDNGRkZGRkZGRkZGRkZGN0Y3RkJGRkZGRkZGRkZGRkNCCis6MTAwNzQwMDBGRkZGRkZGN0YxRkZGRkZGRkZGRkY3RkZGRkZGRkRGRkQ5Cis6MTAwNzUwMDBGRkZGRkZGRUZFNUZGRkZGQ0JGMERGRkZGRkZGRkVGMEJFCis6MTAwNzYwMDBGRkZGRkRGRkVGRTNERUVFRDlDNTkzRkZGRkZFRkVGRkM3Cis6MTAwNzcwMDBGQkVFRkVGMUZGRkZGRkZGRkZGREZGQkZGN0ZGRkY3Rjc3Cis6MTAwNzgwMDBBRkJEREZERkZCRjNGM0YwRjBBRkZGRkZGRkZFRjgzNEE4Cis6MTAwNzkwMDAwMDA2NjEwMDE4MDFBMDA1MTcwMDIwMDUyODIwMDAwMEIwCis6MTAwN0EwMDAwNTAwNDEwMDAwNDAwMDA5MDAwMTIwODY4MjA4NDAwMzQ2Cis6MTAwN0IwMDA4MDMwNzAwODE0MDJDMUYwQ0ZGRkZGRkZGRUZGRkZGRjgzCis6MTAwN0MwMDBGRkZGQkRFRkZCRkZGRkZCOUM3RkVGREZGRkJGRUJERTFCCis6MTAwN0QwMDBGRkMxN0ZGRkZCN0ZGRkZGRkY1RkZGRkZGRkRGQkZFRjdCCis6MTAwN0UwMDAzRkY3OEZFRjdGRkZGMDdGRkZGRkZGRkVGRkZGRkZGRjcxCis6MTAwN0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA5Cis6MTAwODAwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2Cis6MTAwODEwMDBGRkZGRkZGRkZGRjAzRkZGRkZGRkZFRkZGRkZGRkZCREZBCis6MTAwODIwMDBERkVGN0Q2RDJCNUE1REQyREZGNjkyQjZCMkIzQUNBMThECis6MTAwODMwMDBGQkRGRkVGMUVFRjVGNkJDNkJCRDdEQUYxQUVGNUY2QjMzCis6MTAwODQwMDBDNkZGRkZGRkYwNUZGRkZGRkZGRUJGRkZGRkZGREJGRjA1Cis6MTAwODUwMDBGNkZGRjZCN0ZEQURGREJGRjM2RkZGNkZGRkRCRDFGRDE4Cis6MTAwODYwMDBCRkZGNkZGNTZCQkM1QjNDREFFRjE2QUYxNkZGQ0RBQjhECis6MTAwODcwMDBGRjZGRkZEMEZGRkZGRkZGRkVGRkZGRkZGQ0JGRkZGRjhCCis6MTAwODgwMDBGRjZDMDMxMEMxRjNGRkYzM0FGM0NBRkZBRkYxRkZGRkIwCis6MTAwODkwMDBGRkZGRDk5NkE2NjVBNjY2NkE5NTY5Njk2QTVBNUFGRkU2Cis6MTAwOEEwMDBGRjVGRjAxRkZGRkZGRkZFRkZGRkZGRkZCRkZGRkZGRjI4Cis6MTAwOEIwMDBFQTBGNTBDM0YzN0ZGRkYzRjNDM0ZGQUZGMUZGRkZGRjc2Cis6MTAwOEMwMDBGRkQ5OTZBNjY1QTY2NjZBOTU2OTY5NkE1QTVBRkZGRkI2Cis6MTAwOEQwMDBGRkYwM0ZGRkZGRkZGRUZGRkZGRkZGRDdGRkZGNUZDMUZFCis6MTAwOEUwMDAzRkY3NUVGNUNFOUU1RjNGMTdGRkYzRTFGRkZGRkZGRjhGCis6MTAwOEYwMDBEOEZGRkFGRTY3RkZGRUJGNUFGRkZGQUZGNUZGRkZGRjBECis6MTAwOTAwMDBGMDJGRkZGRkZGRkVGNUZGRkZGREZGRjdGRkZENEUzRDYwCis6MTAwOTEwMDAzRkU3MEJCRjhGRjlGRkVCRTNGRkUxRkZGRkZDRkZDN0YyCis6MTAwOTIwMDA5RkZGM0UzOUU1RkZDRjlCRjlGRkZGQzVGRkZGRkFGMEMwCis6MTAwOTMwMDA1RkZGRkZGRkZFRjNDMDAwMDAwMDAwMDAwMDAwNDAwMDZBCis6MTAwOTQwMDAwMDAwMDA2MDAwMDAwMDAwMDAwMTAwMDAwMDIwMDAyMDA2Cis6MTAwOTUwMDAwMDAxMTAwODAwMDAwMDAwMDAwMDAwMDAwMDNDRjA0RjAzCis6MTAwOTYwMDBGRkZGRkZGRUZEQkZGRkZGRkZGRkZGRkZGRUZGRkZCRjFCCis6MTAwOTcwMDAzRkZGRkZCRkZGRkZGRkZCRjFGRkZGRkZGRkY3RkZGN0E5Cis6MTAwOTgwMDBGRkVERkZGQkZFRkY3RkZGN0ZERkZGRkZEREYwM0ZGRjlGCis6MTAwOTkwMDBGRkZGRkVGMEZGRkZGM0ZGRjdGRkZFNUZGRkY3RkZGRjM0Cis6MTAwOUEwMDBERkZGRkZGRkY3RkU3QkYxRkZGREZERkZERkRGRkY3REQ4Cis6MTAwOUIwMDA3M0Y5RkZDMzdFRkVGRkVGRDdGRkNGRDBGMDZGRkZGRkNECis6MTAwOUMwMDBGRkZFRjgzMDAwMDA0MDA0MDAwMTQxMjAwMDA0MDAwMjU2Cis6MTAwOUQwMDBENTA5MDAwMjgwMDIwMTAwMDAwMDBBMDQwMDA3MDAwMTlFCis6MTAwOUUwMDA1MDAxODAwMjYxNDA0MTBDMTQwOEMxRjA5RkZGRkZGRkRECis6MTAwOUYwMDBGRUZGRkZGRkZFRkZGRkZGRkVERkNCNUZGRUVGRkZGRTEwCis6MTAwQTAwMDBGRjNGRkY3RkZEQzFGRkZGN0ZGRkRGRkRGQ0ZERjdFRTM2Cis6MTAwQTEwMDBGRkZGNEVGRkRGQ0ZEQkVCRkZGRkYwMUZGRkZGRkZGRTBGCis6MTAwQTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ2Cis6MTAwQTMwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ0Cis6MTAwQTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDJGRkZGRkZGRkU3RjE2Cis6MTAwQTUwMDBGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZERkZGRkZGRkM4Cis6MTAwQTYwMDBGN0ZCRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkIwCis6MTAwQTcwMDBGRkZGN0ZGRkZGRkY3RkZGRjAxRkZGRkZGRkZFRERGRjk4Cis6MTAwQTgwMDBGRkZGQTVGRjZGNkJFOTZGREFDQUZCRERFRUY3RjZCMjg5Cis6MTAwQTkwMDBCM0E0QTE1QjVCRjZEN0Y0Rjc3QkJEQkRBRENGRUY3RjExCis6MTAwQUEwMDA2QjdGM0JERkRCRkZGRjMwQ0ZGRkZGRkZGRUJGRkZGRkIyCis6MTAwQUIwMDBGRkZGRkZGNkZFOTZGRkZEQjVGREJGQUQ3RkZGNkZGRkE5Cis6MTAwQUMwMDBERUQxQURBREU5RkZGMUVDRUZERTNGQ0JGRkY2RkYzMjVCCis6MTAwQUQwMDBGRkM1QkRGRkZGRkZEMEJGRkZGRkZGRkVGRUZCRkZGNDIyCis6MTAwQUUwMDAyOEJGRkZGREZCRDNGRkZGNDJGRkZGRkZFQUIzRkNDM0JDCis6MTAwQUYwMDBDMUZGMzNGRkMwMTU2QjcwRkZGMEYyNEZGRkZDM0U5NzU0Cis6MTAwQjAwMDAzQ0ZGRkZGREVGRjBCRkZGRkZGRkZFRkZGRkZGRkU3OEEyCis6MTAwQjEwMDBCRkZGRkRGM0VGNTVGRjdFRkZGRkZGRUFCM0ZDQzNDMTRDCis6MTAwQjIwMDBGRjMzRkZDMDE1NkZGRjBGRjBGMDBGRkZGQzNENkJDM0VECis6MTAwQjMwMDBGRkZGRkVGN0YwQ0ZGRkZGRkZGRUZGRkZGRkZGRkNGRjExCis6MTAwQjQwMDBGRjIzRjg3RkZGNEVGRkZGRkZGQkY5MTdGRkY2RjFGRkQyCis6MTAwQjUwMDBDRkVGRkZGRjEzREZFNjJGQzdGRkZGRTdDMUZERkZGRTZCCis6MTAwQjYwMDBGRkZGRkZGMDRGRkZGRkZGRkVGNUZGRkZGRkZFQUVGRkIxCis6MTAwQjcwMDBGRjdGM0IzRkZDN0ZGQ0VGRkZGQ0UyN0JGRkYxRkRFREU1Cis6MTAwQjgwMDBFRkZGRkYzNTczRkZGRkZFRkFGRkZGRkZGRUJGRkZGRjIyCis6MTAwQjkwMDBGRkZBRjA4RkZGRkZGRkZFRjFDMDAwMDAwMDAwMDAwMDMxCis6MTAwQkEwMDAwMDAwMDA4MDAwMDA0MDAwMDAwMDBDMDQwMTQwNDAwMEY0Cis6MTAwQkIwMDAwMDMwMjgwNDAwMDgwMDAwMDAwMTAwMDEwMDAwMDAwMENGCis6MTAwQkMwMDAzOEYwMEZGRkZGRkZGRUZEQkZGRkZGRkZGRkZCRkY3RkMyCis6MTAwQkQwMDBGRkZGOUZGRkZGRkZGRkZGRkZGRkZGRjFGRkRGREZGRkQzCis6MTAwQkUwMDBGRkZGRkZFREZGRkRGRkZGRkZGRkZGQkZCRkZGRkZDM0U1Cis6MTAwQkYwMDBGMDNGRkZGRkZGRkVGMEJGRkRGRkJGRkZGRkZERkZGRjY4Cis6MTAwQzAwMDBGRkZGRkZGRDdCRkY3RkZGQkRGRkYxRUZGRkZGRkRERjdDCis6MTAwQzEwMDBGREZCRkZGRkJGQkVGRkNEN0ZGQ0Y3Rjc2RkJGRDhGMDM2Cis6MTAwQzIwMDBFRkZGRkZGRkZFRjgzMDAwMDAwMDA0MDAwMEEwMDAwMDBFCis6MTAwQzMwMDBDMDAwMDAyMDM0MDAwMDAwMEM4MTAwMjBBNDIwMDAxMDFGCis6MTAwQzQwMDAwODA0NDgwODAwNDA5MzAwMTAwMDM4MTgyMEMxRjAzRjA1Cis6MTAwQzUwMDBGRkZGRkZGRUZGRkJGRkZGQjlERkZFQjNGRkZGRTdGRDc2Cis6MTAwQzYwMDBGRkZGM0JGRjdGRkZCRkZGQzFGRkZDRkZGRjNGNzdGRUEyCis6MTAwQzcwMDBGRUNGRkZCRkZEQkZGRkZFRURGMkZERjdGRkYwMkZGRjQwCis6MTAwQzgwMDBGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc1Cis6MTAwQzkwMDBGRkZGRkZGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRjcyCis6MTAwQ0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMEJGRkZGRkEzCis6MTAwQ0IwMDBGRkZFRkZGRkZGRjNBRENGRUY3MEM5NzMzQkRGNUI0QTcxCis6MTAwQ0MwMDBGNkI3RkVEN0Y1QkNDMTMzQ0FENkI3NkVGN0ZCQkRDNUM0Cis6MTAwQ0QwMDAyNENGNkYyRjREMkJCQTVBRkZGRkZGRjBBRkZGRkZGRjVFCis6MTAwQ0UwMDBGRUJGRkZGRkZGRkZGNkY2RDdGRkZGQURCREZGRkZGRjIzCis6MTAwQ0YwMDBFRkY3N0ZGQzVCQjFGREJENzU2RkVGNkFGRDVCRkJEQjYyCis6MTAwRDAwMDAzQUJGOEU5RkZGQkZGREZGNkZGRkQwNkZGRkZGRkZGRTVCCis6MTAwRDEwMDBGRkJCRkZGMDNGRkZGRkZERkI3RkRFRkZGRjVBRDZCRkFCCis6MTAwRDIwMDBEODJBQkZCRkYxRTVGRkNDQzBBOTcwRkZGMzNDM0NGRDYyCis6MTAwRDMwMDA1N0ZEOTgwMzAwQzNGRkZGRkZGMEFGRkZGRkZGRkVGRjZCCis6MTAwRDQwMDBGRkZGRkYzREJGRkZGREZCRkZEQkZGRkYwRkZDM0ZEOEI5Cis6MTAwRDUwMDAyQUJGQkZGMUVGRkZDQ0MwOTZCRUZGRjMzRkZGRkQ1N0E4Cis6MTAwRDYwMDBGRDk5MEZGRkMzRkZGRkZGRjA0RkZGRkZGRkZFRkZGRkU3Cis6MTAwRDcwMDBGRkYxRTdGRkZGRjM4RTdCRkZBOEZGREY3RjhFNzg3MzI1Cis6MTAwRDgwMDBGRkYxNTE2MkZGRkM0QkZGRjNGRjdFQ0ZGOUZGRkRGRjQ4Cis6MTAwRDkwMDBGRjdGRkZFMEZGRkZGRkYwNEZGRkZGRkZGRUY1RkZGRkNDCis6MTAwREEwMDBGQkZEQUVGRkZDRkU2RjNGRjhGRDc3QUZGRTM3RkU3QjJECis6MTAwREIwMDBGRkIxOENGRkVGRkRGOEU3QkZGRkYxRkUzRUY3RkU5NUI4Cis6MTAwREMwMDAzRUJGRkZGRkZGRkFGMEJGRkZGRkZGRkVGMUMwMDAwMEQ0Cis6MTAwREQwMDAwMTA0MDAwMDAwMDA4MDAyMDAwMDEwMDAxMDAwMTAwODU0Cis6MTAwREUwMDA0MTgwMTAwMDAwMDgxMDg0MDAwQzA0MDI2MTAwMDA4MUEyCis6MTAwREYwMDAwMDAwMDAwMDNERjA3RkZGRkZGRkZFRkRCRkZGRkZGRjkzCis6MTAwRTAwMDBGRkZGN0ZGRkZFRkRCRkZGRkZGRkZGRkZGRkZGRkZGMUMzCis6MTAwRTEwMDA3RkJGRjc3RkVGRkZFRkZGRjdGREZGRkZGRDdGRkZCRTE3Cis6MTAwRTIwMDBERkZGRkZEOUYwQkZGRkZGRkZGRUYwQkJGRjdGRkJGRjNGCis6MTAwRTMwMDBGQkZGQkZGRkYzN0ZGQkZERUI3RkRGRkFGRkRFRjBFRDkzCis6MTAwRTQwMDBGRkIxRjdGOTFGQjU1QkZFN0VGN0JFRkQ3RjVGQjVGNzFCCis6MTAwRTUwMDBGRkZGRDBGMDRGRkZGRkZGRkVGODMwMDEwMDA3NDIwMTE3Cis6MTAwRTYwMDAwMDZBMTg1MDgwMDAwMDAyNDAwMTAxMjAwMTAxMjQxNDkyCis6MTAwRTcwMDAyMTEwMDIwODA3MDgwMDQwMTA4MDU4MDA4NDgwMTgxMEQ0Cis6MTAwRTgwMDA0MEMxRjBCRkZGRkZGRkZFRkZGRkZGRjdGRkRCQjdGMzNGCis6MTAwRTkwMDBERjdDRjg3NEZGRkY2RjdEM0Y3RUVDN0ZDMUY1RkZDRkY1Cis6MTAwRUEwMDA2RjlGRjlERkJFRTVFN0ZGRDdGM0RERkJGRkZDRkZCRjc4Cis6MTAwRUIwMDBGRkYwRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjUyCis6MTAwRUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRjQwCis6MTAwRUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIyCis6MTAwRUUwMDBGMDJGRkZGRkZGRkVEN0ZGRkZGRkI0Q0ZFRjc3NkY3MzQ5Cis6MTAwRUYwMDAzQTRBM0FDQkQ0RjcyRUQ2QkRCREExM0JERkQ2RjdFRUFBCis6MTAwRjAwMDBEMzM1QkRGQkJEQ0VFQjJCNEQyRkJCREFGRkZGRkVCMEMzCis6MTAwRjEwMDA1RkZGRkZGRkZFQkZGRkZGRkZERjVGMzZBRjNGRURCN0I1Cis6MTAwRjIwMDBGNUZERjMyQkVGNzdGRkZCREFCMUJEQTM3NzY5N0Y0RkI4Cis6MTAwRjMwMDBGRkRCRkE1QkZGRjJGRUZGOTZGRkZGRkVERkZGRDBBRkE1Cis6MTAwRjQwMDBGRkZGRkZGRUZGRkZGRkZEOEZGRDQwNkY5RTgzNUEwRkU3Cis6MTAwRjUwMDBGQUMzRkZGRkZDRTk3RkYzMDFEMDAwRkVCRkNEM0ZGMEY1Cis6MTAwRjYwMDBFRkZDQzUwQzNGRkQ2ODBCRkZGRkZGRkVERkYwRkZGRjRFCis6MTAwRjcwMDBGRkZGRkVGRkJCRkZGRDg1RkZENDZGOUZDMzVBMEZGRjJFCis6MTAwRjgwMDBGRkZGRkZGQ0U5N0ZGMzAxRjBGQkMyQkZGQzAwMzdFRjdFCis6MTAwRjkwMDBGQ0NEQkMzRkZGMENCRkZGRkZGRkZGRkZGMDVGRkZGRjdCCis6MTAwRkEwMDBGRkZFRkZGRkZGRkZEOUY3RDFCNzdFN0ZGMUU0RkRGRjIyCis6MTAwRkIwMDBGQkZCRkY1RkZGN0ZCMUJDMEY2N0VCQjgzRkZGRTJGRkJBCis6MTAwRkMwMDBFOUZGRkRFM0ZGM0Y5RkMyRkZGRkZGRjA5RkZGRkZGRjMxCis6MTAwRkQwMDBGRUY1N0ZGRkYwM0ZCQ0ZGRDVGNUNFM0ZGRUZGRkU2RDc3Cis6MTAwRkUwMDBGRkYxQkY3QkZGRjFGREZGNEZGRjg3RkZBRUZGQjFGOEMxCis6MTAwRkYwMDBGRUZGRkY3ODAxQjlGRkZGRkZGQUYwMkZGRkZGRkZGRUIyCis6MTAxMDAwMDBGM0MwMDAwMDAwMDQwMjEzMDIwMDgwNDAwMDkwMTAwMEIyCis6MTAxMDEwMDAxMDAwMDIwMDAxMjA4MDEyMTAwMDQwMDgwMDA0MDAwMEFGCis6MTAxMDIwMDAwMjAwMDE0MDAwODAwMDAwM0NGMEVGRkZGRkZGRkVGREVBCis6MTAxMDMwMDAxRkZGRkZGRjdGRkZGRkZGRkY3RkZGN0ZGN0RGRjdGRjUwCis6MTAxMDQwMDBGN0ZCRUJEMUZGRkZGRkZGRUZGN0ZGRkZGQkZGRkVGRjFCCis6MTAxMDUwMDBGRjdFRkZGQkZGRkZGRkRCRjBGRkZGRkZGRkZFRjBGRjY4Cis6MTAxMDYwMDBGRkI3RUJGN0RGRkZGRUY1NkJFN0VERjczRUVDRkY1NDY0Cis6MTAxMDcwMDBFRjZGRjFGNUFGNkZGNkZERkZERDdCRkZFRkJGN0ZGRjk5Cis6MTAxMDgwMDBGRkY3RkZGMzVGRjdEMEYwQ0ZGRkZGRkZGRUY4MzAwMDcwCis6MTAxMDkwMDA4MDQwMDQwMDgxMkMwNDI0MDAwMjAxQzgwMjAwMDIyNEM0Cis6MTAxMEEwMDAwMDAxQjQ0MkRDNDQwMjE1OTAwMjAzNDgzOTEwMDIyNEM2Cis6MTAxMEIwMDBBMEJBMDAwMDQwQzFGMEJGRkZGRkZGRkVGRkZGRkZGRjJGCis6MTAxMEMwMDBGRUZDRjdGMEVFQjY1REZERjVGRkRCRjc3RjdGQkVGRkMwCis6MTAxMEQwMDBDMUZFQkZGQUZBNUZGRkFERkZFRkZGN0ZERjdGRkVCRjBDCis6MTAxMEUwMDBCNzk0QkZGRkZGRjA5RkZGRkZGRkZFRkZGRkZGRkZGRjczCis6MTAxMEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTBFCis6MTAxMTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGCis6MTAxMTEwMDBGRkZGRkZGRkYwOEZGRkZGRkZGRUQ3RkZGRkZCQjVGRkQ1Cis6MTAxMTIwMDBFRjdDRUIyQjUyNUIzQkRBRDRGMzM2OTZCNUJERjFGQjhCCis6MTAxMTMwMDBEQUVFRjZGRUQzMzVCRERGQURDRkVGN0VDRDZCQkJERjk0Cis6MTAxMTQwMDBGRkZGRkRCMEVGRkZGRkZGRkVCRkZGRkZGRkQzNUZGNjI2Cis6MTAxMTUwMDBGRkY2RkZGREFERkRGRjdGRUZGRjZGN0ZEQkYxQTVBMzg2Cis6MTAxMTYwMDA3RjZGNkI0RkZGREJGQkNCRkZGNkZGRjREN0ZEQkZGRUJFCis6MTAxMTcwMDBERkZGRDBDRkZGRkZGRkZFRkZGRkZGRjdERkZGRkZGRjI3Cis6MTAxMTgwMDAzRjdGRkNFNUZGMjBGRUZGRkZERjdGRkZGMTdGRkZGRURCCis6MTAxMTkwMDBGRkYwN0MzRDRGRjNDMzNGRkZGRjZGQzNGRjBGRkZGRjI3Cis6MTAxMUEwMDBBRkYwMkZGRkZGRkZGRUZGRkZGQkI3RTAwRkZGRkYyQkFFCis6MTAxMUIwMDBGRjdEQkZGRkRGRkZGRkY4OUY3RkZGRjE1NUZGRkZGRkMwCis6MTAxMUMwMDBGRDdDM0NGRkYzQzMzRkZGRkZFRkMzRkZERkZGRkZGRkVCCis6MTAxMUQwMDBGMDlGRkZGRkZGRkVGRkZGRkZGRkVGRkZGRjlGQkY3RkJGCis6MTAxMUUwMDBGOTE5NDc4RUU3OUYzRjE3RkZGQzgxQzE3RUYzRDlGOUJDCis6MTAxMUYwMDA3M0RGRjQ3RkZBRkZGRkZGRkI3Rjc3QzdGRkZGRkZGMDhFCis6MTAxMjAwMDAyRkZGRkZGRkZFRjVGN0ZGRkJGRkY3M0ZGQ0JGM0UzRjYxCis6MTAxMjEwMDBFQ0ZGODFBRkZFNEZGM0JCRkZGMDdFRkY2RkZGODdGRjU4Cis6MTAxMjIwMDBCQkZGRDVGQ0ZGN0ZGQzZGRkZFRkU3RkZGRkZBRjAzRjRFCis6MTAxMjMwMDBGRkZGRkZGRUYzQzAwMDAwMDAwMDAwMDAwMDAwMDA4MDgwCis6MTAxMjQwMDAwMDMwMTA2MDIwMDAwODAwMDEyMDgwMDAxMDAwMDQwMDIxCis6MTAxMjUwMDAwMDAwMDAwMDAwMDIwMDgwNDAwMDA4MjAzQ0YwNkZGRjBBCis6MTAxMjYwMDBGRkZGRkVGNUJGRkZGRkZFRkZGRkZGRkY3RkZFM0ZGRjFCCis6MTAxMjcwMDBGRkZGRkZGRkVGRkZGRkYxREZERkZGRkZGRjdGREZGRjdDCis6MTAxMjgwMDBGREJERkZGRkZGRkJERkZGRkZGRkZGNUJGMEZGRkZGRjg5Cis6MTAxMjkwMDBGRkZFRjBCRkJGQkZGRkY3RkJGRkZFRUVGQUZGRkZGRjUxCis6MTAxMkEwMDAzRDNCRkZGRkZFRkJGMUZGQkY3QkZGRkZFRkZGQkZGRkZCCis6MTAxMkIwMDBGRkZGRkZGRkZFRkZGN0VGRkZGQkQwRjBERkZGRkZGRkI5Cis6MTAxMkMwMDBGRUY4MzAwMDAwMDAwMDAwMEIxMDA1MDEwMDA4MDAwMkNECis6MTAxMkQwMDAwMTAxMDAwMDEwMDFDODA4MDAwMDAwMDA0MjAyMDAwMEU3Cis6MTAxMkUwMDAwMDgwMDIwMDAwNDAyNDgwMDBDMUYwM0ZGRkZGRkZGRUFECis6MTAxMkYwMDBGRkZGRkZGRkY3RkRGN0ZBRUZFRUY5RkRGRkY3RkVCRjg3Cis6MTAxMzAwMDAxRkZEOUVGREQxRUZGRkY3N0Y5RkZGRUZGRkY2RkZGRTcyCis6MTAxMzEwMDBGRTdCRkZCREZGN0VGRkZGRkZGMDNGRkZGRkZGRkVGRkY1Cis6MTAxMzIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTAxMzMwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNCCis6MTAxMzQwMDBGRkZGRkZGRkZGRkZGRkZGRjBBRkZGRkZGRkZFRkZGRjBECis6MTAxMzUwMDBGRkY3RkZGRkZGRkY3RkZGRkZGRkRGRkRGRkZGREZGRjY3Cis6MTAxMzYwMDBGRjVGRjFCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdCCis6MTAxMzcwMDBGRkZGRkZGRkZGRkZGRkYwREZGRkZGRkZGRUZGRUZGRkJECis6MTAxMzgwMDBGN0ZGRkZGRkZGRkZGRkZGRkYzRkZCRkZGRkVGRkJGRDRGCis6MTAxMzkwMDBGRkYxRkZGRkZCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjZGCis6MTAxM0EwMDBGRkZGRkZGRkZGRkZGMDJGRkZGRkZGRkVGN0ZGRkZGRjM1Cis6MTAxM0IwMDBGRkZGRkZGRkZERkZGRkZGRkZGRkZGN0ZGRkZGRTdGRkQ3Cis6MTAxM0MwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjNCCis6MTAxM0QwMDBGRkZGRkZGRkZGRjBGRkZGRkZGRkZFRkZGRkZGRkZGRjJECis6MTAxM0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkNGRkZGQkZGRkJGMTUzCis6MTAxM0YwMDBGRkZGRkJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAxCis6MTAxNDAwMDBGRkZGRkZGRkYwMkZGRkZGRkZGRUZGRkZGRkZGRkZGRkNDCis6MTAxNDEwMDBGRkZGRkZGRkZGRkZGRkZGN0JGRkZGRkY3RkZGRjFGRkVFCis6MTAxNDIwMDBGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVDCis6MTAxNDMwMDBGRkZGRkZGMDdGRkZGRkZGRkVGRkZGRkZFRkZGRkZGRjVDCis6MTAxNDQwMDBGRkZGRkZGRkZGRkZGRkRGNTdGRkZFQkZGQkYxRkZGRkM3Cis6MTAxNDUwMDBGREY3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE2Cis6MTAxNDYwMDBEN0ZGRjA3RkZGRkZGRkZFRkZGRkZGRjdEQkZGREJGRDk2Cis6MTAxNDcwMDBGNkZGRjZGRjNDQkNCQ0JGREY2RkVGMkZGMTNDQkZCQ0ZCCis6MTAxNDgwMDBCRkRGNkZGRjZGRjdEQkZGREJGREY2RkZGNkZGRkZGRjUwCis6MTAxNDkwMDAwMUUyRUZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjg4Cis6MTAxNEEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRDCis6MDYxNEIwMDBGRkZGRkZGRkZGRkYzQworOjAwMDAwMDAxRkYKKy8qCisgKgorICogRmlsZSB5YW0xazJiNS5tY3MgY29udmVydGVkIHRvIGggZm9ybWF0IGJ5IG1jczJoCisgKgorICogKEMpIEY2RkJCIDE5OTgKKyAqCisgKiBUdWUgQXVnIDI1IDIwOjI0OjA4IDE5OTgKKyAqCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3lhbS85NjAwLmJpbi5paGV4IGIvZmlybXdhcmUveWFtLzk2MDAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3YTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3lhbS85NjAwLmJpbi5paGV4CkBAIC0wLDAgKzEsMzQyIEBACis6MTAwMDAwMDBGRkYyMDBBNUFERkZGRTlGRkZFRkZCQ0JGRkRCRkVGMjkzCis6MTAwMDEwMDBGRkY2RkY5Q0JGRkRCRkVGMkUzRjZGRjFGREI0RkRCRkFDCis6MTAwMDIwMDBGRjZGRkY2RkZGMEJGRkRCRkZGMkZGRjZGRkZGRkZGRjJFCis6MTAwMDMwMDBGMDZGRkZGRkZGRkVGRkZEREZGRkZGRkZGN0ZGRkZGRjlBCis6MTAwMDQwMDBGQkZGRkZGN0ZGRkZGRkZFRkY3RkYxRkZGRUZGQkZCRkRDCis6MTAwMDUwMDBGRkZGRkZGRkZGRjdGRkZGRkZGRUZGRkVGRkZGRkZGMEM5Cis6MTAwMDYwMDBFRkZGRkZGRkZFRkZGRkZGRkZGRkZGQkZGRkZGRkZGN0Y5Cis6MTAwMDcwMDBGRkZGRjdFRkZGRkZGRkZGRkZGMUZGRkZGRjdFRkZGRjM3Cis6MTAwMDgwMDBGRkZGRkZGRkRGRkZGRkZGRkZGRkZERkZGRkZGRjBERkQxCis6MTAwMDkwMDBGRkZGRkZGRUZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRjkxCis6MTAwMEEwMDBGRkZGRUZGRkYzRkJGRUZGRjFGRkZERkZGRkZGRkZGRjkxCis6MTAwMEIwMDBGRkZGRkZGRkZGRkZGRkZFRkZGRkZGREZGRkYwN0ZGRjAwCis6MTAwMEMwMDBGRkZGRkVGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRjUxCis6MTAwMEQwMDBGRkZGREZGRkZGRkZGN0YxRkZGRkZGREZGRkZGRkZGRjg2Cis6MTAwMEUwMDBGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGMDBGRkZGRjIwCis6MTAwMEYwMDBGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRjkxCis6MTAwMTAwMDBGRkZGRkZGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGNTE3Cis6MTAwMTEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAyRkZGRkZGRkNFCis6MTAwMTIwMDBGRUZGRkZGRkZGRkZGRkZCRkZGRkZGRUZGRjdGRkZFRjg0Cis6MTAwMTMwMDBGRkVGRkY3RkVGRjFGRkVGRkY3RkZGRkZGRkZGRkZGRjBECis6MTAwMTQwMDBGRkZGRkZGRkZGRkVGRkZGRkZGRkYwOUZGRkZGRkZGRTMwCis6MTAwMTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFGCis6MTAwMTYwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkFECis6MTAwMTcwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMEJGRkZGRkZGRkVGRkRGCis6MTAwMTgwMDBGRkZGRkZCREZGRUY3RkVGN0ZGQkRGRDM1QUZFRDdENjI4Cis6MTAwMTkwMDBGNzdGQkRGMUJCNURENkY3RkU5NkZGQkRBRkFEQkZFRkZDCis6MTAwMUEwMDA3RjZCN0ZGQkQ2RkVGN0ZGMTBFRkZGRkZGRkZFQkVFRjdBCis6MTAwMUIwMDBGRkZGREJGRkY2RkZGNkZGRkRCRkZEQkZGRjdGRkY3RjA5Cis6MTAwMUMwMDBERkRCRjFGRDM1RkY2RkZGNkZGRkRCRkZDQkZGRjZGRkRFCis6MTAwMUQwMDBGMkZERkRCRkZGRkZGRkQwRUZGRkZGRkZGRUZGRkZGRkMwCis6MTAwMUUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRjU1RkZDQ0MwM0ZGRkZCCis6MTAwMUYwMDBGRkYxMjRGMEZGRkZDRkVGM0ZGRkYwRkZGRkZGRkMzRkQ5Cis6MTAwMjAwMDBGRkZGRkZGRkZGRkZGMENGRkZGRkZGRkVGRkZGRkZGRjNFCis6MTAwMjEwMDBGRkZGRkZGRkZGRkZGRkZGRkY1NUZGQ0NDMDNGRkZGRkNBCis6MTAwMjIwMDBGMTAwRjBGRkZGQ0ZERkZGRkZGMEZGRkZGRkZDM0ZGRjFDCis6MTAwMjMwMDBGRkZGN0RGRkZGRjBGRkZGRkZGRkZFRkZGRkZGRkZGRjYwCis6MTAwMjQwMDBGRkZGRkZGRkZGRkZGRkZGREZGRTdGREZGRkZGRkZGMThECis6MTAwMjUwMDBGRkNGRkZGM0ZGOTdGRkZGOEZFN0ZGRkZGQzcxRkZGRjZCCis6MTAwMjYwMDBGRkZGRkZGRkYwRUZGRkZGRkZGRUY1RkZCRkZGRkZGRjA4Cis6MTAwMjcwMDBGRkZGRkZGRkZGRkZFM0Y3RUZGRkZGRkM3QkZGRjEzRjE3Cis6MTAwMjgwMDBGRkVGRkZDRkUzRTNGRkZGRkZGRjNGRkZGRkZGQkZGRkY2Cis6MTAwMjkwMDBCRkZGREFGMDdGRkZGRkZGRkVGMkMwMDAwMDAwMDAwMEFBCis6MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDRECis6MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAyMDAwMDAwMDAwMDNCCis6MTAwMkMwMDAwMTNDRjBBRkZGRkZGRkZFRkRCRkZGRkZGRkZGRkZGRkExCis6MTAwMkQwMDBGRkZGRkZGRkZGREJGRkZGRkZGRkZGRkZGMUZGOUZGRkMwCis6MTAwMkUwMDBGRkZGRjdGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM2Cis6MTAwMkYwMDBEQkYwN0ZGRkZGRkZGRUYwQkJERkZGRkZGRkZGRkZGRjM1Cis6MTAwMzAwMDBGRkZGRkZGRkZGRkZGRkVGRkJERkJGRjFGRUZERjdGRjhBCis6MTAwMzEwMDBGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRjc3RkRGMjg1Cis6MTAwMzIwMDBGMDFGRkZGRkZGRkVGODM4MDAwMDAwMDAwMDAwMDAwMzkwCis6MTAwMzMwMDAwMDAwMDAwMjAwOTAwMDAwMDAwQzAxMDAwMDA0MjQwMEY2Cis6MTAwMzQwMDA0MDAxMDAwMDAwNDAwMDAwMDAwMDAyMDAwMDAxQzBGMDc5Cis6MTAwMzUwMDA0RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjVFCis6MTAwMzYwMDBGRkZGQkZGRkZGNkZGRkRGRkZEMUZGRkVGRkZGRkZGRkJDCis6MTAwMzcwMDBGRkZGREZGRkZCRkZGQkVGRkZGRkVFRkZGRjdGRjBERjg1Cis6MTAwMzgwMDBGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdFCis6MTAwMzkwMDBGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRjdCCis6MTAwM0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwOEZGRkRDCis6MTAwM0IwMDBGRkZGRkVGRkZGRkZGNUFERkY2OTJBRUQ2QkZCREYzQUE0Cis6MTAwM0MwMDBEQ0Y0OTZFRUIzM0QzNUMxQkJEREZFRjZGRUQ2QjVBRDMxCis6MTAwM0QwMDBCRkE1QUQ0OTJGNEYyQkRBNUZGRkZGRkZGMDJGRkZGRkM3Cis6MTAwM0UwMDBGRkZFQkZGRkZGRkI1QkY3RjZGRkY2RkZGREJGRkRBNUJFCis6MTAwM0YwMDBGMzZGRjM2RUZBN0JEMUZEQjU3NzZGRTk2RkZGREJGQjJGCis6MTAwNDAwMDBEQkRGRjZGRkY2RkZGRDNGRkVGN0ZGRDA0RkZGRkZGRkZDCis6MTAwNDEwMDBGRUZGOUZGRkZGMEZGRkMwM0Y5QzAzRkZGRjhCQTVGRTZBCis6MTAwNDIwMDA4MDNFQzJCRkFDQjEyNEZGRkZGRkZGRkZGRjBGRkZBMzYxCis6MTAwNDMwMDBGRkZENkJGRkZGRjBBNUZGRkZGRkYwQUZGRkZGRkZGRTJCCis6MTAwNDQwMDBGRkZGRkZGRjBGRkZDMDNGRDQ2QkZGRkZEQkZGRkU4NjA4Cis6MTAwNDUwMDBCRkMyQkYzMEExMjRGRkZGRkZGRkNDRkYwRkZGQTNGRkYwCis6MTAwNDYwMDAwNTZCRkZGRkYwQTVGRkZGRkZGMDdGRkZGRkZGRkVGRjIzCis6MTAwNDcwMDBGRkZGRkJDN0ZGQzRGRkZGN0ZGRkVDRkU3RkRGRDhCOUE0Cis6MTAwNDgwMDA0N0ZDMzZDMURGRkZGRkY5RkZGM0ZGRjdGRkZDRkZGRDdECis6MTAwNDkwMDAzRkZGRkZGRjNGRkZGRkZGRjA3RkZGRkZGRkZFRjVGRjg2Cis6MTAwNEEwMDBGRkZGRkZGRUZGRkY3RUJEM0ZGRjJCRkUyRkY1QTNGQ0VFCis6MTAwNEIwMDA1QkZFNjE5RjdGRUZGRkZGQTdGQkZGRkZGQUZFRkYzM0FECis6MTAwNEMwMDBGMUZGQkZGRkZGRkZGQUYwN0ZGRkZGRkZGRUYxQzAwMDZCCis6MTAwNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDMwMjQwNDg0Cis6MTAwNEUwMDAwMDAxMDA4MDQwMDAwODAwMDAwMDAyMDEwMTAwMDIwMDNECis6MTAwNEYwMDAwMDAwMDAwMDAxM0RGMDJGRkZGRkZGRkVGREJERkZGREVFCis6MTAwNTAwMDBGRkZGRkZGRkZGRkJGRkZGN0ZGNkVGQkZGN0ZGNzNFQjgwCis6MTAwNTEwMDBGMUZGRkZGRkRGRkZGRkZGRkZGRkY5RkZGREZFRkZGRjIyCis6MTAwNTIwMDBGRkZGRkZGRkQ5RjBERkZGRkZGRkZFRjBCRjdGRkZGRjAwCis6MTAwNTMwMDBGRjdGRkZGRkRFRkZGRkVGRERERTc3RjJGQkVERTdGMTkwCis6MTAwNTQwMDA3M0ZERkRERkZGN0RCRURGRkZGQkZGRUZGRkVGRkZGRjcyCis6MTAwNTUwMDBGRkZGRkZEMEYwQkZGRkZGRkZGRUY4MzAyMDAyMDAyMkI4Cis6MTAwNTYwMDA0MEMwMDAwMDAwMDgwMDAyNDEwMjEyMDAyMTg3ODEwMDAzCis6MTAwNTcwMDAwMDgwMDQwQjI4MDFCMDAwODIwMDQwMDAwMDAwMDAwMDUxCis6MTAwNTgwMDAwMDAwQzFGMERGRkZGRkZGRkVGRkZGRkZGRkZGRkRGRkU5Cis6MTAwNTkwMDBGN0ZGRkU3RkVENzlGRkRFRUI3Rjc0RjdGN0UxRjlGRjAwCis6MTAwNUEwMDBGNjVGN0ZGRkZGRkZEN0RCRUZGRkJCRkZGRkZGQ0NGRjU3Cis6MTAwNUIwMDBGRkZGRjBDRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRjhCCis6MTAwNUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRjQ5Cis6MTAwNUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJCCis6MTAwNUUwMDBGRkYwMEZGRkZGRkZGRUZGRkZGRkZEM0RDRDQ5N0Y2RkQ3Cis6MTAwNUYwMDAyQkJBNUNEMkRBRjZGMzNFRjdGRkJERjFGQURGRkVGNzc1Cis6MTAwNjAwMDBDQ0Y2QkJBNUIzQURCRjZGN0Q2RjZCREJERkJERkZGRTZGCis6MTAwNjEwMDBCMDVGRkZGRkZGRkVCRkZGRkZGQkRCNTdGNkZFOUZENTdFCis6MTAwNjIwMDBCN0ZGQUZFNTNGRkZGRjZGRkZEQkYxRkRCRkZGNkY2OTc2Cis6MTAwNjMwMDA2Q0RGREFERkNCRkZGNkZGNzZGREZEQkZGRkZGRkZEMEZCCis6MTAwNjQwMDAzRkZGRkZGRkZFRkZGRkZGRkZGREJEMDgwMzg5NEY1QTdECis6MTAwNjUwMDAwRkYwRkZGOEJGRkZGRkZGRkZGMTVBRkZGRkZGRkZGM0FGCis6MTAwNjYwMDBGQUEwRjBGMkJGRkZGRkZGRkZGRkZGRkZGRkZGRjBGRjY5Cis6MTAwNjcwMDBGRkZGRkZGRUZGRkZGRkZGRkNGRDAwNkJGRkZGNUEwRkI4Cis6MTAwNjgwMDBGMEZGRkZGRkZGRkZGRkZGRjE1QUZGRkZGRkZGQjNGNTkyCis6MTAwNjkwMDA1MEYwRjBGRkZGRkZEN0ZGRkZGRkZGRkZGRkYwN0ZGRkVFCis6MTAwNkEwMDBGRkZGRkVGRkZGRkZGREJDRkZFNEU3NzFGRkY5QzRGNEFECis6MTAwNkIwMDA3RjdGQ0ZGRkZGRkZGRkYxRkZGRkZGRkJGNzczQkYxNDRCCis6MTAwNkMwMDBGRkU2RkZGRkUxN0RGRkZGRTdGRkZGRkZGMDNGRkZGRkRBCis6MTAwNkQwMDBGRkZFRjVGRkZGRkVEMkZBRkZDNEY0NUNCRkZBRkZGRjk2Cis6MTAwNkUwMDBFQzdFQkZGRkZGRkZGMUZGRkZFRkZGRkY2QkRCRkZERkU0Cis6MTAwNkYwMDBGOUZCQkZGRkYxRkZCRkZGRkZGRkZCRjBCRkZGRkZGRkY1Cis6MTAwNzAwMDBGRUYzQzAwMDAyMDAwMDAwMDA4MjAwMDAwMDAwODAwMDM0Cis6MTAwNzEwMDAwMDAwMDA0MDAwMDEwMDAwMDAwMTA4MjAwMDAwMDAwMDZGCis6MTAwNzIwMDAwMTAwMDEwMDAwODAwMjAwMDEzQ0YwNUZGRkZGRkZGRUJFCis6MTAwNzMwMDBGREJGRkZGRkZGREZGRkZGRkZGRjdGRkZERkZGRUZGRkRCCis6MTAwNzQwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkY3RkZGQkZGRkRGRkQ1Cis6MTAwNzUwMDBGRkZGRkZGRkZGRkRGRkZGQzNGMEFGRkZGRkZGRkVGMDU2Cis6MTAwNzYwMDBGRkRGRkZGRkY3MjNGRkZGRkRGRkVGRkZGRTdGN0RGN0JBCis6MTAwNzcwMDBGRUZGN0Y3MUZGRkI3RkZGRkZGRjZFRkRGN0ZERkZCRkY5Cis6MTAwNzgwMDBGRkJGRjlGREZGREZFRkYwRjBBRkZGRkZGRkZFRjgzMDM2Cis6MTAwNzkwMDA0MDAxMDA4MzAwMDAwMDBDMDYwODA0MjYyNjAwMDAwNjI1Cis6MTAwN0EwMDAwMzAwMDEwMDAwMDAwMDA0MDA3MDA4ODAwMDIwMDEyMDA4Cis6MTAwN0IwMDAwMDAyMDAzMDAwMDBDMUYwNUZGRkZGRkZGRUZGRkZGRkZGCis6MTAwN0MwMDBGRkZGN0IzRkY3RkZEN0ZFRkVGQkZFM0JGRUJERkYyRjhCCis6MTAwN0QwMDBGRjcxRkZGQjdGRTdGRkY5RUZGRkQ3RkFGRkI3QkJGRTIzCis6MTAwN0UwMDBGRkZGNzRGRkY3RkZGMENGRkZGRkZGRkVGRkZGRkZGRkVDCis6MTAwN0YwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA5Cis6MTAwODAwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA2Cis6MTAwODEwMDBGRkZGRkZGRkZGRjA4RkZGRkZGRkZFRkZGRkZGRkZCNUIyCis6MTAwODIwMDBCRDZGN0NFQjdGRkJEQkQzNEJFRUQ2RjZCN0ZEQUNBMTA3Cis6MTAwODMwMDBGQkRGRkVGN0Y0OTZCREI0QzVBNUFGNkY2OTRGN0ZCQTc1Cis6MTAwODQwMDBEQkZGRkZGRkYwM0ZGRkZGRkZGRUJGRkZGRkZGREJGRjEwCis6MTAwODUwMDBGNkZGRjZGRkJEQkZBNUJGRkY3RDdGRUZGRkZCRjFGREZDCis6MTAwODYwMDBCRkZGNkZGRjZCN0FEQkZGREJERkY2RkVCNkZERkRCRjgwCis6MTAwODcwMDBGRUY3RkZEMEVGRkZGRkZGRkVGRkZGRkZGRkY0MkZGRkFDCis6MTAwODgwMDBGQzQzNkJGRkZGRkYwREZGRkMzMzNGRjA1RkYxRkZGRjA5Cis6MTAwODkwMDBGRkZGRjlERUYwNENGRTc3QUZGRkZGRUZGRkYwRkZEQjZECis6MTAwOEEwMDBGRjVGRjBFRkZGRkZGRkZFRkZGRUY3RkZGMDJGRkZGRDAyCis6MTAwOEIwMDA0MzdGRkZGRkYxMEZGRkZDMzMzRkZGQUZGMUZGRkZGRjZGCis6MTAwOEMwMDBGRkY2RDdGRkJDRkRCREZGRkZGRkZGRkZGMEZGRkZGRkZGCis6MTAwOEQwMDBGRkYwRUZGRkZGRkZGRUZGRkZGRkZGRkNGRkZGRkJGMTVECis6MTAwOEUwMDBCRkZGRjlGRENGRjI3MEZGMUY5RkYzRjFGRkZGRkZGRjg2Cis6MTAwOEYwMDBGQ0Y3RkYxMzlGRkNGRkZGODRGN0ZGRkY0N0ZGRkZGRjlECis6MTAwOTAwMDBGMEJGRkZGRkZGRkVGNUZGRkZGRkYxRkNGRkZFRkU3OUVBCis6MTAwOTEwMDAzRkZGMUQ0NkNGRkZDRkZDN0JGRkYxRkZGRkZGRkZFRDQ5Cis6MTAwOTIwMDBGM0FCRkZDQkZGRjhGRkZDRjVGRkJGRkZGRkZGRkFGMEQzCis6MTAwOTMwMDA4RkZGRkZGRkZFRjNDMjAwMDAwMDAwMDAwMDAwMDEwMDc3Cis6MTAwOTQwMDAwMDAwMjAwMDIwMDAwMDA0MDgwMTAwMDAwMDAwMDAyMDNBCis6MTAwOTUwMDAwQzAwMDAwNDAxMDAwMTAwMDA4MDAwMDAwMTNDRjA3RjU5Cis6MTAwOTYwMDBGRkZGRkZGRUZEQkZGRkZGRkRGRUZGRkZGRkZGRkVGRkRFCis6MTAwOTcwMDBERkZGRkZGN0ZGRkZGRkVGRjFGRkZGRkZGRkZGRkZFQkUxCis6MTAwOTgwMDBGRkRGRkZGRkZCRjc3RkZGRkVGRkZGQkZEQkYwRkZGRjk3Cis6MTAwOTkwMDBGRkZGRkVGMEZGRkZGRkZGRkZERkZGRkZGRjdGRjdGRjFGCis6MTAwOUEwMDBCRkJGQ0ZGRkZGRkYzRUYxN0ZGRkZGRUZGRkZGRkZGRTY3Cis6MTAwOUIwMDBGRkZERkZCRkJERkVGRkZCRjdERkZCRDBGMDlGRkZGRjlBCis6MTAwOUMwMDBGRkZFRjgzMDIwMDA0MDAxODBDMDMwMDAwMDIwMDAxMDAxCis6MTAwOUQwMDA1MDg4MjAwMDAwMTMwMTAwMDAwMDAwMDAwMDEwMDAwMEZCCis6MTAwOUUwMDAwMDAwMDE4MDA4MDAwMEEwMDAxMEMxRjBFRkZGRkZGRjMxCis6MTAwOUYwMDBGRUZERUY3RkZGRkZCRkZGRjdGRkVGRkJGRDc3RUZCRkQwCis6MTAwQTAwMDBGNzdGRkZGRkJGRDE3RkZGRkZGN0ZGRkZGRkZGQUZGRkM0Cis6MTAwQTEwMDBERkY3RkJGRkZERkZGQ0ZGRkRGRkYwRkZGRkZGRkZGRTI5Cis6MTAwQTIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ2Cis6MTAwQTMwMDBGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkQ0Cis6MTAwQTQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGMDVGRkZGRkZGRkVGRjY2Cis6MTAwQTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZERkZGRkZGRkM2Cis6MTAwQTYwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkE0Cis6MTAwQTcwMDBGRkZGRkZGRkZGRkZGRkZGRTAzRkZGRkZGRkZFRERGRjg4Cis6MTAwQTgwMDBGRkZGQTVGRDZGN0Q2RDdGNTJERjVBNEJFRUI2RUVGMjk0Cis6MTAwQTkwMDBCQkFDQTE1QjRERDZGN0ZFQjJCRDM1QjVCNURENkY3RjAyCis6MTAwQUEwMDBFOTVGNTJERkJERkZGRkYwREZGRkZGRkZGRUJGRkZGRjhCCis6MTAwQUIwMDBGRkRCRkVGNkZGRjZGRkZEQkZGREI1QkZGOTdGNkZGRjYxCis6MTAwQUMwMDBEQkYxRkRCRkZGNkZGRjY5N0ZEQkZGRDNGRkY2RkVGMkI3Cis6MTAwQUQwMDBGRkFEQkZGRkZGRkZEMERGRkZGRkZGRkVGRkZGRkZGNTEyCis6MTAwQUUwMDAzMDBGRkZGRkZENkJDQUZGRjAwRkQ2QkZDRjNGRkZGRkY4Cis6MTAwQUYwMDBGMUZGRkZGRkNBRkVCRkZGRjAwNUFGMEZGRkZDRjBDRjE1Cis6MTAwQjAwMDBGMEZGRkZGRkZGRjBFRkZGRkZGRkZFRkZGRkZGRjUzMEZECis6MTAwQjEwMDAwRkZGRkZGQzNGQ0FGRjBGMEZENkJGRkZGRkY1NUZGMUNFCis6MTAwQjIwMDBGRjhCRkZDM0ZGRkZGRkZGRkZGRjBGRkZGQ0YwQ0ZGMEM2Cis6MTAwQjMwMDBGRkZGRkZGRkYwM0ZGRkZGRkZGRUZGRkZGRkZGQ0ZGRkM1Cis6MTAwQjQwMDBGRkJGOUYzRkZFRkNGRjRGRkZGRkZGRkZGRkY3RjFGRkRGCis6MTAwQjUwMDBERkZFN0UzRjlGRjRGQzdGRkNGRkZGM0ZGRjNGRkUzRjM5Cis6MTAwQjYwMDBGRkZGRkZGMDRGRkZGRkZGRkVGNUZGRkZGQkZGRkVGRjY0Cis6MTAwQjcwMDBGRkZGRkZCRkZCRkZGOEVERkY4RkZGQkJGRkIxRjNFRjAwCis6MTAwQjgwMDA4RkY3RkZGRkRCRkZGRkZGRUZCRkZENzlCRkJGRkZGRjY5Cis6MTAwQjkwMDBGRkZCRjBERkZGRkZGRkZFRjNDMDAwMDAwMDA0MDAwMERBCis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDgwMDAwNDA4MDgwMTAxMDA5MDFGCis6MTAwQkIwMDAwMDAwMDAwNDAwMDgwMDAwMDAwMDA4MDAwNDAwMDAwMTFDCis6MTAwQkMwMDAzQ0YwREZGRkZGRkZGRUZEQkZGRkZGRkZGRkZGRkZGRjZBCis6MTAwQkQwMDBGRkZGRkZGRjlGRkZBRkRGRkZGRkZGRjFGRkZGRkZGRjAzCis6MTAwQkUwMDBCRkVGRkZGRkZGRURGRkZGRkZFRkZGQkZGRkZGRkZDMzAzCis6MTAwQkYwMDBGMDNGRkZGRkZGRkVGMEZGRkRGRkZGRkZGQkZGQkJGRjJFCis6MTAwQzAwMDBGRkZGN0ZGNkZGN0ZGQkZERURGRkYxRkZGRTdGRkZGRkE0Cis6MTAwQzEwMDBGRjVGRkZGN0ZGN0VGRkZERkZFRkZGRkZGRkVGRjBGMDRECis6MTAwQzIwMDA4RkZGRkZGRkZFRjgzMDgwMDAwNDAwMDA0MDAyMDAwMzQ5Cis6MTAwQzMwMDAwMDA1MDQyMDAwMDAwMUQwMDA4MTAwMjAwNDA0MDAwMDExCis6MTAwQzQwMDA4MTA0MDg4MDEwMDBDMDAwMDAwMDIwMDAwOEMxRjA2RjdGCis6MTAwQzUwMDBGRkZGRkZGRUZGRkY3RkZGRkZGRkZGRjNGREZGRURGQzQ4Cis6MTAwQzYwMDBGRkZGOUZGQkZERkZGRkZGRjFGRkZGN0ZGQjNFRkY5RkFECis6MTAwQzcwMDBGRkZGRkZGRkZERjlGRkZGRkZGREZGRkZGRkYwNkZGRjJECis6MTAwQzgwMDBGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjc1Cis6MTAwQzkwMDBGRkZGRkZGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRjcyCis6MTAwQ0EwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMENGRkZGRjkzCis6MTAwQ0IwMDBGRkZFRkZGRkZGRkRCREZGRUY3Q0VCN0ZGQkRCRkFEQzAwCis6MTAwQ0MwMDBFRUY3RjZEN0Y1MkRBMUJCRERFRUY3NTRGN0ZCMkNCNTBCCis6MTAwQ0QwMDBCNEJENkI2RkVGNkZCQkRGRkZGRkZGRjAxRkZGRkZGRkM4Cis6MTAwQ0UwMDBGRUJGRkZGRkZGRkJGRkY2RkZGNkZGRkRCRkZGQkZFRkZECis6MTAwQ0YwMDA2RkZGNkZGQURCRjFDNUJERjU2RkZGNkZDQURCRkZEQjdFCis6MTAwRDAwMDBGQkY2OTdGNkZGRkRCRkZFRjdGRkQwOUZGRkZGRkZGRTRDCis6MTAwRDEwMDBGRkZGRkZGRkZGRkZGRkZGOEI3RkZGRkZFNzYzRkZGRjhCCis6MTAwRDIwMDBGRkZDNzdERkYxREJGRkQ2QTgzRkZGRkYwODJGRjBGRkM2Cis6MTAwRDMwMDBDM0ZGRUJGRkZGRkZGRkZGNUZGMEVGRkZGRkZGRkVGRkQzCis6MTAwRDQwMDBGRkZGRkZGRkZGRkZGRjhCRkZGRkZGRkZGRkZGRkZGRjI3Cis6MTAwRDUwMDBGQ0ZGQ0ZGMURCRkZENkE4M0ZGRkZGMDgyRkYwRkZDMzVBCis6MTAwRDYwMDBGRkVCRkZGRkZGRkZGRkZGRjA1RkZGRkZGRkZFRkZGRjU3Cis6MTAwRDcwMDBGRkZGRkZGRkZGRkZGNUJGRkZDQUZGOUZGRkZBQjlFN0M1Cis6MTAwRDgwMDA5RkYzODFGRkZGRkM3M0Q3RkZGRjc3RkZGREZGRkNGRkExCis6MTAwRDkwMDBGRkZGRkZDRkZGRkZGRkYwMUZGRkZGRkZGRUY1RkZGRjhECis6MTAwREEwMDBGRkY3REVGRkZFN0VGRkJGRkZCRkYxQjNGRkZGRTNGQkY4Cis6MTAwREIwMDBGRkUxMUY3RkZGRjg3OEZGRkIxRUZGRjdGRUU3RkZGRjU1Cis6MTAwREMwMDBGRkJGRkZGRkZGRkFGMDRGRkZGRkZGRkVGM0MwMDAwMDgxCis6MTAwREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDQwMEJGCis6MTAwREUwMDAwMTgwNDA0MDIwMDAwMDA4MDAwMDAwMDAwMzAwMDAwMEQ3Cis6MTAwREYwMDA4MDAwMDAwMTNDRjBBRkZGRkZGRkZFRkRCRkZGRkJGRkU3Cis6MTAwRTAwMDBGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkVGRjdGMTE5Cis6MTAwRTEwMDBGREZGRkZGRkRGRkZFRkZGRkZGRkZGRkZGRkZGN0ZGRjk0Cis6MTAwRTIwMDBGRkZGRkZEQkYwOEZGRkZGRkZGRUYwRkZERkZGRkY3RjI1Cis6MTAwRTMwMDBGRkZGRkZCRUQ3RkZFREJEN0VCRkZFRjY3RkJGNzFGRjk4Cis6MTAwRTQwMDBGRkRBRkZGOUZGQkY3RkZFRkY2RjdGRkZGRkZGRkZGRkFFCis6MTAwRTUwMDA3RkZGRDBGMENGRkZGRkZGRkVGODMwNDIwMDAwMDAwMDIwCis6MTAwRTYwMDA4MEMxMDAwMDkwMDBDNDAwMDAxMjIwNDMyMjgxODQwMDUxCis6MTAwRTcwMDAwMDE0MDAwMTAwMDg4MDAwMDIwMDAyMDAwNDAyMDAwMENCCis6MTAwRTgwMDAxMEMxRjAxRkZGRkZGRkZFRkZGRkZERkZGRkRERkVGRkI0Cis6MTAwRTkwMDBCNjc2RTVCQ0Y5RjdBRjVGQkZGQ0RGQ0ZGMUZGRUY3OUM2Cis6MTAwRUEwMDBGRkJERkZFRkZGRkZGNzZGNUZGRkZGRkRFRkVGQkZGRjNFCis6MTAwRUIwMDBGRkYwOUZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkIyCis6MTAwRUMwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRjQwCis6MTAwRUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIyCis6MTAwRUUwMDBGMEZGRkZGRkZGRkVEQkZGRkZGRDJERkY2OTJBRUY3NzFECis6MTAwRUYwMDBCQkRENUFERkY2RjZENkY3N0RCREQxQjI0QUQ2QjJCRTFCCis6MTAwRjAwMDA5N0Y1QkRCM0FERkZFRjdGNjk2QkZCREZGRkZGRkZGMDMwCis6MTAwRjEwMDAyRkZGRkZGRkZFQkZGRkZGRkZEQkZGRjZGRTlGRDRCRkVCCis6MTAwRjIwMDBFREFGRkY2QjZGRjdGRkREREIzMUZEQkZGRjZGN0ZGRkM1Cis6MTAwRjMwMDBGRkRCRkZDQkRGRjZGRkY2RkZGREJGRkVGN0ZGRDA4RjM1Cis6MTAwRjQwMDBGRkZGRkZGRUZGRkZGRkZEMUZGRjQ2MkY5RkZGRkZGRjdECis6MTAwRjUwMDBBNUZGRkZGRkRGQjdGRkZGRjFGRkZGRkZGN0U5NkFCRjY0Cis6MTAwRjYwMDBGRkZGRkRGRkZGRkQ1NTU3RkZGRkZGRkZBRkYwNEZGRkY2Cis6MTAwRjcwMDBGRkZGRkVGRURGRkZGRDFGRkY0NjJGOUZGRkZGRkZBNUM4Cis6MTAwRjgwMDBGRkZGRkZDMDM3RkZGRkYxOTk4RURDN0ZFOTZBQkZGRkVCCis6MTAwRjkwMDBGMDBGRkZGRkZENTU1N0ZGRkZGRkZGRkZGMDBGRkZGRkIzCis6MTAwRkEwMDBGRkZFRkZGRkZGRkYwN0ZGQzBCRUZGRkZDRkVGOUZGRjZBCis6MTAwRkIwMDBGRkZCRkZFN0ZGRkZBMUUzQ0UzQzU4M0ZGM0ZGRkRFRjUwCis6MTAwRkMwMDBGOUZGRkZGN0YxN0ZGRkNCRkZGRkZGRjAyRkZGRkZGRkUwCis6MTAwRkQwMDBGRUY1N0ZGRkYwRkZGRUZGQzQ3NUU3QjlGRkZGRkZFRkVGCis6MTAwRkUwMDBGRkM3MzczQkZGRjAxMzlFMEZGNEZGRkVGQkZGRkZGOTM3Cis6MTAwRkYwMDBGQ0ZGRkZGRkZGQkZGRkZGRkZGQUYwRUZGRkZGRkZGRTY5Cis6MTAxMDAwMDBGM0MwMDEwMDAwMDIwMDAyMjIwMDAwQzA0MDAwNDAwMEM2Cis6MTAxMDEwMDAwNDA4MDQwQTAxMDExMDIwMjAwMDAwMDQwODA4MDQwMDRDCis6MTAxMDIwMDAwMDAwMDAwMDAxMDAwMDAxM0NGMENGRkZGRkZGRkVGRENCCis6MTAxMDMwMDAzRkZGRkZGRkZGRkZGRjdGRkY3RkZGN0ZGRkNGOURGRjkyCis6MTAxMDQwMDBGRkY3RkRGMUZGRkZGRkVFQkZGRkZGRkZGRkZFRkZGRjFBCis6MTAxMDUwMDBGRkZGRkZGRkZGRkZGRkRCRjA2RkZGRkZGRkZFRjBGRjczCis6MTAxMDYwMDBGRkZGRjdGN0ZGRkZGRUJGRjdGRkZGNUJGRkJGRjdGRkQ1Cis6MTAxMDcwMDBGRDdGNzFGREZGRURGN0ZFRUZGRkZGN0ZGRkZGRkZGRjNECis6MTAxMDgwMDBGRkZGRUZGRjdGRkZEMEYwRkZGRkZGRkZGRUY4MzAxMTAzCis6MTAxMDkwMDAwMDQ4NjA0MDgyNjAyNDYwMDBDQzAwODAwNDAxMDAwMEIxCis6MTAxMEEwMDAxNDAxMEMwNDAwMzAwMDAwMDAwODA4MDAwMTAwQzIwMDE4Cis6MTAxMEIwMDAwMDAyMDA4MDAwQzFGMDVGRkZGRkZGRkVGRkZGRkZGRkE3Cis6MTAxMEMwMDBGNzdCRkZGM0VCQkZGRkY3RkZGRkZGRTc1RDNGRkZGNkE3Cis6MTAxMEQwMDBEMUZERkZFQkY3M0RGRkZGRkY1RkZGN0Y3RkYzRkZGRkRBCis6MTAxMEUwMDBFRkZEQkZGRkZGRjA1RkZGRkZGRkZFRkZGRkZGRkZGRjEyCis6MTAxMEYwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTBFCis6MTAxMTAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGCis6MTAxMTEwMDBGRkZGRkZGRkYwREZGRkZGRkZGRUZGRkZGRkY1QjVERjgzCis6MTAxMTIwMDA2RjdENjk3RkZCREY1MjVGRjZGN0ZFRjZGM0JEQjFEQTQ0Cis6MTAxMTMwMDBDREZFRjZFRUQyQkRBNUFGQkRGRjZGN0NFQjJCRkFEQThDCis6MTAxMTQwMDBGRkZFREZGMDRGRkZGRkZGRkVCRkZGRkZGRkRCRkZGNkZECis6MTAxMTUwMDBGRkY2RkZCREJGQ0RCRkVCNkZGNzZGREZEQjUxRkRCRDBFCis6MTAxMTYwMDBGRjZGRkY2RkZCNUJGRkRCRkZGNkZFRjZGREZEQkZGRUQzCis6MTAxMTcwMDBGN0ZGRDBGRkZGRkZGRkZFRkZGRkZGRkE1MEZGRkZGRjZCCis6MTAxMTgwMDBGMDZGRkZGRkYwOTZGRkZGQzYyQkZGRkZGMUZDRkZGRkE0Cis6MTAxMTkwMDBGN0RCQzNGRjAwRkZGRkZGRkZGRkMxNEZDM0ZGRkZGRkYwCis6MTAxMUEwMDBBRkYwOUZGRkZGRkZGRUZGRkZGRkY1QTBGRkZGRkZGMDg3Cis6MTAxMUIwMDA2RkZGRkZGMDk2RkZGRkM2MkJGRkZGRjE1QUZGRkZGRjA3Cis6MTAxMUMwMDBGM0MzRkYwMEZGRkZGRkZGRkZDMTRGQzNGRkZGRkZGRkEwCis6MTAxMUQwMDBGMENGRkZGRkZGRkVGRkZGRkZGRkZDRkZGRjlGRjA3RjUxCis6MTAxMUUwMDBGRkY5RkM0RkYzRkYyN0VCRkZGQzgxRkM3RkZFN0JGRjQ5Cis6MTAxMUYwMDBGN0ZGMTI3RkZGRkZGRkZGMThGRkZGRkZGRkZGRkZGMDZBCis6MTAxMjAwMDA3RkZGRkZGRkZFRjVGRkZGRkZERkZFRkZGQzdFN0ZCRkRFCis6MTAxMjEwMDBGRkZGQUZFRkZGREZERkZCRkZGMUMzRkU2RkYxQ0YzRjVCCis6MTAxMjIwMDBGQkZGRkZDRkZFRkZGRkZFN0ZCRkZGRkZCRkZBRjBERjM4Cis6MTAxMjMwMDBGRkZGRkZGRUYzQzAwMDAwMDEwMDAwMDAwMDAxMDAwMEZFCis6MTAxMjQwMDAyMDAwMDEwMDEwMDAwMDAwMDEwMDAyMDAwMDAwMDAwMDZBCis6MTAxMjUwMDAwMDAwMDAwMjAwMDA4MDAwMDI4MDAwMDIzQ0YwMkZGRjJFCis6MTAxMjYwMDBGRkZGRkVGREJGRkZGQkZERkZGRkZGRkZGRkZGRkZGRkQ3Cis6MTAxMjcwMDBGRkZGRkZGRkZGRkZGNUYxRkY3RkZGRkZGRkZGRUZGRjI2Cis6MTAxMjgwMDBGRkZGRkZGRkZFRkZGRkZGRkZGRkZGREJGMDJGRkZGRjcyCis6MTAxMjkwMDBGRkZFRjBGRkZGRkZGQkZGQkZGRkZGRkZGRkY3QkZGQkZFCis6MTAxMkEwMDBGRkZGRkZERkY3RkZGMUY3QkZGQkZGRkZGRjdGREVGRjcxCis6MTAxMkIwMDBGRkZGRkZGRkZGRURGN0ZGRkY3RkQwRjAzRkZGRkZGRkQ2Cis6MTAxMkMwMDBGRUY4MzAwMDAwMDAwMDQwMDAwMDAwMDBFMDAwMDA4MDU4Cis6MTAxMkQwMDAyMDAxMDE5MjAwMDEwMTAwRTAxQzYwMjAzMDA4MDgwMDlDCis6MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDgwMDBDMUYwNkZGRkZGRkZGRTYzCis6MTAxMkYwMDBGRkZGRkZGRkZGREJGRUZGRkZERkZGRkM3RkZCQkZGRjBBCis6MTAxMzAwMDBGRkZGRkZGRkYxRjZGRkY3N0UzRkZGN0ZGRkZGRkZGN0Q1Cis6MTAxMzEwMDBGRkZGRkZFREZGREZGRkI3RkZGMDNGRkZGRkZGRkVGRjI3Cis6MTAxMzIwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNECis6MTAxMzMwMDBGRkZGRkZGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNCCis6MTAxMzQwMDBGRkZGRkZGRkZGRkZGRkZGRjBGRkZGRkZGRkZFRkZGRkJECis6MTAxMzUwMDBGRkZGRkZGRkRGRkZGRkZGREZGRkZGRkZGRkJGRkZERjNECis6MTAxMzYwMDA1N0VGRjFGREZFN0ZGRkZGRkZGRkZGRkZGRkRGRkJGRkZBCis6MTAxMzcwMDBGRkZGRkZGRkZGRkZGRkYwN0ZGRkZGRkZGRUZGRkZGRjBECis6MTAxMzgwMDBGRkZGRkY3RkZGRkZGRkZGRkZGRkZGRkZGQkZGREZGRjExCis6MTAxMzkwMDBGRkYxRkRGRjdGQkZGRkZGRkZGRkZGRkZGRkZGRkZGRjJECis6MTAxM0EwMDBGRkZFRkZGRkZGRkZGMDlGRkZGRkZGRkVGN0ZERkZGRkM4Cis6MTAxM0IwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkJGRkZGRkZGRkZGRjdECis6MTAxM0MwMDBGMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjNCCis6MTAxM0QwMDBGRkZGRkZGRkZGRjA2RkZGRkZGRkZFRkZGRkZGRkZGRkJECis6MTAxM0UwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTFCCis6MTAxM0YwMDBGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCis6MTAxNDAwMDBGRkZGRkZGRkYwQ0ZGRkZGRkZGRUZGRkZGRkZGRkZGRjJDCis6MTAxNDEwMDBGRkZCRkZGRkZGRkVGRkZGRkI2RkZGRkVCRkZGRjFGRkM0Cis6MTAxNDIwMDBGN0ZGRkY3RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDU2Cis6MTAxNDMwMDBGRkZGRkZGMEVGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkRDCis6MTAxNDQwMDBGQkZGRkZGRkZFRkZGRkZGNTdGRkZEQkZGRkYxRkZFRkI5Cis6MTAxNDUwMDBGRUZGQkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkRFCis6MTAxNDYwMDBERUZGRjBDRkZGRkZGRkZFRkZGRkZGRjdEQkZGREJGRDNGCis6MTAxNDcwMDBGNkZGRjZGRjNDQkNCQ0JGREY2RkU3MkZGMTNDQkZGREMyCis6MTAxNDgwMDBCRkRGNkZGRjZGRjdEQkZGREJGREY2RkZGNkZGRkZGRjUwCis6MTAxNDkwMDAwMjAxREZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRjc4Cis6MTAxNEEwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjRDCis6MDYxNEIwMDBGRkZGRkZGRkZGRkYzQworOjAwMDAwMDAxRkYKKy8qCisgKgorICogRmlsZSB5YW0xMTEubWNzIGNvbnZlcnRlZCB0byBoIGZvcm1hdCBieSBtY3MyaAorICoKKyAqIChDKSBGNkZCQiAxOTk4CisgKgorICogVHVlIEF1ZyAyNSAyMDoyMzowMyAxOTk4CisgKgorICovCmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCBjZWY4YjE4Li44NmIyMDNmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTY2LDYgKzY2LDEzIEBACiAJYm9vbAogCXNlbGVjdCBGU19QT1NJWF9BQ0wKIAorbWVudSAiQ2FjaGVzIgorCitzb3VyY2UgImZzL2ZzY2FjaGUvS2NvbmZpZyIKK3NvdXJjZSAiZnMvY2FjaGVmaWxlcy9LY29uZmlnIgorCitlbmRtZW51CisKIGlmIEJMT0NLCiBtZW51ICJDRC1ST00vRFZEIEZpbGVzeXN0ZW1zIgogCkBAIC0xNjksNiArMTc2LDggQEAKIHNvdXJjZSAiZnMvc3lzdi9LY29uZmlnIgogc291cmNlICJmcy91ZnMvS2NvbmZpZyIKIAorc291cmNlICJmcy9leG9mcy9LY29uZmlnIgorCiBlbmRpZiAjIE1JU0NfRklMRVNZU1RFTVMKIAogbWVudWNvbmZpZyBORVRXT1JLX0ZJTEVTWVNURU1TCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDZlODJhMzAuLjcwYjJhZWQgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw3IEBACiAJCWF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBcCiAJCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFwKIAkJcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBcCi0JCXN0YWNrLm8KKwkJc3RhY2subyBmc19zdHJ1Y3QubwogCiBpZmVxICgkKENPTkZJR19CTE9DSykseSkKIG9iai15ICs9CWJ1ZmZlci5vIGJpby5vIGJsb2NrX2Rldi5vIGRpcmVjdC1pby5vIG1wYWdlLm8gaW9wcmlvLm8KQEAgLTYzLDYgKzYzLDcgQEAKIG9iai0kKENPTkZJR19ETE0pCQkrPSBkbG0vCiAgCiAjIERvIG5vdCBhZGQgYW55IGZpbGVzeXN0ZW1zIGJlZm9yZSB0aGlzIGxpbmUKK29iai0kKENPTkZJR19GU0NBQ0hFKQkJKz0gZnNjYWNoZS8KIG9iai0kKENPTkZJR19SRUlTRVJGU19GUykJKz0gcmVpc2VyZnMvCiBvYmotJChDT05GSUdfRVhUM19GUykJCSs9IGV4dDMvICMgQmVmb3JlIGV4dDIgc28gcm9vdCBmcyBjYW4gYmUgZXh0Mwogb2JqLSQoQ09ORklHX0VYVDJfRlMpCQkrPSBleHQyLwpAQCAtMTE2LDcgKzExNyw5IEBACiBvYmotJChDT05GSUdfQkVGU19GUykJCSs9IGJlZnMvCiBvYmotJChDT05GSUdfSE9TVEZTKQkJKz0gaG9zdGZzLwogb2JqLSQoQ09ORklHX0hQUEZTKQkJKz0gaHBwZnMvCitvYmotJChDT05GSUdfQ0FDSEVGSUxFUykJKz0gY2FjaGVmaWxlcy8KIG9iai0kKENPTkZJR19ERUJVR19GUykJCSs9IGRlYnVnZnMvCiBvYmotJChDT05GSUdfT0NGUzJfRlMpCQkrPSBvY2ZzMi8KIG9iai0kKENPTkZJR19CVFJGU19GUykJCSs9IGJ0cmZzLwogb2JqLSQoQ09ORklHX0dGUzJfRlMpICAgICAgICAgICArPSBnZnMyLworb2JqLSQoQ09ORklHX0VYT0ZTX0ZTKSAgICAgICAgICArPSBleG9mcy8KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvc3VwZXIuYyBiL2ZzL2FkZnMvc3VwZXIuYwppbmRleCA3ZjgzYTQ2Li5kZDliZWNjIDEwMDY0NAotLS0gYS9mcy9hZGZzL3N1cGVyLmMKKysrIGIvZnMvYWRmcy9zdXBlci5jCkBAIC0yMTksMTYgKzIxOSwyMCBAQAogCiBzdGF0aWMgaW50IGFkZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlzdHJ1Y3QgYWRmc19zYl9pbmZvICphc2IgPSBBREZTX1NCKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgYWRmc19zYl9pbmZvICpzYmkgPSBBREZTX1NCKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlICAgID0gQURGU19TVVBFUl9NQUdJQzsKLQlidWYtPmZfbmFtZWxlbiA9IGFzYi0+c19uYW1lbGVuOwotCWJ1Zi0+Zl9ic2l6ZSAgID0gZGVudHJ5LT5kX3NiLT5zX2Jsb2Nrc2l6ZTsKLQlidWYtPmZfYmxvY2tzICA9IGFzYi0+c19zaXplOwotCWJ1Zi0+Zl9maWxlcyAgID0gYXNiLT5zX2lkc19wZXJfem9uZSAqIGFzYi0+c19tYXBfc2l6ZTsKKwlidWYtPmZfbmFtZWxlbiA9IHNiaS0+c19uYW1lbGVuOworCWJ1Zi0+Zl9ic2l6ZSAgID0gc2ItPnNfYmxvY2tzaXplOworCWJ1Zi0+Zl9ibG9ja3MgID0gc2JpLT5zX3NpemU7CisJYnVmLT5mX2ZpbGVzICAgPSBzYmktPnNfaWRzX3Blcl96b25lICogc2JpLT5zX21hcF9zaXplOwogCWJ1Zi0+Zl9iYXZhaWwgID0KLQlidWYtPmZfYmZyZWUgICA9IGFkZnNfbWFwX2ZyZWUoZGVudHJ5LT5kX3NiKTsKKwlidWYtPmZfYmZyZWUgICA9IGFkZnNfbWFwX2ZyZWUoc2IpOwogCWJ1Zi0+Zl9mZnJlZSAgID0gKGxvbmcpKGJ1Zi0+Zl9iZnJlZSAqIGJ1Zi0+Zl9maWxlcykgLyAobG9uZylidWYtPmZfYmxvY2tzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggYTE5ZDY0Yi4uNWNlNjk1ZSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCisrKyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtNTMzLDYgKzUzMyw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAlpbnQJCSBmcmVlOworCXU2NAkJIGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlwcl9kZWJ1ZygiQUZGUzogc3RhdGZzKCkgcGFydHNpemU9JWQsIHJlc2VydmVkPSVkXG4iLEFGRlNfU0Ioc2IpLT5zX3BhcnRpdGlvbl9zaXplLAogCSAgICAgQUZGU19TQihzYiktPnNfcmVzZXJ2ZWQpOwpAQCAtNTQzLDYgKzU0NCw5IEBACiAJYnVmLT5mX2Jsb2NrcyAgPSBBRkZTX1NCKHNiKS0+c19wYXJ0aXRpb25fc2l6ZSAtIEFGRlNfU0Ioc2IpLT5zX3Jlc2VydmVkOwogCWJ1Zi0+Zl9iZnJlZSAgID0gZnJlZTsKIAlidWYtPmZfYmF2YWlsICA9IGZyZWU7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CisJYnVmLT5mX25hbWVsZW4gPSAzMDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL0tjb25maWcgYi9mcy9hZnMvS2NvbmZpZwppbmRleCBlN2I1MjJmLi41YzRlNjFkIDEwMDY0NAotLS0gYS9mcy9hZnMvS2NvbmZpZworKysgYi9mcy9hZnMvS2NvbmZpZwpAQCAtMTksMyArMTksMTEgQEAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Fmcy50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQUZTX0ZTQ0FDSEUKKwlib29sICJQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRlNfRlM9bSAmJiBGU0NBQ0hFIHx8IEFGU19GUz15ICYmIEZTQ0FDSEU9eQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgQUZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzayB0aHJvdWdoCisJICB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXIKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9NYWtlZmlsZSBiL2ZzL2Fmcy9NYWtlZmlsZQppbmRleCBhNjY2NzEwLi40ZjY0Yjk1IDEwMDY0NAotLS0gYS9mcy9hZnMvTWFrZWZpbGUKKysrIGIvZnMvYWZzL01ha2VmaWxlCkBAIC0yLDcgKzIsMTAgQEAKICMgTWFrZWZpbGUgZm9yIFJlZCBIYXQgTGludXggQUZTIGNsaWVudC4KICMKIAorYWZzLWNhY2hlLSQoQ09ORklHX0FGU19GU0NBQ0hFKSA6PSBjYWNoZS5vCisKIGthZnMtb2JqcyA6PSBcCisJJChhZnMtY2FjaGUteSkgXAogCWNhbGxiYWNrLm8gXAogCWNlbGwubyBcCiAJY21zZXJ2aWNlLm8gXApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmMgYi9mcy9hZnMvY2FjaGUuYwppbmRleCBkZTBkN2RlLi5lMmIxZDNmIDEwMDY0NAotLS0gYS9mcy9hZnMvY2FjaGUuYworKysgYi9mcy9hZnMvY2FjaGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIEFGUyBjYWNoaW5nIHN0dWZmCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOSwyNDggKzksMzk1IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfY2VsbF9jYWNoZV9tYXRjaCh2b2lkICp0YXJnZXQsCi0JCQkJCQljb25zdCB2b2lkICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBhZnNfY2VsbF9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc19jYWNoZV9jZWxsX2luZGV4X2RlZiA9IHsKLQkubmFtZQkJCT0gImNlbGxfaXgiLAotCS5kYXRhX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfY2VsbCksCi0JLmtleXNbMF0JCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQVNDSUlaLCA2NCB9LAotCS5tYXRjaAkJCT0gYWZzX2NlbGxfY2FjaGVfbWF0Y2gsCi0JLnVwZGF0ZQkJCT0gYWZzX2NlbGxfY2FjaGVfdXBkYXRlLAorc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyB1aW50MTZfdCBhZnNfY2VsbF9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgIHVpbnQxNl90IGJ1Zmxlbik7CisKK3N0YXRpYyB1aW50MTZfdCBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdmxvY2F0aW9uX2NhY2hlX2NoZWNrX2F1eCgKKwl2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgY29uc3Qgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworCitzdGF0aWMgdWludDE2X3QgYWZzX3ZvbHVtZV9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworCitzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgIHVpbnQ2NF90ICpzaXplKTsKK3N0YXRpYyB1aW50MTZfdCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIGVudW0gZnNjYWNoZV9jaGVja2F1eCBhZnNfdm5vZGVfY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgICB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX25vd191bmNhY2hlZCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7CisKK3N0cnVjdCBmc2NhY2hlX25ldGZzIGFmc19jYWNoZV9uZXRmcyA9IHsKKwkubmFtZQkJCT0gImFmcyIsCisJLnZlcnNpb24JCT0gMCwKIH07Ci0jZW5kaWYKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfY2VsbF9jYWNoZV9pbmRleF9kZWYgPSB7CisJLm5hbWUJCT0gIkFGUy5jZWxsIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gYWZzX2NlbGxfY2FjaGVfZ2V0X2tleSwKKwkuZ2V0X2F1eAk9IGFmc19jZWxsX2NhY2hlX2dldF9hdXgsCisJLmNoZWNrX2F1eAk9IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCwKK307CisKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYgPSB7CisJLm5hbWUJCQk9ICJBRlMudmxkYiIsCisJLnR5cGUJCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfa2V5LAorCS5nZXRfYXV4CQk9IGFmc192bG9jYXRpb25fY2FjaGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CQk9IGFmc192bG9jYXRpb25fY2FjaGVfY2hlY2tfYXV4LAorfTsKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJPSAiQUZTLnZvbHVtZSIsCisJLnR5cGUJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleQk9IGFmc192b2x1bWVfY2FjaGVfZ2V0X2tleSwKK307CisKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJCT0gIkFGUy52bm9kZSIsCisJLnR5cGUJCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEUsCisJLmdldF9rZXkJCT0gYWZzX3Zub2RlX2NhY2hlX2dldF9rZXksCisJLmdldF9hdHRyCQk9IGFmc192bm9kZV9jYWNoZV9nZXRfYXR0ciwKKwkuZ2V0X2F1eAkJPSBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CQk9IGFmc192bm9kZV9jYWNoZV9jaGVja19hdXgsCisJLm5vd191bmNhY2hlZAkJPSBhZnNfdm5vZGVfY2FjaGVfbm93X3VuY2FjaGVkLAorfTsKIAogLyoKLSAqIG1hdGNoIGEgY2VsbCByZWNvcmQgb2J0YWluZWQgZnJvbSB0aGUgY2FjaGUKKyAqIHNldCB0aGUga2V5IGZvciB0aGUgaW5kZXggZW50cnkKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc19jZWxsX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCWNvbnN0IHZvaWQgKmVudHJ5KQorc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQogewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfY2VsbCAqY2NlbGwgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSB0YXJnZXQ7CisJY29uc3Qgc3RydWN0IGFmc19jZWxsICpjZWxsID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3Qga2xlbjsKIAotCV9lbnRlcigieyVzfSx7JXN9IiwgY2NlbGwtPm5hbWUsIGNlbGwtPm5hbWUpOworCV9lbnRlcigiJXAsJXAsJXUiLCBjZWxsLCBidWZmZXIsIGJ1Zm1heCk7CiAKLQlpZiAoc3RybmNtcChjY2VsbC0+bmFtZSwgY2VsbC0+bmFtZSwgc2l6ZW9mKGNjZWxsLT5uYW1lKSkgPT0gMCkgewotCQlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlrbGVuID0gc3RybGVuKGNlbGwtPm5hbWUpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsIGNlbGwtPm5hbWUsIGtsZW4pOworCXJldHVybiBrbGVuOworfQorCisvKgorICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKi8KK3N0YXRpYyB1aW50MTZfdCBhZnNfY2VsbF9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBkbGVuOworCisJX2VudGVyKCIlcCwlcCwldSIsIGNlbGwsIGJ1ZmZlciwgYnVmbWF4KTsKKworCWRsZW4gPSBjZWxsLT52bF9uYWRkcnMgKiBzaXplb2YoY2VsbC0+dmxfYWRkcnNbMF0pOworCWRsZW4gPSBtaW4oZGxlbiwgYnVmbWF4KTsKKwlkbGVuICY9IH4oc2l6ZW9mKGNlbGwtPnZsX2FkZHJzWzBdKSAtIDEpOworCisJbWVtY3B5KGJ1ZmZlciwgY2VsbC0+dmxfYWRkcnMsIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgYXV4aWxsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAorICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc19jZWxsX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICAgIHVpbnQxNl90IGJ1ZmxlbikKK3sKKwlfbGVhdmUoIiA9IE9LQVkiKTsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2V0IHRoZSBrZXkgZm9yIHRoZSBpbmRleCBlbnRyeQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInslc30sJXAsJXUiLCB2bG9jYXRpb24tPnZsZGIubmFtZSwgYnVmZmVyLCBidWZtYXgpOworCisJa2xlbiA9IHN0cm5sZW4odmxvY2F0aW9uLT52bGRiLm5hbWUsIHNpemVvZih2bG9jYXRpb24tPnZsZGIubmFtZSkpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCBrbGVuKTsKKworCV9sZWF2ZSgiID0gJXUiLCBrbGVuKTsKKwlyZXR1cm4ga2xlbjsKK30KKworLyoKKyAqIHByb3ZpZGUgbmV3IGF1eGlsbGlhcnkgY2FjaGUgZGF0YQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoInslc30sJXAsJXUiLCB2bG9jYXRpb24tPnZsZGIubmFtZSwgYnVmZmVyLCBidWZtYXgpOworCisJZGxlbiA9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbik7CisJZGxlbiAtPSBvZmZzZXRvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiwgbnNlcnZlcnMpOworCWlmIChkbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsICh1aW50OF90ICopJnZsb2NhdGlvbi0+dmxkYi5uc2VydmVycywgZGxlbik7CisKKwlfbGVhdmUoIiA9ICV1IiwgZGxlbik7CisJcmV0dXJuIGRsZW47Cit9CisKKy8qCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKi8KK3N0YXRpYworZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bG9jYXRpb25fY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkJCSAgICB1aW50MTZfdCBidWZsZW4pCit7CisJY29uc3Qgc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24gKmN2bGRiOworCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBkbGVuOworCisJX2VudGVyKCJ7JXN9LCVwLCV1IiwgdmxvY2F0aW9uLT52bGRiLm5hbWUsIGJ1ZmZlciwgYnVmbGVuKTsKKworCS8qIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBkYXRhIGlzIHdoYXQgd2UncmUgZXhwZWN0aW5nICovCisJZGxlbiA9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbik7CisJZGxlbiAtPSBvZmZzZXRvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiwgbnNlcnZlcnMpOworCWlmIChkbGVuICE9IGJ1ZmxlbikKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwljdmxkYiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uLCBuc2VydmVycyk7CisKKwkvKiBpZiB3aGF0J3Mgb24gZGlzayBpcyBtb3JlIHZhbGlkIHRoYW4gd2hhdCdzIGluIG1lbW9yeSwgdGhlbiB1c2UgdGhlCisJICogVkwgcmVjb3JkIGZyb20gdGhlIGNhY2hlICovCisJaWYgKCF2bG9jYXRpb24tPnZhbGlkIHx8IHZsb2NhdGlvbi0+dmxkYi5ydGltZSA9PSBjdmxkYi0+cnRpbWUpIHsKKwkJbWVtY3B5KCh1aW50OF90ICopJnZsb2NhdGlvbi0+dmxkYi5uc2VydmVycywgYnVmZmVyLCBkbGVuKTsKKwkJdmxvY2F0aW9uLT52YWxpZCA9IDE7CisJCV9sZWF2ZSgiID0gU1VDQ0VTUyBbYy0+bV0iKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWTsKIAl9CiAKLQlfbGVhdmUoIiA9IEZBSUxFRCIpOwotCXJldHVybiBDQUNIRUZTX01BVENIX0ZBSUxFRDsKLX0KLSNlbmRpZgotCi0vKgotICogdXBkYXRlIGEgY2VsbCByZWNvcmQgaW4gdGhlIGNhY2hlCi0gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgdm9pZCBhZnNfY2VsbF9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKLXsKLQlzdHJ1Y3QgYWZzX2NhY2hlX2NlbGwgKmNjZWxsID0gZW50cnk7Ci0Jc3RydWN0IGFmc19jZWxsICpjZWxsID0gc291cmNlOwotCi0JX2VudGVyKCIlcCwlcCIsIHNvdXJjZSwgZW50cnkpOwotCi0Jc3RybmNweShjY2VsbC0+bmFtZSwgY2VsbC0+bmFtZSwgc2l6ZW9mKGNjZWxsLT5uYW1lKSk7Ci0KLQltZW1jcHkoY2NlbGwtPnZsX3NlcnZlcnMsCi0JICAgICAgIGNlbGwtPnZsX2FkZHJzLAotCSAgICAgICBtaW4oc2l6ZW9mKGNjZWxsLT52bF9zZXJ2ZXJzKSwgc2l6ZW9mKGNlbGwtPnZsX2FkZHJzKSkpOwotCi19Ci0jZW5kaWYKLQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192bG9jYXRpb25fY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICAgICBjb25zdCB2b2lkICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBhZnNfdmxvY2F0aW9uX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KTsKLQotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmID0gewotCS5uYW1lCQk9ICJ2bGRiIiwKLQkuZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uKSwKLQkua2V5c1swXQk9IHsgQ0FDSEVGU19JTkRFWF9LRVlTX0FTQ0lJWiwgNjQgfSwKLQkubWF0Y2gJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQk9IGFmc192bG9jYXRpb25fY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgotCi0vKgotICogbWF0Y2ggYSBWTERCIHJlY29yZCBzdG9yZWQgaW4gdGhlIGNhY2hlCi0gKiAtIG1heSBhbHNvIGxvYWQgdGFyZ2V0IGZyb20gZW50cnkKLSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192bG9jYXRpb25fY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICAgICBjb25zdCB2b2lkICplbnRyeSkKLXsKLQljb25zdCBzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqdmxkYiA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSB0YXJnZXQ7Ci0KLQlfZW50ZXIoInslc30seyVzfSIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCB2bGRiLT5uYW1lKTsKLQotCWlmIChzdHJuY21wKHZsb2NhdGlvbi0+dmxkYi5uYW1lLCB2bGRiLT5uYW1lLCBzaXplb2YodmxkYi0+bmFtZSkpID09IDAKLQkgICAgKSB7Ci0JCWlmICghdmxvY2F0aW9uLT52YWxpZCB8fAotCQkgICAgdmxvY2F0aW9uLT52bGRiLnJ0aW1lID09IHZsZGItPnJ0aW1lCisJLyogbmVlZCB0byB1cGRhdGUgdGhlIGNhY2hlIGlmIHRoZSBjYWNoZWQgaW5mbyBkaWZmZXJzICovCisJaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLCBidWZmZXIsIGRsZW4pICE9IDApIHsKKwkJLyogZGVsZXRlIGlmIHRoZSB2b2x1bWUgSURzIGZvciB0aGlzIG5hbWUgZGlmZmVyICovCisJCWlmIChtZW1jbXAoJnZsb2NhdGlvbi0+dmxkYi52aWQsICZjdmxkYi0+dmlkLAorCQkJICAgc2l6ZW9mKGN2bGRiLT52aWQpKSAhPSAwCiAJCSAgICApIHsKLQkJCXZsb2NhdGlvbi0+dmxkYiA9ICp2bGRiOwotCQkJdmxvY2F0aW9uLT52YWxpZCA9IDE7Ci0JCQlfbGVhdmUoIiA9IFNVQ0NFU1MgW2MtPm1dIik7Ci0JCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOwotCQl9IGVsc2UgaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLCB2bGRiLCBzaXplb2YoKnZsZGIpKSAhPSAwKSB7Ci0JCQkvKiBkZWxldGUgaWYgVklEcyBmb3IgdGhpcyBuYW1lIGRpZmZlciAqLwotCQkJaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLnZpZCwKLQkJCQkgICAmdmxkYi0+dmlkLAotCQkJCSAgIHNpemVvZih2bGRiLT52aWQpKSAhPSAwKSB7Ci0JCQkJX2xlYXZlKCIgPSBERUxFVEUiKTsKLQkJCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTX0RFTEVURTsKLQkJCX0KLQotCQkJX2xlYXZlKCIgPSBVUERBVEUiKTsKLQkJCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1NfVVBEQVRFOwotCQl9IGVsc2UgewotCQkJX2xlYXZlKCIgPSBTVUNDRVNTIik7Ci0JCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOworCQkJX2xlYXZlKCIgPSBPQlNPTEVURSIpOworCQkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CiAJCX0KKworCQlfbGVhdmUoIiA9IFVQREFURSIpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEU7CiAJfQogCi0JX2xlYXZlKCIgPSBGQUlMRUQiKTsKLQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9GQUlMRUQ7CisJX2xlYXZlKCIgPSBPS0FZIik7CisJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWTsKIH0KLSNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2V0IHRoZSBrZXkgZm9yIHRoZSB2b2x1bWUgaW5kZXggZW50cnkKKyAqLworc3RhdGljIHVpbnQxNl90IGFmc192b2x1bWVfY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInsldX0sJXAsJXUiLCB2b2x1bWUtPnR5cGUsIGJ1ZmZlciwgYnVmbWF4KTsKKworCWtsZW4gPSBzaXplb2Yodm9sdW1lLT50eXBlKTsKKwlpZiAoa2xlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmdm9sdW1lLT50eXBlLCBzaXplb2Yodm9sdW1lLT50eXBlKSk7CisKKwlfbGVhdmUoIiA9ICV1Iiwga2xlbik7CisJcmV0dXJuIGtsZW47CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHNldCB0aGUga2V5IGZvciB0aGUgaW5kZXggZW50cnkKKyAqLworc3RhdGljIHVpbnQxNl90IGFmc192bm9kZV9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQl2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGtsZW47CisKKwlfZW50ZXIoInsleCwleCwlbGx4fSwlcCwldSIsCisJICAgICAgIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlLCB2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiwKKwkgICAgICAgYnVmZmVyLCBidWZtYXgpOworCisJa2xlbiA9IHNpemVvZih2bm9kZS0+ZmlkLnZub2RlKTsKKwlpZiAoa2xlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmdm5vZGUtPmZpZC52bm9kZSwgc2l6ZW9mKHZub2RlLT5maWQudm5vZGUpKTsKKworCV9sZWF2ZSgiID0gJXUiLCBrbGVuKTsKKwlyZXR1cm4ga2xlbjsKK30KIAogLyoKLSAqIHVwZGF0ZSBhIFZMREIgcmVjb3JkIHN0b3JlZCBpbiB0aGUgY2FjaGUKKyAqIHByb3ZpZGUgdXBkYXRlZCBmaWxlIGF0dHJpYnV0ZXMKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192bG9jYXRpb25fY2FjaGVfdXBkYXRlKHZvaWQgKnNvdXJjZSwgdm9pZCAqZW50cnkpCitzdGF0aWMgdm9pZCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F0dHIoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICB1aW50NjRfdCAqc2l6ZSkKIHsKLQlzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqdmxkYiA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdmxvY2F0aW9uICp2bG9jYXRpb24gPSBzb3VyY2U7CisJY29uc3Qgc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBjb29raWVfbmV0ZnNfZGF0YTsKIAotCV9lbnRlcigiIik7CisJX2VudGVyKCJ7JXgsJXgsJWxseH0sIiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsCisJICAgICAgIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKIAotCSp2bGRiID0gdmxvY2F0aW9uLT52bGRiOworCSpzaXplID0gdm5vZGUtPnN0YXR1cy5zaXplOwogfQotI2VuZGlmCi0KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm9sdW1lX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSAgY29uc3Qgdm9pZCAqZW50cnkpOwotc3RhdGljIHZvaWQgYWZzX3ZvbHVtZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7Ci0KLXN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiA9IHsKLQkubmFtZQkJPSAidm9sdW1lIiwKLQkuZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmhhc2gpLAotCS5rZXlzWzBdCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQklOLCAxIH0sCi0JLmtleXNbMV0JPSB7IENBQ0hFRlNfSU5ERVhfS0VZU19CSU4sIDEgfSwKLQkubWF0Y2gJCT0gYWZzX3ZvbHVtZV9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQk9IGFmc192b2x1bWVfY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgogCiAvKgotICogbWF0Y2ggYSB2b2x1bWUgaGFzaCByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQorICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm9sdW1lX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSAgY29uc3Qgdm9pZCAqZW50cnkpCitzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQogewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfdmhhc2ggKnZoYXNoID0gZW50cnk7Ci0Jc3RydWN0IGFmc192b2x1bWUgKnZvbHVtZSA9IHRhcmdldDsKKwljb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CiAKLQlfZW50ZXIoInsldX0seyV1fSIsIHZvbHVtZS0+dHlwZSwgdmhhc2gtPnZ0eXBlKTsKKwlfZW50ZXIoInsleCwleCwlTHh9LCVwLCV1IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCSAgICAgICBidWZmZXIsIGJ1Zm1heCk7CiAKLQlpZiAodm9sdW1lLT50eXBlID09IHZoYXNoLT52dHlwZSkgewotCQlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlkbGVuID0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSArIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbik7CisJaWYgKGRsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgJnZub2RlLT5maWQudW5pcXVlLCBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpKTsKKwlidWZmZXIgKz0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKTsKKwltZW1jcHkoYnVmZmVyLCAmdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24sCisJICAgICAgIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbikpOworCisJX2xlYXZlKCIgPSAldSIsIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgYXV4aWxsaWFyeSBkYXRhIGluZGljYXRlcyB0aGF0IHRoZSBlbnRyeSBpcyBzdGlsbCB2YWxpZAorICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bm9kZV9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgICAgIHVpbnQxNl90IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoInsleCwleCwlbGx4fSwlcCwldSIsCisJICAgICAgIHZub2RlLT5maWQudm5vZGUsIHZub2RlLT5maWQudW5pcXVlLCB2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiwKKwkgICAgICAgYnVmZmVyLCBidWZsZW4pOworCisJLyogY2hlY2sgdGhlIHNpemUgb2YgdGhlIGRhdGEgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlkbGVuID0gc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSArIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbik7CisJaWYgKGRsZW4gIT0gYnVmbGVuKSB7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW2xlbiAlaHggIT0gJWh4XSIsIGRsZW4sIGJ1Zmxlbik7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOwogCX0KIAotCV9sZWF2ZSgiID0gRkFJTEVEIik7Ci0JcmV0dXJuIENBQ0hFRlNfTUFUQ0hfRkFJTEVEOwotfQotI2VuZGlmCisJaWYgKG1lbWNtcChidWZmZXIsCisJCSAgICZ2bm9kZS0+ZmlkLnVuaXF1ZSwKKwkJICAgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKQorCQkgICApICE9IDApIHsKKwkJdW5zaWduZWQgdW5pcXVlOwogCi0vKgotICogdXBkYXRlIGEgdm9sdW1lIGhhc2ggcmVjb3JkIHN0b3JlZCBpbiB0aGUgY2FjaGUKLSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192b2x1bWVfY2FjaGVfdXBkYXRlKHZvaWQgKnNvdXJjZSwgdm9pZCAqZW50cnkpCi17Ci0Jc3RydWN0IGFmc19jYWNoZV92aGFzaCAqdmhhc2ggPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lID0gc291cmNlOworCQltZW1jcHkoJnVuaXF1ZSwgYnVmZmVyLCBzaXplb2YodW5pcXVlKSk7CiAKLQlfZW50ZXIoIiIpOwotCi0Jdmhhc2gtPnZ0eXBlID0gdm9sdW1lLT50eXBlOwotfQotI2VuZGlmCi0KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm5vZGVfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJIGNvbnN0IHZvaWQgKmVudHJ5KTsKLXN0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSk7Ci0KLXN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmID0gewotCS5uYW1lCQk9ICJ2bm9kZSIsCi0JLmRhdGFfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgYWZzX2NhY2hlX3Zub2RlKSwKLQkua2V5c1swXQk9IHsgQ0FDSEVGU19JTkRFWF9LRVlTX0JJTiwgNCB9LAotCS5tYXRjaAkJPSBhZnNfdm5vZGVfY2FjaGVfbWF0Y2gsCi0JLnVwZGF0ZQkJPSBhZnNfdm5vZGVfY2FjaGVfdXBkYXRlLAotfTsKLSNlbmRpZgotCi0vKgotICogbWF0Y2ggYSB2bm9kZSByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIGNhY2hlZnNfbWF0Y2hfdmFsX3QgYWZzX3Zub2RlX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCSBjb25zdCB2b2lkICplbnRyeSkKLXsKLQljb25zdCBzdHJ1Y3QgYWZzX2NhY2hlX3Zub2RlICpjdm5vZGUgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IHRhcmdldDsKLQotCV9lbnRlcigieyV4LCV4LCVMeH0seyV4LCV4LCVMeH0iLAotCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLAotCSAgICAgICB2bm9kZS0+ZmlkLnVuaXF1ZSwKLQkgICAgICAgdm5vZGUtPnN0YXR1cy52ZXJzaW9uLAotCSAgICAgICBjdm5vZGUtPnZub2RlX2lkLAotCSAgICAgICBjdm5vZGUtPnZub2RlX3VuaXF1ZSwKLQkgICAgICAgY3Zub2RlLT5kYXRhX3ZlcnNpb24pOwotCi0JaWYgKHZub2RlLT5maWQudm5vZGUgIT0gY3Zub2RlLT52bm9kZV9pZCkgewotCQlfbGVhdmUoIiA9IEZBSUxFRCIpOwotCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9GQUlMRUQ7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW3VuaXEgJXggIT0gJXhdIiwKKwkJICAgICAgIHVuaXF1ZSwgdm5vZGUtPmZpZC51bmlxdWUpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKIAl9CiAKLQlpZiAodm5vZGUtPmZpZC51bmlxdWUgIT0gY3Zub2RlLT52bm9kZV91bmlxdWUgfHwKLQkgICAgdm5vZGUtPnN0YXR1cy52ZXJzaW9uICE9IGN2bm9kZS0+ZGF0YV92ZXJzaW9uKSB7Ci0JCV9sZWF2ZSgiID0gREVMRVRFIik7Ci0JCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1NfREVMRVRFOworCWlmIChtZW1jbXAoYnVmZmVyICsgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSwKKwkJICAgJnZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCQkgICBzaXplb2Yodm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24pCisJCSAgICkgIT0gMCkgeworCQlhZnNfZGF0YXZlcnNpb25fdCB2ZXJzaW9uOworCisJCW1lbWNweSgmdmVyc2lvbiwgYnVmZmVyICsgc2l6ZW9mKHZub2RlLT5maWQudW5pcXVlKSwKKwkJICAgICAgIHNpemVvZih2ZXJzaW9uKSk7CisKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbdmVycyAlbGx4ICE9ICVsbHhdIiwKKwkJICAgICAgIHZlcnNpb24sIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CiAJfQogCiAJX2xlYXZlKCIgPSBTVUNDRVNTIik7Ci0JcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTUzsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOwogfQotI2VuZGlmCiAKIC8qCi0gKiB1cGRhdGUgYSB2bm9kZSByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQorICogaW5kaWNhdGlvbiB0aGUgY29va2llIGlzIG5vIGxvbmdlciB1bmNhY2hlZAorICogLSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHN0b3JlIGN1cnJlbnRseSBjYWNoaW5nIGEgY29va2llCisgKiAgIGlzIHJlbW92ZWQKKyAqIC0gdGhlIG5ldGZzIHNob3VsZCB1c2UgdGhpcyB0byBjbGVhbiB1cCBhbnkgbWFya2VycyBpbmRpY2F0aW5nIGNhY2hlZCBwYWdlcworICogLSB0aGlzIGlzIG1hbmRhdG9yeSBmb3IgYW55IG9iamVjdCB0aGF0IG1heSBoYXZlIGRhdGEKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKK3N0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV9ub3dfdW5jYWNoZWQodm9pZCAqY29va2llX25ldGZzX2RhdGEpCiB7Ci0Jc3RydWN0IGFmc19jYWNoZV92bm9kZSAqY3Zub2RlID0gZW50cnk7Ci0Jc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBzb3VyY2U7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgZmlyc3Q7CisJaW50IGxvb3AsIG5yX3BhZ2VzOwogCi0JX2VudGVyKCIiKTsKKwlfZW50ZXIoInsleCwleCwlTHh9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKIAotCWN2bm9kZS0+dm5vZGVfaWQJPSB2bm9kZS0+ZmlkLnZub2RlOwotCWN2bm9kZS0+dm5vZGVfdW5pcXVlCT0gdm5vZGUtPmZpZC51bmlxdWU7Ci0JY3Zub2RlLT5kYXRhX3ZlcnNpb24JPSB2bm9kZS0+c3RhdHVzLnZlcnNpb247CisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwlmaXJzdCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCS8qIGdyYWIgYSBidW5jaCBvZiBwYWdlcyB0byBjbGVhbiAqLworCQlucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwKCZwdmVjLCB2bm9kZS0+dmZzX2lub2RlLmlfbWFwcGluZywKKwkJCQkJICBmaXJzdCwKKwkJCQkJICBQQUdFVkVDX1NJWkUgLSBwYWdldmVjX2NvdW50KCZwdmVjKSk7CisJCWlmICghbnJfcGFnZXMpCisJCQlicmVhazsKKworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbnJfcGFnZXM7IGxvb3ArKykKKwkJCUNsZWFyUGFnZUZzQ2FjaGUocHZlYy5wYWdlc1tsb29wXSk7CisKKwkJZmlyc3QgPSBwdmVjLnBhZ2VzW25yX3BhZ2VzIC0gMV0tPmluZGV4ICsgMTsKKworCQlwdmVjLm5yID0gbnJfcGFnZXM7CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCV9sZWF2ZSgiIik7CiB9Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9jYWNoZS5oIGIvZnMvYWZzL2NhY2hlLmgKaW5kZXggMzZhMzY0Mi4uNWM0ZjZiNCAxMDA2NDQKLS0tIGEvZnMvYWZzL2NhY2hlLmgKKysrIGIvZnMvYWZzL2NhY2hlLmgKQEAgLTEsNiArMSw2IEBACiAvKiBBRlMgbG9jYWwgY2FjaGUgbWFuYWdlbWVudCBpbnRlcmZhY2UKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05LDE1ICs5LDQgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2lmbmRlZiBBRlNfQ0FDSEVfSAotI2RlZmluZSBBRlNfQ0FDSEVfSAotCi0jdW5kZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0jaW5jbHVkZSA8bGludXgvY2FjaGVmcy5oPgotI2VuZGlmCi0jaW5jbHVkZSAidHlwZXMuaCIKLQotI2VuZGlmIC8qIEFGU19DQUNIRV9IICovCisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NlbGwuYyBiL2ZzL2Fmcy9jZWxsLmMKaW5kZXggNWUxZGYxNC4uZTE5YzEzZiAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0xNDcsMTIgKzE0NywxMSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCS8qIHB1dCBpdCB1cCBmb3IgY2FjaGluZyAqLwotCWNhY2hlZnNfYWNxdWlyZV9jb29raWUoYWZzX2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCi0JCQkgICAgICAgJmFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmLAotCQkJICAgICAgIGNlbGwsCi0JCQkgICAgICAgJmNlbGwtPmNhY2hlKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkvKiBwdXQgaXQgdXAgZm9yIGNhY2hpbmcgKHRoaXMgbmV2ZXIgcmV0dXJucyBhbiBlcnJvcikgKi8KKwljZWxsLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUoYWZzX2NhY2hlX25ldGZzLnByaW1hcnlfaW5kZXgsCisJCQkJCSAgICAgJmFmc19jZWxsX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICBjZWxsKTsKICNlbmRpZgogCiAJLyogYWRkIHRvIHRoZSBjZWxsIGxpc3RzICovCkBAIC0zNjIsMTAgKzM2MSw5IEBACiAJbGlzdF9kZWxfaW5pdCgmY2VsbC0+cHJvY19saW5rKTsKIAl1cF93cml0ZSgmYWZzX3Byb2NfY2VsbHNfc2VtKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKGNlbGwtPmNhY2hlLCAwKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNlbGwtPmNhY2hlLCAwKTsKICNlbmRpZgotCiAJa2V5X3B1dChjZWxsLT5hbm9ueW1vdXNfa2V5KTsKIAlrZnJlZShjZWxsKTsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ZpbGUuYyBiL2ZzL2Fmcy9maWxlLmMKaW5kZXggYTM5MDE3Ni4uN2ExZDk0MiAxMDA2NDQKLS0tIGEvZnMvYWZzL2ZpbGUuYworKysgYi9mcy9hZnMvZmlsZS5jCkBAIC0yMyw2ICsyMyw5IEBACiBzdGF0aWMgaW50IGFmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHN0YXRpYyBpbnQgYWZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKK3N0YXRpYyBpbnQgYWZzX3JlYWRwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IGFmc19vcGVuLAogCS5yZWxlYXNlCT0gYWZzX3JlbGVhc2UsCkBAIC00Niw2ICs0OSw3IEBACiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYWZzX2ZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCT0gYWZzX3JlYWRwYWdlLAorCS5yZWFkcGFnZXMJPSBhZnNfcmVhZHBhZ2VzLAogCS5zZXRfcGFnZV9kaXJ0eQk9IGFmc19zZXRfcGFnZV9kaXJ0eSwKIAkubGF1bmRlcl9wYWdlCT0gYWZzX2xhdW5kZXJfcGFnZSwKIAkucmVsZWFzZXBhZ2UJPSBhZnNfcmVsZWFzZXBhZ2UsCkBAIC0xMDEsMzcgKzEwNSwxOCBAQAogLyoKICAqIGRlYWwgd2l0aCBub3RpZmljYXRpb24gdGhhdCBhIHBhZ2Ugd2FzIHJlYWQgZnJvbSB0aGUgY2FjaGUKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc19yZWFkcGFnZV9yZWFkX2NvbXBsZXRlKHZvaWQgKmNvb2tpZV9kYXRhLAotCQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgICAgdm9pZCAqZGF0YSwKLQkJCQkgICAgICAgaW50IGVycm9yKQorc3RhdGljIHZvaWQgYWZzX2ZpbGVfcmVhZHBhZ2VfcmVhZF9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgIHZvaWQgKmRhdGEsCisJCQkJCSAgICBpbnQgZXJyb3IpCiB7Ci0JX2VudGVyKCIlcCwlcCwlcCwlZCIsIGNvb2tpZV9kYXRhLCBwYWdlLCBkYXRhLCBlcnJvcik7CisJX2VudGVyKCIlcCwlcCwlZCIsIHBhZ2UsIGRhdGEsIGVycm9yKTsKIAotCWlmIChlcnJvcikKLQkJU2V0UGFnZUVycm9yKHBhZ2UpOwotCWVsc2UKKwkvKiBpZiB0aGUgcmVhZCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgd2UganVzdCB1bmxvY2sgdGhlIHBhZ2UgYW5kIGxldAorCSAqIHRoZSBWTSByZWlzc3VlIHRoZSByZWFkcGFnZSAqLworCWlmICghZXJyb3IpCiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKLQogfQotI2VuZGlmCi0KLS8qCi0gKiBkZWFsIHdpdGggbm90aWZpY2F0aW9uIHRoYXQgYSBwYWdlIHdhcyB3cml0dGVuIHRvIHRoZSBjYWNoZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3JlYWRwYWdlX3dyaXRlX2NvbXBsZXRlKHZvaWQgKmNvb2tpZV9kYXRhLAotCQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJdm9pZCAqZGF0YSwKLQkJCQkJaW50IGVycm9yKQotewotCV9lbnRlcigiJXAsJXAsJXAsJWQiLCBjb29raWVfZGF0YSwgcGFnZSwgZGF0YSwgZXJyb3IpOwotCi0JdW5sb2NrX3BhZ2UocGFnZSk7Ci19Ci0jZW5kaWYKIAogLyoKICAqIEFGUyByZWFkIHBhZ2UgZnJvbSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltbGluawpAQCAtMTYxLDkgKzE0Niw5IEBACiAJaWYgKHRlc3RfYml0KEFGU19WTk9ERV9ERUxFVEVELCAmdm5vZGUtPmZsYWdzKSkKIAkJZ290byBlcnJvcjsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKIAkvKiBpcyBpdCBjYWNoZWQ/ICovCi0JcmV0ID0gY2FjaGVmc19yZWFkX29yX2FsbG9jX3BhZ2Uodm5vZGUtPmNhY2hlLAorI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKHZub2RlLT5jYWNoZSwKIAkJCQkJIHBhZ2UsCiAJCQkJCSBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlLAogCQkJCQkgTlVMTCwKQEAgLTE3MSwyMCArMTU2LDIxIEBACiAjZWxzZQogCXJldCA9IC1FTk9CVUZTOwogI2VuZGlmCi0KIAlzd2l0Y2ggKHJldCkgewotCQkvKiByZWFkIEJJTyBzdWJtaXR0ZWQgYW5kIHdiLWpvdXJuYWwgZW50cnkgZm91bmQgKi8KLQljYXNlIDE6Ci0JCUJVRygpOyAvLyBUT0RPIC0gaGFuZGxlIHdiLWpvdXJuYWwgbWF0Y2gKLQogCQkvKiByZWFkIEJJTyBzdWJtaXR0ZWQgKHBhZ2UgaW4gY2FjaGUpICovCiAJY2FzZSAwOgogCQlicmVhazsKIAotCQkvKiBubyBwYWdlIGF2YWlsYWJsZSBpbiBjYWNoZSAqLwotCWNhc2UgLUVOT0JVRlM6CisJCS8qIHBhZ2Ugbm90IHlldCBjYWNoZWQgKi8KIAljYXNlIC1FTk9EQVRBOgorCQlfZGVidWcoImNhY2hlIHNhaWQgRU5PREFUQSIpOworCQlnb3RvIGdvX29uOworCisJCS8qIHBhZ2Ugd2lsbCBub3QgYmUgY2FjaGVkICovCisJY2FzZSAtRU5PQlVGUzoKKwkJX2RlYnVnKCJjYWNoZSBzYWlkIEVOT0JVRlMiKTsKIAlkZWZhdWx0OgorCWdvX29uOgogCQlvZmZzZXQgPSBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCQlsZW4gPSBtaW5fdChzaXplX3QsIGlfc2l6ZV9yZWFkKGlub2RlKSAtIG9mZnNldCwgUEFHRV9TSVpFKTsKIApAQCAtMTk4LDI3ICsxODQsMjUgQEAKIAkJCQlzZXRfYml0KEFGU19WTk9ERV9ERUxFVEVELCAmdm5vZGUtPmZsYWdzKTsKIAkJCQlyZXQgPSAtRVNUQUxFOwogCQkJfQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkJCWNhY2hlZnNfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CiAjZW5kaWYKKwkJCUJVR19PTihQYWdlRnNDYWNoZShwYWdlKSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCQlpZiAoY2FjaGVmc193cml0ZV9wYWdlKHZub2RlLT5jYWNoZSwKLQkJCQkgICAgICAgcGFnZSwKLQkJCQkgICAgICAgYWZzX2ZpbGVfcmVhZHBhZ2Vfd3JpdGVfY29tcGxldGUsCi0JCQkJICAgICAgIE5VTEwsCi0JCQkJICAgICAgIEdGUF9LRVJORUwpICE9IDAKLQkJICAgICkgewotCQkJY2FjaGVmc191bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKLQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkvKiBzZW5kIHRoZSBwYWdlIHRvIHRoZSBjYWNoZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCQlpZiAoUGFnZUZzQ2FjaGUocGFnZSkgJiYKKwkJICAgIGZzY2FjaGVfd3JpdGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UsIEdGUF9LRVJORUwpICE9IDApIHsKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisJCQlCVUdfT04oUGFnZUZzQ2FjaGUocGFnZSkpOwogCQl9Ci0jZWxzZQotCQl1bmxvY2tfcGFnZShwYWdlKTsKICNlbmRpZgorCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKIAlfbGVhdmUoIiA9IDAiKTsKQEAgLTIzMiwzNCArMjE2LDU5IEBACiB9CiAKIC8qCi0gKiBpbnZhbGlkYXRlIHBhcnQgb3IgYWxsIG9mIGEgcGFnZQorICogcmVhZCBhIHNldCBvZiBwYWdlcwogICovCi1zdGF0aWMgdm9pZCBhZnNfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorc3RhdGljIGludCBhZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCiB7Ci0JaW50IHJldCA9IDE7CisJc3RydWN0IGFmc192bm9kZSAqdm5vZGU7CisJaW50IHJldCA9IDA7CiAKLQlfZW50ZXIoInslbHV9LCVsdSIsIHBhZ2UtPmluZGV4LCBvZmZzZXQpOworCV9lbnRlcigiLHslbHV9LCwlZCIsIG1hcHBpbmctPmhvc3QtPmlfaW5vLCBucl9wYWdlcyk7CiAKLQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwotCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7Ci0JCS8qIFdlIHJlbGVhc2UgYnVmZmVycyBvbmx5IGlmIHRoZSBlbnRpcmUgcGFnZSBpcyBiZWluZwotCQkgKiBpbnZhbGlkYXRlZC4KLQkJICogVGhlIGdldF9ibG9jayBjYWNoZWQgdmFsdWUgaGFzIGJlZW4gdW5jb25kaXRpb25hbGx5Ci0JCSAqIGludmFsaWRhdGVkLCBzbyByZWFsIElPIGlzIG5vdCBwb3NzaWJsZSBhbnltb3JlLgotCQkgKi8KLQkJaWYgKG9mZnNldCA9PSAwKSB7Ci0JCQlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwotCi0JCQlyZXQgPSAwOwotCQkJaWYgKCFQYWdlV3JpdGViYWNrKHBhZ2UpKQotCQkJCXJldCA9IHBhZ2UtPm1hcHBpbmctPmFfb3BzLT5yZWxlYXNlcGFnZShwYWdlLAotCQkJCQkJCQkJMCk7Ci0JCQkvKiBwb3NzaWJseSBzaG91bGQgQlVHX09OKCFyZXQpOyAtIG5laWxiICovCi0JCX0KKwl2bm9kZSA9IEFGU19GU19JKG1hcHBpbmctPmhvc3QpOworCWlmICh2bm9kZS0+ZmxhZ3MgJiBBRlNfVk5PREVfREVMRVRFRCkgeworCQlfbGVhdmUoIiA9IC1FU1RBTEUiKTsKKwkJcmV0dXJuIC1FU1RBTEU7CiAJfQogCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJLyogYXR0ZW1wdCB0byByZWFkIGFzIG1hbnkgb2YgdGhlIHBhZ2VzIGFzIHBvc3NpYmxlICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHZub2RlLT5jYWNoZSwKKwkJCQkJICBtYXBwaW5nLAorCQkJCQkgIHBhZ2VzLAorCQkJCQkgICZucl9wYWdlcywKKwkJCQkJICBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlLAorCQkJCQkgIE5VTEwsCisJCQkJCSAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CisjZWxzZQorCXJldCA9IC1FTk9CVUZTOworI2VuZGlmCisKKwlzd2l0Y2ggKHJldCkgeworCQkvKiBhbGwgcGFnZXMgYXJlIGJlaW5nIHJlYWQgZnJvbSB0aGUgY2FjaGUgKi8KKwljYXNlIDA6CisJCUJVR19PTighbGlzdF9lbXB0eShwYWdlcykpOworCQlCVUdfT04obnJfcGFnZXMgIT0gMCk7CisJCV9sZWF2ZSgiID0gMCBbcmVhZGluZyBhbGxdIik7CisJCXJldHVybiAwOworCisJCS8qIHRoZXJlIHdlcmUgcGFnZXMgdGhhdCBjb3VsZG4ndCBiZSByZWFkIGZyb20gdGhlIGNhY2hlICovCisJY2FzZSAtRU5PREFUQToKKwljYXNlIC1FTk9CVUZTOgorCQlicmVhazsKKworCQkvKiBvdGhlciBlcnJvciAqLworCWRlZmF1bHQ6CisJCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGxvYWQgdGhlIG1pc3NpbmcgcGFnZXMgZnJvbSB0aGUgbmV0d29yayAqLworCXJldCA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsICh2b2lkICopIGFmc19yZWFkcGFnZSwgZmlsZSk7CisKKwlfbGVhdmUoIiA9ICVkIFtuZXR0aW5nXSIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTI3MywyNSArMjgyLDgyIEBACiB9CiAKIC8qCi0gKiByZWxlYXNlIGEgcGFnZSBhbmQgY2xlYW51cCBpdHMgcHJpdmF0ZSBkYXRhCisgKiBpbnZhbGlkYXRlIHBhcnQgb3IgYWxsIG9mIGEgcGFnZQorICogLSByZWxlYXNlIGEgcGFnZSBhbmQgY2xlYW4gdXAgaXRzIHByaXZhdGUgZGF0YSBpZiBvZmZzZXQgaXMgMCAoaW5kaWNhdGluZworICogICB0aGUgZW50aXJlIHBhZ2UpCisgKi8KK3N0YXRpYyB2b2lkIGFmc19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IGFmc193cml0ZWJhY2sgKndiID0gKHN0cnVjdCBhZnNfd3JpdGViYWNrICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKKworCV9lbnRlcigieyVsdX0sJWx1IiwgcGFnZS0+aW5kZXgsIG9mZnNldCk7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJLyogd2UgY2xlYW4gdXAgb25seSBpZiB0aGUgZW50aXJlIHBhZ2UgaXMgYmVpbmcgaW52YWxpZGF0ZWQgKi8KKwlpZiAob2Zmc2V0ID09IDApIHsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwkJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCQkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisJCQlDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpOworCQl9CisjZW5kaWYKKworCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJCWlmICh3YiAmJiAhUGFnZVdyaXRlYmFjayhwYWdlKSkgeworCQkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJCQkJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCQkJfQorCisJCQlpZiAoIXBhZ2VfcHJpdmF0ZShwYWdlKSkKKwkJCQlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworCQl9CisJfQorCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSBwYWdlIGFuZCBjbGVhbiB1cCBpdHMgcHJpdmF0ZSBzdGF0ZSBpZiBpdCdzIG5vdCBidXN5CisgKiAtIHJldHVybiB0cnVlIGlmIHRoZSBwYWdlIGNhbiBub3cgYmUgcmVsZWFzZWQsIGZhbHNlIGlmIG5vdAogICovCiBzdGF0aWMgaW50IGFmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogeworCXN0cnVjdCBhZnNfd3JpdGViYWNrICp3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7CiAJc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KTsKLQlzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2I7CiAKIAlfZW50ZXIoInt7JXg6JXV9WyVsdV0sJWx4fSwleCIsCiAJICAgICAgIHZub2RlLT5maWQudmlkLCB2bm9kZS0+ZmlkLnZub2RlLCBwYWdlLT5pbmRleCwgcGFnZS0+ZmxhZ3MsCiAJICAgICAgIGdmcF9mbGFncyk7CiAKKwkvKiBkZW55IGlmIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUgYW5kIHRoZSBjYWxsZXIgaGFzbid0CisJICogZWxlY3RlZCB0byB3YWl0ICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCWlmIChmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKSkgeworCQkJaWYgKCEoZ2ZwX2ZsYWdzICYgX19HRlBfV0FJVCkpIHsKKwkJCQlfbGVhdmUoIiA9IEYgW2NhY2hlIGJ1c3ldIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOworCQl9CisKKwkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJQ2xlYXJQYWdlRnNDYWNoZShwYWdlKTsKKwl9CisjZW5kaWYKKwogCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkgewotCQl3YiA9IChzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqKSBwYWdlX3ByaXZhdGUocGFnZSk7Ci0JCUFTU0VSVCh3YiAhPSBOVUxMKTsKLQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwkJaWYgKHdiKSB7CisJCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOworCQkJYWZzX3B1dF93cml0ZWJhY2sod2IpOworCQl9CiAJCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7Ci0JCWFmc19wdXRfd3JpdGViYWNrKHdiKTsKIAl9CiAKLQlfbGVhdmUoIiA9IDAiKTsKLQlyZXR1cm4gMDsKKwkvKiBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIGNhbiBiZSByZWxlYXNlZCAqLworCV9sZWF2ZSgiID0gVCIpOworCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBiYjQ3MjE3Li5jMDQ4ZjA2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtNjEsNiArNjEsMTEgQEAKIAkJcmV0dXJuIC1FQkFETVNHOwogCX0KIAorI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWlmICh2bm9kZS0+c3RhdHVzLnNpemUgIT0gaW5vZGUtPmlfc2l6ZSkKKwkJZnNjYWNoZV9hdHRyX2NoYW5nZWQodm5vZGUtPmNhY2hlKTsKKyNlbmRpZgorCiAJaW5vZGUtPmlfbmxpbmsJCT0gdm5vZGUtPnN0YXR1cy5ubGluazsKIAlpbm9kZS0+aV91aWQJCT0gdm5vZGUtPnN0YXR1cy5vd25lcjsKIAlpbm9kZS0+aV9naWQJCT0gMDsKQEAgLTE0OSwxNSArMTU0LDYgQEAKIAkJcmV0dXJuIGlub2RlOwogCX0KIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkvKiBzZXQgdXAgY2FjaGluZyBiZWZvcmUgcmVhZGluZyB0aGUgc3RhdHVzLCBhcyBmZXRjaC1zdGF0dXMgcmVhZHMgdGhlCi0JICogZmlyc3QgcGFnZSBvZiBzeW1saW5rcyB0byBzZWUgaWYgdGhleSdyZSByZWFsbHkgbW50cHRzICovCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZSh2bm9kZS0+dm9sdW1lLT5jYWNoZSwKLQkJCSAgICAgICBOVUxMLAotCQkJICAgICAgIHZub2RlLAotCQkJICAgICAgICZ2bm9kZS0+Y2FjaGUpOwotI2VuZGlmCi0KIAlpZiAoIXN0YXR1cykgewogCQkvKiBpdCdzIGEgcmVtb3RlbHkgZXh0YW50IGlub2RlICovCiAJCXNldF9iaXQoQUZTX1ZOT0RFX0NCX0JST0tFTiwgJnZub2RlLT5mbGFncyk7CkBAIC0xODMsNiArMTc5LDE1IEBACiAJCX0KIAl9CiAKKwkvKiBzZXQgdXAgY2FjaGluZyBiZWZvcmUgbWFwcGluZyB0aGUgc3RhdHVzLCBhcyBtYXAtc3RhdHVzIHJlYWRzIHRoZQorCSAqIGZpcnN0IHBhZ2Ugb2Ygc3ltbGlua3MgdG8gc2VlIGlmIHRoZXkncmUgcmVhbGx5IG1vdW50cG9pbnRzICovCisJaW5vZGUtPmlfc2l6ZSA9IHZub2RlLT5zdGF0dXMuc2l6ZTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwl2bm9kZS0+Y2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKHZub2RlLT52b2x1bWUtPmNhY2hlLAorCQkJCQkgICAgICAmYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICAgdm5vZGUpOworI2VuZGlmCisKIAlyZXQgPSBhZnNfaW5vZGVfbWFwX3N0YXR1cyh2bm9kZSwga2V5KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBiYWRfaW5vZGU7CkBAIC0xOTYsNiArMjAxLDEwIEBACiAKIAkvKiBmYWlsdXJlICovCiBiYWRfaW5vZGU6CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2bm9kZS0+Y2FjaGUsIDApOworCXZub2RlLT5jYWNoZSA9IE5VTEw7CisjZW5kaWYKIAlpZ2V0X2ZhaWxlZChpbm9kZSk7CiAJX2xlYXZlKCIgPSAlZCBbYmFkXSIsIHJldCk7CiAJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTM0MCw4ICszNDksOCBAQAogCUFTU0VSVChsaXN0X2VtcHR5KCZ2bm9kZS0+d3JpdGViYWNrcykpOwogCUFTU0VSVCghdm5vZGUtPmNiX3Byb21pc2VkKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKHZub2RlLT5jYWNoZSwgMCk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2bm9kZS0+Y2FjaGUsIDApOwogCXZub2RlLT5jYWNoZSA9IE5VTEw7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCA2N2YyNTlkLi4xMDZiZTY2IDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSAiYWZzLmgiCiAjaW5jbHVkZSAiYWZzX3ZsLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKIAogI2RlZmluZSBBRlNfQ0VMTF9NQVhfQUREUlMgMTUKIApAQCAtMTkzLDggKzE5NCw4IEBACiAJc3RydWN0IGtleQkJKmFub255bW91c19rZXk7CS8qIGFub255bW91cyB1c2VyIGtleSBmb3IgdGhpcyBjZWxsICovCiAJc3RydWN0IGxpc3RfaGVhZAlwcm9jX2xpbms7CS8qIC9wcm9jIGNlbGwgbGlzdCBsaW5rICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpwcm9jX2RpcjsJLyogL3Byb2MgZGlyIGZvciB0aGlzIGNlbGwgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0Jc3RydWN0IGNhY2hlZnNfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCiAjZW5kaWYKIAogCS8qIHNlcnZlciByZWNvcmQgbWFuYWdlbWVudCAqLwpAQCAtMjQ5LDggKzI1MCw4IEBACiAJc3RydWN0IGxpc3RfaGVhZAlncmF2ZTsJCS8qIGxpbmsgaW4gbWFzdGVyIGdyYXZleWFyZCBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAl1cGRhdGU7CQkvKiBsaW5rIGluIG1hc3RlciB1cGRhdGUgbGlzdCAqLwogCXN0cnVjdCBhZnNfY2VsbAkJKmNlbGw7CQkvKiBjZWxsIHRvIHdoaWNoIHZvbHVtZSBiZWxvbmdzICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24gdmxkYjsJLyogdm9sdW1lIGluZm9ybWF0aW9uIERCIHJlY29yZCAqLwogCXN0cnVjdCBhZnNfdm9sdW1lCSp2b2xzWzNdOwkvKiB2b2x1bWUgYWNjZXNzIHJlY29yZCBwb2ludGVyIChpbmRleCBieSB0eXBlKSAqLwpAQCAtMzAyLDggKzMwMyw4IEBACiAJYXRvbWljX3QJCXVzYWdlOwogCXN0cnVjdCBhZnNfY2VsbAkJKmNlbGw7CQkvKiBjZWxsIHRvIHdoaWNoIGJlbG9uZ3MgKHVucmVmZCBwdHIpICovCiAJc3RydWN0IGFmc192bG9jYXRpb24JKnZsb2NhdGlvbjsJLyogdm9sdW1lIGxvY2F0aW9uICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJYWZzX3ZvbGlkX3QJCXZpZDsJCS8qIHZvbHVtZSBJRCAqLwogCWFmc192b2x0eXBlX3QJCXR5cGU7CQkvKiB0eXBlIG9mIHZvbHVtZSAqLwpAQCAtMzMzLDggKzMzNCw4IEBACiAJc3RydWN0IGFmc19zZXJ2ZXIJKnNlcnZlcjsJLyogc2VydmVyIGN1cnJlbnRseSBzdXBwbHlpbmcgdGhpcyBmaWxlICovCiAJc3RydWN0IGFmc19maWQJCWZpZDsJCS8qIHRoZSBmaWxlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5vZGUgKi8KIAlzdHJ1Y3QgYWZzX2ZpbGVfc3RhdHVzCXN0YXR1czsJCS8qIEFGUyBzdGF0dXMgaW5mbyBmb3IgdGhpcyBmaWxlICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCXN0cnVjdCBjYWNoZWZzX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY2FjaGU7CQkvKiBjYWNoaW5nIGNvb2tpZSAqLwogI2VuZGlmCiAJc3RydWN0IGFmc19wZXJtaXRzCSpwZXJtaXRzOwkvKiBjYWNoZSBvZiBwZXJtaXRzIHNvIGZhciBvYnRhaW5lZCAqLwogCXN0cnVjdCBtdXRleAkJcGVybWl0c19sb2NrOwkvKiBsb2NrIGZvciBhbHRlcmluZyBwZXJtaXRzIGxpc3QgKi8KQEAgLTQyOCw2ICs0MjksMjIgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKKyAqIGNhY2hlLmMKKyAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX25ldGZzIGFmc19jYWNoZV9uZXRmczsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc19jZWxsX2NhY2hlX2luZGV4X2RlZjsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmOworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3ZvbHVtZV9jYWNoZV9pbmRleF9kZWY7CitleHRlcm4gc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmOworI2Vsc2UKKyNkZWZpbmUgYWZzX2NlbGxfY2FjaGVfaW5kZXhfZGVmCSgqKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKikgTlVMTCkKKyNkZWZpbmUgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYJKCooc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqKSBOVUxMKQorI2RlZmluZSBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZgkoKihzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICopIE5VTEwpCisjZGVmaW5lIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWYJKCooc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqKSBOVUxMKQorI2VuZGlmCisKKy8qCiAgKiBjYWxsYmFjay5jCiAgKi8KIGV4dGVybiB2b2lkIGFmc19pbml0X2NhbGxiYWNrX3N0YXRlKHN0cnVjdCBhZnNfc2VydmVyICopOwpAQCAtNDQ2LDkgKzQ2Myw2IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGFmc19wcm9jX2NlbGxzX3NlbTsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGFmc19wcm9jX2NlbGxzOwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBzdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX2NhY2hlX2NlbGxfaW5kZXhfZGVmOwotI2VuZGlmCiAKICNkZWZpbmUgYWZzX2dldF9jZWxsKEMpIGRvIHsgYXRvbWljX2luYygmKEMpLT51c2FnZSk7IH0gd2hpbGUoMCkKIGV4dGVybiBpbnQgYWZzX2NlbGxfaW5pdChjaGFyICopOwpAQCAtNTU0LDkgKzU2OCw2IEBACiAgKiBtYWluLmMKICAqLwogZXh0ZXJuIHN0cnVjdCBhZnNfdXVpZCBhZnNfdXVpZDsKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfbmV0ZnMgYWZzX2NhY2hlX25ldGZzOwotI2VuZGlmCiAKIC8qCiAgKiBtaXNjLmMKQEAgLTYzNywxMCArNjQ4LDYgQEAKIC8qCiAgKiB2bGNsaWVudC5jCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bG9jYXRpb25fY2FjaGVfaW5kZXhfZGVmOwotI2VuZGlmCi0KIGV4dGVybiBpbnQgYWZzX3ZsX2dldF9lbnRyeV9ieV9uYW1lKHN0cnVjdCBpbl9hZGRyICosIHN0cnVjdCBrZXkgKiwKIAkJCQkgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgYWZzX3dhaXRfbW9kZSAqKTsKQEAgLTY2NCwxMiArNjcxLDYgQEAKIC8qCiAgKiB2bm9kZS5jCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWY7Ci0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBhZnNfdGltZXJfb3BzIGFmc192bm9kZV9jYl90aW1lZF9vdXRfb3BzOwotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhZnNfdm5vZGUgKkFGU19GU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGFmc192bm9kZSwgdmZzX2lub2RlKTsKQEAgLTcxMSwxMCArNzEyLDYgQEAKIC8qCiAgKiB2b2x1bWUuYwogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotZXh0ZXJuIHN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZjsKLSNlbmRpZgotCiAjZGVmaW5lIGFmc19nZXRfdm9sdW1lKFYpIGRvIHsgYXRvbWljX2luYygmKFYpLT51c2FnZSk7IH0gd2hpbGUoMCkKIAogZXh0ZXJuIHZvaWQgYWZzX3B1dF92b2x1bWUoc3RydWN0IGFmc192b2x1bWUgKik7CmRpZmYgLS1naXQgYS9mcy9hZnMvbWFpbi5jIGIvZnMvYWZzL21haW4uYwppbmRleCAyZDNlNWQ0Li42NmQ1NGQzIDEwMDY0NAotLS0gYS9mcy9hZnMvbWFpbi5jCisrKyBiL2ZzL2Fmcy9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKiBBRlMgY2xpZW50IGZpbGUgc3lzdGVtCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiw1IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSwxOCArMjksNiBAQAogbW9kdWxlX3BhcmFtKHJvb3RjZWxsLCBjaGFycCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJvb3RjZWxsLCAicm9vdCBBRlMgY2VsbCBuYW1lIGFuZCBWTCBzZXJ2ZXIgSVAgYWRkciBsaXN0Iik7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgc3RydWN0IGNhY2hlZnNfbmV0ZnNfb3BlcmF0aW9ucyBhZnNfY2FjaGVfb3BzID0gewotCS5nZXRfcGFnZV9jb29raWUJPSBhZnNfY2FjaGVfZ2V0X3BhZ2VfY29va2llLAotfTsKLQotc3RydWN0IGNhY2hlZnNfbmV0ZnMgYWZzX2NhY2hlX25ldGZzID0gewotCS5uYW1lCQkJPSAiYWZzIiwKLQkudmVyc2lvbgkJPSAwLAotCS5vcHMJCQk9ICZhZnNfY2FjaGVfb3BzLAotfTsKLSNlbmRpZgotCiBzdHJ1Y3QgYWZzX3V1aWQgYWZzX3V1aWQ7CiAKIC8qCkBAIC0xMDQsMTAgKzkyLDkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKIAkvKiB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY2FjaGUgKi8KLQlyZXQgPSBjYWNoZWZzX3JlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMsCi0JCQkJICAgICAmYWZzX2NhY2hlX2NlbGxfaW5kZXhfZGVmKTsKKwlyZXQgPSBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2NhY2hlOwogI2VuZGlmCkBAIC0xNDIsOCArMTI5LDggQEAKIGVycm9yX29wZW5fc29ja2V0OgogZXJyb3JfdmxfdXBkYXRlX2luaXQ6CiBlcnJvcl9jZWxsX2luaXQ6Ci0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCWNhY2hlZnNfdW5yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CiBlcnJvcl9jYWNoZToKICNlbmRpZgogCWFmc19jYWxsYmFja191cGRhdGVfa2lsbCgpOwpAQCAtMTc1LDggKzE2Miw4IEBACiAJYWZzX3Zsb2NhdGlvbl9wdXJnZSgpOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJYWZzX2NlbGxfcHVyZ2UoKTsKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc191bnJlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKICNlbmRpZgogCWFmc19wcm9jX2NsZWFudXAoKTsKIAlyY3VfYmFycmllcigpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL21udHB0LmMgYi9mcy9hZnMvbW50cHQuYwppbmRleCA3OGRiNDk1Li4yYjllMmQwIDEwMDY0NAotLS0gYS9mcy9hZnMvbW50cHQuYworKysgYi9mcy9hZnMvbW50cHQuYwpAQCAtMTczLDkgKzE3Myw5IEBACiAJaWYgKFBhZ2VFcnJvcihwYWdlKSkKIAkJZ290byBlcnJvcjsKIAotCWJ1ZiA9IGttYXAocGFnZSk7CisJYnVmID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCW1lbWNweShkZXZuYW1lLCBidWYsIHNpemUpOwotCWt1bm1hcChwYWdlKTsKKwlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fVVNFUjApOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlwYWdlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL3Byb2MuYyBiL2ZzL2Fmcy9wcm9jLmMKaW5kZXggNzU3OGMxYS4uODYzMDYxNSAxMDA2NDQKLS0tIGEvZnMvYWZzL3Byb2MuYworKysgYi9mcy9hZnMvcHJvYy5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIAlwcm9jX2FmcyA9IHByb2NfbWtkaXIoImZzL2FmcyIsIE5VTEwpOwogCWlmICghcHJvY19hZnMpCiAJCWdvdG8gZXJyb3JfZGlyOwotCXByb2NfYWZzLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcCA9IHByb2NfY3JlYXRlKCJjZWxscyIsIDAsIHByb2NfYWZzLCAmYWZzX3Byb2NfY2VsbHNfZm9wcyk7CiAJaWYgKCFwKQpkaWZmIC0tZ2l0IGEvZnMvYWZzL3Zsb2NhdGlvbi5jIGIvZnMvYWZzL3Zsb2NhdGlvbi5jCmluZGV4IDg0OWZjMzEuLmVjMmE3NDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy92bG9jYXRpb24uYworKysgYi9mcy9hZnMvdmxvY2F0aW9uLmMKQEAgLTI4MSw5ICsyODEsOCBAQAogCiAJdmwtPnZsZGIgPSAqdmxkYjsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQkvKiB1cGRhdGUgdm9sdW1lIGVudHJ5IGluIGxvY2FsIGNhY2hlICovCi0JY2FjaGVmc191cGRhdGVfY29va2llKHZsLT5jYWNoZSk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV91cGRhdGVfY29va2llKHZsLT5jYWNoZSk7CiAjZW5kaWYKIH0KIApAQCAtMzA0LDExICszMDMsOSBAQAogCW1lbXNldCgmdmxkYiwgMCwgc2l6ZW9mKHZsZGIpKTsKIAogCS8qIHNlZSBpZiB3ZSBoYXZlIGFuIGluLWNhY2hlIGNvcHkgKHdpbGwgc2V0IHZsLT52YWxpZCBpZiB0aGVyZSBpcykgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZShjZWxsLT5jYWNoZSwKLQkJCSAgICAgICAmYWZzX3ZvbHVtZV9jYWNoZV9pbmRleF9kZWYsCi0JCQkgICAgICAgdmxvY2F0aW9uLAotCQkJICAgICAgICZ2bC0+Y2FjaGUpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXZsLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodmwtPmNlbGwtPmNhY2hlLAorCQkJCQkgICAmYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYsIHZsKTsKICNlbmRpZgogCiAJaWYgKHZsLT52YWxpZCkgewpAQCAtNDIwLDYgKzQxNywxMSBAQAogCXNwaW5fdW5sb2NrKCZ2bC0+bG9jayk7CiAJd2FrZV91cCgmdmwtPndhaXRxKTsKIAorCS8qIHVwZGF0ZSB2b2x1bWUgZW50cnkgaW4gbG9jYWwgY2FjaGUgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3VwZGF0ZV9jb29raWUodmwtPmNhY2hlKTsKKyNlbmRpZgorCiAJLyogc2NoZWR1bGUgZm9yIHJlZ3VsYXIgdXBkYXRlcyAqLwogCWFmc192bG9jYXRpb25fcXVldWVfZm9yX3VwZGF0ZXModmwpOwogCWdvdG8gc3VjY2VzczsKQEAgLTQ2NSw3ICs0NjcsNyBAQAogCXNwaW5fdW5sb2NrKCZ2bC0+bG9jayk7CiAKIHN1Y2Nlc3M6Ci0JX2xlYXZlKCIgPSAlcCIsdmwpOworCV9sZWF2ZSgiID0gJXAiLCB2bCk7CiAJcmV0dXJuIHZsOwogCiBlcnJvcl9hYmFuZG9uOgpAQCAtNTIzLDEwICs1MjUsOSBAQAogewogCV9lbnRlcigiJXAiLCB2bCk7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19yZWxpbnF1aXNoX2Nvb2tpZSh2bC0+Y2FjaGUsIDApOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodmwtPmNhY2hlLCAwKTsKICNlbmRpZgotCiAJYWZzX3B1dF9jZWxsKHZsLT5jZWxsKTsKIAlrZnJlZSh2bCk7CiB9CmRpZmYgLS1naXQgYS9mcy9hZnMvdm9sdW1lLmMgYi9mcy9hZnMvdm9sdW1lLmMKaW5kZXggOGJhYjBlMy4uYTM1M2U2OSAxMDA2NDQKLS0tIGEvZnMvYWZzL3ZvbHVtZS5jCisrKyBiL2ZzL2Fmcy92b2x1bWUuYwpAQCAtMTI0LDEzICsxMjQsMTEgQEAKIAl9CiAKIAkvKiBhdHRhY2ggdGhlIGNhY2hlIGFuZCB2b2x1bWUgbG9jYXRpb24gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZSh2bG9jYXRpb24tPmNhY2hlLAotCQkJICAgICAgICZhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmLAotCQkJICAgICAgIHZvbHVtZSwKLQkJCSAgICAgICAmdm9sdW1lLT5jYWNoZSk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJdm9sdW1lLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodmxvY2F0aW9uLT5jYWNoZSwKKwkJCQkJICAgICAgICZhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkJICAgICAgIHZvbHVtZSk7CiAjZW5kaWYKLQogCWFmc19nZXRfdmxvY2F0aW9uKHZsb2NhdGlvbik7CiAJdm9sdW1lLT52bG9jYXRpb24gPSB2bG9jYXRpb247CiAKQEAgLTE5NCw4ICsxOTIsOCBAQAogCXVwX3dyaXRlKCZ2bG9jYXRpb24tPmNlbGwtPnZsX3NlbSk7CiAKIAkvKiBmaW5pc2ggY2xlYW5pbmcgdXAgdGhlIHZvbHVtZSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKHZvbHVtZS0+Y2FjaGUsIDApOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUodm9sdW1lLT5jYWNoZSwgMCk7CiAjZW5kaWYKIAlhZnNfcHV0X3Zsb2NhdGlvbih2bG9jYXRpb24pOwogCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDNmYjM2ZDQuLmMyZTdhN2YgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC03ODAsMyArNzgwLDI0IEBACiAJX2xlYXZlKCIgPSAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGF0IGEgcHJldmlvdXNseSByZWFkLW9ubHkgcGFnZSBpcyBhYm91dCB0byBiZWNvbWUgd3JpdGFibGUKKyAqIC0gaWYgaXQgcmV0dXJucyBhbiBlcnJvciwgdGhlIGNhbGxlciB3aWxsIGRlbGl2ZXIgYSBidXMgZXJyb3Igc2lnbmFsCisgKi8KK2ludCBhZnNfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KTsKKworCV9lbnRlcigie3sleDoldX19LHslbHh9IiwKKwkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4KTsKKworCS8qIHdhaXQgZm9yIHRoZSBwYWdlIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNhY2hlIGJlZm9yZSB3ZSBhbGxvdyBpdCB0bworCSAqIGJlIG1vZGlmaWVkICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUodm5vZGUtPmNhY2hlLCBwYWdlKTsKKyNlbmRpZgorCisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2F1dG9mc19pLmggYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKaW5kZXggYTc2ODAzMS4uYjdmZjMzYyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCisrKyBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaApAQCAtMTg2LDYgKzE4Niw4IEBACiBpbnQgYXV0b2ZzNF9leHBpcmVfcnVuKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwKIAkJCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqLAogCQkJc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlIF9fdXNlciAqKTsKK2ludCBhdXRvZnM0X2RvX2V4cGlyZV9tdWx0aShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCSAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IHdoZW4pOwogaW50IGF1dG9mczRfZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwKIAkJCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqLCBpbnQgX191c2VyICopOwogc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jIGIvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYwppbmRleCAwMjVlMTA1Li45ZTVhZThhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jCisrKyBiL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMKQEAgLTUyNSw0MCArNTI1LDEzIEBACiAJCQkJICAgc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCiAJCQkJICAgc3RydWN0IGF1dG9mc19kZXZfaW9jdGwgKnBhcmFtKQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKLQlpbnQgZXJyID0gLUVBR0FJTjsKIAlpbnQgaG93OwogCiAJaG93ID0gcGFyYW0tPmV4cGlyZS5ob3c7CiAJbW50ID0gZnAtPmZfcGF0aC5tbnQ7CiAKLQlpZiAoYXV0b2ZzX3R5cGVfdHJpZ2dlcihzYmktPnR5cGUpKQotCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc2JpLT5zYiwgbW50LCBzYmksIGhvdyk7Ci0JZWxzZQotCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzYmktPnNiLCBtbnQsIHNiaSwgaG93KTsKLQotCWlmIChkZW50cnkpIHsKLQkJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKLQotCQkvKgotCQkgKiBUaGlzIGlzIHN5bmNocm9ub3VzIGJlY2F1c2UgaXQgbWFrZXMgdGhlIGRhZW1vbiBhCi0JCSAqIGxpdHRsZSBlYXNpZXIKLQkJKi8KLQkJZXJyID0gYXV0b2ZzNF93YWl0KHNiaSwgZGVudHJ5LCBORllfRVhQSVJFKTsKLQotCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7Ci0JCWlmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9NT1VOVFBPSU5UKSB7Ci0JCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX01PVU5UUE9JTlQ7Ci0JCQlzYmktPnNiLT5zX3Jvb3QtPmRfbW91bnRlZCsrOwotCQl9Ci0JCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfRVhQSVJJTkc7Ci0JCWNvbXBsZXRlX2FsbCgmaW5vLT5leHBpcmVfY29tcGxldGUpOwotCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQkJZHB1dChkZW50cnkpOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIGF1dG9mczRfZG9fZXhwaXJlX211bHRpKHNiaS0+c2IsIG1udCwgc2JpLCBob3cpOwogfQogCiAvKiBDaGVjayBpZiBhdXRvZnMgbW91bnQgcG9pbnQgaXMgaW4gdXNlICovCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2V4cGlyZS5jIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwppbmRleCBlM2JkNTA3Li43NWY3ZGRhIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2V4cGlyZS5jCisrKyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKQEAgLTQ3OCwyMiArNDc4LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogQ2FsbCByZXBlYXRlZGx5IHVudGlsIGl0IHJldHVybnMgLUVBR0FJTiwgbWVhbmluZyB0aGVyZSdzIG5vdGhpbmcKLSAgIG1vcmUgdG8gYmUgZG9uZSAqLwotaW50IGF1dG9mczRfZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAotCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksIGludCBfX3VzZXIgKmFyZykKK2ludCBhdXRvZnM0X2RvX2V4cGlyZV9tdWx0aShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCSAgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IHdoZW4pCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWludCByZXQgPSAtRUFHQUlOOwotCWludCBkb19ub3cgPSAwOwotCi0JaWYgKGFyZyAmJiBnZXRfdXNlcihkb19ub3csIGFyZykpCi0JCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGF1dG9mc190eXBlX3RyaWdnZXIoc2JpLT50eXBlKSkKLQkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHNiLCBtbnQsIHNiaSwgZG9fbm93KTsKKwkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfZGlyZWN0KHNiLCBtbnQsIHNiaSwgd2hlbik7CiAJZWxzZQotCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9pbmRpcmVjdChzYiwgbW50LCBzYmksIGRvX25vdyk7CisJCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHNiLCBtbnQsIHNiaSwgd2hlbik7CiAKIAlpZiAoZGVudHJ5KSB7CiAJCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7CkBAIC01MTYsMyArNTEwLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogQ2FsbCByZXBlYXRlZGx5IHVudGlsIGl0IHJldHVybnMgLUVBR0FJTiwgbWVhbmluZyB0aGVyZSdzIG5vdGhpbmcKKyAgIG1vcmUgdG8gYmUgZG9uZSAqLworaW50IGF1dG9mczRfZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksIGludCBfX3VzZXIgKmFyZykKK3sKKwlpbnQgZG9fbm93ID0gMDsKKworCWlmIChhcmcgJiYgZ2V0X3VzZXIoZG9fbm93LCBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBhdXRvZnM0X2RvX2V4cGlyZV9tdWx0aShzYiwgbW50LCBzYmksIGRvX25vdyk7Cit9CisKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggNzRiMTQ2OS4uZTM4M2JmMCAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTQ4NSwyMiArNDg1LDYgQEAKIAlEUFJJTlRLKCJwaWQgPSAldSwgcGdycCA9ICV1LCBjYXRhdG9uaWMgPSAlZCwgb3pfbW9kZSA9ICVkIiwKIAkJIGN1cnJlbnQtPnBpZCwgdGFza19wZ3JwX25yKGN1cnJlbnQpLCBzYmktPmNhdGF0b25pYywgb3pfbW9kZSk7CiAKLQlleHBpcmluZyA9IGF1dG9mczRfbG9va3VwX2V4cGlyaW5nKHNiaSwgZGVudHJ5LT5kX3BhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKLQlpZiAoZXhwaXJpbmcpIHsKLQkJLyoKLQkJICogSWYgd2UgYXJlIHJhY2luZyB3aXRoIGV4cGlyZSB0aGUgcmVxdWVzdCBtaWdodCBub3QKLQkJICogYmUgcXVpdGUgY29tcGxldGUgYnV0IHRoZSBkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZAotCQkgKiBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsLCBzbyBqdXN0IHdhaXQgZm9yIGl0LgotCQkgKi8KLQkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGV4cGlyaW5nKTsKLQkJYXV0b2ZzNF9leHBpcmVfd2FpdChleHBpcmluZyk7Ci0JCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmaW5vLT5leHBpcmluZykpCi0JCQlsaXN0X2RlbF9pbml0KCZpbm8tPmV4cGlyaW5nKTsKLQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQlkcHV0KGV4cGlyaW5nKTsKLQl9Ci0KIAl1bmhhc2hlZCA9IGF1dG9mczRfbG9va3VwX2FjdGl2ZShzYmksIGRlbnRyeS0+ZF9wYXJlbnQsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKHVuaGFzaGVkKQogCQlkZW50cnkgPSB1bmhhc2hlZDsKQEAgLTUzOCwxNCArNTIyLDMxIEBACiAJfQogCiAJaWYgKCFvel9tb2RlKSB7CisJCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKKwkJZXhwaXJpbmcgPSBhdXRvZnM0X2xvb2t1cF9leHBpcmluZyhzYmksCisJCQkJCQkgICBkZW50cnktPmRfcGFyZW50LAorCQkJCQkJICAgJmRlbnRyeS0+ZF9uYW1lKTsKKwkJaWYgKGV4cGlyaW5nKSB7CisJCQkvKgorCQkJICogSWYgd2UgYXJlIHJhY2luZyB3aXRoIGV4cGlyZSB0aGUgcmVxdWVzdCBtaWdodCBub3QKKwkJCSAqIGJlIHF1aXRlIGNvbXBsZXRlIGJ1dCB0aGUgZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQKKwkJCSAqIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwsIHNvIGp1c3Qgd2FpdCBmb3IgaXQuCisJCQkgKi8KKwkJCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhleHBpcmluZyk7CisJCQlhdXRvZnM0X2V4cGlyZV93YWl0KGV4cGlyaW5nKTsKKwkJCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmluby0+ZXhwaXJpbmcpKQorCQkJCWxpc3RfZGVsX2luaXQoJmluby0+ZXhwaXJpbmcpOworCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQkJZHB1dChleHBpcmluZyk7CisJCX0KKwogCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9BVVRPRlNfUEVORElORzsKIAkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJaWYgKGRlbnRyeS0+ZF9vcCAmJiBkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkgewotCQkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOworCQlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKQogCQkJKGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKShkZW50cnksIG5kKTsKLQkJCW11dGV4X2xvY2soJmRpci0+aV9tdXRleCk7Ci0JCX0KKwkJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvYmVmcy9saW51eHZmcy5jIGIvZnMvYmVmcy9saW51eHZmcy5jCmluZGV4IGQwNmNiMDIuLjc2YWZkMGQgMTAwNjQ0Ci0tLSBhL2ZzL2JlZnMvbGludXh2ZnMuYworKysgYi9mcy9iZWZzL2xpbnV4dmZzLmMKQEAgLTkwMCw2ICs5MDAsNyBAQAogYmVmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAliZWZzX2RlYnVnKHNiLCAiLS0tPiBiZWZzX3N0YXRmcygpIik7CiAKQEAgLTkxMCw2ICs5MTEsOCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX2ZpbGVzID0gMDsJLyogVU5LTk9XTiAqLwogCWJ1Zi0+Zl9mZnJlZSA9IDA7CS8qIFVOS05PV04gKi8KKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IEJFRlNfTkFNRV9MRU47CiAKIAliZWZzX2RlYnVnKHNiLCAiPC0tLSBiZWZzX3N0YXRmcygpIik7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggMzNiNzIzNS4uNDAzODFkZiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMTIsOCArMTIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjEsMjAgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zaG0uaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZmNvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgpAQCAtNTc2LDcgKzU2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBlcnJvcjsKIAlzdHJ1Y3QgZWxmX3BoZHIgKmVsZl9wcG50LCAqZWxmX3BoZGF0YTsKIAl1bnNpZ25lZCBsb25nIGVsZl9ic3MsIGVsZl9icms7Ci0JaW50IGVsZl9leGVjX2ZpbGVubzsKIAlpbnQgcmV0dmFsLCBpOwogCXVuc2lnbmVkIGludCBzaXplOwogCXVuc2lnbmVkIGxvbmcgZWxmX2VudHJ5OwpAQCAtNjMxLDEyICs2MjMsNiBAQAogCQlnb3RvIG91dF9mcmVlX3BoOwogCX0KIAotCXJldHZhbCA9IGdldF91bnVzZWRfZmQoKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBvdXRfZnJlZV9waDsKLQlnZXRfZmlsZShicHJtLT5maWxlKTsKLQlmZF9pbnN0YWxsKGVsZl9leGVjX2ZpbGVubyA9IHJldHZhbCwgYnBybS0+ZmlsZSk7Ci0KIAllbGZfcHBudCA9IGVsZl9waGRhdGE7CiAJZWxmX2JzcyA9IDA7CiAJZWxmX2JyayA9IDA7CkBAIC02NTUsMTMgKzY0MSwxMyBAQAogCQkJcmV0dmFsID0gLUVOT0VYRUM7CiAJCQlpZiAoZWxmX3BwbnQtPnBfZmlsZXN6ID4gUEFUSF9NQVggfHwgCiAJCQkgICAgZWxmX3BwbnQtPnBfZmlsZXN6IDwgMikKLQkJCQlnb3RvIG91dF9mcmVlX2ZpbGU7CisJCQkJZ290byBvdXRfZnJlZV9waDsKIAogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCWVsZl9pbnRlcnByZXRlciA9IGttYWxsb2MoZWxmX3BwbnQtPnBfZmlsZXN6LAogCQkJCQkJICBHRlBfS0VSTkVMKTsKIAkJCWlmICghZWxmX2ludGVycHJldGVyKQotCQkJCWdvdG8gb3V0X2ZyZWVfZmlsZTsKKwkJCQlnb3RvIG91dF9mcmVlX3BoOwogCiAJCQlyZXR2YWwgPSBrZXJuZWxfcmVhZChicHJtLT5maWxlLCBlbGZfcHBudC0+cF9vZmZzZXQsCiAJCQkJCSAgICAgZWxmX2ludGVycHJldGVyLApAQCAtOTU2LDggKzk0Miw2IEBACiAKIAlrZnJlZShlbGZfcGhkYXRhKTsKIAotCXN5c19jbG9zZShlbGZfZXhlY19maWxlbm8pOwotCiAJc2V0X2JpbmZtdCgmZWxmX2Zvcm1hdCk7CiAKICNpZmRlZiBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTCkBAIC0xMDI4LDggKzEwMTIsNiBAQAogCQlmcHV0KGludGVycHJldGVyKTsKIG91dF9mcmVlX2ludGVycDoKIAlrZnJlZShlbGZfaW50ZXJwcmV0ZXIpOwotb3V0X2ZyZWVfZmlsZToKLQlzeXNfY2xvc2UoZWxmX2V4ZWNfZmlsZW5vKTsKIG91dF9mcmVlX3BoOgogCWtmcmVlKGVsZl9waGRhdGEpOwogCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IGYzZTcyYzUuLjcwY2ZjNGIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTk3Miw5ICs5NzIsMTIgQEAKIAkJCXBhcmFtcy0+ZWxmaGRyX2FkZHIgPSBzZWctPmFkZHI7CiAKIAkJLyogY2xlYXIgYW55IHNwYWNlIGFsbG9jYXRlZCBidXQgbm90IGxvYWRlZCAqLwotCQlpZiAocGhkci0+cF9maWxlc3ogPCBwaGRyLT5wX21lbXN6KQotCQkJY2xlYXJfdXNlcigodm9pZCAqKSAoc2VnLT5hZGRyICsgcGhkci0+cF9maWxlc3opLAotCQkJCSAgIHBoZHItPnBfbWVtc3ogLSBwaGRyLT5wX2ZpbGVzeik7CisJCWlmIChwaGRyLT5wX2ZpbGVzeiA8IHBoZHItPnBfbWVtc3opIHsKKwkJCXJldCA9IGNsZWFyX3VzZXIoKHZvaWQgKikgKHNlZy0+YWRkciArIHBoZHItPnBfZmlsZXN6KSwKKwkJCQkJIHBoZHItPnBfbWVtc3ogLSBwaGRyLT5wX2ZpbGVzeik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KIAogCQlpZiAobW0pIHsKIAkJCWlmIChwaGRyLT5wX2ZsYWdzICYgUEZfWCkgewpAQCAtMTAxNCw3ICsxMDE3LDcgQEAKIAlzdHJ1Y3QgZWxmMzJfZmRwaWNfbG9hZHNlZyAqc2VnOwogCXN0cnVjdCBlbGYzMl9waGRyICpwaGRyOwogCXVuc2lnbmVkIGxvbmcgbG9hZF9hZGRyLCBkZWx0YV92YWRkcjsKLQlpbnQgbG9vcCwgZHZzZXQ7CisJaW50IGxvb3AsIGR2c2V0LCByZXQ7CiAKIAlsb2FkX2FkZHIgPSBwYXJhbXMtPmxvYWRfYWRkcjsKIAlkZWx0YV92YWRkciA9IDA7CkBAIC0xMTE0LDcgKzExMTcsOSBAQAogCQkgKiBQVF9MT0FEICovCiAJCWlmIChwcm90ICYgUFJPVF9XUklURSAmJiBkaXNwID4gMCkgewogCQkJa2RlYnVnKCJjbGVhclslZF0gYWQ9JWx4IHN6PSVseCIsIGxvb3AsIG1hZGRyLCBkaXNwKTsKLQkJCWNsZWFyX3VzZXIoKHZvaWQgX191c2VyICopIG1hZGRyLCBkaXNwKTsKKwkJCXJldCA9IGNsZWFyX3VzZXIoKHZvaWQgX191c2VyICopIG1hZGRyLCBkaXNwKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKIAkJCW1hZGRyICs9IGRpc3A7CiAJCX0KIApAQCAtMTE0OSwxNSArMTE1NCwxOSBAQAogCQlpZiAocHJvdCAmIFBST1RfV1JJVEUgJiYgZXhjZXNzMSA+IDApIHsKIAkJCWtkZWJ1ZygiY2xlYXJbJWRdIGFkPSVseCBzej0lbHgiLAogCQkJICAgICAgIGxvb3AsIG1hZGRyICsgcGhkci0+cF9maWxlc3osIGV4Y2VzczEpOwotCQkJY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwKLQkJCQkgICBleGNlc3MxKTsKKwkJCXJldCA9IGNsZWFyX3VzZXIoKHZvaWQgX191c2VyICopIG1hZGRyICsgcGhkci0+cF9maWxlc3osCisJCQkJCSBleGNlc3MxKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCiAjZWxzZQogCQlpZiAoZXhjZXNzID4gMCkgewogCQkJa2RlYnVnKCJjbGVhclslZF0gYWQ9JWx4IHN6PSVseCIsCiAJCQkgICAgICAgbG9vcCwgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwgZXhjZXNzKTsKLQkJCWNsZWFyX3VzZXIoKHZvaWQgKikgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwgZXhjZXNzKTsKKwkJCXJldCA9IGNsZWFyX3VzZXIoKHZvaWQgKikgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwgZXhjZXNzKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKIAkJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9zb20uYyBiL2ZzL2JpbmZtdF9zb20uYwppbmRleCAwODY0NGE2Li5lZmY3NGI5IDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfc29tLmMKKysrIGIvZnMvYmluZm10X3NvbS5jCkBAIC0xODgsNyArMTg4LDYgQEAKIHN0YXRpYyBpbnQKIGxvYWRfc29tX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICogYnBybSwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewotCWludCBzb21fZXhlY19maWxlbm87CiAJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHNvbV9lbnRyeTsKQEAgLTIyMCwxMiArMjE5LDYgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQlyZXR2YWwgPSBnZXRfdW51c2VkX2ZkKCk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWdvdG8gb3V0X2ZyZWU7Ci0JZ2V0X2ZpbGUoYnBybS0+ZmlsZSk7Ci0JZmRfaW5zdGFsbChzb21fZXhlY19maWxlbm8gPSByZXR2YWwsIGJwcm0tPmZpbGUpOwotCiAJLyogRmx1c2ggYWxsIHRyYWNlcyBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgZXhlY3V0YWJsZSAqLwogCXJldHZhbCA9IGZsdXNoX29sZF9leGVjKGJwcm0pOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDhjM2M2ODkuLmY0NWRiYzEgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAl9CiAJcmV0dXJuIHN5bmNfYmxvY2tkZXYoYmRldik7CiB9CitFWFBPUlRfU1lNQk9MKGZzeW5jX2JkZXYpOwogCiAvKioKICAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9NYWtlZmlsZSBiL2ZzL2J0cmZzL01ha2VmaWxlCmluZGV4IGQyY2Y1YTUuLjlhZGY1ZTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL01ha2VmaWxlCisrKyBiL2ZzL2J0cmZzL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCSAgIGV4dGVudF9tYXAubyBzeXNmcy5vIHN0cnVjdC1mdW5jcy5vIHhhdHRyLm8gb3JkZXJlZC1kYXRhLm8gXAogCSAgIGV4dGVudF9pby5vIHZvbHVtZXMubyBhc3luYy10aHJlYWQubyBpb2N0bC5vIGxvY2tpbmcubyBvcnBoYW4ubyBcCiAJICAgcmVmLWNhY2hlLm8gZXhwb3J0Lm8gdHJlZS1sb2cubyBhY2wubyBmcmVlLXNwYWNlLWNhY2hlLm8gemxpYi5vIFwKLQkgICBjb21wcmVzc2lvbi5vCisJICAgY29tcHJlc3Npb24ubyBkZWxheWVkLXJlZi5vCiBlbHNlCiAKICMgTm9ybWFsIE1ha2VmaWxlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDFkNTNiNjIuLjdmZGQxODQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJfQogCiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAogCWlmIChJU19QT1NJWEFDTChkaXIpICYmIGFjbCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwppbmRleCBjODRjYTFmLi41MWJmZGZjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYworKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlICJhc3luYy10aHJlYWQuaCIKIAogI2RlZmluZSBXT1JLX1FVRVVFRF9CSVQgMApAQCAtMTk1LDYgKzE5NCw5IEBACiAJCQkJaWYgKCFsaXN0X2VtcHR5KCZ3b3JrZXItPnBlbmRpbmcpKQogCQkJCQljb250aW51ZTsKIAorCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCWJyZWFrOworCiAJCQkJLyogc3RpbGwgbm8gbW9yZSB3b3JrPywgc2xlZXAgZm9yIHJlYWwgKi8KIAkJCQlzcGluX2xvY2tfaXJxKCZ3b3JrZXItPmxvY2spOwogCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0yMDgsNyArMjEwLDggQEAKIAkJCQl3b3JrZXItPndvcmtpbmcgPSAwOwogCQkJCXNwaW5fdW5sb2NrX2lycSgmd29ya2VyLT5sb2NrKTsKIAotCQkJCXNjaGVkdWxlKCk7CisJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCXNjaGVkdWxlKCk7CiAJCQl9CiAJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmggYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCmluZGV4IDcyNjc3Y2UuLmIzMDk4NmYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKKysrIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaApAQCAtNjYsNiArNjYsMTIgQEAKIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGFsbG9jX2lub2RlczsKIAorCS8qCisJICogbGlzdCBmb3IgdHJhY2tpbmcgaW5vZGVzIHRoYXQgbXVzdCBiZSBzZW50IHRvIGRpc2sgYmVmb3JlIGEKKwkgKiByZW5hbWUgb3IgdHJ1bmNhdGUgY29tbWl0CisJICovCisJc3RydWN0IGxpc3RfaGVhZCBvcmRlcmVkX29wZXJhdGlvbnM7CisKIAkvKiB0aGUgc3BhY2VfaW5mbyBmb3Igd2hlcmUgdGhpcyBpbm9kZSdzIGRhdGEgYWxsb2NhdGlvbnMgYXJlIGRvbmUgKi8KIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIApAQCAtODYsMTIgKzkyLDYgQEAKIAkgKi8KIAl1NjQgbG9nZ2VkX3RyYW5zOwogCi0JLyoKLQkgKiB0cmFucyB0aGF0IGxhc3QgbWFkZSBhIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdWxseSBmc3luYydkLiAgVGhpcwotCSAqIGdldHMgcmVzZXQgdG8gemVybyBlYWNoIHRpbWUgdGhlIGlub2RlIGlzIGxvZ2dlZAotCSAqLwotCXU2NCBsb2dfZGlydHlfdHJhbnM7Ci0KIAkvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcGVuZGluZyBkZWxhbGxvYywgdXNlZCBieSBzdGF0IHRvIGNhbGMgdGhlCiAJICogcmVhbCBibG9jayB1c2FnZSBvZiB0aGUgZmlsZQogCSAqLwpAQCAtMTIxLDYgKzEyMSwyNSBAQAogCS8qIHRoZSBzdGFydCBvZiBibG9jayBncm91cCBwcmVmZXJyZWQgZm9yIGFsbG9jYXRpb25zLiAqLwogCXU2NCBibG9ja19ncm91cDsKIAorCS8qIHRoZSBmc3luYyBsb2cgaGFzIHNvbWUgY29ybmVyIGNhc2VzIHRoYXQgbWVhbiB3ZSBoYXZlIHRvIGNoZWNrCisJICogZGlyZWN0b3JpZXMgdG8gc2VlIGlmIGFueSB1bmxpbmtzIGhhdmUgYmVlbiBkb25lIGJlZm9yZQorCSAqIHRoZSBkaXJlY3Rvcnkgd2FzIGxvZ2dlZC4gIFNlZSB0cmVlLWxvZy5jIGZvciBhbGwgdGhlCisJICogZGV0YWlscworCSAqLworCXU2NCBsYXN0X3VubGlua190cmFuczsKKworCS8qCisJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSB0cnVuY2F0ZSB3aGVuIGEgZmlsZSB0aGF0IHVzZWQKKwkgKiB0byBoYXZlIGdvb2QgZGF0YSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gemVyby4gIFdoZW4gaXQgaXMgc2V0CisJICogdGhlIGJ0cmZzIGZpbGUgcmVsZWFzZSBjYWxsIHdpbGwgYWRkIHRoaXMgaW5vZGUgdG8gdGhlCisJICogb3JkZXJlZCBvcGVyYXRpb25zIGxpc3Qgc28gdGhhdCB3ZSBtYWtlIHN1cmUgdG8gZmx1c2ggb3V0IGFueQorCSAqIG5ldyBkYXRhIHRoZSBhcHBsaWNhdGlvbiBtYXkgaGF2ZSB3cml0dGVuIGJlZm9yZSBjb21taXQuCisJICoKKwkgKiB5ZXMsIGl0cyBzaWxseSB0byBoYXZlIGEgc2luZ2xlIGJpdGZsYWcsIGJ1dCB3ZSBtaWdodCBncm93IG1vcmUKKwkgKiBvZiB0aGVzZS4KKwkgKi8KKwl1bnNpZ25lZCBvcmRlcmVkX2RhdGFfY2xvc2U6MTsKKwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5jIGIvZnMvYnRyZnMvY3RyZWUuYwppbmRleCAzN2YzMWI1Li5lNWIyNTMzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmMKQEAgLTI1NCwxOCArMjU0LDEzIEBACiAgKiBlbXB0eV9zaXplIC0tIGEgaGludCB0aGF0IHlvdSBwbGFuIG9uIGRvaW5nIG1vcmUgY293LiAgVGhpcyBpcyB0aGUgc2l6ZSBpbgogICogYnl0ZXMgdGhlIGFsbG9jYXRvciBzaG91bGQgdHJ5IHRvIGZpbmQgZnJlZSBuZXh0IHRvIHRoZSBibG9jayBpdCByZXR1cm5zLgogICogVGhpcyBpcyBqdXN0IGEgaGludCBhbmQgbWF5IGJlIGlnbm9yZWQgYnkgdGhlIGFsbG9jYXRvci4KLSAqCi0gKiBwcmVhbGxvY19kZXN0IC0tIGlmIHlvdSBoYXZlIGFscmVhZHkgcmVzZXJ2ZWQgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNvdywKLSAqIHRoaXMgdXNlcyB0aGF0IGJsb2NrIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuCi0gKiBidHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQgaXMgdXNlZCB0byBmaW5pc2ggdGhlIGFsbG9jYXRpb24uCiAgKi8KIHN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19jb3dfYmxvY2soc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmLAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCiAJCQkgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqY293X3JldCwKLQkJCSAgICAgdTY0IHNlYXJjaF9zdGFydCwgdTY0IGVtcHR5X3NpemUsCi0JCQkgICAgIHU2NCBwcmVhbGxvY19kZXN0KQorCQkJICAgICB1NjQgc2VhcmNoX3N0YXJ0LCB1NjQgZW1wdHlfc2l6ZSkKIHsKIAl1NjQgcGFyZW50X3N0YXJ0OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpjb3c7CkBAIC0yOTEsMjYgKzI4NiwxMCBAQAogCWxldmVsID0gYnRyZnNfaGVhZGVyX2xldmVsKGJ1Zik7CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGJ1Zik7CiAKLQlpZiAocHJlYWxsb2NfZGVzdCkgewotCQlzdHJ1Y3QgYnRyZnNfa2V5IGluczsKLQotCQlpbnMub2JqZWN0aWQgPSBwcmVhbGxvY19kZXN0OwotCQlpbnMub2Zmc2V0ID0gYnVmLT5sZW47Ci0JCWlucy50eXBlID0gQlRSRlNfRVhURU5UX0lURU1fS0VZOwotCi0JCXJldCA9IGJ0cmZzX2FsbG9jX3Jlc2VydmVkX2V4dGVudCh0cmFucywgcm9vdCwgcGFyZW50X3N0YXJ0LAotCQkJCQkJICByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCSAgdHJhbnMtPnRyYW5zaWQsIGxldmVsLCAmaW5zKTsKLQkJQlVHX09OKHJldCk7Ci0JCWNvdyA9IGJ0cmZzX2luaXRfbmV3X2J1ZmZlcih0cmFucywgcm9vdCwgcHJlYWxsb2NfZGVzdCwKLQkJCQkJICAgIGJ1Zi0+bGVuLCBsZXZlbCk7Ci0JfSBlbHNlIHsKLQkJY293ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgYnVmLT5sZW4sCi0JCQkJCSAgICAgcGFyZW50X3N0YXJ0LAotCQkJCQkgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCQkgICAgIHRyYW5zLT50cmFuc2lkLCBsZXZlbCwKLQkJCQkJICAgICBzZWFyY2hfc3RhcnQsIGVtcHR5X3NpemUpOwotCX0KKwljb3cgPSBidHJmc19hbGxvY19mcmVlX2Jsb2NrKHRyYW5zLCByb290LCBidWYtPmxlbiwKKwkJCQkgICAgIHBhcmVudF9zdGFydCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJICAgICB0cmFucy0+dHJhbnNpZCwgbGV2ZWwsCisJCQkJICAgICBzZWFyY2hfc3RhcnQsIGVtcHR5X3NpemUpOwogCWlmIChJU19FUlIoY293KSkKIAkJcmV0dXJuIFBUUl9FUlIoY293KTsKIApAQCAtNDEzLDcgKzM5Miw3IEBACiBub2lubGluZSBpbnQgYnRyZnNfY293X2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYsCiAJCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCi0JCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmNvd19yZXQsIHU2NCBwcmVhbGxvY19kZXN0KQorCQkgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKipjb3dfcmV0KQogewogCXU2NCBzZWFyY2hfc3RhcnQ7CiAJaW50IHJldDsKQEAgLTQzNiw3ICs0MTUsNiBAQAogCSAgICBidHJmc19oZWFkZXJfb3duZXIoYnVmKSA9PSByb290LT5yb290X2tleS5vYmplY3RpZCAmJgogCSAgICAhYnRyZnNfaGVhZGVyX2ZsYWcoYnVmLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKSkgewogCQkqY293X3JldCA9IGJ1ZjsKLQkJV0FSTl9PTihwcmVhbGxvY19kZXN0KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00NDcsOCArNDI1LDcgQEAKIAlidHJmc19zZXRfbG9ja19ibG9ja2luZyhidWYpOwogCiAJcmV0ID0gX19idHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGJ1ZiwgcGFyZW50LAotCQkJCSBwYXJlbnRfc2xvdCwgY293X3JldCwgc2VhcmNoX3N0YXJ0LCAwLAotCQkJCSBwcmVhbGxvY19kZXN0KTsKKwkJCQkgcGFyZW50X3Nsb3QsIGNvd19yZXQsIHNlYXJjaF9zdGFydCwgMCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjE3LDcgKzU5NCw3IEBACiAJCWVyciA9IF9fYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBjdXIsIHBhcmVudCwgaSwKIAkJCQkJJmN1ciwgc2VhcmNoX3N0YXJ0LAogCQkJCQltaW4oMTYgKiBibG9ja3NpemUsCi0JCQkJCSAgICAoZW5kX3Nsb3QgLSBpKSAqIGJsb2Nrc2l6ZSksIDApOworCQkJCQkgICAgKGVuZF9zbG90IC0gaSkgKiBibG9ja3NpemUpKTsKIAkJaWYgKGVycikgewogCQkJYnRyZnNfdHJlZV91bmxvY2soY3VyKTsKIAkJCWZyZWVfZXh0ZW50X2J1ZmZlcihjdXIpOwpAQCAtOTM3LDcgKzkxNCw3IEBACiAJCUJVR19PTighY2hpbGQpOwogCQlidHJmc190cmVlX2xvY2soY2hpbGQpOwogCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhjaGlsZCk7Ci0JCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgY2hpbGQsIG1pZCwgMCwgJmNoaWxkLCAwKTsKKwkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBjaGlsZCwgbWlkLCAwLCAmY2hpbGQpOwogCQlCVUdfT04ocmV0KTsKIAogCQlzcGluX2xvY2soJnJvb3QtPm5vZGVfbG9jayk7CkBAIC05NDUsNiArOTIyLDcgQEAKIAkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CiAKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGNoaWxkLT5zdGFydCwKKwkJCQkJICAgICAgY2hpbGQtPmxlbiwKIAkJCQkJICAgICAgbWlkLT5zdGFydCwgY2hpbGQtPnN0YXJ0LAogCQkJCQkgICAgICByb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCQkJICAgICAgdHJhbnMtPnRyYW5zaWQsIGxldmVsIC0gMSk7CkBAIC05NzEsNiArOTQ5LDEwIEBACiAJICAgIEJUUkZTX05PREVQVFJTX1BFUl9CTE9DSyhyb290KSAvIDQpCiAJCXJldHVybiAwOwogCisJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nICYmCisJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKG1pZCkgPiAyKQorCQlyZXR1cm4gMDsKKwogCWlmIChidHJmc19oZWFkZXJfbnJpdGVtcyhtaWQpIDwgMikKIAkJZXJyX29uX2Vub3NwYyA9IDE7CiAKQEAgLTk3OSw3ICs5NjEsNyBAQAogCQlidHJmc190cmVlX2xvY2sobGVmdCk7CiAJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKGxlZnQpOwogCQl3cmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBsZWZ0LAotCQkJCSAgICAgICBwYXJlbnQsIHBzbG90IC0gMSwgJmxlZnQsIDApOworCQkJCSAgICAgICBwYXJlbnQsIHBzbG90IC0gMSwgJmxlZnQpOwogCQlpZiAod3JldCkgewogCQkJcmV0ID0gd3JldDsKIAkJCWdvdG8gZW5vc3BjOwpAQCAtOTkwLDcgKzk3Miw3IEBACiAJCWJ0cmZzX3RyZWVfbG9jayhyaWdodCk7CiAJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHJpZ2h0KTsKIAkJd3JldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgcmlnaHQsCi0JCQkJICAgICAgIHBhcmVudCwgcHNsb3QgKyAxLCAmcmlnaHQsIDApOworCQkJCSAgICAgICBwYXJlbnQsIHBzbG90ICsgMSwgJnJpZ2h0KTsKIAkJaWYgKHdyZXQpIHsKIAkJCXJldCA9IHdyZXQ7CiAJCQlnb3RvIGVub3NwYzsKQEAgLTExNzEsNyArMTE1Myw3IEBACiAJCQl3cmV0ID0gMTsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgbGVmdCwgcGFyZW50LAotCQkJCQkgICAgICBwc2xvdCAtIDEsICZsZWZ0LCAwKTsKKwkJCQkJICAgICAgcHNsb3QgLSAxLCAmbGVmdCk7CiAJCQlpZiAocmV0KQogCQkJCXdyZXQgPSAxOwogCQkJZWxzZSB7CkBAIC0xMjIyLDcgKzEyMDQsNyBAQAogCQl9IGVsc2UgewogCQkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCByaWdodCwKIAkJCQkJICAgICAgcGFyZW50LCBwc2xvdCArIDEsCi0JCQkJCSAgICAgICZyaWdodCwgMCk7CisJCQkJCSAgICAgICZyaWdodCk7CiAJCQlpZiAocmV0KQogCQkJCXdyZXQgPSAxOwogCQkJZWxzZSB7CkBAIC0xMjYyLDkgKzEyNDQsOSBAQAogICogcmVhZGFoZWFkIG9uZSBmdWxsIG5vZGUgb2YgbGVhdmVzLCBmaW5kaW5nIHRoaW5ncyB0aGF0IGFyZSBjbG9zZQogICogdG8gdGhlIGJsb2NrIGluICdzbG90JywgYW5kIHRyaWdnZXJpbmcgcmEgb24gdGhlbS4KICAqLwotc3RhdGljIG5vaW5saW5lIHZvaWQgcmVhZGFfZm9yX3NlYXJjaChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBzbG90LCB1NjQgb2JqZWN0aWQpCitzdGF0aWMgdm9pZCByZWFkYV9mb3Jfc2VhcmNoKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSAgICAgaW50IGxldmVsLCBpbnQgc2xvdCwgdTY0IG9iamVjdGlkKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlOwogCXN0cnVjdCBidHJmc19kaXNrX2tleSBkaXNrX2tleTsKQEAgLTE0NjUsNiArMTQ0NywxMTcgQEAKIH0KIAogLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgYnRyZnNfc2VhcmNoX3Nsb3QuICBUaGUgZ29hbCBpcyB0byBmaW5kIGEgYmxvY2sKKyAqIGluIGNhY2hlIHdpdGhvdXQgc2V0dGluZyB0aGUgcGF0aCB0byBibG9ja2luZy4gIElmIHdlIGZpbmQgdGhlIGJsb2NrCisgKiB3ZSByZXR1cm4gemVybyBhbmQgdGhlIHBhdGggaXMgdW5jaGFuZ2VkLgorICoKKyAqIElmIHdlIGNhbid0IGZpbmQgdGhlIGJsb2NrLCB3ZSBzZXQgdGhlIHBhdGggYmxvY2tpbmcgYW5kIGRvIHNvbWUKKyAqIHJlYWRhLiAgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIHNlYXJjaCBtdXN0IGJlIHJlcGVhdGVkLgorICovCitzdGF0aWMgaW50CityZWFkX2Jsb2NrX2Zvcl9zZWFyY2goc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnAsCisJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmViX3JldCwgaW50IGxldmVsLCBpbnQgc2xvdCwKKwkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKmtleSkKK3sKKwl1NjQgYmxvY2tucjsKKwl1NjQgZ2VuOworCXUzMiBibG9ja3NpemU7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmIgPSAqZWJfcmV0OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICp0bXA7CisKKwlibG9ja25yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihiLCBzbG90KTsKKwlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGIsIHNsb3QpOworCWJsb2Nrc2l6ZSA9IGJ0cmZzX2xldmVsX3NpemUocm9vdCwgbGV2ZWwgLSAxKTsKKworCXRtcCA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLCBibG9ja3NpemUpOworCWlmICh0bXAgJiYgYnRyZnNfYnVmZmVyX3VwdG9kYXRlKHRtcCwgZ2VuKSkgeworCQkqZWJfcmV0ID0gdG1wOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gYXQgaGlnaCBsZXZlbHMKKwkgKiBvZiB0aGUgYnRyZWUgYnkgZHJvcHBpbmcgbG9ja3MgYmVmb3JlCisJICogd2UgcmVhZC4KKwkgKi8KKwlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7CisJaWYgKHRtcCkKKwkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7CisJaWYgKHAtPnJlYWRhKQorCQlyZWFkYV9mb3Jfc2VhcmNoKHJvb3QsIHAsIGxldmVsLCBzbG90LCBrZXktPm9iamVjdGlkKTsKKworCXRtcCA9IHJlYWRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLCBibG9ja3NpemUsIGdlbik7CisJaWYgKHRtcCkKKwkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGJ0cmZzX3NlYXJjaF9zbG90LiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgY2hlY2tzCisgKiBmb3Igbm9kZS1sZXZlbCBibG9ja3MgYW5kIGRvZXMgYW55IGJhbGFuY2luZyByZXF1aXJlZCBiYXNlZCBvbgorICogdGhlIGluc19sZW4uCisgKgorICogSWYgbm8gZXh0cmEgd29yayB3YXMgcmVxdWlyZWQsIHplcm8gaXMgcmV0dXJuZWQuICBJZiB3ZSBoYWQgdG8KKyAqIGRyb3AgdGhlIHBhdGgsIC1FQUdBSU4gaXMgcmV0dXJuZWQgYW5kIGJ0cmZzX3NlYXJjaF9zbG90IG11c3QKKyAqIHN0YXJ0IG92ZXIKKyAqLworc3RhdGljIGludAorc2V0dXBfbm9kZXNfZm9yX3NlYXJjaChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcCwKKwkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpiLCBpbnQgbGV2ZWwsIGludCBpbnNfbGVuKQoreworCWludCByZXQ7CisJaWYgKChwLT5zZWFyY2hfZm9yX3NwbGl0IHx8IGluc19sZW4gPiAwKSAmJiBidHJmc19oZWFkZXJfbnJpdGVtcyhiKSA+PQorCSAgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLSAzKSB7CisJCWludCBzcmV0OworCisJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7CisJCWlmIChzcmV0KQorCQkJZ290byBhZ2FpbjsKKworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKKwkJc3JldCA9IHNwbGl0X25vZGUodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKKwkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKKworCQlCVUdfT04oc3JldCA+IDApOworCQlpZiAoc3JldCkgeworCQkJcmV0ID0gc3JldDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCX0gZWxzZSBpZiAoaW5zX2xlbiA8IDAgJiYgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPAorCQkgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLyA0KSB7CisJCWludCBzcmV0OworCisJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7CisJCWlmIChzcmV0KQorCQkJZ290byBhZ2FpbjsKKworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKKwkJc3JldCA9IGJhbGFuY2VfbGV2ZWwodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKKwkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKKworCQlpZiAoc3JldCkgeworCQkJcmV0ID0gc3JldDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCQlpZiAoIWIpIHsKKwkJCWJ0cmZzX3JlbGVhc2VfcGF0aChOVUxMLCBwKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJQlVHX09OKGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpID09IDEpOworCX0KKwlyZXR1cm4gMDsKKworYWdhaW46CisJcmV0ID0gLUVBR0FJTjsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIGxvb2sgZm9yIGtleSBpbiB0aGUgdHJlZS4gIHBhdGggaXMgZmlsbGVkIGluIHdpdGggbm9kZXMgYWxvbmcgdGhlIHdheQogICogaWYga2V5IGlzIGZvdW5kLCB3ZSByZXR1cm4gemVybyBhbmQgeW91IGNhbiBmaW5kIHRoZSBpdGVtIGluIHRoZSBsZWFmCiAgKiBsZXZlbCBvZiB0aGUgcGF0aCAobGV2ZWwgMCkKQEAgLTE0ODIsMTcgKzE1NzUsMTEgQEAKIAkJICAgICAgaW5zX2xlbiwgaW50IGNvdykKIHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYjsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdG1wOwogCWludCBzbG90OwogCWludCByZXQ7CiAJaW50IGxldmVsOwotCWludCBzaG91bGRfcmVhZGEgPSBwLT5yZWFkYTsKIAlpbnQgbG93ZXN0X3VubG9jayA9IDE7Ci0JaW50IGJsb2Nrc2l6ZTsKIAl1OCBsb3dlc3RfbGV2ZWwgPSAwOwotCXU2NCBibG9ja25yOwotCXU2NCBnZW47Ci0Jc3RydWN0IGJ0cmZzX2tleSBwcmVhbGxvY19ibG9jazsKIAogCWxvd2VzdF9sZXZlbCA9IHAtPmxvd2VzdF9sZXZlbDsKIAlXQVJOX09OKGxvd2VzdF9sZXZlbCAmJiBpbnNfbGVuID4gMCk7CkBAIC0xNTAxLDggKzE1ODgsNiBAQAogCWlmIChpbnNfbGVuIDwgMCkKIAkJbG93ZXN0X3VubG9jayA9IDI7CiAKLQlwcmVhbGxvY19ibG9jay5vYmplY3RpZCA9IDA7Ci0KIGFnYWluOgogCWlmIChwLT5za2lwX2xvY2tpbmcpCiAJCWIgPSBidHJmc19yb290X25vZGUocm9vdCk7CkBAIC0xNTIzLDUwICsxNjA4LDIxIEBACiAJCWlmIChjb3cpIHsKIAkJCWludCB3cmV0OwogCi0JCQkvKiBpcyBhIGNvdyBvbiB0aGlzIGJsb2NrIG5vdCByZXF1aXJlZCAqLworCQkJLyoKKwkJCSAqIGlmIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGNvdyB0aGlzIGJsb2NrCisJCQkgKiB0aGVuIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoZSBwYXRoIGJsb2NraW5nLAorCQkJICogc28gd2UgdGVzdCBpdCBoZXJlCisJCQkgKi8KIAkJCWlmIChidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihiKSA9PSB0cmFucy0+dHJhbnNpZCAmJgogCQkJICAgIGJ0cmZzX2hlYWRlcl9vd25lcihiKSA9PSByb290LT5yb290X2tleS5vYmplY3RpZCAmJgogCQkJICAgICFidHJmc19oZWFkZXJfZmxhZyhiLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKSkgewogCQkJCWdvdG8gY293X2RvbmU7CiAJCQl9Ci0KLQkJCS8qIG9rLCB3ZSBoYXZlIHRvIGNvdywgaXMgb3VyIG9sZCBwcmVhbGxvYyB0aGUgcmlnaHQKLQkJCSAqIHNpemU/Ci0JCQkgKi8KLQkJCWlmIChwcmVhbGxvY19ibG9jay5vYmplY3RpZCAmJgotCQkJICAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCAhPSBiLT5sZW4pIHsKLQkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcCk7Ci0JCQkJYnRyZnNfZnJlZV9yZXNlcnZlZF9leHRlbnQocm9vdCwKLQkJCQkJICAgcHJlYWxsb2NfYmxvY2sub2JqZWN0aWQsCi0JCQkJCSAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCk7Ci0JCQkJcHJlYWxsb2NfYmxvY2sub2JqZWN0aWQgPSAwOwotCQkJCWdvdG8gYWdhaW47Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBmb3IgaGlnaGVyIGxldmVsIGJsb2NrcywgdHJ5IG5vdCB0byBhbGxvY2F0ZSBibG9ja3MKLQkJCSAqIHdpdGggdGhlIGJsb2NrIGFuZCB0aGUgcGFyZW50IGxvY2tzIGhlbGQuCi0JCQkgKi8KLQkJCWlmIChsZXZlbCA+IDAgJiYgIXByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKSB7Ci0JCQkJdTMyIHNpemUgPSBiLT5sZW47Ci0JCQkJdTY0IGhpbnQgPSBiLT5zdGFydDsKLQotCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwKTsKLQkJCQlyZXQgPSBidHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwKLQkJCQkJCQkgICBzaXplLCBzaXplLCAwLAotCQkJCQkJCSAgIGhpbnQsICh1NjQpLTEsCi0JCQkJCQkJICAgJnByZWFsbG9jX2Jsb2NrLCAwKTsKLQkJCQlCVUdfT04ocmV0KTsKLQkJCQlnb3RvIGFnYWluOwotCQkJfQotCiAJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKIAogCQkJd3JldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgYiwKIAkJCQkJICAgICAgIHAtPm5vZGVzW2xldmVsICsgMV0sCi0JCQkJCSAgICAgICBwLT5zbG90c1tsZXZlbCArIDFdLAotCQkJCQkgICAgICAgJmIsIHByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKTsKLQkJCXByZWFsbG9jX2Jsb2NrLm9iamVjdGlkID0gMDsKKwkJCQkJICAgICAgIHAtPnNsb3RzW2xldmVsICsgMV0sICZiKTsKIAkJCWlmICh3cmV0KSB7CiAJCQkJZnJlZV9leHRlbnRfYnVmZmVyKGIpOwogCQkJCXJldCA9IHdyZXQ7CkBAIC0xNjExLDUxICsxNjY3LDE1IEBACiAJCQlpZiAocmV0ICYmIHNsb3QgPiAwKQogCQkJCXNsb3QgLT0gMTsKIAkJCXAtPnNsb3RzW2xldmVsXSA9IHNsb3Q7Ci0JCQlpZiAoKHAtPnNlYXJjaF9mb3Jfc3BsaXQgfHwgaW5zX2xlbiA+IDApICYmCi0JCQkgICAgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPj0KLQkJCSAgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLSAzKSB7Ci0JCQkJaW50IHNyZXQ7CisJCQlyZXQgPSBzZXR1cF9ub2Rlc19mb3Jfc2VhcmNoKHRyYW5zLCByb290LCBwLCBiLCBsZXZlbCwKKwkJCQkJCSAgICAgaW5zX2xlbik7CisJCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQkJZ290byBhZ2FpbjsKKwkJCWVsc2UgaWYgKHJldCkKKwkJCQlnb3RvIGRvbmU7CisJCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCQkJc2xvdCA9IHAtPnNsb3RzW2xldmVsXTsKIAotCQkJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7Ci0JCQkJaWYgKHNyZXQpCi0JCQkJCWdvdG8gYWdhaW47Ci0KLQkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKLQkJCQlzcmV0ID0gc3BsaXRfbm9kZSh0cmFucywgcm9vdCwgcCwgbGV2ZWwpOwotCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7Ci0KLQkJCQlCVUdfT04oc3JldCA+IDApOwotCQkJCWlmIChzcmV0KSB7Ci0JCQkJCXJldCA9IHNyZXQ7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9Ci0JCQkJYiA9IHAtPm5vZGVzW2xldmVsXTsKLQkJCQlzbG90ID0gcC0+c2xvdHNbbGV2ZWxdOwotCQkJfSBlbHNlIGlmIChpbnNfbGVuIDwgMCAmJgotCQkJCSAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpIDwKLQkJCQkgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLyA0KSB7Ci0JCQkJaW50IHNyZXQ7Ci0KLQkJCQlzcmV0ID0gcmVhZGFfZm9yX2JhbGFuY2Uocm9vdCwgcCwgbGV2ZWwpOwotCQkJCWlmIChzcmV0KQotCQkJCQlnb3RvIGFnYWluOwotCi0JCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7Ci0JCQkJc3JldCA9IGJhbGFuY2VfbGV2ZWwodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKLQkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHAsIE5VTEwpOwotCi0JCQkJaWYgKHNyZXQpIHsKLQkJCQkJcmV0ID0gc3JldDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQliID0gcC0+bm9kZXNbbGV2ZWxdOwotCQkJCWlmICghYikgewotCQkJCQlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7Ci0JCQkJCWdvdG8gYWdhaW47Ci0JCQkJfQotCQkJCXNsb3QgPSBwLT5zbG90c1tsZXZlbF07Ci0JCQkJQlVHX09OKGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpID09IDEpOwotCQkJfQogCQkJdW5sb2NrX3VwKHAsIGxldmVsLCBsb3dlc3RfdW5sb2NrKTsKIAogCQkJLyogdGhpcyBpcyBvbmx5IHRydWUgd2hpbGUgZHJvcHBpbmcgYSBzbmFwc2hvdCAqLwpAQCAtMTY2NCw0NCArMTY4NCwxMSBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAotCQkJYmxvY2tuciA9IGJ0cmZzX25vZGVfYmxvY2twdHIoYiwgc2xvdCk7Ci0JCQlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGIsIHNsb3QpOwotCQkJYmxvY2tzaXplID0gYnRyZnNfbGV2ZWxfc2l6ZShyb290LCBsZXZlbCAtIDEpOworCQkJcmV0ID0gcmVhZF9ibG9ja19mb3Jfc2VhcmNoKHRyYW5zLCByb290LCBwLAorCQkJCQkJICAgICZiLCBsZXZlbCwgc2xvdCwga2V5KTsKKwkJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCQlnb3RvIGFnYWluOwogCi0JCQl0bXAgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYmxvY2tuciwgYmxvY2tzaXplKTsKLQkJCWlmICh0bXAgJiYgYnRyZnNfYnVmZmVyX3VwdG9kYXRlKHRtcCwgZ2VuKSkgewotCQkJCWIgPSB0bXA7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogcmVkdWNlIGxvY2sgY29udGVudGlvbiBhdCBoaWdoIGxldmVscwotCQkJCSAqIG9mIHRoZSBidHJlZSBieSBkcm9wcGluZyBsb2NrcyBiZWZvcmUKLQkJCQkgKiB3ZSByZWFkLgotCQkJCSAqLwotCQkJCWlmIChsZXZlbCA+IDApIHsKLQkJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKE5VTEwsIHApOwotCQkJCQlpZiAodG1wKQotCQkJCQkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7Ci0JCQkJCWlmIChzaG91bGRfcmVhZGEpCi0JCQkJCQlyZWFkYV9mb3Jfc2VhcmNoKHJvb3QsIHAsCi0JCQkJCQkJCSBsZXZlbCwgc2xvdCwKLQkJCQkJCQkJIGtleS0+b2JqZWN0aWQpOwotCi0JCQkJCXRtcCA9IHJlYWRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLAotCQkJCQkJCSBibG9ja3NpemUsIGdlbik7Ci0JCQkJCWlmICh0bXApCi0JCQkJCQlmcmVlX2V4dGVudF9idWZmZXIodG1wKTsKLQkJCQkJZ290byBhZ2FpbjsKLQkJCQl9IGVsc2UgewotCQkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKLQkJCQkJaWYgKHRtcCkKLQkJCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcih0bXApOwotCQkJCQlpZiAoc2hvdWxkX3JlYWRhKQotCQkJCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwLAotCQkJCQkJCQkgbGV2ZWwsIHNsb3QsCi0JCQkJCQkJCSBrZXktPm9iamVjdGlkKTsKLQkJCQkJYiA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIGIsIHNsb3QpOwotCQkJCX0KLQkJCX0KIAkJCWlmICghcC0+c2tpcF9sb2NraW5nKSB7CiAJCQkJaW50IGxyZXQ7CiAKQEAgLTE3NDIsMTIgKzE3MjksOCBAQAogCSAqIHdlIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhleSBwbGFuIG9uIGRvaW5nIHdpdGggdGhlIHBhdGgKIAkgKiBmcm9tIGhlcmUgb24sIHNvIGZvciBub3cganVzdCBtYXJrIGl0IGFzIGJsb2NraW5nCiAJICovCi0JYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7Ci0JaWYgKHByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKSB7Ci0JCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZXh0ZW50KHJvb3QsCi0JCQkgICBwcmVhbGxvY19ibG9jay5vYmplY3RpZCwKLQkJCSAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCk7Ci0JfQorCWlmICghcC0+bGVhdmVfc3Bpbm5pbmcpCisJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3NjgsNyArMTc1MSw3IEBACiAJaW50IHJldDsKIAogCWViID0gYnRyZnNfbG9ja19yb290X25vZGUocm9vdCk7Ci0JcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBlYiwgTlVMTCwgMCwgJmViLCAwKTsKKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGViLCBOVUxMLCAwLCAmZWIpOwogCUJVR19PTihyZXQpOwogCiAJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoZWIpOwpAQCAtMTgyNiw3ICsxODA5LDcgQEAKIAkJCX0KIAogCQkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBlYiwgcGFyZW50LCBzbG90LAotCQkJCQkgICAgICAmZWIsIDApOworCQkJCQkgICAgICAmZWIpOwogCQkJQlVHX09OKHJldCk7CiAKIAkJCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PQpAQCAtMjEzOSw3ICsyMTIyLDcgQEAKIAlzcGluX3VubG9jaygmcm9vdC0+bm9kZV9sb2NrKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9leHRlbnRfcmVmKHRyYW5zLCByb290LCBsb3dlci0+c3RhcnQsCi0JCQkJICAgICAgbG93ZXItPnN0YXJ0LCBjLT5zdGFydCwKKwkJCQkgICAgICBsb3dlci0+bGVuLCBsb3dlci0+c3RhcnQsIGMtPnN0YXJ0LAogCQkJCSAgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAogCQkJCSAgICAgIHRyYW5zLT50cmFuc2lkLCBsZXZlbCAtIDEpOwogCUJVR19PTihyZXQpOwpAQCAtMjE3NCw4ICsyMTU3LDcgQEAKIAlCVUdfT04oIXBhdGgtPm5vZGVzW2xldmVsXSk7CiAJbG93ZXIgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxvd2VyKTsKLQlpZiAoc2xvdCA+IG5yaXRlbXMpCi0JCUJVRygpOworCUJVR19PTihzbG90ID4gbnJpdGVtcyk7CiAJaWYgKG5yaXRlbXMgPT0gQlRSRlNfTk9ERVBUUlNfUEVSX0JMT0NLKHJvb3QpKQogCQlCVUcoKTsKIAlpZiAoc2xvdCAhPSBucml0ZW1zKSB7CkBAIC0yMjIxLDcgKzIyMDMsNyBAQAogCQlyZXQgPSBpbnNlcnRfbmV3X3Jvb3QodHJhbnMsIHJvb3QsIHBhdGgsIGxldmVsICsgMSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7CisJfSBlbHNlIGlmICghdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnMuZmx1c2hpbmcpIHsKIAkJcmV0ID0gcHVzaF9ub2Rlc19mb3JfaW5zZXJ0KHRyYW5zLCByb290LCBwYXRoLCBsZXZlbCk7CiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmICghcmV0ICYmIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGMpIDwKQEAgLTIzMjksNjYgKzIzMTEsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogcHVzaCBzb21lIGRhdGEgaW4gdGhlIHBhdGggbGVhZiB0byB0aGUgcmlnaHQsIHRyeWluZyB0byBmcmVlIHVwIGF0Ci0gKiBsZWFzdCBkYXRhX3NpemUgYnl0ZXMuICByZXR1cm5zIHplcm8gaWYgdGhlIHB1c2ggd29ya2VkLCBub256ZXJvIG90aGVyd2lzZQotICoKLSAqIHJldHVybnMgMSBpZiB0aGUgcHVzaCBmYWlsZWQgYmVjYXVzZSB0aGUgb3RoZXIgbm9kZSBkaWRuJ3QgaGF2ZSBlbm91Z2gKLSAqIHJvb20sIDAgaWYgZXZlcnl0aGluZyB3b3JrZWQgb3V0IGFuZCA8IDAgaWYgdGhlcmUgd2VyZSBtYWpvciBlcnJvcnMuCi0gKi8KLXN0YXRpYyBpbnQgcHVzaF9sZWFmX3JpZ2h0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgYnRyZnNfcm9vdAotCQkJICAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAotCQkJICAgaW50IGVtcHR5KQorc3RhdGljIG5vaW5saW5lIGludCBfX3B1c2hfbGVhZl9yaWdodChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCQkgICAgICBpbnQgZGF0YV9zaXplLCBpbnQgZW1wdHksCisJCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0LAorCQkJCSAgICAgIGludCBmcmVlX3NwYWNlLCB1MzIgbGVmdF9ucml0ZW1zKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWZ0ID0gcGF0aC0+bm9kZXNbMF07Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0OwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICp1cHBlcjsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdXBwZXIgPSBwYXRoLT5ub2Rlc1sxXTsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CiAJaW50IHNsb3Q7CiAJdTMyIGk7Ci0JaW50IGZyZWVfc3BhY2U7CiAJaW50IHB1c2hfc3BhY2UgPSAwOwogCWludCBwdXNoX2l0ZW1zID0gMDsKIAlzdHJ1Y3QgYnRyZnNfaXRlbSAqaXRlbTsKLQl1MzIgbGVmdF9ucml0ZW1zOwogCXUzMiBucjsKIAl1MzIgcmlnaHRfbnJpdGVtczsKIAl1MzIgZGF0YV9lbmQ7CiAJdTMyIHRoaXNfaXRlbV9zaXplOwogCWludCByZXQ7CiAKLQlzbG90ID0gcGF0aC0+c2xvdHNbMV07Ci0JaWYgKCFwYXRoLT5ub2Rlc1sxXSkKLQkJcmV0dXJuIDE7Ci0KLQl1cHBlciA9IHBhdGgtPm5vZGVzWzFdOwotCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHVwcGVyKSAtIDEpCi0JCXJldHVybiAxOwotCi0JYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKLQotCXJpZ2h0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgdXBwZXIsIHNsb3QgKyAxKTsKLQlidHJmc190cmVlX2xvY2socmlnaHQpOwotCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHJpZ2h0KTsKLQotCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgcmlnaHQpOwotCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBjb3cgYW5kIGRvdWJsZSBjaGVjayAqLwotCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgcmlnaHQsIHVwcGVyLAotCQkJICAgICAgc2xvdCArIDEsICZyaWdodCwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JZnJlZV9zcGFjZSA9IGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCByaWdodCk7Ci0JaWYgKGZyZWVfc3BhY2UgPCBkYXRhX3NpemUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWxlZnRfbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlZnQpOwotCWlmIChsZWZ0X25yaXRlbXMgPT0gMCkKLQkJZ290byBvdXRfdW5sb2NrOwotCiAJaWYgKGVtcHR5KQogCQluciA9IDA7CiAJZWxzZQpAQCAtMjM5Nyw2ICsyMzQwLDcgQEAKIAlpZiAocGF0aC0+c2xvdHNbMF0gPj0gbGVmdF9ucml0ZW1zKQogCQlwdXNoX3NwYWNlICs9IGRhdGFfc2l6ZTsKIAorCXNsb3QgPSBwYXRoLT5zbG90c1sxXTsKIAlpID0gbGVmdF9ucml0ZW1zIC0gMTsKIAl3aGlsZSAoaSA+PSBucikgewogCQlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWZ0LCBpKTsKQEAgLTI1MjgsMjQgKzI0NzIsODIgQEAKIH0KIAogLyoKKyAqIHB1c2ggc29tZSBkYXRhIGluIHRoZSBwYXRoIGxlYWYgdG8gdGhlIHJpZ2h0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAorICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKKyAqCisgKiByZXR1cm5zIDEgaWYgdGhlIHB1c2ggZmFpbGVkIGJlY2F1c2UgdGhlIG90aGVyIG5vZGUgZGlkbid0IGhhdmUgZW5vdWdoCisgKiByb29tLCAwIGlmIGV2ZXJ5dGhpbmcgd29ya2VkIG91dCBhbmQgPCAwIGlmIHRoZXJlIHdlcmUgbWFqb3IgZXJyb3JzLgorICovCitzdGF0aWMgaW50IHB1c2hfbGVhZl9yaWdodChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKKwkJCSAgICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKKwkJCSAgIGludCBlbXB0eSkKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVmdCA9IHBhdGgtPm5vZGVzWzBdOworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdXBwZXI7CisJaW50IHNsb3Q7CisJaW50IGZyZWVfc3BhY2U7CisJdTMyIGxlZnRfbnJpdGVtczsKKwlpbnQgcmV0OworCisJaWYgKCFwYXRoLT5ub2Rlc1sxXSkKKwkJcmV0dXJuIDE7CisKKwlzbG90ID0gcGF0aC0+c2xvdHNbMV07CisJdXBwZXIgPSBwYXRoLT5ub2Rlc1sxXTsKKwlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyh1cHBlcikgLSAxKQorCQlyZXR1cm4gMTsKKworCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChwYXRoLT5ub2Rlc1sxXSk7CisKKwlyaWdodCA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIHVwcGVyLCBzbG90ICsgMSk7CisJYnRyZnNfdHJlZV9sb2NrKHJpZ2h0KTsKKwlidHJmc19zZXRfbG9ja19ibG9ja2luZyhyaWdodCk7CisKKwlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIHJpZ2h0KTsKKwlpZiAoZnJlZV9zcGFjZSA8IGRhdGFfc2l6ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogY293IGFuZCBkb3VibGUgY2hlY2sgKi8KKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIHJpZ2h0LCB1cHBlciwKKwkJCSAgICAgIHNsb3QgKyAxLCAmcmlnaHQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgcmlnaHQpOworCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlsZWZ0X25yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWZ0KTsKKwlpZiAobGVmdF9ucml0ZW1zID09IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldHVybiBfX3B1c2hfbGVhZl9yaWdodCh0cmFucywgcm9vdCwgcGF0aCwgZGF0YV9zaXplLCBlbXB0eSwKKwkJCQlyaWdodCwgZnJlZV9zcGFjZSwgbGVmdF9ucml0ZW1zKTsKK291dF91bmxvY2s6CisJYnRyZnNfdHJlZV91bmxvY2socmlnaHQpOworCWZyZWVfZXh0ZW50X2J1ZmZlcihyaWdodCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBwdXNoIHNvbWUgZGF0YSBpbiB0aGUgcGF0aCBsZWFmIHRvIHRoZSBsZWZ0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAogICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBwdXNoX2xlYWZfbGVmdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKLQkJCSAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAotCQkJICBpbnQgZW1wdHkpCitzdGF0aWMgbm9pbmxpbmUgaW50IF9fcHVzaF9sZWFmX2xlZnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAorCQkJCSAgICAgaW50IGVtcHR5LCBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVmdCwKKwkJCQkgICAgIGludCBmcmVlX3NwYWNlLCBpbnQgcmlnaHRfbnJpdGVtcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0ID0gcGF0aC0+bm9kZXNbMF07Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQ7CiAJaW50IHNsb3Q7CiAJaW50IGk7Ci0JaW50IGZyZWVfc3BhY2U7CiAJaW50IHB1c2hfc3BhY2UgPSAwOwogCWludCBwdXNoX2l0ZW1zID0gMDsKIAlzdHJ1Y3QgYnRyZnNfaXRlbSAqaXRlbTsKIAl1MzIgb2xkX2xlZnRfbnJpdGVtczsKLQl1MzIgcmlnaHRfbnJpdGVtczsKIAl1MzIgbnI7CiAJaW50IHJldCA9IDA7CiAJaW50IHdyZXQ7CkBAIC0yNTUzLDQxICsyNTU1LDYgQEAKIAl1MzIgb2xkX2xlZnRfaXRlbV9zaXplOwogCiAJc2xvdCA9IHBhdGgtPnNsb3RzWzFdOwotCWlmIChzbG90ID09IDApCi0JCXJldHVybiAxOwotCWlmICghcGF0aC0+bm9kZXNbMV0pCi0JCXJldHVybiAxOwotCi0JcmlnaHRfbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHJpZ2h0KTsKLQlpZiAocmlnaHRfbnJpdGVtcyA9PSAwKQotCQlyZXR1cm4gMTsKLQotCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChwYXRoLT5ub2Rlc1sxXSk7Ci0KLQlsZWZ0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgcGF0aC0+bm9kZXNbMV0sIHNsb3QgLSAxKTsKLQlidHJmc190cmVlX2xvY2sobGVmdCk7Ci0JYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobGVmdCk7Ci0KLQlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlZnQpOwotCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKSB7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvdyBhbmQgZG91YmxlIGNoZWNrICovCi0JcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBsZWZ0LAotCQkJICAgICAgcGF0aC0+bm9kZXNbMV0sIHNsb3QgLSAxLCAmbGVmdCwgMCk7Ci0JaWYgKHJldCkgewotCQkvKiB3ZSBoaXQgLUVOT1NQQywgYnV0IGl0IGlzbid0IGZhdGFsIGhlcmUgKi8KLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnJlZV9zcGFjZSA9IGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWZ0KTsKLQlpZiAoZnJlZV9zcGFjZSA8IGRhdGFfc2l6ZSkgewotCQlyZXQgPSAxOwotCQlnb3RvIG91dDsKLQl9CiAKIAlpZiAoZW1wdHkpCiAJCW5yID0gcmlnaHRfbnJpdGVtczsKQEAgLTI3NTUsMTQ1ICsyNzIyLDg1IEBACiB9CiAKIC8qCisgKiBwdXNoIHNvbWUgZGF0YSBpbiB0aGUgcGF0aCBsZWFmIHRvIHRoZSBsZWZ0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAorICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBwdXNoX2xlYWZfbGVmdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKKwkJCSAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAorCQkJICBpbnQgZW1wdHkpCit7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0ID0gcGF0aC0+bm9kZXNbMF07CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQ7CisJaW50IHNsb3Q7CisJaW50IGZyZWVfc3BhY2U7CisJdTMyIHJpZ2h0X25yaXRlbXM7CisJaW50IHJldCA9IDA7CisKKwlzbG90ID0gcGF0aC0+c2xvdHNbMV07CisJaWYgKHNsb3QgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKCFwYXRoLT5ub2Rlc1sxXSkKKwkJcmV0dXJuIDE7CisKKwlyaWdodF9ucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMocmlnaHQpOworCWlmIChyaWdodF9ucml0ZW1zID09IDApCisJCXJldHVybiAxOworCisJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKKworCWxlZnQgPSByZWFkX25vZGVfc2xvdChyb290LCBwYXRoLT5ub2Rlc1sxXSwgc2xvdCAtIDEpOworCWJ0cmZzX3RyZWVfbG9jayhsZWZ0KTsKKwlidHJmc19zZXRfbG9ja19ibG9ja2luZyhsZWZ0KTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgbGVmdCk7CisJaWYgKGZyZWVfc3BhY2UgPCBkYXRhX3NpemUpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY293IGFuZCBkb3VibGUgY2hlY2sgKi8KKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGxlZnQsCisJCQkgICAgICBwYXRoLT5ub2Rlc1sxXSwgc2xvdCAtIDEsICZsZWZ0KTsKKwlpZiAocmV0KSB7CisJCS8qIHdlIGhpdCAtRU5PU1BDLCBidXQgaXQgaXNuJ3QgZmF0YWwgaGVyZSAqLworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlZnQpOworCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiBfX3B1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsCisJCQkgICAgICAgZW1wdHksIGxlZnQsIGZyZWVfc3BhY2UsIHJpZ2h0X25yaXRlbXMpOworb3V0OgorCWJ0cmZzX3RyZWVfdW5sb2NrKGxlZnQpOworCWZyZWVfZXh0ZW50X2J1ZmZlcihsZWZ0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogc3BsaXQgdGhlIHBhdGgncyBsZWFmIGluIHR3bywgbWFraW5nIHN1cmUgdGhlcmUgaXMgYXQgbGVhc3QgZGF0YV9zaXplCiAgKiBhdmFpbGFibGUgZm9yIHRoZSByZXN1bHRpbmcgbGVhZiBsZXZlbCBvZiB0aGUgcGF0aC4KICAqCiAgKiByZXR1cm5zIDAgaWYgYWxsIHdlbnQgd2VsbCBhbmQgPCAwIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBub2lubGluZSBpbnQgc3BsaXRfbGVhZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKK3N0YXRpYyBub2lubGluZSBpbnQgY29weV9mb3Jfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkgICAgICAgc3RydWN0IGJ0cmZzX2tleSAqaW5zX2tleSwKLQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKLQkJCSAgICAgICBpbnQgZXh0ZW5kKQorCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpsLAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodCwKKwkJCSAgICAgICBpbnQgc2xvdCwgaW50IG1pZCwgaW50IG5yaXRlbXMpCiB7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmw7Ci0JdTMyIG5yaXRlbXM7Ci0JaW50IG1pZDsKLQlpbnQgc2xvdDsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcmlnaHQ7CiAJaW50IGRhdGFfY29weV9zaXplOwogCWludCBydF9kYXRhX29mZjsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgd3JldDsKLQlpbnQgZG91YmxlX3NwbGl0OwotCWludCBudW1fZG91YmxlcyA9IDA7CiAJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OwogCi0JLyogZmlyc3QgdHJ5IHRvIG1ha2Ugc29tZSByb29tIGJ5IHB1c2hpbmcgbGVmdCBhbmQgcmlnaHQgKi8KLQlpZiAoZGF0YV9zaXplICYmIGluc19rZXktPnR5cGUgIT0gQlRSRlNfRElSX0lURU1fS0VZKSB7Ci0JCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSwgMCk7Ci0JCWlmICh3cmV0IDwgMCkKLQkJCXJldHVybiB3cmV0OwotCQlpZiAod3JldCkgewotCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsIDApOwotCQkJaWYgKHdyZXQgPCAwKQotCQkJCXJldHVybiB3cmV0OwotCQl9Ci0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQotCQkvKiBkaWQgdGhlIHB1c2hlcyB3b3JrPyAqLwotCQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGwpID49IGRhdGFfc2l6ZSkKLQkJCXJldHVybiAwOwotCX0KLQotCWlmICghcGF0aC0+bm9kZXNbMV0pIHsKLQkJcmV0ID0gaW5zZXJ0X25ld19yb290KHRyYW5zLCByb290LCBwYXRoLCAxKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotYWdhaW46Ci0JZG91YmxlX3NwbGl0ID0gMDsKLQlsID0gcGF0aC0+bm9kZXNbMF07Ci0Jc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsKTsKLQltaWQgPSAobnJpdGVtcyArIDEpIC8gMjsKLQotCXJpZ2h0ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgcm9vdC0+bGVhZnNpemUsCi0JCQkJCXBhdGgtPm5vZGVzWzFdLT5zdGFydCwKLQkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCXRyYW5zLT50cmFuc2lkLCAwLCBsLT5zdGFydCwgMCk7Ci0JaWYgKElTX0VSUihyaWdodCkpIHsKLQkJQlVHX09OKDEpOwotCQlyZXR1cm4gUFRSX0VSUihyaWdodCk7Ci0JfQotCi0JbWVtc2V0X2V4dGVudF9idWZmZXIocmlnaHQsIDAsIDAsIHNpemVvZihzdHJ1Y3QgYnRyZnNfaGVhZGVyKSk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9ieXRlbnIocmlnaHQsIHJpZ2h0LT5zdGFydCk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9nZW5lcmF0aW9uKHJpZ2h0LCB0cmFucy0+dHJhbnNpZCk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9vd25lcihyaWdodCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpOwotCWJ0cmZzX3NldF9oZWFkZXJfbGV2ZWwocmlnaHQsIDApOwotCXdyaXRlX2V4dGVudF9idWZmZXIocmlnaHQsIHJvb3QtPmZzX2luZm8tPmZzaWQsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2ZzaWQocmlnaHQpLAotCQkJICAgIEJUUkZTX0ZTSURfU0laRSk7Ci0KLQl3cml0ZV9leHRlbnRfYnVmZmVyKHJpZ2h0LCByb290LT5mc19pbmZvLT5jaHVua190cmVlX3V1aWQsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2NodW5rX3RyZWVfdXVpZChyaWdodCksCi0JCQkgICAgQlRSRlNfVVVJRF9TSVpFKTsKLQlpZiAobWlkIDw9IHNsb3QpIHsKLQkJaWYgKG5yaXRlbXMgPT0gMSB8fAotCQkgICAgbGVhZl9zcGFjZV91c2VkKGwsIG1pZCwgbnJpdGVtcyAtIG1pZCkgKyBkYXRhX3NpemUgPgotCQkJQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKLQkJCWlmIChzbG90ID49IG5yaXRlbXMpIHsKLQkJCQlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBpbnNfa2V5KTsKLQkJCQlidHJmc19zZXRfaGVhZGVyX25yaXRlbXMocmlnaHQsIDApOwotCQkJCXdyZXQgPSBpbnNlcnRfcHRyKHRyYW5zLCByb290LCBwYXRoLAotCQkJCQkJICAmZGlza19rZXksIHJpZ2h0LT5zdGFydCwKLQkJCQkJCSAgcGF0aC0+c2xvdHNbMV0gKyAxLCAxKTsKLQkJCQlpZiAod3JldCkKLQkJCQkJcmV0ID0gd3JldDsKLQotCQkJCWJ0cmZzX3RyZWVfdW5sb2NrKHBhdGgtPm5vZGVzWzBdKTsKLQkJCQlmcmVlX2V4dGVudF9idWZmZXIocGF0aC0+bm9kZXNbMF0pOwotCQkJCXBhdGgtPm5vZGVzWzBdID0gcmlnaHQ7Ci0JCQkJcGF0aC0+c2xvdHNbMF0gPSAwOwotCQkJCXBhdGgtPnNsb3RzWzFdICs9IDE7Ci0JCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkocmlnaHQpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCQltaWQgPSBzbG90OwotCQkJaWYgKG1pZCAhPSBucml0ZW1zICYmCi0JCQkgICAgbGVhZl9zcGFjZV91c2VkKGwsIG1pZCwgbnJpdGVtcyAtIG1pZCkgKwotCQkJICAgIGRhdGFfc2l6ZSA+IEJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7Ci0JCQkJZG91YmxlX3NwbGl0ID0gMTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChsZWFmX3NwYWNlX3VzZWQobCwgMCwgbWlkKSArIGRhdGFfc2l6ZSA+Ci0JCQlCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSkgewotCQkJaWYgKCFleHRlbmQgJiYgZGF0YV9zaXplICYmIHNsb3QgPT0gMCkgewotCQkJCWJ0cmZzX2NwdV9rZXlfdG9fZGlzaygmZGlza19rZXksIGluc19rZXkpOwotCQkJCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgMCk7Ci0JCQkJd3JldCA9IGluc2VydF9wdHIodHJhbnMsIHJvb3QsIHBhdGgsCi0JCQkJCQkgICZkaXNrX2tleSwKLQkJCQkJCSAgcmlnaHQtPnN0YXJ0LAotCQkJCQkJICBwYXRoLT5zbG90c1sxXSwgMSk7Ci0JCQkJaWYgKHdyZXQpCi0JCQkJCXJldCA9IHdyZXQ7Ci0JCQkJYnRyZnNfdHJlZV91bmxvY2socGF0aC0+bm9kZXNbMF0pOwotCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcihwYXRoLT5ub2Rlc1swXSk7Ci0JCQkJcGF0aC0+bm9kZXNbMF0gPSByaWdodDsKLQkJCQlwYXRoLT5zbG90c1swXSA9IDA7Ci0JCQkJaWYgKHBhdGgtPnNsb3RzWzFdID09IDApIHsKLQkJCQkJd3JldCA9IGZpeHVwX2xvd19rZXlzKHRyYW5zLCByb290LAotCQkJCQkJICAgICAgcGF0aCwgJmRpc2tfa2V5LCAxKTsKLQkJCQkJaWYgKHdyZXQpCi0JCQkJCQlyZXQgPSB3cmV0OwotCQkJCX0KLQkJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShyaWdodCk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0gZWxzZSBpZiAoKGV4dGVuZCB8fCAhZGF0YV9zaXplKSAmJiBzbG90ID09IDApIHsKLQkJCQltaWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQltaWQgPSBzbG90OwotCQkJCWlmIChtaWQgIT0gbnJpdGVtcyAmJgotCQkJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArCi0JCQkJICAgIGRhdGFfc2l6ZSA+IEJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7Ci0JCQkJCWRvdWJsZV9zcGxpdCA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQogCW5yaXRlbXMgPSBucml0ZW1zIC0gbWlkOwogCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgbnJpdGVtcyk7CiAJZGF0YV9jb3B5X3NpemUgPSBidHJmc19pdGVtX2VuZF9ucihsLCBtaWQpIC0gbGVhZl9kYXRhX2VuZChyb290LCBsKTsKQEAgLTI5NTksMTEgKzI4NjYsMTYxIEBACiAKIAlCVUdfT04ocGF0aC0+c2xvdHNbMF0gPCAwKTsKIAorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzcGxpdCB0aGUgcGF0aCdzIGxlYWYgaW4gdHdvLCBtYWtpbmcgc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBkYXRhX3NpemUKKyAqIGF2YWlsYWJsZSBmb3IgdGhlIHJlc3VsdGluZyBsZWFmIGxldmVsIG9mIHRoZSBwYXRoLgorICoKKyAqIHJldHVybnMgMCBpZiBhbGwgd2VudCB3ZWxsIGFuZCA8IDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIG5vaW5saW5lIGludCBzcGxpdF9sZWFmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKmluc19rZXksCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBkYXRhX3NpemUsCisJCQkgICAgICAgaW50IGV4dGVuZCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbDsKKwl1MzIgbnJpdGVtczsKKwlpbnQgbWlkOworCWludCBzbG90OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd3JldDsKKwlpbnQgZG91YmxlX3NwbGl0OworCWludCBudW1fZG91YmxlcyA9IDA7CisKKwkvKiBmaXJzdCB0cnkgdG8gbWFrZSBzb21lIHJvb20gYnkgcHVzaGluZyBsZWZ0IGFuZCByaWdodCAqLworCWlmIChkYXRhX3NpemUgJiYgaW5zX2tleS0+dHlwZSAhPSBCVFJGU19ESVJfSVRFTV9LRVkgJiYKKwkgICAgIXRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKSB7CisJCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSwgMCk7CisJCWlmICh3cmV0IDwgMCkKKwkJCXJldHVybiB3cmV0OworCQlpZiAod3JldCkgeworCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsIDApOworCQkJaWYgKHdyZXQgPCAwKQorCQkJCXJldHVybiB3cmV0OworCQl9CisJCWwgPSBwYXRoLT5ub2Rlc1swXTsKKworCQkvKiBkaWQgdGhlIHB1c2hlcyB3b3JrPyAqLworCQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGwpID49IGRhdGFfc2l6ZSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICghcGF0aC0+bm9kZXNbMV0pIHsKKwkJcmV0ID0gaW5zZXJ0X25ld19yb290KHRyYW5zLCByb290LCBwYXRoLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorYWdhaW46CisJZG91YmxlX3NwbGl0ID0gMDsKKwlsID0gcGF0aC0+bm9kZXNbMF07CisJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOworCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsKTsKKwltaWQgPSAobnJpdGVtcyArIDEpIC8gMjsKKworCXJpZ2h0ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgcm9vdC0+bGVhZnNpemUsCisJCQkJCXBhdGgtPm5vZGVzWzFdLT5zdGFydCwKKwkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJCXRyYW5zLT50cmFuc2lkLCAwLCBsLT5zdGFydCwgMCk7CisJaWYgKElTX0VSUihyaWdodCkpIHsKKwkJQlVHX09OKDEpOworCQlyZXR1cm4gUFRSX0VSUihyaWdodCk7CisJfQorCisJbWVtc2V0X2V4dGVudF9idWZmZXIocmlnaHQsIDAsIDAsIHNpemVvZihzdHJ1Y3QgYnRyZnNfaGVhZGVyKSk7CisJYnRyZnNfc2V0X2hlYWRlcl9ieXRlbnIocmlnaHQsIHJpZ2h0LT5zdGFydCk7CisJYnRyZnNfc2V0X2hlYWRlcl9nZW5lcmF0aW9uKHJpZ2h0LCB0cmFucy0+dHJhbnNpZCk7CisJYnRyZnNfc2V0X2hlYWRlcl9vd25lcihyaWdodCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpOworCWJ0cmZzX3NldF9oZWFkZXJfbGV2ZWwocmlnaHQsIDApOworCXdyaXRlX2V4dGVudF9idWZmZXIocmlnaHQsIHJvb3QtPmZzX2luZm8tPmZzaWQsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2ZzaWQocmlnaHQpLAorCQkJICAgIEJUUkZTX0ZTSURfU0laRSk7CisKKwl3cml0ZV9leHRlbnRfYnVmZmVyKHJpZ2h0LCByb290LT5mc19pbmZvLT5jaHVua190cmVlX3V1aWQsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2NodW5rX3RyZWVfdXVpZChyaWdodCksCisJCQkgICAgQlRSRlNfVVVJRF9TSVpFKTsKKworCWlmIChtaWQgPD0gc2xvdCkgeworCQlpZiAobnJpdGVtcyA9PSAxIHx8CisJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArIGRhdGFfc2l6ZSA+CisJCQlCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSkgeworCQkJaWYgKHNsb3QgPj0gbnJpdGVtcykgeworCQkJCXN0cnVjdCBidHJmc19kaXNrX2tleSBkaXNrX2tleTsKKworCQkJCWJ0cmZzX2NwdV9rZXlfdG9fZGlzaygmZGlza19rZXksIGluc19rZXkpOworCQkJCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgMCk7CisJCQkJd3JldCA9IGluc2VydF9wdHIodHJhbnMsIHJvb3QsIHBhdGgsCisJCQkJCQkgICZkaXNrX2tleSwgcmlnaHQtPnN0YXJ0LAorCQkJCQkJICBwYXRoLT5zbG90c1sxXSArIDEsIDEpOworCQkJCWlmICh3cmV0KQorCQkJCQlyZXQgPSB3cmV0OworCisJCQkJYnRyZnNfdHJlZV91bmxvY2socGF0aC0+bm9kZXNbMF0pOworCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcihwYXRoLT5ub2Rlc1swXSk7CisJCQkJcGF0aC0+bm9kZXNbMF0gPSByaWdodDsKKwkJCQlwYXRoLT5zbG90c1swXSA9IDA7CisJCQkJcGF0aC0+c2xvdHNbMV0gKz0gMTsKKwkJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShyaWdodCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCW1pZCA9IHNsb3Q7CisJCQlpZiAobWlkICE9IG5yaXRlbXMgJiYKKwkJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArCisJCQkgICAgZGF0YV9zaXplID4gQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKKwkJCQlkb3VibGVfc3BsaXQgPSAxOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxlYWZfc3BhY2VfdXNlZChsLCAwLCBtaWQpICsgZGF0YV9zaXplID4KKwkJCUJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7CisJCQlpZiAoIWV4dGVuZCAmJiBkYXRhX3NpemUgJiYgc2xvdCA9PSAwKSB7CisJCQkJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OworCisJCQkJYnRyZnNfY3B1X2tleV90b19kaXNrKCZkaXNrX2tleSwgaW5zX2tleSk7CisJCQkJYnRyZnNfc2V0X2hlYWRlcl9ucml0ZW1zKHJpZ2h0LCAwKTsKKwkJCQl3cmV0ID0gaW5zZXJ0X3B0cih0cmFucywgcm9vdCwgcGF0aCwKKwkJCQkJCSAgJmRpc2tfa2V5LAorCQkJCQkJICByaWdodC0+c3RhcnQsCisJCQkJCQkgIHBhdGgtPnNsb3RzWzFdLCAxKTsKKwkJCQlpZiAod3JldCkKKwkJCQkJcmV0ID0gd3JldDsKKwkJCQlidHJmc190cmVlX3VubG9jayhwYXRoLT5ub2Rlc1swXSk7CisJCQkJZnJlZV9leHRlbnRfYnVmZmVyKHBhdGgtPm5vZGVzWzBdKTsKKwkJCQlwYXRoLT5ub2Rlc1swXSA9IHJpZ2h0OworCQkJCXBhdGgtPnNsb3RzWzBdID0gMDsKKwkJCQlpZiAocGF0aC0+c2xvdHNbMV0gPT0gMCkgeworCQkJCQl3cmV0ID0gZml4dXBfbG93X2tleXModHJhbnMsIHJvb3QsCisJCQkJCQkgICAgICBwYXRoLCAmZGlza19rZXksIDEpOworCQkJCQlpZiAod3JldCkKKwkJCQkJCXJldCA9IHdyZXQ7CisJCQkJfQorCQkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHJpZ2h0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIGlmICgoZXh0ZW5kIHx8ICFkYXRhX3NpemUpICYmIHNsb3QgPT0gMCkgeworCQkJCW1pZCA9IDE7CisJCQl9IGVsc2UgeworCQkJCW1pZCA9IHNsb3Q7CisJCQkJaWYgKG1pZCAhPSBucml0ZW1zICYmCisJCQkJICAgIGxlYWZfc3BhY2VfdXNlZChsLCBtaWQsIG5yaXRlbXMgLSBtaWQpICsKKwkJCQkgICAgZGF0YV9zaXplID4gQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKKwkJCQkJZG91YmxlX3NwbGl0ID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXQgPSBjb3B5X2Zvcl9zcGxpdCh0cmFucywgcm9vdCwgcGF0aCwgbCwgcmlnaHQsIHNsb3QsIG1pZCwgbnJpdGVtcyk7CisJQlVHX09OKHJldCk7CisKIAlpZiAoZG91YmxlX3NwbGl0KSB7CiAJCUJVR19PTihudW1fZG91YmxlcyAhPSAwKTsKIAkJbnVtX2RvdWJsZXMrKzsKIAkJZ290byBhZ2FpbjsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDIxLDI2ICszMDc4LDI3IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAorCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCXJldCA9IHNwbGl0X2xlYWYodHJhbnMsIHJvb3QsICZvcmlnX2tleSwgcGF0aCwKIAkJCSBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pLCAxKTsKIAlwYXRoLT5rZWVwX2xvY2tzID0gMDsKIAlCVUdfT04ocmV0KTsKIAorCWJ0cmZzX3VubG9ja191cF9zYWZlKHBhdGgsIDEpOworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwlCVUdfT04oYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7CisKK3NwbGl0OgogCS8qCiAJICogbWFrZSBzdXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBwYXRoIGZyb20gc3BsaXRfbGVhZiBsZWF2ZSBpdAogCSAqIGluIGEgYmxvY2tpbmcgc3RhdGUKIAkgKi8KIAlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKIAotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQlCVUdfT04oYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7Ci0KLXNwbGl0OgogCWl0ZW0gPSBidHJmc19pdGVtX25yKGxlYWYsIHBhdGgtPnNsb3RzWzBdKTsKIAlvcmlnX29mZnNldCA9IGJ0cmZzX2l0ZW1fb2Zmc2V0KGxlYWYsIGl0ZW0pOwogCWl0ZW1fc2l6ZSA9IGJ0cmZzX2l0ZW1fc2l6ZShsZWFmLCBpdGVtKTsKIAotCiAJYnVmID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgYnVmLCBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwKIAkJCSAgICBwYXRoLT5zbG90c1swXSksIGl0ZW1fc2l6ZSk7CkBAIC0zNDQ1LDM5ICszNTAzLDI3IEBACiB9CiAKIC8qCi0gKiBHaXZlbiBhIGtleSBhbmQgc29tZSBkYXRhLCBpbnNlcnQgaXRlbXMgaW50byB0aGUgdHJlZS4KLSAqIFRoaXMgZG9lcyBhbGwgdGhlIHBhdGggaW5pdCByZXF1aXJlZCwgbWFraW5nIHJvb20gaW4gdGhlIHRyZWUgaWYgbmVlZGVkLgorICogdGhpcyBpcyBhIGhlbHBlciBmb3IgYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW1zLCB0aGUgbWFpbiBnb2FsIGhlcmUgaXMKKyAqIHRvIHNhdmUgc3RhY2sgZGVwdGggYnkgZG9pbmcgdGhlIGJ1bGsgb2YgdGhlIHdvcmsgaW4gYSBmdW5jdGlvbgorICogdGhhdCBkb2Vzbid0IGNhbGwgYnRyZnNfc2VhcmNoX3Nsb3QKICAqLwotaW50IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfa2V5ICpjcHVfa2V5LCB1MzIgKmRhdGFfc2l6ZSwKLQkJCSAgICBpbnQgbnIpCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludAorc2V0dXBfaXRlbXNfZm9yX2luc2VydChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkgICAgICBzdHJ1Y3QgYnRyZnNfa2V5ICpjcHVfa2V5LCB1MzIgKmRhdGFfc2l6ZSwKKwkJICAgICAgdTMyIHRvdGFsX2RhdGEsIHUzMiB0b3RhbF9zaXplLCBpbnQgbnIpCiB7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07Ci0JaW50IHJldCA9IDA7Ci0JaW50IHNsb3Q7Ci0JaW50IHNsb3Rfb3JpZzsKIAlpbnQgaTsKIAl1MzIgbnJpdGVtczsKLQl1MzIgdG90YWxfc2l6ZSA9IDA7Ci0JdTMyIHRvdGFsX2RhdGEgPSAwOwogCXVuc2lnbmVkIGludCBkYXRhX2VuZDsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CisJaW50IHJldDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKKwlpbnQgc2xvdDsKIAotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQl0b3RhbF9kYXRhICs9IGRhdGFfc2l6ZVtpXTsKLQotCXRvdGFsX3NpemUgPSB0b3RhbF9kYXRhICsgKG5yICogc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7Ci0JcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QodHJhbnMsIHJvb3QsIGNwdV9rZXksIHBhdGgsIHRvdGFsX3NpemUsIDEpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0Jc2xvdF9vcmlnID0gcGF0aC0+c2xvdHNbMF07CiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKIAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAlkYXRhX2VuZCA9IGxlYWZfZGF0YV9lbmQocm9vdCwgbGVhZik7CkBAIC0zNDg5LDkgKzM1MzUsNiBAQAogCQlCVUcoKTsKIAl9CiAKLQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JQlVHX09OKHNsb3QgPCAwKTsKLQogCWlmIChzbG90ICE9IG5yaXRlbXMpIHsKIAkJdW5zaWduZWQgaW50IG9sZF9kYXRhID0gYnRyZnNfaXRlbV9lbmRfbnIobGVhZiwgc2xvdCk7CiAKQEAgLTM1NDcsMjEgKzM1OTAsNjAgQEAKIAkJZGF0YV9lbmQgLT0gZGF0YV9zaXplW2ldOwogCQlidHJmc19zZXRfaXRlbV9zaXplKGxlYWYsIGl0ZW0sIGRhdGFfc2l6ZVtpXSk7CiAJfQorCiAJYnRyZnNfc2V0X2hlYWRlcl9ucml0ZW1zKGxlYWYsIG5yaXRlbXMgKyBucik7Ci0JYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAKIAlyZXQgPSAwOwogCWlmIChzbG90ID09IDApIHsKKwkJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OwogCQlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBjcHVfa2V5KTsKIAkJcmV0ID0gZml4dXBfbG93X2tleXModHJhbnMsIHJvb3QsIHBhdGgsICZkaXNrX2tleSwgMSk7CiAJfQorCWJ0cmZzX3VubG9ja191cF9zYWZlKHBhdGgsIDEpOworCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCiAJaWYgKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IDApIHsKIAkJYnRyZnNfcHJpbnRfbGVhZihyb290LCBsZWFmKTsKIAkJQlVHKCk7CiAJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIGtleSBhbmQgc29tZSBkYXRhLCBpbnNlcnQgaXRlbXMgaW50byB0aGUgdHJlZS4KKyAqIFRoaXMgZG9lcyBhbGwgdGhlIHBhdGggaW5pdCByZXF1aXJlZCwgbWFraW5nIHJvb20gaW4gdGhlIHRyZWUgaWYgbmVlZGVkLgorICovCitpbnQgYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW1zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgIHN0cnVjdCBidHJmc19rZXkgKmNwdV9rZXksIHUzMiAqZGF0YV9zaXplLAorCQkJICAgIGludCBucikKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgc2xvdDsKKwlpbnQgaTsKKwl1MzIgdG90YWxfc2l6ZSA9IDA7CisJdTMyIHRvdGFsX2RhdGEgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCXRvdGFsX2RhdGEgKz0gZGF0YV9zaXplW2ldOworCisJdG90YWxfc2l6ZSA9IHRvdGFsX2RhdGEgKyAobnIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKKwlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgY3B1X2tleSwgcGF0aCwgdG90YWxfc2l6ZSwgMSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVFWElTVDsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOworCUJVR19PTihzbG90IDwgMCk7CisKKwlyZXQgPSBzZXR1cF9pdGVtc19mb3JfaW5zZXJ0KHRyYW5zLCByb290LCBwYXRoLCBjcHVfa2V5LCBkYXRhX3NpemUsCisJCQkgICAgICAgdG90YWxfZGF0YSwgdG90YWxfc2l6ZSwgbnIpOworCiBvdXQ6Ci0JYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc0OSw3ICszODMxLDggQEAKIAkJfQogCiAJCS8qIGRlbGV0ZSB0aGUgbGVhZiBpZiBpdCBpcyBtb3N0bHkgZW1wdHkgKi8KLQkJaWYgKHVzZWQgPCBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAvIDQpIHsKKwkJaWYgKHVzZWQgPCBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAvIDQgJiYKKwkJICAgICF0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgewogCQkJLyogcHVzaF9sZWFmX2xlZnQgZml4ZXMgdGhlIHBhdGguCiAJCQkgKiBtYWtlIHN1cmUgdGhlIHBhdGggc3RpbGwgcG9pbnRzIHRvIG91ciBsZWFmCiAJCQkgKiBmb3IgcG9zc2libGUgY2FsbCB0byBkZWxfcHRyIGJlbG93CkBAIC0zNzU3LDYgKzM4NDAsNyBAQAogCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzFdOwogCQkJZXh0ZW50X2J1ZmZlcl9nZXQobGVhZik7CiAKKwkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCAxLCAxKTsKIAkJCWlmICh3cmV0IDwgMCAmJiB3cmV0ICE9IC1FTk9TUEMpCiAJCQkJcmV0ID0gd3JldDsKQEAgLTQwNDIsMjggKzQxMjYsNDQgQEAKIGludCBidHJmc19uZXh0X2xlYWYoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoKQogewogCWludCBzbG90OwotCWludCBsZXZlbCA9IDE7CisJaW50IGxldmVsOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpjOwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICpuZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbmV4dDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKIAl1MzIgbnJpdGVtczsKIAlpbnQgcmV0OworCWludCBvbGRfc3Bpbm5pbmcgPSBwYXRoLT5sZWF2ZV9zcGlubmluZzsKKwlpbnQgZm9yY2VfYmxvY2tpbmcgPSAwOwogCiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKTsKIAlpZiAobnJpdGVtcyA9PSAwKQogCQlyZXR1cm4gMTsKIAotCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmtleSwgbnJpdGVtcyAtIDEpOworCS8qCisJICogd2UgdGFrZSB0aGUgYmxvY2tzIGluIGFuIG9yZGVyIHRoYXQgdXBzZXRzIGxvY2tkZXAuICBVc2luZworCSAqIGJsb2NraW5nIG1vZGUgaXMgdGhlIG9ubHkgd2F5IGFyb3VuZCBpdC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCWZvcmNlX2Jsb2NraW5nID0gMTsKKyNlbmRpZgogCisJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAma2V5LCBucml0ZW1zIC0gMSk7CithZ2FpbjoKKwlsZXZlbCA9IDE7CisJbmV4dCA9IE5VTEw7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCiAJcGF0aC0+a2VlcF9sb2NrcyA9IDE7CisKKwlpZiAoIWZvcmNlX2Jsb2NraW5nKQorCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CisKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAlwYXRoLT5rZWVwX2xvY2tzID0gMDsKIAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKTsKIAkvKgogCSAqIGJ5IHJlbGVhc2luZyB0aGUgcGF0aCBhYm92ZSB3ZSBkcm9wcGVkIGFsbCBvdXIgbG9ja3MuICBBIGJhbGFuY2UKQEAgLTQwNzMsMTkgKzQxNzMsMjQgQEAKIAkgKi8KIAlpZiAobnJpdGVtcyA+IDAgJiYgcGF0aC0+c2xvdHNbMF0gPCBucml0ZW1zIC0gMSkgewogCQlwYXRoLT5zbG90c1swXSsrOworCQlyZXQgPSAwOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJd2hpbGUgKGxldmVsIDwgQlRSRlNfTUFYX0xFVkVMKSB7Ci0JCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKQotCQkJcmV0dXJuIDE7CisJCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKSB7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CiAKIAkJc2xvdCA9IHBhdGgtPnNsb3RzW2xldmVsXSArIDE7CiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGMpKSB7CiAJCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsID09IEJUUkZTX01BWF9MRVZFTCkKLQkJCQlyZXR1cm4gMTsKKwkJCWlmIChsZXZlbCA9PSBCVFJGU19NQVhfTEVWRUwpIHsKKwkJCQlyZXQgPSAxOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQwOTQsMTYgKzQxOTksMjIgQEAKIAkJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJfQogCi0JCS8qIHRoZSBwYXRoIHdhcyBzZXQgdG8gYmxvY2tpbmcgYWJvdmUgKi8KLQkJaWYgKGxldmVsID09IDEgJiYgKHBhdGgtPmxvY2tzWzFdIHx8IHBhdGgtPnNraXBfbG9ja2luZykgJiYKLQkJICAgIHBhdGgtPnJlYWRhKQotCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwYXRoLCBsZXZlbCwgc2xvdCwgMCk7CisJCW5leHQgPSBjOworCQlyZXQgPSByZWFkX2Jsb2NrX2Zvcl9zZWFyY2goTlVMTCwgcm9vdCwgcGF0aCwgJm5leHQsIGxldmVsLAorCQkJCQkgICAgc2xvdCwgJmtleSk7CisJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCWdvdG8gYWdhaW47CiAKLQkJbmV4dCA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIGMsIHNsb3QpOwogCQlpZiAoIXBhdGgtPnNraXBfbG9ja2luZykgewotCQkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGMpOwotCQkJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwotCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobmV4dCk7CisJCQlyZXQgPSBidHJmc190cnlfc3Bpbl9sb2NrKG5leHQpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKKwkJCQlidHJmc190cmVlX2xvY2sobmV4dCk7CisJCQkJaWYgKCFmb3JjZV9ibG9ja2luZykKKwkJCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwYXRoLCBuZXh0KTsKKwkJCX0KKwkJCWlmIChmb3JjZV9ibG9ja2luZykKKwkJCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhuZXh0KTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC00MTEzLDI3ICs0MjI0LDQyIEBACiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmIChwYXRoLT5sb2Nrc1tsZXZlbF0pCiAJCQlidHJmc190cmVlX3VubG9jayhjKTsKKwogCQlmcmVlX2V4dGVudF9idWZmZXIoYyk7CiAJCXBhdGgtPm5vZGVzW2xldmVsXSA9IG5leHQ7CiAJCXBhdGgtPnNsb3RzW2xldmVsXSA9IDA7CiAJCWlmICghcGF0aC0+c2tpcF9sb2NraW5nKQogCQkJcGF0aC0+bG9ja3NbbGV2ZWxdID0gMTsKKwogCQlpZiAoIWxldmVsKQogCQkJYnJlYWs7CiAKLQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JCWlmIChsZXZlbCA9PSAxICYmIHBhdGgtPmxvY2tzWzFdICYmIHBhdGgtPnJlYWRhKQotCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwYXRoLCBsZXZlbCwgc2xvdCwgMCk7Ci0JCW5leHQgPSByZWFkX25vZGVfc2xvdChyb290LCBuZXh0LCAwKTsKKwkJcmV0ID0gcmVhZF9ibG9ja19mb3Jfc2VhcmNoKE5VTEwsIHJvb3QsIHBhdGgsICZuZXh0LCBsZXZlbCwKKwkJCQkJICAgIDAsICZrZXkpOworCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQlnb3RvIGFnYWluOworCiAJCWlmICghcGF0aC0+c2tpcF9sb2NraW5nKSB7CiAJCQlidHJmc19hc3NlcnRfdHJlZV9sb2NrZWQocGF0aC0+bm9kZXNbbGV2ZWxdKTsKLQkJCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKLQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOworCQkJcmV0ID0gYnRyZnNfdHJ5X3NwaW5fbG9jayhuZXh0KTsKKwkJCWlmICghcmV0KSB7CisJCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisJCQkJYnRyZnNfdHJlZV9sb2NrKG5leHQpOworCQkJCWlmICghZm9yY2VfYmxvY2tpbmcpCisJCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocGF0aCwgbmV4dCk7CisJCQl9CisJCQlpZiAoZm9yY2VfYmxvY2tpbmcpCisJCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobmV4dCk7CiAJCX0KIAl9CisJcmV0ID0gMDsKIGRvbmU6CiAJdW5sb2NrX3VwKHBhdGgsIDAsIDEpOwotCXJldHVybiAwOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gb2xkX3NwaW5uaW5nOworCWlmICghb2xkX3NwaW5uaW5nKQorCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA1ZTFkNGUzLi5hZDk2NDk1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEzIEBACiAKICNkZWZpbmUgQlRSRlNfTUFYX0xFVkVMIDgKIAorLyoKKyAqIGZpbGVzIGJpZ2dlciB0aGFuIHRoaXMgZ2V0IHNvbWUgcHJlLWZsdXNoaW5nIHdoZW4gdGhleSBhcmUgYWRkZWQKKyAqIHRvIHRoZSBvcmRlcmVkIG9wZXJhdGlvbnMgbGlzdC4gIFRoYXQgd2F5IHdlIGxpbWl0IHRoZSB0b3RhbAorICogd29yayBkb25lIGJ5IHRoZSBjb21taXQKKyAqLworI2RlZmluZSBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQgKDggKiAxMDI0ICogMTAyNCkKKwogLyogaG9sZHMgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSB0cmVlIHJvb3RzICovCiAjZGVmaW5lIEJUUkZTX1JPT1RfVFJFRV9PQkpFQ1RJRCAxVUxMCiAKQEAgLTEzNiwxMiArMTQzLDE1IEBACiAjZGVmaW5lIEJUUkZTX0ZUX01BWAkJOQogCiAvKgotICogdGhlIGtleSBkZWZpbmVzIHRoZSBvcmRlciBpbiB0aGUgdHJlZSwgYW5kIHNvIGl0IGFsc28gZGVmaW5lcyAob3B0aW1hbCkKLSAqIGJsb2NrIGxheW91dC4gIG9iamVjdGlkIGNvcnJlc29uZHMgdG8gdGhlIGlub2RlIG51bWJlci4gIFRoZSBmbGFncwotICogdGVsbHMgdXMgdGhpbmdzIGFib3V0IHRoZSBvYmplY3QsIGFuZCBpcyBhIGtpbmQgb2Ygc3RyZWFtIHNlbGVjdG9yLgotICogc28gZm9yIGEgZ2l2ZW4gaW5vZGUsIGtleXMgd2l0aCBmbGFncyBvZiAxIG1pZ2h0IHJlZmVyIHRvIHRoZSBpbm9kZQotICogZGF0YSwgZmxhZ3Mgb2YgMiBtYXkgcG9pbnQgdG8gZmlsZSBkYXRhIGluIHRoZSBidHJlZSBhbmQgZmxhZ3MgPT0gMwotICogbWF5IHBvaW50IHRvIGV4dGVudHMuCisgKiBUaGUga2V5IGRlZmluZXMgdGhlIG9yZGVyIGluIHRoZSB0cmVlLCBhbmQgc28gaXQgYWxzbyBkZWZpbmVzIChvcHRpbWFsKQorICogYmxvY2sgbGF5b3V0LgorICoKKyAqIG9iamVjdGlkIGNvcnJlc3BvbmRzIHRvIHRoZSBpbm9kZSBudW1iZXIuCisgKgorICogdHlwZSB0ZWxscyB1cyB0aGluZ3MgYWJvdXQgdGhlIG9iamVjdCwgYW5kIGlzIGEga2luZCBvZiBzdHJlYW0gc2VsZWN0b3IuCisgKiBzbyBmb3IgYSBnaXZlbiBpbm9kZSwga2V5cyB3aXRoIHR5cGUgb2YgMSBtaWdodCByZWZlciB0byB0aGUgaW5vZGUgZGF0YSwKKyAqIHR5cGUgb2YgMiBtYXkgcG9pbnQgdG8gZmlsZSBkYXRhIGluIHRoZSBidHJlZSBhbmQgdHlwZSA9PSAzIG1heSBwb2ludCB0bworICogZXh0ZW50cy4KICAqCiAgKiBvZmZzZXQgaXMgdGhlIHN0YXJ0aW5nIGJ5dGUgb2Zmc2V0IGZvciB0aGlzIGtleSBpbiB0aGUgc3RyZWFtLgogICoKQEAgLTE5Myw3ICsyMDMsNyBAQAogCiAJLyoKIAkgKiBzdGFydGluZyBieXRlIG9mIHRoaXMgcGFydGl0aW9uIG9uIHRoZSBkZXZpY2UsCi0JICogdG8gYWxsb3dyIGZvciBzdHJpcGUgYWxpZ25tZW50IGluIHRoZSBmdXR1cmUKKwkgKiB0byBhbGxvdyBmb3Igc3RyaXBlIGFsaWdubWVudCBpbiB0aGUgZnV0dXJlCiAJICovCiAJX19sZTY0IHN0YXJ0X29mZnNldDsKIApAQCAtNDAxLDE1ICs0MTEsMTYgQEAKIAlpbnQgbG9ja3NbQlRSRlNfTUFYX0xFVkVMXTsKIAlpbnQgcmVhZGE7CiAJLyoga2VlcCBzb21lIHVwcGVyIGxvY2tzIGFzIHdlIHdhbGsgZG93biAqLwotCWludCBrZWVwX2xvY2tzOwotCWludCBza2lwX2xvY2tpbmc7CiAJaW50IGxvd2VzdF9sZXZlbDsKIAogCS8qCiAJICogc2V0IGJ5IGJ0cmZzX3NwbGl0X2l0ZW0sIHRlbGxzIHNlYXJjaF9zbG90IHRvIGtlZXAgYWxsIGxvY2tzCiAJICogYW5kIHRvIGZvcmNlIGNhbGxzIHRvIGtlZXAgc3BhY2UgaW4gdGhlIG5vZGVzCiAJICovCi0JaW50IHNlYXJjaF9mb3Jfc3BsaXQ7CisJdW5zaWduZWQgaW50IHNlYXJjaF9mb3Jfc3BsaXQ6MTsKKwl1bnNpZ25lZCBpbnQga2VlcF9sb2NrczoxOworCXVuc2lnbmVkIGludCBza2lwX2xvY2tpbmc6MTsKKwl1bnNpZ25lZCBpbnQgbGVhdmVfc3Bpbm5pbmc6MTsKIH07CiAKIC8qCkBAIC02MjUsMTggKzYzNiwzNSBAQAogCXN0cnVjdCByd19zZW1hcGhvcmUgZ3JvdXBzX3NlbTsKIH07CiAKLXN0cnVjdCBidHJmc19mcmVlX3NwYWNlIHsKLQlzdHJ1Y3QgcmJfbm9kZSBieXRlc19pbmRleDsKLQlzdHJ1Y3QgcmJfbm9kZSBvZmZzZXRfaW5kZXg7Ci0JdTY0IG9mZnNldDsKLQl1NjQgYnl0ZXM7CisvKgorICogZnJlZSBjbHVzdGVycyBhcmUgdXNlZCB0byBjbGFpbSBmcmVlIHNwYWNlIGluIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzLAorICogYWxsb3dpbmcgdXMgdG8gZG8gbGVzcyBzZWVreSB3cml0ZXMuICBUaGV5IGFyZSB1c2VkIGZvciBhbGwgbWV0YWRhdGEKKyAqIGFsbG9jYXRpb25zIGFuZCBkYXRhIGFsbG9jYXRpb25zIGluIHNzZCBtb2RlLgorICovCitzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCByZWZpbGxfbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdCByb290OworCisJLyogbGFyZ2VzdCBleHRlbnQgaW4gdGhpcyBjbHVzdGVyICovCisJdTY0IG1heF9zaXplOworCisJLyogZmlyc3QgZXh0ZW50IHN0YXJ0aW5nIG9mZnNldCAqLworCXU2NCB3aW5kb3dfc3RhcnQ7CisKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwOworCS8qCisJICogd2hlbiBhIGNsdXN0ZXIgaXMgYWxsb2NhdGVkIGZyb20gYSBibG9jayBncm91cCwgd2UgcHV0IHRoZQorCSAqIGNsdXN0ZXIgb250byBhIGxpc3QgaW4gdGhlIGJsb2NrIGdyb3VwIHNvIHRoYXQgaXQgY2FuCisJICogYmUgZnJlZWQgYmVmb3JlIHRoZSBibG9jayBncm91cCBpcyBmcmVlZC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrX2dyb3VwX2xpc3Q7CiB9OwogCiBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgewogCXN0cnVjdCBidHJmc19rZXkga2V5OwogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9pdGVtIGl0ZW07CiAJc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBhbGxvY19tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2FjaGVfbXV0ZXg7CiAJdTY0IHBpbm5lZDsKIAl1NjQgcmVzZXJ2ZWQ7CkBAIC02NDgsNiArNjc2LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIAogCS8qIGZyZWUgc3BhY2UgY2FjaGUgc3R1ZmYgKi8KKwlzcGlubG9ja190IHRyZWVfbG9jazsKIAlzdHJ1Y3QgcmJfcm9vdCBmcmVlX3NwYWNlX2J5dGVzOwogCXN0cnVjdCByYl9yb290IGZyZWVfc3BhY2Vfb2Zmc2V0OwogCkBAIC02NTksNiArNjg4LDExIEBACiAKIAkvKiB1c2FnZSBjb3VudCAqLwogCWF0b21pY190IGNvdW50OworCisJLyogTGlzdCBvZiBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVycyBmb3IgdGhpcyBibG9jayBncm91cC4KKwkgKiBUb2RheSBpdCB3aWxsIG9ubHkgaGF2ZSBvbmUgdGhpbmcgb24gaXQsIGJ1dCB0aGF0IG1heSBjaGFuZ2UKKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfbGlzdDsKIH07CiAKIHN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlIHsKQEAgLTY4OCwxNSArNzIyLDE4IEBACiAJc3RydWN0IHJiX3Jvb3QgYmxvY2tfZ3JvdXBfY2FjaGVfdHJlZTsKIAogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSBwaW5uZWRfZXh0ZW50czsKLQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgcGVuZGluZ19kZWw7Ci0Jc3RydWN0IGV4dGVudF9pb190cmVlIGV4dGVudF9pbnM7CiAKIAkvKiBsb2dpY2FsLT5waHlzaWNhbCBleHRlbnQgbWFwcGluZyAqLwogCXN0cnVjdCBidHJmc19tYXBwaW5nX3RyZWUgbWFwcGluZ190cmVlOwogCiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IGxhc3RfdHJhbnNfY29tbWl0dGVkOwotCXU2NCBsYXN0X3RyYW5zX25ld19ibG9ja2dyb3VwOworCisJLyoKKwkgKiB0aGlzIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnMgZXZlcnkgdGltZSBhIGZ1bGwgY29tbWl0CisJICogaXMgcmVxdWlyZWQgaW5zdGVhZCBvZiB0aGUgZmFzdGVyIHNob3J0IGZzeW5jIGxvZyBjb21taXRzCisJICovCisJdTY0IGxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0OwogCXU2NCBvcGVuX2lvY3RsX3RyYW5zOwogCXVuc2lnbmVkIGxvbmcgbW91bnRfb3B0OwogCXU2NCBtYXhfZXh0ZW50OwpAQCAtNzE3LDEyICs3NTQsMjAgQEAKIAlzdHJ1Y3QgbXV0ZXggdHJlZV9sb2dfbXV0ZXg7CiAJc3RydWN0IG11dGV4IHRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGNsZWFuZXJfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IGV4dGVudF9pbnNfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IHBpbm5lZF9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2h1bmtfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGRyb3BfbXV0ZXg7CiAJc3RydWN0IG11dGV4IHZvbHVtZV9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggdHJlZV9yZWxvY19tdXRleDsKKworCS8qCisJICogdGhpcyBwcm90ZWN0cyB0aGUgb3JkZXJlZCBvcGVyYXRpb25zIGxpc3Qgb25seSB3aGlsZSB3ZSBhcmUKKwkgKiBwcm9jZXNzaW5nIGFsbCBvZiB0aGUgZW50cmllcyBvbiBpdC4gIFRoaXMgd2F5IHdlIG1ha2UKKwkgKiBzdXJlIHRoZSBjb21taXQgY29kZSBkb2Vzbid0IGZpbmQgdGhlIGxpc3QgdGVtcG9yYXJpbHkgZW1wdHkKKwkgKiBiZWNhdXNlIGFub3RoZXIgZnVuY3Rpb24gaGFwcGVucyB0byBiZSBkb2luZyBub24td2FpdGluZyBwcmVmbHVzaAorCSAqIGJlZm9yZSBqdW1waW5nIGludG8gdGhlIG1haW4gY29tbWl0LgorCSAqLworCXN0cnVjdCBtdXRleCBvcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXg7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBoYXNoZXJzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGVhZF9yb290czsKQEAgLTczNywxMCArNzgyLDI5IEBACiAJICogb3JkZXJlZCBleHRlbnRzCiAJICovCiAJc3BpbmxvY2tfdCBvcmRlcmVkX2V4dGVudF9sb2NrOworCisJLyoKKwkgKiBhbGwgb2YgdGhlIGRhdGE9b3JkZXJlZCBleHRlbnRzIHBlbmRpbmcgd3JpdGViYWNrCisJICogdGhlc2UgY2FuIHNwYW4gbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGFuZCBiYXNpY2FsbHkgaW5jbHVkZQorCSAqIGV2ZXJ5IGRpcnR5IGRhdGEgcGFnZSB0aGF0IGlzbid0IGZyb20gbm9kYXRhY293CisJICovCiAJc3RydWN0IGxpc3RfaGVhZCBvcmRlcmVkX2V4dGVudHM7CisKKwkvKgorCSAqIGFsbCBvZiB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBkZWxhbGxvYyBieXRlcy4gIEl0IGlzIHBvc3NpYmxlIGZvcgorCSAqIHRoaXMgbGlzdCB0byBiZSBlbXB0eSBldmVuIHdoZW4gdGhlcmUgaXMgc3RpbGwgZGlydHkgZGF0YT1vcmRlcmVkCisJICogZXh0ZW50cyB3YWl0aW5nIHRvIGZpbmlzaCBJTy4KKwkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGFsbG9jX2lub2RlczsKIAogCS8qCisJICogc3BlY2lhbCByZW5hbWUgYW5kIHRydW5jYXRlIHRhcmdldHMgdGhhdCBtdXN0IGJlIG9uIGRpc2sgYmVmb3JlCisJICogd2UncmUgYWxsb3dlZCB0byBjb21taXQuICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZXh0MyBzdHlsZQorCSAqIGRhdGE9b3JkZXJlZCBsaXN0LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgb3JkZXJlZF9vcGVyYXRpb25zOworCisJLyoKIAkgKiB0aGVyZSBpcyBhIHBvb2wgb2Ygd29ya2VyIHRocmVhZHMgZm9yIGNoZWNrc3VtbWluZyBkdXJpbmcgd3JpdGVzCiAJICogYW5kIGEgcG9vbCBmb3IgY2hlY2tzdW1taW5nIGFmdGVyIHJlYWRzLiAgVGhpcyBpcyBiZWNhdXNlIHJlYWRlcnMKIAkgKiBjYW4gcnVuIHdpdGggRlMgbG9ja3MgaGVsZCwgYW5kIHRoZSB3cml0ZXJzIG1heSBiZSB3YWl0aW5nIGZvcgpAQCAtNzgxLDYgKzg0NSwxMSBAQAogCWF0b21pY190IHRocm90dGxlX2dlbjsKIAogCXU2NCB0b3RhbF9waW5uZWQ7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdGhlIGRlbGFsbG9jIGxvY2ssIHVzZWQgdG8ga2VlcCBmcm9tIHdyaXRpbmcKKwkgKiBtZXRhZGF0YSB1bnRpbCB0aGVyZSBpcyBhIG5pY2UgYmF0Y2gKKwkgKi8KKwl1NjQgZGlydHlfbWV0YWRhdGFfYnl0ZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9jb3dvbmx5X3Jvb3RzOwogCiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXM7CkBAIC03OTUsOCArODY0LDEyIEBACiAJc3BpbmxvY2tfdCBkZWxhbGxvY19sb2NrOwogCXNwaW5sb2NrX3QgbmV3X3RyYW5zX2xvY2s7CiAJdTY0IGRlbGFsbG9jX2J5dGVzOwotCXU2NCBsYXN0X2FsbG9jOwotCXU2NCBsYXN0X2RhdGFfYWxsb2M7CisKKwkvKiBkYXRhX2FsbG9jX2NsdXN0ZXIgaXMgb25seSB1c2VkIGluIHNzZCBtb2RlICovCisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciBkYXRhX2FsbG9jX2NsdXN0ZXI7CisKKwkvKiBhbGwgbWV0YWRhdGEgYWxsb2NhdGlvbnMgZ28gdGhyb3VnaCB0aGlzIGNsdXN0ZXIgKi8KKwlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyIG1ldGFfYWxsb2NfY2x1c3RlcjsKIAogCXNwaW5sb2NrX3QgcmVmX2NhY2hlX2xvY2s7CiAJdTY0IHRvdGFsX3JlZl9jYWNoZV9zaXplOwpAQCAtODg4LDcgKzk2MSw2IEBACiB9OwogCiAvKgotCiAgKiBpbm9kZSBpdGVtcyBoYXZlIHRoZSBkYXRhIHR5cGljYWxseSByZXR1cm5lZCBmcm9tIHN0YXQgYW5kIHN0b3JlIG90aGVyCiAgKiBpbmZvIGFib3V0IG9iamVjdCBjaGFyYWN0ZXJpc3RpY3MuICBUaGVyZSBpcyBvbmUgZm9yIGV2ZXJ5IGZpbGUgYW5kIGRpciBpbgogICogdGhlIEZTCkBAIC05MTksNyArOTkxLDcgQEAKICNkZWZpbmUgQlRSRlNfRVhURU5UX0NTVU1fS0VZCTEyOAogCiAvKgotICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhlcmUgYXJlIHR5cGljYWxseSBpbiB0aGUgcm9vdAorICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhleSBhcmUgdHlwaWNhbGx5IGluIHRoZSByb290CiAgKiB0cmVlIHVzZWQgYnkgdGhlIHN1cGVyIGJsb2NrIHRvIGZpbmQgYWxsIHRoZSBvdGhlciB0cmVlcwogICovCiAjZGVmaW5lIEJUUkZTX1JPT1RfSVRFTV9LRVkJMTMyCkBAIC05NjYsNiArMTAzOCw4IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX1NTRAkJCSgxIDw8IDMpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0RFR1JBREVECQkoMSA8PCA0KQogI2RlZmluZSBCVFJGU19NT1VOVF9DT01QUkVTUwkJKDEgPDwgNSkKKyNkZWZpbmUgQlRSRlNfTU9VTlRfTk9UUkVFTE9HICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBCVFJGU19NT1VOVF9GTFVTSE9OQ09NTUlUICAgICAgICgxIDw8IDcpCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0xNzA0LDE4ICsxNzc4LDE2IEBACiB9CiAKIC8qIGV4dGVudC10cmVlLmMgKi8KK3ZvaWQgYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpOworaW50IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBpbnQgYnRyZnNfbG9va3VwX2V4dGVudChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHN0YXJ0LCB1NjQgbGVuKTsKLWludCBidHJmc19sb29rdXBfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgbnVtX2J5dGVzLCB1MzIgKnJlZnMpOwogaW50IGJ0cmZzX3VwZGF0ZV9waW5uZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtLCBpbnQgcGluKTsKIGludCBidHJmc19kcm9wX2xlYWZfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmKTsKIGludCBidHJmc19jcm9zc19yZWZfZXhpc3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgb2JqZWN0aWQsIHU2NCBieXRlbnIpOwotaW50IGJ0cmZzX2V4dGVudF9wb3N0X29wKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jb3B5X3Bpbm5lZChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGV4dGVudF9pb190cmVlICpjb3B5KTsKIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKAogCQkJCQkJIHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvLApAQCAtMTc3Nyw3ICsxODQ5LDcgQEAKIAkJCSB1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJIHU2NCBvd25lcl9vYmplY3RpZCk7CiBpbnQgYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsCiAJCQkgICAgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJICAgIHU2NCByb290X29iamVjdGlkLCB1NjQgcmVmX2dlbmVyYXRpb24sCiAJCQkgICAgdTY0IG93bmVyX29iamVjdGlkKTsKQEAgLTE4MzgsNyArMTkxMCw3IEBACiBpbnQgYnRyZnNfY293X2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYsCiAJCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCi0JCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmNvd19yZXQsIHU2NCBwcmVhbGxvY19kZXN0KTsKKwkJICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqY293X3JldCk7CiBpbnQgYnRyZnNfY29weV9yb290KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmJ1ZiwKQEAgLTIwNjAsNyArMjEzMiw3IEBACiB1bnNpZ25lZCBsb25nIGJ0cmZzX2ZvcmNlX3JhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgIHBnb2ZmX3Qgb2Zmc2V0LCBwZ29mZl90IGxhc3RfaW5kZXgpOwotaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIGJ0cmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHZvaWQgYnRyZnNfcHV0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMjEzMywyMSArMjIwNSw0IEBACiBpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGJ0cmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotLyogZnJlZS1zcGFjZS1jYWNoZS5jICovCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSB1NjQgYnl0ZW5yLCB1NjQgc2l6ZSk7Ci1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9sb2NrKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcyk7Ci12b2lkIGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCSAgICpibG9ja19ncm91cCk7Ci1zdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkgICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkgICAgICAgdTY0IGJ5dGVzKTsKLXZvaWQgYnRyZnNfZHVtcF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICB1NjQgYnl0ZXMpOwotdTY0IGJ0cmZzX2Jsb2NrX2dyb3VwX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMgYi9mcy9idHJmcy9kZWxheWVkLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YzAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9idHJmcy9kZWxheWVkLXJlZi5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgImN0cmVlLmgiCisjaW5jbHVkZSAiZGVsYXllZC1yZWYuaCIKKyNpbmNsdWRlICJ0cmFuc2FjdGlvbi5oIgorCisvKgorICogZGVsYXllZCBiYWNrIHJlZmVyZW5jZSB1cGRhdGUgdHJhY2tpbmcuICBGb3Igc3Vidm9sdW1lIHRyZWVzCisgKiB3ZSBxdWV1ZSB1cCBleHRlbnQgYWxsb2NhdGlvbnMgYW5kIGJhY2tyZWYgbWFpbnRlbmFuY2UgZm9yCisgKiBkZWxheWVkIHByb2Nlc3NpbmcuICAgVGhpcyBhdm9pZHMgZGVlcCBjYWxsIGNoYWlucyB3aGVyZSB3ZQorICogYWRkIGV4dGVudHMgaW4gdGhlIG1pZGRsZSBvZiBidHJmc19zZWFyY2hfc2xvdCwgYW5kIGl0IGFsbG93cworICogdXMgdG8gYnVmZmVyIHVwIGZyZXF1ZW50bHkgbW9kaWZpZWQgYmFja3JlZnMgaW4gYW4gcmIgdHJlZSBpbnN0ZWFkCisgKiBvZiBoYW1tZXJpbmcgdXBkYXRlcyBvbiB0aGUgZXh0ZW50IGFsbG9jYXRpb24gdHJlZS4KKyAqCisgKiBSaWdodCBub3cgdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50ZWQgdHJlZXMsIGJ1dAorICogdGhlIGxvbmcgdGVybSBnb2FsIGlzIHRvIGdldCByaWQgb2YgdGhlIHNpbWlsYXIgY29kZSBmb3IgZGVsYXllZAorICogZXh0ZW50IHRyZWUgbW9kaWZpY2F0aW9ucy4KKyAqLworCisvKgorICogZW50cmllcyBpbiB0aGUgcmIgdHJlZSBhcmUgb3JkZXJlZCBieSB0aGUgYnl0ZSBudW1iZXIgb2YgdGhlIGV4dGVudAorICogYW5kIGJ5IHRoZSBieXRlIG51bWJlciBvZiB0aGUgcGFyZW50IGJsb2NrLgorICovCitzdGF0aWMgaW50IGNvbXBfZW50cnkoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZiwKKwkJICAgICAgdTY0IGJ5dGVuciwgdTY0IHBhcmVudCkKK3sKKwlpZiAoYnl0ZW5yIDwgcmVmLT5ieXRlbnIpCisJCXJldHVybiAtMTsKKwlpZiAoYnl0ZW5yID4gcmVmLT5ieXRlbnIpCisJCXJldHVybiAxOworCWlmIChwYXJlbnQgPCByZWYtPnBhcmVudCkKKwkJcmV0dXJuIC0xOworCWlmIChwYXJlbnQgPiByZWYtPnBhcmVudCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbnNlcnQgYSBuZXcgcmVmIGludG8gdGhlIHJidHJlZS4gIFRoaXMgcmV0dXJucyBhbnkgZXhpc3RpbmcgcmVmcworICogZm9yIHRoZSBzYW1lIChieXRlbnIscGFyZW50KSB0dXBsZSwgb3IgTlVMTCBpZiB0aGUgbmV3IG5vZGUgd2FzIHByb3Blcmx5CisgKiBpbnNlcnRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICp0cmVlX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKwkJCQkJCSAgdTY0IGJ5dGVuciwgdTY0IHBhcmVudCwKKwkJCQkJCSAgc3RydWN0IHJiX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnRfbm9kZSA9ICpwOworCQllbnRyeSA9IHJiX2VudHJ5KHBhcmVudF9ub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSwKKwkJCQkgcmJfbm9kZSk7CisKKwkJY21wID0gY29tcF9lbnRyeShlbnRyeSwgYnl0ZW5yLCBwYXJlbnQpOworCQlpZiAoY21wIDwgMCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBlbnRyeTsKKwl9CisKKwllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLCByYl9ub2RlKTsKKwlyYl9saW5rX25vZGUobm9kZSwgcGFyZW50X25vZGUsIHApOworCXJiX2luc2VydF9jb2xvcihub2RlLCByb290KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmQgYW4gZW50cnkgYmFzZWQgb24gKGJ5dGVucixwYXJlbnQpLiAgVGhpcyByZXR1cm5zIHRoZSBkZWxheWVkCisgKiByZWYgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBvbmUsIG9yIE5VTEwgaWYgbm90aGluZyB3YXMgaW4gdGhhdCBzcG90CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqdHJlZV9zZWFyY2goc3RydWN0IHJiX3Jvb3QgKnJvb3QsCisJCQkJICB1NjQgYnl0ZW5yLCB1NjQgcGFyZW50LAorCQkJCSAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKipsYXN0KQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCWVudHJ5ID0gcmJfZW50cnkobiwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsIHJiX25vZGUpOworCQlXQVJOX09OKCFlbnRyeS0+aW5fdHJlZSk7CisJCWlmIChsYXN0KQorCQkJKmxhc3QgPSBlbnRyeTsKKworCQljbXAgPSBjb21wX2VudHJ5KGVudHJ5LCBieXRlbnIsIHBhcmVudCk7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBlbnRyeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBidHJmc19kZWxheWVkX3JlZl9sb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKworCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJaWYgKG11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkKKwkJcmV0dXJuIDA7CisKKwlhdG9taWNfaW5jKCZoZWFkLT5ub2RlLnJlZnMpOworCXNwaW5fdW5sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCisJbXV0ZXhfbG9jaygmaGVhZC0+bXV0ZXgpOworCXNwaW5fbG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwlpZiAoIWhlYWQtPm5vZGUuaW5fdHJlZSkgeworCQltdXRleF91bmxvY2soJmhlYWQtPm11dGV4KTsKKwkJYnRyZnNfcHV0X2RlbGF5ZWRfcmVmKCZoZWFkLT5ub2RlKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ0cmZzX3B1dF9kZWxheWVkX3JlZigmaGVhZC0+bm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidHJmc19maW5kX3JlZl9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY2x1c3RlciwgdTY0IHN0YXJ0KQoreworCWludCBjb3VudCA9IDA7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkOworCisJZGVsYXllZF9yZWZzID0gJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzOworCWlmIChzdGFydCA9PSAwKSB7CisJCW5vZGUgPSByYl9maXJzdCgmZGVsYXllZF9yZWZzLT5yb290KTsKKwl9IGVsc2UgeworCQlyZWYgPSBOVUxMOworCQl0cmVlX3NlYXJjaCgmZGVsYXllZF9yZWZzLT5yb290LCBzdGFydCwgKHU2NCktMSwgJnJlZik7CisJCWlmIChyZWYpIHsKKwkJCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICp0bXA7CisKKwkJCW5vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQkJd2hpbGUgKG5vZGUpIHsKKwkJCQl0bXAgPSByYl9lbnRyeShub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsCisJCQkJCSAgICAgICByYl9ub2RlKTsKKwkJCQlpZiAodG1wLT5ieXRlbnIgPCBzdGFydCkKKwkJCQkJYnJlYWs7CisJCQkJcmVmID0gdG1wOworCQkJCW5vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQkJfQorCQkJbm9kZSA9ICZyZWYtPnJiX25vZGU7CisJCX0gZWxzZQorCQkJbm9kZSA9IHJiX2ZpcnN0KCZkZWxheWVkX3JlZnMtPnJvb3QpOworCX0KK2FnYWluOgorCXdoaWxlIChub2RlICYmIGNvdW50IDwgMzIpIHsKKwkJcmVmID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsIHJiX25vZGUpOworCQlpZiAoYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChyZWYpKSB7CisJCQloZWFkID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZoZWFkLT5jbHVzdGVyKSkgeworCQkJCWxpc3RfYWRkX3RhaWwoJmhlYWQtPmNsdXN0ZXIsIGNsdXN0ZXIpOworCQkJCWRlbGF5ZWRfcmVmcy0+cnVuX2RlbGF5ZWRfc3RhcnQgPQorCQkJCQloZWFkLT5ub2RlLmJ5dGVucjsKKwkJCQljb3VudCsrOworCisJCQkJV0FSTl9PTihkZWxheWVkX3JlZnMtPm51bV9oZWFkc19yZWFkeSA9PSAwKTsKKwkJCQlkZWxheWVkX3JlZnMtPm51bV9oZWFkc19yZWFkeS0tOworCQkJfSBlbHNlIGlmIChjb3VudCkgeworCQkJCS8qIHRoZSBnb2FsIG9mIHRoZSBjbHVzdGVyaW5nIGlzIHRvIGZpbmQgZXh0ZW50cworCQkJCSAqIHRoYXQgYXJlIGxpa2VseSB0byBlbmQgdXAgaW4gdGhlIHNhbWUgZXh0ZW50CisJCQkJICogbGVhZiBvbiBkaXNrLiAgU28sIHdlIGRvbid0IHdhbnQgdGhlbSBzcHJlYWQKKwkJCQkgKiBhbGwgb3ZlciB0aGUgdHJlZS4gIFN0b3Agbm93IGlmIHdlJ3ZlIGhpdAorCQkJCSAqIGEgaGVhZCB0aGF0IHdhcyBhbHJlYWR5IGluIHVzZQorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCX0KKwlpZiAoY291bnQpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzdGFydCkgeworCQkvKgorCQkgKiB3ZSd2ZSBnb25lIHRvIHRoZSBlbmQgb2YgdGhlIHJidHJlZSB3aXRob3V0IGZpbmRpbmcgYW55CisJCSAqIGNsdXN0ZXJzLiAgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCB0cnkgYWdhaW4KKwkJICovCisJCXN0YXJ0ID0gMDsKKwkJbm9kZSA9IHJiX2ZpcnN0KCZkZWxheWVkX3JlZnMtPnJvb3QpOworCQlnb3RvIGFnYWluOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlbGF5ZWQgcmVmcyBpbiB0aGUKKyAqIGJ0cmVlIGZvciBhIGdpdmVuIGJ5dGVuci4gIEl0IHJldHVybnMgb25lIGlmIGl0IGZpbmRzIGFueQorICogYW5kIHplcm8gb3RoZXJ3aXNlLgorICoKKyAqIElmIGl0IG9ubHkgZmluZHMgYSBoZWFkIG5vZGUsIGl0IHJldHVybnMgMC4KKyAqCisgKiBUaGUgaWRlYSBpcyB0byB1c2UgdGhpcyB3aGVuIGRlY2lkaW5nIGlmIHlvdSBjYW4gc2FmZWx5IGRlbGV0ZSBhbgorICogZXh0ZW50IGZyb20gdGhlIGV4dGVudCBhbGxvY2F0aW9uIHRyZWUuICBUaGVyZSBtYXkgYmUgYSBwZW5kaW5nCisgKiByZWYgaW4gdGhlIHJidHJlZSB0aGF0IGFkZHMgb3IgcmVtb3ZlcyByZWZlcmVuY2VzLCBzbyBhcyBsb25nIGFzIHRoaXMKKyAqIHJldHVybnMgb25lIHlvdSBuZWVkIHRvIGxlYXZlIHRoZSBCVFJGU19FWFRFTlRfSVRFTSBpbiB0aGUgZXh0ZW50CisgKiBhbGxvY2F0aW9uIHRyZWUuCisgKi8KK2ludCBidHJmc19kZWxheWVkX3JlZl9wZW5kaW5nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCB1NjQgYnl0ZW5yKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldl9ub2RlOworCWludCByZXQgPSAwOworCisJZGVsYXllZF9yZWZzID0gJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzOworCXNwaW5fbG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCXJlZiA9IHRyZWVfc2VhcmNoKCZkZWxheWVkX3JlZnMtPnJvb3QsIGJ5dGVuciwgKHU2NCktMSwgTlVMTCk7CisJaWYgKHJlZikgeworCQlwcmV2X25vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQlpZiAoIXByZXZfbm9kZSkKKwkJCWdvdG8gb3V0OworCQlyZWYgPSByYl9lbnRyeShwcmV2X25vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLAorCQkJICAgICAgIHJiX25vZGUpOworCQlpZiAocmVmLT5ieXRlbnIgPT0gYnl0ZW5yKQorCQkJcmV0ID0gMTsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byBsb29rdXAgcmVmZXJlbmNlIGNvdW50CisgKgorICogdGhlIGhlYWQgbm9kZSBmb3IgZGVsYXllZCByZWYgaXMgdXNlZCB0byBzdG9yZSB0aGUgc3VtIG9mIGFsbCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBtb2RpZmljYXRpb25zIHF1ZXVlZCB1cCBpbiB0aGUgcmJ0cmVlLiAgVGhpcyB3YXkgeW91CisgKiBjYW4gY2hlY2sgdG8gc2VlIHdoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCB3b3VsZCBiZSBpZiBhbGwgb2YgdGhlCisgKiBkZWxheWVkIHJlZnMgYXJlIHByb2Nlc3NlZC4KKyAqLworaW50IGJ0cmZzX2xvb2t1cF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJICAgIHU2NCBudW1fYnl0ZXMsIHUzMiAqcmVmcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CisJc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICplaTsKKwlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKKwl1MzIgbnVtX3JlZnM7CisJaW50IHJldDsKKworCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWtleS5vYmplY3RpZCA9IGJ5dGVucjsKKwlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKKwlrZXkub2Zmc2V0ID0gbnVtX2J5dGVzOworCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKK2FnYWluOgorCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCQkma2V5LCBwYXRoLCAwLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAocmV0ID09IDApIHsKKwkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOworCQludW1fcmVmcyA9IGJ0cmZzX2V4dGVudF9yZWZzKGxlYWYsIGVpKTsKKwl9IGVsc2UgeworCQludW1fcmVmcyA9IDA7CisJCXJldCA9IDA7CisJfQorCisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCXJlZiA9IHRyZWVfc2VhcmNoKCZkZWxheWVkX3JlZnMtPnJvb3QsIGJ5dGVuciwgKHU2NCktMSwgTlVMTCk7CisJaWYgKHJlZikgeworCQloZWFkID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJaWYgKG11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkgeworCQkJbnVtX3JlZnMgKz0gcmVmLT5yZWZfbW9kOworCQkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisJCQkqcmVmcyA9IG51bV9yZWZzOworCQkJZ290byBvdXQ7CisJCX0KKworCQlhdG9taWNfaW5jKCZyZWYtPnJlZnMpOworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIHBhdGgpOworCisJCW11dGV4X2xvY2soJmhlYWQtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisJCWJ0cmZzX3B1dF9kZWxheWVkX3JlZihyZWYpOworCQlnb3RvIGFnYWluOworCX0gZWxzZSB7CisJCSpyZWZzID0gbnVtX3JlZnM7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBhbiBleHRlbnQgZGVsYXllZCByZWYgaW4gdGhlCisgKiByYnRyZWUuICBleGlzdGluZyBhbmQgdXBkYXRlIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lCisgKiBieXRlbnIgYW5kIHBhcmVudAorICoKKyAqIFRoaXMgbWF5IGZyZWUgZXhpc3RpbmcgaWYgdGhlIHVwZGF0ZSBjYW5jZWxzIG91dCB3aGF0ZXZlcgorICogb3BlcmF0aW9uIGl0IHdhcyBkb2luZy4KKyAqLworc3RhdGljIG5vaW5saW5lIHZvaWQKK3VwZGF0ZV9leGlzdGluZ19yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzLAorCQkgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKmV4aXN0aW5nLAorCQkgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnVwZGF0ZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKmV4aXN0aW5nX3JlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKKworCWV4aXN0aW5nX3JlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYoZXhpc3RpbmcpOworCXJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYodXBkYXRlKTsKKworCWlmIChyZWYtPnBpbikKKwkJZXhpc3RpbmdfcmVmLT5waW4gPSAxOworCisJaWYgKHJlZi0+YWN0aW9uICE9IGV4aXN0aW5nX3JlZi0+YWN0aW9uKSB7CisJCS8qCisJCSAqIHRoaXMgaXMgZWZmZWN0aXZlbHkgdW5kb2luZyBlaXRoZXIgYW4gYWRkIG9yIGEKKwkJICogZHJvcC4gIFdlIGRlY3JlbWVudCB0aGUgcmVmX21vZCwgYW5kIGlmIGl0IGdvZXMKKwkJICogZG93biB0byB6ZXJvIHdlIGp1c3QgZGVsZXRlIHRoZSBlbnRyeSB3aXRob3V0CisJCSAqIGV2ZXJ5IGNoYW5naW5nIHRoZSBleHRlbnQgYWxsb2NhdGlvbiB0cmVlLgorCQkgKi8KKwkJZXhpc3RpbmctPnJlZl9tb2QtLTsKKwkJaWYgKGV4aXN0aW5nLT5yZWZfbW9kID09IDApIHsKKwkJCXJiX2VyYXNlKCZleGlzdGluZy0+cmJfbm9kZSwKKwkJCQkgJmRlbGF5ZWRfcmVmcy0+cm9vdCk7CisJCQlleGlzdGluZy0+aW5fdHJlZSA9IDA7CisJCQlidHJmc19wdXRfZGVsYXllZF9yZWYoZXhpc3RpbmcpOworCQkJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcy0tOworCQkJaWYgKHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzKQorCQkJCXRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzLS07CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZXhpc3RpbmdfcmVmLT5hY3Rpb24gPT0gQlRSRlNfQUREX0RFTEFZRURfUkVGKSB7CisJCQkvKiBpZiB3ZSdyZSBhZGRpbmcgcmVmcywgbWFrZSBzdXJlIGFsbCB0aGUKKwkJCSAqIGRldGFpbHMgbWF0Y2ggdXAuICBUaGUgZXh0ZW50IGNvdWxkCisJCQkgKiBoYXZlIGJlZW4gdG90YWxseSBmcmVlZCBhbmQgcmVhbGxvY2F0ZWQKKwkJCSAqIGJ5IGEgZGlmZmVyZW50IG93bmVyIGJlZm9yZSB0aGUgZGVsYXllZAorCQkJICogcmVmIGVudHJpZXMgd2VyZSByZW1vdmVkLgorCQkJICovCisJCQlleGlzdGluZ19yZWYtPm93bmVyX29iamVjdGlkID0gcmVmLT5vd25lcl9vYmplY3RpZDsKKwkJCWV4aXN0aW5nX3JlZi0+Z2VuZXJhdGlvbiA9IHJlZi0+Z2VuZXJhdGlvbjsKKwkJCWV4aXN0aW5nX3JlZi0+cm9vdCA9IHJlZi0+cm9vdDsKKwkJCWV4aXN0aW5nLT5udW1fYnl0ZXMgPSB1cGRhdGUtPm51bV9ieXRlczsKKwkJfQorCQkvKgorCQkgKiB0aGUgYWN0aW9uIG9uIHRoZSBleGlzdGluZyByZWYgbWF0Y2hlcworCQkgKiB0aGUgYWN0aW9uIG9uIHRoZSByZWYgd2UncmUgdHJ5aW5nIHRvIGFkZC4KKwkJICogQnVtcCB0aGUgcmVmX21vZCBieSBvbmUgc28gdGhlIGJhY2tyZWYgdGhhdAorCQkgKiBpcyBldmVudHVhbGx5IGFkZGVkL3JlbW92ZWQgaGFzIHRoZSBjb3JyZWN0CisJCSAqIHJlZmVyZW5jZSBjb3VudAorCQkgKi8KKwkJZXhpc3RpbmctPnJlZl9tb2QgKz0gdXBkYXRlLT5yZWZfbW9kOworCX0KK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGFjY291bnRpbmcgaW4gdGhlIGhlYWQgcmVmCisgKiBleGlzdGluZyBhbmQgdXBkYXRlIG11c3QgaGF2ZSB0aGUgc2FtZSBieXRlbnIKKyAqLworc3RhdGljIG5vaW5saW5lIHZvaWQKK3VwZGF0ZV9leGlzdGluZ19oZWFkX3JlZihzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZXhpc3RpbmcsCisJCQkgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnVwZGF0ZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqZXhpc3RpbmdfcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpyZWY7CisKKwlleGlzdGluZ19yZWYgPSBidHJmc19kZWxheWVkX25vZGVfdG9faGVhZChleGlzdGluZyk7CisJcmVmID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQodXBkYXRlKTsKKworCWlmIChyZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkKSB7CisJCS8qIGlmIHRoZSBleHRlbnQgd2FzIGZyZWVkIGFuZCB0aGVuCisJCSAqIHJlYWxsb2NhdGVkIGJlZm9yZSB0aGUgZGVsYXllZCByZWYKKwkJICogZW50cmllcyB3ZXJlIHByb2Nlc3NlZCwgd2UgY2FuIGVuZCB1cAorCQkgKiB3aXRoIGFuIGV4aXN0aW5nIGhlYWQgcmVmIHdpdGhvdXQKKwkJICogdGhlIG11c3RfaW5zZXJ0X3Jlc2VydmVkIGZsYWcgc2V0LgorCQkgKiBTZXQgaXQgYWdhaW4gaGVyZQorCQkgKi8KKwkJZXhpc3RpbmdfcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCA9IHJlZi0+bXVzdF9pbnNlcnRfcmVzZXJ2ZWQ7CisKKwkJLyoKKwkJICogdXBkYXRlIHRoZSBudW1fYnl0ZXMgc28gd2UgbWFrZSBzdXJlIHRoZSBhY2NvdW50aW5nCisJCSAqIGlzIGRvbmUgY29ycmVjdGx5CisJCSAqLworCQlleGlzdGluZy0+bnVtX2J5dGVzID0gdXBkYXRlLT5udW1fYnl0ZXM7CisKKwl9CisKKwkvKgorCSAqIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIG1vZCBvbiB0aGUgaGVhZCB0byByZWZsZWN0IHRoaXMgbmV3IG9wZXJhdGlvbgorCSAqLworCWV4aXN0aW5nLT5yZWZfbW9kICs9IHVwZGF0ZS0+cmVmX21vZDsKK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byBhY3R1YWxseSBpbnNlcnQgYSBkZWxheWVkIHJlZiBpbnRvIHRoZSByYnRyZWUuCisgKiB0aGlzIGRvZXMgYWxsIHRoZSBkaXJ0eSB3b3JrIGluIHRlcm1zIG9mIG1haW50YWluaW5nIHRoZSBjb3JyZWN0CisgKiBvdmVyYWxsIG1vZGlmaWNhdGlvbiBjb3VudCBpbiB0aGUgaGVhZCBub2RlIGFuZCBwcm9wZXJseSBkZWFsaW5nCisgKiB3aXRoIHVwZGF0aW5nIGV4aXN0aW5nIG5vZGVzIGFzIG5ldyBtb2RpZmljYXRpb25zIGFyZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19hZGRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWYsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IHJlZl9nZW5lcmF0aW9uLCB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBhY3Rpb24sCisJCQkgIGludCBwaW4pCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKmV4aXN0aW5nOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqZnVsbF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWRfcmVmID0gTlVMTDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzOworCWludCBjb3VudF9tb2QgPSAxOworCWludCBtdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwkvKgorCSAqIHRoZSBoZWFkIG5vZGUgc3RvcmVzIHRoZSBzdW0gb2YgYWxsIHRoZSBtb2RzLCBzbyBkcm9wcGluZyBhIHJlZgorCSAqIHNob3VsZCBkcm9wIHRoZSBzdW0gaW4gdGhlIGhlYWQgbm9kZSBieSBvbmUuCisJICovCisJaWYgKHBhcmVudCA9PSAodTY0KS0xKSB7CisJCWlmIChhY3Rpb24gPT0gQlRSRlNfRFJPUF9ERUxBWUVEX1JFRikKKwkJCWNvdW50X21vZCA9IC0xOworCQllbHNlIGlmIChhY3Rpb24gPT0gQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCkKKwkJCWNvdW50X21vZCA9IDA7CisJfQorCisJLyoKKwkgKiBCVFJGU19BRERfREVMQVlFRF9FWFRFTlQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHVwZGF0ZQorCSAqIHRoZSByZXNlcnZlZCBhY2NvdW50aW5nIHdoZW4gdGhlIGV4dGVudCBpcyBmaW5hbGx5IGFkZGVkLCBvcgorCSAqIGlmIGEgbGF0ZXIgbW9kaWZpY2F0aW9uIGRlbGV0ZXMgdGhlIGRlbGF5ZWQgcmVmIHdpdGhvdXQgZXZlcgorCSAqIGluc2VydGluZyB0aGUgZXh0ZW50IGludG8gdGhlIGV4dGVudCBhbGxvY2F0aW9uIHRyZWUuCisJICogcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCBpcyB0aGUgZmxhZyB1c2VkIHRvIHJlY29yZAorCSAqIHRoYXQgYWNjb3VudGluZyBtb2RzIGFyZSByZXF1aXJlZC4KKwkgKgorCSAqIE9uY2Ugd2UgcmVjb3JkIG11c3RfaW5zZXJ0X3Jlc2VydmVkLCBzd2l0Y2ggdGhlIGFjdGlvbiB0bworCSAqIEJUUkZTX0FERF9ERUxBWUVEX1JFRiBiZWNhdXNlIG90aGVyIHNwZWNpYWwgY2FzaW5nIGlzIG5vdCByZXF1aXJlZC4KKwkgKi8KKwlpZiAoYWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX0VYVEVOVCkgeworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IDE7CisJCWFjdGlvbiA9IEJUUkZTX0FERF9ERUxBWUVEX1JFRjsKKwl9IGVsc2UgeworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisJfQorCisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisKKwkvKiBmaXJzdCBzZXQgdGhlIGJhc2ljIHJlZiBub2RlIHN0cnVjdCB1cCAqLworCWF0b21pY19zZXQoJnJlZi0+cmVmcywgMSk7CisJcmVmLT5ieXRlbnIgPSBieXRlbnI7CisJcmVmLT5wYXJlbnQgPSBwYXJlbnQ7CisJcmVmLT5yZWZfbW9kID0gY291bnRfbW9kOworCXJlZi0+aW5fdHJlZSA9IDE7CisJcmVmLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7CisKKwlpZiAoYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChyZWYpKSB7CisJCWhlYWRfcmVmID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJaGVhZF9yZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkID0gbXVzdF9pbnNlcnRfcmVzZXJ2ZWQ7CisJCUlOSVRfTElTVF9IRUFEKCZoZWFkX3JlZi0+Y2x1c3Rlcik7CisJCW11dGV4X2luaXQoJmhlYWRfcmVmLT5tdXRleCk7CisJfSBlbHNlIHsKKwkJZnVsbF9yZWYgPSBidHJmc19kZWxheWVkX25vZGVfdG9fcmVmKHJlZik7CisJCWZ1bGxfcmVmLT5yb290ID0gcmVmX3Jvb3Q7CisJCWZ1bGxfcmVmLT5nZW5lcmF0aW9uID0gcmVmX2dlbmVyYXRpb247CisJCWZ1bGxfcmVmLT5vd25lcl9vYmplY3RpZCA9IG93bmVyX29iamVjdGlkOworCQlmdWxsX3JlZi0+cGluID0gcGluOworCQlmdWxsX3JlZi0+YWN0aW9uID0gYWN0aW9uOworCX0KKworCWV4aXN0aW5nID0gdHJlZV9pbnNlcnQoJmRlbGF5ZWRfcmVmcy0+cm9vdCwgYnl0ZW5yLAorCQkJICAgICAgIHBhcmVudCwgJnJlZi0+cmJfbm9kZSk7CisKKwlpZiAoZXhpc3RpbmcpIHsKKwkJaWYgKGJ0cmZzX2RlbGF5ZWRfcmVmX2lzX2hlYWQocmVmKSkKKwkJCXVwZGF0ZV9leGlzdGluZ19oZWFkX3JlZihleGlzdGluZywgcmVmKTsKKwkJZWxzZQorCQkJdXBkYXRlX2V4aXN0aW5nX3JlZih0cmFucywgZGVsYXllZF9yZWZzLCBleGlzdGluZywgcmVmKTsKKworCQkvKgorCQkgKiB3ZSd2ZSB1cGRhdGVkIHRoZSBleGlzdGluZyByZWYsIGZyZWUgdGhlIG5ld2x5CisJCSAqIGFsbG9jYXRlZCByZWYKKwkJICovCisJCWtmcmVlKHJlZik7CisJfSBlbHNlIHsKKwkJaWYgKGJ0cmZzX2RlbGF5ZWRfcmVmX2lzX2hlYWQocmVmKSkgeworCQkJZGVsYXllZF9yZWZzLT5udW1faGVhZHMrKzsKKwkJCWRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5Kys7CisJCX0KKwkJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcysrOworCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcysrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFkZCBhIGRlbGF5ZWQgcmVmIHRvIHRoZSB0cmVlLiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgYWNjb3VudGluZyByZXF1aXJlZAorICogdG8gbWFrZSBzdXJlIHRoZSBkZWxheWVkIHJlZiBpcyBldmVudHVhbGx5IHByb2Nlc3NlZCBiZWZvcmUgdGhpcworICogdHJhbnNhY3Rpb24gY29tbWl0cy4KKyAqLworaW50IGJ0cmZzX2FkZF9kZWxheWVkX3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwgdTY0IHJlZl9yb290LAorCQkJICB1NjQgcmVmX2dlbmVyYXRpb24sIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IGFjdGlvbiwKKwkJCSAgaW50IHBpbikKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlpbnQgcmV0OworCisJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9OT0ZTKTsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIHRoZSBwYXJlbnQgPSAwIGNhc2UgY29tZXMgZnJvbSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBhY3R1YWxseQorCSAqIGtub3cgdGhlIHBhcmVudCB5ZXQuICBJdCB3aWxsIGdldCB1cGRhdGVkIGxhdGVyIHZpYSBhIGFkZC9kcm9wCisJICogcGFpci4KKwkgKi8KKwlpZiAocGFyZW50ID09IDApCisJCXBhcmVudCA9IGJ5dGVucjsKKworCWhlYWRfcmVmID0ga21hbGxvYyhzaXplb2YoKmhlYWRfcmVmKSwgR0ZQX05PRlMpOworCWlmICghaGVhZF9yZWYpIHsKKwkJa2ZyZWUocmVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKKwlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKKwkvKgorCSAqIGluc2VydCBib3RoIHRoZSBoZWFkIG5vZGUgYW5kIHRoZSBuZXcgcmVmIHdpdGhvdXQgZHJvcHBpbmcKKwkgKiB0aGUgc3BpbiBsb2NrCisJICovCisJcmV0ID0gX19idHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsICZoZWFkX3JlZi0+bm9kZSwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJICAgICAgKHU2NCktMSwgMCwgMCwgMCwgYWN0aW9uLCBwaW4pOworCUJVR19PTihyZXQpOworCisJcmV0ID0gX19idHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsICZyZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgIHBhcmVudCwgcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAorCQkJCSAgICAgIG93bmVyX29iamVjdGlkLCBhY3Rpb24sIHBpbik7CisJQlVHX09OKHJldCk7CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGRvZXMgYSBzaW1wbGUgc2VhcmNoIGZvciB0aGUgaGVhZCBub2RlIGZvciBhIGdpdmVuIGV4dGVudC4KKyAqIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRlbGF5ZWQgcmVmIHNwaW5sb2NrIGhlbGQsIGFuZCBpdCByZXR1cm5zCisgKiB0aGUgaGVhZCBub2RlIGlmIGFueSB3aGVyZSBmb3VuZCwgb3IgTlVMTCBpZiBub3QuCisgKi8KK3N0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICoKK2J0cmZzX2ZpbmRfZGVsYXllZF9yZWZfaGVhZChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgdTY0IGJ5dGVucikKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJcmVmID0gdHJlZV9zZWFyY2goJmRlbGF5ZWRfcmVmcy0+cm9vdCwgYnl0ZW5yLCAodTY0KS0xLCBOVUxMKTsKKwlpZiAocmVmKQorCQlyZXR1cm4gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFkZCBhIGRlbGF5ZWQgcmVmIHRvIHRoZSB0cmVlLiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgYWNjb3VudGluZyByZXF1aXJlZAorICogdG8gbWFrZSBzdXJlIHRoZSBkZWxheWVkIHJlZiBpcyBldmVudHVhbGx5IHByb2Nlc3NlZCBiZWZvcmUgdGhpcworICogdHJhbnNhY3Rpb24gY29tbWl0cy4KKyAqCisgKiBUaGUgbWFpbiBwb2ludCBvZiB0aGlzIGNhbGwgaXMgdG8gYWRkIGFuZCByZW1vdmUgYSBiYWNrcmVmZXJlbmNlIGluIGEgc2luZ2xlCisgKiBzaG90LCB0YWtpbmcgdGhlIGxvY2sgb25seSBvbmNlLCBhbmQgb25seSBzZWFyY2hpbmcgZm9yIHRoZSBoZWFkIG5vZGUgb25jZS4KKyAqCisgKiBJdCBpcyB0aGUgc2FtZSBhcyBkb2luZyBhIHJlZiBhZGQgYW5kIGRlbGV0ZSBpbiB0d28gc2VwYXJhdGUgY2FsbHMuCisgKi8KK2ludCBidHJmc191cGRhdGVfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBvcmlnX3BhcmVudCwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IG9yaWdfcmVmX3Jvb3QsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IG9yaWdfcmVmX2dlbmVyYXRpb24sIHU2NCByZWZfZ2VuZXJhdGlvbiwKKwkJCSAgdTY0IG93bmVyX29iamVjdGlkLCBpbnQgcGluKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqb2xkX3JlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlpbnQgcmV0OworCisJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9OT0ZTKTsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvbGRfcmVmID0ga21hbGxvYyhzaXplb2YoKm9sZF9yZWYpLCBHRlBfTk9GUyk7CisJaWYgKCFvbGRfcmVmKSB7CisJCWtmcmVlKHJlZik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogdGhlIHBhcmVudCA9IDAgY2FzZSBjb21lcyBmcm9tIGNhc2VzIHdoZXJlIHdlIGRvbid0IGFjdHVhbGx5CisJICoga25vdyB0aGUgcGFyZW50IHlldC4gIEl0IHdpbGwgZ2V0IHVwZGF0ZWQgbGF0ZXIgdmlhIGEgYWRkL2Ryb3AKKwkgKiBwYWlyLgorCSAqLworCWlmIChwYXJlbnQgPT0gMCkKKwkJcGFyZW50ID0gYnl0ZW5yOworCWlmIChvcmlnX3BhcmVudCA9PSAwKQorCQlvcmlnX3BhcmVudCA9IGJ5dGVucjsKKworCWhlYWRfcmVmID0ga21hbGxvYyhzaXplb2YoKmhlYWRfcmVmKSwgR0ZQX05PRlMpOworCWlmICghaGVhZF9yZWYpIHsKKwkJa2ZyZWUocmVmKTsKKwkJa2ZyZWUob2xkX3JlZik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCisJLyoKKwkgKiBpbnNlcnQgYm90aCB0aGUgaGVhZCBub2RlIGFuZCB0aGUgbmV3IHJlZiB3aXRob3V0IGRyb3BwaW5nCisJICogdGhlIHNwaW4gbG9jaworCSAqLworCXJldCA9IF9fYnRyZnNfYWRkX2RlbGF5ZWRfcmVmKHRyYW5zLCAmaGVhZF9yZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgICh1NjQpLTEsIDAsIDAsIDAsCisJCQkJICAgICAgQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCwgMCk7CisJQlVHX09OKHJldCk7CisKKwlyZXQgPSBfX2J0cmZzX2FkZF9kZWxheWVkX3JlZih0cmFucywgJnJlZi0+bm9kZSwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJICAgICAgcGFyZW50LCByZWZfcm9vdCwgcmVmX2dlbmVyYXRpb24sCisJCQkJICAgICAgb3duZXJfb2JqZWN0aWQsIEJUUkZTX0FERF9ERUxBWUVEX1JFRiwgMCk7CisJQlVHX09OKHJldCk7CisKKwlyZXQgPSBfX2J0cmZzX2FkZF9kZWxheWVkX3JlZih0cmFucywgJm9sZF9yZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgIG9yaWdfcGFyZW50LCBvcmlnX3JlZl9yb290LAorCQkJCSAgICAgIG9yaWdfcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCSAgICAgIEJUUkZTX0RST1BfREVMQVlFRF9SRUYsIHBpbik7CisJQlVHX09OKHJldCk7CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kZWxheWVkLXJlZi5oIGIvZnMvYnRyZnMvZGVsYXllZC1yZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmVjMmZmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1yZWYuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fREVMQVlFRF9SRUZfXworI2RlZmluZSBfX0RFTEFZRURfUkVGX18KKworLyogdGhlc2UgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2Ygc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmLT5hY3Rpb24gKi8KKyNkZWZpbmUgQlRSRlNfQUREX0RFTEFZRURfUkVGICAgIDEgLyogYWRkIG9uZSBiYWNrcmVmIHRvIHRoZSB0cmVlICovCisjZGVmaW5lIEJUUkZTX0RST1BfREVMQVlFRF9SRUYgICAyIC8qIGRlbGV0ZSBvbmUgYmFja3JlZiBmcm9tIHRoZSB0cmVlICovCisjZGVmaW5lIEJUUkZTX0FERF9ERUxBWUVEX0VYVEVOVCAzIC8qIHJlY29yZCBhIGZ1bGwgZXh0ZW50IGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCA0IC8qIG5vdCBjaGFuZ2luZyByZWYgY291bnQgb24gaGVhZCByZWYgKi8KKworc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgeworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisKKwkvKiB0aGUgc3RhcnRpbmcgYnl0ZW5yIG9mIHRoZSBleHRlbnQgKi8KKwl1NjQgYnl0ZW5yOworCisJLyogdGhlIHBhcmVudCBvdXIgYmFja3JlZiB3aWxsIHBvaW50IHRvICovCisJdTY0IHBhcmVudDsKKworCS8qIHRoZSBzaXplIG9mIHRoZSBleHRlbnQgKi8KKwl1NjQgbnVtX2J5dGVzOworCisJLyogcmVmIGNvdW50IG9uIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlhdG9taWNfdCByZWZzOworCisJLyoKKwkgKiBob3cgbWFueSByZWZzIGlzIHRoaXMgZW50cnkgYWRkaW5nIG9yIGRlbGV0aW5nLiAgRm9yCisJICogaGVhZCByZWZzLCB0aGlzIG1heSBiZSBhIG5lZ2F0aXZlIG51bWJlciBiZWNhdXNlIGl0IGlzIGtlZXBpbmcKKwkgKiB0cmFjayBvZiB0aGUgdG90YWwgbW9kcyBkb25lIHRvIHRoZSByZWZlcmVuY2UgY291bnQuCisJICogRm9yIGluZGl2aWR1YWwgcmVmcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBhIHBvc2l0aXZlIG51bWJlcgorCSAqCisJICogSXQgbWF5IGJlIG1vcmUgdGhhbiBvbmUsIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciBhIHNpbmdsZQorCSAqIHBhcmVudCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcmVmIG9uIGFuIGV4dGVudAorCSAqLworCWludCByZWZfbW9kOworCisJLyogaXMgdGhpcyBub2RlIHN0aWxsIGluIHRoZSByYnRyZWU/ICovCisJdW5zaWduZWQgaW50IGluX3RyZWU6MTsKK307CisKKy8qCisgKiB0aGUgaGVhZCByZWZzIGFyZSB1c2VkIHRvIGhvbGQgYSBsb2NrIG9uIGEgZ2l2ZW4gZXh0ZW50LCB3aGljaCBhbGxvd3MgdXMKKyAqIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIHByb2Nlc3MgaXMgcnVubmluZyB0aGUgZGVsYXllZCByZWZzCisgKiBhdCBhIHRpbWUgZm9yIGEgc2luZ2xlIGV4dGVudC4gIFRoZXkgYWxzbyBzdG9yZSB0aGUgc3VtIG9mIGFsbCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBtb2RpZmljYXRpb25zIHdlJ3ZlIHF1ZXVlZCB1cC4KKyAqLworc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgeworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlIG5vZGU7CisKKwkvKgorCSAqIHRoZSBtdXRleCBpcyBoZWxkIHdoaWxlIHJ1bm5pbmcgdGhlIHJlZnMsIGFuZCBpdCBpcyBhbHNvCisJICogaGVsZCB3aGVuIGNoZWNraW5nIHRoZSBzdW0gb2YgcmVmZXJlbmNlIG1vZGlmaWNhdGlvbnMuCisJICovCisJc3RydWN0IG11dGV4IG11dGV4OworCisJc3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyOworCisJLyoKKwkgKiB3aGVuIGEgbmV3IGV4dGVudCBpcyBhbGxvY2F0ZWQsIGl0IGlzIGp1c3QgcmVzZXJ2ZWQgaW4gbWVtb3J5CisJICogVGhlIGFjdHVhbCBleHRlbnQgaXNuJ3QgaW5zZXJ0ZWQgaW50byB0aGUgZXh0ZW50IGFsbG9jYXRpb24gdHJlZQorCSAqIHVudGlsIHRoZSBkZWxheWVkIHJlZiBpcyBwcm9jZXNzZWQuICBtdXN0X2luc2VydF9yZXNlcnZlZCBpcworCSAqIHVzZWQgdG8gZmxhZyBhIGRlbGF5ZWQgcmVmIHNvIHRoZSBhY2NvdW50aW5nIGNhbiBiZSB1cGRhdGVkCisJICogd2hlbiBhIGZ1bGwgaW5zZXJ0IGlzIGRvbmUuCisJICoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGUgZXh0ZW50IHdpbGwgYmUgZnJlZWQgYmVmb3JlIGl0IGlzIGV2ZXIKKwkgKiBpbnNlcnRlZCBpbnRvIHRoZSBleHRlbnQgYWxsb2NhdGlvbiB0cmVlLiAgSW4gdGhpcyBjYXNlCisJICogd2UgbmVlZCB0byB1cGRhdGUgdGhlIGluIHJhbSBhY2NvdW50aW5nIHRvIHByb3Blcmx5IHJlZmxlY3QKKwkgKiB0aGUgZnJlZSBoYXMgaGFwcGVuZWQuCisJICovCisJdW5zaWduZWQgaW50IG11c3RfaW5zZXJ0X3Jlc2VydmVkOjE7Cit9OworCitzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgeworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlIG5vZGU7CisKKwkvKiB0aGUgcm9vdCBvYmplY3RpZCBvdXIgcmVmIHdpbGwgcG9pbnQgdG8gKi8KKwl1NjQgcm9vdDsKKworCS8qIHRoZSBnZW5lcmF0aW9uIGZvciB0aGUgYmFja3JlZiAqLworCXU2NCBnZW5lcmF0aW9uOworCisJLyogb3duZXJfb2JqZWN0aWQgb2YgdGhlIGJhY2tyZWYgICovCisJdTY0IG93bmVyX29iamVjdGlkOworCisJLyogb3BlcmF0aW9uIGRvbmUgYnkgdGhpcyBlbnRyeSBpbiB0aGUgcmJ0cmVlICovCisJdTggYWN0aW9uOworCisJLyogaWYgcGluID09IDEsIHdoZW4gdGhlIGV4dGVudCBpcyBmcmVlZCBpdCB3aWxsIGJlIHBpbm5lZCB1bnRpbAorCSAqIHRyYW5zYWN0aW9uIGNvbW1pdAorCSAqLworCXVuc2lnbmVkIGludCBwaW46MTsKK307CisKK3N0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290IHsKKwlzdHJ1Y3QgcmJfcm9vdCByb290OworCisJLyogdGhpcyBzcGluIGxvY2sgcHJvdGVjdHMgdGhlIHJidHJlZSBhbmQgdGhlIGVudHJpZXMgaW5zaWRlICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogaG93IG1hbnkgZGVsYXllZCByZWYgdXBkYXRlcyB3ZSd2ZSBxdWV1ZWQsIHVzZWQgYnkgdGhlCisJICogdGhyb3R0bGluZyBjb2RlCisJICovCisJdW5zaWduZWQgbG9uZyBudW1fZW50cmllczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBoZWFkIG5vZGVzIGluIHRyZWUgKi8KKwl1bnNpZ25lZCBsb25nIG51bV9oZWFkczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBoZWFkIG5vZGVzIHJlYWR5IGZvciBwcm9jZXNzaW5nICovCisJdW5zaWduZWQgbG9uZyBudW1faGVhZHNfcmVhZHk7CisKKwkvKgorCSAqIHNldCB3aGVuIHRoZSB0cmVlIGlzIGZsdXNoaW5nIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGNvbW1pdCwKKwkgKiB1c2VkIGJ5IHRoZSB0aHJvdHRsaW5nIGNvZGUgdG8gZGVjaWRlIGlmIG5ldyB1cGRhdGVzIG5lZWQKKwkgKiB0byBiZSBydW4gcmlnaHQgYXdheQorCSAqLworCWludCBmbHVzaGluZzsKKworCXU2NCBydW5fZGVsYXllZF9zdGFydDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19wdXRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZikKK3sKKwlXQVJOX09OKGF0b21pY19yZWFkKCZyZWYtPnJlZnMpID09IDApOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWYtPnJlZnMpKSB7CisJCVdBUk5fT04ocmVmLT5pbl90cmVlKTsKKwkJa2ZyZWUocmVmKTsKKwl9Cit9CisKK2ludCBidHJmc19hZGRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IHJlZl9nZW5lcmF0aW9uLCB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBhY3Rpb24sCisJCQkgIGludCBwaW4pOworCitzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqCitidHJmc19maW5kX2RlbGF5ZWRfcmVmX2hlYWQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHU2NCBieXRlbnIpOworaW50IGJ0cmZzX2RlbGF5ZWRfcmVmX3BlbmRpbmcoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHU2NCBieXRlbnIpOworaW50IGJ0cmZzX2xvb2t1cF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJICAgIHU2NCBudW1fYnl0ZXMsIHUzMiAqcmVmcyk7CitpbnQgYnRyZnNfdXBkYXRlX2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICB1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgb3JpZ19wYXJlbnQsCisJCQkgIHU2NCBwYXJlbnQsIHU2NCBvcmlnX3JlZl9yb290LCB1NjQgcmVmX3Jvb3QsCisJCQkgIHU2NCBvcmlnX3JlZl9nZW5lcmF0aW9uLCB1NjQgcmVmX2dlbmVyYXRpb24sCisJCQkgIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IHBpbik7CitpbnQgYnRyZnNfZGVsYXllZF9yZWZfbG9jayhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkKTsKK2ludCBidHJmc19maW5kX3JlZl9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY2x1c3RlciwgdTY0IHNlYXJjaF9zdGFydCk7CisvKgorICogYSBub2RlIG1pZ2h0IGxpdmUgaW4gYSBoZWFkIG9yIGEgcmVndWxhciByZWYsIHRoaXMgbGV0cyB5b3UKKyAqIHRlc3QgZm9yIHRoZSBwcm9wZXIgdHlwZSB0byB1c2UuCisgKi8KK3N0YXRpYyBpbnQgYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gbm9kZS0+cGFyZW50ID09ICh1NjQpLTE7Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGNhc3QgYSBub2RlIGludG8gaXRzIGNvbnRhaW5lcgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqCitidHJmc19kZWxheWVkX25vZGVfdG9fcmVmKHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpub2RlKQoreworCVdBUk5fT04oYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChub2RlKSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYsIG5vZGUpOworCit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKgorYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKm5vZGUpCit7CisJV0FSTl9PTighYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChub2RlKSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCwgbm9kZSk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlyLWl0ZW0uYyBiL2ZzL2J0cmZzL2Rpci1pdGVtLmMKaW5kZXggOTI2YTBiMi4uMWQ3MDIzNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlyLWl0ZW0uYworKysgYi9mcy9idHJmcy9kaXItaXRlbS5jCkBAIC0xNDUsNyArMTQ1LDEwIEBACiAJa2V5Lm9iamVjdGlkID0gZGlyOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19ESVJfSVRFTV9LRVkpOwogCWtleS5vZmZzZXQgPSBidHJmc19uYW1lX2hhc2gobmFtZSwgbmFtZV9sZW4pOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CisKIAlkYXRhX3NpemUgPSBzaXplb2YoKmRpcl9pdGVtKSArIG5hbWVfbGVuOwogCWRpcl9pdGVtID0gaW5zZXJ0X3dpdGhfb3ZlcmZsb3codHJhbnMsIHJvb3QsIHBhdGgsICZrZXksIGRhdGFfc2l6ZSwKIAkJCQkJbmFtZSwgbmFtZV9sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDZlYzgwYzAuLjkyY2FhODAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJsb2NraW5nLmgiCiAjaW5jbHVkZSAicmVmLWNhY2hlLmgiCiAjaW5jbHVkZSAidHJlZS1sb2cuaCIKKyNpbmNsdWRlICJmcmVlLXNwYWNlLWNhY2hlLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X2lvX29wcyBidHJlZV9leHRlbnRfaW9fb3BzOwogc3RhdGljIHZvaWQgZW5kX3dvcmtxdWV1ZV9mbihzdHJ1Y3QgYnRyZnNfd29yayAqd29yayk7CkBAIC02NjgsMTQgKzY2OSwzMSBAQAogc3RhdGljIGludCBidHJlZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKLQl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpLT5yb290OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYjsKKwlpbnQgd2FzX2RpcnR5OwogCi0JaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpIHsKLQkJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiAwOworCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKKwlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKSkgeworCQlyZXR1cm4gZXh0ZW50X3dyaXRlX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLAorCQkJCQkgICAgICBidHJlZV9nZXRfZXh0ZW50LCB3YmMpOwogCX0KLQlyZXR1cm4gZXh0ZW50X3dyaXRlX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLCBidHJlZV9nZXRfZXh0ZW50LCB3YmMpOworCisJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKKwllYiA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBwYWdlX29mZnNldChwYWdlKSwKKwkJCQkgICAgICBQQUdFX0NBQ0hFX1NJWkUpOworCVdBUk5fT04oIWViKTsKKworCXdhc19kaXJ0eSA9IHRlc3RfYW5kX3NldF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpOworCWlmICghd2FzX2RpcnR5KSB7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCXJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzICs9IFBBR0VfQ0FDSEVfU0laRTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KKwlmcmVlX2V4dGVudF9idWZmZXIoZWIpOworCisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnRyZWVfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTY4NCwxNSArNzAyLDE1IEBACiAJc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlOwogCXRyZWUgPSAmQlRSRlNfSShtYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7CisJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShtYXBwaW5nLT5ob3N0KS0+cm9vdDsKIAkJdTY0IG51bV9kaXJ0eTsKLQkJdTY0IHN0YXJ0ID0gMDsKIAkJdW5zaWduZWQgbG9uZyB0aHJlc2ggPSAzMiAqIDEwMjQgKiAxMDI0OwogCiAJCWlmICh3YmMtPmZvcl9rdXBkYXRlKQogCQkJcmV0dXJuIDA7CiAKLQkJbnVtX2RpcnR5ID0gY291bnRfcmFuZ2VfYml0cyh0cmVlLCAmc3RhcnQsICh1NjQpLTEsCi0JCQkJCSAgICAgdGhyZXNoLCBFWFRFTlRfRElSVFkpOworCQkvKiB0aGlzIGlzIGEgYml0IHJhY3ksIGJ1dCB0aGF0J3Mgb2sgKi8KKwkJbnVtX2RpcnR5ID0gcm9vdC0+ZnNfaW5mby0+ZGlydHlfbWV0YWRhdGFfYnl0ZXM7CiAJCWlmIChudW1fZGlydHkgPCB0aHJlc2gpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC04NTksOSArODc3LDE3IEBACiAJICAgIHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnRyYW5zaWQpIHsKIAkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGJ1Zik7CiAKLQkJLyogdWdoLCBjbGVhcl9leHRlbnRfYnVmZmVyX2RpcnR5IGNhbiBiZSBleHBlbnNpdmUgKi8KLQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoYnVmKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFWFRFTlRfQlVGRkVSX0RJUlRZLCAmYnVmLT5iZmxhZ3MpKSB7CisJCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCQkJaWYgKHJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzID49IGJ1Zi0+bGVuKQorCQkJCXJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzIC09IGJ1Zi0+bGVuOworCQkJZWxzZQorCQkJCVdBUk5fT04oMSk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCX0KIAorCQkvKiB1Z2gsIGNsZWFyX2V4dGVudF9idWZmZXJfZGlydHkgbmVlZHMgdG8gbG9jayB0aGUgcGFnZSAqLworCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhidWYpOwogCQljbGVhcl9leHRlbnRfYnVmZmVyX2RpcnR5KCZCVFJGU19JKGJ0cmVlX2lub2RlKS0+aW9fdHJlZSwKIAkJCQkJICBidWYpOwogCX0KQEAgLTEzODcsOCArMTQxMyw2IEBACiAKIAlyZXQgPSBleHRlbnRfcmFuZ2VfdXB0b2RhdGUoaW9fdHJlZSwgc3RhcnQgKyBsZW5ndGgsCiAJCQkJICAgIHN0YXJ0ICsgYnVmX2xlbiAtIDEpOwotCWlmIChyZXQgPT0gMSkKLQkJcmV0dXJuIHJldDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDcxLDEyICsxNDk1LDYgQEAKIAkJdmZzX2NoZWNrX2Zyb3plbihyb290LT5mc19pbmZvLT5zYiwgU0JfRlJFRVpFX1dSSVRFKTsKIAkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAKLQkJaWYgKHJvb3QtPmZzX2luZm8tPnRvdGFsX3JlZl9jYWNoZV9zaXplID4gMjAgKiAxMDI0ICogMTAyNCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IHRvdGFsIHJlZmVyZW5jZSBjYWNoZSAiCi0JCQkgICAgICAgInNpemUgJWxsdVxuIiwKLQkJCSAgICAgICByb290LT5mc19pbmZvLT50b3RhbF9yZWZfY2FjaGVfc2l6ZSk7Ci0JCX0KLQogCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWN1ciA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CiAJCWlmICghY3VyKSB7CkBAIC0xNDkzLDYgKzE1MTEsNyBAQAogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwogc2xlZXA6CiAJCXdha2VfdXBfcHJvY2Vzcyhyb290LT5mc19pbmZvLT5jbGVhbmVyX2t0aHJlYWQpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXgpOwpAQCAtMTU1Miw2ICsxNTcxLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+ZGVhZF9yb290cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmhhc2hlcnMpOwogCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5kZWxhbGxvY19pbm9kZXMpOworCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnMpOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5yZWZfY2FjaGVfbG9jayk7CkBAIC0xNjExLDEwICsxNjMxLDYgQEAKIAogCWV4dGVudF9pb190cmVlX2luaXQoJmZzX2luZm8tPnBpbm5lZF9leHRlbnRzLAogCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7Ci0JZXh0ZW50X2lvX3RyZWVfaW5pdCgmZnNfaW5mby0+cGVuZGluZ19kZWwsCi0JCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKLQlleHRlbnRfaW9fdHJlZV9pbml0KCZmc19pbmZvLT5leHRlbnRfaW5zLAotCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAJZnNfaW5mby0+ZG9fYmFycmllcnMgPSAxOwogCiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlYWRfcmVsb2Nfcm9vdHMpOwpAQCAtMTYyNywxNSArMTY0MywxOCBAQAogCWluc2VydF9pbm9kZV9oYXNoKGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKIAogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF9pbml0KCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfbG9nX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5kcm9wX211dGV4KTsKLQltdXRleF9pbml0KCZmc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQltdXRleF9pbml0KCZmc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPmNodW5rX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT50cmFuc2FjdGlvbl9rdGhyZWFkX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT52b2x1bWVfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfcmVsb2NfbXV0ZXgpOworCisJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPm1ldGFfYWxsb2NfY2x1c3Rlcik7CisJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPmRhdGFfYWxsb2NfY2x1c3Rlcik7CisKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc19pbmZvLT50cmFuc2FjdGlvbl90aHJvdHRsZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+YXN5bmNfc3VibWl0X3dhaXQpOwpAQCAtMjM1OCw4ICsyMzc3LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLT5ob3N0KS0+cm9vdDsKIAl1NjQgdHJhbnNpZCA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKGJ1Zik7CiAJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZSA9IHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlOwotCi0JYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoYnVmKTsKKwlpbnQgd2FzX2RpcnR5OwogCiAJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGJ1Zik7CiAJaWYgKHRyYW5zaWQgIT0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbikgewpAQCAtMjM3MCw3ICsyMzg4LDEzIEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24pOwogCQlXQVJOX09OKDEpOwogCX0KLQlzZXRfZXh0ZW50X2J1ZmZlcl9kaXJ0eSgmQlRSRlNfSShidHJlZV9pbm9kZSktPmlvX3RyZWUsIGJ1Zik7CisJd2FzX2RpcnR5ID0gc2V0X2V4dGVudF9idWZmZXJfZGlydHkoJkJUUkZTX0koYnRyZWVfaW5vZGUpLT5pb190cmVlLAorCQkJCQkgICAgYnVmKTsKKwlpZiAoIXdhc19kaXJ0eSkgeworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCQlyb290LT5mc19pbmZvLT5kaXJ0eV9tZXRhZGF0YV9ieXRlcyArPSBidWYtPmxlbjsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KIH0KIAogdm9pZCBidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMjQxMCw2ICsyNDM0LDcgQEAKIGludCBidHJlZV9sb2NrX3BhZ2VfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqaW9fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJdW5zaWduZWQgbG9uZyBsZW47CkBAIC0yNDI1LDYgKzI0NTAsMTYgQEAKIAogCWJ0cmZzX3RyZWVfbG9jayhlYik7CiAJYnRyZnNfc2V0X2hlYWRlcl9mbGFnKGViLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpKSB7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCWlmIChyb290LT5mc19pbmZvLT5kaXJ0eV9tZXRhZGF0YV9ieXRlcyA+PSBlYi0+bGVuKQorCQkJcm9vdC0+ZnNfaW5mby0+ZGlydHlfbWV0YWRhdGFfYnl0ZXMgLT0gZWItPmxlbjsKKwkJZWxzZQorCQkJV0FSTl9PTigxKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KKwogCWJ0cmZzX3RyZWVfdW5sb2NrKGViKTsKIAlmcmVlX2V4dGVudF9idWZmZXIoZWIpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5oIGIvZnMvYnRyZnMvZGlzay1pby5oCmluZGV4IDk1MDI5ZGIuLmM5NThlY2IgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uaAorKysgYi9mcy9idHJmcy9kaXNrLWlvLmgKQEAgLTcyLDYgKzcyLDcgQEAKIHZvaWQgYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBucik7CiBpbnQgYnRyZnNfZnJlZV9mc19yb290KHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiB2b2lkIGJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpOwordm9pZCBidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eV9ub25ibG9ja2luZyhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmKTsKIGludCBidHJmc19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9idWZmZXIgKmJ1ZiwgdTY0IHBhcmVudF90cmFuc2lkKTsKIGludCBidHJmc19zZXRfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpOwogaW50IHdhaXRfb25fdHJlZV9ibG9ja193cml0ZWJhY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBmZWZlODNhLi4xNzhkZjRjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJ2b2x1bWVzLmgiCiAjaW5jbHVkZSAibG9ja2luZy5oIgogI2luY2x1ZGUgInJlZi1jYWNoZS5oIgorI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAogI2RlZmluZSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQgMAogI2RlZmluZSBQRU5ESU5HX0VYVEVOVF9ERUxFVEUgMQpAQCAtNDksMTcgKzUwLDIzIEBACiAJaW50IGRlbDsKIH07CiAKLXN0YXRpYyBpbnQgZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIGludCBhbGwpOwotc3RhdGljIGludCBkZWxfcGVuZGluZ19leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwgaW50IGFsbCk7Ci1zdGF0aWMgaW50IHBpbl9kb3duX2J5dGVzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGlzX2RhdGEpOworc3RhdGljIGludCBfX2J0cmZzX2FsbG9jX3Jlc2VydmVkX2V4dGVudChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgcGFyZW50LAorCQkJCQkgdTY0IHJvb3Rfb2JqZWN0aWQsIHU2NCByZWZfZ2VuZXJhdGlvbiwKKwkJCQkJIHU2NCBvd25lciwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLAorCQkJCQkgaW50IHJlZl9tb2QpOworc3RhdGljIGludCB1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICB1NjQgYnl0ZW5yLCB1NjQgbnVtLCBpbnQgcmVzZXJ2ZSk7CiBzdGF0aWMgaW50IHVwZGF0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGFsbG9jLAogCQkJICAgICAgaW50IG1hcmtfZnJlZSk7CitzdGF0aWMgbm9pbmxpbmUgaW50IF9fYnRyZnNfZnJlZV9leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgcGFyZW50LAorCQkJCQl1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAorCQkJCQl1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sCisJCQkJCWludCByZWZfdG9fZHJvcCk7CiAKIHN0YXRpYyBpbnQgZG9fY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwgdTY0IGFsbG9jX2J5dGVzLApAQCAtMTYwLDcgKzE2Nyw2IEBACiAJdTY0IGV4dGVudF9zdGFydCwgZXh0ZW50X2VuZCwgc2l6ZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmaW5mby0+cGlubmVkX211dGV4KTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZpbmZvLT5waW5uZWRfZXh0ZW50cywgc3RhcnQsCiAJCQkJCSAgICAmZXh0ZW50X3N0YXJ0LCAmZXh0ZW50X2VuZCwKQEAgLTE4Niw3ICsxOTIsNiBAQAogCQlyZXQgPSBidHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgc3RhcnQsIHNpemUpOwogCQlCVUdfT04ocmV0KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5waW5uZWRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODUsOCArMjkwLDggQEAKIAkJCSAgIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgKwogCQkJICAgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpOwogCi0JcmVtb3ZlX3NiX2Zyb21fY2FjaGUocm9vdCwgYmxvY2tfZ3JvdXApOwogCWJsb2NrX2dyb3VwLT5jYWNoZWQgPSAxOworCXJlbW92ZV9zYl9mcm9tX2NhY2hlKHJvb3QsIGJsb2NrX2dyb3VwKTsKIAlyZXQgPSAwOwogZXJyOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTMyMCw3ICszMjUsNyBAQAogCXJldHVybiBjYWNoZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHB1dF9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKQordm9pZCBidHJmc19wdXRfYmxvY2tfZ3JvdXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2FjaGUtPmNvdW50KSkKIAkJa2ZyZWUoY2FjaGUpOwpAQCAtMzkzLDEyICszOTgsMTIgQEAKIAkJCSAgICBkaXZfZmFjdG9yKGNhY2hlLT5rZXkub2Zmc2V0LCBmYWN0b3IpKSB7CiAJCQkJZ3JvdXBfc3RhcnQgPSBjYWNoZS0+a2V5Lm9iamVjdGlkOwogCQkJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7Ci0JCQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICghd3JhcHBlZCkgewpAQCAtNTU0LDI2MiArNTU5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIHVwZGF0ZXMgYWxsIHRoZSBiYWNrcmVmcyB0aGF0IGFyZSBwZW5kaW5nIG9uIHVwZGF0ZV9saXN0IGZvciB0aGUKLSAqIGV4dGVudF9yb290Ci0gKi8KLXN0YXRpYyBub2lubGluZSBpbnQgdXBkYXRlX2JhY2tyZWZzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsCi0JCQkJICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAotCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICp1cGRhdGVfbGlzdCkKLXsKLQlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKLQlzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZiAqcmVmOwotCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gZXh0ZW50X3Jvb3QtPmZzX2luZm87Ci0Jc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpvcDsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpjdXIgPSB1cGRhdGVfbGlzdC0+bmV4dDsKLQl1NjQgcmVmX29iamVjdGlkOwotCXU2NCByZWZfcm9vdCA9IGV4dGVudF9yb290LT5yb290X2tleS5vYmplY3RpZDsKLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLXNlYXJjaDoKLQlrZXkub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCWtleS50eXBlID0gQlRSRlNfRVhURU5UX1JFRl9LRVk7Ci0Ja2V5Lm9mZnNldCA9IG9wLT5vcmlnX3BhcmVudDsKLQotCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCBleHRlbnRfcm9vdCwgJmtleSwgcGF0aCwgMCwgMSk7Ci0JQlVHX09OKHJldCk7Ci0KLQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0KLWxvb3A6Ci0JcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQotCXJlZl9vYmplY3RpZCA9IGJ0cmZzX3JlZl9vYmplY3RpZChsZWFmLCByZWYpOwotCi0JaWYgKGJ0cmZzX3JlZl9yb290KGxlYWYsIHJlZikgIT0gcmVmX3Jvb3QgfHwKLQkgICAgYnRyZnNfcmVmX2dlbmVyYXRpb24obGVhZiwgcmVmKSAhPSBvcC0+b3JpZ19nZW5lcmF0aW9uIHx8Ci0JICAgIChyZWZfb2JqZWN0aWQgIT0gb3AtPmxldmVsICYmCi0JICAgICByZWZfb2JqZWN0aWQgIT0gQlRSRlNfTVVMVElQTEVfT0JKRUNUSURTKSkgewotCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIGNvdWxkbid0IGZpbmQgJWxsdSwgcGFyZW50ICVsbHUsICIKLQkJICAgICAgICJyb290ICVsbHUsIG93bmVyICV1XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+Ynl0ZW5yLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+b3JpZ19wYXJlbnQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZl9yb290LCBvcC0+bGV2ZWwpOwotCQlidHJmc19wcmludF9sZWFmKGV4dGVudF9yb290LCBsZWFmKTsKLQkJQlVHKCk7Ci0JfQotCi0Ja2V5Lm9iamVjdGlkID0gb3AtPmJ5dGVucjsKLQlrZXkub2Zmc2V0ID0gb3AtPnBhcmVudDsKLQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9SRUZfS0VZOwotCXJldCA9IGJ0cmZzX3NldF9pdGVtX2tleV9zYWZlKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJmtleSk7Ci0JQlVHX09OKHJldCk7Ci0JcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQlidHJmc19zZXRfcmVmX2dlbmVyYXRpb24obGVhZiwgcmVmLCBvcC0+Z2VuZXJhdGlvbik7Ci0KLQljdXIgPSBjdXItPm5leHQ7Ci0KLQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JdW5sb2NrX2V4dGVudCgmaW5mby0+ZXh0ZW50X2lucywgb3AtPmJ5dGVuciwKLQkJICAgICAgb3AtPmJ5dGVuciArIG9wLT5udW1fYnl0ZXMgLSAxLCBHRlBfTk9GUyk7Ci0Ja2ZyZWUob3ApOwotCi0JaWYgKGN1ciA9PSB1cGRhdGVfbGlzdCkgewotCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7Ci0JCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLQlwYXRoLT5zbG90c1swXSsrOwotCXdoaWxlIChwYXRoLT5zbG90c1swXSA8IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpKSB7Ci0JCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCAma2V5LCBwYXRoLT5zbG90c1swXSk7Ci0JCWlmIChrZXkub2JqZWN0aWQgPT0gb3AtPmJ5dGVuciAmJgotCQkgICAga2V5LnR5cGUgPT0gQlRSRlNfRVhURU5UX1JFRl9LRVkpCi0JCQlnb3RvIGxvb3A7Ci0JCXBhdGgtPnNsb3RzWzBdKys7Ci0JfQotCi0JYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwotCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JZ290byBzZWFyY2g7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBpbnNlcnRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsCi0JCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaW5zZXJ0X2xpc3QsIGludCBucikKLXsKLQlzdHJ1Y3QgYnRyZnNfa2V5ICprZXlzOwotCXUzMiAqZGF0YV9zaXplOwotCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqb3A7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyID0gaW5zZXJ0X2xpc3QtPm5leHQ7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQl1NjQgcmVmX3Jvb3QgPSBleHRlbnRfcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7Ci0JaW50IGkgPSAwLCBsYXN0ID0gMCwgcmV0OwotCWludCB0b3RhbCA9IG5yICogMjsKLQotCWlmICghbnIpCi0JCXJldHVybiAwOwotCi0Ja2V5cyA9IGt6YWxsb2ModG90YWwgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleSksIEdGUF9OT0ZTKTsKLQlpZiAoIWtleXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGF0YV9zaXplID0ga3phbGxvYyh0b3RhbCAqIHNpemVvZih1MzIpLCBHRlBfTk9GUyk7Ci0JaWYgKCFkYXRhX3NpemUpIHsKLQkJa2ZyZWUoa2V5cyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkob3AsIGluc2VydF9saXN0LCBsaXN0KSB7Ci0JCWtleXNbaV0ub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCQlrZXlzW2ldLm9mZnNldCA9IG9wLT5udW1fYnl0ZXM7Ci0JCWtleXNbaV0udHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQkJZGF0YV9zaXplW2ldID0gc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7Ci0JCWkrKzsKLQotCQlrZXlzW2ldLm9iamVjdGlkID0gb3AtPmJ5dGVucjsKLQkJa2V5c1tpXS5vZmZzZXQgPSBvcC0+cGFyZW50OwotCQlrZXlzW2ldLnR5cGUgPSBCVFJGU19FWFRFTlRfUkVGX0tFWTsKLQkJZGF0YV9zaXplW2ldID0gc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJaSsrOwotCX0KLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0JaSA9IDA7Ci0Jd2hpbGUgKGkgPCB0b3RhbCkgewotCQlpbnQgYzsKLQkJcmV0ID0gYnRyZnNfaW5zZXJ0X3NvbWVfaXRlbXModHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAotCQkJCQkgICAgICBrZXlzK2ksIGRhdGFfc2l6ZStpLCB0b3RhbC1pKTsKLQkJQlVHX09OKHJldCA8IDApOwotCi0JCWlmIChsYXN0ICYmIHJldCA+IDEpCi0JCQlCVUcoKTsKLQotCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCWZvciAoYyA9IDA7IGMgPCByZXQ7IGMrKykgewotCQkJaW50IHJlZl9maXJzdCA9IGtleXNbaV0udHlwZSA9PSBCVFJGU19FWFRFTlRfUkVGX0tFWTsKLQotCQkJLyoKLQkJCSAqIGlmIHRoZSBmaXJzdCBpdGVtIHdlIGluc2VydGVkIHdhcyBhIGJhY2tyZWYsIHRoZW4KLQkJCSAqIHRoZSBFWFRFTlRfSVRFTSB3aWxsIGJlIHRoZSBvZGQgYydzLCBlbHNlIGl0IHdpbGwKLQkJCSAqIGJlIHRoZSBldmVuIGMncwotCQkJICovCi0JCQlpZiAoKHJlZl9maXJzdCAmJiAoYyAlIDIpKSB8fAotCQkJICAgICghcmVmX2ZpcnN0ICYmICEoYyAlIDIpKSkgewotCQkJCXN0cnVjdCBidHJmc19leHRlbnRfaXRlbSAqaXRtOwotCi0JCQkJaXRtID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0gKyBjLAotCQkJCQkJICAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwotCQkJCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhwYXRoLT5ub2Rlc1swXSwgaXRtLCAxKTsKLQkJCQlvcC0+ZGVsKys7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBidHJmc19leHRlbnRfcmVmICpyZWY7Ci0KLQkJCQlyZWYgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSArIGMsCi0JCQkJCQkgICAgIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJCQlidHJmc19zZXRfcmVmX3Jvb3QobGVhZiwgcmVmLCByZWZfcm9vdCk7Ci0JCQkJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKGxlYWYsIHJlZiwKLQkJCQkJCQkgb3AtPmdlbmVyYXRpb24pOwotCQkJCWJ0cmZzX3NldF9yZWZfb2JqZWN0aWQobGVhZiwgcmVmLCBvcC0+bGV2ZWwpOwotCQkJCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCAxKTsKLQkJCQlvcC0+ZGVsKys7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiB1c2luZyBkZWwgdG8gc2VlIHdoZW4gaXRzIG9rIHRvIGZyZWUgdXAgdGhlCi0JCQkgKiBwZW5kaW5nX2V4dGVudF9vcC4gIEluIHRoZSBjYXNlIHdoZXJlIHdlIGluc2VydCB0aGUKLQkJCSAqIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpbiBvcmRlciB0byBoZWxwIGRvIGJhdGNoaW5nCi0JCQkgKiB3ZSBuZWVkIHRvIG5vdCBmcmVlIHRoZSBleHRlbnQgb3AgdW50aWwgd2UgYWN0dWFsbHkKLQkJCSAqIGluc2VydCB0aGUgZXh0ZW50X2l0ZW0KLQkJCSAqLwotCQkJaWYgKG9wLT5kZWwgPT0gMikgewotCQkJCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIG9wLT5ieXRlbnIsCi0JCQkJCSAgICAgIG9wLT5ieXRlbnIgKyBvcC0+bnVtX2J5dGVzIC0gMSwKLQkJCQkJICAgICAgR0ZQX05PRlMpOwotCQkJCWN1ciA9IGN1ci0+bmV4dDsKLQkJCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JCQkJa2ZyZWUob3ApOwotCQkJCWlmIChjdXIgIT0gaW5zZXJ0X2xpc3QpCi0JCQkJCW9wID0gbGlzdF9lbnRyeShjdXIsCi0JCQkJCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AsCi0JCQkJCQlsaXN0KTsKLQkJCX0KLQkJfQotCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKLQkJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKLQotCQkvKgotCQkgKiBPayBiYWNrcmVmJ3MgYW5kIGl0ZW1zIHVzdWFsbHkgZ28gcmlnaHQgbmV4dCB0byBlYWNob3RoZXIsCi0JCSAqIGJ1dCBpZiB3ZSBjb3VsZCBvbmx5IGluc2VydCAxIGl0ZW0gdGhhdCBtZWFucyB0aGF0IHdlCi0JCSAqIGluc2VydGVkIG9uIHRoZSBlbmQgb2YgYSBsZWFmLCBhbmQgd2UgaGF2ZSBubyBpZGVhIHdoYXQgbWF5Ci0JCSAqIGJlIG9uIHRoZSBuZXh0IGxlYWYgc28gd2UganVzdCBwbGF5IGl0IHNhZmUuICBJbiBvcmRlciB0bwotCQkgKiB0cnkgYW5kIGhlbHAgdGhpcyBjYXNlIHdlIGluc2VydCB0aGUgbGFzdCB0aGluZyBvbiBvdXIKLQkJICogaW5zZXJ0IGxpc3Qgc28gaG9wZWZ1bGx5IGl0IHdpbGwgZW5kIHVwIGJlaW5nIHRoZSBsYXN0Ci0JCSAqIHRoaW5nIG9uIHRoZSBsZWFmIGFuZCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZSBiZWZvcmUgaXQsCi0JCSAqIHdoaWNoIHdpbGwgbGV0IHVzIGluc2VydCBhIHdob2xlIGJ1bmNoIG9mIGl0ZW1zIGF0IHRoZSBzYW1lCi0JCSAqIHRpbWUuCi0JCSAqLwotCQlpZiAocmV0ID09IDEgJiYgIWxhc3QgJiYgKGkgKyByZXQgPCB0b3RhbCkpIHsKLQkJCS8qCi0JCQkgKiBsYXN0OiB3aGVyZSB3ZSB3aWxsIHBpY2sgdXAgdGhlIG5leHQgdGltZSBhcm91bmQKLQkJCSAqIGk6IG91ciBjdXJyZW50IGtleSB0byBpbnNlcnQsIHdpbGwgYmUgdG90YWwgLSAxCi0JCQkgKiBjdXI6IHRoZSBjdXJyZW50IG9wIHdlIGFyZSBzY3Jld2luZyB3aXRoCi0JCQkgKiBvcDogZHVoCi0JCQkgKi8KLQkJCWxhc3QgPSBpICsgcmV0OwotCQkJaSA9IHRvdGFsIC0gMTsKLQkJCWN1ciA9IGluc2VydF9saXN0LT5wcmV2OwotCQkJb3AgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wLCBsaXN0KTsKLQkJfSBlbHNlIGlmIChsYXN0KSB7Ci0JCQkvKgotCQkJICogb2sgd2Ugc3VjY2Vzc2Z1bGx5IGluc2VydGVkIHRoZSBsYXN0IGl0ZW0gb24gdGhlCi0JCQkgKiBsaXN0LCBsZXRzIHJlc2V0IGV2ZXJ5dGhpbmcKLQkJCSAqCi0JCQkgKiBpOiBvdXIgY3VycmVudCBrZXkgdG8gaW5zZXJ0LCBzbyB3aGVyZSB3ZSBsZWZ0IG9mZgotCQkJICogICAgbGFzdCB0aW1lCi0JCQkgKiBsYXN0OiBkb25lIHdpdGggdGhpcwotCQkJICogY3VyOiB0aGUgb3Agd2UgYXJlIG1lc3Npbmcgd2l0aAotCQkJICogb3A6IGR1aAotCQkJICogdG90YWw6IHNpbmNlIHdlIGluc2VydGVkIHRoZSBsYXN0IGtleSwgd2UgbmVlZCB0bwotCQkJICogICAgICAgIGRlY3JlbWVudCB0b3RhbCBzbyB3ZSBkb250IG92ZXJmbG93Ci0JCQkgKi8KLQkJCWkgPSBsYXN0OwotCQkJbGFzdCA9IDA7Ci0JCQl0b3RhbC0tOwotCQkJaWYgKGkgPCB0b3RhbCkgewotCQkJCWN1ciA9IGluc2VydF9saXN0LT5uZXh0OwotCQkJCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwKLQkJCQkJCWxpc3QpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaSArPSByZXQ7Ci0JCX0KLQotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0JcmV0ID0gMDsKLQlrZnJlZShrZXlzKTsKLQlrZnJlZShkYXRhX3NpemUpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBub2lubGluZSBpbnQgaW5zZXJ0X2V4dGVudF9iYWNrcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAogCQkJCQkgIHU2NCBieXRlbnIsIHU2NCBwYXJlbnQsCiAJCQkJCSAgdTY0IHJlZl9yb290LCB1NjQgcmVmX2dlbmVyYXRpb24sCi0JCQkJCSAgdTY0IG93bmVyX29iamVjdGlkKQorCQkJCQkgIHU2NCBvd25lcl9vYmplY3RpZCwKKwkJCQkJICBpbnQgcmVmc190b19hZGQpCiB7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CkBAIC04MjksOSArNTg1LDEwIEBACiAJCWJ0cmZzX3NldF9yZWZfcm9vdChsZWFmLCByZWYsIHJlZl9yb290KTsKIAkJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKGxlYWYsIHJlZiwgcmVmX2dlbmVyYXRpb24pOwogCQlidHJmc19zZXRfcmVmX29iamVjdGlkKGxlYWYsIHJlZiwgb3duZXJfb2JqZWN0aWQpOwotCQlidHJmc19zZXRfcmVmX251bV9yZWZzKGxlYWYsIHJlZiwgMSk7CisJCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCByZWZzX3RvX2FkZCk7CiAJfSBlbHNlIGlmIChyZXQgPT0gLUVFWElTVCkgewogCQl1NjQgZXhpc3Rpbmdfb3duZXI7CisKIAkJQlVHX09OKG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCk7CiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAkJcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCkBAIC04NDUsNyArNjAyLDcgQEAKIAogCQludW1fcmVmcyA9IGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpOwogCQlCVUdfT04obnVtX3JlZnMgPT0gMCk7Ci0JCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCBudW1fcmVmcyArIDEpOworCQlidHJmc19zZXRfcmVmX251bV9yZWZzKGxlYWYsIHJlZiwgbnVtX3JlZnMgKyByZWZzX3RvX2FkZCk7CiAKIAkJZXhpc3Rpbmdfb3duZXIgPSBidHJmc19yZWZfb2JqZWN0aWQobGVhZiwgcmVmKTsKIAkJaWYgKGV4aXN0aW5nX293bmVyICE9IG93bmVyX29iamVjdGlkICYmCkBAIC04NTcsNiArNjE0LDcgQEAKIAl9IGVsc2UgewogCQlnb3RvIG91dDsKIAl9CisJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwogb3V0OgogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKQEAgLTg2NSw3ICs2MjMsOCBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHJlbW92ZV9leHRlbnRfYmFja3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCkKKwkJCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCQkJICBpbnQgcmVmc190b19kcm9wKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCXN0cnVjdCBidHJmc19leHRlbnRfcmVmICpyZWY7CkBAIC04NzUsOCArNjM0LDggQEAKIAlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKIAludW1fcmVmcyA9IGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpOwotCUJVR19PTihudW1fcmVmcyA9PSAwKTsKLQludW1fcmVmcyAtPSAxOworCUJVR19PTihudW1fcmVmcyA8IHJlZnNfdG9fZHJvcCk7CisJbnVtX3JlZnMgLT0gcmVmc190b19kcm9wOwogCWlmIChudW1fcmVmcyA9PSAwKSB7CiAJCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKIAl9IGVsc2UgewpAQCAtOTI3LDMzMiArNjg2LDI4IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIG5vaW5saW5lIGludCBmcmVlX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwKLQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpCi17Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlzdHJ1Y3QgYnRyZnNfa2V5IGtleSwgZm91bmRfa2V5OwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKLQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKm9wOwotCXN0cnVjdCBidHJmc19leHRlbnRfaXRlbSAqZWk7Ci0JaW50IHJldCwgbnVtX3RvX2RlbCwgZXh0ZW50X3Nsb3QgPSAwLCBmb3VuZF9leHRlbnQgPSAwOwotCXUzMiByZWZzOwotCXU2NCBieXRlc19mcmVlZCA9IDA7Ci0KLQlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcGF0aC0+cmVhZGEgPSAxOwotCi1zZWFyY2g6Ci0JLyogc2VhcmNoIGZvciB0aGUgYmFja3JlZiBmb3IgdGhlIGN1cnJlbnQgcmVmIHdlIHdhbnQgdG8gZGVsZXRlICovCi0JY3VyID0gZGVsX2xpc3QtPm5leHQ7Ci0Jb3AgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wLCBsaXN0KTsKLQlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLCBvcC0+Ynl0ZW5yLAotCQkJCSAgICBvcC0+b3JpZ19wYXJlbnQsCi0JCQkJICAgIGV4dGVudF9yb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkgICAgb3AtPm9yaWdfZ2VuZXJhdGlvbiwgb3AtPmxldmVsLCAxKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgdW5hYmxlIHRvIGZpbmQgYmFja3JlZiBieXRlIG5yICVsbHUgIgotCQkgICAgICAgInJvb3QgJWxsdSBnZW4gJWxsdSBvd25lciAldVxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb3AtPmJ5dGVuciwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXh0ZW50X3Jvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+b3JpZ19nZW5lcmF0aW9uLCBvcC0+bGV2ZWwpOwotCQlidHJmc19wcmludF9sZWFmKGV4dGVudF9yb290LCBwYXRoLT5ub2Rlc1swXSk7Ci0JCVdBUk5fT04oMSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWV4dGVudF9zbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JbnVtX3RvX2RlbCA9IDE7Ci0JZm91bmRfZXh0ZW50ID0gMDsKLQotCS8qCi0JICogaWYgd2UgYXJlbid0IHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsZWFmIHdlIGNhbiBtb3ZlIGJhY2sgb25lIGFuZCBzZWUKLQkgKiBpZiBvdXIgcmVmIGlzIHJpZ2h0IG5leHQgdG8gb3VyIGV4dGVudCBpdGVtCi0JICovCi0JaWYgKGxpa2VseShleHRlbnRfc2xvdCkpIHsKLQkJZXh0ZW50X3Nsb3QtLTsKLQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAmZm91bmRfa2V5LAotCQkJCSAgICAgIGV4dGVudF9zbG90KTsKLQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCA9PSBvcC0+Ynl0ZW5yICYmCi0JCSAgICBmb3VuZF9rZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfSVRFTV9LRVkgJiYKLQkJICAgIGZvdW5kX2tleS5vZmZzZXQgPT0gb3AtPm51bV9ieXRlcykgewotCQkJbnVtX3RvX2RlbCsrOwotCQkJZm91bmRfZXh0ZW50ID0gMTsKLQkJfQotCX0KLQotCS8qCi0JICogaWYgd2UgZGlkbid0IGZpbmQgdGhlIGV4dGVudCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgYmFja3JlZiBhbmQgdGhlbgotCSAqIHNlYXJjaCBmb3IgdGhlIGV4dGVudCBpdGVtIGtleSBzbyB3ZSBjYW4gdXBkYXRlIGl0cyByZWYgY291bnQKLQkgKi8KLQlpZiAoIWZvdW5kX2V4dGVudCkgewotCQlrZXkub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQkJa2V5Lm9mZnNldCA9IG9wLT5udW1fYnl0ZXM7Ci0KLQkJcmV0ID0gcmVtb3ZlX2V4dGVudF9iYWNrcmVmKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCUJVR19PTihyZXQpOwotCQlidHJmc19yZWxlYXNlX3BhdGgoZXh0ZW50X3Jvb3QsIHBhdGgpOwotCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsIC0xLCAxKTsKLQkJQlVHX09OKHJldCk7Ci0JCWV4dGVudF9zbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JfQotCi0JLyogdGhpcyBpcyB3aGVyZSB3ZSB1cGRhdGUgdGhlIHJlZiBjb3VudCBmb3IgdGhlIGV4dGVudCAqLwotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIGV4dGVudF9zbG90LCBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwotCXJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSk7Ci0JQlVHX09OKHJlZnMgPT0gMCk7Ci0JcmVmcy0tOwotCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgcmVmcyk7Ci0KLQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKLQotCS8qCi0JICogVGhpcyBleHRlbnQgbmVlZHMgZGVsZXRpbmcuICBUaGUgcmVhc29uIGN1cl9zbG90IGlzIGV4dGVudF9zbG90ICsKLQkgKiBudW1fdG9fZGVsIGlzIGJlY2F1c2UgZXh0ZW50X3Nsb3QgcG9pbnRzIHRvIHRoZSBzbG90IHdoZXJlIHRoZSBleHRlbnQKLQkgKiBpcywgYW5kIGlmIHRoZSBiYWNrcmVmIHdhcyBub3QgcmlnaHQgbmV4dCB0byB0aGUgZXh0ZW50IHdlIHdpbGwgYmUKLQkgKiBkZWxldGluZyBhdCBsZWFzdCAxIGl0ZW0sIGFuZCB3aWxsIHdhbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGF0IHRoZQotCSAqIHNsb3QgZGlyZWN0bHkgbmV4dCB0byBleHRlbnRfc2xvdC4gIEhvd2V2ZXIgaWYgd2UgZGlkIGZpbmQgdGhlCi0JICogYmFja3JlZiBuZXh0IHRvIHRoZSBleHRlbnQgaXRlbSB0aGVtIHdlIHdpbGwgYmUgZGVsZXRpbmcgYXQgbGVhc3QgMgotCSAqIGl0ZW1zIGFuZCB3aWxsIHdhbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGRpcmVjdGx5IGFmdGVyIHRoZSByZWYgc2xvdAotCSAqLwotCWlmICghcmVmcykgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuLCAqZW5kOwotCQlpbnQgY3VyX3Nsb3QgPSBleHRlbnRfc2xvdCtudW1fdG9fZGVsOwotCQl1NjQgc3VwZXJfdXNlZDsKLQkJdTY0IHJvb3RfdXNlZDsKLQotCQlwYXRoLT5zbG90c1swXSA9IGV4dGVudF9zbG90OwotCQlieXRlc19mcmVlZCA9IG9wLT5udW1fYnl0ZXM7Ci0KLQkJbXV0ZXhfbG9jaygmaW5mby0+cGlubmVkX211dGV4KTsKLQkJcmV0ID0gcGluX2Rvd25fYnl0ZXModHJhbnMsIGV4dGVudF9yb290LCBvcC0+Ynl0ZW5yLAotCQkJCSAgICAgb3AtPm51bV9ieXRlcywgb3AtPmxldmVsID49Ci0JCQkJICAgICBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKTsKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5waW5uZWRfbXV0ZXgpOwotCQlCVUdfT04ocmV0IDwgMCk7Ci0JCW9wLT5kZWwgPSByZXQ7Ci0KLQkJLyoKLQkJICogd2UgbmVlZCB0byBzZWUgaWYgd2UgY2FuIGRlbGV0ZSBtdWx0aXBsZSB0aGluZ3MgYXQgb25jZSwgc28KLQkJICogc3RhcnQgbG9vcGluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGV4dGVudHMgd2UgYXJlIHdhbnRpbmcgdG8KLQkJICogZGVsZXRlIGFuZCBzZWUgaWYgdGhlaXIgZXh0ZW50L2JhY2tyZWYncyBhcmUgcmlnaHQgbmV4dCB0bwotCQkgKiBlYWNob3RoZXIgYW5kIHRoZSBleHRlbnRzIG9ubHkgaGF2ZSAxIHJlZgotCQkgKi8KLQkJZm9yIChwb3MgPSBjdXItPm5leHQ7IHBvcyAhPSBkZWxfbGlzdDsgcG9zID0gcG9zLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKnRtcDsKLQotCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLQkJCS8qIHdlIG9ubHkgd2FudCB0byBkZWxldGUgZXh0ZW50K3JlZiBhdCB0aGlzIHN0YWdlICovCi0JCQlpZiAoY3VyX3Nsb3QgPj0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZikgLSAxKQotCQkJCWJyZWFrOwotCi0JCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgY3VyX3Nsb3QpOwotCQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSB0bXAtPmJ5dGVuciB8fAotCQkJICAgIGZvdW5kX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSB8fAotCQkJICAgIGZvdW5kX2tleS5vZmZzZXQgIT0gdG1wLT5udW1fYnl0ZXMpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIGV4dGVudCBvbmx5IGhhcyBvbmUgcmVmICovCi0JCQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIGN1cl9zbG90LAotCQkJCQkgICAgc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtKTsKLQkJCWlmIChidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSkgIT0gMSkKLQkJCQlicmVhazsKLQotCQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIGN1cl9zbG90KzEpOwotCQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSB0bXAtPmJ5dGVuciB8fAotCQkJICAgIGZvdW5kX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9SRUZfS0VZIHx8Ci0JCQkgICAgZm91bmRfa2V5Lm9mZnNldCAhPSB0bXAtPm9yaWdfcGFyZW50KQotCQkJCWJyZWFrOwotCi0JCQkvKgotCQkJICogdGhlIHJlZiBpcyByaWdodCBuZXh0IHRvIHRoZSBleHRlbnQsIHdlIGNhbiBzZXQgdGhlCi0JCQkgKiByZWYgY291bnQgdG8gMCBzaW5jZSB3ZSB3aWxsIGRlbGV0ZSB0aGVtIGJvdGggbm93Ci0JCQkgKi8KLQkJCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgMCk7Ci0KLQkJCS8qIHBpbiBkb3duIHRoZSBieXRlcyBmb3IgdGhpcyBleHRlbnQgKi8KLQkJCW11dGV4X2xvY2soJmluZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlyZXQgPSBwaW5fZG93bl9ieXRlcyh0cmFucywgZXh0ZW50X3Jvb3QsIHRtcC0+Ynl0ZW5yLAotCQkJCQkgICAgIHRtcC0+bnVtX2J5dGVzLCB0bXAtPmxldmVsID49Ci0JCQkJCSAgICAgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCk7Ci0JCQltdXRleF91bmxvY2soJmluZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlCVUdfT04ocmV0IDwgMCk7Ci0KLQkJCS8qCi0JCQkgKiB1c2UgdGhlIGRlbCBmaWVsZCB0byB0ZWxsIGlmIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kCi0JCQkgKiBmcmVlIHVwIHRoZSBleHRlbnQgd2hlbiB3ZSBkZWxldGUgdGhlIGl0ZW0gb3Igbm90LgotCQkJICovCi0JCQl0bXAtPmRlbCA9IHJldDsKLQkJCWJ5dGVzX2ZyZWVkICs9IHRtcC0+bnVtX2J5dGVzOwotCi0JCQludW1fdG9fZGVsICs9IDI7Ci0JCQljdXJfc2xvdCArPSAyOwotCQl9Ci0JCWVuZCA9IHBvczsKLQotCQkvKiB1cGRhdGUgdGhlIGZyZWUgc3BhY2UgY291bnRlcnMgKi8KLQkJc3Bpbl9sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQkJc3VwZXJfdXNlZCA9IGJ0cmZzX3N1cGVyX2J5dGVzX3VzZWQoJmluZm8tPnN1cGVyX2NvcHkpOwotCQlidHJmc19zZXRfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSwKLQkJCQkJICAgc3VwZXJfdXNlZCAtIGJ5dGVzX2ZyZWVkKTsKLQotCQlyb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJmV4dGVudF9yb290LT5yb290X2l0ZW0pOwotCQlidHJmc19zZXRfcm9vdF91c2VkKCZleHRlbnRfcm9vdC0+cm9vdF9pdGVtLAotCQkJCSAgICByb290X3VzZWQgLSBieXRlc19mcmVlZCk7Ci0JCXNwaW5fdW5sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQotCQkvKiBkZWxldGUgdGhlIGl0ZW1zICovCi0JCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsCi0JCQkJICAgICAgcGF0aC0+c2xvdHNbMF0sIG51bV90b19kZWwpOwotCQlCVUdfT04ocmV0KTsKLQotCQkvKgotCQkgKiBsb29wIHRocm91Z2ggdGhlIGV4dGVudHMgd2UgZGVsZXRlZCBhbmQgZG8gdGhlIGNsZWFudXAgd29yawotCQkgKiBvbiB0aGVtCi0JCSAqLwotCQlmb3IgKHBvcyA9IGN1ciwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IGVuZDsKLQkJICAgICBwb3MgPSBuLCBuID0gcG9zLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKnRtcDsKLQkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AsIGxpc3QpOwotCi0JCQkvKgotCQkJICogcmVtZW1iZXIgdG1wLT5kZWwgdGVsbHMgdXMgd2V0aGVyIG9yIG5vdCB3ZSBwaW5uZWQKLQkJCSAqIGRvd24gdGhlIGV4dGVudAotCQkJICovCi0JCQlyZXQgPSB1cGRhdGVfYmxvY2tfZ3JvdXAodHJhbnMsIGV4dGVudF9yb290LAotCQkJCQkJIHRtcC0+Ynl0ZW5yLCB0bXAtPm51bV9ieXRlcywgMCwKLQkJCQkJCSB0bXAtPmRlbCk7Ci0JCQlCVUdfT04ocmV0KTsKLQotCQkJbGlzdF9kZWxfaW5pdCgmdG1wLT5saXN0KTsKLQkJCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIHRtcC0+Ynl0ZW5yLAotCQkJCSAgICAgIHRtcC0+Ynl0ZW5yICsgdG1wLT5udW1fYnl0ZXMgLSAxLAotCQkJCSAgICAgIEdGUF9OT0ZTKTsKLQkJCWtmcmVlKHRtcCk7Ci0JCX0KLQl9IGVsc2UgaWYgKHJlZnMgJiYgZm91bmRfZXh0ZW50KSB7Ci0JCS8qCi0JCSAqIHRoZSByZWYgYW5kIGV4dGVudCB3ZXJlIHJpZ2h0IG5leHQgdG8gZWFjaG90aGVyLCBidXQgdGhlCi0JCSAqIGV4dGVudCBzdGlsbCBoYXMgYSByZWYsIHNvIGp1c3QgZnJlZSB0aGUgYmFja3JlZiBhbmQga2VlcAotCQkgKiBnb2luZwotCQkgKi8KLQkJcmV0ID0gcmVtb3ZlX2V4dGVudF9iYWNrcmVmKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCUJVR19PTihyZXQpOwotCi0JCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKLQkJdW5sb2NrX2V4dGVudCgmaW5mby0+ZXh0ZW50X2lucywgb3AtPmJ5dGVuciwKLQkJCSAgICAgIG9wLT5ieXRlbnIgKyBvcC0+bnVtX2J5dGVzIC0gMSwgR0ZQX05PRlMpOwotCQlrZnJlZShvcCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogdGhlIGV4dGVudCBoYXMgbXVsdGlwbGUgcmVmcyBhbmQgdGhlIGJhY2tyZWYgd2Ugd2VyZSBsb29raW5nCi0JCSAqIGZvciB3YXMgbm90IHJpZ2h0IG5leHQgdG8gaXQsIHNvIGp1c3QgdW5sb2NrIGFuZCBnbyBuZXh0LAotCQkgKiB3ZSdyZSBnb29kIHRvIGdvCi0JCSAqLwotCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIG9wLT5ieXRlbnIsCi0JCQkgICAgICBvcC0+Ynl0ZW5yICsgb3AtPm51bV9ieXRlcyAtIDEsIEdGUF9OT0ZTKTsKLQkJa2ZyZWUob3ApOwotCX0KLQotCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JaWYgKCFsaXN0X2VtcHR5KGRlbF9saXN0KSkKLQkJZ290byBzZWFyY2g7Ci0KLW91dDoKLQlidHJmc19mcmVlX3BhdGgocGF0aCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2J0cmZzX3VwZGF0ZV9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCisJCQkJICAgICB1NjQgbnVtX2J5dGVzLAogCQkJCSAgICAgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJCSAgICAgdTY0IG9yaWdfcm9vdCwgdTY0IHJlZl9yb290LAogCQkJCSAgICAgdTY0IG9yaWdfZ2VuZXJhdGlvbiwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJCSAgICAgdTY0IG93bmVyX29iamVjdGlkKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7Ci0Jc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CisJaW50IHBpbiA9IG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRDsKIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KSB7Ci0JCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqZXh0ZW50X29wOwotCQl1NjQgbnVtX2J5dGVzOwotCi0JCUJVR19PTihvd25lcl9vYmplY3RpZCA+PSBCVFJGU19NQVhfTEVWRUwpOwotCQludW1fYnl0ZXMgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIChpbnQpb3duZXJfb2JqZWN0aWQpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJaWYgKHRlc3RfcmFuZ2VfYml0KCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLCBieXRlbnIsCi0JCQkJYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwgRVhURU5UX1dSSVRFQkFDSywgMCkpIHsKLQkJCXU2NCBwcml2OwotCQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCQlieXRlbnIsICZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJCSh1bnNpZ25lZCBsb25nKXByaXY7Ci0JCQlCVUdfT04oZXh0ZW50X29wLT5wYXJlbnQgIT0gb3JpZ19wYXJlbnQpOwotCQkJQlVHX09OKGV4dGVudF9vcC0+Z2VuZXJhdGlvbiAhPSBvcmlnX2dlbmVyYXRpb24pOwotCi0JCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQl9IGVsc2UgewotCQkJZXh0ZW50X29wID0ga21hbGxvYyhzaXplb2YoKmV4dGVudF9vcCksIEdGUF9OT0ZTKTsKLQkJCUJVR19PTighZXh0ZW50X29wKTsKLQotCQkJZXh0ZW50X29wLT50eXBlID0gUEVORElOR19CQUNLUkVGX1VQREFURTsKLQkJCWV4dGVudF9vcC0+Ynl0ZW5yID0gYnl0ZW5yOwotCQkJZXh0ZW50X29wLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7Ci0JCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJCWV4dGVudF9vcC0+b3JpZ19wYXJlbnQgPSBvcmlnX3BhcmVudDsKLQkJCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQkJZXh0ZW50X29wLT5vcmlnX2dlbmVyYXRpb24gPSBvcmlnX2dlbmVyYXRpb247Ci0JCQlleHRlbnRfb3AtPmxldmVsID0gKGludClvd25lcl9vYmplY3RpZDsKLQkJCUlOSVRfTElTVF9IRUFEKCZleHRlbnRfb3AtPmxpc3QpOwotCQkJZXh0ZW50X29wLT5kZWwgPSAwOwotCi0JCQlzZXRfZXh0ZW50X2JpdHMoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCWJ5dGVuciwgYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwKLQkJCQkJRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQkJc2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCSAgYnl0ZW5yLCAodW5zaWduZWQgbG9uZylleHRlbnRfb3ApOwotCQl9Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JaWYgKCFwYXRoKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAotCQkJCSAgICBieXRlbnIsIG9yaWdfcGFyZW50LCBvcmlnX3Jvb3QsCi0JCQkJICAgIG9yaWdfZ2VuZXJhdGlvbiwgb3duZXJfb2JqZWN0aWQsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IGluc2VydF9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsIGJ5dGVuciwKLQkJCQkgICAgcGFyZW50LCByZWZfcm9vdCwgcmVmX2dlbmVyYXRpb24sCi0JCQkJICAgIG93bmVyX29iamVjdGlkKTsKKwlyZXQgPSBidHJmc191cGRhdGVfZGVsYXllZF9yZWYodHJhbnMsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgICBvcmlnX3BhcmVudCwgcGFyZW50LCBvcmlnX3Jvb3QsCisJCQkJICAgICAgIHJlZl9yb290LCBvcmlnX2dlbmVyYXRpb24sCisJCQkJICAgICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lcl9vYmplY3RpZCwgcGluKTsKIAlCVUdfT04ocmV0KTsKLQlmaW5pc2hfY3VycmVudF9pbnNlcnQodHJhbnMsIGV4dGVudF9yb290LCAwKTsKLQlkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci1vdXQ6Ci0JYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKIGludCBidHJmc191cGRhdGVfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgb3JpZ19wYXJlbnQsIHU2NCBwYXJlbnQsCisJCQkgICAgdTY0IG51bV9ieXRlcywgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJICAgIHU2NCByZWZfcm9vdCwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJICAgIHU2NCBvd25lcl9vYmplY3RpZCkKIHsKQEAgLTEyNjAsMjAgKzcxNSwzNiBAQAogCWlmIChyZWZfcm9vdCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgogCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAwOwotCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgb3JpZ19wYXJlbnQsCi0JCQkJCXBhcmVudCwgcmVmX3Jvb3QsIHJlZl9yb290LAotCQkJCQlyZWZfZ2VuZXJhdGlvbiwgcmVmX2dlbmVyYXRpb24sCi0JCQkJCW93bmVyX29iamVjdGlkKTsKKworCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCQlvcmlnX3BhcmVudCwgcGFyZW50LCByZWZfcm9vdCwKKwkJCQkJcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAorCQkJCQlyZWZfZ2VuZXJhdGlvbiwgb3duZXJfb2JqZWN0aWQpOwogCXJldHVybiByZXQ7CiB9Ci0KIHN0YXRpYyBpbnQgX19idHJmc19pbmNfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJCSAgdTY0IG51bV9ieXRlcywKIAkJCQkgIHU2NCBvcmlnX3BhcmVudCwgdTY0IHBhcmVudCwKIAkJCQkgIHU2NCBvcmlnX3Jvb3QsIHU2NCByZWZfcm9vdCwKIAkJCQkgIHU2NCBvcmlnX2dlbmVyYXRpb24sIHU2NCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkgIHU2NCBvd25lcl9vYmplY3RpZCkKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gYnRyZnNfYWRkX2RlbGF5ZWRfcmVmKHRyYW5zLCBieXRlbnIsIG51bV9ieXRlcywgcGFyZW50LCByZWZfcm9vdCwKKwkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCSAgICBCVFJGU19BRERfREVMQVlFRF9SRUYsIDApOworCUJVR19PTihyZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IGFkZF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKKwkJCSAgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwgdTY0IHJlZl9yb290LAorCQkJICB1NjQgcmVmX2dlbmVyYXRpb24sIHU2NCBvd25lcl9vYmplY3RpZCwKKwkJCSAgaW50IHJlZnNfdG9fYWRkKQorewogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CkBAIC0xMjg2LDE3ICs3NTcsMjQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXRoLT5yZWFkYSA9IDE7CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCWtleS5vYmplY3RpZCA9IGJ5dGVucjsKIAlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQlrZXkub2Zmc2V0ID0gKHU2NCktMTsKKwlrZXkub2Zmc2V0ID0gbnVtX2J5dGVzOwogCi0JcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QodHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LCAma2V5LCBwYXRoLAotCQkJCTAsIDEpOwotCWlmIChyZXQgPCAwKQorCS8qIGZpcnN0IGZpbmQgdGhlIGV4dGVudCBpdGVtIGFuZCB1cGRhdGUgaXRzIHJlZmVyZW5jZSBjb3VudCAqLworCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgJmtleSwKKwkJCQlwYXRoLCAwLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKIAkJcmV0dXJuIHJldDsKLQlCVUdfT04ocmV0ID09IDAgfHwgcGF0aC0+c2xvdHNbMF0gPT0gMCk7CisJfQogCi0JcGF0aC0+c2xvdHNbMF0tLTsKKwlpZiAocmV0ID4gMCkgeworCQlXQVJOX09OKDEpOworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiAtRUlPOworCX0KIAlsID0gcGF0aC0+bm9kZXNbMF07CiAKIAlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgcGF0aC0+c2xvdHNbMF0pOwpAQCAtMTMxMCwyMSArNzg4LDI0IEBACiAJQlVHX09OKGtleS50eXBlICE9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CiAKIAlpdGVtID0gYnRyZnNfaXRlbV9wdHIobCwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7CisKIAlyZWZzID0gYnRyZnNfZXh0ZW50X3JlZnMobCwgaXRlbSk7Ci0JYnRyZnNfc2V0X2V4dGVudF9yZWZzKGwsIGl0ZW0sIHJlZnMgKyAxKTsKKwlidHJmc19zZXRfZXh0ZW50X3JlZnMobCwgaXRlbSwgcmVmcyArIHJlZnNfdG9fYWRkKTsKKwlidHJmc191bmxvY2tfdXBfc2FmZShwYXRoLCAxKTsKKwogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHBhdGgtPm5vZGVzWzBdKTsKIAogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgcGF0aCk7CiAKIAlwYXRoLT5yZWFkYSA9IDE7CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOworCisJLyogbm93IGluc2VydCB0aGUgYWN0dWFsIGJhY2tyZWYgKi8KIAlyZXQgPSBpbnNlcnRfZXh0ZW50X2JhY2tyZWYodHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAogCQkJCSAgICBwYXRoLCBieXRlbnIsIHBhcmVudCwKIAkJCQkgICAgcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAotCQkJCSAgICBvd25lcl9vYmplY3RpZCk7CisJCQkJICAgIG93bmVyX29iamVjdGlkLCByZWZzX3RvX2FkZCk7CiAJQlVHX09OKHJldCk7Ci0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JZGVsX3BlbmRpbmdfZXh0ZW50cyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIDApOwotCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiAwOwogfQpAQCAtMTMzOSw2OCArODIwLDI3OCBAQAogCWlmIChyZWZfcm9vdCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgogCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAwOwotCXJldCA9IF9fYnRyZnNfaW5jX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgMCwgcGFyZW50LAorCisJcmV0ID0gX19idHJmc19pbmNfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDAsIHBhcmVudCwKIAkJCQkgICAgIDAsIHJlZl9yb290LCAwLCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkgICAgIG93bmVyX29iamVjdGlkKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYnRyZnNfZXh0ZW50X3Bvc3Rfb3Aoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitzdGF0aWMgaW50IGRyb3BfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqbm9kZSkKIHsKLQl1NjQgc3RhcnQ7Ci0JdTY0IGVuZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYobm9kZSk7CisKKwlCVUdfT04obm9kZS0+cmVmX21vZCA9PSAwKTsKKwlyZXQgPSBfX2J0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBub2RlLT5ieXRlbnIsIG5vZGUtPm51bV9ieXRlcywKKwkJCQkgIG5vZGUtPnBhcmVudCwgcmVmLT5yb290LCByZWYtPmdlbmVyYXRpb24sCisJCQkJICByZWYtPm93bmVyX29iamVjdGlkLCByZWYtPnBpbiwgbm9kZS0+cmVmX21vZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHJvY2VzcyBhIHNpbmdsZSBkZWxheWVkIHJlZiBlbnRyeSAqLworc3RhdGljIG5vaW5saW5lIGludCBydW5fb25lX2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKm5vZGUsCisJCQkJCWludCBpbnNlcnRfcmVzZXJ2ZWQpCit7CiAJaW50IHJldDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKIAotCXdoaWxlKDEpIHsKLQkJZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMSk7Ci0JCWRlbF9wZW5kaW5nX2V4dGVudHModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LCAxKTsKKwlpZiAobm9kZS0+cGFyZW50ID09ICh1NjQpLTEpIHsKKwkJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQ7CisJCS8qCisJCSAqIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBjaGFpbiBhbmQgd2Ugd2VyZSBzdXBwb3NlZAorCQkgKiB0byBpbnNlcnQgdGhpcyBleHRlbnQgaW50byB0aGUgdHJlZS4gIEJ1dCwgaXQgZ290CisJCSAqIGRlbGV0ZWQgYmVmb3JlIHdlIGV2ZXIgbmVlZGVkIHRvIGluc2VydCBpdCwgc28gYWxsCisJCSAqIHdlIGhhdmUgdG8gZG8gaXMgY2xlYW4gdXAgdGhlIGFjY291bnRpbmcKKwkJICovCisJCWlmIChpbnNlcnRfcmVzZXJ2ZWQpIHsKKwkJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkJCW5vZGUtPm51bV9ieXRlcywgMCk7CisJCX0KKwkJaGVhZCA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19oZWFkKG5vZGUpOworCQltdXRleF91bmxvY2soJmhlYWQtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCS8qIGlzIHRoZXJlIG1vcmUgd29yayB0byBkbz8gKi8KLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZyb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbCwKLQkJCQkJICAgIDAsICZzdGFydCwgJmVuZCwgRVhURU5UX1dSSVRFQkFDSyk7Ci0JCWlmICghcmV0KQotCQkJY29udGludWU7Ci0JCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCgmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2lucywKLQkJCQkJICAgIDAsICZzdGFydCwgJmVuZCwgRVhURU5UX1dSSVRFQkFDSyk7Ci0JCWlmICghcmV0KQotCQkJY29udGludWU7Ci0JCWJyZWFrOworCXJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYobm9kZSk7CisJaWYgKHJlZi0+YWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX1JFRikgeworCQlpZiAoaW5zZXJ0X3Jlc2VydmVkKSB7CisJCQlzdHJ1Y3QgYnRyZnNfa2V5IGluczsKKworCQkJaW5zLm9iamVjdGlkID0gbm9kZS0+Ynl0ZW5yOworCQkJaW5zLm9mZnNldCA9IG5vZGUtPm51bV9ieXRlczsKKwkJCWlucy50eXBlID0gQlRSRlNfRVhURU5UX0lURU1fS0VZOworCisJCQkvKiByZWNvcmQgdGhlIGZ1bGwgZXh0ZW50IGFsbG9jYXRpb24gKi8KKwkJCXJldCA9IF9fYnRyZnNfYWxsb2NfcmVzZXJ2ZWRfZXh0ZW50KHRyYW5zLCByb290LAorCQkJCQlub2RlLT5wYXJlbnQsIHJlZi0+cm9vdCwKKwkJCQkJcmVmLT5nZW5lcmF0aW9uLCByZWYtPm93bmVyX29iamVjdGlkLAorCQkJCQkmaW5zLCBub2RlLT5yZWZfbW9kKTsKKwkJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkJCW5vZGUtPm51bV9ieXRlcywgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBqdXN0IGFkZCBvbmUgYmFja3JlZiAqLworCQkJcmV0ID0gYWRkX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkgICAgIG5vZGUtPm51bV9ieXRlcywKKwkJCQkgICAgIG5vZGUtPnBhcmVudCwgcmVmLT5yb290LCByZWYtPmdlbmVyYXRpb24sCisJCQkJICAgICByZWYtPm93bmVyX29iamVjdGlkLCBub2RlLT5yZWZfbW9kKTsKKwkJfQorCQlCVUdfT04ocmV0KTsKKwl9IGVsc2UgaWYgKHJlZi0+YWN0aW9uID09IEJUUkZTX0RST1BfREVMQVlFRF9SRUYpIHsKKwkJV0FSTl9PTihpbnNlcnRfcmVzZXJ2ZWQpOworCQlyZXQgPSBkcm9wX2RlbGF5ZWRfcmVmKHRyYW5zLCByb290LCBub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLWludCBidHJmc19sb29rdXBfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgbnVtX2J5dGVzLCB1MzIgKnJlZnMpCitzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKgorc2VsZWN0X2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkKQogewotCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwotCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX2tleSBrZXk7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmw7Ci0Jc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICppdGVtOwotCi0JV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKLQlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCXBhdGgtPnJlYWRhID0gMTsKLQlrZXkub2JqZWN0aWQgPSBieXRlbnI7Ci0Ja2V5Lm9mZnNldCA9IG51bV9ieXRlczsKLQlidHJmc19zZXRfa2V5X3R5cGUoJmtleSwgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKLQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsCi0JCQkJMCwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCWlmIChyZXQgIT0gMCkgewotCQlidHJmc19wcmludF9sZWFmKHJvb3QsIHBhdGgtPm5vZGVzWzBdKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnMgZmFpbGVkIHRvIGZpbmQgYmxvY2sgbnVtYmVyICVsbHVcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVucik7Ci0JCUJVRygpOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJaW50IGFjdGlvbiA9IEJUUkZTX0FERF9ERUxBWUVEX1JFRjsKK2FnYWluOgorCS8qCisJICogc2VsZWN0IGRlbGF5ZWQgcmVmIG9mIHR5cGUgQlRSRlNfQUREX0RFTEFZRURfUkVGIGZpcnN0LgorCSAqIHRoaXMgcHJldmVudHMgcmVmIGNvdW50IGZyb20gZ29pbmcgZG93biB0byB6ZXJvIHdoZW4KKwkgKiB0aGVyZSBzdGlsbCBhcmUgcGVuZGluZyBkZWxheWVkIHJlZi4KKwkgKi8KKwlub2RlID0gcmJfcHJldigmaGVhZC0+bm9kZS5yYl9ub2RlKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoIW5vZGUpCisJCQlicmVhazsKKwkJcmVmID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsCisJCQkJcmJfbm9kZSk7CisJCWlmIChyZWYtPmJ5dGVuciAhPSBoZWFkLT5ub2RlLmJ5dGVucikKKwkJCWJyZWFrOworCQlpZiAoYnRyZnNfZGVsYXllZF9ub2RlX3RvX3JlZihyZWYpLT5hY3Rpb24gPT0gYWN0aW9uKQorCQkJcmV0dXJuIHJlZjsKKwkJbm9kZSA9IHJiX3ByZXYobm9kZSk7CiAJfQotCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQlpdGVtID0gYnRyZnNfaXRlbV9wdHIobCwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7Ci0JKnJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsLCBpdGVtKTsKKwlpZiAoYWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX1JFRikgeworCQlhY3Rpb24gPSBCVFJGU19EUk9QX0RFTEFZRURfUkVGOworCQlnb3RvIGFnYWluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBydW5fY2x1c3RlcmVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbHVzdGVyKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqbG9ja2VkX3JlZiA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgY291bnQgPSAwOworCWludCBtdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCFsb2NrZWRfcmVmKSB7CisJCQkvKiBwaWNrIGEgbmV3IGhlYWQgcmVmIGZyb20gdGhlIGNsdXN0ZXIgbGlzdCAqLworCQkJaWYgKGxpc3RfZW1wdHkoY2x1c3RlcikpCisJCQkJYnJlYWs7CisKKwkJCWxvY2tlZF9yZWYgPSBsaXN0X2VudHJ5KGNsdXN0ZXItPm5leHQsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCwgY2x1c3Rlcik7CisKKwkJCS8qIGdyYWIgdGhlIGxvY2sgdGhhdCBzYXlzIHdlIGFyZSBnb2luZyB0byBwcm9jZXNzCisJCQkgKiBhbGwgdGhlIHJlZnMgZm9yIHRoaXMgaGVhZCAqLworCQkJcmV0ID0gYnRyZnNfZGVsYXllZF9yZWZfbG9jayh0cmFucywgbG9ja2VkX3JlZik7CisKKwkJCS8qCisJCQkgKiB3ZSBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBzcGluIGxvY2sgdG8gZ2V0IHRoZSBoZWFkCisJCQkgKiBtdXRleCBsb2NrLCBhbmQgdGhhdCBtaWdodCBoYXZlIGdpdmVuIHNvbWVvbmUgZWxzZQorCQkJICogdGltZSB0byBmcmVlIHRoZSBoZWFkLiAgSWYgdGhhdCdzIHRydWUsIGl0IGhhcyBiZWVuCisJCQkgKiByZW1vdmVkIGZyb20gb3VyIGxpc3QgYW5kIHdlIGNhbiBtb3ZlIG9uLgorCQkJICovCisJCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCQlsb2NrZWRfcmVmID0gTlVMTDsKKwkJCQljb3VudCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogcmVjb3JkIHRoZSBtdXN0IGluc2VydCByZXNlcnZlZCBmbGFnIGJlZm9yZSB3ZQorCQkgKiBkcm9wIHRoZSBzcGluIGxvY2suCisJCSAqLworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IGxvY2tlZF9yZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkOworCQlsb2NrZWRfcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwkJLyoKKwkJICogbG9ja2VkX3JlZiBpcyB0aGUgaGVhZCBub2RlLCBzbyB3ZSBoYXZlIHRvIGdvIG9uZQorCQkgKiBub2RlIGJhY2sgZm9yIGFueSBkZWxheWVkIHJlZiB1cGRhdGVzCisJCSAqLworCQlyZWYgPSBzZWxlY3RfZGVsYXllZF9yZWYobG9ja2VkX3JlZik7CisJCWlmICghcmVmKSB7CisJCQkvKiBBbGwgZGVsYXllZCByZWZzIGhhdmUgYmVlbiBwcm9jZXNzZWQsIEdvIGFoZWFkCisJCQkgKiBhbmQgc2VuZCB0aGUgaGVhZCBub2RlIHRvIHJ1bl9vbmVfZGVsYXllZF9yZWYsCisJCQkgKiBzbyB0aGF0IGFueSBhY2NvdW50aW5nIGZpeGVzIGNhbiBoYXBwZW4KKwkJCSAqLworCQkJcmVmID0gJmxvY2tlZF9yZWYtPm5vZGU7CisJCQlsaXN0X2RlbF9pbml0KCZsb2NrZWRfcmVmLT5jbHVzdGVyKTsKKwkJCWxvY2tlZF9yZWYgPSBOVUxMOworCQl9CisKKwkJcmVmLT5pbl90cmVlID0gMDsKKwkJcmJfZXJhc2UoJnJlZi0+cmJfbm9kZSwgJmRlbGF5ZWRfcmVmcy0+cm9vdCk7CisJCWRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMtLTsKKwkJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKKwkJcmV0ID0gcnVuX29uZV9kZWxheWVkX3JlZih0cmFucywgcm9vdCwgcmVmLAorCQkJCQkgIG11c3RfaW5zZXJ0X3Jlc2VydmVkKTsKKwkJQlVHX09OKHJldCk7CisJCWJ0cmZzX3B1dF9kZWxheWVkX3JlZihyZWYpOworCisJCWNvdW50Kys7CisJCWNvbmRfcmVzY2hlZCgpOworCQlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHRoaXMgc3RhcnRzIHByb2Nlc3NpbmcgdGhlIGRlbGF5ZWQgcmVmZXJlbmNlIGNvdW50IHVwZGF0ZXMgYW5kCisgKiBleHRlbnQgaW5zZXJ0aW9ucyB3ZSBoYXZlIHF1ZXVlZCB1cCBzbyBmYXIuICBjb3VudCBjYW4gYmUKKyAqIDAsIHdoaWNoIG1lYW5zIHRvIHByb2Nlc3MgZXZlcnl0aGluZyBpbiB0aGUgdHJlZSBhdCB0aGUgc3RhcnQKKyAqIG9mIHRoZSBydW4gKGJ1dCBub3QgbmV3bHkgYWRkZWQgZW50cmllcyksIG9yIGl0IGNhbiBiZSBzb21lIHRhcmdldAorICogbnVtYmVyIHlvdSdkIGxpa2UgdG8gcHJvY2Vzcy4KKyAqLworaW50IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJc3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyOworCWludCByZXQ7CisJaW50IHJ1bl9hbGwgPSBjb3VudCA9PSAodW5zaWduZWQgbG9uZyktMTsKKwlpbnQgcnVuX21vc3QgPSAwOworCisJaWYgKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QpCisJCXJvb3QgPSByb290LT5mc19pbmZvLT50cmVlX3Jvb3Q7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJSU5JVF9MSVNUX0hFQUQoJmNsdXN0ZXIpOworYWdhaW46CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWlmIChjb3VudCA9PSAwKSB7CisJCWNvdW50ID0gZGVsYXllZF9yZWZzLT5udW1fZW50cmllcyAqIDI7CisJCXJ1bl9tb3N0ID0gMTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKCEocnVuX2FsbCB8fCBydW5fbW9zdCkgJiYKKwkJICAgIGRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5IDwgNjQpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBnbyBmaW5kIHNvbWV0aGluZyB3ZSBjYW4gcHJvY2VzcyBpbiB0aGUgcmJ0cmVlLiAgV2Ugc3RhcnQgYXQKKwkJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJlZSwgYW5kIHRoZW4gYnVpbGQgYSBjbHVzdGVyCisJCSAqIG9mIHJlZnMgdG8gcHJvY2VzcyBzdGFydGluZyBhdCB0aGUgZmlyc3Qgb25lIHdlIGFyZSBhYmxlIHRvCisJCSAqIGxvY2sKKwkJICovCisJCXJldCA9IGJ0cmZzX2ZpbmRfcmVmX2NsdXN0ZXIodHJhbnMsICZjbHVzdGVyLAorCQkJCQkgICAgIGRlbGF5ZWRfcmVmcy0+cnVuX2RlbGF5ZWRfc3RhcnQpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJcmV0ID0gcnVuX2NsdXN0ZXJlZF9yZWZzKHRyYW5zLCByb290LCAmY2x1c3Rlcik7CisJCUJVR19PTihyZXQgPCAwKTsKKworCQljb3VudCAtPSBtaW5fdCh1bnNpZ25lZCBsb25nLCByZXQsIGNvdW50KTsKKworCQlpZiAoY291bnQgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChydW5fYWxsKSB7CisJCW5vZGUgPSByYl9maXJzdCgmZGVsYXllZF9yZWZzLT5yb290KTsKKwkJaWYgKCFub2RlKQorCQkJZ290byBvdXQ7CisJCWNvdW50ID0gKHVuc2lnbmVkIGxvbmcpLTE7CisKKwkJd2hpbGUgKG5vZGUpIHsKKwkJCXJlZiA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLAorCQkJCSAgICAgICByYl9ub2RlKTsKKwkJCWlmIChidHJmc19kZWxheWVkX3JlZl9pc19oZWFkKHJlZikpIHsKKwkJCQlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZDsKKworCQkJCWhlYWQgPSBidHJmc19kZWxheWVkX25vZGVfdG9faGVhZChyZWYpOworCQkJCWF0b21pY19pbmMoJnJlZi0+cmVmcyk7CisKKwkJCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwkJCQltdXRleF9sb2NrKCZoZWFkLT5tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisKKwkJCQlidHJmc19wdXRfZGVsYXllZF9yZWYocmVmKTsKKwkJCQljb25kX3Jlc2NoZWQoKTsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQkJbm9kZSA9IHJiX25leHQobm9kZSk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCWdvdG8gYWdhaW47CisJfQogb3V0OgotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyNCw3ICsxMzE1LDcgQEAKIAlpbnQgcmVmaSA9IDA7CiAJaW50IHNsb3Q7CiAJaW50ICgqcHJvY2Vzc19mdW5jKShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICosIHN0cnVjdCBidHJmc19yb290ICosCi0JCQkgICAgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOworCQkJICAgIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOwogCiAJcmVmX3Jvb3QgPSBidHJmc19oZWFkZXJfb3duZXIoYnVmKTsKIAlyZWZfZ2VuZXJhdGlvbiA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKGJ1Zik7CkBAIC0xNjk2LDEyICsxMzg3LDE5IEBACiAKIAkJaWYgKGxldmVsID09IDApIHsKIAkJCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShidWYsICZrZXksIHNsb3QpOworCQkJZmkgPSBidHJmc19pdGVtX3B0cihidWYsIHNsb3QsCisJCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisKKwkJCWJ5dGVuciA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfYnl0ZW5yKGJ1ZiwgZmkpOworCQkJaWYgKGJ5dGVuciA9PSAwKQorCQkJCWNvbnRpbnVlOwogCiAJCQlyZXQgPSBwcm9jZXNzX2Z1bmModHJhbnMsIHJvb3QsIGJ5dGVuciwKLQkJCQkJICAgb3JpZ19idWYtPnN0YXJ0LCBidWYtPnN0YXJ0LAotCQkJCQkgICBvcmlnX3Jvb3QsIHJlZl9yb290LAotCQkJCQkgICBvcmlnX2dlbmVyYXRpb24sIHJlZl9nZW5lcmF0aW9uLAotCQkJCQkgICBrZXkub2JqZWN0aWQpOworCQkJCSAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGJ1ZiwgZmkpLAorCQkJCSAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKKwkJCQkgICBvcmlnX3Jvb3QsIHJlZl9yb290LAorCQkJCSAgIG9yaWdfZ2VuZXJhdGlvbiwgcmVmX2dlbmVyYXRpb24sCisJCQkJICAga2V5Lm9iamVjdGlkKTsKIAogCQkJaWYgKHJldCkgewogCQkJCWZhaWxpID0gc2xvdDsKQEAgLTE3MDksNyArMTQwNyw3IEBACiAJCQkJZ290byBmYWlsOwogCQkJfQogCQl9IGVsc2UgewotCQkJcmV0ID0gcHJvY2Vzc19mdW5jKHRyYW5zLCByb290LCBieXRlbnIsCisJCQlyZXQgPSBwcm9jZXNzX2Z1bmModHJhbnMsIHJvb3QsIGJ5dGVuciwgYnVmLT5sZW4sCiAJCQkJCSAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKIAkJCQkJICAgb3JpZ19yb290LCByZWZfcm9vdCwKIAkJCQkJICAgb3JpZ19nZW5lcmF0aW9uLCByZWZfZ2VuZXJhdGlvbiwKQEAgLTE3ODYsMTcgKzE0ODQsMTcgQEAKIAkJCWlmIChieXRlbnIgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwKLQkJCQkJICAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKLQkJCQkJICAgIG9yaWdfcm9vdCwgcmVmX3Jvb3QsCi0JCQkJCSAgICBvcmlnX2dlbmVyYXRpb24sIHJlZl9nZW5lcmF0aW9uLAotCQkJCQkgICAga2V5Lm9iamVjdGlkKTsKKwkJCQkgICAgYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMoYnVmLCBmaSksCisJCQkJICAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKKwkJCQkgICAgb3JpZ19yb290LCByZWZfcm9vdCwgb3JpZ19nZW5lcmF0aW9uLAorCQkJCSAgICByZWZfZ2VuZXJhdGlvbiwga2V5Lm9iamVjdGlkKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBmYWlsOwogCQl9IGVsc2UgewogCQkJYnl0ZW5yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihidWYsIHNsb3QpOwogCQkJcmV0ID0gX19idHJmc191cGRhdGVfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLAotCQkJCQkgICAgb3JpZ19idWYtPnN0YXJ0LCBidWYtPnN0YXJ0LAotCQkJCQkgICAgb3JpZ19yb290LCByZWZfcm9vdCwKKwkJCQkJICAgIGJ1Zi0+bGVuLCBvcmlnX2J1Zi0+c3RhcnQsCisJCQkJCSAgICBidWYtPnN0YXJ0LCBvcmlnX3Jvb3QsIHJlZl9yb290LAogCQkJCQkgICAgb3JpZ19nZW5lcmF0aW9uLCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkJICAgIGxldmVsIC0gMSk7CiAJCQlpZiAocmV0KQpAQCAtMTgxNSw3ICsxNTEzLDYgQEAKIAkJCQkgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSkKIHsKIAlpbnQgcmV0OwotCWludCBwZW5kaW5nX3JldDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAl1bnNpZ25lZCBsb25nIGJpOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwpAQCAtMTgzMSwxMiArMTUyOCw4IEBACiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKIGZhaWw6Ci0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcGVuZGluZ19yZXQgPSBkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQlpZiAocGVuZGluZ19yZXQpCi0JCXJldHVybiBwZW5kaW5nX3JldDsKIAlyZXR1cm4gMDsKIAogfQpAQCAtMTkwMCw3ICsxNTkzLDcgQEAKIAlpZiAoIWJsb2NrX2dyb3VwIHx8IGJsb2NrX2dyb3VwLT5ybykKIAkJcmVhZG9ubHkgPSAxOwogCWlmIChibG9ja19ncm91cCkKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAlyZXR1cm4gcmVhZG9ubHk7CiB9CiAKQEAgLTIzMjQsNyArMjAxNyw3IEBACiAJCQkJV0FSTl9PTihyZXQpOwogCQkJfQogCQl9Ci0JCXB1dF9ibG9ja19ncm91cChjYWNoZSk7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJCXRvdGFsIC09IG51bV9ieXRlczsKIAkJYnl0ZW5yICs9IG51bV9ieXRlczsKIAl9CkBAIC0yMzQxLDcgKzIwMzQsNyBAQAogCQlyZXR1cm4gMDsKIAogCWJ5dGVuciA9IGNhY2hlLT5rZXkub2JqZWN0aWQ7Ci0JcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCiAJcmV0dXJuIGJ5dGVucjsKIH0KQEAgLTIzNTMsNyArMjA0Niw2IEBACiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZTsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CiAKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCkpOwogCWlmIChwaW4pIHsKIAkJc2V0X2V4dGVudF9kaXJ0eSgmZnNfaW5mby0+cGlubmVkX2V4dGVudHMsCiAJCQkJYnl0ZW5yLCBieXRlbnIgKyBudW0gLSAxLCBHRlBfTk9GUyk7CkBAIC0yMzYxLDYgKzIwNTMsNyBAQAogCQljbGVhcl9leHRlbnRfZGlydHkoJmZzX2luZm8tPnBpbm5lZF9leHRlbnRzLAogCQkJCWJ5dGVuciwgYnl0ZW5yICsgbnVtIC0gMSwgR0ZQX05PRlMpOwogCX0KKwogCXdoaWxlIChudW0gPiAwKSB7CiAJCWNhY2hlID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKGZzX2luZm8sIGJ5dGVucik7CiAJCUJVR19PTighY2FjaGUpOwpAQCAtMjM4NSw3ICsyMDc4LDcgQEAKIAkJCWlmIChjYWNoZS0+Y2FjaGVkKQogCQkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGNhY2hlLCBieXRlbnIsIGxlbik7CiAJCX0KLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJYnl0ZW5yICs9IGxlbjsKIAkJbnVtIC09IGxlbjsKIAl9CkBAIC0yNDE2LDcgKzIxMDksNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7CiAJCXNwaW5fdW5sb2NrKCZjYWNoZS0+c3BhY2VfaW5mby0+bG9jayk7Ci0JCXB1dF9ibG9ja19ncm91cChjYWNoZSk7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJCWJ5dGVuciArPSBsZW47CiAJCW51bSAtPSBsZW47CiAJfQpAQCAtMjQzMSw3ICsyMTI0LDYgQEAKIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnBpbm5lZF9leHRlbnRzID0gJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9leHRlbnRzOwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdChwaW5uZWRfZXh0ZW50cywgbGFzdCwKIAkJCQkJICAgICZzdGFydCwgJmVuZCwgRVhURU5UX0RJUlRZKTsKQEAgLTI0NDAsNyArMjEzMiw2IEBACiAJCXNldF9leHRlbnRfZGlydHkoY29weSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCQlsYXN0ID0gZW5kICsgMTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDUyLDcgKzIxNDMsNiBAQAogCXU2NCBlbmQ7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7CiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KHVucGluLCAwLCAmc3RhcnQsICZlbmQsCiAJCQkJCSAgICBFWFRFTlRfRElSVFkpOwpAQCAtMjQ2MSwyMDkgKzIxNTEsMjAgQEAKIAogCQlyZXQgPSBidHJmc19kaXNjYXJkX2V4dGVudChyb290LCBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKIAorCQkvKiB1bmxvY2tzIHRoZSBwaW5uZWQgbXV0ZXggKi8KIAkJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKHJvb3QsIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQsIDApOwogCQljbGVhcl9leHRlbnRfZGlydHkodW5waW4sIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKIAotCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIGludCBhbGwpCi17Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci0JdTY0IHByaXY7Ci0JdTY0IHNlYXJjaCA9IDA7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKmV4dGVudF9vcCwgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGluc2VydF9saXN0LCB1cGRhdGVfbGlzdDsKLQlpbnQgcmV0OwotCWludCBudW1faW5zZXJ0cyA9IDAsIG1heF9pbnNlcnRzLCByZXN0YXJ0ID0gMDsKLQotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluc2VydF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwotCi0JbWF4X2luc2VydHMgPSBleHRlbnRfcm9vdC0+bGVhZnNpemUgLwotCQkoMiAqIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSArIDIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pICsKLQkJIHNpemVvZihzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZikgKwotCQkgc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSkpOwotYWdhaW46Ci0JbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0Jd2hpbGUgKDEpIHsKLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZpbmZvLT5leHRlbnRfaW5zLCBzZWFyY2gsICZzdGFydCwKLQkJCQkJICAgICZlbmQsIEVYVEVOVF9XUklURUJBQ0spOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAocmVzdGFydCAmJiAhbnVtX2luc2VydHMgJiYKLQkJCSAgICBsaXN0X2VtcHR5KCZ1cGRhdGVfbGlzdCkpIHsKLQkJCQlyZXN0YXJ0ID0gMDsKLQkJCQlzZWFyY2ggPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXQgPSB0cnlfbG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWlmIChhbGwpCi0JCQkJcmVzdGFydCA9IDE7Ci0JCQlzZWFyY2ggPSBlbmQgKyAxOwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCQljb25kX3Jlc2NoZWQoKTsKLQkJCQltdXRleF9sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCAmcHJpdik7Ci0JCUJVR19PTihyZXQpOwotCQlleHRlbnRfb3AgPSAoc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICopKHVuc2lnbmVkIGxvbmcpIHByaXY7Ci0KLQkJaWYgKGV4dGVudF9vcC0+dHlwZSA9PSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQpIHsKLQkJCW51bV9pbnNlcnRzKys7Ci0JCQlsaXN0X2FkZF90YWlsKCZleHRlbnRfb3AtPmxpc3QsICZpbnNlcnRfbGlzdCk7Ci0JCQlzZWFyY2ggPSBlbmQgKyAxOwotCQkJaWYgKG51bV9pbnNlcnRzID09IG1heF9pbnNlcnRzKSB7Ci0JCQkJcmVzdGFydCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZXh0ZW50X29wLT50eXBlID09IFBFTkRJTkdfQkFDS1JFRl9VUERBVEUpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmV4dGVudF9vcC0+bGlzdCwgJnVwZGF0ZV9saXN0KTsKLQkJCXNlYXJjaCA9IGVuZCArIDE7Ci0JCX0gZWxzZSB7Ci0JCQlCVUcoKTsKLQkJfQotCX0KLQotCS8qCi0JICogcHJvY2VzcyB0aGUgdXBkYXRlIGxpc3QsIGNsZWFyIHRoZSB3cml0ZWJhY2sgYml0IGZvciBpdCwgYW5kIGlmCi0JICogc29tZWJvZHkgbWFya2VkIHRoaXMgdGhpbmcgZm9yIGRlbGV0aW9uIHRoZW4ganVzdCB1bmxvY2sgaXQgYW5kIGJlCi0JICogZG9uZSwgdGhlIGZyZWVfZXh0ZW50cyB3aWxsIGhhbmRsZSBpdAotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHRlbnRfb3AsIHRtcCwgJnVwZGF0ZV9saXN0LCBsaXN0KSB7Ci0JCWNsZWFyX2V4dGVudF9iaXRzKCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgIGV4dGVudF9vcC0+Ynl0ZW5yICsgZXh0ZW50X29wLT5udW1fYnl0ZXMgLSAxLAotCQkJCSAgRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQlpZiAoZXh0ZW50X29wLT5kZWwpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmV4dGVudF9vcC0+bGlzdCk7Ci0JCQl1bmxvY2tfZXh0ZW50KCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgICAgICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzCi0JCQkJICAgICAgLSAxLCBHRlBfTk9GUyk7Ci0JCQlrZnJlZShleHRlbnRfb3ApOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0KLQkvKgotCSAqIHN0aWxsIGhhdmUgdGhpbmdzIGxlZnQgb24gdGhlIHVwZGF0ZSBsaXN0LCBnbyBhaGVhZCBhbiB1cGRhdGUKLQkgKiBldmVyeXRoaW5nCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ1cGRhdGVfbGlzdCkpIHsKLQkJcmV0ID0gdXBkYXRlX2JhY2tyZWZzKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJnVwZGF0ZV9saXN0KTsKLQkJQlVHX09OKHJldCk7Ci0KLQkJLyogd2UgbWF5IGhhdmUgQ09XJ2VkIG5ldyBibG9ja3MsIHNvIGxldHMgc3RhcnQgb3ZlciAqLwotCQlpZiAoYWxsKQotCQkJcmVzdGFydCA9IDE7Ci0JfQotCi0JLyoKLQkgKiBpZiBubyBpbnNlcnRzIG5lZWQgdG8gYmUgZG9uZSwgYnV0IHdlIHNraXBwZWQgc29tZSBleHRlbnRzIGFuZCB3ZQotCSAqIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB0aGVuIHJlc2V0IGV2ZXJ5dGhpbmcgYW5kCi0JICogZ28gYmFjayB0byB0aGUgYmVnaW5uaW5nCi0JICovCi0JaWYgKCFudW1faW5zZXJ0cyAmJiByZXN0YXJ0KSB7Ci0JCXNlYXJjaCA9IDA7Ci0JCXJlc3RhcnQgPSAwOwotCQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmaW5zZXJ0X2xpc3QpOwotCQlnb3RvIGFnYWluOwotCX0gZWxzZSBpZiAoIW51bV9pbnNlcnRzKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogcHJvY2VzcyB0aGUgaW5zZXJ0IGV4dGVudHMgbGlzdC4gIEFnYWluIGlmIHdlIGFyZSBkZWxldGluZyB0aGlzCi0JICogZXh0ZW50LCB0aGVuIGp1c3QgdW5sb2NrIGl0LCBwaW4gZG93biB0aGUgYnl0ZXMgaWYgbmVlZCBiZSwgYW5kIGJlCi0JICogZG9uZSB3aXRoIGl0LiAgU2F2ZXMgdXMgZnJvbSBoYXZpbmcgdG8gYWN0dWFsbHkgaW5zZXJ0IHRoZSBleHRlbnQKLQkgKiBpbnRvIHRoZSB0cmVlIGFuZCB0aGVuIHN1YnNlcXVlbnRseSBjb21lIGFsb25nIGFuZCBkZWxldGUgaXQKLQkgKi8KLQltdXRleF9sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXh0ZW50X29wLCB0bXAsICZpbnNlcnRfbGlzdCwgbGlzdCkgewotCQljbGVhcl9leHRlbnRfYml0cygmaW5mby0+ZXh0ZW50X2lucywgZXh0ZW50X29wLT5ieXRlbnIsCi0JCQkJICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzIC0gMSwKLQkJCQkgIEVYVEVOVF9XUklURUJBQ0ssIEdGUF9OT0ZTKTsKLQkJaWYgKGV4dGVudF9vcC0+ZGVsKSB7Ci0JCQl1NjQgdXNlZDsKLQkJCWxpc3RfZGVsX2luaXQoJmV4dGVudF9vcC0+bGlzdCk7Ci0JCQl1bmxvY2tfZXh0ZW50KCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgICAgICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzCi0JCQkJICAgICAgLSAxLCBHRlBfTk9GUyk7Ci0KLQkJCW11dGV4X2xvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCQkJcmV0ID0gcGluX2Rvd25fYnl0ZXModHJhbnMsIGV4dGVudF9yb290LAotCQkJCQkgICAgIGV4dGVudF9vcC0+Ynl0ZW5yLAotCQkJCQkgICAgIGV4dGVudF9vcC0+bnVtX2J5dGVzLCAwKTsKLQkJCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0KLQkJCXNwaW5fbG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7Ci0JCQl1c2VkID0gYnRyZnNfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSk7Ci0JCQlidHJmc19zZXRfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSwKLQkJCQkJdXNlZCAtIGV4dGVudF9vcC0+bnVtX2J5dGVzKTsKLQkJCXVzZWQgPSBidHJmc19yb290X3VzZWQoJmV4dGVudF9yb290LT5yb290X2l0ZW0pOwotCQkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmZXh0ZW50X3Jvb3QtPnJvb3RfaXRlbSwKLQkJCQkJdXNlZCAtIGV4dGVudF9vcC0+bnVtX2J5dGVzKTsKLQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQotCQkJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCBleHRlbnRfcm9vdCwKLQkJCQkJCSBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkJCSBleHRlbnRfb3AtPm51bV9ieXRlcywKLQkJCQkJCSAwLCByZXQgPiAwKTsKLQkJCUJVR19PTihyZXQpOwotCQkJa2ZyZWUoZXh0ZW50X29wKTsKLQkJCW51bV9pbnNlcnRzLS07Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQotCXJldCA9IGluc2VydF9leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJmluc2VydF9saXN0LAotCQkJICAgICBudW1faW5zZXJ0cyk7Ci0JQlVHX09OKHJldCk7Ci0KLQkvKgotCSAqIGlmIHJlc3RhcnQgaXMgc2V0IGZvciB3aGF0ZXZlciByZWFzb24gd2UgbmVlZCB0byBnbyBiYWNrIGFuZCBzdGFydAotCSAqIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBwZW5kaW5nIGxpc3QgYWdhaW4uCi0JICoKLQkgKiBXZSBqdXN0IGluc2VydGVkIHNvbWUgZXh0ZW50cywgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBuZXcKLQkgKiBibG9ja3MgYmVpbmcgYWxsb2NhdGVkLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gbmV3IGJsb2NrcyBuZWVkaW5nCi0JICogdXBkYXRlcywgc28gaWYgYWxsIGlzIHNldCB3ZSBfbXVzdF8gcmVzdGFydCB0byBnZXQgdGhlIHVwZGF0ZWQKLQkgKiBibG9ja3MuCi0JICovCi0JaWYgKHJlc3RhcnQgfHwgYWxsKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZpbnNlcnRfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ1cGRhdGVfbGlzdCk7Ci0JCXNlYXJjaCA9IDA7Ci0JCXJlc3RhcnQgPSAwOwotCQludW1faW5zZXJ0cyA9IDA7Ci0JCWdvdG8gYWdhaW47Ci0JfQotb3V0OgotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwaW5fZG93bl9ieXRlcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIGludCBpc19kYXRhKQorCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGlzX2RhdGEsCisJCQkgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqbXVzdF9jbGVhbikKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmOwpAQCAtMjY4NiwxNyArMjE4NywxOCBAQAogCQl1NjQgaGVhZGVyX3RyYW5zaWQgPSBidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihidWYpOwogCQlpZiAoaGVhZGVyX293bmVyICE9IEJUUkZTX1RSRUVfTE9HX09CSkVDVElEICYmCiAJCSAgICBoZWFkZXJfb3duZXIgIT0gQlRSRlNfVFJFRV9SRUxPQ19PQkpFQ1RJRCAmJgorCQkgICAgaGVhZGVyX293bmVyICE9IEJUUkZTX0RBVEFfUkVMT0NfVFJFRV9PQkpFQ1RJRCAmJgogCQkgICAgaGVhZGVyX3RyYW5zaWQgPT0gdHJhbnMtPnRyYW5zaWQgJiYKIAkJICAgICFidHJmc19oZWFkZXJfZmxhZyhidWYsIEJUUkZTX0hFQURFUl9GTEFHX1dSSVRURU4pKSB7Ci0JCQljbGVhbl90cmVlX2Jsb2NrKE5VTEwsIHJvb3QsIGJ1Zik7Ci0JCQlidHJmc190cmVlX3VubG9jayhidWYpOwotCQkJZnJlZV9leHRlbnRfYnVmZmVyKGJ1Zik7CisJCQkqbXVzdF9jbGVhbiA9IGJ1ZjsKIAkJCXJldHVybiAxOwogCQl9CiAJCWJ0cmZzX3RyZWVfdW5sb2NrKGJ1Zik7CiAJfQogCWZyZWVfZXh0ZW50X2J1ZmZlcihidWYpOwogcGluaXQ6CisJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisJLyogdW5sb2NrcyB0aGUgcGlubmVkIG11dGV4ICovCiAJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAxKTsKIAogCUJVR19PTihlcnIgPCAwKTsKQEAgLTI3MTAsNyArMjIxMiw4IEBACiAJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwKIAkJCSB1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAotCQkJIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IHBpbiwgaW50IG1hcmtfZnJlZSkKKwkJCSB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sIGludCBtYXJrX2ZyZWUsCisJCQkgaW50IHJlZnNfdG9fZHJvcCkKIHsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKQEAgLTI3MzIsNiArMjIzNSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcGF0aC0+cmVhZGEgPSAxOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAogCQkJCSAgICBieXRlbnIsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKIAkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLCAxKTsKQEAgLTI3NTMsOSArMjI1NywxMSBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghZm91bmRfZXh0ZW50KSB7Ci0JCQlyZXQgPSByZW1vdmVfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoKTsKKwkJCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsCisJCQkJCQkgICAgcmVmc190b19kcm9wKTsKIAkJCUJVR19PTihyZXQpOwogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKKwkJCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAkJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCBleHRlbnRfcm9vdCwKIAkJCQkJCSZrZXksIHBhdGgsIC0xLCAxKTsKIAkJCWlmIChyZXQpIHsKQEAgLTI3NzEsOCArMjI3Nyw5IEBACiAJCWJ0cmZzX3ByaW50X2xlYWYoZXh0ZW50X3Jvb3QsIHBhdGgtPm5vZGVzWzBdKTsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyB1bmFibGUgdG8gZmluZCByZWYgYnl0ZSBuciAlbGx1ICIKLQkJICAgICAgICJyb290ICVsbHUgZ2VuICVsbHUgb3duZXIgJWxsdVxuIiwKKwkJICAgICAgICJwYXJlbnQgJWxsdSByb290ICVsbHUgZ2VuICVsbHUgb3duZXIgJWxsdVxuIiwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZW5yLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJlbnQsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJvb3Rfb2JqZWN0aWQsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZl9nZW5lcmF0aW9uLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvd25lcl9vYmplY3RpZCk7CkBAIC0yNzgyLDE3ICsyMjg5LDIzIEBACiAJZWkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBleHRlbnRfc2xvdCwKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwogCXJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSk7Ci0JQlVHX09OKHJlZnMgPT0gMCk7Ci0JcmVmcyAtPSAxOwotCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgcmVmcyk7CiAKKwkvKgorCSAqIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRlbGV0ZSB0aGUgZXh0ZW50IGl0ZW0gaWYgdGhlcmUKKwkgKiBhcmUgb3RoZXIgZGVsYXllZCByZWYgdXBkYXRlcyBwZW5kaW5nCisJICovCisKKwlCVUdfT04ocmVmcyA8IHJlZnNfdG9fZHJvcCk7CisJcmVmcyAtPSByZWZzX3RvX2Ryb3A7CisJYnRyZnNfc2V0X2V4dGVudF9yZWZzKGxlYWYsIGVpLCByZWZzKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotCWlmIChyZWZzID09IDAgJiYgZm91bmRfZXh0ZW50ICYmIHBhdGgtPnNsb3RzWzBdID09IGV4dGVudF9zbG90ICsgMSkgeworCWlmIChyZWZzID09IDAgJiYgZm91bmRfZXh0ZW50ICYmCisJICAgIHBhdGgtPnNsb3RzWzBdID09IGV4dGVudF9zbG90ICsgMSkgewogCQlzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZiAqcmVmOwogCQlyZWYgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCQkgICAgIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJQlVHX09OKGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpICE9IDEpOworCQlCVUdfT04oYnRyZnNfcmVmX251bV9yZWZzKGxlYWYsIHJlZikgIT0gcmVmc190b19kcm9wKTsKIAkJLyogaWYgdGhlIGJhY2sgcmVmIGFuZCB0aGUgZXh0ZW50IGFyZSBuZXh0IHRvIGVhY2ggb3RoZXIKIAkJICogdGhleSBnZXQgZGVsZXRlZCBiZWxvdyBpbiBvbmUgc2hvdAogCQkgKi8KQEAgLTI4MDAsMTEgKzIzMTMsMTMgQEAKIAkJbnVtX3RvX2RlbCA9IDI7CiAJfSBlbHNlIGlmIChmb3VuZF9leHRlbnQpIHsKIAkJLyogb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgZXh0ZW50IGJhY2sgcmVmICovCi0JCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgpOworCQlyZXQgPSByZW1vdmVfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAorCQkJCQkgICAgcmVmc190b19kcm9wKTsKIAkJQlVHX09OKHJldCk7CiAJCS8qIGlmIHJlZnMgYXJlIDAsIHdlIG5lZWQgdG8gc2V0dXAgdGhlIHBhdGggZm9yIGRlbGV0aW9uICovCiAJCWlmIChyZWZzID09IDApIHsKIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7CisJCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsCiAJCQkJCQktMSwgMSk7CiAJCQlCVUdfT04ocmV0KTsKQEAgLTI4MTQsMTYgKzIzMjksMTggQEAKIAlpZiAocmVmcyA9PSAwKSB7CiAJCXU2NCBzdXBlcl91c2VkOwogCQl1NjQgcm9vdF91c2VkOworCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbXVzdF9jbGVhbiA9IE5VTEw7CiAKIAkJaWYgKHBpbikgewotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywKLQkJCQlvd25lcl9vYmplY3RpZCA+PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKTsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKKwkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCByb290LCBwYXRoLAorCQkJCWJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCW93bmVyX29iamVjdGlkID49IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQsCisJCQkJJm11c3RfY2xlYW4pOwogCQkJaWYgKHJldCA+IDApCiAJCQkJbWFya19mcmVlID0gMTsKIAkJCUJVR19PTihyZXQgPCAwKTsKIAkJfQorCiAJCS8qIGJsb2NrIGFjY291bnRpbmcgZm9yIHN1cGVyIGJsb2NrICovCiAJCXNwaW5fbG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCXN1cGVyX3VzZWQgPSBidHJmc19zdXBlcl9ieXRlc191c2VkKCZpbmZvLT5zdXBlcl9jb3B5KTsKQEAgLTI4MzUsMTQgKzIzNTIsMzQgQEAKIAkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtLAogCQkJCQkgICByb290X3VzZWQgLSBudW1fYnl0ZXMpOwogCQlzcGluX3VubG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7CisKKwkJLyoKKwkJICogaXQgaXMgZ29pbmcgdG8gYmUgdmVyeSByYXJlIGZvciBzb21lb25lIHRvIGJlIHdhaXRpbmcKKwkJICogb24gdGhlIGJsb2NrIHdlJ3JlIGZyZWVpbmcuICBkZWxfaXRlbXMgbWlnaHQgbmVlZCB0bworCQkgKiBzY2hlZHVsZSwgc28gcmF0aGVyIHRoYW4gZ2V0IGZhbmN5LCBqdXN0IGZvcmNlIGl0CisJCSAqIHRvIGJsb2NraW5nIGhlcmUKKwkJICovCisJCWlmIChtdXN0X2NsZWFuKQorCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobXVzdF9jbGVhbik7CisKIAkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgcGF0aC0+c2xvdHNbMF0sCiAJCQkJICAgICAgbnVtX3RvX2RlbCk7CiAJCUJVR19PTihyZXQpOwogCQlidHJmc19yZWxlYXNlX3BhdGgoZXh0ZW50X3Jvb3QsIHBhdGgpOwogCisJCWlmIChtdXN0X2NsZWFuKSB7CisJCQljbGVhbl90cmVlX2Jsb2NrKE5VTEwsIHJvb3QsIG11c3RfY2xlYW4pOworCQkJYnRyZnNfdHJlZV91bmxvY2sobXVzdF9jbGVhbik7CisJCQlmcmVlX2V4dGVudF9idWZmZXIobXVzdF9jbGVhbik7CisJCX0KKwogCQlpZiAob3duZXJfb2JqZWN0aWQgPj0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewogCQkJcmV0ID0gYnRyZnNfZGVsX2NzdW1zKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcyk7CiAJCQlCVUdfT04ocmV0KTsKKwkJfSBlbHNlIHsKKwkJCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLAorCQkJICAgICBieXRlbnIgPj4gUEFHRV9DQUNIRV9TSElGVCwKKwkJCSAgICAgKGJ5dGVuciArIG51bV9ieXRlcyAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogCQl9CiAKIAkJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywgMCwKQEAgLTI4NTAsMjE4ICsyMzg3LDEwMyBAQAogCQlCVUdfT04ocmV0KTsKIAl9CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCWZpbmlzaF9jdXJyZW50X2luc2VydCh0cmFucywgZXh0ZW50X3Jvb3QsIDApOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBmaW5kIGFsbCB0aGUgYmxvY2tzIG1hcmtlZCBhcyBwZW5kaW5nIGluIHRoZSByYWRpeCB0cmVlIGFuZCByZW1vdmUKLSAqIHRoZW0gZnJvbSB0aGUgZXh0ZW50IG1hcAotICovCi1zdGF0aWMgaW50IGRlbF9wZW5kaW5nX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290LCBpbnQgYWxsKQotewotCWludCByZXQ7Ci0JaW50IGVyciA9IDA7Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci0JdTY0IHByaXY7Ci0JdTY0IHNlYXJjaCA9IDA7Ci0JaW50IG5yID0gMCwgc2tpcHBlZCA9IDA7Ci0Jc3RydWN0IGV4dGVudF9pb190cmVlICpwZW5kaW5nX2RlbDsKLQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmV4dGVudF9pbnM7Ci0Jc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpleHRlbnRfb3A7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGV0ZV9saXN0OwotCi0JSU5JVF9MSVNUX0hFQUQoJmRlbGV0ZV9saXN0KTsKLQlleHRlbnRfaW5zID0gJmV4dGVudF9yb290LT5mc19pbmZvLT5leHRlbnRfaW5zOwotCXBlbmRpbmdfZGVsID0gJmV4dGVudF9yb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbDsKLQotYWdhaW46Ci0JbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0Jd2hpbGUgKDEpIHsKLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KHBlbmRpbmdfZGVsLCBzZWFyY2gsICZzdGFydCwgJmVuZCwKLQkJCQkJICAgIEVYVEVOVF9XUklURUJBQ0spOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAoYWxsICYmIHNraXBwZWQgJiYgIW5yKSB7Ci0JCQkJc2VhcmNoID0gMDsKLQkJCQlza2lwcGVkID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IHRyeV9sb2NrX2V4dGVudChleHRlbnRfaW5zLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7Ci0JCWlmICghcmV0KSB7Ci0JCQlzZWFyY2ggPSBlbmQrMTsKLQkJCXNraXBwZWQgPSAxOwotCi0JCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCQltdXRleF91bmxvY2soJmluZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJCW11dGV4X2xvY2soJmluZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJfQotCi0JCQljb250aW51ZTsKLQkJfQotCQlCVUdfT04ocmV0IDwgMCk7Ci0KLQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUocGVuZGluZ19kZWwsIHN0YXJ0LCAmcHJpdik7Ci0JCUJVR19PTihyZXQpOwotCQlleHRlbnRfb3AgPSAoc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICopKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQljbGVhcl9leHRlbnRfYml0cyhwZW5kaW5nX2RlbCwgc3RhcnQsIGVuZCwgRVhURU5UX1dSSVRFQkFDSywKLQkJCQkgIEdGUF9OT0ZTKTsKLQkJaWYgKCF0ZXN0X3JhbmdlX2JpdChleHRlbnRfaW5zLCBzdGFydCwgZW5kLAotCQkJCSAgICBFWFRFTlRfV1JJVEVCQUNLLCAwKSkgewotCQkJbGlzdF9hZGRfdGFpbCgmZXh0ZW50X29wLT5saXN0LCAmZGVsZXRlX2xpc3QpOwotCQkJbnIrKzsKLQkJfSBlbHNlIHsKLQkJCWtmcmVlKGV4dGVudF9vcCk7Ci0KLQkJCXJldCA9IGdldF9zdGF0ZV9wcml2YXRlKCZpbmZvLT5leHRlbnRfaW5zLCBzdGFydCwKLQkJCQkJCSZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQkJY2xlYXJfZXh0ZW50X2JpdHMoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCBlbmQsCi0JCQkJCSAgRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCi0JCQlpZiAoZXh0ZW50X29wLT50eXBlID09IFBFTkRJTkdfQkFDS1JFRl9VUERBVEUpIHsKLQkJCQlsaXN0X2FkZF90YWlsKCZleHRlbnRfb3AtPmxpc3QsICZkZWxldGVfbGlzdCk7Ci0JCQkJc2VhcmNoID0gZW5kICsgMTsKLQkJCQlucisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQltdXRleF9sb2NrKCZleHRlbnRfcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCBleHRlbnRfcm9vdCwgc3RhcnQsCi0JCQkJCSAgICAgZW5kICsgMSAtIHN0YXJ0LCAwKTsKLQkJCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0KLQkJCXJldCA9IHVwZGF0ZV9ibG9ja19ncm91cCh0cmFucywgZXh0ZW50X3Jvb3QsIHN0YXJ0LAotCQkJCQkJZW5kICsgMSAtIHN0YXJ0LCAwLCByZXQgPiAwKTsKLQotCQkJdW5sb2NrX2V4dGVudChleHRlbnRfaW5zLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7Ci0JCQlCVUdfT04ocmV0KTsKLQkJCWtmcmVlKGV4dGVudF9vcCk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWVyciA9IHJldDsKLQotCQlzZWFyY2ggPSBlbmQgKyAxOwotCi0JCWlmIChuZWVkX3Jlc2NoZWQoKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCX0KLQl9Ci0KLQlpZiAobnIpIHsKLQkJcmV0ID0gZnJlZV9leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgJmRlbGV0ZV9saXN0KTsKLQkJQlVHX09OKHJldCk7Ci0JfQotCi0JaWYgKGFsbCAmJiBza2lwcGVkKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZWxldGVfbGlzdCk7Ci0JCXNlYXJjaCA9IDA7Ci0JCW5yID0gMDsKLQkJZ290byBhZ2FpbjsKLQl9Ci0KLQlpZiAoIWVycikKLQkJZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKICAqIHJlbW92ZSBhbiBleHRlbnQgZnJvbSB0aGUgcm9vdCwgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBfX2J0cmZzX2ZyZWVfZXh0ZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsCi0JCQkgICAgICAgdTY0IHJvb3Rfb2JqZWN0aWQsIHU2NCByZWZfZ2VuZXJhdGlvbiwKLQkJCSAgICAgICB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4pCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgcGFyZW50LAorCQkJCQl1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAorCQkJCQl1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sCisJCQkJCWludCByZWZzX3RvX2Ryb3ApCiB7Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7Ci0JaW50IHBlbmRpbmdfcmV0OwotCWludCByZXQ7Ci0KIAlXQVJOX09OKG51bV9ieXRlcyA8IHJvb3QtPnNlY3RvcnNpemUpOwotCWlmIChyb290ID09IGV4dGVudF9yb290KSB7Ci0JCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqZXh0ZW50X29wID0gTlVMTDsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJaWYgKHRlc3RfcmFuZ2VfYml0KCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLCBieXRlbnIsCi0JCQkJYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwgRVhURU5UX1dSSVRFQkFDSywgMCkpIHsKLQkJCXU2NCBwcml2OwotCQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCQlieXRlbnIsICZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQkJZXh0ZW50X29wLT5kZWwgPSAxOwotCQkJaWYgKGV4dGVudF9vcC0+dHlwZSA9PSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQpIHsKLQkJCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0KLQkJaWYgKGV4dGVudF9vcCkgewotCQkJcmVmX2dlbmVyYXRpb24gPSBleHRlbnRfb3AtPm9yaWdfZ2VuZXJhdGlvbjsKLQkJCXBhcmVudCA9IGV4dGVudF9vcC0+b3JpZ19wYXJlbnQ7Ci0JCX0KLQotCQlleHRlbnRfb3AgPSBrbWFsbG9jKHNpemVvZigqZXh0ZW50X29wKSwgR0ZQX05PRlMpOwotCQlCVUdfT04oIWV4dGVudF9vcCk7Ci0KLQkJZXh0ZW50X29wLT50eXBlID0gUEVORElOR19FWFRFTlRfREVMRVRFOwotCQlleHRlbnRfb3AtPmJ5dGVuciA9IGJ5dGVucjsKLQkJZXh0ZW50X29wLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7Ci0JCWV4dGVudF9vcC0+cGFyZW50ID0gcGFyZW50OwotCQlleHRlbnRfb3AtPm9yaWdfcGFyZW50ID0gcGFyZW50OwotCQlleHRlbnRfb3AtPmdlbmVyYXRpb24gPSByZWZfZ2VuZXJhdGlvbjsKLQkJZXh0ZW50X29wLT5vcmlnX2dlbmVyYXRpb24gPSByZWZfZ2VuZXJhdGlvbjsKLQkJZXh0ZW50X29wLT5sZXZlbCA9IChpbnQpb3duZXJfb2JqZWN0aWQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZleHRlbnRfb3AtPmxpc3QpOwotCQlleHRlbnRfb3AtPmRlbCA9IDA7Ci0KLQkJc2V0X2V4dGVudF9iaXRzKCZyb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbCwKLQkJCQlieXRlbnIsIGJ5dGVuciArIG51bV9ieXRlcyAtIDEsCi0JCQkJRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQlzZXRfc3RhdGVfcHJpdmF0ZSgmcm9vdC0+ZnNfaW5mby0+cGVuZGluZ19kZWwsCi0JCQkJICBieXRlbnIsICh1bnNpZ25lZCBsb25nKWV4dGVudF9vcCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBpZiBtZXRhZGF0YSBhbHdheXMgcGluICovCi0JaWYgKG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewotCQlpZiAocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgPT0gQlRSRlNfVFJFRV9MT0dfT0JKRUNUSUQpIHsKLQkJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlidHJmc191cGRhdGVfcGlubmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDEpOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCQkJdXBkYXRlX3Jlc2VydmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkvKgorCSAqIGlmIG1ldGFkYXRhIGFsd2F5cyBwaW4KKwkgKiBpZiBkYXRhIHBpbiB3aGVuIGFueSB0cmFuc2FjdGlvbiBoYXMgY29tbWl0dGVkIHRoaXMKKwkgKi8KKwlpZiAob3duZXJfb2JqZWN0aWQgPCBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEIHx8CisJICAgIHJlZl9nZW5lcmF0aW9uICE9IHRyYW5zLT50cmFuc2lkKQogCQlwaW4gPSAxOwotCX0KIAotCS8qIGlmIGRhdGEgcGluIHdoZW4gYW55IHRyYW5zYWN0aW9uIGhhcyBjb21taXR0ZWQgdGhpcyAqLwogCWlmIChyZWZfZ2VuZXJhdGlvbiAhPSB0cmFucy0+dHJhbnNpZCkKIAkJcGluID0gMTsKIAotCXJldCA9IF9fZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCisJcmV0dXJuIF9fZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCiAJCQkgICAgcm9vdF9vYmplY3RpZCwgcmVmX2dlbmVyYXRpb24sCi0JCQkgICAgb3duZXJfb2JqZWN0aWQsIHBpbiwgcGluID09IDApOworCQkJICAgIG93bmVyX29iamVjdGlkLCBwaW4sIHBpbiA9PSAwLCByZWZzX3RvX2Ryb3ApOworfQogCi0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JcGVuZGluZ19yZXQgPSBkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JcmV0dXJuIHJldCA/IHJldCA6IHBlbmRpbmdfcmV0OworLyoKKyAqIHdoZW4gd2UgZnJlZSBhbiBleHRlbnQsIGl0IGlzIHBvc3NpYmxlIChhbmQgbGlrZWx5KSB0aGF0IHdlIGZyZWUgdGhlIGxhc3QKKyAqIGRlbGF5ZWQgcmVmIGZvciB0aGF0IGV4dGVudCBhcyB3ZWxsLiAgVGhpcyBzZWFyY2hlcyB0aGUgZGVsYXllZCByZWYgdHJlZSBmb3IKKyAqIGEgZ2l2ZW4gZXh0ZW50LCBhbmQgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGRlbGF5ZWQgcmVmcyB0byBiZSBwcm9jZXNzZWQsIGl0CisgKiByZW1vdmVzIGl0IGZyb20gdGhlIHRyZWUuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgY2hlY2tfcmVmX2NsZWFudXAoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIpCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQ7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCWludCByZXQ7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWhlYWQgPSBidHJmc19maW5kX2RlbGF5ZWRfcmVmX2hlYWQodHJhbnMsIGJ5dGVucik7CisJaWYgKCFoZWFkKQorCQlnb3RvIG91dDsKKworCW5vZGUgPSByYl9wcmV2KCZoZWFkLT5ub2RlLnJiX25vZGUpOworCWlmICghbm9kZSkKKwkJZ290byBvdXQ7CisKKwlyZWYgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSwgcmJfbm9kZSk7CisKKwkvKiB0aGVyZSBhcmUgc3RpbGwgZW50cmllcyBmb3IgdGhpcyByZWYsIHdlIGNhbid0IGRyb3AgaXQgKi8KKwlpZiAocmVmLT5ieXRlbnIgPT0gYnl0ZW5yKQorCQlnb3RvIG91dDsKKworCS8qCisJICogd2FpdGluZyBmb3IgdGhlIGxvY2sgaGVyZSB3b3VsZCBkZWFkbG9jay4gIElmIHNvbWVvbmUgZWxzZSBoYXMgaXQKKwkgKiBsb2NrZWQgdGhleSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBkcm9wcGluZyBpdCBhbnl3YXkKKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGhlYWQgd2l0aCBubyBvdGhlciBlbnRyaWVzLiAgR28KKwkgKiBhaGVhZCBhbmQgcHJvY2VzcyBpdC4KKwkgKi8KKwloZWFkLT5ub2RlLmluX3RyZWUgPSAwOworCXJiX2VyYXNlKCZoZWFkLT5ub2RlLnJiX25vZGUsICZkZWxheWVkX3JlZnMtPnJvb3QpOworCisJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcy0tOworCisJLyoKKwkgKiB3ZSBkb24ndCB0YWtlIGEgcmVmIG9uIHRoZSBub2RlIGJlY2F1c2Ugd2UncmUgcmVtb3ZpbmcgaXQgZnJvbSB0aGUKKwkgKiB0cmVlLCBzbyB3ZSBqdXN0IHN0ZWFsIHRoZSByZWYgdGhlIHRyZWUgd2FzIGhvbGRpbmcuCisJICovCisJZGVsYXllZF9yZWZzLT5udW1faGVhZHMtLTsKKwlpZiAobGlzdF9lbXB0eSgmaGVhZC0+Y2x1c3RlcikpCisJCWRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5LS07CisKKwlsaXN0X2RlbF9pbml0KCZoZWFkLT5jbHVzdGVyKTsKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCXJldCA9IHJ1bl9vbmVfZGVsYXllZF9yZWYodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwKKwkJCQkgICZoZWFkLT5ub2RlLCBoZWFkLT5tdXN0X2luc2VydF9yZXNlcnZlZCk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfcHV0X2RlbGF5ZWRfcmVmKCZoZWFkLT5ub2RlKTsKKwlyZXR1cm4gMDsKK291dDoKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGJ0cmZzX2ZyZWVfZXh0ZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMzA3Miw5ICsyNDk0LDI4IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCi0JCQkJICByb290X29iamVjdGlkLCByZWZfZ2VuZXJhdGlvbiwKLQkJCQkgIG93bmVyX29iamVjdGlkLCBwaW4pOworCS8qCisJICogdHJlZSBsb2cgYmxvY2tzIG5ldmVyIGFjdHVhbGx5IGdvIGludG8gdGhlIGV4dGVudCBhbGxvY2F0aW9uCisJICogdHJlZSwganVzdCB1cGRhdGUgcGlubmluZyBpbmZvIGFuZCBleGl0IGVhcmx5LgorCSAqCisJICogZGF0YSBleHRlbnRzIHJlZmVyZW5jZWQgYnkgdGhlIHRyZWUgbG9nIGRvIG5lZWQgdG8gaGF2ZQorCSAqIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgYnVtcGVkLgorCSAqLworCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgorCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpIHsKKwkJLyogdW5sb2NrcyB0aGUgcGlubmVkIG11dGV4ICovCisJCWJ0cmZzX3VwZGF0ZV9waW5uZWRfZXh0ZW50cyhyb290LCBieXRlbnIsIG51bV9ieXRlcywgMSk7CisJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAwKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCisJCQkJICAgICAgIHJvb3Rfb2JqZWN0aWQsIHJlZl9nZW5lcmF0aW9uLAorCQkJCSAgICAgICBvd25lcl9vYmplY3RpZCwKKwkJCQkgICAgICAgQlRSRlNfRFJPUF9ERUxBWUVEX1JFRiwgMSk7CisJCUJVR19PTihyZXQpOworCQlyZXQgPSBjaGVja19yZWZfY2xlYW51cCh0cmFucywgcm9vdCwgYnl0ZW5yKTsKKwkJQlVHX09OKHJldCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxMDMsMjI4ICsyNTQ0LDIzNyBAQAogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gb3JpZ19yb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKLQl1NjQgdG90YWxfbmVlZGVkID0gbnVtX2J5dGVzOwotCXU2NCAqbGFzdF9wdHIgPSBOVUxMOwotCXU2NCBsYXN0X3dhbnRlZCA9IDA7CisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqbGFzdF9wdHIgPSBOVUxMOwogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAgPSBOVUxMOwotCWludCBjaHVua19hbGxvY19kb25lID0gMDsKIAlpbnQgZW1wdHlfY2x1c3RlciA9IDIgKiAxMDI0ICogMTAyNDsKIAlpbnQgYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IE5VTEwsICpjdXIgPSBOVUxMOwotCWludCBsb29wID0gMDsKLQlpbnQgZXh0cmFfbG9vcCA9IDA7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CisJaW50IGxhc3RfcHRyX2xvb3AgPSAwOworCWludCBsb29wID0gMDsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYnRyZnNfc2V0X2tleV90eXBlKGlucywgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKIAlpbnMtPm9iamVjdGlkID0gMDsKIAlpbnMtPm9mZnNldCA9IDA7CiAKKwlzcGFjZV9pbmZvID0gX19maW5kX3NwYWNlX2luZm8ocm9vdC0+ZnNfaW5mbywgZGF0YSk7CisKIAlpZiAob3JpZ19yb290LT5yZWZfY293cyB8fCBlbXB0eV9zaXplKQogCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMTsKIAogCWlmIChkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKLQkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+bGFzdF9hbGxvYzsKKwkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+bWV0YV9hbGxvY19jbHVzdGVyOwogCQlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCiAJCQllbXB0eV9jbHVzdGVyID0gNjQgKiAxMDI0OwogCX0KIAotCWlmICgoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpICYmIGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCi0JCWxhc3RfcHRyID0gJnJvb3QtPmZzX2luZm8tPmxhc3RfZGF0YV9hbGxvYzsKKwlpZiAoKGRhdGEgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSAmJiBidHJmc190ZXN0X29wdChyb290LCBTU0QpKSB7CisJCWxhc3RfcHRyID0gJnJvb3QtPmZzX2luZm8tPmRhdGFfYWxsb2NfY2x1c3RlcjsKKwl9CiAKIAlpZiAobGFzdF9wdHIpIHsKLQkJaWYgKCpsYXN0X3B0cikgewotCQkJaGludF9ieXRlID0gKmxhc3RfcHRyOwotCQkJbGFzdF93YW50ZWQgPSAqbGFzdF9wdHI7Ci0JCX0gZWxzZQotCQkJZW1wdHlfc2l6ZSArPSBlbXB0eV9jbHVzdGVyOwotCX0gZWxzZSB7Ci0JCWVtcHR5X2NsdXN0ZXIgPSAwOworCQlzcGluX2xvY2soJmxhc3RfcHRyLT5sb2NrKTsKKwkJaWYgKGxhc3RfcHRyLT5ibG9ja19ncm91cCkKKwkJCWhpbnRfYnl0ZSA9IGxhc3RfcHRyLT53aW5kb3dfc3RhcnQ7CisJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+bG9jayk7CiAJfQorCiAJc2VhcmNoX3N0YXJ0ID0gbWF4KHNlYXJjaF9zdGFydCwgZmlyc3RfbG9naWNhbF9ieXRlKHJvb3QsIDApKTsKIAlzZWFyY2hfc3RhcnQgPSBtYXgoc2VhcmNoX3N0YXJ0LCBoaW50X2J5dGUpOwogCi0JaWYgKGxhc3Rfd2FudGVkICYmIHNlYXJjaF9zdGFydCAhPSBsYXN0X3dhbnRlZCkgewotCQlsYXN0X3dhbnRlZCA9IDA7Ci0JCWVtcHR5X3NpemUgKz0gZW1wdHlfY2x1c3RlcjsKKwlpZiAoIWxhc3RfcHRyKSB7CisJCWVtcHR5X2NsdXN0ZXIgPSAwOworCQlsb29wID0gMTsKIAl9CiAKLQl0b3RhbF9uZWVkZWQgKz0gZW1wdHlfc2l6ZTsKLQlibG9ja19ncm91cCA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChyb290LT5mc19pbmZvLCBzZWFyY2hfc3RhcnQpOwotCWlmICghYmxvY2tfZ3JvdXApCi0JCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2ZpcnN0X2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCi0JCQkJCQkJICAgICBzZWFyY2hfc3RhcnQpOwotCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhyb290LT5mc19pbmZvLCBkYXRhKTsKKwlpZiAoc2VhcmNoX3N0YXJ0ID09IGhpbnRfYnl0ZSkgeworCQlibG9ja19ncm91cCA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChyb290LT5mc19pbmZvLAorCQkJCQkJICAgICAgIHNlYXJjaF9zdGFydCk7CisJCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSkgeworCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKKwkJCWdvdG8gaGF2ZV9ibG9ja19ncm91cDsKKwkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgeworCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwkJfQorCX0KIAorc2VhcmNoOgogCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7Ci0Jd2hpbGUgKDEpIHsKLQkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmZyZWVfc3BhY2U7Ci0JCS8qCi0JCSAqIHRoZSBvbmx5IHdheSB0aGlzIGhhcHBlbnMgaWYgb3VyIGhpbnQgcG9pbnRzIHRvIGEgYmxvY2sKLQkJICogZ3JvdXAgdGhhdHMgbm90IG9mIHRoZSBwcm9wZXIgdHlwZSwgd2hpbGUgbG9vcGluZyB0aGlzCi0JCSAqIHNob3VsZCBuZXZlciBoYXBwZW4KLQkJICovCi0JCWlmIChlbXB0eV9zaXplKQotCQkJZXh0cmFfbG9vcCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19ncm91cCwgJnNwYWNlX2luZm8tPmJsb2NrX2dyb3VwcywgbGlzdCkgeworCQl1NjQgb2Zmc2V0OwogCi0JCWlmICghYmxvY2tfZ3JvdXApCi0JCQlnb3RvIG5ld19ncm91cF9ub19sb2NrOworCQlhdG9taWNfaW5jKCZibG9ja19ncm91cC0+Y291bnQpOworCQlzZWFyY2hfc3RhcnQgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwogCitoYXZlX2Jsb2NrX2dyb3VwOgogCQlpZiAodW5saWtlbHkoIWJsb2NrX2dyb3VwLT5jYWNoZWQpKSB7CiAJCQltdXRleF9sb2NrKCZibG9ja19ncm91cC0+Y2FjaGVfbXV0ZXgpOwogCQkJcmV0ID0gY2FjaGVfYmxvY2tfZ3JvdXAocm9vdCwgYmxvY2tfZ3JvdXApOwogCQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+Y2FjaGVfbXV0ZXgpOwotCQkJaWYgKHJldCkKKwkJCWlmIChyZXQpIHsKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCWJyZWFrOworCQkJfQogCQl9CiAKLQkJbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJaWYgKHVubGlrZWx5KCFibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSkpCi0JCQlnb3RvIG5ld19ncm91cDsKLQogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPnJvKSkKLQkJCWdvdG8gbmV3X2dyb3VwOworCQkJZ290byBsb29wOwogCi0JCWZyZWVfc3BhY2UgPSBidHJmc19maW5kX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKLQkJCQkJCSAgIHRvdGFsX25lZWRlZCk7Ci0JCWlmIChmcmVlX3NwYWNlKSB7Ci0JCQl1NjQgc3RhcnQgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwotCQkJdTY0IGVuZCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgKwotCQkJCWJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0OwotCi0JCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgZnJlZV9zcGFjZS0+b2Zmc2V0KTsKLQotCQkJLyogbW92ZSBvbiB0byB0aGUgbmV4dCBncm91cCAqLwotCQkJaWYgKHNlYXJjaF9zdGFydCArIG51bV9ieXRlcyA+PSBzZWFyY2hfZW5kKQotCQkJCWdvdG8gbmV3X2dyb3VwOwotCi0JCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCi0JCQlpZiAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID4gZW5kKQotCQkJCWdvdG8gbmV3X2dyb3VwOwotCi0JCQlpZiAobGFzdF93YW50ZWQgJiYgc2VhcmNoX3N0YXJ0ICE9IGxhc3Rfd2FudGVkKSB7Ci0JCQkJdG90YWxfbmVlZGVkICs9IGVtcHR5X2NsdXN0ZXI7Ci0JCQkJZW1wdHlfc2l6ZSArPSBlbXB0eV9jbHVzdGVyOwotCQkJCWxhc3Rfd2FudGVkID0gMDsKLQkJCQkvKgotCQkJCSAqIGlmIHNlYXJjaF9zdGFydCBpcyBzdGlsbCBpbiB0aGlzIGJsb2NrIGdyb3VwCi0JCQkJICogdGhlbiB3ZSBqdXN0IHJlLXNlYXJjaCB0aGlzIGJsb2NrIGdyb3VwCi0JCQkJICovCi0JCQkJaWYgKHNlYXJjaF9zdGFydCA+PSBzdGFydCAmJgotCQkJCSAgICBzZWFyY2hfc3RhcnQgPCBlbmQpIHsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQkvKiBlbHNlIHdlIGdvIHRvIHRoZSBuZXh0IGJsb2NrIGdyb3VwICovCi0JCQkJZ290byBuZXdfZ3JvdXA7Ci0JCQl9Ci0KLQkJCWlmIChleGNsdWRlX25yID4gMCAmJgotCQkJICAgIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPiBleGNsdWRlX3N0YXJ0ICYmCi0JCQkgICAgIHNlYXJjaF9zdGFydCA8IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yKSkgewotCQkJCXNlYXJjaF9zdGFydCA9IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yOwotCQkJCS8qCi0JCQkJICogaWYgc2VhcmNoX3N0YXJ0IGlzIHN0aWxsIGluIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKiB0aGVuIHdlIGp1c3QgcmUtc2VhcmNoIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKi8KLQkJCQlpZiAoc2VhcmNoX3N0YXJ0ID49IHN0YXJ0ICYmCi0JCQkJICAgIHNlYXJjaF9zdGFydCA8IGVuZCkgewotCQkJCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JCQkJCWxhc3Rfd2FudGVkID0gMDsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJLyogZWxzZSB3ZSBnbyB0byB0aGUgbmV4dCBibG9jayBncm91cCAqLwotCQkJCWdvdG8gbmV3X2dyb3VwOwotCQkJfQotCi0JCQlpbnMtPm9iamVjdGlkID0gc2VhcmNoX3N0YXJ0OwotCQkJaW5zLT5vZmZzZXQgPSBudW1fYnl0ZXM7Ci0KLQkJCWJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2xvY2soYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKLQkJCQkJCSAgICAgbnVtX2J5dGVzKTsKLQkJCS8qIHdlIGFyZSBhbGwgZ29vZCwgbGV0cyByZXR1cm4gKi8KLQkJCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJCWJyZWFrOwotCQl9Ci1uZXdfZ3JvdXA6Ci0JCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJYmxvY2tfZ3JvdXAgPSBOVUxMOwotbmV3X2dyb3VwX25vX2xvY2s6Ci0JCS8qIGRvbid0IHRyeSB0byBjb21wYXJlIG5ldyBhbGxvY2F0aW9ucyBhZ2FpbnN0IHRoZQotCQkgKiBsYXN0IGFsbG9jYXRpb24gYW55IG1vcmUKLQkJICovCi0JCWxhc3Rfd2FudGVkID0gMDsKLQotCQkvKgotCQkgKiBIZXJlJ3MgaG93IHRoaXMgd29ya3MuCi0JCSAqIGxvb3AgPT0gMDogd2Ugd2VyZSBzZWFyY2hpbmcgYSBibG9jayBncm91cCB2aWEgYSBoaW50Ci0JCSAqCQlhbmQgZGlkbid0IGZpbmQgYW55dGhpbmcsIHNvIHdlIHN0YXJ0IGF0Ci0JCSAqCQl0aGUgaGVhZCBvZiB0aGUgYmxvY2sgZ3JvdXBzIGFuZCBrZWVwIHNlYXJjaGluZwotCQkgKiBsb29wID09IDE6IHdlJ3JlIHNlYXJjaGluZyB0aHJvdWdoIGFsbCBvZiB0aGUgYmxvY2sgZ3JvdXBzCi0JCSAqCQlpZiB3ZSBoaXQgdGhlIGhlYWQgYWdhaW4gd2UgaGF2ZSBzZWFyY2hlZAotCQkgKgkJYWxsIG9mIHRoZSBibG9jayBncm91cHMgZm9yIHRoaXMgc3BhY2UgYW5kIHdlCi0JCSAqCQluZWVkIHRvIHRyeSBhbmQgYWxsb2NhdGUsIGlmIHdlIGNhbnQgZXJyb3Igb3V0LgotCQkgKiBsb29wID09IDI6IHdlIGFsbG9jYXRlZCBtb3JlIHNwYWNlIGFuZCBhcmUgbG9vcGluZyB0aHJvdWdoCi0JCSAqCQlhbGwgb2YgdGhlIGJsb2NrIGdyb3VwcyBhZ2Fpbi4KLQkJICovCi0JCWlmIChsb29wID09IDApIHsKLQkJCWhlYWQgPSAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzOwotCQkJY3VyID0gaGVhZC0+bmV4dDsKLQkJCWxvb3ArKzsKLQkJfSBlbHNlIGlmIChsb29wID09IDEgJiYgY3VyID09IGhlYWQpIHsKLQkJCWludCBrZWVwX2dvaW5nOwotCi0JCQkvKiBhdCB0aGlzIHBvaW50IHdlIGdpdmUgdXAgb24gdGhlIGVtcHR5X3NpemUKLQkJCSAqIGFsbG9jYXRpb25zIGFuZCBqdXN0IHRyeSB0byBhbGxvY2F0ZSB0aGUgbWluCi0JCQkgKiBzcGFjZS4KLQkJCSAqCi0JCQkgKiBUaGUgZXh0cmFfbG9vcCBmaWVsZCB3YXMgc2V0IGlmIGFuIGVtcHR5X3NpemUKLQkJCSAqIGFsbG9jYXRpb24gd2FzIGF0dGVtcHRlZCBhYm92ZSwgYW5kIGlmIHRoaXMKLQkJCSAqIGlzIHRyeSB3ZSBuZWVkIHRvIHRyeSB0aGUgbG9vcCBhZ2FpbiB3aXRob3V0Ci0JCQkgKiB0aGUgYWRkaXRpb25hbCBlbXB0eV9zaXplLgorCQlpZiAobGFzdF9wdHIpIHsKKwkJCS8qCisJCQkgKiB0aGUgcmVmaWxsIGxvY2sga2VlcHMgb3V0IG90aGVyCisJCQkgKiBwZW9wbGUgdHJ5aW5nIHRvIHN0YXJ0IGEgbmV3IGNsdXN0ZXIKIAkJCSAqLwotCQkJdG90YWxfbmVlZGVkIC09IGVtcHR5X3NpemU7Ci0JCQllbXB0eV9zaXplID0gMDsKLQkJCWtlZXBfZ29pbmcgPSBleHRyYV9sb29wOwotCQkJbG9vcCsrOworCQkJc3Bpbl9sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOworCQkJb2Zmc2V0ID0gYnRyZnNfYWxsb2NfZnJvbV9jbHVzdGVyKGJsb2NrX2dyb3VwLCBsYXN0X3B0ciwKKwkJCQkJCSBudW1fYnl0ZXMsIHNlYXJjaF9zdGFydCk7CisJCQlpZiAob2Zmc2V0KSB7CisJCQkJLyogd2UgaGF2ZSBhIGJsb2NrLCB3ZSdyZSBkb25lICovCisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQkJZ290byBjaGVja3M7CisJCQl9CiAKLQkJCWlmIChhbGxvd2VkX2NodW5rX2FsbG9jICYmICFjaHVua19hbGxvY19kb25lKSB7Ci0JCQkJdXBfcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7Ci0JCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMSk7Ci0JCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBsb29wX2NoZWNrOwotCQkJCWhlYWQgPSAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzOworCQkJc3Bpbl9sb2NrKCZsYXN0X3B0ci0+bG9jayk7CisJCQkvKgorCQkJICogd2hvb3BzLCB0aGlzIGNsdXN0ZXIgZG9lc24ndCBhY3R1YWxseSBwb2ludCB0bworCQkJICogdGhpcyBibG9jayBncm91cC4gIEdldCBhIHJlZiBvbiB0aGUgYmxvY2sKKwkJCSAqIGdyb3VwIGlzIGRvZXMgcG9pbnQgdG8gYW5kIHRyeSBhZ2FpbgorCQkJICovCisJCQlpZiAoIWxhc3RfcHRyX2xvb3AgJiYgbGFzdF9wdHItPmJsb2NrX2dyb3VwICYmCisJCQkgICAgbGFzdF9wdHItPmJsb2NrX2dyb3VwICE9IGJsb2NrX2dyb3VwKSB7CisKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCQkJCWJsb2NrX2dyb3VwID0gbGFzdF9wdHItPmJsb2NrX2dyb3VwOworCQkJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPnJlZmlsbF9sb2NrKTsKKworCQkJCWxhc3RfcHRyX2xvb3AgPSAxOworCQkJCXNlYXJjaF9zdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CisJCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5sb2NrKTsKKworCQkJLyoKKwkJCSAqIHRoaXMgY2x1c3RlciBkaWRuJ3Qgd29yayBvdXQsIGZyZWUgaXQgYW5kCisJCQkgKiBzdGFydCBvdmVyCisJCQkgKi8KKwkJCWJ0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoTlVMTCwgbGFzdF9wdHIpOworCisJCQlsYXN0X3B0cl9sb29wID0gMDsKKworCQkJLyogYWxsb2NhdGUgYSBjbHVzdGVyIGluIHRoaXMgYmxvY2sgZ3JvdXAgKi8KKwkJCXJldCA9IGJ0cmZzX2ZpbmRfc3BhY2VfY2x1c3Rlcih0cmFucywKKwkJCQkJICAgICAgIGJsb2NrX2dyb3VwLCBsYXN0X3B0ciwKKwkJCQkJICAgICAgIG9mZnNldCwgbnVtX2J5dGVzLAorCQkJCQkgICAgICAgZW1wdHlfY2x1c3RlciArIGVtcHR5X3NpemUpOworCQkJaWYgKHJldCA9PSAwKSB7CiAJCQkJLyoKLQkJCQkgKiB3ZSd2ZSBhbGxvY2F0ZWQgYSBuZXcgY2h1bmssIGtlZXAKLQkJCQkgKiB0cnlpbmcKKwkJCQkgKiBub3cgcHVsbCBvdXIgYWxsb2NhdGlvbiBvdXQgb2YgdGhpcworCQkJCSAqIGNsdXN0ZXIKIAkJCQkgKi8KLQkJCQlrZWVwX2dvaW5nID0gMTsKLQkJCQljaHVua19hbGxvY19kb25lID0gMTsKLQkJCX0gZWxzZSBpZiAoIWFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKLQkJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCQkJb2Zmc2V0ID0gYnRyZnNfYWxsb2NfZnJvbV9jbHVzdGVyKGJsb2NrX2dyb3VwLAorCQkJCQkJICBsYXN0X3B0ciwgbnVtX2J5dGVzLAorCQkJCQkJICBzZWFyY2hfc3RhcnQpOworCQkJCWlmIChvZmZzZXQpIHsKKwkJCQkJLyogd2UgZm91bmQgb25lLCBwcm9jZWVkICovCisJCQkJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOworCQkJCQlnb3RvIGNoZWNrczsKKwkJCQl9CiAJCQl9Ci1sb29wX2NoZWNrOgotCQkJaWYgKGtlZXBfZ29pbmcpIHsKLQkJCQljdXIgPSBoZWFkLT5uZXh0OwotCQkJCWV4dHJhX2xvb3AgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBhdCB0aGlzIHBvaW50IHdlIGVpdGhlciBkaWRuJ3QgZmluZCBhIGNsdXN0ZXIKKwkJCSAqIG9yIHdlIHdlcmVuJ3QgYWJsZSB0byBhbGxvY2F0ZSBhIGJsb2NrIGZyb20gb3VyCisJCQkgKiBjbHVzdGVyLiAgRnJlZSB0aGUgY2x1c3RlciB3ZSd2ZSBiZWVuIHRyeWluZworCQkJICogdG8gdXNlLCBhbmQgZ28gdG8gdGhlIG5leHQgYmxvY2sgZ3JvdXAKKwkJCSAqLworCQkJaWYgKGxvb3AgPCAyKSB7CisJCQkJYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZShOVUxMLAorCQkJCQkJCQkgICBsYXN0X3B0cik7CisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQkJZ290byBsb29wOwogCQkJfQotCQl9IGVsc2UgaWYgKGN1ciA9PSBoZWFkKSB7Ci0JCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOwogCQl9CiAKLQkJYmxvY2tfZ3JvdXAgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlLAotCQkJCQkgbGlzdCk7Ci0JCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJCW9mZnNldCA9IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKGJsb2NrX2dyb3VwLCBzZWFyY2hfc3RhcnQsCisJCQkJCQkgICAgbnVtX2J5dGVzLCBlbXB0eV9zaXplKTsKKwkJaWYgKCFvZmZzZXQpCisJCQlnb3RvIGxvb3A7CitjaGVja3M6CisJCXNlYXJjaF9zdGFydCA9IHN0cmlwZV9hbGlnbihyb290LCBvZmZzZXQpOwogCi0JCXNlYXJjaF9zdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7Ci0JCWN1ciA9IGN1ci0+bmV4dDsKKwkJLyogbW92ZSBvbiB0byB0aGUgbmV4dCBncm91cCAqLworCQlpZiAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID49IHNlYXJjaF9lbmQpIHsKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIG51bV9ieXRlcyk7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCisJCWlmIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPgorCQkgICAgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArIGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0KSB7CisJCQlidHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBudW1fYnl0ZXMpOworCQkJZ290byBsb29wOworCQl9CisKKwkJaWYgKGV4Y2x1ZGVfbnIgPiAwICYmCisJCSAgICAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID4gZXhjbHVkZV9zdGFydCAmJgorCQkgICAgIHNlYXJjaF9zdGFydCA8IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yKSkgeworCQkJc2VhcmNoX3N0YXJ0ID0gZXhjbHVkZV9zdGFydCArIGV4Y2x1ZGVfbnI7CisKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIG51bV9ieXRlcyk7CisJCQkvKgorCQkJICogaWYgc2VhcmNoX3N0YXJ0IGlzIHN0aWxsIGluIHRoaXMgYmxvY2sgZ3JvdXAKKwkJCSAqIHRoZW4gd2UganVzdCByZS1zZWFyY2ggdGhpcyBibG9jayBncm91cAorCQkJICovCisJCQlpZiAoc2VhcmNoX3N0YXJ0ID49IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgJiYKKwkJCSAgICBzZWFyY2hfc3RhcnQgPCAoYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArCisJCQkJCSAgICBibG9ja19ncm91cC0+a2V5Lm9mZnNldCkpCisJCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQkJZ290byBsb29wOworCQl9CisKKwkJaW5zLT5vYmplY3RpZCA9IHNlYXJjaF9zdGFydDsKKwkJaW5zLT5vZmZzZXQgPSBudW1fYnl0ZXM7CisKKwkJaWYgKG9mZnNldCA8IHNlYXJjaF9zdGFydCkKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsCisJCQkJCSAgICAgc2VhcmNoX3N0YXJ0IC0gb2Zmc2V0KTsKKwkJQlVHX09OKG9mZnNldCA+IHNlYXJjaF9zdGFydCk7CisKKwkJLyogd2UgYXJlIGFsbCBnb29kLCBsZXRzIHJldHVybiAqLworCQlicmVhazsKK2xvb3A6CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJfQorCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOworCisJLyogbG9vcCA9PSAwLCB0cnkgdG8gZmluZCBhIGNsdXN0ZXJlZCBhbGxvYyBpbiBldmVyeSBibG9jayBncm91cAorCSAqIGxvb3AgPT0gMSwgdHJ5IGFnYWluIGFmdGVyIGZvcmNpbmcgYSBjaHVuayBhbGxvY2F0aW9uCisJICogbG9vcCA9PSAyLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkgYWdhaW4KKwkgKi8KKwlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IDMgJiYKKwkgICAgKGVtcHR5X3NpemUgfHwgZW1wdHlfY2x1c3RlciB8fCBhbGxvd2VkX2NodW5rX2FsbG9jKSkgeworCQlpZiAobG9vcCA+PSAyKSB7CisJCQllbXB0eV9zaXplID0gMDsKKwkJCWVtcHR5X2NsdXN0ZXIgPSAwOworCQl9CisKKwkJaWYgKGFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKKwkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCBudW1fYnl0ZXMgKworCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMSk7CisJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJfQorCisJCWlmIChsb29wIDwgMykgeworCQkJbG9vcCsrOworCQkJZ290byBzZWFyY2g7CisJCX0KKwkJcmV0ID0gLUVOT1NQQzsKKwl9IGVsc2UgaWYgKCFpbnMtPm9iamVjdGlkKSB7CisJCXJldCA9IC1FTk9TUEM7CiAJfQogCiAJLyogd2UgZm91bmQgd2hhdCB3ZSBuZWVkZWQgKi8KQEAgLTMzMzIsMjEgKzI3ODIsMTAgQEAKIAkJaWYgKCEoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpKQogCQkJdHJhbnMtPmJsb2NrX2dyb3VwID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKIAotCQlpZiAobGFzdF9wdHIpCi0JCQkqbGFzdF9wdHIgPSBpbnMtPm9iamVjdGlkICsgaW5zLT5vZmZzZXQ7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCXJldCA9IDA7Ci0JfSBlbHNlIGlmICghcmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgc2VhcmNoaW5nIGZvciAlbGx1IGJ5dGVzLCAiCi0JCSAgICAgICAibnVtX2J5dGVzICVsbHUsIGxvb3AgJWQsIGFsbG93ZWRfYWxsb2MgJWRcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX25lZWRlZCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnVtX2J5dGVzLAotCQkgICAgICAgbG9vcCwgYWxsb3dlZF9jaHVua19hbGxvYyk7Ci0JCXJldCA9IC1FTk9TUEM7CiAJfQotCWlmIChibG9ja19ncm91cCkKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAotCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NTEsNyArMjg5MCw3IEBACiAJcmV0ID0gYnRyZnNfZGlzY2FyZF9leHRlbnQocm9vdCwgc3RhcnQsIGxlbik7CiAKIAlidHJmc19hZGRfZnJlZV9zcGFjZShjYWNoZSwgc3RhcnQsIGxlbik7Ci0JcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIHN0YXJ0LCBsZW4sIDApOwogCiAJcmV0dXJuIHJldDsKQEAgLTM0NzUsMTAgKzI5MTQsMTAgQEAKIHN0YXRpYyBpbnQgX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHBhcmVudCwKIAkJCQkJIHU2NCByb290X29iamVjdGlkLCB1NjQgcmVmX2dlbmVyYXRpb24sCi0JCQkJCSB1NjQgb3duZXIsIHN0cnVjdCBidHJmc19rZXkgKmlucykKKwkJCQkJIHU2NCBvd25lciwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLAorCQkJCQkgaW50IHJlZl9tb2QpCiB7CiAJaW50IHJldDsKLQlpbnQgcGVuZGluZ19yZXQ7CiAJdTY0IHN1cGVyX3VzZWQ7CiAJdTY0IHJvb3RfdXNlZDsKIAl1NjQgbnVtX2J5dGVzID0gaW5zLT5vZmZzZXQ7CkBAIC0zNTAzLDMzICsyOTQyLDYgQEAKIAlidHJmc19zZXRfcm9vdF91c2VkKCZyb290LT5yb290X2l0ZW0sIHJvb3RfdXNlZCArIG51bV9ieXRlcyk7CiAJc3Bpbl91bmxvY2soJmluZm8tPmRlbGFsbG9jX2xvY2spOwogCi0JaWYgKHJvb3QgPT0gZXh0ZW50X3Jvb3QpIHsKLQkJc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpleHRlbnRfb3A7Ci0KLQkJZXh0ZW50X29wID0ga21hbGxvYyhzaXplb2YoKmV4dGVudF9vcCksIEdGUF9OT0ZTKTsKLQkJQlVHX09OKCFleHRlbnRfb3ApOwotCi0JCWV4dGVudF9vcC0+dHlwZSA9IFBFTkRJTkdfRVhURU5UX0lOU0VSVDsKLQkJZXh0ZW50X29wLT5ieXRlbnIgPSBpbnMtPm9iamVjdGlkOwotCQlleHRlbnRfb3AtPm51bV9ieXRlcyA9IGlucy0+b2Zmc2V0OwotCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJZXh0ZW50X29wLT5vcmlnX3BhcmVudCA9IDA7Ci0JCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQlleHRlbnRfb3AtPm9yaWdfZ2VuZXJhdGlvbiA9IDA7Ci0JCWV4dGVudF9vcC0+bGV2ZWwgPSAoaW50KW93bmVyOwotCQlJTklUX0xJU1RfSEVBRCgmZXh0ZW50X29wLT5saXN0KTsKLQkJZXh0ZW50X29wLT5kZWwgPSAwOwotCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQlzZXRfZXh0ZW50X2JpdHMoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsIGlucy0+b2JqZWN0aWQsCi0JCQkJaW5zLT5vYmplY3RpZCArIGlucy0+b2Zmc2V0IC0gMSwKLQkJCQlFWFRFTlRfV1JJVEVCQUNLLCBHRlBfTk9GUyk7Ci0JCXNldF9zdGF0ZV9wcml2YXRlKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLAotCQkJCSAgaW5zLT5vYmplY3RpZCwgKHVuc2lnbmVkIGxvbmcpZXh0ZW50X29wKTsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJZ290byB1cGRhdGVfYmxvY2s7Ci0JfQotCiAJbWVtY3B5KCZrZXlzWzBdLCBpbnMsIHNpemVvZigqaW5zKSk7CiAJa2V5c1sxXS5vYmplY3RpZCA9IGlucy0+b2JqZWN0aWQ7CiAJa2V5c1sxXS50eXBlID0gQlRSRlNfRVhURU5UX1JFRl9LRVk7CkBAIC0zNTQwLDM3ICsyOTUyLDMxIEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyh0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsIGtleXMsCiAJCQkJICAgICAgIHNpemVzLCAyKTsKIAlCVUdfT04ocmV0KTsKIAogCWV4dGVudF9pdGVtID0gYnRyZnNfaXRlbV9wdHIocGF0aC0+bm9kZXNbMF0sIHBhdGgtPnNsb3RzWzBdLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtKTsKLQlidHJmc19zZXRfZXh0ZW50X3JlZnMocGF0aC0+bm9kZXNbMF0sIGV4dGVudF9pdGVtLCAxKTsKKwlidHJmc19zZXRfZXh0ZW50X3JlZnMocGF0aC0+bm9kZXNbMF0sIGV4dGVudF9pdGVtLCByZWZfbW9kKTsKIAlyZWYgPSBidHJmc19pdGVtX3B0cihwYXRoLT5ub2Rlc1swXSwgcGF0aC0+c2xvdHNbMF0gKyAxLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZik7CiAKIAlidHJmc19zZXRfcmVmX3Jvb3QocGF0aC0+bm9kZXNbMF0sIHJlZiwgcm9vdF9vYmplY3RpZCk7CiAJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKHBhdGgtPm5vZGVzWzBdLCByZWYsIHJlZl9nZW5lcmF0aW9uKTsKIAlidHJmc19zZXRfcmVmX29iamVjdGlkKHBhdGgtPm5vZGVzWzBdLCByZWYsIG93bmVyKTsKLQlidHJmc19zZXRfcmVmX251bV9yZWZzKHBhdGgtPm5vZGVzWzBdLCByZWYsIDEpOworCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMocGF0aC0+bm9kZXNbMF0sIHJlZiwgcmVmX21vZCk7CiAKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiAKIAl0cmFucy0+YWxsb2NfZXhjbHVkZV9zdGFydCA9IDA7CiAJdHJhbnMtPmFsbG9jX2V4Y2x1ZGVfbnIgPSAwOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlmaW5pc2hfY3VycmVudF9pbnNlcnQodHJhbnMsIGV4dGVudF9yb290LCAwKTsKLQlwZW5kaW5nX3JldCA9IGRlbF9wZW5kaW5nX2V4dGVudHModHJhbnMsIGV4dGVudF9yb290LCAwKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCWlmIChwZW5kaW5nX3JldCkgewotCQlyZXQgPSBwZW5kaW5nX3JldDsKLQkJZ290byBvdXQ7Ci0JfQogCi11cGRhdGVfYmxvY2s6CiAJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCByb290LCBpbnMtPm9iamVjdGlkLAogCQkJCSBpbnMtPm9mZnNldCwgMSwgMCk7CiAJaWYgKHJldCkgewpAQCAtMzU5Miw5ICsyOTk4LDEyIEBACiAKIAlpZiAocm9vdF9vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCkKIAkJcmV0dXJuIDA7Ci0JcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKLQkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zKTsKLQl1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhyb290LCBpbnMtPm9iamVjdGlkLCBpbnMtPm9mZnNldCwgMCk7CisKKwlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGlucy0+b2JqZWN0aWQsCisJCQkJICAgIGlucy0+b2Zmc2V0LCBwYXJlbnQsIHJvb3Rfb2JqZWN0aWQsCisJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwKKwkJCQkgICAgQlRSRlNfQUREX0RFTEFZRURfRVhURU5ULCAwKTsKKwlCVUdfT04ocmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjE5LDkgKzMwMjgsOSBAQAogCXJldCA9IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbnMtPm9iamVjdGlkLAogCQkJCSAgICAgIGlucy0+b2Zmc2V0KTsKIAlCVUdfT04ocmV0KTsKLQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKLQkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zKTsKKwkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zLCAxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjQwLDIwICszMDQ5LDE4IEBACiAJCSAgICAgICB1NjQgc2VhcmNoX2VuZCwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLCB1NjQgZGF0YSkKIHsKIAlpbnQgcmV0OwotCiAJcmV0ID0gX19idHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwgbnVtX2J5dGVzLAogCQkJCSAgICAgbWluX2FsbG9jX3NpemUsIGVtcHR5X3NpemUsIGhpbnRfYnl0ZSwKIAkJCQkgICAgIHNlYXJjaF9lbmQsIGlucywgZGF0YSk7CiAJQlVHX09OKHJldCk7CiAJaWYgKHJvb3Rfb2JqZWN0aWQgIT0gQlRSRlNfVFJFRV9MT0dfT0JKRUNUSUQpIHsKLQkJcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwKLQkJCQkJcm9vdF9vYmplY3RpZCwgcmVmX2dlbmVyYXRpb24sCi0JCQkJCW93bmVyX29iamVjdGlkLCBpbnMpOworCQlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGlucy0+b2JqZWN0aWQsCisJCQkJCSAgICBpbnMtPm9mZnNldCwgcGFyZW50LCByb290X29iamVjdGlkLAorCQkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCQkgICAgQlRSRlNfQUREX0RFTEFZRURfRVhURU5ULCAwKTsKIAkJQlVHX09OKHJldCk7Ci0KLQl9IGVsc2UgewotCQl1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhyb290LCBpbnMtPm9iamVjdGlkLCBpbnMtPm9mZnNldCwgMSk7CiAJfQorCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIGlucy0+b2JqZWN0aWQsIGlucy0+b2Zmc2V0LCAxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzg5LDcgKzMxOTYsNyBAQAogCiAJCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgc2xvdCwgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCi0JCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGRpc2tfYnl0ZW5yLAorCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgZGlza19ieXRlbnIsCiAJCQkJYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMobGVhZiwgZmkpLAogCQkJCWxlYWYtPnN0YXJ0LCBsZWFmX293bmVyLCBsZWFmX2dlbmVyYXRpb24sCiAJCQkJa2V5Lm9iamVjdGlkLCAwKTsKQEAgLTM4MjksNyArMzIzNiw3IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IHJlZi0+bnJpdGVtczsgaSsrKSB7CiAJCWluZm8gPSByZWYtPmV4dGVudHMgKyBzb3J0ZWRbaV0uc2xvdDsKLQkJcmV0ID0gX19idHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgaW5mby0+Ynl0ZW5yLAorCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgaW5mby0+Ynl0ZW5yLAogCQkJCQkgIGluZm8tPm51bV9ieXRlcywgcmVmLT5ieXRlbnIsCiAJCQkJCSAgcmVmLT5vd25lciwgcmVmLT5nZW5lcmF0aW9uLAogCQkJCQkgIGluZm8tPm9iamVjdGlkLCAwKTsKQEAgLTM4NDYsMTIgKzMyNTMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgc3RhcnQsCitzdGF0aWMgaW50IGRyb3Bfc25hcF9sb29rdXBfcmVmY291bnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHN0YXJ0LAogCQkJCSAgICAgdTY0IGxlbiwgdTMyICpyZWZzKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X3JlZihOVUxMLCByb290LCBzdGFydCwgbGVuLCByZWZzKTsKKwlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgc3RhcnQsIGxlbiwgcmVmcyk7CiAJQlVHX09OKHJldCk7CiAKICNpZiAwIC8qIHNvbWUgZGVidWdnaW5nIGNvZGUgaW4gY2FzZSB3ZSBzZWUgcHJvYmxlbXMgaGVyZSAqLwpAQCAtMzk1OSw3ICszMzY3LDggQEAKIAkJICogd2UganVzdCBkZWNyZW1lbnQgaXQgYmVsb3cgYW5kIGRvbid0IHVwZGF0ZSBhbnkKIAkJICogb2YgdGhlIHJlZnMgdGhlIGxlYWYgcG9pbnRzIHRvLgogCQkgKi8KLQkJcmV0ID0gZHJvcF9zbmFwX2xvb2t1cF9yZWZjb3VudChyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgJnJlZnMpOworCQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCQkJCQlibG9ja3NpemUsICZyZWZzKTsKIAkJQlVHX09OKHJldCk7CiAJCWlmIChyZWZzICE9IDEpCiAJCQljb250aW51ZTsKQEAgLTQwMTAsNyArMzQxOSw3IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IHJlZmk7IGkrKykgewogCQlieXRlbnIgPSBzb3J0ZWRbaV0uYnl0ZW5yOwotCQlyZXQgPSBfX2J0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCiAJCQkJCWJsb2Nrc2l6ZSwgZWItPnN0YXJ0LAogCQkJCQlyb290X293bmVyLCByb290X2dlbiwgMCwgMSk7CiAJCUJVR19PTihyZXQpOwpAQCAtNDA1Myw3ICszNDYyLDcgQEAKIAogCVdBUk5fT04oKmxldmVsIDwgMCk7CiAJV0FSTl9PTigqbGV2ZWwgPj0gQlRSRlNfTUFYX0xFVkVMKTsKLQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHJvb3QsIHBhdGgtPm5vZGVzWypsZXZlbF0tPnN0YXJ0LAorCXJldCA9IGRyb3Bfc25hcF9sb29rdXBfcmVmY291bnQodHJhbnMsIHJvb3QsIHBhdGgtPm5vZGVzWypsZXZlbF0tPnN0YXJ0LAogCQkJCXBhdGgtPm5vZGVzWypsZXZlbF0tPmxlbiwgJnJlZnMpOwogCUJVR19PTihyZXQpOwogCWlmIChyZWZzID4gMSkKQEAgLTQxMDQsNyArMzUxMyw4IEBACiAJCXB0cl9nZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGN1ciwgcGF0aC0+c2xvdHNbKmxldmVsXSk7CiAJCWJsb2Nrc2l6ZSA9IGJ0cmZzX2xldmVsX3NpemUocm9vdCwgKmxldmVsIC0gMSk7CiAKLQkJcmV0ID0gZHJvcF9zbmFwX2xvb2t1cF9yZWZjb3VudChyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgJnJlZnMpOworCQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCQkJCQlibG9ja3NpemUsICZyZWZzKTsKIAkJQlVHX09OKHJldCk7CiAKIAkJLyoKQEAgLTQxMTksNyArMzUyOSw3IEBACiAJCQlyb290X2dlbiA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKHBhcmVudCk7CiAJCQlwYXRoLT5zbG90c1sqbGV2ZWxdKys7CiAKLQkJCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwKKwkJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCiAJCQkJCQlibG9ja3NpemUsIHBhcmVudC0+c3RhcnQsCiAJCQkJCQlyb290X293bmVyLCByb290X2dlbiwKIAkJCQkJCSpsZXZlbCAtIDEsIDEpOwpAQCAtNDE2NSw3ICszNTc1LDcgQEAKIAkgKiBjbGVhbnVwIGFuZCBmcmVlIHRoZSByZWZlcmVuY2Ugb24gdGhlIGxhc3Qgbm9kZQogCSAqIHdlIHByb2Nlc3NlZAogCSAqLwotCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKIAkJCQkgIHBhcmVudC0+c3RhcnQsIHJvb3Rfb3duZXIsIHJvb3RfZ2VuLAogCQkJCSAgKmxldmVsLCAxKTsKIAlmcmVlX2V4dGVudF9idWZmZXIocGF0aC0+bm9kZXNbKmxldmVsXSk7CkBAIC00MzU0LDYgKzM3NjQsNyBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCBpOwogCWludCBvcmlnX2xldmVsOworCWludCB1cGRhdGVfY291bnQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3RfaXRlbSAqcm9vdF9pdGVtID0gJnJvb3QtPnJvb3RfaXRlbTsKIAogCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcm9vdC0+ZnNfaW5mby0+ZHJvcF9tdXRleCkpOwpAQCAtNDM5NSw2ICszODA2LDcgQEAKIAkJfQogCX0KIAl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIHVwZGF0ZTsKIAkJd3JldCA9IHdhbGtfZG93bl90cmVlKHRyYW5zLCByb290LCBwYXRoLCAmbGV2ZWwpOwogCQlpZiAod3JldCA+IDApCiAJCQlicmVhazsKQEAgLTQ0MDcsMTIgKzM4MTksMjEgQEAKIAkJCWJyZWFrOwogCQlpZiAod3JldCA8IDApCiAJCQlyZXQgPSB3cmV0OwotCQlpZiAodHJhbnMtPnRyYW5zYWN0aW9uLT5pbl9jb21taXQpIHsKKwkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+aW5fY29tbWl0IHx8CisJCSAgICB0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgewogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWJyZWFrOwogCQl9CiAJCWF0b21pY19pbmMoJnJvb3QtPmZzX2luZm8tPnRocm90dGxlX2dlbik7CiAJCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3Rocm90dGxlKTsKKwkJZm9yICh1cGRhdGVfY291bnQgPSAwOyB1cGRhdGVfY291bnQgPCAxNjsgdXBkYXRlX2NvdW50KyspIHsKKwkJCXVwZGF0ZSA9IHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzOworCQkJdHJhbnMtPmRlbGF5ZWRfcmVmX3VwZGF0ZXMgPSAwOworCQkJaWYgKHVwZGF0ZSkKKwkJCQlidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCB1cGRhdGUpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CiAJfQogCWZvciAoaSA9IDA7IGkgPD0gb3JpZ19sZXZlbDsgaSsrKSB7CiAJCWlmIChwYXRoLT5ub2Rlc1tpXSkgewpAQCAtNTQ1Nyw2ICs0ODc4LDcgQEAKIAkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCXRyYW5zLT50cmFuc2lkLCBrZXkub2JqZWN0aWQpOwogCQlCVUdfT04ocmV0KTsKKwogCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwKIAkJCQkJYnl0ZW5yLCBudW1fYnl0ZXMsIGxlYWYtPnN0YXJ0LAogCQkJCQlidHJmc19oZWFkZXJfb3duZXIobGVhZiksCkBAIC01NzY4LDkgKzUxOTAsNiBAQAogCQkJCXJlZl9wYXRoLCBOVUxMLCBOVUxMKTsKIAlCVUdfT04ocmV0KTsKIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KQotCQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjAzOCw2ICs1NDU3LDcgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pbm9kZSh0cmFucywgcm9vdCwgcGF0aCwgb2JqZWN0aWQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtNjIwOCw2ICs1NjI4LDkgQEAKIAlidHJmc19yZW1vdmVfbGVhZl9yZWZzKGluZm8tPnRyZWVfcm9vdCwgKHU2NCktMSwgMSk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAorCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oaW5mby0+dHJlZV9yb290LCAxKTsKKwlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIGluZm8tPnRyZWVfcm9vdCk7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAkJaWYgKHJldCA8IDApCkBAIC02Mjk0LDcgKzU3MTcsNyBAQAogCVdBUk5fT04oYmxvY2tfZ3JvdXAtPnJlc2VydmVkID4gMCk7CiAJV0FSTl9PTihidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSkgPiAwKTsKIAlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCXB1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAlyZXQgPSAwOwogb3V0OgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTY0MjEsOSArNTg0NCwxMCBAQAogCiAJCWF0b21pY19zZXQoJmNhY2hlLT5jb3VudCwgMSk7CiAJCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+bG9jayk7Ci0JCW11dGV4X2luaXQoJmNhY2hlLT5hbGxvY19tdXRleCk7CisJCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+dHJlZV9sb2NrKTsKIAkJbXV0ZXhfaW5pdCgmY2FjaGUtPmNhY2hlX211dGV4KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jbHVzdGVyX2xpc3QpOwogCQlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgJmNhY2hlLT5pdGVtLAogCQkJCSAgIGJ0cmZzX2l0ZW1fcHRyX29mZnNldChsZWFmLCBwYXRoLT5zbG90c1swXSksCiAJCQkJICAgc2l6ZW9mKGNhY2hlLT5pdGVtKSk7CkBAIC02NDY2LDcgKzU4OTAsNyBAQAogCiAJZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAotCXJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbmV3X2Jsb2NrZ3JvdXAgPSB0cmFucy0+dHJhbnNpZDsKKwlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9IHRyYW5zLT50cmFuc2lkOwogCiAJY2FjaGUgPSBremFsbG9jKHNpemVvZigqY2FjaGUpLCBHRlBfTk9GUyk7CiAJaWYgKCFjYWNoZSkKQEAgLTY0NzcsOSArNTkwMSwxMCBAQAogCWNhY2hlLT5rZXkudHlwZSA9IEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOwogCWF0b21pY19zZXQoJmNhY2hlLT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKLQltdXRleF9pbml0KCZjYWNoZS0+YWxsb2NfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+dHJlZV9sb2NrKTsKIAltdXRleF9pbml0KCZjYWNoZS0+Y2FjaGVfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jbHVzdGVyX2xpc3QpOwogCiAJYnRyZnNfc2V0X2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtLCBieXRlc191c2VkKTsKIAlidHJmc19zZXRfYmxvY2tfZ3JvdXBfY2h1bmtfb2JqZWN0aWQoJmNhY2hlLT5pdGVtLCBjaHVua19vYmplY3RpZCk7CkBAIC02NTAwLDkgKzU5MjUsNiBAQAogCQkJCXNpemVvZihjYWNoZS0+aXRlbSkpOwogCUJVR19PTihyZXQpOwogCi0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcmV0ID0gZGVsX3BlbmRpbmdfZXh0ZW50cyh0cmFucywgZXh0ZW50X3Jvb3QsIDApOwotCUJVR19PTihyZXQpOwogCXNldF9hdmFpbF9hbGxvY19iaXRzKGV4dGVudF9yb290LT5mc19pbmZvLCB0eXBlKTsKIAogCXJldHVybiAwOwpAQCAtNjU0Miw4ICs1OTY0LDggQEAKIAlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwogCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5mdWxsID0gMDsKIAotCXB1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7Ci0JcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgLTEsIDEpOwogCWlmIChyZXQgPiAwKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCBlYmU2YjI5Li5lYjJiZWU4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMjg4NCwyNSArMjg4NCwxOSBAQAogCQlkaXNrbyA9IDA7CiAJCWZsYWdzID0gMDsKIAotCQlzd2l0Y2ggKGVtLT5ibG9ja19zdGFydCkgewotCQljYXNlIEVYVEVOVF9NQVBfTEFTVF9CWVRFOgorCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfTEFTVF9CWVRFKSB7CiAJCQllbmQgPSAxOwogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhURU5UX01BUF9IT0xFOgorCQl9IGVsc2UgaWYgKGVtLT5ibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhURU5UX01BUF9JTkxJTkU6CisJCX0gZWxzZSBpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfSU5MSU5FKSB7CiAJCQlmbGFncyB8PSAoRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSB8CiAJCQkJICBGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEKTsKLQkJCWJyZWFrOwotCQljYXNlIEVYVEVOVF9NQVBfREVMQUxMT0M6CisJCX0gZWxzZSBpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfREVMQUxMT0MpIHsKIAkJCWZsYWdzIHw9IChGSUVNQVBfRVhURU5UX0RFTEFMTE9DIHwKIAkJCQkgIEZJRU1BUF9FWFRFTlRfVU5LTk9XTik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJfSBlbHNlIHsKIAkJCWRpc2tvID0gZW0tPmJsb2NrX3N0YXJ0OwotCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHRlc3RfYml0KEVYVEVOVF9GTEFHX0NPTVBSRVNTRUQsICZlbS0+ZmxhZ3MpKQogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9FTkNPREVEOwpAQCAtMzEyNCwyMCArMzExOCwxNSBAQAogaW50IGNsZWFyX2V4dGVudF9idWZmZXJfZGlydHkoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmViKQogewotCWludCBzZXQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JdTY0IHN0YXJ0ID0gZWItPnN0YXJ0OwotCXU2NCBlbmQgPSBzdGFydCArIGViLT5sZW4gLSAxOwotCi0Jc2V0ID0gY2xlYXJfZXh0ZW50X2RpcnR5KHRyZWUsIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKIAludW1fcGFnZXMgPSBudW1fZXh0ZW50X3BhZ2VzKGViLT5zdGFydCwgZWItPmxlbik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZSA9IGV4dGVudF9idWZmZXJfcGFnZShlYiwgaSk7Ci0JCWlmICghc2V0ICYmICFQYWdlRGlydHkocGFnZSkpCisJCWlmICghUGFnZURpcnR5KHBhZ2UpKQogCQkJY29udGludWU7CiAKIAkJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMzE0NiwyMiArMzEzNSw2IEBACiAJCWVsc2UKIAkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgRVhURU5UX1BBR0VfUFJJVkFURSk7CiAKLQkJLyoKLQkJICogaWYgd2UncmUgb24gdGhlIGxhc3QgcGFnZSBvciB0aGUgZmlyc3QgcGFnZSBhbmQgdGhlCi0JCSAqIGJsb2NrIGlzbid0IGFsaWduZWQgb24gYSBwYWdlIGJvdW5kYXJ5LCBkbyBleHRyYSBjaGVja3MKLQkJICogdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNsZWFuIHBhZ2UgdGhhdCBpcyBwYXJ0aWFsbHkgZGlydHkKLQkJICovCi0JCWlmICgoaSA9PSAwICYmIChlYi0+c3RhcnQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpKSB8fAotCQkgICAgKChpID09IG51bV9wYWdlcyAtIDEpICYmCi0JCSAgICAgKChlYi0+c3RhcnQgKyBlYi0+bGVuKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkpKSB7Ci0JCQlzdGFydCA9ICh1NjQpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKLQkJCWVuZCAgPSBzdGFydCArIFBBR0VfQ0FDSEVfU0laRSAtIDE7Ci0JCQlpZiAodGVzdF9yYW5nZV9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQkJICAgRVhURU5UX0RJUlRZLCAwKSkgewotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9CiAJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwogCQlzcGluX2xvY2tfaXJxKCZwYWdlLT5tYXBwaW5nLT50cmVlX2xvY2spOwogCQlpZiAoIVBhZ2VEaXJ0eShwYWdlKSkgewpAQCAtMzE4NywyOSArMzE2MCwxMyBAQAogewogCXVuc2lnbmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKKwlpbnQgd2FzX2RpcnR5ID0gMDsKIAorCXdhc19kaXJ0eSA9IHRlc3RfYW5kX3NldF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpOwogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHRlbnRfYnVmZmVyX3BhZ2UoZWIsIGkpOwotCQkvKiB3cml0ZXBhZ2UgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgZm9yIHRoZQotCQkgKiBmaXJzdCBwYWdlLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBwYWdlLT5wcml2YXRlIGlzCi0JCSAqIHByb3Blcmx5IHNldC4gIHJlbGVhc2VwYWdlIG1heSBkcm9wIHBhZ2UtPnByaXZhdGUKLQkJICogb24gdXMgaWYgdGhlIHBhZ2UgaXNuJ3QgYWxyZWFkeSBkaXJ0eS4KLQkJICovCi0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYgKGkgPT0gMCkgewotCQkJc2V0X3BhZ2VfZXh0ZW50X2hlYWQocGFnZSwgZWItPmxlbik7Ci0JCX0gZWxzZSBpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYKLQkJCSAgIHBhZ2UtPnByaXZhdGUgIT0gRVhURU5UX1BBR0VfUFJJVkFURSkgewotCQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKIAkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKSk7Ci0JCXNldF9leHRlbnRfZGlydHkodHJlZSwgcGFnZV9vZmZzZXQocGFnZSksCi0JCQkJIHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgUEFHRV9DQUNIRV9TSVpFIC0gMSwKLQkJCQkgR0ZQX05PRlMpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHdhc19kaXJ0eTsKIH0KIAogaW50IGNsZWFyX2V4dGVudF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLApAQCAtMzc4OSw2ICszNzQ2LDEwIEBACiAJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KKwlpZiAodGVzdF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KIAkvKiBhdCB0aGlzIHBvaW50IHdlIGNhbiBzYWZlbHkgcmVsZWFzZSB0aGUgZXh0ZW50IGJ1ZmZlciAqLwogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDFmOWRmODguLjViYzIwYWIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0yNSw2ICsyNSw3IEBACiAvKiB0aGVzZSBhcmUgYml0IG51bWJlcnMgZm9yIHRlc3Qvc2V0IGJpdCAqLwogI2RlZmluZSBFWFRFTlRfQlVGRkVSX1VQVE9EQVRFIDAKICNkZWZpbmUgRVhURU5UX0JVRkZFUl9CTE9DS0lORyAxCisjZGVmaW5lIEVYVEVOVF9CVUZGRVJfRElSVFkgMgogCiAvKgogICogcGFnZS0+cHJpdmF0ZSB2YWx1ZXMuICBFdmVyeSBwYWdlIHRoYXQgaXMgY29udHJvbGxlZCBieSB0aGUgZXh0ZW50CkBAIC0yNTQsNiArMjU1LDggQEAKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgc2V0X2V4dGVudF9idWZmZXJfZGlydHkoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIpOworaW50IHRlc3RfZXh0ZW50X2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCisJCQkgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgc2V0X2V4dGVudF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgY2xlYXJfZXh0ZW50X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggNTBkYTY5ZC4uYjE4NzkxNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjM0LDcgKzIzNCw2IEBACiAJcmIgPSB0cmVlX2luc2VydCgmdHJlZS0+bWFwLCBlbS0+c3RhcnQsICZlbS0+cmJfbm9kZSk7CiAJaWYgKHJiKSB7CiAJCXJldCA9IC1FRVhJU1Q7Ci0JCWZyZWVfZXh0ZW50X21hcChtZXJnZSk7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfaW5jKCZlbS0+cmVmcyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLWl0ZW0uYyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCmluZGV4IDk2NDY1MjQuLjliOTk4ODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCkBAIC01Miw2ICs1Miw3IEBACiAJZmlsZV9rZXkub2Zmc2V0ID0gcG9zOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgmZmlsZV9rZXksIEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZmaWxlX2tleSwKIAkJCQkgICAgICBzaXplb2YoKml0ZW0pKTsKIAlpZiAocmV0IDwgMCkKQEAgLTUyMyw2ICs1MjQsNyBAQAogCQlrZXkub2Zmc2V0ID0gZW5kX2J5dGUgLSAxOwogCQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9DU1VNX0tFWTsKIAorCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJCWlmIChyZXQgPiAwKSB7CiAJCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkKQEAgLTc1Nyw4ICs3NTksMTAgQEAKIAl9IGVsc2UgewogCQlpbnNfc2l6ZSA9IGNzdW1fc2l6ZTsKIAl9CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtKHRyYW5zLCByb290LCBwYXRoLCAmZmlsZV9rZXksCiAJCQkJICAgICAgaW5zX3NpemUpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMDsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsX3VubG9jazsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTc3Niw3ICs3ODAsNiBAQAogCWl0ZW1fZW5kID0gKHN0cnVjdCBidHJmc19jc3VtX2l0ZW0gKikoKHVuc2lnbmVkIGNoYXIgKilpdGVtX2VuZCArCiAJCQkJICAgICAgYnRyZnNfaXRlbV9zaXplX25yKGxlYWYsIHBhdGgtPnNsb3RzWzBdKSk7CiAJZWJfdG9rZW4gPSBOVUxMOwotCWNvbmRfcmVzY2hlZCgpOwogbmV4dF9zZWN0b3I6CiAKIAlpZiAoIWViX3Rva2VuIHx8CkBAIC04MTcsOSArODIwLDkgQEAKIAkJZWJfdG9rZW4gPSBOVUxMOwogCX0KIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7Ci0JY29uZF9yZXNjaGVkKCk7CiAJaWYgKHRvdGFsX2J5dGVzIDwgc3Vtcy0+bGVuKSB7CiAJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAJCWdvdG8gYWdhaW47CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGRjNzg5NTQuLjljOWZiNDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTYwNiw2ICs2MDYsNyBAQAogCQkJYnRyZnNfc2V0X2tleV90eXBlKCZpbnMsIEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAkJCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtKHRyYW5zLCByb290LCBwYXRoLCAmaW5zLAogCQkJCQkJICAgICAgc2l6ZW9mKCpleHRlbnQpKTsKIAkJCUJVR19PTihyZXQpOwpAQCAtNjM5LDE3ICs2NDAsMjIgQEAKIAkJCQkJCQlyYW1fYnl0ZXMpOwogCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZXh0ZW50LCBmb3VuZF90eXBlKTsKIAorCQkJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CisJCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhwYXRoLT5ub2Rlc1swXSk7CiAKIAkJCWlmIChkaXNrX2J5dGVuciAhPSAwKSB7CiAJCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsCi0JCQkJCQlkaXNrX2J5dGVuciwgb3JpZ19wYXJlbnQsCisJCQkJCQlkaXNrX2J5dGVuciwKKwkJCQkJCWxlNjRfdG9fY3B1KG9sZC5kaXNrX251bV9ieXRlcyksCisJCQkJCQlvcmlnX3BhcmVudCwKIAkJCQkJCWxlYWYtPnN0YXJ0LAogCQkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCQl0cmFucy0+dHJhbnNpZCwgaW5zLm9iamVjdGlkKTsKIAogCQkJCUJVR19PTihyZXQpOwogCQkJfQorCQkJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAwOwogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQkJaWYgKGRpc2tfYnl0ZW5yICE9IDApCiAJCQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0gZW5kKTsKQEAgLTkxMiw3ICs5MTgsNyBAQAogCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vdGhlcl9lbmNvZGluZyhsZWFmLCBmaSwgMCk7CiAKIAlpZiAob3JpZ19wYXJlbnQgIT0gbGVhZi0+c3RhcnQpIHsKLQkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwKKwkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLAogCQkJCQkgICAgICBvcmlnX3BhcmVudCwgbGVhZi0+c3RhcnQsCiAJCQkJCSAgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAogCQkJCQkgICAgICB0cmFucy0+dHJhbnNpZCwgaW5vZGUtPmlfaW5vKTsKQEAgLTExNTUsNiArMTE2MSwyMCBAQAogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGlubmVkWzFdKTsKIAkqcHBvcyA9IHBvczsKIAorCS8qCisJICogd2Ugd2FudCB0byBtYWtlIHN1cmUgZnN5bmMgZmluZHMgdGhpcyBjaGFuZ2UKKwkgKiBidXQgd2UgaGF2ZW4ndCBqb2luZWQgYSB0cmFuc2FjdGlvbiBydW5uaW5nIHJpZ2h0IG5vdy4KKwkgKgorCSAqIExhdGVyIG9uLCBzb21lb25lIGlzIHN1cmUgdG8gdXBkYXRlIHRoZSBpbm9kZSBhbmQgZ2V0IHRoZQorCSAqIHJlYWwgdHJhbnNpZCByZWNvcmRlZC4KKwkgKgorCSAqIFdlIHNldCBsYXN0X3RyYW5zIG5vdyB0byB0aGUgZnNfaW5mbyBnZW5lcmF0aW9uICsgMSwKKwkgKiB0aGlzIHdpbGwgZWl0aGVyIGJlIG9uZSBtb3JlIHRoYW4gdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBvciB0aGUgZ2VuZXJhdGlvbiB1c2VkIGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbiBpZiB0aGVyZSBpc24ndAorCSAqIG9uZSBydW5uaW5nIHJpZ2h0IG5vdy4KKwkgKi8KKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24gKyAxOworCiAJaWYgKG51bV93cml0dGVuID4gMCAmJiB3aWxsX3dyaXRlKSB7CiAJCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCkBAIC0xMTY3LDggKzExODcsMTEgQEAKIAkJCXJldCA9IGJ0cmZzX2xvZ19kZW50cnlfc2FmZSh0cmFucywgcm9vdCwKIAkJCQkJCSAgICBmaWxlLT5mX2RlbnRyeSk7CiAJCQlpZiAocmV0ID09IDApIHsKLQkJCQlidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7Ci0JCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCQlyZXQgPSBidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CisJCQkJaWYgKHJldCA9PSAwKQorCQkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJCWVsc2UKKwkJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0gZWxzZSB7CiAJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0KQEAgLTExODUsNiArMTIwOCwxOCBAQAogCiBpbnQgYnRyZnNfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCS8qCisJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSBzZXR0YXR0ciB3aGVuIHdlIGFyZSBhYm91dCB0byB0cnVuY2F0ZQorCSAqIGEgZmlsZSBmcm9tIGEgbm9uLXplcm8gc2l6ZSB0byBhIHplcm8gc2l6ZS4gIFRoaXMgdHJpZXMgdG8KKwkgKiBmbHVzaCBkb3duIG5ldyBieXRlcyB0aGF0IG1heSBoYXZlIGJlZW4gd3JpdHRlbiBpZiB0aGUKKwkgKiBhcHBsaWNhdGlvbiB3ZXJlIHVzaW5nIHRydW5jYXRlIHRvIHJlcGxhY2UgYSBmaWxlIGluIHBsYWNlLgorCSAqLworCWlmIChCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9kYXRhX2Nsb3NlKSB7CisJCUJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UgPSAwOworCQlidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oTlVMTCwgQlRSRlNfSShpbm9kZSktPnJvb3QsIGlub2RlKTsKKwkJaWYgKGlub2RlLT5pX3NpemUgPiBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQpCisJCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCX0KIAlpZiAoZmlscC0+cHJpdmF0ZV9kYXRhKQogCQlidHJmc19pb2N0bF90cmFuc19lbmQoZmlscCk7CiAJcmV0dXJuIDA7CkBAIC0xMjYwLDggKzEyOTUsMTEgQEAKIAlpZiAocmV0ID4gMCkgewogCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0gZWxzZSB7Ci0JCWJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKLQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQllbHNlCisJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IGQxZTVmMGUuLjc2OGI5NTIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTE4LDYgKzE4LDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImN0cmVlLmgiCisjaW5jbHVkZSAiZnJlZS1zcGFjZS1jYWNoZS5oIgorI2luY2x1ZGUgInRyYW5zYWN0aW9uLmgiCisKK3N0cnVjdCBidHJmc19mcmVlX3NwYWNlIHsKKwlzdHJ1Y3QgcmJfbm9kZSBieXRlc19pbmRleDsKKwlzdHJ1Y3QgcmJfbm9kZSBvZmZzZXRfaW5kZXg7CisJdTY0IG9mZnNldDsKKwl1NjQgYnl0ZXM7Cit9OwogCiBzdGF0aWMgaW50IHRyZWVfaW5zZXJ0X29mZnNldChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgdTY0IG9mZnNldCwKIAkJCSAgICAgIHN0cnVjdCByYl9ub2RlICpub2RlKQpAQCAtNjgsMTQgKzc3LDI0IEBACiB9CiAKIC8qCi0gKiBzZWFyY2hlcyB0aGUgdHJlZSBmb3IgdGhlIGdpdmVuIG9mZnNldC4gIElmIGNvbnRhaW5zIGlzIHNldCB3ZSB3aWxsIHJldHVybgotICogdGhlIGZyZWUgc3BhY2UgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gb2Zmc2V0LiAgSWYgY29udGFpbnMgaXMgbm90IHNldCB3ZQotICogd2lsbCByZXR1cm4gdGhlIGZyZWUgc3BhY2UgdGhhdCBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIG9mZnNldCBhbmQgaXMKLSAqIGF0IGxlYXN0IGJ5dGVzIGxvbmcuCisgKiBzZWFyY2hlcyB0aGUgdHJlZSBmb3IgdGhlIGdpdmVuIG9mZnNldC4KKyAqCisgKiBmdXp6eSA9PSAxOiB0aGlzIGlzIHVzZWQgZm9yIGFsbG9jYXRpb25zIHdoZXJlIHdlIGFyZSBnaXZlbiBhIGhpbnQgb2Ygd2hlcmUKKyAqIHRvIGxvb2sgZm9yIGZyZWUgc3BhY2UuICBCZWNhdXNlIHRoZSBoaW50IG1heSBub3QgYmUgY29tcGxldGVseSBvbiBhbiBvZmZzZXQKKyAqIG1hcmssIG9yIHRoZSBoaW50IG1heSBubyBsb25nZXIgcG9pbnQgdG8gZnJlZSBzcGFjZSB3ZSBuZWVkIHRvIGZ1ZGdlIG91cgorICogcmVzdWx0cyBhIGJpdC4gIFNvIHdlIGxvb2sgZm9yIGZyZWUgc3BhY2Ugc3RhcnRpbmcgYXQgb3IgYWZ0ZXIgb2Zmc2V0IHdpdGggYXQKKyAqIGxlYXN0IGJ5dGVzIHNpemUuICBXZSBwcmVmZXIgdG8gZmluZCBhcyBjbG9zZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0IGFzIHdlIGNhbi4KKyAqIEFsc28gaWYgdGhlIG9mZnNldCBpcyB3aXRoaW4gYSBmcmVlIHNwYWNlIHJhbmdlLCB0aGVuIHdlIHdpbGwgcmV0dXJuIHRoZSBmcmVlCisgKiBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBvZmZzZXQsIHdoaWNoIG1lYW5zIHdlIGNhbiByZXR1cm4gYSBmcmVlIHNwYWNlCisgKiBjaHVuayB3aXRoIGFuIG9mZnNldCBiZWZvcmUgdGhlIHByb3ZpZGVkIG9mZnNldC4KKyAqCisgKiBmdXp6eSA9PSAwOiB0aGlzIGlzIGp1c3QgYSBub3JtYWwgdHJlZSBzZWFyY2guICBHaXZlIHVzIHRoZSBmcmVlIHNwYWNlIHRoYXQKKyAqIHN0YXJ0cyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IHdoaWNoIGlzIGF0IGxlYXN0IGJ5dGVzIHNpemUsIGFuZCBpZiBpdHMgbm90IHRoZXJlCisgKiByZXR1cm4gTlVMTC4KICAqLwogc3RhdGljIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICp0cmVlX3NlYXJjaF9vZmZzZXQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsCi0JCQkJCQkgICBpbnQgY29udGFpbnMpCisJCQkJCQkgICBpbnQgZnV6enkpCiB7CiAJc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSwgKnJldCA9IE5VTEw7CkBAIC04NCwxMyArMTAzLDE0IEBACiAJCWVudHJ5ID0gcmJfZW50cnkobiwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CiAKIAkJaWYgKG9mZnNldCA8IGVudHJ5LT5vZmZzZXQpIHsKLQkJCWlmICghY29udGFpbnMgJiYKKwkJCWlmIChmdXp6eSAmJgogCQkJICAgICghcmV0IHx8IGVudHJ5LT5vZmZzZXQgPCByZXQtPm9mZnNldCkgJiYKIAkJCSAgICAoYnl0ZXMgPD0gZW50cnktPmJ5dGVzKSkKIAkJCQlyZXQgPSBlbnRyeTsKIAkJCW4gPSBuLT5yYl9sZWZ0OwogCQl9IGVsc2UgaWYgKG9mZnNldCA+IGVudHJ5LT5vZmZzZXQpIHsKLQkJCWlmICgoZW50cnktPm9mZnNldCArIGVudHJ5LT5ieXRlcyAtIDEpID49IG9mZnNldCAmJgorCQkJaWYgKGZ1enp5ICYmCisJCQkgICAgKGVudHJ5LT5vZmZzZXQgKyBlbnRyeS0+Ynl0ZXMgLSAxKSA+PSBvZmZzZXQgJiYKIAkJCSAgICBieXRlcyA8PSBlbnRyeS0+Ynl0ZXMpIHsKIAkJCQlyZXQgPSBlbnRyeTsKIAkJCQlicmVhazsKQEAgLTE3MSw2ICsxOTEsNyBAQAogCWludCByZXQgPSAwOwogCiAKKwlCVUdfT04oIWluZm8tPmJ5dGVzKTsKIAlyZXQgPSB0cmVlX2luc2VydF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgaW5mby0+b2Zmc2V0LAogCQkJCSAmaW5mby0+b2Zmc2V0X2luZGV4KTsKIAlpZiAocmV0KQpAQCAtMTg0LDEwOCArMjA1LDcwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCitpbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm87CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmFsbG9jX2luZm87CiAJaW50IHJldCA9IDA7CiAKLQlhbGxvY19pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UpLCBHRlBfTk9GUyk7Ci0JaWYgKCFhbGxvY19pbmZvKQorCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKKwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCisJaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OworCWluZm8tPmJ5dGVzID0gYnl0ZXM7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJLyoKIAkgKiBmaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBmcmVlIHNwYWNlIGFkamFjZW50IHRvIHRoZSByYW5nZSB3ZQogCSAqIGFyZSBhZGRpbmcsIGlmIHRoZXJlIGlzIHJlbW92ZSB0aGF0IHN0cnVjdCBhbmQgYWRkIGEgbmV3IG9uZSB0bwogCSAqIGNvdmVyIHRoZSBlbnRpcmUgcmFuZ2UKIAkgKi8KIAlyaWdodF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCi0JCQkJCW9mZnNldCtieXRlcywgMCwgMSk7CisJCQkJCW9mZnNldCtieXRlcywgMCwgMCk7CiAJbGVmdF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCiAJCQkJICAgICAgIG9mZnNldC0xLCAwLCAxKTsKIAotCWlmIChyaWdodF9pbmZvICYmIHJpZ2h0X2luZm8tPm9mZnNldCA9PSBvZmZzZXQrYnl0ZXMpIHsKKwlpZiAocmlnaHRfaW5mbykgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7Ci0JCWluZm8gPSByaWdodF9pbmZvOwotCQlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCWluZm8tPmJ5dGVzICs9IGJ5dGVzOwotCX0gZWxzZSBpZiAocmlnaHRfaW5mbyAmJiByaWdodF9pbmZvLT5vZmZzZXQgIT0gb2Zmc2V0K2J5dGVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWRkaW5nIHNwYWNlIGluIHRoZSBtaWRkbGUgb2YgYW4gIgotCQkgICAgICAgImV4aXN0aW5nIGZyZWUgc3BhY2UgYXJlYS4gZXhpc3Rpbmc6ICIKLQkJICAgICAgICJvZmZzZXQ9JWxsdSwgYnl0ZXM9JWxsdS4gbmV3OiBvZmZzZXQ9JWxsdSwgIgotCQkgICAgICAgImJ5dGVzPSVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmlnaHRfaW5mby0+b2Zmc2V0LAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyaWdodF9pbmZvLT5ieXRlcywKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0LAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyk7Ci0JCUJVRygpOworCQlpbmZvLT5ieXRlcyArPSByaWdodF9pbmZvLT5ieXRlczsKKwkJa2ZyZWUocmlnaHRfaW5mbyk7CiAJfQogCi0JaWYgKGxlZnRfaW5mbykgeworCWlmIChsZWZ0X2luZm8gJiYgbGVmdF9pbmZvLT5vZmZzZXQgKyBsZWZ0X2luZm8tPmJ5dGVzID09IG9mZnNldCkgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKLQotCQlpZiAodW5saWtlbHkoKGxlZnRfaW5mby0+b2Zmc2V0ICsgbGVmdF9pbmZvLT5ieXRlcykgIT0KLQkJCSAgICAgb2Zmc2V0KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyBmcmVlIHNwYWNlIHRvIHRoZSBsZWZ0ICIKLQkJCSAgICAgICAib2YgbmV3IGZyZWUgc3BhY2UgaXNuJ3QgIgotCQkJICAgICAgICJxdWl0ZSByaWdodC4gZXhpc3Rpbmc6IG9mZnNldD0lbGx1LCAiCi0JCQkgICAgICAgImJ5dGVzPSVsbHUuIG5ldzogb2Zmc2V0PSVsbHUsIGJ5dGVzPSVsbHVcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWZ0X2luZm8tPm9mZnNldCwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlZnRfaW5mby0+Ynl0ZXMsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyk7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCWlmIChpbmZvKSB7Ci0JCQlpbmZvLT5vZmZzZXQgPSBsZWZ0X2luZm8tPm9mZnNldDsKLQkJCWluZm8tPmJ5dGVzICs9IGxlZnRfaW5mby0+Ynl0ZXM7Ci0JCQlrZnJlZShsZWZ0X2luZm8pOwotCQl9IGVsc2UgewotCQkJaW5mbyA9IGxlZnRfaW5mbzsKLQkJCWluZm8tPmJ5dGVzICs9IGJ5dGVzOwotCQl9CisJCWluZm8tPm9mZnNldCA9IGxlZnRfaW5mby0+b2Zmc2V0OworCQlpbmZvLT5ieXRlcyArPSBsZWZ0X2luZm8tPmJ5dGVzOworCQlrZnJlZShsZWZ0X2luZm8pOwogCX0KIAotCWlmIChpbmZvKSB7Ci0JCXJldCA9IGxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7Ci0JCWlmICghcmV0KQotCQkJaW5mbyA9IE5VTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWluZm8gPSBhbGxvY19pbmZvOwotCWFsbG9jX2luZm8gPSBOVUxMOwotCWluZm8tPm9mZnNldCA9IG9mZnNldDsKLQlpbmZvLT5ieXRlcyA9IGJ5dGVzOwotCiAJcmV0ID0gbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlpZiAocmV0KQogCQlrZnJlZShpbmZvKTsKLW91dDoKKworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHJmczogdW5hYmxlIHRvIGFkZCBmcmVlIHNwYWNlIDolZFxuIiwgcmV0KTsKLQkJaWYgKHJldCA9PSAtRUVYSVNUKQotCQkJQlVHKCk7CisJCUJVR19PTihyZXQgPT0gLUVFWElTVCk7CiAJfQogCi0Ja2ZyZWUoYWxsb2NfaW5mbyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1fX2J0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK2ludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAorCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKIAlpbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwgMCwKIAkJCQkgIDEpOwotCiAJaWYgKGluZm8gJiYgaW5mby0+b2Zmc2V0ID09IG9mZnNldCkgewogCQlpZiAoaW5mby0+Ynl0ZXMgPCBieXRlcykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJGb3VuZCBmcmVlIHNwYWNlIGF0ICVsbHUsIHNpemUgJWxsdSwiCkBAIC0yOTUsMTIgKzI3OCwxNCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXMpOwogCQkJV0FSTl9PTigxKTsKIAkJCXJldCA9IC1FSU5WQUw7CisJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAKIAkJaWYgKGluZm8tPmJ5dGVzID09IGJ5dGVzKSB7CiAJCQlrZnJlZShpbmZvKTsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTMwOCw2ICsyOTMsNyBAQAogCQlpbmZvLT5ieXRlcyAtPSBieXRlczsKIAogCQlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOworCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCUJVR19PTihyZXQpOwogCX0gZWxzZSBpZiAoaW5mbyAmJiBpbmZvLT5vZmZzZXQgPCBvZmZzZXQgJiYKIAkJICAgaW5mby0+b2Zmc2V0ICsgaW5mby0+Ynl0ZXMgPj0gb2Zmc2V0ICsgYnl0ZXMpIHsKQEAgLTMzMyw3MCArMzE5LDMzIEBACiAJCQkgKi8KIAkJCWtmcmVlKGluZm8pOwogCQl9Ci0KKwkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQkvKiBzdGVwIHR3bywgaW5zZXJ0IGEgbmV3IGluZm8gc3RydWN0IHRvIGNvdmVyIGFueXRoaW5nCiAJCSAqIGJlZm9yZSB0aGUgaG9sZQogCQkgKi8KLQkJcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2xkX3N0YXJ0LAotCQkJCQkgICAgIG9mZnNldCAtIG9sZF9zdGFydCk7CisJCXJldCA9IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvbGRfc3RhcnQsCisJCQkJCSAgIG9mZnNldCAtIG9sZF9zdGFydCk7CiAJCUJVR19PTihyZXQpOwogCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwkJaWYgKCFpbmZvKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNvdWxkbid0IGZpbmQgc3BhY2UgJWxsdSB0byBmcmVlXG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FjaGVkIGlzICVkLCBvZmZzZXQgJWxsdSBieXRlcyAlbGx1XG4iLAorCQkJICAgICAgIGJsb2NrX2dyb3VwLT5jYWNoZWQsIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQsCisJCQkgICAgICAgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpOworCQkJYnRyZnNfZHVtcF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBieXRlcyk7CisJCX0gZWxzZSBpZiAoaW5mbykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJobW0sIGZvdW5kIG9mZnNldD0lbGx1IGJ5dGVzPSVsbHUsICIKKwkJCSAgICAgICAiYnV0IHdhbnRlZCBvZmZzZXQ9JWxsdSBieXRlcz0lbGx1XG4iLAorCQkJICAgICAgIGluZm8tPm9mZnNldCwgaW5mby0+Ynl0ZXMsIG9mZnNldCwgYnl0ZXMpOworCQl9CiAJCVdBUk5fT04oMSk7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpzcDsKLQotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0Jc3AgPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LCAwLCAxKTsKLQlCVUdfT04oIXNwKTsKLQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnNwOwotCi0JcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0Jc3AgPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LCAwLCAxKTsKLQlCVUdfT04oIXNwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKLXsKLQlpbnQgcmV0ID0gMDsKLQotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JcmV0ID0gX19idHJmc19yZW1vdmVfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0JbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2xvY2soc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2J0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIGJ5dGVzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHZvaWQgYnRyZnNfZHVtcF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCiAJCQkgICB1NjQgYnl0ZXMpCiB7CkBAIC00MDgsNiArMzU3LDggQEAKIAkJaW5mbyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwogCQlpZiAoaW5mby0+Ynl0ZXMgPj0gYnl0ZXMpCiAJCQljb3VudCsrOworCQlwcmludGsoS0VSTl9FUlIgImVudHJ5IG9mZnNldCAlbGx1LCBieXRlcyAlbGx1XG4iLCBpbmZvLT5vZmZzZXQsCisJCSAgICAgICBpbmZvLT5ieXRlcyk7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVkIGJsb2NrcyBvZiBmcmVlIHNwYWNlIGF0IG9yIGJpZ2dlciB0aGFuIGJ5dGVzIGlzIgogCSAgICAgICAiXG4iLCBjb3VudCk7CkBAIC00MjgsNjggKzM3OSwzMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogZm9yIGEgZ2l2ZW4gY2x1c3RlciwgcHV0IGFsbCBvZiBpdHMgZXh0ZW50cyBiYWNrIGludG8gdGhlIGZyZWUKKyAqIHNwYWNlIGNhY2hlLiAgSWYgdGhlIGJsb2NrIGdyb3VwIHBhc3NlZCBkb2Vzbid0IG1hdGNoIHRoZSBibG9jayBncm91cAorICogcG9pbnRlZCB0byBieSB0aGUgY2x1c3Rlciwgc29tZW9uZSBlbHNlIHJhY2VkIGluIGFuZCBmcmVlZCB0aGUKKyAqIGNsdXN0ZXIgYWxyZWFkeS4gIEluIHRoYXQgY2FzZSwgd2UganVzdCByZXR1cm4gd2l0aG91dCBjaGFuZ2luZyBhbnl0aGluZworICovCitzdGF0aWMgaW50CitfX2J0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoCisJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5OworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJc3Bpbl9sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwlpZiAoY2x1c3Rlci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApCisJCWdvdG8gb3V0OworCisJY2x1c3Rlci0+d2luZG93X3N0YXJ0ID0gMDsKKwlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCXdoaWxlKG5vZGUpIHsKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKwkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOworCQlsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwl9CisJbGlzdF9kZWxfaW5pdCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCk7CisKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2x1c3Rlci0+YmxvY2tfZ3JvdXApOworCWNsdXN0ZXItPmJsb2NrX2dyb3VwID0gTlVMTDsKKwljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9jYWNoZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvOwogCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXI7CisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqc2FmZTsKIAotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbHVzdGVyLCBzYWZlLCAmYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdCwKKwkJCQkgYmxvY2tfZ3JvdXBfbGlzdCkgeworCisJCVdBUk5fT04oY2x1c3Rlci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApOworCQlfX2J0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGNsdXN0ZXIpOworCX0KKwogCXdoaWxlICgobm9kZSA9IHJiX2xhc3QoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2J5dGVzKSkgIT0gTlVMTCkgewogCQlpbmZvID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIGJ5dGVzX2luZGV4KTsKIAkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCQlrZnJlZShpbmZvKTsKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQkJCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiB9CiAKLSNpZiAwCi1zdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJ0cmZzX2ZpbmRfZnJlZV9zcGFjZV9vZmZzZXQoc3RydWN0Ci0JCQkJCQkgICAgICBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkJICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkJICAgICAgdTY0IGJ5dGVzKQordTY0IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgZW1wdHlfc2l6ZSkKIHsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmV0OworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJdTY0IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCXJldCA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsCi0JCQkJIGJ5dGVzLCAwKTsKLQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsCisJCQkJICAgYnl0ZXMgKyBlbXB0eV9zaXplLCAxKTsKKwlpZiAoIWVudHJ5KQorCQllbnRyeSA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywKKwkJCQkJICBvZmZzZXQsIGJ5dGVzICsgZW1wdHlfc2l6ZSk7CisJaWYgKGVudHJ5KSB7CisJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7CisJCXJldCA9IGVudHJ5LT5vZmZzZXQ7CisJCWVudHJ5LT5vZmZzZXQgKz0gYnl0ZXM7CisJCWVudHJ5LT5ieXRlcyAtPSBieXRlczsKKworCQlpZiAoIWVudHJ5LT5ieXRlcykKKwkJCWtmcmVlKGVudHJ5KTsKKwkJZWxzZQorCQkJbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7CisJfQorCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlX2J5dGVzKHN0cnVjdAotCQkJCQkJICAgICBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkJICAgICAqYmxvY2tfZ3JvdXAsIHU2NCBvZmZzZXQsCi0JCQkJCQkgICAgIHU2NCBieXRlcykKKy8qCisgKiBnaXZlbiBhIGNsdXN0ZXIsIHB1dCBhbGwgb2YgaXRzIGV4dGVudHMgYmFjayBpbnRvIHRoZSBmcmVlIHNwYWNlCisgKiBjYWNoZS4gIElmIGEgYmxvY2sgZ3JvdXAgaXMgcGFzc2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBmcmVlCisgKiBhIGNsdXN0ZXIgdGhhdCBiZWxvbmdzIHRvIHRoZSBwYXNzZWQgYmxvY2sgZ3JvdXAuCisgKgorICogT3RoZXJ3aXNlLCBpdCdsbCBnZXQgYSByZWZlcmVuY2Ugb24gdGhlIGJsb2NrIGdyb3VwIHBvaW50ZWQgdG8gYnkgdGhlCisgKiBjbHVzdGVyIGFuZCByZW1vdmUgdGhlIGNsdXN0ZXIgZnJvbSBpdC4KKyAqLworaW50IGJ0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyZXQ7CisJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJLyogZmlyc3QsIGdldCBhIHNhZmUgcG9pbnRlciB0byB0aGUgYmxvY2sgZ3JvdXAgKi8KKwlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCWlmICghYmxvY2tfZ3JvdXApIHsKKwkJYmxvY2tfZ3JvdXAgPSBjbHVzdGVyLT5ibG9ja19ncm91cDsKKwkJaWYgKCFibG9ja19ncm91cCkgeworCQkJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKGNsdXN0ZXItPmJsb2NrX2dyb3VwICE9IGJsb2NrX2dyb3VwKSB7CisJCS8qIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBmcmVlZCBpdCBkb24ndCByZWRvIHRoZWlyIHdvcmsgKi8KKwkJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJYXRvbWljX2luYygmYmxvY2tfZ3JvdXAtPmNvdW50KTsKKwlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAKLQlyZXQgPSB0cmVlX3NlYXJjaF9ieXRlcygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfYnl0ZXMsIG9mZnNldCwgYnl0ZXMpOwotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwkvKiBub3cgcmV0dXJuIGFueSBleHRlbnRzIHRoZSBjbHVzdGVyIGhhZCBvbiBpdCAqLworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisJcmV0ID0gX19idHJmc19yZXR1cm5fY2x1c3Rlcl90b19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBjbHVzdGVyKTsKKwlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwkvKiBmaW5hbGx5IGRyb3Agb3VyIHJlZiAqLworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdpdmVuIGEgY2x1c3RlciwgdHJ5IHRvIGFsbG9jYXRlICdieXRlcycgZnJvbSBpdCwgcmV0dXJucyAwCisgKiBpZiBpdCBjb3VsZG4ndCBmaW5kIGFueXRoaW5nIHN1aXRhYmx5IGxhcmdlLCBvciBhIGxvZ2ljYWwgZGlzayBvZmZzZXQKKyAqIGlmIHRoaW5ncyB3b3JrZWQgb3V0CisgKi8KK3U2NCBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwgdTY0IGJ5dGVzLAorCQkJICAgICB1NjQgbWluX3N0YXJ0KQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJdTY0IHJldCA9IDA7CisKKwlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCWlmIChieXRlcyA+IGNsdXN0ZXItPm1heF9zaXplKQorCQlnb3RvIG91dDsKKworCWlmIChjbHVzdGVyLT5ibG9ja19ncm91cCAhPSBibG9ja19ncm91cCkKKwkJZ290byBvdXQ7CisKKwlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCWlmICghbm9kZSkKKwkJZ290byBvdXQ7CisKKwllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCisJd2hpbGUoMSkgeworCQlpZiAoZW50cnktPmJ5dGVzIDwgYnl0ZXMgfHwgZW50cnktPm9mZnNldCA8IG1pbl9zdGFydCkgeworCQkJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwkJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKKwkJCWlmICghbm9kZSkKKwkJCQlicmVhazsKKwkJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsCisJCQkJCSBvZmZzZXRfaW5kZXgpOworCQkJY29udGludWU7CisJCX0KKwkJcmV0ID0gZW50cnktPm9mZnNldDsKKworCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOworCQllbnRyeS0+Ynl0ZXMgLT0gYnl0ZXM7CisKKwkJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOworCQkJa2ZyZWUoZW50cnkpOworCQl9CisJCWJyZWFrOworCX0KK291dDoKKwlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGhlcmUgd2UgdHJ5IHRvIGZpbmQgYSBjbHVzdGVyIG9mIGJsb2NrcyBpbiBhIGJsb2NrIGdyb3VwLiAgVGhlIGdvYWwKKyAqIGlzIHRvIGZpbmQgYXQgbGVhc3QgYnl0ZXMgZnJlZSBhbmQgdXAgdG8gZW1wdHlfc2l6ZSArIGJ5dGVzIGZyZWUuCisgKiBXZSBtaWdodCBub3QgZmluZCB0aGVtIGFsbCBpbiBvbmUgY29udGlndW91cyBhcmVhLgorICoKKyAqIHJldHVybnMgemVybyBhbmQgc2V0cyB1cCBjbHVzdGVyIGlmIHRoaW5ncyB3b3JrZWQgb3V0LCBvdGhlcndpc2UKKyAqIGl0IHJldHVybnMgLWVub3NwYworICovCitpbnQgYnRyZnNfZmluZF9zcGFjZV9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAorCQkJICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKm5leHQ7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxhc3Q7CisJdTY0IG1pbl9ieXRlczsKKwl1NjQgd2luZG93X3N0YXJ0OworCXU2NCB3aW5kb3dfZnJlZTsKKwl1NjQgbWF4X2V4dGVudCA9IDA7CisJaW50IHRvdGFsX3JldHJpZXMgPSAwOworCWludCByZXQ7CisKKwkvKiBmb3IgbWV0YWRhdGEsIGFsbG93IGFsbG9jYXRlcyB3aXRoIG1vcmUgaG9sZXMgKi8KKwlpZiAoYmxvY2tfZ3JvdXAtPmZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKKwkJLyoKKwkJICogd2Ugd2FudCB0byBkbyBsYXJnZXIgYWxsb2NhdGlvbnMgd2hlbiB3ZSBhcmUKKwkJICogZmx1c2hpbmcgb3V0IHRoZSBkZWxheWVkIHJlZnMsIGl0IGhlbHBzIHByZXZlbnQKKwkJICogbWFraW5nIG1vcmUgd29yayBhcyB3ZSBnbyBhbG9uZy4KKwkJICovCisJCWlmICh0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykKKwkJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gMSk7CisJCWVsc2UKKwkJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gNCk7CisJfSBlbHNlCisJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gMik7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCXNwaW5fbG9jaygmY2x1c3Rlci0+bG9jayk7CisKKwkvKiBzb21lb25lIGFscmVhZHkgZm91bmQgYSBjbHVzdGVyLCBob29yYXkgKi8KKwlpZiAoY2x1c3Rlci0+YmxvY2tfZ3JvdXApIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorYWdhaW46CisJbWluX2J5dGVzID0gbWluKG1pbl9ieXRlcywgYnl0ZXMgKyBlbXB0eV9zaXplKTsKKwllbnRyeSA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywKKwkJCQkgIG9mZnNldCwgbWluX2J5dGVzKTsKKwlpZiAoIWVudHJ5KSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKwl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OworCXdpbmRvd19mcmVlID0gZW50cnktPmJ5dGVzOworCWxhc3QgPSBlbnRyeTsKKwltYXhfZXh0ZW50ID0gZW50cnktPmJ5dGVzOworCisJd2hpbGUoMSkgeworCQkvKiBvdXQgd2luZG93IGlzIGp1c3QgcmlnaHQsIGxldHMgZmlsbCBpdCAqLworCQlpZiAod2luZG93X2ZyZWUgPj0gYnl0ZXMgKyBlbXB0eV9zaXplKQorCQkJYnJlYWs7CisKKwkJbm9kZSA9IHJiX25leHQoJmxhc3QtPm9mZnNldF9pbmRleCk7CisJCWlmICghbm9kZSkgeworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisJCW5leHQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKworCQkvKgorCQkgKiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgZW1wdHkgc2l6ZSBhbmQgdGhlIHdpbmRvdyBpcworCQkgKiB2ZXJ5IGxhcmdlLiAgcmVzZXQgYW5kIHRyeSBhZ2FpbgorCQkgKi8KKwkJaWYgKG5leHQtPm9mZnNldCAtIHdpbmRvd19zdGFydCA+IChieXRlcyArIGVtcHR5X3NpemUpICogMikgeworCQkJZW50cnkgPSBuZXh0OworCQkJd2luZG93X3N0YXJ0ID0gZW50cnktPm9mZnNldDsKKwkJCXdpbmRvd19mcmVlID0gZW50cnktPmJ5dGVzOworCQkJbGFzdCA9IGVudHJ5OworCQkJbWF4X2V4dGVudCA9IDA7CisJCQl0b3RhbF9yZXRyaWVzKys7CisJCQlpZiAodG90YWxfcmV0cmllcyAlIDI1NiA9PSAwKSB7CisJCQkJaWYgKG1pbl9ieXRlcyA+PSAoYnl0ZXMgKyBlbXB0eV9zaXplKSkgeworCQkJCQlyZXQgPSAtRU5PU1BDOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBncm93IG91ciBhbGxvY2F0aW9uIGEgYml0LCB3ZSdyZSBub3QgaGF2aW5nCisJCQkJICogbXVjaCBsdWNrCisJCQkJICovCisJCQkJbWluX2J5dGVzICo9IDI7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJd2luZG93X2ZyZWUgKz0gbmV4dC0+Ynl0ZXM7CisJCQlpZiAoZW50cnktPmJ5dGVzID4gbWF4X2V4dGVudCkKKwkJCQltYXhfZXh0ZW50ID0gZW50cnktPmJ5dGVzOworCQl9CisJfQorCisJY2x1c3Rlci0+d2luZG93X3N0YXJ0ID0gZW50cnktPm9mZnNldDsKKworCS8qCisJICogbm93IHdlJ3ZlIGZvdW5kIG91ciBlbnRyaWVzLCBwdWxsIHRoZW0gb3V0IG9mIHRoZSBmcmVlIHNwYWNlCisJICogY2FjaGUgYW5kIHB1dCB0aGVtIGludG8gdGhlIGNsdXN0ZXIgcmJ0cmVlCisJICoKKwkgKiBUaGUgY2x1c3RlciBpbmNsdWRlcyBhbiByYnRyZWUsIGJ1dCBvbmx5IHVzZXMgdGhlIG9mZnNldCBpbmRleAorCSAqIG9mIGVhY2ggZnJlZSBzcGFjZSBjYWNoZSBlbnRyeS4KKwkgKi8KKwl3aGlsZSgxKSB7CisJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKKwkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwkJcmV0ID0gdHJlZV9pbnNlcnRfb2Zmc2V0KCZjbHVzdGVyLT5yb290LCBlbnRyeS0+b2Zmc2V0LAorCQkJCQkgJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQlCVUdfT04ocmV0KTsKKworCQlpZiAoIW5vZGUgfHwgZW50cnkgPT0gbGFzdCkKKwkJCWJyZWFrOworCisJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CisJfQorCXJldCA9IDA7CisJY2x1c3Rlci0+bWF4X3NpemUgPSBtYXhfZXh0ZW50OworCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJbGlzdF9hZGRfdGFpbCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCwgJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpOworCWNsdXN0ZXItPmJsb2NrX2dyb3VwID0gYmxvY2tfZ3JvdXA7CitvdXQ6CisJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYKIAotc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJ0cmZzX2ZpbmRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUKLQkJCQkJICAgICAgICpibG9ja19ncm91cCwgdTY0IG9mZnNldCwKLQkJCQkJICAgICAgIHU2NCBieXRlcykKKy8qCisgKiBzaW1wbGUgY29kZSB0byB6ZXJvIG91dCBhIGNsdXN0ZXIKKyAqLwordm9pZCBidHJmc19pbml0X2ZyZWVfY2x1c3RlcihzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyZXQgPSBOVUxMOwotCi0JcmV0ID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwKLQkJCQkgYnl0ZXMsIDApOwotCWlmICghcmV0KQotCQlyZXQgPSB0cmVlX3NlYXJjaF9ieXRlcygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfYnl0ZXMsCi0JCQkJCW9mZnNldCwgYnl0ZXMpOwotCi0JcmV0dXJuIHJldDsKKwlzcGluX2xvY2tfaW5pdCgmY2x1c3Rlci0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNsdXN0ZXItPnJlZmlsbF9sb2NrKTsKKwljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworCWNsdXN0ZXItPm1heF9zaXplID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCk7CisJY2x1c3Rlci0+YmxvY2tfZ3JvdXAgPSBOVUxMOwogfQorCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmggYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYmRjMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0JUUkZTX0ZSRUVfU1BBQ0VfQ0FDSEUKKyNkZWZpbmUgX19CVFJGU19GUkVFX1NQQUNFX0NBQ0hFCisKK2ludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKK2ludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKK3ZvaWQgYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfY2FjaGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlCisJCQkJICAgKmJsb2NrX2dyb3VwKTsKK3U2NCBidHJmc19maW5kX3NwYWNlX2Zvcl9hbGxvYyhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IGVtcHR5X3NpemUpOwordm9pZCBidHJmc19kdW1wX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgIHU2NCBieXRlcyk7Cit1NjQgYnRyZnNfYmxvY2tfZ3JvdXBfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwKTsKK2ludCBidHJmc19maW5kX3NwYWNlX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCisJCQkgICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IGVtcHR5X3NpemUpOwordm9pZCBidHJmc19pbml0X2ZyZWVfY2x1c3RlcihzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKTsKK3U2NCBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwgdTY0IGJ5dGVzLAorCQkJICAgICB1NjQgbWluX3N0YXJ0KTsKK2ludCBidHJmc19yZXR1cm5fY2x1c3Rlcl90b19mcmVlX3NwYWNlKAorCQkJICAgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3Rlcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLWl0ZW0uYyBiL2ZzL2J0cmZzL2lub2RlLWl0ZW0uYwppbmRleCAzZDQ2ZmExLi42YjYyN2M2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUtaXRlbS5jCkBAIC03Myw2ICs3Myw4IEBACiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKKwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA+IDApIHsKIAkJcmV0ID0gLUVOT0VOVDsKQEAgLTEyNyw2ICsxMjksNyBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZrZXksCiAJCQkJICAgICAgaW5zX2xlbik7CiAJaWYgKHJldCA9PSAtRUVYSVNUKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA3ZDRmOTQ4Li5hMGQxZGQ0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTEzNCw2ICsxMzQsNyBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CkBAIC0xNjcsOSArMTY4LDkgQEAKIAkJCWN1cl9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgY29tcHJlc3NlZF9zaXplLAogCQkJCSAgICAgICBQQUdFX0NBQ0hFX1NJWkUpOwogCi0JCQlrYWRkciA9IGttYXAoY3BhZ2UpOworCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhjcGFnZSwgS01fVVNFUjApOwogCQkJd3JpdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCBrYWRkciwgcHRyLCBjdXJfc2l6ZSk7Ci0JCQlrdW5tYXAoY3BhZ2UpOworCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCiAJCQlpKys7CiAJCQlwdHIgKz0gY3VyX3NpemU7CkBAIC0yMDQsNyArMjA1LDcgQEAKICAqIGRvZXMgdGhlIGNoZWNrcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgc21hbGwgZW5vdWdoCiAgKiB0byBmaXQgYXMgYW4gaW5saW5lIGV4dGVudC4KICAqLwotc3RhdGljIGludCBjb3dfZmlsZV9yYW5nZV9pbmxpbmUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCitzdGF0aWMgbm9pbmxpbmUgaW50IGNvd19maWxlX3JhbmdlX2lubGluZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCQkgc2l6ZV90IGNvbXByZXNzZWRfc2l6ZSwKQEAgLTg1NCwxMSArODU1LDYgQEAKIAl1NjQgY3VyX2VuZDsKIAlpbnQgbGltaXQgPSAxMCAqIDEwMjQgKiAxMDQyOwogCi0JaWYgKCFidHJmc190ZXN0X29wdChyb290LCBDT01QUkVTUykpIHsKLQkJcmV0dXJuIGNvd19maWxlX3JhbmdlKGlub2RlLCBsb2NrZWRfcGFnZSwgc3RhcnQsIGVuZCwKLQkJCQkgICAgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4sIDEpOwotCX0KLQogCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VEIHwKIAkJCSBFWFRFTlRfREVMQUxMT0MsIDEsIDAsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKQEAgLTkzNSw3ICs5MzEsOCBAQAogICogSWYgbm8gY293IGNvcGllcyBvciBzbmFwc2hvdHMgZXhpc3QsIHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBleGlzdGluZwogICogYmxvY2tzIG9uIGRpc2sKICAqLwotc3RhdGljIGludCBydW5fZGVsYWxsb2Nfbm9jb3coc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLAorc3RhdGljIG5vaW5saW5lIGludCBydW5fZGVsYWxsb2Nfbm9jb3coc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLAogCQkJICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQgKnBhZ2Vfc3RhcnRlZCwgaW50IGZvcmNlLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbnJfd3JpdHRlbikKIHsKQEAgLTExMzMsNiArMTEzMCw3IEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nICpucl93cml0dGVuKQogewogCWludCByZXQ7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAogCWlmIChidHJmc190ZXN0X2ZsYWcoaW5vZGUsIE5PREFUQUNPVykpCiAJCXJldCA9IHJ1bl9kZWxhbGxvY19ub2Nvdyhpbm9kZSwgbG9ja2VkX3BhZ2UsIHN0YXJ0LCBlbmQsCkBAIC0xMTQwLDEwICsxMTM4LDEyIEBACiAJZWxzZSBpZiAoYnRyZnNfdGVzdF9mbGFnKGlub2RlLCBQUkVBTExPQykpCiAJCXJldCA9IHJ1bl9kZWxhbGxvY19ub2Nvdyhpbm9kZSwgbG9ja2VkX3BhZ2UsIHN0YXJ0LCBlbmQsCiAJCQkJCSBwYWdlX3N0YXJ0ZWQsIDAsIG5yX3dyaXR0ZW4pOworCWVsc2UgaWYgKCFidHJmc190ZXN0X29wdChyb290LCBDT01QUkVTUykpCisJCXJldCA9IGNvd19maWxlX3JhbmdlKGlub2RlLCBsb2NrZWRfcGFnZSwgc3RhcnQsIGVuZCwKKwkJCQkgICAgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4sIDEpOwogCWVsc2UKIAkJcmV0ID0gY293X2ZpbGVfcmFuZ2VfYXN5bmMoaW5vZGUsIGxvY2tlZF9wYWdlLCBzdGFydCwgZW5kLAogCQkJCQkgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4pOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ1Myw2ICsxNDUzLDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCUJVR19PTighcGF0aCk7CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfZHJvcF9leHRlbnRzKHRyYW5zLCByb290LCBpbm9kZSwgZmlsZV9wb3MsCiAJCQkJIGZpbGVfcG9zICsgbnVtX2J5dGVzLCBmaWxlX3BvcywgJmhpbnQpOwogCUJVR19PTihyZXQpOwpAQCAtMTQ3NSw2ICsxNDc2LDEwIEBACiAJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGZpLCBjb21wcmVzc2lvbik7CiAJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2VuY3J5cHRpb24obGVhZiwgZmksIGVuY3J5cHRpb24pOwogCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vdGhlcl9lbmNvZGluZyhsZWFmLCBmaSwgb3RoZXJfZW5jb2RpbmcpOworCisJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CisJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobGVhZik7CisKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAogCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtX2J5dGVzKTsKQEAgLTE0ODcsMTEgKzE0OTIsMzUgQEAKIAkJCQkJICByb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCQkJICB0cmFucy0+dHJhbnNpZCwgaW5vZGUtPmlfaW5vLCAmaW5zKTsKIAlCVUdfT04ocmV0KTsKLQogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwogCXJldHVybiAwOwogfQogCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBidHJmc19maW5pc2hfb3JkZXJlZF9pbywgdGhpcworICoganVzdCByZWFkcyBpbiBzb21lIG9mIHRoZSBjc3VtIGxlYXZlcyB0byBwcmltZSB0aGVtIGludG8gcmFtCisgKiBiZWZvcmUgd2Ugc3RhcnQgdGhlIHRyYW5zYWN0aW9uLiAgSXQgbGltaXRzIHRoZSBhbW91bnQgb2YgYnRyZWUKKyAqIHJlYWRzIHJlcXVpcmVkIHdoaWxlIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyBub2lubGluZSB2b2lkIHJlYWRhX2NzdW0oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCkKK3sKKwlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0gKnN1bTsKKwl1NjQgYnl0ZW5yOworCisJc3VtID0gbGlzdF9lbnRyeShvcmRlcmVkX2V4dGVudC0+bGlzdC5uZXh0LCBzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0sCisJCQkgbGlzdCk7CisJYnl0ZW5yID0gc3VtLT5zdW1zWzBdLmJ5dGVucjsKKworCS8qCisJICogd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0cywgdGhlIHBvaW50IG9mIHRoaXMgc2VhcmNoIGlzCisJICoganVzdCB0byBnZXQgdGhlIGJ0cmVlIGxlYXZlcyBpbnRvIHJhbQorCSAqLworCWJ0cmZzX2xvb2t1cF9jc3VtKE5VTEwsIHJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdCwgcGF0aCwgYnl0ZW5yLCAwKTsKK30KKwogLyogYXMgb3JkZXJlZCBkYXRhIElPIGZpbmlzaGVzLCB0aGlzIGdldHMgY2FsbGVkIHNvIHdlIGNhbiBmaW5pc2gKICAqIGFuIG9yZGVyZWQgZXh0ZW50IGlmIHRoZSByYW5nZSBvZiBieXRlcyBpbiB0aGUgZmlsZSBpdCBjb3ZlcnMgYXJlCiAgKiBmdWxseSB3cml0dGVuLgpAQCAtMTUwMCw4ICsxNTI5LDkgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZF9leHRlbnQ7CisJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCA9IE5VTEw7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOworCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCBjb21wcmVzc2VkID0gMDsKIAlpbnQgcmV0OwogCkBAIC0xNTA5LDkgKzE1MzksMzMgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIGJlZm9yZSB3ZSBqb2luIHRoZSB0cmFuc2FjdGlvbiwgdHJ5IHRvIGRvIHNvbWUgb2Ygb3VyIElPLgorCSAqIFRoaXMgd2lsbCBsaW1pdCB0aGUgYW1vdW50IG9mIElPIHRoYXQgd2UgaGF2ZSB0byBkbyB3aXRoCisJICogdGhlIHRyYW5zYWN0aW9uIHJ1bm5pbmcuICBXZSdyZSB1bmxpa2VseSB0byBuZWVkIHRvIGRvIGFueQorCSAqIElPIGlmIHRoZSBmaWxlIGV4dGVudHMgYXJlIG5ldywgdGhlIGRpc2tfaV9zaXplIGNoZWNrcworCSAqIGNvdmVycyB0aGUgbW9zdCBjb21tb24gY2FzZS4KKwkgKi8KKwlpZiAoc3RhcnQgPCBCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUpIHsKKwkJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudChOVUxMLCByb290LCBwYXRoLAorCQkJCQkJICAgICAgIGlub2RlLT5pX2lubywKKwkJCQkJCSAgICAgICBzdGFydCwgMCk7CisJCQlvcmRlcmVkX2V4dGVudCA9IGJ0cmZzX2xvb2t1cF9vcmRlcmVkX2V4dGVudChpbm9kZSwKKwkJCQkJCQkJICAgICBzdGFydCk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSkgeworCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCQlyZWFkYV9jc3VtKHJvb3QsIHBhdGgsIG9yZGVyZWRfZXh0ZW50KTsKKwkJCX0KKwkJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJfQorCX0KKwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAotCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLCBzdGFydCk7CisJaWYgKCFvcmRlcmVkX2V4dGVudCkKKwkJb3JkZXJlZF9leHRlbnQgPSBidHJmc19sb29rdXBfb3JkZXJlZF9leHRlbnQoaW5vZGUsIHN0YXJ0KTsKIAlCVUdfT04oIW9yZGVyZWRfZXh0ZW50KTsKIAlpZiAodGVzdF9iaXQoQlRSRlNfT1JERVJFRF9OT0NPVywgJm9yZGVyZWRfZXh0ZW50LT5mbGFncykpCiAJCWdvdG8gbm9jb3c7CkBAIC0yMTAxLDYgKzIxNTUsNyBAQAogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBidHJmc19sb29rdXBfaW5vZGUodHJhbnMsIHJvb3QsIHBhdGgsCiAJCQkJICZCVFJGU19JKGlub2RlKS0+bG9jYXRpb24sIDEpOwogCWlmIChyZXQpIHsKQEAgLTIxNDcsNiArMjIwMiw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgZGlyLT5pX2lubywKIAkJCQkgICAgbmFtZSwgbmFtZV9sZW4sIC0xKTsKIAlpZiAoSVNfRVJSKGRpKSkgewpAQCAtMjE5MCw4ICsyMjQ2LDYgQEAKIAlyZXQgPSBidHJmc19kZWxfaW5vZGVfcmVmX2luX2xvZyh0cmFucywgcm9vdCwgbmFtZSwgbmFtZV9sZW4sCiAJCQkJCSBpbm9kZSwgZGlyLT5pX2lubyk7CiAJQlVHX09OKHJldCAhPSAwICYmIHJldCAhPSAtRU5PRU5UKTsKLQlpZiAocmV0ICE9IC1FTk9FTlQpCi0JCUJUUkZTX0koZGlyKS0+bG9nX2RpcnR5X3RyYW5zID0gdHJhbnMtPnRyYW5zaWQ7CiAKIAlyZXQgPSBidHJmc19kZWxfZGlyX2VudHJpZXNfaW5fbG9nKHRyYW5zLCByb290LCBuYW1lLCBuYW1lX2xlbiwKIAkJCQkJICAgZGlyLCBpbmRleCk7CkBAIC0yMjI0LDYgKzIyNzgsOSBAQAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CisKKwlidHJmc19yZWNvcmRfdW5saW5rX2Rpcih0cmFucywgZGlyLCBkZW50cnktPmRfaW5vZGUsIDApOworCiAJcmV0ID0gYnRyZnNfdW5saW5rX2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuKTsKIApAQCAtMjQ5OCw2ICsyNTU1LDcgQEAKIAlrZXkudHlwZSA9ICh1OCktMTsKIAogc2VhcmNoX2FnYWluOgorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgLTEsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwpAQCAtMjY0NCw2ICsyNzAyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChmb3VuZF9leHRlbnQpIHsKKwkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCQkJcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGV4dGVudF9zdGFydCwKIAkJCQkJCWV4dGVudF9udW1fYnl0ZXMsCiAJCQkJCQlsZWFmLT5zdGFydCwgcm9vdF9vd25lciwKQEAgLTI4NDgsMTEgKzI5MDcsMjEgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKLQkgICAgYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUgJiYgYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpIHsKLQkJZXJyID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpKSB7CisJCWlmIChhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkgeworCQkJZXJyID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UgaWYgKGlub2RlLT5pX3NpemUgPiAwICYmCisJCQkgICBhdHRyLT5pYV9zaXplID09IDApIHsKKworCQkJLyogd2UncmUgdHJ1bmNhdGluZyBhIGZpbGUgdGhhdCB1c2VkIHRvIGhhdmUgZ29vZAorCQkJICogZGF0YSBkb3duIHRvIHplcm8uICBNYWtlIHN1cmUgaXQgZ2V0cyBpbnRvCisJCQkgKiB0aGUgb3JkZXJlZCBmbHVzaCBsaXN0IHNvIHRoYXQgYW55IG5ldyB3cml0ZXMKKwkJCSAqIGdldCBkb3duIHRvIGRpc2sgcXVpY2tseS4KKwkJCSAqLworCQkJQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfZGF0YV9jbG9zZSA9IDE7CisJCX0KIAl9CiAKIAllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKQEAgLTI5ODQsMTMgKzMwNTMsMTQgQEAKIAliaS0+ZGlza19pX3NpemUgPSAwOwogCWJpLT5mbGFncyA9IDA7CiAJYmktPmluZGV4X2NudCA9ICh1NjQpLTE7Ci0JYmktPmxvZ19kaXJ0eV90cmFucyA9IDA7CisJYmktPmxhc3RfdW5saW5rX3RyYW5zID0gMDsKIAlleHRlbnRfbWFwX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLCBHRlBfTk9GUyk7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCiAJCQkgICAgIGlub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLAogCQkJICAgICBpbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAJSU5JVF9MSVNUX0hFQUQoJkJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19pbm9kZXMpOworCUlOSVRfTElTVF9IRUFEKCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZSk7CiAJbXV0ZXhfaW5pdCgmQlRSRlNfSShpbm9kZSktPmV4dGVudF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmQlRSRlNfSShpbm9kZSktPmxvZ19tdXRleCk7CkBAIC0zNDExLDggKzM0ODEsMTAgQEAKIAogCWlmIChkaXIpIHsKIAkJcmV0ID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgaW5kZXgpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlpcHV0KGlub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KIAl9CiAJLyoKIAkgKiBpbmRleF9jbnQgaXMgaWdub3JlZCBmb3IgZXZlcnl0aGluZyBidXQgYSBkaXIsCkBAIC0zNDQ5LDYgKzM1MjEsNyBAQAogCXNpemVzWzBdID0gc2l6ZW9mKHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKTsKIAlzaXplc1sxXSA9IG5hbWVfbGVuICsgc2l6ZW9mKCpyZWYpOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwga2V5LCBzaXplcywgMik7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZhaWw7CkBAIC0zNDk0LDYgKzM1NjcsNyBAQAogCWlmIChkaXIpCiAJCUJUUkZTX0koZGlyKS0+aW5kZXhfY250LS07CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCWlwdXQoaW5vZGUpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKQEAgLTM3MjcsNiArMzgwMSw4IEBACiAJCWRyb3BfaW5vZGUgPSAxOwogCiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CisKKwlidHJmc19sb2dfbmV3X25hbWUodHJhbnMsIGlub2RlLCBOVUxMLCBkZW50cnktPmRfcGFyZW50KTsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKIAlpZiAoZHJvcF9pbm9kZSkgewpAQCAtNDI5Miw4ICs0MzY4LDkgQEAKICAqIGJleW9uZCBFT0YsIHRoZW4gdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZQogICogdW5sb2NrIHRoZSBwYWdlLgogICovCi1pbnQgYnRyZnNfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2ludCBidHJmc19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KHZtYS0+dm1fZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmlvX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWU7CkBAIC00MzA2LDEwICs0MzgzLDE1IEBACiAJdTY0IHBhZ2VfZW5kOwogCiAJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCWVsc2UgLyogLUVOT1NQQywgLUVJTywgZXRjICovCisJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJCWdvdG8gb3V0OworCX0KIAotCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gVk1fRkFVTFRfTk9QQUdFOyAvKiBtYWtlIHRoZSBWTSByZXRyeSB0aGUgZmF1bHQgKi8KIGFnYWluOgogCWxvY2tfcGFnZShwYWdlKTsKIAlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwpAQCAtNDM1Nyw2ICs0NDM5LDggQEAKIAl9CiAJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbiArIDE7CiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgpAQCAtNDM4Miw2ICs0NDY2LDI3IEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCisJLyoKKwkgKiBzZXRhdHRyIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBvcmRlcmVkX2RhdGFfY2xvc2UgZmxhZywKKwkgKiBidXQgdGhhdCBpcyBvbmx5IHRlc3RlZCBkdXJpbmcgdGhlIGxhc3QgZmlsZSByZWxlYXNlLiAgVGhhdAorCSAqIGNvdWxkIGhhcHBlbiB3ZWxsIGFmdGVyIHRoZSBuZXh0IGNvbW1pdCwgbGVhdmluZyBhIGdyZWF0IGJpZworCSAqIHdpbmRvdyB3aGVyZSBuZXcgd3JpdGVzIG1heSBnZXQgbG9zdCBpZiBzb21lb25lIGNob29zZXMgdG8gd3JpdGUKKwkgKiB0byB0aGlzIGZpbGUgYWZ0ZXIgdHJ1bmNhdGluZyB0byB6ZXJvCisJICoKKwkgKiBUaGUgaW5vZGUgZG9lc24ndCBoYXZlIGFueSBkaXJ0eSBkYXRhIGhlcmUsIGFuZCBzbyBpZiB3ZSBjb21taXQKKwkgKiB0aGlzIGlzIGEgbm9vcC4gIElmIHNvbWVvbmUgaW1tZWRpYXRlbHkgc3RhcnRzIHdyaXRpbmcgdG8gdGhlIGlub2RlCisJICogaXQgaXMgdmVyeSBsaWtlbHkgd2UnbGwgY2F0Y2ggc29tZSBvZiB0aGVpciB3cml0ZXMgaW4gdGhpcworCSAqIHRyYW5zYWN0aW9uLCBhbmQgdGhlIGNvbW1pdCB3aWxsIGZpbmQgdGhpcyBmaWxlIG9uIHRoZSBvcmRlcmVkCisJICogZGF0YSBsaXN0IHdpdGggZ29vZCB0aGluZ3MgdG8gc2VuZCBkb3duLgorCSAqCisJICogVGhpcyBpcyBhIGJlc3QgZWZmb3J0IHNvbHV0aW9uLCB0aGVyZSBpcyBzdGlsbCBhIHdpbmRvdyB3aGVyZQorCSAqIHVzaW5nIHRydW5jYXRlIHRvIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHdpbGwKKwkgKiBlbmQgdXAgd2l0aCBhIHplcm8gbGVuZ3RoIGZpbGUgYWZ0ZXIgYSBjcmFzaC4KKwkgKi8KKwlpZiAoaW5vZGUtPmlfc2l6ZSA9PSAwICYmIEJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UpCisJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgaW5vZGUpOworCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIApAQCAtNDQ1OCwxMiArNDU2MywxNSBAQAogCWVpLT5pX2FjbCA9IEJUUkZTX0FDTF9OT1RfQ0FDSEVEOwogCWVpLT5pX2RlZmF1bHRfYWNsID0gQlRSRlNfQUNMX05PVF9DQUNIRUQ7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CisJSU5JVF9MSVNUX0hFQUQoJmVpLT5vcmRlcmVkX29wZXJhdGlvbnMpOwogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAogdm9pZCBidHJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKTsKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKQEAgLTQ0NzQsMTMgKzQ1ODIsMjQgQEAKIAkgICAgQlRSRlNfSShpbm9kZSktPmlfZGVmYXVsdF9hY2wgIT0gQlRSRlNfQUNMX05PVF9DQUNIRUQpCiAJCXBvc2l4X2FjbF9yZWxlYXNlKEJUUkZTX0koaW5vZGUpLT5pX2RlZmF1bHRfYWNsKTsKIAotCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmxpc3RfbG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UncmUgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBvcmRlcmVkIG9wZXJhdGlvbgorCSAqIGxpc3RzLgorCSAqLworCXNtcF9tYigpOworCWlmICghbGlzdF9lbXB0eSgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucykpIHsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwl9CisKKwlzcGluX2xvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+aV9vcnBoYW4pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQlRSRlM6IGlub2RlICVsdTogaW5vZGUgc3RpbGwgb24gdGhlIG9ycGhhbiIKIAkJICAgICAgICIgbGlzdFxuIiwgaW5vZGUtPmlfaW5vKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KLQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmxpc3RfbG9jayk7CisJc3Bpbl91bmxvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAKIAl3aGlsZSAoMSkgewogCQlvcmRlcmVkID0gYnRyZnNfbG9va3VwX2ZpcnN0X29yZGVyZWRfZXh0ZW50KGlub2RlLCAodTY0KS0xKTsKQEAgLTQ2MDUsOCArNDcyNCwzNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCS8qCisJICogd2UncmUgdXNpbmcgcmVuYW1lIHRvIHJlcGxhY2Ugb25lIGZpbGUgd2l0aCBhbm90aGVyLgorCSAqIGFuZCB0aGUgcmVwbGFjZW1lbnQgZmlsZSBpcyBsYXJnZS4gIFN0YXJ0IElPIG9uIGl0IG5vdyBzbworCSAqIHdlIGRvbid0IGFkZCB0b28gbXVjaCB3b3JrIHRvIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uCisJICovCisJaWYgKG5ld19pbm9kZSAmJiBvbGRfaW5vZGUgJiYgU19JU1JFRyhvbGRfaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgbmV3X2lub2RlLT5pX3NpemUgJiYKKwkgICAgb2xkX2lub2RlLT5pX3NpemUgPiBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQpCisJCWZpbGVtYXBfZmx1c2gob2xkX2lub2RlLT5pX21hcHBpbmcpOworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAorCS8qCisJICogbWFrZSBzdXJlIHRoZSBpbm9kZSBnZXRzIGZsdXNoZWQgaWYgaXQgaXMgcmVwbGFjaW5nCisJICogc29tZXRoaW5nLgorCSAqLworCWlmIChuZXdfaW5vZGUgJiYgbmV3X2lub2RlLT5pX3NpemUgJiYKKwkgICAgb2xkX2lub2RlICYmIFNfSVNSRUcob2xkX2lub2RlLT5pX21vZGUpKSB7CisJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgb2xkX2lub2RlKTsKKwl9CisKKwkvKgorCSAqIHRoaXMgaXMgYW4gdWdseSBsaXR0bGUgcmFjZSwgYnV0IHRoZSByZW5hbWUgaXMgcmVxdWlyZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCBpZiB3ZSBjcmFzaCwgdGhlIGlub2RlIGlzIGVpdGhlciBhdCB0aGUgb2xkIG5hbWUKKwkgKiBvciB0aGUgbmV3IG9uZS4gIHBpbm5pbmcgdGhlIGxvZyB0cmFuc2FjdGlvbiBsZXRzIHVzIG1ha2Ugc3VyZQorCSAqIHdlIGRvbid0IGFsbG93IGEgbG9nIGNvbW1pdCB0byBjb21lIGluIGFmdGVyIHdlIHVubGluayB0aGUKKwkgKiBuYW1lIGJ1dCBiZWZvcmUgd2UgYWRkIHRoZSBuZXcgbmFtZSBiYWNrIGluLgorCSAqLworCWJ0cmZzX3Bpbl9sb2dfdHJhbnMocm9vdCk7CisKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIG5ld19kaXIpOwogCiAJYnRyZnNfaW5jX25saW5rKG9sZF9kZW50cnktPmRfaW5vZGUpOwpAQCAtNDYxNCw2ICs0NzYxLDkgQEAKIAluZXdfZGlyLT5pX2N0aW1lID0gbmV3X2Rpci0+aV9tdGltZSA9IGN0aW1lOwogCW9sZF9pbm9kZS0+aV9jdGltZSA9IGN0aW1lOwogCisJaWYgKG9sZF9kZW50cnktPmRfcGFyZW50ICE9IG5ld19kZW50cnktPmRfcGFyZW50KQorCQlidHJmc19yZWNvcmRfdW5saW5rX2Rpcih0cmFucywgb2xkX2Rpciwgb2xkX2lub2RlLCAxKTsKKwogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgb2xkX2Rpciwgb2xkX2RlbnRyeS0+ZF9pbm9kZSwKIAkJCQkgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJIG9sZF9kZW50cnktPmRfbmFtZS5sZW4pOwpAQCAtNDY0NSw3ICs0Nzk1LDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZmFpbDsKIAorCWJ0cmZzX2xvZ19uZXdfbmFtZSh0cmFucywgb2xkX2lub2RlLCBvbGRfZGlyLAorCQkJCSAgICAgICBuZXdfZGVudHJ5LT5kX3BhcmVudCk7CiBvdXRfZmFpbDoKKworCS8qIHRoaXMgYnRyZnNfZW5kX2xvZ190cmFucyBqdXN0IGFsbG93cyB0aGUgY3VycmVudAorCSAqIGxvZy1zdWIgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUKKwkgKi8KKwlidHJmc19lbmRfbG9nX3RyYW5zKHJvb3QpOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBvdXRfdW5sb2NrOgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBiY2E3MjlmLi43NTk0YmVjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQlnb3RvIG91dF9kcHV0OwogCiAJaWYgKCFJU19QT1NJWEFDTChwYXJlbnQtPmRlbnRyeS0+ZF9pbm9kZSkpCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXJlbnQtPm1udCk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbG9ja2luZy5jIGIvZnMvYnRyZnMvbG9ja2luZy5jCmluZGV4IDQ3YjBhODguLjFjMzZlNWMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2xvY2tpbmcuYworKysgYi9mcy9idHJmcy9sb2NraW5nLmMKQEAgLTYwLDggKzYwLDggQEAKIAogLyoKICAqIHVuZm9ydHVuYXRlbHksIG1hbnkgb2YgdGhlIHBsYWNlcyB0aGF0IGN1cnJlbnRseSBzZXQgYSBsb2NrIHRvIGJsb2NraW5nCi0gKiBkb24ndCBlbmQgdXAgYmxvY2tpbmcgZm9yIGV2ZXJ5IGxvbmcsIGFuZCBvZnRlbiB0aGV5IGRvbid0IGJsb2NrCi0gKiBhdCBhbGwuICBGb3IgYSBkYmVuY2ggNTAgcnVuLCBpZiB3ZSBkb24ndCBzcGluIG9uZSB0aGUgYmxvY2tpbmcgYml0CisgKiBkb24ndCBlbmQgdXAgYmxvY2tpbmcgZm9yIHZlcnkgbG9uZywgYW5kIG9mdGVuIHRoZXkgZG9uJ3QgYmxvY2sKKyAqIGF0IGFsbC4gIEZvciBhIGRiZW5jaCA1MCBydW4sIGlmIHdlIGRvbid0IHNwaW4gb24gdGhlIGJsb2NraW5nIGJpdAogICogYXQgYWxsLCB0aGUgY29udGV4dCBzd2l0Y2ggcmF0ZSBjYW4ganVtcCB1cCB0byA0MDAsMDAwL3NlYyBvciBtb3JlLgogICoKICAqIFNvLCB3ZSdyZSBzdGlsbCBzdHVjayB3aXRoIHRoaXMgY3J1bW15IHNwaW4gb24gdGhlIGJsb2NraW5nIGJpdCwKQEAgLTcxLDEyICs3MSwxMyBAQAogc3RhdGljIGludCBidHJmc19zcGluX29uX2Jsb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCA1MTI7IGkrKykgewotCQljcHVfcmVsYXgoKTsKIAkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfQlVGRkVSX0JMT0NLSU5HLCAmZWItPmJmbGFncykpCiAJCQlyZXR1cm4gMTsKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk1LDEzICs5NiwxNSBAQAogewogCWludCBpOwogCi0Jc3Bpbl9uZXN0ZWQoZWIpOwotCWlmICghdGVzdF9iaXQoRVhURU5UX0JVRkZFUl9CTE9DS0lORywgJmViLT5iZmxhZ3MpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jaygmZWItPmxvY2spOwotCisJaWYgKGJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKSB7CisJCXNwaW5fbmVzdGVkKGViKTsKKwkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfQlVGRkVSX0JMT0NLSU5HLCAmZWItPmJmbGFncykpCisJCQlyZXR1cm4gMTsKKwkJc3Bpbl91bmxvY2soJmViLT5sb2NrKTsKKwl9CiAJLyogc3BpbiBmb3IgYSBiaXQgb24gdGhlIEJMT0NLSU5HIGZsYWcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNwdV9yZWxheCgpOwogCQlpZiAoIWJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQogCQkJYnJlYWs7CiAKQEAgLTE0OCw2ICsxNTEsOSBAQAogCURFRklORV9XQUlUKHdhaXQpOwogCXdhaXQuZnVuYyA9IGJ0cmZzX3dha2VfZnVuY3Rpb247CiAKKwlpZiAoIWJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQorCQlnb3RvIHNsZWVwOworCiAJd2hpbGUoMSkgewogCQlzcGluX25lc3RlZChlYik7CiAKQEAgLTE2NSw5ICsxNzEsMTAgQEAKIAkJICogc3BpbiBmb3IgYSBiaXQsIGFuZCBpZiB0aGUgYmxvY2tpbmcgZmxhZyBnb2VzIGF3YXksCiAJCSAqIGxvb3AgYXJvdW5kCiAJCSAqLworCQljcHVfcmVsYXgoKTsKIAkJaWYgKGJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQogCQkJY29udGludWU7Ci0KK3NsZWVwOgogCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZlYi0+bG9ja193cSwgJndhaXQsCiAJCQkJCSAgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IDc3YzI0MTEuLjUzYzg3YjEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0zMTAsNiArMzEwLDE2IEBACiAKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZlbnRyeS0+cm9vdF9leHRlbnRfbGlzdCk7CisKKwkvKgorCSAqIHdlIGhhdmUgbm8gbW9yZSBvcmRlcmVkIGV4dGVudHMgZm9yIHRoaXMgaW5vZGUgYW5kCisJICogbm8gZGlydHkgcGFnZXMuICBXZSBjYW4gc2FmZWx5IHJlbW92ZSBpdCBmcm9tIHRoZQorCSAqIGxpc3Qgb2Ygb3JkZXJlZCBleHRlbnRzCisJICovCisJaWYgKFJCX0VNUFRZX1JPT1QoJnRyZWUtPnRyZWUpICYmCisJICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS0+aV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkgeworCQlsaXN0X2RlbF9pbml0KCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zKTsKKwl9CiAJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKIAogCW11dGV4X3VubG9jaygmdHJlZS0+bXV0ZXgpOwpAQCAtMzcwLDYgKzM4MCw2OCBAQAogfQogCiAvKgorICogdGhpcyBpcyB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbiBjb21taXQgdG8gd3JpdGUgYWxsIHRoZSBpbm9kZXMKKyAqIGFkZGVkIHRvIHRoZSBvcmRlcmVkIG9wZXJhdGlvbiBsaXN0LiAgVGhlc2UgZmlsZXMgbXVzdCBiZSBmdWxseSBvbgorICogZGlzayBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisgKgorICogd2UgaGF2ZSB0d28gbW9kZXMgaGVyZSwgb25lIGlzIHRvIGp1c3Qgc3RhcnQgdGhlIElPIHZpYSBmaWxlbWFwX2ZsdXNoCisgKiBhbmQgdGhlIG90aGVyIGlzIHRvIHdhaXQgZm9yIGFsbCB0aGUgaW8uICBXaGVuIHdlIHdhaXQsIHdlIGhhdmUgYW4KKyAqIGV4dHJhIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgb3JkZXJlZCBvcGVyYXRpb24gbGlzdCByZWFsbHkgaXMgZW1wdHkKKyAqIGJlZm9yZSB3ZSByZXR1cm4KKyAqLworaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KQoreworCXN0cnVjdCBidHJmc19pbm9kZSAqYnRyZnNfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNwbGljZTsKKworCUlOSVRfTElTVF9IRUFEKCZzcGxpY2UpOworCisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworYWdhaW46CisJbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zLCAmc3BsaWNlKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3BsaWNlKSkgeworCQlidHJmc19pbm9kZSA9IGxpc3RfZW50cnkoc3BsaWNlLm5leHQsIHN0cnVjdCBidHJmc19pbm9kZSwKKwkJCQkgICBvcmRlcmVkX29wZXJhdGlvbnMpOworCisJCWlub2RlID0gJmJ0cmZzX2lub2RlLT52ZnNfaW5vZGU7CisKKwkJbGlzdF9kZWxfaW5pdCgmYnRyZnNfaW5vZGUtPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisKKwkJLyoKKwkJICogdGhlIGlub2RlIG1heSBiZSBnZXR0aW5nIGZyZWVkIChpbiBzeXNfdW5saW5rIHBhdGgpLgorCQkgKi8KKwkJaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisKKwkJaWYgKCF3YWl0ICYmIGlub2RlKSB7CisJCQlsaXN0X2FkZF90YWlsKCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zLAorCQkJICAgICAgJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworCisJCWlmIChpbm9kZSkgeworCQkJaWYgKHdhaXQpCisJCQkJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKKwkJCWVsc2UKKwkJCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCQkJaXB1dChpbm9kZSk7CisJCX0KKworCQljb25kX3Jlc2NoZWQoKTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwl9CisJaWYgKHdhaXQgJiYgIWxpc3RfZW1wdHkoJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucykpCisJCWdvdG8gYWdhaW47CisKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBVc2VkIHRvIHN0YXJ0IElPIG9yIHdhaXQgZm9yIGEgZ2l2ZW4gb3JkZXJlZCBleHRlbnQgdG8gZmluaXNoLgogICoKICAqIElmIHdhaXQgaXMgb25lLCB0aGlzIGVmZmVjdGl2ZWx5IHdhaXRzIG9uIHBhZ2Ugd3JpdGViYWNrIGZvciBhbGwgdGhlIHBhZ2VzCkBAIC03MjYsMyArNzk4LDQ5IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogYWRkIGEgZ2l2ZW4gaW5vZGUgdG8gdGhlIGxpc3Qgb2YgaW5vZGVzIHRoYXQgbXVzdCBiZSBmdWxseSBvbgorICogZGlzayBiZWZvcmUgYSB0cmFuc2FjdGlvbiBjb21taXQgZmluaXNoZXMuCisgKgorICogVGhpcyBiYXNpY2FsbHkgZ2l2ZXMgdXMgdGhlIGV4dDMgc3R5bGUgZGF0YT1vcmRlcmVkIG1vZGUsIGFuZCBpdCBpcyBtb3N0bHkKKyAqIHVzZWQgdG8gbWFrZSBzdXJlIHJlbmFtZWQgZmlsZXMgYXJlIGZ1bGx5IG9uIGRpc2suCisgKgorICogSXQgaXMgYSBub29wIGlmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IG9uIGRpc2suCisgKgorICogSWYgdHJhbnMgaXMgbm90IG51bGwsIHdlJ2xsIGRvIGEgZnJpZW5kbHkgY2hlY2sgZm9yIGEgdHJhbnNhY3Rpb24gdGhhdAorICogaXMgYWxyZWFkeSBmbHVzaGluZyB0aGluZ3MgYW5kIGZvcmNlIHRoZSBJTyBkb3duIG91cnNlbHZlcy4KKyAqLworaW50IGJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXU2NCBsYXN0X21vZDsKKworCWxhc3RfbW9kID0gbWF4KEJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uLCBCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyk7CisKKwkvKgorCSAqIGlmIHRoaXMgZmlsZSBoYXNuJ3QgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRyYW5zYWN0aW9uCisJICogY29tbWl0LCB3ZSBjYW4gc2FmZWx5IHJldHVybiB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisJICovCisJaWYgKGxhc3RfbW9kIDwgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0aW5nLiAgSnVzdCBzdGFydCB0aGUgSU8gYW5kCisJICogZG9uJ3QgYm90aGVyIHdpdGggYWxsIG9mIHRoaXMgbGlzdCBub25zZW5zZQorCSAqLworCWlmICh0cmFucyAmJiByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT5ibG9ja2VkKSB7CisJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX29wZXJhdGlvbnMpKSB7CisJCWxpc3RfYWRkX3RhaWwoJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX29wZXJhdGlvbnMsCisJCQkgICAgICAmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zKTsKKwl9CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaCBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCmluZGV4IGFiNjZkNWUuLjNkMzFjODggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCkBAIC0xNTUsNCArMTU1LDggQEAKIGludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCiAJCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKTsKIGludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG5vY293X29ubHkpOworaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KTsKK2ludCBidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDE5YTRkYWYuLjk3NDRhZjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgpAQCAtNjYsNyArNjcsOCBAQAogZW51bSB7CiAJT3B0X2RlZ3JhZGVkLCBPcHRfc3Vidm9sLCBPcHRfZGV2aWNlLCBPcHRfbm9kYXRhc3VtLCBPcHRfbm9kYXRhY293LAogCU9wdF9tYXhfZXh0ZW50LCBPcHRfbWF4X2lubGluZSwgT3B0X2FsbG9jX3N0YXJ0LCBPcHRfbm9iYXJyaWVyLAotCU9wdF9zc2QsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLCAgT3B0X2NvbXByZXNzLCBPcHRfZXJyLAorCU9wdF9zc2QsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLCAgT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLAorCU9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODMsNiArODUsOCBAQAogCXtPcHRfY29tcHJlc3MsICJjb21wcmVzcyJ9LAogCXtPcHRfc3NkLCAic3NkIn0sCiAJe09wdF9ub2FjbCwgIm5vYWNsIn0sCisJe09wdF9ub3RyZWVsb2csICJub3RyZWVsb2cifSwKKwl7T3B0X2ZsdXNob25jb21taXQsICJmbHVzaG9uY29tbWl0In0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjIyLDYgKzIyNiwxNCBAQAogCQljYXNlIE9wdF9ub2FjbDoKIAkJCXJvb3QtPmZzX2luZm8tPnNiLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9ub3RyZWVsb2c6CisJCQlwcmludGsoS0VSTl9JTkZPICJidHJmczogZGlzYWJsaW5nIHRyZWUgbG9nXG4iKTsKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBOT1RSRUVMT0cpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZsdXNob25jb21taXQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJidHJmczogdHVybmluZyBvbiBmbHVzaC1vbi1jb21taXRcbiIpOworCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIEZMVVNIT05DT01NSVQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMzYzLDkgKzM3NSw4IEBACiBpbnQgYnRyZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHNiKTsKIAlpbnQgcmV0OwotCXJvb3QgPSBidHJmc19zYihzYik7CiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwpAQCAtMzg1LDYgKzM5Niw0MSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYnRyZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHZmcy0+bW50X3NiKTsKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgREVHUkFERUQpKQorCQlzZXFfcHV0cyhzZXEsICIsZGVncmFkZWQiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgTk9EQVRBU1VNKSkKKwkJc2VxX3B1dHMoc2VxLCAiLG5vZGF0YXN1bSIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT0RBVEFDT1cpKQorCQlzZXFfcHV0cyhzZXEsICIsbm9kYXRhY293Iik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIE5PQkFSUklFUikpCisJCXNlcV9wdXRzKHNlcSwgIixub2JhcnJpZXIiKTsKKwlpZiAoaW5mby0+bWF4X2V4dGVudCAhPSAodTY0KS0xKQorCQlzZXFfcHJpbnRmKHNlcSwgIixtYXhfZXh0ZW50PSVsbHUiLCBpbmZvLT5tYXhfZXh0ZW50KTsKKwlpZiAoaW5mby0+bWF4X2lubGluZSAhPSA4MTkyICogMTAyNCkKKwkJc2VxX3ByaW50ZihzZXEsICIsbWF4X2lubGluZT0lbGx1IiwgaW5mby0+bWF4X2lubGluZSk7CisJaWYgKGluZm8tPmFsbG9jX3N0YXJ0ICE9IDApCisJCXNlcV9wcmludGYoc2VxLCAiLGFsbG9jX3N0YXJ0PSVsbHUiLCBpbmZvLT5hbGxvY19zdGFydCk7CisJaWYgKGluZm8tPnRocmVhZF9wb29sX3NpemUgIT0gIG1pbl90KHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICAgbnVtX29ubGluZV9jcHVzKCkgKyAyLCA4KSkKKwkJc2VxX3ByaW50ZihzZXEsICIsdGhyZWFkX3Bvb2w9JWQiLCBpbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgQ09NUFJFU1MpKQorCQlzZXFfcHV0cyhzZXEsICIsY29tcHJlc3MiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgU1NEKSkKKwkJc2VxX3B1dHMoc2VxLCAiLHNzZCIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT1RSRUVMT0cpKQorCQlzZXFfcHV0cyhzZXEsICIsbm8tdHJlZWxvZyIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBGTFVTSE9OQ09NTUlUKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGZsdXNoLW9uLWNvbW1pdCIpOworCWlmICghKHJvb3QtPmZzX2luZm8tPnNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpKQorCQlzZXFfcHV0cyhzZXEsICIsbm9hY2wiKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgYnRyZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzYi0+c19kaXJ0ID0gMDsKQEAgLTYzMCw3ICs2NzYsNyBAQAogCS5wdXRfc3VwZXIJPSBidHJmc19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyCT0gYnRyZnNfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBidHJmc19zeW5jX2ZzLAotCS5zaG93X29wdGlvbnMJPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKKwkuc2hvd19vcHRpb25zCT0gYnRyZnNfc2hvd19vcHRpb25zLAogCS53cml0ZV9pbm9kZQk9IGJ0cmZzX3dyaXRlX2lub2RlLAogCS5kaXJ0eV9pbm9kZQk9IGJ0cmZzX2RpcnR5X2lub2RlLAogCS5hbGxvY19pbm9kZQk9IGJ0cmZzX2FsbG9jX2lub2RlLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggNDExMmQ1My4uMjg2OWIzMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC01Myw4ICs1Myw2IEBACiAJCQkJCSAgICAgR0ZQX05PRlMpOwogCQlCVUdfT04oIWN1cl90cmFucyk7CiAJCXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24rKzsKLQkJcm9vdC0+ZnNfaW5mby0+bGFzdF9hbGxvYyA9IDA7Ci0JCXJvb3QtPmZzX2luZm8tPmxhc3RfZGF0YV9hbGxvYyA9IDA7CiAJCWN1cl90cmFucy0+bnVtX3dyaXRlcnMgPSAxOwogCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwogCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwpAQCAtNjUsNiArNjMsMTUgQEAKIAkJY3VyX3RyYW5zLT51c2VfY291bnQgPSAxOwogCQljdXJfdHJhbnMtPmNvbW1pdF9kb25lID0gMDsKIAkJY3VyX3RyYW5zLT5zdGFydF90aW1lID0gZ2V0X3NlY29uZHMoKTsKKworCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290LnJiX25vZGUgPSBOVUxMOworCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1fZW50cmllcyA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLm51bV9oZWFkc19yZWFkeSA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLm51bV9oZWFkcyA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMDsKKwkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMucnVuX2RlbGF5ZWRfc3RhcnQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubG9jayk7CisKIAkJSU5JVF9MSVNUX0hFQUQoJmN1cl90cmFucy0+cGVuZGluZ19zbmFwc2hvdHMpOwogCQlsaXN0X2FkZF90YWlsKCZjdXJfdHJhbnMtPmxpc3QsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KTsKIAkJZXh0ZW50X2lvX3RyZWVfaW5pdCgmY3VyX3RyYW5zLT5kaXJ0eV9wYWdlcywKQEAgLTE4Miw2ICsxODksOCBAQAogCWgtPmJsb2NrX2dyb3VwID0gMDsKIAloLT5hbGxvY19leGNsdWRlX25yID0gMDsKIAloLT5hbGxvY19leGNsdWRlX3N0YXJ0ID0gMDsKKwloLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKKwogCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnVzZV9jb3VudCsrOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXJldHVybiBoOwpAQCAtMjcxLDcgKzI4MCw2IEBACiAJaWYgKCFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKQogCQl3YWl0X2N1cnJlbnRfdHJhbnMocm9vdCk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAl0aHJvdHRsZV9vbl9kcm9wcyhyb290KTsKIH0KIApAQCAtMjgwLDYgKzI4OCwyNyBAQAogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOwogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwlpbnQgY291bnQgPSAwOworCisJd2hpbGUgKGNvdW50IDwgNCkgeworCQl1bnNpZ25lZCBsb25nIGN1ciA9IHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzOworCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisJCWlmIChjdXIgJiYKKwkJICAgIHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLm51bV9oZWFkc19yZWFkeSA+IDY0KSB7CisJCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisKKwkJCS8qCisJCQkgKiBkbyBhIGZ1bGwgZmx1c2ggaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHRyeWluZworCQkJICogdG8gY2xvc2UKKwkJCSAqLworCQkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKQorCQkJCWN1ciA9IDA7CisJCQlidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCBjdXIpOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkJY291bnQrKzsKKwl9CiAKIAltdXRleF9sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CiAJY3VyX3RyYW5zID0gaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKQEAgLTQyNCw5ICs0NTMsMTAgQEAKIAl1NjQgb2xkX3Jvb3RfYnl0ZW5yOwogCXN0cnVjdCBidHJmc19yb290ICp0cmVlX3Jvb3QgPSByb290LT5mc19pbmZvLT50cmVlX3Jvb3Q7CiAKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7CiAJYnRyZnNfd3JpdGVfZGlydHlfYmxvY2tfZ3JvdXBzKHRyYW5zLCByb290KTsKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7CisKKwlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJQlVHX09OKHJldCk7CiAKIAl3aGlsZSAoMSkgewogCQlvbGRfcm9vdF9ieXRlbnIgPSBidHJmc19yb290X2J5dGVucigmcm9vdC0+cm9vdF9pdGVtKTsKQEAgLTQzOCwxNCArNDY4LDE0IEBACiAJCQkJICAgICBidHJmc19oZWFkZXJfbGV2ZWwocm9vdC0+bm9kZSkpOwogCQlidHJmc19zZXRfcm9vdF9nZW5lcmF0aW9uKCZyb290LT5yb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAotCQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7Ci0KIAkJcmV0ID0gYnRyZnNfdXBkYXRlX3Jvb3QodHJhbnMsIHRyZWVfcm9vdCwKIAkJCQkJJnJvb3QtPnJvb3Rfa2V5LAogCQkJCQkmcm9vdC0+cm9vdF9pdGVtKTsKIAkJQlVHX09OKHJldCk7CiAJCWJ0cmZzX3dyaXRlX2RpcnR5X2Jsb2NrX2dyb3Vwcyh0cmFucywgcm9vdCk7Ci0JCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCByb290KTsKKworCQlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJCUJVR19PTihyZXQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OSwxNSArNDg5LDE4IEBACiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByb290LT5mc19pbmZvOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViOworCWludCByZXQ7CiAKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgZnNfaW5mby0+dHJlZV9yb290KTsKKwlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJQlVHX09OKHJldCk7CiAKIAllYiA9IGJ0cmZzX2xvY2tfcm9vdF9ub2RlKGZzX2luZm8tPnRyZWVfcm9vdCk7Ci0JYnRyZnNfY293X2Jsb2NrKHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QsIGViLCBOVUxMLCAwLCAmZWIsIDApOworCWJ0cmZzX2Nvd19ibG9jayh0cmFucywgZnNfaW5mby0+dHJlZV9yb290LCBlYiwgTlVMTCwgMCwgJmViKTsKIAlidHJmc190cmVlX3VubG9jayhlYik7CiAJZnJlZV9leHRlbnRfYnVmZmVyKGViKTsKIAotCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QpOworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsICh1bnNpZ25lZCBsb25nKS0xKTsKKwlCVUdfT04ocmV0KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmZnNfaW5mby0+ZGlydHlfY293b25seV9yb290cykpIHsKIAkJbmV4dCA9IGZzX2luZm8tPmRpcnR5X2Nvd29ubHlfcm9vdHMubmV4dDsKQEAgLTQ3NSw2ICs1MDgsOSBAQAogCQlyb290ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgYnRyZnNfcm9vdCwgZGlydHlfbGlzdCk7CiAKIAkJdXBkYXRlX2Nvd29ubHlfcm9vdCh0cmFucywgcm9vdCk7CisKKwkJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgKHVuc2lnbmVkIGxvbmcpLTEpOworCQlCVUdfT04ocmV0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MzUsNiArNjcxLDMxIEBACiB9CiAKIC8qCisgKiB3aGVuIGRyb3BwaW5nIHNuYXBzaG90cywgd2UgZ2VuZXJhdGUgYSB0b24gb2YgZGVsYXllZCByZWZzLCBhbmQgaXQgbWFrZXMKKyAqIHNlbnNlIG5vdCB0byBqb2luIHRoZSB0cmFuc2FjdGlvbiB3aGlsZSBpdCBpcyB0cnlpbmcgdG8gZmx1c2ggdGhlIGN1cnJlbnQKKyAqIHF1ZXVlIG9mIGRlbGF5ZWQgcmVmcyBvdXQuCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBkcm9wIHNuYXBzaG90IGNvZGUgb25seQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IHdhaXRfdHJhbnNhY3Rpb25fcHJlX2ZsdXNoKHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKQoreworCURFRklORV9XQUlUKHdhaXQpOworCisJbXV0ZXhfbG9jaygmaW5mby0+dHJhbnNfbXV0ZXgpOworCXdoaWxlIChpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uICYmCisJICAgICAgIGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgeworCQlwcmVwYXJlX3RvX3dhaXQoJmluZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAorCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CisJCXNjaGVkdWxlKCk7CisJCW11dGV4X2xvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKwkJZmluaXNoX3dhaXQoJmluZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBHaXZlbiBhIGxpc3Qgb2Ygcm9vdHMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQsIGNhbGwgYnRyZnNfZHJvcF9zbmFwc2hvdCBvbgogICogYWxsIG9mIHRoZW0KICAqLwpAQCAtNjYxLDcgKzcyMiwyMiBAQAogCQlhdG9taWNfaW5jKCZyb290LT5mc19pbmZvLT50aHJvdHRsZXMpOwogCiAJCXdoaWxlICgxKSB7CisJCQkvKgorCQkJICogd2UgZG9uJ3Qgd2FudCB0byBqdW1wIGluIGFuZCBjcmVhdGUgYSBidW5jaCBvZgorCQkJICogZGVsYXllZCByZWZzIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBzdGFydGluZyB0byBjbG9zZQorCQkJICovCisJCQl3YWl0X3RyYW5zYWN0aW9uX3ByZV9mbHVzaCh0cmVlX3Jvb3QtPmZzX2luZm8pOwogCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDEpOworCisJCQkvKgorCQkJICogd2UndmUgam9pbmVkIGEgdHJhbnNhY3Rpb24sIG1ha2Ugc3VyZSBpdCBpc24ndAorCQkJICogY2xvc2luZyByaWdodCBub3cKKwkJCSAqLworCQkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCB0cmVlX3Jvb3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5kcm9wX211dGV4KTsKIAkJCXJldCA9IGJ0cmZzX2Ryb3Bfc25hcHNob3QodHJhbnMsIGRpcnR5LT5yb290KTsKIAkJCWlmIChyZXQgIT0gLUVBR0FJTikKQEAgLTc2Niw3ICs4NDIsNyBAQAogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19ST09UX0lURU1fS0VZKTsKIAogCW9sZCA9IGJ0cmZzX2xvY2tfcm9vdF9ub2RlKHJvb3QpOwotCWJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgb2xkLCBOVUxMLCAwLCAmb2xkLCAwKTsKKwlidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIG9sZCwgTlVMTCwgMCwgJm9sZCk7CiAKIAlidHJmc19jb3B5X3Jvb3QodHJhbnMsIHJvb3QsIG9sZCwgJnRtcCwgb2JqZWN0aWQpOwogCWJ0cmZzX3RyZWVfdW5sb2NrKG9sZCk7CkBAIC04OTQsMTIgKzk3MCwzMiBAQAogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqcGlubmVkX2NvcHk7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJaW50IHJldDsKKwlpbnQgc2hvdWxkX2dyb3cgPSAwOworCXVuc2lnbmVkIGxvbmcgbm93ID0gZ2V0X3NlY29uZHMoKTsKKwlpbnQgZmx1c2hfb25fY29tbWl0ID0gYnRyZnNfdGVzdF9vcHQocm9vdCwgRkxVU0hPTkNPTU1JVCk7CiAKLQlJTklUX0xJU1RfSEVBRCgmZGlydHlfZnNfcm9vdHMpOworCWJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMocm9vdCwgMCk7CisKKwkvKiBtYWtlIGEgcGFzcyB0aHJvdWdoIGFsbCB0aGUgZGVsYXllZCByZWZzIHdlIGhhdmUgc28gZmFyCisJICogYW55IHJ1bm5pbmdzIHByb2NzIG1heSBhZGQgbW9yZSB3aGlsZSB3ZSBhcmUgaGVyZQorCSAqLworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsIDApOworCUJVR19PTihyZXQpOworCisJY3VyX3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uOworCS8qCisJICogc2V0IHRoZSBmbHVzaGluZyBmbGFnIHNvIHByb2NzIGluIHRoaXMgdHJhbnNhY3Rpb24gaGF2ZSB0bworCSAqIHN0YXJ0IHNlbmRpbmcgdGhlaXIgd29yayBkb3duLgorCSAqLworCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMTsKKworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsIDApOworCUJVR19PTihyZXQpOworCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCWlmICh0cmFucy0+dHJhbnNhY3Rpb24tPmluX2NvbW1pdCkgewotCQljdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247Ci0JCXRyYW5zLT50cmFuc2FjdGlvbi0+dXNlX2NvdW50Kys7CisJSU5JVF9MSVNUX0hFQUQoJmRpcnR5X2ZzX3Jvb3RzKTsKKwlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKKwkJY3VyX3RyYW5zLT51c2VfY291bnQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAKQEAgLTkyMiw3ICsxMDE4LDYgQEAKIAogCXRyYW5zLT50cmFuc2FjdGlvbi0+aW5fY29tbWl0ID0gMTsKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAxOwotCWN1cl90cmFucyA9IHRyYW5zLT50cmFuc2FjdGlvbjsKIAlpZiAoY3VyX3RyYW5zLT5saXN0LnByZXYgIT0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QpIHsKIAkJcHJldl90cmFucyA9IGxpc3RfZW50cnkoY3VyX3RyYW5zLT5saXN0LnByZXYsCiAJCQkJCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiwgbGlzdCk7CkBAIC05MzcsNiArMTAzMiw5IEBACiAJCX0KIAl9CiAKKwlpZiAobm93IDwgY3VyX3RyYW5zLT5zdGFydF90aW1lIHx8IG5vdyAtIGN1cl90cmFucy0+c3RhcnRfdGltZSA8IDEpCisJCXNob3VsZF9ncm93ID0gMTsKKwogCWRvIHsKIAkJaW50IHNuYXBfcGVuZGluZyA9IDA7CiAJCWpvaW5lZCA9IGN1cl90cmFucy0+bnVtX2pvaW5lZDsKQEAgLTk0OSwyNiArMTA0Nyw0MiBAQAogCiAJCWlmIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSkKIAkJCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaG91bGRfZ3JvdykKIAkJCXRpbWVvdXQgPSAxOwogCiAJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0JCWlmIChzbmFwX3BlbmRpbmcpIHsKKwkJaWYgKGZsdXNoX29uX2NvbW1pdCB8fCBzbmFwX3BlbmRpbmcpIHsKKwkJCWlmIChmbHVzaF9vbl9jb21taXQpCisJCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwogCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMSk7CiAJCQlCVUdfT04ocmV0KTsKIAkJfQogCi0JCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCS8qCisJCSAqIHJlbmFtZSBkb24ndCB1c2UgYnRyZnNfam9pbl90cmFuc2FjdGlvbiwgc28sIG9uY2Ugd2UKKwkJICogc2V0IHRoZSB0cmFuc2FjdGlvbiB0byBibG9ja2VkIGFib3ZlLCB3ZSBhcmVuJ3QgZ29pbmcKKwkJICogdG8gZ2V0IGFueSBuZXcgb3JkZXJlZCBvcGVyYXRpb25zLiAgV2UgY2FuIHNhZmVseSBydW4KKwkJICogaXQgaGVyZSBhbmQgbm8gZm9yIHN1cmUgdGhhdCBub3RoaW5nIG5ldyB3aWxsIGJlIGFkZGVkCisJCSAqIHRvIHRoZSBsaXN0CisJCSAqLworCQlidHJmc19ydW5fb3JkZXJlZF9vcGVyYXRpb25zKHJvb3QsIDEpOworCisJCXNtcF9tYigpOworCQlpZiAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEgfHwgc2hvdWxkX2dyb3cpCisJCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCiAJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKIAl9IHdoaWxlIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSB8fAotCQkgKGN1cl90cmFucy0+bnVtX2pvaW5lZCAhPSBqb2luZWQpKTsKKwkJIChzaG91bGRfZ3JvdyAmJiBjdXJfdHJhbnMtPm51bV9qb2luZWQgIT0gam9pbmVkKSk7CiAKIAlyZXQgPSBjcmVhdGVfcGVuZGluZ19zbmFwc2hvdHModHJhbnMsIHJvb3QtPmZzX2luZm8pOwogCUJVR19PTihyZXQpOwogCisJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgKHVuc2lnbmVkIGxvbmcpLTEpOworCUJVR19PTihyZXQpOworCiAJV0FSTl9PTihjdXJfdHJhbnMgIT0gdHJhbnMtPnRyYW5zYWN0aW9uKTsKIAogCS8qIGJ0cmZzX2NvbW1pdF90cmVlX3Jvb3RzIGlzIHJlc3BvbnNpYmxlIGZvciBnZXR0aW5nIHRoZQpAQCAtMTAzMiw2ICsxMTQ2LDcgQEAKIAlidHJmc19jb3B5X3Bpbm5lZChyb290LCBwaW5uZWRfY29weSk7CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAwOworCiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fdGhyb3R0bGUpOwogCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwogCkBAIC0xMDU4LDYgKzExNzMsNyBAQAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAxOworCiAJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAJd2FrZV91cCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IGVhMjkyMTEuLjk0ZjViZGUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMTksMTAgKzE5LDE2IEBACiAjaWZuZGVmIF9fQlRSRlNfVFJBTlNBQ1RJT05fXwogI2RlZmluZSBfX0JUUkZTX1RSQU5TQUNUSU9OX18KICNpbmNsdWRlICJidHJmc19pbm9kZS5oIgorI2luY2x1ZGUgImRlbGF5ZWQtcmVmLmgiCiAKIHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiB7CiAJdTY0IHRyYW5zaWQ7CisJLyoKKwkgKiB0b3RhbCB3cml0ZXJzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGl0IG11c3QgYmUgemVybyBiZWZvcmUgdGhlCisJICogdHJhbnNhY3Rpb24gY2FuIGVuZAorCSAqLwogCXVuc2lnbmVkIGxvbmcgbnVtX3dyaXRlcnM7CisKIAl1bnNpZ25lZCBsb25nIG51bV9qb2luZWQ7CiAJaW50IGluX2NvbW1pdDsKIAlpbnQgdXNlX2NvdW50OwpAQCAtMzQsNiArNDAsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlcl93YWl0OwogCXdhaXRfcXVldWVfaGVhZF90IGNvbW1pdF93YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19zbmFwc2hvdHM7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgZGVsYXllZF9yZWZzOwogfTsKIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSB7CkBAIC00NCw2ICs1MSw3IEBACiAJdTY0IGJsb2NrX2dyb3VwOwogCXU2NCBhbGxvY19leGNsdWRlX3N0YXJ0OwogCXU2NCBhbGxvY19leGNsdWRlX25yOworCXVuc2lnbmVkIGxvbmcgZGVsYXllZF9yZWZfdXBkYXRlczsKIH07CiAKIHN0cnVjdCBidHJmc19wZW5kaW5nX3NuYXBzaG90IHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtZGVmcmFnLmMgYi9mcy9idHJmcy90cmVlLWRlZnJhZy5jCmluZGV4IDk4ZDI1ZmEuLmIxMGVhY2QgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtZGVmcmFnLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1kZWZyYWcuYwpAQCAtMTI0LDggKzEyNCw2IEBACiAJfQogCiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCWlmIChpc19leHRlbnQpCi0JCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCByb290KTsKIG91dDoKIAlpZiAocGF0aCkKIAkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggOWM0NjJmYi4uMjVmMjBlYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0zNSw2ICszNSw0OSBAQAogI2RlZmluZSBMT0dfSU5PREVfRVhJU1RTIDEKIAogLyoKKyAqIGRpcmVjdG9yeSB0cm91YmxlIGNhc2VzCisgKgorICogMSkgb24gcmVuYW1lIG9yIHVubGluaywgaWYgdGhlIGlub2RlIGJlaW5nIHVubGlua2VkIGlzbid0IGluIHRoZSBmc3luYworICogbG9nLCB3ZSBtdXN0IGZvcmNlIGEgZnVsbCBjb21taXQgYmVmb3JlIGRvaW5nIGFuIGZzeW5jIG9mIHRoZSBkaXJlY3RvcnkKKyAqIHdoZXJlIHRoZSB1bmxpbmsgd2FzIGRvbmUuCisgKiAtLS0+IHJlY29yZCB0cmFuc2lkIG9mIGxhc3QgdW5saW5rL3JlbmFtZSBwZXIgZGlyZWN0b3J5CisgKgorICogbWtkaXIgZm9vL3NvbWVfZGlyCisgKiBub3JtYWwgY29tbWl0CisgKiByZW5hbWUgZm9vL3NvbWVfZGlyIGZvbzIvc29tZV9kaXIKKyAqIG1rZGlyIGZvby9zb21lX2RpcgorICogZnN5bmMgZm9vL3NvbWVfZGlyL3NvbWVfZmlsZQorICoKKyAqIFRoZSBmc3luYyBhYm92ZSB3aWxsIHVubGluayB0aGUgb3JpZ2luYWwgc29tZV9kaXIgd2l0aG91dCByZWNvcmRpbmcKKyAqIGl0IGluIGl0cyBuZXcgbG9jYXRpb24gKGZvbzIpLiAgQWZ0ZXIgYSBjcmFzaCwgc29tZV9kaXIgd2lsbCBiZSBnb25lCisgKiB1bmxlc3MgdGhlIGZzeW5jIG9mIHNvbWVfZmlsZSBmb3JjZXMgYSBmdWxsIGNvbW1pdAorICoKKyAqIDIpIHdlIG11c3QgbG9nIGFueSBuZXcgbmFtZXMgZm9yIGFueSBmaWxlIG9yIGRpciB0aGF0IGlzIGluIHRoZSBmc3luYworICogbG9nLiAtLS0+IGNoZWNrIGlub2RlIHdoaWxlIHJlbmFtaW5nL2xpbmtpbmcuCisgKgorICogMmEpIHdlIG11c3QgbG9nIGFueSBuZXcgbmFtZXMgZm9yIGFueSBmaWxlIG9yIGRpciBkdXJpbmcgcmVuYW1lCisgKiB3aGVuIHRoZSBkaXJlY3RvcnkgdGhleSBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIHdhcyBsb2dnZWQuCisgKiAtLS0+IGNoZWNrIGlub2RlIGFuZCBvbGQgcGFyZW50IGRpciBkdXJpbmcgcmVuYW1lCisgKgorICogIDJhIGlzIGFjdHVhbGx5IHRoZSBtb3JlIGltcG9ydGFudCB2YXJpYW50LiAgV2l0aCB0aGUgZXh0cmEgbG9nZ2luZworICogIGEgY3Jhc2ggbWlnaHQgdW5saW5rIHRoZSBvbGQgbmFtZSB3aXRob3V0IHJlY3JlYXRpbmcgdGhlIG5ldyBvbmUKKyAqCisgKiAzKSBhZnRlciBhIGNyYXNoLCB3ZSBtdXN0IGdvIHRocm91Z2ggYW55IGRpcmVjdG9yaWVzIHdpdGggYSBsaW5rIGNvdW50CisgKiBvZiB6ZXJvIGFuZCByZWRvIHRoZSBybSAtcmYKKyAqCisgKiBta2RpciBmMS9mb28KKyAqIG5vcm1hbCBjb21taXQKKyAqIHJtIC1yZiBmMS9mb28KKyAqIGZzeW5jKGYxKQorICoKKyAqIFRoZSBkaXJlY3RvcnkgZjEgd2FzIGZ1bGx5IHJlbW92ZWQgZnJvbSB0aGUgRlMsIGJ1dCBmc3luYyB3YXMgbmV2ZXIKKyAqIGNhbGxlZCBvbiBmMSwgb25seSBpdHMgcGFyZW50IGRpci4gIEFmdGVyIGEgY3Jhc2ggdGhlIHJtIC1yZiBtdXN0CisgKiBiZSByZXBsYXllZC4gIFRoaXMgbXVzdCBiZSBhYmxlIHRvIHJlY3Vyc2UgZG93biB0aGUgZW50aXJlCisgKiBkaXJlY3RvcnkgdHJlZS4gIFRoZSBpbm9kZSBsaW5rIGNvdW50IGZpeHVwIGNvZGUgdGFrZXMgY2FyZSBvZiB0aGUKKyAqIHVnbHkgZGV0YWlscy4KKyAqLworCisvKgogICogc3RhZ2VzIGZvciB0aGUgdHJlZSB3YWxraW5nLiAgVGhlIGZpcnN0CiAgKiBzdGFnZSAoMCkgaXMgdG8gb25seSBwaW4gZG93biB0aGUgYmxvY2tzIHdlIGZpbmQKICAqIHRoZSBzZWNvbmQgc3RhZ2UgKDEpIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgaW5vZGVzCkBAIC00NywxMiArOTAsMTcgQEAKICNkZWZpbmUgTE9HX1dBTEtfUkVQTEFZX0lOT0RFUyAxCiAjZGVmaW5lIExPR19XQUxLX1JFUExBWV9BTEwgMgogCi1zdGF0aWMgaW50IF9fYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorc3RhdGljIGludCBidHJmc19sb2dfaW5vZGUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBpbnQgaW5vZGVfb25seSk7CiBzdGF0aWMgaW50IGxpbmtfdG9fZml4dXBfZGlyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCk7CitzdGF0aWMgbm9pbmxpbmUgaW50IHJlcGxheV9kaXJfZGVsZXRlcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpsb2csCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJCSAgICAgICB1NjQgZGlyaWQsIGludCBkZWxfYWxsKTsKIAogLyoKICAqIHRyZWUgbG9nZ2luZyBpcyBhIHNwZWNpYWwgd3JpdGUgYWhlYWQgbG9nIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQKQEAgLTEzMywxMCArMTgxLDI1IEBACiB9CiAKIC8qCisgKiBUaGlzIGVpdGhlciBtYWtlcyB0aGUgY3VycmVudCBydW5uaW5nIGxvZyB0cmFuc2FjdGlvbiB3YWl0CisgKiB1bnRpbCB5b3UgY2FsbCBidHJmc19lbmRfbG9nX3RyYW5zKCkgb3IgaXQgbWFrZXMgYW55IGZ1dHVyZQorICogbG9nIHRyYW5zYWN0aW9ucyB3YWl0IHVudGlsIHlvdSBjYWxsIGJ0cmZzX2VuZF9sb2dfdHJhbnMoKQorICovCitpbnQgYnRyZnNfcGluX2xvZ190cmFucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKK3sKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJYXRvbWljX2luYygmcm9vdC0+bG9nX3dyaXRlcnMpOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogaW5kaWNhdGUgd2UncmUgZG9uZSBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbG9nIHRyZWUKICAqIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIHRvIGRvIGEgc3luYwogICovCi1zdGF0aWMgaW50IGVuZF9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfZW5kX2xvZ190cmFucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcm9vdC0+bG9nX3dyaXRlcnMpKSB7CiAJCXNtcF9tYigpOwpAQCAtMTk5LDEyICsyNjIsOSBAQAogCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmViLAogCQkJICAgICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIHU2NCBnZW4pCiB7Ci0JaWYgKHdjLT5waW4pIHsKLQkJbXV0ZXhfbG9jaygmbG9nLT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOworCWlmICh3Yy0+cGluKQogCQlidHJmc191cGRhdGVfcGlubmVkX2V4dGVudHMobG9nLT5mc19pbmZvLT5leHRlbnRfcm9vdCwKIAkJCQkJICAgIGViLT5zdGFydCwgZWItPmxlbiwgMSk7Ci0JCW11dGV4X3VubG9jaygmbG9nLT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCX0KIAogCWlmIChidHJmc19idWZmZXJfdXB0b2RhdGUoZWIsIGdlbikpIHsKIAkJaWYgKHdjLT53cml0ZSkKQEAgLTYwMyw2ICs2NjMsNyBAQAogCiAJcmV0ID0gbGlua190b19maXh1cF9kaXIodHJhbnMsIHJvb3QsIHBhdGgsIGxvY2F0aW9uLm9iamVjdGlkKTsKIAlCVUdfT04ocmV0KTsKKwogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBpbm9kZSwgbmFtZSwgbmFtZV9sZW4pOwogCUJVR19PTihyZXQpOwogCWtmcmVlKG5hbWUpOwpAQCAtODA0LDYgKzg2NSw3IEBACiAJCQkJCSAgICB2aWN0aW1fbmFtZV9sZW4pKSB7CiAJCQkJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKIAkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisKIAkJCQlyZXQgPSBidHJmc191bmxpbmtfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwKIAkJCQkJCQkgaW5vZGUsIHZpY3RpbV9uYW1lLAogCQkJCQkJCSB2aWN0aW1fbmFtZV9sZW4pOwpAQCAtOTIyLDEzICs5ODQsMjAgQEAKIAkJa2V5Lm9mZnNldC0tOwogCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJfQotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJaWYgKG5saW5rICE9IGlub2RlLT5pX25saW5rKSB7CiAJCWlub2RlLT5pX25saW5rID0gbmxpbms7CiAJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCX0KIAlCVFJGU19JKGlub2RlKS0+aW5kZXhfY250ID0gKHU2NCktMTsKIAorCWlmIChpbm9kZS0+aV9ubGluayA9PSAwICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJcmV0ID0gcmVwbGF5X2Rpcl9kZWxldGVzKHRyYW5zLCByb290LCBOVUxMLCBwYXRoLAorCQkJCQkgaW5vZGUtPmlfaW5vLCAxKTsKKwkJQlVHX09OKHJldCk7CisJfQorCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05NzEsOSArMTA0MCwxMiBAQAogCiAJCWlwdXQoaW5vZGUpOwogCi0JCWlmIChrZXkub2Zmc2V0ID09IDApCi0JCQlicmVhazsKLQkJa2V5Lm9mZnNldC0tOworCQkvKgorCQkgKiBmaXh1cCBvbiBhIGRpcmVjdG9yeSBtYXkgY3JlYXRlIG5ldyBlbnRyaWVzLAorCQkgKiBtYWtlIHN1cmUgd2UgYWx3YXlzIGxvb2sgZm9yIHRoZSBoaWdoc2V0IHBvc3NpYmxlCisJCSAqIG9mZnNldAorCQkgKi8KKwkJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAJfQogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlyZXR1cm4gMDsKQEAgLTExNTAsOCArMTIyMiw3IEBACiAJcmV0ID0gaW5zZXJ0X29uZV9uYW1lKHRyYW5zLCByb290LCBwYXRoLCBrZXktPm9iamVjdGlkLCBrZXktPm9mZnNldCwKIAkJCSAgICAgIG5hbWUsIG5hbWVfbGVuLCBsb2dfdHlwZSwgJmxvZ19rZXkpOwogCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0VOVCkKLQkJQlVHKCk7CisJQlVHX09OKHJldCAmJiByZXQgIT0gLUVOT0VOVCk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTEzMTMsMTEgKzEzODQsMTEgQEAKIAkJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBuYW1lLCAodW5zaWduZWQgbG9uZykoZGkgKyAxKSwKIAkJCQkgIG5hbWVfbGVuKTsKIAkJbG9nX2RpID0gTlVMTDsKLQkJaWYgKGRpcl9rZXktPnR5cGUgPT0gQlRSRlNfRElSX0lURU1fS0VZKSB7CisJCWlmIChsb2cgJiYgZGlyX2tleS0+dHlwZSA9PSBCVFJGU19ESVJfSVRFTV9LRVkpIHsKIAkJCWxvZ19kaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBsb2dfcGF0aCwKIAkJCQkJCSAgICAgICBkaXJfa2V5LT5vYmplY3RpZCwKIAkJCQkJCSAgICAgICBuYW1lLCBuYW1lX2xlbiwgMCk7Ci0JCX0gZWxzZSBpZiAoZGlyX2tleS0+dHlwZSA9PSBCVFJGU19ESVJfSU5ERVhfS0VZKSB7CisJCX0gZWxzZSBpZiAobG9nICYmIGRpcl9rZXktPnR5cGUgPT0gQlRSRlNfRElSX0lOREVYX0tFWSkgewogCQkJbG9nX2RpID0gYnRyZnNfbG9va3VwX2Rpcl9pbmRleF9pdGVtKHRyYW5zLCBsb2csCiAJCQkJCQkgICAgIGxvZ19wYXRoLAogCQkJCQkJICAgICBkaXJfa2V5LT5vYmplY3RpZCwKQEAgLTEzNzgsNyArMTQ0OSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nLAogCQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgdTY0IGRpcmlkKQorCQkJCSAgICAgICB1NjQgZGlyaWQsIGludCBkZWxfYWxsKQogewogCXU2NCByYW5nZV9zdGFydDsKIAl1NjQgcmFuZ2VfZW5kOwpAQCAtMTQwOCwxMCArMTQ3OSwxNCBAQAogCXJhbmdlX3N0YXJ0ID0gMDsKIAlyYW5nZV9lbmQgPSAwOwogCXdoaWxlICgxKSB7Ci0JCXJldCA9IGZpbmRfZGlyX3JhbmdlKGxvZywgcGF0aCwgZGlyaWQsIGtleV90eXBlLAotCQkJCSAgICAgJnJhbmdlX3N0YXJ0LCAmcmFuZ2VfZW5kKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJYnJlYWs7CisJCWlmIChkZWxfYWxsKQorCQkJcmFuZ2VfZW5kID0gKHU2NCktMTsKKwkJZWxzZSB7CisJCQlyZXQgPSBmaW5kX2Rpcl9yYW5nZShsb2csIHBhdGgsIGRpcmlkLCBrZXlfdHlwZSwKKwkJCQkJICAgICAmcmFuZ2Vfc3RhcnQsICZyYW5nZV9lbmQpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCWJyZWFrOworCQl9CiAKIAkJZGlyX2tleS5vZmZzZXQgPSByYW5nZV9zdGFydDsKIAkJd2hpbGUgKDEpIHsKQEAgLTE0MzcsNyArMTUxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCXJldCA9IGNoZWNrX2l0ZW1faW5fbG9nKHRyYW5zLCByb290LCBsb2csIHBhdGgsCi0JCQkJCQlsb2dfcGF0aCwgZGlyLCAmZm91bmRfa2V5KTsKKwkJCQkJCWxvZ19wYXRoLCBkaXIsCisJCQkJCQkmZm91bmRfa2V5KTsKIAkJCUJVR19PTihyZXQpOwogCQkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPT0gKHU2NCktMSkKIAkJCQlicmVhazsKQEAgLTE1MTQsNyArMTU5MCw3IEBACiAJCQltb2RlID0gYnRyZnNfaW5vZGVfbW9kZShlYiwgaW5vZGVfaXRlbSk7CiAJCQlpZiAoU19JU0RJUihtb2RlKSkgewogCQkJCXJldCA9IHJlcGxheV9kaXJfZGVsZXRlcyh3Yy0+dHJhbnMsCi0JCQkJCSByb290LCBsb2csIHBhdGgsIGtleS5vYmplY3RpZCk7CisJCQkJCSByb290LCBsb2csIHBhdGgsIGtleS5vYmplY3RpZCwgMCk7CiAJCQkJQlVHX09OKHJldCk7CiAJCQl9CiAJCQlyZXQgPSBvdmVyd3JpdGVfaXRlbSh3Yy0+dHJhbnMsIHJvb3QsIHBhdGgsCkBAIC0xNTMzLDYgKzE2MDksMTcgQEAKIAkJCQkJcm9vdCwgaW5vZGUsIGlub2RlLT5pX3NpemUsCiAJCQkJCUJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAJCQkJQlVHX09OKHJldCk7CisKKwkJCQkvKiBpZiB0aGUgbmxpbmsgY291bnQgaXMgemVybyBoZXJlLCB0aGUgaXB1dAorCQkJCSAqIHdpbGwgZnJlZSB0aGUgaW5vZGUuICBXZSBidW1wIGl0IHRvIG1ha2UKKwkJCQkgKiBzdXJlIGl0IGRvZXNuJ3QgZ2V0IGZyZWVkIHVudGlsIHRoZSBsaW5rCisJCQkJICogY291bnQgZml4dXAgaXMgZG9uZQorCQkJCSAqLworCQkJCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7CisJCQkJCWJ0cmZzX2luY19ubGluayhpbm9kZSk7CisJCQkJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh3Yy0+dHJhbnMsCisJCQkJCQkJICAgcm9vdCwgaW5vZGUpOworCQkJCX0KIAkJCQlpcHV0KGlub2RlKTsKIAkJCX0KIAkJCXJldCA9IGxpbmtfdG9fZml4dXBfZGlyKHdjLT50cmFucywgcm9vdCwKQEAgLTE4NDAsNyArMTkyNyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3YWl0X2xvZ19jb21taXQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgdHJhbnNpZCkKK3N0YXRpYyBpbnQgd2FpdF9sb2dfY29tbWl0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgdHJhbnNpZCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgaW5kZXggPSB0cmFuc2lkICUgMjsKQEAgLTE4NTQsOSArMTk0MiwxMiBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleF0sCiAJCQkJJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCQlpZiAocm9vdC0+bG9nX3RyYW5zaWQgPCB0cmFuc2lkICsgMiAmJgorCisJCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCAhPQorCQkgICAgdHJhbnMtPnRyYW5zaWQgJiYgcm9vdC0+bG9nX3RyYW5zaWQgPCB0cmFuc2lkICsgMiAmJgogCQkgICAgYXRvbWljX3JlYWQoJnJvb3QtPmxvZ19jb21taXRbaW5kZXhdKSkKIAkJCXNjaGVkdWxlKCk7CisKIAkJZmluaXNoX3dhaXQoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleF0sICZ3YWl0KTsKIAkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAl9IHdoaWxlIChyb290LT5sb2dfdHJhbnNpZCA8IHRyYW5zaWQgKyAyICYmCkBAIC0xODY0LDE0ICsxOTU1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF9mb3Jfd3JpdGVyKHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIGludCB3YWl0X2Zvcl93cml0ZXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnJvb3QtPmxvZ193cml0ZXJzKSkgewogCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmxvZ193cml0ZXJfd2FpdCwKIAkJCQkmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmcm9vdC0+bG9nX3dyaXRlcnMpKQorCQlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgIT0KKwkJICAgIHRyYW5zLT50cmFuc2lkICYmIGF0b21pY19yZWFkKCZyb290LT5sb2dfd3JpdGVycykpCiAJCQlzY2hlZHVsZSgpOwogCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCQlmaW5pc2hfd2FpdCgmcm9vdC0+bG9nX3dyaXRlcl93YWl0LCAmd2FpdCk7CkBAIC0xODgyLDcgKzE5NzUsMTQgQEAKIC8qCiAgKiBidHJmc19zeW5jX2xvZyBkb2VzIHNlbmRzIGEgZ2l2ZW4gdHJlZSBsb2cgZG93biB0byB0aGUgZGlzayBhbmQKICAqIHVwZGF0ZXMgdGhlIHN1cGVyIGJsb2NrcyB0byByZWNvcmQgaXQuICBXaGVuIHRoaXMgY2FsbCBpcyBkb25lLAotICogeW91IGtub3cgdGhhdCBhbnkgaW5vZGVzIHByZXZpb3VzbHkgbG9nZ2VkIGFyZSBzYWZlbHkgb24gZGlzaworICogeW91IGtub3cgdGhhdCBhbnkgaW5vZGVzIHByZXZpb3VzbHkgbG9nZ2VkIGFyZSBzYWZlbHkgb24gZGlzayBvbmx5CisgKiBpZiBpdCByZXR1cm5zIDAuCisgKgorICogQW55IG90aGVyIHJldHVybiB2YWx1ZSBtZWFucyB5b3UgbmVlZCB0byBjYWxsIGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbi4KKyAqIFNvbWUgb2YgdGhlIGVkZ2UgY2FzZXMgZm9yIGZzeW5jaW5nIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBoYWQgdW5saW5rcworICogb3IgcmVuYW1lcyBkb25lIGluIHRoZSBwYXN0IG1lYW4gdGhhdCBzb21ldGltZXMgdGhlIG9ubHkgc2FmZQorICogZnN5bmMgaXMgdG8gY29tbWl0IHRoZSB3aG9sZSBGUy4gIFdoZW4gYnRyZnNfc3luY19sb2cgcmV0dXJucyAtRUFHQUlOLAorICogdGhhdCBoYXMgaGFwcGVuZWQuCiAgKi8KIGludCBidHJmc19zeW5jX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCkBAIC0xODk2LDcgKzE5OTYsNyBAQAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaW5kZXgxID0gcm9vdC0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmcm9vdC0+bG9nX2NvbW1pdFtpbmRleDFdKSkgewotCQl3YWl0X2xvZ19jb21taXQocm9vdCwgcm9vdC0+bG9nX3RyYW5zaWQpOworCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIHJvb3QsIHJvb3QtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xOTA0LDE4ICsyMDA0LDI2IEBACiAKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB0cmVlIGxvZyBzeW5jIHRvIGNvbXBsZXRlICovCiAJaWYgKGF0b21pY19yZWFkKCZyb290LT5sb2dfY29tbWl0WyhpbmRleDEgKyAxKSAlIDJdKSkKLQkJd2FpdF9sb2dfY29tbWl0KHJvb3QsIHJvb3QtPmxvZ190cmFuc2lkIC0gMSk7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgcm9vdCwgcm9vdC0+bG9nX3RyYW5zaWQgLSAxKTsKIAogCXdoaWxlICgxKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSByb290LT5sb2dfYmF0Y2g7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCXdhaXRfZm9yX3dyaXRlcihyb290KTsKKworCQl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIHJvb3QpOwogCQlpZiAoYmF0Y2ggPT0gcm9vdC0+bG9nX2JhdGNoKQogCQkJYnJlYWs7CiAJfQogCisJLyogYmFpbCBvdXQgaWYgd2UgbmVlZCB0byBkbyBhIGZ1bGwgY29tbWl0ICovCisJaWYgKHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0ID09IHRyYW5zLT50cmFuc2lkKSB7CisJCXJldCA9IC1FQUdBSU47CisJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOwogCkBAIC0xOTUxLDE2ICsyMDU5LDI5IEBACiAKIAlpbmRleDIgPSBsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCAlIDI7CiAJaWYgKGF0b21pY19yZWFkKCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0pKSB7Ci0JCXdhaXRfbG9nX2NvbW1pdChsb2dfcm9vdF90cmVlLCBsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKKwkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJZ290byBvdXQ7CiAJfQogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMSk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbKGluZGV4MiArIDEpICUgMl0pKQotCQl3YWl0X2xvZ19jb21taXQobG9nX3Jvb3RfdHJlZSwgbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgLSAxKTsKKwlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbKGluZGV4MiArIDEpICUgMl0pKSB7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKKwkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCAtIDEpOworCX0KIAotCXdhaXRfZm9yX3dyaXRlcihsb2dfcm9vdF90cmVlKTsKKwl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIGxvZ19yb290X3RyZWUpOworCisJLyoKKwkgKiBub3cgdGhhdCB3ZSd2ZSBtb3ZlZCBvbiB0byB0aGUgdHJlZSBvZiBsb2cgdHJlZSByb290cywKKwkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgorCSAqLworCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgeworCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X3dha2VfbG9nX3Jvb3Q7CisJfQogCiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nX3Jvb3RfdHJlZSwKIAkJCQkmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzKTsKQEAgLTE5ODUsNyArMjEwNiw5IEBACiAJICogaW4gYW5kIGNhdXNlIHByb2JsZW1zIGVpdGhlci4KIAkgKi8KIAl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAyKTsKKwlyZXQgPSAwOwogCitvdXRfd2FrZV9sb2dfcm9vdDoKIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDApOwogCXNtcF9tYigpOwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0X3dhaXRbaW5kZXgyXSkpCkBAIC0xOTk4LDcgKzIxMjEsOCBAQAogCXJldHVybiAwOwogfQogCi0vKiAqIGZyZWUgYWxsIHRoZSBleHRlbnRzIHVzZWQgYnkgdGhlIHRyZWUgbG9nLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkCisvKgorICogZnJlZSBhbGwgdGhlIGV4dGVudHMgdXNlZCBieSB0aGUgdHJlZSBsb2cuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQKICAqIGF0IGNvbW1pdCB0aW1lIG9mIHRoZSBmdWxsIHRyYW5zYWN0aW9uCiAgKi8KIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCkBAIC0yMTMyLDcgKzIyNTYsNyBAQAogCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCW11dGV4X3VubG9jaygmQlRSRlNfSShkaXIpLT5sb2dfbXV0ZXgpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJYnRyZnNfZW5kX2xvZ190cmFucyhyb290KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE1OSw3ICsyMjgzLDcgQEAKIAlyZXQgPSBidHJmc19kZWxfaW5vZGVfcmVmKHRyYW5zLCBsb2csIG5hbWUsIG5hbWVfbGVuLCBpbm9kZS0+aV9pbm8sCiAJCQkJICBkaXJpZCwgJmluZGV4KTsKIAltdXRleF91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5sb2dfbXV0ZXgpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJYnRyZnNfZW5kX2xvZ190cmFucyhyb290KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTU5LDcgKzI2ODMsNyBAQAogICoKICAqIFRoaXMgaGFuZGxlcyBib3RoIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICAqLwotc3RhdGljIGludCBfX2J0cmZzX2xvZ19pbm9kZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKK3N0YXRpYyBpbnQgYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgaW50IGlub2RlX29ubHkpCiB7CkBAIC0yNTg1LDI4ICsyNzA5LDE3IEBACiAJbWluX2tleS5vZmZzZXQgPSAwOwogCiAJbWF4X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKKworCS8qIHRvZGF5IHRoZSBjb2RlIGNhbiBvbmx5IGRvIHBhcnRpYWwgbG9nZ2luZyBvZiBkaXJlY3RvcmllcyAqLworCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkgICAgaW5vZGVfb25seSA9IExPR19JTk9ERV9BTEw7CisKIAlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfRVhJU1RTIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCW1heF9rZXkudHlwZSA9IEJUUkZTX1hBVFRSX0lURU1fS0VZOwogCWVsc2UKIAkJbWF4X2tleS50eXBlID0gKHU4KS0xOwogCW1heF9rZXkub2Zmc2V0ID0gKHU2NCktMTsKIAotCS8qCi0JICogaWYgdGhpcyBpbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGxvZ2dlZCBhbmQgd2UncmUgaW4gaW5vZGVfb25seQotCSAqIG1vZGUsIHdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIHRoZSB0aGluZ3MgdGhhdCBoYXZlIGFscmVhZHkKLQkgKiBiZWVuIHdyaXR0ZW4gdG8gdGhlIGxvZy4KLQkgKgotCSAqIEJ1dCwgaWYgdGhlIGlub2RlIGhhcyBiZWVuIHRocm91Z2ggYW4gaW5vZGVfb25seSBsb2csCi0JICogdGhlIGxvZ2dlZF90cmFucyBmaWVsZCBpcyBub3Qgc2V0LiAgVGhpcyBhbGxvd3MgdXMgdG8gY2F0Y2gKLQkgKiBhbnkgbmV3IG5hbWVzIGZvciB0aGlzIGlub2RlIGluIHRoZSBiYWNrcmVmcyBieSBsb2dnaW5nIGl0Ci0JICogYWdhaW4KLQkgKi8KLQlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfRVhJU1RTICYmCi0JICAgIEJUUkZTX0koaW5vZGUpLT5sb2dnZWRfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQpIHsKLQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCQlidHJmc19mcmVlX3BhdGgoZHN0X3BhdGgpOwotCQlnb3RvIG91dDsKLQl9CiAJbXV0ZXhfbG9jaygmQlRSRlNfSShpbm9kZSktPmxvZ19tdXRleCk7CiAKIAkvKgpAQCAtMjY5Myw3ICsyODA2LDYgQEAKIAlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfQUxMICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQlidHJmc19yZWxlYXNlX3BhdGgobG9nLCBkc3RfcGF0aCk7Ci0JCUJUUkZTX0koaW5vZGUpLT5sb2dfZGlydHlfdHJhbnMgPSAwOwogCQlyZXQgPSBsb2dfZGlyZWN0b3J5X2NoYW5nZXModHJhbnMsIHJvb3QsIGlub2RlLCBwYXRoLCBkc3RfcGF0aCk7CiAJCUJVR19PTihyZXQpOwogCX0KQEAgLTI3MDIsMTkgKzI4MTQsNjkgQEAKIAogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgoZHN0X3BhdGgpOwotb3V0OgogCXJldHVybiAwOwogfQogCi1pbnQgYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICBpbnQgaW5vZGVfb25seSkKKy8qCisgKiBmb2xsb3cgdGhlIGRlbnRyeSBwYXJlbnQgcG9pbnRlcnMgdXAgdGhlIGNoYWluIGFuZCBzZWUgaWYgYW55CisgKiBvZiB0aGUgZGlyZWN0b3JpZXMgaW4gaXQgcmVxdWlyZSBhIGZ1bGwgY29tbWl0IGJlZm9yZSB0aGV5IGNhbgorICogYmUgbG9nZ2VkLiAgUmV0dXJucyB6ZXJvIGlmIG5vdGhpbmcgc3BlY2lhbCBuZWVkcyB0byBiZSBkb25lIG9yIDEgaWYKKyAqIGEgZnVsbCBjb21taXQgaXMgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgY2hlY2tfcGFyZW50X2RpcnNfZm9yX3N5bmMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJICAgICAgIHU2NCBsYXN0X2NvbW1pdHRlZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOworCXN0cnVjdCBidHJmc19yb290ICpyb290OwogCi0Jc3RhcnRfbG9nX3RyYW5zKHRyYW5zLCByb290KTsKLQlyZXQgPSBfX2J0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJLyoKKwkgKiBmb3IgcmVndWxhciBmaWxlcywgaWYgaXRzIGlub2RlIGlzIGFscmVhZHkgb24gZGlzaywgd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBwYXJlbnRzIGF0IGFsbC4gIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIGNhbiB1c2UgdGhlIGxhc3RfdW5saW5rX3RyYW5zIGZpZWxkIHRvIHJlY29yZCByZW5hbWVzCisJICogYW5kIG90aGVyIGZ1biBpbiB0aGlzIGZpbGUuCisJICovCisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPD0gbGFzdF9jb21taXR0ZWQgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zIDw9IGxhc3RfY29tbWl0dGVkKQorCQkJZ290byBvdXQ7CisKKwlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+ZF9pbm9kZSB8fCBzYiAhPSBwYXJlbnQtPmRfaW5vZGUtPmlfc2IpCisJCQlnb3RvIG91dDsKKwkJaW5vZGUgPSBwYXJlbnQtPmRfaW5vZGU7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9IHRyYW5zLT50cmFuc2lkOworCQlzbXBfbWIoKTsKKworCQlpZiAoQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zID4gbGFzdF9jb21taXR0ZWQpIHsKKwkJCXJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKworCQkJLyoKKwkJCSAqIG1ha2Ugc3VyZSBhbnkgY29tbWl0cyB0byB0aGUgbG9nIGFyZSBmb3JjZWQKKwkJCSAqIHRvIGJlIGZ1bGwgY29tbWl0cworCQkJICovCisJCQlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9CisJCQkJdHJhbnMtPnRyYW5zaWQ7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlIHx8IHNiICE9IHBhcmVudC0+ZF9pbm9kZS0+aV9zYikKKwkJCWJyZWFrOworCisJCWlmIChwYXJlbnQgPT0gc2ItPnNfcm9vdCkKKwkJCWJyZWFrOworCisJCXBhcmVudCA9IHBhcmVudC0+ZF9wYXJlbnQ7CisJCWlub2RlID0gcGFyZW50LT5kX2lub2RlOworCisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MjQsMzEgKzI4ODYsNzAgQEAKICAqIG9ubHkgbG9nZ2luZyBpcyBkb25lIG9mIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgb2xkZXIgdGhhbgogICogdGhlIGxhc3QgY29tbWl0dGVkIHRyYW5zYWN0aW9uCiAgKi8KLWludCBidHJmc19sb2dfZGVudHJ5KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK2ludCBidHJmc19sb2dfaW5vZGVfcGFyZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGludCBleGlzdHNfb25seSkKIHsKLQlpbnQgaW5vZGVfb25seSA9IExPR19JTk9ERV9BTEw7CisJaW50IGlub2RlX29ubHkgPSBleGlzdHNfb25seSA/IExPR19JTk9ERV9FWElTVFMgOiBMT0dfSU5PREVfQUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKKwl1NjQgbGFzdF9jb21taXR0ZWQgPSByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZDsKKworCXNiID0gaW5vZGUtPmlfc2I7CisKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgTk9UUkVFTE9HKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKKwlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPgorCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgeworCQlyZXQgPSAxOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKKwlyZXQgPSBjaGVja19wYXJlbnRfZGlyc19mb3Jfc3luYyh0cmFucywgaW5vZGUsIHBhcmVudCwKKwkJCQkJIHNiLCBsYXN0X2NvbW1pdHRlZCk7CisJaWYgKHJldCkKKwkJZ290byBlbmRfbm9fdHJhbnM7CiAKIAlzdGFydF9sb2dfdHJhbnModHJhbnMsIHJvb3QpOwotCXNiID0gZGVudHJ5LT5kX2lub2RlLT5pX3NiOworCisJcmV0ID0gYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSwgaW5vZGVfb25seSk7CisJQlVHX09OKHJldCk7CisKKwkvKgorCSAqIGZvciByZWd1bGFyIGZpbGVzLCBpZiBpdHMgaW5vZGUgaXMgYWxyZWFkeSBvbiBkaXNrLCB3ZSBkb24ndAorCSAqIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHBhcmVudHMgYXQgYWxsLiAgVGhpcyBpcyBiZWNhdXNlCisJICogd2UgY2FuIHVzZSB0aGUgbGFzdF91bmxpbmtfdHJhbnMgZmllbGQgdG8gcmVjb3JkIHJlbmFtZXMKKwkgKiBhbmQgb3RoZXIgZnVuIGluIHRoaXMgZmlsZS4KKwkgKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA8PSBsYXN0X2NvbW1pdHRlZCAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+bGFzdF91bmxpbmtfdHJhbnMgPD0gbGFzdF9jb21taXR0ZWQpCisJCQlnb3RvIG5vX3BhcmVudDsKKworCWlub2RlX29ubHkgPSBMT0dfSU5PREVfRVhJU1RTOwogCXdoaWxlICgxKSB7Ci0JCXJldCA9IF9fYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBkZW50cnktPmRfaW5vZGUsCi0JCQkJCWlub2RlX29ubHkpOwotCQlCVUdfT04ocmV0KTsKLQkJaW5vZGVfb25seSA9IExPR19JTk9ERV9FWElTVFM7Ci0KLQkJZGVudHJ5ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJaWYgKCFkZW50cnkgfHwgIWRlbnRyeS0+ZF9pbm9kZSB8fCBzYiAhPSBkZW50cnktPmRfaW5vZGUtPmlfc2IpCisJCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUgfHwgc2IgIT0gcGFyZW50LT5kX2lub2RlLT5pX3NiKQogCQkJYnJlYWs7CiAKLQkJaWYgKEJUUkZTX0koZGVudHJ5LT5kX2lub2RlKS0+Z2VuZXJhdGlvbiA8PQotCQkgICAgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpCisJCWlub2RlID0gcGFyZW50LT5kX2lub2RlOworCQlpZiAoQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPgorCQkgICAgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpIHsKKwkJCXJldCA9IGJ0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOworCQkJQlVHX09OKHJldCk7CisJCX0KKwkJaWYgKHBhcmVudCA9PSBzYi0+c19yb290KQogCQkJYnJlYWs7CisKKwkJcGFyZW50ID0gcGFyZW50LT5kX3BhcmVudDsKIAl9Ci0JZW5kX2xvZ190cmFucyhyb290KTsKLQlyZXR1cm4gMDsKK25vX3BhcmVudDoKKwlyZXQgPSAwOworCWJ0cmZzX2VuZF9sb2dfdHJhbnMocm9vdCk7CitlbmRfbm9fdHJhbnM6CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTI3NjAsMTIgKzI5NjEsOCBAQAogaW50IGJ0cmZzX2xvZ19kZW50cnlfc2FmZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQl1NjQgZ2VuOwotCWdlbiA9IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbmV3X2Jsb2NrZ3JvdXA7Ci0JaWYgKGdlbiA+IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBidHJmc19sb2dfZGVudHJ5KHRyYW5zLCByb290LCBkZW50cnkpOworCXJldHVybiBidHJmc19sb2dfaW5vZGVfcGFyZW50KHRyYW5zLCByb290LCBkZW50cnktPmRfaW5vZGUsCisJCQkJICAgICAgZGVudHJ5LT5kX3BhcmVudCwgMCk7CiB9CiAKIC8qCkBAIC0yODg0LDMgKzMwODEsOTQgQEAKIAlrZnJlZShsb2dfcm9vdF90cmVlKTsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvIGZvcmNlIGEgZnVsbAorICogY29tbWl0IGluc3RlYWQgb2YgYWxsb3dpbmcgYSBkaXJlY3RvcnkgdG8gYmUgbG9nZ2VkLgorICoKKyAqIFRoZXkgcmV2b2x2ZSBhcm91bmQgZmlsZXMgdGhlcmUgd2VyZSB1bmxpbmtlZCBmcm9tIHRoZSBkaXJlY3RvcnksIGFuZAorICogdGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHNvIHRoYXQgYSBmdWxsIGNvbW1pdCBpcworICogcHJvcGVybHkgZG9uZSBpZiBpdCBpcyBmc3luYydkIGxhdGVyIGFmdGVyIHRoZSB1bmxpbmtzIGFyZSBkb25lLgorICovCit2b2lkIGJ0cmZzX3JlY29yZF91bmxpbmtfZGlyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgaW50IGZvcl9yZW5hbWUpCit7CisJLyoKKwkgKiB3aGVuIHdlJ3JlIGxvZ2dpbmcgYSBmaWxlLCBpZiBpdCBoYXNuJ3QgYmVlbiByZW5hbWVkCisJICogb3IgdW5saW5rZWQsIGFuZCBpdHMgaW5vZGUgaXMgZnVsbHkgY29tbWl0dGVkIG9uIGRpc2ssCisJICogd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3YWxraW5nIHVwIHRoZSBkaXJlY3RvcnkgY2hhaW4KKwkgKiB0byBsb2cgaXRzIHBhcmVudHMuCisJICoKKwkgKiBTbywgd2UgdXNlIHRoZSBsYXN0X3VubGlua190cmFucyBmaWVsZCB0byBwdXQgdGhpcyB0cmFuc2lkCisJICogaW50byB0aGUgZmlsZS4gIFdoZW4gdGhlIGZpbGUgaXMgbG9nZ2VkIHdlIGNoZWNrIGl0IGFuZAorCSAqIGRvbid0IGxvZyB0aGUgcGFyZW50cyBpZiB0aGUgZmlsZSBpcyBmdWxseSBvbiBkaXNrLgorCSAqLworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlCVFJGU19JKGlub2RlKS0+bGFzdF91bmxpbmtfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKKworCS8qCisJICogaWYgdGhpcyBkaXJlY3Rvcnkgd2FzIGFscmVhZHkgbG9nZ2VkIGFueSBuZXcKKwkgKiBuYW1lcyBmb3IgdGhpcyBmaWxlL2RpciB3aWxsIGdldCByZWNvcmRlZAorCSAqLworCXNtcF9tYigpOworCWlmIChCVFJGU19JKGRpciktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpZiB0aGUgaW5vZGUgd2UncmUgYWJvdXQgdG8gdW5saW5rIHdhcyBsb2dnZWQsCisJICogdGhlIGxvZyB3aWxsIGJlIHByb3Blcmx5IHVwZGF0ZWQgZm9yIGFueSBuZXcgbmFtZXMKKwkgKi8KKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiB3aGVuIHJlbmFtaW5nIGZpbGVzIGFjcm9zcyBkaXJlY3RvcmllcywgaWYgdGhlIGRpcmVjdG9yeQorCSAqIHRoZXJlIHdlJ3JlIHVubGlua2luZyBmcm9tIGdldHMgZnN5bmMnZCBsYXRlciBvbiwgdGhlcmUncworCSAqIG5vIHdheSB0byBmaW5kIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgbGF0ZXIgYW5kIGZzeW5jIGl0CisJICogcHJvcGVybHkuICBTbywgd2UgaGF2ZSB0byBiZSBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGNvbW1pdHMKKwkgKiBzbyB0aGUgbmV3IG5hbWUgZ2V0cyBkaXNjb3ZlcmVkLgorCSAqLworCWlmIChmb3JfcmVuYW1lKQorCQlnb3RvIHJlY29yZDsKKworCS8qIHdlIGNhbiBzYWZlbHkgZG8gdGhlIHVubGluayB3aXRob3V0IGFueSBzcGVjaWFsIHJlY29yZGluZyAqLworCXJldHVybjsKKworcmVjb3JkOgorCUJUUkZTX0koZGlyKS0+bGFzdF91bmxpbmtfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKK30KKworLyoKKyAqIENhbGwgdGhpcyBhZnRlciBhZGRpbmcgYSBuZXcgbmFtZSBmb3IgYSBmaWxlIGFuZCBpdCB3aWxsIHByb3Blcmx5CisgKiB1cGRhdGUgdGhlIGxvZyB0byByZWZsZWN0IHRoZSBuZXcgbmFtZS4KKyAqCisgKiBJdCB3aWxsIHJldHVybiB6ZXJvIGlmIGFsbCBnb2VzIHdlbGwsIGFuZCBpdCB3aWxsIHJldHVybiAxIGlmIGEKKyAqIGZ1bGwgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHJlcXVpcmVkLgorICovCitpbnQgYnRyZnNfbG9nX25ld19uYW1lKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50KQoreworCXN0cnVjdCBidHJmc19yb290ICogcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCisJLyoKKwkgKiB0aGlzIHdpbGwgZm9yY2UgdGhlIGxvZ2dpbmcgY29kZSB0byB3YWxrIHRoZSBkZW50cnkgY2hhaW4KKwkgKiB1cCBmb3IgdGhlIGZpbGUKKwkgKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zID0gdHJhbnMtPnRyYW5zaWQ7CisKKwkvKgorCSAqIGlmIHRoaXMgaW5vZGUgaGFzbid0IGJlZW4gbG9nZ2VkIGFuZCBkaXJlY3Rvcnkgd2UncmUgcmVuYW1pbmcgaXQKKwkgKiBmcm9tIGhhc24ndCBiZWVuIGxvZ2dlZCwgd2UgZG9uJ3QgbmVlZCB0byBsb2cgaXQKKwkgKi8KKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA8PQorCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCAmJgorCSAgICAoIW9sZF9kaXIgfHwgQlRSRlNfSShvbGRfZGlyKS0+bG9nZ2VkX3RyYW5zIDw9CisJCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJ0cmZzX2xvZ19pbm9kZV9wYXJlbnQodHJhbnMsIHJvb3QsIGlub2RlLCBwYXJlbnQsIDEpOworfQorCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5oIGIvZnMvYnRyZnMvdHJlZS1sb2cuaAppbmRleCBiOTQwOWIzLi5kMDljNzYwIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5oCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKQEAgLTIyLDE0ICsyMiw5IEBACiBpbnQgYnRyZnNfc3luY19sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwotaW50IGJ0cmZzX2xvZ19kZW50cnkoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBidHJmc19yZWNvdmVyX2xvZ190cmVlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqdHJlZV9yb290KTsKIGludCBidHJmc19sb2dfZGVudHJ5X3NhZmUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IGJ0cmZzX2xvZ19pbm9kZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICAgaW50IGlub2RlX29ubHkpOwogaW50IGJ0cmZzX2RlbF9kaXJfZW50cmllc19pbl9sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sCkBAIC0zOCw0ICszMywxNiBAQAogCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbiwKIAkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZGlyaWQpOworaW50IGJ0cmZzX2pvaW5fcnVubmluZ19sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX2VuZF9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX3Bpbl9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX2xvZ19pbm9kZV9wYXJlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgaW50IGV4aXN0c19vbmx5KTsKK3ZvaWQgYnRyZnNfcmVjb3JkX3VubGlua19kaXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBpbnQgZm9yX3JlbmFtZSk7CitpbnQgYnRyZnNfbG9nX25ld19uYW1lKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGRkMDZlMTguLmUwOTEzZTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImN0cmVlLmgiCkBAIC0xNDUsOCArMTQ2LDkgQEAKIAlpbnQgYWdhaW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgbnVtX3J1biA9IDA7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkID0gMDsKIAotCWJkaSA9IGRldmljZS0+YmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKwliZGkgPSBibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oZGV2aWNlLT5iZGV2KTsKIAlmc19pbmZvID0gZGV2aWNlLT5kZXZfcm9vdC0+ZnNfaW5mbzsKIAlsaW1pdCA9IGJ0cmZzX2FzeW5jX3N1Ym1pdF9saW1pdChmc19pbmZvKTsKIAlsaW1pdCA9IGxpbWl0ICogMiAvIDM7CkBAIC0yMDcsNyArMjA5LDMyIEBACiAJCWlmIChwZW5kaW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSAmJiBudW1fcnVuID4gMTYgJiYKIAkJICAgIGZzX2luZm8tPmZzX2RldmljZXMtPm9wZW5fZGV2aWNlcyA+IDEpIHsKIAkJCXN0cnVjdCBiaW8gKm9sZF9oZWFkOworCQkJc3RydWN0IGlvX2NvbnRleHQgKmlvYzsKIAorCQkJaW9jID0gY3VycmVudC0+aW9fY29udGV4dDsKKworCQkJLyoKKwkJCSAqIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8KKwkJCSAqIGJsb2NrIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIGFibGUgdG8gc3VibWl0CisJCQkgKiBtb3JlIHJlcXVlc3RzIHdpdGhvdXQgYmxvY2tpbmcuCisJCQkgKgorCQkJICogVGhpcyBjb2RlIGRvZXMgdHdvIGdyZWF0IHRoaW5ncywgaXQgcG9rZXMgaW50bworCQkJICogdGhlIGVsZXZhdG9yIGNvZGUgZnJvbSBhIGZpbGVzeXN0ZW0gX2FuZF8KKwkJCSAqIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGhvdyBiYXRjaGluZyB3b3Jrcy4KKwkJCSAqLworCQkJaWYgKGlvYyAmJiBpb2MtPm5yX2JhdGNoX3JlcXVlc3RzID4gMCAmJgorCQkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGlvYy0+bGFzdF93YWl0ZWQgKyBIWi81MFVMKSAmJgorCQkJICAgIChsYXN0X3dhaXRlZCA9PSAwIHx8CisJCQkgICAgIGlvYy0+bGFzdF93YWl0ZWQgPT0gbGFzdF93YWl0ZWQpKSB7CisJCQkJLyoKKwkJCQkgKiB3ZSB3YW50IHRvIGdvIHRocm91Z2ggb3VyIGJhdGNoIG9mCisJCQkJICogcmVxdWVzdHMgYW5kIHN0b3AuICBTbywgd2UgY29weSBvdXQKKwkJCQkgKiB0aGUgaW9jLT5sYXN0X3dhaXRlZCB0aW1lIGFuZCB0ZXN0CisJCQkJICogYWdhaW5zdCBpdCBiZWZvcmUgbG9vcGluZworCQkJCSAqLworCQkJCWxhc3Rfd2FpdGVkID0gaW9jLT5sYXN0X3dhaXRlZDsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCXNwaW5fbG9jaygmZGV2aWNlLT5pb19sb2NrKTsKIAogCQkJb2xkX2hlYWQgPSBkZXZpY2UtPnBlbmRpbmdfYmlvczsKQEAgLTIzMSw2ICsyNTgsMTggQEAKIAlpZiAoZGV2aWNlLT5wZW5kaW5nX2Jpb3MpCiAJCWdvdG8gbG9vcF9sb2NrOwogCXNwaW5fdW5sb2NrKCZkZXZpY2UtPmlvX2xvY2spOworCisJLyoKKwkgKiBJTyBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggYSBsb25nIHBhdGggdG8gZ2V0IGhlcmUuICBDaGVja3N1bW1pbmcsCisJICogYXN5bmMgaGVscGVyIHRocmVhZHMsIHBlcmhhcHMgY29tcHJlc3Npb24uICBXZSd2ZSBkb25lIGEgcHJldHR5CisJICogZ29vZCBqb2Igb2YgY29sbGVjdGluZyBhIGJhdGNoIG9mIElPIGFuZCBzaG91bGQganVzdCB1bnBsdWcKKwkgKiB0aGUgZGV2aWNlIHJpZ2h0IGF3YXkuCisJICoKKwkgKiBUaGlzIHdpbGwgaGVscCBhbnlvbmUgd2hvIGlzIHdhaXRpbmcgb24gdGhlIElPLCB0aGV5IG1pZ2h0IGhhdmUKKwkgKiBhbHJlYWR5IHVucGx1Z2dlZCwgYnV0IG1hbmFnZWQgdG8gZG8gc28gYmVmb3JlIHRoZSBiaW8gdGhleQorCSAqIGNhcmVkIGFib3V0IGZvdW5kIGl0cyB3YXkgZG93biBoZXJlLgorCSAqLworCWJsa19ydW5fYmFja2luZ19kZXYoYmRpLCBOVUxMKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmggYi9mcy9idHJmcy92b2x1bWVzLmgKaW5kZXggODZjNDRlOS4uMjE4NWRlNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5oCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuaApAQCAtNzYsNyArNzYsNyBAQAogc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgewogCXU4IGZzaWRbQlRSRlNfRlNJRF9TSVpFXTsgLyogRlMgc3BlY2lmaWMgdXVpZCAqLwogCi0JLyogdGhlIGRldmljZSB3aXRoIHRoaXMgaWQgaGFzIHRoZSBtb3N0IHJlY2VudCBjb3lwIG9mIHRoZSBzdXBlciAqLworCS8qIHRoZSBkZXZpY2Ugd2l0aCB0aGlzIGlkIGhhcyB0aGUgbW9zdCByZWNlbnQgY29weSBvZiB0aGUgc3VwZXIgKi8KIAl1NjQgbGF0ZXN0X2RldmlkOwogCXU2NCBsYXRlc3RfdHJhbnM7CiAJdTY0IG51bV9kZXZpY2VzOwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBhMmZkNzQzLi41ZDU1YTg5IDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMTk5LDEzICsxOTksMTMgQEAKIAloZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCWJoID0gaGVhZDsKIAlkbyB7Ci0JCWlmIChiaC0+Yl9ibG9ja25yID09IGJsb2NrKSB7CisJCWlmICghYnVmZmVyX21hcHBlZChiaCkpCisJCQlhbGxfbWFwcGVkID0gMDsKKwkJZWxzZSBpZiAoYmgtPmJfYmxvY2tuciA9PSBibG9jaykgewogCQkJcmV0ID0gYmg7CiAJCQlnZXRfYmgoYmgpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWlmICghYnVmZmVyX21hcHBlZChiaCkpCi0JCQlhbGxfbWFwcGVkID0gMDsKIAkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQkJCQkJJnpvbmUpOwogCQlpZiAoem9uZSkKIAkJCXRyeV90b19mcmVlX3BhZ2VzKG5vZGVfem9uZWxpc3QobmlkLCBHRlBfTk9GUyksIDAsCi0JCQkJCQlHRlBfTk9GUyk7CisJCQkJCQlHRlBfTk9GUywgTlVMTCk7CiAJfQogfQogCkBAIC01NDcsNiArNTQ3LDM5IEBACiAJcmV0dXJuIGVycjsKIH0KIAordm9pZCBkb190aGF3X2FsbCh1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCQlzYi0+c19jb3VudCsrOworCQlzcGluX3VubG9jaygmc2JfbG9jayk7CisJCWRvd25fcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJd2hpbGUgKHNiLT5zX2JkZXYgJiYgIXRoYXdfYmRldihzYi0+c19iZGV2LCBzYikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbWVyZ2VuY3kgVGhhdyBvbiAlc1xuIiwKKwkJCSAgICAgICBiZGV2bmFtZShzYi0+c19iZGV2LCBiKSk7CisJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJCXNwaW5fbG9jaygmc2JfbG9jayk7CisJCWlmIChfX3B1dF9zdXBlcl9hbmRfbmVlZF9yZXN0YXJ0KHNiKSkKKwkJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkVtZXJnZW5jeSBUaGF3IGNvbXBsZXRlXG4iKTsKK30KKworLyoqCisgKiBlbWVyZ2VuY3lfdGhhd19hbGwgLS0gZm9yY2libHkgdGhhdyBldmVyeSBmcm96ZW4gZmlsZXN5c3RlbQorICoKKyAqIFVzZWQgZm9yIGVtZXJnZW5jeSB1bmZyZWV6ZSBvZiBhbGwgZmlsZXN5c3RlbXMgdmlhIFN5c1JxCisgKi8KK3ZvaWQgZW1lcmdlbmN5X3RoYXdfYWxsKHZvaWQpCit7CisJcGRmbHVzaF9vcGVyYXRpb24oZG9fdGhhd19hbGwsIDApOworfQorCiAvKioKICAqIHN5bmNfbWFwcGluZ19idWZmZXJzIC0gd3JpdGUgb3V0ICYgd2FpdCB1cG9uIGEgbWFwcGluZydzICJhc3NvY2lhdGVkIiBidWZmZXJzCiAgKiBAbWFwcGluZzogdGhlIG1hcHBpbmcgd2hpY2ggd2FudHMgdGhvc2UgYnVmZmVycyB3cml0dGVuCkBAIC02MjEsMTQgKzY1NCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlpZiAocGFnZS0+bWFwcGluZykgewkvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCVdBUk5fT05fT05DRSh3YXJuICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwotCi0JCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7Ci0JCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7Ci0JCQlfX2luY19iZGlfc3RhdChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAotCQkJCQlCRElfUkVDTEFJTUFCTEUpOwotCQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7Ci0JCQl0YXNrX2lvX2FjY291bnRfd3JpdGUoUEFHRV9DQUNIRV9TSVpFKTsKLQkJfQorCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKIAkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsCiAJCQkJcGFnZV9pbmRleChwYWdlKSwgUEFHRUNBQ0hFX1RBR19ESVJUWSk7CiAJfQpAQCAtMTU2OSw2ICsxNTk1LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKIAljb25zdCB1bnNpZ25lZCBibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CiAJaW50IG5yX3VuZGVyd2F5ID0gMDsKKwlpbnQgd3JpdGVfb3AgPSAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgPyBXUklURV9TWU5DIDogV1JJVEUpOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIApAQCAtMTY2MCw3ICsxNjg3LDcgQEAKIAlkbyB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKLQkJCXN1Ym1pdF9iaChXUklURSwgYmgpOworCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQlucl91bmRlcndheSsrOwogCQl9CiAJCWJoID0gbmV4dDsKQEAgLTE3MTQsNyArMTc0MSw3IEBACiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKIAkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQlzdWJtaXRfYmgoV1JJVEUsIGJoKTsKKwkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJbnJfdW5kZXJ3YXkrKzsKIAkJfQogCQliaCA9IG5leHQ7CkBAIC0yMzIwLDEzICsyMzQ3LDE0IEBACiAgKiB1bmxvY2sgdGhlIHBhZ2UuCiAgKi8KIGludAotYmxvY2tfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKK2Jsb2NrX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAJCSAgIGdldF9ibG9ja190IGdldF9ibG9jaykKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCWxvZmZfdCBzaXplOwotCWludCByZXQgPSAtRUlOVkFMOworCWludCByZXQgPSBWTV9GQVVMVF9OT1BBR0U7IC8qIG1ha2UgdGhlIFZNIHJldHJ5IHRoZSBmYXVsdCAqLwogCiAJbG9ja19wYWdlKHBhZ2UpOwogCXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC0yMzQ2LDYgKzIzNzQsMTMgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gYmxvY2tfY29tbWl0X3dyaXRlKHBhZ2UsIDAsIGVuZCk7CiAKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCWVsc2UgLyogLUVOT1NQQywgLUVJTywgZXRjICovCisJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJfQorCiBvdXRfdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiByZXQ7CkBAIC0zMjgxLDcgKzMzMTYsNiBAQAogRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3JlYWRfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfd3JpdGVfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGZpbGVfZnN5bmMpOwotRVhQT1JUX1NZTUJPTChmc3luY19iZGV2KTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19ibG9ja19ibWFwKTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpOwogRVhQT1JUX1NZTUJPTChpbml0X2J1ZmZlcik7CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL0tjb25maWcgYi9mcy9jYWNoZWZpbGVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlOWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvS2NvbmZpZwpAQCAtMCwwICsxLDM5IEBACisKK2NvbmZpZyBDQUNIRUZJTEVTCisJdHJpc3RhdGUgIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlcyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgQkxPQ0sKKwloZWxwCisJICBUaGlzIHBlcm1pdHMgdXNlIG9mIGEgbW91bnRlZCBmaWxlc3lzdGVtIGFzIGEgY2FjaGUgZm9yIG90aGVyCisJICBmaWxlc3lzdGVtcyAtIHByaW1hcmlseSBuZXR3b3JraW5nIGZpbGVzeXN0ZW1zIC0gdGh1cyBhbGxvd2luZyBmYXN0CisJICBsb2NhbCBkaXNrIHRvIGVuaGFuY2UgdGhlIHNwZWVkIG9mIHNsb3dlciBkZXZpY2VzLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworY29uZmlnIENBQ0hFRklMRVNfREVCVUcKKwlib29sICJEZWJ1ZyBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUworCWhlbHAKKwkgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgZmlsZXN5c3RlbQorCSAgY2FjaGluZyBvbiBmaWxlcyBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlCisJICBlbmFibGVkIGJ5IHNldHRpbmcgYml0cyBpbiAvc3lzL21vZHVsZXMvY2FjaGVmaWxlcy9wYXJhbWV0ZXIvZGVidWcgb3IKKwkgIGJ5IGluY2x1ZGluZyBhIGRlYnVnZ2luZyBzcGVjaWZpZXIgaW4gL2V0Yy9jYWNoZWZpbGVzZC5jb25mLgorCitjb25maWcgQ0FDSEVGSUxFU19ISVNUT0dSQU0KKwlib29sICJHYXRoZXIgbGF0ZW5jeSBpbmZvcm1hdGlvbiBvbiBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUyAmJiBQUk9DX0ZTCisJaGVscAorCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgbGF0ZW5jeSBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBDYWNoZUZpbGVzCisJICBvcGVyYXRpb24gYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZToKKworCQkvcHJvYy9mcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbQorCisJICBUaGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhpc3RvZ3JhbSBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG8KKwkgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG9pbnRzIGF0IHdoaWNoIGRhdGEgaXMgZ2F0aGVyZWQsCisJICBhbmQgb24gYSBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcAorCSAgYm91bmNpbmcgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBoaXN0b2dyYW0gbWF5IGJlCisJICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnTicgaGVyZSBpcyByZWNvbW1lbmRlZC4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dCBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL01ha2VmaWxlIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNiYWIwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjCisjIE1ha2VmaWxlIGZvciBjYWNoaW5nIGluIGEgbW91bnRlZCBmaWxlc3lzdGVtCisjCisKK2NhY2hlZmlsZXMteSA6PSBcCisJYmluZC5vIFwKKwlkYWVtb24ubyBcCisJaW50ZXJmYWNlLm8gXAorCWtleS5vIFwKKwltYWluLm8gXAorCW5hbWVpLm8gXAorCXJkd3IubyBcCisJc2VjdXJpdHkubyBcCisJeGF0dHIubworCitjYWNoZWZpbGVzLSQoQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNKSArPSBwcm9jLm8KKworb2JqLSQoQ09ORklHX0NBQ0hFRklMRVMpIDo9IGNhY2hlZmlsZXMubwpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9iaW5kLmMgYi9mcy9jYWNoZWZpbGVzL2JpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk3ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9iaW5kLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qIEJpbmQgYW5kIHVuYmluZCBhIGNhY2hlIGZyb20gdGhlIGZpbGVzeXN0ZW0gYmFja2luZyBpdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGVzKTsKKworLyoKKyAqIGJpbmQgYSBkaXJlY3RvcnkgYXMgYSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJX2VudGVyKCJ7JXUsJXUsJXUsJXUsJXUsJXV9LCVzIiwKKwkgICAgICAgY2FjaGUtPmZydW5fcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmZjdWxsX3BlcmNlbnQsCisJICAgICAgIGNhY2hlLT5mc3RvcF9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YmN1bGxfcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmJzdG9wX3BlcmNlbnQsCisJICAgICAgIGFyZ3MpOworCisJLyogc3RhcnQgYnkgY2hlY2tpbmcgdGhpbmdzIG92ZXIgKi8KKwlBU1NFUlQoY2FjaGUtPmZzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+ZnN0b3BfcGVyY2VudCA8IGNhY2hlLT5mY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5mY3VsbF9wZXJjZW50IDwgY2FjaGUtPmZydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+ZnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlBU1NFUlQoY2FjaGUtPmJzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+YnN0b3BfcGVyY2VudCA8IGNhY2hlLT5iY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5iY3VsbF9wZXJjZW50IDwgY2FjaGUtPmJydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlpZiAoKmFyZ3MpIHsKKwkJa2Vycm9yKCInYmluZCcgY29tbWFuZCBkb2Vzbid0IHRha2UgYW4gYXJndW1lbnQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjYWNoZS0+cm9vdGRpcm5hbWUpIHsKKwkJa2Vycm9yKCJObyBjYWNoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGRvbid0IHBlcm1pdCBhbHJlYWR5IGJvdW5kIGNhY2hlcyB0byBiZSByZS1ib3VuZCAqLworCWlmICh0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoIkNhY2hlIGFscmVhZHkgYm91bmQiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBjb3BpZXMgb2YgdGhlIHRhZyBhbmQgZGlybmFtZSBzdHJpbmdzICovCisJaWYgKCFjYWNoZS0+dGFnKSB7CisJCS8qIHRoZSB0YWcgc3RyaW5nIGlzIHJlbGVhc2VkIGJ5IHRoZSBmb3BzLT5yZWxlYXNlKCkKKwkJICogZnVuY3Rpb24sIHNvIHdlIGRvbid0IHJlbGVhc2UgaXQgb24gZXJyb3IgaGVyZSAqLworCQljYWNoZS0+dGFnID0ga3N0cmR1cCgiQ2FjaGVGaWxlcyIsIEdGUF9LRVJORUwpOworCQlpZiAoIWNhY2hlLT50YWcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBhZGQgdGhlIGNhY2hlICovCisJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShjYWNoZSk7Cit9CisKKy8qCisgKiBhZGQgYSBjYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpmc2RlZjsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCXN0cnVjdCBkZW50cnkgKmdyYXZleWFyZCwgKmNhY2hlZGlyLCAqcm9vdDsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCS8qIHdlIHdhbnQgdG8gd29yayB1bmRlciB0aGUgbW9kdWxlJ3Mgc2VjdXJpdHkgSUQgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2dldF9zZWN1cml0eV9JRChjYWNoZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCisJLyogYWxsb2NhdGUgdGhlIHJvb3QgaW5kZXggb2JqZWN0ICovCisJcmV0ID0gLUVOT01FTTsKKworCWZzZGVmID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZWZpbGVzX29iamVjdF9qYXIsIEdGUF9LRVJORUwpOworCWlmICghZnNkZWYpCisJCWdvdG8gZXJyb3Jfcm9vdF9vYmplY3Q7CisKKwlBU1NFUlRDTVAoZnNkZWYtPmJhY2tlciwgPT0sIE5VTEwpOworCisJYXRvbWljX3NldCgmZnNkZWYtPnVzYWdlLCAxKTsKKwlmc2RlZi0+dHlwZSA9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVg7CisKKwlfZGVidWcoIi0gZnNkZWYgJXAiLCBmc2RlZik7CisKKwkvKiBsb29rIHVwIHRoZSBkaXJlY3RvcnkgYXQgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlICovCisJbWVtc2V0KCZuZCwgMCwgc2l6ZW9mKG5kKSk7CisKKwlyZXQgPSBwYXRoX2xvb2t1cChjYWNoZS0+cm9vdGRpcm5hbWUsIExPT0tVUF9ESVJFQ1RPUlksICZuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3Jfb3Blbl9yb290OworCisJY2FjaGUtPm1udCA9IG1udGdldChuZC5wYXRoLm1udCk7CisJcm9vdCA9IGRnZXQobmQucGF0aC5kZW50cnkpOworCXBhdGhfcHV0KCZuZC5wYXRoKTsKKworCS8qIGNoZWNrIHBhcmFtZXRlcnMgKi8KKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIXJvb3QtPmRfaW5vZGUgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFyb290LT5kX2lub2RlLT5pX29wLT5nZXR4YXR0ciB8fAorCSAgICAhcm9vdC0+ZF9zYiB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcCB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcC0+c3RhdGZzIHx8CisJICAgICFyb290LT5kX3NiLT5zX29wLT5zeW5jX2ZzKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJcmV0ID0gLUVST0ZTOworCWlmIChyb290LT5kX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZGV0ZXJtaW5lIHRoZSBzZWN1cml0eSBvZiB0aGUgb24tZGlzayBjYWNoZSBhcyB0aGlzIGdvdmVybnMKKwkgKiBzZWN1cml0eSBJRCBvZiBmaWxlcyB3ZSBjcmVhdGUgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2RldGVybWluZV9jYWNoZV9zZWN1cml0eShjYWNoZSwgcm9vdCwgJnNhdmVkX2NyZWQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBjYWNoZSBzaXplIGFuZCBibG9ja3NpemUgKi8KKwlyZXQgPSB2ZnNfc3RhdGZzKHJvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRVJBTkdFOworCWlmIChzdGF0cy5mX2JzaXplIDw9IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoc3RhdHMuZl9ic2l6ZSA+IFBBR0VfU0laRSkKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKworCWNhY2hlLT5ic2l6ZSA9IHN0YXRzLmZfYnNpemU7CisJY2FjaGUtPmJzaGlmdCA9IDA7CisJaWYgKHN0YXRzLmZfYnNpemUgPCBQQUdFX1NJWkUpCisJCWNhY2hlLT5ic2hpZnQgPSBQQUdFX1NISUZUIC0gaWxvZzIoc3RhdHMuZl9ic2l6ZSk7CisKKwlfZGVidWcoImJsa3NpemUgJXUgKHNoaWZ0ICV1KSIsCisJICAgICAgIGNhY2hlLT5ic2l6ZSwgY2FjaGUtPmJzaGlmdCk7CisKKwlfZGVidWcoInNpemUgJWxsdSwgYXZhaWwgJWxsdSIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmxvY2tzLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2JhdmFpbCk7CisKKwkvKiBzZXQgdXAgY2FjaGluZyBsaW1pdHMgKi8KKwlkb19kaXYoc3RhdHMuZl9maWxlcywgMTAwKTsKKwljYWNoZS0+ZnN0b3AgPSBzdGF0cy5mX2ZpbGVzICogY2FjaGUtPmZzdG9wX3BlcmNlbnQ7CisJY2FjaGUtPmZjdWxsID0gc3RhdHMuZl9maWxlcyAqIGNhY2hlLT5mY3VsbF9wZXJjZW50OworCWNhY2hlLT5mcnVuICA9IHN0YXRzLmZfZmlsZXMgKiBjYWNoZS0+ZnJ1bl9wZXJjZW50OworCisJX2RlYnVnKCJsaW1pdHMgeyVsbHUsJWxsdSwlbGx1fSBmaWxlcyIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZmN1bGwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCk7CisKKwlzdGF0cy5mX2Jsb2NrcyA+Pj0gY2FjaGUtPmJzaGlmdDsKKwlkb19kaXYoc3RhdHMuZl9ibG9ja3MsIDEwMCk7CisJY2FjaGUtPmJzdG9wID0gc3RhdHMuZl9ibG9ja3MgKiBjYWNoZS0+YnN0b3BfcGVyY2VudDsKKwljYWNoZS0+YmN1bGwgPSBzdGF0cy5mX2Jsb2NrcyAqIGNhY2hlLT5iY3VsbF9wZXJjZW50OworCWNhY2hlLT5icnVuICA9IHN0YXRzLmZfYmxvY2tzICogY2FjaGUtPmJydW5fcGVyY2VudDsKKworCV9kZWJ1ZygibGltaXRzIHslbGx1LCVsbHUsJWxsdX0gYmxvY2tzIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5iY3VsbCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wKTsKKworCS8qIGdldCB0aGUgY2FjaGUgZGlyZWN0b3J5IGFuZCBjaGVjayBpdHMgdHlwZSAqLworCWNhY2hlZGlyID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiY2FjaGUiKTsKKwlpZiAoSVNfRVJSKGNhY2hlZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKGNhY2hlZGlyKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwlmc2RlZi0+ZGVudHJ5ID0gY2FjaGVkaXI7CisJZnNkZWYtPmZzY2FjaGUuY29va2llID0gTlVMTDsKKworCXJldCA9IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoZnNkZWYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBncmF2ZXlhcmQgZGlyZWN0b3J5ICovCisJZ3JhdmV5YXJkID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiZ3JhdmV5YXJkIik7CisJaWYgKElTX0VSUihncmF2ZXlhcmQpKSB7CisJCXJldCA9IFBUUl9FUlIoZ3JhdmV5YXJkKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwljYWNoZS0+Z3JhdmV5YXJkID0gZ3JhdmV5YXJkOworCisJLyogcHVibGlzaCB0aGUgY2FjaGUgKi8KKwlmc2NhY2hlX2luaXRfY2FjaGUoJmNhY2hlLT5jYWNoZSwKKwkJCSAgICZjYWNoZWZpbGVzX2NhY2hlX29wcywKKwkJCSAgICIlcyIsCisJCQkgICBmc2RlZi0+ZGVudHJ5LT5kX3NiLT5zX2lkKTsKKworCWZzY2FjaGVfb2JqZWN0X2luaXQoJmZzZGVmLT5mc2NhY2hlLCBOVUxMLCAmY2FjaGUtPmNhY2hlKTsKKworCXJldCA9IGZzY2FjaGVfYWRkX2NhY2hlKCZjYWNoZS0+Y2FjaGUsICZmc2RlZi0+ZnNjYWNoZSwgY2FjaGUtPnRhZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfYWRkX2NhY2hlOworCisJLyogZG9uZSAqLworCXNldF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncyk7CisJZHB1dChyb290KTsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCSAgICAgICAiIEZpbGUgY2FjaGUgb24gJXMgcmVnaXN0ZXJlZFxuIiwKKwkgICAgICAgY2FjaGUtPmNhY2hlLmlkZW50aWZpZXIpOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCXJldHVybiAwOworCitlcnJvcl9hZGRfY2FjaGU6CisJZHB1dChjYWNoZS0+Z3JhdmV5YXJkKTsKKwljYWNoZS0+Z3JhdmV5YXJkID0gTlVMTDsKK2Vycm9yX3Vuc3VwcG9ydGVkOgorCW1udHB1dChjYWNoZS0+bW50KTsKKwljYWNoZS0+bW50ID0gTlVMTDsKKwlkcHV0KGZzZGVmLT5kZW50cnkpOworCWZzZGVmLT5kZW50cnkgPSBOVUxMOworCWRwdXQocm9vdCk7CitlcnJvcl9vcGVuX3Jvb3Q6CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgZnNkZWYpOworZXJyb3Jfcm9vdF9vYmplY3Q6CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwlrZXJyb3IoIkZhaWxlZCB0byByZWdpc3RlcjogJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1bmJpbmQgYSBjYWNoZSBvbiBmZCByZWxlYXNlCisgKi8KK3ZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlfZW50ZXIoIiIpOworCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCQkgICAgICAgIiBGaWxlIGNhY2hlIG9uICVzIHVucmVnaXN0ZXJpbmdcbiIsCisJCSAgICAgICBjYWNoZS0+Y2FjaGUuaWRlbnRpZmllcik7CisKKwkJZnNjYWNoZV93aXRoZHJhd19jYWNoZSgmY2FjaGUtPmNhY2hlKTsKKwl9CisKKwlkcHV0KGNhY2hlLT5ncmF2ZXlhcmQpOworCW1udHB1dChjYWNoZS0+bW50KTsKKworCWtmcmVlKGNhY2hlLT5yb290ZGlybmFtZSk7CisJa2ZyZWUoY2FjaGUtPnNlY2N0eCk7CisJa2ZyZWUoY2FjaGUtPnRhZyk7CisKKwlfbGVhdmUoIiIpOworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uYyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxODUxNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKQEAgLTAsMCArMSw3NTUgQEAKKy8qIERhZW1vbiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCisJCQkJICAgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKKwkJCQkgICAgICAgc2l6ZV90LCBsb2ZmX3QgKik7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3BvbGwoc3RydWN0IGZpbGUgKiwKKwkJCQkJICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9mcnVuKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYnN0b3Aoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kZWJ1ZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fc2VjY3R4KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3RhZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWZpbGVzX29wZW47CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19kYWVtb25fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19kYWVtb25fb3BlbiwKKwkucmVsZWFzZQk9IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2UsCisJLnJlYWQJCT0gY2FjaGVmaWxlc19kYWVtb25fcmVhZCwKKwkud3JpdGUJCT0gY2FjaGVmaWxlc19kYWVtb25fd3JpdGUsCisJLnBvbGwJCT0gY2FjaGVmaWxlc19kYWVtb25fcG9sbCwKK307CisKK3N0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgeworCWNoYXIgbmFtZVs4XTsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgY2FjaGVmaWxlc19kYWVtb25fY21kc1tdID0geworCXsgImJpbmQiLAljYWNoZWZpbGVzX2RhZW1vbl9iaW5kCQl9LAorCXsgImJydW4iLAljYWNoZWZpbGVzX2RhZW1vbl9icnVuCQl9LAorCXsgImJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fYmN1bGwJCX0sCisJeyAiYnN0b3AiLAljYWNoZWZpbGVzX2RhZW1vbl9ic3RvcAkJfSwKKwl7ICJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fY3VsbAkJfSwKKwl7ICJkZWJ1ZyIsCWNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnCQl9LAorCXsgImRpciIsCWNhY2hlZmlsZXNfZGFlbW9uX2RpcgkJfSwKKwl7ICJmcnVuIiwJY2FjaGVmaWxlc19kYWVtb25fZnJ1bgkJfSwKKwl7ICJmY3VsbCIsCWNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsCQl9LAorCXsgImZzdG9wIiwJY2FjaGVmaWxlc19kYWVtb25fZnN0b3AJCX0sCisJeyAiaW51c2UiLAljYWNoZWZpbGVzX2RhZW1vbl9pbnVzZQkJfSwKKwl7ICJzZWNjdHgiLAljYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgJfSwKKwl7ICJ0YWciLAljYWNoZWZpbGVzX2RhZW1vbl90YWcJCX0sCisJeyAiIiwJCU5VTEwJCQkJfQorfTsKKworCisvKgorICogZG8gdmFyaW91cyBjaGVja3MKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCV9lbnRlcigiIik7CisKKwkvKiBvbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGRvIHRoaXMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiB0aGUgY2FjaGVmaWxlcyBkZXZpY2UgbWF5IG9ubHkgYmUgb3BlbiBvbmNlIGF0IGEgdGltZSAqLworCWlmICh4Y2hnKCZjYWNoZWZpbGVzX29wZW4sIDEpID09IDEpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBhbGxvY2F0ZSBhIGNhY2hlIHJlY29yZCAqLworCWNhY2hlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhY2hlKSB7CisJCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW11dGV4X2luaXQoJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCWNhY2hlLT5hY3RpdmVfbm9kZXMgPSBSQl9ST09UOworCXJ3bG9ja19pbml0KCZjYWNoZS0+YWN0aXZlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhY2hlLT5kYWVtb25fcG9sbHdxKTsKKworCS8qIHNldCBkZWZhdWx0IGNhY2hpbmcgbGltaXRzCisJICogLSBsaW1pdCBhdCAxJSBmcmVlIHNwYWNlIGFuZC9vciBmcmVlIGZpbGVzCisJICogLSBjdWxsIGJlbG93IDUlIGZyZWUgc3BhY2UgYW5kL29yIGZyZWUgZmlsZXMKKwkgKiAtIGNlYXNlIGN1bGxpbmcgYWJvdmUgNyUgZnJlZSBzcGFjZSBhbmQvb3IgZnJlZSBmaWxlcworCSAqLworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSA3OworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gNTsKKwljYWNoZS0+ZnN0b3BfcGVyY2VudCA9IDE7CisJY2FjaGUtPmJydW5fcGVyY2VudCA9IDc7CisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSA1OworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gMTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNhY2hlOworCWNhY2hlLT5jYWNoZWZpbGVzZCA9IGZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgY2FjaGUKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCV9lbnRlcigiIik7CisKKwlBU1NFUlQoY2FjaGUpOworCisJc2V0X2JpdChDQUNIRUZJTEVTX0RFQUQsICZjYWNoZS0+ZmxhZ3MpOworCisJY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKGNhY2hlKTsKKworCUFTU0VSVCghY2FjaGUtPmFjdGl2ZV9ub2Rlcy5yYl9ub2RlKTsKKworCS8qIGNsZWFuIHVwIHRoZSBjb250cm9sIGZpbGUgaW50ZXJmYWNlICovCisJY2FjaGUtPmNhY2hlZmlsZXNkID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisKKwlrZnJlZShjYWNoZSk7CisKKwlfbGVhdmUoIiIpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCB0aGUgY2FjaGUgc3RhdGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKl9idWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmZmVyWzI1Nl07CisJaW50IG47CisKKwkvL19lbnRlcigiLCwlenUsIiwgYnVmbGVuKTsKKworCWlmICghdGVzdF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncykpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKworCS8qIHN1bW1hcmlzZSAqLworCWNsZWFyX2JpdChDQUNIRUZJTEVTX1NUQVRFX0NIQU5HRUQsICZjYWNoZS0+ZmxhZ3MpOworCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCSAgICAgImN1bGw9JWMiCisJCSAgICAgIiBmcnVuPSVsbHgiCisJCSAgICAgIiBmY3VsbD0lbGx4IgorCQkgICAgICIgZnN0b3A9JWxseCIKKwkJICAgICAiIGJydW49JWxseCIKKwkJICAgICAiIGJjdWxsPSVsbHgiCisJCSAgICAgIiBic3RvcD0lbGx4IiwKKwkJICAgICB0ZXN0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpID8gJzEnIDogJzAnLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mY3VsbCwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZnN0b3AsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJjdWxsLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5ic3RvcAorCQkgICAgICk7CisKKwlpZiAobiA+IGJ1ZmxlbikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWlmIChjb3B5X3RvX3VzZXIoX2J1ZmZlciwgYnVmZmVyLCBuKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBuOworfQorCisvKgorICogY29tbWFuZCB0aGUgY2FjaGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpfZGF0YSwKKwkJCQkgICAgICAgc2l6ZV90IGRhdGFsZW4sCisJCQkJICAgICAgIGxvZmZfdCAqcG9zKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgKmNtZDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGF0YSwgKmFyZ3MsICpjcDsKKworCS8vX2VudGVyKCIsLCV6dSwiLCBkYXRhbGVuKTsKKworCUFTU0VSVChjYWNoZSk7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoZGF0YWxlbiA8IDAgfHwgZGF0YWxlbiA+IFBBR0VfU0laRSAtIDEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIGRyYWcgdGhlIGNvbW1hbmQgc3RyaW5nIGludG8gdGhlIGtlcm5lbCBzbyB3ZSBjYW4gcGFyc2UgaXQgKi8KKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIF9kYXRhLCBkYXRhbGVuKSAhPSAwKQorCQlnb3RvIGVycm9yOworCisJZGF0YVtkYXRhbGVuXSA9ICdcMCc7CisKKwlyZXQgPSAtRUlOVkFMOworCWlmIChtZW1jaHIoZGF0YSwgJ1wwJywgZGF0YWxlbikpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzdHJpcCBhbnkgbmV3bGluZSAqLworCWNwID0gbWVtY2hyKGRhdGEsICdcbicsIGRhdGFsZW4pOworCWlmIChjcCkgeworCQlpZiAoY3AgPT0gZGF0YSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJKmNwID0gJ1wwJzsKKwl9CisKKwkvKiBwYXJzZSB0aGUgY29tbWFuZCAqLworCXJldCA9IC1FT1BOT1RTVVBQOworCisJZm9yIChhcmdzID0gZGF0YTsgKmFyZ3M7IGFyZ3MrKykKKwkJaWYgKGlzc3BhY2UoKmFyZ3MpKQorCQkJYnJlYWs7CisJaWYgKCphcmdzKSB7CisJCWlmIChhcmdzID09IGRhdGEpCisJCQlnb3RvIGVycm9yOworCQkqYXJncyA9ICdcMCc7CisJCWZvciAoYXJncysrOyBpc3NwYWNlKCphcmdzKTsgYXJncysrKQorCQkJY29udGludWU7CisJfQorCisJLyogcnVuIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kIGhhbmRsZXIgKi8KKwlmb3IgKGNtZCA9IGNhY2hlZmlsZXNfZGFlbW9uX2NtZHM7IGNtZC0+bmFtZVswXTsgY21kKyspCisJCWlmIChzdHJjbXAoY21kLT5uYW1lLCBkYXRhKSA9PSAwKQorCQkJZ290byBmb3VuZF9jb21tYW5kOworCitlcnJvcjoKKwlrZnJlZShkYXRhKTsKKwkvL19sZWF2ZSgiID0gJXpkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitmb3VuZF9jb21tYW5kOgorCW11dGV4X2xvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJcmV0ID0gLUVJTzsKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpCisJCXJldCA9IGNtZC0+aGFuZGxlcihjYWNoZSwgYXJncyk7CisKKwltdXRleF91bmxvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBkYXRhbGVuOworCWdvdG8gZXJyb3I7Cit9CisKKy8qCisgKiBwb2xsIGZvciBjdWxsaW5nIHN0YXRlCisgKiAtIHVzZSBQT0xMT1VUIHRvIGluZGljYXRlIGN1bGxpbmcgc3RhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZWZpbGVzX2RhZW1vbl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnBvbGwpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrOworCisJcG9sbF93YWl0KGZpbGUsICZjYWNoZS0+ZGFlbW9uX3BvbGx3cSwgcG9sbCk7CisJbWFzayA9IDA7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMSU47CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMT1VUOworCisJcmV0dXJuIG1hc2s7Cit9CisKKy8qCisgKiBnaXZlIGEgcmFuZ2UgZXJyb3IgZm9yIGNhY2hlIHNwYWNlIGNvbnN0cmFpbnRzCisgKiAtIGNhbiBiZSB0YWlsLWNhbGxlZAorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJIGNoYXIgKmFyZ3MpCit7CisJa2Vycm9yKCJGcmVlIHNwYWNlIGxpbWl0cyBtdXN0IGJlIGluIHJhbmdlIgorCSAgICAgICAiIDAlJTw9c3RvcDxjdWxsPHJ1bjwxMDAlJSIpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBjdWxsaW5nCisgKiAtIGNvbW1hbmQ6ICJmcnVuIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZnJ1bihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmcnVuOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnJ1biA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZnJ1biA8PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCB8fCBmcnVuID49IDEwMCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSBmcnVuOworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBwZXJjZW50YWdlIG9mIGZpbGVzIGF0IHdoaWNoIHRvIHN0YXJ0IGN1bGxpbmcKKyAqIC0gY29tbWFuZDogImZjdWxsIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgZmN1bGw7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmY3VsbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmN1bGwgPD0gY2FjaGUtPmZzdG9wX3BlcmNlbnQgfHwgZmN1bGwgPj0gY2FjaGUtPmZydW5fcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gZmN1bGw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJmc3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGZzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzdG9wIDwgMCB8fCBmc3RvcCA+PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mc3RvcF9wZXJjZW50ID0gZnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYmxvY2tzIGF0IHdoaWNoIHRvIHN0b3AgY3VsbGluZworICogLSBjb21tYW5kOiAiYnJ1biA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgYnJ1bjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJydW4gPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJydW4gPD0gY2FjaGUtPmJjdWxsX3BlcmNlbnQgfHwgYnJ1biA+PSAxMDApCisJCXJldHVybiBjYWNoZWZpbGVzX2RhZW1vbl9yYW5nZV9lcnJvcihjYWNoZSwgYXJncyk7CisKKwljYWNoZS0+YnJ1bl9wZXJjZW50ID0gYnJ1bjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RhcnQgY3VsbGluZworICogLSBjb21tYW5kOiAiYmN1bGwgPE4+JSIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9iY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBiY3VsbDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJjdWxsID0gc2ltcGxlX3N0cnRvdWwoYXJncywgJmFyZ3MsIDEwKTsKKwlpZiAoYXJnc1swXSAhPSAnJScgfHwgYXJnc1sxXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiY3VsbCA8PSBjYWNoZS0+YnN0b3BfcGVyY2VudCB8fCBiY3VsbCA+PSBjYWNoZS0+YnJ1bl9wZXJjZW50KQorCQlyZXR1cm4gY2FjaGVmaWxlc19kYWVtb25fcmFuZ2VfZXJyb3IoY2FjaGUsIGFyZ3MpOworCisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSBiY3VsbDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJic3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGJzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJYnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJzdG9wIDwgMCB8fCBic3RvcCA+PSBjYWNoZS0+YmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gYnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIGRpcmVjdG9yeQorICogLSBjb21tYW5kOiAiZGlyIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKmRpcjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgZGlyZWN0b3J5IHNwZWNpZmllZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FjaGUtPnJvb3RkaXJuYW1lKSB7CisJCWtlcnJvcigiU2Vjb25kIGNhY2hlIGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJZGlyID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+cm9vdGRpcm5hbWUgPSBkaXI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIHNlY3VyaXR5IGNvbnRleHQKKyAqIC0gY29tbWFuZDogInNlY2N0eCA8Y3R4PiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKnNlY2N0eDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT5zZWNjdHgpIHsKKwkJa2Vycm9yKCJTZWNvbmQgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2VjY3R4ID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlY2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+c2VjY3R4ID0gc2VjY3R4OworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBjYWNoZSB0YWcKKyAqIC0gY29tbWFuZDogInRhZyA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fdGFnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwljaGFyICp0YWc7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykgeworCQlrZXJyb3IoIkVtcHR5IHRhZyBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT50YWcpCisJCXJldHVybiAtRUVYSVNUOworCisJdGFnID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+dGFnID0gdGFnOworCXJldHVybiAwOworfQorCisvKgorICogcmVxdWVzdCBhIG5vZGUgaW4gdGhlIGNhY2hlIGJlIGN1bGxlZCBmcm9tIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgKiAtIGNvbW1hbmQ6ICJjdWxsIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoc3RyY2hyKGFyZ3MsICcvJykpCisJCWdvdG8gaW52YWw7CisKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCWtlcnJvcigiY3VsbCBhcHBsaWVkIHRvIHVucmVhZHkgY2FjaGUiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpIHsKKwkJa2Vycm9yKCJjdWxsIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2N1bGwoY2FjaGUsIGRpciwgYXJncyk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub3RkaXI6CisJZHB1dChkaXIpOworCWtlcnJvcigiY3VsbCBjb21tYW5kIHJlcXVpcmVzIGRpcmZkIHRvIGJlIGEgZGlyZWN0b3J5Iik7CisJcmV0dXJuIC1FTk9URElSOworCitpbnZhbDoKKwlrZXJyb3IoImN1bGwgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNldCBkZWJ1Z2dpbmcgbW9kZQorICogLSBjb21tYW5kOiAiZGVidWcgPG1hc2s+IgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJbWFzayA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAwKTsKKwlpZiAoYXJnc1swXSAhPSAnXDAnKQorCQlnb3RvIGludmFsOworCisJY2FjaGVmaWxlc19kZWJ1ZyA9IG1hc2s7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2ludmFsOgorCWtlcnJvcigiZGVidWcgY29tbWFuZCByZXF1aXJlcyBtYXNrIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBmaW5kIG91dCB3aGV0aGVyIGFuIG9iamVjdCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGNvbW1hbmQ6ICJpbnVzZSA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJLy9fZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKHN0cmNocihhcmdzLCAnLycpKQorCQlnb3RvIGludmFsOworCisJaWYgKCF0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gdW5yZWFkeSBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX2luX3VzZShjYWNoZSwgZGlyLCBhcmdzKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCisJZHB1dChkaXIpOworCS8vX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm90ZGlyOgorCWRwdXQoZGlyKTsKKwlrZXJyb3IoImludXNlIGNvbW1hbmQgcmVxdWlyZXMgZGlyZmQgdG8gYmUgYSBkaXJlY3RvcnkiKTsKKwlyZXR1cm4gLUVOT1RESVI7CisKK2ludmFsOgorCWtlcnJvcigiaW51c2UgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNlZSBpZiB3ZSBoYXZlIHNwYWNlIGZvciBhIG51bWJlciBvZiBwYWdlcyBhbmQvb3IgYSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlCisgKiBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19oYXNfc3BhY2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJIHVuc2lnbmVkIGZuciwgdW5zaWduZWQgYm5yKQoreworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCWludCByZXQ7CisKKwkvL19lbnRlcigieyVsbHUsJWxsdSwlbGx1LCVsbHUsJWxsdSwlbGx1fSwldSwldSIsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZydW4sCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZjdWxsLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YnJ1biwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YmN1bGwsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wLAorCS8vICAgICAgIGZuciwgYm5yKTsKKworCS8qIGZpbmQgb3V0IGhvdyBtYW55IHBhZ2VzIG9mIGJsb2NrZGV2IGFyZSBhdmFpbGFibGUgKi8KKwltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKKworCXJldCA9IHZmc19zdGF0ZnMoY2FjaGUtPm1udC0+bW50X3Jvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcihjYWNoZSwgInN0YXRmcyBmYWlsZWQiKTsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RhdHMuZl9iYXZhaWwgPj49IGNhY2hlLT5ic2hpZnQ7CisKKwkvL19kZWJ1ZygiYXZhaWwgJWxsdSwlbGx1IiwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2ZmcmVlLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmF2YWlsKTsKKworCS8qIHNlZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlICovCisJaWYgKHN0YXRzLmZfZmZyZWUgPiBmbnIpCisJCXN0YXRzLmZfZmZyZWUgLT0gZm5yOworCWVsc2UKKwkJc3RhdHMuZl9mZnJlZSA9IDA7CisKKwlpZiAoc3RhdHMuZl9iYXZhaWwgPiBibnIpCisJCXN0YXRzLmZfYmF2YWlsIC09IGJucjsKKwllbHNlCisJCXN0YXRzLmZfYmF2YWlsID0gMDsKKworCXJldCA9IC1FTk9CVUZTOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZzdG9wIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJzdG9wKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlyZXQgPSAwOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZjdWxsIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJjdWxsKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSAmJgorCSAgICBzdGF0cy5mX2ZmcmVlID49IGNhY2hlLT5mcnVuICYmCisJICAgIHN0YXRzLmZfYmF2YWlsID49IGNhY2hlLT5icnVuICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpCisJICAgICkgeworCQlfZGVidWcoImNlYXNlIGN1bGxpbmciKTsKKwkJY2FjaGVmaWxlc19zdGF0ZV9jaGFuZ2VkKGNhY2hlKTsKKwl9CisKKwkvL19sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitiZWdpbl9jdWxsOgorCWlmICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpKSB7CisJCV9kZWJ1ZygiIyMjIENVTEwgQ0FDSEUgIyMjIik7CisJCWNhY2hlZmlsZXNfc3RhdGVfY2hhbmdlZChjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBGUy1DYWNoZSBpbnRlcmZhY2UgdG8gQ2FjaGVGaWxlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNkZWZpbmUgbGlzdF90b19wYWdlKGhlYWQpIChsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCisKK3N0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhIHsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0cgkqYXV4ZGF0YTsJLyogYXV4aWxpYXJ5IGRhdGEgKi8KKwljaGFyCQkJKmtleTsJCS8qIGtleSBwYXRoICovCit9OworCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCk7CisKKy8qCisgKiBhbGxvY2F0ZSBhbiBvYmplY3QgcmVjb3JkIGZvciBhIGNvb2tpZSBsb29rdXAgYW5kIHByZXBhcmUgdGhlIGxvb2t1cCBkYXRhCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmNhY2hlZmlsZXNfYWxsb2Nfb2JqZWN0KAorCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpfY2FjaGUsCisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfbG9va3VwX2RhdGEgKmxvb2t1cF9kYXRhOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwl1bnNpZ25lZCBrZXlsZW4sIGF1eGxlbjsKKwl2b2lkICpidWZmZXI7CisJY2hhciAqa2V5OworCisJY2FjaGUgPSBjb250YWluZXJfb2YoX2NhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCJ7JXN9LCVwLCIsIGNhY2hlLT5jYWNoZS5pZGVudGlmaWVyLCBjb29raWUpOworCisJbG9va3VwX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqbG9va3VwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvb2t1cF9kYXRhKQorCQlnb3RvIG5vbWVtX2xvb2t1cF9kYXRhOworCisJLyogY3JlYXRlIGEgbmV3IG9iamVjdCByZWNvcmQgYW5kIGEgdGVtcG9yYXJ5IGxlYWYgaW1hZ2UgKi8KKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmplY3QpCisJCWdvdG8gbm9tZW1fb2JqZWN0OworCisJQVNTRVJUQ01QKG9iamVjdC0+YmFja2VyLCA9PSwgTlVMTCk7CisKKwlCVUdfT04odGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCWF0b21pY19zZXQoJm9iamVjdC0+dXNhZ2UsIDEpOworCisJZnNjYWNoZV9vYmplY3RfaW5pdCgmb2JqZWN0LT5mc2NhY2hlLCBjb29raWUsICZjYWNoZS0+Y2FjaGUpOworCisJb2JqZWN0LT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgcmF3IGtleQorCSAqIC0gc3RpY2sgdGhlIGxlbmd0aCBvbiB0aGUgZnJvbnQgYW5kIGxlYXZlIHNwYWNlIG9uIHRoZSBiYWNrIGZvciB0aGUKKwkgKiAgIGVuY29kZXIKKwkgKi8KKwlidWZmZXIgPSBrbWFsbG9jKCgyICsgNTEyKSArIDMsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlnb3RvIG5vbWVtX2J1ZmZlcjsKKworCWtleWxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfa2V5KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYnVmZmVyICsgMiwgNTEyKTsKKwlBU1NFUlRDTVAoa2V5bGVuLCA8LCA1MTIpOworCisJKih1aW50MTZfdCAqKWJ1ZmZlciA9IGtleWxlbjsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDJdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDNdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDRdID0gMDsKKworCS8qIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgdGhhdCBjYW4gd29yayB3aXRoIGFzIGEgZmlsZW5hbWUgKi8KKwlrZXkgPSBjYWNoZWZpbGVzX2Nvb2tfa2V5KGJ1ZmZlciwga2V5bGVuICsgMiwgb2JqZWN0LT50eXBlKTsKKwlpZiAoIWtleSkKKwkJZ290byBub21lbV9rZXk7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEgYW5kIHByZXBlbmQgdGhlIG9iamVjdCB0eXBlICovCisJYXV4ZGF0YSA9IGJ1ZmZlcjsKKwlhdXhsZW4gPSAwOworCWlmIChjb29raWUtPmRlZi0+Z2V0X2F1eCkgeworCQlhdXhsZW4gPSBjb29raWUtPmRlZi0+Z2V0X2F1eChjb29raWUtPm5ldGZzX2RhdGEsCisJCQkJCSAgICAgIGF1eGRhdGEtPmRhdGEsIDUxMSk7CisJCUFTU0VSVENNUChhdXhsZW4sIDwsIDUxMSk7CisJfQorCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwlsb29rdXBfZGF0YS0+YXV4ZGF0YSA9IGF1eGRhdGE7CisJbG9va3VwX2RhdGEtPmtleSA9IGtleTsKKwlvYmplY3QtPmxvb2t1cF9kYXRhID0gbG9va3VwX2RhdGE7CisKKwlfbGVhdmUoIiA9ICVwIFslcF0iLCAmb2JqZWN0LT5mc2NhY2hlLCBsb29rdXBfZGF0YSk7CisJcmV0dXJuICZvYmplY3QtPmZzY2FjaGU7CisKK25vbWVtX2tleToKKwlrZnJlZShidWZmZXIpOworbm9tZW1fYnVmZmVyOgorCUJVR19PTih0ZXN0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwlmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQoJmNhY2hlLT5jYWNoZSk7Citub21lbV9vYmplY3Q6CisJa2ZyZWUobG9va3VwX2RhdGEpOworbm9tZW1fbG9va3VwX2RhdGE6CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKKy8qCisgKiBhdHRlbXB0IHRvIGxvb2sgdXAgdGhlIG5vbWluYXRlZCBub2RlIGluIHRoaXMgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19sb29rdXBfZGF0YSAqbG9va3VwX2RhdGE7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOworCWludCByZXQ7CisKKwlfZW50ZXIoIntPQkoleH0iLCBfb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LT5jYWNoZSwgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoX29iamVjdC0+cGFyZW50LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlsb29rdXBfZGF0YSA9IG9iamVjdC0+bG9va3VwX2RhdGE7CisKKwlBU1NFUlRDTVAobG9va3VwX2RhdGEsICE9LCBOVUxMKTsKKworCS8qIGxvb2sgdXAgdGhlIGtleSwgY3JlYXRpbmcgYW55IG1pc3NpbmcgYml0cyAqLworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc193YWxrX3RvX29iamVjdChwYXJlbnQsIG9iamVjdCwKKwkJCQkJbG9va3VwX2RhdGEtPmtleSwKKwkJCQkJbG9va3VwX2RhdGEtPmF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwkvKiBwb2xpc2ggb2ZmIGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgb2Ygbm9uLWluZGV4IGZpbGVzICovCisJaWYgKHJldCA9PSAwICYmCisJICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+dHlwZSAhPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKQorCQljYWNoZWZpbGVzX2F0dHJfY2hhbmdlZCgmb2JqZWN0LT5mc2NhY2hlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhY2hlRmlsZXM6IExvb2t1cCBmYWlsZWQgZXJyb3IgJWRcbiIsCisJCSAgICAgICByZXQpOworCQlmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IoJm9iamVjdC0+ZnNjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgWyVkXSIsIHJldCk7Cit9CisKKy8qCisgKiBpbmRpY2F0aW9uIG9mIGxvb2t1cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJXB9Iiwgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBvYmplY3QtPmxvb2t1cF9kYXRhKTsKKworCWlmIChvYmplY3QtPmxvb2t1cF9kYXRhKSB7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmF1eGRhdGEpOworCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhKTsKKwkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJfQorfQorCisvKgorICogaW5jcmVtZW50IHRoZSB1c2FnZSBjb3VudCBvbiBhbiBpbm9kZSBvYmplY3QgKG1heSBmYWlsIGlmIHVubW91bnRpbmcpCisgKi8KK3N0YXRpYworc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpjYWNoZWZpbGVzX2dyYWJfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwgX29iamVjdC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSk7CisKKyNpZmRlZiBDQUNIRUZJTEVTX0RFQlVHX1NMQUIKKwlBU1NFUlQoKGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSAmIDB4ZmZmZjAwMDApICE9IDB4NmI2YjAwMDApOworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZvYmplY3QtPnVzYWdlKTsKKwlyZXR1cm4gJm9iamVjdC0+ZnNjYWNoZTsKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGZvciBhbiBvYmplY3Qgb2JqZWN0IG9uIGRpc2sKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJdW5zaWduZWQgYXV4bGVuOworCisJX2VudGVyKCJ7T0JKJXh9IiwgX29iamVjdC0+ZGVidWdfaWQpOworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKF9vYmplY3QsIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwKKwkJCSAgICAgY2FjaGUpOworCWNvb2tpZSA9IG9iamVjdC0+ZnNjYWNoZS5jb29raWU7CisKKwlpZiAoIWNvb2tpZS0+ZGVmLT5nZXRfYXV4KSB7CisJCV9sZWF2ZSgiIFtubyBhdXhdIik7CisJCXJldHVybjsKKwl9CisKKwlhdXhkYXRhID0ga21hbGxvYygyICsgNTEyICsgMywgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdXhkYXRhKSB7CisJCV9sZWF2ZSgiIFtub21lbV0iKTsKKwkJcmV0dXJuOworCX0KKworCWF1eGxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfYXV4KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYXV4ZGF0YS0+ZGF0YSwgNTExKTsKKwlBU1NFUlRDTVAoYXV4bGVuLCA8LCA1MTEpOworCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCWNhY2hlZmlsZXNfdXBkYXRlX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisJa2ZyZWUoYXV4ZGF0YSk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGRpc2NhcmQgdGhlIHJlc291cmNlcyBwaW5uZWQgYnkgYW4gb2JqZWN0IGFuZCBlZmZlY3QgcmV0aXJlbWVudCBpZgorICogcmVxdWVzdGVkCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZHJvcF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpfb2JqZWN0KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKworCUFTU0VSVChfb2JqZWN0KTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisjaWZkZWYgQ0FDSEVGSUxFU19ERUJVR19TTEFCCisJQVNTRVJUKChhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkgJiAweGZmZmYwMDAwKSAhPSAweDZiNmIwMDAwKTsKKyNlbmRpZgorCisJLyogZGVsZXRlIHJldGlyZWQgb2JqZWN0cyAqLworCWlmIChvYmplY3QtPmZzY2FjaGUuc3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HICYmCisJICAgIF9vYmplY3QgIT0gY2FjaGUtPmNhY2hlLmZzZGVmCisJICAgICkgeworCQlfZGVidWcoIi0gcmV0aXJlIG9iamVjdCBPQkoleCIsIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJCWNhY2hlZmlsZXNfZGVsZXRlX29iamVjdChjYWNoZSwgb2JqZWN0KTsKKwkJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwl9CisKKwkvKiBjbG9zZSB0aGUgZmlsZXN5c3RlbSBzdHVmZiBhdHRhY2hlZCB0byB0aGUgb2JqZWN0ICovCisJaWYgKG9iamVjdC0+YmFja2VyICE9IG9iamVjdC0+ZGVudHJ5KQorCQlkcHV0KG9iamVjdC0+YmFja2VyKTsKKwlvYmplY3QtPmJhY2tlciA9IE5VTEw7CisKKwkvKiBub3RlIHRoYXQgdGhlIG9iamVjdCBpcyBub3cgaW5hY3RpdmUgKi8KKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpIHsKKwkJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkJCQkmb2JqZWN0LT5mbGFncykpCisJCQlCVUcoKTsKKwkJcmJfZXJhc2UoJm9iamVjdC0+YWN0aXZlX25vZGUsICZjYWNoZS0+YWN0aXZlX25vZGVzKTsKKwkJd2FrZV91cF9iaXQoJm9iamVjdC0+ZmxhZ3MsIENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSk7CisJCXdyaXRlX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwl9CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogZGlzcG9zZSBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19wdXRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlBU1NFUlQoX29iamVjdCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCV9lbnRlcigie09CSiV4LCVkfSIsCisJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpKTsKKworI2lmZGVmIENBQ0hFRklMRVNfREVCVUdfU0xBQgorCUFTU0VSVCgoYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpICYgMHhmZmZmMDAwMCkgIT0gMHg2YjZiMDAwMCk7CisjZW5kaWYKKworCUFTU0VSVElGQ01QKG9iamVjdC0+ZnNjYWNoZS5wYXJlbnQsCisJCSAgICBvYmplY3QtPmZzY2FjaGUucGFyZW50LT5uX2NoaWxkcmVuLCA+LCAwKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmplY3QtPnVzYWdlKSkgeworCQlfZGVidWcoIi0ga2lsbCBvYmplY3QgT0JKJXgiLCBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQpOworCisJCUFTU0VSVCghdGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCQlBU1NFUlRDTVAob2JqZWN0LT5mc2NhY2hlLnBhcmVudCwgPT0sIE5VTEwpOworCQlBU1NFUlRDTVAob2JqZWN0LT5iYWNrZXIsID09LCBOVUxMKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZGVudHJ5LCA9PSwgTlVMTCk7CisJCUFTU0VSVENNUChvYmplY3QtPmZzY2FjaGUubl9vcHMsID09LCAwKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZnNjYWNoZS5uX2NoaWxkcmVuLCA9PSwgMCk7CisKKwkJaWYgKG9iamVjdC0+bG9va3VwX2RhdGEpIHsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhLT5hdXhkYXRhKTsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEpOworCQkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJCX0KKworCQljYWNoZSA9IG9iamVjdC0+ZnNjYWNoZS5jYWNoZTsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwkJZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkKGNhY2hlKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogc3luYyBhIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfc3luY19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqX2NhY2hlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCIsIF9jYWNoZSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfY2FjaGUsIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwkvKiBtYWtlIHN1cmUgYWxsIHBhZ2VzIHBpbm5lZCBieSBvcGVyYXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgbmV0ZnMgYXJlCisJICogd3JpdHRlbiB0byBkaXNjICovCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBmc3luY19zdXBlcihjYWNoZS0+bW50LT5tbnRfc2IpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJICAgICJBdHRlbXB0IHRvIHN5bmMgYmFja2luZyBmcyBzdXBlcmJsb2NrIgorCQkJCSAgICAiIHJldHVybmVkIGVycm9yICVkIiwKKwkJCQkgICAgcmV0KTsKK30KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGUgYXR0cmlidXRlcyBvbiBhbiBvYmplY3QgaGF2ZSBjaGFuZ2VkCisgKiAtIGNhbGxlZCB3aXRoIHJlYWRzL3dyaXRlcyBleGNsdWRlZCBieSBGUy1DYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJc3RydWN0IGlhdHRyIG5ld2F0dHJzOworCXVpbnQ2NF90IG5pX3NpemU7CisJbG9mZl90IG9pX3NpemU7CisJaW50IHJldDsKKworCV9vYmplY3QtPmNvb2tpZS0+ZGVmLT5nZXRfYXR0cihfb2JqZWN0LT5jb29raWUtPm5ldGZzX2RhdGEsICZuaV9zaXplKTsKKworCV9lbnRlcigie09CSiV4fSxbJWxsdV0iLAorCSAgICAgICBfb2JqZWN0LT5kZWJ1Z19pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgbmlfc2l6ZSk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlpZiAobmlfc2l6ZSA9PSBvYmplY3QtPmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW9iamVjdC0+YmFja2VyKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlBU1NFUlQoU19JU1JFRyhvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tb2RlKSk7CisKKwlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCBuaV9zaXplKTsKKworCW9pX3NpemUgPSBpX3NpemVfcmVhZChvYmplY3QtPmJhY2tlci0+ZF9pbm9kZSk7CisJaWYgKG9pX3NpemUgPT0gbmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwluZXdhdHRycy5pYV9zaXplID0gbmlfc2l6ZTsKKwluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRTsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJbXV0ZXhfbG9jaygmb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IG5vdGlmeV9jaGFuZ2Uob2JqZWN0LT5iYWNrZXIsICZuZXdhdHRycyk7CisJbXV0ZXhfdW5sb2NrKCZvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWlmIChyZXQgPT0gLUVJTykgeworCQlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCAwKTsKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiU2l6ZSBzZXQgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkaXNzb2NpYXRlIGEgY2FjaGUgZnJvbSBhbGwgdGhlIHBhZ2VzIGl0IHdhcyBiYWNraW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJX2VudGVyKCIiKTsKK30KKworY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzID0geworCS5uYW1lCQkJPSAiY2FjaGVmaWxlcyIsCisJLmFsbG9jX29iamVjdAkJPSBjYWNoZWZpbGVzX2FsbG9jX29iamVjdCwKKwkubG9va3VwX29iamVjdAkJPSBjYWNoZWZpbGVzX2xvb2t1cF9vYmplY3QsCisJLmxvb2t1cF9jb21wbGV0ZQk9IGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlLAorCS5ncmFiX29iamVjdAkJPSBjYWNoZWZpbGVzX2dyYWJfb2JqZWN0LAorCS51cGRhdGVfb2JqZWN0CQk9IGNhY2hlZmlsZXNfdXBkYXRlX29iamVjdCwKKwkuZHJvcF9vYmplY3QJCT0gY2FjaGVmaWxlc19kcm9wX29iamVjdCwKKwkucHV0X29iamVjdAkJPSBjYWNoZWZpbGVzX3B1dF9vYmplY3QsCisJLnN5bmNfY2FjaGUJCT0gY2FjaGVmaWxlc19zeW5jX2NhY2hlLAorCS5hdHRyX2NoYW5nZWQJCT0gY2FjaGVmaWxlc19hdHRyX2NoYW5nZWQsCisJLnJlYWRfb3JfYWxsb2NfcGFnZQk9IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlLAorCS5yZWFkX29yX2FsbG9jX3BhZ2VzCT0gY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzLAorCS5hbGxvY2F0ZV9wYWdlCQk9IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZSwKKwkuYWxsb2NhdGVfcGFnZXMJCT0gY2FjaGVmaWxlc19hbGxvY2F0ZV9wYWdlcywKKwkud3JpdGVfcGFnZQkJPSBjYWNoZWZpbGVzX3dyaXRlX3BhZ2UsCisJLnVuY2FjaGVfcGFnZQkJPSBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZSwKKwkuZGlzc29jaWF0ZV9wYWdlcwk9IGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcywKK307CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmggYi9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyMThlMQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaApAQCAtMCwwICsxLDM2MCBAQAorLyogR2VuZXJhbCBuZXRmcyBjYWNoZSBvbiBjYWNoZSBmaWxlcyBpbnRlcm5hbCBkZWZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGU7CitzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3Q7CisKK2V4dGVybiB1bnNpZ25lZCBjYWNoZWZpbGVzX2RlYnVnOworI2RlZmluZSBDQUNIRUZJTEVTX0RFQlVHX0tFTlRFUgkxCisjZGVmaW5lIENBQ0hFRklMRVNfREVCVUdfS0xFQVZFCTIKKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUJVR19LREVCVUcJNAorCisvKgorICogbm9kZSByZWNvcmRzCisgKi8KK3N0cnVjdCBjYWNoZWZpbGVzX29iamVjdCB7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CQlmc2NhY2hlOwkvKiBmc2NhY2hlIGhhbmRsZSAqLworCXN0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhCSpsb29rdXBfZGF0YTsJLyogY2FjaGVkIGxvb2t1cCBkYXRhICovCisJc3RydWN0IGRlbnRyeQkJCSpkZW50cnk7CS8qIHRoZSBmaWxlL2RpciByZXByZXNlbnRpbmcgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3QgZGVudHJ5CQkJKmJhY2tlcjsJLyogYmFja2luZyBmaWxlICovCisJbG9mZl90CQkJCWlfc2l6ZTsJCS8qIG9iamVjdCBzaXplICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUJMAkJLyogVCBpZiBtYXJrZWQgYWN0aXZlICovCisJYXRvbWljX3QJCQl1c2FnZTsJCS8qIG9iamVjdCB1c2FnZSBjb3VudCAqLworCXVpbnQ4X3QJCQkJdHlwZTsJCS8qIG9iamVjdCB0eXBlICovCisJdWludDhfdAkJCQluZXc7CQkvKiBUIGlmIG9iamVjdCBuZXcgKi8KKwlzcGlubG9ja190CQkJd29ya19sb2NrOworCXN0cnVjdCByYl9ub2RlCQkJYWN0aXZlX25vZGU7CS8qIGxpbmsgaW4gYWN0aXZlIHRyZWUgKGRlbnRyeSBpcyBrZXkpICovCit9OworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworLyoKKyAqIENhY2hlIGZpbGVzIGNhY2hlIGRlZmluaXRpb24KKyAqLworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgeworCXN0cnVjdCBmc2NhY2hlX2NhY2hlCQljYWNoZTsJCS8qIEZTLUNhY2hlIHJlY29yZCAqLworCXN0cnVjdCB2ZnNtb3VudAkJCSptbnQ7CQkvKiBtb3VudHBvaW50IGhvbGRpbmcgdGhlIGNhY2hlICovCisJc3RydWN0IGRlbnRyeQkJCSpncmF2ZXlhcmQ7CS8qIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGRlYWQgb2JqZWN0cyBnbyAqLworCXN0cnVjdCBmaWxlCQkJKmNhY2hlZmlsZXNkOwkvKiBtYW5hZ2VyIGRhZW1vbiBoYW5kbGUgKi8KKwljb25zdCBzdHJ1Y3QgY3JlZAkJKmNhY2hlX2NyZWQ7CS8qIHNlY3VyaXR5IG92ZXJyaWRlIGZvciBhY2Nlc3NpbmcgY2FjaGUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlkYWVtb25fbXV0ZXg7CS8qIGNvbW1hbmQgc2VyaWFsaXNhdGlvbiBtdXRleCAqLworCXdhaXRfcXVldWVfaGVhZF90CQlkYWVtb25fcG9sbHdxOwkvKiBwb2xsIHdhaXRxdWV1ZSBmb3IgZGFlbW9uICovCisJc3RydWN0IHJiX3Jvb3QJCQlhY3RpdmVfbm9kZXM7CS8qIGFjdGl2ZSBub2RlcyAoY2FuJ3QgYmUgY3VsbGVkKSAqLworCXJ3bG9ja190CQkJYWN0aXZlX2xvY2s7CS8qIGxvY2sgZm9yIGFjdGl2ZV9ub2RlcyAqLworCWF0b21pY190CQkJZ3JhdmVjb3VudGVyOwkvKiBncmF2ZXlhcmQgdW5pcXVpZmllciAqLworCXVuc2lnbmVkCQkJZnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZjdWxsX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RhcnQgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZzdG9wX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICglIGZpbGVzKSAqLworCXVuc2lnbmVkCQkJYnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBibG9ja3MpICovCisJdW5zaWduZWQJCQliY3VsbF9wZXJjZW50OwkvKiB3aGVuIHRvIHN0YXJ0IGN1bGxpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnN0b3BfcGVyY2VudDsJLyogd2hlbiB0byBzdG9wIGFsbG9jYXRpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnNpemU7CQkvKiBjYWNoZSdzIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZAkJCWJzaGlmdDsJCS8qIG1pbihpbG9nMihQQUdFX1NJWkUgLyBic2l6ZSksIDApICovCisJdWludDY0X3QJCQlmcnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwl1aW50NjRfdAkJCWZjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJdWludDY0X3QJCQlmc3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJc2VjdG9yX3QJCQlicnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwlzZWN0b3JfdAkJCWJjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJc2VjdG9yX3QJCQlic3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX1JFQURZCQkwCS8qIFQgaWYgY2FjaGUgcHJlcGFyZWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUFECQkJMQkvKiBUIGlmIGNhY2hlIGRlYWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19DVUxMSU5HCQkyCS8qIFQgaWYgY3VsbCBlbmdhZ2VkICovCisjZGVmaW5lIENBQ0hFRklMRVNfU1RBVEVfQ0hBTkdFRAkzCS8qIFQgaWYgc3RhdGUgY2hhbmdlZCAocG9sbCB0cmlnZ2VyKSAqLworCWNoYXIJCQkJKnJvb3RkaXJuYW1lOwkvKiBuYW1lIG9mIGNhY2hlIHJvb3QgZGlyZWN0b3J5ICovCisJY2hhcgkJCQkqc2VjY3R4OwkvKiBMU00gc2VjdXJpdHkgY29udGV4dCAqLworCWNoYXIJCQkJKnRhZzsJCS8qIGNhY2hlIGJpbmRpbmcgdGFnICovCit9OworCisvKgorICogYmFja2luZyBmaWxlIHJlYWQgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgeworCXdhaXRfcXVldWVfdAkJCW1vbml0b3I7CS8qIGxpbmsgaW50byBtb25pdG9yZWQgd2FpdHF1ZXVlICovCisJc3RydWN0IHBhZ2UJCQkqYmFja19wYWdlOwkvKiBiYWNraW5nIGZpbGUgcGFnZSB3ZSdyZSB3YWl0aW5nIGZvciAqLworCXN0cnVjdCBwYWdlCQkJKm5ldGZzX3BhZ2U7CS8qIG5ldGZzIHBhZ2Ugd2UncmUgZ29pbmcgdG8gZmlsbCAqLworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbAkqb3A7CQkvKiByZXRyaWV2YWwgb3AgY292ZXJpbmcgdGhpcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJCW9wX2xpbms7CS8qIGxpbmsgaW4gb3AncyB0b2RvIGxpc3QgKi8KK307CisKKy8qCisgKiBiYWNraW5nIGZpbGUgd3JpdGUgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3dyaXRlIHsKKwlzdHJ1Y3QgcGFnZQkJCSpuZXRmc19wYWdlOwkvKiBuZXRmcyBwYWdlIHRvIGNvcHkgKi8KKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QJKm9iamVjdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlvYmpfbGluazsJLyogbGluayBpbiBvYmplY3QncyBsaXN0cyAqLworCWZzY2FjaGVfcndfY29tcGxldGVfdAkJZW5kX2lvX2Z1bmM7CisJdm9pZAkJCQkqY29udGV4dDsKK307CisKKy8qCisgKiBhdXhpbGlhcnkgZGF0YSB4YXR0ciBidWZmZXIKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgeworCXVpbnQxNl90CQkJbGVuOworCXVpbnQ4X3QJCQkJdHlwZTsKKwl1aW50OF90CQkJCWRhdGFbXTsKK307CisKKy8qCisgKiBub3RlIGNoYW5nZSBvZiBzdGF0ZSBmb3IgZGFlbW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX3N0YXRlX2NoYW5nZWQoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlKQoreworCXNldF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKTsKKwl3YWtlX3VwX2FsbCgmY2FjaGUtPmRhZW1vbl9wb2xsd3EpOworfQorCisvKgorICogY2YtYmluZC5jCisgKi8KK2V4dGVybiBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CisKKy8qCisgKiBjZi1kYWVtb24uYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWNoZWZpbGVzX2RhZW1vbl9mb3BzOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfaGFzX3NwYWNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQl1bnNpZ25lZCBmbnIsIHVuc2lnbmVkIGJucik7CisKKy8qCisgKiBjZi1pbnRlcmZhY2UuYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzOworCisvKgorICogY2Yta2V5LmMKKyAqLworZXh0ZXJuIGNoYXIgKmNhY2hlZmlsZXNfY29va19rZXkoY29uc3QgdTggKnJhdywgaW50IGtleWxlbiwgdWludDhfdCB0eXBlKTsKKworLyoKKyAqIGNmLW5hbWVpLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCSAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgY2hhciAqZmlsZW5hbWUpOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNoYXIgKmZpbGVuYW1lKTsKKworLyoKKyAqIGNmLXByb2MuYworICovCisjaWZkZWYgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNCitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19jcmVhdGVfaGlzdG9ncmFtW0haXTsKKworZXh0ZXJuIGludCBfX2luaXQgY2FjaGVmaWxlc19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY2FjaGVmaWxlc19oaXN0KGF0b21pY190IGhpc3RvZ3JhbVtdLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZikKK3sKKwl1bnNpZ25lZCBsb25nIGppZiA9IGppZmZpZXMgLSBzdGFydF9qaWY7CisJaWYgKGppZiA+PSBIWikKKwkJamlmID0gSFogLSAxOworCWF0b21pY19pbmMoJmhpc3RvZ3JhbVtqaWZdKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgY2FjaGVmaWxlc19wcm9jX2luaXQoKQkJKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfcHJvY19jbGVhbnVwKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfaGlzdChoaXN0LCBzdGFydF9qaWYpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBjZi1yZHdyLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwKKwkJCQkJIHN0cnVjdCBwYWdlICosIGdmcF90KTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiwgdW5zaWduZWQgKiwKKwkJCQkJICBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwgc3RydWN0IHBhZ2UgKiwKKwkJCQkgICAgZ2ZwX3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCAqLCBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICosIHN0cnVjdCBwYWdlICopOworCisvKgorICogY2Ytc2VjdXJpdHkuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqKl9zYXZlZF9jcmVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwkqX3NhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhjYWNoZS0+Y2FjaGVfY3JlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX2VuZF9zZWN1cmUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQpCit7CisJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOworfQorCisvKgorICogY2YteGF0dHIuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJCSBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKworCisvKgorICogZXJyb3IgaGFuZGxpbmcKKyAqLworI2RlZmluZSBrZXJyb3IoRk1ULCAuLi4pIHByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogIkZNVCJcbiIsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlrZXJyb3IoIkkvTyBFcnJvcjogIiBGTVQsICMjX19WQV9BUkdTX18pOwlcCisJZnNjYWNoZV9pb19lcnJvcigmKF9fX2NhY2hlKS0+Y2FjaGUpOwkJXAorCXNldF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmKF9fX2NhY2hlKS0+ZmxhZ3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNhY2hlZmlsZXNfaW9fZXJyb3Jfb2JqKG9iamVjdCwgRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqX19fY2FjaGU7CQkJCVwKKwkJCQkJCQkJCVwKKwlfX19jYWNoZSA9IGNvbnRhaW5lcl9vZigob2JqZWN0KS0+ZnNjYWNoZS5jYWNoZSwJCVwKKwkJCQlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOwlcCisJY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKworLyoKKyAqIGRlYnVnIHRyYWNpbmcKKyAqLworI2RlZmluZSBkYmdwcmludGsoRk1ULCAuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiWyUtNi42c10gIkZNVCJcbiIsIGN1cnJlbnQtPmNvbW0sICMjX19WQV9BUkdTX18pCisKKy8qIG1ha2Ugc3VyZSB3ZSBtYWludGFpbiB0aGUgZm9ybWF0IHN0cmluZ3MsIGV2ZW4gd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7Cit9CisKKyNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBkYmdwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2xlYXZlKEZNVCwgLi4uKSBkYmdwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2RlYnVnKEZNVCwgLi4uKSBkYmdwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorCisKKyNpZiBkZWZpbmVkKF9fS0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIGtlbnRlcihGTVQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikga2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRUZJTEVTX0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChjYWNoZWZpbGVzX2RlYnVnICYgQ0FDSEVGSUxFU19ERUJVR19LRU5URVIpCVwKKwkJa2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKGNhY2hlZmlsZXNfZGVidWcgJiBDQUNIRUZJTEVTX0RFQlVHX0tMRUFWRSkJXAorCQlrbGVhdmUoRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoY2FjaGVmaWxlc19kZWJ1ZyAmIENBQ0hFRklMRVNfREVCVUdfS0RFQlVHKQlcCisJCWtkZWJ1ZyhGTVQsICMjX19WQV9BUkdTX18pOwkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgX2VudGVyKEZNVCwgLi4uKSBfZGJwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBfZGJwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKyNpZiAxIC8qIGRlZmluZWQoX19LREVCVUdBTEwpICovCisKKyNkZWZpbmUgQVNTRVJUKFgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KCEoWCkpKSB7CQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChYKSBPUCAoWSkpKSkgewkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJcHJpbnRrKEtFUk5fRVJSICIlbHggIiAjT1AgIiAlbHggaXMgZmFsc2VcbiIsCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoWCksICh1bnNpZ25lZCBsb25nKShZKSk7CQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRihDLCBYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSgoQykgJiYgIShYKSkpIHsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRkNNUChDLCBYLCBPUCwgWSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KChDKSAmJiAhKChYKSBPUCAoWSkpKSkgewkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlwcmludGsoS0VSTl9FUlIgIiVseCAiICNPUCAiICVseCBpcyBmYWxzZVxuIiwJCVwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShYKSwgKHVuc2lnbmVkIGxvbmcpKFkpKTsJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIEFTU0VSVChYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRDTVAoWCwgT1AsIFkpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMva2V5LmMgYi9mcy9jYWNoZWZpbGVzL2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjhiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2tleS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBLZXkgdG8gcGF0aG5hbWUgZW5jb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNhY2hlZmlsZXNfY2hhcm1hcFs2NF0gPQorCSIwMTIzNDU2Nzg5IgkJCS8qIDAgLSA5ICovCisJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgkvKiAxMCAtIDM1ICovCisJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgkvKiAzNiAtIDYxICovCisJIl8tIgkJCQkvKiA2MiAtIDYzICovCisJOworCitzdGF0aWMgY29uc3QgY2hhciBjYWNoZWZpbGVzX2ZpbGVjaGFybWFwWzI1Nl0gPSB7CisJLyogd2Ugc2tpcCBzcGFjZSBhbmQgdGFiIGFuZCBjb250cm9sIGNoYXJzICovCisJWzMzIC4uLiA0Nl0gPSAxLAkJLyogJyEnIC0+ICcuJyAqLworCS8qIHdlIHNraXAgJy8nIGFzIGl0J3Mgc2lnbmlmaWNhbnQgdG8gcGF0aHdhbGsgKi8KKwlbNDggLi4uIDEyN10gPSAxLAkJLyogJzAnIC0+ICd+JyAqLworfTsKKworLyoKKyAqIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgY29va2VkCisgKiAtIHRoZSByYXcga2V5IHNob3VsZCBpbmNsdWRlIHRoZSBsZW5ndGggaW4gdGhlIHR3byBieXRlcyBhdCB0aGUgZnJvbnQKKyAqIC0gdGhlIGtleSBtYXkgYmUgdXAgdG8gNTE0IGJ5dGVzIGluIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSBsZW5ndGggd29yZCkKKyAqICAgLSAiYmFzZTY0IiBlbmNvZGUgdGhlIHN0cmFuZ2Uga2V5cywgbWFwcGluZyAzIGJ5dGVzIG9mIHJhdyB0byBmb3VyIG9mCisgKiAgICAgY29va2VkCisgKiAgIC0gbmVlZCB0byBjdXQgdGhlIGNvb2tlZCBrZXkgaW50byAyNTIgY2hhciBsZW5ndGhzICgxODkgcmF3IGJ5dGVzKQorICovCitjaGFyICpjYWNoZWZpbGVzX2Nvb2tfa2V5KGNvbnN0IHU4ICpyYXcsIGludCBrZXlsZW4sIHVpbnQ4X3QgdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNzdW0sIGNoOworCXVuc2lnbmVkIGludCBhY2M7CisJY2hhciAqa2V5OworCWludCBsb29wLCBsZW4sIG1heCwgc2VnLCBtYXJrLCBwcmludDsKKworCV9lbnRlcigiLCVkIiwga2V5bGVuKTsKKworCUJVR19PTihrZXlsZW4gPCAyIHx8IGtleWxlbiA+IDUxNCk7CisKKwljc3VtID0gcmF3WzBdICsgcmF3WzFdOworCXByaW50ID0gMTsKKwlmb3IgKGxvb3AgPSAyOyBsb29wIDwga2V5bGVuOyBsb29wKyspIHsKKwkJY2ggPSByYXdbbG9vcF07CisJCWNzdW0gKz0gY2g7CisJCXByaW50ICY9IGNhY2hlZmlsZXNfZmlsZWNoYXJtYXBbY2hdOworCX0KKworCWlmIChwcmludCkgeworCQkvKiBpZiB0aGUgcGF0aCBpcyB1c2FibGUgQVNDSUksIHRoZW4gd2UgcmVuZGVyIGl0IGRpcmVjdGx5ICovCisJCW1heCA9IGtleWxlbiAtIDI7CisJCW1heCArPSAyOwkvKiB0d28gYmFzZTY0J2QgbGVuZ3RoIGNoYXJzIG9uIHRoZSBmcm9udCAqLworCQltYXggKz0gNTsJLyogQGNoZWNrc3VtL00gKi8KKwkJbWF4ICs9IDMgKiAyOwkvKiBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50IGRpdmlkZXJzICgiLi4uL00iKQorCQkJCSAqIGlzICgoNTE0ICsgMjUxKSAvIDI1MikgPSAzCisJCQkJICovCisJCW1heCArPSAxOwkvKiBOVUwgb24gZW5kICovCisJfSBlbHNlIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29va2VkIGtleSAqLworCQlrZXlsZW4gPSAoa2V5bGVuICsgMikgLyAzOworCisJCW1heCA9IGtleWxlbiAqIDQ7CisJCW1heCArPSA1OwkvKiBAY2hlY2tzdW0vTSAqLworCQltYXggKz0gMyAqIDI7CS8qIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnQgZGl2aWRlcnMgKCIuLi4vTSIpCisJCQkJICogaXMgKCg1MTQgKyAxODgpIC8gMTg5KSA9IDMKKwkJCQkgKi8KKwkJbWF4ICs9IDE7CS8qIE5VTCBvbiBlbmQgKi8KKwl9CisKKwltYXggKz0gMTsJLyogMm5kIE5VTCBvbiBlbmQgKi8KKworCV9kZWJ1ZygibWF4OiAlZCIsIG1heCk7CisKKwlrZXkgPSBrbWFsbG9jKG1heCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXkpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gMDsKKworCS8qIGJ1aWxkIHRoZSBjb29rZWQga2V5ICovCisJc3ByaW50ZihrZXksICJAJTAyeCVjKyIsICh1bnNpZ25lZCkgY3N1bSwgMCk7CisJbGVuID0gNTsKKwltYXJrID0gbGVuIC0gMTsKKworCWlmIChwcmludCkgeworCQlhY2MgPSAqKHVpbnQxNl90ICopIHJhdzsKKwkJcmF3ICs9IDI7CisKKwkJa2V5W2xlbiArIDFdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJYWNjID4+PSA2OworCQlrZXlbbGVuXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCWxlbiArPSAyOworCisJCXNlZyA9IDI1MDsKKwkJZm9yIChsb29wID0ga2V5bGVuOyBsb29wID4gMDsgbG9vcC0tKSB7CisJCQlpZiAoc2VnIDw9IDApIHsKKwkJCQlrZXlbbGVuKytdID0gJ1wwJzsKKwkJCQltYXJrID0gbGVuOworCQkJCWtleVtsZW4rK10gPSAnKyc7CisJCQkJc2VnID0gMjUyOworCQkJfQorCisJCQlrZXlbbGVuKytdID0gKnJhdysrOworCQkJQVNTRVJUKGxlbiA8IG1heCk7CisJCX0KKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYOgkJdHlwZSA9ICdJJzsJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRToJdHlwZSA9ICdEJzsJYnJlYWs7CisJCWRlZmF1bHQ6CQkJCXR5cGUgPSAnUyc7CWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc2VnID0gMjUyOworCQlmb3IgKGxvb3AgPSBrZXlsZW47IGxvb3AgPiAwOyBsb29wLS0pIHsKKwkJCWlmIChzZWcgPD0gMCkgeworCQkJCWtleVtsZW4rK10gPSAnXDAnOworCQkJCW1hcmsgPSBsZW47CisJCQkJa2V5W2xlbisrXSA9ICcrJzsKKwkJCQlzZWcgPSAyNTI7CisJCQl9CisKKwkJCWFjYyA9ICpyYXcrKzsKKwkJCWFjYyB8PSAqcmF3KysgPDwgODsKKwkJCWFjYyB8PSAqcmF3KysgPDwgMTY7CisKKwkJCV9kZWJ1ZygiYWNjOiAlMDZ4IiwgYWNjKTsKKworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCQlhY2MgPj49IDY7CisJCQlrZXlbbGVuKytdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJCWFjYyA+Pj0gNjsKKwkJCWtleVtsZW4rK10gPSBjYWNoZWZpbGVzX2NoYXJtYXBbYWNjICYgNjNdOworCQkJYWNjID4+PSA2OworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisKKwkJCUFTU0VSVChsZW4gPCBtYXgpOworCQl9CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoJCXR5cGUgPSAnSic7CWJyZWFrOworCQljYXNlIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEU6CXR5cGUgPSAnRSc7CWJyZWFrOworCQlkZWZhdWx0OgkJCQl0eXBlID0gJ1QnOwlicmVhazsKKwkJfQorCX0KKworCWtleVttYXJrXSA9IHR5cGU7CisJa2V5W2xlbisrXSA9IDA7CisJa2V5W2xlbl0gPSAwOworCisJX2xlYXZlKCIgPSAlcCAlZCIsIGtleSwgbGVuKTsKKwlyZXR1cm4ga2V5OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9tYWluLmMgYi9mcy9jYWNoZWZpbGVzL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZhOGNmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9tYWluLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qIE5ldHdvcmsgZmlsZXN5c3RlbSBjYWNoaW5nIGJhY2tlbmQgdG8gdXNlIGNhY2hlIGZpbGVzIG9uIGEgcHJlbW91bnRlZAorICogZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3Vuc2lnbmVkIGNhY2hlZmlsZXNfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGNhY2hlZmlsZXNfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FjaGVmaWxlc19kZWJ1ZywgIkNhY2hlRmlsZXMgZGVidWdnaW5nIG1hc2siKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3VudGVkLWZpbGVzeXN0ZW0gYmFzZWQgY2FjaGUiKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGNhY2hlZmlsZXNfZGV2ID0geworCS5taW5vcgk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZQk9ICJjYWNoZWZpbGVzIiwKKwkuZm9wcwk9ICZjYWNoZWZpbGVzX2RhZW1vbl9mb3BzLAorfTsKKworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19vYmplY3RfaW5pdF9vbmNlKHZvaWQgKl9vYmplY3QpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QgPSBfb2JqZWN0OworCisJbWVtc2V0KG9iamVjdCwgMCwgc2l6ZW9mKCpvYmplY3QpKTsKKwlzcGluX2xvY2tfaW5pdCgmb2JqZWN0LT53b3JrX2xvY2spOworfQorCisvKgorICogaW5pdGlhbGlzZSB0aGUgZnMgY2FjaGluZyBtb2R1bGUKKyAqLworc3RhdGljIGludCBfX2luaXQgY2FjaGVmaWxlc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9kZXY7CisKKwkvKiBjcmVhdGUgYW4gb2JqZWN0IGphciAqLworCXJldCA9IC1FTk9NRU07CisJY2FjaGVmaWxlc19vYmplY3RfamFyID0KKwkJa21lbV9jYWNoZV9jcmVhdGUoImNhY2hlZmlsZXNfb2JqZWN0X2phciIsCisJCQkJICBzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0KSwKKwkJCQkgIDAsCisJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICBjYWNoZWZpbGVzX29iamVjdF9pbml0X29uY2UpOworCWlmICghY2FjaGVmaWxlc19vYmplY3RfamFyKSB7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIkNhY2hlRmlsZXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBhbiBvYmplY3QgamFyXG4iKTsKKwkJZ290byBlcnJvcl9vYmplY3RfamFyOworCX0KKworCXJldCA9IGNhY2hlZmlsZXNfcHJvY19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHJvYzsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IExvYWRlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3Byb2M6CisJa21lbV9jYWNoZV9kZXN0cm95KGNhY2hlZmlsZXNfb2JqZWN0X2phcik7CitlcnJvcl9vYmplY3RfamFyOgorCW1pc2NfZGVyZWdpc3RlcigmY2FjaGVmaWxlc19kZXYpOworZXJyb3JfZGV2OgorCWtlcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyOiAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworZnNfaW5pdGNhbGwoY2FjaGVmaWxlc19pbml0KTsKKworLyoKKyAqIGNsZWFuIHVwIG9uIG1vZHVsZSByZW1vdmFsCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWNoZWZpbGVzX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJDYWNoZUZpbGVzOiBVbmxvYWRpbmdcbiIpOworCisJY2FjaGVmaWxlc19wcm9jX2NsZWFudXAoKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVmaWxlc19vYmplY3RfamFyKTsKKwltaXNjX2RlcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKK30KKworbW9kdWxlX2V4aXQoY2FjaGVmaWxlc19leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U4MThhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0wLDAgKzEsNzcxIEBACisvKiBDYWNoZUZpbGVzIHBhdGggd2Fsa2luZyBhbmQgcmVsYXRlZCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlY29yZCB0aGUgZmFjdCB0aGF0IGFuIG9iamVjdCBpcyBub3cgYWN0aXZlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKnhvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKipfcCwgKl9wYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCV9lbnRlcigiLCVwIiwgb2JqZWN0KTsKKwordHJ5X2FnYWluOgorCXdyaXRlX2xvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSkKKwkJQlVHKCk7CisKKwlkZW50cnkgPSBvYmplY3QtPmRlbnRyeTsKKwlfcCA9ICZjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisJd2hpbGUgKCpfcCkgeworCQlfcGFyZW50ID0gKl9wOworCQl4b2JqZWN0ID0gcmJfZW50cnkoX3BhcmVudCwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGFjdGl2ZV9ub2RlKTsKKworCQlBU1NFUlQoeG9iamVjdCAhPSBvYmplY3QpOworCisJCWlmICh4b2JqZWN0LT5kZW50cnkgPiBkZW50cnkpCisJCQlfcCA9ICYoKl9wKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoeG9iamVjdC0+ZGVudHJ5IDwgZGVudHJ5KQorCQkJX3AgPSAmKCpfcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlnb3RvIHdhaXRfZm9yX29sZF9vYmplY3Q7CisJfQorCisJcmJfbGlua19ub2RlKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCBfcGFyZW50LCBfcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCAmY2FjaGUtPmFjdGl2ZV9ub2Rlcyk7CisKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisJX2xlYXZlKCIiKTsKKwlyZXR1cm47CisKKwkvKiBhbiBvbGQgb2JqZWN0IGZyb20gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiBpcyBob2dnaW5nIHRoZSBzbG90IC0gd2UKKwkgKiBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGRlc3Ryb3llZCAqLword2FpdF9mb3Jfb2xkX29iamVjdDoKKwlpZiAoeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBFcnJvcjoiCisJCSAgICAgICAiIFVuZXhwZWN0ZWQgb2JqZWN0IGNvbGxpc2lvblxuIik7CisJCXByaW50ayhLRVJOX0VSUiAieG9iamVjdDogT0JKJXhcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b2Jqc3RhdGU9JXNcbiIsCisJCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZV0pOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpmbGFncz0lbHhcbiIsIHhvYmplY3QtPmZzY2FjaGUuZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpldmVudD0lbHggWyVseF1cbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmV2ZW50cywgeG9iamVjdC0+ZnNjYWNoZS5ldmVudF9tYXNrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b3BzPSV1IGlucD0ldSBleGM9JXVcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fb3BzLCB4b2JqZWN0LT5mc2NhY2hlLm5faW5fcHJvZ3Jlc3MsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fZXhjbHVzaXZlKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4Y29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+cGFyZW50LAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhwYXJlbnQ9JXBcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCXByaW50ayhLRVJOX0VSUiAib2JqZWN0OiBPQkoleFxuIiwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiY29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZSwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPnBhcmVudCwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5mbGFncyk7CisJCXByaW50ayhLRVJOX0VSUiAicGFyZW50PSVwXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCUJVRygpOworCX0KKwlhdG9taWNfaW5jKCZ4b2JqZWN0LT51c2FnZSk7CisJd3JpdGVfdW5sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX2RlYnVnKCI+Pj4gd2FpdCIpOworCXdhaXRfb25fYml0KCZ4b2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkgICAgY2FjaGVmaWxlc193YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCV9kZWJ1ZygiPDw8IHdhaXRlZCIpOworCisJY2FjaGUtPmNhY2hlLm9wcy0+cHV0X29iamVjdCgmeG9iamVjdC0+ZnNjYWNoZSk7CisJZ290byB0cnlfYWdhaW47Cit9CisKKy8qCisgKiBkZWxldGUgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIGNhY2hlCisgKiAtIGZpbGUgYmFja2VkIG9iamVjdHMgYXJlIHVubGlua2VkCisgKiAtIGRpcmVjdG9yeSBiYWNrZWQgb2JqZWN0cyBhcmUgc3R1ZmZlZCBpbnRvIHRoZSBncmF2ZXlhcmQgZm9yIHVzZXJzcGFjZSB0bworICogICBkZWxldGUKKyAqIC0gdW5sb2NrcyB0aGUgZGlyZWN0b3J5IG11dGV4CisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpyZXApCit7CisJc3RydWN0IGRlbnRyeSAqZ3JhdmUsICp0cmFwOworCWNoYXIgbmJ1ZmZlcls4ICsgOCArIDFdOworCWludCByZXQ7CisKKwlfZW50ZXIoIiwnJSouKnMnLCclKi4qcyciLAorCSAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwKKwkgICAgICAgcmVwLT5kX25hbWUubGVuLCByZXAtPmRfbmFtZS5sZW4sIHJlcC0+ZF9uYW1lLm5hbWUpOworCisJLyogbm9uLWRpcmVjdG9yaWVzIGNhbiBqdXN0IGJlIHVubGlua2VkICovCisJaWYgKCFTX0lTRElSKHJlcC0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQlfZGVidWcoInVubGluayBzdGFsZSBvYmplY3QiKTsKKwkJcmV0ID0gdmZzX3VubGluayhkaXItPmRfaW5vZGUsIHJlcCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJCWlmIChyZXQgPT0gLUVJTykKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJVbmxpbmsgZmFpbGVkIik7CisKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZGlyZWN0b3JpZXMgaGF2ZSB0byBiZSBtb3ZlZCB0byB0aGUgZ3JhdmV5YXJkICovCisJX2RlYnVnKCJtb3ZlIHN0YWxlIG9iamVjdCB0byBncmF2ZXlhcmQiKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKK3RyeV9hZ2FpbjoKKwkvKiBmaXJzdCBzdGVwIGlzIHRvIG1ha2UgdXAgYSBncmF2ZSBkZW50cnkgaW4gdGhlIGdyYXZleWFyZCAqLworCXNwcmludGYobmJ1ZmZlciwgIiUwOHglMDh4IiwKKwkJKHVpbnQzMl90KSBnZXRfc2Vjb25kcygpLAorCQkodWludDMyX3QpIGF0b21pY19pbmNfcmV0dXJuKCZjYWNoZS0+Z3JhdmVjb3VudGVyKSk7CisKKwkvKiBkbyB0aGUgbXVsdGl3YXkgbG9jayBtYWdpYyAqLworCXRyYXAgPSBsb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCisJLyogZG8gc29tZSBjaGVja3MgYmVmb3JlIGdldHRpbmcgdGhlIGdyYXZlIGRlbnRyeSAqLworCWlmIChyZXAtPmRfcGFyZW50ICE9IGRpcikgeworCQkvKiB0aGUgZW50cnkgd2FzIHByb2JhYmx5IGN1bGxlZCB3aGVuIHdlIGRyb3BwZWQgdGhlIHBhcmVudCBkaXIKKwkJICogbG9jayAqLworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCV9sZWF2ZSgiID0gMCBbY3VsbGVkP10iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFTX0lTRElSKGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiR3JhdmV5YXJkIG5vIGxvbmdlciBhIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodHJhcCA9PSByZXApIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkX21vdW50cG9pbnQocmVwKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGNhY2hlIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWdyYXZlID0gbG9va3VwX29uZV9sZW4obmJ1ZmZlciwgY2FjaGUtPmdyYXZleWFyZCwgc3RybGVuKG5idWZmZXIpKTsKKwlpZiAoSVNfRVJSKGdyYXZlKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisKKwkJaWYgKFBUUl9FUlIoZ3JhdmUpID09IC1FTk9NRU0pIHsKKwkJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGVycm9yICVsZCIsCisJCQkJICAgIFBUUl9FUlIoZ3JhdmUpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGdyYXZlLT5kX2lub2RlKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWdyYXZlID0gTlVMTDsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmIChkX21vdW50cG9pbnQoZ3JhdmUpKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGdyYXZleWFyZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB0YXJnZXQgc2hvdWxkIG5vdCBiZSBhbiBhbmNlc3RvciBvZiBzb3VyY2UgKi8KKwlpZiAodHJhcCA9PSBncmF2ZSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWRwdXQoZ3JhdmUpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGF0dGVtcHQgdGhlIHJlbmFtZSAqLworCXJldCA9IHZmc19yZW5hbWUoZGlyLT5kX2lub2RlLCByZXAsIGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUsIGdyYXZlKTsKKwlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FTk9NRU0pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJSZW5hbWUgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCWRwdXQoZ3JhdmUpOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kZWxldGVfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCByZXQ7CisKKwlfZW50ZXIoIix7JXB9Iiwgb2JqZWN0LT5kZW50cnkpOworCisJQVNTRVJUKG9iamVjdC0+ZGVudHJ5KTsKKwlBU1NFUlQob2JqZWN0LT5kZW50cnktPmRfaW5vZGUpOworCUFTU0VSVChvYmplY3QtPmRlbnRyeS0+ZF9wYXJlbnQpOworCisJZGlyID0gZGdldF9wYXJlbnQob2JqZWN0LT5kZW50cnkpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIG9iamVjdC0+ZGVudHJ5KTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FsayBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0IHRvIHRoZSBjaGlsZCBvYmplY3QgdGhyb3VnaCB0aGUgYmFja2luZworICogZmlsZXN5c3RlbSwgY3JlYXRpbmcgZGlyZWN0b3JpZXMgYXMgd2UgZ28KKyAqLworaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpuZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJldCwgbmxlbjsKKworCV9lbnRlcigieyVwfSwsJXMsIiwgcGFyZW50LT5kZW50cnksIGtleSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihwYXJlbnQtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlBU1NFUlQocGFyZW50LT5kZW50cnkpOworCUFTU0VSVChwYXJlbnQtPmRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIShTX0lTRElSKHBhcmVudC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSkgeworCQkvLyBUT0RPOiBjb252ZXJ0IGZpbGUgdG8gZGlyCisJCV9sZWF2ZSgibG9va2luZyB1cCBpbiBub25lIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJZGlyID0gZGdldChwYXJlbnQtPmRlbnRyeSk7CisKK2FkdmFuY2U6CisJLyogYXR0ZW1wdCB0byB0cmFuc2l0IHRoZSBmaXJzdCBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJbmFtZSA9IGtleTsKKwlubGVuID0gc3RybGVuKGtleSk7CisKKwkvKiBrZXkgZW5kcyBpbiBhIGRvdWJsZSBOVUwgKi8KKwlrZXkgPSBrZXkgKyBubGVuICsgMTsKKwlpZiAoISprZXkpCisJCWtleSA9IE5VTEw7CisKK2xvb2t1cF9hZ2FpbjoKKwkvKiBzZWFyY2ggdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZWxlbWVudCBuYW1lICovCisJX2RlYnVnKCJsb29rdXAgJyVzJyIsIG5hbWUpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKworCXN0YXJ0ID0gamlmZmllczsKKwluZXh0ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGlyLCBubGVuKTsKKwljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtLCBzdGFydCk7CisJaWYgKElTX0VSUihuZXh0KSkKKwkJZ290byBsb29rdXBfZXJyb3I7CisKKwlfZGVidWcoIm5leHQgLT4gJXAgJXMiLCBuZXh0LCBuZXh0LT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJaWYgKCFrZXkpCisJCW9iamVjdC0+bmV3ID0gIW5leHQtPmRfaW5vZGU7CisKKwkvKiBpZiB0aGlzIGVsZW1lbnQgb2YgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgbG9va3VwIHBoYXNlCisJICogZmFpbGVkLCBhbmQgd2UgY2FuIHJlbGVhc2UgYW55IHJlYWRlcnMgaW4gdGhlIGNlcnRhaW4ga25vd2xlZGdlIHRoYXQKKwkgKiB0aGVyZSdzIG5vdGhpbmcgZm9yIHRoZW0gdG8gYWN0dWFsbHkgcmVhZCAqLworCWlmICghbmV4dC0+ZF9pbm9kZSkKKwkJZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCZvYmplY3QtPmZzY2FjaGUpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdCBpZiBpdCdzIG5lZ2F0aXZlICovCisJaWYgKGtleSB8fCBvYmplY3QtPnR5cGUgPT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQkvKiBpbmRleCBvYmplY3RzIGFuZCBpbnRlcnZlbmluZyB0cmVlIGxldmVscyBtdXN0IGJlIHN1YmRpcnMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX21rZGlyKGRpci0+ZF9pbm9kZSwgbmV4dCwgMCk7CisJCQljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19ta2Rpcl9oaXN0b2dyYW0sIHN0YXJ0KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gY3JlYXRlX2Vycm9yOworCisJCQlBU1NFUlQobmV4dC0+ZF9pbm9kZSk7CisKKwkJCV9kZWJ1ZygibWtkaXIgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpKSB7CisJCQlrZXJyb3IoImlub2RlICVsdSBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkJICAgICAgIG5leHQtPmRfaW5vZGUtPmlfaW5vKTsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogbm9uLWluZGV4IG9iamVjdHMgc3RhcnQgb3V0IGxpZmUgYXMgZmlsZXMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX2NyZWF0ZShkaXItPmRfaW5vZGUsIG5leHQsIFNfSUZSRUcsIE5VTEwpOworCQkJY2FjaGVmaWxlc19oaXN0KGNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbSwgc3RhcnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBjcmVhdGVfZXJyb3I7CisKKwkJCUFTU0VSVChuZXh0LT5kX2lub2RlKTsKKworCQkJX2RlYnVnKCJjcmVhdGUgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpICYmCisJCQkgICAhU19JU1JFRyhuZXh0LT5kX2lub2RlLT5pX21vZGUpCisJCQkgICApIHsKKwkJCWtlcnJvcigiaW5vZGUgJWx1IGlzIG5vdCBhIGZpbGUgb3IgZGlyZWN0b3J5IiwKKwkJCSAgICAgICBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBuZXh0IGNvbXBvbmVudCAqLworCWlmIChrZXkpIHsKKwkJX2RlYnVnKCJhZHZhbmNlIik7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dChkaXIpOworCQlkaXIgPSBuZXh0OworCQluZXh0ID0gTlVMTDsKKwkJZ290byBhZHZhbmNlOworCX0KKworCS8qIHdlJ3ZlIGZvdW5kIHRoZSBvYmplY3Qgd2Ugd2VyZSBsb29raW5nIGZvciAqLworCW9iamVjdC0+ZGVudHJ5ID0gbmV4dDsKKworCS8qIGlmIHdlJ3ZlIGZvdW5kIHRoYXQgdGhlIHRlcm1pbmFsIG9iamVjdCBleGlzdHMsIHRoZW4gd2UgbmVlZCB0bworCSAqIGNoZWNrIGl0cyBhdHRyaWJ1dGVzIGFuZCBkZWxldGUgaXQgaWYgaXQncyBvdXQgb2YgZGF0ZSAqLworCWlmICghb2JqZWN0LT5uZXcpIHsKKwkJX2RlYnVnKCJ2YWxpZGF0ZSAnJSouKnMnIiwKKwkJICAgICAgIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5uYW1lKTsKKworCQlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0ID09IC1FU1RBTEUpIHsKKwkJCS8qIGRlbGV0ZSB0aGUgb2JqZWN0ICh0aGUgZGVsZXRlciBkcm9wcyB0aGUgZGlyZWN0b3J5CisJCQkgKiBtdXRleCkgKi8KKwkJCW9iamVjdC0+ZGVudHJ5ID0gTlVMTDsKKworCQkJcmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgZGlyLCBuZXh0KTsKKwkJCWRwdXQobmV4dCk7CisJCQluZXh0ID0gTlVMTDsKKworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBkZWxldGVfZXJyb3I7CisKKwkJCV9kZWJ1ZygicmVkbyBsb29rdXAiKTsKKwkJCWdvdG8gbG9va3VwX2FnYWluOworCQl9CisJfQorCisJLyogbm90ZSB0aGF0IHdlJ3JlIG5vdyB1c2luZyB0aGlzIG9iamVjdCAqLworCWNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKGNhY2hlLCBvYmplY3QpOworCisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGlyKTsKKwlkaXIgPSBOVUxMOworCisJX2RlYnVnKCI9PT0gT0JUQUlORURfT0JKRUNUID09PSIpOworCisJaWYgKG9iamVjdC0+bmV3KSB7CisJCS8qIGF0dGFjaCBkYXRhIHRvIGEgbmV3bHkgY29uc3RydWN0ZWQgdGVybWluYWwgb2JqZWN0ICovCisJCXJldCA9IGNhY2hlZmlsZXNfc2V0X29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2hlY2tfZXJyb3I7CisJfSBlbHNlIHsKKwkJLyogYWx3YXlzIHVwZGF0ZSB0aGUgYXRpbWUgb24gYW4gb2JqZWN0IHdlJ3ZlIGp1c3QgbG9va2VkIHVwCisJCSAqICh0aGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBjdWxsaW5nLCBhbmQgYXRpbWVzIGFyZSBvbmx5CisJCSAqIHVwZGF0ZWQgYnkgcmVhZCwgd3JpdGUgYW5kIHJlYWRkaXIgYnV0IG5vdCBsb29rdXAgb3IKKwkJICogb3BlbikgKi8KKwkJdG91Y2hfYXRpbWUoY2FjaGUtPm1udCwgbmV4dCk7CisJfQorCisJLyogb3BlbiBhIGZpbGUgaW50ZXJmYWNlIG9udG8gYSBkYXRhIGZpbGUgKi8KKwlpZiAob2JqZWN0LT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpIHsKKwkJaWYgKFNfSVNSRUcob2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHM7CisKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWFvcHMgPSBvYmplY3QtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLT5hX29wczsKKwkJCWlmICghYW9wcy0+Ym1hcCkKKwkJCQlnb3RvIGNoZWNrX2Vycm9yOworCisJCQlvYmplY3QtPmJhY2tlciA9IG9iamVjdC0+ZGVudHJ5OworCQl9IGVsc2UgeworCQkJQlVHKCk7IC8vIFRPRE86IG9wZW4gZmlsZSBpbiBkYXRhLWNsYXNzIHN1YmRpcgorCQl9CisJfQorCisJb2JqZWN0LT5uZXcgPSAwOworCWZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCZvYmplY3QtPmZzY2FjaGUpOworCisJX2xlYXZlKCIgPSAwIFslbHVdIiwgb2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gMDsKKworY3JlYXRlX2Vycm9yOgorCV9kZWJ1ZygiY3JlYXRlIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJDcmVhdGUvbWtkaXIgZmFpbGVkIik7CisJZ290byBlcnJvcjsKKworY2hlY2tfZXJyb3I6CisJX2RlYnVnKCJjaGVjayBlcnJvciAlZCIsIHJldCk7CisJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwlyYl9lcmFzZSgmb2JqZWN0LT5hY3RpdmVfbm9kZSwgJmNhY2hlLT5hY3RpdmVfbm9kZXMpOworCWNsZWFyX2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKTsKKwl3YWtlX3VwX2JpdCgmb2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFKTsKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisJZ290byBlcnJvcl9vdXQ7CisKK2RlbGV0ZV9lcnJvcjoKKwlfZGVidWcoImRlbGV0ZSBlcnJvciAlZCIsIHJldCk7CisJZ290byBlcnJvcl9vdXQyOworCitsb29rdXBfZXJyb3I6CisJX2RlYnVnKCJsb29rdXAgZXJyb3IgJWxkIiwgUFRSX0VSUihuZXh0KSk7CisJcmV0ID0gUFRSX0VSUihuZXh0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJMb29rdXAgZmFpbGVkIik7CisJbmV4dCA9IE5VTEw7CitlcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChuZXh0KTsKK2Vycm9yX291dDI6CisJZHB1dChkaXIpOworZXJyb3Jfb3V0OgorCWlmIChyZXQgPT0gLUVOT1NQQykKKwkJcmV0ID0gLUVOT0JVRlM7CisKKwlfbGVhdmUoIiA9IGVycm9yICVkIiwgLXJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdldCBhIHN1YmRpcmVjdG9yeQorICovCitzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJCWNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqc3ViZGlyOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCwlcyIsIGRpcm5hbWUpOworCisJLyogc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGVsZW1lbnQgbmFtZSAqLworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJc3ViZGlyID0gbG9va3VwX29uZV9sZW4oZGlybmFtZSwgZGlyLCBzdHJsZW4oZGlybmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHN1YmRpcikpIHsKKwkJaWYgKFBUUl9FUlIoc3ViZGlyKSA9PSAtRU5PTUVNKQorCQkJZ290byBub21lbV9kX2FsbG9jOworCQlnb3RvIGxvb2t1cF9lcnJvcjsKKwl9CisKKwlfZGVidWcoInN1YmRpciAtPiAlcCAlcyIsCisJICAgICAgIHN1YmRpciwgc3ViZGlyLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIHN1YmRpciBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCAqLworCWlmICghc3ViZGlyLT5kX2lub2RlKSB7CisJCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAxLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG1rZGlyX2Vycm9yOworCisJCV9kZWJ1ZygiYXR0ZW1wdCBta2RpciIpOworCisJCXJldCA9IHZmc19ta2RpcihkaXItPmRfaW5vZGUsIHN1YmRpciwgMDcwMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBta2Rpcl9lcnJvcjsKKworCQlBU1NFUlQoc3ViZGlyLT5kX2lub2RlKTsKKworCQlfZGVidWcoIm1rZGlyIC0+ICVweyVwe2lubz0lbHV9fSIsCisJCSAgICAgICBzdWJkaXIsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwkvKiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ViZGlyIGlzIGEgZGlyZWN0b3J5ICovCisJQVNTRVJUKHN1YmRpci0+ZF9pbm9kZSk7CisKKwlpZiAoIVNfSVNESVIoc3ViZGlyLT5kX2lub2RlLT5pX21vZGUpKSB7CisJCWtlcnJvcigiJXMgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGlybmFtZSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gY2hlY2tfZXJyb3I7CisJfQorCisJcmV0ID0gLUVQRVJNOworCWlmICghc3ViZGlyLT5kX2lub2RlLT5pX29wIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmdldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5ta2RpciB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5jcmVhdGUgfHwKKwkgICAgIXN1YmRpci0+ZF9pbm9kZS0+aV9vcC0+cmVuYW1lIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnJtZGlyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnVubGluaykKKwkJZ290byBjaGVja19lcnJvcjsKKworCV9sZWF2ZSgiID0gWyVsdV0iLCBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gc3ViZGlyOworCitjaGVja19lcnJvcjoKKwlkcHV0KHN1YmRpcik7CisJX2xlYXZlKCIgPSAlZCBbY2hlY2tdIiwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitta2Rpcl9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChzdWJkaXIpOworCWtlcnJvcigibWtkaXIgJXMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBkaXJuYW1lLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7CisKK2xvb2t1cF9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJcmV0ID0gUFRSX0VSUihzdWJkaXIpOworCWtlcnJvcigiTG9va3VwICVzIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZGlybmFtZSwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitub21lbV9kX2FsbG9jOgorCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworLyoKKyAqIGZpbmQgb3V0IGlmIGFuIG9iamVjdCBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGlmIGZpbmRzIG9iamVjdCBhbmQgaXQncyBub3QgaW4gdXNlOgorICogICAtIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgYW5kIGEgcmVmZXJlbmNlIG9uIGl0CisgKiAgIC0gcmV0dXJucyB3aXRoIHRoZSBkaXJlY3RvcnkgbG9ja2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2NoZWNrX2FjdGl2ZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJCQkJICAgICAgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKl9uOworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCByZXQ7CisKKwkvL19lbnRlcigiLCUqLipzLywlcyIsCisJLy8gICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCS8qIGxvb2sgdXAgdGhlIHZpY3RpbSAqLworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIDEpOworCisJc3RhcnQgPSBqaWZmaWVzOworCXZpY3RpbSA9IGxvb2t1cF9vbmVfbGVuKGZpbGVuYW1lLCBkaXIsIHN0cmxlbihmaWxlbmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCWdvdG8gbG9va3VwX2Vycm9yOworCisJLy9fZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJLy8gICAgICAgdmljdGltLCB2aWN0aW0tPmRfaW5vZGUgPyAicG9zaXRpdmUiIDogIm5lZ2F0aXZlIik7CisKKwkvKiBpZiB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciB0aGVyZSB0aGVuIHdlIHByb2JhYmx5IHJldGlyZWQgdGhlIG9iamVjdAorCSAqIGF0IHRoZSBuZXRmcydzIHJlcXVlc3Qgd2hpbHN0IHRoZSBjdWxsIHdhcyBpbiBwcm9ncmVzcworCSAqLworCWlmICghdmljdGltLT5kX2lub2RlKSB7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dCh2aWN0aW0pOworCQlfbGVhdmUoIiA9IC1FTk9FTlQgW2Fic2VudF0iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHVzaW5nIHRoaXMgb2JqZWN0ICovCisJcmVhZF9sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX24gPSBjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisKKwl3aGlsZSAoX24pIHsKKwkJb2JqZWN0ID0gcmJfZW50cnkoX24sIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgYWN0aXZlX25vZGUpOworCisJCWlmIChvYmplY3QtPmRlbnRyeSA+IHZpY3RpbSkKKwkJCV9uID0gX24tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9iamVjdC0+ZGVudHJ5IDwgdmljdGltKQorCQkJX24gPSBfbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWdvdG8gb2JqZWN0X2luX3VzZTsKKwl9CisKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKworCS8vX2xlYXZlKCIgPSAlcCIsIHZpY3RpbSk7CisJcmV0dXJuIHZpY3RpbTsKKworb2JqZWN0X2luX3VzZToKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dCh2aWN0aW0pOworCS8vX2xlYXZlKCIgPSAtRUJVU1kgW2luIHVzZV0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCitsb29rdXBfZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IFBUUl9FUlIodmljdGltKTsKKwlpZiAocmV0ID09IC1FTk9FTlQpIHsKKwkJLyogZmlsZSBvciBkaXIgbm93IGFic2VudCAtIHByb2JhYmx5IHJldGlyZWQgYnkgbmV0ZnMgKi8KKwkJX2xlYXZlKCIgPSAtRVNUQUxFIFthYnNlbnRdIik7CisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCX0KKworCWlmIChyZXQgPT0gLUVJTykgeworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGZhaWxlZCIpOworCX0gZWxzZSBpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qCisgKiBjdWxsIGFuIG9iamVjdCBpZiBpdCdzIG5vdCBpbiB1c2UKKyAqIC0gY2FsbGVkIG9ubHkgYnkgY2FjaGUgbWFuYWdlciBkYWVtb24KKyAqLworaW50IGNhY2hlZmlsZXNfY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwlpbnQgcmV0OworCisJX2VudGVyKCIsJSouKnMvLCVzIiwKKwkgICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCXZpY3RpbSA9IGNhY2hlZmlsZXNfY2hlY2tfYWN0aXZlKGNhY2hlLCBkaXIsIGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCXJldHVybiBQVFJfRVJSKHZpY3RpbSk7CisKKwlfZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJICAgICAgIHZpY3RpbSwgdmljdGltLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogb2theS4uLiB0aGUgdmljdGltIGlzIG5vdCBiZWluZyB1c2VkIHNvIHdlIGNhbiBjdWxsIGl0CisJICogLSBzdGFydCBieSBtYXJraW5nIGl0IGFzIHN0YWxlCisJICovCisJX2RlYnVnKCJ2aWN0aW0gaXMgY3VsbGFibGUiKTsKKworCXJldCA9IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihjYWNoZSwgdmljdGltKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisKKwkvKiAgYWN0dWFsbHkgcmVtb3ZlIHRoZSB2aWN0aW0gKGRyb3BzIHRoZSBkaXIgbXV0ZXgpICovCisJX2RlYnVnKCJidXJ5Iik7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIHZpY3RpbSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlkcHV0KHZpY3RpbSk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3VubG9jazoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CitlcnJvcjoKKwlkcHV0KHZpY3RpbSk7CisJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCS8qIGZpbGUgb3IgZGlyIG5vdyBhYnNlbnQgLSBwcm9iYWJseSByZXRpcmVkIGJ5IG5ldGZzICovCisJCV9sZWF2ZSgiID0gLUVTVEFMRSBbYWJzZW50XSIpOworCQlyZXR1cm4gLUVTVEFMRTsKKwl9CisKKwlpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBmaW5kIG91dCBpZiBhbiBvYmplY3QgaXMgaW4gdXNlIG9yIG5vdAorICogLSBjYWxsZWQgb25seSBieSBjYWNoZSBtYW5hZ2VyIGRhZW1vbgorICogLSByZXR1cm5zIC1FQlVTWSBvciAwIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGluIHVzZSBvciBub3QKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKworCS8vX2VudGVyKCIsJSouKnMvLCVzIiwKKwkvLyAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwgZmlsZW5hbWUpOworCisJdmljdGltID0gY2FjaGVmaWxlc19jaGVja19hY3RpdmUoY2FjaGUsIGRpciwgZmlsZW5hbWUpOworCWlmIChJU19FUlIodmljdGltKSkKKwkJcmV0dXJuIFBUUl9FUlIodmljdGltKTsKKworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlkcHV0KHZpY3RpbSk7CisJLy9fbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvcHJvYy5jIGIvZnMvY2FjaGVmaWxlcy9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjZDMzOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvcHJvYy5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiBDYWNoZUZpbGVzIHN0YXRpc3RpY3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGNhY2hlZmlsZXNfbG9va3VwX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX2NyZWF0ZV9oaXN0b2dyYW1bSFpdOworCisvKgorICogZGlzcGxheSB0aGUgbGF0ZW5jeSBoaXN0b2dyYW0KKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXVuc2lnbmVkIHgsIHksIHosIHQ7CisKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKSB2KSB7CisJY2FzZSAxOgorCQlzZXFfcHV0cyhtLCAiSklGUyAgU0VDUyAgTE9PS1VQUyAgIE1LRElSUyAgICBDUkVBVEVTXG4iKTsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOgorCQlzZXFfcHV0cyhtLCAiPT09PT0gPT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpbmRleCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKwkJeCA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW1baW5kZXhdKTsKKwkJeSA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtpbmRleF0pOworCQl6ID0gYXRvbWljX3JlYWQoJmNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbVtpbmRleF0pOworCQlpZiAoeCA9PSAwICYmIHkgPT0gMCAmJiB6ID09IDApCisJCQlyZXR1cm4gMDsKKworCQl0ID0gKGluZGV4ICogMTAwMCkgLyBIWjsKKworCQlzZXFfcHJpbnRmKG0sICIlNGx1ICAwLiUwM3UgJTl1ICU5dSAlOXVcbiIsIGluZGV4LCB0LCB4LCB5LCB6KTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogc2V0IHVwIHRoZSBpdGVyYXRvciB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGZpcnN0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpfcG9zKQoreworCWlmICgodW5zaWduZWQgbG9uZyBsb25nKSpfcG9zID49IEhaICsgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCpfcG9zID09IDApCisJCSpfcG9zID0gMTsKKwlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykgKl9wb3M7Cit9CisKKy8qCisgKiBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zID4gSFogKyAyID8KKwkJTlVMTCA6ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpwb3M7Cit9CisKKy8qCisgKiBjbGVhbiB1cCBhZnRlciByZWFkaW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNhY2hlZmlsZXNfaGlzdG9ncmFtX29wcyA9IHsKKwkuc3RhcnQJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RhcnQsCisJLnN0b3AJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RvcCwKKwkubmV4dAkJPSBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9uZXh0LAorCS5zaG93CQk9IGNhY2hlZmlsZXNfaGlzdG9ncmFtX3Nob3csCit9OworCisvKgorICogb3BlbiAiL3Byb2MvZnMvY2FjaGVmaWxlcy9YWFgiIHdoaWNoIHByb3ZpZGUgc3RhdGlzdGljcyBzdW1tYXJpZXMKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19oaXN0b2dyYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIC9wcm9jL2ZzL2NhY2hlZmlsZXMvIGRpcmVjdG9yeQorICovCitpbnQgX19pbml0IGNhY2hlZmlsZXNfcHJvY19pbml0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWlmICghcHJvY19ta2RpcigiZnMvY2FjaGVmaWxlcyIsIE5VTEwpKQorCQlnb3RvIGVycm9yX2RpcjsKKworCWlmICghcHJvY19jcmVhdGUoImZzL2NhY2hlZmlsZXMvaGlzdG9ncmFtIiwgU19JRlJFRyB8IDA0NDQsIE5VTEwsCisJCQkgJmNhY2hlZmlsZXNfaGlzdG9ncmFtX2ZvcHMpKQorCQlnb3RvIGVycm9yX2hpc3RvZ3JhbTsKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitlcnJvcl9oaXN0b2dyYW06CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2NhY2hlZmlsZXMiLCBOVUxMKTsKK2Vycm9yX2RpcjoKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIGNsZWFuIHVwIHRoZSAvcHJvYy9mcy9jYWNoZWZpbGVzLyBkaXJlY3RvcnkKKyAqLwordm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3Jkd3IuYyBiL2ZzL2NhY2hlZmlsZXMvcmR3ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTc4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwpAQCAtMCwwICsxLDg3OSBAQAorLyogU3RvcmFnZSBvYmplY3QgcmVhZC93cml0ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGRldGVjdCB3YWtlIHVwIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHVubG9ja2luZyBvZiBwYWdlcyBpbiB3aGljaCB3ZSdyZQorICogaW50ZXJlc3RlZAorICogLSB3ZSB1c2UgdGhpcyB0byBkZXRlY3QgcmVhZCBjb21wbGV0aW9uIG9mIGJhY2tpbmcgcGFnZXMKKyAqIC0gdGhlIGNhbGxlciBob2xkcyB0aGUgd2FpdHF1ZXVlIGxvY2sKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKKwkJCQkgIGludCBzeW5jLCB2b2lkICpfa2V5KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yID0KKwkJY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkLCBtb25pdG9yKTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXkgPSBfa2V5OworCXN0cnVjdCBwYWdlICpwYWdlID0gd2FpdC0+cHJpdmF0ZTsKKworCUFTU0VSVChrZXkpOworCisJX2VudGVyKCJ7JWx1fSwldSwlZCx7JXAsJXV9IiwKKwkgICAgICAgbW9uaXRvci0+bmV0ZnNfcGFnZS0+aW5kZXgsIG1vZGUsIHN5bmMsCisJICAgICAgIGtleS0+ZmxhZ3MsIGtleS0+Yml0X25yKTsKKworCWlmIChrZXktPmZsYWdzICE9ICZwYWdlLT5mbGFncyB8fAorCSAgICBrZXktPmJpdF9uciAhPSBQR19sb2NrZWQpCisJCXJldHVybiAwOworCisJX2RlYnVnKCItLS0gbW9uaXRvciAlcCAlbHggLS0tIiwgcGFnZSwgcGFnZS0+ZmxhZ3MpOworCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkKKwkJZHVtcF9zdGFjaygpOworCisJLyogcmVtb3ZlIGZyb20gdGhlIHdhaXRxdWV1ZSAqLworCWxpc3RfZGVsKCZ3YWl0LT50YXNrX2xpc3QpOworCisJLyogbW92ZSBvbnRvIHRoZSBhY3Rpb24gbGlzdCBhbmQgcXVldWUgZm9yIEZTLUNhY2hlIHRocmVhZCBwb29sICovCisJQVNTRVJUKG1vbml0b3ItPm9wKTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihtb25pdG9yLT5vcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT53b3JrX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1vbml0b3ItPm9wX2xpbmssICZtb25pdG9yLT5vcC0+dG9fZG8pOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwlmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNvcHkgZGF0YSBmcm9tIGJhY2tpbmcgcGFnZXMgdG8gbmV0ZnMgcGFnZXMgdG8gY29tcGxldGUgYSByZWFkIG9wZXJhdGlvbgorICogLSBkcml2ZW4gYnkgRlMtQ2FjaGUncyB0aHJlYWQgcG9vbAorICovCitzdGF0aWMgdm9pZCBjYWNoZWZpbGVzX3JlYWRfY29waWVyKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqX29wKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3A7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgZXJyb3IsIG1heDsKKworCW9wID0gY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcCk7CisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7aW5vPSVsdX0iLCBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9pbm8pOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW1heCA9IDg7CisJc3Bpbl9sb2NrX2lycSgmb2JqZWN0LT53b3JrX2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKSB7CisJCW1vbml0b3IgPSBsaXN0X2VudHJ5KG9wLT50b19kby5uZXh0LAorCQkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQsIG9wX2xpbmspOworCQlsaXN0X2RlbCgmbW9uaXRvci0+b3BfbGluayk7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwkJX2RlYnVnKCItIGNvcHkgeyVsdX0iLCBtb25pdG9yLT5iYWNrX3BhZ2UtPmluZGV4KTsKKworCQllcnJvciA9IC1FSU87CisJCWlmIChQYWdlVXB0b2RhdGUobW9uaXRvci0+YmFja19wYWdlKSkgeworCQkJY29weV9oaWdocGFnZShtb25pdG9yLT5uZXRmc19wYWdlLCBtb25pdG9yLT5iYWNrX3BhZ2UpOworCisJCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgbW9uaXRvci0+bmV0ZnNfcGFnZSk7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG1vbml0b3ItPm9wLCAmcGFnZXZlYyk7CisJCQllcnJvciA9IDA7CisJCX0KKworCQlpZiAoZXJyb3IpCisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCQlvYmplY3QsCisJCQkJIlJlYWRwYWdlIGZhaWxlZCBvbiBiYWNraW5nIGZpbGUgJWx4IiwKKwkJCQkodW5zaWduZWQgbG9uZykgbW9uaXRvci0+YmFja19wYWdlLT5mbGFncyk7CisKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPmJhY2tfcGFnZSk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG1vbml0b3ItPm5ldGZzX3BhZ2UsIGVycm9yKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCQlmc2NhY2hlX3B1dF9yZXRyaWV2YWwob3ApOworCQlrZnJlZShtb25pdG9yKTsKKworCQkvKiBsZXQgdGhlIHRocmVhZCBwb29sIGhhdmUgc29tZSBhaXIgb2NjYXNpb25hbGx5ICovCisJCW1heC0tOworCQlpZiAobWF4IDwgMCB8fCBuZWVkX3Jlc2NoZWQoKSkgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKQorCQkJCWZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwob3ApOworCQkJX2xlYXZlKCIgW21heGVkIG91dF0iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogcmVhZCB0aGUgY29ycmVzcG9uZGluZyBwYWdlIHRvIHRoZSBnaXZlbiBzZXQgZnJvbSB0aGUgYmFja2luZyBmaWxlCisgKiAtIGFuIHVuY2VydGFpbiBwYWdlIGlzIHNpbXBseSBkaXNjYXJkZWQsIHRvIGJlIHRyaWVkIGFnYWluIGFub3RoZXIgdGltZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgICAgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpuZXRwYWdlLAorCQkJCQkgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgKm1vbml0b3I7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nOworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqYmFja3BhZ2U7CisJaW50IHJldDsKKworCV9lbnRlcigiIik7CisKKwlwYWdldmVjX3JlaW5pdChwYWdldmVjKTsKKworCV9kZWJ1ZygicmVhZCBiYWNrICVweyVsdSwlZH0iLAorCSAgICAgICBuZXRwYWdlLCBuZXRwYWdlLT5pbmRleCwgcGFnZV9jb3VudChuZXRwYWdlKSk7CisKKwltb25pdG9yID0ga3phbGxvYyhzaXplb2YoKm1vbml0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vbml0b3IpCisJCWdvdG8gbm9tZW07CisKKwltb25pdG9yLT5uZXRmc19wYWdlID0gbmV0cGFnZTsKKwltb25pdG9yLT5vcCA9IGZzY2FjaGVfZ2V0X3JldHJpZXZhbChvcCk7CisKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZtb25pdG9yLT5tb25pdG9yLCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKTsKKworCS8qIGF0dGVtcHQgdG8gZ2V0IGhvbGQgb2YgdGhlIGJhY2tpbmcgcGFnZSAqLworCWJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwluZXdwYWdlID0gTlVMTDsKKworCWZvciAoOzspIHsKKwkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCWlmIChiYWNrcGFnZSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfcHJlc2VudDsKKworCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCW5ld3BhZ2UgPSBwYWdlX2NhY2hlX2FsbG9jX2NvbGQoYm1hcHBpbmcpOworCQkJaWYgKCFuZXdwYWdlKQorCQkJCWdvdG8gbm9tZW1fbW9uaXRvcjsKKwkJfQorCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQluZXRwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPT0gMCkKKwkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCWlmIChyZXQgIT0gLUVFWElTVCkKKwkJCWdvdG8gbm9tZW1fcGFnZTsKKwl9CisKKwkvKiB3ZSd2ZSBpbnN0YWxsZWQgYSBuZXcgYmFja2luZyBwYWdlLCBzbyBub3cgd2UgbmVlZCB0byBhZGQgaXQKKwkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KK2luc3RhbGxlZF9uZXdfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBuZXcgJXAiLCBuZXdwYWdlKTsKKworCWJhY2twYWdlID0gbmV3cGFnZTsKKwluZXdwYWdlID0gTlVMTDsKKworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwlwYWdldmVjX2FkZChwYWdldmVjLCBiYWNrcGFnZSk7CisJX19wYWdldmVjX2xydV9hZGRfZmlsZShwYWdldmVjKTsKKworcmVhZF9iYWNraW5nX3BhZ2U6CisJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVhZF9lcnJvcjsKKworCS8qIHNldCB0aGUgbW9uaXRvciB0byB0cmFuc2ZlciB0aGUgZGF0YSBhY3Jvc3MgKi8KK21vbml0b3JfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJLyogaW5zdGFsbCB0aGUgbW9uaXRvciAqLworCXBhZ2VfY2FjaGVfZ2V0KG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwltb25pdG9yLT5tb25pdG9yLnByaXZhdGUgPSBiYWNrcGFnZTsKKwlhZGRfcGFnZV93YWl0X3F1ZXVlKGJhY2twYWdlLCAmbW9uaXRvci0+bW9uaXRvcik7CisJbW9uaXRvciA9IE5VTEw7CisKKwkvKiBidXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiByZWFkIGJlZm9yZSB0aGUgbW9uaXRvciB3YXMgaW5zdGFsbGVkLCBzbworCSAqIHRoZSBtb25pdG9yIG1heSBtaXNzIHRoZSBldmVudCAtIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2UgZG8gZ2V0CisJICogb25lIGluIHN1Y2ggYSBjYXNlICovCisJaWYgKHRyeWxvY2tfcGFnZShiYWNrcGFnZSkpIHsKKwkJX2RlYnVnKCJqdW1wc3RhcnQgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCX0KKwlnb3RvIHN1Y2Nlc3M7CisKKwkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCSAqIHRocmVlIHN0YXRlczogcmVhZCBpbiBwcm9ncmVzcywgcmVhZCBmYWlsZWQgb3IgcmVhZCBva2F5ICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OgorCV9kZWJ1ZygiLSBwcmVzZW50Iik7CisKKwlpZiAobmV3cGFnZSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJCW5ld3BhZ2UgPSBOVUxMOworCX0KKworCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQlnb3RvIGlvX2Vycm9yOworCisJaWYgKFBhZ2VVcHRvZGF0ZShiYWNrcGFnZSkpCisJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwlpZiAoIXRyeWxvY2tfcGFnZShiYWNrcGFnZSkpCisJCWdvdG8gbW9uaXRvcl9iYWNraW5nX3BhZ2U7CisJX2RlYnVnKCJyZWFkICVwIHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisJZ290byByZWFkX2JhY2tpbmdfcGFnZTsKKworCS8qIHRoZSBiYWNraW5nIHBhZ2UgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBhdHRhY2ggdGhlIG5ldGZzCisJICogcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUgYW5kIGNvcHkgdGhlIGRhdGEgYWNyb3NzICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZToKKwlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCXBhZ2V2ZWNfYWRkKHBhZ2V2ZWMsIG5ldHBhZ2UpOworCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsIHBhZ2V2ZWMpOworCisJY29weV9oaWdocGFnZShuZXRwYWdlLCBiYWNrcGFnZSk7CisJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCitzdWNjZXNzOgorCV9kZWJ1Zygic3VjY2VzcyIpOworCXJldCA9IDA7CisKK291dDoKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK3JlYWRfZXJyb3I6CisJX2RlYnVnKCJyZWFkIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FTk9NRU0pCisJCWdvdG8gb3V0OworaW9fZXJyb3I6CisJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiUGFnZSByZWFkIGVycm9yIG9uIGJhY2tpbmcgZmlsZSIpOworCXJldCA9IC1FTk9CVUZTOworCWdvdG8gb3V0OworCitub21lbV9wYWdlOgorCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdwYWdlKTsKK25vbWVtX21vbml0b3I6CisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlrZnJlZShtb25pdG9yKTsKK25vbWVtOgorCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogcmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZSBpdAorICogLSBjYWNoZSB3aXRoZHJhd2FsIGlzIHByZXZlbnRlZCBieSB0aGUgY2FsbGVyCisgKiAtIHJldHVybnMgLUVJTlRSIGlmIGludGVycnVwdGVkCisgKiAtIHJldHVybnMgLUVOT01FTSBpZiByYW4gb3V0IG9mIG1lbW9yeQorICogLSByZXR1cm5zIC1FTk9CVUZTIGlmIG5vIGJ1ZmZlcnMgY2FuIGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgcGFnZSBpcyBiZXlvbmQgRU9GCisgKiAtIGlmIHRoZSBwYWdlIGlzIGJhY2tlZCBieSBhIGJsb2NrIGluIHRoZSBjYWNoZToKKyAqICAgLSBhIHJlYWQgd2lsbCBiZSBzdGFydGVkIHdoaWNoIHdpbGwgY2FsbCB0aGUgY2FsbGJhY2sgb24gY29tcGxldGlvbgorICogICAtIDAgd2lsbCBiZSByZXR1cm5lZAorICogLSBlbHNlIGlmIHRoZSBwYWdlIGlzIHVuYmFja2VkOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICovCitpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKwl1bnNpZ25lZCBzaGlmdDsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigieyVwfSx7JWx4fSwsLCIsIG9iamVjdCwgcGFnZS0+aW5kZXgpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaW5vZGUgPSBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZTsKKwlBU1NFUlQoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKTsKKwlBU1NFUlQoaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlcyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIHVzZSBibWFwICovCisJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc2hpZnQgPSBQQUdFX1NISUZUIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisKKwlvcC0+b3AuZmxhZ3MgPSBGU0NBQ0hFX09QX0ZBU1Q7CisJb3AtPm9wLnByb2Nlc3NvciA9IGNhY2hlZmlsZXNfcmVhZF9jb3BpZXI7CisKKwlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJLyogd2UgYXNzdW1lIHRoZSBhYnNlbmNlIG9yIHByZXNlbmNlIG9mIHRoZSBmaXJzdCBibG9jayBpcyBhIGdvb2QKKwkgKiBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCSAqIC0gVE9ETzogZG9uJ3QgdXNlIGJtYXAoKSBmb3IgdGhpcyBhcyBpdCBpcyBfbm90XyBhY3R1YWxseSBnb29kCisJICogICBlbm91Z2ggZm9yIHRoaXMgYXMgaXQgZG9lc24ndCBpbmRpY2F0ZSBlcnJvcnMsIGJ1dCBpdCdzIGFsbCB3ZSd2ZQorCSAqICAgZ290IGZvciB0aGUgbW9tZW50CisJICovCisJYmxvY2swID0gcGFnZS0+aW5kZXg7CisJYmxvY2swIDw8PSBzaGlmdDsKKworCWJsb2NrID0gaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPmJtYXAoaW5vZGUtPmlfbWFwcGluZywgYmxvY2swKTsKKwlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrMCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2spOworCisJaWYgKGJsb2NrKSB7CisJCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlIHRvIHRoZSBiYWNraW5nIGZzIHRvIGJlCisJCSAqIHJlYWQgZnJvbSBkaXNrICovCisJCXJldCA9IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKG9iamVjdCwgb3AsIHBhZ2UsCisJCQkJCQkgICAgICAgJnBhZ2V2ZWMpOworCX0gZWxzZSBpZiAoY2FjaGVmaWxlc19oYXNfc3BhY2UoY2FjaGUsIDAsIDEpID09IDApIHsKKwkJLyogdGhlcmUncyBzcGFjZSBpbiB0aGUgY2FjaGUgd2UgY2FuIHVzZSAqLworCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgcGFnZSk7CisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJcmV0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMgdG8gdGhlIGdpdmVuIHNldCBmcm9tIHRoZSBiYWNraW5nIGZpbGUKKyAqIC0gYW55IHVuY2VydGFpbiBwYWdlcyBhcmUgc2ltcGx5IGRpc2NhcmRlZCwgdG8gYmUgdHJpZWQgYWdhaW4gYW5vdGhlciB0aW1lCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJc3RydWN0IHBhZ2V2ZWMgKm1hcmtfcHZlYykKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vbmVfcmVhZCAqbW9uaXRvciA9IE5VTEw7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZXZlYyBscnVfcHZlYzsKKwlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IE5VTEwsICpuZXRwYWdlLCAqX24sICpiYWNrcGFnZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlfZW50ZXIoIiIpOworCisJcGFnZXZlY19pbml0KCZscnVfcHZlYywgMCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0cGFnZSwgX24sIGxpc3QsIGxydSkgeworCQlsaXN0X2RlbCgmbmV0cGFnZS0+bHJ1KTsKKworCQlfZGVidWcoInJlYWQgYmFjayAlcHslbHUsJWR9IiwKKwkJICAgICAgIG5ldHBhZ2UsIG5ldHBhZ2UtPmluZGV4LCBwYWdlX2NvdW50KG5ldHBhZ2UpKTsKKworCQlpZiAoIW1vbml0b3IpIHsKKwkJCW1vbml0b3IgPSBremFsbG9jKHNpemVvZigqbW9uaXRvciksIEdGUF9LRVJORUwpOworCQkJaWYgKCFtb25pdG9yKQorCQkJCWdvdG8gbm9tZW07CisKKwkJCW1vbml0b3ItPm9wID0gZnNjYWNoZV9nZXRfcmV0cmlldmFsKG9wKTsKKwkJCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJm1vbml0b3ItPm1vbml0b3IsCisJCQkJCQkgIGNhY2hlZmlsZXNfcmVhZF93YWl0ZXIpOworCQl9CisKKwkJZm9yICg7OykgeworCQkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCQlpZiAoYmFja3BhZ2UpCisJCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OworCisJCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCQluZXdwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKGJtYXBwaW5nKTsKKwkJCQlpZiAoIW5ld3BhZ2UpCisJCQkJCWdvdG8gbm9tZW07CisJCQl9CisKKwkJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQkJbmV0cGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCQlpZiAocmV0ICE9IC1FRVhJU1QpCisJCQkJZ290byBub21lbTsKKwkJfQorCisJCS8qIHdlJ3ZlIGluc3RhbGxlZCBhIG5ldyBiYWNraW5nIHBhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFkZCBpdAorCQkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KKwlpbnN0YWxsZWRfbmV3X2JhY2tpbmdfcGFnZToKKwkJX2RlYnVnKCItIG5ldyAlcCIsIG5ld3BhZ2UpOworCisJCWJhY2twYWdlID0gbmV3cGFnZTsKKwkJbmV3cGFnZSA9IE5VTEw7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgYmFja3BhZ2UpKQorCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOworCisJcmVyZWFkX2JhY2tpbmdfcGFnZToKKwkJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byByZWFkX2Vycm9yOworCisJCS8qIGFkZCB0aGUgbmV0ZnMgcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUsIGFuZCBzZXQgdGhlCisJCSAqIG1vbml0b3IgdG8gdHJhbnNmZXIgdGhlIGRhdGEgYWNyb3NzICovCisJbW9uaXRvcl9iYWNraW5nX3BhZ2U6CisJCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ldHBhZ2UsIG9wLT5tYXBwaW5nLCBuZXRwYWdlLT5pbmRleCwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIG5vbWVtOworCQl9CisKKwkJcGFnZV9jYWNoZV9nZXQobmV0cGFnZSk7CisJCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBuZXRwYWdlKSkKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCQkvKiBpbnN0YWxsIGEgbW9uaXRvciAqLworCQlwYWdlX2NhY2hlX2dldChuZXRwYWdlKTsKKwkJbW9uaXRvci0+bmV0ZnNfcGFnZSA9IG5ldHBhZ2U7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwkJbW9uaXRvci0+bW9uaXRvci5wcml2YXRlID0gYmFja3BhZ2U7CisJCWFkZF9wYWdlX3dhaXRfcXVldWUoYmFja3BhZ2UsICZtb25pdG9yLT5tb25pdG9yKTsKKwkJbW9uaXRvciA9IE5VTEw7CisKKwkJLyogYnV0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gcmVhZCBiZWZvcmUgdGhlIG1vbml0b3Igd2FzCisJCSAqIGluc3RhbGxlZCwgc28gdGhlIG1vbml0b3IgbWF5IG1pc3MgdGhlIGV2ZW50IC0gc28gd2UgaGF2ZSB0bworCQkgKiBlbnN1cmUgdGhhdCB3ZSBkbyBnZXQgb25lIGluIHN1Y2ggYSBjYXNlICovCisJCWlmICh0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKSB7CisJCQlfZGVidWcoIjJ1bmxvY2sgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJCXVubG9ja19wYWdlKGJhY2twYWdlKTsKKwkJfQorCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCQkgKiB0aHJlZSBzdGF0ZXM6IHJlYWQgaW4gcHJvZ3Jlc3MsIHJlYWQgZmFpbGVkIG9yIHJlYWQgb2theSAqLworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3ByZXNlbnQ6CisJCV9kZWJ1ZygiLSBwcmVzZW50ICVwIiwgYmFja3BhZ2UpOworCisJCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQkJZ290byBpb19lcnJvcjsKKworCQlpZiAoUGFnZVVwdG9kYXRlKGJhY2twYWdlKSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwkJX2RlYnVnKCItIG5vdCByZWFkeSAlcHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisKKwkJaWYgKCF0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKQorCQkJZ290byBtb25pdG9yX2JhY2tpbmdfcGFnZTsKKworCQlpZiAoUGFnZUVycm9yKGJhY2twYWdlKSkgeworCQkJX2RlYnVnKCJlcnJvciAlbHgiLCBiYWNrcGFnZS0+ZmxhZ3MpOworCQkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCQkJZ290byBpb19lcnJvcjsKKwkJfQorCisJCWlmIChQYWdlVXB0b2RhdGUoYmFja3BhZ2UpKQorCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s7CisKKwkJLyogd2UndmUgbG9ja2VkIGEgcGFnZSB0aGF0J3MgbmVpdGhlciB1cCB0byBkYXRlIG5vciBlcnJvbmVvdXMsCisJCSAqIHNvIHdlIG5lZWQgdG8gYXR0ZW1wdCB0byByZWFkIGl0IGFnYWluICovCisJCWdvdG8gcmVyZWFkX2JhY2tpbmdfcGFnZTsKKworCQkvKiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgYXR0YWNoIHRoZSBuZXRmcworCQkgKiBwYWdlIHRvIHRoZSBwYWdlY2FjaGUgYW5kIExSVSBhbmQgY29weSB0aGUgZGF0YSBhY3Jvc3MgKi8KKwliYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s6CisJCV9kZWJ1ZygidXB0b2RhdGUgJWx4IiwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3VwdG9kYXRlOgorCQlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShuZXRwYWdlLCBvcC0+bWFwcGluZywgbmV0cGFnZS0+aW5kZXgsCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHJldCA9PSAtRUVYSVNUKSB7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG5ldHBhZ2UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBub21lbTsKKwkJfQorCisJCWNvcHlfaGlnaHBhZ2UobmV0cGFnZSwgYmFja3BhZ2UpOworCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlpZiAoIXBhZ2V2ZWNfYWRkKG1hcmtfcHZlYywgbmV0cGFnZSkpCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCBtYXJrX3B2ZWMpOworCisJCXBhZ2VfY2FjaGVfZ2V0KG5ldHBhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgbmV0cGFnZSkpCisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKwl9CisKKwluZXRwYWdlID0gTlVMTDsKKworCV9kZWJ1Zygib3V0Iik7CisKK291dDoKKwkvKiB0aWR5IHVwICovCisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCWlmIChuZXdwYWdlKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJaWYgKG5ldHBhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldHBhZ2UsIF9uLCBsaXN0LCBscnUpIHsKKwkJbGlzdF9kZWwoJm5ldHBhZ2UtPmxydSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub21lbToKKwlfZGVidWcoIm5vbWVtIik7CisJcmV0ID0gLUVOT01FTTsKKwlnb3RvIG91dDsKKworcmVhZF9lcnJvcjoKKwlfZGVidWcoInJlYWQgZXJyb3IgJWQiLCByZXQpOworCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJZ290byBvdXQ7Citpb19lcnJvcjoKKwljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsICJQYWdlIHJlYWQgZXJyb3Igb24gYmFja2luZyBmaWxlIik7CisJcmV0ID0gLUVOT0JVRlM7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiByZWFkIGEgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBjYWNoZSBvciBhbGxvY2F0ZSBibG9ja3MgaW4gd2hpY2ggdG8gc3RvcmUKKyAqIHRoZW0KKyAqLworaW50IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgICBnZnBfdCBnZnApCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBsaXN0X2hlYWQgYmFja3BhZ2VzOworCXN0cnVjdCBwYWdldmVjIHBhZ2V2ZWM7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKl9uOworCXVuc2lnbmVkIHNoaWZ0LCBucmJhY2twYWdlczsKKwlpbnQgcmV0LCByZXQyLCBzcGFjZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihvcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlfZW50ZXIoIntPQkoleCwlZH0sLCVkLCwiLAorCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+b3AudXNhZ2UpLAorCSAgICAgICAqbnJfcGFnZXMpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc3BhY2UgPSAxOworCWlmIChjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgKm5yX3BhZ2VzKSA8IDApCisJCXNwYWNlID0gMDsKKworCWlub2RlID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGU7CisJQVNTRVJUKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpOworCUFTU0VSVChpbm9kZS0+aV9tYXBwaW5nLT5hX29wcy0+Ym1hcCk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5yZWFkcGFnZXMpOworCisJLyogY2FsY3VsYXRlIHRoZSBzaGlmdCByZXF1aXJlZCB0byB1c2UgYm1hcCAqLworCWlmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXNoaWZ0ID0gUEFHRV9TSElGVCAtIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfRkFTVDsKKwlvcC0+b3AucHJvY2Vzc29yID0gY2FjaGVmaWxlc19yZWFkX2NvcGllcjsKKworCUlOSVRfTElTVF9IRUFEKCZiYWNrcGFnZXMpOworCW5yYmFja3BhZ2VzID0gMDsKKworCXJldCA9IHNwYWNlID8gLUVOT0RBVEEgOiAtRU5PQlVGUzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgX24sIHBhZ2VzLCBscnUpIHsKKwkJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKworCQkvKiB3ZSBhc3N1bWUgdGhlIGFic2VuY2Ugb3IgcHJlc2VuY2Ugb2YgdGhlIGZpcnN0IGJsb2NrIGlzIGEKKwkJICogZ29vZCBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCQkgKiAtIFRPRE86IGRvbid0IHVzZSBibWFwKCkgZm9yIHRoaXMgYXMgaXQgaXMgX25vdF8gYWN0dWFsbHkKKwkJICogICBnb29kIGVub3VnaCBmb3IgdGhpcyBhcyBpdCBkb2Vzbid0IGluZGljYXRlIGVycm9ycywgYnV0CisJCSAqICAgaXQncyBhbGwgd2UndmUgZ290IGZvciB0aGUgbW9tZW50CisJCSAqLworCQlibG9jazAgPSBwYWdlLT5pbmRleDsKKwkJYmxvY2swIDw8PSBzaGlmdDsKKworCQlibG9jayA9IGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKGlub2RlLT5pX21hcHBpbmcsCisJCQkJCQkgICAgICBibG9jazApOworCQlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jazAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisKKwkJaWYgKGJsb2NrKSB7CisJCQkvKiB3ZSBoYXZlIGRhdGEgLSBhZGQgaXQgdG8gdGhlIGxpc3QgdG8gZ2l2ZSB0byB0aGUKKwkJCSAqIGJhY2tpbmcgZnMgKi8KKwkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmYmFja3BhZ2VzKTsKKwkJCSgqbnJfcGFnZXMpLS07CisJCQlucmJhY2twYWdlcysrOworCQl9IGVsc2UgaWYgKHNwYWNlICYmIHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKSB7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJfQorCX0KKworCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKworCWlmIChsaXN0X2VtcHR5KHBhZ2VzKSkKKwkJcmV0ID0gMDsKKworCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlcyB0byB0aGUgYmFja2luZyBmcyB0byBiZSByZWFkIGZyb20KKwkgKiBkaXNrICovCisJaWYgKG5yYmFja3BhZ2VzID4gMCkgeworCQlyZXQyID0gY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShvYmplY3QsIG9wLCAmYmFja3BhZ2VzLAorCQkJCQkJICAgICZwYWdldmVjKTsKKwkJaWYgKHJldDIgPT0gLUVOT01FTSB8fCByZXQyID09IC1FSU5UUikKKwkJCXJldCA9IHJldDI7CisJfQorCisJaWYgKHBhZ2V2ZWNfY291bnQoJnBhZ2V2ZWMpID4gMCkKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCisJX2xlYXZlKCIgPSAlZCBbbnI9JXUlc10iLAorCSAgICAgICByZXQsICpucl9wYWdlcywgbGlzdF9lbXB0eShwYWdlcykgPyAiIGVtcHR5IiA6ICIiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYWxsb2NhdGUgYSBibG9jayBpbiB0aGUgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgbm8gYnVmZmVycyBjYW4gYmUgbWFkZSBhdmFpbGFibGUKKyAqIC0gcmV0dXJucyAtRU5PQlVGUyBpZiBwYWdlIGlzIGJleW9uZCBFT0YKKyAqIC0gb3RoZXJ3aXNlOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gMCB3aWxsIGJlIHJldHVybmVkCisgKi8KK2ludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVseH0sIiwgb2JqZWN0LCBwYWdlLT5pbmRleCk7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgMSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CisJCXBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKTsKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBibG9ja3MgaW4gdGhlIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIGEgc2V0IG9mIHBhZ2VzCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBidWZmZXJzIGNvdWxkbid0IGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBwYWdlcyBhcmUgYmV5b25kIEVPRgorICogLSBvdGhlcndpc2U6CisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICogLSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkIGZvciBhbnkgcGFnZSBtYXJrZWQKKyAqLworaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZXMoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCIlcCwsLCVkLCIsIG9iamVjdCwgKm5yX3BhZ2VzKTsKKworCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAqbnJfcGFnZXMpOworCWlmIChyZXQgPT0gMCkgeworCQlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZXMsIGxydSkgeworCQkJaWYgKHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKQorCQkJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJfQorCisJCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCXJldCA9IC1FTk9EQVRBOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgcGFnZSBiZSBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gdGhpcyByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIGlmIHRoZXJlJ3Mgbm8gY2FjaGUgYmxvY2sgYXZhaWxhYmxlLCBpbiB3aGljaAorICogICBjYXNlIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQKKyAqIC0gaWYgdGhlIG9wIGlzIGluIHByb2dyZXNzLCAwIHdpbGwgYmUgcmV0dXJuZWQKKyAqLworaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJbG9mZl90IHBvczsKKwl2b2lkICpkYXRhOworCWludCByZXQ7CisKKwlBU1NFUlQob3AgIT0gTlVMTCk7CisJQVNTRVJUKHBhZ2UgIT0gTlVMTCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisKKwlfZW50ZXIoIiVwLCVweyVseH0sLCwiLCBvYmplY3QsIHBhZ2UsIHBhZ2UtPmluZGV4KTsKKworCWlmICghb2JqZWN0LT5iYWNrZXIpIHsKKwkJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJQVNTRVJUKFNfSVNSRUcob2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbW9kZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJLyogd3JpdGUgdGhlIHBhZ2UgdG8gdGhlIGJhY2tpbmcgZmlsZXN5c3RlbSBhbmQgbGV0IGl0IHN0b3JlIGl0IGluIGl0cworCSAqIG93biB0aW1lICovCisJZGdldChvYmplY3QtPmJhY2tlcik7CisJbW50Z2V0KGNhY2hlLT5tbnQpOworCWZpbGUgPSBkZW50cnlfb3BlbihvYmplY3QtPmJhY2tlciwgY2FjaGUtPm1udCwgT19SRFdSLAorCQkJICAgY2FjaGUtPmNhY2hlX2NyZWQpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlPOworCQlpZiAoZmlsZS0+Zl9vcC0+d3JpdGUpIHsKKwkJCXBvcyA9IChsb2ZmX3QpIHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQ7CisJCQlkYXRhID0ga21hcChwYWdlKTsKKwkJCW9sZF9mcyA9IGdldF9mcygpOworCQkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCQlyZXQgPSBmaWxlLT5mX29wLT53cml0ZSgKKwkJCQlmaWxlLCAoY29uc3Qgdm9pZCBfX3VzZXIgKikgZGF0YSwgUEFHRV9TSVpFLAorCQkJCSZwb3MpOworCQkJc2V0X2ZzKG9sZF9mcyk7CisJCQlrdW5tYXAocGFnZSk7CisJCQlpZiAocmV0ICE9IFBBR0VfU0laRSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJCWZwdXQoZmlsZSk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQkJb2JqZWN0LCAiV3JpdGUgcGFnZSB0byBiYWNraW5nIGZpbGUgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXRhY2ggYSBiYWNraW5nIGJsb2NrIGZyb20gYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqLwordm9pZCBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKl9vYmplY3QsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVsdX0iLCBvYmplY3QsIHBhZ2UtPmluZGV4KTsKKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmZzY2FjaGUuY29va2llLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgwOGNkCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBDYWNoZUZpbGVzIHNlY3VyaXR5IG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKy8qCisgKiBkZXRlcm1pbmUgdGhlIHNlY3VyaXR5IGNvbnRleHQgd2l0aGluIHdoaWNoIHdlIGFjY2VzcyB0aGUgY2FjaGUgZnJvbSB3aXRoaW4KKyAqIHRoZSBrZXJuZWwKKyAqLworaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30iLCBjYWNoZS0+c2VjY3R4KTsKKworCW5ldyA9IHByZXBhcmVfa2VybmVsX2NyZWQoY3VycmVudCk7CisJaWYgKCFuZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2FjaGUtPnNlY2N0eCkgeworCQlyZXQgPSBzZXRfc2VjdXJpdHlfb3ZlcnJpZGVfZnJvbV9jdHgobmV3LCBjYWNoZS0+c2VjY3R4KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXB1dF9jcmVkKG5ldyk7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IgorCQkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbm9taW5hdGUiCisJCQkgICAgICAgIiBzZWN1cml0eSBjb250ZXh0OiBlcnJvciAlZFxuIiwKKwkJCSAgICAgICByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCWNhY2hlLT5jYWNoZV9jcmVkID0gbmV3OworCXJldCA9IDA7CitlcnJvcjoKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2VlIGlmIG1rZGlyIGFuZCBjcmVhdGUgY2FuIGJlIHBlcmZvcm1lZCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIocm9vdC0+ZF9pbm9kZSwgcm9vdCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShyb290LT5kX2lub2RlLCByb290LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzZWN1cml0eSBkZXRhaWxzIG9mIHRoZSBvbi1kaXNrIGNhY2hlCisgKiAtIG11c3QgYmUgY2FsbGVkIHdpdGggc2VjdXJpdHkgb3ZlcnJpZGUgaW4gZm9yY2UKKyAqLworaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJc3RydWN0IGRlbnRyeSAqcm9vdCwKKwkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJLyogZHVwbGljYXRlIHRoZSBjYWNoZSBjcmVkcyBmb3IgQ09XICh0aGUgb3ZlcnJpZGUgaXMgY3VycmVudGx5IGluCisJICogZm9yY2UsIHNvIHdlIGNhbiB1c2UgcHJlcGFyZV9jcmVkcygpIHRvIGRvIHRoaXMpICovCisJbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgKl9zYXZlZF9jcmVkKTsKKworCS8qIHVzZSB0aGUgY2FjaGUgcm9vdCBkaXIncyBzZWN1cml0eSBjb250ZXh0IGFzIHRoZSBiYXNpcyB3aXRoCisJICogd2hpY2ggY3JlYXRlIGZpbGVzICovCisJcmV0ID0gc2V0X2NyZWF0ZV9maWxlc19hcyhuZXcsIHJvb3QtPmRfaW5vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCV9sZWF2ZSgiID0gJWQgW2NmYV0iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXB1dF9jcmVkKGNhY2hlLT5jYWNoZV9jcmVkKTsKKwljYWNoZS0+Y2FjaGVfY3JlZCA9IG5ldzsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCBfc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoY2FjaGUsIHJvb3QpOworCisJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKKwkJcmV0ID0gMDsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy94YXR0ci5jIGIvZnMvY2FjaGVmaWxlcy94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTdhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3hhdHRyLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qIENhY2hlRmlsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY2FjaGVmaWxlc194YXR0cl9jYWNoZVtdID0KKwlYQVRUUl9VU0VSX1BSRUZJWCAiQ2FjaGVGaWxlcy5jYWNoZSI7CisKKy8qCisgKiBjaGVjayB0aGUgdHlwZSBsYWJlbCBvbiBhbiBvYmplY3QKKyAqIC0gZG9uZSB1c2luZyB4YXR0cnMKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJY2hhciB0eXBlWzNdLCB4dHlwZVszXTsKKwlpbnQgcmV0OworCisJQVNTRVJUKGRlbnRyeSk7CisJQVNTRVJUKGRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIW9iamVjdC0+ZnNjYWNoZS5jb29raWUpCisJCXN0cmNweSh0eXBlLCAiQzMiKTsKKwllbHNlCisJCXNucHJpbnRmKHR5cGUsIDMsICIlMDJ4Iiwgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT50eXBlKTsKKworCV9lbnRlcigiJXB7JXN9Iiwgb2JqZWN0LCB0eXBlKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCBhIHR5cGUgbGFiZWwgZGlyZWN0bHkgKi8KKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLCB0eXBlLCAyLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0ID09IDApIHsKKwkJX2RlYnVnKCJTRVQiKTsgLyogd2Ugc3VjY2VlZGVkICovCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHJldCAhPSAtRUVYSVNUKSB7CisJCWtlcnJvcigiQ2FuJ3Qgc2V0IHhhdHRyIG9uICUqLipzIFslbHVdIChlcnIgJWQpIiwKKwkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubGVuLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkJICAgICAgIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHJlYWQgdGhlIGN1cnJlbnQgdHlwZSBsYWJlbCAqLworCXJldCA9IHZmc19nZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsIHh0eXBlLCAzKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQlrZXJyb3IoIkNhbid0IHJlYWQgeGF0dHIgb24gJSouKnMgWyVsdV0gKGVyciAlZCkiLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5sZW4sCisJCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQkgICAgICAgLXJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogY2hlY2sgdGhlIHR5cGUgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlpZiAocmV0ICE9IDIpCisJCWdvdG8gYmFkX3R5cGVfbGVuZ3RoOworCisJaWYgKHh0eXBlWzBdICE9IHR5cGVbMF0gfHwgeHR5cGVbMV0gIT0gdHlwZVsxXSkKKwkJZ290byBiYWRfdHlwZTsKKworCXJldCA9IDA7CisKK2Vycm9yOgorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK2JhZF90eXBlX2xlbmd0aDoKKwlrZXJyb3IoIkNhY2hlIG9iamVjdCAlbHUgdHlwZSB4YXR0ciBsZW5ndGggaW5jb3JyZWN0IiwKKwkgICAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJcmV0ID0gLUVJTzsKKwlnb3RvIGVycm9yOworCitiYWRfdHlwZToKKwl4dHlwZVsyXSA9IDA7CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJSouKnMgWyVsdV0gdHlwZSAlcyBub3QgJXMiLAorCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkgICAgICAgeHR5cGUsIHR5cGUpOworCXJldCA9IC1FSU87CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHNldCB0aGUgc3RhdGUgeGF0dHIgb24gYSBjYWNoZSBmaWxlCisgKi8KK2ludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgKmF1eGRhdGEpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJaW50IHJldDsKKworCUFTU0VSVChvYmplY3QtPmZzY2FjaGUuY29va2llKTsKKwlBU1NFUlQoZGVudHJ5KTsKKworCV9lbnRlcigiJXAsIyVkIiwgb2JqZWN0LCBhdXhkYXRhLT5sZW4pOworCisJLyogYXR0ZW1wdCB0byBpbnN0YWxsIHRoZSBjYWNoZSBtZXRhZGF0YSBkaXJlY3RseSAqLworCV9kZWJ1ZygiU0VUICVzICMldSIsIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+bmFtZSwgYXV4ZGF0YS0+bGVuKTsKKworCXJldCA9IHZmc19zZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsCisJCQkgICAmYXV4ZGF0YS0+dHlwZSwgYXV4ZGF0YS0+bGVuLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT01FTSkKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQlvYmplY3QsCisJCQkiRmFpbGVkIHRvIHNldCB4YXR0ciB3aXRoIGVycm9yICVkIiwgcmV0KTsKKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIHN0YXRlIHhhdHRyIG9uIGEgY2FjaGUgZmlsZQorICovCitpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCSAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlBU1NFUlQob2JqZWN0LT5mc2NhY2hlLmNvb2tpZSk7CisJQVNTRVJUKGRlbnRyeSk7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgY2FjaGUgbWV0YWRhdGEgZGlyZWN0bHkgKi8KKwlfZGVidWcoIlNFVCAlcyAjJXUiLCBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGF1eGRhdGEtPmxlbik7CisKKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJICAgJmF1eGRhdGEtPnR5cGUsIGF1eGRhdGEtPmxlbiwKKwkJCSAgIFhBVFRSX1JFUExBQ0UpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PTUVNKQorCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCW9iamVjdCwKKwkJCSJGYWlsZWQgdG8gdXBkYXRlIHhhdHRyIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzdGF0ZSB4YXR0ciBvbiBhIGNhY2hlIGZpbGUKKyAqIC0gcmV0dXJuIC1FU1RBTEUgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgZGVsZXRlZAorICovCitpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4YnVmOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCUFTU0VSVChkZW50cnkpOworCUFTU0VSVChkZW50cnktPmRfaW5vZGUpOworCisJYXV4YnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIpICsgNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1eGJ1ZikgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogcmVhZCB0aGUgY3VycmVudCB0eXBlIGxhYmVsICovCisJcmV0ID0gdmZzX2dldHhhdHRyKGRlbnRyeSwgY2FjaGVmaWxlc194YXR0cl9jYWNoZSwKKwkJCSAgICZhdXhidWYtPnR5cGUsIDUxMiArIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RBVEEpCisJCQlnb3RvIHN0YWxlOyAvKiBubyBhdHRyaWJ1dGUgLSBwb3dlciB3ZW50IG9mZgorCQkJCSAgICAgKiBtaWQtY3VsbD8gKi8KKworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCSJDYW4ndCByZWFkIHhhdHRyIG9uICVsdSAoZXJyICVkKSIsCisJCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGNoZWNrIHRoZSBvbi1kaXNrIG9iamVjdCAqLworCWlmIChyZXQgPCAxKQorCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCWlmIChhdXhidWYtPnR5cGUgIT0gYXV4ZGF0YS0+dHlwZSkKKwkJZ290byBzdGFsZTsKKworCWF1eGJ1Zi0+bGVuID0gcmV0OworCisJLyogY29uc3VsdCB0aGUgbmV0ZnMgKi8KKwlpZiAob2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT5jaGVja19hdXgpIHsKKwkJZW51bSBmc2NhY2hlX2NoZWNrYXV4IHJlc3VsdDsKKwkJdW5zaWduZWQgaW50IGRsZW47CisKKwkJZGxlbiA9IGF1eGJ1Zi0+bGVuIC0gMTsKKworCQlfZGVidWcoImNoZWNrYXV4ICVzICMldSIsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGRsZW4pOworCisJCXJlc3VsdCA9IGZzY2FjaGVfY2hlY2tfYXV4KCZvYmplY3QtPmZzY2FjaGUsCisJCQkJCSAgICZhdXhidWYtPmRhdGEsIGRsZW4pOworCisJCXN3aXRjaCAocmVzdWx0KSB7CisJCQkvKiBlbnRyeSBva2F5IGFzIGlzICovCisJCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9PS0FZOgorCQkJZ290byBva2F5OworCisJCQkvKiBlbnRyeSByZXF1aXJlcyB1cGRhdGUgKi8KKwkJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURToKKwkJCWJyZWFrOworCisJCQkvKiBlbnRyeSByZXF1aXJlcyBkZWxldGlvbiAqLworCQljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU6CisJCQlnb3RvIHN0YWxlOworCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCS8qIHVwZGF0ZSB0aGUgY3VycmVudCBsYWJlbCAqLworCQlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJCSAgICZhdXhkYXRhLT50eXBlLCBhdXhkYXRhLT5sZW4sCisJCQkJICAgWEFUVFJfUkVQTEFDRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCQkiQ2FuJ3QgdXBkYXRlIHhhdHRyIG9uICVsdSIKKwkJCQkJCSIgKGVycm9yICVkKSIsCisJCQkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vLCAtcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKK29rYXk6CisJcmV0ID0gMDsKKworZXJyb3I6CisJa2ZyZWUoYXV4YnVmKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitiYWRfdHlwZV9sZW5ndGg6CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJWx1IHhhdHRyIGxlbmd0aCBpbmNvcnJlY3QiLAorCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXQgPSAtRUlPOworCWdvdG8gZXJyb3I7CisKK3N0YWxlOgorCXJldCA9IC1FU1RBTEU7CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHJlbW92ZSB0aGUgb2JqZWN0J3MgeGF0dHIgdG8gbWFyayBpdCBzdGFsZQorICovCitpbnQgY2FjaGVmaWxlc19yZW1vdmVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHJldDsKKworCXJldCA9IHZmc19yZW1vdmV4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0VOVCB8fCByZXQgPT0gLUVOT0RBVEEpCisJCQlyZXQgPSAwOworCQllbHNlIGlmIChyZXQgIT0gLUVOT01FTSkKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJCSAgICAiQ2FuJ3QgcmVtb3ZlIHhhdHRyIGZyb20gJWx1IgorCQkJCQkgICAgIiAoZXJyb3IgJWQpIiwKKwkJCQkJICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IDg3N2U0ZDkuLjdmMTlmZWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC00MDQsNyArNDA0LDYgQEAKIAlpZiAocHJvY19mc19jaWZzID09IE5VTEwpCiAJCXJldHVybjsKIAotCXByb2NfZnNfY2lmcy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwcm9jX2NyZWF0ZSgiRGVidWdEYXRhIiwgMCwgcHJvY19mc19jaWZzLCAmY2lmc19kZWJ1Z19kYXRhX3Byb2NfZm9wcyk7CiAKICNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggMmYzNWNjYy4uNTRkY2U3OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAlpZiAob3Bsb2NrRW5hYmxlZCkKIAkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIApAQCAtNDc5LDcgKzQ3OSw3IEBACiAJCXJjID0gLUVOT01FTTsKIAllbHNlIGlmIChwVGNvbi0+dW5peF9leHQpIHsKIAkJc3RydWN0IGNpZnNfdW5peF9zZXRfaW5mb19hcmdzIGFyZ3MgPSB7Ci0JCQkubW9kZQk9IG1vZGUgJiB+Y3VycmVudC0+ZnMtPnVtYXNrLAorCQkJLm1vZGUJPSBtb2RlICYgfmN1cnJlbnRfdW1hc2soKSwKIAkJCS5jdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCS5hdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCS5tdGltZQk9IE5PX0NIQU5HRV82NCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCBhODc5N2NjLi5mMTIxYTgwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC0xMTI1LDcgKzExMjUsNyBAQAogCQkJZ290byBta2Rpcl9vdXQ7CiAJCX0KIAotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAkJcmMgPSBDSUZTUE9TSVhDcmVhdGUoeGlkLCBwVGNvbiwgU01CX09fRElSRUNUT1JZIHwgU01CX09fQ1JFQVQsCiAJCQkJbW9kZSwgTlVMTCAvKiBuZXRmaWQgKi8sIHBJbmZvLCAmb3Bsb2NrLAogCQkJCWZ1bGxfcGF0aCwgY2lmc19zYi0+bG9jYWxfbmxzLApAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJaWYgKChkaXJlbnRyeS0+ZF9pbm9kZSkgJiYgKGRpcmVudHJ5LT5kX2lub2RlLT5pX25saW5rIDwgMikpCiAJCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAyOwogCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCQkvKiBtdXN0IHR1cm4gb24gc2V0Z2lkIGJpdCBpZiBwYXJlbnQgZGlyIGhhcyBpdCAqLwogCQlpZiAoaW5vZGUtPmlfbW9kZSAmIFNfSVNHSUQpCiAJCQltb2RlIHw9IFNfSVNHSUQ7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IDU1ZWZkZmUuLjFjODU5ZGEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMTE5NSwxNiArMTE5NiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdAotY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pCitzdGF0aWMgc2l6ZV90IGNvbXBhdF9yZWFkdihzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBmaWxlICpmaWxlOwogCXNzaXplX3QgcmV0ID0gLUVCQURGOwogCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJcmV0dXJuIC1FQkFERjsKLQogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQogCQlnb3RvIG91dDsKIApAQCAtMTIxMiwyNSArMTIwOSw1NiBAQAogCWlmICghZmlsZS0+Zl9vcCB8fCAoIWZpbGUtPmZfb3AtPmFpb19yZWFkICYmICFmaWxlLT5mX29wLT5yZWFkKSkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFJFQUQsIGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKKwlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFJFQUQsIGZpbGUsIHZlYywgdmxlbiwgcG9zKTsKIAogb3V0OgogCWlmIChyZXQgPiAwKQogCQlhZGRfcmNoYXIoY3VycmVudCwgcmV0KTsKIAlpbmNfc3lzY3IoY3VycmVudCk7Ci0JZnB1dChmaWxlKTsKIAlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIHNzaXplX3QKLWNvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbikKK2NvbXBhdF9zeXNfcmVhZHYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJIHVuc2lnbmVkIGxvbmcgdmxlbikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzc2l6ZV90IHJldCA9IC1FQkFERjsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3NpemVfdCByZXQ7CiAKLQlmaWxlID0gZmdldChmZCk7CisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF9yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZmaWxlLT5mX3Bvcyk7CisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBzc2l6ZV90Citjb21wYXRfc3lzX3ByZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdTMyIHBvc19oaWdoLCB1MzIgcG9zX2xvdykKK3sKKwlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcG9zX2hpZ2ggPDwgMzIpIHwgcG9zX2xvdzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3NpemVfdCByZXQ7CisKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF9yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZwb3MpOworCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QgY29tcGF0X3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgbG9mZl90ICpwb3MpCit7CisJc3NpemVfdCByZXQgPSAtRUJBREY7CisKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjM4LDEzICsxMjY2LDQ3IEBACiAJaWYgKCFmaWxlLT5mX29wIHx8ICghZmlsZS0+Zl9vcC0+YWlvX3dyaXRlICYmICFmaWxlLT5mX29wLT53cml0ZSkpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gY29tcGF0X2RvX3JlYWR2X3dyaXRldihXUklURSwgZmlsZSwgdmVjLCB2bGVuLCAmZmlsZS0+Zl9wb3MpOworCXJldCA9IGNvbXBhdF9kb19yZWFkdl93cml0ZXYoV1JJVEUsIGZpbGUsIHZlYywgdmxlbiwgcG9zKTsKIAogb3V0OgogCWlmIChyZXQgPiAwKQogCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsKIAlpbmNfc3lzY3coY3VycmVudCk7Ci0JZnB1dChmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHNzaXplX3QKK2NvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCSAgdW5zaWduZWQgbG9uZyB2bGVuKQoreworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBmcHV0X25lZWRlZDsKKwlzc2l6ZV90IHJldDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKwlyZXQgPSBjb21wYXRfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKKwlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHNzaXplX3QKK2NvbXBhdF9zeXNfcHdyaXRldih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfaGlnaCwgdTMyIHBvc19sb3cpCit7CisJbG9mZl90IHBvcyA9ICgobG9mZl90KXBvc19oaWdoIDw8IDMyKSB8IHBvc19sb3c7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGZwdXRfbmVlZGVkOworCXNzaXplX3QgcmV0OworCisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKwlyZXQgPSBjb21wYXRfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJnBvcyk7CisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ0MSwxMiArMTUwMywxNSBAQAogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKIAlpZiAoIWJwcm0tPmNyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQljaGVja191bnNhZmVfZXhlYyhicHJtKTsKKworCXJldHZhbCA9IGNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF91bm1hcms7CiAKIAlzY2hlZF9leGVjKCk7CiAKQEAgLTE0ODgsNiArMTU1Myw5IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwpAQCAtMTUwNiw2ICsxNTc0LDExIEBACiAJCWZwdXQoYnBybS0+ZmlsZSk7CiAJfQogCitvdXRfdW5tYXJrOgorCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKIG91dF91bmxvY2s6CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGZmNzg2NjguLjNlODdjZTQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggYTA3MzM4ZC4uZGQzNjM0ZSAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTMxOCw2ICszMTgsNyBAQAogc3RhdGljIGludCBjcmFtZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBDUkFNRlNfTUFHSUM7CiAJYnVmLT5mX2JzaXplID0gUEFHRV9DQUNIRV9TSVpFOwpAQCAtMzI2LDYgKzMyNyw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IDA7CiAJYnVmLT5mX2ZpbGVzID0gQ1JBTUZTX1NCKHNiKS0+ZmlsZXM7CiAJYnVmLT5mX2ZmcmVlID0gMDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IENSQU1GU19NQVhQQVRITEVOOwogCXJldHVybiAwOwogfQpAQCAtNDU5LDExICs0NjIsMTQgQEAKIHN0YXRpYyBpbnQgY3JhbWZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqIHBhZ2UpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JdTMyIG1heGJsb2NrLCBieXRlc19maWxsZWQ7CisJdTMyIG1heGJsb2NrOworCWludCBieXRlc19maWxsZWQ7CiAJdm9pZCAqcGdkYXRhOwogCiAJbWF4YmxvY2sgPSAoaW5vZGUtPmlfc2l6ZSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJYnl0ZXNfZmlsbGVkID0gMDsKKwlwZ2RhdGEgPSBrbWFwKHBhZ2UpOworCiAJaWYgKHBhZ2UtPmluZGV4IDwgbWF4YmxvY2spIHsKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCQl1MzIgYmxrcHRyX29mZnNldCA9IE9GRlNFVChpbm9kZSkgKyBwYWdlLT5pbmRleCo0OwpAQCAtNDcyLDMwICs0NzgsNDMgQEAKIAkJc3RhcnRfb2Zmc2V0ID0gT0ZGU0VUKGlub2RlKSArIG1heGJsb2NrKjQ7CiAJCW11dGV4X2xvY2soJnJlYWRfbXV0ZXgpOwogCQlpZiAocGFnZS0+aW5kZXgpCi0JCQlzdGFydF9vZmZzZXQgPSAqKHUzMiAqKSBjcmFtZnNfcmVhZChzYiwgYmxrcHRyX29mZnNldC00LCA0KTsKLQkJY29tcHJfbGVuID0gKCoodTMyICopIGNyYW1mc19yZWFkKHNiLCBibGtwdHJfb2Zmc2V0LCA0KSAtIHN0YXJ0X29mZnNldCk7CisJCQlzdGFydF9vZmZzZXQgPSAqKHUzMiAqKSBjcmFtZnNfcmVhZChzYiwgYmxrcHRyX29mZnNldC00LAorCQkJCTQpOworCQljb21wcl9sZW4gPSAoKih1MzIgKikgY3JhbWZzX3JlYWQoc2IsIGJsa3B0cl9vZmZzZXQsIDQpIC0KKwkJCXN0YXJ0X29mZnNldCk7CiAJCW11dGV4X3VubG9jaygmcmVhZF9tdXRleCk7Ci0JCXBnZGF0YSA9IGttYXAocGFnZSk7CisKIAkJaWYgKGNvbXByX2xlbiA9PSAwKQogCQkJOyAvKiBob2xlICovCi0JCWVsc2UgaWYgKGNvbXByX2xlbiA+IChQQUdFX0NBQ0hFX1NJWkUgPDwgMSkpCi0JCQlwcmludGsoS0VSTl9FUlIgImNyYW1mczogYmFkIGNvbXByZXNzZWQgYmxvY2tzaXplICV1XG4iLCBjb21wcl9sZW4pOwotCQllbHNlIHsKKwkJZWxzZSBpZiAodW5saWtlbHkoY29tcHJfbGVuID4gKFBBR0VfQ0FDSEVfU0laRSA8PCAxKSkpIHsKKwkJCXByX2VycigiY3JhbWZzOiBiYWQgY29tcHJlc3NlZCBibG9ja3NpemUgJXVcbiIsCisJCQkJY29tcHJfbGVuKTsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UgewogCQkJbXV0ZXhfbG9jaygmcmVhZF9tdXRleCk7CiAJCQlieXRlc19maWxsZWQgPSBjcmFtZnNfdW5jb21wcmVzc19ibG9jayhwZ2RhdGEsCiAJCQkJIFBBR0VfQ0FDSEVfU0laRSwKIAkJCQkgY3JhbWZzX3JlYWQoc2IsIHN0YXJ0X29mZnNldCwgY29tcHJfbGVuKSwKIAkJCQkgY29tcHJfbGVuKTsKIAkJCW11dGV4X3VubG9jaygmcmVhZF9tdXRleCk7CisJCQlpZiAodW5saWtlbHkoYnl0ZXNfZmlsbGVkIDwgMCkpCisJCQkJZ290byBlcnI7CiAJCX0KLQl9IGVsc2UKLQkJcGdkYXRhID0ga21hcChwYWdlKTsKKwl9CisKIAltZW1zZXQocGdkYXRhICsgYnl0ZXNfZmlsbGVkLCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBieXRlc19maWxsZWQpOwotCWt1bm1hcChwYWdlKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlrdW5tYXAocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOworCitlcnI6CisJa3VubWFwKHBhZ2UpOworCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY3JhbWZzX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9jcmFtZnMvdW5jb21wcmVzcy5jIGIvZnMvY3JhbWZzL3VuY29tcHJlc3MuYwppbmRleCBmYzNjY2I3Li4wMjMzMjk4IDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvdW5jb21wcmVzcy5jCisrKyBiL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIGVycjoKIAlwcmludGsoIkVycm9yICVkIHdoaWxlIGRlY29tcHJlc3NpbmchXG4iLCBlcnIpOwogCXByaW50aygiJXAoJWQpLT4lcCglZClcbiIsIHNyYywgc3JjbGVuLCBkc3QsIGRzdGxlbik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU87CiB9CiAKIGludCBjcmFtZnNfdW5jb21wcmVzc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDkwYmJkN2UuLjc2MWQzMGIgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlIF9fcmVhZF9tb3N0bHkgPSAxMDA7CmRpZmYgLS1naXQgYS9mcy9kcm9wX2NhY2hlcy5jIGIvZnMvZHJvcF9jYWNoZXMuYwppbmRleCA0NGQ3MjVmLi5iNmE3MTlhIDEwMDY0NAotLS0gYS9mcy9kcm9wX2NhY2hlcy5jCisrKyBiL2ZzL2Ryb3BfY2FjaGVzLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7CiAJCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzID09IDApCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCmluZGV4IGU0YTYyMjMuLmFmNzM3YmIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKKysrIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwpAQCAtNzQwLDggKzc0MCw3IEBACiBvdXRfcmVsZWFzZV9mcmVlX3VubG9jazoKIAljcnlwdG9fZnJlZV9oYXNoKHMtPmhhc2hfZGVzYy50Zm0pOwogb3V0X2ZyZWVfdW5sb2NrOgotCW1lbXNldChzLT5ibG9ja19hbGlnbmVkX2ZpbGVuYW1lLCAwLCBzLT5ibG9ja19hbGlnbmVkX2ZpbGVuYW1lX3NpemUpOwotCWtmcmVlKHMtPmJsb2NrX2FsaWduZWRfZmlsZW5hbWUpOworCWt6ZnJlZShzLT5ibG9ja19hbGlnbmVkX2ZpbGVuYW1lKTsKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKHMtPnRmbV9tdXRleCk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCmluZGV4IDk2ZWY1MTQuLjI5NWU3ZmE1IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYworKysgYi9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYwpAQCAtMjkxLDggKzI5MSw3IEBACiAJaWYgKGRhZW1vbi0+dXNlcl9ucykKIAkJcHV0X3VzZXJfbnMoZGFlbW9uLT51c2VyX25zKTsKIAltdXRleF91bmxvY2soJmRhZW1vbi0+bXV4KTsKLQltZW1zZXQoZGFlbW9uLCAwLCBzaXplb2YoKmRhZW1vbikpOwotCWtmcmVlKGRhZW1vbik7CisJa3pmcmVlKGRhZW1vbik7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWZzL3N1cGVyLmMgYi9mcy9lZnMvc3VwZXIuYwppbmRleCA3M2IxOWNmLi5mMDQ5NDI4IDEwMDY0NAotLS0gYS9mcy9lZnMvc3VwZXIuYworKysgYi9mcy9lZnMvc3VwZXIuYwpAQCAtMzI5LDE4ICszMjksMjIgQEAKIH0KIAogc3RhdGljIGludCBlZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikgewotCXN0cnVjdCBlZnNfc2JfaW5mbyAqc2IgPSBTVVBFUl9JTkZPKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgZWZzX3NiX2luZm8gKnNiaSA9IFNVUEVSX0lORk8oc2IpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgICAgPSBFRlNfU1VQRVJfTUFHSUM7CS8qIGVmcyBtYWdpYyBudW1iZXIgKi8KIAlidWYtPmZfYnNpemUgICA9IEVGU19CTE9DS1NJWkU7CQkvKiBibG9ja3NpemUgKi8KLQlidWYtPmZfYmxvY2tzICA9IHNiLT50b3RhbF9ncm91cHMgKgkvKiB0b3RhbCBkYXRhIGJsb2NrcyAqLwotCQkJKHNiLT5ncm91cF9zaXplIC0gc2ItPmlub2RlX2Jsb2Nrcyk7Ci0JYnVmLT5mX2JmcmVlICAgPSBzYi0+ZGF0YV9mcmVlOwkJLyogZnJlZSBkYXRhIGJsb2NrcyAqLwotCWJ1Zi0+Zl9iYXZhaWwgID0gc2ItPmRhdGFfZnJlZTsJCS8qIGZyZWUgYmxvY2tzIGZvciBub24tcm9vdCAqLwotCWJ1Zi0+Zl9maWxlcyAgID0gc2ItPnRvdGFsX2dyb3VwcyAqCS8qIHRvdGFsIGlub2RlcyAqLwotCQkJc2ItPmlub2RlX2Jsb2NrcyAqCisJYnVmLT5mX2Jsb2NrcyAgPSBzYmktPnRvdGFsX2dyb3VwcyAqCS8qIHRvdGFsIGRhdGEgYmxvY2tzICovCisJCQkoc2JpLT5ncm91cF9zaXplIC0gc2JpLT5pbm9kZV9ibG9ja3MpOworCWJ1Zi0+Zl9iZnJlZSAgID0gc2JpLT5kYXRhX2ZyZWU7CS8qIGZyZWUgZGF0YSBibG9ja3MgKi8KKwlidWYtPmZfYmF2YWlsICA9IHNiaS0+ZGF0YV9mcmVlOwkvKiBmcmVlIGJsb2NrcyBmb3Igbm9uLXJvb3QgKi8KKwlidWYtPmZfZmlsZXMgICA9IHNiaS0+dG90YWxfZ3JvdXBzICoJLyogdG90YWwgaW5vZGVzICovCisJCQlzYmktPmlub2RlX2Jsb2NrcyAqCiAJCQkoRUZTX0JMT0NLU0laRSAvIHNpemVvZihzdHJ1Y3QgZWZzX2Rpbm9kZSkpOwotCWJ1Zi0+Zl9mZnJlZSAgID0gc2ItPmlub2RlX2ZyZWU7CS8qIGZyZWUgaW5vZGVzICovCisJYnVmLT5mX2ZmcmVlICAgPSBzYmktPmlub2RlX2ZyZWU7CS8qIGZyZWUgaW5vZGVzICovCisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAJYnVmLT5mX25hbWVsZW4gPSBFRlNfTUFYTkFNRUxFTjsJLyogbWF4IGZpbGVuYW1lIGxlbmd0aCAqLwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKaW5kZXggNWRlMmMyZC4uMmE3MDFkNSAxMDA2NDQKLS0tIGEvZnMvZXZlbnRmZC5jCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtMjgsNiArMjgsNyBAQAogCSAqIGlzc3VlIGEgd2FrZXVwLgogCSAqLwogCV9fdTY0IGNvdW50OworCXVuc2lnbmVkIGludCBmbGFnczsKIH07CiAKIC8qCkBAIC01MCw3ICs1MSw3IEBACiAJCW4gPSAoaW50KSAoVUxMT05HX01BWCAtIGN0eC0+Y291bnQpOwogCWN0eC0+Y291bnQgKz0gbjsKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY3R4LT53cWgpKQotCQl3YWtlX3VwX2xvY2tlZCgmY3R4LT53cWgpOworCQl3YWtlX3VwX2xvY2tlZF9wb2xsKCZjdHgtPndxaCwgUE9MTElOKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPndxaC5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbjsKQEAgLTg3LDIyICs4OCwyMCBAQAogewogCXN0cnVjdCBldmVudGZkX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXNzaXplX3QgcmVzOwotCV9fdTY0IHVjbnQ7CisJX191NjQgdWNudCA9IDA7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKIAlpZiAoY291bnQgPCBzaXplb2YodWNudCkpCiAJCXJldHVybiAtRUlOVkFMOwogCXNwaW5fbG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOwogCXJlcyA9IC1FQUdBSU47Ci0JdWNudCA9IGN0eC0+Y291bnQ7Ci0JaWYgKHVjbnQgPiAwKQorCWlmIChjdHgtPmNvdW50ID4gMCkKIAkJcmVzID0gc2l6ZW9mKHVjbnQpOwogCWVsc2UgaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CiAJCV9fYWRkX3dhaXRfcXVldWUoJmN0eC0+d3FoLCAmd2FpdCk7CiAJCWZvciAocmVzID0gMDs7KSB7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJaWYgKGN0eC0+Y291bnQgPiAwKSB7Ci0JCQkJdWNudCA9IGN0eC0+Y291bnQ7CiAJCQkJcmVzID0gc2l6ZW9mKHVjbnQpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE3LDEwICsxMTYsMTEgQEAKIAkJX19yZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0KLQlpZiAocmVzID4gMCkgewotCQljdHgtPmNvdW50ID0gMDsKKwlpZiAobGlrZWx5KHJlcyA+IDApKSB7CisJCXVjbnQgPSAoY3R4LT5mbGFncyAmIEVGRF9TRU1BUEhPUkUpID8gMSA6IGN0eC0+Y291bnQ7CisJCWN0eC0+Y291bnQgLT0gdWNudDsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN0eC0+d3FoKSkKLQkJCXdha2VfdXBfbG9ja2VkKCZjdHgtPndxaCk7CisJCQl3YWtlX3VwX2xvY2tlZF9wb2xsKCZjdHgtPndxaCwgUE9MTE9VVCk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmY3R4LT53cWgubG9jayk7CiAJaWYgKHJlcyA+IDAgJiYgcHV0X3VzZXIodWNudCwgKF9fdTY0IF9fdXNlciAqKSBidWYpKQpAQCAtMTY2LDEwICsxNjYsMTAgQEAKIAkJX19yZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT53cWgsICZ3YWl0KTsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0KLQlpZiAocmVzID4gMCkgeworCWlmIChsaWtlbHkocmVzID4gMCkpIHsKIAkJY3R4LT5jb3VudCArPSB1Y250OwogCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmY3R4LT53cWgpKQotCQkJd2FrZV91cF9sb2NrZWQoJmN0eC0+d3FoKTsKKwkJCXdha2VfdXBfbG9ja2VkX3BvbGwoJmN0eC0+d3FoLCBQT0xMSU4pOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOwogCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlCVUlMRF9CVUdfT04oRUZEX0NMT0VYRUMgIT0gT19DTE9FWEVDKTsKIAlCVUlMRF9CVUdfT04oRUZEX05PTkJMT0NLICE9IE9fTk9OQkxPQ0spOwogCi0JaWYgKGZsYWdzICYgfihFRkRfQ0xPRVhFQyB8IEVGRF9OT05CTE9DSykpCisJaWYgKGZsYWdzICYgfkVGRF9GTEFHU19TRVQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJY3R4ID0ga21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwpAQCAtMjE2LDEzICsyMTYsMTQgQEAKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmN0eC0+d3FoKTsKIAljdHgtPmNvdW50ID0gY291bnQ7CisJY3R4LT5mbGFncyA9IGZsYWdzOwogCiAJLyoKIAkgKiBXaGVuIHdlIGNhbGwgdGhpcywgdGhlIGluaXRpYWxpemF0aW9uIG11c3QgYmUgY29tcGxldGUsIHNpbmNlCiAJICogYW5vbl9pbm9kZV9nZXRmZCgpIHdpbGwgaW5zdGFsbCB0aGUgZmQuCiAJICovCiAJZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbZXZlbnRmZF0iLCAmZXZlbnRmZF9mb3BzLCBjdHgsCi0JCQkgICAgICBmbGFncyAmIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKSk7CisJCQkgICAgICBmbGFncyAmIEVGRF9TSEFSRURfRkNOVExfRkxBR1MpOwogCWlmIChmZCA8IDApCiAJCWtmcmVlKGN0eCk7CiAJcmV0dXJuIGZkOwpAQCAtMjMyLDMgKzIzMyw0IEBACiB7CiAJcmV0dXJuIHN5c19ldmVudGZkMihjb3VudCwgMCk7CiB9CisKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggYzVjNDI0Zi4uYTg5ZjM3MCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogIGZzL2V2ZW50cG9sbC5jIChFZmZpY2VudCBldmVudCBwb2xsaW5nIGltcGxlbWVudGF0aW9uKQotICogIENvcHlyaWdodCAoQykgMjAwMSwuLi4sMjAwNwkgRGF2aWRlIExpYmVuemkKKyAqICBmcy9ldmVudHBvbGwuYyAoRWZmaWNpZW50IGV2ZW50IHJldHJpZXZhbCBpbXBsZW1lbnRhdGlvbikKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsLi4uLDIwMDkJIERhdmlkZSBMaWJlbnppCiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTcxLDI5ICs3MSwxMSBAQAogICogYSBiZXR0ZXIgc2NhbGFiaWxpdHkuCiAgKi8KIAotI2RlZmluZSBERUJVR19FUE9MTCAwCi0KLSNpZiBERUJVR19FUE9MTCA+IDAKLSNkZWZpbmUgRFBSSU5USyh4KSBwcmludGsgeAotI2RlZmluZSBETlBSSU5USyhuLCB4KSBkbyB7IGlmICgobikgPD0gREVCVUdfRVBPTEwpIHByaW50ayB4OyB9IHdoaWxlICgwKQotI2Vsc2UgLyogI2lmIERFQlVHX0VQT0xMID4gMCAqLwotI2RlZmluZSBEUFJJTlRLKHgpICh2b2lkKSAwCi0jZGVmaW5lIEROUFJJTlRLKG4sIHgpICh2b2lkKSAwCi0jZW5kaWYgLyogI2lmIERFQlVHX0VQT0xMID4gMCAqLwotCi0jZGVmaW5lIERFQlVHX0VQSSAwCi0KLSNpZiBERUJVR19FUEkgIT0gMAotI2RlZmluZSBFUElfU0xBQl9ERUJVRyAoU0xBQl9ERUJVR19GUkVFIHwgU0xBQl9SRURfWk9ORSAvKiB8IFNMQUJfUE9JU09OICovKQotI2Vsc2UgLyogI2lmIERFQlVHX0VQSSAhPSAwICovCi0jZGVmaW5lIEVQSV9TTEFCX0RFQlVHIDAKLSNlbmRpZiAvKiAjaWYgREVCVUdfRVBJICE9IDAgKi8KLQogLyogRXBvbGwgcHJpdmF0ZSBiaXRzIGluc2lkZSB0aGUgZXZlbnQgbWFzayAqLwogI2RlZmluZSBFUF9QUklWQVRFX0JJVFMgKEVQT0xMT05FU0hPVCB8IEVQT0xMRVQpCiAKLS8qIE1heGltdW0gbnVtYmVyIG9mIHBvbGwgd2FrZSB1cCBuZXN0cyB3ZSBhcmUgYWxsb3dpbmcgKi8KLSNkZWZpbmUgRVBfTUFYX1BPTExXQUtFX05FU1RTIDQKKy8qIE1heGltdW0gbnVtYmVyIG9mIG5lc3RpbmcgYWxsb3dlZCBpbnNpZGUgZXBvbGwgc2V0cyAqLworI2RlZmluZSBFUF9NQVhfTkVTVFMgNAogCiAvKiBNYXhpbXVtIG1zZWMgdGltZW91dCB2YWx1ZSBzdG9yZWFibGUgaW4gYSBsb25nIGludCAqLwogI2RlZmluZSBFUF9NQVhfTVNUSU1FTyBtaW4oMTAwMFVMTCAqIE1BWF9TQ0hFRFVMRV9USU1FT1VUIC8gSFosIChMT05HX01BWCAtIDk5OVVMTCkgLyBIWikKQEAgLTExMCwyNCArOTIsMjEgQEAKIH07CiAKIC8qCi0gKiBOb2RlIHRoYXQgaXMgbGlua2VkIGludG8gdGhlICJ3YWtlX3Rhc2tfbGlzdCIgbWVtYmVyIG9mIHRoZSAic3RydWN0IHBvbGxfc2FmZXdha2UiLgotICogSXQgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9uIGFsbCB0YXNrcyB0aGF0IGFyZSBjdXJyZW50bHkgaW5zaWRlIHRoZSB3YWtlX3VwKCkgY29kZQotICogdG8gMSkgc2hvcnQtY2lyY3VpdCB0aGUgb25lIGNvbWluZyBmcm9tIHRoZSBzYW1lIHRhc2sgYW5kIHNhbWUgd2FpdCBxdWV1ZSBoZWFkCi0gKiAobG9vcCkgMikgYWxsb3cgYSBtYXhpbXVtIG51bWJlciBvZiBlcG9sbCBkZXNjcmlwdG9ycyBpbmNsdXNpb24gbmVzdGluZwotICogMykgbGV0IGdvIHRoZSBvbmVzIGNvbWluZyBmcm9tIG90aGVyIHRhc2tzLgorICogU3RydWN0dXJlIHVzZWQgdG8gdHJhY2sgcG9zc2libGUgbmVzdGVkIGNhbGxzLCBmb3IgdG9vIGRlZXAgcmVjdXJzaW9ucworICogYW5kIGxvb3AgY3ljbGVzLgogICovCi1zdHJ1Y3Qgd2FrZV90YXNrX25vZGUgeworc3RydWN0IG5lc3RlZF9jYWxsX25vZGUgewogCXN0cnVjdCBsaXN0X2hlYWQgbGxpbms7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXdhaXRfcXVldWVfaGVhZF90ICp3cTsKKwl2b2lkICpjb29raWU7CisJaW50IGNwdTsKIH07CiAKIC8qCi0gKiBUaGlzIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBzYWZlIHBvbGwgd2FrZSB1cCBhdm9pZGluZyB0byByZWVudGVyCi0gKiB0aGUgcG9sbCBjYWxsYmFjayBmcm9tIGluc2lkZSB3YWtlX3VwKCkuCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGFzIGNvbGxlY3RvciBmb3IgbmVzdGVkIGNhbGxzLCB0byBjaGVjayBmb3IKKyAqIG1heGltdW0gcmVjdXJzaW9uIGRlcHQgYW5kIGxvb3AgY3ljbGVzLgogICovCi1zdHJ1Y3QgcG9sbF9zYWZld2FrZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCB3YWtlX3Rhc2tfbGlzdDsKK3N0cnVjdCBuZXN0ZWRfY2FsbHMgeworCXN0cnVjdCBsaXN0X2hlYWQgdGFza3NfY2FsbF9saXN0OwogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKQEAgLTIxMyw3ICsxOTIsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGxpbms7CiAKIAkvKiBUaGUgImJhc2UiIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBjb250YWluZXIgInN0cnVjdCBlcGl0ZW0iICovCi0Jdm9pZCAqYmFzZTsKKwlzdHJ1Y3QgZXBpdGVtICpiYXNlOwogCiAJLyoKIAkgKiBXYWl0IHF1ZXVlIGl0ZW0gdGhhdCB3aWxsIGJlIGxpbmtlZCB0byB0aGUgdGFyZ2V0IGZpbGUgd2FpdApAQCAtMjMxLDYgKzIxMCwxMiBAQAogCXN0cnVjdCBlcGl0ZW0gKmVwaTsKIH07CiAKKy8qIFVzZWQgYnkgdGhlIGVwX3NlbmRfZXZlbnRzKCkgZnVuY3Rpb24gYXMgY2FsbGJhY2sgcHJpdmF0ZSBkYXRhICovCitzdHJ1Y3QgZXBfc2VuZF9ldmVudHNfZGF0YSB7CisJaW50IG1heGV2ZW50czsKKwlzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHM7Cit9OworCiAvKgogICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZSBpbnNpZGUgL3Byb2Mvc3lzL2ZzL2Vwb2xsLwogICovCkBAIC0yNDIsOCArMjI3LDExIEBACiAgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoZXBtdXRleCk7CiAKLS8qIFNhZmUgd2FrZSB1cCBpbXBsZW1lbnRhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBwb2xsX3NhZmV3YWtlIHBzdzsKKy8qIFVzZWQgZm9yIHNhZmUgd2FrZSB1cCBpbXBsZW1lbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBuZXN0ZWRfY2FsbHMgcG9sbF9zYWZld2FrZV9uY2FsbHM7CisKKy8qIFVzZWQgdG8gY2FsbCBmaWxlJ3MgZl9vcC0+cG9sbCgpIHVuZGVyIHRoZSBuZXN0ZWQgY2FsbHMgYm91bmRhcmllcyAqLworc3RhdGljIHN0cnVjdCBuZXN0ZWRfY2FsbHMgcG9sbF9yZWFkeXdhbGtfbmNhbGxzOwogCiAvKiBTbGFiIGNhY2hlIHVzZWQgdG8gYWxsb2NhdGUgInN0cnVjdCBlcGl0ZW0iICovCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmVwaV9jYWNoZSBfX3JlYWRfbW9zdGx5OwpAQCAtMzEyLDExICszMDAsMTAwIEBACiB9CiAKIC8qIEluaXRpYWxpemUgdGhlIHBvbGwgc2FmZSB3YWtlIHVwIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgZXBfcG9sbF9zYWZld2FrZV9pbml0KHN0cnVjdCBwb2xsX3NhZmV3YWtlICpwc3cpCitzdGF0aWMgdm9pZCBlcF9uZXN0ZWRfY2FsbHNfaW5pdChzdHJ1Y3QgbmVzdGVkX2NhbGxzICpuY2FsbHMpCiB7CisJSU5JVF9MSVNUX0hFQUQoJm5jYWxscy0+dGFza3NfY2FsbF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmbmNhbGxzLT5sb2NrKTsKK30KIAotCUlOSVRfTElTVF9IRUFEKCZwc3ctPndha2VfdGFza19saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmcHN3LT5sb2NrKTsKKy8qKgorICogZXBfY2FsbF9uZXN0ZWQgLSBQZXJmb3JtIGEgYm91bmQgKHBvc3NpYmx5KSBuZXN0ZWQgY2FsbCwgYnkgY2hlY2tpbmcKKyAqICAgICAgICAgICAgICAgICAgdGhhdCB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIG5vdCBleGNlZWRlZCwgYW5kIHRoYXQKKyAqICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgbmVzdGVkIGNhbGwgKGJ5IHRoZSBtZWFuaW5nIG9mIHNhbWUgY29va2llKSBpcworICogICAgICAgICAgICAgICAgICBubyByZS1lbnRlcmVkLgorICoKKyAqIEBuY2FsbHM6IFBvaW50ZXIgdG8gdGhlIG5lc3RlZF9jYWxscyBzdHJ1Y3R1cmUgdG8gYmUgdXNlZCBmb3IgdGhpcyBjYWxsLgorICogQG1heF9uZXN0czogTWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCBuZXN0aW5nIGNhbGxzLgorICogQG5wcm9jOiBOZXN0ZWQgY2FsbCBjb3JlIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBAcHJpdjogT3BhcXVlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBAbnByb2MgY2FsbGJhY2suCisgKiBAY29va2llOiBDb29raWUgdG8gYmUgdXNlZCB0byBpZGVudGlmeSB0aGlzIG5lc3RlZCBjYWxsLgorICoKKyAqIFJldHVybnM6IFJldHVybnMgdGhlIGNvZGUgcmV0dXJuZWQgYnkgdGhlIEBucHJvYyBjYWxsYmFjaywgb3IgLTEgaWYKKyAqICAgICAgICAgIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBoYXMgYmVlbiBleGNlZWRlZC4KKyAqLworc3RhdGljIGludCBlcF9jYWxsX25lc3RlZChzdHJ1Y3QgbmVzdGVkX2NhbGxzICpuY2FsbHMsIGludCBtYXhfbmVzdHMsCisJCQkgIGludCAoKm5wcm9jKSh2b2lkICosIHZvaWQgKiwgaW50KSwgdm9pZCAqcHJpdiwKKwkJCSAgdm9pZCAqY29va2llKQoreworCWludCBlcnJvciwgY2FsbF9uZXN0cyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdGhpc19jcHUgPSBnZXRfY3B1KCk7CisJc3RydWN0IGxpc3RfaGVhZCAqbHN0aGVhZCA9ICZuY2FsbHMtPnRhc2tzX2NhbGxfbGlzdDsKKwlzdHJ1Y3QgbmVzdGVkX2NhbGxfbm9kZSAqdG5jdXI7CisJc3RydWN0IG5lc3RlZF9jYWxsX25vZGUgdG5vZGU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbmNhbGxzLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIFRyeSB0byBzZWUgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbHJlYWR5IGluc2lkZSB0aGlzIHdha2V1cCBjYWxsLgorCSAqIFdlIHVzZSBhIGxpc3QgaGVyZSwgc2luY2UgdGhlIHBvcHVsYXRpb24gaW5zaWRlIHRoaXMgc2V0IGlzIGFsd2F5cworCSAqIHZlcnkgbXVjaCBsaW1pdGVkLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG5jdXIsIGxzdGhlYWQsIGxsaW5rKSB7CisJCWlmICh0bmN1ci0+Y3B1ID09IHRoaXNfY3B1ICYmCisJCSAgICAodG5jdXItPmNvb2tpZSA9PSBjb29raWUgfHwgKytjYWxsX25lc3RzID4gbWF4X25lc3RzKSkgeworCQkJLyoKKwkJCSAqIE9wcyAuLi4gbG9vcCBkZXRlY3RlZCBvciBtYXhpbXVtIG5lc3QgbGV2ZWwgcmVhY2hlZC4KKwkJCSAqIFdlIGFib3J0IHRoaXMgd2FrZSBieSBicmVha2luZyB0aGUgY3ljbGUgaXRzZWxmLgorCQkJICovCisJCQllcnJvciA9IC0xOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfQorCisJLyogQWRkIHRoZSBjdXJyZW50IHRhc2sgYW5kIGNvb2tpZSB0byB0aGUgbGlzdCAqLworCXRub2RlLmNwdSA9IHRoaXNfY3B1OworCXRub2RlLmNvb2tpZSA9IGNvb2tpZTsKKwlsaXN0X2FkZCgmdG5vZGUubGxpbmssIGxzdGhlYWQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmNhbGxzLT5sb2NrLCBmbGFncyk7CisKKwkvKiBDYWxsIHRoZSBuZXN0ZWQgZnVuY3Rpb24gKi8KKwllcnJvciA9ICgqbnByb2MpKHByaXYsIGNvb2tpZSwgY2FsbF9uZXN0cyk7CisKKwkvKiBSZW1vdmUgdGhlIGN1cnJlbnQgdGFzayBmcm9tIHRoZSBsaXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5jYWxscy0+bG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZ0bm9kZS5sbGluayk7Cisgb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuY2FsbHMtPmxvY2ssIGZsYWdzKTsKKworCXB1dF9jcHUoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworc3RhdGljIGlubGluZSB2b2lkIGVwX3dha2VfdXBfbmVzdGVkKHdhaXRfcXVldWVfaGVhZF90ICp3cXVldWUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50cywgaW50IHN1YmNsYXNzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQoJndxdWV1ZS0+bG9jaywgZmxhZ3MsIHN1YmNsYXNzKTsKKwl3YWtlX3VwX2xvY2tlZF9wb2xsKHdxdWV1ZSwgZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cXVldWUtPmxvY2ssIGZsYWdzKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZXBfd2FrZV91cF9uZXN0ZWQod2FpdF9xdWV1ZV9oZWFkX3QgKndxdWV1ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzLCBpbnQgc3ViY2xhc3MpCit7CisJd2FrZV91cF9wb2xsKHdxdWV1ZSwgZXZlbnRzKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGVwX3BvbGxfd2FrZXVwX3Byb2Modm9pZCAqcHJpdiwgdm9pZCAqY29va2llLCBpbnQgY2FsbF9uZXN0cykKK3sKKwllcF93YWtlX3VwX25lc3RlZCgod2FpdF9xdWV1ZV9oZWFkX3QgKikgY29va2llLCBQT0xMSU4sCisJCQkgIDEgKyBjYWxsX25lc3RzKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTMyNCw3OSArNDAxLDEzMSBAQAogICogd2l0aCB0aGUgbmV3IGNhbGxiYWNrJ2Qgd2FrZSB1cCBzeXN0ZW0sIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlCiAgKiBwb2xsIGNhbGxiYWNrIGlzIHJlZW50ZXJlZCBmcm9tIGluc2lkZSB0aGUgY2FsbCB0byB3YWtlX3VwKCkgZG9uZQogICogb24gdGhlIHBvbGwgd2FpdCBxdWV1ZSBoZWFkLiBUaGUgcnVsZSBpcyB0aGF0IHdlIGNhbm5vdCByZWVudGVyIHRoZQotICogd2FrZSB1cCBjb2RlIGZyb20gdGhlIHNhbWUgdGFzayBtb3JlIHRoYW4gRVBfTUFYX1BPTExXQUtFX05FU1RTIHRpbWVzLAorICogd2FrZSB1cCBjb2RlIGZyb20gdGhlIHNhbWUgdGFzayBtb3JlIHRoYW4gRVBfTUFYX05FU1RTIHRpbWVzLAogICogYW5kIHdlIGNhbm5vdCByZWVudGVyIHRoZSBzYW1lIHdhaXQgcXVldWUgaGVhZCBhdCBhbGwuIFRoaXMgd2lsbAogICogZW5hYmxlIHRvIGhhdmUgYSBoaWVyYXJjaHkgb2YgZXBvbGwgZmlsZSBkZXNjcmlwdG9yIG9mIG5vIG1vcmUgdGhhbgotICogRVBfTUFYX1BPTExXQUtFX05FU1RTIGRlZXAuIFdlIG5lZWQgdGhlIGlycSB2ZXJzaW9uIG9mIHRoZSBzcGluIGxvY2sKLSAqIGJlY2F1c2UgdGhpcyBvbmUgZ2V0cyBjYWxsZWQgYnkgdGhlIHBvbGwgY2FsbGJhY2ssIHRoYXQgaW4gdHVybiBpcyBjYWxsZWQKLSAqIGZyb20gaW5zaWRlIGEgd2FrZV91cCgpLCB0aGF0IG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGlycSBjb250ZXh0LgorICogRVBfTUFYX05FU1RTIGRlZXAuCiAgKi8KLXN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uoc3RydWN0IHBvbGxfc2FmZXdha2UgKnBzdywgd2FpdF9xdWV1ZV9oZWFkX3QgKndxKQorc3RhdGljIHZvaWQgZXBfcG9sbF9zYWZld2FrZSh3YWl0X3F1ZXVlX2hlYWRfdCAqd3EpCiB7Ci0JaW50IHdha2VfbmVzdHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0aGlzX3Rhc2sgPSBjdXJyZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxzdGhlYWQgPSAmcHN3LT53YWtlX3Rhc2tfbGlzdDsKLQlzdHJ1Y3Qgd2FrZV90YXNrX25vZGUgKnRuY3VyOwotCXN0cnVjdCB3YWtlX3Rhc2tfbm9kZSB0bm9kZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwc3ctPmxvY2ssIGZsYWdzKTsKLQotCS8qIFRyeSB0byBzZWUgaWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbHJlYWR5IGluc2lkZSB0aGlzIHdha2V1cCBjYWxsICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bmN1ciwgbHN0aGVhZCwgbGxpbmspIHsKLQotCQlpZiAodG5jdXItPndxID09IHdxIHx8Ci0JCSAgICAodG5jdXItPnRhc2sgPT0gdGhpc190YXNrICYmICsrd2FrZV9uZXN0cyA+IEVQX01BWF9QT0xMV0FLRV9ORVNUUykpIHsKLQkJCS8qCi0JCQkgKiBPcHMgLi4uIGxvb3AgZGV0ZWN0ZWQgb3IgbWF4aW11bSBuZXN0IGxldmVsIHJlYWNoZWQuCi0JCQkgKiBXZSBhYm9ydCB0aGlzIHdha2UgYnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGl0c2VsZi4KLQkJCSAqLwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHN3LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBBZGQgdGhlIGN1cnJlbnQgdGFzayB0byB0aGUgbGlzdCAqLwotCXRub2RlLnRhc2sgPSB0aGlzX3Rhc2s7Ci0JdG5vZGUud3EgPSB3cTsKLQlsaXN0X2FkZCgmdG5vZGUubGxpbmssIGxzdGhlYWQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHN3LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBEbyByZWFsbHkgd2FrZSB1cCBub3cgKi8KLQl3YWtlX3VwX25lc3RlZCh3cSwgMSArIHdha2VfbmVzdHMpOwotCi0JLyogUmVtb3ZlIHRoZSBjdXJyZW50IHRhc2sgZnJvbSB0aGUgbGlzdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwc3ctPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmdG5vZGUubGxpbmspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzdy0+bG9jaywgZmxhZ3MpOworCWVwX2NhbGxfbmVzdGVkKCZwb2xsX3NhZmV3YWtlX25jYWxscywgRVBfTUFYX05FU1RTLAorCQkgICAgICAgZXBfcG9sbF93YWtldXBfcHJvYywgTlVMTCwgd3EpOwogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVyIHBvbGwgY2FsbGJhY2tzIGZyb20gdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLgotICogU2luY2UgdGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgImVwLT5sb2NrIiB0aGUgYXRvbWljIGV4Y2hhbmdlIHRyaWNrCi0gKiB3aWxsIHByb3RlY3QgdXMgZnJvbSBtdWx0aXBsZSB1bnJlZ2lzdGVyLgorICogVGhpcyBmdW5jdGlvbiB1bnJlZ2lzdGVycyBwb2xsIGNhbGxiYWNrcyBmcm9tIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAqIGRlc2NyaXB0b3IuICBNdXN0IGJlIGNhbGxlZCB3aXRoICJtdHgiIGhlbGQgKG9yICJlcG11dGV4IiBpZiBjYWxsZWQgZnJvbQorICogZXBfZnJlZSkuCiAgKi8KIHN0YXRpYyB2b2lkIGVwX3VucmVnaXN0ZXJfcG9sbHdhaXQoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcGl0ZW0gKmVwaSkKIHsKLQlpbnQgbndhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHN0aGVhZCA9ICZlcGktPnB3cWxpc3Q7CiAJc3RydWN0IGVwcG9sbF9lbnRyeSAqcHdxOwogCi0JLyogVGhpcyBpcyBjYWxsZWQgd2l0aG91dCBsb2Nrcywgc28gd2UgbmVlZCB0aGUgYXRvbWljIGV4Y2hhbmdlICovCi0JbndhaXQgPSB4Y2hnKCZlcGktPm53YWl0LCAwKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkobHN0aGVhZCkpIHsKKwkJcHdxID0gbGlzdF9maXJzdF9lbnRyeShsc3RoZWFkLCBzdHJ1Y3QgZXBwb2xsX2VudHJ5LCBsbGluayk7CiAKLQlpZiAobndhaXQpIHsKLQkJd2hpbGUgKCFsaXN0X2VtcHR5KGxzdGhlYWQpKSB7Ci0JCQlwd3EgPSBsaXN0X2ZpcnN0X2VudHJ5KGxzdGhlYWQsIHN0cnVjdCBlcHBvbGxfZW50cnksIGxsaW5rKTsKLQotCQkJbGlzdF9kZWxfaW5pdCgmcHdxLT5sbGluayk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZShwd3EtPndoZWFkLCAmcHdxLT53YWl0KTsKLQkJCWttZW1fY2FjaGVfZnJlZShwd3FfY2FjaGUsIHB3cSk7Ci0JCX0KKwkJbGlzdF9kZWwoJnB3cS0+bGxpbmspOworCQlyZW1vdmVfd2FpdF9xdWV1ZShwd3EtPndoZWFkLCAmcHdxLT53YWl0KTsKKwkJa21lbV9jYWNoZV9mcmVlKHB3cV9jYWNoZSwgcHdxKTsKIAl9CiB9CiAKKy8qKgorICogZXBfc2Nhbl9yZWFkeV9saXN0IC0gU2NhbnMgdGhlIHJlYWR5IGxpc3QgaW4gYSB3YXkgdGhhdCBtYWtlcyBwb3NzaWJsZSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBzY2FuIGNvZGUsIHRvIGNhbGwgZl9vcC0+cG9sbCgpLiBBbHNvIGFsbG93cyBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE8oTnVtUmVhZHkpIHBlcmZvcm1hbmNlLgorICoKKyAqIEBlcDogUG9pbnRlciB0byB0aGUgZXBvbGwgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBzcHJvYzogUG9pbnRlciB0byB0aGUgc2NhbiBjYWxsYmFjay4KKyAqIEBwcml2OiBQcml2YXRlIG9wYXF1ZSBkYXRhIHBhc3NlZCB0byB0aGUgQHNwcm9jIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6IFRoZSBzYW1lIGludGVnZXIgZXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgQHNwcm9jIGNhbGxiYWNrLgorICovCitzdGF0aWMgaW50IGVwX3NjYW5fcmVhZHlfbGlzdChzdHJ1Y3QgZXZlbnRwb2xsICplcCwKKwkJCSAgICAgIGludCAoKnNwcm9jKShzdHJ1Y3QgZXZlbnRwb2xsICosCisJCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKiwgdm9pZCAqKSwKKwkJCSAgICAgIHZvaWQgKnByaXYpCit7CisJaW50IGVycm9yLCBwd2FrZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXBpdGVtICplcGksICpuZXBpOworCUxJU1RfSEVBRCh0eGxpc3QpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIGxvY2sgdGhpcyBiZWNhdXNlIHdlIGNvdWxkIGJlIGhpdCBieQorCSAqIGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKSBhbmQgZXBvbGxfY3RsKCkuCisJICovCisJbXV0ZXhfbG9jaygmZXAtPm10eCk7CisKKwkvKgorCSAqIFN0ZWFsIHRoZSByZWFkeSBsaXN0LCBhbmQgcmUtaW5pdCB0aGUgb3JpZ2luYWwgb25lIHRvIHRoZQorCSAqIGVtcHR5IGxpc3QuIEFsc28sIHNldCBlcC0+b3ZmbGlzdCB0byBOVUxMIHNvIHRoYXQgZXZlbnRzCisJICogaGFwcGVuaW5nIHdoaWxlIGxvb3Bpbmcgdy9vdXQgbG9ja3MsIGFyZSBub3QgbG9zdC4gV2UgY2Fubm90CisJICogaGF2ZSB0aGUgcG9sbCBjYWxsYmFjayB0byBxdWV1ZSBkaXJlY3RseSBvbiBlcC0+cmRsbGlzdCwKKwkgKiBiZWNhdXNlIHdlIHdhbnQgdGhlICJzcHJvYyIgY2FsbGJhY2sgdG8gYmUgYWJsZSB0byBkbyBpdAorCSAqIGluIGEgbG9ja2xlc3Mgd2F5LgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlX2luaXQoJmVwLT5yZGxsaXN0LCAmdHhsaXN0KTsKKwllcC0+b3ZmbGlzdCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogTm93IGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgorCSAqLworCWVycm9yID0gKCpzcHJvYykoZXAsICZ0eGxpc3QsIHByaXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBEdXJpbmcgdGhlIHRpbWUgd2Ugc3BlbnQgaW5zaWRlIHRoZSAic3Byb2MiIGNhbGxiYWNrLCBzb21lCisJICogb3RoZXIgZXZlbnRzIG1pZ2h0IGhhdmUgYmVlbiBxdWV1ZWQgYnkgdGhlIHBvbGwgY2FsbGJhY2suCisJICogV2UgcmUtaW5zZXJ0IHRoZW0gaW5zaWRlIHRoZSBtYWluIHJlYWR5LWxpc3QgaGVyZS4KKwkgKi8KKwlmb3IgKG5lcGkgPSBlcC0+b3ZmbGlzdDsgKGVwaSA9IG5lcGkpICE9IE5VTEw7CisJICAgICBuZXBpID0gZXBpLT5uZXh0LCBlcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFIpIHsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgaXRlbSBpcyBhbHJlYWR5IGluIHRoZSBsaXN0LgorCQkgKiBEdXJpbmcgdGhlICJzcHJvYyIgY2FsbGJhY2sgZXhlY3V0aW9uIHRpbWUsIGl0ZW1zIGFyZQorCQkgKiBxdWV1ZWQgaW50byAtPm92Zmxpc3QgYnV0IHRoZSAidHhsaXN0IiBtaWdodCBhbHJlYWR5CisJCSAqIGNvbnRhaW4gdGhlbSwgYW5kIHRoZSBsaXN0X3NwbGljZSgpIGJlbG93IHRha2VzIGNhcmUgb2YgdGhlbS4KKwkJICovCisJCWlmICghZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKQorCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOworCX0KKwkvKgorCSAqIFdlIG5lZWQgdG8gc2V0IGJhY2sgZXAtPm92Zmxpc3QgdG8gRVBfVU5BQ1RJVkVfUFRSLCBzbyB0aGF0IGFmdGVyCisJICogcmVsZWFzaW5nIHRoZSBsb2NrLCBldmVudHMgd2lsbCBiZSBxdWV1ZWQgaW4gdGhlIG5vcm1hbCB3YXkgaW5zaWRlCisJICogZXAtPnJkbGxpc3QuCisJICovCisJZXAtPm92Zmxpc3QgPSBFUF9VTkFDVElWRV9QVFI7CisKKwkvKgorCSAqIFF1aWNrbHkgcmUtaW5qZWN0IGl0ZW1zIGxlZnQgb24gInR4bGlzdCIuCisJICovCisJbGlzdF9zcGxpY2UoJnR4bGlzdCwgJmVwLT5yZGxsaXN0KTsKKworCWlmICghbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpKSB7CisJCS8qCisJCSAqIFdha2UgdXAgKGlmIGFjdGl2ZSkgYm90aCB0aGUgZXZlbnRwb2xsIHdhaXQgbGlzdCBhbmQKKwkJICogdGhlIC0+cG9sbCgpIHdhaXQgbGlzdCAoZGVsYXllZCBhZnRlciB3ZSByZWxlYXNlIHRoZSBsb2NrKS4KKwkJICovCisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+d3EpKQorCQkJd2FrZV91cF9sb2NrZWQoJmVwLT53cSk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+cG9sbF93YWl0KSkKKwkJCXB3YWtlKys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwltdXRleF91bmxvY2soJmVwLT5tdHgpOworCisJLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLworCWlmIChwd2FrZSkKKwkJZXBfcG9sbF9zYWZld2FrZSgmZXAtPnBvbGxfd2FpdCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIC8qCiAgKiBSZW1vdmVzIGEgInN0cnVjdCBlcGl0ZW0iIGZyb20gdGhlIGV2ZW50cG9sbCBSQiB0cmVlIGFuZCBkZWFsbG9jYXRlcwogICogYWxsIHRoZSBhc3NvY2lhdGVkIHJlc291cmNlcy4gTXVzdCBiZSBjYWxsZWQgd2l0aCAibXR4IiBoZWxkLgpAQCAtNDM0LDkgKzU2Myw2IEBACiAKIAlhdG9taWNfZGVjKCZlcC0+dXNlci0+ZXBvbGxfd2F0Y2hlcyk7CiAKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfcmVtb3ZlKCVwLCAlcClcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIGZpbGUpKTsKLQogCXJldHVybiAwOwogfQogCkBAIC00NDcsNyArNTczLDcgQEAKIAogCS8qIFdlIG5lZWQgdG8gcmVsZWFzZSBhbGwgdGFza3Mgd2FpdGluZyBmb3IgdGhlc2UgZmlsZSAqLwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZlcC0+cG9sbF93YWl0KSkKLQkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7CisJCWVwX3BvbGxfc2FmZXdha2UoJmVwLT5wb2xsX3dhaXQpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIGxvY2sgdGhpcyBiZWNhdXNlIHdlIGNvdWxkIGJlIGhpdCBieQpAQCAtNDkyLDI2ICs2MTgsNTQgQEAKIAlpZiAoZXApCiAJCWVwX2ZyZWUoZXApOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGNsb3NlKCkgZXA9JXBcbiIsIGN1cnJlbnQsIGVwKSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXBfcmVhZF9ldmVudHNfcHJvYyhzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCSAgICAgICB2b2lkICpwcml2KQoreworCXN0cnVjdCBlcGl0ZW0gKmVwaSwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcGksIHRtcCwgaGVhZCwgcmRsbGluaykgeworCQlpZiAoZXBpLT5mZmQuZmlsZS0+Zl9vcC0+cG9sbChlcGktPmZmZC5maWxlLCBOVUxMKSAmCisJCSAgICBlcGktPmV2ZW50LmV2ZW50cykKKwkJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBJdGVtIGhhcyBiZWVuIGRyb3BwZWQgaW50byB0aGUgcmVhZHkgbGlzdCBieSB0aGUgcG9sbAorCQkJICogY2FsbGJhY2ssIGJ1dCBpdCdzIG5vdCBhY3R1YWxseSByZWFkeSwgYXMgZmFyIGFzCisJCQkgKiBjYWxsZXIgcmVxdWVzdGVkIGV2ZW50cyBnb2VzLiBXZSBjYW4gcmVtb3ZlIGl0IGhlcmUuCisJCQkgKi8KKwkJCWxpc3RfZGVsX2luaXQoJmVwaS0+cmRsbGluayk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcF9wb2xsX3JlYWR5ZXZlbnRzX3Byb2Modm9pZCAqcHJpdiwgdm9pZCAqY29va2llLCBpbnQgY2FsbF9uZXN0cykKK3sKKwlyZXR1cm4gZXBfc2Nhbl9yZWFkeV9saXN0KHByaXYsIGVwX3JlYWRfZXZlbnRzX3Byb2MsIE5VTEwpOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGVwX2V2ZW50cG9sbF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXVuc2lnbmVkIGludCBwb2xsZmxhZ3MgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHBvbGxmbGFnczsKIAlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCS8qIEluc2VydCBpbnNpZGUgb3VyIHBvbGwgd2FpdCBxdWV1ZSAqLwogCXBvbGxfd2FpdChmaWxlLCAmZXAtPnBvbGxfd2FpdCwgd2FpdCk7CiAKLQkvKiBDaGVjayBvdXIgY29uZGl0aW9uICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZlcC0+cmRsbGlzdCkpCi0JCXBvbGxmbGFncyA9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFByb2NlZWQgdG8gZmluZCBvdXQgaWYgd2FudGVkIGV2ZW50cyBhcmUgcmVhbGx5IGF2YWlsYWJsZSBpbnNpZGUKKwkgKiB0aGUgcmVhZHkgbGlzdC4gVGhpcyBuZWVkIHRvIGJlIGRvbmUgdW5kZXIgZXBfY2FsbF9uZXN0ZWQoKQorCSAqIHN1cGVydmlzaW9uLCBzaW5jZSB0aGUgY2FsbCB0byBmX29wLT5wb2xsKCkgZG9uZSBvbiBsaXN0ZWQgZmlsZXMKKwkgKiBjb3VsZCByZS1lbnRlciBoZXJlLgorCSAqLworCXBvbGxmbGFncyA9IGVwX2NhbGxfbmVzdGVkKCZwb2xsX3JlYWR5d2Fsa19uY2FsbHMsIEVQX01BWF9ORVNUUywKKwkJCQkgICBlcF9wb2xsX3JlYWR5ZXZlbnRzX3Byb2MsIGVwLCBlcCk7CiAKLQlyZXR1cm4gcG9sbGZsYWdzOworCXJldHVybiBwb2xsZmxhZ3MgIT0gLTEgPyBwb2xsZmxhZ3MgOiAwOwogfQogCiAvKiBGaWxlIGNhbGxiYWNrcyB0aGF0IGltcGxlbWVudCB0aGUgZXZlbnRwb2xsIGZpbGUgYmVoYXZpb3VyICovCkBAIC01NDEsNyArNjk1LDcgQEAKIAkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAogCSAqIG5lY2Vzc2FyeS4gSXQgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHdlJ3JlIGluIHRoZSAic3RydWN0IGZpbGUiCiAJICogY2xlYW51cCBwYXRoLCBhbmQgdGhpcyBtZWFucyB0aGF0IG5vb25lIGlzIHVzaW5nIHRoaXMgZmlsZSBhbnltb3JlLgotCSAqIFNvLCBmb3IgZXhhbXBsZSwgZXBvbGxfY3RsKCkgY2Fubm90IGhpdCBoZXJlIHNpY25lIGlmIHdlIHJlYWNoIHRoaXMKKwkgKiBTbywgZm9yIGV4YW1wbGUsIGVwb2xsX2N0bCgpIGNhbm5vdCBoaXQgaGVyZSBzaW5jZSBpZiB3ZSByZWFjaCB0aGlzCiAJICogcG9pbnQsIHRoZSBmaWxlIGNvdW50ZXIgYWxyZWFkeSB3ZW50IHRvIHplcm8gYW5kIGZnZXQoKSB3b3VsZCBmYWlsLgogCSAqIFRoZSBvbmx5IGhpdCBtaWdodCBjb21lIGZyb20gZXBfZnJlZSgpIGJ1dCBieSBob2xkaW5nIHRoZSBtdXRleAogCSAqIHdpbGwgY29ycmVjdGx5IHNlcmlhbGl6ZSB0aGUgb3BlcmF0aW9uLiBXZSBkbyBuZWVkIHRvIGFjcXVpcmUKQEAgLTU4OCw4ICs3NDIsNiBAQAogCiAJKnBlcCA9IGVwOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX2FsbG9jKCkgZXA9JXBcbiIsCi0JCSAgICAgY3VycmVudCwgZXApKTsKIAlyZXR1cm4gMDsKIAogZnJlZV91aWQ6CkBAIC02MjMsOSArNzc1LDYgQEAKIAkJfQogCX0KIAotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9maW5kKCVwKSAtPiAlcFxuIiwKLQkJICAgICBjdXJyZW50LCBmaWxlLCBlcGlyKSk7Ci0KIAlyZXR1cm4gZXBpcjsKIH0KIApAQCAtNjQxLDkgKzc5MCw2IEBACiAJc3RydWN0IGVwaXRlbSAqZXBpID0gZXBfaXRlbV9mcm9tX3dhaXQod2FpdCk7CiAJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBlcGktPmVwOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHBvbGxfY2FsbGJhY2soJXApIGVwaT0lcCBlcD0lcFxuIiwKLQkJICAgICBjdXJyZW50LCBlcGktPmZmZC5maWxlLCBlcGksIGVwKSk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC02NTYsNiArODAyLDE1IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qCisJICogQ2hlY2sgdGhlIGV2ZW50cyBjb21pbmcgd2l0aCB0aGUgY2FsbGJhY2suIEF0IHRoaXMgc3RhZ2UsIG5vdAorCSAqIGV2ZXJ5IGRldmljZSByZXBvcnRzIHRoZSBldmVudHMgaW4gdGhlICJrZXkiIHBhcmFtZXRlciBvZiB0aGUKKwkgKiBjYWxsYmFjay4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBib3RoIGNhc2VzIGhlcmUsIGhlbmNlIHRoZQorCSAqIHRlc3QgZm9yICJrZXkiICE9IE5VTEwgYmVmb3JlIHRoZSBldmVudCBtYXRjaCB0ZXN0LgorCSAqLworCWlmIChrZXkgJiYgISgodW5zaWduZWQgbG9uZykga2V5ICYgZXBpLT5ldmVudC5ldmVudHMpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKgogCSAqIElmIHdlIGFyZSB0cmFzZmVyaW5nIGV2ZW50cyB0byB1c2Vyc3BhY2UsIHdlIGNhbiBob2xkIG5vIGxvY2tzCiAJICogKGJlY2F1c2Ugd2UncmUgYWNjZXNzaW5nIHVzZXIgbWVtb3J5LCBhbmQgYmVjYXVzZSBvZiBsaW51eCBmX29wLT5wb2xsKCkKIAkgKiBzZW1hbnRpY3MpLiBBbGwgdGhlIGV2ZW50cyB0aGF0IGhhcHBlbnMgZHVyaW5nIHRoYXQgcGVyaW9kIG9mIHRpbWUgYXJlCkBAIC02NzAsMTIgKzgyNSw5IEBACiAJfQogCiAJLyogSWYgdGhpcyBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIHJlYWR5IGxpc3Qgd2UgZXhpdCBzb29uICovCi0JaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkKLQkJZ290byBpc19saW5rZWQ7CisJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpCisJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKIAotCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKLQotaXNfbGlua2VkOgogCS8qCiAJICogV2FrZSB1cCAoIGlmIGFjdGl2ZSApIGJvdGggdGhlIGV2ZW50cG9sbCB3YWl0IGxpc3QgYW5kIHRoZSAtPnBvbGwoKQogCSAqIHdhaXQgbGlzdC4KQEAgLTY5MCw3ICs4NDIsNyBAQAogCiAJLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLwogCWlmIChwd2FrZSkKLQkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7CisJCWVwX3BvbGxfc2FmZXdha2UoJmVwLT5wb2xsX3dhaXQpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC04MTcsMTAgKzk2OSw3IEBACiAKIAkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCiAJaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9pbnNlcnQoJXAsICVwLCAlZClcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIHRmaWxlLCBmZCkpOworCQllcF9wb2xsX3NhZmV3YWtlKCZlcC0+cG9sbF93YWl0KTsKIAogCXJldHVybiAwOwogCkBAIC04NTEsMTUgKzEwMDAsMTQgQEAKIHsKIAlpbnQgcHdha2UgPSAwOwogCXVuc2lnbmVkIGludCByZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgotCSAqIFNldCB0aGUgbmV3IGV2ZW50IGludGVyZXN0IG1hc2sgYmVmb3JlIGNhbGxpbmcgZl9vcC0+cG9sbCgpLCBvdGhlcndpc2UKLQkgKiBhIHBvdGVudGlhbCByYWNlIG1pZ2h0IG9jY3VyLiBJbiBmYWN0IGlmIHdlIGRvIHRoaXMgb3BlcmF0aW9uIGluc2lkZQotCSAqIHRoZSBsb2NrLCBhbiBldmVudCBtaWdodCBoYXBwZW4gYmV0d2VlbiB0aGUgZl9vcC0+cG9sbCgpIGNhbGwgYW5kIHRoZQotCSAqIG5ldyBldmVudCBzZXQgcmVnaXN0ZXJpbmcuCisJICogU2V0IHRoZSBuZXcgZXZlbnQgaW50ZXJlc3QgbWFzayBiZWZvcmUgY2FsbGluZyBmX29wLT5wb2xsKCk7CisJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IG1pc3MgYW4gZXZlbnQgdGhhdCBoYXBwZW5zIGJldHdlZW4gdGhlCisJICogZl9vcC0+cG9sbCgpIGNhbGwgYW5kIHRoZSBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgogCSAqLwogCWVwaS0+ZXZlbnQuZXZlbnRzID0gZXZlbnQtPmV2ZW50czsKKwllcGktPmV2ZW50LmRhdGEgPSBldmVudC0+ZGF0YTsgLyogcHJvdGVjdGVkIGJ5IG10eCAqLwogCiAJLyoKIAkgKiBHZXQgY3VycmVudCBldmVudCBiaXRzLiBXZSBjYW4gc2FmZWx5IHVzZSB0aGUgZmlsZSogaGVyZSBiZWNhdXNlCkBAIC04NjcsMTYgKzEwMTUsMTIgQEAKIAkgKi8KIAlyZXZlbnRzID0gZXBpLT5mZmQuZmlsZS0+Zl9vcC0+cG9sbChlcGktPmZmZC5maWxlLCBOVUxMKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyogQ29weSB0aGUgZGF0YSBtZW1iZXIgZnJvbSBpbnNpZGUgdGhlIGxvY2sgKi8KLQllcGktPmV2ZW50LmRhdGEgPSBldmVudC0+ZGF0YTsKLQogCS8qCiAJICogSWYgdGhlIGl0ZW0gaXMgImhvdCIgYW5kIGl0IGlzIG5vdCByZWdpc3RlcmVkIGluc2lkZSB0aGUgcmVhZHkKIAkgKiBsaXN0LCBwdXNoIGl0IGluc2lkZS4KIAkgKi8KIAlpZiAocmV2ZW50cyAmIGV2ZW50LT5ldmVudHMpIHsKKwkJc3Bpbl9sb2NrX2lycSgmZXAtPmxvY2spOwogCQlpZiAoIWVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkgewogCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwogCkBAIC04ODYsMTQyICsxMDMwLDg0IEBACiAJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCiAJCQkJcHdha2UrKzsKIAkJfQorCQlzcGluX3VubG9ja19pcnEoJmVwLT5sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KIAlpZiAocHdha2UpCi0JCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOworCQllcF9wb2xsX3NhZmV3YWtlKCZlcC0+cG9sbF93YWl0KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCi0JCQkgIGludCBtYXhldmVudHMpCitzdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzX3Byb2Moc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkgICAgICAgdm9pZCAqcHJpdikKIHsKLQlpbnQgZXZlbnRjbnQsIGVycm9yID0gLUVGQVVMVCwgcHdha2UgPSAwOworCXN0cnVjdCBlcF9zZW5kX2V2ZW50c19kYXRhICplc2VkID0gcHJpdjsKKwlpbnQgZXZlbnRjbnQ7CiAJdW5zaWduZWQgaW50IHJldmVudHM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZXBpdGVtICplcGksICpuZXBpOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhsaXN0OwotCi0JSU5JVF9MSVNUX0hFQUQoJnR4bGlzdCk7CisJc3RydWN0IGVwaXRlbSAqZXBpOworCXN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKnVldmVudDsKIAogCS8qCi0JICogV2UgbmVlZCB0byBsb2NrIHRoaXMgYmVjYXVzZSB3ZSBjb3VsZCBiZSBoaXQgYnkKLQkgKiBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgYW5kIGVwb2xsX2N0bChFUE9MTF9DVExfREVMKS4KKwkgKiBXZSBjYW4gbG9vcCB3aXRob3V0IGxvY2sgYmVjYXVzZSB3ZSBhcmUgcGFzc2VkIGEgdGFzayBwcml2YXRlIGxpc3QuCisJICogSXRlbXMgY2Fubm90IHZhbmlzaCBkdXJpbmcgdGhlIGxvb3AgYmVjYXVzZSBlcF9zY2FuX3JlYWR5X2xpc3QoKSBpcworCSAqIGhvbGRpbmcgIm10eCIgZHVyaW5nIHRoaXMgY2FsbC4KIAkgKi8KLQltdXRleF9sb2NrKCZlcC0+bXR4KTsKLQotCS8qCi0JICogU3RlYWwgdGhlIHJlYWR5IGxpc3QsIGFuZCByZS1pbml0IHRoZSBvcmlnaW5hbCBvbmUgdG8gdGhlCi0JICogZW1wdHkgbGlzdC4gQWxzbywgc2V0IGVwLT5vdmZsaXN0IHRvIE5VTEwgc28gdGhhdCBldmVudHMKLQkgKiBoYXBwZW5pbmcgd2hpbGUgbG9vcGluZyB3L291dCBsb2NrcywgYXJlIG5vdCBsb3N0LiBXZSBjYW5ub3QKLQkgKiBoYXZlIHRoZSBwb2xsIGNhbGxiYWNrIHRvIHF1ZXVlIGRpcmVjdGx5IG9uIGVwLT5yZGxsaXN0LAotCSAqIGJlY2F1c2Ugd2UgYXJlIGRvaW5nIGl0IGluIHRoZSBsb29wIGJlbG93LCBpbiBhIGxvY2tsZXNzIHdheS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X3NwbGljZSgmZXAtPnJkbGxpc3QsICZ0eGxpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZlcC0+cmRsbGlzdCk7Ci0JZXAtPm92Zmxpc3QgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFdlIGNhbiBsb29wIHdpdGhvdXQgbG9jayBiZWNhdXNlIHRoaXMgaXMgYSB0YXNrIHByaXZhdGUgbGlzdC4KLQkgKiBXZSBqdXN0IHNwbGljZSdkIG91dCB0aGUgZXAtPnJkbGxpc3QgaW4gZXBfY29sbGVjdF9yZWFkeV9pdGVtcygpLgotCSAqIEl0ZW1zIGNhbm5vdCB2YW5pc2ggZHVyaW5nIHRoZSBsb29wIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgIm10eCIuCi0JICovCi0JZm9yIChldmVudGNudCA9IDA7ICFsaXN0X2VtcHR5KCZ0eGxpc3QpICYmIGV2ZW50Y250IDwgbWF4ZXZlbnRzOykgewotCQllcGkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eGxpc3QsIHN0cnVjdCBlcGl0ZW0sIHJkbGxpbmspOworCWZvciAoZXZlbnRjbnQgPSAwLCB1ZXZlbnQgPSBlc2VkLT5ldmVudHM7CisJICAgICAhbGlzdF9lbXB0eShoZWFkKSAmJiBldmVudGNudCA8IGVzZWQtPm1heGV2ZW50czspIHsKKwkJZXBpID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZXBpdGVtLCByZGxsaW5rKTsKIAogCQlsaXN0X2RlbF9pbml0KCZlcGktPnJkbGxpbmspOwogCi0JCS8qCi0JCSAqIEdldCB0aGUgcmVhZHkgZmlsZSBldmVudCBzZXQuIFdlIGNhbiBzYWZlbHkgdXNlIHRoZSBmaWxlCi0JCSAqIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgdGhlICJtdHgiIGFuZCB0aGlzIHdpbGwgZ3VhcmFudGVlCi0JCSAqIHRoYXQgYm90aCB0aGUgZmlsZSBhbmQgdGhlIGl0ZW0gd2lsbCBub3QgdmFuaXNoLgotCQkgKi8KLQkJcmV2ZW50cyA9IGVwaS0+ZmZkLmZpbGUtPmZfb3AtPnBvbGwoZXBpLT5mZmQuZmlsZSwgTlVMTCk7Ci0JCXJldmVudHMgJj0gZXBpLT5ldmVudC5ldmVudHM7CisJCXJldmVudHMgPSBlcGktPmZmZC5maWxlLT5mX29wLT5wb2xsKGVwaS0+ZmZkLmZpbGUsIE5VTEwpICYKKwkJCWVwaS0+ZXZlbnQuZXZlbnRzOwogCiAJCS8qCi0JCSAqIElzIHRoZSBldmVudCBtYXNrIGludGVyc2VjdCB0aGUgY2FsbGVyLXJlcXVlc3RlZCBvbmUsCi0JCSAqIGRlbGl2ZXIgdGhlIGV2ZW50IHRvIHVzZXJzcGFjZS4gQWdhaW4sIHdlIGFyZSBob2xkaW5nCi0JCSAqICJtdHgiLCBzbyBubyBvcGVyYXRpb25zIGNvbWluZyBmcm9tIHVzZXJzcGFjZSBjYW4gY2hhbmdlCi0JCSAqIHRoZSBpdGVtLgorCQkgKiBJZiB0aGUgZXZlbnQgbWFzayBpbnRlcnNlY3QgdGhlIGNhbGxlci1yZXF1ZXN0ZWQgb25lLAorCQkgKiBkZWxpdmVyIHRoZSBldmVudCB0byB1c2Vyc3BhY2UuIEFnYWluLCBlcF9zY2FuX3JlYWR5X2xpc3QoKQorCQkgKiBpcyBob2xkaW5nICJtdHgiLCBzbyBubyBvcGVyYXRpb25zIGNvbWluZyBmcm9tIHVzZXJzcGFjZQorCQkgKiBjYW4gY2hhbmdlIHRoZSBpdGVtLgogCQkgKi8KIAkJaWYgKHJldmVudHMpIHsKLQkJCWlmIChfX3B1dF91c2VyKHJldmVudHMsCi0JCQkJICAgICAgICZldmVudHNbZXZlbnRjbnRdLmV2ZW50cykgfHwKLQkJCSAgICBfX3B1dF91c2VyKGVwaS0+ZXZlbnQuZGF0YSwKLQkJCQkgICAgICAgJmV2ZW50c1tldmVudGNudF0uZGF0YSkpCi0JCQkJZ290byBlcnJ4aXQ7CisJCQlpZiAoX19wdXRfdXNlcihyZXZlbnRzLCAmdWV2ZW50LT5ldmVudHMpIHx8CisJCQkgICAgX19wdXRfdXNlcihlcGktPmV2ZW50LmRhdGEsICZ1ZXZlbnQtPmRhdGEpKSB7CisJCQkJbGlzdF9hZGQoJmVwaS0+cmRsbGluaywgaGVhZCk7CisJCQkJcmV0dXJuIGV2ZW50Y250ID8gZXZlbnRjbnQgOiAtRUZBVUxUOworCQkJfQorCQkJZXZlbnRjbnQrKzsKKwkJCXVldmVudCsrOwogCQkJaWYgKGVwaS0+ZXZlbnQuZXZlbnRzICYgRVBPTExPTkVTSE9UKQogCQkJCWVwaS0+ZXZlbnQuZXZlbnRzICY9IEVQX1BSSVZBVEVfQklUUzsKLQkJCWV2ZW50Y250Kys7CisJCQllbHNlIGlmICghKGVwaS0+ZXZlbnQuZXZlbnRzICYgRVBPTExFVCkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoaXMgZmlsZSBoYXMgYmVlbiBhZGRlZCB3aXRoIExldmVsCisJCQkJICogVHJpZ2dlciBtb2RlLCB3ZSBuZWVkIHRvIGluc2VydCBiYWNrIGluc2lkZQorCQkJCSAqIHRoZSByZWFkeSBsaXN0LCBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgdG8KKwkJCQkgKiBlcG9sbF93YWl0KCkgd2lsbCBjaGVjayBhZ2FpbiB0aGUgZXZlbnRzCisJCQkJICogYXZhaWxhYmlsaXR5LiBBdCB0aGlzIHBvaW50LCBub29uZSBjYW4gaW5zZXJ0CisJCQkJICogaW50byBlcC0+cmRsbGlzdCBiZXNpZGVzIHVzLiBUaGUgZXBvbGxfY3RsKCkKKwkJCQkgKiBjYWxsZXJzIGFyZSBsb2NrZWQgb3V0IGJ5CisJCQkJICogZXBfc2Nhbl9yZWFkeV9saXN0KCkgaG9sZGluZyAibXR4IiBhbmQgdGhlCisJCQkJICogcG9sbCBjYWxsYmFjayB3aWxsIHF1ZXVlIHRoZW0gaW4gZXAtPm92Zmxpc3QuCisJCQkJICovCisJCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOworCQkJfQogCQl9Ci0JCS8qCi0JCSAqIEF0IHRoaXMgcG9pbnQsIG5vb25lIGNhbiBpbnNlcnQgaW50byBlcC0+cmRsbGlzdCBiZXNpZGVzCi0JCSAqIHVzLiBUaGUgZXBvbGxfY3RsKCkgY2FsbGVycyBhcmUgbG9ja2VkIG91dCBieSB1cyBob2xkaW5nCi0JCSAqICJtdHgiIGFuZCB0aGUgcG9sbCBjYWxsYmFjayB3aWxsIHF1ZXVlIHRoZW0gaW4gZXAtPm92Zmxpc3QuCi0JCSAqLwotCQlpZiAoIShlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMRVQpICYmCi0JCSAgICAocmV2ZW50cyAmIGVwaS0+ZXZlbnQuZXZlbnRzKSkKLQkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKIAl9Ci0JZXJyb3IgPSAwOwogCi1lcnJ4aXQ6CisJcmV0dXJuIGV2ZW50Y250OworfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBEdXJpbmcgdGhlIHRpbWUgd2Ugc3BlbnQgaW4gdGhlIGxvb3AgYWJvdmUsIHNvbWUgb3RoZXIgZXZlbnRzCi0JICogbWlnaHQgaGF2ZSBiZWVuIHF1ZXVlZCBieSB0aGUgcG9sbCBjYWxsYmFjay4gV2UgcmUtaW5zZXJ0IHRoZW0KLQkgKiBpbnNpZGUgdGhlIG1haW4gcmVhZHktbGlzdCBoZXJlLgotCSAqLwotCWZvciAobmVwaSA9IGVwLT5vdmZsaXN0OyAoZXBpID0gbmVwaSkgIT0gTlVMTDsKLQkgICAgIG5lcGkgPSBlcGktPm5leHQsIGVwaS0+bmV4dCA9IEVQX1VOQUNUSVZFX1BUUikgewotCQkvKgotCQkgKiBJZiB0aGUgYWJvdmUgbG9vcCBxdWl0IHdpdGggZXJyb3JzLCB0aGUgZXBvbGwgaXRlbSBtaWdodCBzdGlsbAotCQkgKiBiZSBsaW5rZWQgdG8gInR4bGlzdCIsIGFuZCB0aGUgbGlzdF9zcGxpY2UoKSBkb25lIGJlbG93IHdpbGwKLQkJICogdGFrZSBjYXJlIG9mIHRob3NlIGNhc2VzLgotCQkgKi8KLQkJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpCi0JCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7Ci0JfQotCS8qCi0JICogV2UgbmVlZCB0byBzZXQgYmFjayBlcC0+b3ZmbGlzdCB0byBFUF9VTkFDVElWRV9QVFIsIHNvIHRoYXQgYWZ0ZXIKLQkgKiByZWxlYXNpbmcgdGhlIGxvY2ssIGV2ZW50cyB3aWxsIGJlIHF1ZXVlZCBpbiB0aGUgbm9ybWFsIHdheSBpbnNpZGUKLQkgKiBlcC0+cmRsbGlzdC4KLQkgKi8KLQllcC0+b3ZmbGlzdCA9IEVQX1VOQUNUSVZFX1BUUjsKK3N0YXRpYyBpbnQgZXBfc2VuZF9ldmVudHMoc3RydWN0IGV2ZW50cG9sbCAqZXAsCisJCQkgIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywgaW50IG1heGV2ZW50cykKK3sKKwlzdHJ1Y3QgZXBfc2VuZF9ldmVudHNfZGF0YSBlc2VkOwogCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGluIHRoZSBldmVudC1zZW5kIGxvb3AsIG9yIGluIGNhc2UgdGhlIG51bWJlciBvZgotCSAqIHJlYWR5IGV2ZW50cyBleGNlZWRzIHRoZSB1c2Vyc3BhY2UgbGltaXQsIHdlIG5lZWQgdG8gc3BsaWNlIHRoZQotCSAqICJ0eGxpc3QiIGJhY2sgaW5zaWRlIGVwLT5yZGxsaXN0LgotCSAqLwotCWxpc3Rfc3BsaWNlKCZ0eGxpc3QsICZlcC0+cmRsbGlzdCk7CisJZXNlZC5tYXhldmVudHMgPSBtYXhldmVudHM7CisJZXNlZC5ldmVudHMgPSBldmVudHM7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSkgewotCQkvKgotCQkgKiBXYWtlIHVwIChpZiBhY3RpdmUpIGJvdGggdGhlIGV2ZW50cG9sbCB3YWl0IGxpc3QgYW5kIHRoZSAtPnBvbGwoKQotCQkgKiB3YWl0IGxpc3QgKGRlbGF5ZWQgYWZ0ZXIgd2UgcmVsZWFzZSB0aGUgbG9jaykuCi0JCSAqLwotCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPndxKSkKLQkJCXdha2VfdXBfbG9ja2VkKCZlcC0+d3EpOwotCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCi0JCQlwd2FrZSsrOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKLQotCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KLQlpZiAocHdha2UpCi0JCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOwotCi0JcmV0dXJuIGV2ZW50Y250ID09IDAgPyBlcnJvcjogZXZlbnRjbnQ7CisJcmV0dXJuIGVwX3NjYW5fcmVhZHlfbGlzdChlcCwgZXBfc2VuZF9ldmVudHNfcHJvYywgJmVzZWQpOwogfQogCiBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cywKQEAgLTEwMzMsNyArMTExOSw3IEBACiAJd2FpdF9xdWV1ZV90IHdhaXQ7CiAKIAkvKgotCSAqIENhbGN1bGF0ZSB0aGUgdGltZW91dCBieSBjaGVja2luZyBmb3IgdGhlICJpbmZpbml0ZSIgdmFsdWUgKCAtMSApCisJICogQ2FsY3VsYXRlIHRoZSB0aW1lb3V0IGJ5IGNoZWNraW5nIGZvciB0aGUgImluZmluaXRlIiB2YWx1ZSAoLTEpCiAJICogYW5kIHRoZSBvdmVyZmxvdyBjb25kaXRpb24uIFRoZSBwYXNzZWQgdGltZW91dCBpcyBpbiBtaWxsaXNlY29uZHMsCiAJICogdGhhdCB3aHkgKHQgKiBIWikgLyAxMDAwLgogCSAqLwpAQCAtMTA3Niw5ICsxMTYyLDggQEAKIAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCX0KLQogCS8qIElzIGl0IHdvcnRoIHRvIHRyeSB0byBkaWcgZm9yIGV2ZW50cyA/ICovCi0JZWF2YWlsID0gIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KTsKKwllYXZhaWwgPSAhbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpIHx8IGVwLT5vdmZsaXN0ICE9IEVQX1VOQUNUSVZFX1BUUjsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEwOTksNDEgKzExODQsMzAgQEAKICAqLwogU1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZTEsIGludCwgZmxhZ3MpCiB7Ci0JaW50IGVycm9yLCBmZCA9IC0xOwotCXN0cnVjdCBldmVudHBvbGwgKmVwOworCWludCBlcnJvcjsKKwlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IE5VTEw7CiAKIAkvKiBDaGVjayB0aGUgRVBPTExfKiBjb25zdGFudCBmb3IgY29uc2lzdGVuY3kuICAqLwogCUJVSUxEX0JVR19PTihFUE9MTF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7CiAKIAlpZiAoZmxhZ3MgJiB+RVBPTExfQ0xPRVhFQykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZClcbiIsCi0JCSAgICAgY3VycmVudCwgZmxhZ3MpKTsKLQogCS8qCi0JICogQ3JlYXRlIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSAoICJzdHJ1Y3QgZXZlbnRwb2xsIiApLgorCSAqIENyZWF0ZSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgKCJzdHJ1Y3QgZXZlbnRwb2xsIikuCiAJICovCiAJZXJyb3IgPSBlcF9hbGxvYygmZXApOwotCWlmIChlcnJvciA8IDApIHsKLQkJZmQgPSBlcnJvcjsKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQotCisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCS8qCiAJICogQ3JlYXRlcyBhbGwgdGhlIGl0ZW1zIG5lZWRlZCB0byBzZXR1cCBhbiBldmVudHBvbGwgZmlsZS4gVGhhdCBpcywKIAkgKiBhIGZpbGUgc3RydWN0dXJlIGFuZCBhIGZyZWUgZmlsZSBkZXNjcmlwdG9yLgogCSAqLwotCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW2V2ZW50cG9sbF0iLCAmZXZlbnRwb2xsX2ZvcHMsIGVwLAotCQkJICAgICAgZmxhZ3MgJiBPX0NMT0VYRUMpOwotCWlmIChmZCA8IDApCisJZXJyb3IgPSBhbm9uX2lub2RlX2dldGZkKCJbZXZlbnRwb2xsXSIsICZldmVudHBvbGxfZm9wcywgZXAsCisJCQkJIGZsYWdzICYgT19DTE9FWEVDKTsKKwlpZiAoZXJyb3IgPCAwKQogCQllcF9mcmVlKGVwKTsKIAotZXJyb3JfcmV0dXJuOgotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfY3JlYXRlKCVkKSA9ICVkXG4iLAotCQkgICAgIGN1cnJlbnQsIGZsYWdzLCBmZCkpOwotCi0JcmV0dXJuIGZkOworCXJldHVybiBlcnJvcjsKIH0KIAogU1lTQ0FMTF9ERUZJTkUxKGVwb2xsX2NyZWF0ZSwgaW50LCBzaXplKQpAQCAtMTE1OCw5ICsxMjMyLDYgQEAKIAlzdHJ1Y3QgZXBpdGVtICplcGk7CiAJc3RydWN0IGVwb2xsX2V2ZW50IGVwZHM7CiAKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2N0bCglZCwgJWQsICVkLCAlcClcbiIsCi0JCSAgICAgY3VycmVudCwgZXBmZCwgb3AsIGZkLCBldmVudCkpOwotCiAJZXJyb3IgPSAtRUZBVUxUOwogCWlmIChlcF9vcF9oYXNfZXZlbnQob3ApICYmCiAJICAgIGNvcHlfZnJvbV91c2VyKCZlcGRzLCBldmVudCwgc2l6ZW9mKHN0cnVjdCBlcG9sbF9ldmVudCkpKQpAQCAtMTIxMSw3ICsxMjgyLDYgQEAKIAljYXNlIEVQT0xMX0NUTF9BREQ6CiAJCWlmICghZXBpKSB7CiAJCQllcGRzLmV2ZW50cyB8PSBQT0xMRVJSIHwgUE9MTEhVUDsKLQogCQkJZXJyb3IgPSBlcF9pbnNlcnQoZXAsICZlcGRzLCB0ZmlsZSwgZmQpOwogCQl9IGVsc2UKIAkJCWVycm9yID0gLUVFWElTVDsKQEAgLTEyMzcsOCArMTMwNyw2IEBACiBlcnJvcl9mcHV0OgogCWZwdXQoZmlsZSk7CiBlcnJvcl9yZXR1cm46Ci0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF9jdGwoJWQsICVkLCAlZCwgJXApID0gJWRcbiIsCi0JCSAgICAgY3VycmVudCwgZXBmZCwgb3AsIGZkLCBldmVudCwgZXJyb3IpKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEyNTQsOSArMTMyMiw2IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IGV2ZW50cG9sbCAqZXA7CiAKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX3dhaXQoJWQsICVwLCAlZCwgJWQpXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0KSk7Ci0KIAkvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZXZlbnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyAqLwogCWlmIChtYXhldmVudHMgPD0gMCB8fCBtYXhldmVudHMgPiBFUF9NQVhfRVZFTlRTKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyOTMsOCArMTM1OCw2IEBACiBlcnJvcl9mcHV0OgogCWZwdXQoZmlsZSk7CiBlcnJvcl9yZXR1cm46Ci0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF93YWl0KCVkLCAlcCwgJWQsICVkKSA9ICVkXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwZmQsIGV2ZW50cywgbWF4ZXZlbnRzLCB0aW1lb3V0LCBlcnJvcikpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTM1OSwxNyArMTQyMiwxOCBAQAogCQlFUF9JVEVNX0NPU1Q7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwZXJmb3JtIHNhZmUgcG9sbCB3YWl0IGhlYWQgd2FrZSB1cHMgKi8KLQllcF9wb2xsX3NhZmV3YWtlX2luaXQoJnBzdyk7CisJZXBfbmVzdGVkX2NhbGxzX2luaXQoJnBvbGxfc2FmZXdha2VfbmNhbGxzKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gZmlsZSdzIGZfb3AtPnBvbGwoKSBjYWxscyAqLworCWVwX25lc3RlZF9jYWxsc19pbml0KCZwb2xsX3JlYWR5d2Fsa19uY2FsbHMpOwogCiAJLyogQWxsb2NhdGVzIHNsYWIgY2FjaGUgdXNlZCB0byBhbGxvY2F0ZSAic3RydWN0IGVwaXRlbSIgaXRlbXMgKi8KIAllcGlfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZXZlbnRwb2xsX2VwaSIsIHNpemVvZihzdHJ1Y3QgZXBpdGVtKSwKLQkJCTAsIFNMQUJfSFdDQUNIRV9BTElHTnxFUElfU0xBQl9ERUJVR3xTTEFCX1BBTklDLAotCQkJTlVMTCk7CisJCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDLCBOVUxMKTsKIAogCS8qIEFsbG9jYXRlcyBzbGFiIGNhY2hlIHVzZWQgdG8gYWxsb2NhdGUgInN0cnVjdCBlcHBvbGxfZW50cnkiICovCiAJcHdxX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImV2ZW50cG9sbF9wd3EiLAotCQkJc2l6ZW9mKHN0cnVjdCBlcHBvbGxfZW50cnkpLCAwLAotCQkJRVBJX1NMQUJfREVCVUd8U0xBQl9QQU5JQywgTlVMTCk7CisJCQlzaXplb2Yoc3RydWN0IGVwcG9sbF9lbnRyeSksIDAsIFNMQUJfUEFOSUMsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggYzUxMjhmYi4uMDUyYTk2MSAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KQEAgLTEwNTYsMjggKzEwNTcsMzUgQEAKICAqIC0gdGhlIGNhbGxlciBtdXN0IGhvbGQgY3VycmVudC0+Y3JlZF9leGVjX211dGV4IHRvIHByb3RlY3QgYWdhaW5zdAogICogICBQVFJBQ0VfQVRUQUNICiAgKi8KLXZvaWQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKK2ludCBjaGVja191bnNhZmVfZXhlYyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQsICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbl9mcywgbl9zaWdoYW5kOworCXVuc2lnbmVkIG5fZnM7CisJaW50IHJlcyA9IDA7CiAKIAlicHJtLT51bnNhZmUgPSB0cmFjZWhvb2tfdW5zYWZlX2V4ZWMocCk7CiAKIAluX2ZzID0gMTsKLQluX3NpZ2hhbmQgPSAxOworCXdyaXRlX2xvY2soJnAtPmZzLT5sb2NrKTsKIAlsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCWZvciAodCA9IG5leHRfdGhyZWFkKHApOyB0ICE9IHA7IHQgPSBuZXh0X3RocmVhZCh0KSkgewogCQlpZiAodC0+ZnMgPT0gcC0+ZnMpCiAJCQluX2ZzKys7Ci0JCW5fc2lnaGFuZCsrOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmcC0+ZnMtPmNvdW50KSA+IG5fZnMgfHwKLQkgICAgYXRvbWljX3JlYWQoJnAtPnNpZ2hhbmQtPmNvdW50KSA+IG5fc2lnaGFuZCkKKwlpZiAocC0+ZnMtPnVzZXJzID4gbl9mcykgewogCQlicHJtLT51bnNhZmUgfD0gTFNNX1VOU0FGRV9TSEFSRTsKKwl9IGVsc2UgeworCQlpZiAocC0+ZnMtPmluX2V4ZWMpCisJCQlyZXMgPSAtRUFHQUlOOworCQlwLT5mcy0+aW5fZXhlYyA9IDE7CisJfQogCiAJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOworCXdyaXRlX3VubG9jaygmcC0+ZnMtPmxvY2spOworCisJcmV0dXJuIHJlczsKIH0KIAogLyogCkBAIC0xMjk2LDEyICsxMzA0LDE1IEBACiAJYnBybS0+Y3JlZCA9IHByZXBhcmVfZXhlY19jcmVkcygpOwogCWlmICghYnBybS0+Y3JlZCkKIAkJZ290byBvdXRfdW5sb2NrOwotCWNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCisJcmV0dmFsID0gY2hlY2tfdW5zYWZlX2V4ZWMoYnBybSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXRfdW5sb2NrOwogCiAJZmlsZSA9IG9wZW5fZXhlYyhmaWxlbmFtZSk7CiAJcmV0dmFsID0gUFRSX0VSUihmaWxlKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3VubWFyazsKIAogCXNjaGVkX2V4ZWMoKTsKIApAQCAtMTM0NCw2ICsxMzU1LDkgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBleGVjdmUgc3VjY2VlZGVkICovCisJd3JpdGVfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKKwl3cml0ZV91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKIAljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CkBAIC0xMzYyLDYgKzEzNzYsMTEgQEAKIAkJZnB1dChicHJtLT5maWxlKTsKIAl9CiAKK291dF91bm1hcms6CisJd3JpdGVfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCWN1cnJlbnQtPmZzLT5pbl9leGVjID0gMDsKKwl3cml0ZV91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwogb3V0X3VubG9jazoKIAljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL0JVR1MgYi9mcy9leG9mcy9CVUdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMmQ0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9CVUdTCkBAIC0wLDAgKzEsMyBAQAorLSBPdXQtb2Ytc3BhY2UgbWF5IGNhdXNlIGEgc2V2ZXJlIHByb2JsZW0gaWYgdGhlIG9iamVjdCAoYW5kIGRpcmVjdG9yeSBlbnRyeSkKKyAgd2VyZSB3cml0dGVuLCBidXQgdGhlIGlub2RlIGF0dHJpYnV0ZXMgZmFpbGVkLiBUaGVuIGlmIHRoZSBmaWxlc3lzdGVtIHdhcworICB1bm1vdW50ZWQgYW5kIG1vdW50ZWQgdGhlIGtlcm5lbCBjYW4gZ2V0IGludG8gYW4gZW5kbGVzcyBsb29wIGRvaW5nIGEgcmVhZGRpci4KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL0tidWlsZCBiL2ZzL2V4b2ZzL0tidWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJkMjJkCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvS2J1aWxkCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgS2J1aWxkIGZvciB0aGUgRVhPRlMgbW9kdWxlCisjCisjIENvcHlyaWdodCAoQykgMjAwOCBQYW5hc2FzIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIEF1dGhvcnM6CisjICAgQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyMKKyMgS2J1aWxkIC0gR2V0cyBpbmNsdWRlZCBmcm9tIHRoZSBLZXJuZWxzIE1ha2VmaWxlIGFuZCBidWlsZCBzeXN0ZW0KKyMKKworZXhvZnMteSA6PSBvc2QubyBpbm9kZS5vIGZpbGUubyBzeW1saW5rLm8gbmFtZWkubyBkaXIubyBzdXBlci5vCitvYmotJChDT05GSUdfRVhPRlNfRlMpICs9IGV4b2ZzLm8KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL0tjb25maWcgYi9mcy9leG9mcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MTk0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9LY29uZmlnCkBAIC0wLDAgKzEsMTMgQEAKK2NvbmZpZyBFWE9GU19GUworCXRyaXN0YXRlICJleG9mczogT1NEIGJhc2VkIGZpbGUgc3lzdGVtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTQ1NJX09TRF9VTEQKKwloZWxwCisJICBFWE9GUyBpcyBhIGZpbGUgc3lzdGVtIHRoYXQgdXNlcyBhbiBPU0Qgc3RvcmFnZSBkZXZpY2UsCisJICBhcyBpdHMgYmFja2luZyBzdG9yYWdlLgorCisjIERlYnVnZ2luZy1yZWxhdGVkIHN0dWZmCitjb25maWcgRVhPRlNfREVCVUcKKwlib29sICJFbmFibGUgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gRVhPRlNfRlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIEVYT0ZTIGRlYnVnIHByaW50cy4KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2NvbW1vbi5oIGIvZnMvZXhvZnMvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MTJjNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL2NvbW1vbi5oCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogY29tbW9uLmggLSBDb21tb24gZGVmaW5pdGlvbnMgZm9yIGJvdGggS2VybmVsIGFuZCB1c2VyLW1vZGUgdXRpbGl0aWVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9fRVhPRlNfQ09NX0hfXworI2RlZmluZSBfX0VYT0ZTX0NPTV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzY3NpL29zZF9hdHRyaWJ1dGVzLmg+CisjaW5jbHVkZSA8c2NzaS9vc2RfaW5pdGlhdG9yLmg+CisjaW5jbHVkZSA8c2NzaS9vc2Rfc2VjLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBPYmplY3QgSUQgcmVsYXRlZCBkZWZpbmVzCisgKiBOT1RFOiBpbm9kZSMgPSBvYmplY3QgSUQgLSBFWE9GU19PQkpfT0ZGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVhPRlNfTUlOX1BJRCAgIDB4MTAwMDAJLyogU21hbGxlc3QgcGFydGl0aW9uIElEICovCisjZGVmaW5lIEVYT0ZTX09CSl9PRkYJMHgxMDAwMAkvKiBvZmZzZXQgZm9yIG9iamVjdHMgKi8KKyNkZWZpbmUgRVhPRlNfU1VQRVJfSUQJMHgxMDAwMAkvKiBvYmplY3QgSUQgZm9yIG9uLWRpc2sgc3VwZXJibG9jayAqLworI2RlZmluZSBFWE9GU19ST09UX0lECTB4MTAwMDIJLyogb2JqZWN0IElEIGZvciByb290IGRpcmVjdG9yeSAqLworCisvKiBleG9mcyBBcHBsaWNhdGlvbiBzcGVjaWZpYyBwYWdlL2F0dHJpYnV0ZSAqLworIyBkZWZpbmUgRVhPRlNfQVBBR0VfRlNfREFUQQkoT1NEX0FQQUdFX0FQUF9ERUZJTkVEX0ZJUlNUICsgMykKKyMgZGVmaW5lIEVYT0ZTX0FUVFJfSU5PREVfREFUQQkxCisKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZXMgd2UgY2FuIGhhdmUgaXMgbGltaXRlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKyAqIGlub2RlIG51bWJlci4gIFRoaXMgaXMgdGhlIGxhcmdlc3Qgb2JqZWN0IElEIHRoYXQgdGhlIGZpbGUgc3lzdGVtIHN1cHBvcnRzLgorICogT2JqZWN0IElEcyAwLCAxLCBhbmQgMiBhcmUgYWx3YXlzIGluIHVzZSAoc2VlIGFib3ZlIGRlZmluZXMpLgorICovCitlbnVtIHsKKwlFWE9GU19NQVhfSU5PX0lEID0gKHNpemVvZihpbm9fdCkgKiA4ID09IDY0KSA/IFVMTE9OR19NQVggOgorCQkJCQkoMVVMTCA8PCAoc2l6ZW9mKGlub190KSAqIDhVTEwgLSAxVUxMKSksCisJRVhPRlNfTUFYX0lECSA9IChFWE9GU19NQVhfSU5PX0lEIC0gMSAtIEVYT0ZTX09CSl9PRkYpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1pc2MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVhPRlNfQkxLU0hJRlQJMTIKKyNkZWZpbmUgRVhPRlNfQkxLU0laRQkoMVVMIDw8IEVYT0ZTX0JMS1NISUZUKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogc3VwZXJibG9jay1yZWxhdGVkIHRoaW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX1NVUEVSX01BR0lDCTB4NURGNQorCisvKgorICogVGhlIGZpbGUgc3lzdGVtIGNvbnRyb2wgYmxvY2sgLSBzdG9yZWQgaW4gYW4gb2JqZWN0J3MgZGF0YSAobWFpbmx5LCB0aGUgb25lCisgKiB3aXRoIElEIEVYT0ZTX1NVUEVSX0lEKS4gIFRoaXMgaXMgd2hlcmUgdGhlIGluLW1lbW9yeSBzdXBlcmJsb2NrIGlzIHN0b3JlZAorICogb24gZGlzay4gIFJpZ2h0IG5vdyBpdCBqdXN0IGhhcyBhIG1hZ2ljIHZhbHVlLCB3aGljaCBpcyBiYXNpY2FsbHkgYSBzYW5pdHkKKyAqIGNoZWNrIG9uIG91ciBhYmlsaXR5IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIG9iamVjdCBzdG9yZS4KKyAqLworc3RydWN0IGV4b2ZzX2ZzY2IgeworCV9fbGU2NCAgc19uZXh0aWQ7CS8qIEhpZ2hlc3Qgb2JqZWN0IElEIHVzZWQgKi8KKwlfX2xlMzIgIHNfbnVtZmlsZXM7CS8qIE51bWJlciBvZiBmaWxlcyBvbiBmcyAqLworCV9fbGUxNiAgc19tYWdpYzsJLyogTWFnaWMgc2lnbmF0dXJlICovCisJX19sZTE2ICBzX25ld2ZzOwkvKiBOb24temVybyBpZiB0aGlzIGlzIGEgbmV3IGZzICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5vZGUtcmVsYXRlZCB0aGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFWE9GU19JREFUQQkJNQorCisvKgorICogVGhlIGZpbGUgY29udHJvbCBibG9jayAtIHN0b3JlZCBpbiBhbiBvYmplY3QncyBhdHRyaWJ1dGVzLiAgVGhpcyBpcyB3aGVyZQorICogdGhlIGluLW1lbW9yeSBpbm9kZSBpcyBzdG9yZWQgb24gZGlzay4KKyAqLworc3RydWN0IGV4b2ZzX2ZjYiB7CisJX19sZTY0ICBpX3NpemU7CQkJLyogU2l6ZSBvZiB0aGUgZmlsZSAqLworCV9fbGUxNiAgaV9tb2RlOyAgICAgICAgIAkvKiBGaWxlIG1vZGUgKi8KKwlfX2xlMTYgIGlfbGlua3NfY291bnQ7ICAJLyogTGlua3MgY291bnQgKi8KKwlfX2xlMzIgIGlfdWlkOyAgICAgICAgICAJLyogT3duZXIgVWlkICovCisJX19sZTMyICBpX2dpZDsgICAgICAgICAgCS8qIEdyb3VwIElkICovCisJX19sZTMyICBpX2F0aW1lOyAgICAgICAgCS8qIEFjY2VzcyB0aW1lICovCisJX19sZTMyICBpX2N0aW1lOyAgICAgICAgCS8qIENyZWF0aW9uIHRpbWUgKi8KKwlfX2xlMzIgIGlfbXRpbWU7ICAgICAgICAJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KKwlfX2xlMzIgIGlfZmxhZ3M7ICAgICAgICAJLyogRmlsZSBmbGFncyAodW51c2VkIGZvciBub3cpKi8KKwlfX2xlMzIgIGlfZ2VuZXJhdGlvbjsgICAJLyogRmlsZSB2ZXJzaW9uIChmb3IgTkZTKSAqLworCV9fbGUzMiAgaV9kYXRhW0VYT0ZTX0lEQVRBXTsJLyogU2hvcnQgc3ltbGluayBuYW1lcyBhbmQgZGV2aWNlICNzICovCit9OworCisjZGVmaW5lIEVYT0ZTX0lOT19BVFRSX1NJWkUJc2l6ZW9mKHN0cnVjdCBleG9mc19mY2IpCisKKy8qIFRoaXMgaXMgdGhlIEF0dHJpYnV0ZSB0aGUgZmNiIGlzIHN0b3JlZCBpbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBfX3dlYWsgb3NkX2F0dHIgZ19hdHRyX2lub2RlX2RhdGEgPSBBVFRSX0RFRigKKwlFWE9GU19BUEFHRV9GU19EQVRBLAorCUVYT0ZTX0FUVFJfSU5PREVfREFUQSwKKwlFWE9GU19JTk9fQVRUUl9TSVpFKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGRlbnRyeS1yZWxhdGVkIHRoaW5ncworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX05BTUVfTEVOCTI1NQorCisvKgorICogVGhlIG9uLWRpc2sgZGlyZWN0b3J5IGVudHJ5CisgKi8KK3N0cnVjdCBleG9mc19kaXJfZW50cnkgeworCV9fbGU2NAkJaW5vZGVfbm87CQkvKiBpbm9kZSBudW1iZXIgICAgICAgICAgICovCisJX19sZTE2CQlyZWNfbGVuOwkJLyogZGlyZWN0b3J5IGVudHJ5IGxlbmd0aCAqLworCXU4CQluYW1lX2xlbjsJCS8qIG5hbWUgbGVuZ3RoICAgICAgICAgICAgKi8KKwl1OAkJZmlsZV90eXBlOwkJLyogdW1tLi4uZmlsZSB0eXBlICAgICAgICAqLworCWNoYXIJCW5hbWVbRVhPRlNfTkFNRV9MRU5dOwkvKiBmaWxlIG5hbWUgICAgICAgICAgICAgICovCit9OworCitlbnVtIHsKKwlFWE9GU19GVF9VTktOT1dOLAorCUVYT0ZTX0ZUX1JFR19GSUxFLAorCUVYT0ZTX0ZUX0RJUiwKKwlFWE9GU19GVF9DSFJERVYsCisJRVhPRlNfRlRfQkxLREVWLAorCUVYT0ZTX0ZUX0ZJRk8sCisJRVhPRlNfRlRfU09DSywKKwlFWE9GU19GVF9TWU1MSU5LLAorCUVYT0ZTX0ZUX01BWAorfTsKKworI2RlZmluZSBFWE9GU19ESVJfUEFECQkJNAorI2RlZmluZSBFWE9GU19ESVJfUk9VTkQJCQkoRVhPRlNfRElSX1BBRCAtIDEpCisjZGVmaW5lIEVYT0ZTX0RJUl9SRUNfTEVOKG5hbWVfbGVuKSBcCisJKCgobmFtZV9sZW4pICsgb2Zmc2V0b2Yoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSwgbmFtZSkgICsgXAorCSAgRVhPRlNfRElSX1JPVU5EKSAmIH5FWE9GU19ESVJfUk9VTkQpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKgorICoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBvc2QuYyAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgZXhvZnNfbWFrZV9jcmVkZW50aWFsKHU4IGNyZWRfYVtPU0RfQ0FQX0xFTl0sCisJCQkgICBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKTsKKworaW50IGV4b2ZzX2NoZWNrX29rX3Jlc2lkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHU2NCAqaW5fcmVzaWQsIHU2NCAqb3V0X3Jlc2lkKTsKK3N0YXRpYyBpbmxpbmUgaW50IGV4b2ZzX2NoZWNrX29rKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IpCit7CisJcmV0dXJuIGV4b2ZzX2NoZWNrX29rX3Jlc2lkKG9yLCBOVUxMLCBOVUxMKTsKK30KK2ludCBleG9mc19zeW5jX29wKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIGludCB0aW1lb3V0LCB1OCAqY3JlZCk7CitpbnQgZXhvZnNfYXN5bmNfb3Aoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwlvc2RfcmVxX2RvbmVfZm4gKmFzeW5jX2RvbmUsIHZvaWQgKmNhbGxlcl9jb250ZXh0LCB1OCAqY3JlZCk7CisKK2ludCBleHRyYWN0X2F0dHJfZnJvbV9yZXEoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IG9zZF9hdHRyICphdHRyKTsKKworaW50IG9zZF9yZXFfcmVhZF9rZXJuKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdm9pZCAqYnVmZiwgdTY0IGxlbik7CisKK2ludCBvc2RfcmVxX3dyaXRlX2tlcm4oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCB1NjQgb2Zmc2V0LCB2b2lkICpidWZmLCB1NjQgbGVuKTsKKworI2VuZGlmIC8qaWZuZGVmIF9fRVhPRlNfQ09NX0hfXyovCmRpZmYgLS1naXQgYS9mcy9leG9mcy9kaXIuYyBiL2ZzL2V4b2ZzL2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjBjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9kaXIuYwpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImV4b2ZzLmgiCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZXhvZnNfY2h1bmtfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBleG9mc19wdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlrdW5tYXAocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworfQorCisvKiBBY2Nlc3NlcyBkaXIncyBpbm9kZS0+aV9zaXplIG11c3QgYmUgY2FsbGVkIHVuZGVyIGlub2RlIGxvY2sgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkaXJfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gKGlub2RlLT5pX3NpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworfQorCitzdGF0aWMgdW5zaWduZWQgZXhvZnNfbGFzdF9ieXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgcGFnZV9ucikKK3sKKwlsb2ZmX3QgbGFzdF9ieXRlID0gaW5vZGUtPmlfc2l6ZTsKKworCWxhc3RfYnl0ZSAtPSBwYWdlX25yIDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CisJaWYgKGxhc3RfYnl0ZSA+IFBBR0VfQ0FDSEVfU0laRSkKKwkJbGFzdF9ieXRlID0gUEFHRV9DQUNIRV9TSVpFOworCXJldHVybiBsYXN0X2J5dGU7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfY29tbWl0X2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqZGlyID0gbWFwcGluZy0+aG9zdDsKKwlpbnQgZXJyID0gMDsKKworCWRpci0+aV92ZXJzaW9uKys7CisKKwlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCisJaWYgKHBvcytsZW4gPiBkaXItPmlfc2l6ZSkgeworCQlpX3NpemVfd3JpdGUoZGlyLCBwb3MrbGVuKTsKKwkJbWFya19pbm9kZV9kaXJ0eShkaXIpOworCX0KKwlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCWlmIChJU19ESVJTWU5DKGRpcikpCisJCWVyciA9IHdyaXRlX29uZV9wYWdlKHBhZ2UsIDEpOworCWVsc2UKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBleG9mc19jaGVja19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gZXhvZnNfY2h1bmtfc2l6ZShkaXIpOworCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCXVuc2lnbmVkIG9mZnMsIHJlY19sZW47CisJdW5zaWduZWQgbGltaXQgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqcDsKKwljaGFyICplcnJvcjsKKworCS8qIGlmIHRoZSBwYWdlIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgZGlyZWN0b3J5ICovCisJaWYgKChkaXItPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUKSA9PSBwYWdlLT5pbmRleCkgeworCQlsaW1pdCA9IGRpci0+aV9zaXplICYgflBBR0VfQ0FDSEVfTUFTSzsKKwkJaWYgKGxpbWl0ICYgKGNodW5rX3NpemUgLSAxKSkKKwkJCWdvdG8gRWJhZHNpemU7CisJCWlmICghbGltaXQpCisJCQlnb3RvIG91dDsKKwl9CisJZm9yIChvZmZzID0gMDsgb2ZmcyA8PSBsaW1pdCAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpOyBvZmZzICs9IHJlY19sZW4pIHsKKwkJcCA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGthZGRyICsgb2Zmcyk7CisJCXJlY19sZW4gPSBsZTE2X3RvX2NwdShwLT5yZWNfbGVuKTsKKworCQlpZiAocmVjX2xlbiA8IEVYT0ZTX0RJUl9SRUNfTEVOKDEpKQorCQkJZ290byBFc2hvcnQ7CisJCWlmIChyZWNfbGVuICYgMykKKwkJCWdvdG8gRWFsaWduOworCQlpZiAocmVjX2xlbiA8IEVYT0ZTX0RJUl9SRUNfTEVOKHAtPm5hbWVfbGVuKSkKKwkJCWdvdG8gRW5hbWVsZW47CisJCWlmICgoKG9mZnMgKyByZWNfbGVuIC0gMSkgXiBvZmZzKSAmIH4oY2h1bmtfc2l6ZS0xKSkKKwkJCWdvdG8gRXNwYW47CisJfQorCWlmIChvZmZzICE9IGxpbWl0KQorCQlnb3RvIEVlbmQ7CitvdXQ6CisJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJcmV0dXJuOworCitFYmFkc2l6ZToKKwlFWE9GU19FUlIoIkVSUk9SIFtleG9mc19jaGVja19wYWdlXTogIgorCQkic2l6ZSBvZiBkaXJlY3RvcnkgIyVsdSBpcyBub3QgYSBtdWx0aXBsZSBvZiBjaHVuayBzaXplIiwKKwkJZGlyLT5pX2lubworCSk7CisJZ290byBmYWlsOworRXNob3J0OgorCWVycm9yID0gInJlY19sZW4gaXMgc21hbGxlciB0aGFuIG1pbmltYWwiOworCWdvdG8gYmFkX2VudHJ5OworRWFsaWduOgorCWVycm9yID0gInVuYWxpZ25lZCBkaXJlY3RvcnkgZW50cnkiOworCWdvdG8gYmFkX2VudHJ5OworRW5hbWVsZW46CisJZXJyb3IgPSAicmVjX2xlbiBpcyB0b28gc21hbGwgZm9yIG5hbWVfbGVuIjsKKwlnb3RvIGJhZF9lbnRyeTsKK0VzcGFuOgorCWVycm9yID0gImRpcmVjdG9yeSBlbnRyeSBhY3Jvc3MgYmxvY2tzIjsKKwlnb3RvIGJhZF9lbnRyeTsKK2JhZF9lbnRyeToKKwlFWE9GU19FUlIoCisJCSJFUlJPUiBbZXhvZnNfY2hlY2tfcGFnZV06IGJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSAiCisJCSJvZmZzZXQ9JWx1LCBpbm9kZT0lbGx1LCByZWNfbGVuPSVkLCBuYW1lX2xlbj0lZCIsCisJCWRpci0+aV9pbm8sIGVycm9yLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCisJCV9MTFUobGU2NF90b19jcHUocC0+aW5vZGVfbm8pKSwKKwkJcmVjX2xlbiwgcC0+bmFtZV9sZW4pOworCWdvdG8gZmFpbDsKK0VlbmQ6CisJcCA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGthZGRyICsgb2Zmcyk7CisJRVhPRlNfRVJSKCJFUlJPUiBbZXhvZnNfY2hlY2tfcGFnZV06ICIKKwkJImVudHJ5IGluIGRpcmVjdG9yeSAjJWx1IHNwYW5zIHRoZSBwYWdlIGJvdW5kYXJ5IgorCQkib2Zmc2V0PSVsdSwgaW5vZGU9JWxsdSIsCisJCWRpci0+aV9pbm8sIChwYWdlLT5pbmRleDw8UEFHRV9DQUNIRV9TSElGVCkrb2ZmcywKKwkJX0xMVShsZTY0X3RvX2NwdShwLT5pbm9kZV9ubykpKTsKK2ZhaWw6CisJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJU2V0UGFnZUVycm9yKHBhZ2UpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmV4b2ZzX2dldF9wYWdlKHN0cnVjdCBpbm9kZSAqZGlyLCB1bnNpZ25lZCBsb25nIG4pCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBkaXItPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG4sIE5VTEwpOworCisJaWYgKCFJU19FUlIocGFnZSkpIHsKKwkJa21hcChwYWdlKTsKKwkJaWYgKCFQYWdlQ2hlY2tlZChwYWdlKSkKKwkJCWV4b2ZzX2NoZWNrX3BhZ2UocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybiBwYWdlOworCitmYWlsOgorCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCXJldHVybiBFUlJfUFRSKC1FSU8pOworfQorCitzdGF0aWMgaW5saW5lIGludCBleG9mc19tYXRjaChpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQkJCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSkKK3sKKwlpZiAobGVuICE9IGRlLT5uYW1lX2xlbikKKwkJcmV0dXJuIDA7CisJaWYgKCFkZS0+aW5vZGVfbm8pCisJCXJldHVybiAwOworCXJldHVybiAhbWVtY21wKG5hbWUsIGRlLT5uYW1lLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpleG9mc19uZXh0X2VudHJ5KHN0cnVjdCBleG9mc19kaXJfZW50cnkgKnApCit7CisJcmV0dXJuIChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKChjaGFyICopcCArIGxlMTZfdG9fY3B1KHAtPnJlY19sZW4pKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZAorZXhvZnNfdmFsaWRhdGVfZW50cnkoY2hhciAqYmFzZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBtYXNrKQoreworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikoYmFzZSArIG9mZnNldCk7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqcCA9CisJCQkoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShiYXNlICsgKG9mZnNldCZtYXNrKSk7CisJd2hpbGUgKChjaGFyICopcCA8IChjaGFyICopZGUpIHsKKwkJaWYgKHAtPnJlY19sZW4gPT0gMCkKKwkJCWJyZWFrOworCQlwID0gZXhvZnNfbmV4dF9lbnRyeShwKTsKKwl9CisJcmV0dXJuIChjaGFyICopcCAtIGJhc2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGV4b2ZzX2ZpbGV0eXBlX3RhYmxlW0VYT0ZTX0ZUX01BWF0gPSB7CisJW0VYT0ZTX0ZUX1VOS05PV05dCT0gRFRfVU5LTk9XTiwKKwlbRVhPRlNfRlRfUkVHX0ZJTEVdCT0gRFRfUkVHLAorCVtFWE9GU19GVF9ESVJdCQk9IERUX0RJUiwKKwlbRVhPRlNfRlRfQ0hSREVWXQk9IERUX0NIUiwKKwlbRVhPRlNfRlRfQkxLREVWXQk9IERUX0JMSywKKwlbRVhPRlNfRlRfRklGT10JCT0gRFRfRklGTywKKwlbRVhPRlNfRlRfU09DS10JCT0gRFRfU09DSywKKwlbRVhPRlNfRlRfU1lNTElOS10JPSBEVF9MTkssCit9OworCisjZGVmaW5lIFNfU0hJRlQgMTIKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGV4b2ZzX3R5cGVfYnlfbW9kZVtTX0lGTVQgPj4gU19TSElGVF0gPSB7CisJW1NfSUZSRUcgPj4gU19TSElGVF0JPSBFWE9GU19GVF9SRUdfRklMRSwKKwlbU19JRkRJUiA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX0RJUiwKKwlbU19JRkNIUiA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX0NIUkRFViwKKwlbU19JRkJMSyA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX0JMS0RFViwKKwlbU19JRklGTyA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX0ZJRk8sCisJW1NfSUZTT0NLID4+IFNfU0hJRlRdCT0gRVhPRlNfRlRfU09DSywKKwlbU19JRkxOSyA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX1NZTUxJTkssCit9OworCitzdGF0aWMgaW5saW5lCit2b2lkIGV4b2ZzX3NldF9kZV90eXBlKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwlkZS0+ZmlsZV90eXBlID0gZXhvZnNfdHlwZV9ieV9tb2RlWyhtb2RlICYgU19JRk1UKSA+PiBTX1NISUZUXTsKK30KKworc3RhdGljIGludAorZXhvZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlsb2ZmX3QgcG9zID0gZmlscC0+Zl9wb3M7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHBvcyAmIH5QQUdFX0NBQ0hFX01BU0s7CisJdW5zaWduZWQgbG9uZyBuID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBkaXJfcGFnZXMoaW5vZGUpOworCXVuc2lnbmVkIGNodW5rX21hc2sgPSB+KGV4b2ZzX2NodW5rX3NpemUoaW5vZGUpLTEpOworCXVuc2lnbmVkIGNoYXIgKnR5cGVzID0gTlVMTDsKKwlpbnQgbmVlZF9yZXZhbGlkYXRlID0gKGZpbHAtPmZfdmVyc2lvbiAhPSBpbm9kZS0+aV92ZXJzaW9uKTsKKworCWlmIChwb3MgPiBpbm9kZS0+aV9zaXplIC0gRVhPRlNfRElSX1JFQ19MRU4oMSkpCisJCXJldHVybiAwOworCisJdHlwZXMgPSBleG9mc19maWxldHlwZV90YWJsZTsKKworCWZvciAoIDsgbiA8IG5wYWdlczsgbisrLCBvZmZzZXQgPSAwKSB7CisJCWNoYXIgKmthZGRyLCAqbGltaXQ7CisJCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGV4b2ZzX2dldF9wYWdlKGlub2RlLCBuKTsKKworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlFWE9GU19FUlIoIkVSUk9SOiAiCisJCQkJICAgImJhZCBwYWdlIGluICMlbHUiLAorCQkJCSAgIGlub2RlLT5pX2lubyk7CisJCQlmaWxwLT5mX3BvcyArPSBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQ7CisJCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKKwkJfQorCQlrYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJaWYgKHVubGlrZWx5KG5lZWRfcmV2YWxpZGF0ZSkpIHsKKwkJCWlmIChvZmZzZXQpIHsKKwkJCQlvZmZzZXQgPSBleG9mc192YWxpZGF0ZV9lbnRyeShrYWRkciwgb2Zmc2V0LAorCQkJCQkJCQljaHVua19tYXNrKTsKKwkJCQlmaWxwLT5mX3BvcyA9IChuPDxQQUdFX0NBQ0hFX1NISUZUKSArIG9mZnNldDsKKwkJCX0KKwkJCWZpbHAtPmZfdmVyc2lvbiA9IGlub2RlLT5pX3ZlcnNpb247CisJCQluZWVkX3JldmFsaWRhdGUgPSAwOworCQl9CisJCWRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikoa2FkZHIgKyBvZmZzZXQpOworCQlsaW1pdCA9IGthZGRyICsgZXhvZnNfbGFzdF9ieXRlKGlub2RlLCBuKSAtCisJCQkJCQkJRVhPRlNfRElSX1JFQ19MRU4oMSk7CisJCWZvciAoOyAoY2hhciAqKWRlIDw9IGxpbWl0OyBkZSA9IGV4b2ZzX25leHRfZW50cnkoZGUpKSB7CisJCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJCUVYT0ZTX0VSUigiRVJST1I6ICIKKwkJCQkJInplcm8tbGVuZ3RoIGRpcmVjdG9yeSBlbnRyeSIpOworCQkJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJaWYgKGRlLT5pbm9kZV9ubykgeworCQkJCWludCBvdmVyOworCQkJCXVuc2lnbmVkIGNoYXIgZF90eXBlID0gRFRfVU5LTk9XTjsKKworCQkJCWlmICh0eXBlcyAmJiBkZS0+ZmlsZV90eXBlIDwgRVhPRlNfRlRfTUFYKQorCQkJCQlkX3R5cGUgPSB0eXBlc1tkZS0+ZmlsZV90eXBlXTsKKworCQkJCW9mZnNldCA9IChjaGFyICopZGUgLSBrYWRkcjsKKwkJCQlvdmVyID0gZmlsbGRpcihkaXJlbnQsIGRlLT5uYW1lLCBkZS0+bmFtZV9sZW4sCisJCQkJCQkobjw8UEFHRV9DQUNIRV9TSElGVCkgfCBvZmZzZXQsCisJCQkJCQlsZTY0X3RvX2NwdShkZS0+aW5vZGVfbm8pLAorCQkJCQkJZF90eXBlKTsKKwkJCQlpZiAob3ZlcikgeworCQkJCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQkJZmlscC0+Zl9wb3MgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCQl9CisJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpleG9mc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgcGFnZSAqKnJlc19wYWdlKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCWludCBuYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOworCXVuc2lnbmVkIHJlY2xlbiA9IEVYT0ZTX0RJUl9SRUNfTEVOKG5hbWVsZW4pOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG47CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBkaXJfcGFnZXMoZGlyKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGRpcik7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisKKwlpZiAobnBhZ2VzID09IDApCisJCWdvdG8gb3V0OworCisJKnJlc19wYWdlID0gTlVMTDsKKworCXN0YXJ0ID0gb2ktPmlfZGlyX3N0YXJ0X2xvb2t1cDsKKwlpZiAoc3RhcnQgPj0gbnBhZ2VzKQorCQlzdGFydCA9IDA7CisJbiA9IHN0YXJ0OworCWRvIHsKKwkJY2hhciAqa2FkZHI7CisJCXBhZ2UgPSBleG9mc19nZXRfcGFnZShkaXIsIG4pOworCQlpZiAoIUlTX0VSUihwYWdlKSkgeworCQkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopIGthZGRyOworCQkJa2FkZHIgKz0gZXhvZnNfbGFzdF9ieXRlKGRpciwgbikgLSByZWNsZW47CisJCQl3aGlsZSAoKGNoYXIgKikgZGUgPD0ga2FkZHIpIHsKKwkJCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJCQlFWE9GU19FUlIoCisJCQkJCQkiRVJST1I6IGV4b2ZzX2ZpbmRfZW50cnk6ICIKKwkJCQkJCSJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiKTsKKwkJCQkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQlpZiAoZXhvZnNfbWF0Y2gobmFtZWxlbiwgbmFtZSwgZGUpKQorCQkJCQlnb3RvIGZvdW5kOworCQkJCWRlID0gZXhvZnNfbmV4dF9lbnRyeShkZSk7CisJCQl9CisJCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwkJfQorCQlpZiAoKytuID49IG5wYWdlcykKKwkJCW4gPSAwOworCX0gd2hpbGUgKG4gIT0gc3RhcnQpOworb3V0OgorCXJldHVybiBOVUxMOworCitmb3VuZDoKKwkqcmVzX3BhZ2UgPSBwYWdlOworCW9pLT5pX2Rpcl9zdGFydF9sb29rdXAgPSBuOworCXJldHVybiBkZTsKK30KKworc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfZG90ZG90KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgcGFnZSAqKnApCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleG9mc19nZXRfcGFnZShkaXIsIDApOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlID0gTlVMTDsKKworCWlmICghSVNfRVJSKHBhZ2UpKSB7CisJCWRlID0gZXhvZnNfbmV4dF9lbnRyeSgKKwkJCQkoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKXBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCSpwID0gcGFnZTsKKwl9CisJcmV0dXJuIGRlOworfQorCitpbm9fdCBleG9mc19wYXJlbnRfaW5vKHN0cnVjdCBkZW50cnkgKmNoaWxkKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCWlub190IGlubzsKKworCWRlID0gZXhvZnNfZG90ZG90KGNoaWxkLT5kX2lub2RlLCAmcGFnZSk7CisJaWYgKCFkZSkKKwkJcmV0dXJuIDA7CisKKwlpbm8gPSBsZTY0X3RvX2NwdShkZS0+aW5vZGVfbm8pOworCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCXJldHVybiBpbm87Cit9CisKK2lub190IGV4b2ZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbm9fdCByZXMgPSAwOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJZGUgPSBleG9mc19maW5kX2VudHJ5KGRpciwgZGVudHJ5LCAmcGFnZSk7CisJaWYgKGRlKSB7CisJCXJlcyA9IGxlNjRfdG9fY3B1KGRlLT5pbm9kZV9ubyk7CisJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCX0KKwlyZXR1cm4gcmVzOworfQorCitpbnQgZXhvZnNfc2V0X2xpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlLAorCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJbG9mZl90IHBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsKKwkJCShjaGFyICopIGRlIC0gKGNoYXIgKikgcGFnZV9hZGRyZXNzKHBhZ2UpOworCXVuc2lnbmVkIGxlbiA9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwlpbnQgZXJyOworCisJbG9ja19wYWdlKHBhZ2UpOworCWVyciA9IGV4b2ZzX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgbGVuLAorCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwgJnBhZ2UsIE5VTEwpOworCWlmIChlcnIpCisJCUVYT0ZTX0VSUigiZXhvZnNfc2V0X2xpbms6IGV4b2ZzX3dyaXRlX2JlZ2luIEZBSUxEID0+ICVkXG4iLAorCQkJICBlcnIpOworCisJZGUtPmlub2RlX25vID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfaW5vKTsKKwlleG9mc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCWlmIChsaWtlbHkoIWVycikpCisJCWVyciA9IGV4b2ZzX2NvbW1pdF9jaHVuayhwYWdlLCBwb3MsIGxlbik7CisJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZXhvZnNfYWRkX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKKwlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gZXhvZnNfY2h1bmtfc2l6ZShkaXIpOworCXVuc2lnbmVkIHJlY2xlbiA9IEVYT0ZTX0RJUl9SRUNfTEVOKG5hbWVsZW4pOworCXVuc2lnbmVkIHNob3J0IHJlY19sZW4sIG5hbWVfbGVuOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IGRpcl9wYWdlcyhkaXIpOworCXVuc2lnbmVkIGxvbmcgbjsKKwljaGFyICprYWRkcjsKKwlsb2ZmX3QgcG9zOworCWludCBlcnI7CisKKwlmb3IgKG4gPSAwOyBuIDw9IG5wYWdlczsgbisrKSB7CisJCWNoYXIgKmRpcl9lbmQ7CisKKwkJcGFnZSA9IGV4b2ZzX2dldF9wYWdlKGRpciwgbik7CisJCWVyciA9IFBUUl9FUlIocGFnZSk7CisJCWlmIChJU19FUlIocGFnZSkpCisJCQlnb3RvIG91dDsKKwkJbG9ja19wYWdlKHBhZ2UpOworCQlrYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwkJZGlyX2VuZCA9IGthZGRyICsgZXhvZnNfbGFzdF9ieXRlKGRpciwgbik7CisJCWRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKilrYWRkcjsKKwkJa2FkZHIgKz0gUEFHRV9DQUNIRV9TSVpFIC0gcmVjbGVuOworCQl3aGlsZSAoKGNoYXIgKilkZSA8PSBrYWRkcikgeworCQkJaWYgKChjaGFyICopZGUgPT0gZGlyX2VuZCkgeworCQkJCW5hbWVfbGVuID0gMDsKKwkJCQlyZWNfbGVuID0gY2h1bmtfc2l6ZTsKKwkJCQlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KGNodW5rX3NpemUpOworCQkJCWRlLT5pbm9kZV9ubyA9IDA7CisJCQkJZ290byBnb3RfaXQ7CisJCQl9CisJCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJCUVYT0ZTX0VSUigiRVJST1I6IGV4b2ZzX2FkZF9saW5rOiAiCisJCQkJCSJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiKTsKKwkJCQllcnIgPSAtRUlPOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCWVyciA9IC1FRVhJU1Q7CisJCQlpZiAoZXhvZnNfbWF0Y2gobmFtZWxlbiwgbmFtZSwgZGUpKQorCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCW5hbWVfbGVuID0gRVhPRlNfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKKwkJCXJlY19sZW4gPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJCQlpZiAoIWRlLT5pbm9kZV9ubyAmJiByZWNfbGVuID49IHJlY2xlbikKKwkJCQlnb3RvIGdvdF9pdDsKKwkJCWlmIChyZWNfbGVuID49IG5hbWVfbGVuICsgcmVjbGVuKQorCQkJCWdvdG8gZ290X2l0OworCQkJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSAoKGNoYXIgKikgZGUgKyByZWNfbGVuKTsKKwkJfQorCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJfQorCisJRVhPRlNfRVJSKCJleG9mc19hZGRfbGluazogQkFEIGRlbnRyeT0lcCBvciBpbm9kZT0lcCIsIGRlbnRyeSwgaW5vZGUpOworCXJldHVybiAtRUlOVkFMOworCitnb3RfaXQ6CisJcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKworCQkoY2hhciAqKWRlIC0gKGNoYXIgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJZXJyID0gZXhvZnNfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCByZWNfbGVuLCAwLAorCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bmxvY2s7CisJaWYgKGRlLT5pbm9kZV9ubykgeworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTEgPQorCQkJKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikoKGNoYXIgKilkZSArIG5hbWVfbGVuKTsKKwkJZGUxLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYocmVjX2xlbiAtIG5hbWVfbGVuKTsKKwkJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihuYW1lX2xlbik7CisJCWRlID0gZGUxOworCX0KKwlkZS0+bmFtZV9sZW4gPSBuYW1lbGVuOworCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CisJZGUtPmlub2RlX25vID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfaW5vKTsKKwlleG9mc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCWVyciA9IGV4b2ZzX2NvbW1pdF9jaHVuayhwYWdlLCBwb3MsIHJlY19sZW4pOworCWRpci0+aV9tdGltZSA9IGRpci0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwltYXJrX2lub2RlX2RpcnR5KGRpcik7CisJc2JpLT5zX251bWZpbGVzKys7CisKK291dF9wdXQ6CisJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CitvdXQ6CisJcmV0dXJuIGVycjsKK291dF91bmxvY2s6CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJZ290byBvdXRfcHV0OworfQorCitpbnQgZXhvZnNfZGVsZXRlX2VudHJ5KHN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRpciwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCXVuc2lnbmVkIGZyb20gPSAoKGNoYXIgKilkaXIgLSBrYWRkcikgJiB+KGV4b2ZzX2NodW5rX3NpemUoaW5vZGUpLTEpOworCXVuc2lnbmVkIHRvID0gKChjaGFyICopZGlyIC0ga2FkZHIpICsgbGUxNl90b19jcHUoZGlyLT5yZWNfbGVuKTsKKwlsb2ZmX3QgcG9zOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKnBkZSA9IE5VTEw7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSAoa2FkZHIgKyBmcm9tKTsKKwlpbnQgZXJyOworCisJd2hpbGUgKGRlIDwgZGlyKSB7CisJCWlmIChkZS0+cmVjX2xlbiA9PSAwKSB7CisJCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19kZWxldGVfZW50cnk6IgorCQkJCSJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIG91dDsKKwkJfQorCQlwZGUgPSBkZTsKKwkJZGUgPSBleG9mc19uZXh0X2VudHJ5KGRlKTsKKwl9CisJaWYgKHBkZSkKKwkJZnJvbSA9IChjaGFyICopcGRlIC0gKGNoYXIgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKyBmcm9tOworCWxvY2tfcGFnZShwYWdlKTsKKwllcnIgPSBleG9mc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCBwb3MsIHRvIC0gZnJvbSwgMCwKKwkJCQkJCQkmcGFnZSwgTlVMTCk7CisJaWYgKGVycikKKwkJRVhPRlNfRVJSKCJleG9mc19kZWxldGVfZW50cnk6IGV4b2ZzX3dyaXRlX2JlZ2luIEZBSUxEID0+ICVkXG4iLAorCQkJICBlcnIpOworCWlmIChwZGUpCisJCXBkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KHRvIC0gZnJvbSk7CisJZGlyLT5pbm9kZV9ubyA9IDA7CisJaWYgKGxpa2VseSghZXJyKSkKKwkJZXJyID0gZXhvZnNfY29tbWl0X2NodW5rKHBhZ2UsIHBvcywgdG8gLSBmcm9tKTsKKwlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXNiaS0+c19udW1maWxlcy0tOworb3V0OgorCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGtlcHQgYWxpZ25lZCBvbiA0IGJ5dGVzICovCisjZGVmaW5lIFRISVNfRElSICIuXDBcMCIKKyNkZWZpbmUgUEFSRU5UX0RJUiAiLi5cMCIKKworaW50IGV4b2ZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpwYXJlbnQpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBwYWdlICpwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIDApOworCXVuc2lnbmVkIGNodW5rX3NpemUgPSBleG9mc19jaHVua19zaXplKGlub2RlKTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwlpbnQgZXJyOworCXZvaWQgKmthZGRyOworCisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IGV4b2ZzX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIDAsIGNodW5rX3NpemUsIDAsCisJCQkJCQkJJnBhZ2UsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlrYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopa2FkZHI7CisJZGUtPm5hbWVfbGVuID0gMTsKKwlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KEVYT0ZTX0RJUl9SRUNfTEVOKDEpKTsKKwltZW1jcHkoZGUtPm5hbWUsIFRISVNfRElSLCBzaXplb2YoVEhJU19ESVIpKTsKKwlkZS0+aW5vZGVfbm8gPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9pbm8pOworCWV4b2ZzX3NldF9kZV90eXBlKGRlLCBpbm9kZSk7CisKKwlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGthZGRyICsgRVhPRlNfRElSX1JFQ19MRU4oMSkpOworCWRlLT5uYW1lX2xlbiA9IDI7CisJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihjaHVua19zaXplIC0gRVhPRlNfRElSX1JFQ19MRU4oMSkpOworCWRlLT5pbm9kZV9ubyA9IGNwdV90b19sZTY0KHBhcmVudC0+aV9pbm8pOworCW1lbWNweShkZS0+bmFtZSwgUEFSRU5UX0RJUiwgc2l6ZW9mKFBBUkVOVF9ESVIpKTsKKwlleG9mc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCWt1bm1hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWVyciA9IGV4b2ZzX2NvbW1pdF9jaHVuayhwYWdlLCAwLCBjaHVua19zaXplKTsKK2ZhaWw6CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBleG9mc19lbXB0eV9kaXIoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpLCBucGFnZXMgPSBkaXJfcGFnZXMoaW5vZGUpOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCWNoYXIgKmthZGRyOworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwkJcGFnZSA9IGV4b2ZzX2dldF9wYWdlKGlub2RlLCBpKTsKKworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJY29udGludWU7CisKKwkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKilrYWRkcjsKKwkJa2FkZHIgKz0gZXhvZnNfbGFzdF9ieXRlKGlub2RlLCBpKSAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpOworCisJCXdoaWxlICgoY2hhciAqKWRlIDw9IGthZGRyKSB7CisJCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJCUVYT0ZTX0VSUigiRVJST1I6IGV4b2ZzX2VtcHR5X2RpcjogIgorCQkJCQkgICJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiCisJCQkJCSAgImthZGRyPSVwLCBkZT0lcFxuIiwga2FkZHIsIGRlKTsKKwkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCX0KKwkJCWlmIChkZS0+aW5vZGVfbm8gIT0gMCkgeworCQkJCS8qIGNoZWNrIGZvciAuIGFuZCAuLiAqLworCQkJCWlmIChkZS0+bmFtZVswXSAhPSAnLicpCisJCQkJCWdvdG8gbm90X2VtcHR5OworCQkJCWlmIChkZS0+bmFtZV9sZW4gPiAyKQorCQkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCQlpZiAoZGUtPm5hbWVfbGVuIDwgMikgeworCQkJCQlpZiAobGU2NF90b19jcHUoZGUtPmlub2RlX25vKSAhPQorCQkJCQkgICAgaW5vZGUtPmlfaW5vKQorCQkJCQkJZ290byBub3RfZW1wdHk7CisJCQkJfSBlbHNlIGlmIChkZS0+bmFtZVsxXSAhPSAnLicpCisJCQkJCWdvdG8gbm90X2VtcHR5OworCQkJfQorCQkJZGUgPSBleG9mc19uZXh0X2VudHJ5KGRlKTsKKwkJfQorCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwl9CisJcmV0dXJuIDE7CisKK25vdF9lbXB0eToKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19kaXJfb3BlcmF0aW9ucyA9IHsKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCisJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKKwkucmVhZGRpcgk9IGV4b2ZzX3JlYWRkaXIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZXhvZnMuaCBiL2ZzL2V4b2ZzL2V4b2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkNGM3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9leG9mcy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNpZm5kZWYgX19FWE9GU19IX18KKyNkZWZpbmUgX19FWE9GU19IX18KKworI2RlZmluZSBFWE9GU19FUlIoZm10LCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImV4b2ZzOiAiIGZtdCwgIyNhKQorCisjaWZkZWYgQ09ORklHX0VYT0ZTX0RFQlVHCisjZGVmaW5lIEVYT0ZTX0RCR01TRyhmbXQsIGEuLi4pIFwKKwlwcmludGsoS0VSTl9OT1RJQ0UgImV4b2ZzIEAlczolZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhKQorI2Vsc2UKKyNkZWZpbmUgRVhPRlNfREJHTVNHKGZtdCwgYS4uLikgXAorCWRvIHsgaWYgKDApIHByaW50ayhmbXQsICMjYSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogdTY0IGhhcyBwcm9ibGVtcyB3aXRoIHByaW50ayB0aGlzIHdpbGwgY2FzdCBpdCB0byB1bnNpZ25lZCBsb25nIGxvbmcgKi8KKyNkZWZpbmUgX0xMVSh4KSAodW5zaWduZWQgbG9uZyBsb25nKSh4KQorCisvKgorICogb3VyIGV4dGVuc2lvbiB0byB0aGUgaW4tbWVtb3J5IHN1cGVyYmxvY2sKKyAqLworc3RydWN0IGV4b2ZzX3NiX2luZm8geworCXN0cnVjdCBvc2RfZGV2CSpzX2RldjsJCQkvKiByZXR1cm5lZCBieSBnZXRfb3NkX2RldiAgICAqLworCW9zZF9pZAkJc19waWQ7CQkJLyogcGFydGl0aW9uIElEIG9mIGZpbGUgc3lzdGVtKi8KKwlpbnQJCXNfdGltZW91dDsJCS8qIHRpbWVvdXQgZm9yIE9TRCBvcGVyYXRpb25zICovCisJdWludDY0X3QJc19uZXh0aWQ7CQkvKiBoaWdoZXN0IG9iamVjdCBJRCB1c2VkICAgICAqLworCXVpbnQzMl90CXNfbnVtZmlsZXM7CQkvKiBudW1iZXIgb2YgZmlsZXMgb24gZnMgICAgICAqLworCXNwaW5sb2NrX3QJc19uZXh0X2dlbl9sb2NrOwkvKiBzcGlubG9jayBmb3IgZ2VuICMgdXBkYXRlICAqLworCXUzMgkJc19uZXh0X2dlbmVyYXRpb247CS8qIG5leHQgZ2VuICMgdG8gdXNlICAgICAgICAgICovCisJYXRvbWljX3QJc19jdXJyX3BlbmRpbmc7CQkvKiBudW1iZXIgb2YgcGVuZGluZyBjb21tYW5kcyAqLworCXVpbnQ4X3QJCXNfY3JlZFtPU0RfQ0FQX0xFTl07CS8qIGFsbC1wb3dlcmZ1bCBjcmVkZW50aWFsICAgICovCit9OworCisvKgorICogb3VyIGV4dGVuc2lvbiB0byB0aGUgaW4tbWVtb3J5IGlub2RlCisgKi8KK3N0cnVjdCBleG9mc19pX2luZm8geworCXVuc2lnbmVkIGxvbmcgIGlfZmxhZ3M7ICAgICAgICAgICAgLyogdmFyaW91cyBhdG9taWMgZmxhZ3MgICAgICAgICAgICAqLworCXVpbnQzMl90ICAgICAgIGlfZGF0YVtFWE9GU19JREFUQV07LypzaG9ydCBzeW1saW5rIG5hbWVzIGFuZCBkZXZpY2UgI3MqLworCXVpbnQzMl90ICAgICAgIGlfZGlyX3N0YXJ0X2xvb2t1cDsgLyogd2hpY2ggcGFnZSB0byBzdGFydCBsb29rdXAgICAgICAqLworCXdhaXRfcXVldWVfaGVhZF90IGlfd3E7ICAgICAgICAgICAgLyogd2FpdCBxdWV1ZSBmb3IgaW5vZGUgICAgICAgICAgICAqLworCXVpbnQ2NF90ICAgICAgIGlfY29tbWl0X3NpemU7ICAgICAgLyogdGhlIG9iamVjdCdzIHdyaXR0ZW4gbGVuZ3RoICAgICAqLworCXVpbnQ4X3QgICAgICAgIGlfY3JlZFtPU0RfQ0FQX0xFTl07LyogYWxsLXBvd2VyZnVsIGNyZWRlbnRpYWwgICAgICAgICAqLworCXN0cnVjdCBpbm9kZSAgIHZmc19pbm9kZTsgICAgICAgICAgLyogbm9ybWFsIGluLW1lbW9yeSBpbm9kZSAgICAgICAgICAqLworfTsKKworLyoKKyAqIG91ciBpbm9kZSBmbGFncworICovCisjZGVmaW5lIE9CSl8yQkNSRUFURUQJMAkvKiBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHNvb24qLworI2RlZmluZSBPQkpfQ1JFQVRFRAkxCS8qIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkIG9uIHRoZSBvc2QqLworCitzdGF0aWMgaW5saW5lIGludCBvYmpfMmJjcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCXJldHVybiB0ZXN0X2JpdChPQkpfMkJDUkVBVEVELCAmb2ktPmlfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X29ial8yYmNyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCit7CisJc2V0X2JpdChPQkpfMkJDUkVBVEVELCAmb2ktPmlfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBvYmpfY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoT0JKX0NSRUFURUQsICZvaS0+aV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCit7CisJc2V0X2JpdChPQkpfQ1JFQVRFRCwgJm9pLT5pX2ZsYWdzKTsKK30KKworaW50IF9fZXhvZnNfd2FpdF9vYmpfY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSk7CitzdGF0aWMgaW5saW5lIGludCB3YWl0X29ial9jcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCWlmIChsaWtlbHkob2JqX2NyZWF0ZWQob2kpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gX19leG9mc193YWl0X29ial9jcmVhdGVkKG9pKTsKK30KKworLyoKKyAqIGdldCB0byBvdXIgaW5vZGUgZnJvbSB0aGUgdmZzIGlub2RlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4b2ZzX2lfaW5mbyAqZXhvZnNfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBleG9mc19pX2luZm8sIHZmc19pbm9kZSk7Cit9CisKKy8qCisgKiBNYXhpbXVtIGNvdW50IG9mIGxpbmtzIHRvIGEgZmlsZQorICovCisjZGVmaW5lIEVYT0ZTX0xJTktfTUFYICAgICAgICAgICAzMjAwMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaW5vZGUuYyAgICAgICAgICAgICAgICovCit2b2lkIGV4b2ZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IGV4b2ZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CitpbnQgZXhvZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4b2ZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOworc3RydWN0IGlub2RlICpleG9mc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgZXhvZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKKworLyogZGlyLmM6ICAgICAgICAgICAgICAgICovCitpbnQgZXhvZnNfYWRkX2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7Citpbm9fdCBleG9mc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworaW50IGV4b2ZzX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBwYWdlICopOworaW50IGV4b2ZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqKTsKK3N0cnVjdCBleG9mc19kaXJfZW50cnkgKmV4b2ZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKKwkJCQkJIHN0cnVjdCBwYWdlICoqKTsKK2ludCBleG9mc19lbXB0eV9kaXIoc3RydWN0IGlub2RlICopOworc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfZG90ZG90KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKik7Citpbm9fdCBleG9mc19wYXJlbnRfaW5vKHN0cnVjdCBkZW50cnkgKmNoaWxkKTsKK2ludCBleG9mc19zZXRfbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgcGFnZSAqLAorCQkgICAgc3RydWN0IGlub2RlICopOworCisvKioqKioqKioqKioqKioqKioqKioqCisgKiBvcGVyYXRpb24gdmVjdG9ycyAqCisgKioqKioqKioqKioqKioqKioqKioqLworLyogZGlyLmM6ICAgICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4b2ZzX2Rpcl9vcGVyYXRpb25zOworCisvKiBmaWxlLmMgICAgICAgICAgICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4b2ZzX2ZpbGVfb3BlcmF0aW9uczsKKworLyogaW5vZGUuYyAgICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4b2ZzX2FvcHM7CisKKy8qIG5hbWVpLmMgICAgICAgICAgICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOworCisvKiBzeW1saW5rLmMgICAgICAgICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leG9mcy9maWxlLmMgYi9mcy9leG9mcy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVkN2ZlNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL2ZpbGUuYwpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKworI2luY2x1ZGUgImV4b2ZzLmgiCisKK3N0YXRpYyBpbnQgZXhvZnNfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICBpbnQgZGF0YXN5bmMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbHAtPmZfbWFwcGluZzsKKworCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQobWFwcGluZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qTm90ZTogZmlsZV9mc3luYyBiZWxvdyBhbHNvIGNhbGxlcyBzeW5jX2Jsb2NrZGV2LCB3aGljaCBpcyBhIG5vLW9wCisJICogICAgICBmb3IgZXhvZnMsIGJ1dCBvdGhlciB0aGVuIHRoYXQgaXQgZG9lcyBzeW5jX2lub2RlIGFuZAorCSAqICAgICAgc3luY19zdXBlcmJsb2NrIHdoaWNoIGlzIHdoYXQgd2UgbmVlZCBoZXJlLgorCSAqLworCXJldHVybiBmaWxlX2ZzeW5jKGZpbHAsIGRlbnRyeSwgZGF0YXN5bmMpOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQoreworCWV4b2ZzX2ZpbGVfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMSk7CisJLyogVE9ETzogRmx1c2ggdGhlIE9TRCB0YXJnZXQgKi8KKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19maWxlX29wZXJhdGlvbnMgPSB7CisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCisJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCisJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLnJlbGVhc2UJPSBleG9mc19yZWxlYXNlX2ZpbGUsCisJLmZzeW5jCQk9IGV4b2ZzX2ZpbGVfZnN5bmMsCisJLmZsdXNoCQk9IGV4b2ZzX2ZsdXNoLAorCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKKwkuc3BsaWNlX3dyaXRlCT0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkudHJ1bmNhdGUJPSBleG9mc190cnVuY2F0ZSwKKwkuc2V0YXR0cgk9IGV4b2ZzX3NldGF0dHIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvaW5vZGUuYyBiL2ZzL2V4b2ZzL2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE4ZDlmYQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL2lub2RlLmMKQEAgLTAsMCArMSwxMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCisjaWZkZWYgQ09ORklHX0VYT0ZTX0RFQlVHCisjICBkZWZpbmUgRVhPRlNfREVCVUdfT0JKX0lTSVpFIDEKKyNlbmRpZgorCitzdHJ1Y3QgcGFnZV9jb2xsZWN0IHsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXFfcTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXVuc2lnbmVkIGV4cGVjdGVkX3BhZ2VzOworCisJc3RydWN0IGJpbyAqYmlvOworCXVuc2lnbmVkIG5yX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCWxvZmZfdCBwZ19maXJzdDsgLyoga2VlcCA2NGJpdCBhbHNvIGluIDMyLWFyY2hlcyAqLworfTsKKworc3RhdGljIHZvaWQgX3Bjb2xfaW5pdChzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCB1bnNpZ25lZCBleHBlY3RlZF9wYWdlcywKKwkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxX3EgPSBzYmktPnNfZGV2LT5zY3NpX2RldmljZS0+cmVxdWVzdF9xdWV1ZTsKKworCXBjb2wtPnNiaSA9IHNiaTsKKwlwY29sLT5yZXFfcSA9IHJlcV9xOworCXBjb2wtPmlub2RlID0gaW5vZGU7CisJcGNvbC0+ZXhwZWN0ZWRfcGFnZXMgPSBleHBlY3RlZF9wYWdlczsKKworCXBjb2wtPmJpbyA9IE5VTEw7CisJcGNvbC0+bnJfcGFnZXMgPSAwOworCXBjb2wtPmxlbmd0aCA9IDA7CisJcGNvbC0+cGdfZmlyc3QgPSAtMTsKKworCUVYT0ZTX0RCR01TRygiX3Bjb2xfaW5pdCBpbm89MHglbHggZXhwZWN0ZWRfcGFnZXM9JXVcbiIsIGlub2RlLT5pX2lubywKKwkJICAgICBleHBlY3RlZF9wYWdlcyk7Cit9CisKK3N0YXRpYyB2b2lkIF9wY29sX3Jlc2V0KHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCit7CisJcGNvbC0+ZXhwZWN0ZWRfcGFnZXMgLT0gbWluKHBjb2wtPm5yX3BhZ2VzLCBwY29sLT5leHBlY3RlZF9wYWdlcyk7CisKKwlwY29sLT5iaW8gPSBOVUxMOworCXBjb2wtPm5yX3BhZ2VzID0gMDsKKwlwY29sLT5sZW5ndGggPSAwOworCXBjb2wtPnBnX2ZpcnN0ID0gLTE7CisJRVhPRlNfREJHTVNHKCJfcGNvbF9yZXNldCBpbm89MHglbHggZXhwZWN0ZWRfcGFnZXM9JXVcbiIsCisJCSAgICAgcGNvbC0+aW5vZGUtPmlfaW5vLCBwY29sLT5leHBlY3RlZF9wYWdlcyk7CisKKwkvKiB0aGlzIGlzIHByb2JhYmx5IHRoZSBlbmQgb2YgdGhlIGxvb3AgYnV0IGluIHdyaXRlcworCSAqIGl0IG1pZ2h0IG5vdCBlbmQgaGVyZS4gZG9uJ3QgYmUgbGVmdCB3aXRoIG5vdGhpbmcKKwkgKi8KKwlpZiAoIXBjb2wtPmV4cGVjdGVkX3BhZ2VzKQorCQlwY29sLT5leHBlY3RlZF9wYWdlcyA9IDEyODsKK30KKworc3RhdGljIGludCBwY29sX3RyeV9hbGxvYyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sKQoreworCWludCBwYWdlcyA9IG1pbl90KHVuc2lnbmVkLCBwY29sLT5leHBlY3RlZF9wYWdlcywgQklPX01BWF9QQUdFUyk7CisKKwlmb3IgKDsgcGFnZXM7IHBhZ2VzID4+PSAxKSB7CisJCXBjb2wtPmJpbyA9IGJpb19hbGxvYyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCWlmIChsaWtlbHkocGNvbC0+YmlvKSkKKwkJCXJldHVybiAwOworCX0KKworCUVYT0ZTX0VSUigiRmFpbGVkIHRvIGtjYWxsb2MgZXhwZWN0ZWRfcGFnZXM9JXVcbiIsCisJCSAgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBwY29sX2ZyZWUoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKK3sKKwliaW9fcHV0KHBjb2wtPmJpbyk7CisJcGNvbC0+YmlvID0gTlVMTDsKK30KKworc3RhdGljIGludCBwY29sX2FkZF9wYWdlKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIHVuc2lnbmVkIGxlbikKK3sKKwlpbnQgYWRkZWRfbGVuID0gYmlvX2FkZF9wY19wYWdlKHBjb2wtPnJlcV9xLCBwY29sLT5iaW8sIHBhZ2UsIGxlbiwgMCk7CisJaWYgKHVubGlrZWx5KGxlbiAhPSBhZGRlZF9sZW4pKQorCQlyZXR1cm4gLUVOT01FTTsKKworCSsrcGNvbC0+bnJfcGFnZXM7CisJcGNvbC0+bGVuZ3RoICs9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1cGRhdGVfcmVhZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmV0KQoreworCWlmIChyZXQgPT0gMCkgeworCQkvKiBFdmVyeXRoaW5nIGlzIE9LICovCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKKwkJCUNsZWFyUGFnZUVycm9yKHBhZ2UpOworCX0gZWxzZSBpZiAocmV0ID09IC1FRkFVTFQpIHsKKwkJLyogSW4gdGhpcyBjYXNlIHdlIHdlcmUgdHJ5aW5nIHRvIHJlYWQgc29tZXRoaW5nIHRoYXQgd2Fzbid0IG9uCisJCSAqIGRpc2sgeWV0IC0gcmV0dXJuIGEgcGFnZSBmdWxsIG9mIHplcm9lcy4gIFRoaXMgc2hvdWxkIGJlIE9LLAorCQkgKiBiZWNhdXNlIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGVtcHR5IChpZiB0aGVyZSB3YXMgYSB3cml0ZQorCQkgKiBiZWZvcmUgdGhpcyByZWFkLCB0aGUgcmVhZCB3b3VsZCBiZSB3YWl0aW5nIHdpdGggdGhlIHBhZ2UKKwkJICogbG9ja2VkICovCisJCWNsZWFyX2hpZ2hwYWdlKHBhZ2UpOworCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKKwkJCUNsZWFyUGFnZUVycm9yKHBhZ2UpOworCQlyZXQgPSAwOyAvKiByZWNvdmVyZWQgZXJyb3IgKi8KKwkJRVhPRlNfREJHTVNHKCJyZWNvdmVyZWQgcmVhZCBlcnJvclxuIik7CisJfSBlbHNlIC8qIEVycm9yICovCisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV93cml0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcmV0KQoreworCWlmIChyZXQpIHsKKwkJbWFwcGluZ19zZXRfZXJyb3IocGFnZS0+bWFwcGluZywgcmV0KTsKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCX0KKwllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7Cit9CisKKy8qIENhbGxlZCBhdCB0aGUgZW5kIG9mIHJlYWRzLCB0byBvcHRpb25hbGx5IHVubG9jayBwYWdlcyBhbmQgdXBkYXRlIHRoZWlyCisgKiBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgX19yZWFkcGFnZXNfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLAorCQkJICAgIGJvb2wgZG9fdW5sb2NrKQoreworCXN0cnVjdCBiaW9fdmVjICpidmVjOworCWludCBpOworCXU2NCByZXNpZDsKKwl1NjQgZ29vZF9ieXRlczsKKwl1NjQgbGVuZ3RoID0gMDsKKwlpbnQgcmV0ID0gZXhvZnNfY2hlY2tfb2tfcmVzaWQob3IsICZyZXNpZCwgTlVMTCk7CisKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCisJaWYgKGxpa2VseSghcmV0KSkKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aDsKKwllbHNlIGlmICghcmVzaWQpCisJCWdvb2RfYnl0ZXMgPSAwOworCWVsc2UKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aCAtIHJlc2lkOworCisJRVhPRlNfREJHTVNHKCJyZWFkcGFnZXNfZG9uZSgweCVseCkgZ29vZF9ieXRlcz0weCVsbHgiCisJCSAgICAgIiBsZW5ndGg9MHglbHggbnJfcGFnZXM9JXVcbiIsCisJCSAgICAgcGNvbC0+aW5vZGUtPmlfaW5vLCBfTExVKGdvb2RfYnl0ZXMpLCBwY29sLT5sZW5ndGgsCisJCSAgICAgcGNvbC0+bnJfcGFnZXMpOworCisJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBwY29sLT5iaW8sIGksIDApIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwkJaW50IHBhZ2Vfc3RhdDsKKworCQlpZiAoaW5vZGUgIT0gcGNvbC0+aW5vZGUpCisJCQljb250aW51ZTsgLyogb3NkIG1pZ2h0IGFkZCBtb3JlIHBhZ2VzIGF0IGVuZCAqLworCisJCWlmIChsaWtlbHkobGVuZ3RoIDwgZ29vZF9ieXRlcykpCisJCQlwYWdlX3N0YXQgPSAwOworCQllbHNlCisJCQlwYWdlX3N0YXQgPSByZXQ7CisKKwkJRVhPRlNfREJHTVNHKCIgICAgcmVhZHBhZ2VzX2RvbmUoMHglbHgsIDB4JWx4KSAlc1xuIiwKKwkJCSAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwKKwkJCSAgcGFnZV9zdGF0ID8gImJhZF9ieXRlcyIgOiAiZ29vZF9ieXRlcyIpOworCisJCXJldCA9IHVwZGF0ZV9yZWFkX3BhZ2UocGFnZSwgcGFnZV9zdGF0KTsKKwkJaWYgKGRvX3VubG9jaykKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQlsZW5ndGggKz0gYnZlYy0+YnZfbGVuOworCX0KKworCXBjb2xfZnJlZShwY29sKTsKKwlFWE9GU19EQkdNU0coInJlYWRwYWdlc19kb25lIEVORFxuIik7CisJcmV0dXJuIHJldDsKK30KKworLyogY2FsbGJhY2sgb2YgYXN5bmMgcmVhZHMgKi8KK3N0YXRpYyB2b2lkIHJlYWRwYWdlc19kb25lKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKnApCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7CisKKwlfX3JlYWRwYWdlc19kb25lKG9yLCBwY29sLCB0cnVlKTsKKwlhdG9taWNfZGVjKCZwY29sLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKwlrZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgX3VubG9ja19wY29sX3BhZ2VzKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wsIGludCByZXQsIGludCBydykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwlpbnQgaTsKKworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgcGNvbC0+YmlvLCBpLCAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKKworCQlpZiAocncgPT0gUkVBRCkKKwkJCXVwZGF0ZV9yZWFkX3BhZ2UocGFnZSwgcmV0KTsKKwkJZWxzZQorCQkJdXBkYXRlX3dyaXRlX3BhZ2UocGFnZSwgcmV0KTsKKworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9CisJcGNvbF9mcmVlKHBjb2wpOworfQorCitzdGF0aWMgaW50IHJlYWRfZXhlYyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCBib29sIGlzX3N5bmMpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKHBjb2wtPmlub2RlKTsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7cGNvbC0+c2JpLT5zX3BpZCwKKwkJCQkJcGNvbC0+aW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvciA9IE5VTEw7CisJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbF9jb3B5ID0gTlVMTDsKKwlsb2ZmX3QgaV9zdGFydCA9IHBjb2wtPnBnX2ZpcnN0IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CisJaW50IHJldDsKKworCWlmICghcGNvbC0+YmlvKQorCQlyZXR1cm4gMDsKKworCS8qIHNlZSBjb21tZW50IGluIF9yZWFkcGFnZSgpIGFib3V0IHN5bmMgcmVhZHMgKi8KKwlXQVJOX09OKGlzX3N5bmMgJiYgKHBjb2wtPm5yX3BhZ2VzICE9IDEpKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QocGNvbC0+c2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJb3NkX3JlcV9yZWFkKG9yLCAmb2JqLCBwY29sLT5iaW8sIGlfc3RhcnQpOworCisJaWYgKGlzX3N5bmMpIHsKKwkJZXhvZnNfc3luY19vcChvciwgcGNvbC0+c2JpLT5zX3RpbWVvdXQsIG9pLT5pX2NyZWQpOworCQlyZXR1cm4gX19yZWFkcGFnZXNfZG9uZShvciwgcGNvbCwgZmFsc2UpOworCX0KKworCXBjb2xfY29weSA9IGttYWxsb2Moc2l6ZW9mKCpwY29sX2NvcHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjb2xfY29weSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkqcGNvbF9jb3B5ID0gKnBjb2w7CisJcmV0ID0gZXhvZnNfYXN5bmNfb3Aob3IsIHJlYWRwYWdlc19kb25lLCBwY29sX2NvcHksIG9pLT5pX2NyZWQpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGVycjsKKworCWF0b21pY19pbmMoJnBjb2wtPnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJRVhPRlNfREJHTVNHKCJyZWFkX2V4ZWMgb2JqPTB4JWxseCBzdGFydD0weCVsbHggbGVuZ3RoPTB4JWx4XG4iLAorCQkgIG9iai5pZCwgX0xMVShpX3N0YXJ0KSwgcGNvbC0+bGVuZ3RoKTsKKworCS8qIHBhZ2VzIG93bmVyc2hpcCB3YXMgcGFzc2VkIHRvIHBjb2xfY29weSAqLworCV9wY29sX3Jlc2V0KHBjb2wpOworCXJldHVybiAwOworCitlcnI6CisJaWYgKCFpc19zeW5jKQorCQlfdW5sb2NrX3Bjb2xfcGFnZXMocGNvbCwgcmV0LCBSRUFEKTsKKwlrZnJlZShwY29sX2NvcHkpOworCWlmIChvcikKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiByZWFkcGFnZV9zdHJpcCBpcyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20gcmVhZHBhZ2UoKSBvciBieSB0aGUgVkZTIGZyb20KKyAqIHdpdGhpbiByZWFkX2NhY2hlX3BhZ2VzKCksIHRvIGFkZCBvbmUgbW9yZSBwYWdlIHRvIGJlIHJlYWQuIEl0IHdpbGwgdHJ5IHRvCisgKiBjb2xsZWN0IGFzIG1hbnkgY29udGlndW91cyBwYWdlcyBhcyBwb3NpYmxlLiBJZiBhIGRpc2NvbnRpbnVpdHkgaXMKKyAqIGVuY291bnRlcmVkLCBvciBpdCBydW5zIG91dCBvZiByZXNvdXJjZXMsIGl0IHdpbGwgc3VibWl0IHRoZSBwcmV2aW91cyBzZWdtZW50CisgKiBhbmQgd2lsbCBzdGFydCBhIG5ldyBjb2xsZWN0aW9uLiBFdmVudHVhbGx5IGNhbGxlciBtdXN0IHN1Ym1pdCB0aGUgbGFzdAorICogc2VnbWVudCBpZiBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHJlYWRwYWdlX3N0cmlwKHZvaWQgKmRhdGEsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wgPSBkYXRhOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwY29sLT5pbm9kZTsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJcGdvZmZfdCBlbmRfaW5kZXggPSBpX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwkvKiBGSVhNRTogSnVzdCBmb3IgZGVidWdnaW5nLCB3aWxsIGJlIHJlbW92ZWQgKi8KKwlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKQorCQlFWE9GU19FUlIoIlBhZ2VVcHRvZGF0ZSgweCVseCwgMHglbHgpXG4iLCBwY29sLT5pbm9kZS0+aV9pbm8sCisJCQkgIHBhZ2UtPmluZGV4KTsKKworCWlmIChwYWdlLT5pbmRleCA8IGVuZF9pbmRleCkKKwkJbGVuID0gUEFHRV9DQUNIRV9TSVpFOworCWVsc2UgaWYgKHBhZ2UtPmluZGV4ID09IGVuZF9pbmRleCkKKwkJbGVuID0gaV9zaXplICYgflBBR0VfQ0FDSEVfTUFTSzsKKwllbHNlCisJCWxlbiA9IDA7CisKKwlpZiAoIWxlbiB8fCAhb2JqX2NyZWF0ZWQob2kpKSB7CisJCS8qIHRoaXMgd2lsbCBiZSBvdXQgb2YgYm91bmRzLCBvciBkb2Vzbid0IGV4aXN0IHlldC4KKwkJICogQ3VycmVudCBwYWdlIGlzIGNsZWFyZWQgYW5kIHRoZSByZXF1ZXN0IGlzIHNwbGl0CisJCSAqLworCQljbGVhcl9oaWdocGFnZShwYWdlKTsKKworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJRVhPRlNfREJHTVNHKCJyZWFkcGFnZV9zdHJpcCgweCVseCwgMHglbHgpIGVtcHR5IHBhZ2UsIgorCQkJICAgICAiIHNwbGl0dGluZ1xuIiwgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCk7CisKKwkJcmV0dXJuIHJlYWRfZXhlYyhwY29sLCBmYWxzZSk7CisJfQorCit0cnlfYWdhaW46CisKKwlpZiAodW5saWtlbHkocGNvbC0+cGdfZmlyc3QgPT0gLTEpKSB7CisJCXBjb2wtPnBnX2ZpcnN0ID0gcGFnZS0+aW5kZXg7CisJfSBlbHNlIGlmICh1bmxpa2VseSgocGNvbC0+cGdfZmlyc3QgKyBwY29sLT5ucl9wYWdlcykgIT0KKwkJICAgcGFnZS0+aW5kZXgpKSB7CisJCS8qIERpc2NvbnRpbnVpdHkgZGV0ZWN0ZWQsIHNwbGl0IHRoZSByZXF1ZXN0ICovCisJCXJldCA9IHJlYWRfZXhlYyhwY29sLCBmYWxzZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBmYWlsOworCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisKKwlpZiAoIXBjb2wtPmJpbykgeworCQlyZXQgPSBwY29sX3RyeV9hbGxvYyhwY29sKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGxlbiAhPSBQQUdFX0NBQ0hFX1NJWkUpCisJCXplcm9fdXNlcihwYWdlLCBsZW4sIFBBR0VfQ0FDSEVfU0laRSAtIGxlbik7CisKKwlFWE9GU19EQkdNU0coIiAgICByZWFkcGFnZV9zdHJpcCgweCVseCwgMHglbHgpIGxlbj0weCV6eFxuIiwKKwkJICAgICBpbm9kZS0+aV9pbm8sIHBhZ2UtPmluZGV4LCBsZW4pOworCisJcmV0ID0gcGNvbF9hZGRfcGFnZShwY29sLCBwYWdlLCBsZW4pOworCWlmIChyZXQpIHsKKwkJRVhPRlNfREJHTVNHKCJGYWlsZWQgcGNvbF9hZGRfcGFnZSBwYWdlc1tpXT0lcCAiCisJCQkgICJ0aGlzX2xlbj0weCV6eCBucl9wYWdlcz0ldSBsZW5ndGg9MHglbHhcbiIsCisJCQkgIHBhZ2UsIGxlbiwgcGNvbC0+bnJfcGFnZXMsIHBjb2wtPmxlbmd0aCk7CisKKwkJLyogc3BsaXQgdGhlIHJlcXVlc3QsIGFuZCBzdGFydCBhZ2FpbiB3aXRoIGN1cnJlbnQgcGFnZSAqLworCQlyZXQgPSByZWFkX2V4ZWMocGNvbCwgZmFsc2UpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKworCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwkvKiBTZXRQYWdlRXJyb3IocGFnZSk7ID8/PyAqLworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0IHBjb2w7CisJaW50IHJldDsKKworCV9wY29sX2luaXQoJnBjb2wsIG5yX3BhZ2VzLCBtYXBwaW5nLT5ob3N0KTsKKworCXJldCA9IHJlYWRfY2FjaGVfcGFnZXMobWFwcGluZywgcGFnZXMsIHJlYWRwYWdlX3N0cmlwLCAmcGNvbCk7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoInJlYWRfY2FjaGVfcGFnZXMgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJlYWRfZXhlYygmcGNvbCwgZmFsc2UpOworfQorCitzdGF0aWMgaW50IF9yZWFkcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCBpc19zeW5jKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgcGNvbDsKKwlpbnQgcmV0OworCisJX3Bjb2xfaW5pdCgmcGNvbCwgMSwgcGFnZS0+bWFwcGluZy0+aG9zdCk7CisKKwkvKiByZWFkcGFnZV9zdHJpcCBtaWdodCBjYWxsIHJlYWRfZXhlYygsYXN5bmMpIGluc2lkZSBhdCBzZXZlcmFsIHBsYWNlcworCSAqIGJ1dCB0aGlzIGlzIHNhZmUgZm9yIGlzX2FzeW5jPTAgc2luY2UgcmVhZF9leGVjIHdpbGwgbm90IGRvIGFueXRoaW5nCisJICogd2hlbiB3ZSBoYXZlIGEgc2luZ2xlIHBhZ2UuCisJICovCisJcmV0ID0gcmVhZHBhZ2Vfc3RyaXAoJnBjb2wsIHBhZ2UpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJfcmVhZHBhZ2UgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJlYWRfZXhlYygmcGNvbCwgaXNfc3luYyk7Cit9CisKKy8qCisgKiBXZSBkb24ndCBuZWVkIHRoZSBmaWxlCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBfcmVhZHBhZ2UocGFnZSwgZmFsc2UpOworfQorCisvKiBDYWxsYmFjayBmb3Igb3NkX3dyaXRlLiBBbGwgd3JpdGVzIGFyZSBhc3luY2hyb25vdXNlICovCitzdGF0aWMgdm9pZCB3cml0ZXBhZ2VzX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sID0gcDsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwlpbnQgaTsKKwl1NjQgcmVzaWQ7CisJdTY0ICBnb29kX2J5dGVzOworCXU2NCAgbGVuZ3RoID0gMDsKKworCWludCByZXQgPSBleG9mc19jaGVja19va19yZXNpZChvciwgTlVMTCwgJnJlc2lkKTsKKworCW9zZF9lbmRfcmVxdWVzdChvcik7CisJYXRvbWljX2RlYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CisKKwlpZiAobGlrZWx5KCFyZXQpKQorCQlnb29kX2J5dGVzID0gcGNvbC0+bGVuZ3RoOworCWVsc2UgaWYgKCFyZXNpZCkKKwkJZ29vZF9ieXRlcyA9IDA7CisJZWxzZQorCQlnb29kX2J5dGVzID0gcGNvbC0+bGVuZ3RoIC0gcmVzaWQ7CisKKwlFWE9GU19EQkdNU0coIndyaXRlcGFnZXNfZG9uZSgweCVseCkgZ29vZF9ieXRlcz0weCVsbHgiCisJCSAgICAgIiBsZW5ndGg9MHglbHggbnJfcGFnZXM9JXVcbiIsCisJCSAgICAgcGNvbC0+aW5vZGUtPmlfaW5vLCBfTExVKGdvb2RfYnl0ZXMpLCBwY29sLT5sZW5ndGgsCisJCSAgICAgcGNvbC0+bnJfcGFnZXMpOworCisJX19iaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBwY29sLT5iaW8sIGksIDApIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwkJaW50IHBhZ2Vfc3RhdDsKKworCQlpZiAoaW5vZGUgIT0gcGNvbC0+aW5vZGUpCisJCQljb250aW51ZTsgLyogb3NkIG1pZ2h0IGFkZCBtb3JlIHBhZ2VzIHRvIGEgYmlvICovCisKKwkJaWYgKGxpa2VseShsZW5ndGggPCBnb29kX2J5dGVzKSkKKwkJCXBhZ2Vfc3RhdCA9IDA7CisJCWVsc2UKKwkJCXBhZ2Vfc3RhdCA9IHJldDsKKworCQl1cGRhdGVfd3JpdGVfcGFnZShwYWdlLCBwYWdlX3N0YXQpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJRVhPRlNfREJHTVNHKCIgICAgd3JpdGVwYWdlc19kb25lKDB4JWx4LCAweCVseCkgc3RhdHVzPSVkXG4iLAorCQkJICAgICBpbm9kZS0+aV9pbm8sIHBhZ2UtPmluZGV4LCBwYWdlX3N0YXQpOworCisJCWxlbmd0aCArPSBidmVjLT5idl9sZW47CisJfQorCisJcGNvbF9mcmVlKHBjb2wpOworCWtmcmVlKHBjb2wpOworCUVYT0ZTX0RCR01TRygid3JpdGVwYWdlc19kb25lIEVORFxuIik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZXhlYyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShwY29sLT5pbm9kZSk7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3Bjb2wtPnNiaS0+c19waWQsCisJCQkJCXBjb2wtPmlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2xfY29weSA9IE5VTEw7CisJbG9mZl90IGlfc3RhcnQgPSBwY29sLT5wZ19maXJzdCA8PCBQQUdFX0NBQ0hFX1NISUZUOworCWludCByZXQ7CisKKwlpZiAoIXBjb2wtPmJpbykKKwkJcmV0dXJuIDA7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHBjb2wtPnNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigid3JpdGVfZXhlYzogRmFpbGQgdG8gb3NkX3N0YXJ0X3JlcXVlc3QoKVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBjb2xfY29weSA9IGttYWxsb2Moc2l6ZW9mKCpwY29sX2NvcHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjb2xfY29weSkgeworCQlFWE9GU19FUlIoIndyaXRlX2V4ZWM6IEZhaWxkIHRvIGttYWxsb2MocGNvbClcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkqcGNvbF9jb3B5ID0gKnBjb2w7CisKKwlvc2RfcmVxX3dyaXRlKG9yLCAmb2JqLCBwY29sX2NvcHktPmJpbywgaV9zdGFydCk7CisJcmV0ID0gZXhvZnNfYXN5bmNfb3Aob3IsIHdyaXRlcGFnZXNfZG9uZSwgcGNvbF9jb3B5LCBvaS0+aV9jcmVkKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlFWE9GU19FUlIoIndyaXRlX2V4ZWM6IGV4b2ZzX2FzeW5jX29wKCkgRmFpbGRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlhdG9taWNfaW5jKCZwY29sLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKwlFWE9GU19EQkdNU0coIndyaXRlX2V4ZWMoMHglbHgsIDB4JWxseCkgc3RhcnQ9MHglbGx4IGxlbmd0aD0weCVseFxuIiwKKwkJICBwY29sLT5pbm9kZS0+aV9pbm8sIHBjb2wtPnBnX2ZpcnN0LCBfTExVKGlfc3RhcnQpLAorCQkgIHBjb2wtPmxlbmd0aCk7CisJLyogcGFnZXMgb3duZXJzaGlwIHdhcyBwYXNzZWQgdG8gcGNvbF9jb3B5ICovCisJX3Bjb2xfcmVzZXQocGNvbCk7CisJcmV0dXJuIDA7CisKK2VycjoKKwlfdW5sb2NrX3Bjb2xfcGFnZXMocGNvbCwgcmV0LCBXUklURSk7CisJa2ZyZWUocGNvbF9jb3B5KTsKKwlpZiAob3IpCisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworLyogd3JpdGVwYWdlX3N0cmlwIGlzIGNhbGxlZCBlaXRoZXIgZGlyZWN0bHkgZnJvbSB3cml0ZXBhZ2UoKSBvciBieSB0aGUgVkZTIGZyb20KKyAqIHdpdGhpbiB3cml0ZV9jYWNoZV9wYWdlcygpLCB0byBhZGQgb25lIG1vcmUgcGFnZSB0byBiZSB3cml0dGVuIHRvIHN0b3JhZ2UuCisgKiBJdCB3aWxsIHRyeSB0byBjb2xsZWN0IGFzIG1hbnkgY29udGlndW91cyBwYWdlcyBhcyBwb3NzaWJsZS4gSWYgYQorICogZGlzY29udGludWl0eSBpcyBlbmNvdW50ZXJlZCBvciBpdCBydW5zIG91dCBvZiByZXNvdXJjZXMgaXQgd2lsbCBzdWJtaXQgdGhlCisgKiBwcmV2aW91cyBzZWdtZW50IGFuZCB3aWxsIHN0YXJ0IGEgbmV3IGNvbGxlY3Rpb24uCisgKiBFdmVudHVhbGx5IGNhbGxlciBtdXN0IHN1Ym1pdCB0aGUgbGFzdCBzZWdtZW50IGlmIHByZXNlbnQuCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVwYWdlX3N0cmlwKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmNfdW51c2VkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wgPSBkYXRhOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwY29sLT5pbm9kZTsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCWxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJcGdvZmZfdCBlbmRfaW5kZXggPSBpX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCisJcmV0ID0gd2FpdF9vYmpfY3JlYXRlZChvaSk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZmFpbDsKKworCWlmIChwYWdlLT5pbmRleCA8IGVuZF9pbmRleCkKKwkJLyogaW4gdGhpcyBjYXNlLCB0aGUgcGFnZSBpcyB3aXRoaW4gdGhlIGxpbWl0cyBvZiB0aGUgZmlsZSAqLworCQlsZW4gPSBQQUdFX0NBQ0hFX1NJWkU7CisJZWxzZSB7CisJCWxlbiA9IGlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CisKKwkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kX2luZGV4IHx8ICFsZW4pIHsKKwkJCS8qIGluIHRoaXMgY2FzZSwgdGhlIHBhZ2UgaXMgb3V0c2lkZSB0aGUgbGltaXRzCisJCQkgKiAodHJ1bmNhdGUgaW4gcHJvZ3Jlc3MpCisJCQkgKi8KKwkJCXJldCA9IHdyaXRlX2V4ZWMocGNvbCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlnb3RvIGZhaWw7CisJCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQorCQkJCUNsZWFyUGFnZUVycm9yKHBhZ2UpOworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwordHJ5X2FnYWluOgorCisJaWYgKHVubGlrZWx5KHBjb2wtPnBnX2ZpcnN0ID09IC0xKSkgeworCQlwY29sLT5wZ19maXJzdCA9IHBhZ2UtPmluZGV4OworCX0gZWxzZSBpZiAodW5saWtlbHkoKHBjb2wtPnBnX2ZpcnN0ICsgcGNvbC0+bnJfcGFnZXMpICE9CisJCSAgIHBhZ2UtPmluZGV4KSkgeworCQkvKiBEaXNjb250aW51aXR5IGRldGVjdGVkLCBzcGxpdCB0aGUgcmVxdWVzdCAqLworCQlyZXQgPSB3cml0ZV9leGVjKHBjb2wpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJaWYgKCFwY29sLT5iaW8pIHsKKwkJcmV0ID0gcGNvbF90cnlfYWxsb2MocGNvbCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBmYWlsOworCX0KKworCUVYT0ZTX0RCR01TRygiICAgIHdyaXRlcGFnZV9zdHJpcCgweCVseCwgMHglbHgpIGxlbj0weCV6eFxuIiwKKwkJICAgICBpbm9kZS0+aV9pbm8sIHBhZ2UtPmluZGV4LCBsZW4pOworCisJcmV0ID0gcGNvbF9hZGRfcGFnZShwY29sLCBwYWdlLCBsZW4pOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGVkIHBjb2xfYWRkX3BhZ2UgIgorCQkJICAgICAibnJfcGFnZXM9JXUgdG90YWxfbGVuZ3RoPTB4JWx4XG4iLAorCQkJICAgICBwY29sLT5ucl9wYWdlcywgcGNvbC0+bGVuZ3RoKTsKKworCQkvKiBzcGxpdCB0aGUgcmVxdWVzdCwgbmV4dCBsb29wIHdpbGwgc3RhcnQgYWdhaW4gKi8KKwkJcmV0ID0gd3JpdGVfZXhlYyhwY29sKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCUVYT0ZTX0RCR01TRygid3JpdGVfZXhlYyBmYWlsZCA9PiAlZCIsIHJldCk7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlnb3RvIHRyeV9hZ2FpbjsKKwl9CisKKwlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CisJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJc2V0X2JpdChBU19FSU8sICZwYWdlLT5tYXBwaW5nLT5mbGFncyk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBleG9mc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCBwY29sOworCWxvbmcgc3RhcnQsIGVuZCwgZXhwZWN0ZWRfcGFnZXM7CisJaW50IHJldDsKKworCXN0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCWVuZCA9ICh3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpID8KKwkJCXN0YXJ0ICsgbWFwcGluZy0+bnJwYWdlcyA6CisJCQl3YmMtPnJhbmdlX2VuZCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCisJaWYgKHN0YXJ0IHx8IGVuZCkKKwkJZXhwZWN0ZWRfcGFnZXMgPSBtaW4oZW5kIC0gc3RhcnQgKyAxLCAzMkwpOworCWVsc2UKKwkJZXhwZWN0ZWRfcGFnZXMgPSBtYXBwaW5nLT5ucnBhZ2VzOworCisJRVhPRlNfREJHTVNHKCJpbm9kZSgweCVseCkgd2JjLT5zdGFydD0weCVsbHggd2JjLT5lbmQ9MHglbGx4IgorCQkgICAgICIgbS0+bnJwYWdlcz0lbHUgc3RhcnQ9MHglbHggZW5kPTB4JWx4XG4iLAorCQkgICAgIG1hcHBpbmctPmhvc3QtPmlfaW5vLCB3YmMtPnJhbmdlX3N0YXJ0LCB3YmMtPnJhbmdlX2VuZCwKKwkJICAgICBtYXBwaW5nLT5ucnBhZ2VzLCBzdGFydCwgZW5kKTsKKworCV9wY29sX2luaXQoJnBjb2wsIGV4cGVjdGVkX3BhZ2VzLCBtYXBwaW5nLT5ob3N0KTsKKworCXJldCA9IHdyaXRlX2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHdiYywgd3JpdGVwYWdlX3N0cmlwLCAmcGNvbCk7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoIndyaXRlX2NhY2hlX3BhZ2VzID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB3cml0ZV9leGVjKCZwY29sKTsKK30KKworc3RhdGljIGludCBleG9mc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgcGNvbDsKKwlpbnQgcmV0OworCisJX3Bjb2xfaW5pdCgmcGNvbCwgMSwgcGFnZS0+bWFwcGluZy0+aG9zdCk7CisKKwlyZXQgPSB3cml0ZXBhZ2Vfc3RyaXAocGFnZSwgTlVMTCwgJnBjb2wpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZXBhZ2UgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHdyaXRlX2V4ZWMoJnBjb2wpOworfQorCitpbnQgZXhvZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJcGFnZSA9ICpwYWdlcDsKKwlpZiAocGFnZSA9PSBOVUxMKSB7CisJCXJldCA9IHNpbXBsZV93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAorCQkJCQkgZnNkYXRhKTsKKwkJaWYgKHJldCkgeworCQkJRVhPRlNfREJHTVNHKCJzaW1wbGVfd3JpdGVfYmVnaW4gZmFpbGRcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXBhZ2UgPSAqcGFnZXA7CisJfQorCisJIC8qIHJlYWQgbW9kaWZ5IHdyaXRlICovCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgKGxlbiAhPSBQQUdFX0NBQ0hFX1NJWkUpKSB7CisJCXJldCA9IF9yZWFkcGFnZShwYWdlLCB0cnVlKTsKKwkJaWYgKHJldCkgeworCQkJLypTZXRQYWdlRXJyb3Igd2FzIGRvbmUgYnkgX3JlYWRwYWdlLiBJcyBpdCBvaz8qLworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlFWE9GU19EQkdNU0coIl9fcmVhZHBhZ2VfZmlsbGVyIGZhaWxkXG4iKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVfYmVnaW5fZXhwb3J0KHN0cnVjdCBmaWxlICpmaWxlLAorCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKK3sKKwkqcGFnZXAgPSBOVUxMOworCisJcmV0dXJuIGV4b2ZzX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsCisJCQkJCWZzZGF0YSk7Cit9CisKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZXhvZnNfYW9wcyA9IHsKKwkucmVhZHBhZ2UJPSBleG9mc19yZWFkcGFnZSwKKwkucmVhZHBhZ2VzCT0gZXhvZnNfcmVhZHBhZ2VzLAorCS53cml0ZXBhZ2UJPSBleG9mc193cml0ZXBhZ2UsCisJLndyaXRlcGFnZXMJPSBleG9mc193cml0ZXBhZ2VzLAorCS53cml0ZV9iZWdpbgk9IGV4b2ZzX3dyaXRlX2JlZ2luX2V4cG9ydCwKKwkud3JpdGVfZW5kCT0gc2ltcGxlX3dyaXRlX2VuZCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOT0RFIE9QRVJBVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRlc3Qgd2hldGhlciBhbiBpbm9kZSBpcyBhIGZhc3Qgc3ltbGluay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZXhvZnNfaW5vZGVfaXNfZmFzdF9zeW1saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKworCXJldHVybiBTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIChvaS0+aV9kYXRhWzBdICE9IDApOworfQorCisvKgorICogZ2V0X2Jsb2NrX3QgLSBGaWxsIGluIGEgYnVmZmVyX2hlYWQKKyAqIEFuIE9TRCB0YWtlcyBjYXJlIG9mIGJsb2NrIGFsbG9jYXRpb24gc28gd2UganVzdCBmYWtlIGFuIGFsbG9jYXRpb24gYnkKKyAqIHB1dHRpbmcgaW4gdGhlIGlub2RlJ3Mgc2VjdG9yX3QgaW4gdGhlIGJ1ZmZlcl9oZWFkLgorICogVE9ETzogV2hhdCBhYm91dCB0aGUgY2FzZSBvZiBjcmVhdGU9PTAgYW5kIEBpYmxvY2sgZG9lcyBub3QgZXhpc3QgaW4gdGhlCisgKiBvYmplY3Q/CisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKKwkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCW1hcF9iaChiaF9yZXN1bHQsIGlub2RlLT5pX3NiLCBpYmxvY2spOworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoID0gQVRUUl9ERUYoCisJT1NEX0FQQUdFX09CSkVDVF9JTkZPUk1BVElPTiwgT1NEX0FUVFJfT0lfTE9HSUNBTF9MRU5HVEgsIDgpOworCisvKgorICogVHJ1bmNhdGUgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSAtIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHNldCB0aGUgc2l6ZQorICogYXR0cmlidXRlLiAgV2UgbWFrZSBzdXJlIHRoZSBvYmplY3QgZXhpc3RzIGZpcnN0LgorICovCit2b2lkIGV4b2ZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwgaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKKwlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJX19iZTY0IG5ld3NpemU7CisJaW50IHJldDsKKworCWlmICghKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKQorCSAgICAgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCisJCXJldHVybjsKKwlpZiAoZXhvZnNfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkKKwkJcmV0dXJuOworCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCisJCXJldHVybjsKKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCisJbm9iaF90cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlzaXplLCBleG9mc19nZXRfYmxvY2spOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChzYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc190cnVuY2F0ZTogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCW9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMob3IsICZvYmopOworCisJbmV3c2l6ZSA9IGNwdV90b19iZTY0KCh1NjQpaXNpemUpOworCWF0dHIgPSBnX2F0dHJfbG9naWNhbF9sZW5ndGg7CisJYXR0ci52YWxfcHRyID0gJm5ld3NpemU7CisJb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChvciwgJmF0dHIsIDEpOworCisJLyogaWYgd2UgYXJlIGFib3V0IHRvIHRydW5jYXRlIGFuIG9iamVjdCwgYW5kIGl0IGhhc24ndCBiZWVuCisJICogY3JlYXRlZCB5ZXQsIHdhaXQKKwkgKi8KKwlpZiAodW5saWtlbHkod2FpdF9vYmpfY3JlYXRlZChvaSkpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgb2ktPmlfY3JlZCk7CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKK291dDoKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm47CitmYWlsOgorCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKKwlnb3RvIG91dDsKK30KKworLyoKKyAqIFNldCBpbm9kZSBhdHRyaWJ1dGVzIC0ganVzdCBjYWxsIGdlbmVyaWMgZnVuY3Rpb25zLgorICovCitpbnQgZXhvZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgaWF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBpYXR0cik7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogUmVhZCBhbiBpbm9kZSBmcm9tIHRoZSBPU0QsIGFuZCByZXR1cm4gaXQgYXMgaXMuICBXZSBhbHNvIHJldHVybiB0aGUgc2l6ZQorICogYXR0cmlidXRlIGluIHRoZSAnc2FuaXR5JyBhcmd1bWVudCBpZiB3ZSBnb3QgY29tcGlsZWQgd2l0aCBkZWJ1Z2dpbmcgdHVybmVkCisgKiBvbi4KKyAqLworc3RhdGljIGludCBleG9mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2ksCisJCSAgICBzdHJ1Y3QgZXhvZnNfZmNiICppbm9kZSwgdWludDY0X3QgKnNhbml0eSkKK3sKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCXN0cnVjdCBvc2RfYXR0ciBhdHRyOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtzYmktPnNfcGlkLAorCQkJCSBvaS0+dmZzX2lub2RlLmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJaW50IHJldDsKKworCWV4b2ZzX21ha2VfY3JlZGVudGlhbChvaS0+aV9jcmVkLCAmb2JqKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc19nZXRfaW5vZGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhvciwgJm9iaik7CisKKwkvKiB3ZSBuZWVkIHRoZSBpbm9kZSBhdHRyaWJ1dGUgKi8KKwlvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KG9yLCAmZ19hdHRyX2lub2RlX2RhdGEsIDEpOworCisjaWZkZWYgRVhPRlNfREVCVUdfT0JKX0lTSVpFCisJLyogd2UgZ2V0IHRoZSBzaXplIGF0dHJpYnV0ZXMgdG8gZG8gYSBzYW5pdHkgY2hlY2sgKi8KKwlvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KG9yLCAmZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoLCAxKTsKKyNlbmRpZgorCisJcmV0ID0gZXhvZnNfc3luY19vcChvciwgc2JpLT5zX3RpbWVvdXQsIG9pLT5pX2NyZWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJYXR0ciA9IGdfYXR0cl9pbm9kZV9kYXRhOworCXJldCA9IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShvciwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJleG9mc19nZXRfaW5vZGU6IGV4dHJhY3RfYXR0cl9mcm9tX3JlcSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlXQVJOX09OKGF0dHIubGVuICE9IEVYT0ZTX0lOT19BVFRSX1NJWkUpOworCW1lbWNweShpbm9kZSwgYXR0ci52YWxfcHRyLCBFWE9GU19JTk9fQVRUUl9TSVpFKTsKKworI2lmZGVmIEVYT0ZTX0RFQlVHX09CSl9JU0laRQorCWF0dHIgPSBnX2F0dHJfbG9naWNhbF9sZW5ndGg7CisJcmV0ID0gZXh0cmFjdF9hdHRyX2Zyb21fcmVxKG9yLCAmYXR0cik7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoIkVSUk9SOiBleHRyYWN0IGF0dHIgZnJvbSBvciBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJKnNhbml0eSA9IGdldF91bmFsaWduZWRfYmU2NChhdHRyLnZhbF9wdHIpOworI2VuZGlmCisKK291dDoKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGaWxsIGluIGFuIGlub2RlIHJlYWQgZnJvbSB0aGUgT1NEIGFuZCBzZXQgaXQgdXAgZm9yIHVzZQorICovCitzdHJ1Y3QgaW5vZGUgKmV4b2ZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2k7CisJc3RydWN0IGV4b2ZzX2ZjYiBmY2I7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1aW50NjRfdCB1bmluaXRpYWxpemVkX3ZhcihzYW5pdHkpOworCWludCByZXQ7CisKKwlpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pOworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQorCQlyZXR1cm4gaW5vZGU7CisJb2kgPSBleG9mc19pKGlub2RlKTsKKworCS8qIHJlYWQgdGhlIGlub2RlIGZyb20gdGhlIG9zZCAqLworCXJldCA9IGV4b2ZzX2dldF9pbm9kZShzYiwgb2ksICZmY2IsICZzYW5pdHkpOworCWlmIChyZXQpCisJCWdvdG8gYmFkX2lub2RlOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2ktPmlfd3EpOworCXNldF9vYmpfY3JlYXRlZChvaSk7CisKKwkvKiBjb3B5IHN0dWZmIGZyb20gb24tZGlzayBzdHJ1Y3QgdG8gaW4tbWVtb3J5IHN0cnVjdCAqLworCWlub2RlLT5pX21vZGUgPSBsZTE2X3RvX2NwdShmY2IuaV9tb2RlKTsKKwlpbm9kZS0+aV91aWQgPSBsZTMyX3RvX2NwdShmY2IuaV91aWQpOworCWlub2RlLT5pX2dpZCA9IGxlMzJfdG9fY3B1KGZjYi5pX2dpZCk7CisJaW5vZGUtPmlfbmxpbmsgPSBsZTE2X3RvX2NwdShmY2IuaV9saW5rc19jb3VudCk7CisJaW5vZGUtPmlfY3RpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShmY2IuaV9jdGltZSk7CisJaW5vZGUtPmlfYXRpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShmY2IuaV9hdGltZSk7CisJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gKHNpZ25lZClsZTMyX3RvX2NwdShmY2IuaV9tdGltZSk7CisJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9CisJCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gMDsKKwlvaS0+aV9jb21taXRfc2l6ZSA9IGxlNjRfdG9fY3B1KGZjYi5pX3NpemUpOworCWlfc2l6ZV93cml0ZShpbm9kZSwgb2ktPmlfY29tbWl0X3NpemUpOworCWlub2RlLT5pX2Jsa2JpdHMgPSBFWE9GU19CTEtTSElGVDsKKwlpbm9kZS0+aV9nZW5lcmF0aW9uID0gbGUzMl90b19jcHUoZmNiLmlfZ2VuZXJhdGlvbik7CisKKyNpZmRlZiBFWE9GU19ERUJVR19PQkpfSVNJWkUKKwlpZiAoKGlub2RlLT5pX3NpemUgIT0gc2FuaXR5KSAmJgorCQkoIWV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpKSB7CisJCUVYT0ZTX0VSUigiV0FSTklORzogU2l6ZSBvZiBvYmplY3QgZnJvbSBpbm9kZSBhbmQgIgorCQkJICAiYXR0cmlidXRlcyBkaWZmZXIgKCVsbGQgIT0gJWxsdSlcbiIsCisJCQkgIGlub2RlLT5pX3NpemUsIF9MTFUoc2FuaXR5KSk7CisJfQorI2VuZGlmCisKKwlvaS0+aV9kaXJfc3RhcnRfbG9va3VwID0gMDsKKworCWlmICgoaW5vZGUtPmlfbmxpbmsgPT0gMCkgJiYgKGlub2RlLT5pX21vZGUgPT0gMCkpIHsKKwkJcmV0ID0gLUVTVEFMRTsKKwkJZ290byBiYWRfaW5vZGU7CisJfQorCisJaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAoZmNiLmlfZGF0YVswXSkKKwkJCWlub2RlLT5pX3JkZXYgPQorCQkJCW9sZF9kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KGZjYi5pX2RhdGFbMF0pKTsKKwkJZWxzZQorCQkJaW5vZGUtPmlfcmRldiA9CisJCQkJbmV3X2RlY29kZV9kZXYobGUzMl90b19jcHUoZmNiLmlfZGF0YVsxXSkpOworCX0gZWxzZSB7CisJCW1lbWNweShvaS0+aV9kYXRhLCBmY2IuaV9kYXRhLCBzaXplb2YoZmNiLmlfZGF0YSkpOworCX0KKworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJmV4b2ZzX2ZpbGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwl9IGVsc2UgaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19kaXJfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCisJCQlpbm9kZS0+aV9vcCA9ICZleG9mc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKwkJZWxzZSB7CisJCQlpbm9kZS0+aV9vcCA9ICZleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleG9mc19hb3BzOworCQl9CisJfSBlbHNlIHsKKwkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOworCQlpZiAoZmNiLmlfZGF0YVswXSkKKwkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKKwkJCSAgIG9sZF9kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KGZjYi5pX2RhdGFbMF0pKSk7CisJCWVsc2UKKwkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKKwkJCSAgIG5ld19kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KGZjYi5pX2RhdGFbMV0pKSk7CisJfQorCisJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CisJcmV0dXJuIGlub2RlOworCitiYWRfaW5vZGU6CisJaWdldF9mYWlsZWQoaW5vZGUpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK2ludCBfX2V4b2ZzX3dhaXRfb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCit7CisJaWYgKCFvYmpfY3JlYXRlZChvaSkpIHsKKwkJQlVHX09OKCFvYmpfMmJjcmVhdGVkKG9pKSk7CisJCXdhaXRfZXZlbnQob2ktPmlfd3EsIG9ial9jcmVhdGVkKG9pKSk7CisJfQorCXJldHVybiB1bmxpa2VseShpc19iYWRfaW5vZGUoJm9pLT52ZnNfaW5vZGUpKSA/IC1FSU8gOiAwOworfQorLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZyb20gZXhvZnNfbmV3X2lub2RlKCkuICBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgd2UKKyAqIHNldCB0aGUgb2JqX2NyZWF0ZWQgZmxhZyBzbyB0aGF0IG90aGVyIG1ldGhvZHMga25vdyB0aGF0IHRoZSBvYmplY3QgZXhpc3RzIG9uCisgKiB0aGUgT1NELgorICovCitzdGF0aWMgdm9pZCBjcmVhdGVfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJaW50IHJldDsKKworCXJldCA9IGV4b2ZzX2NoZWNrX29rKG9yKTsKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCWF0b21pY19kZWMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJvYmplY3Q9MHglbGx4IGNyZWF0aW9uIGZhaWxkIGluIHBpZD0weCVsbHgiLAorCQkJICBfTExVKHNiaS0+c19waWQpLCBfTExVKGlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkYpKTsKKwkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOworCX0gZWxzZQorCQlzZXRfb2JqX2NyZWF0ZWQob2kpOworCisJYXRvbWljX2RlYygmaW5vZGUtPmlfY291bnQpOworCXdha2VfdXAoJm9pLT5pX3dxKTsKK30KKworLyoKKyAqIFNldCB1cCBhIG5ldyBpbm9kZSBhbmQgY3JlYXRlIGFuIG9iamVjdCBmb3IgaXQgb24gdGhlIE9TRAorICovCitzdHJ1Y3QgaW5vZGUgKmV4b2ZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmo7CisJaW50IHJldDsKKworCXNiID0gZGlyLT5pX3NiOworCWlub2RlID0gbmV3X2lub2RlKHNiKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW9pID0gZXhvZnNfaShpbm9kZSk7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZvaS0+aV93cSk7CisJc2V0X29ial8yYmNyZWF0ZWQob2kpOworCisJc2JpID0gc2ItPnNfZnNfaW5mbzsKKworCXNiLT5zX2RpcnQgPSAxOworCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmNyZWQtPmZzdWlkOworCWlmIChkaXItPmlfbW9kZSAmIFNfSVNHSUQpIHsKKwkJaW5vZGUtPmlfZ2lkID0gZGlyLT5pX2dpZDsKKwkJaWYgKFNfSVNESVIobW9kZSkpCisJCQltb2RlIHw9IFNfSVNHSUQ7CisJfSBlbHNlIHsKKwkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+Y3JlZC0+ZnNnaWQ7CisJfQorCWlub2RlLT5pX21vZGUgPSBtb2RlOworCisJaW5vZGUtPmlfaW5vID0gc2JpLT5zX25leHRpZCsrOworCWlub2RlLT5pX2Jsa2JpdHMgPSBFWE9GU19CTEtTSElGVDsKKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJb2ktPmlfY29tbWl0X3NpemUgPSBpbm9kZS0+aV9zaXplID0gMDsKKwlzcGluX2xvY2soJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKKwlpbm9kZS0+aV9nZW5lcmF0aW9uID0gc2JpLT5zX25leHRfZ2VuZXJhdGlvbisrOworCXNwaW5fdW5sb2NrKCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOworCisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKKwlvYmoucGFydGl0aW9uID0gc2JpLT5zX3BpZDsKKwlvYmouaWQgPSBpbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGOworCWV4b2ZzX21ha2VfY3JlZGVudGlhbChvaS0+aV9jcmVkLCAmb2JqKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc19uZXdfaW5vZGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCW9zZF9yZXFfY3JlYXRlX29iamVjdChvciwgJm9iaik7CisKKwkvKiBpbmNyZW1lbnQgdGhlIHJlZmNvdW50IHNvIHRoYXQgdGhlIGlub2RlIHdpbGwgc3RpbGwgYmUgYXJvdW5kIHdoZW4gd2UKKwkgKiByZWFjaCB0aGUgY2FsbGJhY2sKKwkgKi8KKwlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CisKKwlyZXQgPSBleG9mc19hc3luY19vcChvciwgY3JlYXRlX2RvbmUsIGlub2RlLCBvaS0+aV9jcmVkKTsKKwlpZiAocmV0KSB7CisJCWF0b21pY19kZWMoJmlub2RlLT5pX2NvdW50KTsKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCWF0b21pY19pbmMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJcmV0dXJuIGlub2RlOworfQorCisvKgorICogc3RydWN0IHRvIHBhc3MgdHdvIGFyZ3VtZW50cyB0byB1cGRhdGVfaW5vZGUncyBjYWxsYmFjaworICovCitzdHJ1Y3QgdXBkYXRlaV9hcmdzIHsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbwkqc2JpOworCXN0cnVjdCBleG9mc19mY2IJZmNiOworfTsKKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZyb20gZXhvZnNfdXBkYXRlX2lub2RlKCkuCisgKi8KK3N0YXRpYyB2b2lkIHVwZGF0ZWlfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCB1cGRhdGVpX2FyZ3MgKmFyZ3MgPSBwOworCisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKworCWF0b21pY19kZWMoJmFyZ3MtPnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJa2ZyZWUoYXJncyk7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgaW5vZGUgdG8gdGhlIE9TRC4gIEp1c3QgZmlsbCB1cCB0aGUgc3RydWN0LCBhbmQgc2V0IHRoZSBhdHRyaWJ1dGUKKyAqIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkgZGVwZW5kaW5nIG9uIHRoZSBkb19zeW5jIGZsYWcuCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtzYmktPnNfcGlkLCBpbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGfTsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCXN0cnVjdCBvc2RfYXR0ciBhdHRyOworCXN0cnVjdCBleG9mc19mY2IgKmZjYjsKKwlzdHJ1Y3QgdXBkYXRlaV9hcmdzICphcmdzOworCWludCByZXQ7CisKKwlhcmdzID0ga3phbGxvYyhzaXplb2YoKmFyZ3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFyZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJZmNiID0gJmFyZ3MtPmZjYjsKKworCWZjYi0+aV9tb2RlID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbW9kZSk7CisJZmNiLT5pX3VpZCA9IGNwdV90b19sZTMyKGlub2RlLT5pX3VpZCk7CisJZmNiLT5pX2dpZCA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dpZCk7CisJZmNiLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCWZjYi0+aV9jdGltZSA9IGNwdV90b19sZTMyKGlub2RlLT5pX2N0aW1lLnR2X3NlYyk7CisJZmNiLT5pX2F0aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfYXRpbWUudHZfc2VjKTsKKwlmY2ItPmlfbXRpbWUgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9tdGltZS50dl9zZWMpOworCW9pLT5pX2NvbW1pdF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWZjYi0+aV9zaXplID0gY3B1X3RvX2xlNjQob2ktPmlfY29tbWl0X3NpemUpOworCWZjYi0+aV9nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfZ2VuZXJhdGlvbik7CisKKwlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7CisJCWlmIChvbGRfdmFsaWRfZGV2KGlub2RlLT5pX3JkZXYpKSB7CisJCQlmY2ItPmlfZGF0YVswXSA9CisJCQkJY3B1X3RvX2xlMzIob2xkX2VuY29kZV9kZXYoaW5vZGUtPmlfcmRldikpOworCQkJZmNiLT5pX2RhdGFbMV0gPSAwOworCQl9IGVsc2UgeworCQkJZmNiLT5pX2RhdGFbMF0gPSAwOworCQkJZmNiLT5pX2RhdGFbMV0gPQorCQkJCWNwdV90b19sZTMyKG5ld19lbmNvZGVfZGV2KGlub2RlLT5pX3JkZXYpKTsKKwkJCWZjYi0+aV9kYXRhWzJdID0gMDsKKwkJfQorCX0gZWxzZQorCQltZW1jcHkoZmNiLT5pX2RhdGEsIG9pLT5pX2RhdGEsIHNpemVvZihmY2ItPmlfZGF0YSkpOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChzYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoImV4b2ZzX3VwZGF0ZV9pbm9kZTogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9hcmdzOworCX0KKworCW9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMob3IsICZvYmopOworCisJYXR0ciA9IGdfYXR0cl9pbm9kZV9kYXRhOworCWF0dHIudmFsX3B0ciA9IGZjYjsKKwlvc2RfcmVxX2FkZF9zZXRfYXR0cl9saXN0KG9yLCAmYXR0ciwgMSk7CisKKwlpZiAoIW9ial9jcmVhdGVkKG9pKSkgeworCQlFWE9GU19EQkdNU0coIiFvYmpfY3JlYXRlZFxuIik7CisJCUJVR19PTighb2JqXzJiY3JlYXRlZChvaSkpOworCQl3YWl0X2V2ZW50KG9pLT5pX3dxLCBvYmpfY3JlYXRlZChvaSkpOworCQlFWE9GU19EQkdNU0coIndhaXRfZXZlbnQgZG9uZVxuIik7CisJfQorCisJaWYgKGRvX3N5bmMpIHsKKwkJcmV0ID0gZXhvZnNfc3luY19vcChvciwgc2JpLT5zX3RpbWVvdXQsIG9pLT5pX2NyZWQpOworCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCQlnb3RvIGZyZWVfYXJnczsKKwl9IGVsc2UgeworCQlhcmdzLT5zYmkgPSBzYmk7CisKKwkJcmV0ID0gZXhvZnNfYXN5bmNfb3Aob3IsIHVwZGF0ZWlfZG9uZSwgYXJncywgb2ktPmlfY3JlZCk7CisJCWlmIChyZXQpIHsKKwkJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJCQlnb3RvIGZyZWVfYXJnczsKKwkJfQorCQlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKwkJZ290byBvdXQ7IC8qIGRlYWxsb2NhdGlvbiBpbiB1cGRhdGVpX2RvbmUgKi8KKwl9CisKK2ZyZWVfYXJnczoKKwlrZnJlZShhcmdzKTsKK291dDoKKwlFWE9GU19EQkdNU0coInJldD0+JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQoreworCXJldHVybiBleG9mc191cGRhdGVfaW5vZGUoaW5vZGUsIHdhaXQpOworfQorCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZnJvbSBleG9mc19kZWxldGVfaW5vZGUoKSAtIGRvbid0IGhhdmUgbXVjaCBjbGVhbmluZyB1cCB0bworICogZG8uCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9kb25lKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKnApCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaTsKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXNiaSA9IHA7CisJYXRvbWljX2RlYygmc2JpLT5zX2N1cnJfcGVuZGluZyk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgcmVmY291bnQgb2YgYW4gaW5vZGUgcmVhY2hlcyB6ZXJvLiAgV2UgcmVtb3ZlIHRoZSBvYmplY3QKKyAqIGZyb20gdGhlIE9TRCBoZXJlLiAgV2UgbWFrZSBzdXJlIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQgYmVmb3JlIHdlIHRyeSBhbmQKKyAqIGRlbGV0ZSBpdC4KKyAqLwordm9pZCBleG9mc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwgaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlpbnQgcmV0OworCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCisJaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCisJCWdvdG8gbm9fZGVsZXRlOworCisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJZXhvZnNfdXBkYXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CisKKwlpbm9kZS0+aV9zaXplID0gMDsKKwlpZiAoaW5vZGUtPmlfYmxvY2tzKQorCQlleG9mc190cnVuY2F0ZShpbm9kZSk7CisKKwljbGVhcl9pbm9kZShpbm9kZSk7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfZGVsZXRlX2lub2RlOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJb3NkX3JlcV9yZW1vdmVfb2JqZWN0KG9yLCAmb2JqKTsKKworCS8qIGlmIHdlIGFyZSBkZWxldGluZyBhbiBvYmogdGhhdCBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldCwgd2FpdCAqLworCWlmICghb2JqX2NyZWF0ZWQob2kpKSB7CisJCUJVR19PTighb2JqXzJiY3JlYXRlZChvaSkpOworCQl3YWl0X2V2ZW50KG9pLT5pX3dxLCBvYmpfY3JlYXRlZChvaSkpOworCX0KKworCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCBkZWxldGVfZG9uZSwgc2JpLCBvaS0+aV9jcmVkKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigKKwkJICAgICAgICJFUlJPUjogQGV4b2ZzX2RlbGV0ZV9pbm9kZSBleG9mc19hc3luY19vcCBmYWlsZWRcbiIpOworCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCQlyZXR1cm47CisJfQorCWF0b21pY19pbmMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJcmV0dXJuOworCitub19kZWxldGU6CisJY2xlYXJfaW5vZGUoaW5vZGUpOworfQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvbmFtZWkuYyBiL2ZzL2V4b2ZzL25hbWVpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZGQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL25hbWVpLmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHRzIGZvciBjb2RlIHRha2VuIGZyb20gZXh0MjoKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqICAgICBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiAgICAgTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKiAgICAgZnJvbQorICogICAgIGxpbnV4L2ZzL21pbml4L2lub2RlLmMKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgZXhvZnMuCisgKgorICogZXhvZnMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBTaW5jZSBpdCBpcyBiYXNlZCBvbiBleHQyLCBhbmQgdGhlIG9ubHkKKyAqIHZhbGlkIHZlcnNpb24gb2YgR1BMIGZvciB0aGUgTGludXgga2VybmVsIGlzIHZlcnNpb24gMiwgdGhlIG9ubHkgdmFsaWQKKyAqIHZlcnNpb24gb2YgR1BMIGZvciBleG9mcyBpcyB2ZXJzaW9uIDIuCisgKgorICogZXhvZnMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIGV4b2ZzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgaW5saW5lIGludCBleG9mc19hZGRfbm9uZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgZXJyID0gZXhvZnNfYWRkX2xpbmsoZGVudHJ5LCBpbm9kZSk7CisJaWYgKCFlcnIpIHsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXhvZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbm9fdCBpbm87CisKKwlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gRVhPRlNfTkFNRV9MRU4pCisJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOworCisJaW5vID0gZXhvZnNfaW5vZGVfYnlfbmFtZShkaXIsIGRlbnRyeSk7CisJaW5vZGUgPSBOVUxMOworCWlmIChpbm8pIHsKKwkJaW5vZGUgPSBleG9mc19pZ2V0KGRpci0+aV9zYiwgaW5vKTsKKwkJaWYgKElTX0VSUihpbm9kZSkpCisJCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCX0KKwlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQkJIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBleG9mc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKKwlpbnQgZXJyID0gUFRSX0VSUihpbm9kZSk7CisJaWYgKCFJU19FUlIoaW5vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJmV4b2ZzX2ZpbGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCWVyciA9IGV4b2ZzX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCSAgICAgICBkZXZfdCByZGV2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVycjsKKworCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbm9kZSA9IGV4b2ZzX25ld19pbm9kZShkaXIsIG1vZGUpOworCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCWlmICghSVNfRVJSKGlub2RlKSkgeworCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIHJkZXYpOworCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJZXJyID0gZXhvZnNfYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBleG9mc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKKwlpbnQgZXJyID0gLUVOQU1FVE9PTE9ORzsKKwl1bnNpZ25lZCBsID0gc3RybGVuKHN5bW5hbWUpKzE7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaTsKKworCWlmIChsID4gc2ItPnNfYmxvY2tzaXplKQorCQlnb3RvIG91dDsKKworCWlub2RlID0gZXhvZnNfbmV3X2lub2RlKGRpciwgU19JRkxOSyB8IFNfSVJXWFVHTyk7CisJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCWdvdG8gb3V0OworCisJb2kgPSBleG9mc19pKGlub2RlKTsKKwlpZiAobCA+IHNpemVvZihvaS0+aV9kYXRhKSkgeworCQkvKiBzbG93IHN5bWxpbmsgKi8KKwkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleG9mc19hb3BzOworCQltZW1zZXQob2ktPmlfZGF0YSwgMCwgc2l6ZW9mKG9pLT5pX2RhdGEpKTsKKworCQllcnIgPSBwYWdlX3N5bWxpbmsoaW5vZGUsIHN5bW5hbWUsIGwpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZmFpbDsKKwl9IGVsc2UgeworCQkvKiBmYXN0IHN5bWxpbmsgKi8KKwkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCW1lbWNweShvaS0+aV9kYXRhLCBzeW1uYW1lLCBsKTsKKwkJaW5vZGUtPmlfc2l6ZSA9IGwtMTsKKwl9CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKKwllcnIgPSBleG9mc19hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOworb3V0OgorCXJldHVybiBlcnI7CisKK291dF9mYWlsOgorCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBleG9mc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPj0gRVhPRlNfTElOS19NQVgpCisJCXJldHVybiAtRU1MSU5LOworCisJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOworCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKKworCXJldHVybiBleG9mc19hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOworfQorCitzdGF0aWMgaW50IGV4b2ZzX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVyciA9IC1FTUxJTks7CisKKwlpZiAoZGlyLT5pX25saW5rID49IEVYT0ZTX0xJTktfTUFYKQorCQlnb3RvIG91dDsKKworCWlub2RlX2luY19saW5rX2NvdW50KGRpcik7CisKKwlpbm9kZSA9IGV4b2ZzX25ld19pbm9kZShkaXIsIFNfSUZESVIgfCBtb2RlKTsKKwllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJZ290byBvdXRfZGlyOworCisJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJaW5vZGUtPmlfZm9wID0gJmV4b2ZzX2Rpcl9vcGVyYXRpb25zOworCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisKKwlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CisKKwllcnIgPSBleG9mc19tYWtlX2VtcHR5KGlub2RlLCBkaXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZhaWw7CisKKwllcnIgPSBleG9mc19hZGRfbGluayhkZW50cnksIGlub2RlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mYWlsOworCisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKK291dDoKKwlyZXR1cm4gZXJyOworCitvdXRfZmFpbDoKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWlwdXQoaW5vZGUpOworb3V0X2RpcjoKKwlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50IGV4b2ZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlkZSA9IGV4b2ZzX2ZpbmRfZW50cnkoZGlyLCBkZW50cnksICZwYWdlKTsKKwlpZiAoIWRlKQorCQlnb3RvIG91dDsKKworCWVyciA9IGV4b2ZzX2RlbGV0ZV9lbnRyeShkZSwgcGFnZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJZXJyID0gMDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGV4b2ZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyID0gLUVOT1RFTVBUWTsKKworCWlmIChleG9mc19lbXB0eV9kaXIoaW5vZGUpKSB7CisJCWVyciA9IGV4b2ZzX3VubGluayhkaXIsIGRlbnRyeSk7CisJCWlmICghZXJyKSB7CisJCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwkJCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBleG9mc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQlzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IGlub2RlICpvbGRfaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqbmV3X2lub2RlID0gbmV3X2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqZGlyX3BhZ2UgPSBOVUxMOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRpcl9kZSA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKm9sZF9wYWdlOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKm9sZF9kZTsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCW9sZF9kZSA9IGV4b2ZzX2ZpbmRfZW50cnkob2xkX2Rpciwgb2xkX2RlbnRyeSwgJm9sZF9wYWdlKTsKKwlpZiAoIW9sZF9kZSkKKwkJZ290byBvdXQ7CisKKwlpZiAoU19JU0RJUihvbGRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyID0gLUVJTzsKKwkJZGlyX2RlID0gZXhvZnNfZG90ZG90KG9sZF9pbm9kZSwgJmRpcl9wYWdlKTsKKwkJaWYgKCFkaXJfZGUpCisJCQlnb3RvIG91dF9vbGQ7CisJfQorCisJaWYgKG5ld19pbm9kZSkgeworCQlzdHJ1Y3QgcGFnZSAqbmV3X3BhZ2U7CisJCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKm5ld19kZTsKKworCQllcnIgPSAtRU5PVEVNUFRZOworCQlpZiAoZGlyX2RlICYmICFleG9mc19lbXB0eV9kaXIobmV3X2lub2RlKSkKKwkJCWdvdG8gb3V0X2RpcjsKKworCQllcnIgPSAtRU5PRU5UOworCQluZXdfZGUgPSBleG9mc19maW5kX2VudHJ5KG5ld19kaXIsIG5ld19kZW50cnksICZuZXdfcGFnZSk7CisJCWlmICghbmV3X2RlKQorCQkJZ290byBvdXRfZGlyOworCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQllcnIgPSBleG9mc19zZXRfbGluayhuZXdfZGlyLCBuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOworCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWlmIChkaXJfZGUpCisJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9kaXI7CisJfSBlbHNlIHsKKwkJaWYgKGRpcl9kZSkgeworCQkJZXJyID0gLUVNTElOSzsKKwkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IEVYT0ZTX0xJTktfTUFYKQorCQkJCWdvdG8gb3V0X2RpcjsKKwkJfQorCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQllcnIgPSBleG9mc19hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOworCQlpZiAoZXJyKSB7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQkJZ290byBvdXRfZGlyOworCQl9CisJCWlmIChkaXJfZGUpCisJCQlpbm9kZV9pbmNfbGlua19jb3VudChuZXdfZGlyKTsKKwl9CisKKwlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwlleG9mc19kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKworCWlmIChkaXJfZGUpIHsKKwkJZXJyID0gZXhvZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2Rpcik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9kaXI7CisJfQorCXJldHVybiAwOworCisKK291dF9kaXI6CisJaWYgKGRpcl9kZSkgeworCQlrdW5tYXAoZGlyX3BhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UoZGlyX3BhZ2UpOworCX0KK291dF9vbGQ6CisJa3VubWFwKG9sZF9wYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0geworCS5jcmVhdGUgCT0gZXhvZnNfY3JlYXRlLAorCS5sb29rdXAgCT0gZXhvZnNfbG9va3VwLAorCS5saW5rICAgCT0gZXhvZnNfbGluaywKKwkudW5saW5rIAk9IGV4b2ZzX3VubGluaywKKwkuc3ltbGluawk9IGV4b2ZzX3N5bWxpbmssCisJLm1rZGlyICAJPSBleG9mc19ta2RpciwKKwkucm1kaXIgIAk9IGV4b2ZzX3JtZGlyLAorCS5ta25vZCAgCT0gZXhvZnNfbWtub2QsCisJLnJlbmFtZSAJPSBleG9mc19yZW5hbWUsCisJLnNldGF0dHIJPSBleG9mc19zZXRhdHRyLAorfTsKKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0geworCS5zZXRhdHRyCT0gZXhvZnNfc2V0YXR0ciwKK307CmRpZmYgLS1naXQgYS9mcy9leG9mcy9vc2QuYyBiL2ZzL2V4b2ZzL29zZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDlhZTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9vc2QuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlbnNlLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCitpbnQgZXhvZnNfY2hlY2tfb2tfcmVzaWQoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdTY0ICppbl9yZXNpZCwgdTY0ICpvdXRfcmVzaWQpCit7CisJc3RydWN0IG9zZF9zZW5zZV9pbmZvIG9zaTsKKwlpbnQgcmV0ID0gb3NkX3JlcV9kZWNvZGVfc2Vuc2Uob3IsICZvc2kpOworCisJaWYgKHJldCkgeyAvKiB0cmFuc2xhdGUgdG8gTGludXggY29kZXMgKi8KKwkJaWYgKG9zaS5hZGRpdGlvbmFsX2NvZGUgPT0gc2NzaV9pbnZhbGlkX2ZpZWxkX2luX2NkYikgeworCQkJaWYgKG9zaS5jZGJfZmllbGRfb2Zmc2V0ID09IE9TRF9DRk9fU1RBUlRJTkdfQllURSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJaWYgKG9zaS5jZGJfZmllbGRfb2Zmc2V0ID09IE9TRF9DRk9fT0JKRUNUX0lEKQorCQkJCXJldCA9IC1FTk9FTlQ7CisJCQllbHNlCisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlmIChvc2kuYWRkaXRpb25hbF9jb2RlID09IG9zZF9xdW90YV9lcnJvcikKKwkJCXJldCA9IC1FTk9TUEM7CisJCWVsc2UKKwkJCXJldCA9IC1FSU87CisJfQorCisJLyogRklYTUU6IHNob3VsZCBiZSBpbmNsdWRlIGluIG9zZF9zZW5zZV9pbmZvICovCisJaWYgKGluX3Jlc2lkKQorCQkqaW5fcmVzaWQgPSBvci0+aW4ucmVxID8gb3ItPmluLnJlcS0+ZGF0YV9sZW4gOiAwOworCisJaWYgKG91dF9yZXNpZCkKKwkJKm91dF9yZXNpZCA9IG9yLT5vdXQucmVxID8gb3ItPm91dC5yZXEtPmRhdGFfbGVuIDogMDsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZXhvZnNfbWFrZV9jcmVkZW50aWFsKHU4IGNyZWRfYVtPU0RfQ0FQX0xFTl0sIGNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmopCit7CisJb3NkX3NlY19pbml0X25vc2VjX2RvYWxsX2NhcHMoY3JlZF9hLCBvYmosIGZhbHNlLCB0cnVlKTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBzeW5jaHJvbm91cyBPU0Qgb3BlcmF0aW9uLgorICovCitpbnQgZXhvZnNfc3luY19vcChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBpbnQgdGltZW91dCwgdWludDhfdCAqY3JlZGVudGlhbCkKK3sKKwlpbnQgcmV0OworCisJb3ItPnRpbWVvdXQgPSB0aW1lb3V0OworCXJldCA9IG9zZF9maW5hbGl6ZV9yZXF1ZXN0KG9yLCAwLCBjcmVkZW50aWFsLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGQgdG8gb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvc2RfZXhlY3V0ZV9yZXF1ZXN0KG9yKTsKKworCWlmIChyZXQpCisJCUVYT0ZTX0RCR01TRygib3NkX2V4ZWN1dGVfcmVxdWVzdCgpID0+ICVkXG4iLCByZXQpOworCS8qIG9zZF9yZXFfZGVjb2RlX3NlbnNlKG9yLCByZXQpOyAqLworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBPU0Qgb3BlcmF0aW9uLgorICovCitpbnQgZXhvZnNfYXN5bmNfb3Aoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lLAorCQkgICB2b2lkICpjYWxsZXJfY29udGV4dCwgdTggKmNyZWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG9zZF9maW5hbGl6ZV9yZXF1ZXN0KG9yLCAwLCBjcmVkLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGQgdG8gb3NkX2ZpbmFsaXplX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jKG9yLCBhc3luY19kb25lLCBjYWxsZXJfY29udGV4dCk7CisKKwlpZiAocmV0KQorCQlFWE9GU19EQkdNU0coIm9zZF9leGVjdXRlX3JlcXVlc3RfYXN5bmMoKSA9PiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZXh0cmFjdF9hdHRyX2Zyb21fcmVxKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHN0cnVjdCBvc2RfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3Qgb3NkX2F0dHIgY3VyX2F0dHIgPSB7LmF0dHJfcGFnZSA9IDB9OyAvKiBzdGFydCB3aXRoIHplcm9zICovCisJdm9pZCAqaXRlciA9IE5VTEw7CisJaW50IG5lbGVtOworCisJZG8geworCQluZWxlbSA9IDE7CisJCW9zZF9yZXFfZGVjb2RlX2dldF9hdHRyX2xpc3Qob3IsICZjdXJfYXR0ciwgJm5lbGVtLCAmaXRlcik7CisJCWlmICgoY3VyX2F0dHIuYXR0cl9wYWdlID09IGF0dHItPmF0dHJfcGFnZSkgJiYKKwkJICAgIChjdXJfYXR0ci5hdHRyX2lkID09IGF0dHItPmF0dHJfaWQpKSB7CisJCQlhdHRyLT5sZW4gPSBjdXJfYXR0ci5sZW47CisJCQlhdHRyLT52YWxfcHRyID0gY3VyX2F0dHIudmFsX3B0cjsKKwkJCXJldHVybiAwOworCQl9CisJfSB3aGlsZSAoaXRlcik7CisKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IG9zZF9yZXFfcmVhZF9rZXJuKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdm9pZCogYnVmZiwgdTY0IGxlbikKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxX3EgPSBvci0+b3NkX2Rldi0+c2NzaV9kZXZpY2UtPnJlcXVlc3RfcXVldWU7CisJc3RydWN0IGJpbyAqYmlvID0gYmlvX21hcF9rZXJuKHJlcV9xLCBidWZmLCBsZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCFiaW8pCisJCXJldHVybiAtRU5PTUVNOworCisJb3NkX3JlcV9yZWFkKG9yLCBvYmosIGJpbywgb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IG9zZF9yZXFfd3JpdGVfa2VybihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHZvaWQqIGJ1ZmYsIHU2NCBsZW4pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJlcV9xID0gb3ItPm9zZF9kZXYtPnNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19tYXBfa2VybihyZXFfcSwgYnVmZiwgbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9zZF9yZXFfd3JpdGUob3IsIG9iaiwgYmlvLCBvZmZzZXQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvc3VwZXIuYyBiL2ZzL2V4b2ZzL3N1cGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYxOTg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL3N1cGVyLmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHRzIGZvciBjb2RlIHRha2VuIGZyb20gZXh0MjoKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqICAgICBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiAgICAgTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKiAgICAgZnJvbQorICogICAgIGxpbnV4L2ZzL21pbml4L2lub2RlLmMKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgZXhvZnMuCisgKgorICogZXhvZnMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBTaW5jZSBpdCBpcyBiYXNlZCBvbiBleHQyLCBhbmQgdGhlIG9ubHkKKyAqIHZhbGlkIHZlcnNpb24gb2YgR1BMIGZvciB0aGUgTGludXgga2VybmVsIGlzIHZlcnNpb24gMiwgdGhlIG9ubHkgdmFsaWQKKyAqIHZlcnNpb24gb2YgR1BMIGZvciBleG9mcyBpcyB2ZXJzaW9uIDIuCisgKgorICogZXhvZnMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIGV4b2ZzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgorCisjaW5jbHVkZSAiZXhvZnMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTU9VTlQgT1BUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3RydWN0IHRvIGhvbGQgd2hhdCB3ZSBnZXQgZnJvbSBtb3VudCBvcHRpb25zCisgKi8KK3N0cnVjdCBleG9mc19tb3VudG9wdCB7CisJY29uc3QgY2hhciAqZGV2X25hbWU7CisJdWludDY0X3QgcGlkOworCWludCB0aW1lb3V0OworfTsKKworLyoKKyAqIGV4b2ZzLXNwZWNpZmljIG1vdW50LXRpbWUgb3B0aW9ucy4KKyAqLworZW51bSB7IE9wdF9waWQsIE9wdF90bywgT3B0X21rZnMsIE9wdF9mb3JtYXQsIE9wdF9lcnIgfTsKKworLyoKKyAqIE91ciBtb3VudC10aW1lIG9wdGlvbnMuICBUaGVzZSBzaG91bGQgaWRlYWxseSBiZSA2NC1iaXQgdW5zaWduZWQsIGJ1dCB0aGUKKyAqIGtlcm5lbCdzIHBhcnNpbmcgZnVuY3Rpb25zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGF0LiAgMzItYml0IHNob3VsZCBiZQorICogc3VmZmljaWVudCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMgbm93LgorICovCitzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CisJe09wdF9waWQsICJwaWQ9JXUifSwKKwl7T3B0X3RvLCAidG89JXUifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKKy8qCisgKiBUaGUgbWFpbiBvcHRpb24gcGFyc2luZyBtZXRob2QuICBBbHNvIG1ha2VzIHN1cmUgdGhhdCBhbGwgb2YgdGhlIG1hbmRhdG9yeQorICogbW91bnQgb3B0aW9ucyB3ZXJlIHNldC4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBleG9mc19tb3VudG9wdCAqb3B0cykKK3sKKwljaGFyICpwOworCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwlpbnQgb3B0aW9uOworCWJvb2wgc19waWQgPSBmYWxzZTsKKworCUVYT0ZTX0RCR01TRygicGFyc2Vfb3B0aW9ucyAlc1xuIiwgb3B0aW9ucyk7CisJLyogZGVmYXVsdHMgKi8KKwltZW1zZXQob3B0cywgMCwgc2l6ZW9mKCpvcHRzKSk7CisJb3B0cy0+dGltZW91dCA9IEJMS19ERUZBVUxUX1NHX1RJTUVPVVQ7CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaW50IHRva2VuOworCQljaGFyIHN0clszMl07CisKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCisJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgdG9rZW5zLCBhcmdzKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9waWQ6CisJCQlpZiAoMCA9PSBtYXRjaF9zdHJsY3B5KHN0ciwgJmFyZ3NbMF0sIHNpemVvZihzdHIpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW9wdHMtPnBpZCA9IHNpbXBsZV9zdHJ0b3VsbChzdHIsIE5VTEwsIDApOworCQkJaWYgKG9wdHMtPnBpZCA8IEVYT0ZTX01JTl9QSUQpIHsKKwkJCQlFWE9GU19FUlIoIlBhcnRpdGlvbiBJRCBtdXN0IGJlID49ICV1IiwKKwkJCQkJICBFWE9GU19NSU5fUElEKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXNfcGlkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF90bzoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKG9wdGlvbiA8PSAwKSB7CisJCQkJRVhPRlNfRVJSKCJUaW1vdXQgbXVzdCBiZSA+IDAiKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCW9wdHMtPnRpbWVvdXQgPSBvcHRpb24gKiBIWjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFzX3BpZCkgeworCQlFWE9GU19FUlIoIk5lZWQgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4iKTsKKwkJRVhPRlNfRVJSKCIgICAgLW8gcGlkPXBpZF9ub190b191c2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSU5PREUgQ0FDSEUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIE91ciBpbm9kZSBjYWNoZS4gIElzbid0IGl0IHByZXR0eT8KKyAqLworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpleG9mc19pbm9kZV9jYWNoZXA7CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBpbm9kZSBpbiB0aGUgY2FjaGUKKyAqLworc3RhdGljIHN0cnVjdCBpbm9kZSAqZXhvZnNfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaTsKKworCW9pID0ga21lbV9jYWNoZV9hbGxvYyhleG9mc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpOworCWlmICghb2kpCisJCXJldHVybiBOVUxMOworCisJb2ktPnZmc19pbm9kZS5pX3ZlcnNpb24gPSAxOworCXJldHVybiAmb2ktPnZmc19pbm9kZTsKK30KKworLyoKKyAqIFJlbW92ZSBhbiBpbm9kZSBmcm9tIHRoZSBjYWNoZQorICovCitzdGF0aWMgdm9pZCBleG9mc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJa21lbV9jYWNoZV9mcmVlKGV4b2ZzX2lub2RlX2NhY2hlcCwgZXhvZnNfaShpbm9kZSkpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5vZGUKKyAqLworc3RhdGljIHZvaWQgZXhvZnNfaW5pdF9vbmNlKHZvaWQgKmZvbykKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGZvbzsKKworCWlub2RlX2luaXRfb25jZSgmb2ktPnZmc19pbm9kZSk7Cit9CisKKy8qCisgKiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIGlub2RlIGNhY2hlCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpCit7CisJZXhvZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImV4b2ZzX2lub2RlX2NhY2hlIiwKKwkJCQlzaXplb2Yoc3RydWN0IGV4b2ZzX2lfaW5mbyksIDAsCisJCQkJU0xBQl9SRUNMQUlNX0FDQ09VTlQgfCBTTEFCX01FTV9TUFJFQUQsCisJCQkJZXhvZnNfaW5pdF9vbmNlKTsKKwlpZiAoZXhvZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCisvKgorICogRGVzdHJveSB0aGUgaW5vZGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KGV4b2ZzX2lub2RlX2NhY2hlcCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNVUEVSQkxPQ0sgRlVOQ1RJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXhvZnNfc29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXhvZnNfZXhwb3J0X29wczsKKworLyoKKyAqIFdyaXRlIHRoZSBzdXBlcmJsb2NrIHRvIHRoZSBPU0QKKyAqLworc3RhdGljIHZvaWQgZXhvZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOworCXN0cnVjdCBleG9mc19mc2NiICpmc2NiOworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqOworCWludCByZXQ7CisKKwlmc2NiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGV4b2ZzX2ZzY2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZzY2IpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlsb2NrX2tlcm5lbCgpOworCXNiaSA9IHNiLT5zX2ZzX2luZm87CisJZnNjYi0+c19uZXh0aWQgPSBjcHVfdG9fbGU2NChzYmktPnNfbmV4dGlkKTsKKwlmc2NiLT5zX251bWZpbGVzID0gY3B1X3RvX2xlMzIoc2JpLT5zX251bWZpbGVzKTsKKwlmc2NiLT5zX21hZ2ljID0gY3B1X3RvX2xlMTYoc2ItPnNfbWFnaWMpOworCWZzY2ItPnNfbmV3ZnMgPSAwOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChzYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoImV4b2ZzX3dyaXRlX3N1cGVyOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJb2JqLnBhcnRpdGlvbiA9IHNiaS0+c19waWQ7CisJb2JqLmlkID0gRVhPRlNfU1VQRVJfSUQ7CisJcmV0ID0gb3NkX3JlcV93cml0ZV9rZXJuKG9yLCAmb2JqLCAwLCBmc2NiLCBzaXplb2YoKmZzY2IpKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlFWE9GU19FUlIoImV4b2ZzX3dyaXRlX3N1cGVyOiBvc2RfcmVxX3dyaXRlX2tlcm4gZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBzYmktPnNfY3JlZCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogZXhvZnNfc3luY19vcCBmYWlsZWQuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXNiLT5zX2RpcnQgPSAwOworCitvdXQ6CisJaWYgKG9yKQorCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXVubG9ja19rZXJuZWwoKTsKKwlrZnJlZShmc2NiKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHZmcyBpcyBmcmVlaW5nIHRoZSBzdXBlcmJsb2NrLiAgV2UganVzdAorICogbmVlZCB0byBmcmVlIG91ciBvd24gcGFydC4KKyAqLworc3RhdGljIHZvaWQgZXhvZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IG51bV9wZW5kOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOworCisJLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNvbW1hbmRzICovCisJZm9yIChudW1fcGVuZCA9IGF0b21pY19yZWFkKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsgbnVtX3BlbmQgPiAwOworCSAgICAgbnVtX3BlbmQgPSBhdG9taWNfcmVhZCgmc2JpLT5zX2N1cnJfcGVuZGluZykpIHsKKwkJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJndxKTsKKwkJd2FpdF9ldmVudF90aW1lb3V0KHdxLAorCQkJCSAgKGF0b21pY19yZWFkKCZzYmktPnNfY3Vycl9wZW5kaW5nKSA9PSAwKSwKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfQorCisJb3NkdWxkX3B1dF9kZXZpY2Uoc2JpLT5zX2Rldik7CisJa2ZyZWUoc2ItPnNfZnNfaW5mbyk7CisJc2ItPnNfZnNfaW5mbyA9IE5VTEw7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBzdXBlcmJsb2NrIGZyb20gdGhlIE9TRCBhbmQgZmlsbCBpbiB0aGUgZmllbGRzCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQoreworCXN0cnVjdCBpbm9kZSAqcm9vdDsKKwlzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgKm9wdHMgPSBkYXRhOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7CS8qZXh0ZW5kZWQgaW5mbyAgICAgICAgICAgICAgICAgICovCisJc3RydWN0IGV4b2ZzX2ZzY2IgZnNjYjsJCS8qb24tZGlzayBzdXBlcmJsb2NrIGluZm8gICAgICAgICovCisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvciA9IE5VTEw7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqOworCWludCByZXQ7CisKKwlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYmkpCisJCXJldHVybiAtRU5PTUVNOworCXNiLT5zX2ZzX2luZm8gPSBzYmk7CisKKwkvKiB1c2UgbW91bnQgb3B0aW9ucyB0byBmaWxsIHN1cGVyYmxvY2sgKi8KKwlzYmktPnNfZGV2ID0gb3NkdWxkX3BhdGhfbG9va3VwKG9wdHMtPmRldl9uYW1lKTsKKwlpZiAoSVNfRVJSKHNiaS0+c19kZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoc2JpLT5zX2Rldik7CisJCXNiaS0+c19kZXYgPSBOVUxMOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXNiaS0+c19waWQgPSBvcHRzLT5waWQ7CisJc2JpLT5zX3RpbWVvdXQgPSBvcHRzLT50aW1lb3V0OworCisJLyogZmlsbCBpbiBzb21lIG90aGVyIGRhdGEgYnkgaGFuZCAqLworCW1lbXNldChzYi0+c19pZCwgMCwgc2l6ZW9mKHNiLT5zX2lkKSk7CisJc3RyY3B5KHNiLT5zX2lkLCAiZXhvZnMiKTsKKwlzYi0+c19ibG9ja3NpemUgPSBFWE9GU19CTEtTSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gRVhPRlNfQkxLU0hJRlQ7CisJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOworCWF0b21pY19zZXQoJnNiaS0+c19jdXJyX3BlbmRpbmcsIDApOworCXNiLT5zX2JkZXYgPSBOVUxMOworCXNiLT5zX2RldiA9IDA7CisKKwkvKiByZWFkIGRhdGEgZnJvbSBvbi1kaXNrIHN1cGVyYmxvY2sgb2JqZWN0ICovCisJb2JqLnBhcnRpdGlvbiA9IHNiaS0+c19waWQ7CisJb2JqLmlkID0gRVhPRlNfU1VQRVJfSUQ7CisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKHNiaS0+c19jcmVkLCAmb2JqKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlFWE9GU19FUlIoCisJCQkgICAgICAgImV4b2ZzX2ZpbGxfc3VwZXI6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc2JpOworCX0KKwlyZXQgPSBvc2RfcmVxX3JlYWRfa2VybihvciwgJm9iaiwgMCwgJmZzY2IsIHNpemVvZihmc2NiKSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlFWE9GU19FUlIoCisJCQkgICAgICAgImV4b2ZzX2ZpbGxfc3VwZXI6IG9zZF9yZXFfcmVhZF9rZXJuIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBzYmktPnNfY3JlZCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlFWE9GU19FUlIoImV4b2ZzX2ZpbGxfc3VwZXI6IGV4b2ZzX3N5bmNfb3AgZmFpbGVkLlxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJc2ItPnNfbWFnaWMgPSBsZTE2X3RvX2NwdShmc2NiLnNfbWFnaWMpOworCXNiaS0+c19uZXh0aWQgPSBsZTY0X3RvX2NwdShmc2NiLnNfbmV4dGlkKTsKKwlzYmktPnNfbnVtZmlsZXMgPSBsZTMyX3RvX2NwdShmc2NiLnNfbnVtZmlsZXMpOworCisJLyogbWFrZSBzdXJlIHdoYXQgd2UgcmVhZCBmcm9tIHRoZSBvYmplY3Qgc3RvcmUgaXMgY29ycmVjdCAqLworCWlmIChzYi0+c19tYWdpYyAhPSBFWE9GU19TVVBFUl9NQUdJQykgeworCQlpZiAoIXNpbGVudCkKKwkJCUVYT0ZTX0VSUigiRVJST1I6IEJhZCBtYWdpYyB2YWx1ZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJLyogc3RhcnQgZ2VuZXJhdGlvbiBudW1iZXJzIGZyb20gYSByYW5kb20gcG9pbnQgKi8KKwlnZXRfcmFuZG9tX2J5dGVzKCZzYmktPnNfbmV4dF9nZW5lcmF0aW9uLCBzaXplb2YodTMyKSk7CisJc3Bpbl9sb2NrX2luaXQoJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKKworCS8qIHNldCB1cCBvcGVyYXRpb24gdmVjdG9ycyAqLworCXNiLT5zX29wID0gJmV4b2ZzX3NvcHM7CisJc2ItPnNfZXhwb3J0X29wID0gJmV4b2ZzX2V4cG9ydF9vcHM7CisJcm9vdCA9IGV4b2ZzX2lnZXQoc2IsIEVYT0ZTX1JPT1RfSUQgLSBFWE9GU19PQkpfT0ZGKTsKKwlpZiAoSVNfRVJSKHJvb3QpKSB7CisJCUVYT0ZTX0VSUigiRVJST1I6IGV4b2ZzX2lnZXQgZmFpbGVkXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihyb290KTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKKwlpZiAoIXNiLT5zX3Jvb3QpIHsKKwkJaXB1dChyb290KTsKKwkJRVhPRlNfRVJSKCJFUlJPUjogZ2V0IHJvb3QgaW5vZGUgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisKKwlpZiAoIVNfSVNESVIocm9vdC0+aV9tb2RlKSkgeworCQlkcHV0KHNiLT5zX3Jvb3QpOworCQlzYi0+c19yb290ID0gTlVMTDsKKwkJRVhPRlNfRVJSKCJFUlJPUjogY29ycnVwdCByb290IGlub2RlIChtb2RlID0gJWhkKVxuIiwKKwkJICAgICAgIHJvb3QtPmlfbW9kZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlpZiAob3IpCisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKKworZnJlZV9zYmk6CisJb3NkdWxkX3B1dF9kZXZpY2Uoc2JpLT5zX2Rldik7IC8qIE5VTEwgc2FmZSAqLworCWtmcmVlKHNiaSk7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIHN1cGVyYmxvY2sgKGNhbGxzIGV4b2ZzX2ZpbGxfc3VwZXIgZXZlbnR1YWxseSkKKyAqLworc3RhdGljIGludCBleG9mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsCisJCQkgIGludCBmbGFncywgY29uc3QgY2hhciAqZGV2X25hbWUsCisJCQkgIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXN0cnVjdCBleG9mc19tb3VudG9wdCBvcHRzOworCWludCByZXQ7CisKKwlyZXQgPSBwYXJzZV9vcHRpb25zKGRhdGEsICZvcHRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJb3B0cy5kZXZfbmFtZSA9IGRldl9uYW1lOworCXJldHVybiBnZXRfc2Jfbm9kZXYodHlwZSwgZmxhZ3MsICZvcHRzLCBleG9mc19maWxsX3N1cGVyLCBtbnQpOworfQorCisvKgorICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIHN5c3RlbSBzdGF0ZSBpbiB0aGUgYnVmZmVyLiAgVGhpcyBpcyB1c2VkCisgKiBieSB0aGUgJ2RmJyBjb21tYW5kLCBmb3IgZXhhbXBsZS4KKyAqLworc3RhdGljIGludCBleG9mc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3NiaS0+c19waWQsIDB9OworCXN0cnVjdCBvc2RfYXR0ciBhdHRyc1tdID0geworCQlBVFRSX0RFRihPU0RfQVBBR0VfUEFSVElUSU9OX1FVT1RBUywKKwkJCU9TRF9BVFRSX1BRX0NBUEFDSVRZX1FVT1RBLCBzaXplb2YoX19iZTY0KSksCisJCUFUVFJfREVGKE9TRF9BUEFHRV9QQVJUSVRJT05fSU5GT1JNQVRJT04sCisJCQlPU0RfQVRUUl9QSV9VU0VEX0NBUEFDSVRZLCBzaXplb2YoX19iZTY0KSksCisJfTsKKwl1aW50NjRfdCBjYXBhY2l0eSA9IFVMTE9OR19NQVg7CisJdWludDY0X3QgdXNlZCA9IFVMTE9OR19NQVg7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwl1aW50OF90IGNyZWRfYVtPU0RfQ0FQX0xFTl07CisJaW50IHJldDsKKworCS8qIGdldCB1c2VkL2NhcGFjaXR5IGF0dHJpYnV0ZXMgKi8KKwlleG9mc19tYWtlX2NyZWRlbnRpYWwoY3JlZF9hLCAmb2JqKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfREJHTVNHKCJleG9mc19zdGF0ZnM6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKG9yLCAmb2JqKTsKKwlvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KG9yLCBhdHRycywgQVJSQVlfU0laRShhdHRycykpOworCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBjcmVkX2EpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShvciwgJmF0dHJzWzBdKTsKKwlpZiAobGlrZWx5KCFyZXQpKQorCQljYXBhY2l0eSA9IGdldF91bmFsaWduZWRfYmU2NChhdHRyc1swXS52YWxfcHRyKTsKKwllbHNlCisJCUVYT0ZTX0RCR01TRygiZXhvZnNfc3RhdGZzOiBnZXQgY2FwYWNpdHkgZmFpbGVkLlxuIik7CisKKwlyZXQgPSBleHRyYWN0X2F0dHJfZnJvbV9yZXEob3IsICZhdHRyc1sxXSk7CisJaWYgKGxpa2VseSghcmV0KSkKKwkJdXNlZCA9IGdldF91bmFsaWduZWRfYmU2NChhdHRyc1sxXS52YWxfcHRyKTsKKwllbHNlCisJCUVYT0ZTX0RCR01TRygiZXhvZnNfc3RhdGZzOiBnZXQgdXNlZC1zcGFjZSBmYWlsZWQuXG4iKTsKKworCS8qIGZpbGwgaW4gdGhlIHN0YXRzIGJ1ZmZlciAqLworCWJ1Zi0+Zl90eXBlID0gRVhPRlNfU1VQRVJfTUFHSUM7CisJYnVmLT5mX2JzaXplID0gRVhPRlNfQkxLU0laRTsKKwlidWYtPmZfYmxvY2tzID0gKGNhcGFjaXR5ID4+IEVYT0ZTX0JMS1NISUZUKTsKKwlidWYtPmZfYmZyZWUgPSAoKGNhcGFjaXR5IC0gdXNlZCkgPj4gRVhPRlNfQkxLU0hJRlQpOworCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWU7CisJYnVmLT5mX2ZpbGVzID0gc2JpLT5zX251bWZpbGVzOworCWJ1Zi0+Zl9mZnJlZSA9IEVYT0ZTX01BWF9JRCAtIHNiaS0+c19udW1maWxlczsKKwlidWYtPmZfbmFtZWxlbiA9IEVYT0ZTX05BTUVfTEVOOworCitvdXQ6CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZXhvZnNfc29wcyA9IHsKKwkuYWxsb2NfaW5vZGUgICAgPSBleG9mc19hbGxvY19pbm9kZSwKKwkuZGVzdHJveV9pbm9kZSAgPSBleG9mc19kZXN0cm95X2lub2RlLAorCS53cml0ZV9pbm9kZSAgICA9IGV4b2ZzX3dyaXRlX2lub2RlLAorCS5kZWxldGVfaW5vZGUgICA9IGV4b2ZzX2RlbGV0ZV9pbm9kZSwKKwkucHV0X3N1cGVyICAgICAgPSBleG9mc19wdXRfc3VwZXIsCisJLndyaXRlX3N1cGVyICAgID0gZXhvZnNfd3JpdGVfc3VwZXIsCisJLnN0YXRmcyAgICAgICAgID0gZXhvZnNfc3RhdGZzLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRVhQT1JUIE9QRVJBVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGRlbnRyeSAqZXhvZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlubyA9IGV4b2ZzX3BhcmVudF9pbm8oY2hpbGQpOworCisJaWYgKCFpbm8pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGRfb2J0YWluX2FsaWFzKGV4b2ZzX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICpleG9mc19uZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXU2NCBpbm8sIHUzMiBnZW5lcmF0aW9uKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGV4b2ZzX2lnZXQoc2IsIGlubyk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CisJaWYgKGdlbmVyYXRpb24gJiYgaW5vZGUtPmlfZ2VuZXJhdGlvbiAhPSBnZW5lcmF0aW9uKSB7CisJCS8qIHdlIGRpZG4ndCBmaW5kIHRoZSByaWdodCBpbm9kZS4uICovCisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwl9CisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZXhvZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJc3RydWN0IGZpZCAqZmlkLCBpbnQgZmhfbGVuLCBpbnQgZmhfdHlwZSkKK3sKKwlyZXR1cm4gZ2VuZXJpY19maF90b19kZW50cnkoc2IsIGZpZCwgZmhfbGVuLCBmaF90eXBlLAorCQkJCSAgICBleG9mc19uZnNfZ2V0X2lub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4b2ZzX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBmaWQgKmZpZCwgaW50IGZoX2xlbiwgaW50IGZoX3R5cGUpCit7CisJcmV0dXJuIGdlbmVyaWNfZmhfdG9fcGFyZW50KHNiLCBmaWQsIGZoX2xlbiwgZmhfdHlwZSwKKwkJCQkgICAgZXhvZnNfbmZzX2dldF9pbm9kZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXhvZnNfZXhwb3J0X29wcyA9IHsKKwkuZmhfdG9fZGVudHJ5ID0gZXhvZnNfZmhfdG9fZGVudHJ5LAorCS5maF90b19wYXJlbnQgPSBleG9mc19maF90b19wYXJlbnQsCisJLmdldF9wYXJlbnQgPSBleG9mc19nZXRfcGFyZW50LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSU5TTU9EL1JNTU9ECisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzdHJ1Y3QgdGhhdCBkZXNjcmliZXMgdGhpcyBmaWxlIHN5c3RlbQorICovCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXhvZnNfdHlwZSA9IHsKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkubmFtZSAgICAgICAgICAgPSAiZXhvZnMiLAorCS5nZXRfc2IgICAgICAgICA9IGV4b2ZzX2dldF9zYiwKKwkua2lsbF9zYiAgICAgICAgPSBnZW5lcmljX3NodXRkb3duX3N1cGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9leG9mcyh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBpbml0X2lub2RlY2FjaGUoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmV4b2ZzX3R5cGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2Q7CisKKwlyZXR1cm4gMDsKK291dF9kOgorCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2V4b2ZzKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZleG9mc190eXBlKTsKKwlkZXN0cm95X2lub2RlY2FjaGUoKTsKK30KKworTU9EVUxFX0FVVEhPUigiQXZpc2hheSBUcmFlZ2VyIDxhdmlzaGF5QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiZXhvZnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoaW5pdF9leG9mcykKK21vZHVsZV9leGl0KGV4aXRfZXhvZnMpCmRpZmYgLS1naXQgYS9mcy9leG9mcy9zeW1saW5rLmMgYi9mcy9leG9mcy9zeW1saW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlMmQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL3N5bWxpbmsuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKworI2luY2x1ZGUgImV4b2ZzLmgiCisKK3N0YXRpYyB2b2lkICpleG9mc19mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShkZW50cnktPmRfaW5vZGUpOworCisJbmRfc2V0X2xpbmsobmQsIChjaGFyICopb2ktPmlfZGF0YSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAorCS5mb2xsb3dfbGluawk9IHBhZ2VfZm9sbG93X2xpbmtfbGlnaHQsCisJLnB1dF9saW5rCT0gcGFnZV9wdXRfbGluaywKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0geworCS5yZWFkbGluawk9IGdlbmVyaWNfcmVhZGxpbmssCisJLmZvbGxvd19saW5rCT0gZXhvZnNfZm9sbG93X2xpbmssCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9hY2wuYyBiL2ZzL2V4dDIvYWNsLmMKaW5kZXggYWU4YzRmOC4uZDQ2ZTM4YyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9hY2wuYworKysgYi9mcy9leHQyL2FjbC5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCQl9CiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkgJiYgYWNsKSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvYWNsLmMgYi9mcy9leHQzL2FjbC5jCmluZGV4IGI2MGJiMjQuLmQ4MWVmMmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvYWNsLmMKKysrIGIvZnMvZXh0My9hY2wuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewogCQlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IDU4NTNmNDQuLjNkNzI0YTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtNDIsNyArNDIsNyBAQAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gZXh0M19yZWFkZGlyLAkJLyogd2UgdGFrZSBCS0wuIG5lZWRlZD8qLwotCS5pb2N0bAkJPSBleHQzX2lvY3RsLAkJLyogQktMIGhlbGQgKi8KKwkudW5sb2NrZWRfaW9jdGwJPSBleHQzX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsCT0gZXh0M19jb21wYXRfaW9jdGwsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZmlsZS5jIGIvZnMvZXh0My9maWxlLmMKaW5kZXggM2JlMWUwNi4uNWI0OTcwNCAxMDA2NDQKLS0tIGEvZnMvZXh0My9maWxlLmMKKysrIGIvZnMvZXh0My9maWxlLmMKQEAgLTMzLDYgKzMzLDEwIEBACiAgKi8KIHN0YXRpYyBpbnQgZXh0M19yZWxlYXNlX2ZpbGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7CisJaWYgKEVYVDNfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFKSB7CisJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7CisJCUVYVDNfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0U7CisJfQogCS8qIGlmIHdlIGFyZSB0aGUgbGFzdCB3cml0ZXIgb24gdGhlIGlub2RlLCBkcm9wIHRoZSBibG9jayByZXNlcnZhdGlvbiAqLwogCWlmICgoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCiAJCQkoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID09IDEpKQpAQCAtMTEyLDcgKzExNiw3IEBACiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUJPSBleHQzX2ZpbGVfd3JpdGUsCi0JLmlvY3RsCQk9IGV4dDNfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gZXh0M19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDNfY29tcGF0X2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggNGEwOWZmMS4uNDY2YTMzMiAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTE0OSwxMiArMTE0OSwxNSBAQAogCQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7Ci0JaW50IHJldCwgbmVlZGVkX2Jsb2NrcyA9IGV4dDNfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSk7CisJaW50IHJldDsKIAloYW5kbGVfdCAqaGFuZGxlOwogCWludCByZXRyaWVzID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlwZ29mZl90IGluZGV4OwogCXVuc2lnbmVkIGZyb20sIHRvOworCS8qIFJlc2VydmUgb25lIGJsb2NrIG1vcmUgZm9yIGFkZGl0aW9uIHRvIG9ycGhhbiBsaXN0IGluIGNhc2UKKwkgKiB3ZSBhbGxvY2F0ZSBibG9ja3MgYnV0IHdyaXRlIGZhaWxzIGZvciBzb21lIHJlYXNvbiAqLworCWludCBuZWVkZWRfYmxvY2tzID0gZXh0M193cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKGlub2RlKSArIDE7CiAKIAlpbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0xMTg0LDE1ICsxMTg3LDIwIEBACiAJfQogd3JpdGVfYmVnaW5fZmFpbGVkOgogCWlmIChyZXQpIHsKLQkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJLyoKIAkJICogYmxvY2tfd3JpdGVfYmVnaW4gbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3IGJsb2NrcwogCQkgKiBvdXRzaWRlIGlfc2l6ZS4gIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLiBEb24ndCBuZWVkCiAJCSAqIGlfc2l6ZV9yZWFkIGJlY2F1c2Ugd2UgaG9sZCBpX211dGV4LgorCQkgKgorCQkgKiBBZGQgaW5vZGUgdG8gb3JwaGFuIGxpc3QgaW4gY2FzZSB3ZSBjcmFzaCBiZWZvcmUgdHJ1bmNhdGUKKwkJICogZmluaXNoZXMuCiAJCSAqLwogCQlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJCWV4dDNfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTsKKwkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCiAJCQl2bXRydW5jYXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIAl9CiAJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCkBAIC0xMjExLDYgKzEyMTksMTggQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBGb3Igb3JkZXJlZCB3cml0ZXBhZ2UgYW5kIHdyaXRlX2VuZCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgam91cm5hbF9kaXJ0eV9kYXRhX2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJLyoKKwkgKiBXcml0ZSBjb3VsZCBoYXZlIG1hcHBlZCB0aGUgYnVmZmVyIGJ1dCBpdCBkaWRuJ3QgY29weSB0aGUgZGF0YSBpbgorCSAqIHlldC4gU28gYXZvaWQgZmlsaW5nIHN1Y2ggYnVmZmVyIGludG8gYSB0cmFuc2FjdGlvbi4KKwkgKi8KKwlpZiAoYnVmZmVyX21hcHBlZChiaCkgJiYgYnVmZmVyX3VwdG9kYXRlKGJoKSkKKwkJcmV0dXJuIGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZSwgYmgpOworCXJldHVybiAwOworfQorCiAvKiBGb3Igd3JpdGVfZW5kKCkgaW4gZGF0YT1qb3VybmFsIG1vZGUgKi8KIHN0YXRpYyBpbnQgd3JpdGVfZW5kX2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CkBAIC0xMjIxLDI2ICsxMjQxLDIwIEBACiB9CiAKIC8qCi0gKiBHZW5lcmljIHdyaXRlX2VuZCBoYW5kbGVyIGZvciBvcmRlcmVkIGFuZCB3cml0ZWJhY2sgZXh0MyBqb3VybmFsIG1vZGVzLgotICogV2UgY2FuJ3QgdXNlIGdlbmVyaWNfd3JpdGVfZW5kLCBiZWNhdXNlIHRoYXQgdW5sb2NrcyB0aGUgcGFnZSBhbmQgd2UgbmVlZCB0bwotICogdW5sb2NrIHRoZSBwYWdlIGFmdGVyIGV4dDNfam91cm5hbF9zdG9wLCBidXQgZXh0M19qb3VybmFsX3N0b3AgbXVzdCBydW4KLSAqIGFmdGVyIGJsb2NrX3dyaXRlX2VuZC4KKyAqIFRoaXMgaXMgbmFzdHkgYW5kIHN1YnRsZTogZXh0M193cml0ZV9iZWdpbigpIGNvdWxkIGhhdmUgYWxsb2NhdGVkIGJsb2NrcworICogZm9yIHRoZSB3aG9sZSBwYWdlIGJ1dCBsYXRlciB3ZSBmYWlsZWQgdG8gY29weSB0aGUgZGF0YSBpbi4gVXBkYXRlIGlub2RlCisgKiBzaXplIGFjY29yZGluZyB0byB3aGF0IHdlIG1hbmFnZWQgdG8gY29weS4gVGhlIHJlc3QgaXMgZ29pbmcgdG8gYmUKKyAqIHRydW5jYXRlZCBpbiB3cml0ZV9lbmQgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyBpbnQgZXh0M19nZW5lcmljX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGNvcGllZCwKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQorc3RhdGljIHZvaWQgdXBkYXRlX2ZpbGVfc2l6ZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgdW5zaWduZWQgY29waWVkKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0KLQljb3BpZWQgPSBibG9ja193cml0ZV9lbmQoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGNvcGllZCwgcGFnZSwgZnNkYXRhKTsKLQotCWlmIChwb3MrY29waWVkID4gaW5vZGUtPmlfc2l6ZSkgewotCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcytjb3BpZWQpOworCS8qIFdoYXQgbWF0dGVycyB0byB1cyBpcyBpX2Rpc2tzaXplLiBXZSBkb24ndCB3cml0ZSBpX3NpemUgYW55d2hlcmUgKi8KKwlpZiAocG9zICsgY29waWVkID4gaW5vZGUtPmlfc2l6ZSkKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3BpZWQpOworCWlmIChwb3MgKyBjb3BpZWQgPiBFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplKSB7CisJCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBwb3MgKyBjb3BpZWQ7CiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCX0KLQotCXJldHVybiBjb3BpZWQ7CiB9CiAKIC8qCkBAIC0xMjYwLDM1ICsxMjc0LDI5IEBACiAJdW5zaWduZWQgZnJvbSwgdG87CiAJaW50IHJldCA9IDAsIHJldDI7CiAKKwljb3BpZWQgPSBibG9ja193cml0ZV9lbmQoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGNvcGllZCwgcGFnZSwgZnNkYXRhKTsKKwogCWZyb20gPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0JdG8gPSBmcm9tICsgbGVuOwotCisJdG8gPSBmcm9tICsgY29waWVkOwogCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLAotCQlmcm9tLCB0bywgTlVMTCwgZXh0M19qb3VybmFsX2RpcnR5X2RhdGEpOworCQlmcm9tLCB0bywgTlVMTCwgam91cm5hbF9kaXJ0eV9kYXRhX2ZuKTsKIAotCWlmIChyZXQgPT0gMCkgewotCQkvKgotCQkgKiBnZW5lcmljX3dyaXRlX2VuZCgpIHdpbGwgcnVuIG1hcmtfaW5vZGVfZGlydHkoKSBpZiBpX3NpemUKLQkJICogY2hhbmdlcy4gIFNvIGxldCdzIHBpZ2d5YmFjayB0aGUgaV9kaXNrc2l6ZSBtYXJrX2lub2RlX2RpcnR5Ci0JCSAqIGludG8gdGhhdC4KLQkJICovCi0JCWxvZmZfdCBuZXdfaV9zaXplOwotCi0JCW5ld19pX3NpemUgPSBwb3MgKyBjb3BpZWQ7Ci0JCWlmIChuZXdfaV9zaXplID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkKLQkJCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBuZXdfaV9zaXplOwotCQlyZXQyID0gZXh0M19nZW5lcmljX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgY29waWVkLAotCQkJCQkJCXBhZ2UsIGZzZGF0YSk7Ci0JCWNvcGllZCA9IHJldDI7Ci0JCWlmIChyZXQyIDwgMCkKLQkJCXJldCA9IHJldDI7Ci0JfQorCWlmIChyZXQgPT0gMCkKKwkJdXBkYXRlX2ZpbGVfc2l6ZXMoaW5vZGUsIHBvcywgY29waWVkKTsKKwkvKgorCSAqIFRoZXJlIG1heSBiZSBhbGxvY2F0ZWQgYmxvY2tzIG91dHNpZGUgb2YgaV9zaXplIGJlY2F1c2UKKwkgKiB3ZSBmYWlsZWQgdG8gY29weSBzb21lIGRhdGEuIFByZXBhcmUgZm9yIHRydW5jYXRlLgorCSAqLworCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiAJcmV0MiA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IHJldDI7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKQEAgLTEyOTksMjUgKzEzMDcsMjIgQEAKIHsKIAloYW5kbGVfdCAqaGFuZGxlID0gZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQlsb2ZmX3QgbmV3X2lfc2l6ZTsKKwlpbnQgcmV0OwogCi0JbmV3X2lfc2l6ZSA9IHBvcyArIGNvcGllZDsKLQlpZiAobmV3X2lfc2l6ZSA+IEVYVDNfSShpbm9kZSktPmlfZGlza3NpemUpCi0JCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBuZXdfaV9zaXplOwotCi0JcmV0MiA9IGV4dDNfZ2VuZXJpY193cml0ZV9lbmQoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGNvcGllZCwKLQkJCQkJCQlwYWdlLCBmc2RhdGEpOwotCWNvcGllZCA9IHJldDI7Ci0JaWYgKHJldDIgPCAwKQotCQlyZXQgPSByZXQyOwotCi0JcmV0MiA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IHJldDI7CisJY29waWVkID0gYmxvY2tfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsIHBhZ2UsIGZzZGF0YSk7CisJdXBkYXRlX2ZpbGVfc2l6ZXMoaW5vZGUsIHBvcywgY29waWVkKTsKKwkvKgorCSAqIFRoZXJlIG1heSBiZSBhbGxvY2F0ZWQgYmxvY2tzIG91dHNpZGUgb2YgaV9zaXplIGJlY2F1c2UKKwkgKiB3ZSBmYWlsZWQgdG8gY29weSBzb21lIGRhdGEuIFByZXBhcmUgZm9yIHRydW5jYXRlLgorCSAqLworCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CisJcmV0ID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAKKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKIH0KIApAQCAtMTMzOCwxNSArMTM0MywyMyBAQAogCWlmIChjb3BpZWQgPCBsZW4pIHsKIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCiAJCQljb3BpZWQgPSAwOwotCQlwYWdlX3plcm9fbmV3X2J1ZmZlcnMocGFnZSwgZnJvbStjb3BpZWQsIHRvKTsKKwkJcGFnZV96ZXJvX25ld19idWZmZXJzKHBhZ2UsIGZyb20gKyBjb3BpZWQsIHRvKTsKKwkJdG8gPSBmcm9tICsgY29waWVkOwogCX0KIAogCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLCBmcm9tLAogCQkJCXRvLCAmcGFydGlhbCwgd3JpdGVfZW5kX2ZuKTsKIAlpZiAoIXBhcnRpYWwpCiAJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQlpZiAocG9zK2NvcGllZCA+IGlub2RlLT5pX3NpemUpCi0JCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zK2NvcGllZCk7CisKKwlpZiAocG9zICsgY29waWVkID4gaW5vZGUtPmlfc2l6ZSkKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3BpZWQpOworCS8qCisJICogVGhlcmUgbWF5IGJlIGFsbG9jYXRlZCBibG9ja3Mgb3V0c2lkZSBvZiBpX3NpemUgYmVjYXVzZQorCSAqIHdlIGZhaWxlZCB0byBjb3B5IHNvbWUgZGF0YS4gUHJlcGFyZSBmb3IgdHJ1bmNhdGUuCisJICovCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCWV4dDNfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTsKIAlFWFQzX0koaW5vZGUpLT5pX3N0YXRlIHw9IEVYVDNfU1RBVEVfSkRBVEE7CiAJaWYgKGlub2RlLT5pX3NpemUgPiBFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplKSB7CiAJCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOwpAQCAtMTM2MSw2ICsxMzc0LDggQEAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAKKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKIH0KIApAQCAtMTQyOCwxNyArMTQ0MywxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGpvdXJuYWxfZGlydHlfZGF0YV9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQotewotCWlmIChidWZmZXJfbWFwcGVkKGJoKSkKLQkJcmV0dXJuIGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZSwgYmgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGJ1ZmZlcl91bm1hcHBlZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCXJldHVybiAhYnVmZmVyX21hcHBlZChiaCk7CiB9CisKIC8qCiAgKiBOb3RlIHRoYXQgd2UgYWx3YXlzIHN0YXJ0IGEgdHJhbnNhY3Rpb24gZXZlbiBpZiB3ZSdyZSBub3Qgam91cm5hbGxpbmcKICAqIGRhdGEuICBUaGlzIGlzIHRvIHByZXNlcnZlIG9yZGVyaW5nOiBhbnkgaG9sZSBpbnN0YW50aWF0aW9uIHdpdGhpbgpAQCAtMjM1NCw2ICsyMzYzLDkgQEAKIAlpZiAoIWV4dDNfY2FuX3RydW5jYXRlKGlub2RlKSkKIAkJcmV0dXJuOwogCisJaWYgKGlub2RlLT5pX3NpemUgPT0gMCAmJiBleHQzX3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCisJCWVpLT5pX3N0YXRlIHw9IEVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0U7CisKIAkvKgogCSAqIFdlIGhhdmUgdG8gbG9jayB0aGUgRU9GIHBhZ2UgaGVyZSwgYmVjYXVzZSBsb2NrX3BhZ2UoKSBuZXN0cwogCSAqIG91dHNpZGUgam91cm5hbF9zdGFydCgpLgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IDVlODZjZTkuLjg4OTc0ODEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTE1LDEyICsxNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotaW50IGV4dDNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsIHVuc2lnbmVkIGludCBjbWQsCi0JCXVuc2lnbmVkIGxvbmcgYXJnKQorbG9uZyBleHQzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGV4dDNfaW5vZGVfaW5mbyAqZWkgPSBFWFQzX0koaW5vZGUpOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCByc3Zfd2luZG93X3NpemU7CkBAIC0zOSwyOSArMzgsMjUgQEAKIAkJdW5zaWduZWQgaW50IG9sZGZsYWdzOwogCQl1bnNpZ25lZCBpbnQgamZsYWc7CiAKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkgewotCQkJZXJyID0gLUVBQ0NFUzsKLQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQl9Ci0KLQkJaWYgKGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpKSB7Ci0JCQllcnIgPSAtRUZBVUxUOwotCQkJZ290byBmbGFnc19vdXQ7Ci0JCX0KLQogCQlmbGFncyA9IGV4dDNfbWFza19mbGFncyhpbm9kZS0+aV9tb2RlLCBmbGFncyk7CiAKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCiAJCS8qIElzIGl0IHF1b3RhIGZpbGU/IERvIG5vdCBhbGxvdyB1c2VyIHRvIG1lc3Mgd2l0aCBpdCAqLwotCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJZXJyID0gLUVQRVJNOworCQllcnIgPSAtRVBFUk07CisJCWlmIChJU19OT1FVT1RBKGlub2RlKSkKIAkJCWdvdG8gZmxhZ3Nfb3V0OwotCQl9CisKIAkJb2xkZmxhZ3MgPSBlaS0+aV9mbGFnczsKIAogCQkvKiBUaGUgSk9VUk5BTF9EQVRBIGZsYWcgaXMgbW9kaWZpYWJsZSBvbmx5IGJ5IHJvb3QgKi8KQEAgLTc0LDExICs2OSw4IEBACiAJCSAqIFRoaXMgdGVzdCBsb29rcyBuaWNlci4gVGhhbmtzIHRvIFBhdWxpbmUgTWlkZGVsaW5rCiAJCSAqLwogCQlpZiAoKGZsYWdzIF4gb2xkZmxhZ3MpICYgKEVYVDNfQVBQRU5EX0ZMIHwgRVhUM19JTU1VVEFCTEVfRkwpKSB7Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpIHsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQllcnIgPSAtRVBFUk07CisJCQlpZiAoIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpCiAJCQkJZ290byBmbGFnc19vdXQ7Ci0JCQl9CiAJCX0KIAogCQkvKgpAQCAtODYsMTcgKzc4LDEyIEBACiAJCSAqIHRoZSByZWxldmFudCBjYXBhYmlsaXR5LgogCQkgKi8KIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpIHsKLQkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkgewotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCWVyciA9IC1FUEVSTTsKKwkJCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKIAkJCQlnb3RvIGZsYWdzX291dDsKLQkJCX0KIAkJfQogCi0KIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJCWVyciA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gZmxhZ3Nfb3V0OwogCQl9CkBAIC0xMTYsMTUgKzEwMywxMyBAQAogCQllcnIgPSBleHQzX21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CiBmbGFnc19lcnI6CiAJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCWlmIChlcnIpIHsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoZXJyKQorCQkJZ290byBmbGFnc19vdXQ7CiAKIAkJaWYgKChqZmxhZyBeIG9sZGZsYWdzKSAmIChFWFQzX0pPVVJOQUxfREFUQV9GTCkpCiAJCQllcnIgPSBleHQzX2NoYW5nZV9pbm9kZV9qb3VybmFsX2ZsYWcoaW5vZGUsIGpmbGFnKTsKLQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiBmbGFnc19vdXQ6CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNDAsNiArMTI1LDcgQEAKIAogCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOworCiAJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTE0Nyw2ICsxMzMsNyBAQAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gc2V0dmVyc2lvbl9vdXQ7CiAJCX0KKwogCQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIDEpOwogCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaGFuZGxlKTsKQEAgLTI5OSw5ICsyODYsNiBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIGxvbmcgZXh0M19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWludCByZXQ7Ci0KIAkvKiBUaGVzZSBhcmUganVzdCBtaXNuYW1lZCwgdGhleSBhY3R1YWxseSBnZXQvcHV0IGZyb20vdG8gdXNlciBhbiBpbnQgKi8KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRVhUM19JT0MzMl9HRVRGTEFHUzoKQEAgLTM0MSw5ICszMjUsNiBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZXh0M19pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXh0M19pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKSBjb21wYXRfcHRyKGFyZykpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggZTJmYzYzYy4uNmZmN2I5NyAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMTYxLDEyICsxNjEsMTIgQEAKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKIAkJCQkgaW50ICplcnIpOwogc3RhdGljIHZvaWQgZHhfcmVsZWFzZSAoc3RydWN0IGR4X2ZyYW1lICpmcmFtZXMpOwotc3RhdGljIGludCBkeF9tYWtlX21hcCAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCBpbnQgc2l6ZSwKK3N0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCB1bnNpZ25lZCBibG9ja3NpemUsCiAJCQlzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbywgc3RydWN0IGR4X21hcF9lbnRyeSBtYXBbXSk7CiBzdGF0aWMgdm9pZCBkeF9zb3J0X21hcChzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXAsIHVuc2lnbmVkIGNvdW50KTsKIHN0YXRpYyBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZHhfbW92ZV9kaXJlbnRzIChjaGFyICpmcm9tLCBjaGFyICp0bywKIAkJc3RydWN0IGR4X21hcF9lbnRyeSAqb2Zmc2V0cywgaW50IGNvdW50KTsKLXN0YXRpYyBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiogZHhfcGFja19kaXJlbnRzIChjaGFyICpiYXNlLCBpbnQgc2l6ZSk7CitzdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmR4X3BhY2tfZGlyZW50cyhjaGFyICpiYXNlLCB1bnNpZ25lZCBibG9ja3NpemUpOwogc3RhdGljIHZvaWQgZHhfaW5zZXJ0X2Jsb2NrIChzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lLCB1MzIgaGFzaCwgdTMyIGJsb2NrKTsKIHN0YXRpYyBpbnQgZXh0M19odHJlZV9uZXh0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqZGlyLCBfX3UzMiBoYXNoLAogCQkJCSBzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lLApAQCAtNzA4LDE0ICs3MDgsMTQgQEAKICAqIENyZWF0ZSBtYXAgb2YgaGFzaCB2YWx1ZXMsIG9mZnNldHMsIGFuZCBzaXplcywgc3RvcmVkIGF0IGVuZCBvZiBibG9jay4KICAqIFJldHVybnMgbnVtYmVyIG9mIGVudHJpZXMgbWFwcGVkLgogICovCi1zdGF0aWMgaW50IGR4X21ha2VfbWFwIChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGUsIGludCBzaXplLAotCQkJc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sIHN0cnVjdCBkeF9tYXBfZW50cnkgKm1hcF90YWlsKQorc3RhdGljIGludCBkeF9tYWtlX21hcChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGUsIHVuc2lnbmVkIGJsb2Nrc2l6ZSwKKwkJc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sIHN0cnVjdCBkeF9tYXBfZW50cnkgKm1hcF90YWlsKQogewogCWludCBjb3VudCA9IDA7CiAJY2hhciAqYmFzZSA9IChjaGFyICopIGRlOwogCXN0cnVjdCBkeF9oYXNoX2luZm8gaCA9ICpoaW5mbzsKIAotCXdoaWxlICgoY2hhciAqKSBkZSA8IGJhc2UgKyBzaXplKQorCXdoaWxlICgoY2hhciAqKSBkZSA8IGJhc2UgKyBibG9ja3NpemUpCiAJewogCQlpZiAoZGUtPm5hbWVfbGVuICYmIGRlLT5pbm9kZSkgewogCQkJZXh0M2ZzX2Rpcmhhc2goZGUtPm5hbWUsIGRlLT5uYW1lX2xlbiwgJmgpOwpAQCAtMTA0Nyw4ICsxMDQ3LDE2IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAkJfQogCQlpbm9kZSA9IGV4dDNfaWdldChkaXItPmlfc2IsIGlubyk7Ci0JCWlmIChJU19FUlIoaW5vZGUpKQotCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUihpbm9kZSkpKSB7CisJCQlpZiAoUFRSX0VSUihpbm9kZSkgPT0gLUVTVEFMRSkgeworCQkJCWV4dDNfZXJyb3IoZGlyLT5pX3NiLCBfX2Z1bmNfXywKKwkJCQkJCSJkZWxldGVkIGlub2RlIHJlZmVyZW5jZWQ6ICVsdSIsCisJCQkJCQlpbm8pOworCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCQkJfQorCQl9CiAJfQogCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKIH0KQEAgLTExMjAsMTMgKzExMjgsMTQgQEAKICAqIENvbXBhY3QgZWFjaCBkaXIgZW50cnkgaW4gdGhlIHJhbmdlIHRvIHRoZSBtaW5pbWFsIHJlY19sZW4uCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSBpbiByYW5nZS4KICAqLwotc3RhdGljIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yKiBkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgaW50IHNpemUpCitzdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmR4X3BhY2tfZGlyZW50cyhjaGFyICpiYXNlLCB1bnNpZ25lZCBibG9ja3NpemUpCiB7Ci0Jc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKm5leHQsICp0bywgKnByZXYsICpkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKSBiYXNlOworCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpuZXh0LCAqdG8sICpwcmV2OworCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKWJhc2U7CiAJdW5zaWduZWQgcmVjX2xlbiA9IDA7CiAKIAlwcmV2ID0gdG8gPSBkZTsKLQl3aGlsZSAoKGNoYXIqKWRlIDwgYmFzZSArIHNpemUpIHsKKwl3aGlsZSAoKGNoYXIgKilkZSA8IGJhc2UgKyBibG9ja3NpemUpIHsKIAkJbmV4dCA9IGV4dDNfbmV4dF9lbnRyeShkZSk7CiAJCWlmIChkZS0+aW5vZGUgJiYgZGUtPm5hbWVfbGVuKSB7CiAJCQlyZWNfbGVuID0gRVhUM19ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwpAQCAtMjI2NSw3ICsyMjc0LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKiBvbGRfaW5vZGUsICogbmV3X2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqIG9sZF9iaCwgKiBuZXdfYmgsICogZGlyX2JoOwogCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICogb2xkX2RlLCAqIG5ld19kZTsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwsIGZsdXNoX2ZpbGUgPSAwOwogCiAJb2xkX2JoID0gbmV3X2JoID0gZGlyX2JoID0gTlVMTDsKIApAQCAtMjQwMSw2ICsyNDEwLDggQEAKIAkJZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgbmV3X2lub2RlKTsKIAkJaWYgKCFuZXdfaW5vZGUtPmlfbmxpbmspCiAJCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBuZXdfaW5vZGUpOworCQlpZiAoZXh0M19zaG91bGRfd3JpdGViYWNrX2RhdGEobmV3X2lub2RlKSkKKwkJCWZsdXNoX2ZpbGUgPSAxOwogCX0KIAlyZXR2YWwgPSAwOwogCkBAIC0yNDA5LDYgKzI0MjAsOCBAQAogCWJyZWxzZSAob2xkX2JoKTsKIAlicmVsc2UgKG5ld19iaCk7CiAJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwlpZiAocmV0dmFsID09IDAgJiYgZmx1c2hfZmlsZSkKKwkJZmlsZW1hcF9mbHVzaChvbGRfaW5vZGUtPmlfbWFwcGluZyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9hY2wuYyBiL2ZzL2V4dDQvYWNsLmMKaW5kZXggNjk0ZWQ2Zi4uNjQ3ZTBkNiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9hY2wuYworKysgYi9mcy9leHQ0L2FjbC5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCQl9CiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIFBPU0lYX0FDTCkgJiYgYWNsKSB7CiAJCXN0cnVjdCBwb3NpeF9hY2wgKmNsb25lOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggMzhmNDBkNS4uNTNjNzJhZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC01NSw3ICs1NSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9ncm91cF91c2VkX21ldGFfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkJZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwKQorCQkJCSAgICAgICBleHQ0X2dyb3VwX3QgYmxvY2tfZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcCkKIHsKIAlleHQ0X2ZzYmxrX3QgdG1wOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwpAQCAtNjMsMTAgKzY0LDYgQEAKIAlpbnQgdXNlZF9ibG9ja3MgPSBzYmktPnNfaXRiX3Blcl9ncm91cCArIDI7CiAKIAlpZiAoRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcpKSB7Ci0JCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQotCQlnZHAgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBibG9ja19ncm91cCwgJmJoKTsKIAkJaWYgKCFleHQ0X2Jsb2NrX2luX2dyb3VwKHNiLCBleHQ0X2Jsb2NrX2JpdG1hcChzYiwgZ2RwKSwKIAkJCQkJYmxvY2tfZ3JvdXApKQogCQkJdXNlZF9ibG9ja3MtLTsKQEAgLTE3Nyw3ICsxNzQsNyBAQAogCQkgKi8KIAkJbWFya19iaXRtYXBfZW5kKGdyb3VwX2Jsb2Nrcywgc2ItPnNfYmxvY2tzaXplICogOCwgYmgtPmJfZGF0YSk7CiAJfQotCXJldHVybiBmcmVlX2Jsb2NrcyAtIGV4dDRfZ3JvdXBfdXNlZF9tZXRhX2Jsb2NrcyhzYiwgYmxvY2tfZ3JvdXApOworCXJldHVybiBmcmVlX2Jsb2NrcyAtIGV4dDRfZ3JvdXBfdXNlZF9tZXRhX2Jsb2NrcyhzYiwgYmxvY2tfZ3JvdXAsIGdkcCk7CiB9CiAKIApAQCAtNDczLDkgKzQ3MCw4IEBACiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBibG9ja19ncm91cCk7Ci0JCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfYmxvY2tzICs9IGJsb2Nrc19mcmVlZDsKLQkJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7CisJCWF0b21pY19hZGQoYmxvY2tzX2ZyZWVkLAorCQkJICAgJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2Nrcyk7CiAJfQogCS8qCiAJICogcmVxdWVzdCB0byByZWxvYWQgdGhlIGJ1ZGR5IHdpdGggdGhlCmRpZmYgLS1naXQgYS9mcy9leHQ0L2Rpci5jIGIvZnMvZXh0NC9kaXIuYwppbmRleCAyZGYyZTQwLi5iNjQ3ODk5IDEwMDY0NAotLS0gYS9mcy9leHQ0L2Rpci5jCisrKyBiL2ZzL2V4dDQvZGlyLmMKQEAgLTY3LDcgKzY3LDggQEAKIAkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCWNvbnN0IGNoYXIgKmVycm9yX21zZyA9IE5VTEw7Ci0JY29uc3QgaW50IHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwljb25zdCBpbnQgcmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCisJCQkJCQlkaXItPmlfc2ItPnNfYmxvY2tzaXplKTsKIAogCWlmIChybGVuIDwgRVhUNF9ESVJfUkVDX0xFTigxKSkKIAkJZXJyb3JfbXNnID0gInJlY19sZW4gaXMgc21hbGxlciB0aGFuIG1pbmltYWwiOwpAQCAtMTc4LDEwICsxNzksMTEgQEAKIAkJCQkgKiBsZWFzdCB0aGF0IGl0IGlzIG5vbi16ZXJvLiAgQQogCQkJCSAqIGZhaWx1cmUgd2lsbCBiZSBkZXRlY3RlZCBpbiB0aGUKIAkJCQkgKiBkaXJlbnQgdGVzdCBiZWxvdy4gKi8KLQkJCQlpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbikKLQkJCQkJCTwgRVhUNF9ESVJfUkVDX0xFTigxKSkKKwkJCQlpZiAoZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwKKwkJCQkJc2ItPnNfYmxvY2tzaXplKSA8IEVYVDRfRElSX1JFQ19MRU4oMSkpCiAJCQkJCWJyZWFrOwotCQkJCWkgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJCQkJaSArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLAorCQkJCQkJCSAgICBzYi0+c19ibG9ja3NpemUpOwogCQkJfQogCQkJb2Zmc2V0ID0gaTsKIAkJCWZpbHAtPmZfcG9zID0gKGZpbHAtPmZfcG9zICYgfihzYi0+c19ibG9ja3NpemUgLSAxKSkKQEAgLTIwMyw3ICsyMDUsOCBAQAogCQkJCXJldCA9IHN0b3JlZDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KLQkJCW9mZnNldCArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwkJCW9mZnNldCArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLAorCQkJCQlzYi0+c19ibG9ja3NpemUpOwogCQkJaWYgKGxlMzJfdG9fY3B1KGRlLT5pbm9kZSkpIHsKIAkJCQkvKiBXZSBtaWdodCBibG9jayBpbiB0aGUgbmV4dCBzZWN0aW9uCiAJCQkJICogaWYgdGhlIGRhdGEgZGVzdGluYXRpb24gaXMKQEAgLTIyNSw3ICsyMjgsOCBAQAogCQkJCQlnb3RvIHJldmFsaWRhdGU7CiAJCQkJc3RvcmVkKys7CiAJCQl9Ci0JCQlmaWxwLT5mX3BvcyArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwkJCWZpbHAtPmZfcG9zICs9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCisJCQkJCQlzYi0+c19ibG9ja3NpemUpOwogCQl9CiAJCW9mZnNldCA9IDA7CiAJCWJyZWxzZShiaCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDYwODNiYjM4Li5kMGYxNWVmIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAorKysgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzMsMTQgKzMzLDYgQEAKICN1bmRlZiBFWFQ0RlNfREVCVUcKIAogLyoKLSAqIERlZmluZSBFWFQ0X1JFU0VSVkFUSU9OIHRvIHJlc2VydmUgZGF0YSBibG9ja3MgZm9yIGV4cGFuZGluZyBmaWxlcwotICovCi0jZGVmaW5lIEVYVDRfREVGQVVMVF9SRVNFUlZFX0JMT0NLUwk4Ci0vKm1heCB3aW5kb3cgc2l6ZTogMTAyNChkaXJlY3QgYmxvY2tzKSArIDMoW3QsZF1pbmRpcmVjdCBibG9ja3MpICovCi0jZGVmaW5lIEVYVDRfTUFYX1JFU0VSVkVfQkxPQ0tTCQkxMDI3Ci0jZGVmaW5lIEVYVDRfUkVTRVJWRV9XSU5ET1dfTk9UX0FMTE9DQVRFRCAwCi0KLS8qCiAgKiBEZWJ1ZyBjb2RlCiAgKi8KICNpZmRlZiBFWFQ0RlNfREVCVUcKQEAgLTU0LDggKzQ2LDYgQEAKICNkZWZpbmUgZXh0NF9kZWJ1ZyhmLCBhLi4uKQlkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIEVYVDRfTVVMVElCTE9DS19BTExPQ0FUT1IJMQotCiAvKiBwcmVmZXIgZ29hbCBhZ2Fpbi4gbGVuZ3RoICovCiAjZGVmaW5lIEVYVDRfTUJfSElOVF9NRVJHRQkJMQogLyogYmxvY2tzIGFscmVhZHkgcmVzZXJ2ZWQgKi8KQEAgLTE4MCw4ICsxNzAsOSBAQAogICovCiAKIHN0cnVjdCBmbGV4X2dyb3VwcyB7Ci0JX191MzIgZnJlZV9pbm9kZXM7Ci0JX191MzIgZnJlZV9ibG9ja3M7CisJYXRvbWljX3QgZnJlZV9pbm9kZXM7CisJYXRvbWljX3QgZnJlZV9ibG9ja3M7CisJYXRvbWljX3QgdXNlZF9kaXJzOwogfTsKIAogI2RlZmluZSBFWFQ0X0JHX0lOT0RFX1VOSU5JVAkweDAwMDEgLyogSW5vZGUgdGFibGUvYml0bWFwIG5vdCBpbiB1c2UgKi8KQEAgLTI0OSw2ICsyNDAsMzAgQEAKICNkZWZpbmUgRVhUNF9GTF9VU0VSX1ZJU0lCTEUJCTB4MDAwQkRGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCiAjZGVmaW5lIEVYVDRfRkxfVVNFUl9NT0RJRklBQkxFCQkweDAwMEI4MEZGIC8qIFVzZXIgbW9kaWZpYWJsZSBmbGFncyAqLwogCisvKiBGbGFncyB0aGF0IHNob3VsZCBiZSBpbmhlcml0ZWQgYnkgbmV3IGlub2RlcyBmcm9tIHRoZWlyIHBhcmVudC4gKi8KKyNkZWZpbmUgRVhUNF9GTF9JTkhFUklURUQgKEVYVDRfU0VDUk1fRkwgfCBFWFQ0X1VOUk1fRkwgfCBFWFQ0X0NPTVBSX0ZMIHxcCisJCQkgICBFWFQ0X1NZTkNfRkwgfCBFWFQ0X0lNTVVUQUJMRV9GTCB8IEVYVDRfQVBQRU5EX0ZMIHxcCisJCQkgICBFWFQ0X05PRFVNUF9GTCB8IEVYVDRfTk9BVElNRV9GTCB8XAorCQkJICAgRVhUNF9OT0NPTVBSX0ZMIHwgRVhUNF9KT1VSTkFMX0RBVEFfRkwgfFwKKwkJCSAgIEVYVDRfTk9UQUlMX0ZMIHwgRVhUNF9ESVJTWU5DX0ZMKQorCisvKiBGbGFncyB0aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgcmVndWxhciBmaWxlcyAoYWxsIGJ1dCBkaXItc3BlY2lmaWMgb25lcykuICovCisjZGVmaW5lIEVYVDRfUkVHX0ZMTUFTSyAofihFWFQ0X0RJUlNZTkNfRkwgfCBFWFQ0X1RPUERJUl9GTCkpCisKKy8qIEZsYWdzIHRoYXQgYXJlIGFwcHJvcHJpYXRlIGZvciBub24tZGlyZWN0b3JpZXMvcmVndWxhciBmaWxlcy4gKi8KKyNkZWZpbmUgRVhUNF9PVEhFUl9GTE1BU0sgKEVYVDRfTk9EVU1QX0ZMIHwgRVhUNF9OT0FUSU1FX0ZMKQorCisvKiBNYXNrIG91dCBmbGFncyB0aGF0IGFyZSBpbmFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbm9kZS4gKi8KK3N0YXRpYyBpbmxpbmUgX191MzIgZXh0NF9tYXNrX2ZsYWdzKHVtb2RlX3QgbW9kZSwgX191MzIgZmxhZ3MpCit7CisJaWYgKFNfSVNESVIobW9kZSkpCisJCXJldHVybiBmbGFnczsKKwllbHNlIGlmIChTX0lTUkVHKG1vZGUpKQorCQlyZXR1cm4gZmxhZ3MgJiBFWFQ0X1JFR19GTE1BU0s7CisJZWxzZQorCQlyZXR1cm4gZmxhZ3MgJiBFWFQ0X09USEVSX0ZMTUFTSzsKK30KKwogLyoKICAqIElub2RlIGR5bmFtaWMgc3RhdGUgZmxhZ3MKICAqLwpAQCAtMjU2LDYgKzI3MSw3IEBACiAjZGVmaW5lIEVYVDRfU1RBVEVfTkVXCQkJMHgwMDAwMDAwMiAvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCiAjZGVmaW5lIEVYVDRfU1RBVEVfWEFUVFIJCTB4MDAwMDAwMDQgLyogaGFzIGluLWlub2RlIHhhdHRycyAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX05PX0VYUEFORAkJMHgwMDAwMDAwOCAvKiBObyBzcGFjZSBmb3IgZXhwYW5zaW9uICovCisjZGVmaW5lIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UJMHgwMDAwMDAxMCAvKiBBbGxvYyBEQSBibGtzIG9uIGNsb3NlICovCiAKIC8qIFVzZWQgdG8gcGFzcyBncm91cCBkZXNjcmlwdG9yIGRhdGEgd2hlbiBvbmxpbmUgcmVzaXplIGlzIGRvbmUgKi8KIHN0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCB7CkBAIC0zMDMsNyArMzE5LDkgQEAKICNkZWZpbmUgRVhUNF9JT0NfR1JPVVBfRVhURU5ECQlfSU9XKCdmJywgNywgdW5zaWduZWQgbG9uZykKICNkZWZpbmUgRVhUNF9JT0NfR1JPVVBfQURECQlfSU9XKCdmJywgOCwgc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0KQogI2RlZmluZSBFWFQ0X0lPQ19NSUdSQVRFCQlfSU8oJ2YnLCA5KQorIC8qIG5vdGUgaW9jdGwgMTAgcmVzZXJ2ZWQgZm9yIGFuIGVhcmx5IHZlcnNpb24gb2YgdGhlIEZJRU1BUCBpb2N0bCAqLwogIC8qIG5vdGUgaW9jdGwgMTEgcmVzZXJ2ZWQgZm9yIGZpbGVzeXN0ZW0taW5kZXBlbmRlbnQgRklFTUFQIGlvY3RsICovCisjZGVmaW5lIEVYVDRfSU9DX0FMTE9DX0RBX0JMS1MJCV9JTygnZicsIDEyKQogCiAvKgogICogaW9jdGwgY29tbWFuZHMgaW4gMzIgYml0IGVtdWxhdGlvbgpAQCAtNTMxLDcgKzU0OSw3IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfTk9fVUlEMzIJCTB4MDIwMDAgIC8qIERpc2FibGUgMzItYml0IFVJRHMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9YQVRUUl9VU0VSCQkweDA0MDAwCS8qIEV4dGVuZGVkIHVzZXIgYXR0cmlidXRlcyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX1BPU0lYX0FDTAkJMHgwODAwMAkvKiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAqLwotI2RlZmluZSBFWFQ0X01PVU5UX1JFU0VSVkFUSU9OCQkweDEwMDAwCS8qIFByZWFsbG9jYXRpb24gKi8KKyNkZWZpbmUgRVhUNF9NT1VOVF9OT19BVVRPX0RBX0FMTE9DCTB4MTAwMDAJLyogTm8gYXV0byBkZWxhbGxvYyBtYXBwaW5nICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfQkFSUklFUgkJMHgyMDAwMCAvKiBVc2UgYmxvY2sgYmFycmllcnMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9OT0JICQkJMHg0MDAwMCAvKiBObyBidWZmZXJoZWFkcyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX1FVT1RBCQkweDgwMDAwIC8qIFNvbWUgcXVvdGEgb3B0aW9uIHNldCAqLwpAQCAtNjY2LDcgKzY4NCw4IEBACiAJX191OAlzX2xvZ19ncm91cHNfcGVyX2ZsZXg7ICAvKiBGTEVYX0JHIGdyb3VwIHNpemUgKi8KIAlfX3U4CXNfcmVzZXJ2ZWRfY2hhcl9wYWQyOwogCV9fbGUxNiAgc19yZXNlcnZlZF9wYWQ7Ci0JX191MzIgICBzX3Jlc2VydmVkWzE2Ml07ICAgICAgICAvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisJX19sZTY0CXNfa2J5dGVzX3dyaXR0ZW47CS8qIG5yIG9mIGxpZmV0aW1lIGtpbG9ieXRlcyB3cml0dGVuICovCisJX191MzIgICBzX3Jlc2VydmVkWzE2MF07ICAgICAgICAvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtODE0LDYgKzgzMywxMiBAQAogI2RlZmluZSBFWFQ0X0RFRl9NQVhfQkFUQ0hfVElNRQkxNTAwMCAvKiAxNW1zICovCiAKIC8qCisgKiBNaW5pbXVtIG51bWJlciBvZiBncm91cHMgaW4gYSBmbGV4Z3JvdXAgYmVmb3JlIHdlIHNlcGFyYXRlIG91dAorICogZGlyZWN0b3JpZXMgaW50byB0aGUgZmlyc3QgYmxvY2sgZ3JvdXAgb2YgYSBmbGV4Z3JvdXAKKyAqLworI2RlZmluZSBFWFQ0X0ZMRVhfU0laRV9ESVJfQUxMT0NfU0NIRU1FCTQKKworLyoKICAqIFN0cnVjdHVyZSBvZiBhIGRpcmVjdG9yeSBlbnRyeQogICovCiAjZGVmaW5lIEVYVDRfTkFNRV9MRU4gMjU1CkBAIC04NjUsMjQgKzg5MCw2IEBACiAJCQkJCSB+RVhUNF9ESVJfUk9VTkQpCiAjZGVmaW5lIEVYVDRfTUFYX1JFQ19MRU4JCSgoMTw8MTYpLTEpCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbikKLXsKLQl1bnNpZ25lZCBsZW4gPSBsZTE2X3RvX2NwdShkbGVuKTsKLQotCWlmIChsZW4gPT0gRVhUNF9NQVhfUkVDX0xFTiB8fCBsZW4gPT0gMCkKLQkJcmV0dXJuIDEgPDwgMTY7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGlubGluZSBfX2xlMTYgZXh0NF9yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuKQotewotCWlmIChsZW4gPT0gKDEgPDwgMTYpKQotCQlyZXR1cm4gY3B1X3RvX2xlMTYoRVhUNF9NQVhfUkVDX0xFTik7Ci0JZWxzZSBpZiAobGVuID4gKDEgPDwgMTYpKQotCQlCVUcoKTsKLQlyZXR1cm4gY3B1X3RvX2xlMTYobGVuKTsKLX0KLQogLyoKICAqIEhhc2ggVHJlZSBEaXJlY3RvcnkgaW5kZXhpbmcKICAqIChjKSBEYW5pZWwgUGhpbGxpcHMsIDIwMDEKQEAgLTk3MCwyMiArOTc3LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZXh0NF9wcm9jX3Jvb3Q7CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF91aV9wcm9jX2ZvcHM7Ci0KLSNkZWZpbmUJRVhUNF9QUk9DX0hBTkRMRVIobmFtZSwgdmFyKQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlwcm9jID0gcHJvY19jcmVhdGVfZGF0YShuYW1lLCBtb2RlLCBzYmktPnNfcHJvYywJCVwKLQkJCQkmZXh0NF91aV9wcm9jX2ZvcHMsICZzYmktPnNfIyN2YXIpOwlcCi0JaWYgKHByb2MgPT0gTlVMTCkgewkJCQkJCVwKLQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBjYW4ndCBjcmVhdGUgJXNcbiIsIG5hbWUpOwlcCi0JCWdvdG8gZXJyX291dDsJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEVYVDRfUFJPQ19IQU5ETEVSKG5hbWUsIHZhcikKLSNlbmRpZgotCiAvKgogICogRnVuY3Rpb24gcHJvdG90eXBlcwogICovCkBAIC0xMDkyLDEzICsxMDgzLDE0IEBACiBleHRlcm4gdm9pZCBleHQ0X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGV4dDRfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGV4dDRfZ2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKik7CitleHRlcm4gaW50IGV4dDRfYWxsb2NfZGFfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgZXh0NF93cml0ZXBhZ2VfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0NF9tZXRhX3RyYW5zX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKiwgaW50IG5yYmxvY2tzLCBpbnQgaWR4YmxvY2tzKTsKIGV4dGVybiBpbnQgZXh0NF9jaHVua190cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICosIGludCBucmJsb2Nrcyk7CiBleHRlcm4gaW50IGV4dDRfYmxvY2tfdHJ1bmNhdGVfcGFnZShoYW5kbGVfdCAqaGFuZGxlLAogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IGZyb20pOwotZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIGludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogZXh0ZXJuIHFzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIGlvY3RsLmMgKi8KQEAgLTExMDcsNyArMTA5OSwxMCBAQAogCiAvKiBtaWdyYXRlLmMgKi8KIGV4dGVybiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKik7CisKIC8qIG5hbWVpLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKTsKK2V4dGVybiBfX2xlMTYgZXh0NF9yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuLCB1bnNpZ25lZCBibG9ja3NpemUpOwogZXh0ZXJuIGludCBleHQ0X29ycGhhbl9hZGQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X29ycGhhbl9kZWwoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X2h0cmVlX2ZpbGxfdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsIF9fdTMyIHN0YXJ0X2hhc2gsCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaAppbmRleCAxOGNiNjdiLi5mMGMzZWM4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCisrKyBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKQEAgLTI0MSw1ICsyNDEsNiBAQAogZXh0ZXJuIGludCBleHQ0X2V4dF9zZWFyY2hfcmlnaHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dF9wYXRoICosCiAJCQkJCQlleHQ0X2xibGtfdCAqLCBleHQ0X2ZzYmxrX3QgKik7CiBleHRlcm4gdm9pZCBleHQ0X2V4dF9kcm9wX3JlZnMoc3RydWN0IGV4dDRfZXh0X3BhdGggKik7CitleHRlcm4gaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogI2VuZGlmIC8qIF9FWFQ0X0VYVEVOVFMgKi8KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2kuaCBiL2ZzL2V4dDQvZXh0NF9pLmgKaW5kZXggZTY5YWNjMS4uNGNlMjE4NyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2kuaAorKysgYi9mcy9leHQ0L2V4dDRfaS5oCkBAIC0zMyw5ICszMyw2IEBACiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIGdyb3VwIG51bWJlciAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZXh0NF9ncm91cF90OwogCi0jZGVmaW5lIHJzdl9zdGFydCByc3Zfd2luZG93Ll9yc3Zfc3RhcnQKLSNkZWZpbmUgcnN2X2VuZCByc3Zfd2luZG93Ll9yc3ZfZW5kCi0KIC8qCiAgKiBzdG9yYWdlIGZvciBjYWNoZWQgZXh0ZW50CiAgKi8KQEAgLTEyNSw2ICsxMjIsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgaV9wcmVhbGxvY19saXN0OwogCXNwaW5sb2NrX3QgaV9wcmVhbGxvY19sb2NrOwogCisJLyogaWFsbG9jICovCisJZXh0NF9ncm91cF90CWlfbGFzdF9hbGxvY19ncm91cDsKKwogCS8qIGFsbG9jYXRpb24gcmVzZXJ2YXRpb24gaW5mbyBmb3IgZGVsYWxsb2MgKi8KIAl1bnNpZ25lZCBpbnQgaV9yZXNlcnZlZF9kYXRhX2Jsb2NrczsKIAl1bnNpZ25lZCBpbnQgaV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9zYi5oIGIvZnMvZXh0NC9leHQ0X3NiLmgKaW5kZXggMDM5YjZlYS4uNTdiNzFmZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X3NiLmgKKysrIGIvZnMvZXh0NC9leHQ0X3NiLmgKQEAgLTYyLDEyICs2MiwxMCBAQAogCXN0cnVjdCBwZXJjcHVfY291bnRlciBzX2ZyZWVpbm9kZXNfY291bnRlcjsKIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc19kaXJzX2NvdW50ZXI7CiAJc3RydWN0IHBlcmNwdV9jb3VudGVyIHNfZGlydHlibG9ja3NfY291bnRlcjsKLQlzdHJ1Y3QgYmxvY2tncm91cF9sb2NrIHNfYmxvY2tncm91cF9sb2NrOworCXN0cnVjdCBibG9ja2dyb3VwX2xvY2sgKnNfYmxvY2tncm91cF9sb2NrOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc19wcm9jOwotCi0JLyogcm9vdCBvZiB0aGUgcGVyIGZzIHJlc2VydmF0aW9uIHdpbmRvdyB0cmVlICovCi0Jc3BpbmxvY2tfdCBzX3Jzdl93aW5kb3dfbG9jazsKLQlzdHJ1Y3QgcmJfcm9vdCBzX3Jzdl93aW5kb3dfcm9vdDsKKwlzdHJ1Y3Qga29iamVjdCBzX2tvYmo7CisJc3RydWN0IGNvbXBsZXRpb24gc19rb2JqX3VucmVnaXN0ZXI7CiAKIAkvKiBKb3VybmFsaW5nICovCiAJc3RydWN0IGlub2RlICpzX2pvdXJuYWxfaW5vZGU7CkBAIC0xNDYsNiArMTQ0LDEwIEBACiAJLyogbG9jYWxpdHkgZ3JvdXBzICovCiAJc3RydWN0IGV4dDRfbG9jYWxpdHlfZ3JvdXAgKnNfbG9jYWxpdHlfZ3JvdXBzOwogCisJLyogZm9yIHdyaXRlIHN0YXRpc3RpY3MgKi8KKwl1bnNpZ25lZCBsb25nIHNfc2VjdG9yc193cml0dGVuX3N0YXJ0OworCXU2NCBzX2tieXRlc193cml0dGVuOworCiAJdW5zaWduZWQgaW50IHNfbG9nX2dyb3Vwc19wZXJfZmxleDsKIAlzdHJ1Y3QgZmxleF9ncm91cHMgKnNfZmxleF9ncm91cHM7CiB9OwpAQCAtMTUzLDcgKzE1NSw3IEBACiBzdGF0aWMgaW5saW5lIHNwaW5sb2NrX3QgKgogc2JfYmdsX2xvY2soc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCB1bnNpZ25lZCBpbnQgYmxvY2tfZ3JvdXApCiB7Ci0JcmV0dXJuIGJnbF9sb2NrX3B0cigmc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jaywgYmxvY2tfZ3JvdXApOworCXJldHVybiBiZ2xfbG9ja19wdHIoc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jaywgYmxvY2tfZ3JvdXApOwogfQogCiAjZW5kaWYJLyogX0VYVDRfU0IgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggZTBhYTRmZS4uYWM3N2Q4YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTE1Miw2ICsxNTIsOCBAQAogCWV4dDRfZnNibGtfdCBiZ19zdGFydDsKIAlleHQ0X2ZzYmxrX3QgbGFzdF9ibG9jazsKIAlleHQ0X2dycGJsa190IGNvbG91cjsKKwlleHQ0X2dyb3VwX3QgYmxvY2tfZ3JvdXA7CisJaW50IGZsZXhfc2l6ZSA9IGV4dDRfZmxleF9iZ19zaXplKEVYVDRfU0IoaW5vZGUtPmlfc2IpKTsKIAlpbnQgZGVwdGg7CiAKIAlpZiAocGF0aCkgewpAQCAtMTcwLDEwICsxNzIsMzEgQEAKIAl9CiAKIAkvKiBPSy4gdXNlIGlub2RlJ3MgZ3JvdXAgKi8KLQliZ19zdGFydCA9IChlaS0+aV9ibG9ja19ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikpICsKKwlibG9ja19ncm91cCA9IGVpLT5pX2Jsb2NrX2dyb3VwOworCWlmIChmbGV4X3NpemUgPj0gRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRSkgeworCQkvKgorCQkgKiBJZiB0aGVyZSBhcmUgYXQgbGVhc3QgRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRQorCQkgKiBibG9jayBncm91cHMgcGVyIGZsZXhncm91cCwgcmVzZXJ2ZSB0aGUgZmlyc3QgYmxvY2sgCisJCSAqIGdyb3VwIGZvciBkaXJlY3RvcmllcyBhbmQgc3BlY2lhbCBmaWxlcy4gIFJlZ3VsYXIgCisJCSAqIGZpbGVzIHdpbGwgc3RhcnQgYXQgdGhlIHNlY29uZCBibG9jayBncm91cC4gIFRoaXMKKwkJICogdGVuZHMgdG8gc3BlZWQgdXAgZGlyZWN0b3J5IGFjY2VzcyBhbmQgaW1wcm92ZXMgCisJCSAqIGZzY2sgdGltZXMuCisJCSAqLworCQlibG9ja19ncm91cCAmPSB+KGZsZXhfc2l6ZS0xKTsKKwkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCQlibG9ja19ncm91cCsrOworCX0KKwliZ19zdGFydCA9IChibG9ja19ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikpICsKIAkJbGUzMl90b19jcHUoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CiAJbGFzdF9ibG9jayA9IGV4dDRfYmxvY2tzX2NvdW50KEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzKSAtIDE7CiAKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBkZWxheWVkIGFsbG9jYXRpb24sIHdlIGRvbid0IG5lZWQgdGFrZQorCSAqIGNvbG91ciBpbnRvIGFjY291bnQuCisJICovCisJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBERUxBTExPQykpCisJCXJldHVybiBiZ19zdGFydDsKKwogCWlmIChiZ19zdGFydCArIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikgPD0gbGFzdF9ibG9jaykKIAkJY29sb3VyID0gKGN1cnJlbnQtPnBpZCAlIDE2KSAqCiAJCQkoRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSAvIDE2KTsKQEAgLTMwMSw3ICszMjQsNjQgQEAKIAlyZXR1cm4gbWF4OwogfQogCi1zdGF0aWMgaW50IF9fZXh0NF9leHRfY2hlY2tfaGVhZGVyKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBleHQ0X3ZhbGlkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4dCkKK3sKKwlleHQ0X2ZzYmxrX3QgYmxvY2sgPSBleHRfcGJsb2NrKGV4dCk7CisJaW50IGxlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4dCk7CisJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXM7CisJaWYgKHVubGlrZWx5KGJsb2NrIDwgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkJCSgoYmxvY2sgKyBsZW4pID4gZXh0NF9ibG9ja3NfY291bnQoZXMpKSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXh0NF92YWxpZF9leHRlbnRfaWR4KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqZXh0X2lkeCkKK3sKKwlleHQ0X2ZzYmxrX3QgYmxvY2sgPSBpZHhfcGJsb2NrKGV4dF9pZHgpOworCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzOworCWlmICh1bmxpa2VseShibG9jayA8IGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spIHx8CisJCQkoYmxvY2sgPiBleHQ0X2Jsb2Nrc19jb3VudChlcykpKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHQ0X3ZhbGlkX2V4dGVudF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWgsCisJCQkJaW50IGRlcHRoKQoreworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXh0OworCXN0cnVjdCBleHQ0X2V4dGVudF9pZHggKmV4dF9pZHg7CisJdW5zaWduZWQgc2hvcnQgZW50cmllczsKKwlpZiAoZWgtPmVoX2VudHJpZXMgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwllbnRyaWVzID0gbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpOworCisJaWYgKGRlcHRoID09IDApIHsKKwkJLyogbGVhZiBlbnRyaWVzICovCisJCWV4dCA9IEVYVF9GSVJTVF9FWFRFTlQoZWgpOworCQl3aGlsZSAoZW50cmllcykgeworCQkJaWYgKCFleHQ0X3ZhbGlkX2V4dGVudChpbm9kZSwgZXh0KSkKKwkJCQlyZXR1cm4gMDsKKwkJCWV4dCsrOworCQkJZW50cmllcy0tOworCQl9CisJfSBlbHNlIHsKKwkJZXh0X2lkeCA9IEVYVF9GSVJTVF9JTkRFWChlaCk7CisJCXdoaWxlIChlbnRyaWVzKSB7CisJCQlpZiAoIWV4dDRfdmFsaWRfZXh0ZW50X2lkeChpbm9kZSwgZXh0X2lkeCkpCisJCQkJcmV0dXJuIDA7CisJCQlleHRfaWR4Kys7CisJCQllbnRyaWVzLS07CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgX19leHQ0X2V4dF9jaGVjayhjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWgsCiAJCQkJCWludCBkZXB0aCkKIHsKQEAgLTMyOSwxMSArNDA5LDE1IEBACiAJCWVycm9yX21zZyA9ICJpbnZhbGlkIGVoX2VudHJpZXMiOwogCQlnb3RvIGNvcnJ1cHRlZDsKIAl9CisJaWYgKCFleHQ0X3ZhbGlkX2V4dGVudF9lbnRyaWVzKGlub2RlLCBlaCwgZGVwdGgpKSB7CisJCWVycm9yX21zZyA9ICJpbnZhbGlkIGV4dGVudCBlbnRyaWVzIjsKKwkJZ290byBjb3JydXB0ZWQ7CisJfQogCXJldHVybiAwOwogCiBjb3JydXB0ZWQ6CiAJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgZnVuY3Rpb24sCi0JCQkiYmFkIGhlYWRlciBpbiBpbm9kZSAjJWx1OiAlcyAtIG1hZ2ljICV4LCAiCisJCQkiYmFkIGhlYWRlci9leHRlbnQgaW4gaW5vZGUgIyVsdTogJXMgLSBtYWdpYyAleCwgIgogCQkJImVudHJpZXMgJXUsIG1heCAldSgldSksIGRlcHRoICV1KCV1KSIsCiAJCQlpbm9kZS0+aV9pbm8sIGVycm9yX21zZywgbGUxNl90b19jcHUoZWgtPmVoX21hZ2ljKSwKIAkJCWxlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSwgbGUxNl90b19jcHUoZWgtPmVoX21heCksCkBAIC0zNDIsOCArNDI2LDEzIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLSNkZWZpbmUgZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBlaCwgZGVwdGgpCVwKLQlfX2V4dDRfZXh0X2NoZWNrX2hlYWRlcihfX2Z1bmNfXywgaW5vZGUsIGVoLCBkZXB0aCkKKyNkZWZpbmUgZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBkZXB0aCkJXAorCV9fZXh0NF9leHRfY2hlY2soX19mdW5jX18sIGlub2RlLCBlaCwgZGVwdGgpCisKK2ludCBleHQ0X2V4dF9jaGVja19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZXh0X2lub2RlX2hkcihpbm9kZSksIGV4dF9kZXB0aChpbm9kZSkpOworfQogCiAjaWZkZWYgRVhUX0RFQlVHCiBzdGF0aWMgdm9pZCBleHQ0X2V4dF9zaG93X3BhdGgoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgpCkBAIC01NDcsOSArNjM2LDYgQEAKIAogCWVoID0gZXh0X2lub2RlX2hkcihpbm9kZSk7CiAJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOwotCWlmIChleHQ0X2V4dF9jaGVja19oZWFkZXIoaW5vZGUsIGVoLCBkZXB0aCkpCi0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwotCiAKIAkvKiBhY2NvdW50IHBvc3NpYmxlIGRlcHRoIGluY3JlYXNlICovCiAJaWYgKCFwYXRoKSB7CkBAIC01NjUsNiArNjUxLDggQEAKIAlpID0gZGVwdGg7CiAJLyogd2FsayB0aHJvdWdoIHRoZSB0cmVlICovCiAJd2hpbGUgKGkpIHsKKwkJaW50IG5lZWRfdG9fdmFsaWRhdGUgPSAwOworCiAJCWV4dF9kZWJ1ZygiZGVwdGggJWQ6IG51bSAlZCwgbWF4ICVkXG4iLAogCQkJICBwcG9zLCBsZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyksIGxlMTZfdG9fY3B1KGVoLT5laF9tYXgpKTsKIApAQCAtNTczLDEwICs2NjEsMTcgQEAKIAkJcGF0aFtwcG9zXS5wX2RlcHRoID0gaTsKIAkJcGF0aFtwcG9zXS5wX2V4dCA9IE5VTEw7CiAKLQkJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgcGF0aFtwcG9zXS5wX2Jsb2NrKTsKLQkJaWYgKCFiaCkKKwkJYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIHBhdGhbcHBvc10ucF9ibG9jayk7CisJCWlmICh1bmxpa2VseSghYmgpKQogCQkJZ290byBlcnI7Ci0KKwkJaWYgKCFiaF91cHRvZGF0ZV9vcl9sb2NrKGJoKSkgeworCQkJaWYgKGJoX3N1Ym1pdF9yZWFkKGJoKSA8IDApIHsKKwkJCQlwdXRfYmgoYmgpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQkJLyogdmFsaWRhdGUgdGhlIGV4dGVudCBlbnRyaWVzICovCisJCQluZWVkX3RvX3ZhbGlkYXRlID0gMTsKKwkJfQogCQllaCA9IGV4dF9ibG9ja19oZHIoYmgpOwogCQlwcG9zKys7CiAJCUJVR19PTihwcG9zID4gZGVwdGgpOwpAQCAtNTg0LDcgKzY3OSw3IEBACiAJCXBhdGhbcHBvc10ucF9oZHIgPSBlaDsKIAkJaS0tOwogCi0JCWlmIChleHQ0X2V4dF9jaGVja19oZWFkZXIoaW5vZGUsIGVoLCBpKSkKKwkJaWYgKG5lZWRfdG9fdmFsaWRhdGUgJiYgZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBpKSkKIAkJCWdvdG8gZXJyOwogCX0KIApAQCAtMTE4MSw3ICsxMjc2LDcgQEAKIAkJCXJldHVybiAtRUlPOwogCQllaCA9IGV4dF9ibG9ja19oZHIoYmgpOwogCQkvKiBzdWJ0cmFjdCBmcm9tIHBfZGVwdGggdG8gZ2V0IHByb3BlciBlaF9kZXB0aCAqLwotCQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBlaCwgcGF0aC0+cF9kZXB0aCAtIGRlcHRoKSkgeworCQlpZiAoZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBwYXRoLT5wX2RlcHRoIC0gZGVwdGgpKSB7CiAJCQlwdXRfYmgoYmgpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KQEAgLTExOTQsNyArMTI4OSw3IEBACiAJaWYgKGJoID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCWVoID0gZXh0X2Jsb2NrX2hkcihiaCk7Ci0JaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZWgsIHBhdGgtPnBfZGVwdGggLSBkZXB0aCkpIHsKKwlpZiAoZXh0NF9leHRfY2hlY2soaW5vZGUsIGVoLCBwYXRoLT5wX2RlcHRoIC0gZGVwdGgpKSB7CiAJCXB1dF9iaChiaCk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTIxMzcsNyArMjIzMiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlwYXRoWzBdLnBfaGRyID0gZXh0X2lub2RlX2hkcihpbm9kZSk7Ci0JaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgcGF0aFswXS5wX2hkciwgZGVwdGgpKSB7CisJaWYgKGV4dDRfZXh0X2NoZWNrKGlub2RlLCBwYXRoWzBdLnBfaGRyLCBkZXB0aCkpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjE5MSw3ICsyMjg2LDcgQEAKIAkJCQllcnIgPSAtRUlPOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZXh0X2Jsb2NrX2hkcihiaCksCisJCQlpZiAoZXh0NF9leHRfY2hlY2soaW5vZGUsIGV4dF9ibG9ja19oZHIoYmgpLAogCQkJCQkJCWRlcHRoIC0gaSAtIDEpKSB7CiAJCQkJZXJyID0gLUVJTzsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggZjczMWNiNS4uNTg4YWY4YyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTMzLDkgKzMzLDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgZXh0NF9yZWxlYXNlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJaWYgKEVYVDRfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFKSB7CisJCWV4dDRfYWxsb2NfZGFfYmxvY2tzKGlub2RlKTsKKwkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9EQV9BTExPQ19DTE9TRTsKKwl9CiAJLyogaWYgd2UgYXJlIHRoZSBsYXN0IHdyaXRlciBvbiB0aGUgaW5vZGUsIGRyb3AgdGhlIGJsb2NrIHJlc2VydmF0aW9uICovCiAJaWYgKChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKLQkJCShhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPT0gMSkpCisJCQkoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID09IDEpICYmCisJCSAgICAgICAgIUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MpCiAJewogCQlkb3duX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKIAkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jCmluZGV4IGZiNTFiNDAuLjQ3Yjg0ZTggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaWFsbG9jLmMKKysrIGIvZnMvZXh0NC9pYWxsb2MuYwpAQCAtMTg5LDcgKzE4OSw2IEBACiAJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTsKIAlpbnQgZmF0YWwgPSAwLCBlcnIsIGNvdW50LCBjbGVhcmVkOwotCWV4dDRfZ3JvdXBfdCBmbGV4X2dyb3VwOwogCiAJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZXh0NF9mcmVlX2lub2RlOiBpbm9kZSBoYXMgY291bnQ9JWRcbiIsCkBAIC0yNjgsNiArMjY3LDEzIEBACiAJCQlpZiAoaXNfZGlyZWN0b3J5KSB7CiAJCQkJY291bnQgPSBleHQ0X3VzZWRfZGlyc19jb3VudChzYiwgZ2RwKSAtIDE7CiAJCQkJZXh0NF91c2VkX2RpcnNfc2V0KHNiLCBnZHAsIGNvdW50KTsKKwkJCQlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKKwkJCQkJZXh0NF9ncm91cF90IGY7CisKKwkJCQkJZiA9IGV4dDRfZmxleF9ncm91cChzYmksIGJsb2NrX2dyb3VwKTsKKwkJCQkJYXRvbWljX2RlYygmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZdLmZyZWVfaW5vZGVzKTsKKwkJCQl9CisKIAkJCX0KIAkJCWdkcC0+YmdfY2hlY2tzdW0gPSBleHQ0X2dyb3VwX2Rlc2NfY3N1bShzYmksCiAJCQkJCQkJYmxvY2tfZ3JvdXAsIGdkcCk7CkBAIC0yNzcsMTAgKzI4MywxMCBAQAogCQkJCXBlcmNwdV9jb3VudGVyX2RlYygmc2JpLT5zX2RpcnNfY291bnRlcik7CiAKIAkJCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewotCQkJCWZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBibG9ja19ncm91cCk7Ci0JCQkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOwotCQkJCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2lub2RlcysrOwotCQkJCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOworCQkJCWV4dDRfZ3JvdXBfdCBmOworCisJCQkJZiA9IGV4dDRfZmxleF9ncm91cChzYmksIGJsb2NrX2dyb3VwKTsKKwkJCQlhdG9taWNfaW5jKCZzYmktPnNfZmxleF9ncm91cHNbZl0uZnJlZV9pbm9kZXMpOwogCQkJfQogCQl9CiAJCUJVRkZFUl9UUkFDRShiaDIsICJjYWxsIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhIik7CkBAIC0zNjAsOSArMzY2LDkgQEAKIAkJc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CiAKIGZpbmRfY2xvc2VfdG9fcGFyZW50OgotCWZsZXhiZ19mcmVlX2Jsb2NrcyA9IGZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2Jsb2NrczsKKwlmbGV4YmdfZnJlZV9ibG9ja3MgPSBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzKTsKIAlmbGV4X2ZyZWViX3JhdGlvID0gZmxleGJnX2ZyZWVfYmxvY2tzICogMTAwIC8gYmxvY2tzX3Blcl9mbGV4OwotCWlmIChmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9pbm9kZXMgJiYKKwlpZiAoYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcykgJiYKIAkgICAgZmxleF9mcmVlYl9yYXRpbyA+IGZyZWVfYmxvY2tfcmF0aW8pCiAJCWdvdG8gZm91bmRfZmxleGJnOwogCkBAIC0zNzUsMjQgKzM4MSwyNCBAQAogCQlpZiAoaSA9PSBwYXJlbnRfZmJnX2dyb3VwIHx8IGkgPT0gcGFyZW50X2ZiZ19ncm91cCAtIDEpCiAJCQljb250aW51ZTsKIAotCQlmbGV4YmdfZnJlZV9ibG9ja3MgPSBmbGV4X2dyb3VwW2ldLmZyZWVfYmxvY2tzOworCQlmbGV4YmdfZnJlZV9ibG9ja3MgPSBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtpXS5mcmVlX2Jsb2Nrcyk7CiAJCWZsZXhfZnJlZWJfcmF0aW8gPSBmbGV4YmdfZnJlZV9ibG9ja3MgKiAxMDAgLyBibG9ja3NfcGVyX2ZsZXg7CiAKIAkJaWYgKGZsZXhfZnJlZWJfcmF0aW8gPiBmcmVlX2Jsb2NrX3JhdGlvICYmCi0JCSAgICBmbGV4X2dyb3VwW2ldLmZyZWVfaW5vZGVzKSB7CisJCSAgICAoYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbaV0uZnJlZV9pbm9kZXMpKSkgewogCQkJYmVzdF9mbGV4ID0gaTsKIAkJCWdvdG8gZm91bmRfZmxleGJnOwogCQl9CiAKLQkJaWYgKGZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcyA9PSAwIHx8Ci0JCSAgICAoZmxleF9ncm91cFtpXS5mcmVlX2Jsb2NrcyA+Ci0JCSAgICAgZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzICYmCi0JCSAgICAgZmxleF9ncm91cFtpXS5mcmVlX2lub2RlcykpCisJCWlmICgoYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcykgPT0gMCkgfHwKKwkJICAgICgoYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbaV0uZnJlZV9ibG9ja3MpID4KKwkJICAgICAgYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2Jsb2NrcykpICYmCisJCSAgICAgYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbaV0uZnJlZV9pbm9kZXMpKSkKIAkJCWJlc3RfZmxleCA9IGk7CiAJfQogCi0JaWYgKCFmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9pbm9kZXMgfHwKLQkgICAgIWZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2Jsb2NrcykKKwlpZiAoIWF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9pbm9kZXMpIHx8CisJICAgICFhdG9taWNfcmVhZCgmZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzKSkKIAkJcmV0dXJuIC0xOwogCiBmb3VuZF9mbGV4Ymc6CkBAIC00MTAsNiArNDE2LDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBvcmxvdl9zdGF0cyB7CisJX191MzIgZnJlZV9pbm9kZXM7CisJX191MzIgZnJlZV9ibG9ja3M7CisJX191MzIgdXNlZF9kaXJzOworfTsKKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgT3Jsb3YncyBhbGxvY2F0b3I7IHJldHVybnMgY3JpdGljYWwgaW5mb3JtYXRpb24KKyAqIGZvciBhIHBhcnRpY3VsYXIgYmxvY2sgZ3JvdXAgb3IgZmxleF9iZy4gIElmIGZsZXhfc2l6ZSBpcyAxLCB0aGVuIGcKKyAqIGlzIGEgYmxvY2sgZ3JvdXAgbnVtYmVyOyBvdGhlcndpc2UgaXQgaXMgZmxleF9iZyBudW1iZXIuCisgKi8KK3ZvaWQgZ2V0X29ybG92X3N0YXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBnLAorCQkgICAgICAgaW50IGZsZXhfc2l6ZSwgc3RydWN0IG9ybG92X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpkZXNjOworCXN0cnVjdCBmbGV4X2dyb3VwcyAqZmxleF9ncm91cCA9IEVYVDRfU0Ioc2IpLT5zX2ZsZXhfZ3JvdXBzOworCisJaWYgKGZsZXhfc2l6ZSA+IDEpIHsKKwkJc3RhdHMtPmZyZWVfaW5vZGVzID0gYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbZ10uZnJlZV9pbm9kZXMpOworCQlzdGF0cy0+ZnJlZV9ibG9ja3MgPSBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtnXS5mcmVlX2Jsb2Nrcyk7CisJCXN0YXRzLT51c2VkX2RpcnMgPSBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtnXS51c2VkX2RpcnMpOworCQlyZXR1cm47CisJfQorCisJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsIGcsIE5VTEwpOworCWlmIChkZXNjKSB7CisJCXN0YXRzLT5mcmVlX2lub2RlcyA9IGV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGRlc2MpOworCQlzdGF0cy0+ZnJlZV9ibG9ja3MgPSBleHQ0X2ZyZWVfYmxrc19jb3VudChzYiwgZGVzYyk7CisJCXN0YXRzLT51c2VkX2RpcnMgPSBleHQ0X3VzZWRfZGlyc19jb3VudChzYiwgZGVzYyk7CisJfSBlbHNlIHsKKwkJc3RhdHMtPmZyZWVfaW5vZGVzID0gMDsKKwkJc3RhdHMtPmZyZWVfYmxvY2tzID0gMDsKKwkJc3RhdHMtPnVzZWRfZGlycyA9IDA7CisJfQorfQorCiAvKgogICogT3Jsb3YncyBhbGxvY2F0b3IgZm9yIGRpcmVjdG9yaWVzLgogICoKQEAgLTQyNSwzNSArNDY3LDM0IEBACiAgKiBpdCBoYXMgdG9vIG1hbnkgZGlyZWN0b3JpZXMgYWxyZWFkeSAobWF4X2RpcnMpIG9yCiAgKiBpdCBoYXMgdG9vIGZldyBmcmVlIGlub2RlcyBsZWZ0IChtaW5faW5vZGVzKSBvcgogICogaXQgaGFzIHRvbyBmZXcgZnJlZSBibG9ja3MgbGVmdCAobWluX2Jsb2Nrcykgb3IKLSAqIGl0J3MgYWxyZWFkeSBydW5uaW5nIHRvbyBsYXJnZSBkZWJ0IChtYXhfZGVidCkuCiAgKiBQYXJlbnQncyBncm91cCBpcyBwcmVmZXJyZWQsIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGVzZQogICogY29uZGl0aW9ucyB3ZSBzZWFyY2ggY3ljbGljYWxseSB0aHJvdWdoIHRoZSByZXN0LiBJZiBub25lCiAgKiBvZiB0aGUgZ3JvdXBzIGxvb2sgZ29vZCB3ZSBqdXN0IGxvb2sgZm9yIGEgZ3JvdXAgd2l0aCBtb3JlCiAgKiBmcmVlIGlub2RlcyB0aGFuIGF2ZXJhZ2UgKHN0YXJ0aW5nIGF0IHBhcmVudCdzIGdyb3VwKS4KLSAqCi0gKiBEZWJ0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB3ZSBhbGxvY2F0ZSBhIGRpcmVjdG9yeSBhbmQgZGVjcmVtZW50ZWQKLSAqIHdoZW4gd2UgYWxsb2NhdGUgYW4gaW5vZGUsIHdpdGhpbiAwLS0yNTUuCiAgKi8KIAotI2RlZmluZSBJTk9ERV9DT1NUIDY0Ci0jZGVmaW5lIEJMT0NLX0NPU1QgMjU2Ci0KIHN0YXRpYyBpbnQgZmluZF9ncm91cF9vcmxvdihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKLQkJCQlleHQ0X2dyb3VwX3QgKmdyb3VwKQorCQkJICAgIGV4dDRfZ3JvdXBfdCAqZ3JvdXAsIGludCBtb2RlKQogewogCWV4dDRfZ3JvdXBfdCBwYXJlbnRfZ3JvdXAgPSBFWFQ0X0kocGFyZW50KS0+aV9ibG9ja19ncm91cDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBzYmktPnNfZXM7CiAJZXh0NF9ncm91cF90IG5ncm91cHMgPSBzYmktPnNfZ3JvdXBzX2NvdW50OwogCWludCBpbm9kZXNfcGVyX2dyb3VwID0gRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKTsKIAl1bnNpZ25lZCBpbnQgZnJlZWksIGF2ZWZyZWVpOwogCWV4dDRfZnNibGtfdCBmcmVlYiwgYXZlZnJlZWI7Ci0JZXh0NF9mc2Jsa190IGJsb2Nrc19wZXJfZGlyOwogCXVuc2lnbmVkIGludCBuZGlyczsKLQlpbnQgbWF4X2RlYnQsIG1heF9kaXJzLCBtaW5faW5vZGVzOworCWludCBtYXhfZGlycywgbWluX2lub2RlczsKIAlleHQ0X2dycGJsa190IG1pbl9ibG9ja3M7Ci0JZXh0NF9ncm91cF90IGk7CisJZXh0NF9ncm91cF90IGksIGdycCwgZzsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpkZXNjOworCXN0cnVjdCBvcmxvdl9zdGF0cyBzdGF0czsKKwlpbnQgZmxleF9zaXplID0gZXh0NF9mbGV4X2JnX3NpemUoc2JpKTsKKworCWlmIChmbGV4X3NpemUgPiAxKSB7CisJCW5ncm91cHMgPSAobmdyb3VwcyArIGZsZXhfc2l6ZSAtIDEpID4+CisJCQlzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleDsKKwkJcGFyZW50X2dyb3VwID4+PSBzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleDsKKwl9CiAKIAlmcmVlaSA9IHBlcmNwdV9jb3VudGVyX3JlYWRfcG9zaXRpdmUoJnNiaS0+c19mcmVlaW5vZGVzX2NvdW50ZXIpOwogCWF2ZWZyZWVpID0gZnJlZWkgLyBuZ3JvdXBzOwpAQCAtNDYyLDcxICs1MDMsOTcgQEAKIAlkb19kaXYoYXZlZnJlZWIsIG5ncm91cHMpOwogCW5kaXJzID0gcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZSgmc2JpLT5zX2RpcnNfY291bnRlcik7CiAKLQlpZiAoKHBhcmVudCA9PSBzYi0+c19yb290LT5kX2lub2RlKSB8fAotCSAgICAoRVhUNF9JKHBhcmVudCktPmlfZmxhZ3MgJiBFWFQ0X1RPUERJUl9GTCkpIHsKKwlpZiAoU19JU0RJUihtb2RlKSAmJgorCSAgICAoKHBhcmVudCA9PSBzYi0+c19yb290LT5kX2lub2RlKSB8fAorCSAgICAgKEVYVDRfSShwYXJlbnQpLT5pX2ZsYWdzICYgRVhUNF9UT1BESVJfRkwpKSkgewogCQlpbnQgYmVzdF9uZGlyID0gaW5vZGVzX3Blcl9ncm91cDsKLQkJZXh0NF9ncm91cF90IGdycDsKIAkJaW50IHJldCA9IC0xOwogCiAJCWdldF9yYW5kb21fYnl0ZXMoJmdycCwgc2l6ZW9mKGdycCkpOwogCQlwYXJlbnRfZ3JvdXAgPSAodW5zaWduZWQpZ3JwICUgbmdyb3VwczsKIAkJZm9yIChpID0gMDsgaSA8IG5ncm91cHM7IGkrKykgewotCQkJZ3JwID0gKHBhcmVudF9ncm91cCArIGkpICUgbmdyb3VwczsKLQkJCWRlc2MgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBncnAsIE5VTEwpOwotCQkJaWYgKCFkZXNjIHx8ICFleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSkKKwkJCWcgPSAocGFyZW50X2dyb3VwICsgaSkgJSBuZ3JvdXBzOworCQkJZ2V0X29ybG92X3N0YXRzKHNiLCBnLCBmbGV4X3NpemUsICZzdGF0cyk7CisJCQlpZiAoIXN0YXRzLmZyZWVfaW5vZGVzKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKGV4dDRfdXNlZF9kaXJzX2NvdW50KHNiLCBkZXNjKSA+PSBiZXN0X25kaXIpCisJCQlpZiAoc3RhdHMudXNlZF9kaXJzID49IGJlc3RfbmRpcikKIAkJCQljb250aW51ZTsKLQkJCWlmIChleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSA8IGF2ZWZyZWVpKQorCQkJaWYgKHN0YXRzLmZyZWVfaW5vZGVzIDwgYXZlZnJlZWkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoZXh0NF9mcmVlX2Jsa3NfY291bnQoc2IsIGRlc2MpIDwgYXZlZnJlZWIpCisJCQlpZiAoc3RhdHMuZnJlZV9ibG9ja3MgPCBhdmVmcmVlYikKIAkJCQljb250aW51ZTsKLQkJCSpncm91cCA9IGdycDsKKwkJCWdycCA9IGc7CiAJCQlyZXQgPSAwOwotCQkJYmVzdF9uZGlyID0gZXh0NF91c2VkX2RpcnNfY291bnQoc2IsIGRlc2MpOworCQkJYmVzdF9uZGlyID0gc3RhdHMudXNlZF9kaXJzOwogCQl9Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldHVybiByZXQ7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhbGxiYWNrOworCWZvdW5kX2ZsZXhfYmc6CisJCWlmIChmbGV4X3NpemUgPT0gMSkgeworCQkJKmdyb3VwID0gZ3JwOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBXZSBwYWNrIGlub2RlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmbGV4Z3JvdXAncworCQkgKiBpbm9kZSB0YWJsZXMuICBCbG9jayBhbGxvY2F0aW9uIGRlY2lzaW9ucyB3aWxsIGRvCisJCSAqIHNvbWV0aGluZyBzaW1pbGFyLCBhbHRob3VnaCByZWd1bGFyIGZpbGVzIHdpbGwKKwkJICogc3RhcnQgYXQgMm5kIGJsb2NrIGdyb3VwIG9mIHRoZSBmbGV4Z3JvdXAuICBTZWUKKwkJICogZXh0NF9leHRfZmluZF9nb2FsKCkgYW5kIGV4dDRfZmluZF9uZWFyKCkuCisJCSAqLworCQlncnAgKj0gZmxleF9zaXplOworCQlmb3IgKGkgPSAwOyBpIDwgZmxleF9zaXplOyBpKyspIHsKKwkJCWlmIChncnAraSA+PSBzYmktPnNfZ3JvdXBzX2NvdW50KQorCQkJCWJyZWFrOworCQkJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsIGdycCtpLCBOVUxMKTsKKwkJCWlmIChkZXNjICYmIGV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGRlc2MpKSB7CisJCQkJKmdyb3VwID0gZ3JwK2k7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KIAkJZ290byBmYWxsYmFjazsKIAl9CiAKLQlibG9ja3NfcGVyX2RpciA9IGV4dDRfYmxvY2tzX2NvdW50KGVzKSAtIGZyZWViOwotCWRvX2RpdihibG9ja3NfcGVyX2RpciwgbmRpcnMpOwotCiAJbWF4X2RpcnMgPSBuZGlycyAvIG5ncm91cHMgKyBpbm9kZXNfcGVyX2dyb3VwIC8gMTY7Ci0JbWluX2lub2RlcyA9IGF2ZWZyZWVpIC0gaW5vZGVzX3Blcl9ncm91cCAvIDQ7Ci0JbWluX2Jsb2NrcyA9IGF2ZWZyZWViIC0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSAvIDQ7CisJbWluX2lub2RlcyA9IGF2ZWZyZWVpIC0gaW5vZGVzX3Blcl9ncm91cCpmbGV4X3NpemUgLyA0OworCWlmIChtaW5faW5vZGVzIDwgMSkKKwkJbWluX2lub2RlcyA9IDE7CisJbWluX2Jsb2NrcyA9IGF2ZWZyZWViIC0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSpmbGV4X3NpemUgLyA0OwogCi0JbWF4X2RlYnQgPSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpOwotCW1heF9kZWJ0IC89IG1heF90KGludCwgYmxvY2tzX3Blcl9kaXIsIEJMT0NLX0NPU1QpOwotCWlmIChtYXhfZGVidCAqIElOT0RFX0NPU1QgPiBpbm9kZXNfcGVyX2dyb3VwKQotCQltYXhfZGVidCA9IGlub2Rlc19wZXJfZ3JvdXAgLyBJTk9ERV9DT1NUOwotCWlmIChtYXhfZGVidCA+IDI1NSkKLQkJbWF4X2RlYnQgPSAyNTU7Ci0JaWYgKG1heF9kZWJ0ID09IDApCi0JCW1heF9kZWJ0ID0gMTsKKwkvKgorCSAqIFN0YXJ0IGxvb2tpbmcgaW4gdGhlIGZsZXggZ3JvdXAgd2hlcmUgd2UgbGFzdCBhbGxvY2F0ZWQgYW4KKwkgKiBpbm9kZSBmb3IgdGhpcyBwYXJlbnQgZGlyZWN0b3J5CisJICovCisJaWYgKEVYVDRfSShwYXJlbnQpLT5pX2xhc3RfYWxsb2NfZ3JvdXAgIT0gfjApIHsKKwkJcGFyZW50X2dyb3VwID0gRVhUNF9JKHBhcmVudCktPmlfbGFzdF9hbGxvY19ncm91cDsKKwkJaWYgKGZsZXhfc2l6ZSA+IDEpCisJCQlwYXJlbnRfZ3JvdXAgPj49IHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBuZ3JvdXBzOyBpKyspIHsKLQkJKmdyb3VwID0gKHBhcmVudF9ncm91cCArIGkpICUgbmdyb3VwczsKLQkJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsICpncm91cCwgTlVMTCk7Ci0JCWlmICghZGVzYyB8fCAhZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykpCisJCWdycCA9IChwYXJlbnRfZ3JvdXAgKyBpKSAlIG5ncm91cHM7CisJCWdldF9vcmxvdl9zdGF0cyhzYiwgZ3JwLCBmbGV4X3NpemUsICZzdGF0cyk7CisJCWlmIChzdGF0cy51c2VkX2RpcnMgPj0gbWF4X2RpcnMpCiAJCQljb250aW51ZTsKLQkJaWYgKGV4dDRfdXNlZF9kaXJzX2NvdW50KHNiLCBkZXNjKSA+PSBtYXhfZGlycykKKwkJaWYgKHN0YXRzLmZyZWVfaW5vZGVzIDwgbWluX2lub2RlcykKIAkJCWNvbnRpbnVlOwotCQlpZiAoZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykgPCBtaW5faW5vZGVzKQorCQlpZiAoc3RhdHMuZnJlZV9ibG9ja3MgPCBtaW5fYmxvY2tzKQogCQkJY29udGludWU7Ci0JCWlmIChleHQ0X2ZyZWVfYmxrc19jb3VudChzYiwgZGVzYykgPCBtaW5fYmxvY2tzKQotCQkJY29udGludWU7Ci0JCXJldHVybiAwOworCQlnb3RvIGZvdW5kX2ZsZXhfYmc7CiAJfQogCiBmYWxsYmFjazoKKwluZ3JvdXBzID0gc2JpLT5zX2dyb3Vwc19jb3VudDsKKwlhdmVmcmVlaSA9IGZyZWVpIC8gbmdyb3VwczsKKwlwYXJlbnRfZ3JvdXAgPSBFWFQ0X0kocGFyZW50KS0+aV9ibG9ja19ncm91cDsKIAlmb3IgKGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7Ci0JCSpncm91cCA9IChwYXJlbnRfZ3JvdXAgKyBpKSAlIG5ncm91cHM7Ci0JCWRlc2MgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCAqZ3JvdXAsIE5VTEwpOworCQlncnAgPSAocGFyZW50X2dyb3VwICsgaSkgJSBuZ3JvdXBzOworCQlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgZ3JwLCBOVUxMKTsKIAkJaWYgKGRlc2MgJiYgZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykgJiYKLQkJCWV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGRlc2MpID49IGF2ZWZyZWVpKQorCQkgICAgZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykgPj0gYXZlZnJlZWkpIHsKKwkJCSpncm91cCA9IGdycDsKIAkJCXJldHVybiAwOworCQl9CiAJfQogCiAJaWYgKGF2ZWZyZWVpKSB7CkBAIC01NDIsMTIgKzYwOSw1MSBAQAogfQogCiBzdGF0aWMgaW50IGZpbmRfZ3JvdXBfb3RoZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpwYXJlbnQsCi0JCQkJZXh0NF9ncm91cF90ICpncm91cCkKKwkJCSAgICBleHQ0X2dyb3VwX3QgKmdyb3VwLCBpbnQgbW9kZSkKIHsKIAlleHQ0X2dyb3VwX3QgcGFyZW50X2dyb3VwID0gRVhUNF9JKHBhcmVudCktPmlfYmxvY2tfZ3JvdXA7CiAJZXh0NF9ncm91cF90IG5ncm91cHMgPSBFWFQ0X1NCKHNiKS0+c19ncm91cHNfY291bnQ7CiAJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZGVzYzsKLQlleHQ0X2dyb3VwX3QgaTsKKwlleHQ0X2dyb3VwX3QgaSwgbGFzdDsKKwlpbnQgZmxleF9zaXplID0gZXh0NF9mbGV4X2JnX3NpemUoRVhUNF9TQihzYikpOworCisJLyoKKwkgKiBUcnkgdG8gcGxhY2UgdGhlIGlub2RlIGlzIHRoZSBzYW1lIGZsZXggZ3JvdXAgYXMgaXRzCisJICogcGFyZW50LiAgSWYgd2UgY2FuJ3QgZmluZCBzcGFjZSwgdXNlIHRoZSBPcmxvdiBhbGdvcml0aG0gdG8KKwkgKiBmaW5kIGFub3RoZXIgZmxleCBncm91cCwgYW5kIHN0b3JlIHRoYXQgaW5mb3JtYXRpb24gaW4gdGhlCisJICogcGFyZW50IGRpcmVjdG9yeSdzIGlub2RlIGluZm9ybWF0aW9uIHNvIHRoYXQgdXNlIHRoYXQgZmxleAorCSAqIGdyb3VwIGZvciBmdXR1cmUgYWxsb2NhdGlvbnMuCisJICovCisJaWYgKGZsZXhfc2l6ZSA+IDEpIHsKKwkJaW50IHJldHJ5ID0gMDsKKworCXRyeV9hZ2FpbjoKKwkJcGFyZW50X2dyb3VwICY9IH4oZmxleF9zaXplLTEpOworCQlsYXN0ID0gcGFyZW50X2dyb3VwICsgZmxleF9zaXplOworCQlpZiAobGFzdCA+IG5ncm91cHMpCisJCQlsYXN0ID0gbmdyb3VwczsKKwkJZm9yICAoaSA9IHBhcmVudF9ncm91cDsgaSA8IGxhc3Q7IGkrKykgeworCQkJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsIGksIE5VTEwpOworCQkJaWYgKGRlc2MgJiYgZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykpIHsKKwkJCQkqZ3JvdXAgPSBpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWlmICghcmV0cnkgJiYgRVhUNF9JKHBhcmVudCktPmlfbGFzdF9hbGxvY19ncm91cCAhPSB+MCkgeworCQkJcmV0cnkgPSAxOworCQkJcGFyZW50X2dyb3VwID0gRVhUNF9JKHBhcmVudCktPmlfbGFzdF9hbGxvY19ncm91cDsKKwkJCWdvdG8gdHJ5X2FnYWluOworCQl9CisJCS8qCisJCSAqIElmIHRoaXMgZGlkbid0IHdvcmssIHVzZSB0aGUgT3Jsb3Ygc2VhcmNoIGFsZ29yaXRobQorCQkgKiB0byBmaW5kIGEgbmV3IGZsZXggZ3JvdXA7IHdlIHBhc3MgaW4gdGhlIG1vZGUgdG8KKwkJICogYXZvaWQgdGhlIHRvcGRpciBhbGdvcml0aG1zLgorCQkgKi8KKwkJKmdyb3VwID0gcGFyZW50X2dyb3VwICsgZmxleF9zaXplOworCQlpZiAoKmdyb3VwID4gbmdyb3VwcykKKwkJCSpncm91cCA9IDA7CisJCXJldHVybiBmaW5kX2dyb3VwX29ybG92KHNiLCBwYXJlbnQsIGdyb3VwLCBtb2RlKTsKKwl9CiAKIAkvKgogCSAqIFRyeSB0byBwbGFjZSB0aGUgaW5vZGUgaW4gaXRzIHBhcmVudCBkaXJlY3RvcnkKQEAgLTY2NSw2ICs3NzEsMTEgQEAKIAlpZiAoU19JU0RJUihtb2RlKSkgewogCQljb3VudCA9IGV4dDRfdXNlZF9kaXJzX2NvdW50KHNiLCBnZHApICsgMTsKIAkJZXh0NF91c2VkX2RpcnNfc2V0KHNiLCBnZHAsIGNvdW50KTsKKwkJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CisJCQlleHQ0X2dyb3VwX3QgZiA9IGV4dDRfZmxleF9ncm91cChzYmksIGdyb3VwKTsKKworCQkJYXRvbWljX2luYygmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZdLmZyZWVfaW5vZGVzKTsKKwkJfQogCX0KIAlnZHAtPmJnX2NoZWNrc3VtID0gZXh0NF9ncm91cF9kZXNjX2NzdW0oc2JpLCBncm91cCwgZ2RwKTsKIGVycl9yZXQ6CkBAIC03MTYsMTAgKzgyNywxMCBAQAogCXNiaSA9IEVYVDRfU0Ioc2IpOwogCWVzID0gc2JpLT5zX2VzOwogCi0JaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CisJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4ICYmIHRlc3Rfb3B0KHNiLCBPTERBTExPQykpIHsKIAkJcmV0MiA9IGZpbmRfZ3JvdXBfZmxleChzYiwgZGlyLCAmZ3JvdXApOwogCQlpZiAocmV0MiA9PSAtMSkgewotCQkJcmV0MiA9IGZpbmRfZ3JvdXBfb3RoZXIoc2IsIGRpciwgJmdyb3VwKTsKKwkJCXJldDIgPSBmaW5kX2dyb3VwX290aGVyKHNiLCBkaXIsICZncm91cCwgbW9kZSk7CiAJCQlpZiAocmV0MiA9PSAwICYmIG9uY2UpCiAJCQkJb25jZSA9IDA7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJleHQ0OiBmaW5kX2dyb3VwX2ZsZXggIgpAQCAtNzMzLDExICs4NDQsMTIgQEAKIAkJaWYgKHRlc3Rfb3B0KHNiLCBPTERBTExPQykpCiAJCQlyZXQyID0gZmluZF9ncm91cF9kaXIoc2IsIGRpciwgJmdyb3VwKTsKIAkJZWxzZQotCQkJcmV0MiA9IGZpbmRfZ3JvdXBfb3Jsb3Yoc2IsIGRpciwgJmdyb3VwKTsKKwkJCXJldDIgPSBmaW5kX2dyb3VwX29ybG92KHNiLCBkaXIsICZncm91cCwgbW9kZSk7CiAJfSBlbHNlCi0JCXJldDIgPSBmaW5kX2dyb3VwX290aGVyKHNiLCBkaXIsICZncm91cCk7CisJCXJldDIgPSBmaW5kX2dyb3VwX290aGVyKHNiLCBkaXIsICZncm91cCwgbW9kZSk7CiAKIGdvdF9ncm91cDoKKwlFWFQ0X0koZGlyKS0+aV9sYXN0X2FsbG9jX2dyb3VwID0gZ3JvdXA7CiAJZXJyID0gLUVOT1NQQzsKIAlpZiAocmV0MiA9PSAtMSkKIAkJZ290byBvdXQ7CkBAIC04NTgsOSArOTcwLDcgQEAKIAogCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewogCQlmbGV4X2dyb3VwID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgZ3JvdXApOwotCQlzcGluX2xvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7Ci0JCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2lub2Rlcy0tOwotCQlzcGluX3VubG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKKwkJYXRvbWljX2RlYygmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzKTsKIAl9CiAKIAlpbm9kZS0+aV91aWQgPSBjdXJyZW50X2ZzdWlkKCk7CkBAIC04ODUsMTkgKzk5NSwxNiBAQAogCWVpLT5pX2Rpc2tzaXplID0gMDsKIAogCS8qCi0JICogRG9uJ3QgaW5oZXJpdCBleHRlbnQgZmxhZyBmcm9tIGRpcmVjdG9yeS4gV2Ugc2V0IGV4dGVudCBmbGFnIG9uCi0JICogbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnkgYW5kIGZpbGUgb25seSBpZiAtbyBleHRlbnQgbW91bnQgb3B0aW9uIGlzCi0JICogc3BlY2lmaWVkCisJICogRG9uJ3QgaW5oZXJpdCBleHRlbnQgZmxhZyBmcm9tIGRpcmVjdG9yeSwgYW1vbmdzdCBvdGhlcnMuIFdlIHNldAorCSAqIGV4dGVudCBmbGFnIG9uIG5ld2x5IGNyZWF0ZWQgZGlyZWN0b3J5IGFuZCBmaWxlIG9ubHkgaWYgLW8gZXh0ZW50CisJICogbW91bnQgb3B0aW9uIGlzIHNwZWNpZmllZAogCSAqLwotCWVpLT5pX2ZsYWdzID0gRVhUNF9JKGRpciktPmlfZmxhZ3MgJiB+KEVYVDRfSU5ERVhfRkx8RVhUNF9FWFRFTlRTX0ZMKTsKLQlpZiAoU19JU0xOSyhtb2RlKSkKLQkJZWktPmlfZmxhZ3MgJj0gfihFWFQ0X0lNTVVUQUJMRV9GTHxFWFQ0X0FQUEVORF9GTCk7Ci0JLyogZGlyc3luYyBvbmx5IGFwcGxpZXMgdG8gZGlyZWN0b3JpZXMgKi8KLQlpZiAoIVNfSVNESVIobW9kZSkpCi0JCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0RJUlNZTkNfRkw7CisJZWktPmlfZmxhZ3MgPQorCQlleHQ0X21hc2tfZmxhZ3MobW9kZSwgRVhUNF9JKGRpciktPmlfZmxhZ3MgJiBFWFQ0X0ZMX0lOSEVSSVRFRCk7CiAJZWktPmlfZmlsZV9hY2wgPSAwOwogCWVpLT5pX2R0aW1lID0gMDsKIAllaS0+aV9ibG9ja19ncm91cCA9IGdyb3VwOworCWVpLT5pX2xhc3RfYWxsb2NfZ3JvdXAgPSB+MDsKIAogCWV4dDRfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKIAlpZiAoSVNfRElSU1lOQyhpbm9kZSkpCmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggNzFkM2VjZC4uYTJlNzk1MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzcxLDYgKzM3MSwzNCBAQAogCXJldHVybiBuOwogfQogCitzdGF0aWMgaW50IF9fZXh0NF9jaGVja19ibG9ja3JlZihjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgdW5zaWduZWQgaW50ICpwLCB1bnNpZ25lZCBpbnQgbWF4KSB7CisKKwl1bnNpZ25lZCBpbnQgbWF4YmxvY2tzID0gZXh0NF9ibG9ja3NfY291bnQoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMpOworCXVuc2lnbmVkIGludCAqYnJlZiA9IHA7CisJd2hpbGUgKGJyZWYgPCBwK21heCkgeworCQlpZiAodW5saWtlbHkoKmJyZWYgPj0gbWF4YmxvY2tzKSkgeworCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgZnVuY3Rpb24sCisJCQkJICAgImJsb2NrIHJlZmVyZW5jZSAldSA+PSBtYXggKCV1KSAiCisJCQkJICAgImluIGlub2RlICMlbHUsIG9mZnNldD0lZCIsCisJCQkJICAgKmJyZWYsIG1heGJsb2NrcywKKwkJCQkgICBpbm9kZS0+aV9pbm8sIChpbnQpKGJyZWYtcCkpOworIAkJCXJldHVybiAtRUlPOworIAkJfQorCQlicmVmKys7CisgCX0KKyAJcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBleHQ0X2NoZWNrX2luZGlyZWN0X2Jsb2NrcmVmKGlub2RlLCBiaCkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2V4dDRfY2hlY2tfYmxvY2tyZWYoX19mdW5jX18sIGlub2RlLCAoX19sZTMyICopKGJoKS0+Yl9kYXRhLCAgXAorCQkJICAgICAgRVhUNF9BRERSX1BFUl9CTE9DSygoaW5vZGUpLT5pX3NiKSkKKworI2RlZmluZSBleHQ0X2NoZWNrX2lub2RlX2Jsb2NrcmVmKGlub2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2V4dDRfY2hlY2tfYmxvY2tyZWYoX19mdW5jX18sIGlub2RlLCBFWFQ0X0koaW5vZGUpLT5pX2RhdGEsICAgXAorCQkJICAgICAgRVhUNF9ORElSX0JMT0NLUykKKwogLyoqCiAgKglleHQ0X2dldF9icmFuY2ggLSByZWFkIHRoZSBjaGFpbiBvZiBpbmRpcmVjdCBibG9ja3MgbGVhZGluZyB0byBkYXRhCiAgKglAaW5vZGU6IGlub2RlIGluIHF1ZXN0aW9uCkBAIC00MTUsOSArNDQzLDIyIEBACiAJaWYgKCFwLT5rZXkpCiAJCWdvdG8gbm9fYmxvY2s7CiAJd2hpbGUgKC0tZGVwdGgpIHsKLQkJYmggPSBzYl9icmVhZChzYiwgbGUzMl90b19jcHUocC0+a2V5KSk7Ci0JCWlmICghYmgpCisJCWJoID0gc2JfZ2V0YmxrKHNiLCBsZTMyX3RvX2NwdShwLT5rZXkpKTsKKwkJaWYgKHVubGlrZWx5KCFiaCkpCiAJCQlnb3RvIGZhaWx1cmU7CisgICAgICAgICAgICAgICAgICAKKwkJaWYgKCFiaF91cHRvZGF0ZV9vcl9sb2NrKGJoKSkgeworCQkJaWYgKGJoX3N1Ym1pdF9yZWFkKGJoKSA8IDApIHsKKwkJCQlwdXRfYmgoYmgpOworCQkJCWdvdG8gZmFpbHVyZTsKKwkJCX0KKwkJCS8qIHZhbGlkYXRlIGJsb2NrIHJlZmVyZW5jZXMgKi8KKwkJCWlmIChleHQ0X2NoZWNrX2luZGlyZWN0X2Jsb2NrcmVmKGlub2RlLCBiaCkpIHsKKwkJCQlwdXRfYmgoYmgpOworCQkJCWdvdG8gZmFpbHVyZTsKKwkJCX0KKwkJfQorCQkKIAkJYWRkX2NoYWluKCsrcCwgYmgsIChfX2xlMzIgKiliaC0+Yl9kYXRhICsgKisrb2Zmc2V0cyk7CiAJCS8qIFJlYWRlcjogZW5kICovCiAJCWlmICghcC0+a2V5KQpAQCAtNDU5LDYgKzUwMCw4IEBACiAJZXh0NF9mc2Jsa190IGJnX3N0YXJ0OwogCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOwogCWV4dDRfZ3JwYmxrX3QgY29sb3VyOworCWV4dDRfZ3JvdXBfdCBibG9ja19ncm91cDsKKwlpbnQgZmxleF9zaXplID0gZXh0NF9mbGV4X2JnX3NpemUoRVhUNF9TQihpbm9kZS0+aV9zYikpOwogCiAJLyogVHJ5IHRvIGZpbmQgcHJldmlvdXMgYmxvY2sgKi8KIAlmb3IgKHAgPSBpbmQtPnAgLSAxOyBwID49IHN0YXJ0OyBwLS0pIHsKQEAgLTQ3NCw5ICs1MTcsMjIgQEAKIAkgKiBJdCBpcyBnb2luZyB0byBiZSByZWZlcnJlZCB0byBmcm9tIHRoZSBpbm9kZSBpdHNlbGY/IE9LLCBqdXN0IHB1dCBpdAogCSAqIGludG8gdGhlIHNhbWUgY3lsaW5kZXIgZ3JvdXAgdGhlbi4KIAkgKi8KLQliZ19zdGFydCA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oaW5vZGUtPmlfc2IsIGVpLT5pX2Jsb2NrX2dyb3VwKTsKKwlibG9ja19ncm91cCA9IGVpLT5pX2Jsb2NrX2dyb3VwOworCWlmIChmbGV4X3NpemUgPj0gRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRSkgeworCQlibG9ja19ncm91cCAmPSB+KGZsZXhfc2l6ZS0xKTsKKwkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCQlibG9ja19ncm91cCsrOworCX0KKwliZ19zdGFydCA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oaW5vZGUtPmlfc2IsIGJsb2NrX2dyb3VwKTsKIAlsYXN0X2Jsb2NrID0gZXh0NF9ibG9ja3NfY291bnQoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMpIC0gMTsKIAorCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGRlbGF5ZWQgYWxsb2NhdGlvbiwgd2UgZG9uJ3QgbmVlZCB0YWtlCisJICogY29sb3VyIGludG8gYWNjb3VudC4KKwkgKi8KKwlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERFTEFMTE9DKSkKKwkJcmV0dXJuIGJnX3N0YXJ0OworCiAJaWYgKGJnX3N0YXJ0ICsgRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSA8PSBsYXN0X2Jsb2NrKQogCQljb2xvdXIgPSAoY3VycmVudC0+cGlkICUgMTYpICoKIAkJCShFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpIC8gMTYpOwpAQCAtMTA1Miw5ICsxMTA4LDE2IEBACiAJLyoKIAkgKiBmcmVlIHRob3NlIG92ZXItYm9va2luZyBxdW90YSBmb3IgbWV0YWRhdGEgYmxvY2tzCiAJICovCi0KIAlpZiAobWRiX2ZyZWUpCiAJCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZGJfZnJlZSk7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgZG9uZSBhbGwgdGhlIHBlbmRpbmcgYmxvY2sgYWxsb2NhdGlvbnMgYW5kIGlmCisJICogdGhlcmUgYXJlbid0IGFueSB3cml0ZXJzIG9uIHRoZSBpbm9kZSwgd2UgY2FuIGRpc2NhcmQgdGhlCisJICogaW5vZGUncyBwcmVhbGxvY2F0aW9ucy4KKwkgKi8KKwlpZiAoIXRvdGFsICYmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPT0gMCkpCisJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiB9CiAKIC8qCkBAIC0xNjg4LDkgKzE3NTEsMTAgQEAKIAogc3RydWN0IG1wYWdlX2RhX2RhdGEgewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkIGxiaDsJCQkvKiBleHRlbnQgb2YgYmxvY2tzICovCisJc2VjdG9yX3QgYl9ibG9ja25yOwkJLyogc3RhcnQgYmxvY2sgbnVtYmVyIG9mIGV4dGVudCAqLworCXNpemVfdCBiX3NpemU7CQkJLyogc2l6ZSBvZiBleHRlbnQgKi8KKwl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CQkvKiBzdGF0ZSBvZiB0aGUgZXh0ZW50ICovCiAJdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlLCBuZXh0X3BhZ2U7CS8qIGV4dGVudCBvZiBwYWdlcyAqLwotCWdldF9ibG9ja190ICpnZXRfYmxvY2s7CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmM7CiAJaW50IGlvX2RvbmU7CiAJaW50IHBhZ2VzX3dyaXR0ZW47CkBAIC0xNzA0LDcgKzE3NjgsNiBAQAogICogQG1wZC0+aW5vZGU6IGlub2RlCiAgKiBAbXBkLT5maXJzdF9wYWdlOiBmaXJzdCBwYWdlIG9mIHRoZSBleHRlbnQKICAqIEBtcGQtPm5leHRfcGFnZTogcGFnZSBhZnRlciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBleHRlbnQKLSAqIEBtcGQtPmdldF9ibG9jazogdGhlIGZpbGVzeXN0ZW0ncyBibG9jayBtYXBwZXIgZnVuY3Rpb24KICAqCiAgKiBCeSB0aGUgdGltZSBtcGFnZV9kYV9zdWJtaXRfaW8oKSBpcyBjYWxsZWQgd2UgZXhwZWN0IGFsbCBibG9ja3MKICAqIHRvIGJlIGFsbG9jYXRlZC4gdGhpcyBtYXkgYmUgd3JvbmcgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCkBAIC0xNzI0LDcgKzE3ODcsNyBAQAogCS8qCiAJICogV2UgbmVlZCB0byBzdGFydCBmcm9tIHRoZSBmaXJzdF9wYWdlIHRvIHRoZSBuZXh0X3BhZ2UgLSAxCiAJICogdG8gbWFrZSBzdXJlIHdlIGFsc28gd3JpdGUgdGhlIG1hcHBlZCBkaXJ0eSBidWZmZXJfaGVhZHMuCi0JICogSWYgd2UgbG9vayBhdCBtcGQtPmxiaC5iX2Jsb2NrbnIgd2Ugd291bGQgb25seSBiZSBsb29raW5nCisJICogSWYgd2UgbG9vayBhdCBtcGQtPmJfYmxvY2tuciB3ZSB3b3VsZCBvbmx5IGJlIGxvb2tpbmcKIAkgKiBhdCB0aGUgY3VycmVudGx5IG1hcHBlZCBidWZmZXJfaGVhZHMuCiAJICovCiAJaW5kZXggPSBtcGQtPmZpcnN0X3BhZ2U7CkBAIC0xOTE0LDY4ICsxOTc3LDExMSBAQAogCXJldHVybjsKIH0KIAorI2RlZmluZQkJRVhUNF9ERUxBTExPQ19SU1ZFRAkxCitzdGF0aWMgaW50IGV4dDRfZGFfZ2V0X2Jsb2NrX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOworCWxvZmZfdCBkaXNrc2l6ZSA9IEVYVDRfSShpbm9kZSktPmlfZGlza3NpemU7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisKKwloYW5kbGUgPSBleHQ0X2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKKwlCVUdfT04oIWhhbmRsZSk7CisJcmV0ID0gZXh0NF9nZXRfYmxvY2tzX3dyYXAoaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBtYXhfYmxvY2tzLAorCQkJCSAgIGJoX3Jlc3VsdCwgY3JlYXRlLCAwLCBFWFQ0X0RFTEFMTE9DX1JTVkVEKTsKKwlpZiAocmV0IDw9IDApCisJCXJldHVybiByZXQ7CisKKwliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisKKwlpZiAoZXh0NF9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKKwkJaW50IHJldHZhbDsKKwkJcmV0dmFsID0gZXh0NF9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7CisJCWlmIChyZXR2YWwpCisJCQkvKgorCQkJICogRmFpbGVkIHRvIGFkZCBpbm9kZSBmb3Igb3JkZXJlZCBtb2RlLiBEb24ndAorCQkJICogdXBkYXRlIGZpbGUgc2l6ZQorCQkJICovCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qCisJICogVXBkYXRlIG9uLWRpc2sgc2l6ZSBhbG9uZyB3aXRoIGJsb2NrIGFsbG9jYXRpb24gd2UgZG9uJ3QKKwkgKiB1c2UgJ2V4dGVuZF9kaXNrc2l6ZScgYXMgc2l6ZSBtYXkgY2hhbmdlIHdpdGhpbiBhbHJlYWR5CisJICogYWxsb2NhdGVkIGJsb2NrIC1ienp6CisJICovCisJZGlza3NpemUgPSAoKGxvZmZfdCkgaWJsb2NrICsgcmV0KSA8PCBpbm9kZS0+aV9ibGtiaXRzOworCWlmIChkaXNrc2l6ZSA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJZGlza3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKGRpc2tzaXplID4gRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSkgeworCQlleHQ0X3VwZGF0ZV9pX2Rpc2tzaXplKGlub2RlLCBkaXNrc2l6ZSk7CisJCXJldCA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBtcGFnZV9kYV9tYXBfYmxvY2tzIC0gZ28gdGhyb3VnaCBnaXZlbiBzcGFjZQogICoKLSAqIEBtcGQtPmxiaCAtIGJoIGRlc2NyaWJpbmcgc3BhY2UKLSAqIEBtcGQtPmdldF9ibG9jayAtIHRoZSBmaWxlc3lzdGVtJ3MgYmxvY2sgbWFwcGVyIGZ1bmN0aW9uCisgKiBAbXBkIC0gYmggZGVzY3JpYmluZyBzcGFjZQogICoKICAqIFRoZSBmdW5jdGlvbiBza2lwcyBzcGFjZSB3ZSBrbm93IGlzIGFscmVhZHkgbWFwcGVkIHRvIGRpc2sgYmxvY2tzLgogICoKICAqLwotc3RhdGljIGludCAgbXBhZ2VfZGFfbWFwX2Jsb2NrcyhzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkKQorc3RhdGljIGludCBtcGFnZV9kYV9tYXBfYmxvY2tzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkIG5ldzsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxiaCA9ICZtcGQtPmxiaDsKIAlzZWN0b3JfdCBuZXh0OwogCiAJLyoKIAkgKiBXZSBjb25zaWRlciBvbmx5IG5vbi1tYXBwZWQgYW5kIG5vbi1hbGxvY2F0ZWQgYmxvY2tzCiAJICovCi0JaWYgKGJ1ZmZlcl9tYXBwZWQobGJoKSAmJiAhYnVmZmVyX2RlbGF5KGxiaCkpCisJaWYgKChtcGQtPmJfc3RhdGUgICYgKDEgPDwgQkhfTWFwcGVkKSkgJiYKKwkgICAgIShtcGQtPmJfc3RhdGUgJiAoMSA8PCBCSF9EZWxheSkpKQogCQlyZXR1cm4gMDsKLQluZXcuYl9zdGF0ZSA9IGxiaC0+Yl9zdGF0ZTsKKwluZXcuYl9zdGF0ZSA9IG1wZC0+Yl9zdGF0ZTsKIAluZXcuYl9ibG9ja25yID0gMDsKLQluZXcuYl9zaXplID0gbGJoLT5iX3NpemU7Ci0JbmV4dCA9IGxiaC0+Yl9ibG9ja25yOworCW5ldy5iX3NpemUgPSBtcGQtPmJfc2l6ZTsKKwluZXh0ID0gbXBkLT5iX2Jsb2NrbnI7CiAJLyoKIAkgKiBJZiB3ZSBkaWRuJ3QgYWNjdW11bGF0ZSBhbnl0aGluZwogCSAqIHRvIHdyaXRlIHNpbXBseSByZXR1cm4KIAkgKi8KIAlpZiAoIW5ldy5iX3NpemUpCiAJCXJldHVybiAwOwotCWVyciA9IG1wZC0+Z2V0X2Jsb2NrKG1wZC0+aW5vZGUsIG5leHQsICZuZXcsIDEpOwotCWlmIChlcnIpIHsKIAotCQkvKiBJZiBnZXQgYmxvY2sgcmV0dXJucyB3aXRoIGVycm9yCi0JCSAqIHdlIHNpbXBseSByZXR1cm4uIExhdGVyIHdyaXRlcGFnZQotCQkgKiB3aWxsIHJlZGlydHkgdGhlIHBhZ2UgYW5kIHdyaXRlcGFnZXMKLQkJICogd2lsbCBmaW5kIHRoZSBkaXJ0eSBwYWdlIGFnYWluCisJZXJyID0gZXh0NF9kYV9nZXRfYmxvY2tfd3JpdGUobXBkLT5pbm9kZSwgbmV4dCwgJm5ldywgMSk7CisJaWYgKGVycikgeworCQkvKgorCQkgKiBJZiBnZXQgYmxvY2sgcmV0dXJucyB3aXRoIGVycm9yIHdlIHNpbXBseQorCQkgKiByZXR1cm4uIExhdGVyIHdyaXRlcGFnZSB3aWxsIHJlZGlydHkgdGhlIHBhZ2UgYW5kCisJCSAqIHdyaXRlcGFnZXMgd2lsbCBmaW5kIHRoZSBkaXJ0eSBwYWdlIGFnYWluCiAJCSAqLwogCQlpZiAoZXJyID09IC1FQUdBSU4pCiAJCQlyZXR1cm4gMDsKIAogCQlpZiAoZXJyID09IC1FTk9TUEMgJiYKLQkJCQlleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKG1wZC0+aW5vZGUtPmlfc2IpKSB7CisJCSAgICBleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKG1wZC0+aW5vZGUtPmlfc2IpKSB7CiAJCQltcGQtPnJldHZhbCA9IGVycjsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkJLyoKLQkJICogZ2V0IGJsb2NrIGZhaWx1cmUgd2lsbCBjYXVzZSB1cwotCQkgKiB0byBsb29wIGluIHdyaXRlcGFnZXMuIEJlY2F1c2UKLQkJICogYV9vcHMtPndyaXRlcGFnZSB3b24ndCBiZSBhYmxlIHRvCi0JCSAqIG1ha2UgcHJvZ3Jlc3MuIFRoZSBwYWdlIHdpbGwgYmUgcmVkaXJ0aWVkCi0JCSAqIGJ5IHdyaXRlcGFnZSBhbmQgd3JpdGVwYWdlcyB3aWxsIGFnYWluCi0JCSAqIHRyeSB0byB3cml0ZSB0aGUgc2FtZS4KKwkJICogZ2V0IGJsb2NrIGZhaWx1cmUgd2lsbCBjYXVzZSB1cyB0byBsb29wIGluCisJCSAqIHdyaXRlcGFnZXMsIGJlY2F1c2UgYV9vcHMtPndyaXRlcGFnZSB3b24ndCBiZSBhYmxlCisJCSAqIHRvIG1ha2UgcHJvZ3Jlc3MuIFRoZSBwYWdlIHdpbGwgYmUgcmVkaXJ0aWVkIGJ5CisJCSAqIHdyaXRlcGFnZSBhbmQgd3JpdGVwYWdlcyB3aWxsIGFnYWluIHRyeSB0byB3cml0ZQorCQkgKiB0aGUgc2FtZS4KIAkJICovCiAJCXByaW50ayhLRVJOX0VNRVJHICIlcyBibG9jayBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgaW5vZGUgJWx1ICIKIAkJCQkgICJhdCBsb2dpY2FsIG9mZnNldCAlbGx1IHdpdGggbWF4IGJsb2NrcyAiCiAJCQkJICAiJXpkIHdpdGggZXJyb3IgJWRcbiIsCiAJCQkJICBfX2Z1bmNfXywgbXBkLT5pbm9kZS0+aV9pbm8sCiAJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW5leHQsCi0JCQkJICBsYmgtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMsIGVycik7CisJCQkJICBtcGQtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMsIGVycik7CiAJCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIHNob3VsZCBub3QgaGFwcGVuLiEhICIKIAkJCQkJIkRhdGEgd2lsbCBiZSBsb3N0XG4iKTsKIAkJaWYgKGVyciA9PSAtRU5PU1BDKSB7CkBAIC0xOTgzLDcgKzIwODksNyBAQAogCQl9CiAJCS8qIGludmxhaWRhdGUgYWxsIHRoZSBwYWdlcyAqLwogCQlleHQ0X2RhX2Jsb2NrX2ludmFsaWRhdGVwYWdlcyhtcGQsIG5leHQsCi0JCQkJbGJoLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzKTsKKwkJCQltcGQtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlCVUdfT04obmV3LmJfc2l6ZSA9PSAwKTsKQEAgLTE5OTUsNyArMjEwMSw4IEBACiAJICogSWYgYmxvY2tzIGFyZSBkZWxheWVkIG1hcmtlZCwgd2UgbmVlZCB0bwogCSAqIHB1dCBhY3R1YWwgYmxvY2tuciBhbmQgZHJvcCBkZWxheWVkIGJpdAogCSAqLwotCWlmIChidWZmZXJfZGVsYXkobGJoKSB8fCBidWZmZXJfdW53cml0dGVuKGxiaCkpCisJaWYgKChtcGQtPmJfc3RhdGUgJiAoMSA8PCBCSF9EZWxheSkpIHx8CisJICAgIChtcGQtPmJfc3RhdGUgJiAoMSA8PCBCSF9VbndyaXR0ZW4pKSkKIAkJbXBhZ2VfcHV0X2Jucl90b19iaHMobXBkLCBuZXh0LCAmbmV3KTsKIAogCXJldHVybiAwOwpAQCAtMjAxNCwxMiArMjEyMSwxMSBAQAogICogdGhlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29sbGVjdCBjb250aWcuIGJsb2NrcyBpbiBzYW1lIHN0YXRlCiAgKi8KIHN0YXRpYyB2b2lkIG1wYWdlX2FkZF9iaF90b19leHRlbnQoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCwKLQkJCQkgICBzZWN0b3JfdCBsb2dpY2FsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorCQkJCSAgIHNlY3Rvcl90IGxvZ2ljYWwsIHNpemVfdCBiX3NpemUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBiX3N0YXRlKQogewogCXNlY3Rvcl90IG5leHQ7Ci0Jc2l6ZV90IGJfc2l6ZSA9IGJoLT5iX3NpemU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpsYmggPSAmbXBkLT5sYmg7Ci0JaW50IG5yYmxvY2tzID0gbGJoLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzOworCWludCBucmJsb2NrcyA9IG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0czsKIAogCS8qIGNoZWNrIGlmIHRoZXJlc2VydmVkIGpvdXJuYWwgY3JlZGl0cyBtaWdodCBvdmVyZmxvdyAqLwogCWlmICghKEVYVDRfSShtcGQtPmlub2RlKS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpIHsKQEAgLTIwNDYsMTkgKzIxNTIsMTkgQEAKIAkvKgogCSAqIEZpcnN0IGJsb2NrIGluIHRoZSBleHRlbnQKIAkgKi8KLQlpZiAobGJoLT5iX3NpemUgPT0gMCkgewotCQlsYmgtPmJfYmxvY2tuciA9IGxvZ2ljYWw7Ci0JCWxiaC0+Yl9zaXplID0gYl9zaXplOwotCQlsYmgtPmJfc3RhdGUgPSBiaC0+Yl9zdGF0ZSAmIEJIX0ZMQUdTOworCWlmIChtcGQtPmJfc2l6ZSA9PSAwKSB7CisJCW1wZC0+Yl9ibG9ja25yID0gbG9naWNhbDsKKwkJbXBkLT5iX3NpemUgPSBiX3NpemU7CisJCW1wZC0+Yl9zdGF0ZSA9IGJfc3RhdGUgJiBCSF9GTEFHUzsKIAkJcmV0dXJuOwogCX0KIAotCW5leHQgPSBsYmgtPmJfYmxvY2tuciArIG5yYmxvY2tzOworCW5leHQgPSBtcGQtPmJfYmxvY2tuciArIG5yYmxvY2tzOwogCS8qCiAJICogQ2FuIHdlIG1lcmdlIHRoZSBibG9jayB0byBvdXIgYmlnIGV4dGVudD8KIAkgKi8KLQlpZiAobG9naWNhbCA9PSBuZXh0ICYmIChiaC0+Yl9zdGF0ZSAmIEJIX0ZMQUdTKSA9PSBsYmgtPmJfc3RhdGUpIHsKLQkJbGJoLT5iX3NpemUgKz0gYl9zaXplOworCWlmIChsb2dpY2FsID09IG5leHQgJiYgKGJfc3RhdGUgJiBCSF9GTEFHUykgPT0gbXBkLT5iX3N0YXRlKSB7CisJCW1wZC0+Yl9zaXplICs9IGJfc2l6ZTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjA4Nyw3ICsyMTkzLDcgQEAKIHsKIAlzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkID0gZGF0YTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbXBkLT5pbm9kZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZCwgZmFrZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKIAlzZWN0b3JfdCBsb2dpY2FsOwogCiAJaWYgKG1wZC0+aW9fZG9uZSkgewpAQCAtMjEyOSw5ICsyMjM1LDkgQEAKIAkJLyoKIAkJICogLi4uIGFuZCBibG9ja3MKIAkJICovCi0JCW1wZC0+bGJoLmJfc2l6ZSA9IDA7Ci0JCW1wZC0+bGJoLmJfc3RhdGUgPSAwOwotCQltcGQtPmxiaC5iX2Jsb2NrbnIgPSAwOworCQltcGQtPmJfc2l6ZSA9IDA7CisJCW1wZC0+Yl9zdGF0ZSA9IDA7CisJCW1wZC0+Yl9ibG9ja25yID0gMDsKIAl9CiAKIAltcGQtPm5leHRfcGFnZSA9IHBhZ2UtPmluZGV4ICsgMTsKQEAgLTIxMzksMTYgKzIyNDUsOCBAQAogCQkgIChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CiAKIAlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKLQkJLyoKLQkJICogVGhlcmUgaXMgbm8gYXR0YWNoZWQgYnVmZmVyIGhlYWRzIHlldCAobW1hcD8pCi0JCSAqIHdlIHRyZWF0IHRoZSBwYWdlIGFzZnVsbCBvZiBkaXJ0eSBibG9ja3MKLQkJICovCi0JCWJoID0gJmZha2U7Ci0JCWJoLT5iX3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7Ci0JCWJoLT5iX3N0YXRlID0gMDsKLQkJc2V0X2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwotCQltcGFnZV9hZGRfYmhfdG9fZXh0ZW50KG1wZCwgbG9naWNhbCwgYmgpOworCQltcGFnZV9hZGRfYmhfdG9fZXh0ZW50KG1wZCwgbG9naWNhbCwgUEFHRV9DQUNIRV9TSVpFLAorCQkJCSAgICAgICAoMSA8PCBCSF9EaXJ0eSkgfCAoMSA8PCBCSF9VcHRvZGF0ZSkpOwogCQlpZiAobXBkLT5pb19kb25lKQogCQkJcmV0dXJuIE1QQUdFX0RBX0VYVEVOVF9UQUlMOwogCX0gZWxzZSB7CkBAIC0yMTY2LDggKzIyNjQsMTAgQEAKIAkJCSAqIHdpdGggdGhlIHBhZ2UgaW4gZXh0NF9kYV93cml0ZXBhZ2UKIAkJCSAqLwogCQkJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkgJiYKLQkJCQkoIWJ1ZmZlcl9tYXBwZWQoYmgpIHx8IGJ1ZmZlcl9kZWxheShiaCkpKSB7Ci0JCQkJbXBhZ2VfYWRkX2JoX3RvX2V4dGVudChtcGQsIGxvZ2ljYWwsIGJoKTsKKwkJCSAgICAoIWJ1ZmZlcl9tYXBwZWQoYmgpIHx8IGJ1ZmZlcl9kZWxheShiaCkpKSB7CisJCQkJbXBhZ2VfYWRkX2JoX3RvX2V4dGVudChtcGQsIGxvZ2ljYWwsCisJCQkJCQkgICAgICAgYmgtPmJfc2l6ZSwKKwkJCQkJCSAgICAgICBiaC0+Yl9zdGF0ZSk7CiAJCQkJaWYgKG1wZC0+aW9fZG9uZSkKIAkJCQkJcmV0dXJuIE1QQUdFX0RBX0VYVEVOVF9UQUlMOwogCQkJfSBlbHNlIGlmIChidWZmZXJfZGlydHkoYmgpICYmIChidWZmZXJfbWFwcGVkKGJoKSkpIHsKQEAgLTIxNzksOSArMjI3OSw4IEBACiAJCQkJICogdW5tYXBwZWQgYnVmZmVyX2hlYWQgbGF0ZXIgd2UgbmVlZCB0bwogCQkJCSAqIHVzZSB0aGUgYl9zdGF0ZSBmbGFnIG9mIHRoYXQgYnVmZmVyX2hlYWQuCiAJCQkJICovCi0JCQkJaWYgKG1wZC0+bGJoLmJfc2l6ZSA9PSAwKQotCQkJCQltcGQtPmxiaC5iX3N0YXRlID0KLQkJCQkJCWJoLT5iX3N0YXRlICYgQkhfRkxBR1M7CisJCQkJaWYgKG1wZC0+Yl9zaXplID09IDApCisJCQkJCW1wZC0+Yl9zdGF0ZSA9IGJoLT5iX3N0YXRlICYgQkhfRkxBR1M7CiAJCQl9CiAJCQlsb2dpY2FsKys7CiAJCX0gd2hpbGUgKChiaCA9IGJoLT5iX3RoaXNfcGFnZSkgIT0gaGVhZCk7CkBAIC0yMTkxLDUxICsyMjkwLDYgQEAKIH0KIAogLyoKLSAqIG1wYWdlX2RhX3dyaXRlcGFnZXMgLSB3YWxrIHRoZSBsaXN0IG9mIGRpcnR5IHBhZ2VzIG9mIHRoZSBnaXZlbgotICogYWRkcmVzcyBzcGFjZSwgYWxsb2NhdGVzIG5vbi1hbGxvY2F0ZWQgYmxvY2tzLCBtYXBzIG5ld2x5LWFsbG9jYXRlZAotICogYmxvY2tzIHRvIGV4aXN0aW5nIGJocyBhbmQgaXNzdWUgSU8gdGhlbQotICoKLSAqIEBtYXBwaW5nOiBhZGRyZXNzIHNwYWNlIHN0cnVjdHVyZSB0byB3cml0ZQotICogQHdiYzogc3VidHJhY3QgdGhlIG51bWJlciBvZiB3cml0dGVuIHBhZ2VzIGZyb20gKkB3YmMtPm5yX3RvX3dyaXRlCi0gKiBAZ2V0X2Jsb2NrOiB0aGUgZmlsZXN5c3RlbSdzIGJsb2NrIG1hcHBlciBmdW5jdGlvbi4KLSAqCi0gKiBUaGlzIGlzIGEgbGlicmFyeSBmdW5jdGlvbiwgd2hpY2ggaW1wbGVtZW50cyB0aGUgd3JpdGVwYWdlcygpCi0gKiBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbi4KLSAqLwotc3RhdGljIGludCBtcGFnZV9kYV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAotCQkJICAgICAgIHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQpCi17Ci0JaW50IHJldDsKLQotCWlmICghbXBkLT5nZXRfYmxvY2spCi0JCXJldHVybiBnZW5lcmljX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKLQotCW1wZC0+bGJoLmJfc2l6ZSA9IDA7Ci0JbXBkLT5sYmguYl9zdGF0ZSA9IDA7Ci0JbXBkLT5sYmguYl9ibG9ja25yID0gMDsKLQltcGQtPmZpcnN0X3BhZ2UgPSAwOwotCW1wZC0+bmV4dF9wYWdlID0gMDsKLQltcGQtPmlvX2RvbmUgPSAwOwotCW1wZC0+cGFnZXNfd3JpdHRlbiA9IDA7Ci0JbXBkLT5yZXR2YWwgPSAwOwotCi0JcmV0ID0gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX21wYWdlX2RhX3dyaXRlcGFnZSwgbXBkKTsKLQkvKgotCSAqIEhhbmRsZSBsYXN0IGV4dGVudCBvZiBwYWdlcwotCSAqLwotCWlmICghbXBkLT5pb19kb25lICYmIG1wZC0+bmV4dF9wYWdlICE9IG1wZC0+Zmlyc3RfcGFnZSkgewotCQlpZiAobXBhZ2VfZGFfbWFwX2Jsb2NrcyhtcGQpID09IDApCi0JCQltcGFnZV9kYV9zdWJtaXRfaW8obXBkKTsKLQotCQltcGQtPmlvX2RvbmUgPSAxOwotCQlyZXQgPSBNUEFHRV9EQV9FWFRFTlRfVEFJTDsKLQl9Ci0Jd2JjLT5ucl90b193cml0ZSAtPSBtcGQtPnBhZ2VzX3dyaXR0ZW47Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIHRoaXMgaXMgYSBzcGVjaWFsIGNhbGxiYWNrIGZvciAtPndyaXRlX2JlZ2luKCkgb25seQogICogaXQncyBpbnRlbnRpb24gaXMgdG8gcmV0dXJuIG1hcHBlZCBibG9jayBvciByZXNlcnZlIHNwYWNlCiAgKi8KQEAgLTIyNzQsNTEgKzIzMjgsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLSNkZWZpbmUJCUVYVDRfREVMQUxMT0NfUlNWRUQJMQotc3RhdGljIGludCBleHQ0X2RhX2dldF9ibG9ja193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBtYXhfYmxvY2tzID0gYmhfcmVzdWx0LT5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKLQlsb2ZmX3QgZGlza3NpemUgPSBFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplOwotCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwotCi0JaGFuZGxlID0gZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7Ci0JQlVHX09OKCFoYW5kbGUpOwotCXJldCA9IGV4dDRfZ2V0X2Jsb2Nrc193cmFwKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywKLQkJCWJoX3Jlc3VsdCwgY3JlYXRlLCAwLCBFWFQ0X0RFTEFMTE9DX1JTVkVEKTsKLQlpZiAocmV0ID4gMCkgewotCi0JCWJoX3Jlc3VsdC0+Yl9zaXplID0gKHJldCA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKLQotCQlpZiAoZXh0NF9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpIHsKLQkJCWludCByZXR2YWw7Ci0JCQlyZXR2YWwgPSBleHQ0X2piZDJfZmlsZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKLQkJCWlmIChyZXR2YWwpCi0JCQkJLyoKLQkJCQkgKiBGYWlsZWQgdG8gYWRkIGlub2RlIGZvciBvcmRlcmVkCi0JCQkJICogbW9kZS4gRG9uJ3QgdXBkYXRlIGZpbGUgc2l6ZQotCQkJCSAqLwotCQkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQotCQkvKgotCQkgKiBVcGRhdGUgb24tZGlzayBzaXplIGFsb25nIHdpdGggYmxvY2sgYWxsb2NhdGlvbgotCQkgKiB3ZSBkb24ndCB1c2UgJ2V4dGVuZF9kaXNrc2l6ZScgYXMgc2l6ZSBtYXkgY2hhbmdlCi0JCSAqIHdpdGhpbiBhbHJlYWR5IGFsbG9jYXRlZCBibG9jayAtYnp6egotCQkgKi8KLQkJZGlza3NpemUgPSAoKGxvZmZfdCkgaWJsb2NrICsgcmV0KSA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCQlpZiAoZGlza3NpemUgPiBpX3NpemVfcmVhZChpbm9kZSkpCi0JCQlkaXNrc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQkJaWYgKGRpc2tzaXplID4gRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewotCQkJZXh0NF91cGRhdGVfaV9kaXNrc2l6ZShpbm9kZSwgZGlza3NpemUpOwotCQkJcmV0ID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlyZXQgPSAwOwotCX0KLQlyZXR1cm4gcmV0OwotfQogCiBzdGF0aWMgaW50IGV4dDRfYmhfdW5tYXBwZWRfb3JfZGVsYXkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKQEAgLTI1NjksOCArMjU3OCwzOCBAQAogCQkJZHVtcF9zdGFjaygpOwogCQkJZ290byBvdXRfd3JpdGVwYWdlczsKIAkJfQotCQltcGQuZ2V0X2Jsb2NrID0gZXh0NF9kYV9nZXRfYmxvY2tfd3JpdGU7Ci0JCXJldCA9IG1wYWdlX2RhX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCAmbXBkKTsKKworCQkvKgorCQkgKiBOb3cgY2FsbCBfX21wYWdlX2RhX3dyaXRlcGFnZSB0byBmaW5kIHRoZSBuZXh0CisJCSAqIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIGxvZ2ljYWwgYmxvY2tzIHRoYXQgbmVlZAorCQkgKiBibG9ja3MgdG8gYmUgYWxsb2NhdGVkIGJ5IGV4dDQuICBXZSBkb24ndCBhY3R1YWxseQorCQkgKiBzdWJtaXQgdGhlIGJsb2NrcyBmb3IgSS9PIGhlcmUsIGV2ZW4gdGhvdWdoCisJCSAqIHdyaXRlX2NhY2hlX3BhZ2VzIHRoaW5rcyBpdCB3aWxsLCBhbmQgd2lsbCBzZXQgdGhlCisJCSAqIHBhZ2VzIGFzIGNsZWFuIGZvciB3cml0ZSBiZWZvcmUgY2FsbGluZworCQkgKiBfX21wYWdlX2RhX3dyaXRlcGFnZSgpLgorCQkgKi8KKwkJbXBkLmJfc2l6ZSA9IDA7CisJCW1wZC5iX3N0YXRlID0gMDsKKwkJbXBkLmJfYmxvY2tuciA9IDA7CisJCW1wZC5maXJzdF9wYWdlID0gMDsKKwkJbXBkLm5leHRfcGFnZSA9IDA7CisJCW1wZC5pb19kb25lID0gMDsKKwkJbXBkLnBhZ2VzX3dyaXR0ZW4gPSAwOworCQltcGQucmV0dmFsID0gMDsKKwkJcmV0ID0gd3JpdGVfY2FjaGVfcGFnZXMobWFwcGluZywgd2JjLCBfX21wYWdlX2RhX3dyaXRlcGFnZSwKKwkJCQkJJm1wZCk7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgYSBjb250aWdvdXMgZXh0ZW50IG9mIHBhZ2VzIGFuZCB3ZQorCQkgKiBoYXZlbid0IGRvbmUgdGhlIEkvTyB5ZXQsIG1hcCB0aGUgYmxvY2tzIGFuZCBzdWJtaXQKKwkJICogdGhlbSBmb3IgSS9PLgorCQkgKi8KKwkJaWYgKCFtcGQuaW9fZG9uZSAmJiBtcGQubmV4dF9wYWdlICE9IG1wZC5maXJzdF9wYWdlKSB7CisJCQlpZiAobXBhZ2VfZGFfbWFwX2Jsb2NrcygmbXBkKSA9PSAwKQorCQkJCW1wYWdlX2RhX3N1Ym1pdF9pbygmbXBkKTsKKwkJCW1wZC5pb19kb25lID0gMTsKKwkJCXJldCA9IE1QQUdFX0RBX0VYVEVOVF9UQUlMOworCQl9CisJCXdiYy0+bnJfdG9fd3JpdGUgLT0gbXBkLnBhZ2VzX3dyaXR0ZW47CiAKIAkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIApAQCAtMjg0Niw2ICsyODg1LDQ4IEBACiAJcmV0dXJuOwogfQogCisvKgorICogRm9yY2UgYWxsIGRlbGF5ZWQgYWxsb2NhdGlvbiBibG9ja3MgdG8gYmUgYWxsb2NhdGVkIGZvciBhIGdpdmVuIGlub2RlLgorICovCitpbnQgZXh0NF9hbGxvY19kYV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoIUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgJiYKKwkgICAgIUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBkbyBzb21ldGhpbmcgc2ltcGxlIGZvciBub3cuICBUaGUgZmlsZW1hcF9mbHVzaCgpIHdpbGwKKwkgKiBhbHNvIHN0YXJ0IHRyaWdnZXJpbmcgYSB3cml0ZSBvZiB0aGUgZGF0YSBibG9ja3MsIHdoaWNoIGlzCisJICogbm90IHN0cmljdGx5IHNwZWFraW5nIG5lY2Vzc2FyeSAoYW5kIGZvciB1c2VycyBvZgorCSAqIGxhcHRvcF9tb2RlLCBub3QgZXZlbiBkZXNpcmFibGUpLiAgSG93ZXZlciwgdG8gZG8gb3RoZXJ3aXNlCisJICogd291bGQgcmVxdWlyZSByZXBsaWNhdGluZyBjb2RlIHBhdGhzIGluOgorCSAqIAorCSAqIGV4dDRfZGFfd3JpdGVwYWdlcygpIC0+CisJICogICAgd3JpdGVfY2FjaGVfcGFnZXMoKSAtLS0+ICh2aWEgcGFzc2VkIGluIGNhbGxiYWNrIGZ1bmN0aW9uKQorCSAqICAgICAgICBfX21wYWdlX2RhX3dyaXRlcGFnZSgpIC0tPgorCSAqICAgICAgICAgICBtcGFnZV9hZGRfYmhfdG9fZXh0ZW50KCkKKwkgKiAgICAgICAgICAgbXBhZ2VfZGFfbWFwX2Jsb2NrcygpCisJICoKKwkgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdyaXRlX2NhY2hlX3BhZ2VzKCksIGxvY2F0ZWQgaW4KKwkgKiBtbS9wYWdlLXdyaXRlYmFjay5jLCBtYXJrcyBwYWdlcyBjbGVhbiBpbiBwcmVwYXJhdGlvbiBmb3IKKwkgKiBkb2luZyBJL08sIHdoaWNoIGlzIG5vdCBkZXNpcmFibGUgaWYgd2UncmUgbm90IHBsYW5uaW5nIG9uCisJICogZG9pbmcgSS9PIGF0IGFsbC4KKwkgKgorCSAqIFdlIGNvdWxkIGNhbGwgd3JpdGVfY2FjaGVfcGFnZXMoKSwgYW5kIHRoZW4gcmVkaXJ0eSBhbGwgb2YKKwkgKiB0aGUgcGFnZXMgYnkgY2FsbGluZyByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlYmFjaygpIGJ1dCB0aGF0CisJICogd291bGQgYmUgdWdseSBpbiB0aGUgZXh0cmVtZS4gIFNvIGluc3RlYWQgd2Ugd291bGQgbmVlZCB0bworCSAqIHJlcGxpY2F0ZSBwYXJ0cyBvZiB0aGUgY29kZSBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zLAorCSAqIHNpbXBsaWZ5aW5nIHRoZW0gYmVjdWFzZSB3ZSB3b3VsZG4ndCBhY3R1YWxseSBpbnRlbmQgdG8KKwkgKiB3cml0ZSBvdXQgdGhlIHBhZ2VzLCBidXQgcmF0aGVyIG9ubHkgY29sbGVjdCBjb250aWd1b3VzCisJICogbG9naWNhbCBibG9jayBleHRlbnRzLCBjYWxsIHRoZSBtdWx0aS1ibG9jayBhbGxvY2F0b3IsIGFuZAorCSAqIHRoZW4gdXBkYXRlIHRoZSBidWZmZXIgaGVhZHMgd2l0aCB0aGUgYmxvY2sgYWxsb2NhdGlvbnMuCisJICogCisJICogRm9yIG5vdywgdGhvdWdoLCB3ZSdsbCBjaGVhdCBieSBjYWxsaW5nIGZpbGVtYXBfZmx1c2goKSwKKwkgKiB3aGljaCB3aWxsIG1hcCB0aGUgYmxvY2tzLCBhbmQgc3RhcnQgdGhlIEkvTywgYnV0IG5vdAorCSAqIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSBJL08gdG8gY29tcGxldGUuCisJICovCisJcmV0dXJuIGZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7Cit9CiAKIC8qCiAgKiBibWFwKCkgaXMgc3BlY2lhbC4gIEl0IGdldHMgdXNlZCBieSBhcHBsaWNhdGlvbnMgc3VjaCBhcyBsaWxvIGFuZCBieQpAQCAtMzg2OCw2ICszOTQ5LDkgQEAKIAlpZiAoIWV4dDRfY2FuX3RydW5jYXRlKGlub2RlKSkKIAkJcmV0dXJuOwogCisJaWYgKGlub2RlLT5pX3NpemUgPT0gMCAmJiAhdGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PX0FVVE9fREFfQUxMT0MpKQorCQllaS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFOworCiAJaWYgKEVYVDRfSShpbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpIHsKIAkJZXh0NF9leHRfdHJ1bmNhdGUoaW5vZGUpOwogCQlyZXR1cm47CkBAIC00MTEwLDEyICs0MTk0LDcgQEAKIAkJCXVuc2lnbmVkIG51bTsKIAogCQkJdGFibGUgPSBleHQ0X2lub2RlX3RhYmxlKHNiLCBnZHApOwotCQkJLyogTWFrZSBzdXJlIHNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgaXMgYSBwb3dlciBvZiAyICovCi0JCQl3aGlsZSAoRVhUNF9TQihzYiktPnNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgJgotCQkJICAgICAgIChFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcy0xKSkKLQkJCQlFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyA9IAotCQkJCSAgIChFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyAmCi0JCQkJICAgIChFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcy0xKSk7CisJCQkvKiBzX2lub2RlX3JlYWRhaGVhZF9ibGtzIGlzIGFsd2F5cyBhIHBvd2VyIG9mIDIgKi8KIAkJCWIgPSBibG9jayAmIH4oRVhUNF9TQihzYiktPnNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MtMSk7CiAJCQlpZiAodGFibGUgPiBiKQogCQkJCWIgPSB0YWJsZTsKQEAgLTQyODcsNiArNDM2Niw3IEBACiAJZWktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOwogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZ2VuZXJhdGlvbik7CiAJZWktPmlfYmxvY2tfZ3JvdXAgPSBpbG9jLmJsb2NrX2dyb3VwOworCWVpLT5pX2xhc3RfYWxsb2NfZ3JvdXAgPSB+MDsKIAkvKgogCSAqIE5PVEUhIFRoZSBpbi1tZW1vcnkgaW5vZGUgaV9kYXRhIGFycmF5IGlzIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIKIAkgKiBldmVuIG9uIGJpZy1lbmRpYW4gbWFjaGluZXM6IHdlIGRvIE5PVCBieXRlc3dhcCB0aGUgYmxvY2sgbnVtYmVycyEKQEAgLTQzMjksNiArNDQwOSwyMCBAQAogCQkJKF9fdTY0KShsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfdmVyc2lvbl9oaSkpIDw8IDMyOwogCX0KIAorCWlmIChlaS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgeworCQkvKiBWYWxpZGF0ZSBleHRlbnQgd2hpY2ggaXMgcGFydCBvZiBpbm9kZSAqLworCQlyZXQgPSBleHQ0X2V4dF9jaGVja19pbm9kZShpbm9kZSk7CisgCX0gZWxzZSBpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8CisJCSAgIChTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmCisJCSAgICAhZXh0NF9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgeworCSAJLyogVmFsaWRhdGUgYmxvY2sgcmVmZXJlbmNlcyB3aGljaCBhcmUgcGFydCBvZiBpbm9kZSAqLworCQlyZXQgPSBleHQ0X2NoZWNrX2lub2RlX2Jsb2NrcmVmKGlub2RlKTsKKwl9CisJaWYgKHJldCkgeworIAkJYnJlbHNlKGJoKTsKKyAJCWdvdG8gYmFkX2lub2RlOworCX0KKwogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmV4dDRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmZXh0NF9maWxlX29wZXJhdGlvbnM7CkBAIC00MzQ1LDcgKzQ0MzksOCBAQAogCQkJaW5vZGUtPmlfb3AgPSAmZXh0NF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJCQlleHQ0X3NldF9hb3BzKGlub2RlKTsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgfHwKKwkgICAgICBTX0lTRklGTyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkgewogCQlpbm9kZS0+aV9vcCA9ICZleHQ0X3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJaWYgKHJhd19pbm9kZS0+aV9ibG9ja1swXSkKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKQEAgLTQzNTMsNiArNDQ0OCwxMyBAQAogCQllbHNlCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCiAJCQkgICBuZXdfZGVjb2RlX2RldihsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfYmxvY2tbMV0pKSk7CisJfSBlbHNlIHsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0ID0gLUVJTzsKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgX19mdW5jX18sIAorCQkJICAgImJvZ3VzIGlfbW9kZSAoJW8pIGZvciBpbm9kZT0lbHUiLAorCQkJICAgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfaW5vKTsKKwkJZ290byBiYWRfaW5vZGU7CiAJfQogCWJyZWxzZShpbG9jLmJoKTsKIAlleHQ0X3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CkBAIC01MTQ2LDggKzUyNDgsOSBAQAogCXJldHVybiAhYnVmZmVyX21hcHBlZChiaCk7CiB9CiAKLWludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCWxvZmZfdCBzaXplOwogCXVuc2lnbmVkIGxvbmcgbGVuOwogCWludCByZXQgPSAtRUlOVkFMOwpAQCAtNTE5OSw2ICs1MzAyLDggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCXJldCA9IDA7CiBvdXRfdW5sb2NrOgorCWlmIChyZXQpCisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKIAl1cF9yZWFkKCZpbm9kZS0+aV9hbGxvY19zZW0pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lvY3RsLmMgYi9mcy9leHQ0L2lvY3RsLmMKaW5kZXggNDJkYzgzZi4uOTFlNzVmNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pb2N0bC5jCisrKyBiL2ZzL2V4dDQvaW9jdGwuYwpAQCAtNDgsOCArNDgsNyBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQlmbGFncyAmPSB+RVhUNF9ESVJTWU5DX0ZMOworCQlmbGFncyA9IGV4dDRfbWFza19mbGFncyhpbm9kZS0+aV9tb2RlLCBmbGFncyk7CiAKIAkJZXJyID0gLUVQRVJNOwogCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CkBAIC0yNjMsNiArMjYyLDIwIEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJY2FzZSBFWFQ0X0lPQ19BTExPQ19EQV9CTEtTOgorCXsKKwkJaW50IGVycjsKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZXJyID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBleHQ0X2FsbG9jX2RhX2Jsb2Nrcyhpbm9kZSk7CisJCW1udF9kcm9wX3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggYjAzODE4OC4uZjg3MTY3NyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTQ2LDIyICs0NiwyMyBAQAogICogVGhlIGFsbG9jYXRpb24gcmVxdWVzdCBpbnZvbHZlIHJlcXVlc3QgZm9yIG11bHRpcGxlIG51bWJlciBvZiBibG9ja3MKICAqIG5lYXIgdG8gdGhlIGdvYWwoYmxvY2spIHZhbHVlIHNwZWNpZmllZC4KICAqCi0gKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhlIGFsbG9jYXRvciB3ZSBkZWNpZGUgdG8gdXNlIHRoZSBncm91cAotICogcHJlYWxsb2NhdGlvbiBvciBpbm9kZSBwcmVhbGxvY2F0aW9uIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBmaWxlLiBUaGUKLSAqIHNpemUgb2YgdGhlIGZpbGUgY291bGQgYmUgdGhlIHJlc3VsdGluZyBmaWxlIHNpemUgd2Ugd291bGQgaGF2ZSBhZnRlcgotICogYWxsb2NhdGlvbiBvciB0aGUgY3VycmVudCBmaWxlIHNpemUgd2hpY2ggZXZlciBpcyBsYXJnZXIuIElmIHRoZSBzaXplIGlzCi0gKiBsZXNzIHRoYXQgc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0IHdlIHNlbGVjdCB0aGUgZ3JvdXAKLSAqIHByZWFsbG9jYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHNfbWJfc3RyZWFtX3JlcXVlc3QgaXMgMTYKLSAqIGJsb2Nrcy4gVGhpcyBjYW4gYWxzbyBiZSB0dW5lZCB2aWEKLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vc3RyZWFtX3JlcS4gVGhlIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluIHRlcm1zCi0gKiBvZiBudW1iZXIgb2YgYmxvY2tzLgorICogRHVyaW5nIGluaXRpYWxpemF0aW9uIHBoYXNlIG9mIHRoZSBhbGxvY2F0b3Igd2UgZGVjaWRlIHRvIHVzZSB0aGUKKyAqIGdyb3VwIHByZWFsbG9jYXRpb24gb3IgaW5vZGUgcHJlYWxsb2NhdGlvbiBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YKKyAqIHRoZSBmaWxlLiBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBjb3VsZCBiZSB0aGUgcmVzdWx0aW5nIGZpbGUgc2l6ZSB3ZQorICogd291bGQgaGF2ZSBhZnRlciBhbGxvY2F0aW9uLCBvciB0aGUgY3VycmVudCBmaWxlIHNpemUsIHdoaWNoIGV2ZXIKKyAqIGlzIGxhcmdlci4gSWYgdGhlIHNpemUgaXMgbGVzcyB0aGFuIHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCB3ZQorICogc2VsZWN0IHRvIHVzZSB0aGUgZ3JvdXAgcHJlYWxsb2NhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKKyAqIHNfbWJfc3RyZWFtX3JlcXVlc3QgaXMgMTYgYmxvY2tzLiBUaGlzIGNhbiBhbHNvIGJlIHR1bmVkIHZpYQorICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX3N0cmVhbV9yZXEuIFRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBpbgorICogdGVybXMgb2YgbnVtYmVyIG9mIGJsb2Nrcy4KICAqCiAgKiBUaGUgbWFpbiBtb3RpdmF0aW9uIGZvciBoYXZpbmcgc21hbGwgZmlsZSB1c2UgZ3JvdXAgcHJlYWxsb2NhdGlvbiBpcyB0bwotICogZW5zdXJlIHRoYXQgd2UgaGF2ZSBzbWFsbCBmaWxlIGNsb3NlciBpbiB0aGUgZGlzay4KKyAqIGVuc3VyZSB0aGF0IHdlIGhhdmUgc21hbGwgZmlsZXMgY2xvc2VyIHRvZ2V0aGVyIG9uIHRoZSBkaXNrLgogICoKLSAqIEZpcnN0IHN0YWdlIHRoZSBhbGxvY2F0b3IgbG9va3MgYXQgdGhlIGlub2RlIHByZWFsbG9jIGxpc3QKLSAqIGV4dDRfaW5vZGVfaW5mby0+aV9wcmVhbGxvY19saXN0IGNvbnRhaW4gbGlzdCBvZiBwcmVhbGxvYyBzcGFjZXMgZm9yCi0gKiB0aGlzIHBhcnRpY3VsYXIgaW5vZGUuIFRoZSBpbm9kZSBwcmVhbGxvYyBzcGFjZSBpcyByZXByZXNlbnRlZCBhczoKKyAqIEZpcnN0IHN0YWdlIHRoZSBhbGxvY2F0b3IgbG9va3MgYXQgdGhlIGlub2RlIHByZWFsbG9jIGxpc3QsCisgKiBleHQ0X2lub2RlX2luZm8tPmlfcHJlYWxsb2NfbGlzdCwgd2hpY2ggY29udGFpbnMgbGlzdCBvZiBwcmVhbGxvYworICogc3BhY2VzIGZvciB0aGlzIHBhcnRpY3VsYXIgaW5vZGUuIFRoZSBpbm9kZSBwcmVhbGxvYyBzcGFjZSBpcworICogcmVwcmVzZW50ZWQgYXM6CiAgKgogICogcGFfbHN0YXJ0IC0+IHRoZSBsb2dpY2FsIHN0YXJ0IGJsb2NrIGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCiAgKiBwYV9wc3RhcnQgLT4gdGhlIHBoeXNpY2FsIHN0YXJ0IGJsb2NrIGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCkBAIC0xMjEsMjkgKzEyMiwyOSBAQAogICogbGlzdC4gSW4gY2FzZSBvZiBpbm9kZSBwcmVhbGxvY2F0aW9uIHdlIGZvbGxvdyBhIGxpc3Qgb2YgaGV1cmlzdGljcwogICogYmFzZWQgb24gZmlsZSBzaXplLiBUaGlzIGNhbiBiZSBmb3VuZCBpbiBleHQ0X21iX25vcm1hbGl6ZV9yZXF1ZXN0LiBJZgogICogd2UgYXJlIGRvaW5nIGEgZ3JvdXAgcHJlYWxsb2Mgd2UgdHJ5IHRvIG5vcm1hbGl6ZSB0aGUgcmVxdWVzdCB0bwotICogc2JpLT5zX21iX2dyb3VwX3ByZWFsbG9jLiBEZWZhdWx0IHZhbHVlIG9mIHNfbWJfZ3JvdXBfcHJlYWxsb2MgaXMgc2V0IHRvCisgKiBzYmktPnNfbWJfZ3JvdXBfcHJlYWxsb2MuIERlZmF1bHQgdmFsdWUgb2Ygc19tYl9ncm91cF9wcmVhbGxvYyBpcwogICogNTEyIGJsb2Nrcy4gVGhpcyBjYW4gYmUgdHVuZWQgdmlhCi0gKiAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24vZ3JvdXBfcHJlYWxsb2MuIFRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBpbgorICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24vbWJfZ3JvdXBfcHJlYWxsb2MuIFRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBpbgogICogdGVybXMgb2YgbnVtYmVyIG9mIGJsb2Nrcy4gSWYgd2UgaGF2ZSBtb3VudGVkIHRoZSBmaWxlIHN5c3RlbSB3aXRoIC1PCiAgKiBzdHJpcGU9PHZhbHVlPiBvcHRpb24gdGhlIGdyb3VwIHByZWFsbG9jIHJlcXVlc3QgaXMgbm9ybWFsaXplZCB0byB0aGUKICAqIHN0cmlwZSB2YWx1ZSAoc2JpLT5zX3N0cmlwZSkKICAqCi0gKiBUaGUgcmVndWxhciBhbGxvY2F0b3IodXNpbmcgdGhlIGJ1ZGR5IGNhY2hlKSBzdXBwb3J0IGZldyB0dW5hYmxlcy4KKyAqIFRoZSByZWd1bGFyIGFsbG9jYXRvcih1c2luZyB0aGUgYnVkZHkgY2FjaGUpIHN1cHBvcnRzIGZldyB0dW5hYmxlcy4KICAqCi0gKiAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L21pbl90b19zY2FuCi0gKiAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L21heF90b19zY2FuCi0gKiAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L29yZGVyMl9yZXEKKyAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9taW5fdG9fc2NhbgorICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX21heF90b19zY2FuCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWJfb3JkZXIyX3JlcQogICoKLSAqIFRoZSByZWd1bGFyIGFsbG9jYXRvciB1c2UgYnVkZHkgc2NhbiBvbmx5IGlmIHRoZSByZXF1ZXN0IGxlbiBpcyBwb3dlciBvZgorICogVGhlIHJlZ3VsYXIgYWxsb2NhdG9yIHVzZXMgYnVkZHkgc2NhbiBvbmx5IGlmIHRoZSByZXF1ZXN0IGxlbiBpcyBwb3dlciBvZgogICogMiBibG9ja3MgYW5kIHRoZSBvcmRlciBvZiBhbGxvY2F0aW9uIGlzID49IHNiaS0+c19tYl9vcmRlcjJfcmVxcy4gVGhlCiAgKiB2YWx1ZSBvZiBzX21iX29yZGVyMl9yZXFzIGNhbiBiZSB0dW5lZCB2aWEKLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vb3JkZXIyX3JlcS4gIElmIHRoZSByZXF1ZXN0IGxlbiBpcyBlcXVhbCB0bworICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX29yZGVyMl9yZXEuICBJZiB0aGUgcmVxdWVzdCBsZW4gaXMgZXF1YWwgdG8KICAqIHN0cmlwZSBzaXplIChzYmktPnNfc3RyaXBlKSwgd2UgdHJ5IHRvIHNlYXJjaCBmb3IgY29udGlnb3VzIGJsb2NrIGluCi0gKiBzdHJpcGUgc2l6ZS4gVGhpcyBzaG91bGQgcmVzdWx0IGluIGJldHRlciBhbGxvY2F0aW9uIG9uIFJBSUQgc2V0dXAuIElmCi0gKiBub3Qgd2Ugc2VhcmNoIGluIHRoZSBzcGVjaWZpYyBncm91cCB1c2luZyBiaXRtYXAgZm9yIGJlc3QgZXh0ZW50cy4gVGhlCi0gKiB0dW5hYmxlIG1pbl90b19zY2FuIGFuZCBtYXhfdG9fc2NhbiBjb250cm9sbCB0aGUgYmVoYXZpb3VyIGhlcmUuCisgKiBzdHJpcGUgc2l6ZS4gVGhpcyBzaG91bGQgcmVzdWx0IGluIGJldHRlciBhbGxvY2F0aW9uIG9uIFJBSUQgc2V0dXBzLiBJZgorICogbm90LCB3ZSBzZWFyY2ggaW4gdGhlIHNwZWNpZmljIGdyb3VwIHVzaW5nIGJpdG1hcCBmb3IgYmVzdCBleHRlbnRzLiBUaGUKKyAqIHR1bmFibGUgbWluX3RvX3NjYW4gYW5kIG1heF90b19zY2FuIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBoZXJlLgogICogbWluX3RvX3NjYW4gaW5kaWNhdGUgaG93IGxvbmcgdGhlIG1iYWxsb2MgX19tdXN0X18gbG9vayBmb3IgYSBiZXN0Ci0gKiBleHRlbnQgYW5kIG1heF90b19zY2FuaW5kaWNhdGUgaG93IGxvbmcgdGhlIG1iYWxsb2MgX19jYW5fXyBsb29rIGZvciBhCisgKiBleHRlbnQgYW5kIG1heF90b19zY2FuIGluZGljYXRlcyBob3cgbG9uZyB0aGUgbWJhbGxvYyBfX2Nhbl9fIGxvb2sgZm9yIGEKICAqIGJlc3QgZXh0ZW50IGluIHRoZSBmb3VuZCBleHRlbnRzLiBTZWFyY2hpbmcgZm9yIHRoZSBibG9ja3Mgc3RhcnRzIHdpdGgKICAqIHRoZSBncm91cCBzcGVjaWZpZWQgYXMgdGhlIGdvYWwgdmFsdWUgaW4gYWxsb2NhdGlvbiBjb250ZXh0IHZpYQogICogYWNfZ19leC4gRWFjaCBncm91cCBpcyBmaXJzdCBjaGVja2VkIGJhc2VkIG9uIHRoZSBjcml0ZXJpYSB3aGV0aGVyIGl0CkBAIC0zMzcsOCArMzM4LDYgQEAKIAkJCQkJZXh0NF9ncm91cF90IGdyb3VwKTsKIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ2VuZXJhdGVfZnJvbV9mcmVlbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpiaXRtYXAsCiAJCQkJCQlleHQ0X2dyb3VwX3QgZ3JvdXApOwotc3RhdGljIGludCBleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotc3RhdGljIGludCBleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogc3RhdGljIHZvaWQgcmVsZWFzZV9ibG9ja3Nfb25fY29tbWl0KGpvdXJuYWxfdCAqam91cm5hbCwgdHJhbnNhY3Rpb25fdCAqdHhuKTsKIAogCkBAIC0xNzI2LDYgKzE3MjUsNyBAQAogewogCXVuc2lnbmVkIGZyZWUsIGZyYWdtZW50czsKIAl1bnNpZ25lZCBpLCBiaXRzOworCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShFWFQ0X1NCKGFjLT5hY19zYikpOwogCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmRlc2M7CiAJc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwID0gZXh0NF9nZXRfZ3JvdXBfaW5mbyhhYy0+YWNfc2IsIGdyb3VwKTsKIApAQCAtMTc0Nyw2ICsxNzQ3LDEyIEBACiAJCWlmIChkZXNjLT5iZ19mbGFncyAmIGNwdV90b19sZTE2KEVYVDRfQkdfQkxPQ0tfVU5JTklUKSkKIAkJCXJldHVybiAwOwogCisJCS8qIEF2b2lkIHVzaW5nIHRoZSBmaXJzdCBiZyBvZiBhIGZsZXhncm91cCBmb3IgZGF0YSBmaWxlcyAqLworCQlpZiAoKGFjLT5hY19mbGFncyAmIEVYVDRfTUJfSElOVF9EQVRBKSAmJgorCQkgICAgKGZsZXhfc2l6ZSA+PSBFWFQ0X0ZMRVhfU0laRV9ESVJfQUxMT0NfU0NIRU1FKSAmJgorCQkgICAgKChncm91cCAlIGZsZXhfc2l6ZSkgPT0gMCkpCisJCQlyZXR1cm4gMDsKKwogCQliaXRzID0gYWMtPmFjX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMTsKIAkJZm9yIChpID0gYWMtPmFjXzJvcmRlcjsgaSA8PSBiaXRzOyBpKyspCiAJCQlpZiAoZ3JwLT5iYl9jb3VudGVyc1tpXSA+IDApCkBAIC0xOTcxLDcgKzE5NzcsNyBAQAogCS8qCiAJICogV2Ugc2VhcmNoIHVzaW5nIGJ1ZGR5IGRhdGEgb25seSBpZiB0aGUgb3JkZXIgb2YgdGhlIHJlcXVlc3QKIAkgKiBpcyBncmVhdGVyIHRoYW4gZXF1YWwgdG8gdGhlIHNiaV9zX21iX29yZGVyMl9yZXFzCi0JICogWW91IGNhbiB0dW5lIGl0IHZpYSAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L29yZGVyMl9yZXEKKwkgKiBZb3UgY2FuIHR1bmUgaXQgdmlhIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9vcmRlcjJfcmVxCiAJICovCiAJaWYgKGkgPj0gc2JpLT5zX21iX29yZGVyMl9yZXFzKSB7CiAJCS8qCkBAIC0yNjkzLDcgKzI2OTksNyBAQAogCWkgPSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogCXNiaS0+c19tYl9tYXhzID0ga21hbGxvYyhpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2JpLT5zX21iX21heHMgPT0gTlVMTCkgewotCQlrZnJlZShzYmktPnNfbWJfbWF4cyk7CisJCWtmcmVlKHNiaS0+c19tYl9vZmZzZXRzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNzQ2LDcgKzI3NTIsNiBAQAogCQlzcGluX2xvY2tfaW5pdCgmbGctPmxnX3ByZWFsbG9jX2xvY2spOwogCX0KIAotCWV4dDRfbWJfaW5pdF9wZXJfZGV2X3Byb2Moc2IpOwogCWV4dDRfbWJfaGlzdG9yeV9pbml0KHNiKTsKIAogCWlmIChzYmktPnNfam91cm5hbCkKQEAgLTI4MjksNyArMjgzNCw2IEBACiAKIAlmcmVlX3BlcmNwdShzYmktPnNfbG9jYWxpdHlfZ3JvdXBzKTsKIAlleHQ0X21iX2hpc3RvcnlfcmVsZWFzZShzYik7Ci0JZXh0NF9tYl9kZXN0cm95X3Blcl9kZXZfcHJvYyhzYik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4OTAsNjIgKzI4OTQsNiBAQAogCW1iX2RlYnVnKCJmcmVlZCAldSBibG9ja3MgaW4gJXUgc3RydWN0dXJlc1xuIiwgY291bnQsIGNvdW50Mik7CiB9CiAKLSNkZWZpbmUgRVhUNF9NQl9TVEFUU19OQU1FCQkic3RhdHMiCi0jZGVmaW5lIEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRQkibWF4X3RvX3NjYW4iCi0jZGVmaW5lIEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRQkibWluX3RvX3NjYW4iCi0jZGVmaW5lIEVYVDRfTUJfT1JERVIyX1JFUQkJIm9yZGVyMl9yZXEiCi0jZGVmaW5lIEVYVDRfTUJfU1RSRUFNX1JFUQkJInN0cmVhbV9yZXEiCi0jZGVmaW5lIEVYVDRfTUJfR1JPVVBfUFJFQUxMT0MJCSJncm91cF9wcmVhbGxvYyIKLQotc3RhdGljIGludCBleHQ0X21iX2luaXRfcGVyX2Rldl9wcm9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQltb2RlX3QgbW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUjsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2M7Ci0KLQlpZiAoc2JpLT5zX3Byb2MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX1NUQVRTX05BTUUsIG1iX3N0YXRzKTsKLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX01BWF9UT19TQ0FOX05BTUUsIG1iX21heF90b19zY2FuKTsKLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX01JTl9UT19TQ0FOX05BTUUsIG1iX21pbl90b19zY2FuKTsKLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX09SREVSMl9SRVEsIG1iX29yZGVyMl9yZXFzKTsKLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX1NUUkVBTV9SRVEsIG1iX3N0cmVhbV9yZXF1ZXN0KTsKLQlFWFQ0X1BST0NfSEFORExFUihFWFQ0X01CX0dST1VQX1BSRUFMTE9DLCBtYl9ncm91cF9wcmVhbGxvYyk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9vdXQ6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9HUk9VUF9QUkVBTExPQywgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RSRUFNX1JFUSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfT1JERVIyX1JFUSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwotCXJldHVybiAtRU5PTUVNOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGV4dDRfbWJfZGVzdHJveV9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCi0JaWYgKHNiaS0+c19wcm9jID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9HUk9VUF9QUkVBTExPQywgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RSRUFNX1JFUSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfT1JERVIyX1JFUSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgc2JpLT5zX3Byb2MpOwotCXJlbW92ZV9wcm9jX2VudHJ5KEVYVDRfTUJfU1RBVFNfTkFNRSwgc2JpLT5zX3Byb2MpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBfX2luaXQgaW5pdF9leHQ0X21iYWxsb2Modm9pZCkKIHsKIAlleHQ0X3BzcGFjZV9jYWNoZXAgPQpAQCAtMzA5Niw5ICszMDQ0LDggQEAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLAogCQkJCQkJCSAgYWMtPmFjX2JfZXguZmVfZ3JvdXApOwotCQlzcGluX2xvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7Ci0JCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2NrcyAtPSBhYy0+YWNfYl9leC5mZV9sZW47Ci0JCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOworCQlhdG9taWNfc3ViKGFjLT5hY19iX2V4LmZlX2xlbiwKKwkJCSAgICZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MpOwogCX0KIAogCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgYml0bWFwX2JoKTsKQEAgLTMxMTYsNyArMzA2Myw3IEBACiAgKiBoZXJlIHdlIG5vcm1hbGl6ZSByZXF1ZXN0IGZvciBsb2NhbGl0eSBncm91cAogICogR3JvdXAgcmVxdWVzdCBhcmUgbm9ybWFsaXplZCB0byBzX3N0cmlwIHNpemUgaWYgd2Ugc2V0IHRoZSBzYW1lIHZpYSBtb3VudAogICogb3B0aW9uLiBJZiBub3Qgd2Ugc2V0IGl0IHRvIHNfbWJfZ3JvdXBfcHJlYWxsb2Mgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgdmlhCi0gKiAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L2dyb3VwX3ByZWFsbG9jCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWJfZ3JvdXBfcHJlYWxsb2MKICAqCiAgKiBYWFg6IHNob3VsZCB3ZSB0cnkgdG8gcHJlYWxsb2NhdGUgbW9yZSB0aGFuIHRoZSBncm91cCBoYXMgbm93PwogICovCkBAIC0zNjA4LDggKzM1NTUsMTEgQEAKIAlzcGluX3VubG9jaygmcGEtPnBhX2xvY2spOwogCiAJZ3JwX2JsayA9IHBhLT5wYV9wc3RhcnQ7Ci0JLyogSWYgbGluZWFyLCBwYV9wc3RhcnQgbWF5IGJlIGluIHRoZSBuZXh0IGdyb3VwIHdoZW4gcGEgaXMgdXNlZCB1cCAqLwotCWlmIChwYS0+cGFfbGluZWFyKQorCS8qIAorCSAqIElmIGRvaW5nIGdyb3VwLWJhc2VkIHByZWFsbG9jYXRpb24sIHBhX3BzdGFydCBtYXkgYmUgaW4gdGhlCisJICogbmV4dCBncm91cCB3aGVuIHBhIGlzIHVzZWQgdXAKKwkgKi8KKwlpZiAocGEtPnBhX3R5cGUgPT0gTUJfR1JPVVBfUEEpCiAJCWdycF9ibGstLTsKIAogCWV4dDRfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc2IsIGdycF9ibGssICZncnAsIE5VTEwpOwpAQCAtMzcwNCw3ICszNjU0LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcGEtPnBhX2lub2RlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwYS0+cGFfZ3JvdXBfbGlzdCk7CiAJcGEtPnBhX2RlbGV0ZWQgPSAwOwotCXBhLT5wYV9saW5lYXIgPSAwOworCXBhLT5wYV90eXBlID0gTUJfSU5PREVfUEE7CiAKIAltYl9kZWJ1ZygibmV3IGlub2RlIHBhICVwOiAlbGx1LyV1IGZvciAldVxuIiwgcGEsCiAJCQlwYS0+cGFfcHN0YXJ0LCBwYS0+cGFfbGVuLCBwYS0+cGFfbHN0YXJ0KTsKQEAgLTM3NjcsNyArMzcxNyw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJnBhLT5wYV9pbm9kZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcGEtPnBhX2dyb3VwX2xpc3QpOwogCXBhLT5wYV9kZWxldGVkID0gMDsKLQlwYS0+cGFfbGluZWFyID0gMTsKKwlwYS0+cGFfdHlwZSA9IE1CX0dST1VQX1BBOwogCiAJbWJfZGVidWcoIm5ldyBncm91cCBwYSAlcDogJWxsdS8ldSBmb3IgJXVcbiIsIHBhLAogCQkgcGEtPnBhX3BzdGFydCwgcGEtPnBhX2xlbiwgcGEtPnBhX2xzdGFydCk7CkBAIC00MDIxLDcgKzM5NzEsNyBAQAogCQlsaXN0X2RlbF9yY3UoJnBhLT5wYV9pbm9kZV9saXN0KTsKIAkJc3Bpbl91bmxvY2socGEtPnBhX29ial9sb2NrKTsKIAotCQlpZiAocGEtPnBhX2xpbmVhcikKKwkJaWYgKHBhLT5wYV90eXBlID09IE1CX0dST1VQX1BBKQogCQkJZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKCZlNGIsIHBhLCBhYyk7CiAJCWVsc2UKIAkJCWV4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYSgmZTRiLCBiaXRtYXBfYmgsIHBhLCBhYyk7CkBAIC00MTIxLDcgKzQwNzEsNyBAQAogCXNwaW5fdW5sb2NrKCZlaS0+aV9wcmVhbGxvY19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYSwgdG1wLCAmbGlzdCwgdS5wYV90bXBfbGlzdCkgewotCQlCVUdfT04ocGEtPnBhX2xpbmVhciAhPSAwKTsKKwkJQlVHX09OKHBhLT5wYV90eXBlICE9IE1CX0lOT0RFX1BBKTsKIAkJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgcGEtPnBhX3BzdGFydCwgJmdyb3VwLCBOVUxMKTsKIAogCQllcnIgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGdyb3VwLCAmZTRiKTsKQEAgLTQyMzIsNyArNDE4Miw3IEBACiAgKiBmaWxlIGlzIGRldGVybWluZWQgYnkgdGhlIGN1cnJlbnQgc2l6ZSBvciB0aGUgcmVzdWx0aW5nIHNpemUgYWZ0ZXIKICAqIGFsbG9jYXRpb24gd2hpY2ggZXZlciBpcyBsYXJnZXIKICAqCi0gKiBPbmUgY2FuIHR1bmUgdGhpcyBzaXplIHZpYSAvcHJvYy9mcy9leHQ0LzxwYXJ0aXRpb24+L3N0cmVhbV9yZXEKKyAqIE9uZSBjYW4gdHVuZSB0aGlzIHNpemUgdmlhIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9zdHJlYW1fcmVxCiAgKi8KIHN0YXRpYyB2b2lkIGV4dDRfbWJfZ3JvdXBfb3JfZmlsZShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKQogewpAQCAtNDM3Myw3ICs0MzIzLDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIG9ubHkgbGcgcHJlYWxsb2Mgc3BhY2UgKi8KLQkJQlVHX09OKCFwYS0+cGFfbGluZWFyKTsKKwkJQlVHX09OKHBhLT5wYV90eXBlICE9IE1CX0dST1VQX1BBKTsKIAogCQkvKiBzZWVtcyB0aGlzIG9uZSBjYW4gYmUgZnJlZWQgLi4uICovCiAJCXBhLT5wYV9kZWxldGVkID0gMTsKQEAgLTQ0NDIsNyArNDM5Miw3IEBACiAJCQkJCQlwYV9pbm9kZV9saXN0KSB7CiAJCXNwaW5fbG9jaygmdG1wX3BhLT5wYV9sb2NrKTsKIAkJaWYgKHRtcF9wYS0+cGFfZGVsZXRlZCkgewotCQkJc3Bpbl91bmxvY2soJnBhLT5wYV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZ0bXBfcGEtPnBhX2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKCFhZGRlZCAmJiBwYS0+cGFfZnJlZSA8IHRtcF9wYS0+cGFfZnJlZSkgewpAQCAtNDQ3OSw3ICs0NDI5LDcgQEAKIHsKIAlzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEgPSBhYy0+YWNfcGE7CiAJaWYgKHBhKSB7Ci0JCWlmIChwYS0+cGFfbGluZWFyKSB7CisJCWlmIChwYS0+cGFfdHlwZSA9PSBNQl9HUk9VUF9QQSkgewogCQkJLyogc2VlIGNvbW1lbnQgaW4gZXh0NF9tYl91c2VfZ3JvdXBfcGEoKSAqLwogCQkJc3Bpbl9sb2NrKCZwYS0+cGFfbG9jayk7CiAJCQlwYS0+cGFfcHN0YXJ0ICs9IGFjLT5hY19iX2V4LmZlX2xlbjsKQEAgLTQ0OTksNyArNDQ0OSw3IEBACiAJCSAqIGRvZXNuJ3QgZ3JvdyBiaWcuICBXZSBuZWVkIHRvIHJlbGVhc2UKIAkJICogYWxsb2Nfc2VtcCBiZWZvcmUgY2FsbGluZyBleHQ0X21iX2FkZF9uX3RyaW0oKQogCQkgKi8KLQkJaWYgKHBhLT5wYV9saW5lYXIgJiYgbGlrZWx5KHBhLT5wYV9mcmVlKSkgeworCQlpZiAoKHBhLT5wYV90eXBlID09IE1CX0dST1VQX1BBKSAmJiBsaWtlbHkocGEtPnBhX2ZyZWUpKSB7CiAJCQlzcGluX2xvY2socGEtPnBhX29ial9sb2NrKTsKIAkJCWxpc3RfZGVsX3JjdSgmcGEtPnBhX2lub2RlX2xpc3QpOwogCQkJc3Bpbl91bmxvY2socGEtPnBhX29ial9sb2NrKTsKQEAgLTQ5MzYsOSArNDg4Niw3IEBACiAKIAlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBibG9ja19ncm91cCk7Ci0JCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfYmxvY2tzICs9IGNvdW50OwotCQlzcGluX3VubG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKKwkJYXRvbWljX2FkZChjb3VudCwgJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2Nrcyk7CiAJfQogCiAJZXh0NF9tYl9yZWxlYXNlX2Rlc2MoJmU0Yik7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuaCBiL2ZzL2V4dDQvbWJhbGxvYy5oCmluZGV4IDEwYTI5MjEuLmRkOWU2Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5oCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5oCkBAIC0xMzIsMTIgKzEzMiwxNSBAQAogCWV4dDRfbGJsa190CQlwYV9sc3RhcnQ7CS8qIGxvZy4gYmxvY2sgKi8KIAl1bnNpZ25lZCBzaG9ydAkJcGFfbGVuOwkJLyogbGVuIG9mIHByZWFsbG9jYXRlZCBjaHVuayAqLwogCXVuc2lnbmVkIHNob3J0CQlwYV9mcmVlOwkvKiBob3cgbWFueSBibG9ja3MgYXJlIGZyZWUgKi8KLQl1bnNpZ25lZCBzaG9ydAkJcGFfbGluZWFyOwkvKiBjb25zdW1lZCBpbiBvbmUgZGlyZWN0aW9uCi0JCQkJCQkgKiBzdHJpY3RseSwgZm9yIGdycCBwcmVhbGxvYyAqLworCXVuc2lnbmVkIHNob3J0CQlwYV90eXBlOwkvKiBwYSB0eXBlLiBpbm9kZSBvciBncm91cCAqLwogCXNwaW5sb2NrX3QJCSpwYV9vYmpfbG9jazsKIAlzdHJ1Y3QgaW5vZGUJCSpwYV9pbm9kZTsJLyogaGFjaywgZm9yIGhpc3Rvcnkgb25seSAqLwogfTsKIAorZW51bSB7CisJTUJfSU5PREVfUEEgPSAwLAorCU1CX0dST1VQX1BBID0gMQorfTsKIAogc3RydWN0IGV4dDRfZnJlZV9leHRlbnQgewogCWV4dDRfbGJsa190IGZlX2xvZ2ljYWw7CkBAIC0yNDcsNyArMjUwLDYgQEAKIAogI2RlZmluZSBpbl9yYW5nZShiLCBmaXJzdCwgbGVuKQkoKGIpID49IChmaXJzdCkgJiYgKGIpIDw9IChmaXJzdCkgKyAobGVuKSAtIDEpCiAKLXN0cnVjdCBidWZmZXJfaGVhZCAqcmVhZF9ibG9ja19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGV4dDRfZ3JvdXBfdCk7CiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X2dycF9vZmZzX3RvX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCXN0cnVjdCBleHQ0X2ZyZWVfZXh0ZW50ICpmZXgpCiB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggODM0MTAyNC4uMjIwOThlMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMTYxLDEyICsxNjEsMTIgQEAKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKIAkJCQkgaW50ICplcnIpOwogc3RhdGljIHZvaWQgZHhfcmVsZWFzZShzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lcyk7Ci1zdGF0aWMgaW50IGR4X21ha2VfbWFwKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSwgaW50IHNpemUsCitzdGF0aWMgaW50IGR4X21ha2VfbWFwKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSwgdW5zaWduZWQgYmxvY2tzaXplLAogCQkgICAgICAgc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sIHN0cnVjdCBkeF9tYXBfZW50cnkgbWFwW10pOwogc3RhdGljIHZvaWQgZHhfc29ydF9tYXAoc3RydWN0IGR4X21hcF9lbnRyeSAqbWFwLCB1bnNpZ25lZCBjb3VudCk7CiBzdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmR4X21vdmVfZGlyZW50cyhjaGFyICpmcm9tLCBjaGFyICp0bywKLQkJc3RydWN0IGR4X21hcF9lbnRyeSAqb2Zmc2V0cywgaW50IGNvdW50KTsKLXN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiogZHhfcGFja19kaXJlbnRzKGNoYXIgKmJhc2UsIGludCBzaXplKTsKKwkJc3RydWN0IGR4X21hcF9lbnRyeSAqb2Zmc2V0cywgaW50IGNvdW50LCB1bnNpZ25lZCBibG9ja3NpemUpOworc3RhdGljIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yKiBkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKTsKIHN0YXRpYyB2b2lkIGR4X2luc2VydF9ibG9jayhzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lLAogCQkJCQl1MzIgaGFzaCwgZXh0NF9sYmxrX3QgYmxvY2spOwogc3RhdGljIGludCBleHQ0X2h0cmVlX25leHRfYmxvY2soc3RydWN0IGlub2RlICpkaXIsIF9fdTMyIGhhc2gsCkBAIC0xODAsMTQgKzE4MCwzOCBAQAogc3RhdGljIGludCBleHQ0X2R4X2FkZF9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCit1bnNpZ25lZCBpbnQgZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKQoreworCXVuc2lnbmVkIGxlbiA9IGxlMTZfdG9fY3B1KGRsZW4pOworCisJaWYgKGxlbiA9PSBFWFQ0X01BWF9SRUNfTEVOIHx8IGxlbiA9PSAwKQorCQlyZXR1cm4gYmxvY2tzaXplOworCXJldHVybiAobGVuICYgNjU1MzIpIHwgKChsZW4gJiAzKSA8PCAxNik7Cit9CisgIAorX19sZTE2IGV4dDRfcmVjX2xlbl90b19kaXNrKHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKQoreworCWlmICgobGVuID4gYmxvY2tzaXplKSB8fCAoYmxvY2tzaXplID4gKDEgPDwgMTgpKSB8fCAobGVuICYgMykpCisJCUJVRygpOworCWlmIChsZW4gPCA2NTUzNikKKwkJcmV0dXJuIGNwdV90b19sZTE2KGxlbik7CisJaWYgKGxlbiA9PSBibG9ja3NpemUpIHsKKwkJaWYgKGJsb2Nrc2l6ZSA9PSA2NTUzNikKKwkJCXJldHVybiBjcHVfdG9fbGUxNihFWFQ0X01BWF9SRUNfTEVOKTsKKwkJZWxzZSAKKwkJCXJldHVybiBjcHVfdG9fbGUxNigwKTsKKwl9CisJcmV0dXJuIGNwdV90b19sZTE2KChsZW4gJiA2NTUzMikgfCAoKGxlbiA+PiAxNikgJiAzKSk7Cit9CisKIC8qCiAgKiBwIGlzIGF0IGxlYXN0IDYgYnl0ZXMgYmVmb3JlIHRoZSBlbmQgb2YgcGFnZQogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICoKLWV4dDRfbmV4dF9lbnRyeShzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqcCkKK2V4dDRfbmV4dF9lbnRyeShzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqcCwgdW5zaWduZWQgbG9uZyBibG9ja3NpemUpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSgoY2hhciAqKXAgKwotCQlleHQ0X3JlY19sZW5fZnJvbV9kaXNrKHAtPnJlY19sZW4pKTsKKwkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhwLT5yZWNfbGVuLCBibG9ja3NpemUpKTsKIH0KIAogLyoKQEAgLTI5NCw3ICszMTgsNyBAQAogCQkJc3BhY2UgKz0gRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwogCQkJbmFtZXMrKzsKIAkJfQotCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBzaXplKTsKIAl9CiAJcHJpbnRrKCIoJWkpXG4iLCBuYW1lcyk7CiAJcmV0dXJuIChzdHJ1Y3Qgc3RhdHMpIHsgbmFtZXMsIHNwYWNlLCAxIH07CkBAIC01ODUsNyArNjA5LDcgQEAKIAl0b3AgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgKChjaGFyICopIGRlICsKIAkJCQkJICAgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCiAJCQkJCSAgIEVYVDRfRElSX1JFQ19MRU4oMCkpOwotCWZvciAoOyBkZSA8IHRvcDsgZGUgPSBleHQ0X25leHRfZW50cnkoZGUpKSB7CisJZm9yICg7IGRlIDwgdG9wOyBkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKIAkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeSgiaHRyZWVfZGlyYmxvY2tfdG9fdHJlZSIsIGRpciwgZGUsIGJoLAogCQkJCQkoYmxvY2s8PEVYVDRfQkxPQ0tfU0laRV9CSVRTKGRpci0+aV9zYikpCiAJCQkJCQkrKChjaGFyICopZGUgLSBiaC0+Yl9kYXRhKSkpIHsKQEAgLTY2Myw3ICs2ODcsNyBAQAogCX0KIAlpZiAoc3RhcnRfaGFzaCA8IDIgfHwgKHN0YXJ0X2hhc2ggPT0yICYmIHN0YXJ0X21pbm9yX2hhc2g9PTApKSB7CiAJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGZyYW1lc1swXS5iaC0+Yl9kYXRhOwotCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJaWYgKChlcnIgPSBleHQ0X2h0cmVlX3N0b3JlX2RpcmVudChkaXJfZmlsZSwgMiwgMCwgZGUpKSAhPSAwKQogCQkJZ290byBlcnJvdXQ7CiAJCWNvdW50Kys7CkBAIC03MTMsMTUgKzczNywxNSBAQAogICogQ3JlYXRlIG1hcCBvZiBoYXNoIHZhbHVlcywgb2Zmc2V0cywgYW5kIHNpemVzLCBzdG9yZWQgYXQgZW5kIG9mIGJsb2NrLgogICogUmV0dXJucyBudW1iZXIgb2YgZW50cmllcyBtYXBwZWQuCiAgKi8KLXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAgKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSwgaW50IHNpemUsCi0JCQlzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbywgc3RydWN0IGR4X21hcF9lbnRyeSAqbWFwX3RhaWwpCitzdGF0aWMgaW50IGR4X21ha2VfbWFwKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZSwgdW5zaWduZWQgYmxvY2tzaXplLAorCQkgICAgICAgc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sCisJCSAgICAgICBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKIHsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKmJhc2UgPSAoY2hhciAqKSBkZTsKIAlzdHJ1Y3QgZHhfaGFzaF9pbmZvIGggPSAqaGluZm87CiAKLQl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgc2l6ZSkKLQl7CisJd2hpbGUgKChjaGFyICopIGRlIDwgYmFzZSArIGJsb2Nrc2l6ZSkgewogCQlpZiAoZGUtPm5hbWVfbGVuICYmIGRlLT5pbm9kZSkgewogCQkJZXh0NGZzX2Rpcmhhc2goZGUtPm5hbWUsIGRlLT5uYW1lX2xlbiwgJmgpOwogCQkJbWFwX3RhaWwtLTsKQEAgLTczMiw3ICs3NTYsNyBAQAogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KIAkJLyogWFhYOiBkbyB3ZSBuZWVkIHRvIGNoZWNrIHJlY19sZW4gPT0gMCBjYXNlPyAtQ2hyaXMgKi8KLQkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUpOworCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSwgYmxvY2tzaXplKTsKIAl9CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtODMyLDcgKzg1Niw4IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQkvKiBwcmV2ZW50IGxvb3Bpbmcgb24gYSBiYWQgYmxvY2sgKi8KLQkJZGVfbGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJCWRlX2xlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCisJCQkJCQlkaXItPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJaWYgKGRlX2xlbiA8PSAwKQogCQkJcmV0dXJuIC0xOwogCQlvZmZzZXQgKz0gZGVfbGVuOwpAQCAtOTk2LDcgKzEwMjEsNyBAQAogCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwogCQl0b3AgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgKChjaGFyICopIGRlICsgc2ItPnNfYmxvY2tzaXplIC0KIAkJCQkgICAgICAgRVhUNF9ESVJfUkVDX0xFTigwKSk7Ci0JCWZvciAoOyBkZSA8IHRvcDsgZGUgPSBleHQ0X25leHRfZW50cnkoZGUpKSB7CisJCWZvciAoOyBkZSA8IHRvcDsgZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIHNiLT5zX2Jsb2Nrc2l6ZSkpIHsKIAkJCWludCBvZmYgPSAoYmxvY2sgPDwgRVhUNF9CTE9DS19TSVpFX0JJVFMoc2IpKQogCQkJCSAgKyAoKGNoYXIgKikgZGUgLSBiaC0+Yl9kYXRhKTsKIApAQCAtMTA1Miw4ICsxMDc3LDE2IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAkJfQogCQlpbm9kZSA9IGV4dDRfaWdldChkaXItPmlfc2IsIGlubyk7Ci0JCWlmIChJU19FUlIoaW5vZGUpKQotCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUihpbm9kZSkpKSB7CisJCQlpZiAoUFRSX0VSUihpbm9kZSkgPT0gLUVTVEFMRSkgeworCQkJCWV4dDRfZXJyb3IoZGlyLT5pX3NiLCBfX2Z1bmNfXywKKwkJCQkJCSJkZWxldGVkIGlub2RlIHJlZmVyZW5jZWQ6ICV1IiwKKwkJCQkJCWlubyk7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOwogfQpAQCAtMTEwOSw3ICsxMTQyLDggQEAKICAqIFJldHVybnMgcG9pbnRlciB0byBsYXN0IGVudHJ5IG1vdmVkLgogICovCiBzdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKgotZHhfbW92ZV9kaXJlbnRzKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXAsIGludCBjb3VudCkKK2R4X21vdmVfZGlyZW50cyhjaGFyICpmcm9tLCBjaGFyICp0bywgc3RydWN0IGR4X21hcF9lbnRyeSAqbWFwLCBpbnQgY291bnQsCisJCXVuc2lnbmVkIGJsb2Nrc2l6ZSkKIHsKIAl1bnNpZ25lZCByZWNfbGVuID0gMDsKIApAQCAtMTExOCw3ICsxMTUyLDcgQEAKIAkJcmVjX2xlbiA9IEVYVDRfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKIAkJbWVtY3B5ICh0bywgZGUsIHJlY19sZW4pOwogCQkoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIHRvKS0+cmVjX2xlbiA9Ci0JCQkJZXh0NF9yZWNfbGVuX3RvX2Rpc2socmVjX2xlbik7CisJCQkJZXh0NF9yZWNfbGVuX3RvX2Rpc2socmVjX2xlbiwgYmxvY2tzaXplKTsKIAkJZGUtPmlub2RlID0gMDsKIAkJbWFwKys7CiAJCXRvICs9IHJlY19sZW47CkBAIC0xMTMwLDE5ICsxMTY0LDE5IEBACiAgKiBDb21wYWN0IGVhY2ggZGlyIGVudHJ5IGluIHRoZSByYW5nZSB0byB0aGUgbWluaW1hbCByZWNfbGVuLgogICogUmV0dXJucyBwb2ludGVyIHRvIGxhc3QgZW50cnkgaW4gcmFuZ2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiogZHhfcGFja19kaXJlbnRzKGNoYXIgKmJhc2UsIGludCBzaXplKQorc3RhdGljIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yKiBkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKQogewogCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpuZXh0LCAqdG8sICpwcmV2LCAqZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmFzZTsKIAl1bnNpZ25lZCByZWNfbGVuID0gMDsKIAogCXByZXYgPSB0byA9IGRlOwotCXdoaWxlICgoY2hhciopZGUgPCBiYXNlICsgc2l6ZSkgewotCQluZXh0ID0gZXh0NF9uZXh0X2VudHJ5KGRlKTsKKwl3aGlsZSAoKGNoYXIqKWRlIDwgYmFzZSArIGJsb2Nrc2l6ZSkgeworCQluZXh0ID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBibG9ja3NpemUpOwogCQlpZiAoZGUtPmlub2RlICYmIGRlLT5uYW1lX2xlbikgewogCQkJcmVjX2xlbiA9IEVYVDRfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKIAkJCWlmIChkZSA+IHRvKQogCQkJCW1lbW1vdmUodG8sIGRlLCByZWNfbGVuKTsKLQkJCXRvLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2socmVjX2xlbik7CisJCQl0by0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKHJlY19sZW4sIGJsb2Nrc2l6ZSk7CiAJCQlwcmV2ID0gdG87CiAJCQl0byA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSAoKChjaGFyICopIHRvKSArIHJlY19sZW4pOwogCQl9CkBAIC0xMjE1LDEwICsxMjQ5LDEyIEBACiAJCQkJCWhhc2gyLCBzcGxpdCwgY291bnQtc3BsaXQpKTsKIAogCS8qIEZhbmN5IGRhbmNlIHRvIHN0YXkgd2l0aGluIHR3byBidWZmZXJzICovCi0JZGUyID0gZHhfbW92ZV9kaXJlbnRzKGRhdGExLCBkYXRhMiwgbWFwICsgc3BsaXQsIGNvdW50IC0gc3BsaXQpOworCWRlMiA9IGR4X21vdmVfZGlyZW50cyhkYXRhMSwgZGF0YTIsIG1hcCArIHNwbGl0LCBjb3VudCAtIHNwbGl0LCBibG9ja3NpemUpOwogCWRlID0gZHhfcGFja19kaXJlbnRzKGRhdGExLCBibG9ja3NpemUpOwotCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soZGF0YTEgKyBibG9ja3NpemUgLSAoY2hhciAqKSBkZSk7Ci0JZGUyLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soZGF0YTIgKyBibG9ja3NpemUgLSAoY2hhciAqKSBkZTIpOworCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soZGF0YTEgKyBibG9ja3NpemUgLSAoY2hhciAqKSBkZSwKKwkJCQkJICAgYmxvY2tzaXplKTsKKwlkZTItPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhkYXRhMiArIGJsb2Nrc2l6ZSAtIChjaGFyICopIGRlMiwKKwkJCQkJICAgIGJsb2Nrc2l6ZSk7CiAJZHh0cmFjZShkeF9zaG93X2xlYWYgKGhpbmZvLCAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGF0YTEsIGJsb2Nrc2l6ZSwgMSkpOwogCWR4dHJhY2UoZHhfc2hvd19sZWFmIChoaW5mbywgKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGRhdGEyLCBibG9ja3NpemUsIDEpKTsKIApAQCAtMTI2OCw2ICsxMzA0LDcgQEAKIAljb25zdCBjaGFyCSpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKIAlpbnQJCW5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47CiAJdW5zaWduZWQgaW50CW9mZnNldCA9IDA7CisJdW5zaWduZWQgaW50CWJsb2Nrc2l6ZSA9IGRpci0+aV9zYi0+c19ibG9ja3NpemU7CiAJdW5zaWduZWQgc2hvcnQJcmVjbGVuOwogCWludAkJbmxlbiwgcmxlbiwgZXJyOwogCWNoYXIJCSp0b3A7CkBAIC0xMjc1LDcgKzEzMTIsNyBAQAogCXJlY2xlbiA9IEVYVDRfRElSX1JFQ19MRU4obmFtZWxlbik7CiAJaWYgKCFkZSkgewogCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJoLT5iX2RhdGE7Ci0JCXRvcCA9IGJoLT5iX2RhdGEgKyBkaXItPmlfc2ItPnNfYmxvY2tzaXplIC0gcmVjbGVuOworCQl0b3AgPSBiaC0+Yl9kYXRhICsgYmxvY2tzaXplIC0gcmVjbGVuOwogCQl3aGlsZSAoKGNoYXIgKikgZGUgPD0gdG9wKSB7CiAJCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KCJleHQ0X2FkZF9lbnRyeSIsIGRpciwgZGUsCiAJCQkJCQkgIGJoLCBvZmZzZXQpKSB7CkBAIC0xMjg3LDcgKzEzMjQsNyBAQAogCQkJCXJldHVybiAtRUVYSVNUOwogCQkJfQogCQkJbmxlbiA9IEVYVDRfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKLQkJCXJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwkJCXJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLCBibG9ja3NpemUpOwogCQkJaWYgKChkZS0+aW5vZGU/IHJsZW4gLSBubGVuOiBybGVuKSA+PSByZWNsZW4pCiAJCQkJYnJlYWs7CiAJCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSgoY2hhciAqKWRlICsgcmxlbik7CkBAIC0xMzA2LDExICsxMzQzLDExIEBACiAKIAkvKiBCeSBub3cgdGhlIGJ1ZmZlciBpcyBtYXJrZWQgZm9yIGpvdXJuYWxpbmcgKi8KIAlubGVuID0gRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwotCXJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwlybGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwgYmxvY2tzaXplKTsKIAlpZiAoZGUtPmlub2RlKSB7CiAJCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZTEgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikoKGNoYXIgKilkZSArIG5sZW4pOwotCQlkZTEtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhybGVuIC0gbmxlbik7Ci0JCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2sobmxlbik7CisJCWRlMS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKHJsZW4gLSBubGVuLCBibG9ja3NpemUpOworCQlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKG5sZW4sIGJsb2Nrc2l6ZSk7CiAJCWRlID0gZGUxOwogCX0KIAlkZS0+ZmlsZV90eXBlID0gRVhUNF9GVF9VTktOT1dOOwpAQCAtMTM4MCw3ICsxNDE3LDcgQEAKIAkvKiBUaGUgMHRoIGJsb2NrIGJlY29tZXMgdGhlIHJvb3QsIG1vdmUgdGhlIGRpcmVudHMgb3V0ICovCiAJZmRlID0gJnJvb3QtPmRvdGRvdDsKIAlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSgoY2hhciAqKWZkZSArCi0JCWV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZmRlLT5yZWNfbGVuKSk7CisJCWV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZmRlLT5yZWNfbGVuLCBibG9ja3NpemUpKTsKIAlpZiAoKGNoYXIgKikgZGUgPj0gKCgoY2hhciAqKSByb290KSArIGJsb2Nrc2l6ZSkpIHsKIAkJZXh0NF9lcnJvcihkaXItPmlfc2IsIF9fZnVuY19fLAogCQkJICAgImludmFsaWQgcmVjX2xlbiBmb3IgJy4uJyBpbiBpbm9kZSAlbHUiLApAQCAtMTQwMiwxMiArMTQzOSwxNCBAQAogCW1lbWNweSAoZGF0YTEsIGRlLCBsZW4pOwogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGRhdGExOwogCXRvcCA9IGRhdGExICsgbGVuOwotCXdoaWxlICgoY2hhciAqKShkZTIgPSBleHQ0X25leHRfZW50cnkoZGUpKSA8IHRvcCkKKwl3aGlsZSAoKGNoYXIgKikoZGUyID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBibG9ja3NpemUpKSA8IHRvcCkKIAkJZGUgPSBkZTI7Ci0JZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhkYXRhMSArIGJsb2Nrc2l6ZSAtIChjaGFyICopIGRlKTsKKwlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGRhdGExICsgYmxvY2tzaXplIC0gKGNoYXIgKikgZGUsCisJCQkJCSAgIGJsb2Nrc2l6ZSk7CiAJLyogSW5pdGlhbGl6ZSB0aGUgcm9vdDsgdGhlIGRvdCBkaXJlbnRzIGFscmVhZHkgZXhpc3QgKi8KIAlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSAoJnJvb3QtPmRvdGRvdCk7Ci0JZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhibG9ja3NpemUgLSBFWFQ0X0RJUl9SRUNfTEVOKDIpKTsKKwlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtIEVYVDRfRElSX1JFQ19MRU4oMiksCisJCQkJCSAgIGJsb2Nrc2l6ZSk7CiAJbWVtc2V0ICgmcm9vdC0+aW5mbywgMCwgc2l6ZW9mKHJvb3QtPmluZm8pKTsKIAlyb290LT5pbmZvLmluZm9fbGVuZ3RoID0gc2l6ZW9mKHJvb3QtPmluZm8pOwogCXJvb3QtPmluZm8uaGFzaF92ZXJzaW9uID0gRVhUNF9TQihkaXItPmlfc2IpLT5zX2RlZl9oYXNoX3ZlcnNpb247CkBAIC0xNDg4LDcgKzE1MjcsNyBAQAogCQlyZXR1cm4gcmV0dmFsOwogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGJoLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gMDsKLQlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSk7CisJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhibG9ja3NpemUsIGJsb2Nrc2l6ZSk7CiAJcmV0dXJuIGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKIH0KIApAQCAtMTU1MSw3ICsxNTkwLDggQEAKIAkJCWdvdG8gY2xlYW51cDsKIAkJbm9kZTIgPSAoc3RydWN0IGR4X25vZGUgKikoYmgyLT5iX2RhdGEpOwogCQllbnRyaWVzMiA9IG5vZGUyLT5lbnRyaWVzOwotCQlub2RlMi0+ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soc2ItPnNfYmxvY2tzaXplKTsKKwkJbm9kZTItPmZha2UucmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKHNiLT5zX2Jsb2Nrc2l6ZSwKKwkJCQkJCQkgICBzYi0+c19ibG9ja3NpemUpOwogCQlub2RlMi0+ZmFrZS5pbm9kZSA9IDA7CiAJCUJVRkZFUl9UUkFDRShmcmFtZS0+YmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CiAJCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZnJhbWUtPmJoKTsKQEAgLTE2MzksNiArMTY3OSw3IEBACiAJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLCAqcGRlOworCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBkaXItPmlfc2ItPnNfYmxvY2tzaXplOwogCWludCBpOwogCiAJaSA9IDA7CkBAIC0xNjUyLDggKzE2OTMsMTEgQEAKIAkJCWV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwogCQkJaWYgKHBkZSkKIAkJCQlwZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzaygKLQkJCQkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhwZGUtPnJlY19sZW4pICsKLQkJCQkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbikpOworCQkJCQlleHQ0X3JlY19sZW5fZnJvbV9kaXNrKHBkZS0+cmVjX2xlbiwKKwkJCQkJCQkgICAgICAgYmxvY2tzaXplKSArCisJCQkJCWV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCisJCQkJCQkJICAgICAgIGJsb2Nrc2l6ZSksCisJCQkJCWJsb2Nrc2l6ZSk7CiAJCQllbHNlCiAJCQkJZGUtPmlub2RlID0gMDsKIAkJCWRpci0+aV92ZXJzaW9uKys7CkBAIC0xNjYxLDkgKzE3MDUsOSBAQAogCQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBkaXIsIGJoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWkgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJCWkgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwgYmxvY2tzaXplKTsKIAkJcGRlID0gZGU7Ci0JCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlKTsKKwkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIGJsb2Nrc2l6ZSk7CiAJfQogCXJldHVybiAtRU5PRU5UOwogfQpAQCAtMTc5Myw2ICsxODM3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2Jsb2NrOwogCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpkZTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAlpbnQgZXJyLCByZXRyaWVzID0gMDsKIAogCWlmIChFWFQ0X0RJUl9MSU5LX01BWChkaXIpKQpAQCAtMTgyNCwxMyArMTg2OSwxNCBAQAogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGRpcl9ibG9jay0+Yl9kYXRhOwogCWRlLT5pbm9kZSA9IGNwdV90b19sZTMyKGlub2RlLT5pX2lubyk7CiAJZGUtPm5hbWVfbGVuID0gMTsKLQlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKEVYVDRfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKSk7CisJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhFWFQ0X0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbiksCisJCQkJCSAgIGJsb2Nrc2l6ZSk7CiAJc3RyY3B5KGRlLT5uYW1lLCAiLiIpOwogCWV4dDRfc2V0X2RlX3R5cGUoZGlyLT5pX3NiLCBkZSwgU19JRkRJUik7Ci0JZGUgPSBleHQ0X25leHRfZW50cnkoZGUpOworCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBibG9ja3NpemUpOwogCWRlLT5pbm9kZSA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwotCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KLQkJCQkJCUVYVDRfRElSX1JFQ19MRU4oMSkpOworCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplIC0gRVhUNF9ESVJfUkVDX0xFTigxKSwKKwkJCQkJICAgYmxvY2tzaXplKTsKIAlkZS0+bmFtZV9sZW4gPSAyOwogCXN0cmNweShkZS0+bmFtZSwgIi4uIik7CiAJZXh0NF9zZXRfZGVfdHlwZShkaXItPmlfc2IsIGRlLCBTX0lGRElSKTsKQEAgLTE4ODUsNyArMTkzMSw3IEBACiAJCXJldHVybiAxOwogCX0KIAlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwotCWRlMSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJZGUxID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBzYi0+c19ibG9ja3NpemUpOwogCWlmIChsZTMyX3RvX2NwdShkZS0+aW5vZGUpICE9IGlub2RlLT5pX2lubyB8fAogCQkJIWxlMzJfdG9fY3B1KGRlMS0+aW5vZGUpIHx8CiAJCQlzdHJjbXAoIi4iLCBkZS0+bmFtZSkgfHwKQEAgLTE4OTYsOSArMTk0Miw5IEBACiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiAxOwogCX0KLQlvZmZzZXQgPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKSArCi0JCSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlMS0+cmVjX2xlbik7Ci0JZGUgPSBleHQ0X25leHRfZW50cnkoZGUxKTsKKwlvZmZzZXQgPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLCBzYi0+c19ibG9ja3NpemUpICsKKwkJIGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUxLT5yZWNfbGVuLCBzYi0+c19ibG9ja3NpemUpOworCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlMSwgc2ItPnNfYmxvY2tzaXplKTsKIAl3aGlsZSAob2Zmc2V0IDwgaW5vZGUtPmlfc2l6ZSkgewogCQlpZiAoIWJoIHx8CiAJCQkodm9pZCAqKSBkZSA+PSAodm9pZCAqKSAoYmgtPmJfZGF0YStzYi0+c19ibG9ja3NpemUpKSB7CkBAIC0xOTI3LDggKzE5NzMsOCBAQAogCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCW9mZnNldCArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKLQkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUpOworCQlvZmZzZXQgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwgc2ItPnNfYmxvY2tzaXplKTsKKwkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJfQogCWJyZWxzZShiaCk7CiAJcmV0dXJuIDE7CkBAIC0yMjk3LDggKzIzNDMsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNkZWZpbmUgUEFSRU5UX0lOTyhidWZmZXIpIFwKLQkoZXh0NF9uZXh0X2VudHJ5KChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKShidWZmZXIpKS0+aW5vZGUpCisjZGVmaW5lIFBBUkVOVF9JTk8oYnVmZmVyLCBzaXplKSBcCisJKGV4dDRfbmV4dF9lbnRyeSgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikoYnVmZmVyKSwgc2l6ZSktPmlub2RlKQogCiAvKgogICogQW55Ym9keSBjYW4gcmVuYW1lIGFueXRoaW5nIHdpdGggdGhpczogdGhlIHBlcm1pc3Npb24gY2hlY2tzIGFyZSBsZWZ0IHRvIHRoZQpAQCAtMjMxMSw3ICsyMzU3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSwgKm5ld19pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCwgKm5ld19iaCwgKmRpcl9iaDsKIAlzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqb2xkX2RlLCAqbmV3X2RlOwotCWludCByZXR2YWw7CisJaW50IHJldHZhbCwgZm9yY2VfZGFfYWxsb2MgPSAwOwogCiAJb2xkX2JoID0gbmV3X2JoID0gZGlyX2JoID0gTlVMTDsKIApAQCAtMjM1OCw3ICsyNDA0LDggQEAKIAkJZGlyX2JoID0gZXh0NF9icmVhZChoYW5kbGUsIG9sZF9pbm9kZSwgMCwgMCwgJnJldHZhbCk7CiAJCWlmICghZGlyX2JoKQogCQkJZ290byBlbmRfcmVuYW1lOwotCQlpZiAobGUzMl90b19jcHUoUEFSRU5UX0lOTyhkaXJfYmgtPmJfZGF0YSkpICE9IG9sZF9kaXItPmlfaW5vKQorCQlpZiAobGUzMl90b19jcHUoUEFSRU5UX0lOTyhkaXJfYmgtPmJfZGF0YSwKKwkJCQlvbGRfZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpICE9IG9sZF9kaXItPmlfaW5vKQogCQkJZ290byBlbmRfcmVuYW1lOwogCQlyZXR2YWwgPSAtRU1MSU5LOwogCQlpZiAoIW5ld19pbm9kZSAmJiBuZXdfZGlyICE9IG9sZF9kaXIgJiYKQEAgLTI0MzAsNyArMjQ3Nyw4IEBACiAJaWYgKGRpcl9iaCkgewogCQlCVUZGRVJfVFJBQ0UoZGlyX2JoLCAiZ2V0X3dyaXRlX2FjY2VzcyIpOwogCQlleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGRpcl9iaCk7Ci0JCVBBUkVOVF9JTk8oZGlyX2JoLT5iX2RhdGEpID0gY3B1X3RvX2xlMzIobmV3X2Rpci0+aV9pbm8pOworCQlQQVJFTlRfSU5PKGRpcl9iaC0+Yl9kYXRhLCBuZXdfZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkgPQorCQkJCQkJY3B1X3RvX2xlMzIobmV3X2Rpci0+aV9pbm8pOwogCQlCVUZGRVJfVFJBQ0UoZGlyX2JoLCAiY2FsbCBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YSIpOwogCQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIG9sZF9kaXIsIGRpcl9iaCk7CiAJCWV4dDRfZGVjX2NvdW50KGhhbmRsZSwgb2xkX2Rpcik7CkBAIC0yNDQ5LDYgKzI0OTcsOCBAQAogCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBuZXdfaW5vZGUpOwogCQlpZiAoIW5ld19pbm9kZS0+aV9ubGluaykKIAkJCWV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIG5ld19pbm9kZSk7CisJCWlmICghdGVzdF9vcHQobmV3X2Rpci0+aV9zYiwgTk9fQVVUT19EQV9BTExPQykpCisJCQlmb3JjZV9kYV9hbGxvYyA9IDE7CiAJfQogCXJldHZhbCA9IDA7CiAKQEAgLTI0NTcsNiArMjUwNyw4IEBACiAJYnJlbHNlKG9sZF9iaCk7CiAJYnJlbHNlKG5ld19iaCk7CiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKKwlpZiAocmV0dmFsID09IDAgJiYgZm9yY2VfZGFfYWxsb2MpCisJCWV4dDRfYWxsb2NfZGFfYmxvY2tzKG9sZF9pbm9kZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9yZXNpemUuYyBiL2ZzL2V4dDQvcmVzaXplLmMKaW5kZXggYzA2ODg2YS4uNTQ2YzdkZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9yZXNpemUuYworKysgYi9mcy9leHQ0L3Jlc2l6ZS5jCkBAIC05MzgsMTAgKzkzOCwxMCBAQAogCWlmIChFWFQ0X0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykpIHsKIAkJZXh0NF9ncm91cF90IGZsZXhfZ3JvdXA7CiAJCWZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBpbnB1dC0+Z3JvdXApOwotCQlzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MgKz0KLQkJCWlucHV0LT5mcmVlX2Jsb2Nrc19jb3VudDsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzICs9Ci0JCQlFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpOworCQlhdG9taWNfYWRkKGlucHV0LT5mcmVlX2Jsb2Nrc19jb3VudCwKKwkJCSAgICZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MpOworCQlhdG9taWNfYWRkKEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYiksCisJCQkgICAmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzKTsKIAl9CiAKIAlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIHNiaS0+c19zYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IGY3MzcxYTYuLjk5ODdiYmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzE2Lmg+CkBAIC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSAiZ3JvdXAuaCIKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpleHQ0X3Byb2Nfcm9vdDsKK3N0YXRpYyBzdHJ1Y3Qga3NldCAqZXh0NF9rc2V0OwogCiBzdGF0aWMgaW50IGV4dDRfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGpvdXJuYWxfZGV2bnVtKTsKQEAgLTU3Nyw5ICs1NzksOSBAQAogCQlleHQ0X2NvbW1pdF9zdXBlcihzYiwgZXMsIDEpOwogCX0KIAlpZiAoc2JpLT5zX3Byb2MpIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImlub2RlX3JlYWRhaGVhZF9ibGtzIiwgc2JpLT5zX3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShzYi0+c19pZCwgZXh0NF9wcm9jX3Jvb3QpOwogCX0KKwlrb2JqZWN0X2RlbCgmc2JpLT5zX2tvYmopOwogCiAJZm9yIChpID0gMDsgaSA8IHNiaS0+c19nZGJfY291bnQ7IGkrKykKIAkJYnJlbHNlKHNiaS0+c19ncm91cF9kZXNjW2ldKTsKQEAgLTYxNSw2ICs2MTcsMTcgQEAKIAkJZXh0NF9ibGtkZXZfcmVtb3ZlKHNiaSk7CiAJfQogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOworCS8qCisJICogTm93IHRoYXQgd2UgYXJlIGNvbXBsZXRlbHkgZG9uZSBzaHV0dGluZyBkb3duIHRoZQorCSAqIHN1cGVyYmxvY2ssIHdlIG5lZWQgdG8gYWN0dWFsbHkgZGVzdHJveSB0aGUga29iamVjdC4KKwkgKi8KKwl1bmxvY2tfa2VybmVsKCk7CisJdW5sb2NrX3N1cGVyKHNiKTsKKwlrb2JqZWN0X3B1dCgmc2JpLT5zX2tvYmopOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNiaS0+c19rb2JqX3VucmVnaXN0ZXIpOworCWxvY2tfc3VwZXIoc2IpOworCWxvY2tfa2VybmVsKCk7CisJa2ZyZWUoc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jayk7CiAJa2ZyZWUoc2JpKTsKIAlyZXR1cm47CiB9CkBAIC04MDMsOCArODE2LDYgQEAKIAlpZiAoIXRlc3Rfb3B0KHNiLCBQT1NJWF9BQ0wpICYmIChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9BQ0wpKQogCQlzZXFfcHV0cyhzZXEsICIsbm9hY2wiKTsKICNlbmRpZgotCWlmICghdGVzdF9vcHQoc2IsIFJFU0VSVkFUSU9OKSkKLQkJc2VxX3B1dHMoc2VxLCAiLG5vcmVzZXJ2YXRpb24iKTsKIAlpZiAoc2JpLT5zX2NvbW1pdF9pbnRlcnZhbCAhPSBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UqSFopIHsKIAkJc2VxX3ByaW50ZihzZXEsICIsY29tbWl0PSV1IiwKIAkJCSAgICh1bnNpZ25lZCkgKHNiaS0+c19jb21taXRfaW50ZXJ2YWwgLyBIWikpOwpAQCAtODU1LDYgKzg2Niw5IEBACiAJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCiAJCXNlcV9wdXRzKHNlcSwgIixkYXRhX2Vycj1hYm9ydCIpOwogCisJaWYgKHRlc3Rfb3B0KHNiLCBOT19BVVRPX0RBX0FMTE9DKSkKKwkJc2VxX3B1dHMoc2VxLCAiLG5vYXV0b19kYV9hbGxvYyIpOworCiAJZXh0NF9zaG93X3F1b3RhX29wdGlvbnMoc2VxLCBzYik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDA0LDcgKzEwMTgsNyBAQAogCU9wdF9yZXNnaWQsIE9wdF9yZXN1aWQsIE9wdF9zYiwgT3B0X2Vycl9jb250LCBPcHRfZXJyX3BhbmljLCBPcHRfZXJyX3JvLAogCU9wdF9ub3VpZDMyLCBPcHRfZGVidWcsIE9wdF9vbGRhbGxvYywgT3B0X29ybG92LAogCU9wdF91c2VyX3hhdHRyLCBPcHRfbm91c2VyX3hhdHRyLCBPcHRfYWNsLCBPcHRfbm9hY2wsCi0JT3B0X3Jlc2VydmF0aW9uLCBPcHRfbm9yZXNlcnZhdGlvbiwgT3B0X25vbG9hZCwgT3B0X25vYmgsIE9wdF9iaCwKKwlPcHRfYXV0b19kYV9hbGxvYywgT3B0X25vYXV0b19kYV9hbGxvYywgT3B0X25vbG9hZCwgT3B0X25vYmgsIE9wdF9iaCwKIAlPcHRfY29tbWl0LCBPcHRfbWluX2JhdGNoX3RpbWUsIE9wdF9tYXhfYmF0Y2hfdGltZSwKIAlPcHRfam91cm5hbF91cGRhdGUsIE9wdF9qb3VybmFsX2RldiwKIAlPcHRfam91cm5hbF9jaGVja3N1bSwgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0LApAQCAtMTAxMiw4ICsxMDI2LDggQEAKIAlPcHRfZGF0YV9lcnJfYWJvcnQsIE9wdF9kYXRhX2Vycl9pZ25vcmUsCiAJT3B0X3VzcmpxdW90YSwgT3B0X2dycGpxdW90YSwgT3B0X29mZnVzcmpxdW90YSwgT3B0X29mZmdycGpxdW90YSwKIAlPcHRfanFmbXRfdmZzb2xkLCBPcHRfanFmbXRfdmZzdjAsIE9wdF9xdW90YSwgT3B0X25vcXVvdGEsCi0JT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsIE9wdF91c3JxdW90YSwKLQlPcHRfZ3JwcXVvdGEsIE9wdF9pX3ZlcnNpb24sCisJT3B0X2lnbm9yZSwgT3B0X2JhcnJpZXIsIE9wdF9ub2JhcnJpZXIsIE9wdF9lcnIsIE9wdF9yZXNpemUsCisJT3B0X3VzcnF1b3RhLCBPcHRfZ3JwcXVvdGEsIE9wdF9pX3ZlcnNpb24sCiAJT3B0X3N0cmlwZSwgT3B0X2RlbGFsbG9jLCBPcHRfbm9kZWxhbGxvYywKIAlPcHRfaW5vZGVfcmVhZGFoZWFkX2Jsa3MsIE9wdF9qb3VybmFsX2lvcHJpbwogfTsKQEAgLTEwMzksOCArMTA1Myw2IEBACiAJe09wdF9ub3VzZXJfeGF0dHIsICJub3VzZXJfeGF0dHIifSwKIAl7T3B0X2FjbCwgImFjbCJ9LAogCXtPcHRfbm9hY2wsICJub2FjbCJ9LAotCXtPcHRfcmVzZXJ2YXRpb24sICJyZXNlcnZhdGlvbiJ9LAotCXtPcHRfbm9yZXNlcnZhdGlvbiwgIm5vcmVzZXJ2YXRpb24ifSwKIAl7T3B0X25vbG9hZCwgIm5vbG9hZCJ9LAogCXtPcHRfbm9iaCwgIm5vYmgifSwKIAl7T3B0X2JoLCAiYmgifSwKQEAgLTEwNjgsNiArMTA4MCw4IEBACiAJe09wdF9xdW90YSwgInF1b3RhIn0sCiAJe09wdF91c3JxdW90YSwgInVzcnF1b3RhIn0sCiAJe09wdF9iYXJyaWVyLCAiYmFycmllcj0ldSJ9LAorCXtPcHRfYmFycmllciwgImJhcnJpZXIifSwKKwl7T3B0X25vYmFycmllciwgIm5vYmFycmllciJ9LAogCXtPcHRfaV92ZXJzaW9uLCAiaV92ZXJzaW9uIn0sCiAJe09wdF9zdHJpcGUsICJzdHJpcGU9JXUifSwKIAl7T3B0X3Jlc2l6ZSwgInJlc2l6ZSJ9LApAQCAtMTA3NSw2ICsxMDg5LDkgQEAKIAl7T3B0X25vZGVsYWxsb2MsICJub2RlbGFsbG9jIn0sCiAJe09wdF9pbm9kZV9yZWFkYWhlYWRfYmxrcywgImlub2RlX3JlYWRhaGVhZF9ibGtzPSV1In0sCiAJe09wdF9qb3VybmFsX2lvcHJpbywgImpvdXJuYWxfaW9wcmlvPSV1In0sCisJe09wdF9hdXRvX2RhX2FsbG9jLCAiYXV0b19kYV9hbGxvYz0ldSJ9LAorCXtPcHRfYXV0b19kYV9hbGxvYywgImF1dG9fZGFfYWxsb2MifSwKKwl7T3B0X25vYXV0b19kYV9hbGxvYywgIm5vYXV0b19kYV9hbGxvYyJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTEyMDcsMTIgKzEyMjQsNiBAQAogCQkJICAgICAgICJub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWJyZWFrOwogI2VuZGlmCi0JCWNhc2UgT3B0X3Jlc2VydmF0aW9uOgotCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBSRVNFUlZBVElPTik7Ci0JCQlicmVhazsKLQkJY2FzZSBPcHRfbm9yZXNlcnZhdGlvbjoKLQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBSRVNFUlZBVElPTik7Ci0JCQlicmVhazsKIAkJY2FzZSBPcHRfam91cm5hbF91cGRhdGU6CiAJCQkvKiBAQEAgRklYTUUgKi8KIAkJCS8qIEV2ZW50dWFsbHkgd2Ugd2lsbCB3YW50IHRvIGJlIGFibGUgdG8gY3JlYXRlCkBAIC0xNDE1LDkgKzE0MjYsMTQgQEAKIAkJY2FzZSBPcHRfYWJvcnQ6CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEFCT1JUKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9ub2JhcnJpZXI6CisJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfYmFycmllcjoKLQkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQotCQkJCXJldHVybiAwOworCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpIHsKKwkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOworCQkJCWJyZWFrOworCQkJfQogCQkJaWYgKG9wdGlvbikKIAkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCQkJZWxzZQpAQCAtMTQ2Myw2ICsxNDc5LDExIEBACiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAob3B0aW9uIDwgMCB8fCBvcHRpb24gPiAoMSA8PCAzMCkpCiAJCQkJcmV0dXJuIDA7CisJCQlpZiAob3B0aW9uICYgKG9wdGlvbiAtIDEpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBpbm9kZV9yZWFkYWhlYWRfYmxrcyIKKwkJCQkgICAgICAgIiBtdXN0IGJlIGEgcG93ZXIgb2YgMlxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CiAJCQlzYmktPnNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgPSBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfam91cm5hbF9pb3ByaW86CkBAIC0xNDczLDYgKzE0OTQsMTkgQEAKIAkJCSpqb3VybmFsX2lvcHJpbyA9IElPUFJJT19QUklPX1ZBTFVFKElPUFJJT19DTEFTU19CRSwKIAkJCQkJCQkgICAgb3B0aW9uKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9ub2F1dG9fZGFfYWxsb2M6CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsTk9fQVVUT19EQV9BTExPQyk7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfYXV0b19kYV9hbGxvYzoKKwkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKSB7CisJCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PX0FVVE9fREFfQUxMT0MpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKG9wdGlvbikKKwkJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fQVVUT19EQV9BTExPQyk7CisJCQllbHNlCisJCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LE5PX0FVVE9fREFfQUxMT0MpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiRVhUNC1mczogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgpAQCAtMTYxMiwxMCArMTY0NiwxMiBAQAogCQlnZHAgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBpLCAmYmgpOwogCiAJCWZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBpKTsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzICs9Ci0JCQlleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBnZHApOwotCQlzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MgKz0KLQkJCWV4dDRfZnJlZV9ibGtzX2NvdW50KHNiLCBnZHApOworCQlhdG9taWNfc2V0KCZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9pbm9kZXMsCisJCQkgICBleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBnZHApKTsKKwkJYXRvbWljX3NldCgmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfYmxvY2tzLAorCQkJICAgZXh0NF9mcmVlX2Jsa3NfY291bnQoc2IsIGdkcCkpOworCQlhdG9taWNfc2V0KCZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0udXNlZF9kaXJzLAorCQkJICAgZXh0NF91c2VkX2RpcnNfY291bnQoc2IsIGdkcCkpOwogCX0KIAogCXJldHVybiAxOwpAQCAtMTk5MSw2ICsyMDI3LDE4MSBAQAogCXJldHVybiAwOwogfQogCisvKiBzeXNmcyBzdXBwcnQgKi8KKworc3RydWN0IGV4dDRfYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZXh0NF9hdHRyICosIHN0cnVjdCBleHQ0X3NiX2luZm8gKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBleHQ0X2F0dHIgKiwgc3RydWN0IGV4dDRfc2JfaW5mbyAqLCAKKwkJCSBjb25zdCBjaGFyICosIHNpemVfdCk7CisJaW50IG9mZnNldDsKK307CisKK3N0YXRpYyBpbnQgcGFyc2Vfc3RydG91bChjb25zdCBjaGFyICpidWYsCisJCXVuc2lnbmVkIGxvbmcgbWF4LCB1bnNpZ25lZCBsb25nICp2YWx1ZSkKK3sKKwljaGFyICplbmRwOworCisJd2hpbGUgKCpidWYgJiYgaXNzcGFjZSgqYnVmKSkKKwkJYnVmKys7CisJKnZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJd2hpbGUgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQorCQllbmRwKys7CisJaWYgKCplbmRwIHx8ICp2YWx1ZSA+IG1heCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2Nrc19zaG93KHN0cnVjdCBleHQ0X2F0dHIgKmEsCisJCQkJCSAgICAgIHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKKwkJCQkJICAgICAgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsCisJCQkoczY0KSBwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNlc3Npb25fd3JpdGVfa2J5dGVzX3Nob3coc3RydWN0IGV4dDRfYXR0ciAqYSwKKwkJCQkJIHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktPnNfYnVkZHlfY2FjaGUtPmlfc2I7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbHVcbiIsCisJCQkocGFydF9zdGF0X3JlYWQoc2ItPnNfYmRldi0+YmRfcGFydCwgc2VjdG9yc1sxXSkgLQorCQkJIHNiaS0+c19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQpID4+IDEpOworfQorCitzdGF0aWMgc3NpemVfdCBsaWZldGltZV93cml0ZV9rYnl0ZXNfc2hvdyhzdHJ1Y3QgZXh0NF9hdHRyICphLAorCQkJCQkgIHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzYmktPnNfYnVkZHlfY2FjaGUtPmlfc2I7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAorCQkJc2JpLT5zX2tieXRlc193cml0dGVuICsgCisJCQkoKHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsIHNlY3RvcnNbMV0pIC0KKwkJCSAgRVhUNF9TQihzYiktPnNfc2VjdG9yc193cml0dGVuX3N0YXJ0KSA+PiAxKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlub2RlX3JlYWRhaGVhZF9ibGtzX3N0b3JlKHN0cnVjdCBleHQ0X2F0dHIgKmEsCisJCQkJCSAgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgdDsKKworCWlmIChwYXJzZV9zdHJ0b3VsKGJ1ZiwgMHg0MDAwMDAwMCwgJnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGlub2RlX3JlYWRhaGVhZF9ibGtzIG11c3QgYmUgYSBwb3dlciBvZiAyICovCisJaWYgKHQgJiAodC0xKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzYmktPnNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgPSB0OworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2JpX3VpX3Nob3coc3RydWN0IGV4dDRfYXR0ciAqYSwKKwkJCQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIGNoYXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBpbnQgKnVpID0gKHVuc2lnbmVkIGludCAqKSAoKChjaGFyICopIHNiaSkgKyBhLT5vZmZzZXQpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsICp1aSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNiaV91aV9zdG9yZShzdHJ1Y3QgZXh0NF9hdHRyICphLAorCQkJICAgIHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnVpID0gKHVuc2lnbmVkIGludCAqKSAoKChjaGFyICopIHNiaSkgKyBhLT5vZmZzZXQpOworCXVuc2lnbmVkIGxvbmcgdDsKKworCWlmIChwYXJzZV9zdHJ0b3VsKGJ1ZiwgMHhmZmZmZmZmZiwgJnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqdWkgPSB0OworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBFWFQ0X0FUVFJfT0ZGU0VUKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSxfZWxuYW1lKSBcCitzdGF0aWMgc3RydWN0IGV4dDRfYXR0ciBleHQ0X2F0dHJfIyNfbmFtZSA9IHsJCQlcCisJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUgfSwJXAorCS5zaG93CT0gX3Nob3csCQkJCQlcCisJLnN0b3JlCT0gX3N0b3JlLAkJCQkJXAorCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9zYl9pbmZvLCBfZWxuYW1lKSwJXAorfQorI2RlZmluZSBFWFQ0X0FUVFIobmFtZSwgbW9kZSwgc2hvdywgc3RvcmUpIFwKK3N0YXRpYyBzdHJ1Y3QgZXh0NF9hdHRyIGV4dDRfYXR0cl8jI25hbWUgPSBfX0FUVFIobmFtZSwgbW9kZSwgc2hvdywgc3RvcmUpCisKKyNkZWZpbmUgRVhUNF9ST19BVFRSKG5hbWUpIEVYVDRfQVRUUihuYW1lLCAwNDQ0LCBuYW1lIyNfc2hvdywgTlVMTCkKKyNkZWZpbmUgRVhUNF9SV19BVFRSKG5hbWUpIEVYVDRfQVRUUihuYW1lLCAwNjQ0LCBuYW1lIyNfc2hvdywgbmFtZSMjX3N0b3JlKQorI2RlZmluZSBFWFQ0X1JXX0FUVFJfU0JJX1VJKG5hbWUsIGVsbmFtZSkJXAorCUVYVDRfQVRUUl9PRkZTRVQobmFtZSwgMDY0NCwgc2JpX3VpX3Nob3csIHNiaV91aV9zdG9yZSwgZWxuYW1lKQorI2RlZmluZSBBVFRSX0xJU1QobmFtZSkgJmV4dDRfYXR0cl8jI25hbWUuYXR0cgorCitFWFQ0X1JPX0FUVFIoZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2Nrcyk7CitFWFQ0X1JPX0FUVFIoc2Vzc2lvbl93cml0ZV9rYnl0ZXMpOworRVhUNF9ST19BVFRSKGxpZmV0aW1lX3dyaXRlX2tieXRlcyk7CitFWFQ0X0FUVFJfT0ZGU0VUKGlub2RlX3JlYWRhaGVhZF9ibGtzLCAwNjQ0LCBzYmlfdWlfc2hvdywKKwkJIGlub2RlX3JlYWRhaGVhZF9ibGtzX3N0b3JlLCBzX2lub2RlX3JlYWRhaGVhZF9ibGtzKTsKK0VYVDRfUldfQVRUUl9TQklfVUkobWJfc3RhdHMsIHNfbWJfc3RhdHMpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYl9tYXhfdG9fc2Nhbiwgc19tYl9tYXhfdG9fc2Nhbik7CitFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX21pbl90b19zY2FuLCBzX21iX21pbl90b19zY2FuKTsKK0VYVDRfUldfQVRUUl9TQklfVUkobWJfb3JkZXIyX3JlcSwgc19tYl9vcmRlcjJfcmVxcyk7CitFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX3N0cmVhbV9yZXEsIHNfbWJfc3RyZWFtX3JlcXVlc3QpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYl9ncm91cF9wcmVhbGxvYywgc19tYl9ncm91cF9wcmVhbGxvYyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7CisJQVRUUl9MSVNUKGRlbGF5ZWRfYWxsb2NhdGlvbl9ibG9ja3MpLAorCUFUVFJfTElTVChzZXNzaW9uX3dyaXRlX2tieXRlcyksCisJQVRUUl9MSVNUKGxpZmV0aW1lX3dyaXRlX2tieXRlcyksCisJQVRUUl9MSVNUKGlub2RlX3JlYWRhaGVhZF9ibGtzKSwKKwlBVFRSX0xJU1QobWJfc3RhdHMpLAorCUFUVFJfTElTVChtYl9tYXhfdG9fc2NhbiksCisJQVRUUl9MSVNUKG1iX21pbl90b19zY2FuKSwKKwlBVFRSX0xJU1QobWJfb3JkZXIyX3JlcSksCisJQVRUUl9MSVNUKG1iX3N0cmVhbV9yZXEpLAorCUFUVFJfTElTVChtYl9ncm91cF9wcmVhbGxvYyksCisJTlVMTCwKK307CisKK3N0YXRpYyBzc2l6ZV90IGV4dDRfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvLAorCQkJCQkJc19rb2JqKTsKKwlzdHJ1Y3QgZXh0NF9hdHRyICphID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBleHQ0X2F0dHIsIGF0dHIpOworCisJcmV0dXJuIGEtPnNob3cgPyBhLT5zaG93KGEsIHNiaSwgYnVmKSA6IDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV4dDRfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGV4dDRfc2JfaW5mbywKKwkJCQkJCXNfa29iaik7CisJc3RydWN0IGV4dDRfYXR0ciAqYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZXh0NF9hdHRyLCBhdHRyKTsKKworCXJldHVybiBhLT5zdG9yZSA/IGEtPnN0b3JlKGEsIHNiaSwgYnVmLCBsZW4pIDogMDsKK30KKworc3RhdGljIHZvaWQgZXh0NF9zYl9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvLAorCQkJCQkJc19rb2JqKTsKKwljb21wbGV0ZSgmc2JpLT5zX2tvYmpfdW5yZWdpc3Rlcik7Cit9CisKKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZXh0NF9hdHRyX29wcyA9IHsKKwkuc2hvdwk9IGV4dDRfYXR0cl9zaG93LAorCS5zdG9yZQk9IGV4dDRfYXR0cl9zdG9yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGV4dDRfa3R5cGUgPSB7CisJLmRlZmF1bHRfYXR0cnMJPSBleHQ0X2F0dHJzLAorCS5zeXNmc19vcHMJPSAmZXh0NF9hdHRyX29wcywKKwkucmVsZWFzZQk9IGV4dDRfc2JfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiAJCQkJX19yZWxlYXNlcyhrZXJuZWxfbG9jaykKIAkJCQlfX2FjcXVpcmVzKGtlcm5lbF9sb2NrKQpAQCAtMjAyMSwxMiArMjIzMiwyMSBAQAogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJcmV0dXJuIC1FTk9NRU07CisKKwlzYmktPnNfYmxvY2tncm91cF9sb2NrID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGJsb2NrZ3JvdXBfbG9jayksIEdGUF9LRVJORUwpOworCWlmICghc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jaykgeworCQlrZnJlZShzYmkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJc2ItPnNfZnNfaW5mbyA9IHNiaTsKIAlzYmktPnNfbW91bnRfb3B0ID0gMDsKIAlzYmktPnNfcmVzdWlkID0gRVhUNF9ERUZfUkVTVUlEOwogCXNiaS0+c19yZXNnaWQgPSBFWFQ0X0RFRl9SRVNHSUQ7CiAJc2JpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzID0gRVhUNF9ERUZfSU5PREVfUkVBREFIRUFEX0JMS1M7CiAJc2JpLT5zX3NiX2Jsb2NrID0gc2JfYmxvY2s7CisJc2JpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCA9IHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsCisJCQkJCQkgICAgICBzZWN0b3JzWzFdKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIApAQCAtMjA2NCw2ICsyMjg0LDcgQEAKIAlzYi0+c19tYWdpYyA9IGxlMTZfdG9fY3B1KGVzLT5zX21hZ2ljKTsKIAlpZiAoc2ItPnNfbWFnaWMgIT0gRVhUNF9TVVBFUl9NQUdJQykKIAkJZ290byBjYW50ZmluZF9leHQ0OworCXNiaS0+c19rYnl0ZXNfd3JpdHRlbiA9IGxlNjRfdG9fY3B1KGVzLT5zX2tieXRlc193cml0dGVuKTsKIAogCS8qIFNldCBkZWZhdWx0cyBiZWZvcmUgd2UgcGFyc2UgdGhlIG1vdW50IG9wdGlvbnMgKi8KIAlkZWZfbW91bnRfb3B0cyA9IGxlMzJfdG9fY3B1KGVzLT5zX2RlZmF1bHRfbW91bnRfb3B0cyk7CkBAIC0yMTAxLDcgKzIzMjIsNiBAQAogCXNiaS0+c19taW5fYmF0Y2hfdGltZSA9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FOwogCXNiaS0+c19tYXhfYmF0Y2hfdGltZSA9IEVYVDRfREVGX01BWF9CQVRDSF9USU1FOwogCi0Jc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBSRVNFUlZBVElPTik7CiAJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBCQVJSSUVSKTsKIAogCS8qCkBAIC0yMzI1LDE0ICsyNTQ1LDkgQEAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmIChleHQ0X3Byb2Nfcm9vdCkKIAkJc2JpLT5zX3Byb2MgPSBwcm9jX21rZGlyKHNiLT5zX2lkLCBleHQ0X3Byb2Nfcm9vdCk7Ci0KLQlpZiAoc2JpLT5zX3Byb2MpCi0JCXByb2NfY3JlYXRlX2RhdGEoImlub2RlX3JlYWRhaGVhZF9ibGtzIiwgMDY0NCwgc2JpLT5zX3Byb2MsCi0JCQkJICZleHQ0X3VpX3Byb2NfZm9wcywKLQkJCQkgJnNiaS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyk7CiAjZW5kaWYKIAotCWJnbF9sb2NrX2luaXQoJnNiaS0+c19ibG9ja2dyb3VwX2xvY2spOworCWJnbF9sb2NrX2luaXQoc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGJfY291bnQ7IGkrKykgewogCQlibG9jayA9IGRlc2NyaXB0b3JfbG9jKHNiLCBsb2dpY2FsX3NiX2Jsb2NrLCBpKTsKQEAgLTI1NjQsNiArMjc3OSwxNiBAQAogCQlnb3RvIGZhaWxlZF9tb3VudDQ7CiAJfQogCisJc2JpLT5zX2tvYmoua3NldCA9IGV4dDRfa3NldDsKKwlpbml0X2NvbXBsZXRpb24oJnNiaS0+c19rb2JqX3VucmVnaXN0ZXIpOworCWVyciA9IGtvYmplY3RfaW5pdF9hbmRfYWRkKCZzYmktPnNfa29iaiwgJmV4dDRfa3R5cGUsIE5VTEwsCisJCQkJICAgIiVzIiwgc2ItPnNfaWQpOworCWlmIChlcnIpIHsKKwkJZXh0NF9tYl9yZWxlYXNlKHNiKTsKKwkJZXh0NF9leHRfcmVsZWFzZShzYik7CisJCWdvdG8gZmFpbGVkX21vdW50NDsKKwl9OworCiAJLyoKIAkgKiBha3BtOiBjb3JlIHJlYWRfc3VwZXIoKSBjYWxscyBpbiBoZXJlIHdpdGggdGhlIHN1cGVyYmxvY2sgbG9ja2VkLgogCSAqIFRoYXQgZGVhZGxvY2tzLCBiZWNhdXNlIG9ycGhhbiBjbGVhbnVwIG5lZWRzIHRvIGxvY2sgdGhlIHN1cGVyYmxvY2sKQEAgLTI2MTgsNyArMjg0Myw2IEBACiAJa2ZyZWUoc2JpLT5zX2dyb3VwX2Rlc2MpOwogZmFpbGVkX21vdW50OgogCWlmIChzYmktPnNfcHJvYykgewotCQlyZW1vdmVfcHJvY19lbnRyeSgiaW5vZGVfcmVhZGFoZWFkX2Jsa3MiLCBzYmktPnNfcHJvYyk7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KHNiLT5zX2lkLCBleHQ0X3Byb2Nfcm9vdCk7CiAJfQogI2lmZGVmIENPTkZJR19RVU9UQQpAQCAtMjkxMyw2ICszMTM3LDEwIEBACiAJCXNldF9idWZmZXJfdXB0b2RhdGUoc2JoKTsKIAl9CiAJZXMtPnNfd3RpbWUgPSBjcHVfdG9fbGUzMihnZXRfc2Vjb25kcygpKTsKKwllcy0+c19rYnl0ZXNfd3JpdHRlbiA9CisJCWNwdV90b19sZTY0KEVYVDRfU0Ioc2IpLT5zX2tieXRlc193cml0dGVuICsgCisJCQkgICAgKChwYXJ0X3N0YXRfcmVhZChzYi0+c19iZGV2LT5iZF9wYXJ0LCBzZWN0b3JzWzFdKSAtCisJCQkgICAgICBFWFQ0X1NCKHNiKS0+c19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQpID4+IDEpKTsKIAlleHQ0X2ZyZWVfYmxvY2tzX2NvdW50X3NldChlcywgcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKAogCQkJCQkmRVhUNF9TQihzYiktPnNfZnJlZWJsb2Nrc19jb3VudGVyKSk7CiAJZXMtPnNfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUzMihwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoCkBAIC0zNjQ3LDQ1ICszODc1LDYgQEAKIAlyZXR1cm4gZ2V0X3NiX2JkZXYoZnNfdHlwZSwgZmxhZ3MsIGRldl9uYW1lLCBkYXRhLCBleHQ0X2ZpbGxfc3VwZXIsIG1udCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBleHQ0X3VpX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JdW5zaWduZWQgaW50ICpwID0gbS0+cHJpdmF0ZTsKLQotCXNlcV9wcmludGYobSwgIiV1XG4iLCAqcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0NF91aV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGV4dDRfdWlfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKLX0KLQotc3RhdGljIHNzaXplX3QgZXh0NF91aV9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKLXsKLQl1bnNpZ25lZCBsb25nICpwID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwotCWNoYXIgc3RyWzMyXTsKLQotCWlmIChjbnQgPj0gc2l6ZW9mKHN0cikpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZiwgY250KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkqcCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7Ci0JcmV0dXJuIGNudDsKLX0KLQotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X3VpX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gZXh0NF91aV9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLQkud3JpdGUJCT0gZXh0NF91aV9wcm9jX3dyaXRlLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZXh0NF9mc190eXBlID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiZXh0NCIsCkBAIC0zNzE5LDYgKzM5MDgsOSBAQAogewogCWludCBlcnI7CiAKKwlleHQ0X2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJleHQ0IiwgTlVMTCwgZnNfa29iaik7CisJaWYgKCFleHQ0X2tzZXQpCisJCXJldHVybiAtRU5PTUVNOwogCWV4dDRfcHJvY19yb290ID0gcHJvY19ta2RpcigiZnMvZXh0NCIsIE5VTEwpOwogCWVyciA9IGluaXRfZXh0NF9tYmFsbG9jKCk7CiAJaWYgKGVycikKQEAgLTM3NjAsNiArMzk1Miw3IEBACiAJZXhpdF9leHQ0X3hhdHRyKCk7CiAJZXhpdF9leHQ0X21iYWxsb2MoKTsKIAlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZXh0NCIsIE5VTEwpOworCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJSZW15IENhcmQsIFN0ZXBoZW4gVHdlZWRpZSwgQW5kcmV3IE1vcnRvbiwgQW5kcmVhcyBEaWxnZXIsIFRoZW9kb3JlIFRzJ28gYW5kIG90aGVycyIpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCBkZTAwMDRmLi4yOTY3ODVhIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtNTIzLDcgKzUyMyw5IEBACiAKIHN0YXRpYyBpbnQgZmF0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7Ci0Jc3RydWN0IG1zZG9zX3NiX2luZm8gKnNiaSA9IE1TRE9TX1NCKGRlbnRyeS0+ZF9zYik7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJLyogSWYgdGhlIGNvdW50IG9mIGZyZWUgY2x1c3RlciBpcyBzdGlsbCB1bmtub3duLCBjb3VudHMgaXQgaGVyZS4gKi8KIAlpZiAoc2JpLT5mcmVlX2NsdXN0ZXJzID09IC0xIHx8ICFzYmktPmZyZWVfY2x1c192YWxpZCkgewpAQCAtNTM3LDYgKzUzOSw4IEBACiAJYnVmLT5mX2Jsb2NrcyA9IHNiaS0+bWF4X2NsdXN0ZXIgLSBGQVRfU1RBUlRfRU5UOwogCWJ1Zi0+Zl9iZnJlZSA9IHNiaS0+ZnJlZV9jbHVzdGVyczsKIAlidWYtPmZfYmF2YWlsID0gc2JpLT5mcmVlX2NsdXN0ZXJzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gc2JpLT5vcHRpb25zLmlzdmZhdCA/IDI2MCA6IDEyOwogCiAJcmV0dXJuIDA7CkBAIC05MzAsNyArOTM0LDcgQEAKIAogCW9wdHMtPmZzX3VpZCA9IGN1cnJlbnRfdWlkKCk7CiAJb3B0cy0+ZnNfZ2lkID0gY3VycmVudF9naWQoKTsKLQlvcHRzLT5mc19mbWFzayA9IG9wdHMtPmZzX2RtYXNrID0gY3VycmVudC0+ZnMtPnVtYXNrOworCW9wdHMtPmZzX2ZtYXNrID0gY3VycmVudF91bWFzaygpOwogCW9wdHMtPmFsbG93X3V0aW1lID0gLTE7CiAJb3B0cy0+Y29kZXBhZ2UgPSBmYXRfZGVmYXVsdF9jb2RlcGFnZTsKIAlvcHRzLT5pb2NoYXJzZXQgPSBmYXRfZGVmYXVsdF9pb2NoYXJzZXQ7CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBkODY1Y2E2Ni4uY2M4ZTRkZSAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC01MzEsNiArNTMxLDEyIEBACiAJCWlmICghbmV3KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHRha2UgZl9sb2NrIGZpcnN0IHNpbmNlIGl0J3Mgbm90IGFuIElSUS1zYWZlCisJICogbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfbG9ja19pcnEoJmZhc3luY19sb2NrKTsKIAlmb3IgKGZwID0gZmFwcDsgKGZhID0gKmZwKSAhPSBOVUxMOyBmcCA9ICZmYS0+ZmFfbmV4dCkgewogCQlpZiAoZmEtPmZhX2ZpbGUgPT0gZmlscCkgewpAQCAtNTU1LDE0ICs1NjEsMTIgQEAKIAkJcmVzdWx0ID0gMTsKIAl9CiBvdXQ6Ci0JLyogRml4IHVwIEZBU1lOQyBiaXQgd2hpbGUgc3RpbGwgaG9sZGluZyBmYXN5bmNfbG9jayAqLwotCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwogCWVsc2UKIAkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXdyaXRlX3VubG9ja19pcnEoJmZhc3luY19sb2NrKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IDk5OTAzYWIuLjkxMDEzZmYgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJc3RydWN0IGlub2RlICp0YWlsX2lub2RlOwogCiAJCXRhaWxfaW5vZGUgPSBsaXN0X2VudHJ5KHNiLT5zX2RpcnR5Lm5leHQsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKLQkJaWYgKCF0aW1lX2FmdGVyX2VxKGlub2RlLT5kaXJ0aWVkX3doZW4sCisJCWlmICh0aW1lX2JlZm9yZShpbm9kZS0+ZGlydGllZF93aGVuLAogCQkJCXRhaWxfaW5vZGUtPmRpcnRpZWRfd2hlbikpCiAJCQlpbm9kZS0+ZGlydGllZF93aGVuID0gamlmZmllczsKIAl9CkBAIC0yMjAsNiArMjIwLDIxIEBACiAJd2FrZV91cF9iaXQoJmlub2RlLT5pX3N0YXRlLCBfX0lfU1lOQyk7CiB9CiAKK3N0YXRpYyBib29sIGlub2RlX2RpcnRpZWRfYWZ0ZXIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyB0KQoreworCWJvb2wgcmV0ID0gdGltZV9hZnRlcihpbm9kZS0+ZGlydGllZF93aGVuLCB0KTsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJLyoKKwkgKiBGb3IgaW5vZGVzIGJlaW5nIGNvbnN0YW50bHkgcmVkaXJ0aWVkLCBkaXJ0aWVkX3doZW4gY2FuIGdldCBzdHVjay4KKwkgKiBJdCBfYXBwZWFyc18gdG8gYmUgaW4gdGhlIGZ1dHVyZSwgYnV0IGlzIGFjdHVhbGx5IGluIGRpc3RhbnQgcGFzdC4KKwkgKiBUaGlzIHRlc3QgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgc3VjaCB3cmFwcGVkLWFyb3VuZCByZWxhdGl2ZSB0aW1lcworCSAqIGZyb20gcGVybWFuZW50bHkgc3RvcHBpbmcgdGhlIHdob2xlIHBkZmx1c2ggd3JpdGViYWNrLgorCSAqLworCXJldCA9IHJldCAmJiB0aW1lX2JlZm9yZV9lcShpbm9kZS0+ZGlydGllZF93aGVuLCBqaWZmaWVzKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBNb3ZlIGV4cGlyZWQgZGlydHkgaW5vZGVzIGZyb20gQGRlbGF5aW5nX3F1ZXVlIHRvIEBkaXNwYXRjaF9xdWV1ZS4KICAqLwpAQCAtMjMxLDcgKzI0Niw3IEBACiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBsaXN0X2VudHJ5KGRlbGF5aW5nX3F1ZXVlLT5wcmV2LAogCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlpZiAob2xkZXJfdGhhbl90aGlzICYmCi0JCQl0aW1lX2FmdGVyKGlub2RlLT5kaXJ0aWVkX3doZW4sICpvbGRlcl90aGFuX3RoaXMpKQorCQkgICAgaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgKm9sZGVyX3RoYW5fdGhpcykpCiAJCQlicmVhazsKIAkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwYXRjaF9xdWV1ZSk7CiAJfQpAQCAtNDkyLDggKzUwNywxMSBAQAogCQkJY29udGludWU7CQkvKiBibG9ja2RldiBoYXMgd3JvbmcgcXVldWUgKi8KIAkJfQogCi0JCS8qIFdhcyB0aGlzIGlub2RlIGRpcnRpZWQgYWZ0ZXIgc3luY19zYl9pbm9kZXMgd2FzIGNhbGxlZD8gKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoaW5vZGUtPmRpcnRpZWRfd2hlbiwgc3RhcnQpKQorCQkvKgorCQkgKiBXYXMgdGhpcyBpbm9kZSBkaXJ0aWVkIGFmdGVyIHN5bmNfc2JfaW5vZGVzIHdhcyBjYWxsZWQ/CisJCSAqIFRoaXMga2VlcHMgc3luYyBmcm9tIGV4dHJhIGpvYnMgYW5kIGxpdmVsb2NrLgorCQkgKi8KKwkJaWYgKGlub2RlX2RpcnRpZWRfYWZ0ZXIoaW5vZGUsIHN0YXJ0KSkKIAkJCWJyZWFrOwogCiAJCS8qIElzIGFub3RoZXIgcGRmbHVzaCBhbHJlYWR5IGZsdXNoaW5nIHRoaXMgcXVldWU/ICovCkBAIC01MzgsNyArNTU2LDggQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQlpZiAoaW5vZGUtPmlfc3RhdGUgJgorCQkJCQkoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJCWNvbnRpbnVlOwogCQkJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAJCQlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQpkaWZmIC0tZ2l0IGEvZnMvZnNfc3RydWN0LmMgYi9mcy9mc19zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUwNTkwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNfc3RydWN0LmMKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KKworLyoKKyAqIFJlcGxhY2UgdGhlIGZzLT57cm9vdG1udCxyb290fSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgorICogSXQgY2FuIGJsb2NrLgorICovCit2b2lkIHNldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgcGF0aCBvbGRfcm9vdDsKKworCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwlvbGRfcm9vdCA9IGZzLT5yb290OworCWZzLT5yb290ID0gKnBhdGg7CisJcGF0aF9nZXQocGF0aCk7CisJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CisJaWYgKG9sZF9yb290LmRlbnRyeSkKKwkJcGF0aF9wdXQoJm9sZF9yb290KTsKK30KKworLyoKKyAqIFJlcGxhY2UgdGhlIGZzLT57cHdkbW50LHB3ZH0gd2l0aCB7bW50LGRlbnRyeX0uIFB1dCB0aGUgb2xkIHZhbHVlcy4KKyAqIEl0IGNhbiBibG9jay4KKyAqLwordm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgcGF0aCBvbGRfcHdkOworCisJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCW9sZF9wd2QgPSBmcy0+cHdkOworCWZzLT5wd2QgPSAqcGF0aDsKKwlwYXRoX2dldChwYXRoKTsKKwl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmIChvbGRfcHdkLmRlbnRyeSkKKwkJcGF0aF9wdXQoJm9sZF9wd2QpOworfQorCit2b2lkIGNocm9vdF9mc19yZWZzKHN0cnVjdCBwYXRoICpvbGRfcm9vdCwgc3RydWN0IHBhdGggKm5ld19yb290KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJc3RydWN0IGZzX3N0cnVjdCAqZnM7CisJaW50IGNvdW50ID0gMDsKKworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQl0YXNrX2xvY2socCk7CisJCWZzID0gcC0+ZnM7CisJCWlmIChmcykgeworCQkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQkJaWYgKGZzLT5yb290LmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CisJCQkgICAgJiYgZnMtPnJvb3QubW50ID09IG9sZF9yb290LT5tbnQpIHsKKwkJCQlwYXRoX2dldChuZXdfcm9vdCk7CisJCQkJZnMtPnJvb3QgPSAqbmV3X3Jvb3Q7CisJCQkJY291bnQrKzsKKwkJCX0KKwkJCWlmIChmcy0+cHdkLmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CisJCQkgICAgJiYgZnMtPnB3ZC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkgeworCQkJCXBhdGhfZ2V0KG5ld19yb290KTsKKwkJCQlmcy0+cHdkID0gKm5ld19yb290OworCQkJCWNvdW50Kys7CisJCQl9CisJCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwkJfQorCQl0YXNrX3VubG9jayhwKTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJcGF0aF9wdXQob2xkX3Jvb3QpOworfQorCit2b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKQoreworCXBhdGhfcHV0KCZmcy0+cm9vdCk7CisJcGF0aF9wdXQoJmZzLT5wd2QpOworCWttZW1fY2FjaGVfZnJlZShmc19jYWNoZXAsIGZzKTsKK30KKwordm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gdHNrLT5mczsKKworCWlmIChmcykgeworCQlpbnQga2lsbDsKKwkJdGFza19sb2NrKHRzayk7CisJCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwkJdHNrLT5mcyA9IE5VTEw7CisJCWtpbGwgPSAhLS1mcy0+dXNlcnM7CisJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCQl0YXNrX3VubG9jayh0c2spOworCQlpZiAoa2lsbCkKKwkJCWZyZWVfZnNfc3RydWN0KGZzKTsKKwl9Cit9CisKK3N0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwkvKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgZnMgLSB0aGluayB3aHkgOy0pICovCisJaWYgKGZzKSB7CisJCWZzLT51c2VycyA9IDE7CisJCWZzLT5pbl9leGVjID0gMDsKKwkJcndsb2NrX2luaXQoJmZzLT5sb2NrKTsKKwkJZnMtPnVtYXNrID0gb2xkLT51bWFzazsKKwkJcmVhZF9sb2NrKCZvbGQtPmxvY2spOworCQlmcy0+cm9vdCA9IG9sZC0+cm9vdDsKKwkJcGF0aF9nZXQoJm9sZC0+cm9vdCk7CisJCWZzLT5wd2QgPSBvbGQtPnB3ZDsKKwkJcGF0aF9nZXQoJm9sZC0+cHdkKTsKKwkJcmVhZF91bmxvY2soJm9sZC0+bG9jayk7CisJfQorCXJldHVybiBmczsKK30KKworaW50IHVuc2hhcmVfZnNfc3RydWN0KHZvaWQpCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKwlzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMgPSBjb3B5X2ZzX3N0cnVjdChmcyk7CisJaW50IGtpbGw7CisKKwlpZiAoIW5ld19mcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCWtpbGwgPSAhLS1mcy0+dXNlcnM7CisJY3VycmVudC0+ZnMgPSBuZXdfZnM7CisJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CisJdGFza191bmxvY2soY3VycmVudCk7CisKKwlpZiAoa2lsbCkKKwkJZnJlZV9mc19zdHJ1Y3QoZnMpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnNoYXJlX2ZzX3N0cnVjdCk7CisKK2ludCBjdXJyZW50X3VtYXNrKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnQtPmZzLT51bWFzazsKK30KK0VYUE9SVF9TWU1CT0woY3VycmVudF91bWFzayk7CisKKy8qIHRvIGJlIG1lbnRpb25lZCBvbmx5IGluIElOSVRfVEFTSyAqLworc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0geworCS51c2VycwkJPSAxLAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChpbml0X2ZzLmxvY2spLAorCS51bWFzawkJPSAwMDIyLAorfTsKKwordm9pZCBkYWVtb25pemVfZnNfc3RydWN0KHZvaWQpCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKworCWlmIChmcykgeworCQlpbnQga2lsbDsKKworCQl0YXNrX2xvY2soY3VycmVudCk7CisKKwkJd3JpdGVfbG9jaygmaW5pdF9mcy5sb2NrKTsKKwkJaW5pdF9mcy51c2VycysrOworCQl3cml0ZV91bmxvY2soJmluaXRfZnMubG9jayk7CisKKwkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQljdXJyZW50LT5mcyA9ICZpbml0X2ZzOworCQlraWxsID0gIS0tZnMtPnVzZXJzOworCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKworCQl0YXNrX3VubG9jayhjdXJyZW50KTsKKwkJaWYgKGtpbGwpCisJCQlmcmVlX2ZzX3N0cnVjdChmcyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9LY29uZmlnIGIvZnMvZnNjYWNoZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmI4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL0tjb25maWcKQEAgLTAsMCArMSw1NiBAQAorCitjb25maWcgRlNDQUNIRQorCXRyaXN0YXRlICJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNMT1dfV09SSworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlCisJICB1c2VkIGJ5IHZhcmlvdXMgbmV0d29yayBhbmQgb3RoZXIgZmlsZXN5c3RlbXMgdG8gY2FjaGUgZGF0YSBsb2NhbGx5LgorCSAgRGlmZmVyZW50IHNvcnRzIG9mIGNhY2hlcyBjYW4gYmUgcGx1Z2dlZCBpbiwgZGVwZW5kaW5nIG9uIHRoZQorCSAgcmVzb3VyY2VzIGF2YWlsYWJsZS4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIEZTQ0FDSEVfU1RBVFMKKwlib29sICJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgUFJPQ19GUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBsb2NhbAorCSAgY2FjaGluZyBhbmQgZXhwb3J0ZWQgdGhyb3VnaCBmaWxlOgorCisJCS9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHMKKworCSAgVGhlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIGFkZHMgYSBjZXJ0YWluIGFtb3VudCBvZiBvdmVyaGVhZCB0bworCSAgZXhlY3V0aW9uIGFzIHRoZXJlIGFyZSBhIHF1aXRlIGEgZmV3IHN0YXRzIGdhdGhlcmVkLCBhbmQgb24gYQorCSAgbXVsdGktQ1BVIHN5c3RlbSB0aGVzZSBtYXkgYmUgb24gY2FjaGVsaW5lcyB0aGF0IGtlZXAgYm91bmNpbmcKKwkgIGJldHdlZW4gQ1BVcy4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3RhdHMgYXJlIHZlcnkgdXNlZnVsIGZvcgorCSAgZGVidWdnaW5nIHB1cnBvc2VzLiAgU2F5aW5nICdZJyBoZXJlIGlzIHJlY29tbWVuZGVkLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgRlNDQUNIRV9ISVNUT0dSQU0KKwlib29sICJHYXRoZXIgbGF0ZW5jeSBpbmZvcm1hdGlvbiBvbiBsb2NhbCBjYWNoaW5nIgorCWRlcGVuZHMgb24gRlNDQUNIRSAmJiBQUk9DX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyZWQgb24gbG9jYWwKKwkgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZToKKworCQkvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbQorCisJICBUaGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhpc3RvZ3JhbSBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG8KKwkgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG9pbnRzIGF0IHdoaWNoIGRhdGEgaXMgZ2F0aGVyZWQsCisJICBhbmQgb24gYSBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcAorCSAgYm91bmNpbmcgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBoaXN0b2dyYW0gbWF5IGJlCisJICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnTicgaGVyZSBpcyByZWNvbW1lbmRlZC4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIEZTQ0FDSEVfREVCVUcKKwlib29sICJEZWJ1ZyBGUy1DYWNoZSIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUKKwloZWxwCisJICBUaGlzIHBlcm1pdHMgZGVidWdnaW5nIHRvIGJlIGR5bmFtaWNhbGx5IGVuYWJsZWQgaW4gdGhlIGxvY2FsIGNhY2hpbmcKKwkgIG1hbmFnZW1lbnQgbW9kdWxlLiAgSWYgdGhpcyBpcyBzZXQsIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IG1heSBiZQorCSAgZW5hYmxlZCBieSBzZXR0aW5nIGJpdHMgaW4gL3N5cy9tb2R1bGVzL2ZzY2FjaGUvcGFyYW1ldGVyL2RlYnVnLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9NYWtlZmlsZSBiL2ZzL2ZzY2FjaGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NzFiOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBAQAorIworIyBNYWtlZmlsZSBmb3IgZ2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hpbmcgY29kZQorIworCitmc2NhY2hlLXkgOj0gXAorCWNhY2hlLm8gXAorCWNvb2tpZS5vIFwKKwlmc2RlZi5vIFwKKwltYWluLm8gXAorCW5ldGZzLm8gXAorCW9iamVjdC5vIFwKKwlvcGVyYXRpb24ubyBcCisJcGFnZS5vCisKK2ZzY2FjaGUtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitmc2NhY2hlLSQoQ09ORklHX0ZTQ0FDSEVfU1RBVFMpICs9IHN0YXRzLm8KK2ZzY2FjaGUtJChDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0pICs9IGhpc3RvZ3JhbS5vCisKK29iai0kKENPTkZJR19GU0NBQ0hFKSA6PSBmc2NhY2hlLm8KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvY2FjaGUuYyBiL2ZzL2ZzY2FjaGUvY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjE5ODViCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9jYWNoZS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKiBGUy1DYWNoZSBjYWNoZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworTElTVF9IRUFEKGZzY2FjaGVfY2FjaGVfbGlzdCk7CitERUNMQVJFX1JXU0VNKGZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EpOworRVhQT1JUX1NZTUJPTChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EpOworCitzdGF0aWMgTElTVF9IRUFEKGZzY2FjaGVfY2FjaGVfdGFnX2xpc3QpOworCisvKgorICogbG9vayB1cCBhIGNhY2hlIHRhZworICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKl9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWcsICp4dGFnOworCisJLyogZmlyc3RseSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGFnIHVuZGVyIHJlYWQgbG9jayAqLworCWRvd25fcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGFnLCAmZnNjYWNoZV9jYWNoZV90YWdfbGlzdCwgbGluaykgeworCQlpZiAoc3RyY21wKHRhZy0+bmFtZSwgbmFtZSkgPT0gMCkgeworCQkJYXRvbWljX2luYygmdGFnLT51c2FnZSk7CisJCQl1cF9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCQkJcmV0dXJuIHRhZzsKKwkJfQorCX0KKworCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwkvKiB0aGUgdGFnIGRvZXMgbm90IGV4aXN0IC0gY3JlYXRlIGEgY2FuZGlkYXRlICovCisJeHRhZyA9IGt6YWxsb2Moc2l6ZW9mKCp4dGFnKSArIHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICgheHRhZykKKwkJLyogcmV0dXJuIGEgZHVtbXkgdGFnIGlmIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhdG9taWNfc2V0KCZ4dGFnLT51c2FnZSwgMSk7CisJc3RyY3B5KHh0YWctPm5hbWUsIG5hbWUpOworCisJLyogd3JpdGUgbG9jaywgc2VhcmNoIGFnYWluIGFuZCBhZGQgaWYgc3RpbGwgbm90IHByZXNlbnQgKi8KKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YWcsICZmc2NhY2hlX2NhY2hlX3RhZ19saXN0LCBsaW5rKSB7CisJCWlmIChzdHJjbXAodGFnLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisJCQlhdG9taWNfaW5jKCZ0YWctPnVzYWdlKTsKKwkJCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCQkJa2ZyZWUoeHRhZyk7CisJCQlyZXR1cm4gdGFnOworCQl9CisJfQorCisJbGlzdF9hZGRfdGFpbCgmeHRhZy0+bGluaywgJmZzY2FjaGVfY2FjaGVfdGFnX2xpc3QpOworCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCXJldHVybiB4dGFnOworfQorCisvKgorICogcmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIGNhY2hlIHRhZworICovCit2b2lkIF9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZykKK3sKKwlpZiAodGFnICE9IEVSUl9QVFIoLUVOT01FTSkpIHsKKwkJZG93bl93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGFnLT51c2FnZSkpCisJCQlsaXN0X2RlbF9pbml0KCZ0YWctPmxpbmspOworCQllbHNlCisJCQl0YWcgPSBOVUxMOworCisJCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJCWtmcmVlKHRhZyk7CisJfQorfQorCisvKgorICogc2VsZWN0IGEgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYW4gb2JqZWN0CisgKiAtIHRoZSBjYWNoZSBhZGRyZW1vdmUgc2VtYXBob3JlIG11c3QgYmUgYXQgbGVhc3QgcmVhZC1sb2NrZWQgYnkgdGhlIGNhbGxlcgorICogLSB0aGUgb2JqZWN0IHdpbGwgbmV2ZXIgYmUgYW4gaW5kZXgKKyAqLworc3RydWN0IGZzY2FjaGVfY2FjaGUgKmZzY2FjaGVfc2VsZWN0X2NhY2hlX2Zvcl9vYmplY3QoCisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWc7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlOworCisJX2VudGVyKCIiKTsKKworCWlmIChsaXN0X2VtcHR5KCZmc2NhY2hlX2NhY2hlX2xpc3QpKSB7CisJCV9sZWF2ZSgiID0gTlVMTCBbbm8gY2FjaGVdIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHdlIGNoZWNrIHRoZSBwYXJlbnQgdG8gZGV0ZXJtaW5lIHRoZSBjYWNoZSB0byB1c2UgKi8KKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwkvKiB0aGUgZmlyc3QgaW4gdGhlIHBhcmVudCdzIGJhY2tpbmcgbGlzdCBzaG91bGQgYmUgdGhlIHByZWZlcnJlZAorCSAqIGNhY2hlICovCisJaWYgKCFobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisKKwkJY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCQlpZiAob2JqZWN0LT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORyB8fAorCQkgICAgdGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmY2FjaGUtPmZsYWdzKSkKKwkJCWNhY2hlID0gTlVMTDsKKworCQlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwkJX2xlYXZlKCIgPSAlcCBbcGFyZW50XSIsIGNhY2hlKTsKKwkJcmV0dXJuIGNhY2hlOworCX0KKworCS8qIHRoZSBwYXJlbnQgaXMgdW5iYWNrZWQgKi8KKwlpZiAoY29va2llLT5kZWYtPnR5cGUgIT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQkvKiBjb29raWUgbm90IGFuIGluZGV4IGFuZCBpcyB1bmJhY2tlZCAqLworCQlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwkJX2xlYXZlKCIgPSBOVUxMIFtjb29raWUgdWIsbmldIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJaWYgKCFjb29raWUtPmRlZi0+c2VsZWN0X2NhY2hlKQorCQlnb3RvIG5vX3ByZWZlcmVuY2U7CisKKwkvKiBhc2sgdGhlIG5ldGZzIGZvciBpdHMgcHJlZmVyZW5jZSAqLworCXRhZyA9IGNvb2tpZS0+ZGVmLT5zZWxlY3RfY2FjaGUoY29va2llLT5wYXJlbnQtPm5ldGZzX2RhdGEsCisJCQkJCWNvb2tpZS0+bmV0ZnNfZGF0YSk7CisJaWYgKCF0YWcpCisJCWdvdG8gbm9fcHJlZmVyZW5jZTsKKworCWlmICh0YWcgPT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlfbGVhdmUoIiA9IE5VTEwgW25vbWVtIHRhZ10iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCF0YWctPmNhY2hlKSB7CisJCV9sZWF2ZSgiID0gTlVMTCBbdW5iYWNrZWQgdGFnXSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmdGFnLT5jYWNoZS0+ZmxhZ3MpKQorCQlyZXR1cm4gTlVMTDsKKworCV9sZWF2ZSgiID0gJXAgW3NwZWNpZmljXSIsIHRhZy0+Y2FjaGUpOworCXJldHVybiB0YWctPmNhY2hlOworCitub19wcmVmZXJlbmNlOgorCS8qIG5ldGZzIGhhcyBubyBwcmVmZXJlbmNlIC0ganVzdCBzZWxlY3QgZmlyc3QgY2FjaGUgKi8KKwljYWNoZSA9IGxpc3RfZW50cnkoZnNjYWNoZV9jYWNoZV9saXN0Lm5leHQsCisJCQkgICBzdHJ1Y3QgZnNjYWNoZV9jYWNoZSwgbGluayk7CisJX2xlYXZlKCIgPSAlcCBbZmlyc3RdIiwgY2FjaGUpOworCXJldHVybiBjYWNoZTsKK30KKworLyoqCisgKiBmc2NhY2hlX2luaXRfY2FjaGUgLSBJbml0aWFsaXNlIGEgY2FjaGUgcmVjb3JkCisgKiBAY2FjaGU6IFRoZSBjYWNoZSByZWNvcmQgdG8gYmUgaW5pdGlhbGlzZWQKKyAqIEBvcHM6IFRoZSBjYWNoZSBvcGVyYXRpb25zIHRvIGJlIGluc3RhbGxlZCBpbiB0aGF0IHJlY29yZAorICogQGlkZm10OiBGb3JtYXQgc3RyaW5nIHRvIGRlZmluZSBpZGVudGlmaWVyCisgKiBALi4uOiBzcHJpbnRmLXN0eWxlIGFyZ3VtZW50cworICoKKyAqIEluaXRpYWxpc2UgYSByZWNvcmQgb2YgYSBjYWNoZSBhbmQgZmlsbCBpbiB0aGUgbmFtZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV9pbml0X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyAqb3BzLAorCQkJY29uc3QgY2hhciAqaWRmbXQsCisJCQkuLi4pCit7CisJdmFfbGlzdCB2YTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOworCisJY2FjaGUtPm9wcyA9IG9wczsKKworCXZhX3N0YXJ0KHZhLCBpZGZtdCk7CisJdnNucHJpbnRmKGNhY2hlLT5pZGVudGlmaWVyLCBzaXplb2YoY2FjaGUtPmlkZW50aWZpZXIpLCBpZGZtdCwgdmEpOworCXZhX2VuZCh2YSk7CisKKwlJTklUX1dPUksoJmNhY2hlLT5vcF9nYywgZnNjYWNoZV9vcGVyYXRpb25fZ2MpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5vYmplY3RfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5vcF9nY19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+b3BfZ2NfbGlzdF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9pbml0X2NhY2hlKTsKKworLyoqCisgKiBmc2NhY2hlX2FkZF9jYWNoZSAtIERlY2xhcmUgYSBjYWNoZSBhcyBiZWluZyBvcGVuIGZvciBidXNpbmVzcworICogQGNhY2hlOiBUaGUgcmVjb3JkIGRlc2NyaWJpbmcgdGhlIGNhY2hlCisgKiBAaWZzZGVmOiBUaGUgcmVjb3JkIG9mIHRoZSBjYWNoZSBvYmplY3QgZGVzY3JpYmluZyB0aGUgdG9wLWxldmVsIGluZGV4CisgKiBAdGFnbmFtZTogVGhlIHRhZyBkZXNjcmliaW5nIHRoaXMgY2FjaGUKKyAqCisgKiBBZGQgYSBjYWNoZSB0byB0aGUgc3lzdGVtLCBtYWtpbmcgaXQgYXZhaWxhYmxlIGZvciBuZXRmcydzIHRvIHVzZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK2ludCBmc2NhY2hlX2FkZF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCSAgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqaWZzZGVmLAorCQkgICAgICBjb25zdCBjaGFyICp0YWduYW1lKQoreworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnOworCisJQlVHX09OKCFjYWNoZS0+b3BzKTsKKwlCVUdfT04oIWlmc2RlZik7CisKKwljYWNoZS0+ZmxhZ3MgPSAwOworCWlmc2RlZi0+ZXZlbnRfbWFzayA9IFVMT05HX01BWCAmIH4oMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwlpZnNkZWYtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQUNUSVZFOworCisJaWYgKCF0YWduYW1lKQorCQl0YWduYW1lID0gY2FjaGUtPmlkZW50aWZpZXI7CisKKwlCVUdfT04oIXRhZ25hbWVbMF0pOworCisJX2VudGVyKCJ7JXMuJXN9LCwlcyIsIGNhY2hlLT5vcHMtPm5hbWUsIGNhY2hlLT5pZGVudGlmaWVyLCB0YWduYW1lKTsKKworCS8qIHdlIHVzZSB0aGUgY2FjaGUgdGFnIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGNhY2hlcyAqLworCXRhZyA9IF9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKHRhZ25hbWUpOworCWlmIChJU19FUlIodGFnKSkKKwkJZ290byBub21lbTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZTQ0FDSEVfVEFHX1JFU0VSVkVELCAmdGFnLT5mbGFncykpCisJCWdvdG8gdGFnX2luX3VzZTsKKworCWNhY2hlLT5rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCh0YWduYW1lLCBmc2NhY2hlX3Jvb3QpOworCWlmICghY2FjaGUtPmtvYmopCisJCWdvdG8gZXJyb3I7CisKKwlpZnNkZWYtPmNvb2tpZSA9ICZmc2NhY2hlX2ZzZGVmX2luZGV4OworCWlmc2RlZi0+Y2FjaGUgPSBjYWNoZTsKKwljYWNoZS0+ZnNkZWYgPSBpZnNkZWY7CisKKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJdGFnLT5jYWNoZSA9IGNhY2hlOworCWNhY2hlLT50YWcgPSB0YWc7CisKKwkvKiBhZGQgdGhlIGNhY2hlIHRvIHRoZSBsaXN0ICovCisJbGlzdF9hZGQoJmNhY2hlLT5saW5rLCAmZnNjYWNoZV9jYWNoZV9saXN0KTsKKworCS8qIGFkZCB0aGUgY2FjaGUncyBuZXRmcyBkZWZpbml0aW9uIGluZGV4IG9iamVjdCB0byB0aGUgY2FjaGUncworCSAqIGxpc3QgKi8KKwlzcGluX2xvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpZnNkZWYtPmNhY2hlX2xpbmssICZjYWNoZS0+b2JqZWN0X2xpc3QpOworCXNwaW5fdW5sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisKKwkvKiBhZGQgdGhlIGNhY2hlJ3MgbmV0ZnMgZGVmaW5pdGlvbiBpbmRleCBvYmplY3QgdG8gdGhlIHRvcCBsZXZlbCBpbmRleAorCSAqIGNvb2tpZSBhcyBhIGtub3duIGJhY2tpbmcgb2JqZWN0ICovCisJc3Bpbl9sb2NrKCZmc2NhY2hlX2ZzZGVmX2luZGV4LmxvY2spOworCisJaGxpc3RfYWRkX2hlYWQoJmlmc2RlZi0+Y29va2llX2xpbmssCisJCSAgICAgICAmZnNjYWNoZV9mc2RlZl9pbmRleC5iYWNraW5nX29iamVjdHMpOworCisJYXRvbWljX2luYygmZnNjYWNoZV9mc2RlZl9pbmRleC51c2FnZSk7CisKKwkvKiBkb25lICovCisJc3Bpbl91bmxvY2soJmZzY2FjaGVfZnNkZWZfaW5kZXgubG9jayk7CisJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBDYWNoZSBcIiVzXCIgYWRkZWQgKHR5cGUgJXMpXG4iLAorCSAgICAgICBjYWNoZS0+dGFnLT5uYW1lLCBjYWNoZS0+b3BzLT5uYW1lKTsKKwlrb2JqZWN0X3VldmVudChjYWNoZS0+a29iaiwgS09CSl9BREQpOworCisJX2xlYXZlKCIgPSAwIFslc10iLCBjYWNoZS0+aWRlbnRpZmllcik7CisJcmV0dXJuIDA7CisKK3RhZ19pbl91c2U6CisJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ2FjaGUgdGFnICclcycgYWxyZWFkeSBpbiB1c2VcbiIsIHRhZ25hbWUpOworCV9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyh0YWcpOworCV9sZWF2ZSgiID0gLUVYSVNUIik7CisJcmV0dXJuIC1FRVhJU1Q7CisKK2Vycm9yOgorCV9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyh0YWcpOworCV9sZWF2ZSgiID0gLUVJTlZBTCIpOworCXJldHVybiAtRUlOVkFMOworCitub21lbToKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9hZGRfY2FjaGUpOworCisvKioKKyAqIGZzY2FjaGVfaW9fZXJyb3IgLSBOb3RlIGEgY2FjaGUgSS9PIGVycm9yCisgKiBAY2FjaGU6IFRoZSByZWNvcmQgZGVzY3JpYmluZyB0aGUgY2FjaGUKKyAqCisgKiBOb3RlIHRoYXQgYW4gSS9PIGVycm9yIG9jY3VycmVkIGluIGEgY2FjaGUgYW5kIHRoYXQgaXQgc2hvdWxkIG5vIGxvbmdlciBiZQorICogdXNlZCBmb3IgYW55dGhpbmcuICBUaGlzIGFsc28gcmVwb3J0cyB0aGUgZXJyb3IgaW50byB0aGUga2VybmVsIGxvZy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV9pb19lcnJvcihzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJc2V0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZjYWNoZS0+ZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ2FjaGUgJXMgc3RvcHBlZCBkdWUgdG8gSS9PIGVycm9yXG4iLAorCSAgICAgICBjYWNoZS0+b3BzLT5uYW1lKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9pb19lcnJvcik7CisKKy8qCisgKiByZXF1ZXN0IHdpdGhkcmF3YWwgb2YgYWxsIHRoZSBvYmplY3RzIGluIGEgY2FjaGUKKyAqIC0gYWxsIHRoZSBvYmplY3RzIGJlaW5nIHdpdGhkcmF3biBhcmUgbW92ZWQgb250byB0aGUgc3VwcGxpZWQgbGlzdAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X2FsbF9vYmplY3RzKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmR5aW5nX29iamVjdHMpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisKKwlzcGluX2xvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2FjaGUtPm9iamVjdF9saXN0KSkgeworCQlvYmplY3QgPSBsaXN0X2VudHJ5KGNhY2hlLT5vYmplY3RfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNhY2hlX2xpbmspOworCQlsaXN0X21vdmVfdGFpbCgmb2JqZWN0LT5jYWNoZV9saW5rLCBkeWluZ19vYmplY3RzKTsKKworCQlfZGVidWcoIndpdGhkcmF3ICVwIiwgb2JqZWN0LT5jb29raWUpOworCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7Cit9CisKKy8qKgorICogZnNjYWNoZV93aXRoZHJhd19jYWNoZSAtIFdpdGhkcmF3IGEgY2FjaGUgZnJvbSB0aGUgYWN0aXZlIHNlcnZpY2UKKyAqIEBjYWNoZTogVGhlIHJlY29yZCBkZXNjcmliaW5nIHRoZSBjYWNoZQorICoKKyAqIFdpdGhkcmF3IGEgY2FjaGUgZnJvbSBzZXJ2aWNlLCB1bmJpbmRpbmcgYWxsIGl0cyBjYWNoZSBvYmplY3RzIGZyb20gdGhlCisgKiBuZXRmcyBjb29raWVzIHRoZXkncmUgY3VycmVudGx5IHJlcHJlc2VudGluZy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV93aXRoZHJhd19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJTElTVF9IRUFEKGR5aW5nX29iamVjdHMpOworCisJX2VudGVyKCIiKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiRlMtQ2FjaGU6IFdpdGhkcmF3aW5nIGNhY2hlIFwiJXNcIlxuIiwKKwkgICAgICAgY2FjaGUtPnRhZy0+bmFtZSk7CisKKwkvKiBtYWtlIHRoZSBjYWNoZSB1bmF2YWlsYWJsZSBmb3IgY29va2llIGFjcXVpc2l0aW9uICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9DQUNIRV9XSVRIRFJBV04sICZjYWNoZS0+ZmxhZ3MpKQorCQlCVUcoKTsKKworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJbGlzdF9kZWxfaW5pdCgmY2FjaGUtPmxpbmspOworCWNhY2hlLT50YWctPmNhY2hlID0gTlVMTDsKKwl1cF93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCS8qIG1ha2Ugc3VyZSBhbGwgcGFnZXMgcGlubmVkIGJ5IG9wZXJhdGlvbnMgb24gYmVoYWxmIG9mIHRoZSBuZXRmcyBhcmUKKwkgKiB3cml0dGVuIHRvIGRpc2sgKi8KKwljYWNoZS0+b3BzLT5zeW5jX2NhY2hlKGNhY2hlKTsKKworCS8qIGRpc3NvY2lhdGUgYWxsIHRoZSBuZXRmcyBwYWdlcyBiYWNrZWQgYnkgdGhpcyBjYWNoZSBmcm9tIHRoZSBibG9jaworCSAqIG1hcHBpbmdzIGluIHRoZSBjYWNoZSAqLworCWNhY2hlLT5vcHMtPmRpc3NvY2lhdGVfcGFnZXMoY2FjaGUpOworCisJLyogd2Ugbm93IGhhdmUgdG8gZGVzdHJveSBhbGwgdGhlIGFjdGl2ZSBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhpcworCSAqIGNhY2hlIC0gd2hpY2ggd2UgZG8gYnkgcGFzc2luZyB0aGVtIG9mZiB0byB0aHJlYWQgcG9vbCB0byBiZQorCSAqIGRpc3Bvc2VkIG9mICovCisJX2RlYnVnKCJkZXN0cm95Iik7CisKKwlmc2NhY2hlX3dpdGhkcmF3X2FsbF9vYmplY3RzKGNhY2hlLCAmZHlpbmdfb2JqZWN0cyk7CisKKwkvKiB3YWl0IGZvciBhbGwgZXh0YW50IG9iamVjdHMgdG8gZmluaXNoIHRoZWlyIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMKKwkgKiBhbmQgZ28gYXdheSAqLworCV9kZWJ1Zygid2FpdCBmb3IgZmluaXNoIik7CisJd2FpdF9ldmVudChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EsCisJCSAgIGF0b21pY19yZWFkKCZjYWNoZS0+b2JqZWN0X2NvdW50KSA9PSAwKTsKKwlfZGVidWcoIndhaXQgZm9yIGNsZWFyYW5jZSIpOworCXdhaXRfZXZlbnQoZnNjYWNoZV9jYWNoZV9jbGVhcmVkX3dxLAorCQkgICBsaXN0X2VtcHR5KCZjYWNoZS0+b2JqZWN0X2xpc3QpKTsKKwlfZGVidWcoImNsZWFyZWQiKTsKKwlBU1NFUlQobGlzdF9lbXB0eSgmZHlpbmdfb2JqZWN0cykpOworCisJa29iamVjdF9wdXQoY2FjaGUtPmtvYmopOworCisJY2xlYXJfYml0KEZTQ0FDSEVfVEFHX1JFU0VSVkVELCAmY2FjaGUtPnRhZy0+ZmxhZ3MpOworCWZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcoY2FjaGUtPnRhZyk7CisJY2FjaGUtPnRhZyA9IE5VTEw7CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX3dpdGhkcmF3X2NhY2hlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvY29va2llLmMgYi9mcy9mc2NhY2hlL2Nvb2tpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmQxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2Nvb2tpZS5jCkBAIC0wLDAgKzEsNTAwIEBACisvKiBuZXRmcyBjb29raWUgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICogdGhlIG5ldGZzIEFQSS4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ09PS0lFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0cnVjdCBrbWVtX2NhY2hlICpmc2NhY2hlX2Nvb2tpZV9qYXI7CisKK3N0YXRpYyBhdG9taWNfdCBmc2NhY2hlX29iamVjdF9kZWJ1Z19pZCA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgaW50IGZzY2FjaGVfYWNxdWlyZV9ub25faW5kZXhfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKK3N0YXRpYyBpbnQgZnNjYWNoZV9hbGxvY19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKK3N0YXRpYyBpbnQgZnNjYWNoZV9hdHRhY2hfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKy8qCisgKiBpbml0aWFsaXNlIGFuIGNvb2tpZSBqYXIgc2xhYiBlbGVtZW50IHByaW9yIHRvIGFueSB1c2UKKyAqLwordm9pZCBmc2NhY2hlX2Nvb2tpZV9pbml0X29uY2Uodm9pZCAqX2Nvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IF9jb29raWU7CisKKwltZW1zZXQoY29va2llLCAwLCBzaXplb2YoKmNvb2tpZSkpOworCXNwaW5fbG9ja19pbml0KCZjb29raWUtPmxvY2spOworCUlOSVRfSExJU1RfSEVBRCgmY29va2llLT5iYWNraW5nX29iamVjdHMpOworfQorCisvKgorICogcmVxdWVzdCBhIGNvb2tpZSB0byByZXByZXNlbnQgYW4gb2JqZWN0IChpbmRleCwgZGF0YWZpbGUsIHhhdHRyLCBldGMpCisgKiAtIHBhcmVudCBzcGVjaWZpZXMgdGhlIHBhcmVudCBvYmplY3QKKyAqICAgLSB0aGUgdG9wIGxldmVsIGluZGV4IGNvb2tpZSBmb3IgZWFjaCBuZXRmcyBpcyBzdG9yZWQgaW4gdGhlIGZzY2FjaGVfbmV0ZnMKKyAqICAgICBzdHJ1Y3QgdXBvbiByZWdpc3RyYXRpb24KKyAqIC0gZGVmIHBvaW50cyB0byB0aGUgZGVmaW5pdGlvbgorICogLSB0aGUgbmV0ZnNfZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zIHBvaW50ZWQgdG8gaW4gKmRlZgorICogLSBhbGwgYXR0YWNoZWQgY2FjaGVzIHdpbGwgYmUgc2VhcmNoZWQgdG8gc2VlIGlmIHRoZXkgY29udGFpbiB0aGlzIG9iamVjdAorICogLSBpbmRleCBvYmplY3RzIGFyZW4ndCBzdG9yZWQgb24gZGlzayB1bnRpbCB0aGVyZSdzIGEgZGVwZW5kZW50IGZpbGUgdGhhdAorICogICBuZWVkcyBzdG9yaW5nCisgKiAtIG90aGVyIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBhIHNlbGVjdGVkIGNhY2hlIGltbWVkaWF0ZWx5LCBhbmQgYWxsIHRoZQorICogICBpbmRpY2VzIGZvcm1pbmcgdGhlIHBhdGggdG8gaXQgYXJlIGluc3RhbnRpYXRlZCBpZiBuZWNlc3NhcnkKKyAqIC0gd2UgbmV2ZXIgbGV0IG9uIHRvIHRoZSBuZXRmcyBhYm91dCBlcnJvcnMKKyAqICAgLSB3ZSBtYXkgc2V0IGEgbmVnYXRpdmUgY29va2llIHBvaW50ZXIsIGJ1dCB0aGF0J3Mgb2theQorICovCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKl9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKnBhcmVudCwKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICpkZWYsCisJdm9pZCAqbmV0ZnNfZGF0YSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKKworCUJVR19PTighZGVmKTsKKworCV9lbnRlcigieyVzfSx7JXN9LCVwIiwKKwkgICAgICAgcGFyZW50ID8gKGNoYXIgKikgcGFyZW50LT5kZWYtPm5hbWUgOiAiPG5vLXBhcmVudD4iLAorCSAgICAgICBkZWYtPm5hbWUsIG5ldGZzX2RhdGEpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXMpOworCisJLyogaWYgdGhlcmUncyBubyBwYXJlbnQgY29va2llLCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBvbmUgaGVyZSBlaXRoZXIgKi8KKwlpZiAoIXBhcmVudCkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hY3F1aXJlc19udWxsKTsKKwkJX2xlYXZlKCIgW25vIHBhcmVudF0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdmFsaWRhdGUgdGhlIGRlZmluaXRpb24gKi8KKwlCVUdfT04oIWRlZi0+Z2V0X2tleSk7CisJQlVHX09OKCFkZWYtPm5hbWVbMF0pOworCisJQlVHX09OKGRlZi0+dHlwZSA9PSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYICYmCisJICAgICAgIHBhcmVudC0+ZGVmLT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBjb29raWUgKi8KKwljb29raWUgPSBrbWVtX2NhY2hlX2FsbG9jKGZzY2FjaGVfY29va2llX2phciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb29raWUpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfb29tKTsKKwkJX2xlYXZlKCIgW0VOT01FTV0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYXRvbWljX3NldCgmY29va2llLT51c2FnZSwgMSk7CisJYXRvbWljX3NldCgmY29va2llLT5uX2NoaWxkcmVuLCAwKTsKKworCWF0b21pY19pbmMoJnBhcmVudC0+dXNhZ2UpOworCWF0b21pY19pbmMoJnBhcmVudC0+bl9jaGlsZHJlbik7CisKKwljb29raWUtPmRlZgkJPSBkZWY7CisJY29va2llLT5wYXJlbnQJCT0gcGFyZW50OworCWNvb2tpZS0+bmV0ZnNfZGF0YQk9IG5ldGZzX2RhdGE7CisJY29va2llLT5mbGFncwkJPSAwOworCisJSU5JVF9SQURJWF9UUkVFKCZjb29raWUtPnN0b3JlcywgR0ZQX05PRlMpOworCisJc3dpdGNoIChjb29raWUtPmRlZi0+dHlwZSkgeworCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29va2llX2luZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb29raWVfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2Nvb2tpZV9zcGVjaWFsKTsKKwkJYnJlYWs7CisJfQorCisJLyogaWYgdGhlIG9iamVjdCBpcyBhbiBpbmRleCB0aGVuIHdlIG5lZWQgZG8gbm90aGluZyBtb3JlIGhlcmUgLSB3ZQorCSAqIGNyZWF0ZSBpbmRpY2VzIG9uIGRpc2sgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgYW4gaW5kZXggbWF5IGV4aXN0IGluCisJICogbXVsdGlwbGUgY2FjaGVzICovCisJaWYgKGNvb2tpZS0+ZGVmLT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpIHsKKwkJaWYgKGZzY2FjaGVfYWNxdWlyZV9ub25faW5kZXhfY29va2llKGNvb2tpZSkgPCAwKSB7CisJCQlhdG9taWNfZGVjKCZwYXJlbnQtPm5fY2hpbGRyZW4pOworCQkJX19mc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmcyk7CisJCQlfbGVhdmUoIiA9IE5VTEwiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfb2spOworCV9sZWF2ZSgiID0gJXAiLCBjb29raWUpOworCXJldHVybiBjb29raWU7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSk7CisKKy8qCisgKiBhY3F1aXJlIGEgbm9uLWluZGV4IGNvb2tpZQorICogLSB0aGlzIG11c3QgbWFrZSBzdXJlIHRoZSBpbmRleCBjaGFpbiBpcyBpbnN0YW50aWF0ZWQgYW5kIGluc3RhbnRpYXRlIHRoZQorICogICBvYmplY3QgcmVwcmVzZW50YXRpb24gdG9vCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlOworCXVpbnQ2NF90IGlfc2l6ZTsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCWNvb2tpZS0+ZmxhZ3MgPSAxIDw8IEZTQ0FDSEVfQ09PS0lFX1VOQVZBSUxBQkxFOworCisJLyogbm93IHdlIG5lZWQgdG8gc2VlIHdoZXRoZXIgdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgdGhpcyBjb29raWUgeWV0CisJICogZXhpc3QsIGlmIG5vdCB0aGVyZSdsbCBiZSBub3RoaW5nIHRvIHNlYXJjaCAqLworCWRvd25fcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCWlmIChsaXN0X2VtcHR5KCZmc2NhY2hlX2NhY2hlX2xpc3QpKSB7CisJCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCV9sZWF2ZSgiID0gMCBbbm8gY2FjaGVzXSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzZWxlY3QgYSBjYWNoZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgb2JqZWN0ICovCisJY2FjaGUgPSBmc2NhY2hlX3NlbGVjdF9jYWNoZV9mb3Jfb2JqZWN0KGNvb2tpZS0+cGFyZW50KTsKKwlpZiAoIWNhY2hlKSB7CisJCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vX2NhY2hlKTsKKwkJX2xlYXZlKCIgPSAtRU5PTUVESVVNIFtubyBjYWNoZV0iKTsKKwkJcmV0dXJuIC1FTk9NRURJVU07CisJfQorCisJX2RlYnVnKCJjYWNoZSAlcyIsIGNhY2hlLT50YWctPm5hbWUpOworCisJY29va2llLT5mbGFncyA9CisJCSgxIDw8IEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApIHwKKwkJKDEgPDwgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpIHwKKwkJKDEgPDwgRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQpOworCisJLyogYXNrIHRoZSBjYWNoZSB0byBhbGxvY2F0ZSBvYmplY3RzIGZvciB0aGlzIGNvb2tpZSBhbmQgaXRzIHBhcmVudAorCSAqIGNoYWluICovCisJcmV0ID0gZnNjYWNoZV9hbGxvY19vYmplY3QoY2FjaGUsIGNvb2tpZSk7CisJaWYgKHJldCA8IDApIHsKKwkJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcGFzcyBvbiBob3cgYmlnIHRoZSBvYmplY3Qgd2UncmUgY2FjaGluZyBpcyBzdXBwb3NlZCB0byBiZSAqLworCWNvb2tpZS0+ZGVmLT5nZXRfYXR0cihjb29raWUtPm5ldGZzX2RhdGEsICZpX3NpemUpOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlnb3RvIHVuYXZhaWxhYmxlOworCX0KKworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KG9iamVjdCwgaV9zaXplKTsKKworCS8qIGluaXRpYXRlIHRoZSBwcm9jZXNzIG9mIGxvb2tpbmcgdXAgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjaGFpbgorCSAqIChkb25lIGJ5IGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3QoKSkgKi8KKwlmc2NhY2hlX2VucXVldWVfb2JqZWN0KG9iamVjdCk7CisKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHdlIG1heSBiZSByZXF1aXJlZCB0byB3YWl0IGZvciBsb29rdXAgdG8gY29tcGxldGUgYXQgdGhpcyBwb2ludCAqLworCWlmICghZnNjYWNoZV9kZWZlcl9sb29rdXApIHsKKwkJX2RlYnVnKCJub24tZGVmZXJyZWQgbG9va3VwICVwIiwgJmNvb2tpZS0+ZmxhZ3MpOworCQl3YWl0X29uX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwKKwkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCV9kZWJ1ZygiY29tcGxldGUiKTsKKwkJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX1VOQVZBSUxBQkxFLCAmY29va2llLT5mbGFncykpCisJCQlnb3RvIHVuYXZhaWxhYmxlOworCX0KKworCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJX2xlYXZlKCIgPSAwIFtkZWZlcnJlZF0iKTsKKwlyZXR1cm4gMDsKKwordW5hdmFpbGFibGU6CisJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKgorICogcmVjdXJzaXZlbHkgYWxsb2NhdGUgY2FjaGUgb2JqZWN0IHJlY29yZHMgZm9yIGEgY29va2llL2NhY2hlIGNvbWJpbmF0aW9uCisgKiAtIGNhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIGFkZHJlbW92ZSBzZW0KKyAqLworc3RhdGljIGludCBmc2NhY2hlX2FsbG9jX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGhsaXN0X25vZGUgKl9uOworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCVweyVzfSIsIGNhY2hlLCBjb29raWUsIGNvb2tpZS0+ZGVmLT5uYW1lKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShvYmplY3QsIF9uLCAmY29va2llLT5iYWNraW5nX29iamVjdHMsCisJCQkgICAgIGNvb2tpZV9saW5rKSB7CisJCWlmIChvYmplY3QtPmNhY2hlID09IGNhY2hlKQorCQkJZ290byBvYmplY3RfYWxyZWFkeV9leHRhbnQ7CisJfQorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJLyogYXNrIHRoZSBjYWNoZSB0byBhbGxvY2F0ZSBhbiBvYmplY3QgKHdlIG1heSBlbmQgdXAgd2l0aCBkdXBsaWNhdGUKKwkgKiBvYmplY3RzIGF0IHRoaXMgc3RhZ2UsIGJ1dCB3ZSBzb3J0IHRoYXQgb3V0IGxhdGVyKSAqLworCW9iamVjdCA9IGNhY2hlLT5vcHMtPmFsbG9jX29iamVjdChjYWNoZSwgY29va2llKTsKKwlpZiAoSVNfRVJSKG9iamVjdCkpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X25vX2FsbG9jKTsKKwkJcmV0ID0gUFRSX0VSUihvYmplY3QpOworCQlnb3RvIGVycm9yOworCX0KKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9hbGxvYyk7CisKKwlvYmplY3QtPmRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oJmZzY2FjaGVfb2JqZWN0X2RlYnVnX2lkKTsKKworCV9kZWJ1ZygiQUxMT0MgT0JKJXg6ICVzIHslbHh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgY29va2llLT5kZWYtPm5hbWUsIG9iamVjdC0+ZXZlbnRzKTsKKworCXJldCA9IGZzY2FjaGVfYWxsb2Nfb2JqZWN0KGNhY2hlLCBjb29raWUtPnBhcmVudCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHV0OworCisJLyogb25seSBhdHRhY2ggaWYgd2UgbWFuYWdlZCB0byBhbGxvY2F0ZSBhbGwgd2UgbmVlZGVkLCBvdGhlcndpc2UKKwkgKiBkaXNjYXJkIHRoZSBvYmplY3Qgd2UganVzdCBhbGxvY2F0ZWQgYW5kIGluc3RlYWQgdXNlIHRoZSBvbmUKKwkgKiBhdHRhY2hlZCB0byB0aGUgY29va2llICovCisJaWYgKGZzY2FjaGVfYXR0YWNoX29iamVjdChjb29raWUsIG9iamVjdCkgPCAwKQorCQljYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CisKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKKworb2JqZWN0X2FscmVhZHlfZXh0YW50OgorCXJldCA9IC1FTk9CVUZTOworCWlmIChvYmplY3QtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlnb3RvIGVycm9yOworCX0KKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlfbGVhdmUoIiA9IDAgW2ZvdW5kXSIpOworCXJldHVybiAwOworCitlcnJvcl9wdXQ6CisJY2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworZXJyb3I6CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGF0dGFjaCBhIGNhY2hlIG9iamVjdCB0byBhIGNvb2tpZQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfYXR0YWNoX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwOworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJc3RydWN0IGhsaXN0X25vZGUgKl9uOworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30se09CSiV4fSIsIGNvb2tpZS0+ZGVmLT5uYW1lLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBpbml0aWFsIGNyZWF0aW9ucyBvZiB0aGlzIG9iamVjdCwgYnV0IHdlIG9ubHkKKwkgKiB3YW50IG9uZSAqLworCXJldCA9IC1FRVhJU1Q7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkocCwgX24sICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cywgY29va2llX2xpbmspIHsKKwkJaWYgKHAtPmNhY2hlID09IG9iamVjdC0+Y2FjaGUpIHsKKwkJCWlmIChwLT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORykKKwkJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gY2FudF9hdHRhY2hfb2JqZWN0OworCQl9CisJfQorCisJLyogcGluIHRoZSBwYXJlbnQgb2JqZWN0ICovCisJc3Bpbl9sb2NrX25lc3RlZCgmY29va2llLT5wYXJlbnQtPmxvY2ssIDEpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIF9uLCAmY29va2llLT5wYXJlbnQtPmJhY2tpbmdfb2JqZWN0cywKKwkJCSAgICAgY29va2llX2xpbmspIHsKKwkJaWYgKHAtPmNhY2hlID09IG9iamVjdC0+Y2FjaGUpIHsKKwkJCWlmIChwLT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORykgeworCQkJCXJldCA9IC1FTk9CVUZTOworCQkJCXNwaW5fdW5sb2NrKCZjb29raWUtPnBhcmVudC0+bG9jayk7CisJCQkJZ290byBjYW50X2F0dGFjaF9vYmplY3Q7CisJCQl9CisJCQlvYmplY3QtPnBhcmVudCA9IHA7CisJCQlzcGluX2xvY2soJnAtPmxvY2spOworCQkJcC0+bl9jaGlsZHJlbisrOworCQkJc3Bpbl91bmxvY2soJnAtPmxvY2spOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+cGFyZW50LT5sb2NrKTsKKworCS8qIGF0dGFjaCB0byB0aGUgY2FjaGUncyBvYmplY3QgbGlzdCAqLworCWlmIChsaXN0X2VtcHR5KCZvYmplY3QtPmNhY2hlX2xpbmspKSB7CisJCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCQlsaXN0X2FkZCgmb2JqZWN0LT5jYWNoZV9saW5rLCAmY2FjaGUtPm9iamVjdF9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwl9CisKKwkvKiBhdHRhY2ggdG8gdGhlIGNvb2tpZSAqLworCW9iamVjdC0+Y29va2llID0gY29va2llOworCWF0b21pY19pbmMoJmNvb2tpZS0+dXNhZ2UpOworCWhsaXN0X2FkZF9oZWFkKCZvYmplY3QtPmNvb2tpZV9saW5rLCAmY29va2llLT5iYWNraW5nX29iamVjdHMpOworCXJldCA9IDA7CisKK2NhbnRfYXR0YWNoX29iamVjdDoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdXBkYXRlIHRoZSBpbmRleCBlbnRyaWVzIGJhY2tpbmcgYSBjb29raWUKKyAqLwordm9pZCBfX2ZzY2FjaGVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqX3A7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl91cGRhdGVzKTsKKworCWlmICghY29va2llKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbCk7CisJCV9sZWF2ZSgiIFtubyBjb29raWVdIik7CisJCXJldHVybjsKKwl9CisKKwlfZW50ZXIoInslc30iLCBjb29raWUtPmRlZi0+bmFtZSk7CisKKwlCVUdfT04oIWNvb2tpZS0+ZGVmLT5nZXRfYXV4KTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHVwZGF0ZSB0aGUgaW5kZXggZW50cnkgb24gZGlzayBpbiBlYWNoIGNhY2hlIGJhY2tpbmcgdGhpcyBjb29raWUgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShvYmplY3QsIF9wLAorCQkJICAgICAmY29va2llLT5iYWNraW5nX29iamVjdHMsIGNvb2tpZV9saW5rKSB7CisJCWZzY2FjaGVfcmFpc2VfZXZlbnQob2JqZWN0LCBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUpOworCX0KKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV91cGRhdGVfY29va2llKTsKKworLyoKKyAqIHJlbGVhc2UgYSBjb29raWUgYmFjayB0byB0aGUgY2FjaGUKKyAqIC0gdGhlIG9iamVjdCB3aWxsIGJlIG1hcmtlZCBhcyByZWN5Y2xhYmxlIG9uIGRpc2sgaWYgcmV0aXJlIGlzIHRydWUKKyAqIC0gYWxsIGRlcGVuZGVudHMgb2YgdGhpcyBjb29raWUgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiB1bnJlZ2lzdGVyZWQKKyAqICAgKGluZGljZXMvZmlsZXMvcGFnZXMpCisgKi8KK3ZvaWQgX19mc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBpbnQgcmV0aXJlKQoreworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzKTsKKworCWlmICghY29va2llKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsKTsKKwkJX2xlYXZlKCIgW25vIGNvb2tpZV0iKTsKKwkJcmV0dXJuOworCX0KKworCV9lbnRlcigiJXB7JXMsJXB9LCVkIiwKKwkgICAgICAgY29va2llLCBjb29raWUtPmRlZi0+bmFtZSwgY29va2llLT5uZXRmc19kYXRhLCByZXRpcmUpOworCisJaWYgKGF0b21pY19yZWFkKCZjb29raWUtPm5fY2hpbGRyZW4pICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ29va2llICclcycgc3RpbGwgaGFzIGNoaWxkcmVuXG4iLAorCQkgICAgICAgY29va2llLT5kZWYtPm5hbWUpOworCQlCVUcoKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0aGUgY29va2llIHRvIGZpbmlzaCBiZWluZyBpbnN0YW50aWF0ZWQgKG9yIHRvIGZhaWwpICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLCAmY29va2llLT5mbGFncykpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3dhaXRjcnQpOworCQl3YWl0X29uX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCX0KKworCWV2ZW50ID0gcmV0aXJlID8gRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFIDogRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRTsKKworCS8qIGRldGFjaCBwb2ludGVycyBiYWNrIHRvIHRoZSBuZXRmcyAqLworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWNvb2tpZS0+bmV0ZnNfZGF0YQk9IE5VTEw7CisJY29va2llLT5kZWYJCT0gTlVMTDsKKworCS8qIGJyZWFrIGxpbmtzIHdpdGggYWxsIHRoZSBhY3RpdmUgb2JqZWN0cyAqLworCXdoaWxlICghaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkgeworCQlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwKKwkJCQkgICAgIGNvb2tpZV9saW5rKTsKKworCQlfZGVidWcoIlJFTEVBU0UgT0JKJXgiLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCQkvKiBkZXRhY2ggZWFjaCBjYWNoZSBvYmplY3QgZnJvbSB0aGUgb2JqZWN0IGNvb2tpZSAqLworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCWhsaXN0X2RlbF9pbml0KCZvYmplY3QtPmNvb2tpZV9saW5rKTsKKworCQljYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJCW9iamVjdC0+Y29va2llID0gTlVMTDsKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIGV2ZW50KTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQkJLyogdGhlIGNvb2tpZSByZWZjb3VudCBzaG91bGRuJ3QgYmUgcmVkdWNlZCB0byAwIHlldCAqLworCQkJQlVHKCk7CisJfQorCisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoY29va2llLT5wYXJlbnQpIHsKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZjb29raWUtPnBhcmVudC0+dXNhZ2UpLCA+LCAwKTsKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZjb29raWUtPnBhcmVudC0+bl9jaGlsZHJlbiksID4sIDApOworCQlhdG9taWNfZGVjKCZjb29raWUtPnBhcmVudC0+bl9jaGlsZHJlbik7CisJfQorCisJLyogZmluYWxseSBkaXNwb3NlIG9mIHRoZSBjb29raWUgKi8KKwlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJmNvb2tpZS0+dXNhZ2UpLCA+LCAwKTsKKwlmc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSk7CisKKy8qCisgKiBkZXN0cm95IGEgY29va2llCisgKi8KK3ZvaWQgX19mc2NhY2hlX2Nvb2tpZV9wdXQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpwYXJlbnQ7CisKKwlfZW50ZXIoIiVwIiwgY29va2llKTsKKworCWZvciAoOzspIHsKKwkJX2RlYnVnKCJGUkVFIENPT0tJRSAlcCIsIGNvb2tpZSk7CisJCXBhcmVudCA9IGNvb2tpZS0+cGFyZW50OworCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpOworCQlrbWVtX2NhY2hlX2ZyZWUoZnNjYWNoZV9jb29raWVfamFyLCBjb29raWUpOworCisJCWlmICghcGFyZW50KQorCQkJYnJlYWs7CisKKwkJY29va2llID0gcGFyZW50OworCQlCVUdfT04oYXRvbWljX3JlYWQoJmNvb2tpZS0+dXNhZ2UpIDw9IDApOworCQlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQkJYnJlYWs7CisJfQorCisJX2xlYXZlKCIiKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvZnNkZWYuYyBiL2ZzL2ZzY2FjaGUvZnNkZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9mc2RlZi5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiBGaWxlc3lzdGVtIGluZGV4IGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpOworCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpOworCitzdGF0aWMKK2VudW0gZnNjYWNoZV9jaGVja2F1eCBmc2NhY2hlX2ZzZGVmX25ldGZzX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkJICAgIHVpbnQxNl90IGRhdGFsZW4pOworCisvKgorICogVGhlIHJvb3QgaW5kZXggaXMgb3duZWQgYnkgRlMtQ2FjaGUgaXRzZWxmLgorICoKKyAqIFdoZW4gYSBuZXRmcyByZXF1ZXN0cyBjYWNoaW5nIGZhY2lsaXRpZXMsIEZTLUNhY2hlIHdpbGwsIGlmIG9uZSBkb2Vzbid0CisgKiBhbHJlYWR5IGV4aXN0LCBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJvb3QgaW5kZXggd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lCisgKiBvZiB0aGUgbmV0ZnMgKCJBRlMiIGZvciBleGFtcGxlKSwgYW5kIHRoZSBhdXhpbGlhcnkgZGF0YSBob2xkaW5nIHRoZSBpbmRleAorICogc3RydWN0dXJlIHZlcnNpb24gc3VwcGxpZWQgYnkgdGhlIG5ldGZzOgorICoKKyAqCQkJCSAgICAgRlNERUYKKyAqCQkJCSAgICAgICB8CisgKgkJCQkgKy0tLS0tLS0tLS0tKworICoJCQkJIHwgICAgICAgICAgIHwKKyAqCQkJCU5GUyAgICAgICAgIEFGUworICoJCQkgICAgICAgW3Y9MV0gICAgICAgW3Y9MV0KKyAqCisgKiBJZiBhbiBlbnRyeSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGRvZXMgYWxyZWFkeSBleGlzdCwgdGhlIHZlcnNpb24gaXMKKyAqIGNvbXBhcmVkLiAgSWYgdGhlIHZlcnNpb24gaXMgZGlmZmVyZW50LCB0aGUgZW50aXJlIHN1YnRyZWUgZnJvbSB0aGF0IGVudHJ5CisgKiB3aWxsIGJlIGRpc2NhcmRlZCBhbmQgYSBuZXcgZW50cnkgY3JlYXRlZC4KKyAqCisgKiBUaGUgbmV3IGVudHJ5IHdpbGwgYmUgYW4gaW5kZXgsIGFuZCBhIGNvb2tpZSByZWZlcnJpbmcgdG8gaXQgd2lsbCBiZSBwYXNzZWQKKyAqIHRvIHRoZSBuZXRmcy4gIFRoaXMgaXMgdGhlbiB0aGUgcm9vdCBoYW5kbGUgYnkgd2hpY2ggdGhlIG5ldGZzIGFjY2Vzc2VzIHRoZQorICogY2FjaGUuICBJdCBjYW4gY3JlYXRlIHdoYXRldmVyIG9iamVjdHMgaXQgbGlrZXMgaW4gdGhhdCBpbmRleCwgaW5jbHVkaW5nCisgKiBmdXJ0aGVyIGluZGljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGZzY2FjaGVfZnNkZWZfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICIuRlMtQ2FjaGUiLAorCS50eXBlCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCit9OworCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgZnNjYWNoZV9mc2RlZl9pbmRleCA9IHsKKwkudXNhZ2UJCT0gQVRPTUlDX0lOSVQoMSksCisJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZnNjYWNoZV9mc2RlZl9pbmRleC5sb2NrKSwKKwkuYmFja2luZ19vYmplY3RzID0gSExJU1RfSEVBRF9JTklULAorCS5kZWYJCT0gJmZzY2FjaGVfZnNkZWZfaW5kZXhfZGVmLAorfTsKK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9mc2RlZl9pbmRleCk7CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIGFuIGVudHJ5IGluIHRoZSByb290IGluZGV4LiAgRWFjaCBlbnRyeSBpcyBhbiBpbmRleCwga2V5ZWQgdG8KKyAqIGEgc3BlY2lmaWMgbmV0ZnMgYW5kIG9ubHkgYXBwbGljYWJsZSB0byBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgaW5kZXgKKyAqIHN0cnVjdHVyZSB1c2VkIGJ5IHRoYXQgbmV0ZnMuCisgKi8KK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgZnNjYWNoZV9mc2RlZl9uZXRmc19kZWYgPSB7CisJLm5hbWUJCT0gIkZTREVGLm5ldGZzIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5LAorCS5nZXRfYXV4CT0gZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfYXV4LAorCS5jaGVja19hdXgJPSBmc2NhY2hlX2ZzZGVmX25ldGZzX2NoZWNrX2F1eCwKK307CisKKy8qCisgKiBnZXQgdGhlIGtleSBkYXRhIGZvciBhbiBGU0RFRiBpbmRleCByZWNvcmQgLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXRmcworICogZm9yIHdoaWNoIHRoaXMgZW50cnkgaXMgY3JlYXRlZAorICovCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzID0gY29va2llX25ldGZzX2RhdGE7CisJdW5zaWduZWQga2xlbjsKKworCV9lbnRlcigieyVzLiV1fSwiLCBuZXRmcy0+bmFtZSwgbmV0ZnMtPnZlcnNpb24pOworCisJa2xlbiA9IHN0cmxlbihuZXRmcy0+bmFtZSk7CisJaWYgKGtsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgbmV0ZnMtPm5hbWUsIGtsZW4pOworCXJldHVybiBrbGVuOworfQorCisvKgorICogZ2V0IHRoZSBhdXhpbGlhcnkgZGF0YSBmb3IgYW4gRlNERUYgaW5kZXggcmVjb3JkIC0gdGhpcyBpcyB0aGUgaW5kZXgKKyAqIHN0cnVjdHVyZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbmV0ZnMgZm9yIHdoaWNoIHRoaXMgdmVyc2lvbiBpcyBjcmVhdGVkCisgKi8KK3N0YXRpYyB1aW50MTZfdCBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1bnNpZ25lZCBkbGVuOworCisJX2VudGVyKCJ7JXMuJXV9LCIsIG5ldGZzLT5uYW1lLCBuZXRmcy0+dmVyc2lvbik7CisKKwlkbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKKwlpZiAoZGxlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmbmV0ZnMtPnZlcnNpb24sIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgaW5kZXggc3RydWN0dXJlIHZlcnNpb24gbnVtYmVyIHN0b3JlZCBpbiB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAqIG1hdGNoZXMgdGhlIG9uZSB0aGUgbmV0ZnMgZ2F2ZSB1cworICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfZnNkZWZfbmV0ZnNfY2hlY2tfYXV4KAorCXZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCWNvbnN0IHZvaWQgKmRhdGEsCisJdWludDE2X3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MzJfdCB2ZXJzaW9uOworCisJX2VudGVyKCJ7JXN9LCwlaHUiLCBuZXRmcy0+bmFtZSwgZGF0YWxlbik7CisKKwlpZiAoZGF0YWxlbiAhPSBzaXplb2YodmVyc2lvbikpIHsKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbZGw9JWQgdj0lenVdIiwgZGF0YWxlbiwgc2l6ZW9mKHZlcnNpb24pKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisJfQorCisJbWVtY3B5KCZ2ZXJzaW9uLCBkYXRhLCBzaXplb2YodmVyc2lvbikpOworCWlmICh2ZXJzaW9uICE9IG5ldGZzLT52ZXJzaW9uKSB7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW3Zlcj0leCBuZXQ9JXhdIiwgdmVyc2lvbiwgbmV0ZnMtPnZlcnNpb24pOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKwl9CisKKwlfbGVhdmUoIiA9IE9LQVkiKTsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9oaXN0b2dyYW0uYyBiL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNDk2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qIEZTLUNhY2hlIGxhdGVuY3kgaGlzdG9ncmFtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBUSFJFQUQKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCithdG9taWNfdCBmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1bSFpdOworYXRvbWljX3QgZnNjYWNoZV9vYmpzX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBmc2NhY2hlX29wc19oaXN0b2dyYW1bSFpdOworYXRvbWljX3QgZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW0haXTsKK2F0b21pY190IGZzY2FjaGVfcmV0cmlldmFsX2hpc3RvZ3JhbVtIWl07CisKKy8qCisgKiBkaXNwbGF5IHRoZSB0aW1lLXRha2VuIGhpc3RvZ3JhbQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfaGlzdG9ncmFtX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJdW5zaWduZWQgbls1XSwgdDsKKworCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpIHYpIHsKKwljYXNlIDE6CisJCXNlcV9wdXRzKG0sICJKSUZTICBTRUNTICBPQkogSU5TVCAgT1AgUlVOUyAgIE9CSiBSVU5TICIKKwkJCSAiIFJFVFJWIERMWSBSRVRSSUVWTFNcbiIpOworCQlyZXR1cm4gMDsKKwljYXNlIDI6CisJCXNlcV9wdXRzKG0sICI9PT09PSA9PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PSIKKwkJCSAiID09PT09PT09PSA9PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpbmRleCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKwkJblswXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1baW5kZXhdKTsKKwkJblsxXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29wc19oaXN0b2dyYW1baW5kZXhdKTsKKwkJblsyXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29ianNfaGlzdG9ncmFtW2luZGV4XSk7CisJCW5bM10gPSBhdG9taWNfcmVhZCgmZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW2luZGV4XSk7CisJCW5bNF0gPSBhdG9taWNfcmVhZCgmZnNjYWNoZV9yZXRyaWV2YWxfaGlzdG9ncmFtW2luZGV4XSk7CisJCWlmICghKG5bMF0gfCBuWzFdIHwgblsyXSB8IG5bM10gfCBuWzRdKSkKKwkJCXJldHVybiAwOworCisJCXQgPSAoaW5kZXggKiAxMDAwKSAvIEhaOworCisJCXNlcV9wcmludGYobSwgIiU0bHUgIDAuJTAzdSAlOXUgJTl1ICU5dSAlOXUgJTl1XG4iLAorCQkJICAgaW5kZXgsIHQsIG5bMF0sIG5bMV0sIG5bMl0sIG5bM10sIG5bNF0pOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBzZXQgdXAgdGhlIGl0ZXJhdG9yIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZmlyc3QgbGluZQorICovCitzdGF0aWMgdm9pZCAqZnNjYWNoZV9oaXN0b2dyYW1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKl9wb3MpCit7CisJaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpKl9wb3MgPj0gSFogKyAyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKl9wb3MgPT0gMCkKKwkJKl9wb3MgPSAxOworCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSAqX3BvczsKK30KKworLyoKKyAqIG1vdmUgdG8gdGhlIG5leHQgbGluZQorICovCitzdGF0aWMgdm9pZCAqZnNjYWNoZV9oaXN0b2dyYW1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSpwb3MgPiBIWiArIDIgPworCQlOVUxMIDogKHZvaWQgKikodW5zaWduZWQgbG9uZykgKnBvczsKK30KKworLyoKKyAqIGNsZWFuIHVwIGFmdGVyIHJlYWRpbmcKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9oaXN0b2dyYW1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZnNjYWNoZV9oaXN0b2dyYW1fb3BzID0geworCS5zdGFydAkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9zdGFydCwKKwkuc3RvcAkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9zdG9wLAorCS5uZXh0CQk9IGZzY2FjaGVfaGlzdG9ncmFtX25leHQsCisJLnNob3cJCT0gZnNjYWNoZV9oaXN0b2dyYW1fc2hvdywKK307CisKKy8qCisgKiBvcGVuICIvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbSIgdG8gcHJvdmlkZSBsYXRlbmN5IGRhdGEKKyAqLworc3RhdGljIGludCBmc2NhY2hlX2hpc3RvZ3JhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZnNjYWNoZV9oaXN0b2dyYW1fb3BzKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmc2NhY2hlX2hpc3RvZ3JhbV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9pbnRlcm5hbC5oIGIvZnMvZnNjYWNoZS9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2JkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2ludGVybmFsLmgKQEAgLTAsMCArMSwzODAgQEAKKy8qIEludGVybmFsIGRlZmluaXRpb25zIGZvciBGUy1DYWNoZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBMb2NrIG9yZGVyLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggbXVsdGlwbGUgbG9ja3Mgc2hvdWxkIGJlIG9idGFpbmVkOgorICogLSBmc2NhY2hlX2FkZHJlbW92ZV9zZW0KKyAqIC0gY29va2llLT5sb2NrCisgKiAtIGNvb2tpZS0+cGFyZW50LT5sb2NrCisgKiAtIGNhY2hlLT5vYmplY3RfbGlzdF9sb2NrCisgKiAtIG9iamVjdC0+bG9jaworICogLSBvYmplY3QtPnBhcmVudC0+bG9jaworICogLSBmc2NhY2hlX3RocmVhZF9sb2NrCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2RlZmluZSBGU0NBQ0hFX01JTl9USFJFQURTCTQKKyNkZWZpbmUgRlNDQUNIRV9NQVhfVEhSRUFEUwkzMgorCisvKgorICogZnNjLWNhY2hlLmMKKyAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZnNjYWNoZV9jYWNoZV9saXN0OworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgZnNjYWNoZV9hZGRyZW1vdmVfc2VtOworCitleHRlcm4gc3RydWN0IGZzY2FjaGVfY2FjaGUgKmZzY2FjaGVfc2VsZWN0X2NhY2hlX2Zvcl9vYmplY3QoCisJc3RydWN0IGZzY2FjaGVfY29va2llICopOworCisvKgorICogZnNjLWNvb2tpZS5jCisgKi8KK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZnNjYWNoZV9jb29raWVfamFyOworCitleHRlcm4gdm9pZCBmc2NhY2hlX2Nvb2tpZV9pbml0X29uY2Uodm9pZCAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV9jb29raWVfcHV0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqKTsKKworLyoKKyAqIGZzYy1mc2RlZi5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgZnNjYWNoZV9mc2RlZl9pbmRleDsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGZzY2FjaGVfZnNkZWZfbmV0ZnNfZGVmOworCisvKgorICogZnNjLWhpc3RvZ3JhbS5jCisgKi8KKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1bSFpdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb2Jqc19oaXN0b2dyYW1bSFpdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb3BzX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX3JldHJpZXZhbF9oaXN0b2dyYW1bSFpdOworCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9oaXN0KGF0b21pY190IGhpc3RvZ3JhbVtdLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZikKK3sKKwl1bnNpZ25lZCBsb25nIGppZiA9IGppZmZpZXMgLSBzdGFydF9qaWY7CisJaWYgKGppZiA+PSBIWikKKwkJamlmID0gSFogLSAxOworCWF0b21pY19pbmMoJmhpc3RvZ3JhbVtqaWZdKTsKK30KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnNjYWNoZV9oaXN0b2dyYW1fZm9wczsKKworI2Vsc2UKKyNkZWZpbmUgZnNjYWNoZV9oaXN0KGhpc3QsIHN0YXJ0X2ppZikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIGZzYy1tYWluLmMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVmZXJfbG9va3VwOworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVmZXJfY3JlYXRlOworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVidWc7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKmZzY2FjaGVfcm9vdDsKKworZXh0ZXJuIGludCBmc2NhY2hlX3dhaXRfYml0KHZvaWQgKik7CitleHRlcm4gaW50IGZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSh2b2lkICopOworCisvKgorICogZnNjLW9iamVjdC5jCisgKi8KK2V4dGVybiB2b2lkIGZzY2FjaGVfd2l0aGRyYXdpbmdfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2NhY2hlICosCisJCQkJICAgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworCisvKgorICogZnNjLW9wZXJhdGlvbi5jCisgKi8KK2V4dGVybiBpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAorCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX2Fib3J0X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9vcGVyYXRpb25fZ2Moc3RydWN0IHdvcmtfc3RydWN0ICopOworCisvKgorICogZnNjLXByb2MuYworICovCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiBpbnQgX19pbml0IGZzY2FjaGVfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9wcm9jX2NsZWFudXAodm9pZCk7CisjZWxzZQorI2RlZmluZSBmc2NhY2hlX3Byb2NfaW5pdCgpCSgwKQorI2RlZmluZSBmc2NhY2hlX3Byb2NfY2xlYW51cCgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBmc2Mtc3RhdHMuYworICovCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BzX3Byb2Nlc3NlZFtGU0NBQ0hFX01BWF9USFJFQURTXTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2Jqc19wcm9jZXNzZWRbRlNDQUNIRV9NQVhfVEhSRUFEU107CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcGVuZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcnVuOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9lbnF1ZXVlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9kZWZlcnJlZF9yZWxlYXNlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9yZWxlYXNlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9nYzsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWQ7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vbWVtOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHM7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfb2s7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc193YWl0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfb2s7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfd2FpdDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGE7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHI7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0czsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX2FnYWluOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfb29tOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV9vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX21hcmtzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91bmNhY2hlczsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbnVsbDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29rOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19ub2J1ZnM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29vbTsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91cGRhdGVzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91cGRhdGVzX251bGw7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfcnVuOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzX251bGw7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc193YWl0Y3J0OworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9pbmRleDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX2RhdGE7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9zcGVjaWFsOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9hbGxvYzsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X25vX2FsbG9jOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3VwczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfY3JlYXRlZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2F2YWlsOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfZGVhZDsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9ub25lOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9va2F5OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF91cGRhdGU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X29ic29sZXRlOworCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9zdGF0KGF0b21pY190ICpzdGF0KQoreworCWF0b21pY19pbmMoc3RhdCk7Cit9CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfc3RhdHNfZm9wczsKKyNlbHNlCisKKyNkZWZpbmUgZnNjYWNoZV9zdGF0KHN0YXQpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiByYWlzZSBhbiBldmVudCBvbiBhbiBvYmplY3QKKyAqIC0gaWYgdGhlIGV2ZW50IGlzIG5vdCBtYXNrZWQgZm9yIHRoYXQgb2JqZWN0LCB0aGVuIHRoZSBvYmplY3QgaXMKKyAqICAgcXVldWVkIGZvciBhdHRlbnRpb24gYnkgdGhlIHRocmVhZCBwb29sLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9yYWlzZV9ldmVudChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgICAgdW5zaWduZWQgZXZlbnQpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGV2ZW50LCAmb2JqZWN0LT5ldmVudHMpICYmCisJICAgIHRlc3RfYml0KGV2ZW50LCAmb2JqZWN0LT5ldmVudF9tYXNrKSkKKwkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChvYmplY3QpOworfQorCisvKgorICogZHJvcCBhIHJlZmVyZW5jZSB0byBhIGNvb2tpZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9jb29raWVfcHV0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCUJVR19PTihhdG9taWNfcmVhZCgmY29va2llLT51c2FnZSkgPD0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQlfX2ZzY2FjaGVfY29va2llX3B1dChjb29raWUpOworfQorCisvKgorICogZ2V0IGFuIGV4dHJhIHJlZmVyZW5jZSB0byBhIG5ldGZzIHJldHJpZXZhbCBjb250ZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgKmZzY2FjaGVfZ2V0X2NvbnRleHQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIHZvaWQgKmNvbnRleHQpCit7CisJaWYgKGNvb2tpZS0+ZGVmLT5nZXRfY29udGV4dCkKKwkJY29va2llLT5kZWYtPmdldF9jb250ZXh0KGNvb2tpZS0+bmV0ZnNfZGF0YSwgY29udGV4dCk7CisJcmV0dXJuIGNvbnRleHQ7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgbmV0ZnMgcmV0cmlldmFsIGNvbnRleHQKKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3B1dF9jb250ZXh0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCB2b2lkICpjb250ZXh0KQoreworCWlmIChjb29raWUtPmRlZi0+cHV0X2NvbnRleHQpCisJCWNvb2tpZS0+ZGVmLT5wdXRfY29udGV4dChjb29raWUtPm5ldGZzX2RhdGEsIGNvbnRleHQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogZGVidWcgdHJhY2luZworICovCisjZGVmaW5lIGRiZ3ByaW50ayhGTVQsIC4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICJbJS02LjZzXSAiRk1UIlxuIiwgY3VycmVudC0+Y29tbSwgIyNfX1ZBX0FSR1NfXykKKworLyogbWFrZSBzdXJlIHdlIG1haW50YWluIHRoZSBmb3JtYXQgc3RyaW5ncywgZXZlbiB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZCAqLworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpCit2b2lkIF9kYnByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworI2RlZmluZSBrZW50ZXIoRk1ULCAuLi4pIGRiZ3ByaW50aygiPT0+ICVzKCJGTVQiKSIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBrbGVhdmUoRk1ULCAuLi4pIGRiZ3ByaW50aygiPD09ICVzKCkiRk1UIiIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBrZGVidWcoRk1ULCAuLi4pIGRiZ3ByaW50ayhGTVQsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUga2pvdXJuYWwoRk1ULCAuLi4pIF9kYnByaW50ayhGTVQsICMjX19WQV9BUkdTX18pCisKKyNpZmRlZiBfX0tERUJVRworI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIGtlbnRlcihGTVQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikga2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19GU0NBQ0hFX0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCVwKKwlpZiAoX19kb19rZGVidWcoRU5URVIpKQkJCVwKKwkJa2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKQkJCVwKK2RvIHsJCQkJCQlcCisJaWYgKF9fZG9fa2RlYnVnKExFQVZFKSkJCQlcCisJCWtsZWF2ZShGTVQsICMjX19WQV9BUkdTX18pOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9kZWJ1ZyhGTVQsIC4uLikJCQlcCitkbyB7CQkJCQkJXAorCWlmIChfX2RvX2tkZWJ1ZyhERUJVRykpCQkJXAorCQlrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKTsJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgX2VudGVyKEZNVCwgLi4uKSBfZGJwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBfZGJwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKy8qCisgKiBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgb3B0aW9uYWwgZGVidWdnaW5nIHBvaW50IHNob3VsZCBiZSBsb2dnZWQKKyAqIC0gd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRocmVlIHN0ZXBzIHRvIHBlcnN1YWRlIGNwcCB0byBjb3JyZWN0bHkgam9pbiB0aGUKKyAqICAgc2hvcnRoYW5kIGluIEZTQ0FDSEVfREVCVUdfTEVWRUwgd2l0aCBpdHMgcHJlZml4CisgKi8KKyNkZWZpbmUgX19fX2RvX2tkZWJ1ZyhMRVZFTCwgUE9JTlQpIFwKKwl1bmxpa2VseSgoZnNjYWNoZV9kZWJ1ZyAmIFwKKwkJICAoRlNDQUNIRV9QT0lOVF8jI1BPSU5UIDw8IChGU0NBQ0hFX0RFQlVHXyAjIyBMRVZFTCAqIDMpKSkpCisjZGVmaW5lIF9fX2RvX2tkZWJ1ZyhMRVZFTCwgUE9JTlQpIFwKKwlfX19fZG9fa2RlYnVnKExFVkVMLCBQT0lOVCkKKyNkZWZpbmUgX19kb19rZGVidWcoUE9JTlQpIFwKKwlfX19kb19rZGVidWcoRlNDQUNIRV9ERUJVR19MRVZFTCwgUE9JTlQpCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19DQUNIRQkwCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfQ09PS0lFCTEKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19QQUdFCTIKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19PUEVSQVRJT04JMworCisjZGVmaW5lIEZTQ0FDSEVfUE9JTlRfRU5URVIJMQorI2RlZmluZSBGU0NBQ0hFX1BPSU5UX0xFQVZFCTIKKyNkZWZpbmUgRlNDQUNIRV9QT0lOVF9ERUJVRwk0CisKKyNpZm5kZWYgRlNDQUNIRV9ERUJVR19MRVZFTAorI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENBQ0hFCisjZW5kaWYKKworLyoKKyAqIGFzc2VydGlvbnMKKyAqLworI2lmIDEgLyogZGVmaW5lZChfX0tERUJVR0FMTCkgKi8KKworI2RlZmluZSBBU1NFUlQoWCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoIShYKSkpIHsJCQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChYKSBPUCAoWSkpKSkgewkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCXByaW50ayhLRVJOX0VSUiAiJWx4ICIgI09QICIgJWx4IGlzIGZhbHNlXG4iLAkJXAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKFgpLCAodW5zaWduZWQgbG9uZykoWSkpOwkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoKEMpICYmICEoWCkpKSB7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVElGQ01QKEMsIFgsIE9QLCBZKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoKEMpICYmICEoKFgpIE9QIChZKSkpKSB7CQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlwcmludGsoS0VSTl9FUlIgIiVseCAiICNPUCAiICVseCBpcyBmYWxzZVxuIiwJCVwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShYKSwgKHVuc2lnbmVkIGxvbmcpKFkpKTsJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIEFTU0VSVChYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRDTVAoWCwgT1AsIFkpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogYXNzZXJ0IG9yIG5vdCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9tYWluLmMgYi9mcy9mc2NhY2hlL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU0MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9tYWluLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIEdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRlMgQ2FjaGUgTWFuYWdlciIpOworTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCit1bnNpZ25lZCBmc2NhY2hlX2RlZmVyX2xvb2t1cCA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVmZXJfbG9va3VwLCBmc2NhY2hlX2RlZmVyX2xvb2t1cCwgdWludCwKKwkJICAgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhmc2NhY2hlX2RlZmVyX2xvb2t1cCwKKwkJICJEZWZlciBjb29raWUgbG9va3VwIHRvIGJhY2tncm91bmQgdGhyZWFkIik7CisKK3Vuc2lnbmVkIGZzY2FjaGVfZGVmZXJfY3JlYXRlID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWZlcl9jcmVhdGUsIGZzY2FjaGVfZGVmZXJfY3JlYXRlLCB1aW50LAorCQkgICBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZzY2FjaGVfZGVmZXJfY3JlYXRlLAorCQkgIkRlZmVyIGNvb2tpZSBjcmVhdGlvbiB0byBiYWNrZ3JvdW5kIHRocmVhZCIpOworCit1bnNpZ25lZCBmc2NhY2hlX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBmc2NhY2hlX2RlYnVnLCB1aW50LAorCQkgICBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZzY2FjaGVfZGVidWcsCisJCSAiRlMtQ2FjaGUgZGVidWdnaW5nIG1hc2siKTsKKworc3RydWN0IGtvYmplY3QgKmZzY2FjaGVfcm9vdDsKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIGZzIGNhY2hpbmcgbW9kdWxlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZzY2FjaGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Nsb3dfd29yazsKKworCXJldCA9IGZzY2FjaGVfcHJvY19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHJvYzsKKworCWZzY2FjaGVfY29va2llX2phciA9IGttZW1fY2FjaGVfY3JlYXRlKCJmc2NhY2hlX2Nvb2tpZV9qYXIiLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSksCisJCQkJCSAgICAgICAwLAorCQkJCQkgICAgICAgMCwKKwkJCQkJICAgICAgIGZzY2FjaGVfY29va2llX2luaXRfb25jZSk7CisJaWYgKCFmc2NhY2hlX2Nvb2tpZV9qYXIpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCSAgICAgICAiRlMtQ2FjaGU6IEZhaWxlZCB0byBhbGxvY2F0ZSBhIGNvb2tpZSBqYXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2Nvb2tpZV9qYXI7CisJfQorCisJZnNjYWNoZV9yb290ID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiZnNjYWNoZSIsIGtlcm5lbF9rb2JqKTsKKwlpZiAoIWZzY2FjaGVfcm9vdCkKKwkJZ290byBlcnJvcl9rb2JqOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogTG9hZGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3Jfa29iajoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZnNjYWNoZV9jb29raWVfamFyKTsKK2Vycm9yX2Nvb2tpZV9qYXI6CisJZnNjYWNoZV9wcm9jX2NsZWFudXAoKTsKK2Vycm9yX3Byb2M6CisJc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcigpOworZXJyb3Jfc2xvd193b3JrOgorCXJldHVybiByZXQ7Cit9CisKK2ZzX2luaXRjYWxsKGZzY2FjaGVfaW5pdCk7CisKKy8qCisgKiBjbGVhbiB1cCBvbiBtb2R1bGUgcmVtb3ZhbAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNjYWNoZV9leGl0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWtvYmplY3RfcHV0KGZzY2FjaGVfcm9vdCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGZzY2FjaGVfY29va2llX2phcik7CisJZnNjYWNoZV9wcm9jX2NsZWFudXAoKTsKKwlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogVW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfZXhpdChmc2NhY2hlX2V4aXQpOworCisvKgorICogd2FpdF9vbl9iaXQoKSBzbGVlcCBmdW5jdGlvbiBmb3IgdW5pbnRlcnJ1cHRpYmxlIHdhaXRpbmcKKyAqLworaW50IGZzY2FjaGVfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV93YWl0X2JpdCk7CisKKy8qCisgKiB3YWl0X29uX2JpdCgpIHNsZWVwIGZ1bmN0aW9uIGZvciBpbnRlcnJ1cHRpYmxlIHdhaXRpbmcKKyAqLworaW50IGZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSh2b2lkICpmbGFncykKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV93YWl0X2JpdF9pbnRlcnJ1cHRpYmxlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvbmV0ZnMuYyBiL2ZzL2ZzY2FjaGUvbmV0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI4YjhlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9uZXRmcy5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBGUy1DYWNoZSBuZXRmcyAoY2xpZW50KSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENPT0tJRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgTElTVF9IRUFEKGZzY2FjaGVfbmV0ZnNfbGlzdCk7CisKKy8qCisgKiByZWdpc3RlciBhIG5ldHdvcmsgZmlsZXN5c3RlbSBmb3IgY2FjaGluZworICovCitpbnQgX19mc2NhY2hlX3JlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqcHRyOworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30iLCBuZXRmcy0+bmFtZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmbmV0ZnMtPmxpbmspOworCisJLyogYWxsb2NhdGUgYSBjb29raWUgZm9yIHRoZSBwcmltYXJ5IGluZGV4ICovCisJbmV0ZnMtPnByaW1hcnlfaW5kZXggPQorCQlrbWVtX2NhY2hlX3phbGxvYyhmc2NhY2hlX2Nvb2tpZV9qYXIsIEdGUF9LRVJORUwpOworCisJaWYgKCFuZXRmcy0+cHJpbWFyeV9pbmRleCkgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogaW5pdGlhbGlzZSB0aGUgcHJpbWFyeSBpbmRleCBjb29raWUgKi8KKwlhdG9taWNfc2V0KCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+dXNhZ2UsIDEpOworCWF0b21pY19zZXQoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5uX2NoaWxkcmVuLCAwKTsKKworCW5ldGZzLT5wcmltYXJ5X2luZGV4LT5kZWYJCT0gJmZzY2FjaGVfZnNkZWZfbmV0ZnNfZGVmOworCW5ldGZzLT5wcmltYXJ5X2luZGV4LT5wYXJlbnQJCT0gJmZzY2FjaGVfZnNkZWZfaW5kZXg7CisJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPm5ldGZzX2RhdGEJPSBuZXRmczsKKworCWF0b21pY19pbmMoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5wYXJlbnQtPnVzYWdlKTsKKwlhdG9taWNfaW5jKCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+cGFyZW50LT5uX2NoaWxkcmVuKTsKKworCXNwaW5fbG9ja19pbml0KCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+bG9jayk7CisJSU5JVF9ITElTVF9IRUFEKCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+YmFja2luZ19vYmplY3RzKTsKKworCS8qIGNoZWNrIHRoZSBuZXRmcyB0eXBlIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgKi8KKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJcmV0ID0gLUVFWElTVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmZzY2FjaGVfbmV0ZnNfbGlzdCwgbGluaykgeworCQlpZiAoc3RyY21wKHB0ci0+bmFtZSwgbmV0ZnMtPm5hbWUpID09IDApCisJCQlnb3RvIGFscmVhZHlfcmVnaXN0ZXJlZDsKKwl9CisKKwlsaXN0X2FkZCgmbmV0ZnMtPmxpbmssICZmc2NhY2hlX25ldGZzX2xpc3QpOworCXJldCA9IDA7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBOZXRmcyAnJXMnIHJlZ2lzdGVyZWQgZm9yIGNhY2hpbmdcbiIsCisJICAgICAgIG5ldGZzLT5uYW1lKTsKKworYWxyZWFkeV9yZWdpc3RlcmVkOgorCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJaWYgKHJldCA8IDApIHsKKwkJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPnBhcmVudCA9IE5VTEw7CisJCV9fZnNjYWNoZV9jb29raWVfcHV0KG5ldGZzLT5wcmltYXJ5X2luZGV4KTsKKwkJbmV0ZnMtPnByaW1hcnlfaW5kZXggPSBOVUxMOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyk7CisKKy8qCisgKiB1bnJlZ2lzdGVyIGEgbmV0d29yayBmaWxlc3lzdGVtIGZyb20gdGhlIGNhY2hlCisgKiAtIGFsbCBjb29raWVzIG11c3QgaGF2ZSBiZWVuIHJlbGVhc2VkIGZpcnN0CisgKi8KK3ZvaWQgX19mc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKQoreworCV9lbnRlcigieyVzLiV1fSIsIG5ldGZzLT5uYW1lLCBuZXRmcy0+dmVyc2lvbik7CisKKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJbGlzdF9kZWwoJm5ldGZzLT5saW5rKTsKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5ldGZzLT5wcmltYXJ5X2luZGV4LCAwKTsKKworCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogTmV0ZnMgJyVzJyB1bnJlZ2lzdGVyZWQgZnJvbSBjYWNoaW5nXG4iLAorCSAgICAgICBuZXRmcy0+bmFtZSk7CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29iamVjdC5jIGIvZnMvZnNjYWNoZS9vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTJhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9vYmplY3QuYwpAQCAtMCwwICsxLDgxMCBAQAorLyogRlMtQ2FjaGUgb2JqZWN0IHN0YXRlIG1hY2hpbmUgaGFuZGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgKiBvYmplY3Qgc3RhdGUgbWFjaGluZSBhbmQgdGhlIGluLWtlcm5lbCByZXByZXNlbnRhdGlvbnMuCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENPT0tJRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2NvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdID0geworCVtGU0NBQ0hFX09CSkVDVF9JTklUXQkJPSAiT0JKRUNUX0lOSVQiLAorCVtGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQXQk9ICJPQkpFQ1RfTE9PS0lOR19VUCIsCisJW0ZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HXQk9ICJPQkpFQ1RfQ1JFQVRJTkciLAorCVtGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEVdCT0gIk9CSkVDVF9BVkFJTEFCTEUiLAorCVtGU0NBQ0hFX09CSkVDVF9BQ1RJVkVdCQk9ICJPQkpFQ1RfQUNUSVZFIiwKKwlbRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkddCT0gIk9CSkVDVF9VUERBVElORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0RZSU5HXQkJPSAiT0JKRUNUX0RZSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkddCT0gIk9CSkVDVF9MQ19EWUlORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVRdCT0gIk9CSkVDVF9BQk9SVF9JTklUIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HXQk9ICJPQkpFQ1RfUkVMRUFTSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HXQk9ICJPQkpFQ1RfUkVDWUNMSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkddCT0gIk9CSkVDVF9XSVRIRFJBV0lORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0RFQURdCQk9ICJPQkpFQ1RfREVBRCIsCit9OworRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9zdGF0ZXMpOworCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICopOworc3RhdGljIGludCAgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2dldF9yZWYoc3RydWN0IHNsb3dfd29yayAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2luaXRpYWxpc2Vfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfbG9va3VwX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9hdmFpbGFibGUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworc3RhdGljIHZvaWQgZnNjYWNoZV9yZWxlYXNlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2VucXVldWVfZGVwZW5kZW50cyhzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2RlcXVldWVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKKworY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyA9IHsKKwkuZ2V0X3JlZgk9IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19nZXRfcmVmLAorCS5wdXRfcmVmCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX3B1dF9yZWYsCisJLmV4ZWN1dGUJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZXhlY3V0ZSwKK307CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHMpOworCisvKgorICogd2UgbmVlZCB0byBub3RpZnkgdGhlIHBhcmVudCB3aGVuIGFuIG9wIGNvbXBsZXRlcyB0aGF0IHdlIGhhZCBvdXRzdGFuZGluZworICogdXBvbiBpdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9kb25lX3BhcmVudF9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudCA9IG9iamVjdC0+cGFyZW50OworCisJX2VudGVyKCJPQkoleCB7T0JKJXgsJXh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgcGFyZW50LT5kZWJ1Z19pZCwgcGFyZW50LT5uX29wcyk7CisKKwlzcGluX2xvY2tfbmVzdGVkKCZwYXJlbnQtPmxvY2ssIDEpOworCXBhcmVudC0+bl9vcHMtLTsKKwlwYXJlbnQtPm5fb2JqX29wcy0tOworCWlmIChwYXJlbnQtPm5fb3BzID09IDApCisJCWZzY2FjaGVfcmFpc2VfZXZlbnQocGFyZW50LCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKK30KKworLyoKKyAqIHByb2Nlc3MgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHNlbnQgdG8gYW4gb2JqZWN0J3Mgc3RhdGUgbWFjaGluZQorICogLSBpbml0aWF0ZXMgcGFyZW50IGxvb2t1cAorICogLSBkb2VzIG9iamVjdCBsb29rdXAKKyAqIC0gZG9lcyBvYmplY3QgY3JlYXRpb24KKyAqIC0gZG9lcyBvYmplY3QgcmVjeWNsaW5nIGFuZCByZXRpcmVtZW50CisgKiAtIGRvZXMgb2JqZWN0IHdpdGhkcmF3YWwKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc3RhdGVfbWFjaGluZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwllbnVtIGZzY2FjaGVfb2JqZWN0X3N0YXRlIG5ld19zdGF0ZTsKKworCUFTU0VSVChvYmplY3QgIT0gTlVMTCk7CisKKwlfZW50ZXIoIntPQkoleCwlcywlbHh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdLAorCSAgICAgICBvYmplY3QtPmV2ZW50cyk7CisKKwlzd2l0Y2ggKG9iamVjdC0+c3RhdGUpIHsKKwkJLyogd2FpdCBmb3IgdGhlIHBhcmVudCBvYmplY3QgdG8gYmVjb21lIHJlYWR5ICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9JTklUOgorCQlvYmplY3QtPmV2ZW50X21hc2sgPQorCQkJVUxPTkdfTUFYICYgfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCQlmc2NhY2hlX2luaXRpYWxpc2Vfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gZG9uZTsKKworCQkvKiBsb29rIHVwIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUDoKKwkJZnNjYWNoZV9sb29rdXBfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gbG9va3VwX3RyYW5zaXQ7CisKKwkJLyogY3JlYXRlIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkc6CisJCWZzY2FjaGVfbG9va3VwX29iamVjdChvYmplY3QpOworCQlnb3RvIGxvb2t1cF90cmFuc2l0OworCisJCS8qIGhhbmRsZSBhbiBvYmplY3QgYmVjb21pbmcgYXZhaWxhYmxlOyBzdGFydCBwZW5kaW5nCisJCSAqIG9wZXJhdGlvbnMgYW5kIHF1ZXVlIGRlcGVuZGVudCBvcGVyYXRpb25zIGZvciBwcm9jZXNzaW5nICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEU6CisJCWZzY2FjaGVfb2JqZWN0X2F2YWlsYWJsZShvYmplY3QpOworCQlnb3RvIGFjdGl2ZV90cmFuc2l0OworCisJCS8qIG5vcm1hbCBydW5uaW5nIHN0YXRlICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkU6CisJCWdvdG8gYWN0aXZlX3RyYW5zaXQ7CisKKwkJLyogdXBkYXRlIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkc6CisJCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUsICZvYmplY3QtPmV2ZW50cyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VwZGF0ZXNfcnVuKTsKKwkJb2JqZWN0LT5jYWNoZS0+b3BzLT51cGRhdGVfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gYWN0aXZlX3RyYW5zaXQ7CisKKwkJLyogaGFuZGxlIGFuIG9iamVjdCBkeWluZyBkdXJpbmcgbG9va3VwIG9yIGNyZWF0aW9uICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9MQ19EWUlORzoKKwkJb2JqZWN0LT5ldmVudF9tYXNrICY9IH4oMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUpOworCQlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9jb21wbGV0ZShvYmplY3QpOworCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RZSU5HOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLAorCQkJCSAgICAgICAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKKwkJCXdha2VfdXBfYml0KCZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MsCisJCQkJICAgIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJZnNjYWNoZV9kb25lX3BhcmVudF9vcChvYmplY3QpOworCisJCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIGFjdGl2ZSBvcGVyYXRpb25zIG9uIHRoaXMgb2JqZWN0CisJCSAqIGFuZCB0aGUgZGVhdGggb2YgYWxsIGNoaWxkIG9iamVjdHMgb2YgdGhpcyBvYmplY3QgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0RZSU5HOgorCWR5aW5nOgorCQljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCwgJm9iamVjdC0+ZXZlbnRzKTsKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlfZGVidWcoImR5aW5nIE9CSiV4IHslZCwlZH0iLAorCQkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgb2JqZWN0LT5uX29wcywgb2JqZWN0LT5uX2NoaWxkcmVuKTsKKwkJaWYgKG9iamVjdC0+bl9vcHMgPT0gMCAmJiBvYmplY3QtPm5fY2hpbGRyZW4gPT0gMCkgeworCQkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQkJfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCQkJb2JqZWN0LT5ldmVudF9tYXNrIHw9CisJCQkJKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcpIHwKKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkJKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IpOworCQl9IGVsc2UgeworCQkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFKSB8CisJCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQkJb2JqZWN0LT5ldmVudF9tYXNrIHw9CisJCQkJMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEOworCQl9CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlmc2NhY2hlX2VucXVldWVfZGVwZW5kZW50cyhvYmplY3QpOworCQlnb3RvIHRlcm1pbmFsX3RyYW5zaXQ7CisKKwkJLyogaGFuZGxlIGFuIGFib3J0IGR1cmluZyBpbml0aWFsaXNhdGlvbiAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVDoKKwkJX2RlYnVnKCJoYW5kbGUgYWJvcnQgaW5pdCAlbHgiLCBvYmplY3QtPmV2ZW50cyk7CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPSB+KDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfVVBEQVRFKTsKKworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCWZzY2FjaGVfZGVxdWV1ZV9vYmplY3Qob2JqZWN0KTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfRFlJTkc7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsCisJCQkJICAgICAgICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQorCQkJd2FrZV91cF9iaXQoJm9iamVjdC0+Y29va2llLT5mbGFncywKKwkJCQkgICAgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJZ290byBkeWluZzsKKworCQkvKiBoYW5kbGUgdGhlIG5ldGZzIHJlbGVhc2luZyBhbiBvYmplY3QgYW5kIHBvc3NpYmx5IG1hcmtpbmcgaXQKKwkJICogb2Jzb2xldGUgdG9vICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkc6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkc6CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPQorCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQlmc2NhY2hlX3JlbGVhc2Vfb2JqZWN0KG9iamVjdCk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RFQUQ7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfZGVhZCk7CisJCWdvdG8gdGVybWluYWxfdHJhbnNpdDsKKworCQkvKiBoYW5kbGUgdGhlIHBhcmVudCBjYWNoZSBvZiB0aGlzIG9iamVjdCBiZWluZyB3aXRoZHJhd24gZnJvbQorCQkgKiBhY3RpdmUgc2VydmljZSAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkc6CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPQorCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQlmc2NhY2hlX3dpdGhkcmF3X29iamVjdChvYmplY3QpOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9ERUFEOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2RlYWQpOworCQlnb3RvIHRlcm1pbmFsX3RyYW5zaXQ7CisKKwkJLyogY29tcGxhaW4gYWJvdXQgdGhlIG9iamVjdCBiZWluZyB3b2tlbiB1cCBvbmNlIGl0IGlzCisJCSAqIGRlY2Vhc2VkICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9ERUFEOgorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiIKKwkJICAgICAgICIgVW5leHBlY3RlZCBldmVudCBpbiBkZWFkIHN0YXRlICVseFxuIiwKKwkJICAgICAgIG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKTsKKwkJQlVHKCk7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBVbmtub3duIG9iamVjdCBzdGF0ZSAldVxuIiwKKwkJICAgICAgIG9iamVjdC0+c3RhdGUpOworCQlCVUcoKTsKKwl9CisKKwkvKiBkZXRlcm1pbmUgdGhlIHRyYW5zaXRpb24gZnJvbSBhIGxvb2t1cCBzdGF0ZSAqLworbG9va3VwX3RyYW5zaXQ6CisJc3dpdGNoIChmbHMob2JqZWN0LT5ldmVudHMgJiBvYmplY3QtPmV2ZW50X21hc2spIC0gMSkgeworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVc6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkU6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1I6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUU6CisJCWdvdG8gZG9uZTsKKwljYXNlIC0xOgorCQlnb3RvIGRvbmU7IC8qIHNsZWVwIHVudGlsIGV2ZW50ICovCisJZGVmYXVsdDoKKwkJZ290byB1bnN1cHBvcnRlZF9ldmVudDsKKwl9CisKKwkvKiBkZXRlcm1pbmUgdGhlIHRyYW5zaXRpb24gZnJvbSBhbiBhY3RpdmUgc3RhdGUgKi8KK2FjdGl2ZV90cmFuc2l0OgorCXN3aXRjaCAoZmxzKG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKSAtIDEpIHsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRToKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9EWUlORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEU6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX1VQREFUSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIC0xOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkU7CisJCWdvdG8gY2hhbmdlX3N0YXRlOyAvKiBzbGVlcCB1bnRpbCBldmVudCAqLworCWRlZmF1bHQ6CisJCWdvdG8gdW5zdXBwb3J0ZWRfZXZlbnQ7CisJfQorCisJLyogZGV0ZXJtaW5lIHRoZSB0cmFuc2l0aW9uIGZyb20gYSB0ZXJtaW5hbCBzdGF0ZSAqLwordGVybWluYWxfdHJhbnNpdDoKKwlzd2l0Y2ggKGZscyhvYmplY3QtPmV2ZW50cyAmIG9iamVjdC0+ZXZlbnRfbWFzaykgLSAxKSB7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVzoKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRToKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9EWUlORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSAtMToKKwkJZ290byBkb25lOyAvKiBzbGVlcCB1bnRpbCBldmVudCAqLworCWRlZmF1bHQ6CisJCWdvdG8gdW5zdXBwb3J0ZWRfZXZlbnQ7CisJfQorCitjaGFuZ2Vfc3RhdGU6CisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCW9iamVjdC0+c3RhdGUgPSBuZXdfc3RhdGU7CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKK2RvbmU6CisJX2xlYXZlKCIgWy0+JXNdIiwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdKTsKKwlyZXR1cm47CisKK3Vuc3VwcG9ydGVkX2V2ZW50OgorCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IgorCSAgICAgICAiIFVuc3VwcG9ydGVkIGV2ZW50ICVseCBbbWFzayAlbHhdIGluIHN0YXRlICVzXG4iLAorCSAgICAgICBvYmplY3QtPmV2ZW50cywgb2JqZWN0LT5ldmVudF9tYXNrLAorCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCUJVRygpOworfQorCisvKgorICogZXhlY3V0ZSBhbiBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlfZW50ZXIoIntPQkoleH0iLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCisJc3RhcnQgPSBqaWZmaWVzOworCWZzY2FjaGVfb2JqZWN0X3N0YXRlX21hY2hpbmUob2JqZWN0KTsKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9vYmpzX2hpc3RvZ3JhbSwgc3RhcnQpOworCWlmIChvYmplY3QtPmV2ZW50cyAmIG9iamVjdC0+ZXZlbnRfbWFzaykKKwkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChvYmplY3QpOworfQorCisvKgorICogaW5pdGlhbGlzZSBhbiBvYmplY3QKKyAqIC0gY2hlY2sgdGhlIHNwZWNpZmllZCBvYmplY3QncyBwYXJlbnQgdG8gc2VlIGlmIHdlIGNhbiBtYWtlIHVzZSBvZiBpdAorICogICBpbW1lZGlhdGVseSB0byBkbyBhIGNyZWF0aW9uCisgKiAtIHdlIG1heSBuZWVkIHRvIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgcGFyZW50IGFuZCB3ZSBuZWVkIHRvIHdhaXQKKyAqICAgZm9yIHRoZSBwYXJlbnQncyBsb29rdXAgYW5kIGNyZWF0aW9uIHRvIGNvbXBsZXRlIGlmIGl0J3Mgbm90IHRoZXJlIHlldAorICogLSBhbiBvYmplY3QncyBjb29raWUgaXMgcGlubmVkIHVudGlsIHdlIGNsZWFyIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HIG9uIHRoZQorICogICBsZWFmLW1vc3QgY29va2llcyBvZiB0aGUgb2JqZWN0IGFuZCBhbGwgaXRzIGNoaWxkcmVuCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQ7CisKKwlfZW50ZXIoIiIpOworCUFTU0VSVChvYmplY3QtPmNvb2tpZSAhPSBOVUxMKTsKKwlBU1NFUlQob2JqZWN0LT5jb29raWUtPnBhcmVudCAhPSBOVUxMKTsKKwlBU1NFUlQobGlzdF9lbXB0eSgmb2JqZWN0LT53b3JrLmxpbmspKTsKKworCWlmIChvYmplY3QtPmV2ZW50cyAmICgoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikgfAorCQkJICAgICAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAgICAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFKSB8CisJCQkgICAgICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykpKSB7CisJCV9kZWJ1ZygiYWJvcnQgaW5pdCAlbHgiLCBvYmplY3QtPmV2ZW50cyk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVQ7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZvYmplY3QtPmNvb2tpZS0+bG9jayk7CisJc3Bpbl9sb2NrX25lc3RlZCgmb2JqZWN0LT5jb29raWUtPnBhcmVudC0+bG9jaywgMSk7CisKKwlwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKwlpZiAoIXBhcmVudCkgeworCQlfZGVidWcoIm5vIHBhcmVudCIpOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXLCAmb2JqZWN0LT5ldmVudHMpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmcGFyZW50LT5sb2NrLCAxKTsKKwkJX2RlYnVnKCJwYXJlbnQgJXMiLCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbcGFyZW50LT5zdGF0ZV0pOworCisJCWlmIChwYXJlbnQtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCQlfZGVidWcoImJhZCBwYXJlbnQiKTsKKwkJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcsICZvYmplY3QtPmV2ZW50cyk7CisJCX0gZWxzZSBpZiAocGFyZW50LT5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSkgeworCQkJX2RlYnVnKCJ3YWl0Iik7CisKKwkJCS8qIHdlIG1heSBnZXQgd29rZW4gdXAgaW4gdGhpcyBzdGF0ZSBieSBjaGlsZCBvYmplY3RzCisJCQkgKiBiaW5kaW5nIG9uIHRvIHVzLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndAorCQkJICogYWRkIG91cnNlbGYgdG8gdGhlIGxpc3QgbXVsdGlwbGUgdGltZXMgKi8KKwkJCWlmIChsaXN0X2VtcHR5KCZvYmplY3QtPmRlcF9saW5rKSkgeworCQkJCW9iamVjdC0+Y2FjaGUtPm9wcy0+Z3JhYl9vYmplY3Qob2JqZWN0KTsKKwkJCQlsaXN0X2FkZCgmb2JqZWN0LT5kZXBfbGluaywKKwkJCQkJICZwYXJlbnQtPmRlcGVuZGVudHMpOworCisJCQkJLyogZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoKSB1c2VzIHRoaXMKKwkJCQkgKiB0byB3YWtlIHRoZSBjaGFpbiB1cCAqLworCQkJCWlmIChwYXJlbnQtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0lOSVQpCisJCQkJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3QocGFyZW50KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCV9kZWJ1ZygiZ28iKTsKKwkJCXBhcmVudC0+bl9vcHMrKzsKKwkJCXBhcmVudC0+bl9vYmpfb3BzKys7CisJCQlvYmplY3QtPmxvb2t1cF9qaWYgPSBqaWZmaWVzOworCQkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVA7CisJCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJCX0KKworCQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+Y29va2llLT5wYXJlbnQtPmxvY2spOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmNvb2tpZS0+bG9jayk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGxvb2sgYW4gb2JqZWN0IHVwIGluIHRoZSBjYWNoZSBmcm9tIHdoaWNoIGl0IHdhcyBhbGxvY2F0ZWQKKyAqIC0gd2UgaG9sZCBhbiAiYWNjZXNzIGxvY2siIG9uIHRoZSBwYXJlbnQgb2JqZWN0LCBzbyB0aGUgcGFyZW50IG9iamVjdCBjYW5ub3QKKyAqICAgYmUgd2l0aGRyYXduIGJ5IGVpdGhlciBwYXJ0eSB0aWxsIHdlJ3ZlIGZpbmlzaGVkCisgKiAtIGFuIG9iamVjdCdzIGNvb2tpZSBpcyBwaW5uZWQgdW50aWwgd2UgY2xlYXIgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcgb24gdGhlCisgKiAgIGxlYWYtbW9zdCBjb29raWVzIG9mIHRoZSBvYmplY3QgYW5kIGFsbCBpdHMgY2hpbGRyZW4KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gb2JqZWN0LT5jb29raWU7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQ7CisKKwlfZW50ZXIoIiIpOworCisJcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQ7CisJQVNTRVJUKHBhcmVudCAhPSBOVUxMKTsKKwlBU1NFUlRDTVAocGFyZW50LT5uX29wcywgPiwgMCk7CisJQVNTRVJUQ01QKHBhcmVudC0+bl9vYmpfb3BzLCA+LCAwKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIHN0aWxsIGF2YWlsYWJsZSAqLworCUFTU0VSVENNUChwYXJlbnQtPnN0YXRlLCA+PSwgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFKTsKKworCWlmIChwYXJlbnQtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HIHx8CisJICAgIHRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJm9iamVjdC0+Y2FjaGUtPmZsYWdzKSkgeworCQlfZGVidWcoInVuYXZhaWxhYmxlIik7CisJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcsICZvYmplY3QtPmV2ZW50cyk7CisJCV9sZWF2ZSgiIik7CisJCXJldHVybjsKKwl9CisKKwlfZGVidWcoIkxPT0tVUCBcIiVzLyVzXCIgaW4gXCIlc1wiIiwKKwkgICAgICAgcGFyZW50LT5jb29raWUtPmRlZi0+bmFtZSwgY29va2llLT5kZWYtPm5hbWUsCisJICAgICAgIG9iamVjdC0+Y2FjaGUtPnRhZy0+bmFtZSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3Vwcyk7CisJb2JqZWN0LT5jYWNoZS0+b3BzLT5sb29rdXBfb2JqZWN0KG9iamVjdCk7CisKKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IsICZvYmplY3QtPmV2ZW50cykpCisJCXNldF9iaXQoRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEUsICZjb29raWUtPmZsYWdzKTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qKgorICogZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlIC0gTm90ZSBuZWdhdGl2ZSBjb29raWUgbG9va3VwCisgKiBAb2JqZWN0OiBPYmplY3QgcG9pbnRpbmcgdG8gY29va2llIHRvIG1hcmsKKyAqCisgKiBOb3RlIG5lZ2F0aXZlIGxvb2t1cCwgcGVybWl0dGluZyB0aG9zZSB3YWl0aW5nIHRvIHJlYWQgZGF0YSBmcm9tIGFuIGFscmVhZHkKKyAqIGV4aXN0aW5nIGJhY2tpbmcgb2JqZWN0IHRvIGNvbnRpbnVlIGFzIHRoZXJlJ3Mgbm8gZGF0YSBmb3IgdGhlbSB0byByZWFkLgorICovCit2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG9iamVjdC0+Y29va2llOworCisJX2VudGVyKCJ7T0JKJXgsJXN9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX25lZ2F0aXZlKTsKKworCQkvKiB0cmFuc2l0IGhlcmUgdG8gYWxsb3cgd3JpdGUgcmVxdWVzdHMgdG8gYmVnaW4gc3RhY2tpbmcgdXAKKwkJICogYW5kIHJlYWQgcmVxdWVzdHMgdG8gYmVnaW4gcmV0dXJuaW5nIEVOT0RBVEEgKi8KKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlzZXRfYml0KEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfRklMTCwgJmNvb2tpZS0+ZmxhZ3MpOworCQlzZXRfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmY29va2llLT5mbGFncyk7CisKKwkJX2RlYnVnKCJ3YWtlIHVwIGxvb2t1cCAlcCIsICZjb29raWUtPmZsYWdzKTsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCWNsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQLCAmY29va2llLT5mbGFncyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXdha2VfdXBfYml0KCZjb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQKTsKKwkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCX0gZWxzZSB7CisJCUFTU0VSVENNUChvYmplY3QtPnN0YXRlLCA9PSwgRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUpOworCisvKioKKyAqIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0IC0gTm90ZSBzdWNjZXNzZnVsIG9iamVjdCBsb29rdXAgb3IgY3JlYXRpb24KKyAqIEBvYmplY3Q6IE9iamVjdCBwb2ludGluZyB0byBjb29raWUgdG8gbWFyaworICoKKyAqIE5vdGUgc3VjY2Vzc2Z1bCBsb29rdXAgYW5kL29yIGNyZWF0aW9uLCBwZXJtaXR0aW5nIHRob3NlIHdhaXRpbmcgdG8gd3JpdGUKKyAqIGRhdGEgdG8gYSBiYWNraW5nIG9iamVjdCB0byBjb250aW51ZS4KKyAqCisgKiBOb3RlIHRoYXQgYWZ0ZXIgY2FsbGluZyB0aGlzLCBhbiBvYmplY3QncyBjb29raWUgbWF5IGJlIHJlbGlucXVpc2hlZCBieSB0aGUKKyAqIG5ldGZzLCBhbmQgc28gbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIG9iamVjdCBsb2NrIGhlbGQuCisgKi8KK3ZvaWQgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKworCV9lbnRlcigie09CSiV4LCVzfSIsCisJICAgICAgIG9iamVjdC0+ZGVidWdfaWQsIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSk7CisKKwkvKiBpZiB3ZSB3ZXJlIHN0aWxsIGxvb2tpbmcgdXAsIHRoZW4gd2UgbXVzdCBoYXZlIGEgcG9zaXRpdmUgbG9va3VwCisJICogcmVzdWx0LCBpbiB3aGljaCBjYXNlIHRoZXJlIG1heSBiZSBkYXRhIGF2YWlsYWJsZSAqLworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlKTsKKworCQljbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZjb29raWUtPmZsYWdzKTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsICZjb29raWUtPmZsYWdzKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJd2FrZV91cF9iaXQoJmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJfSBlbHNlIHsKKwkJQVNTRVJUQ01QKG9iamVjdC0+c3RhdGUsID09LCBGU0NBQ0hFX09CSkVDVF9DUkVBVElORyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkKTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCQlzbXBfd21iKCk7CisJfQorCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywgJmNvb2tpZS0+ZmxhZ3MpKQorCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QpOworCisvKgorICogaGFuZGxlIGFuIG9iamVjdCB0aGF0IGhhcyBqdXN0IGJlY29tZSBhdmFpbGFibGUKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3RfYXZhaWxhYmxlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigie09CSiV4fSIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywgJm9iamVjdC0+Y29va2llLT5mbGFncykpCisJCXdha2VfdXBfYml0KCZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKworCWZzY2FjaGVfZG9uZV9wYXJlbnRfb3Aob2JqZWN0KTsKKwlpZiAob2JqZWN0LT5uX2luX3Byb2dyZXNzID09IDApIHsKKwkJaWYgKG9iamVjdC0+bl9vcHMgPiAwKSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX29wcywgPj0sIG9iamVjdC0+bl9vYmpfb3BzKTsKKwkJCUFTU0VSVElGKG9iamVjdC0+bl9vcHMgPiBvYmplY3QtPm5fb2JqX29wcywKKwkJCQkgIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKTsKKwkJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCQl9IGVsc2UgeworCQkJQVNTRVJUKGxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCW9iamVjdC0+Y2FjaGUtPm9wcy0+bG9va3VwX2NvbXBsZXRlKG9iamVjdCk7CisJZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMob2JqZWN0KTsKKworCWZzY2FjaGVfaGlzdChmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW0sIG9iamVjdC0+bG9va3VwX2ppZik7CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2F2YWlsKTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBkcm9wIGFuIG9iamVjdCdzIGF0dGFjaG1lbnRzCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZHJvcF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCisJX2VudGVyKCJ7T0JKJXgsJWR9Iiwgb2JqZWN0LT5kZWJ1Z19pZCwgb2JqZWN0LT5uX2NoaWxkcmVuKTsKKworCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJm9iamVjdC0+Y2FjaGVfbGluayk7CisJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKworCWNhY2hlLT5vcHMtPmRyb3Bfb2JqZWN0KG9iamVjdCk7CisKKwlpZiAocGFyZW50KSB7CisJCV9kZWJ1ZygicmVsZWFzZSBwYXJlbnQgT0JKJXggeyVkfSIsCisJCSAgICAgICBwYXJlbnQtPmRlYnVnX2lkLCBwYXJlbnQtPm5fY2hpbGRyZW4pOworCisJCXNwaW5fbG9jaygmcGFyZW50LT5sb2NrKTsKKwkJcGFyZW50LT5uX2NoaWxkcmVuLS07CisJCWlmIChwYXJlbnQtPm5fY2hpbGRyZW4gPT0gMCkKKwkJCWZzY2FjaGVfcmFpc2VfZXZlbnQocGFyZW50LCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+bG9jayk7CisJCW9iamVjdC0+cGFyZW50ID0gTlVMTDsKKwl9CisKKwkvKiB0aGlzIGp1c3Qgc2hpZnRzIHRoZSBvYmplY3QgcmVsZWFzZSB0byB0aGUgc2xvdyB3b3JrIHByb2Nlc3NvciAqLworCW9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIHJlbGVhc2Ugb3IgcmVjeWNsZSBhbiBvYmplY3QgdGhhdCB0aGUgbmV0ZnMgaGFzIGRpc2NhcmRlZAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JlbGVhc2Vfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigiIik7CisKKwlmc2NhY2hlX2Ryb3Bfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiB3aXRoZHJhdyBhbiBvYmplY3QgZnJvbSBhY3RpdmUgc2VydmljZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKKwlib29sIGRldGFjaGVkOworCisJX2VudGVyKCIiKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwljb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlpZiAoY29va2llKSB7CisJCS8qIG5lZWQgdG8gZ2V0IHRoZSBjb29raWUgbG9jayBiZWZvcmUgdGhlIG9iamVjdCBsb2NrLCBzdGFydGluZworCQkgKiBmcm9tIHRoZSBvYmplY3QgcG9pbnRlciAqLworCQlhdG9taWNfaW5jKCZjb29raWUtPnVzYWdlKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJZGV0YWNoZWQgPSBmYWxzZTsKKwkJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisKKwkJaWYgKG9iamVjdC0+Y29va2llID09IGNvb2tpZSkgeworCQkJaGxpc3RfZGVsX2luaXQoJm9iamVjdC0+Y29va2llX2xpbmspOworCQkJb2JqZWN0LT5jb29raWUgPSBOVUxMOworCQkJZGV0YWNoZWQgPSB0cnVlOworCQl9CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlmc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKwkJaWYgKGRldGFjaGVkKQorCQkJZnNjYWNoZV9jb29raWVfcHV0KGNvb2tpZSk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlmc2NhY2hlX2Ryb3Bfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiB3aXRoZHJhdyBhbiBvYmplY3QgZnJvbSBhY3RpdmUgc2VydmljZSBhdCB0aGUgYmVoZXN0IG9mIHRoZSBjYWNoZQorICogLSBuZWVkIGJyZWFrIHRoZSBsaW5rcyB0byBhIGNhY2hlZCBvYmplY3QgY29va2llCisgKiAtIGNhbGxlZCB1bmRlciB0d28gc2l0dWF0aW9uczoKKyAqICAgKDEpIHJlY3ljbGVyIGRlY2lkZXMgdG8gcmVjbGFpbSBhbiBpbi11c2Ugb2JqZWN0CisgKiAgICgyKSBhIGNhY2hlIGlzIHVubW91bnRlZAorICogLSBoYXZlIHRvIHRha2UgY2FyZSBhcyB0aGUgY29va2llIGNhbiBiZSBiZWluZyByZWxpbnF1aXNoZWQgYnkgdGhlIG5ldGZzCisgKiAgIHNpbXVsdGFuZW91c2x5CisgKiAtIHRoZSBvYmplY3QgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgaG9sZGluZyBhIHJlZmNvdW50IG9uIGl0CisgKi8KK3ZvaWQgZnNjYWNoZV93aXRoZHJhd2luZ19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCWJvb2wgZW5xdWV1ZSA9IGZhbHNlOworCisJX2VudGVyKCIsT0JKJXgiLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HKSB7CisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzsKKwkJZW5xdWV1ZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKGVucXVldWUpCisJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qob2JqZWN0KTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBhbGxvdyB0aGUgc2xvdyB3b3JrIGl0ZW0gcHJvY2Vzc29yIHRvIGdldCBhIHJlZiBvbiBhbiBvYmplY3QKKyAqLworc3RhdGljIGludCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CisKKwlyZXR1cm4gb2JqZWN0LT5jYWNoZS0+b3BzLT5ncmFiX29iamVjdChvYmplY3QpID8gMCA6IC1FQUdBSU47Cit9CisKKy8qCisgKiBhbGxvdyB0aGUgc2xvdyB3b3JrIGl0ZW0gcHJvY2Vzc29yIHRvIGRpc2NhcmQgYSByZWYgb24gYSB3b3JrIGl0ZW0KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCisJcmV0dXJuIG9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworfQorCisvKgorICogZW5xdWV1ZSBhbiBvYmplY3QgZm9yIG1ldGFkYXRhLXR5cGUgcHJvY2Vzc2luZworICovCit2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlzbG93X3dvcmtfZW5xdWV1ZSgmb2JqZWN0LT53b3JrKTsKK30KKworLyoKKyAqIGVucXVldWUgdGhlIGRlcGVuZGVudHMgb2YgYW4gb2JqZWN0IGZvciBtZXRhZGF0YS10eXBlIHByb2Nlc3NpbmcKKyAqIC0gdGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIG9iamVjdCdzIGxvY2sKKyAqIC0gdGhpcyBtYXkgY2F1c2UgYW4gYWxyZWFkeSBsb2NrZWQgb2JqZWN0IHRvIHdpbmQgdXAgYmVpbmcgcHJvY2Vzc2VkIGFnYWluCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9kZXBlbmRlbnRzKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqZGVwOworCisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlpZiAobGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBlbmRlbnRzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcGVuZGVudHMpKSB7CisJCWRlcCA9IGxpc3RfZW50cnkob2JqZWN0LT5kZXBlbmRlbnRzLm5leHQsCisJCQkJIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgZGVwX2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZkZXAtPmRlcF9saW5rKTsKKworCisJCS8qIHNvcnQgb250byBhcHByb3ByaWF0ZSBsaXN0cyAqLworCQlmc2NhY2hlX2VucXVldWVfb2JqZWN0KGRlcCk7CisJCWRlcC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChkZXApOworCisJCWlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBlbmRlbnRzKSkKKwkJCWNvbmRfcmVzY2hlZF9sb2NrKCZvYmplY3QtPmxvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworfQorCisvKgorICogcmVtb3ZlIGFuIG9iamVjdCBmcm9tIHdoYXRldmVyIHF1ZXVlIGl0J3Mgd2FpdGluZyBvbgorICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCBvYmplY3QtPmxvY2sKKyAqLwordm9pZCBmc2NhY2hlX2RlcXVldWVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigie09CSiV4fSIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcF9saW5rKSkgeworCQlzcGluX2xvY2soJm9iamVjdC0+cGFyZW50LT5sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqZWN0LT5kZXBfbGluayk7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPnBhcmVudC0+bG9jayk7CisJfQorCisJX2xlYXZlKCIiKTsKK30KKworLyoqCisgKiBmc2NhY2hlX2NoZWNrX2F1eCAtIEFzayB0aGUgbmV0ZnMgd2hldGhlciBhbiBvYmplY3Qgb24gZGlzayBpcyBzdGlsbCB2YWxpZAorICogQG9iamVjdDogVGhlIG9iamVjdCB0byBhc2sgYWJvdXQKKyAqIEBkYXRhOiBUaGUgYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSBvYmplY3QKKyAqIEBkYXRhbGVuOiBUaGUgc2l6ZSBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnN1bHRzIHRoZSBuZXRmcyBhYm91dCB0aGUgY29oZXJlbmN5IHN0YXRlIG9mIGFuIG9iamVjdAorICovCitlbnVtIGZzY2FjaGVfY2hlY2thdXggZnNjYWNoZV9jaGVja19hdXgoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJCWNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IGRhdGFsZW4pCit7CisJZW51bSBmc2NhY2hlX2NoZWNrYXV4IHJlc3VsdDsKKworCWlmICghb2JqZWN0LT5jb29raWUtPmRlZi0+Y2hlY2tfYXV4KSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NoZWNrYXV4X25vbmUpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworCX0KKworCXJlc3VsdCA9IG9iamVjdC0+Y29va2llLT5kZWYtPmNoZWNrX2F1eChvYmplY3QtPmNvb2tpZS0+bmV0ZnNfZGF0YSwKKwkJCQkJCWRhdGEsIGRhdGFsZW4pOworCXN3aXRjaCAocmVzdWx0KSB7CisJCS8qIGVudHJ5IG9rYXkgYXMgaXMgKi8KKwljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWToKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY2hlY2thdXhfb2theSk7CisJCWJyZWFrOworCisJCS8qIGVudHJ5IHJlcXVpcmVzIHVwZGF0ZSAqLworCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEU6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZSk7CisJCWJyZWFrOworCisJCS8qIGVudHJ5IHJlcXVpcmVzIGRlbGV0aW9uICovCisJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9jaGVja19hdXgpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9vcGVyYXRpb24uYyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmOGQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qIEZTLUNhY2hlIHdvcmtlciBvcGVyYXRpb24gbWFuYWdlbWVudCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29wZXJhdGlvbnMudHh0CisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIE9QRVJBVElPTgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGZzY2FjaGVfb3BfZGVidWdfaWQ7CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb3BfZGVidWdfaWQpOworCisvKioKKyAqIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24gLSBFbnF1ZXVlIGFuIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZworICogQG9wOiBUaGUgb3BlcmF0aW9uIHRvIGVucXVldWUKKyAqCisgKiBFbnF1ZXVlIGFuIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZyBieSB0aGUgRlMtQ2FjaGUgdGhyZWFkIHBvb2wuCisgKgorICogVGhpcyB3aWxsIGdldCBpdHMgb3duIHJlZiBvbiB0aGUgb2JqZWN0LgorICovCit2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlfZW50ZXIoIntPQkoleCBPUCV4LCV1fSIsCisJICAgICAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVChvcC0+cHJvY2Vzc29yICE9IE5VTEwpOworCUFTU0VSVENNUChvcC0+b2JqZWN0LT5zdGF0ZSwgPj0sIEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSk7CisJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA+LCAwKTsKKworCWlmIChsaXN0X2VtcHR5KCZvcC0+cGVuZF9saW5rKSkgeworCQlzd2l0Y2ggKG9wLT5mbGFncyAmIEZTQ0FDSEVfT1BfVFlQRSkgeworCQljYXNlIEZTQ0FDSEVfT1BfRkFTVDoKKwkJCV9kZWJ1ZygicXVldWUgZmFzdCIpOworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWlmICghc2NoZWR1bGVfd29yaygmb3AtPmZhc3Rfd29yaykpCisJCQkJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwkJCWJyZWFrOworCQljYXNlIEZTQ0FDSEVfT1BfU0xPVzoKKwkJCV9kZWJ1ZygicXVldWUgc2xvdyIpOworCQkJc2xvd193b3JrX2VucXVldWUoJm9wLT5zbG93X3dvcmspOworCQkJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9PUF9NWVRIUkVBRDoKKwkJCV9kZWJ1ZygicXVldWUgZm9yIGNhbGxlcidzIGF0dGVudGlvbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBVbmV4cGVjdGVkIG9wIHR5cGUgJWx4IiwKKwkJCSAgICAgICBvcC0+ZmxhZ3MpOworCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9lbnF1ZXVlKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24pOworCisvKgorICogc3RhcnQgYW4gb3AgcnVubmluZworICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3J1bl9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCSAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCit7CisJb2JqZWN0LT5uX2luX3Byb2dyZXNzKys7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+ZmxhZ3MpKQorCQl3YWtlX3VwX2JpdCgmb3AtPmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcpOworCWlmIChvcC0+cHJvY2Vzc29yKQorCQlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9ydW4pOworfQorCisvKgorICogc3VibWl0IGFuIGV4Y2x1c2l2ZSBvcGVyYXRpb24gZm9yIGFuIG9iamVjdAorICogLSBvdGhlciBvcHMgYXJlIGV4Y2x1ZGVkIGZyb20gcnVubmluZyBzaW11bHRhbmVvdXNseSB3aXRoIHRoaXMgb25lCisgKiAtIHRoaXMgZ2V0cyBhbnkgZXh0cmEgcmVmcyBpdCBuZWVkcyBvbiBhbiBvcAorICovCitpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCit7CisJaW50IHJldDsKKworCV9lbnRlcigie09CSiV4IE9QJXh9LCIsIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MpOworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2V4Y2x1c2l2ZSk7CisKKwlyZXQgPSAtRU5PQlVGUzsKKwlpZiAoZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCQlvYmplY3QtPm5fZXhjbHVzaXZlKys7CS8qIHJlYWRzIGFuZCB3cml0ZXMgbXVzdCB3YWl0ICovCisKKwkJaWYgKG9iamVjdC0+bl9vcHMgPiAwKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCQlmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMob2JqZWN0KTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVENNUChvYmplY3QtPm5faW5fcHJvZ3Jlc3MsID09LCAwKTsKKwkJCWZzY2FjaGVfcnVuX29wKG9iamVjdCwgb3ApOworCQl9CisKKwkJLyogbmVlZCB0byBpc3N1ZSBhIG5ldyB3cml0ZSBvcCBhZnRlciB0aGlzICovCisJCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFLCAmb2JqZWN0LT5mbGFncyk7CisJCXJldCA9IDA7CisJfSBlbHNlIGlmIChvYmplY3QtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HKSB7CisJCW9wLT5vYmplY3QgPSBvYmplY3Q7CisJCW9iamVjdC0+bl9vcHMrKzsKKwkJb2JqZWN0LT5uX2V4Y2x1c2l2ZSsrOwkvKiByZWFkcyBhbmQgd3JpdGVzIG11c3Qgd2FpdCAqLworCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCS8qIG5vdCBhbGxvd2VkIHRvIHN1Ym1pdCBvcHMgaW4gYW55IG90aGVyIHN0YXRlICovCisJCUJVRygpOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZXBvcnQgYW4gdW5leHBlY3RlZCBzdWJtaXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVwb3J0X3VuZXhwZWN0ZWRfc3VibWlzc2lvbihzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJCSBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb3N0YXRlKQoreworCXN0YXRpYyBib29sIG9uY2Vfb25seTsKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKnA7CisJdW5zaWduZWQgbjsKKworCWlmIChvbmNlX29ubHkpCisJCXJldHVybjsKKwlvbmNlX29ubHkgPSB0cnVlOworCisJa2RlYnVnKCJ1bmV4cGVjdGVkIHN1Ym1pc3Npb24gT1AleCBbT0JKJXggJXNdIiwKKwkgICAgICAgb3AtPmRlYnVnX2lkLCBvYmplY3QtPmRlYnVnX2lkLAorCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCWtkZWJ1Zygib2Jqc3RhdGU9JXMgWyVzXSIsCisJICAgICAgIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSwKKwkgICAgICAgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29zdGF0ZV0pOworCWtkZWJ1Zygib2JqZmxhZ3M9JWx4Iiwgb2JqZWN0LT5mbGFncyk7CisJa2RlYnVnKCJvYmpldmVudD0lbHggWyVseF0iLCBvYmplY3QtPmV2ZW50cywgb2JqZWN0LT5ldmVudF9tYXNrKTsKKwlrZGVidWcoIm9wcz0ldSBpbnA9JXUgZXhjPSV1IiwKKwkgICAgICAgb2JqZWN0LT5uX29wcywgb2JqZWN0LT5uX2luX3Byb2dyZXNzLCBvYmplY3QtPm5fZXhjbHVzaXZlKTsKKworCWlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykpIHsKKwkJbiA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm9iamVjdC0+cGVuZGluZ19vcHMsIHBlbmRfbGluaykgeworCQkJQVNTRVJUQ01QKHAtPm9iamVjdCwgPT0sIG9iamVjdCk7CisJCQlrZGVidWcoIiVwICVwIiwgb3AtPnByb2Nlc3Nvciwgb3AtPnJlbGVhc2UpOworCQkJbisrOworCQl9CisKKwkJa2RlYnVnKCJuPSV1Iiwgbik7CisJfQorCisJZHVtcF9zdGFjaygpOworfQorCisvKgorICogc3VibWl0IGFuIG9wZXJhdGlvbiBmb3IgYW4gb2JqZWN0CisgKiAtIG9iamVjdHMgbWF5IGJlIHN1Ym1pdHRlZCBvbmx5IGluIHRoZSBmb2xsb3dpbmcgc3RhdGVzOgorICogICAtIGR1cmluZyBvYmplY3QgY3JlYXRpb24gKHdyaXRlIG9wcyBtYXkgYmUgc3VibWl0dGVkKQorICogICAtIHdoaWxzdCB0aGUgb2JqZWN0IGlzIGFjdGl2ZQorICogICAtIGFmdGVyIGFuIEkvTyBlcnJvciBpbmN1cnJlZCBpbiBvbmUgb2YgdGhlIHR3byBhYm92ZSBzdGF0ZXMgKG9wIHJlamVjdGVkKQorICogLSB0aGlzIGdldHMgYW55IGV4dHJhIHJlZnMgaXQgbmVlZHMgb24gYW4gb3AKKyAqLworaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCXVuc2lnbmVkIGxvbmcgb3N0YXRlOworCWludCByZXQ7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4fSx7JXV9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSk7CisKKwlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJm9wLT51c2FnZSksID4sIDApOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2luX3Byb2dyZXNzKTsKKwlBU1NFUlRDTVAob2JqZWN0LT5uX29wcywgPj0sIG9iamVjdC0+bl9leGNsdXNpdmUpOworCisJb3N0YXRlID0gb2JqZWN0LT5zdGF0ZTsKKwlzbXBfcm1iKCk7CisKKwlpZiAoZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCisJCWlmIChvYmplY3QtPm5fZXhjbHVzaXZlID4gMCkgeworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPnBlbmRpbmdfb3BzKSkgeworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQkJZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKG9iamVjdCk7CisJCX0gZWxzZSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX2V4Y2x1c2l2ZSwgPT0sIDApOworCQkJZnNjYWNoZV9ydW5fb3Aob2JqZWN0LCBvcCk7CisJCX0KKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKG9iamVjdC0+c3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAoIXRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJm9iamVjdC0+Y2FjaGUtPmZsYWdzKSkgeworCQlmc2NhY2hlX3JlcG9ydF91bmV4cGVjdGVkX3N1Ym1pc3Npb24ob2JqZWN0LCBvcCwgb3N0YXRlKTsKKwkJQVNTRVJUKCFmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSk7CisJCXJldCA9IC1FTk9CVUZTOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBxdWV1ZSBhbiBvYmplY3QgZm9yIHdpdGhkcmF3YWwgb24gZXJyb3IsIGFib3J0aW5nIGFsbCBmb2xsb3dpbmcgYXN5bmNocm9ub3VzCisgKiBvcGVyYXRpb25zCisgKi8KK3ZvaWQgZnNjYWNoZV9hYm9ydF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IpOworfQorCisvKgorICoganVtcCBzdGFydCB0aGUgb3BlcmF0aW9uIHByb2Nlc3Npbmcgb24gYW4gb2JqZWN0CisgKiAtIGNhbGxlciBtdXN0IGhvbGQgb2JqZWN0LT5sb2NrCisgKi8KK3ZvaWQgZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3A7CisJYm9vbCBzdG9wID0gZmFsc2U7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpICYmICFzdG9wKSB7CisJCW9wID0gbGlzdF9lbnRyeShvYmplY3QtPnBlbmRpbmdfb3BzLm5leHQsCisJCQkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBwZW5kX2xpbmspOworCisJCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0VYQ0xVU0lWRSwgJm9wLT5mbGFncykpIHsKKwkJCWlmIChvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPiAwKQorCQkJCWJyZWFrOworCQkJc3RvcCA9IHRydWU7CisJCX0KKwkJbGlzdF9kZWxfaW5pdCgmb3AtPnBlbmRfbGluayk7CisJCW9iamVjdC0+bl9pbl9wcm9ncmVzcysrOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPmZsYWdzKSkKKwkJCXdha2VfdXBfYml0KCZvcC0+ZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORyk7CisJCWlmIChvcC0+cHJvY2Vzc29yKQorCQkJZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihvcCk7CisKKwkJLyogdGhlIHBlbmRpbmcgcXVldWUgd2FzIGhvbGRpbmcgYSByZWYgb24gdGhlIG9iamVjdCAqLworCQlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworCX0KKworCUFTU0VSVENNUChvYmplY3QtPm5faW5fcHJvZ3Jlc3MsIDw9LCBvYmplY3QtPm5fb3BzKTsKKworCV9kZWJ1Zygid29rZSAlZCBvcHMgb24gT0JKJXgiLAorCSAgICAgICBvYmplY3QtPm5faW5fcHJvZ3Jlc3MsIG9iamVjdC0+ZGVidWdfaWQpOworfQorCisvKgorICogcmVsZWFzZSBhbiBvcGVyYXRpb24KKyAqIC0gcXVldWVzIHBlbmRpbmcgb3BzIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW4tcHJvZ3Jlc3Mgb3AKKyAqLwordm9pZCBmc2NhY2hlX3B1dF9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4LCVkfSIsCisJICAgICAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVENNUChhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSwgPiwgMCk7CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJm9wLT51c2FnZSkpCisJCXJldHVybjsKKworCV9kZWJ1ZygiUFVUIE9QIik7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9PUF9ERUFELCAmb3AtPmZsYWdzKSkKKwkJQlVHKCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9yZWxlYXNlKTsKKworCWlmIChvcC0+cmVsZWFzZSkgeworCQlvcC0+cmVsZWFzZShvcCk7CisJCW9wLT5yZWxlYXNlID0gTlVMTDsKKwl9CisKKwlvYmplY3QgPSBvcC0+b2JqZWN0OworCisJLyogbm93Li4uIHdlIG1heSBnZXQgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBzcGlubG9jayBoZWxkLCBzbyB3ZQorCSAqIGNvbXBsZXRlIHRoZSBjbGVhbnVwIGhlcmUgb25seSBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgYWNxdWlyZSB0aGUKKwkgKiBsb2NrLCBhbmQgZGVmZXIgaXQgb3RoZXJ3aXNlICovCisJaWYgKCFzcGluX3RyeWxvY2soJm9iamVjdC0+bG9jaykpIHsKKwkJX2RlYnVnKCJkZWZlciBwdXQiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfZGVmZXJyZWRfcmVsZWFzZSk7CisKKwkJY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCQlzcGluX2xvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmY2FjaGUtPm9wX2djX2xpc3QpOworCQlzcGluX3VubG9jaygmY2FjaGUtPm9wX2djX2xpc3RfbG9jayk7CisJCXNjaGVkdWxlX3dvcmsoJmNhY2hlLT5vcF9nYyk7CisJCV9sZWF2ZSgiIFtkZWZlcl0iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0VYQ0xVU0lWRSwgJm9wLT5mbGFncykpIHsKKwkJQVNTRVJUQ01QKG9iamVjdC0+bl9leGNsdXNpdmUsID4sIDApOworCQlvYmplY3QtPm5fZXhjbHVzaXZlLS07CisJfQorCisJQVNTRVJUQ01QKG9iamVjdC0+bl9pbl9wcm9ncmVzcywgPiwgMCk7CisJb2JqZWN0LT5uX2luX3Byb2dyZXNzLS07CisJaWYgKG9iamVjdC0+bl9pbl9wcm9ncmVzcyA9PSAwKQorCQlmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMob2JqZWN0KTsKKworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+LCAwKTsKKwlvYmplY3QtPm5fb3BzLS07CisJaWYgKG9iamVjdC0+bl9vcHMgPT0gMCkKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlrZnJlZShvcCk7CisJX2xlYXZlKCIgW2RvbmVdIik7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfcHV0X29wZXJhdGlvbik7CisKKy8qCisgKiBnYXJiYWdlIGNvbGxlY3Qgb3BlcmF0aW9ucyB0aGF0IGhhdmUgaGFkIHRoZWlyIHJlbGVhc2UgZGVmZXJyZWQKKyAqLwordm9pZCBmc2NhY2hlX29wZXJhdGlvbl9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfY2FjaGUsIG9wX2djKTsKKwlpbnQgY291bnQgPSAwOworCisJX2VudGVyKCIiKTsKKworCWRvIHsKKwkJc3Bpbl9sb2NrKCZjYWNoZS0+b3BfZ2NfbGlzdF9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5vcF9nY19saXN0KSkgeworCQkJc3Bpbl91bmxvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCQkJYnJlYWs7CisJCX0KKworCQlvcCA9IGxpc3RfZW50cnkoY2FjaGUtPm9wX2djX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHBlbmRfbGluayk7CisJCWxpc3RfZGVsKCZvcC0+cGVuZF9saW5rKTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCisJCW9iamVjdCA9IG9wLT5vYmplY3Q7CisKKwkJX2RlYnVnKCJHQyBERUZFUlJFRCBSRUwgT0JKJXggT1AleCIsCisJCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9nYyk7CisKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA9PSwgMCk7CisKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlpZiAodGVzdF9iaXQoRlNDQUNIRV9PUF9FWENMVVNJVkUsICZvcC0+ZmxhZ3MpKSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX2V4Y2x1c2l2ZSwgPiwgMCk7CisJCQlvYmplY3QtPm5fZXhjbHVzaXZlLS07CisJCX0KKworCQlBU1NFUlRDTVAob2JqZWN0LT5uX2luX3Byb2dyZXNzLCA+LCAwKTsKKwkJb2JqZWN0LT5uX2luX3Byb2dyZXNzLS07CisJCWlmIChvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPT0gMCkKKwkJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCisJCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+LCAwKTsKKwkJb2JqZWN0LT5uX29wcy0tOworCQlpZiAob2JqZWN0LT5uX29wcyA9PSAwKQorCQkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJfSB3aGlsZSAoY291bnQrKyA8IDIwKTsKKworCWlmICghbGlzdF9lbXB0eSgmY2FjaGUtPm9wX2djX2xpc3QpKQorCQlzY2hlZHVsZV93b3JrKCZjYWNoZS0+b3BfZ2MpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZ2V0IGEgcmVmIG9uIGFuIG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IGZzY2FjaGVfb3BfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBzbG93X3dvcmspOworCisJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZGlzY2FyZCBhIHJlZiBvbiBhbiBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vcF9wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHNsb3dfd29yayk7CisKKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworfQorCisvKgorICogZXhlY3V0ZSBhbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNsb3cgdGhyZWFkIHBvb2wgdG8gcHJvdmlkZSBwcm9jZXNzaW5nIGNvbnRleHQKKyAqIC0gdGhlIGNhbGxlciBob2xkcyBhIHJlZiB0byB0aGlzIG9iamVjdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBob2xkIG9uZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29wX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgc2xvd193b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJX2VudGVyKCJ7T0JKJXggT1AleCwlZH0iLAorCSAgICAgICBvcC0+b2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSk7CisKKwlBU1NFUlQob3AtPnByb2Nlc3NvciAhPSBOVUxMKTsKKwlzdGFydCA9IGppZmZpZXM7CisJb3AtPnByb2Nlc3NvcihvcCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb3BzX2hpc3RvZ3JhbSwgc3RhcnQpOworCisJX2xlYXZlKCIiKTsKK30KKworY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vcF9zbG93X3dvcmtfb3BzID0geworCS5nZXRfcmVmCT0gZnNjYWNoZV9vcF9nZXRfcmVmLAorCS5wdXRfcmVmCT0gZnNjYWNoZV9vcF9wdXRfcmVmLAorCS5leGVjdXRlCT0gZnNjYWNoZV9vcF9leGVjdXRlLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvcGFnZS5jIGIvZnMvZnNjYWNoZS9wYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OGUwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvcGFnZS5jCkBAIC0wLDAgKzEsODE2IEBACisvKiBDYWNoZSBwYWdlIG1hbmFnZW1lbnQgYW5kIGRhdGEgSS9PIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIFBBR0UKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGNoZWNrIHRvIHNlZSBpZiBhIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUKKyAqLworYm9vbCBfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdm9pZCAqdmFsOworCisJcmN1X3JlYWRfbG9jaygpOworCXZhbCA9IHJhZGl4X3RyZWVfbG9va3VwKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHZhbCAhPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZSk7CisKKy8qCisgKiB3YWl0IGZvciBhIHBhZ2UgdG8gZmluaXNoIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlCisgKi8KK3ZvaWQgX19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gYml0X3dhaXRxdWV1ZSgmY29va2llLT5mbGFncywgMCk7CisKKwl3YWl0X2V2ZW50KCp3cSwgIV9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSkpOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKTsKKworLyoKKyAqIG5vdGUgdGhhdCBhIHBhZ2UgaGFzIGZpbmlzaGVkIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZW5kX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBwYWdlICp4cGFnZTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKwl4cGFnZSA9IHJhZGl4X3RyZWVfZGVsZXRlKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCUFTU0VSVCh4cGFnZSAhPSBOVUxMKTsKKworCXdha2VfdXBfYml0KCZjb29raWUtPmZsYWdzLCAwKTsKK30KKworLyoKKyAqIGFjdHVhbGx5IGFwcGx5IHRoZSBjaGFuZ2VkIGF0dHJpYnV0ZXMgdG8gYSBjYWNoZSBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9hdHRyX2NoYW5nZWRfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9IG9wLT5vYmplY3Q7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4fSIsIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHMpOworCisJaWYgKGZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpICYmCisJICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+YXR0cl9jaGFuZ2VkKG9iamVjdCkgPCAwKQorCQlmc2NhY2hlX2Fib3J0X29iamVjdChvYmplY3QpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9uIGFuIG9iamVjdCBoYXZlIGNoYW5nZWQKKyAqLworaW50IF9fZnNjYWNoZV9hdHRyX2NoYW5nZWQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKworCV9lbnRlcigiJXAiLCBjb29raWUpOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWQpOworCisJb3AgPSBremFsbG9jKHNpemVvZigqb3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9ub21lbSk7CisJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0KG9wLCBOVUxMKTsKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3cob3AsIGZzY2FjaGVfYXR0cl9jaGFuZ2VkX29wKTsKKwlvcC0+ZmxhZ3MgPSBGU0NBQ0hFX09QX1NMT1cgfCAoMSA8PCBGU0NBQ0hFX09QX0VYQ0xVU0lWRSk7CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJaWYgKGZzY2FjaGVfc3VibWl0X2V4Y2x1c2l2ZV9vcChvYmplY3QsIG9wKSA8IDApCisJCWdvdG8gbm9idWZzOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vayk7CisJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKKworbm9idWZzOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9idWZzKTsKKwlfbGVhdmUoIiA9ICVkIiwgLUVOT0JVRlMpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX2F0dHJfY2hhbmdlZCk7CisKKy8qCisgKiBoYW5kbGUgc2Vjb25kYXJ5IGV4ZWN1dGlvbiBnaXZlbiB0byBhIHJldHJpZXZhbCBvcCBvbiBiZWhhbGYgb2YgdGhlCisgKiBjYWNoZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JldHJpZXZhbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCwgb3AuZmFzdF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJX2VudGVyKCJ7T1AleH0iLCBvcC0+b3AuZGVidWdfaWQpOworCisJc3RhcnQgPSBqaWZmaWVzOworCW9wLT5vcC5wcm9jZXNzb3IoJm9wLT5vcCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb3BzX2hpc3RvZ3JhbSwgc3RhcnQpOworCWZzY2FjaGVfcHV0X29wZXJhdGlvbigmb3AtPm9wKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSByZXRyaWV2YWwgb3AgcmVmZXJlbmNlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVsZWFzZV9yZXRyaWV2YWxfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpfb3ApCit7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCA9CisJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCwgb3ApOworCisJX2VudGVyKCJ7T1AleH0iLCBvcC0+b3AuZGVidWdfaWQpOworCisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfcmV0cmlldmFsX2hpc3RvZ3JhbSwgb3AtPnN0YXJ0X3RpbWUpOworCWlmIChvcC0+Y29udGV4dCkKKwkJZnNjYWNoZV9wdXRfY29udGV4dChvcC0+b3Aub2JqZWN0LT5jb29raWUsIG9wLT5jb250ZXh0KTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBhIHJldHJpZXZhbCBvcAorICovCitzdGF0aWMgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpmc2NhY2hlX2FsbG9jX3JldHJpZXZhbCgKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwlmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCisJLyogYWxsb2NhdGUgYSByZXRyaWV2YWwgb3BlcmF0aW9uIGFuZCBhdHRlbXB0IHRvIHN1Ym1pdCBpdCAqLworCW9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX05PSU8pOworCWlmICghb3ApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV9yZWxlYXNlX3JldHJpZXZhbF9vcCk7CisJb3AtPm9wLmZsYWdzCT0gRlNDQUNIRV9PUF9NWVRIUkVBRCB8ICgxIDw8IEZTQ0FDSEVfT1BfV0FJVElORyk7CisJb3AtPm1hcHBpbmcJPSBtYXBwaW5nOworCW9wLT5lbmRfaW9fZnVuYwk9IGVuZF9pb19mdW5jOworCW9wLT5jb250ZXh0CT0gY29udGV4dDsKKwlvcC0+c3RhcnRfdGltZQk9IGppZmZpZXM7CisJSU5JVF9XT1JLKCZvcC0+b3AuZmFzdF93b3JrLCBmc2NhY2hlX3JldHJpZXZhbF93b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmb3AtPnRvX2RvKTsKKwlyZXR1cm4gb3A7Cit9CisKKy8qCisgKiB3YWl0IGZvciBhIGRlZmVycmVkIGxvb2t1cCB0byBjb21wbGV0ZQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCXVuc2lnbmVkIGxvbmcgamlmOworCisJX2VudGVyKCIiKTsKKworCWlmICghdGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwgJmNvb2tpZS0+ZmxhZ3MpKSB7CisJCV9sZWF2ZSgiID0gMCBbaW1tXSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX3dhaXQpOworCisJamlmID0gamlmZmllczsKKwlpZiAod2FpdF9vbl9iaXQoJmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsCisJCQlmc2NhY2hlX3dhaXRfYml0X2ludGVycnVwdGlibGUsCisJCQlUQVNLX0lOVEVSUlVQVElCTEUpICE9IDApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyKTsKKwkJX2xlYXZlKCIgPSAtRVJFU1RBUlRTWVMiKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlBU1NFUlQoIXRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsICZjb29raWUtPmZsYWdzKSk7CisKKwlzbXBfcm1iKCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfcmV0cmlldmFsX2RlbGF5X2hpc3RvZ3JhbSwgamlmKTsKKwlfbGVhdmUoIiA9IDAgW2RseV0iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlYWQgYSBwYWdlIGZyb20gdGhlIGNhY2hlIG9yIGFsbG9jYXRlIGEgYmxvY2sgaW4gd2hpY2ggdG8gc3RvcmUgaXQKKyAqIC0gd2UgcmV0dXJuOgorICogICAtRU5PTUVNCS0gb3V0IG9mIG1lbW9yeSwgbm90aGluZyBkb25lCisgKiAgIC1FUkVTVEFSVFNZUyAtIGludGVycnVwdGVkCisgKiAgIC1FTk9CVUZTCS0gbm8gYmFja2luZyBvYmplY3QgYXZhaWxhYmxlIGluIHdoaWNoIHRvIGNhY2hlIHRoZSBibG9jaworICogICAtRU5PREFUQQktIG5vIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBiYWNraW5nIG9iamVjdCBmb3IgdGhpcyBibG9jaworICogICAwCQktIGRpc3BhdGNoZWQgYSByZWFkIC0gaXQnbGwgY2FsbCBlbmRfaW9fZnVuYygpIHdoZW4gZmluaXNoZWQKKyAqLworaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSBmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkJIHZvaWQgKmNvbnRleHQsCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCVwLCwsIiwgY29va2llLCBwYWdlKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHMpOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWlmIChmc2NhY2hlX3dhaXRfZm9yX2RlZmVycmVkX2xvb2t1cChjb29raWUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCW9wID0gZnNjYWNoZV9hbGxvY19yZXRyaWV2YWwocGFnZS0+bWFwcGluZywgZW5kX2lvX2Z1bmMsIGNvbnRleHQpOworCWlmICghb3ApIHsKKwkJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJQVNTRVJUQ01QKG9iamVjdC0+c3RhdGUsID4sIEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVApOworCisJaWYgKGZzY2FjaGVfc3VibWl0X29wKG9iamVjdCwgJm9wLT5vcCkgPCAwKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3BzKTsKKworCS8qIHBpbiB0aGUgbmV0ZnMgcmVhZCBjb250ZXh0IGluIGNhc2Ugd2UgbmVlZCB0byBkbyB0aGUgYWN0dWFsIG5ldGZzCisJICogcmVhZCBiZWNhdXNlIHdlJ3ZlIGVuY291bnRlcmVkIGEgY2FjaGUgcmVhZCBmYWlsdXJlICovCisJZnNjYWNoZV9nZXRfY29udGV4dChvYmplY3QtPmNvb2tpZSwgb3AtPmNvbnRleHQpOworCisJLyogd2Ugd2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBiZWNvbWUgYWN0aXZlLCBhbmQgdGhlbiBwcm9jZXNzIGl0CisJICogKmhlcmUqLCBpbiB0aGlzIHRocmVhZCwgYW5kIG5vdCBpbiB0aGUgdGhyZWFkIHBvb2wgKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPm9wLmZsYWdzKSkgeworCQlfZGVidWcoIj4+PiBXVCIpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHMpOworCQl3YWl0X29uX2JpdCgmb3AtPm9wLmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlfZGVidWcoIjw8PCBHTyIpOworCX0KKworCS8qIGFzayB0aGUgY2FjaGUgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24gKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKSB7CisJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5yZWFkX29yX2FsbG9jX3BhZ2Uob3AsIHBhZ2UsIGdmcCk7CisJfQorCisJaWYgKHJldCA9PSAtRU5PTUVNKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vbWVtKTsKKwllbHNlIGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHIpOworCWVsc2UgaWYgKHJldCA9PSAtRU5PREFUQSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGEpOworCWVsc2UgaWYgKHJldCA8IDApCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzKTsKKwllbHNlCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfb2spOworCisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub2J1ZnNfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKK25vYnVmczoKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyk7CisJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZSk7CisKKy8qCisgKiByZWFkIGEgbGlzdCBvZiBwYWdlIGZyb20gdGhlIGNhY2hlIG9yIGFsbG9jYXRlIGEgYmxvY2sgaW4gd2hpY2ggdG8gc3RvcmUKKyAqIHRoZW0KKyAqIC0gd2UgcmV0dXJuOgorICogICAtRU5PTUVNCS0gb3V0IG9mIG1lbW9yeSwgc29tZSBwYWdlcyBtYXkgYmUgYmVpbmcgcmVhZAorICogICAtRVJFU1RBUlRTWVMgLSBpbnRlcnJ1cHRlZCwgc29tZSBwYWdlcyBtYXkgYmUgYmVpbmcgcmVhZAorICogICAtRU5PQlVGUwktIG5vIGJhY2tpbmcgb2JqZWN0IG9yIHNwYWNlIGF2YWlsYWJsZSBpbiB3aGljaCB0byBjYWNoZSBhbnkKKyAqICAgICAgICAgICAgICAgIHBhZ2VzIG5vdCBiZWluZyByZWFkCisgKiAgIC1FTk9EQVRBCS0gbm8gZGF0YSBhdmFpbGFibGUgaW4gdGhlIGJhY2tpbmcgb2JqZWN0IGZvciBzb21lIG9yIGFsbCBvZgorICogICAgICAgICAgICAgICAgdGhlIHBhZ2VzCisgKiAgIDAJCS0gZGlzcGF0Y2hlZCBhIHJlYWQgb24gYWxsIHBhZ2VzCisgKgorICogZW5kX2lvX2Z1bmMoKSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBwYWdlIHJlYWQgZnJvbSB0aGUgY2FjaGUgYXMgaXQgaXMKKyAqIGZpbmlzaGVzIGJlaW5nIHJlYWQKKyAqCisgKiBhbnkgcGFnZXMgZm9yIHdoaWNoIGEgcmVhZCBpcyBkaXNwYXRjaGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHBhZ2VzIGFuZAorICogbnJfcGFnZXMKKyAqLworaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgIGZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQkgIHZvaWQgKmNvbnRleHQsCisJCQkJICBnZnBfdCBnZnApCit7CisJZnNjYWNoZV9wYWdlc19yZXRyaWV2YWxfZnVuY190IGZ1bmM7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCwsJWQsLCwiLCBjb29raWUsICpucl9wYWdlcyk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmczsKKworCUFTU0VSVENNUChjb29raWUtPmRlZi0+dHlwZSwgIT0sIEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpOworCUFTU0VSVENNUCgqbnJfcGFnZXMsID4sIDApOworCUFTU0VSVCghbGlzdF9lbXB0eShwYWdlcykpOworCisJaWYgKGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKGNvb2tpZSkgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJb3AgPSBmc2NhY2hlX2FsbG9jX3JldHJpZXZhbChtYXBwaW5nLCBlbmRfaW9fZnVuYywgY29udGV4dCk7CisJaWYgKCFvcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWlmIChmc2NhY2hlX3N1Ym1pdF9vcChvYmplY3QsICZvcC0+b3ApIDwgMCkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wcyk7CisKKwkvKiBwaW4gdGhlIG5ldGZzIHJlYWQgY29udGV4dCBpbiBjYXNlIHdlIG5lZWQgdG8gZG8gdGhlIGFjdHVhbCBuZXRmcworCSAqIHJlYWQgYmVjYXVzZSB3ZSd2ZSBlbmNvdW50ZXJlZCBhIGNhY2hlIHJlYWQgZmFpbHVyZSAqLworCWZzY2FjaGVfZ2V0X2NvbnRleHQob2JqZWN0LT5jb29raWUsIG9wLT5jb250ZXh0KTsKKworCS8qIHdlIHdhaXQgZm9yIHRoZSBvcGVyYXRpb24gdG8gYmVjb21lIGFjdGl2ZSwgYW5kIHRoZW4gcHJvY2VzcyBpdAorCSAqICpoZXJlKiwgaW4gdGhpcyB0aHJlYWQsIGFuZCBub3QgaW4gdGhlIHRocmVhZCBwb29sICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfV0FJVElORywgJm9wLT5vcC5mbGFncykpIHsKKwkJX2RlYnVnKCI+Pj4gV1QiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKTsKKwkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJX2RlYnVnKCI8PDwgR08iKTsKKwl9CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKKwkJZnVuYyA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZXM7CisJZWxzZQorCQlmdW5jID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5yZWFkX29yX2FsbG9jX3BhZ2VzOworCXJldCA9IGZ1bmMob3AsIHBhZ2VzLCBucl9wYWdlcywgZ2ZwKTsKKworCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CisJZWxzZSBpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyKTsKKwllbHNlIGlmIChyZXQgPT0gLUVOT0RBVEEpCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9kYXRhKTsKKwllbHNlIGlmIChyZXQgPCAwKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyk7CisJZWxzZQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29rKTsKKworCWZzY2FjaGVfcHV0X3JldHJpZXZhbChvcCk7CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9idWZzX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlrZnJlZShvcCk7Citub2J1ZnM6CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpOworCV9sZWF2ZSgiID0gLUVOT0JVRlMiKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKTsKKworLyoKKyAqIGFsbG9jYXRlIGEgYmxvY2sgaW4gdGhlIGNhY2hlIG9uIHdoaWNoIHRvIHN0b3JlIGEgcGFnZQorICogLSB3ZSByZXR1cm46CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBub3RoaW5nIGRvbmUKKyAqICAgLUVSRVNUQVJUU1lTIC0gaW50ZXJydXB0ZWQKKyAqICAgLUVOT0JVRlMJLSBubyBiYWNraW5nIG9iamVjdCBhdmFpbGFibGUgaW4gd2hpY2ggdG8gY2FjaGUgdGhlIGJsb2NrCisgKiAgIDAJCS0gYmxvY2sgYWxsb2NhdGVkCisgKi8KK2ludCBfX2ZzY2FjaGVfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSBnZnBfdCBnZnApCit7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCwlcCwsLCIsIGNvb2tpZSwgcGFnZSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY3MpOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWlmIChmc2NhY2hlX3dhaXRfZm9yX2RlZmVycmVkX2xvb2t1cChjb29raWUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCW9wID0gZnNjYWNoZV9hbGxvY19yZXRyaWV2YWwocGFnZS0+bWFwcGluZywgTlVMTCwgTlVMTCk7CisJaWYgKCFvcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWlmIChmc2NhY2hlX3N1Ym1pdF9vcChvYmplY3QsICZvcC0+b3ApIDwgMCkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2Nfb3BzKTsKKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7CisJCV9kZWJ1ZygiPj4+IFdUIik7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzKTsKKwkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJX2RlYnVnKCI8PDwgR08iKTsKKwl9CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCisJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5hbGxvY2F0ZV9wYWdlKG9wLCBwYWdlLCBnZnApOworCisJaWYgKHJldCA8IDApCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jc19ub2J1ZnMpOworCWVsc2UKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX29rKTsKKworCWZzY2FjaGVfcHV0X3JldHJpZXZhbChvcCk7CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9idWZzX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlrZnJlZShvcCk7Citub2J1ZnM6CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcyk7CisJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX2FsbG9jX3BhZ2UpOworCisvKgorICogcmVsZWFzZSBhIHdyaXRlIG9wIHJlZmVyZW5jZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JlbGVhc2Vfd3JpdGVfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpfb3ApCit7CisJX2VudGVyKCJ7T1AleH0iLCBfb3AtPmRlYnVnX2lkKTsKK30KKworLyoKKyAqIHBlcmZvcm0gdGhlIGJhY2tncm91bmQgc3RvcmFnZSBvZiBhIHBhZ2UgaW50byB0aGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV93cml0ZV9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCA9CisJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UsIG9wKTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9IG9wLT5vcC5vYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBuOworCXZvaWQgKnJlc3VsdHNbMV07CisJaW50IHJldDsKKworCV9lbnRlcigie09QJXgsJWR9Iiwgb3AtPm9wLmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPm9wLnVzYWdlKSk7CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKCFmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgeworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJCV9sZWF2ZSgiIik7CisJCXJldHVybjsKKwl9CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV9jYWxscyk7CisKKwkvKiBmaW5kIGEgcGFnZSB0byBzdG9yZSAqLworCXBhZ2UgPSBOVUxMOworCW4gPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZygmY29va2llLT5zdG9yZXMsIHJlc3VsdHMsIDAsIDEsCisJCQkJICAgICAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKKwlpZiAobiAhPSAxKQorCQlnb3RvIHN1cGVyc2VkZWQ7CisJcGFnZSA9IHJlc3VsdHNbMF07CisJX2RlYnVnKCJnYW5nICVkIFslbHhdIiwgbiwgcGFnZS0+aW5kZXgpOworCWlmIChwYWdlLT5pbmRleCA+IG9wLT5zdG9yZV9saW1pdCkKKwkJZ290byBzdXBlcnNlZGVkOworCisJcmFkaXhfdHJlZV90YWdfY2xlYXIoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCSAgICAgRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcpOworCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAocGFnZSkgeworCQlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPndyaXRlX3BhZ2Uob3AsIHBhZ2UpOworCQlmc2NhY2hlX2VuZF9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKHJldCA8IDApCisJCQlmc2NhY2hlX2Fib3J0X29iamVjdChvYmplY3QpOworCQllbHNlCisJCQlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKCZvcC0+b3ApOworCX0KKworCV9sZWF2ZSgiIik7CisJcmV0dXJuOworCitzdXBlcnNlZGVkOgorCS8qIHRoaXMgd3JpdGVyIGlzIGdvaW5nIGF3YXkgYW5kIHRoZXJlIGFyZW4ndCBhbnkgbW9yZSB0aGluZ3MgdG8KKwkgKiB3cml0ZSAqLworCV9kZWJ1ZygiY2Vhc2UiKTsKKwljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgcGFnZSBiZSBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiAtIHJldHVybnM6CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBub3RoaW5nIGRvbmUKKyAqICAgLUVOT0JVRlMJLSBubyBiYWNraW5nIG9iamVjdCBhdmFpbGFibGUgaW4gd2hpY2ggdG8gY2FjaGUgdGhlIHBhZ2UKKyAqICAgMAkJLSBkaXNwYXRjaGVkIGEgd3JpdGUgLSBpdCdsbCBjYWxsIGVuZF9pb19mdW5jKCkgd2hlbiBmaW5pc2hlZAorICoKKyAqIGlmIHRoZSBjb29raWUgc3RpbGwgaGFzIGEgYmFja2luZyBvYmplY3QgYXQgdGhpcyBwb2ludCwgdGhhdCBvYmplY3QgY2FuIGJlCisgKiBpbiBvbmUgb2YgYSBmZXcgc3RhdGVzIHdpdGggcmVzcGVjdCB0byBzdG9yYWdlIHByb2Nlc3Npbmc6CisgKgorICogICgxKSBuZWdhdGl2ZSBsb29rdXAsIG9iamVjdCBub3QgeWV0IGNyZWF0ZWQgKEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HIGlzCisgKiAgICAgIHNldCkKKyAqCisgKgkoYSkgbm8gd3JpdGVzIHlldCAoc2V0IEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfRklMTCBhbmQgcXVldWUgZGVmZXJyZWQKKyAqCSAgICBmaWxsIG9wKQorICoKKyAqCShiKSB3cml0ZXMgZGVmZXJyZWQgdGlsbCBwb3N0LWNyZWF0aW9uIChtYXJrIHBhZ2UgZm9yIHdyaXRpbmcgYW5kCisgKgkgICAgcmV0dXJuIGltbWVkaWF0ZWx5KQorICoKKyAqICAoMikgbmVnYXRpdmUgbG9va3VwLCBvYmplY3QgY3JlYXRlZCwgaW5pdGlhbCBmaWxsIGJlaW5nIG1hZGUgZnJvbSBuZXRmcworICogICAgICAoRlNDQUNIRV9DT09LSUVfSU5JVElBTF9GSUxMIGlzIHNldCkKKyAqCisgKgkoYSkgZmlsbCBwb2ludCBub3QgeWV0IHJlYWNoZWQgdGhpcyBwYWdlIChtYXJrIHBhZ2UgZm9yIHdyaXRpbmcgYW5kCisgKiAgICAgICAgICByZXR1cm4pCisgKgorICoJKGIpIGZpbGwgcG9pbnQgcGFzc2VkIHRoaXMgcGFnZSAocXVldWUgb3AgdG8gc3RvcmUgdGhpcyBwYWdlKQorICoKKyAqICAoMykgb2JqZWN0IGV4dGFudCAocXVldWUgb3AgdG8gc3RvcmUgdGhpcyBwYWdlKQorICoKKyAqIGFueSBvdGhlciBzdGF0ZSBpcyBpbnZhbGlkCisgKi8KK2ludCBfX2ZzY2FjaGVfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSBnZnBfdCBnZnApCit7CisJc3RydWN0IGZzY2FjaGVfc3RvcmFnZSAqb3A7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJaW50IHJldDsKKworCV9lbnRlcigiJXAsJXgsIiwgY29va2llLCAodTMyKSBwYWdlLT5mbGFncyk7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKwlBU1NFUlQoUGFnZUZzQ2FjaGUocGFnZSkpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzKTsKKworCW9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX05PSU8pOworCWlmICghb3ApCisJCWdvdG8gbm9tZW07CisKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0KCZvcC0+b3AsIGZzY2FjaGVfcmVsZWFzZV93cml0ZV9vcCk7CisJZnNjYWNoZV9vcGVyYXRpb25faW5pdF9zbG93KCZvcC0+b3AsIGZzY2FjaGVfd3JpdGVfb3ApOworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfU0xPVyB8ICgxIDw8IEZTQ0FDSEVfT1BfV0FJVElORyk7CisKKwlyZXQgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwICYgfl9fR0ZQX0hJR0hNRU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG5vbWVtX2ZyZWU7CisKKwlyZXQgPSAtRU5PQlVGUzsKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZvYmplY3QtPmNhY2hlLT5mbGFncykpCisJCWdvdG8gbm9idWZzOworCisJLyogYWRkIHRoZSBwYWdlIHRvIHRoZSBwZW5kaW5nLXN0b3JhZ2UgcmFkaXggdHJlZSBvbiB0aGUgYmFja2luZworCSAqIG9iamVjdCAqLworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKworCV9kZWJ1Zygic3RvcmUgbGltaXQgJWxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIG9iamVjdC0+c3RvcmVfbGltaXQpOworCisJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwgcGFnZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUVYSVNUKQorCQkJZ290byBhbHJlYWR5X3F1ZXVlZDsKKwkJX2RlYnVnKCJpbnNlcnQgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ290byBub2J1ZnNfdW5sb2NrX29iajsKKwl9CisKKwlyYWRpeF90cmVlX3RhZ19zZXQoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCSAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKKwlwYWdlX2NhY2hlX2dldChwYWdlKTsKKworCS8qIHdlIG9ubHkgd2FudCBvbmUgd3JpdGVyIGF0IGEgdGltZSwgYnV0IHdlIGRvIG5lZWQgdG8gcXVldWUgbmV3CisJICogd3JpdGVycyBhZnRlciBleGNsdXNpdmUgb3BzICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpKQorCQlnb3RvIGFscmVhZHlfcGVuZGluZzsKKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJb3AtPm9wLmRlYnVnX2lkCT0gYXRvbWljX2luY19yZXR1cm4oJmZzY2FjaGVfb3BfZGVidWdfaWQpOworCW9wLT5zdG9yZV9saW1pdCA9IG9iamVjdC0+c3RvcmVfbGltaXQ7CisKKwlpZiAoZnNjYWNoZV9zdWJtaXRfb3Aob2JqZWN0LCAmb3AtPm9wKSA8IDApCisJCWdvdG8gc3VibWl0X2ZhaWxlZDsKKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV9vcHMpOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19vayk7CisKKwkvKiB0aGUgc2xvdyB3b3JrIHF1ZXVlIG5vdyBjYXJyaWVzIGl0cyBvd24gcmVmIG9uIHRoZSBvYmplY3QgKi8KKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24oJm9wLT5vcCk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2FscmVhZHlfcXVldWVkOgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19hZ2Fpbik7CithbHJlYWR5X3BlbmRpbmc6CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZXNfb2spOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitzdWJtaXRfZmFpbGVkOgorCXJhZGl4X3RyZWVfZGVsZXRlKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXQgPSAtRU5PQlVGUzsKKwlnb3RvIG5vYnVmczsKKworbm9idWZzX3VubG9ja19vYmo6CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7Citub2J1ZnM6CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZXNfbm9idWZzKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworCitub21lbV9mcmVlOgorCWtmcmVlKG9wKTsKK25vbWVtOgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19vb20pOworCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfd3JpdGVfcGFnZSk7CisKKy8qCisgKiByZW1vdmUgYSBwYWdlIGZyb20gdGhlIGNhY2hlCisgKi8KK3ZvaWQgX19mc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisKKwlfZW50ZXIoIiwlcCIsIHBhZ2UpOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VuY2FjaGVzKTsKKworCS8qIGNhY2hlIHdpdGhkcmF3YWwgbWF5IGJlYXQgdXMgdG8gaXQgKi8KKwlpZiAoIVBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlnb3RvIGRvbmU7CisKKwkvKiBnZXQgdGhlIG9iamVjdCAqLworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCUNsZWFyUGFnZUZzQ2FjaGUocGFnZSk7CisJCWdvdG8gZG9uZV91bmxvY2s7CisJfQorCisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJLyogdGhlcmUgbWlnaHQgbm93IGJlIHN0dWZmIG9uIGRpc2sgd2UgY291bGQgcmVhZCAqLworCWNsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVCwgJmNvb2tpZS0+ZmxhZ3MpOworCisJLyogb25seSBpbnZva2UgdGhlIGNhY2hlIGJhY2tlbmQgaWYgd2UgbWFuYWdlZCB0byBtYXJrIHRoZSBwYWdlCisJICogdW5jYWNoZWQgaGVyZTsgdGhpcyBkZWFscyB3aXRoIHN5bmNocm9uaXNhdGlvbiB2cyB3aXRoZHJhd2FsICovCisJaWYgKFRlc3RDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpICYmCisJICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+dW5jYWNoZV9wYWdlKSB7CisJCS8qIHRoZSBjYWNoZSBiYWNrZW5kIHJlbGVhc2VzIHRoZSBjb29raWUgbG9jayAqLworCQlvYmplY3QtPmNhY2hlLT5vcHMtPnVuY2FjaGVfcGFnZShvYmplY3QsIHBhZ2UpOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKK2RvbmU6CisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3VuY2FjaGVfcGFnZSk7CisKKy8qKgorICogZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZCAtIE1hcmsgcGFnZXMgYXMgYmVpbmcgY2FjaGVkCisgKiBAb3A6IFRoZSByZXRyaWV2YWwgb3AgcGFnZXMgYXJlIGJlaW5nIG1hcmtlZCBmb3IKKyAqIEBwYWdldmVjOiBUaGUgcGFnZXMgdG8gYmUgbWFya2VkCisgKgorICogTWFyayBhIGJ1bmNoIG9mIG5ldGZzIHBhZ2VzIGFzIGJlaW5nIGNhY2hlZC4gIEFmdGVyIHRoaXMgaXMgY2FsbGVkLAorICogdGhlIG5ldGZzIG11c3QgY2FsbCBmc2NhY2hlX3VuY2FjaGVfcGFnZSgpIHRvIHJlbW92ZSB0aGUgbWFyay4KKyAqLwordm9pZCBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkgICAgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvcC0+b3Aub2JqZWN0LT5jb29raWU7CisJdW5zaWduZWQgbG9uZyBsb29wOworCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKKwlhdG9taWNfYWRkKHBhZ2V2ZWMtPm5yLCAmZnNjYWNoZV9uX21hcmtzKTsKKyNlbmRpZgorCisJZm9yIChsb29wID0gMDsgbG9vcCA8IHBhZ2V2ZWMtPm5yOyBsb29wKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdldmVjLT5wYWdlc1tsb29wXTsKKworCQlfZGVidWcoIi0gbWFyayAlcHslbHh9IiwgcGFnZSwgcGFnZS0+aW5kZXgpOworCQlpZiAoVGVzdFNldFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCQlzdGF0aWMgYm9vbCBvbmNlX29ubHk7CisJCQlpZiAoIW9uY2Vfb25seSkgeworCQkJCW9uY2Vfb25seSA9IHRydWU7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRlMtQ2FjaGU6IgorCQkJCSAgICAgICAiIENvb2tpZSB0eXBlICVzIG1hcmtlZCBwYWdlICVseCIKKwkJCQkgICAgICAgIiBtdWx0aXBsZSB0aW1lc1xuIiwKKwkJCQkgICAgICAgY29va2llLT5kZWYtPm5hbWUsIHBhZ2UtPmluZGV4KTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChjb29raWUtPmRlZi0+bWFya19wYWdlc19jYWNoZWQpCisJCWNvb2tpZS0+ZGVmLT5tYXJrX3BhZ2VzX2NhY2hlZChjb29raWUtPm5ldGZzX2RhdGEsCisJCQkJCSAgICAgICBvcC0+bWFwcGluZywgcGFnZXZlYyk7CisJcGFnZXZlY19yZWluaXQocGFnZXZlYyk7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9wcm9jLmMgYi9mcy9mc2NhY2hlL3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVhYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9wcm9jLmMKQEAgLTAsMCArMSw2OCBAQAorLyogRlMtQ2FjaGUgc3RhdGlzdGljcyB2aWV3aW5nIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgT1BFUkFUSU9OCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIC9wcm9jL2ZzL2ZzY2FjaGUvIGRpcmVjdG9yeQorICovCitpbnQgX19pbml0IGZzY2FjaGVfcHJvY19pbml0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWlmICghcHJvY19ta2RpcigiZnMvZnNjYWNoZSIsIE5VTEwpKQorCQlnb3RvIGVycm9yX2RpcjsKKworI2lmZGVmIENPTkZJR19GU0NBQ0hFX1NUQVRTCisJaWYgKCFwcm9jX2NyZWF0ZSgiZnMvZnNjYWNoZS9zdGF0cyIsIFNfSUZSRUcgfCAwNDQ0LCBOVUxMLAorCQkJICZmc2NhY2hlX3N0YXRzX2ZvcHMpKQorCQlnb3RvIGVycm9yX3N0YXRzOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KKwlpZiAoIXByb2NfY3JlYXRlKCJmcy9mc2NhY2hlL2hpc3RvZ3JhbSIsIFNfSUZSRUcgfCAwNDQ0LCBOVUxMLAorCQkJICZmc2NhY2hlX2hpc3RvZ3JhbV9mb3BzKSkKKwkJZ290byBlcnJvcl9oaXN0b2dyYW07CisjZW5kaWYKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNCitlcnJvcl9oaXN0b2dyYW06CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9TVEFUUworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlL3N0YXRzIiwgTlVMTCk7CitlcnJvcl9zdGF0czoKKyNlbmRpZgorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlIiwgTlVMTCk7CitlcnJvcl9kaXI6CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBjbGVhbiB1cCB0aGUgL3Byb2MvZnMvZnNjYWNoZS8gZGlyZWN0b3J5CisgKi8KK3ZvaWQgZnNjYWNoZV9wcm9jX2NsZWFudXAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KKwlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZnNjYWNoZS9oaXN0b2dyYW0iLCBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GU0NBQ0hFX1NUQVRTCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUvc3RhdHMiLCBOVUxMKTsKKyNlbmRpZgorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL3N0YXRzLmMgYi9mcy9mc2NhY2hlL3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkZWI5OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvc3RhdHMuYwpAQCAtMCwwICsxLDIxMiBAQAorLyogRlMtQ2FjaGUgc3RhdGlzdGljcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgVEhSRUFECisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIG9wZXJhdGlvbiBjb3VudGVycworICovCithdG9taWNfdCBmc2NhY2hlX25fb3BfcGVuZDsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9ydW47CithdG9taWNfdCBmc2NhY2hlX25fb3BfZW5xdWV1ZTsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9yZXF1ZXVlOworYXRvbWljX3QgZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2U7CithdG9taWNfdCBmc2NhY2hlX25fb3BfcmVsZWFzZTsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9nYzsKKworYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZDsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfb2s7CithdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmczsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9tZW07CithdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX2NhbGxzOworCithdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vazsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfd2FpdDsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wczsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcF93YWl0czsKKworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHM7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19vazsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX3dhaXQ7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGE7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnM7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyOworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW07CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsX29wczsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHM7CisKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZXM7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19hZ2FpbjsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vb207CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfb3BzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworCithdG9taWNfdCBmc2NhY2hlX25fbWFya3M7CithdG9taWNfdCBmc2NhY2hlX25fdW5jYWNoZXM7CisKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlczsKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19udWxsOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX25vX2NhY2hlOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmczsKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19vb207CisKK2F0b21pY190IGZzY2FjaGVfbl91cGRhdGVzOworYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbDsKK2F0b21pY190IGZzY2FjaGVfbl91cGRhdGVzX3J1bjsKKworYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlczsKK2F0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbDsKK2F0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydDsKKworYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9pbmRleDsKK2F0b21pY190IGZzY2FjaGVfbl9jb29raWVfZGF0YTsKK2F0b21pY190IGZzY2FjaGVfbl9jb29raWVfc3BlY2lhbDsKKworYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9hbGxvYzsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3Rfbm9fYWxsb2M7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHM7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmU7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2NyZWF0ZWQ7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2F2YWlsOworYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9kZWFkOworCithdG9taWNfdCBmc2NhY2hlX25fY2hlY2thdXhfbm9uZTsKK2F0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9va2F5OworYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZTsKK2F0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZTsKKworLyoKKyAqIGRpc3BsYXkgdGhlIGdlbmVyYWwgc3RhdGlzdGljcworICovCitzdGF0aWMgaW50IGZzY2FjaGVfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc2VxX3B1dHMobSwgIkZTLUNhY2hlIHN0YXRpc3RpY3NcbiIpOworCisJc2VxX3ByaW50ZihtLCAiQ29va2llczogaWR4PSV1IGRhdD0ldSBzcGM9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29va2llX2luZGV4KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb29raWVfZGF0YSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29va2llX3NwZWNpYWwpKTsKKworCXNlcV9wcmludGYobSwgIk9iamVjdHM6IGFsYz0ldSBuYWw9JXUgYXZsPSV1IGRlZD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfYWxsb2MpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9ub19hbGxvYyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2F2YWlsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfZGVhZCkpOworCXNlcV9wcmludGYobSwgIkNoa0F1eCA6IG5vbj0ldSBvaz0ldSB1cGQ9JXUgb2JzPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X25vbmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X29rYXkpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY2hlY2thdXhfb2Jzb2xldGUpKTsKKworCXNlcV9wcmludGYobSwgIlBhZ2VzICA6IG1yaz0ldSB1bmM9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fbWFya3MpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VuY2FjaGVzKSk7CisKKwlzZXFfcHJpbnRmKG0sICJBY3F1aXJlOiBuPSV1IG51bD0ldSBub2M9JXUgb2s9JXUgbmJmPSV1IgorCQkgICAiIG9vbT0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfbnVsbCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX29vbSkpOworCisJc2VxX3ByaW50ZihtLCAiTG9va3Vwczogbj0ldSBuZWc9JXUgcG9zPSV1IGNydD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3VwcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfY3JlYXRlZCkpOworCisJc2VxX3ByaW50ZihtLCAiVXBkYXRlczogbj0ldSBudWw9JXUgcnVuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VwZGF0ZXMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdXBkYXRlc19ydW4pKTsKKworCXNlcV9wcmludGYobSwgIlJlbGlucXM6IG49JXUgbnVsPSV1IHdjcj0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydCkpOworCisJc2VxX3ByaW50ZihtLCAiQXR0ckNoZzogbj0ldSBvaz0ldSBuYmY9JXUgb29tPSV1IHJ1bj0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWQpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vayksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vbWVtKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHMpKTsKKworCXNlcV9wcmludGYobSwgIkFsbG9jcyA6IG49JXUgb2s9JXUgd3Q9JXUgbmJmPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY3Nfd2FpdCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcykpOworCXNlcV9wcmludGYobSwgIkFsbG9jcyA6IG9wcz0ldSBvd3Q9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2Nfb3BzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY19vcF93YWl0cykpOworCisJc2VxX3ByaW50ZihtLCAiUmV0cnZsczogbj0ldSBvaz0ldSB3dD0ldSBub2Q9JXUgbmJmPSV1IgorCQkgICAiIGludD0ldSBvb209JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFscyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19vayksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc193YWl0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vZGF0YSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfaW50ciksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSkpOworCXNlcV9wcmludGYobSwgIlJldHJ2bHM6IG9wcz0ldSBvd3Q9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTdG9yZXMgOiBuPSV1IG9rPSV1IGFnbj0ldSBuYmY9JXUgb29tPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZXNfYWdhaW4pLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19vb20pKTsKKwlzZXFfcHJpbnRmKG0sICJTdG9yZXMgOiBvcHM9JXUgcnVuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX29wcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVfY2FsbHMpKTsKKworCXNlcV9wcmludGYobSwgIk9wcyAgICA6IHBlbmQ9JXUgcnVuPSV1IGVucT0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9wZW5kKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9ydW4pLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2VucXVldWUpKTsKKwlzZXFfcHJpbnRmKG0sICJPcHMgICAgOiBkZnI9JXUgcmVsPSV1IGdjPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX3JlbGVhc2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2djKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvcGVuICIvcHJvYy9mcy9mc2NhY2hlL3N0YXRzIiBhbGxvd2luZyBwcm92aXNpb24gb2YgYSBzdGF0aXN0aWNhbCBzdW1tYXJ5CisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBmc2NhY2hlX3N0YXRzX3Nob3csIE5VTEwpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfc3RhdHNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZnNjYWNoZV9zdGF0c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBkOWZkYjdjLi40ZTM0MGZlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMTIzNCw4ICsxMjM0LDkgQEAKICAqIC0gc3luYygyKQogICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUgogICovCi1zdGF0aWMgaW50IGZ1c2VfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgZnVzZV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCS8qCiAJICogRG9uJ3QgdXNlIHBhZ2UtPm1hcHBpbmcgYXMgaXQgbWF5IGJlY29tZSBOVUxMIGZyb20gYQogCSAqIGNvbmN1cnJlbnQgdHJ1bmNhdGUuCkBAIC0xNDY1LDcgKzE0NjYsNyBAQAogCWNhc2UgU0VFS19FTkQ6CiAJCXJldHZhbCA9IGZ1c2VfdXBkYXRlX2F0dHJpYnV0ZXMoaW5vZGUsIE5VTEwsIGZpbGUsIE5VTEwpOwogCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKKwkJCWdvdG8gZXhpdDsKIAkJb2Zmc2V0ICs9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBTRUVLX0NVUjoKQEAgLTE0NzksNiArMTQ4MCw3IEBACiAJCX0KIAkJcmV0dmFsID0gb2Zmc2V0OwogCX0KK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2dlbmVyaWNfYWNsLmMgYi9mcy9nZW5lcmljX2FjbC5jCmluZGV4IDk5NWQ2M2IuLmUwYjUzYWEgMTAwNjQ0Ci0tLSBhL2ZzL2dlbmVyaWNfYWNsLmMKKysrIGIvZnMvZ2VuZXJpY19hY2wuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWludCBlcnJvcjsKIAotCWlub2RlLT5pX21vZGUgPSBtb2RlICYgfmN1cnJlbnQtPmZzLT51bWFzazsKKwlpbm9kZS0+aV9tb2RlID0gbW9kZSAmIH5jdXJyZW50X3VtYXNrKCk7CiAJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlhY2wgPSBvcHMtPmdldGFjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwogCWlmIChhY2wpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IDQzNzY0ZjQuLmZhODgxYmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKCFhY2wpIHsKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJCWlmIChtb2RlICE9IGlwLT5pX2lub2RlLmlfbW9kZSkKIAkJCWVycm9yID0gbXVuZ2VfbW9kZShpcCwgbW9kZSk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZpbGUuYyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwppbmRleCAzYjllOGRlLi43MGI5Yjg1IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19maWxlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCkBAIC0zMzcsOCArMzM3LDkgQEAKICAqIGJsb2NrcyBhbGxvY2F0ZWQgb24gZGlzayB0byBiYWNrIHRoYXQgcGFnZS4KICAqLwogCi1zdGF0aWMgaW50IGdmczJfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgZ2ZzMl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwpAQCAtNDEyLDYgKzQxMyw4IEBACiAJZ2ZzMl9nbG9ja19kcSgmZ2gpOwogb3V0OgogCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOworCWlmIChyZXQpCisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IGM4YjVhY2YuLmEzNmJiNzQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC04Miw2ICs4Miw3IEBACiBzdGF0aWMgaW50IGhmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlidWYtPmZfdHlwZSA9IEhGU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC05MCw2ICs5MSw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZTsKIAlidWYtPmZfZmlsZXMgPSBIRlNfU0Ioc2IpLT5mc19hYmxvY2tzOwogCWJ1Zi0+Zl9mZnJlZSA9IEhGU19TQihzYiktPmZyZWVfYWJsb2NrczsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IEhGU19OQU1FTEVOOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL29wdGlvbnMuYyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCmluZGV4IGJhYjdmOGQuLjNmY2JiMGUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCisrKyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCkBAIC00OCw3ICs0OCw3IEBACiAKIAlvcHRzLT5jcmVhdG9yID0gSEZTUExVU19ERUZfQ1JfVFlQRTsKIAlvcHRzLT50eXBlID0gSEZTUExVU19ERUZfQ1JfVFlQRTsKLQlvcHRzLT51bWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwlvcHRzLT51bWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlvcHRzLT51aWQgPSBjdXJyZW50X3VpZCgpOwogCW9wdHMtPmdpZCA9IGN1cnJlbnRfZ2lkKCk7CiAJb3B0cy0+cGFydCA9IC0xOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IGViNzQ1MzEuLmYyYTY0MDIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTIyMyw2ICsyMjMsNyBAQAogc3RhdGljIGludCBoZnNwbHVzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlID0gSEZTUExVU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC0yMzEsNiArMjMyLDggQEAKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IDB4RkZGRkZGRkY7CiAJYnVmLT5mX2ZmcmVlID0gMHhGRkZGRkZGRiAtIEhGU1BMVVNfU0Ioc2IpLm5leHRfY25pZDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IEhGU1BMVVNfTUFYX1NUUkxFTjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IDBkMDQ5YjguLmZlY2Y0MDIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTEzNiw2ICsxMzYsNyBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRlbnRyeS0+ZF9zYjsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLT5zX2JkZXYtPmJkX2Rldik7CiAJbG9ja19rZXJuZWwoKTsKIAogCS8qaWYgKHNiaS0+c2Jfbl9mcmVlID09IC0xKSB7Ki8KQEAgLTE0OSw2ICsxNTAsOCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSBzYmktPnNiX25fZnJlZTsKIAlidWYtPmZfZmlsZXMgPSBzYmktPnNiX2RpcmJhbmRfc2l6ZSAvIDQ7CiAJYnVmLT5mX2ZmcmVlID0gc2JpLT5zYl9uX2ZyZWVfZG5vZGVzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gMjU0OwogCiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtNDc3LDcgKzQ4MCw3IEBACiAKIAl1aWQgPSBjdXJyZW50X3VpZCgpOwogCWdpZCA9IGN1cnJlbnRfZ2lkKCk7Ci0JdW1hc2sgPSBjdXJyZW50LT5mcy0+dW1hc2s7CisJdW1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAJbG93ZXJjYXNlID0gMDsKIAljb252ID0gQ09OVl9CSU5BUlk7CiAJZWFzID0gMjsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzLmMgYi9mcy9ocHBmcy9ocHBmcy5jCmluZGV4IGIyNzhmN2YuLmE1MDg5YTYgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzLmMKKysrIGIvZnMvaHBwZnMvaHBwZnMuYwpAQCAtMjgwLDcgKzI4MCwxMiBAQAogCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQljb3VudCA9IGhwcGZzX3JlYWRfZmlsZShocHBmcy0+aG9zdF9mZCwgYnVmLCBjb3VudCk7CisJCWVyciA9IGhwcGZzX3JlYWRfZmlsZShocHBmcy0+aG9zdF9mZCwgYnVmLCBjb3VudCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX3JlYWQ6IHJlYWQgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJY291bnQgPSBlcnI7CiAJCWlmIChjb3VudCA+IDApCiAJCQkqcHBvcyArPSBjb3VudDsKIAl9CmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDliODAwZDkuLjIzYTNjNzYgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC05NDMsMTQgKzk0MywxMyBAQAogCiBzdGF0aWMgaW50IGNhbl9kb19odWdldGxiX3NobSh2b2lkKQogewotCXJldHVybiBsaWtlbHkoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8Ci0JCQlpbl9ncm91cF9wKHN5c2N0bF9odWdldGxiX3NobV9ncm91cCkgfHwKLQkJCWNhbl9kb19tbG9jaygpKTsKKwlyZXR1cm4gY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8IGluX2dyb3VwX3Aoc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwKTsKIH0KIAogc3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgaW50IGFjY3RmbGFnKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IHVubG9ja19zaG0gPSAwOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcm9vdDsKQEAgLTk2MCwxMSArOTU5LDE0IEBACiAJaWYgKCFodWdldGxiZnNfdmZzbW91bnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCi0JaWYgKCFjYW5fZG9faHVnZXRsYl9zaG0oKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQotCWlmICghdXNlcl9zaG1fbG9jayhzaXplLCB1c2VyKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKCFjYW5fZG9faHVnZXRsYl9zaG0oKSkgeworCQlpZiAodXNlcl9zaG1fbG9jayhzaXplLCB1c2VyKSkgeworCQkJdW5sb2NrX3NobSA9IDE7CisJCQlXQVJOX09OQ0UoMSwKKwkJCSAgIlVzaW5nIG1sb2NrIHVsaW1pdHMgZm9yIFNITV9IVUdFVExCIGRlcHJlY2F0ZWRcbiIpOworCQl9IGVsc2UKKwkJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CisJfQogCiAJcm9vdCA9IGh1Z2V0bGJmc192ZnNtb3VudC0+bW50X3Jvb3Q7CiAJcXVpY2tfc3RyaW5nLm5hbWUgPSBuYW1lOwpAQCAtMTAwNCw3ICsxMDA2LDggQEAKIG91dF9kZW50cnk6CiAJZHB1dChkZW50cnkpOwogb3V0X3NobV91bmxvY2s6Ci0JdXNlcl9zaG1fdW5sb2NrKHNpemUsIHVzZXIpOworCWlmICh1bmxvY2tfc2htKQorCQl1c2VyX3NobV91bmxvY2soc2l6ZSwgdXNlcik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCA1M2FmODg1Li5iNGRhYzRmIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTExLDYgKzExLDcgQEAKIAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IGxpbnV4X2JpbnBybTsKK3N0cnVjdCBwYXRoOwogCiAvKgogICogYmxvY2tfZGV2LmMKQEAgLTQzLDcgKzQ0LDcgQEAKIC8qCiAgKiBleGVjLmMKICAqLwotZXh0ZXJuIHZvaWQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKK2V4dGVybiBpbnQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKIAogLyoKICAqIG5hbWVzcGFjZS5jCkBAIC02MCwzICs2MSw4IEBACiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpjb3B5X3RyZWUoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQgX19pbml0IG1udF9pbml0KHZvaWQpOworCisvKgorICogZnNfc3RydWN0LmMKKyAqLworZXh0ZXJuIHZvaWQgY2hyb290X2ZzX3JlZnMoc3RydWN0IHBhdGggKiwgc3RydWN0IHBhdGggKik7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCAxM2QyZWRkLi5iNGNiZTk2IDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTkyMyw2ICs5MjMsNyBAQAogc3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBJU09GU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC05MzIsNiArOTMzLDggQEAKIAlidWYtPmZfYmF2YWlsID0gMDsKIAlidWYtPmZfZmlsZXMgPSBJU09GU19TQihzYiktPnNfbmlub2RlczsKIAlidWYtPmZfZmZyZWUgPSAwOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gTkFNRV9NQVg7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQvY29tbWl0LmMgYi9mcy9qYmQvY29tbWl0LmMKaW5kZXggM2ZiZmZiMS4uZjgwNzdiOSAxMDA2NDQKLS0tIGEvZnMvamJkL2NvbW1pdC5jCisrKyBiL2ZzL2piZC9jb21taXQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogLyoKICAqIERlZmF1bHQgSU8gZW5kIGhhbmRsZXIgZm9yIHRlbXBvcmFyeSBCSl9JTyBidWZmZXJfaGVhZHMuCkBAIC0xNzEsMTQgKzE3MiwxNSBAQAogCXJldHVybiAocmV0ID09IC1FSU8pOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqKndidWYsIGludCBidWZzKQorc3RhdGljIHZvaWQgam91cm5hbF9kb19zdWJtaXRfZGF0YShzdHJ1Y3QgYnVmZmVyX2hlYWQgKip3YnVmLCBpbnQgYnVmcywKKwkJCQkgICBpbnQgd3JpdGVfb3ApCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnVmczsgaSsrKSB7CiAJCXdidWZbaV0tPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl93cml0ZV9zeW5jOwogCQkvKiBXZSB1c2UtdXAgb3VyIHNhZmV0eSByZWZlcmVuY2UgaW4gc3VibWl0X2JoKCkgKi8KLQkJc3VibWl0X2JoKFdSSVRFLCB3YnVmW2ldKTsKKwkJc3VibWl0X2JoKHdyaXRlX29wLCB3YnVmW2ldKTsKIAl9CiB9CiAKQEAgLTE4Niw3ICsxODgsOCBAQAogICogIFN1Ym1pdCBhbGwgdGhlIGRhdGEgYnVmZmVycyB0byBkaXNrCiAgKi8KIHN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWxfdCAqam91cm5hbCwKLQkJCQl0cmFuc2FjdGlvbl90ICpjb21taXRfdHJhbnNhY3Rpb24pCisJCQkJICAgICAgIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiwKKwkJCQkgICAgICAgaW50IHdyaXRlX29wKQogewogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0yMjUsNyArMjI4LDcgQEAKIAkJCQlCVUZGRVJfVFJBQ0UoYmgsICJuZWVkcyBibG9ja2luZyBsb2NrIik7CiAJCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJCQkvKiBXcml0ZSBvdXQgYWxsIGRhdGEgdG8gcHJldmVudCBkZWFkbG9ja3MgKi8KLQkJCQlqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHdidWYsIGJ1ZnMpOworCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcywgd3JpdGVfb3ApOwogCQkJCWJ1ZnMgPSAwOwogCQkJCWxvY2tfYnVmZmVyKGJoKTsKIAkJCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKQEAgLTI1Niw3ICsyNTksNyBAQAogCQkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CiAJCQlpZiAoYnVmcyA9PSBqb3VybmFsLT5qX3didWZzaXplKSB7CiAJCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKLQkJCQlqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHdidWYsIGJ1ZnMpOworCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcywgd3JpdGVfb3ApOwogCQkJCWJ1ZnMgPSAwOwogCQkJCWdvdG8gd3JpdGVfb3V0X2RhdGE7CiAJCQl9CkBAIC0yODYsNyArMjg5LDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwotCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcyk7CisJam91cm5hbF9kb19zdWJtaXRfZGF0YSh3YnVmLCBidWZzLCB3cml0ZV9vcCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzE1LDYgKzMxOCw3IEBACiAJaW50IGZpcnN0X3RhZyA9IDA7CiAJaW50IHRhZ19mbGFnOwogCWludCBpOworCWludCB3cml0ZV9vcCA9IFdSSVRFOwogCiAJLyoKIAkgKiBGaXJzdCBqb2I6IGxvY2sgZG93biB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2FpdCBmb3IKQEAgLTM0Nyw2ICszNTEsOCBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0xPQ0tFRDsKIAorCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQorCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkM7CiAJc3Bpbl9sb2NrKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCXdoaWxlIChjb21taXRfdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKQEAgLTQzMSw3ICs0MzcsOCBAQAogCSAqIE5vdyBzdGFydCBmbHVzaGluZyB0aGluZ3MgdG8gZGlzaywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyCiAJICogb24gdGhlIHRyYW5zYWN0aW9uIGxpc3RzLiAgRGF0YSBibG9ja3MgZ28gZmlyc3QuCiAJICovCi0JZXJyID0gam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7CisJZXJyID0gam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiwKKwkJCQkJICB3cml0ZV9vcCk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGFsbCBwcmV2aW91c2x5IHN1Ym1pdHRlZCBJTyB0byBjb21wbGV0ZS4KQEAgLTY2MCw3ICs2NjcsNyBAQAogCQkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQkJYmgtPmJfZW5kX2lvID0gam91cm5hbF9lbmRfYnVmZmVyX2lvX3N5bmM7Ci0JCQkJc3VibWl0X2JoKFdSSVRFLCBiaCk7CisJCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQl9CiAJCQljb25kX3Jlc2NoZWQoKTsKIApkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggZTc5YzA3OC4uNzM3ZjcyNCAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC02MzcsNiArNjM3LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBibG9ja25yLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIE5VTEw7CiAJbG9ja19idWZmZXIoYmgpOwogCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CkBAIC03MzMsOSArNzM1LDcgQEAKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJa2ZyZWUoam91cm5hbCk7Ci0JCWpvdXJuYWwgPSBOVUxMOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAlqb3VybmFsLT5qX2RldiA9IGJkZXY7CiAJam91cm5hbC0+al9mc19kZXYgPSBmc19kZXY7CkBAIC03NDMsMTEgKzc0MywxOSBAQAogCWpvdXJuYWwtPmpfbWF4bGVuID0gbGVuOwogCiAJYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2Rldiwgc3RhcnQsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKLQlKX0FTU0VSVChiaCAhPSBOVUxMKTsKKwlpZiAoIWJoKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBDYW5ub3QgZ2V0IGJ1ZmZlciBmb3Igam91cm5hbCBzdXBlcmJsb2NrXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIG91dF9lcnI7CisJfQogCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CiAJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKLW91dDoKKwogCXJldHVybiBqb3VybmFsOworb3V0X2VycjoKKwlrZnJlZShqb3VybmFsKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCkBAIC03ODcsOCArNzk1LDcgQEAKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJa2ZyZWUoam91cm5hbCk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJZXJyID0gam91cm5hbF9ibWFwKGpvdXJuYWwsIDAsICZibG9ja25yKTsKQEAgLTc5NiwxNiArODAzLDIzIEBACiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ubm90IGxvY2F0ZSBqb3VybmFsIHN1cGVyYmxvY2tcbiIsCiAJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCWtmcmVlKGpvdXJuYWwpOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogCWJoID0gX19nZXRibGsoam91cm5hbC0+al9kZXYsIGJsb2NrbnIsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKLQlKX0FTU0VSVChiaCAhPSBOVUxMKTsKKwlpZiAoIWJoKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBDYW5ub3QgZ2V0IGJ1ZmZlciBmb3Igam91cm5hbCBzdXBlcmJsb2NrXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIG91dF9lcnI7CisJfQogCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CiAJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKIAogCXJldHVybiBqb3VybmFsOworb3V0X2VycjoKKwlrZnJlZShqb3VybmFsKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggZTZhMTE3NC4uZWQ4ODZlNiAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTE0NDAsNiArMTQ0MCw4IEBACiAJCX0KIAl9CiAKKwlpZiAoaGFuZGxlLT5oX3N5bmMpCisJCXRyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdCA9IDE7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCA2MjgwNGU1Li40ZWE3MjM3IDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTM2Nyw2ICszNjcsNyBAQAogCWludCB0YWdfYnl0ZXMgPSBqb3VybmFsX3RhZ19ieXRlcyhqb3VybmFsKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmNiaCA9IE5VTEw7IC8qIEZvciB0cmFuc2FjdGlvbmFsIGNoZWNrc3VtcyAqLwogCV9fdTMyIGNyYzMyX3N1bSA9IH4wOworCWludCB3cml0ZV9vcCA9IFdSSVRFOwogCiAJLyoKIAkgKiBGaXJzdCBqb2I6IGxvY2sgZG93biB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2FpdCBmb3IKQEAgLTQwMSw2ICs0MDIsOCBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0xPQ0tFRDsKIAorCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQorCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkM7CiAJc3RhdHMudS5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKIAlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOwogCXN0YXRzLnUucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCkBAIC02ODAsNyArNjgzLDcgQEAKIAkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCWJoLT5iX2VuZF9pbyA9IGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jOwotCQkJCXN1Ym1pdF9iaChXUklURSwgYmgpOworCQkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJfQogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IGJ1ZnM7CmRpZmYgLS1naXQgYS9mcy9qYmQyL3Jldm9rZS5jIGIvZnMvamJkMi9yZXZva2UuYwppbmRleCAyNTdmZjI2Li5iYmU2ZDU5IDEwMDY0NAotLS0gYS9mcy9qYmQyL3Jldm9rZS5jCisrKyBiL2ZzL2piZDIvcmV2b2tlLmMKQEAgLTU1LDYgKzU1LDI1IEBACiAgKgkJCW5lZWQgZG8gbm90aGluZy4KICAqIFJldm9rZVZhbGlkIHNldCwgUmV2b2tlZCBzZXQ6CiAgKgkJCWJ1ZmZlciBoYXMgYmVlbiByZXZva2VkLgorICoKKyAqIExvY2tpbmcgcnVsZXM6CisgKiBXZSBrZWVwIHR3byBoYXNoIHRhYmxlcyBvZiByZXZva2UgcmVjb3Jkcy4gT25lIGhhc2h0YWJsZSBiZWxvbmdzIHRvIHRoZQorICogcnVubmluZyB0cmFuc2FjdGlvbiAoaXMgcG9pbnRlZCB0byBieSBqb3VybmFsLT5qX3Jldm9rZSksIHRoZSBvdGhlciBvbmUKKyAqIGJlbG9uZ3MgdG8gdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIEFjY2Vzc2VzIHRvIHRoZSBzZWNvbmQgaGFzaCB0YWJsZQorICogaGFwcGVuIG9ubHkgZnJvbSB0aGUga2pvdXJuYWxkIGFuZCBubyBvdGhlciB0aHJlYWQgdG91Y2hlcyB0aGlzIHRhYmxlLiAgQWxzbworICogam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKCkgd2hpY2ggc3dpdGNoZXMgd2hpY2ggaGFzaHRhYmxlIGJlbG9uZ3MgdG8gdGhlCisgKiBydW5uaW5nIGFuZCB3aGljaCB0byB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tCisgKiBram91cm5hbGQuIFRoZXJlZm9yZSB3ZSBuZWVkIG5vIGxvY2tzIHdoZW4gYWNjZXNzaW5nIHRoZSBoYXNodGFibGUgYmVsb25naW5nCisgKiB0byB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBBbGwgdXNlcnMgb3BlcmF0aW5nIG9uIHRoZSBoYXNoIHRhYmxlIGJlbG9uZ2luZyB0byB0aGUgcnVubmluZyB0cmFuc2FjdGlvbgorICogaGF2ZSBhIGhhbmRsZSB0byB0aGUgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSB0aGV5IGFyZSBzYWZlIGZyb20ga2pvdXJuYWxkCisgKiBzd2l0Y2hpbmcgaGFzaCB0YWJsZXMgdW5kZXIgdGhlbS4gRm9yIG9wZXJhdGlvbnMgb24gdGhlIGxpc3RzIG9mIGVudHJpZXMgaW4KKyAqIHRoZSBoYXNoIHRhYmxlIGpfcmV2b2tlX2xvY2sgaXMgdXNlZC4KKyAqCisgKiBGaW5hbGx5LCBhbHNvIHJlcGxheSBjb2RlIHVzZXMgdGhlIGhhc2ggdGFibGVzIGJ1dCBhdCB0aGlzIG1vbWVudCBub29uZSBlbHNlCisgKiBjYW4gdG91Y2ggdGhlbSAoZmlsZXN5c3RlbSBpc24ndCBtb3VudGVkIHlldCkgYW5kIGhlbmNlIG5vIGxvY2tpbmcgaXMKKyAqIG5lZWRlZC4KICAqLwogCiAjaWZuZGVmIF9fS0VSTkVMX18KQEAgLTQwMSw4ICs0MjAsNiBAQAogICogdGhlIHNlY29uZCB0aW1lIHdlIHdvdWxkIHN0aWxsIGhhdmUgYSBwZW5kaW5nIHJldm9rZSB0byBjYW5jZWwuICBTbywKICAqIGRvIG5vdCB0cnVzdCB0aGUgUmV2b2tlZCBiaXQgb24gYnVmZmVycyB1bmxlc3MgUmV2b2tlVmFsaWQgaXMgYWxzbwogICogc2V0LgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSBqb3VybmFsIGxvY2tlZC4KICAqLwogaW50IGpiZDJfam91cm5hbF9jYW5jZWxfcmV2b2tlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogewpAQCAtNDgwLDEwICs0OTcsNyBAQAogLyoKICAqIFdyaXRlIHJldm9rZSByZWNvcmRzIHRvIHRoZSBqb3VybmFsIGZvciBhbGwgZW50cmllcyBpbiB0aGUgY3VycmVudAogICogcmV2b2tlIGhhc2gsIGRlbGV0aW5nIHRoZSBlbnRyaWVzIGFzIHdlIGdvLgotICoKLSAqIENhbGxlZCB3aXRoIHRoZSBqb3VybmFsIGxvY2sgaGVsZC4KICAqLwotCiB2b2lkIGpiZDJfam91cm5hbF93cml0ZV9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKmpvdXJuYWwsCiAJCQkJICB0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCAyOGNlMjFkLi45OTZmZmRhIDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xMzE1LDYgKzEzMTUsOCBAQAogCQl9CiAJfQogCisJaWYgKGhhbmRsZS0+aF9zeW5jKQorCQl0cmFuc2FjdGlvbi0+dF9zeW5jaHJvbm91c19jb21taXQgPSAxOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXNwaW5fbG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYWNsLmMgYi9mcy9qZmZzMi9hY2wuYwppbmRleCBkOTg3MTM3Li43N2NjZjhjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9hY2wuYworKysgYi9mcy9qZmZzMi9hY2wuYwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAKIAlpZiAoIWFjbCkgewotCQkqaV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCSppX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9IGVsc2UgewogCQlpZiAoU19JU0RJUigqaV9tb2RlKSkKIAkJCWpmZnMyX2lzZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfZGVmYXVsdCwgYWNsKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9LY29uZmlnIGIvZnMvamZzL0tjb25maWcKaW5kZXggOWZmNjE5YS4uNTdjZWYxOSAxMDA2NDQKLS0tIGEvZnMvamZzL0tjb25maWcKKysrIGIvZnMvamZzL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSkZTX0ZTCiAJdHJpc3RhdGUgIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnQiCiAJc2VsZWN0IE5MUworCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFRoaXMgaXMgYSBwb3J0IG9mIElCTSdzIEpvdXJuYWxlZCBGaWxlc3lzdGVtIC4gIE1vcmUgaW5mb3JtYXRpb24gaXMKIAkgIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQ+LgpkaWZmIC0tZ2l0IGEvZnMvamZzL2FjbC5jIGIvZnMvamZzL2FjbC5jCmluZGV4IGExNjZjMTYuLjA2Y2ExYjggMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9hY2wuYworKysgYi9mcy9qZnMvYWNsLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogY2xlYW51cDoKIAkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKIAl9IGVsc2UKLQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKIAlKRlNfSVAoaW5vZGUpLT5tb2RlMiA9IChKRlNfSVAoaW5vZGUpLT5tb2RlMiAmIDB4ZmZmZjAwMDApIHwKIAkJCSAgICAgICBpbm9kZS0+aV9tb2RlOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kZWJ1Zy5jIGIvZnMvamZzL2pmc19kZWJ1Zy5jCmluZGV4IDZhNzNkZTguLmRkODI0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGVidWcuYworKysgYi9mcy9qZnMvamZzX2RlYnVnLmMKQEAgLTkwLDcgKzkwLDYgQEAKIAogCWlmICghKGJhc2UgPSBwcm9jX21rZGlyKCJmcy9qZnMiLCBOVUxMKSkpCiAJCXJldHVybjsKLQliYXNlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJZm9yIChpID0gMDsgaSA8IE5QUk9DRU5UOyBpKyspCiAJCXByb2NfY3JlYXRlKEVudHJpZXNbaV0ubmFtZSwgMCwgYmFzZSwgRW50cmllc1tpXS5wcm9jX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggMTY5ODAyZS4uYmJiZDVmMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0zNjIsMTEgKzM2MiwxMiBAQAogaW50IGV4dEhpbnQoc3RydWN0IGlub2RlICppcCwgczY0IG9mZnNldCwgeGFkX3QgKiB4cCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaXAtPmlfc2I7Ci0Jc3RydWN0IHhhZGxpc3QgeGFkbDsKLQlzdHJ1Y3QgbHhkbGlzdCBseGRsOwotCWx4ZF90IGx4ZDsKKwlpbnQgbmJwZXJwYWdlID0gSkZTX1NCSShzYiktPm5icGVycGFnZTsKIAlzNjQgcHJldjsKLQlpbnQgcmMsIG5icGVycGFnZSA9IEpGU19TQkkoc2IpLT5uYnBlcnBhZ2U7CisJaW50IHJjID0gMDsKKwlzNjQgeGFkZHI7CisJaW50IHhsZW47CisJaW50IHhmbGFnOwogCiAJLyogaW5pdCB0aGUgaGludCBhcyAibm8gaGludCBwcm92aWRlZCIgKi8KIAlYQURhZGRyZXNzKHhwLCAwKTsKQEAgLTM3Niw0NiArMzc3LDMwIEBACiAJICovCiAJcHJldiA9ICgob2Zmc2V0ICYgflBPRkZTRVQpID4+IEpGU19TQkkoc2IpLT5sMmJzaXplKSAtIG5icGVycGFnZTsKIAotCS8qIGlmIHRoZSBvZmZzZXRzIGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlLAotCSAqIG5vIGhpbnQgcHJvdmlkZWQuCisJLyogaWYgdGhlIG9mZnNldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlsZSwgbm8gaGludCBwcm92aWRlZC4KIAkgKi8KIAlpZiAocHJldiA8IDApCi0JCXJldHVybiAoMCk7CisJCWdvdG8gb3V0OwogCi0JLyogcHJlcGFyZSB0byBsb29rdXAgdGhlIHByZXZpb3VzIHBhZ2UncyBleHRlbnQgaW5mbyAqLwotCWx4ZGwubWF4bmx4ZCA9IDE7Ci0JbHhkbC5ubHhkID0gMTsKLQlseGRsLmx4ZCA9ICZseGQ7Ci0JTFhEb2Zmc2V0KCZseGQsIHByZXYpCi0JTFhEbGVuZ3RoKCZseGQsIG5icGVycGFnZSk7CisJcmMgPSB4dExvb2t1cChpcCwgcHJldiwgbmJwZXJwYWdlLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApOwogCi0JeGFkbC5tYXhueGFkID0gMTsKLQl4YWRsLm54YWQgPSAwOwotCXhhZGwueGFkID0geHA7CisJaWYgKChyYyA9PSAwKSAmJiB4bGVuKSB7CisJCWlmICh4bGVuICE9IG5icGVycGFnZSkgeworCQkJamZzX2Vycm9yKGlwLT5pX3NiLCAiZXh0SGludDogY29ycnVwdCB4dHJlZSIpOworCQkJcmMgPSAtRUlPOworCQl9CisJCVhBRGFkZHJlc3MoeHAsIHhhZGRyKTsKKwkJWEFEbGVuZ3RoKHhwLCB4bGVuKTsKKwkJLyoKKwkJICogb25seSBwcmVzZXJ2ZSB0aGUgYWJuciBmbGFnIHdpdGhpbiB0aGUgeGFkIGZsYWdzCisJCSAqIG9mIHRoZSByZXR1cm5lZCBoaW50LgorCQkgKi8KKwkJeHAtPmZsYWcgID0geGZsYWcgJiBYQURfTk9UUkVDT1JERUQ7CisJfSBlbHNlCisJCXJjID0gMDsKIAotCS8qIHBlcmZvcm0gdGhlIGxvb2t1cCAqLwotCWlmICgocmMgPSB4dExvb2t1cExpc3QoaXAsICZseGRsLCAmeGFkbCwgMCkpKQotCQlyZXR1cm4gKHJjKTsKLQotCS8qIGNoZWNrIGlmIG5vIGV4dGVudCBleGlzdHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlLgotCSAqIHRoaXMgaXMgcG9zc2libGUgZm9yIHNwYXJzZSBmaWxlcy4KLQkgKi8KLQlpZiAoeGFkbC5ueGFkID09IDApIHsKLS8vCQlhc3NlcnQoSVNTUEFSU0UoaXApKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKiBvbmx5IHByZXNlcnZlIHRoZSBhYm5yIGZsYWcgd2l0aGluIHRoZSB4YWQgZmxhZ3MKLQkgKiBvZiB0aGUgcmV0dXJuZWQgaGludC4KLQkgKi8KLQl4cC0+ZmxhZyAmPSBYQURfTk9UUkVDT1JERUQ7Ci0KLQlpZih4YWRsLm54YWQgIT0gMSB8fCBsZW5ndGhYQUQoeHApICE9IG5icGVycGFnZSkgewotCQlqZnNfZXJyb3IoaXAtPmlfc2IsICJleHRIaW50OiBjb3JydXB0IHh0cmVlIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAoMCk7CitvdXQ6CisJcmV0dXJuIChyYyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCAwZjk0MzgxLi4zNDYwNTcyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtNTcsMTIgKzU3LDYgQEAKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIAogLyoKLSAqIF9fbWFya19pbm9kZV9kaXJ0eSBleHBlY3RzIGlub2RlcyB0byBiZSBoYXNoZWQuICBTaW5jZSB3ZSBkb24ndCB3YW50Ci0gKiBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtIGFwcGVhciBoYXNoZWQsCi0gKiBidXQgZG8gbm90IHB1dCBvbiBhbnkgbGlzdHMuCi0gKi8KLQotLyoKICAqIGltYXAgbG9ja3MKICAqLwogLyogaWFnIGZyZWUgbGlzdCBsb2NrICovCkBAIC00OTcsNyArNDkxLDkgQEAKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIAogCS8qCi0JICogdGhhdCB3aWxsIGxvb2sgaGFzaGVkLCBidXQgd29uJ3QgYmUgb24gYW55IGxpc3Q7IGhsaXN0X2RlbCgpCisJICogX19tYXJrX2lub2RlX2RpcnR5IGV4cGVjdHMgaW5vZGVzIHRvIGJlIGhhc2hlZC4gIFNpbmNlIHdlIGRvbid0CisJICogd2FudCBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtCisJICogYXBwZWFyIGhhc2hlZCwgYnV0IGRvIG5vdCBwdXQgb24gYW55IGxpc3RzLiAgaGxpc3RfZGVsKCkKIAkgKiB3aWxsIHdvcmsgZmluZSBhbmQgcmVxdWlyZSBubyBsb2NraW5nLgogCSAqLwogCWlwLT5pX2hhc2gucHByZXYgPSAmaXAtPmlfaGFzaC5uZXh0OwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IGMzNTAwNTcuLjA3YjZjNWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTM2OSw2ICszNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgYmlvX2J5dGVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGJpb19vZmZzZXQgPSAwOwogCWludCBvZmZzZXQ7CisJaW50IGJhZF9ibG9ja3MgPSAwOwogCiAJcGFnZV9zdGFydCA9IChzZWN0b3JfdClwYWdlLT5pbmRleCA8PAogCQkgICAgIChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CkBAIC0zOTQsNiArMzk1LDcgQEAKIAkJfQogCiAJCWNsZWFyX2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOworCQlzZXRfYml0KE1FVEFfaW8sICZtcC0+ZmxhZyk7CiAJCWJsb2NrX29mZnNldCA9IG9mZnNldCA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCQlsYmxvY2sgPSBwYWdlX3N0YXJ0ICsgYmxvY2tfb2Zmc2V0OwogCQlpZiAoYmlvKSB7CkBAIC00MDIsNyArNDA0LDYgQEAKIAkJCQlsZW4gPSBtaW4oeGxlbiwgYmxvY2tzX3Blcl9tcCk7CiAJCQkJeGxlbiAtPSBsZW47CiAJCQkJYmlvX2J5dGVzICs9IGxlbiA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCQkJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIE5vdCBjb250aWd1b3VzICovCkBAIC00MjQsMTIgKzQyNSwxNCBAQAogCQl4bGVuID0gKFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCkgPj4gaW5vZGUtPmlfYmxrYml0czsKIAkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgbGJsb2NrLCAmeGxlbik7CiAJCWlmICghcGJsb2NrKSB7Ci0JCQkvKiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICJKRlM6IG1ldGFwYWdlX2dldF9ibG9ja3MgZmFpbGVkXG4iKTsKLQkJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKKwkJCS8qCisJCQkgKiBXZSBhbHJlYWR5IGNhbGxlZCBpbmNfaW8oKSwgYnV0IGNhbid0IGNhbmNlbCBpdAorCQkJICogd2l0aCBkZWNfaW8oKSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggdGhlIHBhZ2UKKwkJCSAqLworCQkJYmFkX2Jsb2NrcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJc2V0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOwogCQlsZW4gPSBtaW4oeGxlbiwgKGludClKRlNfU0JJKGlub2RlLT5pX3NiKS0+bmJwZXJwYWdlKTsKIAogCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOwpAQCAtNDU5LDYgKzQ2Miw5IEBACiAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorCWlmIChiYWRfYmxvY2tzKQorCQlnb3RvIGVycl9vdXQ7CisKIAlpZiAobnJfdW5kZXJ3YXkgPT0gMCkKIAkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCkBAIC00NzQsNyArNDgwLDkgQEAKIAliaW9fcHV0KGJpbyk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOwotCitlcnJfb3V0OgorCXdoaWxlIChiYWRfYmxvY2tzLS0pCisJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eXBlcy5oIGIvZnMvamZzL2pmc190eXBlcy5oCmluZGV4IDY0OWY5ODEuLjQzZWEzNzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHlwZXMuaAorKysgYi9mcy9qZnMvamZzX3R5cGVzLmgKQEAgLTU4LDM1ICs1OCw2IEBACiAjZGVmaW5lCU9ORVMJCTB4ZmZmZmZmZmZ1CS8qIGFsbCBiaXQgb24JCSovCiAKIC8qCi0gKglsb2dpY2FsIHhkIChseGQpCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsZW46MjQ7Ci0JdW5zaWduZWQgb2ZmMTo4OwotCXUzMiBvZmYyOwotfSBseGRfdDsKLQotLyogbHhkX3QgZmllbGQgY29uc3RydWN0aW9uICovCi0jZGVmaW5lCUxYRGxlbmd0aChseGQsIGxlbmd0aDMyKQkoIChseGQpLT5sZW4gPSBsZW5ndGgzMiApCi0jZGVmaW5lCUxYRG9mZnNldChseGQsIG9mZnNldDY0KVwKLXtcCi0JKGx4ZCktPm9mZjEgPSAoKHM2NClvZmZzZXQ2NCkgPj4gMzI7XAotCShseGQpLT5vZmYyID0gKG9mZnNldDY0KSAmIDB4ZmZmZmZmZmY7XAotfQotCi0vKiBseGRfdCBmaWVsZCBleHRyYWN0aW9uICovCi0jZGVmaW5lCWxlbmd0aExYRChseGQpCSggKGx4ZCktPmxlbiApCi0jZGVmaW5lCW9mZnNldExYRChseGQpXAotCSggKChzNjQpKChseGQpLT5vZmYxKSkgPDwgMzIgfCAobHhkKS0+b2ZmMiApCi0KLS8qIGx4ZCBsaXN0ICovCi1zdHJ1Y3QgbHhkbGlzdCB7Ci0JczE2IG1heG5seGQ7Ci0JczE2IG5seGQ7Ci0JbHhkX3QgKmx4ZDsKLX07Ci0KLS8qCiAgKglwaHlzaWNhbCB4ZCAocHhkKQogICovCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmMgYi9mcy9qZnMvamZzX3h0cmVlLmMKaW5kZXggYTI3ZTI2Yy4uZDY1NGE2NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwpAQCAtMTY0LDExICsxNjQsOCBAQAogCQkvKiBpcyBsb29rdXAgb2Zmc2V0IGJleW9uZCBlb2YgPyAqLwogCQlzaXplID0gKCh1NjQpIGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+CiAJCSAgICBKRlNfU0JJKGlwLT5pX3NiKS0+bDJic2l6ZTsKLQkJaWYgKGxzdGFydCA+PSBzaXplKSB7Ci0JCQlqZnNfZXJyKCJ4dExvb2t1cDogbHN0YXJ0ICgweCVseCkgPj0gc2l6ZSAoMHglbHgpIiwKLQkJCQkodWxvbmcpIGxzdGFydCwgKHVsb25nKSBzaXplKTsKKwkJaWYgKGxzdGFydCA+PSBzaXplKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjIwLDI2NCArMjE3LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyoKLSAqCXh0TG9va3VwTGlzdCgpCi0gKgotICogZnVuY3Rpb246IG1hcCBhIHNpbmdsZSBsb2dpY2FsIGV4dGVudCBpbnRvIGEgbGlzdCBvZiBwaHlzaWNhbCBleHRlbnQ7Ci0gKgotICogcGFyYW1ldGVyOgotICoJc3RydWN0IGlub2RlCSppcCwKLSAqCXN0cnVjdCBseGRsaXN0CSpseGRsaXN0LAlseGQgbGlzdCAoaW4pCi0gKglzdHJ1Y3QgeGFkbGlzdAkqeGFkbGlzdCwJeGFkIGxpc3QgKGluL291dCkKLSAqCWludAkJZmxhZykKLSAqCi0gKiBjb3ZlcmFnZSBvZiBseGQgYnkgeGFkIHVuZGVyIGFzc3VtcHRpb24gb2YKLSAqIC4gbHhkJ3MgYXJlIG9yZGVyZWQgYW5kIGRpc2pvaW50LgotICogLiB4YWQncyBhcmUgb3JkZXJlZCBhbmQgZGlzam9pbnQuCi0gKgotICogcmV0dXJuOgotICoJMDoJc3VjY2VzcwotICoKLSAqIG5vdGU6IGEgcGFnZSBiZWluZyB3cml0dGVuIChldmVuIGEgc2luZ2xlIGJ5dGUpIGlzIGJhY2tlZCBmdWxseSwKLSAqCWV4Y2VwdCB0aGUgbGFzdCBwYWdlIHdoaWNoIGlzIG9ubHkgYmFja2VkIHdpdGggYmxvY2tzCi0gKglyZXF1aXJlZCB0byBjb3ZlciB0aGUgbGFzdCBieXRlOwotICoJdGhlIGV4dGVudCBiYWNraW5nIGEgcGFnZSBpcyBmdWxseSBjb250YWluZWQgd2l0aGluIGFuIHhhZDsKLSAqLwotaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCSBzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGJ0c3RhY2sgYnRzdGFjazsKLQlpbnQgY21wOwotCXM2NCBibjsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOwotCXh0cGFnZV90ICpwOwotCWludCBpbmRleDsKLQlseGRfdCAqbHhkOwotCXhhZF90ICp4YWQsICpweGQ7Ci0JczY0IHNpemUsIGxzdGFydCwgbGVuZCwgeHN0YXJ0LCB4ZW5kLCBwc3RhcnQ7Ci0JczY0IGxsZW4sIHhsZW4sIHBsZW47Ci0JczY0IHhhZGRyLCBwYWRkcjsKLQlpbnQgbmx4ZCwgbnB4ZCwgbWF4bnB4ZDsKLQotCW5weGQgPSB4YWRsaXN0LT5ueGFkID0gMDsKLQltYXhucHhkID0geGFkbGlzdC0+bWF4bnhhZDsKLQlweGQgPSB4YWRsaXN0LT54YWQ7Ci0KLQlubHhkID0gbHhkbGlzdC0+bmx4ZDsKLQlseGQgPSBseGRsaXN0LT5seGQ7Ci0KLQlsc3RhcnQgPSBvZmZzZXRMWEQobHhkKTsKLQlsbGVuID0gbGVuZ3RoTFhEKGx4ZCk7Ci0JbGVuZCA9IGxzdGFydCArIGxsZW47Ci0KLQlzaXplID0gKGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+Ci0JICAgIEpGU19TQkkoaXAtPmlfc2IpLT5sMmJzaXplOwotCi0JLyoKLQkgKiBzZWFyY2ggZm9yIHRoZSB4YWQgZW50cnkgY292ZXJpbmcgdGhlIGxvZ2ljYWwgZXh0ZW50Ci0JICovCi0gICAgICBzZWFyY2g6Ci0JaWYgKGxzdGFydCA+PSBzaXplKQotCQlyZXR1cm4gMDsKLQotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbHN0YXJ0LCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCkpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKgotCSAqCWNvbXB1dGUgdGhlIHBoeXNpY2FsIGV4dGVudCBjb3ZlcmluZyBsb2dpY2FsIGV4dGVudAotCSAqCi0JICogTi5CLiBzZWFyY2ggbWF5IGhhdmUgZmFpbGVkIChlLmcuLCBob2xlIGluIHNwYXJzZSBmaWxlKSwKLQkgKiBhbmQgcmV0dXJuZWQgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGVudHJ5LgotCSAqLwotLy9tYXA6Ci0JLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwotCVhUX0dFVFNFQVJDSChpcCwgYnRzdGFjay50b3AsIGJuLCBtcCwgcCwgaW5kZXgpOwotCi0JLyogaXMgeGFkIG9uIHRoZSBuZXh0IHNpYmxpbmcgcGFnZSA/ICovCi0JaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpKSB7Ci0JCWlmIChwLT5oZWFkZXIuZmxhZyAmIEJUX1JPT1QpCi0JCQlnb3RvIG1hcGVuZDsKLQotCQlpZiAoKGJuID0gbGU2NF90b19jcHUocC0+aGVhZGVyLm5leHQpKSA9PSAwKQotCQkJZ290byBtYXBlbmQ7Ci0KLQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJLyogZ2V0IG5leHQgc2libGluZyBwYWdlICovCi0JCVhUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCi0JCWluZGV4ID0gWFRFTlRSWVNUQVJUOwotCX0KLQotCXhhZCA9ICZwLT54YWRbaW5kZXhdOwotCi0JLyoKLQkgKiBpcyBseGQgY292ZXJlZCBieSB4YWQgPwotCSAqLwotICAgICAgY29tcGFyZToKLQl4c3RhcnQgPSBvZmZzZXRYQUQoeGFkKTsKLQl4bGVuID0gbGVuZ3RoWEFEKHhhZCk7Ci0JeGVuZCA9IHhzdGFydCArIHhsZW47Ci0JeGFkZHIgPSBhZGRyZXNzWEFEKHhhZCk7Ci0KLSAgICAgIGNvbXBhcmUxOgotCWlmICh4c3RhcnQgPCBsc3RhcnQpCi0JCWdvdG8gY29tcGFyZTI7Ci0KLQkvKiAobHN0YXJ0IDw9IHhzdGFydCkgKi8KLQotCS8qIGx4ZCBpcyBOT1QgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobGVuZCA8PSB4c3RhcnQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qIGNvbXBhcmUgd2l0aCB0aGUgY3VycmVudCB4YWQgKi8KLQkJZ290byBjb21wYXJlMTsKLQl9Ci0JLyogbHhkIGlzIGNvdmVyZWQgYnkgeGFkICovCi0JZWxzZSB7CQkJLyogKHhzdGFydCA8IGxlbmQpICovCi0KLQkJLyogaW5pdGlhbGl6ZSBuZXcgcHhkICovCi0JCXBzdGFydCA9IHhzdGFydDsKLQkJcGxlbiA9IG1pbihsZW5kIC0geHN0YXJ0LCB4bGVuKTsKLQkJcGFkZHIgPSB4YWRkcjsKLQotCQlnb3RvIGNvdmVyOwotCX0KLQotCS8qICh4c3RhcnQgPCBsc3RhcnQpICovCi0gICAgICBjb21wYXJlMjoKLQkvKiBseGQgaXMgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobHN0YXJ0IDwgeGVuZCkgewotCQkvKiBpbml0aWFsaXplIG5ldyBweGQgKi8KLQkJcHN0YXJ0ID0gbHN0YXJ0OwotCQlwbGVuID0gbWluKHhlbmQgLSBsc3RhcnQsIGxsZW4pOwotCQlwYWRkciA9IHhhZGRyICsgKGxzdGFydCAtIHhzdGFydCk7Ci0KLQkJZ290byBjb3ZlcjsKLQl9Ci0JLyogbHhkIGlzIE5PVCBjb3ZlcmVkIGJ5IHhhZCAqLwotCWVsc2UgewkJCS8qICh4ZW5kIDw9IGxzdGFydCkgKi8KLQotCQkvKgotCQkgKiBnZXQgbmV4dCB4YWQKLQkJICoKLQkJICogbGluZWFyIHNlYXJjaCBuZXh0IHhhZCBjb3ZlcmluZyBseGQgb24KLQkJICogdGhlIGN1cnJlbnQgeGFkIHBhZ2UsIGFuZCB0aGVuIHRyZWUgc2VhcmNoCi0JCSAqLwotCQlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgLSAxKSB7Ci0JCQlpZiAocC0+aGVhZGVyLmZsYWcgJiBCVF9ST09UKQotCQkJCWdvdG8gbWFwZW5kOwotCi0JCQlYVF9QVVRQQUdFKG1wKTsKLQkJCWdvdG8gc2VhcmNoOwotCQl9IGVsc2UgewotCQkJaW5kZXgrKzsKLQkJCXhhZCsrOwotCi0JCQkvKiBjb21wYXJlIHdpdGggbmV3IHhhZCAqLwotCQkJZ290byBjb21wYXJlOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBseGQgaXMgY292ZXJlZCBieSB4YWQgYW5kIGEgbmV3IHB4ZCBoYXMgYmVlbiBpbml0aWFsaXplZAotCSAqIChsc3RhcnQgPD0geHN0YXJ0IDwgbGVuZCkgb3IgKHhzdGFydCA8IGxzdGFydCA8IHhlbmQpCi0JICovCi0gICAgICBjb3ZlcjoKLQkvKiBmaW5hbGl6ZSBweGQgY29ycmVzcG9uZGluZyB0byBjdXJyZW50IHhhZCAqLwotCVhUX1BVVEVOVFJZKHB4ZCwgeGFkLT5mbGFnLCBwc3RhcnQsIHBsZW4sIHBhZGRyKTsKLQotCWlmICgrK25weGQgPj0gbWF4bnB4ZCkKLQkJZ290byBtYXBlbmQ7Ci0JcHhkKys7Ci0KLQkvKgotCSAqIGx4ZCBpcyBmdWxseSBjb3ZlcmVkIGJ5IHhhZAotCSAqLwotCWlmIChsZW5kIDw9IHhlbmQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG9sZCB4YWQgY292ZXJpbmcgbmV3IGx4ZAotCQkgKiAob2xkIHhzdGFydCA8IG5ldyBsc3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmUyOwotCX0KLQkvKgotCSAqIGx4ZCBpcyBwYXJ0aWFsbHkgY292ZXJlZCBieSB4YWQKLQkgKi8KLQllbHNlIHsJCQkvKiAoeGVuZCA8IGxlbmQpICovCi0KLQkJLyoKLQkJICogZ2V0IG5leHQgeGFkCi0JCSAqCi0JCSAqIGxpbmVhciBzZWFyY2ggbmV4dCB4YWQgY292ZXJpbmcgbHhkIG9uCi0JCSAqIHRoZSBjdXJyZW50IHhhZCBwYWdlLCBhbmQgdGhlbiBuZXh0IHhhZCBwYWdlIHNlYXJjaAotCQkgKi8KLQkJaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpIC0gMSkgewotCQkJaWYgKHAtPmhlYWRlci5mbGFnICYgQlRfUk9PVCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJaWYgKChibiA9IGxlNjRfdG9fY3B1KHAtPmhlYWRlci5uZXh0KSkgPT0gMCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJCS8qIGdldCBuZXh0IHNpYmxpbmcgcGFnZSAqLwotCQkJWFRfR0VUUEFHRShpcCwgYm4sIG1wLCBQU0laRSwgcCwgcmMpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJaW5kZXggPSBYVEVOVFJZU1RBUlQ7Ci0JCQl4YWQgPSAmcC0+eGFkW2luZGV4XTsKLQkJfSBlbHNlIHsKLQkJCWluZGV4Kys7Ci0JCQl4YWQrKzsKLQkJfQotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG5ldyB4YWQgY292ZXJpbmcgb2xkIGx4ZAotCQkgKiAob2xkIGxzdGFydCA8IG5ldyB4c3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmU7Ci0JfQotCi0gICAgICBtYXBlbmQ6Ci0JeGFkbGlzdC0+bnhhZCA9IG5weGQ7Ci0KLS8vb3V0OgotCVhUX1BVVFBBR0UobXApOwotCi0JcmV0dXJuIHJjOwotfQotCi0KIC8qCiAgKgl4dFNlYXJjaCgpCiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc194dHJlZS5oIGIvZnMvamZzL2pmc194dHJlZS5oCmluZGV4IDcwODE1YzhhMy4uMDhjMGM3NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5oCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuaApAQCAtMTEwLDggKzExMCw2IEBACiAgKi8KIGV4dGVybiBpbnQgeHRMb29rdXAoc3RydWN0IGlub2RlICppcCwgczY0IGxzdGFydCwgczY0IGxsZW4sCiAJCSAgICBpbnQgKnBmbGFnLCBzNjQgKiBwYWRkciwgaW50ICpwbGVuLCBpbnQgZmxhZyk7Ci1leHRlcm4gaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCQlzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKTsKIGV4dGVybiB2b2lkIHh0SW5pdFJvb3QodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKTsKIGV4dGVybiBpbnQgeHRJbnNlcnQodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLAogCQkgICAgaW50IHhmbGFnLCBzNjQgeG9mZiwgaW50IHhsZW4sIHM2NCAqIHhhZGRycCwgaW50IGZsYWcpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCBiMzdkMWY3Li42ZjIxYWRmIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApAQCAtMTY4LDYgKzE2OSw5IEBACiAJYnVmLT5mX2ZpbGVzID0gbWF4aW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IG1heGlub2RlcyAtIChhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtaW5vcykgLQogCQkJCSAgICBhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtZnJlZSkpOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpY3JjMzJfbGUoMCwgc2JpLT51dWlkLCBzaXplb2Yoc2JpLT51dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHNiaS0+dXVpZCArIHNpemVvZihzYmktPnV1aWQpLzIsCisJCQkJCXNpemVvZihzYmktPnV1aWQpLzIpOwogCiAJYnVmLT5mX25hbWVsZW4gPSBKRlNfTkFNRV9NQVg7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9jbG50bG9jay5jIGIvZnMvbG9ja2QvY2xudGxvY2suYwppbmRleCBhZWRjNDdhLi4xZjNiMGZjIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9jbG50bG9jay5jCisrKyBiL2ZzL2xvY2tkL2NsbnRsb2NrLmMKQEAgLTEzOSw1NSArMTM5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbmxtY2xudF9tYXBfdjRhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAotCQkJCQkJIHN0cnVjdCBpbjZfYWRkciAqYWRkcl9tYXBwZWQpCi17Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwOwotCi0Jc3dpdGNoIChzYXAtPnNhX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDY6Ci0JCXJldHVybiAmKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwKS0+c2luNl9hZGRyOwotCWNhc2UgQUZfSU5FVDoKLQkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZChzaW4tPnNpbl9hZGRyLnNfYWRkciwgYWRkcl9tYXBwZWQpOwotCQlyZXR1cm4gYWRkcl9tYXBwZWQ7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBJZiBsb2NrZCBpcyB1c2luZyBhIFBGX0lORVQ2IGxpc3RlbmVyLCBhbGwgaW5jb21pbmcgcmVxdWVzdHMgYXBwZWFyCi0gKiB0byBjb21lIGZyb20gQUZfSU5FVDYgcmVtb3Rlcy4gIFRoZSBhZGRyZXNzIG9mIEFGX0lORVQgcmVtb3RlcyBhcmUKLSAqIG1hcHBlZCB0byBBRl9JTkVUNiBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBuZXR3b3JrIGxheWVyLiAgSW4gY2FzZSB0aGUKLSAqIHVzZXIgcGFzc2VkIGFuIEFGX0lORVQgc2VydmVyIGFkZHJlc3MgYXQgbW91bnQgdGltZSwgZW5zdXJlIGJvdGgKLSAqIGFkZHJlc3NlcyBhcmUgQUZfSU5FVDYgYmVmb3JlIGNvbXBhcmluZyB0aGVtLgotICovCi1zdGF0aWMgaW50IG5sbWNsbnRfY21wX2FkZHIoY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0LAotCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQotewotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjE7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMjsKLQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjFfbWFwcGVkOwotCXN0cnVjdCBpbjZfYWRkciBhZGRyMl9tYXBwZWQ7Ci0KLQlhZGRyMSA9IG5sbWNsbnRfbWFwX3Y0YWRkcihubG1fYWRkcihob3N0KSwgJmFkZHIxX21hcHBlZCk7Ci0JaWYgKGxpa2VseShhZGRyMSAhPSBOVUxMKSkgewotCQlhZGRyMiA9IG5sbWNsbnRfbWFwX3Y0YWRkcihzYXAsICZhZGRyMl9tYXBwZWQpOwotCQlpZiAobGlrZWx5KGFkZHIyICE9IE5VTEwpKQotCQkJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbChhZGRyMSwgYWRkcjIpOwotCX0KLQotCXJldHVybiAwOwotfQotI2Vsc2UJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCi1zdGF0aWMgaW50IG5sbWNsbnRfY21wX2FkZHIoY29uc3Qgc3RydWN0IG5sbV9ob3N0ICpob3N0LAotCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwKQotewotCXJldHVybiBubG1fY21wX2FkZHIobmxtX2FkZHIoaG9zdCksIHNhcCk7Ci19Ci0jZW5kaWYJLyogIShDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICovCi0KIC8qCiAgKiBUaGUgc2VydmVyIGxvY2tkIGhhcyBjYWxsZWQgdXMgYmFjayB0byB0ZWxsIHVzIHRoZSBsb2NrIHdhcyBncmFudGVkCiAgKi8KQEAgLTIxNSw3ICsxNjYsNyBAQAogCQkgKi8KIAkJaWYgKGZsX2Jsb2NrZWQtPmZsX3UubmZzX2ZsLm93bmVyLT5waWQgIT0gbG9jay0+c3ZpZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIW5sbWNsbnRfY21wX2FkZHIoYmxvY2stPmJfaG9zdCwgYWRkcikpCisJCWlmICghbmxtX2NtcF9hZGRyKG5sbV9hZGRyKGJsb2NrLT5iX2hvc3QpLCBhZGRyKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobmZzX2NvbXBhcmVfZmgoTkZTX0ZIKGZsX2Jsb2NrZWQtPmZsX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpICxmaCkgIT0gMCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvbW9uLmMgYi9mcy9sb2NrZC9tb24uYwppbmRleCA1ZTJjNGQ1Li42ZDVkNGE0IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9tb24uYworKysgYi9mcy9sb2NrZC9tb24uYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmMuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZC9sb2NrZC5oPgogCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCiAjZGVmaW5lIE5MTURCR19GQUNJTElUWQkJTkxNREJHX01PTklUT1IKICNkZWZpbmUgTlNNX1BST0dSQU0JCTEwMDAyNAogI2RlZmluZSBOU01fVkVSU0lPTgkJMQpAQCAtMjc0LDEwICsyNzYsMTIgQEAKIHsKIAl1NjQgKnAgPSAodTY0ICopJm5zbS0+c21fcHJpdi5kYXRhOwogCXN0cnVjdCB0aW1lc3BlYyB0czsKKwlzNjQgbnM7CiAKIAlrdGltZV9nZXRfdHMoJnRzKTsKLQkqcCsrID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKLQkqcCA9ICh1bnNpZ25lZCBsb25nKW5zbTsKKwlucyA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CisJcHV0X3VuYWxpZ25lZChucywgcCk7CisJcHV0X3VuYWxpZ25lZCgodW5zaWduZWQgbG9uZyluc20sIHAgKyAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuc21faGFuZGxlICpuc21fY3JlYXRlX2hhbmRsZShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Yy5jIGIvZnMvbG9ja2Qvc3ZjLmMKaW5kZXggNjRmMWMzMS4uYWJmODM4OCAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3ZjLmMKKysrIGIvZnMvbG9ja2Qvc3ZjLmMKQEAgLTUzLDE3ICs1Myw2IEBACiB1bnNpZ25lZCBsb25nCQkJbmxtc3ZjX3RpbWVvdXQ7CiAKIC8qCi0gKiBJZiB0aGUga2VybmVsIGhhcyBJUHY2IHN1cHBvcnQgYXZhaWxhYmxlLCBhbHdheXMgbGlzdGVuIGZvcgotICogYm90aCBBRl9JTkVUIGFuZCBBRl9JTkVUNiByZXF1ZXN0cy4KLSAqLwotI2lmIChkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkpICYmIFwKLQlkZWZpbmVkKENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQpCi1zdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmxtc3ZjX2ZhbWlseSA9IEFGX0lORVQ2OwotI2Vsc2UJLyogKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgJiYgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLwotc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5sbXN2Y19mYW1pbHkgPSBBRl9JTkVUOwotI2VuZGlmCS8qIChDT05GSUdfSVBWNiB8fCBDT05GSUdfSVBWNl9NT0RVTEUpICYmIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KLQotLyoKICAqIFRoZXNlIGNhbiBiZSBzZXQgYXQgaW5zbW9kIHRpbWUgKHVzZWZ1bCBmb3IgTkZTIGFzIHJvb3QgZmlsZXN5c3RlbSksCiAgKiBhbmQgYWxzbyBjaGFuZ2VkIHRocm91Z2ggdGhlIHN5c2N0bCBpbnRlcmZhY2UuICAtLSBKYW1pZSBMb2tpZXIsIEF1ZyAyMDAzCiAgKi8KQEAgLTIwNCwxOSArMTkzLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3JlYXRlX2xvY2tkX2xpc3RlbmVyKHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY2hhciAqbmFtZSwKLQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3N0YXRpYyBpbnQgY3JlYXRlX2xvY2tkX2xpc3RlbmVyKHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgY29uc3QgaW50IGZhbWlseSwgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKIAlzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7CiAKLQl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChzZXJ2LCBuYW1lLCAwLCAwKTsKKwl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChzZXJ2LCBuYW1lLCBmYW1pbHksIDApOwogCWlmICh4cHJ0ID09IE5VTEwpCi0JCXJldHVybiBzdmNfY3JlYXRlX3hwcnQoc2VydiwgbmFtZSwgcG9ydCwgU1ZDX1NPQ0tfREVGQVVMVFMpOwotCisJCXJldHVybiBzdmNfY3JlYXRlX3hwcnQoc2VydiwgbmFtZSwgZmFtaWx5LCBwb3J0LAorCQkJCQkJU1ZDX1NPQ0tfREVGQVVMVFMpOwogCXN2Y194cHJ0X3B1dCh4cHJ0KTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjcmVhdGVfbG9ja2RfZmFtaWx5KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgaW50IGZhbWlseSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gY3JlYXRlX2xvY2tkX2xpc3RlbmVyKHNlcnYsICJ1ZHAiLCBmYW1pbHksIG5sbV91ZHBwb3J0KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc2VydiwgInRjcCIsIGZhbWlseSwgbmxtX3RjcHBvcnQpOworfQorCiAvKgogICogRW5zdXJlIHRoZXJlIGFyZSBhY3RpdmUgVURQIGFuZCBUQ1AgbGlzdGVuZXJzIGZvciBsb2NrZC4KICAqCkBAIC0yMzIsMTMgKzIzMiwxNSBAQAogCXN0YXRpYyBpbnQgd2FybmVkOwogCWludCBlcnI7CiAKLQllcnIgPSBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc2VydiwgInVkcCIsIG5sbV91ZHBwb3J0KTsKKwllcnIgPSBjcmVhdGVfbG9ja2RfZmFtaWx5KHNlcnYsIFBGX0lORVQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKLQllcnIgPSBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc2VydiwgInRjcCIsIG5sbV90Y3Bwb3J0KTsKLQlpZiAoZXJyIDwgMCkKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwllcnIgPSBjcmVhdGVfbG9ja2RfZmFtaWx5KHNlcnYsIFBGX0lORVQ2KTsKKwlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVBRk5PU1VQUE9SVCkKIAkJZ290byBvdXRfZXJyOworI2VuZGlmCS8qIENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSAqLwogCiAJd2FybmVkID0gMDsKIAlyZXR1cm4gMDsKQEAgLTI3NCw3ICsyNzYsNyBAQAogCQkJImxvY2tkX3VwOiBubyBwaWQsICVkIHVzZXJzPz9cbiIsIG5sbXN2Y191c2Vycyk7CiAKIAllcnJvciA9IC1FTk9NRU07Ci0Jc2VydiA9IHN2Y19jcmVhdGUoJm5sbXN2Y19wcm9ncmFtLCBMT0NLRF9CVUZTSVpFLCBubG1zdmNfZmFtaWx5LCBOVUxMKTsKKwlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmxtc3ZjX3Byb2dyYW0sIExPQ0tEX0JVRlNJWkUsIE5VTEwpOwogCWlmICghc2VydikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJsb2NrZF91cDogY3JlYXRlIHNlcnZpY2UgZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCA2MTg4NjViLi5kYWFkM2MyIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCisrKyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTMyMSwxNSArMzIxLDIwIEBACiAKIHN0YXRpYyBpbnQgbWluaXhfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2IoZGVudHJ5LT5kX3NiKTsKLQlidWYtPmZfdHlwZSA9IGRlbnRyeS0+ZF9zYi0+c19tYWdpYzsKLQlidWYtPmZfYnNpemUgPSBkZW50cnktPmRfc2ItPnNfYmxvY2tzaXplOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaSA9IG1pbml4X3NiKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKKwlidWYtPmZfdHlwZSA9IHNiLT5zX21hZ2ljOworCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAlidWYtPmZfYmxvY2tzID0gKHNiaS0+c19uem9uZXMgLSBzYmktPnNfZmlyc3RkYXRhem9uZSkgPDwgc2JpLT5zX2xvZ196b25lX3NpemU7CiAJYnVmLT5mX2JmcmVlID0gbWluaXhfY291bnRfZnJlZV9ibG9ja3Moc2JpKTsKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19uaW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IG1pbml4X2NvdW50X2ZyZWVfaW5vZGVzKHNiaSk7CiAJYnVmLT5mX25hbWVsZW4gPSBzYmktPnNfbmFtZWxlbjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCAxNmMzZWYzLi42ODBiYTYwIDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAliaW9fcHV0KGJpbyk7CiB9CiAKLXN0cnVjdCBiaW8gKm1wYWdlX2Jpb19zdWJtaXQoaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgc3RydWN0IGJpbyAqbXBhZ2VfYmlvX3N1Ym1pdChpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAliaW8tPmJpX2VuZF9pbyA9IG1wYWdlX2VuZF9pb19yZWFkOwogCWlmIChydyA9PSBXUklURSkKQEAgLTkwLDcgKzkwLDYgQEAKIAlzdWJtaXRfYmlvKHJ3LCBiaW8pOwogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChtcGFnZV9iaW9fc3VibWl0KTsKIAogc3RhdGljIHN0cnVjdCBiaW8gKgogbXBhZ2VfYWxsb2Moc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTQzOSw3ICs0MzgsMTQgQEAKICAqIGp1c3QgYWxsb2NhdGUgZnVsbC1zaXplICgxNi1wYWdlKSBCSU9zLgogICovCiAKLWludCBfX21wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCitzdHJ1Y3QgbXBhZ2VfZGF0YSB7CisJc3RydWN0IGJpbyAqYmlvOworCXNlY3Rvcl90IGxhc3RfYmxvY2tfaW5fYmlvOworCWdldF9ibG9ja190ICpnZXRfYmxvY2s7CisJdW5zaWduZWQgdXNlX3dyaXRlcGFnZTsKK307CisKK3N0YXRpYyBpbnQgX19tcGFnZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLAogCQkgICAgICB2b2lkICpkYXRhKQogewogCXN0cnVjdCBtcGFnZV9kYXRhICptcGQgPSBkYXRhOwpAQCAtNjQ4LDcgKzY1NCw2IEBACiAJbXBkLT5iaW8gPSBiaW87CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woX19tcGFnZV93cml0ZXBhZ2UpOwogCiAvKioKICAqIG1wYWdlX3dyaXRlcGFnZXMgLSB3YWxrIHRoZSBsaXN0IG9mIGRpcnR5IHBhZ2VzIG9mIHRoZSBnaXZlbiBhZGRyZXNzIHNwYWNlICYgd3JpdGVwYWdlKCkgYWxsIG9mIHRoZW0KZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGQwNDBjZTEuLmI4NDMzZWIgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZV9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwMFwwMDRcMDAyXDAwNiJbKHgpJk9fQUNDTU9ERV0pCkBAIC0xNTc4LDcgKzE1NzksNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLT5wYXRoLmRlbnRyeTsKIAogCWlmICghSVNfUE9TSVhBQ0woZGlyLT5kX2lub2RlKSkKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKCZuZC0+cGF0aCwgcGF0aC0+ZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTE5ODksNyArMTk5MCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAJaWYgKCFJU19QT1NJWEFDTChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCWVycm9yID0gbWF5X21rbm9kKG1vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZHB1dDsKQEAgLTIwNjcsNyArMjA2OCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmICghSVNfUE9TSVhBQ0wobmQucGF0aC5kZW50cnktPmRfaW5vZGUpKQotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RwdXQ7CkBAIC0yODk3LDEwICsyODk4LDMgQEAKIEVYUE9SVF9TWU1CT0wodmZzX3VubGluayk7CiBFWFBPUlRfU1lNQk9MKGRlbnRyeV91bmhhc2gpOwogRVhQT1JUX1NZTUJPTChnZW5lcmljX3JlYWRsaW5rKTsKLQotLyogdG8gYmUgbWVudGlvbmVkIG9ubHkgaW4gSU5JVF9UQVNLICovCi1zdHJ1Y3QgZnNfc3RydWN0IGluaXRfZnMgPSB7Ci0JLmNvdW50CQk9IEFUT01JQ19JTklUKDEpLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChpbml0X2ZzLmxvY2spLAotCS51bWFzawkJPSAwMDIyLAotfTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggMGE0MmUwZS4uYzZmNTRlNCAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW1mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlICJwbm9kZS5oIgpAQCAtMjA5Myw2NiArMjA5NCw2IEBACiB9CiAKIC8qCi0gKiBSZXBsYWNlIHRoZSBmcy0+e3Jvb3RtbnQscm9vdH0gd2l0aCB7bW50LGRlbnRyeX0uIFB1dCB0aGUgb2xkIHZhbHVlcy4KLSAqIEl0IGNhbiBibG9jay4gUmVxdWlyZXMgdGhlIGJpZyBsb2NrIGhlbGQuCi0gKi8KLXZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwYXRoKQotewotCXN0cnVjdCBwYXRoIG9sZF9yb290OwotCi0Jd3JpdGVfbG9jaygmZnMtPmxvY2spOwotCW9sZF9yb290ID0gZnMtPnJvb3Q7Ci0JZnMtPnJvb3QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKLQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKLQlpZiAob2xkX3Jvb3QuZGVudHJ5KQotCQlwYXRoX3B1dCgmb2xkX3Jvb3QpOwotfQotCi0vKgotICogUmVwbGFjZSB0aGUgZnMtPntwd2RtbnQscHdkfSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgotICogSXQgY2FuIGJsb2NrLiBSZXF1aXJlcyB0aGUgYmlnIGxvY2sgaGVsZC4KLSAqLwotdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKLXsKLQlzdHJ1Y3QgcGF0aCBvbGRfcHdkOwotCi0Jd3JpdGVfbG9jaygmZnMtPmxvY2spOwotCW9sZF9wd2QgPSBmcy0+cHdkOwotCWZzLT5wd2QgPSAqcGF0aDsKLQlwYXRoX2dldChwYXRoKTsKLQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKLQotCWlmIChvbGRfcHdkLmRlbnRyeSkKLQkJcGF0aF9wdXQoJm9sZF9wd2QpOwotfQotCi1zdGF0aWMgdm9pZCBjaHJvb3RfZnNfcmVmcyhzdHJ1Y3QgcGF0aCAqb2xkX3Jvb3QsIHN0cnVjdCBwYXRoICpuZXdfcm9vdCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCXRhc2tfbG9jayhwKTsKLQkJZnMgPSBwLT5mczsKLQkJaWYgKGZzKSB7Ci0JCQlhdG9taWNfaW5jKCZmcy0+Y291bnQpOwotCQkJdGFza191bmxvY2socCk7Ci0JCQlpZiAoZnMtPnJvb3QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKLQkJCSAgICAmJiBmcy0+cm9vdC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkKLQkJCQlzZXRfZnNfcm9vdChmcywgbmV3X3Jvb3QpOwotCQkJaWYgKGZzLT5wd2QuZGVudHJ5ID09IG9sZF9yb290LT5kZW50cnkKLQkJCSAgICAmJiBmcy0+cHdkLm1udCA9PSBvbGRfcm9vdC0+bW50KQotCQkJCXNldF9mc19wd2QoZnMsIG5ld19yb290KTsKLQkJCXB1dF9mc19zdHJ1Y3QoZnMpOwotCQl9IGVsc2UKLQkJCXRhc2tfdW5sb2NrKHApOwotCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotfQotCi0vKgogICogcGl2b3Rfcm9vdCBTZW1hbnRpY3M6CiAgKiBNb3ZlcyB0aGUgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGUgY3VycmVudCBwcm9jZXNzIHRvIHRoZSBkaXJlY3RvcnkgcHV0X29sZCwKICAqIG1ha2VzIG5ld19yb290IGFzIHRoZSBuZXcgcm9vdCBmaWxlIHN5c3RlbSBvZiB0aGUgY3VycmVudCBwcm9jZXNzLCBhbmQgc2V0cwpkaWZmIC0tZ2l0IGEvZnMvbmZzL0tjb25maWcgYi9mcy9uZnMvS2NvbmZpZwppbmRleCAzNmZlMjBkLi5lNjdmM2VjIDEwMDY0NAotLS0gYS9mcy9uZnMvS2NvbmZpZworKysgYi9mcy9uZnMvS2NvbmZpZwpAQCAtODQsMyArODQsMTEgQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzcm9vdC50eHQ+LgogCiAJICBNb3N0IHBlb3BsZSBzYXkgTiBoZXJlLgorCitjb25maWcgTkZTX0ZTQ0FDSEUKKwlib29sICJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBORlNfRlM9bSAmJiBGU0NBQ0hFIHx8IE5GU19GUz15ICYmIEZTQ0FDSEU9eQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgTkZTIGRhdGEgdG8gYmUgY2FjaGVkIGxvY2FsbHkgb24gZGlzYyB0aHJvdWdoCisJICB0aGUgZ2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hlIG1hbmFnZXIKZGlmZiAtLWdpdCBhL2ZzL25mcy9NYWtlZmlsZSBiL2ZzL25mcy9NYWtlZmlsZQppbmRleCBhYzYxNzBjLi44NDUxNTk4IDEwMDY0NAotLS0gYS9mcy9uZnMvTWFrZWZpbGUKKysrIGIvZnMvbmZzL01ha2VmaWxlCkBAIC0xNSwzICsxNSw0IEBACiAJCQkgICBjYWxsYmFjay5vIGNhbGxiYWNrX3hkci5vIGNhbGxiYWNrX3Byb2MubyBcCiAJCQkgICBuZnM0bmFtZXNwYWNlLm8KIG5mcy0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vCituZnMtJChDT05GSUdfTkZTX0ZTQ0FDSEUpICs9IGZzY2FjaGUubyBmc2NhY2hlLWluZGV4Lm8KZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggM2U2MzRmMmEuLmE4ODZlNjkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFjay5jCisrKyBiL2ZzL25mcy9jYWxsYmFjay5jCkBAIC0zOCwxOSArMzgsMTAgQEAKIAogdW5zaWduZWQgaW50IG5mc19jYWxsYmFja19zZXRfdGNwcG9ydDsKIHVuc2lnbmVkIHNob3J0IG5mc19jYWxsYmFja190Y3Bwb3J0OwordW5zaWduZWQgc2hvcnQgbmZzX2NhbGxiYWNrX3RjcHBvcnQ2Owogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWluID0gMDsKIHN0YXRpYyBjb25zdCBpbnQgbmZzX3NldF9wb3J0X21heCA9IDY1NTM1OwogCi0vKgotICogSWYgdGhlIGtlcm5lbCBoYXMgSVB2NiBzdXBwb3J0IGF2YWlsYWJsZSwgYWx3YXlzIGxpc3RlbiBmb3IKLSAqIGJvdGggQUZfSU5FVCBhbmQgQUZfSU5FVDYgcmVxdWVzdHMuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXN0YXRpYyBjb25zdCBzYV9mYW1pbHlfdAluZnNfY2FsbGJhY2tfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5mc19jYWxsYmFja19mYW1pbHkgPSBBRl9JTkVUOwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgcGFyYW1fc2V0X3BvcnQoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAljaGFyICplbmRwOwpAQCAtMTE2LDE5ICsxMDcsMjkgQEAKIAltdXRleF9sb2NrKCZuZnNfY2FsbGJhY2tfbXV0ZXgpOwogCWlmIChuZnNfY2FsbGJhY2tfaW5mby51c2VycysrIHx8IG5mc19jYWxsYmFja19pbmZvLnRhc2sgIT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0Jc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLAotCQkJCW5mc19jYWxsYmFja19mYW1pbHksIE5VTEwpOworCXNlcnYgPSBzdmNfY3JlYXRlKCZuZnM0X2NhbGxiYWNrX3Byb2dyYW0sIE5GUzRfQ0FMTEJBQ0tfQlVGU0laRSwgTlVMTCk7CiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIXNlcnYpCiAJCWdvdG8gb3V0X2VycjsKIAotCXJldCA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwIiwgbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0LAotCQkJICAgICAgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKKwlyZXQgPSBzdmNfY3JlYXRlX3hwcnQoc2VydiwgInRjcCIsIFBGX0lORVQsCisJCQkJbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOwogCWlmIChyZXQgPD0gMCkKIAkJZ290byBvdXRfZXJyOwogCW5mc19jYWxsYmFja190Y3Bwb3J0ID0gcmV0OwogCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCi0JCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgbmZzX2NhbGxiYWNrX2ZhbWlseSk7CisJCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgUEZfSU5FVCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlyZXQgPSBzdmNfY3JlYXRlX3hwcnQoc2VydiwgInRjcCIsIFBGX0lORVQ2LAorCQkJCW5mc19jYWxsYmFja19zZXRfdGNwcG9ydCwgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKKwlpZiAocmV0ID4gMCkgeworCQluZnNfY2FsbGJhY2tfdGNwcG9ydDYgPSByZXQ7CisJCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCisJCQkJbmZzX2NhbGxiYWNrX3RjcHBvcnQ2LCBQRl9JTkVUNik7CisJfSBlbHNlIGlmIChyZXQgIT0gLUVBRk5PU1VQUE9SVCkKKwkJZ290byBvdXRfZXJyOworI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSAqLwogCiAJbmZzX2NhbGxiYWNrX2luZm8ucnFzdCA9IHN2Y19wcmVwYXJlX3RocmVhZChzZXJ2LCAmc2Vydi0+c3ZfcG9vbHNbMF0pOwogCWlmIChJU19FUlIobmZzX2NhbGxiYWNrX2luZm8ucnFzdCkpIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggYmIyNWQyMS4uZTExMGUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTcyLDUgKzcyLDYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBuZnNfY2FsbGJhY2tfc2V0X3RjcHBvcnQ7CiBleHRlcm4gdW5zaWduZWQgc2hvcnQgbmZzX2NhbGxiYWNrX3RjcHBvcnQ7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgbmZzX2NhbGxiYWNrX3RjcHBvcnQ2OwogCiAjZW5kaWYgLyogX19MSU5VWF9GU19ORlNfQ0FMTEJBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NsaWVudC5jIGIvZnMvbmZzL2NsaWVudC5jCmluZGV4IDU3NDE1OGEuLjc1YzljZDIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jbGllbnQuYworKysgYi9mcy9uZnMvY2xpZW50LmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCiAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfQ0xJRU5UCiAKQEAgLTE1NCw2ICsxNTUsOCBAQAogCWlmICghSVNfRVJSKGNyZWQpKQogCQljbHAtPmNsX21hY2hpbmVfY3JlZCA9IGNyZWQ7CiAKKwluZnNfZnNjYWNoZV9nZXRfY2xpZW50X2Nvb2tpZShjbHApOworCiAJcmV0dXJuIGNscDsKIAogZXJyb3JfMzoKQEAgLTE4Nyw2ICsxOTAsOCBAQAogCiAJbmZzNF9zaHV0ZG93bl9jbGllbnQoY2xwKTsKIAorCW5mc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShjbHApOworCiAJLyogLUVJTyBhbGwgcGVuZGluZyBJL08gKi8KIAlpZiAoIUlTX0VSUihjbHAtPmNsX3JwY2NsaWVudCkpCiAJCXJwY19zaHV0ZG93bl9jbGllbnQoY2xwLT5jbF9ycGNjbGllbnQpOwpAQCAtMjI0LDM4ICsyMjksNiBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgY29uc3Qgc3RydWN0IGluNl9hZGRyICpuZnNfbWFwX2lwdjRfYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHJfbWFwcGVkKQotewotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotCQlkZWZhdWx0OgotCQkJcmV0dXJuIE5VTEw7Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlyZXR1cm4gJigoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9hZGRyOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJCWlwdjZfYWRkcl9zZXRfdjRtYXBwZWQoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9hZGRyLnNfYWRkciwKLQkJCQkJYWRkcl9tYXBwZWQpOwotCQkJcmV0dXJuIGFkZHJfbWFwcGVkOwotCX0KLX0KLQotc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAotCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKLXsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIxOwotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjI7Ci0Jc3RydWN0IGluNl9hZGRyIGFkZHIxX21hcHBlZDsKLQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjJfbWFwcGVkOwotCi0JYWRkcjEgPSBuZnNfbWFwX2lwdjRfYWRkcihzYTEsICZhZGRyMV9tYXBwZWQpOwotCWlmIChsaWtlbHkoYWRkcjEgIT0gTlVMTCkpIHsKLQkJYWRkcjIgPSBuZnNfbWFwX2lwdjRfYWRkcihzYTIsICZhZGRyMl9tYXBwZWQpOwotCQlpZiAobGlrZWx5KGFkZHIyICE9IE5VTEwpKQotCQkJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbChhZGRyMSwgYWRkcjIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFRlc3QgaWYgdHdvIGlwNiBzb2NrZXQgYWRkcmVzc2VzIHJlZmVyIHRvIHRoZSBzYW1lIHNvY2tldCBieQogICogY29tcGFyaW5nIHJlbGV2YW50IGZpZWxkcy4gVGhlIHBhZGRpbmcgYnl0ZXMgc3BlY2lmaWNhbGx5LCBhcmUgbm90CkBAIC0yNjcsMzggKzI0MCwyMSBAQAogICoKICAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSBib3RoIHNvY2tldCBhZGRyZXNzZXMgYXJlIEFGX0lORVQ2LgogICovCi1zdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXBfaXA2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAotCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQorc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKIHsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMTsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYWRkcjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EyOwogCi0JaWYgKCFpcHY2X2FkZHJfZXF1YWwoJnNhZGRyMS0+c2luNl9hZGRyLAotCQkJICAgICAmc2FkZHIxLT5zaW42X2FkZHIpKQorCWlmIChpcHY2X2FkZHJfc2NvcGUoJnNpbjEtPnNpbjZfYWRkcikgPT0gSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCAmJgorCSAgICBzaW4xLT5zaW42X3Njb3BlX2lkICE9IHNpbjItPnNpbjZfc2NvcGVfaWQpCiAJCXJldHVybiAwOwotCWlmIChpcHY2X2FkZHJfc2NvcGUoJnNhZGRyMS0+c2luNl9hZGRyKSA9PSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMICYmCi0JICAgIHNhZGRyMS0+c2luNl9zY29wZV9pZCAhPSBzYWRkcjItPnNpbjZfc2NvcGVfaWQpCi0JCXJldHVybiAwOwotCXJldHVybiBzYWRkcjEtPnNpbjZfcG9ydCA9PSBzYWRkcjItPnNpbjZfcG9ydDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI0KGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2ExLAotCQkJCSBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhMikKLXsKLQlyZXR1cm4gc2ExLT5zaW5fYWRkci5zX2FkZHIgPT0gc2EyLT5zaW5fYWRkci5zX2FkZHI7Ci19CiAKLXN0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKLQkJCQkgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCi17Ci0JaWYgKHVubGlrZWx5KHNhMS0+c2FfZmFtaWx5ICE9IEFGX0lORVQgfHwgc2EyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkpCi0JCXJldHVybiAwOwotCXJldHVybiBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExLAotCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMik7CisJcmV0dXJuIGlwdjZfYWRkcl9lcXVhbCgmc2luMS0+c2luNl9hZGRyLCAmc2luMS0+c2luNl9hZGRyKTsKIH0KLQotc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wX2lwNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBzYTEsCi0JCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICogc2EyKQorI2Vsc2UJLyogIWRlZmluZWQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTEsMjAgKzI2Nyw1NyBAQAogICoKICAqIFRoZSBjYWxsZXIgc2hvdWxkIGVuc3VyZSBib3RoIHNvY2tldCBhZGRyZXNzZXMgYXJlIEFGX0lORVQuCiAgKi8KK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2EyOworCisJcmV0dXJuIHNpbjEtPnNpbl9hZGRyLnNfYWRkciA9PSBzaW4yLT5zaW5fYWRkci5zX2FkZHI7Cit9CisKK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcF9pcDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCisJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2ExOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKKworCXJldHVybiBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNihzYTEsIHNhMikgJiYKKwkJKHNpbjEtPnNpbjZfcG9ydCA9PSBzaW4yLT5zaW42X3BvcnQpOworfQorCiBzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXBfaXA0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAogCQkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQogewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHIxID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMTsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTI7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2EyOwogCi0JaWYgKHNhZGRyMS0+c2luX2FkZHIuc19hZGRyICE9IHNhZGRyMi0+c2luX2FkZHIuc19hZGRyKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc2FkZHIxLT5zaW5fcG9ydCA9PSBzYWRkcjItPnNpbl9wb3J0OworCXJldHVybiBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNChzYTEsIHNhMikgJiYKKwkJKHNpbjEtPnNpbl9wb3J0ID09IHNpbjItPnNpbl9wb3J0KTsKIH0KIAogLyoKICAqIFRlc3QgaWYgdHdvIHNvY2tldCBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIGFjdHVhbCBzb2NrZXQsCi0gKiBieSBjb21wYXJpbmcgKG9ubHkpIHJlbGV2YW50IGZpZWxkcy4KKyAqIGJ5IGNvbXBhcmluZyAob25seSkgcmVsZXZhbnQgZmllbGRzLCBleGNsdWRpbmcgdGhlIHBvcnQgbnVtYmVyLgorICovCitzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKK3sKKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChzYTEtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI0KHNhMSwgc2EyKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjYoc2ExLCBzYTIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlc3QgaWYgdHdvIHNvY2tldCBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIGFjdHVhbCBzb2NrZXQsCisgKiBieSBjb21wYXJpbmcgKG9ubHkpIHJlbGV2YW50IGZpZWxkcywgaW5jbHVkaW5nIHRoZSBwb3J0IG51bWJlci4KICAqLwogc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAogCQkJICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQpAQCAtNzcyLDYgKzc2NSw3IEBACiAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwogCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFnczsKKwlzZXJ2ZXItPm9wdGlvbnMgPSBkYXRhLT5vcHRpb25zOwogCiAJaWYgKGRhdGEtPnJzaXplKQogCQlzZXJ2ZXItPnJzaXplID0gbmZzX2Jsb2NrX3NpemUoZGF0YS0+cnNpemUsIE5VTEwpOwpAQCAtMTE2MCw2ICsxMTU0LDcgQEAKIAkvKiBJbml0aWFsaXNlIHRoZSBjbGllbnQgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgbW91bnQgZGF0YSAqLwogCXNlcnZlci0+ZmxhZ3MgPSBkYXRhLT5mbGFnczsKIAlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9BVE9NSUNfT1BFTjsKKwlzZXJ2ZXItPm9wdGlvbnMgPSBkYXRhLT5vcHRpb25zOwogCiAJLyogR2V0IGEgY2xpZW50IHJlY29yZCAqLwogCWVycm9yID0gbmZzNF9zZXRfY2xpZW50KHNlcnZlciwKQEAgLTE1NzEsNyArMTU2Niw3IEBACiAKIAkvKiBkaXNwbGF5IGhlYWRlciBvbiBsaW5lIDEgKi8KIAlpZiAodiA9PSAmbmZzX3ZvbHVtZV9saXN0KSB7Ci0JCXNlcV9wdXRzKG0sICJOViBTRVJWRVIgICBQT1JUIERFViAgICAgRlNJRFxuIik7CisJCXNlcV9wdXRzKG0sICJOViBTRVJWRVIgICBQT1JUIERFViAgICAgRlNJRCAgICAgICAgICAgICAgRlNDXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGRpc3BsYXkgb25lIHRyYW5zcG9ydCBwZXIgbGluZSBvbiBzdWJzZXF1ZW50IGxpbmVzICovCkBAIC0xNTg1LDEyICsxNTgwLDEzIEBACiAJCSAodW5zaWduZWQgbG9uZyBsb25nKSBzZXJ2ZXItPmZzaWQubWFqb3IsCiAJCSAodW5zaWduZWQgbG9uZyBsb25nKSBzZXJ2ZXItPmZzaWQubWlub3IpOwogCi0Jc2VxX3ByaW50ZihtLCAidiV1ICVzICVzICUtN3MgJS0xN3NcbiIsCisJc2VxX3ByaW50ZihtLCAidiV1ICVzICVzICUtN3MgJS0xN3MgJXNcbiIsCiAJCSAgIGNscC0+cnBjX29wcy0+dmVyc2lvbiwKIAkJICAgcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwgUlBDX0RJU1BMQVlfSEVYX0FERFIpLAogCQkgICBycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9IRVhfUE9SVCksCiAJCSAgIGRldiwKLQkJICAgZnNpZCk7CisJCSAgIGZzaWQsCisJCSAgIG5mc19zZXJ2ZXJfZnNjYWNoZV9zdGF0ZShzZXJ2ZXIpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTYwNiw4ICsxNjAyLDYgQEAKIAlpZiAoIXByb2NfZnNfbmZzKQogCQlnb3RvIGVycm9yXzA7CiAKLQlwcm9jX2ZzX25mcy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIGEgZmlsZSBvZiBzZXJ2ZXJzIHdpdGggd2hpY2ggd2UncmUgZGVhbGluZyAqLwogCXAgPSBwcm9jX2NyZWF0ZSgic2VydmVycyIsIFNfSUZSRUd8U19JUlVHTywKIAkJCXByb2NfZnNfbmZzLCAmbmZzX3NlcnZlcl9saXN0X2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDc4YmY3MmYuLjM3MGIxOTAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE2MjQsOCArMTYyNCw3IEBACiAJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJm5ld19kZW50cnktPmRfY291bnQpID4gMSkKIAkJCS8qIGRlbnRyeSBzdGlsbCBidXN5PyAqLwogCQkJZ290byBvdXQ7Ci0JfSBlbHNlCi0JCW5mc19kcm9wX25saW5rKG5ld19pbm9kZSk7CisJfQogCiBnb19haGVhZDoKIAkvKgpAQCAtMTYzOCwxMCArMTYzNyw4IEBACiAJfQogCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihvbGRfaW5vZGUpOwogCi0JaWYgKG5ld19pbm9kZSAhPSBOVUxMKSB7CisJaWYgKG5ld19pbm9kZSAhPSBOVUxMKQogCQluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24obmV3X2lub2RlKTsKLQkJZF9kZWxldGUobmV3X2RlbnRyeSk7Ci0JfQogCiAJZXJyb3IgPSBORlNfUFJPVE8ob2xkX2RpciktPnJlbmFtZShvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLAogCQkJCQkgICBuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lKTsKQEAgLTE2NTAsNiArMTY0Nyw4IEBACiAJaWYgKHJlaGFzaCkKIAkJZF9yZWhhc2gocmVoYXNoKTsKIAlpZiAoIWVycm9yKSB7CisJCWlmIChuZXdfaW5vZGUgIT0gTlVMTCkKKwkJCW5mc19kcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCWRfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5KTsKIAkJbmZzX3NldF92ZXJpZmllcihuZXdfZGVudHJ5LAogCQkJCQluZnNfc2F2ZV9jaGFuZ2VfYXR0cmlidXRlKG5ld19kaXIpKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDkwZjI5MmIuLjM1MjNiODkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19GSUxFCiAKQEAgLTY0LDExICs2NSw3IEBACiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkCT0gbmZzX2ZpbGVfcmVhZCwKIAkuYWlvX3dyaXRlCT0gbmZzX2ZpbGVfd3JpdGUsCi0jaWZkZWYgQ09ORklHX01NVQogCS5tbWFwCQk9IG5mc19maWxlX21tYXAsCi0jZWxzZQotCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAotI2VuZGlmCiAJLm9wZW4JCT0gbmZzX2ZpbGVfb3BlbiwKIAkuZmx1c2gJCT0gbmZzX2ZpbGVfZmx1c2gsCiAJLnJlbGVhc2UJPSBuZnNfZmlsZV9yZWxlYXNlLApAQCAtMTQxLDkgKzEzOCw2IEBACiAJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKIAkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0JLyogRW5zdXJlIHRoYXQgZGlydHkgcGFnZXMgYXJlIGZsdXNoZWQgb3V0IHdpdGggdGhlIHJpZ2h0IGNyZWRzICovCi0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQluZnNfd2JfYWxsKGRlbnRyeS0+ZF9pbm9kZSk7CiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1ZGU1JFTEVBU0UpOwogCXJldHVybiBuZnNfcmVsZWFzZShpbm9kZSwgZmlscCk7CiB9CkBAIC0yMzUsNyArMjI5LDYgQEAKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOwogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQJCXN0YXR1czsKIAogCWRwcmludGsoIk5GUzogZmx1c2goJXMvJXMpXG4iLAogCQkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCkBAIC0yNDUsMTEgKzIzOCw4IEBACiAJCXJldHVybiAwOwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNGTFVTSCk7CiAKLQkvKiBFbnN1cmUgdGhhdCBkYXRhK2F0dHJpYnV0ZSBjYWNoZXMgYXJlIHVwIHRvIGRhdGUgYWZ0ZXIgY2xvc2UoKSAqLwotCXN0YXR1cyA9IG5mc19kb19mc3luYyhjdHgsIGlub2RlKTsKLQlpZiAoIXN0YXR1cykKLQkJbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihpbm9kZSksIGlub2RlKTsKLQlyZXR1cm4gc3RhdHVzOworCS8qIEZsdXNoIHdyaXRlcyB0byB0aGUgc2VydmVyIGFuZCByZXR1cm4gYW55IGVycm9ycyAqLworCXJldHVybiBuZnNfZG9fZnN5bmMoY3R4LCBpbm9kZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMDQsMTEgKzI5NCwxMyBAQAogCWRwcmludGsoIk5GUzogbW1hcCglcy8lcylcbiIsCiAJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCXN0YXR1cyA9IG5mc19yZXZhbGlkYXRlX21hcHBpbmcoaW5vZGUsIGZpbGUtPmZfbWFwcGluZyk7CisJLyogTm90ZTogZ2VuZXJpY19maWxlX21tYXAoKSByZXR1cm5zIEVOT1NZUyBvbiBub21tdSBzeXN0ZW1zCisJICogICAgICAgc28gd2UgY2FsbCB0aGF0IGJlZm9yZSByZXZhbGlkYXRpbmcgdGhlIG1hcHBpbmcKKwkgKi8KKwlzdGF0dXMgPSBnZW5lcmljX2ZpbGVfbW1hcChmaWxlLCB2bWEpOwogCWlmICghc3RhdHVzKSB7CiAJCXZtYS0+dm1fb3BzID0gJm5mc19maWxlX3ZtX29wczsKLQkJdm1hLT52bV9mbGFncyB8PSBWTV9DQU5fTk9OTElORUFSOwotCQlmaWxlX2FjY2Vzc2VkKGZpbGUpOworCQlzdGF0dXMgPSBuZnNfcmV2YWxpZGF0ZV9tYXBwaW5nKGlub2RlLCBmaWxlLT5mX21hcHBpbmcpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzU0LDYgKzM0NiwxNSBAQAogCQlmaWxlLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJbWFwcGluZy0+aG9zdC0+aV9pbm8sIGxlbiwgKGxvbmcgbG9uZykgcG9zKTsKIAorCS8qCisJICogUHJldmVudCBzdGFydmF0aW9uIGlzc3VlcyBpZiBzb21lb25lIGlzIGRvaW5nIGEgY29uc2lzdGVuY3kKKwkgKiBzeW5jLXRvLWRpc2sKKwkgKi8KKwlyZXQgPSB3YWl0X29uX2JpdCgmTkZTX0kobWFwcGluZy0+aG9zdCktPmZsYWdzLCBORlNfSU5PX0ZMVVNISU5HLAorCQkJbmZzX3dhaXRfYml0X2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZV93cml0ZV9iZWdpbihtYXBwaW5nLCBpbmRleCwgZmxhZ3MpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00MDksNiArNDEwLDEzIEBACiAJcmV0dXJuIGNvcGllZDsKIH0KIAorLyoKKyAqIFBhcnRpYWxseSBvciB3aG9sbHkgaW52YWxpZGF0ZSBhIHBhZ2UKKyAqIC0gUmVsZWFzZSB0aGUgcHJpdmF0ZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIGlmIHVuZGVyZ29pbmcgY29tcGxldGUKKyAqICAgcGFnZSBpbnZhbGlkYXRpb24KKyAqIC0gQ2FsbGVkIGlmIGVpdGhlciBQR19wcml2YXRlIG9yIFBHX2ZzY2FjaGUgaXMgc2V0IG9uIHRoZSBwYWdlCisgKiAtIENhbGxlciBob2xkcyBwYWdlIGxvY2sKKyAqLwogc3RhdGljIHZvaWQgbmZzX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJZGZwcmludGsoUEFHRUNBQ0hFLCAiTkZTOiBpbnZhbGlkYXRlX3BhZ2UoJXAsICVsdSlcbiIsIHBhZ2UsIG9mZnNldCk7CkBAIC00MTcsMjMgKzQyNSw0MyBAQAogCQlyZXR1cm47CiAJLyogQ2FuY2VsIGFueSB1bnN0YXJ0ZWQgd3JpdGVzIG9uIHRoaXMgcGFnZSAqLwogCW5mc193Yl9wYWdlX2NhbmNlbChwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlKTsKKworCW5mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShwYWdlLCBwYWdlLT5tYXBwaW5nLT5ob3N0KTsKIH0KIAorLyoKKyAqIEF0dGVtcHQgdG8gcmVsZWFzZSB0aGUgcHJpdmF0ZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlCisgKiAtIENhbGxlZCBpZiBlaXRoZXIgUEdfcHJpdmF0ZSBvciBQR19mc2NhY2hlIGlzIHNldCBvbiB0aGUgcGFnZQorICogLSBDYWxsZXIgaG9sZHMgcGFnZSBsb2NrCisgKiAtIFJldHVybiB0cnVlIChtYXkgcmVsZWFzZSBwYWdlKSBvciBmYWxzZSAobWF5IG5vdCkKKyAqLwogc3RhdGljIGludCBuZnNfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCiB7CiAJZGZwcmludGsoUEFHRUNBQ0hFLCAiTkZTOiByZWxlYXNlX3BhZ2UoJXApXG4iLCBwYWdlKTsKIAogCS8qIElmIFBhZ2VQcml2YXRlKCkgaXMgc2V0LCB0aGVuIHRoZSBwYWdlIGlzIG5vdCBmcmVlYWJsZSAqLwotCXJldHVybiAwOworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShwYWdlLCBnZnApOwogfQogCisvKgorICogQXR0ZW1wdCB0byBjbGVhciB0aGUgcHJpdmF0ZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIHdoZW4gYW4gZXJyb3IKKyAqIG9jY3VycyB0aGF0IHJlcXVpcmVzIHRoZSBjYWNoZWQgY29udGVudHMgb2YgYW4gaW5vZGUgdG8gYmUgd3JpdHRlbiBiYWNrIG9yCisgKiBkZXN0cm95ZWQKKyAqIC0gQ2FsbGVkIGlmIGVpdGhlciBQR19wcml2YXRlIG9yIGZzY2FjaGUgaXMgc2V0IG9uIHRoZSBwYWdlCisgKiAtIENhbGxlciBob2xkcyBwYWdlIGxvY2sKKyAqIC0gUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLWVycm9yIG90aGVyd2lzZQorICovCiBzdGF0aWMgaW50IG5mc19sYXVuZGVyX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKIAogCWRmcHJpbnRrKFBBR0VDQUNIRSwgIk5GUzogbGF1bmRlcl9wYWdlKCVsZCwgJWxsdSlcbiIsCiAJCWlub2RlLT5pX2lubywgKGxvbmcgbG9uZylwYWdlX29mZnNldChwYWdlKSk7CiAKKwluZnNfZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUobmZzaSwgcGFnZSk7CiAJcmV0dXJuIG5mc193Yl9wYWdlKGlub2RlLCBwYWdlKTsKIH0KIApAQCAtNDUxLDggKzQ3OSwxNCBAQAogCS5sYXVuZGVyX3BhZ2UgPSBuZnNfbGF1bmRlcl9wYWdlLAogfTsKIAotc3RhdGljIGludCBuZnNfdm1fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qCisgKiBOb3RpZmljYXRpb24gdGhhdCBhIFBURSBwb2ludGluZyB0byBhbiBORlMgcGFnZSBpcyBhYm91dCB0byBiZSBtYWRlCisgKiB3cml0YWJsZSwgaW1wbHlpbmcgdGhhdCBzb21lb25lIGlzIGFib3V0IHRvIG1vZGlmeSB0aGUgcGFnZSB0aHJvdWdoIGEKKyAqIHNoYXJlZC13cml0YWJsZSBtYXBwaW5nCisgKi8KK3N0YXRpYyBpbnQgbmZzX3ZtX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWYtPnBhZ2U7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSB2bWEtPnZtX2ZpbGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAl1bnNpZ25lZCBwYWdlbGVuOwpAQCAtNDY0LDYgKzQ5OCw5IEBACiAJCWZpbHAtPmZfbWFwcGluZy0+aG9zdC0+aV9pbm8sCiAJCShsb25nIGxvbmcpcGFnZV9vZmZzZXQocGFnZSkpOwogCisJLyogbWFrZSBzdXJlIHRoZSBjYWNoZSBoYXMgZmluaXNoZWQgc3RvcmluZyB0aGUgcGFnZSAqLworCW5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShORlNfSShkZW50cnktPmRfaW5vZGUpLCBwYWdlKTsKKwogCWxvY2tfcGFnZShwYWdlKTsKIAltYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAlpZiAobWFwcGluZyAhPSBkZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZykKQEAgLTQ4Myw2ICs1MjAsOCBAQAogCQlyZXQgPSBwYWdlbGVuOwogb3V0X3VubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKKwlpZiAocmV0KQorCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUtaW5kZXguYyBiL2ZzL25mcy9mc2NhY2hlLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxMDA2NAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9mc2NhY2hlLWluZGV4LmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qIE5GUyBGUy1DYWNoZSBpbmRleCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnNfc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgorCisjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX0ZTQ0FDSEUKKworLyoKKyAqIERlZmluZSB0aGUgTkZTIGZpbGVzeXN0ZW0gZm9yIEZTLUNhY2hlLiAgVXBvbiByZWdpc3RyYXRpb24gRlMtQ2FjaGUgc3RpY2tzCisgKiB0aGUgY29va2llIGZvciB0aGUgdG9wLWxldmVsIGluZGV4IG9iamVjdCBmb3IgTkZTIGludG8gaGVyZS4gIFRoZSB0b3AtbGV2ZWwKKyAqIGluZGV4IGNhbiB0aGFuIGhhdmUgb3RoZXIgY2FjaGUgb2JqZWN0cyBpbnNlcnRlZCBpbnRvIGl0LgorICovCitzdHJ1Y3QgZnNjYWNoZV9uZXRmcyBuZnNfZnNjYWNoZV9uZXRmcyA9IHsKKwkubmFtZQkJPSAibmZzIiwKKwkudmVyc2lvbgk9IDAsCit9OworCisvKgorICogUmVnaXN0ZXIgTkZTIGZvciBjYWNoaW5nCisgKi8KK2ludCBuZnNfZnNjYWNoZV9yZWdpc3Rlcih2b2lkKQoreworCXJldHVybiBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKCZuZnNfZnNjYWNoZV9uZXRmcyk7Cit9CisKKy8qCisgKiBVbnJlZ2lzdGVyIE5GUyBmb3IgY2FjaGluZworICovCit2b2lkIG5mc19mc2NhY2hlX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoJm5mc19mc2NhY2hlX25ldGZzKTsKK30KKworLyoKKyAqIExheW91dCBvZiB0aGUga2V5IGZvciBhbiBORlMgc2VydmVyIGNhY2hlIG9iamVjdC4KKyAqLworc3RydWN0IG5mc19zZXJ2ZXJfa2V5IHsKKwl1aW50MTZfdAluZnN2ZXJzaW9uOwkJLyogTkZTIHByb3RvY29sIHZlcnNpb24gKi8KKwl1aW50MTZfdAlmYW1pbHk7CQkJLyogYWRkcmVzcyBmYW1pbHkgKi8KKwl1aW50MTZfdAlwb3J0OwkJCS8qIElQIHBvcnQgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCBpbl9hZGRyCWlwdjRfYWRkcjsJLyogSVB2NCBhZGRyZXNzICovCisJCXN0cnVjdCBpbjZfYWRkciBpcHY2X2FkZHI7CS8qIElQdjYgYWRkcmVzcyAqLworCX0gYWRkclswXTsKK307CisKKy8qCisgKiBHZW5lcmF0ZSBhIGtleSB0byBkZXNjcmliZSBhIHNlcnZlciBpbiB0aGUgbWFpbiBORlMgaW5kZXgKKyAqIC0gV2UgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGtleSwgb3IgMCBpZiB3ZSBjYW4ndCBnZW5lcmF0ZSBvbmUKKyAqLworc3RhdGljIHVpbnQxNl90IG5mc19zZXJ2ZXJfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gY29va2llX25ldGZzX2RhdGE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopICZjbHAtPmNsX2FkZHI7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZjbHAtPmNsX2FkZHI7CisJc3RydWN0IG5mc19zZXJ2ZXJfa2V5ICprZXkgPSBidWZmZXI7CisJdWludDE2X3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBuZnNfc2VydmVyX2tleSk7CisKKwlrZXktPm5mc3ZlcnNpb24gPSBjbHAtPnJwY19vcHMtPnZlcnNpb247CisJa2V5LT5mYW1pbHkgPSBjbHAtPmNsX2FkZHIuc3NfZmFtaWx5OworCisJbWVtc2V0KGtleSwgMCwgbGVuKTsKKworCXN3aXRjaCAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJa2V5LT5wb3J0ID0gc2luLT5zaW5fcG9ydDsKKwkJa2V5LT5hZGRyWzBdLmlwdjRfYWRkciA9IHNpbi0+c2luX2FkZHI7CisJCWxlbiArPSBzaXplb2Yoa2V5LT5hZGRyWzBdLmlwdjRfYWRkcik7CisJCWJyZWFrOworCisJY2FzZSBBRl9JTkVUNjoKKwkJa2V5LT5wb3J0ID0gc2luNi0+c2luNl9wb3J0OworCQlrZXktPmFkZHJbMF0uaXB2Nl9hZGRyID0gc2luNi0+c2luNl9hZGRyOworCQlsZW4gKz0gc2l6ZW9mKGtleS0+YWRkclswXS5pcHY2X2FkZHIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GUzogVW5rbm93biBuZXR3b3JrIGZhbWlseSAnJWQnXG4iLAorCQkgICAgICAgY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSk7CisJCWxlbiA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBEZWZpbmUgdGhlIHNlcnZlciBvYmplY3QgZm9yIEZTLUNhY2hlLiAgVGhpcyBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc2VydmVyCisgKiBvYmplY3QgdG8gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgpLiAgSXQgaXMga2V5ZWQgYnkgdGhlIE5GUyBwcm90b2NvbCBhbmQKKyAqIHNlcnZlciBhZGRyZXNzIHBhcmFtZXRlcnMuCisgKi8KK2NvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJPSAiTkZTLnNlcnZlciIsCisJLnR5cGUgCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJPSBuZnNfc2VydmVyX2dldF9rZXksCit9OworCisvKgorICogR2VuZXJhdGUgYSBrZXkgdG8gZGVzY3JpYmUgYSBzdXBlcmJsb2NrIGtleSBpbiB0aGUgbWFpbiBORlMgaW5kZXgKKyAqLworc3RhdGljIHVpbnQxNl90IG5mc19zdXBlcl9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IG5mc19mc2NhY2hlX2tleSAqa2V5OworCWNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3QgbGVuOworCisJa2V5ID0gbmZzcy0+ZnNjYWNoZV9rZXk7CisJbGVuID0gc2l6ZW9mKGtleS0+a2V5KSArIGtleS0+a2V5LnVuaXFfbGVuOworCWlmIChsZW4gPiBidWZtYXgpIHsKKwkJbGVuID0gMDsKKwl9IGVsc2UgeworCQltZW1jcHkoYnVmZmVyLCAma2V5LT5rZXksIHNpemVvZihrZXktPmtleSkpOworCQltZW1jcHkoYnVmZmVyICsgc2l6ZW9mKGtleS0+a2V5KSwKKwkJICAgICAgIGtleS0+a2V5LnVuaXF1aWZpZXIsIGtleS0+a2V5LnVuaXFfbGVuKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogRGVmaW5lIHRoZSBzdXBlcmJsb2NrIG9iamVjdCBmb3IgRlMtQ2FjaGUuICBUaGlzIGlzIHVzZWQgdG8gZGVzY3JpYmUgYQorICogc3VwZXJibG9jayBvYmplY3QgdG8gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgpLiAgSXQgaXMga2V5ZWQgYnkgYWxsIHRoZSBORlMKKyAqIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBjYXVzZSBhIHNlcGFyYXRlIHN1cGVyYmxvY2suCisgKi8KK2NvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfc3VwZXJfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICJORlMuc3VwZXIiLAorCS50eXBlIAkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gbmZzX3N1cGVyX2dldF9rZXksCit9OworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEgYXR0YWNoZWQgdG8gTkZTIGlub2RlIHN0b3JhZ2Ugb2JqZWN0cworICogd2l0aGluIHRoZSBjYWNoZS4KKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3QgYXJlIHJlY29yZGVkIGluIHRoZSBvbi1kaXNrIGxvY2FsIGNhY2hlIGluIHRoZQorICogYXV4aWxpYXJ5IGRhdGEgYXR0YWNoZWQgdG8gdGhlIGRhdGEgc3RvcmFnZSBvYmplY3QgYmFja2luZyBhbiBpbm9kZS4gIFRoaXMKKyAqIHBlcm1pdHMgY29oZXJlbmN5IHRvIGJlIG1hbmFnZWQgd2hlbiBhIG5ldyBpbm9kZSBiaW5kcyB0byBhbiBhbHJlYWR5IGV4dGFudAorICogY2FjaGUgb2JqZWN0LgorICovCitzdHJ1Y3QgbmZzX2ZzY2FjaGVfaW5vZGVfYXV4ZGF0YSB7CisJc3RydWN0IHRpbWVzcGVjCW10aW1lOworCXN0cnVjdCB0aW1lc3BlYwljdGltZTsKKwlsb2ZmX3QJCXNpemU7CisJdTY0CQljaGFuZ2VfYXR0cjsKK307CisKKy8qCisgKiBHZW5lcmF0ZSBhIGtleSB0byBkZXNjcmliZSBhbiBORlMgaW5vZGUgaW4gYW4gTkZTIHNlcnZlcidzIGluZGV4CisgKi8KK3N0YXRpYyB1aW50MTZfdCBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBuc2l6ZTsKKworCS8qIHVzZSB0aGUgaW5vZGUncyBORlMgZmlsZWhhbmRsZSBhcyB0aGUga2V5ICovCisJbnNpemUgPSBuZnNpLT5maC5zaXplOworCW1lbWNweShidWZmZXIsIG5mc2ktPmZoLmRhdGEsIG5zaXplKTsKKwlyZXR1cm4gbnNpemU7Cit9CisKKy8qCisgKiBHZXQgY2VydGFpbiBmaWxlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgbmV0ZnMgZGF0YQorICogLSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgZm9yIGFuIGluZGV4CisgKiAtIE5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCisgKiAtIFRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSBzb3VyY2UgaXMgcHJlc2VudGVkCisgKi8KK3N0YXRpYyB2b2lkIG5mc19mc2NhY2hlX2lub2RlX2dldF9hdHRyKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgICB1aW50NjRfdCAqc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwkqc2l6ZSA9IG5mc2ktPnZmc19pbm9kZS5pX3NpemU7Cit9CisKKy8qCisgKiBHZXQgdGhlIGF1eGlsaWFyeSBkYXRhIGZyb20gbmV0ZnMgZGF0YQorICogLSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGluZGV4IGNhcnJpZXMgbm8gc3RhdGUgZGF0YQorICogLSBTaG91bGQgc3RvcmUgdGhlIGF1eGlsaWFyeSBkYXRhIGluIHRoZSBidWZmZXIKKyAqIC0gU2hvdWxkIHJldHVybiB0aGUgYW1vdW50IG9mIGFtb3VudCBzdG9yZWQKKyAqIC0gTm90IHBlcm1pdHRlZCB0byByZXR1cm4gYW4gZXJyb3IKKyAqIC0gVGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcyBwcmVzZW50ZWQKKyAqLworc3RhdGljIHVpbnQxNl90IG5mc19mc2NhY2hlX2lub2RlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJc3RydWN0IG5mc19mc2NhY2hlX2lub2RlX2F1eGRhdGEgYXV4ZGF0YTsKKwljb25zdCBzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwltZW1zZXQoJmF1eGRhdGEsIDAsIHNpemVvZihhdXhkYXRhKSk7CisJYXV4ZGF0YS5zaXplID0gbmZzaS0+dmZzX2lub2RlLmlfc2l6ZTsKKwlhdXhkYXRhLm10aW1lID0gbmZzaS0+dmZzX2lub2RlLmlfbXRpbWU7CisJYXV4ZGF0YS5jdGltZSA9IG5mc2ktPnZmc19pbm9kZS5pX2N0aW1lOworCisJaWYgKE5GU19TRVJWRVIoJm5mc2ktPnZmc19pbm9kZSktPm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24gPT0gNCkKKwkJYXV4ZGF0YS5jaGFuZ2VfYXR0ciA9IG5mc2ktPmNoYW5nZV9hdHRyOworCisJaWYgKGJ1Zm1heCA+IHNpemVvZihhdXhkYXRhKSkKKwkJYnVmbWF4ID0gc2l6ZW9mKGF1eGRhdGEpOworCisJbWVtY3B5KGJ1ZmZlciwgJmF1eGRhdGEsIGJ1Zm1heCk7CisJcmV0dXJuIGJ1Zm1heDsKK30KKworLyoKKyAqIENvbnN1bHQgdGhlIG5ldGZzIGFib3V0IHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QKKyAqIC0gVGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKKyAqIC0gVGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHRhcmdldCBpcworICogICBwcmVzZW50ZWQsIGFzIGlzIHRoZSBhdXhpbGlhcnkgZGF0YQorICovCitzdGF0aWMKK2VudW0gZnNjYWNoZV9jaGVja2F1eCBuZnNfZnNjYWNoZV9pbm9kZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCQkgIHVpbnQxNl90IGRhdGFsZW4pCit7CisJc3RydWN0IG5mc19mc2NhY2hlX2lub2RlX2F1eGRhdGEgYXV4ZGF0YTsKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gY29va2llX25ldGZzX2RhdGE7CisKKwlpZiAoZGF0YWxlbiAhPSBzaXplb2YoYXV4ZGF0YSkpCisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOworCisJbWVtc2V0KCZhdXhkYXRhLCAwLCBzaXplb2YoYXV4ZGF0YSkpOworCWF1eGRhdGEuc2l6ZSA9IG5mc2ktPnZmc19pbm9kZS5pX3NpemU7CisJYXV4ZGF0YS5tdGltZSA9IG5mc2ktPnZmc19pbm9kZS5pX210aW1lOworCWF1eGRhdGEuY3RpbWUgPSBuZnNpLT52ZnNfaW5vZGUuaV9jdGltZTsKKworCWlmIChORlNfU0VSVkVSKCZuZnNpLT52ZnNfaW5vZGUpLT5uZnNfY2xpZW50LT5ycGNfb3BzLT52ZXJzaW9uID09IDQpCisJCWF1eGRhdGEuY2hhbmdlX2F0dHIgPSBuZnNpLT5jaGFuZ2VfYXR0cjsKKworCWlmIChtZW1jbXAoZGF0YSwgJmF1eGRhdGEsIGRhdGFsZW4pICE9IDApCisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOworCisJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWTsKK30KKworLyoKKyAqIEluZGljYXRpb24gZnJvbSBGUy1DYWNoZSB0aGF0IHRoZSBjb29raWUgaXMgbm8gbG9uZ2VyIGNhY2hlZAorICogLSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHN0b3JlIGN1cnJlbnRseSBjYWNoaW5nIGEgY29va2llCisgKiAgIGlzIHJlbW92ZWQKKyAqIC0gVGhlIG5ldGZzIHNob3VsZCB1c2UgdGhpcyB0byBjbGVhbiB1cCBhbnkgbWFya2VycyBpbmRpY2F0aW5nIGNhY2hlZCBwYWdlcworICogLSBUaGlzIGlzIG1hbmRhdG9yeSBmb3IgYW55IG9iamVjdCB0aGF0IG1heSBoYXZlIGRhdGEKKyAqLworc3RhdGljIHZvaWQgbmZzX2ZzY2FjaGVfaW5vZGVfbm93X3VuY2FjaGVkKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXBnb2ZmX3QgZmlyc3Q7CisJaW50IGxvb3AsIG5yX3BhZ2VzOworCisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwlmaXJzdCA9IDA7CisKKwlkcHJpbnRrKCJORlM6IG5mc19pbm9kZV9ub3dfdW5jYWNoZWQ6IG5mc19pbm9kZSAweCVwXG4iLCBuZnNpKTsKKworCWZvciAoOzspIHsKKwkJLyogZ3JhYiBhIGJ1bmNoIG9mIHBhZ2VzIHRvIHVubWFyayAqLworCQlucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwKCZwdmVjLAorCQkJCQkgIG5mc2ktPnZmc19pbm9kZS5pX21hcHBpbmcsCisJCQkJCSAgZmlyc3QsCisJCQkJCSAgUEFHRVZFQ19TSVpFIC0gcGFnZXZlY19jb3VudCgmcHZlYykpOworCQlpZiAoIW5yX3BhZ2VzKQorCQkJYnJlYWs7CisKKwkJZm9yIChsb29wID0gMDsgbG9vcCA8IG5yX3BhZ2VzOyBsb29wKyspCisJCQlDbGVhclBhZ2VGc0NhY2hlKHB2ZWMucGFnZXNbbG9vcF0pOworCisJCWZpcnN0ID0gcHZlYy5wYWdlc1tucl9wYWdlcyAtIDFdLT5pbmRleCArIDE7CisKKwkJcHZlYy5uciA9IG5yX3BhZ2VzOworCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQljb25kX3Jlc2NoZWQoKTsKKwl9Cit9CisKKy8qCisgKiBHZXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmVhZCBjb250ZXh0LgorICogLSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZG9lc24ndCByZXF1aXJlIGEKKyAqICAgY29udGV4dC4KKyAqIC0gVGhlIHJlYWQgY29udGV4dCBpcyBwYXNzZWQgYmFjayB0byBORlMgaW4gdGhlIGV2ZW50IHRoYXQgYSBkYXRhIHJlYWQgb24gdGhlCisgKiAgIGNhY2hlIGZhaWxzIHdpdGggRUlPIC0gaW4gd2hpY2ggY2FzZSB0aGUgc2VydmVyIG11c3QgYmUgY29udGFjdGVkIHRvCisgKiAgIHJldHJpZXZlIHRoZSBkYXRhLCB3aGljaCByZXF1aXJlcyB0aGUgcmVhZCBjb250ZXh0IGZvciBzZWN1cml0eS4KKyAqLworc3RhdGljIHZvaWQgbmZzX2ZoX2dldF9jb250ZXh0KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KQoreworCWdldF9uZnNfb3Blbl9jb250ZXh0KGNvbnRleHQpOworfQorCisvKgorICogUmVsZWFzZSBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZWFkIGNvbnRleHQuCisgKiAtIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYQorICogICBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBuZnNfZmhfcHV0X2NvbnRleHQodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpCit7CisJaWYgKGNvbnRleHQpCisJCXB1dF9uZnNfb3Blbl9jb250ZXh0KGNvbnRleHQpOworfQorCisvKgorICogRGVmaW5lIHRoZSBpbm9kZSBvYmplY3QgZm9yIEZTLUNhY2hlLiAgVGhpcyBpcyB1c2VkIHRvIGRlc2NyaWJlIGFuIGlub2RlCisgKiBvYmplY3QgdG8gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgpLiAgSXQgaXMga2V5ZWQgYnkgdGhlIE5GUyBmaWxlIGhhbmRsZSBmb3IKKyAqIGFuIGlub2RlLgorICoKKyAqIENvaGVyZW5jeSBpcyBtYW5hZ2VkIGJ5IGNvbXBhcmluZyB0aGUgY29waWVzIG9mIGlfc2l6ZSwgaV9tdGltZSBhbmQgaV9jdGltZQorICogaGVsZCBpbiB0aGUgY2FjaGUgYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSBkYXRhIHN0b3JhZ2Ugb2JqZWN0IHdpdGggdGhvc2UgaW4KKyAqIHRoZSBpbm9kZSBzdHJ1Y3QgaW4gbWVtb3J5LgorICovCitjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWYgPSB7CisJLm5hbWUJCT0gIk5GUy5maCIsCisJLnR5cGUJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRSwKKwkuZ2V0X2tleQk9IG5mc19mc2NhY2hlX2lub2RlX2dldF9rZXksCisJLmdldF9hdHRyCT0gbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2F0dHIsCisJLmdldF9hdXgJPSBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXV4LAorCS5jaGVja19hdXgJPSBuZnNfZnNjYWNoZV9pbm9kZV9jaGVja19hdXgsCisJLm5vd191bmNhY2hlZAk9IG5mc19mc2NhY2hlX2lub2RlX25vd191bmNhY2hlZCwKKwkuZ2V0X2NvbnRleHQJPSBuZnNfZmhfZ2V0X2NvbnRleHQsCisJLnB1dF9jb250ZXh0CT0gbmZzX2ZoX3B1dF9jb250ZXh0LAorfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9mc2NhY2hlLmMgYi9mcy9uZnMvZnNjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OWJlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvZnNjYWNoZS5jCkBAIC0wLDAgKzEsNTIzIEBACisvKiBORlMgZmlsZXN5c3RlbSBjYWNoZSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiaW9zdGF0LmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgorCisjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX0ZTQ0FDSEUKKworc3RhdGljIHN0cnVjdCByYl9yb290IG5mc19mc2NhY2hlX2tleXMgPSBSQl9ST09UOworc3RhdGljIERFRklORV9TUElOTE9DSyhuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCisvKgorICogR2V0IHRoZSBwZXItY2xpZW50IGluZGV4IGNvb2tpZSBmb3IgYW4gTkZTIGNsaWVudCBpZiB0aGUgYXBwcm9wcmlhdGUgbW91bnQKKyAqIGZsYWcgd2FzIHNldAorICogLSBXZSBhbHdheXMgdHJ5IGFuZCBnZXQgYW4gaW5kZXggY29va2llIGZvciB0aGUgY2xpZW50LCBidXQgZ2V0IGZpbGVoYW5kbGUKKyAqICAgY29va2llcyBvbiBhIHBlci1zdXBlcmJsb2NrIGJhc2lzLCBkZXBlbmRpbmcgb24gdGhlIG1vdW50IGZsYWdzCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwkvKiBjcmVhdGUgYSBjYWNoZSBpbmRleCBmb3IgbG9va2luZyB1cCBmaWxlaGFuZGxlcyAqLworCWNscC0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUobmZzX2ZzY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKKwkJCQkJICAgICAgJm5mc19mc2NhY2hlX3NlcnZlcl9pbmRleF9kZWYsCisJCQkJCSAgICAgIGNscCk7CisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZ2V0IGNsaWVudCBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBjbHAsIGNscC0+ZnNjYWNoZSk7Cit9CisKKy8qCisgKiBEaXNwb3NlIG9mIGEgcGVyLWNsaWVudCBjb29raWUKKyAqLwordm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiByZWxlYXNpbmcgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIGNscCwgY2xwLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoY2xwLT5mc2NhY2hlLCAwKTsKKwljbHAtPmZzY2FjaGUgPSBOVUxMOworfQorCisvKgorICogR2V0IHRoZSBjYWNoZSBjb29raWUgZm9yIGFuIE5GUyBzdXBlcmJsb2NrLiAgV2UgaGF2ZSB0byBoYW5kbGUKKyAqIHVuaXF1aWZpY2F0aW9uIGhlcmUgYmVjYXVzZSB0aGUgY2FjaGUgZG9lc24ndCBkbyBpdCBmb3IgdXMuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX2ZzY2FjaGVfa2V5ICprZXksICp4a2V5OworCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NCKHNiKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CisJY29uc3QgY2hhciAqdW5pcSA9IGRhdGEtPmZzY2FjaGVfdW5pcSA/OiAiIjsKKwlpbnQgZGlmZiwgdWxlbjsKKworCXVsZW4gPSBzdHJsZW4odW5pcSk7CisJa2V5ID0ga3phbGxvYyhzaXplb2YoKmtleSkgKyB1bGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtleSkKKwkJcmV0dXJuOworCisJa2V5LT5uZnNfY2xpZW50ID0gbmZzcy0+bmZzX2NsaWVudDsKKwlrZXktPmtleS5zdXBlci5zX2ZsYWdzID0gc2ItPnNfZmxhZ3MgJiBORlNfTVNfTUFTSzsKKwlrZXktPmtleS5uZnNfc2VydmVyLmZsYWdzID0gbmZzcy0+ZmxhZ3M7CisJa2V5LT5rZXkubmZzX3NlcnZlci5yc2l6ZSA9IG5mc3MtPnJzaXplOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIud3NpemUgPSBuZnNzLT53c2l6ZTsKKwlrZXktPmtleS5uZnNfc2VydmVyLmFjcmVnbWluID0gbmZzcy0+YWNyZWdtaW47CisJa2V5LT5rZXkubmZzX3NlcnZlci5hY3JlZ21heCA9IG5mc3MtPmFjcmVnbWF4OworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuYWNkaXJtaW4gPSBuZnNzLT5hY2Rpcm1pbjsKKwlrZXktPmtleS5uZnNfc2VydmVyLmFjZGlybWF4ID0gbmZzcy0+YWNkaXJtYXg7CisJa2V5LT5rZXkubmZzX3NlcnZlci5mc2lkID0gbmZzcy0+ZnNpZDsKKwlrZXktPmtleS5ycGNfYXV0aC5hdV9mbGF2b3IgPSBuZnNzLT5jbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcjsKKworCWtleS0+a2V5LnVuaXFfbGVuID0gdWxlbjsKKwltZW1jcHkoa2V5LT5rZXkudW5pcXVpZmllciwgdW5pcSwgdWxlbik7CisKKwlzcGluX2xvY2soJm5mc19mc2NhY2hlX2tleXNfbG9jayk7CisJcCA9ICZuZnNfZnNjYWNoZV9rZXlzLnJiX25vZGU7CisJcGFyZW50ID0gTlVMTDsKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXhrZXkgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBuZnNfZnNjYWNoZV9rZXksIG5vZGUpOworCisJCWlmIChrZXktPm5mc19jbGllbnQgPCB4a2V5LT5uZnNfY2xpZW50KQorCQkJZ290byBnb19sZWZ0OworCQlpZiAoa2V5LT5uZnNfY2xpZW50ID4geGtleS0+bmZzX2NsaWVudCkKKwkJCWdvdG8gZ29fcmlnaHQ7CisKKwkJZGlmZiA9IG1lbWNtcCgma2V5LT5rZXksICZ4a2V5LT5rZXksIHNpemVvZihrZXktPmtleSkpOworCQlpZiAoZGlmZiA8IDApCisJCQlnb3RvIGdvX2xlZnQ7CisJCWlmIChkaWZmID4gMCkKKwkJCWdvdG8gZ29fcmlnaHQ7CisKKwkJaWYgKGtleS0+a2V5LnVuaXFfbGVuID09IDApCisJCQlnb3RvIG5vbl91bmlxdWU7CisJCWRpZmYgPSBtZW1jbXAoa2V5LT5rZXkudW5pcXVpZmllciwKKwkJCSAgICAgIHhrZXktPmtleS51bmlxdWlmaWVyLAorCQkJICAgICAga2V5LT5rZXkudW5pcV9sZW4pOworCQlpZiAoZGlmZiA8IDApCisJCQlnb3RvIGdvX2xlZnQ7CisJCWlmIChkaWZmID4gMCkKKwkJCWdvdG8gZ29fcmlnaHQ7CisJCWdvdG8gbm9uX3VuaXF1ZTsKKworCWdvX2xlZnQ6CisJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJY29udGludWU7CisJZ29fcmlnaHQ6CisJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJfQorCisJcmJfbGlua19ub2RlKCZrZXktPm5vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZrZXktPm5vZGUsICZuZnNfZnNjYWNoZV9rZXlzKTsKKwlzcGluX3VubG9jaygmbmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKwluZnNzLT5mc2NhY2hlX2tleSA9IGtleTsKKworCS8qIGNyZWF0ZSBhIGNhY2hlIGluZGV4IGZvciBsb29raW5nIHVwIGZpbGVoYW5kbGVzICovCisJbmZzcy0+ZnNjYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUobmZzcy0+bmZzX2NsaWVudC0+ZnNjYWNoZSwKKwkJCQkJICAgICAgICZuZnNfZnNjYWNoZV9zdXBlcl9pbmRleF9kZWYsCisJCQkJCSAgICAgICBuZnNzKTsKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBnZXQgc3VwZXJibG9jayBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBuZnNzLCBuZnNzLT5mc2NhY2hlKTsKKwlyZXR1cm47CisKK25vbl91bmlxdWU6CisJc3Bpbl91bmxvY2soJm5mc19mc2NhY2hlX2tleXNfbG9jayk7CisJa2ZyZWUoa2V5KTsKKwluZnNzLT5mc2NhY2hlX2tleSA9IE5VTEw7CisJbmZzcy0+ZnNjYWNoZSA9IE5VTEw7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiTkZTOiIKKwkgICAgICAgIiBDYWNoZSByZXF1ZXN0IGRlbmllZCBkdWUgdG8gbm9uLXVuaXF1ZSBzdXBlcmJsb2NrIGtleXNcbiIpOworfQorCisvKgorICogcmVsZWFzZSBhIHBlci1zdXBlcmJsb2NrIGNvb2tpZQorICovCit2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBORlNfU0Ioc2IpOworCisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogcmVsZWFzaW5nIHN1cGVyYmxvY2sgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgbmZzcywgbmZzcy0+ZnNjYWNoZSk7CisKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5mc3MtPmZzY2FjaGUsIDApOworCW5mc3MtPmZzY2FjaGUgPSBOVUxMOworCisJaWYgKG5mc3MtPmZzY2FjaGVfa2V5KSB7CisJCXNwaW5fbG9jaygmbmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKwkJcmJfZXJhc2UoJm5mc3MtPmZzY2FjaGVfa2V5LT5ub2RlLCAmbmZzX2ZzY2FjaGVfa2V5cyk7CisJCXNwaW5fdW5sb2NrKCZuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCQlrZnJlZShuZnNzLT5mc2NhY2hlX2tleSk7CisJCW5mc3MtPmZzY2FjaGVfa2V5ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBwZXItaW5vZGUgY2FjaGUgY29va2llIHBvaW50ZXIgZm9yIGFuIE5GUyBpbm9kZS4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV9pbml0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCU5GU19JKGlub2RlKS0+ZnNjYWNoZSA9IE5VTEw7CisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpCisJCXNldF9iaXQoTkZTX0lOT19GU0NBQ0hFLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHBlci1pbm9kZSBjYWNoZSBjb29raWUgZm9yIGFuIE5GUyBpbm9kZS4KKyAqLworc3RhdGljIHZvaWQgbmZzX2ZzY2FjaGVfZW5hYmxlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJaWYgKG5mc2ktPmZzY2FjaGUgfHwgIU5GU19GU0NBQ0hFKGlub2RlKSkKKwkJcmV0dXJuOworCisJaWYgKChORlNfU0Ioc2IpLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSkgeworCQluZnNpLT5mc2NhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwkJCU5GU19TQihzYiktPmZzY2FjaGUsCisJCQkmbmZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZiwKKwkJCW5mc2kpOworCisJCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGdldCBGSCBjb29raWUgKDB4JXAvMHglcC8weCVwKVxuIiwKKwkJCSBzYiwgbmZzaSwgbmZzaS0+ZnNjYWNoZSk7CisJfQorfQorCisvKgorICogUmVsZWFzZSBhIHBlci1pbm9kZSBjb29raWUuCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogY2xlYXIgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgbmZzaSwgbmZzaS0+ZnNjYWNoZSk7CisKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5mc2ktPmZzY2FjaGUsIDApOworCW5mc2ktPmZzY2FjaGUgPSBOVUxMOworfQorCisvKgorICogUmV0aXJlIGEgcGVyLWlub2RlIGNvb2tpZSwgZGVzdHJveWluZyB0aGUgZGF0YSBhdHRhY2hlZCB0byBpdC4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV96YXBfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IHphcHBpbmcgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgbmZzaSwgbmZzaS0+ZnNjYWNoZSk7CisKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5mc2ktPmZzY2FjaGUsIDEpOworCW5mc2ktPmZzY2FjaGUgPSBOVUxMOworfQorCisvKgorICogVHVybiBvZmYgdGhlIGNhY2hlIHdpdGggcmVnYXJkIHRvIGEgcGVyLWlub2RlIGNvb2tpZSBpZiBvcGVuZWQgZm9yIHdyaXRpbmcsCisgKiBpbnZhbGlkYXRpbmcgYWxsIHRoZSBwYWdlcyBpbiB0aGUgcGFnZSBjYWNoZSByZWxhdGluZyB0byB0aGUgYXNzb2NpYXRlZAorICogaW5vZGUgdG8gY2xlYXIgdGhlIHBlci1wYWdlIGNhY2hpbmcuCisgKi8KK3N0YXRpYyB2b2lkIG5mc19mc2NhY2hlX2Rpc2FibGVfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJY2xlYXJfYml0KE5GU19JTk9fRlNDQUNIRSwgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOworCisJaWYgKE5GU19JKGlub2RlKS0+ZnNjYWNoZSkgeworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6IG5mc2kgMHglcCB0dXJuaW5nIGNhY2hlIG9mZlxuIiwgTkZTX0koaW5vZGUpKTsKKworCQkvKiBOZWVkIHRvIGludmFsaWRhdGUgYW55IG1hcHBlZCBwYWdlcyB0aGF0IHdlcmUgcmVhZCBpbiBiZWZvcmUKKwkJICogdHVybmluZyBvZmYgdGhlIGNhY2hlLgorCQkgKi8KKwkJaWYgKGlub2RlLT5pX21hcHBpbmcgJiYgaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcykKKwkJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyKGlub2RlLT5pX21hcHBpbmcpOworCisJCW5mc19mc2NhY2hlX3phcF9pbm9kZV9jb29raWUoaW5vZGUpOworCX0KK30KKworLyoKKyAqIHdhaXRfb25fYml0KCkgc2xlZXAgZnVuY3Rpb24gZm9yIHVuaW50ZXJydXB0aWJsZSB3YWl0aW5nCisgKi8KK3N0YXRpYyBpbnQgbmZzX2ZzY2FjaGVfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2sgYWdhaW5zdCBzb21lb25lIGVsc2UgdHJ5aW5nIHRvIGFsc28gYWNxdWlyZSBvciByZWxpbnF1aXNoIGEgY29va2llCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9pbm9kZV9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KE5GU19JTk9fRlNDQUNIRV9MT0NLLCAmbmZzaS0+ZmxhZ3MpKQorCQl3YWl0X29uX2JpdCgmbmZzaS0+ZmxhZ3MsIE5GU19JTk9fRlNDQUNIRV9MT0NLLAorCQkJICAgIG5mc19mc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cit9CisKKy8qCisgKiBVbmxvY2sgY29va2llIG1hbmFnZW1lbnQgbG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfaW5vZGVfdW5sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChORlNfSU5PX0ZTQ0FDSEVfTE9DSywgJm5mc2ktPmZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCXdha2VfdXBfYml0KCZuZnNpLT5mbGFncywgTkZTX0lOT19GU0NBQ0hFX0xPQ0spOworfQorCisvKgorICogRGVjaWRlIGlmIHdlIHNob3VsZCBlbmFibGUgb3IgZGlzYWJsZSBsb2NhbCBjYWNoaW5nIGZvciB0aGlzIGlub2RlLgorICogLSBGb3Igbm93LCB3aXRoIE5GUywgb25seSByZWd1bGFyIGZpbGVzIHRoYXQgYXJlIG9wZW4gcmVhZC1vbmx5IHdpbGwgYmUgYWJsZQorICogICB0byB1c2UgdGhlIGNhY2hlLgorICogLSBNYXkgYmUgaW52b2tlZCBtdWx0aXBsZSB0aW1lcyBpbiBwYXJhbGxlbCBieSBwYXJhbGxlbCBuZnNfb3BlbigpIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWlmIChORlNfRlNDQUNIRShpbm9kZSkpIHsKKwkJbmZzX2ZzY2FjaGVfaW5vZGVfbG9jayhpbm9kZSk7CisJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCisJCQluZnNfZnNjYWNoZV9kaXNhYmxlX2lub2RlX2Nvb2tpZShpbm9kZSk7CisJCWVsc2UKKwkJCW5mc19mc2NhY2hlX2VuYWJsZV9pbm9kZV9jb29raWUoaW5vZGUpOworCQluZnNfZnNjYWNoZV9pbm9kZV91bmxvY2soaW5vZGUpOworCX0KK30KKworLyoKKyAqIFJlcGxhY2UgYSBwZXItaW5vZGUgY29va2llIGR1ZSB0byByZXZhbGlkYXRpb24gZGV0ZWN0aW5nIGEgZmlsZSBoYXZpbmcKKyAqIGNoYW5nZWQgb24gdGhlIHNlcnZlci4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCXN0cnVjdCBuZnNfc2VydmVyICpuZnNzID0gTkZTX1NFUlZFUihpbm9kZSk7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpvbGQgPSBuZnNpLT5mc2NhY2hlOworCisJbmZzX2ZzY2FjaGVfaW5vZGVfbG9jayhpbm9kZSk7CisJaWYgKG5mc2ktPmZzY2FjaGUpIHsKKwkJLyogcmV0aXJlIHRoZSBjdXJyZW50IGZzY2FjaGUgY2FjaGUgYW5kIGdldCBhIG5ldyBvbmUgKi8KKwkJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShuZnNpLT5mc2NhY2hlLCAxKTsKKworCQluZnNpLT5mc2NhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwkJCW5mc3MtPm5mc19jbGllbnQtPmZzY2FjaGUsCisJCQkmbmZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZiwKKwkJCW5mc2kpOworCisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogcmV2YWxpZGF0aW9uIG5ldyBjb29raWUgKDB4JXAvMHglcC8weCVwLzB4JXApXG4iLAorCQkJIG5mc3MsIG5mc2ksIG9sZCwgbmZzaS0+ZnNjYWNoZSk7CisJfQorCW5mc19mc2NhY2hlX2lub2RlX3VubG9jayhpbm9kZSk7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBjYWNoaW5nIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UsIGlmIHRoZSBwYWdlIGlzbid0IGJ1c3kKKyAqIGludGVyYWN0aW5nIHdpdGggdGhlIGNhY2hlLgorICogLSBSZXR1cm5zIHRydWUgKGNhbiByZWxlYXNlIHBhZ2UpIG9yIGZhbHNlIChwYWdlIGJ1c3kpLgorICovCitpbnQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnApCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gbmZzaS0+ZnNjYWNoZTsKKworCUJVR19PTighY29va2llKTsKKworCWlmIChmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKSkgeworCQlpZiAoIShnZnAgJiBfX0dGUF9XQUlUKSkKKwkJCXJldHVybiAwOworCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShjb29raWUsIHBhZ2UpOworCX0KKworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkgeworCQlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBmc2NhY2hlIHJlbGVhc2VwYWdlICgweCVwLzB4JXAvMHglcClcbiIsCisJCQkgY29va2llLCBwYWdlLCBuZnNpKTsKKworCQlmc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZWxlYXNlIHRoZSBjYWNoaW5nIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgaWYgdW5kZXJnb2luZyBjb21wbGV0ZSBwYWdlCisgKiBpbnZhbGlkYXRpb24uCisgKi8KK3ZvaWQgX19uZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG5mc2ktPmZzY2FjaGU7CisKKwlCVUdfT04oIWNvb2tpZSk7CisKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBmc2NhY2hlIGludmFsaWRhdGVwYWdlICgweCVwLzB4JXAvMHglcClcbiIsCisJCSBjb29raWUsIHBhZ2UsIG5mc2kpOworCisJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKKworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKKwluZnNfYWRkX2ZzY2FjaGVfc3RhdHMocGFnZS0+bWFwcGluZy0+aG9zdCwKKwkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVELCAxKTsKK30KKworLyoKKyAqIEhhbmRsZSBjb21wbGV0aW9uIG9mIGEgcGFnZSBiZWluZyByZWFkIGZyb20gdGhlIGNhY2hlLgorICogLSBDYWxsZWQgaW4gcHJvY2VzcyAoa2V2ZW50ZCkgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICAgIHZvaWQgKmNvbnRleHQsCisJCQkJCSAgICAgICBpbnQgZXJyb3IpCit7CisJZGZwcmludGsoRlNDQUNIRSwKKwkJICJORlM6IHJlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZSAoMHglcC8weCVwLyVkKVxuIiwKKwkJIHBhZ2UsIGNvbnRleHQsIGVycm9yKTsKKworCS8qIGlmIHRoZSByZWFkIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB3ZSBqdXN0IHVubG9jayB0aGUgcGFnZSBhbmQgbGV0CisJICogdGhlIFZNIHJlaXNzdWUgdGhlIHJlYWRwYWdlICovCisJaWYgKCFlcnJvcikgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCWVycm9yID0gbmZzX3JlYWRwYWdlX2FzeW5jKGNvbnRleHQsIHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOworCQlpZiAoZXJyb3IpCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIHBhZ2UgZnJvbSBmc2NhY2hlCisgKi8KK2ludCBfX25mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0OworCisJZGZwcmludGsoRlNDQUNIRSwKKwkJICJORlM6IHJlYWRwYWdlX2Zyb21fZnNjYWNoZShmc2M6JXAvcDolcChpOiVseCBmOiVseCkvMHglcClcbiIsCisJCSBORlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIHBhZ2UtPmluZGV4LCBwYWdlLT5mbGFncywgaW5vZGUpOworCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UoTkZTX0koaW5vZGUpLT5mc2NhY2hlLAorCQkJCQkgcGFnZSwKKwkJCQkJIG5mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUsCisJCQkJCSBjdHgsCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOiAvKiByZWFkIEJJTyBzdWJtaXR0ZWQgKHBhZ2UgaW4gZnNjYWNoZSkgKi8KKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGU6IEJJTyBzdWJtaXR0ZWRcbiIpOworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfT0ssIDEpOworCQlyZXR1cm4gcmV0OworCisJY2FzZSAtRU5PQlVGUzogLyogaW5vZGUgbm90IGluIGNhY2hlICovCisJY2FzZSAtRU5PREFUQTogLyogcGFnZSBub3QgaW4gY2FjaGUgKi8KKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX0ZBSUwsIDEpOworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiAgICByZWFkcGFnZV9mcm9tX2ZzY2FjaGUgJWRcbiIsIHJldCk7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMLCAxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHJpZXZlIGEgc2V0IG9mIHBhZ2VzIGZyb20gZnNjYWNoZQorICovCitpbnQgX19uZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJIHVuc2lnbmVkICpucl9wYWdlcykKK3sKKwlpbnQgcmV0LCBucGFnZXMgPSAqbnJfcGFnZXM7CisKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBuZnNfZ2V0cGFnZXNfZnJvbV9mc2NhY2hlICgweCVwLyV1LzB4JXApXG4iLAorCQkgTkZTX0koaW5vZGUpLT5mc2NhY2hlLCBucGFnZXMsIGlub2RlKTsKKworCXJldCA9IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhORlNfSShpbm9kZSktPmZzY2FjaGUsCisJCQkJCSAgbWFwcGluZywgcGFnZXMsIG5yX3BhZ2VzLAorCQkJCQkgIG5mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGVfY29tcGxldGUsCisJCQkJCSAgY3R4LAorCQkJCQkgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOworCWlmICgqbnJfcGFnZXMgPCBucGFnZXMpCisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSywKKwkJCQkgICAgICBucGFnZXMpOworCWlmICgqbnJfcGFnZXMgPiAwKQorCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwKKwkJCQkgICAgICAqbnJfcGFnZXMpOworCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6IC8qIHJlYWQgc3VibWl0dGVkIHRvIHRoZSBjYWNoZSBmb3IgYWxsIHBhZ2VzICovCisJCUJVR19PTighbGlzdF9lbXB0eShwYWdlcykpOworCQlCVUdfT04oKm5yX3BhZ2VzICE9IDApOworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6IG5mc19nZXRwYWdlc19mcm9tX2ZzY2FjaGU6IHN1Ym1pdHRlZFxuIik7CisKKwkJcmV0dXJuIHJldDsKKworCWNhc2UgLUVOT0JVRlM6IC8qIHNvbWUgcGFnZXMgYXJlbid0IGNhY2hlZCBhbmQgY2FuJ3QgYmUgKi8KKwljYXNlIC1FTk9EQVRBOiAvKiBzb21lIHBhZ2VzIGFyZW4ndCBjYWNoZWQgKi8KKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiBuZnNfZ2V0cGFnZXNfZnJvbV9mc2NhY2hlOiBubyBwYWdlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIDE7CisKKwlkZWZhdWx0OgorCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6IG5mc19nZXRwYWdlc19mcm9tX2ZzY2FjaGU6IHJldCAgJWRcbiIsIHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0b3JlIGEgbmV3bHkgZmV0Y2hlZCBwYWdlIGluIGZzY2FjaGUKKyAqIC0gUEdfZnNjYWNoZSBtdXN0IGJlIHNldCBvbiB0aGUgcGFnZQorICovCit2b2lkIF9fbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBzeW5jKQoreworCWludCByZXQ7CisKKwlkZnByaW50ayhGU0NBQ0hFLAorCQkgIk5GUzogcmVhZHBhZ2VfdG9fZnNjYWNoZShmc2M6JXAvcDolcChpOiVseCBmOiVseCkvJWQpXG4iLAorCQkgTkZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBwYWdlLT5pbmRleCwgcGFnZS0+ZmxhZ3MsIHN5bmMpOworCisJcmV0ID0gZnNjYWNoZV93cml0ZV9wYWdlKE5GU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwgR0ZQX0tFUk5FTCk7CisJZGZwcmludGsoRlNDQUNIRSwKKwkJICJORlM6ICAgICByZWFkcGFnZV90b19mc2NhY2hlOiBwOiVwKGk6JWx1IGY6JWx4KSByZXQgJWRcbiIsCisJCSBwYWdlLCBwYWdlLT5pbmRleCwgcGFnZS0+ZmxhZ3MsIHJldCk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJZnNjYWNoZV91bmNhY2hlX3BhZ2UoTkZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlKTsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLAorCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fRkFJTCwgMSk7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworCX0gZWxzZSB7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwKKwkJCQkgICAgICBORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX09LLCAxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS5oIGIvZnMvbmZzL2ZzY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTgwOWJiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2ZzY2FjaGUuaApAQCAtMCwwICsxLDIyMCBAQAorLyogTkZTIGZpbGVzeXN0ZW0gY2FjaGUgaW50ZXJmYWNlIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX05GU19GU0NBQ0hFX0gKKyNkZWZpbmUgX05GU19GU0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25mczRfbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CisKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKworLyoKKyAqIHNldCBvZiBORlMgRlMtQ2FjaGUgb2JqZWN0cyB0aGF0IGZvcm0gYSBzdXBlcmJsb2NrIGtleQorICovCitzdHJ1Y3QgbmZzX2ZzY2FjaGVfa2V5IHsKKwlzdHJ1Y3QgcmJfbm9kZQkJbm9kZTsKKwlzdHJ1Y3QgbmZzX2NsaWVudAkqbmZzX2NsaWVudDsJLyogdGhlIHNlcnZlciAqLworCisJLyogdGhlIGVsZW1lbnRzIG9mIHRoZSB1bmlxdWUga2V5IC0gYXMgdXNlZCBieSBuZnNfY29tcGFyZV9zdXBlcigpIGFuZAorCSAqIG5mc19jb21wYXJlX21vdW50X29wdGlvbnMoKSB0byBkaXN0aW5ndWlzaCBzdXBlcmJsb2NrcyAqLworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBsb25nCXNfZmxhZ3M7CS8qIHZhcmlvdXMgZmxhZ3MKKwkJCQkJCQkgKiAoJiBORlNfTVNfTUFTSykgKi8KKwkJfSBzdXBlcjsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IG5mc19mc2lkIGZzaWQ7CisJCQlpbnQJCWZsYWdzOworCQkJdW5zaWduZWQgaW50CXJzaXplOwkJLyogcmVhZCBzaXplICovCisJCQl1bnNpZ25lZCBpbnQJd3NpemU7CQkvKiB3cml0ZSBzaXplICovCisJCQl1bnNpZ25lZCBpbnQJYWNyZWdtaW47CS8qIGF0dHIgY2FjaGUgdGltZW91dHMgKi8KKwkJCXVuc2lnbmVkIGludAlhY3JlZ21heDsKKwkJCXVuc2lnbmVkIGludAlhY2Rpcm1pbjsKKwkJCXVuc2lnbmVkIGludAlhY2Rpcm1heDsKKwkJfSBuZnNfc2VydmVyOworCisJCXN0cnVjdCB7CisJCQlycGNfYXV0aGZsYXZvcl90IGF1X2ZsYXZvcjsKKwkJfSBycGNfYXV0aDsKKworCQkvKiB1bmlxdWlmaWVyIC0gY2FuIGJlIHVzZWQgaWYgbmZzX3NlcnZlci5mbGFncyBpbmNsdWRlcworCQkgKiBORlNfTU9VTlRfVU5TSEFSRUQgICovCisJCXU4IHVuaXFfbGVuOworCQljaGFyIHVuaXF1aWZpZXJbMF07CisJfSBrZXk7Cit9OworCisvKgorICogZnNjYWNoZS1pbmRleC5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9uZXRmcyBuZnNfZnNjYWNoZV9uZXRmczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX3NlcnZlcl9pbmRleF9kZWY7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9zdXBlcl9pbmRleF9kZWY7CitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmOworCitleHRlcm4gaW50IG5mc19mc2NhY2hlX3JlZ2lzdGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfdW5yZWdpc3Rlcih2b2lkKTsKKworLyoKKyAqIGZzY2FjaGUuYworICovCitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9nZXRfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqKTsKKworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwKKwkJCQkJIHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CisKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX2luaXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3phcF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9yZXNldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICopOworCitleHRlcm4gdm9pZCBfX25mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IG5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqLCBnZnBfdCk7CisKK2V4dGVybiBpbnQgX19uZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICosCisJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBpbnQgX19uZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqLAorCQkJCQlzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCAqKTsKK2V4dGVybiB2b2lkIF9fbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIGludCk7CisKKy8qCisgKiB3YWl0IGZvciBhIHBhZ2UgdG8gY29tcGxldGUgd3JpdGluZyB0byB0aGUgY2FjaGUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgbmZzX2lub2RlICpuZnNpLAorCQkJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpCisJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKG5mc2ktPmZzY2FjaGUsIHBhZ2UpOworfQorCisvKgorICogcmVsZWFzZSB0aGUgY2FjaGluZyBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlIGlmIHVuZGVyZ29pbmcgY29tcGxldGUgcGFnZQorICogaW52YWxpZGF0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkKKwkJX19uZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2UocGFnZSwgaW5vZGUpOworfQorCisvKgorICogUmV0cmlldmUgYSBwYWdlIGZyb20gYW4gaW5vZGUgZGF0YSBzdG9yYWdlIG9iamVjdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChORlNfSShpbm9kZSktPmZzY2FjaGUpCisJCXJldHVybiBfX25mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoY3R4LCBpbm9kZSwgcGFnZSk7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKgorICogUmV0cmlldmUgYSBzZXQgb2YgcGFnZXMgZnJvbSBhbiBpbm9kZSBkYXRhIHN0b3JhZ2Ugb2JqZWN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBuZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJCSAgICAgdW5zaWduZWQgKm5yX3BhZ2VzKQoreworCWlmIChORlNfSShpbm9kZSktPmZzY2FjaGUpCisJCXJldHVybiBfX25mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKGN0eCwgaW5vZGUsIG1hcHBpbmcsIHBhZ2VzLAorCQkJCQkJICAgIG5yX3BhZ2VzKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qCisgKiBTdG9yZSBhIHBhZ2UgbmV3bHkgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIgaW4gYW4gaW5vZGUgZGF0YSBzdG9yYWdlIG9iamVjdAorICogaW4gdGhlIGNhY2hlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgIGludCBzeW5jKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkKKwkJX19uZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShpbm9kZSwgcGFnZSwgc3luYyk7Cit9CisKKy8qCisgKiBpbmRpY2F0ZSB0aGUgY2xpZW50IGNhY2hpbmcgc3RhdGUgYXMgcmVhZGFibGUgdGV4dAorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm5mc19zZXJ2ZXJfZnNjYWNoZV9zdGF0ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworCWlmIChzZXJ2ZXItPmZzY2FjaGUgJiYgKHNlcnZlci0+b3B0aW9ucyAmIE5GU19PUFRJT05fRlNDQUNIRSkpCisJCXJldHVybiAieWVzIjsKKwlyZXR1cm4gIm5vICI7Cit9CisKKworI2Vsc2UgLyogQ09ORklHX05GU19GU0NBQ0hFICovCitzdGF0aWMgaW5saW5lIGludCBuZnNfZnNjYWNoZV9yZWdpc3Rlcih2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfdW5yZWdpc3Rlcih2b2lkKSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKmNscCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2NsaWVudF9jb29raWUoc3RydWN0IG5mc19jbGllbnQgKmNscCkge30KKworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUoCisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwlzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9pbml0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfemFwX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3NldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJCXN0cnVjdCBmaWxlICpmaWxwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3Jlc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorCitzdGF0aWMgaW5saW5lIGludCBuZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gMTsgLyogVHJ1ZTogbWF5IHJlbGVhc2UgcGFnZSAqLworfQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBuZnNfaW5vZGUgKm5mc2ksCisJCQkJCQkgIHN0cnVjdCBwYWdlICpwYWdlKSB7fQorCitzdGF0aWMgaW5saW5lIGludCBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorc3RhdGljIGlubGluZSBpbnQgbmZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgICAgIHVuc2lnbmVkICpucl9wYWdlcykKK3sKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBzeW5jKSB7fQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm5mc19zZXJ2ZXJfZnNjYWNoZV9zdGF0ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworCXJldHVybiAibm8gIjsKK30KKworI2VuZGlmIC8qIENPTkZJR19ORlNfRlNDQUNIRSAqLworI2VuZGlmIC8qIF9ORlNfRlNDQUNIRV9IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvZ2V0cm9vdC5jIGIvZnMvbmZzL2dldHJvb3QuYwppbmRleCBiN2M5YjJkLi40NjE3N2NiIDEwMDY0NAotLS0gYS9mcy9uZnMvZ2V0cm9vdC5jCisrKyBiL2ZzL25mcy9nZXRyb290LmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChmYXR0ci50eXBlICE9IE5GRElSKSB7CisJaWYgKCFTX0lTRElSKGZhdHRyLm1vZGUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmZzNF9nZXRfcm9vdDoiCiAJCSAgICAgICAiIGdldHJvb3QgZW5jb3VudGVyZWQgbm9uLWRpcmVjdG9yeVxuIik7CiAJCXJldHVybiAtRU5PVERJUjsKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChmYXR0ci50eXBlICE9IE5GRElSKSB7CisJaWYgKCFTX0lTRElSKGZhdHRyLm1vZGUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibmZzNF9nZXRfcm9vdDoiCiAJCSAgICAgICAiIGxvb2t1cGZoIGVuY291bnRlcmVkIG5vbi1kaXJlY3RvcnlcbiIpOwogCQlyZXR1cm4gLUVOT1RESVI7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IDBjMzgxNjguLjY0Zjg3MTkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1ZGUwogCkBAIC02Niw2ICs2NywxOCBAQAogfQogCiAvKioKKyAqIG5mc193YWl0X2JpdF9raWxsYWJsZSAtIGhlbHBlciBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHNsZWVwaW5nIG9uIGJpdCBsb2NrcworICogQHdvcmQ6IGxvbmcgd29yZCBjb250YWluaW5nIHRoZSBiaXQgbG9jaworICovCitpbnQgbmZzX3dhaXRfYml0X2tpbGxhYmxlKHZvaWQgKndvcmQpCit7CisJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCXNjaGVkdWxlKCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbmZzX2NvbXBhdF91c2VyX2lubzY0IC0gcmV0dXJucyB0aGUgdXNlci12aXNpYmxlIGlub2RlIG51bWJlcgogICogQGZpbGVpZDogNjQtYml0IGZpbGVpZAogICoKQEAgLTEwOSw2ICsxMjIsNyBAQAogCUJVR19PTighbGlzdF9lbXB0eSgmTkZTX0koaW5vZGUpLT5vcGVuX2ZpbGVzKSk7CiAJbmZzX3phcF9hY2xfY2FjaGUoaW5vZGUpOwogCW5mc19hY2Nlc3NfemFwX2NhY2hlKGlub2RlKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShpbm9kZSk7CiB9CiAKIC8qKgpAQCAtMjQ5LDEzICsyNjMsMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gRVJSX1BUUigtRU5PRU5UKTsKIAl1bnNpZ25lZCBsb25nIGhhc2g7CiAKLQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSKSA9PSAwKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKSA9PSAwKQogCQlnb3RvIG91dF9ub19pbm9kZTsKLQotCWlmICghZmF0dHItPm5saW5rKSB7Ci0JCXByaW50aygiTkZTOiBCdWdneSBzZXJ2ZXIgLSBubGluayA9PSAwIVxuIik7CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9UWVBFKSA9PSAwKQogCQlnb3RvIG91dF9ub19pbm9kZTsKLQl9CiAKIAloYXNoID0gbmZzX2ZhdHRyX3RvX2lub190KGZhdHRyKTsKIApAQCAtMjkxLDcgKzMwMiw4IEBACiAJCQkgICAgJiYgZmF0dHItPnNpemUgPD0gTkZTX0xJTUlUX1JFQURESVJQTFVTKQogCQkJCXNldF9iaXQoTkZTX0lOT19BRFZJU0VfUkRQTFVTLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7CiAJCQkvKiBEZWFsIHdpdGggY3Jvc3NpbmcgbW91bnRwb2ludHMgKi8KLQkJCWlmICghbmZzX2ZzaWRfZXF1YWwoJk5GU19TQihzYiktPmZzaWQsICZmYXR0ci0+ZnNpZCkpIHsKKwkJCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRlNJRCkKKwkJCQkJJiYgIW5mc19mc2lkX2VxdWFsKCZORlNfU0Ioc2IpLT5mc2lkLCAmZmF0dHItPmZzaWQpKSB7CiAJCQkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMKQogCQkJCQlpbm9kZS0+aV9vcCA9ICZuZnNfcmVmZXJyYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCQllbHNlCkBAIC0zMDQsMzAgKzMxNiw0OSBAQAogCQllbHNlCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGZhdHRyLT5yZGV2KTsKIAorCQltZW1zZXQoJmlub2RlLT5pX2F0aW1lLCAwLCBzaXplb2YoaW5vZGUtPmlfYXRpbWUpKTsKKwkJbWVtc2V0KCZpbm9kZS0+aV9tdGltZSwgMCwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7CisJCW1lbXNldCgmaW5vZGUtPmlfY3RpbWUsIDAsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOworCQluZnNpLT5jaGFuZ2VfYXR0ciA9IDA7CisJCWlub2RlLT5pX3NpemUgPSAwOworCQlpbm9kZS0+aV9ubGluayA9IDA7CisJCWlub2RlLT5pX3VpZCA9IC0yOworCQlpbm9kZS0+aV9naWQgPSAtMjsKKwkJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwkJbWVtc2V0KG5mc2ktPmNvb2tpZXZlcmYsIDAsIHNpemVvZihuZnNpLT5jb29raWV2ZXJmKSk7CisKIAkJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7CiAJCW5mc2ktPmF0dHJfZ2VuY291bnQgPSBmYXR0ci0+Z2VuY291bnQ7Ci0JCWlub2RlLT5pX2F0aW1lID0gZmF0dHItPmF0aW1lOwotCQlpbm9kZS0+aV9tdGltZSA9IGZhdHRyLT5tdGltZTsKLQkJaW5vZGUtPmlfY3RpbWUgPSBmYXR0ci0+Y3RpbWU7Ci0JCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0FUSU1FKQorCQkJaW5vZGUtPmlfYXRpbWUgPSBmYXR0ci0+YXRpbWU7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkKKwkJCWlub2RlLT5pX210aW1lID0gZmF0dHItPm10aW1lOworCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpCisJCQlpbm9kZS0+aV9jdGltZSA9IGZhdHRyLT5jdGltZTsKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkKIAkJCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOwotCQlpbm9kZS0+aV9zaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKLQkJaW5vZGUtPmlfbmxpbmsgPSBmYXR0ci0+bmxpbms7Ci0JCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7Ci0JCWlub2RlLT5pX2dpZCA9IGZhdHRyLT5naWQ7Ci0JCWlmIChmYXR0ci0+dmFsaWQgJiAoTkZTX0FUVFJfRkFUVFJfVjMgfCBORlNfQVRUUl9GQVRUUl9WNCkpIHsKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpCisJCQlpbm9kZS0+aV9zaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX05MSU5LKQorCQkJaW5vZGUtPmlfbmxpbmsgPSBmYXR0ci0+bmxpbms7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9PV05FUikKKwkJCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9HUk9VUCkKKwkJCWlub2RlLT5pX2dpZCA9IGZhdHRyLT5naWQ7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9CTE9DS1NfVVNFRCkKKwkJCWlub2RlLT5pX2Jsb2NrcyA9IGZhdHRyLT5kdS5uZnMyLmJsb2NrczsKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQpIHsKIAkJCS8qCiAJCQkgKiByZXBvcnQgdGhlIGJsb2NrcyBpbiA1MTJieXRlIHVuaXRzCiAJCQkgKi8KIAkJCWlub2RlLT5pX2Jsb2NrcyA9IG5mc19jYWxjX2Jsb2NrX3NpemUoZmF0dHItPmR1Lm5mczMudXNlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+ZHUubmZzMi5ibG9ja3M7CiAJCX0KIAkJbmZzaS0+YXR0cnRpbWVvID0gTkZTX01JTkFUVFJUSU1FTyhpbm9kZSk7CiAJCW5mc2ktPmF0dHJ0aW1lb190aW1lc3RhbXAgPSBub3c7Ci0JCW1lbXNldChuZnNpLT5jb29raWV2ZXJmLCAwLCBzaXplb2YobmZzaS0+Y29va2lldmVyZikpOwogCQluZnNpLT5hY2Nlc3NfY2FjaGUgPSBSQl9ST09UOwogCisJCW5mc19mc2NhY2hlX2luaXRfaW5vZGVfY29va2llKGlub2RlKTsKKwogCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAl9IGVsc2UKIAkJbmZzX3JlZnJlc2hfaW5vZGUoaW5vZGUsIGZhdHRyKTsKQEAgLTUxNCw2ICs1NDUsMzIgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKioKKyAqIG5mc19jbG9zZV9jb250ZXh0IC0gQ29tbW9uIGNsb3NlX2NvbnRleHQoKSByb3V0aW5lIE5GU3YyL3YzCisgKiBAY3R4OiBwb2ludGVyIHRvIGNvbnRleHQKKyAqIEBpc19zeW5jOiBpcyB0aGlzIGEgc3luY2hyb25vdXMgY2xvc2UKKyAqCisgKiBhbHdheXMgZW5zdXJlIHRoYXQgdGhlIGF0dHJpYnV0ZXMgYXJlIHVwIHRvIGRhdGUgaWYgd2UncmUgbW91bnRlZAorICogd2l0aCBjbG9zZS10by1vcGVuIHNlbWFudGljcworICovCit2b2lkIG5mc19jbG9zZV9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCBpc19zeW5jKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKworCWlmICghKGN0eC0+bW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJcmV0dXJuOworCWlmICghaXNfc3luYykKKwkJcmV0dXJuOworCWlub2RlID0gY3R4LT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpZiAoIWxpc3RfZW1wdHkoJk5GU19JKGlub2RlKS0+b3Blbl9maWxlcykpCisJCXJldHVybjsKKwlzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKKwlpZiAoc2VydmVyLT5mbGFncyAmIE5GU19NT1VOVF9OT0NUTykKKwkJcmV0dXJuOworCW5mc19yZXZhbGlkYXRlX2lub2RlKHNlcnZlciwgaW5vZGUpOworfQorCiBzdGF0aWMgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmFsbG9jX25mc19vcGVuX2NvbnRleHQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHJwY19jcmVkICpjcmVkKQogewogCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CkBAIC01NDAsMjQgKzU5NywxNSBAQAogCXJldHVybiBjdHg7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcHV0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgaW50IHdhaXQpCitzdGF0aWMgdm9pZCBfX3B1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCBpc19zeW5jKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGN0eC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CiAKLQlpZiAoY3R4ID09IE5VTEwpCi0JCXJldHVybjsKLQotCWlub2RlID0gY3R4LT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmN0eC0+Y291bnQsICZpbm9kZS0+aV9sb2NrKSkKIAkJcmV0dXJuOwogCWxpc3RfZGVsKCZjdHgtPmxpc3QpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoY3R4LT5zdGF0ZSAhPSBOVUxMKSB7Ci0JCWlmICh3YWl0KQotCQkJbmZzNF9jbG9zZV9zeW5jKCZjdHgtPnBhdGgsIGN0eC0+c3RhdGUsIGN0eC0+bW9kZSk7Ci0JCWVsc2UKLQkJCW5mczRfY2xvc2Vfc3RhdGUoJmN0eC0+cGF0aCwgY3R4LT5zdGF0ZSwgY3R4LT5tb2RlKTsKLQl9CisJTkZTX1BST1RPKGlub2RlKS0+Y2xvc2VfY29udGV4dChjdHgsIGlzX3N5bmMpOwogCWlmIChjdHgtPmNyZWQgIT0gTlVMTCkKIAkJcHV0X3JwY2NyZWQoY3R4LT5jcmVkKTsKIAlwYXRoX3B1dCgmY3R4LT5wYXRoKTsKQEAgLTY0Miw2ICs2OTAsNyBAQAogCWN0eC0+bW9kZSA9IGZpbHAtPmZfbW9kZTsKIAluZnNfZmlsZV9zZXRfb3Blbl9jb250ZXh0KGZpbHAsIGN0eCk7CiAJcHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTsKKwluZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKGlub2RlLCBmaWxwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcwLDkgKzcxOSw2IEBACiAJaWYgKE5GU19TVEFMRShpbm9kZSkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKE5GU19TVEFMRShpbm9kZSkpCi0JCWdvdG8gb3V0OwotCiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX0lOT0RFUkVWQUxJREFURSk7CiAJc3RhdHVzID0gTkZTX1BST1RPKGlub2RlKS0+Z2V0YXR0cihzZXJ2ZXIsIE5GU19GSChpbm9kZSksICZmYXR0cik7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CkBAIC03NDUsNiArNzkxLDcgQEAKIAkJbWVtc2V0KG5mc2ktPmNvb2tpZXZlcmYsIDAsIHNpemVvZihuZnNpLT5jb29raWV2ZXJmKSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19EQVRBSU5WQUxJREFURSk7CisJbmZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKGlub2RlKTsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6ICglcy8lTGQpIGRhdGEgY2FjaGUgaW52YWxpZGF0ZWRcbiIsCiAJCQlpbm9kZS0+aV9zYi0+c19pZCwgKGxvbmcgbG9uZylORlNfRklMRUlEKGlub2RlKSk7CiAJcmV0dXJuIDA7CkBAIC04MTUsMjUgKzg2MiwzMSBAQAogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAKLQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX1dDQ19WNCkgIT0gMCAmJgotCQkJbmZzaS0+Y2hhbmdlX2F0dHIgPT0gZmF0dHItPnByZV9jaGFuZ2VfYXR0cikgeworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ0hBTkdFKQorCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkKKwkJCSYmIG5mc2ktPmNoYW5nZV9hdHRyID09IGZhdHRyLT5wcmVfY2hhbmdlX2F0dHIpIHsKIAkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CiAJfQogCS8qIElmIHdlIGhhdmUgYXRvbWljIFdDQyBkYXRhLCB3ZSBtYXkgdXBkYXRlIHNvbWUgYXR0cmlidXRlcyAqLwotCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfV0NDKSAhPSAwKSB7Ci0JCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FKQorCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NUSU1FKQorCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPnByZV9jdGltZSkpCiAJCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKLQkJaWYgKHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5wcmVfbXRpbWUpKSB7CisKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FKQorCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01USU1FKQorCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPnByZV9tdGltZSkpIHsKIAkJCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOwogCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7Ci0JCX0KLQkJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA9PSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnByZV9zaXplKSAmJgotCQkgICAgbmZzaS0+bnBhZ2VzID09IDApCi0JCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkpOwogCX0KKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUpCisJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkKKwkJCSYmIGlfc2l6ZV9yZWFkKGlub2RlKSA9PSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnByZV9zaXplKQorCQkJJiYgbmZzaS0+bnBhZ2VzID09IDApCisJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkpOwogfQogCiAvKioKQEAgLTg1MywzNSArOTA2LDM5IEBACiAKIAogCS8qIEhhcyB0aGUgaW5vZGUgZ29uZSBhbmQgY2hhbmdlZCBiZWhpbmQgb3VyIGJhY2s/ICovCi0JaWYgKG5mc2ktPmZpbGVpZCAhPSBmYXR0ci0+ZmlsZWlkCi0JCQl8fCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgIT0gKGZhdHRyLT5tb2RlICYgU19JRk1UKSkgeworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKSAmJiBuZnNpLT5maWxlaWQgIT0gZmF0dHItPmZpbGVpZCkKIAkJcmV0dXJuIC1FSU87Ci0JfQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkgJiYgKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9IChmYXR0ci0+bW9kZSAmIFNfSUZNVCkpCisJCXJldHVybiAtRUlPOwogCi0JaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkgIT0gMCAmJgorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKSAhPSAwICYmCiAJCQluZnNpLT5jaGFuZ2VfYXR0ciAhPSBmYXR0ci0+Y2hhbmdlX2F0dHIpCiAJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CiAKIAkvKiBWZXJpZnkgYSBmZXcgb2YgdGhlIG1vcmUgaW1wb3J0YW50IGF0dHJpYnV0ZXMgKi8KLQlpZiAoIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSkpCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkgJiYgIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSkpCiAJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CiAKLQljdXJfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLSAJbmV3X2lzaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKLQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5wYWdlcyA9PSAwKQotCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSB7CisJCWN1cl9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQluZXdfaXNpemUgPSBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpOworCQlpZiAoY3VyX3NpemUgIT0gbmV3X2lzaXplICYmIG5mc2ktPm5wYWdlcyA9PSAwKQorCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX1JFVkFMX1BBR0VDQUNIRTsKKwl9CiAKIAkvKiBIYXZlIGFueSBmaWxlIHBlcm1pc3Npb25zIGNoYW5nZWQ/ICovCi0JaWYgKChpbm9kZS0+aV9tb2RlICYgU19JQUxMVUdPKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lBTExVR08pCi0JCQl8fCBpbm9kZS0+aV91aWQgIT0gZmF0dHItPnVpZAotCQkJfHwgaW5vZGUtPmlfZ2lkICE9IGZhdHRyLT5naWQpCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT0RFKSAmJiAoaW5vZGUtPmlfbW9kZSAmIFNfSUFMTFVHTykgIT0gKGZhdHRyLT5tb2RlICYgU19JQUxMVUdPKSkKKwkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUiB8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MgfCBORlNfSU5PX0lOVkFMSURfQUNMOworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfT1dORVIpICYmIGlub2RlLT5pX3VpZCAhPSBmYXR0ci0+dWlkKQorCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSIHwgTkZTX0lOT19JTlZBTElEX0FDQ0VTUyB8IE5GU19JTk9fSU5WQUxJRF9BQ0w7CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9HUk9VUCkgJiYgaW5vZGUtPmlfZ2lkICE9IGZhdHRyLT5naWQpCiAJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFIgfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTIHwgTkZTX0lOT19JTlZBTElEX0FDTDsKIAogCS8qIEhhcyB0aGUgbGluayBjb3VudCBjaGFuZ2VkPyAqLwotCWlmIChpbm9kZS0+aV9ubGluayAhPSBmYXR0ci0+bmxpbmspCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykgJiYgaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOwogCi0JaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZmYXR0ci0+YXRpbWUpKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQVRJTUUpICYmICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfYXRpbWUsICZmYXR0ci0+YXRpbWUpKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVElNRTsKIAogCWlmIChpbnZhbGlkICE9IDApCkBAIC04OTMsMTEgKzk1MCwxNSBAQAogCiBzdGF0aWMgaW50IG5mc19jdGltZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKKwlpZiAoIShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DVElNRSkpCisJCXJldHVybiAwOwogCXJldHVybiB0aW1lc3BlY19jb21wYXJlKCZmYXR0ci0+Y3RpbWUsICZpbm9kZS0+aV9jdGltZSkgPiAwOwogfQogCiBzdGF0aWMgaW50IG5mc19zaXplX25lZWRfdXBkYXRlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogeworCWlmICghKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSA+IGlfc2l6ZV9yZWFkKGlub2RlKTsKIH0KIApAQCAtOTc1LDYgKzEwMzYsNyBAQAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJc3RhdHVzID0gbmZzX3JlZnJlc2hfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAzMywyMCArMTA5NSwzMSBAQAogCS8qIERvbid0IGRvIGEgV0NDIHVwZGF0ZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBhbHJlYWR5IHN0YWxlICovCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCB8fAogCQkJIW5mc19pbm9kZV9hdHRyc19uZWVkX3VwZGF0ZShpbm9kZSwgZmF0dHIpKSB7Ci0JCWZhdHRyLT52YWxpZCAmPSB+KE5GU19BVFRSX1dDQ19WNHxORlNfQVRUUl9XQ0MpOworCQlmYXR0ci0+dmFsaWQgJj0gfihORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UKKwkJCQl8IE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUKKwkJCQl8IE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FCisJCQkJfCBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSk7CiAJCWdvdG8gb3V0X25vZm9yY2U7CiAJfQotCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjQpICE9IDAgJiYKLQkJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9XQ0NfVjQpID09IDApIHsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgIT0gMCAmJgorCQkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRSkgPT0gMCkgewogCQlmYXR0ci0+cHJlX2NoYW5nZV9hdHRyID0gTkZTX0koaW5vZGUpLT5jaGFuZ2VfYXR0cjsKLQkJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX1dDQ19WNDsKKwkJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRTsKIAl9Ci0JaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgIT0gMCAmJgotCQkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX1dDQykgPT0gMCkgeworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpICE9IDAgJiYKKwkJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSkgPT0gMCkgewogCQltZW1jcHkoJmZhdHRyLT5wcmVfY3RpbWUsICZpbm9kZS0+aV9jdGltZSwgc2l6ZW9mKGZhdHRyLT5wcmVfY3RpbWUpKTsKKwkJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FOworCX0KKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01USU1FKSAhPSAwICYmCisJCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUUpID09IDApIHsKIAkJbWVtY3B5KCZmYXR0ci0+cHJlX210aW1lLCAmaW5vZGUtPmlfbXRpbWUsIHNpemVvZihmYXR0ci0+cHJlX210aW1lKSk7CisJCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9QUkVNVElNRTsKKwl9CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSAhPSAwICYmCisJCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFU0laRSkgPT0gMCkgewogCQlmYXR0ci0+cHJlX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9XQ0M7CisJCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9QUkVTSVpFOwogCX0KIG91dF9ub2ZvcmNlOgogCXN0YXR1cyA9IG5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9sb2NrZWQoaW5vZGUsIGZhdHRyKTsKQEAgLTEwNzgsMTggKzExNTEsMTggQEAKIAkJCV9fZnVuY19fLCBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLAogCQkJYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSwgZmF0dHItPnZhbGlkKTsKIAotCWlmIChuZnNpLT5maWxlaWQgIT0gZmF0dHItPmZpbGVpZCkKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkgJiYgbmZzaS0+ZmlsZWlkICE9IGZhdHRyLT5maWxlaWQpCiAJCWdvdG8gb3V0X2ZpbGVpZDsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBpbm9kZSdzIHR5cGUgaGFzbid0IGNoYW5nZWQuCiAJICovCi0JaWYgKChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lGTVQpKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkgJiYgKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9IChmYXR0ci0+bW9kZSAmIFNfSUZNVCkpCiAJCWdvdG8gb3V0X2NoYW5nZWQ7CiAKIAlzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKIAkvKiBVcGRhdGUgdGhlIGZzaWQ/ICovCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRlNJRCkgJiYKIAkJCSFuZnNfZnNpZF9lcXVhbCgmc2VydmVyLT5mc2lkLCAmZmF0dHItPmZzaWQpICYmCiAJCQkhdGVzdF9iaXQoTkZTX0lOT19NT1VOVFBPSU5ULCAmbmZzaS0+ZmxhZ3MpKQogCQlzZXJ2ZXItPmZzaWQgPSBmYXR0ci0+ZnNpZDsKQEAgLTEwOTksMTQgKzExNzIsMjcgQEAKIAkgKi8KIAluZnNpLT5yZWFkX2NhY2hlX2ppZmZpZXMgPSBmYXR0ci0+dGltZV9zdGFydDsKIAotCW5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH4oTkZTX0lOT19JTlZBTElEX0FUVFIgfCBORlNfSU5PX0lOVkFMSURfQVRJTUUKLQkJCXwgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpOworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKSB8fCAoZmF0dHItPnZhbGlkICYgKE5GU19BVFRSX0ZBVFRSX01USU1FfE5GU19BVFRSX0ZBVFRSX0NUSU1FKSkpCisJICAgIG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH4oTkZTX0lOT19JTlZBTElEX0FUVFIKKwkJICAgIHwgTkZTX0lOT19JTlZBTElEX0FUSU1FCisJCSAgICB8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKIAogCS8qIERvIGF0b21pYyB3ZWFrIGNhY2hlIGNvbnNpc3RlbmN5IHVwZGF0ZXMgKi8KIAluZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwogCiAJLyogTW9yZSBjYWNoZSBjb25zaXN0ZW5jeSBjaGVja3MgKi8KLQlpZiAoIShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkpIHsKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKSB7CisJCWlmIChuZnNpLT5jaGFuZ2VfYXR0ciAhPSBmYXR0ci0+Y2hhbmdlX2F0dHIpIHsKKwkJCWRwcmludGsoIk5GUzogY2hhbmdlX2F0dHIgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCisJCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOworCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfREFUQXxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CisJCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCQluZnNfZm9yY2VfbG9va3VwX3JldmFsaWRhdGUoaW5vZGUpOworCQkJbmZzaS0+Y2hhbmdlX2F0dHIgPSBmYXR0ci0+Y2hhbmdlX2F0dHI7CisJCX0KKwl9CisKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpIHsKIAkJLyogTkZTdjIvdjM6IENoZWNrIGlmIHRoZSBtdGltZSBhZ3JlZXMgKi8KIAkJaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUpKSB7CiAJCQlkcHJpbnRrKCJORlM6IG10aW1lIGNoYW5nZSBvbiBzZXJ2ZXIgZm9yIGZpbGUgJXMvJWxkXG4iLApAQCAtMTExNCw1OSArMTIwMCw4MCBAQAogCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfREFUQTsKIAkJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJCW5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShpbm9kZSk7CisJCQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKIAkJfQorCX0KKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpIHsKIAkJLyogSWYgY3RpbWUgaGFzIGNoYW5nZWQgd2Ugc2hvdWxkIGRlZmluaXRlbHkgY2xlYXIgYWNjZXNzK2FjbCBjYWNoZXMgKi8KLQkJaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUpKQorCQlpZiAoIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSkpIHsKIAkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOwotCX0gZWxzZSBpZiAobmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKSB7Ci0JCWRwcmludGsoIk5GUzogY2hhbmdlX2F0dHIgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCi0JCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7Ci0JCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEF8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOwotCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCW5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShpbm9kZSk7CisJCQkvKiBhbmQgcHJvYmFibHkgY2xlYXIgZGF0YSBmb3IgYSBkaXJlY3RvcnkgdG9vIGFzIHV0aW1lcyBjYW4gY2F1c2UKKwkJCSAqIGhhdm9jIHdpdGggb3VyIGNhY2hlLgorCQkJICovCisJCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCQkJbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKGlub2RlKTsKKwkJCX0KKwkJCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOworCQl9CiAJfQogCiAJLyogQ2hlY2sgaWYgb3VyIGNhY2hlZCBmaWxlIHNpemUgaXMgc3RhbGUgKi8KLSAJbmV3X2lzaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKLQljdXJfaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JaWYgKG5ld19pc2l6ZSAhPSBjdXJfaXNpemUpIHsKLQkJLyogRG8gd2UgcGVyaGFwcyBoYXZlIGFueSBvdXRzdGFuZGluZyB3cml0ZXMsIG9yIGhhcwotCQkgKiB0aGUgZmlsZSBncm93biBiZXlvbmQgb3VyIGxhc3Qgd3JpdGU/ICovCi0JCWlmIChuZnNpLT5ucGFnZXMgPT0gMCB8fCBuZXdfaXNpemUgPiBjdXJfaXNpemUpIHsKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X2lzaXplKTsKLQkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEE7CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpIHsKKwkJbmV3X2lzaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKKwkJY3VyX2lzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQlpZiAobmV3X2lzaXplICE9IGN1cl9pc2l6ZSkgeworCQkJLyogRG8gd2UgcGVyaGFwcyBoYXZlIGFueSBvdXRzdGFuZGluZyB3cml0ZXMsIG9yIGhhcworCQkJICogdGhlIGZpbGUgZ3Jvd24gYmV5b25kIG91ciBsYXN0IHdyaXRlPyAqLworCQkJaWYgKG5mc2ktPm5wYWdlcyA9PSAwIHx8IG5ld19pc2l6ZSA+IGN1cl9pc2l6ZSkgeworCQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X2lzaXplKTsKKwkJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQkJfQorCQkJZHByaW50aygiTkZTOiBpc2l6ZSBjaGFuZ2Ugb24gc2VydmVyIGZvciBmaWxlICVzLyVsZFxuIiwKKwkJCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAJCX0KLQkJZHByaW50aygiTkZTOiBpc2l6ZSBjaGFuZ2Ugb24gc2VydmVyIGZvciBmaWxlICVzLyVsZFxuIiwKLQkJCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKIAl9CiAKIAotCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOwotCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOwotCW1lbWNweSgmaW5vZGUtPmlfYXRpbWUsICZmYXR0ci0+YXRpbWUsIHNpemVvZihpbm9kZS0+aV9hdGltZSkpOwotCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9BVElNRSkKKwkJbWVtY3B5KCZpbm9kZS0+aV9hdGltZSwgJmZhdHRyLT5hdGltZSwgc2l6ZW9mKGlub2RlLT5pX2F0aW1lKSk7CiAKLQlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lBTExVR08pICE9IChmYXR0ci0+bW9kZSAmIFNfSUFMTFVHTykgfHwKLQkgICAgaW5vZGUtPmlfdWlkICE9IGZhdHRyLT51aWQgfHwKLQkgICAgaW5vZGUtPmlfZ2lkICE9IGZhdHRyLT5naWQpCi0JCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT0RFKSB7CisJCWlmICgoaW5vZGUtPmlfbW9kZSAmIFNfSUFMTFVHTykgIT0gKGZhdHRyLT5tb2RlICYgU19JQUxMVUdPKSkgeworCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CisJCQlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7CisJCX0KKwl9CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX09XTkVSKSB7CisJCWlmIChpbm9kZS0+aV91aWQgIT0gZmF0dHItPnVpZCkgeworCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfQUNDRVNTfE5GU19JTk9fSU5WQUxJRF9BQ0w7CisJCQlpbm9kZS0+aV91aWQgPSBmYXR0ci0+dWlkOworCQl9CisJfQorCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9HUk9VUCkgeworCQlpZiAoaW5vZGUtPmlfZ2lkICE9IGZhdHRyLT5naWQpIHsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCQkJaW5vZGUtPmlfZ2lkID0gZmF0dHItPmdpZDsKKwkJfQorCX0KIAotCWlmIChpbm9kZS0+aV9ubGluayAhPSBmYXR0ci0+bmxpbmspCi0JCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX05MSU5LKSB7CisJCWlmIChpbm9kZS0+aV9ubGluayAhPSBmYXR0ci0+bmxpbmspIHsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisJCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQkJaW5vZGUtPmlfbmxpbmsgPSBmYXR0ci0+bmxpbms7CisJCX0KKwl9CiAKLQlpbm9kZS0+aV9tb2RlID0gZmF0dHItPm1vZGU7Ci0JaW5vZGUtPmlfbmxpbmsgPSBmYXR0ci0+bmxpbms7Ci0JaW5vZGUtPmlfdWlkID0gZmF0dHItPnVpZDsKLQlpbm9kZS0+aV9naWQgPSBmYXR0ci0+Z2lkOwotCi0JaWYgKGZhdHRyLT52YWxpZCAmIChORlNfQVRUUl9GQVRUUl9WMyB8IE5GU19BVFRSX0ZBVFRSX1Y0KSkgeworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TUEFDRV9VU0VEKSB7CiAJCS8qCiAJCSAqIHJlcG9ydCB0aGUgYmxvY2tzIGluIDUxMmJ5dGUgdW5pdHMKIAkJICovCiAJCWlub2RlLT5pX2Jsb2NrcyA9IG5mc19jYWxjX2Jsb2NrX3NpemUoZmF0dHItPmR1Lm5mczMudXNlZCk7Ci0gCX0gZWxzZSB7Ci0gCQlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+ZHUubmZzMi5ibG9ja3M7CiAgCX0KKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQkxPQ0tTX1VTRUQpCisJCWlub2RlLT5pX2Jsb2NrcyA9IGZhdHRyLT5kdS5uZnMyLmJsb2NrczsKIAogCS8qIFVwZGF0ZSBhdHRydGltZW8gdmFsdWUgaWYgd2UncmUgb3V0IG9mIHRoZSB1bnN0YWJsZSBwZXJpb2QgKi8KIAlpZiAoaW52YWxpZCAmIE5GU19JTk9fSU5WQUxJRF9BVFRSKSB7CkBAIC0xMjc0LDcgKzEzODEsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZuZnNpLT5hY2Nlc3NfY2FjaGVfZW50cnlfbHJ1KTsKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2lub2RlX2xydSk7CiAJSU5JVF9SQURJWF9UUkVFKCZuZnNpLT5uZnNfcGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKLQluZnNpLT5uY29tbWl0ID0gMDsKIAluZnNpLT5ucGFnZXMgPSAwOwogCWF0b21pY19zZXQoJm5mc2ktPnNpbGx5X2NvdW50LCAxKTsKIAlJTklUX0hMSVNUX0hFQUQoJm5mc2ktPnNpbGx5X2xpc3QpOwpAQCAtMTMzNyw2ICsxNDQzLDEwIEBACiB7CiAJaW50IGVycjsKIAorCWVyciA9IG5mc19mc2NhY2hlX3JlZ2lzdGVyKCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0NzsKKwogCWVyciA9IG5mc2lvZF9zdGFydCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0NjsKQEAgLTEzODksNiArMTQ5OSw4IEBACiBvdXQ1OgogCW5mc2lvZF9zdG9wKCk7CiBvdXQ2OgorCW5mc19mc2NhY2hlX3VucmVnaXN0ZXIoKTsKK291dDc6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTM5OSw2ICsxNTExLDcgQEAKIAluZnNfZGVzdHJveV9yZWFkcGFnZWNhY2hlKCk7CiAJbmZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCW5mc19kZXN0cm95X25mc3BhZ2VjYWNoZSgpOworCW5mc19mc2NhY2hlX3VucmVnaXN0ZXIoKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXJwY19wcm9jX3VucmVnaXN0ZXIoIm5mcyIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDM0MGVkZTguLmU0ZDZhODMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC01LDYgKzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KIAorI2RlZmluZSBORlNfTVNfTUFTSyAoTVNfUkRPTkxZfE1TX05PU1VJRHxNU19OT0RFVnxNU19OT0VYRUN8TVNfU1lOQ0hST05PVVMpCisKIHN0cnVjdCBuZnNfc3RyaW5nOwogCiAvKiBNYXhpbXVtIG51bWJlciBvZiByZWFkYWhlYWQgcmVxdWVzdHMKQEAgLTM3LDEwICszOSwxMiBAQAogCWludAkJCWFjcmVnbWluLCBhY3JlZ21heCwKIAkJCQlhY2Rpcm1pbiwgYWNkaXJtYXg7CiAJaW50CQkJbmFtbGVuOworCXVuc2lnbmVkIGludAkJb3B0aW9uczsKIAl1bnNpZ25lZCBpbnQJCWJzaXplOwogCXVuc2lnbmVkIGludAkJYXV0aF9mbGF2b3JfbGVuOwogCXJwY19hdXRoZmxhdm9yX3QJYXV0aF9mbGF2b3JzWzFdOwogCWNoYXIJCQkqY2xpZW50X2FkZHJlc3M7CisJY2hhcgkJCSpmc2NhY2hlX3VuaXE7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlhZGRyZXNzOwpAQCAtMTUyLDYgKzE1Niw5IEBACiBleHRlcm4gc3RydWN0IHJwY19wcm9jaW5mbyBuZnM0X3Byb2NlZHVyZXNbXTsKICNlbmRpZgogCisvKiBwcm9jLmMgKi8KK3ZvaWQgbmZzX2Nsb3NlX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgaW50IGlzX3N5bmMpOworCiAvKiBkaXIuYyAqLwogZXh0ZXJuIGludCBuZnNfYWNjZXNzX2NhY2hlX3Nocmlua2VyKGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzayk7CiAKQEAgLTE2NSw2ICsxNzIsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAjZW5kaWYKIHZvaWQgbmZzX3phcF9hY2xfY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IG5mc193YWl0X2JpdF9raWxsYWJsZSh2b2lkICp3b3JkKTsKIAogLyogc3VwZXIuYyAqLwogdm9pZCBuZnNfcGFyc2VfaXBfYWRkcmVzcyhjaGFyICosIHNpemVfdCwgc3RydWN0IHNvY2thZGRyICosIHNpemVfdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pb3N0YXQuaCBiL2ZzL25mcy9pb3N0YXQuaAppbmRleCBhMzY5NTI4Li5hMmFiMjUyIDEwMDY0NAotLS0gYS9mcy9uZnMvaW9zdGF0LmgKKysrIGIvZnMvbmZzL2lvc3RhdC5oCkBAIC0xNiw2ICsxNiw5IEBACiAKIHN0cnVjdCBuZnNfaW9zdGF0cyB7CiAJdW5zaWduZWQgbG9uZyBsb25nCWJ5dGVzW19fTkZTSU9TX0JZVEVTTUFYXTsKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwl1bnNpZ25lZCBsb25nIGxvbmcJZnNjYWNoZVtfX05GU0lPU19GU0NBQ0hFTUFYXTsKKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcJCWV2ZW50c1tfX05GU0lPU19DT1VOVFNNQVhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKQEAgLTU3LDYgKzYwLDIxIEBACiAJbmZzX2FkZF9zZXJ2ZXJfc3RhdHMoTkZTX1NFUlZFUihpbm9kZSksIHN0YXQsIGFkZGVuZCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfYWRkX2ZzY2FjaGVfc3RhdHMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIGVudW0gbmZzX3N0YXRfZnNjYWNoZWNvdW50ZXJzIHN0YXQsCisJCQkJCSB1bnNpZ25lZCBsb25nIGFkZGVuZCkKK3sKKwlzdHJ1Y3QgbmZzX2lvc3RhdHMgKmlvc3RhdHM7CisJaW50IGNwdTsKKworCWNwdSA9IGdldF9jcHUoKTsKKwlpb3N0YXRzID0gcGVyX2NwdV9wdHIoTkZTX1NFUlZFUihpbm9kZSktPmlvX3N0YXRzLCBjcHUpOworCWlvc3RhdHMtPmZzY2FjaGVbc3RhdF0gKz0gYWRkZW5kOworCXB1dF9jcHVfbm9fcmVzY2hlZCgpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pb3N0YXRzICpuZnNfYWxsb2NfaW9zdGF0cyh2b2lkKQogewogCXJldHVybiBhbGxvY19wZXJjcHUoc3RydWN0IG5mc19pb3N0YXRzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMyeGRyLmMgYi9mcy9uZnMvbmZzMnhkci5jCmluZGV4IDI4YmFiNjcuLmM4NjJjOTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMyeGRyLmMKKysrIGIvZnMvbmZzL25mczJ4ZHIuYwpAQCAtMTIwLDggKzEyMCw4IEBACiBzdGF0aWMgX19iZTMyICoKIHhkcl9kZWNvZGVfZmF0dHIoX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKLQl1MzIgcmRldjsKLQlmYXR0ci0+dHlwZSA9IChlbnVtIG5mc19mdHlwZSkgbnRvaGwoKnArKyk7CisJdTMyIHJkZXYsIHR5cGU7CisJdHlwZSA9IG50b2hsKCpwKyspOwogCWZhdHRyLT5tb2RlID0gbnRvaGwoKnArKyk7CiAJZmF0dHItPm5saW5rID0gbnRvaGwoKnArKyk7CiAJZmF0dHItPnVpZCA9IG50b2hsKCpwKyspOwpAQCAtMTM2LDEwICsxMzYsOSBAQAogCXAgPSB4ZHJfZGVjb2RlX3RpbWUocCwgJmZhdHRyLT5hdGltZSk7CiAJcCA9IHhkcl9kZWNvZGVfdGltZShwLCAmZmF0dHItPm10aW1lKTsKIAlwID0geGRyX2RlY29kZV90aW1lKHAsICZmYXR0ci0+Y3RpbWUpOwotCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUjsKKwlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfVjI7CiAJZmF0dHItPnJkZXYgPSBuZXdfZGVjb2RlX2RldihyZGV2KTsKLQlpZiAoZmF0dHItPnR5cGUgPT0gTkZDSFIgJiYgcmRldiA9PSBORlMyX0ZJRk9fREVWKSB7Ci0JCWZhdHRyLT50eXBlID0gTkZGSUZPOworCWlmICh0eXBlID09IE5GQ0hSICYmIHJkZXYgPT0gTkZTMl9GSUZPX0RFVikgewogCQlmYXR0ci0+bW9kZSA9IChmYXR0ci0+bW9kZSAmIH5TX0lGTVQpIHwgU19JRklGTzsKIAkJZmF0dHItPnJkZXYgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggYzU1YmU3YS4uZDBjYzVjZSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNwcm9jLmMKKysrIGIvZnMvbmZzL25mczNwcm9jLmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCQlkYXRhLT5hcmcuY3JlYXRlLnZlcmlmaWVyWzFdID0gY3VycmVudC0+cGlkOwogCX0KIAotCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWZvciAoOzspIHsKIAkJc3RhdHVzID0gbmZzM19kb19jcmVhdGUoZGlyLCBkZW50cnksIGRhdGEpOwpAQCAtNTI4LDcgKzUyOCw3IEBACiAKIAlkcHJpbnRrKCJORlMgY2FsbCAgbWtkaXIgJXNcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0Jc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwlzYXR0ci0+aWFfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJZGF0YSA9IG5mczNfYWxsb2NfY3JlYXRlZGF0YSgpOwogCWlmIChkYXRhID09IE5VTEwpCkBAIC02MzksNyArNjM5LDcgQEAKIAlkcHJpbnRrKCJORlMgY2FsbCAgbWtub2QgJXMgJXU6JXVcbiIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQlNQUpPUihyZGV2KSwgTUlOT1IocmRldikpOwogCi0Jc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwlzYXR0ci0+aWFfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJZGF0YSA9IG5mczNfYWxsb2NfY3JlYXRlZGF0YSgpOwogCWlmIChkYXRhID09IE5VTEwpCkBAIC04MzQsNCArODM0LDUgQEAKIAkuY29tbWl0X2RvbmUJPSBuZnMzX2NvbW1pdF9kb25lLAogCS5sb2NrCQk9IG5mczNfcHJvY19sb2NrLAogCS5jbGVhcl9hY2xfY2FjaGUgPSBuZnMzX2ZvcmdldF9jYWNoZWRfYWNscywKKwkuY2xvc2VfY29udGV4dAk9IG5mc19jbG9zZV9jb250ZXh0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzeGRyLmMgYi9mcy9uZnMvbmZzM3hkci5jCmluZGV4IDZjZGVhY2YuLmU2YTE5MzIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzeGRyLmMKKysrIGIvZnMvbmZzL25mczN4ZHIuYwpAQCAtOTEsMTkgKzkxLDE1IEBACiAvKgogICogTWFwIGZpbGUgdHlwZSB0byBTX0lGTVQgYml0cwogICovCi1zdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQJbW9kZTsKLQl1bnNpZ25lZCBpbnQJbmZzMnR5cGU7Ci19IG5mc190eXBlMmZtdFtdID0gewotICAgICAgeyAwLAkJTkZOT04JfSwKLSAgICAgIHsgU19JRlJFRywJTkZSRUcJfSwKLSAgICAgIHsgU19JRkRJUiwJTkZESVIJfSwKLSAgICAgIHsgU19JRkJMSywJTkZCTEsJfSwKLSAgICAgIHsgU19JRkNIUiwJTkZDSFIJfSwKLSAgICAgIHsgU19JRkxOSywJTkZMTksJfSwKLSAgICAgIHsgU19JRlNPQ0ssCU5GU09DSwl9LAotICAgICAgeyBTX0lGSUZPLAlORkZJRk8JfSwKLSAgICAgIHsgMCwJCU5GQkFECX0KK3N0YXRpYyBjb25zdCB1bW9kZV90IG5mc190eXBlMmZtdFtdID0geworCVtORjNCQURdID0gMCwKKwlbTkYzUkVHXSA9IFNfSUZSRUcsCisJW05GM0RJUl0gPSBTX0lGRElSLAorCVtORjNCTEtdID0gU19JRkJMSywKKwlbTkYzQ0hSXSA9IFNfSUZDSFIsCisJW05GM0xOS10gPSBTX0lGTE5LLAorCVtORjNTT0NLXSA9IFNfSUZTT0NLLAorCVtORjNGSUZPXSA9IFNfSUZJRk8sCiB9OwogCiAvKgpAQCAtMTQ4LDEzICsxNDQsMTIgQEAKIHhkcl9kZWNvZGVfZmF0dHIoX19iZTMyICpwLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKIAl1bnNpZ25lZCBpbnQJdHlwZSwgbWFqb3IsIG1pbm9yOwotCWludAkJZm1vZGU7CisJdW1vZGVfdAkJZm1vZGU7CiAKIAl0eXBlID0gbnRvaGwoKnArKyk7Ci0JaWYgKHR5cGUgPj0gTkYzQkFEKQotCQl0eXBlID0gTkYzQkFEOwotCWZtb2RlID0gbmZzX3R5cGUyZm10W3R5cGVdLm1vZGU7Ci0JZmF0dHItPnR5cGUgPSBuZnNfdHlwZTJmbXRbdHlwZV0ubmZzMnR5cGU7CisJaWYgKHR5cGUgPiBORjNGSUZPKQorCQl0eXBlID0gTkYzTk9OOworCWZtb2RlID0gbmZzX3R5cGUyZm10W3R5cGVdOwogCWZhdHRyLT5tb2RlID0gKG50b2hsKCpwKyspICYgflNfSUZNVCkgfCBmbW9kZTsKIAlmYXR0ci0+bmxpbmsgPSBudG9obCgqcCsrKTsKIAlmYXR0ci0+dWlkID0gbnRvaGwoKnArKyk7CkBAIC0xNzcsNyArMTcyLDcgQEAKIAlwID0geGRyX2RlY29kZV90aW1lMyhwLCAmZmF0dHItPmN0aW1lKTsKIAogCS8qIFVwZGF0ZSB0aGUgbW9kZSBiaXRzICovCi0JZmF0dHItPnZhbGlkIHw9IChORlNfQVRUUl9GQVRUUiB8IE5GU19BVFRSX0ZBVFRSX1YzKTsKKwlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfVjM7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTIzMyw3ICsyMjgsOSBAQAogCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZmYXR0ci0+cHJlX3NpemUpOwogCXAgPSB4ZHJfZGVjb2RlX3RpbWUzKHAsICZmYXR0ci0+cHJlX210aW1lKTsKIAlwID0geGRyX2RlY29kZV90aW1lMyhwLCAmZmF0dHItPnByZV9jdGltZSk7Ci0JZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX1dDQzsKKwlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfUFJFU0laRQorCQl8IE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FCisJCXwgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUU7CiAJcmV0dXJuIHA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25mczRwcm9jLmMKaW5kZXggOGRkZTg0Yi4uYTRkMjQyNiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRwcm9jLmMKKysrIGIvZnMvbmZzL25mczRwcm9jLmMKQEAgLTE5MywxNCArMTkzLDYgQEAKIAlrdW5tYXBfYXRvbWljKHN0YXJ0LCBLTV9VU0VSMCk7CiB9CiAKLXN0YXRpYyBpbnQgbmZzNF93YWl0X2JpdF9raWxsYWJsZSh2b2lkICp3b3JkKQotewotCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlzY2hlZHVsZSgpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG5mczRfd2FpdF9jbG50X3JlY292ZXIoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlpbnQgcmVzOwpAQCAtMjA4LDcgKzIwMCw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAogCXJlcyA9IHdhaXRfb25fYml0KCZjbHAtPmNsX3N0YXRlLCBORlM0Q0xOVF9NQU5BR0VSX1JVTk5JTkcsCi0JCQluZnM0X3dhaXRfYml0X2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKKwkJCW5mc193YWl0X2JpdF9raWxsYWJsZSwgVEFTS19LSUxMQUJMRSk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTQzOSw3ICsxNDMxLDcgQEAKIAlpZiAoY2FsbGRhdGEtPmFyZy5zZXFpZCA9PSBOVUxMKQogCQlnb3RvIG91dF9mcmVlX2NhbGxkYXRhOwogCWNhbGxkYXRhLT5hcmcuZm1vZGUgPSAwOwotCWNhbGxkYXRhLT5hcmcuYml0bWFzayA9IHNlcnZlci0+YXR0cl9iaXRtYXNrOworCWNhbGxkYXRhLT5hcmcuYml0bWFzayA9IHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzazsKIAljYWxsZGF0YS0+cmVzLmZhdHRyID0gJmNhbGxkYXRhLT5mYXR0cjsKIAljYWxsZGF0YS0+cmVzLnNlcWlkID0gY2FsbGRhdGEtPmFyZy5zZXFpZDsKIAljYWxsZGF0YS0+cmVzLnNlcnZlciA9IHNlcnZlcjsKQEAgLTE1MDksNyArMTUwMSw3IEBACiAJCWF0dHIuaWFfbW9kZSA9IG5kLT5pbnRlbnQub3Blbi5jcmVhdGVfbW9kZTsKIAkJYXR0ci5pYV92YWxpZCA9IEFUVFJfTU9ERTsKIAkJaWYgKCFJU19QT1NJWEFDTChkaXIpKQotCQkJYXR0ci5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCQlhdHRyLmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9IGVsc2UgewogCQlhdHRyLmlhX3ZhbGlkID0gMDsKIAkJQlVHX09OKG5kLT5pbnRlbnQub3Blbi5mbGFncyAmIE9fQ1JFQVQpOwpAQCAtMTU4MCw2ICsxNTcyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgbmZzNF9jbG9zZV9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCBpc19zeW5jKQoreworCWlmIChjdHgtPnN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAoaXNfc3luYykKKwkJbmZzNF9jbG9zZV9zeW5jKCZjdHgtPnBhdGgsIGN0eC0+c3RhdGUsIGN0eC0+bW9kZSk7CisJZWxzZQorCQluZnM0X2Nsb3NlX3N0YXRlKCZjdHgtPnBhdGgsIGN0eC0+c3RhdGUsIGN0eC0+bW9kZSk7Cit9CiAKIHN0YXRpYyBpbnQgX25mczRfc2VydmVyX2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlKQogewpAQCAtMTYwMCw2ICsxNjAxLDkgQEAKIAkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0hBUkRMSU5LUzsKIAkJaWYgKHJlcy5oYXNfc3ltbGlua3MgIT0gMCkKIAkJCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX1NZTUxJTktTOworCQltZW1jcHkoc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrLCByZXMuYXR0cl9iaXRtYXNrLCBzaXplb2Yoc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrKSk7CisJCXNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFza1swXSAmPSBGQVRUUjRfV09SRDBfQ0hBTkdFfEZBVFRSNF9XT1JEMF9TSVpFOworCQlzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2tbMV0gJj0gRkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEF8RkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZOwogCQlzZXJ2ZXItPmFjbF9iaXRtYXNrID0gcmVzLmFjbF9iaXRtYXNrOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjA3OSw3ICsyMDgzLDcgQEAKIAlzdHJ1Y3QgbmZzX3JlbW92ZWFyZ3MgKmFyZ3MgPSBtc2ctPnJwY19hcmdwOwogCXN0cnVjdCBuZnNfcmVtb3ZlcmVzICpyZXMgPSBtc2ctPnJwY19yZXNwOwogCi0JYXJncy0+Yml0bWFzayA9IHNlcnZlci0+YXR0cl9iaXRtYXNrOworCWFyZ3MtPmJpdG1hc2sgPSBzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2s7CiAJcmVzLT5zZXJ2ZXIgPSBzZXJ2ZXI7CiAJbXNnLT5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9SRU1PVkVdOwogfQpAQCAtMjMyMyw3ICsyMzI3LDcgQEAKIAkJLnBhZ2VzID0gJnBhZ2UsCiAJCS5wZ2Jhc2UgPSAwLAogCQkuY291bnQgPSBjb3VudCwKLQkJLmJpdG1hc2sgPSBORlNfU0VSVkVSKGRlbnRyeS0+ZF9pbm9kZSktPmF0dHJfYml0bWFzaywKKwkJLmJpdG1hc2sgPSBORlNfU0VSVkVSKGRlbnRyeS0+ZF9pbm9kZSktPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2ssCiAJfTsKIAlzdHJ1Y3QgbmZzNF9yZWFkZGlyX3JlcyByZXM7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKQEAgLTI1NTIsNyArMjU1Niw3IEBACiB7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpOwogCi0JZGF0YS0+YXJncy5iaXRtYXNrID0gc2VydmVyLT5hdHRyX2JpdG1hc2s7CisJZGF0YS0+YXJncy5iaXRtYXNrID0gc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrOwogCWRhdGEtPnJlcy5zZXJ2ZXIgPSBzZXJ2ZXI7CiAJZGF0YS0+dGltZXN0YW1wICAgPSBqaWZmaWVzOwogCkBAIC0yNTc1LDcgKzI1NzksNyBAQAogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRhdGEtPmlub2RlKTsKIAkKLQlkYXRhLT5hcmdzLmJpdG1hc2sgPSBzZXJ2ZXItPmF0dHJfYml0bWFzazsKKwlkYXRhLT5hcmdzLmJpdG1hc2sgPSBzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2s7CiAJZGF0YS0+cmVzLnNlcnZlciA9IHNlcnZlcjsKIAltc2ctPnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0NPTU1JVF07CiB9CkBAIC0zNjc4LDYgKzM2ODIsMTkgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgdm9pZCBuZnNfZml4dXBfcmVmZXJyYWxfYXR0cmlidXRlcyhzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKK3sKKwlpZiAoISgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKSAmJgorCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRlNJRCkgJiYKKwkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMKSkpCisJCXJldHVybjsKKworCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9UWVBFIHwgTkZTX0FUVFJfRkFUVFJfTU9ERSB8CisJCU5GU19BVFRSX0ZBVFRSX05MSU5LOworCWZhdHRyLT5tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPOworCWZhdHRyLT5ubGluayA9IDI7Cit9CisKIGludCBuZnM0X3Byb2NfZnNfbG9jYXRpb25zKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpmc19sb2NhdGlvbnMsIHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzcwNCw2ICszNzIxLDcgQEAKIAlmc19sb2NhdGlvbnMtPnNlcnZlciA9IHNlcnZlcjsKIAlmc19sb2NhdGlvbnMtPm5sb2NhdGlvbnMgPSAwOwogCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2VydmVyLT5jbGllbnQsICZtc2csIDApOworCW5mc19maXh1cF9yZWZlcnJhbF9hdHRyaWJ1dGVzKCZmc19sb2NhdGlvbnMtPmZhdHRyKTsKIAlkcHJpbnRrKCIlczogcmV0dXJuZWQgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zNzY3LDYgKzM3ODUsNyBAQAogCS5jb21taXRfZG9uZQk9IG5mczRfY29tbWl0X2RvbmUsCiAJLmxvY2sJCT0gbmZzNF9wcm9jX2xvY2ssCiAJLmNsZWFyX2FjbF9jYWNoZSA9IG5mczRfemFwX2FjbF9hdHRyLAorCS5jbG9zZV9jb250ZXh0ICA9IG5mczRfY2xvc2VfY29udGV4dCwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggMjAyMmZlNDcuLjAyOThlOTAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTYyLDggKzYyLDE0IEBACiAKIHN0YXRpYyBpbnQgbmZzNF9pbml0X2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7Ci0JaW50IHN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZChjbHAsIE5GUzRfQ0FMTEJBQ0ssCi0JCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgY3JlZCk7CisJdW5zaWduZWQgc2hvcnQgcG9ydDsKKwlpbnQgc3RhdHVzOworCisJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0OworCWlmIChjbHAtPmNsX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlwb3J0ID0gbmZzX2NhbGxiYWNrX3RjcHBvcnQ2OworCisJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkKGNscCwgTkZTNF9DQUxMQkFDSywgcG9ydCwgY3JlZCk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlzdGF0dXMgPSBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShjbHAsIGNyZWQpOwogCWlmIChzdGF0dXMgPT0gMCkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGQxZTRjOGYuLjE2OTBmMGUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTIyLDIwICs1MjIsMTcgQEAKIAkJCQkgZGVjb2RlX2xvb2t1cF9tYXhzeiArIFwKIAkJCQkgZGVjb2RlX2ZzX2xvY2F0aW9uc19tYXhzeikKIAotc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50CW1vZGU7Ci0JdW5zaWduZWQgaW50CW5mczJ0eXBlOwotfSBuZnNfdHlwZTJmbXRbXSA9IHsKLQl7IDAsCQlORk5PTgkgICAgIH0sCi0JeyBTX0lGUkVHLAlORlJFRwkgICAgIH0sCi0JeyBTX0lGRElSLAlORkRJUgkgICAgIH0sCi0JeyBTX0lGQkxLLAlORkJMSwkgICAgIH0sCi0JeyBTX0lGQ0hSLAlORkNIUgkgICAgIH0sCi0JeyBTX0lGTE5LLAlORkxOSwkgICAgIH0sCi0JeyBTX0lGU09DSywJTkZTT0NLCSAgICAgfSwKLQl7IFNfSUZJRk8sCU5GRklGTwkgICAgIH0sCi0JeyAwLAkJTkZOT04JICAgICB9LAotCXsgMCwJCU5GTk9OCSAgICAgfSwKK3N0YXRpYyBjb25zdCB1bW9kZV90IG5mc190eXBlMmZtdFtdID0geworCVtORjRCQURdID0gMCwKKwlbTkY0UkVHXSA9IFNfSUZSRUcsCisJW05GNERJUl0gPSBTX0lGRElSLAorCVtORjRCTEtdID0gU19JRkJMSywKKwlbTkY0Q0hSXSA9IFNfSUZDSFIsCisJW05GNExOS10gPSBTX0lGTE5LLAorCVtORjRTT0NLXSA9IFNfSUZTT0NLLAorCVtORjRGSUZPXSA9IFNfSUZJRk8sCisJW05GNEFUVFJESVJdID0gMCwKKwlbTkY0TkFNRURBVFRSXSA9IDAsCiB9OwogCiBzdHJ1Y3QgY29tcG91bmRfaGRyIHsKQEAgLTIxNjAsNiArMjE1Nyw3IEBACiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3R5cGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKnR5cGUpCiB7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKnR5cGUgPSAwOwogCWlmICh1bmxpa2VseShiaXRtYXBbMF0gJiAoRkFUVFI0X1dPUkQwX1RZUEUgLSAxVSkpKQpAQCAtMjE3MiwxNCArMjE3MCwxNiBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfVFlQRTsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfVFlQRTsKIAl9Ci0JZHByaW50aygiJXM6IHR5cGU9MCVvXG4iLCBfX2Z1bmNfXywgbmZzX3R5cGUyZm10Wyp0eXBlXS5uZnMydHlwZSk7Ci0JcmV0dXJuIDA7CisJZHByaW50aygiJXM6IHR5cGU9MCVvXG4iLCBfX2Z1bmNfXywgbmZzX3R5cGUyZm10Wyp0eXBlXSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9jaGFuZ2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKmNoYW5nZSkKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqY2hhbmdlID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9DSEFOR0UgLSAxVSkpKQpAQCAtMjE4OCwxNSArMjE4OCwxNyBAQAogCQlSRUFEX0JVRig4KTsKIAkJUkVBRDY0KCpjaGFuZ2UpOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9DSEFOR0U7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0NIQU5HRTsKIAl9CiAJZHByaW50aygiJXM6IGNoYW5nZSBhdHRyaWJ1dGU9JUx1XG4iLCBfX2Z1bmNfXywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpKmNoYW5nZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9zaXplKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpzaXplKQogewogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSpzaXplID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9TSVpFIC0gMVUpKSkKQEAgLTIyMDUsOSArMjIwNywxMCBAQAogCQlSRUFEX0JVRig4KTsKIAkJUkVBRDY0KCpzaXplKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfU0laRTsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfU0laRTsKIAl9CiAJZHByaW50aygiJXM6IGZpbGUgc2l6ZT0lTHVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSpzaXplKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2xpbmtfc3VwcG9ydChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqcmVzKQpAQCAtMjI0NSw2ICsyMjQ4LDcgQEAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZnNpZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCBzdHJ1Y3QgbmZzX2ZzaWQgKmZzaWQpCiB7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJZnNpZC0+bWFqb3IgPSAwOwogCWZzaWQtPm1pbm9yID0gMDsKQEAgLTIyNTUsMTEgKzIyNTksMTIgQEAKIAkJUkVBRDY0KGZzaWQtPm1ham9yKTsKIAkJUkVBRDY0KGZzaWQtPm1pbm9yKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfRlNJRDsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfRlNJRDsKIAl9CiAJZHByaW50aygiJXM6IGZzaWQ9KDB4JUx4LzB4JUx4KVxuIiwgX19mdW5jX18sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWZzaWQtPm1ham9yLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmc2lkLT5taW5vcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9sZWFzZV90aW1lKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpyZXMpCkBAIC0yMjk3LDYgKzIzMDIsNyBAQAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9maWxlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKmZpbGVpZCkKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqZmlsZWlkID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9GSUxFSUQgLSAxVSkpKQpAQCAtMjMwNSwxNCArMjMxMSwxNiBAQAogCQlSRUFEX0JVRig4KTsKIAkJUkVBRDY0KCpmaWxlaWQpOwogCQliaXRtYXBbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFSUQ7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKIAl9CiAJZHByaW50aygiJXM6IGZpbGVpZD0lTHVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSpmaWxlaWQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKmZpbGVpZCkKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqZmlsZWlkID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCAtIDFVKSkpCkBAIC0yMzIxLDkgKzIzMjksMTAgQEAKIAkJUkVBRF9CVUYoOCk7CiAJCVJFQUQ2NCgqZmlsZWlkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKIAl9CiAJZHByaW50aygiJXM6IGZpbGVpZD0lTHVcbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKSpmaWxlaWQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZmlsZXNfYXZhaWwoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDY0X3QgKnJlcykKQEAgLTI0NzksNiArMjQ4OCw4IEBACiAJCWlmIChyZXMtPm5sb2NhdGlvbnMgPCBORlM0X0ZTX0xPQ0FUSU9OU19NQVhFTlRSSUVTKQogCQkJcmVzLT5ubG9jYXRpb25zKys7CiAJfQorCWlmIChyZXMtPm5sb2NhdGlvbnMgIT0gMCkKKwkJc3RhdHVzID0gTkZTX0FUVFJfRkFUVFJfVjRfUkVGRVJSQUw7CiBvdXQ6CiAJZHByaW50aygiJXM6IGZzX2xvY2F0aW9ucyBkb25lLCBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjU4MCwyNiArMjU5MSwzMCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbW9kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqbW9kZSkKK3N0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbW9kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1bW9kZV90ICptb2RlKQogeworCXVpbnQzMl90IHRtcDsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqbW9kZSA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfTU9ERSAtIDFVKSkpCiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX01PREUpKSB7CiAJCVJFQURfQlVGKDQpOwotCQlSRUFEMzIoKm1vZGUpOwotCQkqbW9kZSAmPSB+U19JRk1UOworCQlSRUFEMzIodG1wKTsKKwkJKm1vZGUgPSB0bXAgJiB+U19JRk1UOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9NT0RFOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9NT0RFOwogCX0KIAlkcHJpbnRrKCIlczogZmlsZSBtb2RlPTAlb1xuIiwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpKm1vZGUpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbmxpbmsoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKm5saW5rKQogewogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSpubGluayA9IDE7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfTlVNTElOS1MgLSAxVSkpKQpAQCAtMjYwOCwxNSArMjYyMywxNyBAQAogCQlSRUFEX0JVRig0KTsKIAkJUkVBRDMyKCpubGluayk7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX05VTUxJTktTOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9OTElOSzsKIAl9CiAJZHByaW50aygiJXM6IG5saW5rPSV1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludCkqbmxpbmspOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfb3duZXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKnVpZCkKIHsKIAl1aW50MzJfdCBsZW47CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKnVpZCA9IC0yOwogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX09XTkVSIC0gMVUpKSkKQEAgLTI2MjYsNyArMjY0Myw5IEBACiAJCVJFQUQzMihsZW4pOwogCQlSRUFEX0JVRihsZW4pOwogCQlpZiAobGVuIDwgWERSX01BWF9ORVRPQkopIHsKLQkJCWlmIChuZnNfbWFwX25hbWVfdG9fdWlkKGNscCwgKGNoYXIgKilwLCBsZW4sIHVpZCkgIT0gMCkKKwkJCWlmIChuZnNfbWFwX25hbWVfdG9fdWlkKGNscCwgKGNoYXIgKilwLCBsZW4sIHVpZCkgPT0gMCkKKwkJCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9PV05FUjsKKwkJCWVsc2UKIAkJCQlkcHJpbnRrKCIlczogbmZzX21hcF9uYW1lX3RvX3VpZCBmYWlsZWQhXG4iLAogCQkJCQkJX19mdW5jX18pOwogCQl9IGVsc2UKQEAgLTI2MzUsMTMgKzI2NTQsMTQgQEAKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfT1dORVI7CiAJfQogCWRwcmludGsoIiVzOiB1aWQ9JWRcbiIsIF9fZnVuY19fLCAoaW50KSp1aWQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZ3JvdXAoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgdWludDMyX3QgKmdpZCkKIHsKIAl1aW50MzJfdCBsZW47CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKmdpZCA9IC0yOwogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQIC0gMVUpKSkKQEAgLTI2NTEsNyArMjY3MSw5IEBACiAJCVJFQUQzMihsZW4pOwogCQlSRUFEX0JVRihsZW4pOwogCQlpZiAobGVuIDwgWERSX01BWF9ORVRPQkopIHsKLQkJCWlmIChuZnNfbWFwX2dyb3VwX3RvX2dpZChjbHAsIChjaGFyICopcCwgbGVuLCBnaWQpICE9IDApCisJCQlpZiAobmZzX21hcF9ncm91cF90b19naWQoY2xwLCAoY2hhciAqKXAsIGxlbiwgZ2lkKSA9PSAwKQorCQkJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0dST1VQOworCQkJZWxzZQogCQkJCWRwcmludGsoIiVzOiBuZnNfbWFwX2dyb3VwX3RvX2dpZCBmYWlsZWQhXG4iLAogCQkJCQkJX19mdW5jX18pOwogCQl9IGVsc2UKQEAgLTI2NjAsMTMgKzI2ODIsMTQgQEAKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfT1dORVJfR1JPVVA7CiAJfQogCWRwcmludGsoIiVzOiBnaWQ9JWRcbiIsIF9fZnVuY19fLCAoaW50KSpnaWQpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfcmRldihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCBkZXZfdCAqcmRldikKIHsKIAl1aW50MzJfdCBtYWpvciA9IDAsIG1pbm9yID0gMDsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqcmRldiA9IE1LREVWKDAsMCk7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfUkFXREVWIC0gMVUpKSkKQEAgLTI2ODEsOSArMjcwNCwxMCBAQAogCQlpZiAoTUFKT1IodG1wKSA9PSBtYWpvciAmJiBNSU5PUih0bXApID09IG1pbm9yKQogCQkJKnJkZXYgPSB0bXA7CiAJCWJpdG1hcFsxXSAmPSB+IEZBVFRSNF9XT1JEMV9SQVdERVY7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX1JERVY7CiAJfQogCWRwcmludGsoIiVzOiByZGV2PSgweCV4OjB4JXgpXG4iLCBfX2Z1bmNfXywgbWFqb3IsIG1pbm9yKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3NwYWNlX2F2YWlsKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpyZXMpCkBAIC0yNzQwLDYgKzI3NjQsNyBAQAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9zcGFjZV91c2VkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICp1c2VkKQogewogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSp1c2VkID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEIC0gMVUpKSkKQEAgLTI3NDgsMTAgKzI3NzMsMTEgQEAKIAkJUkVBRF9CVUYoOCk7CiAJCVJFQUQ2NCgqdXNlZCk7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1NQQUNFX1VTRUQ7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQ7CiAJfQogCWRwcmludGsoIiVzOiBzcGFjZSB1c2VkPSVMdVxuIiwgX19mdW5jX18sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSp1c2VkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3RpbWUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHRpbWVzcGVjICp0aW1lKQpAQCAtMjc3OCw2ICsyODA0LDggQEAKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMV0gJiBGQVRUUjRfV09SRDFfVElNRV9BQ0NFU1MpKSB7CiAJCXN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWUoeGRyLCB0aW1lKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gTkZTX0FUVFJfRkFUVFJfQVRJTUU7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTOwogCX0KIAlkcHJpbnRrKCIlczogYXRpbWU9JWxkXG4iLCBfX2Z1bmNfXywgKGxvbmcpdGltZS0+dHZfc2VjKTsKQEAgLTI3OTQsNiArMjgyMiw4IEBACiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEEpKSB7CiAJCXN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWUoeGRyLCB0aW1lKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gTkZTX0FUVFJfRkFUVFJfQ1RJTUU7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1RJTUVfTUVUQURBVEE7CiAJfQogCWRwcmludGsoIiVzOiBjdGltZT0lbGRcbiIsIF9fZnVuY19fLCAobG9uZyl0aW1lLT50dl9zZWMpOwpAQCAtMjgxMCw2ICsyODQwLDggQEAKIAkJcmV0dXJuIC1FSU87CiAJaWYgKGxpa2VseShiaXRtYXBbMV0gJiBGQVRUUjRfV09SRDFfVElNRV9NT0RJRlkpKSB7CiAJCXN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWUoeGRyLCB0aW1lKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gTkZTX0FUVFJfRkFUVFJfTVRJTUU7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZOwogCX0KIAlkcHJpbnRrKCIlczogbXRpbWU9JWxkXG4iLCBfX2Z1bmNfXywgKGxvbmcpdGltZS0+dHZfc2VjKTsKQEAgLTI5OTQsNjMgKzMwMjYsMTE2IEBACiAJdWludDMyX3QgYXR0cmxlbiwKIAkJIGJpdG1hcFsyXSA9IHswfSwKIAkJIHR5cGU7Ci0JaW50IHN0YXR1cywgZm1vZGUgPSAwOworCWludCBzdGF0dXM7CisJdW1vZGVfdCBmbW9kZSA9IDA7CiAJdWludDY0X3QgZmlsZWlkOwogCi0JaWYgKChzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfR0VUQVRUUikpICE9IDApCi0JCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfYml0bWFwKHhkciwgYml0bWFwKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfb3BfaGRyKHhkciwgT1BfR0VUQVRUUik7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwogCi0JZmF0dHItPmJpdG1hcFswXSA9IGJpdG1hcFswXTsKLQlmYXR0ci0+Yml0bWFwWzFdID0gYml0bWFwWzFdOworCXN0YXR1cyA9IGRlY29kZV9hdHRyX2JpdG1hcCh4ZHIsIGJpdG1hcCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8geGRyX2Vycm9yOwogCi0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9sZW5ndGgoeGRyLCAmYXR0cmxlbiwgJnNhdmVwKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9sZW5ndGgoeGRyLCAmYXR0cmxlbiwgJnNhdmVwKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7CiAKIAotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfdHlwZSh4ZHIsIGJpdG1hcCwgJnR5cGUpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9hdHRyX3R5cGUoeGRyLCBiaXRtYXAsICZ0eXBlKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JZmF0dHItPnR5cGUgPSBuZnNfdHlwZTJmbXRbdHlwZV0ubmZzMnR5cGU7Ci0JZm1vZGUgPSBuZnNfdHlwZTJmbXRbdHlwZV0ubW9kZTsKKwlmYXR0ci0+bW9kZSA9IDA7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWZhdHRyLT5tb2RlIHw9IG5mc190eXBlMmZtdFt0eXBlXTsKKwkJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKwl9CiAKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2NoYW5nZSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5jaGFuZ2VfYXR0cikpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfY2hhbmdlKHhkciwgYml0bWFwLCAmZmF0dHItPmNoYW5nZV9hdHRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9zaXplKHhkciwgYml0bWFwLCAmZmF0dHItPnNpemUpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9zaXplKHhkciwgYml0bWFwLCAmZmF0dHItPnNpemUpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2ZzaWQoeGRyLCBiaXRtYXAsICZmYXR0ci0+ZnNpZCkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX2ZzaWQoeGRyLCBiaXRtYXAsICZmYXR0ci0+ZnNpZCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfZmlsZWlkKHhkciwgYml0bWFwLCAmZmF0dHItPmZpbGVpZCkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX2ZpbGVpZCh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5maWxlaWQpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2ZzX2xvY2F0aW9ucyh4ZHIsIGJpdG1hcCwgY29udGFpbmVyX29mKGZhdHRyLAorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9mc19sb2NhdGlvbnMoeGRyLCBiaXRtYXAsIGNvbnRhaW5lcl9vZihmYXR0ciwKIAkJCQkJCXN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9ucywKLQkJCQkJCWZhdHRyKSkpICE9IDApCisJCQkJCQlmYXR0cikpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX21vZGUoeGRyLCBiaXRtYXAsICZmYXR0ci0+bW9kZSkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX21vZGUoeGRyLCBiaXRtYXAsICZmbW9kZSk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWZhdHRyLT5tb2RlIHw9IGZtb2RlOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfbmxpbmsoeGRyLCBiaXRtYXAsICZmYXR0ci0+bmxpbmspKSAhPSAwKQorCWlmIChzdGF0dXMgIT0gMCkgeworCQlmYXR0ci0+bW9kZSB8PSBmbW9kZTsKKwkJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9ubGluayh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5ubGluayk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfb3duZXIoeGRyLCBiaXRtYXAsIHNlcnZlci0+bmZzX2NsaWVudCwgJmZhdHRyLT51aWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9vd25lcih4ZHIsIGJpdG1hcCwgc2VydmVyLT5uZnNfY2xpZW50LCAmZmF0dHItPnVpZCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfZ3JvdXAoeGRyLCBiaXRtYXAsIHNlcnZlci0+bmZzX2NsaWVudCwgJmZhdHRyLT5naWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9ncm91cCh4ZHIsIGJpdG1hcCwgc2VydmVyLT5uZnNfY2xpZW50LCAmZmF0dHItPmdpZCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfcmRldih4ZHIsIGJpdG1hcCwgJmZhdHRyLT5yZGV2KSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfcmRldih4ZHIsIGJpdG1hcCwgJmZhdHRyLT5yZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9zcGFjZV91c2VkKHhkciwgYml0bWFwLCAmZmF0dHItPmR1Lm5mczMudXNlZCkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX3NwYWNlX3VzZWQoeGRyLCBiaXRtYXAsICZmYXR0ci0+ZHUubmZzMy51c2VkKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lX2FjY2Vzcyh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5hdGltZSkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWVfYWNjZXNzKHhkciwgYml0bWFwLCAmZmF0dHItPmF0aW1lKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lX21ldGFkYXRhKHhkciwgYml0bWFwLCAmZmF0dHItPmN0aW1lKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfdGltZV9tZXRhZGF0YSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5jdGltZSk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfdGltZV9tb2RpZnkoeGRyLCBiaXRtYXAsICZmYXR0ci0+bXRpbWUpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lX21vZGlmeSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5tdGltZSk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmaWxlaWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9tb3VudGVkX29uX2ZpbGVpZCh4ZHIsIGJpdG1hcCwgJmZpbGVpZCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmIChmYXR0ci0+ZmlsZWlkID09IDAgJiYgZmlsZWlkICE9IDApCisJaWYgKHN0YXR1cyAhPSAwICYmICEoZmF0dHItPnZhbGlkICYgc3RhdHVzKSkgewogCQlmYXR0ci0+ZmlsZWlkID0gZmlsZWlkOwotCWlmICgoc3RhdHVzID0gdmVyaWZ5X2F0dHJfbGVuKHhkciwgc2F2ZXAsIGF0dHJsZW4pKSA9PSAwKQotCQlmYXR0ci0+dmFsaWQgPSBORlNfQVRUUl9GQVRUUiB8IE5GU19BVFRSX0ZBVFRSX1YzIHwgTkZTX0FUVFJfRkFUVFJfVjQ7CisJCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gdmVyaWZ5X2F0dHJfbGVuKHhkciwgc2F2ZXAsIGF0dHJsZW4pOwogeGRyX2Vycm9yOgogCWRwcmludGsoIiVzOiB4ZHIgcmV0dXJuZWQgJWRcbiIsIF9fZnVuY19fLCAtc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNDA3OCw5ICs0MTYzLDcgQEAKIAlzdGF0dXMgPSBkZWNvZGVfc2V0YXR0cigmeGRyLCByZXMpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwotCXN0YXR1cyA9IGRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcik7Ci0JaWYgKHN0YXR1cyA9PSBORlM0RVJSX0RFTEFZKQotCQlzdGF0dXMgPSAwOworCWRlY29kZV9nZXRmYXR0cigmeGRyLCByZXMtPmZhdHRyLCByZXMtPnNlcnZlcik7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9wYWdlbGlzdC5jIGIvZnMvbmZzL3BhZ2VsaXN0LmMKaW5kZXggN2YwNzkyMC4uZTI5NzU5MyAxMDA2NDQKLS0tIGEvZnMvbmZzL3BhZ2VsaXN0LmMKKysrIGIvZnMvbmZzL3BhZ2VsaXN0LmMKQEAgLTE3NiwxNyArMTc2LDYgQEAKIAlrcmVmX3B1dCgmcmVxLT53Yl9rcmVmLCBuZnNfZnJlZV9yZXF1ZXN0KTsKIH0KIAotc3RhdGljIGludCBuZnNfd2FpdF9iaXRfa2lsbGFibGUodm9pZCAqd29yZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCWVsc2UKLQkJc2NoZWR1bGUoKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKioKICAqIG5mc193YWl0X29uX3JlcXVlc3QgLSBXYWl0IGZvciBhIHJlcXVlc3QgdG8gY29tcGxldGUuCiAgKiBAcmVxOiByZXF1ZXN0IHRvIHdhaXQgdXBvbi4KZGlmZiAtLWdpdCBhL2ZzL25mcy9wcm9jLmMgYi9mcy9uZnMvcHJvYy5jCmluZGV4IDE5MzQ2NTIuLjdiZTcyZDkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wcm9jLmMKKysrIGIvZnMvbmZzL3Byb2MuYwpAQCAtNjYzLDQgKzY2Myw1IEBACiAJLmNvbW1pdF9zZXR1cAk9IG5mc19wcm9jX2NvbW1pdF9zZXR1cCwKIAkubG9jawkJPSBuZnNfcHJvY19sb2NrLAogCS5sb2NrX2NoZWNrX2JvdW5kcyA9IG5mc19sb2NrX2NoZWNrX2JvdW5kcywKKwkuY2xvc2VfY29udGV4dAk9IG5mc19jbG9zZV9jb250ZXh0LAogfTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9yZWFkLmMgYi9mcy9uZnMvcmVhZC5jCmluZGV4IGY4NTYwMDQuLjRhY2UzYzUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9yZWFkLmMKKysrIGIvZnMvbmZzL3JlYWQuYwpAQCAtMjQsNiArMjQsNyBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCiAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfUEFHRUNBQ0hFCiAKQEAgLTExMSw4ICsxMTIsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBuZnNfcmVhZHBhZ2VfYXN5bmMoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJc3RydWN0IHBhZ2UgKnBhZ2UpCitpbnQgbmZzX3JlYWRwYWdlX2FzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlMSVNUX0hFQUQob25lX3JlcXVlc3QpOwogCXN0cnVjdCBuZnNfcGFnZQkqbmV3OwpAQCAtMTM5LDYgKzE0MCwxMSBAQAogCiBzdGF0aWMgdm9pZCBuZnNfcmVhZHBhZ2VfcmVsZWFzZShzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkKIHsKKwlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGUgPSByZXEtPndiX2NvbnRleHQtPnBhdGguZGVudHJ5LT5kX2lub2RlOworCisJaWYgKFBhZ2VVcHRvZGF0ZShyZXEtPndiX3BhZ2UpKQorCQluZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShkX2lub2RlLCByZXEtPndiX3BhZ2UsIDApOworCiAJdW5sb2NrX3BhZ2UocmVxLT53Yl9wYWdlKTsKIAogCWRwcmludGsoIk5GUzogcmVhZCBkb25lICglcy8lTGQgJWRAJUxkKVxuIiwKQEAgLTUxMCw4ICs1MTYsMTUgQEAKIAl9IGVsc2UKIAkJY3R4ID0gZ2V0X25mc19vcGVuX2NvbnRleHQobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpKTsKIAorCWlmICghSVNfU1lOQyhpbm9kZSkpIHsKKwkJZXJyb3IgPSBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGN0eCwgaW5vZGUsIHBhZ2UpOworCQlpZiAoZXJyb3IgPT0gMCkKKwkJCWdvdG8gb3V0OworCX0KKwogCWVycm9yID0gbmZzX3JlYWRwYWdlX2FzeW5jKGN0eCwgaW5vZGUsIHBhZ2UpOwogCitvdXQ6CiAJcHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTsKIAlyZXR1cm4gZXJyb3I7CiBvdXRfdW5sb2NrOgpAQCAtNTg0LDYgKzU5NywxNSBAQAogCQkJcmV0dXJuIC1FQkFERjsKIAl9IGVsc2UKIAkJZGVzYy5jdHggPSBnZXRfbmZzX29wZW5fY29udGV4dChuZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlscCkpOworCisJLyogYXR0ZW1wdCB0byByZWFkIGFzIG1hbnkgb2YgdGhlIHBhZ2VzIGFzIHBvc3NpYmxlIGZyb20gdGhlIGNhY2hlCisJICogLSB0aGlzIHJldHVybnMgLUVOT0JVRlMgaW1tZWRpYXRlbHkgaWYgdGhlIGNvb2tpZSBpcyBuZWdhdGl2ZQorCSAqLworCXJldCA9IG5mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKGRlc2MuY3R4LCBpbm9kZSwgbWFwcGluZywKKwkJCQkJIHBhZ2VzLCAmbnJfcGFnZXMpOworCWlmIChyZXQgPT0gMCkKKwkJZ290byByZWFkX2NvbXBsZXRlOyAvKiBhbGwgcGFnZXMgd2VyZSByZWFkICovCisKIAlpZiAocnNpemUgPCBQQUdFX0NBQ0hFX1NJWkUpCiAJCW5mc19wYWdlaW9faW5pdCgmcGdpbywgaW5vZGUsIG5mc19wYWdlaW5fbXVsdGksIHJzaXplLCAwKTsKIAllbHNlCkBAIC01OTQsNiArNjE2LDcgQEAKIAluZnNfcGFnZWlvX2NvbXBsZXRlKCZwZ2lvKTsKIAlucGFnZXMgPSAocGdpby5wZ19ieXRlc193cml0dGVuICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAluZnNfYWRkX3N0YXRzKGlub2RlLCBORlNJT1NfUkVBRFBBR0VTLCBucGFnZXMpOworcmVhZF9jb21wbGV0ZToKIAlwdXRfbmZzX29wZW5fY29udGV4dChkZXNjLmN0eCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggZDY2ODZmNC4uODJlYWFkYiAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCiAKICNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfVkZTCiAKQEAgLTc2LDYgKzc3LDcgQEAKIAlPcHRfcmRpcnBsdXMsIE9wdF9ub3JkaXJwbHVzLAogCU9wdF9zaGFyZWNhY2hlLCBPcHRfbm9zaGFyZWNhY2hlLAogCU9wdF9yZXN2cG9ydCwgT3B0X25vcmVzdnBvcnQsCisJT3B0X2ZzY2FjaGUsIE9wdF9ub2ZzY2FjaGUsCiAKIAkvKiBNb3VudCBvcHRpb25zIHRoYXQgdGFrZSBpbnRlZ2VyIGFyZ3VtZW50cyAqLwogCU9wdF9wb3J0LApAQCAtOTMsNiArOTUsNyBAQAogCU9wdF9zZWMsIE9wdF9wcm90bywgT3B0X21vdW50cHJvdG8sIE9wdF9tb3VudGhvc3QsCiAJT3B0X2FkZHIsIE9wdF9tb3VudGFkZHIsIE9wdF9jbGllbnRhZGRyLAogCU9wdF9sb29rdXBjYWNoZSwKKwlPcHRfZnNjYWNoZV91bmlxLAogCiAJLyogU3BlY2lhbCBtb3VudCBvcHRpb25zICovCiAJT3B0X3VzZXJzcGFjZSwgT3B0X2RlcHJlY2F0ZWQsIE9wdF9zbG9wcHksCkBAIC0xMzIsNiArMTM1LDkgQEAKIAl7IE9wdF9ub3NoYXJlY2FjaGUsICJub3NoYXJlY2FjaGUiIH0sCiAJeyBPcHRfcmVzdnBvcnQsICJyZXN2cG9ydCIgfSwKIAl7IE9wdF9ub3Jlc3Zwb3J0LCAibm9yZXN2cG9ydCIgfSwKKwl7IE9wdF9mc2NhY2hlLCAiZnNjIiB9LAorCXsgT3B0X2ZzY2FjaGVfdW5pcSwgImZzYz0lcyIgfSwKKwl7IE9wdF9ub2ZzY2FjaGUsICJub2ZzYyIgfSwKIAogCXsgT3B0X3BvcnQsICJwb3J0PSV1IiB9LAogCXsgT3B0X3JzaXplLCAicnNpemU9JXUiIH0sCkBAIC01NjMsNiArNTY5LDggQEAKIAlpZiAoY2xwLT5ycGNfb3BzLT52ZXJzaW9uID09IDQpCiAJCXNlcV9wcmludGYobSwgIixjbGllbnRhZGRyPSVzIiwgY2xwLT5jbF9pcGFkZHIpOwogI2VuZGlmCisJaWYgKG5mc3MtPm9wdGlvbnMgJiBORlNfT1BUSU9OX0ZTQ0FDSEUpCisJCXNlcV9wcmludGYobSwgIixmc2MiKTsKIH0KIAogLyoKQEAgLTY0MSw2ICs2NDksMTAgQEAKIAkJCXRvdGFscy5ldmVudHNbaV0gKz0gc3RhdHMtPmV2ZW50c1tpXTsKIAkJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0JZVEVTTUFYOyBpKyspCiAJCQl0b3RhbHMuYnl0ZXNbaV0gKz0gc3RhdHMtPmJ5dGVzW2ldOworI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCQlmb3IgKGkgPSAwOyBpIDwgX19ORlNJT1NfRlNDQUNIRU1BWDsgaSsrKQorCQkJdG90YWxzLmZzY2FjaGVbaV0gKz0gc3RhdHMtPmZzY2FjaGVbaV07CisjZW5kaWYKIAogCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KQEAgLTY1MSw2ICs2NjMsMTMgQEAKIAlzZXFfcHJpbnRmKG0sICJcblx0Ynl0ZXM6XHQiKTsKIAlmb3IgKGkgPSAwOyBpIDwgX19ORlNJT1NfQllURVNNQVg7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiJUx1ICIsIHRvdGFscy5ieXRlc1tpXSk7CisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJaWYgKG5mc3MtPm9wdGlvbnMgJiBORlNfT1BUSU9OX0ZTQ0FDSEUpIHsKKwkJc2VxX3ByaW50ZihtLCAiXG5cdGZzYzpcdCIpOworCQlmb3IgKGkgPSAwOyBpIDwgX19ORlNJT1NfRlNDQUNIRU1BWDsgaSsrKQorCQkJc2VxX3ByaW50ZihtLCAiJUx1ICIsIHRvdGFscy5ieXRlc1tpXSk7CisJfQorI2VuZGlmCiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAogCXJwY19wcmludF9pb3N0YXRzKG0sIG5mc3MtPmNsaWVudCk7CkBAIC0xMDE4LDYgKzEwMzcsNyBAQAogCQljYXNlIE9wdF9yZG1hOgogCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfVENQOyAvKiBmb3Igc2lkZSBwcm90b2NvbHMgKi8KIAkJCW1udC0+bmZzX3NlcnZlci5wcm90b2NvbCA9IFhQUlRfVFJBTlNQT1JUX1JETUE7CisJCQl4cHJ0X2xvYWRfdHJhbnNwb3J0KHApOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2FjbDoKIAkJCW1udC0+ZmxhZ3MgJj0gfk5GU19NT1VOVF9OT0FDTDsKQEAgLTEwNDMsNiArMTA2MywyNCBAQAogCQljYXNlIE9wdF9ub3Jlc3Zwb3J0OgogCQkJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfTk9SRVNWUE9SVDsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9mc2NhY2hlOgorCQkJbW50LT5vcHRpb25zIHw9IE5GU19PUFRJT05fRlNDQUNIRTsKKwkJCWtmcmVlKG1udC0+ZnNjYWNoZV91bmlxKTsKKwkJCW1udC0+ZnNjYWNoZV91bmlxID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9ub2ZzY2FjaGU6CisJCQltbnQtPm9wdGlvbnMgJj0gfk5GU19PUFRJT05fRlNDQUNIRTsKKwkJCWtmcmVlKG1udC0+ZnNjYWNoZV91bmlxKTsKKwkJCW1udC0+ZnNjYWNoZV91bmlxID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9mc2NhY2hlX3VuaXE6CisJCQlzdHJpbmcgPSBtYXRjaF9zdHJkdXAoYXJncyk7CisJCQlpZiAoIXN0cmluZykKKwkJCQlnb3RvIG91dF9ub21lbTsKKwkJCWtmcmVlKG1udC0+ZnNjYWNoZV91bmlxKTsKKwkJCW1udC0+ZnNjYWNoZV91bmlxID0gc3RyaW5nOworCQkJbW50LT5vcHRpb25zIHw9IE5GU19PUFRJT05fRlNDQUNIRTsKKwkJCWJyZWFrOwogCiAJCS8qCiAJCSAqIG9wdGlvbnMgdGhhdCB0YWtlIG51bWVyaWMgdmFsdWVzCkBAIC0xMjA1LDEyICsxMjQzLDE0IEBACiAJCQkJLyogdmVjdG9yIHNpZGUgcHJvdG9jb2xzIHRvIFRDUCAqLwogCQkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1RDUDsKIAkJCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9SRE1BOworCQkJCXhwcnRfbG9hZF90cmFuc3BvcnQoc3RyaW5nKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJZXJyb3JzKys7CiAJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgdW5yZWNvZ25pemVkICIKIAkJCQkJCSJ0cmFuc3BvcnQgcHJvdG9jb2xcbiIpOwogCQkJfQorCQkJa2ZyZWUoc3RyaW5nKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9tb3VudHByb3RvOgogCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOwpAQCAtMTIxOCw3ICsxMjU4LDYgQEAKIAkJCQlnb3RvIG91dF9ub21lbTsKIAkJCXRva2VuID0gbWF0Y2hfdG9rZW4oc3RyaW5nLAogCQkJCQkgICAgbmZzX3hwcnRfcHJvdG9jb2xfdG9rZW5zLCBhcmdzKTsKLQkJCWtmcmVlKHN0cmluZyk7CiAKIAkJCXN3aXRjaCAodG9rZW4pIHsKIAkJCWNhc2UgT3B0X3hwcnRfdWRwOgpAQCAtMTg2OCw4ICsxOTA3LDYgQEAKICAJbmZzX2luaXRpYWxpc2Vfc2Ioc2IpOwogfQogCi0jZGVmaW5lIE5GU19NU19NQVNLIChNU19SRE9OTFl8TVNfTk9TVUlEfE1TX05PREVWfE1TX05PRVhFQ3xNU19TWU5DSFJPTk9VUykKLQogc3RhdGljIGludCBuZnNfY29tcGFyZV9tb3VudF9vcHRpb25zKGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKmIsIGludCBmbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqYSA9IHMtPnNfZnNfaW5mbzsKQEAgLTIwMzQsNiArMjA3MSw3IEBACiAJaWYgKCFzLT5zX3Jvb3QpIHsKIAkJLyogaW5pdGlhbCBzdXBlcmJsb2NrL3Jvb3QgY3JlYXRpb24gKi8KIAkJbmZzX2ZpbGxfc3VwZXIocywgZGF0YSk7CisJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgZGF0YSk7CiAJfQogCiAJbW50cm9vdCA9IG5mc19nZXRfcm9vdChzLCBtbnRmaCk7CkBAIC0yMDU0LDYgKzIwOTIsNyBAQAogb3V0OgogCWtmcmVlKGRhdGEtPm5mc19zZXJ2ZXIuaG9zdG5hbWUpOwogCWtmcmVlKGRhdGEtPm1vdW50X3NlcnZlci5ob3N0bmFtZSk7CisJa2ZyZWUoZGF0YS0+ZnNjYWNoZV91bmlxKTsKIAlzZWN1cml0eV9mcmVlX21udF9vcHRzKCZkYXRhLT5sc21fb3B0cyk7CiBvdXRfZnJlZV9maDoKIAlrZnJlZShtbnRmaCk7CkBAIC0yMDgxLDYgKzIxMjAsNyBAQAogCiAJYmRpX3VucmVnaXN0ZXIoJnNlcnZlci0+YmFja2luZ19kZXZfaW5mbyk7CiAJa2lsbF9hbm9uX3N1cGVyKHMpOworCW5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHMpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogfQogCkBAIC0yMzg4LDYgKzI0MjgsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mczRfZmlsbF9zdXBlcihzKTsKKwkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzLCBkYXRhKTsKIAl9CiAKIAltbnRyb290ID0gbmZzNF9nZXRfcm9vdChzLCBtbnRmaCk7CkBAIC0yNDA5LDYgKzI0NTAsNyBAQAogCWtmcmVlKGRhdGEtPmNsaWVudF9hZGRyZXNzKTsKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmV4cG9ydF9wYXRoKTsKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmhvc3RuYW1lKTsKKwlrZnJlZShkYXRhLT5mc2NhY2hlX3VuaXEpOwogCXNlY3VyaXR5X2ZyZWVfbW50X29wdHMoJmRhdGEtPmxzbV9vcHRzKTsKIG91dF9mcmVlX2ZoOgogCWtmcmVlKG1udGZoKTsKQEAgLTI0MzUsNiArMjQ3Nyw3IEBACiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKIAogCW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc2VydmVyKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzYik7CiAJbmZzX2ZyZWVfc2VydmVyKHNlcnZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggOWY5ODQ1OC4uZTU2MGE3OCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTMxMywxOSArMzEzLDM0IEBACiBpbnQgbmZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXVuc2lnbmVkIGxvbmcgKmJpdGxvY2sgPSAmTkZTX0koaW5vZGUpLT5mbGFnczsKIAlzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yIHBnaW87CiAJaW50IGVycjsKIAorCS8qIFN0b3AgZGlydHlpbmcgb2YgbmV3IHBhZ2VzIHdoaWxlIHdlIHN5bmMgKi8KKwllcnIgPSB3YWl0X29uX2JpdF9sb2NrKGJpdGxvY2ssIE5GU19JTk9fRkxVU0hJTkcsCisJCQluZnNfd2FpdF9iaXRfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2VycjsKKwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNXUklURVBBR0VTKTsKIAogCW5mc19wYWdlaW9faW5pdF93cml0ZSgmcGdpbywgaW5vZGUsIHdiX3ByaW9yaXR5KHdiYykpOwogCWVyciA9IHdyaXRlX2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHdiYywgbmZzX3dyaXRlcGFnZXNfY2FsbGJhY2ssICZwZ2lvKTsKIAluZnNfcGFnZWlvX2NvbXBsZXRlKCZwZ2lvKTsKKworCWNsZWFyX2JpdF91bmxvY2soTkZTX0lOT19GTFVTSElORywgYml0bG9jayk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwl3YWtlX3VwX2JpdChiaXRsb2NrLCBORlNfSU5PX0ZMVVNISU5HKTsKKwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCWlmIChwZ2lvLnBnX2Vycm9yIDwgMCkKLQkJcmV0dXJuIHBnaW8ucGdfZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKKwllcnIgPSBwZ2lvLnBnX2Vycm9yOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9lcnI7CiAJcmV0dXJuIDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC00MDQsNyArNDE5LDYgQEAKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQluZnNpLT5uY29tbWl0Kys7CiAJc2V0X2JpdChQR19DTEVBTiwgJihyZXEpLT53Yl9mbGFncyk7CiAJcmFkaXhfdHJlZV90YWdfc2V0KCZuZnNpLT5uZnNfcGFnZV90cmVlLAogCQkJcmVxLT53Yl9pbmRleCwKQEAgLTUyNCw2ICs1MzgsMTIgQEAKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WMykgfHwgZGVmaW5lZChDT05GSUdfTkZTX1Y0KQorc3RhdGljIGludAorbmZzX25lZWRfY29tbWl0KHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kpCit7CisJcmV0dXJuIHJhZGl4X3RyZWVfdGFnZ2VkKCZuZnNpLT5uZnNfcGFnZV90cmVlLCBORlNfUEFHRV9UQUdfQ09NTUlUKTsKK30KKwogLyoKICAqIG5mc19zY2FuX2NvbW1pdCAtIFNjYW4gYW4gaW5vZGUgZm9yIGNvbW1pdCByZXF1ZXN0cwogICogQGlub2RlOiBORlMgaW5vZGUgdG8gc2NhbgpAQCAtNTM4LDE2ICs1NTgsMTggQEAKIG5mc19zY2FuX2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsIHBnb2ZmX3QgaWR4X3N0YXJ0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7Ci0JaW50IHJlcyA9IDA7CiAKLQlpZiAobmZzaS0+bmNvbW1pdCAhPSAwKSB7Ci0JCXJlcyA9IG5mc19zY2FuX2xpc3QobmZzaSwgZHN0LCBpZHhfc3RhcnQsIG5wYWdlcywKLQkJCQlORlNfUEFHRV9UQUdfQ09NTUlUKTsKLQkJbmZzaS0+bmNvbW1pdCAtPSByZXM7Ci0JfQotCXJldHVybiByZXM7CisJaWYgKCFuZnNfbmVlZF9jb21taXQobmZzaSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIG5mc19zY2FuX2xpc3QobmZzaSwgZHN0LCBpZHhfc3RhcnQsIG5wYWdlcywgTkZTX1BBR0VfVEFHX0NPTU1JVCk7CiB9CiAjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbmZzX25lZWRfY29tbWl0KHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5mc19zY2FuX2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsIHBnb2ZmX3QgaWR4X3N0YXJ0LCB1bnNpZ25lZCBpbnQgbnBhZ2VzKQogewogCXJldHVybiAwOwpAQCAtODIwLDcgKzg0Miw3IEBACiAJZGF0YS0+YXJncy5zdGFibGUgID0gTkZTX1VOU1RBQkxFOwogCWlmIChob3cgJiBGTFVTSF9TVEFCTEUpIHsKIAkJZGF0YS0+YXJncy5zdGFibGUgPSBORlNfREFUQV9TWU5DOwotCQlpZiAoIU5GU19JKGlub2RlKS0+bmNvbW1pdCkKKwkJaWYgKCFuZnNfbmVlZF9jb21taXQoTkZTX0koaW5vZGUpKSkKIAkJCWRhdGEtPmFyZ3Muc3RhYmxlID0gTkZTX0ZJTEVfU1lOQzsKIAl9CiAKQEAgLTE0MjUsMTggKzE0NDcsMTMgQEAKIHsKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewogCQkuYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywKLQkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfTk9ORSwKKwkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAogCQkubnJfdG9fd3JpdGUgPSBMT05HX01BWCwKIAkJLnJhbmdlX3N0YXJ0ID0gMCwKIAkJLnJhbmdlX2VuZCA9IExMT05HX01BWCwKIAkJLmZvcl93cml0ZXBhZ2VzID0gMSwKIAl9OwotCWludCByZXQ7CiAKLQlyZXQgPSBfX25mc193cml0ZV9tYXBwaW5nKG1hcHBpbmcsICZ3YmMsIGhvdyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0Jd2JjLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMOwogCXJldHVybiBfX25mc193cml0ZV9tYXBwaW5nKG1hcHBpbmcsICZ3YmMsIGhvdyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzY3RsLmMgYi9mcy9uZnNkL25mc2N0bC5jCmluZGV4IDNkOTNiMjAuLmE0ZWQ4NjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzY3RsLmMKKysrIGIvZnMvbmZzZC9uZnNjdGwuYwpAQCAtOTM4LDEwICs5MzgsMTIgQEAKIAkJY2hhciB0cmFuc3BvcnRbMTZdOwogCQlpbnQgcG9ydDsKIAkJaWYgKHNzY2FuZihidWYsICIlMTVzICU0ZCIsIHRyYW5zcG9ydCwgJnBvcnQpID09IDIpIHsKKwkJCWlmIChwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQllcnIgPSBuZnNkX2NyZWF0ZV9zZXJ2KCk7CiAJCQlpZiAoIWVycikgewogCQkJCWVyciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsCi0JCQkJCQkgICAgICB0cmFuc3BvcnQsIHBvcnQsCisJCQkJCQkgICAgICB0cmFuc3BvcnQsIFBGX0lORVQsIHBvcnQsCiAJCQkJCQkgICAgICBTVkNfU09DS19BTk9OWU1PVVMpOwogCQkJCWlmIChlcnIgPT0gLUVOT0VOVCkKIAkJCQkJLyogR2l2ZSBhIHJlYXNvbmFibGUgcGVycm9yIG1zZyBmb3IKQEAgLTk2MCw3ICs5NjIsNyBAQAogCQljaGFyIHRyYW5zcG9ydFsxNl07CiAJCWludCBwb3J0OwogCQlpZiAoc3NjYW5mKCZidWZbMV0sICIlMTVzICU0ZCIsIHRyYW5zcG9ydCwgJnBvcnQpID09IDIpIHsKLQkJCWlmIChwb3J0ID09IDApCisJCQlpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJaWYgKG5mc2Rfc2VydikgewogCQkJCXhwcnQgPSBzdmNfZmluZF94cHJ0KG5mc2Rfc2VydiwgdHJhbnNwb3J0LApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNzdmMuYyBiL2ZzL25mc2QvbmZzc3ZjLmMKaW5kZXggMDdlNGY1ZC4uN2MwOTg1MiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNzdmMuYworKysgYi9mcy9uZnNkL25mc3N2Yy5jCkBAIC0yMjksNyArMjI5LDYgQEAKIAogCWF0b21pY19zZXQoJm5mc2RfYnVzeSwgMCk7CiAJbmZzZF9zZXJ2ID0gc3ZjX2NyZWF0ZV9wb29sZWQoJm5mc2RfcHJvZ3JhbSwgbmZzZF9tYXhfYmxrc2l6ZSwKLQkJCQkgICAgICBBRl9JTkVULAogCQkJCSAgICAgIG5mc2RfbGFzdF90aHJlYWQsIG5mc2QsIFRISVNfTU9EVUxFKTsKIAlpZiAobmZzZF9zZXJ2ID09IE5VTEwpCiAJCWVyciA9IC1FTk9NRU07CkBAIC0yNDQsNyArMjQzLDcgQEAKIAlpZiAoIWxpc3RfZW1wdHkoJm5mc2Rfc2Vydi0+c3ZfcGVybXNvY2tzKSkKIAkJcmV0dXJuIDA7CiAKLQllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ1ZHAiLCBwb3J0LAorCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInVkcCIsIFBGX0lORVQsIHBvcnQsCiAJCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yNTMsNyArMjUyLDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ0Y3AiLCBwb3J0LAorCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInRjcCIsIFBGX0lORVQsIHBvcnQsCiAJCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CkBAIC00MDQsNyArNDAzLDYgQEAKIG5mc2Qodm9pZCAqdnJxc3RwKQogewogCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHAgPSAoc3RydWN0IHN2Y19ycXN0ICopIHZycXN0cDsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmc3A7CiAJaW50IGVyciwgcHJldmVyciA9IDA7CiAKIAkvKiBMb2NrIG1vZHVsZSBhbmQgc2V0IHVwIGtlcm5lbCB0aHJlYWQgKi8KQEAgLTQxMywxMyArNDExLDExIEBACiAJLyogQXQgdGhpcyBwb2ludCwgdGhlIHRocmVhZCBzaGFyZXMgY3VycmVudC0+ZnMKIAkgKiB3aXRoIHRoZSBpbml0IHByb2Nlc3MuIFdlIG5lZWQgdG8gY3JlYXRlIGZpbGVzIHdpdGggYQogCSAqIHVtYXNrIG9mIDAgaW5zdGVhZCBvZiBpbml0J3MgdW1hc2suICovCi0JZnNwID0gY29weV9mc19zdHJ1Y3QoY3VycmVudC0+ZnMpOwotCWlmICghZnNwKSB7CisJaWYgKHVuc2hhcmVfZnNfc3RydWN0KCkgPCAwKSB7CiAJCXByaW50aygiVW5hYmxlIHRvIHN0YXJ0IG5mc2QgdGhyZWFkOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCWV4aXRfZnMoY3VycmVudCk7Ci0JY3VycmVudC0+ZnMgPSBmc3A7CisKIAljdXJyZW50LT5mcy0+dW1hc2sgPSAwOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZGlyLmMgYi9mcy9udGZzL2Rpci5jCmluZGV4IDM0MzE0YjMuLjVhOWUzNDQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZGlyLmMKKysrIGIvZnMvbnRmcy9kaXIuYwpAQCAtMzIsOCArMzIsOCBAQAogLyoqCiAgKiBUaGUgbGl0dGxlIGVuZGlhbiBVbmljb2RlIHN0cmluZyAkSTMwIGFzIGEgZ2xvYmFsIGNvbnN0YW50LgogICovCi1udGZzY2hhciBJMzBbNV0gPSB7IGNvbnN0X2NwdV90b19sZTE2KCckJyksIGNvbnN0X2NwdV90b19sZTE2KCdJJyksCi0JCWNvbnN0X2NwdV90b19sZTE2KCczJyksCWNvbnN0X2NwdV90b19sZTE2KCcwJyksIDAgfTsKK250ZnNjaGFyIEkzMFs1XSA9IHsgY3B1X3RvX2xlMTYoJyQnKSwgY3B1X3RvX2xlMTYoJ0knKSwKKwkJY3B1X3RvX2xlMTYoJzMnKSwJY3B1X3RvX2xlMTYoJzAnKSwgMCB9OwogCiAvKioKICAqIG50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUgLSBmaW5kIGFuIGlub2RlIGluIGEgZGlyZWN0b3J5IGdpdmVuIGl0cyBuYW1lCmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmMKaW5kZXggODZiZWYxNS4uODJjNTA4NSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCisrKyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMTk3NSw4ICsxOTc1LDcgQEAKIAkJCQlnb3RvIGVtX3B1dF9lcnJfb3V0OwogCQkJbmV4dF9hbF9lbnRyeSA9IChBVFRSX0xJU1RfRU5UUlkqKSgodTgqKWFsX2VudHJ5ICsKIAkJCQkJbGUxNl90b19jcHUoYWxfZW50cnktPmxlbmd0aCkpOwotCQkJaWYgKGxlMzJfdG9fY3B1KGFsX2VudHJ5LT50eXBlKSA+Ci0JCQkJCWNvbnN0X2xlMzJfdG9fY3B1KEFUX0RBVEEpKQorCQkJaWYgKGxlMzJfdG9fY3B1KGFsX2VudHJ5LT50eXBlKSA+IGxlMzJfdG9fY3B1KEFUX0RBVEEpKQogCQkJCWdvdG8gZW1fcHV0X2Vycl9vdXQ7CiAJCQlpZiAoQVRfREFUQSAhPSBhbF9lbnRyeS0+dHlwZSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbGF5b3V0LmggYi9mcy9udGZzL2xheW91dC5oCmluZGV4IDFlMzgzMzIuLjUwOTMxYjEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbGF5b3V0LmgKKysrIGIvZnMvbnRmcy9sYXlvdXQuaApAQCAtMzEsMTkgKzMxLDggQEAKIAogI2luY2x1ZGUgInR5cGVzLmgiCiAKLS8qCi0gKiBDb25zdGFudCBlbmRpYW5uZXNzIGNvbnZlcnNpb24gZGVmaW5lcy4KLSAqLwotI2RlZmluZSBjb25zdF9sZTE2X3RvX2NwdSh4KQlfX2NvbnN0YW50X2xlMTZfdG9fY3B1KHgpCi0jZGVmaW5lIGNvbnN0X2xlMzJfdG9fY3B1KHgpCV9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkKLSNkZWZpbmUgY29uc3RfbGU2NF90b19jcHUoeCkJX19jb25zdGFudF9sZTY0X3RvX2NwdSh4KQotCi0jZGVmaW5lIGNvbnN0X2NwdV90b19sZTE2KHgpCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoeCkKLSNkZWZpbmUgY29uc3RfY3B1X3RvX2xlMzIoeCkJX19jb25zdGFudF9jcHVfdG9fbGUzMih4KQotI2RlZmluZSBjb25zdF9jcHVfdG9fbGU2NCh4KQlfX2NvbnN0YW50X2NwdV90b19sZTY0KHgpCi0KIC8qIFRoZSBOVEZTIG9lbV9pZCAiTlRGUyAgICAiICovCi0jZGVmaW5lIG1hZ2ljTlRGUwljb25zdF9jcHVfdG9fbGU2NCgweDIwMjAyMDIwNTM0NjU0NGVVTEwpCisjZGVmaW5lIG1hZ2ljTlRGUwljcHVfdG9fbGU2NCgweDIwMjAyMDIwNTM0NjU0NGVVTEwpCiAKIC8qCiAgKiBMb2NhdGlvbiBvZiBib290c2VjdG9yIG9uIHBhcnRpdGlvbjoKQEAgLTExNCwyNSArMTAzLDI1IEBACiAgKi8KIGVudW0gewogCS8qIEZvdW5kIGluICRNRlQvJERBVEEuICovCi0JbWFnaWNfRklMRSA9IGNvbnN0X2NwdV90b19sZTMyKDB4NDU0YzQ5NDYpLCAvKiBNZnQgZW50cnkuICovCi0JbWFnaWNfSU5EWCA9IGNvbnN0X2NwdV90b19sZTMyKDB4NTg0NDRlNDkpLCAvKiBJbmRleCBidWZmZXIuICovCi0JbWFnaWNfSE9MRSA9IGNvbnN0X2NwdV90b19sZTMyKDB4NDU0YzRmNDgpLCAvKiA/IChOVEZTIDMuMCs/KSAqLworCW1hZ2ljX0ZJTEUgPSBjcHVfdG9fbGUzMigweDQ1NGM0OTQ2KSwgLyogTWZ0IGVudHJ5LiAqLworCW1hZ2ljX0lORFggPSBjcHVfdG9fbGUzMigweDU4NDQ0ZTQ5KSwgLyogSW5kZXggYnVmZmVyLiAqLworCW1hZ2ljX0hPTEUgPSBjcHVfdG9fbGUzMigweDQ1NGM0ZjQ4KSwgLyogPyAoTlRGUyAzLjArPykgKi8KIAogCS8qIEZvdW5kIGluICRMb2dGaWxlLyREQVRBLiAqLwotCW1hZ2ljX1JTVFIgPSBjb25zdF9jcHVfdG9fbGUzMigweDUyNTQ1MzUyKSwgLyogUmVzdGFydCBwYWdlLiAqLwotCW1hZ2ljX1JDUkQgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ0NTI0MzUyKSwgLyogTG9nIHJlY29yZCBwYWdlLiAqLworCW1hZ2ljX1JTVFIgPSBjcHVfdG9fbGUzMigweDUyNTQ1MzUyKSwgLyogUmVzdGFydCBwYWdlLiAqLworCW1hZ2ljX1JDUkQgPSBjcHVfdG9fbGUzMigweDQ0NTI0MzUyKSwgLyogTG9nIHJlY29yZCBwYWdlLiAqLwogCiAJLyogRm91bmQgaW4gJExvZ0ZpbGUvJERBVEEuICAoTWF5IGJlIGZvdW5kIGluICRNRlQvJERBVEEsIGFsc28/KSAqLwotCW1hZ2ljX0NIS0QgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ0NGI0ODQzKSwgLyogTW9kaWZpZWQgYnkgY2hrZHNrLiAqLworCW1hZ2ljX0NIS0QgPSBjcHVfdG9fbGUzMigweDQ0NGI0ODQzKSwgLyogTW9kaWZpZWQgYnkgY2hrZHNrLiAqLwogCiAJLyogRm91bmQgaW4gYWxsIG50ZnMgcmVjb3JkIGNvbnRhaW5pbmcgcmVjb3Jkcy4gKi8KLQltYWdpY19CQUFEID0gY29uc3RfY3B1X3RvX2xlMzIoMHg0NDQxNDE0MiksIC8qIEZhaWxlZCBtdWx0aSBzZWN0b3IKKwltYWdpY19CQUFEID0gY3B1X3RvX2xlMzIoMHg0NDQxNDE0MiksIC8qIEZhaWxlZCBtdWx0aSBzZWN0b3IKIAkJCQkJCSAgICAgICB0cmFuc2ZlciB3YXMgZGV0ZWN0ZWQuICovCiAJLyoKIAkgKiBGb3VuZCBpbiAkTG9nRmlsZS8kREFUQSB3aGVuIGEgcGFnZSBpcyBmdWxsIG9mIDB4ZmYgYnl0ZXMgYW5kIGlzCiAJICogdGh1cyBub3QgaW5pdGlhbGl6ZWQuICBQYWdlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzaW5nIGl0LgogCSAqLwotCW1hZ2ljX2VtcHR5ID0gY29uc3RfY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikgLyogUmVjb3JkIGlzIGVtcHR5LiAqLworCW1hZ2ljX2VtcHR5ID0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikgLyogUmVjb3JkIGlzIGVtcHR5LiAqLwogfTsKIAogdHlwZWRlZiBsZTMyIE5URlNfUkVDT1JEX1RZUEU7CkBAIC0yNTgsOCArMjQ3LDggQEAKICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZnQgcmVjb3JkIGluIHdoaWNoIHRoZXkgYXJlIHByZXNlbnQuCiAgKi8KIGVudW0gewotCU1GVF9SRUNPUkRfSU5fVVNFCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAxKSwKLQlNRlRfUkVDT1JEX0lTX0RJUkVDVE9SWSA9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMiksCisJTUZUX1JFQ09SRF9JTl9VU0UJPSBjcHVfdG9fbGUxNigweDAwMDEpLAorCU1GVF9SRUNPUkRfSVNfRElSRUNUT1JZID0gY3B1X3RvX2xlMTYoMHgwMDAyKSwKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogdHlwZWRlZiBsZTE2IE1GVF9SRUNPUkRfRkxBR1M7CkBAIC0zMDksNyArMjk4LDcgQEAKICAqIE5vdGU6IFRoZSBfTEUgdmVyc2lvbnMgd2lsbCByZXR1cm4gYSBDUFUgZW5kaWFuIGZvcm1hdHRlZCB2YWx1ZSEKICAqLwogI2RlZmluZSBNRlRfUkVGX01BU0tfQ1BVIDB4MDAwMGZmZmZmZmZmZmZmZlVMTAotI2RlZmluZSBNRlRfUkVGX01BU0tfTEUgY29uc3RfY3B1X3RvX2xlNjQoTUZUX1JFRl9NQVNLX0NQVSkKKyNkZWZpbmUgTUZUX1JFRl9NQVNLX0xFIGNwdV90b19sZTY0KE1GVF9SRUZfTUFTS19DUFUpCiAKIHR5cGVkZWYgdTY0IE1GVF9SRUY7CiB0eXBlZGVmIGxlNjQgbGVNRlRfUkVGOwpAQCAtNDc3LDI1ICs0NjYsMjUgQEAKICAqIGEgcmV2ZWFsaW5nIGNob2ljZSBvZiBzeW1ib2wgSSBkbyBub3Qga25vdyB3aGF0IGlzLi4uICgtOwogICovCiBlbnVtIHsKLQlBVF9VTlVTRUQJCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgICAgIDApLAotCUFUX1NUQU5EQVJEX0lORk9STUFUSU9OCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4MTApLAotCUFUX0FUVFJJQlVURV9MSVNUCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4MjApLAotCUFUX0ZJTEVfTkFNRQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHgzMCksCi0JQVRfT0JKRUNUX0lECQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDQwKSwKLQlBVF9TRUNVUklUWV9ERVNDUklQVE9SCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4NTApLAotCUFUX1ZPTFVNRV9OQU1FCQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDYwKSwKLQlBVF9WT0xVTUVfSU5GT1JNQVRJT04JCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHg3MCksCi0JQVRfREFUQQkJCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4ODApLAotCUFUX0lOREVYX1JPT1QJCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4OTApLAotCUFUX0lOREVYX0FMTE9DQVRJT04JCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHhhMCksCi0JQVRfQklUTUFQCQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweGIwKSwKLQlBVF9SRVBBUlNFX1BPSU5UCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4YzApLAotCUFUX0VBX0lORk9STUFUSU9OCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4ZDApLAotCUFUX0VBCQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHhlMCksCi0JQVRfUFJPUEVSVFlfU0VUCQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweGYwKSwKLQlBVF9MT0dHRURfVVRJTElUWV9TVFJFQU0JPSBjb25zdF9jcHVfdG9fbGUzMiggICAgIDB4MTAwKSwKLQlBVF9GSVJTVF9VU0VSX0RFRklORURfQVRUUklCVVRFCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgIDB4MTAwMCksCi0JQVRfRU5ECQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikKKwlBVF9VTlVTRUQJCQk9IGNwdV90b19sZTMyKCAgICAgICAgIDApLAorCUFUX1NUQU5EQVJEX0lORk9STUFUSU9OCQk9IGNwdV90b19sZTMyKCAgICAgIDB4MTApLAorCUFUX0FUVFJJQlVURV9MSVNUCQk9IGNwdV90b19sZTMyKCAgICAgIDB4MjApLAorCUFUX0ZJTEVfTkFNRQkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHgzMCksCisJQVRfT0JKRUNUX0lECQkJPSBjcHVfdG9fbGUzMiggICAgICAweDQwKSwKKwlBVF9TRUNVUklUWV9ERVNDUklQVE9SCQk9IGNwdV90b19sZTMyKCAgICAgIDB4NTApLAorCUFUX1ZPTFVNRV9OQU1FCQkJPSBjcHVfdG9fbGUzMiggICAgICAweDYwKSwKKwlBVF9WT0xVTUVfSU5GT1JNQVRJT04JCT0gY3B1X3RvX2xlMzIoICAgICAgMHg3MCksCisJQVRfREFUQQkJCQk9IGNwdV90b19sZTMyKCAgICAgIDB4ODApLAorCUFUX0lOREVYX1JPT1QJCQk9IGNwdV90b19sZTMyKCAgICAgIDB4OTApLAorCUFUX0lOREVYX0FMTE9DQVRJT04JCT0gY3B1X3RvX2xlMzIoICAgICAgMHhhMCksCisJQVRfQklUTUFQCQkJPSBjcHVfdG9fbGUzMiggICAgICAweGIwKSwKKwlBVF9SRVBBUlNFX1BPSU5UCQk9IGNwdV90b19sZTMyKCAgICAgIDB4YzApLAorCUFUX0VBX0lORk9STUFUSU9OCQk9IGNwdV90b19sZTMyKCAgICAgIDB4ZDApLAorCUFUX0VBCQkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHhlMCksCisJQVRfUFJPUEVSVFlfU0VUCQkJPSBjcHVfdG9fbGUzMiggICAgICAweGYwKSwKKwlBVF9MT0dHRURfVVRJTElUWV9TVFJFQU0JPSBjcHVfdG9fbGUzMiggICAgIDB4MTAwKSwKKwlBVF9GSVJTVF9VU0VSX0RFRklORURfQVRUUklCVVRFCT0gY3B1X3RvX2xlMzIoICAgIDB4MTAwMCksCisJQVRfRU5ECQkJCT0gY3B1X3RvX2xlMzIoMHhmZmZmZmZmZikKIH07CiAKIHR5cGVkZWYgbGUzMiBBVFRSX1RZUEU7CkBAIC01MzksMTMgKzUyOCwxMyBAQAogICoJZXF1YWwgdGhlbiB0aGUgc2Vjb25kIGxlMzIgdmFsdWVzIHdvdWxkIGJlIGNvbXBhcmVkLCBldGMuCiAgKi8KIGVudW0gewotCUNPTExBVElPTl9CSU5BUlkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMCksCi0JQ09MTEFUSU9OX0ZJTEVfTkFNRQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAxKSwKLQlDT0xMQVRJT05fVU5JQ09ERV9TVFJJTkcJPSBjb25zdF9jcHVfdG9fbGUzMigweDAyKSwKLQlDT0xMQVRJT05fTlRPRlNfVUxPTkcJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMCksCi0JQ09MTEFUSU9OX05UT0ZTX1NJRAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDExKSwKLQlDT0xMQVRJT05fTlRPRlNfU0VDVVJJVFlfSEFTSAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MTIpLAotCUNPTExBVElPTl9OVE9GU19VTE9OR1MJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMyksCisJQ09MTEFUSU9OX0JJTkFSWQkJPSBjcHVfdG9fbGUzMigweDAwKSwKKwlDT0xMQVRJT05fRklMRV9OQU1FCQk9IGNwdV90b19sZTMyKDB4MDEpLAorCUNPTExBVElPTl9VTklDT0RFX1NUUklORwk9IGNwdV90b19sZTMyKDB4MDIpLAorCUNPTExBVElPTl9OVE9GU19VTE9ORwkJPSBjcHVfdG9fbGUzMigweDEwKSwKKwlDT0xMQVRJT05fTlRPRlNfU0lECQk9IGNwdV90b19sZTMyKDB4MTEpLAorCUNPTExBVElPTl9OVE9GU19TRUNVUklUWV9IQVNICT0gY3B1X3RvX2xlMzIoMHgxMiksCisJQ09MTEFUSU9OX05UT0ZTX1VMT05HUwkJPSBjcHVfdG9fbGUzMigweDEzKSwKIH07CiAKIHR5cGVkZWYgbGUzMiBDT0xMQVRJT05fUlVMRTsKQEAgLTU1OSwyNSArNTQ4LDI1IEBACiAgKiBOVDQuCiAgKi8KIGVudW0gewotCUFUVFJfREVGX0lOREVYQUJMRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDIpLCAvKiBBdHRyaWJ1dGUgY2FuIGJlCisJQVRUUl9ERUZfSU5ERVhBQkxFCT0gY3B1X3RvX2xlMzIoMHgwMiksIC8qIEF0dHJpYnV0ZSBjYW4gYmUKIAkJCQkJaW5kZXhlZC4gKi8KLQlBVFRSX0RFRl9NVUxUSVBMRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDQpLCAvKiBBdHRyaWJ1dGUgdHlwZQorCUFUVFJfREVGX01VTFRJUExFCT0gY3B1X3RvX2xlMzIoMHgwNCksIC8qIEF0dHJpYnV0ZSB0eXBlCiAJCQkJCWNhbiBiZSBwcmVzZW50IG11bHRpcGxlIHRpbWVzIGluIHRoZQogCQkJCQltZnQgcmVjb3JkcyBvZiBhbiBpbm9kZS4gKi8KLQlBVFRSX0RFRl9OT1RfWkVSTwk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDgpLCAvKiBBdHRyaWJ1dGUgdmFsdWUKKwlBVFRSX0RFRl9OT1RfWkVSTwk9IGNwdV90b19sZTMyKDB4MDgpLCAvKiBBdHRyaWJ1dGUgdmFsdWUKIAkJCQkJbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBub24temVybwogCQkJCQlieXRlLiAqLwotCUFUVFJfREVGX0lOREVYRURfVU5JUVVFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMCksIC8qIEF0dHJpYnV0ZSBtdXN0IGJlCisJQVRUUl9ERUZfSU5ERVhFRF9VTklRVUUJPSBjcHVfdG9fbGUzMigweDEwKSwgLyogQXR0cmlidXRlIG11c3QgYmUKIAkJCQkJaW5kZXhlZCBhbmQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBtdXN0IGJlCiAJCQkJCXVuaXF1ZSBmb3IgdGhlIGF0dHJpYnV0ZSB0eXBlIGluIGFsbCBvZgogCQkJCQl0aGUgbWZ0IHJlY29yZHMgb2YgYW4gaW5vZGUuICovCi0JQVRUUl9ERUZfTkFNRURfVU5JUVVFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgyMCksIC8qIEF0dHJpYnV0ZSBtdXN0IGJlCisJQVRUUl9ERUZfTkFNRURfVU5JUVVFCT0gY3B1X3RvX2xlMzIoMHgyMCksIC8qIEF0dHJpYnV0ZSBtdXN0IGJlCiAJCQkJCW5hbWVkIGFuZCB0aGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBmb3IKIAkJCQkJdGhlIGF0dHJpYnV0ZSB0eXBlIGluIGFsbCBvZiB0aGUgbWZ0CiAJCQkJCXJlY29yZHMgb2YgYW4gaW5vZGUuICovCi0JQVRUUl9ERUZfUkVTSURFTlQJPSBjb25zdF9jcHVfdG9fbGUzMigweDQwKSwgLyogQXR0cmlidXRlIG11c3QgYmUKKwlBVFRSX0RFRl9SRVNJREVOVAk9IGNwdV90b19sZTMyKDB4NDApLCAvKiBBdHRyaWJ1dGUgbXVzdCBiZQogCQkJCQlyZXNpZGVudC4gKi8KLQlBVFRSX0RFRl9BTFdBWVNfTE9HCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg4MCksIC8qIEFsd2F5cyBsb2cKKwlBVFRSX0RFRl9BTFdBWVNfTE9HCT0gY3B1X3RvX2xlMzIoMHg4MCksIC8qIEFsd2F5cyBsb2cKIAkJCQkJbW9kaWZpY2F0aW9ucyB0byB0aGlzIGF0dHJpYnV0ZSwKIAkJCQkJcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIHJlc2lkZW50IG9yCiAJCQkJCW5vbi1yZXNpZGVudC4gIFdpdGhvdXQgdGhpcywgb25seSBsb2cKQEAgLTYxNCwxMiArNjAzLDEyIEBACiAgKiBBdHRyaWJ1dGUgZmxhZ3MgKDE2LWJpdCkuCiAgKi8KIGVudW0gewotCUFUVFJfSVNfQ09NUFJFU1NFRCAgICA9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMSksCi0JQVRUUl9DT01QUkVTU0lPTl9NQVNLID0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMGZmKSwgLyogQ29tcHJlc3Npb24gbWV0aG9kCisJQVRUUl9JU19DT01QUkVTU0VEICAgID0gY3B1X3RvX2xlMTYoMHgwMDAxKSwKKwlBVFRSX0NPTVBSRVNTSU9OX01BU0sgPSBjcHVfdG9fbGUxNigweDAwZmYpLCAvKiBDb21wcmVzc2lvbiBtZXRob2QKIAkJCQkJCQkgICAgICBtYXNrLiAgQWxzbywgZmlyc3QKIAkJCQkJCQkgICAgICBpbGxlZ2FsIHZhbHVlLiAqLwotCUFUVFJfSVNfRU5DUllQVEVEICAgICA9IGNvbnN0X2NwdV90b19sZTE2KDB4NDAwMCksCi0JQVRUUl9JU19TUEFSU0UJICAgICAgPSBjb25zdF9jcHVfdG9fbGUxNigweDgwMDApLAorCUFUVFJfSVNfRU5DUllQVEVEICAgICA9IGNwdV90b19sZTE2KDB4NDAwMCksCisJQVRUUl9JU19TUEFSU0UJICAgICAgPSBjcHVfdG9fbGUxNigweDgwMDApLAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiB0eXBlZGVmIGxlMTYgQVRUUl9GTEFHUzsKQEAgLTgxMSwzMiArODAwLDMyIEBACiAgKiBmbGFncyBhcHBlYXIgaW4gYWxsIG9mIHRoZSBhYm92ZS4KICAqLwogZW51bSB7Ci0JRklMRV9BVFRSX1JFQURPTkxZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCUZJTEVfQVRUUl9ISURERU4JCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCi0JRklMRV9BVFRSX1NZU1RFTQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKLQkvKiBPbGQgRE9TIHZvbGlkLiBVbnVzZWQgaW4gTlQuCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCksICovCisJRklMRV9BVFRSX1JFQURPTkxZCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCUZJTEVfQVRUUl9ISURERU4JCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCisJRklMRV9BVFRSX1NZU1RFTQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKKwkvKiBPbGQgRE9TIHZvbGlkLiBVbnVzZWQgaW4gTlQuCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCksICovCiAKLQlGSUxFX0FUVFJfRElSRUNUT1JZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMTApLAorCUZJTEVfQVRUUl9ESVJFQ1RPUlkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCksCiAJLyogTm90ZSwgRklMRV9BVFRSX0RJUkVDVE9SWSBpcyBub3QgY29uc2lkZXJlZCB2YWxpZCBpbiBOVC4gIEl0IGlzCiAJICAgcmVzZXJ2ZWQgZm9yIHRoZSBET1MgU1VCRElSRUNUT1JZIGZsYWcuICovCi0JRklMRV9BVFRSX0FSQ0hJVkUJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCksCi0JRklMRV9BVFRSX0RFVklDRQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKSwKLQlGSUxFX0FUVFJfTk9STUFMCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwODApLAorCUZJTEVfQVRUUl9BUkNISVZFCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMjApLAorCUZJTEVfQVRUUl9ERVZJQ0UJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCisJRklMRV9BVFRSX05PUk1BTAkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDgwKSwKIAotCUZJTEVfQVRUUl9URU1QT1JBUlkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCi0JRklMRV9BVFRSX1NQQVJTRV9GSUxFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAyMDApLAotCUZJTEVfQVRUUl9SRVBBUlNFX1BPSU5UCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDA0MDApLAotCUZJTEVfQVRUUl9DT01QUkVTU0VECQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDA4MDApLAorCUZJTEVfQVRUUl9URU1QT1JBUlkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCisJRklMRV9BVFRSX1NQQVJTRV9GSUxFCQk9IGNwdV90b19sZTMyKDB4MDAwMDAyMDApLAorCUZJTEVfQVRUUl9SRVBBUlNFX1BPSU5UCQk9IGNwdV90b19sZTMyKDB4MDAwMDA0MDApLAorCUZJTEVfQVRUUl9DT01QUkVTU0VECQk9IGNwdV90b19sZTMyKDB4MDAwMDA4MDApLAogCi0JRklMRV9BVFRSX09GRkxJTkUJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMTAwMCksCi0JRklMRV9BVFRSX05PVF9DT05URU5UX0lOREVYRUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAyMDAwKSwKLQlGSUxFX0FUVFJfRU5DUllQVEVECQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDQwMDApLAorCUZJTEVfQVRUUl9PRkZMSU5FCQk9IGNwdV90b19sZTMyKDB4MDAwMDEwMDApLAorCUZJTEVfQVRUUl9OT1RfQ09OVEVOVF9JTkRFWEVECT0gY3B1X3RvX2xlMzIoMHgwMDAwMjAwMCksCisJRklMRV9BVFRSX0VOQ1JZUFRFRAkJPSBjcHVfdG9fbGUzMigweDAwMDA0MDAwKSwKIAotCUZJTEVfQVRUUl9WQUxJRF9GTEFHUwkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDA3ZmI3KSwKKwlGSUxFX0FUVFJfVkFMSURfRkxBR1MJCT0gY3B1X3RvX2xlMzIoMHgwMDAwN2ZiNyksCiAJLyogTm90ZSwgRklMRV9BVFRSX1ZBTElEX0ZMQUdTIG1hc2tzIG91dCB0aGUgb2xkIERPUyBWb2xJZCBhbmQgdGhlCiAJICAgRklMRV9BVFRSX0RFVklDRSBhbmQgcHJlc2VydmVzIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgbWFzayBpcyB1c2VkCiAJICAgdG8gb2J0YWluIGFsbCBmbGFncyB0aGF0IGFyZSB2YWxpZCBmb3IgcmVhZGluZy4gKi8KLQlGSUxFX0FUVFJfVkFMSURfU0VUX0ZMQUdTCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMzFhNyksCisJRklMRV9BVFRSX1ZBTElEX1NFVF9GTEFHUwk9IGNwdV90b19sZTMyKDB4MDAwMDMxYTcpLAogCS8qIE5vdGUsIEZJTEVfQVRUUl9WQUxJRF9TRVRfRkxBR1MgbWFza3Mgb3V0IHRoZSBvbGQgRE9TIFZvbElkLCB0aGUKIAkgICBGX0FfREVWSUNFLCBGX0FfRElSRUNUT1JZLCBGX0FfU1BBUlNFX0ZJTEUsIEZfQV9SRVBBUlNFX1BPSU5ULAogCSAgIEZfQV9DT01QUkVTU0VELCBhbmQgRl9BX0VOQ1JZUFRFRCBhbmQgcHJlc2VydmVzIHRoZSByZXN0LiAgVGhpcyBtYXNrCkBAIC04NDYsMTEgKzgzNSwxMSBAQAogCSAqIEZJTEVOQU1FX0FUVFIgYXR0cmlidXRlcyBidXQgbm90IGluIHRoZSBTVEFOREFSRF9JTkZPUk1BVElPTgogCSAqIGF0dHJpYnV0ZSBvZiBhbiBtZnQgcmVjb3JkLgogCSAqLwotCUZJTEVfQVRUUl9EVVBfRklMRV9OQU1FX0lOREVYX1BSRVNFTlQJPSBjb25zdF9jcHVfdG9fbGUzMigweDEwMDAwMDAwKSwKKwlGSUxFX0FUVFJfRFVQX0ZJTEVfTkFNRV9JTkRFWF9QUkVTRU5UCT0gY3B1X3RvX2xlMzIoMHgxMDAwMDAwMCksCiAJLyogTm90ZSwgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGZyb20gdGhlIG1mdCByZWNvcmQsCiAJICAgdGVsbGluZyB1cyB3aGV0aGVyIHRoaXMgaXMgYSBkaXJlY3Rvcnkgb3Igbm90LCBpLmUuIHdoZXRoZXIgaXQgaGFzCiAJICAgYW4gaW5kZXggcm9vdCBhdHRyaWJ1dGUgb3Igbm90LiAqLwotCUZJTEVfQVRUUl9EVVBfVklFV19JTkRFWF9QUkVTRU5UCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgyMDAwMDAwMCksCisJRklMRV9BVFRSX0RVUF9WSUVXX0lOREVYX1BSRVNFTlQJPSBjcHVfdG9fbGUzMigweDIwMDAwMDAwKSwKIAkvKiBOb3RlLCB0aGlzIGlzIGEgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgZnJvbSB0aGUgbWZ0IHJlY29yZCwKIAkgICB0ZWxsaW5nIHVzIHdoZXRoZXIgdGhpcyBmaWxlIGhhcyBhIHZpZXcgaW5kZXggcHJlc2VudCAoZWcuIG9iamVjdCBpZAogCSAgIGluZGV4LCBxdW90YSBpbmRleCwgb25lIG9mIHRoZSBzZWN1cml0eSBpbmRleGVzIG9yIHRoZSBlbmNyeXB0aW5nCkBAIC0xNDQ2LDQyICsxNDM1LDQyIEBACiAJLyogU3BlY2lmaWMgcmlnaHRzIGZvciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGFzIGZvbGxvd3M6ICovCiAKIAkvKiBSaWdodCB0byByZWFkIGRhdGEgZnJvbSB0aGUgZmlsZS4gKEZJTEUpICovCi0JRklMRV9SRUFEX0RBVEEJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCUZJTEVfUkVBRF9EQVRBCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKIAkvKiBSaWdodCB0byBsaXN0IGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5LiAoRElSRUNUT1JZKSAqLwotCUZJTEVfTElTVF9ESVJFQ1RPUlkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJRklMRV9MSVNUX0RJUkVDVE9SWQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKIAogCS8qIFJpZ2h0IHRvIHdyaXRlIGRhdGEgdG8gdGhlIGZpbGUuIChGSUxFKSAqLwotCUZJTEVfV1JJVEVfREFUQQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCisJRklMRV9XUklURV9EQVRBCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAyKSwKIAkvKiBSaWdodCB0byBjcmVhdGUgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIChESVJFQ1RPUlkpICovCi0JRklMRV9BRERfRklMRQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCisJRklMRV9BRERfRklMRQkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCiAKIAkvKiBSaWdodCB0byBhcHBlbmQgZGF0YSB0byB0aGUgZmlsZS4gKEZJTEUpICovCi0JRklMRV9BUFBFTkRfREFUQQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKKwlGSUxFX0FQUEVORF9EQVRBCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpLAogCS8qIFJpZ2h0IHRvIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeS4gKERJUkVDVE9SWSkgKi8KLQlGSUxFX0FERF9TVUJESVJFQ1RPUlkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJRklMRV9BRERfU1VCRElSRUNUT1JZCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpLAogCiAJLyogUmlnaHQgdG8gcmVhZCBleHRlbmRlZCBhdHRyaWJ1dGVzLiAoRklMRS9ESVJFQ1RPUlkpICovCi0JRklMRV9SRUFEX0VBCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDA4KSwKKwlGSUxFX1JFQURfRUEJCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDgpLAogCiAJLyogUmlnaHQgdG8gd3JpdGUgZXh0ZW5kZWQgYXR0cmlidXRlcy4gKEZJTEUvRElSRUNUT1JZKSAqLwotCUZJTEVfV1JJVEVfRUEJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMTApLAorCUZJTEVfV1JJVEVfRUEJCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMTApLAogCiAJLyogUmlnaHQgdG8gZXhlY3V0ZSBhIGZpbGUuIChGSUxFKSAqLwotCUZJTEVfRVhFQ1VURQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCksCisJRklMRV9FWEVDVVRFCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKIAkvKiBSaWdodCB0byB0cmF2ZXJzZSB0aGUgZGlyZWN0b3J5LiAoRElSRUNUT1JZKSAqLwotCUZJTEVfVFJBVkVSU0UJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMjApLAorCUZJTEVfVFJBVkVSU0UJCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMjApLAogCiAJLyoKIAkgKiBSaWdodCB0byBkZWxldGUgYSBkaXJlY3RvcnkgYW5kIGFsbCB0aGUgZmlsZXMgaXQgY29udGFpbnMgKGl0cwogCSAqIGNoaWxkcmVuKSwgZXZlbiBpZiB0aGUgZmlsZXMgYXJlIHJlYWQtb25seS4gKERJUkVDVE9SWSkKIAkgKi8KLQlGSUxFX0RFTEVURV9DSElMRAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKSwKKwlGSUxFX0RFTEVURV9DSElMRAkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDQwKSwKIAogCS8qIFJpZ2h0IHRvIHJlYWQgZmlsZSBhdHRyaWJ1dGVzLiAoRklMRS9ESVJFQ1RPUlkpICovCi0JRklMRV9SRUFEX0FUVFJJQlVURVMJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCksCisJRklMRV9SRUFEX0FUVFJJQlVURVMJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCksCiAKIAkvKiBSaWdodCB0byBjaGFuZ2UgZmlsZSBhdHRyaWJ1dGVzLiAoRklMRS9ESVJFQ1RPUlkpICovCi0JRklMRV9XUklURV9BVFRSSUJVVEVTCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAxMDApLAorCUZJTEVfV1JJVEVfQVRUUklCVVRFUwkJPSBjcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKIAogCS8qCiAJICogVGhlIHN0YW5kYXJkIHJpZ2h0cyAoYml0cyAxNiB0byAyMykuICBUaGVzZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlCkBAIC0xNDg5LDI3ICsxNDc4LDI3IEBACiAJICovCiAKIAkvKiBSaWdodCB0byBkZWxldGUgdGhlIG9iamVjdC4gKi8KLQlERUxFVEUJCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDEwMDAwKSwKKwlERUxFVEUJCQkJPSBjcHVfdG9fbGUzMigweDAwMDEwMDAwKSwKIAogCS8qCiAJICogUmlnaHQgdG8gcmVhZCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG9iamVjdCdzIHNlY3VyaXR5IGRlc2NyaXB0b3IsCiAJICogbm90IGluY2x1ZGluZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIFNBQ0wsIGkuZS4gcmlnaHQgdG8gcmVhZCB0aGUKIAkgKiBzZWN1cml0eSBkZXNjcmlwdG9yIGFuZCBvd25lci4KIAkgKi8KLQlSRUFEX0NPTlRST0wJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMjAwMDApLAorCVJFQURfQ09OVFJPTAkJCT0gY3B1X3RvX2xlMzIoMHgwMDAyMDAwMCksCiAKIAkvKiBSaWdodCB0byBtb2RpZnkgdGhlIERBQ0wgaW4gdGhlIG9iamVjdCdzIHNlY3VyaXR5IGRlc2NyaXB0b3IuICovCi0JV1JJVEVfREFDCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDQwMDAwKSwKKwlXUklURV9EQUMJCQk9IGNwdV90b19sZTMyKDB4MDAwNDAwMDApLAogCiAJLyogUmlnaHQgdG8gY2hhbmdlIHRoZSBvd25lciBpbiB0aGUgb2JqZWN0J3Mgc2VjdXJpdHkgZGVzY3JpcHRvci4gKi8KLQlXUklURV9PV05FUgkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDA4MDAwMCksCisJV1JJVEVfT1dORVIJCQk9IGNwdV90b19sZTMyKDB4MDAwODAwMDApLAogCiAJLyoKIAkgKiBSaWdodCB0byB1c2UgdGhlIG9iamVjdCBmb3Igc3luY2hyb25pemF0aW9uLiAgRW5hYmxlcyBhIHByb2Nlc3MgdG8KIAkgKiB3YWl0IHVudGlsIHRoZSBvYmplY3QgaXMgaW4gdGhlIHNpZ25hbGxlZCBzdGF0ZS4gIFNvbWUgb2JqZWN0IHR5cGVzCiAJICogZG8gbm90IHN1cHBvcnQgdGhpcyBhY2Nlc3MgcmlnaHQuCiAJICovCi0JU1lOQ0hST05JWkUJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAxMDAwMDApLAorCVNZTkNIUk9OSVpFCQkJPSBjcHVfdG9fbGUzMigweDAwMTAwMDAwKSwKIAogCS8qCiAJICogVGhlIGZvbGxvd2luZyBTVEFOREFSRF9SSUdIVFNfKiBhcmUgY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBmb3IKQEAgLTE1MTcsMjUgKzE1MDYsMjUgQEAKIAkgKi8KIAogCS8qIFRoZXNlIGFyZSBjdXJyZW50bHkgZGVmaW5lZCB0byBSRUFEX0NPTlRST0wuICovCi0JU1RBTkRBUkRfUklHSFRTX1JFQUQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAyMDAwMCksCi0JU1RBTkRBUkRfUklHSFRTX1dSSVRFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMjAwMDApLAotCVNUQU5EQVJEX1JJR0hUU19FWEVDVVRFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMjAwMDApLAorCVNUQU5EQVJEX1JJR0hUU19SRUFECQk9IGNwdV90b19sZTMyKDB4MDAwMjAwMDApLAorCVNUQU5EQVJEX1JJR0hUU19XUklURQkJPSBjcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKKwlTVEFOREFSRF9SSUdIVFNfRVhFQ1VURQkJPSBjcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKIAogCS8qIENvbWJpbmVzIERFTEVURSwgUkVBRF9DT05UUk9MLCBXUklURV9EQUMsIGFuZCBXUklURV9PV05FUiBhY2Nlc3MuICovCi0JU1RBTkRBUkRfUklHSFRTX1JFUVVJUkVECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDBmMDAwMCksCisJU1RBTkRBUkRfUklHSFRTX1JFUVVJUkVECT0gY3B1X3RvX2xlMzIoMHgwMDBmMDAwMCksCiAKIAkvKgogCSAqIENvbWJpbmVzIERFTEVURSwgUkVBRF9DT05UUk9MLCBXUklURV9EQUMsIFdSSVRFX09XTkVSLCBhbmQKIAkgKiBTWU5DSFJPTklaRSBhY2Nlc3MuCiAJICovCi0JU1RBTkRBUkRfUklHSFRTX0FMTAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMWYwMDAwKSwKKwlTVEFOREFSRF9SSUdIVFNfQUxMCQk9IGNwdV90b19sZTMyKDB4MDAxZjAwMDApLAogCiAJLyoKIAkgKiBUaGUgYWNjZXNzIHN5c3RlbSBBQ0wgYW5kIG1heGltdW0gYWxsb3dlZCBhY2Nlc3MgdHlwZXMgKGJpdHMgMjQgdG8KIAkgKiAyNSwgYml0cyAyNiB0byAyNyBhcmUgcmVzZXJ2ZWQpLgogCSAqLwotCUFDQ0VTU19TWVNURU1fU0VDVVJJVFkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMTAwMDAwMCksCi0JTUFYSU1VTV9BTExPV0VECQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAyMDAwMDAwKSwKKwlBQ0NFU1NfU1lTVEVNX1NFQ1VSSVRZCQk9IGNwdV90b19sZTMyKDB4MDEwMDAwMDApLAorCU1BWElNVU1fQUxMT1dFRAkJCT0gY3B1X3RvX2xlMzIoMHgwMjAwMDAwMCksCiAKIAkvKgogCSAqIFRoZSBnZW5lcmljIHJpZ2h0cyAoYml0cyAyOCB0byAzMSkuICBUaGVzZSBtYXAgb250byB0aGUgc3RhbmRhcmQgYW5kCkBAIC0xNTQzLDEwICsxNTMyLDEwIEBACiAJICovCiAKIAkvKiBSZWFkLCB3cml0ZSwgYW5kIGV4ZWN1dGUgYWNjZXNzLiAqLwotCUdFTkVSSUNfQUxMCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDEwMDAwMDAwKSwKKwlHRU5FUklDX0FMTAkJCT0gY3B1X3RvX2xlMzIoMHgxMDAwMDAwMCksCiAKIAkvKiBFeGVjdXRlIGFjY2Vzcy4gKi8KLQlHRU5FUklDX0VYRUNVVEUJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MjAwMDAwMDApLAorCUdFTkVSSUNfRVhFQ1VURQkJCT0gY3B1X3RvX2xlMzIoMHgyMDAwMDAwMCksCiAKIAkvKgogCSAqIFdyaXRlIGFjY2Vzcy4gIEZvciBmaWxlcywgdGhpcyBtYXBzIG9udG86CkBAIC0xNTU1LDcgKzE1NDQsNyBAQAogCSAqIEZvciBkaXJlY3RvcmllcywgdGhlIG1hcHBpbmcgaGFzIHRoZSBzYW1lIG51bWVyaWNhbCB2YWx1ZS4gIFNlZQogCSAqIGFib3ZlIGZvciB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSByaWdodHMgZ3JhbnRlZC4KIAkgKi8KLQlHRU5FUklDX1dSSVRFCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDQwMDAwMDAwKSwKKwlHRU5FUklDX1dSSVRFCQkJPSBjcHVfdG9fbGUzMigweDQwMDAwMDAwKSwKIAogCS8qCiAJICogUmVhZCBhY2Nlc3MuICBGb3IgZmlsZXMsIHRoaXMgbWFwcyBvbnRvOgpAQCAtMTU2NCw3ICsxNTUzLDcgQEAKIAkgKiBGb3IgZGlyZWN0b3JpZXMsIHRoZSBtYXBwaW5nIGhhcyB0aGUgc2FtZSBudW1iZXJpY2FsIHZhbHVlLiAgU2VlCiAJICogYWJvdmUgZm9yIHRoZSBkZXNjcmlwdGlvbnMgb2YgdGhlIHJpZ2h0cyBncmFudGVkLgogCSAqLwotCUdFTkVSSUNfUkVBRAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCksCisJR0VORVJJQ19SRUFECQkJPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwKSwKIH07CiAKIHR5cGVkZWYgbGUzMiBBQ0NFU1NfTUFTSzsKQEAgLTE2MDQsOCArMTU5Myw4IEBACiAgKiBUaGUgb2JqZWN0IEFDRSBmbGFncyAoMzItYml0KS4KICAqLwogZW51bSB7Ci0JQUNFX09CSkVDVF9UWVBFX1BSRVNFTlQJCQk9IGNvbnN0X2NwdV90b19sZTMyKDEpLAotCUFDRV9JTkhFUklURURfT0JKRUNUX1RZUEVfUFJFU0VOVAk9IGNvbnN0X2NwdV90b19sZTMyKDIpLAorCUFDRV9PQkpFQ1RfVFlQRV9QUkVTRU5UCQkJPSBjcHVfdG9fbGUzMigxKSwKKwlBQ0VfSU5IRVJJVEVEX09CSkVDVF9UWVBFX1BSRVNFTlQJPSBjcHVfdG9fbGUzMigyKSwKIH07CiAKIHR5cGVkZWYgbGUzMiBPQkpFQ1RfQUNFX0ZMQUdTOwpAQCAtMTcwNiwyMyArMTY5NSwyMyBAQAogICoJZXhwcmVzc2VkIGFzIG9mZnNldHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWN1cml0eSBkZXNjcmlwdG9yLgogICovCiBlbnVtIHsKLQlTRV9PV05FUl9ERUZBVUxURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAxKSwKLQlTRV9HUk9VUF9ERUZBVUxURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAyKSwKLQlTRV9EQUNMX1BSRVNFTlQJCQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwNCksCi0JU0VfREFDTF9ERUZBVUxURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDA4KSwKKwlTRV9PV05FUl9ERUZBVUxURUQJCT0gY3B1X3RvX2xlMTYoMHgwMDAxKSwKKwlTRV9HUk9VUF9ERUZBVUxURUQJCT0gY3B1X3RvX2xlMTYoMHgwMDAyKSwKKwlTRV9EQUNMX1BSRVNFTlQJCQk9IGNwdV90b19sZTE2KDB4MDAwNCksCisJU0VfREFDTF9ERUZBVUxURUQJCT0gY3B1X3RvX2xlMTYoMHgwMDA4KSwKIAotCVNFX1NBQ0xfUFJFU0VOVAkJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDEwKSwKLQlTRV9TQUNMX0RFRkFVTFRFRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMjApLAorCVNFX1NBQ0xfUFJFU0VOVAkJCT0gY3B1X3RvX2xlMTYoMHgwMDEwKSwKKwlTRV9TQUNMX0RFRkFVTFRFRAkJPSBjcHVfdG9fbGUxNigweDAwMjApLAogCi0JU0VfREFDTF9BVVRPX0lOSEVSSVRfUkVRCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMTAwKSwKLQlTRV9TQUNMX0FVVE9fSU5IRVJJVF9SRVEJPSBjb25zdF9jcHVfdG9fbGUxNigweDAyMDApLAotCVNFX0RBQ0xfQVVUT19JTkhFUklURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwNDAwKSwKLQlTRV9TQUNMX0FVVE9fSU5IRVJJVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDgwMCksCisJU0VfREFDTF9BVVRPX0lOSEVSSVRfUkVRCT0gY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwlTRV9TQUNMX0FVVE9fSU5IRVJJVF9SRVEJPSBjcHVfdG9fbGUxNigweDAyMDApLAorCVNFX0RBQ0xfQVVUT19JTkhFUklURUQJCT0gY3B1X3RvX2xlMTYoMHgwNDAwKSwKKwlTRV9TQUNMX0FVVE9fSU5IRVJJVEVECQk9IGNwdV90b19sZTE2KDB4MDgwMCksCiAKLQlTRV9EQUNMX1BST1RFQ1RFRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDEwMDApLAotCVNFX1NBQ0xfUFJPVEVDVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MjAwMCksCi0JU0VfUk1fQ09OVFJPTF9WQUxJRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDQwMDApLAotCVNFX1NFTEZfUkVMQVRJVkUJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVNFX0RBQ0xfUFJPVEVDVEVECQk9IGNwdV90b19sZTE2KDB4MTAwMCksCisJU0VfU0FDTF9QUk9URUNURUQJCT0gY3B1X3RvX2xlMTYoMHgyMDAwKSwKKwlTRV9STV9DT05UUk9MX1ZBTElECQk9IGNwdV90b19sZTE2KDB4NDAwMCksCisJU0VfU0VMRl9SRUxBVElWRQkJPSBjcHVfdG9fbGUxNigweDgwMDApCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHR5cGVkZWYgbGUxNiBTRUNVUklUWV9ERVNDUklQVE9SX0NPTlRST0w7CkBAIC0xOTEwLDIxICsxODk5LDIxIEBACiAgKiBQb3NzaWJsZSBmbGFncyBmb3IgdGhlIHZvbHVtZSAoMTYtYml0KS4KICAqLwogZW51bSB7Ci0JVk9MVU1FX0lTX0RJUlRZCQkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDEpLAotCVZPTFVNRV9SRVNJWkVfTE9HX0ZJTEUJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAyKSwKLQlWT0xVTUVfVVBHUkFERV9PTl9NT1VOVAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDQpLAotCVZPTFVNRV9NT1VOVEVEX09OX05UNAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDgpLAorCVZPTFVNRV9JU19ESVJUWQkJCT0gY3B1X3RvX2xlMTYoMHgwMDAxKSwKKwlWT0xVTUVfUkVTSVpFX0xPR19GSUxFCQk9IGNwdV90b19sZTE2KDB4MDAwMiksCisJVk9MVU1FX1VQR1JBREVfT05fTU9VTlQJCT0gY3B1X3RvX2xlMTYoMHgwMDA0KSwKKwlWT0xVTUVfTU9VTlRFRF9PTl9OVDQJCT0gY3B1X3RvX2xlMTYoMHgwMDA4KSwKIAotCVZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDEwKSwKLQlWT0xVTUVfUkVQQUlSX09CSkVDVF9JRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMjApLAorCVZPTFVNRV9ERUxFVEVfVVNOX1VOREVSV0FZCT0gY3B1X3RvX2xlMTYoMHgwMDEwKSwKKwlWT0xVTUVfUkVQQUlSX09CSkVDVF9JRAkJPSBjcHVfdG9fbGUxNigweDAwMjApLAogCi0JVk9MVU1FX0NIS0RTS19VTkRFUldBWQkJPSBjb25zdF9jcHVfdG9fbGUxNigweDQwMDApLAotCVZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0sJPSBjb25zdF9jcHVfdG9fbGUxNigweDgwMDApLAorCVZPTFVNRV9DSEtEU0tfVU5ERVJXQVkJCT0gY3B1X3RvX2xlMTYoMHg0MDAwKSwKKwlWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLCT0gY3B1X3RvX2xlMTYoMHg4MDAwKSwKIAotCVZPTFVNRV9GTEFHU19NQVNLCQk9IGNvbnN0X2NwdV90b19sZTE2KDB4YzAzZiksCisJVk9MVU1FX0ZMQUdTX01BU0sJCT0gY3B1X3RvX2xlMTYoMHhjMDNmKSwKIAogCS8qIFRvIG1ha2Ugb3VyIGxpZmUgZWFzaWVyIHdoZW4gY2hlY2tpbmcgaWYgd2UgbXVzdCBtb3VudCByZWFkLW9ubHkuICovCi0JVk9MVU1FX01VU1RfTU9VTlRfUk9fTUFTSwk9IGNvbnN0X2NwdV90b19sZTE2KDB4YzAyNyksCisJVk9MVU1FX01VU1RfTU9VTlRfUk9fTUFTSwk9IGNwdV90b19sZTE2KDB4YzAyNyksCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHR5cGVkZWYgbGUxNiBWT0xVTUVfRkxBR1M7CkBAIC0yMTA5LDI2ICsyMDk4LDI2IEBACiAgKiBUaGUgdXNlciBxdW90YSBmbGFncy4gIE5hbWVzIGV4cGxhaW4gbWVhbmluZy4KICAqLwogZW51bSB7Ci0JUVVPVEFfRkxBR19ERUZBVUxUX0xJTUlUUwk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCVFVT1RBX0ZMQUdfTElNSVRfUkVBQ0hFRAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAotCVFVT1RBX0ZMQUdfSURfREVMRVRFRAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKKwlRVU9UQV9GTEFHX0RFRkFVTFRfTElNSVRTCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJUVVPVEFfRkxBR19MSU1JVF9SRUFDSEVECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCisJUVVPVEFfRkxBR19JRF9ERUxFVEVECQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpLAogCi0JUVVPVEFfRkxBR19VU0VSX01BU0sJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNyksCisJUVVPVEFfRkxBR19VU0VSX01BU0sJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwNyksCiAJLyogVGhpcyBpcyBhIGJpdCBtYXNrIGZvciB0aGUgdXNlciBxdW90YSBmbGFncy4gKi8KIAogCS8qCiAJICogVGhlc2UgZmxhZ3MgYXJlIG9ubHkgcHJlc2VudCBpbiB0aGUgcXVvdGEgZGVmYXVsdHMgaW5kZXggZW50cnksIGkuZS4KIAkgKiBpbiB0aGUgZW50cnkgd2hlcmUgb3duZXJfaWQgPSBRVU9UQV9ERUZBVUxUU19JRC4KIAkgKi8KLQlRVU9UQV9GTEFHX1RSQUNLSU5HX0VOQUJMRUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKLQlRVU9UQV9GTEFHX0VORk9SQ0VNRU5UX0VOQUJMRUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKLQlRVU9UQV9GTEFHX1RSQUNLSU5HX1JFUVVFU1RFRAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwNDApLAotCVFVT1RBX0ZMQUdfTE9HX1RIUkVTSE9MRAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwODApLAorCVFVT1RBX0ZMQUdfVFJBQ0tJTkdfRU5BQkxFRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwMTApLAorCVFVT1RBX0ZMQUdfRU5GT1JDRU1FTlRfRU5BQkxFRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwMjApLAorCVFVT1RBX0ZMQUdfVFJBQ0tJTkdfUkVRVUVTVEVECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCisJUVVPVEFfRkxBR19MT0dfVEhSRVNIT0xECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCksCiAKLQlRVU9UQV9GTEFHX0xPR19MSU1JVAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKLQlRVU9UQV9GTEFHX09VVF9PRl9EQVRFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAyMDApLAotCVFVT1RBX0ZMQUdfQ09SUlVQVAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwNDAwKSwKLQlRVU9UQV9GTEFHX1BFTkRJTkdfREVMRVRFUwk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDA4MDApLAorCVFVT1RBX0ZMQUdfTE9HX0xJTUlUCQk9IGNwdV90b19sZTMyKDB4MDAwMDAxMDApLAorCVFVT1RBX0ZMQUdfT1VUX09GX0RBVEUJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCksCisJUVVPVEFfRkxBR19DT1JSVVBUCQk9IGNwdV90b19sZTMyKDB4MDAwMDA0MDApLAorCVFVT1RBX0ZMQUdfUEVORElOR19ERUxFVEVTCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDgwMCksCiB9OwogCiB0eXBlZGVmIGxlMzIgUVVPVEFfRkxBR1M7CkBAIC0yMTcyLDkgKzIxNjEsOSBAQAogICogUHJlZGVmaW5lZCBvd25lcl9pZCB2YWx1ZXMgKDMyLWJpdCkuCiAgKi8KIGVudW0gewotCVFVT1RBX0lOVkFMSURfSUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKLQlRVU9UQV9ERUZBVUxUU19JRAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCVFVT1RBX0ZJUlNUX1VTRVJfSUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKKwlRVU9UQV9JTlZBTElEX0lECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJUVVPVEFfREVGQVVMVFNfSUQJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlRVU9UQV9GSVJTVF9VU0VSX0lECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCiB9OwogCiAvKgpAQCAtMjE4OSwxNCArMjE3OCwxNCBAQAogICogSW5kZXggZW50cnkgZmxhZ3MgKDE2LWJpdCkuCiAgKi8KIGVudW0gewotCUlOREVYX0VOVFJZX05PREUgPSBjb25zdF9jcHVfdG9fbGUxNigxKSwgLyogVGhpcyBlbnRyeSBjb250YWlucyBhCisJSU5ERVhfRU5UUllfTk9ERSA9IGNwdV90b19sZTE2KDEpLCAvKiBUaGlzIGVudHJ5IGNvbnRhaW5zIGEKIAkJCXN1Yi1ub2RlLCBpLmUuIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4IGJsb2NrIGluIGZvcm0gb2YKIAkJCWEgdmlydHVhbCBjbHVzdGVyIG51bWJlciAoc2VlIGJlbG93KS4gKi8KLQlJTkRFWF9FTlRSWV9FTkQgID0gY29uc3RfY3B1X3RvX2xlMTYoMiksIC8qIFRoaXMgc2lnbmlmaWVzIHRoZSBsYXN0CisJSU5ERVhfRU5UUllfRU5EICA9IGNwdV90b19sZTE2KDIpLCAvKiBUaGlzIHNpZ25pZmllcyB0aGUgbGFzdAogCQkJZW50cnkgaW4gYW4gaW5kZXggYmxvY2suICBUaGUgaW5kZXggZW50cnkgZG9lcyBub3QKIAkJCXJlcHJlc2VudCBhIGZpbGUgYnV0IGl0IGNhbiBwb2ludCB0byBhIHN1Yi1ub2RlLiAqLwogCi0JSU5ERVhfRU5UUllfU1BBQ0VfRklMTEVSID0gY29uc3RfY3B1X3RvX2xlMTYoMHhmZmZmKSwgLyogZ2NjOiBGb3JjZQorCUlOREVYX0VOVFJZX1NQQUNFX0ZJTExFUiA9IGNwdV90b19sZTE2KDB4ZmZmZiksIC8qIGdjYzogRm9yY2UKIAkJCWVudW0gYml0IHdpZHRoIHRvIDE2LWJpdC4gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIApAQCAtMjMzNCwyNiArMjMyMywyNiBAQAogICogVGhlc2UgYXJlIHRoZSBwcmVkZWZpbmVkIHJlcGFyc2UgcG9pbnQgdGFnczoKICAqLwogZW51bSB7Ci0JSU9fUkVQQVJTRV9UQUdfSVNfQUxJQVMJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgyMDAwMDAwMCksCi0JSU9fUkVQQVJTRV9UQUdfSVNfSElHSF9MQVRFTkNZCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg0MDAwMDAwMCksCi0JSU9fUkVQQVJTRV9UQUdfSVNfTUlDUk9TT0ZUCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCksCisJSU9fUkVQQVJTRV9UQUdfSVNfQUxJQVMJCT0gY3B1X3RvX2xlMzIoMHgyMDAwMDAwMCksCisJSU9fUkVQQVJTRV9UQUdfSVNfSElHSF9MQVRFTkNZCT0gY3B1X3RvX2xlMzIoMHg0MDAwMDAwMCksCisJSU9fUkVQQVJTRV9UQUdfSVNfTUlDUk9TT0ZUCT0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCksCiAKLQlJT19SRVBBUlNFX1RBR19SRVNFUlZFRF9aRVJPCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCi0JSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfT05FCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCi0JSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfUkFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlJT19SRVBBUlNFX1RBR19SRVNFUlZFRF9aRVJPCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfT05FCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfUkFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKIAotCUlPX1JFUEFSU0VfVEFHX05TUwkJPSBjb25zdF9jcHVfdG9fbGUzMigweDY4MDAwMDA1KSwKLQlJT19SRVBBUlNFX1RBR19OU1NfUkVDT1ZFUgk9IGNvbnN0X2NwdV90b19sZTMyKDB4NjgwMDAwMDYpLAotCUlPX1JFUEFSU0VfVEFHX1NJUwkJPSBjb25zdF9jcHVfdG9fbGUzMigweDY4MDAwMDA3KSwKLQlJT19SRVBBUlNFX1RBR19ERlMJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg2ODAwMDAwOCksCisJSU9fUkVQQVJTRV9UQUdfTlNTCQk9IGNwdV90b19sZTMyKDB4NjgwMDAwMDUpLAorCUlPX1JFUEFSU0VfVEFHX05TU19SRUNPVkVSCT0gY3B1X3RvX2xlMzIoMHg2ODAwMDAwNiksCisJSU9fUkVQQVJTRV9UQUdfU0lTCQk9IGNwdV90b19sZTMyKDB4NjgwMDAwMDcpLAorCUlPX1JFUEFSU0VfVEFHX0RGUwkJPSBjcHVfdG9fbGUzMigweDY4MDAwMDA4KSwKIAotCUlPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg4ODAwMDAwMyksCisJSU9fUkVQQVJTRV9UQUdfTU9VTlRfUE9JTlQJPSBjcHVfdG9fbGUzMigweDg4MDAwMDAzKSwKIAotCUlPX1JFUEFSU0VfVEFHX0hTTQkJPSBjb25zdF9jcHVfdG9fbGUzMigweGE4MDAwMDA0KSwKKwlJT19SRVBBUlNFX1RBR19IU00JCT0gY3B1X3RvX2xlMzIoMHhhODAwMDAwNCksCiAKLQlJT19SRVBBUlNFX1RBR19TWU1CT0xJQ19MSU5LCT0gY29uc3RfY3B1X3RvX2xlMzIoMHhlODAwMDAwMCksCisJSU9fUkVQQVJTRV9UQUdfU1lNQk9MSUNfTElOSwk9IGNwdV90b19sZTMyKDB4ZTgwMDAwMDApLAogCi0JSU9fUkVQQVJTRV9UQUdfVkFMSURfVkFMVUVTCT0gY29uc3RfY3B1X3RvX2xlMzIoMHhlMDAwZmZmZiksCisJSU9fUkVQQVJTRV9UQUdfVkFMSURfVkFMVUVTCT0gY3B1X3RvX2xlMzIoMHhlMDAwZmZmZiksCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9sb2dmaWxlLmggYi9mcy9udGZzL2xvZ2ZpbGUuaAppbmRleCA5NDY4ZTFjLi5iNWE2ZjA4IDEwMDY0NAotLS0gYS9mcy9udGZzL2xvZ2ZpbGUuaAorKysgYi9mcy9udGZzL2xvZ2ZpbGUuaApAQCAtMTA0LDcgKzEwNCw3IEBACiAgKiBpbiB0aGlzIHBhcnRpY3VsYXIgY2xpZW50IGFycmF5LiAgQWxzbyBpbnNpZGUgdGhlIGNsaWVudCByZWNvcmRzIHRoZW1zZWx2ZXMsCiAgKiB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIG5vIGNsaWVudCByZWNvcmRzIHByZWNlZGluZyBvciBmb2xsb3dpbmcgdGhpcyBvbmUuCiAgKi8KLSNkZWZpbmUgTE9HRklMRV9OT19DTElFTlQJY29uc3RfY3B1X3RvX2xlMTYoMHhmZmZmKQorI2RlZmluZSBMT0dGSUxFX05PX0NMSUVOVAljcHVfdG9fbGUxNigweGZmZmYpCiAjZGVmaW5lIExPR0ZJTEVfTk9fQ0xJRU5UX0NQVQkweGZmZmYKIAogLyoKQEAgLTExMiw4ICsxMTIsOCBAQAogICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvZyBmaWxlIGluIHdoaWNoIHRoZXkgYXJlIHByZXNlbnQuCiAgKi8KIGVudW0gewotCVJFU1RBUlRfVk9MVU1FX0lTX0NMRUFOCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAyKSwKLQlSRVNUQVJUX1NQQUNFX0ZJTExFUgk9IGNvbnN0X2NwdV90b19sZTE2KDB4ZmZmZiksIC8qIGdjYzogRm9yY2UgZW51bSBiaXQgd2lkdGggdG8gMTYuICovCisJUkVTVEFSVF9WT0xVTUVfSVNfQ0xFQU4JPSBjcHVfdG9fbGUxNigweDAwMDIpLAorCVJFU1RBUlRfU1BBQ0VfRklMTEVSCT0gY3B1X3RvX2xlMTYoMHhmZmZmKSwgLyogZ2NjOiBGb3JjZSBlbnVtIGJpdCB3aWR0aCB0byAxNi4gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogdHlwZWRlZiBsZTE2IFJFU1RBUlRfQVJFQV9GTEFHUzsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IDE3ZDMyY2EuLjIzYmY2ODQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMjgzOSw3ICsyODM5LDcgQEAKIAkgKi8KIAogCS8qIE1hcmsgdGhlIG1mdCByZWNvcmQgYXMgbm90IGluIHVzZS4gKi8KLQltLT5mbGFncyAmPSBjb25zdF9jcHVfdG9fbGUxNih+Y29uc3RfbGUxNl90b19jcHUoTUZUX1JFQ09SRF9JTl9VU0UpKTsKKwltLT5mbGFncyAmPSB+TUZUX1JFQ09SRF9JTl9VU0U7CiAKIAkvKiBJbmNyZW1lbnQgdGhlIHNlcXVlbmNlIG51bWJlciwgc2tpcHBpbmcgemVybywgaWYgaXQgaXMgbm90IHplcm8uICovCiAJb2xkX3NlcV9ubyA9IG0tPnNlcXVlbmNlX251bWJlcjsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvc3VwZXIuYyBiL2ZzL250ZnMvc3VwZXIuYwppbmRleCA0YTQ2NzQzLi5mNzY5NTFkIDEwMDY0NAotLS0gYS9mcy9udGZzL3N1cGVyLmMKKysrIGIvZnMvbnRmcy9zdXBlci5jCkBAIC02MTgsNyArNjE4LDcgQEAKIAkgKiBtYW55IEJJT1NlcyB3aWxsIHJlZnVzZSB0byBib290IGZyb20gYSBib290c2VjdG9yIGlmIHRoZSBtYWdpYyBpcwogCSAqIGluY29ycmVjdCwgc28gd2UgZW1pdCBhIHdhcm5pbmcuCiAJICovCi0JaWYgKCFzaWxlbnQgJiYgYi0+ZW5kX29mX3NlY3Rvcl9tYXJrZXIgIT0gY29uc3RfY3B1X3RvX2xlMTYoMHhhYTU1KSkKKwlpZiAoIXNpbGVudCAmJiBiLT5lbmRfb2Zfc2VjdG9yX21hcmtlciAhPSBjcHVfdG9fbGUxNigweGFhNTUpKQogCQludGZzX3dhcm5pbmcoc2IsICJJbnZhbGlkIGVuZCBvZiBzZWN0b3IgbWFya2VyLiIpOwogCXJldHVybiB0cnVlOwogbm90X250ZnM6CkBAIC0xMjQyLDEzICsxMjQyLDEzIEBACiAJdTMyICprYWRkciwgKmtlbmQ7CiAJbnRmc19uYW1lICpuYW1lID0gTlVMTDsKIAlpbnQgcmV0ID0gMTsKLQlzdGF0aWMgY29uc3QgbnRmc2NoYXIgaGliZXJmaWxbMTNdID0geyBjb25zdF9jcHVfdG9fbGUxNignaCcpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ2knKSwgY29uc3RfY3B1X3RvX2xlMTYoJ2InKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdlJyksIGNvbnN0X2NwdV90b19sZTE2KCdyJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignZicpLCBjb25zdF9jcHVfdG9fbGUxNignaScpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ2wnKSwgY29uc3RfY3B1X3RvX2xlMTYoJy4nKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdzJyksIGNvbnN0X2NwdV90b19sZTE2KCd5JyksCi0JCQljb25zdF9jcHVfdG9fbGUxNigncycpLCAwIH07CisJc3RhdGljIGNvbnN0IG50ZnNjaGFyIGhpYmVyZmlsWzEzXSA9IHsgY3B1X3RvX2xlMTYoJ2gnKSwKKwkJCWNwdV90b19sZTE2KCdpJyksIGNwdV90b19sZTE2KCdiJyksCisJCQljcHVfdG9fbGUxNignZScpLCBjcHVfdG9fbGUxNigncicpLAorCQkJY3B1X3RvX2xlMTYoJ2YnKSwgY3B1X3RvX2xlMTYoJ2knKSwKKwkJCWNwdV90b19sZTE2KCdsJyksIGNwdV90b19sZTE2KCcuJyksCisJCQljcHVfdG9fbGUxNigncycpLCBjcHVfdG9fbGUxNigneScpLAorCQkJY3B1X3RvX2xlMTYoJ3MnKSwgMCB9OwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcuIik7CiAJLyoKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCWdvdG8gaXB1dF9vdXQ7CiAJfQogCWthZGRyID0gKHUzMiopcGFnZV9hZGRyZXNzKHBhZ2UpOwotCWlmICgqKGxlMzIqKWthZGRyID09IGNvbnN0X2NwdV90b19sZTMyKDB4NzI2MjY5NjgpLyonaGlicicqLykgeworCWlmICgqKGxlMzIqKWthZGRyID09IGNwdV90b19sZTMyKDB4NzI2MjY5NjgpLyonaGlicicqLykgewogCQludGZzX2RlYnVnKCJNYWdpYyBcImhpYnJcIiBmb3VuZCBpbiBoaWJlcmZpbC5zeXMuICBXaW5kb3dzIGlzICIKIAkJCQkiaGliZXJuYXRlZCBvbiB0aGUgdm9sdW1lLiAgVGhpcyBpcyB0aGUgIgogCQkJCSJzeXN0ZW0gdm9sdW1lLiIpOwpAQCAtMTMzNywxMiArMTMzNywxMiBAQAogCU1GVF9SRUYgbXJlZjsKIAlzdHJ1Y3QgaW5vZGUgKnRtcF9pbm87CiAJbnRmc19uYW1lICpuYW1lID0gTlVMTDsKLQlzdGF0aWMgY29uc3QgbnRmc2NoYXIgUXVvdGFbN10gPSB7IGNvbnN0X2NwdV90b19sZTE2KCckJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignUScpLCBjb25zdF9jcHVfdG9fbGUxNigndScpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ28nKSwgY29uc3RfY3B1X3RvX2xlMTYoJ3QnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdhJyksIDAgfTsKLQlzdGF0aWMgbnRmc2NoYXIgUVszXSA9IHsgY29uc3RfY3B1X3RvX2xlMTYoJyQnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdRJyksIDAgfTsKKwlzdGF0aWMgY29uc3QgbnRmc2NoYXIgUXVvdGFbN10gPSB7IGNwdV90b19sZTE2KCckJyksCisJCQljcHVfdG9fbGUxNignUScpLCBjcHVfdG9fbGUxNigndScpLAorCQkJY3B1X3RvX2xlMTYoJ28nKSwgY3B1X3RvX2xlMTYoJ3QnKSwKKwkJCWNwdV90b19sZTE2KCdhJyksIDAgfTsKKwlzdGF0aWMgbnRmc2NoYXIgUVszXSA9IHsgY3B1X3RvX2xlMTYoJyQnKSwKKwkJCWNwdV90b19sZTE2KCdRJyksIDAgfTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nLiIpOwogCS8qCkBAIC0xNDE2LDE2ICsxNDE2LDE2IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJbnRmc19uYW1lICpuYW1lID0gTlVMTDsKIAlVU05fSEVBREVSICp1aDsKLQlzdGF0aWMgY29uc3QgbnRmc2NoYXIgVXNuSnJubFs5XSA9IHsgY29uc3RfY3B1X3RvX2xlMTYoJyQnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdVJyksIGNvbnN0X2NwdV90b19sZTE2KCdzJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignbicpLCBjb25zdF9jcHVfdG9fbGUxNignSicpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ3InKSwgY29uc3RfY3B1X3RvX2xlMTYoJ24nKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdsJyksIDAgfTsKLQlzdGF0aWMgbnRmc2NoYXIgTWF4WzVdID0geyBjb25zdF9jcHVfdG9fbGUxNignJCcpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ00nKSwgY29uc3RfY3B1X3RvX2xlMTYoJ2EnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCd4JyksIDAgfTsKLQlzdGF0aWMgbnRmc2NoYXIgSlszXSA9IHsgY29uc3RfY3B1X3RvX2xlMTYoJyQnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdKJyksIDAgfTsKKwlzdGF0aWMgY29uc3QgbnRmc2NoYXIgVXNuSnJubFs5XSA9IHsgY3B1X3RvX2xlMTYoJyQnKSwKKwkJCWNwdV90b19sZTE2KCdVJyksIGNwdV90b19sZTE2KCdzJyksCisJCQljcHVfdG9fbGUxNignbicpLCBjcHVfdG9fbGUxNignSicpLAorCQkJY3B1X3RvX2xlMTYoJ3InKSwgY3B1X3RvX2xlMTYoJ24nKSwKKwkJCWNwdV90b19sZTE2KCdsJyksIDAgfTsKKwlzdGF0aWMgbnRmc2NoYXIgTWF4WzVdID0geyBjcHVfdG9fbGUxNignJCcpLAorCQkJY3B1X3RvX2xlMTYoJ00nKSwgY3B1X3RvX2xlMTYoJ2EnKSwKKwkJCWNwdV90b19sZTE2KCd4JyksIDAgfTsKKwlzdGF0aWMgbnRmc2NoYXIgSlszXSA9IHsgY3B1X3RvX2xlMTYoJyQnKSwKKwkJCWNwdV90b19sZTE2KCdKJyksIDAgfTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nLiIpOwogCS8qCmRpZmYgLS1naXQgYS9mcy9udGZzL3VzbmpybmwuaCBiL2ZzL250ZnMvdXNuanJubC5oCmluZGV4IDQwODdmYmQuLjAwZDhlNmIgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvdXNuanJubC5oCisrKyBiL2ZzL250ZnMvdXNuanJubC5oCkBAIC0xMTYsMjcgKzExNiwyNyBAQAogICogZG9jdW1lbnRhdGlvbjogaHR0cDovL3d3dy5saW51eC1udGZzLm9yZy8KICAqLwogZW51bSB7Ci0JVVNOX1JFQVNPTl9EQVRBX09WRVJXUklURQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCVVTTl9SRUFTT05fREFUQV9FWFRFTkQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCi0JVVNOX1JFQVNPTl9EQVRBX1RSVU5DQVRJT04JPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKLQlVU05fUkVBU09OX05BTUVEX0RBVEFfT1ZFUldSSVRFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCksCi0JVVNOX1JFQVNPTl9OQU1FRF9EQVRBX0VYVEVORAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMjApLAotCVVTTl9SRUFTT05fTkFNRURfREFUQV9UUlVOQ0FUSU9OPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKSwKLQlVU05fUkVBU09OX0ZJTEVfQ1JFQVRFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAxMDApLAotCVVTTl9SRUFTT05fRklMRV9ERUxFVEUJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDIwMCksCi0JVVNOX1JFQVNPTl9FQV9DSEFOR0UJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCksCi0JVVNOX1JFQVNPTl9TRUNVUklUWV9DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwODAwKSwKLQlVU05fUkVBU09OX1JFTkFNRV9PTERfTkFNRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDEwMDApLAotCVVTTl9SRUFTT05fUkVOQU1FX05FV19OQU1FCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMjAwMCksCi0JVVNOX1JFQVNPTl9JTkRFWEFCTEVfQ0hBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwNDAwMCksCi0JVVNOX1JFQVNPTl9CQVNJQ19JTkZPX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDgwMDApLAotCVVTTl9SRUFTT05fSEFSRF9MSU5LX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMTAwMDApLAotCVVTTl9SRUFTT05fQ09NUFJFU1NJT05fQ0hBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAyMDAwMCksCi0JVVNOX1JFQVNPTl9FTkNSWVBUSU9OX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwNDAwMDApLAotCVVTTl9SRUFTT05fT0JKRUNUX0lEX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwODAwMDApLAotCVVTTl9SRUFTT05fUkVQQVJTRV9QT0lOVF9DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMTAwMDAwKSwKLQlVU05fUkVBU09OX1NUUkVBTV9DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMjAwMDAwKSwKLQlVU05fUkVBU09OX0NMT1NFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4ODAwMDAwMDApLAorCVVTTl9SRUFTT05fREFUQV9PVkVSV1JJVEUJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlVU05fUkVBU09OX0RBVEFfRVhURU5ECQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCVVTTl9SRUFTT05fREFUQV9UUlVOQ0FUSU9OCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJVVNOX1JFQVNPTl9OQU1FRF9EQVRBX09WRVJXUklURQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMTApLAorCVVTTl9SRUFTT05fTkFNRURfREFUQV9FWFRFTkQJPSBjcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKKwlVU05fUkVBU09OX05BTUVEX0RBVEFfVFJVTkNBVElPTj0gY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCisJVVNOX1JFQVNPTl9GSUxFX0NSRUFURQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKKwlVU05fUkVBU09OX0ZJTEVfREVMRVRFCQk9IGNwdV90b19sZTMyKDB4MDAwMDAyMDApLAorCVVTTl9SRUFTT05fRUFfQ0hBTkdFCQk9IGNwdV90b19sZTMyKDB4MDAwMDA0MDApLAorCVVTTl9SRUFTT05fU0VDVVJJVFlfQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDgwMCksCisJVVNOX1JFQVNPTl9SRU5BTUVfT0xEX05BTUUJPSBjcHVfdG9fbGUzMigweDAwMDAxMDAwKSwKKwlVU05fUkVBU09OX1JFTkFNRV9ORVdfTkFNRQk9IGNwdV90b19sZTMyKDB4MDAwMDIwMDApLAorCVVTTl9SRUFTT05fSU5ERVhBQkxFX0NIQU5HRQk9IGNwdV90b19sZTMyKDB4MDAwMDQwMDApLAorCVVTTl9SRUFTT05fQkFTSUNfSU5GT19DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDA4MDAwKSwKKwlVU05fUkVBU09OX0hBUkRfTElOS19DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDEwMDAwKSwKKwlVU05fUkVBU09OX0NPTVBSRVNTSU9OX0NIQU5HRQk9IGNwdV90b19sZTMyKDB4MDAwMjAwMDApLAorCVVTTl9SRUFTT05fRU5DUllQVElPTl9DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDQwMDAwKSwKKwlVU05fUkVBU09OX09CSkVDVF9JRF9DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDgwMDAwKSwKKwlVU05fUkVBU09OX1JFUEFSU0VfUE9JTlRfQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDEwMDAwMCksCisJVVNOX1JFQVNPTl9TVFJFQU1fQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDIwMDAwMCksCisJVVNOX1JFQVNPTl9DTE9TRQkJPSBjcHVfdG9fbGUzMigweDgwMDAwMDAwKSwKIH07CiAKIHR5cGVkZWYgbGUzMiBVU05fUkVBU09OX0ZMQUdTOwpAQCAtMTQ4LDkgKzE0OCw5IEBACiAgKglodHRwOi8vd3d3LmxpbnV4LW50ZnMub3JnLwogICovCiBlbnVtIHsKLQlVU05fU09VUkNFX0RBVEFfTUFOQUdFTUVOVAkgID0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCi0JVVNOX1NPVVJDRV9BVVhJTElBUllfREFUQQkgID0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCi0JVVNOX1NPVVJDRV9SRVBMSUNBVElPTl9NQU5BR0VNRU5UID0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJVVNOX1NPVVJDRV9EQVRBX01BTkFHRU1FTlQJICA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCVVTTl9TT1VSQ0VfQVVYSUxJQVJZX0RBVEEJICA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCVVTTl9TT1VSQ0VfUkVQTElDQVRJT05fTUFOQUdFTUVOVCA9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpLAogfTsKIAogdHlwZWRlZiBsZTMyIFVTTl9TT1VSQ0VfSU5GT19GTEFHUzsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggMTJkZmI0NC4uZmJlYWVjNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKKysrIGIvZnMvb2NmczIvYWNsLmMKQEAgLTI5Niw3ICsyOTYsNyBAQAogCQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJCX0KIAkJaWYgKCFhY2wpCi0JCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQogCWlmICgob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgJiYgYWNsKSB7CiAJCXN0cnVjdCBwb3NpeF9hY2wgKmNsb25lOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuYyBiL2ZzL29jZnMyL2FsbG9jLmMKaW5kZXggMTllM2E5Ni4uNjc4YTA2NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuYworKysgYi9mcy9vY2ZzMi9hbGxvYy5jCkBAIC0yOTQsNiArMjk0LDU1IEBACiAJLmVvX2ZpbGxfbWF4X2xlYWZfY2x1c3RlcnMgPSBvY2ZzMl94YXR0cl90cmVlX2ZpbGxfbWF4X2xlYWZfY2x1c3RlcnMsCiB9OwogCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3NldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCQkgIHU2NCBibGtubykKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CisKKwlkeF9yb290LT5kcl9sYXN0X2ViX2JsayA9IGNwdV90b19sZTY0KGJsa25vKTsKK30KKworc3RhdGljIHU2NCBvY2ZzMl9keF9yb290X2dldF9sYXN0X2ViX2JsayhzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKKworCXJldHVybiBsZTY0X3RvX2NwdShkeF9yb290LT5kcl9sYXN0X2ViX2Jsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X3Jvb3RfdXBkYXRlX2NsdXN0ZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICB1MzIgY2x1c3RlcnMpCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QgPSBldC0+ZXRfb2JqZWN0OworCisJbGUzMl9hZGRfY3B1KCZkeF9yb290LT5kcl9jbHVzdGVycywgY2x1c3RlcnMpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X3Jvb3Rfc2FuaXR5X2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CisKKwlCVUdfT04oIU9DRlMyX0lTX1ZBTElEX0RYX1JPT1QoZHhfcm9vdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X3Jvb3RfZmlsbF9yb290X2VsKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QgPSBldC0+ZXRfb2JqZWN0OworCisJZXQtPmV0X3Jvb3RfZWwgPSAmZHhfcm9vdC0+ZHJfbGlzdDsKK30KKworc3RhdGljIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZV9vcGVyYXRpb25zIG9jZnMyX2R4X3Jvb3RfZXRfb3BzID0geworCS5lb19zZXRfbGFzdF9lYl9ibGsJPSBvY2ZzMl9keF9yb290X3NldF9sYXN0X2ViX2JsaywKKwkuZW9fZ2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfZHhfcm9vdF9nZXRfbGFzdF9lYl9ibGssCisJLmVvX3VwZGF0ZV9jbHVzdGVycwk9IG9jZnMyX2R4X3Jvb3RfdXBkYXRlX2NsdXN0ZXJzLAorCS5lb19zYW5pdHlfY2hlY2sJPSBvY2ZzMl9keF9yb290X3Nhbml0eV9jaGVjaywKKwkuZW9fZmlsbF9yb290X2VsCT0gb2NmczJfZHhfcm9vdF9maWxsX3Jvb3RfZWwsCit9OworCiBzdGF0aWMgdm9pZCBfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLApAQCAtMzM5LDYgKzM4OCwxNCBAQAogCQkJCSAmb2NmczJfeGF0dHJfdmFsdWVfZXRfb3BzKTsKIH0KIAordm9pZCBvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlfX29jZnMyX2luaXRfZXh0ZW50X3RyZWUoZXQsIGlub2RlLCBiaCwgb2NmczJfam91cm5hbF9hY2Nlc3NfZHIsCisJCQkJIE5VTEwsICZvY2ZzMl9keF9yb290X2V0X29wcyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9ldF9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJICAgIHU2NCBuZXdfbGFzdF9lYl9ibGspCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hbGxvYy5oIGIvZnMvb2NmczIvYWxsb2MuaAppbmRleCBjY2VmZjVjLi4zNTMyNTRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hbGxvYy5oCisrKyBiL2ZzL29jZnMyL2FsbG9jLmgKQEAgLTc1LDYgKzc1LDkgQEAKIHZvaWQgb2NmczJfaW5pdF94YXR0cl92YWx1ZV9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2Yik7Cit2b2lkIG9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZShzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAogLyoKICAqIFJlYWQgYW4gZXh0ZW50IGJsb2NrIGludG8gKmJoLiAgSWYgKmJoIGlzIE5VTEwsIGEgYmggd2lsbCBiZQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDhlMTcwOWEuLmIyYzUyYjMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTE5NTYsMTUgKzE5NTYsMTYgQEAKIH0KIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvY2ZzMl9hb3BzID0gewotCS5yZWFkcGFnZQk9IG9jZnMyX3JlYWRwYWdlLAotCS5yZWFkcGFnZXMJPSBvY2ZzMl9yZWFkcGFnZXMsCi0JLndyaXRlcGFnZQk9IG9jZnMyX3dyaXRlcGFnZSwKLQkud3JpdGVfYmVnaW4JPSBvY2ZzMl93cml0ZV9iZWdpbiwKLQkud3JpdGVfZW5kCT0gb2NmczJfd3JpdGVfZW5kLAotCS5ibWFwCQk9IG9jZnMyX2JtYXAsCi0JLnN5bmNfcGFnZQk9IGJsb2NrX3N5bmNfcGFnZSwKLQkuZGlyZWN0X0lPCT0gb2NmczJfZGlyZWN0X0lPLAotCS5pbnZhbGlkYXRlcGFnZQk9IG9jZnMyX2ludmFsaWRhdGVwYWdlLAotCS5yZWxlYXNlcGFnZQk9IG9jZnMyX3JlbGVhc2VwYWdlLAotCS5taWdyYXRlcGFnZQk9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLnJlYWRwYWdlCQk9IG9jZnMyX3JlYWRwYWdlLAorCS5yZWFkcGFnZXMJCT0gb2NmczJfcmVhZHBhZ2VzLAorCS53cml0ZXBhZ2UJCT0gb2NmczJfd3JpdGVwYWdlLAorCS53cml0ZV9iZWdpbgkJPSBvY2ZzMl93cml0ZV9iZWdpbiwKKwkud3JpdGVfZW5kCQk9IG9jZnMyX3dyaXRlX2VuZCwKKwkuYm1hcAkJCT0gb2NmczJfYm1hcCwKKwkuc3luY19wYWdlCQk9IGJsb2NrX3N5bmNfcGFnZSwKKwkuZGlyZWN0X0lPCQk9IG9jZnMyX2RpcmVjdF9JTywKKwkuaW52YWxpZGF0ZXBhZ2UJCT0gb2NmczJfaW52YWxpZGF0ZXBhZ2UsCisJLnJlbGVhc2VwYWdlCQk9IG9jZnMyX3JlbGVhc2VwYWdlLAorCS5taWdyYXRlcGFnZQkJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggMDQ2OTdiYS4uNGY4NWVjZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSAiaGVhcnRiZWF0LmgiCiAjaW5jbHVkZSAidGNwLmgiCkBAIC02MCw2ICs2MSwxMSBAQAogc3RhdGljIExJU1RfSEVBRChvMmhiX25vZGVfZXZlbnRzKTsKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChvMmhiX3N0ZWFkeV9xdWV1ZSk7CiAKKyNkZWZpbmUgTzJIQl9ERUJVR19ESVIJCQkibzJoYiIKKyNkZWZpbmUgTzJIQl9ERUJVR19MSVZFTk9ERVMJCSJsaXZlbm9kZXMiCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbzJoYl9kZWJ1Z19kaXI7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbzJoYl9kZWJ1Z19saXZlbm9kZXM7CisKIHN0YXRpYyBMSVNUX0hFQUQobzJoYl9hbGxfcmVnaW9ucyk7CiAKIHN0YXRpYyBzdHJ1Y3QgbzJoYl9jYWxsYmFjayB7CkBAIC05MDUsNyArOTExLDc3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbzJoYl9pbml0KHZvaWQpCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IG8yaGJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hcFtCSVRTX1RPX0xPTkdTKE8yTk1fTUFYX05PREVTKV07CisJY2hhciAqYnVmID0gTlVMTDsKKwlpbnQgaSA9IC0xOworCWludCBvdXQgPSAwOworCisJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIGJhaWw7CisKKwlvMmhiX2ZpbGxfbm9kZV9tYXAobWFwLCBzaXplb2YobWFwKSk7CisKKwl3aGlsZSAoKGkgPSBmaW5kX25leHRfYml0KG1hcCwgTzJOTV9NQVhfTk9ERVMsIGkgKyAxKSkgPCBPMk5NX01BWF9OT0RFUykKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgUEFHRV9TSVpFIC0gb3V0LCAiJWQgIiwgaSk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgUEFHRV9TSVpFIC0gb3V0LCAiXG4iKTsKKworCWlfc2l6ZV93cml0ZShpbm9kZSwgb3V0KTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKKworCXJldHVybiAwOworYmFpbDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBvMmhiX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbzJoYl9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBmaWxlLT5wcml2YXRlX2RhdGEsCisJCQkJICAgICAgIGlfc2l6ZV9yZWFkKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkpOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgbzJoYl9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGludCBvMmhiX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgc3NpemVfdCBvMmhiX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAwOworfQorI2VuZGlmICAvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbzJoYl9kZWJ1Z19mb3BzID0geworCS5vcGVuID0JCW8yaGJfZGVidWdfb3BlbiwKKwkucmVsZWFzZSA9CW8yaGJfZGVidWdfcmVsZWFzZSwKKwkucmVhZCA9CQlvMmhiX2RlYnVnX3JlYWQsCisJLmxsc2VlayA9CWdlbmVyaWNfZmlsZV9sbHNlZWssCit9OworCit2b2lkIG8yaGJfZXhpdCh2b2lkKQoreworCWlmIChvMmhiX2RlYnVnX2xpdmVub2RlcykKKwkJZGVidWdmc19yZW1vdmUobzJoYl9kZWJ1Z19saXZlbm9kZXMpOworCWlmIChvMmhiX2RlYnVnX2RpcikKKwkJZGVidWdmc19yZW1vdmUobzJoYl9kZWJ1Z19kaXIpOworfQorCitpbnQgbzJoYl9pbml0KHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTkxOCw2ICs5OTQsMjQgQEAKIAlJTklUX0xJU1RfSEVBRCgmbzJoYl9ub2RlX2V2ZW50cyk7CiAKIAltZW1zZXQobzJoYl9saXZlX25vZGVfYml0bWFwLCAwLCBzaXplb2YobzJoYl9saXZlX25vZGVfYml0bWFwKSk7CisKKwlvMmhiX2RlYnVnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihPMkhCX0RFQlVHX0RJUiwgTlVMTCk7CisJaWYgKCFvMmhiX2RlYnVnX2RpcikgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlvMmhiX2RlYnVnX2xpdmVub2RlcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoTzJIQl9ERUJVR19MSVZFTk9ERVMsCisJCQkJCQkgICBTX0lGUkVHfFNfSVJVU1IsCisJCQkJCQkgICBvMmhiX2RlYnVnX2RpciwgTlVMTCwKKwkJCQkJCSAgICZvMmhiX2RlYnVnX2ZvcHMpOworCWlmICghbzJoYl9kZWJ1Z19saXZlbm9kZXMpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJZGVidWdmc19yZW1vdmUobzJoYl9kZWJ1Z19kaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyogaWYgd2UncmUgYWxyZWFkeSBpbiBhIGNhbGxiYWNrIHRoZW4gd2UncmUgYWxyZWFkeSBzZXJpYWxpemVkIGJ5IHRoZSBzZW0gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmggYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5oCmluZGV4IGU1MTEzMzkuLjJmMTY0OTIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmgKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuaApAQCAtNzUsNyArNzUsOCBAQAogCQkJICAgICAgc3RydWN0IG8yaGJfY2FsbGJhY2tfZnVuYyAqaGMpOwogdm9pZCBvMmhiX2ZpbGxfbm9kZV9tYXAodW5zaWduZWQgbG9uZyAqbWFwLAogCQkJdW5zaWduZWQgYnl0ZXMpOwotdm9pZCBvMmhiX2luaXQodm9pZCk7Cit2b2lkIG8yaGJfZXhpdCh2b2lkKTsKK2ludCBvMmhiX2luaXQodm9pZCk7CiBpbnQgbzJoYl9jaGVja19ub2RlX2hlYXJ0YmVhdGluZyh1OCBub2RlX251bSk7CiBpbnQgbzJoYl9jaGVja19ub2RlX2hlYXJ0YmVhdGluZ19mcm9tX2NhbGxiYWNrKHU4IG5vZGVfbnVtKTsKIGludCBvMmhiX2NoZWNrX2xvY2FsX25vZGVfaGVhcnRiZWF0aW5nKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCmluZGV4IDcwZThmYTkuLjdlZTYxODggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKQEAgLTg4MSw2ICs4ODEsNyBAQAogCW8yY2Jfc3lzX3NodXRkb3duKCk7CiAKIAlvMm5ldF9leGl0KCk7CisJbzJoYl9leGl0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfbzJubSh2b2lkKQpAQCAtODg5LDExICs4OTAsMTMgQEAKIAogCWNsdXN0ZXJfcHJpbnRfdmVyc2lvbigpOwogCi0JbzJoYl9pbml0KCk7CisJcmV0ID0gbzJoYl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBvMm5ldF9pbml0KCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X28yaGI7CiAKIAlyZXQgPSBvMm5ldF9yZWdpc3Rlcl9oYl9jYWxsYmFja3MoKTsKIAlpZiAocmV0KQpAQCAtOTE2LDYgKzkxOSw4IEBACiAJbzJuZXRfdW5yZWdpc3Rlcl9oYl9jYWxsYmFja3MoKTsKIG91dF9vMm5ldDoKIAlvMm5ldF9leGl0KCk7CitvdXRfbzJoYjoKKwlvMmhiX2V4aXQoKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmMgYi9mcy9vY2ZzMi9kaXIuYwppbmRleCBmMmM0MDk4Li5lNzExNjBjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuYworKysgYi9mcy9vY2ZzMi9kaXIuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAKICNkZWZpbmUgTUxPR19NQVNLX1BSRUZJWCBNTF9OQU1FSQogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgpAQCAtNTgsNiArNTksNyBAQAogI2luY2x1ZGUgIm5hbWVpLmgiCiAjaW5jbHVkZSAic3ViYWxsb2MuaCIKICNpbmNsdWRlICJzdXBlci5oIgorI2luY2x1ZGUgInN5c2ZpbGUuaCIKICNpbmNsdWRlICJ1cHRvZGF0ZS5oIgogCiAjaW5jbHVkZSAiYnVmZmVyX2hlYWRfaW8uaCIKQEAgLTcxLDExICs3Myw2IEBACiAJRFRfVU5LTk9XTiwgRFRfUkVHLCBEVF9ESVIsIERUX0NIUiwgRFRfQkxLLCBEVF9GSUZPLCBEVF9TT0NLLCBEVF9MTksKIH07CiAKLXN0YXRpYyBpbnQgb2NmczJfZXh0ZW5kX2RpcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgYmxvY2tzX3dhbnRlZCwKLQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZGVfYmgpOwogc3RhdGljIGludCBvY2ZzMl9kb19leHRlbmRfZGlyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKQEAgLTgzLDIyICs4MCwzNiBAQAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAogCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19iaCk7CitzdGF0aWMgaW50IG9jZnMyX2Rpcl9pbmRleGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKgogICogVGhlc2UgYXJlIGRpc3RpbmN0IGNoZWNrcyBiZWNhdXNlIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgZmlsZSBzeXN0ZW0gd2lsbAogICogd2FudCB0byBoYXZlIGEgdHJhaWxpbmcgZGlyZW50IHN0cnVjdHVyZSBpbmRlcGVuZGVudCBvZiBpbmRleGluZy4KICAqLwotc3RhdGljIGludCBvY2ZzMl9kaXJfaGFzX3RyYWlsZXIoc3RydWN0IGlub2RlICpkaXIpCitzdGF0aWMgaW50IG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKHN0cnVjdCBpbm9kZSAqZGlyKQogeworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBvY2ZzMl9tZXRhX2VjYyhPQ0ZTMl9TQihkaXItPmlfc2IpKTsKKwlyZXR1cm4gb2NmczJfbWV0YV9lY2Mob3NiKSB8fCBvY2ZzMl9kaXJfaW5kZXhlZChkaXIpOwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQorLyoKKyAqICJuZXcnIGhlcmUgcmVmZXJzIHRvIHRoZSBwb2ludCBhdCB3aGljaCB3ZSdyZSBjcmVhdGluZyBhIG5ldworICogZGlyZWN0b3J5IHZpYSAibWtkaXIoKSIsIGJ1dCBhbHNvIHdoZW4gd2UncmUgZXhwYW5kaW5nIGFuIGlubGluZQorICogZGlyZWN0b3J5LiBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3QgeWV0IGhhdmUgdGhlIGluZGV4aW5nIGJpdCBzZXQKKyAqIG9uIHRoZSBkaXJlY3RvcnksIHNvIHRoZSBzdGFuZGFyZCBjaGVja3Mgd2lsbCBmYWlsIGluIHdoZW4gbWV0YWVjYworICogaXMgdHVybmVkIG9mZi4gT25seSBkaXJlY3RvcnktaW5pdGlhbGl6YXRpb24gdHlwZSBmdW5jdGlvbnMgc2hvdWxkCisgKiB1c2UgdGhpcyB0aGVuLiBFdmVyeXRoaW5nIGVsc2Ugd2FudHMgb2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoKQorICovCitzdGF0aWMgaW50IG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKLQlyZXR1cm4gb2NmczJfbWV0YV9lY2Mob3NiKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisKKwlyZXR1cm4gb2NmczJfbWV0YV9lY2Mob3NiKSB8fAorCQlvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMTMwLDcgKzE0MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0b2ZmID0gYmxrbGVuIC0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlcik7CiAKLQlpZiAoIW9jZnMyX2Rpcl9oYXNfdHJhaWxlcihkaXIpKQorCWlmICghb2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoZGlyKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAob2Zmc2V0ICE9IHRvZmYpCkBAIC0xNDAsNyArMTUxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgb2NmczJfaW5pdF9kaXJfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgdTE2IHJlY19sZW4pCiB7CiAJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOwogCkBAIC0xNTAsNiArMTYxLDE1MyBAQAogCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlcikpOwogCXRyYWlsZXItPmRiX3BhcmVudF9kaW5vZGUgPSBjcHVfdG9fbGU2NChPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pOwogCXRyYWlsZXItPmRiX2Jsa25vID0gY3B1X3RvX2xlNjQoYmgtPmJfYmxvY2tucik7CisJdHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuID0gY3B1X3RvX2xlMTYocmVjX2xlbik7Cit9CisvKgorICogTGluayBhbiB1bmluZGV4ZWQgYmxvY2sgd2l0aCBhIGRpciB0cmFpbGVyIHN0cnVjdHVyZSBpbnRvIHRoZSBpbmRleCBmcmVlCisgKiBsaXN0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgbW9kaWZ5IGRpcmRhdGFfYmgsIGJ1dCBhc3N1bWVzIHlvdSd2ZSBhbHJlYWR5CisgKiBwYXNzZWQgaXQgdG8gdGhlIGpvdXJuYWwuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2xpbmtfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgoZGlyZGF0YV9iaCwgZGlyLT5pX3NiKTsKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJdHJhaWxlci0+ZGJfZnJlZV9uZXh0ID0gZHhfcm9vdC0+ZHJfZnJlZV9ibGs7CisJZHhfcm9vdC0+ZHJfZnJlZV9ibGsgPSBjcHVfdG9fbGU2NChkaXJkYXRhX2JoLT5iX2Jsb2NrbnIpOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9mcmVlX2xpc3RfYXRfcm9vdChzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcykKK3sKKwlyZXR1cm4gcmVzLT5kbF9wcmV2X2xlYWZfYmggPT0gTlVMTDsKK30KKwordm9pZCBvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKQoreworCWJyZWxzZShyZXMtPmRsX2R4X3Jvb3RfYmgpOworCWJyZWxzZShyZXMtPmRsX2xlYWZfYmgpOworCWJyZWxzZShyZXMtPmRsX2R4X2xlYWZfYmgpOworCWJyZWxzZShyZXMtPmRsX3ByZXZfbGVhZl9iaCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGlyX2luZGV4ZWQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOREVYRURfRElSX0ZMKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZHhfcm9vdF9pbmxpbmUoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QpCit7CisJcmV0dXJuIGR4X3Jvb3QtPmRyX2ZsYWdzICYgT0NGUzJfRFhfRkxBR19JTkxJTkU7Cit9CisKKy8qCisgKiBIYXNoaW5nIGNvZGUgYWRhcHRlZCBmcm9tIGV4dDMKKyAqLworI2RlZmluZSBERUxUQSAweDlFMzc3OUI5CisKK3N0YXRpYyB2b2lkIFRFQV90cmFuc2Zvcm0oX191MzIgYnVmWzRdLCBfX3UzMiBjb25zdCBpbltdKQoreworCV9fdTMyCXN1bSA9IDA7CisJX191MzIJYjAgPSBidWZbMF0sIGIxID0gYnVmWzFdOworCV9fdTMyCWEgPSBpblswXSwgYiA9IGluWzFdLCBjID0gaW5bMl0sIGQgPSBpblszXTsKKwlpbnQJbiA9IDE2OworCisJZG8geworCQlzdW0gKz0gREVMVEE7CisJCWIwICs9ICgoYjEgPDwgNCkrYSkgXiAoYjErc3VtKSBeICgoYjEgPj4gNSkrYik7CisJCWIxICs9ICgoYjAgPDwgNCkrYykgXiAoYjArc3VtKSBeICgoYjAgPj4gNSkrZCk7CisJfSB3aGlsZSAoLS1uKTsKKworCWJ1ZlswXSArPSBiMDsKKwlidWZbMV0gKz0gYjE7Cit9CisKK3N0YXRpYyB2b2lkIHN0cjJoYXNoYnVmKGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbiwgX191MzIgKmJ1ZiwgaW50IG51bSkKK3sKKwlfX3UzMglwYWQsIHZhbDsKKwlpbnQJaTsKKworCXBhZCA9IChfX3UzMilsZW4gfCAoKF9fdTMyKWxlbiA8PCA4KTsKKwlwYWQgfD0gcGFkIDw8IDE2OworCisJdmFsID0gcGFkOworCWlmIChsZW4gPiBudW0qNCkKKwkJbGVuID0gbnVtICogNDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKChpICUgNCkgPT0gMCkKKwkJCXZhbCA9IHBhZDsKKwkJdmFsID0gbXNnW2ldICsgKHZhbCA8PCA4KTsKKwkJaWYgKChpICUgNCkgPT0gMykgeworCQkJKmJ1ZisrID0gdmFsOworCQkJdmFsID0gcGFkOworCQkJbnVtLS07CisJCX0KKwl9CisJaWYgKC0tbnVtID49IDApCisJCSpidWYrKyA9IHZhbDsKKwl3aGlsZSAoLS1udW0gPj0gMCkKKwkJKmJ1ZisrID0gcGFkOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8pCit7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCWNvbnN0IGNoYXIJKnA7CisJX191MzIJCWluWzhdLCBidWZbNF07CisKKwkvKgorCSAqIFhYWDogSXMgdGhpcyByZWFsbHkgbmVjZXNzYXJ5LCBpZiB0aGUgaW5kZXggaXMgbmV2ZXIgbG9va2VkCisJICogYXQgYnkgcmVhZGRpcj8gSXMgYSBoYXNoIHZhbHVlIG9mICcwJyBhIGJhZCBpZGVhPworCSAqLworCWlmICgobGVuID09IDEgJiYgIXN0cm5jbXAoIi4iLCBuYW1lLCAxKSkgfHwKKwkgICAgKGxlbiA9PSAyICYmICFzdHJuY21wKCIuLiIsIG5hbWUsIDIpKSkgeworCQlidWZbMF0gPSBidWZbMV0gPSAwOworCQlnb3RvIG91dDsKKwl9CisKKyNpZmRlZiBPQ0ZTMl9ERUJVR19EWF9ESVJTCisJLyoKKwkgKiBUaGlzIG1ha2VzIGl0IHZlcnkgZWFzeSB0byBkZWJ1ZyBpbmRleGluZyBwcm9ibGVtcy4gV2UKKwkgKiBzaG91bGQgbmV2ZXIgYWxsb3cgdGhpcyB0byBiZSBzZWxlY3RlZCB3aXRob3V0IGhhbmQgZWRpdGluZworCSAqIHRoaXMgZmlsZSB0aG91Z2guCisJICovCisJYnVmWzBdID0gYnVmWzFdID0gbGVuOworCWdvdG8gb3V0OworI2VuZGlmCisKKwltZW1jcHkoYnVmLCBvc2ItPm9zYl9keF9zZWVkLCBzaXplb2YoYnVmKSk7CisKKwlwID0gbmFtZTsKKwl3aGlsZSAobGVuID4gMCkgeworCQlzdHIyaGFzaGJ1ZihwLCBsZW4sIGluLCA0KTsKKwkJVEVBX3RyYW5zZm9ybShidWYsIGluKTsKKwkJbGVuIC09IDE2OworCQlwICs9IDE2OworCX0KKworb3V0OgorCWhpbmZvLT5tYWpvcl9oYXNoID0gYnVmWzBdOworCWhpbmZvLT5taW5vcl9oYXNoID0gYnVmWzFdOwogfQogCiAvKgpAQCAtMzEyLDYgKzQ3MCw1MiBAQAogfQogCiAvKgorICogVmFsaWRhdGUgYSBkaXJlY3RvcnkgdHJhaWxlci4KKyAqCisgKiBXZSBjaGVjayB0aGUgdHJhaWxlciBoZXJlIHJhdGhlciB0aGFuIGluIG9jZnMyX3ZhbGlkYXRlX2Rpcl9ibG9jaygpCisgKiBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRoZSBpbm9kZSB0byB0ZXN0LgorICovCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX2Rpcl90cmFpbGVyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCWludCByYyA9IDA7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOworCisJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChiaCwgZGlyLT5pX3NiKTsKKwlpZiAoIU9DRlMyX0lTX1ZBTElEX0RJUl9UUkFJTEVSKHRyYWlsZXIpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJb2NmczJfZXJyb3IoZGlyLT5pX3NiLAorCQkJICAgICJJbnZhbGlkIGRpcmJsb2NrICMlbGx1OiAiCisJCQkgICAgInNpZ25hdHVyZSA9ICUuKnNcbiIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLCA3LAorCQkJICAgIHRyYWlsZXItPmRiX3NpZ25hdHVyZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pICE9IGJoLT5iX2Jsb2NrbnIpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlvY2ZzMl9lcnJvcihkaXItPmlfc2IsCisJCQkgICAgIkRpcmVjdG9yeSBibG9jayAjJWxsdSBoYXMgYW4gaW52YWxpZCAiCisJCQkgICAgImRiX2Jsa25vIG9mICVsbHUiLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobGU2NF90b19jcHUodHJhaWxlci0+ZGJfcGFyZW50X2Rpbm9kZSkgIT0KKwkgICAgT0NGUzJfSShkaXIpLT5pcF9ibGtubykgeworCQlyYyA9IC1FSU5WQUw7CisJCW9jZnMyX2Vycm9yKGRpci0+aV9zYiwKKwkJCSAgICAiRGlyZWN0b3J5IGJsb2NrICMlbGx1IG9uIGRpbm9kZSAiCisJCQkgICAgIiMlbGx1IGhhcyBhbiBpbnZhbGlkIHBhcmVudF9kaW5vZGUgIgorCQkJICAgICJvZiAlbGx1IiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pKTsKKwkJZ290byBvdXQ7CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKworLyoKICAqIFRoaXMgZnVuY3Rpb24gZm9yY2VzIGFsbCBlcnJvcnMgdG8gLUVJTyBmb3IgY29uc2lzdGVuY3kgd2l0aCBpdHMKICAqIHByZWRlY2Vzc29yLCBvY2ZzMl9icmVhZCgpLiAgV2UgaGF2ZW4ndCBhdWRpdGVkIHdoYXQgcmV0dXJuaW5nIHRoZQogICogcmVhbCBlcnJvciBjb2RlcyB3b3VsZCBkbyB0byBjYWxsZXJzLiAgV2UgbG9nIHRoZSByZWFsIGNvZGVzIHdpdGgKQEAgLTMyMiw3ICs1MjYsNiBAQAogewogCWludCByYyA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOwogCiAJcmMgPSBvY2ZzMl9yZWFkX3ZpcnRfYmxvY2tzKGlub2RlLCB2X2Jsb2NrLCAxLCAmdG1wLCBmbGFncywKIAkJCQkgICAgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKQEAgLTMzMSw0MiArNTM0LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qCi0JICogV2UgY2hlY2sgdGhlIHRyYWlsZXIgaGVyZSByYXRoZXIgdGhhbiBpbgotCSAqIG9jZnMyX3ZhbGlkYXRlX2Rpcl9ibG9jaygpIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBkb2Vzbid0IGhhdmUKLQkgKiB0aGUgaW5vZGUgdG8gdGVzdC4KLQkgKi8KIAlpZiAoIShmbGFncyAmIE9DRlMyX0JIX1JFQURBSEVBRCkgJiYKLQkgICAgb2NmczJfZGlyX2hhc190cmFpbGVyKGlub2RlKSkgewotCQl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKHRtcCwgaW5vZGUtPmlfc2IpOwotCQlpZiAoIU9DRlMyX0lTX1ZBTElEX0RJUl9UUkFJTEVSKHRyYWlsZXIpKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICAgIkludmFsaWQgZGlyYmxvY2sgIyVsbHU6ICIKLQkJCQkgICAgInNpZ25hdHVyZSA9ICUuKnNcbiIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wLT5iX2Jsb2NrbnIsIDcsCi0JCQkJICAgIHRyYWlsZXItPmRiX3NpZ25hdHVyZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pICE9IHRtcC0+Yl9ibG9ja25yKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICAgIkRpcmVjdG9yeSBibG9jayAjJWxsdSBoYXMgYW4gaW52YWxpZCAiCi0JCQkJICAgICJkYl9ibGtubyBvZiAlbGx1IiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXAtPmJfYmxvY2tuciwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX3BhcmVudF9kaW5vZGUpICE9Ci0JCSAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8pIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAotCQkJCSAgICAiRGlyZWN0b3J5IGJsb2NrICMlbGx1IG9uIGRpbm9kZSAiCi0JCQkJICAgICIjJWxsdSBoYXMgYW4gaW52YWxpZCBwYXJlbnRfZGlub2RlICIKLQkJCQkgICAgIm9mICVsbHUiLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXRtcC0+Yl9ibG9ja25yLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykpOworCSAgICBvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihpbm9kZSkpIHsKKwkJcmMgPSBvY2ZzMl9jaGVja19kaXJfdHJhaWxlcihpbm9kZSwgdG1wKTsKKwkJaWYgKHJjKSB7CisJCQlpZiAoISpiaCkKKwkJCQlicmVsc2UodG1wKTsKKwkJCW1sb2dfZXJybm8ocmMpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CkBAIC0zNzksNiArNTUzLDE0MSBAQAogCXJldHVybiByYyA/IC1FSU8gOiAwOwogfQogCisvKgorICogUmVhZCB0aGUgYmxvY2sgYXQgJ3BoeXMnIHdoaWNoIGJlbG9uZ3MgdG8gdGhpcyBkaXJlY3RvcnkKKyAqIGlub2RlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm8gdmlydHVhbC0+cGh5c2ljYWwgYmxvY2sgdHJhbnNsYXRpb24gLQorICogd2hhdCdzIHBhc3NlZCBpbiBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQgZGlyZWN0b3J5IGJsb2NrLgorICovCitzdGF0aWMgaW50IG9jZnMyX3JlYWRfZGlyX2Jsb2NrX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmRpciwgdTY0IHBoeXMsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqYmg7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgcGh5cywgJnRtcCwgb2NmczJfdmFsaWRhdGVfZGlyX2Jsb2NrKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKGRpcikpIHsKKwkJcmV0ID0gb2NmczJfY2hlY2tfZGlyX3RyYWlsZXIoZGlyLCB0bXApOworCQlpZiAocmV0KSB7CisJCQlpZiAoISpiaCkKKwkJCQlicmVsc2UodG1wKTsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKCFyZXQgJiYgISpiaCkKKwkJKmJoID0gdG1wOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfdmFsaWRhdGVfZHhfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCisJQlVHX09OKCFidWZmZXJfdXB0b2RhdGUoYmgpKTsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKikgYmgtPmJfZGF0YTsKKworCXJldCA9IG9jZnMyX3ZhbGlkYXRlX21ldGFfZWNjKHNiLCBiaC0+Yl9kYXRhLCAmZHhfcm9vdC0+ZHJfY2hlY2spOworCWlmIChyZXQpIHsKKwkJbWxvZyhNTF9FUlJPUiwKKwkJICAgICAiQ2hlY2tzdW0gZmFpbGVkIGZvciBkaXIgaW5kZXggcm9vdCBibG9jayAlbGx1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFPQ0ZTMl9JU19WQUxJRF9EWF9ST09UKGR4X3Jvb3QpKSB7CisJCW9jZnMyX2Vycm9yKHNiLAorCQkJICAgICJEaXIgSW5kZXggUm9vdCAjICVsbHUgaGFzIGJhZCBzaWduYXR1cmUgJS4qcyIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShkeF9yb290LT5kcl9ibGtubyksCisJCQkgICAgNywgZHhfcm9vdC0+ZHJfc2lnbmF0dXJlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9keF9yb290KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwKKwkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X3Jvb3RfYmgpCit7CisJaW50IHJldDsKKwl1NjQgYmxrbm8gPSBsZTY0X3RvX2NwdShkaS0+aV9keF9yb290KTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCA9ICpkeF9yb290X2JoOworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhkaXIsIGJsa25vLCAmdG1wLCBvY2ZzMl92YWxpZGF0ZV9keF9yb290KTsKKworCS8qIElmIG9jZnMyX3JlYWRfYmxvY2soKSBnb3QgdXMgYSBuZXcgYmgsIHBhc3MgaXQgdXAuICovCisJaWYgKCFyZXQgJiYgISpkeF9yb290X2JoKQorCQkqZHhfcm9vdF9iaCA9IHRtcDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfdmFsaWRhdGVfZHhfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopYmgtPmJfZGF0YTsKKworCUJVR19PTighYnVmZmVyX3VwdG9kYXRlKGJoKSk7CisKKwlyZXQgPSBvY2ZzMl92YWxpZGF0ZV9tZXRhX2VjYyhzYiwgYmgtPmJfZGF0YSwgJmR4X2xlYWYtPmRsX2NoZWNrKTsKKwlpZiAocmV0KSB7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgIkNoZWNrc3VtIGZhaWxlZCBmb3IgZGlyIGluZGV4IGxlYWYgYmxvY2sgJWxsdVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghT0NGUzJfSVNfVkFMSURfRFhfTEVBRihkeF9sZWFmKSkgeworCQlvY2ZzMl9lcnJvcihzYiwgIkRpciBJbmRleCBMZWFmIGhhcyBiYWQgc2lnbmF0dXJlICUuKnMiLAorCQkJICAgIDcsIGR4X2xlYWYtPmRsX3NpZ25hdHVyZSk7CisJCXJldHVybiAtRVJPRlM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9keF9sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLCB1NjQgYmxrbm8sCisJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWFmX2JoKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqZHhfbGVhZl9iaDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soZGlyLCBibGtubywgJnRtcCwgb2NmczJfdmFsaWRhdGVfZHhfbGVhZik7CisKKwkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLworCWlmICghcmV0ICYmICEqZHhfbGVhZl9iaCkKKwkJKmR4X2xlYWZfYmggPSB0bXA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmVhZCBhIHNlcmllcyBvZiBkeF9sZWFmIGJsb2Nrcy4gVGhpcyBleHBlY3RzIGFsbCBidWZmZXJfaGVhZAorICogcG9pbnRlcnMgdG8gYmUgTlVMTCBvbiBmdW5jdGlvbiBlbnRyeS4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWFkX2R4X2xlYXZlcyhzdHJ1Y3QgaW5vZGUgKmRpciwgdTY0IHN0YXJ0LCBpbnQgbnVtLAorCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYWZfYmhzKQoreworCWludCByZXQ7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrcyhkaXIsIHN0YXJ0LCBudW0sIGR4X2xlYWZfYmhzLCAwLAorCQkJCW9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9jZnMyX2ZpbmRfZW50cnlfZWwoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCiAJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipyZXNfZGlyKQpAQCAtNDgwLDM5ICs3ODksMzQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9keF9kaXJfbG9va3VwX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkJICAgdTMyIG1ham9yX2hhc2gsCisJCQkJICAgdTMyICpyZXRfY3BvcywKKwkJCQkgICB1NjQgKnJldF9waHlzX2Jsa25vLAorCQkJCSAgIHVuc2lnbmVkIGludCAqcmV0X2NsZW4pCit7CisJaW50IHJldCA9IDAsIGksIGZvdW5kOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZWJfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfYmxvY2sgKmViOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjICpyZWMgPSBOVUxMOworCisJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKKwkJcmV0ID0gb2NmczJfZmluZF9sZWFmKGlub2RlLCBlbCwgbWFqb3JfaGFzaCwgJmViX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQllYiA9IChzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICopIGViX2JoLT5iX2RhdGE7CisJCWVsID0gJmViLT5oX2xpc3Q7CisKKwkJaWYgKGVsLT5sX3RyZWVfZGVwdGgpIHsKKwkJCW9jZnMyX2Vycm9yKGlub2RlLT5pX3NiLAorCQkJCSAgICAiSW5vZGUgJWx1IGhhcyBub24gemVybyB0cmVlIGRlcHRoIGluICIKKwkJCQkgICAgImJ0cmVlIHRyZWUgYmxvY2sgJWxsdVxuIiwgaW5vZGUtPmlfaW5vLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWViX2JoLT5iX2Jsb2NrbnIpOworCQkJcmV0ID0gLUVST0ZTOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlmb3VuZCA9IDA7CisJZm9yIChpID0gbGUxNl90b19jcHUoZWwtPmxfbmV4dF9mcmVlX3JlYykgLSAxOyBpID49IDA7IGktLSkgeworCQlyZWMgPSAmZWwtPmxfcmVjc1tpXTsKKworCQlpZiAobGUzMl90b19jcHUocmVjLT5lX2Nwb3MpIDw9IG1ham9yX2hhc2gpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwgIklub2RlICVsdSBoYXMgYmFkIGV4dGVudCAiCisJCQkgICAgInJlY29yZCAoJXUsICV1LCAwKSBpbiBidHJlZSIsIGlub2RlLT5pX2lubywKKwkJCSAgICBsZTMyX3RvX2NwdShyZWMtPmVfY3BvcyksCisJCQkgICAgb2NmczJfcmVjX2NsdXN0ZXJzKGVsLCByZWMpKTsKKwkJcmV0ID0gLUVST0ZTOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmV0X3BoeXNfYmxrbm8pCisJCSpyZXRfcGh5c19ibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyk7CisJaWYgKHJldF9jcG9zKQorCQkqcmV0X2Nwb3MgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CisJaWYgKHJldF9jbGVuKQorCQkqcmV0X2NsZW4gPSBsZTE2X3RvX2NwdShyZWMtPmVfbGVhZl9jbHVzdGVycyk7CisKK291dDoKKwlicmVsc2UoZWJfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBibG9jayBpbmRleCwgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGNsdXN0ZXIgd2hpY2ggdGhpcworICogaGFzaCBiZWxvbmdzIHRvby4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19vY2ZzMl9keF9kaXJfaGFzaF9pZHgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCQkgICB1MzIgbWlub3JfaGFzaCkKK3sKKwlyZXR1cm4gbWlub3JfaGFzaCAmIG9zYi0+b3NiX2R4X21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9jZnMyX2R4X2Rpcl9oYXNoX2lkeChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvKQoreworCXJldHVybiBfX29jZnMyX2R4X2Rpcl9oYXNoX2lkeChvc2IsIGhpbmZvLT5taW5vcl9oYXNoKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfbG9va3VwKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvLAorCQkJICAgICAgIHUzMiAqcmV0X2Nwb3MsCisJCQkgICAgICAgdTY0ICpyZXRfcGh5c19ibGtubykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY2VuZCwgdW5pbml0aWFsaXplZF92YXIoY2xlbik7CisJdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGNwb3MpOworCXU2NCB1bmluaXRpYWxpemVkX3ZhcihibGtubyk7CisJdTMyIG5hbWVfaGFzaCA9IGhpbmZvLT5tYWpvcl9oYXNoOworCisJcmV0ID0gb2NmczJfZHhfZGlyX2xvb2t1cF9yZWMoaW5vZGUsIGVsLCBuYW1lX2hhc2gsICZjcG9zLCAmYmxrbm8sCisJCQkJICAgICAgJmNsZW4pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwljZW5kID0gY3BvcyArIGNsZW47CisJaWYgKG5hbWVfaGFzaCA+PSBjZW5kKSB7CisJCS8qIFdlIHdhbnQgdGhlIGxhc3QgY2x1c3RlciAqLworCQlibGtubyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsIGNsZW4gLSAxKTsKKwkJY3BvcyArPSBjbGVuIC0gMTsKKwl9IGVsc2UgeworCQlibGtubyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoaW5vZGUtPmlfc2IsCisJCQkJCQkgIG5hbWVfaGFzaCAtIGNwb3MpOworCQljcG9zID0gbmFtZV9oYXNoOworCX0KKworCS8qCisJICogV2Ugbm93IGhhdmUgdGhlIGNsdXN0ZXIgd2hpY2ggc2hvdWxkIGhvbGQgb3VyIGVudHJ5LiBUbworCSAqIGZpbmQgdGhlIGV4YWN0IGJsb2NrIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjbHVzdGVyIHRvCisJICogc2VhcmNoLCB3ZSB0YWtlIHRoZSBsb3dlciBiaXRzIG9mIHRoZSBoYXNoLgorCSAqLworCWJsa25vICs9IG9jZnMyX2R4X2Rpcl9oYXNoX2lkeChPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIGhpbmZvKTsKKworCWlmIChyZXRfcGh5c19ibGtubykKKwkJKnJldF9waHlzX2Jsa25vID0gYmxrbm87CisJaWYgKHJldF9jcG9zKQorCQkqcmV0X2Nwb3MgPSBjcG9zOworCitvdXQ6CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9zZWFyY2goY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpCit7CisJaW50IHJldCwgaSwgZm91bmQ7CisJdTY0IHVuaW5pdGlhbGl6ZWRfdmFyKHBoeXMpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9lbnRyeSA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfZW50X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkaXJfZW50ID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvID0gJnJlcy0+ZGxfaGluZm87CisJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpkcl9lbDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdDsKKworCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goZGlyLCBuYW1lLCBuYW1lbGVuLCAmcmVzLT5kbF9oaW5mbyk7CisKKwlpZiAob2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpIHsKKwkJZW50cnlfbGlzdCA9ICZkeF9yb290LT5kcl9lbnRyaWVzOworCQlnb3RvIHNlYXJjaDsKKwl9CisKKwlkcl9lbCA9ICZkeF9yb290LT5kcl9saXN0OworCisJcmV0ID0gb2NmczJfZHhfZGlyX2xvb2t1cChkaXIsIGRyX2VsLCBoaW5mbywgTlVMTCwgJnBoeXMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltbG9nKDAsICJEaXIgJWxsdTogbmFtZTogXCIlLipzXCIsIGxvb2t1cCBvZiBoYXNoOiAldS4weCV4ICIKKwkgICAgICJyZXR1cm5zOiAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCSAgICAgbmFtZWxlbiwgbmFtZSwgaGluZm8tPm1ham9yX2hhc2gsIGhpbmZvLT5taW5vcl9oYXNoLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwaHlzKTsKKworCXJldCA9IG9jZnMyX3JlYWRfZHhfbGVhZihkaXIsIHBoeXMsICZkeF9sZWFmX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKSBkeF9sZWFmX2JoLT5iX2RhdGE7CisKKwltbG9nKDAsICJsZWFmIGluZm86IG51bV91c2VkOiAlZCwgY291bnQ6ICVkXG4iLAorCSAgICAgbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9udW1fdXNlZCksCisJICAgICBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX2NvdW50KSk7CisKKwllbnRyeV9saXN0ID0gJmR4X2xlYWYtPmRsX2xpc3Q7CisKK3NlYXJjaDoKKwkvKgorCSAqIEVtcHR5IGxlYWYgaXMgbGVnYWwsIHNvIG5vIG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQuCisJICovCisJZm91bmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCk7IGkrKykgeworCQlkeF9lbnRyeSA9ICZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW2ldOworCisJCWlmIChoaW5mby0+bWFqb3JfaGFzaCAhPSBsZTMyX3RvX2NwdShkeF9lbnRyeS0+ZHhfbWFqb3JfaGFzaCkKKwkJICAgIHx8IGhpbmZvLT5taW5vcl9oYXNoICE9IGxlMzJfdG9fY3B1KGR4X2VudHJ5LT5keF9taW5vcl9oYXNoKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNlYXJjaCB1bmluZGV4ZWQgbGVhZiBibG9jayBub3cuIFdlJ3JlIG5vdAorCQkgKiBndWFyYW50ZWVkIHRvIGZpbmQgYW55dGhpbmcuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9yZWFkX2Rpcl9ibG9ja19kaXJlY3QoZGlyLAorCQkJCQkgIGxlNjRfdG9fY3B1KGR4X2VudHJ5LT5keF9kaXJlbnRfYmxrKSwKKwkJCQkJICAmZGlyX2VudF9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogWFhYOiBXZSBzaG91bGQgY2hlY2sgdGhlIHVuaW5kZXhlZCBibG9jayBoZXJlLAorCQkgKiBiZWZvcmUgdXNpbmcgaXQuCisJCSAqLworCisJCWZvdW5kID0gb2NmczJfc2VhcmNoX2RpcmJsb2NrKGRpcl9lbnRfYmgsIGRpciwgbmFtZSwgbmFtZWxlbiwKKwkJCQkJICAgICAgMCwgZGlyX2VudF9iaC0+Yl9kYXRhLAorCQkJCQkgICAgICBkaXItPmlfc2ItPnNfYmxvY2tzaXplLCAmZGlyX2VudCk7CisJCWlmIChmb3VuZCA9PSAxKQorCQkJYnJlYWs7CisKKwkJaWYgKGZvdW5kID09IC0xKSB7CisJCQkvKiBUaGlzIG1lYW5zIHdlIGZvdW5kIGEgYmFkIGRpcmVjdG9yeSBlbnRyeS4gKi8KKwkJCXJldCA9IC1FSU87CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWJyZWxzZShkaXJfZW50X2JoKTsKKwkJZGlyX2VudF9iaCA9IE5VTEw7CisJfQorCisJaWYgKGZvdW5kIDw9IDApIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJcmVzLT5kbF9sZWFmX2JoID0gZGlyX2VudF9iaDsKKwlyZXMtPmRsX2VudHJ5ID0gZGlyX2VudDsKKwlyZXMtPmRsX2R4X2xlYWZfYmggPSBkeF9sZWFmX2JoOworCXJlcy0+ZGxfZHhfZW50cnkgPSBkeF9lbnRyeTsKKworCXJldCA9IDA7CitvdXQ6CisJaWYgKHJldCkgeworCQlicmVsc2UoZHhfbGVhZl9iaCk7CisJCWJyZWxzZShkaXJfZW50X2JoKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9maW5kX2VudHJ5X2R4KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKworCXJldCA9IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soZGlyLCAmZGlfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCXJldCA9IG9jZnMyX3JlYWRfZHhfcm9vdChkaXIsIGRpLCAmZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopIGR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCXJldCA9IG9jZnMyX2R4X2Rpcl9zZWFyY2gobmFtZSwgbmFtZWxlbiwgZGlyLCBkeF9yb290LCBsb29rdXApOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSAtRU5PRU5UKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlsb29rdXAtPmRsX2R4X3Jvb3RfYmggPSBkeF9yb290X2JoOworCWR4X3Jvb3RfYmggPSBOVUxMOworb3V0OgorCWJyZWxzZShkaV9iaCk7CisJYnJlbHNlKGR4X3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBUcnkgdG8gZmluZCBhbiBlbnRyeSBvZiB0aGUgcHJvdmlkZWQgbmFtZSB3aXRoaW4gJ2RpcicuCiAgKgotICogSWYgbm90aGluZyB3YXMgZm91bmQsIE5VTEwgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBidWZmZXJfaGVhZAotICogYW5kIHBvaW50ZXIgdG8gdGhlIGRpciBlbnRyeSBhcmUgcGFzc2VkIGJhY2suCisgKiBJZiBub3RoaW5nIHdhcyBmb3VuZCwgLUVOT0VOVCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCB6ZXJvIGlzCisgKiByZXR1cm5lZCBhbmQgdGhlIHN0cnVjdCAncmVzJyB3aWxsIGNvbnRhaW4gaW5mb3JtYXRpb24gdXNlZnVsIHRvCisgKiBvdGhlciBkaXJlY3RvcnkgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4KICAqCiAgKiBDYWxsZXIgY2FuIE5PVCBhc3N1bWUgYW55dGhpbmcgYWJvdXQgdGhlIGNvbnRlbnRzIG9mIHRoZQotICogYnVmZmVyX2hlYWQgLSBpdCBpcyBwYXNzZWQgYmFjayBvbmx5IHNvIHRoYXQgaXQgY2FuIGJlIHBhc3NlZCBpbnRvCi0gKiBhbnkgb25lIG9mIHRoZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIChhZGQgZW50cnksIGRlbGV0ZSBlbnRyeSwKLSAqIGV0YykuIEFzIGFuIGV4YW1wbGUsIGJoIGluIHRoZSBleHRlbnQgZGlyZWN0b3J5IGNhc2UgaXMgYSBkYXRhCi0gKiBibG9jaywgaW4gdGhlIGlubGluZS1kYXRhIGNhc2UgaXQgYWN0dWFsbHkgcG9pbnRzIHRvIGFuIGlub2RlLgorICogYnVmZmVyX2hlYWRzIC0gdGhleSBhcmUgcGFzc2VkIGJhY2sgb25seSBzbyB0aGF0IGl0IGNhbiBiZSBwYXNzZWQKKyAqIGludG8gYW55IG9uZSBvZiB0aGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAoYWRkIGVudHJ5LCBkZWxldGUKKyAqIGVudHJ5LCBldGMpLiBBcyBhbiBleGFtcGxlLCBiaCBpbiB0aGUgZXh0ZW50IGRpcmVjdG9yeSBjYXNlIGlzIGEKKyAqIGRhdGEgYmxvY2ssIGluIHRoZSBpbmxpbmUtZGF0YSBjYXNlIGl0IGFjdHVhbGx5IHBvaW50cyB0byBhbiBpbm9kZSwKKyAqIGluIHRoZSBpbmRleGVkIGRpcmVjdG9yeSBjYXNlLCBtdWx0aXBsZSBidWZmZXJzIGFyZSBpbnZvbHZlZC4KICAqLwotc3RydWN0IGJ1ZmZlcl9oZWFkICpvY2ZzMl9maW5kX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICoqcmVzX2RpcikKK2ludCBvY2ZzMl9maW5kX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKIHsKLQkqcmVzX2RpciA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpyZXNfZGlyID0gTlVMTDsKIAorCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKQorCQlyZXR1cm4gb2NmczJfZmluZF9lbnRyeV9keChuYW1lLCBuYW1lbGVuLCBkaXIsIGxvb2t1cCk7CisKKwkvKgorCSAqIFRoZSB1bmluZGV4ZWQgZGlyIGNvZGUgb25seSB1c2VzIHBhcnQgb2YgdGhlIGxvb2t1cAorCSAqIHN0cnVjdHVyZSwgc28gdGhlcmUncyBubyByZWFzb24gdG8gcHVzaCBpdCBkb3duIGZ1cnRoZXIKKwkgKiB0aGFuIHRoaXMuCisJICovCiAJaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCi0JCXJldHVybiBvY2ZzMl9maW5kX2VudHJ5X2lkKG5hbWUsIG5hbWVsZW4sIGRpciwgcmVzX2Rpcik7CisJCWJoID0gb2NmczJfZmluZF9lbnRyeV9pZChuYW1lLCBuYW1lbGVuLCBkaXIsICZyZXNfZGlyKTsKKwllbHNlCisJCWJoID0gb2NmczJfZmluZF9lbnRyeV9lbChuYW1lLCBuYW1lbGVuLCBkaXIsICZyZXNfZGlyKTsKIAotCXJldHVybiBvY2ZzMl9maW5kX2VudHJ5X2VsKG5hbWUsIG5hbWVsZW4sIGRpciwgcmVzX2Rpcik7CisJaWYgKGJoID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJbG9va3VwLT5kbF9sZWFmX2JoID0gYmg7CisJbG9va3VwLT5kbF9lbnRyeSA9IHJlc19kaXI7CisJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBVcGRhdGUgaW5vZGUgbnVtYmVyIGFuZCB0eXBlIG9mIGEgcHJldmlvdXNseSBmb3VuZCBkaXJlY3RvcnkgZW50cnkuCiAgKi8KIGludCBvY2ZzMl91cGRhdGVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoLCBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZSwKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzLAogCQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZW50cnlfaW5vZGUpCiB7CiAJaW50IHJldDsKIAlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jIGFjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiOworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlID0gcmVzLT5kbF9lbnRyeTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoID0gcmVzLT5kbF9sZWFmX2JoOwogCiAJLyoKIAkgKiBUaGUgc2FtZSBjb2RlIHdvcmtzIGZpbmUgZm9yIGJvdGggaW5saW5lLWRhdGEgYW5kIGV4dGVudApAQCAtNTM4LDYgKzExNDgsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogX19vY2ZzMl9kZWxldGVfZW50cnkgZGVsZXRlcyBhIGRpcmVjdG9yeSBlbnRyeSBieSBtZXJnaW5nIGl0IHdpdGggdGhlCisgKiBwcmV2aW91cyBlbnRyeQorICovCiBzdGF0aWMgaW50IF9fb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlX2RlbCwKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBjaGFyICpmaXJzdF9kZSwKQEAgLTU4Nyw2ICsxMjAxLDE4MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfZmlndXJlX2RpcmVudF9ob2xlKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlKQoreworCXVuc2lnbmVkIGludCBob2xlOworCisJaWYgKGxlNjRfdG9fY3B1KGRlLT5pbm9kZSkgPT0gMCkKKwkJaG9sZSA9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwllbHNlCisJCWhvbGUgPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikgLQorCQkJT0NGUzJfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKKworCXJldHVybiBob2xlOworfQorCitzdGF0aWMgaW50IG9jZnMyX2ZpbmRfbWF4X3JlY19sZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyYmxvY2tfYmgpCit7CisJaW50IHNpemUsIHRoaXNfaG9sZSwgbGFyZ2VzdF9ob2xlID0gMDsKKwljaGFyICp0cmFpbGVyLCAqZGVfYnVmLCAqbGltaXQsICpzdGFydCA9IGRpcmJsb2NrX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CisKKwl0cmFpbGVyID0gKGNoYXIgKilvY2ZzMl90cmFpbGVyX2Zyb21fYmgoZGlyYmxvY2tfYmgsIHNiKTsKKwlzaXplID0gb2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihzYik7CisJbGltaXQgPSBzdGFydCArIHNpemU7CisJZGVfYnVmID0gc3RhcnQ7CisJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKKwlkbyB7CisJCWlmIChkZV9idWYgIT0gdHJhaWxlcikgeworCQkJdGhpc19ob2xlID0gb2NmczJfZmlndXJlX2RpcmVudF9ob2xlKGRlKTsKKwkJCWlmICh0aGlzX2hvbGUgPiBsYXJnZXN0X2hvbGUpCisJCQkJbGFyZ2VzdF9ob2xlID0gdGhpc19ob2xlOworCQl9CisKKwkJZGVfYnVmICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKKwl9IHdoaWxlIChkZV9idWYgPCBsaW1pdCk7CisKKwlpZiAobGFyZ2VzdF9ob2xlID49IE9DRlMyX0RJUl9NSU5fUkVDX0xFTikKKwkJcmV0dXJuIGxhcmdlc3RfaG9sZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfbGlzdF9yZW1vdmVfZW50cnkoc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3QsCisJCQkJICAgICAgIGludCBpbmRleCkKK3sKKwlpbnQgbnVtX3VzZWQgPSBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCk7CisKKwlpZiAobnVtX3VzZWQgPT0gMSB8fCBpbmRleCA9PSAobnVtX3VzZWQgLSAxKSkKKwkJZ290byBjbGVhcjsKKworCW1lbW1vdmUoJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbaW5kZXhdLAorCQkmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tpbmRleCArIDFdLAorCQkobnVtX3VzZWQgLSBpbmRleCAtIDEpKnNpemVvZihzdHJ1Y3Qgb2NmczJfZHhfZW50cnkpKTsKK2NsZWFyOgorCW51bV91c2VkLS07CisJbWVtc2V0KCZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW251bV91c2VkXSwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9keF9lbnRyeSkpOworCWVudHJ5X2xpc3QtPmRlX251bV91c2VkID0gY3B1X3RvX2xlMTYobnVtX3VzZWQpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2RlbGV0ZV9lbnRyeV9keChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldCwgaW5kZXgsIG1heF9yZWNfbGVuLCBhZGRfdG9fZnJlZV9saXN0ID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpsZWFmX2JoID0gbG9va3VwLT5kbF9sZWFmX2JoOworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfZW50cnkgPSBsb29rdXAtPmRsX2R4X2VudHJ5OworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdDsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBnZXRzIGEgYml0IG1lc3N5IGJlY2F1c2Ugd2UgbWlnaHQgaGF2ZSB0bworCSAqIG1vZGlmeSB0aGUgcm9vdCBibG9jaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBpbmRleGVkCisJICogZW50cmllcyBhcmUgc3RvcmVkIGlubGluZS4KKwkgKi8KKworCS8qCisJICogKk9ubHkqIHNldCAnZW50cnlfbGlzdCcgaGVyZSwgYmFzZWQgb24gd2hlcmUgd2UncmUgbG9va2luZworCSAqIGZvciB0aGUgaW5kZXhlZCBlbnRyaWVzLiBMYXRlciwgd2UgbWlnaHQgc3RpbGwgd2FudCB0bworCSAqIGpvdXJuYWwgYm90aCBibG9ja3MsIGJhc2VkIG9uIGZyZWUgbGlzdCBzdGF0ZS4KKwkgKi8KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCWlmIChvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkgeworCQllbnRyeV9saXN0ID0gJmR4X3Jvb3QtPmRyX2VudHJpZXM7CisJfSBlbHNlIHsKKwkJZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKSBsb29rdXAtPmRsX2R4X2xlYWZfYmgtPmJfZGF0YTsKKwkJZW50cnlfbGlzdCA9ICZkeF9sZWFmLT5kbF9saXN0OworCX0KKworCS8qIE5laXRoZXIgb2YgdGhlc2UgYXJlIGEgZGlzayBjb3JydXB0aW9uIC0gdGhhdCBzaG91bGQgaGF2ZQorCSAqIGJlZW4gY2F1Z2h0IGJ5IGxvb2t1cCwgYmVmb3JlIHdlIGdvdCBoZXJlLiAqLworCUJVR19PTihsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9jb3VudCkgPD0gMCk7CisJQlVHX09OKGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKSA8PSAwKTsKKworCWluZGV4ID0gKGNoYXIgKilkeF9lbnRyeSAtIChjaGFyICopZW50cnlfbGlzdC0+ZGVfZW50cmllczsKKwlpbmRleCAvPSBzaXplb2YoKmR4X2VudHJ5KTsKKworCWlmIChpbmRleCA+PSBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkRpciAlbGx1OiBCYWQgZHhfZW50cnkgcHRyIGlkeCAlZCwgKCVwLCAlcClcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLCBpbmRleCwKKwkJICAgICBlbnRyeV9saXN0LCBkeF9lbnRyeSk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qCisJICogV2Uga25vdyB0aGF0IHJlbW92YWwgb2YgdGhpcyBkaXJlbnQgd2lsbCBsZWF2ZSBlbm91Z2ggcm9vbQorCSAqIGZvciBhIG5ldyBvbmUsIHNvIGFkZCB0aGlzIGJsb2NrIHRvIHRoZSBmcmVlIGxpc3QgaWYgaXQKKwkgKiBpc24ndCBhbHJlYWR5IHRoZXJlLgorCSAqLworCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgobGVhZl9iaCwgZGlyLT5pX3NiKTsKKwlpZiAodHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuID09IDApCisJCWFkZF90b19mcmVlX2xpc3QgPSAxOworCisJLyoKKwkgKiBBZGQgdGhlIGJsb2NrIGhvbGRpbmcgb3VyIGluZGV4IGludG8gdGhlIGpvdXJuYWwgYmVmb3JlCisJICogcmVtb3ZpbmcgdGhlIHVuaW5kZXhlZCBlbnRyeS4gSWYgd2UgZ2V0IGFuIGVycm9yIHJldHVybgorCSAqIGZyb20gX19vY2ZzMl9kZWxldGVfZW50cnkoKSwgdGhlbiBpdCBoYXNuJ3QgcmVtb3ZlZCB0aGUKKwkgKiBlbnRyeSB5ZXQuIExpa2V3aXNlLCBzdWNjZXNzZnVsIHJldHVybiBtZWFucyB3ZSAqbXVzdCoKKwkgKiByZW1vdmUgdGhlIGluZGV4ZWQgZW50cnkuCisJICoKKwkgKiBXZSdyZSBhbHNvIGNhcmVmdWwgdG8gam91cm5hbCB0aGUgcm9vdCB0cmVlIGJsb2NrIGhlcmUgYXMKKwkgKiB0aGUgZW50cnkgY291bnQgbmVlZHMgdG8gYmUgdXBkYXRlZC4gQWxzbywgd2UgbWlnaHQgYmUKKwkgKiBhZGRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmcmVlIGxpc3QuCisJICovCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7CisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLAorCQkJCQkgICAgICBsb29rdXAtPmRsX2R4X2xlYWZfYmgsCisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltbG9nKDAsICJEaXIgJWxsdTogZGVsZXRlIGVudHJ5IGF0IGluZGV4OiAlZFxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywgaW5kZXgpOworCisJcmV0ID0gX19vY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBkaXIsIGxvb2t1cC0+ZGxfZW50cnksCisJCQkJICAgbGVhZl9iaCwgbGVhZl9iaC0+Yl9kYXRhLCBsZWFmX2JoLT5iX3NpemUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwltYXhfcmVjX2xlbiA9IG9jZnMyX2ZpbmRfbWF4X3JlY19sZW4oZGlyLT5pX3NiLCBsZWFmX2JoKTsKKwl0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4gPSBjcHVfdG9fbGUxNihtYXhfcmVjX2xlbik7CisJaWYgKGFkZF90b19mcmVlX2xpc3QpIHsKKwkJdHJhaWxlci0+ZGJfZnJlZV9uZXh0ID0gZHhfcm9vdC0+ZHJfZnJlZV9ibGs7CisJCWR4X3Jvb3QtPmRyX2ZyZWVfYmxrID0gY3B1X3RvX2xlNjQobGVhZl9iaC0+Yl9ibG9ja25yKTsKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCX0KKworCS8qIGxlYWZfYmggd2FzIGpvdXJuYWxfYWNjZXNzZWQgZm9yIHVzIGluIF9fb2NmczJfZGVsZXRlX2VudHJ5ICovCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxlYWZfYmgpOworCisJbGUzMl9hZGRfY3B1KCZkeF9yb290LT5kcl9udW1fZW50cmllcywgLTEpOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKworCW9jZnMyX2R4X2xpc3RfcmVtb3ZlX2VudHJ5KGVudHJ5X2xpc3QsIGluZGV4KTsKKworCWlmICghb2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpCisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBsb29rdXAtPmRsX2R4X2xlYWZfYmgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfZGVsZXRlX2VudHJ5X2lkKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCXN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZV9kZWwsCkBAIC02MjQsMTggKzE0MTMsMjIgQEAKIH0KIAogLyoKLSAqIG9jZnMyX2RlbGV0ZV9lbnRyeSBkZWxldGVzIGEgZGlyZWN0b3J5IGVudHJ5IGJ5IG1lcmdpbmcgaXQgd2l0aCB0aGUKLSAqIHByZXZpb3VzIGVudHJ5CisgKiBEZWxldGUgYSBkaXJlY3RvcnkgZW50cnkuIEhpZGUgdGhlIGRldGFpbHMgb2YgZGlyZWN0b3J5CisgKiBpbXBsZW1lbnRhdGlvbiBmcm9tIHRoZSBjYWxsZXIuCiAgKi8KIGludCBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGVfZGVsLAotCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKQogewotCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQotCQlyZXR1cm4gb2NmczJfZGVsZXRlX2VudHJ5X2lkKGhhbmRsZSwgZGlyLCBkZV9kZWwsIGJoKTsKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkKKwkJcmV0dXJuIG9jZnMyX2RlbGV0ZV9lbnRyeV9keChoYW5kbGUsIGRpciwgcmVzKTsKIAotCXJldHVybiBvY2ZzMl9kZWxldGVfZW50cnlfZWwoaGFuZGxlLCBkaXIsIGRlX2RlbCwgYmgpOworCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQorCQlyZXR1cm4gb2NmczJfZGVsZXRlX2VudHJ5X2lkKGhhbmRsZSwgZGlyLCByZXMtPmRsX2VudHJ5LAorCQkJCQkgICAgIHJlcy0+ZGxfbGVhZl9iaCk7CisKKwlyZXR1cm4gb2NmczJfZGVsZXRlX2VudHJ5X2VsKGhhbmRsZSwgZGlyLCByZXMtPmRsX2VudHJ5LAorCQkJCSAgICAgcmVzLT5kbF9sZWFmX2JoKTsKIH0KIAogLyoKQEAgLTY2MywxOCArMTQ1NiwxNjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0X3RhaWwoc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWYsCisJCQkJCSAgc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9uZXdfZW50cnkpCit7CisJaW50IGk7CisKKwlpID0gbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9udW1fdXNlZCk7CisJZHhfbGVhZi0+ZGxfbGlzdC5kZV9lbnRyaWVzW2ldID0gKmR4X25ld19lbnRyeTsKKworCWxlMTZfYWRkX2NwdSgmZHhfbGVhZi0+ZGxfbGlzdC5kZV9udW1fdXNlZCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0LAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvLAorCQkJCSAgICAgICB1NjQgZGlyZW50X2JsaykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X2VudHJ5OworCisJaSA9IGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKTsKKwlkeF9lbnRyeSA9ICZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW2ldOworCisJbWVtc2V0KGR4X2VudHJ5LCAwLCBzaXplb2YoKmR4X2VudHJ5KSk7CisJZHhfZW50cnktPmR4X21ham9yX2hhc2ggPSBjcHVfdG9fbGUzMihoaW5mby0+bWFqb3JfaGFzaCk7CisJZHhfZW50cnktPmR4X21pbm9yX2hhc2ggPSBjcHVfdG9fbGUzMihoaW5mby0+bWlub3JfaGFzaCk7CisJZHhfZW50cnktPmR4X2RpcmVudF9ibGsgPSBjcHVfdG9fbGU2NChkaXJlbnRfYmxrKTsKKworCWxlMTZfYWRkX2NwdSgmZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQsIDEpOworfQorCitzdGF0aWMgaW50IF9fb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8sCisJCQkJICAgICAgdTY0IGRpcmVudF9ibGssCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9sZWFmX2JoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgZHhfbGVhZl9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKilkeF9sZWFmX2JoLT5iX2RhdGE7CisJb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoJmR4X2xlYWYtPmRsX2xpc3QsIGhpbmZvLCBkaXJlbnRfYmxrKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfbGVhZl9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9pbmxpbmVfcm9vdF9pbnNlcnQoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCXN0cnVjdCBvY2ZzMl9keF9oaW5mbyAqaGluZm8sCisJCQkJCXU2NCBkaXJlbnRfYmxrLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCkKK3sKKwlvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydCgmZHhfcm9vdC0+ZHJfZW50cmllcywgaGluZm8sIGRpcmVudF9ibGspOworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9pbnNlcnQoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gbG9va3VwLT5kbF9keF9yb290X2JoOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopbG9va3VwLT5kbF9keF9yb290X2JoLT5iX2RhdGE7CisJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7CisJCW9jZnMyX2R4X2lubGluZV9yb290X2luc2VydChkaXIsIGhhbmRsZSwKKwkJCQkJICAgICZsb29rdXAtPmRsX2hpbmZvLAorCQkJCQkgICAgbG9va3VwLT5kbF9sZWFmX2JoLT5iX2Jsb2NrbnIsCisJCQkJCSAgICBkeF9yb290KTsKKwl9IGVsc2UgeworCQlyZXQgPSBfX29jZnMyX2R4X2Rpcl9sZWFmX2luc2VydChkaXIsIGhhbmRsZSwgJmxvb2t1cC0+ZGxfaGluZm8sCisJCQkJCQkgbG9va3VwLT5kbF9sZWFmX2JoLT5iX2Jsb2NrbnIsCisJCQkJCQkgbG9va3VwLT5kbF9keF9sZWFmX2JoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCWxlMzJfYWRkX2NwdSgmZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMsIDEpOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3JlbW92ZV9ibG9ja19mcm9tX2ZyZWVfbGlzdChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyLCAqcHJldjsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChsb29rdXAtPmRsX2xlYWZfYmgsIGRpci0+aV9zYik7CisKKwlpZiAob2NmczJfZnJlZV9saXN0X2F0X3Jvb3QobG9va3VwKSkgeworCQliaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKKwkJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWJoLT5iX2RhdGE7CisJCWR4X3Jvb3QtPmRyX2ZyZWVfYmxrID0gdHJhaWxlci0+ZGJfZnJlZV9uZXh0OworCX0gZWxzZSB7CisJCWJoID0gbG9va3VwLT5kbF9wcmV2X2xlYWZfYmg7CisJCXByZXYgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgoYmgsIGRpci0+aV9zYik7CisJCXByZXYtPmRiX2ZyZWVfbmV4dCA9IHRyYWlsZXItPmRiX2ZyZWVfbmV4dDsKKwl9CisKKwl0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4gPSBjcHVfdG9fbGUxNigwKTsKKwl0cmFpbGVyLT5kYl9mcmVlX25leHQgPSBjcHVfdG9fbGU2NCgwKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaCk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxvb2t1cC0+ZGxfbGVhZl9iaCk7Cit9CisKKy8qCisgKiBUaGlzIGV4cGVjdHMgdGhhdCBhIGpvdXJuYWwgd3JpdGUgaGFzIGJlZW4gcmVzZXJ2ZWQgb24KKyAqIGxvb2t1cC0+ZGxfcHJldl9sZWFmX2JoIG9yIGxvb2t1cC0+ZGxfZHhfcm9vdF9iaAorICovCitzdGF0aWMgdm9pZCBvY2ZzMl9yZWNhbGNfZnJlZV9saXN0KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCBtYXhfcmVjX2xlbjsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CisKKwkvKiBXYWxrIGRsX2xlYWZfYmggdG8gZmlndXJlIG91dCB3aGF0IHRoZSBuZXcgZnJlZSByZWNfbGVuIGlzLiAqLworCW1heF9yZWNfbGVuID0gb2NmczJfZmluZF9tYXhfcmVjX2xlbihkaXItPmlfc2IsIGxvb2t1cC0+ZGxfbGVhZl9iaCk7CisJaWYgKG1heF9yZWNfbGVuKSB7CisJCS8qCisJCSAqIFRoZXJlJ3Mgc3RpbGwgcm9vbSBpbiB0aGlzIGJsb2NrLCBzbyBubyBuZWVkIHRvIHJlbW92ZSBpdAorCQkgKiBmcm9tIHRoZSBmcmVlIGxpc3QuIEluIHRoaXMgY2FzZSwgd2UganVzdCB3YW50IHRvIHVwZGF0ZQorCQkgKiB0aGUgcmVjIGxlbiBhY2NvdW50aW5nLgorCQkgKi8KKwkJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChsb29rdXAtPmRsX2xlYWZfYmgsIGRpci0+aV9zYik7CisJCXRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbiA9IGNwdV90b19sZTE2KG1heF9yZWNfbGVuKTsKKwkJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGxvb2t1cC0+ZGxfbGVhZl9iaCk7CisJfSBlbHNlIHsKKwkJb2NmczJfcmVtb3ZlX2Jsb2NrX2Zyb21fZnJlZV9saXN0KGRpciwgaGFuZGxlLCBsb29rdXApOworCX0KK30KKwogLyogd2UgZG9uJ3QgYWx3YXlzIGhhdmUgYSBkZW50cnkgZm9yIHdoYXQgd2Ugd2FudCB0byBhZGQsIHNvIHBlb3BsZQogICogbGlrZSBvcnBoYW4gZGlyIGNhbiBjYWxsIHRoaXMgaW5zdGVhZC4KICAqCi0gKiBJZiB5b3UgcGFzcyBtZSBpbnNlcnRfYmgsIEknbGwgc2tpcCB0aGUgc2VhcmNoIG9mIHRoZSBvdGhlciBkaXIKLSAqIGJsb2NrcyBhbmQgcHV0IHRoZSByZWNvcmQgaW4gdGhlcmUuCisgKiBUaGUgbG9va3VwIGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gZmlsbGVkIGZyb20KKyAqIG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQuCiAgKi8KIGludCBfX29jZnMyX2FkZF9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCiAJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBibGtubywKIAkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaW5zZXJ0X2JoKQorCQkgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBzaG9ydCByZWNfbGVuOwpAQCAtNjgzLDYgKzE2MjQsNyBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CiAJaW50IHJldHZhbCwgc3RhdHVzOwogCXVuc2lnbmVkIGludCBzaXplID0gc2ItPnNfYmxvY2tzaXplOworCXN0cnVjdCBidWZmZXJfaGVhZCAqaW5zZXJ0X2JoID0gbG9va3VwLT5kbF9sZWFmX2JoOwogCWNoYXIgKmRhdGFfc3RhcnQgPSBpbnNlcnRfYmgtPmJfZGF0YTsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwpAQCAtNjkwLDcgKzE2MzIsMzEgQEAKIAlpZiAoIW5hbWVsZW4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkgeworCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJCS8qCisJCSAqIEFuIGluZGV4ZWQgZGlyIG1heSByZXF1aXJlIHRoYXQgd2UgdXBkYXRlIHRoZSBmcmVlIHNwYWNlCisJCSAqIGxpc3QuIFJlc2VydmUgYSB3cml0ZSB0byB0aGUgcHJldmlvdXMgbm9kZSBpbiB0aGUgbGlzdCBzbworCQkgKiB0aGF0IHdlIGRvbid0IGZhaWwgbGF0ZXIuCisJCSAqCisJCSAqIFhYWDogVGhpcyBjYW4gYmUgZWl0aGVyIGEgZHhfcm9vdF9ibG9jaywgb3IgYW4gdW5pbmRleGVkCisJCSAqIGRpcmVjdG9yeSB0cmVlIGxlYWYgYmxvY2suCisJCSAqLworCQlpZiAob2NmczJfZnJlZV9saXN0X2F0X3Jvb3QobG9va3VwKSkgeworCQkJYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CisJCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgYmgsCisJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQl9IGVsc2UgeworCQkJYmggPSBsb29rdXAtPmRsX3ByZXZfbGVhZl9iaDsKKwkJCXJldHZhbCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLCBiaCwKKwkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCX0KKwkJaWYgKHJldHZhbCkgeworCQkJbWxvZ19lcnJubyhyZXR2YWwpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCX0gZWxzZSBpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgewogCQlkYXRhX3N0YXJ0ID0gZGktPmlkMi5pX2RhdGEuaWRfZGF0YTsKIAkJc2l6ZSA9IGlfc2l6ZV9yZWFkKGRpcik7CiAKQEAgLTczNywxMCArMTcwMywyMiBAQAogCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLAogCQkJCQkJCQkgaW5zZXJ0X2JoLAogCQkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwotCQkJZWxzZQorCQkJZWxzZSB7CiAJCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGIoaGFuZGxlLCBkaXIsCiAJCQkJCQkJCSBpbnNlcnRfYmgsCi0JCQkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKworCQkJCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKSB7CisJCQkJCXN0YXR1cyA9IG9jZnMyX2R4X2Rpcl9pbnNlcnQoZGlyLAorCQkJCQkJCQloYW5kbGUsCisJCQkJCQkJCWxvb2t1cCk7CisJCQkJCWlmIChzdGF0dXMpIHsKKwkJCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCQkJCWdvdG8gYmFpbDsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwogCQkJLyogQnkgbm93IHRoZSBidWZmZXIgaXMgbWFya2VkIGZvciBqb3VybmFsaW5nICovCiAJCQlvZmZzZXQgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOwogCQkJaWYgKGxlNjRfdG9fY3B1KGRlLT5pbm9kZSkpIHsKQEAgLTc2MSw2ICsxNzM5LDkgQEAKIAkJCWRlLT5uYW1lX2xlbiA9IG5hbWVsZW47CiAJCQltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwogCisJCQlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkKKwkJCQlvY2ZzMl9yZWNhbGNfZnJlZV9saXN0KGRpciwgaGFuZGxlLCBsb29rdXApOworCiAJCQlkaXItPmlfdmVyc2lvbisrOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGluc2VydF9iaCk7CiAJCQlyZXR2YWwgPSAwOwpAQCAtODcwLDYgKzE4NTEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhZ2FpbnN0IHVuaW5kZXhlZCBkaXJlY3RvcmllcywKKyAqIGFuZCBpbmRleGVkIG9uZXMuCisgKi8KIHN0YXRpYyBpbnQgb2NmczJfZGlyX2ZvcmVhY2hfYmxrX2VsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgIHU2NCAqZl92ZXJzaW9uLAogCQkJCSAgICBsb2ZmX3QgKmZfcG9zLCB2b2lkICpwcml2LApAQCAtMTA3MSwzMSArMjA1NiwyMiBAQAogCQkJICAgICBpbnQgbmFtZWxlbiwKIAkJCSAgICAgdTY0ICpibGtubywKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZGlyZW50X2JoLAotCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICoqZGlyZW50KQorCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKIHsKIAlpbnQgc3RhdHVzID0gLUVOT0VOVDsKIAotCW1sb2dfZW50cnkoIihuYW1lPSUuKnMsIGJsa25vPSVwLCBpbm9kZT0lcCwgZGlyZW50X2JoPSVwLCBkaXJlbnQ9JXApXG4iLAotCQkgICBuYW1lbGVuLCBuYW1lLCBibGtubywgaW5vZGUsIGRpcmVudF9iaCwgZGlyZW50KTsKKwltbG9nKDAsICJuYW1lPSUuKnMsIGJsa25vPSVwLCBpbm9kZT0lbGx1XG4iLCBuYW1lbGVuLCBuYW1lLCBibGtubywKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKIAotCSpkaXJlbnRfYmggPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIG5hbWVsZW4sIGlub2RlLCBkaXJlbnQpOwotCWlmICghKmRpcmVudF9iaCB8fCAhKmRpcmVudCkgewotCQlzdGF0dXMgPSAtRU5PRU5UOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgbmFtZWxlbiwgaW5vZGUsIGxvb2t1cCk7CisJaWYgKHN0YXR1cykKIAkJZ290byBsZWF2ZTsKLQl9CiAKLQkqYmxrbm8gPSBsZTY0X3RvX2NwdSgoKmRpcmVudCktPmlub2RlKTsKKwkqYmxrbm8gPSBsZTY0X3RvX2NwdShsb29rdXAtPmRsX2VudHJ5LT5pbm9kZSk7CiAKIAlzdGF0dXMgPSAwOwogbGVhdmU6Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJKmRpcmVudCA9IE5VTEw7Ci0JCWJyZWxzZSgqZGlyZW50X2JoKTsKLQkJKmRpcmVudF9iaCA9IE5VTEw7Ci0JfQogCi0JbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTEwNywxMSArMjA4MywxMCBAQAogCQkJICAgICAgIGludCBuYW1lbGVuLCB1NjQgKmJsa25vKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGlyZW50ID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OwogCi0JcmV0ID0gb2NmczJfZmluZF9maWxlc19vbl9kaXNrKG5hbWUsIG5hbWVsZW4sIGJsa25vLCBkaXIsICZiaCwgJmRpcmVudCk7Ci0JYnJlbHNlKGJoKTsKKwlyZXQgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2sobmFtZSwgbmFtZWxlbiwgYmxrbm8sIGRpciwgJmxvb2t1cCk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMTI4LDIwICsyMTAzLDE4IEBACiAJCQkgICAgICBpbnQgbmFtZWxlbikKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZW50X2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkaXJlbnQgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCJkaXIgJWxsdSwgbmFtZSAnJS4qcydcbiIsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywgbmFtZWxlbiwgbmFtZSk7CiAKIAlyZXQgPSAtRUVYSVNUOwotCWRpcmVudF9iaCA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgbmFtZWxlbiwgZGlyLCAmZGlyZW50KTsKLQlpZiAoZGlyZW50X2JoKQorCWlmIChvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIG5hbWVsZW4sIGRpciwgJmxvb2t1cCkgPT0gMCkKIAkJZ290byBiYWlsOwogCiAJcmV0ID0gMDsKIGJhaWw6Ci0JYnJlbHNlKGRpcmVudF9iaCk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKIAogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CkBAIC0xMTUxLDYgKzIxMjQsNyBAQAogCXVuc2lnbmVkIHNlZW5fZG90OwogCXVuc2lnbmVkIHNlZW5fZG90X2RvdDsKIAl1bnNpZ25lZCBzZWVuX290aGVyOworCXVuc2lnbmVkIGR4X2RpcjsKIH07CiBzdGF0aWMgaW50IG9jZnMyX2VtcHR5X2Rpcl9maWxsZGlyKHZvaWQgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbiwKIAkJCQkgICBsb2ZmX3QgcG9zLCB1NjQgaW5vLCB1bnNpZ25lZCB0eXBlKQpAQCAtMTE2MCw2ICsyMTM0LDEzIEBACiAJLyoKIAkgKiBDaGVjayB0aGUgcG9zaXRpb25zIG9mICIuIiBhbmQgIi4uIiByZWNvcmRzIHRvIGJlIHN1cmUKIAkgKiB0aGV5J3JlIGluIHRoZSBjb3JyZWN0IHBsYWNlLgorCSAqCisJICogSW5kZXhlZCBkaXJlY3RvcmllcyBkb24ndCBuZWVkIHRvIHByb2NlZWQgcGFzdCB0aGUgZmlyc3QKKwkgKiB0d28gZW50cmllcywgc28gd2UgZW5kIHRoZSBzY2FuIGFmdGVyIHNlZWluZyAnLi4nLiBEZXNwaXRlCisJICogdGhhdCwgd2UgYWxsb3cgdGhlIHNjYW4gdG8gcHJvY2VlZCBJbiB0aGUgZXZlbnQgdGhhdCB3ZQorCSAqIGhhdmUgYSBjb3JydXB0ZWQgaW5kZXhlZCBkaXJlY3RvcnkgKG5vIGRvdCBvciBkb3QgZG90CisJICogZW50cmllcykuIFRoaXMgYWxsb3dzIHVzIHRvIGRvdWJsZSBjaGVjayBmb3IgZXhpc3RpbmcKKwkgKiBlbnRyaWVzIHdoaWNoIG1pZ2h0IG5vdCBoYXZlIGJlZW4gZm91bmQgaW4gdGhlIGluZGV4LgogCSAqLwogCWlmIChuYW1lX2xlbiA9PSAxICYmICFzdHJuY21wKCIuIiwgbmFtZSwgMSkgJiYgcG9zID09IDApIHsKIAkJcC0+c2Vlbl9kb3QgPSAxOwpAQCAtMTE2OSwxNiArMjE1MCw1NyBAQAogCWlmIChuYW1lX2xlbiA9PSAyICYmICFzdHJuY21wKCIuLiIsIG5hbWUsIDIpICYmCiAJICAgIHBvcyA9PSBPQ0ZTMl9ESVJfUkVDX0xFTigxKSkgewogCQlwLT5zZWVuX2RvdF9kb3QgPSAxOworCisJCWlmIChwLT5keF9kaXIgJiYgcC0+c2Vlbl9kb3QpCisJCQlyZXR1cm4gMTsKKwogCQlyZXR1cm4gMDsKIAl9CiAKIAlwLT5zZWVuX290aGVyID0gMTsKIAlyZXR1cm4gMTsKIH0KKworc3RhdGljIGludCBvY2ZzMl9lbXB0eV9kaXJfZHgoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgIHN0cnVjdCBvY2ZzMl9lbXB0eV9kaXJfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisKKwlwcml2LT5keF9kaXIgPSAxOworCisJcmV0ID0gb2NmczJfcmVhZF9pbm9kZV9ibG9jayhpbm9kZSwgJmRpX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJcmV0ID0gb2NmczJfcmVhZF9keF9yb290KGlub2RlLCBkaSwgJmR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCWlmIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9udW1fZW50cmllcykgIT0gMikKKwkJcHJpdi0+c2Vlbl9vdGhlciA9IDE7CisKK291dDoKKwlicmVsc2UoZGlfYmgpOworCWJyZWxzZShkeF9yb290X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogcm91dGluZSB0byBjaGVjayB0aGF0IHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGlzIGVtcHR5IChmb3Igcm1kaXIpCiAgKgogICogUmV0dXJucyAxIGlmIGRpciBpcyBlbXB0eSwgemVybyBvdGhlcndpc2UuCisgKgorICogWFhYOiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBmb3IgdW5pbmRleGVkIGRpcmVjdG9yaWVzLgogICovCiBpbnQgb2NmczJfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0xMTg4LDYgKzIyMTAsMTYgQEAKIAogCW1lbXNldCgmcHJpdiwgMCwgc2l6ZW9mKHByaXYpKTsKIAorCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChpbm9kZSkpIHsKKwkJcmV0ID0gb2NmczJfZW1wdHlfZGlyX2R4KGlub2RlLCAmcHJpdik7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCS8qCisJCSAqIFdlIHN0aWxsIHJ1biBvY2ZzMl9kaXJfZm9yZWFjaCB0byBnZXQgdGhlIGNoZWNrcworCQkgKiBmb3IgIi4iIGFuZCAiLi4iLgorCQkgKi8KKwl9CisKIAlyZXQgPSBvY2ZzMl9kaXJfZm9yZWFjaChpbm9kZSwgJnN0YXJ0LCAmcHJpdiwgb2NmczJfZW1wdHlfZGlyX2ZpbGxkaXIpOwogCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEyODAsNyArMjMxMiw4IEBACiAJCQkJIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYykKKwkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9uZXdfYmgpCiB7CiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IG9zYi0+c2ItPnNfYmxvY2tzaXplOwpAQCAtMTI4OSw3ICsyMzIyLDcgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCi0JaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKG9zYikpCisJaWYgKG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihpbm9kZSkpCiAJCXNpemUgPSBvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHBhcmVudC0+aV9zYik7CiAKIAlzdGF0dXMgPSBvY2ZzMl9kb19leHRlbmRfZGlyKG9zYi0+c2IsIGhhbmRsZSwgaW5vZGUsIGZlX2JoLApAQCAtMTMxMCw4ICsyMzQzLDE5IEBACiAJbWVtc2V0KG5ld19iaC0+Yl9kYXRhLCAwLCBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAlkZSA9IG9jZnMyX2ZpbGxfaW5pdGlhbF9kaXJlbnRzKGlub2RlLCBwYXJlbnQsIG5ld19iaC0+Yl9kYXRhLCBzaXplKTsKLQlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIob3NiKSkKLQkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihpbm9kZSwgbmV3X2JoKTsKKwlpZiAob2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKGlub2RlKSkgeworCQlpbnQgc2l6ZSA9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKworCQkvKgorCQkgKiBGaWd1cmUgb3V0IHRoZSBzaXplIG9mIHRoZSBob2xlIGxlZnQgb3ZlciBhZnRlcgorCQkgKiBpbnNlcnRpb24gb2YgJy4nIGFuZCAnLi4nLiBUaGUgdHJhaWxlciB3YW50cyB0aGlzCisJCSAqIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJc2l6ZSAtPSBPQ0ZTMl9ESVJfUkVDX0xFTigyKTsKKwkJc2l6ZSAtPSBzaXplb2Yoc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyKTsKKworCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGlub2RlLCBuZXdfYmgsIHNpemUpOworCX0KIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMzI5LDYgKzIzNzMsMTAgQEAKIAl9CiAKIAlzdGF0dXMgPSAwOworCWlmIChyZXRfbmV3X2JoKSB7CisJCSpyZXRfbmV3X2JoID0gbmV3X2JoOworCQluZXdfYmggPSBOVUxMOworCX0KIGJhaWw6CiAJYnJlbHNlKG5ld19iaCk7CiAKQEAgLTEzMzYsMjAgKzIzODQsNDI3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGludCBvY2ZzMl9keF9kaXJfYXR0YWNoX2luZGV4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJkYXRhX2JoLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgICBpbnQgZHhfaW5saW5lLCB1MzIgbnVtX2VudHJpZXMsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfZHhfcm9vdF9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgZGlfYmgtPmJfZGF0YTsKKwl1MTYgZHJfc3ViYWxsb2NfYml0OworCXU2NCBkcl9ibGtubzsKKwl1bnNpZ25lZCBpbnQgbnVtX2JpdHM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXIgPQorCQlvY2ZzMl90cmFpbGVyX2Zyb21fYmgoZGlyZGF0YV9iaCwgZGlyLT5pX3NiKTsKKworCXJldCA9IG9jZnMyX2NsYWltX21ldGFkYXRhKG9zYiwgaGFuZGxlLCBtZXRhX2FjLCAxLCAmZHJfc3ViYWxsb2NfYml0LAorCQkJCSAgICZudW1fYml0cywgJmRyX2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbWxvZygwLCAiRGlyICVsbHUsIGF0dGFjaCBuZXcgaW5kZXggYmxvY2s6ICVsbHVcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRyX2Jsa25vKTsKKworCWR4X3Jvb3RfYmggPSBzYl9nZXRibGsob3NiLT5zYiwgZHJfYmxrbm8pOworCWlmIChkeF9yb290X2JoID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGRpciwgZHhfcm9vdF9iaCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwltZW1zZXQoZHhfcm9vdCwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUpOworCXN0cmNweShkeF9yb290LT5kcl9zaWduYXR1cmUsIE9DRlMyX0RYX1JPT1RfU0lHTkFUVVJFKTsKKwlkeF9yb290LT5kcl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJZHhfcm9vdC0+ZHJfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoZHJfc3ViYWxsb2NfYml0KTsKKwlkeF9yb290LT5kcl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKKwlkeF9yb290LT5kcl9ibGtubyA9IGNwdV90b19sZTY0KGRyX2Jsa25vKTsKKwlkeF9yb290LT5kcl9kaXJfYmxrbm8gPSBjcHVfdG9fbGU2NChPQ0ZTMl9JKGRpciktPmlwX2Jsa25vKTsKKwlkeF9yb290LT5kcl9udW1fZW50cmllcyA9IGNwdV90b19sZTMyKG51bV9lbnRyaWVzKTsKKwlpZiAobGUxNl90b19jcHUodHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuKSkKKwkJZHhfcm9vdC0+ZHJfZnJlZV9ibGsgPSBjcHVfdG9fbGU2NChkaXJkYXRhX2JoLT5iX2Jsb2NrbnIpOworCWVsc2UKKwkJZHhfcm9vdC0+ZHJfZnJlZV9ibGsgPSBjcHVfdG9fbGU2NCgwKTsKKworCWlmIChkeF9pbmxpbmUpIHsKKwkJZHhfcm9vdC0+ZHJfZmxhZ3MgfD0gT0NGUzJfRFhfRkxBR19JTkxJTkU7CisJCWR4X3Jvb3QtPmRyX2VudHJpZXMuZGVfY291bnQgPQorCQkJY3B1X3RvX2xlMTYob2NmczJfZHhfZW50cmllc19wZXJfcm9vdChvc2ItPnNiKSk7CisJfSBlbHNlIHsKKwkJZHhfcm9vdC0+ZHJfbGlzdC5sX2NvdW50ID0KKwkJCWNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9keF9yb290KG9zYi0+c2IpKTsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBkaXIsIGRpX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX0NSRUFURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWRpLT5pX2R4X3Jvb3QgPSBjcHVfdG9fbGU2NChkcl9ibGtubyk7CisKKwlPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyB8PSBPQ0ZTMl9JTkRFWEVEX0RJUl9GTDsKKwlkaS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCSpyZXRfZHhfcm9vdF9iaCA9IGR4X3Jvb3RfYmg7CisJZHhfcm9vdF9iaCA9IE5VTEw7CisKK291dDoKKwlicmVsc2UoZHhfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfZm9ybWF0X2NsdXN0ZXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMsCisJCQkJICAgICAgIGludCBudW1fZHhfbGVhdmVzLCB1NjQgc3RhcnRfYmxrKQoreworCWludCByZXQsIGk7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKKwkJYmggPSBzYl9nZXRibGsob3NiLT5zYiwgc3RhcnRfYmxrICsgaSk7CisJCWlmIChiaCA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJZHhfbGVhdmVzW2ldID0gYmg7CisKKwkJb2NmczJfc2V0X25ld19idWZmZXJfdXB0b2RhdGUoZGlyLCBiaCk7CisKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIGJoLAorCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCQlpZiAocmV0IDwgMCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopIGJoLT5iX2RhdGE7CisKKwkJbWVtc2V0KGR4X2xlYWYsIDAsIG9zYi0+c2ItPnNfYmxvY2tzaXplKTsKKwkJc3RyY3B5KGR4X2xlYWYtPmRsX3NpZ25hdHVyZSwgT0NGUzJfRFhfTEVBRl9TSUdOQVRVUkUpOworCQlkeF9sZWFmLT5kbF9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKKwkJZHhfbGVhZi0+ZGxfYmxrbm8gPSBjcHVfdG9fbGU2NChiaC0+Yl9ibG9ja25yKTsKKwkJZHhfbGVhZi0+ZGxfbGlzdC5kZV9jb3VudCA9CisJCQljcHVfdG9fbGUxNihvY2ZzMl9keF9lbnRyaWVzX3Blcl9sZWFmKG9zYi0+c2IpKTsKKworCQltbG9nKDAsCisJCSAgICAgIkRpciAlbGx1LCBmb3JtYXQgZHhfbGVhZjogJWxsdSwgZW50cnkgY291bnQ6ICV1XG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCisJCSAgICAgbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9jb3VudCkpOworCisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBiaCk7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQWxsb2NhdGVzIGFuZCBmb3JtYXRzIGEgbmV3IGNsdXN0ZXIgZm9yIHVzZSBpbiBhbiBpbmRleGVkIGRpcgorICogbGVhZi4gVGhpcyB2ZXJzaW9uIHdpbGwgbm90IGRvIHRoZSBleHRlbnQgaW5zZXJ0LCBzbyB0aGF0IGl0IGNhbiBiZQorICogdXNlZCBieSBvcGVyYXRpb25zIHdoaWNoIG5lZWQgY2FyZWZ1bCBvcmRlcmluZy4KKyAqLworc3RhdGljIGludCBfX29jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICB1MzIgY3BvcywgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMsCisJCQkJICAgICAgaW50IG51bV9keF9sZWF2ZXMsIHU2NCAqcmV0X3BoeXNfYmxrbm8pCit7CisJaW50IHJldDsKKwl1MzIgcGh5cywgbnVtOworCXU2NCBwaHlzX2Jsa25vOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKworCS8qCisJICogWFhYOiBGb3IgY3JlYXRlLCB0aGlzIHNob3VsZCBjbGFpbSBjbHVzdGVyIGZvciB0aGUgaW5kZXgKKwkgKiAqYmVmb3JlKiB0aGUgdW5pbmRleGVkIGluc2VydCBzbyB0aGF0IHdlIGhhdmUgYSBiZXR0ZXIKKwkgKiBjaGFuY2Ugb2YgY29udGlndW91c25lc3MgYXMgdGhlIGRpcmVjdG9yeSBncm93cyBpbiBudW1iZXIKKwkgKiBvZiBlbnRyaWVzLgorCSAqLworCXJldCA9IF9fb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGRhdGFfYWMsIDEsIDEsICZwaHlzLCAmbnVtKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBGb3JtYXQgdGhlIG5ldyBjbHVzdGVyIGZpcnN0LiBUaGF0IHdheSwgd2UncmUgaW5zZXJ0aW5nCisJICogdmFsaWQgZGF0YS4KKwkgKi8KKwlwaHlzX2Jsa25vID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIHBoeXMpOworCXJldCA9IG9jZnMyX2R4X2Rpcl9mb3JtYXRfY2x1c3Rlcihvc2IsIGhhbmRsZSwgZGlyLCBkeF9sZWF2ZXMsCisJCQkJCSAgbnVtX2R4X2xlYXZlcywgcGh5c19ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCSpyZXRfcGh5c19ibGtubyA9IHBoeXNfYmxrbm87CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgIHUzMiBjcG9zLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcywKKwkJCQkgICAgaW50IG51bV9keF9sZWF2ZXMpCit7CisJaW50IHJldDsKKwl1NjQgcGh5c19ibGtubzsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisKKwlyZXQgPSBfX29jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihkaXIsIGNwb3MsIGhhbmRsZSwgZGF0YV9hYywgZHhfbGVhdmVzLAorCQkJCQkgbnVtX2R4X2xlYXZlcywgJnBoeXNfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsIGV0LCBjcG9zLCBwaHlzX2Jsa25vLCAxLCAwLAorCQkJCSAgbWV0YV9hYyk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipvY2ZzMl9keF9kaXJfa21hbGxvY19sZWF2ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJCQlpbnQgKnJldF9udW1fbGVhdmVzKQoreworCWludCBudW1fZHhfbGVhdmVzID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCAxKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXM7CisKKwlkeF9sZWF2ZXMgPSBrY2FsbG9jKG51bV9keF9sZWF2ZXMsIHNpemVvZihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiksCisJCQkgICAgR0ZQX05PRlMpOworCWlmIChkeF9sZWF2ZXMgJiYgcmV0X251bV9sZWF2ZXMpCisJCSpyZXRfbnVtX2xlYXZlcyA9IG51bV9keF9sZWF2ZXM7CisKKwlyZXR1cm4gZHhfbGVhdmVzOworfQorCitzdGF0aWMgaW50IG9jZnMyX2ZpbGxfbmV3X2Rpcl9keChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgc3RydWN0IGlub2RlICpwYXJlbnQsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gaGluZm87CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3Q7CisKKwkvKgorCSAqIE91ciBzdHJhdGVneSBpcyB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBhcyB0aG91Z2ggaXQgd2VyZQorCSAqIHVuaW5kZXhlZCwgdGhlbiBhZGQgdGhlIGluZGV4IGJsb2NrLiBUaGlzIHdvcmtzIHdpdGggdmVyeQorCSAqIGxpdHRsZSBjb21wbGljYXRpb24gc2luY2UgdGhlIHN0YXRlIG9mIGEgbmV3IGRpcmVjdG9yeSBpcyBhCisJICogdmVyeSB3ZWxsIGtub3duIHF1YW50aXR5LgorCSAqCisJICogRXNzZW50aWFsbHksIHdlIGhhdmUgdHdvIGRpcmVudHMgKCIuIiBhbmQgIi4uIiksIGluIHRoZSAxc3QKKwkgKiBibG9jayB3aGljaCBuZWVkIGluZGV4aW5nLiBUaGVzZSBhcmUgZWFzaWx5IGluc2VydGVkIGludG8KKwkgKiB0aGUgaW5kZXggYmxvY2suCisJICovCisKKwlyZXQgPSBvY2ZzMl9maWxsX25ld19kaXJfZWwob3NiLCBoYW5kbGUsIHBhcmVudCwgaW5vZGUsIGRpX2JoLAorCQkJCSAgICBkYXRhX2FjLCAmbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2R4X2Rpcl9hdHRhY2hfaW5kZXgob3NiLCBoYW5kbGUsIGlub2RlLCBkaV9iaCwgbGVhZl9iaCwKKwkJCQkJbWV0YV9hYywgMSwgMiwgJmR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwllbnRyeV9saXN0ID0gJmR4X3Jvb3QtPmRyX2VudHJpZXM7CisKKwkvKiBCdWZmZXIgaGFzIGJlZW4gam91cm5hbGVkIGZvciB1cyBieSBvY2ZzMl9keF9kaXJfYXR0YWNoX2luZGV4ICovCisJb2NmczJfZHhfZGlyX25hbWVfaGFzaChpbm9kZSwgIi4iLCAxLCAmaGluZm8pOworCW9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KGVudHJ5X2xpc3QsICZoaW5mbywgbGVhZl9iaC0+Yl9ibG9ja25yKTsKKworCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goaW5vZGUsICIuLiIsIDIsICZoaW5mbyk7CisJb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoZW50cnlfbGlzdCwgJmhpbmZvLCBsZWFmX2JoLT5iX2Jsb2NrbnIpOworCitvdXQ6CisJYnJlbHNlKGR4X3Jvb3RfYmgpOworCWJyZWxzZShsZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgb2NmczJfZmlsbF9uZXdfZGlyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmgsCi0JCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYykKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCisKIHsKIAlCVUdfT04oIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikgJiYgZGF0YV9hYyA9PSBOVUxMKTsKIAogCWlmIChPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpCiAJCXJldHVybiBvY2ZzMl9maWxsX25ld19kaXJfaWQob3NiLCBoYW5kbGUsIHBhcmVudCwgaW5vZGUsIGZlX2JoKTsKIAorCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkKKwkJcmV0dXJuIG9jZnMyX2ZpbGxfbmV3X2Rpcl9keChvc2IsIGhhbmRsZSwgcGFyZW50LCBpbm9kZSwgZmVfYmgsCisJCQkJCSAgICAgZGF0YV9hYywgbWV0YV9hYyk7CisKIAlyZXR1cm4gb2NmczJfZmlsbF9uZXdfZGlyX2VsKG9zYiwgaGFuZGxlLCBwYXJlbnQsIGlub2RlLCBmZV9iaCwKLQkJCQkgICAgIGRhdGFfYWMpOworCQkJCSAgICAgZGF0YV9hYywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2luZGV4X2Jsb2NrKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMsCisJCQkJICAgIGludCBudW1fZHhfbGVhdmVzLAorCQkJCSAgICB1MzIgKm51bV9keF9lbnRyaWVzLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmVudF9iaCkKK3sKKwlpbnQgcmV0LCBuYW1lbGVuLCBpOworCWNoYXIgKmRlX2J1ZiwgKmxpbWl0OworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfbGVhZl9iaDsKKwlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gaGluZm87CisJdTY0IGRpcmVudF9ibGsgPSBkaXJlbnRfYmgtPmJfYmxvY2tucjsKKworCWRlX2J1ZiA9IGRpcmVudF9iaC0+Yl9kYXRhOworCWxpbWl0ID0gZGVfYnVmICsgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCXdoaWxlIChkZV9idWYgPCBsaW1pdCkgeworCQlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOworCisJCW5hbWVsZW4gPSBkZS0+bmFtZV9sZW47CisJCWlmICghbmFtZWxlbiB8fCAhZGUtPmlub2RlKQorCQkJZ290byBpbmM7CisKKwkJb2NmczJfZHhfZGlyX25hbWVfaGFzaChkaXIsIGRlLT5uYW1lLCBuYW1lbGVuLCAmaGluZm8pOworCisJCWkgPSBvY2ZzMl9keF9kaXJfaGFzaF9pZHgoT0NGUzJfU0IoZGlyLT5pX3NiKSwgJmhpbmZvKTsKKwkJZHhfbGVhZl9iaCA9IGR4X2xlYXZlc1tpXTsKKworCQlyZXQgPSBfX29jZnMyX2R4X2Rpcl9sZWFmX2luc2VydChkaXIsIGhhbmRsZSwgJmhpbmZvLAorCQkJCQkJIGRpcmVudF9ibGssIGR4X2xlYWZfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCSpudW1fZHhfZW50cmllcyA9ICpudW1fZHhfZW50cmllcyArIDE7CisKK2luYzoKKwkJZGVfYnVmICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogWFhYOiBUaGlzIGV4cGVjdHMgZHhfcm9vdF9iaCB0byBhbHJlYWR5IGJlIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9kaXJfaW5kZXhfcm9vdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCwKKwkJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZW50X2JoKQoreworCWNoYXIgKmRlX2J1ZiwgKmxpbWl0OworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOworCXN0cnVjdCBvY2ZzMl9keF9oaW5mbyBoaW5mbzsKKwl1NjQgZGlyZW50X2JsayA9IGRpcmVudF9iaC0+Yl9ibG9ja25yOworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCWRlX2J1ZiA9IGRpcmVudF9iaC0+Yl9kYXRhOworCWxpbWl0ID0gZGVfYnVmICsgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKKworCXdoaWxlIChkZV9idWYgPCBsaW1pdCkgeworCQlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOworCisJCWlmICghZGUtPm5hbWVfbGVuIHx8ICFkZS0+aW5vZGUpCisJCQlnb3RvIGluYzsKKworCQlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGRpciwgZGUtPm5hbWUsIGRlLT5uYW1lX2xlbiwgJmhpbmZvKTsKKworCQltbG9nKDAsCisJCSAgICAgImRpcjogJWxsdSwgbWFqb3I6IDB4JXggbWlub3I6IDB4JXgsIGluZGV4OiAldSwgbmFtZTogJS4qc1xuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRpci0+aV9pbm8sIGhpbmZvLm1ham9yX2hhc2gsCisJCSAgICAgaGluZm8ubWlub3JfaGFzaCwKKwkJICAgICBsZTE2X3RvX2NwdShkeF9yb290LT5kcl9lbnRyaWVzLmRlX251bV91c2VkKSwKKwkJICAgICBkZS0+bmFtZV9sZW4sIGRlLT5uYW1lKTsKKworCQlvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydCgmZHhfcm9vdC0+ZHJfZW50cmllcywgJmhpbmZvLAorCQkJCQkgICBkaXJlbnRfYmxrKTsKKworCQlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX251bV9lbnRyaWVzLCAxKTsKK2luYzoKKwkJZGVfYnVmICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwl9Cit9CisKKy8qCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGlubGluZSBkaXJlY3RvcnkgZW50cmllcyBpbiBkaV9iaCBhbmQgY29tcGFyZQorICogdGhlbSBhZ2FpbnN0IHRoZSBudW1iZXIgb2YgZW50cmllcyB3ZSBjYW4gaG9sZCBpbiBhbiBpbmxpbmUgZHggcm9vdAorICogYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfbmV3X2R4X3Nob3VsZF9iZV9pbmxpbmUoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCWludCBkaXJlbnRfY291bnQgPSAwOworCWNoYXIgKmRlX2J1ZiwgKmxpbWl0OworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCisJZGVfYnVmID0gZGktPmlkMi5pX2RhdGEuaWRfZGF0YTsKKwlsaW1pdCA9IGRlX2J1ZiArIGlfc2l6ZV9yZWFkKGRpcik7CisKKwl3aGlsZSAoZGVfYnVmIDwgbGltaXQpIHsKKwkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKKworCQlpZiAoZGUtPm5hbWVfbGVuICYmIGRlLT5pbm9kZSkKKwkJCWRpcmVudF9jb3VudCsrOworCisJCWRlX2J1ZiArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJfQorCisJLyogV2UgYXJlIGNhcmVmdWwgdG8gbGVhdmUgcm9vbSBmb3Igb25lIGV4dHJhIHJlY29yZC4gKi8KKwlyZXR1cm4gZGlyZW50X2NvdW50IDwgb2NmczJfZHhfZW50cmllc19wZXJfcm9vdChkaXItPmlfc2IpOwogfQogCiAvKgpAQCAtMTM1OCwxOCArMjgxMywyNiBAQAogICogZXhwYW5zaW9uIGZyb20gYW4gaW5saW5lIGRpcmVjdG9yeSB0byBvbmUgd2l0aCBleHRlbnRzLiBUaGUgZmlyc3QgZGlyIGJsb2NrCiAgKiBpbiB0aGF0IGNhc2UgaXMgdGFrZW4gZnJvbSB0aGUgaW5saW5lIGRhdGEgcG9ydGlvbiBvZiB0aGUgaW5vZGUgYmxvY2suCiAgKgorICogVGhpcyB3aWxsIGFsc28gcmV0dXJuIHRoZSBsYXJnZXN0IGFtb3VudCBvZiBjb250aWd1b3VzIHNwYWNlIGZvciBhIGRpcmVudAorICogaW4gdGhlIGJsb2NrLiBUaGF0IHZhbHVlIGlzICpub3QqIG5lY2Vzc2FyaWx5IHRoZSBsYXN0IGRpcmVudCwgZXZlbiBhZnRlcgorICogZXhwYW5zaW9uLiBUaGUgZGlyZWN0b3J5IGluZGV4aW5nIGNvZGUgd2FudHMgdGhpcyB2YWx1ZSBmb3IgZnJlZSBzcGFjZQorICogYWNjb3VudGluZy4gV2UgZG8gdGhpcyBoZXJlIHNpbmNlIHdlJ3JlIGFscmVhZHkgd2Fsa2luZyB0aGUgZW50aXJlIGRpcgorICogYmxvY2suCisgKgogICogV2UgYWRkIHRoZSBkaXIgdHJhaWxlciBpZiB0aGlzIGZpbGVzeXN0ZW0gd2FudHMgaXQuCiAgKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2V4cGFuZF9sYXN0X2RpcmVudChjaGFyICpzdGFydCwgdW5zaWduZWQgaW50IG9sZF9zaXplLAotCQkJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfZXhwYW5kX2xhc3RfZGlyZW50KGNoYXIgKnN0YXJ0LCB1bnNpZ25lZCBpbnQgb2xkX3NpemUsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICpkaXIpCiB7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKIAlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpwcmV2X2RlOwogCWNoYXIgKmRlX2J1ZiwgKmxpbWl0OwogCXVuc2lnbmVkIGludCBuZXdfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnl0ZXM7CisJdW5zaWduZWQgaW50IGJ5dGVzLCB0aGlzX2hvbGU7CisJdW5zaWduZWQgaW50IGxhcmdlc3RfaG9sZSA9IDA7CiAKLQlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoT0NGUzJfU0Ioc2IpKSkKKwlpZiAob2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKGRpcikpCiAJCW5ld19zaXplID0gb2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihzYik7CiAKIAlieXRlcyA9IG5ld19zaXplIC0gb2xkX3NpemU7CkBAIC0xMzc4LDEyICsyODQxLDI2IEBACiAJZGVfYnVmID0gc3RhcnQ7CiAJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKIAlkbyB7CisJCXRoaXNfaG9sZSA9IG9jZnMyX2ZpZ3VyZV9kaXJlbnRfaG9sZShkZSk7CisJCWlmICh0aGlzX2hvbGUgPiBsYXJnZXN0X2hvbGUpCisJCQlsYXJnZXN0X2hvbGUgPSB0aGlzX2hvbGU7CisKIAkJcHJldl9kZSA9IGRlOwogCQlkZV9idWYgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOwogCQlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopZGVfYnVmOwogCX0gd2hpbGUgKGRlX2J1ZiA8IGxpbWl0KTsKIAogCWxlMTZfYWRkX2NwdSgmcHJldl9kZS0+cmVjX2xlbiwgYnl0ZXMpOworCisJLyogV2UgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhpcyBhZnRlciBtb2RpZmljYXRpb24gb2YgdGhlIGZpbmFsCisJICogZGlyZW50LiAqLworCXRoaXNfaG9sZSA9IG9jZnMyX2ZpZ3VyZV9kaXJlbnRfaG9sZShwcmV2X2RlKTsKKwlpZiAodGhpc19ob2xlID4gbGFyZ2VzdF9ob2xlKQorCQlsYXJnZXN0X2hvbGUgPSB0aGlzX2hvbGU7CisKKwlpZiAobGFyZ2VzdF9ob2xlID49IE9DRlMyX0RJUl9NSU5fUkVDX0xFTikKKwkJcmV0dXJuIGxhcmdlc3RfaG9sZTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTEzOTYsMjkgKzI4NzMsNjEgQEAKICAqLwogc3RhdGljIGludCBvY2ZzMl9leHBhbmRfaW5saW5lX2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKIAkJCQkgICB1bnNpZ25lZCBpbnQgYmxvY2tzX3dhbnRlZCwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipmaXJzdF9ibG9ja19iaCkKIHsKLQl1MzIgYWxsb2MsIGJpdF9vZmYsIGxlbjsKKwl1MzIgYWxsb2MsIGR4X2FsbG9jLCBiaXRfb2ZmLCBsZW4sIG51bV9keF9lbnRyaWVzID0gMDsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwotCWludCByZXQsIGNyZWRpdHMgPSBvY2ZzMl9pbmxpbmVfdG9fZXh0ZW50c19jcmVkaXRzKHNiKTsKLQl1NjQgYmxrbm8sIGJ5dGVzID0gYmxvY2tzX3dhbnRlZCA8PCBzYi0+c19ibG9ja3NpemVfYml0czsKKwlpbnQgcmV0LCBpLCBudW1fZHhfbGVhdmVzID0gMCwgZHhfaW5saW5lID0gMCwKKwkJY3JlZGl0cyA9IG9jZnMyX2lubGluZV90b19leHRlbnRzX2NyZWRpdHMoc2IpOworCXU2NCBkeF9pbnNlcnRfYmxrbm8sIGJsa25vLAorCQlieXRlcyA9IGJsb2Nrc193YW50ZWQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koZGlyKTsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJkYXRhX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7Ci0JaW50IGRpZF9xdW90YSA9IDA7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGR4X2V0OworCWludCBkaWRfcXVvdGEgPSAwLCBieXRlc19hbGxvY2F0ZWQgPSAwOwogCiAJb2NmczJfaW5pdF9kaW5vZGVfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGRpX2JoKTsKIAogCWFsbG9jID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKHNiLCBieXRlcyk7CisJZHhfYWxsb2MgPSAwOworCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKSB7CisJCWNyZWRpdHMgKz0gb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHNiKTsKKworCQlkeF9pbmxpbmUgPSBvY2ZzMl9uZXdfZHhfc2hvdWxkX2JlX2lubGluZShkaXIsIGRpX2JoKTsKKwkJaWYgKCFkeF9pbmxpbmUpIHsKKwkJCS8qIEFkZCBvbmUgbW9yZSBjbHVzdGVyIGZvciBhbiBpbmRleCBsZWFmICovCisJCQlkeF9hbGxvYysrOworCQkJZHhfbGVhdmVzID0gb2NmczJfZHhfZGlyX2ttYWxsb2NfbGVhdmVzKHNiLAorCQkJCQkJCQkmbnVtX2R4X2xlYXZlcyk7CisJCQlpZiAoIWR4X2xlYXZlcykgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJLyogVGhpcyBnZXRzIHVzIHRoZSBkeF9yb290ICovCisJCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsICZtZXRhX2FjKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAKIAkvKgotCSAqIFdlIHNob3VsZCBuZXZlciBuZWVkIG1vcmUgdGhhbiAyIGNsdXN0ZXJzIGZvciB0aGlzIC0KLQkgKiBtYXhpbXVtIGRpcmVudCBzaXplIGlzIGZhciBsZXNzIHRoYW4gb25lIGJsb2NrLiBJbiBmYWN0LAotCSAqIHRoZSBvbmx5IHRpbWUgd2UnZCBuZWVkIG1vcmUgdGhhbiBvbmUgY2x1c3RlciBpcyBpZgorCSAqIFdlIHNob3VsZCBuZXZlciBuZWVkIG1vcmUgdGhhbiAyIGNsdXN0ZXJzIGZvciB0aGUgdW5pbmRleGVkCisJICogdHJlZSAtIG1heGltdW0gZGlyZW50IHNpemUgaXMgZmFyIGxlc3MgdGhhbiBvbmUgYmxvY2suIEluCisJICogZmFjdCwgdGhlIG9ubHkgdGltZSB3ZSdkIG5lZWQgbW9yZSB0aGFuIG9uZSBjbHVzdGVyIGlzIGlmCiAJICogYmxvY2tzaXplID09IGNsdXN0ZXJzaXplIGFuZCB0aGUgZGlyZW50IHdvbid0IGZpdCBpbiB0aGUKIAkgKiBleHRyYSBzcGFjZSB0aGF0IHRoZSBleHBhbnNpb24gdG8gYSBzaW5nbGUgYmxvY2sgZ2l2ZXMuIEFzCiAJICogb2YgdG9kYXksIHRoYXQgb25seSBoYXBwZW5zIG9uIDRrLzRrIGZpbGUgc3lzdGVtcy4KQEAgLTE0MzUsNyArMjk0NCw3IEBACiAKIAkvKgogCSAqIFByZXBhcmUgZm9yIHdvcnN0IGNhc2UgYWxsb2NhdGlvbiBzY2VuYXJpbyBvZiB0d28gc2VwYXJhdGUKLQkgKiBleHRlbnRzLgorCSAqIGV4dGVudHMgaW4gdGhlIHVuaW5kZXhlZCB0cmVlLgogCSAqLwogCWlmIChhbGxvYyA9PSAyKQogCQljcmVkaXRzICs9IE9DRlMyX1NVQkFMTE9DX0FMTE9DOwpAQCAtMTQ0OCwxMSArMjk1NywyOSBAQAogCX0KIAogCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCi0JCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgYWxsb2MpKSkgeworCQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsCisJCQkJCQkJYWxsb2MgKyBkeF9hbGxvYykpKSB7CiAJCXJldCA9IC1FRFFVT1Q7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAJZGlkX3F1b3RhID0gMTsKKworCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSAmJiAhZHhfaW5saW5lKSB7CisJCS8qCisJCSAqIEFsbG9jYXRlIG91ciBpbmRleCBjbHVzdGVyIGZpcnN0LCB0byBtYXhpbWl6ZSB0aGUKKwkJICogcG9zc2liaWxpdHkgdGhhdCB1bmluZGV4ZWQgbGVhdmVzIGdyb3cKKwkJICogY29udGlndW91c2x5LgorCQkgKi8KKwkJcmV0ID0gX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCAwLCBoYW5kbGUsIGRhdGFfYWMsCisJCQkJCQkgZHhfbGVhdmVzLCBudW1fZHhfbGVhdmVzLAorCQkJCQkJICZkeF9pbnNlcnRfYmxrbm8pOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwkJYnl0ZXNfYWxsb2NhdGVkICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSk7CisJfQorCiAJLyoKIAkgKiBUcnkgdG8gY2xhaW0gYXMgbWFueSBjbHVzdGVycyBhcyB0aGUgYml0bWFwIGNhbiBnaXZlIHRob3VnaAogCSAqIGlmIHdlIG9ubHkgZ2V0IG9uZSBub3csIHRoYXQncyBlbm91Z2ggdG8gY29udGludWUuIFRoZSByZXN0CkBAIC0xNDYzLDYgKzI5OTAsNyBAQAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CisJYnl0ZXNfYWxsb2NhdGVkICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSk7CiAKIAkvKgogCSAqIE9wZXJhdGlvbnMgYXJlIGNhcmVmdWxseSBvcmRlcmVkIHNvIHRoYXQgd2Ugc2V0IHVwIHRoZSBuZXcKQEAgLTE0ODksOSArMzAxNywxNiBAQAogCW1lbWNweShkaXJkYXRhX2JoLT5iX2RhdGEsIGRpLT5pZDIuaV9kYXRhLmlkX2RhdGEsIGlfc2l6ZV9yZWFkKGRpcikpOwogCW1lbXNldChkaXJkYXRhX2JoLT5iX2RhdGEgKyBpX3NpemVfcmVhZChkaXIpLCAwLAogCSAgICAgICBzYi0+c19ibG9ja3NpemUgLSBpX3NpemVfcmVhZChkaXIpKTsKLQlvY2ZzMl9leHBhbmRfbGFzdF9kaXJlbnQoZGlyZGF0YV9iaC0+Yl9kYXRhLCBpX3NpemVfcmVhZChkaXIpLCBzYik7Ci0JaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKG9zYikpCi0JCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoZGlyLCBkaXJkYXRhX2JoKTsKKwlpID0gb2NmczJfZXhwYW5kX2xhc3RfZGlyZW50KGRpcmRhdGFfYmgtPmJfZGF0YSwgaV9zaXplX3JlYWQoZGlyKSwgZGlyKTsKKwlpZiAob2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKGRpcikpIHsKKwkJLyoKKwkJICogUHJlcGFyZSB0aGUgZGlyIHRyYWlsZXIgdXAgZnJvbnQuIEl0IHdpbGwgb3RoZXJ3aXNlIGxvb2sKKwkJICogbGlrZSBhIHZhbGlkIGRpcmVudC4gRXZlbiBpZiBpbnNlcnRpbmcgdGhlIGluZGV4IGZhaWxzCisJCSAqICh1bmxpa2VseSksIHRoZW4gYWxsIHdlJ2xsIGhhdmUgZG9uZSBpcyBnaXZlbiBmaXJzdCBkaXIKKwkJICogYmxvY2sgYSBzbWFsbCBhbW91bnQgb2YgZnJhZ21lbnRhdGlvbi4KKwkJICovCisJCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoZGlyLCBkaXJkYXRhX2JoLCBpKTsKKwl9CiAKIAlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlyZGF0YV9iaCk7CiAJaWYgKHJldCkgewpAQCAtMTQ5OSw2ICszMDM0LDI0IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikgJiYgIWR4X2lubGluZSkgeworCQkvKgorCQkgKiBEeCBkaXJzIHdpdGggYW4gZXh0ZXJuYWwgY2x1c3RlciBuZWVkIHRvIGRvIHRoaXMgdXAKKwkJICogZnJvbnQuIElubGluZSBkeCByb290J3MgZ2V0IGhhbmRsZWQgbGF0ZXIsIGFmdGVyCisJCSAqIHdlJ3ZlIGFsbG9jYXRlZCBvdXIgcm9vdCBibG9jay4gV2UgZ2V0IHBhc3NlZCBiYWNrCisJCSAqIGEgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHNvIHRoYXQgZHJfbnVtX2VudHJpZXMgY2FuCisJCSAqIGJlIGNvcnJlY3RseSBzZXQgb25jZSB0aGUgZHhfcm9vdCBoYXMgYmVlbgorCQkgKiBhbGxvY2F0ZWQuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9keF9kaXJfaW5kZXhfYmxvY2soZGlyLCBoYW5kbGUsIGR4X2xlYXZlcywKKwkJCQkJICAgICAgIG51bV9keF9sZWF2ZXMsICZudW1fZHhfZW50cmllcywKKwkJCQkJICAgICAgIGRpcmRhdGFfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKwl9CisKIAkvKgogCSAqIFNldCBleHRlbnQsIGlfc2l6ZSwgZXRjIG9uIHRoZSBkaXJlY3RvcnkuIEFmdGVyIHRoaXMsIHRoZQogCSAqIGlub2RlIHNob3VsZCBjb250YWluIHRoZSBzYW1lIGV4YWN0IGRpcmVudHMgYXMgYmVmb3JlIGFuZApAQCAtMTU1MSw2ICszMTA0LDI3IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpIHsKKwkJcmV0ID0gb2NmczJfZHhfZGlyX2F0dGFjaF9pbmRleChvc2IsIGhhbmRsZSwgZGlyLCBkaV9iaCwKKwkJCQkJCWRpcmRhdGFfYmgsIG1ldGFfYWMsIGR4X2lubGluZSwKKwkJCQkJCW51bV9keF9lbnRyaWVzLCAmZHhfcm9vdF9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCisJCWlmIChkeF9pbmxpbmUpIHsKKwkJCW9jZnMyX2R4X2Rpcl9pbmRleF9yb290X2Jsb2NrKGRpciwgZHhfcm9vdF9iaCwKKwkJCQkJCSAgICAgIGRpcmRhdGFfYmgpOworCQl9IGVsc2UgeworCQkJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZkeF9ldCwgZGlyLCBkeF9yb290X2JoKTsKKwkJCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmR4X2V0LCAwLAorCQkJCQkJICBkeF9pbnNlcnRfYmxrbm8sIDEsIDAsIE5VTEwpOworCQkJaWYgKHJldCkKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCX0KKwl9CisKIAkvKgogCSAqIFdlIGFza2VkIGZvciB0d28gY2x1c3RlcnMsIGJ1dCBvbmx5IGdvdCBvbmUgaW4gdGhlIDFzdAogCSAqIHBhc3MuIENsYWltIHRoZSAybmQgY2x1c3RlciBhcyBhIHNlcGFyYXRlIGV4dGVudC4KQEAgLTE1NzAsMTUgKzMxNDQsMzIgQEAKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gb3V0X2NvbW1pdDsKIAkJfQorCQlieXRlc19hbGxvY2F0ZWQgKz0gb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKTsKIAl9CiAKIAkqZmlyc3RfYmxvY2tfYmggPSBkaXJkYXRhX2JoOwogCWRpcmRhdGFfYmggPSBOVUxMOworCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkgeworCQl1bnNpZ25lZCBpbnQgb2ZmOworCisJCWlmICghZHhfaW5saW5lKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byByZXR1cm4gdGhlIGNvcnJlY3QgYmxvY2sgd2l0aGluIHRoZQorCQkJICogY2x1c3RlciB3aGljaCBzaG91bGQgaG9sZCBvdXIgZW50cnkuCisJCQkgKi8KKwkJCW9mZiA9IG9jZnMyX2R4X2Rpcl9oYXNoX2lkeChPQ0ZTMl9TQihkaXItPmlfc2IpLAorCQkJCQkJICAgICZsb29rdXAtPmRsX2hpbmZvKTsKKwkJCWdldF9iaChkeF9sZWF2ZXNbb2ZmXSk7CisJCQlsb29rdXAtPmRsX2R4X2xlYWZfYmggPSBkeF9sZWF2ZXNbb2ZmXTsKKwkJfQorCQlsb29rdXAtPmRsX2R4X3Jvb3RfYmggPSBkeF9yb290X2JoOworCQlkeF9yb290X2JoID0gTlVMTDsKKwl9CiAKIG91dF9jb21taXQ6CiAJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQotCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKLQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIDIpKTsKKwkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsIGJ5dGVzX2FsbG9jYXRlZCk7CisKIAlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCiBvdXRfc2VtOgpAQCAtMTU4Nyw4ICszMTc4LDE3IEBACiBvdXQ6CiAJaWYgKGRhdGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOworCisJaWYgKGR4X2xlYXZlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKQorCQkJYnJlbHNlKGR4X2xlYXZlc1tpXSk7CisJCWtmcmVlKGR4X2xlYXZlcyk7CisJfQogCiAJYnJlbHNlKGRpcmRhdGFfYmgpOworCWJyZWxzZShkeF9yb290X2JoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNjU4LDExICszMjU4LDE0IEBACiAgKiBpcyB0byBiZSB0dXJuZWQgaW50byBhbiBleHRlbnQgYmFzZWQgb25lLiBUaGUgc2l6ZSBvZiB0aGUgZGlyZW50IHRvCiAgKiBpbnNlcnQgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIHNwYWNlIGdhaW5lZCBieSBncm93aW5nIHRvIGp1c3Qgb25lCiAgKiBibG9jaywgc28gd2UgbWF5IGhhdmUgdG8gZ3JvdyB0aGUgaW5vZGUgYnkgdHdvIGJsb2NrcyBpbiB0aGF0IGNhc2UuCisgKgorICogSWYgdGhlIGRpcmVjdG9yeSBpcyBhbHJlYWR5IGluZGV4ZWQsIGR4X3Jvb3RfYmggbXVzdCBiZSBwcm92aWRlZC4KICAqLwogc3RhdGljIGludCBvY2ZzMl9leHRlbmRfZGlyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAogCQkJICAgIHVuc2lnbmVkIGludCBibG9ja3Nfd2FudGVkLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm5ld19kZV9iaCkKIHsKIAlpbnQgc3RhdHVzID0gMDsKQEAgLTE2NzcsMTcgKzMyODAsMjkgQEAKIAlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICogZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IG9zYi0+c2I7CiAJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCiAJaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKKwkJLyoKKwkJICogVGhpcyB3b3VsZCBiZSBhIGNvZGUgZXJyb3IgYXMgYW4gaW5saW5lIGRpcmVjdG9yeSBzaG91bGQKKwkJICogbmV2ZXIgaGF2ZSBhbiBpbmRleCByb290LgorCQkgKi8KKwkJQlVHX09OKGR4X3Jvb3RfYmgpOworCiAJCXN0YXR1cyA9IG9jZnMyX2V4cGFuZF9pbmxpbmVfZGlyKGRpciwgcGFyZW50X2ZlX2JoLAotCQkJCQkJIGJsb2Nrc193YW50ZWQsICZuZXdfYmgpOworCQkJCQkJIGJsb2Nrc193YW50ZWQsIGxvb2t1cCwKKwkJCQkJCSAmbmV3X2JoKTsKIAkJaWYgKHN0YXR1cykgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwogCQl9CiAKKwkJLyogRXhwYW5zaW9uIGZyb20gaW5saW5lIHRvIGFuIGluZGV4ZWQgZGlyZWN0b3J5IHdpbGwKKwkJICogaGF2ZSBnaXZlbiB1cyB0aGlzLiAqLworCQlkeF9yb290X2JoID0gbG9va3VwLT5kbF9keF9yb290X2JoOworCiAJCWlmIChibG9ja3Nfd2FudGVkID09IDEpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgbmV3IGRpcmVudCB3aWxsIGZpdCBpbnNpZGUgdGhlIHNwYWNlCkBAIC0xNzUxLDYgKzMzNjYsMTAgQEAKIAl9CiAKIGRvX2V4dGVuZDoKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkKKwkJY3JlZGl0cysrOyAvKiBGb3IgYXR0YWNoaW5nIHRoZSBuZXcgZGlyZW50IGJsb2NrIHRvIHRoZQorCQkJICAgICogZHhfcm9vdCAqLworCiAJZG93bl93cml0ZSgmT0NGUzJfSShkaXIpLT5pcF9hbGxvY19zZW0pOwogCWRyb3BfYWxsb2Nfc2VtID0gMTsKIApAQCAtMTc4MSw5ICszNDAwLDE5IEBACiAKIAlkZSA9IChzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICopIG5ld19iaC0+Yl9kYXRhOwogCWRlLT5pbm9kZSA9IDA7Ci0JaWYgKG9jZnMyX2Rpcl9oYXNfdHJhaWxlcihkaXIpKSB7CisJaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKGRpcikpIHsKIAkJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHNiKSk7Ci0JCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoZGlyLCBuZXdfYmgpOworCisJCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoZGlyLCBuZXdfYmgsIGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKSk7CisKKwkJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpIHsKKwkJCXN0YXR1cyA9IG9jZnMyX2R4X2Rpcl9saW5rX3RyYWlsZXIoZGlyLCBoYW5kbGUsCisJCQkJCQkJICAgZHhfcm9vdF9iaCwgbmV3X2JoKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CiAJfSBlbHNlIHsKIAkJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihzYi0+c19ibG9ja3NpemUpOwogCX0KQEAgLTE4MzksNyArMzQ2OCw3IEBACiAJICogVGhpcyBjYWxjdWxhdGVzIGhvdyBtYW55IGZyZWUgYnl0ZXMgd2UnZCBoYXZlIGluIGJsb2NrIHplcm8sIHNob3VsZAogCSAqIHRoaXMgZnVuY3Rpb24gZm9yY2UgZXhwYW5zaW9uIHRvIGFuIGV4dGVudCB0cmVlLgogCSAqLwotCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihPQ0ZTMl9TQihzYikpKQorCWlmIChvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoZGlyKSkKIAkJZnJlZV9zcGFjZSA9IG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYoc2IpIC0gaV9zaXplX3JlYWQoZGlyKTsKIAllbHNlCiAJCWZyZWVfc3BhY2UgPSBkaXItPmlfc2ItPnNfYmxvY2tzaXplIC0gaV9zaXplX3JlYWQoZGlyKTsKQEAgLTE5NzAsMTIgKzM1OTksNzY2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGludCBkeF9sZWFmX3NvcnRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IG9jZnMyX2R4X2VudHJ5ICplbnRyeTEgPSBhOworCWNvbnN0IHN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZW50cnkyID0gYjsKKwl1MzIgbWFqb3JfaGFzaDEgPSBsZTMyX3RvX2NwdShlbnRyeTEtPmR4X21ham9yX2hhc2gpOworCXUzMiBtYWpvcl9oYXNoMiA9IGxlMzJfdG9fY3B1KGVudHJ5Mi0+ZHhfbWFqb3JfaGFzaCk7CisJdTMyIG1pbm9yX2hhc2gxID0gbGUzMl90b19jcHUoZW50cnkxLT5keF9taW5vcl9oYXNoKTsKKwl1MzIgbWlub3JfaGFzaDIgPSBsZTMyX3RvX2NwdShlbnRyeTItPmR4X21pbm9yX2hhc2gpOworCisJaWYgKG1ham9yX2hhc2gxID4gbWFqb3JfaGFzaDIpCisJCXJldHVybiAxOworCWlmIChtYWpvcl9oYXNoMSA8IG1ham9yX2hhc2gyKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIEl0IGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gc29ydCBieSBtaW5vcgorCSAqLworCWlmIChtaW5vcl9oYXNoMSA+IG1pbm9yX2hhc2gyKQorCQlyZXR1cm4gMTsKKwlpZiAobWlub3JfaGFzaDEgPCBtaW5vcl9oYXNoMikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkeF9sZWFmX3NvcnRfc3dhcCh2b2lkICphLCB2b2lkICpiLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmVudHJ5MSA9IGE7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICplbnRyeTIgPSBiOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSB0bXA7CisKKwlCVUdfT04oc2l6ZSAhPSBzaXplb2YoKmVudHJ5MSkpOworCisJdG1wID0gKmVudHJ5MTsKKwkqZW50cnkxID0gKmVudHJ5MjsKKwkqZW50cnkyID0gdG1wOworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2xlYWZfc2FtZV9tYWpvcihzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZikKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZGxfbGlzdCA9ICZkeF9sZWFmLT5kbF9saXN0OworCWludCBpLCBudW0gPSBsZTE2X3RvX2NwdShkbF9saXN0LT5kZV9udW1fdXNlZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKG51bSAtIDEpOyBpKyspIHsKKwkJaWYgKGxlMzJfdG9fY3B1KGRsX2xpc3QtPmRlX2VudHJpZXNbaV0uZHhfbWFqb3JfaGFzaCkgIT0KKwkJICAgIGxlMzJfdG9fY3B1KGRsX2xpc3QtPmRlX2VudHJpZXNbaSArIDFdLmR4X21ham9yX2hhc2gpKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBvcHRpbWFsIHZhbHVlIHRvIHNwbGl0IHRoaXMgbGVhZiBvbi4gVGhpcyBleHBlY3RzIHRoZSBsZWFmCisgKiBlbnRyaWVzIHRvIGJlIGluIHNvcnRlZCBvcmRlci4KKyAqCisgKiBsZWFmX2Nwb3MgaXMgdGhlIGNwb3Mgb2YgdGhlIGxlYWYgd2UncmUgc3BsaXR0aW5nLiBpbnNlcnRfaGFzaCBpcworICogdGhlIGhhc2ggd2Ugd2FudCB0byBpbnNlcnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNvbmNlcm5lZCB3aXRoIHRoZSBtYWpvciBoYXNoIC0gdGhhdCB3aGljaAorICogZGV0ZXJtaW5lcyB3aGljaCBjbHVzdGVyIGFuIGl0ZW0gYmVsb25ncyB0by4KKyAqLworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfZmluZF9sZWFmX3NwbGl0KHN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmLAorCQkJCQl1MzIgbGVhZl9jcG9zLCB1MzIgaW5zZXJ0X2hhc2gsCisJCQkJCXUzMiAqc3BsaXRfaGFzaCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZGxfbGlzdCA9ICZkeF9sZWFmLT5kbF9saXN0OworCWludCBpLCBudW1fdXNlZCA9IGxlMTZfdG9fY3B1KGRsX2xpc3QtPmRlX251bV91c2VkKTsKKwlpbnQgYWxsc2FtZTsKKworCS8qCisJICogVGhlcmUncyBhIGNvdXBsZSByYXJlLCBidXQgbmFzdHkgY29ybmVyIGNhc2VzIHdlIGhhdmUgdG8KKwkgKiBjaGVjayBmb3IgaGVyZS4gQWxsIG9mIHRoZW0gaW52b2x2ZSBhIGxlYWYgd2hlcmUgYWxsIHZhbHVlCisJICogaGF2ZSB0aGUgc2FtZSBoYXNoLCB3aGljaCBpcyB3aGF0IHdlIGxvb2sgZm9yIGZpcnN0LgorCSAqCisJICogTW9zdCBvZiB0aGUgdGltZSwgYWxsIG9mIHRoZSBhYm92ZSBpcyBmYWxzZSwgYW5kIHdlIHNpbXBseQorCSAqIHBpY2sgdGhlIG1lZGlhbiB2YWx1ZSBmb3IgYSBzcGxpdC4KKwkgKi8KKwlhbGxzYW1lID0gb2NmczJfZHhfbGVhZl9zYW1lX21ham9yKGR4X2xlYWYpOworCWlmIChhbGxzYW1lKSB7CisJCXUzMiB2YWwgPSBsZTMyX3RvX2NwdShkbF9saXN0LT5kZV9lbnRyaWVzWzBdLmR4X21ham9yX2hhc2gpOworCisJCWlmICh2YWwgPT0gaW5zZXJ0X2hhc2gpIHsKKwkJCS8qCisJCQkgKiBObyBtYXR0ZXIgd2hlcmUgd2Ugd291bGQgY2hvb3NlIHRvIHNwbGl0LAorCQkJICogdGhlIG5ldyBlbnRyeSB3b3VsZCB3YW50IHRvIG9jY3VweSB0aGUgc2FtZQorCQkJICogYmxvY2sgYXMgdGhlc2UuIFNpbmNlIHRoZXJlJ3Mgbm8gc3BhY2UgbGVmdAorCQkJICogaW4gdGhlaXIgZXhpc3RpbmcgYmxvY2ssIHdlIGtub3cgdGhlcmUKKwkJCSAqIHdvbid0IGJlIHNwYWNlIGFmdGVyIHRoZSBzcGxpdC4KKwkJCSAqLworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKworCQlpZiAodmFsID09IGxlYWZfY3BvcykgeworCQkJLyoKKwkJCSAqIEJlY2F1c2UgdmFsIGlzIHRoZSBzYW1lIGFzIGxlYWZfY3BvcyAod2hpY2gKKwkJCSAqIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSB0aGlzIGxlYWYgY2FuIGhhdmUpLAorCQkJICogeWV0IGlzIG5vdCBlcXVhbCB0byBpbnNlcnRfaGFzaCwgdGhlbiB3ZQorCQkJICoga25vdyB0aGF0IGluc2VydF9oYXNoICptdXN0KiBiZSBsYXJnZXIgdGhhbgorCQkJICogdmFsIChhbmQgbGVhZl9jcG9zKS4gQXQgbGVhc3QgY3BvcysxIGluIHZhbHVlLgorCQkJICoKKwkJCSAqIFdlIGFsc28ga25vdyB0aGVuLCB0aGF0IHRoZXJlIGNhbm5vdCBiZSBhbgorCQkJICogYWRqYWNlbnQgZXh0ZW50IChvdGhlcndpc2Ugd2UnZCBiZSBsb29raW5nCisJCQkgKiBhdCBpdCkuIENob29zaW5nIHRoaXMgdmFsdWUgZ2l2ZXMgdXMgYQorCQkJICogY2hhbmNlIHRvIGdldCBzb21lIGNvbnRpZ3VvdXNuZXNzLgorCQkJICovCisJCQkqc3BsaXRfaGFzaCA9IGxlYWZfY3BvcyArIDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICh2YWwgPiBpbnNlcnRfaGFzaCkgeworCQkJLyoKKwkJCSAqIHZhbCBjYW4gbm90IGJlIHRoZSBzYW1lIGFzIGluc2VydCBoYXNoLCBhbmQKKwkJCSAqIGFsc28gbXVzdCBiZSBsYXJnZXIgdGhhbiBsZWFmX2Nwb3MuIEFsc28sCisJCQkgKiB3ZSBrbm93IHRoYXQgdGhlcmUgY2FuJ3QgYmUgYSBsZWFmIGJldHdlZW4KKwkJCSAqIGNwb3MgYW5kIHZhbCwgb3RoZXJ3aXNlIHRoZSBlbnRyaWVzIHdpdGgKKwkJCSAqIGhhc2ggJ3ZhbCcgd291bGQgYmUgdGhlcmUuCisJCQkgKi8KKwkJCSpzcGxpdF9oYXNoID0gdmFsOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkqc3BsaXRfaGFzaCA9IGluc2VydF9oYXNoOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoZSByZWNvcmRzIGFyZSBzb3J0ZWQgYW5kIHRoZSBjaGVja3MgYWJvdmUKKwkgKiBndWFyYW50ZWVkIHRoYXQgbm90IGFsbCByZWNvcmRzIGluIHRoaXMgYmxvY2sgYXJlIHRoZSBzYW1lLAorCSAqIHdlIHNpbXBsZSB0cmF2ZWwgZm9yd2FyZCwgZnJvbSB0aGUgbWVkaWFuLCBhbmQgcGljayB0aGUgMXN0CisJICogcmVjb3JkIHdob3NlIHZhbHVlIGlzIGxhcmdlciB0aGFuIGxlYWZfY3Bvcy4KKwkgKi8KKwlmb3IgKGkgPSAobnVtX3VzZWQgLyAyKTsgaSA8IG51bV91c2VkOyBpKyspCisJCWlmIChsZTMyX3RvX2NwdShkbF9saXN0LT5kZV9lbnRyaWVzW2ldLmR4X21ham9yX2hhc2gpID4KKwkJICAgIGxlYWZfY3BvcykKKwkJCWJyZWFrOworCisJQlVHX09OKGkgPT0gbnVtX3VzZWQpOyAvKiBTaG91bGQgYmUgaW1wb3NzaWJsZSAqLworCSpzcGxpdF9oYXNoID0gbGUzMl90b19jcHUoZGxfbGlzdC0+ZGVfZW50cmllc1tpXS5keF9tYWpvcl9oYXNoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRyYW5zZmVyIGFsbCBlbnRyaWVzIGluIG9yaWdfZHhfbGVhdmVzIHdob3NlIG1ham9yIGhhc2ggaXMgZXF1YWwgdG8gb3IKKyAqIGxhcmdlciB0aGFuIHNwbGl0X2hhc2ggaW50byBuZXdfZHhfbGVhdmVzLiBXZSB1c2UgYSB0ZW1wb3JhcnkKKyAqIGJ1ZmZlciAodG1wX2R4X2xlYWYpIHRvIG1ha2UgdGhlIGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGxlYWYgYmxvY2tzLgorICoKKyAqIFNpbmNlIHRoZSBibG9jayBvZmZzZXQgaW5zaWRlIGEgbGVhZiAoY2x1c3RlcikgaXMgYSBjb25zdGFudCBtYXNrCisgKiBvZiBtaW5vcl9oYXNoLCB3ZSBjYW4gb3B0aW1pemUgLSBhbiBpdGVtIGF0IGJsb2NrIG9mZnNldCBYIHdpdGhpbgorICogdGhlIG9yaWdpbmFsIGNsdXN0ZXIsIHdpbGwgYmUgYXQgb2Zmc2V0IFggd2l0aGluIHRoZSBuZXcgY2x1c3Rlci4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfZHhfZGlyX3RyYW5zZmVyX2xlYWYoc3RydWN0IGlub2RlICpkaXIsIHUzMiBzcGxpdF9oYXNoLAorCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqdG1wX2R4X2xlYWYsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKm9yaWdfZHhfbGVhdmVzLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZHhfbGVhdmVzLAorCQkJCSAgICAgICBpbnQgbnVtX2R4X2xlYXZlcykKK3sKKwlpbnQgaSwgaiwgbnVtX3VzZWQ7CisJdTMyIG1ham9yX2hhc2g7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKm9yaWdfZHhfbGVhZiwgKm5ld19keF9sZWFmOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICpvcmlnX2xpc3QsICpuZXdfbGlzdCwgKnRtcF9saXN0OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfZW50cnk7CisKKwl0bXBfbGlzdCA9ICZ0bXBfZHhfbGVhZi0+ZGxfbGlzdDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKKwkJb3JpZ19keF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopIG9yaWdfZHhfbGVhdmVzW2ldLT5iX2RhdGE7CisJCW9yaWdfbGlzdCA9ICZvcmlnX2R4X2xlYWYtPmRsX2xpc3Q7CisJCW5ld19keF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopIG5ld19keF9sZWF2ZXNbaV0tPmJfZGF0YTsKKwkJbmV3X2xpc3QgPSAmbmV3X2R4X2xlYWYtPmRsX2xpc3Q7CisKKwkJbnVtX3VzZWQgPSBsZTE2X3RvX2NwdShvcmlnX2xpc3QtPmRlX251bV91c2VkKTsKKworCQltZW1jcHkodG1wX2R4X2xlYWYsIG9yaWdfZHhfbGVhZiwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCXRtcF9saXN0LT5kZV9udW1fdXNlZCA9IGNwdV90b19sZTE2KDApOworCQltZW1zZXQoJnRtcF9saXN0LT5kZV9lbnRyaWVzLCAwLCBzaXplb2YoKmR4X2VudHJ5KSpudW1fdXNlZCk7CisKKwkJZm9yIChqID0gMDsgaiA8IG51bV91c2VkOyBqKyspIHsKKwkJCWR4X2VudHJ5ID0gJm9yaWdfbGlzdC0+ZGVfZW50cmllc1tqXTsKKwkJCW1ham9yX2hhc2ggPSBsZTMyX3RvX2NwdShkeF9lbnRyeS0+ZHhfbWFqb3JfaGFzaCk7CisJCQlpZiAobWFqb3JfaGFzaCA+PSBzcGxpdF9oYXNoKQorCQkJCW9jZnMyX2R4X2Rpcl9sZWFmX2luc2VydF90YWlsKG5ld19keF9sZWFmLAorCQkJCQkJCSAgICAgIGR4X2VudHJ5KTsKKwkJCWVsc2UKKwkJCQlvY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnRfdGFpbCh0bXBfZHhfbGVhZiwKKwkJCQkJCQkgICAgICBkeF9lbnRyeSk7CisJCX0KKwkJbWVtY3B5KG9yaWdfZHhfbGVhZiwgdG1wX2R4X2xlYWYsIGRpci0+aV9zYi0+c19ibG9ja3NpemUpOworCisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBvcmlnX2R4X2xlYXZlc1tpXSk7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdfZHhfbGVhdmVzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX3JlYmFsYW5jZV9jcmVkaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290KQoreworCWludCBjcmVkaXRzID0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKG9zYi0+c2IsIDIpOworCisJY3JlZGl0cyArPSBvY2ZzMl9jYWxjX2V4dGVuZF9jcmVkaXRzKG9zYi0+c2IsICZkeF9yb290LT5kcl9saXN0LCAxKTsKKwljcmVkaXRzICs9IG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMob3NiLT5zYik7CisJcmV0dXJuIGNyZWRpdHM7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBtZWRpYW4gdmFsdWUgaW4gZHhfbGVhZl9iaCBhbmQgYWxsb2NhdGUgYSBuZXcgbGVhZiB0byBtb3ZlCisgKiBoYWxmIG91ciBlbnRyaWVzIGludG8uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX3JlYmFsYW5jZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgc3RydWN0IGlub2RlICpkaXIsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2xlYWZfYmgsCisJCQkJICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvLCB1MzIgbGVhZl9jcG9zLAorCQkJCSAgdTY0IGxlYWZfYmxrbm8pCit7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKilkeF9sZWFmX2JoLT5iX2RhdGE7CisJaW50IGNyZWRpdHMsIHJldCwgaSwgbnVtX3VzZWQsIGRpZF9xdW90YSA9IDA7CisJdTMyIGNwb3MsIHNwbGl0X2hhc2gsIGluc2VydF9oYXNoID0gaGluZm8tPm1ham9yX2hhc2g7CisJdTY0IG9yaWdfbGVhdmVzX3N0YXJ0OworCWludCBudW1fZHhfbGVhdmVzOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKm9yaWdfZHhfbGVhdmVzID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZHhfbGVhdmVzID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEwsICptZXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgZXQ7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKnRtcF9keF9sZWFmID0gTlVMTDsKKworCW1sb2coMCwgIkRYIERpcjogJWxsdSwgcmViYWxhbmNlIGxlYWYgbGVhZl9ibGtubzogJWxsdSBpbnNlcnQ6ICV1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWFmX2Jsa25vLCBpbnNlcnRfaGFzaCk7CisKKwlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwkvKgorCSAqIFhYWDogVGhpcyBpcyBhIHJhdGhlciBsYXJnZSBsaW1pdC4gV2Ugc2hvdWxkIHVzZSBhIG1vcmUKKwkgKiByZWFsaXN0aWMgdmFsdWUuCisJICovCisJaWYgKGxlMzJfdG9fY3B1KGR4X3Jvb3QtPmRyX2NsdXN0ZXJzKSA9PSBVSU5UX01BWCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwludW1fdXNlZCA9IGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfbnVtX3VzZWQpOworCWlmIChudW1fdXNlZCA8IGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfY291bnQpKSB7CisJCW1sb2coTUxfRVJST1IsICJEWCBEaXI6ICVsbHUsIEFza2VkIHRvIHJlYmFsYW5jZSBlbXB0eSBsZWFmOiAiCisJCSAgICAgIiVsbHUsICVkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWFmX2Jsa25vLCBudW1fdXNlZCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCW9yaWdfZHhfbGVhdmVzID0gb2NmczJfZHhfZGlyX2ttYWxsb2NfbGVhdmVzKG9zYi0+c2IsICZudW1fZHhfbGVhdmVzKTsKKwlpZiAoIW9yaWdfZHhfbGVhdmVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbmV3X2R4X2xlYXZlcyA9IG9jZnMyX2R4X2Rpcl9rbWFsbG9jX2xlYXZlcyhvc2ItPnNiLCBOVUxMKTsKKwlpZiAoIW5ld19keF9sZWF2ZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9sb2NrX2FsbG9jYXRvcnMoZGlyLCAmZXQsIDEsIDAsICZkYXRhX2FjLCAmbWV0YV9hYyk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWNyZWRpdHMgPSBvY2ZzMl9keF9kaXJfcmViYWxhbmNlX2NyZWRpdHMob3NiLCBkeF9yb290KTsKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWhhbmRsZSA9IE5VTEw7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGRpciwKKwkJCQkgICAgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoZGlyLT5pX3NiLCAxKSkpIHsKKwkJcmV0ID0gLUVEUVVPVDsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKwlkaWRfcXVvdGEgPSAxOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIGR4X2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIGJsb2NrIGlzIGNoYW5naW5nIGFueXdheSwgc28gd2UgY2FuIHNvcnQgaXQgaW4gcGxhY2UuCisJICovCisJc29ydChkeF9sZWFmLT5kbF9saXN0LmRlX2VudHJpZXMsIG51bV91c2VkLAorCSAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9keF9lbnRyeSksIGR4X2xlYWZfc29ydF9jbXAsCisJICAgICBkeF9sZWFmX3NvcnRfc3dhcCk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9keF9kaXJfZmluZF9sZWFmX3NwbGl0KGR4X2xlYWYsIGxlYWZfY3BvcywgaW5zZXJ0X2hhc2gsCisJCQkJCSAgICZzcGxpdF9oYXNoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byAgb3V0X2NvbW1pdDsKKwl9CisKKwltbG9nKDAsICJTcGxpdCBsZWFmICgldSkgYXQgJXUsIGluc2VydCBtYWpvciBoYXNoIGlzICV1XG4iLAorCSAgICAgbGVhZl9jcG9zLCBzcGxpdF9oYXNoLCBpbnNlcnRfaGFzaCk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gY2FyZWZ1bGx5IG9yZGVyIG9wZXJhdGlvbnMgaGVyZS4gVGhlcmUgYXJlIGl0ZW1zCisJICogd2hpY2ggd2FudCB0byBiZSBpbiB0aGUgbmV3IGNsdXN0ZXIgYmVmb3JlIGluc2VydCwgYnV0IGluCisJICogb3JkZXIgdG8gcHV0IHRob3NlIGl0ZW1zIGluIHRoZSBuZXcgY2x1c3Rlciwgd2UgYWx0ZXIgdGhlCisJICogb2xkIGNsdXN0ZXIuIEEgZmFpbHVyZSB0byBpbnNlcnQgZ2V0cyBuYXN0eS4KKwkgKgorCSAqIFNvLCBzdGFydCBieSByZXNlcnZpbmcgd3JpdGVzIHRvIHRoZSBvbGQKKwkgKiBjbHVzdGVyLiBvY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIgd2lsbCByZXNlcnZlIHdyaXRlcyBvbgorCSAqIHRoZSBuZXcgY2x1c3RlciBmb3IgdXMsIGJlZm9yZSBpbnNlcnRpbmcgaXQuIFRoZSBpbnNlcnQKKwkgKiB3b24ndCBoYXBwZW4gaWYgdGhlcmUncyBhbiBlcnJvciBiZWZvcmUgdGhhdC4gT25jZSB0aGUKKwkgKiBpbnNlcnQgaXMgZG9uZSB0aGVuLCB3ZSBjYW4gdHJhbnNmZXIgZnJvbSBvbmUgbGVhZiBpbnRvIHRoZQorCSAqIG90aGVyIHdpdGhvdXQgZmVhciBvZiBoaXR0aW5nIGFueSBlcnJvci4KKwkgKi8KKworCS8qCisJICogVGhlIGxlYWYgdHJhbnNmZXIgd2FudHMgc29tZSBzY3JhdGNoIHNwYWNlIHNvIHRoYXQgd2UgZG9uJ3QKKwkgKiB3aW5kIHVwIGRvaW5nIGEgYnVuY2ggb2YgZXhwZW5zaXZlIG1lbW1vdmUoKS4KKwkgKi8KKwl0bXBfZHhfbGVhZiA9IGttYWxsb2Mob3NiLT5zYi0+c19ibG9ja3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIXRtcF9keF9sZWFmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW9yaWdfbGVhdmVzX3N0YXJ0ID0gb2NmczJfYmxvY2tfdG9fY2x1c3Rlcl9zdGFydChkaXItPmlfc2IsIGxlYWZfYmxrbm8pOworCXJldCA9IG9jZnMyX3JlYWRfZHhfbGVhdmVzKGRpciwgb3JpZ19sZWF2ZXNfc3RhcnQsIG51bV9keF9sZWF2ZXMsCisJCQkJICAgb3JpZ19keF9sZWF2ZXMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwgb3JpZ19keF9sZWF2ZXNbaV0sCisJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCisJY3BvcyA9IHNwbGl0X2hhc2g7CisJcmV0ID0gb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKGRpciwgJmV0LCBjcG9zLCBoYW5kbGUsCisJCQkJICAgICAgIGRhdGFfYWMsIG1ldGFfYWMsIG5ld19keF9sZWF2ZXMsCisJCQkJICAgICAgIG51bV9keF9sZWF2ZXMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJb2NmczJfZHhfZGlyX3RyYW5zZmVyX2xlYWYoZGlyLCBzcGxpdF9oYXNoLCBoYW5kbGUsIHRtcF9keF9sZWFmLAorCQkJCSAgIG9yaWdfZHhfbGVhdmVzLCBuZXdfZHhfbGVhdmVzLCBudW1fZHhfbGVhdmVzKTsKKworb3V0X2NvbW1pdDoKKwlpZiAocmV0IDwgMCAmJiBkaWRfcXVvdGEpCisJCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoZGlyLAorCQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSkpOworCisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChvcmlnX2R4X2xlYXZlcyB8fCBuZXdfZHhfbGVhdmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKKwkJCWlmIChvcmlnX2R4X2xlYXZlcykKKwkJCQlicmVsc2Uob3JpZ19keF9sZWF2ZXNbaV0pOworCQkJaWYgKG5ld19keF9sZWF2ZXMpCisJCQkJYnJlbHNlKG5ld19keF9sZWF2ZXNbaV0pOworCQl9CisJCWtmcmVlKG9yaWdfZHhfbGVhdmVzKTsKKwkJa2ZyZWUobmV3X2R4X2xlYXZlcyk7CisJfQorCisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKwlpZiAoZGF0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCisJa2ZyZWUodG1wX2R4X2xlYWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZmluZF9kaXJfc3BhY2VfZHgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQsIHJlYmFsYW5jZWQgPSAwOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWY7CisJdTY0IGJsa25vOworCXUzMiBsZWFmX2Nwb3M7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCityZXN0YXJ0X3NlYXJjaDoKKwlyZXQgPSBvY2ZzMl9keF9kaXJfbG9va3VwKGRpciwgJmR4X3Jvb3QtPmRyX2xpc3QsICZsb29rdXAtPmRsX2hpbmZvLAorCQkJCSAgJmxlYWZfY3BvcywgJmJsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfcmVhZF9keF9sZWFmKGRpciwgYmxrbm8sICZkeF9sZWFmX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKWR4X2xlYWZfYmgtPmJfZGF0YTsKKworCWlmIChsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX251bV91c2VkKSA+PQorCSAgICBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX2NvdW50KSkgeworCQlpZiAocmViYWxhbmNlZCkgeworCQkJLyoKKwkJCSAqIFJlYmFsYW5jaW5nIHNob3VsZCBoYXZlIHByb3ZpZGVkIHVzIHdpdGgKKwkJCSAqIHNwYWNlIGluIGFuIGFwcHJvcHJpYXRlIGxlYWYuCisJCQkgKgorCQkJICogWFhYOiBJcyB0aGlzIGFuIGFibm9ybWFsIGNvbmRpdGlvbiB0aGVuPworCQkJICogU2hvdWxkIHdlIHByaW50IGEgbWVzc2FnZSBoZXJlPworCQkJICovCisJCQlyZXQgPSAtRU5PU1BDOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBvY2ZzMl9keF9kaXJfcmViYWxhbmNlKG9zYiwgZGlyLCBkeF9yb290X2JoLCBkeF9sZWFmX2JoLAorCQkJCQkgICAgICZsb29rdXAtPmRsX2hpbmZvLCBsZWFmX2Nwb3MsCisJCQkJCSAgICAgYmxrbm8pOworCQlpZiAocmV0KSB7CisJCQlpZiAocmV0ICE9IC1FTk9TUEMpCisJCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBSZXN0YXJ0IHRoZSBsb29rdXAuIFRoZSByZWJhbGFuY2UgbWlnaHQgaGF2ZQorCQkgKiBjaGFuZ2VkIHdoaWNoIGJsb2NrIG91ciBpdGVtIGZpdHMgaW50by4gTWFyayBvdXIKKwkJICogcHJvZ3Jlc3MsIHNvIHdlIG9ubHkgZXhlY3V0ZSB0aGlzIG9uY2UuCisJCSAqLworCQlicmVsc2UoZHhfbGVhZl9iaCk7CisJCWR4X2xlYWZfYmggPSBOVUxMOworCQlyZWJhbGFuY2VkID0gMTsKKwkJZ290byByZXN0YXJ0X3NlYXJjaDsKKwl9CisKKwlsb29rdXAtPmRsX2R4X2xlYWZfYmggPSBkeF9sZWFmX2JoOworCWR4X2xlYWZfYmggPSBOVUxMOworCitvdXQ6CisJYnJlbHNlKGR4X2xlYWZfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc2VhcmNoX2R4X2ZyZWVfbGlzdChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCwKKwkJCQkgICAgIGludCBuYW1lbGVuLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldCA9IC1FTk9TUEM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpsZWFmX2JoID0gTlVMTCwgKnByZXZfbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICpkYjsKKwl1NjQgbmV4dF9ibG9jazsKKwlpbnQgcmVjX2xlbiA9IE9DRlMyX0RJUl9SRUNfTEVOKG5hbWVsZW4pOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwluZXh0X2Jsb2NrID0gbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfZnJlZV9ibGspOworCisJd2hpbGUgKG5leHRfYmxvY2spIHsKKwkJYnJlbHNlKHByZXZfbGVhZl9iaCk7CisJCXByZXZfbGVhZl9iaCA9IGxlYWZfYmg7CisJCWxlYWZfYmggPSBOVUxMOworCisJCXJldCA9IG9jZnMyX3JlYWRfZGlyX2Jsb2NrX2RpcmVjdChkaXIsIG5leHRfYmxvY2ssICZsZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlkYiA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaChsZWFmX2JoLCBkaXItPmlfc2IpOworCQlpZiAocmVjX2xlbiA8PSBsZTE2X3RvX2NwdShkYi0+ZGJfZnJlZV9yZWNfbGVuKSkgeworCQkJbG9va3VwLT5kbF9sZWFmX2JoID0gbGVhZl9iaDsKKwkJCWxvb2t1cC0+ZGxfcHJldl9sZWFmX2JoID0gcHJldl9sZWFmX2JoOworCQkJbGVhZl9iaCA9IE5VTEw7CisJCQlwcmV2X2xlYWZfYmggPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQluZXh0X2Jsb2NrID0gbGU2NF90b19jcHUoZGItPmRiX2ZyZWVfbmV4dCk7CisJfQorCisJaWYgKCFuZXh0X2Jsb2NrKQorCQlyZXQgPSAtRU5PU1BDOworCitvdXQ6CisKKwlicmVsc2UobGVhZl9iaCk7CisJYnJlbHNlKHByZXZfbGVhZl9iaCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9leHBhbmRfaW5saW5lX2R4X3Jvb3Qoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCkKK3sKKwlpbnQgcmV0LCBudW1fZHhfbGVhdmVzLCBpLCBqLCBkaWRfcXVvdGEgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCAqKmR4X2xlYXZlcyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCXU2NCBpbnNlcnRfYmxrbm87CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X2VudHJ5OworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICp0YXJnZXRfbGVhZjsKKworCXJldCA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCAxLCAmZGF0YV9hYyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X2xlYXZlcyA9IG9jZnMyX2R4X2Rpcl9rbWFsbG9jX2xlYXZlcyhvc2ItPnNiLCAmbnVtX2R4X2xlYXZlcyk7CisJaWYgKCFkeF9sZWF2ZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX2NhbGNfZHhpX2V4cGFuZF9jcmVkaXRzKG9zYi0+c2IpKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCisJCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIDEpKSkgeworCQlyZXQgPSAtRURRVU9UOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCWRpZF9xdW90YSA9IDE7CisKKwkvKgorCSAqIFdlIGRvIHRoaXMgdXAgZnJvbnQsIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiwgc28gdGhhdCBhCisJICogZmFpbHVyZSB0byBhZGQgdGhlIGR4X3Jvb3RfYmggdG8gdGhlIGpvdXJuYWwgd29uJ3QgcmVzdWx0CisJICogdXMgbG9zaW5nIGNsdXN0ZXJzLgorCSAqLworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCXJldCA9IF9fb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKGRpciwgMCwgaGFuZGxlLCBkYXRhX2FjLCBkeF9sZWF2ZXMsCisJCQkJCSBudW1fZHhfbGVhdmVzLCAmaW5zZXJ0X2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCS8qCisJICogVHJhbnNmZXIgdGhlIGVudHJpZXMgZnJvbSBvdXIgZHhfcm9vdCBpbnRvIHRoZSBhcHByb3ByaWF0ZQorCSAqIGJsb2NrCisJICovCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKSBkeF9yb290X2JoLT5iX2RhdGE7CisJZW50cnlfbGlzdCA9ICZkeF9yb290LT5kcl9lbnRyaWVzOworCisJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX251bV91c2VkKTsgaSsrKSB7CisJCWR4X2VudHJ5ID0gJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbaV07CisKKwkJaiA9IF9fb2NmczJfZHhfZGlyX2hhc2hfaWR4KG9zYiwKKwkJCQkJICAgIGxlMzJfdG9fY3B1KGR4X2VudHJ5LT5keF9taW5vcl9oYXNoKSk7CisJCXRhcmdldF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopZHhfbGVhdmVzW2pdLT5iX2RhdGE7CisKKwkJb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0X3RhaWwodGFyZ2V0X2xlYWYsIGR4X2VudHJ5KTsKKworCQkvKiBFYWNoIGxlYWYgaGFzIGJlZW4gcGFzc2VkIHRvIHRoZSBqb3VybmFsIGFscmVhZHkKKwkJICogdmlhIF9fb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKCkgKi8KKwl9CisKKwlkeF9yb290LT5kcl9mbGFncyAmPSB+T0NGUzJfRFhfRkxBR19JTkxJTkU7CisJbWVtc2V0KCZkeF9yb290LT5kcl9saXN0LCAwLCBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrLCBkcl9saXN0KSk7CisJZHhfcm9vdC0+ZHJfbGlzdC5sX2NvdW50ID0KKwkJY3B1X3RvX2xlMTYob2NmczJfZXh0ZW50X3JlY3NfcGVyX2R4X3Jvb3Qob3NiLT5zYikpOworCisJLyogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCBjb25zaWRlcmluZyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5CisJICogZHhfcm9vdC4gKi8KKwlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOworCXJldCA9IG9jZnMyX2luc2VydF9leHRlbnQob3NiLCBoYW5kbGUsIGRpciwgJmV0LCAwLAorCQkJCSAgaW5zZXJ0X2Jsa25vLCAxLCAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisJZGlkX3F1b3RhID0gMDsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKworb3V0X2NvbW1pdDoKKwlpZiAocmV0IDwgMCAmJiBkaWRfcXVvdGEpCisJCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoZGlyLAorCQkJCQkgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSkpOworCisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0OgorCWlmIChkYXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CisKKwlpZiAoZHhfbGVhdmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspCisJCQlicmVsc2UoZHhfbGVhdmVzW2ldKTsKKwkJa2ZyZWUoZHhfbGVhdmVzKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9pbmxpbmVfZHhfaGFzX3NwYWNlKHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdDsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKikgZHhfcm9vdF9iaC0+Yl9kYXRhOworCWVudHJ5X2xpc3QgPSAmZHhfcm9vdC0+ZHJfZW50cmllczsKKworCWlmIChsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCkgPj0KKwkgICAgbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfY291bnQpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX3ByZXBhcmVfZHhfZGlyX2Zvcl9pbnNlcnQoc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgIGludCBuYW1lbGVuLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0LCBmcmVlX2R4X3Jvb3QgPSAxOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbGVhZl9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X3Jvb3QoZGlyLCBkaSwgJmR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCWlmIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9udW1fZW50cmllcykgPT0gT0NGUzJfRFhfRU5UUklFU19NQVgpIHsKKwkJcmV0ID0gLUVOT1NQQzsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAob2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpIHsKKwkJcmV0ID0gb2NmczJfaW5saW5lX2R4X2hhc19zcGFjZShkeF9yb290X2JoKTsKKworCQlpZiAocmV0ID09IDApCisJCQlnb3RvIHNlYXJjaF9lbDsKKworCQkvKgorCQkgKiBXZSByYW4gb3V0IG9mIHJvb20gaW4gdGhlIHJvb3QgYmxvY2suIEV4cGFuZCBpdCB0bworCQkgKiBhbiBleHRlbnQsIHRoZW4gYWxsb3cgb2NmczJfZmluZF9kaXJfc3BhY2VfZHggdG8gZG8KKwkJICogdGhlIHJlc3QuCisJCSAqLworCQlyZXQgPSBvY2ZzMl9leHBhbmRfaW5saW5lX2R4X3Jvb3QoZGlyLCBkeF9yb290X2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEluc2VydCBwcmVwYXJhdGlvbiBmb3IgYW4gaW5kZXhlZCBkaXJlY3RvcnkgaXMgc3BsaXQgaW50byB0d28KKwkgKiBzdGVwcy4gVGhlIGNhbGwgdG8gZmluZF9kaXJfc3BhY2VfZHggcmVzZXJ2ZXMgcm9vbSBpbiB0aGUgaW5kZXggZm9yCisJICogYW4gYWRkaXRpb25hbCBpdGVtLiBJZiB3ZSBydW4gb3V0IG9mIHNwYWNlIHRoZXJlLCBpdCdzIGEgcmVhbCBlcnJvcgorCSAqIHdlIGNhbid0IGNvbnRpbnVlIG9uLgorCSAqLworCXJldCA9IG9jZnMyX2ZpbmRfZGlyX3NwYWNlX2R4KG9zYiwgZGlyLCBkaV9iaCwgZHhfcm9vdF9iaCwgbmFtZSwKKwkJCQkgICAgICBuYW1lbGVuLCBsb29rdXApOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKK3NlYXJjaF9lbDoKKwkvKgorCSAqIE5leHQsIHdlIG5lZWQgdG8gZmluZCBzcGFjZSBpbiB0aGUgdW5pbmRleGVkIHRyZWUuIFRoaXMgY2FsbAorCSAqIHNlYXJjaGVzIHVzaW5nIHRoZSBmcmVlIHNwYWNlIGxpbmtlZCBsaXN0LiBJZiB0aGUgdW5pbmRleGVkIHRyZWUKKwkgKiBsYWNrcyBzdWZmaWNpZW50IHNwYWNlLCB3ZSdsbCBleHBhbmQgaXQgYmVsb3cuIFRoZSBleHBhbnNpb24gY29kZQorCSAqIGlzIHNtYXJ0IGVub3VnaCB0byBhZGQgYW55IG5ldyBibG9ja3MgdG8gdGhlIGZyZWUgc3BhY2UgbGlzdC4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9zZWFyY2hfZHhfZnJlZV9saXN0KGRpciwgZHhfcm9vdF9iaCwgbmFtZWxlbiwgbG9va3VwKTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PU1BDKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRG8gdGhpcyB1cCBoZXJlIC0gb2NmczJfZXh0ZW5kX2RpciBtaWdodCBuZWVkIHRoZSBkeF9yb290ICovCisJbG9va3VwLT5kbF9keF9yb290X2JoID0gZHhfcm9vdF9iaDsKKwlmcmVlX2R4X3Jvb3QgPSAwOworCisJaWYgKHJldCA9PSAtRU5PU1BDKSB7CisJCXJldCA9IG9jZnMyX2V4dGVuZF9kaXIob3NiLCBkaXIsIGRpX2JoLCAxLCBsb29rdXAsICZsZWFmX2JoKTsKKworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qCisJCSAqIFdlIG1ha2UgdGhlIGFzc3VtcHRpb24gaGVyZSB0aGF0IG5ldyBsZWFmIGJsb2NrcyBhcmUgYWRkZWQKKwkJICogdG8gdGhlIGZyb250IG9mIG91ciBmcmVlIGxpc3QuCisJCSAqLworCQlsb29rdXAtPmRsX3ByZXZfbGVhZl9iaCA9IE5VTEw7CisJCWxvb2t1cC0+ZGxfbGVhZl9iaCA9IGxlYWZfYmg7CisJfQorCitvdXQ6CisJaWYgKGZyZWVfZHhfcm9vdCkKKwkJYnJlbHNlKGR4X3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHZXQgYSBkaXJlY3RvcnkgcmVhZHkgZm9yIGluc2VydC4gQW55IGRpcmVjdG9yeSBhbGxvY2F0aW9uIHJlcXVpcmVkCisgKiBoYXBwZW5zIGhlcmUuIFN1Y2Nlc3MgcmV0dXJucyB6ZXJvLCBhbmQgZW5vdWdoIGNvbnRleHQgaW4gdGhlIGRpcgorICogbG9va3VwIHJlc3VsdCB0aGF0IG9jZnMyX2FkZF9lbnRyeSgpIHdpbGwgYmUgYWJsZSBjb21wbGV0ZSB0aGUgdGFzaworICogd2l0aCBtaW5pbWFsIHBlcmZvcm1hbmNlIGltcGFjdC4KKyAqLwogaW50IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgaW50IG5hbWVsZW4sCi0JCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9kZV9iaCkKKwkJCQkgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgYmxvY2tzX3dhbnRlZCA9IDE7CkBAIC0xOTg0LDE0ICs0MzY3LDM0IEBACiAJbWxvZygwLCAiZ2V0dGluZyByZWFkeSB0byBpbnNlcnQgbmFtZWxlbiAlZCBpbnRvIGRpciAlbGx1XG4iLAogCSAgICAgbmFtZWxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vKTsKIAotCSpyZXRfZGVfYmggPSBOVUxMOwotCiAJaWYgKCFuYW1lbGVuKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBEbyB0aGlzIHVwIGZyb250IHRvIHJlZHVjZSBjb25mdXNpb24uCisJICoKKwkgKiBUaGUgZGlyZWN0b3J5IG1pZ2h0IHN0YXJ0IGlubGluZSwgdGhlbiBiZSB0dXJuZWQgaW50byBhbgorCSAqIGluZGV4ZWQgb25lLCBpbiB3aGljaCBjYXNlIHdlJ2QgbmVlZCB0byBoYXNoIGRlZXAgaW5zaWRlCisJICogb2NmczJfZmluZF9kaXJfc3BhY2VfaWQoKS4gU2luY2UKKwkgKiBvY2ZzMl9wcmVwYXJlX2R4X2Rpcl9mb3JfaW5zZXJ0KCkgYWxzbyBuZWVkcyB0aGlzIGhhc2gKKwkgKiBkb25lLCB0aGVyZSBzZWVtcyBubyBwb2ludCBpbiBzcHJlYWRpbmcgb3V0IHRoZSBjYWxscy4gV2UKKwkgKiBjYW4gb3B0aW1pemUgYXdheSB0aGUgY2FzZSB3aGVyZSB0aGUgZmlsZSBzeXN0ZW0gZG9lc24ndAorCSAqIHN1cHBvcnQgaW5kZXhpbmcuCisJICovCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKQorCQlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGRpciwgbmFtZSwgbmFtZWxlbiwgJmxvb2t1cC0+ZGxfaGluZm8pOworCisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpIHsKKwkJcmV0ID0gb2NmczJfcHJlcGFyZV9keF9kaXJfZm9yX2luc2VydChkaXIsIHBhcmVudF9mZV9iaCwKKwkJCQkJCSAgICAgIG5hbWUsIG5hbWVsZW4sIGxvb2t1cCk7CisJCWlmIChyZXQpCisJCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CiAJCXJldCA9IG9jZnMyX2ZpbmRfZGlyX3NwYWNlX2lkKGRpciwgcGFyZW50X2ZlX2JoLCBuYW1lLAogCQkJCQkgICAgICBuYW1lbGVuLCAmYmgsICZibG9ja3Nfd2FudGVkKTsKQEAgLTIwMTAsNyArNDQxMyw3IEBACiAJCUJVR19PTihiaCk7CiAKIAkJcmV0ID0gb2NmczJfZXh0ZW5kX2Rpcihvc2IsIGRpciwgcGFyZW50X2ZlX2JoLCBibG9ja3Nfd2FudGVkLAotCQkJCSAgICAgICAmYmgpOworCQkJCSAgICAgICBsb29rdXAsICZiaCk7CiAJCWlmIChyZXQpIHsKIAkJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHJldCk7CkBAIC0yMDIwLDkgKzQ0MjMsMTU0IEBACiAJCUJVR19PTighYmgpOwogCX0KIAotCSpyZXRfZGVfYmggPSBiaDsKKwlsb29rdXAtPmRsX2xlYWZfYmggPSBiaDsKIAliaCA9IE5VTEw7CiBvdXQ6CiAJYnJlbHNlKGJoKTsKIAlyZXR1cm4gcmV0OwogfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9yZW1vdmVfaW5kZXgoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoKQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBpbm9kZSAqZHhfYWxsb2NfaW5vZGUgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfYWxsb2NfYmggPSBOVUxMOworCWhhbmRsZV90ICpoYW5kbGU7CisJdTY0IGJsazsKKwl1MTYgYml0OworCXU2NCBiZ19ibGtubzsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKikgZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJZHhfYWxsb2NfaW5vZGUgPSBvY2ZzMl9nZXRfc3lzdGVtX2ZpbGVfaW5vZGUob3NiLAorCQkJCQlFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFLAorCQkJCQlsZTE2X3RvX2NwdShkeF9yb290LT5kcl9zdWJhbGxvY19zbG90KSk7CisJaWYgKCFkeF9hbGxvY19pbm9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwltdXRleF9sb2NrKCZkeF9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisKKwlyZXQgPSBvY2ZzMl9pbm9kZV9sb2NrKGR4X2FsbG9jX2lub2RlLCAmZHhfYWxsb2NfYmgsIDEpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9tdXRleDsKKwl9CisKKwloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX0RYX1JPT1RfUkVNT1ZFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmPSB+T0NGUzJfSU5ERVhFRF9ESVJfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMpOworCWRpLT5pX2R4X3Jvb3QgPSBjcHVfdG9fbGU2NCgwVUxMKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisKKwlibGsgPSBsZTY0X3RvX2NwdShkeF9yb290LT5kcl9ibGtubyk7CisJYml0ID0gbGUxNl90b19jcHUoZHhfcm9vdC0+ZHJfc3ViYWxsb2NfYml0KTsKKwliZ19ibGtubyA9IG9jZnMyX3doaWNoX3N1YmFsbG9jX2dyb3VwKGJsaywgYml0KTsKKwlyZXQgPSBvY2ZzMl9mcmVlX3N1YmFsbG9jX2JpdHMoaGFuZGxlLCBkeF9hbGxvY19pbm9kZSwgZHhfYWxsb2NfYmgsCisJCQkJICAgICAgIGJpdCwgYmdfYmxrbm8sIDEpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0X2NvbW1pdDoKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOworCitvdXRfdW5sb2NrOgorCW9jZnMyX2lub2RlX3VubG9jayhkeF9hbGxvY19pbm9kZSwgMSk7CisKK291dF9tdXRleDoKKwltdXRleF91bmxvY2soJmR4X2FsbG9jX2lub2RlLT5pX211dGV4KTsKKwlicmVsc2UoZHhfYWxsb2NfYmgpOworb3V0OgorCWlwdXQoZHhfYWxsb2NfaW5vZGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBvY2ZzMl9keF9kaXJfdHJ1bmNhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgdW5pbml0aWFsaXplZF92YXIoY2xlbik7CisJdTMyIG1ham9yX2hhc2ggPSBVSU5UX01BWCwgcF9jcG9zLCB1bmluaXRpYWxpemVkX3ZhcihjcG9zKTsKKwl1NjQgdW5pbml0aWFsaXplZF92YXIoYmxrbm8pOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0IGRlYWxsb2M7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCisJb2NmczJfaW5pdF9kZWFsbG9jX2N0eHQoJmRlYWxsb2MpOworCisJaWYgKCFvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG9jZnMyX3JlYWRfZHhfcm9vdChkaXIsIGRpLCAmZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopZHhfcm9vdF9iaC0+Yl9kYXRhOworCisJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKQorCQlnb3RvIHJlbW92ZV9pbmRleDsKKworCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZXQsIGRpciwgZHhfcm9vdF9iaCk7CisKKwkvKiBYWFg6IFdoYXQgaWYgZHJfY2x1c3RlcnMgaXMgdG9vIGxhcmdlPyAqLworCXdoaWxlIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9jbHVzdGVycykpIHsKKwkJcmV0ID0gb2NmczJfZHhfZGlyX2xvb2t1cF9yZWMoZGlyLCAmZHhfcm9vdC0+ZHJfbGlzdCwKKwkJCQkJICAgICAgbWFqb3JfaGFzaCwgJmNwb3MsICZibGtubywgJmNsZW4pOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXBfY3BvcyA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhkaXItPmlfc2IsIGJsa25vKTsKKworCQlyZXQgPSBvY2ZzMl9yZW1vdmVfYnRyZWVfcmFuZ2UoZGlyLCAmZXQsIGNwb3MsIHBfY3BvcywgY2xlbiwKKwkJCQkJICAgICAgICZkZWFsbG9jKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoY3BvcyA9PSAwKQorCQkJYnJlYWs7CisKKwkJbWFqb3JfaGFzaCA9IGNwb3MgLSAxOworCX0KKworcmVtb3ZlX2luZGV4OgorCXJldCA9IG9jZnMyX2R4X2Rpcl9yZW1vdmVfaW5kZXgoZGlyLCBkaV9iaCwgZHhfcm9vdF9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKGRpciwgZHhfcm9vdF9iaCk7CitvdXQ6CisJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMSk7CisJb2NmczJfcnVuX2RlYWxsb2NzKG9zYiwgJmRlYWxsb2MpOworCisJYnJlbHNlKGR4X3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuaCBiL2ZzL29jZnMyL2Rpci5oCmluZGV4IGM1MTFlMmUuLmU2ODNmM2QgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5oCisrKyBiL2ZzL29jZnMyL2Rpci5oCkBAIC0yNiw0NCArMjYsNzAgQEAKICNpZm5kZWYgT0NGUzJfRElSX0gKICNkZWZpbmUgT0NGUzJfRElSX0gKIAotc3RydWN0IGJ1ZmZlcl9oZWFkICpvY2ZzMl9maW5kX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICBpbnQgbmFtZWxlbiwKLQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKnJlc19kaXIpOworc3RydWN0IG9jZnMyX2R4X2hpbmZvIHsKKwl1MzIJbWFqb3JfaGFzaDsKKwl1MzIJbWlub3JfaGFzaDsKK307CisKK3N0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCB7CisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqZGxfbGVhZl9iaDsJLyogVW5pbmRleGVkIGxlYWYKKwkJCQkJCQkgKiBibG9jayAqLworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkJCSpkbF9lbnRyeTsJLyogVGFyZ2V0IGRpcmVudCBpbgorCQkJCQkJCSAqIHVuaW5kZXhlZCBsZWFmICovCisKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpkbF9keF9yb290X2JoOwkvKiBSb290IG9mIGluZGV4ZWQKKwkJCQkJCQkgKiB0cmVlICovCisKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpkbF9keF9sZWFmX2JoOwkvKiBJbmRleGVkIGxlYWYgYmxvY2sgKi8KKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkJCSpkbF9keF9lbnRyeTsJLyogVGFyZ2V0IGR4X2VudHJ5IGluCisJCQkJCQkJICogaW5kZXhlZCBsZWFmICovCisJc3RydWN0IG9jZnMyX2R4X2hpbmZvCQlkbF9oaW5mbzsJLyogTmFtZSBoYXNoIHJlc3VsdHMgKi8KKworCXN0cnVjdCBidWZmZXJfaGVhZAkJKmRsX3ByZXZfbGVhZl9iaDsvKiBQcmV2aW91cyBlbnRyeSBpbgorCQkJCQkJCSAgKiBkaXIgZnJlZSBzcGFjZQorCQkJCQkJCSAgKiBsaXN0LiBOVUxMIGlmCisJCQkJCQkJICAqIHByZXZpb3VzIGVudHJ5IGlzCisJCQkJCQkJICAqIGR4IHJvb3QgYmxvY2suICovCit9OworCit2b2lkIG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpOworCitpbnQgb2NmczJfZmluZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCk7CiBpbnQgb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlX2RlbCwKLQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworCQkgICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpOwogaW50IF9fb2NmczJfYWRkX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKIAkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJsa25vLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKLQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppbnNlcnRfYmgpOworCQkgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCk7CiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBibGtubywKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAotCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICppbnNlcnRfYmgpCisJCQkJICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKIHsKIAlyZXR1cm4gX19vY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlLAogCQkJCSBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sCi0JCQkJIGlub2RlLCBibGtubywgcGFyZW50X2ZlX2JoLCBpbnNlcnRfYmgpOworCQkJCSBpbm9kZSwgYmxrbm8sIHBhcmVudF9mZV9iaCwgbG9va3VwKTsKIH0KIGludCBvY2ZzMl91cGRhdGVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoLCBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZSwKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzLAogCQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZW50cnlfaW5vZGUpOwogCiBpbnQgb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgICBpbnQgbmFtZWxlbik7CiBpbnQgb2NmczJfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCiBpbnQgb2NmczJfZmluZF9maWxlc19vbl9kaXNrKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIGludCBuYW1lbGVuLAogCQkJICAgICB1NjQgKmJsa25vLAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkaXJlbnRfYmgsCi0JCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipkaXJlbnQpOworCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcyk7CiBpbnQgb2NmczJfbG9va3VwX2lub19mcm9tX25hbWUoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgICAgaW50IG5hbWVsZW4sIHU2NCAqYmxrbm8pOwogaW50IG9jZnMyX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpOwpAQCAtNzQsMTQgKzEwMCwxNyBAQAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCQkgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgaW50IG5hbWVsZW4sCi0JCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9kZV9iaCk7CisJCQkJIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0OwogaW50IG9jZnMyX2ZpbGxfbmV3X2RpcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpOworCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyk7CisKK2ludCBvY2ZzMl9keF9kaXJfdHJ1bmNhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpOwogCiBzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKm9jZnMyX2Rpcl90cmFpbGVyX2Zyb21fc2l6ZShpbnQgYmxvY2tzaXplLAogCQkJCQkJCSAgICB2b2lkICpkYXRhKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaCBiL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaAppbmRleCBiYjUzNzE0Li4wMTAyYmUzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKKysrIGIvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCkBAIC01MiwxNiArNTIsMTIgQEAKIGVudW0gZGxtX21sZV90eXBlIHsKIAlETE1fTUxFX0JMT0NLLAogCURMTV9NTEVfTUFTVEVSLAotCURMTV9NTEVfTUlHUkFUSU9OCi19OwotCi1zdHJ1Y3QgZGxtX2xvY2tfbmFtZSB7Ci0JdTggbGVuOwotCXU4IG5hbWVbRExNX0xPQ0tJRF9OQU1FX01BWF07CisJRExNX01MRV9NSUdSQVRJT04sCisJRExNX01MRV9OVU1fVFlQRVMKIH07CiAKIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBtYXN0ZXJfaGFzaF9ub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgaGJfZXZlbnRzOwogCXN0cnVjdCBkbG1fY3R4dCAqZGxtOwogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CkBAIC03OCwxMCArNzQsMTAgQEAKIAllbnVtIGRsbV9tbGVfdHlwZSB0eXBlOwogCXN0cnVjdCBvMmhiX2NhbGxiYWNrX2Z1bmMgbWxlX2hiX3VwOwogCXN0cnVjdCBvMmhiX2NhbGxiYWNrX2Z1bmMgbWxlX2hiX2Rvd247Ci0JdW5pb24gewotCQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKLQkJc3RydWN0IGRsbV9sb2NrX25hbWUgbmFtZTsKLQl9IHU7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICptbGVyZXM7CisJdW5zaWduZWQgY2hhciBtbmFtZVtETE1fTE9DS0lEX05BTUVfTUFYXTsKKwl1bnNpZ25lZCBpbnQgbW5hbWVsZW47CisJdW5zaWduZWQgaW50IG1uYW1laGFzaDsKIH07CiAKIGVudW0gZGxtX2FzdF90eXBlIHsKQEAgLTE1MSwxMyArMTQ3LDE0IEBACiAJdW5zaWduZWQgbG9uZyByZWNvdmVyeV9tYXBbQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUyldOwogCXN0cnVjdCBkbG1fcmVjb3ZlcnlfY3R4dCByZWNvOwogCXNwaW5sb2NrX3QgbWFzdGVyX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBtYXN0ZXJfbGlzdDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqKm1hc3Rlcl9oYXNoOwogCXN0cnVjdCBsaXN0X2hlYWQgbWxlX2hiX2V2ZW50czsKIAogCS8qIHRoZXNlIGdpdmUgYSByZWFsbHkgdmFndWUgaWRlYSBvZiB0aGUgc3lzdGVtIGxvYWQgKi8KLQlhdG9taWNfdCBsb2NhbF9yZXNvdXJjZXM7Ci0JYXRvbWljX3QgcmVtb3RlX3Jlc291cmNlczsKLQlhdG9taWNfdCB1bmtub3duX3Jlc291cmNlczsKKwlhdG9taWNfdCBtbGVfdG90X2NvdW50W0RMTV9NTEVfTlVNX1RZUEVTXTsKKwlhdG9taWNfdCBtbGVfY3VyX2NvdW50W0RMTV9NTEVfTlVNX1RZUEVTXTsKKwlhdG9taWNfdCByZXNfdG90X2NvdW50OworCWF0b21pY190IHJlc19jdXJfY291bnQ7CiAKIAlzdHJ1Y3QgZGxtX2RlYnVnX2N0eHQgKmRsbV9kZWJ1Z19jdHh0OwogCXN0cnVjdCBkZW50cnkgKmRsbV9kZWJ1Z2ZzX3N1YnJvb3Q7CkBAIC0xOTUsNiArMTkyLDEzIEBACiAJcmV0dXJuIGRsbS0+bG9ja3Jlc19oYXNoWyhpIC8gRExNX0JVQ0tFVFNfUEVSX1BBR0UpICUgRExNX0hBU0hfUEFHRVNdICsgKGkgJSBETE1fQlVDS0VUU19QRVJfUEFHRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X2hlYWQgKmRsbV9tYXN0ZXJfaGFzaChzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQkJCSB1bnNpZ25lZCBpKQoreworCXJldHVybiBkbG0tPm1hc3Rlcl9oYXNoWyhpIC8gRExNX0JVQ0tFVFNfUEVSX1BBR0UpICUgRExNX0hBU0hfUEFHRVNdICsKKwkJCShpICUgRExNX0JVQ0tFVFNfUEVSX1BBR0UpOworfQorCiAvKiB0aGVzZSBrZXZlbnRkIHdvcmsgcXVldWUgaXRlbXMgYXJlIGZvciBsZXNzLWZyZXF1ZW50bHkKICAqIGNhbGxlZCBmdW5jdGlvbnMgdGhhdCBjYW5ub3QgYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gdGhlCiAgKiBuZXQgbWVzc2FnZSBoYW5kbGVycyBmb3Igc29tZSByZWFzb24sIHVzdWFsbHkgYmVjYXVzZQpAQCAtODQ4LDkgKzg1Miw3IEBACiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4pOwogCiBpbnQgZGxtX2lzX2hvc3RfZG93bihpbnQgZXJybm8pOwotdm9pZCBkbG1fY2hhbmdlX2xvY2tyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCi0JCQkgICAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKLQkJCSAgICAgIHU4IG93bmVyKTsKKwogc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICogZGxtX2dldF9sb2NrX3Jlc291cmNlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAogCQkJCQkJIGNvbnN0IGNoYXIgKmxvY2tpZCwKIAkJCQkJCSBpbnQgbmFtZWxlbiwKQEAgLTEwMDgsNiArMTAxMCw5IEBACiAJCQkJCSAgRExNX0xPQ0tfUkVTX01JR1JBVElORykpOwogfQogCit2b2lkIF9fZGxtX3VubGlua19tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSk7Cit2b2lkIF9fZGxtX2luc2VydF9tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSk7CisKIC8qIGNyZWF0ZS9kZXN0cm95IHNsYWIgY2FjaGVzICovCiBpbnQgZGxtX2luaXRfbWFzdGVyX2NhY2hlcyh2b2lkKTsKIHZvaWQgZGxtX2Rlc3Ryb3lfbWFzdGVyX2NhY2hlcyh2b2lkKTsKQEAgLTExMTAsNiArMTExNSwyMyBAQAogCXJldHVybiBiaXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbG1fc2V0X2xvY2tyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJCSBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKKwkJCQkJIHU4IG93bmVyKQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CiAKKwlyZXMtPm93bmVyID0gb3duZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbG1fY2hhbmdlX2xvY2tyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJCSAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywKKwkJCQkJICAgIHU4IG93bmVyKQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7CisKKwlpZiAob3duZXIgIT0gcmVzLT5vd25lcikKKwkJZGxtX3NldF9sb2NrcmVzX293bmVyKGRsbSwgcmVzLCBvd25lcik7Cit9CiAKICNlbmRpZiAvKiBETE1DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCBiMzJmNjBhLi5kZjUyZjcwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtMjg3LDE4ICsyODcsOCBAQAogc3RhdGljIGludCBkdW1wX21sZShzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgb3V0ID0gMDsKLQl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKLQljb25zdCBjaGFyICpuYW1lOwogCWNoYXIgKm1sZV90eXBlOwogCi0JaWYgKG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUikgewotCQluYW1lbGVuID0gbWxlLT51Lm5hbWUubGVuOwotCQluYW1lID0gbWxlLT51Lm5hbWUubmFtZTsKLQl9IGVsc2UgewotCQluYW1lbGVuID0gbWxlLT51LnJlcy0+bG9ja25hbWUubGVuOwotCQluYW1lID0gbWxlLT51LnJlcy0+bG9ja25hbWUubmFtZTsKLQl9Ci0KIAlpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0spCiAJCW1sZV90eXBlID0gIkJMSyI7CiAJZWxzZSBpZiAobWxlLT50eXBlID09IERMTV9NTEVfTUFTVEVSKQpAQCAtMzA2LDcgKzI5Niw3IEBACiAJZWxzZQogCQltbGVfdHlwZSA9ICJNSUciOwogCi0Jb3V0ICs9IHN0cmluZ2lmeV9sb2NrbmFtZShuYW1lLCBuYW1lbGVuLCBidWYgKyBvdXQsIGxlbiAtIG91dCk7CisJb3V0ICs9IHN0cmluZ2lmeV9sb2NrbmFtZShtbGUtPm1uYW1lLCBtbGUtPm1uYW1lbGVuLCBidWYgKyBvdXQsIGxlbiAtIG91dCk7CiAJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAogCQkJIlx0JTNzXHRtYXM9JTN1XHRuZXc9JTN1XHRldnQ9JTFkXHR1c2U9JTFkXHRyZWY9JTNkXG4iLAogCQkJbWxlX3R5cGUsIG1sZS0+bWFzdGVyLCBtbGUtPm5ld19tYXN0ZXIsCkBAIC01MDEsMjMgKzQ5MSwzMyBAQAogc3RhdGljIGludCBkZWJ1Z19tbGVfcHJpbnQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkZWJ1Z19idWZmZXIgKmRiKQogewogCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZTsKLQlpbnQgb3V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIHRvdGFsID0gMDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9ub2RlICpsaXN0OworCWludCBpLCBvdXQgPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWwgPSAwLCBsb25nZXN0ID0gMCwgYmt0Y250OwogCiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCiAJCQkiRHVtcGluZyBNTEVzIGZvciBEb21haW46ICVzXG4iLCBkbG0tPm5hbWUpOwogCiAJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1sZSwgJmRsbS0+bWFzdGVyX2xpc3QsIGxpc3QpIHsKLQkJKyt0b3RhbDsKLQkJaWYgKGRiLT5sZW4gLSBvdXQgPCAyMDApCi0JCQljb250aW51ZTsKLQkJb3V0ICs9IGR1bXBfbWxlKG1sZSwgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CisJZm9yIChpID0gMDsgaSA8IERMTV9IQVNIX0JVQ0tFVFM7IGkrKykgeworCQlidWNrZXQgPSBkbG1fbWFzdGVyX2hhc2goZGxtLCBpKTsKKwkJaGxpc3RfZm9yX2VhY2gobGlzdCwgYnVja2V0KSB7CisJCQltbGUgPSBobGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5LAorCQkJCQkgIG1hc3Rlcl9oYXNoX25vZGUpOworCQkJKyt0b3RhbDsKKwkJCSsrYmt0Y250OworCQkJaWYgKGRiLT5sZW4gLSBvdXQgPCAyMDApCisJCQkJY29udGludWU7CisJCQlvdXQgKz0gZHVtcF9tbGUobWxlLCBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKKwkJfQorCQlsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGJrdGNudCk7CisJCWJrdGNudCA9IDA7CiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIAogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAotCQkJIlRvdGFsIG9uIGxpc3Q6ICVsZFxuIiwgdG90YWwpOworCQkJIlRvdGFsOiAlbGQsIExvbmdlc3Q6ICVsZFxuIiwgdG90YWwsIGxvbmdlc3QpOwogCXJldHVybiBvdXQ7CiB9CiAKQEAgLTc1NiwxMiArNzU2LDggQEAKIAlpbnQgb3V0ID0gMDsKIAlzdHJ1Y3QgZGxtX3JlY29fbm9kZV9kYXRhICpub2RlOwogCWNoYXIgKnN0YXRlOwotCWludCBscmVzLCBycmVzLCB1cmVzLCB0cmVzOwotCi0JbHJlcyA9IGF0b21pY19yZWFkKCZkbG0tPmxvY2FsX3Jlc291cmNlcyk7Ci0JcnJlcyA9IGF0b21pY19yZWFkKCZkbG0tPnJlbW90ZV9yZXNvdXJjZXMpOwotCXVyZXMgPSBhdG9taWNfcmVhZCgmZGxtLT51bmtub3duX3Jlc291cmNlcyk7Ci0JdHJlcyA9IGxyZXMgKyBycmVzICsgdXJlczsKKwlpbnQgY3VyX21sZXMgPSAwLCB0b3RfbWxlcyA9IDA7CisJaW50IGk7CiAKIAlzcGluX2xvY2soJmRsbS0+c3BpbmxvY2spOwogCkBAIC04MDQsMjEgKzgwMCw0OCBAQAogCQkJCSBkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0KTsKIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwgIlxuIik7CiAKLQkvKiBNYXN0ZXJlZCBSZXNvdXJjZXMgVG90YWw6IHh4eCAgTG9jYWxseTogeHh4ICBSZW1vdGVseTogLi4uICovCisJLyogTG9jayBSZXNvdXJjZXM6IHh4eCAoeHh4KSAqLwogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAotCQkJIk1hc3RlcmVkIFJlc291cmNlcyBUb3RhbDogJWQgIExvY2FsbHk6ICVkICAiCi0JCQkiUmVtb3RlbHk6ICVkICBVbmtub3duOiAlZFxuIiwKLQkJCXRyZXMsIGxyZXMsIHJyZXMsIHVyZXMpOworCQkJIkxvY2sgUmVzb3VyY2VzOiAlZCAoJWQpXG4iLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+cmVzX2N1cl9jb3VudCksCisJCQlhdG9taWNfcmVhZCgmZGxtLT5yZXNfdG90X2NvdW50KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRExNX01MRV9OVU1fVFlQRVM7ICsraSkKKwkJdG90X21sZXMgKz0gYXRvbWljX3JlYWQoJmRsbS0+bWxlX3RvdF9jb3VudFtpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRExNX01MRV9OVU1fVFlQRVM7ICsraSkKKwkJY3VyX21sZXMgKz0gYXRvbWljX3JlYWQoJmRsbS0+bWxlX2N1cl9jb3VudFtpXSk7CisKKwkvKiBNTEVzOiB4eHggKHh4eCkgKi8KKwlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwkJCSJNTEVzOiAlZCAoJWQpXG4iLCBjdXJfbWxlcywgdG90X21sZXMpOworCisJLyogIEJsb2NraW5nOiB4eHggKHh4eCkgKi8KKwlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwkJCSIgIEJsb2NraW5nOiAlZCAoJWQpXG4iLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX2N1cl9jb3VudFtETE1fTUxFX0JMT0NLXSksCisJCQlhdG9taWNfcmVhZCgmZGxtLT5tbGVfdG90X2NvdW50W0RMTV9NTEVfQkxPQ0tdKSk7CisKKwkvKiAgTWFzdGVyeTogeHh4ICh4eHgpICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiICBNYXN0ZXJ5OiAlZCAoJWQpXG4iLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX2N1cl9jb3VudFtETE1fTUxFX01BU1RFUl0pLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX3RvdF9jb3VudFtETE1fTUxFX01BU1RFUl0pKTsKKworCS8qICBNaWdyYXRpb246IHh4eCAoeHh4KSAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIiAgTWlncmF0aW9uOiAlZCAoJWQpXG4iLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX2N1cl9jb3VudFtETE1fTUxFX01JR1JBVElPTl0pLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX3RvdF9jb3VudFtETE1fTUxFX01JR1JBVElPTl0pKTsKIAogCS8qIExpc3RzOiBEaXJ0eT1FbXB0eSAgUHVyZ2U9SW5Vc2UgIFBlbmRpbmdBU1RzPUVtcHR5ICAuLi4gKi8KIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKIAkJCSJMaXN0czogRGlydHk9JXMgIFB1cmdlPSVzICBQZW5kaW5nQVNUcz0lcyAgIgotCQkJIlBlbmRpbmdCQVNUcz0lcyAgTWFzdGVyPSVzXG4iLAorCQkJIlBlbmRpbmdCQVNUcz0lc1xuIiwKIAkJCShsaXN0X2VtcHR5KCZkbG0tPmRpcnR5X2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpLAogCQkJKGxpc3RfZW1wdHkoJmRsbS0+cHVyZ2VfbGlzdCkgPyAiRW1wdHkiIDogIkluVXNlIiksCiAJCQkobGlzdF9lbXB0eSgmZGxtLT5wZW5kaW5nX2FzdHMpID8gIkVtcHR5IiA6ICJJblVzZSIpLAotCQkJKGxpc3RfZW1wdHkoJmRsbS0+cGVuZGluZ19iYXN0cykgPyAiRW1wdHkiIDogIkluVXNlIiksCi0JCQkobGlzdF9lbXB0eSgmZGxtLT5tYXN0ZXJfbGlzdCkgPyAiRW1wdHkiIDogIkluVXNlIikpOworCQkJKGxpc3RfZW1wdHkoJmRsbS0+cGVuZGluZ19iYXN0cykgPyAiRW1wdHkiIDogIkluVXNlIikpOwogCiAJLyogUHVyZ2UgQ291bnQ6IHh4eCAgUmVmczogeHh4ICovCiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKaW5kZXggZDhkNTc4Zi4uNGQ5ZTZiMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwpAQCAtMzA0LDYgKzMwNCw5IEBACiAJaWYgKGRsbS0+bG9ja3Jlc19oYXNoKQogCQlkbG1fZnJlZV9wYWdldmVjKCh2b2lkICoqKWRsbS0+bG9ja3Jlc19oYXNoLCBETE1fSEFTSF9QQUdFUyk7CiAKKwlpZiAoZGxtLT5tYXN0ZXJfaGFzaCkKKwkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPm1hc3Rlcl9oYXNoLCBETE1fSEFTSF9QQUdFUyk7CisKIAlpZiAoZGxtLT5uYW1lKQogCQlrZnJlZShkbG0tPm5hbWUpOwogCkBAIC0xNTM0LDEyICsxNTM3LDI3IEBACiAJZm9yIChpID0gMDsgaSA8IERMTV9IQVNIX0JVQ0tFVFM7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKGRsbV9sb2NrcmVzX2hhc2goZGxtLCBpKSk7CiAKKwlkbG0tPm1hc3Rlcl9oYXNoID0gKHN0cnVjdCBobGlzdF9oZWFkICoqKQorCQkJCWRsbV9hbGxvY19wYWdldmVjKERMTV9IQVNIX1BBR0VTKTsKKwlpZiAoIWRsbS0+bWFzdGVyX2hhc2gpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPmxvY2tyZXNfaGFzaCwgRExNX0hBU0hfUEFHRVMpOworCQlrZnJlZShkbG0tPm5hbWUpOworCQlrZnJlZShkbG0pOworCQlkbG0gPSBOVUxMOworCQlnb3RvIGxlYXZlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBETE1fSEFTSF9CVUNLRVRTOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRChkbG1fbWFzdGVyX2hhc2goZGxtLCBpKSk7CisKIAlzdHJjcHkoZGxtLT5uYW1lLCBkb21haW4pOwogCWRsbS0+a2V5ID0ga2V5OwogCWRsbS0+bm9kZV9udW0gPSBvMm5tX3RoaXNfbm9kZSgpOwogCiAJcmV0ID0gZGxtX2NyZWF0ZV9kZWJ1Z2ZzX3N1YnJvb3QoZGxtKTsKIAlpZiAocmV0IDwgMCkgeworCQlkbG1fZnJlZV9wYWdldmVjKCh2b2lkICoqKWRsbS0+bWFzdGVyX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKIAkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPmxvY2tyZXNfaGFzaCwgRExNX0hBU0hfUEFHRVMpOwogCQlrZnJlZShkbG0tPm5hbWUpOwogCQlrZnJlZShkbG0pOwpAQCAtMTU3OSw3ICsxNTk3LDYgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG0tPnJlY28uZXZlbnQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRsbS0+YXN0X3dxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG0tPm1pZ3JhdGlvbl93cSk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRsbS0+bWFzdGVyX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkbG0tPm1sZV9oYl9ldmVudHMpOwogCiAJZGxtLT5qb2luaW5nX25vZGUgPSBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTjsKQEAgLTE1ODcsOSArMTYwNCwxMyBAQAogCiAJZGxtLT5yZWNvLm5ld19tYXN0ZXIgPSBPMk5NX0lOVkFMSURfTk9ERV9OVU07CiAJZGxtLT5yZWNvLmRlYWRfbm9kZSA9IE8yTk1fSU5WQUxJRF9OT0RFX05VTTsKLQlhdG9taWNfc2V0KCZkbG0tPmxvY2FsX3Jlc291cmNlcywgMCk7Ci0JYXRvbWljX3NldCgmZGxtLT5yZW1vdGVfcmVzb3VyY2VzLCAwKTsKLQlhdG9taWNfc2V0KCZkbG0tPnVua25vd25fcmVzb3VyY2VzLCAwKTsKKworCWF0b21pY19zZXQoJmRsbS0+cmVzX3RvdF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGxtLT5yZXNfY3VyX2NvdW50LCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX01MRV9OVU1fVFlQRVM7ICsraSkgeworCQlhdG9taWNfc2V0KCZkbG0tPm1sZV90b3RfY291bnRbaV0sIDApOworCQlhdG9taWNfc2V0KCZkbG0tPm1sZV9jdXJfY291bnRbaV0sIDApOworCX0KIAogCXNwaW5fbG9ja19pbml0KCZkbG0tPndvcmtfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRsbS0+d29ya19saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCAwYTI4MTM5Li5mOGI2NTNmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC03MywyMiArNzMsMTMgQEAKIAkJCQljb25zdCBjaGFyICpuYW1lLAogCQkJCXVuc2lnbmVkIGludCBuYW1lbGVuKQogewotCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwotCiAJaWYgKGRsbSAhPSBtbGUtPmRsbSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0sgfHwKLQkgICAgbWxlLT50eXBlID09IERMTV9NTEVfTUlHUkFUSU9OKSB7Ci0JCWlmIChuYW1lbGVuICE9IG1sZS0+dS5uYW1lLmxlbiB8fAotICAgIAkgICAgCSAgICBtZW1jbXAobmFtZSwgbWxlLT51Lm5hbWUubmFtZSwgbmFtZWxlbikhPTApCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlyZXMgPSBtbGUtPnUucmVzOwotCQlpZiAobmFtZWxlbiAhPSByZXMtPmxvY2tuYW1lLmxlbiB8fAotCQkgICAgbWVtY21wKHJlcy0+bG9ja25hbWUubmFtZSwgbmFtZSwgbmFtZWxlbikgIT0gMCkKLQkJCXJldHVybiAwOwotCX0KKwlpZiAobmFtZWxlbiAhPSBtbGUtPm1uYW1lbGVuIHx8CisJICAgIG1lbWNtcChuYW1lLCBtbGUtPm1uYW1lLCBuYW1lbGVuKSAhPSAwKQorCQlyZXR1cm4gMDsKKwogCXJldHVybiAxOwogfQogCkBAIC0yODMsNyArMjc0LDcgQEAKIAogCW1sZS0+ZGxtID0gZGxtOwogCW1sZS0+dHlwZSA9IHR5cGU7Ci0JSU5JVF9MSVNUX0hFQUQoJm1sZS0+bGlzdCk7CisJSU5JVF9ITElTVF9OT0RFKCZtbGUtPm1hc3Rlcl9oYXNoX25vZGUpOwogCUlOSVRfTElTVF9IRUFEKCZtbGUtPmhiX2V2ZW50cyk7CiAJbWVtc2V0KG1sZS0+bWF5YmVfbWFwLCAwLCBzaXplb2YobWxlLT5tYXliZV9tYXApKTsKIAlzcGluX2xvY2tfaW5pdCgmbWxlLT5zcGlubG9jayk7CkBAIC0yOTUsMTkgKzI4NiwyNyBAQAogCW1sZS0+bmV3X21hc3RlciA9IE8yTk1fTUFYX05PREVTOwogCW1sZS0+aW51c2UgPSAwOwogCisJQlVHX09OKG1sZS0+dHlwZSAhPSBETE1fTUxFX0JMT0NLICYmCisJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUiAmJgorCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NSUdSQVRJT04pOworCiAJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX01BU1RFUikgewogCQlCVUdfT04oIXJlcyk7Ci0JCW1sZS0+dS5yZXMgPSByZXM7Ci0JfSBlbHNlIGlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSykgeworCQltbGUtPm1sZXJlcyA9IHJlczsKKwkJbWVtY3B5KG1sZS0+bW5hbWUsIHJlcy0+bG9ja25hbWUubmFtZSwgcmVzLT5sb2NrbmFtZS5sZW4pOworCQltbGUtPm1uYW1lbGVuID0gcmVzLT5sb2NrbmFtZS5sZW47CisJCW1sZS0+bW5hbWVoYXNoID0gcmVzLT5sb2NrbmFtZS5oYXNoOworCX0gZWxzZSB7CiAJCUJVR19PTighbmFtZSk7Ci0JCW1lbWNweShtbGUtPnUubmFtZS5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQkJbWxlLT51Lm5hbWUubGVuID0gbmFtZWxlbjsKLQl9IGVsc2UgLyogRExNX01MRV9NSUdSQVRJT04gKi8gewotCQlCVUdfT04oIW5hbWUpOwotCQltZW1jcHkobWxlLT51Lm5hbWUubmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JCW1sZS0+dS5uYW1lLmxlbiA9IG5hbWVsZW47CisJCW1sZS0+bWxlcmVzID0gTlVMTDsKKwkJbWVtY3B5KG1sZS0+bW5hbWUsIG5hbWUsIG5hbWVsZW4pOworCQltbGUtPm1uYW1lbGVuID0gbmFtZWxlbjsKKwkJbWxlLT5tbmFtZWhhc2ggPSBkbG1fbG9ja2lkX2hhc2gobmFtZSwgbmFtZWxlbik7CiAJfQogCisJYXRvbWljX2luYygmZGxtLT5tbGVfdG90X2NvdW50W21sZS0+dHlwZV0pOworCWF0b21pY19pbmMoJmRsbS0+bWxlX2N1cl9jb3VudFttbGUtPnR5cGVdKTsKKwogCS8qIGNvcHkgb2ZmIHRoZSBub2RlX21hcCBhbmQgcmVnaXN0ZXIgaGIgY2FsbGJhY2tzIG9uIG91ciBjb3B5ICovCiAJbWVtY3B5KG1sZS0+bm9kZV9tYXAsIGRsbS0+ZG9tYWluX21hcCwgc2l6ZW9mKG1sZS0+bm9kZV9tYXApKTsKIAltZW1jcHkobWxlLT52b3RlX21hcCwgZGxtLT5kb21haW5fbWFwLCBzaXplb2YobWxlLT52b3RlX21hcCkpOwpAQCAtMzE4LDYgKzMxNywyNCBAQAogCV9fZGxtX21sZV9hdHRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKIH0KIAordm9pZCBfX2RsbV91bmxpbmtfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpCit7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPnNwaW5sb2NrKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+bWFzdGVyX2xvY2spOworCisJaWYgKCFobGlzdF91bmhhc2hlZCgmbWxlLT5tYXN0ZXJfaGFzaF9ub2RlKSkKKwkJaGxpc3RfZGVsX2luaXQoJm1sZS0+bWFzdGVyX2hhc2hfbm9kZSk7Cit9CisKK3ZvaWQgX19kbG1faW5zZXJ0X21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+bWFzdGVyX2xvY2spOworCisJYnVja2V0ID0gZGxtX21hc3Rlcl9oYXNoKGRsbSwgbWxlLT5tbmFtZWhhc2gpOworCWhsaXN0X2FkZF9oZWFkKCZtbGUtPm1hc3Rlcl9oYXNoX25vZGUsIGJ1Y2tldCk7Cit9CiAKIC8qIHJldHVybnMgMSBpZiBmb3VuZCwgMCBpZiBub3QgKi8KIHN0YXRpYyBpbnQgZGxtX2ZpbmRfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLApAQCAtMzI1LDEwICszNDIsMTcgQEAKIAkJCWNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuKQogewogCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKnRtcG1sZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9ub2RlICpsaXN0OworCXVuc2lnbmVkIGludCBoYXNoOwogCiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wbWxlLCAmZGxtLT5tYXN0ZXJfbGlzdCwgbGlzdCkgeworCWhhc2ggPSBkbG1fbG9ja2lkX2hhc2gobmFtZSwgbmFtZWxlbik7CisJYnVja2V0ID0gZGxtX21hc3Rlcl9oYXNoKGRsbSwgaGFzaCk7CisJaGxpc3RfZm9yX2VhY2gobGlzdCwgYnVja2V0KSB7CisJCXRtcG1sZSA9IGhsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnksCisJCQkJICAgICBtYXN0ZXJfaGFzaF9ub2RlKTsKIAkJaWYgKCFkbG1fbWxlX2VxdWFsKGRsbSwgdG1wbWxlLCBuYW1lLCBuYW1lbGVuKSkKIAkJCWNvbnRpbnVlOwogCQlkbG1fZ2V0X21sZSh0bXBtbGUpOwpAQCAtNDA4LDI0ICs0MzIsMjAgQEAKIAltbGUgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSwgbWxlX3JlZnMpOwogCWRsbSA9IG1sZS0+ZGxtOwogCi0JaWYgKG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUikgewotCQltbG9nKDAsICJjYWxsaW5nIG1sZV9yZWxlYXNlIGZvciAlLipzLCB0eXBlICVkXG4iLAotCQkgICAgIG1sZS0+dS5uYW1lLmxlbiwgbWxlLT51Lm5hbWUubmFtZSwgbWxlLT50eXBlKTsKLQl9IGVsc2UgewotCQltbG9nKDAsICJjYWxsaW5nIG1sZV9yZWxlYXNlIGZvciAlLipzLCB0eXBlICVkXG4iLAotCQkgICAgIG1sZS0+dS5yZXMtPmxvY2tuYW1lLmxlbiwKLQkJICAgICBtbGUtPnUucmVzLT5sb2NrbmFtZS5uYW1lLCBtbGUtPnR5cGUpOwotCX0KIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+c3BpbmxvY2spOwogCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5tYXN0ZXJfbG9jayk7CiAKKwltbG9nKDAsICJSZWxlYXNpbmcgbWxlIGZvciAlLipzLCB0eXBlICVkXG4iLCBtbGUtPm1uYW1lbGVuLCBtbGUtPm1uYW1lLAorCSAgICAgbWxlLT50eXBlKTsKKwogCS8qIHJlbW92ZSBmcm9tIGxpc3QgaWYgbm90IGFscmVhZHkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJm1sZS0+bGlzdCkpCi0JCWxpc3RfZGVsX2luaXQoJm1sZS0+bGlzdCk7CisJX19kbG1fdW5saW5rX21sZShkbG0sIG1sZSk7CiAKIAkvKiBkZXRhY2ggdGhlIG1sZSBmcm9tIHRoZSBkb21haW4gbm9kZSB1cC9kb3duIGV2ZW50cyAqLwogCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKIAorCWF0b21pY19kZWMoJmRsbS0+bWxlX2N1cl9jb3VudFttbGUtPnR5cGVdKTsKKwogCS8qIE5PVEU6IGtmcmVlIHVuZGVyIHNwaW5sb2NrIGhlcmUuCiAJICogaWYgdGhpcyBpcyBiYWQsIHdlIGNhbiBtb3ZlIHRoaXMgdG8gYSBmcmVlbGlzdC4gKi8KIAlrbWVtX2NhY2hlX2ZyZWUoZGxtX21sZV9jYWNoZSwgbWxlKTsKQEAgLTQ2NSw0MyArNDg1LDYgQEAKIAkJa21lbV9jYWNoZV9kZXN0cm95KGRsbV9sb2NrcmVzX2NhY2hlKTsKIH0KIAotc3RhdGljIHZvaWQgZGxtX3NldF9sb2NrcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAotCQkJCSAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCi0JCQkJICB1OCBvd25lcikKLXsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwotCi0JbWxvZ19lbnRyeSgiJS4qcywgJXVcbiIsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUsIG93bmVyKTsKLQotCWlmIChvd25lciA9PSBkbG0tPm5vZGVfbnVtKQotCQlhdG9taWNfaW5jKCZkbG0tPmxvY2FsX3Jlc291cmNlcyk7Ci0JZWxzZSBpZiAob3duZXIgPT0gRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pCi0JCWF0b21pY19pbmMoJmRsbS0+dW5rbm93bl9yZXNvdXJjZXMpOwotCWVsc2UKLQkJYXRvbWljX2luYygmZGxtLT5yZW1vdGVfcmVzb3VyY2VzKTsKLQotCXJlcy0+b3duZXIgPSBvd25lcjsKLX0KLQotdm9pZCBkbG1fY2hhbmdlX2xvY2tyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCi0JCQkgICAgICBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlcywgdTggb3duZXIpCi17Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPnNwaW5sb2NrKTsKLQotCWlmIChvd25lciA9PSByZXMtPm93bmVyKQotCQlyZXR1cm47Ci0KLQlpZiAocmVzLT5vd25lciA9PSBkbG0tPm5vZGVfbnVtKQotCQlhdG9taWNfZGVjKCZkbG0tPmxvY2FsX3Jlc291cmNlcyk7Ci0JZWxzZSBpZiAocmVzLT5vd25lciA9PSBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTikKLQkJYXRvbWljX2RlYygmZGxtLT51bmtub3duX3Jlc291cmNlcyk7Ci0JZWxzZQotCQlhdG9taWNfZGVjKCZkbG0tPnJlbW90ZV9yZXNvdXJjZXMpOwotCi0JZGxtX3NldF9sb2NrcmVzX293bmVyKGRsbSwgcmVzLCBvd25lcik7Ci19Ci0KLQogc3RhdGljIHZvaWQgZGxtX2xvY2tyZXNfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKIAlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKQEAgLTUyNyw2ICs1MTAsOCBAQAogCX0KIAlzcGluX3VubG9jaygmZGxtLT50cmFja19sb2NrKTsKIAorCWF0b21pY19kZWMoJmRsbS0+cmVzX2N1cl9jb3VudCk7CisKIAlkbG1fcHV0KGRsbSk7CiAKIAlpZiAoIWhsaXN0X3VuaGFzaGVkKCZyZXMtPmhhc2hfbm9kZSkgfHwKQEAgLTYwNyw2ICs1OTIsOSBAQAogCiAJa3JlZl9pbml0KCZyZXMtPnJlZnMpOwogCisJYXRvbWljX2luYygmZGxtLT5yZXNfdG90X2NvdW50KTsKKwlhdG9taWNfaW5jKCZkbG0tPnJlc19jdXJfY291bnQpOworCiAJLyoganVzdCBmb3IgY29uc2lzdGVuY3kgKi8KIAlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCWRsbV9zZXRfbG9ja3Jlc19vd25lcihkbG0sIHJlcywgRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pOwpAQCAtODQzLDcgKzgzMSw3IEBACiAJCWFsbG9jX21sZSA9IE5VTEw7CiAJCWRsbV9pbml0X21sZShtbGUsIERMTV9NTEVfTUFTVEVSLCBkbG0sIHJlcywgTlVMTCwgMCk7CiAJCXNldF9iaXQoZGxtLT5ub2RlX251bSwgbWxlLT5tYXliZV9tYXApOwotCQlsaXN0X2FkZCgmbWxlLT5saXN0LCAmZGxtLT5tYXN0ZXJfbGlzdCk7CisJCV9fZGxtX2luc2VydF9tbGUoZGxtLCBtbGUpOwogCiAJCS8qIHN0aWxsIGhvbGRpbmcgdGhlIGRsbSBzcGlubG9jaywgY2hlY2sgdGhlIHJlY292ZXJ5IG1hcAogCQkgKiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBub2RlcyB0aGF0IHN0aWxsIG5lZWQgdG8gYmUgCkBAIC0xMjcwLDcgKzEyNTgsNyBAQAogCQkJCQkJICAgICByZXMtPmxvY2tuYW1lLmxlbiwKIAkJCQkJCSAgICAgcmVzLT5sb2NrbmFtZS5uYW1lKTsKIAkJCQkJCW1sZS0+dHlwZSA9IERMTV9NTEVfTUFTVEVSOwotCQkJCQkJbWxlLT51LnJlcyA9IHJlczsKKwkJCQkJCW1sZS0+bWxlcmVzID0gcmVzOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtMTMxNSwxNCArMTMwMyw4IEBACiAKIAlCVUdfT04obWxlLT50eXBlID09IERMTV9NTEVfTUlHUkFUSU9OKTsKIAotCWlmIChtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIpIHsKLQkJcmVxdWVzdC5uYW1lbGVuID0gbWxlLT51Lm5hbWUubGVuOwotCQltZW1jcHkocmVxdWVzdC5uYW1lLCBtbGUtPnUubmFtZS5uYW1lLCByZXF1ZXN0Lm5hbWVsZW4pOwotCX0gZWxzZSB7Ci0JCXJlcXVlc3QubmFtZWxlbiA9IG1sZS0+dS5yZXMtPmxvY2tuYW1lLmxlbjsKLQkJbWVtY3B5KHJlcXVlc3QubmFtZSwgbWxlLT51LnJlcy0+bG9ja25hbWUubmFtZSwKLQkJCXJlcXVlc3QubmFtZWxlbik7Ci0JfQorCXJlcXVlc3QubmFtZWxlbiA9ICh1OCltbGUtPm1uYW1lbGVuOworCW1lbWNweShyZXF1ZXN0Lm5hbWUsIG1sZS0+bW5hbWUsIHJlcXVlc3QubmFtZWxlbik7CiAKIGFnYWluOgogCXJldCA9IG8ybmV0X3NlbmRfbWVzc2FnZShETE1fTUFTVEVSX1JFUVVFU1RfTVNHLCBkbG0tPmtleSwgJnJlcXVlc3QsCkBAIC0xNTc1LDcgKzE1NTcsNyBAQAogCQkvLyAiYWRkIHRoZSBibG9jay5cbiIpOwogCQlkbG1faW5pdF9tbGUobWxlLCBETE1fTUxFX0JMT0NLLCBkbG0sIE5VTEwsIG5hbWUsIG5hbWVsZW4pOwogCQlzZXRfYml0KHJlcXVlc3QtPm5vZGVfaWR4LCBtbGUtPm1heWJlX21hcCk7Ci0JCWxpc3RfYWRkKCZtbGUtPmxpc3QsICZkbG0tPm1hc3Rlcl9saXN0KTsKKwkJX19kbG1faW5zZXJ0X21sZShkbG0sIG1sZSk7CiAJCXJlc3BvbnNlID0gRExNX01BU1RFUl9SRVNQX05POwogCX0gZWxzZSB7CiAJCS8vIG1sb2coMCwgIm1sZSB3YXMgZm91bmRcbiIpOwpAQCAtMTk2Nyw3ICsxOTQ5LDcgQEAKIAkJCSAgICAgYXNzZXJ0LT5ub2RlX2lkeCwgcnIsIGV4dHJhX3JlZiwgbWxlLT5pbnVzZSk7CiAJCQlkbG1fcHJpbnRfb25lX21sZShtbGUpOwogCQl9Ci0JCWxpc3RfZGVsX2luaXQoJm1sZS0+bGlzdCk7CisJCV9fZGxtX3VubGlua19tbGUoZGxtLCBtbGUpOwogCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CiAJCV9fZGxtX3B1dF9tbGUobWxlKTsKIAkJaWYgKGV4dHJhX3JlZikgewpAQCAtMzE1OSwxMCArMzE0MSw4IEBACiAJCQl0bXAtPm1hc3RlciA9IG1hc3RlcjsKIAkJCWF0b21pY19zZXQoJnRtcC0+d29rZW4sIDEpOwogCQkJd2FrZV91cCgmdG1wLT53cSk7Ci0JCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBzbyB0aGF0IG9ubHkgb25lCi0JCQkgKiBtbGUgd2lsbCBiZSBmb3VuZCAqLwotCQkJbGlzdF9kZWxfaW5pdCgmdG1wLT5saXN0KTsKLQkJCS8qIHRoaXMgd2FzIG9idmlvdXNseSBXUk9ORy4gIG1sZSBpcyB1bmluaXRlZCBoZXJlLiAgc2hvdWxkIGJlIHRtcC4gKi8KKwkJCS8qIHJlbW92ZSBpdCBzbyB0aGF0IG9ubHkgb25lIG1sZSB3aWxsIGJlIGZvdW5kICovCisJCQlfX2RsbV91bmxpbmtfbWxlKGRsbSwgdG1wKTsKIAkJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgdG1wKTsKIAkJCXJldCA9IERMTV9NSUdSQVRFX1JFU1BPTlNFX01BU1RFUllfUkVGOwogCQkJbWxvZygwLCAiJXM6JS4qczogbWFzdGVyPSV1LCBuZXdtYXN0ZXI9JXUsICIKQEAgLTMxODEsMTcgKzMxNjEsOTMgQEAKIAltbGUtPm1hc3RlciA9IG1hc3RlcjsKIAkvKiBkbyB0aGlzIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIG1sZSB0eXBlcyAqLwogCXNldF9iaXQobmV3X21hc3RlciwgbWxlLT5tYXliZV9tYXApOwotCWxpc3RfYWRkKCZtbGUtPmxpc3QsICZkbG0tPm1hc3Rlcl9saXN0KTsKKwlfX2RsbV9pbnNlcnRfbWxlKGRsbSwgbWxlKTsKIAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiBTZXRzIHRoZSBvd25lciBvZiB0aGUgbG9ja3JlcywgYXNzb2NpYXRlZCB0byB0aGUgbWxlLCB0byBVTktOT1dOCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKmRsbV9yZXNldF9tbGVyZXNfb3duZXIoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSkKK3sKKwlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKKworCS8qIEZpbmQgdGhlIGxvY2tyZXMgYXNzb2NpYXRlZCB0byB0aGUgbWxlIGFuZCBzZXQgaXRzIG93bmVyIHRvIFVOSyAqLworCXJlcyA9IF9fZGxtX2xvb2t1cF9sb2NrcmVzKGRsbSwgbWxlLT5tbmFtZSwgbWxlLT5tbmFtZWxlbiwKKwkJCQkgICBtbGUtPm1uYW1laGFzaCk7CisJaWYgKHJlcykgeworCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CisKKwkJLyogbW92ZSBsb2NrcmVzIG9udG8gcmVjb3ZlcnkgbGlzdCAqLworCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOworCQlkbG1fc2V0X2xvY2tyZXNfb3duZXIoZGxtLCByZXMsIERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKTsKKwkJZGxtX21vdmVfbG9ja3Jlc190b19yZWNvdmVyeV9saXN0KGRsbSwgcmVzKTsKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCQlkbG1fbG9ja3Jlc19wdXQocmVzKTsKKworCQkvKiBhYm91dCB0byBnZXQgcmlkIG9mIG1sZSwgZGV0YWNoIGZyb20gaGVhcnRiZWF0ICovCisJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKKworCQkvKiBkdW1wIHRoZSBtbGUgKi8KKwkJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKwkJX19kbG1fcHV0X21sZShtbGUpOworCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgZGxtX2NsZWFuX21pZ3JhdGlvbl9tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJICAgIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSkKK3sKKwlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CisKKwlzcGluX2xvY2soJm1sZS0+c3BpbmxvY2spOworCV9fZGxtX3VubGlua19tbGUoZGxtLCBtbGUpOworCWF0b21pY19zZXQoJm1sZS0+d29rZW4sIDEpOworCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKKworCXdha2VfdXAoJm1sZS0+d3EpOworfQorCitzdGF0aWMgdm9pZCBkbG1fY2xlYW5fYmxvY2tfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSwgdTggZGVhZF9ub2RlKQoreworCWludCBiaXQ7CisKKwlCVUdfT04obWxlLT50eXBlICE9IERMTV9NTEVfQkxPQ0spOworCisJc3Bpbl9sb2NrKCZtbGUtPnNwaW5sb2NrKTsKKwliaXQgPSBmaW5kX25leHRfYml0KG1sZS0+bWF5YmVfbWFwLCBPMk5NX01BWF9OT0RFUywgMCk7CisJaWYgKGJpdCAhPSBkZWFkX25vZGUpIHsKKwkJbWxvZygwLCAibWxlIGZvdW5kLCBidXQgZGVhZCBub2RlICV1IHdvdWxkIG5vdCBoYXZlIGJlZW4gIgorCQkgICAgICJtYXN0ZXJcbiIsIGRlYWRfbm9kZSk7CisJCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKKwl9IGVsc2UgeworCQkvKiBNdXN0IGRyb3AgdGhlIHJlZmNvdW50IGJ5IG9uZSBzaW5jZSB0aGUgYXNzZXJ0X21hc3RlciB3aWxsCisJCSAqIG5ldmVyIGFycml2ZS4gVGhpcyBtYXkgcmVzdWx0IGluIHRoZSBtbGUgYmVpbmcgdW5saW5rZWQgYW5kCisJCSAqIGZyZWVkLCBidXQgdGhlcmUgbWF5IHN0aWxsIGJlIGEgcHJvY2VzcyB3YWl0aW5nIGluIHRoZQorCQkgKiBkbG1sb2NrIHBhdGggd2hpY2ggaXMgZmluZS4gKi8KKwkJbWxvZygwLCAibm9kZSAldSB3YXMgZXhwZWN0ZWQgbWFzdGVyXG4iLCBkZWFkX25vZGUpOworCQlhdG9taWNfc2V0KCZtbGUtPndva2VuLCAxKTsKKwkJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOworCQl3YWtlX3VwKCZtbGUtPndxKTsKKworCQkvKiBEbyBub3QgbmVlZCBldmVudHMgYW55IGxvbmdlciwgc28gZGV0YWNoIGZyb20gaGVhcnRiZWF0ICovCisJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKKwkJX19kbG1fcHV0X21sZShtbGUpOworCX0KK30KIAogdm9pZCBkbG1fY2xlYW5fbWFzdGVyX2xpc3Qoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHU4IGRlYWRfbm9kZSkKIHsKLQlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUsICpuZXh0OworCXN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZTsKIAlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCXN0cnVjdCBobGlzdF9ub2RlICpsaXN0OworCXVuc2lnbmVkIGludCBpOwogCiAJbWxvZ19lbnRyeSgiZGxtPSVzLCBkZWFkIG5vZGU9JXVcbiIsIGRsbS0+bmFtZSwgZGVhZF9ub2RlKTsKIHRvcDoKQEAgLTMxOTksMTE5ICszMjU1LDcwIEBACiAKIAkvKiBjbGVhbiB0aGUgbWFzdGVyIGxpc3QgKi8KIAlzcGluX2xvY2soJmRsbS0+bWFzdGVyX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtbGUsIG5leHQsICZkbG0tPm1hc3Rlcl9saXN0LCBsaXN0KSB7Ci0JCUJVR19PTihtbGUtPnR5cGUgIT0gRExNX01MRV9CTE9DSyAmJgotCQkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSICYmCi0JCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NSUdSQVRJT04pOworCWZvciAoaSA9IDA7IGkgPCBETE1fSEFTSF9CVUNLRVRTOyBpKyspIHsKKwkJYnVja2V0ID0gZGxtX21hc3Rlcl9oYXNoKGRsbSwgaSk7CisJCWhsaXN0X2Zvcl9lYWNoKGxpc3QsIGJ1Y2tldCkgeworCQkJbWxlID0gaGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSwKKwkJCQkJICBtYXN0ZXJfaGFzaF9ub2RlKTsKIAotCQkvKiBNQVNURVIgbWxlcyBhcmUgaW5pdGlhdGVkIGxvY2FsbHkuICB0aGUgd2FpdGluZwotCQkgKiBwcm9jZXNzIHdpbGwgbm90aWNlIHRoZSBub2RlIG1hcCBjaGFuZ2UKLQkJICogc2hvcnRseS4gIGxldCB0aGF0IGhhcHBlbiBhcyBub3JtYWwuICovCi0JCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9NQVNURVIpCi0JCQljb250aW51ZTsKKwkJCUJVR19PTihtbGUtPnR5cGUgIT0gRExNX01MRV9CTE9DSyAmJgorCQkJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUiAmJgorCQkJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01JR1JBVElPTik7CiAKKwkJCS8qIE1BU1RFUiBtbGVzIGFyZSBpbml0aWF0ZWQgbG9jYWxseS4gVGhlIHdhaXRpbmcKKwkJCSAqIHByb2Nlc3Mgd2lsbCBub3RpY2UgdGhlIG5vZGUgbWFwIGNoYW5nZSBzaG9ydGx5LgorCQkJICogTGV0IHRoYXQgaGFwcGVuIGFzIG5vcm1hbC4gKi8KKwkJCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9NQVNURVIpCisJCQkJY29udGludWU7CiAKLQkJLyogQkxPQ0sgbWxlcyBhcmUgaW5pdGlhdGVkIGJ5IG90aGVyIG5vZGVzLgotCQkgKiBuZWVkIHRvIGNsZWFuIHVwIGlmIHRoZSBkZWFkIG5vZGUgd291bGQgaGF2ZQotCQkgKiBiZWVuIHRoZSBtYXN0ZXIuICovCi0JCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSykgewotCQkJaW50IGJpdDsKLQotCQkJc3Bpbl9sb2NrKCZtbGUtPnNwaW5sb2NrKTsKLQkJCWJpdCA9IGZpbmRfbmV4dF9iaXQobWxlLT5tYXliZV9tYXAsIE8yTk1fTUFYX05PREVTLCAwKTsKLQkJCWlmIChiaXQgIT0gZGVhZF9ub2RlKSB7Ci0JCQkJbWxvZygwLCAibWxlIGZvdW5kLCBidXQgZGVhZCBub2RlICV1IHdvdWxkICIKLQkJCQkgICAgICJub3QgaGF2ZSBiZWVuIG1hc3RlclxuIiwgZGVhZF9ub2RlKTsKLQkJCQlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIG11c3QgZHJvcCB0aGUgcmVmY291bnQgYnkgb25lIHNpbmNlIHRoZQotCQkJCSAqIGFzc2VydF9tYXN0ZXIgd2lsbCBuZXZlciBhcnJpdmUuICB0aGlzCi0JCQkJICogbWF5IHJlc3VsdCBpbiB0aGUgbWxlIGJlaW5nIHVubGlua2VkIGFuZAotCQkJCSAqIGZyZWVkLCBidXQgdGhlcmUgbWF5IHN0aWxsIGJlIGEgcHJvY2VzcwotCQkJCSAqIHdhaXRpbmcgaW4gdGhlIGRsbWxvY2sgcGF0aCB3aGljaCBpcyBmaW5lLiAqLwotCQkJCW1sb2coMCwgIm5vZGUgJXUgd2FzIGV4cGVjdGVkIG1hc3RlclxuIiwKLQkJCQkgICAgIGRlYWRfbm9kZSk7Ci0JCQkJYXRvbWljX3NldCgmbWxlLT53b2tlbiwgMSk7Ci0JCQkJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOwotCQkJCXdha2VfdXAoJm1sZS0+d3EpOwotCQkJCS8qIGRvIG5vdCBuZWVkIGV2ZW50cyBhbnkgbG9uZ2VyLCBzbyBkZXRhY2ggCi0JCQkJICogZnJvbSBoZWFydGJlYXQgKi8KLQkJCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7Ci0JCQkJX19kbG1fcHV0X21sZShtbGUpOworCQkJLyogQkxPQ0sgbWxlcyBhcmUgaW5pdGlhdGVkIGJ5IG90aGVyIG5vZGVzLiBOZWVkIHRvCisJCQkgKiBjbGVhbiB1cCBpZiB0aGUgZGVhZCBub2RlIHdvdWxkIGhhdmUgYmVlbiB0aGUKKwkJCSAqIG1hc3Rlci4gKi8KKwkJCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9CTE9DSykgeworCQkJCWRsbV9jbGVhbl9ibG9ja19tbGUoZGxtLCBtbGUsIGRlYWRfbm9kZSk7CisJCQkJY29udGludWU7CiAJCQl9Ci0JCQljb250aW51ZTsKLQkJfQogCi0JCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIE1JR1JBVElPTiBtbGUgKi8KKwkJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhIE1JR1JBVElPTiBtbGUgKi8KIAotCQkvKiB0aGUgcnVsZSBmb3IgTUlHUkFUSU9OIG1sZXMgaXMgdGhhdCB0aGUgbWFzdGVyCi0JCSAqIGJlY29tZXMgVU5LTk9XTiBpZiAqZWl0aGVyKiB0aGUgb3JpZ2luYWwgb3IKLQkJICogdGhlIG5ldyBtYXN0ZXIgZGllcy4gIGFsbCBVTktOT1dOIGxvY2tyZXNlcwotCQkgKiBhcmUgc2VudCB0byB3aGljaGV2ZXIgbm9kZSBiZWNvbWVzIHRoZSByZWNvdmVyeQotCQkgKiBtYXN0ZXIuICB0aGUgbmV3IG1hc3RlciBpcyByZXNwb25zaWJsZSBmb3IKLQkJICogZGV0ZXJtaW5pbmcgaWYgdGhlcmUgaXMgc3RpbGwgYSBtYXN0ZXIgZm9yCi0JCSAqIHRoaXMgbG9ja3Jlcywgb3IgaWYgaGUgbmVlZHMgdG8gdGFrZSBvdmVyCi0JCSAqIG1hc3RlcnkuICBlaXRoZXIgd2F5LCB0aGlzIG5vZGUgc2hvdWxkIGV4cGVjdAotCQkgKiBhbm90aGVyIG1lc3NhZ2UgdG8gcmVzb2x2ZSB0aGlzLiAqLwotCQlpZiAobWxlLT5tYXN0ZXIgIT0gZGVhZF9ub2RlICYmCi0JCSAgICBtbGUtPm5ld19tYXN0ZXIgIT0gZGVhZF9ub2RlKQotCQkJY29udGludWU7CisJCQkvKiBUaGUgcnVsZSBmb3IgTUlHUkFUSU9OIG1sZXMgaXMgdGhhdCB0aGUgbWFzdGVyCisJCQkgKiBiZWNvbWVzIFVOS05PV04gaWYgKmVpdGhlciogdGhlIG9yaWdpbmFsIG9yIHRoZSBuZXcKKwkJCSAqIG1hc3RlciBkaWVzLiBBbGwgVU5LTk9XTiBsb2NrcmVzJyBhcmUgc2VudCB0bworCQkJICogd2hpY2hldmVyIG5vZGUgYmVjb21lcyB0aGUgcmVjb3ZlcnkgbWFzdGVyLiBUaGUgbmV3CisJCQkgKiBtYXN0ZXIgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIHRoZXJlIGlzCisJCQkgKiBzdGlsbCBhIG1hc3RlciBmb3IgdGhpcyBsb2NrcmVzLCBvciBpZiBoZSBuZWVkcyB0bworCQkJICogdGFrZSBvdmVyIG1hc3RlcnkuIEVpdGhlciB3YXksIHRoaXMgbm9kZSBzaG91bGQKKwkJCSAqIGV4cGVjdCBhbm90aGVyIG1lc3NhZ2UgdG8gcmVzb2x2ZSB0aGlzLiAqLwogCi0JCS8qIGlmIHdlIGhhdmUgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGlzIG1sZSBuZWVkcyB0bwotCQkgKiBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5kIGZyZWVkLiAqLworCQkJaWYgKG1sZS0+bWFzdGVyICE9IGRlYWRfbm9kZSAmJgorCQkJICAgIG1sZS0+bmV3X21hc3RlciAhPSBkZWFkX25vZGUpCisJCQkJY29udGludWU7CiAKLQkJLyogcmVtb3ZlIGZyb20gdGhlIGxpc3QgZWFybHkuICBOT1RFOiB1bmxpbmtpbmcKLQkJICogbGlzdF9oZWFkIHdoaWxlIGluIGxpc3RfZm9yX2VhY2hfc2FmZSAqLwotCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7Ci0JCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7Ci0JCWxpc3RfZGVsX2luaXQoJm1sZS0+bGlzdCk7Ci0JCWF0b21pY19zZXQoJm1sZS0+d29rZW4sIDEpOwotCQlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7Ci0JCXdha2VfdXAoJm1sZS0+d3EpOworCQkJLyogSWYgd2UgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQsIHRoaXMgbWxlIG5lZWRzIHRvIGJlCisJCQkgKiByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5kIGZyZWVkLiAqLworCQkJZGxtX2NsZWFuX21pZ3JhdGlvbl9tbGUoZGxtLCBtbGUpOwogCi0JCW1sb2coMCwgIiVzOiBub2RlICV1IGRpZWQgZHVyaW5nIG1pZ3JhdGlvbiBmcm9tICIKLQkJICAgICAiJXUgdG8gJXUhXG4iLCBkbG0tPm5hbWUsIGRlYWRfbm9kZSwKLQkJICAgICBtbGUtPm1hc3RlciwgbWxlLT5uZXdfbWFzdGVyKTsKLQkJLyogaWYgdGhlcmUgaXMgYSBsb2NrcmVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0JIAkgKiBtbGUsIGZpbmQgaXQgYW5kIHNldCBpdHMgb3duZXIgdG8gVU5LTk9XTiAqLwotCQloYXNoID0gZGxtX2xvY2tpZF9oYXNoKG1sZS0+dS5uYW1lLm5hbWUsIG1sZS0+dS5uYW1lLmxlbik7Ci0JCXJlcyA9IF9fZGxtX2xvb2t1cF9sb2NrcmVzKGRsbSwgbWxlLT51Lm5hbWUubmFtZSwKLQkJCQkJICAgbWxlLT51Lm5hbWUubGVuLCBoYXNoKTsKLQkJaWYgKHJlcykgewotCQkJLyogdW5mb3J0dW5hdGVseSBpZiB3ZSBoaXQgdGhpcyByYXJlIGNhc2UsIG91cgotCQkgCSAqIGxvY2sgb3JkZXJpbmcgaXMgbWVzc2VkLiAgd2UgbmVlZCB0byBkcm9wCi0JCSAJICogdGhlIG1hc3RlciBsb2NrIHNvIHRoYXQgd2UgY2FuIHRha2UgdGhlCi0JCSAgCSAqIGxvY2tyZXMgbG9jaywgbWVhbmluZyB0aGF0IHdlIHdpbGwgaGF2ZSB0bworCQkJbWxvZygwLCAiJXM6IG5vZGUgJXUgZGllZCBkdXJpbmcgbWlncmF0aW9uIGZyb20gIgorCQkJICAgICAiJXUgdG8gJXUhXG4iLCBkbG0tPm5hbWUsIGRlYWRfbm9kZSwgbWxlLT5tYXN0ZXIsCisJCQkgICAgIG1sZS0+bmV3X21hc3Rlcik7CisKKwkJCS8qIElmIHdlIGZpbmQgYSBsb2NrcmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWxlLCB3ZSd2ZQorCQkJICogaGl0IHRoaXMgcmFyZSBjYXNlIHRoYXQgbWVzc2VzIHVwIG91ciBsb2NrIG9yZGVyaW5nLgorCQkJICogSWYgc28sIHdlIG5lZWQgdG8gZHJvcCB0aGUgbWFzdGVyIGxvY2sgc28gdGhhdCB3ZSBjYW4KKwkJCSAqIHRha2UgdGhlIGxvY2tyZXMgbG9jaywgbWVhbmluZyB0aGF0IHdlIHdpbGwgaGF2ZSB0bwogCQkJICogcmVzdGFydCBmcm9tIHRoZSBoZWFkIG9mIGxpc3QuICovCi0JCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CisJCQlyZXMgPSBkbG1fcmVzZXRfbWxlcmVzX293bmVyKGRsbSwgbWxlKTsKKwkJCWlmIChyZXMpCisJCQkJLyogcmVzdGFydCAqLworCQkJCWdvdG8gdG9wOwogCi0JCQkvKiBtb3ZlIGxvY2tyZXMgb250byByZWNvdmVyeSBsaXN0ICovCi0JCQlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwotCQkJZGxtX3NldF9sb2NrcmVzX293bmVyKGRsbSwgcmVzLAotCQkJCSAgICAgIAlETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTik7Ci0JCQlkbG1fbW92ZV9sb2NrcmVzX3RvX3JlY292ZXJ5X2xpc3QoZGxtLCByZXMpOwotCQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwotCQkJZGxtX2xvY2tyZXNfcHV0KHJlcyk7Ci0KLQkJCS8qIGFib3V0IHRvIGdldCByaWQgb2YgbWxlLCBkZXRhY2ggZnJvbSBoZWFydGJlYXQgKi8KLQkJCV9fZGxtX21sZV9kZXRhY2hfaGJfZXZlbnRzKGRsbSwgbWxlKTsKLQotCQkJLyogZHVtcCB0aGUgbWxlICovCi0JCQlzcGluX2xvY2soJmRsbS0+bWFzdGVyX2xvY2spOworCQkJLyogVGhpcyBtYXkgYmUgdGhlIGxhc3QgcmVmZXJlbmNlICovCiAJCQlfX2RsbV9wdXRfbWxlKG1sZSk7Ci0JCQlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7Ci0KLQkJCS8qIHJlc3RhcnQgKi8KLQkJCWdvdG8gdG9wOwogCQl9Ci0KLQkJLyogdGhpcyBtYXkgYmUgdGhlIGxhc3QgcmVmZXJlbmNlICovCi0JCV9fZGxtX3B1dF9tbGUobWxlKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwogfQogCi0KIGludCBkbG1fZmluaXNoX21pZ3JhdGlvbihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCiAJCQkgdTggb2xkX21hc3RlcikKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwppbmRleCA0MDYwYmIzLi5kNDkwYjY2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCkBAIC0xNjIsMTIgKzE2MiwyOCBAQAogCiAJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAlpZiAoIV9fZGxtX2xvY2tyZXNfdW51c2VkKHJlcykpIHsKLQkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwogCQltbG9nKDAsICIlczolLipzOiB0cmllZCB0byBwdXJnZSBidXQgbm90IHVudXNlZFxuIiwKIAkJICAgICBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLCByZXMtPmxvY2tuYW1lLm5hbWUpOwotCQlyZXR1cm4gLUVOT1RFTVBUWTsKKwkJX19kbG1fcHJpbnRfb25lX2xvY2tfcmVzb3VyY2UocmVzKTsKKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCQlCVUcoKTsKIAl9CisKKwlpZiAocmVzLT5zdGF0ZSAmIERMTV9MT0NLX1JFU19NSUdSQVRJTkcpIHsKKwkJbWxvZygwLCAiJXM6JS4qczogRGVsYXkgZHJvcHJlZiBhcyB0aGlzIGxvY2tyZXMgaXMgIgorCQkgICAgICJiZWluZyByZW1hc3RlcmVkXG4iLCBkbG0tPm5hbWUsIHJlcy0+bG9ja25hbWUubGVuLAorCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7CisJCS8qIFJlLWFkZCB0aGUgbG9ja3JlcyB0byB0aGUgZW5kIG9mIHRoZSBwdXJnZSBsaXN0ICovCisJCWlmICghbGlzdF9lbXB0eSgmcmVzLT5wdXJnZSkpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnJlcy0+cHVyZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmcmVzLT5wdXJnZSwgJmRsbS0+cHVyZ2VfbGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisKIAltYXN0ZXIgPSAocmVzLT5vd25lciA9PSBkbG0tPm5vZGVfbnVtKTsKKwogCWlmICghbWFzdGVyKQogCQlyZXMtPnN0YXRlIHw9IERMTV9MT0NLX1JFU19EUk9QUElOR19SRUY7CiAJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDcyMTlhODYuLmUxNWZjN2QgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTI0NCw2ICsyNDQsMTAgQEAKIAkuZmxhZ3MJCT0gMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja19yZXNfb3BzIG9jZnMyX25mc19zeW5jX2xvcHMgPSB7CisJLmZsYWdzCQk9IDAsCit9OworCiBzdGF0aWMgc3RydWN0IG9jZnMyX2xvY2tfcmVzX29wcyBvY2ZzMl9kZW50cnlfbG9wcyA9IHsKIAkuZ2V0X29zYgk9IG9jZnMyX2dldF9kZW50cnlfb3NiLAogCS5wb3N0X3VubG9jawk9IG9jZnMyX2RlbnRyeV9wb3N0X3VubG9jaywKQEAgLTYyMiw2ICs2MjYsMTcgQEAKIAkJCQkgICAmb2NmczJfcmVuYW1lX2xvcHMsIG9zYik7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX25mc19zeW5jX2xvY2tfcmVzX2luaXQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpyZXMsCisJCQkJCSBzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwkvKiBuZnNfc3luYyBsb2NrcmVzIGRvZXNuJ3QgY29tZSBmcm9tIGEgc2xhYiBzbyB3ZSBjYWxsIGluaXQKKwkgKiBvbmNlIG9uIGl0IG1hbnVhbGx5LiAgKi8KKwlvY2ZzMl9sb2NrX3Jlc19pbml0X29uY2UocmVzKTsKKwlvY2ZzMl9idWlsZF9sb2NrX25hbWUoT0NGUzJfTE9DS19UWVBFX05GU19TWU5DLCAwLCAwLCByZXMtPmxfbmFtZSk7CisJb2NmczJfbG9ja19yZXNfaW5pdF9jb21tb24ob3NiLCByZXMsIE9DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQywKKwkJCQkgICAmb2NmczJfbmZzX3N5bmNfbG9wcywgb3NiKTsKK30KKwogdm9pZCBvY2ZzMl9maWxlX2xvY2tfcmVzX2luaXQoc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzLAogCQkJICAgICAgc3RydWN0IG9jZnMyX2ZpbGVfcHJpdmF0ZSAqZnApCiB7CkBAIC0yNDE3LDYgKzI0MzIsMzQgQEAKIAkJb2NmczJfY2x1c3Rlcl91bmxvY2sob3NiLCBsb2NrcmVzLCBETE1fTE9DS19FWCk7CiB9CiAKK2ludCBvY2ZzMl9uZnNfc3luY19sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgZXgpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSAmb3NiLT5vc2JfbmZzX3N5bmNfbG9ja3JlczsKKworCWlmIChvY2ZzMl9pc19oYXJkX3JlYWRvbmx5KG9zYikpCisJCXJldHVybiAtRVJPRlM7CisKKwlpZiAob2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJcmV0dXJuIDA7CisKKwlzdGF0dXMgPSBvY2ZzMl9jbHVzdGVyX2xvY2sob3NiLCBsb2NrcmVzLCBleCA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFLAorCQkJCSAgICAwLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2sgb24gbmZzIHN5bmMgbG9jayBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIG9jZnMyX25mc19zeW5jX3VubG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IGV4KQoreworCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9ICZvc2ItPm9zYl9uZnNfc3luY19sb2NrcmVzOworCisJaWYgKCFvY2ZzMl9tb3VudF9sb2NhbChvc2IpKQorCQlvY2ZzMl9jbHVzdGVyX3VubG9jayhvc2IsIGxvY2tyZXMsCisJCQkJICAgICBleCA/IExLTV9FWE1PREUgOiBMS01fUFJNT0RFKTsKK30KKwogaW50IG9jZnMyX2RlbnRyeV9sb2NrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGV4KQogewogCWludCByZXQ7CkBAIC0yNzk4LDYgKzI4NDEsNyBAQAogbG9jYWw6CiAJb2NmczJfc3VwZXJfbG9ja19yZXNfaW5pdCgmb3NiLT5vc2Jfc3VwZXJfbG9ja3Jlcywgb3NiKTsKIAlvY2ZzMl9yZW5hbWVfbG9ja19yZXNfaW5pdCgmb3NiLT5vc2JfcmVuYW1lX2xvY2tyZXMsIG9zYik7CisJb2NmczJfbmZzX3N5bmNfbG9ja19yZXNfaW5pdCgmb3NiLT5vc2JfbmZzX3N5bmNfbG9ja3Jlcywgb3NiKTsKIAogCW9zYi0+Y2Nvbm4gPSBjb25uOwogCkBAIC0yODMzLDYgKzI4NzcsNyBAQAogCiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb3NiLT5vc2Jfc3VwZXJfbG9ja3Jlcyk7CiAJb2NmczJfbG9ja19yZXNfZnJlZSgmb3NiLT5vc2JfcmVuYW1lX2xvY2tyZXMpOworCW9jZnMyX2xvY2tfcmVzX2ZyZWUoJm9zYi0+b3NiX25mc19zeW5jX2xvY2tyZXMpOwogCiAJb2NmczJfY2x1c3Rlcl9kaXNjb25uZWN0KG9zYi0+Y2Nvbm4sIGhhbmd1cF9wZW5kaW5nKTsKIAlvc2ItPmNjb25uID0gTlVMTDsKQEAgLTMwMTUsNiArMzA2MCw3IEBACiB7CiAJb2NmczJfc2ltcGxlX2Ryb3BfbG9ja3Jlcyhvc2IsICZvc2ItPm9zYl9zdXBlcl9sb2NrcmVzKTsKIAlvY2ZzMl9zaW1wbGVfZHJvcF9sb2NrcmVzKG9zYiwgJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzKTsKKwlvY2ZzMl9zaW1wbGVfZHJvcF9sb2NrcmVzKG9zYiwgJm9zYi0+b3NiX25mc19zeW5jX2xvY2tyZXMpOwogfQogCiBpbnQgb2NmczJfZHJvcF9pbm9kZV9sb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5oIGIvZnMvb2NmczIvZGxtZ2x1ZS5oCmluZGV4IDNmOGQ5OTguLmUxZmQ1NzIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuaAorKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmgKQEAgLTExNSw2ICsxMTUsOCBAQAogCQkJaW50IGV4KTsKIGludCBvY2ZzMl9yZW5hbWVfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiB2b2lkIG9jZnMyX3JlbmFtZV91bmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOworaW50IG9jZnMyX25mc19zeW5jX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBleCk7Cit2b2lkIG9jZnMyX25mc19zeW5jX3VubG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IGV4KTsKIGludCBvY2ZzMl9kZW50cnlfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBleCk7CiB2b2lkIG9jZnMyX2RlbnRyeV91bmxvY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZXgpOwogaW50IG9jZnMyX2ZpbGVfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGV4LCBpbnQgdHJ5bG9jayk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9leHBvcnQuYyBiL2ZzL29jZnMyL2V4cG9ydC5jCmluZGV4IDJmMjdiMzMuLmRlM2RhOGUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4cG9ydC5jCisrKyBiL2ZzL29jZnMyL2V4cG9ydC5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJvY2ZzMi5oIgogCisjaW5jbHVkZSAiYWxsb2MuaCIKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJkbG1nbHVlLmgiCiAjaW5jbHVkZSAiZGNhY2hlLmgiCkBAIC0zOCw2ICszOSw3IEBACiAjaW5jbHVkZSAiaW5vZGUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCisjaW5jbHVkZSAic3ViYWxsb2MuaCIKIAogc3RydWN0IG9jZnMyX2lub2RlX2hhbmRsZQogewpAQCAtNDksMjkgKzUxLDk3IEBACiAJCXN0cnVjdCBvY2ZzMl9pbm9kZV9oYW5kbGUgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0Ioc2IpOworCXU2NCBibGtubyA9IGhhbmRsZS0+aWhfYmxrbm87CisJaW50IHN0YXR1cywgc2V0OwogCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwKVxuIiwgc2IsIGhhbmRsZSk7CiAKLQlpZiAoaGFuZGxlLT5paF9ibGtubyA9PSAwKSB7Ci0JCW1sb2dfZXJybm8oLUVTVEFMRSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCWlmIChibGtubyA9PSAwKSB7CisJCW1sb2coMCwgIm5mcyB3YW50cyBpbm9kZSB3aXRoIGJsa25vOiAwXG4iKTsKKwkJcmVzdWx0ID0gRVJSX1BUUigtRVNUQUxFKTsKKwkJZ290byBiYWlsOwogCX0KIAotCWlub2RlID0gb2NmczJfaWdldChPQ0ZTMl9TQihzYiksIGhhbmRsZS0+aWhfYmxrbm8sIDAsIDApOworCWlub2RlID0gb2NmczJfaWxvb2t1cChzYiwgYmxrbm8pOworCS8qCisJICogSWYgdGhlIGlub2RlIGV4aXN0cyBpbiBtZW1vcnksIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpdCdzCisJICogZ2VuZXJhdGlvbiBudW1iZXIKKwkgKi8KKwlpZiAoaW5vZGUpCisJCWdvdG8gY2hlY2tfZ2VuOwogCi0JaWYgKElTX0VSUihpbm9kZSkpCi0JCXJldHVybiAodm9pZCAqKWlub2RlOworCS8qCisJICogVGhpcyB3aWxsIHN5bmNocm9uaXplIHVzIGFnYWluc3Qgb2NmczJfZGVsZXRlX2lub2RlKCkgb24KKwkgKiBhbGwgbm9kZXMKKwkgKi8KKwlzdGF0dXMgPSBvY2ZzMl9uZnNfc3luY19sb2NrKG9zYiwgMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZyhNTF9FUlJPUiwgImdldHRpbmcgbmZzIHN5bmMgbG9jayhFWCkgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGNoZWNrX2VycjsKKwl9CiAKKwlzdGF0dXMgPSBvY2ZzMl90ZXN0X2lub2RlX2JpdChvc2IsIGJsa25vLCAmc2V0KTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlpZiAoc3RhdHVzID09IC1FSU5WQUwpIHsKKwkJCS8qCisJCQkgKiBUaGUgYmxrbm8gTkZTIGdhdmUgdXMgZG9lc24ndCBldmVuIHNob3cgdXAKKwkJCSAqIGFzIGFuIGlub2RlLCB3ZSByZXR1cm4gLUVTVEFMRSB0byBiZQorCQkJICogbmljZQorCQkJICovCisJCQltbG9nKDAsICJ0ZXN0IGlub2RlIGJpdCBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCQlzdGF0dXMgPSAtRVNUQUxFOworCQl9IGVsc2UgeworCQkJbWxvZyhNTF9FUlJPUiwgInRlc3QgaW5vZGUgYml0IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJfQorCQlnb3RvIHVubG9ja19uZnNfc3luYzsKKwl9CisKKwkvKiBJZiB0aGUgaW5vZGUgYWxsb2NhdG9yIGJpdCBpcyBjbGVhciwgdGhpcyBpbm9kZSBtdXN0IGJlIHN0YWxlICovCisJaWYgKCFzZXQpIHsKKwkJbWxvZygwLCAiaW5vZGUgJWxsdSBzdWJhbGxvYyBiaXQgaXMgY2xlYXJcbiIsIGJsa25vKTsKKwkJc3RhdHVzID0gLUVTVEFMRTsKKwkJZ290byB1bmxvY2tfbmZzX3N5bmM7CisJfQorCisJaW5vZGUgPSBvY2ZzMl9pZ2V0KG9zYiwgYmxrbm8sIDAsIDApOworCit1bmxvY2tfbmZzX3N5bmM6CisJb2NmczJfbmZzX3N5bmNfdW5sb2NrKG9zYiwgMSk7CisKK2NoZWNrX2VycjoKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlpZiAoc3RhdHVzID09IC1FU1RBTEUpIHsKKwkJCW1sb2coMCwgInN0YWxlIGlub2RlIGlubzogJWxsdSBnZW5lcmF0aW9uOiAldVxuIiwKKwkJCSAgICAgYmxrbm8sIGhhbmRsZS0+aWhfZ2VuZXJhdGlvbik7CisJCX0KKwkJcmVzdWx0ID0gRVJSX1BUUihzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJbWxvZ19lcnJubyhQVFJfRVJSKGlub2RlKSk7CisJCXJlc3VsdCA9ICh2b2lkICopaW5vZGU7CisJCWdvdG8gYmFpbDsKKwl9CisKK2NoZWNrX2dlbjoKIAlpZiAoaGFuZGxlLT5paF9nZW5lcmF0aW9uICE9IGlub2RlLT5pX2dlbmVyYXRpb24pIHsKIAkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCQltbG9nKDAsICJzdGFsZSBpbm9kZSBpbm86ICVsbHUgZ2VuZXJhdGlvbjogJXVcbiIsIGJsa25vLAorCQkgICAgIGhhbmRsZS0+aWhfZ2VuZXJhdGlvbik7CisJCXJlc3VsdCA9IEVSUl9QVFIoLUVTVEFMRSk7CisJCWdvdG8gYmFpbDsKIAl9CiAKIAlyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7CiAJaWYgKCFJU19FUlIocmVzdWx0KSkKIAkJcmVzdWx0LT5kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CisJZWxzZQorCQltbG9nX2Vycm5vKFBUUl9FUlIocmVzdWx0KSk7CiAKK2JhaWw6CiAJbWxvZ19leGl0X3B0cihyZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCAyMjllNzA3Li4xMGUxZmE4NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuYworKysgYi9mcy9vY2ZzMi9pbm9kZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAib2NmczIuaCIKIAogI2luY2x1ZGUgImFsbG9jLmgiCisjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAiYmxvY2tjaGVjay5oIgogI2luY2x1ZGUgImRsbWdsdWUuaCIKICNpbmNsdWRlICJleHRlbnRfbWFwLmgiCkBAIC0xMTIsNiArMTEzLDE3IEBACiAJCW9pLT5pcF9hdHRyIHw9IE9DRlMyX0RJUlNZTkNfRkw7CiB9CiAKK3N0cnVjdCBpbm9kZSAqb2NmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgYmxrbm8pCit7CisJc3RydWN0IG9jZnMyX2ZpbmRfaW5vZGVfYXJncyBhcmdzOworCisJYXJncy5maV9ibGtubyA9IGJsa25vOworCWFyZ3MuZmlfZmxhZ3MgPSAwOworCWFyZ3MuZmlfaW5vID0gaW5vX2Zyb21fYmxrbm8oc2IsIGJsa25vKTsKKwlhcmdzLmZpX3N5c2ZpbGVfdHlwZSA9IDA7CisKKwlyZXR1cm4gaWxvb2t1cDUoc2IsIGJsa25vLCBvY2ZzMl9maW5kX2FjdG9yLCAmYXJncyk7Cit9CiBzdHJ1Y3QgaW5vZGUgKm9jZnMyX2lnZXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHU2NCBibGtubywgdW5zaWduZWQgZmxhZ3MsCiAJCQkgaW50IHN5c2ZpbGVfdHlwZSkKIHsKQEAgLTI3NSw3ICsyODcsNyBAQAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZmUtPmlfYmxrbm8pKTsKIAotCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmUtPmlfbGlua3NfY291bnQpOworCWlub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChmZSk7CiAKIAlpZiAoZmUtPmlfZmxhZ3MgJiBjcHVfdG9fbGUzMihPQ0ZTMl9TWVNURU1fRkwpKSB7CiAJCU9DRlMyX0koaW5vZGUpLT5pcF9mbGFncyB8PSBPQ0ZTMl9JTk9ERV9TWVNURU1fRklMRTsKQEAgLTM1MSw2ICszNjMsOCBAQAogCiAJb2NmczJfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKIAorCU9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3VzZWRfc2xvdCA9IDA7CisJT0NGUzJfSShpbm9kZSktPmlwX2xhc3RfdXNlZF9ncm91cCA9IDA7CiAJbWxvZ19leGl0X3ZvaWQoKTsKIH0KIApAQCAtNjA2LDcgKzYyMCw3IEBACiAJfQogCiAJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9ERUxFVEVfSU5PREVfQ1JFRElUUyArCi0JCQkJCW9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoaW5vZGUtPmlfc2IpKTsKKwkJCQkgICBvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKGlub2RlLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNzQwLDYgKzc1NCwxNSBAQAogCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKIAl9CiAKKwkvKiBSZW1vdmUgYW55IGRpciBpbmRleCB0cmVlICovCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJc3RhdHVzID0gb2NmczJfZHhfZGlyX3RydW5jYXRlKGlub2RlLCBkaV9iaCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCWdvdG8gYmFpbF91bmxvY2tfZGlyOworCQl9CisJfQorCiAJLypGcmVlIGV4dGVuZGVkIGF0dHJpYnV0ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5vZGUuKi8KIAlzdGF0dXMgPSBvY2ZzMl94YXR0cl9yZW1vdmUoaW5vZGUsIGRpX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtOTQ5LDYgKzk3MiwxNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJLyoKKwkgKiBTeW5jaHJvbml6ZSB1cyBhZ2FpbnN0IG9jZnMyX2dldF9kZW50cnkuIFdlIHRha2UgdGhpcyBpbgorCSAqIHNoYXJlZCBtb2RlIHNvIHRoYXQgYWxsIG5vZGVzIGNhbiBzdGlsbCBjb25jdXJyZW50bHkKKwkgKiBwcm9jZXNzIGRlbGV0ZXMuCisJICovCisJc3RhdHVzID0gb2NmczJfbmZzX3N5bmNfbG9jayhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksIDApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJnZXR0aW5nIG5mcyBzeW5jIGxvY2soUFIpIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJb2NmczJfY2xlYW51cF9kZWxldGVfaW5vZGUoaW5vZGUsIDApOworCQlnb3RvIGJhaWxfdW5ibG9jazsKKwl9CiAJLyogTG9jayBkb3duIHRoZSBpbm9kZS4gVGhpcyBnaXZlcyB1cyBhbiB1cCB0byBkYXRlIHZpZXcgb2YKIAkgKiBpdCdzIG1ldGFkYXRhIChmb3IgdmVyaWZpY2F0aW9uKSwgYW5kIGFsbG93cyB1cyB0bwogCSAqIHNlcmlhbGl6ZSBkZWxldGVfaW5vZGUgb24gbXVsdGlwbGUgbm9kZXMuCkBAIC05NjIsNyArOTk2LDcgQEAKIAkJaWYgKHN0YXR1cyAhPSAtRU5PRU5UKQogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlvY2ZzMl9jbGVhbnVwX2RlbGV0ZV9pbm9kZShpbm9kZSwgMCk7Ci0JCWdvdG8gYmFpbF91bmJsb2NrOworCQlnb3RvIGJhaWxfdW5sb2NrX25mc19zeW5jOwogCX0KIAogCS8qIFF1ZXJ5IHRoZSBjbHVzdGVyLiBUaGlzIHdpbGwgYmUgdGhlIGZpbmFsIGRlY2lzaW9uIG1hZGUKQEAgLTEwMDUsNiArMTAzOSwxMCBAQAogYmFpbF91bmxvY2tfaW5vZGU6CiAJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlLCAxKTsKIAlicmVsc2UoZGlfYmgpOworCitiYWlsX3VubG9ja19uZnNfc3luYzoKKwlvY2ZzMl9uZnNfc3luY191bmxvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCAwKTsKKwogYmFpbF91bmJsb2NrOgogCXN0YXR1cyA9IHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkc2V0LCBOVUxMKTsKIAlpZiAoc3RhdHVzIDwgMCkKQEAgLTEyMDUsNyArMTI0Myw3IEBACiAJc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKIAogCWZlLT5pX3NpemUgPSBjcHVfdG9fbGU2NChpX3NpemVfcmVhZChpbm9kZSkpOwotCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCW9jZnMyX3NldF9saW5rc19jb3VudChmZSwgaW5vZGUtPmlfbmxpbmspOwogCWZlLT5pX3VpZCA9IGNwdV90b19sZTMyKGlub2RlLT5pX3VpZCk7CiAJZmUtPmlfZ2lkID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfZ2lkKTsKIAlmZS0+aV9tb2RlID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbW9kZSk7CkBAIC0xMjQyLDcgKzEyODAsNyBAQAogCU9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgPSBsZTE2X3RvX2NwdShmZS0+aV9keW5fZmVhdHVyZXMpOwogCW9jZnMyX3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBsZTY0X3RvX2NwdShmZS0+aV9zaXplKSk7Ci0JaW5vZGUtPmlfbmxpbmsgPSBsZTE2X3RvX2NwdShmZS0+aV9saW5rc19jb3VudCk7CisJaW5vZGUtPmlfbmxpbmsgPSBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGZlKTsKIAlpbm9kZS0+aV91aWQgPSBsZTMyX3RvX2NwdShmZS0+aV91aWQpOwogCWlub2RlLT5pX2dpZCA9IGxlMzJfdG9fY3B1KGZlLT5pX2dpZCk7CiAJaW5vZGUtPmlfbW9kZSA9IGxlMTZfdG9fY3B1KGZlLT5pX21vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuaCBiL2ZzL29jZnMyL2lub2RlLmgKaW5kZXggZWIzYzMwMi4uZWE3MTUyNSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuaAorKysgYi9mcy9vY2ZzMi9pbm9kZS5oCkBAIC03Miw2ICs3MiwxMCBAQAogCiAJc3RydWN0IGlub2RlCQkJdmZzX2lub2RlOwogCXN0cnVjdCBqYmQyX2lub2RlCQlpcF9qaW5vZGU7CisKKwkvKiBPbmx5IHZhbGlkIGlmIHRoZSBpbm9kZSBpcyB0aGUgZGlyLiAqLworCXUzMgkJCQlpcF9sYXN0X3VzZWRfc2xvdDsKKwl1NjQJCQkJaXBfbGFzdF91c2VkX2dyb3VwOwogfTsKIAogLyoKQEAgLTEyNCw2ICsxMjgsNyBAQAogLyogRmxhZ3MgZm9yIG9jZnMyX2lnZXQoKSAqLwogI2RlZmluZSBPQ0ZTMl9GSV9GTEFHX1NZU0ZJTEUJCTB4MQogI2RlZmluZSBPQ0ZTMl9GSV9GTEFHX09SUEhBTl9SRUNPVkVSWQkweDIKK3N0cnVjdCBpbm9kZSAqb2NmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgZmVvZmYpOwogc3RydWN0IGlub2RlICpvY2ZzMl9pZ2V0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgZmVvZmYsIHVuc2lnbmVkIGZsYWdzLAogCQkJIGludCBzeXNmaWxlX3R5cGUpOwogaW50IG9jZnMyX2lub2RlX2luaXRfcHJpdmF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuYwppbmRleCA1N2Q3ZDI1Li5hMjBhMGYxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmMKKysrIGIvZnMvb2NmczIvam91cm5hbC5jCkBAIC02NSw2ICs2NSwxMSBAQAogc3RhdGljIGludCBvY2ZzMl9yZWNvdmVyX29ycGhhbnMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJIGludCBzbG90KTsKIHN0YXRpYyBpbnQgb2NmczJfY29tbWl0X3RocmVhZCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbCwKKwkJCQkJICAgIGludCBzbG90X251bSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmxhX2Rpbm9kZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKnRsX2Rpbm9kZSwKKwkJCQkJICAgIHN0cnVjdCBvY2ZzMl9xdW90YV9yZWNvdmVyeSAqcXJlYyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3dhaXRfb25fbW91bnQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CkBAIC03NiwxOCArODEsOTcgQEAKIAlyZXR1cm4gX19vY2ZzMl93YWl0X29uX21vdW50KG9zYiwgMSk7CiB9CiAKLQotCiAvKgotICogVGhlIHJlY292ZXJ5X2xpc3QgaXMgYSBzaW1wbGUgbGlua2VkIGxpc3Qgb2Ygbm9kZSBudW1iZXJzIHRvIHJlY292ZXIuCi0gKiBJdCBpcyBwcm90ZWN0ZWQgYnkgdGhlIHJlY292ZXJ5X2xvY2suCisgKiBUaGlzIHJlcGxheV9tYXAgaXMgdG8gdHJhY2sgb25saW5lL29mZmxpbmUgc2xvdHMsIHNvIHdlIGNvdWxkIHJlY292ZXIKKyAqIG9mZmxpbmUgc2xvdHMgZHVyaW5nIHJlY292ZXJ5IGFuZCBtb3VudAogICovCiAKLXN0cnVjdCBvY2ZzMl9yZWNvdmVyeV9tYXAgewotCXVuc2lnbmVkIGludCBybV91c2VkOwotCXVuc2lnbmVkIGludCAqcm1fZW50cmllczsKK2VudW0gb2NmczJfcmVwbGF5X3N0YXRlIHsKKwlSRVBMQVlfVU5ORUVERUQgPSAwLAkvKiBSZXBsYXkgaXMgbm90IG5lZWRlZCwgc28gaWdub3JlIHRoaXMgbWFwICovCisJUkVQTEFZX05FRURFRCwgCQkvKiBSZXBsYXkgc2xvdHMgbWFya2VkIGluIHJtX3JlcGxheV9zbG90cyAqLworCVJFUExBWV9ET05FIAkJLyogUmVwbGF5IHdhcyBhbHJlYWR5IHF1ZXVlZCAqLwogfTsKIAorc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgeworCXVuc2lnbmVkIGludCBybV9zbG90czsKKwllbnVtIG9jZnMyX3JlcGxheV9zdGF0ZSBybV9zdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHJtX3JlcGxheV9zbG90c1swXTsKK307CisKK3ZvaWQgb2NmczJfcmVwbGF5X21hcF9zZXRfc3RhdGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBzdGF0ZSkKK3sKKwlpZiAoIW9zYi0+cmVwbGF5X21hcCkKKwkJcmV0dXJuOworCisJLyogSWYgd2UndmUgYWxyZWFkeSBxdWV1ZWQgdGhlIHJlcGxheSwgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSB0byBkbyAqLworCWlmIChvc2ItPnJlcGxheV9tYXAtPnJtX3N0YXRlID09IFJFUExBWV9ET05FKQorCQlyZXR1cm47CisKKwlvc2ItPnJlcGxheV9tYXAtPnJtX3N0YXRlID0gc3RhdGU7Cit9CisKK2ludCBvY2ZzMl9jb21wdXRlX3JlcGxheV9zbG90cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlzdHJ1Y3Qgb2NmczJfcmVwbGF5X21hcCAqcmVwbGF5X21hcDsKKwlpbnQgaSwgbm9kZV9udW07CisKKwkvKiBJZiByZXBsYXkgbWFwIGlzIGFscmVhZHkgc2V0LCB3ZSBkb24ndCBkbyBpdCBhZ2FpbiAqLworCWlmIChvc2ItPnJlcGxheV9tYXApCisJCXJldHVybiAwOworCisJcmVwbGF5X21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwKSArCisJCQkgICAgIChvc2ItPm1heF9zbG90cyAqIHNpemVvZihjaGFyKSksIEdGUF9LRVJORUwpOworCisJaWYgKCFyZXBsYXlfbWFwKSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlyZXBsYXlfbWFwLT5ybV9zbG90cyA9IG9zYi0+bWF4X3Nsb3RzOworCXJlcGxheV9tYXAtPnJtX3N0YXRlID0gUkVQTEFZX1VOTkVFREVEOworCisJLyogc2V0IHJtX3JlcGxheV9zbG90cyBmb3Igb2ZmbGluZSBzbG90KHMpICovCisJZm9yIChpID0gMDsgaSA8IHJlcGxheV9tYXAtPnJtX3Nsb3RzOyBpKyspIHsKKwkJaWYgKG9jZnMyX3Nsb3RfdG9fbm9kZV9udW1fbG9ja2VkKG9zYiwgaSwgJm5vZGVfbnVtKSA9PSAtRU5PRU5UKQorCQkJcmVwbGF5X21hcC0+cm1fcmVwbGF5X3Nsb3RzW2ldID0gMTsKKwl9CisKKwlvc2ItPnJlcGxheV9tYXAgPSByZXBsYXlfbWFwOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvY2ZzMl9xdWV1ZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXAgPSBvc2ItPnJlcGxheV9tYXA7CisJaW50IGk7CisKKwlpZiAoIXJlcGxheV9tYXApCisJCXJldHVybjsKKworCWlmIChyZXBsYXlfbWFwLT5ybV9zdGF0ZSAhPSBSRVBMQVlfTkVFREVEKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVwbGF5X21hcC0+cm1fc2xvdHM7IGkrKykKKwkJaWYgKHJlcGxheV9tYXAtPnJtX3JlcGxheV9zbG90c1tpXSkKKwkJCW9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24ob3NiLT5qb3VybmFsLCBpLCBOVUxMLAorCQkJCQkJCU5VTEwsIE5VTEwpOworCXJlcGxheV9tYXAtPnJtX3N0YXRlID0gUkVQTEFZX0RPTkU7Cit9CisKK3ZvaWQgb2NmczJfZnJlZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXAgPSBvc2ItPnJlcGxheV9tYXA7CisKKwlpZiAoIW9zYi0+cmVwbGF5X21hcCkKKwkJcmV0dXJuOworCisJa2ZyZWUocmVwbGF5X21hcCk7CisJb3NiLT5yZXBsYXlfbWFwID0gTlVMTDsKK30KKwogaW50IG9jZnMyX3JlY292ZXJ5X2luaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcm07CkBAIC00OTYsNiArNTgwLDIyIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfdHJpZ2dlcnMgZHJfdHJpZ2dlcnMgPSB7CisJLm90X3RyaWdnZXJzID0geworCQkudF9jb21taXQgPSBvY2ZzMl9jb21taXRfdHJpZ2dlciwKKwkJLnRfYWJvcnQgPSBvY2ZzMl9hYm9ydF90cmlnZ2VyLAorCX0sCisJLm90X29mZnNldAk9IG9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrLCBkcl9jaGVjayksCit9OworCitzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRsX3RyaWdnZXJzID0geworCS5vdF90cmlnZ2VycyA9IHsKKwkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Fib3J0ID0gb2NmczJfYWJvcnRfdHJpZ2dlciwKKwl9LAorCS5vdF9vZmZzZXQJPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfbGVhZiwgZGxfY2hlY2spLAorfTsKKwogc3RhdGljIGludCBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKQEAgLTYwMCw2ICs3MDAsMjAgQEAKIAkJCQkgICAgICB0eXBlKTsKIH0KIAoraW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkcl90cmlnZ2VycywKKwkJCQkgICAgICB0eXBlKTsKK30KKworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCit7CisJcmV0dXJuIF9fb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgYmgsICZkbF90cmlnZ2VycywKKwkJCQkgICAgICB0eXBlKTsKK30KKwogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpCiB7CkBAIC0xMTc2LDI0ICsxMjkwLDI0IEBACiB9CiAKIC8qIENhbGxlZCBieSB0aGUgbW91bnQgY29kZSB0byBxdWV1ZSByZWNvdmVyeSB0aGUgbGFzdCBwYXJ0IG9mCi0gKiByZWNvdmVyeSBmb3IgaXQncyBvd24gc2xvdC4gKi8KKyAqIHJlY292ZXJ5IGZvciBpdCdzIG93biBhbmQgb2ZmbGluZSBzbG90KHMpLiAqLwogdm9pZCBvY2ZzMl9jb21wbGV0ZV9tb3VudF9yZWNvdmVyeShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKIHsKIAlzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbCA9IG9zYi0+am91cm5hbDsKIAotCWlmIChvc2ItPmRpcnR5KSB7Ci0JCS8qIE5vIG5lZWQgdG8gcXVldWUgdXAgb3VyIHRydW5jYXRlX2xvZyBhcyByZWd1bGFyCi0JCSAqIGNsZWFudXAgd2lsbCBjYXRjaCB0aGF0LiAqLwotCQlvY2ZzMl9xdWV1ZV9yZWNvdmVyeV9jb21wbGV0aW9uKGpvdXJuYWwsCi0JCQkJCQlvc2ItPnNsb3RfbnVtLAotCQkJCQkJb3NiLT5sb2NhbF9hbGxvY19jb3B5LAotCQkJCQkJTlVMTCwKLQkJCQkJCU5VTEwpOwotCQlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAwKTsKKwkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhciBjbGVhbnVwIHdpbGwgY2F0Y2gKKwkgKiB0aGF0ICovCisJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLCBvc2ItPnNsb3RfbnVtLAorCQkJCQlvc2ItPmxvY2FsX2FsbG9jX2NvcHksIE5VTEwsIE5VTEwpOworCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDApOwogCi0JCW9zYi0+bG9jYWxfYWxsb2NfY29weSA9IE5VTEw7Ci0JCW9zYi0+ZGlydHkgPSAwOwotCX0KKwlvc2ItPmxvY2FsX2FsbG9jX2NvcHkgPSBOVUxMOworCW9zYi0+ZGlydHkgPSAwOworCisJLyogcXVldWUgdG8gcmVjb3ZlciBvcnBoYW4gc2xvdHMgZm9yIGFsbCBvZmZsaW5lIHNsb3RzICovCisJb2NmczJfcmVwbGF5X21hcF9zZXRfc3RhdGUob3NiLCBSRVBMQVlfTkVFREVEKTsKKwlvY2ZzMl9xdWV1ZV9yZXBsYXlfc2xvdHMob3NiKTsKKwlvY2ZzMl9mcmVlX3JlcGxheV9zbG90cyhvc2IpOwogfQogCiB2b2lkIG9jZnMyX2NvbXBsZXRlX3F1b3RhX3JlY292ZXJ5KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQpAQCAtMTIzNiw2ICsxMzUwLDE0IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlzdGF0dXMgPSBvY2ZzMl9jb21wdXRlX3JlcGxheV9zbG90cyhvc2IpOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKKwkvKiBxdWV1ZSByZWNvdmVyeSBmb3Igb3VyIG93biBzbG90ICovCisJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihvc2ItPmpvdXJuYWwsIG9zYi0+c2xvdF9udW0sIE5VTEwsCisJCQkJCU5VTEwsIE5VTEwpOworCiAJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKIAl3aGlsZSAocm0tPnJtX3VzZWQpIHsKIAkJLyogSXQncyBhbHdheXMgc2FmZSB0byByZW1vdmUgZW50cnkgemVybywgYXMgd2Ugd29uJ3QKQEAgLTEzMDEsMTEgKzE0MjMsOCBAQAogCiAJb2NmczJfc3VwZXJfdW5sb2NrKG9zYiwgMSk7CiAKLQkvKiBXZSBhbHdheXMgcnVuIHJlY292ZXJ5IG9uIG91ciBvd24gb3JwaGFuIGRpciAtIHRoZSBkZWFkCi0JICogbm9kZShzKSBtYXkgaGF2ZSBkaXNhbGxvd2QgYSBwcmV2aW9zIGlub2RlIGRlbGV0ZS4gUmUtcHJvY2Vzc2luZwotCSAqIGlzIHRoZXJlZm9yZSByZXF1aXJlZC4gKi8KLQlvY2ZzMl9xdWV1ZV9yZWNvdmVyeV9jb21wbGV0aW9uKG9zYi0+am91cm5hbCwgb3NiLT5zbG90X251bSwgTlVMTCwKLQkJCQkJTlVMTCwgTlVMTCk7CisJLyogcXVldWUgcmVjb3ZlcnkgZm9yIG9mZmxpbmUgc2xvdHMgKi8KKwlvY2ZzMl9xdWV1ZV9yZXBsYXlfc2xvdHMob3NiKTsKIAogYmFpbDoKIAltdXRleF9sb2NrKCZvc2ItPnJlY292ZXJ5X2xvY2spOwpAQCAtMTMxNCw2ICsxNDMzLDcgQEAKIAkJZ290byByZXN0YXJ0OwogCX0KIAorCW9jZnMyX2ZyZWVfcmVwbGF5X3Nsb3RzKG9zYik7CiAJb3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzayA9IE5VTEw7CiAJbWIoKTsgLyogc3luYyB3aXRoIG9jZnMyX3JlY292ZXJ5X3RocmVhZF9ydW5uaW5nICovCiAJd2FrZV91cCgmb3NiLT5yZWNvdmVyeV9ldmVudCk7CkBAIC0xNDY1LDYgKzE1ODUsOSBAQAogCQlnb3RvIGRvbmU7CiAJfQogCisJLyogd2UgbmVlZCB0byBydW4gY29tcGxldGUgcmVjb3ZlcnkgZm9yIG9mZmxpbmUgb3JwaGFuIHNsb3RzICovCisJb2NmczJfcmVwbGF5X21hcF9zZXRfc3RhdGUob3NiLCBSRVBMQVlfTkVFREVEKTsKKwogCW1sb2coTUxfTk9USUNFLCAiUmVjb3ZlcmluZyBub2RlICVkIGZyb20gc2xvdCAlZCBvbiBkZXZpY2UgKCV1LCV1KVxuIiwKIAkgICAgIG5vZGVfbnVtLCBzbG90X251bSwKIAkgICAgIE1BSk9SKG9zYi0+c2ItPnNfZGV2KSwgTUlOT1Iob3NiLT5zYi0+c19kZXYpKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCAxNzI4NTBhLi42MTlkZDdmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC0zOCw2ICszOCwxNyBAQAogc3RydWN0IG9jZnMyX3N1cGVyOwogc3RydWN0IG9jZnMyX2Rpbm9kZTsKIAorLyoKKyAqIFRoZSByZWNvdmVyeV9saXN0IGlzIGEgc2ltcGxlIGxpbmtlZCBsaXN0IG9mIG5vZGUgbnVtYmVycyB0byByZWNvdmVyLgorICogSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSByZWNvdmVyeV9sb2NrLgorICovCisKK3N0cnVjdCBvY2ZzMl9yZWNvdmVyeV9tYXAgeworCXVuc2lnbmVkIGludCBybV91c2VkOworCXVuc2lnbmVkIGludCAqcm1fZW50cmllczsKK307CisKKwogc3RydWN0IG9jZnMyX2pvdXJuYWwgewogCWVudW0gb2NmczJfam91cm5hbF9zdGF0ZSAgIGpfc3RhdGU7ICAgIC8qIEpvdXJuYWxzIGN1cnJlbnQgc3RhdGUgICAqLwogCkBAIC0xMzksNiArMTUwLDcgQEAKIGludCBvY2ZzMl9yZWNvdmVyeV9pbml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHZvaWQgb2NmczJfcmVjb3ZlcnlfZXhpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiAKK2ludCBvY2ZzMl9jb21wdXRlX3JlcGxheV9zbG90cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiAvKgogICogIEpvdXJuYWwgQ29udHJvbDoKICAqICBJbml0aWFsaXplLCBMb2FkLCBTaHV0ZG93biwgV2lwZSBhIGpvdXJuYWwuCkBAIC0yNjYsNiArMjc4LDEyIEBACiAvKiBkaXJibG9jayAqLwogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOworLyogb2NmczJfZHhfcm9vdF9ibG9jayAqLworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOworLyogb2NmczJfZHhfbGVhZiAqLworaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwogLyogQW55dGhpbmcgdGhhdCBoYXMgbm8gZWNjICovCiBpbnQgb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdHlwZSk7CkBAIC0zNjgsMTQgKzM4NiwyOSBAQAogfQogCiAvKiBkYXRhIGJsb2NrIGZvciBuZXcgZGlyL3N5bWxpbmssIDIgZm9yIGJpdG1hcCB1cGRhdGVzIChiaXRtYXAgZmUgKwotICogYml0bWFwIGJsb2NrIGZvciB0aGUgbmV3IGJpdCkgKi8KLSNkZWZpbmUgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICgxICsgMikKKyAqIGJpdG1hcCBibG9jayBmb3IgdGhlIG5ldyBiaXQpIGR4X3Jvb3QgdXBkYXRlIGZvciBmcmVlIGxpc3QgKi8KKyNkZWZpbmUgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICgxICsgMiArIDEpCiAKLS8qIHBhcmVudCBmZSwgcGFyZW50IGJsb2NrLCBuZXcgZmlsZSBlbnRyeSwgaW5vZGUgYWxsb2MgZmUsIGlub2RlIGFsbG9jCi0gKiBncm91cCBkZXNjcmlwdG9yICsgbWtkaXIvc3ltbGluayBibG9ja3MgKyBxdW90YSB1cGRhdGUgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiAzICsgT0NGUzJfU1VCQUxMT0NfQUxMT0MgKyBPQ0ZTMl9ESVJfTElOS19BRERJVElPTkFMX0NSRURJVFMgKworCS8qIDEgYmxvY2sgZm9yIGluZGV4LCAyIGFsbG9jcyAoZGF0YSwgbWV0YWRhdGEpLCAxIGNsdXN0ZXJzCisJICogd29ydGggb2YgYmxvY2tzIGZvciBpbml0aWFsIGV4dGVudC4gKi8KKwlyZXR1cm4gMSArIDIgKiBPQ0ZTMl9TVUJBTExPQ19BTExPQyArCisJCW9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgMSk7Cit9CisKKy8qIHBhcmVudCBmZSwgcGFyZW50IGJsb2NrLCBuZXcgZmlsZSBlbnRyeSwgaW5kZXggbGVhZiwgaW5vZGUgYWxsb2MgZmUsIGlub2RlCisgKiBhbGxvYyBncm91cCBkZXNjcmlwdG9yICsgbWtkaXIvc3ltbGluayBibG9ja3MgKyBkaXIgYmxvY2tzICsgeGF0dHIKKyAqIGJsb2NrcyArIHF1b3RhIHVwZGF0ZSAqLworc3RhdGljIGlubGluZSBpbnQgb2NmczJfbWtub2RfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfZGlyLAorCQkJCSAgICAgIGludCB4YXR0cl9jcmVkaXRzKQoreworCWludCBkaXJfY3JlZGl0cyA9IE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUzsKKworCWlmIChpc19kaXIpCisJCWRpcl9jcmVkaXRzICs9IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzYik7CisKKwlyZXR1cm4gNCArIE9DRlMyX1NVQkFMTE9DX0FMTE9DICsgZGlyX2NyZWRpdHMgKyB4YXR0cl9jcmVkaXRzICsKIAkgICAgICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhzYik7CiB9CiAKQEAgLTM4OCwzMSArNDIxLDMxIEBACiAjZGVmaW5lIE9DRlMyX1NJTVBMRV9ESVJfRVhURU5EX0NSRURJVFMgKDIpCiAKIC8qIGZpbGUgdXBkYXRlIChubGluaywgZXRjKSArIGRpcmVjdG9yeSBtdGltZS9jdGltZSArIGRpciBlbnRyeSBibG9jayArIHF1b3RhCi0gKiB1cGRhdGUgb24gZGlyICovCisgKiB1cGRhdGUgb24gZGlyICsgaW5kZXggbGVhZiArIGR4IHJvb3QgdXBkYXRlIGZvciBmcmVlIGxpc3QgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2xpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiAyKk9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMSArCisJcmV0dXJuIDIqT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAzICsKIAkgICAgICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhzYik7CiB9CiAKIC8qIGlub2RlICsgZGlyIGlub2RlIChpZiB3ZSB1bmxpbmsgYSBkaXIpLCArIGRpciBlbnRyeSBibG9jayArIG9ycGhhbgotICogZGlyIGlub2RlIGxpbmsgKi8KKyAqIGRpciBpbm9kZSBsaW5rICsgZGlyIGlub2RlIGluZGV4IGxlYWYgKyBkaXIgaW5kZXggcm9vdCAqLwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfdW5saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAkvKiBUaGUgcXVvdGEgdXBkYXRlIGZyb20gb2NmczJfbGlua19jcmVkaXRzIGlzIHVudXNlZCBoZXJlLi4uICovCi0JcmV0dXJuIDIgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEgKyBvY2ZzMl9saW5rX2NyZWRpdHMoc2IpOworCXJldHVybiAyICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAzICsgb2NmczJfbGlua19jcmVkaXRzKHNiKTsKIH0KIAogLyogZGlub2RlICsgb3JwaGFuIGRpciBkaW5vZGUgKyBpbm9kZSBhbGxvYyBkaW5vZGUgKyBvcnBoYW4gZGlyIGVudHJ5ICsKLSAqIGlub2RlIGFsbG9jIGdyb3VwIGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgT0NGUzJfREVMRVRFX0lOT0RFX0NSRURJVFMgKDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEgKyAxKQorICogaW5vZGUgYWxsb2MgZ3JvdXAgZGVzY3JpcHRvciArIG9ycGhhbiBkaXIgaW5kZXggbGVhZiAqLworI2RlZmluZSBPQ0ZTMl9ERUxFVEVfSU5PREVfQ1JFRElUUyAoMyAqIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMykKIAogLyogZGlub2RlIHVwZGF0ZSwgb2xkIGRpciBkaW5vZGUgdXBkYXRlLCBuZXcgZGlyIGRpbm9kZSB1cGRhdGUsIG9sZAogICogZGlyIGRpciBlbnRyeSwgbmV3IGRpciBkaXIgZW50cnksIGRpciBlbnRyeSB1cGRhdGUgZm9yIHJlbmFtaW5nCi0gKiBkaXJlY3RvcnkgKyB0YXJnZXQgdW5saW5rICovCisgKiBkaXJlY3RvcnkgKyB0YXJnZXQgdW5saW5rICsgMyB4IGRpciBpbmRleCBsZWF2ZXMgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3JlbmFtZV9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDMgKyBvY2ZzMl91bmxpbmtfY3JlZGl0cyhzYik7CisJcmV0dXJuIDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDYgKyBvY2ZzMl91bmxpbmtfY3JlZGl0cyhzYik7CiB9CiAKIC8qIGdsb2JhbCBiaXRtYXAgZGlub2RlLCBncm91cCBkZXNjLiwgcmVsaW5rZWQgZ3JvdXAsCkBAIC00MjIsNiArNDU1LDIwIEBACiAJCQkJCSAgKyBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyBcCiAJCQkJCSAgKyBPQ0ZTMl9YQVRUUl9CTE9DS19VUERBVEVfQ1JFRElUUykKIAorLyogaW5vZGUgdXBkYXRlLCByZW1vdmFsIG9mIGR4IHJvb3QgYmxvY2sgZnJvbSBhbGxvY2F0b3IgKi8KKyNkZWZpbmUgT0NGUzJfRFhfUk9PVF9SRU1PVkVfQ1JFRElUUyAoT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKwlcCisJCQkJICAgICAgT0NGUzJfU1VCQUxMT0NfRlJFRSkKKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2FsY19keGlfZXhwYW5kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgY3JlZGl0cyA9IDEgKyBPQ0ZTMl9TVUJBTExPQ19BTExPQzsKKworCWNyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKHNiLCAxKTsKKwljcmVkaXRzICs9IG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoc2IpOworCisJcmV0dXJuIGNyZWRpdHM7Cit9CisKIC8qCiAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCByb290X2VsIGlzIHRoZSByb290CiAgKiBvZiBleHRlbnQgdHJlZS4gU28gZm9yIGFuIGlub2RlLCBpdCBzaG91bGQgYmUgJmZlLT5pZDIuaV9saXN0LiBPdGhlcndpc2UKQEAgLTQ1Nyw3ICs1MDQsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBibG9ja3MgPSBvY2ZzMl9ta25vZF9jcmVkaXRzKHNiKTsKKwlpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7CiAKIAkvKiBsaW5rcyBjYW4gYmUgbG9uZ2VyIHRoYW4gb25lIGJsb2NrIHNvIHdlIG1heSB1cGRhdGUgbWFueQogCSAqIHdpdGhpbiBvdXIgc2luZ2xlIGFsbG9jYXRlZCBleHRlbnQuICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKaW5kZXggZWM3MGNkYi4uYmFjN2U2YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfRElTS19BTExPQwogI2luY2x1ZGUgPGNsdXN0ZXIvbWFza2xvZy5oPgpAQCAtNzUsODQgKzc0LDYgQEAKIHN0YXRpYyBpbnQgb2NmczJfbG9jYWxfYWxsb2Nfc2xpZGVfd2luZG93KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCQkgIHN0cnVjdCBpbm9kZSAqbG9jYWxfYWxsb2NfaW5vZGUpOwogCi0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1NUQVRTCi0KLXN0YXRpYyBpbnQgb2NmczJfbGFfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIExBX0RFQlVHX0JVRl9TWglQQUdFX0NBQ0hFX1NJWkUKLSNkZWZpbmUgTEFfREVCVUdfVkVSCTEKLXN0YXRpYyBzc2l6ZV90IG9jZnMyX2xhX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0YXRpYyBERUZJTkVfTVVURVgobGFfZGVidWdfbXV0ZXgpOwotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCB3cml0dGVuLCByZXQ7Ci0JY2hhciAqYnVmID0gb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWY7Ci0KLQltdXRleF9sb2NrKCZsYV9kZWJ1Z19tdXRleCk7Ci0JbWVtc2V0KGJ1ZiwgMCwgTEFfREVCVUdfQlVGX1NaKTsKLQotCXdyaXR0ZW4gPSBzbnByaW50ZihidWYsIExBX0RFQlVHX0JVRl9TWiwKLQkJCSAgICIweCV4XHQweCVsbHhcdCV1XHQldVx0MHgleFxuIiwKLQkJCSAgIExBX0RFQlVHX1ZFUiwKLQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpb3NiLT5sYV9sYXN0X2dkLAotCQkJICAgb3NiLT5sb2NhbF9hbGxvY19kZWZhdWx0X2JpdHMsCi0JCQkgICBvc2ItPmxvY2FsX2FsbG9jX2JpdHMsIG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUpOwotCi0JcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1Ziwgd3JpdHRlbik7Ci0KLQltdXRleF91bmxvY2soJmxhX2RlYnVnX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9sYV9kZWJ1Z19mb3BzID0gewotCS5vcGVuID0JCW9jZnMyX2xhX2RlYnVnX29wZW4sCi0JLnJlYWQgPQkJb2NmczJfbGFfZGVidWdfcmVhZCwKLX07Ci0KLXN0YXRpYyB2b2lkIG9jZnMyX2luaXRfbGFfZGVidWcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0Jb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYgPSBrbWFsbG9jKExBX0RFQlVHX0JVRl9TWiwgR0ZQX05PRlMpOwotCWlmICghb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpCi0JCXJldHVybjsKLQotCW9zYi0+bG9jYWxfYWxsb2NfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsb2NhbF9hbGxvY19zdGF0cyIsCi0JCQkJCQkgICAgIFNfSUZSRUd8U19JUlVTUiwKLQkJCQkJCSAgICAgb3NiLT5vc2JfZGVidWdfcm9vdCwKLQkJCQkJCSAgICAgb3NiLAotCQkJCQkJICAgICAmb2NmczJfbGFfZGVidWdfZm9wcyk7Ci0JaWYgKCFvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKSB7Ci0JCWtmcmVlKG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKTsKLQkJb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYgPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQgb2NmczJfc2h1dGRvd25fbGFfZGVidWcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0JaWYgKG9zYi0+bG9jYWxfYWxsb2NfZGVidWcpCi0JCWRlYnVnZnNfcmVtb3ZlKG9zYi0+bG9jYWxfYWxsb2NfZGVidWcpOwotCi0JaWYgKG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKQotCQlrZnJlZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1Zik7Ci0KLQlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZiA9IE5VTEw7Ci0Jb3NiLT5sb2NhbF9hbGxvY19kZWJ1ZyA9IE5VTEw7Ci19Ci0jZWxzZQkvKiBDT05GSUdfT0NGUzJfRlNfU1RBVFMgKi8KLXN0YXRpYyB2b2lkIG9jZnMyX2luaXRfbGFfZGVidWcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0JcmV0dXJuOwotfQotc3RhdGljIHZvaWQgb2NmczJfc2h1dGRvd25fbGFfZGVidWcoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2xhX3N0YXRlX2VuYWJsZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJcmV0dXJuIChvc2ItPmxvY2FsX2FsbG9jX3N0YXRlID09IE9DRlMyX0xBX1RIUk9UVExFRCB8fApAQCAtMjI2LDggKzE0Nyw2IEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCW9jZnMyX2luaXRfbGFfZGVidWcob3NiKTsKLQogCWlmIChvc2ItPmxvY2FsX2FsbG9jX2JpdHMgPT0gMCkKIAkJZ290byBiYWlsOwogCkBAIC0yOTksOSArMjE4LDYgQEAKIAlpZiAoaW5vZGUpCiAJCWlwdXQoaW5vZGUpOwogCi0JaWYgKHN0YXR1cyA8IDApCi0JCW9jZnMyX3NodXRkb3duX2xhX2RlYnVnKG9zYik7Ci0KIAltbG9nKDAsICJMb2NhbCBhbGxvYyB3aW5kb3cgYml0cyA9ICVkXG4iLCBvc2ItPmxvY2FsX2FsbG9jX2JpdHMpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CkBAIC0zMzEsOCArMjQ3LDYgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZvc2ItPmxhX2VuYWJsZV93cSk7CiAJZmx1c2hfd29ya3F1ZXVlKG9jZnMyX3dxKTsKIAotCW9jZnMyX3NodXRkb3duX2xhX2RlYnVnKG9zYik7Ci0KIAlpZiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9VTlVTRUQpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9tbWFwLmMgYi9mcy9vY2ZzMi9tbWFwLmMKaW5kZXggZWVhMWQyNC4uYjYwNjQ5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbW1hcC5jCisrKyBiL2ZzL29jZnMyL21tYXAuYwpAQCAtMTU0LDggKzE1NCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCBvY2ZzMl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCA9IE5VTEw7CiAJc2lnc2V0X3QgYmxvY2tlZCwgb2xkc2V0OwpAQCAtMTk2LDcgKzE5Nyw4IEBACiAJcmV0MiA9IG9jZnMyX3ZtX29wX3VuYmxvY2tfc2lncygmb2xkc2V0KTsKIAlpZiAocmV0MiA8IDApCiAJCW1sb2dfZXJybm8ocmV0Mik7Ci0KKwlpZiAocmV0KQorCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmMKaW5kZXggNGIxMTc2Mi4uMjIyMGY5MyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYworKysgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC04MCwxNCArODAsMTQgQEAKIAkJCQkgICAgc3RydWN0IGlub2RlICoqcmV0X29ycGhhbl9kaXIsCiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmRlX2JoKTsKKwkJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApOwogCiBzdGF0aWMgaW50IG9jZnMyX29ycGhhbl9hZGQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAogCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXJfaW5vZGUpOwogCiBzdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9zeW1saW5rX2RhdGEoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCkBAIC0yMjgsMTcgKzIyOCwxOCBAQAogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpcmZlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2ZlX2JoID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqaW5vZGVfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqeGF0dHJfYWMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKIAlpbnQgd2FudF9jbHVzdGVycyA9IDA7CisJaW50IHdhbnRfbWV0YSA9IDA7CiAJaW50IHhhdHRyX2NyZWRpdHMgPSAwOwogCXN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvIHNpID0gewogCQkuZW5hYmxlID0gMSwKIAl9OwogCWludCBkaWRfcXVvdGFfaW5vZGUgPSAwOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJWQsICVsdSwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksIG1vZGUsCiAJCSAgICh1bnNpZ25lZCBsb25nKWRldiwgZGVudHJ5LT5kX25hbWUubGVuLApAQCAtMjU0LDEzICsyNTUsMTMgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKLQlpZiAoU19JU0RJUihtb2RlKSAmJiAoZGlyLT5pX25saW5rID49IE9DRlMyX0xJTktfTUFYKSkgeworCWlmIChTX0lTRElSKG1vZGUpICYmIChkaXItPmlfbmxpbmsgPj0gb2NmczJfbGlua19tYXgob3NiKSkpIHsKIAkJc3RhdHVzID0gLUVNTElOSzsKIAkJZ290byBsZWF2ZTsKIAl9CiAKIAlkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOwotCWlmICghZGlyZmUtPmlfbGlua3NfY291bnQpIHsKKwlpZiAoIW9jZnMyX3JlYWRfbGlua3NfY291bnQoZGlyZmUpKSB7CiAJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCiAJCXN0YXR1cyA9IC1FTk9FTlQ7CiAJCWdvdG8gbGVhdmU7CkBAIC0yNzQsNyArMjc1LDcgQEAKIAkvKiBnZXQgYSBzcG90IGluc2lkZSB0aGUgZGlyLiAqLwogCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCwKIAkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCAmZGVfYmgpOworCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTMwOCwxNyArMzA5LDI5IEBACiAKIAkvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi8KIAlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsCi0JCQkJCSZzaSwgJndhbnRfY2x1c3RlcnMsCi0JCQkJCSZ4YXR0cl9jcmVkaXRzLCAmeGF0dHJfYWMpOworCQkJCSAgICAgICAmc2ksICZ3YW50X2NsdXN0ZXJzLAorCQkJCSAgICAgICAmeGF0dHJfY3JlZGl0cywgJndhbnRfbWV0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwogCX0KIAogCS8qIFJlc2VydmUgYSBjbHVzdGVyIGlmIGNyZWF0aW5nIGFuIGV4dGVudCBiYXNlZCBkaXJlY3RvcnkuICovCi0JaWYgKFNfSVNESVIobW9kZSkgJiYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpCisJaWYgKFNfSVNESVIobW9kZSkgJiYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHsKIAkJd2FudF9jbHVzdGVycyArPSAxOwogCisJCS8qIERpciBpbmRleGluZyByZXF1aXJlcyBleHRyYSBzcGFjZSBhcyB3ZWxsICovCisJCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkKKwkJCXdhbnRfbWV0YSsrOworCX0KKworCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIHdhbnRfbWV0YSwgJm1ldGFfYWMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKKwkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKG9zYiwgd2FudF9jbHVzdGVycywgJmRhdGFfYWMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKQEAgLTMyNiw4ICszMzksOSBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItPnNiKSArCi0JCQkJICAgeGF0dHJfY3JlZGl0cyk7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi0+c2IsCisJCQkJCQkJICAgIFNfSVNESVIobW9kZSksCisJCQkJCQkJICAgIHhhdHRyX2NyZWRpdHMpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJc3RhdHVzID0gUFRSX0VSUihoYW5kbGUpOwogCQloYW5kbGUgPSBOVUxMOwpAQCAtMzU1LDcgKzM2OSw3IEBACiAKIAlpZiAoU19JU0RJUihtb2RlKSkgewogCQlzdGF0dXMgPSBvY2ZzMl9maWxsX25ld19kaXIob3NiLCBoYW5kbGUsIGRpciwgaW5vZGUsCi0JCQkJCSAgICBuZXdfZmVfYmgsIGRhdGFfYWMpOworCQkJCQkgICAgbmV3X2ZlX2JoLCBkYXRhX2FjLCBtZXRhX2FjKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC0zNjcsNyArMzgxLDcgQEAKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CiAJCX0KLQkJbGUxNl9hZGRfY3B1KCZkaXJmZS0+aV9saW5rc19jb3VudCwgMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChkaXJmZSwgMSk7CiAJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBwYXJlbnRfZmVfYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMzc3LDcgKzM5MSw3IEBACiAJfQogCiAJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCQl4YXR0cl9hYywgZGF0YV9hYyk7CisJCQkJbWV0YV9hYywgZGF0YV9hYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtMzg1LDcgKzM5OSw3IEBACiAKIAlpZiAoc2kuZW5hYmxlKSB7CiAJCXN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgJnNpLAotCQkJCQkJIHhhdHRyX2FjLCBkYXRhX2FjKTsKKwkJCQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC0zOTQsNyArNDA4LDcgQEAKIAogCXN0YXR1cyA9IG9jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUsCiAJCQkJIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywgcGFyZW50X2ZlX2JoLAotCQkJCSBkZV9iaCk7CisJCQkJICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQyMywxMSArNDM3LDEyIEBACiAJCW1sb2coMCwgIkRpc2sgaXMgZnVsbFxuIik7CiAKIAlicmVsc2UobmV3X2ZlX2JoKTsKLQlicmVsc2UoZGVfYmgpOwogCWJyZWxzZShwYXJlbnRfZmVfYmgpOwogCWtmcmVlKHNpLm5hbWUpOwogCWtmcmVlKHNpLnZhbHVlKTsKIAorCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CisKIAlpZiAoKHN0YXR1cyA8IDApICYmIGlub2RlKSB7CiAJCWNsZWFyX25saW5rKGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC00MzksOCArNDU0LDggQEAKIAlpZiAoZGF0YV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOwogCi0JaWYgKHhhdHRyX2FjKQotCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoeGF0dHJfYWMpOworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIApAQCAtNDYyLDYgKzQ3Nyw3IEBACiAJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICpmZWw7CiAJdTY0IGZlX2Jsa25vID0gMDsKIAl1MTYgc3ViYWxsb2NfYml0OworCXUxNiBmZWF0OwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICVkLCAlbHUsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAogCQkgICBpbm9kZS0+aV9tb2RlLCAodW5zaWduZWQgbG9uZylkZXYsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKQEAgLTQ2OSw4ICs0ODUsOCBAQAogCiAJKm5ld19mZV9iaCA9IE5VTEw7CiAKLQlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUob3NiLCBoYW5kbGUsIGlub2RlX2FjLCAmc3ViYWxsb2NfYml0LAotCQkJCSAgICAgICAmZmVfYmxrbm8pOworCXN0YXR1cyA9IG9jZnMyX2NsYWltX25ld19pbm9kZShvc2IsIGhhbmRsZSwgZGlyLCBwYXJlbnRfZmVfYmgsCisJCQkJICAgICAgIGlub2RlX2FjLCAmc3ViYWxsb2NfYml0LCAmZmVfYmxrbm8pOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTUxMyw3ICs1MjksOCBAQAogCWZlLT5pX21vZGUgPSBjcHVfdG9fbGUxNihpbm9kZS0+aV9tb2RlKTsKIAlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKQogCQlmZS0+aWQxLmRldjEuaV9yZGV2ID0gY3B1X3RvX2xlNjQoaHVnZV9lbmNvZGVfZGV2KGRldikpOwotCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCisJb2NmczJfc2V0X2xpbmtzX2NvdW50KGZlLCBpbm9kZS0+aV9ubGluayk7CiAKIAlmZS0+aV9sYXN0X2ViX2JsayA9IDA7CiAJc3RyY3B5KGZlLT5pX3NpZ25hdHVyZSwgT0NGUzJfSU5PREVfU0lHTkFUVVJFKTsKQEAgLTUyNSwxMSArNTQyLDExIEBACiAJZmUtPmlfZHRpbWUgPSAwOwogCiAJLyoKLQkgKiBJZiBzdXBwb3J0ZWQsIGRpcmVjdG9yaWVzIHN0YXJ0IHdpdGggaW5saW5lIGRhdGEuCisJICogSWYgc3VwcG9ydGVkLCBkaXJlY3RvcmllcyBzdGFydCB3aXRoIGlubGluZSBkYXRhLiBJZiBpbmxpbmUKKwkgKiBpc24ndCBzdXBwb3J0ZWQsIGJ1dCBpbmRleGluZyBpcywgd2Ugc3RhcnQgdGhlbSBhcyBpbmRleGVkLgogCSAqLworCWZlYXQgPSBsZTE2X3RvX2NwdShmZS0+aV9keW5fZmVhdHVyZXMpOwogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHsKLQkJdTE2IGZlYXQgPSBsZTE2X3RvX2NwdShmZS0+aV9keW5fZmVhdHVyZXMpOwotCiAJCWZlLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KGZlYXQgfCBPQ0ZTMl9JTkxJTkVfREFUQV9GTCk7CiAKIAkJZmUtPmlkMi5pX2RhdGEuaWRfY291bnQgPSBjcHVfdG9fbGUxNigKQEAgLTYwOCw5ICs2MjUsOSBAQAogCWludCBlcnI7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAogCW1sb2dfZW50cnkoIihpbm9kZT0lbHUsIG9sZD0nJS4qcycgbmV3PSclLipzJylcbiIsIGlub2RlLT5pX2lubywKIAkJICAgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCkBAIC02MzgsNyArNjU1LDcgQEAKIAogCWVyciA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCwKIAkJCQkJICAgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICAgZGVudHJ5LT5kX25hbWUubGVuLCAmZGVfYmgpOworCQkJCQkgICBkZW50cnktPmRfbmFtZS5sZW4sICZsb29rdXApOwogCWlmIChlcnIgPCAwKSB7CiAJCW1sb2dfZXJybm8oZXJyKTsKIAkJZ290byBvdXQ7CkBAIC02NTIsNyArNjY5LDcgQEAKIAl9CiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7Ci0JaWYgKGxlMTZfdG9fY3B1KGZlLT5pX2xpbmtzX2NvdW50KSA+PSBPQ0ZTMl9MSU5LX01BWCkgeworCWlmIChvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGZlKSA+PSBvY2ZzMl9saW5rX21heChvc2IpKSB7CiAJCWVyciA9IC1FTUxJTks7CiAJCWdvdG8gb3V0X3VubG9ja19pbm9kZTsKIAl9CkBAIC02NzQsMTMgKzY5MSwxMyBAQAogCiAJaW5jX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIGlub2RlLT5pX25saW5rKTsKIAlmZS0+aV9jdGltZSA9IGNwdV90b19sZTY0KGlub2RlLT5pX2N0aW1lLnR2X3NlYyk7CiAJZmUtPmlfY3RpbWVfbnNlYyA9IGNwdV90b19sZTMyKGlub2RlLT5pX2N0aW1lLnR2X25zZWMpOwogCiAJZXJyID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKIAlpZiAoZXJyIDwgMCkgewotCQlsZTE2X2FkZF9jcHUoJmZlLT5pX2xpbmtzX2NvdW50LCAtMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChmZSwgLTEpOwogCQlkcm9wX25saW5rKGlub2RlKTsKIAkJbWxvZ19lcnJubyhlcnIpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC02ODgsOSArNzA1LDkgQEAKIAogCWVyciA9IG9jZnMyX2FkZF9lbnRyeShoYW5kbGUsIGRlbnRyeSwgaW5vZGUsCiAJCQkgICAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkgICAgICBwYXJlbnRfZmVfYmgsIGRlX2JoKTsKKwkJCSAgICAgIHBhcmVudF9mZV9iaCwgJmxvb2t1cCk7CiAJaWYgKGVycikgewotCQlsZTE2X2FkZF9jcHUoJmZlLT5pX2xpbmtzX2NvdW50LCAtMSk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChmZSwgLTEpOwogCQlkcm9wX25saW5rKGlub2RlKTsKIAkJbWxvZ19lcnJubyhlcnIpOwogCQlnb3RvIG91dF9jb21taXQ7CkBAIC03MTQsMTAgKzczMSwxMSBAQAogb3V0OgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDEpOwogCi0JYnJlbHNlKGRlX2JoKTsKIAlicmVsc2UoZmVfYmgpOwogCWJyZWxzZShwYXJlbnRfZmVfYmgpOwogCisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKKwogCW1sb2dfZXhpdChlcnIpOwogCiAJcmV0dXJuIGVycjsKQEAgLTc2NiwxMCArNzg0LDkgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9ub2RlX2JoID0gTlVMTDsKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkaXJlbnQgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZW50X2JoID0gTlVMTDsKIAljaGFyIG9ycGhhbl9uYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZW50cnlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IG9ycGhhbl9pbnNlcnQgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksCiAJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CkBAIC03OTEsOCArODA4LDggQEAKIAl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2soZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkJICBkZW50cnktPmRfbmFtZS5sZW4sICZibGtubywKLQkJCQkJICBkaXIsICZkaXJlbnRfYmgsICZkaXJlbnQpOworCQkJCQkgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmJsa25vLCBkaXIsCisJCQkJCSAgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaWYgKHN0YXR1cyAhPSAtRU5PRU5UKQogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODE3LDEwICs4MzQsNyBAQAogCWNoaWxkX2xvY2tlZCA9IDE7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCSAgICAgICAJaWYgKCFvY2ZzMl9lbXB0eV9kaXIoaW5vZGUpKSB7Ci0JCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwotCQkJZ290byBsZWF2ZTsKLQkJfSBlbHNlIGlmIChpbm9kZS0+aV9ubGluayAhPSAyKSB7CisJCWlmIChpbm9kZS0+aV9ubGluayAhPSAyIHx8ICFvY2ZzMl9lbXB0eV9kaXIoaW5vZGUpKSB7CiAJCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwogCQkJZ290byBsZWF2ZTsKIAkJfQpAQCAtODM2LDggKzg1MCw3IEBACiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgJm9ycGhhbl9kaXIsIGlub2RlLAotCQkJCQkJICBvcnBoYW5fbmFtZSwKLQkJCQkJCSAgJm9ycGhhbl9lbnRyeV9iaCk7CisJCQkJCQkgIG9ycGhhbl9uYW1lLCAmb3JwaGFuX2luc2VydCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwpAQCAtODYzLDcgKzg3Niw3IEBACiAKIAlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfb3JwaGFuX2FkZChvc2IsIGhhbmRsZSwgaW5vZGUsIGZlLCBvcnBoYW5fbmFtZSwKLQkJCQkJICBvcnBoYW5fZW50cnlfYmgsIG9ycGhhbl9kaXIpOworCQkJCQkgICZvcnBoYW5faW5zZXJ0LCBvcnBoYW5fZGlyKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gbGVhdmU7CkBAIC04NzEsNyArODg0LDcgQEAKIAl9CiAKIAkvKiBkZWxldGUgdGhlIG5hbWUgZnJvbSB0aGUgcGFyZW50IGRpciAqLwotCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIGRpciwgZGlyZW50LCBkaXJlbnRfYmgpOworCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIGRpciwgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtODgwLDcgKzg5Myw3IEBACiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCWRyb3BfbmxpbmsoaW5vZGUpOwogCWRyb3BfbmxpbmsoaW5vZGUpOwotCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOworCW9jZnMyX3NldF9saW5rc19jb3VudChmZSwgaW5vZGUtPmlfbmxpbmspOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtOTE2LDkgKzkyOSwxMCBAQAogCX0KIAogCWJyZWxzZShmZV9iaCk7Ci0JYnJlbHNlKGRpcmVudF9iaCk7CiAJYnJlbHNlKHBhcmVudF9ub2RlX2JoKTsKLQlicmVsc2Uob3JwaGFuX2VudHJ5X2JoKTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9ycGhhbl9pbnNlcnQpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CiAKIAltbG9nX2V4aXQoc3RhdHVzKTsKIApAQCAtMTAwNCw4ICsxMDE4LDggQEAKIAkJCXN0cnVjdCBpbm9kZSAqbmV3X2RpciwKIAkJCXN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCiB7Ci0JaW50IHN0YXR1cyA9IDAsIHJlbmFtZV9sb2NrID0gMCwgcGFyZW50c19sb2NrZWQgPSAwOwotCWludCBvbGRfY2hpbGRfbG9ja2VkID0gMCwgbmV3X2NoaWxkX2xvY2tlZCA9IDA7CisJaW50IHN0YXR1cyA9IDAsIHJlbmFtZV9sb2NrID0gMCwgcGFyZW50c19sb2NrZWQgPSAwLCB0YXJnZXRfZXhpc3RzID0gMDsKKwlpbnQgb2xkX2NoaWxkX2xvY2tlZCA9IDAsIG5ld19jaGlsZF9sb2NrZWQgPSAwLCB1cGRhdGVfZG90X2RvdCA9IDA7CiAJc3RydWN0IGlub2RlICpvbGRfaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqbmV3X2lub2RlID0gbmV3X2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXIgPSBOVUxMOwpAQCAtMTAyMCwxMyArMTAzNCwxMyBAQAogCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2Rpcl9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfZGlyX2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpvbGRfaW5vZGVfZG90X2RvdF9kZSA9IE5VTEwsICpvbGRfZGUgPSBOVUxMLAotCQkqbmV3X2RlID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19kZV9iaCA9IE5VTEwsICpvbGRfZGVfYmggPSBOVUxMOyAvLyBiaHMgZm9yIGFib3ZlCi0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfaW5vZGVfZGVfYmggPSBOVUxMOyAvLyBpZiBvbGRfZGVudHJ5IGlzIGEgZGlyLAotCQkJCQkJICAgIC8vIHRoaXMgaXMgdGhlIDFzdCBkaXJlbnQgYmgKIAlubGlua190IG9sZF9kaXJfbmxpbmsgPSBvbGRfZGlyLT5pX25saW5rOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKm9sZF9kaTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb2xkX2lub2RlX2RvdF9kb3RfcmVzID0geyBOVUxMLCB9OworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCB0YXJnZXRfbG9va3VwX3JlcyA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb2xkX2VudHJ5X2xvb2t1cCA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgb3JwaGFuX2luc2VydCA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgdGFyZ2V0X2luc2VydCA9IHsgTlVMTCwgfTsKIAogCS8qIEF0IHNvbWUgcG9pbnQgaXQgbWlnaHQgYmUgbmljZSB0byBicmVhayB0aGlzIGZ1bmN0aW9uIHVwIGEKIAkgKiBiaXQuICovCkBAIC0xMTA4LDkgKzExMjIsMTAgQEAKIAlpZiAoU19JU0RJUihvbGRfaW5vZGUtPmlfbW9kZSkpIHsKIAkJdTY0IG9sZF9pbm9kZV9wYXJlbnQ7CiAKKwkJdXBkYXRlX2RvdF9kb3QgPSAxOwogCQlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2soIi4uIiwgMiwgJm9sZF9pbm9kZV9wYXJlbnQsCi0JCQkJCQkgIG9sZF9pbm9kZSwgJm9sZF9pbm9kZV9kZV9iaCwKLQkJCQkJCSAgJm9sZF9pbm9kZV9kb3RfZG90X2RlKTsKKwkJCQkJCSAgb2xkX2lub2RlLAorCQkJCQkJICAmb2xkX2lub2RlX2RvdF9kb3RfcmVzKTsKIAkJaWYgKHN0YXR1cykgewogCQkJc3RhdHVzID0gLUVJTzsKIAkJCWdvdG8gYmFpbDsKQEAgLTExMjIsNyArMTEzNyw3IEBACiAJCX0KIAogCQlpZiAoIW5ld19pbm9kZSAmJiBuZXdfZGlyICE9IG9sZF9kaXIgJiYKLQkJICAgIG5ld19kaXItPmlfbmxpbmsgPj0gT0NGUzJfTElOS19NQVgpIHsKKwkJICAgIG5ld19kaXItPmlfbmxpbmsgPj0gb2NmczJfbGlua19tYXgob3NiKSkgewogCQkJc3RhdHVzID0gLUVNTElOSzsKIAkJCWdvdG8gYmFpbDsKIAkJfQpAQCAtMTE1MSw4ICsxMTY2LDggQEAKIAkgKiB0byBkZWxldGUgaXQgKi8KIAlzdGF0dXMgPSBvY2ZzMl9maW5kX2ZpbGVzX29uX2Rpc2sobmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJCSAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkJICAmbmV3ZmVfYmxrbm8sIG5ld19kaXIsICZuZXdfZGVfYmgsCi0JCQkJCSAgJm5ld19kZSk7CisJCQkJCSAgJm5ld2ZlX2Jsa25vLCBuZXdfZGlyLAorCQkJCQkgICZ0YXJnZXRfbG9va3VwX3Jlcyk7CiAJLyogVGhlIG9ubHkgZXJyb3Igd2UgYWxsb3cgaGVyZSBpcyAtRU5PRU5UIGJlY2F1c2UgdGhlIG5ldwogCSAqIGZpbGUgbm90IGV4aXN0aW5nIGlzIHBlcmZlY3RseSB2YWxpZC4gKi8KIAlpZiAoKHN0YXR1cyA8IDApICYmIChzdGF0dXMgIT0gLUVOT0VOVCkpIHsKQEAgLTExNjEsOCArMTE3NiwxMCBAQAogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CisJaWYgKHN0YXR1cyA9PSAwKQorCQl0YXJnZXRfZXhpc3RzID0gMTsKIAotCWlmICghbmV3X2RlICYmIG5ld19pbm9kZSkgeworCWlmICghdGFyZ2V0X2V4aXN0cyAmJiBuZXdfaW5vZGUpIHsKIAkJLyoKIAkJICogVGFyZ2V0IHdhcyB1bmxpbmtlZCBieSBhbm90aGVyIG5vZGUgd2hpbGUgd2Ugd2VyZQogCQkgKiB3YWl0aW5nIHRvIGdldCB0byBvY2ZzMl9yZW5hbWUoKS4gVGhlcmUgaXNuJ3QKQEAgLTExNzUsNyArMTE5Miw3IEBACiAKIAkvKiBJbiBjYXNlIHdlIG5lZWQgdG8gb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGZpbGUsIHdlIGJsb3cgaXQKIAkgKiBhd2F5IGZpcnN0ICovCi0JaWYgKG5ld19kZSkgeworCWlmICh0YXJnZXRfZXhpc3RzKSB7CiAJCS8qIFZGUyBkaWRuJ3QgdGhpbmsgdGhlcmUgZXhpc3RlZCBhbiBpbm9kZSBoZXJlLCBidXQKIAkJICogc29tZW9uZSBlbHNlIGluIHRoZSBjbHVzdGVyIG11c3QgaGF2ZSByYWNlZCBvdXIKIAkJICogcmVuYW1lIHRvIGNyZWF0ZSBvbmUuIFRvZGF5IHdlIGVycm9yIGNsZWFubHksIGluCkBAIC0xMjE2LDggKzEyMzMsOCBAQAogCiAJCW5ld2ZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgbmV3ZmVfYmgtPmJfZGF0YTsKIAotCQltbG9nKDAsICJhaGEgcmVuYW1lIG92ZXIgZXhpc3RpbmcuLi4gbmV3X2RlPSVwIG5ld19ibGtubz0lbGx1ICIKLQkJICAgICAibmV3ZmViaD0lcCBiaGJsb2NrbnI9JWxsdVxuIiwgbmV3X2RlLAorCQltbG9nKDAsICJhaGEgcmVuYW1lIG92ZXIgZXhpc3RpbmcuLi4gbmV3X2Jsa25vPSVsbHUgIgorCQkgICAgICJuZXdmZWJoPSVwIGJoYmxvY2tucj0lbGx1XG4iLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3ZmVfYmxrbm8sIG5ld2ZlX2JoLCBuZXdmZV9iaCA/CiAJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdmZV9iaC0+Yl9ibG9ja25yIDogMFVMTCk7CiAKQEAgLTEyMjUsNyArMTI0Miw3IEBACiAJCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX29ycGhhbl9kaXIob3NiLCAmb3JwaGFuX2RpciwKIAkJCQkJCQkgIG5ld19pbm9kZSwKIAkJCQkJCQkgIG9ycGhhbl9uYW1lLAotCQkJCQkJCSAgJm9ycGhhbl9lbnRyeV9iaCk7CisJCQkJCQkJICAmb3JwaGFuX2luc2VydCk7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0xMjQzLDcgKzEyNjAsNyBAQAogCQlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgbmV3X2RpciwgbmV3X2Rpcl9iaCwKIAkJCQkJCSAgICAgIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCQkJICAgICAgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwKLQkJCQkJCSAgICAgICZpbnNlcnRfZW50cnlfYmgpOworCQkJCQkJICAgICAgJnRhcmdldF9pbnNlcnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTI1OCwxMCArMTI3NSwxMCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JaWYgKG5ld19kZSkgeworCWlmICh0YXJnZXRfZXhpc3RzKSB7CiAJCWlmIChTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkgewotCQkJaWYgKCFvY2ZzMl9lbXB0eV9kaXIobmV3X2lub2RlKSB8fAotCQkJICAgIG5ld19pbm9kZS0+aV9ubGluayAhPSAyKSB7CisJCQlpZiAobmV3X2lub2RlLT5pX25saW5rICE9IDIgfHwKKwkJCSAgICAhb2NmczJfZW1wdHlfZGlyKG5ld19pbm9kZSkpIHsKIAkJCQlzdGF0dXMgPSAtRU5PVEVNUFRZOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KQEAgLTEyNzQsMTAgKzEyOTEsMTAgQEAKIAkJfQogCiAJCWlmIChTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSB8fAotCQkgICAgKG5ld2ZlLT5pX2xpbmtzX2NvdW50ID09IGNwdV90b19sZTE2KDEpKSl7CisJCSAgICAob2NmczJfcmVhZF9saW5rc19jb3VudChuZXdmZSkgPT0gMSkpIHsKIAkJCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIG5ld19pbm9kZSwKIAkJCQkJCSAgbmV3ZmUsIG9ycGhhbl9uYW1lLAotCQkJCQkJICBvcnBoYW5fZW50cnlfYmgsIG9ycGhhbl9kaXIpOworCQkJCQkJICAmb3JwaGFuX2luc2VydCwgb3JwaGFuX2Rpcik7CiAJCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCQlnb3RvIGJhaWw7CkBAIC0xMjg1LDggKzEzMDIsOCBAQAogCQl9CiAKIAkJLyogY2hhbmdlIHRoZSBkaXJlbnQgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgaW5vZGUgKi8KLQkJc3RhdHVzID0gb2NmczJfdXBkYXRlX2VudHJ5KG5ld19kaXIsIGhhbmRsZSwgbmV3X2RlX2JoLAotCQkJCQkgICAgbmV3X2RlLCBvbGRfaW5vZGUpOworCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkobmV3X2RpciwgaGFuZGxlLCAmdGFyZ2V0X2xvb2t1cF9yZXMsCisJCQkJCSAgICBvbGRfaW5vZGUpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsOwpAQCAtMTI5NCw5ICsxMzExLDkgQEAKIAkJbmV3X2Rpci0+aV92ZXJzaW9uKys7CiAKIAkJaWYgKFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKQotCQkJbmV3ZmUtPmlfbGlua3NfY291bnQgPSAwOworCQkJb2NmczJfc2V0X2xpbmtzX2NvdW50KG5ld2ZlLCAwKTsKIAkJZWxzZQotCQkJbGUxNl9hZGRfY3B1KCZuZXdmZS0+aV9saW5rc19jb3VudCwgLTEpOworCQkJb2NmczJfYWRkX2xpbmtzX2NvdW50KG5ld2ZlLCAtMSk7CiAKIAkJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld2ZlX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTEzMDcsNyArMTMyNCw3IEBACiAJCS8qIGlmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQgaW4gbmV3X2RpciwgYWRkIGl0IG5vdyAqLwogCQlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBuZXdfZGVudHJ5LCBvbGRfaW5vZGUsCiAJCQkJCSBPQ0ZTMl9JKG9sZF9pbm9kZSktPmlwX2Jsa25vLAotCQkJCQkgbmV3X2Rpcl9iaCwgaW5zZXJ0X2VudHJ5X2JoKTsKKwkJCQkJIG5ld19kaXJfYmgsICZ0YXJnZXRfaW5zZXJ0KTsKIAl9CiAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CkBAIC0xMzM0LDE1ICsxMzUxLDEzIEBACiAJICogYmVjYXVzZSB0aGUgaW5zZXJ0IG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUgdHlwZSBvZiBkaXJlY3RvcnkKIAkgKiB3ZSdyZSBkZWFsaW5nIHdpdGguCiAJICovCi0Jb2xkX2RlX2JoID0gb2NmczJfZmluZF9lbnRyeShvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgICAgIG9sZF9kZW50cnktPmRfbmFtZS5sZW4sCi0JCQkJICAgICBvbGRfZGlyLCAmb2xkX2RlKTsKLQlpZiAoIW9sZF9kZV9iaCkgewotCQlzdGF0dXMgPSAtRUlPOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfZW50cnkob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICBvbGRfZGVudHJ5LT5kX25hbWUubGVuLCBvbGRfZGlyLAorCQkJCSAgJm9sZF9lbnRyeV9sb29rdXApOworCWlmIChzdGF0dXMpCiAJCWdvdG8gYmFpbDsKLQl9CiAKLQlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBvbGRfZGlyLCBvbGRfZGUsIG9sZF9kZV9iaCk7CisJc3RhdHVzID0gb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb2xkX2RpciwgJm9sZF9lbnRyeV9sb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTM1Myw5ICsxMzY4LDEwIEBACiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAl9CiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaWYgKG9sZF9pbm9kZV9kZV9iaCkgewotCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkob2xkX2lub2RlLCBoYW5kbGUsIG9sZF9pbm9kZV9kZV9iaCwKLQkJCQkJICAgIG9sZF9pbm9kZV9kb3RfZG90X2RlLCBuZXdfZGlyKTsKKworCWlmICh1cGRhdGVfZG90X2RvdCkgeworCQlzdGF0dXMgPSBvY2ZzMl91cGRhdGVfZW50cnkob2xkX2lub2RlLCBoYW5kbGUsCisJCQkJCSAgICAmb2xkX2lub2RlX2RvdF9kb3RfcmVzLCBuZXdfZGlyKTsKIAkJb2xkX2Rpci0+aV9ubGluay0tOwogCQlpZiAobmV3X2lub2RlKSB7CiAJCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKQEAgLTEzOTEsMTQgKzE0MDcsMTMgQEAKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlOwogCQkJc3RhdHVzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBvbGRfZGlyLAotCQkJCQkJCSBvbGRfZGlyX2JoLAotCQkJCQkJCSBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCQkJCQkgICAgICBvbGRfZGlyX2JoLAorCQkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwogCQkJZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvbGRfZGlyX2JoLT5iX2RhdGE7Ci0JCQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KG9sZF9kaXItPmlfbmxpbmspOworCQkJb2NmczJfc2V0X2xpbmtzX2NvdW50KGZlLCBvbGRfZGlyLT5pX25saW5rKTsKIAkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBvbGRfZGlyX2JoKTsKIAkJfQogCX0KLQogCW9jZnMyX2RlbnRyeV9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnksIG9sZF9kaXIsIG5ld19kaXIpOwogCXN0YXR1cyA9IDA7CiBiYWlsOgpAQCAtMTQyOSwxMyArMTQ0NCwxNyBAQAogCiAJaWYgKG5ld19pbm9kZSkKIAkJaXB1dChuZXdfaW5vZGUpOworCisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmdGFyZ2V0X2xvb2t1cF9yZXMpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9sZF9lbnRyeV9sb29rdXApOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9sZF9pbm9kZV9kb3RfZG90X3Jlcyk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmb3JwaGFuX2luc2VydCk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmdGFyZ2V0X2luc2VydCk7CisKIAlicmVsc2UobmV3ZmVfYmgpOwogCWJyZWxzZShvbGRfaW5vZGVfYmgpOwogCWJyZWxzZShvbGRfZGlyX2JoKTsKIAlicmVsc2UobmV3X2Rpcl9iaCk7Ci0JYnJlbHNlKG5ld19kZV9iaCk7Ci0JYnJlbHNlKG9sZF9kZV9iaCk7Ci0JYnJlbHNlKG9sZF9pbm9kZV9kZV9iaCk7CiAJYnJlbHNlKG9ycGhhbl9lbnRyeV9iaCk7CiAJYnJlbHNlKGluc2VydF9lbnRyeV9iaCk7CiAKQEAgLTE1NTgsNyArMTU3Nyw2IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTsKQEAgLTE1NzIsNiArMTU5MCw3IEBACiAJCS5lbmFibGUgPSAxLAogCX07CiAJaW50IGRpZF9xdW90YSA9IDAsIGRpZF9xdW90YV9pbm9kZSA9IDA7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCBzeW1uYW1lPSclcycgYWN0dWFsPSclLipzJylcbiIsIGRpciwKIAkJICAgZGVudHJ5LCBzeW1uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtMTU5Miw3ICsxNjExLDcgQEAKIAl9CiAKIAlkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOwotCWlmICghZGlyZmUtPmlfbGlua3NfY291bnQpIHsKKwlpZiAoIW9jZnMyX3JlYWRfbGlua3NfY291bnQoZGlyZmUpKSB7CiAJCS8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovCiAJCXN0YXR1cyA9IC1FTk9FTlQ7CiAJCWdvdG8gYmFpbDsKQEAgLTE2MDUsNyArMTYyNCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsCiAJCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmRlX2JoKTsKKwkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE3NDQsNyArMTc2Myw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLAogCQkJCSBsZTY0X3RvX2NwdShmZS0+aV9ibGtubyksIHBhcmVudF9mZV9iaCwKLQkJCQkgZGVfYmgpOworCQkJCSAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTE3NzIsOSArMTc5MSw5IEBACiAKIAlicmVsc2UobmV3X2ZlX2JoKTsKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKLQlicmVsc2UoZGVfYmgpOwogCWtmcmVlKHNpLm5hbWUpOwogCWtmcmVlKHNpLnZhbHVlKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCWlmIChpbm9kZV9hYykKIAkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGlub2RlX2FjKTsKIAlpZiAoZGF0YV9hYykKQEAgLTE4MjYsNyArMTg0NSw3IEBACiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkZV9iaCkKKwkJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJc3RydWN0IGlub2RlICpvcnBoYW5fZGlyX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2Rpcl9iaCA9IE5VTEw7CkBAIC0xODU3LDcgKzE4NzYsNyBAQAogCiAJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIG9ycGhhbl9kaXJfaW5vZGUsCiAJCQkJCSAgICAgIG9ycGhhbl9kaXJfYmgsIG5hbWUsCi0JCQkJCSAgICAgIE9DRlMyX09SUEhBTl9OQU1FTEVOLCBkZV9iaCk7CisJCQkJCSAgICAgIE9DRlMyX09SUEhBTl9OQU1FTEVOLCBsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW9jZnMyX2lub2RlX3VubG9jayhvcnBoYW5fZGlyX2lub2RlLCAxKTsKIApAQCAtMTg4NCw3ICsxOTAzLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLAogCQkJICAgIGNoYXIgKm5hbWUsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKm9ycGhhbl9kaXJfaW5vZGUpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpvcnBoYW5fZGlyX2JoID0gTlVMTDsKQEAgLTE5MTAsOCArMTkyOSw4IEBACiAJICogdW5kZXJuZWF0aCB1cy4uLiAqLwogCW9ycGhhbl9mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9ycGhhbl9kaXJfYmgtPmJfZGF0YTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJbGUxNl9hZGRfY3B1KCZvcnBoYW5fZmUtPmlfbGlua3NfY291bnQsIDEpOwotCW9ycGhhbl9kaXJfaW5vZGUtPmlfbmxpbmsgPSBsZTE2X3RvX2NwdShvcnBoYW5fZmUtPmlfbGlua3NfY291bnQpOworCQlvY2ZzMl9hZGRfbGlua3NfY291bnQob3JwaGFuX2ZlLCAxKTsKKwlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChvcnBoYW5fZmUpOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9ycGhhbl9kaXJfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xOTIyLDcgKzE5NDEsNyBAQAogCXN0YXR1cyA9IF9fb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgb3JwaGFuX2Rpcl9pbm9kZSwgbmFtZSwKIAkJCQkgICBPQ0ZTMl9PUlBIQU5fTkFNRUxFTiwgaW5vZGUsCiAJCQkJICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJCSAgIG9ycGhhbl9kaXJfYmgsIGRlX2JoKTsKKwkJCQkgICBvcnBoYW5fZGlyX2JoLCBsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTE5NTUsOCArMTk3NCw3IEBACiAJY2hhciBuYW1lW09DRlMyX09SUEhBTl9OQU1FTEVOICsgMV07CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqb3JwaGFuX2ZlOwogCWludCBzdGF0dXMgPSAwOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqdGFyZ2V0X2RlX2JoID0gTlVMTDsKLQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICp0YXJnZXRfZGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIApAQCAtMTk3MSwxNyArMTk4OSwxNSBAQAogCSAgICAgT0NGUzJfT1JQSEFOX05BTUVMRU4pOwogCiAJLyogZmluZCBpdCdzIHNwb3QgaW4gdGhlIG9ycGhhbiBkaXJlY3RvcnkgKi8KLQl0YXJnZXRfZGVfYmggPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIE9DRlMyX09SUEhBTl9OQU1FTEVOLAotCQkJCQlvcnBoYW5fZGlyX2lub2RlLCAmdGFyZ2V0X2RlKTsKLQlpZiAoIXRhcmdldF9kZV9iaCkgewotCQlzdGF0dXMgPSAtRU5PRU5UOworCXN0YXR1cyA9IG9jZnMyX2ZpbmRfZW50cnkobmFtZSwgT0NGUzJfT1JQSEFOX05BTUVMRU4sIG9ycGhhbl9kaXJfaW5vZGUsCisJCQkJICAmbG9va3VwKTsKKwlpZiAoc3RhdHVzKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKIAl9CiAKIAkvKiByZW1vdmUgaXQgZnJvbSB0aGUgb3JwaGFuIGRpcmVjdG9yeSAqLwotCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIG9ycGhhbl9kaXJfaW5vZGUsIHRhcmdldF9kZSwKLQkJCQkgICAgdGFyZ2V0X2RlX2JoKTsKKwlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBvcnBoYW5fZGlyX2lub2RlLCAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC0xOTk3LDggKzIwMTMsOCBAQAogCS8qIGRvIHRoZSBpX25saW5rIGRhbmNlISA6KSAqLwogCW9ycGhhbl9mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG9ycGhhbl9kaXJfYmgtPmJfZGF0YTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJbGUxNl9hZGRfY3B1KCZvcnBoYW5fZmUtPmlfbGlua3NfY291bnQsIC0xKTsKLQlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUob3JwaGFuX2ZlLT5pX2xpbmtzX2NvdW50KTsKKwkJb2NmczJfYWRkX2xpbmtzX2NvdW50KG9ycGhhbl9mZSwgLTEpOworCW9ycGhhbl9kaXJfaW5vZGUtPmlfbmxpbmsgPSBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KG9ycGhhbl9mZSk7CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgb3JwaGFuX2Rpcl9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTIwMDcsNyArMjAyMyw3IEBACiAJfQogCiBsZWF2ZToKLQlicmVsc2UodGFyZ2V0X2RlX2JoKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDk0NmQzYzMuLjEzODYyODEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMjA5LDYgKzIwOSw3IEBACiBzdHJ1Y3Qgb2NmczJfam91cm5hbDsKIHN0cnVjdCBvY2ZzMl9zbG90X2luZm87CiBzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwOworc3RydWN0IG9jZnMyX3JlcGxheV9tYXA7CiBzdHJ1Y3Qgb2NmczJfcXVvdGFfcmVjb3Zlcnk7CiBzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2s7CiBzdHJ1Y3Qgb2NmczJfc3VwZXIKQEAgLTI2NCw2ICsyNjUsNyBAQAogCWF0b21pY190IHZvbF9zdGF0ZTsKIAlzdHJ1Y3QgbXV0ZXggcmVjb3ZlcnlfbG9jazsKIAlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpyZWNvdmVyeV9tYXA7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpyZWNvdmVyeV90aHJlYWRfdGFzazsKIAlpbnQgZGlzYWJsZV9yZWNvdmVyeTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBjaGVja3BvaW50X2V2ZW50OwpAQCAtMjg3LDExICsyODksNiBAQAogCiAJdTY0IGxhX2xhc3RfZ2Q7CiAKLSNpZmRlZiBDT05GSUdfT0NGUzJfRlNfU1RBVFMKLQlzdHJ1Y3QgZGVudHJ5ICpsb2NhbF9hbGxvY19kZWJ1ZzsKLQljaGFyICpsb2NhbF9hbGxvY19kZWJ1Z19idWY7Ci0jZW5kaWYKLQogCS8qIE5leHQgdGhyZWUgZmllbGRzIGFyZSBmb3IgbG9jYWwgbm9kZSBzbG90IHJlY292ZXJ5IGR1cmluZwogCSAqIG1vdW50LiAqLwogCWludCBkaXJ0eTsKQEAgLTMwNSw5ICszMDIsMTEgQEAKIAlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjY29ubjsKIAlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgb3NiX3N1cGVyX2xvY2tyZXM7CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzIG9zYl9yZW5hbWVfbG9ja3JlczsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgb3NiX25mc19zeW5jX2xvY2tyZXM7CiAJc3RydWN0IG9jZnMyX2RsbV9kZWJ1ZyAqb3NiX2RsbV9kZWJ1ZzsKIAogCXN0cnVjdCBkZW50cnkgKm9zYl9kZWJ1Z19yb290OworCXN0cnVjdCBkZW50cnkgKm9zYl9jdHh0OwogCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVjb3ZlcnlfZXZlbnQ7CiAKQEAgLTM0NCw2ICszNDMsMTIgQEAKIAogCS8qIHVzZWQgdG8gcHJvdGVjdCBtZXRhZWNjIGNhbGN1bGF0aW9uIGNoZWNrIG9mIHhhdHRyLiAqLwogCXNwaW5sb2NrX3Qgb3NiX3hhdHRyX2xvY2s7CisKKwl1bnNpZ25lZCBpbnQJCQlvc2JfZHhfbWFzazsKKwl1MzIJCQkJb3NiX2R4X3NlZWRbNF07CisKKwkvKiB0aGUgZ3JvdXAgd2UgdXNlZCB0byBhbGxvY2F0ZSBpbm9kZXMuICovCisJdTY0CQkJCW9zYl9pbm9kZV9hbGxvY19ncm91cDsKIH07CiAKICNkZWZpbmUgT0NGUzJfU0Ioc2IpCSAgICAoKHN0cnVjdCBvY2ZzMl9zdXBlciAqKShzYiktPnNfZnNfaW5mbykKQEAgLTQwMiw2ICs0MDcsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCWlmIChvc2ItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5ERVhFRF9ESVJTKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfbGlua19tYXgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKQorCQlyZXR1cm4gT0NGUzJfRFhfTElOS19NQVg7CisJcmV0dXJuIE9DRlMyX0xJTktfTUFYOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpKQoreworCXUzMiBubGluayA9IGxlMTZfdG9fY3B1KGRpLT5pX2xpbmtzX2NvdW50KTsKKwl1MzIgaGkgPSBsZTE2X3RvX2NwdShkaS0+aV9saW5rc19jb3VudF9oaSk7CisKKwlpZiAoZGktPmlfZHluX2ZlYXR1cmVzICYgY3B1X3RvX2xlMTYoT0NGUzJfSU5ERVhFRF9ESVJfRkwpKQorCQlubGluayB8PSAoaGkgPDwgT0NGUzJfTElOS1NfSElfU0hJRlQpOworCisJcmV0dXJuIG5saW5rOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLCB1MzIgbmxpbmspCit7CisJdTE2IGxvLCBoaTsKKworCWxvID0gbmxpbms7CisJaGkgPSBubGluayA+PiBPQ0ZTMl9MSU5LU19ISV9TSElGVDsKKworCWRpLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYobG8pOworCWRpLT5pX2xpbmtzX2NvdW50X2hpID0gY3B1X3RvX2xlMTYoaGkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfYWRkX2xpbmtzX2NvdW50KHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLCBpbnQgbikKK3sKKwl1MzIgbGlua3MgPSBvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpKTsKKworCWxpbmtzICs9IG47CisKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZGksIGxpbmtzKTsKK30KKwogLyogc2V0IC8gY2xlYXIgZnVuY3Rpb25zIGJlY2F1c2UgY2x1c3RlciBldmVudHMgY2FuIG1ha2UgdGhlc2UgaGFwcGVuCiAgKiBpbiBwYXJhbGxlbCBzbyB3ZSB3YW50IHRoZSB0cmFuc2l0aW9ucyB0byBiZSBhdG9taWMuIHRoaXMgYWxzbwogICogbWVhbnMgdGhhdCBhbnkgZnV0dXJlIGZsYWdzIG9zYl9mbGFncyBtdXN0IGJlIHByb3RlY3RlZCBieSBzcGlubG9jawpAQCAtNDgyLDYgKzUzMiwxMiBAQAogI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9ESVJfVFJBSUxFUihwdHIpCQkJCQlcCiAJKCFzdHJjbXAoKHB0ciktPmRiX3NpZ25hdHVyZSwgT0NGUzJfRElSX1RSQUlMRVJfU0lHTkFUVVJFKSkKIAorI2RlZmluZSBPQ0ZTMl9JU19WQUxJRF9EWF9ST09UKHB0cikJCQkJCVwKKwkoIXN0cmNtcCgocHRyKS0+ZHJfc2lnbmF0dXJlLCBPQ0ZTMl9EWF9ST09UX1NJR05BVFVSRSkpCisKKyNkZWZpbmUgT0NGUzJfSVNfVkFMSURfRFhfTEVBRihwdHIpCQkJCQlcCisJKCFzdHJjbXAoKHB0ciktPmRsX3NpZ25hdHVyZSwgT0NGUzJfRFhfTEVBRl9TSUdOQVRVUkUpKQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW5vX2Zyb21fYmxrbm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgdTY0IGJsa25vKQogewpAQCAtNTMyLDYgKzU4OCwxNiBAQAogCXJldHVybiAodTY0KWNsdXN0ZXJzIDw8IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBvY2ZzMl9ibG9ja190b19jbHVzdGVyX3N0YXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCSAgICAgICB1NjQgYmxvY2tzKQoreworCWludCBiaXRzID0gT0NGUzJfU0Ioc2IpLT5zX2NsdXN0ZXJzaXplX2JpdHMgLSBzYi0+c19ibG9ja3NpemVfYml0czsKKwl1bnNpZ25lZCBpbnQgY2x1c3RlcnM7CisKKwljbHVzdGVycyA9IG9jZnMyX2Jsb2Nrc190b19jbHVzdGVycyhzYiwgYmxvY2tzKTsKKwlyZXR1cm4gKHU2NCljbHVzdGVycyA8PCBiaXRzOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBvY2ZzMl9hbGlnbl9ieXRlc190b19jbHVzdGVycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkJdTY0IGJ5dGVzKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggMjMzMmVmNy4uN2FiNmU5ZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC02Niw2ICs2Niw4IEBACiAjZGVmaW5lIE9DRlMyX0dST1VQX0RFU0NfU0lHTkFUVVJFICAgICAgIkdST1VQMDEiCiAjZGVmaW5lIE9DRlMyX1hBVFRSX0JMT0NLX1NJR05BVFVSRQkiWEFUVFIwMSIKICNkZWZpbmUgT0NGUzJfRElSX1RSQUlMRVJfU0lHTkFUVVJFCSJESVJUUkwxIgorI2RlZmluZSBPQ0ZTMl9EWF9ST09UX1NJR05BVFVSRQkJIkRYRElSMDEiCisjZGVmaW5lIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFCQkiRFhMRUFGMSIKIAogLyogQ29tcGF0aWJpbGl0eSBmbGFncyAqLwogI2RlZmluZSBPQ0ZTMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykJCQlcCkBAIC05NSw3ICs5Nyw4IEBACiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5ERURfU0xPVF9NQVAgXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1VTRVJTUEFDRV9TVEFDSyBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIgXAotCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfRUNDKQorCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfRUNDIFwKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkRFWEVEX0RJUlMpCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOV1JJVFRFTiBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VTUlFVT1RBIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9ST19DT01QQVRfR1JQUVVPVEEpCkBAIC0xNTEsNiArMTU0LDkgQEAKIC8qIFN1cHBvcnQgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUgkJMHgwMjAwCiAKKy8qIFN1cHBvcnQgZm9yIGluZGV4ZWQgZGlyZWN0b3JlcyAqLworI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOREVYRURfRElSUwkweDA0MDAKKwogLyogTWV0YWRhdGEgY2hlY2tzdW0gYW5kIGVycm9yIGNvcnJlY3Rpb24gKi8KICNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0VDQwkJMHgwODAwCiAKQEAgLTQxMSw4ICs0MTcsMTIgQEAKICNkZWZpbmUgT0NGUzJfRElSX1JFQ19MRU4obmFtZV9sZW4pCSgoKG5hbWVfbGVuKSArIE9DRlMyX0RJUl9NRU1CRVJfTEVOICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NGUzJfRElSX1JPVU5EKSAmIFwKIAkJCQkJIH5PQ0ZTMl9ESVJfUk9VTkQpCisjZGVmaW5lIE9DRlMyX0RJUl9NSU5fUkVDX0xFTglPQ0ZTMl9ESVJfUkVDX0xFTigxKQogCiAjZGVmaW5lIE9DRlMyX0xJTktfTUFYCQkzMjAwMAorI2RlZmluZQlPQ0ZTMl9EWF9MSU5LX01BWAkoKDFVIDw8IDMxKSAtIDFVKQorI2RlZmluZQlPQ0ZTMl9MSU5LU19ISV9TSElGVAkxNgorI2RlZmluZQlPQ0ZTMl9EWF9FTlRSSUVTX01BWAkoMHhmZmZmZmZmZlUpCiAKICNkZWZpbmUgU19TSElGVAkJCTEyCiBzdGF0aWMgdW5zaWduZWQgY2hhciBvY2ZzMl90eXBlX2J5X21vZGVbU19JRk1UID4+IFNfU0hJRlRdID0gewpAQCAtNjI4LDggKzYzOCw5IEBACiAvKkI4Ki8JX19sZTE2IHNfeGF0dHJfaW5saW5lX3NpemU7CS8qIGV4dGVuZGVkIGF0dHJpYnV0ZSBpbmxpbmUgc2l6ZQogCQkJCQkgICBmb3IgdGhpcyBmcyovCiAJX19sZTE2IHNfcmVzZXJ2ZWQwOwotCV9fbGUzMiBzX3Jlc2VydmVkMTsKLS8qQzAqLyAgX19sZTY0IHNfcmVzZXJ2ZWQyWzE2XTsJCS8qIEZpbGwgb3V0IHN1cGVyYmxvY2sgKi8KKwlfX2xlMzIgc19keF9zZWVkWzNdOwkJLyogc2VlZFswLTJdIGZvciBkeCBkaXIgaGFzaC4KKwkJCQkJICogc191dWlkX2hhc2ggc2VydmVzIGFzIHNlZWRbM10uICovCisvKkMwKi8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxNV07CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCiAvKjE0MCovCiAKIAkvKgpAQCAtNjc5LDcgKzY5MCw3IEBACiAJCQkJCSAgIGJlbG9uZ3MgdG8gKi8KIAlfX2xlMTYgaV9zdWJhbGxvY19iaXQ7CQkvKiBCaXQgb2Zmc2V0IGluIHN1YmFsbG9jYXRvcgogCQkJCQkgICBibG9jayBncm91cCAqLwotLyoxMCovCV9fbGUxNiBpX3Jlc2VydmVkMDsKKy8qMTAqLwlfX2xlMTYgaV9saW5rc19jb3VudF9oaTsJLyogSGlnaCAxNiBiaXRzIG9mIGxpbmtzIGNvdW50ICovCiAJX19sZTE2IGlfeGF0dHJfaW5saW5lX3NpemU7CiAJX19sZTMyIGlfY2x1c3RlcnM7CQkvKiBDbHVzdGVyIGNvdW50ICovCiAJX19sZTMyIGlfdWlkOwkJCS8qIE93bmVyIFVJRCAqLwpAQCAtNzA1LDcgKzcxNiw4IEBACiAJX19sZTE2IGlfZHluX2ZlYXR1cmVzOwogCV9fbGU2NCBpX3hhdHRyX2xvYzsKIC8qODAqLwlzdHJ1Y3Qgb2NmczJfYmxvY2tfY2hlY2sgaV9jaGVjazsJLyogRXJyb3IgY2hlY2tpbmcgKi8KLS8qODgqLwlfX2xlNjQgaV9yZXNlcnZlZDJbNl07CisvKjg4Ki8JX19sZTY0IGlfZHhfcm9vdDsJCS8qIFBvaW50ZXIgdG8gZGlyIGluZGV4IHJvb3QgYmxvY2sgKi8KKwlfX2xlNjQgaV9yZXNlcnZlZDJbNV07CiAvKkI4Ki8JdW5pb24gewogCQlfX2xlNjQgaV9wYWQxOwkJLyogR2VuZXJpYyB3YXkgdG8gcmVmZXIgdG8gdGhpcwogCQkJCQkgICA2NGJpdCB1bmlvbiAqLwpAQCAtNzgxLDYgKzc5Myw5MCBAQAogLyo0MCovCiB9OwogCisgLyoKKyAqIEEgZGlyZWN0b3J5IGVudHJ5IGluIHRoZSBpbmRleGVkIHRyZWUuIFdlIGRvbid0IHN0b3JlIHRoZSBmdWxsIG5hbWUgaGVyZSwKKyAqIGJ1dCBpbnN0ZWFkIHByb3ZpZGUgYSBwb2ludGVyIHRvIHRoZSBmdWxsIGRpcmVudCBpbiB0aGUgdW5pbmRleGVkIHRyZWUuCisgKgorICogV2UgYWxzbyBzdG9yZSBuYW1lX2xlbiBoZXJlIHNvIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGxlYWYgYmxvY2tzIHdlCisgKiBuZWVkIHRvIHNlYXJjaCBpbiBjYXNlIG9mIGNvbGxpc2lvbnMuCisgKi8KK3N0cnVjdCBvY2ZzMl9keF9lbnRyeSB7CisJX19sZTMyCQlkeF9tYWpvcl9oYXNoOwkvKiBVc2VkIHRvIGZpbmQgbG9naWNhbAorCQkJCQkgKiBjbHVzdGVyIGluIGluZGV4ICovCisJX19sZTMyCQlkeF9taW5vcl9oYXNoOwkvKiBMb3dlciBiaXRzIHVzZWQgdG8gZmluZAorCQkJCQkgKiBibG9jayBpbiBjbHVzdGVyICovCisJX19sZTY0CQlkeF9kaXJlbnRfYmxrOwkvKiBQaHlzaWNhbCBibG9jayBpbiB1bmluZGV4ZWQKKwkJCQkJICogdHJlZSBob2xkaW5nIHRoaXMgZGlyZW50LiAqLworfTsKKworc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgeworCV9fbGUzMgkJZGVfcmVzZXJ2ZWQ7CisJX19sZTE2CQlkZV9jb3VudDsJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcworCQkJCQkgKiBwb3NzaWJsZSBpbiBkZV9lbnRyaWVzICovCisJX19sZTE2CQlkZV9udW1fdXNlZDsJLyogQ3VycmVudCBudW1iZXIgb2YKKwkJCQkJICogZGVfZW50cmllcyBlbnRyaWVzICovCisJc3RydWN0CW9jZnMyX2R4X2VudHJ5CQlkZV9lbnRyaWVzWzBdOwkvKiBJbmRleGVkIGRpciBlbnRyaWVzCisJCQkJCQkJICogaW4gYSBwYWNrZWQgYXJyYXkgb2YKKwkJCQkJCQkgKiBsZW5ndGggZGVfbnVtX3VzZWQgKi8KK307CisKKyNkZWZpbmUgT0NGUzJfRFhfRkxBR19JTkxJTkUJMHgwMQorCisvKgorICogQSBkaXJlY3RvcnkgaW5kZXhpbmcgYmxvY2suIEVhY2ggaW5kZXhlZCBkaXJlY3RvcnkgaGFzIG9uZSBvZiB0aGVzZSwKKyAqIHBvaW50ZWQgdG8gYnkgb2NmczJfZGlub2RlLgorICoKKyAqIFRoaXMgYmxvY2sgc3RvcmVzIGFuIGluZGV4ZWQgYnRyZWUgcm9vdCwgYW5kIGEgc2V0IG9mIGZyZWUgc3BhY2UKKyAqIHN0YXJ0LW9mLWxpc3QgcG9pbnRlcnMuCisgKi8KK3N0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrIHsKKwlfX3U4CQlkcl9zaWduYXR1cmVbOF07CS8qIFNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uICovCisJc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIGRyX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGUxNgkJZHJfc3ViYWxsb2Nfc2xvdDsJLyogU2xvdCBzdWJhbGxvY2F0b3IgdGhpcworCQkJCQkJICogYmxvY2sgYmVsb25ncyB0by4gKi8KKwlfX2xlMTYJCWRyX3N1YmFsbG9jX2JpdDsJLyogQml0IG9mZnNldCBpbiBzdWJhbGxvY2F0b3IKKwkJCQkJCSAqIGJsb2NrIGdyb3VwICovCisJX19sZTMyCQlkcl9mc19nZW5lcmF0aW9uOwkvKiBNdXN0IG1hdGNoIHN1cGVyIGJsb2NrICovCisJX19sZTY0CQlkcl9ibGtubzsJCS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlNjQJCWRyX2xhc3RfZWJfYmxrOwkJLyogUG9pbnRlciB0byBsYXN0CisJCQkJCQkgKiBleHRlbnQgYmxvY2sgKi8KKwlfX2xlMzIJCWRyX2NsdXN0ZXJzOwkJLyogQ2x1c3RlcnMgYWxsb2NhdGVkCisJCQkJCQkgKiB0byB0aGUgaW5kZXhlZCB0cmVlLiAqLworCV9fdTgJCWRyX2ZsYWdzOwkJLyogT0NGUzJfRFhfRkxBR18qIGZsYWdzICovCisJX191OAkJZHJfcmVzZXJ2ZWQwOworCV9fbGUxNgkJZHJfcmVzZXJ2ZWQxOworCV9fbGU2NAkJZHJfZGlyX2Jsa25vOwkJLyogUG9pbnRlciB0byBwYXJlbnQgaW5vZGUgKi8KKwlfX2xlMzIJCWRyX251bV9lbnRyaWVzOwkJLyogVG90YWwgbnVtYmVyIG9mCisJCQkJCQkgKiBuYW1lcyBzdG9yZWQgaW4KKwkJCQkJCSAqIHRoaXMgZGlyZWN0b3J5LiovCisJX19sZTMyCQlkcl9yZXNlcnZlZDI7CisJX19sZTY0CQlkcl9mcmVlX2JsazsJCS8qIFBvaW50ZXIgdG8gaGVhZCBvZiBmcmVlCisJCQkJCQkgKiB1bmluZGV4ZWQgYmxvY2sgbGlzdC4gKi8KKwlfX2xlNjQJCWRyX3Jlc2VydmVkM1sxNV07CisJdW5pb24geworCQlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgZHJfbGlzdDsgLyogS2VlcCB0aGlzIGFsaWduZWQgdG8gMTI4CisJCQkJCQkgICAqIGJpdHMgZm9yIG1heGltdW0gc3BhY2UKKwkJCQkJCSAgICogZWZmaWNpZW5jeS4gKi8KKwkJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgZHJfZW50cmllczsgLyogSW4tcm9vdC1ibG9jayBsaXN0IG9mCisJCQkJCQkJKiBlbnRyaWVzLiBXZSBncm93IG91dAorCQkJCQkJCSogdG8gZXh0ZW50cyBpZiB0aGlzCisJCQkJCQkJKiBnZXRzIHRvbyBiaWcuICovCisJfTsKK307CisKKy8qCisgKiBUaGUgaGVhZGVyIG9mIGEgbGVhZiBibG9jayBpbiB0aGUgaW5kZXhlZCB0cmVlLgorICovCitzdHJ1Y3Qgb2NmczJfZHhfbGVhZiB7CisJX191OAkJZGxfc2lnbmF0dXJlWzhdOy8qIFNpZ25hdHVyZSBmb3IgdmVyaWZpY2F0aW9uICovCisJc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIGRsX2NoZWNrOwkvKiBFcnJvciBjaGVja2luZyAqLworCV9fbGU2NAkJZGxfYmxrbm87CS8qIE9mZnNldCBvbiBkaXNrLCBpbiBibG9ja3MgKi8KKwlfX2xlMzIJCWRsX2ZzX2dlbmVyYXRpb247LyogTXVzdCBtYXRjaCBzdXBlciBibG9jayAqLworCV9fbGUzMgkJZGxfcmVzZXJ2ZWQwOworCV9fbGU2NAkJZGxfcmVzZXJ2ZWQxOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0CWRsX2xpc3Q7Cit9OworCiAvKgogICogT24gZGlzayBhbGxvY2F0b3IgZ3JvdXAgc3RydWN0dXJlIGZvciBPQ0ZTMgogICovCkBAIC0xMTEyLDYgKzEyMDgsMTYgQEAKIAlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2V4dGVudF9yZWNzX3Blcl9keF9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc2ItPnNfYmxvY2tzaXplIC0KKwkJb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2ssIGRyX2xpc3QubF9yZWNzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2hhaW5fcmVjc19wZXJfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlpbnQgc2l6ZTsKQEAgLTExMzIsNiArMTIzOCwyNiBAQAogCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgb2NmczJfZHhfZW50cmllc19wZXJfbGVhZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9sZWFmLCBkbF9saXN0LmRlX2VudHJpZXMpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2NmczJfZHhfZW50cmllc19wZXJfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrLCBkcl9lbnRyaWVzLmRlX2VudHJpZXMpOworCisJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KTsKK30KKwogc3RhdGljIGlubGluZSB1MTYgb2NmczJfbG9jYWxfYWxsb2Nfc2l6ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXUxNiBzaXplOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmggYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAppbmRleCBlYjZmNTBjLi5hNTNjZTg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraWQuaApAQCAtNDcsNiArNDcsNyBAQAogCU9DRlMyX0xPQ0tfVFlQRV9PUEVOLAogCU9DRlMyX0xPQ0tfVFlQRV9GTE9DSywKIAlPQ0ZTMl9MT0NLX1RZUEVfUUlORk8sCisJT0NGUzJfTE9DS19UWVBFX05GU19TWU5DLAogCU9DRlMyX05VTV9MT0NLX1RZUEVTCiB9OwogCkBAIC04MSw2ICs4Miw5IEBACiAJCWNhc2UgT0NGUzJfTE9DS19UWVBFX1FJTkZPOgogCQkJYyA9ICdRJzsKIAkJCWJyZWFrOworCQljYXNlIE9DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQzoKKwkJCWMgPSAnWSc7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWMgPSAnXDAnOwogCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmMgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCmluZGV4IGE2OTYyODYuLmI0Y2E1OTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmMKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuYwpAQCAtNDgsNyArNDgsOCBAQAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKICNkZWZpbmUgTk9UX0FMTE9DX05FV19HUk9VUAkJMAotI2RlZmluZSBBTExPQ19ORVdfR1JPVVAJCQkxCisjZGVmaW5lIEFMTE9DX05FV19HUk9VUAkJCTB4MQorI2RlZmluZSBBTExPQ19HUk9VUFNfRlJPTV9HTE9CQUwJMHgyCiAKICNkZWZpbmUgT0NGUzJfTUFYX0lOT0RFU19UT19TVEVBTAkxMDI0CiAKQEAgLTY0LDcgKzY1LDkgQEAKIHN0YXRpYyBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Moc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgc3RydWN0IGlub2RlICphbGxvY19pbm9kZSwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJCSAgIHU2NCBtYXhfYmxvY2spOworCQkJCSAgIHU2NCBtYXhfYmxvY2ssCisJCQkJICAgdTY0ICpsYXN0X2FsbG9jX2dyb3VwLAorCQkJCSAgIGludCBmbGFncyk7CiAKIHN0YXRpYyBpbnQgb2NmczJfY2x1c3Rlcl9ncm91cF9zZWFyY2goc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLApAQCAtMTE2LDYgKzExOSw3IEBACiAJCQkJCQl1MTYgKmJnX2JpdF9vZmYpOwogc3RhdGljIGludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJCSAgICAgdTMyIGJpdHNfd2FudGVkLCB1NjQgbWF4X2Jsb2NrLAorCQkJCQkgICAgIGludCBmbGFncywKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKTsKIAogdm9pZCBvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKQEAgLTQwMyw3ICs0MDcsOSBAQAogc3RhdGljIGludCBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICBzdHJ1Y3QgaW5vZGUgKmFsbG9jX2lub2RlLAogCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkJICAgdTY0IG1heF9ibG9jaykKKwkJCQkgICB1NjQgbWF4X2Jsb2NrLAorCQkJCSAgIHU2NCAqbGFzdF9hbGxvY19ncm91cCwKKwkJCQkgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHN0YXR1cywgY3JlZGl0czsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGJoLT5iX2RhdGE7CkBAIC00MjMsNyArNDI5LDcgQEAKIAljbCA9ICZmZS0+aWQyLmlfY2hhaW47CiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwKIAkJCQkJCSAgIGxlMTZfdG9fY3B1KGNsLT5jbF9jcGcpLAotCQkJCQkJICAgbWF4X2Jsb2NrLCAmYWMpOworCQkJCQkJICAgbWF4X2Jsb2NrLCBmbGFncywgJmFjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NDAsNiArNDQ2LDExIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlpZiAobGFzdF9hbGxvY19ncm91cCAmJiAqbGFzdF9hbGxvY19ncm91cCAhPSAwKSB7CisJCW1sb2coMCwgInVzZSBvbGQgYWxsb2NhdGlvbiBncm91cCAlbGx1IGZvciBibG9jayBncm91cCBhbGxvY1xuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSpsYXN0X2FsbG9jX2dyb3VwKTsKKwkJYWMtPmFjX2xhc3RfZ3JvdXAgPSAqbGFzdF9hbGxvY19ncm91cDsKKwl9CiAJc3RhdHVzID0gb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLAogCQkJCSAgICAgIGhhbmRsZSwKIAkJCQkgICAgICBhYywKQEAgLTUxNCw2ICs1MjUsMTEgQEAKIAlhbGxvY19pbm9kZS0+aV9ibG9ja3MgPSBvY2ZzMl9pbm9kZV9zZWN0b3JfY291bnQoYWxsb2NfaW5vZGUpOwogCiAJc3RhdHVzID0gMDsKKworCS8qIHNhdmUgdGhlIG5ldyBsYXN0IGFsbG9jIGdyb3VwIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gY2FjaGUgaXQuICovCisJaWYgKGxhc3RfYWxsb2NfZ3JvdXApCisJCSpsYXN0X2FsbG9jX2dyb3VwID0gYWMtPmFjX2xhc3RfZ3JvdXA7CisKIGJhaWw6CiAJaWYgKGhhbmRsZSkKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKQEAgLTUzMSw3ICs1NDcsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCiAJCQkJICAgICAgIGludCB0eXBlLAogCQkJCSAgICAgICB1MzIgc2xvdCwKLQkJCQkgICAgICAgaW50IGFsbG9jX25ld19ncm91cCkKKwkJCQkgICAgICAgdTY0ICpsYXN0X2FsbG9jX2dyb3VwLAorCQkJCSAgICAgICBpbnQgZmxhZ3MpCiB7CiAJaW50IHN0YXR1czsKIAl1MzIgYml0c193YW50ZWQgPSBhYy0+YWNfYml0c193YW50ZWQ7CkBAIC01ODcsNyArNjA0LDcgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCi0JCWlmIChhbGxvY19uZXdfZ3JvdXAgIT0gQUxMT0NfTkVXX0dST1VQKSB7CisJCWlmICghKGZsYWdzICYgQUxMT0NfTkVXX0dST1VQKSkgewogCQkJbWxvZygwLCAiQWxsb2MgRmlsZSAldSBGdWxsOiB3YW50ZWQ9JXUsIGZyZWVfYml0cz0ldSwgIgogCQkJICAgICAiYW5kIHdlIGRvbid0IGFsbG9jIGEgbmV3IGdyb3VwIGZvciBpdC5cbiIsCiAJCQkgICAgIHNsb3QsIGJpdHNfd2FudGVkLCBmcmVlX2JpdHMpOwpAQCAtNTk2LDcgKzYxMyw4IEBACiAJCX0KIAogCQlzdGF0dXMgPSBvY2ZzMl9ibG9ja19ncm91cF9hbGxvYyhvc2IsIGFsbG9jX2lub2RlLCBiaCwKLQkJCQkJCSBhYy0+YWNfbWF4X2Jsb2NrKTsKKwkJCQkJCSBhYy0+YWNfbWF4X2Jsb2NrLAorCQkJCQkJIGxhc3RfYWxsb2NfZ3JvdXAsIGZsYWdzKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02NDAsNyArNjU4LDcgQEAKIAogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICgqYWMpLAogCQkJCQkgICAgIEVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgc2xvdCwgQUxMT0NfTkVXX0dST1VQKTsKKwkJCQkJICAgICBzbG90LCBOVUxMLCBBTExPQ19ORVdfR1JPVVApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTY4Niw3ICs3MDQsOCBAQAogCiAJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAogCQkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCQkgICAgIHNsb3QsIE5PVF9BTExPQ19ORVdfR1JPVVApOworCQkJCQkJICAgICBzbG90LCBOVUxMLAorCQkJCQkJICAgICBOT1RfQUxMT0NfTkVXX0dST1VQKTsKIAkJaWYgKHN0YXR1cyA+PSAwKSB7CiAJCQlvY2ZzMl9zZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IsIHNsb3QpOwogCQkJYnJlYWs7CkBAIC03MDMsNiArNzIyLDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXMxNiBzbG90ID0gb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKKwl1NjQgYWxsb2NfZ3JvdXA7CiAKIAkqYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOwogCWlmICghKCphYykpIHsKQEAgLTczOCwxMiArNzU4LDIyIEBACiAJCWdvdG8gaW5vZGVfc3RlYWw7CiAKIAlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4sIDApOworCWFsbG9jX2dyb3VwID0gb3NiLT5vc2JfaW5vZGVfYWxsb2NfZ3JvdXA7CiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9zdWJhbGxvY19iaXRzKG9zYiwgKmFjLAogCQkJCQkgICAgIElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSwKLQkJCQkJICAgICBvc2ItPnNsb3RfbnVtLCBBTExPQ19ORVdfR1JPVVApOworCQkJCQkgICAgIG9zYi0+c2xvdF9udW0sCisJCQkJCSAgICAgJmFsbG9jX2dyb3VwLAorCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCB8CisJCQkJCSAgICAgQUxMT0NfR1JPVVBTX0ZST01fR0xPQkFMKTsKIAlpZiAoc3RhdHVzID49IDApIHsKIAkJc3RhdHVzID0gMDsKIAorCQlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCQlvc2ItPm9zYl9pbm9kZV9hbGxvY19ncm91cCA9IGFsbG9jX2dyb3VwOworCQlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJCW1sb2coMCwgImFmdGVyIHJlc2VydmF0aW9uLCBuZXcgYWxsb2NhdGlvbiBncm91cCBpcyAiCisJCSAgICAgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpYWxsb2NfZ3JvdXApOworCiAJCS8qCiAJCSAqIFNvbWUgaW5vZGVzIG11c3QgYmUgZnJlZWQgYnkgdXMsIHNvIHRyeSB0byBhbGxvY2F0ZQogCQkgKiBmcm9tIG91ciBvd24gbmV4dCB0aW1lLgpAQCAtNzkwLDcgKzgyMCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCBhYywKIAkJCQkJICAgICBHTE9CQUxfQklUTUFQX1NZU1RFTV9JTk9ERSwKLQkJCQkJICAgICBPQ0ZTMl9JTlZBTElEX1NMT1QsCisJCQkJCSAgICAgT0NGUzJfSU5WQUxJRF9TTE9ULCBOVUxMLAogCQkJCQkgICAgIEFMTE9DX05FV19HUk9VUCk7CiAJaWYgKHN0YXR1cyA8IDAgJiYgc3RhdHVzICE9IC1FTk9TUEMpIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtODA2LDYgKzgzNiw3IEBACiAgKiB0aGluZ3MgYSBiaXQuICovCiBzdGF0aWMgaW50IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICAgICB1MzIgYml0c193YW50ZWQsIHU2NCBtYXhfYmxvY2ssCisJCQkJCSAgICAgaW50IGZsYWdzLAogCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqYWMpCiB7CiAJaW50IHN0YXR1czsKQEAgLTgyMyw3ICs4NTQsOCBAQAogCSgqYWMpLT5hY19tYXhfYmxvY2sgPSBtYXhfYmxvY2s7CiAKIAlzdGF0dXMgPSAtRU5PU1BDOwotCWlmIChvY2ZzMl9hbGxvY19zaG91bGRfdXNlX2xvY2FsKG9zYiwgYml0c193YW50ZWQpKSB7CisJaWYgKCEoZmxhZ3MgJiBBTExPQ19HUk9VUFNfRlJPTV9HTE9CQUwpICYmCisJICAgIG9jZnMyX2FsbG9jX3Nob3VsZF91c2VfbG9jYWwob3NiLCBiaXRzX3dhbnRlZCkpIHsKIAkJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9sb2NhbF9hbGxvY19iaXRzKG9zYiwKIAkJCQkJCQliaXRzX3dhbnRlZCwKIAkJCQkJCQkqYWMpOwpAQCAtODYxLDcgKzg5Myw4IEBACiAJCQkgICB1MzIgYml0c193YW50ZWQsCiAJCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewotCXJldHVybiBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQob3NiLCBiaXRzX3dhbnRlZCwgMCwgYWMpOworCXJldHVybiBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQob3NiLCBiaXRzX3dhbnRlZCwgMCwKKwkJCQkJCSBBTExPQ19ORVdfR1JPVVAsIGFjKTsKIH0KIAogLyoKQEAgLTE2MTgsOCArMTY1MSw0MSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfaW5vZGVfYWNfZ3JvdXAoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilwYXJlbnRfZmVfYmgtPmJfZGF0YTsKKwkvKgorCSAqIFRyeSB0byBhbGxvY2F0ZSBpbm9kZXMgZnJvbSBzb21lIHNwZWNpZmljIGdyb3VwLgorCSAqCisJICogSWYgdGhlIHBhcmVudCBkaXIgaGFzIHJlY29yZGVkIHRoZSBsYXN0IGdyb3VwIHVzZWQgaW4gYWxsb2NhdGlvbiwKKwkgKiBjb29sLCB1c2UgaXQuIE90aGVyd2lzZSBpZiB3ZSB0cnkgdG8gYWxsb2NhdGUgbmV3IGlub2RlIGZyb20gdGhlCisJICogc2FtZSBzbG90IHRoZSBwYXJlbnQgZGlyIGJlbG9uZ3MgdG8sIHVzZSB0aGUgc2FtZSBjaHVuay4KKwkgKgorCSAqIFdlIGFyZSB2ZXJ5IGNhcmVmdWwgaGVyZSB0byBhdm9pZCB0aGUgbWlzdGFrZSBvZiBzZXR0aW5nCisJICogYWNfbGFzdF9ncm91cCB0byBhIGdyb3VwIGRlc2NyaXB0b3IgZnJvbSBhIGRpZmZlcmVudCAodW5sb2NrZWQpIHNsb3QuCisJICovCisJaWYgKE9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX2dyb3VwICYmCisJICAgIE9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX3Nsb3QgPT0gYWMtPmFjX2FsbG9jX3Nsb3QpCisJCWFjLT5hY19sYXN0X2dyb3VwID0gT0NGUzJfSShkaXIpLT5pcF9sYXN0X3VzZWRfZ3JvdXA7CisJZWxzZSBpZiAobGUxNl90b19jcHUoZmUtPmlfc3ViYWxsb2Nfc2xvdCkgPT0gYWMtPmFjX2FsbG9jX3Nsb3QpCisJCWFjLT5hY19sYXN0X2dyb3VwID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoCisJCQkJCWxlNjRfdG9fY3B1KGZlLT5pX2Jsa25vKSwKKwkJCQkJbGUxNl90b19jcHUoZmUtPmlfc3ViYWxsb2NfYml0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9zYXZlX2lub2RlX2FjX2dyb3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlPQ0ZTMl9JKGRpciktPmlwX2xhc3RfdXNlZF9ncm91cCA9IGFjLT5hY19sYXN0X2dyb3VwOworCU9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX3Nsb3QgPSBhYy0+YWNfYWxsb2Nfc2xvdDsKK30KKwogaW50IG9jZnMyX2NsYWltX25ld19pbm9kZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCSAgc3RydWN0IGlub2RlICpkaXIsCisJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAogCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCiAJCQkgIHUxNiAqc3ViYWxsb2NfYml0LAogCQkJICB1NjQgKmZlX2Jsa25vKQpAQCAtMTYzNSw2ICsxNzAxLDggQEAKIAlCVUdfT04oYWMtPmFjX2JpdHNfd2FudGVkICE9IDEpOwogCUJVR19PTihhYy0+YWNfd2hpY2ggIT0gT0NGUzJfQUNfVVNFX0lOT0RFKTsKIAorCW9jZnMyX2luaXRfaW5vZGVfYWNfZ3JvdXAoZGlyLCBwYXJlbnRfZmVfYmgsIGFjKTsKKwogCXN0YXR1cyA9IG9jZnMyX2NsYWltX3N1YmFsbG9jX2JpdHMob3NiLAogCQkJCQkgICBhYywKIAkJCQkJICAgaGFuZGxlLApAQCAtMTY1Myw2ICsxNzIxLDcgQEAKIAogCSpmZV9ibGtubyA9IGJnX2Jsa25vICsgKHU2NCkgKCpzdWJhbGxvY19iaXQpOwogCWFjLT5hY19iaXRzX2dpdmVuKys7CisJb2NmczJfc2F2ZV9pbm9kZV9hY19ncm91cChkaXIsIGFjKTsKIAlzdGF0dXMgPSAwOwogYmFpbDoKIAltbG9nX2V4aXQoc3RhdHVzKTsKQEAgLTIxMTYsMyArMjE4NSwxNjIgQEAKIAogCXJldHVybiByZXQ7CiB9CisKKy8qCisgKiBSZWFkIHRoZSBpbm9kZSBzcGVjaWZpZWQgYnkgYmxrbm8gdG8gZ2V0IHN1YmFsbG9jX3Nsb3QgYW5kCisgKiBzdWJhbGxvY19iaXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZ2V0X3N1YmFsbG9jX3Nsb3RfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sCisJCQkJICAgICAgIHUxNiAqc3ViYWxsb2Nfc2xvdCwgdTE2ICpzdWJhbGxvY19iaXQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICppbm9kZV9mZTsKKworCW1sb2dfZW50cnkoImJsa25vOiAlbGx1XG4iLCBibGtubyk7CisKKwkvKiBkaXJ0eSByZWFkIGRpc2sgKi8KKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2Jsb2Nrc19zeW5jKG9zYiwgYmxrbm8sIDEsICZpbm9kZV9iaCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZyhNTF9FUlJPUiwgInJlYWQgYmxvY2sgJWxsdSBmYWlsZWQgJWRcbiIsIGJsa25vLCBzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGVfZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBpbm9kZV9iaC0+Yl9kYXRhOworCWlmICghT0NGUzJfSVNfVkFMSURfRElOT0RFKGlub2RlX2ZlKSkgeworCQltbG9nKE1MX0VSUk9SLCAiaW52YWxpZCBpbm9kZSAlbGx1IHJlcXVlc3RlZFxuIiwgYmxrbm8pOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpICE9IE9DRlMyX0lOVkFMSURfU0xPVCAmJgorCSAgICAodTMyKWxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpID4gb3NiLT5tYXhfc2xvdHMgLSAxKSB7CisJCW1sb2coTUxfRVJST1IsICJpbm9kZSAlbGx1IGhhcyBpbnZhbGlkIHN1YmFsbG9jIHNsb3QgJXVcbiIsCisJCSAgICAgYmxrbm8sICh1MzIpbGUxNl90b19jcHUoaW5vZGVfZmUtPmlfc3ViYWxsb2Nfc2xvdCkpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKHN1YmFsbG9jX3Nsb3QpCisJCSpzdWJhbGxvY19zbG90ID0gbGUxNl90b19jcHUoaW5vZGVfZmUtPmlfc3ViYWxsb2Nfc2xvdCk7CisJaWYgKHN1YmFsbG9jX2JpdCkKKwkJKnN1YmFsbG9jX2JpdCA9IGxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX2JpdCk7CisKK2JhaWw6CisJYnJlbHNlKGlub2RlX2JoKTsKKworCW1sb2dfZXhpdChzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB0ZXN0IHdoZXRoZXIgYml0IGlzIFNFVCBpbiBhbGxvY2F0b3IgYml0bWFwIG9yIG5vdC4gIG9uIHN1Y2Nlc3MsIDAKKyAqIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzIDEgZm9yIFNFVDsgMCBvdGhlcndpc2UuICB3aGVuIGZhaWxzLCBlcnJubworICogaXMgcmV0dXJuZWQgYW5kICpyZXMgaXMgbWVhbmluZ2xlc3MuICBDYWxsIHRoaXMgYWZ0ZXIgeW91IGhhdmUKKyAqIGNsdXN0ZXIgbG9ja2VkIGFnYWluc3Qgc3ViYWxsb2MsIG9yIHlvdSBtYXkgZ2V0IGEgcmVzdWx0IGJhc2VkIG9uCisgKiBub24tdXAyZGF0ZSBjb250ZW50cworICovCitzdGF0aWMgaW50IG9jZnMyX3Rlc3Rfc3ViYWxsb2NfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgIHN0cnVjdCBpbm9kZSAqc3ViYWxsb2MsCisJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICphbGxvY19iaCwgdTY0IGJsa25vLAorCQkJCSAgIHUxNiBiaXQsIGludCAqcmVzKQoreworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmFsbG9jX2ZlOworCXN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpncm91cDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoID0gTlVMTDsKKwl1NjQgYmdfYmxrbm87CisJaW50IHN0YXR1czsKKworCW1sb2dfZW50cnkoImJsa25vOiAlbGx1IGJpdDogJXVcbiIsIGJsa25vLCAodW5zaWduZWQgaW50KWJpdCk7CisKKwlhbGxvY19mZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopYWxsb2NfYmgtPmJfZGF0YTsKKwlpZiAoKGJpdCArIDEpID4gb2NmczJfYml0c19wZXJfZ3JvdXAoJmFsbG9jX2ZlLT5pZDIuaV9jaGFpbikpIHsKKwkJbWxvZyhNTF9FUlJPUiwgInN1YmFsbG9jIGJpdCAldSBvdXQgb2YgcmFuZ2Ugb2YgJXVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGludCliaXQsCisJCSAgICAgb2NmczJfYml0c19wZXJfZ3JvdXAoJmFsbG9jX2ZlLT5pZDIuaV9jaGFpbikpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJYmdfYmxrbm8gPSBvY2ZzMl93aGljaF9zdWJhbGxvY19ncm91cChibGtubywgYml0KTsKKwlzdGF0dXMgPSBvY2ZzMl9yZWFkX2dyb3VwX2Rlc2NyaXB0b3Ioc3ViYWxsb2MsIGFsbG9jX2ZlLCBiZ19ibGtubywKKwkJCQkJICAgICAmZ3JvdXBfYmgpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJyZWFkIGdyb3VwICVsbHUgZmFpbGVkICVkXG4iLCBiZ19ibGtubywgc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWdyb3VwID0gKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICopIGdyb3VwX2JoLT5iX2RhdGE7CisJKnJlcyA9IG9jZnMyX3Rlc3RfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKilncm91cC0+YmdfYml0bWFwKTsKKworYmFpbDoKKwlicmVsc2UoZ3JvdXBfYmgpOworCisJbWxvZ19leGl0KHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRlc3QgaWYgdGhlIGJpdCByZXByZXNlbnRpbmcgdGhpcyBpbm9kZSAoYmxrbm8pIGlzIHNldCBpbiB0aGUKKyAqIHN1YmFsbG9jYXRvci4KKyAqCisgKiBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzIDEgZm9yIFNFVDsgMCBvdGhlcndpc2UuCisgKgorICogSW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUsIGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQgYW5kICpyZXMgaXMKKyAqIG1lYW5pbmdsZXNzLgorICoKKyAqIENhbGxlcnMgbXVzdCBtYWtlIHN1cmUgdG8gaG9sZCBuZnNfc3luY19sb2NrIHRvIHByZXZlbnQKKyAqIG9jZnMyX2RlbGV0ZV9pbm9kZSgpIG9uIGFub3RoZXIgbm9kZSBmcm9tIGFjY2Vzc2luZyB0aGUgc2FtZQorICogc3ViYWxsb2NhdG9yIGNvbmN1cnJlbnRseS4KKyAqLworaW50IG9jZnMyX3Rlc3RfaW5vZGVfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIGludCAqcmVzKQoreworCWludCBzdGF0dXM7CisJdTE2IHN1YmFsbG9jX2JpdCA9IDAsIHN1YmFsbG9jX3Nsb3QgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGVfYWxsb2NfaW5vZGU7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICphbGxvY19iaCA9IE5VTEw7CisKKwltbG9nX2VudHJ5KCJibGtubzogJWxsdSIsIGJsa25vKTsKKworCXN0YXR1cyA9IG9jZnMyX2dldF9zdWJhbGxvY19zbG90X2JpdChvc2IsIGJsa25vLCAmc3ViYWxsb2Nfc2xvdCwKKwkJCQkJICAgICAmc3ViYWxsb2NfYml0KTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAiZ2V0IGFsbG9jIHNsb3QgYW5kIGJpdCBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpbm9kZV9hbGxvY19pbm9kZSA9CisJCW9jZnMyX2dldF9zeXN0ZW1fZmlsZV9pbm9kZShvc2IsIElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJICAgIHN1YmFsbG9jX3Nsb3QpOworCWlmICghaW5vZGVfYWxsb2NfaW5vZGUpIHsKKwkJLyogdGhlIGVycm9yIGNvZGUgY291bGQgYmUgaW5hY2N1cmF0ZSwgYnV0IHdlIGFyZSBub3QgYWJsZSB0bworCQkgKiBnZXQgdGhlIGNvcnJlY3Qgb25lLiAqLworCQlzdGF0dXMgPSAtRUlOVkFMOworCQltbG9nKE1MX0VSUk9SLCAidW5hYmxlIHRvIGdldCBhbGxvYyBpbm9kZSBpbiBzbG90ICV1XG4iLAorCQkgICAgICh1MzIpc3ViYWxsb2Nfc2xvdCk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwltdXRleF9sb2NrKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisJc3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhpbm9kZV9hbGxvY19pbm9kZSwgJmFsbG9jX2JoLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltdXRleF91bmxvY2soJmlub2RlX2FsbG9jX2lub2RlLT5pX211dGV4KTsKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2sgb24gYWxsb2MgaW5vZGUgb24gc2xvdCAldSBmYWlsZWQgJWRcbiIsCisJCSAgICAgKHUzMilzdWJhbGxvY19zbG90LCBzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJc3RhdHVzID0gb2NmczJfdGVzdF9zdWJhbGxvY19iaXQob3NiLCBpbm9kZV9hbGxvY19pbm9kZSwgYWxsb2NfYmgsCisJCQkJCSBibGtubywgc3ViYWxsb2NfYml0LCByZXMpOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nKE1MX0VSUk9SLCAidGVzdCBzdWJhbGxvYyBiaXQgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCisJb2NmczJfaW5vZGVfdW5sb2NrKGlub2RlX2FsbG9jX2lub2RlLCAwKTsKKwltdXRleF91bmxvY2soJmlub2RlX2FsbG9jX2lub2RlLT5pX211dGV4KTsKKworCWlwdXQoaW5vZGVfYWxsb2NfaW5vZGUpOworCWJyZWxzZShhbGxvY19iaCk7CitiYWlsOgorCW1sb2dfZXhpdChzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5oIGIvZnMvb2NmczIvc3ViYWxsb2MuaAppbmRleCBlM2MxM2M3Li44YzlhNzhhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5oCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKQEAgLTg4LDYgKzg4LDggQEAKIAkJCSB1NjQgKmJsa25vX3N0YXJ0KTsKIGludCBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAogCQkJICB1MTYgKnN1YmFsbG9jX2JpdCwKIAkJCSAgdTY0ICpmZV9ibGtubyk7CkBAIC0xODYsNCArMTg4LDYgQEAKIAkJCSAgdTMyIGNsdXN0ZXJzX3RvX2FkZCwgdTMyIGV4dGVudHNfdG9fc3BsaXQsCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqZGF0YV9hYywKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiptZXRhX2FjKTsKKworaW50IG9jZnMyX3Rlc3RfaW5vZGVfYml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIGludCAqcmVzKTsKICNlbmRpZiAvKiBfQ0hBSU5BTExPQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggN2FjODNhOC4uNzlmZjhkOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0yMDEsNiArMjAxLDE3MCBAQAogCXtPcHRfZXJyLCBOVUxMfQogfTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBvY2ZzMl9vc2JfZHVtcChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBvdXQgPSAwOworCWludCBpOworCXN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNjb25uID0gb3NiLT5jY29ubjsKKwlzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwICpybSA9IG9zYi0+cmVjb3ZlcnlfbWFwOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gSWQ6ICUtcyAgVXVpZDogJS1zICBHZW46IDB4JVggIExhYmVsOiAlLXNcbiIsCisJCQkiRGV2aWNlIiwgb3NiLT5kZXZfc3RyLCBvc2ItPnV1aWRfc3RyLAorCQkJb3NiLT5mc19nZW5lcmF0aW9uLCBvc2ItPnZvbF9sYWJlbCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBTdGF0ZTogJWQgIEZsYWdzOiAweCVsWFxuIiwgIlZvbHVtZSIsCisJCQlhdG9taWNfcmVhZCgmb3NiLT52b2xfc3RhdGUpLCBvc2ItPm9zYl9mbGFncyk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBCbG9jazogJWx1ICBDbHVzdGVyOiAlZFxuIiwgIlNpemVzIiwKKwkJCW9zYi0+c2ItPnNfYmxvY2tzaXplLCBvc2ItPnNfY2x1c3RlcnNpemUpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gQ29tcGF0OiAweCVYICBJbmNvbXBhdDogMHglWCAgIgorCQkJIlJPY29tcGF0OiAweCVYXG4iLAorCQkJIkZlYXR1cmVzIiwgb3NiLT5zX2ZlYXR1cmVfY29tcGF0LAorCQkJb3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQsIG9zYi0+c19mZWF0dXJlX3JvX2NvbXBhdCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBPcHRzOiAweCVsWCAgQXRpbWVRdWFudGE6ICV1XG4iLCAiTW91bnQiLAorCQkJb3NiLT5zX21vdW50X29wdCwgb3NiLT5zX2F0aW1lX3F1YW50dW0pOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU3RhY2s6ICVzICBOYW1lOiAlKnMgIFZlcnNpb246ICVkLiVkXG4iLAorCQkJIkNsdXN0ZXIiLAorCQkJKCpvc2ItPm9zYl9jbHVzdGVyX3N0YWNrID09ICdcMCcgPworCQkJICJvMmNiIiA6IG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2spLAorCQkJY2Nvbm4tPmNjX25hbWVsZW4sIGNjb25uLT5jY19uYW1lLAorCQkJY2Nvbm4tPmNjX3ZlcnNpb24ucHZfbWFqb3IsIGNjb25uLT5jY192ZXJzaW9uLnB2X21pbm9yKTsKKworCXNwaW5fbG9jaygmb3NiLT5kY190YXNrX2xvY2spOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFBpZDogJWQgIENvdW50OiAlbHUgIFdha2VTZXE6ICVsdSAgIgorCQkJIldvcmtTZXE6ICVsdVxuIiwgIkRvd25DbnZ0IiwKKwkJCXRhc2tfcGlkX25yKG9zYi0+ZGNfdGFzayksIG9zYi0+YmxvY2tlZF9sb2NrX2NvdW50LAorCQkJb3NiLT5kY193YWtlX3NlcXVlbmNlLCBvc2ItPmRjX3dvcmtfc2VxdWVuY2UpOworCXNwaW5fdW5sb2NrKCZvc2ItPmRjX3Rhc2tfbG9jayk7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIiUxMHMgPT4gUGlkOiAlZCAgTm9kZXM6IiwKKwkJCSJSZWNvdmVyeSIsCisJCQkob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzayA/CisJCQkgdGFza19waWRfbnIob3NiLT5yZWNvdmVyeV90aHJlYWRfdGFzaykgOiAtMSkpOworCWlmIChybS0+cm1fdXNlZCA9PSAwKQorCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIgTm9uZVxuIik7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBybS0+cm1fdXNlZDsgaSsrKQorCQkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiICVkIiwKKwkJCQkJcm0tPnJtX2VudHJpZXNbaV0pOworCQlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJcbiIpOworCX0KKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBQaWQ6ICVkICBJbnRlcnZhbDogJWx1ICBOZWVkczogJWRcbiIsICJDb21taXQiLAorCQkJdGFza19waWRfbnIob3NiLT5jb21taXRfdGFzayksIG9zYi0+b3NiX2NvbW1pdF9pbnRlcnZhbCwKKwkJCWF0b21pY19yZWFkKCZvc2ItPm5lZWRzX2NoZWNrcG9pbnQpKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFN0YXRlOiAlZCAgTnVtVHhuczogJWQgIFR4bklkOiAlbHVcbiIsCisJCQkiSm91cm5hbCIsIG9zYi0+am91cm5hbC0+al9zdGF0ZSwKKwkJCWF0b21pY19yZWFkKCZvc2ItPmpvdXJuYWwtPmpfbnVtX3RyYW5zKSwKKwkJCW9zYi0+am91cm5hbC0+al90cmFuc19pZCk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBHbG9iYWxBbGxvY3M6ICVkICBMb2NhbEFsbG9jczogJWQgICIKKwkJCSJTdWJBbGxvY3M6ICVkICBMQVdpbk1vdmVzOiAlZCAgU0FFeHRlbmRzOiAlZFxuIiwKKwkJCSJTdGF0cyIsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5iaXRtYXBfZGF0YSksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5sb2NhbF9kYXRhKSwKKwkJCWF0b21pY19yZWFkKCZvc2ItPmFsbG9jX3N0YXRzLmJnX2FsbG9jcyksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5tb3ZlcyksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5iZ19leHRlbmRzKSk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBTdGF0ZTogJXUgIERlc2NyaXB0b3I6ICVsbHUgIFNpemU6ICV1IGJpdHMgICIKKwkJCSJEZWZhdWx0OiAldSBiaXRzXG4iLAorCQkJIkxvY2FsQWxsb2MiLCBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylvc2ItPmxhX2xhc3RfZ2QsCisJCQlvc2ItPmxvY2FsX2FsbG9jX2JpdHMsIG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzKTsKKworCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU2xvdDogJWQgIE51bVN0b2xlbjogJWRcbiIsICJTdGVhbCIsCisJCQlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCwKKwkJCWF0b21pY19yZWFkKCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4pKTsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlMTBzID0+ICUzcyAgJTEwc1xuIiwKKwkJCSJTbG90cyIsICJOdW0iLCAiUmVjb0dlbiIpOworCisJZm9yIChpID0gMDsgaSA8IG9zYi0+bWF4X3Nsb3RzOyArK2kpIHsKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJCSIlMTBzICAlYyAlM2QgICUxMGRcbiIsCisJCQkJIiAiLAorCQkJCShpID09IG9zYi0+c2xvdF9udW0gPyAnKicgOiAnICcpLAorCQkJCWksIG9zYi0+c2xvdF9yZWNvdmVyeV9nZW5lcmF0aW9uc1tpXSk7CisJfQorCisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBvY2ZzMl9vc2JfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGlub2RlLT5pX3ByaXZhdGU7CisJY2hhciAqYnVmID0gTlVMTDsKKworCWJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBiYWlsOworCisJaV9zaXplX3dyaXRlKGlub2RlLCBvY2ZzMl9vc2JfZHVtcChvc2IsIGJ1ZiwgUEFHRV9TSVpFKSk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBvY2ZzMl9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGZpbGUtPnByaXZhdGVfZGF0YSwKKwkJCQkgICAgICAgaV9zaXplX3JlYWQoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KSk7Cit9CisjZWxzZQorc3RhdGljIGludCBvY2ZzMl9vc2JfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgb2NmczJfZGVidWdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBzc2l6ZV90IG9jZnMyX2RlYnVnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXJldHVybiAwOworfQorI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLworCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9CQlvY2ZzMl9vc2JfZGVidWdfb3BlbiwKKwkucmVsZWFzZSA9CW9jZnMyX2RlYnVnX3JlbGVhc2UsCisJLnJlYWQgPQkJb2NmczJfZGVidWdfcmVhZCwKKwkubGxzZWVrID0JZ2VuZXJpY19maWxlX2xsc2VlaywKK307CisKIC8qCiAgKiB3cml0ZV9zdXBlciBhbmQgc3luY19mcyByaXBwZWQgcmlnaHQgb3V0IG9mIGV4dDMuCiAgKi8KQEAgLTkyNiw2ICsxMDkwLDE2IEBACiAJCWdvdG8gcmVhZF9zdXBlcl9lcnJvcjsKIAl9CiAKKwlvc2ItPm9zYl9jdHh0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZnNfc3RhdGUiLCBTX0lGUkVHfFNfSVJVU1IsCisJCQkJCSAgICBvc2ItPm9zYl9kZWJ1Z19yb290LAorCQkJCQkgICAgb3NiLAorCQkJCQkgICAgJm9jZnMyX29zYl9kZWJ1Z19mb3BzKTsKKwlpZiAoIW9zYi0+b3NiX2N0eHQpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7CisJfQorCiAJc3RhdHVzID0gb2NmczJfbW91bnRfdm9sdW1lKHNiKTsKIAlpZiAob3NiLT5yb290X2lub2RlKQogCQlpbm9kZSA9IGlncmFiKG9zYi0+cm9vdF9pbm9kZSk7CkBAIC0xNjIwLDYgKzE3OTQsOCBAQAogCW9zYiA9IE9DRlMyX1NCKHNiKTsKIAlCVUdfT04oIW9zYik7CiAKKwlkZWJ1Z2ZzX3JlbW92ZShvc2ItPm9zYl9jdHh0KTsKKwogCW9jZnMyX2Rpc2FibGVfcXVvdGFzKG9zYik7CiAKIAlvY2ZzMl9zaHV0ZG93bl9sb2NhbF9hbGxvYyhvc2IpOwpAQCAtMTc0Miw2ICsxOTE4LDEyIEBACiAJYmJpdHMgPSBsZTMyX3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc19ibG9ja3NpemVfYml0cyk7CiAJc2ItPnNfbWF4Ynl0ZXMgPSBvY2ZzMl9tYXhfZmlsZV9vZmZzZXQoYmJpdHMsIGNiaXRzKTsKIAorCW9zYi0+b3NiX2R4X21hc2sgPSAoMSA8PCAoY2JpdHMgLSBiYml0cykpIC0gMTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW9zYi0+b3NiX2R4X3NlZWRbaV0gPSBsZTMyX3RvX2NwdShkaS0+aWQyLmlfc3VwZXIuc19keF9zZWVkW2ldKTsKKwlvc2ItPm9zYl9keF9zZWVkWzNdID0gbGUzMl90b19jcHUoZGktPmlkMi5pX3N1cGVyLnNfdXVpZF9oYXNoKTsKKwogCW9zYi0+c2IgPSBzYjsKIAkvKiBTYXZlIG9mZiBmb3Igb2NmczJfcndfZGlyZWN0ICovCiAJb3NiLT5zX3NlY3RzaXplX2JpdHMgPSBibGtzaXplX2JpdHMoc2VjdG9yX3NpemUpOwpAQCAtMjEzMCw2ICsyMzEyLDEyIEBACiAJICogbG9jaywgYW5kIGl0J3MgbWFya2VkIGFzIGRpcnR5LCBzZXQgdGhlIGJpdCBpbiB0aGUgcmVjb3ZlcgogCSAqIG1hcCBhbmQgbGF1bmNoIGEgcmVjb3ZlcnkgdGhyZWFkIGZvciBpdC4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9tYXJrX2RlYWRfbm9kZXMob3NiKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gZmluYWxseTsKKwl9CisKKwlzdGF0dXMgPSBvY2ZzMl9jb21wdXRlX3JlcGxheV9zbG90cyhvc2IpOwogCWlmIChzdGF0dXMgPCAwKQogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jCmluZGV4IDI1NjNkZjguLjE1NjMxMDEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmMKKysrIGIvZnMvb2NmczIveGF0dHIuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLAogCQkJICBpbnQgKnhhdHRyX2NyZWRpdHMsCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqeGF0dHJfYWMpCisJCQkgIGludCAqd2FudF9tZXRhKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKQEAgLTU1NCwxMSArNTU0LDcgQEAKIAlpZiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA9PSBPQ0ZTMl9NSU5fQkxPQ0tTSVpFIHx8CiAJICAgIChTX0lTRElSKG1vZGUpICYmIG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHx8CiAJICAgIChzX3NpemUgKyBhX3NpemUpID4gT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkgewotCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCAxLCB4YXR0cl9hYyk7Ci0JCWlmIChyZXQpIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJKndhbnRfbWV0YSA9ICp3YW50X21ldGEgKyAxOwogCQkqeGF0dHJfY3JlZGl0cyArPSBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUzsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oCmluZGV4IDVhMWViYzcuLjFjYTdlOWEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKKysrIGIvZnMvb2NmczIveGF0dHIuaApAQCAtNjgsNyArNjgsNyBAQAogCQkJICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTsKIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAogCQkJICBpbnQsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOworCQkJICBpbnQgKiwgaW50ICosIGludCAqKTsKIAogLyoKICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssCmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggNjMzZTlkYy4uMzc5YWU1ZiAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCisrKyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMjYyLDE0ICsyNjIsMTkgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBkZW50cnktPmRfc2I7CiAJc3RydWN0IG9tZnNfc2JfaW5mbyAqc2JpID0gT01GU19TQihzKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYocy0+c19iZGV2LT5iZF9kZXYpOworCiAJYnVmLT5mX3R5cGUgPSBPTUZTX01BR0lDOwogCWJ1Zi0+Zl9ic2l6ZSA9IHNiaS0+c19ibG9ja3NpemU7CiAJYnVmLT5mX2Jsb2NrcyA9IHNiaS0+c19udW1fYmxvY2tzOwogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19udW1fYmxvY2tzOwogCWJ1Zi0+Zl9uYW1lbGVuID0gT01GU19OQU1FTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJYnVmLT5mX2JmcmVlID0gYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9mZnJlZSA9CiAJCW9tZnNfY291bnRfZnJlZShzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MjEsNyArNDI2LDcgQEAKIAogCXNiaS0+c191aWQgPSBjdXJyZW50X3VpZCgpOwogCXNiaS0+c19naWQgPSBjdXJyZW50X2dpZCgpOwotCXNiaS0+c19kbWFzayA9IHNiaS0+c19mbWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwlzYmktPnNfZG1hc2sgPSBzYmktPnNfZm1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAKIAlpZiAoIXBhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgc2JpKSkKIAkJZ290byBlbmQ7CmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmMKaW5kZXggNzViNjE2Ny4uMzc3ZWIyNSAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisrKyBiL2ZzL29wZW4uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogaW50IHZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBlMGFmZDMyLi5mNzE1NTk3IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29vbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiAvKiBOT1RFOgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9nZW5lcmljLmMgYi9mcy9wcm9jL2dlbmVyaWMuYwppbmRleCA1ZDI5ODllLi5mYTY3OGFiIDEwMDY0NAotLS0gYS9mcy9wcm9jL2dlbmVyaWMuYworKysgYi9mcy9wcm9jL2dlbmVyaWMuYwpAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBQUk9DX0JMT0NLX1NJWkUJKFBBR0VfU0laRSAtIDEwMjQpCiAKIHN0YXRpYyBzc2l6ZV90Ci1wcm9jX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKK19fcHJvY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJICAgICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC0xODMsMTkgKzE4Myw0NyBAQAogfQogCiBzdGF0aWMgc3NpemVfdAorcHJvY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90IHJ2ID0gLUVJTzsKKworCXNwaW5fbG9jaygmcGRlLT5wZGVfdW5sb2FkX2xvY2spOworCWlmICghcGRlLT5wcm9jX2ZvcHMpIHsKKwkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJcmV0dXJuIHJ2OworCX0KKwlwZGUtPnBkZV91c2VycysrOworCXNwaW5fdW5sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CisKKwlydiA9IF9fcHJvY19maWxlX3JlYWQoZmlsZSwgYnVmLCBuYnl0ZXMsIHBwb3MpOworCisJcGRlX3VzZXJzX2RlYyhwZGUpOworCXJldHVybiBydjsKK30KKworc3RhdGljIHNzaXplX3QKIHByb2NfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZHA7Ci0JCi0JZHAgPSBQREUoaW5vZGUpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXNzaXplX3QgcnYgPSAtRUlPOwogCi0JaWYgKCFkcC0+d3JpdGVfcHJvYykKLQkJcmV0dXJuIC1FSU87CisJaWYgKHBkZS0+d3JpdGVfcHJvYykgeworCQlzcGluX2xvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJaWYgKCFwZGUtPnByb2NfZm9wcykgeworCQkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJCXJldHVybiBydjsKKwkJfQorCQlwZGUtPnBkZV91c2VycysrOworCQlzcGluX3VubG9jaygmcGRlLT5wZGVfdW5sb2FkX2xvY2spOwogCi0JLyogRklYTUU6IGRvZXMgdGhpcyByb3V0aW5lIG5lZWQgcHBvcz8gIHByb2JhYmx5Li4uICovCi0JcmV0dXJuIGRwLT53cml0ZV9wcm9jKGZpbGUsIGJ1ZmZlciwgY291bnQsIGRwLT5kYXRhKTsKKwkJLyogRklYTUU6IGRvZXMgdGhpcyByb3V0aW5lIG5lZWQgcHBvcz8gIHByb2JhYmx5Li4uICovCisJCXJ2ID0gcGRlLT53cml0ZV9wcm9jKGZpbGUsIGJ1ZmZlciwgY291bnQsIHBkZS0+ZGF0YSk7CisJCXBkZV91c2Vyc19kZWMocGRlKTsKKwl9CisJcmV0dXJuIHJ2OwogfQogCiAKQEAgLTMwNyw2ICszMzUsMjEgQEAKIC8qCiAgKiBSZXR1cm4gYW4gaW5vZGUgbnVtYmVyIGJldHdlZW4gUFJPQ19EWU5BTUlDX0ZJUlNUIGFuZAogICogMHhmZmZmZmZmZiwgb3IgemVybyBvbiBmYWlsdXJlLgorICoKKyAqIEN1cnJlbnQgaW5vZGUgYWxsb2NhdGlvbnMgaW4gdGhlIHByb2MtZnMgKGhleC1udW1iZXJzKToKKyAqCisgKiAwMDAwMDAwMAkJcmVzZXJ2ZWQKKyAqIDAwMDAwMDAxLTAwMDAwZmZmCXN0YXRpYyBlbnRyaWVzCShnb25lcnMpCisgKiAgICAgIDAwMQkJcm9vdC1pbm8KKyAqCisgKiAwMDAwMTAwMC0wMDAwMWZmZgl1bnVzZWQKKyAqIDAwMDF4eHh4LTdmZmZ4eHh4CXBpZC1kaXIgZW50cmllcyBmb3IgcGlkIDEtN2ZmZgorICogODAwMDAwMDAtZWZmZmZmZmYJdW51c2VkCisgKiBmMDAwMDAwMC1mZmZmZmZmZglkeW5hbWljIGVudHJpZXMKKyAqCisgKiBHb2FsOgorICoJT25jZSB3ZSBzcGxpdCB0aGUgdGhpbmcgaW50byBzZXZlcmFsIHZpcnR1YWwgZmlsZXN5c3RlbXMsCisgKgl3ZSB3aWxsIGdldCByaWQgb2YgbWFnaWNhbCByYW5nZXMgKGFuZCB0aGlzIGNvbW1lbnQsIEJUVykuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2lub2RlX251bWJlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS1hbGxvYy50eHQgYi9mcy9wcm9jL2lub2RlLWFsbG9jLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyMTJmOS4uMDAwMDAwMAotLS0gYS9mcy9wcm9jL2lub2RlLWFsbG9jLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLUN1cnJlbnQgaW5vZGUgYWxsb2NhdGlvbnMgaW4gdGhlIHByb2MtZnMgKGhleC1udW1iZXJzKToKLQotICAwMDAwMDAwMAkJcmVzZXJ2ZWQKLSAgMDAwMDAwMDEtMDAwMDBmZmYJc3RhdGljIGVudHJpZXMJKGdvbmVycykKLSAgICAgICAwMDEJCXJvb3QtaW5vCi0KLSAgMDAwMDEwMDAtMDAwMDFmZmYJdW51c2VkCi0gIDAwMDF4eHh4LTdmZmZ4eHh4CXBpZC1kaXIgZW50cmllcyBmb3IgcGlkIDEtN2ZmZgotICA4MDAwMDAwMC1lZmZmZmZmZgl1bnVzZWQKLSAgZjAwMDAwMDAtZmZmZmZmZmYJZHluYW1pYyBlbnRyaWVzCi0KLUdvYWw6Ci0JYSkgb25jZSB3ZSdsbCBzcGxpdCB0aGUgdGhpbmcgaW50byBzZXZlcmFsIHZpcnR1YWwgZmlsZXN5c3RlbXMgd2UKLQl3aWxsIGdldCByaWQgb2YgbWFnaWNhbCByYW5nZXMgKGFuZCB0aGlzIGZpbGUsIEJUVykuCmRpZmYgLS1naXQgYS9mcy9wcm9jL2lub2RlLmMgYi9mcy9wcm9jL2lub2RlLmMKaW5kZXggZDhiYjVjNi4uZDc4YWRlMyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbm9kZS5jCisrKyBiL2ZzL3Byb2MvaW5vZGUuYwpAQCAtNTgsMTEgKzU4LDggQEAKIAogCS8qIExldCBnbyBvZiBhbnkgYXNzb2NpYXRlZCBwcm9jIGRpcmVjdG9yeSBlbnRyeSAqLwogCWRlID0gUFJPQ19JKGlub2RlKS0+cGRlOwotCWlmIChkZSkgewotCQlpZiAoZGUtPm93bmVyKQotCQkJbW9kdWxlX3B1dChkZS0+b3duZXIpOworCWlmIChkZSkKIAkJZGVfcHV0KGRlKTsKLQl9CiAJaWYgKFBST0NfSShpbm9kZSktPnN5c2N0bCkKIAkJc3lzY3RsX2hlYWRfcHV0KFBST0NfSShpbm9kZSktPnN5c2N0bCk7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwpAQCAtMTI3LDcgKzEyNCw3IEBACiAJCWNvbXBsZXRlKHBkZS0+cGRlX3VubG9hZF9jb21wbGV0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgcGRlX3VzZXJzX2RlYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSkKK3ZvaWQgcGRlX3VzZXJzX2RlYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSkKIHsKIAlzcGluX2xvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAlfX3BkZV91c2Vyc19kZWMocGRlKTsKQEAgLTQ0OSwxMiArNDQ2LDkgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQoZGUtPm93bmVyKSkKLQkJZ290byBvdXRfbW9kOwotCiAJaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTsKIAlpZiAoIWlub2RlKQotCQlnb3RvIG91dF9pbm87CisJCXJldHVybiBOVUxMOwogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CiAJCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJUFJPQ19JKGlub2RlKS0+ZmQgPSAwOwpAQCAtNDg1LDE2ICs0NzksOSBAQAogCQkJfQogCQl9CiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCX0gZWxzZSB7Ci0JICAgICAgIG1vZHVsZV9wdXQoZGUtPm93bmVyKTsKKwl9IGVsc2UKIAkgICAgICAgZGVfcHV0KGRlKTsKLQl9CiAJcmV0dXJuIGlub2RlOwotCi1vdXRfaW5vOgotCW1vZHVsZV9wdXQoZGUtPm93bmVyKTsKLW91dF9tb2Q6Ci0JcmV0dXJuIE5VTEw7CiB9CQkJCiAKIGludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IGNkNTNmZjguLmY2ZGI5NjEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTkxLDMgKzkxLDQgQEAKIAlpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAJc3RydWN0IGxpc3RfaGVhZCBsaDsKIH07Cit2b2lkIHBkZV91c2Vyc19kZWMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwppbmRleCA0M2QyMzk0Li43NGVhOTc0IDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCUsoaS5mcmVlcmFtLWkuZnJlZWhpZ2gpLAogI2VuZGlmCiAjaWZuZGVmIENPTkZJR19NTVUKLQkJSygodW5zaWduZWQgbG9uZykgYXRvbWljX3JlYWQoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKSksCisJCUsoKHVuc2lnbmVkIGxvbmcpIGF0b21pY19sb25nX3JlYWQoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKSksCiAjZW5kaWYKIAkJSyhpLnRvdGFsc3dhcCksCiAJCUsoaS5mcmVlc3dhcCksCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2NfdHR5LmMgYi9mcy9wcm9jL3Byb2NfdHR5LmMKaW5kZXggZDE1Mzk0Ni4uODNhZGNjOCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3R0eS5jCisrKyBiL2ZzL3Byb2MvcHJvY190dHkuYwpAQCAtMTQ0LDE3ICsxNDQsMTIgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAkJCi0JaWYgKCFkcml2ZXItPm9wcy0+cmVhZF9wcm9jIHx8ICFkcml2ZXItPmRyaXZlcl9uYW1lIHx8Ci0JICAgIGRyaXZlci0+cHJvY19lbnRyeSkKKwlpZiAoIWRyaXZlci0+ZHJpdmVyX25hbWUgfHwgZHJpdmVyLT5wcm9jX2VudHJ5IHx8CisJICAgICFkcml2ZXItPm9wcy0+cHJvY19mb3BzKQogCQlyZXR1cm47CiAKLQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShkcml2ZXItPmRyaXZlcl9uYW1lLCAwLCBwcm9jX3R0eV9kcml2ZXIpOwotCWlmICghZW50KQotCQlyZXR1cm47Ci0JZW50LT5yZWFkX3Byb2MgPSBkcml2ZXItPm9wcy0+cmVhZF9wcm9jOwotCWVudC0+b3duZXIgPSBkcml2ZXItPm93bmVyOwotCWVudC0+ZGF0YSA9IGRyaXZlcjsKLQorCWVudCA9IHByb2NfY3JlYXRlX2RhdGEoZHJpdmVyLT5kcml2ZXJfbmFtZSwgMCwgcHJvY190dHlfZHJpdmVyLAorCQkJICAgICAgIGRyaXZlci0+b3BzLT5wcm9jX2ZvcHMsIGRyaXZlcik7CiAJZHJpdmVyLT5wcm9jX2VudHJ5ID0gZW50OwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggOTQwNjM4NC4uYjBhZTBiZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtNjkzLDggKzY5Myw4IEBACiAJCWdvdG8gb3V0X3BhZ2VzOwogCX0KIAotCXBtLm91dCA9ICh1NjQgKilidWY7Ci0JcG0uZW5kID0gKHU2NCAqKShidWYgKyBjb3VudCk7CisJcG0ub3V0ID0gKHU2NCBfX3VzZXIgKilidWY7CisJcG0uZW5kID0gKHU2NCBfX3VzZXIgKikoYnVmICsgY291bnQpOwogCiAJcGFnZW1hcF93YWxrLnBtZF9lbnRyeSA9IHBhZ2VtYXBfcHRlX3JhbmdlOwogCXBhZ2VtYXBfd2Fsay5wdGVfaG9sZSA9IHBhZ2VtYXBfcHRlX2hvbGU7CkBAIC03MjAsOSArNzIwLDkgQEAKIAlpZiAocmV0ID09IFBNX0VORF9PRl9CVUZGRVIpCiAJCXJldCA9IDA7CiAJLyogZG9uJ3QgbmVlZCBtbWFwX3NlbSBmb3IgdGhlc2UsIGJ1dCB0aGlzIGxvb2tzIGNsZWFuZXIgKi8KLQkqcHBvcyArPSAoY2hhciAqKXBtLm91dCAtIGJ1ZjsKKwkqcHBvcyArPSAoY2hhciBfX3VzZXIgKilwbS5vdXQgLSBidWY7CiAJaWYgKCFyZXQpCi0JCXJldCA9IChjaGFyICopcG0ub3V0IC0gYnVmOworCQlyZXQgPSAoY2hhciBfX3VzZXIgKilwbS5vdXQgLSBidWY7CiAKIG91dF9wYWdlczoKIAlmb3IgKDsgcGFnZWNvdW50OyBwYWdlY291bnQtLSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCAzNDNlYTEyLi44NjM0NjRkIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mZHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtNDksNyArNTAsNyBAQAogCWVsc2UKIAkJYnl0ZXMgKz0ga29ianNpemUobW0pOwogCQotCWlmIChjdXJyZW50LT5mcyAmJiBhdG9taWNfcmVhZCgmY3VycmVudC0+ZnMtPmNvdW50KSA+IDEpCisJaWYgKGN1cnJlbnQtPmZzICYmIGN1cnJlbnQtPmZzLT51c2VycyA+IDEpCiAJCXNieXRlcyArPSBrb2Jqc2l6ZShjdXJyZW50LT5mcyk7CiAJZWxzZQogCQlieXRlcyArPSBrb2Jqc2l6ZShjdXJyZW50LT5mcyk7CkBAIC0xMzYsMTQgKzEzNywxNCBAQAogCX0KIAogCXNlcV9wcmludGYobSwKLQkJICAgIiUwOGx4LSUwOGx4ICVjJWMlYyVjICUwOGx4ICUwMng6JTAyeCAlbHUgJW4iLAorCQkgICAiJTA4bHgtJTA4bHggJWMlYyVjJWMgJTA4bGx4ICUwMng6JTAyeCAlbHUgJW4iLAogCQkgICB2bWEtPnZtX3N0YXJ0LAogCQkgICB2bWEtPnZtX2VuZCwKIAkJICAgZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAogCQkgICBmbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAogCQkgICBmbGFncyAmIFZNX0VYRUMgPyAneCcgOiAnLScsCiAJCSAgIGZsYWdzICYgVk1fTUFZU0hBUkUgPyBmbGFncyAmIFZNX1NIQVJFRCA/ICdTJyA6ICdzJyA6ICdwJywKLQkJICAgdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQsCiAJCSAgIE1BSk9SKGRldiksIE1JTk9SKGRldiksIGlubywgJmxlbik7CiAKIAlpZiAoZmlsZSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy91cHRpbWUuYyBiL2ZzL3Byb2MvdXB0aW1lLmMKaW5kZXggZGYyNmFhOC4uMGMxMGEwYiAxMDA2NDQKLS0tIGEvZnMvcHJvYy91cHRpbWUuYworKysgYi9mcy9wcm9jL3VwdGltZS5jCkBAIC0xLDQ1ICsxLDQzIEBACisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KIAotc3RhdGljIGludCBwcm9jX2NhbGNfbWV0cmljcyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgaW50IGxlbikKLXsKLQlpZiAobGVuIDw9IG9mZiArIGNvdW50KQotCQkqZW9mID0gMTsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCWxlbiAtPSBvZmY7Ci0JaWYgKGxlbiA+IGNvdW50KQotCQlsZW4gPSBjb3VudDsKLQlpZiAobGVuIDwgMCkKLQkJbGVuID0gMDsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IHVwdGltZV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCSAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgdXB0aW1lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMgaWRsZTsKLQlpbnQgbGVuOwogCWNwdXRpbWVfdCBpZGxldGltZSA9IGNwdXRpbWVfYWRkKGluaXRfdGFzay51dGltZSwgaW5pdF90YXNrLnN0aW1lKTsKIAogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOwogCW1vbm90b25pY190b19ib290YmFzZWQoJnVwdGltZSk7CiAJY3B1dGltZV90b190aW1lc3BlYyhpZGxldGltZSwgJmlkbGUpOwotCWxlbiA9IHNwcmludGYocGFnZSwgIiVsdS4lMDJsdSAlbHUuJTAybHVcbiIsCisJc2VxX3ByaW50ZihtLCAiJWx1LiUwMmx1ICVsdS4lMDJsdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nKSB1cHRpbWUudHZfc2VjLAogCQkJKHVwdGltZS50dl9uc2VjIC8gKE5TRUNfUEVSX1NFQyAvIDEwMCkpLAogCQkJKHVuc2lnbmVkIGxvbmcpIGlkbGUudHZfc2VjLAogCQkJKGlkbGUudHZfbnNlYyAvIChOU0VDX1BFUl9TRUMgLyAxMDApKSk7Ci0JcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGxlbik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdXB0aW1lX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdXB0aW1lX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVwdGltZV9wcm9jX2ZvcHMgPSB7CisJLm9wZW4JCT0gdXB0aW1lX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcHJvY191cHRpbWVfaW5pdCh2b2lkKQogewotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInVwdGltZSIsIDAsIE5VTEwsIHVwdGltZV9yZWFkX3Byb2MsIE5VTEwpOworCXByb2NfY3JlYXRlKCJ1cHRpbWUiLCAwLCBOVUxMLCAmdXB0aW1lX3Byb2NfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChwcm9jX3VwdGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvaW5vZGUuYyBiL2ZzL3FueDQvaW5vZGUuYwppbmRleCAyYWFkMTA0Li5mZTFmMGYzIDEwMDY0NAotLS0gYS9mcy9xbng0L2lub2RlLmMKKysrIGIvZnMvcW54NC9pbm9kZS5jCkBAIC0yODIsNiArMjgyLDcgQEAKIHN0YXRpYyBpbnQgcW54NF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlsb2NrX2tlcm5lbCgpOwogCkBAIC0yOTEsNiArMjkyLDggQEAKIAlidWYtPmZfYmZyZWUgICA9IHFueDRfY291bnRfZnJlZV9ibG9ja3Moc2IpOwogCWJ1Zi0+Zl9iYXZhaWwgID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9uYW1lbGVuID0gUU5YNF9OQU1FX01BWDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIApkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKaW5kZXggMmNhOTY3YS4uNjA3YzU3OSAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvZHF1b3QuYworKysgYi9mcy9xdW90YS9kcXVvdC5jCkBAIC04MjMsNyArODIzLDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7CiAJCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggOTk1ZWYxZC4uZWJiMmM0MSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtNTksNyArNTksNiBAQAogICovCiBpbnQgcmFtZnNfbm9tbXVfZXhwYW5kX2Zvcl9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNpemVfdCBuZXdzaXplKQogewotCXN0cnVjdCBwYWdldmVjIGxydV9wdmVjOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzLCB4cGFnZXMsIGxvb3AsIGxpbWl0OwogCXN0cnVjdCBwYWdlICpwYWdlczsKIAl1bnNpZ25lZCBvcmRlcjsKQEAgLTEwMiwyNCArMTAxLDIwIEBACiAJbWVtc2V0KGRhdGEsIDAsIG5ld3NpemUpOwogCiAJLyogYXR0YWNoIGFsbCB0aGUgcGFnZXMgdG8gdGhlIGlub2RlJ3MgYWRkcmVzcyBzcGFjZSAqLwotCXBhZ2V2ZWNfaW5pdCgmbHJ1X3B2ZWMsIDApOwogCWZvciAobG9vcCA9IDA7IGxvb3AgPCBucGFnZXM7IGxvb3ArKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzICsgbG9vcDsKIAotCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShwYWdlLCBpbm9kZS0+aV9tYXBwaW5nLCBsb29wLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIGlub2RlLT5pX21hcHBpbmcsIGxvb3AsCisJCQkJCUdGUF9LRVJORUwpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gYWRkX2Vycm9yOwogCi0JCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBwYWdlKSkKLQkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKLQogCQkvKiBwcmV2ZW50IHRoZSBwYWdlIGZyb20gYmVpbmcgZGlzY2FyZGVkIG9uIG1lbW9yeSBwcmVzc3VyZSAqLwogCQlTZXRQYWdlRGlydHkocGFnZSk7CiAKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJfQogCi0JcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAlyZXR1cm4gMDsKIAogIGZzaXplX2V4Y2VlZGVkOgpAQCAtMTI4LDEwICsxMjMsOCBAQAogCXJldHVybiAtRUZCSUc7CiAKICBhZGRfZXJyb3I6Ci0JcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKLQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXMgKyBsb29wKTsKLQlmb3IgKGxvb3ArKzsgbG9vcCA8IG5wYWdlczsgbG9vcCsrKQotCQlfX2ZyZWVfcGFnZShwYWdlcyArIGxvb3ApOworCXdoaWxlIChsb29wIDwgbnBhZ2VzKQorCQlfX2ZyZWVfcGFnZShwYWdlcyArIGxvb3ArKyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvaW5vZGUuYyBiL2ZzL3JhbWZzL2lub2RlLmMKaW5kZXggYjdlNmFjNy4uYTQwNGZiOCAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvaW5vZGUuYworKysgYi9mcy9yYW1mcy9pbm9kZS5jCkBAIC0zMywxMiArMzMsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qIHNvbWUgcmFuZG9tIG51bWJlciAqLwogI2RlZmluZSBSQU1GU19NQUdJQwkweDg1ODQ1OGY2CiAKKyNkZWZpbmUgUkFNRlNfREVGQVVMVF9NT0RFCTA3NTUKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHJhbWZzX29wczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByYW1mc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIApAQCAtMTU4LDEyICsxNjEsNzUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyByYW1mc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCisJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKIAorc3RydWN0IHJhbWZzX21vdW50X29wdHMgeworCXVtb2RlX3QgbW9kZTsKK307CisKK2VudW0geworCU9wdF9tb2RlLAorCU9wdF9lcnIKK307CisKK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKKwl7T3B0X21vZGUsICJtb2RlPSVvIn0sCisJe09wdF9lcnIsIE5VTEx9Cit9OworCitzdHJ1Y3QgcmFtZnNfZnNfaW5mbyB7CisJc3RydWN0IHJhbWZzX21vdW50X29wdHMgbW91bnRfb3B0czsKK307CisKK3N0YXRpYyBpbnQgcmFtZnNfcGFyc2Vfb3B0aW9ucyhjaGFyICpkYXRhLCBzdHJ1Y3QgcmFtZnNfbW91bnRfb3B0cyAqb3B0cykKK3sKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IG9wdGlvbjsKKwlpbnQgdG9rZW47CisJY2hhciAqcDsKKworCW9wdHMtPm1vZGUgPSBSQU1GU19ERUZBVUxUX01PREU7CisKKwl3aGlsZSAoKHAgPSBzdHJzZXAoJmRhdGEsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqcCkKKwkJCWNvbnRpbnVlOworCisJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgdG9rZW5zLCBhcmdzKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9tb2RlOgorCQkJaWYgKG1hdGNoX29jdGFsKCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCW9wdHMtPm1vZGUgPSBvcHRpb24gJiBTX0lBTExVR087CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX0VSUiAicmFtZnM6IGJhZCBtb3VudCBvcHRpb246ICVzXG4iLCBwKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcmFtZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgdm9pZCAqIGRhdGEsIGludCBzaWxlbnQpCiB7Ci0Jc3RydWN0IGlub2RlICogaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSAqIHJvb3Q7CisJc3RydWN0IHJhbWZzX2ZzX2luZm8gKmZzaTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCWludCBlcnI7CisKKwlzYXZlX21vdW50X29wdGlvbnMoc2IsIGRhdGEpOworCisJZnNpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhbWZzX2ZzX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZzaSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCXNiLT5zX2ZzX2luZm8gPSBmc2k7CisKKwllcnIgPSByYW1mc19wYXJzZV9vcHRpb25zKGRhdGEsICZmc2ktPm1vdW50X29wdHMpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKIAogCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CkBAIC0xNzEsMTcgKzIzNywyMyBAQAogCXNiLT5zX21hZ2ljID0gUkFNRlNfTUFHSUM7CiAJc2ItPnNfb3AgPSAmcmFtZnNfb3BzOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDE7Ci0JaW5vZGUgPSByYW1mc19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCAwNzU1LCAwKTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpbm9kZSA9IHJhbWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IGZzaS0+bW91bnRfb3B0cy5tb2RlLCAwKTsKKwlpZiAoIWlub2RlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CiAKIAlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKIAlpZiAoIXJvb3QpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CiAJfQogCXNiLT5zX3Jvb3QgPSByb290OwogCXJldHVybiAwOworZmFpbDoKKwlrZnJlZShmc2kpOworCWlwdXQoaW5vZGUpOworCXJldHVybiBlcnI7CiB9CiAKIGludCByYW1mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCkBAIC0xOTcsMTAgKzI2OSwxNiBAQAogCQkJICAgIG1udCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJhbWZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlrZnJlZShzYi0+c19mc19pbmZvKTsKKwlraWxsX2xpdHRlcl9zdXBlcihzYik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSByYW1mc19mc190eXBlID0gewogCS5uYW1lCQk9ICJyYW1mcyIsCiAJLmdldF9zYgkJPSByYW1mc19nZXRfc2IsCi0JLmtpbGxfc2IJPSBraWxsX2xpdHRlcl9zdXBlciwKKwkua2lsbF9zYgk9IHJhbWZzX2tpbGxfc2IsCiB9Owogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJvb3Rmc19mc190eXBlID0gewogCS5uYW1lCQk9ICJyb290ZnMiLApkaWZmIC0tZ2l0IGEvZnMvcmVhZF93cml0ZS5jIGIvZnMvcmVhZF93cml0ZS5jCmluZGV4IDQwMGZlODEuLjZkNWQ4ZmYgMTAwNjQ0Ci0tLSBhL2ZzL3JlYWRfd3JpdGUuYworKysgYi9mcy9yZWFkX3dyaXRlLmMKQEAgLTczMSw2ICs3MzEsNTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitTWVNDQUxMX0RFRklORTUocHJlYWR2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCisJCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHUzMiwgcG9zX2hpZ2gsIHUzMiwgcG9zX2xvdykKK3sKKwlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcG9zX2hpZ2ggPDwgMzIpIHwgcG9zX2xvdzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzc2l6ZV90IHJldCA9IC1FQkFERjsKKwlpbnQgZnB1dF9uZWVkZWQ7CisKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWxlID0gZmdldF9saWdodChmZCwgJmZwdXRfbmVlZGVkKTsKKwlpZiAoZmlsZSkgeworCQlyZXQgPSAtRVNQSVBFOworCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUFJFQUQpCisJCQlyZXQgPSB2ZnNfcmVhZHYoZmlsZSwgdmVjLCB2bGVuLCAmcG9zKTsKKwkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJfQorCisJaWYgKHJldCA+IDApCisJCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOworCWluY19zeXNjcihjdXJyZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitTWVNDQUxMX0RFRklORTUocHdyaXRldiwgdW5zaWduZWQgbG9uZywgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKiwgdmVjLAorCQl1bnNpZ25lZCBsb25nLCB2bGVuLCB1MzIsIHBvc19oaWdoLCB1MzIsIHBvc19sb3cpCit7CisJbG9mZl90IHBvcyA9ICgobG9mZl90KXBvc19oaWdoIDw8IDMyKSB8IHBvc19sb3c7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3NpemVfdCByZXQgPSAtRUJBREY7CisJaW50IGZwdXRfbmVlZGVkOworCisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKGZpbGUpIHsKKwkJcmV0ID0gLUVTUElQRTsKKwkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1BXUklURSkKKwkJCXJldCA9IHZmc193cml0ZXYoZmlsZSwgdmVjLCB2bGVuLCAmcG9zKTsKKwkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJfQorCisJaWYgKHJldCA+IDApCisJCWFkZF93Y2hhcihjdXJyZW50LCByZXQpOworCWluY19zeXNjdyhjdXJyZW50KTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdCBkb19zZW5kZmlsZShpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIGxvZmZfdCAqcHBvcywKIAkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90IG1heCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL0tjb25maWcgYi9mcy9yZWlzZXJmcy9LY29uZmlnCmluZGV4IDk0OWI4YzYuLjUxM2Y0MzEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL0tjb25maWcKKysrIGIvZnMvcmVpc2VyZnMvS2NvbmZpZwpAQCAtMSw1ICsxLDYgQEAKIGNvbmZpZyBSRUlTRVJGU19GUwogCXRyaXN0YXRlICJSZWlzZXJmcyBzdXBwb3J0IgorCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFN0b3JlcyBub3QganVzdCBmaWxlbmFtZXMgYnV0IHRoZSBmaWxlcyB0aGVtc2VsdmVzIGluIGEgYmFsYW5jZWQKIAkgIHRyZWUuICBVc2VzIGpvdXJuYWxsaW5nLgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQppbmRleCAwZWI3YWMwLi43YzVhYjYzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9NYWtlZmlsZQorKysgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQpAQCAtNywxMCArNywxMCBAQAogcmVpc2VyZnMtb2JqcyA6PSBiaXRtYXAubyBkb19iYWxhbi5vIG5hbWVpLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gZml4X25vZGUubyBcCiAJCSBzdXBlci5vIHByaW50cy5vIG9iamVjdGlkLm8gbGJhbGFuY2UubyBpYmFsYW5jZS5vIHN0cmVlLm8gXAogCQkgaGFzaGVzLm8gdGFpbF9jb252ZXJzaW9uLm8gam91cm5hbC5vIHJlc2l6ZS5vIFwKLQkJIGl0ZW1fb3BzLm8gaW9jdGwubyBwcm9jZnMubworCQkgaXRlbV9vcHMubyBpb2N0bC5vIHByb2Nmcy5vIHhhdHRyLm8KIAogaWZlcSAoJChDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIpLHkpCi1yZWlzZXJmcy1vYmpzICs9IHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3RydXN0ZWQubworcmVpc2VyZnMtb2JqcyArPSB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vCiBlbmRpZgogCiBpZmVxICgkKENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSkseSkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL1JFQURNRSBiL2ZzL3JlaXNlcmZzL1JFQURNRQppbmRleCA5MGUxNjcwLi4xNGU4YzlkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9SRUFETUUKKysrIGIvZnMvcmVpc2VyZnMvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotW0xJQ0VOU0lOR10gCitbTElDRU5TSU5HXQogCiBSZWlzZXJGUyBpcyBoZXJlYnkgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsCiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC0zMSw3ICszMSw3IEBACiBpdCB3cm9uZ2x5LCBhbmQgUmljaGFyZCBTdGFsbG1hbiBhZ3JlZXMgd2l0aCBtZSwgd2hlbiBjYXJlZnVsbHkgcmVhZAogeW91IGNhbiBzZWUgdGhhdCB0aG9zZSByZXN0cmljdGlvbnMgb24gYWRkaXRpb25hbCB0ZXJtcyBkbyBub3QgYXBwbHkKIHRvIHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0LCBhbmQgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzaGFsbAotZ292ZXJuIGZvciB0aGlzIGxpY2Vuc2UuICAKK2dvdmVybiBmb3IgdGhpcyBsaWNlbnNlLgogCiBGaW5hbGx5LCBub3RoaW5nIGluIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBhbGxvdyB5b3UgdG8KIGZhaWwgdG8gZmFpcmx5IGNyZWRpdCBtZSwgb3IgdG8gcmVtb3ZlIG15IGNyZWRpdHMsIHdpdGhvdXQgbXkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKaW5kZXggZjMyZDE0Mi4uZTcxNjE2MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvYml0bWFwLmMKKysrIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKQEAgLTQwLDggKzQwLDggQEAKIAogI2RlZmluZSBTRVRfT1BUSU9OKG9wdG5hbWUpIFwKICAgIGRvIHsgXAotICAgICAgICByZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmczogb3B0aW9uIFwiJXNcIiBpcyBzZXQiLCAjb3B0bmFtZSk7IFwKLSAgICAgICAgc2V0X2JpdChfQUxMT0NfICMjIG9wdG5hbWUgLCAmU0JfQUxMT0NfT1BUUyhzKSk7IFwKKwlyZWlzZXJmc19pbmZvKHMsICJibG9jayBhbGxvY2F0b3Igb3B0aW9uIFwiJXNcIiBpcyBzZXQiLCAjb3B0bmFtZSk7IFwKKwlzZXRfYml0KF9BTExPQ18gIyMgb3B0bmFtZSAsICZTQl9BTExPQ19PUFRTKHMpKTsgXAogICAgIH0gd2hpbGUoMCkKICNkZWZpbmUgVEVTVF9PUFRJT04ob3B0bmFtZSwgcykgXAogICAgIHRlc3RfYml0KF9BTExPQ18gIyMgb3B0bmFtZSAsICZTQl9BTExPQ19PUFRTKHMpKQpAQCAtNjQsOSArNjQsOSBAQAogCXVuc2lnbmVkIGludCBibWFwX2NvdW50ID0gcmVpc2VyZnNfYm1hcF9jb3VudChzKTsKIAogCWlmIChibG9jayA9PSAwIHx8IGJsb2NrID49IFNCX0JMT0NLX0NPVU5UKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwMTA6IGlzX3JldXNhYmxlOiBibG9jayBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICVsdSAoJXUpIiwKLQkJCQkgYmxvY2ssIFNCX0JMT0NLX0NPVU5UKHMpKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMTAiLAorCQkJICAgICAgICJibG9jayBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICVsdSAoJXUpIiwKKwkJCSAgICAgICBibG9jaywgU0JfQkxPQ0tfQ09VTlQocykpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTc5LDMxICs3OSwzMCBAQAogCQliX2Jsb2NrbnJfdCBibWFwMSA9IFJFSVNFUkZTX1NCKHMpLT5zX3NiaC0+Yl9ibG9ja25yICsgMTsKIAkJaWYgKGJsb2NrID49IGJtYXAxICYmCiAJCSAgICBibG9jayA8PSBibWFwMSArIGJtYXBfY291bnQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzOiA0MDE5OiBpc19yZXVzYWJsZTogIgotCQkJCQkgImJpdG1hcCBibG9jayAlbHUoJXUpIGNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCi0JCQkJCSBibG9jaywgYm1hcF9jb3VudCk7CisJCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDAxOSIsICJiaXRtYXAgYmxvY2sgJWx1KCV1KSAiCisJCQkJICAgICAgICJjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAorCQkJCSAgICAgICBibG9jaywgYm1hcF9jb3VudCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChvZmZzZXQgPT0gMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnM6IDQwMjA6IGlzX3JldXNhYmxlOiAiCi0JCQkJCSAiYml0bWFwIGJsb2NrICVsdSgldSkgY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKLQkJCQkJIGJsb2NrLCBibWFwX2NvdW50KTsKKwkJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDIwIiwgImJpdG1hcCBibG9jayAlbHUoJXUpICIKKwkJCQkgICAgICAgImNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCisJCQkJICAgICAgIGJsb2NrLCBibWFwX2NvdW50KTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCiAJaWYgKGJtYXAgPj0gYm1hcF9jb3VudCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJ2cy00MDMwOiBpc19yZXVzYWJsZTogdGhlcmUgaXMgbm8gc28gbWFueSBiaXRtYXAgYmxvY2tzOiAiCi0JCQkJICJibG9jaz0lbHUsIGJpdG1hcF9ucj0ldSIsIGJsb2NrLCBibWFwKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMzAiLCAiYml0bWFwIGZvciByZXF1ZXN0ZWQgYmxvY2sgIgorCQkJICAgICAgICJpcyBvdXQgb2YgcmFuZ2U6IGJsb2NrPSVsdSwgYml0bWFwX25yPSV1IiwKKwkJCSAgICAgICBibG9jaywgYm1hcCk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChiaXRfdmFsdWUgPT0gMCAmJiBibG9jayA9PSBTQl9ST09UX0JMT0NLKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwNTA6IGlzX3JldXNhYmxlOiB0aGlzIGlzIHJvb3QgYmxvY2sgKCV1KSwgIgotCQkJCSAiaXQgbXVzdCBiZSBidXN5IiwgU0JfUk9PVF9CTE9DSyhzKSk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDUwIiwgInRoaXMgaXMgcm9vdCBibG9jayAoJXUpLCAiCisJCQkgICAgICAgIml0IG11c3QgYmUgYnVzeSIsIFNCX1JPT1RfQkxPQ0socykpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE1NCw4ICsxNTMsOCBAQAogLyogLSBJIG1lYW4gYGEgd2luZG93IG9mIHplcm8gYml0cycgYXMgaW4gZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbiAtIFphbS4gKi8KIAogCWlmICghYmkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiTlVMTCBiaXRtYXAgaW5mbyBwb2ludGVyIGZvciBiaXRtYXAgJWQiLAotCQkJCSBibWFwX24pOworCQlyZWlzZXJmc19lcnJvcihzLCAiamRtLTQwNTUiLCAiTlVMTCBiaXRtYXAgaW5mbyBwb2ludGVyICIKKwkJCSAgICAgICAiZm9yIGJpdG1hcCAlZCIsIGJtYXBfbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDAwLDExICszOTksOCBAQAogCWdldF9iaXRfYWRkcmVzcyhzLCBibG9jaywgJm5yLCAmb2Zmc2V0KTsKIAogCWlmIChuciA+PSByZWlzZXJmc19ibWFwX2NvdW50KHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTQwNzU6IHJlaXNlcmZzX2ZyZWVfYmxvY2s6ICIKLQkJCQkgImJsb2NrICVsdSBpcyBvdXQgb2YgcmFuZ2Ugb24gJXMgIgotCQkJCSAiKG5yPSV1LG1heD0ldSkiLCBibG9jaywKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIG5yLAotCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHMpKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwNzUiLCAiYmxvY2sgJWx1IGlzIG91dCBvZiByYW5nZSIsCisJCQkgICAgICAgYmxvY2spOwogCQlyZXR1cm47CiAJfQogCkBAIC00MTYsOSArNDEyLDggQEAKIAogCS8qIGNsZWFyIGJpdCBmb3IgdGhlIGdpdmVuIGJsb2NrIGluIGJpdCBtYXAgKi8KIAlpZiAoIXJlaXNlcmZzX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChvZmZzZXQsIGJtYmgtPmJfZGF0YSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtNDA4MDogcmVpc2VyZnNfZnJlZV9ibG9jazogIgotCQkJCSAiZnJlZV9ibG9jayAoJXM6JWx1KVtkZXY6YmxvY2tucl06IGJpdCBhbHJlYWR5IGNsZWFyZWQiLAotCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgYmxvY2spOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDA4MCIsCisJCQkgICAgICAgImJsb2NrICVsdTogYml0IGFscmVhZHkgY2xlYXJlZCIsIGJsb2NrKTsKIAl9CiAJYXBiaVtucl0uZnJlZV9jb3VudCsrOwogCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgYm1iaCk7CkBAIC00NDUsNyArNDQwLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGJsb2NrID4gc2JfYmxvY2tfY291bnQoUkVJU0VSRlNfU0IocyktPnNfcnMpKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLCAiYml0bWFwLTQwNzIiLAorCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgImJpdG1hcC00MDcyIiwKIAkJCSAgICAgICAiVHJ5aW5nIHRvIGZyZWUgYmxvY2sgb3V0c2lkZSBmaWxlIHN5c3RlbSAiCiAJCQkgICAgICAgImJvdW5kYXJpZXMgKCVsdSA+ICVsdSkiLAogCQkJICAgICAgIGJsb2NrLCBzYl9ibG9ja19jb3VudChSRUlTRVJGU19TQihzKS0+c19ycykpOwpAQCAtNDc3LDkgKzQ3Miw4IEBACiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJaWYgKGVpLT5pX3ByZWFsbG9jX2NvdW50IDwgMCkKLQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkgInphbS00MDAxOiVzOiBpbm9kZSBoYXMgbmVnYXRpdmUgcHJlYWxsb2MgYmxvY2tzIGNvdW50LiIsCi0JCQkJIF9fZnVuY19fKTsKKwkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ6YW0tNDAwMSIsCisJCQkgICAgICAgImlub2RlIGhhcyBuZWdhdGl2ZSBwcmVhbGxvYyBibG9ja3MgY291bnQuIik7CiAjZW5kaWYKIAl3aGlsZSAoZWktPmlfcHJlYWxsb2NfY291bnQgPiAwKSB7CiAJCXJlaXNlcmZzX2ZyZWVfcHJlYWxsb2NfYmxvY2sodGgsIGlub2RlLCBlaS0+aV9wcmVhbGxvY19ibG9jayk7CkBAIC01MTUsOSArNTA5LDkgQEAKIAkJCQlpX3ByZWFsbG9jX2xpc3QpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQlpZiAoIWVpLT5pX3ByZWFsbG9jX2NvdW50KSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgInphbS00MDAxOiVzOiBpbm9kZSBpcyBpbiBwcmVhbGxvYyBsaXN0IGJ1dCBoYXMgbm8gcHJlYWxsb2NhdGVkIGJsb2Nrcy4iLAotCQkJCQkgX19mdW5jX18pOworCQkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ6YW0tNDAwMSIsCisJCQkJICAgICAgICJpbm9kZSBpcyBpbiBwcmVhbGxvYyBsaXN0IGJ1dCBoYXMgIgorCQkJCSAgICAgICAibm8gcHJlYWxsb2NhdGVkIGJsb2Nrcy4iKTsKIAkJfQogI2VuZGlmCiAJCV9fZGlzY2FyZF9wcmVhbGxvYyh0aCwgZWkpOwpAQCAtNjMxLDEyICs2MjUsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiemFtLTQwMDE6ICVzIDogdW5rbm93biBvcHRpb24gLSAlcyIsCi0JCQkJIF9fZnVuY19fLCB0aGlzX2NoYXIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJ6YW0tNDAwMSIsICJ1bmtub3duIG9wdGlvbiAtICVzIiwKKwkJCQkgdGhpc19jaGFyKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JcmVpc2VyZnNfd2FybmluZyhzLCAiYWxsb2NhdG9yIG9wdGlvbnMgPSBbJTA4eF1cbiIsIFNCX0FMTE9DX09QVFMocykpOworCXJlaXNlcmZzX2luZm8ocywgImFsbG9jYXRvciBvcHRpb25zID0gWyUwOHhdXG4iLCBTQl9BTExPQ19PUFRTKHMpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyMSw3ICsxMjE1LDkgQEAKIAl1bnNpZ25lZCBsb25nICpjdXIgPSAodW5zaWduZWQgbG9uZyAqKShiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSk7CiAKIAkvKiBUaGUgZmlyc3QgYml0IG11c3QgQUxXQVlTIGJlIDEgKi8KLQlCVUdfT04oIXJlaXNlcmZzX3Rlc3RfbGVfYml0KDAsICh1bnNpZ25lZCBsb25nICopYmgtPmJfZGF0YSkpOworCWlmICghcmVpc2VyZnNfdGVzdF9sZV9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKiliaC0+Yl9kYXRhKSkKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJyZWlzZXJmcy0yMDI1IiwgImJpdG1hcCBibG9jayAlbHUgaXMgIgorCQkJICAgICAgICJjb3JydXB0ZWQ6IGZpcnN0IGJpdCBtdXN0IGJlIDEiLCBiaC0+Yl9ibG9ja25yKTsKIAogCWluZm8tPmZyZWVfY291bnQgPSAwOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kaXIuYyBiL2ZzL3JlaXNlcmZzL2Rpci5jCmluZGV4IGU2YjAzZDIuLjY3YTgwZDcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2Rpci5jCisrKyBiL2ZzL3JlaXNlcmZzL2Rpci5jCkBAIC00MSwxMCArNDEsMTAgQEAKIAogI2RlZmluZSBzdG9yZV9paCh3aGVyZSx3aGF0KSBjb3B5X2l0ZW1faGVhZCAod2hlcmUsIHdoYXQpCiAKLS8vCi1zdGF0aWMgaW50IHJlaXNlcmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCitpbnQgcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpkaXJlbnQsCisJCQkgICBmaWxsZGlyX3QgZmlsbGRpciwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY3B1X2tleSBwb3Nfa2V5OwkvKiBrZXkgb2YgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0b3J5IChrZXkgb2YgZGlyZWN0b3J5IGVudHJ5KSAqLwogCUlOSVRJQUxJWkVfUEFUSChwYXRoX3RvX2VudHJ5KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtNjQsMTMgKzY0LDkgQEAKIAogCS8qIGZvcm0ga2V5IGZvciBzZWFyY2ggdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5IHVzaW5nIGZfcG9zIGZpZWxkIG9mCiAJICAgZmlsZSBzdHJ1Y3R1cmUgKi8KLQltYWtlX2NwdV9rZXkoJnBvc19rZXksIGlub2RlLAotCQkgICAgIChmaWxwLT5mX3BvcykgPyAoZmlscC0+Zl9wb3MpIDogRE9UX09GRlNFVCwgVFlQRV9ESVJFTlRSWSwKLQkJICAgICAzKTsKKwltYWtlX2NwdV9rZXkoJnBvc19rZXksIGlub2RlLCAqcG9zID86IERPVF9PRkZTRVQsIFRZUEVfRElSRU5UUlksIDMpOwogCW5leHRfcG9zID0gY3B1X2tleV9rX29mZnNldCgmcG9zX2tleSk7CiAKLQkvKiAgcmVpc2VyZnNfd2FybmluZyAoaW5vZGUtPmlfc2IsICJyZWlzZXJmc19yZWFkZGlyIDE6IGZfcG9zID0gJUxkIiwgZmlscC0+Zl9wb3MpOyAqLwotCiAJcGF0aF90b19lbnRyeS5yZWFkYSA9IFBBVEhfUkVBREE7CiAJd2hpbGUgKDEpIHsKIAkgICAgICByZXNlYXJjaDoKQEAgLTE0NCw3ICsxNDAsNyBAQAogCQkJCS8qIElnbm9yZSB0aGUgLnJlaXNlcmZzX3ByaXYgZW50cnkgKi8KIAkJCQlpZiAocmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSAmJgogCQkJCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkJCSAgICBmaWxwLT5mX3BhdGguZGVudHJ5ID09IGlub2RlLT5pX3NiLT5zX3Jvb3QgJiYKKwkJCQkgICAgZGVudHJ5ID09IGlub2RlLT5pX3NiLT5zX3Jvb3QgJiYKIAkJCQkgICAgUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QgJiYKIAkJCQkgICAgUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QtPmRfaW5vZGUKIAkJCQkgICAgJiYgZGVoX29iamVjdGlkKGRlaCkgPT0KQEAgLTE1Niw3ICsxNTIsNyBAQAogCQkJCX0KIAogCQkJCWRfb2ZmID0gZGVoX29mZnNldChkZWgpOwotCQkJCWZpbHAtPmZfcG9zID0gZF9vZmY7CisJCQkJKnBvcyA9IGRfb2ZmOwogCQkJCWRfaW5vID0gZGVoX29iamVjdGlkKGRlaCk7CiAJCQkJaWYgKGRfcmVjbGVuIDw9IDMyKSB7CiAJCQkJCWxvY2FsX2J1ZiA9IHNtYWxsX2J1ZjsKQEAgLTIyMywxNSArMjE5LDIxIEBACiAKIAl9CQkJLyogd2hpbGUgKi8KIAotICAgICAgZW5kOgotCWZpbHAtPmZfcG9zID0gbmV4dF9wb3M7CitlbmQ6CisJKnBvcyA9IG5leHRfcG9zOwogCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7CiAJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aF90b19lbnRyeSk7Ci0gICAgICBvdXQ6CitvdXQ6CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJlaXNlcmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwlyZXR1cm4gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGVudHJ5LCBkaXJlbnQsIGZpbGxkaXIsICZmaWxlLT5mX3Bvcyk7Cit9CisKIC8qIGNvbXBvc2UgZGlyZWN0b3J5IGl0ZW0gY29udGFpbmluZyAiLiIgYW5kICIuLiIgZW50cmllcyAoZW50cmllcyBhcmUKICAgIG5vdCBhbGlnbmVkIHRvIDQgYnl0ZSBib3VuZGFyeSkgKi8KIC8qIHRoZSBsYXN0IGZvdXIgcGFyYW1zIGFyZSBMRSAqLwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYyBiL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKaW5kZXggMmY4N2Y1Yi4uNGJlYjk2NCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYworKysgYi9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCkBAIC0yOSw2ICsyOSw0MyBAQAogCQkJCQkgICBpcyBpbnRlcnJ1cHRpbmcgZG9fYmFsYW5jZSAqLwogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X2xlZnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgID0gdGItPkxbMF07CisJYmktPmJpX3BhcmVudCAgID0gdGItPkZMWzBdOworCWJpLT5iaV9wb3NpdGlvbiA9IGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICA9IHRiLT5SWzBdOworCWJpLT5iaV9wYXJlbnQgICA9IHRiLT5GUlswXTsKKwliaS0+YmlfcG9zaXRpb24gPSBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luZm9faW5pdF90YlMwKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7CisJYmktPmJpX3BhcmVudCAgID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOworCWJpLT5iaV9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X2JoKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgID0gYmg7CisJYmktPmJpX3BhcmVudCAgID0gTlVMTDsKKwliaS0+YmlfcG9zaXRpb24gPSAwOworfQorCiBpbmxpbmUgdm9pZCBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eShzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKIAkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWcpCiB7CkBAIC0zOSwyMSArNzYsMjEgQEAKICNkZWZpbmUgZG9fYmFsYW5jZV9tYXJrX2ludGVybmFsX2RpcnR5IGRvX2JhbGFuY2VfbWFya19sZWFmX2RpcnR5CiAjZGVmaW5lIGRvX2JhbGFuY2VfbWFya19zYl9kaXJ0eSBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eQogCi0vKiBzdW1tYXJ5OiAKKy8qIHN1bW1hcnk6CiAgaWYgZGVsZXRpbmcgc29tZXRoaW5nICggdGItPmluc2VydF9zaXplWzBdIDwgMCApCiAgICByZXR1cm4oYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlKCkpOyAoZmxhZyBkIGhhbmRsZWQgaGVyZSkKICBlbHNlCiAgICBpZiBsbnVtIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIGxlZnQgbm9kZQogICAgaWYgcm51bSBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSByaWdodCBub2RlCiAgICBpZiBzbnVtMSBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBuZXcgbm9kZSBzMQotICAgaWYgc251bTIgaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgbmV3IG5vZGUgczIgCisgICBpZiBzbnVtMiBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBuZXcgbm9kZSBzMgogTm90ZSB0aGF0IGFsbCAqbnVtKiBjb3VudCBuZXcgaXRlbXMgYmVpbmcgY3JlYXRlZC4KIAogSXQgd291bGQgYmUgZWFzaWVyIHRvIHJlYWQgYmFsYW5jZV9sZWFmKCkgaWYgZWFjaCBvZiB0aGVzZSBzdW1tYXJ5CiBsaW5lcyB3YXMgYSBzZXBhcmF0ZSBwcm9jZWR1cmUgcmF0aGVyIHRoYW4gYmVpbmcgaW5saW5lZC4gIEkgdGhpbmsKIHRoYXQgdGhlcmUgYXJlIG1hbnkgcGFzc2FnZXMgaGVyZSBhbmQgaW4gYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlKCkgaW4KIHdoaWNoIHR3byBjYWxscyB0byBvbmUgcHJvY2VkdXJlIGNhbiByZXBsYWNlIHR3byBwYXNzYWdlcywgYW5kIGl0Ci1taWdodCBzYXZlIGNhY2hlIHNwYWNlIGFuZCBpbXByb3ZlIHNvZnR3YXJlIG1haW50ZW5hbmNlIGNvc3RzIHRvIGRvIHNvLiAgCittaWdodCBzYXZlIGNhY2hlIHNwYWNlIGFuZCBpbXByb3ZlIHNvZnR3YXJlIG1haW50ZW5hbmNlIGNvc3RzIHRvIGRvIHNvLgogCiBWbGFkaW1pciBtYWRlIHRoZSBwZXJjZXB0aXZlIGNvbW1lbnQgdGhhdCB3ZSBzaG91bGQgb2ZmbG9hZCBtb3N0IG9mCiB0aGUgZGVjaXNpb24gbWFraW5nIGluIHRoaXMgZnVuY3Rpb24gaW50byBmaXhfbm9kZXMvY2hlY2tfYmFsYW5jZSwgYW5kCkBAIC04Niw2ICsxMjMsNyBAQAogCSAgICAgICAiUEFQLTEyMDEwOiB0cmVlIGNhbiBub3QgYmUgZW1wdHkiKTsKIAogCWloID0gQl9OX1BJVEVNX0hFQUQodGJTMCwgaXRlbV9wb3MpOworCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAogCS8qIERlbGV0ZSBvciB0cnVuY2F0ZSB0aGUgaXRlbSAqLwogCkBAIC05NiwxMCArMTM0LDYgQEAKIAkJICAgICAgICJ2cy0xMjAxMzogbW9kZSBEZWxldGUsIGluc2VydCBzaXplICVkLCBpaCB0byBiZSBkZWxldGVkICVoIiwKIAkJICAgICAgIC10Yi0+aW5zZXJ0X3NpemVbMF0sIGloKTsKIAotCQliaS50YiA9IHRiOwotCQliaS5iaV9iaCA9IHRiUzA7Ci0JCWJpLmJpX3BhcmVudCA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCAwKTsKLQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOwogCQlsZWFmX2RlbGV0ZV9pdGVtcygmYmksIDAsIGl0ZW1fcG9zLCAxLCAtMSk7CiAKIAkJaWYgKCFpdGVtX3BvcyAmJiB0Yi0+Q0ZMWzBdKSB7CkBAIC0xMjEsMTAgKzE1NSw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNX0NVVDp7CQkvKiBjdXQgaXRlbSBpbiBTWzBdICovCi0JCQliaS50YiA9IHRiOwotCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJYmkuYmlfcGFyZW50ID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOwotCQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOwogCQkJaWYgKGlzX2RpcmVudHJ5X2xlX2loKGloKSkgewogCiAJCQkJLyogVUZTIHVubGluayBzZW1hbnRpY3MgYXJlIHN1Y2ggdGhhdCB5b3UgY2FuIG9ubHkgZGVsZXRlIG9uZSBkaXJlY3RvcnkgZW50cnkgYXQgYSB0aW1lLiAqLwpAQCAtMTUzLDggKzE4Myw4IEBACiAKIAlkZWZhdWx0OgogCQlwcmludF9jdXJfdGIoIjEyMDQwIik7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTEyMDQwOiBiYWxhbmNlX2xlYWZfd2hlbl9kZWxldGU6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIwNDAiLAorCQkJICAgICAgICJ1bmV4cGVjdGVkIG1vZGU6ICVzKCVkKSIsCiAJCQkgICAgICAgKGZsYWcgPT0KIAkJCQlNX1BBU1RFKSA/ICJQQVNURSIgOiAoKGZsYWcgPT0KIAkJCQkJCSAgICAgICBNX0lOU0VSVCkgPyAiSU5TRVJUIiA6CkBAIC0yNTgsMTUgKzI4OCwxNSBAQAogICAgICkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRiUzAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7Ci0JaW50IGl0ZW1fcG9zID0gUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKTsJLyogIGluZGV4IGludG8gdGhlIGFycmF5IG9mIGl0ZW0gaGVhZGVycyBpbiBTWzBdIAorCWludCBpdGVtX3BvcyA9IFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCk7CS8qICBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBpdGVtIGhlYWRlcnMgaW4gU1swXQogCQkJCQkJCSAgIG9mIHRoZSBhZmZlY3RlZCBpdGVtICovCiAJc3RydWN0IGJ1ZmZlcl9pbmZvIGJpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqU19uZXdbMl07CS8qIG5ldyBub2RlcyBhbGxvY2F0ZWQgdG8gaG9sZCB3aGF0IGNvdWxkIG5vdCBmaXQgaW50byBTICovCiAJaW50IHNudW1bMl07CQkvKiBudW1iZXIgb2YgaXRlbXMgdGhhdCB3aWxsIGJlIHBsYWNlZAogCQkJCSAgIGludG8gU19uZXcgKGluY2x1ZGVzIHBhcnRpYWxseSBzaGlmdGVkCiAJCQkJICAgaXRlbXMpICovCi0JaW50IHNieXRlc1syXTsJCS8qIGlmIGFuIGl0ZW0gaXMgcGFydGlhbGx5IHNoaWZ0ZWQgaW50byBTX25ldyB0aGVuIAotCQkJCSAgIGlmIGl0IGlzIGEgZGlyZWN0b3J5IGl0ZW0gCisJaW50IHNieXRlc1syXTsJCS8qIGlmIGFuIGl0ZW0gaXMgcGFydGlhbGx5IHNoaWZ0ZWQgaW50byBTX25ldyB0aGVuCisJCQkJICAgaWYgaXQgaXMgYSBkaXJlY3RvcnkgaXRlbQogCQkJCSAgIGl0IGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBmcm9tIHRoZSBpdGVtIHRoYXQgYXJlIHNoaWZ0ZWQgaW50byBTX25ldwogCQkJCSAgIGVsc2UKIAkJCQkgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGl0ZW0gdGhhdCBhcmUgc2hpZnRlZCBpbnRvIFNfbmV3CkBAIC0zMjUsMTEgKzM1NSw3IEBACiAJCQkJCSAgICAgICBpaF9pdGVtX2xlbihpaCkpOwogCiAJCQkJCS8qIEluc2VydCBuZXcgaXRlbSBpbnRvIExbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZMWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICAgIHJldF92YWwsIGloLCBib2R5LApAQCAtMzY5LDExICszOTUsNyBAQAogCQkJCQkgICAgbGVhZl9zaGlmdF9sZWZ0KHRiLCB0Yi0+bG51bVswXSAtIDEsCiAJCQkJCQkJICAgIHRiLT5sYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBMWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GTFswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCiAJCQkJCQkJICAgICByZXRfdmFsLCBpaCwgYm9keSwKQEAgLTQyOSwxMyArNDUxLDcgQEAKIAkJCQkJCQl9CiAKIAkJCQkJCQkvKiBBcHBlbmQgZ2l2ZW4gZGlyZWN0b3J5IGVudHJ5IHRvIGRpcmVjdG9yeSBpdGVtICovCi0JCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkJICAgIHRiLT5GTFswXTsKLQkJCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyCiAJCQkJCQkJICAgICgmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQpAQCAtNDQ5LDggKzQ2NSw3IEBACiAJCQkJCQkJLyogd2hlbiB3ZSBoYXZlIG1lcmdlIGRpcmVjdG9yeSBpdGVtLCBwb3NfaW5faXRlbSBoYXMgYmVlbiBjaGFuZ2VkIHRvbyAqLwogCiAJCQkJCQkJLyogcGFzdGUgbmV3IGRpcmVjdG9yeSBlbnRyeS4gMSBpcyBlbnRyeSBudW1iZXIgKi8KLQkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuCi0JCQkJCQkJCQkgICBiaV9iaCwKKwkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkJICAgbiArCiAJCQkJCQkJCQkgICBpdGVtX3BvcwogCQkJCQkJCQkJICAgLQpAQCAtNTI0LDEzICs1MzksNyBAQAogCQkJCQkJCQkJICAgICAodGJTMCwKIAkJCQkJCQkJCSAgICAgIGl0ZW1fcG9zKSkpOwogCQkJCQkJCS8qIEFwcGVuZCB0byBib2R5IG9mIGl0ZW0gaW4gTFswXSAqLwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJCSAgICB0Yi0+RkxbMF07Ci0JCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KQEAgLTY4MSwxMSArNjkwLDcgQEAKIAkJCQkJICAgIGxlYWZfc2hpZnRfbGVmdCh0YiwgdGItPmxudW1bMF0sCiAJCQkJCQkJICAgIHRiLT5sYnl0ZXMpOwogCQkJCQkvKiBBcHBlbmQgdG8gYm9keSBvZiBpdGVtIGluIExbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZMWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICAgIHJldF92YWwsCkBAIC02OTksNyArNzA0LDcgQEAKIAkJCQkJCQkgICBuICsgaXRlbV9wb3MgLQogCQkJCQkJCSAgIHJldF92YWwpOwogCQkJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgocGFzdGVkKSkKLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIG4gKwogCQkJCQkJCQkgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgIHJldF92YWwsCkBAIC03MjIsOCArNzI3LDkgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgkvKiBjYXNlcyBkIGFuZCB0ICovCi0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgIlBBUC0xMjEzMDogYmFsYW5jZV9sZWFmOiBsbnVtID4gMDogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMTMwIiwKKwkJCQkJICAgICAgICJsbnVtID4gMDogdW5leHBlY3RlZCBtb2RlOiAiCisJCQkJCSAgICAgICAiICVzKCVkKSIsCiAJCQkJCSAgICAgICAoZmxhZyA9PQogCQkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJCSBNX0NVVCkKQEAgLTc3NiwxMSArNzgyLDcgQEAKIAkJCQkJc2V0X2xlX2loX2tfb2Zmc2V0KGloLCBvZmZzZXQpOwogCQkJCQlwdXRfaWhfaXRlbV9sZW4oaWgsIHRiLT5yYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgcGFydCBvZiB0aGUgaXRlbSBpbnRvIFJbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQlpZiAoKG9sZF9sZW4gLSB0Yi0+cmJ5dGVzKSA+IHplcm9zX251bSkgewogCQkJCQkJcl96ZXJvc19udW1iZXIgPSAwOwogCQkJCQkJcl9ib2R5ID0KQEAgLTgxNywxMSArODE5LDcgQEAKIAkJCQkJCQkgICAgIHRiLT5ybnVtWzBdIC0gMSwKIAkJCQkJCQkgICAgIHRiLT5yYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBSWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GUlswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICAgIHRiLT5ybnVtWzBdIC0gMSwKQEAgLTg4MSwyMSArODc5LDE0IEBACiAJCQkJCQkJICAgIHBvc19pbl9pdGVtIC0KIAkJCQkJCQkgICAgZW50cnlfY291bnQgKwogCQkJCQkJCSAgICB0Yi0+cmJ5dGVzIC0gMTsKLQkJCQkJCQliaS50YiA9IHRiOwotCQkJCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCQkgICAgdGItPkZSWzBdOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLCAwLAogCQkJCQkJCSAgICAgcGFzdGVfZW50cnlfcG9zaXRpb24sCiAJCQkJCQkJICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0sCiAJCQkJCQkJICAgICBib2R5LCB6ZXJvc19udW0pOwogCQkJCQkJCS8qIHBhc3RlIGVudHJ5ICovCi0JCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLgotCQkJCQkJCQkJICAgYmlfYmgsCisJCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJCSAgIDAsCiAJCQkJCQkJCQkgICBwYXN0ZV9lbnRyeV9wb3NpdGlvbiwKIAkJCQkJCQkJCSAgIDEsCkBAIC0xMDE5LDEyICsxMDEwLDcgQEAKIAkJCQkJCSAgICAodGIsIHRiLT5DRlJbMF0sIDApOwogCiAJCQkJCQkvKiBBcHBlbmQgcGFydCBvZiBib2R5IGludG8gUlswXSAqLwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RlJbMF07Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCQlpZiAobl9yZW0gPiB6ZXJvc19udW0pIHsKIAkJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CiAJCQkJCQkJcl9ib2R5ID0KQEAgLTEwNzEsMTIgKzEwNTcsNyBAQAogCQkJCQkJCSAgICAgdGItPnJieXRlcyk7CiAJCQkJCS8qIGFwcGVuZCBpdGVtIGluIFJbMF0gKi8KIAkJCQkJaWYgKHBvc19pbl9pdGVtID49IDApIHsKLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCQkgICAgIGl0ZW1fcG9zIC0KIAkJCQkJCQkJICAgICBuICsKQEAgLTEwOTYsNyArMTA3Nyw3IEBACiAJCQkJCQkJICAgdGItPnJudW1bMF0pOwogCQkJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgocGFzdGVkKQogCQkJCQkgICAgJiYgcG9zX2luX2l0ZW0gPj0gMCkgewotCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLmJpX2JoLAorCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJICAgaXRlbV9wb3MgLQogCQkJCQkJCQkgICBuICsKIAkJCQkJCQkJICAgdGItPnJudW1bMF0sCkBAIC0xMTM2LDggKzExMTcsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CS8qIGNhc2VzIGQgYW5kIHQgKi8KLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjE3NTogYmFsYW5jZV9sZWFmOiBybnVtID4gMDogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIxNzUiLAorCQkJCSAgICAgICAicm51bSA+IDA6IHVuZXhwZWN0ZWQgbW9kZTogJXMoJWQpIiwKIAkJCQkgICAgICAgKGZsYWcgPT0KIAkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJIE1fQ1VUKSA/ICJDVVQiCkBAIC0xMTY3LDggKzExNDgsOCBAQAogCQkgICBub3Qgc2V0IGNvcnJlY3RseSAqLwogCQlpZiAodGItPkNGTFswXSkgewogCQkJaWYgKCF0Yi0+Q0ZSWzBdKQotCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJICAgICAgICJ2cy0xMjE5NTogYmFsYW5jZV9sZWFmOiBDRlIgbm90IGluaXRpYWxpemVkIik7CisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIxOTUiLAorCQkJCQkgICAgICAgIkNGUiBub3QgaW5pdGlhbGl6ZWQiKTsKIAkJCWNvcHlfa2V5KEJfTl9QREVMSU1fS0VZKHRiLT5DRkxbMF0sIHRiLT5sa2V5WzBdKSwKIAkJCQkgQl9OX1BERUxJTV9LRVkodGItPkNGUlswXSwgdGItPnJrZXlbMF0pKTsKIAkJCWRvX2JhbGFuY2VfbWFya19pbnRlcm5hbF9kaXJ0eSh0YiwgdGItPkNGTFswXSwgMCk7CkBAIC0xMjMyLDEwICsxMjEzLDcgQEAKIAkJCQkJcHV0X2loX2l0ZW1fbGVuKGloLCBzYnl0ZXNbaV0pOwogCiAJCQkJCS8qIEluc2VydCBwYXJ0IG9mIHRoZSBpdGVtIGludG8gU19uZXdbaV0gYmVmb3JlIDAtdGggaXRlbSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCiAJCQkJCWlmICgob2xkX2xlbiAtIHNieXRlc1tpXSkgPiB6ZXJvc19udW0pIHsKIAkJCQkJCXJfemVyb3NfbnVtYmVyID0gMDsKQEAgLTEyNjcsMTAgKzEyNDUsNyBAQAogCQkJCQkJCVNfbmV3W2ldKTsKIAogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBTX25ld1tpXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCQkJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksCiAJCQkJCQkJICAgICBpdGVtX3BvcyAtIG4gKwogCQkJCQkJCSAgICAgc251bVtpXSAtIDEsIGloLApAQCAtMTMyNywxMCArMTMwMiw3IEBACiAJCQkJCQkJICAgICBzYnl0ZXNbaV0gLSAxLAogCQkJCQkJCSAgICAgU19uZXdbaV0pOwogCQkJCQkJCS8qIFBhc3RlIGdpdmVuIGRpcmVjdG9yeSBlbnRyeSB0byBkaXJlY3RvcnkgaXRlbSAqLwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwkJCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLCAwLAogCQkJCQkJCSAgICAgcG9zX2luX2l0ZW0gLQpAQCAtMTMzOSw4ICsxMzExLDcgQEAKIAkJCQkJCQkgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSwKIAkJCQkJCQkgICAgIGJvZHksIHplcm9zX251bSk7CiAJCQkJCQkJLyogcGFzdGUgbmV3IGRpcmVjdG9yeSBlbnRyeSAqLwotCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS4KLQkJCQkJCQkJCSAgIGJpX2JoLAorCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCQkgICAwLAogCQkJCQkJCQkJICAgcG9zX2luX2l0ZW0KIAkJCQkJCQkJCSAgIC0KQEAgLTE0MDEsMTEgKzEzNzIsNyBAQAogCQkJCQkJaWYgKG5fcmVtIDwgMCkKIAkJCQkJCQluX3JlbSA9IDA7CiAJCQkJCQkvKiBBcHBlbmQgcGFydCBvZiBib2R5IGludG8gU19uZXdbMF0gKi8KLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKLQorCQkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAJCQkJCQlpZiAobl9yZW0gPiB6ZXJvc19udW0pIHsKIAkJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CiAJCQkJCQkJcl9ib2R5ID0KQEAgLTE0NzUsNyArMTQ0MiwxMCBAQAogCQkJCQkgICAgJiYgKHBvc19pbl9pdGVtICE9IGloX2l0ZW1fbGVuKGloX2NoZWNrKQogCQkJCQkJfHwgdGItPmluc2VydF9zaXplWzBdIDw9IDApKQogCQkJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkJCSAgICAgICAiUEFQLTEyMjM1OiBiYWxhbmNlX2xlYWY6IHBvc19pbl9pdGVtIG11c3QgYmUgZXF1YWwgdG8gaWhfaXRlbV9sZW4iKTsKKwkJCQkJCQkgICAgICJQQVAtMTIyMzUiLAorCQkJCQkJCSAgICAgInBvc19pbl9pdGVtICIKKwkJCQkJCQkgICAgICJtdXN0IGJlIGVxdWFsICIKKwkJCQkJCQkgICAgICJ0byBpaF9pdGVtX2xlbiIpOwogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwogCiAJCQkJCWxlYWZfbWkgPQpAQCAtMTQ4OSwxMCArMTQ1OSw3IEBACiAJCQkJCSAgICAgICBsZWFmX21pKTsKIAogCQkJCQkvKiBwYXN0ZSBpbnRvIGl0ZW0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOworCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCSAgICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICAgIHNudW1baV0sCkBAIC0xNTA1LDcgKzE0NzIsNyBAQAogCQkJCQkJCSAgIGl0ZW1fcG9zIC0gbiArCiAJCQkJCQkJICAgc251bVtpXSk7CiAJCQkJCWlmIChpc19kaXJlbnRyeV9sZV9paChwYXN0ZWQpKSB7Ci0JCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuYmlfYmgsCisJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgIG4gKyBzbnVtW2ldLAogCQkJCQkJCQkgICBwb3NfaW5faXRlbSwKQEAgLTE1MzUsOCArMTUwMiw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoJLyogY2FzZXMgZCBhbmQgdCAqLwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMjQ1OiBiYWxhbmNlX2xlYWY6IGJsa251bSA+IDI6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMjQ1IiwKKwkJCQkgICAgICAgImJsa251bSA+IDI6IHVuZXhwZWN0ZWQgbW9kZTogJXMoJWQpIiwKIAkJCQkgICAgICAgKGZsYWcgPT0KIAkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJIE1fQ1VUKSA/ICJDVVQiCkBAIC0xNTU5LDEwICsxNTI2LDcgQEAKIAogCQlzd2l0Y2ggKGZsYWcpIHsKIAkJY2FzZSBNX0lOU0VSVDoJLyogaW5zZXJ0IGl0ZW0gaW50byBTWzBdICovCi0JCQliaS50YiA9IHRiOwotCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJYmkuYmlfcGFyZW50ID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOwotCQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOworCQkJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLCBpdGVtX3BvcywgaWgsIGJvZHksCiAJCQkJCSAgICAgemVyb3NfbnVtKTsKIApAQCAtMTU4OSwxNCArMTU1Myw3IEBACiAJCQkJCQkgICAgICAgIlBBUC0xMjI2MDogaW5zZXJ0X3NpemUgaXMgMCBhbHJlYWR5Iik7CiAKIAkJCQkJCS8qIHByZXBhcmUgc3BhY2UgKi8KLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiUzA7Ci0JCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJICAgIFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLAotCQkJCQkJCQkgICAwKTsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCSAgICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgICAxKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkJICAgICBpdGVtX3BvcywKIAkJCQkJCQkJICAgICBwb3NfaW5faXRlbSwKQEAgLTE2MDYsNyArMTU2Myw3IEBACiAJCQkJCQkJCSAgICAgemVyb3NfbnVtKTsKIAogCQkJCQkJLyogcGFzdGUgZW50cnkgKi8KLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIGl0ZW1fcG9zLAogCQkJCQkJCQkgICBwb3NfaW5faXRlbSwKIAkJCQkJCQkJICAgMSwKQEAgLTE2NDQsMTQgKzE2MDEsNyBAQAogCQkJCQkJUkZBTFNFKHRiLT5pbnNlcnRfc2l6ZVswXSA8PSAwLAogCQkJCQkJICAgICAgICJQQVAtMTIyNzU6IGluc2VydCBzaXplIG11c3Qgbm90IGJlICVkIiwKIAkJCQkJCSAgICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGJTMDsKLQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkgICAgUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgIDApOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKLQkJCQkJCQkJICAgIDEpOworCQkJCQkJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCQkgICAgIGl0ZW1fcG9zLAogCQkJCQkJCQkgICAgIHBvc19pbl9pdGVtLApAQCAtMTY4MSwxMCArMTYzMSwxMSBAQAogCQkJCQkJCXByaW50X2N1cl90YigiMTIyODUiKTsKIAkJCQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+CiAJCQkJCQkJCSAgICAgICB0Yl9zYiwKLQkJCQkJCQkJICAgICAgICJQQVAtMTIyODU6IGJhbGFuY2VfbGVhZjogaW5zZXJ0X3NpemUgbXVzdCBiZSAwICglZCkiLAotCQkJCQkJCQkgICAgICAgdGItPgotCQkJCQkJCQkgICAgICAgaW5zZXJ0X3NpemUKLQkJCQkJCQkJICAgICAgIFswXSk7CisJCQkJCQkJICAgICJQQVAtMTIyODUiLAorCQkJCQkJCSAgICAiaW5zZXJ0X3NpemUgIgorCQkJCQkJCSAgICAibXVzdCBiZSAwICIKKwkJCQkJCQkgICAgIiglZCkiLAorCQkJCQkJCSAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwogCQkJCQkJfQogCQkJCQl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCkBAIC0xNjk3LDExICsxNjQ4LDEwIEBACiAJaWYgKGZsYWcgPT0gTV9QQVNURSAmJiB0Yi0+aW5zZXJ0X3NpemVbMF0pIHsKIAkJcHJpbnRfY3VyX3RiKCIxMjI5MCIpOwogCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC0xMjI5MDogYmFsYW5jZV9sZWFmOiBpbnNlcnRfc2l6ZSBpcyBzdGlsbCBub3QgMCAoJWQpIiwKKwkJCSAgICAgICAiUEFQLTEyMjkwIiwgImluc2VydF9zaXplIGlzIHN0aWxsIG5vdCAwICglZCkiLAogCQkJICAgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSk7CiAJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwotCiAJcmV0dXJuIDA7CiB9CQkJCS8qIExlYWYgbGV2ZWwgb2YgdGhlIHRyZWUgaXMgYmFsYW5jZWQgKGVuZCBvZiBiYWxhbmNlX2xlYWYpICovCiAKQEAgLTE3MjQsNyArMTY3NCw2IEBACiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdldF9GRUIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdF9iOwogCXN0cnVjdCBidWZmZXJfaW5mbyBiaTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRkVCX1NJWkU7IGkrKykKQEAgLTE3MzIsMTkgKzE2ODEsMTUgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGkgPT0gTUFYX0ZFQl9TSVpFKQotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgInZzLTEyMzAwOiBnZXRfRkVCOiBGRUIgbGlzdCBpcyBlbXB0eSIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjMwMCIsICJGRUIgbGlzdCBpcyBlbXB0eSIpOwogCi0JYmkudGIgPSB0YjsKLQliaS5iaV9iaCA9IGZpcnN0X2IgPSB0Yi0+RkVCW2ldOwotCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JYmkuYmlfcG9zaXRpb24gPSAwOworCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgdGItPkZFQltpXSk7CiAJbWFrZV9lbXB0eV9ub2RlKCZiaSk7Ci0Jc2V0X2J1ZmZlcl91cHRvZGF0ZShmaXJzdF9iKTsKKwlzZXRfYnVmZmVyX3VwdG9kYXRlKHRiLT5GRUJbaV0pOworCXRiLT51c2VkW2ldID0gdGItPkZFQltpXTsKIAl0Yi0+RkVCW2ldID0gTlVMTDsKLQl0Yi0+dXNlZFtpXSA9IGZpcnN0X2I7CiAKLQlyZXR1cm4gKGZpcnN0X2IpOworCXJldHVybiB0Yi0+dXNlZFtpXTsKIH0KIAogLyogVGhpcyBpcyBub3cgdXNlZCBiZWNhdXNlIHJlaXNlcmZzX2ZyZWVfYmxvY2sgaGFzIHRvIGJlIGFibGUgdG8KQEAgLTE3NTUsMTUgKzE3MDAsMTYgQEAKIAlpbnQgaTsKIAogCWlmIChidWZmZXJfZGlydHkoYmgpKQotCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwKLQkJCQkgInN0b3JlX3Rocm93biBkZWFscyB3aXRoIGRpcnR5IGJ1ZmZlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIwIiwKKwkJCQkgImNhbGxlZCB3aXRoIGRpcnR5IGJ1ZmZlciIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRiLT50aHJvd24pOyBpKyspCiAJCWlmICghdGItPnRocm93bltpXSkgewogCQkJdGItPnRocm93bltpXSA9IGJoOwogCQkJZ2V0X2JoKGJoKTsJLyogZnJlZV90aHJvd24gcHV0cyB0aGlzICovCiAJCQlyZXR1cm47CiAJCX0KLQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInN0b3JlX3Rocm93bjogdG9vIG1hbnkgdGhyb3duIGJ1ZmZlcnMiKTsKKwlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIxIiwKKwkJCSAidG9vIG1hbnkgdGhyb3duIGJ1ZmZlcnMiKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV90aHJvd24oc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCkBAIC0xNzc0LDggKzE3MjAsOCBAQAogCQlpZiAodGItPnRocm93bltpXSkgewogCQkJYmxvY2tuciA9IHRiLT50aHJvd25baV0tPmJfYmxvY2tucjsKIAkJCWlmIChidWZmZXJfZGlydHkodGItPnRocm93bltpXSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCi0JCQkJCQkgImZyZWVfdGhyb3duIGRlYWxzIHdpdGggZGlydHkgYnVmZmVyICVkIiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIyIiwKKwkJCQkJCSAiY2FsbGVkIHdpdGggZGlydHkgYnVmZmVyICVkIiwKIAkJCQkJCSBibG9ja25yKTsKIAkJCWJyZWxzZSh0Yi0+dGhyb3duW2ldKTsJLyogaW5jcmVtZW50ZWQgaW4gc3RvcmVfdGhyb3duICovCiAJCQlyZWlzZXJmc19mcmVlX2Jsb2NrKHRiLT50cmFuc2FjdGlvbl9oYW5kbGUsIE5VTEwsCkBAIC0xODczLDIwICsxODE5LDE5IEBACiAJZm9yIChpID0gMDsgaSA8PSBCX05SX0lURU1TKGJoKTsgaSsrLCBkYysrKSB7CiAJCWlmICghaXNfcmV1c2FibGUocywgZGNfYmxvY2tfbnVtYmVyKGRjKSwgMSkpIHsKIAkJCXByaW50X2N1cl90YihtZXMpOwotCQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCQkgICAgICAgIlBBUC0xMjMzODogY2hlY2tfaW50ZXJuYWxfbm9kZTogaW52YWxpZCBjaGlsZCBwb2ludGVyICV5IGluICViIiwKKwkJCXJlaXNlcmZzX3BhbmljKHMsICJQQVAtMTIzMzgiLAorCQkJCSAgICAgICAiaW52YWxpZCBjaGlsZCBwb2ludGVyICV5IGluICViIiwKIAkJCQkgICAgICAgZGMsIGJoKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBsb2NrZWRfb3Jfbm90X2luX3RyZWUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqd2hpY2gpCitzdGF0aWMgaW50IGxvY2tlZF9vcl9ub3RfaW5fdHJlZShzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKndoaWNoKQogewogCWlmICgoIWJ1ZmZlcl9qb3VybmFsX3ByZXBhcmVkKGJoKSAmJiBidWZmZXJfbG9ja2VkKGJoKSkgfHwKIAkgICAgIUJfSVNfSU5fVFJFRShiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAidnMtMTIzMzk6IGxvY2tlZF9vcl9ub3RfaW5fdHJlZTogJXMgKCViKSIsCi0JCQkJIHdoaWNoLCBiaCk7CisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtMTIzMzkiLCAiJXMgKCViKSIsIHdoaWNoLCBiaCk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE4OTcsMjYgKzE4NDIsMjggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmIChjdXJfdGIpIHsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIzMzU6IGNoZWNrX2JlZm9yZV9iYWxhbmNpbmc6ICIKLQkJCSAgICAgICAic3VzcGVjdCB0aGF0IHNjaGVkdWxlIG9jY3VycmVkIGJhc2VkIG9uIGN1cl90YiBub3QgYmVpbmcgbnVsbCBhdCB0aGlzIHBvaW50IGluIGNvZGUuICIKLQkJCSAgICAgICAiZG9fYmFsYW5jZSBjYW5ub3QgcHJvcGVybHkgaGFuZGxlIHNjaGVkdWxlIG9jY3VycmluZyB3aGlsZSBpdCBydW5zLiIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjMzNSIsICJzdXNwZWN0IHRoYXQgc2NoZWR1bGUgIgorCQkJICAgICAgICJvY2N1cnJlZCBiYXNlZCBvbiBjdXJfdGIgbm90IGJlaW5nIG51bGwgYXQgIgorCQkJICAgICAgICJ0aGlzIHBvaW50IGluIGNvZGUuIGRvX2JhbGFuY2UgY2Fubm90IHByb3Blcmx5ICIKKwkJCSAgICAgICAiaGFuZGxlIHNjaGVkdWxlIG9jY3VycmluZyB3aGlsZSBpdCBydW5zLiIpOwogCX0KIAogCS8qIGRvdWJsZSBjaGVjayB0aGF0IGJ1ZmZlcnMgdGhhdCB3ZSB3aWxsIG1vZGlmeSBhcmUgdW5sb2NrZWQuIChmaXhfbm9kZXMgc2hvdWxkIGFscmVhZHkgaGF2ZQogCSAgIHByZXBwZWQgYWxsIG9mIHRoZXNlIGZvciB1cykuICovCiAJaWYgKHRiLT5sbnVtWzBdKSB7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkxbMF0sICJMWzBdIik7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkZMWzBdLCAiRkxbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+Q0ZMWzBdLCAiQ0ZMWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5MWzBdLCAiTFswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+RkxbMF0sICJGTFswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+Q0ZMWzBdLCAiQ0ZMWzBdIik7CiAJCWNoZWNrX2xlYWYodGItPkxbMF0pOwogCX0KIAlpZiAodGItPnJudW1bMF0pIHsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+UlswXSwgIlJbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+RlJbMF0sICJGUlswXSIpOwotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5DRlJbMF0sICJDRlJbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPlJbMF0sICJSWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5GUlswXSwgIkZSWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5DRlJbMF0sICJDRlJbMF0iKTsKIAkJY2hlY2tfbGVhZih0Yi0+UlswXSk7CiAJfQotCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpLCAiU1swXSIpOworCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSwKKwkJCQkJIlNbMF0iKTsKIAljaGVja19sZWFmKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTkzMCw4ICsxODc3LDggQEAKIAkJICAgIGRjX3NpemUoQl9OX0NISUxECiAJCQkgICAgKHRiLT5GTFswXSwgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApKSkpIHsKIAkJCXByaW50X2N1cl90YigiMTIyMjEiKTsKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjM1NTogY2hlY2tfYWZ0ZXJfYmFsYW5jZV9sZWFmOiBzaGlmdCB0byBsZWZ0IHdhcyBpbmNvcnJlY3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjM1NSIsCisJCQkJICAgICAgICJzaGlmdCB0byBsZWZ0IHdhcyBpbmNvcnJlY3QiKTsKIAkJfQogCX0KIAlpZiAodGItPnJudW1bMF0pIHsKQEAgLTE5NDAsOCArMTg4Nyw4IEBACiAJCSAgICBkY19zaXplKEJfTl9DSElMRAogCQkJICAgICh0Yi0+RlJbMF0sIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCkpKSkgewogCQkJcHJpbnRfY3VyX3RiKCIxMjIyMiIpOwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMzYwOiBjaGVja19hZnRlcl9iYWxhbmNlX2xlYWY6IHNoaWZ0IHRvIHJpZ2h0IHdhcyBpbmNvcnJlY3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjM2MCIsCisJCQkJICAgICAgICJzaGlmdCB0byByaWdodCB3YXMgaW5jb3JyZWN0Iik7CiAJCX0KIAl9CiAJaWYgKFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCAxKSAmJgpAQCAtMTk1NSw3ICsxOTAyLDcgQEAKIAkJCQkJICAgICAgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKIAkJCQkJCQkgICAgICAgMSkpKSk7CiAJCXByaW50X2N1cl90YigiMTIyMjMiKTsKLQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtMTIzNjMiLAogCQkJCSAiQl9GUkVFX1NQQUNFIChQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwwKSkgPSAlZDsgIgogCQkJCSAiTUFYX0NISUxEX1NJWkUgKCVkKSAtIGRjX3NpemUoICV5LCAlZCApIFslZF0gPSAlZCIsCiAJCQkJIGxlZnQsCkBAIC0xOTY2LDggKzE5MTMsNyBAQAogCQkJCQkgKFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCAxKSwKIAkJCQkJICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpKSksCiAJCQkJIHJpZ2h0KTsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtMTIzNjU6IGNoZWNrX2FmdGVyX2JhbGFuY2VfbGVhZjogUyBpcyBpbmNvcnJlY3QiKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMzY1IiwgIlMgaXMgaW5jb3JyZWN0Iik7CiAJfQogfQogCkBAIC0yMDM3LDcgKzE5ODMsNyBAQAogCS8qIHN0b3JlX3ByaW50X3RiICh0Yik7ICovCiAKIAkvKiBkbyBub3QgZGVsZXRlLCBqdXN0IGNvbW1lbnQgaXQgb3V0ICovCi0vKiAgICBwcmludF90YihmbGFnLCBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpLCB0Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW0sIHRiLCAKKy8qICAgIHByaW50X3RiKGZsYWcsIFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCksIHRiLT50Yl9wYXRoLT5wb3NfaW5faXRlbSwgdGIsCiAJICAgICAiY2hlY2siKTsqLwogCVJGQUxTRShjaGVja19iZWZvcmVfYmFsYW5jaW5nKHRiKSwgIlBBUC0xMjM0MDogbG9ja2VkIGJ1ZmZlcnMgaW4gVEIiKTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKQEAgLTIxMDIsMTQgKzIwNDgsMTMgQEAKIAl0Yi0+bmVlZF9iYWxhbmNlX2RpcnR5ID0gMDsKIAogCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiY2xtLTYwMDA6IGRvX2JhbGFuY2UsIGZzIGdlbmVyYXRpb24gaGFzIGNoYW5nZWRcbiIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJjbG0tNjAwMCIsICJmcyBnZW5lcmF0aW9uIGhhcyAiCisJCQkgICAgICAgImNoYW5nZWQiKTsKIAl9CiAJLyogaWYgd2UgaGF2ZSBubyByZWFsIHdvcmsgdG8gZG8gICovCiAJaWYgKCF0Yi0+aW5zZXJ0X3NpemVbMF0pIHsKLQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCi0JCQkJICJQQVAtMTIzNTA6IGRvX2JhbGFuY2U6IGluc2VydF9zaXplID09IDAsIG1vZGUgPT0gJWMiLAotCQkJCSBmbGFnKTsKKwkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJQQVAtMTIzNTAiLAorCQkJCSAiaW5zZXJ0X3NpemUgPT0gMCwgbW9kZSA9PSAlYyIsIGZsYWcpOwogCQl1bmZpeF9ub2Rlcyh0Yik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggMzM0MDg0MS4uOWY0MzY2NiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMjAsMTQgKzIwLDE0IEBACiAqKiBpbnNlcnRpb24vYmFsYW5jaW5nLCBmb3IgZmlsZXMgdGhhdCBhcmUgd3JpdHRlbiBpbiBvbmUgd3JpdGUuCiAqKiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgdGFpbCBwYWNraW5ncyAoYmFsYW5jZXMpIGZvciBmaWxlcyB0aGF0IGFyZSB3cml0dGVuIGluCiAqKiBtdWx0aXBsZSB3cml0ZXMgYW5kIGFyZSBzbWFsbCBlbm91Z2ggdG8gaGF2ZSB0YWlscy4KLSoqIAorKioKICoqIGZpbGVfcmVsZWFzZSBpcyBjYWxsZWQgYnkgdGhlIFZGUyBsYXllciB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gIElmCiAqKiB0aGlzIGlzIHRoZSBsYXN0IG9wZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGZpbGUKICoqIHNtYWxsIGVub3VnaCB0byBoYXZlIGEgdGFpbCwgYW5kIHRoZSB0YWlsIGlzIGN1cnJlbnRseSBpbiBhbgogKiogdW5mb3JtYXR0ZWQgbm9kZSwgdGhlIHRhaWwgaXMgY29udmVydGVkIGJhY2sgaW50byBhIGRpcmVjdCBpdGVtLgotKiogCisqKgogKiogV2UgdXNlIHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUgdG8gcGFjayB0aGUgdGFpbCwgc2luY2UgaXQgYWxyZWFkeSBoYXMKLSoqIGFsbCB0aGUgY29uZGl0aW9ucyBjb2RlZC4gIAorKiogYWxsIHRoZSBjb25kaXRpb25zIGNvZGVkLgogKi8KIHN0YXRpYyBpbnQgcmVpc2VyZnNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewpAQCAtNzYsNyArNzYsNyBAQAogCQkJICogYW5kIGxldCB0aGUgYWRtaW4ga25vdyB3aGF0IGlzIGdvaW5nIG9uLgogCQkJICovCiAJCQlpZ3JhYihpbm9kZSk7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS05MDAxIiwKIAkJCQkJICJwaW5uaW5nIGlub2RlICVsdSBiZWNhdXNlIHRoZSAiCiAJCQkJCSAicHJlYWxsb2NhdGlvbiBjYW4ndCBiZSBmcmVlZCIsCiAJCQkJCSBpbm9kZS0+aV9pbm8pOwpAQCAtMTM0LDIzICsxMzQsMjMgQEAKICAqIGJlIHJlbW92ZWQuLi4KICAqLwogCi1zdGF0aWMgaW50IHJlaXNlcmZzX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqcF9zX2ZpbHAsCi0JCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpwX3NfZGVudHJ5LCBpbnQgZGF0YXN5bmMpCitzdGF0aWMgaW50IHJlaXNlcmZzX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQogewotCXN0cnVjdCBpbm9kZSAqcF9zX2lub2RlID0gcF9zX2RlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgbl9lcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyOwogCWludCBiYXJyaWVyX2RvbmU7CiAKLQlCVUdfT04oIVNfSVNSRUcocF9zX2lub2RlLT5pX21vZGUpKTsKLQluX2VyciA9IHN5bmNfbWFwcGluZ19idWZmZXJzKHBfc19pbm9kZS0+aV9tYXBwaW5nKTsKLQlyZWlzZXJmc193cml0ZV9sb2NrKHBfc19pbm9kZS0+aV9zYik7Ci0JYmFycmllcl9kb25lID0gcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShwX3NfaW5vZGUpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhwX3NfaW5vZGUtPmlfc2IpOwotCWlmIChiYXJyaWVyX2RvbmUgIT0gMSAmJiByZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHBfc19pbm9kZS0+aV9zYikpCi0JCWJsa2Rldl9pc3N1ZV9mbHVzaChwX3NfaW5vZGUtPmlfc2ItPnNfYmRldiwgTlVMTCk7CisJQlVHX09OKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKTsKKwllcnIgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhpbm9kZS0+aV9tYXBwaW5nKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwliYXJyaWVyX2RvbmUgPSByZWlzZXJmc19jb21taXRfZm9yX2lub2RlKGlub2RlKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOworCWlmIChiYXJyaWVyX2RvbmUgIT0gMSAmJiByZWlzZXJmc19iYXJyaWVyX2ZsdXNoKGlub2RlLT5pX3NiKSkKKwkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLT5pX3NiLT5zX2JkZXYsIE5VTEwpOwogCWlmIChiYXJyaWVyX2RvbmUgPCAwKQogCQlyZXR1cm4gYmFycmllcl9kb25lOwotCXJldHVybiAobl9lcnIgPCAwKSA/IC1FSU8gOiAwOworCXJldHVybiAoZXJyIDwgMCkgPyAtRUlPIDogMDsKIH0KIAogLyogdGFrZW4gZnMvYnVmZmVyLmM6X19ibG9ja19jb21taXRfd3JpdGUgKi8KQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiAvKiBXcml0ZSBAY291bnQgYnl0ZXMgYXQgcG9zaXRpb24gQHBwb3MgaW4gYSBmaWxlIGluZGljYXRlZCBieSBAZmlsZQotICAgZnJvbSB0aGUgYnVmZmVyIEBidWYuICAKKyAgIGZyb20gdGhlIGJ1ZmZlciBAYnVmLgogCiAgICBnZW5lcmljX2ZpbGVfd3JpdGUoKSBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3Qgc2Vla2luZyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgd2FudAogICAgc29tZXRoaW5nIHNpbXBsZSB0aGF0IHdvcmtzLiAgSXQgaXMgbm90IGZvciBzZXJpb3VzIHVzZSBieSBnZW5lcmFsIHB1cnBvc2UgZmlsZXN5c3RlbXMsIGV4Y2VwdGluZyB0aGUgb25lIHRoYXQgaXQgd2FzCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwppbmRleCAwN2QwNWUwLi41ZTVhNGU2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKQEAgLTMwLDggKzMwLDggQEAKICAqKiBnZXRfZGlyZWN0X3BhcmVudAogICoqIGdldF9uZWlnaGJvcnMKICAqKiBmaXhfbm9kZXMKLSAqKiAKLSAqKiAKKyAqKgorICoqCiAgKiovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC0xMzUsOCArMTM1LDcgQEAKIAkJdm4tPnZuX2ZyZWVfcHRyICs9CiAJCSAgICBvcF9jcmVhdGVfdmkodm4sIHZpLCBpc19hZmZlY3RlZCwgdGItPmluc2VydF9zaXplWzBdKTsKIAkJaWYgKHRiLT52bl9idWYgKyB0Yi0+dm5fYnVmX3NpemUgPCB2bi0+dm5fZnJlZV9wdHIpCi0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJ2cy04MDMwOiBjcmVhdGVfdmlydHVhbF9ub2RlOiAiCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MDMwIiwKIAkJCQkgICAgICAgInZpcnR1YWwgbm9kZSBzcGFjZSBjb25zdW1lZCIpOwogCiAJCWlmICghaXNfYWZmZWN0ZWQpCkBAIC0xODYsOCArMTg1LDkgQEAKIAkJCSAgICAgJiYgSV9FTlRSWV9DT1VOVChCX05fUElURU1fSEVBRChTaCwgMCkpID09IDEpKSB7CiAJCQkJLyogbm9kZSBjb250YWlucyBtb3JlIHRoYW4gMSBpdGVtLCBvciBpdGVtIGlzIG5vdCBkaXJlY3RvcnkgaXRlbSwgb3IgdGhpcyBpdGVtIGNvbnRhaW5zIG1vcmUgdGhhbiAxIGVudHJ5ICovCiAJCQkJcHJpbnRfYmxvY2soU2gsIDAsIC0xLCAtMSk7Ci0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgInZzLTgwNDU6IGNyZWF0ZV92aXJ0dWFsX25vZGU6IHJka2V5ICVrLCBhZmZlY3RlZCBpdGVtPT0lZCAobW9kZT09JWMpIE11c3QgYmUgJWMiLAorCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTgwNDUiLAorCQkJCQkgICAgICAgInJka2V5ICVrLCBhZmZlY3RlZCBpdGVtPT0lZCAiCisJCQkJCSAgICAgICAiKG1vZGU9PSVjKSBNdXN0IGJlICVjIiwKIAkJCQkJICAgICAgIGtleSwgdm4tPnZuX2FmZmVjdGVkX2l0ZW1fbnVtLAogCQkJCQkgICAgICAgdm4tPnZuX21vZGUsIE1fREVMRVRFKTsKIAkJCX0KQEAgLTM3Nyw5ICszNzcsOSBAQAogCWludCBuZWVkZWRfbm9kZXM7CiAJaW50IHN0YXJ0X2l0ZW0sCQkvKiBwb3NpdGlvbiBvZiBpdGVtIHdlIHN0YXJ0IGZpbGxpbmcgbm9kZSBmcm9tICovCiAJIGVuZF9pdGVtLAkJLyogcG9zaXRpb24gb2YgaXRlbSB3ZSBmaW5pc2ggZmlsbGluZyBub2RlIGJ5ICovCi0JIHN0YXJ0X2J5dGVzLAkJLyogbnVtYmVyIG9mIGZpcnN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIHN0YXJ0X2l0ZW0tdGggaXRlbSAKKwkgc3RhcnRfYnl0ZXMsCQkvKiBudW1iZXIgb2YgZmlyc3QgYnl0ZXMgKGVudHJpZXMgZm9yIGRpcmVjdG9yeSkgb2Ygc3RhcnRfaXRlbS10aCBpdGVtCiAJCQkJICAgd2UgZG8gbm90IGluY2x1ZGUgaW50byBub2RlIHRoYXQgaXMgYmVpbmcgZmlsbGVkICovCi0JIGVuZF9ieXRlczsJCS8qIG51bWJlciBvZiBsYXN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIGVuZF9pdGVtLXRoIGl0ZW0gCisJIGVuZF9ieXRlczsJCS8qIG51bWJlciBvZiBsYXN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIGVuZF9pdGVtLXRoIGl0ZW0KIAkJCQkgICB3ZSBkbyBub2RlIGluY2x1ZGUgaW50byBub2RlIHRoYXQgaXMgYmVpbmcgZmlsbGVkICovCiAJaW50IHNwbGl0X2l0ZW1fcG9zaXRpb25zWzJdOwkvKiB0aGVzZSBhcmUgcG9zaXRpb25zIGluIHZpcnR1YWwgaXRlbSBvZgogCQkJCQkgICBpdGVtcywgdGhhdCBhcmUgc3BsaXQgYmV0d2VlbiBTWzBdIGFuZApAQCAtNDk2LDggKzQ5Niw4IEBACiAJCXNudW0wMTJbbmVlZGVkX25vZGVzIC0gMSArIDNdID0gdW5pdHM7CiAKIAkJaWYgKG5lZWRlZF9ub2RlcyA+IDIpCi0JCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTgxMTE6IGdldF9udW1fdmVyOiAiCi0JCQkJCSAic3BsaXRfaXRlbV9wb3NpdGlvbiBpcyBvdXQgb2YgYm91bmRhcnkiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtODExMSIsCisJCQkJCSAic3BsaXRfaXRlbV9wb3NpdGlvbiBpcyBvdXQgb2YgcmFuZ2UiKTsKIAkJc251bTAxMltuZWVkZWRfbm9kZXMgLSAxXSsrOwogCQlzcGxpdF9pdGVtX3Bvc2l0aW9uc1tuZWVkZWRfbm9kZXMgLSAxXSA9IGk7CiAJCW5lZWRlZF9ub2RlcysrOwpAQCAtNTMzLDggKzUzMyw4IEBACiAKIAkJaWYgKHZuLT52bl92aVtzcGxpdF9pdGVtX251bV0udmlfaW5kZXggIT0gVFlQRV9ESVJFTlRSWSAmJgogCQkgICAgdm4tPnZuX3ZpW3NwbGl0X2l0ZW1fbnVtXS52aV9pbmRleCAhPSBUWVBFX0lORElSRUNUKQotCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTE1OiBnZXRfbnVtX3Zlcjogbm90ICIKLQkJCQkJICJkaXJlY3Rvcnkgb3IgaW5kaXJlY3QgaXRlbSIpOworCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTE1IiwKKwkJCQkJICJub3QgZGlyZWN0b3J5IG9yIGluZGlyZWN0IGl0ZW0iKTsKIAl9CiAKIAkvKiBub3cgd2Uga25vdyBTMmJ5dGVzLCBjYWxjdWxhdGUgUzFieXRlcyAqLwpAQCAtNTY5LDcgKzU2OSw3IEBACiAKIC8qIFNldCBwYXJhbWV0ZXJzIGZvciBiYWxhbmNpbmcuCiAgKiBQZXJmb3JtcyB3cml0ZSBvZiByZXN1bHRzIG9mIGFuYWx5c2lzIG9mIGJhbGFuY2luZyBpbnRvIHN0cnVjdHVyZSB0YiwKLSAqIHdoZXJlIGl0IHdpbGwgbGF0ZXIgYmUgdXNlZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgZG8gdGhlIGJhbGFuY2luZy4gCisgKiB3aGVyZSBpdCB3aWxsIGxhdGVyIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBiYWxhbmNpbmcuCiAgKiBQYXJhbWV0ZXJzOgogICoJdGIJdHJlZV9iYWxhbmNlIHN0cnVjdHVyZTsKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKQEAgLTc0OSwyNSArNzQ5LDI2IEBACiAJCSAgLTEsIC0xKTtcCiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYnVmZmVyc19pbl90YihzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIpCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcnNfaW5fdGIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7Ci0JaW50IG5fY291bnRlcjsKKwlpbnQgaTsKIAotCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHBfc190Yi0+dGJfcGF0aCk7CisJcGF0aHJlbHNlKHRiLT50Yl9wYXRoKTsKIAotCWZvciAobl9jb3VudGVyID0gMDsgbl9jb3VudGVyIDwgTUFYX0hFSUdIVDsgbl9jb3VudGVyKyspIHsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkxbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+TFtuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPlJbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+UltuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZMW25fY291bnRlcl0pOwotCQlwX3NfdGItPkZMW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+RlJbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+RlJbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRkxbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+Q0ZMW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZSW25fY291bnRlcl0pOwotCQlwX3NfdGItPkNGUltuX2NvdW50ZXJdID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hFSUdIVDsgaSsrKSB7CisJCWJyZWxzZSh0Yi0+TFtpXSk7CisJCWJyZWxzZSh0Yi0+UltpXSk7CisJCWJyZWxzZSh0Yi0+RkxbaV0pOworCQlicmVsc2UodGItPkZSW2ldKTsKKwkJYnJlbHNlKHRiLT5DRkxbaV0pOworCQlicmVsc2UodGItPkNGUltpXSk7CisKKwkJdGItPkxbaV0gPSBOVUxMOworCQl0Yi0+UltpXSA9IE5VTEw7CisJCXRiLT5GTFtpXSA9IE5VTEw7CisJCXRiLT5GUltpXSA9IE5VTEw7CisJCXRiLT5DRkxbaV0gPSBOVUxMOworCQl0Yi0+Q0ZSW2ldID0gTlVMTDsKIAl9CiB9CiAKQEAgLTc3NywxNCArNzc4LDE0IEBACiAgKgkgICAgICAgIE5PX0RJU0tfU1BBQ0UgLSBubyBkaXNrIHNwYWNlLgogICovCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1zdGF0aWMgaW50IGdldF9lbXB0eV9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9lbXB0eV9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfbmV3X2JoLAotCSAgICAqcF9zX1NoID0gUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2gpOwotCWJfYmxvY2tucl90ICpwX25fYmxvY2tuciwgYV9uX2Jsb2NrbnJzW01BWF9BTU9VTlRfTkVFREVEXSA9IHsgMCwgfTsKLQlpbnQgbl9jb3VudGVyLCBuX251bWJlcl9vZl9mcmVlYmxrLCBuX2Ftb3VudF9uZWVkZWQsCS8qIG51bWJlciBvZiBuZWVkZWQgZW1wdHkgYmxvY2tzICovCi0JIG5fcmV0dmFsID0gQ0FSUllfT047Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCSAgICAqU2ggPSBQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCk7CisJYl9ibG9ja25yX3QgKmJsb2NrbnIsIGJsb2NrbnJzW01BWF9BTU9VTlRfTkVFREVEXSA9IHsgMCwgfTsKKwlpbnQgY291bnRlciwgbnVtYmVyX29mX2ZyZWVibGssIGFtb3VudF9uZWVkZWQsCS8qIG51bWJlciBvZiBuZWVkZWQgZW1wdHkgYmxvY2tzICovCisJIHJldHZhbCA9IENBUlJZX09OOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB0Yi0+dGJfc2I7CiAKIAkvKiBudW1iZXJfb2ZfZnJlZWJsayBpcyB0aGUgbnVtYmVyIG9mIGVtcHR5IGJsb2NrcyB3aGljaCBoYXZlIGJlZW4KIAkgICBhY3F1aXJlZCBmb3IgdXNlIGJ5IHRoZSBiYWxhbmNpbmcgYWxnb3JpdGhtIG1pbnVzIHRoZSBudW1iZXIgb2YKQEAgLTc5Miw3ICs3OTMsNyBAQAogCSAgIG51bWJlcl9vZl9mcmVlYmxrID0gdGItPmN1cl9ibGtudW0gY2FuIGJlIG5vbi16ZXJvIGlmIGEgc2NoZWR1bGUgb2NjdXJzCiAJICAgYWZ0ZXIgZW1wdHkgYmxvY2tzIGFyZSBhY3F1aXJlZCwgYW5kIHRoZSBiYWxhbmNpbmcgYW5hbHlzaXMgaXMKIAkgICB0aGVuIHJlc3RhcnRlZCwgYW1vdW50X25lZWRlZCBpcyB0aGUgbnVtYmVyIG5lZWRlZCBieSB0aGlzIGxldmVsCi0JICAgKG5faCkgb2YgdGhlIGJhbGFuY2luZyBhbmFseXNpcy4KKwkgICAoaCkgb2YgdGhlIGJhbGFuY2luZyBhbmFseXNpcy4KIAogCSAgIE5vdGUgdGhhdCBmb3Igc3lzdGVtcyB3aXRoIG1hbnkgcHJvY2Vzc2VzIHdyaXRpbmcsIGl0IHdvdWxkIGJlCiAJICAgbW9yZSBsYXlvdXQgb3B0aW1hbCB0byBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBuZWVkZWQgYnkgYWxsCkBAIC04MDAsNTQgKzgwMSw1NCBAQAogCiAJLyogSW5pdGlhdGUgbnVtYmVyX29mX2ZyZWVibGsgdG8gdGhlIGFtb3VudCBhY3F1aXJlZCBwcmlvciB0byB0aGUgcmVzdGFydCBvZgogCSAgIHRoZSBhbmFseXNpcyBvciAwIGlmIG5vdCByZXN0YXJ0ZWQsIHRoZW4gc3VidHJhY3QgdGhlIGFtb3VudCBuZWVkZWQKLQkgICBieSBhbGwgb2YgdGhlIGxldmVscyBvZiB0aGUgdHJlZSBiZWxvdyBuX2guICovCi0JLyogYmxrbnVtIGluY2x1ZGVzIFNbbl9oXSwgc28gd2Ugc3VidHJhY3QgMSBpbiB0aGlzIGNhbGN1bGF0aW9uICovCi0JZm9yIChuX2NvdW50ZXIgPSAwLCBuX251bWJlcl9vZl9mcmVlYmxrID0gcF9zX3RiLT5jdXJfYmxrbnVtOwotCSAgICAgbl9jb3VudGVyIDwgbl9oOyBuX2NvdW50ZXIrKykKLQkJbl9udW1iZXJfb2ZfZnJlZWJsayAtPQotCQkgICAgKHBfc190Yi0+YmxrbnVtW25fY291bnRlcl0pID8gKHBfc190Yi0+YmxrbnVtW25fY291bnRlcl0gLQorCSAgIGJ5IGFsbCBvZiB0aGUgbGV2ZWxzIG9mIHRoZSB0cmVlIGJlbG93IGguICovCisJLyogYmxrbnVtIGluY2x1ZGVzIFNbaF0sIHNvIHdlIHN1YnRyYWN0IDEgaW4gdGhpcyBjYWxjdWxhdGlvbiAqLworCWZvciAoY291bnRlciA9IDAsIG51bWJlcl9vZl9mcmVlYmxrID0gdGItPmN1cl9ibGtudW07CisJICAgICBjb3VudGVyIDwgaDsgY291bnRlcisrKQorCQludW1iZXJfb2ZfZnJlZWJsayAtPQorCQkgICAgKHRiLT5ibGtudW1bY291bnRlcl0pID8gKHRiLT5ibGtudW1bY291bnRlcl0gLQogCQkJCQkJICAgMSkgOiAwOwogCiAJLyogQWxsb2NhdGUgbWlzc2luZyBlbXB0eSBibG9ja3MuICovCi0JLyogaWYgcF9zX1NoID09IDAgIHRoZW4gd2UgYXJlIGdldHRpbmcgYSBuZXcgcm9vdCAqLwotCW5fYW1vdW50X25lZWRlZCA9IChwX3NfU2gpID8gKHBfc190Yi0+YmxrbnVtW25faF0gLSAxKSA6IDE7CisJLyogaWYgU2ggPT0gMCAgdGhlbiB3ZSBhcmUgZ2V0dGluZyBhIG5ldyByb290ICovCisJYW1vdW50X25lZWRlZCA9IChTaCkgPyAodGItPmJsa251bVtoXSAtIDEpIDogMTsKIAkvKiAgQW1vdW50X25lZWRlZCA9IHRoZSBhbW91bnQgdGhhdCB3ZSBuZWVkIG1vcmUgdGhhbiB0aGUgYW1vdW50IHRoYXQgd2UgaGF2ZS4gKi8KLQlpZiAobl9hbW91bnRfbmVlZGVkID4gbl9udW1iZXJfb2ZfZnJlZWJsaykKLQkJbl9hbW91bnRfbmVlZGVkIC09IG5fbnVtYmVyX29mX2ZyZWVibGs7CisJaWYgKGFtb3VudF9uZWVkZWQgPiBudW1iZXJfb2ZfZnJlZWJsaykKKwkJYW1vdW50X25lZWRlZCAtPSBudW1iZXJfb2ZfZnJlZWJsazsKIAllbHNlCQkJLyogSWYgd2UgaGF2ZSBlbm91Z2ggYWxyZWFkeSB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCiAJCXJldHVybiBDQVJSWV9PTjsKIAogCS8qIE5vIG5lZWQgdG8gY2hlY2sgcXVvdGEgLSBpcyBub3QgYWxsb2NhdGVkIGZvciBibG9ja3MgdXNlZCBmb3IgZm9ybWF0dGVkIG5vZGVzICovCi0JaWYgKHJlaXNlcmZzX25ld19mb3JtX2Jsb2NrbnJzKHBfc190YiwgYV9uX2Jsb2NrbnJzLAotCQkJCSAgICAgICBuX2Ftb3VudF9uZWVkZWQpID09IE5PX0RJU0tfU1BBQ0UpCisJaWYgKHJlaXNlcmZzX25ld19mb3JtX2Jsb2NrbnJzKHRiLCBibG9ja25ycywKKwkJCQkgICAgICAgYW1vdW50X25lZWRlZCkgPT0gTk9fRElTS19TUEFDRSkKIAkJcmV0dXJuIE5PX0RJU0tfU1BBQ0U7CiAKIAkvKiBmb3IgZWFjaCBibG9ja251bWJlciB3ZSBqdXN0IGdvdCwgZ2V0IGEgYnVmZmVyIGFuZCBzdGljayBpdCBvbiBGRUIgKi8KLQlmb3IgKHBfbl9ibG9ja25yID0gYV9uX2Jsb2NrbnJzLCBuX2NvdW50ZXIgPSAwOwotCSAgICAgbl9jb3VudGVyIDwgbl9hbW91bnRfbmVlZGVkOyBwX25fYmxvY2tucisrLCBuX2NvdW50ZXIrKykgeworCWZvciAoYmxvY2tuciA9IGJsb2NrbnJzLCBjb3VudGVyID0gMDsKKwkgICAgIGNvdW50ZXIgPCBhbW91bnRfbmVlZGVkOyBibG9ja25yKyssIGNvdW50ZXIrKykgewogCi0JCVJGQUxTRSghKnBfbl9ibG9ja25yLAorCQlSRkFMU0UoISpibG9ja25yLAogCQkgICAgICAgIlBBUC04MTM1OiByZWlzZXJmc19uZXdfYmxvY2tucnMgZmFpbGVkIHdoZW4gZ290IG5ldyBibG9ja3MiKTsKIAotCQlwX3NfbmV3X2JoID0gc2JfZ2V0YmxrKHBfc19zYiwgKnBfbl9ibG9ja25yKTsKLQkJUkZBTFNFKGJ1ZmZlcl9kaXJ0eShwX3NfbmV3X2JoKSB8fAotCQkgICAgICAgYnVmZmVyX2pvdXJuYWxlZChwX3NfbmV3X2JoKSB8fAotCQkgICAgICAgYnVmZmVyX2pvdXJuYWxfZGlydHkocF9zX25ld19iaCksCisJCW5ld19iaCA9IHNiX2dldGJsayhzYiwgKmJsb2NrbnIpOworCQlSRkFMU0UoYnVmZmVyX2RpcnR5KG5ld19iaCkgfHwKKwkJICAgICAgIGJ1ZmZlcl9qb3VybmFsZWQobmV3X2JoKSB8fAorCQkgICAgICAgYnVmZmVyX2pvdXJuYWxfZGlydHkobmV3X2JoKSwKIAkJICAgICAgICJQQVAtODE0MDogam91cm5sYWxlZCBvciBkaXJ0eSBidWZmZXIgJWIgZm9yIHRoZSBuZXcgYmxvY2siLAotCQkgICAgICAgcF9zX25ld19iaCk7CisJCSAgICAgICBuZXdfYmgpOwogCiAJCS8qIFB1dCBlbXB0eSBidWZmZXJzIGludG8gdGhlIGFycmF5LiAqLwotCQlSRkFMU0UocF9zX3RiLT5GRUJbcF9zX3RiLT5jdXJfYmxrbnVtXSwKKwkJUkZBTFNFKHRiLT5GRUJbdGItPmN1cl9ibGtudW1dLAogCQkgICAgICAgIlBBUC04MTQxOiBidXN5IHNsb3QgZm9yIG5ldyBidWZmZXIiKTsKIAotCQlzZXRfYnVmZmVyX2pvdXJuYWxfbmV3KHBfc19uZXdfYmgpOwotCQlwX3NfdGItPkZFQltwX3NfdGItPmN1cl9ibGtudW0rK10gPSBwX3NfbmV3X2JoOworCQlzZXRfYnVmZmVyX2pvdXJuYWxfbmV3KG5ld19iaCk7CisJCXRiLT5GRUJbdGItPmN1cl9ibGtudW0rK10gPSBuZXdfYmg7CiAJfQogCi0JaWYgKG5fcmV0dmFsID09IENBUlJZX09OICYmIEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKQotCQluX3JldHZhbCA9IFJFUEVBVF9TRUFSQ0g7CisJaWYgKHJldHZhbCA9PSBDQVJSWV9PTiAmJiBGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQorCQlyZXR2YWwgPSBSRVBFQVRfU0VBUkNIOwogCi0JcmV0dXJuIG5fcmV0dmFsOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qIEdldCBmcmVlIHNwYWNlIG9mIHRoZSBsZWZ0IG5laWdoYm9yLCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIHBhcmVudApAQCAtODk1LDM1ICs4OTYsMzYgQEAKIH0KIAogLyogQ2hlY2sgd2hldGhlciBsZWZ0IG5laWdoYm9yIGlzIGluIG1lbW9yeS4gKi8KLXN0YXRpYyBpbnQgaXNfbGVmdF9uZWlnaGJvcl9pbl9jYWNoZShzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGlzX2xlZnRfbmVpZ2hib3JfaW5fY2FjaGUoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2ZhdGhlciwgKmxlZnQ7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOwotCWJfYmxvY2tucl90IG5fbGVmdF9uZWlnaGJvcl9ibG9ja25yOwotCWludCBuX2xlZnRfbmVpZ2hib3JfcG9zaXRpb247CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpmYXRoZXIsICpsZWZ0OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB0Yi0+dGJfc2I7CisJYl9ibG9ja25yX3QgbGVmdF9uZWlnaGJvcl9ibG9ja25yOworCWludCBsZWZ0X25laWdoYm9yX3Bvc2l0aW9uOwogCi0JaWYgKCFwX3NfdGItPkZMW25faF0pCS8qIEZhdGhlciBvZiB0aGUgbGVmdCBuZWlnaGJvciBkb2VzIG5vdCBleGlzdC4gKi8KKwkvKiBGYXRoZXIgb2YgdGhlIGxlZnQgbmVpZ2hib3IgZG9lcyBub3QgZXhpc3QuICovCisJaWYgKCF0Yi0+RkxbaF0pCiAJCXJldHVybiAwOwogCiAJLyogQ2FsY3VsYXRlIGZhdGhlciBvZiB0aGUgbm9kZSB0byBiZSBiYWxhbmNlZC4gKi8KLQlwX3NfZmF0aGVyID0gUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2ggKyAxKTsKKwlmYXRoZXIgPSBQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCArIDEpOwogCi0JUkZBTFNFKCFwX3NfZmF0aGVyIHx8Ci0JICAgICAgICFCX0lTX0lOX1RSRUUocF9zX2ZhdGhlcikgfHwKLQkgICAgICAgIUJfSVNfSU5fVFJFRShwX3NfdGItPkZMW25faF0pIHx8Ci0JICAgICAgICFidWZmZXJfdXB0b2RhdGUocF9zX2ZhdGhlcikgfHwKLQkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZShwX3NfdGItPkZMW25faF0pLAorCVJGQUxTRSghZmF0aGVyIHx8CisJICAgICAgICFCX0lTX0lOX1RSRUUoZmF0aGVyKSB8fAorCSAgICAgICAhQl9JU19JTl9UUkVFKHRiLT5GTFtoXSkgfHwKKwkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZShmYXRoZXIpIHx8CisJICAgICAgICFidWZmZXJfdXB0b2RhdGUodGItPkZMW2hdKSwKIAkgICAgICAgInZzLTgxNjU6IEZbaF0gKCViKSBvciBGTFtoXSAoJWIpIGlzIGludmFsaWQiLAotCSAgICAgICBwX3NfZmF0aGVyLCBwX3NfdGItPkZMW25faF0pOworCSAgICAgICBmYXRoZXIsIHRiLT5GTFtoXSk7CiAKIAkvKiBHZXQgcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIgdG8gdGhlIGxlZnQgbmVpZ2hib3IgaW50byB0aGUgbGVmdCBmYXRoZXIuICovCi0Jbl9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uID0gKHBfc19mYXRoZXIgPT0gcF9zX3RiLT5GTFtuX2hdKSA/Ci0JICAgIHBfc190Yi0+bGtleVtuX2hdIDogQl9OUl9JVEVNUyhwX3NfdGItPkZMW25faF0pOworCWxlZnRfbmVpZ2hib3JfcG9zaXRpb24gPSAoZmF0aGVyID09IHRiLT5GTFtoXSkgPworCSAgICB0Yi0+bGtleVtoXSA6IEJfTlJfSVRFTVModGItPkZMW2hdKTsKIAkvKiBHZXQgbGVmdCBuZWlnaGJvciBibG9jayBudW1iZXIuICovCi0Jbl9sZWZ0X25laWdoYm9yX2Jsb2NrbnIgPQotCSAgICBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKTsKKwlsZWZ0X25laWdoYm9yX2Jsb2NrbnIgPQorCSAgICBCX05fQ0hJTERfTlVNKHRiLT5GTFtoXSwgbGVmdF9uZWlnaGJvcl9wb3NpdGlvbik7CiAJLyogTG9vayBmb3IgdGhlIGxlZnQgbmVpZ2hib3IgaW4gdGhlIGNhY2hlLiAqLwotCWlmICgobGVmdCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHBfc19zYiwgbl9sZWZ0X25laWdoYm9yX2Jsb2NrbnIpKSkgeworCWlmICgobGVmdCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBsZWZ0X25laWdoYm9yX2Jsb2NrbnIpKSkgewogCiAJCVJGQUxTRShidWZmZXJfdXB0b2RhdGUobGVmdCkgJiYgIUJfSVNfSU5fVFJFRShsZWZ0KSwKIAkJICAgICAgICJ2cy04MTcwOiBsZWZ0IG5laWdoYm9yICglYiAleikgaXMgbm90IGluIHRoZSB0cmVlIiwKQEAgLTkzOCwxMCArOTQwLDEwIEBACiAjZGVmaW5lIExFRlRfUEFSRU5UUyAgJ2wnCiAjZGVmaW5lIFJJR0hUX1BBUkVOVFMgJ3InCiAKLXN0YXRpYyB2b2lkIGRlY3JlbWVudF9rZXkoc3RydWN0IGNwdV9rZXkgKnBfc19rZXkpCitzdGF0aWMgdm9pZCBkZWNyZW1lbnRfa2V5KHN0cnVjdCBjcHVfa2V5ICprZXkpCiB7CiAJLy8gY2FsbCBpdGVtIHNwZWNpZmljIGZ1bmN0aW9uIGZvciB0aGlzIGtleQotCWl0ZW1fb3BzW2NwdV9rZXlfa190eXBlKHBfc19rZXkpXS0+ZGVjcmVtZW50X2tleShwX3Nfa2V5KTsKKwlpdGVtX29wc1tjcHVfa2V5X2tfdHlwZShrZXkpXS0+ZGVjcmVtZW50X2tleShrZXkpOwogfQogCiAvKiBDYWxjdWxhdGUgZmFyIGxlZnQvcmlnaHQgcGFyZW50IG9mIHRoZSBsZWZ0L3JpZ2h0IG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IG5vZGUsIHRoYXQKQEAgLTk1Miw3NyArOTU0LDc3IEBACiAgCQlTQ0hFRFVMRV9PQ0NVUlJFRCAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIENBUlJZX09OICAgICAgICAgLSBzY2hlZHVsZSBkaWRuJ3Qgb2NjdXIgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqLwotc3RhdGljIGludCBnZXRfZmFyX3BhcmVudChzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsCi0JCQkgIGludCBuX2gsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBwX3NfZmF0aGVyLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwcF9zX2NvbV9mYXRoZXIsIGNoYXIgY19scl9wYXIpCitzdGF0aWMgaW50IGdldF9mYXJfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCQkJICBpbnQgaCwKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGZhdGhlciwKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGNvbV9mYXRoZXIsIGNoYXIgY19scl9wYXIpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50OwogCUlOSVRJQUxJWkVfUEFUSChzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKLQlzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOworCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCA9IHRiLT50Yl9wYXRoOwogCXN0cnVjdCBjcHVfa2V5IHNfbHJfZmF0aGVyX2tleTsKLQlpbnQgbl9jb3VudGVyLAotCSAgICBuX3Bvc2l0aW9uID0gSU5UX01BWCwKLQkgICAgbl9maXJzdF9sYXN0X3Bvc2l0aW9uID0gMCwKLQkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfcGF0aCwgbl9oKTsKKwlpbnQgY291bnRlciwKKwkgICAgcG9zaXRpb24gPSBJTlRfTUFYLAorCSAgICBmaXJzdF9sYXN0X3Bvc2l0aW9uID0gMCwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocGF0aCwgaCk7CiAKLQkvKiBTdGFydGluZyBmcm9tIEZbbl9oXSBnbyB1cHdhcmRzIGluIHRoZSB0cmVlLCBhbmQgbG9vayBmb3IgdGhlIGNvbW1vbgotCSAgIGFuY2VzdG9yIG9mIEZbbl9oXSwgYW5kIGl0cyBuZWlnaGJvciBsL3IsIHRoYXQgc2hvdWxkIGJlIG9idGFpbmVkLiAqLworCS8qIFN0YXJ0aW5nIGZyb20gRltoXSBnbyB1cHdhcmRzIGluIHRoZSB0cmVlLCBhbmQgbG9vayBmb3IgdGhlIGNvbW1vbgorCSAgIGFuY2VzdG9yIG9mIEZbaF0sIGFuZCBpdHMgbmVpZ2hib3IgbC9yLCB0aGF0IHNob3VsZCBiZSBvYnRhaW5lZC4gKi8KIAotCW5fY291bnRlciA9IG5fcGF0aF9vZmZzZXQ7CisJY291bnRlciA9IHBhdGhfb2Zmc2V0OwogCi0JUkZBTFNFKG5fY291bnRlciA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKGNvdW50ZXIgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTgxODA6IGludmFsaWQgcGF0aCBsZW5ndGgiKTsKIAotCWZvciAoOyBuX2NvdW50ZXIgPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUOyBuX2NvdW50ZXItLSkgeworCWZvciAoOyBjb3VudGVyID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVDsgY291bnRlci0tKSB7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiB0aGUgcGF0aCBpcyByZWFsbHkgcGFyZW50IGluIHRoZSB0cmVlLiAqLwogCQlpZiAoIUJfSVNfSU5fVFJFRQotCQkgICAgKHBfc19wYXJlbnQgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX2NvdW50ZXIgLSAxKSkpCisJCSAgICAocGFyZW50ID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBjb3VudGVyIC0gMSkpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLAotCQkJCQkgIG5fY291bnRlciAtIDEpKSA+Ci0JCSAgICBCX05SX0lURU1TKHBfc19wYXJlbnQpKQorCQlpZiAoKHBvc2l0aW9uID0KKwkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLAorCQkJCQkgIGNvdW50ZXIgLSAxKSkgPgorCQkgICAgQl9OUl9JVEVNUyhwYXJlbnQpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9jb3VudGVyKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBjb3VudGVyKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIFJldHVybiBkZWxpbWl0aW5nIGtleSBpZiBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIG5vdCBlcXVhbCB0byBmaXJzdC9sYXN0IG9uZS4gKi8KIAkJaWYgKGNfbHJfcGFyID09IFJJR0hUX1BBUkVOVFMpCi0JCQluX2ZpcnN0X2xhc3RfcG9zaXRpb24gPSBCX05SX0lURU1TKHBfc19wYXJlbnQpOwotCQlpZiAobl9wb3NpdGlvbiAhPSBuX2ZpcnN0X2xhc3RfcG9zaXRpb24pIHsKLQkJCSpwcF9zX2NvbV9mYXRoZXIgPSBwX3NfcGFyZW50OwotCQkJZ2V0X2JoKCpwcF9zX2NvbV9mYXRoZXIpOwotCQkJLyooKnBwX3NfY29tX2ZhdGhlciA9IHBfc19wYXJlbnQpLT5iX2NvdW50Kys7ICovCisJCQlmaXJzdF9sYXN0X3Bvc2l0aW9uID0gQl9OUl9JVEVNUyhwYXJlbnQpOworCQlpZiAocG9zaXRpb24gIT0gZmlyc3RfbGFzdF9wb3NpdGlvbikgeworCQkJKnBjb21fZmF0aGVyID0gcGFyZW50OworCQkJZ2V0X2JoKCpwY29tX2ZhdGhlcik7CisJCQkvKigqcGNvbV9mYXRoZXIgPSBwYXJlbnQpLT5iX2NvdW50Kys7ICovCiAJCQlicmVhazsKIAkJfQogCX0KIAogCS8qIGlmIHdlIGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgdGhlbiB0aGVyZSBpcyBubyBjb21tb24gZmF0aGVyICovCi0JaWYgKG5fY291bnRlciA9PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJaWYgKGNvdW50ZXIgPT0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCQkvKiBDaGVjayB3aGV0aGVyIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcGF0aCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZS4gKi8KIAkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJICAgIChwX3NfdGItPnRiX3BhdGgsCisJCSAgICAodGItPnRiX3BhdGgsCiAJCSAgICAgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPmJfYmxvY2tuciA9PQotCQkgICAgU0JfUk9PVF9CTE9DSyhwX3NfdGItPnRiX3NiKSkgewotCQkJKnBwX3NfZmF0aGVyID0gKnBwX3NfY29tX2ZhdGhlciA9IE5VTEw7CisJCSAgICBTQl9ST09UX0JMT0NLKHRiLT50Yl9zYikpIHsKKwkJCSpwZmF0aGVyID0gKnBjb21fZmF0aGVyID0gTlVMTDsKIAkJCXJldHVybiBDQVJSWV9PTjsKIAkJfQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAl9CiAKLQlSRkFMU0UoQl9MRVZFTCgqcHBfc19jb21fZmF0aGVyKSA8PSBESVNLX0xFQUZfTk9ERV9MRVZFTCwKKwlSRkFMU0UoQl9MRVZFTCgqcGNvbV9mYXRoZXIpIDw9IERJU0tfTEVBRl9OT0RFX0xFVkVMLAogCSAgICAgICAiUEFQLTgxODU6ICglYiAleikgbGV2ZWwgdG9vIHNtYWxsIiwKLQkgICAgICAgKnBwX3NfY29tX2ZhdGhlciwgKnBwX3NfY29tX2ZhdGhlcik7CisJICAgICAgICpwY29tX2ZhdGhlciwgKnBjb21fZmF0aGVyKTsKIAogCS8qIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1vbiBwYXJlbnQgaXMgbG9ja2VkLiAqLwogCi0JaWYgKGJ1ZmZlcl9sb2NrZWQoKnBwX3NfY29tX2ZhdGhlcikpIHsKLQkJX193YWl0X29uX2J1ZmZlcigqcHBfc19jb21fZmF0aGVyKTsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7Ci0JCQlkZWNyZW1lbnRfYmNvdW50KCpwcF9zX2NvbV9mYXRoZXIpOworCWlmIChidWZmZXJfbG9ja2VkKCpwY29tX2ZhdGhlcikpIHsKKwkJX193YWl0X29uX2J1ZmZlcigqcGNvbV9mYXRoZXIpOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgeworCQkJYnJlbHNlKCpwY29tX2ZhdGhlcik7CiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJfQogCX0KQEAgLTEwMzIsMTI4ICsxMDM0LDEzMSBAQAogCiAJLyogRm9ybSBrZXkgdG8gZ2V0IHBhcmVudCBvZiB0aGUgbGVmdC9yaWdodCBuZWlnaGJvci4gKi8KIAlsZV9rZXkyY3B1X2tleSgmc19scl9mYXRoZXJfa2V5LAotCQkgICAgICAgQl9OX1BERUxJTV9LRVkoKnBwX3NfY29tX2ZhdGhlciwKKwkJICAgICAgIEJfTl9QREVMSU1fS0VZKCpwY29tX2ZhdGhlciwKIAkJCQkgICAgICAoY19scl9wYXIgPT0KLQkJCQkgICAgICAgTEVGVF9QQVJFTlRTKSA/IChwX3NfdGItPmxrZXlbbl9oIC0gMV0gPQotCQkJCQkJCW5fcG9zaXRpb24gLQotCQkJCQkJCTEpIDogKHBfc190Yi0+cmtleVtuX2ggLQorCQkJCSAgICAgICBMRUZUX1BBUkVOVFMpID8gKHRiLT5sa2V5W2ggLSAxXSA9CisJCQkJCQkJcG9zaXRpb24gLQorCQkJCQkJCTEpIDogKHRiLT5ya2V5W2ggLQogCQkJCQkJCQkJICAgMV0gPQotCQkJCQkJCSAgICAgIG5fcG9zaXRpb24pKSk7CisJCQkJCQkJICAgICAgcG9zaXRpb24pKSk7CiAKIAlpZiAoY19scl9wYXIgPT0gTEVGVF9QQVJFTlRTKQogCQlkZWNyZW1lbnRfa2V5KCZzX2xyX2ZhdGhlcl9rZXkpOwogCiAJaWYgKHNlYXJjaF9ieV9rZXkKLQkgICAgKHBfc190Yi0+dGJfc2IsICZzX2xyX2ZhdGhlcl9rZXksICZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLAotCSAgICAgbl9oICsgMSkgPT0gSU9fRVJST1IpCisJICAgICh0Yi0+dGJfc2IsICZzX2xyX2ZhdGhlcl9rZXksICZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLAorCSAgICAgaCArIDEpID09IElPX0VSUk9SKQogCQkvLyBwYXRoIGlzIHJlbGVhc2VkCiAJCXJldHVybiBJT19FUlJPUjsKIAotCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7Ci0JCWRlY3JlbWVudF9iY291bnQoKnBwX3NfY29tX2ZhdGhlcik7CisJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJcGF0aHJlbHNlKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKKwkJYnJlbHNlKCpwY29tX2ZhdGhlcik7CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KIAotCSpwcF9zX2ZhdGhlciA9IFBBVEhfUExBU1RfQlVGRkVSKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKKwkqcGZhdGhlciA9IFBBVEhfUExBU1RfQlVGRkVSKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKIAotCVJGQUxTRShCX0xFVkVMKCpwcF9zX2ZhdGhlcikgIT0gbl9oICsgMSwKLQkgICAgICAgIlBBUC04MTkwOiAoJWIgJXopIGxldmVsIHRvbyBzbWFsbCIsICpwcF9zX2ZhdGhlciwgKnBwX3NfZmF0aGVyKTsKKwlSRkFMU0UoQl9MRVZFTCgqcGZhdGhlcikgIT0gaCArIDEsCisJICAgICAgICJQQVAtODE5MDogKCViICV6KSBsZXZlbCB0b28gc21hbGwiLCAqcGZhdGhlciwgKnBmYXRoZXIpOwogCVJGQUxTRShzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLnBhdGhfbGVuZ3RoIDwKIAkgICAgICAgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwgIlBBUC04MTkyOiBwYXRoIGxlbmd0aCBpcyB0b28gc21hbGwiKTsKIAogCXNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIucGF0aF9sZW5ndGgtLTsKLQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CisJcGF0aHJlbHNlKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKIAlyZXR1cm4gQ0FSUllfT047CiB9CiAKLS8qIEdldCBwYXJlbnRzIG9mIG5laWdoYm9ycyBvZiBub2RlIGluIHRoZSBwYXRoKFNbbl9wYXRoX29mZnNldF0pIGFuZCBjb21tb24gcGFyZW50cyBvZgotICogU1tuX3BhdGhfb2Zmc2V0XSBhbmQgTFtuX3BhdGhfb2Zmc2V0XS9SW25fcGF0aF9vZmZzZXRdOiBGW25fcGF0aF9vZmZzZXRdLCBGTFtuX3BhdGhfb2Zmc2V0XSwKLSAqIEZSW25fcGF0aF9vZmZzZXRdLCBDRkxbbl9wYXRoX29mZnNldF0sIENGUltuX3BhdGhfb2Zmc2V0XS4KLSAqIENhbGN1bGF0ZSBudW1iZXJzIG9mIGxlZnQgYW5kIHJpZ2h0IGRlbGltaXRpbmcga2V5cyBwb3NpdGlvbjogbGtleVtuX3BhdGhfb2Zmc2V0XSwgcmtleVtuX3BhdGhfb2Zmc2V0XS4KKy8qIEdldCBwYXJlbnRzIG9mIG5laWdoYm9ycyBvZiBub2RlIGluIHRoZSBwYXRoKFNbcGF0aF9vZmZzZXRdKSBhbmQgY29tbW9uIHBhcmVudHMgb2YKKyAqIFNbcGF0aF9vZmZzZXRdIGFuZCBMW3BhdGhfb2Zmc2V0XS9SW3BhdGhfb2Zmc2V0XTogRltwYXRoX29mZnNldF0sIEZMW3BhdGhfb2Zmc2V0XSwKKyAqIEZSW3BhdGhfb2Zmc2V0XSwgQ0ZMW3BhdGhfb2Zmc2V0XSwgQ0ZSW3BhdGhfb2Zmc2V0XS4KKyAqIENhbGN1bGF0ZSBudW1iZXJzIG9mIGxlZnQgYW5kIHJpZ2h0IGRlbGltaXRpbmcga2V5cyBwb3NpdGlvbjogbGtleVtwYXRoX29mZnNldF0sIHJrZXlbcGF0aF9vZmZzZXRdLgogICogUmV0dXJuczoJU0NIRURVTEVfT0NDVVJSRUQgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICBDQVJSWV9PTiAtIHNjaGVkdWxlIGRpZG4ndCBvY2N1ciB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICovCi1zdGF0aWMgaW50IGdldF9wYXJlbnRzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X3BhcmVudHMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7Ci0JaW50IG5fcG9zaXRpb24sCi0JICAgIG5fcmV0X3ZhbHVlLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19jdXJmLCAqcF9zX2N1cmNmOworCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCA9IHRiLT50Yl9wYXRoOworCWludCBwb3NpdGlvbiwKKwkgICAgcmV0LAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwgaCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpjdXJmLCAqY3VyY2Y7CiAKIAkvKiBDdXJyZW50IG5vZGUgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgb3Igd2lsbCBiZSByb290IG9mIHRoZSB0cmVlICovCi0JaWYgKG5fcGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCWlmIChwYXRoX29mZnNldCA8PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAJCS8qIFRoZSByb290IGNhbiBub3QgaGF2ZSBwYXJlbnRzLgogCQkgICBSZWxlYXNlIG5vZGVzIHdoaWNoIHByZXZpb3VzbHkgd2VyZSBvYnRhaW5lZCBhcyBwYXJlbnRzIG9mIHRoZSBjdXJyZW50IG5vZGUgbmVpZ2hib3JzLiAqLwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Rkxbbl9oXSk7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRkxbbl9oXSk7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GUltuX2hdKTsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGUltuX2hdKTsKLQkJcF9zX3RiLT5GTFtuX2hdID0gcF9zX3RiLT5DRkxbbl9oXSA9IHBfc190Yi0+RlJbbl9oXSA9Ci0JCSAgICBwX3NfdGItPkNGUltuX2hdID0gTlVMTDsKKwkJYnJlbHNlKHRiLT5GTFtoXSk7CisJCWJyZWxzZSh0Yi0+Q0ZMW2hdKTsKKwkJYnJlbHNlKHRiLT5GUltoXSk7CisJCWJyZWxzZSh0Yi0+Q0ZSW2hdKTsKKwkJdGItPkZMW2hdICA9IE5VTEw7CisJCXRiLT5DRkxbaF0gPSBOVUxMOworCQl0Yi0+RlJbaF0gID0gTlVMTDsKKwkJdGItPkNGUltoXSA9IE5VTEw7CiAJCXJldHVybiBDQVJSWV9PTjsKIAl9CiAKLQkvKiBHZXQgcGFyZW50IEZMW25fcGF0aF9vZmZzZXRdIG9mIExbbl9wYXRoX29mZnNldF0uICovCi0JaWYgKChuX3Bvc2l0aW9uID0gUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSkpIHsKKwkvKiBHZXQgcGFyZW50IEZMW3BhdGhfb2Zmc2V0XSBvZiBMW3BhdGhfb2Zmc2V0XS4gKi8KKwlwb3NpdGlvbiA9IFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJaWYgKHBvc2l0aW9uKSB7CiAJCS8qIEN1cnJlbnQgbm9kZSBpcyBub3QgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQuICovCi0JCS8qKHBfc19jdXJmID0gcF9zX2N1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpKS0+Yl9jb3VudCArPSAyOyAqLwotCQlwX3NfY3VyZiA9IHBfc19jdXJjZiA9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSk7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCXBfc190Yi0+bGtleVtuX2hdID0gbl9wb3NpdGlvbiAtIDE7CisJCWN1cmYgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWN1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCQlnZXRfYmgoY3VyZik7CisJCWdldF9iaChjdXJmKTsKKwkJdGItPmxrZXlbaF0gPSBwb3NpdGlvbiAtIDE7CiAJfSBlbHNlIHsKLQkJLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIExbbl9wYXRoX29mZnNldF0sIHdoaWNoIGlzIHRoZSBsZWZ0IG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IG5vZGUuCi0JCSAgIENhbGN1bGF0ZSBjdXJyZW50IGNvbW1vbiBwYXJlbnQgb2YgTFtuX3BhdGhfb2Zmc2V0XSBhbmQgdGhlIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0Ci0JCSAgIENGTFtuX3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRkxbbl9wYXRoX29mZnNldF0gYW5kIENGTFtuX3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRltuX3BhdGhfb2Zmc2V0XS4KLQkJICAgQ2FsY3VsYXRlIGxrZXlbbl9wYXRoX29mZnNldF0uICovCi0JCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfZmFyX3BhcmVudChwX3NfdGIsIG5faCArIDEsICZwX3NfY3VyZiwKLQkJCQkJCSAgJnBfc19jdXJjZiwKKwkJLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIExbcGF0aF9vZmZzZXRdLCB3aGljaCBpcyB0aGUgbGVmdCBuZWlnaGJvciBvZiB0aGUgY3VycmVudCBub2RlLgorCQkgICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIExbcGF0aF9vZmZzZXRdIGFuZCB0aGUgY3VycmVudCBub2RlLiBOb3RlIHRoYXQKKwkJICAgQ0ZMW3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRkxbcGF0aF9vZmZzZXRdIGFuZCBDRkxbcGF0aF9vZmZzZXRdIG5vdCBlcXVhbCBGW3BhdGhfb2Zmc2V0XS4KKwkJICAgQ2FsY3VsYXRlIGxrZXlbcGF0aF9vZmZzZXRdLiAqLworCQlpZiAoKHJldCA9IGdldF9mYXJfcGFyZW50KHRiLCBoICsgMSwgJmN1cmYsCisJCQkJCQkgICZjdXJjZiwKIAkJCQkJCSAgTEVGVF9QQVJFTlRTKSkgIT0gQ0FSUllfT04pCi0JCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQlyZXR1cm4gcmV0OwogCX0KIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GTFtuX2hdKTsKLQlwX3NfdGItPkZMW25faF0gPSBwX3NfY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZMW25faF0uICovCi0JZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGTFtuX2hdKTsKLQlwX3NfdGItPkNGTFtuX2hdID0gcF9zX2N1cmNmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgQ0ZMW25faF0uICovCisJYnJlbHNlKHRiLT5GTFtoXSk7CisJdGItPkZMW2hdID0gY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZMW2hdLiAqLworCWJyZWxzZSh0Yi0+Q0ZMW2hdKTsKKwl0Yi0+Q0ZMW2hdID0gY3VyY2Y7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBDRkxbaF0uICovCiAKLQlSRkFMU0UoKHBfc19jdXJmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmYpKSB8fAotCSAgICAgICAocF9zX2N1cmNmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmNmKSksCi0JICAgICAgICJQQVAtODE5NTogRkwgKCViKSBvciBDRkwgKCViKSBpcyBpbnZhbGlkIiwgcF9zX2N1cmYsIHBfc19jdXJjZik7CisJUkZBTFNFKChjdXJmICYmICFCX0lTX0lOX1RSRUUoY3VyZikpIHx8CisJICAgICAgIChjdXJjZiAmJiAhQl9JU19JTl9UUkVFKGN1cmNmKSksCisJICAgICAgICJQQVAtODE5NTogRkwgKCViKSBvciBDRkwgKCViKSBpcyBpbnZhbGlkIiwgY3VyZiwgY3VyY2YpOwogCi0vKiBHZXQgcGFyZW50IEZSW25faF0gb2YgUltuX2hdLiAqLworLyogR2V0IHBhcmVudCBGUltoXSBvZiBSW2hdLiAqLwogCi0vKiBDdXJyZW50IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgRltuX2hdLiBGUltuX2hdICE9IEZbbl9oXS4gKi8KLQlpZiAobl9wb3NpdGlvbiA9PSBCX05SX0lURU1TKFBBVEhfSF9QQlVGRkVSKHBfc19wYXRoLCBuX2ggKyAxKSkpIHsKLS8qIENhbGN1bGF0ZSBjdXJyZW50IHBhcmVudCBvZiBSW25faF0sIHdoaWNoIGlzIHRoZSByaWdodCBuZWlnaGJvciBvZiBGW25faF0uCi0gICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIFJbbl9oXSBhbmQgY3VycmVudCBub2RlLiBOb3RlIHRoYXQgQ0ZSW25faF0KLSAgIG5vdCBlcXVhbCBGUltuX3BhdGhfb2Zmc2V0XSBhbmQgQ0ZSW25faF0gbm90IGVxdWFsIEZbbl9oXS4gKi8KLQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCSAgICAgZ2V0X2Zhcl9wYXJlbnQocF9zX3RiLCBuX2ggKyAxLCAmcF9zX2N1cmYsICZwX3NfY3VyY2YsCisvKiBDdXJyZW50IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgRltoXS4gRlJbaF0gIT0gRltoXS4gKi8KKwlpZiAocG9zaXRpb24gPT0gQl9OUl9JVEVNUyhQQVRIX0hfUEJVRkZFUihwYXRoLCBoICsgMSkpKSB7CisvKiBDYWxjdWxhdGUgY3VycmVudCBwYXJlbnQgb2YgUltoXSwgd2hpY2ggaXMgdGhlIHJpZ2h0IG5laWdoYm9yIG9mIEZbaF0uCisgICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIFJbaF0gYW5kIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0IENGUltoXQorICAgbm90IGVxdWFsIEZSW3BhdGhfb2Zmc2V0XSBhbmQgQ0ZSW2hdIG5vdCBlcXVhbCBGW2hdLiAqLworCQlpZiAoKHJldCA9CisJCSAgICAgZ2V0X2Zhcl9wYXJlbnQodGIsIGggKyAxLCAmY3VyZiwgJmN1cmNmLAogCQkJCSAgICBSSUdIVF9QQVJFTlRTKSkgIT0gQ0FSUllfT04pCi0JCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7Ci0vKiBDdXJyZW50IG5vZGUgaXMgbm90IHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgRltuX2hdLiAqLwotCQkvKihwX3NfY3VyZiA9IHBfc19jdXJjZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSktPmJfY291bnQgKz0gMjsgKi8KLQkJcF9zX2N1cmYgPSBwX3NfY3VyY2YgPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlwX3NfdGItPnJrZXlbbl9oXSA9IG5fcG9zaXRpb247CisvKiBDdXJyZW50IG5vZGUgaXMgbm90IHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgRltoXS4gKi8KKwkJY3VyZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwkJY3VyY2YgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWdldF9iaChjdXJmKTsKKwkJZ2V0X2JoKGN1cmYpOworCQl0Yi0+cmtleVtoXSA9IHBvc2l0aW9uOwogCX0KIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GUltuX2hdKTsKLQlwX3NfdGItPkZSW25faF0gPSBwX3NfY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZSW25fcGF0aF9vZmZzZXRdLiAqLworCWJyZWxzZSh0Yi0+RlJbaF0pOworCS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBGUltwYXRoX29mZnNldF0uICovCisJdGItPkZSW2hdID0gY3VyZjsKIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRlJbbl9oXSk7Ci0JcF9zX3RiLT5DRlJbbl9oXSA9IHBfc19jdXJjZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGUltuX3BhdGhfb2Zmc2V0XS4gKi8KKwlicmVsc2UodGItPkNGUltoXSk7CisJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGUltwYXRoX29mZnNldF0uICovCisJdGItPkNGUltoXSA9IGN1cmNmOwogCi0JUkZBTFNFKChwX3NfY3VyZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJmKSkgfHwKLQkgICAgICAgKHBfc19jdXJjZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJjZikpLAotCSAgICAgICAiUEFQLTgyMDU6IEZSICglYikgb3IgQ0ZSICglYikgaXMgaW52YWxpZCIsIHBfc19jdXJmLCBwX3NfY3VyY2YpOworCVJGQUxTRSgoY3VyZiAmJiAhQl9JU19JTl9UUkVFKGN1cmYpKSB8fAorCSAgICAgICAoY3VyY2YgJiYgIUJfSVNfSU5fVFJFRShjdXJjZikpLAorCSAgICAgICAiUEFQLTgyMDU6IEZSICglYikgb3IgQ0ZSICglYikgaXMgaW52YWxpZCIsIGN1cmYsIGN1cmNmKTsKIAogCXJldHVybiBDQVJSWV9PTjsKIH0KQEAgLTEyMDMsNyArMTIwOCw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xMjE3LDcgKzEyMjIsNyBAQAogCQkJCSAgIGNvbnRhaW5zIG5vZGUgYmVpbmcgYmFsYW5jZWQuICBUaGUgbW5lbW9uaWMgaXMKIAkJCQkgICB0aGF0IHRoZSBhdHRlbXB0ZWQgY2hhbmdlIGluIG5vZGUgc3BhY2UgdXNlZCBsZXZlbAogCQkJCSAgIGlzIGxldmJ5dGVzIGJ5dGVzLiAqLwotCSBuX3JldF92YWx1ZTsKKwkgcmV0OwogCiAJaW50IGxmcmVlLCBzZnJlZSwgcmZyZWUgLyogZnJlZSBzcGFjZSBpbiBMLCBTIGFuZCBSICovIDsKIApAQCAtMTIzOCw3ICsxMjQzLDcgQEAKIAkvKiB3ZSBwZXJmb3JtIDggY2FsbHMgdG8gZ2V0X251bV92ZXIoKS4gIEZvciBlYWNoIGNhbGwgd2UgY2FsY3VsYXRlIGZpdmUgcGFyYW1ldGVycy4KIAkgICB3aGVyZSA0dGggcGFyYW1ldGVyIGlzIHMxYnl0ZXMgYW5kIDV0aCAtIHMyYnl0ZXMKIAkgKi8KLQlzaG9ydCBzbnVtMDEyWzQwXSA9IHsgMCwgfTsJLyogczBudW0sIHMxbnVtLCBzMm51bSBmb3IgOCBjYXNlcyAKKwlzaG9ydCBzbnVtMDEyWzQwXSA9IHsgMCwgfTsJLyogczBudW0sIHMxbnVtLCBzMm51bSBmb3IgOCBjYXNlcwogCQkJCQkgICAwLDEgLSBkbyBub3Qgc2hpZnQgYW5kIGRvIG5vdCBzaGlmdCBidXQgYm90dGxlCiAJCQkJCSAgIDIgLSBzaGlmdCBvbmx5IHdob2xlIGl0ZW0gdG8gbGVmdAogCQkJCQkgICAzIC0gc2hpZnQgdG8gbGVmdCBhbmQgYm90dGxlIGFzIG11Y2ggYXMgcG9zc2libGUKQEAgLTEyNTUsMjQgKzEyNjAsMjQgQEAKIAkvKiBDYWxjdWxhdGUgYmFsYW5jZSBwYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgcm9vdC4gKi8KIAlpZiAoIVNoKSB7CiAJCWlmICghaCkKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgInZzLTgyMTA6IGlwX2NoZWNrX2JhbGFuY2U6IFNbMF0gY2FuIG5vdCBiZSAwIik7Ci0JCXN3aXRjaCAobl9yZXRfdmFsdWUgPSBnZXRfZW1wdHlfbm9kZXModGIsIGgpKSB7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MjEwIiwKKwkJCQkgICAgICAgIlNbMF0gY2FuIG5vdCBiZSAwIik7CisJCXN3aXRjaCAocmV0ID0gZ2V0X2VtcHR5X25vZGVzKHRiLCBoKSkgewogCQljYXNlIENBUlJZX09OOgogCQkJc2V0X3BhcmFtZXRlcnModGIsIGgsIDAsIDAsIDEsIE5VTEwsIC0xLCAtMSk7CiAJCQlyZXR1cm4gTk9fQkFMQU5DSU5HX05FRURFRDsJLyogbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZCAqLwogCiAJCWNhc2UgTk9fRElTS19TUEFDRToKIAkJY2FzZSBSRVBFQVRfU0VBUkNIOgotCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJcmV0dXJuIHJldDsKIAkJZGVmYXVsdDoKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgInZzLTgyMTU6IGlwX2NoZWNrX2JhbGFuY2U6IGluY29ycmVjdCByZXR1cm4gdmFsdWUgb2YgZ2V0X2VtcHR5X25vZGVzIik7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MjE1IiwgImluY29ycmVjdCAiCisJCQkJICAgICAgICJyZXR1cm4gdmFsdWUgb2YgZ2V0X2VtcHR5X25vZGVzIik7CiAJCX0KIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikJLyogZ2V0IHBhcmVudHMgb2YgU1toXSBuZWlnaGJvcnMuICovCi0JCXJldHVybiBuX3JldF92YWx1ZTsKKwlpZiAoKHJldCA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCS8qIGdldCBwYXJlbnRzIG9mIFNbaF0gbmVpZ2hib3JzLiAqLworCQlyZXR1cm4gcmV0OwogCiAJc2ZyZWUgPSBCX0ZSRUVfU1BBQ0UoU2gpOwogCkBAIC0xMjg3LDcgKzEyOTIsNyBAQAogCiAJY3JlYXRlX3ZpcnR1YWxfbm9kZSh0YiwgaCk7CiAKLQkvKiAgCisJLyoKIAkgICBkZXRlcm1pbmUgbWF4aW1hbCBudW1iZXIgb2YgaXRlbXMgd2UgY2FuIHNoaWZ0IHRvIHRoZSBsZWZ0IG5laWdoYm9yIChpbiB0YiBzdHJ1Y3R1cmUpCiAJICAgYW5kIHRoZSBtYXhpbWFsIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBmbG93IHRvIHRoZSBsZWZ0IG5laWdoYm9yCiAJICAgZnJvbSB0aGUgbGVmdCBtb3N0IGxpcXVpZCBpdGVtIHRoYXQgY2Fubm90IGJlIHNoaWZ0ZWQgZnJvbSBTWzBdIGVudGlyZWx5IChyZXR1cm5lZCB2YWx1ZSkKQEAgLTEzNDgsMTMgKzEzNTMsMTMgQEAKIAogCXsKIAkJaW50IGxwYXIsIHJwYXIsIG5zZXQsIGxzZXQsIHJzZXQsIGxyc2V0OwotCQkvKiAKKwkJLyoKIAkJICogcmVndWxhciBvdmVyZmxvd2luZyBvZiB0aGUgbm9kZQogCQkgKi8KIAotCQkvKiBnZXRfbnVtX3ZlciB3b3JrcyBpbiAyIG1vZGVzIChGTE9XICYgTk9fRkxPVykgCisJCS8qIGdldF9udW1fdmVyIHdvcmtzIGluIDIgbW9kZXMgKEZMT1cgJiBOT19GTE9XKQogCQkgICBscGFyLCBycGFyIC0gbnVtYmVyIG9mIGl0ZW1zIHdlIGNhbiBzaGlmdCB0byBsZWZ0L3JpZ2h0IG5laWdoYm9yIChpbmNsdWRpbmcgc3BsaXR0aW5nIGl0ZW0pCi0JCSAgIG5zZXQsIGxzZXQsIHJzZXQsIGxyc2V0IC0gc2hvd3MsIHdoZXRoZXIgZmxvd2luZyBpdGVtcyBnaXZlIGJldHRlciBwYWNraW5nIAorCQkgICBuc2V0LCBsc2V0LCByc2V0LCBscnNldCAtIHNob3dzLCB3aGV0aGVyIGZsb3dpbmcgaXRlbXMgZ2l2ZSBiZXR0ZXIgcGFja2luZwogCQkgKi8KICNkZWZpbmUgRkxPVyAxCiAjZGVmaW5lIE5PX0ZMT1cgMAkJLyogZG8gbm90IGFueSBzcGxpdHRpbmcgKi8KQEAgLTE1NDQsNyArMTU0OSw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xNTU5LDcgKzE1NjQsNyBAQAogCS8qIFNoIGlzIHRoZSBub2RlIHdob3NlIGJhbGFuY2UgaXMgY3VycmVudGx5IGJlaW5nIGNoZWNrZWQsCiAJICAgYW5kIEZoIGlzIGl0cyBmYXRoZXIuICAqLwogCXN0cnVjdCBidWZmZXJfaGVhZCAqU2gsICpGaDsKLQlpbnQgbWF4c2l6ZSwgbl9yZXRfdmFsdWU7CisJaW50IG1heHNpemUsIHJldDsKIAlpbnQgbGZyZWUsIHJmcmVlIC8qIGZyZWUgc3BhY2UgaW4gTCBhbmQgUiAqLyA7CiAKIAlTaCA9IFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoKTsKQEAgLTE1ODQsOCArMTU4OSw4IEBACiAJCXJldHVybiBDQVJSWV9PTjsKIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCWlmICgocmV0ID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKKwkJcmV0dXJuIHJldDsKIAogCS8qIGdldCBmcmVlIHNwYWNlIG9mIG5laWdoYm9ycyAqLwogCXJmcmVlID0gZ2V0X3JmcmVlKHRiLCBoKTsKQEAgLTE3MjcsNyArMTczMiw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xNzQyLDcgKzE3NDcsNyBAQAogCSAgIGF0dGVtcHRlZCBjaGFuZ2UgaW4gbm9kZSBzcGFjZSB1c2VkIGxldmVsIGlzIGxldmJ5dGVzIGJ5dGVzLiAqLwogCWludCBsZXZieXRlczsKIAkvKiB0aGUgbWF4aW1hbCBpdGVtIHNpemUgKi8KLQlpbnQgbWF4c2l6ZSwgbl9yZXRfdmFsdWU7CisJaW50IG1heHNpemUsIHJldDsKIAkvKiBTMCBpcyB0aGUgbm9kZSB3aG9zZSBiYWxhbmNlIGlzIGN1cnJlbnRseSBiZWluZyBjaGVja2VkLAogCSAgIGFuZCBGMCBpcyBpdHMgZmF0aGVyLiAgKi8KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKlMwLCAqRjA7CkBAIC0xNzY0LDggKzE3NjksOCBAQAogCQlyZXR1cm4gTk9fQkFMQU5DSU5HX05FRURFRDsKIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCWlmICgocmV0ID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKKwkJcmV0dXJuIHJldDsKIAogCS8qIGdldCBmcmVlIHNwYWNlIG9mIG5laWdoYm9ycyAqLwogCXJmcmVlID0gZ2V0X3JmcmVlKHRiLCBoKTsKQEAgLTE4MjEsNyArMTgyNiw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWQgLSBkZWxldGUsIGMgLSBjdXQuCi0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTg1MCw3ICsxODU1LDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJaSAtIGluc2VydCwgcCAtIHBhc3RlLCBkIC0gZGVsZXRlLCBjIC0gY3V0LgotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTE4ODQsMTM3ICsxODg5LDEzOCBAQAogfQogCiAvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBhdCB0aGUgcGF0aCBpcyB0aGUgcmVhbGx5IHBhcmVudCBvZiB0aGUgY3VycmVudCBub2RlLiovCi1zdGF0aWMgaW50IGdldF9kaXJlY3RfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X2RpcmVjdF9wYXJlbnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOwotCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7Ci0JaW50IG5fcG9zaXRpb24sCi0JICAgIG5fcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3RiLT50Yl9wYXRoLCBuX2gpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJc3RydWN0IHRyZWVwYXRoICpwYXRoID0gdGItPnRiX3BhdGg7CisJaW50IHBvc2l0aW9uLAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwgaCk7CiAKIAkvKiBXZSBhcmUgaW4gdGhlIHJvb3Qgb3IgaW4gdGhlIG5ldyByb290LiAqLwotCWlmIChuX3BhdGhfb2Zmc2V0IDw9IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwlpZiAocGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCi0JCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCAtIDEsCisJCVJGQUxTRShwYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQgLSAxLAogCQkgICAgICAgIlBBUC04MjYwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCi0JCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+Ci0JCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3NfdGItPnRiX3NiKSkgeworCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyh0Yi0+dGJfc2IpKSB7CiAJCQkvKiBSb290IGlzIG5vdCBjaGFuZ2VkLiAqLwotCQkJUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpID0gTlVMTDsKLQkJCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkgPSAwOworCQkJUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpID0gTlVMTDsKKwkJCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSkgPSAwOwogCQkJcmV0dXJuIENBUlJZX09OOwogCQl9CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwkvKiBSb290IGlzIGNoYW5nZWQgYW5kIHdlIG11c3QgcmVjYWxjdWxhdGUgdGhlIHBhdGguICovCiAJfQogCiAJaWYgKCFCX0lTX0lOX1RSRUUKLQkgICAgKHBfc19iaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSkpCisJICAgIChiaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKSkpCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwkvKiBQYXJlbnQgaW4gdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlLiAqLwogCi0JaWYgKChuX3Bvc2l0aW9uID0KLQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLAotCQkJCSAgbl9wYXRoX29mZnNldCAtIDEpKSA+IEJfTlJfSVRFTVMocF9zX2JoKSkKKwlpZiAoKHBvc2l0aW9uID0KKwkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsCisJCQkJICBwYXRoX29mZnNldCAtIDEpKSA+IEJfTlJfSVRFTVMoYmgpKQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAotCWlmIChCX05fQ0hJTERfTlVNKHBfc19iaCwgbl9wb3NpdGlvbikgIT0KLQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCktPmJfYmxvY2tucikKKwlpZiAoQl9OX0NISUxEX05VTShiaCwgcG9zaXRpb24pICE9CisJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQpLT5iX2Jsb2NrbnIpCiAJCS8qIFBhcmVudCBpbiB0aGUgcGF0aCBpcyBub3QgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUgaW4gdGhlIHRyZWUuICovCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCi0JaWYgKGJ1ZmZlcl9sb2NrZWQocF9zX2JoKSkgewotCQlfX3dhaXRfb25fYnVmZmVyKHBfc19iaCk7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKKwlpZiAoYnVmZmVyX2xvY2tlZChiaCkpIHsKKwkJX193YWl0X29uX2J1ZmZlcihiaCk7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJfQogCiAJcmV0dXJuIENBUlJZX09OOwkvKiBQYXJlbnQgaW4gdGhlIHBhdGggaXMgdW5sb2NrZWQgYW5kIHJlYWxseSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZS4gICovCiB9CiAKLS8qIFVzaW5nIGxudW1bbl9oXSBhbmQgcm51bVtuX2hdIHdlIHNob3VsZCBkZXRlcm1pbmUgd2hhdCBuZWlnaGJvcnMKLSAqIG9mIFNbbl9oXSB3ZQotICogbmVlZCBpbiBvcmRlciB0byBiYWxhbmNlIFNbbl9oXSwgYW5kIGdldCB0aGVtIGlmIG5lY2Vzc2FyeS4KKy8qIFVzaW5nIGxudW1baF0gYW5kIHJudW1baF0gd2Ugc2hvdWxkIGRldGVybWluZSB3aGF0IG5laWdoYm9ycworICogb2YgU1toXSB3ZQorICogbmVlZCBpbiBvcmRlciB0byBiYWxhbmNlIFNbaF0sIGFuZCBnZXQgdGhlbSBpZiBuZWNlc3NhcnkuCiAgKiBSZXR1cm5zOglTQ0hFRFVMRV9PQ0NVUlJFRCAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIENBUlJZX09OIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKi8KLXN0YXRpYyBpbnQgZ2V0X25laWdoYm9ycyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9uZWlnaGJvcnMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCWludCBuX2NoaWxkX3Bvc2l0aW9uLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oICsgMSk7Ci0JdW5zaWduZWQgbG9uZyBuX3Nvbl9udW1iZXI7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOworCWludCBjaGlsZF9wb3NpdGlvbiwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQodGItPnRiX3BhdGgsIGggKyAxKTsKKwl1bnNpZ25lZCBsb25nIHNvbl9udW1iZXI7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHRiLT50Yl9zYjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNbbl9oXSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgZ2V0X25laWdoYm9yc1toXSk7CiAKLQlpZiAocF9zX3RiLT5sbnVtW25faF0pIHsKLQkJLyogV2UgbmVlZCBsZWZ0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1tuX2hdLiAqLwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgbmVlZF9sX25laWdoYm9yW25faF0pOwotCQlwX3NfYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9wYXRoX29mZnNldCk7CisJaWYgKHRiLT5sbnVtW2hdKSB7CisJCS8qIFdlIG5lZWQgbGVmdCBuZWlnaGJvciB0byBiYWxhbmNlIFNbaF0uICovCisJCVBST0NfSU5GT19JTkMoc2IsIG5lZWRfbF9uZWlnaGJvcltoXSk7CisJCWJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgcGF0aF9vZmZzZXQpOwogCi0JCVJGQUxTRShwX3NfYmggPT0gcF9zX3RiLT5GTFtuX2hdICYmCi0JCSAgICAgICAhUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoLCBuX3BhdGhfb2Zmc2V0KSwKKwkJUkZBTFNFKGJoID09IHRiLT5GTFtoXSAmJgorCQkgICAgICAgIVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCBwYXRoX29mZnNldCksCiAJCSAgICAgICAiUEFQLTgyNzA6IGludmFsaWQgcG9zaXRpb24gaW4gdGhlIHBhcmVudCIpOwogCi0JCW5fY2hpbGRfcG9zaXRpb24gPQotCQkgICAgKHBfc19iaCA9PQotCQkgICAgIHBfc190Yi0+Rkxbbl9oXSkgPyBwX3NfdGItPmxrZXlbbl9oXSA6IEJfTlJfSVRFTVMocF9zX3RiLT4KLQkJCQkJCQkJICAgICAgIEZMW25faF0pOwotCQluX3Nvbl9udW1iZXIgPSBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9jaGlsZF9wb3NpdGlvbik7Ci0JCXBfc19iaCA9IHNiX2JyZWFkKHBfc19zYiwgbl9zb25fbnVtYmVyKTsKLQkJaWYgKCFwX3NfYmgpCisJCWNoaWxkX3Bvc2l0aW9uID0KKwkJICAgIChiaCA9PQorCQkgICAgIHRiLT5GTFtoXSkgPyB0Yi0+bGtleVtoXSA6IEJfTlJfSVRFTVModGItPgorCQkJCQkJCQkgICAgICAgRkxbaF0pOworCQlzb25fbnVtYmVyID0gQl9OX0NISUxEX05VTSh0Yi0+RkxbaF0sIGNoaWxkX3Bvc2l0aW9uKTsKKwkJYmggPSBzYl9icmVhZChzYiwgc29uX251bWJlcik7CisJCWlmICghYmgpCiAJCQlyZXR1cm4gSU9fRVJST1I7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQkJZGVjcmVtZW50X2Jjb3VudChwX3NfYmgpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtuX2hdKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbaF0pOwogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCX0KIAotCQlSRkFMU0UoIUJfSVNfSU5fVFJFRShwX3NfdGItPkZMW25faF0pIHx8Ci0JCSAgICAgICBuX2NoaWxkX3Bvc2l0aW9uID4gQl9OUl9JVEVNUyhwX3NfdGItPkZMW25faF0pIHx8Ci0JCSAgICAgICBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9jaGlsZF9wb3NpdGlvbikgIT0KLQkJICAgICAgIHBfc19iaC0+Yl9ibG9ja25yLCAiUEFQLTgyNzU6IGludmFsaWQgcGFyZW50Iik7Ci0JCVJGQUxTRSghQl9JU19JTl9UUkVFKHBfc19iaCksICJQQVAtODI4MDogaW52YWxpZCBjaGlsZCIpOwotCQlSRkFMU0UoIW5faCAmJgotCQkgICAgICAgQl9GUkVFX1NQQUNFKHBfc19iaCkgIT0KLQkJICAgICAgIE1BWF9DSElMRF9TSVpFKHBfc19iaCkgLQotCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQocF9zX3RiLT5GTFswXSwgbl9jaGlsZF9wb3NpdGlvbikpLAorCQlSRkFMU0UoIUJfSVNfSU5fVFJFRSh0Yi0+RkxbaF0pIHx8CisJCSAgICAgICBjaGlsZF9wb3NpdGlvbiA+IEJfTlJfSVRFTVModGItPkZMW2hdKSB8fAorCQkgICAgICAgQl9OX0NISUxEX05VTSh0Yi0+RkxbaF0sIGNoaWxkX3Bvc2l0aW9uKSAhPQorCQkgICAgICAgYmgtPmJfYmxvY2tuciwgIlBBUC04Mjc1OiBpbnZhbGlkIHBhcmVudCIpOworCQlSRkFMU0UoIUJfSVNfSU5fVFJFRShiaCksICJQQVAtODI4MDogaW52YWxpZCBjaGlsZCIpOworCQlSRkFMU0UoIWggJiYKKwkJICAgICAgIEJfRlJFRV9TUEFDRShiaCkgIT0KKwkJICAgICAgIE1BWF9DSElMRF9TSVpFKGJoKSAtCisJCSAgICAgICBkY19zaXplKEJfTl9DSElMRCh0Yi0+RkxbMF0sIGNoaWxkX3Bvc2l0aW9uKSksCiAJCSAgICAgICAiUEFQLTgyOTA6IGludmFsaWQgY2hpbGQgc2l6ZSBvZiBsZWZ0IG5laWdoYm9yIik7CiAKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkxbbl9oXSk7Ci0JCXBfc190Yi0+TFtuX2hdID0gcF9zX2JoOworCQlicmVsc2UodGItPkxbaF0pOworCQl0Yi0+TFtoXSA9IGJoOwogCX0KIAotCWlmIChwX3NfdGItPnJudW1bbl9oXSkgewkvKiBXZSBuZWVkIHJpZ2h0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1tuX3BhdGhfb2Zmc2V0XS4gKi8KLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIG5lZWRfcl9uZWlnaGJvcltuX2hdKTsKLQkJcF9zX2JoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5fcGF0aF9vZmZzZXQpOworCS8qIFdlIG5lZWQgcmlnaHQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW3BhdGhfb2Zmc2V0XS4gKi8KKwlpZiAodGItPnJudW1baF0pIHsJLyogV2UgbmVlZCByaWdodCBuZWlnaGJvciB0byBiYWxhbmNlIFNbcGF0aF9vZmZzZXRdLiAqLworCQlQUk9DX0lORk9fSU5DKHNiLCBuZWVkX3JfbmVpZ2hib3JbaF0pOworCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsIHBhdGhfb2Zmc2V0KTsKIAotCQlSRkFMU0UocF9zX2JoID09IHBfc190Yi0+RlJbbl9oXSAmJgotCQkgICAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoLAotCQkJCQkgICAgbl9wYXRoX29mZnNldCkgPj0KLQkJICAgICAgIEJfTlJfSVRFTVMocF9zX2JoKSwKKwkJUkZBTFNFKGJoID09IHRiLT5GUltoXSAmJgorCQkgICAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04odGItPnRiX3BhdGgsCisJCQkJCSAgICBwYXRoX29mZnNldCkgPj0KKwkJICAgICAgIEJfTlJfSVRFTVMoYmgpLAogCQkgICAgICAgIlBBUC04Mjk1OiBpbnZhbGlkIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQiKTsKIAotCQluX2NoaWxkX3Bvc2l0aW9uID0KLQkJICAgIChwX3NfYmggPT0gcF9zX3RiLT5GUltuX2hdKSA/IHBfc190Yi0+cmtleVtuX2hdICsgMSA6IDA7Ci0JCW5fc29uX251bWJlciA9IEJfTl9DSElMRF9OVU0ocF9zX3RiLT5GUltuX2hdLCBuX2NoaWxkX3Bvc2l0aW9uKTsKLQkJcF9zX2JoID0gc2JfYnJlYWQocF9zX3NiLCBuX3Nvbl9udW1iZXIpOwotCQlpZiAoIXBfc19iaCkKKwkJY2hpbGRfcG9zaXRpb24gPQorCQkgICAgKGJoID09IHRiLT5GUltoXSkgPyB0Yi0+cmtleVtoXSArIDEgOiAwOworCQlzb25fbnVtYmVyID0gQl9OX0NISUxEX05VTSh0Yi0+RlJbaF0sIGNoaWxkX3Bvc2l0aW9uKTsKKwkJYmggPSBzYl9icmVhZChzYiwgc29uX251bWJlcik7CisJCWlmICghYmgpCiAJCQlyZXR1cm4gSU9fRVJST1I7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQkJZGVjcmVtZW50X2Jjb3VudChwX3NfYmgpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtuX2hdKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbaF0pOwogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCX0KLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPlJbbl9oXSk7Ci0JCXBfc190Yi0+UltuX2hdID0gcF9zX2JoOworCQlicmVsc2UodGItPlJbaF0pOworCQl0Yi0+UltoXSA9IGJoOwogCi0JCVJGQUxTRSghbl9oCi0JCSAgICAgICAmJiBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAhPQotCQkgICAgICAgTUFYX0NISUxEX1NJWkUocF9zX2JoKSAtCi0JCSAgICAgICBkY19zaXplKEJfTl9DSElMRChwX3NfdGItPkZSWzBdLCBuX2NoaWxkX3Bvc2l0aW9uKSksCisJCVJGQUxTRSghaAorCQkgICAgICAgJiYgQl9GUkVFX1NQQUNFKGJoKSAhPQorCQkgICAgICAgTUFYX0NISUxEX1NJWkUoYmgpIC0KKwkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHRiLT5GUlswXSwgY2hpbGRfcG9zaXRpb24pKSwKIAkJICAgICAgICJQQVAtODMwMDogaW52YWxpZCBjaGlsZCBzaXplIG9mIHJpZ2h0IG5laWdoYm9yICglZCAhPSAlZCAtICVkKSIsCi0JCSAgICAgICBCX0ZSRUVfU1BBQ0UocF9zX2JoKSwgTUFYX0NISUxEX1NJWkUocF9zX2JoKSwKLQkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHBfc190Yi0+RlJbMF0sIG5fY2hpbGRfcG9zaXRpb24pKSk7CisJCSAgICAgICBCX0ZSRUVfU1BBQ0UoYmgpLCBNQVhfQ0hJTERfU0laRShiaCksCisJCSAgICAgICBkY19zaXplKEJfTl9DSElMRCh0Yi0+RlJbMF0sIGNoaWxkX3Bvc2l0aW9uKSkpOwogCiAJfQogCXJldHVybiBDQVJSWV9PTjsKQEAgLTIwODgsNTIgKzIwOTQsNDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaCwKK3N0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgbGV2ZWwpCiB7Ci0JaWYgKHBfc19iaCkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwX3NfYmgtPmJfY291bnQpKSA8PSAwKSB7CisJaWYgKGJoKSB7CisJCWlmIChhdG9taWNfcmVhZCgmKGJoLT5iX2NvdW50KSkgPD0gMCkKIAotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtMTogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBuZWdhdGl2ZSBvciB6ZXJvIHJlZmVyZW5jZSBjb3VudGVyIGZvciBidWZmZXIgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0xIiwgIm5lZ2F0aXZlIG9yIHplcm8gIgorCQkJCSAgICAgICAicmVmZXJlbmNlIGNvdW50ZXIgZm9yIGJ1ZmZlciAlc1slZF0gIgorCQkJCSAgICAgICAiKCViKSIsIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTI6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGlzIG5vdCB1cCB0byBkYXRlICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0yIiwgImJ1ZmZlciBpcyBub3QgdXAgIgorCQkJCSAgICAgICAidG8gZGF0ZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmICghQl9JU19JTl9UUkVFKHBfc19iaCkpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTM6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGlzIG5vdCBpbiB0cmVlICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKCFCX0lTX0lOX1RSRUUoYmgpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0zIiwgImJ1ZmZlciBpcyBub3QgIgorCQkJCSAgICAgICAiaW4gdHJlZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmIChwX3NfYmgtPmJfYmRldiAhPSBwX3Nfc2ItPnNfYmRldikgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtNDogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaGFzIHdyb25nIGRldmljZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9iZGV2ICE9IHNiLT5zX2JkZXYpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTQiLCAiYnVmZmVyIGhhcyB3cm9uZyAiCisJCQkJICAgICAgICJkZXZpY2UgJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAocF9zX2JoLT5iX3NpemUgIT0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtNTogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaGFzIHdyb25nIGJsb2Nrc2l6ZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9zaXplICE9IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtNSIsICJidWZmZXIgaGFzIHdyb25nICIKKwkJCQkgICAgICAgImJsb2Nrc2l6ZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmIChwX3NfYmgtPmJfYmxvY2tuciA+IFNCX0JMT0NLX0NPVU5UKHBfc19zYikpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTY6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGJsb2NrIG51bWJlciB0b28gaGlnaCAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9ibG9ja25yID4gU0JfQkxPQ0tfQ09VTlQoc2IpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC02IiwgImJ1ZmZlciBibG9jayAiCisJCQkJICAgICAgICJudW1iZXIgdG9vIGhpZ2ggJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAl9CiB9CiAjZWxzZQotc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaCwKK3N0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgbGV2ZWwpCiB7OwogfQpAQCAtMjE0NCw3ICsyMTQ0LDcgQEAKIAlyZXR1cm4gcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YikKK3N0YXRpYyBpbnQgd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqbG9ja2VkOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwpAQCAtMjE1Niw5NSArMjE1Niw5NCBAQAogCiAJCWxvY2tlZCA9IE5VTEw7CiAKLQkJZm9yIChpID0gcF9zX3RiLT50Yl9wYXRoLT5wYXRoX2xlbmd0aDsKKwkJZm9yIChpID0gdGItPnRiX3BhdGgtPnBhdGhfbGVuZ3RoOwogCQkgICAgICFsb2NrZWQgJiYgaSA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsgaS0tKSB7Ci0JCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIGkpKSB7CisJCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaSkpIHsKIAkJCQkvKiBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB3ZSBjYW4gb25seSBiZSBzdXJlIHRoZSBsYXN0IGJ1ZmZlcgogCQkJCSAqKiBpbiB0aGUgcGF0aCBpcyBpbiB0aGUgdHJlZSAtLWNsbQogCQkJCSAqLwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJCWlmIChQQVRIX1BMQVNUX0JVRkZFUihwX3NfdGItPnRiX3BhdGgpID09Ci0JCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBpKSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCisJCQkJaWYgKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSA9PQorCQkJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBpKSkKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCiAJCQkJCQkJICAgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJCQkJCQkgICAgICAgKHBfc190Yi0+dGJfcGF0aCwKKwkJCQkJCQkgICAgICAgKHRiLT50Yl9wYXRoLAogCQkJCQkJCQlpKSwgIlMiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPnRiX3BhdGgtPgorCQkJCQkJCSAgICAgICB0Yi0+dGJfcGF0aC0+CiAJCQkJCQkJICAgICAgIHBhdGhfbGVuZ3RoIC0gaSk7Ci0JCQkJfQogI2VuZGlmCi0JCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cyhwX3NfdGItPnRiX3NiLAorCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHModGItPnRiX3NiLAogCQkJCQkJCSAgUEFUSF9PRkZTRVRfUEJVRkZFUgotCQkJCQkJCSAgKHBfc190Yi0+dGJfcGF0aCwKKwkJCQkJCQkgICh0Yi0+dGJfcGF0aCwKIAkJCQkJCQkgICBpKSkpIHsKIAkJCQkJbG9ja2VkID0KLQkJCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLAorCQkJCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwKIAkJCQkJCQkJaSk7CiAJCQkJfQogCQkJfQogCQl9CiAKLQkJZm9yIChpID0gMDsgIWxvY2tlZCAmJiBpIDwgTUFYX0hFSUdIVCAmJiBwX3NfdGItPmluc2VydF9zaXplW2ldOworCQlmb3IgKGkgPSAwOyAhbG9ja2VkICYmIGkgPCBNQVhfSEVJR0hUICYmIHRiLT5pbnNlcnRfc2l6ZVtpXTsKIAkJICAgICBpKyspIHsKIAotCQkJaWYgKHBfc190Yi0+bG51bVtpXSkgeworCQkJaWYgKHRiLT5sbnVtW2ldKSB7CiAKLQkJCQlpZiAocF9zX3RiLT5MW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5MW2ldLAorCQkJCWlmICh0Yi0+TFtpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkxbaV0sCiAJCQkJCQkJICAgICAgICJMIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkxbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5MW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkxbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkxbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5GTFtpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+RkxbaV0sCisJCQkJaWYgKCFsb2NrZWQgJiYgdGItPkZMW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+RkxbaV0sCiAJCQkJCQkJICAgICAgICJGTCIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GTFtpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkZMW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkZMW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5GTFtpXTsKIAkJCQl9CiAKLQkJCQlpZiAoIWxvY2tlZCAmJiBwX3NfdGItPkNGTFtpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+Q0ZMW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5DRkxbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5DRkxbaV0sCiAJCQkJCQkJICAgICAgICJDRkwiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+Q0ZMW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+Q0ZMW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkNGTFtpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+Q0ZMW2ldOwogCQkJCX0KIAogCQkJfQogCi0JCQlpZiAoIWxvY2tlZCAmJiAocF9zX3RiLT5ybnVtW2ldKSkgeworCQkJaWYgKCFsb2NrZWQgJiYgKHRiLT5ybnVtW2ldKSkgewogCi0JCQkJaWYgKHBfc190Yi0+UltpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+UltpXSwKKwkJCQlpZiAodGItPlJbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5SW2ldLAogCQkJCQkJCSAgICAgICAiUiIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5SW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+UltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5SW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5SW2ldOwogCQkJCX0KIAotCQkJCWlmICghbG9ja2VkICYmIHBfc190Yi0+RlJbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkZSW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5GUltpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkZSW2ldLAogCQkJCQkJCSAgICAgICAiRlIiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RlJbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5GUltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GUltpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+RlJbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5DRlJbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkNGUltpXSwKKwkJCQlpZiAoIWxvY2tlZCAmJiB0Yi0+Q0ZSW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+Q0ZSW2ldLAogCQkJCQkJCSAgICAgICAiQ0ZSIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkNGUltpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkNGUltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5DRlJbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkNGUltpXTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIyNTcsMTAgKzIyNTYsMTAgQEAKIAkJICoqIC0tY2xtCiAJCSAqLwogCQlmb3IgKGkgPSAwOyAhbG9ja2VkICYmIGkgPCBNQVhfRkVCX1NJWkU7IGkrKykgewotCQkJaWYgKHBfc190Yi0+RkVCW2ldKSB7CisJCQlpZiAodGItPkZFQltpXSkgewogCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RkVCW2ldKSkKLQkJCQkJbG9ja2VkID0gcF9zX3RiLT5GRUJbaV07CisJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GRUJbaV0pKQorCQkJCQlsb2NrZWQgPSB0Yi0+RkVCW2ldOwogCQkJfQogCQl9CiAKQEAgLTIyNjgsMjEgKzIyNjcsMjAgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJCXJlcGVhdF9jb3VudGVyKys7CiAJCQlpZiAoKHJlcGVhdF9jb3VudGVyICUgMTAwMDApID09IDApIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkgIndhaXRfdGJfYnVmZmVyc191bnRpbF9yZWxlYXNlZCgpOiB0b28gbWFueSAiCi0JCQkJCQkgIml0ZXJhdGlvbnMgd2FpdGluZyBmb3IgYnVmZmVyIHRvIHVubG9jayAiCisJCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy04MjAwIiwKKwkJCQkJCSAidG9vIG1hbnkgaXRlcmF0aW9ucyB3YWl0aW5nICIKKwkJCQkJCSAiZm9yIGJ1ZmZlciB0byB1bmxvY2sgIgogCQkJCQkJICIoJWIpIiwgbG9ja2VkKTsKIAogCQkJCS8qIERvbid0IGxvb3AgZm9yZXZlci4gIFRyeSB0byByZWNvdmVyIGZyb20gcG9zc2libGUgZXJyb3IuICovCiAKLQkJCQlyZXR1cm4gKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSA/CisJCQkJcmV0dXJuIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSA/CiAJCQkJICAgIFJFUEVBVF9TRUFSQ0ggOiBDQVJSWV9PTjsKIAkJCX0KICNlbmRpZgogCQkJX193YWl0X29uX2J1ZmZlcihsb2NrZWQpOwotCQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7CisJCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKLQkJCX0KIAkJfQogCiAJfSB3aGlsZSAobG9ja2VkKTsKQEAgLTIyOTUsMTUgKzIyOTMsMTUgQEAKICAqCWFuYWx5emUgd2hhdCBhbmQgd2hlcmUgc2hvdWxkIGJlIG1vdmVkOwogICoJZ2V0IHN1ZmZpY2llbnQgbnVtYmVyIG9mIG5ldyBub2RlczsKICAqIEJhbGFuY2luZyB3aWxsIHN0YXJ0IG9ubHkgYWZ0ZXIgYWxsIHJlc291cmNlcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBhIHRpbWUuCi0gKiAKKyAqCiAgKiBXaGVuIHBvcnRlZCB0byBTTVAga2VybmVscywgb25seSBhdCB0aGUgbGFzdCBtb21lbnQgYWZ0ZXIgYWxsIG5lZWRlZCBub2RlcwogICogYXJlIGNvbGxlY3RlZCBpbiBjYWNoZSwgd2lsbCB0aGUgcmVzb3VyY2VzIGJlIGxvY2tlZCB1c2luZyB0aGUgdXN1YWwKICAqIHRleHRib29rIG9yZGVyZWQgbG9jayBhY3F1aXNpdGlvbiBhbGdvcml0aG1zLiAgTm90ZSB0aGF0IGVuc3VyaW5nIHRoYXQKICAqIHRoaXMgY29kZSBuZWl0aGVyIHdyaXRlIGxvY2tzIHdoYXQgaXQgZG9lcyBub3QgbmVlZCB0byB3cml0ZSBsb2NrIG5vciBsb2NrcyBvdXQgb2Ygb3JkZXIKICAqIHdpbGwgYmUgYSBwYWluIGluIHRoZSBidXR0IHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQuICBHcnVtYmxlIGdydW1ibGUuIC1IYW5zCi0gKiAKKyAqCiAgKiBmaXggaXMgbWVhbnQgaW4gdGhlIHNlbnNlIG9mIHJlbmRlciB1bmNoYW5naW5nCi0gKiAKKyAqCiAgKiBMYXRlbmN5IG1pZ2h0IGJlIGltcHJvdmVkIGJ5IGZpcnN0IGdhdGhlcmluZyBhIGxpc3Qgb2Ygd2hhdCBidWZmZXJzIGFyZSBuZWVkZWQKICAqIGFuZCB0aGVuIGdldHRpbmcgYXMgbWFueSBvZiB0aGVtIGluIHBhcmFsbGVsIGFzIHBvc3NpYmxlPyAtSGFucwogICoKQEAgLTIzMTIsMTU5ICsyMzEwLDE2MCBAQAogICoJdGIJdHJlZV9iYWxhbmNlIHN0cnVjdHVyZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqICAgICAgcG9zX2luX2l0ZW0gLSBjb21tZW50IHRoaXMgaWYgeW91IGNhbgotICogICAgICBpbnNfaWggJiBpbnNfc2QgYXJlIHVzZWQgd2hlbiBpbnNlcnRpbmcKKyAqICAgICAgaW5zX2loCWl0ZW0gaGVhZCBvZiBpdGVtIGJlaW5nIGluc2VydGVkCisgKglkYXRhCWluc2VydGVkIGl0ZW0gb3IgZGF0YSB0byBiZSBwYXN0ZWQKICAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICAwIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7Ci0gKiAgICAgICAgICAgICAtMSAtIGlmIG5vX2Rpc2tfc3BhY2UgCisgKiAgICAgICAgICAgICAtMSAtIGlmIG5vX2Rpc2tfc3BhY2UKICAqLwogCi1pbnQgZml4X25vZGVzKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190Yiwgc3RydWN0IGl0ZW1faGVhZCAqcF9zX2luc19paCwJLy8gaXRlbSBoZWFkIG9mIGl0ZW0gYmVpbmcgaW5zZXJ0ZWQKLQkgICAgICBjb25zdCB2b2lkICpkYXRhCS8vIGluc2VydGVkIGl0ZW0gb3IgZGF0YSB0byBiZSBwYXN0ZWQKLSAgICApCitpbnQgZml4X25vZGVzKGludCBvcF9tb2RlLCBzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkgICAgICBzdHJ1Y3QgaXRlbV9oZWFkICppbnNfaWgsIGNvbnN0IHZvaWQgKmRhdGEpCiB7Ci0JaW50IG5fcmV0X3ZhbHVlLCBuX2gsIG5faXRlbV9udW0gPSBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoKTsKLQlpbnQgbl9wb3NfaW5faXRlbTsKKwlpbnQgcmV0LCBoLCBpdGVtX251bSA9IFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCk7CisJaW50IHBvc19pbl9pdGVtOwogCiAJLyogd2Ugc2V0IHdhaXRfdGJfYnVmZmVyc19ydW4gd2hlbiB3ZSBoYXZlIHRvIHJlc3RvcmUgYW55IGRpcnR5IGJpdHMgY2xlYXJlZAogCSAqKiBkdXJpbmcgd2FpdF90Yl9idWZmZXJzX3J1bgogCSAqLwogCWludCB3YWl0X3RiX2J1ZmZlcnNfcnVuID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc190YlMwID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3RiLT50Yl9wYXRoKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRiUzAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7CiAKLQkrK1JFSVNFUkZTX1NCKHBfc190Yi0+dGJfc2IpLT5zX2ZpeF9ub2RlczsKKwkrK1JFSVNFUkZTX1NCKHRiLT50Yl9zYiktPnNfZml4X25vZGVzOwogCi0Jbl9wb3NfaW5faXRlbSA9IHBfc190Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW07CisJcG9zX2luX2l0ZW0gPSB0Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW07CiAKLQlwX3NfdGItPmZzX2dlbiA9IGdldF9nZW5lcmF0aW9uKHBfc190Yi0+dGJfc2IpOworCXRiLT5mc19nZW4gPSBnZXRfZ2VuZXJhdGlvbih0Yi0+dGJfc2IpOwogCiAJLyogd2UgcHJlcGFyZSBhbmQgbG9nIHRoZSBzdXBlciBoZXJlIHNvIGl0IHdpbGwgYWxyZWFkeSBiZSBpbiB0aGUKIAkgKiogdHJhbnNhY3Rpb24gd2hlbiBkb19iYWxhbmNlIG5lZWRzIHRvIGNoYW5nZSBpdC4KIAkgKiogVGhpcyB3YXkgZG9fYmFsYW5jZSB3b24ndCBoYXZlIHRvIHNjaGVkdWxlIHdoZW4gdHJ5aW5nIHRvIHByZXBhcmUKIAkgKiogdGhlIHN1cGVyIGZvciBsb2dnaW5nCiAJICovCi0JcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3NfdGItPnRiX3NiLAotCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3RiLT50Yl9zYiksIDEpOwotCWpvdXJuYWxfbWFya19kaXJ0eShwX3NfdGItPnRyYW5zYWN0aW9uX2hhbmRsZSwgcF9zX3RiLT50Yl9zYiwKLQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc190Yi0+dGJfc2IpKTsKLQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpCisJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbCh0Yi0+dGJfc2IsCisJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQih0Yi0+dGJfc2IpLCAxKTsKKwlqb3VybmFsX21hcmtfZGlydHkodGItPnRyYW5zYWN0aW9uX2hhbmRsZSwgdGItPnRiX3NiLAorCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IodGItPnRiX3NiKSk7CisJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCiAJLyogaWYgaXQgcG9zc2libGUgaW4gaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24gKi8KLQlpZiAoYnVmZmVyX2xvY2tlZChwX3NfdGJTMCkpIHsKLQkJX193YWl0X29uX2J1ZmZlcihwX3NfdGJTMCk7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKKwlpZiAoYnVmZmVyX2xvY2tlZCh0YlMwKSkgeworCQlfX3dhaXRfb25fYnVmZmVyKHRiUzApOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlpZiAoY3VyX3RiKSB7CiAJCXByaW50X2N1cl90YigiZml4X25vZGVzIik7Ci0JCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC04MzA1OiBmaXhfbm9kZXM6ICB0aGVyZSBpcyBwZW5kaW5nIGRvX2JhbGFuY2UiKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMDUiLAorCQkJICAgICAgICJ0aGVyZSBpcyBwZW5kaW5nIGRvX2JhbGFuY2UiKTsKIAl9CiAKLQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShwX3NfdGJTMCkgfHwgIUJfSVNfSU5fVFJFRShwX3NfdGJTMCkpIHsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTgzMjA6IGZpeF9ub2RlczogU1swXSAoJWIgJXopIGlzIG5vdCB1cHRvZGF0ZSAiCi0JCQkgICAgICAgImF0IHRoZSBiZWdpbm5pbmcgb2YgZml4X25vZGVzIG9yIG5vdCBpbiB0cmVlIChtb2RlICVjKSIsCi0JCQkgICAgICAgcF9zX3RiUzAsIHBfc190YlMwLCBuX29wX21vZGUpOwotCX0KKwlpZiAoIWJ1ZmZlcl91cHRvZGF0ZSh0YlMwKSB8fCAhQl9JU19JTl9UUkVFKHRiUzApKQorCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODMyMCIsICJTWzBdICglYiAleikgaXMgIgorCQkJICAgICAgICJub3QgdXB0b2RhdGUgYXQgdGhlIGJlZ2lubmluZyBvZiBmaXhfbm9kZXMgIgorCQkJICAgICAgICJvciBub3QgaW4gdHJlZSAobW9kZSAlYykiLAorCQkJICAgICAgIHRiUzAsIHRiUzAsIG9wX21vZGUpOwogCiAJLyogQ2hlY2sgcGFyYW1ldGVycy4gKi8KLQlzd2l0Y2ggKG5fb3BfbW9kZSkgeworCXN3aXRjaCAob3BfbW9kZSkgewogCWNhc2UgTV9JTlNFUlQ6Ci0JCWlmIChuX2l0ZW1fbnVtIDw9IDAgfHwgbl9pdGVtX251bSA+IEJfTlJfSVRFTVMocF9zX3RiUzApKQotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC04MzMwOiBmaXhfbm9kZXM6IEluY29ycmVjdCBpdGVtIG51bWJlciAlZCAoaW4gUzAgLSAlZCkgaW4gY2FzZSBvZiBpbnNlcnQiLAotCQkJCSAgICAgICBuX2l0ZW1fbnVtLCBCX05SX0lURU1TKHBfc190YlMwKSk7CisJCWlmIChpdGVtX251bSA8PSAwIHx8IGl0ZW1fbnVtID4gQl9OUl9JVEVNUyh0YlMwKSkKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzMwIiwgIkluY29ycmVjdCAiCisJCQkJICAgICAgICJpdGVtIG51bWJlciAlZCAoaW4gUzAgLSAlZCkgaW4gY2FzZSAiCisJCQkJICAgICAgICJvZiBpbnNlcnQiLCBpdGVtX251bSwKKwkJCQkgICAgICAgQl9OUl9JVEVNUyh0YlMwKSk7CiAJCWJyZWFrOwogCWNhc2UgTV9QQVNURToKIAljYXNlIE1fREVMRVRFOgogCWNhc2UgTV9DVVQ6Ci0JCWlmIChuX2l0ZW1fbnVtIDwgMCB8fCBuX2l0ZW1fbnVtID49IEJfTlJfSVRFTVMocF9zX3RiUzApKSB7Ci0JCQlwcmludF9ibG9jayhwX3NfdGJTMCwgMCwgLTEsIC0xKTsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtODMzNTogZml4X25vZGVzOiBJbmNvcnJlY3QgaXRlbSBudW1iZXIoJWQpOyBtb2RlID0gJWMgaW5zZXJ0X3NpemUgPSAlZFxuIiwKLQkJCQkgICAgICAgbl9pdGVtX251bSwgbl9vcF9tb2RlLAotCQkJCSAgICAgICBwX3NfdGItPmluc2VydF9zaXplWzBdKTsKKwkJaWYgKGl0ZW1fbnVtIDwgMCB8fCBpdGVtX251bSA+PSBCX05SX0lURU1TKHRiUzApKSB7CisJCQlwcmludF9ibG9jayh0YlMwLCAwLCAtMSwgLTEpOworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMzUiLCAiSW5jb3JyZWN0ICIKKwkJCQkgICAgICAgIml0ZW0gbnVtYmVyKCVkKTsgbW9kZSA9ICVjICIKKwkJCQkgICAgICAgImluc2VydF9zaXplID0gJWQiLAorCQkJCSAgICAgICBpdGVtX251bSwgb3BfbW9kZSwKKwkJCQkgICAgICAgdGItPmluc2VydF9zaXplWzBdKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtODM0MDogZml4X25vZGVzOiBJbmNvcnJlY3QgbW9kZSBvZiBvcGVyYXRpb24iKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzNDAiLCAiSW5jb3JyZWN0IG1vZGUgIgorCQkJICAgICAgICJvZiBvcGVyYXRpb24iKTsKIAl9CiAjZW5kaWYKIAotCWlmIChnZXRfbWVtX2Zvcl92aXJ0dWFsX25vZGUocF9zX3RiKSA9PSBSRVBFQVRfU0VBUkNIKQorCWlmIChnZXRfbWVtX2Zvcl92aXJ0dWFsX25vZGUodGIpID09IFJFUEVBVF9TRUFSQ0gpCiAJCS8vIEZJWE1FOiBtYXliZSAtRU5PTUVNIHdoZW4gdGItPnZuX2J1ZiA9PSAwPyBOb3cganVzdCByZXBlYXQKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAKLQkvKiBTdGFydGluZyBmcm9tIHRoZSBsZWFmIGxldmVsOyBmb3IgYWxsIGxldmVscyBuX2ggb2YgdGhlIHRyZWUuICovCi0JZm9yIChuX2ggPSAwOyBuX2ggPCBNQVhfSEVJR0hUICYmIHBfc190Yi0+aW5zZXJ0X3NpemVbbl9oXTsgbl9oKyspIHsKLQkJaWYgKChuX3JldF92YWx1ZSA9IGdldF9kaXJlY3RfcGFyZW50KHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKKwkvKiBTdGFydGluZyBmcm9tIHRoZSBsZWFmIGxldmVsOyBmb3IgYWxsIGxldmVscyBoIG9mIHRoZSB0cmVlLiAqLworCWZvciAoaCA9IDA7IGggPCBNQVhfSEVJR0hUICYmIHRiLT5pbnNlcnRfc2l6ZVtoXTsgaCsrKSB7CisJCXJldCA9IGdldF9kaXJlY3RfcGFyZW50KHRiLCBoKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikKIAkJCWdvdG8gcmVwZWF0OwotCQl9CiAKLQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCSAgICAgY2hlY2tfYmFsYW5jZShuX29wX21vZGUsIHBfc190Yiwgbl9oLCBuX2l0ZW1fbnVtLAotCQkJCSAgIG5fcG9zX2luX2l0ZW0sIHBfc19pbnNfaWgsCi0JCQkJICAgZGF0YSkpICE9IENBUlJZX09OKSB7Ci0JCQlpZiAobl9yZXRfdmFsdWUgPT0gTk9fQkFMQU5DSU5HX05FRURFRCkgeworCQlyZXQgPSBjaGVja19iYWxhbmNlKG9wX21vZGUsIHRiLCBoLCBpdGVtX251bSwKKwkJCQkgICAgcG9zX2luX2l0ZW0sIGluc19paCwgZGF0YSk7CisJCWlmIChyZXQgIT0gQ0FSUllfT04pIHsKKwkJCWlmIChyZXQgPT0gTk9fQkFMQU5DSU5HX05FRURFRCkgewogCQkJCS8qIE5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQuICovCi0JCQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCQkJICAgICBnZXRfbmVpZ2hib3JzKHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKKwkJCQlyZXQgPSBnZXRfbmVpZ2hib3JzKHRiLCBoKTsKKwkJCQlpZiAocmV0ICE9IENBUlJZX09OKQogCQkJCQlnb3RvIHJlcGVhdDsKLQkJCQl9Ci0JCQkJaWYgKG5faCAhPSBNQVhfSEVJR0hUIC0gMSkKLQkJCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9IDA7CisJCQkJaWYgKGggIT0gTUFYX0hFSUdIVCAtIDEpCisJCQkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPSAwOwogCQkJCS8qIG9rLCBhbmFseXNpcyBhbmQgcmVzb3VyY2UgZ2F0aGVyaW5nIGFyZSBjb21wbGV0ZSAqLwogCQkJCWJyZWFrOwogCQkJfQogCQkJZ290byByZXBlYXQ7CiAJCX0KIAotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X25laWdoYm9ycyhwX3NfdGIsIG5faCkpICE9IENBUlJZX09OKSB7CisJCXJldCA9IGdldF9uZWlnaGJvcnModGIsIGgpOworCQlpZiAocmV0ICE9IENBUlJZX09OKQogCQkJZ290byByZXBlYXQ7Ci0JCX0KIAotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X2VtcHR5X25vZGVzKHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKLQkJCWdvdG8gcmVwZWF0OwkvKiBObyBkaXNrIHNwYWNlLCBvciBzY2hlZHVsZSBvY2N1cnJlZCBhbmQKLQkJCQkJICAgYW5hbHlzaXMgbWF5IGJlIGludmFsaWQgYW5kIG5lZWRzIHRvIGJlIHJlZG9uZS4gKi8KLQkJfQorCQkvKiBObyBkaXNrIHNwYWNlLCBvciBzY2hlZHVsZSBvY2N1cnJlZCBhbmQgYW5hbHlzaXMgbWF5IGJlCisJCSAqIGludmFsaWQgYW5kIG5lZWRzIHRvIGJlIHJlZG9uZS4gKi8KKwkJcmV0ID0gZ2V0X2VtcHR5X25vZGVzKHRiLCBoKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikKKwkJCWdvdG8gcmVwZWF0OwogCi0JCWlmICghUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2gpKSB7CisJCWlmICghUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGgpKSB7CiAJCQkvKiBXZSBoYXZlIGEgcG9zaXRpdmUgaW5zZXJ0IHNpemUgYnV0IG5vIG5vZGVzIGV4aXN0IG9uIHRoaXMKIAkJCSAgIGxldmVsLCB0aGlzIG1lYW5zIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvb3QuICovCiAKLQkJCVJGQUxTRShwX3NfdGItPmJsa251bVtuX2hdICE9IDEsCisJCQlSRkFMU0UodGItPmJsa251bVtoXSAhPSAxLAogCQkJICAgICAgICJQQVAtODM1MDogY3JlYXRpbmcgbmV3IGVtcHR5IHJvb3QiKTsKIAotCQkJaWYgKG5faCA8IE1BWF9IRUlHSFQgLSAxKQotCQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPSAwOwotCQl9IGVsc2UgaWYgKCFQQVRIX0hfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5faCArIDEpKSB7Ci0JCQlpZiAocF9zX3RiLT5ibGtudW1bbl9oXSA+IDEpIHsKLQkJCQkvKiBUaGUgdHJlZSBuZWVkcyB0byBiZSBncm93biwgc28gdGhpcyBub2RlIFNbbl9oXQorCQkJaWYgKGggPCBNQVhfSEVJR0hUIC0gMSkKKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0gMDsKKwkJfSBlbHNlIGlmICghUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGggKyAxKSkgeworCQkJaWYgKHRiLT5ibGtudW1baF0gPiAxKSB7CisJCQkJLyogVGhlIHRyZWUgbmVlZHMgdG8gYmUgZ3Jvd24sIHNvIHRoaXMgbm9kZSBTW2hdCiAJCQkJICAgd2hpY2ggaXMgdGhlIHJvb3Qgbm9kZSBpcyBzcGxpdCBpbnRvIHR3byBub2RlcywKLQkJCQkgICBhbmQgYSBuZXcgbm9kZSAoU1tuX2grMV0pIHdpbGwgYmUgY3JlYXRlZCB0bworCQkJCSAgIGFuZCBhIG5ldyBub2RlIChTW2grMV0pIHdpbGwgYmUgY3JlYXRlZCB0bwogCQkJCSAgIGJlY29tZSB0aGUgcm9vdCBub2RlLiAgKi8KIAotCQkJCVJGQUxTRShuX2ggPT0gTUFYX0hFSUdIVCAtIDEsCisJCQkJUkZBTFNFKGggPT0gTUFYX0hFSUdIVCAtIDEsCiAJCQkJICAgICAgICJQQVAtODM1NTogYXR0ZW1wdCB0byBjcmVhdGUgdG9vIGhpZ2ggb2YgYSB0cmVlIik7CiAKLQkJCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0KKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0KIAkJCQkgICAgKERDX1NJWkUgKwotCQkJCSAgICAgS0VZX1NJWkUpICogKHBfc190Yi0+YmxrbnVtW25faF0gLSAxKSArCisJCQkJICAgICBLRVlfU0laRSkgKiAodGItPmJsa251bVtoXSAtIDEpICsKIAkJCQkgICAgRENfU0laRTsKLQkJCX0gZWxzZSBpZiAobl9oIDwgTUFYX0hFSUdIVCAtIDEpCi0JCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9IDA7CisJCQl9IGVsc2UgaWYgKGggPCBNQVhfSEVJR0hUIC0gMSkKKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0gMDsKIAkJfSBlbHNlCi0JCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0KLQkJCSAgICAoRENfU0laRSArIEtFWV9TSVpFKSAqIChwX3NfdGItPmJsa251bVtuX2hdIC0gMSk7CisJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0KKwkJCSAgICAoRENfU0laRSArIEtFWV9TSVpFKSAqICh0Yi0+YmxrbnVtW2hdIC0gMSk7CiAJfQogCi0JaWYgKChuX3JldF92YWx1ZSA9IHdhaXRfdGJfYnVmZmVyc191bnRpbF91bmxvY2tlZChwX3NfdGIpKSA9PSBDQVJSWV9PTikgewotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKKwlyZXQgPSB3YWl0X3RiX2J1ZmZlcnNfdW50aWxfdW5sb2NrZWQodGIpOworCWlmIChyZXQgPT0gQ0FSUllfT04pIHsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKIAkJCXdhaXRfdGJfYnVmZmVyc19ydW4gPSAxOwotCQkJbl9yZXRfdmFsdWUgPSBSRVBFQVRfU0VBUkNIOworCQkJcmV0ID0gUkVQRUFUX1NFQVJDSDsKIAkJCWdvdG8gcmVwZWF0OwogCQl9IGVsc2UgewogCQkJcmV0dXJuIENBUlJZX09OOwpAQCAtMjQ4NSw1NyArMjQ4NCw1NyBAQAogCiAJCS8qIFJlbGVhc2UgcGF0aCBidWZmZXJzLiAqLwogCQlpZiAod2FpdF90Yl9idWZmZXJzX3J1bikgewotCQkJcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+dGJfcGF0aCk7CisJCQlwYXRocmVsc2VfYW5kX3Jlc3RvcmUodGItPnRiX3NiLCB0Yi0+dGJfcGF0aCk7CiAJCX0gZWxzZSB7Ci0JCQlwYXRocmVsc2UocF9zX3RiLT50Yl9wYXRoKTsKKwkJCXBhdGhyZWxzZSh0Yi0+dGJfcGF0aCk7CiAJCX0KIAkJLyogYnJlbHNlIGFsbCByZXNvdXJjZXMgY29sbGVjdGVkIGZvciBiYWxhbmNpbmcgKi8KIAkJZm9yIChpID0gMDsgaSA8IE1BWF9IRUlHSFQ7IGkrKykgewogCQkJaWYgKHdhaXRfdGJfYnVmZmVyc19ydW4pIHsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5MW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5SW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5GTFtpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+RlJbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPgorCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT5MW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+UltpXSk7CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPkZMW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+RlJbaV0pOworCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT4KIAkJCQkJCQkJIENGTFtpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPgogCQkJCQkJCQkgQ0ZSW2ldKTsKIAkJCX0KIAotCQkJYnJlbHNlKHBfc190Yi0+TFtpXSk7Ci0JCQlwX3NfdGItPkxbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+UltpXSk7Ci0JCQlwX3NfdGItPlJbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+RkxbaV0pOwotCQkJcF9zX3RiLT5GTFtpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5GUltpXSk7Ci0JCQlwX3NfdGItPkZSW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPkNGTFtpXSk7Ci0JCQlwX3NfdGItPkNGTFtpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5DRlJbaV0pOwotCQkJcF9zX3RiLT5DRlJbaV0gPSBOVUxMOworCQkJYnJlbHNlKHRiLT5MW2ldKTsKKwkJCWJyZWxzZSh0Yi0+UltpXSk7CisJCQlicmVsc2UodGItPkZMW2ldKTsKKwkJCWJyZWxzZSh0Yi0+RlJbaV0pOworCQkJYnJlbHNlKHRiLT5DRkxbaV0pOworCQkJYnJlbHNlKHRiLT5DRlJbaV0pOworCisJCQl0Yi0+TFtpXSA9IE5VTEw7CisJCQl0Yi0+UltpXSA9IE5VTEw7CisJCQl0Yi0+RkxbaV0gPSBOVUxMOworCQkJdGItPkZSW2ldID0gTlVMTDsKKwkJCXRiLT5DRkxbaV0gPSBOVUxMOworCQkJdGItPkNGUltpXSA9IE5VTEw7CiAJCX0KIAogCQlpZiAod2FpdF90Yl9idWZmZXJzX3J1bikgewogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9GRUJfU0laRTsgaSsrKSB7Ci0JCQkJaWYgKHBfc190Yi0+RkVCW2ldKSB7CisJCQkJaWYgKHRiLT5GRUJbaV0pCiAJCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GRUJbaV0pOwotCQkJCX0KKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GRUJbaV0pOwogCQkJfQogCQl9Ci0JCXJldHVybiBuX3JldF92YWx1ZTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIH0KIAotLyogQW5hdG9seSB3aWxsIHByb2JhYmx5IGZvcmdpdmUgbWUgcmVuYW1pbmcgcF9zX3RiIHRvIHRiLiBJIGp1c3QKKy8qIEFuYXRvbHkgd2lsbCBwcm9iYWJseSBmb3JnaXZlIG1lIHJlbmFtaW5nIHRiIHRvIHRiLiBJIGp1c3QKICAgIHdhbnRlZCB0byBtYWtlIGxpbmVzIHNob3J0ZXIgKi8KIHZvaWQgdW5maXhfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9oYXNoZXMuYyBiL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCmluZGV4IGU2NjRhYzEuLjY0NzFjNjcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCisrKyBiL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCkBAIC03LDcgKzcsNyBAQAogICogKHNlZSBBcHBsaWVkIENyeXB0b2dyYXBoeSwgMm5kIGVkaXRpb24sIHA0NDgpLgogICoKICAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB6aXAuY29tLmF1PiAxOTk4Ci0gKiAKKyAqCiAgKiBKZXJlbXkgaGFzIGFncmVlZCB0byB0aGUgY29udGVudHMgb2YgcmVpc2VyZnMvUkVBRE1FLiAtSGFucwogICogWXVyYSdzIGZ1bmN0aW9uIGlzIGFkZGVkICgwNC8wNy8yMDAwKQogICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jIGIvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYwppbmRleCBkZTM5MWE4Li4yMDc0ZmQ5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMKQEAgLTEwNSw4ICsxMDUsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiaW50ZXJuYWxfZGVmaW5lX2Rlc3Rfc3JjX2luZm9zOiBzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsCisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgImliYWxhbmNlLTEiLAorCQkJICAgICAgICJzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsCiAJCQkgICAgICAgc2hpZnRfbW9kZSk7CiAJfQogfQpAQCAtMjc4LDcgKzI3OCw3IEBACiAKIC8qIGNvcHkgY3B5X251bSBub2RlIHBvaW50ZXJzIGFuZCBjcHlfbnVtIC0gMSBpdGVtcyBmcm9tIGJ1ZmZlciBzcmMgdG8gYnVmZmVyIGRlc3QKICogbGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUIG1lYW5zLCB0aGF0IHdlIGNvcHkgZmlyc3QgaXRlbXMgZnJvbSBzcmMgdG8gdGFpbCBvZiBkZXN0Ci0gKiBsYXN0X2ZpcnN0ID09IExBU1RfVE9fRklSU1QgbWVhbnMsIHRoYXQgd2UgY29weSBsYXN0IGl0ZW1zIGZyb20gc3JjIHRvIGhlYWQgb2YgZGVzdCAKKyAqIGxhc3RfZmlyc3QgPT0gTEFTVF9UT19GSVJTVCBtZWFucywgdGhhdCB3ZSBjb3B5IGxhc3QgaXRlbXMgZnJvbSBzcmMgdG8gaGVhZCBvZiBkZXN0CiAgKi8KIHN0YXRpYyB2b2lkIGludGVybmFsX2NvcHlfcG9pbnRlcnNfaXRlbXMoc3RydWN0IGJ1ZmZlcl9pbmZvICpkZXN0X2JpLAogCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpzcmMsCkBAIC0zODUsNyArMzg1LDcgQEAKIAlpZiAobGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUKSB7CS8qIHNoaWZ0X2xlZnQgb2NjdXJzICovCiAJCWZpcnN0X3BvaW50ZXIgPSAwOwogCQlmaXJzdF9pdGVtID0gMDsKLQkJLyogZGVsZXRlIGNweV9udW0gLSBkZWxfcGFyIHBvaW50ZXJzIGFuZCBrZXlzIHN0YXJ0aW5nIGZvciBwb2ludGVycyB3aXRoIGZpcnN0X3BvaW50ZXIsIAorCQkvKiBkZWxldGUgY3B5X251bSAtIGRlbF9wYXIgcG9pbnRlcnMgYW5kIGtleXMgc3RhcnRpbmcgZm9yIHBvaW50ZXJzIHdpdGggZmlyc3RfcG9pbnRlciwKIAkJICAgZm9yIGtleSAtIHdpdGggZmlyc3RfaXRlbSAqLwogCQlpbnRlcm5hbF9kZWxldGVfcG9pbnRlcnNfaXRlbXMoc3JjX2JpLCBmaXJzdF9wb2ludGVyLAogCQkJCQkgICAgICAgZmlyc3RfaXRlbSwgY3B5X251bSAtIGRlbF9wYXIpOwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJfQogfQogCi0vKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZmwgdG8gdGFpbCBvZiBkZXN0LiAKKy8qIEluc2VydCBkX2tleSd0aCAoZGVsaW1pdGluZykga2V5IGZyb20gYnVmZmVyIGNmbCB0byB0YWlsIG9mIGRlc3QuCiAgKiBDb3B5IHBvaW50ZXJfYW1vdW50IG5vZGUgcG9pbnRlcnMgYW5kIHBvaW50ZXJfYW1vdW50IC0gMSBpdGVtcyBmcm9tIGJ1ZmZlciBzcmMgdG8gYnVmZmVyIGRlc3QuCiAgKiBSZXBsYWNlICBkX2tleSd0aCBrZXkgaW4gYnVmZmVyIGNmbC4KICAqIERlbGV0ZSBwb2ludGVyX2Ftb3VudCBpdGVtcyBhbmQgbm9kZSBwb2ludGVycyBmcm9tIGJ1ZmZlciBzcmMuCkBAIC01MTgsNyArNTE4LDcgQEAKIAkvKiAgICBpbnRlcm5hbF9tb3ZlX3BvaW50ZXJzX2l0ZW1zICh0Yi0+TFtoXSwgdGItPlNbaF0sIEZJUlNUX1RPX0xBU1QsIHBvaW50ZXJfYW1vdW50LCAxKTsgKi8KIH0KIAotLyogSW5zZXJ0IGRfa2V5J3RoIChkZWxpbWl0aW5nKSBrZXkgZnJvbSBidWZmZXIgY2ZyIHRvIGhlYWQgb2YgZGVzdC4gCisvKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZnIgdG8gaGVhZCBvZiBkZXN0LgogICogQ29weSBuIG5vZGUgcG9pbnRlcnMgYW5kIG4gLSAxIGl0ZW1zIGZyb20gYnVmZmVyIHNyYyB0byBidWZmZXIgZGVzdC4KICAqIFJlcGxhY2UgIGRfa2V5J3RoIGtleSBpbiBidWZmZXIgY2ZyLgogICogRGVsZXRlIG4gaXRlbXMgYW5kIG5vZGUgcG9pbnRlcnMgZnJvbSBidWZmZXIgc3JjLgpAQCAtNzAyLDggKzcwMiw4IEBACiAKIAkJcmV0dXJuOwogCX0KLQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCSAgICAgICAiYmFsYW5jZV9pbnRlcm5hbF93aGVuX2RlbGV0ZTogdW5leHBlY3RlZCB0Yi0+bG51bVslZF09PSVkIG9yIHRiLT5ybnVtWyVkXT09JWQiLAorCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgImliYWxhbmNlLTIiLAorCQkgICAgICAgInVuZXhwZWN0ZWQgdGItPmxudW1bJWRdPT0lZCBvciB0Yi0+cm51bVslZF09PSVkIiwKIAkJICAgICAgIGgsIHRiLT5sbnVtW2hdLCBoLCB0Yi0+cm51bVtoXSk7CiB9CiAKQEAgLTc0OSw3ICs3NDksNyBAQAogICAgICAgIHRoaXMgbWVhbnMgdGhhdCBuZXcgcG9pbnRlcnMgYW5kIGl0ZW1zIG11c3QgYmUgaW5zZXJ0ZWQgQUZURVIgKgogICAgICAgIGNoaWxkX3BvcwogICAgICAgIH0KLSAgICAgICBlbHNlIAorICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgaXQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWZ0bW9zdCBwb2ludGVyIHRoYXQgbXVzdCBiZSBkZWxldGVkICh0b2dldGhlciB3aXRoCiAgICAgICAgaXRzIGNvcnJlc3BvbmRpbmcga2V5IHRvIHRoZSBsZWZ0IG9mIHRoZSBwb2ludGVyKQpAQCAtOTQwLDggKzk0MCw4IEBACiAJCXN0cnVjdCBibG9ja19oZWFkICpibGtoOwogCiAJCWlmICh0Yi0+YmxrbnVtW2hdICE9IDEpCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiYmFsYW5jZV9pbnRlcm5hbDogT25lIG5ldyBub2RlIHJlcXVpcmVkIGZvciBjcmVhdGluZyB0aGUgbmV3IHJvb3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJpYmFsYW5jZS0zIiwgIk9uZSBuZXcgbm9kZSAiCisJCQkJICAgICAgICJyZXF1aXJlZCBmb3IgY3JlYXRpbmcgdGhlIG5ldyByb290Iik7CiAJCS8qIFNbaF0gPSBlbXB0eSBidWZmZXIgZnJvbSB0aGUgbGlzdCBGRUIuICovCiAJCXRiU2ggPSBnZXRfRkVCKHRiKTsKIAkJYmxraCA9IEJfQkxLX0hFQUQodGJTaCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCA4MjMyMjdhLi42ZmQwZjQ3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCQl9CiAJCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIG1vcmUgYnl0ZXMgdGhhbiBhY3R1YWxseSBleGlzdCBpbgogCQkgKiogdGhlIGZpbGUuICBUaGlzIGNhbiBoYXBwZW4gaW4gb2RkIGNhc2VzIHdoZXJlIGlfc2l6ZSBpc24ndAotCQkgKiogY29ycmVjdCwgYW5kIHdoZW4gZGlyZWN0IGl0ZW0gcGFkZGluZyByZXN1bHRzIGluIGEgZmV3IAorCQkgKiogY29ycmVjdCwgYW5kIHdoZW4gZGlyZWN0IGl0ZW0gcGFkZGluZyByZXN1bHRzIGluIGEgZmV3CiAJCSAqKiBleHRyYSBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3QgaXRlbQogCQkgKi8KIAkJaWYgKChsZV9paF9rX29mZnNldChpaCkgKyBwYXRoLnBvc19pbl9pdGVtKSA+IGlub2RlLT5pX3NpemUpCkBAIC00MzgsMTUgKzQzOCwxNSBAQAogKiogLUVOT0VOVCBpbnN0ZWFkIG9mIGEgdmFsaWQgYnVmZmVyLiAgYmxvY2tfcHJlcGFyZV93cml0ZSBleHBlY3RzIHRvCiAqKiBiZSBhYmxlIHRvIGRvIGkvbyBvbiB0aGUgYnVmZmVycyByZXR1cm5lZCwgdW5sZXNzIGFuIGVycm9yIHZhbHVlCiAqKiBpcyBhbHNvIHJldHVybmVkLgotKiogCisqKgogKiogU28sIHRoaXMgYWxsb3dzIGJsb2NrX3ByZXBhcmVfd3JpdGUgdG8gYmUgdXNlZCBmb3IgcmVhZGluZyBhIHNpbmdsZSBibG9jawogKiogaW4gYSBwYWdlLiAgV2hlcmUgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHZhbGlkIHBhZ2UgZm9yIGhvbGVzLCBvciBwYXN0IHRoZQogKiogZW5kIG9mIHRoZSBmaWxlLiAgVGhpcyB0dXJucyBvdXQgdG8gYmUgZXhhY3RseSB3aGF0IHdlIG5lZWQgZm9yIHJlYWRpbmcKICoqIHRhaWxzIGZvciBjb252ZXJzaW9uLgogKioKICoqIFRoZSBwb2ludCBvZiB0aGUgd3JhcHBlciBpcyBmb3JjaW5nIGEgY2VydGFpbiB2YWx1ZSBmb3IgY3JlYXRlLCBldmVuCi0qKiB0aG91Z2ggdGhlIFZGUyBsYXllciBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjcmVhdGU9PTEuICBJZiB5b3UgCi0qKiBkb24ndCB3YW50IHRvIHNlbmQgY3JlYXRlID09IEdFVF9CTE9DS19OT19IT0xFIHRvIHJlaXNlcmZzX2dldF9ibG9jaywgCisqKiB0aG91Z2ggdGhlIFZGUyBsYXllciBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjcmVhdGU9PTEuICBJZiB5b3UKKyoqIGRvbid0IHdhbnQgdG8gc2VuZCBjcmVhdGUgPT0gR0VUX0JMT0NLX05PX0hPTEUgdG8gcmVpc2VyZnNfZ2V0X2Jsb2NrLAogKiogZG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24uCiAqLwogc3RhdGljIGludCByZWlzZXJmc19nZXRfYmxvY2tfY3JlYXRlXzAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCkBAIC02MDIsNyArNjAyLDcgQEAKIAlpbnQgZG9uZTsKIAlpbnQgZnNfZ2VuOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoID0gTlVMTDsKLQkvKiBzcGFjZSByZXNlcnZlZCBpbiB0cmFuc2FjdGlvbiBiYXRjaDogCisJLyogc3BhY2UgcmVzZXJ2ZWQgaW4gdHJhbnNhY3Rpb24gYmF0Y2g6CiAJICAgLiAzIGJhbGFuY2luZ3MgaW4gZGlyZWN0LT5pbmRpcmVjdCBjb252ZXJzaW9uCiAJICAgLiAxIGJsb2NrIGludm9sdmVkIGludG8gcmVpc2VyZnNfdXBkYXRlX3NkKCkKIAkgICBYWFggaW4gcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3b3JzdCBjYXNlIGRpcmVjdDJpbmRpcmVjdCgpCkBAIC03NTQsNyArNzU0LDcgQEAKIAkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAogCQkvKiB0aGUgaXRlbSB3YXMgZm91bmQsIHNvIG5ldyBibG9ja3Mgd2VyZSBub3QgYWRkZWQgdG8gdGhlIGZpbGUKLQkJICoqIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyB1cGRhdGVkIHdpdGggdGhpcyAKKwkJICoqIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyB1cGRhdGVkIHdpdGggdGhpcwogCQkgKiogdHJhbnNhY3Rpb24KIAkJICovCiAJCXJldHVybiByZXR2YWw7CkBAIC04NDEsMTAgKzg0MSwxMiBAQAogCQkJCQkJCSAgdGFpbF9vZmZzZXQpOwogCQkJCWlmIChyZXR2YWwpIHsKIAkJCQkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJCQkJICJjbG0tNjAwNDogY29udmVydCB0YWlsIGZhaWxlZCBpbm9kZSAlbHUsIGVycm9yICVkIiwKLQkJCQkJCQkJIGlub2RlLT5pX2lubywKLQkJCQkJCQkJIHJldHZhbCk7CisJCQkJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkJCQkiY2xtLTYwMDQiLAorCQkJCQkJCSJjb252ZXJ0IHRhaWwgZmFpbGVkICIKKwkJCQkJCQkiaW5vZGUgJWx1LCBlcnJvciAlZCIsCisJCQkJCQkJaW5vZGUtPmlfaW5vLAorCQkJCQkJCXJldHZhbCk7CiAJCQkJCWlmIChhbGxvY2F0ZWRfYmxvY2tfbnIpIHsKIAkJCQkJCS8qIHRoZSBiaXRtYXAsIHRoZSBzdXBlciwgYW5kIHRoZSBzdGF0IGRhdGEgPT0gMyAqLwogCQkJCQkJaWYgKCF0aCkKQEAgLTk4NCw3ICs5ODYsNyBAQAogCiAJCS8qIHRoaXMgbG9vcCBjb3VsZCBsb2cgbW9yZSBibG9ja3MgdGhhbiB3ZSBoYWQgb3JpZ2luYWxseSBhc2tlZAogCQkgKiogZm9yLiAgU28sIHdlIGhhdmUgdG8gYWxsb3cgdGhlIHRyYW5zYWN0aW9uIHRvIGVuZCBpZiBpdCBpcwotCQkgKiogdG9vIGJpZyBvciB0b28gZnVsbC4gIFVwZGF0ZSB0aGUgaW5vZGUgc28gdGhpbmdzIGFyZSAKKwkJICoqIHRvbyBiaWcgb3IgdG9vIGZ1bGwuICBVcGRhdGUgdGhlIGlub2RlIHNvIHRoaW5ncyBhcmUKIAkJICoqIGNvbnNpc3RlbnQgaWYgd2UgY3Jhc2ggYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zCiAJCSAqKgogCQkgKiogcmVsZWFzZSB0aGUgcGF0aCBzbyB0aGF0IGFueWJvZHkgd2FpdGluZyBvbiB0aGUgcGF0aCBiZWZvcmUKQEAgLTk5NSw3ICs5OTcsNyBAQAogCQkJaWYgKHJldHZhbCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCX0KLQkJLyogaW5zZXJ0aW5nIGluZGlyZWN0IHBvaW50ZXJzIGZvciBhIGhvbGUgY2FuIHRha2UgYSAKKwkJLyogaW5zZXJ0aW5nIGluZGlyZWN0IHBvaW50ZXJzIGZvciBhIGhvbGUgY2FuIHRha2UgYQogCQkgKiogbG9uZyB0aW1lLiAgcmVzY2hlZHVsZSBpZiBuZWVkZWQKIAkJICovCiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTAwNiw4ICsxMDA4LDcgQEAKIAkJCWdvdG8gZmFpbHVyZTsKIAkJfQogCQlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTgyNTogcmVpc2VyZnNfZ2V0X2Jsb2NrOiAiCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtODI1IiwKIAkJCQkJICIlSyBzaG91bGQgbm90IGJlIGZvdW5kIiwgJmtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwogCQkJaWYgKGFsbG9jYXRlZF9ibG9ja19ucikKQEAgLTEyOTksOCArMTMwMCw3IEBACiAJaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CiAKIAlpZiAoIWlzX3N0YXRkYXRhX2xlX2loKGloKSkKLQkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsCi0JCQkgICAgICAgInZzLTEzMDY1OiB1cGRhdGVfc3RhdF9kYXRhOiBrZXkgJWssIGZvdW5kIGl0ZW0gJWgiLAorCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwgInZzLTEzMDY1IiwgImtleSAlaywgZm91bmQgaXRlbSAlaCIsCiAJCQkgICAgICAgSU5PREVfUEtFWShpbm9kZSksIGloKTsKIAogCWlmIChzdGF0X2RhdGFfdjEoaWgpKSB7CkBAIC0xMzMyLDEwICsxMzMyLDkgQEAKIAkJLyogbG9vayBmb3IgdGhlIG9iamVjdCdzIHN0YXQgZGF0YSAqLwogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbShpbm9kZS0+aV9zYiwgJmtleSwgJnBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTEzMDUwOiByZWlzZXJmc191cGRhdGVfc2Q6ICIKLQkJCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gdXBkYXRlICVLIHN0YXQgZGF0YSIsCi0JCQkJCSAma2V5KTsKKwkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtMTMwNTAiLAorCQkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvICIKKwkJCQkgICAgICAgInVwZGF0ZSAlSyBzdGF0IGRhdGEiLCAma2V5KTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAocmV0dmFsID09IElURU1fTk9UX0ZPVU5EKSB7CkBAIC0xMzQ1LDkgKzEzNDQsOSBAQAogCQkJCS8qcmVpc2VyZnNfd2FybmluZyAoaW5vZGUtPmlfc2IsICJ2cy0xMzA1MDogcmVpc2VyZnNfdXBkYXRlX3NkOiBpX25saW5rID09IDAsIHN0YXQgZGF0YSBub3QgZm91bmQiKTsgKi8KIAkJCQlyZXR1cm47CiAJCQl9Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTEzMDYwOiByZWlzZXJmc191cGRhdGVfc2Q6ICIKLQkJCQkJICJzdGF0IGRhdGEgb2Ygb2JqZWN0ICVrIChubGluayA9PSAlZCkgbm90IGZvdW5kIChwb3MgJWQpIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJ2cy0xMzA2MCIsCisJCQkJCSAic3RhdCBkYXRhIG9mIG9iamVjdCAlayAobmxpbmsgPT0gJWQpICIKKwkJCQkJICJub3QgZm91bmQgKHBvcyAlZCkiLAogCQkJCQkgSU5PREVfUEtFWShpbm9kZSksIGlub2RlLT5pX25saW5rLAogCQkJCQkgcG9zKTsKIAkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGgpOwpAQCAtMTQyNCwxMCArMTQyMyw5IEBACiAJLyogbG9vayBmb3IgdGhlIG9iamVjdCdzIHN0YXQgZGF0YSAqLwogCXJldHZhbCA9IHNlYXJjaF9pdGVtKGlub2RlLT5pX3NiLCAma2V5LCAmcGF0aF90b19zZCk7CiAJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAidnMtMTMwNzA6IHJlaXNlcmZzX3JlYWRfbG9ja2VkX2lub2RlOiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gZmluZCBzdGF0IGRhdGEgb2YgJUsiLAotCQkJCSAma2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0xMzA3MCIsCisJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBmaW5kICIKKwkJCSAgICAgICAic3RhdCBkYXRhIG9mICVLIiwgJmtleSk7CiAJCXJlaXNlcmZzX21ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE0NDYsNyArMTQ0NCw3IEBACiAJICAgdXBkYXRlIHNkIG9uIHVubGluayBhbGwgdGhhdCBpcyByZXF1aXJlZCBpcyB0byBjaGVjayBmb3IgbmxpbmsKIAkgICBoZXJlLiBUaGlzIGJ1ZyB3YXMgZmlyc3QgZm91bmQgYnkgU2l6aWYgd2hlbiBkZWJ1Z2dpbmcKIAkgICBTcXVpZE5HL0J1dHRlcmZseSwgZm9yZ290dGVuLCBhbmQgZm91bmQgYWdhaW4gYWZ0ZXIgUGhpbGlwcGUKLQkgICBHcmFtb3VsbGUgPHBoaWxpcHBlLmdyYW1vdWxsZUBtbWFuaWEuY29tPiByZXByb2R1Y2VkIGl0LiAKKwkgICBHcmFtb3VsbGUgPHBoaWxpcHBlLmdyYW1vdWxsZUBtbWFuaWEuY29tPiByZXByb2R1Y2VkIGl0LgogCiAJICAgTW9yZSBsb2dpY2FsIGZpeCB3b3VsZCByZXF1aXJlIGNoYW5nZXMgaW4gZnMvaW5vZGUuYzppcHV0KCkgdG8KIAkgICByZW1vdmUgaW5vZGUgZnJvbSBoYXNoLXRhYmxlIF9hZnRlcl8gZnMgY2xlYW5lZCBkaXNrIHN0dWZmIHVwIGFuZApAQCAtMTQ1Nyw4ICsxNDU1LDcgQEAKIAkgICBkdXJpbmcgbW91bnQgKGZzL3JlaXNlcmZzL3N1cGVyLmM6ZmluaXNoX3VuZmluaXNoZWQoKSkuICovCiAJaWYgKChpbm9kZS0+aV9ubGluayA9PSAwKSAmJgogCSAgICAhUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5zX2lzX3VubGlua2VkX29rKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJ2cy0xMzA3NTogcmVpc2VyZnNfcmVhZF9sb2NrZWRfaW5vZGU6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTEzMDc1IiwKIAkJCQkgImRlYWQgaW5vZGUgcmVhZCBmcm9tIGRpc2sgJUsuICIKIAkJCQkgIlRoaXMgaXMgbGlrZWx5IHRvIGJlIHJhY2Ugd2l0aCBrbmZzZC4gSWdub3JlIiwKIAkJCQkgJmtleSk7CkBAIC0xNTU1LDcgKzE1NTIsNyBAQAogCSAqLwogCWlmIChmaF90eXBlID4gZmhfbGVuKSB7CiAJCWlmIChmaF90eXBlICE9IDYgfHwgZmhfbGVuICE9IDUpCi0JCQlyZWlzZXJmc193YXJuaW5nKHNiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTEzMDc3IiwKIAkJCQkibmZzZC9yZWlzZXJmcywgZmh0eXBlPSVkLCBsZW49JWQgLSBvZGQiLAogCQkJCWZoX3R5cGUsIGZoX2xlbik7CiAJCWZoX3R5cGUgPSA1OwpAQCAtMTYyMiw3ICsxNjE5LDcgQEAKIAlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAtRVJPRlM7CiAJLyogbWVtb3J5IHByZXNzdXJlIGNhbiBzb21ldGltZXMgaW5pdGlhdGUgd3JpdGVfaW5vZGUgY2FsbHMgd2l0aCBzeW5jID09IDEsCi0JICoqIHRoZXNlIGNhc2VzIGFyZSBqdXN0IHdoZW4gdGhlIHN5c3RlbSBuZWVkcyByYW0sIG5vdCB3aGVuIHRoZSAKKwkgKiogdGhlc2UgY2FzZXMgYXJlIGp1c3Qgd2hlbiB0aGUgc3lzdGVtIG5lZWRzIHJhbSwgbm90IHdoZW4gdGhlCiAJICoqIGlub2RlIG5lZWRzIHRvIHJlYWNoIGRpc2sgZm9yIHNhZmV0eSwgYW5kIHRoZXkgY2FuIHNhZmVseSBiZQogCSAqKiBpZ25vcmVkIGJlY2F1c2UgdGhlIGFsdGVyZWQgaW5vZGUgaGFzIGFscmVhZHkgYmVlbiBsb2dnZWQuCiAJICovCkBAIC0xNjgwLDEzICsxNjc3LDEzIEBACiAJLyogbG9vayBmb3IgcGxhY2UgaW4gdGhlIHRyZWUgZm9yIG5ldyBpdGVtICovCiAJcmV0dmFsID0gc2VhcmNoX2l0ZW0oc2IsICZrZXksIHBhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwOiByZWlzZXJmc19uZXdfZGlyZWN0b3J5OiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgZGlyZWN0b3J5Iik7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtMTMwODAiLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgZGlyZWN0b3J5Iik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocmV0dmFsID09IElURU1fRk9VTkQpIHsKIAkJcGF0aHJlbHNlKHBhdGgpOwotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwNzA6IHJlaXNlcmZzX25ld19kaXJlY3Rvcnk6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDcwIiwKIAkJCQkgIm9iamVjdCB3aXRoIHRoaXMga2V5IGV4aXN0cyAoJWspIiwKIAkJCQkgJihpaC0+aWhfa2V5KSk7CiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMTcyMCwxMyArMTcxNywxMyBAQAogCS8qIGxvb2sgZm9yIHBsYWNlIGluIHRoZSB0cmVlIGZvciBuZXcgaXRlbSAqLwogCXJldHZhbCA9IHNlYXJjaF9pdGVtKHNiLCAma2V5LCBwYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MDogcmVpc2VyZnNfbmV3X3N5bWxpbmlrOiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgc3ltbGluayIpOworCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTEzMDgwIiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgY3JlYXRpbmcgbmV3IHN5bWxpbmsiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewogCQlwYXRocmVsc2UocGF0aCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MDogcmVpc2VyZnNfbmV3X3N5bWxpbms6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwIiwKIAkJCQkgIm9iamVjdCB3aXRoIHRoaXMga2V5IGV4aXN0cyAoJWspIiwKIAkJCQkgJihpaC0+aWhfa2V5KSk7CiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMTczOSw3ICsxNzM2LDcgQEAKIC8qIGluc2VydHMgdGhlIHN0YXQgZGF0YSBpbnRvIHRoZSB0cmVlLCBhbmQgdGhlbiBjYWxscwogICAgcmVpc2VyZnNfbmV3X2RpcmVjdG9yeSAodG8gaW5zZXJ0ICIuIiwgIi4uIiBpdGVtIGlmIG5ldyBvYmplY3QgaXMKICAgIGRpcmVjdG9yeSkgb3IgcmVpc2VyZnNfbmV3X3N5bWxpbmsgKHRvIGluc2VydCBzeW1saW5rIGJvZHkgaWYgbmV3Ci0gICBvYmplY3QgaXMgc3ltbGluaykgb3Igbm90aGluZyAoaWYgbmV3IG9iamVjdCBpcyByZWd1bGFyIGZpbGUpIAorICAgb2JqZWN0IGlzIHN5bWxpbmspIG9yIG5vdGhpbmcgKGlmIG5ldyBvYmplY3QgaXMgcmVndWxhciBmaWxlKQogCiAgICBOT1RFISB1aWQgYW5kIGdpZCBtdXN0IGFscmVhZHkgYmUgc2V0IGluIHRoZSBpbm9kZS4gIElmIHdlIHJldHVybgogICAgbm9uLXplcm8gZHVlIHRvIGFuIGVycm9yLCB3ZSBoYXZlIHRvIGRyb3AgdGhlIHF1b3RhIHByZXZpb3VzbHkgYWxsb2NhdGVkCkBAIC0xNzQ3LDEwICsxNzQ0LDExIEBACiAgICBpZiB3ZSByZXR1cm4gbm9uLXplcm8sIHdlIGFsc28gZW5kIHRoZSB0cmFuc2FjdGlvbi4gICovCiBpbnQgcmVpc2VyZnNfbmV3X2lub2RlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLAotCQkgICAgICAgLyogMCBmb3IgcmVndWxhciwgRU1UUllfRElSX1NJWkUgZm9yIGRpcnMsIAorCQkgICAgICAgLyogMCBmb3IgcmVndWxhciwgRU1UUllfRElSX1NJWkUgZm9yIGRpcnMsCiAJCSAgICAgICAgICBzdHJsZW4gKHN5bW5hbWUpIGZvciBzeW1saW5rcykgKi8KIAkJICAgICAgIGxvZmZfdCBpX3NpemUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjdXJpdHkpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgcmVpc2VyZnNfaWdldF9hcmdzIGFyZ3M7CkBAIC0xNzk2LDcgKzE3OTQsNyBAQAogCQlnb3RvIG91dF9iYWRfaW5vZGU7CiAJfQogCWlmIChvbGRfZm9ybWF0X29ubHkoc2IpKQotCQkvKiBub3QgYSBwZXJmZWN0IGdlbmVyYXRpb24gY291bnQsIGFzIG9iamVjdCBpZHMgY2FuIGJlIHJldXNlZCwgYnV0IAorCQkvKiBub3QgYSBwZXJmZWN0IGdlbmVyYXRpb24gY291bnQsIGFzIG9iamVjdCBpZHMgY2FuIGJlIHJldXNlZCwgYnV0CiAJCSAqKiB0aGlzIGlzIGFzIGdvb2QgYXMgcmVpc2VyZnMgY2FuIGRvIHJpZ2h0IG5vdy4KIAkJICoqIG5vdGUgdGhhdCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIGlub2RlIGlzbid0IGZpbGxlZCBpbiB5ZXQsIHdlIGhhdmUKIAkJICoqIHRvIHVzZSB0aGUgZGlyZWN0b3J5LgpAQCAtMTkxNyw5ICsxOTE1LDggQEAKIAkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CiAJfQogCi0JLyogWFhYIENIRUNLIFRISVMgKi8KIAlpZiAocmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKSB7Ci0JCXJldHZhbCA9IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woZGlyLCBkZW50cnksIGlub2RlKTsKKwkJcmV0dmFsID0gcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbCh0aCwgZGlyLCBkZW50cnksIGlub2RlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJZXJyID0gcmV0dmFsOwogCQkJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aF90b19rZXkpOwpAQCAtMTkyNywxMCArMTkyNCwyMyBAQAogCQkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CiAJCX0KIAl9IGVsc2UgaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIkFDTHMgYXJlbid0IGVuYWJsZWQgaW4gdGhlIGZzLCAiCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMTMwOTAiLAorCQkJCSAiQUNMcyBhcmVuJ3QgZW5hYmxlZCBpbiB0aGUgZnMsICIKIAkJCQkgImJ1dCB2ZnMgdGhpbmtzIHRoZXkgYXJlISIpOwotCX0gZWxzZSBpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGlyKSkgewotCQlyZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpOworCX0gZWxzZSBpZiAoSVNfUFJJVkFURShkaXIpKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CisKKwlpZiAoc2VjdXJpdHktPm5hbWUpIHsKKwkJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfd3JpdGUodGgsIGlub2RlLCBzZWN1cml0eSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWVyciA9IHJldHZhbDsKKwkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGhfdG9fa2V5KTsKKwkJCXJldHZhbCA9IGpvdXJuYWxfZW5kKHRoLCB0aC0+dF9zdXBlciwKKwkJCQkJICAgICB0aC0+dF9ibG9ja3NfYWxsb2NhdGVkKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZXJyID0gcmV0dmFsOworCQkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CisJCX0KIAl9CiAKIAlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKQEAgLTE5NjAsMTkgKzE5NzAsNyBAQAogCWlub2RlLT5pX25saW5rID0gMDsKIAl0aC0+dF90cmFuc19pZCA9IDA7CS8qIHNvIHRoZSBjYWxsZXIgY2FuJ3QgdXNlIHRoaXMgaGFuZGxlIGxhdGVyICovCiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7IC8qIE9LIHRvIGRvIGV2ZW4gaWYgd2UgaGFkbid0IGxvY2tlZCBpdCAqLwotCi0JLyogSWYgd2Ugd2VyZSBpbmhlcml0aW5nIGFuIEFDTCwgd2UgbmVlZCB0byByZWxlYXNlIHRoZSBsb2NrIHNvIHRoYXQKLQkgKiBpcHV0IGRvZXNuJ3QgZGVhZGxvY2sgaW4gcmVpc2VyZnNfZGVsZXRlX3hhdHRycy4gVGhlIGxvY2tpbmcKLQkgKiBjb2RlIHJlYWxseSBuZWVkcyB0byBiZSByZXdvcmtlZCwgYnV0IHRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgaXQKLQkgKiBmb3Igbm93LiAtamVmZm0gKi8KLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCi0JaWYgKFJFSVNFUkZTX0koZGlyKS0+aV9hY2xfZGVmYXVsdCAmJiAhSVNfRVJSKFJFSVNFUkZTX0koZGlyKS0+aV9hY2xfZGVmYXVsdCkpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlpcHV0KGlub2RlKTsKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQl9IGVsc2UKLSNlbmRpZgotCQlpcHV0KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTg5LDcgKzE5ODcsNyBAQAogKioKICoqIG9uIGZhaWx1cmUsIG5vbnplcm8gaXMgcmV0dXJuZWQsIHBhZ2VfcmVzdWx0IGFuZCBiaF9yZXN1bHQgYXJlIHVudG91Y2hlZC4KICovCi1zdGF0aWMgaW50IGdyYWJfdGFpbF9wYWdlKHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAorc3RhdGljIGludCBncmFiX3RhaWxfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfcmVzdWx0LAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaF9yZXN1bHQpCiB7CkBAIC0xOTk3LDExICsxOTk1LDExIEBACiAJLyogd2Ugd2FudCB0aGUgcGFnZSB3aXRoIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGZpbGUsCiAJICoqIG5vdCB0aGUgcGFnZSB0aGF0IHdpbGwgaG9sZCB0aGUgbmV4dCBieXRlIGZvciBhcHBlbmRpbmcKIAkgKi8KLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gKHBfc19pbm9kZS0+aV9zaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGluZGV4ID0gKGlub2RlLT5pX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgcG9zID0gMDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAocF9zX2lub2RlLT5pX3NpemUpICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKGlub2RlLT5pX3NpemUpICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjAxNSw3ICsyMDEzLDcgQEAKIAlpZiAoKG9mZnNldCAmIChibG9ja3NpemUgLSAxKSkgPT0gMCkgewogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShwX3NfaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOworCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOwogCWVycm9yID0gLUVOT01FTTsKIAlpZiAoIXBhZ2UpIHsKIAkJZ290byBvdXQ7CkBAIC0yMDQ0LDEwICsyMDQyLDggQEAKIAkJICoqIEkndmUgc2NyZXdlZCB1cCB0aGUgY29kZSB0byBmaW5kIHRoZSBidWZmZXIsIG9yIHRoZSBjb2RlIHRvCiAJCSAqKiBjYWxsIHByZXBhcmVfd3JpdGUKIAkJICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAiY2xtLTYwMDA6IGVycm9yIHJlYWRpbmcgYmxvY2sgJWx1IG9uIGRldiAlcyIsCi0JCQkJIGJoLT5iX2Jsb2NrbnIsCi0JCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHBfc19pbm9kZS0+aV9zYikpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgImNsbS02MDAwIiwKKwkJCSAgICAgICAiZXJyb3IgcmVhZGluZyBibG9jayAlbHUiLCBiaC0+Yl9ibG9ja25yKTsKIAkJZXJyb3IgPSAtRUlPOwogCQlnb3RvIHVubG9jazsKIAl9CkBAIC0yMDY5LDU3ICsyMDY1LDU4IEBACiAqKgogKiogc29tZSBjb2RlIHRha2VuIGZyb20gYmxvY2tfdHJ1bmNhdGVfcGFnZQogKi8KLWludCByZWlzZXJmc190cnVuY2F0ZV9maWxlKHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLCBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpCitpbnQgcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKIAkvKiB3ZSB3YW50IHRoZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBfc19pbm9kZS0+aV9zaXplICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpbm9kZS0+aV9zaXplICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAl1bnNpZ25lZCBsZW5ndGg7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgZXJyMjsKIAotCXJlaXNlcmZzX3dyaXRlX2xvY2socF9zX2lub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAotCWlmIChwX3NfaW5vZGUtPmlfc2l6ZSA+IDApIHsKLQkJaWYgKChlcnJvciA9IGdyYWJfdGFpbF9wYWdlKHBfc19pbm9kZSwgJnBhZ2UsICZiaCkpKSB7Ci0JCQkvLyAtRU5PRU5UIG1lYW5zIHdlIHRydW5jYXRlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIAorCWlmIChpbm9kZS0+aV9zaXplID4gMCkgeworCQllcnJvciA9IGdyYWJfdGFpbF9wYWdlKGlub2RlLCAmcGFnZSwgJmJoKTsKKwkJaWYgKGVycm9yKSB7CisJCQkvLyAtRU5PRU5UIG1lYW5zIHdlIHRydW5jYXRlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsCiAJCQkvLyBhbmQgZ2V0X2Jsb2NrX2NyZWF0ZV8wIGNvdWxkIG5vdCBmaW5kIGEgYmxvY2sgdG8gcmVhZCBpbiwKIAkJCS8vIHdoaWNoIGlzIG9rLgogCQkJaWYgKGVycm9yICE9IC1FTk9FTlQpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJCQkgImNsbS02MDAxOiBncmFiX3RhaWxfcGFnZSBmYWlsZWQgJWQiLAotCQkJCQkJIGVycm9yKTsKKwkJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgImNsbS02MDAxIiwKKwkJCQkJICAgICAgICJncmFiX3RhaWxfcGFnZSBmYWlsZWQgJWQiLAorCQkJCQkgICAgICAgZXJyb3IpOwogCQkJcGFnZSA9IE5VTEw7CiAJCQliaCA9IE5VTEw7CiAJCX0KIAl9CiAKLQkvKiBzbywgaWYgcGFnZSAhPSBOVUxMLCB3ZSBoYXZlIGEgYnVmZmVyIGhlYWQgZm9yIHRoZSBvZmZzZXQgYXQgCi0JICoqIHRoZSBlbmQgb2YgdGhlIGZpbGUuIGlmIHRoZSBiaCBpcyBtYXBwZWQsIGFuZCBiaC0+Yl9ibG9ja25yICE9IDAsIAotCSAqKiB0aGVuIHdlIGhhdmUgYW4gdW5mb3JtYXR0ZWQgbm9kZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSBhIGRpcmVjdCBpdGVtLCAKLQkgKiogYW5kIG5vIHplcm9pbmcgaXMgcmVxdWlyZWQgb24gZGlzay4gIFdlIHplcm8gYWZ0ZXIgdGhlIHRydW5jYXRlLCAKLQkgKiogYmVjYXVzZSB0aGUgdHJ1bmNhdGUgbWlnaHQgcGFjayB0aGUgaXRlbSBhbnl3YXkgCisJLyogc28sIGlmIHBhZ2UgIT0gTlVMTCwgd2UgaGF2ZSBhIGJ1ZmZlciBoZWFkIGZvciB0aGUgb2Zmc2V0IGF0CisJICoqIHRoZSBlbmQgb2YgdGhlIGZpbGUuIGlmIHRoZSBiaCBpcyBtYXBwZWQsIGFuZCBiaC0+Yl9ibG9ja25yICE9IDAsCisJICoqIHRoZW4gd2UgaGF2ZSBhbiB1bmZvcm1hdHRlZCBub2RlLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgZGlyZWN0IGl0ZW0sCisJICoqIGFuZCBubyB6ZXJvaW5nIGlzIHJlcXVpcmVkIG9uIGRpc2suICBXZSB6ZXJvIGFmdGVyIHRoZSB0cnVuY2F0ZSwKKwkgKiogYmVjYXVzZSB0aGUgdHJ1bmNhdGUgbWlnaHQgcGFjayB0aGUgaXRlbSBhbnl3YXkKIAkgKiogKGl0IHdpbGwgdW5tYXAgYmggaWYgaXQgcGFja3MpLgogCSAqLwogCS8qIGl0IGlzIGVub3VnaCB0byByZXNlcnZlIHNwYWNlIGluIHRyYW5zYWN0aW9uIGZvciAyIGJhbGFuY2luZ3M6CiAJICAgb25lIGZvciAic2F2ZSIgbGluayBhZGRpbmcgYW5kIGFub3RoZXIgZm9yIHRoZSBmaXJzdAogCSAgIGN1dF9mcm9tX2l0ZW0uIDEgaXMgZm9yIHVwZGF0ZV9zZCAqLwotCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIHBfc19pbm9kZS0+aV9zYiwKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwKIAkJCSAgICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKHBfc19pbm9kZSk7CisJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAlpZiAodXBkYXRlX3RpbWVzdGFtcHMpCiAJCS8qIHdlIGFyZSBkb2luZyByZWFsIHRydW5jYXRlOiBpZiB0aGUgc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZSBsYXN0CiAJCSAgIHRyYW5zYWN0aW9uIG9mIHRydW5jYXRpbmcgZ2V0cyBjb21taXR0ZWQgLSBvbiByZWJvb3QgdGhlIGZpbGUKIAkJICAgZWl0aGVyIGFwcGVhcnMgdHJ1bmNhdGVkIHByb3Blcmx5IG9yIG5vdCB0cnVuY2F0ZWQgYXQgYWxsICovCi0JCWFkZF9zYXZlX2xpbmsoJnRoLCBwX3NfaW5vZGUsIDEpOwotCWVycjIgPSByZWlzZXJmc19kb190cnVuY2F0ZSgmdGgsIHBfc19pbm9kZSwgcGFnZSwgdXBkYXRlX3RpbWVzdGFtcHMpOworCQlhZGRfc2F2ZV9saW5rKCZ0aCwgaW5vZGUsIDEpOworCWVycjIgPSByZWlzZXJmc19kb190cnVuY2F0ZSgmdGgsIGlub2RlLCBwYWdlLCB1cGRhdGVfdGltZXN0YW1wcyk7CiAJZXJyb3IgPQotCSAgICBqb3VybmFsX2VuZCgmdGgsIHBfc19pbm9kZS0+aV9zYiwgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMSk7CisJICAgIGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKQEAgLTIxMzAsNyArMjEyNyw3IEBACiAJfQogCQogCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewotCQllcnJvciA9IHJlbW92ZV9zYXZlX2xpbmsocF9zX2lub2RlLCAxIC8qIHRydW5jYXRlICovICk7CisJCWVycm9yID0gcmVtb3ZlX3NhdmVfbGluayhpbm9kZSwgMSAvKiB0cnVuY2F0ZSAqLyk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTIxNDksMTQgKzIxNDYsMTQgQEAKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KIAotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhwX3NfaW5vZGUtPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJcmV0dXJuIDA7CiAgICAgICBvdXQ6CiAJaWYgKHBhZ2UpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHBfc19pbm9kZS0+aV9zYik7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTIyMDgsOSArMjIwNSw4IEBACiAJLyogd2UndmUgZm91bmQgYW4gdW5mb3JtYXR0ZWQgbm9kZSAqLwogCWlmIChpbmRpcmVjdF9pdGVtX2ZvdW5kKHJldHZhbCwgaWgpKSB7CiAJCWlmIChieXRlc19jb3BpZWQgPiAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgImNsbS02MDAyOiBieXRlc19jb3BpZWQgJWQiLAotCQkJCQkgYnl0ZXNfY29waWVkKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJjbG0tNjAwMiIsCisJCQkJCSAiYnl0ZXNfY29waWVkICVkIiwgYnl0ZXNfY29waWVkKTsKIAkJfQogCQlpZiAoIWdldF9ibG9ja19udW0oaXRlbSwgcG9zX2luX2l0ZW0pKSB7CiAJCQkvKiBjcmFwLCB3ZSBhcmUgd3JpdGluZyB0byBhIGhvbGUgKi8KQEAgLTIyNjcsOSArMjI2Myw4IEBACiAJCQlnb3RvIHJlc2VhcmNoOwogCQl9CiAJfSBlbHNlIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgImNsbS02MDAzOiBiYWQgaXRlbSBpbm9kZSAlbHUsIGRldmljZSAlcyIsCi0JCQkJIGlub2RlLT5pX2lubywgcmVpc2VyZnNfYmRldm5hbWUoaW5vZGUtPmlfc2IpKTsKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS02MDAzIiwKKwkJCQkgImJhZCBpdGVtIGlub2RlICVsdSIsIGlub2RlLT5pX2lubyk7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIzMTIsOCArMjMwNyw4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogCi0gKiBtYXNvbkBzdXNlLmNvbTogdXBkYXRlZCBpbiAyLjUuNTQgdG8gZm9sbG93IHRoZSBzYW1lIGdlbmVyYWwgaW8gCisvKgorICogbWFzb25Ac3VzZS5jb206IHVwZGF0ZWQgaW4gMi41LjU0IHRvIGZvbGxvdyB0aGUgc2FtZSBnZW5lcmFsIGlvCiAgKiBzdGFydC9yZWNvdmVyeSBwYXRoIGFzIF9fYmxvY2tfd3JpdGVfZnVsbF9wYWdlLCBhbG9uZyB3aXRoIHNwZWNpYWwKICAqIGNvZGUgdG8gaGFuZGxlIHJlaXNlcmZzIHRhaWxzLgogICovCkBAIC0yNDUzLDcgKzI0NDgsNyBAQAogCXVubG9ja19wYWdlKHBhZ2UpOwogCiAJLyoKLQkgKiBzaW5jZSBhbnkgYnVmZmVyIG1pZ2h0IGJlIHRoZSBvbmx5IGRpcnR5IGJ1ZmZlciBvbiB0aGUgcGFnZSwgCisJICogc2luY2UgYW55IGJ1ZmZlciBtaWdodCBiZSB0aGUgb25seSBkaXJ0eSBidWZmZXIgb24gdGhlIHBhZ2UsCiAJICogdGhlIGZpcnN0IHN1Ym1pdF9iaCBjYW4gYnJpbmcgdGhlIHBhZ2Ugb3V0IG9mIHdyaXRlYmFjay4KIAkgKiBiZSBjYXJlZnVsIHdpdGggdGhlIGJ1ZmZlcnMuCiAJICovCkBAIC0yNDcyLDggKzI0NjcsOCBAQAogCWlmIChuciA9PSAwKSB7CiAJCS8qCiAJCSAqIGlmIHRoaXMgcGFnZSBvbmx5IGhhZCBhIGRpcmVjdCBpdGVtLCBpdCBpcyB2ZXJ5IHBvc3NpYmxlIGZvcgotCQkgKiBubyBpbyB0byBiZSByZXF1aXJlZCB3aXRob3V0IHRoZXJlIGJlaW5nIGFuIGVycm9yLiAgT3IsIAotCQkgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBsb2NrZWQgdGhlbSBhbmQgc2VudCB0aGVtIGRvd24gdGhlIAorCQkgKiBubyBpbyB0byBiZSByZXF1aXJlZCB3aXRob3V0IHRoZXJlIGJlaW5nIGFuIGVycm9yLiAgT3IsCisJCSAqIHNvbWVvbmUgZWxzZSBjb3VsZCBoYXZlIGxvY2tlZCB0aGVtIGFuZCBzZW50IHRoZW0gZG93biB0aGUKIAkJICogcGlwZSB3aXRob3V0IGxvY2tpbmcgdGhlIHBhZ2UKIAkJICovCiAJCWJoID0gaGVhZDsKQEAgLTI0OTIsNyArMjQ4Nyw3IEBACiAKICAgICAgIGZhaWw6CiAJLyogY2F0Y2hlcyB2YXJpb3VzIGVycm9ycywgd2UgbmVlZCB0byBtYWtlIHN1cmUgYW55IHZhbGlkIGRpcnR5IGJsb2NrcwotCSAqIGdldCB0byB0aGUgbWVkaWEuICBUaGUgcGFnZSBpcyBjdXJyZW50bHkgbG9ja2VkIGFuZCBub3QgbWFya2VkIGZvciAKKwkgKiBnZXQgdG8gdGhlIG1lZGlhLiAgVGhlIHBhZ2UgaXMgY3VycmVudGx5IGxvY2tlZCBhbmQgbm90IG1hcmtlZCBmb3IKIAkgKiB3cml0ZWJhY2sKIAkgKi8KIAlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCmluZGV4IDgzMDMzMjAuLjBjY2MzZmQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMKKysrIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogCiAJLyogd2UgdW5wYWNrIGJ5IGZpbmRpbmcgdGhlIHBhZ2Ugd2l0aCB0aGUgdGFpbCwgYW5kIGNhbGxpbmcKLQkgKiogcmVpc2VyZnNfcHJlcGFyZV93cml0ZSBvbiB0aGF0IHBhZ2UuICBUaGlzIHdpbGwgZm9yY2UgYSAKKwkgKiogcmVpc2VyZnNfcHJlcGFyZV93cml0ZSBvbiB0aGF0IHBhZ2UuICBUaGlzIHdpbGwgZm9yY2UgYQogCSAqKiByZWlzZXJmc19nZXRfYmxvY2sgdG8gdW5wYWNrIHRoZSB0YWlsIGZvciB1cy4KIAkgKi8KIAlpbmRleCA9IGlub2RlLT5pX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMgYi9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCmluZGV4IDk0NzU1NTcuLjcyY2IxY2MgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKKysrIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwpAQCAtOTcsNyArOTcsOCBAQAogCiBzdGF0aWMgdm9pZCBzZF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJTVEFUREFUQSwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAwIiwKKwkJCSAiU1RBVERBVEEsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgpOwogfQogCkBAIC0xOTAsNyArMTkxLDggQEAKIAogc3RhdGljIHZvaWQgZGlyZWN0X3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgIkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAxIiwKKwkJCSAiRElSRUNULCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loKTsKIH0KIApAQCAtMjc4LDcgKzI4MCw3IEBACiAJdW5wID0gKF9fbGUzMiAqKSBpdGVtOwogCiAJaWYgKGloX2l0ZW1fbGVuKGloKSAlIFVORk1fUF9TSVpFKQotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJpbmRpcmVjdF9wcmludF9pdGVtOiBpbnZhbGlkIGl0ZW0gbGVuIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAyIiwgImludmFsaWQgaXRlbSBsZW4iKTsKIAogCXByaW50aygiJWQgcG9pbnRlcnNcblsgIiwgKGludClJX1VORk1fTlVNKGloKSk7CiAJZm9yIChqID0gMDsgaiA8IElfVU5GTV9OVU0oaWgpOyBqKyspIHsKQEAgLTMzNCw3ICszMzYsOCBAQAogCiBzdGF0aWMgdm9pZCBpbmRpcmVjdF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJJTkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAzIiwKKwkJCSAiSU5ESVJFQ1QsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgpOwogfQogCkBAIC0zNTksNyArMzYyLDcgQEAKIAogc3RhdGljIGludCBkaXJlbnRyeV9ieXRlc19udW1iZXIoc3RydWN0IGl0ZW1faGVhZCAqaWgsIGludCBibG9ja19zaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInZzLTE2MDkwOiBkaXJlbnRyeV9ieXRlc19udW1iZXI6ICIKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJ2cy0xNjA5MCIsCiAJCQkgImJ5dGVzIG51bWJlciBpcyBhc2tlZCBmb3IgZGlyZW50cnkiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNCw4ICs1MTcsOSBAQAogCQkgICAgKChpc19hZmZlY3RlZAogCQkgICAgICAmJiAodm4tPnZuX21vZGUgPT0gTV9QQVNURQogCQkJICB8fCB2bi0+dm5fbW9kZSA9PSBNX0NVVCkpID8gaW5zZXJ0X3NpemUgOiAwKSkgewotCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCQkgICAgICAgInZzLTgwMjU6IHNldF9lbnRyeV9zaXplczogKG1vZGU9PSVjLCBpbnNlcnRfc2l6ZT09JWQpLCBpbnZhbGlkIGxlbmd0aCBvZiBkaXJlY3RvcnkgaXRlbSIsCisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtODAyNSIsICIobW9kZT09JWMsICIKKwkJCQkgICAgICAgImluc2VydF9zaXplPT0lZCksIGludmFsaWQgbGVuZ3RoIG9mICIKKwkJCQkgICAgICAgImRpcmVjdG9yeSBpdGVtIiwKIAkJCQkgICAgICAgdm4tPnZuX21vZGUsIGluc2VydF9zaXplKTsKIAkJfQogCX0KQEAgLTU0Niw3ICs1NTAsOCBAQAogCX0KIAogCWlmIChlbnRyaWVzID09IGRpcl91LT5lbnRyeV9jb3VudCkgewotCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiZnJlZSBzcGFjZSAlZCwgZW50cnlfY291bnQgJWRcbiIsIGZyZWUsCisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJpdGVtX29wcy0xIiwKKwkJCSAgICAgICAiZnJlZSBzcGFjZSAlZCwgZW50cnlfY291bnQgJWQiLCBmcmVlLAogCQkJICAgICAgIGRpcl91LT5lbnRyeV9jb3VudCk7CiAJfQogCkBAIC02MTQsNyArNjE5LDggQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgZGlyZW50cnlfdWFyZWEgKmRpcl91ID0gdmktPnZpX3VhcmVhOwogCi0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiRElSRU5UUlksIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoLCBmbGFncyAweCV4IiwKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwNCIsCisJCQkgIkRJUkVOVFJZLCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCwgZmxhZ3MgMHgleCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loLCBkaXJfdS0+ZmxhZ3MpOwogCXByaW50aygiJWQgZW50cmllczogIiwgZGlyX3UtPmVudHJ5X2NvdW50KTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlyX3UtPmVudHJ5X2NvdW50OyBpKyspCkBAIC02NDIsNDMgKzY0OCw0MyBAQAogLy8KIHN0YXRpYyBpbnQgZXJyY2F0Y2hfYnl0ZXNfbnVtYmVyKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBpbnQgYmxvY2tfc2l6ZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDAxOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDAxIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZXJyY2F0Y2hfZGVjcmVtZW50X2tleShzdHJ1Y3QgY3B1X2tleSAqa2V5KQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDI6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDIiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX2lzX2xlZnRfbWVyZ2VhYmxlKHN0cnVjdCByZWlzZXJmc19rZXkgKmtleSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJzaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDM6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDMiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9wcmludF9pdGVtKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBjaGFyICppdGVtKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDQ6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDQiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9jaGVja19pdGVtKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBjaGFyICppdGVtKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDU6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDUiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX2NyZWF0ZV92aShzdHJ1Y3QgdmlydHVhbF9ub2RlICp2biwKIAkJCSAgICAgIHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLAogCQkJICAgICAgaW50IGlzX2FmZmVjdGVkLCBpbnQgaW5zZXJ0X3NpemUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwNjogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwNiIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CQkvLyBXZSBtaWdodCByZXR1cm4gLTEgaGVyZSBhcyB3ZWxsLCBidXQgaXQgd29uJ3QgaGVscCBhcyBjcmVhdGVfdmlydHVhbF9ub2RlKCkgZnJvbSB3aGVyZQogCS8vIHRoaXMgb3BlcmF0aW9uIGlzIGNhbGxlZCBmcm9tIGlzIG9mIHJldHVybiB0eXBlIHZvaWQuCiB9CkBAIC02ODYsMzYgKzY5MiwzNiBAQAogc3RhdGljIGludCBlcnJjYXRjaF9jaGVja19sZWZ0KHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLCBpbnQgZnJlZSwKIAkJCSAgICAgICBpbnQgc3RhcnRfc2tpcCwgaW50IGVuZF9za2lwKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDc6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDciLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF9jaGVja19yaWdodChzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwgaW50IGZyZWUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwODogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwOCIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX3BhcnRfc2l6ZShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwgaW50IGZpcnN0LCBpbnQgY291bnQpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwOTogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwOSIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfdW5pdF9udW0oc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAxMDogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAxMCIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGVycmNhdGNoX3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMTE6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMTEiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgc3RydWN0IGl0ZW1fb3BlcmF0aW9ucyBlcnJjYXRjaF9vcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKaW5kZXggOTY0M2MzYi4uNzdmNWJiNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvam91cm5hbC5jCisrKyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwpAQCAtMSwzNiArMSwzNiBAQAogLyoKICoqIFdyaXRlIGFoZWFkIGxvZ2dpbmcgaW1wbGVtZW50YXRpb24gY29weXJpZ2h0IENocmlzIE1hc29uIDIwMDAKICoqCi0qKiBUaGUgYmFja2dyb3VuZCBjb21taXRzIG1ha2UgdGhpcyBjb2RlIHZlcnkgaW50ZXJlbGF0ZWQsIGFuZCAKKyoqIFRoZSBiYWNrZ3JvdW5kIGNvbW1pdHMgbWFrZSB0aGlzIGNvZGUgdmVyeSBpbnRlcmVsYXRlZCwgYW5kCiAqKiBvdmVybHkgY29tcGxleC4gIEkgbmVlZCB0byByZXRoaW5rIHRoaW5ncyBhIGJpdC4uLi5UaGUgbWFqb3IgcGxheWVyczoKICoqCi0qKiBqb3VybmFsX2JlZ2luIC0tIGNhbGwgd2l0aCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB5b3UgZXhwZWN0IHRvIGxvZy4gIAorKiogam91cm5hbF9iZWdpbiAtLSBjYWxsIHdpdGggdGhlIG51bWJlciBvZiBibG9ja3MgeW91IGV4cGVjdCB0byBsb2cuCiAqKiAgICAgICAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbwotKiogCQkgICAgb2xkLCBpdCB3aWxsIGJsb2NrIHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIAorKiogCQkgICAgb2xkLCBpdCB3aWxsIGJsb2NrIHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzCiAqKiAJCSAgICBmaW5pc2hlZCwgYW5kIHRoZW4gc3RhcnQgYSBuZXcgb25lLgotKioJCSAgICBVc3VhbGx5LCB5b3VyIHRyYW5zYWN0aW9uIHdpbGwgZ2V0IGpvaW5lZCBpbiB3aXRoIAorKioJCSAgICBVc3VhbGx5LCB5b3VyIHRyYW5zYWN0aW9uIHdpbGwgZ2V0IGpvaW5lZCBpbiB3aXRoCiAqKiAgICAgICAgICAgICAgICAgIHByZXZpb3VzIG9uZXMgZm9yIHNwZWVkLgogKioKLSoqIGpvdXJuYWxfam9pbiAgLS0gc2FtZSBhcyBqb3VybmFsX2JlZ2luLCBidXQgd29uJ3QgYmxvY2sgb24gdGhlIGN1cnJlbnQgCisqKiBqb3VybmFsX2pvaW4gIC0tIHNhbWUgYXMgam91cm5hbF9iZWdpbiwgYnV0IHdvbid0IGJsb2NrIG9uIHRoZSBjdXJyZW50CiAqKiAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uIHJlZ2FyZGxlc3Mgb2YgYWdlLiAgRG9uJ3QgZXZlciBjYWxsCi0qKiAgICAgICAgICAgICAgICAgIHRoaXMuICBFdmVyLiAgVGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyBpdCBzaG91bGQgYmUgCisqKiAgICAgICAgICAgICAgICAgIHRoaXMuICBFdmVyLiAgVGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyBpdCBzaG91bGQgYmUKICoqICAgICAgICAgICAgICAgICAgY2FsbGVkIGZyb20sIGFuZCB0aGV5IGFyZSBib3RoIGluc2lkZSB0aGlzIGZpbGUuCiAqKgotKiogam91cm5hbF9tYXJrX2RpcnR5IC0tIGFkZHMgYmxvY2tzIGludG8gdGhpcyB0cmFuc2FjdGlvbi4gIGNsZWFycyBhbnkgZmxhZ3MgCisqKiBqb3VybmFsX21hcmtfZGlydHkgLS0gYWRkcyBibG9ja3MgaW50byB0aGlzIHRyYW5zYWN0aW9uLiAgY2xlYXJzIGFueSBmbGFncwogKiogICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWlnaHQgbWFrZSB0aGVtIGdldCBzZW50IHRvIGRpc2sKLSoqICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBtYXJrcyB0aGVtIEJIX0pEaXJ0eS4gIFB1dHMgdGhlIGJ1ZmZlciBoZWFkIAotKiogICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzaC4gIAorKiogICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIG1hcmtzIHRoZW0gQkhfSkRpcnR5LiAgUHV0cyB0aGUgYnVmZmVyIGhlYWQKKyoqICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGhhc2guCiAqKgogKiogam91cm5hbF9lbmQgLS0gaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYmF0Y2hhYmxlLCBpdCBkb2VzIG5vdGhpbmcKICoqICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgaXQgY291bGQgZG8gYW4gYXN5bmMvc3luY2hyb25vdXMgY29tbWl0LCBvcgotKiogICAgICAgICAgICAgICAgICAgYSBmdWxsIGZsdXNoIG9mIGFsbCBsb2cgYW5kIHJlYWwgYmxvY2tzIGluIHRoZSAKKyoqICAgICAgICAgICAgICAgICAgIGEgZnVsbCBmbHVzaCBvZiBhbGwgbG9nIGFuZCByZWFsIGJsb2NrcyBpbiB0aGUKICoqICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLgogKioKLSoqIGZsdXNoX29sZF9jb21taXRzIC0tIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGl0IGlzIGVuZGVkIGFuZCAKLSoqICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBibG9ja3MgYXJlIHNlbnQgdG8gZGlzay4gIEZvcmNlcyBjb21taXQgYmxvY2tzIAotKiogICAgICAgICAgICAgICAgICAgICAgdG8gZGlzayBmb3IgYWxsIGJhY2tncm91bmRlZCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIAorKiogZmx1c2hfb2xkX2NvbW1pdHMgLS0gaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgaXQgaXMgZW5kZWQgYW5kCisqKiAgICAgICAgICAgICAgICAgICAgICBjb21taXQgYmxvY2tzIGFyZSBzZW50IHRvIGRpc2suICBGb3JjZXMgY29tbWl0IGJsb2NrcworKiogICAgICAgICAgICAgICAgICAgICAgdG8gZGlzayBmb3IgYWxsIGJhY2tncm91bmRlZCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuCiAqKiAgICAgICAgICAgICAgICAgICAgICBhcm91bmQgdG9vIGxvbmcuCi0qKgkJICAgICAtLSBOb3RlLCBpZiB5b3UgY2FsbCB0aGlzIGFzIGFuIGltbWVkaWF0ZSBmbHVzaCBmcm9tIAorKioJCSAgICAgLS0gTm90ZSwgaWYgeW91IGNhbGwgdGhpcyBhcyBhbiBpbW1lZGlhdGUgZmx1c2ggZnJvbQogKioJCSAgICAgICAgZnJvbSB3aXRoaW4ga3VwZGF0ZSwgaXQgd2lsbCBpZ25vcmUgdGhlIGltbWVkaWF0ZSBmbGFnCiAqLwogCkBAIC05Nyw3ICs5Nyw3IEBACiAJCQkgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLCBpbnQgZmx1c2hhbGwpOwogc3RhdGljIGludCBjYW5fZGlydHkoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuKTsKIHN0YXRpYyBpbnQgam91cm5hbF9qb2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2Nrcyk7CisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpOwogc3RhdGljIGludCByZWxlYXNlX2pvdXJuYWxfZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsCiAJCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwpOwogc3RhdGljIGludCBkaXJ0eV9vbmVfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzLApAQCAtMTEzLDEyICsxMTMsMTIgQEAKIH07CiAKIHN0YXRpYyBpbnQgZG9fam91cm5hbF9iZWdpbl9yKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBuYmxvY2tzLCBpbnQgam9pbik7CiAKLXN0YXRpYyB2b2lkIGluaXRfam91cm5hbF9oYXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgaW5pdF9qb3VybmFsX2hhc2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCW1lbXNldChqb3VybmFsLT5qX2hhc2hfdGFibGUsIDAsCiAJICAgICAgIEpPVVJOQUxfSEFTSF9TSVpFICogc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICopKTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICphbGxvY2F0ZV9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sKLQkJCQkJCQkgKnBfc19zYikKKwkJCQkJCQkgKnNiKQogewogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm47CiAJc3RhdGljIGludCBpZDsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWlmICghYm4pIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWJuLT5kYXRhID0ga3phbGxvYyhwX3Nfc2ItPnNfYmxvY2tzaXplLCBHRlBfTk9GUyk7CisJYm4tPmRhdGEgPSBremFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX05PRlMpOwogCWlmICghYm4tPmRhdGEpIHsKIAkJa2ZyZWUoYm4pOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE2NCw5ICsxNjQsOSBAQAogCXJldHVybiBibjsKIH0KIAotc3RhdGljIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqZ2V0X2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqZ2V0X2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGpvdXJuYWwtPmpfYml0bWFwX25vZGVzLm5leHQ7CiAKQEAgLTE3NiwyMSArMTc2LDIxIEBACiAJaWYgKGVudHJ5ICE9ICZqb3VybmFsLT5qX2JpdG1hcF9ub2RlcykgewogCQlibiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSwgbGlzdCk7CiAJCWxpc3RfZGVsKGVudHJ5KTsKLQkJbWVtc2V0KGJuLT5kYXRhLCAwLCBwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwkJbWVtc2V0KGJuLT5kYXRhLCAwLCBzYi0+c19ibG9ja3NpemUpOwogCQlqb3VybmFsLT5qX2ZyZWVfYml0bWFwX25vZGVzLS07CiAJCXJldHVybiBibjsKIAl9Ci0JYm4gPSBhbGxvY2F0ZV9iaXRtYXBfbm9kZShwX3Nfc2IpOworCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUoc2IpOwogCWlmICghYm4pIHsKIAkJeWllbGQoKTsKIAkJZ290byByZXBlYXQ7CiAJfQogCXJldHVybiBibjsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWpvdXJuYWwtPmpfdXNlZF9iaXRtYXBfbm9kZXMtLTsKIAlpZiAoam91cm5hbC0+al9mcmVlX2JpdG1hcF9ub2RlcyA+IFJFSVNFUkZTX01BWF9CSVRNQVBfTk9ERVMpIHsKIAkJa2ZyZWUoYm4tPmRhdGEpOwpAQCAtMjAxLDQ2ICsyMDEsNDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFsbG9jYXRlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGFsbG9jYXRlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCBpOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibiA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IFJFSVNFUkZTX01JTl9CSVRNQVBfTk9ERVM7IGkrKykgewotCQlibiA9IGFsbG9jYXRlX2JpdG1hcF9ub2RlKHBfc19zYik7CisJCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUoc2IpOwogCQlpZiAoYm4pIHsKIAkJCWxpc3RfYWRkKCZibi0+bGlzdCwgJmpvdXJuYWwtPmpfYml0bWFwX25vZGVzKTsKIAkJCWpvdXJuYWwtPmpfZnJlZV9iaXRtYXBfbm9kZXMrKzsKIAkJfSBlbHNlIHsKLQkJCWJyZWFrOwkvLyB0aGlzIGlzIG9rLCB3ZSdsbCB0cnkgYWdhaW4gd2hlbiBtb3JlIGFyZSBuZWVkZWQgCisJCQlicmVhazsJLyogdGhpcyBpcyBvaywgd2UnbGwgdHJ5IGFnYWluIHdoZW4gbW9yZSBhcmUgbmVlZGVkICovCiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2JpdF9pbl9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgc2V0X2JpdF9pbl9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgYl9ibG9ja25yX3QgYmxvY2ssCiAJCQkJICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiKQogewotCXVuc2lnbmVkIGludCBibWFwX25yID0gYmxvY2sgLyAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKLQl1bnNpZ25lZCBpbnQgYml0X25yID0gYmxvY2sgJSAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwl1bnNpZ25lZCBpbnQgYm1hcF9uciA9IGJsb2NrIC8gKHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwl1bnNpZ25lZCBpbnQgYml0X25yID0gYmxvY2sgJSAoc2ItPnNfYmxvY2tzaXplIDw8IDMpOwogCiAJaWYgKCFqYi0+Yml0bWFwc1tibWFwX25yXSkgewotCQlqYi0+Yml0bWFwc1tibWFwX25yXSA9IGdldF9iaXRtYXBfbm9kZShwX3Nfc2IpOworCQlqYi0+Yml0bWFwc1tibWFwX25yXSA9IGdldF9iaXRtYXBfbm9kZShzYik7CiAJfQogCXNldF9iaXQoYml0X25yLCAodW5zaWduZWQgbG9uZyAqKWpiLT5iaXRtYXBzW2JtYXBfbnJdLT5kYXRhKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW51cF9iaXRtYXBfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyB2b2lkIGNsZWFudXBfYml0bWFwX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiKQogewogCWludCBpOwogCWlmIChqYi0+Yml0bWFwcyA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcmVpc2VyZnNfYm1hcF9jb3VudChzYik7IGkrKykgewogCQlpZiAoamItPmJpdG1hcHNbaV0pIHsKLQkJCWZyZWVfYml0bWFwX25vZGUocF9zX3NiLCBqYi0+Yml0bWFwc1tpXSk7CisJCQlmcmVlX2JpdG1hcF9ub2RlKHNiLCBqYi0+Yml0bWFwc1tpXSk7CiAJCQlqYi0+Yml0bWFwc1tpXSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0yNDksNyArMjQ5LDcgQEAKIC8qCiAqKiBvbmx5IGNhbGwgdGhpcyBvbiBGUyB1bm1vdW50LgogKi8KLXN0YXRpYyBpbnQgZnJlZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGZyZWVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamJfYXJyYXkpCiB7CiAJaW50IGk7CkBAIC0yNTcsMTYgKzI1NywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBKT1VSTkFMX05VTV9CSVRNQVBTOyBpKyspIHsKIAkJamIgPSBqYl9hcnJheSArIGk7CiAJCWpiLT5qb3VybmFsX2xpc3QgPSBOVUxMOwotCQljbGVhbnVwX2JpdG1hcF9saXN0KHBfc19zYiwgamIpOworCQljbGVhbnVwX2JpdG1hcF9saXN0KHNiLCBqYik7CiAJCXZmcmVlKGpiLT5iaXRtYXBzKTsKIAkJamItPmJpdG1hcHMgPSBOVUxMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmcmVlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbnQgZnJlZV9iaXRtYXBfbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQgPSBqb3VybmFsLT5qX2JpdG1hcF9ub2Rlcy5uZXh0OwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm47CiAKQEAgLTI4MywxMCArMjgzLDEwIEBACiB9CiAKIC8qCi0qKiBnZXQgbWVtb3J5IGZvciBKT1VSTkFMX05VTV9CSVRNQVBTIHdvcnRoIG9mIGJpdG1hcHMuIAorKiogZ2V0IG1lbW9yeSBmb3IgSk9VUk5BTF9OVU1fQklUTUFQUyB3b3J0aCBvZiBiaXRtYXBzLgogKiogamJfYXJyYXkgaXMgdGhlIGFycmF5IHRvIGJlIGZpbGxlZCBpbi4KICovCi1pbnQgcmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamJfYXJyYXksCiAJCQkJICAgdW5zaWduZWQgaW50IGJtYXBfbnIpCiB7CkBAIC0zMDAsMzAgKzMwMCwzMCBAQAogCQlqYi0+am91cm5hbF9saXN0ID0gTlVMTDsKIAkJamItPmJpdG1hcHMgPSB2bWFsbG9jKG1lbSk7CiAJCWlmICghamItPmJpdG1hcHMpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImNsbS0yMDAwLCB1bmFibGUgdG8gYWxsb2NhdGUgYml0bWFwcyBmb3Igam91cm5hbCBsaXN0cyIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImNsbS0yMDAwIiwgInVuYWJsZSB0byAiCisJCQkJCSAiYWxsb2NhdGUgYml0bWFwcyBmb3Igam91cm5hbCBsaXN0cyIpOwogCQkJZmFpbGVkID0gMTsKIAkJCWJyZWFrOwogCQl9CiAJCW1lbXNldChqYi0+Yml0bWFwcywgMCwgbWVtKTsKIAl9CiAJaWYgKGZhaWxlZCkgewotCQlmcmVlX2xpc3RfYml0bWFwcyhwX3Nfc2IsIGpiX2FycmF5KTsKKwkJZnJlZV9saXN0X2JpdG1hcHMoc2IsIGpiX2FycmF5KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyoKLSoqIGZpbmQgYW4gYXZhaWxhYmxlIGxpc3QgYml0bWFwLiAgSWYgeW91IGNhbid0IGZpbmQgb25lLCBmbHVzaCBhIGNvbW1pdCBsaXN0IAorKiogZmluZCBhbiBhdmFpbGFibGUgbGlzdCBiaXRtYXAuICBJZiB5b3UgY2FuJ3QgZmluZCBvbmUsIGZsdXNoIGEgY29tbWl0IGxpc3QKICoqIGFuZCB0cnkgYWdhaW4KICovCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpnZXRfbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpnZXRfbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0CiAJCQkJCQkgICAgKmpsKQogewogCWludCBpLCBqOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYiA9IE5VTEw7CiAKIAlmb3IgKGogPSAwOyBqIDwgKEpPVVJOQUxfTlVNX0JJVE1BUFMgKiAzKTsgaisrKSB7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAkJam91cm5hbC0+al9saXN0X2JpdG1hcF9pbmRleCA9IChpICsgMSkgJSBKT1VSTkFMX05VTV9CSVRNQVBTOwogCQlqYiA9IGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAgKyBpOwogCQlpZiAoam91cm5hbC0+al9saXN0X2JpdG1hcFtpXS5qb3VybmFsX2xpc3QpIHsKLQkJCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwKKwkJCWZsdXNoX2NvbW1pdF9saXN0KHNiLAogCQkJCQkgIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXBbaV0uCiAJCQkJCSAgam91cm5hbF9saXN0LCAxKTsKIAkJCWlmICgham91cm5hbC0+al9saXN0X2JpdG1hcFtpXS5qb3VybmFsX2xpc3QpIHsKQEAgLTM0OCw3ICszNDgsNyBAQAogCXJldHVybiBqYjsKIH0KIAotLyogCisvKgogKiogYWxsb2NhdGVzIGEgbmV3IGNodW5rIG9mIFggbm9kZXMsIGFuZCBsaW5rcyB0aGVtIGFsbCB0b2dldGhlciBhcyBhIGxpc3QuCiAqKiBVc2VzIHRoZSBjbm9kZS0+bmV4dCBhbmQgY25vZGUtPnByZXYgcG9pbnRlcnMKICoqIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlCkBAIC0zNzYsMTQgKzM3NiwxNCBAQAogfQogCiAvKgotKiogcHVsbHMgYSBjbm9kZSBvZmYgdGhlIGZyZWUgbGlzdCwgb3IgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgCisqKiBwdWxscyBhIGNub2RlIG9mZiB0aGUgZnJlZSBsaXN0LCBvciByZXR1cm5zIE5VTEwgb24gZmFpbHVyZQogKi8KLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqZ2V0X2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpnZXRfY25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY247Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiZ2V0X2Nub2RlIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImdldF9jbm9kZSIpOwogCiAJaWYgKGpvdXJuYWwtPmpfY25vZGVfZnJlZSA8PSAwKSB7CiAJCXJldHVybiBOVUxMOwpAQCAtNDAzLDE0ICs0MDMsMTQgQEAKIH0KIAogLyoKLSoqIHJldHVybnMgYSBjbm9kZSB0byB0aGUgZnJlZSBsaXN0IAorKiogcmV0dXJucyBhIGNub2RlIHRvIHRoZSBmcmVlIGxpc3QKICovCi1zdGF0aWMgdm9pZCBmcmVlX2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgZnJlZV9jbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImZyZWVfY25vZGUiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiZnJlZV9jbm9kZSIpOwogCiAJam91cm5hbC0+al9jbm9kZV91c2VkLS07CiAJam91cm5hbC0+al9jbm9kZV9mcmVlKys7CkBAIC00MzYsOCArNDM2LDggQEAKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGN1cnJlbnQtPmxvY2tfZGVwdGggPCAwKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHNiLCAiJXMgY2FsbGVkIHdpdGhvdXQga2VybmVsIGxvY2sgaGVsZCIsCi0JCQkgICAgICAgY2FsbGVyKTsKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTEiLCAiJXMgY2FsbGVkIHdpdGhvdXQga2VybmVsICIKKwkJCSAgICAgICAibG9jayBoZWxkIiwgY2FsbGVyKTsKIAl9CiAjZWxzZQogCTsKQEAgLTQ4MSwxMSArNDgxLDExIEBACiAqKiByZWplY3QgaXQgb24gdGhlIG5leHQgY2FsbCB0byByZWlzZXJmc19pbl9qb3VybmFsCiAqKgogKi8KLWludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX2luX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCXVuc2lnbmVkIGludCBibWFwX25yLCBpbnQgYml0X25yLCBpbnQgc2VhcmNoX2FsbCwKIAkJCWJfYmxvY2tucl90ICogbmV4dF96ZXJvX2JpdCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiOwogCWludCBpOwpAQCAtNDkzLDE0ICs0OTMsMTQgQEAKIAogCSpuZXh0X3plcm9fYml0ID0gMDsJLyogYWx3YXlzIHN0YXJ0IHRoaXMgYXQgemVyby4gKi8KIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmluX2pvdXJuYWwpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuaW5fam91cm5hbCk7CiAJLyogSWYgd2UgYXJlbid0IGRvaW5nIGEgc2VhcmNoX2FsbCwgdGhpcyBpcyBhIG1ldGFibG9jaywgYW5kIGl0IHdpbGwgYmUgbG9nZ2VkIGJlZm9yZSB1c2UuCiAJICoqIGlmIHdlIGNyYXNoIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gdGhhdCBmcmVlZCBpdCBjb21taXRzLCAgdGhpcyB0cmFuc2FjdGlvbiB3b24ndAogCSAqKiBoYXZlIGNvbW1pdHRlZCBlaXRoZXIsIGFuZCB0aGUgYmxvY2sgd2lsbCBuZXZlciBiZSB3cml0dGVuCiAJICovCiAJaWYgKHNlYXJjaF9hbGwpIHsKIAkJZm9yIChpID0gMDsgaSA8IEpPVVJOQUxfTlVNX0JJVE1BUFM7IGkrKykgewotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuaW5fam91cm5hbF9iaXRtYXApOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5pbl9qb3VybmFsX2JpdG1hcCk7CiAJCQlqYiA9IGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAgKyBpOwogCQkJaWYgKGpiLT5qb3VybmFsX2xpc3QgJiYgamItPmJpdG1hcHNbYm1hcF9ucl0gJiYKIAkJCSAgICB0ZXN0X2JpdChiaXRfbnIsCkBAIC01MTAsMjggKzUxMCwyOCBAQAogCQkJCSAgICBmaW5kX25leHRfemVyb19iaXQoKHVuc2lnbmVkIGxvbmcgKikKIAkJCQkJCSAgICAgICAoamItPmJpdG1hcHNbYm1hcF9ucl0tPgogCQkJCQkJCWRhdGEpLAotCQkJCQkJICAgICAgIHBfc19zYi0+c19ibG9ja3NpemUgPDwgMywKKwkJCQkJCSAgICAgICBzYi0+c19ibG9ja3NpemUgPDwgMywKIAkJCQkJCSAgICAgICBiaXRfbnIgKyAxKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJfQogCX0KIAotCWJsID0gYm1hcF9uciAqIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpICsgYml0X25yOworCWJsID0gYm1hcF9uciAqIChzYi0+c19ibG9ja3NpemUgPDwgMykgKyBiaXRfbnI7CiAJLyogaXMgaXQgaW4gYW55IG9sZCB0cmFuc2FjdGlvbnM/ICovCiAJaWYgKHNlYXJjaF9hbGwKIAkgICAgJiYgKGNuID0KLQkJZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwgYmwpKSkgeworCQlnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsIGJsKSkpIHsKIAkJcmV0dXJuIDE7CiAJfQogCiAJLyogaXMgaXQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlpZiAoKGNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsKSkpIHsKKwlpZiAoKGNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmwpKSkgewogCQlCVUcoKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuaW5fam91cm5hbF9yZXVzYWJsZSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5pbl9qb3VybmFsX3JldXNhYmxlKTsKIAkvKiBzYWZlIGZvciByZXVzZSAqLwogCXJldHVybiAwOwogfQpAQCAtNTUzLDE2ICs1NTMsMTYgQEAKIH0KIAogLyogbG9jayB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotc3RhdGljIGlubGluZSB2b2lkIGxvY2tfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5sb2NrX2pvdXJuYWwpOwotCW11dGV4X2xvY2soJlNCX0pPVVJOQUwocF9zX3NiKS0+al9tdXRleCk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5sb2NrX2pvdXJuYWwpOworCW11dGV4X2xvY2soJlNCX0pPVVJOQUwoc2IpLT5qX211dGV4KTsKIH0KIAogLyogdW5sb2NrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQltdXRleF91bmxvY2soJlNCX0pPVVJOQUwocF9zX3NiKS0+al9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZTQl9KT1VSTkFMKHNiKS0+al9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfam91cm5hbF9saXN0KHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQpAQCAtNTc0LDcgKzU3NCw3IEBACiAJCQkJICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQogewogCWlmIChqbC0+al9yZWZjb3VudCA8IDEpIHsKLQkJcmVpc2VyZnNfcGFuaWMocywgInRyYW5zIGlkICVsdSwgcmVmY291bnQgYXQgJWQiLAorCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC0yIiwgInRyYW5zIGlkICV1LCByZWZjb3VudCBhdCAlZCIsCiAJCQkgICAgICAgamwtPmpfdHJhbnNfaWQsIGpsLT5qX3JlZmNvdW50KTsKIAl9CiAJaWYgKC0tamwtPmpfcmVmY291bnQgPT0gMCkKQEAgLTU4NiwyMCArNTg2LDIwIEBACiAqKiBpdCBnZXRzIGNhbGxlZCBieSBmbHVzaF9jb21taXRfbGlzdCwgYW5kIGNsZWFucyB1cCBhbnkgZGF0YSBzdG9yZWQgYWJvdXQgYmxvY2tzIGZyZWVkIGR1cmluZyBhCiAqKiB0cmFuc2FjdGlvbi4KICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2ZyZWVkX2Zvcl9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgdm9pZCBjbGVhbnVwX2ZyZWVkX2Zvcl9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwpCiB7CiAKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiID0gamwtPmpfbGlzdF9iaXRtYXA7CiAJaWYgKGpiKSB7Ci0JCWNsZWFudXBfYml0bWFwX2xpc3QocF9zX3NiLCBqYik7CisJCWNsZWFudXBfYml0bWFwX2xpc3Qoc2IsIGpiKTsKIAl9CiAJamwtPmpfbGlzdF9iaXRtYXAtPmpvdXJuYWxfbGlzdCA9IE5VTEw7CiAJamwtPmpfbGlzdF9iaXRtYXAgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCisJCQkJICAgIHVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSAmam91cm5hbC0+al9qb3VybmFsX2xpc3Q7CkBAIC02NDQsOCArNjQ0LDggQEAKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKIAlpZiAoYnVmZmVyX2pvdXJuYWxlZChiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiY2xtLTIwODQ6IHBpbm5lZCBidWZmZXIgJWx1OiVzIHNlbnQgdG8gZGlzayIsCisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImNsbS0yMDg0IiwKKwkJCQkgInBpbm5lZCBidWZmZXIgJWx1OiVzIHNlbnQgdG8gZGlzayIsCiAJCQkJIGJoLT5iX2Jsb2NrbnIsIGJkZXZuYW1lKGJoLT5iX2JkZXYsIGIpKTsKIAl9CiAJaWYgKHVwdG9kYXRlKQpAQCAtOTMzLDkgKzkzMyw5IEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqb3RoZXJfamw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqZmlyc3Rfamw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOwotCXVuc2lnbmVkIGxvbmcgb3RoZXJfdHJhbnNfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgb3RoZXJfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGZpcnN0X3RyYW5zX2lkOwogCiAgICAgICBmaW5kX2ZpcnN0OgogCS8qCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCWludCBpOwogCWJfYmxvY2tucl90IGJuOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdGJoID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHMpOwogCWludCBiYXJyaWVyID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTExMjIsNyArMTEyMiw4IEBACiAJCQlzeW5jX2RpcnR5X2J1ZmZlcih0YmgpOwogCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZSh0YmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MDEsIGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjAxIiwKKwkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAjZW5kaWYKIAkJCXJldHZhbCA9IC1FSU87CiAJCX0KQEAgLTExNTQsMTQgKzExNTUsMTQgQEAKIAkgKiB1cCBwcm9wYWdhdGluZyB0aGUgd3JpdGUgZXJyb3Igb3V0IHRvIHRoZSBmaWxlc3lzdGVtLiAqLwogCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGpsLT5qX2NvbW1pdF9iaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjE1OiBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjE1IiwgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQlyZXR2YWwgPSAtRUlPOwogCX0KIAliZm9yZ2V0KGpsLT5qX2NvbW1pdF9iaCk7CiAJaWYgKGpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQgIT0gMCAmJgogCSAgICAoamwtPmpfdHJhbnNfaWQgLSBqb3VybmFsLT5qX2xhc3RfY29tbWl0X2lkKSAhPSAxKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMjAwOiBsYXN0IGNvbW1pdCAlbHUsIGN1cnJlbnQgJWx1IiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDAiLCAibGFzdCBjb21taXQgJWx1LCBjdXJyZW50ICVsdSIsCiAJCQkJIGpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQsIGpsLT5qX3RyYW5zX2lkKTsKIAl9CiAJam91cm5hbC0+al9sYXN0X2NvbW1pdF9pZCA9IGpsLT5qX3RyYW5zX2lkOwpAQCAtMTE5MSw4ICsxMTkyLDggQEAKIH0KIAogLyoKLSoqIGZsdXNoX2pvdXJuYWxfbGlzdCBmcmVxdWVudGx5IG5lZWRzIHRvIGZpbmQgYSBuZXdlciB0cmFuc2FjdGlvbiBmb3IgYSBnaXZlbiBibG9jay4gIFRoaXMgZG9lcyB0aGF0LCBvciAKLSoqIHJldHVybnMgTlVMTCBpZiBpdCBjYW4ndCBmaW5kIGFueXRoaW5nIAorKiogZmx1c2hfam91cm5hbF9saXN0IGZyZXF1ZW50bHkgbmVlZHMgdG8gZmluZCBhIG5ld2VyIHRyYW5zYWN0aW9uIGZvciBhIGdpdmVuIGJsb2NrLiAgVGhpcyBkb2VzIHRoYXQsIG9yCisqKiByZXR1cm5zIE5VTEwgaWYgaXQgY2FuJ3QgZmluZCBhbnl0aGluZwogKi8KIHN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpmaW5kX25ld2VyX2psX2Zvcl9jbihzdHJ1Y3QKIAkJCQkJCQkgIHJlaXNlcmZzX2pvdXJuYWxfY25vZGUKQEAgLTEyMzYsMTEgKzEyMzcsMTEgQEAKICoqIGpvdXJuYWwgbGlzdCBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gIEFzaWRlIGZyb20gZnJlZWluZyB0aGUgY25vZGUsIHRoaXMgYWxzbyBhbGxvd3MgdGhlCiAqKiBibG9jayB0byBiZSByZWFsbG9jYXRlZCBmb3IgZGF0YSBibG9ja3MgaWYgaXQgaGFkIGJlZW4gZGVsZXRlZC4KICovCi1zdGF0aWMgdm9pZCByZW1vdmVfYWxsX2Zyb21fam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9mcm9tX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsCiAJCQkJCSBpbnQgZGVidWcpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24sICpsYXN0OwogCWNuID0gamwtPmpfcmVhbGJsb2NrOwogCkBAIC0xMjUwLDE4ICsxMjUxLDE4IEBACiAJd2hpbGUgKGNuKSB7CiAJCWlmIChjbi0+YmxvY2tuciAhPSAwKSB7CiAJCQlpZiAoZGVidWcpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnMtMjIwMSIsCiAJCQkJCQkgImJsb2NrICV1LCBiaCBpcyAlZCwgc3RhdGUgJWxkIiwKIAkJCQkJCSBjbi0+YmxvY2tuciwgY24tPmJoID8gMSA6IDAsCiAJCQkJCQkgY24tPnN0YXRlKTsKIAkJCX0KIAkJCWNuLT5zdGF0ZSA9IDA7Ci0JCQlyZW1vdmVfam91cm5hbF9oYXNoKHBfc19zYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCisJCQlyZW1vdmVfam91cm5hbF9oYXNoKHNiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKIAkJCQkJICAgIGpsLCBjbi0+YmxvY2tuciwgMSk7CiAJCX0KIAkJbGFzdCA9IGNuOwogCQljbiA9IGNuLT5uZXh0OwotCQlmcmVlX2Nub2RlKHBfc19zYiwgbGFzdCk7CisJCWZyZWVfY25vZGUoc2IsIGxhc3QpOwogCX0KIAlqbC0+al9yZWFsYmxvY2sgPSBOVUxMOwogfQpAQCAtMTI3MywxMiArMTI3NCwxMiBAQAogKiogY2FsbGVkIGJ5IGZsdXNoX2pvdXJuYWxfbGlzdCwgYmVmb3JlIGl0IGNhbGxzIHJlbW92ZV9hbGxfZnJvbV9qb3VybmFsX2xpc3QKICoqCiAqLwotc3RhdGljIGludCBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorCQkJCQl1bnNpZ25lZCBpbnQgdHJhbnNfaWQpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICpqaDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJaWYgKHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xMjg4LDggKzEyODksOCBAQAogCQkJd2FpdF9vbl9idWZmZXIoKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSk7CiAJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShqb3VybmFsLT5qX2hlYWRlcl9iaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCQkgImpvdXJuYWwtNjk5OiBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtNjk5IiwKKwkJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogI2VuZGlmCiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC0xMzAyLDQ5ICsxMzAzLDQ5IEBACiAJCWpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpOwogCQlqaC0+al9tb3VudF9pZCA9IGNwdV90b19sZTMyKGpvdXJuYWwtPmpfbW91bnRfaWQpOwogCi0JCWlmIChyZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHBfc19zYikpIHsKKwkJaWYgKHJlaXNlcmZzX2JhcnJpZXJfZmx1c2goc2IpKSB7CiAJCQlpbnQgcmV0OwogCQkJbG9ja19idWZmZXIoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQkJcmV0ID0gc3VibWl0X2JhcnJpZXJfYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApIHsKIAkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKLQkJCQlkaXNhYmxlX2JhcnJpZXIocF9zX3NiKTsKKwkJCQlkaXNhYmxlX2JhcnJpZXIoc2IpOwogCQkJCWdvdG8gc3luYzsKIAkJCX0KIAkJCXdhaXRfb25fYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKLQkJCWNoZWNrX2JhcnJpZXJfY29tcGxldGlvbihwX3Nfc2IsIGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKKwkJCWNoZWNrX2JhcnJpZXJfY29tcGxldGlvbihzYiwgam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQl9IGVsc2UgewogCQkgICAgICBzeW5jOgogCQkJc2V0X2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCX0KIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoam91cm5hbC0+al9oZWFkZXJfYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTgzNzogSU8gZXJyb3IgZHVyaW5nIGpvdXJuYWwgcmVwbGF5Iik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC04MzciLAorCQkJCQkgIklPIGVycm9yIGR1cmluZyBqb3VybmFsIHJlcGxheSIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCB1cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKLQlyZXR1cm4gX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhwX3Nfc2IsIG9mZnNldCwgdHJhbnNfaWQpOworCXJldHVybiBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHNiLCBvZmZzZXQsIHRyYW5zX2lkKTsKIH0KIAotLyogCi0qKiBmbHVzaCBhbnkgYW5kIGFsbCBqb3VybmFsIGxpc3RzIG9sZGVyIHRoYW4geW91IGFyZSAKKy8qCisqKiBmbHVzaCBhbnkgYW5kIGFsbCBqb3VybmFsIGxpc3RzIG9sZGVyIHRoYW4geW91IGFyZQogKiogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gZmx1c2hfam91cm5hbF9saXN0CiAqLwotc3RhdGljIGludCBmbHVzaF9vbGRlcl9qb3VybmFsX2xpc3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBmbHVzaF9vbGRlcl9qb3VybmFsX2xpc3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpvdGhlcl9qbDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAogCS8qIHdlIGtub3cgd2UgYXJlIHRoZSBvbmx5IG9uZXMgZmx1c2hpbmcgdGhpbmdzLCBubyBleHRyYSByYWNlCiAJICogcHJvdGVjdGlvbiBpcyByZXF1aXJlZC4KQEAgLTEzNTgsNyArMTM1OSw3IEBACiAJaWYgKG90aGVyX2psLT5qX3RyYW5zX2lkIDwgdHJhbnNfaWQpIHsKIAkJQlVHX09OKG90aGVyX2psLT5qX3JlZmNvdW50IDw9IDApOwogCQkvKiBkbyBub3QgZmx1c2ggYWxsICovCi0JCWZsdXNoX2pvdXJuYWxfbGlzdChwX3Nfc2IsIG90aGVyX2psLCAwKTsKKwkJZmx1c2hfam91cm5hbF9saXN0KHNiLCBvdGhlcl9qbCwgMCk7CiAKIAkJLyogb3RoZXJfamwgaXMgbm93IGRlbGV0ZWQgZnJvbSB0aGUgbGlzdCAqLwogCQlnb3RvIHJlc3RhcnQ7CkBAIC0xMzgxLDggKzEzODIsOCBAQAogKiogYWx3YXlzIHNldCBmbHVzaGFsbCB0byAxLCB1bmxlc3MgeW91IGFyZSBjYWxsaW5nIGZyb20gaW5zaWRlCiAqKiBmbHVzaF9qb3VybmFsX2xpc3QKICoqCi0qKiBJTVBPUlRBTlQuICBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGVyZSBhcmUgbm8gam91cm5hbCB3cml0ZXJzLCAKLSoqIGFuZCB0aGUgam91cm5hbCBpcyBsb2NrZWQuICBUaGF0IG1lYW5zIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIAorKiogSU1QT1JUQU5ULiAgVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlcmUgYXJlIG5vIGpvdXJuYWwgd3JpdGVycywKKyoqIGFuZCB0aGUgam91cm5hbCBpcyBsb2NrZWQuICBUaGF0IG1lYW5zIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tCiAqKiBkb19qb3VybmFsX2VuZCwgb3IgYnkgam91cm5hbF9yZWxlYXNlCiAqLwogc3RhdGljIGludCBmbHVzaF9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzLApAQCAtMTQwMSw4ICsxNDAyLDcgQEAKIAlCVUdfT04oal9sZW5fc2F2ZWQgPD0gMCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfd2NvdW50KSAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgImNsbS0yMDQ4OiBmbHVzaF9qb3VybmFsX2xpc3QgY2FsbGVkIHdpdGggd2NvdW50ICVkIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIwNDgiLCAiY2FsbGVkIHdpdGggd2NvdW50ICVkIiwKIAkJCQkgYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfd2NvdW50KSk7CiAJfQogCUJVR19PTihqbC0+al90cmFuc19pZCA9PSAwKTsKQEAgLTE0MTYsOCArMTQxNiw3IEBACiAKIAljb3VudCA9IDA7CiAJaWYgKGpfbGVuX3NhdmVkID4gam91cm5hbC0+al90cmFuc19tYXgpIHsKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAiam91cm5hbC03MTU6IGZsdXNoX2pvdXJuYWxfbGlzdCwgbGVuZ3RoIGlzICVsdSwgdHJhbnMgaWQgJWx1XG4iLAorCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC03MTUiLCAibGVuZ3RoIGlzICVsdSwgdHJhbnMgaWQgJWx1IiwKIAkJCSAgICAgICBqX2xlbl9zYXZlZCwgamwtPmpfdHJhbnNfaWQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDMwLDcgKzE0MjksNyBAQAogCQlnb3RvIGZsdXNoX29sZGVyX2FuZF9yZXR1cm47CiAJfQogCi0JLyogc3RhcnQgYnkgcHV0dGluZyB0aGUgY29tbWl0IGxpc3Qgb24gZGlzay4gIFRoaXMgd2lsbCBhbHNvIGZsdXNoIAorCS8qIHN0YXJ0IGJ5IHB1dHRpbmcgdGhlIGNvbW1pdCBsaXN0IG9uIGRpc2suICBUaGlzIHdpbGwgYWxzbyBmbHVzaAogCSAqKiB0aGUgY29tbWl0IGxpc3RzIG9mIGFueSBvbGRlcnMgdHJhbnNhY3Rpb25zCiAJICovCiAJZmx1c2hfY29tbWl0X2xpc3QocywgamwsIDEpOwpAQCAtMTQ0NSwxMiArMTQ0NCwxMiBAQAogCQlnb3RvIGZsdXNoX29sZGVyX2FuZF9yZXR1cm47CiAJfQogCi0JLyogbG9vcCB0aHJvdWdoIGVhY2ggY25vZGUsIHNlZSBpZiB3ZSBuZWVkIHRvIHdyaXRlIGl0LCAKLQkgKiogb3Igd2FpdCBvbiBhIG1vcmUgcmVjZW50IHRyYW5zYWN0aW9uLCBvciBqdXN0IGlnbm9yZSBpdCAKKwkvKiBsb29wIHRocm91Z2ggZWFjaCBjbm9kZSwgc2VlIGlmIHdlIG5lZWQgdG8gd3JpdGUgaXQsCisJICoqIG9yIHdhaXQgb24gYSBtb3JlIHJlY2VudCB0cmFuc2FjdGlvbiwgb3IganVzdCBpZ25vcmUgaXQKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpICE9IDApIHsKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAiam91cm5hbC04NDQ6IHBhbmljIGpvdXJuYWwgbGlzdCBpcyBmbHVzaGluZywgd2NvdW50IGlzIG5vdCAwXG4iKTsKKwkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtODQ0IiwgImpvdXJuYWwgbGlzdCBpcyBmbHVzaGluZywgIgorCQkJICAgICAgICJ3Y291bnQgaXMgbm90IDAiKTsKIAl9CiAJY24gPSBqbC0+al9yZWFsYmxvY2s7CiAJd2hpbGUgKGNuKSB7CkBAIC0xNDc0LDggKzE0NzMsOCBAQAogCQlpZiAoIXBqbCAmJiBjbi0+YmgpIHsKIAkJCXNhdmVkX2JoID0gY24tPmJoOwogCi0JCQkvKiB3ZSBkbyB0aGlzIHRvIG1ha2Ugc3VyZSBub2JvZHkgcmVsZWFzZXMgdGhlIGJ1ZmZlciB3aGlsZSAKLQkJCSAqKiB3ZSBhcmUgd29ya2luZyB3aXRoIGl0IAorCQkJLyogd2UgZG8gdGhpcyB0byBtYWtlIHN1cmUgbm9ib2R5IHJlbGVhc2VzIHRoZSBidWZmZXIgd2hpbGUKKwkJCSAqKiB3ZSBhcmUgd29ya2luZyB3aXRoIGl0CiAJCQkgKi8KIAkJCWdldF9iaChzYXZlZF9iaCk7CiAKQEAgLTE0OTgsOCArMTQ5Nyw4IEBACiAJCQlnb3RvIGZyZWVfY25vZGU7CiAJCX0KIAotCQkvKiBiaCA9PSBOVUxMIHdoZW4gdGhlIGJsb2NrIGdvdCB0byBkaXNrIG9uIGl0cyBvd24sIE9SLCAKLQkJICoqIHRoZSBibG9jayBnb3QgZnJlZWQgaW4gYSBmdXR1cmUgdHJhbnNhY3Rpb24gCisJCS8qIGJoID09IE5VTEwgd2hlbiB0aGUgYmxvY2sgZ290IHRvIGRpc2sgb24gaXRzIG93biwgT1IsCisJCSAqKiB0aGUgYmxvY2sgZ290IGZyZWVkIGluIGEgZnV0dXJlIHRyYW5zYWN0aW9uCiAJCSAqLwogCQlpZiAoc2F2ZWRfYmggPT0gTlVMTCkgewogCQkJZ290byBmcmVlX2Nub2RlOwpAQCAtMTUxMCw4ICsxNTA5LDggQEAKIAkJICoqIGlzIG5vdCBtYXJrZWQgSkRpcnR5X3dhaXQKIAkJICovCiAJCWlmICgoIXdhc19qd2FpdCkgJiYgIWJ1ZmZlcl9sb2NrZWQoc2F2ZWRfYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiam91cm5hbC04MTM6IEJBRCEgYnVmZmVyICVsbHUgJWNkaXJ0eSAlY2p3YWl0LCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTgxMyIsCisJCQkJCSAiQkFEISBidWZmZXIgJWxsdSAlY2RpcnR5ICVjandhaXQsICIKIAkJCQkJICJub3QgaW4gYSBuZXdlciB0cmFuYXNjdGlvbiIsCiAJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNhdmVkX2JoLT4KIAkJCQkJIGJfYmxvY2tuciwgd2FzX2RpcnR5ID8gJyAnIDogJyEnLApAQCAtMTUyOSw4ICsxNTI4LDggQEAKIAkJCQl1bmxvY2tfYnVmZmVyKHNhdmVkX2JoKTsKIAkJCWNvdW50Kys7CiAJCX0gZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiY2xtLTIwODI6IFVuYWJsZSB0byBmbHVzaCBidWZmZXIgJWxsdSBpbiAlcyIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjA4MiIsCisJCQkJCSAiVW5hYmxlIHRvIGZsdXNoIGJ1ZmZlciAlbGx1IGluICVzIiwKIAkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2F2ZWRfYmgtPgogCQkJCQkgYl9ibG9ja25yLCBfX2Z1bmNfXyk7CiAJCX0KQEAgLTE1NDEsOCArMTU0MCw4IEBACiAJCQkvKiB3ZSBpbmNyZW1lbnRlZCB0aGlzIHRvIGtlZXAgb3RoZXJzIGZyb20gdGFraW5nIHRoZSBidWZmZXIgaGVhZCBhd2F5ICovCiAJCQlwdXRfYmgoc2F2ZWRfYmgpOwogCQkJaWYgKGF0b21pY19yZWFkKCYoc2F2ZWRfYmgtPmJfY291bnQpKSA8IDApIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgImpvdXJuYWwtOTQ1OiBzYXZlZF9iaC0+Yl9jb3VudCA8IDAiKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTk0NSIsCisJCQkJCQkgInNhdmVkX2JoLT5iX2NvdW50IDwgMCIpOwogCQkJfQogCQl9CiAJfQpAQCAtMTU1MSwxOCArMTU1MCwxOCBAQAogCQl3aGlsZSAoY24pIHsKIAkJCWlmICh0ZXN0X2JpdChCTE9DS19ORUVEU19GTFVTSCwgJmNuLT5zdGF0ZSkpIHsKIAkJCQlpZiAoIWNuLT5iaCkgewotCQkJCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJCQkJICAgICAgICJqb3VybmFsLTEwMTE6IGNuLT5iaCBpcyBOVUxMXG4iKTsKKwkJCQkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtMTAxMSIsCisJCQkJCQkgICAgICAgImNuLT5iaCBpcyBOVUxMIik7CiAJCQkJfQogCQkJCXdhaXRfb25fYnVmZmVyKGNuLT5iaCk7CiAJCQkJaWYgKCFjbi0+YmgpIHsKLQkJCQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCQkJCSAgICAgICAiam91cm5hbC0xMDEyOiBjbi0+YmggaXMgTlVMTFxuIik7CisJCQkJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTEwMTIiLAorCQkJCQkJICAgICAgICJjbi0+YmggaXMgTlVMTCIpOwogCQkJCX0KIAkJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShjbi0+YmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJqb3VybmFsLTk0OTogYnVmZmVyIHdyaXRlIGZhaWxlZFxuIik7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtOTQ5IiwKKwkJCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQkJCQllcnIgPSAtRUlPOwogCQkJCX0KQEAgLTE1ODcsNyArMTU4Niw3IEBACiAJCQkgICAgICAgX19mdW5jX18pOwogICAgICAgZmx1c2hfb2xkZXJfYW5kX3JldHVybjoKIAotCS8qIGJlZm9yZSB3ZSBjYW4gdXBkYXRlIHRoZSBqb3VybmFsIGhlYWRlciBibG9jaywgd2UgX211c3RfIGZsdXNoIGFsbCAKKwkvKiBiZWZvcmUgd2UgY2FuIHVwZGF0ZSB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2ssIHdlIF9tdXN0XyBmbHVzaCBhbGwKIAkgKiogcmVhbCBibG9ja3MgZnJvbSBhbGwgb2xkZXIgdHJhbnNhY3Rpb25zIHRvIGRpc2suICBUaGlzIGlzIGJlY2F1c2UKIAkgKiogb25jZSB0aGUgaGVhZGVyIGJsb2NrIGlzIHVwZGF0ZWQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBub3QgYmUKIAkgKiogcmVwbGF5ZWQgYWZ0ZXIgYSBjcmFzaApAQCAtMTU5Nyw3ICsxNTk2LDcgQEAKIAl9CiAKIAllcnIgPSBqb3VybmFsLT5qX2Vycm5vOwotCS8qIGJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgaGFzaCB0YWJsZXMgZm9yIHRoaXMgCisJLyogYmVmb3JlIHdlIGNhbiByZW1vdmUgZXZlcnl0aGluZyBmcm9tIHRoZSBoYXNoIHRhYmxlcyBmb3IgdGhpcwogCSAqKiB0cmFuc2FjdGlvbiwgd2UgbXVzdCBtYWtlIHN1cmUgaXQgY2FuIG5ldmVyIGJlIHJlcGxheWVkCiAJICoqCiAJICoqIHNpbmNlIHdlIGFyZSBvbmx5IGNhbGxlZCBmcm9tIGRvX2pvdXJuYWxfZW5kLCB3ZSBrbm93IGZvciBzdXJlIHRoZXJlCkBAIC0xNjIzLDcgKzE2MjIsNyBAQAogCiAJaWYgKGpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCAhPSAwICYmCiAJICAgIChqbC0+al90cmFuc19pZCAtIGpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCkgIT0gMSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjIwMTogbGFzdCBmbHVzaCAlbHUsIGN1cnJlbnQgJWx1IiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDEiLCAibGFzdCBmbHVzaCAlbHUsIGN1cnJlbnQgJWx1IiwKIAkJCQkgam91cm5hbC0+al9sYXN0X2ZsdXNoX2lkLCBqbC0+al90cmFuc19pZCk7CiAJfQogCWpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCA9IGpsLT5qX3RyYW5zX2lkOwpAQCAtMTc1OCwxMyArMTc1NywxMyBAQAogc3RhdGljIGludCBrdXBkYXRlX3RyYW5zYWN0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsCiAJCQkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqKm5leHRfamwsCi0JCQkJdW5zaWduZWQgbG9uZyAqbmV4dF90cmFuc19pZCwKKwkJCQl1bnNpZ25lZCBpbnQgKm5leHRfdHJhbnNfaWQsCiAJCQkJaW50IG51bV9ibG9ja3MsIGludCBudW1fdHJhbnMpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IHdyaXR0ZW4gPSAwOwogCWludCB0cmFuc2FjdGlvbnNfZmx1c2hlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBvcmlnX3RyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IG9yaWdfdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAlzdHJ1Y3QgYnVmZmVyX2NodW5rIGNodW5rOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzKTsKQEAgLTE4MzMsNyArMTgzMiw3IEBACiAJaW50IGxpbWl0ID0gMjU2OwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKnRqbDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpmbHVzaF9qbDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkOworCXVuc2lnbmVkIGludCB0cmFuc19pZDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CiAKIAlmbHVzaF9qbCA9IHRqbCA9IGpsOwpAQCAtMTkwOSwyMiArMTkwOCwyMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZnJlZV9qb3VybmFsX3JhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGZyZWVfam91cm5hbF9yYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWtmcmVlKGpvdXJuYWwtPmpfY3VycmVudF9qbCk7CiAJam91cm5hbC0+al9udW1fbGlzdHMtLTsKIAogCXZmcmVlKGpvdXJuYWwtPmpfY25vZGVfZnJlZV9vcmlnKTsKLQlmcmVlX2xpc3RfYml0bWFwcyhwX3Nfc2IsIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXApOwotCWZyZWVfYml0bWFwX25vZGVzKHBfc19zYik7CS8qIG11c3QgYmUgYWZ0ZXIgZnJlZV9saXN0X2JpdG1hcHMgKi8KKwlmcmVlX2xpc3RfYml0bWFwcyhzYiwgam91cm5hbC0+al9saXN0X2JpdG1hcCk7CisJZnJlZV9iaXRtYXBfbm9kZXMoc2IpOwkvKiBtdXN0IGJlIGFmdGVyIGZyZWVfbGlzdF9iaXRtYXBzICovCiAJaWYgKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSB7CiAJCWJyZWxzZShqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJfQogCS8qIGpfaGVhZGVyX2JoIGlzIG9uIHRoZSBqb3VybmFsIGRldiwgbWFrZSBzdXJlIG5vdCB0byByZWxlYXNlIHRoZSBqb3VybmFsCiAJICogZGV2IHVudGlsIHdlIGJyZWxzZSBqX2hlYWRlcl9iaAogCSAqLwotCXJlbGVhc2Vfam91cm5hbF9kZXYocF9zX3NiLCBqb3VybmFsKTsKKwlyZWxlYXNlX2pvdXJuYWxfZGV2KHNiLCBqb3VybmFsKTsKIAl2ZnJlZShqb3VybmFsKTsKIH0KIApAQCAtMTkzMywyNyArMTkzMiwyNyBAQAogKiogb2YgcmVhZF9zdXBlcigpIHlldC4gIEFueSBvdGhlciBjYWxsZXIgbXVzdCBrZWVwIGVycm9yIGF0IDAuCiAqLwogc3RhdGljIGludCBkb19qb3VybmFsX3JlbGVhc2Uoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgaW50IGVycm9yKQorCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgbXl0aDsKIAlpbnQgZmx1c2hlZCA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCS8qIHdlIG9ubHkgd2FudCB0byBmbHVzaCBvdXQgdHJhbnNhY3Rpb25zIGlmIHdlIHdlcmUgY2FsbGVkIHdpdGggZXJyb3IgPT0gMAogCSAqLwotCWlmICghZXJyb3IgJiYgIShwX3Nfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJaWYgKCFlcnJvciAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQkvKiBlbmQgdGhlIGN1cnJlbnQgdHJhbnMgKi8KIAkJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7Ci0JCWRvX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIDEwLCBGTFVTSF9BTEwpOworCQlkb19qb3VybmFsX2VuZCh0aCwgc2IsIDEwLCBGTFVTSF9BTEwpOwogCiAJCS8qIG1ha2Ugc3VyZSBzb21ldGhpbmcgZ2V0cyBsb2dnZWQgdG8gZm9yY2Ugb3VyIHdheSBpbnRvIHRoZSBmbHVzaCBjb2RlICovCi0JCWlmICgham91cm5hbF9qb2luKCZteXRoLCBwX3Nfc2IsIDEpKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwKLQkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJaWYgKCFqb3VybmFsX2pvaW4oJm15dGgsIHNiLCAxKSkgeworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwKKwkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkJICAgICAxKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKLQkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIEZMVVNIX0FMTCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOworCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBGTFVTSF9BTEwpOwogCQkJZmx1c2hlZCA9IDE7CiAJCX0KIAl9CkBAIC0xOTYxLDI2ICsxOTYwLDI2IEBACiAJLyogdGhpcyBhbHNvIGNhdGNoZXMgZXJyb3JzIGR1cmluZyB0aGUgZG9fam91cm5hbF9lbmQgYWJvdmUgKi8KIAlpZiAoIWVycm9yICYmIHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgewogCQltZW1zZXQoJm15dGgsIDAsIHNpemVvZihteXRoKSk7Ci0JCWlmICgham91cm5hbF9qb2luX2Fib3J0KCZteXRoLCBwX3Nfc2IsIDEpKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwKLQkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJaWYgKCFqb3VybmFsX2pvaW5fYWJvcnQoJm15dGgsIHNiLCAxKSkgeworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwKKwkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkJICAgICAxKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKLQkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIEZMVVNIX0FMTCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOworCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBGTFVTSF9BTEwpOwogCQl9CiAJfQogCiAJcmVpc2VyZnNfbW91bnRlZF9mc19jb3VudC0tOwogCS8qIHdhaXQgZm9yIGFsbCBjb21taXRzIHRvIGZpbmlzaCAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJlNCX0pPVVJOQUwocF9zX3NiKS0+al93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZTQl9KT1VSTkFMKHNiKS0+al93b3JrKTsKIAlmbHVzaF93b3JrcXVldWUoY29tbWl0X3dxKTsKIAlpZiAoIXJlaXNlcmZzX21vdW50ZWRfZnNfY291bnQpIHsKIAkJZGVzdHJveV93b3JrcXVldWUoY29tbWl0X3dxKTsKIAkJY29tbWl0X3dxID0gTlVMTDsKIAl9CiAKLQlmcmVlX2pvdXJuYWxfcmFtKHBfc19zYik7CisJZnJlZV9qb3VybmFsX3JhbShzYik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5ODksNDEgKzE5ODgsNDEgQEAKICoqIGNhbGwgb24gdW5tb3VudC4gIGZsdXNoIGFsbCBqb3VybmFsIHRyYW5zLCByZWxlYXNlIGFsbCBhbGxvYydkIHJhbQogKi8KIGludCBqb3VybmFsX3JlbGVhc2Uoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKKwkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgcF9zX3NiLCAwKTsKKwlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBzYiwgMCk7CiB9CiAKIC8qCiAqKiBvbmx5IGNhbGwgZnJvbSBhbiBlcnJvciBjb25kaXRpb24gaW5zaWRlIHJlaXNlcmZzX3JlYWRfc3VwZXIhCiAqLwogaW50IGpvdXJuYWxfcmVsZWFzZV9lcnJvcihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCisJCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgcF9zX3NiLCAxKTsKKwlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBzYiwgMSk7CiB9CiAKIC8qIGNvbXBhcmVzIGRlc2NyaXB0aW9uIGJsb2NrIHdpdGggY29tbWl0IGJsb2NrLiAgcmV0dXJucyAxIGlmIHRoZXkgZGlmZmVyLCAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lICovCi1zdGF0aWMgaW50IGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2MsCiAJCQkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqY29tbWl0KQogewogCWlmIChnZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCkgIT0gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgfHwKIAkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSAhPSBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgfHwKLQkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSA+IFNCX0pPVVJOQUwocF9zX3NiKS0+al90cmFuc19tYXggfHwKKwkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSA+IFNCX0pPVVJOQUwoc2IpLT5qX3RyYW5zX21heCB8fAogCSAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpIDw9IDApIHsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCi0vKiByZXR1cm5zIDAgaWYgaXQgZGlkIG5vdCBmaW5kIGEgZGVzY3JpcHRpb24gYmxvY2sgIAorLyogcmV0dXJucyAwIGlmIGl0IGRpZCBub3QgZmluZCBhIGRlc2NyaXB0aW9uIGJsb2NrCiAqKiByZXR1cm5zIC0xIGlmIGl0IGZvdW5kIGEgY29ycnVwdCBjb21taXQgYmxvY2sKLSoqIHJldHVybnMgMSBpZiBib3RoIGRlc2MgYW5kIGNvbW1pdCB3ZXJlIHZhbGlkIAorKiogcmV0dXJucyAxIGlmIGJvdGggZGVzYyBhbmQgY29tbWl0IHdlcmUgdmFsaWQKICovCi1zdGF0aWMgaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLAotCQkJCQl1bnNpZ25lZCBsb25nICpvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKKwkJCQkJdW5zaWduZWQgaW50ICpvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKIAkJCQkJdW5zaWduZWQgbG9uZyAqbmV3ZXN0X21vdW50X2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7CkBAIC0yMDM5LDcgKzIwMzgsNyBAQAogCSAgICAmJiAhbWVtY21wKGdldF9qb3VybmFsX2Rlc2NfbWFnaWMoZF9iaCksIEpPVVJOQUxfREVTQ19NQUdJQywgOCkpIHsKIAkJaWYgKG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkICYmICpvbGRlc3RfaW52YWxpZF90cmFuc19pZAogCQkgICAgJiYgZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgPiAqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQpIHsKLQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbC05ODY6IHRyYW5zYWN0aW9uICIKIAkJCQkgICAgICAgImlzIHZhbGlkIHJldHVybmluZyBiZWNhdXNlIHRyYW5zX2lkICVkIGlzIGdyZWF0ZXIgdGhhbiAiCiAJCQkJICAgICAgICJvbGRlc3RfaW52YWxpZCAlbHUiLApAQCAtMjA0OSw3ICsyMDQ4LDcgQEAKIAkJfQogCQlpZiAobmV3ZXN0X21vdW50X2lkCiAJCSAgICAmJiAqbmV3ZXN0X21vdW50X2lkID4gZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykpIHsKLQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbC0xMDg3OiB0cmFuc2FjdGlvbiAiCiAJCQkJICAgICAgICJpcyB2YWxpZCByZXR1cm5pbmcgYmVjYXVzZSBtb3VudF9pZCAlZCBpcyBsZXNzIHRoYW4gIgogCQkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkICVsdSIsCkBAIC0yMDU3LDM2ICsyMDU2LDM3IEBACiAJCQkJICAgICAgICpuZXdlc3RfbW91bnRfaWQpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChnZXRfZGVzY190cmFuc19sZW4oZGVzYykgPiBTQl9KT1VSTkFMKHBfc19zYiktPmpfdHJhbnNfbWF4KSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTIwMTg6IEJhZCB0cmFuc2FjdGlvbiBsZW5ndGggJWQgZW5jb3VudGVyZWQsIGlnbm9yaW5nIHRyYW5zYWN0aW9uIiwKKwkJaWYgKGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSA+IFNCX0pPVVJOQUwoc2IpLT5qX3RyYW5zX21heCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjAxOCIsCisJCQkJCSAiQmFkIHRyYW5zYWN0aW9uIGxlbmd0aCAlZCAiCisJCQkJCSAiZW5jb3VudGVyZWQsIGlnbm9yaW5nIHRyYW5zYWN0aW9uIiwKIAkJCQkJIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7CisJCW9mZnNldCA9IGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CiAKIAkJLyogb2ssIHdlIGhhdmUgYSBqb3VybmFsIGRlc2NyaXB0aW9uIGJsb2NrLCBsZXRzIHNlZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHZhbGlkICovCiAJCWNfYmggPQotCQkgICAgam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBqb3VybmFsX2JyZWFkKHNiLAorCQkJCSAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkJICAoKG9mZnNldCArIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSArCi0JCQkJICAgIDEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJICAgIDEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKTsKIAkJaWYgKCFjX2JoKQogCQkJcmV0dXJuIDA7CiAJCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7Ci0JCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQocF9zX3NiLCBkZXNjLCBjb21taXQpKSB7Ci0JCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc2IsIGRlc2MsIGNvbW1pdCkpIHsKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZCwgY29tbWl0IG9mZnNldCAlbGQgaGFkIGJhZCAiCiAJCQkJICAgICAgICJ0aW1lICVkIG9yIGxlbmd0aCAlZCIsCiAJCQkJICAgICAgIGNfYmgtPmJfYmxvY2tuciAtCi0JCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCksCiAJCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkpOwogCQkJYnJlbHNlKGNfYmgpOwogCQkJaWYgKG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkKSB7CiAJCQkJKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkID0KIAkJCQkgICAgZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYyk7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTAwNDogIgogCQkJCQkgICAgICAgInRyYW5zYWN0aW9uX2lzX3ZhbGlkIHNldHRpbmcgb2xkZXN0IGludmFsaWQgdHJhbnNfaWQgIgogCQkJCQkgICAgICAgInRvICVkIiwKQEAgLTIwOTUsMTEgKzIwOTUsMTEgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCQlicmVsc2UoY19iaCk7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTAwNjogZm91bmQgdmFsaWQgIgogCQkJICAgICAgICJ0cmFuc2FjdGlvbiBzdGFydCBvZmZzZXQgJWxsdSwgbGVuICVkIGlkICVkIiwKIAkJCSAgICAgICBkX2JoLT5iX2Jsb2NrbnIgLQotCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkgICAgICAgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpLAogCQkJICAgICAgIGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpKTsKIAkJcmV0dXJuIDE7CkBAIC0yMTIxLDYzICsyMTIxLDYzIEBACiAqKiB0aGlzIGVpdGhlciByZWFkcyBpbiBhIHJlcGxheXMgYSB0cmFuc2FjdGlvbiwgb3IgcmV0dXJucyBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbgogKiogaXMgaW52YWxpZCwgb3IgdG9vIG9sZC4KICovCi1zdGF0aWMgaW50IGpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgY3VyX2RibG9jaywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGRlc3Rfc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkZXN0X3RyYW5zX2lkLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb2xkZXN0X3RyYW5zX2lkLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ld2VzdF9tb3VudF9pZCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICpjb21taXQ7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IDA7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmNfYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKmxvZ19ibG9ja3MgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJlYWxfYmxvY2tzID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfb2Zmc2V0OwogCWludCBpOwogCWludCB0cmFuc19oYWxmOwogCi0JZF9iaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLCBjdXJfZGJsb2NrKTsKKwlkX2JoID0gam91cm5hbF9icmVhZChzYiwgY3VyX2RibG9jayk7CiAJaWYgKCFkX2JoKQogCQlyZXR1cm4gMTsKIAlkZXNjID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKilkX2JoLT5iX2RhdGE7Ci0JdHJhbnNfb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM3OiAiCisJdHJhbnNfb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKKwlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTAzNzogIgogCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbiwgb2Zmc2V0ICVsbHUsIGxlbiAlZCBtb3VudF9pZCAlZCIsCi0JCSAgICAgICBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJICAgICAgIGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCSAgICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYyksIGdldF9kZXNjX21vdW50X2lkKGRlc2MpKTsKIAlpZiAoZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgPCBvbGRlc3RfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM5OiAiCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM5OiAiCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFucyBza2lwcGluZyBiZWNhdXNlICVsdSBpcyB0b28gb2xkIiwKIAkJCSAgICAgICBjdXJfZGJsb2NrIC0KLQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSk7CisJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSk7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChnZXRfZGVzY19tb3VudF9pZChkZXNjKSAhPSBuZXdlc3RfbW91bnRfaWQpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMTQ2OiAiCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMTQ2OiAiCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFucyBza2lwcGluZyBiZWNhdXNlICVkIGlzICE9ICIKIAkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkICVsdSIsIGdldF9kZXNjX21vdW50X2lkKGRlc2MpLAogCQkJICAgICAgIG5ld2VzdF9tb3VudF9pZCk7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQotCWNfYmggPSBqb3VybmFsX2JyZWFkKHBfc19zYiwgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCWNfYmggPSBqb3VybmFsX2JyZWFkKHNiLCBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCSAgICAgKCh0cmFuc19vZmZzZXQgKyBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgKyAxKSAlCi0JCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKTsKKwkJCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSk7CiAJaWYgKCFjX2JoKSB7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQogCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7Ci0JaWYgKGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChwX3Nfc2IsIGRlc2MsIGNvbW1pdCkpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc2IsIGRlc2MsIGNvbW1pdCkpIHsKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbiwgIgogCQkJICAgICAgICJjb21taXQgb2Zmc2V0ICVsbHUgaGFkIGJhZCB0aW1lICVkIG9yIGxlbmd0aCAlZCIsCiAJCQkgICAgICAgY19iaC0+Yl9ibG9ja25yIC0KLQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfaWQoY29tbWl0KSwKIAkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpKTsKIAkJYnJlbHNlKGNfYmgpOwpAQCAtMjE5NSwzOCArMjE5NSw0MSBAQAogCQlicmVsc2UoZF9iaCk7CiAJCWtmcmVlKGxvZ19ibG9ja3MpOwogCQlrZnJlZShyZWFsX2Jsb2Nrcyk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xMTY5OiBrbWFsbG9jIGZhaWxlZCwgdW5hYmxlIHRvIG1vdW50IEZTIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTExNjkiLAorCQkJCSAia21hbGxvYyBmYWlsZWQsIHVuYWJsZSB0byBtb3VudCBGUyIpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIGdldCBhbGwgdGhlIGJ1ZmZlciBoZWFkcyAqLwotCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYocF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJdHJhbnNfaGFsZiA9IGpvdXJuYWxfdHJhbnNfaGFsZihzYi0+c19ibG9ja3NpemUpOwogCWZvciAoaSA9IDA7IGkgPCBnZXRfZGVzY190cmFuc19sZW4oZGVzYyk7IGkrKykgewogCQlsb2dfYmxvY2tzW2ldID0KLQkJICAgIGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwKLQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBqb3VybmFsX2dldGJsayhzYiwKKwkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkgICAodHJhbnNfb2Zmc2V0ICsgMSArCi0JCQkJICAgIGkpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwkJCQkgICAgaSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJCWlmIChpIDwgdHJhbnNfaGFsZikgewogCQkJcmVhbF9ibG9ja3NbaV0gPQotCQkJICAgIHNiX2dldGJsayhwX3Nfc2IsCisJCQkgICAgc2JfZ2V0YmxrKHNiLAogCQkJCSAgICAgIGxlMzJfdG9fY3B1KGRlc2MtPmpfcmVhbGJsb2NrW2ldKSk7CiAJCX0gZWxzZSB7CiAJCQlyZWFsX2Jsb2Nrc1tpXSA9Ci0JCQkgICAgc2JfZ2V0YmxrKHBfc19zYiwKKwkJCSAgICBzYl9nZXRibGsoc2IsCiAJCQkJICAgICAgbGUzMl90b19jcHUoY29tbWl0LT4KIAkJCQkJCSAgal9yZWFsYmxvY2tbaSAtIHRyYW5zX2hhbGZdKSk7CiAJCX0KLQkJaWYgKHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChwX3Nfc2IpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMDc6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIEJsb2NrIHRvIHJlcGxheSBpcyBvdXRzaWRlIG9mIGZpbGVzeXN0ZW0iKTsKKwkJaWYgKHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChzYikpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMDciLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJCbG9jayB0byByZXBsYXkgaXMgb3V0c2lkZSBvZiAiCisJCQkJCSAiZmlsZXN5c3RlbSIpOwogCQkJZ290byBhYm9ydF9yZXBsYXk7CiAJCX0KIAkJLyogbWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byByZXBsYXkgb250byBsb2cgb3IgcmVzZXJ2ZWQgYXJlYSAqLwogCQlpZiAoaXNfYmxvY2tfaW5fbG9nX29yX3Jlc2VydmVkX2FyZWEKLQkJICAgIChwX3Nfc2IsIHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMDQ6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIFRyeWluZyB0byByZXBsYXkgb250byBhIGxvZyBibG9jayIpOworCQkgICAgKHNiLCByZWFsX2Jsb2Nrc1tpXS0+Yl9ibG9ja25yKSkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTIwNCIsCisJCQkJCSAiUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgIlRyeWluZyB0byByZXBsYXkgb250byBhIGxvZyBibG9jayIpOwogCQkgICAgICBhYm9ydF9yZXBsYXk6CiAJCQlicmVsc2VfYXJyYXkobG9nX2Jsb2NrcywgaSk7CiAJCQlicmVsc2VfYXJyYXkocmVhbF9ibG9ja3MsIGkpOwpAQCAtMjI0Miw4ICsyMjQ1LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpOyBpKyspIHsKIAkJd2FpdF9vbl9idWZmZXIobG9nX2Jsb2Nrc1tpXSk7CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKGxvZ19ibG9ja3NbaV0pKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMTI6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMTIiLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAJCQlicmVsc2VfYXJyYXkobG9nX2Jsb2NrcyArIGksCiAJCQkJICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgLSBpKTsKIAkJCWJyZWxzZV9hcnJheShyZWFsX2Jsb2NrcywgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpKTsKQEAgLTIyNjYsOCArMjI3MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKTsgaSsrKSB7CiAJCXdhaXRfb25fYnVmZmVyKHJlYWxfYmxvY2tzW2ldKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUocmVhbF9ibG9ja3NbaV0pKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMjY6IFJFUExBWSBGQUlMVVJFLCBmc2NrIHJlcXVpcmVkISBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjI2IiwKKwkJCQkJICJSRVBMQVkgRkFJTFVSRSwgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKIAkJCWJyZWxzZV9hcnJheShyZWFsX2Jsb2NrcyArIGksCiAJCQkJICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgLSBpKTsKIAkJCWJyZWxzZShjX2JoKTsKQEAgLTIyNzksMTUgKzIyODQsMTUgQEAKIAkJYnJlbHNlKHJlYWxfYmxvY2tzW2ldKTsKIAl9CiAJY3VyX2RibG9jayA9Ci0JICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJICAgICgodHJhbnNfb2Zmc2V0ICsgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpICsKLQkgICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCSAgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOworCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgImpvdXJuYWwtMTA5NTogc2V0dGluZyBqb3VybmFsICIgInN0YXJ0IHRvIG9mZnNldCAlbGQiLAotCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpKTsKKwkJICAgICAgIGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpKTsKIAogCS8qIGluaXQgc3RhcnRpbmcgdmFsdWVzIGZvciB0aGUgZmlyc3QgdHJhbnNhY3Rpb24sIGluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0byBiZSByZXBsYXllZC4gKi8KLQlqb3VybmFsLT5qX3N0YXJ0ID0gY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOworCWpvdXJuYWwtPmpfc3RhcnQgPSBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKIAlqb3VybmFsLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQgPSB0cmFuc19pZDsKIAlqb3VybmFsLT5qX3RyYW5zX2lkID0gdHJhbnNfaWQgKyAxOwogCS8qIGNoZWNrIGZvciB0cmFuc19pZCBvdmVyZmxvdyAqLwpAQCAtMjM1MiwxMiArMjM1NywxMiBAQAogKioKICoqIE9uIGV4aXQsIGl0IHNldHMgdGhpbmdzIHVwIHNvIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiB3aWxsIHdvcmsgY29ycmVjdGx5LgogKi8KLXN0YXRpYyBpbnQgam91cm5hbF9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIGludCBqb3VybmFsX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7Ci0JdW5zaWduZWQgbG9uZyBvbGRlc3RfdHJhbnNfaWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQgPSAwOworCXVuc2lnbmVkIGludCBvbGRlc3RfdHJhbnNfaWQgPSAwOworCXVuc2lnbmVkIGludCBvbGRlc3RfaW52YWxpZF90cmFuc19pZCA9IDA7CiAJdGltZV90IHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgb2xkZXN0X3N0YXJ0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGN1cl9kYmxvY2sgPSAwOwpAQCAtMjM3MCw0NiArMjM3NSw0NiBAQAogCWludCByZXQ7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JY3VyX2RibG9jayA9IFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOwotCXJlaXNlcmZzX2luZm8ocF9zX3NiLCAiY2hlY2tpbmcgdHJhbnNhY3Rpb24gbG9nICglcylcbiIsCisJY3VyX2RibG9jayA9IFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CisJcmVpc2VyZnNfaW5mbyhzYiwgImNoZWNraW5nIHRyYW5zYWN0aW9uIGxvZyAoJXMpXG4iLAogCQkgICAgICBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYikpOwogCXN0YXJ0ID0gZ2V0X3NlY29uZHMoKTsKIAotCS8qIHN0ZXAgMSwgcmVhZCBpbiB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2suICBDaGVjayB0aGUgdHJhbnNhY3Rpb24gaXQgc2F5cyAKLQkgKiogaXMgdGhlIGZpcnN0IHVuZmx1c2hlZCwgYW5kIGlmIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IHZhbGlkLCAKKwkvKiBzdGVwIDEsIHJlYWQgaW4gdGhlIGpvdXJuYWwgaGVhZGVyIGJsb2NrLiAgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGl0IHNheXMKKwkgKiogaXMgdGhlIGZpcnN0IHVuZmx1c2hlZCwgYW5kIGlmIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IHZhbGlkLAogCSAqKiByZXBsYXkgaXMgZG9uZQogCSAqLwotCWpvdXJuYWwtPmpfaGVhZGVyX2JoID0gam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikKLQkJCQkJICAgICArIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJam91cm5hbC0+al9oZWFkZXJfYmggPSBqb3VybmFsX2JyZWFkKHNiLAorCQkJCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikKKwkJCQkJICAgICArIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKIAlpZiAoIWpvdXJuYWwtPmpfaGVhZGVyX2JoKSB7CiAJCXJldHVybiAxOwogCX0KIAlqaCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKikoam91cm5hbC0+al9oZWFkZXJfYmgtPmJfZGF0YSk7CiAJaWYgKGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpIDwKLQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpCisJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpCiAJICAgICYmIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpID4gMCkgewogCQlvbGRlc3Rfc3RhcnQgPQotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCSAgICBsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KTsKIAkJb2xkZXN0X3RyYW5zX2lkID0gbGUzMl90b19jcHUoamgtPmpfbGFzdF9mbHVzaF90cmFuc19pZCkgKyAxOwogCQluZXdlc3RfbW91bnRfaWQgPSBsZTMyX3RvX2NwdShqaC0+al9tb3VudF9pZCk7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTE1MzogZm91bmQgaW4gIgogCQkJICAgICAgICJoZWFkZXI6IGZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgJWQsIGxhc3RfZmx1c2hlZF90cmFuc19pZCAiCiAJCQkgICAgICAgIiVsdSIsIGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpLAogCQkJICAgICAgIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpKTsKIAkJdmFsaWRfam91cm5hbF9oZWFkZXIgPSAxOwogCi0JCS8qIG5vdywgd2UgdHJ5IHRvIHJlYWQgdGhlIGZpcnN0IHVuZmx1c2hlZCBvZmZzZXQuICBJZiBpdCBpcyBub3QgdmFsaWQsIAotCQkgKiogdGhlcmUgaXMgbm90aGluZyBtb3JlIHdlIGNhbiBkbywgYW5kIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJlYWQgCisJCS8qIG5vdywgd2UgdHJ5IHRvIHJlYWQgdGhlIGZpcnN0IHVuZmx1c2hlZCBvZmZzZXQuICBJZiBpdCBpcyBub3QgdmFsaWQsCisJCSAqKiB0aGVyZSBpcyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvLCBhbmQgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcmVhZAogCQkgKiogdGhyb3VnaCB0aGUgd2hvbGUgbG9nLgogCQkgKi8KIAkJZF9iaCA9Ci0JCSAgICBqb3VybmFsX2JyZWFkKHBfc19zYiwKLQkJCQkgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJICAgIGpvdXJuYWxfYnJlYWQoc2IsCisJCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkgIGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpKTsKLQkJcmV0ID0gam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChwX3Nfc2IsIGRfYmgsIE5VTEwsIE5VTEwpOworCQlyZXQgPSBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHNiLCBkX2JoLCBOVUxMLCBOVUxMKTsKIAkJaWYgKCFyZXQpIHsKIAkJCWNvbnRpbnVlX3JlcGxheSA9IDA7CiAJCX0KQEAgLTI0MTcsOSArMjQyMiw5IEBACiAJCWdvdG8gc3RhcnRfbG9nX3JlcGxheTsKIAl9CiAKLQlpZiAoY29udGludWVfcmVwbGF5ICYmIGJkZXZfcmVhZF9vbmx5KHBfc19zYi0+c19iZGV2KSkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImNsbS0yMDc2OiBkZXZpY2UgaXMgcmVhZG9ubHksIHVuYWJsZSB0byByZXBsYXkgbG9nIik7CisJaWYgKGNvbnRpbnVlX3JlcGxheSAmJiBiZGV2X3JlYWRfb25seShzYi0+c19iZGV2KSkgeworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiY2xtLTIwNzYiLAorCQkJCSAiZGV2aWNlIGlzIHJlYWRvbmx5LCB1bmFibGUgdG8gcmVwbGF5IGxvZyIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNDI4LDE3ICsyNDMzLDE3IEBACiAJICovCiAJd2hpbGUgKGNvbnRpbnVlX3JlcGxheQogCSAgICAgICAmJiBjdXJfZGJsb2NrIDwKLQkgICAgICAgKFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKLQkJU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSkgeworCSAgICAgICAoU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCisJCVNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSkgewogCQkvKiBOb3RlIHRoYXQgaXQgaXMgcmVxdWlyZWQgZm9yIGJsb2Nrc2l6ZSBvZiBwcmltYXJ5IGZzIGRldmljZSBhbmQgam91cm5hbAogCQkgICBkZXZpY2UgdG8gYmUgdGhlIHNhbWUgKi8KIAkJZF9iaCA9CiAJCSAgICByZWlzZXJmc19icmVhZGEoam91cm5hbC0+al9kZXZfYmQsIGN1cl9kYmxvY2ssCi0JCQkJICAgIHBfc19zYi0+c19ibG9ja3NpemUsCi0JCQkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKLQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwkJCQkgICAgc2ItPnNfYmxvY2tzaXplLAorCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKKwkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOwogCQlyZXQgPQotCQkgICAgam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChwX3Nfc2IsIGRfYmgsCisJCSAgICBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHNiLCBkX2JoLAogCQkJCQkJICZvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKIAkJCQkJCSAmbmV3ZXN0X21vdW50X2lkKTsKIAkJaWYgKHJldCA9PSAxKSB7CkBAIC0yNDQ3LDI2ICsyNDUyLDI2IEBACiAJCQkJb2xkZXN0X3RyYW5zX2lkID0gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYyk7CiAJCQkJb2xkZXN0X3N0YXJ0ID0gZF9iaC0+Yl9ibG9ja25yOwogCQkJCW5ld2VzdF9tb3VudF9pZCA9IGdldF9kZXNjX21vdW50X2lkKGRlc2MpOwotCQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkJICAgICAgICJqb3VybmFsLTExNzk6IFNldHRpbmcgIgogCQkJCQkgICAgICAgIm9sZGVzdF9zdGFydCB0byBvZmZzZXQgJWxsdSwgdHJhbnNfaWQgJWx1IiwKIAkJCQkJICAgICAgIG9sZGVzdF9zdGFydCAtCiAJCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0sKLQkJCQkJICAgICAgIChwX3Nfc2IpLCBvbGRlc3RfdHJhbnNfaWQpOworCQkJCQkgICAgICAgKHNiKSwgb2xkZXN0X3RyYW5zX2lkKTsKIAkJCX0gZWxzZSBpZiAob2xkZXN0X3RyYW5zX2lkID4gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykpIHsKIAkJCQkvKiBvbmUgd2UganVzdCByZWFkIHdhcyBvbGRlciAqLwogCQkJCW9sZGVzdF90cmFuc19pZCA9IGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpOwogCQkJCW9sZGVzdF9zdGFydCA9IGRfYmgtPmJfYmxvY2tucjsKLQkJCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJCSAgICAgICAiam91cm5hbC0xMTgwOiBSZXNldHRpbmcgIgogCQkJCQkgICAgICAgIm9sZGVzdF9zdGFydCB0byBvZmZzZXQgJWx1LCB0cmFuc19pZCAlbHUiLAogCQkJCQkgICAgICAgb2xkZXN0X3N0YXJ0IC0KIAkJCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSwotCQkJCQkgICAgICAgKHBfc19zYiksIG9sZGVzdF90cmFuc19pZCk7CisJCQkJCSAgICAgICAoc2IpLCBvbGRlc3RfdHJhbnNfaWQpOwogCQkJfQogCQkJaWYgKG5ld2VzdF9tb3VudF9pZCA8IGdldF9kZXNjX21vdW50X2lkKGRlc2MpKSB7CiAJCQkJbmV3ZXN0X21vdW50X2lkID0gZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYyk7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTI5OTogU2V0dGluZyAiCiAJCQkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkIHRvICVkIiwKIAkJCQkJICAgICAgIGdldF9kZXNjX21vdW50X2lkKGRlc2MpKTsKQEAgLTI0ODEsMTcgKzI0ODYsMTcgQEAKICAgICAgIHN0YXJ0X2xvZ19yZXBsYXk6CiAJY3VyX2RibG9jayA9IG9sZGVzdF9zdGFydDsKIAlpZiAob2xkZXN0X3RyYW5zX2lkKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTIwNjogU3RhcnRpbmcgcmVwbGF5ICIKIAkJCSAgICAgICAiZnJvbSBvZmZzZXQgJWxsdSwgdHJhbnNfaWQgJWx1IiwKLQkJCSAgICAgICBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkgICAgICAgb2xkZXN0X3RyYW5zX2lkKTsKIAogCX0KIAlyZXBsYXlfY291bnQgPSAwOwogCXdoaWxlIChjb250aW51ZV9yZXBsYXkgJiYgb2xkZXN0X3RyYW5zX2lkID4gMCkgewogCQlyZXQgPQotCQkgICAgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHBfc19zYiwgY3VyX2RibG9jaywgb2xkZXN0X3N0YXJ0LAorCQkgICAgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHNiLCBjdXJfZGJsb2NrLCBvbGRlc3Rfc3RhcnQsCiAJCQkJCSAgICAgb2xkZXN0X3RyYW5zX2lkLCBuZXdlc3RfbW91bnRfaWQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcmV0dXJuIHJldDsKQEAgLTI0OTksMTQgKzI1MDQsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWN1cl9kYmxvY2sgPQotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKyBqb3VybmFsLT5qX3N0YXJ0OworCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArIGpvdXJuYWwtPmpfc3RhcnQ7CiAJCXJlcGxheV9jb3VudCsrOwogCQlpZiAoY3VyX2RibG9jayA9PSBvbGRlc3Rfc3RhcnQpCiAJCQlicmVhazsKIAl9CiAKIAlpZiAob2xkZXN0X3RyYW5zX2lkID09IDApIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbC0xMjI1OiBObyB2YWxpZCAiICJ0cmFuc2FjdGlvbnMgZm91bmQiKTsKIAl9CiAJLyogal9zdGFydCBkb2VzIG5vdCBnZXQgc2V0IGNvcnJlY3RseSBpZiB3ZSBkb24ndCByZXBsYXkgYW55IHRyYW5zYWN0aW9ucy4KQEAgLTI1MjYsMTYgKzI1MzEsMTYgQEAKIAl9IGVsc2UgewogCQlqb3VybmFsLT5qX21vdW50X2lkID0gbmV3ZXN0X21vdW50X2lkICsgMTsKIAl9Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMjk5OiBTZXR0aW5nICIKKwlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTI5OTogU2V0dGluZyAiCiAJCSAgICAgICAibmV3ZXN0X21vdW50X2lkIHRvICVsdSIsIGpvdXJuYWwtPmpfbW91bnRfaWQpOwogCWpvdXJuYWwtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA9IGpvdXJuYWwtPmpfc3RhcnQ7CiAJaWYgKHJlcGxheV9jb3VudCA+IDApIHsKLQkJcmVpc2VyZnNfaW5mbyhwX3Nfc2IsCisJCXJlaXNlcmZzX2luZm8oc2IsCiAJCQkgICAgICAicmVwbGF5ZWQgJWQgdHJhbnNhY3Rpb25zIGluICVsdSBzZWNvbmRzXG4iLAogCQkJICAgICAgcmVwbGF5X2NvdW50LCBnZXRfc2Vjb25kcygpIC0gc3RhcnQpOwogCX0KLQlpZiAoIWJkZXZfcmVhZF9vbmx5KHBfc19zYi0+c19iZGV2KSAmJgotCSAgICBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHBfc19zYiwgam91cm5hbC0+al9zdGFydCwKKwlpZiAoIWJkZXZfcmVhZF9vbmx5KHNiLT5zX2JkZXYpICYmCisJICAgIF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc2IsIGpvdXJuYWwtPmpfc3RhcnQsCiAJCQkJCSBqb3VybmFsLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpKSB7CiAJCS8qIHJlcGxheSBmYWlsZWQsIGNhbGxlciBtdXN0IGNhbGwgZnJlZV9qb3VybmFsX3JhbSBhbmQgYWJvcnQKIAkJICoqIHRoZSBtb3VudApAQCAtMjU2MCw5ICsyNTY1LDkgQEAKIAlyZXR1cm4gamw7CiB9CiAKLXN0YXRpYyB2b2lkIGpvdXJuYWxfbGlzdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgam91cm5hbF9saXN0X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlTQl9KT1VSTkFMKHBfc19zYiktPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChwX3Nfc2IpOworCVNCX0pPVVJOQUwoc2IpLT5qX2N1cnJlbnRfamwgPSBhbGxvY19qb3VybmFsX2xpc3Qoc2IpOwogfQogCiBzdGF0aWMgaW50IHJlbGVhc2Vfam91cm5hbF9kZXYoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwKQEAgLTI1ODAsOSArMjU4NSw4IEBACiAJfQogCiAJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsCi0JCQkJICJzaC00NTc6IHJlbGVhc2Vfam91cm5hbF9kZXY6IENhbm5vdCByZWxlYXNlIGpvdXJuYWwgZGV2aWNlOiAlaSIsCi0JCQkJIHJlc3VsdCk7CisJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTciLAorCQkJCSAiQ2Fubm90IHJlbGVhc2Ugam91cm5hbCBkZXZpY2U6ICVpIiwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2MTIsNyArMjYxNiw3IEBACiAJCWlmIChJU19FUlIoam91cm5hbC0+al9kZXZfYmQpKSB7CiAJCQlyZXN1bHQgPSBQVFJfRVJSKGpvdXJuYWwtPmpfZGV2X2JkKTsKIAkJCWpvdXJuYWwtPmpfZGV2X2JkID0gTlVMTDsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTg6IGpvdXJuYWxfaW5pdF9kZXY6ICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTgiLAogCQkJCQkgImNhbm5vdCBpbml0IGpvdXJuYWwgZGV2aWNlICclcyc6ICVpIiwKIAkJCQkJIF9fYmRldm5hbWUoamRldiwgYiksIHJlc3VsdCk7CiAJCQlyZXR1cm4gcmVzdWx0OwpAQCAtMjY2MiwzMCArMjY2NiwzMCBAQAogICovCiAjZGVmaW5lIFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgKDQwOTYpCiAKLXN0YXRpYyBpbnQgY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwpCiB7CiAgICAgICAgIGlmIChqb3VybmFsLT5qX3RyYW5zX21heCkgewogCSAgICAgICAgLyogTm9uLWRlZmF1bHQgam91cm5hbCBwYXJhbXMuCiAJCSAgIERvIHNhbml0eSBjaGVjayBmb3IgdGhlbS4gKi8KIAkgICAgICAgIGludCByYXRpbyA9IDE7Ci0JCWlmIChwX3Nfc2ItPnNfYmxvY2tzaXplIDwgUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkKLQkJICAgICAgICByYXRpbyA9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgLyBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQlpZiAoc2ItPnNfYmxvY2tzaXplIDwgUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkKKwkJICAgICAgICByYXRpbyA9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgLyBzYi0+c19ibG9ja3NpemU7CiAKIAkJaWYgKGpvdXJuYWwtPmpfdHJhbnNfbWF4ID4gSk9VUk5BTF9UUkFOU19NQVhfREVGQVVMVCAvIHJhdGlvIHx8CiAJCSAgICBqb3VybmFsLT5qX3RyYW5zX21heCA8IEpPVVJOQUxfVFJBTlNfTUlOX0RFRkFVTFQgLyByYXRpbyB8fAotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpIC8gam91cm5hbC0+al90cmFuc19tYXggPAorCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikgLyBqb3VybmFsLT5qX3RyYW5zX21heCA8CiAJCSAgICBKT1VSTkFMX01JTl9SQVRJTykgewotCQkgICAgICAgIHJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDYyOiBiYWQgdHJhbnNhY3Rpb24gbWF4IHNpemUgKCV1KS4gRlNDSz8iLAotCQkJCSBqb3VybmFsLT5qX3RyYW5zX21heCk7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDYyIiwKKwkJCQkJICJiYWQgdHJhbnNhY3Rpb24gbWF4IHNpemUgKCV1KS4gIgorCQkJCQkgIkZTQ0s/Iiwgam91cm5hbC0+al90cmFuc19tYXgpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaWYgKGpvdXJuYWwtPmpfbWF4X2JhdGNoICE9IChqb3VybmFsLT5qX3RyYW5zX21heCkgKgogCQkgICAgICAgIEpPVVJOQUxfTUFYX0JBVENIX0RFRkFVTFQvSk9VUk5BTF9UUkFOU19NQVhfREVGQVVMVCkgewotCQkgICAgICAgIHJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSJzaC00NjM6IGJhZCB0cmFuc2FjdGlvbiBtYXggYmF0Y2ggKCV1KS4gRlNDSz8iLAotCQkJCWpvdXJuYWwtPmpfbWF4X2JhdGNoKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjMiLAorCQkJCQkgImJhZCB0cmFuc2FjdGlvbiBtYXggYmF0Y2ggKCV1KS4gIgorCQkJCQkgIkZTQ0s/Iiwgam91cm5hbC0+al9tYXhfYmF0Y2gpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjY5Myw5ICsyNjk3LDExIEBACiAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgc3lzdGVtIHdhcyBjcmVhdGVkIGJ5IG9sZCB2ZXJzaW9uCiAJCSAgIG9mIG1rcmVpc2VyZnMsIHNvIHNvbWUgZmllbGRzIGNvbnRhaW4gemVyb3MsCiAJCSAgIGFuZCB3ZSBuZWVkIHRvIGFkdmlzZSBwcm9wZXIgdmFsdWVzIGZvciB0aGVtICovCi0JICAgICAgICBpZiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAhPSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFKQotCSAgICAgICAgICAgICAgICByZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJzaC00NjQ6IGJhZCBibG9ja3NpemUgKCV1KSIsCi0JCQkJICAgICAgIHBfc19zYi0+c19ibG9ja3NpemUpOworCQlpZiAoc2ItPnNfYmxvY2tzaXplICE9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjQiLCAiYmFkIGJsb2Nrc2l6ZSAoJXUpIiwKKwkJCQkJIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQogCQlqb3VybmFsLT5qX3RyYW5zX21heCA9IEpPVVJOQUxfVFJBTlNfTUFYX0RFRkFVTFQ7CiAJCWpvdXJuYWwtPmpfbWF4X2JhdGNoID0gSk9VUk5BTF9NQVhfQkFUQ0hfREVGQVVMVDsKIAkJam91cm5hbC0+al9tYXhfY29tbWl0X2FnZSA9IEpPVVJOQUxfTUFYX0NPTU1JVF9BR0U7CkBAIC0yNzA2LDEwICsyNzEyLDEwIEBACiAvKgogKiogbXVzdCBiZSBjYWxsZWQgb25jZSBvbiBmcyBtb3VudC4gIGNhbGxzIGpvdXJuYWxfcmVhZCBmb3IgeW91CiAqLwotaW50IGpvdXJuYWxfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgY29uc3QgY2hhciAqal9kZXZfbmFtZSwKK2ludCBqb3VybmFsX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqal9kZXZfbmFtZSwKIAkJIGludCBvbGRfZm9ybWF0LCB1bnNpZ25lZCBpbnQgY29tbWl0X21heF9hZ2UpCiB7Ci0JaW50IG51bV9jbm9kZXMgPSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikgKiAyOworCWludCBudW1fY25vZGVzID0gU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikgKiAyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhqaDsKIAlzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKnJzOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqamg7CkBAIC0yNzE3LDEwICsyNzIzLDEwIEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0Jam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsKSk7CisJam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKIAlpZiAoIWpvdXJuYWwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTEyNTY6IHVuYWJsZSB0byBnZXQgbWVtb3J5IGZvciBqb3VybmFsIHN0cnVjdHVyZSIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjU2IiwKKwkJCQkgInVuYWJsZSB0byBnZXQgbWVtb3J5IGZvciBqb3VybmFsIHN0cnVjdHVyZSIpOwogCQlyZXR1cm4gMTsKIAl9CiAJbWVtc2V0KGpvdXJuYWwsIDAsIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCkpOwpAQCAtMjcyOSw1MSArMjczNSw1MSBAQAogCUlOSVRfTElTVF9IRUFEKCZqb3VybmFsLT5qX3dvcmtpbmdfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfam91cm5hbF9saXN0KTsKIAlqb3VybmFsLT5qX3BlcnNpc3RlbnRfdHJhbnMgPSAwOwotCWlmIChyZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMocF9zX3NiLAorCWlmIChyZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMoc2IsCiAJCQkJCSAgIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAsCi0JCQkJCSAgIHJlaXNlcmZzX2JtYXBfY291bnQocF9zX3NiKSkpCisJCQkJCSAgIHJlaXNlcmZzX2JtYXBfY291bnQoc2IpKSkKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47Ci0JYWxsb2NhdGVfYml0bWFwX25vZGVzKHBfc19zYik7CisJYWxsb2NhdGVfYml0bWFwX25vZGVzKHNiKTsKIAogCS8qIHJlc2VydmVkIGZvciBqb3VybmFsIGFyZWEgc3VwcG9ydCAqLwotCVNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHBfc19zYikgPSAob2xkX2Zvcm1hdCA/CisJU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0soc2IpID0gKG9sZF9mb3JtYXQgPwogCQkJCQkJIFJFSVNFUkZTX09MRF9ESVNLX09GRlNFVF9JTl9CWVRFUwotCQkJCQkJIC8gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArCi0JCQkJCQkgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpICsKKwkJCQkJCSAvIHNiLT5zX2Jsb2Nrc2l6ZSArCisJCQkJCQkgcmVpc2VyZnNfYm1hcF9jb3VudChzYikgKwogCQkJCQkJIDEgOgogCQkJCQkJIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTIC8KLQkJCQkJCSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgMik7CisJCQkJCQkgc2ItPnNfYmxvY2tzaXplICsgMik7CiAKIAkvKiBTYW5pdHkgY2hlY2sgdG8gc2VlIGlzIHRoZSBzdGFuZGFyZCBqb3VybmFsIGZpdHRpbmcgd2l0aGluZyBmaXJzdCBiaXRtYXAKIAkgICAoYWN0dWFsIGZvciBzbWFsbCBibG9ja3NpemVzKSAqLwotCWlmICghU0JfT05ESVNLX0pPVVJOQUxfREVWSUNFKHBfc19zYikgJiYKLQkgICAgKFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHBfc19zYikgKwotCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpID4gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSAqIDgpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xMzkzOiBqb3VybmFsIGRvZXMgbm90IGZpdCBmb3IgYXJlYSAiCi0JCQkJICJhZGRyZXNzZWQgYnkgZmlyc3Qgb2YgYml0bWFwIGJsb2Nrcy4gSXQgc3RhcnRzIGF0ICIKKwlpZiAoIVNCX09ORElTS19KT1VSTkFMX0RFVklDRShzYikgJiYKKwkgICAgKFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHNiKSArCisJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSA+IHNiLT5zX2Jsb2Nrc2l6ZSAqIDgpKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEzOTMiLAorCQkJCSAiam91cm5hbCBkb2VzIG5vdCBmaXQgZm9yIGFyZWEgYWRkcmVzc2VkICIKKwkJCQkgImJ5IGZpcnN0IG9mIGJpdG1hcCBibG9ja3MuIEl0IHN0YXJ0cyBhdCAiCiAJCQkJICIldSBhbmQgaXRzIHNpemUgaXMgJXUuIEJsb2NrIHNpemUgJWxkIiwKLQkJCQkgU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socF9zX3NiKSwKLQkJCQkgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpLAotCQkJCSBwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwkJCQkgU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0soc2IpLAorCQkJCSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSwKKwkJCQkgc2ItPnNfYmxvY2tzaXplKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCi0JaWYgKGpvdXJuYWxfaW5pdF9kZXYocF9zX3NiLCBqb3VybmFsLCBqX2Rldl9uYW1lKSAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDYyOiB1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3JuYWwgZGV2aWNlIik7CisJaWYgKGpvdXJuYWxfaW5pdF9kZXYoc2IsIGpvdXJuYWwsIGpfZGV2X25hbWUpICE9IDApIHsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MiIsCisJCQkJICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3JuYWwgZGV2aWNlIik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAotCXJzID0gU0JfRElTS19TVVBFUl9CTE9DSyhwX3Nfc2IpOworCXJzID0gU0JfRElTS19TVVBFUl9CTE9DSyhzYik7CiAKIAkvKiByZWFkIGpvdXJuYWwgaGVhZGVyICovCi0JYmhqaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLAotCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCi0JCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJYmhqaCA9IGpvdXJuYWxfYnJlYWQoc2IsCisJCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKworCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJaWYgKCFiaGpoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDU5OiB1bmFibGUgdG8gcmVhZCBqb3VybmFsIGhlYWRlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDU5IiwKKwkJCQkgInVuYWJsZSB0byByZWFkIGpvdXJuYWwgaGVhZGVyIik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAlqaCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKikoYmhqaC0+Yl9kYXRhKTsKQEAgLTI3ODIsMTAgKzI3ODgsMTAgQEAKIAlpZiAoaXNfcmVpc2VyZnNfanIocnMpCiAJICAgICYmIChsZTMyX3RvX2NwdShqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljKSAhPQogCQlzYl9qcF9qb3VybmFsX21hZ2ljKHJzKSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJzaC00NjA6IGpvdXJuYWwgaGVhZGVyIG1hZ2ljICV4ICIKLQkJCQkgIihkZXZpY2UgJXMpIGRvZXMgbm90IG1hdGNoIHRvIG1hZ2ljIGZvdW5kIGluIHN1cGVyICIKLQkJCQkgImJsb2NrICV4IiwgamgtPmpoX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYywKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MCIsCisJCQkJICJqb3VybmFsIGhlYWRlciBtYWdpYyAleCAoZGV2aWNlICVzKSBkb2VzICIKKwkJCQkgIm5vdCBtYXRjaCB0byBtYWdpYyBmb3VuZCBpbiBzdXBlciBibG9jayAleCIsCisJCQkJIGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMsCiAJCQkJIGJkZXZuYW1lKGpvdXJuYWwtPmpfZGV2X2JkLCBiKSwKIAkJCQkgc2JfanBfam91cm5hbF9tYWdpYyhycykpOwogCQlicmVsc2UoYmhqaCk7CkBAIC0yNzk4LDcgKzI4MDQsNyBAQAogCSAgICBsZTMyX3RvX2NwdShqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21heF9jb21taXRfYWdlKTsKIAlqb3VybmFsLT5qX21heF90cmFuc19hZ2UgPSBKT1VSTkFMX01BWF9UUkFOU19BR0U7CiAKLQlpZiAoY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhwX3Nfc2IsIGpvdXJuYWwpICE9IDApCisJaWYgKGNoZWNrX2FkdmlzZV90cmFuc19wYXJhbXMoc2IsIGpvdXJuYWwpICE9IDApCiAJICAgICAgICBnb3RvIGZyZWVfYW5kX3JldHVybjsKIAlqb3VybmFsLT5qX2RlZmF1bHRfbWF4X2NvbW1pdF9hZ2UgPSBqb3VybmFsLT5qX21heF9jb21taXRfYWdlOwogCkBAIC0yODA3LDEyICsyODEzLDEyIEBACiAJCWpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSA9IGNvbW1pdF9tYXhfYWdlOwogCX0KIAotCXJlaXNlcmZzX2luZm8ocF9zX3NiLCAiam91cm5hbCBwYXJhbXM6IGRldmljZSAlcywgc2l6ZSAldSwgIgorCXJlaXNlcmZzX2luZm8oc2IsICJqb3VybmFsIHBhcmFtczogZGV2aWNlICVzLCBzaXplICV1LCAiCiAJCSAgICAgICJqb3VybmFsIGZpcnN0IGJsb2NrICV1LCBtYXggdHJhbnMgbGVuICV1LCBtYXggYmF0Y2ggJXUsICIKIAkJICAgICAgIm1heCBjb21taXQgYWdlICV1LCBtYXggdHJhbnMgYWdlICV1XG4iLAogCQkgICAgICBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYiksCi0JCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSwKLQkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpLAorCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkgICAgICBqb3VybmFsLT5qX3RyYW5zX21heCwKIAkJICAgICAgam91cm5hbC0+al9tYXhfYmF0Y2gsCiAJCSAgICAgIGpvdXJuYWwtPmpfbWF4X2NvbW1pdF9hZ2UsIGpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSk7CkBAIC0yODIwLDcgKzI4MjYsNyBAQAogCWJyZWxzZShiaGpoKTsKIAogCWpvdXJuYWwtPmpfbGlzdF9iaXRtYXBfaW5kZXggPSAwOwotCWpvdXJuYWxfbGlzdF9pbml0KHBfc19zYik7CisJam91cm5hbF9saXN0X2luaXQoc2IpOwogCiAJbWVtc2V0KGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCAwLAogCSAgICAgICBKT1VSTkFMX0hBU0hfU0laRSAqIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqKSk7CkBAIC0yODUyLDcgKzI4NTgsNyBAQAogCWpvdXJuYWwtPmpfbXVzdF93YWl0ID0gMDsKIAogCWlmIChqb3VybmFsLT5qX2Nub2RlX2ZyZWUgPT0gMCkgewotICAgICAgICAJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJqb3VybmFsLTIwMDQ6IEpvdXJuYWwgY25vZGUgbWVtb3J5ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjAwNCIsICJKb3VybmFsIGNub2RlIG1lbW9yeSAiCiAJCSAgICAgICAgICAgICAgICAgImFsbG9jYXRpb24gZmFpbGVkICglbGQgYnl0ZXMpLiBKb3VybmFsIGlzICIKIAkJICAgICAgICAgICAgICAgICAidG9vIGxhcmdlIGZvciBhdmFpbGFibGUgbWVtb3J5LiBVc3VhbGx5ICIKIAkJICAgICAgICAgICAgICAgICAidGhpcyBpcyBkdWUgdG8gYSBqb3VybmFsIHRoYXQgaXMgdG9vIGxhcmdlLiIsCkBAIC0yODYwLDE2ICsyODY2LDE3IEBACiAgICAgICAgIAlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKLQlpbml0X2pvdXJuYWxfaGFzaChwX3Nfc2IpOworCWluaXRfam91cm5hbF9oYXNoKHNiKTsKIAlqbCA9IGpvdXJuYWwtPmpfY3VycmVudF9qbDsKLQlqbC0+al9saXN0X2JpdG1hcCA9IGdldF9saXN0X2JpdG1hcChwX3Nfc2IsIGpsKTsKKwlqbC0+al9saXN0X2JpdG1hcCA9IGdldF9saXN0X2JpdG1hcChzYiwgamwpOwogCWlmICghamwtPmpfbGlzdF9iaXRtYXApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTIwMDUsIGdldF9saXN0X2JpdG1hcCBmYWlsZWQgZm9yIGpvdXJuYWwgbGlzdCAwIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTIwMDUiLAorCQkJCSAiZ2V0X2xpc3RfYml0bWFwIGZhaWxlZCBmb3Igam91cm5hbCBsaXN0IDAiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQotCWlmIChqb3VybmFsX3JlYWQocF9zX3NiKSA8IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJSZXBsYXkgRmFpbHVyZSwgdW5hYmxlIHRvIG1vdW50Iik7CisJaWYgKGpvdXJuYWxfcmVhZChzYikgPCAwKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy0yMDA2IiwKKwkJCQkgIlJlcGxheSBGYWlsdXJlLCB1bmFibGUgdG8gbW91bnQiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCkBAIC0yODc4LDEwICsyODg1LDEwIEBACiAJCWNvbW1pdF93cSA9IGNyZWF0ZV93b3JrcXVldWUoInJlaXNlcmZzIik7CiAKIAlJTklUX0RFTEFZRURfV09SSygmam91cm5hbC0+al93b3JrLCBmbHVzaF9hc3luY19jb21taXRzKTsKLQlqb3VybmFsLT5qX3dvcmtfc2IgPSBwX3Nfc2I7CisJam91cm5hbC0+al93b3JrX3NiID0gc2I7CiAJcmV0dXJuIDA7CiAgICAgICBmcmVlX2FuZF9yZXR1cm46Ci0JZnJlZV9qb3VybmFsX3JhbShwX3Nfc2IpOworCWZyZWVfam91cm5hbF9yYW0oc2IpOwogCXJldHVybiAxOwogfQogCkBAIC0yOTEyLDcgKzI5MTksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiB0aGlzIG11c3QgYmUgY2FsbGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uLCBhbmQgcmVxdWlyZXMgdGhlIAorLyogdGhpcyBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgYW5kIHJlcXVpcmVzIHRoZQogKioga2VybmVsX2xvY2sgdG8gYmUgaGVsZAogKi8KIHZvaWQgcmVpc2VyZnNfYmxvY2tfd3JpdGVzKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoKQpAQCAtMjk3MCw3ICsyOTc3LDcgQEAKIAkJd2FrZV91cCgmam91cm5hbC0+al9qb2luX3dhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBsZXRfdHJhbnNhY3Rpb25fZ3JvdyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorc3RhdGljIHZvaWQgbGV0X3RyYW5zYWN0aW9uX2dyb3coc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IHRyYW5zX2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJdW5zaWduZWQgbG9uZyBiY291bnQgPSBqb3VybmFsLT5qX2Jjb3VudDsKQEAgLTI5OTcsNDMgKzMwMDQsNDMgQEAKICoqIGV4cGVjdCB0byB1c2UgaW4gbmJsb2Nrcy4KICovCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfYmVnaW5fcihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCiAJCQkgICAgICBpbnQgam9pbikKIHsKIAl0aW1lX3Qgbm93ID0gZ2V0X3NlY29uZHMoKTsKLQlpbnQgb2xkX3RyYW5zX2lkOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXVuc2lnbmVkIGludCBvbGRfdHJhbnNfaWQ7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIG15dGg7CiAJaW50IHNjaGVkX2NvdW50ID0gMDsKIAlpbnQgcmV0dmFsOwogCi0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJqb3VybmFsX2JlZ2luIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImpvdXJuYWxfYmVnaW4iKTsKIAlCVUdfT04obmJsb2NrcyA+IGpvdXJuYWwtPmpfdHJhbnNfbWF4KTsKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmpvdXJuYWxfYmVpbmcpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9iZWluZyk7CiAJLyogc2V0IGhlcmUgZm9yIGpvdXJuYWxfam9pbiAqLwogCXRoLT50X3JlZmNvdW50ID0gMTsKLQl0aC0+dF9zdXBlciA9IHBfc19zYjsKKwl0aC0+dF9zdXBlciA9IHNiOwogCiAgICAgICByZWxvY2s6Ci0JbG9ja19qb3VybmFsKHBfc19zYik7CisJbG9ja19qb3VybmFsKHNiKTsKIAlpZiAoam9pbiAhPSBKQkVHSU5fQUJPUlQgJiYgcmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJcmV0dmFsID0gam91cm5hbC0+al9lcnJubzsKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAJam91cm5hbC0+al9iY291bnQrKzsKIAogCWlmICh0ZXN0X2JpdChKX1dSSVRFUlNfQkxPQ0tFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKSB7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7Ci0JCXJlaXNlcmZzX3dhaXRfb25fd3JpdGVfYmxvY2socF9zX3NiKTsKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd3JpdGVycyk7CisJCXVubG9ja19qb3VybmFsKHNiKTsKKwkJcmVpc2VyZnNfd2FpdF9vbl93cml0ZV9ibG9jayhzYik7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd3JpdGVycyk7CiAJCWdvdG8gcmVsb2NrOwogCX0KIAlub3cgPSBnZXRfc2Vjb25kcygpOwogCiAJLyogaWYgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgam91cm5hbCBPUgotCSAqKiBpZiB0aGlzIHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGFuZCB3ZSB3ZXJlbid0IGNhbGxlZCBqb2luYWJsZSwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBiZWdpbm5pbmcgCisJICoqIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgYW5kIHdlIHdlcmVuJ3QgY2FsbGVkIGpvaW5hYmxlLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGJlZ2lubmluZwogCSAqKiB3ZSBkb24ndCBzbGVlcCBpZiB0aGVyZSBhcmVuJ3Qgb3RoZXIgd3JpdGVycwogCSAqLwogCkBAIC0zMDQ4LDcgKzMwNTUsNyBAQAogCSAgICB8fCAoIWpvaW4gJiYgam91cm5hbC0+al9jbm9kZV9mcmVlIDwgKGpvdXJuYWwtPmpfdHJhbnNfbWF4ICogMykpKSB7CiAKIAkJb2xkX3RyYW5zX2lkID0gam91cm5hbC0+al90cmFuc19pZDsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsJLyogYWxsb3cgb3RoZXJzIHRvIGZpbmlzaCB0aGlzIHRyYW5zYWN0aW9uICovCisJCXVubG9ja19qb3VybmFsKHNiKTsJLyogYWxsb3cgb3RoZXJzIHRvIGZpbmlzaCB0aGlzIHRyYW5zYWN0aW9uICovCiAKIAkJaWYgKCFqb2luICYmIChqb3VybmFsLT5qX2xlbl9hbGxvYyArIG5ibG9ja3MgKyAyKSA+PQogCQkgICAgam91cm5hbC0+al9tYXhfYmF0Y2ggJiYKQEAgLTMwNTYsNyArMzA2Myw3IEBACiAJCSAgICAoam91cm5hbC0+al9sZW5fYWxsb2MgKiA3NSkpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmam91cm5hbC0+al93Y291bnQpID4gMTApIHsKIAkJCQlzY2hlZF9jb3VudCsrOwotCQkJCXF1ZXVlX2xvZ193cml0ZXIocF9zX3NiKTsKKwkJCQlxdWV1ZV9sb2dfd3JpdGVyKHNiKTsKIAkJCQlnb3RvIHJlbG9jazsKIAkJCX0KIAkJfQpAQCAtMzA2NiwyNSArMzA3MywyNSBAQAogCQlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfamxvY2spKSB7CiAJCQl3aGlsZSAoam91cm5hbC0+al90cmFuc19pZCA9PSBvbGRfdHJhbnNfaWQgJiYKIAkJCSAgICAgICBhdG9taWNfcmVhZCgmam91cm5hbC0+al9qbG9jaykpIHsKLQkJCQlxdWV1ZV9sb2dfd3JpdGVyKHBfc19zYik7CisJCQkJcXVldWVfbG9nX3dyaXRlcihzYik7CiAJCQl9CiAJCQlnb3RvIHJlbG9jazsKIAkJfQotCQlyZXR2YWwgPSBqb3VybmFsX2pvaW4oJm15dGgsIHBfc19zYiwgMSk7CisJCXJldHZhbCA9IGpvdXJuYWxfam9pbigmbXl0aCwgc2IsIDEpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXRfZmFpbDsKIAogCQkvKiBzb21lb25lIG1pZ2h0IGhhdmUgZW5kZWQgdGhlIHRyYW5zYWN0aW9uIHdoaWxlIHdlIGpvaW5lZCAqLwogCQlpZiAob2xkX3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIDApOworCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCAwKTsKIAkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIENPTU1JVF9OT1cpOworCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBDT01NSVRfTk9XKTsKIAkJfQogCiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIG91dF9mYWlsOwogCi0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmpvdXJuYWxfcmVsb2NrX3djb3VudCk7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd2NvdW50KTsKIAkJZ290byByZWxvY2s7CiAJfQogCS8qIHdlIGFyZSB0aGUgZmlyc3Qgd3JpdGVyLCBzZXQgdHJhbnNfaWQgKi8KQEAgLTMwOTYsNyArMzEwMyw3IEBACiAJdGgtPnRfYmxvY2tzX2xvZ2dlZCA9IDA7CiAJdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCA9IG5ibG9ja3M7CiAJdGgtPnRfdHJhbnNfaWQgPSBqb3VybmFsLT5qX3RyYW5zX2lkOwotCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJdW5sb2NrX2pvdXJuYWwoc2IpOwogCUlOSVRfTElTVF9IRUFEKCZ0aC0+dF9saXN0KTsKIAlnZXRfZnNfZXhjbCgpOwogCXJldHVybiAwOwpAQCAtMzEwNiw3ICszMTEzLDcgQEAKIAkvKiBSZS1zZXQgdGgtPnRfc3VwZXIsIHNvIHdlIGNhbiBwcm9wZXJseSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55CiAJICogcGVyc2lzdGVudCB0cmFuc2FjdGlvbnMgdGhlcmUgYXJlLiBXZSBuZWVkIHRvIGRvIHRoaXMgc28gaWYgdGhpcwogCSAqIGNhbGwgaXMgcGFydCBvZiBhIGZhaWxlZCByZXN0YXJ0X3RyYW5zYWN0aW9uLCB3ZSBjYW4gZnJlZSBpdCBsYXRlciAqLwotCXRoLT50X3N1cGVyID0gcF9zX3NiOworCXRoLT50X3N1cGVyID0gc2I7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzE1Nyw3ICszMTY0LDcgQEAKIH0KIAogc3RhdGljIGludCBqb3VybmFsX2pvaW4oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKmN1cl90aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIApAQCAtMzE2NiwxMSArMzE3MywxMSBAQAogCSAqLwogCXRoLT50X2hhbmRsZV9zYXZlID0gY3VyX3RoOwogCUJVR19PTihjdXJfdGggJiYgY3VyX3RoLT50X3JlZmNvdW50ID4gMSk7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgcF9zX3NiLCBuYmxvY2tzLCBKQkVHSU5fSk9JTik7CisJcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9KT0lOKTsKIH0KIAogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqY3VyX3RoID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCkBAIC0zMTc5LDExICszMTg2LDExIEBACiAJICovCiAJdGgtPnRfaGFuZGxlX3NhdmUgPSBjdXJfdGg7CiAJQlVHX09OKGN1cl90aCAmJiBjdXJfdGgtPnRfcmVmY291bnQgPiAxKTsKLQlyZXR1cm4gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIEpCRUdJTl9BQk9SVCk7CisJcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9BQk9SVCk7CiB9CiAKIGludCBqb3VybmFsX2JlZ2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKmN1cl90aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAlpbnQgcmV0OwpAQCAtMzE5MSwyOCArMzE5OCwyOSBAQAogCXRoLT50X2hhbmRsZV9zYXZlID0gTlVMTDsKIAlpZiAoY3VyX3RoKSB7CiAJCS8qIHdlIGFyZSBuZXN0aW5nIGludG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KLQkJaWYgKGN1cl90aC0+dF9zdXBlciA9PSBwX3Nfc2IpIHsKKwkJaWYgKGN1cl90aC0+dF9zdXBlciA9PSBzYikgewogCQkJQlVHX09OKCFjdXJfdGgtPnRfcmVmY291bnQpOwogCQkJY3VyX3RoLT50X3JlZmNvdW50Kys7CiAJCQltZW1jcHkodGgsIGN1cl90aCwgc2l6ZW9mKCp0aCkpOwogCQkJaWYgKHRoLT50X3JlZmNvdW50IDw9IDEpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCQkgIkJBRDogcmVmY291bnQgPD0gMSwgYnV0IGpvdXJuYWxfaW5mbyAhPSAwIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTIwMDUiLAorCQkJCQkJICJCQUQ6IHJlZmNvdW50IDw9IDEsIGJ1dCAiCisJCQkJCQkgImpvdXJuYWxfaW5mbyAhPSAwIik7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCS8qIHdlJ3ZlIGVuZGVkIHVwIHdpdGggYSBoYW5kbGUgZnJvbSBhIGRpZmZlcmVudCBmaWxlc3lzdGVtLgogCQkJICoqIHNhdmUgaXQgYW5kIHJlc3RvcmUgb24gam91cm5hbF9lbmQuICBUaGlzIHNob3VsZCBuZXZlcgogCQkJICoqIHJlYWxseSBoYXBwZW4uLi4KIAkJCSAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiY2xtLTIxMDA6IG5lc3RpbmcgaW5mbyBhIGRpZmZlcmVudCBGUyIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImNsbS0yMTAwIiwKKwkJCQkJICJuZXN0aW5nIGluZm8gYSBkaWZmZXJlbnQgRlMiKTsKIAkJCXRoLT50X2hhbmRsZV9zYXZlID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCQkJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGg7CiAJCX0KIAl9IGVsc2UgewogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aDsKIAl9Ci0JcmV0ID0gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIEpCRUdJTl9SRUcpOworCXJldCA9IGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9SRUcpOwogCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8gIT0gdGgpOwogCiAJLyogSSBndWVzcyB0aGlzIGJvaWxzIGRvd24gdG8gYmVpbmcgdGhlIHJlY2lwcm9jYWwgb2YgY2xtLTIxMDAgYWJvdmUuCkBAIC0zMjMyLDMyICszMjQwLDMyIEBACiAqKgogKiogaWYgaXQgd2FzIGRpcnR5LCBjbGVhbnMgYW5kIGZpbGVzIG9udG8gdGhlIGNsZWFuIGxpc3QuICBJIGNhbid0IGxldCBpdCBiZSBkaXJ0eSBhZ2FpbiB1bnRpbCB0aGUKICoqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KLSoqIAorKioKICoqIGlmIGpfbGVuLCBpcyBiaWdnZXIgdGhhbiBqX2xlbl9hbGxvYywgaXQgcHVzaGVzIGpfbGVuX2FsbG9jIHRvIDEwICsgal9sZW4uCiAqLwogaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiA9IE5VTEw7CiAJaW50IGNvdW50X2FscmVhZHlfaW5jZCA9IDA7CiAJaW50IHByZXBhcmVkID0gMDsKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLm1hcmtfZGlydHkpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubWFya19kaXJ0eSk7CiAJaWYgKHRoLT50X3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsCi0JCQkgICAgICAgImpvdXJuYWwtMTU3NzogaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZFxuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE1NzciLAorCQkJICAgICAgICJoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkIiwKIAkJCSAgICAgICB0aC0+dF90cmFuc19pZCwgam91cm5hbC0+al90cmFuc19pZCk7CiAJfQogCi0JcF9zX3NiLT5zX2RpcnQgPSAxOworCXNiLT5zX2RpcnQgPSAxOwogCiAJcHJlcGFyZWQgPSB0ZXN0X2NsZWFyX2J1ZmZlcl9qb3VybmFsX3ByZXBhcmVkKGJoKTsKIAljbGVhcl9idWZmZXJfam91cm5hbF9yZXN0b3JlX2RpcnR5KGJoKTsKIAkvKiBhbHJlYWR5IGluIHRoaXMgdHJhbnNhY3Rpb24sIHdlIGFyZSBkb25lICovCiAJaWYgKGJ1ZmZlcl9qb3VybmFsZWQoYmgpKSB7Ci0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLm1hcmtfZGlydHlfYWxyZWFkeSk7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubWFya19kaXJ0eV9hbHJlYWR5KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMjY2LDcgKzMyNzQsOCBAQAogCSAqKiBjb3VsZCBnZXQgdG8gZGlzayB0b28gZWFybHkuICBOT1QgR09PRC4KIAkgKi8KIAlpZiAoIXByZXBhcmVkIHx8IGJ1ZmZlcl9kaXJ0eShiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJqb3VybmFsLTE3Nzc6IGJ1ZmZlciAlbGx1IGJhZCBzdGF0ZSAiCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTE3NzciLAorCQkJCSAiYnVmZmVyICVsbHUgYmFkIHN0YXRlICIKIAkJCQkgIiVjUFJFUEFSRUQgJWNMT0NLRUQgJWNESVJUWSAlY0pESVJUWV9XQUlUIiwKIAkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAogCQkJCSBwcmVwYXJlZCA/ICcgJyA6ICchJywKQEAgLTMyNzYsMjMgKzMyODUsMjMgQEAKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpIDw9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTE0MDk6IGpvdXJuYWxfbWFya19kaXJ0eSByZXR1cm5pbmcgYmVjYXVzZSBqX3djb3VudCB3YXMgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xNDA5IiwKKwkJCQkgInJldHVybmluZyBiZWNhdXNlIGpfd2NvdW50IHdhcyAlZCIsCiAJCQkJIGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSk7CiAJCXJldHVybiAxOwogCX0KLQkvKiB0aGlzIGVycm9yIG1lYW5zIEkndmUgc2NyZXdlZCB1cCwgYW5kIHdlJ3ZlIG92ZXJmbG93ZWQgdGhlIHRyYW5zYWN0aW9uLiAgCisJLyogdGhpcyBlcnJvciBtZWFucyBJJ3ZlIHNjcmV3ZWQgdXAsIGFuZCB3ZSd2ZSBvdmVyZmxvd2VkIHRoZSB0cmFuc2FjdGlvbi4KIAkgKiogTm90aGluZyBjYW4gYmUgZG9uZSBoZXJlLCBleGNlcHQgbWFrZSB0aGUgRlMgcmVhZG9ubHkgb3IgcGFuaWMuCiAJICovCiAJaWYgKGpvdXJuYWwtPmpfbGVuID49IGpvdXJuYWwtPmpfdHJhbnNfbWF4KSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLAotCQkJICAgICAgICJqb3VybmFsLTE0MTM6IGpvdXJuYWxfbWFya19kaXJ0eTogal9sZW4gKCVsdSkgaXMgdG9vIGJpZ1xuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE0MTMiLAorCQkJICAgICAgICJqX2xlbiAoJWx1KSBpcyB0b28gYmlnIiwKIAkJCSAgICAgICBqb3VybmFsLT5qX2xlbik7CiAJfQogCiAJaWYgKGJ1ZmZlcl9qb3VybmFsX2RpcnR5KGJoKSkgewogCQljb3VudF9hbHJlYWR5X2luY2QgPSAxOwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5tYXJrX2RpcnR5X25vdGpvdXJuYWwpOworCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLm1hcmtfZGlydHlfbm90am91cm5hbCk7CiAJCWNsZWFyX2J1ZmZlcl9qb3VybmFsX2RpcnR5KGJoKTsKIAl9CiAKQEAgLTMzMDQsOSArMzMxMyw5IEBACiAKIAkvKiBub3cgcHV0IHRoaXMgZ3V5IG9uIHRoZSBlbmQgKi8KIAlpZiAoIWNuKSB7Ci0JCWNuID0gZ2V0X2Nub2RlKHBfc19zYik7CisJCWNuID0gZ2V0X2Nub2RlKHNiKTsKIAkJaWYgKCFjbikgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLCAiZ2V0X2Nub2RlIGZhaWxlZCFcbiIpOworCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTQiLCAiZ2V0X2Nub2RlIGZhaWxlZCEiKTsKIAkJfQogCiAJCWlmICh0aC0+dF9ibG9ja3NfbG9nZ2VkID09IHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpIHsKQEAgLTMzMTgsNyArMzMyNyw3IEBACiAKIAkJY24tPmJoID0gYmg7CiAJCWNuLT5ibG9ja25yID0gYmgtPmJfYmxvY2tucjsKLQkJY24tPnNiID0gcF9zX3NiOworCQljbi0+c2IgPSBzYjsKIAkJY24tPmpsaXN0ID0gTlVMTDsKIAkJaW5zZXJ0X2pvdXJuYWxfaGFzaChqb3VybmFsLT5qX2hhc2hfdGFibGUsIGNuKTsKIAkJaWYgKCFjb3VudF9hbHJlYWR5X2luY2QpIHsKQEAgLTMzMzksMTEgKzMzNDgsMTEgQEAKIH0KIAogaW50IGpvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8gJiYgdGgtPnRfcmVmY291bnQgPiAxKQotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIlJFSVNFUi1ORVNUSU5HOiB0aCBOVUxMLCByZWZjb3VudCAlZCIsCi0JCQkJIHRoLT50X3JlZmNvdW50KTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlJFSVNFUi1ORVNUSU5HIiwKKwkJCQkgInRoIE5VTEwsIHJlZmNvdW50ICVkIiwgdGgtPnRfcmVmY291bnQpOwogCiAJaWYgKCF0aC0+dF90cmFuc19pZCkgewogCQlXQVJOX09OKDEpOwpAQCAtMzM2NiwyNiArMzM3NSwyNiBAQAogCQl9CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCBuYmxvY2tzLCAwKTsKKwkJcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBzYiwgbmJsb2NrcywgMCk7CiAJfQogfQogCi0vKiByZW1vdmVzIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHJlbHNpbmcgYW5kIGRlc2NyZW1lbnRpbmcgYW55IGNvdW50ZXJzLiAgCisvKiByZW1vdmVzIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHJlbHNpbmcgYW5kIGRlc2NyZW1lbnRpbmcgYW55IGNvdW50ZXJzLgogKiogYWxzbyBmaWxlcyB0aGUgcmVtb3ZlZCBidWZmZXIgZGlyZWN0bHkgb250byB0aGUgY2xlYW4gbGlzdAogKioKICoqIGNhbGxlZCBieSBqb3VybmFsX21hcmtfZnJlZWQgd2hlbiBhIGJsb2NrIGhhcyBiZWVuIGRlbGV0ZWQKICoqCiAqKiByZXR1cm5zIDEgaWYgaXQgY2xlYW5lZCBhbmQgcmVsc2VkIHRoZSBidWZmZXIuIDAgb3RoZXJ3aXNlCiAqLwotc3RhdGljIGludCByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICBiX2Jsb2NrbnJfdCBibG9ja25yLCBpbnQgYWxyZWFkeV9jbGVhbmVkKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJaW50IHJldCA9IDA7CiAKLQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKKwljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsb2NrbnIpOwogCWlmICghY24gfHwgIWNuLT5iaCkgewogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTM0MDMsNyArMzQxMiw3IEBACiAJCWpvdXJuYWwtPmpfbGFzdCA9IGNuLT5wcmV2OwogCX0KIAlpZiAoYmgpCi0JCXJlbW92ZV9qb3VybmFsX2hhc2gocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIE5VTEwsCisJCXJlbW92ZV9qb3VybmFsX2hhc2goc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgTlVMTCwKIAkJCQkgICAgYmgtPmJfYmxvY2tuciwgMCk7CiAJY2xlYXJfYnVmZmVyX2pvdXJuYWxlZChiaCk7CS8qIGRvbid0IGxvZyB0aGlzIG9uZSAqLwogCkBAIC0zNDEzLDE0ICszNDIyLDE0IEBACiAJCWNsZWFyX2J1ZmZlcl9qb3VybmFsX3Rlc3QoYmgpOwogCQlwdXRfYmgoYmgpOwogCQlpZiAoYXRvbWljX3JlYWQoJihiaC0+Yl9jb3VudCkpIDwgMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xNzUyOiByZW1vdmUgZnJvbSB0cmFucywgYl9jb3VudCA8IDAiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTE3NTIiLAorCQkJCQkgImJfY291bnQgPCAwIik7CiAJCX0KIAkJcmV0ID0gMTsKIAl9CiAJam91cm5hbC0+al9sZW4tLTsKIAlqb3VybmFsLT5qX2xlbl9hbGxvYy0tOwotCWZyZWVfY25vZGUocF9zX3NiLCBjbik7CisJZnJlZV9jbm9kZShzYiwgY24pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NjgsMjIgKzM0NzcsMjIgQEAKIH0KIAogLyogc3luY3MgdGhlIGNvbW1pdCBibG9ja3MsIGJ1dCBkb2VzIG5vdCBmb3JjZSB0aGUgcmVhbCBidWZmZXJzIHRvIGRpc2sKLSoqIHdpbGwgd2FpdCB1bnRpbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBkb25lL2NvbW1pdHRlZCBiZWZvcmUgcmV0dXJuaW5nIAorKiogd2lsbCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGRvbmUvY29tbWl0dGVkIGJlZm9yZSByZXR1cm5pbmcKICovCiBpbnQgam91cm5hbF9lbmRfc3luYyhzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJLyogeW91IGNhbiBzeW5jIHdoaWxlIG5lc3RlZCwgdmVyeSwgdmVyeSBiYWQgKi8KIAlCVUdfT04odGgtPnRfcmVmY291bnQgPiAxKTsKIAlpZiAoam91cm5hbC0+al9sZW4gPT0gMCkgewotCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkgICAgIDEpOwotCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7CisJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CiAJfQotCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCBuYmxvY2tzLCBDT01NSVRfTk9XIHwgV0FJVCk7CisJcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBzYiwgbmJsb2NrcywgQ09NTUlUX05PVyB8IFdBSVQpOwogfQogCiAvKgpAQCAtMzQ5Myw3ICszNTAyLDcgQEAKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCwgal93b3JrLndvcmspOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gam91cm5hbC0+al93b3JrX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBqb3VybmFsLT5qX3dvcmtfc2I7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAKQEAgLTM1MDIsNyArMzUxMSw3IEBACiAJCS8qIGxhc3QgZW50cnkgaXMgdGhlIHlvdW5nZXN0LCBjb21taXQgaXQgYW5kIHlvdSBnZXQgZXZlcnl0aGluZyAqLwogCQllbnRyeSA9IGpvdXJuYWwtPmpfam91cm5hbF9saXN0LnByZXY7CiAJCWpsID0gSk9VUk5BTF9MSVNUX0VOVFJZKGVudHJ5KTsKLQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7CisJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIH0KQEAgLTM1MTEsMTEgKzM1MjAsMTEgQEAKICoqIGZsdXNoZXMgYW55IG9sZCB0cmFuc2FjdGlvbnMgdG8gZGlzawogKiogZW5kcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpZiBpdCBpcyB0b28gb2xkCiAqLwotaW50IHJlaXNlcmZzX2ZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQoraW50IHJlaXNlcmZzX2ZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJdGltZV90IG5vdzsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAlub3cgPSBnZXRfc2Vjb25kcygpOwogCS8qIHNhZmV0eSBjaGVjayBzbyB3ZSBkb24ndCBmbHVzaCB3aGlsZSB3ZSBhcmUgcmVwbGF5aW5nIHRoZSBsb2cgZHVyaW5nCkBAIC0zNTMyLDM1ICszNTQxLDM1IEBACiAJICAgIGpvdXJuYWwtPmpfdHJhbnNfc3RhcnRfdGltZSA+IDAgJiYKIAkgICAgam91cm5hbC0+al9sZW4gPiAwICYmCiAJICAgIChub3cgLSBqb3VybmFsLT5qX3RyYW5zX3N0YXJ0X3RpbWUpID4gam91cm5hbC0+al9tYXhfdHJhbnNfYWdlKSB7Ci0JCWlmICgham91cm5hbF9qb2luKCZ0aCwgcF9zX3NiLCAxKSkgewotCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsCi0JCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCWlmICgham91cm5hbF9qb2luKCZ0aCwgc2IsIDEpKSB7CisJCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLAorCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCQkgICAgIDEpOwotCQkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOwogCiAJCQkvKiB3ZSdyZSBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGtyZWlzZXJmc2QsIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGRvCiAJCQkgKiogYW4gYXN5bmMgY29tbWl0IHNvIHRoYXQga3JlaXNlcmZzZCBjYW4gZG8gaXQgbGF0ZXIKIAkJCSAqLwotCQkJZG9fam91cm5hbF9lbmQoJnRoLCBwX3Nfc2IsIDEsIENPTU1JVF9OT1cgfCBXQUlUKTsKKwkJCWRvX2pvdXJuYWxfZW5kKCZ0aCwgc2IsIDEsIENPTU1JVF9OT1cgfCBXQUlUKTsKIAkJfQogCX0KLQlyZXR1cm4gcF9zX3NiLT5zX2RpcnQ7CisJcmV0dXJuIHNiLT5zX2RpcnQ7CiB9CiAKIC8qCiAqKiByZXR1cm5zIDAgaWYgZG9fam91cm5hbF9lbmQgc2hvdWxkIHJldHVybiByaWdodCBhd2F5LCByZXR1cm5zIDEgaWYgZG9fam91cm5hbF9lbmQgc2hvdWxkIGZpbmlzaCB0aGUgY29tbWl0Ci0qKiAKLSoqIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGJ1dCBzdGlsbCBoYXMgd3JpdGVycywgdGhpcyB3aWxsIHdhaXQgb24gal9qb2luX3dhaXQgdW50aWwgYWxsIAorKioKKyoqIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGJ1dCBzdGlsbCBoYXMgd3JpdGVycywgdGhpcyB3aWxsIHdhaXQgb24gal9qb2luX3dhaXQgdW50aWwgYWxsCiAqKiB0aGUgd3JpdGVycyBhcmUgZG9uZS4gIEJ5IHRoZSB0aW1lIGl0IHdha2VzIHVwLCB0aGUgdHJhbnNhY3Rpb24gaXQgd2FzIGNhbGxlZCBoYXMgYWxyZWFkeSBlbmRlZCwgc28gaXQganVzdAogKiogZmx1c2hlcyB0aGUgY29tbWl0IGxpc3QgYW5kIHJldHVybnMgMC4KICoqCiAqKiBXb24ndCBiYXRjaCB3aGVuIGZsdXNoIG9yIGNvbW1pdF9ub3cgaXMgc2V0LiAgQWxzbyB3b24ndCBiYXRjaCB3aGVuIG90aGVycyBhcmUgd2FpdGluZyBvbiBqX2pvaW5fd2FpdC4KLSoqIAorKioKICoqIE5vdGUsIHdlIGNhbid0IGFsbG93IHRoZSBqb3VybmFsX2VuZCB0byBwcm9jZWVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCB3cml0ZXJzIGluIHRoZSBsb2cuCiAqLwogc3RhdGljIGludCBjaGVja19qb3VybmFsX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKKwkJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAogCQkJICAgICBpbnQgZmxhZ3MpCiB7CiAKQEAgLTM1NjksMTMgKzM1NzgsMTMgQEAKIAlpbnQgY29tbWl0X25vdyA9IGZsYWdzICYgQ09NTUlUX05PVzsKIAlpbnQgd2FpdF9vbl9jb21taXQgPSBmbGFncyAmIFdBSVQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCiAJaWYgKHRoLT50X3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsCi0JCQkgICAgICAgImpvdXJuYWwtMTU3NzogaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZFxuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE1NzciLAorCQkJICAgICAgICJoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkIiwKIAkJCSAgICAgICB0aC0+dF90cmFuc19pZCwgam91cm5hbC0+al90cmFuc19pZCk7CiAJfQogCkBAIC0zNTg0LDcgKzM1OTMsNyBAQAogCQlhdG9taWNfZGVjKCYoam91cm5hbC0+al93Y291bnQpKTsKIAl9CiAKLQkvKiBCVUcsIGRlYWwgd2l0aCBjYXNlIHdoZXJlIGpfbGVuIGlzIDAsIGJ1dCBwZW9wbGUgcHJldmlvdXNseSBmcmVlZCBibG9ja3MgbmVlZCB0byBiZSByZWxlYXNlZCAKKwkvKiBCVUcsIGRlYWwgd2l0aCBjYXNlIHdoZXJlIGpfbGVuIGlzIDAsIGJ1dCBwZW9wbGUgcHJldmlvdXNseSBmcmVlZCBibG9ja3MgbmVlZCB0byBiZSByZWxlYXNlZAogCSAqKiB3aWxsIGJlIGRlYWx0IHdpdGggYnkgbmV4dCB0cmFuc2FjdGlvbiB0aGF0IGFjdHVhbGx5IHdyaXRlcyBzb21ldGhpbmcsIGJ1dCBzaG91bGQgYmUgdGFrZW4KIAkgKiogY2FyZSBvZiBpbiB0aGlzIHRyYW5zCiAJICovCkBAIC0zNTkzLDcgKzM2MDIsNyBAQAogCS8qIGlmIHdjb3VudCA+IDAsIGFuZCB3ZSBhcmUgY2FsbGVkIHRvIHdpdGggZmx1c2ggb3IgY29tbWl0X25vdywKIAkgKiogd2Ugd2FpdCBvbiBqX2pvaW5fd2FpdC4gIFdlIHdpbGwgd2FrZSB1cCB3aGVuIHRoZSBsYXN0IHdyaXRlciBoYXMKIAkgKiogZmluaXNoZWQgdGhlIHRyYW5zYWN0aW9uLCBhbmQgc3RhcnRlZCBpdCBvbiBpdHMgd2F5IHRvIHRoZSBkaXNrLgotCSAqKiBUaGVuLCB3ZSBmbHVzaCB0aGUgY29tbWl0IG9yIGpvdXJuYWwgbGlzdCwgYW5kIGp1c3QgcmV0dXJuIDAgCisJICoqIFRoZW4sIHdlIGZsdXNoIHRoZSBjb21taXQgb3Igam91cm5hbCBsaXN0LCBhbmQganVzdCByZXR1cm4gMAogCSAqKiBiZWNhdXNlIHRoZSByZXN0IG9mIGpvdXJuYWwgZW5kIHdhcyBhbHJlYWR5IGRvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uCiAJICovCiAJaWYgKGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSA+IDApIHsKQEAgLTM2MDgsMzEgKzM2MTcsMzEgQEAKIAkJCWlmIChmbHVzaCkgewogCQkJCWpvdXJuYWwtPmpfbmV4dF9mdWxsX2ZsdXNoID0gMTsKIAkJCX0KLQkJCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCQl1bmxvY2tfam91cm5hbChzYik7CiAKIAkJCS8qIHNsZWVwIHdoaWxlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHN0aWxsIGpfamxvY2tlZCAqLwogCQkJd2hpbGUgKGpvdXJuYWwtPmpfdHJhbnNfaWQgPT0gdHJhbnNfaWQpIHsKIAkJCQlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfamxvY2spKSB7Ci0JCQkJCXF1ZXVlX2xvZ193cml0ZXIocF9zX3NiKTsKKwkJCQkJcXVldWVfbG9nX3dyaXRlcihzYik7CiAJCQkJfSBlbHNlIHsKLQkJCQkJbG9ja19qb3VybmFsKHBfc19zYik7CisJCQkJCWxvY2tfam91cm5hbChzYik7CiAJCQkJCWlmIChqb3VybmFsLT5qX3RyYW5zX2lkID09IHRyYW5zX2lkKSB7CiAJCQkJCQlhdG9taWNfc2V0KCYoam91cm5hbC0+al9qbG9jayksCiAJCQkJCQkJICAgMSk7CiAJCQkJCX0KLQkJCQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJCQkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQkJCX0KIAkJCX0KIAkJCUJVR19PTihqb3VybmFsLT5qX3RyYW5zX2lkID09IHRyYW5zX2lkKTsKIAkJCQogCQkJaWYgKGNvbW1pdF9ub3cKLQkJCSAgICAmJiBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUocF9zX3NiLCB0cmFuc19pZCkKKwkJCSAgICAmJiBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUoc2IsIHRyYW5zX2lkKQogCQkJICAgICYmIHdhaXRfb25fY29tbWl0KSB7Ci0JCQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7CisJCQkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKIAkJCX0KIAkJCXJldHVybiAwOwogCQl9Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNjQ5LDEzICszNjU4LDEzIEBACiAJICAgICYmIGpvdXJuYWwtPmpfbGVuX2FsbG9jIDwgam91cm5hbC0+al9tYXhfYmF0Y2gKIAkgICAgJiYgam91cm5hbC0+al9jbm9kZV9mcmVlID4gKGpvdXJuYWwtPmpfdHJhbnNfbWF4ICogMykpIHsKIAkJam91cm5hbC0+al9iY291bnQrKzsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoam91cm5hbC0+al9zdGFydCA+IFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkgewotCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkgICAgICAgImpvdXJuYWwtMDAzOiBqb3VybmFsX2VuZDogal9zdGFydCAoJWxkKSBpcyB0b28gaGlnaFxuIiwKKwlpZiAoam91cm5hbC0+al9zdGFydCA+IFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSB7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0wMDMiLAorCQkJICAgICAgICJqX3N0YXJ0ICglbGQpIGlzIHRvbyBoaWdoIiwKIAkJCSAgICAgICBqb3VybmFsLT5qX3N0YXJ0KTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0zNjY0LDcgKzM2NzMsNyBAQAogLyoKICoqIERvZXMgYWxsIHRoZSB3b3JrIHRoYXQgbWFrZXMgZGVsZXRpbmcgYmxvY2tzIHNhZmUuCiAqKiB3aGVuIGRlbGV0aW5nIGEgYmxvY2sgbWFyayBCSF9KTmV3LCBqdXN0IHJlbW92ZSBpdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBjbGVhbiBpdCdzIGJ1ZmZlcl9oZWFkIGFuZCBtb3ZlIG9uLgotKiogCisqKgogKiogb3RoZXJ3aXNlOgogKiogc2V0IGEgYml0IGZvciB0aGUgYmxvY2sgaW4gdGhlIGpvdXJuYWwgYml0bWFwLiAgVGhhdCB3aWxsIHByZXZlbnQgaXQgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZm9yIHVuZm9ybWF0dGVkIG5vZGVzCiAqKiBiZWZvcmUgdGhpcyB0cmFuc2FjdGlvbiBoYXMgZmluaXNoZWQuCkBAIC0zNjc2LDE2ICszNjg1LDE2IEBACiAqKiBUaGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBkZWNyZW1lbnRpbmcgYW55IGNvdW50ZXJzIGFuZCBmaWxpbmcgaXQgb24gdGhlIGNsZWFuIGxpc3QuCiAqLwogaW50IGpvdXJuYWxfbWFya19mcmVlZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBiX2Jsb2NrbnJfdCBibG9ja25yKQorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYl9ibG9ja25yX3QgYmxvY2tucikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYiA9IE5VTEw7CiAJaW50IGNsZWFuZWQgPSAwOwogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmxvY2tucik7CisJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKIAlpZiAoY24gJiYgY24tPmJoKSB7CiAJCWJoID0gY24tPmJoOwogCQlnZXRfYmgoYmgpOwpAQCAtMzY5NSwxNSArMzcwNCwxNSBAQAogCQljbGVhcl9idWZmZXJfam91cm5hbF9uZXcoYmgpOwogCQljbGVhcl9wcmVwYXJlZF9iaXRzKGJoKTsKIAkJcmVpc2VyZnNfY2xlYW5fYW5kX2ZpbGVfYnVmZmVyKGJoKTsKLQkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHBfc19zYiwgYmxvY2tuciwgY2xlYW5lZCk7CisJCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzYiwgYmxvY2tuciwgY2xlYW5lZCk7CiAJfSBlbHNlIHsKIAkJLyogc2V0IHRoZSBiaXQgZm9yIHRoaXMgYmxvY2sgaW4gdGhlIGpvdXJuYWwgYml0bWFwIGZvciB0aGlzIHRyYW5zYWN0aW9uICovCiAJCWpiID0gam91cm5hbC0+al9jdXJyZW50X2psLT5qX2xpc3RfYml0bWFwOwogCQlpZiAoIWpiKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqb3VybmFsLTE3MDI6IGpvdXJuYWxfbWFya19mcmVlZCwgam91cm5hbF9saXN0X2JpdG1hcCBpcyBOVUxMXG4iKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0xNzAyIiwKKwkJCQkgICAgICAgImpvdXJuYWxfbGlzdF9iaXRtYXAgaXMgTlVMTCIpOwogCQl9Ci0JCXNldF9iaXRfaW5fbGlzdF9iaXRtYXAocF9zX3NiLCBibG9ja25yLCBqYik7CisJCXNldF9iaXRfaW5fbGlzdF9iaXRtYXAoc2IsIGJsb2NrbnIsIGpiKTsKIAogCQkvKiBOb3RlLCB0aGUgZW50aXJlIHdoaWxlIGxvb3AgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUuICAqLwogCkBAIC0zNzExLDEzICszNzIwLDEzIEBACiAJCQljbGVhcl9wcmVwYXJlZF9iaXRzKGJoKTsKIAkJCXJlaXNlcmZzX2NsZWFuX2FuZF9maWxlX2J1ZmZlcihiaCk7CiAJCX0KLQkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHBfc19zYiwgYmxvY2tuciwgY2xlYW5lZCk7CisJCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzYiwgYmxvY2tuciwgY2xlYW5lZCk7CiAKIAkJLyogZmluZCBhbGwgb2xkZXIgdHJhbnNhY3Rpb25zIHdpdGggdGhpcyBibG9jaywgbWFrZSBzdXJlIHRoZXkgZG9uJ3QgdHJ5IHRvIHdyaXRlIGl0IG91dCAqLwotCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCisJCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAogCQkJCQkgIGJsb2NrbnIpOwogCQl3aGlsZSAoY24pIHsKLQkJCWlmIChwX3Nfc2IgPT0gY24tPnNiICYmIGJsb2NrbnIgPT0gY24tPmJsb2NrbnIpIHsKKwkJCWlmIChzYiA9PSBjbi0+c2IgJiYgYmxvY2tuciA9PSBjbi0+YmxvY2tucikgewogCQkJCXNldF9iaXQoQkxPQ0tfRlJFRUQsICZjbi0+c3RhdGUpOwogCQkJCWlmIChjbi0+YmgpIHsKIAkJCQkJaWYgKCFjbGVhbmVkKSB7CkBAIC0zNzMzLDggKzM3NDIsOSBAQAogCQkJCQkJcHV0X2JoKGNuLT5iaCk7CiAJCQkJCQlpZiAoYXRvbWljX3JlYWQKIAkJCQkJCSAgICAoJihjbi0+YmgtPmJfY291bnQpKSA8IDApIHsKLQkJCQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJCQkJCSAiam91cm5hbC0yMTM4OiBjbi0+YmgtPmJfY291bnQgPCAwIik7CisJCQkJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKKwkJCQkJCQkJICJqb3VybmFsLTIxMzgiLAorCQkJCQkJCQkgImNuLT5iaC0+Yl9jb3VudCA8IDAiKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlpZiAoY24tPmpsaXN0KSB7CS8qIHNpbmNlIHdlIGFyZSBjbGVhcmluZyB0aGUgYmgsIHdlIE1VU1QgZGVjIG5vbnplcm9sZW4gKi8KQEAgLTM4MjQsNyArMzgzNCw3IEBACiAKIGludCByZWlzZXJmc19jb21taXRfZm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBpZCA9IFJFSVNFUkZTX0koaW5vZGUpLT5pX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBpZCA9IFJFSVNFUkZTX0koaW5vZGUpLT5pX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsID0gUkVJU0VSRlNfSShpbm9kZSktPmlfamw7CiAKIAkvKiBmb3IgdGhlIHdob2xlIGlub2RlLCBhc3N1bWUgdW5zZXQgaWQgbWVhbnMgaXQgd2FzCkBAIC0zODM5LDE4ICszODQ5LDE4IEBACiAJcmV0dXJuIF9fY29tbWl0X3RyYW5zX2psKGlub2RlLCBpZCwgamwpOwogfQogCi12b2lkIHJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAordm9pZCByZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7Ci0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwucmVzdG9yZV9wcmVwYXJlZCk7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLnJlc3RvcmVfcHJlcGFyZWQpOwogCWlmICghYmgpIHsKIAkJcmV0dXJuOwogCX0KIAlpZiAodGVzdF9jbGVhcl9idWZmZXJfam91cm5hbF9yZXN0b3JlX2RpcnR5KGJoKSAmJgogCSAgICBidWZmZXJfam91cm5hbF9kaXJ0eShiaCkpIHsKIAkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwotCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwKKwkJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwKIAkJCQkJICBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKIAkJCQkJICBiaC0+Yl9ibG9ja25yKTsKIAkJaWYgKGNuICYmIGNhbl9kaXJ0eShjbikpIHsKQEAgLTM4NjcsMTIgKzM4NzcsMTIgQEAKICoqIGJlIHdyaXR0ZW4gdG8gZGlzayB3aGlsZSB3ZSBhcmUgYWx0ZXJpbmcgaXQuICBTbywgd2UgbXVzdDoKICoqIGNsZWFuIGl0CiAqKiB3YWl0IG9uIGl0LgotKiogCisqKgogKi8KLWludCByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHdhaXQpCiB7Ci0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwucHJlcGFyZSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5wcmVwYXJlKTsKIAogCWlmICghdHJ5bG9ja19idWZmZXIoYmgpKSB7CiAJCWlmICghd2FpdCkKQEAgLTM5MDksNyArMzkxOSw3IEBACiAJfQogfQogCi0vKiAKKy8qCiAqKiBsb25nIGFuZCB1Z2x5LiAgSWYgZmx1c2gsIHdpbGwgbm90IHJldHVybiB1bnRpbCBhbGwgY29tbWl0CiAqKiBibG9ja3MgYW5kIGFsbCByZWFsIGJ1ZmZlcnMgaW4gdGhlIHRyYW5zIGFyZSBvbiBkaXNrLgogKiogSWYgbm9fYXN5bmMsIHdvbid0IHJldHVybiB1bnRpbCBhbGwgY29tbWl0IGJsb2NrcyBhcmUgb24gZGlzay4KQEAgLTM5MjAsMTAgKzM5MzAsMTAgQEAKICoqIGpvdXJuYWwgbGlzdHMsIGV0YyBqdXN0IHdvbid0IGhhcHBlbi4KICovCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAorCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCiAJCQkgIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiwgKm5leHQsICpqbF9jbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqbGFzdF9jbiA9IE5VTEw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYzsKQEAgLTM5MzgsNyArMzk0OCw3IEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsICp0ZW1wX2psOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqc2FmZTsKIAl1bnNpZ25lZCBsb25nIGppbmRleDsKLQl1bnNpZ25lZCBsb25nIGNvbW1pdF90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgY29tbWl0X3RyYW5zX2lkOwogCWludCB0cmFuc19oYWxmOwogCiAJQlVHX09OKHRoLT50X3JlZmNvdW50ID4gMSk7CkBAIC0zOTQ2LDIxICszOTU2LDIxIEBACiAKIAkvKiBwcm90ZWN0IGZsdXNoX29sZGVyX2NvbW1pdHMgZnJvbSBkb2luZyBtaXN0YWtlcyBpZiB0aGUKICAgICAgICAgICAgdHJhbnNhY3Rpb24gSUQgY291bnRlciBnZXRzIG92ZXJmbG93ZWQuICAqLwotCWlmICh0aC0+dF90cmFuc19pZCA9PSB+MFVMKQorCWlmICh0aC0+dF90cmFuc19pZCA9PSB+MFUpCiAJCWZsYWdzIHw9IEZMVVNIX0FMTCB8IENPTU1JVF9OT1cgfCBXQUlUOwogCWZsdXNoID0gZmxhZ3MgJiBGTFVTSF9BTEw7CiAJd2FpdF9vbl9jb21taXQgPSBmbGFncyAmIFdBSVQ7CiAKIAlwdXRfZnNfZXhjbCgpOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRoLT50X2hhbmRsZV9zYXZlOwotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiam91cm5hbCBlbmQiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiam91cm5hbCBlbmQiKTsKIAlpZiAoam91cm5hbC0+al9sZW4gPT0gMCkgewotCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkgICAgIDEpOwotCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7CisJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CiAJfQogCi0JbG9ja19qb3VybmFsKHBfc19zYik7CisJbG9ja19qb3VybmFsKHNiKTsKIAlpZiAoam91cm5hbC0+al9uZXh0X2Z1bGxfZmx1c2gpIHsKIAkJZmxhZ3MgfD0gRkxVU0hfQUxMOwogCQlmbHVzaCA9IDE7CkBAIC0zOTcwLDEzICszOTgwLDEzIEBACiAJCXdhaXRfb25fY29tbWl0ID0gMTsKIAl9CiAKLQkvKiBjaGVja19qb3VybmFsX2VuZCBsb2NrcyB0aGUgam91cm5hbCwgYW5kIHVubG9ja3MgaWYgaXQgZG9lcyBub3QgcmV0dXJuIDEgCisJLyogY2hlY2tfam91cm5hbF9lbmQgbG9ja3MgdGhlIGpvdXJuYWwsIGFuZCB1bmxvY2tzIGlmIGl0IGRvZXMgbm90IHJldHVybiAxCiAJICoqIGl0IHRlbGxzIHVzIGlmIHdlIHNob3VsZCBjb250aW51ZSB3aXRoIHRoZSBqb3VybmFsX2VuZCwgb3IganVzdCByZXR1cm4KIAkgKi8KLQlpZiAoIWNoZWNrX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIGZsYWdzKSkgewotCQlwX3Nfc2ItPnNfZGlydCA9IDE7Ci0JCXdha2VfcXVldWVkX3dyaXRlcnMocF9zX3NiKTsKLQkJcmVpc2VyZnNfYXN5bmNfcHJvZ3Jlc3Nfd2FpdChwX3Nfc2IpOworCWlmICghY2hlY2tfam91cm5hbF9lbmQodGgsIHNiLCBuYmxvY2tzLCBmbGFncykpIHsKKwkJc2ItPnNfZGlydCA9IDE7CisJCXdha2VfcXVldWVkX3dyaXRlcnMoc2IpOworCQlyZWlzZXJmc19hc3luY19wcm9ncmVzc193YWl0KHNiKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MDA1LDggKzQwMTUsOCBAQAogCiAJLyogc2V0dXAgZGVzY3JpcHRpb24gYmxvY2sgKi8KIAlkX2JoID0KLQkgICAgam91cm5hbF9nZXRibGsocF9zX3NiLAotCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCSAgICBqb3VybmFsX2dldGJsayhzYiwKKwkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJICAgam91cm5hbC0+al9zdGFydCk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShkX2JoKTsKIAlkZXNjID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKikoZF9iaCktPmJfZGF0YTsKQEAgLTQwMTUsOSArNDAyNSw5IEBACiAJc2V0X2Rlc2NfdHJhbnNfaWQoZGVzYywgam91cm5hbC0+al90cmFuc19pZCk7CiAKIAkvKiBzZXR1cCBjb21taXQgYmxvY2suICBEb24ndCB3cml0ZSAoa2VlcCBpdCBjbGVhbiB0b28pIHRoaXMgb25lIHVudGlsIGFmdGVyIGV2ZXJ5b25lIGVsc2UgaXMgd3JpdHRlbiAqLwotCWNfYmggPSBqb3VybmFsX2dldGJsayhwX3Nfc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwljX2JoID0gam91cm5hbF9nZXRibGsoc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJICAgICAgKChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al9sZW4gKwotCQkJCTEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJMSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7CiAJbWVtc2V0KGNfYmgtPmJfZGF0YSwgMCwgY19iaC0+Yl9zaXplKTsKIAlzZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCwgam91cm5hbC0+al90cmFuc19pZCk7CkBAIC00MDUwLDEzICs0MDYwLDEzIEBACiAJICoqICBmb3IgZWFjaCByZWFsIGJsb2NrLCBhZGQgaXQgdG8gdGhlIGpvdXJuYWwgbGlzdCBoYXNoLAogCSAqKiBjb3B5IGludG8gcmVhbCBibG9jayBpbmRleCBhcnJheSBpbiB0aGUgY29tbWl0IG9yIGRlc2MgYmxvY2sKIAkgKi8KLQl0cmFuc19oYWxmID0gam91cm5hbF90cmFuc19oYWxmKHBfc19zYi0+c19ibG9ja3NpemUpOworCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYoc2ItPnNfYmxvY2tzaXplKTsKIAlmb3IgKGkgPSAwLCBjbiA9IGpvdXJuYWwtPmpfZmlyc3Q7IGNuOyBjbiA9IGNuLT5uZXh0LCBpKyspIHsKIAkJaWYgKGJ1ZmZlcl9qb3VybmFsZWQoY24tPmJoKSkgewotCQkJamxfY24gPSBnZXRfY25vZGUocF9zX3NiKTsKKwkJCWpsX2NuID0gZ2V0X2Nub2RlKHNiKTsKIAkJCWlmICghamxfY24pIHsKLQkJCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJCSAgICAgICAiam91cm5hbC0xNjc2LCBnZXRfY25vZGUgcmV0dXJuZWQgTlVMTFxuIik7CisJCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTE2NzYiLAorCQkJCQkgICAgICAgImdldF9jbm9kZSByZXR1cm5lZCBOVUxMIik7CiAJCQl9CiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJamwtPmpfcmVhbGJsb2NrID0gamxfY247CkBAIC00MDY3LDE4ICs0MDc3LDE5IEBACiAJCQkJbGFzdF9jbi0+bmV4dCA9IGpsX2NuOwogCQkJfQogCQkJbGFzdF9jbiA9IGpsX2NuOwotCQkJLyogbWFrZSBzdXJlIHRoZSBibG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGxvZyBpcyBub3QgYSBibG9jayAKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgYmxvY2sgd2UgYXJlIHRyeWluZyB0byBsb2cgaXMgbm90IGEgYmxvY2sKIAkJCSAgIG9mIGpvdXJuYWwgb3IgcmVzZXJ2ZWQgYXJlYSAqLwogCiAJCQlpZiAoaXNfYmxvY2tfaW5fbG9nX29yX3Jlc2VydmVkX2FyZWEKLQkJCSAgICAocF9zX3NiLCBjbi0+YmgtPmJfYmxvY2tucikpIHsKLQkJCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJCSAgICAgICAiam91cm5hbC0yMzMyOiBUcnlpbmcgdG8gbG9nIGJsb2NrICVsdSwgd2hpY2ggaXMgYSBsb2cgYmxvY2tcbiIsCisJCQkgICAgKHNiLCBjbi0+YmgtPmJfYmxvY2tucikpIHsKKwkJCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMjMzMiIsCisJCQkJCSAgICAgICAiVHJ5aW5nIHRvIGxvZyBibG9jayAlbHUsICIKKwkJCQkJICAgICAgICJ3aGljaCBpcyBhIGxvZyBibG9jayIsCiAJCQkJCSAgICAgICBjbi0+YmgtPmJfYmxvY2tucik7CiAJCQl9CiAJCQlqbF9jbi0+YmxvY2tuciA9IGNuLT5iaC0+Yl9ibG9ja25yOwogCQkJamxfY24tPnN0YXRlID0gMDsKLQkJCWpsX2NuLT5zYiA9IHBfc19zYjsKKwkJCWpsX2NuLT5zYiA9IHNiOwogCQkJamxfY24tPmJoID0gY24tPmJoOwogCQkJamxfY24tPmpsaXN0ID0gamw7CiAJCQlpbnNlcnRfam91cm5hbF9oYXNoKGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCBqbF9jbik7CkBAIC00MTE5LDExICs0MTMwLDExIEBACiAJCQljaGFyICphZGRyOwogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQl0bXBfYmggPQotCQkJICAgIGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwKLQkJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkJICAgIGpvdXJuYWxfZ2V0YmxrKHNiLAorCQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkJICAgKChjdXJfd3JpdGVfc3RhcnQgKwogCQkJCQkgICAgIGppbmRleCkgJQotCQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZSh0bXBfYmgpOwogCQkJcGFnZSA9IGNuLT5iaC0+Yl9wYWdlOwogCQkJYWRkciA9IGttYXAocGFnZSk7CkBAIC00MTM3LDEyICs0MTQ4LDEzIEBACiAJCQljbGVhcl9idWZmZXJfam91cm5hbGVkKGNuLT5iaCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBKRGlydHkgY2xlYXJlZCBzb21ldGltZSBkdXJpbmcgdHJhbnNhY3Rpb24uICBkb24ndCBsb2cgdGhpcyBvbmUgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMjA0ODogZG9fam91cm5hbF9lbmQ6IEJBRCwgYnVmZmVyIGluIGpvdXJuYWwgaGFzaCwgYnV0IG5vdCBKRGlydHkhIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0yMDQ4IiwKKwkJCQkJICJCQUQsIGJ1ZmZlciBpbiBqb3VybmFsIGhhc2gsICIKKwkJCQkJICJidXQgbm90IEpEaXJ0eSEiKTsKIAkJCWJyZWxzZShjbi0+YmgpOwogCQl9CiAJCW5leHQgPSBjbi0+bmV4dDsKLQkJZnJlZV9jbm9kZShwX3Nfc2IsIGNuKTsKKwkJZnJlZV9jbm9kZShzYiwgY24pOwogCQljbiA9IG5leHQ7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KQEAgLTQxNTIsNyArNDE2NCw3IEBACiAJICoqIHNvIHdlIGRpcnR5L3JlbHNlIGNfYmggaW4gZmx1c2hfY29tbWl0X2xpc3QsIHdpdGggY29tbWl0X2xlZnQgPD0gMS4KIAkgKi8KIAotCWpvdXJuYWwtPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChwX3Nfc2IpOworCWpvdXJuYWwtPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChzYik7CiAKIAkvKiBub3cgaXQgaXMgc2FmZSB0byBpbnNlcnQgdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgbWFpbiBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmamwtPmpfbGlzdCwgJmpvdXJuYWwtPmpfam91cm5hbF9saXN0KTsKQEAgLTQxNjMsNyArNDE3NSw3IEBACiAJb2xkX3N0YXJ0ID0gam91cm5hbC0+al9zdGFydDsKIAlqb3VybmFsLT5qX3N0YXJ0ID0KIAkgICAgKGpvdXJuYWwtPmpfc3RhcnQgKyBqb3VybmFsLT5qX2xlbiArCi0JICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKTsKKwkgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYik7CiAJYXRvbWljX3NldCgmKGpvdXJuYWwtPmpfd2NvdW50KSwgMCk7CiAJam91cm5hbC0+al9iY291bnQgPSAwOwogCWpvdXJuYWwtPmpfbGFzdCA9IE5VTEw7CkBAIC00MTc4LDcgKzQxOTAsNyBAQAogCWpvdXJuYWwtPmpfbGVuX2FsbG9jID0gMDsKIAlqb3VybmFsLT5qX25leHRfZnVsbF9mbHVzaCA9IDA7CiAJam91cm5hbC0+al9uZXh0X2FzeW5jX2ZsdXNoID0gMDsKLQlpbml0X2pvdXJuYWxfaGFzaChwX3Nfc2IpOworCWluaXRfam91cm5hbF9oYXNoKHNiKTsKIAogCS8vIG1ha2Ugc3VyZSByZWlzZXJmc19hZGRfamggc2VlcyB0aGUgbmV3IGN1cnJlbnRfamwgYmVmb3JlIHdlCiAJLy8gd3JpdGUgb3V0IHRoZSB0YWlscwpAQCAtNDIwNywxNCArNDIxOSwxNCBAQAogCSAqKiBxdWV1ZSBkb24ndCB3YWl0IGZvciB0aGlzIHByb2MgdG8gZmx1c2ggam91cm5hbCBsaXN0cyBhbmQgc3VjaC4KIAkgKi8KIAlpZiAoZmx1c2gpIHsKLQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7Ci0JCWZsdXNoX2pvdXJuYWxfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKKwkJZmx1c2hfam91cm5hbF9saXN0KHNiLCBqbCwgMSk7CiAJfSBlbHNlIGlmICghKGpsLT5qX3N0YXRlICYgTElTVF9DT01NSVRfUEVORElORykpCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhjb21taXRfd3EsICZqb3VybmFsLT5qX3dvcmssIEhaIC8gMTApOwogCi0JLyogaWYgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIGFueSBjaGFuY2Ugb2Ygd3JhcHBpbmcsIGZsdXNoIAotCSAqKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBnZXQgb3ZlcndyaXR0ZW4uICBJZiBhbnkgam91cm5hbCBsaXN0cyBhcmUgdmVyeSAKLQkgKiogb2xkIGZsdXNoIHRoZW0gYXMgd2VsbC4gIAorCS8qIGlmIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyBhbnkgY2hhbmNlIG9mIHdyYXBwaW5nLCBmbHVzaAorCSAqKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBnZXQgb3ZlcndyaXR0ZW4uICBJZiBhbnkgam91cm5hbCBsaXN0cyBhcmUgdmVyeQorCSAqKiBvbGQgZmx1c2ggdGhlbSBhcyB3ZWxsLgogCSAqLwogICAgICAgZmlyc3Rfamw6CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBzYWZlLCAmam91cm5hbC0+al9qb3VybmFsX2xpc3QpIHsKQEAgLTQyMjIsMTEgKzQyMzQsMTEgQEAKIAkJaWYgKGpvdXJuYWwtPmpfc3RhcnQgPD0gdGVtcF9qbC0+al9zdGFydCkgewogCQkJaWYgKChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al90cmFuc19tYXggKyAxKSA+PQogCQkJICAgIHRlbXBfamwtPmpfc3RhcnQpIHsKLQkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMocF9zX3NiLCB0ZW1wX2psKTsKKwkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMoc2IsIHRlbXBfamwpOwogCQkJCWdvdG8gZmlyc3Rfamw7CiAJCQl9IGVsc2UgaWYgKChqb3VybmFsLT5qX3N0YXJ0ICsKIAkJCQkgICAgam91cm5hbC0+al90cmFuc19tYXggKyAxKSA8Ci0JCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSB7CisJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpIHsKIAkJCQkvKiBpZiB3ZSBkb24ndCBjcm9zcyBpbnRvIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGFuZCB3ZSBkb24ndAogCQkJCSAqIHdyYXAsIHRoZXJlIGlzIG5vIHdheSB3ZSBjYW4gb3ZlcmxhcCBhbnkgbGF0ZXIgdHJhbnNhY3Rpb25zCiAJCQkJICogYnJlYWsgbm93CkBAIC00MjM1LDExICs0MjQ3LDExIEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoKGpvdXJuYWwtPmpfc3RhcnQgKwogCQkJICAgIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgPgotCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSB7CisJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkgewogCQkJaWYgKCgoam91cm5hbC0+al9zdGFydCArIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgJQotCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpID49CisJCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSA+PQogCQkJICAgIHRlbXBfamwtPmpfc3RhcnQpIHsKLQkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMocF9zX3NiLCB0ZW1wX2psKTsKKwkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMoc2IsIHRlbXBfamwpOwogCQkJCWdvdG8gZmlyc3Rfamw7CiAJCQl9IGVsc2UgewogCQkJCS8qIHdlIGRvbid0IG92ZXJsYXAgYW55dGhpbmcgZnJvbSBvdXQgc3RhcnQgdG8gdGhlIGVuZCBvZiB0aGUKQEAgLTQyNTAsNDYgKzQyNjIsNDcgQEAKIAkJCX0KIAkJfQogCX0KLQlmbHVzaF9vbGRfam91cm5hbF9saXN0cyhwX3Nfc2IpOworCWZsdXNoX29sZF9qb3VybmFsX2xpc3RzKHNiKTsKIAogCWpvdXJuYWwtPmpfY3VycmVudF9qbC0+al9saXN0X2JpdG1hcCA9Ci0JICAgIGdldF9saXN0X2JpdG1hcChwX3Nfc2IsIGpvdXJuYWwtPmpfY3VycmVudF9qbCk7CisJICAgIGdldF9saXN0X2JpdG1hcChzYiwgam91cm5hbC0+al9jdXJyZW50X2psKTsKIAogCWlmICghKGpvdXJuYWwtPmpfY3VycmVudF9qbC0+al9saXN0X2JpdG1hcCkpIHsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJICAgICAgICJqb3VybmFsLTE5OTY6IGRvX2pvdXJuYWxfZW5kLCBjb3VsZCBub3QgZ2V0IGEgbGlzdCBiaXRtYXBcbiIpOworCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMTk5NiIsCisJCQkgICAgICAgImNvdWxkIG5vdCBnZXQgYSBsaXN0IGJpdG1hcCIpOwogCX0KIAogCWF0b21pY19zZXQoJihqb3VybmFsLT5qX2psb2NrKSwgMCk7Ci0JdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwl1bmxvY2tfam91cm5hbChzYik7CiAJLyogd2FrZSB1cCBhbnkgYm9keSB3YWl0aW5nIHRvIGpvaW4uICovCiAJY2xlYXJfYml0KEpfV1JJVEVSU19RVUVVRUQsICZqb3VybmFsLT5qX3N0YXRlKTsKIAl3YWtlX3VwKCYoam91cm5hbC0+al9qb2luX3dhaXQpKTsKIAogCWlmICghZmx1c2ggJiYgd2FpdF9vbl9jb21taXQgJiYKLQkgICAgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHBfc19zYiwgY29tbWl0X3RyYW5zX2lkKSkgewotCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkgICAgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHNiLCBjb21taXRfdHJhbnNfaWQpKSB7CisJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CiAJfQogICAgICAgb3V0OgotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiam91cm5hbCBlbmQyIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImpvdXJuYWwgZW5kMiIpOwogCiAJbWVtc2V0KHRoLCAwLCBzaXplb2YoKnRoKSk7CiAJLyogUmUtc2V0IHRoLT50X3N1cGVyLCBzbyB3ZSBjYW4gcHJvcGVybHkga2VlcCB0cmFjayBvZiBob3cgbWFueQogCSAqIHBlcnNpc3RlbnQgdHJhbnNhY3Rpb25zIHRoZXJlIGFyZS4gV2UgbmVlZCB0byBkbyB0aGlzIHNvIGlmIHRoaXMKIAkgKiBjYWxsIGlzIHBhcnQgb2YgYSBmYWlsZWQgcmVzdGFydF90cmFuc2FjdGlvbiwgd2UgY2FuIGZyZWUgaXQgbGF0ZXIgKi8KLQl0aC0+dF9zdXBlciA9IHBfc19zYjsKKwl0aC0+dF9zdXBlciA9IHNiOwogCiAJcmV0dXJuIGpvdXJuYWwtPmpfZXJybm87CiB9CiAKLXN0YXRpYyB2b2lkIF9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9oYXJkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCisvKiBTZW5kIHRoZSBmaWxlIHN5c3RlbSByZWFkIG9ubHkgYW5kIHJlZnVzZSBuZXcgdHJhbnNhY3Rpb25zICovCit2b2lkIHJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJaWYgKHRlc3RfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUzogQWJvcnRpbmcgam91cm5hbCBmb3IgZmlsZXN5c3RlbSBvbiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpKTsKKwlpZiAoIWpvdXJuYWwtPmpfZXJybm8pCisJCWpvdXJuYWwtPmpfZXJybm8gPSBlcnJubzsKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAlzZXRfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpOwpAQCAtNDI5OSwxOSArNDMxMiwzIEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX19yZWlzZXJmc19qb3VybmFsX2Fib3J0X3NvZnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKQotewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7Ci0JaWYgKHRlc3RfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWpvdXJuYWwtPmpfZXJybm8pCi0JCWpvdXJuYWwtPmpfZXJybm8gPSBlcnJubzsKLQotCV9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9oYXJkKHNiKTsKLX0KLQotdm9pZCByZWlzZXJmc19qb3VybmFsX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubykKLXsKLQlfX3JlaXNlcmZzX2pvdXJuYWxfYWJvcnRfc29mdChzYiwgZXJybm8pOwotfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYyBiL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKaW5kZXggNmRlMDYwYS4uMzgxNzUwYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYworKysgYi9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlpdGVtX251bV9pbl9kZXN0ID0KIAkgICAgKGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgPyAoQl9OUl9JVEVNUyhkZXN0KSAtIDEpIDogMDsKIAotCWxlYWZfcGFzdGVfZW50cmllcyhkZXN0X2JpLT5iaV9iaCwgaXRlbV9udW1faW5fZGVzdCwKKwlsZWFmX3Bhc3RlX2VudHJpZXMoZGVzdF9iaSwgaXRlbV9udW1faW5fZGVzdCwKIAkJCSAgIChsYXN0X2ZpcnN0ID09CiAJCQkgICAgRklSU1RfVE9fTEFTVCkgPyBJX0VOVFJZX0NPVU5UKEJfTl9QSVRFTV9IRUFEKGRlc3QsCiAJCQkJCQkJCQkgIGl0ZW1fbnVtX2luX2Rlc3QpKQpAQCAtMTE5LDggKzExOSw4IEBACiAJCQkgICBERUhfU0laRSAqIGNvcHlfY291bnQgKyBjb3B5X3JlY29yZHNfbGVuKTsKIH0KIAotLyogQ29weSB0aGUgZmlyc3QgKGlmIGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgb3IgbGFzdCAobGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUKSBpdGVtIG9yIAotICAgcGFydCBvZiBpdCBvciBub3RoaW5nIChzZWUgdGhlIHJldHVybiAwIGJlbG93KSBmcm9tIFNPVVJDRSB0byB0aGUgZW5kIAorLyogQ29weSB0aGUgZmlyc3QgKGlmIGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgb3IgbGFzdCAobGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUKSBpdGVtIG9yCisgICBwYXJ0IG9mIGl0IG9yIG5vdGhpbmcgKHNlZSB0aGUgcmV0dXJuIDAgYmVsb3cpIGZyb20gU09VUkNFIHRvIHRoZSBlbmQKICAgIChpZiBsYXN0X2ZpcnN0KSBvciBiZWdpbm5pbmcgKCFsYXN0X2ZpcnN0KSBvZiB0aGUgREVTVCAqLwogLyogcmV0dXJucyAxIGlmIGFueXRoaW5nIHdhcyBjb3BpZWQsIGVsc2UgMCAqLwogc3RhdGljIGludCBsZWFmX2NvcHlfYm91bmRhcnlfaXRlbShzdHJ1Y3QgYnVmZmVyX2luZm8gKmRlc3RfYmksCkBAIC0xNjgsMTAgKzE2OCwxMSBAQAogCQkJaWYgKGJ5dGVzX29yX2VudHJpZXMgPT0gaWhfaXRlbV9sZW4oaWgpCiAJCQkgICAgJiYgaXNfaW5kaXJlY3RfbGVfaWgoaWgpKQogCQkJCWlmIChnZXRfaWhfZnJlZV9zcGFjZShpaCkpCi0JCQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJCQkgICAgICAgInZzLTEwMDIwOiBsZWFmX2NvcHlfYm91bmRhcnlfaXRlbTogIgotCQkJCQkJICAgICAgICJsYXN0IHVuZm9ybWF0dGVkIG5vZGUgbXVzdCBiZSBmaWxsZWQgZW50aXJlbHkgKCVoKSIsCi0JCQkJCQkgICAgICAgaWgpOworCQkJCQlyZWlzZXJmc19wYW5pYyhzYl9mcm9tX2JpKGRlc3RfYmkpLAorCQkJCQkJICAgICAgICJ2cy0xMDAyMCIsCisJCQkJCQkgICAgICAgImxhc3QgdW5mb3JtYXR0ZWQgbm9kZSAiCisJCQkJCQkgICAgICAgIm11c3QgYmUgZmlsbGVkICIKKwkJCQkJCSAgICAgICAiZW50aXJlbHkgKCVoKSIsIGloKTsKIAkJfQogI2VuZGlmCiAKQEAgLTM5NSw3ICszOTYsNyBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBpdGVtX2hlYWQgbl9paDsKIAotCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgZW5kIG9mIHRoZSBERVNUIAorCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgZW5kIG9mIHRoZSBERVNUCiAJCQkgICBwYXJ0IGRlZmluZWQgYnkgJ2NweV9ieXRlcyc7IGNyZWF0ZSBuZXcgaXRlbSBoZWFkZXI7IGNoYW5nZSBvbGQgaXRlbV9oZWFkZXIgKD8/Pz8pOwogCQkJICAgbl9paCA9IG5ldyBpdGVtX2hlYWRlcjsKIAkJCSAqLwpAQCAtNDI1LDcgKzQyNiw3IEBACiAJCWVsc2UgewogCQkJc3RydWN0IGl0ZW1faGVhZCBuX2loOwogCi0JCQkvKiBjb3B5IHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGl0ZW0gbnVtYmVyICdpdGVtX251bScgb2YgU09VUkNFIHRvIHRoZSBiZWdpbiBvZiB0aGUgREVTVCAKKwkJCS8qIGNvcHkgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgaXRlbSBudW1iZXIgJ2l0ZW1fbnVtJyBvZiBTT1VSQ0UgdG8gdGhlIGJlZ2luIG9mIHRoZSBERVNUCiAJCQkgICBwYXJ0IGRlZmluZWQgYnkgJ2NweV9ieXRlcyc7IGNyZWF0ZSBuZXcgaXRlbSBoZWFkZXI7CiAJCQkgICBuX2loID0gbmV3IGl0ZW1faGVhZGVyOwogCQkJICovCkBAIC02MjIsOSArNjIzLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy0xMDI1MDogbGVhZl9kZWZpbmVfZGVzdF9zcmNfaW5mb3M6IHNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwKLQkJCSAgICAgICBzaGlmdF9tb2RlKTsKKwkJcmVpc2VyZnNfcGFuaWMoc2JfZnJvbV9iaShzcmNfYmkpLCAidnMtMTAyNTAiLAorCQkJICAgICAgICJzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsIHNoaWZ0X21vZGUpOwogCX0KIAlSRkFMU0UoIXNyY19iaS0+YmlfYmggfHwgIWRlc3RfYmktPmJpX2JoLAogCSAgICAgICAidnMtMTAyNjA6IG1vZGU9PSVkLCBzb3VyY2UgKCVwKSBvciBkZXN0ICglcCkgYnVmZmVyIGlzIGluaXRpYWxpemVkIGluY29ycmVjdGx5IiwKQEAgLTY3NCw5ICs2NzQsOSBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQkJaWYgKHRiLT50Yl9tb2RlID09IE1fUEFTVEUgfHwgdGItPnRiX21vZGUgPT0gTV9JTlNFUlQpIHsKIAkJCQlwcmludF9jdXJfdGIoInZzLTEwMjc1Iik7Ci0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgInZzLTEwMjc1OiBsZWFmX3NoaWZ0X2xlZnQ6IGJhbGFuY2UgY29uZGl0aW9uIGNvcnJ1cHRlZCAoJWMpIiwKLQkJCQkJICAgICAgIHRiLT50Yl9tb2RlKTsKKwkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMDI3NSIsCisJCQkJCSAgICAgICAiYmFsYW5jZSBjb25kaXRpb24gY29ycnVwdGVkICIKKwkJCQkJICAgICAgICIoJWMpIiwgdGItPnRiX21vZGUpOwogCQkJfQogI2VuZGlmCiAKQEAgLTcyNCw3ICs3MjQsNyBAQAogc3RhdGljIHZvaWQgbGVhZl9kZWxldGVfaXRlbXNfZW50aXJlbHkoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKIAkJCQkgICAgICAgaW50IGZpcnN0LCBpbnQgZGVsX251bSk7CiAvKiAgSWYgZGVsX2J5dGVzID09IC0xLCBzdGFydGluZyBmcm9tIHBvc2l0aW9uICdmaXJzdCcgZGVsZXRlIGRlbF9udW0gaXRlbXMgaW4gd2hvbGUgaW4gYnVmZmVyIENVUi4KLSAgICBJZiBub3QuIAorICAgIElmIG5vdC4KICAgICBJZiBsYXN0X2ZpcnN0ID09IDAuIFN0YXJ0aW5nIGZyb20gcG9zaXRpb24gJ2ZpcnN0JyBkZWxldGUgZGVsX251bS0xIGl0ZW1zIGluIHdob2xlLiBEZWxldGUgcGFydCBvZiBib2R5IG9mCiAgICAgdGhlIGZpcnN0IGl0ZW0uIFBhcnQgZGVmaW5lZCBieSBkZWxfYnl0ZXMuIERvbid0IGRlbGV0ZSBmaXJzdCBpdGVtIGhlYWRlcgogICAgIElmIGxhc3RfZmlyc3QgPT0gMS4gU3RhcnRpbmcgZnJvbSBwb3NpdGlvbiAnZmlyc3QrMScgZGVsZXRlIGRlbF9udW0tMSBpdGVtcyBpbiB3aG9sZS4gRGVsZXRlIHBhcnQgb2YgYm9keSBvZgpAQCAtNzgzLDcgKzc4Myw3IEBACiAJCQkJLyogbGVuID0gYm9keSBsZW4gb2YgaXRlbSAqLwogCQkJCWxlbiA9IGloX2l0ZW1fbGVuKGloKTsKIAotCQkJLyogZGVsZXRlIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIGJoIAorCQkJLyogZGVsZXRlIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIGJoCiAJCQkgICBkbyBub3QgZGVsZXRlIGl0ZW0gaGVhZGVyCiAJCQkgKi8KIAkJCWxlYWZfY3V0X2Zyb21fYnVmZmVyKGN1cl9iaSwgQl9OUl9JVEVNUyhiaCkgLSAxLApAQCAtODY1LDcgKzg2NSw3IEBACiAJfQogfQogCi0vKiBwYXN0ZSBwYXN0ZV9zaXplIGJ5dGVzIHRvIGFmZmVjdGVkX2l0ZW1fbnVtLXRoIGl0ZW0uIAorLyogcGFzdGUgcGFzdGVfc2l6ZSBieXRlcyB0byBhZmZlY3RlZF9pdGVtX251bS10aCBpdGVtLgogICAgV2hlbiBpdGVtIGlzIGEgZGlyZWN0b3J5LCB0aGlzIG9ubHkgcHJlcGFyZSBzcGFjZSBmb3IgbmV3IGVudHJpZXMgKi8KIHZvaWQgbGVhZl9wYXN0ZV9pbl9idWZmZXIoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwgaW50IGFmZmVjdGVkX2l0ZW1fbnVtLAogCQkJICBpbnQgcG9zX2luX2l0ZW0sIGludCBwYXN0ZV9zaXplLApAQCAtODg5LDkgKzg4OSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJaWYgKHplcm9zX251bWJlciA+IHBhc3RlX3NpemUpIHsKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7CisJCWlmIChiaSAmJiBiaS0+dGIpCisJCQlzYiA9IGJpLT50Yi0+dGJfc2I7CiAJCXByaW50X2N1cl90YigiMTAxNzciKTsKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtMTAxNzc6IGxlYWZfcGFzdGVfaW5fYnVmZmVyOiBlcm8gbnVtYmVyID09ICVkLCBwYXN0ZV9zaXplID09ICVkIiwKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy0xMDE3NyIsCisJCQkgICAgICAgInplcm9zX251bWJlciA9PSAlZCwgcGFzdGVfc2l6ZSA9PSAlZCIsCiAJCQkgICAgICAgemVyb3NfbnVtYmVyLCBwYXN0ZV9zaXplKTsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCkBAIC0xMDE5LDcgKzEwMjIsNyBAQAogLyogIHdoZW4gY3V0IGl0ZW0gaXMgcGFydCBvZiByZWd1bGFyIGZpbGUKICAgICAgICAgcG9zX2luX2l0ZW0gLSBmaXJzdCBieXRlIHRoYXQgbXVzdCBiZSBjdXQKICAgICAgICAgY3V0X3NpemUgLSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgY3V0IGJlZ2lubmluZyBmcm9tIHBvc19pbl9pdGVtCi0gCisKICAgIHdoZW4gY3V0IGl0ZW0gaXMgcGFydCBvZiBkaXJlY3RvcnkKICAgICAgICAgcG9zX2luX2l0ZW0gLSBudW1iZXIgb2YgZmlyc3QgZGVsZXRlZCBlbnRyeQogICAgICAgICBjdXRfc2l6ZSAtIGNvdW50IG9mIGRlbGV0ZWQgZW50cmllcwpAQCAtMTE5MSw3ICsxMTk0LDcgQEAKIH0KIAogLyogcGFzdGUgbmV3X2VudHJ5X2NvdW50IGVudHJpZXMgKG5ld19kZWhzLCByZWNvcmRzKSBpbnRvIHBvc2l0aW9uIGJlZm9yZSB0byBpdGVtX251bS10aCBpdGVtICovCi12b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAordm9pZCBsZWFmX3Bhc3RlX2VudHJpZXMoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKIAkJCWludCBpdGVtX251bSwKIAkJCWludCBiZWZvcmUsCiAJCQlpbnQgbmV3X2VudHJ5X2NvdW50LApAQCAtMTIwMyw2ICsxMjA2LDcgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqZGVoOwogCWNoYXIgKmluc2VydF9wb2ludDsKIAlpbnQgaSwgb2xkX2VudHJ5X251bTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gYmktPmJpX2JoOwogCiAJaWYgKG5ld19lbnRyeV9jb3VudCA9PSAwKQogCQlyZXR1cm47CkBAIC0xMjcxLDcgKzEyNzUsNyBAQAogCS8qIGNoYW5nZSBpdGVtIGtleSBpZiBuZWNlc3NhcnkgKHdoZW4gd2UgcGFzdGUgYmVmb3JlIDAtdGggZW50cnkgKi8KIAlpZiAoIWJlZm9yZSkgewogCQlzZXRfbGVfaWhfa19vZmZzZXQoaWgsIGRlaF9vZmZzZXQobmV3X2RlaHMpKTsKLS8qICAgICAgbWVtY3B5ICgmaWgtPmloX2tleS5rX29mZnNldCwgCisvKiAgICAgIG1lbWNweSAoJmloLT5paF9rZXkua19vZmZzZXQsCiAJCSAgICAgICAmbmV3X2RlaHMtPmRlaF9vZmZzZXQsIFNIT1JUX0tFWV9TSVpFKTsqLwogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKQEAgLTEyODcsMTMgKzEyOTEsMTcgQEAKIAkJCXByZXYgPSAoaSAhPSAwKSA/IGRlaF9sb2NhdGlvbigmKGRlaFtpIC0gMV0pKSA6IDA7CiAKIAkJCWlmIChwcmV2ICYmIHByZXYgPD0gZGVoX2xvY2F0aW9uKCYoZGVoW2ldKSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkJICJ2cy0xMDI0MDogbGVhZl9wYXN0ZV9lbnRyaWVzOiBkaXJlY3RvcnkgaXRlbSAoJWgpIGNvcnJ1cHRlZCAocHJldiAlYSwgY3VyKCVkKSAlYSkiLAotCQkJCQkJIGloLCBkZWggKyBpIC0gMSwgaSwgZGVoICsgaSk7CisJCQkJcmVpc2VyZnNfZXJyb3Ioc2JfZnJvbV9iaShiaSksICJ2cy0xMDI0MCIsCisJCQkJCSAgICAgICAiZGlyZWN0b3J5IGl0ZW0gKCVoKSAiCisJCQkJCSAgICAgICAiY29ycnVwdGVkIChwcmV2ICVhLCAiCisJCQkJCSAgICAgICAiY3VyKCVkKSAlYSkiLAorCQkJCQkgICAgICAgaWgsIGRlaCArIGkgLSAxLCBpLCBkZWggKyBpKTsKIAkJCWlmIChuZXh0ICYmIG5leHQgPj0gZGVoX2xvY2F0aW9uKCYoZGVoW2ldKSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkJICJ2cy0xMDI1MDogbGVhZl9wYXN0ZV9lbnRyaWVzOiBkaXJlY3RvcnkgaXRlbSAoJWgpIGNvcnJ1cHRlZCAoY3VyKCVkKSAlYSwgbmV4dCAlYSkiLAotCQkJCQkJIGloLCBpLCBkZWggKyBpLCBkZWggKyBpICsgMSk7CisJCQkJcmVpc2VyZnNfZXJyb3Ioc2JfZnJvbV9iaShiaSksICJ2cy0xMDI1MCIsCisJCQkJCSAgICAgICAiZGlyZWN0b3J5IGl0ZW0gKCVoKSAiCisJCQkJCSAgICAgICAiY29ycnVwdGVkIChjdXIoJWQpICVhLCAiCisJCQkJCSAgICAgICAibmV4dCAlYSkiLAorCQkJCQkgICAgICAgaWgsIGksIGRlaCArIGksIGRlaCArIGkgKyAxKTsKIAkJfQogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggNjM5ZDYzNS4uZWZkNGQ3MiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2FsbHMgc2VhcmNoX2J5X2tleSwgdGhlbiwgaWYgaXRlbSB3aG9zZSBmaXJzdAogZW50cnkgbWF0Y2hlcyBpcyBub3QgZm91bmQgaXQgbG9va3MgZm9yIHRoZSBlbnRyeSBpbnNpZGUgZGlyZWN0b3J5CiBpdGVtIGZvdW5kIGJ5IHNlYXJjaF9ieV9rZXkuIEZpbGxzIHRoZSBwYXRoIHRvIHRoZSBlbnRyeSwgYW5kIHRvIHRoZQotZW50cnkgcG9zaXRpb24gaW4gdGhlIGl0ZW0gCitlbnRyeSBwb3NpdGlvbiBpbiB0aGUgaXRlbQogCiAqLwogCkBAIC0xMjAsOCArMTIwLDggQEAKIAlzd2l0Y2ggKHJldHZhbCkgewogCWNhc2UgSVRFTV9OT1RfRk9VTkQ6CiAJCWlmICghUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHNiLAotCQkJCQkgInZzLTcwMDA6IHNlYXJjaF9ieV9lbnRyeV9rZXk6IHNlYXJjaF9ieV9rZXkgcmV0dXJuZWQgaXRlbSBwb3NpdGlvbiA9PSAwIik7CisJCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTcwMDAiLCAic2VhcmNoX2J5X2tleSAiCisJCQkJICAgICAgICJyZXR1cm5lZCBpdGVtIHBvc2l0aW9uID09IDAiKTsKIAkJCXBhdGhyZWxzZShwYXRoKTsKIAkJCXJldHVybiBJT19FUlJPUjsKIAkJfQpAQCAtMTM1LDggKzEzNSw3IEBACiAKIAlkZWZhdWx0OgogCQlwYXRocmVsc2UocGF0aCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJICJ2cy03MDAyOiBzZWFyY2hfYnlfZW50cnlfa2V5OiBubyBwYXRoIHRvIGhlcmUiKTsKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy03MDAyIiwgIm5vIHBhdGggdG8gaGVyZSIpOwogCQlyZXR1cm4gSU9fRVJST1I7CiAJfQogCkBAIC0xNDYsMTAgKzE0NSw5IEBACiAJaWYgKCFpc19kaXJlbnRyeV9sZV9paChkZS0+ZGVfaWgpIHx8CiAJICAgIENPTVBfU0hPUlRfS0VZUygmKGRlLT5kZV9paC0+aWhfa2V5KSwga2V5KSkgewogCQlwcmludF9ibG9jayhkZS0+ZGVfYmgsIDAsIC0xLCAtMSk7Ci0JCXJlaXNlcmZzX3BhbmljKHNiLAotCQkJICAgICAgICJ2cy03MDA1OiBzZWFyY2hfYnlfZW50cnlfa2V5OiBmb3VuZCBpdGVtICVoIGlzIG5vdCBkaXJlY3RvcnkgaXRlbSBvciAiCi0JCQkgICAgICAgImRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZSBkaXJlY3RvcnkgYXMga2V5ICVLIiwKLQkJCSAgICAgICBkZS0+ZGVfaWgsIGtleSk7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNzAwNSIsICJmb3VuZCBpdGVtICVoIGlzIG5vdCBkaXJlY3RvcnkgIgorCQkJICAgICAgICJpdGVtIG9yIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZSBkaXJlY3RvcnkgIgorCQkJICAgICAgICJhcyBrZXkgJUsiLCBkZS0+ZGVfaWgsIGtleSk7CiAJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwogCkBAIC0zMDAsOCArMjk4LDcgQEAKIAkJICAgIHNlYXJjaF9ieV9lbnRyeV9rZXkoZGlyLT5pX3NiLCAma2V5X3RvX3NlYXJjaCwKIAkJCQkJcGF0aF90b19lbnRyeSwgZGUpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgInphbS03MDAxOiBpbyBlcnJvciBpbiAlcyIsCi0JCQkJCSBfX2Z1bmNfXyk7CisJCQlyZWlzZXJmc19lcnJvcihkaXItPmlfc2IsICJ6YW0tNzAwMSIsICJpbyBlcnJvciIpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAKQEAgLTM2MSw5ICszNTgsMTAgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwogCQl9CiAKLQkJLyogUHJvcG9nYXRlIHRoZSBwcml2X29iamVjdCBmbGFnIHNvIHdlIGtub3cgd2UncmUgaW4gdGhlIHByaXYgdHJlZSAqLwotCQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGlyKSkKLQkJCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJCS8qIFByb3BhZ2F0ZSB0aGUgcHJpdmF0ZSBmbGFnIHNvIHdlIGtub3cgd2UncmUKKwkJICogaW4gdGhlIHByaXYgdHJlZSAqLworCQlpZiAoSVNfUFJJVkFURShkaXIpKQorCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogCX0KIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7CkBAIC0zNzMsNyArMzcxLDcgQEAKIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CiAKLS8qIAorLyoKICoqIGxvb2tzIHVwIHRoZSBkZW50cnkgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgZm9yIGNoaWxkLgogKiogdGFrZW4gZnJvbSBleHQyX2dldF9wYXJlbnQKICovCkBAIC00MDMsNyArNDAxLDcgQEAKIAlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogfQogCi0vKiBhZGQgZW50cnkgdG8gdGhlIGRpcmVjdG9yeSAoZW50cnkgY2FuIGJlIGhpZGRlbikuIAorLyogYWRkIGVudHJ5IHRvIHRoZSBkaXJlY3RvcnkgKGVudHJ5IGNhbiBiZSBoaWRkZW4pLgogCiBpbnNlcnQgZGVmaW5pdGlvbiBvZiB3aGVuIGhpZGRlbiBkaXJlY3RvcmllcyBhcmUgdXNlZCBoZXJlIC1IYW5zCiAKQEAgLTQ4NCwxMCArNDgyLDkgQEAKIAkJfQogCiAJCWlmIChyZXR2YWwgIT0gTkFNRV9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJCSAiemFtLTcwMDI6JXM6IFwicmVpc2VyZnNfZmluZF9lbnRyeVwiICIKLQkJCQkJICJoYXMgcmV0dXJuZWQgdW5leHBlY3RlZCB2YWx1ZSAoJWQpIiwKLQkJCQkJIF9fZnVuY19fLCByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoZGlyLT5pX3NiLCAiemFtLTcwMDIiLAorCQkJCSAgICAgICAicmVpc2VyZnNfZmluZF9lbnRyeSgpIHJldHVybmVkICIKKwkJCQkgICAgICAgInVuZXhwZWN0ZWQgdmFsdWUgKCVkKSIsIHJldHZhbCk7CiAJCX0KIAogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTQ5OCw4ICs0OTUsOSBAQAogCQkJCU1BWF9HRU5FUkFUSU9OX05VTUJFUiArIDEpOwogCWlmIChnZW5fbnVtYmVyID4gTUFYX0dFTkVSQVRJT05fTlVNQkVSKSB7CiAJCS8qIHRoZXJlIGlzIG5vIGZyZWUgZ2VuZXJhdGlvbiBudW1iZXIgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJICJyZWlzZXJmc19hZGRfZW50cnk6IENvbmdyYXR1bGF0aW9ucyEgd2UgaGF2ZSBnb3QgaGFzaCBmdW5jdGlvbiBzY3Jld2VkIHVwIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLCAicmVpc2VyZnMtNzAxMCIsCisJCQkJICJDb25ncmF0dWxhdGlvbnMhIHdlIGhhdmUgZ290IGhhc2ggZnVuY3Rpb24gIgorCQkJCSAic2NyZXdlZCB1cCIpOwogCQlpZiAoYnVmZmVyICE9IHNtYWxsX2J1ZikKIAkJCWtmcmVlKGJ1ZmZlcik7CiAJCXBhdGhyZWxzZSgmcGF0aCk7CkBAIC01MTUsMTAgKzUxMyw5IEBACiAJaWYgKGdlbl9udW1iZXIgIT0gMCkgewkvKiB3ZSBuZWVkIHRvIHJlLXNlYXJjaCBmb3IgdGhlIGluc2VydGlvbiBwb2ludCAqLwogCQlpZiAoc2VhcmNoX2J5X2VudHJ5X2tleShkaXItPmlfc2IsICZlbnRyeV9rZXksICZwYXRoLCAmZGUpICE9CiAJCSAgICBOQU1FX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJCSAidnMtNzAzMjogcmVpc2VyZnNfYWRkX2VudHJ5OiAiCi0JCQkJCSAiZW50cnkgd2l0aCB0aGlzIGtleSAoJUspIGFscmVhZHkgZXhpc3RzIiwKLQkJCQkJICZlbnRyeV9rZXkpOworCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsICJ2cy03MDMyIiwKKwkJCQkJICJlbnRyeSB3aXRoIHRoaXMga2V5ICglSykgYWxyZWFkeSAiCisJCQkJCSAiZXhpc3RzIiwgJmVudHJ5X2tleSk7CiAKIAkJCWlmIChidWZmZXIgIT0gc21hbGxfYnVmKQogCQkJCWtmcmVlKGJ1ZmZlcik7CkBAIC01NjIsNyArNTU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4gIAorLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4KICoqIHZmc19kcV9pbml0IG5lZWRzIGxvdHMgb2YgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0CiAqKiBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24sIHNvIHdlIGhhZCB0byBwdWxsIHNvbWUgYml0cyBvZgogKiogcmVpc2VyZnNfbmV3X2lub2RlIG91dCBpbnRvIHRoaXMgZnVuYy4KQEAgLTYwMSwyMCArNTk4LDIyIEBACiAJICAgIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKLQlpbnQgbG9ja2VkOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAKIAlpZiAoIShpbm9kZSA9IG5ld19pbm9kZShkaXItPmlfc2IpKSkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbmV3X2lub2RlX2luaXQoaW5vZGUsIGRpciwgbW9kZSk7CiAKLQlsb2NrZWQgPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOwotCisJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7CisJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfaW5pdChkaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKIAlyZWlzZXJmc193cml0ZV9sb2NrKGRpci0+aV9zYik7CiAKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKQEAgLTYyMywxNSArNjIyLDEwIEBACiAKIAlyZXR2YWwgPQogCSAgICByZWlzZXJmc19uZXdfaW5vZGUoJnRoLCBkaXIsIG1vZGUsIE5VTEwsIDAgLyppX3NpemUgKi8gLCBkZW50cnksCi0JCQkgICAgICAgaW5vZGUpOworCQkJICAgICAgIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAotCWlmIChsb2NrZWQpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlsb2NrZWQgPSAwOwotCX0KLQogCWlub2RlLT5pX29wID0gJnJlaXNlcmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmcmVpc2VyZnNfZmlsZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnJlaXNlcmZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uczsKQEAgLTY1OCw4ICs2NTIsNiBAQAogCXJldHZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCiAgICAgICBvdXRfZmFpbGVkOgotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNjcwLDEyICs2NjIsMTIgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHNlY3VyaXR5OwogCS8qIFdlIG5lZWQgYmxvY2tzIGZvciB0cmFuc2FjdGlvbiArICh1c2VyK2dyb3VwKSoocXVvdGFzIGZvciBuZXcgaW5vZGUgKyB1cGRhdGUgb2YgcXVvdGEgZm9yIGRpcmVjdG9yeSBvd25lcikgKi8KIAlpbnQgamJlZ2luX2NvdW50ID0KIAkgICAgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAzICsKIAkgICAgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKLQlpbnQgbG9ja2VkOwogCiAJaWYgKCFuZXdfdmFsaWRfZGV2KHJkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY4NSwxMyArNjc3LDE1IEBACiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBkaXIsIG1vZGUpOwogCi0JbG9ja2VkID0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKLQorCWpiZWdpbl9jb3VudCArPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOworCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwogCi0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewogCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CkBAIC03MDAsMTYgKzY5NCwxMSBAQAogCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgZGlyLCBtb2RlLCBOVUxMLCAwIC8qaV9zaXplICovICwgZGVudHJ5LAotCQkJICAgICAgIGlub2RlKTsKKwkJCSAgICAgICBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKSB7CiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAl9CiAKLQlpZiAobG9ja2VkKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KIAlpbm9kZS0+aV9vcCA9ICZyZWlzZXJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CiAJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKIApAQCAtNzM5LDggKzcyOCw2IEBACiAJcmV0dmFsID0gam91cm5hbF9lbmQoJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAKICAgICAgIG91dF9mYWlsZWQ6Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC03NTAsMTIgKzczNywxMiBAQAogCWludCByZXR2YWw7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAJLyogV2UgbmVlZCBibG9ja3MgZm9yIHRyYW5zYWN0aW9uICsgKHVzZXIrZ3JvdXApKihxdW90YXMgZm9yIG5ldyBpbm9kZSArIHVwZGF0ZSBvZiBxdW90YSBmb3IgZGlyZWN0b3J5IG93bmVyKSAqLwogCWludCBqYmVnaW5fY291bnQgPQogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDMgKwogCSAgICAyICogKFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkgUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwotCWludCBsb2NrZWQ7CiAKICNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCiAJLyogc2V0IGZsYWcgdGhhdCBuZXcgcGFja2luZyBsb2NhbGl0eSBjcmVhdGVkIGFuZCBuZXcgYmxvY2tzIGZvciB0aGUgY29udGVudCAgICAgKiBvZiB0aGF0IGRpcmVjdG9yeSBhcmUgbm90IGRpc3BsYWNlZCB5ZXQgKi8KQEAgLTc2NywxMSArNzU0LDE0IEBACiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBkaXIsIG1vZGUpOwogCi0JbG9ja2VkID0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKLQorCWpiZWdpbl9jb3VudCArPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOworCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAKIAlyZXR2YWwgPSBqb3VybmFsX2JlZ2luKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCWlmIChyZXR2YWwpIHsKQEAgLTc4NywxNyArNzc3LDEyIEBACiAJICAgIHJldHZhbCA9IHJlaXNlcmZzX25ld19pbm9kZSgmdGgsIGRpciwgbW9kZSwgTlVMTCAvKnN5bWxpbmsgKi8gLAogCQkJCQlvbGRfZm9ybWF0X29ubHkoZGlyLT5pX3NiKSA/CiAJCQkJCUVNUFRZX0RJUl9TSVpFX1YxIDogRU1QVFlfRElSX1NJWkUsCi0JCQkJCWRlbnRyeSwgaW5vZGUpOworCQkJCQlkZW50cnksIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpIHsKIAkJZGlyLT5pX25saW5rLS07CiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAl9CiAKLQlpZiAobG9ja2VkKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KIAlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwogCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihkaXIpOwogCkBAIC04MjcsOCArODEyLDYgQEAKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAlyZXR2YWwgPSBqb3VybmFsX2VuZCgmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKICAgICAgIG91dF9mYWlsZWQ6Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MzcsNyArODIwLDcgQEAKIHsKIAkvKiB3ZSBjYW4gY2hlYXQgYmVjYXVzZSBhbiBvbGQgZm9ybWF0IGRpciBjYW5ub3QgaGF2ZQogCSAqKiBFTVBUWV9ESVJfU0laRSwgYW5kIGEgbmV3IGZvcm1hdCBkaXIgY2Fubm90IGhhdmUKLQkgKiogRU1QVFlfRElSX1NJWkVfVjEuICBTbywgaWYgdGhlIGlub2RlIGlzIGVpdGhlciBzaXplLCAKKwkgKiogRU1QVFlfRElSX1NJWkVfVjEuICBTbywgaWYgdGhlIGlub2RlIGlzIGVpdGhlciBzaXplLAogCSAqKiByZWdhcmRsZXNzIG9mIGRpc2sgZm9ybWF0IHZlcnNpb24sIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkuCiAJICovCiAJaWYgKGlub2RlLT5pX3NpemUgIT0gRU1QVFlfRElSX1NJWkUgJiYKQEAgLTkwMyw4ICs4ODYsOSBAQAogCQlnb3RvIGVuZF9ybWRpcjsKIAogCWlmIChpbm9kZS0+aV9ubGluayAhPSAyICYmIGlub2RlLT5pX25saW5rICE9IDEpCi0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICIlczogZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayAiCi0JCQkJICIhPSAyICglZCkiLCBfX2Z1bmNfXywgaW5vZGUtPmlfbmxpbmspOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInJlaXNlcmZzLTcwNDAiLAorCQkJICAgICAgICJlbXB0eSBkaXJlY3RvcnkgaGFzIG5saW5rICE9IDIgKCVkKSIsCisJCQkgICAgICAgaW5vZGUtPmlfbmxpbmspOwogCiAJY2xlYXJfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKQEAgLTk4MCwxMCArOTY0LDkgQEAKIAl9CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICIlczogZGVsZXRpbmcgbm9uZXhpc3RlbnQgZmlsZSAiCi0JCQkJICIoJXM6JWx1KSwgJWQiLCBfX2Z1bmNfXywKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUoaW5vZGUtPmlfc2IpLCBpbm9kZS0+aV9pbm8sCi0JCQkJIGlub2RlLT5pX25saW5rKTsKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInJlaXNlcmZzLTcwNDIiLAorCQkJCSAiZGVsZXRpbmcgbm9uZXhpc3RlbnQgZmlsZSAoJWx1KSwgJWQiLAorCQkJCSBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX25saW5rKTsKIAkJaW5vZGUtPmlfbmxpbmsgPSAxOwogCX0KIApAQCAtMTAzNyw2ICsxMDIwLDcgQEAKIAljaGFyICpuYW1lOwogCWludCBpdGVtX2xlbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAJaW50IG1vZGUgPSBTX0lGTE5LIHwgU19JUldYVUdPOwogCS8qIFdlIG5lZWQgYmxvY2tzIGZvciB0cmFuc2FjdGlvbiArICh1c2VyK2dyb3VwKSoocXVvdGFzIGZvciBuZXcgaW5vZGUgKyB1cGRhdGUgb2YgcXVvdGEgZm9yIGRpcmVjdG9yeSBvd25lcikgKi8KIAlpbnQgamJlZ2luX2NvdW50ID0KQEAgLTEwNDksNiArMTAzMywxMyBAQAogCX0KIAluZXdfaW5vZGVfaW5pdChpbm9kZSwgcGFyZW50X2RpciwgbW9kZSk7CiAKKwlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV9pbml0KHBhcmVudF9kaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKKwogCXJlaXNlcmZzX3dyaXRlX2xvY2socGFyZW50X2Rpci0+aV9zYik7CiAJaXRlbV9sZW4gPSBST1VORF9VUChzdHJsZW4oc3ltbmFtZSkpOwogCWlmIChpdGVtX2xlbiA+IE1BWF9ESVJFQ1RfSVRFTV9MRU4ocGFyZW50X2Rpci0+aV9zYi0+c19ibG9ja3NpemUpKSB7CkBAIC0xMDY2LDggKzEwNTcsNiBAQAogCW1lbWNweShuYW1lLCBzeW1uYW1lLCBzdHJsZW4oc3ltbmFtZSkpOwogCXBhZGRfaXRlbShuYW1lLCBpdGVtX2xlbiwgc3RybGVuKHN5bW5hbWUpKTsKIAotCS8qIFdlIHdvdWxkIGluaGVyaXQgdGhlIGRlZmF1bHQgQUNMIGhlcmUsIGJ1dCBzeW1saW5rcyBkb24ndCBnZXQgQUNMcyAqLwotCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIHBhcmVudF9kaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewogCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CkBAIC0xMDc3LDcgKzEwNjYsNyBAQAogCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgcGFyZW50X2RpciwgbW9kZSwgbmFtZSwgc3RybGVuKHN5bW5hbWUpLAotCQkJICAgICAgIGRlbnRyeSwgaW5vZGUpOworCQkJICAgICAgIGRlbnRyeSwgaW5vZGUsICZzZWN1cml0eSk7CiAJa2ZyZWUobmFtZSk7CiAJaWYgKHJldHZhbCkgewkJLyogcmVpc2VyZnNfbmV3X2lub2RlIGlwdXRzIGZvciB1cyAqLwogCQlnb3RvIG91dF9mYWlsZWQ7CkBAIC0xMTczLDcgKzExNjIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8vIGRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHBvaW50aW5nIHRvIGFuIGVudHJ5IHdoaWNoIAorLyogZGUgY29udGFpbnMgaW5mb3JtYXRpb24gcG9pbnRpbmcgdG8gYW4gZW50cnkgd2hpY2ggKi8KIHN0YXRpYyBpbnQgZGVfc3RpbGxfdmFsaWQoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKIAkJCSAgc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqZGUpCiB7CkBAIC0xMTk2LDE1ICsxMTg1LDE0IEBACiAKIAlpZiAoaW5vZGUpIHsKIAkJaWYgKCFkZV92aXNpYmxlKGRlLT5kZV9kZWggKyBkZS0+ZGVfZW50cnlfbnVtKSkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJ2cy03MDQyOiBlbnRyeV9wb2ludHNfdG9fb2JqZWN0OiBlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKKwkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLCAidnMtNzA0MiIsCisJCQkJICAgICAgICJlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKIAkJcmV0dXJuIChkZS0+ZGVfb2JqZWN0aWQgPT0gaW5vZGUtPmlfaW5vKSA/IDEgOiAwOwogCX0KIAogCS8qIHRoaXMgbXVzdCBiZSBhZGRlZCBoaWRkZW4gZW50cnkgKi8KIAlpZiAoZGVfdmlzaWJsZShkZS0+ZGVfZGVoICsgZGUtPmRlX2VudHJ5X251bSkpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTcwNDM6IGVudHJ5X3BvaW50c190b19vYmplY3Q6IGVudHJ5IG11c3QgYmUgdmlzaWJsZSIpOworCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNzA0MyIsICJlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIxOCwxMCArMTIwNiwxMCBAQAogCWRlLT5kZV9kZWhbZGUtPmRlX2VudHJ5X251bV0uZGVoX29iamVjdGlkID0ga2V5LT5rX29iamVjdGlkOwogfQogCi0vKiAKKy8qCiAgKiBwcm9jZXNzLCB0aGF0IGlzIGdvaW5nIHRvIGNhbGwgZml4X25vZGVzL2RvX2JhbGFuY2UgbXVzdCBob2xkIG9ubHkKICAqIG9uZSBwYXRoLiBJZiBpdCBob2xkcyAyIG9yIG1vcmUsIGl0IGNhbiBnZXQgaW50byBlbmRsZXNzIHdhaXRpbmcgaW4KLSAqIGdldF9lbXB0eV9ub2RlcyBvciBpdHMgY2xvbmVzIAorICogZ2V0X2VtcHR5X25vZGVzIG9yIGl0cyBjbG9uZXMKICAqLwogc3RhdGljIGludCByZWlzZXJmc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkJICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQpAQCAtMTI3NSw3ICsxMjYzLDcgQEAKIAogCW9sZF9pbm9kZV9tb2RlID0gb2xkX2lub2RlLT5pX21vZGU7CiAJaWYgKFNfSVNESVIob2xkX2lub2RlX21vZGUpKSB7Ci0JCS8vIG1ha2Ugc3VyZSwgdGhhdCBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZCBoYXMgY29ycmVjdCAiLi4iIAorCQkvLyBtYWtlIHN1cmUsIHRoYXQgZGlyZWN0b3J5IGJlaW5nIHJlbmFtZWQgaGFzIGNvcnJlY3QgIi4uIgogCQkvLyBhbmQgdGhhdCBpdHMgbmV3IHBhcmVudCBkaXJlY3RvcnkgaGFzIG5vdCB0b28gbWFueSBsaW5rcwogCQkvLyBhbHJlYWR5CiAKQEAgLTEyODYsOCArMTI3NCw4IEBACiAJCQl9CiAJCX0KIAotCQkvKiBkaXJlY3RvcnkgaXMgcmVuYW1lZCwgaXRzIHBhcmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkLCAKLQkJICoqIHNvIGZpbmQgIi4uIiBlbnRyeSAKKwkJLyogZGlyZWN0b3J5IGlzIHJlbmFtZWQsIGl0cyBwYXJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgY2hhbmdlZCwKKwkJICoqIHNvIGZpbmQgIi4uIiBlbnRyeQogCQkgKi8KIAkJZG90X2RvdF9kZS5kZV9nZW5fbnVtYmVyX2JpdF9zdHJpbmcgPSBOVUxMOwogCQlyZXR2YWwgPQpAQCAtMTMxOCw4ICsxMzA2LDggQEAKIAkJCSAgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubGVuLCBvbGRfaW5vZGUsIDApOwogCWlmIChyZXR2YWwgPT0gLUVFWElTVCkgewogCQlpZiAoIW5ld19kZW50cnlfaW5vZGUpIHsKLQkJCXJlaXNlcmZzX3BhbmljKG9sZF9kaXItPmlfc2IsCi0JCQkJICAgICAgICJ2cy03MDUwOiBuZXcgZW50cnkgaXMgZm91bmQsIG5ldyBpbm9kZSA9PSAwXG4iKTsKKwkJCXJlaXNlcmZzX3BhbmljKG9sZF9kaXItPmlfc2IsICJ2cy03MDUwIiwKKwkJCQkgICAgICAgIm5ldyBlbnRyeSBpcyBmb3VuZCwgbmV3IGlub2RlID09IDAiKTsKIAkJfQogCX0gZWxzZSBpZiAocmV0dmFsKSB7CiAJCWludCBlcnIgPSBqb3VybmFsX2VuZCgmdGgsIG9sZF9kaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CkBAIC0xMzk3LDkgKzEzODUsOSBAQAogCQkgICB0aGlzIHN0dWZmLCB5ZXM/IFRoZW4sIGhhdmluZwogCQkgICBnYXRoZXJlZCBldmVyeXRoaW5nIGludG8gUkFNIHdlCiAJCSAgIHNob3VsZCBsb2NrIHRoZSBidWZmZXJzLCB5ZXM/ICAtSGFucyAqLwotCQkvKiBwcm9iYWJseS4gIG91ciByZW5hbWUgbmVlZHMgdG8gaG9sZCBtb3JlIAotCQkgKiogdGhhbiBvbmUgcGF0aCBhdCBvbmNlLiAgVGhlIHNlYWxzIHdvdWxkIAotCQkgKiogaGF2ZSB0byBiZSB3cml0dGVuIHRvIGRlYWwgd2l0aCBtdWx0aS1wYXRoIAorCQkvKiBwcm9iYWJseS4gIG91ciByZW5hbWUgbmVlZHMgdG8gaG9sZCBtb3JlCisJCSAqKiB0aGFuIG9uZSBwYXRoIGF0IG9uY2UuICBUaGUgc2VhbHMgd291bGQKKwkJICoqIGhhdmUgdG8gYmUgd3JpdHRlbiB0byBkZWFsIHdpdGggbXVsdGktcGF0aAogCQkgKiogaXNzdWVzIC1jaHJpcwogCQkgKi8KIAkJLyogc2FuaXR5IGNoZWNraW5nIGJlZm9yZSBkb2luZyB0aGUgcmVuYW1lIC0gYXZvaWQgcmFjZXMgbWFueQpAQCAtMTQ3Nyw3ICsxNDY1LDcgQEAKIAl9CiAKIAlpZiAoU19JU0RJUihvbGRfaW5vZGVfbW9kZSkpIHsKLQkJLy8gYWRqdXN0ICIuLiIgb2YgcmVuYW1lZCBkaXJlY3RvcnkgCisJCS8qIGFkanVzdCAiLi4iIG9mIHJlbmFtZWQgZGlyZWN0b3J5ICovCiAJCXNldF9pbm9faW5fZGlyX2VudHJ5KCZkb3RfZG90X2RlLCBJTk9ERV9QS0VZKG5ld19kaXIpKTsKIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgbmV3X2Rpci0+aV9zYiwgZG90X2RvdF9kZS5kZV9iaCk7CiAKQEAgLTE0OTksOCArMTQ4Nyw4IEBACiAJaWYgKHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0KIAkgICAgKCZ0aCwgJm9sZF9lbnRyeV9wYXRoLCAmKG9sZF9kZS5kZV9lbnRyeV9rZXkpLCBvbGRfZGlyLCBOVUxMLAogCSAgICAgMCkgPCAwKQotCQlyZWlzZXJmc193YXJuaW5nKG9sZF9kaXItPmlfc2IsCi0JCQkJICJ2cy03MDYwOiByZWlzZXJmc19yZW5hbWU6IGNvdWxkbid0IG5vdCBjdXQgb2xkIG5hbWUuIEZzY2sgbGF0ZXI/Iik7CisJCXJlaXNlcmZzX2Vycm9yKG9sZF9kaXItPmlfc2IsICJ2cy03MDYwIiwKKwkJCSAgICAgICAiY291bGRuJ3Qgbm90IGN1dCBvbGQgbmFtZS4gRnNjayBsYXRlcj8iKTsKIAogCW9sZF9kaXItPmlfc2l6ZSAtPSBERUhfU0laRSArIG9sZF9kZS5kZV9lbnRyeWxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYyBiL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKaW5kZXggZWEwY2Y4Yy4uM2E2ZGU4MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYworKysgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCkBAIC0xOCw4ICsxOCw3IEBACiBzdGF0aWMgdm9pZCBjaGVja19vYmplY3RpZF9tYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBfX2xlMzIgKiBtYXApCiB7CiAJaWYgKGxlMzJfdG9fY3B1KG1hcFswXSkgIT0gMSkKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAidnMtMTUwMTA6IGNoZWNrX29iamVjdGlkX21hcDogbWFwIGNvcnJ1cHRlZDogJWx4IiwKKwkJcmVpc2VyZnNfcGFuaWMocywgInZzLTE1MDEwIiwgIm1hcCBjb3JydXB0ZWQ6ICVseCIsCiAJCQkgICAgICAgKGxvbmcgdW5zaWduZWQgaW50KWxlMzJfdG9fY3B1KG1hcFswXSkpOwogCiAJLy8gRklYTUU6IGFkZCBzb21ldGhpbmcgZWxzZSBoZXJlCkBAIC02MSw3ICs2MCw3IEBACiAJLyogY29tbWVudCBuZWVkZWQgLUhhbnMgKi8KIAl1bnVzZWRfb2JqZWN0aWQgPSBsZTMyX3RvX2NwdShtYXBbMV0pOwogCWlmICh1bnVzZWRfb2JqZWN0aWQgPT0gVTMyX01BWCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICIlczogbm8gbW9yZSBvYmplY3QgaWRzIiwgX19mdW5jX18pOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0xNTEwMCIsICJubyBtb3JlIG9iamVjdCBpZHMiKTsKIAkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjAsOSArMTU5LDggQEAKIAkJaSArPSAyOwogCX0KIAotCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCSAidnMtMTUwMTE6IHJlaXNlcmZzX3JlbGVhc2Vfb2JqZWN0aWQ6IHRyaWVkIHRvIGZyZWUgZnJlZSBvYmplY3QgaWQgKCVsdSkiLAotCQkJIChsb25nIHVuc2lnbmVkKW9iamVjdGlkX3RvX3JlbGVhc2UpOworCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy0xNTAxMSIsICJ0cmllZCB0byBmcmVlIGZyZWUgb2JqZWN0IGlkICglbHUpIiwKKwkJICAgICAgIChsb25nIHVuc2lnbmVkKW9iamVjdGlkX3RvX3JlbGVhc2UpOwogfQogCiBpbnQgcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpAQCAtMTgyLDcgKzE4MCw3IEBACiAKIAlpZiAoY3VyX3NpemUgPiBuZXdfc2l6ZSkgewogCQkvKiBtYXJrIGV2ZXJ5b25lIHVzZWQgdGhhdCB3YXMgbGlzdGVkIGFzIGZyZWUgYXQgdGhlIGVuZCBvZiB0aGUgb2JqZWN0aWQKLQkJICoqIG1hcCAKKwkJICoqIG1hcAogCQkgKi8KIAkJb2JqZWN0aWRfbWFwW25ld19zaXplIC0gMV0gPSBvYmplY3RpZF9tYXBbY3VyX3NpemUgLSAxXTsKIAkJc2V0X3NiX29pZF9jdXJzaXplKGRpc2tfc2IsIG5ld19zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKaW5kZXggNzQwYmI4Yy4uNTM2ZWFjYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKQEAgLTE1NywxOSArMTU3LDE2IEBACiAJCWRjX3NpemUoZGMpKTsKIH0KIAotc3RhdGljIGNoYXIgKmlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChjaGFyICpmbXQsIGludCAqd2hhdCwgaW50ICpza2lwKQorc3RhdGljIGNoYXIgKmlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChjaGFyICpmbXQsIGludCAqd2hhdCkKIHsKIAljaGFyICprID0gZm10OwogCi0JKnNraXAgPSAwOwotCiAJd2hpbGUgKChrID0gc3RyY2hyKGssICclJykpICE9IE5VTEwpIHsKIAkJaWYgKGtbMV0gPT0gJ2snIHx8IGtbMV0gPT0gJ0snIHx8IGtbMV0gPT0gJ2gnIHx8IGtbMV0gPT0gJ3QnIHx8CiAJCSAgICBrWzFdID09ICd6JyB8fCBrWzFdID09ICdiJyB8fCBrWzFdID09ICd5JyB8fCBrWzFdID09ICdhJykgewogCQkJKndoYXQgPSBrWzFdOwogCQkJYnJlYWs7CiAJCX0KLQkJKCpza2lwKSsrOwogCQlrKys7CiAJfQogCXJldHVybiBrOwpAQCAtMTgxLDMwICsxNzgsMjkgQEAKICAgIGFwcHJvcHJpYXRpdmUgcHJpbnRrLiBXaXRoIHRoaXMgcmVpc2VyZnNfd2FybmluZyB5b3UgY2FuIHVzZSBmb3JtYXQKICAgIHNwZWNpZmljYXRpb24gZm9yIGNvbXBsZXggc3RydWN0dXJlcyBsaWtlIHlvdSB1c2VkIHRvIGRvIHdpdGgKICAgIHByaW50ZnMgZm9yIGludGVnZXJzLCBkb3VibGVzIGFuZCBwb2ludGVycy4gRm9yIGluc3RhbmNlLCB0byBwcmludAotICAgb3V0IGtleSBzdHJ1Y3R1cmUgeW91IGhhdmUgdG8gd3JpdGUganVzdDogCi0gICByZWlzZXJmc193YXJuaW5nICgiYmFkIGtleSAlayIsIGtleSk7IAotICAgaW5zdGVhZCBvZiAKLSAgIHByaW50ayAoImJhZCBrZXkgJWx1ICVsdSAlbHUgJWx1Iiwga2V5LT5rX2Rpcl9pZCwga2V5LT5rX29iamVjdGlkLCAKLSAgICAgICAgICAga2V5LT5rX29mZnNldCwga2V5LT5rX3VuaXF1ZW5lc3MpOyAKKyAgIG91dCBrZXkgc3RydWN0dXJlIHlvdSBoYXZlIHRvIHdyaXRlIGp1c3Q6CisgICByZWlzZXJmc193YXJuaW5nICgiYmFkIGtleSAlayIsIGtleSk7CisgICBpbnN0ZWFkIG9mCisgICBwcmludGsgKCJiYWQga2V5ICVsdSAlbHUgJWx1ICVsdSIsIGtleS0+a19kaXJfaWQsIGtleS0+a19vYmplY3RpZCwKKyAgICAgICAgICAga2V5LT5rX29mZnNldCwga2V5LT5rX3VuaXF1ZW5lc3MpOwogKi8KLQorc3RhdGljIERFRklORV9TUElOTE9DSyhlcnJvcl9sb2NrKTsKIHN0YXRpYyB2b2lkIHByZXBhcmVfZXJyb3JfYnVmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKmZtdDEgPSBmbXRfYnVmOwogCWNoYXIgKms7CiAJY2hhciAqcCA9IGVycm9yX2J1ZjsKLQlpbnQgaSwgaiwgd2hhdCwgc2tpcDsKKwlpbnQgd2hhdDsKKworCXNwaW5fbG9jaygmZXJyb3JfbG9jayk7CiAKIAlzdHJjcHkoZm10MSwgZm10KTsKIAotCXdoaWxlICgoayA9IGlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChmbXQxLCAmd2hhdCwgJnNraXApKSAhPSBOVUxMKSB7CisJd2hpbGUgKChrID0gaXNfdGhlcmVfcmVpc2VyZnNfc3RydWN0KGZtdDEsICZ3aGF0KSkgIT0gTlVMTCkgewogCQkqayA9IDA7CiAKIAkJcCArPSB2c3ByaW50ZihwLCBmbXQxLCBhcmdzKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2tpcDsgaSsrKQotCQkJaiA9IHZhX2FyZyhhcmdzLCBpbnQpOwotCiAJCXN3aXRjaCAod2hhdCkgewogCQljYXNlICdrJzoKIAkJCXNwcmludGZfbGVfa2V5KHAsIHZhX2FyZyhhcmdzLCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKTsKQEAgLTI0MywxNSArMjM5LDE2IEBACiAJCWZtdDEgPSBrICsgMjsKIAl9CiAJdnNwcmludGYocCwgZm10MSwgYXJncyk7CisJc3Bpbl91bmxvY2soJmVycm9yX2xvY2spOwogCiB9CiAKIC8qIGluIGFkZGl0aW9uIHRvIHVzdWFsIGNvbnZlcnNpb24gc3BlY2lmaWVycyB0aGlzIGFjY2VwdHMgcmVpc2VyZnMKLSAgIHNwZWNpZmljIGNvbnZlcnNpb24gc3BlY2lmaWVyczogCi0gICAlayB0byBwcmludCBsaXR0bGUgZW5kaWFuIGtleSwgCi0gICAlSyB0byBwcmludCBjcHUga2V5LCAKKyAgIHNwZWNpZmljIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKyAgICVrIHRvIHByaW50IGxpdHRsZSBlbmRpYW4ga2V5LAorICAgJUsgdG8gcHJpbnQgY3B1IGtleSwKICAgICVoIHRvIHByaW50IGl0ZW1faGVhZCwKLSAgICV0IHRvIHByaW50IGRpcmVjdG9yeSBlbnRyeSAKKyAgICV0IHRvIHByaW50IGRpcmVjdG9yeSBlbnRyeQogICAgJXogdG8gcHJpbnQgYmxvY2sgaGVhZCAoYXJnIG11c3QgYmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKICAgICViIHRvIHByaW50IGJ1ZmZlcl9oZWFkCiAqLwpAQCAtMjY0LDE0ICsyNjEsMTcgQEAKICAgICB2YV9lbmQoIGFyZ3MgKTtcCiB9CiAKLXZvaWQgcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmlkLAorCQkJIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAJaWYgKHNiKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWlzZXJGUzogJXM6IHdhcm5pbmc6ICVzXG4iLAotCQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyB3YXJuaW5nIChkZXZpY2UgJXMpOiAlcyVzJXM6ICIKKwkJICAgICAgICIlc1xuIiwgc2ItPnNfaWQsIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwKKwkJICAgICAgIGZ1bmN0aW9uLCBlcnJvcl9idWYpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVpc2VyRlM6IHdhcm5pbmc6ICVzXG4iLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyB3YXJuaW5nOiAlcyVzJXM6ICVzXG4iLAorCQkgICAgICAgaWQgPyBpZCA6ICIiLCBpZCA/ICIgIiA6ICIiLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKIH0KIAogLyogTm8gbmV3bGluZS4uIHJlaXNlcmZzX2luZm8gY2FsbHMgY2FuIGJlIGZvbGxvd2VkIGJ5IHByaW50aydzICovCkBAIC0yNzksMTAgKzI3OSwxMCBAQAogewogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAlpZiAoc2IpCi0JCXByaW50ayhLRVJOX05PVElDRSAiUmVpc2VyRlM6ICVzOiAlcyIsCi0JCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkVJU0VSRlMgKGRldmljZSAlcyk6ICVzIiwKKwkJICAgICAgIHNiLT5zX2lkLCBlcnJvcl9idWYpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWlzZXJGUzogJXMiLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJFSVNFUkZTICVzOiIsIGVycm9yX2J1Zik7CiB9CiAKIC8qIE5vIG5ld2xpbmUuLiByZWlzZXJmc19wcmludGsgY2FsbHMgY2FuIGJlIGZvbGxvd2VkIGJ5IHByaW50aydzICovCkBAIC0yOTcsMTAgKzI5NywxMCBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAlpZiAocykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlaXNlckZTOiAlczogJXNcbiIsCi0JCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzKSwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJFSVNFUkZTIGRlYnVnIChkZXZpY2UgJXMpOiAlc1xuIiwKKwkJICAgICAgIHMtPnNfaWQsIGVycm9yX2J1Zik7CiAJZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVpc2VyRlM6ICVzXG4iLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUkVJU0VSRlMgZGVidWc6ICVzXG4iLCBlcnJvcl9idWYpOwogI2VuZGlmCiB9CiAKQEAgLTMxNCwxNyArMzE0LDE3IEBACiAgICAgbWFpbnRhaW5lci1lcnJvcmlkLiAgRG9uJ3QgYm90aGVyIHdpdGggcmV1c2luZyBlcnJvcmlkcywgdGhlcmUgYXJlCiAgICAgbG90cyBvZiBudW1iZXJzIG91dCB0aGVyZS4KIAotICAgIEV4YW1wbGU6IAotICAgIAorICAgIEV4YW1wbGU6CisKICAgICByZWlzZXJmc19wYW5pYygKIAlwX3NiLCAicmVpc2VyLTI5OiByZWlzZXJmc19uZXdfYmxvY2tucnM6ICIKIAkib25lIG9mIHNlYXJjaF9zdGFydCBvciBybiglZCkgaXMgZXF1YWwgdG8gTUFYX0JfTlVNLCIKLQkid2hpY2ggbWVhbnMgdGhhdCB3ZSBhcmUgb3B0aW1pemluZyBsb2NhdGlvbiBiYXNlZCBvbiB0aGUgYm9ndXMgbG9jYXRpb24gb2YgYSB0ZW1wIGJ1ZmZlciAoJXApLiIsIAorCSJ3aGljaCBtZWFucyB0aGF0IHdlIGFyZSBvcHRpbWl6aW5nIGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBib2d1cyBsb2NhdGlvbiBvZiBhIHRlbXAgYnVmZmVyICglcCkuIiwKIAlybiwgYmgKICAgICApOwogCiAgICAgUmVndWxhciBwYW5pYygpcyBzb21ldGltZXMgY2xlYXIgdGhlIHNjcmVlbiBiZWZvcmUgdGhlIG1lc3NhZ2UgY2FuCi0gICAgYmUgcmVhZCwgdGh1cyB0aGUgbmVlZCBmb3IgdGhlIHdoaWxlIGxvb3AuICAKKyAgICBiZSByZWFkLCB0aHVzIHRoZSBuZWVkIGZvciB0aGUgd2hpbGUgbG9vcC4KIAogICAgIE51bWJlcmluZyBzY2hlbWUgZm9yIHBhbmljIHVzZWQgYnkgVmxhZGltaXIgYW5kIEFuYXRvbHkoIEhhbnMgY29tcGxldGVseSBpZ25vcmVzIHRoaXMgc2NoZW1lLCBhbmQgY29uc2lkZXJzIGl0CiAgICAgcG9pbnRsZXNzIGNvbXBsZXhpdHkpOgpAQCAtMzUzLDE0ICszNTMsNDYgQEAKIGV4dGVybiBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpjdXJfdGI7CiAjZW5kaWYKIAotdm9pZCByZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWR1bXBfc3RhY2soKTsKKyNlbmRpZgorCWlmIChzYikKKwkJcGFuaWMoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyBwYW5pYyAoZGV2aWNlICVzKTogJXMlcyVzOiAlc1xuIiwKKwkJICAgICAgc2ItPnNfaWQsIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwKKwkJICAgICAgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisJZWxzZQorCQlwYW5pYyhLRVJOX1dBUk5JTkcgIlJFSVNFUkZTIHBhbmljOiAlcyVzJXM6ICVzXG4iLAorCQkgICAgICBpZCA/IGlkIDogIiIsIGlkID8gIiAiIDogIiIsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworfQogCi0JcGFuaWMoS0VSTl9FTUVSRyAiUkVJU0VSRlM6IHBhbmljIChkZXZpY2UgJXMpOiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOwordm9pZCBfX3JlaXNlcmZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOworCisJQlVHX09OKHNiID09IE5VTEwpOworCisJaWYgKHJlaXNlcmZzX2Vycm9yX3BhbmljKHNiKSkKKwkJX19yZWlzZXJmc19wYW5pYyhzYiwgaWQsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworCisJaWYgKGlkICYmIGlkWzBdKQorCQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUyBlcnJvciAoZGV2aWNlICVzKTogJXMgJXM6ICVzXG4iLAorCQkgICAgICAgc2ItPnNfaWQsIGlkLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTIGVycm9yIChkZXZpY2UgJXMpOiAlczogJXNcbiIsCisJCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybjsKKworCXJlaXNlcmZzX2luZm8oc2IsICJSZW1vdW50aW5nIGZpbGVzeXN0ZW0gcmVhZC1vbmx5XG4iKTsKKwlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJcmVpc2VyZnNfYWJvcnRfam91cm5hbChzYiwgLUVJTyk7CiB9CiAKIHZvaWQgcmVpc2VyZnNfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vLCBjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTM2OCwxOCArNDAwLDE4IEBACiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCiAJaWYgKHJlaXNlcmZzX2Vycm9yX3BhbmljKHNiKSkgewotCQlwYW5pYyhLRVJOX0NSSVQgIlJFSVNFUkZTOiBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsCi0JCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwkJcGFuaWMoS0VSTl9DUklUICJSRUlTRVJGUyBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsIHNiLT5zX2lkLAorCQkgICAgICBlcnJvcl9idWYpOwogCX0KIAotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwlpZiAocmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKFNCX0pPVVJOQUwoc2IpKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlM6IGFib3J0IChkZXZpY2UgJXMpOiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTIGFib3J0IChkZXZpY2UgJXMpOiAlc1xuIiwgc2ItPnNfaWQsCisJICAgICAgIGVycm9yX2J1Zik7CiAKIAlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JcmVpc2VyZnNfam91cm5hbF9hYm9ydChzYiwgZXJybm8pOworCXJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc2IsIGVycm5vKTsKIH0KIAogLyogdGhpcyBwcmludHMgaW50ZXJuYWwgbm9kZXMgKDQga2V5cy9pdGVtcyBpbiBsaW5lKSAoZGNfbnVtYmVyLApAQCAtNjgxLDEyICs3MTMsMTAgQEAKIAlibGtoID0gQl9CTEtfSEVBRChiaCk7CiAJbnIgPSBibGtoX25yX2l0ZW0oYmxraCk7CiAJaWYgKG5yID4gKGJoLT5iX3NpemUgLSBCTEtIX1NJWkUpIC8gSUhfU0laRSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjAxMDogY2hlY2tfbGVhZl9ibG9ja19oZWFkOiBpbnZhbGlkIGl0ZW0gbnVtYmVyICV6IiwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMTAiLCAiaW52YWxpZCBpdGVtIG51bWJlciAleiIsCiAJCQkgICAgICAgYmgpOwogCWlmIChibGtoX2ZyZWVfc3BhY2UoYmxraCkgPiBiaC0+Yl9zaXplIC0gQkxLSF9TSVpFIC0gSUhfU0laRSAqIG5yKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDIwOiBjaGVja19sZWFmX2Jsb2NrX2hlYWQ6IGludmFsaWQgZnJlZSBzcGFjZSAleiIsCisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDIwIiwgImludmFsaWQgZnJlZSBzcGFjZSAleiIsCiAJCQkgICAgICAgYmgpOwogCiB9CkBAIC02OTcsMjEgKzcyNywxNSBAQAogCiAJYmxraCA9IEJfQkxLX0hFQUQoYmgpOwogCWlmICghKEJfTEVWRUwoYmgpID4gRElTS19MRUFGX05PREVfTEVWRUwgJiYgQl9MRVZFTChiaCkgPD0gTUFYX0hFSUdIVCkpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMjU6IGNoZWNrX2ludGVybmFsX2Jsb2NrX2hlYWQ6IGludmFsaWQgbGV2ZWwgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMjUiLCAiaW52YWxpZCBsZXZlbCAleiIsIGJoKTsKIAogCWlmIChCX05SX0lURU1TKGJoKSA+IChiaC0+Yl9zaXplIC0gQkxLSF9TSVpFKSAvIElIX1NJWkUpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMzA6IGNoZWNrX2ludGVybmFsX2Jsb2NrX2hlYWQ6IGludmFsaWQgaXRlbSBudW1iZXIgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMzAiLCAiaW52YWxpZCBpdGVtIG51bWJlciAleiIsIGJoKTsKIAogCWlmIChCX0ZSRUVfU1BBQ0UoYmgpICE9CiAJICAgIGJoLT5iX3NpemUgLSBCTEtIX1NJWkUgLSBLRVlfU0laRSAqIEJfTlJfSVRFTVMoYmgpIC0KIAkgICAgRENfU0laRSAqIChCX05SX0lURU1TKGJoKSArIDEpKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDQwOiBjaGVja19pbnRlcm5hbF9ibG9ja19oZWFkOiBpbnZhbGlkIGZyZWUgc3BhY2UgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwNDAiLCAiaW52YWxpZCBmcmVlIHNwYWNlICV6IiwgYmgpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggMzcxNzNmYS4uOTIyOWU1NSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkgICAvKiBpbmNvcmUgZmllbGRzICovCiAJCSAgICJqXzFzdF9yZXNlcnZlZF9ibG9jazogXHQlaVxuIgogCQkgICAial9zdGF0ZTogXHQlbGlcbiIKLQkJICAgImpfdHJhbnNfaWQ6IFx0JWx1XG4iCisJCSAgICJqX3RyYW5zX2lkOiBcdCV1XG4iCiAJCSAgICJqX21vdW50X2lkOiBcdCVsdVxuIgogCQkgICAial9zdGFydDogXHQlbHVcbiIKIAkJICAgImpfbGVuOiBcdCVsdVxuIgpAQCAtMzI5LDcgKzMyOSw3IEBACiAJCSAgICJqX3djb3VudDogXHQlaVxuIgogCQkgICAial9iY291bnQ6IFx0JWx1XG4iCiAJCSAgICJqX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQ6IFx0JWx1XG4iCi0JCSAgICJqX2xhc3RfZmx1c2hfdHJhbnNfaWQ6IFx0JWx1XG4iCisJCSAgICJqX2xhc3RfZmx1c2hfdHJhbnNfaWQ6IFx0JXVcbiIKIAkJICAgImpfdHJhbnNfc3RhcnRfdGltZTogXHQlbGlcbiIKIAkJICAgImpfbGlzdF9iaXRtYXBfaW5kZXg6IFx0JWlcbiIKIAkJICAgImpfbXVzdF93YWl0OiBcdCVpXG4iCkBAIC00OTIsNyArNDkyLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmX19QSU5GTyhzYikubG9jayk7CiAJUkVJU0VSRlNfU0Ioc2IpLT5wcm9jZGlyID0gcHJvY19ta2RpcihiLCBwcm9jX2luZm9fcm9vdCk7CiAJaWYgKFJFSVNFUkZTX1NCKHNiKS0+cHJvY2RpcikgewotCQlSRUlTRVJGU19TQihzYiktPnByb2NkaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCVJFSVNFUkZTX1NCKHNiKS0+cHJvY2Rpci0+ZGF0YSA9IHNiOwogCQlhZGRfZmlsZShzYiwgInZlcnNpb24iLCBzaG93X3ZlcnNpb24pOwogCQlhZGRfZmlsZShzYiwgInN1cGVyIiwgc2hvd19zdXBlcik7CkBAIC01MDMsNyArNTAyLDcgQEAKIAkJYWRkX2ZpbGUoc2IsICJqb3VybmFsIiwgc2hvd19qb3VybmFsKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmczogY2Fubm90IGNyZWF0ZSAvcHJvYy8lcy8lcyIsCisJcmVpc2VyZnNfd2FybmluZyhzYiwgImNhbm5vdCBjcmVhdGUgL3Byb2MvJXMvJXMiLAogCQkJIHByb2NfaW5mb19yb290X25hbWUsIGIpOwogCXJldHVybiAxOwogfQpAQCAtNTU2LDExICs1NTUsOCBAQAogewogCWlmIChwcm9jX2luZm9fcm9vdCA9PSBOVUxMKSB7CiAJCXByb2NfaW5mb19yb290ID0gcHJvY19ta2Rpcihwcm9jX2luZm9fcm9vdF9uYW1lLCBOVUxMKTsKLQkJaWYgKHByb2NfaW5mb19yb290KSB7Ci0JCQlwcm9jX2luZm9fcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJfSBlbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJyZWlzZXJmczogY2Fubm90IGNyZWF0ZSAvcHJvYy8lcyIsCisJCWlmICghcHJvY19pbmZvX3Jvb3QpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImNhbm5vdCBjcmVhdGUgL3Byb2MvJXMiLAogCQkJCQkgcHJvY19pbmZvX3Jvb3RfbmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNjM0LDcgKzYzMCw3IEBACiAgKgogICovCiAKLS8qIAorLyoKICAqIE1ha2UgTGludXMgaGFwcHkuCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWluZGVudGF0aW9uLXN0eWxlOiAiSyZSIgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcmVzaXplLmMgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwppbmRleCBmNzFjMzk0Li4yMzhlOWQ5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9yZXNpemUuYworKysgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwpAQCAtMSw4ICsxLDggQEAKLS8qIAorLyoKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAotLyogCisvKgogICogV3JpdHRlbiBieSBBbGV4YW5kZXIgWmFyb2NoZW50Y2V2LgogICoKICAqIFRoZSBrZXJuZWwgcGFydCBvZiB0aGUgKG9uLWxpbmUpIHJlaXNlcmZzIHJlc2l6ZXIuCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCW1lbWNweShqYml0bWFwW2ldLmJpdG1hcHMsIGpiLT5iaXRtYXBzLCBjb3B5X3NpemUpOwogCiAJCQkvKiBqdXN0IGluIGNhc2UgdmZyZWUgc2NoZWR1bGVzIG9uIHVzLCBjb3B5IHRoZSBuZXcKLQkJCSAqKiBwb2ludGVyIGludG8gdGhlIGpvdXJuYWwgc3RydWN0IGJlZm9yZSBmcmVlaW5nIHRoZSAKKwkJCSAqKiBwb2ludGVyIGludG8gdGhlIGpvdXJuYWwgc3RydWN0IGJlZm9yZSBmcmVlaW5nIHRoZQogCQkJICoqIG9sZCBvbmUKIAkJCSAqLwogCQkJbm9kZV90bXAgPSBqYi0+Yml0bWFwczsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IDczYWFhMzMuLmQwMzZlZTUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtMjMsNyArMjMsNiBAQAogICogZ2V0X3JrZXkKICAqIGtleV9pbl9idWZmZXIKICAqIGRlY3JlbWVudF9iY291bnQKLSAqIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoCiAgKiByZWlzZXJmc19jaGVja19wYXRoCiAgKiBwYXRocmVsc2VfYW5kX3Jlc3RvcmUKICAqIHBhdGhyZWxzZQpAQCAtNTcsMjggKzU2LDI4IEBACiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAogLyogRG9lcyB0aGUgYnVmZmVyIGNvbnRhaW4gYSBkaXNrIGJsb2NrIHdoaWNoIGlzIGluIHRoZSB0cmVlLiAqLwotaW5saW5lIGludCBCX0lTX0lOX1RSRUUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgpCitpbmxpbmUgaW50IEJfSVNfSU5fVFJFRShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCi0JUkZBTFNFKEJfTEVWRUwocF9zX2JoKSA+IE1BWF9IRUlHSFQsCi0JICAgICAgICJQQVAtMTAxMDogYmxvY2sgKCViKSBoYXMgdG9vIGJpZyBsZXZlbCAoJXopIiwgcF9zX2JoLCBwX3NfYmgpOworCVJGQUxTRShCX0xFVkVMKGJoKSA+IE1BWF9IRUlHSFQsCisJICAgICAgICJQQVAtMTAxMDogYmxvY2sgKCViKSBoYXMgdG9vIGJpZyBsZXZlbCAoJXopIiwgYmgsIGJoKTsKIAotCXJldHVybiAoQl9MRVZFTChwX3NfYmgpICE9IEZSRUVfTEVWRUwpOworCXJldHVybiAoQl9MRVZFTChiaCkgIT0gRlJFRV9MRVZFTCk7CiB9CiAKIC8vCiAvLyB0byBnZXRzIGl0ZW0gaGVhZCBpbiBsZSBmb3JtCiAvLwotaW5saW5lIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqcF92X3RvLAotCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqcF92X2Zyb20pCitpbmxpbmUgdm9pZCBjb3B5X2l0ZW1faGVhZChzdHJ1Y3QgaXRlbV9oZWFkICp0bywKKwkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKmZyb20pCiB7Ci0JbWVtY3B5KHBfdl90bywgcF92X2Zyb20sIElIX1NJWkUpOworCW1lbWNweSh0bywgZnJvbSwgSUhfU0laRSk7CiB9CiAKIC8qIGsxIGlzIHBvaW50ZXIgdG8gb24tZGlzayBzdHJ1Y3R1cmUgd2hpY2ggaXMgc3RvcmVkIGluIGxpdHRsZS1lbmRpYW4KICAgIGZvcm0uIGsyIGlzIHBvaW50ZXIgdG8gY3B1IHZhcmlhYmxlLiBGb3Iga2V5IG9mIGl0ZW1zIG9mIHRoZSBzYW1lCiAgICBvYmplY3QgdGhpcyByZXR1cm5zIDAuCi0gICBSZXR1cm5zOiAtMSBpZiBrZXkxIDwga2V5MiAKKyAgIFJldHVybnM6IC0xIGlmIGtleTEgPCBrZXkyCiAgICAwIGlmIGtleTEgPT0ga2V5MgogICAgMSBpZiBrZXkxID4ga2V5MiAqLwogaW5saW5lIGludCBjb21wX3Nob3J0X2tleXMoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqbGVfa2V5LApAQCAtMTM2LDE1ICsxMzUsMTUgQEAKIGlubGluZSBpbnQgY29tcF9zaG9ydF9sZV9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmtleTEsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXkyKQogewotCV9fdTMyICpwX3NfMV91MzIsICpwX3NfMl91MzI7Ci0JaW50IG5fa2V5X2xlbmd0aCA9IFJFSVNFUkZTX1NIT1JUX0tFWV9MRU47CisJX191MzIgKmsxX3UzMiwgKmsyX3UzMjsKKwlpbnQga2V5X2xlbmd0aCA9IFJFSVNFUkZTX1NIT1JUX0tFWV9MRU47CiAKLQlwX3NfMV91MzIgPSAoX191MzIgKikga2V5MTsKLQlwX3NfMl91MzIgPSAoX191MzIgKikga2V5MjsKLQlmb3IgKDsgbl9rZXlfbGVuZ3RoLS07ICsrcF9zXzFfdTMyLCArK3Bfc18yX3UzMikgewotCQlpZiAobGUzMl90b19jcHUoKnBfc18xX3UzMikgPCBsZTMyX3RvX2NwdSgqcF9zXzJfdTMyKSkKKwlrMV91MzIgPSAoX191MzIgKikga2V5MTsKKwlrMl91MzIgPSAoX191MzIgKikga2V5MjsKKwlmb3IgKDsga2V5X2xlbmd0aC0tOyArK2sxX3UzMiwgKytrMl91MzIpIHsKKwkJaWYgKGxlMzJfdG9fY3B1KCprMV91MzIpIDwgbGUzMl90b19jcHUoKmsyX3UzMikpCiAJCQlyZXR1cm4gLTE7Ci0JCWlmIChsZTMyX3RvX2NwdSgqcF9zXzFfdTMyKSA+IGxlMzJfdG9fY3B1KCpwX3NfMl91MzIpKQorCQlpZiAobGUzMl90b19jcHUoKmsxX3UzMikgPiBsZTMyX3RvX2NwdSgqazJfdTMyKSkKIAkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3NSw1MiArMTc0LDUxIEBACiAgKiAgQmluYXJ5IHNlYXJjaCB0b29sa2l0IGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICBTZWFyY2ggZm9yIGFuIGl0ZW0gaW4gdGhlIGFycmF5IGJ5IHRoZSBpdGVtIGtleSAgICAgICAgICAgICAgICAgICAgICAgKgogICogIFJldHVybnM6ICAgIDEgaWYgZm91bmQsICAwIGlmIG5vdCBmb3VuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgKnBfbl9wb3MgPSBudW1iZXIgb2YgdGhlIHNlYXJjaGVkIGVsZW1lbnQgaWYgZm91bmQsIGVsc2UgdGhlICAgICoKLSAqICAgICAgICBudW1iZXIgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiBwX3Zfa2V5LiAgICAgICAgKgorICogICAgICAgICpwb3MgPSBudW1iZXIgb2YgdGhlIHNlYXJjaGVkIGVsZW1lbnQgaWYgZm91bmQsIGVsc2UgdGhlICAgICAgICAqCisgKiAgICAgICAgbnVtYmVyIG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4ga2V5LiAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZvciB0aG9zZSBub3QgZmFtaWxpYXIgd2l0aCBiaW5hcnkgc2VhcmNoOiBuX2xib3VuZCBpcyB0aGUgbGVmdG1vc3QgaXRlbSB0aGF0IGl0Ci0gY291bGQgYmUsIG5fcmJvdW5kIHRoZSByaWdodG1vc3QgaXRlbSB0aGF0IGl0IGNvdWxkIGJlLiAgV2UgZXhhbWluZSB0aGUgaXRlbQotIGhhbGZ3YXkgYmV0d2VlbiBuX2xib3VuZCBhbmQgbl9yYm91bmQsIGFuZCB0aGF0IHRlbGxzIHVzIGVpdGhlciB0aGF0IHdlIGNhbiBpbmNyZWFzZQotIG5fbGJvdW5kLCBvciBkZWNyZWFzZSBuX3Jib3VuZCwgb3IgdGhhdCB3ZSBoYXZlIGZvdW5kIGl0LCBvciBpZiBuX2xib3VuZCA8PSBuX3Jib3VuZCB0aGF0CisvKiBGb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggYmluYXJ5IHNlYXJjaDogbGJvdW5kIGlzIHRoZSBsZWZ0bW9zdCBpdGVtIHRoYXQgaXQKKyBjb3VsZCBiZSwgcmJvdW5kIHRoZSByaWdodG1vc3QgaXRlbSB0aGF0IGl0IGNvdWxkIGJlLiAgV2UgZXhhbWluZSB0aGUgaXRlbQorIGhhbGZ3YXkgYmV0d2VlbiBsYm91bmQgYW5kIHJib3VuZCwgYW5kIHRoYXQgdGVsbHMgdXMgZWl0aGVyIHRoYXQgd2UgY2FuIGluY3JlYXNlCisgbGJvdW5kLCBvciBkZWNyZWFzZSByYm91bmQsIG9yIHRoYXQgd2UgaGF2ZSBmb3VuZCBpdCwgb3IgaWYgbGJvdW5kIDw9IHJib3VuZCB0aGF0CiAgdGhlcmUgYXJlIG5vIHBvc3NpYmxlIGl0ZW1zLCBhbmQgd2UgaGF2ZSBub3QgZm91bmQgaXQuIFdpdGggZWFjaCBleGFtaW5hdGlvbiB3ZQogIGN1dCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGl0ZW1zIGl0IGNvdWxkIGJlIGJ5IG9uZSBtb3JlIHRoYW4gaGFsZiByb3VuZGVkIGRvd24sCiAgb3Igd2UgZmluZCBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJpbl9zZWFyY2goY29uc3Qgdm9pZCAqcF92X2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IuICAgICAgICAgICAgICAgICAgICovCi0JCQkgICAgIGNvbnN0IHZvaWQgKnBfdl9iYXNlLAkvKiBGaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gICAgICAgICAgICAgKi8KLQkJCSAgICAgaW50IHBfbl9udW0sCS8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkuICAgICAgICAqLwotCQkJICAgICBpbnQgcF9uX3dpZHRoLAkvKiBJdGVtIHNpemUgaW4gdGhlIGFycmF5LgotCQkJCQkJICAgc2VhcmNoZWQuIExlc3QgdGhlIHJlYWRlciBiZQotCQkJCQkJICAgY29uZnVzZWQsIG5vdGUgdGhhdCB0aGlzIGlzIGNyYWZ0ZWQKLQkJCQkJCSAgIGFzIGEgZ2VuZXJhbCBmdW5jdGlvbiwgYW5kIHdoZW4gaXQKLQkJCQkJCSAgIGlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIHRoZSBhcnJheQotCQkJCQkJICAgb2YgaXRlbSBoZWFkZXJzIGluIGEgbm9kZSwgcF9uX3dpZHRoCi0JCQkJCQkgICBpcyBhY3R1YWxseSB0aGUgaXRlbSBoZWFkZXIgc2l6ZSBub3QKLQkJCQkJCSAgIHRoZSBpdGVtIHNpemUuICAgICAgICAgICAgICAgICAgICAgICovCi0JCQkgICAgIGludCAqcF9uX3BvcwkvKiBOdW1iZXIgb2YgdGhlIHNlYXJjaGVkIGZvciBlbGVtZW50LiAqLworc3RhdGljIGlubGluZSBpbnQgYmluX3NlYXJjaChjb25zdCB2b2lkICprZXksCS8qIEtleSB0byBzZWFyY2ggZm9yLiAqLworCQkJICAgICBjb25zdCB2b2lkICpiYXNlLAkvKiBGaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gKi8KKwkJCSAgICAgaW50IG51bSwJLyogTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheS4gKi8KKwkJCSAgICAgaW50IHdpZHRoLAkvKiBJdGVtIHNpemUgaW4gdGhlIGFycmF5LgorCQkJCQkgICBzZWFyY2hlZC4gTGVzdCB0aGUgcmVhZGVyIGJlCisJCQkJCSAgIGNvbmZ1c2VkLCBub3RlIHRoYXQgdGhpcyBpcyBjcmFmdGVkCisJCQkJCSAgIGFzIGEgZ2VuZXJhbCBmdW5jdGlvbiwgYW5kIHdoZW4gaXQKKwkJCQkJICAgaXMgYXBwbGllZCBzcGVjaWZpY2FsbHkgdG8gdGhlIGFycmF5CisJCQkJCSAgIG9mIGl0ZW0gaGVhZGVycyBpbiBhIG5vZGUsIHdpZHRoCisJCQkJCSAgIGlzIGFjdHVhbGx5IHRoZSBpdGVtIGhlYWRlciBzaXplIG5vdAorCQkJCQkgICB0aGUgaXRlbSBzaXplLiAqLworCQkJICAgICBpbnQgKnBvcyAvKiBOdW1iZXIgb2YgdGhlIHNlYXJjaGVkIGZvciBlbGVtZW50LiAqLwogICAgICkKIHsKLQlpbnQgbl9yYm91bmQsIG5fbGJvdW5kLCBuX2o7CisJaW50IHJib3VuZCwgbGJvdW5kLCBqOwogCi0JZm9yIChuX2ogPSAoKG5fcmJvdW5kID0gcF9uX251bSAtIDEpICsgKG5fbGJvdW5kID0gMCkpIC8gMjsKLQkgICAgIG5fbGJvdW5kIDw9IG5fcmJvdW5kOyBuX2ogPSAobl9yYm91bmQgKyBuX2xib3VuZCkgLyAyKQorCWZvciAoaiA9ICgocmJvdW5kID0gbnVtIC0gMSkgKyAobGJvdW5kID0gMCkpIC8gMjsKKwkgICAgIGxib3VuZCA8PSByYm91bmQ7IGogPSAocmJvdW5kICsgbGJvdW5kKSAvIDIpCiAJCXN3aXRjaCAoY29tcF9rZXlzCi0JCQkoKHN0cnVjdCByZWlzZXJmc19rZXkgKikoKGNoYXIgKilwX3ZfYmFzZSArCi0JCQkJCQkgbl9qICogcF9uX3dpZHRoKSwKLQkJCSAoc3RydWN0IGNwdV9rZXkgKilwX3Zfa2V5KSkgeworCQkJKChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKChjaGFyICopYmFzZSArIGogKiB3aWR0aCksCisJCQkgKHN0cnVjdCBjcHVfa2V5ICopa2V5KSkgewogCQljYXNlIC0xOgotCQkJbl9sYm91bmQgPSBuX2ogKyAxOworCQkJbGJvdW5kID0gaiArIDE7CiAJCQljb250aW51ZTsKIAkJY2FzZSAxOgotCQkJbl9yYm91bmQgPSBuX2ogLSAxOworCQkJcmJvdW5kID0gaiAtIDE7CiAJCQljb250aW51ZTsKIAkJY2FzZSAwOgotCQkJKnBfbl9wb3MgPSBuX2o7CisJCQkqcG9zID0gajsKIAkJCXJldHVybiBJVEVNX0ZPVU5EOwkvKiBLZXkgZm91bmQgaW4gdGhlIGFycmF5LiAgKi8KIAkJfQogCiAJLyogYmluX3NlYXJjaCBkaWQgbm90IGZpbmQgZ2l2ZW4ga2V5LCBpdCByZXR1cm5zIHBvc2l0aW9uIG9mIGtleSwKIAkgICB0aGF0IGlzIG1pbmltYWwgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gb25lLiAqLwotCSpwX25fcG9zID0gbl9sYm91bmQ7CisJKnBvcyA9IGxib3VuZDsKIAlyZXR1cm4gSVRFTV9OT1RfRk9VTkQ7CiB9CiAKQEAgLTI0Myw5MCArMjQxLDg4IEBACiAgICBvZiB0aGUgcGF0aCwgYW5kIGdvaW5nIHVwd2FyZHMuICBXZSBtdXN0IGNoZWNrIHRoZSBwYXRoJ3MgdmFsaWRpdHkgYXQgZWFjaCBzdGVwLiAgSWYgdGhlIGtleSBpcyBub3QgaW4KICAgIHRoZSBwYXRoLCB0aGVyZSBpcyBubyBkZWxpbWl0aW5nIGtleSBpbiB0aGUgdHJlZSAoYnVmZmVyIGlzIGZpcnN0IG9yIGxhc3QgYnVmZmVyIGluIHRyZWUpLCBhbmQgaW4gdGhpcwogICAgY2FzZSB3ZSByZXR1cm4gYSBzcGVjaWFsIGtleSwgZWl0aGVyIE1JTl9LRVkgb3IgTUFYX0tFWS4gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoCi0JCQkJCQkgICpwX3NfY2hrX3BhdGgsCi0JCQkJCQkgIGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jawotCQkJCQkJICAqcF9zX3NiKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfbGtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCQkJICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuX3Bvc2l0aW9uLCBuX3BhdGhfb2Zmc2V0ID0gcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19wYXJlbnQ7CisJaW50IHBvc2l0aW9uLCBwYXRoX29mZnNldCA9IGNoa19wYXRoLT5wYXRoX2xlbmd0aDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwMTA6IGludmFsaWQgb2Zmc2V0IGluIHRoZSBwYXRoIik7CiAKIAkvKiBXaGlsZSBub3QgaGlnaGVyIGluIHBhdGggdGhhbiBmaXJzdCBlbGVtZW50LiAqLwotCXdoaWxlIChuX3BhdGhfb2Zmc2V0LS0gPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJd2hpbGUgKHBhdGhfb2Zmc2V0LS0gPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAKIAkJUkZBTFNFKCFidWZmZXJfdXB0b2RhdGUKLQkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgbl9wYXRoX29mZnNldCkpLAorCQkgICAgICAgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSksCiAJCSAgICAgICAiUEFQLTUwMjA6IHBhcmVudCBpcyBub3QgdXB0b2RhdGUiKTsKIAogCQkvKiBQYXJlbnQgYXQgdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlIG5vdy4gKi8KIAkJaWYgKCFCX0lTX0lOX1RSRUUKLQkJICAgIChwX3NfcGFyZW50ID0KLQkJICAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgbl9wYXRoX29mZnNldCkpKQorCQkgICAgKHBhcmVudCA9CisJCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgcGF0aF9vZmZzZXQpKSkKIAkJCXJldHVybiAmTUFYX0tFWTsKIAkJLyogQ2hlY2sgd2hldGhlciBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIGNvcnJlY3QuICovCi0JCWlmICgobl9wb3NpdGlvbiA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX2Noa19wYXRoLAotCQkJCQkgIG5fcGF0aF9vZmZzZXQpKSA+Ci0JCSAgICBCX05SX0lURU1TKHBfc19wYXJlbnQpKQorCQlpZiAoKHBvc2l0aW9uID0KKwkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihjaGtfcGF0aCwKKwkJCQkJICBwYXRoX29mZnNldCkpID4KKwkJICAgIEJfTlJfSVRFTVMocGFyZW50KSkKIAkJCXJldHVybiAmTUFYX0tFWTsKIAkJLyogQ2hlY2sgd2hldGhlciBwYXJlbnQgYXQgdGhlIHBhdGggcmVhbGx5IHBvaW50cyB0byB0aGUgY2hpbGQuICovCi0JCWlmIChCX05fQ0hJTERfTlVNKHBfc19wYXJlbnQsIG5fcG9zaXRpb24pICE9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwKLQkJCQkJbl9wYXRoX29mZnNldCArIDEpLT5iX2Jsb2NrbnIpCisJCWlmIChCX05fQ0hJTERfTlVNKHBhcmVudCwgcG9zaXRpb24pICE9CisJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLAorCQkJCQlwYXRoX29mZnNldCArIDEpLT5iX2Jsb2NrbnIpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIFJldHVybiBkZWxpbWl0aW5nIGtleSBpZiBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIG5vdCBlcXVhbCB0byB6ZXJvLiAqLwotCQlpZiAobl9wb3NpdGlvbikKLQkJCXJldHVybiBCX05fUERFTElNX0tFWShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uIC0gMSk7CisJCWlmIChwb3NpdGlvbikKKwkJCXJldHVybiBCX05fUERFTElNX0tFWShwYXJlbnQsIHBvc2l0aW9uIC0gMSk7CiAJfQogCS8qIFJldHVybiBNSU5fS0VZIGlmIHdlIGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUgYnVmZmVyIHRyZWUuICovCi0JaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+Ci0JICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHBfc19zYikpCisJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KKwkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0soc2IpKQogCQlyZXR1cm4gJk1JTl9LRVk7CiAJcmV0dXJuICZNQVhfS0VZOwogfQogCiAvKiBHZXQgZGVsaW1pdGluZyBrZXkgb2YgdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aCBhbmQgaXRzIHJpZ2h0IG5laWdoYm9yLiAqLwotaW5saW5lIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAotCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK2lubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuX3Bvc2l0aW9uLCBuX3BhdGhfb2Zmc2V0ID0gcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19wYXJlbnQ7CisJaW50IHBvc2l0aW9uLCBwYXRoX29mZnNldCA9IGNoa19wYXRoLT5wYXRoX2xlbmd0aDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwMzA6IGludmFsaWQgb2Zmc2V0IGluIHRoZSBwYXRoIik7CiAKLQl3aGlsZSAobl9wYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCXdoaWxlIChwYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCiAJCVJGQUxTRSghYnVmZmVyX3VwdG9kYXRlCi0JCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSwKKwkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpLAogCQkgICAgICAgIlBBUC01MDQwOiBwYXJlbnQgaXMgbm90IHVwdG9kYXRlIik7CiAKIAkJLyogUGFyZW50IGF0IHRoZSBwYXRoIGlzIG5vdCBpbiB0aGUgdHJlZSBub3cuICovCiAJCWlmICghQl9JU19JTl9UUkVFCi0JCSAgICAocF9zX3BhcmVudCA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSkKKwkJICAgIChwYXJlbnQgPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSkpCiAJCQlyZXR1cm4gJk1JTl9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19jaGtfcGF0aCwKLQkJCQkJICBuX3BhdGhfb2Zmc2V0KSkgPgotCQkgICAgQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKKwkJaWYgKChwb3NpdGlvbiA9CisJCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04oY2hrX3BhdGgsCisJCQkJCSAgcGF0aF9vZmZzZXQpKSA+CisJCSAgICBCX05SX0lURU1TKHBhcmVudCkpCiAJCQlyZXR1cm4gJk1JTl9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsCi0JCQkJCW5fcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwKKwkJCQkJcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBSZXR1cm4gZGVsaW1pdGluZyBrZXkgaWYgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBub3QgdGhlIGxhc3Qgb25lLiAqLwotCQlpZiAobl9wb3NpdGlvbiAhPSBCX05SX0lURU1TKHBfc19wYXJlbnQpKQotCQkJcmV0dXJuIEJfTl9QREVMSU1fS0VZKHBfc19wYXJlbnQsIG5fcG9zaXRpb24pOworCQlpZiAocG9zaXRpb24gIT0gQl9OUl9JVEVNUyhwYXJlbnQpKQorCQkJcmV0dXJuIEJfTl9QREVMSU1fS0VZKHBhcmVudCwgcG9zaXRpb24pOwogCX0KIAkvKiBSZXR1cm4gTUFYX0tFWSBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIGJ1ZmZlciB0cmVlLiAqLwotCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgotCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpKQorCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHNiKSkKIAkJcmV0dXJuICZNQVhfS0VZOwogCXJldHVybiAmTUlOX0tFWTsKIH0KQEAgLTMzNiw2MCArMzMyLDI5IEBACiAgICB0aGUgcGF0aC4gIFRoZXNlIGRlbGltaXRpbmcga2V5cyBhcmUgc3RvcmVkIGF0IGxlYXN0IG9uZSBsZXZlbCBhYm92ZSB0aGF0IGJ1ZmZlciBpbiB0aGUgdHJlZS4gSWYgdGhlCiAgICBidWZmZXIgaXMgdGhlIGZpcnN0IG9yIGxhc3Qgbm9kZSBpbiB0aGUgdHJlZSBvcmRlciB0aGVuIG9uZSBvZiB0aGUgZGVsaW1pdGluZyBrZXlzIG1heSBiZSBhYnNlbnQsIGFuZCBpbgogICAgdGhpcyBjYXNlIGdldF9sa2V5IGFuZCBnZXRfcmtleSByZXR1cm4gYSBzcGVjaWFsIGtleSB3aGljaCBpcyBNSU5fS0VZIG9yIE1BWF9LRVkuICovCi1zdGF0aWMgaW5saW5lIGludCBrZXlfaW5fYnVmZmVyKHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAkvKiBQYXRoIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgKi8KLQkJCQljb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgICovCi0JCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IJLyogU3VwZXIgYmxvY2sgcG9pbnRlci4gICAgICAgICAgICovCitzdGF0aWMgaW5saW5lIGludCBrZXlfaW5fYnVmZmVyKHN0cnVjdCB0cmVlcGF0aCAqY2hrX3BhdGgsCS8qIFBhdGggd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuICAqLworCQkJCWNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCS8qIEtleSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICAqLworCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IKICAgICApCiB7CiAKLQlSRkFMU0UoIXBfc19rZXkgfHwgcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQKLQkgICAgICAgfHwgcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aCA+IE1BWF9IRUlHSFQsCisJUkZBTFNFKCFrZXkgfHwgY2hrX3BhdGgtPnBhdGhfbGVuZ3RoIDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVAorCSAgICAgICB8fCBjaGtfcGF0aC0+cGF0aF9sZW5ndGggPiBNQVhfSEVJR0hULAogCSAgICAgICAiUEFQLTUwNTA6IHBvaW50ZXIgdG8gdGhlIGtleSglcCkgaXMgTlVMTCBvciBpbnZhbGlkIHBhdGggbGVuZ3RoKCVkKSIsCi0JICAgICAgIHBfc19rZXksIHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGgpOwotCVJGQUxTRSghUEFUSF9QTEFTVF9CVUZGRVIocF9zX2Noa19wYXRoKS0+Yl9iZGV2LAorCSAgICAgICBrZXksIGNoa19wYXRoLT5wYXRoX2xlbmd0aCk7CisJUkZBTFNFKCFQQVRIX1BMQVNUX0JVRkZFUihjaGtfcGF0aCktPmJfYmRldiwKIAkgICAgICAgIlBBUC01MDYwOiBkZXZpY2UgbXVzdCBub3QgYmUgTk9ERVYiKTsKIAotCWlmIChjb21wX2tleXMoZ2V0X2xrZXkocF9zX2Noa19wYXRoLCBwX3Nfc2IpLCBwX3Nfa2V5KSA9PSAxKQorCWlmIChjb21wX2tleXMoZ2V0X2xrZXkoY2hrX3BhdGgsIHNiKSwga2V5KSA9PSAxKQogCQkvKiBsZWZ0IGRlbGltaXRpbmcga2V5IGlzIGJpZ2dlciwgdGhhdCB0aGUga2V5IHdlIGxvb2sgZm9yICovCiAJCXJldHVybiAwOwotCS8vICBpZiAoIGNvbXBfa2V5cyhwX3Nfa2V5LCBnZXRfcmtleShwX3NfY2hrX3BhdGgsIHBfc19zYikpICE9IC0xICkKLQlpZiAoY29tcF9rZXlzKGdldF9ya2V5KHBfc19jaGtfcGF0aCwgcF9zX3NiKSwgcF9zX2tleSkgIT0gMSkKLQkJLyogcF9zX2tleSBtdXN0IGJlIGxlc3MgdGhhbiByaWdodCBkZWxpbWl0aWluZyBrZXkgKi8KKwkvKiAgaWYgKCBjb21wX2tleXMoa2V5LCBnZXRfcmtleShjaGtfcGF0aCwgc2IpKSAhPSAtMSApICovCisJaWYgKGNvbXBfa2V5cyhnZXRfcmtleShjaGtfcGF0aCwgc2IpLCBrZXkpICE9IDEpCisJCS8qIGtleSBtdXN0IGJlIGxlc3MgdGhhbiByaWdodCBkZWxpbWl0aWluZyBrZXkgKi8KIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKLWlubGluZSB2b2lkIGRlY3JlbWVudF9iY291bnQoc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgpCi17Ci0JaWYgKHBfc19iaCkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwX3NfYmgtPmJfY291bnQpKSkgewotCQkJcHV0X2JoKHBfc19iaCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAiUEFQLTUwNzA6IGRlY3JlbWVudF9iY291bnQ6IHRyeWluZyB0byBmcmVlIGZyZWUgYnVmZmVyICViIiwKLQkJCSAgICAgICBwX3NfYmgpOwotCX0KLX0KLQotLyogRGVjcmVtZW50IGJfY291bnQgZmllbGQgb2YgdGhlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiAqLwotdm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCkKLXsKLQlpbnQgbl9wYXRoX29mZnNldCA9IHBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7Ci0KLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCB8fAotCSAgICAgICBuX3BhdGhfb2Zmc2V0ID4gRVhURU5ERURfTUFYX0hFSUdIVCAtIDEsCi0JICAgICAgICJQQVAtNTA4MDogaW52YWxpZCBwYXRoIG9mZnNldCBvZiAlZCIsIG5fcGF0aF9vZmZzZXQpOwotCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQotCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3NlYXJjaF9wYXRoLCBuX3BhdGhfb2Zmc2V0LS0pOwotCQlkZWNyZW1lbnRfYmNvdW50KGJoKTsKLQl9Ci0JcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKLX0KLQogaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwKQogewogCVJGQUxTRShwLT5wYXRoX2xlbmd0aCAhPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCkBAIC0zOTcsNDAgKzM2MiwzOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZWxlYXNlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiBSZXN0b3JlIGRpcnR5IGJpdHMgY2xlYW4KLSoqIHdoZW4gcHJlcGFyaW5nIHRoZSBidWZmZXIgZm9yIHRoZSBsb2cKLSoqCi0qKiBvbmx5IGNhbGxlZCBmcm9tIGZpeF9ub2RlcygpCi0qLwotdm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCkKKy8qIERyb3AgdGhlIHJlZmVyZW5jZSB0byBlYWNoIGJ1ZmZlciBpbiBhIHBhdGggYW5kIHJlc3RvcmUKKyAqIGRpcnR5IGJpdHMgY2xlYW4gd2hlbiBwcmVwYXJpbmcgdGhlIGJ1ZmZlciBmb3IgdGhlIGxvZy4KKyAqIFRoaXMgdmVyc2lvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBmaXhfbm9kZXMoKSAqLwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpCiB7Ci0JaW50IG5fcGF0aF9vZmZzZXQgPSBwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOworCWludCBwYXRoX29mZnNldCA9IHNlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULAorCVJGQUxTRShwYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgImNsbS00MDAwOiBpbnZhbGlkIHBhdGggb2Zmc2V0Iik7CiAKLQl3aGlsZSAobl9wYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgewotCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzLAotCQkJCQkJIFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJCQkJCSAocF9zX3NlYXJjaF9wYXRoLAotCQkJCQkJICBuX3BhdGhfb2Zmc2V0KSk7Ci0JCWJyZWxzZShQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKSk7CisJd2hpbGUgKHBhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJCWJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihzZWFyY2hfcGF0aCwgcGF0aF9vZmZzZXQtLSk7CisJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHNiLCBiaCk7CisJCWJyZWxzZShiaCk7CiAJfQotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CisJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOwogfQogCi0vKiBSZWxlYXNlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiAqLwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCisvKiBEcm9wIHRoZSByZWZlcmVuY2UgdG8gZWFjaCBidWZmZXIgaW4gYSBwYXRoICovCit2b2lkIHBhdGhyZWxzZShzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKQogewotCWludCBuX3BhdGhfb2Zmc2V0ID0gcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKKwlpbnQgcGF0aF9vZmZzZXQgPSBzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCiAJICAgICAgICJQQVAtNTA5MDogaW52YWxpZCBwYXRoIG9mZnNldCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpCi0JCWJyZWxzZShQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKSk7CisJd2hpbGUgKHBhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKQorCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihzZWFyY2hfcGF0aCwgcGF0aF9vZmZzZXQtLSkpOwogCi0JcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKKwlzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CiB9CiAKIHN0YXRpYyBpbnQgaXNfbGVhZihjaGFyICpidWYsIGludCBibG9ja3NpemUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCkBAIC00NDQsMjMgKzQwNywyNCBAQAogCiAJYmxraCA9IChzdHJ1Y3QgYmxvY2tfaGVhZCAqKWJ1ZjsKIAlpZiAoYmxraF9sZXZlbChibGtoKSAhPSBESVNLX0xFQUZfTk9ERV9MRVZFTCkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc19sZWFmOiB0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgwIiwKKwkJCQkgInRoaXMgc2hvdWxkIGJlIGNhdWdodCBlYXJsaWVyIik7CiAJCXJldHVybiAwOwogCX0KIAogCW5yID0gYmxraF9ucl9pdGVtKGJsa2gpOwogCWlmIChuciA8IDEgfHwgbnIgPiAoKGJsb2Nrc2l6ZSAtIEJMS0hfU0laRSkgLyAoSUhfU0laRSArIE1JTl9JVEVNX0xFTikpKSB7CiAJCS8qIGl0ZW0gbnVtYmVyIGlzIHRvbyBiaWcgb3IgdG9vIHNtYWxsICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImlzX2xlYWY6IG5yX2l0ZW0gc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgxIiwKKwkJCQkgIm5yX2l0ZW0gc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWggPSAoc3RydWN0IGl0ZW1faGVhZCAqKShidWYgKyBCTEtIX1NJWkUpICsgbnIgLSAxOwogCXVzZWRfc3BhY2UgPSBCTEtIX1NJWkUgKyBJSF9TSVpFICogbnIgKyAoYmxvY2tzaXplIC0gaWhfbG9jYXRpb24oaWgpKTsKIAlpZiAodXNlZF9zcGFjZSAhPSBibG9ja3NpemUgLSBibGtoX2ZyZWVfc3BhY2UoYmxraCkpIHsKIAkJLyogZnJlZSBzcGFjZSBkb2VzIG5vdCBtYXRjaCB0byBjYWxjdWxhdGVkIGFtb3VudCBvZiB1c2Ugc3BhY2UgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiaXNfbGVhZjogZnJlZSBzcGFjZSBzZWVtcyB3cm9uZzogJXoiLAotCQkJCSBiaCk7CisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODIiLAorCQkJCSAiZnJlZSBzcGFjZSBzZWVtcyB3cm9uZzogJXoiLCBiaCk7CiAJCXJldHVybiAwOwogCX0KIAkvLyBGSVhNRTogaXQgaXNfbGVhZiB3aWxsIGhpdCBwZXJmb3JtYW5jZSB0b28gbXVjaCAtIHdlIG1heSBoYXZlCkBAIC00NzEsMjkgKzQzNSwyOSBAQAogCXByZXZfbG9jYXRpb24gPSBibG9ja3NpemU7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIGloKyspIHsKIAkJaWYgKGxlX2loX2tfdHlwZShpaCkgPT0gVFlQRV9BTlkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiB3cm9uZyBpdGVtIHR5cGUgZm9yIGl0ZW0gJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MyIsCisJCQkJCSAid3JvbmcgaXRlbSB0eXBlIGZvciBpdGVtICVoIiwKIAkJCQkJIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChpaF9sb2NhdGlvbihpaCkgPj0gYmxvY2tzaXplCiAJCSAgICB8fCBpaF9sb2NhdGlvbihpaCkgPCBJSF9TSVpFICogbnIpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nOiAlaCIsCisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg0IiwKKwkJCQkJICJpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nOiAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaWhfaXRlbV9sZW4oaWgpIDwgMQogCQkgICAgfHwgaWhfaXRlbV9sZW4oaWgpID4gTUFYX0lURU1fTEVOKGJsb2Nrc2l6ZSkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxlbmd0aCBzZWVtcyB3cm9uZzogJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NSIsCisJCQkJCSAiaXRlbSBsZW5ndGggc2VlbXMgd3Jvbmc6ICVoIiwKIAkJCQkJIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChwcmV2X2xvY2F0aW9uIC0gaWhfbG9jYXRpb24oaWgpICE9IGloX2l0ZW1fbGVuKGloKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkgImlzX2xlYWY6IGl0ZW0gbG9jYXRpb24gc2VlbXMgd3JvbmcgKHNlY29uZCBvbmUpOiAlaCIsCi0JCQkJCSBpaCk7CisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg2IiwKKwkJCQkJICJpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nICIKKwkJCQkJICIoc2Vjb25kIG9uZSk6ICVoIiwgaWgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcHJldl9sb2NhdGlvbiA9IGloX2xvY2F0aW9uKGloKTsKQEAgLTUxNCwyNCArNDc4LDIzIEBACiAJbnIgPSBibGtoX2xldmVsKGJsa2gpOwogCWlmIChuciA8PSBESVNLX0xFQUZfTk9ERV9MRVZFTCB8fCBuciA+IE1BWF9IRUlHSFQpIHsKIAkJLyogdGhpcyBsZXZlbCBpcyBub3QgcG9zc2libGUgZm9yIGludGVybmFsIG5vZGVzICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiB0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg3IiwKKwkJCQkgInRoaXMgc2hvdWxkIGJlIGNhdWdodCBlYXJsaWVyIik7CiAJCXJldHVybiAwOwogCX0KIAogCW5yID0gYmxraF9ucl9pdGVtKGJsa2gpOwogCWlmIChuciA+IChibG9ja3NpemUgLSBCTEtIX1NJWkUgLSBEQ19TSVpFKSAvIChLRVlfU0laRSArIERDX1NJWkUpKSB7CiAJCS8qIGZvciBpbnRlcm5hbCB3aGljaCBpcyBub3Qgcm9vdCB3ZSBtaWdodCBjaGVjayBtaW4gbnVtYmVyIG9mIGtleXMgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfaW50ZXJuYWw6IG51bWJlciBvZiBrZXkgc2VlbXMgd3Jvbmc6ICV6IiwKLQkJCQkgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg4IiwKKwkJCQkgIm51bWJlciBvZiBrZXkgc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAl1c2VkX3NwYWNlID0gQkxLSF9TSVpFICsgS0VZX1NJWkUgKiBuciArIERDX1NJWkUgKiAobnIgKyAxKTsKIAlpZiAodXNlZF9zcGFjZSAhPSBibG9ja3NpemUgLSBibGtoX2ZyZWVfc3BhY2UoYmxraCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfaW50ZXJuYWw6IGZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg5IiwKKwkJCQkgImZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gb25lIG1heSBpbWFnaW5lIG11Y2ggbW9yZSBjaGVja3MKQEAgLTU0Myw4ICs1MDYsOCBAQAogc3RhdGljIGludCBpc190cmVlX25vZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGxldmVsKQogewogCWlmIChCX0xFVkVMKGJoKSAhPSBsZXZlbCkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc190cmVlX25vZGU6IG5vZGUgbGV2ZWwgJWQgZG9lcyBub3QgbWF0Y2ggdG8gdGhlIGV4cGVjdGVkIG9uZSAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwOTAiLCAibm9kZSBsZXZlbCAlZCBkb2VzICIKKwkJCQkgIm5vdCBtYXRjaCB0byB0aGUgZXhwZWN0ZWQgb25lICVkIiwKIAkJCQkgQl9MRVZFTChiaCksIGxldmVsKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTgwLDEwICs1NDMsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQWxnb3JpdGhtICAgU2VhcmNoQnlLZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICBsb29rIGZvciBpdGVtIGluIHRoZSBEaXNrIFMrVHJlZSBieSBpdHMga2V5ICAgICAgICAgICAgICAgICoKLSAqIElucHV0OiAgcF9zX3NiICAgLSAgc3VwZXIgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICBwX3Nfa2V5ICAtIHBvaW50ZXIgdG8gdGhlIGtleSB0byBzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBJbnB1dDogIHNiICAgLSAgc3VwZXIgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAga2V5ICAtIHBvaW50ZXIgdG8gdGhlIGtleSB0byBzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogT3V0cHV0OiBJVEVNX0ZPVU5ELCBJVEVNX05PVF9GT1VORCBvciBJT19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgIHBfc19zZWFyY2hfcGF0aCAtIHBhdGggZnJvbSB0aGUgcm9vdCB0byB0aGUgbmVlZGVkIGxlYWYgICAgICAgICoKKyAqICAgICAgICAgc2VhcmNoX3BhdGggLSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIG5lZWRlZCBsZWFmICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIHVwIHRoZSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIGxlYWYgYXMgaXQKQEAgLTYwMCwyMiArNTYzLDIyIEBACiAgICBjb3JyZWN0bmVzcyBvZiB0aGUgdG9wIG9mIHRoZSBwYXRoIGJ1dCBuZWVkIG5vdCBiZSBjaGVja2VkIGZvciB0aGUKICAgIGNvcnJlY3RuZXNzIG9mIHRoZSBib3R0b20gb2YgdGhlIHBhdGggKi8KIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KLWludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHRvIHNlYXJjaC4gKi8KLQkJICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCwvKiBUaGlzIHN0cnVjdHVyZSB3YXMKK2ludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCS8qIEtleSB0byBzZWFyY2guICovCisJCSAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCwvKiBUaGlzIHN0cnVjdHVyZSB3YXMKIAkJCQkJCSAgIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQKIAkJCQkJCSAgIGJ5IHRoZSBjYWxsaW5nCiAJCQkJCQkgICBmdW5jdGlvbi4gSXQgaXMgZmlsbGVkIHVwCiAJCQkJCQkgICBieSB0aGlzIGZ1bmN0aW9uLiAgKi8KLQkJICBpbnQgbl9zdG9wX2xldmVsCS8qIEhvdyBmYXIgZG93biB0aGUgdHJlZSB0byBzZWFyY2guIFRvCisJCSAgaW50IHN0b3BfbGV2ZWwJLyogSG93IGZhciBkb3duIHRoZSB0cmVlIHRvIHNlYXJjaC4gVG8KIAkJCQkJICAgc3RvcCBhdCBsZWFmIGxldmVsIC0gc2V0IHRvCiAJCQkJCSAgIERJU0tfTEVBRl9OT0RFX0xFVkVMICovCiAgICAgKQogewotCWJfYmxvY2tucl90IG5fYmxvY2tfbnVtYmVyOworCWJfYmxvY2tucl90IGJsb2NrX251bWJlcjsKIAlpbnQgZXhwZWN0ZWRfbGV2ZWw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7Ci0Jc3RydWN0IHBhdGhfZWxlbWVudCAqcF9zX2xhc3RfZWxlbWVudDsKLQlpbnQgbl9ub2RlX2xldmVsLCBuX3JldHZhbDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBwYXRoX2VsZW1lbnQgKmxhc3RfZWxlbWVudDsKKwlpbnQgbm9kZV9sZXZlbCwgcmV0dmFsOwogCWludCByaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGU7CiAJaW50IGZzX2dlbjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlYWRhX2JoW1NFQVJDSF9CWV9LRVlfUkVBREFdOwpAQCAtNjIzLDgwICs1ODYsNzkgQEAKIAlpbnQgcmVhZGFfY291bnQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JaW50IG5fcmVwZWF0X2NvdW50ZXIgPSAwOworCWludCByZXBlYXRfY291bnRlciA9IDA7CiAjZW5kaWYKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5KTsKKwlQUk9DX0lORk9fSU5DKHNiLCBzZWFyY2hfYnlfa2V5KTsKIAogCS8qIEFzIHdlIGFkZCBlYWNoIG5vZGUgdG8gYSBwYXRoIHdlIGluY3JlYXNlIGl0cyBjb3VudC4gIFRoaXMgbWVhbnMgdGhhdAogCSAgIHdlIG11c3QgYmUgY2FyZWZ1bCB0byByZWxlYXNlIGFsbCBub2RlcyBpbiBhIHBhdGggYmVmb3JlIHdlIGVpdGhlcgogCSAgIGRpc2NhcmQgdGhlIHBhdGggc3RydWN0IG9yIHJlLXVzZSB0aGUgcGF0aCBzdHJ1Y3QsIGFzIHdlIGRvIGhlcmUuICovCiAKLQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChwX3Nfc2VhcmNoX3BhdGgpOworCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAKIAlyaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGUgPSAwOwogCiAJLyogV2l0aCBlYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3Agd2Ugc2VhcmNoIHRocm91Z2ggdGhlIGl0ZW1zIGluIHRoZQogCSAgIGN1cnJlbnQgbm9kZSwgYW5kIGNhbGN1bGF0ZSB0aGUgbmV4dCBjdXJyZW50IG5vZGUobmV4dCBwYXRoIGVsZW1lbnQpCiAJICAgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AuLiAqLwotCW5fYmxvY2tfbnVtYmVyID0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpOworCWJsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0soc2IpOwogCWV4cGVjdGVkX2xldmVsID0gLTE7CiAJd2hpbGUgKDEpIHsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQlpZiAoISgrK25fcmVwZWF0X2NvdW50ZXIgJSA1MDAwMCkpCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIlBBUC01MTAwOiBzZWFyY2hfYnlfa2V5OiAlczoiCi0JCQkJCSAidGhlcmUgd2VyZSAlZCBpdGVyYXRpb25zIG9mIHdoaWxlIGxvb3AgIgotCQkJCQkgImxvb2tpbmcgZm9yIGtleSAlSyIsCi0JCQkJCSBjdXJyZW50LT5jb21tLCBuX3JlcGVhdF9jb3VudGVyLAotCQkJCQkgcF9zX2tleSk7CisJCWlmICghKCsrcmVwZWF0X2NvdW50ZXIgJSA1MDAwMCkpCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiUEFQLTUxMDAiLAorCQkJCQkgIiVzOiB0aGVyZSB3ZXJlICVkIGl0ZXJhdGlvbnMgb2YgIgorCQkJCQkgIndoaWxlIGxvb3AgbG9va2luZyBmb3Iga2V5ICVLIiwKKwkJCQkJIGN1cnJlbnQtPmNvbW0sIHJlcGVhdF9jb3VudGVyLAorCQkJCQkga2V5KTsKICNlbmRpZgogCiAJCS8qIHByZXAgcGF0aCB0byBoYXZlIGFub3RoZXIgZWxlbWVudCBhZGRlZCB0byBpdC4gKi8KLQkJcF9zX2xhc3RfZWxlbWVudCA9Ci0JCSAgICBQQVRIX09GRlNFVF9QRUxFTUVOVChwX3Nfc2VhcmNoX3BhdGgsCi0JCQkJCSArK3Bfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgpOwotCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihwX3Nfc2IpOworCQlsYXN0X2VsZW1lbnQgPQorCQkgICAgUEFUSF9PRkZTRVRfUEVMRU1FTlQoc2VhcmNoX3BhdGgsCisJCQkJCSArK3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCk7CisJCWZzX2dlbiA9IGdldF9nZW5lcmF0aW9uKHNiKTsKIAogCQkvKiBSZWFkIHRoZSBuZXh0IHRyZWUgbm9kZSwgYW5kIHNldCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBwYXRoIHRvCiAJCSAgIGhhdmUgYSBwb2ludGVyIHRvIGl0LiAqLwotCQlpZiAoKHBfc19iaCA9IHBfc19sYXN0X2VsZW1lbnQtPnBlX2J1ZmZlciA9Ci0JCSAgICAgc2JfZ2V0YmxrKHBfc19zYiwgbl9ibG9ja19udW1iZXIpKSkgewotCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUocF9zX2JoKSAmJiByZWFkYV9jb3VudCA+IDEpIHsKLQkJCQlzZWFyY2hfYnlfa2V5X3JlYWRhKHBfc19zYiwgcmVhZGFfYmgsCisJCWlmICgoYmggPSBsYXN0X2VsZW1lbnQtPnBlX2J1ZmZlciA9CisJCSAgICAgc2JfZ2V0YmxrKHNiLCBibG9ja19udW1iZXIpKSkgeworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpICYmIHJlYWRhX2NvdW50ID4gMSkKKwkJCQlzZWFyY2hfYnlfa2V5X3JlYWRhKHNiLCByZWFkYV9iaCwKIAkJCQkJCSAgICByZWFkYV9ibG9ja3MsIHJlYWRhX2NvdW50KTsKLQkJCX0KLQkJCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZwX3NfYmgpOwotCQkJd2FpdF9vbl9idWZmZXIocF9zX2JoKTsKLQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkpCisJCQlsbF9yd19ibG9jayhSRUFELCAxLCAmYmgpOworCQkJd2FpdF9vbl9idWZmZXIoYmgpOworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQogCQkJCWdvdG8gaW9fZXJyb3I7CiAJCX0gZWxzZSB7CiAJCSAgICAgIGlvX2Vycm9yOgotCQkJcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aC0tOwotCQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJCQlzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgtLTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIAkJcmVhZGFfY291bnQgPSAwOwogCQlpZiAoZXhwZWN0ZWRfbGV2ZWwgPT0gLTEpCi0JCQlleHBlY3RlZF9sZXZlbCA9IFNCX1RSRUVfSEVJR0hUKHBfc19zYik7CisJCQlleHBlY3RlZF9sZXZlbCA9IFNCX1RSRUVfSEVJR0hUKHNiKTsKIAkJZXhwZWN0ZWRfbGV2ZWwtLTsKIAogCQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHNjaGVkdWxlIG9jY3VycmVkLiBXZSBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIGtleQogCQkgICB0byBzZWFyY2ggaXMgc3RpbGwgaW4gdGhlIHRyZWUgcm9vdGVkIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLiBJZgogCQkgICBub3QgdGhlbiByZXBlYXQgc2VhcmNoIGZyb20gdGhlIHJvb3QuICovCi0JCWlmIChmc19jaGFuZ2VkKGZzX2dlbiwgcF9zX3NiKSAmJgotCQkgICAgKCFCX0lTX0lOX1RSRUUocF9zX2JoKSB8fAotCQkgICAgIEJfTEVWRUwocF9zX2JoKSAhPSBleHBlY3RlZF9sZXZlbCB8fAotCQkgICAgICFrZXlfaW5fYnVmZmVyKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSwgcF9zX3NiKSkpIHsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5X2ZzX2NoYW5nZWQpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIHNlYXJjaF9ieV9rZXlfcmVzdGFydGVkKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLAorCQlpZiAoZnNfY2hhbmdlZChmc19nZW4sIHNiKSAmJgorCQkgICAgKCFCX0lTX0lOX1RSRUUoYmgpIHx8CisJCSAgICAgQl9MRVZFTChiaCkgIT0gZXhwZWN0ZWRfbGV2ZWwgfHwKKwkJICAgICAha2V5X2luX2J1ZmZlcihzZWFyY2hfcGF0aCwga2V5LCBzYikpKSB7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBzZWFyY2hfYnlfa2V5X2ZzX2NoYW5nZWQpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleV9yZXN0YXJ0ZWQpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwKIAkJCQkgICAgICBzYmtfcmVzdGFydGVkW2V4cGVjdGVkX2xldmVsIC0gMV0pOwotCQkJZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgocF9zX3NlYXJjaF9wYXRoKTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAKIAkJCS8qIEdldCB0aGUgcm9vdCBibG9jayBudW1iZXIgc28gdGhhdCB3ZSBjYW4gcmVwZWF0IHRoZSBzZWFyY2gKIAkJCSAgIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QuICovCi0JCQluX2Jsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0socF9zX3NiKTsKKwkJCWJsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0soc2IpOwogCQkJZXhwZWN0ZWRfbGV2ZWwgPSAtMTsKIAkJCXJpZ2h0X25laWdoYm9yX29mX2xlYWZfbm9kZSA9IDA7CiAKQEAgLTcwNCw1MyArNjY2LDUzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIG9ubHkgY2hlY2sgdGhhdCB0aGUga2V5IGlzIGluIHRoZSBidWZmZXIgaWYgcF9zX2tleSBpcyBub3QKKwkJLyogb25seSBjaGVjayB0aGF0IHRoZSBrZXkgaXMgaW4gdGhlIGJ1ZmZlciBpZiBrZXkgaXMgbm90CiAJCSAgIGVxdWFsIHRvIHRoZSBNQVhfS0VZLiBMYXR0ZXIgY2FzZSBpcyBvbmx5IHBvc3NpYmxlIGluCiAJCSAgICJmaW5pc2hfdW5maW5pc2hlZCgpIiBwcm9jZXNzaW5nIGR1cmluZyBtb3VudC4gKi8KLQkJUkZBTFNFKGNvbXBfa2V5cygmTUFYX0tFWSwgcF9zX2tleSkgJiYKLQkJICAgICAgICFrZXlfaW5fYnVmZmVyKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSwgcF9zX3NiKSwKKwkJUkZBTFNFKGNvbXBfa2V5cygmTUFYX0tFWSwga2V5KSAmJgorCQkgICAgICAgIWtleV9pbl9idWZmZXIoc2VhcmNoX3BhdGgsIGtleSwgc2IpLAogCQkgICAgICAgIlBBUC01MTMwOiBrZXkgaXMgbm90IGluIHRoZSBidWZmZXIiKTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJaWYgKGN1cl90YikgewogCQkJcHJpbnRfY3VyX3RiKCI1MTQwIik7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJQQVAtNTE0MDogc2VhcmNoX2J5X2tleTogc2NoZWR1bGUgb2NjdXJyZWQgaW4gZG9fYmFsYW5jZSEiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiUEFQLTUxNDAiLAorCQkJCSAgICAgICAic2NoZWR1bGUgb2NjdXJyZWQgaW4gZG9fYmFsYW5jZSEiKTsKIAkJfQogI2VuZGlmCiAKIAkJLy8gbWFrZSBzdXJlLCB0aGF0IHRoZSBub2RlIGNvbnRlbnRzIGxvb2sgbGlrZSBhIG5vZGUgb2YKIAkJLy8gY2VydGFpbiBsZXZlbAotCQlpZiAoIWlzX3RyZWVfbm9kZShwX3NfYmgsIGV4cGVjdGVkX2xldmVsKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJ2cy01MTUwOiBzZWFyY2hfYnlfa2V5OiAiCi0JCQkJCSAiaW52YWxpZCBmb3JtYXQgZm91bmQgaW4gYmxvY2sgJWxkLiBGc2NrPyIsCi0JCQkJCSBwX3NfYmgtPmJfYmxvY2tucik7Ci0JCQlwYXRocmVsc2UocF9zX3NlYXJjaF9wYXRoKTsKKwkJaWYgKCFpc190cmVlX25vZGUoYmgsIGV4cGVjdGVkX2xldmVsKSkgeworCQkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy01MTUwIiwKKwkJCQkgICAgICAgImludmFsaWQgZm9ybWF0IGZvdW5kIGluIGJsb2NrICVsZC4gIgorCQkJCSAgICAgICAiRnNjaz8iLCBiaC0+Yl9ibG9ja25yKTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIAogCQkvKiBvaywgd2UgaGF2ZSBhY3F1aXJlZCBuZXh0IGZvcm1hdHRlZCBub2RlIGluIHRoZSB0cmVlICovCi0JCW5fbm9kZV9sZXZlbCA9IEJfTEVWRUwocF9zX2JoKTsKKwkJbm9kZV9sZXZlbCA9IEJfTEVWRUwoYmgpOwogCi0JCVBST0NfSU5GT19CSF9TVEFUKHBfc19zYiwgcF9zX2JoLCBuX25vZGVfbGV2ZWwgLSAxKTsKKwkJUFJPQ19JTkZPX0JIX1NUQVQoc2IsIGJoLCBub2RlX2xldmVsIC0gMSk7CiAKLQkJUkZBTFNFKG5fbm9kZV9sZXZlbCA8IG5fc3RvcF9sZXZlbCwKKwkJUkZBTFNFKG5vZGVfbGV2ZWwgPCBzdG9wX2xldmVsLAogCQkgICAgICAgInZzLTUxNTI6IHRyZWUgbGV2ZWwgKCVkKSBpcyBsZXNzIHRoYW4gc3RvcCBsZXZlbCAoJWQpIiwKLQkJICAgICAgIG5fbm9kZV9sZXZlbCwgbl9zdG9wX2xldmVsKTsKKwkJICAgICAgIG5vZGVfbGV2ZWwsIHN0b3BfbGV2ZWwpOwogCi0JCW5fcmV0dmFsID0gYmluX3NlYXJjaChwX3Nfa2V5LCBCX05fUElURU1fSEVBRChwX3NfYmgsIDApLAotCQkJCSAgICAgIEJfTlJfSVRFTVMocF9zX2JoKSwKLQkJCQkgICAgICAobl9ub2RlX2xldmVsID09CisJCXJldHZhbCA9IGJpbl9zZWFyY2goa2V5LCBCX05fUElURU1fSEVBRChiaCwgMCksCisJCQkJICAgICAgQl9OUl9JVEVNUyhiaCksCisJCQkJICAgICAgKG5vZGVfbGV2ZWwgPT0KIAkJCQkgICAgICAgRElTS19MRUFGX05PREVfTEVWRUwpID8gSUhfU0laRSA6CiAJCQkJICAgICAgS0VZX1NJWkUsCi0JCQkJICAgICAgJihwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbikpOwotCQlpZiAobl9ub2RlX2xldmVsID09IG5fc3RvcF9sZXZlbCkgewotCQkJcmV0dXJuIG5fcmV0dmFsOworCQkJCSAgICAgICYobGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbikpOworCQlpZiAobm9kZV9sZXZlbCA9PSBzdG9wX2xldmVsKSB7CisJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAKIAkJLyogd2UgYXJlIG5vdCBpbiB0aGUgc3RvcCBsZXZlbCAqLwotCQlpZiAobl9yZXR2YWwgPT0gSVRFTV9GT1VORCkKKwkJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKQogCQkJLyogaXRlbSBoYXMgYmVlbiBmb3VuZCwgc28gd2UgY2hvb3NlIHRoZSBwb2ludGVyIHdoaWNoIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgZm91bmQgb25lICovCi0JCQlwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbisrOworCQkJbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbisrOwogCiAJCS8qIGlmIGl0ZW0gd2FzIG5vdCBmb3VuZCB3ZSBjaG9vc2UgdGhlIHBvc2l0aW9uIHdoaWNoIGlzIHRvCiAJCSAgIHRoZSBsZWZ0IG9mIHRoZSBmb3VuZCBpdGVtLiBUaGlzIHJlcXVpcmVzIG5vIGNvZGUsCkBAIC03NTksMjQgKzcyMSwyNCBAQAogCQkvKiBTbyB3ZSBoYXZlIGNob3NlbiBhIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IG5vZGUgd2hpY2ggaXMKIAkJICAgYW4gaW50ZXJuYWwgbm9kZS4gIE5vdyB3ZSBjYWxjdWxhdGUgY2hpbGQgYmxvY2sgbnVtYmVyIGJ5CiAJCSAgIHBvc2l0aW9uIGluIHRoZSBub2RlLiAqLwotCQluX2Jsb2NrX251bWJlciA9Ci0JCSAgICBCX05fQ0hJTERfTlVNKHBfc19iaCwgcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pOworCQlibG9ja19udW1iZXIgPQorCQkgICAgQl9OX0NISUxEX05VTShiaCwgbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbik7CiAKIAkJLyogaWYgd2UgYXJlIGdvaW5nIHRvIHJlYWQgbGVhZiBub2RlcywgdHJ5IGZvciByZWFkIGFoZWFkIGFzIHdlbGwgKi8KLQkJaWYgKChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQSkgJiYKLQkJICAgIG5fbm9kZV9sZXZlbCA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCArIDEpIHsKLQkJCWludCBwb3MgPSBwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbjsKLQkJCWludCBsaW1pdCA9IEJfTlJfSVRFTVMocF9zX2JoKTsKKwkJaWYgKChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBKSAmJgorCQkgICAgbm9kZV9sZXZlbCA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCArIDEpIHsKKwkJCWludCBwb3MgPSBsYXN0X2VsZW1lbnQtPnBlX3Bvc2l0aW9uOworCQkJaW50IGxpbWl0ID0gQl9OUl9JVEVNUyhiaCk7CiAJCQlzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpsZV9rZXk7CiAKLQkJCWlmIChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQV9CQUNLKQorCQkJaWYgKHNlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKIAkJCQlsaW1pdCA9IDA7CiAJCQl3aGlsZSAocmVhZGFfY291bnQgPCBTRUFSQ0hfQllfS0VZX1JFQURBKSB7CiAJCQkJaWYgKHBvcyA9PSBsaW1pdCkKIAkJCQkJYnJlYWs7CiAJCQkJcmVhZGFfYmxvY2tzW3JlYWRhX2NvdW50KytdID0KLQkJCQkgICAgQl9OX0NISUxEX05VTShwX3NfYmgsIHBvcyk7Ci0JCQkJaWYgKHBfc19zZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCisJCQkJICAgIEJfTl9DSElMRF9OVU0oYmgsIHBvcyk7CisJCQkJaWYgKHNlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKIAkJCQkJcG9zLS07CiAJCQkJZWxzZQogCQkJCQlwb3MrKzsKQEAgLTc4NCw5ICs3NDYsOSBAQAogCQkJCS8qCiAJCQkJICogY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIGluIHRoZSBzYW1lIG9iamVjdAogCQkJCSAqLwotCQkJCWxlX2tleSA9IEJfTl9QREVMSU1fS0VZKHBfc19iaCwgcG9zKTsKKwkJCQlsZV9rZXkgPSBCX05fUERFTElNX0tFWShiaCwgcG9zKTsKIAkJCQlpZiAobGUzMl90b19jcHUobGVfa2V5LT5rX29iamVjdGlkKSAhPQotCQkJCSAgICBwX3Nfa2V5LT5vbl9kaXNrX2tleS5rX29iamVjdGlkKSB7CisJCQkJICAgIGtleS0+b25fZGlza19rZXkua19vYmplY3RpZCkgewogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC03OTUsMTEgKzc1NywxMSBAQAogfQogCiAvKiBGb3JtIHRoZSBwYXRoIHRvIGFuIGl0ZW0gYW5kIHBvc2l0aW9uIGluIHRoaXMgaXRlbSB3aGljaCBjb250YWlucwotICAgZmlsZSBieXRlIGRlZmluZWQgYnkgcF9zX2tleS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBpdGVtCisgICBmaWxlIGJ5dGUgZGVmaW5lZCBieSBrZXkuIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbQogICAgY29ycmVzcG9uZGluZyB0byB0aGUga2V5LCB3ZSBwb2ludCB0aGUgcGF0aCB0byB0aGUgaXRlbSB3aXRoCi0gICBtYXhpbWFsIGtleSBsZXNzIHRoYW4gcF9zX2tleSwgYW5kICpwX25fcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQorICAgbWF4aW1hbCBrZXkgbGVzcyB0aGFuIGtleSwgYW5kICpwb3NfaW5faXRlbSBpcyBzZXQgdG8gb25lCiAgICBwYXN0IHRoZSBsYXN0IGVudHJ5L2J5dGUgaW4gdGhlIGl0ZW0uICBJZiBzZWFyY2hpbmcgZm9yIGVudHJ5IGluIGEKLSAgIGRpcmVjdG9yeSBpdGVtLCBhbmQgaXQgaXMgbm90IGZvdW5kLCAqcF9uX3Bvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKKyAgIGRpcmVjdG9yeSBpdGVtLCBhbmQgaXQgaXMgbm90IGZvdW5kLCAqcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQogICAgZW50cnkgbW9yZSB0aGFuIHRoZSBlbnRyeSB3aXRoIG1heGltYWwga2V5IHdoaWNoIGlzIGxlc3MgdGhhbiB0aGUKICAgIHNvdWdodCBrZXkuCiAKQEAgLTgxMCw0OCArNzcyLDQ4IEBACiAgICB1bml0cyBvZiBkaXJlY3RvcnkgZW50cmllcy4gICovCiAKIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KLWludCBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwJLyogUG9pbnRlciB0byB0aGUgc3VwZXIgYmxvY2suICAgICAgICAgICovCitpbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwJLyogUG9pbnRlciB0byB0aGUgc3VwZXIgYmxvY2suICAgICAgICAgICovCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfY3B1X2tleSwJLyogS2V5IHRvIHNlYXJjaCAoY3B1IHZhcmlhYmxlKSAgICAgICAgICovCi0JCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgJLyogRmlsbGVkIHVwIGJ5IHRoaXMgZnVuY3Rpb24uICAgICAgICAgICovCisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aAkvKiBGaWxsZWQgdXAgYnkgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgKi8KICAgICApCiB7CiAJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paDsJLyogcG9pbnRlciB0byBvbi1kaXNrIHN0cnVjdHVyZSAqLwotCWludCBuX2Jsa19zaXplOworCWludCBibGtfc2l6ZTsKIAlsb2ZmX3QgaXRlbV9vZmZzZXQsIG9mZnNldDsKIAlzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5IGRlOwogCWludCByZXR2YWw7CiAKIAkvKiBJZiBzZWFyY2hpbmcgZm9yIGRpcmVjdG9yeSBlbnRyeS4gKi8KIAlpZiAoaXNfZGlyZW50cnlfY3B1X2tleShwX2NwdV9rZXkpKQotCQlyZXR1cm4gc2VhcmNoX2J5X2VudHJ5X2tleShwX3Nfc2IsIHBfY3B1X2tleSwgcF9zX3NlYXJjaF9wYXRoLAorCQlyZXR1cm4gc2VhcmNoX2J5X2VudHJ5X2tleShzYiwgcF9jcHVfa2V5LCBzZWFyY2hfcGF0aCwKIAkJCQkJICAgJmRlKTsKIAogCS8qIElmIG5vdCBzZWFyY2hpbmcgZm9yIGRpcmVjdG9yeSBlbnRyeS4gKi8KIAogCS8qIElmIGl0ZW0gaXMgZm91bmQuICovCi0JcmV0dmFsID0gc2VhcmNoX2l0ZW0ocF9zX3NiLCBwX2NwdV9rZXksIHBfc19zZWFyY2hfcGF0aCk7CisJcmV0dmFsID0gc2VhcmNoX2l0ZW0oc2IsIHBfY3B1X2tleSwgc2VhcmNoX3BhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpCiAJCXJldHVybiByZXR2YWw7CiAJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7CiAKIAkJUkZBTFNFKCFpaF9pdGVtX2xlbgogCQkgICAgICAgKEJfTl9QSVRFTV9IRUFECi0JCQkoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3NlYXJjaF9wYXRoKSwKLQkJCSBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSkpLAorCQkJKFBBVEhfUExBU1RfQlVGRkVSKHNlYXJjaF9wYXRoKSwKKwkJCSBQQVRIX0xBU1RfUE9TSVRJT04oc2VhcmNoX3BhdGgpKSksCiAJCSAgICAgICAiUEFQLTUxNjU6IGl0ZW0gbGVuZ3RoIGVxdWFscyB6ZXJvIik7CiAKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IDA7CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9IDA7CiAJCXJldHVybiBQT1NJVElPTl9GT1VORDsKIAl9CiAKLQlSRkFMU0UoIVBBVEhfTEFTVF9QT1NJVElPTihwX3Nfc2VhcmNoX3BhdGgpLAorCVJGQUxTRSghUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSwKIAkgICAgICAgIlBBUC01MTcwOiBwb3NpdGlvbiBlcXVhbHMgemVybyIpOwogCiAJLyogSXRlbSBpcyBub3QgZm91bmQuIFNldCBwYXRoIHRvIHRoZSBwcmV2aW91cyBpdGVtLiAqLwogCXBfbGVfaWggPQotCSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3Nfc2VhcmNoX3BhdGgpLAotCQkJICAgLS1QQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSk7Ci0Jbl9ibGtfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHNlYXJjaF9wYXRoKSwKKwkJCSAgIC0tUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSk7CisJYmxrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAKIAlpZiAoY29tcF9zaG9ydF9rZXlzKCYocF9sZV9paC0+aWhfa2V5KSwgcF9jcHVfa2V5KSkgewogCQlyZXR1cm4gRklMRV9OT1RfRk9VTkQ7CkBAIC04NjMsMTAgKzgyNSwxMCBAQAogCiAJLyogTmVlZGVkIGJ5dGUgaXMgY29udGFpbmVkIGluIHRoZSBpdGVtIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGguICovCiAJaWYgKGl0ZW1fb2Zmc2V0IDw9IG9mZnNldCAmJgotCSAgICBpdGVtX29mZnNldCArIG9wX2J5dGVzX251bWJlcihwX2xlX2loLCBuX2Jsa19zaXplKSA+IG9mZnNldCkgewotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0gb2Zmc2V0IC0gaXRlbV9vZmZzZXQ7CisJICAgIGl0ZW1fb2Zmc2V0ICsgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIGJsa19zaXplKSA+IG9mZnNldCkgeworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSBvZmZzZXQgLSBpdGVtX29mZnNldDsKIAkJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7Ci0JCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpIC89IG5fYmxrX3NpemU7CisJCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgLz0gYmxrX3NpemU7CiAJCX0KIAkJcmV0dXJuIFBPU0lUSU9OX0ZPVU5EOwogCX0KQEAgLTg3NCwzMCArODM2LDMwIEBACiAJLyogTmVlZGVkIGJ5dGUgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZQogCSAgIHBhdGguIFNldCBwb3NfaW5faXRlbSBvdXQgb2YgdGhlIGl0ZW0uICovCiAJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0KKwkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpID0KIAkJICAgIGloX2l0ZW1fbGVuKHBfbGVfaWgpIC8gVU5GTV9QX1NJWkU7CiAJZWxzZQotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0gaWhfaXRlbV9sZW4ocF9sZV9paCk7CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9IGloX2l0ZW1fbGVuKHBfbGVfaWgpOwogCiAJcmV0dXJuIFBPU0lUSU9OX05PVF9GT1VORDsKIH0KIAogLyogQ29tcGFyZSBnaXZlbiBpdGVtIGFuZCBpdGVtIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGguICovCi1pbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgpCitpbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcGF0aCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gUEFUSF9QTEFTVF9CVUZGRVIocGF0aCk7CiAJc3RydWN0IGl0ZW1faGVhZCAqaWg7CiAKIAkvKiBMYXN0IGJ1ZmZlciBhdCB0aGUgcGF0aCBpcyBub3QgaW4gdGhlIHRyZWUuICovCi0JaWYgKCFCX0lTX0lOX1RSRUUocF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpKSkKKwlpZiAoIUJfSVNfSU5fVFJFRShiaCkpCiAJCXJldHVybiAxOwogCiAJLyogTGFzdCBwYXRoIHBvc2l0aW9uIGlzIGludmFsaWQuICovCi0JaWYgKFBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkgPj0gQl9OUl9JVEVNUyhwX3NfYmgpKQorCWlmIChQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgPj0gQl9OUl9JVEVNUyhiaCkpCiAJCXJldHVybiAxOwogCiAJLyogd2UgbmVlZCBvbmx5IHRvIGtub3csIHdoZXRoZXIgaXQgaXMgdGhlIHNhbWUgaXRlbSAqLwotCWloID0gZ2V0X2loKHBfc19wYXRoKTsKKwlpaCA9IGdldF9paChwYXRoKTsKIAlyZXR1cm4gbWVtY21wKHN0b3JlZF9paCwgaWgsIElIX1NJWkUpOwogfQogCkBAIC05MjQsOSArODg2LDkgQEAKIAl9CiAJLy8gbmV3IGZpbGUgZ2V0cyB0cnVuY2F0ZWQKIAlpZiAoZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oaW5vZGUpID09IEtFWV9GT1JNQVRfM182KSB7Ci0JCS8vIAorCQkvLwogCQlyb3VuZF9sZW4gPSBST1VORF9VUChuZXdfZmlsZV9sZW5ndGgpOwotCQkvKiB0aGlzIHdhcyBuX25ld19maWxlX2xlbmd0aCA8IGxlX2loIC4uLiAqLworCQkvKiB0aGlzIHdhcyBuZXdfZmlsZV9sZW5ndGggPCBsZV9paCAuLi4gKi8KIAkJaWYgKHJvdW5kX2xlbiA8IGxlX2loX2tfb2Zmc2V0KGxlX2loKSkgewogCQkJKmN1dF9zaXplID0gLShJSF9TSVpFICsgaWhfaXRlbV9sZW4obGVfaWgpKTsKIAkJCXJldHVybiBNX0RFTEVURTsJLyogRGVsZXRlIHRoaXMgaXRlbS4gKi8KQEAgLTk4Niw5NiArOTQ4LDk1IEBACiAgICAgSW4gY2FzZSBvZiBmaWxlIHRydW5jYXRlIGNhbGN1bGF0ZSB3aGV0aGVyIHRoaXMgaXRlbSBtdXN0IGJlIGRlbGV0ZWQvdHJ1bmNhdGVkIG9yIGxhc3QKICAgICB1bmZvcm1hdHRlZCBub2RlIG9mIHRoaXMgaXRlbSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGRpcmVjdCBpdGVtLgogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRldGVybWluYXRpb24gb2Ygd2hhdCBiYWxhbmNlIG1vZGUgdGhlIGNhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGVtcGxveS4gKi8KLXN0YXRpYyBjaGFyIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksIGludCAqcF9uX3JlbW92ZWQsCS8qIE51bWJlciBvZiB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCB3ZXJlIHJlbW92ZWQKK3N0YXRpYyBjaGFyIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LCBpbnQgKnJlbW92ZWQsCS8qIE51bWJlciBvZiB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCB3ZXJlIHJlbW92ZWQKIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICBmcm9tIGVuZCBvZiB0aGUgZmlsZS4gKi8KLQkJCQkgICAgICBpbnQgKnBfbl9jdXRfc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIG5fbmV3X2ZpbGVfbGVuZ3RoCS8qIE1BWF9LRVlfT0ZGU0VUIGluIGNhc2Ugb2YgZGVsZXRlLiAqLworCQkJCSAgICAgIGludCAqY3V0X3NpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfZmlsZV9sZW5ndGgJLyogTUFYX0tFWV9PRkZTRVQgaW4gY2FzZSBvZiBkZWxldGUuICovCiAgICAgKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gaW5vZGUtPmlfc2I7Ci0Jc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmggPSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKIAkvKiBTdGF0X2RhdGEgaXRlbS4gKi8KIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpIHsKIAotCQlSRkFMU0Uobl9uZXdfZmlsZV9sZW5ndGggIT0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSksCisJCVJGQUxTRShuZXdfZmlsZV9sZW5ndGggIT0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSksCiAJCSAgICAgICAiUEFQLTUyMTA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOwogCi0JCSpwX25fY3V0X3NpemUgPSAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX2xlX2loKSk7CisJCSpjdXRfc2l6ZSA9IC0oSUhfU0laRSArIGloX2l0ZW1fbGVuKHBfbGVfaWgpKTsKIAkJcmV0dXJuIE1fREVMRVRFOwogCX0KIAogCS8qIERpcmVjdG9yeSBpdGVtLiAqLwogCWlmIChpc19kaXJlbnRyeV9sZV9paChwX2xlX2loKSkKLQkJcmV0dXJuIHByZXBhcmVfZm9yX2RpcmVudHJ5X2l0ZW0ocF9zX3BhdGgsIHBfbGVfaWgsIGlub2RlLAotCQkJCQkJIG5fbmV3X2ZpbGVfbGVuZ3RoLAotCQkJCQkJIHBfbl9jdXRfc2l6ZSk7CisJCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlbnRyeV9pdGVtKHBhdGgsIHBfbGVfaWgsIGlub2RlLAorCQkJCQkJIG5ld19maWxlX2xlbmd0aCwKKwkJCQkJCSBjdXRfc2l6ZSk7CiAKIAkvKiBEaXJlY3QgaXRlbS4gKi8KIAlpZiAoaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZWN0X2l0ZW0ocF9zX3BhdGgsIHBfbGVfaWgsIGlub2RlLAotCQkJCQkgICAgICAgbl9uZXdfZmlsZV9sZW5ndGgsIHBfbl9jdXRfc2l6ZSk7CisJCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlY3RfaXRlbShwYXRoLCBwX2xlX2loLCBpbm9kZSwKKwkJCQkJICAgICAgIG5ld19maWxlX2xlbmd0aCwgY3V0X3NpemUpOwogCiAJLyogQ2FzZSBvZiBhbiBpbmRpcmVjdCBpdGVtLiAqLwogCXsKLQkgICAgaW50IGJsa19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwkgICAgaW50IGJsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCSAgICBzdHJ1Y3QgaXRlbV9oZWFkIHNfaWg7CiAJICAgIGludCBuZWVkX3JlX3NlYXJjaDsKIAkgICAgaW50IGRlbGV0ZSA9IDA7CiAJICAgIGludCByZXN1bHQgPSBNX0NVVDsKIAkgICAgaW50IHBvcyA9IDA7CiAKLQkgICAgaWYgKCBuX25ld19maWxlX2xlbmd0aCA9PSBtYXhfcmVpc2VyZnNfb2Zmc2V0IChpbm9kZSkgKSB7CisJICAgIGlmICggbmV3X2ZpbGVfbGVuZ3RoID09IG1heF9yZWlzZXJmc19vZmZzZXQgKGlub2RlKSApIHsKIAkJLyogcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCgpIGlzIGNhbGxlZCBieQogCQkgKiByZWlzZXJmc19kZWxldGVfaXRlbSgpICovCi0JCW5fbmV3X2ZpbGVfbGVuZ3RoID0gMDsKKwkJbmV3X2ZpbGVfbGVuZ3RoID0gMDsKIAkJZGVsZXRlID0gMTsKIAkgICAgfQogCiAJICAgIGRvIHsKIAkJbmVlZF9yZV9zZWFyY2ggPSAwOwotCQkqcF9uX2N1dF9zaXplID0gMDsKLQkJcF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpOwotCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7CisJCSpjdXRfc2l6ZSA9IDA7CisJCWJoID0gUEFUSF9QTEFTVF9CVUZGRVIocGF0aCk7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogCQlwb3MgPSBJX1VORk1fTlVNKCZzX2loKTsKIAotCQl3aGlsZSAobGVfaWhfa19vZmZzZXQgKCZzX2loKSArIChwb3MgLSAxKSAqIGJsa19zaXplID4gbl9uZXdfZmlsZV9sZW5ndGgpIHsKKwkJd2hpbGUgKGxlX2loX2tfb2Zmc2V0ICgmc19paCkgKyAocG9zIC0gMSkgKiBibGtfc2l6ZSA+IG5ld19maWxlX2xlbmd0aCkgewogCQkgICAgX19sZTMyICp1bmZtOwogCQkgICAgX191MzIgYmxvY2s7CiAKIAkJICAgIC8qIEVhY2ggdW5mb3JtYXR0ZWQgYmxvY2sgZGVsZXRpb24gbWF5IGludm9sdmUgb25lIGFkZGl0aW9uYWwKIAkJICAgICAqIGJpdG1hcCBibG9jayBpbnRvIHRoZSB0cmFuc2FjdGlvbiwgdGhlcmVieSB0aGUgaW5pdGlhbAogCQkgICAgICogam91cm5hbCBzcGFjZSByZXNlcnZhdGlvbiBtaWdodCBub3QgYmUgZW5vdWdoLiAqLwotCQkgICAgaWYgKCFkZWxldGUgJiYgKCpwX25fY3V0X3NpemUpICE9IDAgJiYKLQkJCXJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDwgSk9VUk5BTF9GT1JfRlJFRV9CTE9DS19BTkRfVVBEQVRFX1NEKSB7CisJCSAgICBpZiAoIWRlbGV0ZSAmJiAoKmN1dF9zaXplKSAhPSAwICYmCisJCQlyZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkKIAkJCWJyZWFrOwotCQkgICAgfQogCi0JCSAgICB1bmZtID0gKF9fbGUzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSArIHBvcyAtIDE7CisJCSAgICB1bmZtID0gKF9fbGUzMiAqKUJfSV9QSVRFTShiaCwgJnNfaWgpICsgcG9zIC0gMTsKIAkJICAgIGJsb2NrID0gZ2V0X2Jsb2NrX251bSh1bmZtLCAwKTsKIAogCQkgICAgaWYgKGJsb2NrICE9IDApIHsKLQkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLCBwX3NfYmgsIDEpOworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgYmgsIDEpOwogCQkJcHV0X2Jsb2NrX251bSh1bmZtLCAwLCAwKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSAodGgsIHBfc19zYiwgcF9zX2JoKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIGJoKTsKIAkJCXJlaXNlcmZzX2ZyZWVfYmxvY2sodGgsIGlub2RlLCBibG9jaywgMSk7CiAJCSAgICB9CiAKIAkJICAgIGNvbmRfcmVzY2hlZCgpOwogCi0JCSAgICBpZiAoaXRlbV9tb3ZlZCAoJnNfaWgsIHBfc19wYXRoKSkgIHsKKwkJICAgIGlmIChpdGVtX21vdmVkICgmc19paCwgcGF0aCkpICB7CiAJCQluZWVkX3JlX3NlYXJjaCA9IDE7CiAJCQlicmVhazsKIAkJICAgIH0KIAogCQkgICAgcG9zIC0tOwotCQkgICAgKCpwX25fcmVtb3ZlZCkgKys7Ci0JCSAgICAoKnBfbl9jdXRfc2l6ZSkgLT0gVU5GTV9QX1NJWkU7CisJCSAgICAoKnJlbW92ZWQpKys7CisJCSAgICAoKmN1dF9zaXplKSAtPSBVTkZNX1BfU0laRTsKIAogCQkgICAgaWYgKHBvcyA9PSAwKSB7Ci0JCQkoKnBfbl9jdXRfc2l6ZSkgLT0gSUhfU0laRTsKKwkJCSgqY3V0X3NpemUpIC09IElIX1NJWkU7CiAJCQlyZXN1bHQgPSBNX0RFTEVURTsKIAkJCWJyZWFrOwogCQkgICAgfQpAQCAtMTA4MywxMiArMTA0NCwxMiBAQAogCQkvKiBhIHRyaWNrLiAgSWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBsb2dnZWQsIHRoaXMgd2lsbCBkbyBub3RoaW5nLiAgSWYKIAkJKiogd2UndmUgYnJva2VuIHRoZSBsb29wIHdpdGhvdXQgbG9nZ2luZyBpdCwgaXQgd2lsbCByZXN0b3JlIHRoZQogCQkqKiBidWZmZXIgKi8KLQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3NiLCBwX3NfYmgpOworCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzYiwgYmgpOwogCSAgICB9IHdoaWxlIChuZWVkX3JlX3NlYXJjaCAmJgotCQkgICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCkgPT0gUE9TSVRJT05fRk9VTkQpOwotCSAgICBwb3NfaW5faXRlbShwX3NfcGF0aCkgPSBwb3MgKiBVTkZNX1BfU0laRTsKKwkJICAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKKwkgICAgcG9zX2luX2l0ZW0ocGF0aCkgPSBwb3MgKiBVTkZNX1BfU0laRTsKIAotCSAgICBpZiAoKnBfbl9jdXRfc2l6ZSA9PSAwKSB7CisJICAgIGlmICgqY3V0X3NpemUgPT0gMCkgewogCQkvKiBOb3RoaW5nIHdlcmUgY3V0LiBtYXliZSBjb252ZXJ0IGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSB0byB0aGUKIAkJICogZGlyZWN0IGl0ZW0/ICovCiAJCXJlc3VsdCA9IE1fQ09OVkVSVDsKQEAgLTEwOTgsNDUgKzEwNTksNDUgQEAKIH0KIAogLyogQ2FsY3VsYXRlIG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIGRlbGV0ZWQgb3IgY3V0IGR1cmluZyBiYWxhbmNlICovCi1zdGF0aWMgaW50IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBjaGFyIGNfbW9kZSkKK3N0YXRpYyBpbnQgY2FsY19kZWxldGVkX2J5dGVzX251bWJlcihzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgY2hhciBtb2RlKQogewotCWludCBuX2RlbF9zaXplOwotCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocF9zX3RiLT50Yl9wYXRoKTsKKwlpbnQgZGVsX3NpemU7CisJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRCh0Yi0+dGJfcGF0aCk7CiAKIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpCiAJCXJldHVybiAwOwogCi0Jbl9kZWxfc2l6ZSA9Ci0JICAgIChjX21vZGUgPT0KLQkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKHBfbGVfaWgpIDogLXBfc190Yi0+aW5zZXJ0X3NpemVbMF07CisJZGVsX3NpemUgPQorCSAgICAobW9kZSA9PQorCSAgICAgTV9ERUxFVEUpID8gaWhfaXRlbV9sZW4ocF9sZV9paCkgOiAtdGItPmluc2VydF9zaXplWzBdOwogCWlmIChpc19kaXJlbnRyeV9sZV9paChwX2xlX2loKSkgewotCQkvLyByZXR1cm4gRU1QVFlfRElSX1NJWkU7IC8qIFdlIGRlbGV0ZSBlbXR5IGRpcmVjdG9yaXMgb25seS4gKi8KLQkJLy8gd2UgY2FuJ3QgdXNlIEVNUFRZX0RJUl9TSVpFLCBhcyBvbGQgZm9ybWF0IGRpcnMgaGF2ZSBhIGRpZmZlcmVudAotCQkvLyBlbXB0eSBzaXplLiAgaWNrLiBGSVhNRSwgaXMgdGhpcyByaWdodD8KLQkJLy8KLQkJcmV0dXJuIG5fZGVsX3NpemU7CisJCS8qIHJldHVybiBFTVBUWV9ESVJfU0laRTsgV2UgZGVsZXRlIGVtdHkgZGlyZWN0b3JpcyBvbmx5LgorCQkgKiB3ZSBjYW4ndCB1c2UgRU1QVFlfRElSX1NJWkUsIGFzIG9sZCBmb3JtYXQgZGlycyBoYXZlIGEgZGlmZmVyZW50CisJCSAqIGVtcHR5IHNpemUuICBpY2suIEZJWE1FLCBpcyB0aGlzIHJpZ2h0PyAqLworCQlyZXR1cm4gZGVsX3NpemU7CiAJfQogCiAJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQluX2RlbF9zaXplID0gKG5fZGVsX3NpemUgLyBVTkZNX1BfU0laRSkgKiAoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3RiLT50Yl9wYXRoKS0+Yl9zaXplKTsJLy8gLSBnZXRfaWhfZnJlZV9zcGFjZSAocF9sZV9paCk7Ci0JcmV0dXJuIG5fZGVsX3NpemU7CisJCWRlbF9zaXplID0gKGRlbF9zaXplIC8gVU5GTV9QX1NJWkUpICoKKwkJCQkoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpLT5iX3NpemUpOworCXJldHVybiBkZWxfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF90Yl9zdHJ1Y3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsCi0JCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCSAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsIGludCBuX3NpemUpCisJCQkgICBzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGludCBzaXplKQogewogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQltZW1zZXQocF9zX3RiLCAnXDAnLCBzaXplb2Yoc3RydWN0IHRyZWVfYmFsYW5jZSkpOwotCXBfc190Yi0+dHJhbnNhY3Rpb25faGFuZGxlID0gdGg7Ci0JcF9zX3RiLT50Yl9zYiA9IHBfc19zYjsKLQlwX3NfdGItPnRiX3BhdGggPSBwX3NfcGF0aDsKLQlQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gTlVMTDsKLQlQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSA9IDA7Ci0JcF9zX3RiLT5pbnNlcnRfc2l6ZVswXSA9IG5fc2l6ZTsKKwltZW1zZXQodGIsICdcMCcsIHNpemVvZihzdHJ1Y3QgdHJlZV9iYWxhbmNlKSk7CisJdGItPnRyYW5zYWN0aW9uX2hhbmRsZSA9IHRoOworCXRiLT50Yl9zYiA9IHNiOworCXRiLT50Yl9wYXRoID0gcGF0aDsKKwlQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSBOVUxMOworCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSAwOworCXRiLT5pbnNlcnRfc2l6ZVswXSA9IHNpemU7CiB9CiAKIHZvaWQgcGFkZF9pdGVtKGNoYXIgKml0ZW0sIGludCB0b3RhbF9sZW5ndGgsIGludCBsZW5ndGgpCkBAIC0xMTc1LDczICsxMTM2LDc3IEBACiB9CiAjZW5kaWYKIAotLyogRGVsZXRlIG9iamVjdCBpdGVtLiAqLwotaW50IHJlaXNlcmZzX2RlbGV0ZV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAkvKiBQYXRoIHRvIHRoZSBkZWxldGVkIGl0ZW0uICovCi0JCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIGRlbGV0ZWQgaXRlbS4gICovCi0JCQkgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsCS8qIGlub2RlIGlzIGhlcmUganVzdCB0byB1cGRhdGUgaV9ibG9ja3MgYW5kIHF1b3RhcyAqLwotCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3VuX2JoKQotewkJCQkvKiBOVUxMIG9yIHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlci4gICAgKi8KLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKy8qIERlbGV0ZSBvYmplY3QgaXRlbS4KKyAqIHRoICAgICAgIC0gYWN0aXZlIHRyYW5zYWN0aW9uIGhhbmRsZQorICogcGF0aCAgICAgLSBwYXRoIHRvIHRoZSBkZWxldGVkIGl0ZW0KKyAqIGl0ZW1fa2V5IC0ga2V5IHRvIHNlYXJjaCBmb3IgdGhlIGRlbGV0ZWQgaXRlbQorICogaW5kb2RlICAgLSB1c2VkIGZvciB1cGRhdGluZyBpX2Jsb2NrcyBhbmQgcXVvdGFzCisgKiB1bl9iaCAgICAtIE5VTEwgb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyCisgKi8KK2ludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwKKwkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVuX2JoKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfZGVsX2JhbGFuY2U7CiAJc3RydWN0IGl0ZW1faGVhZCBzX2loOwogCXN0cnVjdCBpdGVtX2hlYWQgKnFfaWg7CiAJaW50IHF1b3RhX2N1dF9ieXRlczsKLQlpbnQgbl9yZXRfdmFsdWUsIG5fZGVsX3NpemUsIG5fcmVtb3ZlZDsKKwlpbnQgcmV0X3ZhbHVlLCBkZWxfc2l6ZSwgcmVtb3ZlZDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCWNoYXIgY19tb2RlOwotCWludCBuX2l0ZXIgPSAwOworCWNoYXIgbW9kZTsKKwlpbnQgaXRlciA9IDA7CiAjZW5kaWYKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2RlbF9iYWxhbmNlLCBwX3Nfc2IsIHBfc19wYXRoLAorCWluaXRfdGJfc3RydWN0KHRoLCAmc19kZWxfYmFsYW5jZSwgc2IsIHBhdGgsCiAJCSAgICAgICAwIC8qc2l6ZSBpcyB1bmtub3duICovICk7CiAKIAl3aGlsZSAoMSkgewotCQluX3JlbW92ZWQgPSAwOworCQlyZW1vdmVkID0gMDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQluX2l0ZXIrKzsKLQkJY19tb2RlID0KKwkJaXRlcisrOworCQltb2RlID0KICNlbmRpZgotCQkgICAgcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCwKLQkJCQkJICAgICAgcF9zX2l0ZW1fa2V5LCAmbl9yZW1vdmVkLAotCQkJCQkgICAgICAmbl9kZWxfc2l6ZSwKLQkJCQkJICAgICAgbWF4X3JlaXNlcmZzX29mZnNldChwX3NfaW5vZGUpKTsKKwkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIGlub2RlLCBwYXRoLAorCQkJCQkgICAgICBpdGVtX2tleSwgJnJlbW92ZWQsCisJCQkJCSAgICAgICZkZWxfc2l6ZSwKKwkJCQkJICAgICAgbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSkpOwogCi0JCVJGQUxTRShjX21vZGUgIT0gTV9ERUxFVEUsICJQQVAtNTMyMDogbW9kZSBtdXN0IGJlIE1fREVMRVRFIik7CisJCVJGQUxTRShtb2RlICE9IE1fREVMRVRFLCAiUEFQLTUzMjA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOwogCi0JCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpKTsKLQkJc19kZWxfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IG5fZGVsX3NpemU7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOworCQlzX2RlbF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gZGVsX3NpemU7CiAKLQkJbl9yZXRfdmFsdWUgPSBmaXhfbm9kZXMoTV9ERUxFVEUsICZzX2RlbF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKLQkJaWYgKG5fcmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCisJCXJldF92YWx1ZSA9IGZpeF9ub2RlcyhNX0RFTEVURSwgJnNfZGVsX2JhbGFuY2UsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCiAJCQlicmVhazsKIAotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgZGVsZXRlX2l0ZW1fcmVzdGFydGVkKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgZGVsZXRlX2l0ZW1fcmVzdGFydGVkKTsKIAogCQkvLyBmaWxlIHN5c3RlbSBjaGFuZ2VkLCByZXBlYXQgc2VhcmNoCi0JCW5fcmV0X3ZhbHVlID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCk7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBJT19FUlJPUikKKwkJcmV0X3ZhbHVlID0KKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCBpdGVtX2tleSwgcGF0aCk7CisJCWlmIChyZXRfdmFsdWUgPT0gSU9fRVJST1IpCiAJCQlicmVhazsKLQkJaWYgKG5fcmV0X3ZhbHVlID09IEZJTEVfTk9UX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJ2cy01MzQwOiByZWlzZXJmc19kZWxldGVfaXRlbTogIgorCQlpZiAocmV0X3ZhbHVlID09IEZJTEVfTk9UX0ZPVU5EKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtNTM0MCIsCiAJCQkJCSAibm8gaXRlbXMgb2YgdGhlIGZpbGUgJUsgZm91bmQiLAotCQkJCQkgcF9zX2l0ZW1fa2V5KTsKKwkJCQkJIGl0ZW1fa2V5KTsKIAkJCWJyZWFrOwogCQl9CiAJfQkJCS8qIHdoaWxlICgxKSAqLwogCi0JaWYgKG5fcmV0X3ZhbHVlICE9IENBUlJZX09OKSB7CisJaWYgKHJldF92YWx1ZSAhPSBDQVJSWV9PTikgewogCQl1bmZpeF9ub2Rlcygmc19kZWxfYmFsYW5jZSk7CiAJCXJldHVybiAwOwogCX0KIAkvLyByZWlzZXJmc19kZWxldGVfaXRlbSByZXR1cm5zIGl0ZW0gbGVuZ3RoIHdoZW4gc3VjY2VzcwotCW5fcmV0X3ZhbHVlID0gY2FsY19kZWxldGVkX2J5dGVzX251bWJlcigmc19kZWxfYmFsYW5jZSwgTV9ERUxFVEUpOwotCXFfaWggPSBnZXRfaWgocF9zX3BhdGgpOworCXJldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfZGVsX2JhbGFuY2UsIE1fREVMRVRFKTsKKwlxX2loID0gZ2V0X2loKHBhdGgpOwogCXF1b3RhX2N1dF9ieXRlcyA9IGloX2l0ZW1fbGVuKHFfaWgpOwogCiAJLyogaGFjayBzbyB0aGUgcXVvdGEgY29kZSBkb2Vzbid0IGhhdmUgdG8gZ3Vlc3MgaWYgdGhlIGZpbGUKQEAgLTEyNTAsMTUgKzEyMTUsMTUgQEAKIAkgKiogc3BsaXQgaW50byBtdWx0aXBsZSBpdGVtcywgYW5kIHdlIG9ubHkgd2FudCB0byBkZWNyZW1lbnQgZm9yCiAJICoqIHRoZSB1bmZtIG5vZGUgb25jZQogCSAqLwotCWlmICghU19JU0xOSyhwX3NfaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHFfaWgpKSB7Ci0JCWlmICgobGVfaWhfa19vZmZzZXQocV9paCkgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PSAxKSB7Ci0JCQlxdW90YV9jdXRfYnl0ZXMgPSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChxX2loKSkgeworCQlpZiAoKGxlX2loX2tfb2Zmc2V0KHFfaWgpICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PSAxKSB7CisJCQlxdW90YV9jdXRfYnl0ZXMgPSBzYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXF1b3RhX2N1dF9ieXRlcyA9IDA7CiAJCX0KIAl9CiAKLQlpZiAocF9zX3VuX2JoKSB7CisJaWYgKHVuX2JoKSB7CiAJCWludCBvZmY7CiAJCWNoYXIgKmRhdGE7CiAKQEAgLTEyNzYsMzEgKzEyNDEsMzEgQEAKIAkJICoqIFRoZSB1bmZvcm1hdHRlZCBub2RlIG11c3QgYmUgZGlydGllZCBsYXRlciBvbi4gIFdlIGNhbid0IGJlCiAJCSAqKiBzdXJlIGhlcmUgaWYgdGhlIGVudGlyZSB0YWlsIGhhcyBiZWVuIGRlbGV0ZWQgeWV0LgogCQkgKioKLQkJICoqIHBfc191bl9iaCBpcyBmcm9tIHRoZSBwYWdlIGNhY2hlIChhbGwgdW5mb3JtYXR0ZWQgbm9kZXMgYXJlCisJCSAqKiB1bl9iaCBpcyBmcm9tIHRoZSBwYWdlIGNhY2hlIChhbGwgdW5mb3JtYXR0ZWQgbm9kZXMgYXJlCiAJCSAqKiBmcm9tIHRoZSBwYWdlIGNhY2hlKSBhbmQgbWlnaHQgYmUgYSBoaWdobWVtIHBhZ2UuICBTbywgd2UKLQkJICoqIGNhbid0IHVzZSBwX3NfdW5fYmgtPmJfZGF0YS4KKwkJICoqIGNhbid0IHVzZSB1bl9iaC0+Yl9kYXRhLgogCQkgKiogLWNsbQogCQkgKi8KIAotCQlkYXRhID0ga21hcF9hdG9taWMocF9zX3VuX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKKwkJZGF0YSA9IGttYXBfYXRvbWljKHVuX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKIAkJb2ZmID0gKChsZV9paF9rX29mZnNldCgmc19paCkgLSAxKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSk7CiAJCW1lbWNweShkYXRhICsgb2ZmLAotCQkgICAgICAgQl9JX1BJVEVNKFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSwgJnNfaWgpLAotCQkgICAgICAgbl9yZXRfdmFsdWUpOworCQkgICAgICAgQl9JX1BJVEVNKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCAmc19paCksCisJCSAgICAgICByZXRfdmFsdWUpOwogCQlrdW5tYXBfYXRvbWljKGRhdGEsIEtNX1VTRVIwKTsKIAl9CiAJLyogUGVyZm9ybSBiYWxhbmNpbmcgYWZ0ZXIgYWxsIHJlc291cmNlcyBoYXZlIGJlZW4gY29sbGVjdGVkIGF0IG9uY2UuICovCiAJZG9fYmFsYW5jZSgmc19kZWxfYmFsYW5jZSwgTlVMTCwgTlVMTCwgTV9ERUxFVEUpOwogCiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKLQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgZGVsZXRlX2l0ZW0oKTogZnJlZWluZyAldSwgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOworCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOwogI2VuZGlmCi0JdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShwX3NfaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CisJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKIAogCS8qIFJldHVybiBkZWxldGVkIGJvZHkgbGVuZ3RoICovCi0JcmV0dXJuIG5fcmV0X3ZhbHVlOworCXJldHVybiByZXRfdmFsdWU7CiB9CiAKIC8qIFN1bW1hcnkgT2YgTWVjaGFuaXNtcyBGb3IgSGFuZGxpbmcgQ29sbGlzaW9ucyBCZXR3ZWVuIFByb2Nlc3NlczoKQEAgLTEzMzgsMTAgKzEzMDMsOSBAQAogCXdoaWxlICgxKSB7CiAJCXJldHZhbCA9IHNlYXJjaF9pdGVtKHRoLT50X3N1cGVyLCAmY3B1X2tleSwgJnBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgInZzLTUzNTA6IHJlaXNlcmZzX2RlbGV0ZV9zb2xpZF9pdGVtOiAiCi0JCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIGRlbGV0ZSAlSyIsCi0JCQkJCSAmY3B1X2tleSk7CisJCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgInZzLTUzNTAiLAorCQkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nICIKKwkJCQkgICAgICAgInRvIGRlbGV0ZSAlSyIsICZjcHVfa2V5KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXR2YWwgIT0gSVRFTV9GT1VORCkgewpAQCAtMTM1NSw5ICsxMzE5LDggQEAKIAkJCSAgICAgR0VUX0dFTkVSQVRJT05fTlVNQkVSKGxlX2tleV9rX29mZnNldAogCQkJCQkJICAgKGxlX2tleV92ZXJzaW9uKGtleSksCiAJCQkJCQkgICAga2V5KSkgPT0gMSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJCSAidnMtNTM1NTogcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW06ICVrIG5vdCBmb3VuZCIsCi0JCQkJCQkga2V5KTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLCAidnMtNTM1NSIsCisJCQkJCQkgIiVrIG5vdCBmb3VuZCIsIGtleSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoIXRiX2luaXQpIHsKQEAgLTEzODksOCArMTM1Miw3IEBACiAJCQlicmVhazsKIAkJfQogCQkvLyBJT19FUlJPUiwgTk9fRElTS19TUEFDRSwgZXRjCi0JCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJICJ2cy01MzYwOiByZWlzZXJmc19kZWxldGVfc29saWRfaXRlbTogIgorCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLCAidnMtNTM2MCIsCiAJCQkJICJjb3VsZCBub3QgZGVsZXRlICVLIGR1ZSB0byBmaXhfbm9kZXMgZmFpbHVyZSIsCiAJCQkJICZjcHVfa2V5KTsKIAkJdW5maXhfbm9kZXMoJnRiKTsKQEAgLTE0NjIsMzYgKzE0MjQsMzcgQEAKIH0KIAogc3RhdGljIGludCBtYXliZV9pbmRpcmVjdF90b19kaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkJICAgIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwKLQkJCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwgY2hhciAqcF9jX21vZGUpCisJCQkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LAorCQkJCSAgICBsb2ZmX3QgbmV3X2ZpbGVfc2l6ZSwgY2hhciAqbW9kZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKLQlpbnQgbl9ibG9ja19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJaW50IGJsb2NrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJaW50IGN1dF9ieXRlczsKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKLQlCVUdfT04obl9uZXdfZmlsZV9zaXplICE9IHBfc19pbm9kZS0+aV9zaXplKTsKKwlCVUdfT04obmV3X2ZpbGVfc2l6ZSAhPSBpbm9kZS0+aV9zaXplKTsKIAogCS8qIHRoZSBwYWdlIGJlaW5nIHNlbnQgaW4gY291bGQgYmUgTlVMTCBpZiB0aGVyZSB3YXMgYW4gaS9vIGVycm9yCiAJICoqIHJlYWRpbmcgaW4gdGhlIGxhc3QgYmxvY2suICBUaGUgdXNlciB3aWxsIGhpdCBwcm9ibGVtcyB0cnlpbmcgdG8KIAkgKiogcmVhZCB0aGUgZmlsZSwgYnV0IGZvciBub3cgd2UganVzdCBza2lwIHRoZSBpbmRpcmVjdDJkaXJlY3QKIAkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJnBfc19pbm9kZS0+aV9jb3VudCkgPiAxIHx8Ci0JICAgICF0YWlsX2hhc190b19iZV9wYWNrZWQocF9zX2lub2RlKSB8fAotCSAgICAhcGFnZSB8fCAoUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKLQkJLy8gbGVhdmUgdGFpbCBpbiBhbiB1bmZvcm1hdHRlZCBub2RlICAgIAotCQkqcF9jX21vZGUgPSBNX1NLSVBfQkFMQU5DSU5HOworCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpID4gMSB8fAorCSAgICAhdGFpbF9oYXNfdG9fYmVfcGFja2VkKGlub2RlKSB8fAorCSAgICAhcGFnZSB8fCAoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX25vcGFja19tYXNrKSkgeworCQkvKiBsZWF2ZSB0YWlsIGluIGFuIHVuZm9ybWF0dGVkIG5vZGUgKi8KKwkJKm1vZGUgPSBNX1NLSVBfQkFMQU5DSU5HOwogCQljdXRfYnl0ZXMgPQotCQkgICAgbl9ibG9ja19zaXplIC0gKG5fbmV3X2ZpbGVfc2l6ZSAmIChuX2Jsb2NrX3NpemUgLSAxKSk7Ci0JCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCSAgICBibG9ja19zaXplIC0gKG5ld19maWxlX3NpemUgJiAoYmxvY2tfc2l6ZSAtIDEpKTsKKwkJcGF0aHJlbHNlKHBhdGgpOwogCQlyZXR1cm4gY3V0X2J5dGVzOwogCX0KLQkvKiBQZXJtb3JtIHRoZSBjb252ZXJzaW9uIHRvIGEgZGlyZWN0X2l0ZW0uICovCi0JLypyZXR1cm4gaW5kaXJlY3RfdG9fZGlyZWN0IChwX3NfaW5vZGUsIHBfc19wYXRoLCBwX3NfaXRlbV9rZXksIG5fbmV3X2ZpbGVfc2l6ZSwgcF9jX21vZGUpOyAqLwotCXJldHVybiBpbmRpcmVjdDJkaXJlY3QodGgsIHBfc19pbm9kZSwgcGFnZSwgcF9zX3BhdGgsIHBfc19pdGVtX2tleSwKLQkJCSAgICAgICBuX25ld19maWxlX3NpemUsIHBfY19tb2RlKTsKKwkvKiBQZXJmb3JtIHRoZSBjb252ZXJzaW9uIHRvIGEgZGlyZWN0X2l0ZW0uICovCisJLyogcmV0dXJuIGluZGlyZWN0X3RvX2RpcmVjdChpbm9kZSwgcGF0aCwgaXRlbV9rZXksCisJCQkJICBuZXdfZmlsZV9zaXplLCBtb2RlKTsgKi8KKwlyZXR1cm4gaW5kaXJlY3QyZGlyZWN0KHRoLCBpbm9kZSwgcGFnZSwgcGF0aCwgaXRlbV9rZXksCisJCQkgICAgICAgbmV3X2ZpbGVfc2l6ZSwgbW9kZSk7CiB9CiAKIC8qIHdlIGRpZCBpbmRpcmVjdF90b19kaXJlY3QgY29udmVyc2lvbi4gQW5kIHdlIGhhdmUgaW5zZXJ0ZWQgZGlyZWN0CkBAIC0xNTE1LDggKzE0NzgsOCBAQAogCQkvKiBsb29rIGZvciB0aGUgbGFzdCBieXRlIG9mIHRoZSB0YWlsICovCiAJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShpbm9kZS0+aV9zYiwgJnRhaWxfa2V5LCBwYXRoKSA9PQogCQkgICAgUE9TSVRJT05fTk9UX0ZPVU5EKQotCQkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsCi0JCQkJICAgICAgICJ2cy01NjE1OiBpbmRpcmVjdF90b19kaXJlY3Rfcm9sbF9iYWNrOiBmb3VuZCBpbnZhbGlkIGl0ZW0iKTsKKwkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLCAidnMtNTYxNSIsCisJCQkJICAgICAgICJmb3VuZCBpbnZhbGlkIGl0ZW0iKTsKIAkJUkZBTFNFKHBhdGgtPnBvc19pbl9pdGVtICE9CiAJCSAgICAgICBpaF9pdGVtX2xlbihQQVRIX1BJVEVNX0hFQUQocGF0aCkpIC0gMSwKIAkJICAgICAgICJ2cy01NjE2OiBhcHBlbmRlZCBieXRlcyBmb3VuZCIpOwpAQCAtMTUzMywzOCArMTQ5NiwzOSBAQAogCQlzZXRfY3B1X2tleV9rX29mZnNldCgmdGFpbF9rZXksCiAJCQkJICAgICBjcHVfa2V5X2tfb2Zmc2V0KCZ0YWlsX2tleSkgLSByZW1vdmVkKTsKIAl9Ci0JcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCSAiaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjazogaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2sgZHVlIHRvIGxhY2sgb2YgZGlzayBzcGFjZSIpOworCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJyZWlzZXJmcy01MDkxIiwgImluZGlyZWN0X3RvX2RpcmVjdCAiCisJCQkgImNvbnZlcnNpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2sgZHVlIHRvICIKKwkJCSAibGFjayBvZiBkaXNrIHNwYWNlIik7CiAJLy9tYXJrX2ZpbGVfd2l0aG91dF90YWlsIChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiB9CiAKIC8qIChUcnVuY2F0ZSBvciBjdXQgZW50cnkpIG9yIGRlbGV0ZSBvYmplY3QgaXRlbS4gUmV0dXJucyA8IDAgb24gZmFpbHVyZSAqLwogaW50IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAotCQkJICAgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwKLQkJCSAgIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAotCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBuX25ld19maWxlX3NpemUpCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCisJCQkgICBzdHJ1Y3QgY3B1X2tleSAqaXRlbV9rZXksCisJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBuZXdfZmlsZV9zaXplKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX2lub2RlLT5pX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAkvKiBFdmVyeSBmdW5jdGlvbiB3aGljaCBpcyBnb2luZyB0byBjYWxsIGRvX2JhbGFuY2UgbXVzdCBmaXJzdAogCSAgIGNyZWF0ZSBhIHRyZWVfYmFsYW5jZSBzdHJ1Y3R1cmUuICBUaGVuIGl0IG11c3QgZmlsbCB1cCB0aGlzCiAJICAgc3RydWN0dXJlIGJ5IHVzaW5nIHRoZSBpbml0X3RiX3N0cnVjdCBhbmQgZml4X25vZGVzIGZ1bmN0aW9ucy4KIAkgICBBZnRlciB0aGF0IHdlIGNhbiBtYWtlIHRyZWUgYmFsYW5jaW5nLiAqLwogCXN0cnVjdCB0cmVlX2JhbGFuY2Ugc19jdXRfYmFsYW5jZTsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loOwotCWludCBuX2N1dF9zaXplID0gMCwJLyogQW1vdW50IHRvIGJlIGN1dC4gKi8KLQkgICAgbl9yZXRfdmFsdWUgPSBDQVJSWV9PTiwgbl9yZW1vdmVkID0gMCwJLyogTnVtYmVyIG9mIHRoZSByZW1vdmVkIHVuZm9ybWF0dGVkIG5vZGVzLiAqLwotCSAgICBuX2lzX2lub2RlX2xvY2tlZCA9IDA7Ci0JY2hhciBjX21vZGU7CQkvKiBNb2RlIG9mIHRoZSBiYWxhbmNlLiAqLworCWludCBjdXRfc2l6ZSA9IDAsCS8qIEFtb3VudCB0byBiZSBjdXQuICovCisJICAgIHJldF92YWx1ZSA9IENBUlJZX09OLCByZW1vdmVkID0gMCwJLyogTnVtYmVyIG9mIHRoZSByZW1vdmVkIHVuZm9ybWF0dGVkIG5vZGVzLiAqLworCSAgICBpc19pbm9kZV9sb2NrZWQgPSAwOworCWNoYXIgbW9kZTsJCS8qIE1vZGUgb2YgdGhlIGJhbGFuY2UuICovCiAJaW50IHJldHZhbDIgPSAtMTsKIAlpbnQgcXVvdGFfY3V0X2J5dGVzOwogCWxvZmZfdCB0YWlsX3BvcyA9IDA7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWluaXRfdGJfc3RydWN0KHRoLCAmc19jdXRfYmFsYW5jZSwgcF9zX2lub2RlLT5pX3NiLCBwX3NfcGF0aCwKLQkJICAgICAgIG5fY3V0X3NpemUpOworCWluaXRfdGJfc3RydWN0KHRoLCAmc19jdXRfYmFsYW5jZSwgaW5vZGUtPmlfc2IsIHBhdGgsCisJCSAgICAgICBjdXRfc2l6ZSk7CiAKIAkvKiBSZXBlYXQgdGhpcyBsb29wIHVudGlsIHdlIGVpdGhlciBjdXQgdGhlIGl0ZW0gd2l0aG91dCBuZWVkaW5nCiAJICAgdG8gYmFsYW5jZSwgb3Igd2UgZml4X25vZGVzIHdpdGhvdXQgc2NoZWR1bGUgb2NjdXJyaW5nICovCkBAIC0xNTc0LDE0NCArMTUzOCwxNDIgQEAKIAkJICAgZnJlZSB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCBhcmUgcG9pbnRlZCB0byBieSB0aGUgY3V0CiAJCSAgIHBvaW50ZXJzLiAqLwogCi0JCWNfbW9kZSA9Ci0JCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBwX3NfaW5vZGUsIHBfc19wYXRoLAotCQkJCQkgICAgICBwX3NfaXRlbV9rZXksICZuX3JlbW92ZWQsCi0JCQkJCSAgICAgICZuX2N1dF9zaXplLCBuX25ld19maWxlX3NpemUpOwotCQlpZiAoY19tb2RlID09IE1fQ09OVkVSVCkgeworCQltb2RlID0KKwkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIGlub2RlLCBwYXRoLAorCQkJCQkgICAgICBpdGVtX2tleSwgJnJlbW92ZWQsCisJCQkJCSAgICAgICZjdXRfc2l6ZSwgbmV3X2ZpbGVfc2l6ZSk7CisJCWlmIChtb2RlID09IE1fQ09OVkVSVCkgewogCQkJLyogY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gZGlyZWN0IGl0ZW0gb3IgbGVhdmUKIAkJCSAgIHRhaWwgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgKi8KLQkJCVJGQUxTRShuX3JldF92YWx1ZSAhPSBDQVJSWV9PTiwKKwkJCVJGQUxTRShyZXRfdmFsdWUgIT0gQ0FSUllfT04sCiAJCQkgICAgICAgIlBBUC01NTcwOiBjYW4gbm90IGNvbnZlcnQgdHdpY2UiKTsKIAotCQkJbl9yZXRfdmFsdWUgPQotCQkJICAgIG1heWJlX2luZGlyZWN0X3RvX2RpcmVjdCh0aCwgcF9zX2lub2RlLCBwYWdlLAotCQkJCQkJICAgICBwX3NfcGF0aCwgcF9zX2l0ZW1fa2V5LAotCQkJCQkJICAgICBuX25ld19maWxlX3NpemUsICZjX21vZGUpOwotCQkJaWYgKGNfbW9kZSA9PSBNX1NLSVBfQkFMQU5DSU5HKQorCQkJcmV0X3ZhbHVlID0KKwkJCSAgICBtYXliZV9pbmRpcmVjdF90b19kaXJlY3QodGgsIGlub2RlLCBwYWdlLAorCQkJCQkJICAgICBwYXRoLCBpdGVtX2tleSwKKwkJCQkJCSAgICAgbmV3X2ZpbGVfc2l6ZSwgJm1vZGUpOworCQkJaWYgKG1vZGUgPT0gTV9TS0lQX0JBTEFOQ0lORykKIAkJCQkvKiB0YWlsIGhhcyBiZWVuIGxlZnQgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgKi8KLQkJCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQkJcmV0dXJuIHJldF92YWx1ZTsKIAotCQkJbl9pc19pbm9kZV9sb2NrZWQgPSAxOworCQkJaXNfaW5vZGVfbG9ja2VkID0gMTsKIAogCQkJLyogcmVtb3Zpbmcgb2YgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHdpbGwgY2hhbmdlIHZhbHVlIHdlCiAJCQkgICBoYXZlIHRvIHJldHVybiB0byB0cnVuY2F0ZS4gU2F2ZSBpdCAqLwotCQkJcmV0dmFsMiA9IG5fcmV0X3ZhbHVlOwotCQkJLypyZXR2YWwyID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIChuX25ld19maWxlX3NpemUgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsgKi8KKwkJCXJldHZhbDIgPSByZXRfdmFsdWU7CisJCQkvKnJldHZhbDIgPSBzYi0+c19ibG9ja3NpemUgLSAobmV3X2ZpbGVfc2l6ZSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSk7ICovCiAKIAkJCS8qIFNvLCB3ZSBoYXZlIHBlcmZvcm1lZCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgY29udmVyc2lvbjoKIAkJCSAgIGluc2VydGluZyB0aGUgbmV3IGRpcmVjdCBpdGVtLiAgTm93IHdlIGFyZSByZW1vdmluZyB0aGUKIAkJCSAgIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyLiBTZXQga2V5IHRvIHNlYXJjaCBmb3IKIAkJCSAgIGl0LiAqLwotCQkJc2V0X2NwdV9rZXlfa190eXBlKHBfc19pdGVtX2tleSwgVFlQRV9JTkRJUkVDVCk7Ci0JCQlwX3NfaXRlbV9rZXktPmtleV9sZW5ndGggPSA0OwotCQkJbl9uZXdfZmlsZV9zaXplIC09Ci0JCQkgICAgKG5fbmV3X2ZpbGVfc2l6ZSAmIChwX3Nfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJdGFpbF9wb3MgPSBuX25ld19maWxlX3NpemU7Ci0JCQlzZXRfY3B1X2tleV9rX29mZnNldChwX3NfaXRlbV9rZXksIG5fbmV3X2ZpbGVfc2l6ZSArIDEpOworCQkJc2V0X2NwdV9rZXlfa190eXBlKGl0ZW1fa2V5LCBUWVBFX0lORElSRUNUKTsKKwkJCWl0ZW1fa2V5LT5rZXlfbGVuZ3RoID0gNDsKKwkJCW5ld19maWxlX3NpemUgLT0KKwkJCSAgICAobmV3X2ZpbGVfc2l6ZSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSk7CisJCQl0YWlsX3BvcyA9IG5ld19maWxlX3NpemU7CisJCQlzZXRfY3B1X2tleV9rX29mZnNldChpdGVtX2tleSwgbmV3X2ZpbGVfc2l6ZSArIDEpOwogCQkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5Ci0JCQkgICAgKHBfc19zYiwgcF9zX2l0ZW1fa2V5LAotCQkJICAgICBwX3NfcGF0aCkgPT0gUE9TSVRJT05fTk9UX0ZPVU5EKSB7Ci0JCQkJcHJpbnRfYmxvY2soUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpLCAzLAotCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAtIDEsCi0JCQkJCSAgICBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpICsgMSk7Ci0JCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCQkgICAgICAgIlBBUC01NTgwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiBpdGVtIHRvIGNvbnZlcnQgZG9lcyBub3QgZXhpc3QgKCVLKSIsCi0JCQkJCSAgICAgICBwX3NfaXRlbV9rZXkpOworCQkJICAgIChzYiwgaXRlbV9rZXksCisJCQkgICAgIHBhdGgpID09IFBPU0lUSU9OX05PVF9GT1VORCkgeworCQkJCXByaW50X2Jsb2NrKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCAzLAorCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpIC0gMSwKKwkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSArIDEpOworCQkJCXJlaXNlcmZzX3BhbmljKHNiLCAiUEFQLTU1ODAiLCAiaXRlbSB0byAiCisJCQkJCSAgICAgICAiY29udmVydCBkb2VzIG5vdCBleGlzdCAoJUspIiwKKwkJCQkJICAgICAgIGl0ZW1fa2V5KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChuX2N1dF9zaXplID09IDApIHsKLQkJCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCWlmIChjdXRfc2l6ZSA9PSAwKSB7CisJCQlwYXRocmVsc2UocGF0aCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXNfY3V0X2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0gPSBuX2N1dF9zaXplOworCQlzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gY3V0X3NpemU7CiAKLQkJbl9yZXRfdmFsdWUgPSBmaXhfbm9kZXMoY19tb2RlLCAmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCk7Ci0JCWlmIChuX3JldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQorCQlyZXRfdmFsdWUgPSBmaXhfbm9kZXMobW9kZSwgJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCiAJCQlicmVhazsKIAotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgY3V0X2Zyb21faXRlbV9yZXN0YXJ0ZWQpOworCQlQUk9DX0lORk9fSU5DKHNiLCBjdXRfZnJvbV9pdGVtX3Jlc3RhcnRlZCk7CiAKLQkJbl9yZXRfdmFsdWUgPQotCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkocF9zX3NiLCBwX3NfaXRlbV9rZXksIHBfc19wYXRoKTsKLQkJaWYgKG5fcmV0X3ZhbHVlID09IFBPU0lUSU9OX0ZPVU5EKQorCQlyZXRfdmFsdWUgPQorCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsIGl0ZW1fa2V5LCBwYXRoKTsKKwkJaWYgKHJldF92YWx1ZSA9PSBQT1NJVElPTl9GT1VORCkKIAkJCWNvbnRpbnVlOwogCi0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiUEFQLTU2MTA6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06IGl0ZW0gJUsgbm90IGZvdW5kIiwKLQkJCQkgcF9zX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC01NjEwIiwgIml0ZW0gJUsgbm90IGZvdW5kIiwKKwkJCQkgaXRlbV9rZXkpOwogCQl1bmZpeF9ub2Rlcygmc19jdXRfYmFsYW5jZSk7Ci0JCXJldHVybiAobl9yZXRfdmFsdWUgPT0gSU9fRVJST1IpID8gLUVJTyA6IC1FTk9FTlQ7CisJCXJldHVybiAocmV0X3ZhbHVlID09IElPX0VSUk9SKSA/IC1FSU8gOiAtRU5PRU5UOwogCX0JCQkvKiB3aGlsZSAqLwogCiAJLy8gY2hlY2sgZml4X25vZGVzIHJlc3VsdHMgKElPX0VSUk9SIG9yIE5PX0RJU0tfU1BBQ0UpCi0JaWYgKG5fcmV0X3ZhbHVlICE9IENBUlJZX09OKSB7Ci0JCWlmIChuX2lzX2lub2RlX2xvY2tlZCkgeworCWlmIChyZXRfdmFsdWUgIT0gQ0FSUllfT04pIHsKKwkJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQkJLy8gRklYTUU6IHRoaXMgc2VlbXMgdG8gYmUgbm90IG5lZWRlZDogd2UgYXJlIGFsd2F5cyBhYmxlCiAJCQkvLyB0byBjdXQgaXRlbQotCQkJaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjayh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCk7CisJCQlpbmRpcmVjdF90b19kaXJlY3Rfcm9sbF9iYWNrKHRoLCBpbm9kZSwgcGF0aCk7CiAJCX0KLQkJaWYgKG5fcmV0X3ZhbHVlID09IE5PX0RJU0tfU1BBQ0UpCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIk5PX0RJU0tfU1BBQ0UiKTsKKwkJaWYgKHJldF92YWx1ZSA9PSBOT19ESVNLX1NQQUNFKQorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTUwOTIiLAorCQkJCQkgIk5PX0RJU0tfU1BBQ0UiKTsKIAkJdW5maXhfbm9kZXMoJnNfY3V0X2JhbGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBnbyBhaGVhZCBhbmQgcGVyZm9ybSBiYWxhbmNpbmcgKi8KIAotCVJGQUxTRShjX21vZGUgPT0gTV9QQVNURSB8fCBjX21vZGUgPT0gTV9JTlNFUlQsICJpbnZhbGlkIG1vZGUiKTsKKwlSRkFMU0UobW9kZSA9PSBNX1BBU1RFIHx8IG1vZGUgPT0gTV9JTlNFUlQsICJpbnZhbGlkIG1vZGUiKTsKIAogCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIGN1dCBmcm9tIHRoZSBpdGVtLiAqLwogCXF1b3RhX2N1dF9ieXRlcyA9Ci0JICAgIChjX21vZGUgPT0KLQkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKGdldF9paChwX3NfcGF0aCkpIDogLXNfY3V0X2JhbGFuY2UuCisJICAgIChtb2RlID09CisJICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihnZXRfaWgocGF0aCkpIDogLXNfY3V0X2JhbGFuY2UuCiAJICAgIGluc2VydF9zaXplWzBdOwogCWlmIChyZXR2YWwyID09IC0xKQotCQluX3JldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfY3V0X2JhbGFuY2UsIGNfbW9kZSk7CisJCXJldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfY3V0X2JhbGFuY2UsIG1vZGUpOwogCWVsc2UKLQkJbl9yZXRfdmFsdWUgPSByZXR2YWwyOworCQlyZXRfdmFsdWUgPSByZXR2YWwyOwogCiAJLyogRm9yIGRpcmVjdCBpdGVtcywgd2Ugb25seSBjaGFuZ2UgdGhlIHF1b3RhIHdoZW4gZGVsZXRpbmcgdGhlIGxhc3QKIAkgKiogaXRlbS4KIAkgKi8KIAlwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHNfY3V0X2JhbGFuY2UudGJfcGF0aCk7Ci0JaWYgKCFTX0lTTE5LKHBfc19pbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgocF9sZV9paCkpIHsKLQkJaWYgKGNfbW9kZSA9PSBNX0RFTEVURSAmJgotCQkgICAgKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSkgPT0KKwlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7CisJCWlmIChtb2RlID09IE1fREVMRVRFICYmCisJCSAgICAobGVfaWhfa19vZmZzZXQocF9sZV9paCkgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpID09CiAJCSAgICAxKSB7CiAJCQkvLyBGSVhNRTogdGhpcyBpcyB0byBrZWVwIDMuNSBoYXBweQotCQkJUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gVTMyX01BWDsKLQkJCXF1b3RhX2N1dF9ieXRlcyA9IHBfc19zYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKKwkJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gVTMyX01BWDsKKwkJCXF1b3RhX2N1dF9ieXRlcyA9IHNiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOwogCQl9IGVsc2UgewogCQkJcXVvdGFfY3V0X2J5dGVzID0gMDsKIAkJfQogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlpZiAoaXNfaW5vZGVfbG9ja2VkKSB7CiAJCXN0cnVjdCBpdGVtX2hlYWQgKmxlX2loID0KIAkJICAgIFBBVEhfUElURU1fSEVBRChzX2N1dF9iYWxhbmNlLnRiX3BhdGgpOwogCQkvKiB3ZSBhcmUgZ29pbmcgdG8gY29tcGxldGUgaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24uIE1ha2UKIAkJICAgc3VyZSwgdGhhdCB3ZSBleGFjdGx5IHJlbW92ZSBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlcgogCQkgICBvZiB0aGUgaXRlbSAqLwogCQlpZiAoIWlzX2luZGlyZWN0X2xlX2loKGxlX2loKSkKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgInZzLTU2NTI6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06ICIKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTY1MiIsCiAJCQkJICAgICAgICJpdGVtIG11c3QgYmUgaW5kaXJlY3QgJWgiLCBsZV9paCk7CiAKLQkJaWYgKGNfbW9kZSA9PSBNX0RFTEVURSAmJiBpaF9pdGVtX2xlbihsZV9paCkgIT0gVU5GTV9QX1NJWkUpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJ2cy01NjUzOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiAiCi0JCQkJICAgICAgICJjb21wbGV0aW5nIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uIGluZGlyZWN0IGl0ZW0gJWggIgotCQkJCSAgICAgICAiYmVpbmcgZGVsZXRlZCBtdXN0IGJlIG9mIDQgYnl0ZSBsb25nIiwKLQkJCQkgICAgICAgbGVfaWgpOworCQlpZiAobW9kZSA9PSBNX0RFTEVURSAmJiBpaF9pdGVtX2xlbihsZV9paCkgIT0gVU5GTV9QX1NJWkUpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTMiLCAiY29tcGxldGluZyAiCisJCQkJICAgICAgICJpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBpbmRpcmVjdCAiCisJCQkJICAgICAgICJpdGVtICVoIGJlaW5nIGRlbGV0ZWQgbXVzdCBiZSBvZiAiCisJCQkJICAgICAgICI0IGJ5dGUgbG9uZyIsIGxlX2loKTsKIAotCQlpZiAoY19tb2RlID09IE1fQ1VUCisJCWlmIChtb2RlID09IE1fQ1VUCiAJCSAgICAmJiBzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdICE9IC1VTkZNX1BfU0laRSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAidnMtNTY1NDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogIgotCQkJCSAgICAgICAiY2FuIG5vdCBjb21wbGV0ZSBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBvZiAlaCAoQ1VULCBpbnNlcnRfc2l6ZT09JWQpIiwKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTY1NCIsICJjYW4gbm90IGNvbXBsZXRlICIKKwkJCQkgICAgICAgImluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uIG9mICVoICIKKwkJCQkgICAgICAgIihDVVQsIGluc2VydF9zaXplPT0lZCkiLAogCQkJCSAgICAgICBsZV9paCwgc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSk7CiAJCX0KIAkJLyogaXQgd291bGQgYmUgdXNlZnVsIHRvIG1ha2Ugc3VyZSwgdGhhdCByaWdodCBuZWlnaGJvcmluZwpAQCAtMTcxOSwyMyArMTY4MSwyMyBAQAogCX0KICNlbmRpZgogCi0JZG9fYmFsYW5jZSgmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCwgY19tb2RlKTsKLQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlkb19iYWxhbmNlKCZzX2N1dF9iYWxhbmNlLCBOVUxMLCBOVUxMLCBtb2RlKTsKKwlpZiAoaXNfaW5vZGVfbG9ja2VkKSB7CiAJCS8qIHdlJ3ZlIGRvbmUgYW4gaW5kaXJlY3QtPmRpcmVjdCBjb252ZXJzaW9uLiAgd2hlbiB0aGUgZGF0YSBibG9jawogCQkgKiogd2FzIGZyZWVkLCBpdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIGJsb2NrcyB0aGF0IG11c3QKIAkJICoqIGJlIGZsdXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLCBtYWtlIHN1cmUgdG8KIAkJICoqIHVubWFwIGFuZCBpbnZhbGlkYXRlIGl0CiAJCSAqLwogCQl1bm1hcF9idWZmZXJzKHBhZ2UsIHRhaWxfcG9zKTsKLQkJUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZsYWdzICY9IH5pX3BhY2tfb25fY2xvc2VfbWFzazsKKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJj0gfmlfcGFja19vbl9jbG9zZV9tYXNrOwogCX0KICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwotCXJlaXNlcmZzX2RlYnVnKHBfc19pbm9kZS0+aV9zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwlyZWlzZXJmc19kZWJ1Zyhpbm9kZS0+aV9zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJICAgICAgICJyZWlzZXJxdW90YSBjdXRfZnJvbV9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsICc/Jyk7CisJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIGlub2RlLT5pX3VpZCwgJz8nKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwotCXJldHVybiBuX3JldF92YWx1ZTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXJldHVybiByZXRfdmFsdWU7CiB9CiAKIHN0YXRpYyB2b2lkIHRydW5jYXRlX2RpcmVjdG9yeShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKQEAgLTE3NDMsOCArMTcwNSw3IEBACiB7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJaWYgKGlub2RlLT5pX25saW5rKQotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAidnMtNTY1NTogdHJ1bmNhdGVfZGlyZWN0b3J5OiBsaW5rIGNvdW50ICE9IDAiKTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy01NjU1IiwgImxpbmsgY291bnQgIT0gMCIpOwogCiAJc2V0X2xlX2tleV9rX29mZnNldChLRVlfRk9STUFUXzNfNSwgSU5PREVfUEtFWShpbm9kZSksIERPVF9PRkZTRVQpOwogCXNldF9sZV9rZXlfa190eXBlKEtFWV9GT1JNQVRfM181LCBJTk9ERV9QS0VZKGlub2RlKSwgVFlQRV9ESVJFTlRSWSk7CkBAIC0xNzU2LDggKzE3MTcsOCBAQAogCiAvKiBUcnVuY2F0ZSBmaWxlIHRvIHRoZSBuZXcgc2l6ZS4gTm90ZSwgdGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdHJhbnNhY3Rpb24KICAgIGFscmVhZHkgc3RhcnRlZCAqLwotaW50IHJlaXNlcmZzX2RvX3RydW5jYXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwJLyogLT5pX3NpemUgY29udGFpbnMgbmV3Ci0JCQkJCQkJCQkJCQkgICBzaXplICovCitpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCS8qIC0+aV9zaXplIGNvbnRhaW5zIG5ldyBzaXplICovCiAJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCS8qIHVwIHRvIGRhdGUgZm9yIGxhc3QgYmxvY2sgKi8KIAkJCSBpbnQgdXBkYXRlX3RpbWVzdGFtcHMJLyogd2hlbiBpdCBpcyBjYWxsZWQgYnkKIAkJCQkJCSAgIGZpbGVfcmVsZWFzZSB0byBjb252ZXJ0CkBAIC0xNzY4LDQ3ICsxNzI5LDQ1IEBACiAJSU5JVElBTElaRV9QQVRIKHNfc2VhcmNoX3BhdGgpOwkvKiBQYXRoIHRvIHRoZSBjdXJyZW50IG9iamVjdCBpdGVtLiAqLwogCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWg7CS8qIFBvaW50ZXIgdG8gYW4gaXRlbSBoZWFkZXIuICovCiAJc3RydWN0IGNwdV9rZXkgc19pdGVtX2tleTsJLyogS2V5IHRvIHNlYXJjaCBmb3IgYSBwcmV2aW91cyBmaWxlIGl0ZW0uICovCi0JbG9mZl90IG5fZmlsZV9zaXplLAkvKiBPbGQgZmlsZSBzaXplLiAqLwotCSBuX25ld19maWxlX3NpemU7CS8qIE5ldyBmaWxlIHNpemUuICovCi0JaW50IG5fZGVsZXRlZDsJCS8qIE51bWJlciBvZiBkZWxldGVkIG9yIHRydW5jYXRlZCBieXRlcy4gKi8KKwlsb2ZmX3QgZmlsZV9zaXplLAkvKiBPbGQgZmlsZSBzaXplLiAqLworCSBuZXdfZmlsZV9zaXplOwkvKiBOZXcgZmlsZSBzaXplLiAqLworCWludCBkZWxldGVkOwkJLyogTnVtYmVyIG9mIGRlbGV0ZWQgb3IgdHJ1bmNhdGVkIGJ5dGVzLiAqLwogCWludCByZXR2YWw7CiAJaW50IGVyciA9IDA7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAlpZiAoIQotCSAgICAoU19JU1JFRyhwX3NfaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihwX3NfaW5vZGUtPmlfbW9kZSkKLQkgICAgIHx8IFNfSVNMTksocF9zX2lub2RlLT5pX21vZGUpKSkKKwkgICAgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKQorCSAgICAgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCiAJCXJldHVybiAwOwogCi0JaWYgKFNfSVNESVIocF9zX2lub2RlLT5pX21vZGUpKSB7CisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJLy8gZGVsZXRpb24gb2YgZGlyZWN0b3J5IC0gbm8gbmVlZCB0byB1cGRhdGUgdGltZXN0YW1wcwotCQl0cnVuY2F0ZV9kaXJlY3RvcnkodGgsIHBfc19pbm9kZSk7CisJCXRydW5jYXRlX2RpcmVjdG9yeSh0aCwgaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBHZXQgbmV3IGZpbGUgc2l6ZS4gKi8KLQluX25ld19maWxlX3NpemUgPSBwX3NfaW5vZGUtPmlfc2l6ZTsKKwluZXdfZmlsZV9zaXplID0gaW5vZGUtPmlfc2l6ZTsKIAogCS8vIEZJWE1FOiBub3RlLCB0aGF0IGtleSB0eXBlIGlzIHVuaW1wb3J0YW50IGhlcmUKLQltYWtlX2NwdV9rZXkoJnNfaXRlbV9rZXksIHBfc19pbm9kZSwgbWF4X3JlaXNlcmZzX29mZnNldChwX3NfaW5vZGUpLAorCW1ha2VfY3B1X2tleSgmc19pdGVtX2tleSwgaW5vZGUsIG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAogCQkgICAgIFRZUEVfRElSRUNULCAzKTsKIAogCXJldHZhbCA9Ci0JICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19pbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCisJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KGlub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKIAkJCQkgICAgICAgJnNfc2VhcmNoX3BhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJICJ2cy01NjU3OiByZWlzZXJmc19kb190cnVuY2F0ZTogIgotCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIHRydW5jYXRlICVLIiwKLQkJCQkgJnNfaXRlbV9rZXkpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTU2NTciLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gdHJ1bmNhdGUgJUsiLAorCQkJICAgICAgICZzX2l0ZW1fa2V5KTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChyZXR2YWwgPT0gUE9TSVRJT05fRk9VTkQgfHwgcmV0dmFsID09IEZJTEVfTk9UX0ZPVU5EKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAiUEFQLTU2NjA6IHJlaXNlcmZzX2RvX3RydW5jYXRlOiAiCi0JCQkJICJ3cm9uZyByZXN1bHQgJWQgb2Ygc2VhcmNoIGZvciAlSyIsIHJldHZhbCwKLQkJCQkgJnNfaXRlbV9rZXkpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgIlBBUC01NjYwIiwKKwkJCSAgICAgICAid3JvbmcgcmVzdWx0ICVkIG9mIHNlYXJjaCBmb3IgJUsiLCByZXR2YWwsCisJCQkgICAgICAgJnNfaXRlbV9rZXkpOwogCiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMTgxOSw1NiArMTc3OCw1NiBAQAogCS8qIEdldCByZWFsIGZpbGUgc2l6ZSAodG90YWwgbGVuZ3RoIG9mIGFsbCBmaWxlIGl0ZW1zKSAqLwogCXBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQoJnNfc2VhcmNoX3BhdGgpOwogCWlmIChpc19zdGF0ZGF0YV9sZV9paChwX2xlX2loKSkKLQkJbl9maWxlX3NpemUgPSAwOworCQlmaWxlX3NpemUgPSAwOwogCWVsc2UgewogCQlsb2ZmX3Qgb2Zmc2V0ID0gbGVfaWhfa19vZmZzZXQocF9sZV9paCk7CiAJCWludCBieXRlcyA9Ci0JCSAgICBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgcF9zX2lub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCSAgICBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAogCQkvKiB0aGlzIG1heSBtaXNtYXRjaCB3aXRoIHJlYWwgZmlsZSBzaXplOiBpZiBsYXN0IGRpcmVjdCBpdGVtCiAJCSAgIGhhZCBubyBwYWRkaW5nIHplcm9zIGFuZCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgaGFkIG5vIGZyZWUKIAkJICAgc3BhY2UsIHRoaXMgZmlsZSB3b3VsZCBoYXZlIHRoaXMgZmlsZSBzaXplICovCi0JCW5fZmlsZV9zaXplID0gb2Zmc2V0ICsgYnl0ZXMgLSAxOworCQlmaWxlX3NpemUgPSBvZmZzZXQgKyBieXRlcyAtIDE7CiAJfQogCS8qCiAJICogYXJlIHdlIGRvaW5nIGEgZnVsbCB0cnVuY2F0ZSBvciBkZWxldGUsIGlmIHNvCiAJICoga2ljayBpbiB0aGUgcmVhZGEgY29kZQogCSAqLwotCWlmIChuX25ld19maWxlX3NpemUgPT0gMCkKKwlpZiAobmV3X2ZpbGVfc2l6ZSA9PSAwKQogCQlzX3NlYXJjaF9wYXRoLnJlYWRhID0gUEFUSF9SRUFEQSB8IFBBVEhfUkVBREFfQkFDSzsKIAotCWlmIChuX2ZpbGVfc2l6ZSA9PSAwIHx8IG5fZmlsZV9zaXplIDwgbl9uZXdfZmlsZV9zaXplKSB7CisJaWYgKGZpbGVfc2l6ZSA9PSAwIHx8IGZpbGVfc2l6ZSA8IG5ld19maWxlX3NpemUpIHsKIAkJZ290byB1cGRhdGVfYW5kX291dDsKIAl9CiAKIAkvKiBVcGRhdGUga2V5IHRvIHNlYXJjaCBmb3IgdGhlIGxhc3QgZmlsZSBpdGVtLiAqLwotCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBuX2ZpbGVfc2l6ZSk7CisJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIGZpbGVfc2l6ZSk7CiAKIAlkbyB7CiAJCS8qIEN1dCBvciBkZWxldGUgZmlsZSBpdGVtLiAqLwotCQluX2RlbGV0ZWQgPQorCQlkZWxldGVkID0KIAkJICAgIHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0odGgsICZzX3NlYXJjaF9wYXRoLCAmc19pdGVtX2tleSwKLQkJCQkJICAgcF9zX2lub2RlLCBwYWdlLCBuX25ld19maWxlX3NpemUpOwotCQlpZiAobl9kZWxldGVkIDwgMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtNTY2NTogcmVpc2VyZnNfZG9fdHJ1bmNhdGU6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0gZmFpbGVkIik7CisJCQkJCSAgIGlub2RlLCBwYWdlLCBuZXdfZmlsZV9zaXplKTsKKwkJaWYgKGRlbGV0ZWQgPCAwKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtNTY2NSIsCisJCQkJCSAicmVpc2VyZnNfY3V0X2Zyb21faXRlbSBmYWlsZWQiKTsKIAkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnNfc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlSRkFMU0Uobl9kZWxldGVkID4gbl9maWxlX3NpemUsCisJCVJGQUxTRShkZWxldGVkID4gZmlsZV9zaXplLAogCQkgICAgICAgIlBBUC01NjcwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiB0b28gbWFueSBieXRlcyBkZWxldGVkOiBkZWxldGVkICVkLCBmaWxlX3NpemUgJWx1LCBpdGVtX2tleSAlSyIsCi0JCSAgICAgICBuX2RlbGV0ZWQsIG5fZmlsZV9zaXplLCAmc19pdGVtX2tleSk7CisJCSAgICAgICBkZWxldGVkLCBmaWxlX3NpemUsICZzX2l0ZW1fa2V5KTsKIAogCQkvKiBDaGFuZ2Uga2V5IHRvIHNlYXJjaCB0aGUgbGFzdCBmaWxlIGl0ZW0uICovCi0JCW5fZmlsZV9zaXplIC09IG5fZGVsZXRlZDsKKwkJZmlsZV9zaXplIC09IGRlbGV0ZWQ7CiAKLQkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIG5fZmlsZV9zaXplKTsKKwkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIGZpbGVfc2l6ZSk7CiAKIAkJLyogV2hpbGUgdGhlcmUgYXJlIGJ5dGVzIHRvIHRydW5jYXRlIGFuZCBwcmV2aW91cyBmaWxlIGl0ZW0gaXMgcHJlc2VudGVkIGluIHRoZSB0cmVlLiAqLwogCiAJCS8qCi0JCSAqKiBUaGlzIGxvb3AgY291bGQgdGFrZSBhIHJlYWxseSBsb25nIHRpbWUsIGFuZCBjb3VsZCBsb2cgCisJCSAqKiBUaGlzIGxvb3AgY291bGQgdGFrZSBhIHJlYWxseSBsb25nIHRpbWUsIGFuZCBjb3VsZCBsb2cKIAkJICoqIG1hbnkgbW9yZSBibG9ja3MgdGhhbiBhIHRyYW5zYWN0aW9uIGNhbiBob2xkLiAgU28sIHdlIGRvIGEgcG9saXRlCiAJCSAqKiBqb3VybmFsIGVuZCBoZXJlLCBhbmQgaWYgdGhlIHRyYW5zYWN0aW9uIG5lZWRzIGVuZGluZywgd2UgbWFrZQogCQkgKiogc3VyZSB0aGUgZmlsZSBpcyBjb25zaXN0ZW50IGJlZm9yZSBlbmRpbmcgdGhlIGN1cnJlbnQgdHJhbnMKQEAgLTE4NzcsMzcgKzE4MzYsMzggQEAKIAkJaWYgKGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZCh0aCwgMCkgfHwKIAkJICAgIHJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDw9IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkgewogCQkJaW50IG9yaWdfbGVuX2FsbG9jID0gdGgtPnRfYmxvY2tzX2FsbG9jYXRlZDsKLQkJCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCZzX3NlYXJjaF9wYXRoKTsKKwkJCXBhdGhyZWxzZSgmc19zZWFyY2hfcGF0aCk7CiAKIAkJCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewotCQkJCXBfc19pbm9kZS0+aV9tdGltZSA9IHBfc19pbm9kZS0+aV9jdGltZSA9Ci0JCQkJICAgIENVUlJFTlRfVElNRV9TRUM7CisJCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCQkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCX0KLQkJCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgcF9zX2lub2RlKTsKKwkJCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwogCi0JCQllcnIgPSBqb3VybmFsX2VuZCh0aCwgcF9zX2lub2RlLT5pX3NiLCBvcmlnX2xlbl9hbGxvYyk7CisJCQllcnIgPSBqb3VybmFsX2VuZCh0aCwgaW5vZGUtPmlfc2IsIG9yaWdfbGVuX2FsbG9jKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7Ci0JCQllcnIgPSBqb3VybmFsX2JlZ2luKHRoLCBwX3NfaW5vZGUtPmlfc2IsCisJCQllcnIgPSBqb3VybmFsX2JlZ2luKHRoLCBpbm9kZS0+aV9zYiwKIAkJCQkJICAgIEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCArIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogNCkgOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dDsKLQkJCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihwX3NfaW5vZGUpOworCQkJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAkJfQotCX0gd2hpbGUgKG5fZmlsZV9zaXplID4gUk9VTkRfVVAobl9uZXdfZmlsZV9zaXplKSAmJgotCQkgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkocF9zX2lub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKKwl9IHdoaWxlIChmaWxlX3NpemUgPiBST1VORF9VUChuZXdfZmlsZV9zaXplKSAmJgorCQkgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoaW5vZGUtPmlfc2IsICZzX2l0ZW1fa2V5LAogCQkJCQkgICAgJnNfc2VhcmNoX3BhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKIAotCVJGQUxTRShuX2ZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5fbmV3X2ZpbGVfc2l6ZSksCisJUkZBTFNFKGZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5ld19maWxlX3NpemUpLAogCSAgICAgICAiUEFQLTU2ODA6IHRydW5jYXRlIGRpZCBub3QgZmluaXNoOiBuZXdfZmlsZV9zaXplICVMZCwgY3VycmVudCAlTGQsIG9pZCAlZCIsCi0JICAgICAgIG5fbmV3X2ZpbGVfc2l6ZSwgbl9maWxlX3NpemUsIHNfaXRlbV9rZXkub25fZGlza19rZXkua19vYmplY3RpZCk7CisJICAgICAgIG5ld19maWxlX3NpemUsIGZpbGVfc2l6ZSwgc19pdGVtX2tleS5vbl9kaXNrX2tleS5rX29iamVjdGlkKTsKIAogICAgICAgdXBkYXRlX2FuZF9vdXQ6CiAJaWYgKHVwZGF0ZV90aW1lc3RhbXBzKSB7CiAJCS8vIHRoaXMgaXMgdHJ1bmNhdGUsIG5vdCBmaWxlIGNsb3NpbmcKLQkJcF9zX2lub2RlLT5pX210aW1lID0gcF9zX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJfQotCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgcF9zX2lub2RlKTsKKwlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKIAogICAgICAgb3V0OgogCXBhdGhyZWxzZSgmc19zZWFyY2hfcGF0aCk7CkBAIC0xOTE3LDcgKzE4NzcsNyBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogLy8gdGhpcyBtYWtlcyBzdXJlLCB0aGF0IHdlIF9fYXBwZW5kX18sIG5vdCBvdmVyd3JpdGUgb3IgYWRkIGhvbGVzCiBzdGF0aWMgdm9pZCBjaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc3RydWN0IHRyZWVwYXRoICpwYXRoLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXkpCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5KQogewogCXN0cnVjdCBpdGVtX2hlYWQgKmZvdW5kX2loID0gZ2V0X2loKHBhdGgpOwogCkBAIC0xOTI1LDM2ICsxODg1LDM2IEBACiAJCWlmIChsZV9paF9rX29mZnNldChmb3VuZF9paCkgKwogCQkgICAgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQotCQkgICAgY3B1X2tleV9rX29mZnNldChwX3Nfa2V5KQorCQkgICAgY3B1X2tleV9rX29mZnNldChrZXkpCiAJCSAgICB8fCBvcF9ieXRlc19udW1iZXIoZm91bmRfaWgsCiAJCQkJICAgICAgIGdldF9sYXN0X2JoKHBhdGgpLT5iX3NpemUpICE9CiAJCSAgICBwb3NfaW5faXRlbShwYXRoKSkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJQQVAtNTcyMDogY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlOiAiCi0JCQkJICAgICAgICJmb3VuZCBkaXJlY3QgaXRlbSAlaCBvciBwb3NpdGlvbiAoJWQpIGRvZXMgbm90IG1hdGNoIHRvIGtleSAlSyIsCi0JCQkJICAgICAgIGZvdW5kX2loLCBwb3NfaW5faXRlbShwYXRoKSwgcF9zX2tleSk7CisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiUEFQLTU3MjAiLCAiZm91bmQgZGlyZWN0IGl0ZW0gIgorCQkJCSAgICAgICAiJWggb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCAiCisJCQkJICAgICAgICJ0byBrZXkgJUsiLCBmb3VuZF9paCwKKwkJCQkgICAgICAgcG9zX2luX2l0ZW0ocGF0aCksIGtleSk7CiAJfQogCWlmIChpc19pbmRpcmVjdF9sZV9paChmb3VuZF9paCkpIHsKIAkJaWYgKGxlX2loX2tfb2Zmc2V0KGZvdW5kX2loKSArCiAJCSAgICBvcF9ieXRlc19udW1iZXIoZm91bmRfaWgsCiAJCQkJICAgIGdldF9sYXN0X2JoKHBhdGgpLT5iX3NpemUpICE9Ci0JCSAgICBjcHVfa2V5X2tfb2Zmc2V0KHBfc19rZXkpCisJCSAgICBjcHVfa2V5X2tfb2Zmc2V0KGtleSkKIAkJICAgIHx8IElfVU5GTV9OVU0oZm91bmRfaWgpICE9IHBvc19pbl9pdGVtKHBhdGgpCiAJCSAgICB8fCBnZXRfaWhfZnJlZV9zcGFjZShmb3VuZF9paCkgIT0gMCkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJQQVAtNTczMDogY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlOiAiCi0JCQkJICAgICAgICJmb3VuZCBpbmRpcmVjdCBpdGVtICglaCkgb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCB0byBrZXkgKCVLKSIsCi0JCQkJICAgICAgIGZvdW5kX2loLCBwb3NfaW5faXRlbShwYXRoKSwgcF9zX2tleSk7CisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiUEFQLTU3MzAiLCAiZm91bmQgaW5kaXJlY3QgIgorCQkJCSAgICAgICAiaXRlbSAoJWgpIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgIgorCQkJCSAgICAgICAibWF0Y2ggdG8ga2V5ICglSykiLAorCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIGtleSk7CiAJfQogfQogI2VuZGlmCQkJCS8qIGNvbmZpZyByZWlzZXJmcyBjaGVjayAqLwogCiAvKiBQYXN0ZSBieXRlcyB0byB0aGUgZXhpc3RpbmcgaXRlbS4gUmV0dXJucyBieXRlcyBudW1iZXIgcGFzdGVkIGludG8gdGhlIGl0ZW0uICovCi1pbnQgcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCwJLyogUGF0aCB0byB0aGUgcGFzdGVkIGl0ZW0uICAgICAgICAgICovCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvciB0aGUgbmVlZGVkIGl0ZW0uICovCitpbnQgcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoLAkvKiBQYXRoIHRvIHRoZSBwYXN0ZWQgaXRlbS4JICAqLworCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvciB0aGUgbmVlZGVkIGl0ZW0uICovCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCS8qIElub2RlIGl0ZW0gYmVsb25ncyB0byAqLwotCQkJICAgICBjb25zdCBjaGFyICpwX2NfYm9keSwJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gcGFzdGUuICAgICovCi0JCQkgICAgIGludCBuX3Bhc3RlZF9zaXplKQorCQkJICAgICBjb25zdCBjaGFyICpib2R5LAkvKiBQb2ludGVyIHRvIHRoZSBieXRlcyB0byBwYXN0ZS4gICAgKi8KKwkJCSAgICAgaW50IHBhc3RlZF9zaXplKQogewkJCQkvKiBTaXplIG9mIHBhc3RlZCBieXRlcy4gICAgICAgICAgICAgKi8KIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfcGFzdGVfYmFsYW5jZTsKIAlpbnQgcmV0dmFsOwpAQCAtMTk2NywxOCArMTkyNywxOCBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgcGFzdGVfaW50b19pdGVtKCk6IGFsbG9jYXRpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCi0JCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOworCQkgICAgICAgcGFzdGVkX3NpemUsIGlub2RlLT5pX3VpZCwKKwkJICAgICAgIGtleTJ0eXBlKCYoa2V5LT5vbl9kaXNrX2tleSkpKTsKICNlbmRpZgogCi0JaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKSkgewotCQlwYXRocmVsc2UocF9zX3NlYXJjaF9wYXRoKTsKKwlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKSkgeworCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9Ci0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX3Bhc3RlX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwX3Nfc2VhcmNoX3BhdGgsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfcGFzdGVfYmFsYW5jZSwgdGgtPnRfc3VwZXIsIHNlYXJjaF9wYXRoLAorCQkgICAgICAgcGFzdGVkX3NpemUpOwogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKLQlzX3Bhc3RlX2JhbGFuY2Uua2V5ID0gcF9zX2tleS0+b25fZGlza19rZXk7CisJc19wYXN0ZV9iYWxhbmNlLmtleSA9IGtleS0+b25fZGlza19rZXk7CiAjZW5kaWYKIAogCS8qIERRVU9UXyogY2FuIHNjaGVkdWxlLCBtdXN0IGNoZWNrIGJlZm9yZSB0aGUgZml4X25vZGVzICovCkBAIC0xOTg4LDMzICsxOTQ4LDMzIEBACiAKIAl3aGlsZSAoKHJldHZhbCA9CiAJCWZpeF9ub2RlcyhNX1BBU1RFLCAmc19wYXN0ZV9iYWxhbmNlLCBOVUxMLAotCQkJICBwX2NfYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKKwkJCSAgYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKIAkgICAgICBzZWFyY2hfYWdhaW46CiAJCS8qIGZpbGUgc3lzdGVtIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBpbiB0aGUgZml4X25vZGVzICovCiAJCVBST0NfSU5GT19JTkModGgtPnRfc3VwZXIsIHBhc3RlX2ludG9faXRlbV9yZXN0YXJ0ZWQpOwogCQlyZXR2YWwgPQotCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkodGgtPnRfc3VwZXIsIHBfc19rZXksCi0JCQkJCSAgICAgICBwX3Nfc2VhcmNoX3BhdGgpOworCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkodGgtPnRfc3VwZXIsIGtleSwKKwkJCQkJICAgICAgIHNlYXJjaF9wYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewogCQkJcmV0dmFsID0gLUVJTzsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAJCWlmIChyZXR2YWwgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAiUEFQLTU3MTA6IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbTogZW50cnkgb3IgcGFzdGVkIGJ5dGUgKCVLKSBleGlzdHMiLAotCQkJCQkgcF9zX2tleSk7CisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiUEFQLTU3MTAiLAorCQkJCQkgImVudHJ5IG9yIHBhc3RlZCBieXRlICglSykgZXhpc3RzIiwKKwkJCQkJIGtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwogCQkJZ290byBlcnJvcl9vdXQ7CiAJCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSk7CisJCWNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZShzZWFyY2hfcGF0aCwga2V5KTsKICNlbmRpZgogCX0KIAogCS8qIFBlcmZvcm0gYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgYXJlIGNvbGxlY3RlZCBieSBmaXhfbm9kZXMsIGFuZAogCSAgIGFjY2Vzc2luZyB0aGVtIHdpbGwgbm90IHJpc2sgdHJpZ2dlcmluZyBzY2hlZHVsZS4gKi8KIAlpZiAocmV0dmFsID09IENBUlJZX09OKSB7Ci0JCWRvX2JhbGFuY2UoJnNfcGFzdGVfYmFsYW5jZSwgTlVMTCAvKmloICovICwgcF9jX2JvZHksIE1fUEFTVEUpOworCQlkb19iYWxhbmNlKCZzX3Bhc3RlX2JhbGFuY2UsIE5VTEwgLyppaCAqLyAsIGJvZHksIE1fUEFTVEUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dmFsID0gKHJldHZhbCA9PSBOT19ESVNLX1NQQUNFKSA/IC1FTk9TUEMgOiAtRUlPOwpAQCAtMjAyNCwxOCArMTk4NCwyNCBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgcGFzdGVfaW50b19pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCi0JCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOworCQkgICAgICAgcGFzdGVkX3NpemUsIGlub2RlLT5pX3VpZCwKKwkJICAgICAgIGtleTJ0eXBlKCYoa2V5LT5vbl9kaXNrX2tleSkpKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5fcGFzdGVkX3NpemUpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBJbnNlcnQgbmV3IGl0ZW0gaW50byB0aGUgYnVmZmVyIGF0IHRoZSBwYXRoLiAqLwotaW50IHJlaXNlcmZzX2luc2VydF9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAkvKiBQYXRoIHRvIHRoZSBpbnNlcnRlZGVkIGl0ZW0uICAgICAgICAgKi8KLQkJCSBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LCBzdHJ1Y3QgaXRlbV9oZWFkICpwX3NfaWgsCS8qIFBvaW50ZXIgdG8gdGhlIGl0ZW0gaGVhZGVyIHRvIGluc2VydC4gKi8KLQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwX2NfYm9keSkKLXsJCQkJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gaW5zZXJ0LiAgICAgICovCisvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byB0aGUgYnVmZmVyIGF0IHRoZSBwYXRoLgorICogdGggICAtIGFjdGl2ZSB0cmFuc2FjdGlvbiBoYW5kbGUKKyAqIHBhdGggLSBwYXRoIHRvIHRoZSBpbnNlcnRlZCBpdGVtCisgKiBpaCAgIC0gcG9pbnRlciB0byB0aGUgaXRlbSBoZWFkZXIgdG8gaW5zZXJ0CisgKiBib2R5IC0gcG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gaW5zZXJ0CisgKi8KK2ludCByZWlzZXJmc19pbnNlcnRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCisJCQkgc3RydWN0IGl0ZW1faGVhZCAqaWgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgY2hhciAqYm9keSkKK3sKIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfaW5zX2JhbGFuY2U7CiAJaW50IHJldHZhbDsKIAlpbnQgZnNfZ2VuID0gMDsKQEAgLTIwNDUsMjggKzIwMTEsMjcgQEAKIAogCWlmIChpbm9kZSkgewkJLyogRG8gd2UgY291bnQgcXVvdGFzIGZvciBpdGVtPyAqLwogCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihpbm9kZS0+aV9zYik7Ci0JCXF1b3RhX2J5dGVzID0gaWhfaXRlbV9sZW4ocF9zX2loKTsKKwkJcXVvdGFfYnl0ZXMgPSBpaF9pdGVtX2xlbihpaCk7CiAKIAkJLyogaGFjayBzbyB0aGUgcXVvdGEgY29kZSBkb2Vzbid0IGhhdmUgdG8gZ3Vlc3MgaWYgdGhlIGZpbGUgaGFzCiAJCSAqKiBhIHRhaWwsIGxpbmtzIGFyZSBhbHdheXMgdGFpbHMsIHNvIHRoZXJlJ3Mgbm8gZ3Vlc3NpbmcgbmVlZGVkCiAJCSAqLwotCQlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfc19paCkpIHsKKwkJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChpaCkpCiAJCQlxdW90YV9ieXRlcyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOwotCQl9CiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKIAkJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgInJlaXNlcnF1b3RhIGluc2VydF9pdGVtKCk6IGFsbG9jYXRpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCQkgICAgICAgcXVvdGFfYnl0ZXMsIGlub2RlLT5pX3VpZCwgaGVhZDJ0eXBlKHBfc19paCkpOworCQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShpaCkpOwogI2VuZGlmCiAJCS8qIFdlIGNhbid0IGRpcnR5IGlub2RlIGhlcmUuIEl0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IHdyaXR0ZW4gYnV0CiAJCSAqIGFwcHJvcHJpYXRlIHN0YXQgaXRlbSBpc24ndCBpbnNlcnRlZCB5ZXQuLi4gKi8KIAkJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcykpIHsKLQkJCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCQlwYXRocmVsc2UocGF0aCk7CiAJCQlyZXR1cm4gLUVEUVVPVDsKIAkJfQogCX0KLQlpbml0X3RiX3N0cnVjdCh0aCwgJnNfaW5zX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwX3NfcGF0aCwKLQkJICAgICAgIElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX3NfaWgpKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfaW5zX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwYXRoLAorCQkgICAgICAgSUhfU0laRSArIGloX2l0ZW1fbGVuKGloKSk7CiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwogCXNfaW5zX2JhbGFuY2Uua2V5ID0ga2V5LT5vbl9kaXNrX2tleTsKICNlbmRpZgpAQCAtMjA3NiwxOSArMjA0MSwxOCBAQAogCX0KIAogCXdoaWxlICgocmV0dmFsID0KLQkJZml4X25vZGVzKE1fSU5TRVJULCAmc19pbnNfYmFsYW5jZSwgcF9zX2loLAotCQkJICBwX2NfYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKKwkJZml4X25vZGVzKE1fSU5TRVJULCAmc19pbnNfYmFsYW5jZSwgaWgsCisJCQkgIGJvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CiAJICAgICAgc2VhcmNoX2FnYWluOgogCQkvKiBmaWxlIHN5c3RlbSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgaW4gdGhlIGZpeF9ub2RlcyAqLwogCQlQUk9DX0lORk9fSU5DKHRoLT50X3N1cGVyLCBpbnNlcnRfaXRlbV9yZXN0YXJ0ZWQpOwotCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwga2V5LCBwX3NfcGF0aCk7CisJCXJldHZhbCA9IHNlYXJjaF9pdGVtKHRoLT50X3N1cGVyLCBrZXksIHBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7CiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJZ290byBlcnJvcl9vdXQ7CiAJCX0KIAkJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgIlBBUC01NzYwOiByZWlzZXJmc19pbnNlcnRfaXRlbTogIgorCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgIlBBUC01NzYwIiwKIAkJCQkJICJrZXkgJUsgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRyZWUiLAogCQkJCQkga2V5KTsKIAkJCXJldHZhbCA9IC1FRVhJU1Q7CkBAIC0yMDk4LDcgKzIwNjIsNyBAQAogCiAJLyogbWFrZSBiYWxhbmNpbmcgYWZ0ZXIgYWxsIHJlc291cmNlcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBhIHRpbWUgKi8KIAlpZiAocmV0dmFsID09IENBUlJZX09OKSB7Ci0JCWRvX2JhbGFuY2UoJnNfaW5zX2JhbGFuY2UsIHBfc19paCwgcF9jX2JvZHksIE1fSU5TRVJUKTsKKwkJZG9fYmFsYW5jZSgmc19pbnNfYmFsYW5jZSwgaWgsIGJvZHksIE1fSU5TRVJUKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMTA5LDcgKzIwNzMsNyBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcodGgtPnRfc3VwZXIsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgaW5zZXJ0X2l0ZW0oKTogZnJlZWluZyAldSBpZD0ldSB0eXBlPSVjIiwKLQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShwX3NfaWgpKTsKKwkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShpaCkpOwogI2VuZGlmCiAJaWYgKGlub2RlKQogCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcyk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCA1ZGJhZmI3Li4wYWU2NDg2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJlaXNlcmZzX2ZzX3R5cGU7CiAKQEAgLTE4Myw5ICsxODQsOSBAQAogCQlpZiAoUkVJU0VSRlNfU0IocyktPnNfcWZfbmFtZXNbaV0pIHsKIAkJCWludCByZXQgPSByZWlzZXJmc19xdW90YV9vbl9tb3VudChzLCBpKTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnM6IGNhbm5vdCB0dXJuIG9uIGpvdXJuYWxlZCBxdW90YTogZXJyb3IgJWQiLAotCQkJCQkJIHJldCk7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwMCIsCisJCQkJCQkgImNhbm5vdCB0dXJuIG9uIGpvdXJuYWxlZCAiCisJCQkJCQkgInF1b3RhOiBlcnJvciAlZCIsIHJldCk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTE5NSwxNyArMTk2LDE2IEBACiAJd2hpbGUgKCFyZXR2YWwpIHsKIAkJcmV0dmFsID0gc2VhcmNoX2l0ZW0ocywgJm1heF9jcHVfa2V5LCAmcGF0aCk7CiAJCWlmIChyZXR2YWwgIT0gSVRFTV9OT1RfRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ2cy0yMTQwOiBmaW5pc2hfdW5maW5pc2hlZDogc2VhcmNoX2J5X2tleSByZXR1cm5lZCAlZCIsCi0JCQkJCSByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IocywgInZzLTIxNDAiLAorCQkJCSAgICAgICAic2VhcmNoX2J5X2tleSByZXR1cm5lZCAlZCIsIHJldHZhbCk7CiAJCQlicmVhazsKIAkJfQogCiAJCWJoID0gZ2V0X2xhc3RfYmgoJnBhdGgpOwogCQlpdGVtX3BvcyA9IGdldF9pdGVtX3BvcygmcGF0aCk7CiAJCWlmIChpdGVtX3BvcyAhPSBCX05SX0lURU1TKGJoKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIwNjA6IGZpbmlzaF91bmZpbmlzaGVkOiB3cm9uZyBwb3NpdGlvbiBmb3VuZCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtMjA2MCIsCisJCQkJCSAid3JvbmcgcG9zaXRpb24gZm91bmQiKTsKIAkJCWJyZWFrOwogCQl9CiAJCWl0ZW1fcG9zLS07CkBAIC0yMzUsOCArMjM1LDcgQEAKIAkJaWYgKCFpbm9kZSkgewogCQkJLyogdGhlIHVubGluayBhbG1vc3QgY29tcGxldGVkLCBpdCBqdXN0IGRpZCBub3QgbWFuYWdlIHRvIHJlbW92ZQogCQkJICAgInNhdmUiIGxpbmsgYW5kIHJlbGVhc2Ugb2JqZWN0aWQgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ2cy0yMTgwOiBmaW5pc2hfdW5maW5pc2hlZDogaWdldCBmYWlsZWQgZm9yICVLIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTIxODAiLCAiaWdldCBmYWlsZWQgZm9yICVLIiwKIAkJCQkJICZvYmpfa2V5KTsKIAkJCXJldHZhbCA9IHJlbW92ZV9zYXZlX2xpbmtfb25seShzLCAmc2F2ZV9saW5rX2tleSwgMSk7CiAJCQljb250aW51ZTsKQEAgLTI0NCw4ICsyNDMsOCBAQAogCiAJCWlmICghdHJ1bmNhdGUgJiYgaW5vZGUtPmlfbmxpbmspIHsKIAkJCS8qIGZpbGUgaXMgbm90IHVubGlua2VkICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidnMtMjE4NTogZmluaXNoX3VuZmluaXNoZWQ6IGZpbGUgJUsgaXMgbm90IHVubGlua2VkIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTIxODUiLAorCQkJCQkgImZpbGUgJUsgaXMgbm90IHVubGlua2VkIiwKIAkJCQkJICZvYmpfa2V5KTsKIAkJCXJldHZhbCA9IHJlbW92ZV9zYXZlX2xpbmtfb25seShzLCAmc2F2ZV9saW5rX2tleSwgMCk7CiAJCQljb250aW51ZTsKQEAgLTI1Nyw4ICsyNTYsOSBAQAogCQkJICAgVGhlIG9ubHkgaW1hZ2luYWJsZSB3YXkgaXMgdG8gZXhlY3V0ZSB1bmZpbmlzaGVkIHRydW5jYXRlIHJlcXVlc3QKIAkJCSAgIHRoZW4gYm9vdCBpbnRvIG9sZCBrZXJuZWwsIHJlbW92ZSB0aGUgZmlsZSBhbmQgY3JlYXRlIGRpciB3aXRoCiAJCQkgICB0aGUgc2FtZSBrZXkuICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiZ3JlZW4tMjEwMTogaW1wb3NzaWJsZSB0cnVuY2F0ZSBvbiBhIGRpcmVjdG9yeSAlay4gUGxlYXNlIHJlcG9ydCIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJncmVlbi0yMTAxIiwKKwkJCQkJICJpbXBvc3NpYmxlIHRydW5jYXRlIG9uIGEgIgorCQkJCQkgImRpcmVjdG9yeSAlay4gUGxlYXNlIHJlcG9ydCIsCiAJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCQlyZXR2YWwgPSByZW1vdmVfc2F2ZV9saW5rX29ubHkocywgJnNhdmVfbGlua19rZXksIDApOwogCQkJdHJ1bmNhdGUgPSAwOwpAQCAtMjg4LDkgKzI4OCwxMCBAQAogCQkJCS8qIHJlbW92YWwgZ2V0cyBjb21wbGV0ZWQgaW4gaXB1dCAqLwogCQkJCXJldHZhbCA9IDA7CiAJCQl9IGVsc2UgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkRlYWQgbG9vcCBpbiAiCi0JCQkJCQkiZmluaXNoX3VuZmluaXNoZWQgZGV0ZWN0ZWQsICIKLQkJCQkJCSJqdXN0IHJlbW92ZSBzYXZlIGxpbmtcbiIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTIxODkiLCAiRGVhZCBsb29wICIKKwkJCQkJCSAiaW4gZmluaXNoX3VuZmluaXNoZWQgIgorCQkJCQkJICJkZXRlY3RlZCwganVzdCByZW1vdmUgIgorCQkJCQkJICJzYXZlIGxpbmtcbiIpOwogCQkJCXJldHZhbCA9IHJlbW92ZV9zYXZlX2xpbmtfb25seShzLAogCQkJCQkJCSZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCX0KQEAgLTM2MCw4ICszNjEsOSBAQAogCX0gZWxzZSB7CiAJCS8qIHRydW5jYXRlICovCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJICJncmVlbi0yMTAyOiBBZGRpbmcgYSB0cnVuY2F0ZSBzYXZlbGluayBmb3IgYSBkaXJlY3RvcnkgJWshIFBsZWFzZSByZXBvcnQiLAorCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImdyZWVuLTIxMDIiLAorCQkJCQkgIkFkZGluZyBhIHRydW5jYXRlIHNhdmVsaW5rIGZvciAiCisJCQkJCSAiYSBkaXJlY3RvcnkgJWshIFBsZWFzZSByZXBvcnQiLAogCQkJCQkgSU5PREVfUEtFWShpbm9kZSkpOwogCQlzZXRfY3B1X2tleV9rX29mZnNldCgma2V5LCAxKTsKIAkJc2V0X2NwdV9rZXlfa190eXBlKCZrZXksIFRZUEVfSU5ESVJFQ1QpOwpAQCAtMzc2LDkgKzM3OCw5IEBACiAJcmV0dmFsID0gc2VhcmNoX2l0ZW0oaW5vZGUtPmlfc2IsICZrZXksICZwYXRoKTsKIAlpZiAocmV0dmFsICE9IElURU1fTk9UX0ZPVU5EKSB7CiAJCWlmIChyZXR2YWwgIT0gLUVOT1NQQykKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJ2cy0yMTAwOiBhZGRfc2F2ZV9saW5rOiIKLQkJCQkJICJzZWFyY2hfYnlfa2V5ICglSykgcmV0dXJuZWQgJWQiLCAma2V5LAotCQkJCQkgcmV0dmFsKTsKKwkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtMjEwMCIsCisJCQkJICAgICAgICJzZWFyY2hfYnlfa2V5ICglSykgcmV0dXJuZWQgJWQiLCAma2V5LAorCQkJCSAgICAgICByZXR2YWwpOwogCQlwYXRocmVsc2UoJnBhdGgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzkxLDkgKzM5Myw4IEBACiAJICAgIHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCAmcGF0aCwgJmtleSwgJmloLCBOVUxMLCAoY2hhciAqKSZsaW5rKTsKIAlpZiAocmV0dmFsKSB7CiAJCWlmIChyZXR2YWwgIT0gLUVOT1NQQykKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtMjEyMDogYWRkX3NhdmVfbGluazogaW5zZXJ0X2l0ZW0gcmV0dXJuZWQgJWQiLAotCQkJCQkgcmV0dmFsKTsKKwkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtMjEyMCIsCisJCQkJICAgICAgICJpbnNlcnRfaXRlbSByZXR1cm5lZCAlZCIsIHJldHZhbCk7CiAJfSBlbHNlIHsKIAkJaWYgKHRydW5jYXRlKQogCQkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0KQEAgLTQ5Miw4ICs0OTMsNyBAQAogCXByaW50X3N0YXRpc3RpY3Mocyk7CiAKIAlpZiAoUkVJU0VSRlNfU0IocyktPnJlc2VydmVkX2Jsb2NrcyAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgImdyZWVuLTIwMDU6IHJlaXNlcmZzX3B1dF9zdXBlcjogcmVzZXJ2ZWQgYmxvY2tzIGxlZnQgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJncmVlbi0yMDA1IiwgInJlc2VydmVkIGJsb2NrcyBsZWZ0ICVkIiwKIAkJCQkgUkVJU0VSRlNfU0IocyktPnJlc2VydmVkX2Jsb2Nrcyk7CiAJfQogCkBAIC01NTksOCArNTU5LDggQEAKIAogCWludCBlcnIgPSAwOwogCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAiY2xtLTYwMDY6IHdyaXRpbmcgaW5vZGUgJWx1IG9uIHJlYWRvbmx5IEZTIiwKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS02MDA2IiwKKwkJCQkgIndyaXRpbmcgaW5vZGUgJWx1IG9uIHJlYWRvbmx5IEZTIiwKIAkJCQkgaW5vZGUtPmlfaW5vKTsKIAkJcmV0dXJuOwogCX0KQEAgLTc1Nyw3ICs3NTcsNyBAQAogCQkJICAgY2hhciAqKm9wdF9hcmcsIHVuc2lnbmVkIGxvbmcgKmJpdF9mbGFncykKIHsKIAljaGFyICpwOwotCS8qIGZvbz1iYXIsIAorCS8qIGZvbz1iYXIsCiAJICAgXiAgIF4gIF4KIAkgICB8ICAgfCAgKy0tIG9wdGlvbl9lbmQKIAkgICB8ICAgKy0tIGFyZ19zdGFydApAQCAtNzkyLDEzICs3OTIsMTUgQEAKIAkJCWlmIChiaXRfZmxhZ3MpIHsKIAkJCQlpZiAob3B0LT5jbHJtYXNrID09CiAJCQkJICAgICgxIDw8IFJFSVNFUkZTX1VOU1VQUE9SVEVEX09QVCkpCi0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIiVzIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMCIsCisJCQkJCQkJICIlcyBub3Qgc3VwcG9ydGVkLlxuIiwKIAkJCQkJCQkgcCk7CiAJCQkJZWxzZQogCQkJCQkqYml0X2ZsYWdzICY9IH5vcHQtPmNscm1hc2s7CiAJCQkJaWYgKG9wdC0+c2V0bWFzayA9PQogCQkJCSAgICAoMSA8PCBSRUlTRVJGU19VTlNVUFBPUlRFRF9PUFQpKQotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICIlcyBub3Qgc3VwcG9ydGVkLiIsCisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDEiLAorCQkJCQkJCSAiJXMgbm90IHN1cHBvcnRlZC5cbiIsCiAJCQkJCQkJIHApOwogCQkJCWVsc2UKIAkJCQkJKmJpdF9mbGFncyB8PSBvcHQtPnNldG1hc2s7CkBAIC04MDcsNyArODA5LDggQEAKIAkJfQogCX0KIAlpZiAoIW9wdC0+b3B0aW9uX25hbWUpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAidW5rbm93biBtb3VudCBvcHRpb24gXCIlc1wiIiwgcCk7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDIiLAorCQkJCSAidW5rbm93biBtb3VudCBvcHRpb24gXCIlc1wiIiwgcCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTgxNSw4ICs4MTgsOSBAQAogCXN3aXRjaCAoKnApIHsKIAljYXNlICc9JzoKIAkJaWYgKCFvcHQtPmFyZ19yZXF1aXJlZCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInRoZSBvcHRpb24gXCIlc1wiIGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwMyIsCisJCQkJCSAidGhlIG9wdGlvbiBcIiVzXCIgZG9lcyBub3QgIgorCQkJCQkgInJlcXVpcmUgYW4gYXJndW1lbnRcbiIsCiAJCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtODI0LDE0ICs4MjgsMTUgQEAKIAogCWNhc2UgMDoKIAkJaWYgKG9wdC0+YXJnX3JlcXVpcmVkKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidGhlIG9wdGlvbiBcIiVzXCIgcmVxdWlyZXMgYW4gYXJndW1lbnQiLAotCQkJCQkgb3B0LT5vcHRpb25fbmFtZSk7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA0IiwKKwkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiByZXF1aXJlcyBhbiAiCisJCQkJCSAiYXJndW1lbnRcbiIsIG9wdC0+b3B0aW9uX25hbWUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgImhlYWQgb2Ygb3B0aW9uIFwiJXNcIiBpcyBvbmx5IGNvcnJlY3QiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA1IiwKKwkJCQkgImhlYWQgb2Ygb3B0aW9uIFwiJXNcIiBpcyBvbmx5IGNvcnJlY3RcbiIsCiAJCQkJIG9wdC0+b3B0aW9uX25hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtODQzLDcgKzg0OCw4IEBACiAJICAgICYmICEob3B0LT5hcmdfcmVxdWlyZWQgJiAoMSA8PCBSRUlTRVJGU19PUFRfQUxMT1dFTVBUWSkpCiAJICAgICYmICFzdHJsZW4ocCkpIHsKIAkJLyogdGhpcyBjYXRjaGVzICJvcHRpb249LCIgaWYgbm90IGFsbG93ZWQgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiZW1wdHkgYXJndW1lbnQgZm9yIFwiJXNcIiIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDYiLAorCQkJCSAiZW1wdHkgYXJndW1lbnQgZm9yIFwiJXNcIlxuIiwKIAkJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC04NjUsNyArODcxLDggQEAKIAkJfQogCX0KIAotCXJlaXNlcmZzX3dhcm5pbmcocywgImJhZCB2YWx1ZSBcIiVzXCIgZm9yIG9wdGlvbiBcIiVzXCIiLCBwLAorCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDYiLAorCQkJICJiYWQgdmFsdWUgXCIlc1wiIGZvciBvcHRpb24gXCIlc1wiXG4iLCBwLAogCQkJIG9wdC0+b3B0aW9uX25hbWUpOwogCXJldHVybiAtMTsKIH0KQEAgLTk1NSw5ICs5NjIsOSBAQAogCQkJCSpibG9ja3MgPSBzaW1wbGVfc3RydG91bChhcmcsICZwLCAwKTsKIAkJCQlpZiAoKnAgIT0gJ1wwJykgewogCQkJCQkvKiBOTk4gZG9lcyBub3QgbG9vayBsaWtlIGEgbnVtYmVyICovCi0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGJhZCB2YWx1ZSAlcyIsCi0JCQkJCQkJIGFyZyk7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDciLAorCQkJCQkJCSAiYmFkIHZhbHVlICVzIGZvciAiCisJCQkJCQkJICItb3Jlc2l6ZVxuIiwgYXJnKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQpAQCAtOTY4LDggKzk3NSw4IEBACiAJCQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgJnAsIDApOwogCQkJLyogY29tbWl0PU5OTiAodGltZSBpbiBzZWNvbmRzKSAqLwogCQkJaWYgKCpwICE9ICdcMCcgfHwgdmFsID49ICh1bnNpZ25lZCBpbnQpLTEpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGJhZCB2YWx1ZSAlcyIsCisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwOCIsCisJCQkJCQkgImJhZCB2YWx1ZSAlcyBmb3IgLW9jb21taXRcbiIsCiAJCQkJCQkgYXJnKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTk3NywxNiArOTg0LDE4IEBACiAJCX0KIAogCQlpZiAoYyA9PSAndycpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzOiBub2xhcmdlaW8gb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDkiLCAibm9sYXJnZWlvIG9wdGlvbiAiCisJCQkJCSAiaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlpZiAoYyA9PSAnaicpIHsKIAkJCWlmIChhcmcgJiYgKmFyZyAmJiBqZGV2X25hbWUpIHsKIAkJCQlpZiAoKmpkZXZfbmFtZSkgewkvL0htLCBhbHJlYWR5IGFzc2lnbmVkPwotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBqb3VybmFsIGRldmljZSB3YXMgYWxyZWFkeSAgc3BlY2lmaWVkIHRvIGJlICVzIiwKLQkJCQkJCQkgKmpkZXZfbmFtZSk7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTAiLAorCQkJCQkJCSAiam91cm5hbCBkZXZpY2Ugd2FzICIKKwkJCQkJCQkgImFscmVhZHkgc3BlY2lmaWVkIHRvICIKKwkJCQkJCQkgImJlICVzIiwgKmpkZXZfbmFtZSk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQkqamRldl9uYW1lID0gYXJnOwpAQCAtOTk4LDI5ICsxMDA3LDM1IEBACiAKIAkJCWlmIChzYl9hbnlfcXVvdGFfbG9hZGVkKHMpICYmCiAJCQkgICAgKCEqYXJnICE9ICFSRUlTRVJGU19TQihzKS0+c19xZl9uYW1lc1txdHlwZV0pKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBjYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCBxdW90YSBvcHRpb25zIHdoZW4gcXVvdGEgdHVybmVkIG9uLiIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTEiLAorCQkJCQkJICJjYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCAiCisJCQkJCQkgInF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSAiCisJCQkJCQkgInR1cm5lZCBvbi4iKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmICgqYXJnKSB7CS8qIFNvbWUgZmlsZW5hbWUgc3BlY2lmaWVkPyAqLwogCQkJCWlmIChSRUlTRVJGU19TQihzKS0+c19xZl9uYW1lc1txdHlwZV0KIAkJCQkgICAgJiYgc3RyY21wKFJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW3F0eXBlXSwKIAkJCQkJICAgICAgYXJnKSkgewotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiAlcyBxdW90YSBmaWxlIGFscmVhZHkgc3BlY2lmaWVkLiIsCisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTIiLAorCQkJCQkJCSAiJXMgcXVvdGEgZmlsZSAiCisJCQkJCQkJICJhbHJlYWR5IHNwZWNpZmllZC4iLAogCQkJCQkJCSBRVFlQRTJOQU1FKHF0eXBlKSk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCQlpZiAoc3RyY2hyKGFyZywgJy8nKSkgewotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBxdW90YWZpbGUgbXVzdCBiZSBvbiBmaWxlc3lzdGVtIHJvb3QuIik7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTMiLAorCQkJCQkJCSAicXVvdGFmaWxlIG11c3QgYmUgIgorCQkJCQkJCSAib24gZmlsZXN5c3RlbSByb290LiIpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQkJcWZfbmFtZXNbcXR5cGVdID0KIAkJCQkgICAga21hbGxvYyhzdHJsZW4oYXJnKSArIDEsIEdGUF9LRVJORUwpOwogCQkJCWlmICghcWZfbmFtZXNbcXR5cGVdKSB7Ci0JCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciBzdG9yaW5nIHF1b3RhZmlsZSBuYW1lLiIpOworCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTAyIiwKKwkJCQkJCQkgIm5vdCBlbm91Z2ggbWVtb3J5ICIKKwkJCQkJCQkgImZvciBzdG9yaW5nICIKKwkJCQkJCQkgInF1b3RhZmlsZSBuYW1lLiIpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQkJc3RyY3B5KHFmX25hbWVzW3F0eXBlXSwgYXJnKTsKQEAgLTEwMzgsMjEgKzEwNTMsMjQgQEAKIAkJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAidmZzdjAiKSkKIAkJCQkqcWZtdCA9IFFGTVRfVkZTX1YwOwogCQkJZWxzZSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiB1bmtub3duIHF1b3RhIGZvcm1hdCBzcGVjaWZpZWQuIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNCIsCisJCQkJCQkgInVua25vd24gcXVvdGEgZm9ybWF0ICIKKwkJCQkJCSAic3BlY2lmaWVkLiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJaWYgKHNiX2FueV9xdW90YV9sb2FkZWQocykgJiYKIAkJCSAgICAqcWZtdCAhPSBSRUlTRVJGU19TQihzKS0+c19qcXVvdGFfZm10KSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBjYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCBxdW90YSBvcHRpb25zIHdoZW4gcXVvdGEgdHVybmVkIG9uLiIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTUiLAorCQkJCQkJICJjYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCAiCisJCQkJCQkgInF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSAiCisJCQkJCQkgInR1cm5lZCBvbi4iKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQogI2Vsc2UKIAkJaWYgKGMgPT0gJ3UnIHx8IGMgPT0gJ2cnIHx8IGMgPT0gJ2YnKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogam91cm5hbGVkIHF1b3RhIG9wdGlvbnMgbm90IHN1cHBvcnRlZC4iKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDMiLCAiam91cm5hbGVkICIKKwkJCQkJICJxdW90YSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCkBAIC0xMDYxLDE1ICsxMDc5LDE1IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJaWYgKCFSRUlTRVJGU19TQihzKS0+c19qcXVvdGFfZm10ICYmICEqcWZtdAogCSAgICAmJiAocWZfbmFtZXNbVVNSUVVPVEFdIHx8IHFmX25hbWVzW0dSUFFVT1RBXSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogam91cm5hbGVkIHF1b3RhIGZvcm1hdCBub3Qgc3BlY2lmaWVkLiIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE1IiwKKwkJCQkgImpvdXJuYWxlZCBxdW90YSBmb3JtYXQgbm90IHNwZWNpZmllZC4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIFRoaXMgY2hlY2tpbmcgaXMgbm90IHByZWNpc2Ugd3J0IHRoZSBxdW90YSB0eXBlIGJ1dCBmb3Igb3VyIHB1cnBvc2VzIGl0IGlzIHN1ZmZpY2llbnQgKi8KIAlpZiAoISgqbW91bnRfb3B0aW9ucyAmICgxIDw8IFJFSVNFUkZTX1FVT1RBKSkKIAkgICAgJiYgc2JfYW55X3F1b3RhX2xvYWRlZChzKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBxdW90YSBvcHRpb25zIG11c3QgYmUgcHJlc2VudCB3aGVuIHF1b3RhIGlzIHR1cm5lZCBvbi4iKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNiIsICJxdW90YSBvcHRpb25zIG11c3QgIgorCQkJCSAiYmUgcHJlc2VudCB3aGVuIHF1b3RhIGlzIHR1cm5lZCBvbi4iKTsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC0xMTI5LDE0ICsxMTQ3LDE1IEBACiAKIAlpZiAocmVpc2VyZnNfYXR0cnMocykpIHsKIAkJaWYgKG9sZF9mb3JtYXRfb25seShzKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInJlaXNlcmZzOiBjYW5ub3Qgc3VwcG9ydCBhdHRyaWJ1dGVzIG9uIDMuNS54IGRpc2sgZm9ybWF0Iik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE3IiwgImNhbm5vdCBzdXBwb3J0ICIKKwkJCQkJICJhdHRyaWJ1dGVzIG9uIDMuNS54IGRpc2sgZm9ybWF0Iik7CiAJCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJj0gfigxIDw8IFJFSVNFUkZTX0FUVFJTKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoIShsZTMyX3RvX2NwdShycy0+c19mbGFncykgJiByZWlzZXJmc19hdHRyc19jbGVhcmVkKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInJlaXNlcmZzOiBjYW5ub3Qgc3VwcG9ydCBhdHRyaWJ1dGVzIHVudGlsIGZsYWcgaXMgc2V0IGluIHN1cGVyLWJsb2NrIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE4IiwgImNhbm5vdCBzdXBwb3J0ICIKKwkJCQkJICJhdHRyaWJ1dGVzIHVudGlsIGZsYWcgaXMgc2V0IGluICIKKwkJCQkJICJzdXBlci1ibG9jayIpOwogCQkJUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICY9IH4oMSA8PCBSRUlTRVJGU19BVFRSUyk7CiAJCX0KIAl9CkBAIC0xMjc4LDYgKzEyOTcsOCBAQAogCQlSRUlTRVJGU19TQihzKS0+c19tb3VudF9zdGF0ZSA9IHNiX3Vtb3VudF9zdGF0ZShycyk7CiAJCXMtPnNfZmxhZ3MgJj0gfk1TX1JET05MWTsKIAkJc2V0X3NiX3Vtb3VudF9zdGF0ZShycywgUkVJU0VSRlNfRVJST1JfRlMpOworCQlpZiAoIW9sZF9mb3JtYXRfb25seShzKSkKKwkJCXNldF9zYl9tbnRfY291bnQocnMsIHNiX21udF9jb3VudChycykgKyAxKTsKIAkJLyogbWFya19idWZmZXJfZGlydHkgKFNCX0JVRkZFUl9XSVRIX1NCIChzKSwgMSk7ICovCiAJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHMsIFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAkJUkVJU0VSRlNfU0IocyktPnNfbW91bnRfc3RhdGUgPSBSRUlTRVJGU19WQUxJRF9GUzsKQEAgLTEzMTIsNyArMTMzMyw3IEBACiAKIAliaCA9IHNiX2JyZWFkKHMsIG9mZnNldCAvIHMtPnNfYmxvY2tzaXplKTsKIAlpZiAoIWJoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMDY6IHJlYWRfc3VwZXJfYmxvY2s6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNiIsCiAJCQkJICJicmVhZCBmYWlsZWQgKGRldiAlcywgYmxvY2sgJWx1LCBzaXplICVsdSkiLAogCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUsCiAJCQkJIHMtPnNfYmxvY2tzaXplKTsKQEAgLTEzMjYsMTUgKzEzNDcsMTUgQEAKIAl9CiAJLy8KIAkvLyBvaywgcmVpc2VyZnMgc2lnbmF0dXJlIChvbGQgb3IgbmV3KSBmb3VuZCBpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0Ci0JLy8gICAgCisJLy8KIAlmc19ibG9ja3NpemUgPSBzYl9ibG9ja3NpemUocnMpOwogCWJyZWxzZShiaCk7CiAJc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBmc19ibG9ja3NpemUpOwogCiAJYmggPSBzYl9icmVhZChzLCBvZmZzZXQgLyBzLT5zX2Jsb2Nrc2l6ZSk7CiAJaWYgKCFiaCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDA3OiByZWFkX3N1cGVyX2Jsb2NrOiAiCi0JCQkJICJicmVhZCBmYWlsZWQgKGRldiAlcywgYmxvY2sgJWx1LCBzaXplICVsdSlcbiIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMDciLAorCQkJCSAiYnJlYWQgZmFpbGVkIChkZXYgJXMsIGJsb2NrICVsdSwgc2l6ZSAlbHUpIiwKIAkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIG9mZnNldCAvIHMtPnNfYmxvY2tzaXplLAogCQkJCSBzLT5zX2Jsb2Nrc2l6ZSk7CiAJCXJldHVybiAxOwpAQCAtMTM0Miw4ICsxMzYzLDggQEAKIAogCXJzID0gKHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqKWJoLT5iX2RhdGE7CiAJaWYgKHNiX2Jsb2Nrc2l6ZShycykgIT0gcy0+c19ibG9ja3NpemUpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAxMTogcmVhZF9zdXBlcl9ibG9jazogIgotCQkJCSAiY2FuJ3QgZmluZCBhIHJlaXNlcmZzIGZpbGVzeXN0ZW0gb24gKGRldiAlcywgYmxvY2sgJUx1LCBzaXplICVsdSlcbiIsCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMTEiLCAiY2FuJ3QgZmluZCBhIHJlaXNlcmZzICIKKwkJCQkgImZpbGVzeXN0ZW0gb24gKGRldiAlcywgYmxvY2sgJUx1LCBzaXplICVsdSkiLAogCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwKIAkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAogCQkJCSBzLT5zX2Jsb2Nrc2l6ZSk7CkBAIC0xMzUzLDkgKzEzNzQsMTAgQEAKIAogCWlmIChycy0+c192MS5zX3Jvb3RfYmxvY2sgPT0gY3B1X3RvX2xlMzIoLTEpKSB7CiAJCWJyZWxzZShiaCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgIlVuZmluaXNoZWQgcmVpc2VyZnNjayAtLXJlYnVpbGQtdHJlZSBydW4gZGV0ZWN0ZWQuIFBsZWFzZSBydW5cbiIKLQkJCQkgInJlaXNlcmZzY2sgLS1yZWJ1aWxkLXRyZWUgYW5kIHdhaXQgZm9yIGEgY29tcGxldGlvbi4gSWYgdGhhdCBmYWlsc1xuIgorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE5IiwgIlVuZmluaXNoZWQgcmVpc2VyZnNjayAiCisJCQkJICItLXJlYnVpbGQtdHJlZSBydW4gZGV0ZWN0ZWQuIFBsZWFzZSBydW5cbiIKKwkJCQkgInJlaXNlcmZzY2sgLS1yZWJ1aWxkLXRyZWUgYW5kIHdhaXQgZm9yIGEgIgorCQkJCSAiY29tcGxldGlvbi4gSWYgdGhhdCBmYWlsc1xuIgogCQkJCSAiZ2V0IG5ld2VyIHJlaXNlcmZzcHJvZ3MgcGFja2FnZSIpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMzY3LDE4ICsxMzg5LDE1IEBACiAJCS8qIG1hZ2ljIGlzIG9mIG5vbi1zdGFuZGFyZCBqb3VybmFsIGZpbGVzeXN0ZW0sIGxvb2sgYXQgc192ZXJzaW9uIHRvCiAJCSAgIGZpbmQgd2hpY2ggZm9ybWF0IGlzIGluIHVzZSAqLwogCQlpZiAoc2JfdmVyc2lvbihycykgPT0gUkVJU0VSRlNfVkVSU0lPTl8yKQotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInJlYWRfc3VwZXJfYmxvY2s6IGZvdW5kIHJlaXNlcmZzIGZvcm1hdCBcIjMuNlwiIgotCQkJCQkgIiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsIik7CisJCQlyZWlzZXJmc19pbmZvKHMsICJmb3VuZCByZWlzZXJmcyBmb3JtYXQgXCIzLjZcIiIKKwkJCQkgICAgICAiIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWxcbiIpOwogCQllbHNlIGlmIChzYl92ZXJzaW9uKHJzKSA9PSBSRUlTRVJGU19WRVJTSU9OXzEpCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAicmVhZF9zdXBlcl9ibG9jazogZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy41XCIiCi0JCQkJCSAiIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWwiKTsKKwkJCXJlaXNlcmZzX2luZm8ocywgImZvdW5kIHJlaXNlcmZzIGZvcm1hdCBcIjMuNVwiIgorCQkJCSAgICAgICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbFxuIik7CiAJCWVsc2UgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInNoLTIwMTI6IHJlYWRfc3VwZXJfYmxvY2s6IGZvdW5kIHVua25vd24gIgotCQkJCQkgImZvcm1hdCBcIiV1XCIgb2YgcmVpc2VyZnMgd2l0aCBub24tc3RhbmRhcmQgbWFnaWMiLAotCQkJCQkgc2JfdmVyc2lvbihycykpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAxMiIsICJmb3VuZCB1bmtub3duICIKKwkJCQkJICJmb3JtYXQgXCIldVwiIG9mIHJlaXNlcmZzIHdpdGggIgorCQkJCQkgIm5vbi1zdGFuZGFyZCBtYWdpYyIsIHNiX3ZlcnNpb24ocnMpKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlCkBAIC0xNDA4LDggKzE0MjcsNyBAQAogCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICYoU0JfQlVGRkVSX1dJVEhfU0IocykpKTsKIAl3YWl0X29uX2J1ZmZlcihTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAJaWYgKCFidWZmZXJfdXB0b2RhdGUoU0JfQlVGRkVSX1dJVEhfU0IocykpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInJlcmVhZF9tZXRhX2Jsb2NrcywgZXJyb3IgcmVhZGluZyB0aGUgc3VwZXIiKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwNCIsICJlcnJvciByZWFkaW5nIHRoZSBzdXBlciIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE0NTIsOCArMTQ3MCw4IEBACiAJCQlpZiAocmVpc2VyZnNfcnVwYXNvdl9oYXNoKHMpKSB7CiAJCQkJaGFzaCA9IFlVUkFfSEFTSDsKIAkJCX0KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkZTIHNlZW1zIHRvIGJlIGVtcHR5LCBhdXRvZGV0ZWN0ICIKLQkJCQkJICJpcyB1c2luZyB0aGUgZGVmYXVsdCBoYXNoIik7CisJCQlyZWlzZXJmc19pbmZvKHMsICJGUyBzZWVtcyB0byBiZSBlbXB0eSwgYXV0b2RldGVjdCAiCisJCQkJCSAiaXMgdXNpbmcgdGhlIGRlZmF1bHQgaGFzaFxuIik7CiAJCQlicmVhazsKIAkJfQogCQlyNWhhc2ggPSBHRVRfSEFTSF9WQUxVRShyNV9oYXNoKGRlLmRlX25hbWUsIGRlLmRlX25hbWVsZW4pKTsKQEAgLTE0NzMsMTAgKzE0OTEsMTAgQEAKIAkJCSYmICh5dXJhaGFzaCA9PQogCQkJICAgIEdFVF9IQVNIX1ZBTFVFKGRlaF9vZmZzZXQKIAkJCQkJICAgKCYoZGUuZGVfZGVoW2RlLmRlX2VudHJ5X251bV0pKSkpKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgIlVuYWJsZSB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCBoYXNoIGZ1bmN0aW9uLiAiCi0JCQkJCSAiUGxlYXNlIG1vdW50IHdpdGggLW8gaGFzaD17dGVhLHJ1cGFzb3YscjV9IiwKLQkJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDYiLCAiVW5hYmxlIHRvICIKKwkJCQkJICJhdXRvbWF0aWNhbGx5IGRldGVjdCBoYXNoIGZ1bmN0aW9uLiAiCisJCQkJCSAiUGxlYXNlIG1vdW50IHdpdGggLW8gIgorCQkJCQkgImhhc2g9e3RlYSxydXBhc292LHI1fSIpOwogCQkJaGFzaCA9IFVOU0VUX0hBU0g7CiAJCQlicmVhazsKIAkJfQpAQCAtMTQ5MCw3ICsxNTA4LDggQEAKIAkJCSAoZGVoX29mZnNldCgmKGRlLmRlX2RlaFtkZS5kZV9lbnRyeV9udW1dKSkpID09IHI1aGFzaCkKIAkJCWhhc2ggPSBSNV9IQVNIOwogCQllbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIlVucmVjb2duaXNlZCBoYXNoIGZ1bmN0aW9uIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA2IiwKKwkJCQkJICJVbnJlY29nbmlzZWQgaGFzaCBmdW5jdGlvbiIpOwogCQkJaGFzaCA9IFVOU0VUX0hBU0g7CiAJCX0KIAl9IHdoaWxlICgwKTsKQEAgLTE1MTQsMjEgKzE1MzMsMjQgQEAKIAkJY29kZSA9IGZpbmRfaGFzaF9vdXQocyk7CiAKIAlpZiAoY29kZSAhPSBVTlNFVF9IQVNIICYmIHJlaXNlcmZzX2hhc2hfZGV0ZWN0KHMpKSB7Ci0JCS8qIGRldGVjdGlvbiBoYXMgZm91bmQgdGhlIGhhc2gsIGFuZCB3ZSBtdXN0IGNoZWNrIGFnYWluc3QgdGhlIAotCQkgKiogbW91bnQgb3B0aW9ucyAKKwkJLyogZGV0ZWN0aW9uIGhhcyBmb3VuZCB0aGUgaGFzaCwgYW5kIHdlIG11c3QgY2hlY2sgYWdhaW5zdCB0aGUKKwkJICoqIG1vdW50IG9wdGlvbnMKIAkJICovCiAJCWlmIChyZWlzZXJmc19ydXBhc292X2hhc2gocykgJiYgY29kZSAhPSBZVVJBX0hBU0gpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA3IiwKKwkJCQkJICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgogCQkJCQkgInVuYWJsZSB0byBmb3JjZSBydXBhc292IGhhc2giLAogCQkJCQkgcmVpc2VyZnNfaGFzaG5hbWUoY29kZSkpOwogCQkJY29kZSA9IFVOU0VUX0hBU0g7CiAJCX0gZWxzZSBpZiAocmVpc2VyZnNfdGVhX2hhc2gocykgJiYgY29kZSAhPSBURUFfSEFTSCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDgiLAorCQkJCQkgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCiAJCQkJCSAidW5hYmxlIHRvIGZvcmNlIHRlYSBoYXNoIiwKIAkJCQkJIHJlaXNlcmZzX2hhc2huYW1lKGNvZGUpKTsKIAkJCWNvZGUgPSBVTlNFVF9IQVNIOwogCQl9IGVsc2UgaWYgKHJlaXNlcmZzX3I1X2hhc2gocykgJiYgY29kZSAhPSBSNV9IQVNIKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwOSIsCisJCQkJCSAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKIAkJCQkJICJ1bmFibGUgdG8gZm9yY2UgcjUgaGFzaCIsCiAJCQkJCSByZWlzZXJmc19oYXNobmFtZShjb2RlKSk7CiAJCQljb2RlID0gVU5TRVRfSEFTSDsKQEAgLTE1NDQsNyArMTU2Niw3IEBACiAJCX0KIAl9CiAKLQkvKiBpZiB3ZSBhcmUgbW91bnRlZCBSVywgYW5kIHdlIGhhdmUgYSBuZXcgdmFsaWQgaGFzaCBjb2RlLCB1cGRhdGUgCisJLyogaWYgd2UgYXJlIG1vdW50ZWQgUlcsIGFuZCB3ZSBoYXZlIGEgbmV3IHZhbGlkIGhhc2ggY29kZSwgdXBkYXRlCiAJICoqIHRoZSBzdXBlcgogCSAqLwogCWlmIChjb2RlICE9IFVOU0VUX0hBU0ggJiYKQEAgLTE1ODcsOSArMTYwOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgU1dBUk4oc2lsZW50LCBzLCAuLi4pCQkJXAorI2RlZmluZSBTV0FSTihzaWxlbnQsIHMsIGlkLCAuLi4pCQkJXAogCWlmICghKHNpbGVudCkpCQkJCVwKLQkJcmVpc2VyZnNfd2FybmluZyAocywgX19WQV9BUkdTX18pCisJCXJlaXNlcmZzX3dhcm5pbmcocywgaWQsIF9fVkFfQVJHU19fKQogCiBzdGF0aWMgaW50IHJlaXNlcmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewpAQCAtMTYyMywxMCArMTY0NSw2IEBACiAJUkVJU0VSRlNfU0IocyktPnNfYWxsb2Nfb3B0aW9ucy5wcmVhbGxvY21pbiA9IDA7CiAJLyogUHJlYWxsb2NhdGUgYnkgMTYgYmxvY2tzICgxNy0xKSBhdCBvbmNlICovCiAJUkVJU0VSRlNfU0IocyktPnNfYWxsb2Nfb3B0aW9ucy5wcmVhbGxvY3NpemUgPSAxNzsKLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKLQkvKiBJbml0aWFsaXplIHRoZSByd3NlbSBmb3IgeGF0dHIgZGlyICovCi0JaW5pdF9yd3NlbSgmUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pOwotI2VuZGlmCiAJLyogc2V0dXAgZGVmYXVsdCBibG9jayBhbGxvY2F0b3Igb3B0aW9ucyAqLwogCXJlaXNlcmZzX2luaXRfYWxsb2Nfb3B0aW9ucyhzKTsKIApAQCAtMTY0MSw4ICsxNjU5LDcgQEAKICNlbmRpZgogCiAJaWYgKGJsb2NrcykgewotCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC03OiByZWlzZXJmc19maWxsX3N1cGVyOiByZXNpemUgb3B0aW9uICIKLQkJICAgICAgImZvciByZW1vdW50IG9ubHkiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiam1hY2QtNyIsICJyZXNpemUgb3B0aW9uIGZvciByZW1vdW50IG9ubHkiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE2NTEsOCArMTY2OCw3IEBACiAJCW9sZF9mb3JtYXQgPSAxOwogCS8qIHRyeSBuZXcgZm9ybWF0ICg2NC10aCAxayBibG9jayksIHdoaWNoIGNhbiBjb250YWluIHJlaXNlcmZzIHN1cGVyIGJsb2NrICovCiAJZWxzZSBpZiAocmVhZF9zdXBlcl9ibG9jayhzLCBSRUlTRVJGU19ESVNLX09GRlNFVF9JTl9CWVRFUykpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAic2gtMjAyMTogcmVpc2VyZnNfZmlsbF9zdXBlcjogY2FuIG5vdCBmaW5kIHJlaXNlcmZzIG9uICVzIiwKKwkJU1dBUk4oc2lsZW50LCBzLCAic2gtMjAyMSIsICJjYW4gbm90IGZpbmQgcmVpc2VyZnMgb24gJXMiLAogCQkgICAgICByZWlzZXJmc19iZGV2bmFtZShzKSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMTY2NCwxMyArMTY4MCwxMiBAQAogCWlmIChzLT5zX2JkZXYgJiYgcy0+c19iZGV2LT5iZF9pbm9kZQogCSAgICAmJiBpX3NpemVfcmVhZChzLT5zX2JkZXYtPmJkX2lub2RlKSA8CiAJICAgIHNiX2Jsb2NrX2NvdW50KHJzKSAqIHNiX2Jsb2Nrc2l6ZShycykpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiRmlsZXN5c3RlbSBvbiAlcyBjYW5ub3QgYmUgbW91bnRlZCBiZWNhdXNlIGl0IGlzIGJpZ2dlciB0aGFuIHRoZSBkZXZpY2UiLAotCQkgICAgICByZWlzZXJmc19iZGV2bmFtZShzKSk7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgIllvdSBtYXkgbmVlZCB0byBydW4gZnNjayBvciBpbmNyZWFzZSBzaXplIG9mIHlvdXIgTFZNIHBhcnRpdGlvbiIpOwotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJPciBtYXkgYmUgeW91IGZvcmdvdCB0byByZWJvb3QgYWZ0ZXIgZmRpc2sgd2hlbiBpdCB0b2xkIHlvdSB0byIpOworCQlTV0FSTihzaWxlbnQsIHMsICIiLCAiRmlsZXN5c3RlbSBjYW5ub3QgYmUgIgorCQkgICAgICAibW91bnRlZCBiZWNhdXNlIGl0IGlzIGJpZ2dlciB0aGFuIHRoZSBkZXZpY2UiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiIiwgIllvdSBtYXkgbmVlZCB0byBydW4gZnNjayAiCisJCSAgICAgICJvciBpbmNyZWFzZSBzaXplIG9mIHlvdXIgTFZNIHBhcnRpdGlvbiIpOworCQlTV0FSTihzaWxlbnQsIHMsICIiLCAiT3IgbWF5IGJlIHlvdSBmb3Jnb3QgdG8gIgorCQkgICAgICAicmVib290IGFmdGVyIGZkaXNrIHdoZW4gaXQgdG9sZCB5b3UgdG8iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE2NzgsMTQgKzE2OTMsMTMgQEAKIAlzYmktPnNfbW91bnRfc3RhdGUgPSBSRUlTRVJGU19WQUxJRF9GUzsKIAogCWlmICgoZXJydmFsID0gcmVpc2VyZnNfaW5pdF9iaXRtYXBfY2FjaGUocykpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgImptYWNkLTg6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHVuYWJsZSB0byByZWFkIGJpdG1hcCIpOworCQlTV0FSTihzaWxlbnQsIHMsICJqbWFjZC04IiwgInVuYWJsZSB0byByZWFkIGJpdG1hcCIpOwogCQlnb3RvIGVycm9yOwogCX0KIAllcnJ2YWwgPSAtRUlOVkFMOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCVNXQVJOKHNpbGVudCwgcywgIkNPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBzZXQgT04iKTsKLQlTV0FSTihzaWxlbnQsIHMsICItIGl0IGlzIHNsb3cgbW9kZSBmb3IgZGVidWdnaW5nLiIpOworCVNXQVJOKHNpbGVudCwgcywgIiIsICJDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgc2V0IE9OIik7CisJU1dBUk4oc2lsZW50LCBzLCAiIiwgIi0gaXQgaXMgc2xvdyBtb2RlIGZvciBkZWJ1Z2dpbmcuIik7CiAjZW5kaWYKIAogCS8qIG1ha2UgZGF0YT1vcmRlcmVkIHRoZSBkZWZhdWx0ICovCkBAIC0xNzA2LDggKzE3MjAsOCBAQAogCX0KIAkvLyBzZXRfZGV2aWNlX3JvKHMtPnNfZGV2LCAxKSA7CiAJaWYgKGpvdXJuYWxfaW5pdChzLCBqZGV2X25hbWUsIG9sZF9mb3JtYXQsIGNvbW1pdF9tYXhfYWdlKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJzaC0yMDIyOiByZWlzZXJmc19maWxsX3N1cGVyOiB1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3VybmFsIHNwYWNlIik7CisJCVNXQVJOKHNpbGVudCwgcywgInNoLTIwMjIiLAorCQkgICAgICAidW5hYmxlIHRvIGluaXRpYWxpemUgam91cm5hbCBzcGFjZSIpOwogCQlnb3RvIGVycm9yOwogCX0gZWxzZSB7CiAJCWppbml0X2RvbmUgPSAxOwkvKiBvbmNlIHRoaXMgaXMgc2V0LCBqb3VybmFsX3JlbGVhc2UgbXVzdCBiZSBjYWxsZWQKQEAgLTE3MTUsOCArMTcyOSw4IEBACiAJCQkJICovCiAJfQogCWlmIChyZXJlYWRfbWV0YV9ibG9ja3MocykpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiam1hY2QtOTogcmVpc2VyZnNfZmlsbF9zdXBlcjogdW5hYmxlIHRvIHJlcmVhZCBtZXRhIGJsb2NrcyBhZnRlciBqb3VybmFsIGluaXQiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiam1hY2QtOSIsCisJCSAgICAgICJ1bmFibGUgdG8gcmVyZWFkIG1ldGEgYmxvY2tzIGFmdGVyIGpvdXJuYWwgaW5pdCIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTcyNCw4ICsxNzM4LDggQEAKIAkJZ290byBlcnJvcjsKIAogCWlmIChiZGV2X3JlYWRfb25seShzLT5zX2JkZXYpICYmICEocy0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiY2xtLTcwMDA6IERldGVjdGVkIHJlYWRvbmx5IGRldmljZSwgbWFya2luZyBGUyByZWFkb25seSIpOworCQlTV0FSTihzaWxlbnQsIHMsICJjbG0tNzAwMCIsCisJCSAgICAgICJEZXRlY3RlZCByZWFkb25seSBkZXZpY2UsIG1hcmtpbmcgRlMgcmVhZG9ubHkiKTsKIAkJcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJfQogCWFyZ3Mub2JqZWN0aWQgPSBSRUlTRVJGU19ST09UX09CSkVDVElEOwpAQCAtMTczNCw4ICsxNzQ4LDcgQEAKIAkgICAgaWdldDVfbG9ja2VkKHMsIFJFSVNFUkZTX1JPT1RfT0JKRUNUSUQsIHJlaXNlcmZzX2ZpbmRfYWN0b3IsCiAJCQkgcmVpc2VyZnNfaW5pdF9sb2NrZWRfaW5vZGUsICh2b2lkICopKCZhcmdzKSk7CiAJaWYgKCFyb290X2lub2RlKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgImptYWNkLTEwOiByZWlzZXJmc19maWxsX3N1cGVyOiBnZXQgcm9vdCBpbm9kZSBmYWlsZWQiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiam1hY2QtMTAiLCAiZ2V0IHJvb3QgaW5vZGUgZmFpbGVkIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNzg0LDcgKzE3OTcsNyBAQAogCQkgKiBhdm9pZGluZyBjb3JydXB0aW9uLiAtamVmZm0gKi8KIAkJaWYgKGJtYXBfd291bGRfd3JhcChyZWlzZXJmc19ibWFwX2NvdW50KHMpKSAmJgogCQkgICAgc2JfYm1hcF9ucihycykgIT0gMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItMjAzMDogVGhpcyBmaWxlIHN5c3RlbSAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci0yMDMwIiwgIlRoaXMgZmlsZSBzeXN0ZW0gIgogCQkJCQkiY2xhaW1zIHRvIHVzZSAldSBiaXRtYXAgYmxvY2tzIGluICIKIAkJCQkJIml0cyBzdXBlciBibG9jaywgYnV0IHJlcXVpcmVzICV1LiAiCiAJCQkJCSJDbGVhcmluZyB0byB6ZXJvLiIsIHNiX2JtYXBfbnIocnMpLApAQCAtMTgxNyw3ICsxODMwLDkgQEAKIAkJCX0gZWxzZSBpZiAoIXNpbGVudCkgewogCQkJCXJlaXNlcmZzX2luZm8ocywgInVzaW5nIDMuNS54IGRpc2sgZm9ybWF0XG4iKTsKIAkJCX0KLQkJfQorCQl9IGVsc2UKKwkJCXNldF9zYl9tbnRfY291bnQocnMsIHNiX21udF9jb3VudChycykgKyAxKTsKKwogCiAJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHMsIFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAkJZXJydmFsID0gam91cm5hbF9lbmQoJnRoLCBzLCAxKTsKQEAgLTE4OTAsNiArMTkwNSwxMCBAQAogCWJ1Zi0+Zl9ic2l6ZSA9IGRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CiAJLyogY2hhbmdlZCB0byBhY2NvbW1vZGF0ZSBnY2MgZm9sa3MuICovCiAJYnVmLT5mX3R5cGUgPSBSRUlTRVJGU19TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQsIHNpemVvZihycy0+c191dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQgKyBzaXplb2YocnMtPnNfdXVpZCkvMiwKKwkJCQlzaXplb2YocnMtPnNfdXVpZCkvMik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjAzMSw4ICsyMDUwLDggQEAKIAlpZiAoIShSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spKSB7CiAJCWVyciA9IHJlaXNlcmZzX3VucGFjayhpbm9kZSwgTlVMTCk7CiAJCWlmIChlcnIpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJInJlaXNlcmZzOiBVbnBhY2tpbmcgdGFpbCBvZiBxdW90YSBmaWxlIGZhaWxlZCIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzdXBlci02NTIwIiwKKwkJCQkiVW5wYWNraW5nIHRhaWwgb2YgcXVvdGEgZmlsZSBmYWlsZWQiCiAJCQkJIiAoJWQpLiBDYW5ub3QgdHVybiBvbiBxdW90YXMuIiwgZXJyKTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKQEAgLTIwNDMsOCArMjA2Miw4IEBACiAJaWYgKFJFSVNFUkZTX1NCKHNiKS0+c19xZl9uYW1lc1t0eXBlXSkgewogCQkvKiBRdW90YWZpbGUgbm90IG9mIGZzIHJvb3Q/ICovCiAJCWlmIChwYXRoLmRlbnRyeS0+ZF9wYXJlbnQgIT0gc2ItPnNfcm9vdCkKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJICJyZWlzZXJmczogUXVvdGEgZmlsZSBub3Qgb24gZmlsZXN5c3RlbSByb290LiAiCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic3VwZXItNjUyMSIsCisJCQkJICJRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKIAkJCQkgIkpvdXJuYWxsZWQgcXVvdGEgd2lsbCBub3Qgd29yay4iKTsKIAl9CiAKQEAgLTIxOTUsOSArMjIxNCw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKChyZXQgPSByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycygpKSkKLQkJZ290byBmYWlsZWRfcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnM7Ci0KIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2luaXQoKTsKIAlyZWlzZXJmc19wcm9jX3JlZ2lzdGVyX2dsb2JhbCgidmVyc2lvbiIsCiAJCQkJICAgICAgcmVpc2VyZnNfZ2xvYmFsX3ZlcnNpb25faW5fcHJvYyk7CkBAIC0yMjA4LDkgKzIyMjQsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0KLSAgICAgIGZhaWxlZF9yZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVyczoKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CkBAIC0yMjIwLDcgKzIyMzMsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yZWlzZXJmc19mcyh2b2lkKQogewotCXJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKTsKIAlyZWlzZXJmc19wcm9jX3VucmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIik7CiAJcmVpc2VyZnNfcHJvY19pbmZvX2dsb2JhbF9kb25lKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZyZWlzZXJmc19mc190eXBlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3RhaWxfY29udmVyc2lvbi5jIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKaW5kZXggZjgxMjFhMS4uZDdmNmU1MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKKysrIGIvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAkJCQkgICBjb252ZXJ0ZWQgaXRlbS4gKi8KIAlzdHJ1Y3QgaXRlbV9oZWFkIGluZF9paDsJLyogbmV3IGluZGlyZWN0IGl0ZW0gdG8gYmUgaW5zZXJ0ZWQgb3IKIAkJCQkJICAga2V5IG9mIHVuZm0gcG9pbnRlciB0byBiZSBwYXN0ZWQgKi8KLQlpbnQgbl9ibGtfc2l6ZSwgbl9yZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCisJaW50IGJsa19zaXplLCByZXR2YWw7CS8qIHJldHVybmVkIHZhbHVlIGZvciByZWlzZXJmc19pbnNlcnRfaXRlbSBhbmQgY2xvbmVzICovCiAJdW5wX3QgdW5mbV9wdHI7CQkvKiBIYW5kbGUgb24gYW4gdW5mb3JtYXR0ZWQgbm9kZQogCQkJCSAgIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUKIAkJCQkgICB0cmVlLiAqLwpAQCAtMzUsNyArMzUsNyBAQAogCiAJUkVJU0VSRlNfU0Ioc2IpLT5zX2RpcmVjdDJpbmRpcmVjdCsrOwogCi0Jbl9ibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKKwlibGtfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCS8qIGFuZCBrZXkgdG8gc2VhcmNoIGZvciBhcHBlbmQgb3IgaW5zZXJ0IHBvaW50ZXIgdG8gdGhlIG5ldwogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCkBAIC00NiwxMSArNDYsMTEgQEAKIAkvKiBTZXQgdGhlIGtleSB0byBzZWFyY2ggZm9yIHRoZSBwbGFjZSBmb3IgbmV3IHVuZm0gcG9pbnRlciAqLwogCW1ha2VfY3B1X2tleSgmZW5kX2tleSwgaW5vZGUsIHRhaWxfb2Zmc2V0LCBUWVBFX0lORElSRUNULCA0KTsKIAotCS8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzIAorCS8qIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGlzICovCiAJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC0xNDAzMDogZGlyZWN0MmluZGlyZWN0OiAiCi0JCQkJICJwYXN0ZWQgb3IgaW5zZXJ0ZWQgYnl0ZSBleGlzdHMgaW4gdGhlIHRyZWUgJUsuICIKLQkJCQkgIlVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAiUEFQLTE0MDMwIiwKKwkJCSAgICAgICAicGFzdGVkIG9yIGluc2VydGVkIGJ5dGUgZXhpc3RzIGluICIKKwkJCSAgICAgICAidGhlIHRyZWUgJUsuIFVzZSBmc2NrIHRvIHJlcGFpci4iLCAmZW5kX2tleSk7CiAJCXBhdGhyZWxzZShwYXRoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNjQsMTcgKzY0LDE3IEBACiAJCXNldF9paF9mcmVlX3NwYWNlKCZpbmRfaWgsIDApOwkvKiBkZWxldGUgYXQgbmVhcmVzdCBmdXR1cmUgKi8KIAkJcHV0X2loX2l0ZW1fbGVuKCZpbmRfaWgsIFVORk1fUF9TSVpFKTsKIAkJUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpKys7Ci0JCW5fcmV0dmFsID0KKwkJcmV0dmFsID0KIAkJICAgIHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAmZW5kX2tleSwgJmluZF9paCwgaW5vZGUsCiAJCQkJCSAoY2hhciAqKSZ1bmZtX3B0cik7CiAJfSBlbHNlIHsKIAkJLyogUGFzdGUgaW50byBsYXN0IGluZGlyZWN0IGl0ZW0gb2YgYW4gb2JqZWN0LiAqLwotCQluX3JldHZhbCA9IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAorCQlyZXR2YWwgPSByZWlzZXJmc19wYXN0ZV9pbnRvX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCSAgICAoY2hhciAqKSZ1bmZtX3B0ciwKIAkJCQkJCSAgICBVTkZNX1BfU0laRSk7CiAJfQotCWlmIChuX3JldHZhbCkgewotCQlyZXR1cm4gbl9yZXR2YWw7CisJaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAkvLyBub3RlOiBmcm9tIGhlcmUgdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QKIAkvLyB0aHJlZSBrZXkgY29tcG9uZW50cy4gVGhleSBvbmx5IGRpZmZlciBieSB0aGUgZm91cnRoIG9uZS4KQEAgLTkyLDE0ICs5MiwxMyBAQAogCQkgICBsYXN0IGl0ZW0gb2YgdGhlIGZpbGUgKi8KIAkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCAmZW5kX2tleSwgcGF0aCkgPT0KIAkJICAgIFBPU0lUSU9OX0ZPVU5EKQotCQkJcmVpc2VyZnNfcGFuaWMoc2IsCi0JCQkJICAgICAgICJQQVAtMTQwNTA6IGRpcmVjdDJpbmRpcmVjdDogIgorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJQQVAtMTQwNTAiLAogCQkJCSAgICAgICAiZGlyZWN0IGl0ZW0gKCVLKSBub3QgZm91bmQiLCAmZW5kX2tleSk7CiAJCXBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CiAJCVJGQUxTRSghaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpLAogCQkgICAgICAgInZzLTE0MDU1OiBkaXJlY3QgaXRlbSBleHBlY3RlZCglSyksIGZvdW5kICVoIiwKIAkJICAgICAgICZlbmRfa2V5LCBwX2xlX2loKTsKLQkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKG5fYmxrX3NpemUgLSAxKSkKKwkJdGFpbF9zaXplID0gKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKGJsa19zaXplIC0gMSkpCiAJCSAgICArIGloX2l0ZW1fbGVuKHBfbGVfaWgpIC0gMTsKIAogCQkvKiB3ZSBvbmx5IHNlbmQgdGhlIHVuYmggcG9pbnRlciBpZiB0aGUgYnVmZmVyIGlzIG5vdCB1cCB0byBkYXRlLgpAQCAtMTE0LDExICsxMTMsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCXVwX3RvX2RhdGVfYmggPSB1bmJoOwogCQl9Ci0JCW5fcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKKwkJcmV0dmFsID0gcmVpc2VyZnNfZGVsZXRlX2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCBpbm9kZSwKIAkJCQkJCXVwX3RvX2RhdGVfYmgpOwogCi0JCXRvdGFsX3RhaWwgKz0gbl9yZXR2YWw7Ci0JCWlmICh0YWlsX3NpemUgPT0gbl9yZXR2YWwpCisJCXRvdGFsX3RhaWwgKz0gcmV0dmFsOworCQlpZiAodGFpbF9zaXplID09IHJldHZhbCkKIAkJCS8vIGRvbmU6IGZpbGUgZG9lcyBub3QgaGF2ZSBkaXJlY3QgaXRlbXMgYW55bW9yZQogCQkJYnJlYWs7CiAKQEAgLTEzMCw3ICsxMjksNyBAQAogCQl1bnNpZ25lZCBwZ29mZiA9CiAJCSAgICAodGFpbF9vZmZzZXQgKyB0b3RhbF90YWlsIC0gMSkgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CiAJCWNoYXIgKmthZGRyID0ga21hcF9hdG9taWModXBfdG9fZGF0ZV9iaC0+Yl9wYWdlLCBLTV9VU0VSMCk7Ci0JCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBuX2Jsa19zaXplIC0gdG90YWxfdGFpbCk7CisJCW1lbXNldChrYWRkciArIHBnb2ZmLCAwLCBibGtfc2l6ZSAtIHRvdGFsX3RhaWwpOwogCQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAJfQogCkBAIC0xNzEsMTQgKzE3MCwxOCBAQAogICAgd2hhdCB3ZSBleHBlY3QgZnJvbSBpdCAobnVtYmVyIG9mIGN1dCBieXRlcykuIEJ1dCB3aGVuIHRhaWwgcmVtYWlucwogICAgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUsIHdlIHNldCBtb2RlIHRvIFNLSVBfQkFMQU5DSU5HIGFuZCB1bmxvY2sKICAgIGlub2RlICovCi1pbnQgaW5kaXJlY3QyZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsCS8qIHBhdGggdG8gdGhlIGluZGlyZWN0IGl0ZW0uICovCi0JCSAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2l0ZW1fa2V5LAkvKiBLZXkgdG8gbG9vayBmb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyIHRvIGJlIGN1dC4gKi8KK2ludCBpbmRpcmVjdDJkaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwJLyogcGF0aCB0byB0aGUgaW5kaXJlY3QgaXRlbS4gKi8KKwkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwJLyogS2V5IHRvIGxvb2sgZm9yCisJCQkJCQkJICogdW5mb3JtYXR0ZWQgbm9kZQorCQkJCQkJCSAqIHBvaW50ZXIgdG8gYmUgY3V0LiAqLwogCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwJLyogTmV3IGZpbGUgc2l6ZS4gKi8KLQkJICAgIGNoYXIgKnBfY19tb2RlKQorCQkgICAgY2hhciAqbW9kZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGl0ZW1faGVhZCBzX2loOwotCXVuc2lnbmVkIGxvbmcgbl9ibG9ja19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGJsb2NrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJY2hhciAqdGFpbDsKIAlpbnQgdGFpbF9sZW4sIHJvdW5kX3RhaWxfbGVuOwogCWxvZmZfdCBwb3MsIHBvczE7CS8qIHBvc2l0aW9uIG9mIGZpcnN0IGJ5dGUgb2YgdGhlIHRhaWwgKi8KQEAgLTE4NiwyMiArMTg5LDIyIEBACiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVJFSVNFUkZTX1NCKHBfc19zYiktPnNfaW5kaXJlY3QyZGlyZWN0Kys7CisJUkVJU0VSRlNfU0Ioc2IpLT5zX2luZGlyZWN0MmRpcmVjdCsrOwogCi0JKnBfY19tb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKKwkqbW9kZSA9IE1fU0tJUF9CQUxBTkNJTkc7CiAKIAkvKiBzdG9yZSBpdGVtIGhlYWQgcGF0aCBwb2ludHMgdG8uICovCi0JY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogCi0JdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKG5fYmxvY2tfc2l6ZSAtIDEpKTsKLQlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24ocF9zX2lub2RlKSA9PSBTVEFUX0RBVEFfVjIpCisJdGFpbF9sZW4gPSAobl9uZXdfZmlsZV9zaXplICYgKGJsb2NrX3NpemUgLSAxKSk7CisJaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjIpCiAJCXJvdW5kX3RhaWxfbGVuID0gUk9VTkRfVVAodGFpbF9sZW4pOwogCWVsc2UKIAkJcm91bmRfdGFpbF9sZW4gPSB0YWlsX2xlbjsKIAogCXBvcyA9CiAJICAgIGxlX2loX2tfb2Zmc2V0KCZzX2loKSAtIDEgKyAoaWhfaXRlbV9sZW4oJnNfaWgpIC8gVU5GTV9QX1NJWkUgLQotCQkJCQkgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkJCQkgMSkgKiBzYi0+c19ibG9ja3NpemU7CiAJcG9zMSA9IHBvczsKIAogCS8vIHdlIGFyZSBwcm90ZWN0ZWQgYnkgaV9tdXRleC4gVGhlIHRhaWwgY2FuIG5vdCBkaXNhcHBlciwgbm90CkBAIC0yMTAsMjcgKzIxMywyNiBAQAogCiAJdGFpbCA9IChjaGFyICopa21hcChwYWdlKTsJLyogdGhpcyBjYW4gc2NoZWR1bGUgKi8KIAotCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBfc19wYXRoKSkgeworCWlmIChwYXRoX2NoYW5nZWQoJnNfaWgsIHBhdGgpKSB7CiAJCS8qIHJlLXNlYXJjaCBpbmRpcmVjdCBpdGVtICovCi0JCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShwX3Nfc2IsIHBfc19pdGVtX2tleSwgcF9zX3BhdGgpCisJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpCiAJCSAgICA9PSBQT1NJVElPTl9OT1RfRk9VTkQpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJQQVAtNTUyMDogaW5kaXJlY3QyZGlyZWN0OiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC01NTIwIiwKIAkJCQkgICAgICAgIml0ZW0gdG8gYmUgY29udmVydGVkICVLIGRvZXMgbm90IGV4aXN0IiwKLQkJCQkgICAgICAgcF9zX2l0ZW1fa2V5KTsKLQkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCkpOworCQkJCSAgICAgICBpdGVtX2tleSk7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQlwb3MgPSBsZV9paF9rX29mZnNldCgmc19paCkgLSAxICsKIAkJICAgIChpaF9pdGVtX2xlbigmc19paCkgLyBVTkZNX1BfU0laRSAtCi0JCSAgICAgMSkgKiBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQkgICAgIDEpICogc2ItPnNfYmxvY2tzaXplOwogCQlpZiAocG9zICE9IHBvczEpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJ2cy01NTMwOiBpbmRpcmVjdDJkaXJlY3Q6ICIKLQkJCQkgICAgICAgInRhaWwgcG9zaXRpb24gY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHJlYWRpbmcgaXQiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTUzMCIsICJ0YWlsIHBvc2l0aW9uICIKKwkJCQkgICAgICAgImNoYW5nZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nIGl0Iik7CiAjZW5kaWYKIAl9CiAKIAkvKiBTZXQgZGlyZWN0IGl0ZW0gaGVhZGVyIHRvIGluc2VydC4gKi8KLQltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24ocF9zX2lub2RlKSwKKwltYWtlX2xlX2l0ZW1faGVhZCgmc19paCwgTlVMTCwgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oaW5vZGUpLAogCQkJICBwb3MxICsgMSwgVFlQRV9ESVJFQ1QsIHJvdW5kX3RhaWxfbGVuLAogCQkJICAweGZmZmYgLyppaF9mcmVlX3NwYWNlICovICk7CiAKQEAgLTI0MCwxMyArMjQyLDEzIEBACiAJICovCiAJdGFpbCA9IHRhaWwgKyAocG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKTsKIAotCVBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkrKzsKKwlQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkrKzsKIAotCWtleSA9ICpwX3NfaXRlbV9rZXk7CisJa2V5ID0gKml0ZW1fa2V5OwogCXNldF9jcHVfa2V5X2tfdHlwZSgma2V5LCBUWVBFX0RJUkVDVCk7CiAJa2V5LmtleV9sZW5ndGggPSA0OwogCS8qIEluc2VydCB0YWlsIGFzIG5ldyBkaXJlY3QgaXRlbSBpbiB0aGUgdHJlZSAqLwotCWlmIChyZWlzZXJmc19pbnNlcnRfaXRlbSh0aCwgcF9zX3BhdGgsICZrZXksICZzX2loLCBwX3NfaW5vZGUsCisJaWYgKHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwYXRoLCAma2V5LCAmc19paCwgaW5vZGUsCiAJCQkJIHRhaWwgPyB0YWlsIDogTlVMTCkgPCAwKSB7CiAJCS8qIE5vIGRpc2sgbWVtb3J5LiBTbyB3ZSBjYW4gbm90IGNvbnZlcnQgbGFzdCB1bmZvcm1hdHRlZCBub2RlCiAJCSAgIHRvIHRoZSBkaXJlY3QgaXRlbS4gIEluIHRoaXMgY2FzZSB3ZSB1c2VkIHRvIGFkanVzdApAQCAtMjU1LDEyICsyNTcsMTIgQEAKIAkJICAgdW5mb3JtYXR0ZWQgbm9kZS4gRm9yIG5vdyBpX3NpemUgaXMgY29uc2lkZXJlZCBhcyBndWFyZCBmb3IKIAkJICAgZ29pbmcgb3V0IG9mIGZpbGUgc2l6ZSAqLwogCQlrdW5tYXAocGFnZSk7Ci0JCXJldHVybiBuX2Jsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKKwkJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIAl9CiAJa3VubWFwKHBhZ2UpOwogCiAJLyogbWFrZSBzdXJlIHRvIGdldCB0aGUgaV9ibG9ja3MgY2hhbmdlcyBmcm9tIHJlaXNlcmZzX2luc2VydF9pdGVtICovCi0JcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBwX3NfaW5vZGUpOworCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwogCiAJLy8gbm90ZTogd2UgaGF2ZSBub3cgdGhlIHNhbWUgYXMgaW4gYWJvdmUgZGlyZWN0MmluZGlyZWN0CiAJLy8gY29udmVyc2lvbjogdGhlcmUgYXJlIHR3byBrZXlzIHdoaWNoIGhhdmUgbWF0Y2hpbmcgZmlyc3QgdGhyZWUKQEAgLTI2OCwxMSArMjcwLDExIEBACiAKIAkvKiBXZSBoYXZlIGluc2VydGVkIG5ldyBkaXJlY3QgaXRlbSBhbmQgbXVzdCByZW1vdmUgbGFzdAogCSAgIHVuZm9ybWF0dGVkIG5vZGUuICovCi0JKnBfY19tb2RlID0gTV9DVVQ7CisJKm1vZGUgPSBNX0NVVDsKIAogCS8qIHdlIHN0b3JlIHBvc2l0aW9uIG9mIGZpcnN0IGRpcmVjdCBpdGVtIGluIHRoZSBpbi1jb3JlIGlub2RlICovCi0JLy9tYXJrX2ZpbGVfd2l0aF90YWlsIChwX3NfaW5vZGUsIHBvczEgKyAxKTsKLQlSRUlTRVJGU19JKHBfc19pbm9kZSktPmlfZmlyc3RfZGlyZWN0X2J5dGUgPSBwb3MxICsgMTsKKwkvKiBtYXJrX2ZpbGVfd2l0aF90YWlsIChpbm9kZSwgcG9zMSArIDEpOyAqLworCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gcG9zMSArIDE7CiAKLQlyZXR1cm4gbl9ibG9ja19zaXplIC0gcm91bmRfdGFpbF9sZW47CisJcmV0dXJuIGJsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGFlODgxY2MuLmY4M2Y1MmIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtMjcsNiArMjcsMTAgQEAKICAqIHRoZXNlIGFyZSBzcGVjaWFsIGNhc2VzIGZvciBmaWxlc3lzdGVtIEFDTHMsIHRoZXkgYXJlIGludGVycHJldGVkIGJ5IHRoZQogICoga2VybmVsLCBpbiBhZGRpdGlvbiwgdGhleSBhcmUgbmVnYXRpdmVseSBhbmQgcG9zaXRpdmVseSBjYWNoZWQgYW5kIGF0dGFjaGVkCiAgKiB0byB0aGUgaW5vZGUgc28gdGhhdCB1bm5lY2Vzc2FyeSBsb29rdXBzIGFyZSBhdm9pZGVkLgorICoKKyAqIExvY2tpbmcgd29ya3MgbGlrZSBzbzoKKyAqIERpcmVjdG9yeSBjb21wb25lbnRzICh4YXR0ciByb290LCB4YXR0ciBkaXIpIGFyZSBwcm90ZWN0ZCBieSB0aGVpciBpX211dGV4LgorICogVGhlIHhhdHRycyB0aGVtc2VsdmVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIHhhdHRyX3NlbS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnMuaD4KQEAgLTQ0LDMzMCArNDgsMzM2IEBACiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAotI2RlZmluZSBGTF9SRUFET05MWSAxMjgKLSNkZWZpbmUgRkxfRElSX1NFTV9IRUxEIDI1NgogI2RlZmluZSBQUklWUk9PVF9OQU1FICIucmVpc2VyZnNfcHJpdiIKICNkZWZpbmUgWEFST09UX05BTUUgICAieGF0dHJzIgogCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KTsKIAotLyogUmV0dXJucyB0aGUgZGVudHJ5IHJlZmVycmluZyB0byB0aGUgcm9vdCBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBkaXJlY3RvcnkgdHJlZS4gSWYgaXQgaGFzIGFscmVhZHkgYmVlbiByZXRyaWV2ZWQsIGl0IGlzIHVzZWQuIElmIGl0Ci0gKiBoYXNuJ3QgYmVlbiBjcmVhdGVkIGFuZCB0aGUgZmxhZ3MgaW5kaWNhdGUgY3JlYXRpb24gaXMgYWxsb3dlZCwgd2UKLSAqIGF0dGVtcHQgdG8gY3JlYXRlIGl0LiBPbiBlcnJvciwgd2UgcmV0dXJuIGEgcG9pbnRlci1lbmNvZGVkIGVycm9yLgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X3hhX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzKQorLyogSGVscGVycyBmb3IgaW5vZGUgb3BzLiBXZSBkbyB0aGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhbGwgdGhlIFZGUworICogb3ZlcmhlYWQgYW5kIGFsc28gZm9yIHByb3BlciBpX211dGV4IGFubm90YXRpb24uCisgKiBkaXItPmlfbXV0ZXggbXVzdCBiZSBoZWxkIGZvciBhbGwgb2YgdGhlbS4gKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKK3N0YXRpYyBpbnQgeGF0dHJfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQogewotCXN0cnVjdCBkZW50cnkgKnByaXZyb290ID0gZGdldChSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdCk7Ci0Jc3RydWN0IGRlbnRyeSAqeGFyb290OworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCXJldHVybiBkaXItPmlfb3AtPmNyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSwgTlVMTCk7Cit9CisjZW5kaWYKIAotCS8qIFRoaXMgbmVlZHMgdG8gYmUgY3JlYXRlZCBhdCBtb3VudC10aW1lICovCi0JaWYgKCFwcml2cm9vdCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCi0JbXV0ZXhfbG9ja19uZXN0ZWQoJnByaXZyb290LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKLQlpZiAoUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290KSB7Ci0JCXhhcm9vdCA9IGRnZXQoUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JeGFyb290ID0gbG9va3VwX29uZV9sZW4oWEFST09UX05BTUUsIHByaXZyb290LCBzdHJsZW4oWEFST09UX05BTUUpKTsKLQlpZiAoSVNfRVJSKHhhcm9vdCkpIHsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICgheGFyb290LT5kX2lub2RlKSB7Ci0JCWludCBlcnIgPSAtRU5PREFUQTsKLQkJaWYgKGZsYWdzID09IDAgfHwgZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCi0JCQllcnIgPSBwcml2cm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIocHJpdnJvb3QtPmRfaW5vZGUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGFyb290LCAwNzAwKTsKLQkJaWYgKGVycikgewotCQkJZHB1dCh4YXJvb3QpOwotCQkJeGFyb290ID0gRVJSX1BUUihlcnIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0JUkVJU0VSRlNfU0Ioc2IpLT54YXR0cl9yb290ID0gZGdldCh4YXJvb3QpOwotCi0gICAgICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2cm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JZHB1dChwcml2cm9vdCk7Ci0JcmV0dXJuIHhhcm9vdDsKK3N0YXRpYyBpbnQgeGF0dHJfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisJcmV0dXJuIGRpci0+aV9vcC0+bWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQogCi0vKiBPcGVucyB0aGUgZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlub2RlJ3MgZXh0ZW5kZWQgYXR0cmlidXRlIHN0b3JlLgotICogSWYgZmxhZ3MgYWxsb3csIHRoZSB0cmVlIHRvIHRoZSBkaXJlY3RvcnkgbWF5IGJlIGNyZWF0ZWQuIElmIGNyZWF0aW9uIGlzCi0gKiBwcm9oaWJpdGVkLCAtRU5PREFUQSBpcyByZXR1cm5lZC4gKi8KKy8qIFdlIHVzZSBJX01VVEVYX0NISUxEIGhlcmUgdG8gc2lsZW5jZSBsb2NrZGVwLiBJdCdzIHNhZmUgYmVjYXVzZSB4YXR0cgorICogbXV0YXRpb24gb3BzIGFyZW4ndCBjYWxsZWQgZHVyaW5nIHJlbmFtZSBvciBzcGxhY2UsIHdoaWNoIGFyZSB0aGUKKyAqIG9ubHkgb3RoZXIgdXNlcnMgb2YgSV9NVVRFWF9DSElMRC4gSXQgdmlvbGF0ZXMgdGhlIG9yZGVyaW5nLCBidXQgdGhhdCdzCisgKiBiZXR0ZXIgdGhhbiBhbGxvY2F0aW5nIGFub3RoZXIgc3ViY2xhc3MganVzdCBmb3IgdGhpcyBjb2RlLiAqLworc3RhdGljIGludCB4YXR0cl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyb3I7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisKKwltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKKwllcnJvciA9IGRpci0+aV9vcC0+dW5saW5rKGRpciwgZGVudHJ5KTsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlpZiAoIWVycm9yKQorCQlkX2RlbGV0ZShkZW50cnkpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCB4YXR0cl9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnJvcjsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOworCWRlbnRyeV91bmhhc2goZGVudHJ5KTsKKwllcnJvciA9IGRpci0+aV9vcC0+cm1kaXIoZGlyLCBkZW50cnkpOworCWlmICghZXJyb3IpCisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mbGFncyB8PSBTX0RFQUQ7CisJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCWlmICghZXJyb3IpCisJCWRfZGVsZXRlKGRlbnRyeSk7CisJZHB1dChkZW50cnkpOworCisJcmV0dXJuIGVycm9yOworfQorCisjZGVmaW5lIHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpCSghZmxhZ3MgfHwgZmxhZ3MgJiBYQVRUUl9DUkVBVEUpCisKKy8qIFJldHVybnMgYW5kIHBvc3NpYmx5IGNyZWF0ZXMgdGhlIHhhdHRyIGRpci4gKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3JfY3JlYXRlX2RpcihzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCUJVR19PTighcGFyZW50KTsKKworCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHBhcmVudCwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBkZW50cnk7CisJZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQlpbnQgZXJyID0gLUVOT0RBVEE7CisKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0geGF0dHJfbWtkaXIocGFyZW50LT5kX2lub2RlLCBkZW50cnksIDA3MDApOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQl9CisKKwkJaWYgKGVycikgeworCQkJZHB1dChkZW50cnkpOworCQkJZGVudHJ5ID0gRVJSX1BUUihlcnIpOworCQl9CisJfQorCisJcmV0dXJuIGRlbnRyeTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKm9wZW5feGFfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGRlbnRyeSAqcHJpdnJvb3QgPSBSRUlTRVJGU19TQihzYiktPnByaXZfcm9vdDsKKwlpZiAoIXByaXZyb290KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7CisJcmV0dXJuIGxvb2t1cF9vcl9jcmVhdGVfZGlyKHByaXZyb290LCBYQVJPT1RfTkFNRSwgZmxhZ3MpOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqb3Blbl94YV9kaXIoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBkZW50cnkgKnhhcm9vdCwgKnhhZGlyOwogCWNoYXIgbmFtZWJ1ZlsxN107CiAKLQl4YXJvb3QgPSBnZXRfeGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOworCXhhcm9vdCA9IG9wZW5feGFfcm9vdChpbm9kZS0+aV9zYiwgZmxhZ3MpOwogCWlmIChJU19FUlIoeGFyb290KSkKIAkJcmV0dXJuIHhhcm9vdDsKIAotCS8qIG9rLCB3ZSBoYXZlIHhhcm9vdCBvcGVuICovCiAJc25wcmludGYobmFtZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAiJVguJVgiLAogCQkgbGUzMl90b19jcHUoSU5PREVfUEtFWShpbm9kZSktPmtfb2JqZWN0aWQpLAogCQkgaW5vZGUtPmlfZ2VuZXJhdGlvbik7Ci0JeGFkaXIgPSBsb29rdXBfb25lX2xlbihuYW1lYnVmLCB4YXJvb3QsIHN0cmxlbihuYW1lYnVmKSk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKLQkJZHB1dCh4YXJvb3QpOwotCQlyZXR1cm4geGFkaXI7Ci0JfQogCi0JaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlpbnQgZXJyOwotCQlpZiAoZmxhZ3MgPT0gMCB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkgewotCQkJLyogQWx0aG91Z2ggdGhlcmUgaXMgbm90aGluZyBlbHNlIHRyeWluZyB0byBjcmVhdGUgdGhpcyBkaXJlY3RvcnksCi0JCQkgKiBhbm90aGVyIGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIGhhc2ggbWF5IGJlIGNyZWF0ZWQsIHNvIHdlIG5lZWQKLQkJCSAqIHRvIHByb3RlY3QgYWdhaW5zdCB0aGF0ICovCi0JCQllcnIgPQotCQkJICAgIHhhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIoeGFyb290LT5kX2lub2RlLCB4YWRpciwKLQkJCQkJCQkgMDcwMCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJZHB1dCh4YXJvb3QpOwotCQkJCWRwdXQoeGFkaXIpOwotCQkJCXJldHVybiBFUlJfUFRSKGVycik7Ci0JCQl9Ci0JCX0KLQkJaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQkJZHB1dCh4YXJvb3QpOwotCQkJZHB1dCh4YWRpcik7Ci0JCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0JCX0KLQl9Ci0KKwl4YWRpciA9IGxvb2t1cF9vcl9jcmVhdGVfZGlyKHhhcm9vdCwgbmFtZWJ1ZiwgZmxhZ3MpOwogCWRwdXQoeGFyb290KTsKIAlyZXR1cm4geGFkaXI7CisKIH0KIAorLyogVGhlIGZvbGxvd2luZyBhcmUgc2lkZSBlZmZlY3RzIG9mIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseQorICogbW9kaWZ5aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzIHBlcm1pc3Npb25zCisgKiBvciBvd25lcnNoaXAgY2hhbmdlcywgb2JqZWN0IGRlbGV0aW9ucywgZXRjLiAqLworc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgeworCXN0cnVjdCBkZW50cnkgKnhhZGlyOworCWludCBjb3VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cmllc1s4XTsKK307CisKK3N0YXRpYyBpbnQKK2ZpbGxfd2l0aF9kZW50cmllcyh2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBsb2ZmX3Qgb2Zmc2V0LAorCQkgICAgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3sKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqZGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisKKwlpZiAoZGJ1Zi0+Y291bnQgPT0gQVJSQVlfU0laRShkYnVmLT5kZW50cmllcykpCisJCXJldHVybiAtRU5PU1BDOworCisJaWYgKG5hbWVbMF0gPT0gJy4nICYmIChuYW1lWzFdID09ICdcMCcgfHwKKwkJCSAgICAgICAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpCisJCXJldHVybiAwOworCisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGJ1Zi0+eGFkaXIsIG5hbWVsZW4pOworCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQlyZXR1cm4gUFRSX0VSUihkZW50cnkpOworCX0gZWxzZSBpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgeworCQkvKiBBIGRpcmVjdG9yeSBlbnRyeSBleGlzdHMsIGJ1dCBubyBmaWxlPyAqLworCQlyZWlzZXJmc19lcnJvcihkZW50cnktPmRfc2IsICJ4YXR0ci0yMDAwMyIsCisJCQkgICAgICAgIkNvcnJ1cHRlZCBkaXJlY3Rvcnk6IHhhdHRyICVzIGxpc3RlZCBidXQgIgorCQkJICAgICAgICJub3QgZm91bmQgZm9yIGZpbGUgJXMuXG4iLAorCQkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRidWYtPnhhZGlyLT5kX25hbWUubmFtZSk7CisJCWRwdXQoZGVudHJ5KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGJ1Zi0+ZGVudHJpZXNbZGJ1Zi0+Y291bnQrK10gPSBkZW50cnk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2RlbnRyeV9idWYoc3RydWN0IHJlaXNlcmZzX2RlbnRyeV9idWYgKmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5jb3VudDsgaSsrKQorCQlpZiAoYnVmLT5kZW50cmllc1tpXSkKKwkJCWRwdXQoYnVmLT5kZW50cmllc1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBpbnQgKCphY3Rpb24pKHN0cnVjdCBkZW50cnkgKiwgdm9pZCAqKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlpbnQgaSwgZXJyID0gMDsKKwlsb2ZmX3QgcG9zID0gMDsKKwlzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiBidWYgPSB7CisJCS5jb3VudCA9IDAsCisJfTsKKworCS8qIFNraXAgb3V0LCBhbiB4YXR0ciBoYXMgbm8geGF0dHJzIGFzc29jaWF0ZWQgd2l0aCBpdCAqLworCWlmIChJU19QUklWQVRFKGlub2RlKSB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gMDsKKworCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBYQVRUUl9SRVBMQUNFKTsKKwlpZiAoSVNfRVJSKGRpcikpIHsKKwkJZXJyID0gUFRSX0VSUihkaXIpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKKwkJZXJyID0gMDsKKwkJZ290byBvdXRfZGlyOworCX0KKworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCWJ1Zi54YWRpciA9IGRpcjsKKwllcnIgPSByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkaXIsICZidWYsIGZpbGxfd2l0aF9kZW50cmllcywgJnBvcyk7CisJd2hpbGUgKChlcnIgPT0gMCB8fCBlcnIgPT0gLUVOT1NQQykgJiYgYnVmLmNvdW50KSB7CisJCWVyciA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5jb3VudCAmJiBidWYuZGVudHJpZXNbaV07IGkrKykgeworCQkJaW50IGxlcnIgPSAwOworCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gYnVmLmRlbnRyaWVzW2ldOworCisJCQlpZiAoZXJyID09IDAgJiYgIVNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkJCWxlcnIgPSBhY3Rpb24oZGVudHJ5LCBkYXRhKTsKKworCQkJZHB1dChkZW50cnkpOworCQkJYnVmLmRlbnRyaWVzW2ldID0gTlVMTDsKKwkJCWVyciA9IGxlcnIgPzogZXJyOworCQl9CisJCWJ1Zi5jb3VudCA9IDA7CisJCWlmICghZXJyKQorCQkJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLAorCQkJCQkJICAgICAgZmlsbF93aXRoX2RlbnRyaWVzLCAmcG9zKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJLyogQ2xlYW4gdXAgYWZ0ZXIgYSBmYWlsZWQgcmVhZGRpciAqLworCWNsZWFudXBfZGVudHJ5X2J1ZigmYnVmKTsKKworCWlmICghZXJyKSB7CisJCS8qIFdlIHN0YXJ0IGEgdHJhbnNhY3Rpb24gaGVyZSB0byBhdm9pZCBhIEFCQkEgc2l0dWF0aW9uCisJCSAqIGJldHdlZW4gdGhlIHhhdHRyIHJvb3QncyBpX211dGV4IGFuZCB0aGUgam91cm5hbCBsb2NrLgorCQkgKiBUaGlzIGRvZXNuJ3QgaW5jdXIgbXVjaCBhZGRpdGlvbmFsIG92ZXJoZWFkIHNpbmNlIHRoZQorCQkgKiBuZXcgdHJhbnNhY3Rpb24gd2lsbCBqdXN0IG5lc3QgaW5zaWRlIHRoZQorCQkgKiBvdXRlciB0cmFuc2FjdGlvbi4gKi8KKwkJaW50IGJsb2NrcyA9IEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDIgKworCQkJICAgICA0ICogUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKKwkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwkJZXJyID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQlpZiAoIWVycikgeworCQkJaW50IGplcnJvcjsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4LAorCQkJCQkgIElfTVVURVhfWEFUVFIpOworCQkJZXJyID0gYWN0aW9uKGRpciwgZGF0YSk7CisJCQlqZXJyb3IgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBibG9ja3MpOworCQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfcGFyZW50LT5kX2lub2RlLT5pX211dGV4KTsKKwkJCWVyciA9IGplcnJvciA/OiBlcnI7CisJCX0KKwl9CitvdXRfZGlyOgorCWRwdXQoZGlyKTsKK291dDoKKwkvKiAtRU5PREFUQSBpc24ndCBhbiBlcnJvciAqLworCWlmIChlcnIgPT0gLUVOT0RBVEEpCisJCWVyciA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkZWxldGVfb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisKKwkvKiBUaGlzIGlzIHRoZSB4YXR0ciBkaXIsIGhhbmRsZSBzcGVjaWFsbHkuICovCisJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlyZXR1cm4geGF0dHJfcm1kaXIoZGlyLCBkZW50cnkpOworCisJcmV0dXJuIHhhdHRyX3VubGluayhkaXIsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgY2hvd25fb25lX3hhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gZGF0YTsKKwlyZXR1cm4gcmVpc2VyZnNfc2V0YXR0cihkZW50cnksIGF0dHJzKTsKK30KKworLyogTm8gaV9tdXRleCwgYnV0IHRoZSBpbm9kZSBpcyB1bmNvbm5lY3RlZC4gKi8KK2ludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGVyciA9IHJlaXNlcmZzX2Zvcl9lYWNoX3hhdHRyKGlub2RlLCBkZWxldGVfb25lX3hhdHRyLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDA0IiwKKwkJCQkgIkNvdWxkbid0IGRlbGV0ZSBhbGwgeGF0dHJzICglZClcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogaW5vZGUtPmlfbXV0ZXg6IGRvd24gKi8KK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKK3sKKwlpbnQgZXJyID0gcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoaW5vZGUsIGNob3duX29uZV94YXR0ciwgYXR0cnMpOworCWlmIChlcnIpCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDciLAorCQkJCSAiQ291bGRuJ3QgY2hvd24gYWxsIHhhdHRycyAoJWQpXG4iLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKIC8qIFJldHVybnMgYSBkZW50cnkgY29ycmVzcG9uZGluZyB0byBhIHNwZWNpZmljIGV4dGVuZGVkIGF0dHJpYnV0ZSBmaWxlCiAgKiBmb3IgdGhlIGlub2RlLiBJZiBmbGFncyBhbGxvdywgdGhlIGZpbGUgaXMgY3JlYXRlZC4gT3RoZXJ3aXNlLCBhCiAgKiB2YWxpZCBvciBuZWdhdGl2ZSBkZW50cnksIG9yIGFuIGVycm9yIGlzIHJldHVybmVkLiAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKmdldF94YV9maWxlX2RlbnRyeShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKnhhdHRyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqeGFkaXIsICp4YWZpbGU7CiAJaW50IGVyciA9IDA7CiAKIAl4YWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBmbGFncyk7Ci0JaWYgKElTX0VSUih4YWRpcikpIHsKKwlpZiAoSVNfRVJSKHhhZGlyKSkKIAkJcmV0dXJuIEVSUl9DQVNUKHhhZGlyKTsKLQl9IGVsc2UgaWYgKCF4YWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RBVEEpOwotCX0KIAogCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBzdHJsZW4obmFtZSkpOwogCWlmIChJU19FUlIoeGFmaWxlKSkgewotCQlkcHV0KHhhZGlyKTsKLQkJcmV0dXJuIEVSUl9DQVNUKHhhZmlsZSk7Ci0JfQotCi0JaWYgKHhhZmlsZS0+ZF9pbm9kZSkgewkvKiBmaWxlIGV4aXN0cyAqLwotCQlpZiAoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpIHsKLQkJCWVyciA9IC1FRVhJU1Q7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFIHx8IGZsYWdzICYgRkxfUkVBRE9OTFkpIHsKKwkJZXJyID0gUFRSX0VSUih4YWZpbGUpOwogCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQkvKiBpbm9kZS0+aV9tdXRleCBpcyBkb3duLCBzbyBub3RoaW5nIGVsc2UgY2FuIHRyeSB0byBjcmVhdGUKLQkJICogdGhlIHNhbWUgeGF0dHIgKi8KLQkJZXJyID0geGFkaXItPmRfaW5vZGUtPmlfb3AtPmNyZWF0ZSh4YWRpci0+ZF9pbm9kZSwgeGFmaWxlLAotCQkJCQkJICAgMDcwMCB8IFNfSUZSRUcsIE5VTEwpOworCX0KIAotCQlpZiAoZXJyKSB7Ci0JCQlkcHV0KHhhZmlsZSk7Ci0JCQlnb3RvIG91dDsKKwlpZiAoeGFmaWxlLT5kX2lub2RlICYmIChmbGFncyAmIFhBVFRSX0NSRUFURSkpCisJCWVyciA9IC1FRVhJU1Q7CisKKwlpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgeworCQllcnIgPSAtRU5PREFUQTsKKwkJaWYgKHhhdHRyX21heV9jcmVhdGUoZmxhZ3MpKSB7CisJCQltdXRleF9sb2NrX25lc3RlZCgmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQllcnIgPSB4YXR0cl9jcmVhdGUoeGFkaXItPmRfaW5vZGUsIHhhZmlsZSwKKwkJCQkJICAgICAgMDcwMHxTX0lGUkVHKTsKKwkJCW11dGV4X3VubG9jaygmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQl9CiAJfQogCi0gICAgICBvdXQ6CisJaWYgKGVycikKKwkJZHB1dCh4YWZpbGUpOworb3V0OgogCWRwdXQoeGFkaXIpOwogCWlmIChlcnIpCi0JCXhhZmlsZSA9IEVSUl9QVFIoZXJyKTsKLQllbHNlIGlmICgheGFmaWxlLT5kX2lub2RlKSB7Ci0JCWRwdXQoeGFmaWxlKTsKLQkJeGFmaWxlID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCXJldHVybiB4YWZpbGU7CiB9CiAKLS8qCi0gKiB0aGlzIGlzIHZlcnkgc2ltaWxhciB0byBmcy9yZWlzZXJmcy9kaXIuYzpyZWlzZXJmc19yZWFkZGlyLCBidXQKLSAqIHdlIG5lZWQgdG8gZHJvcCB0aGUgcGF0aCBiZWZvcmUgY2FsbGluZyB0aGUgZmlsbGRpciBzdHJ1Y3QuICBUaGF0Ci0gKiB3b3VsZCBiZSBhIGJpZyBwZXJmb3JtYW5jZSBoaXQgdG8gdGhlIG5vbi14YXR0ciBjYXNlLCBzbyBJJ3ZlIGNvcGllZAotICogdGhlIHdob2xlIHRoaW5nIGZvciBub3cuIC0tY2xtCi0gKgotICogdGhlIGJpZyBkaWZmZXJlbmNlIGlzIHRoYXQgSSBnbyBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgZGlyZWN0b3J5LAotICogYW5kIGRvbid0IG1lc3Mgd2l0aCBmLT5mX3BvcywgYnV0IHRoZSBpZGVhIGlzIHRoZSBzYW1lLiAgRG8gc29tZQotICogYWN0aW9uIG9uIGVhY2ggYW5kIGV2ZXJ5IGVudHJ5IGluIHRoZSBkaXJlY3RvcnkuCi0gKgotICogd2UncmUgY2FsbGVkIHdpdGggaV9tdXRleCBoZWxkLCBzbyB0aGVyZSBhcmUgbm8gd29ycmllcyBhYm91dCB0aGUgZGlyZWN0b3J5Ci0gKiBjaGFuZ2luZyB1bmRlcm5lYXRoIHVzLgotICovCi1zdGF0aWMgaW50IF9feGF0dHJfcmVhZGRpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQotewotCXN0cnVjdCBjcHVfa2V5IHBvc19rZXk7CS8qIGtleSBvZiBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBkaXJlY3RvcnkgKGtleSBvZiBkaXJlY3RvcnkgZW50cnkpICovCi0JSU5JVElBTElaRV9QQVRIKHBhdGhfdG9fZW50cnkpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGVudHJ5X251bTsKLQlzdHJ1Y3QgaXRlbV9oZWFkICppaCwgdG1wX2loOwotCWludCBzZWFyY2hfcmVzOwotCWNoYXIgKmxvY2FsX2J1ZjsKLQlsb2ZmX3QgbmV4dF9wb3M7Ci0JY2hhciBzbWFsbF9idWZbMzJdOwkvKiBhdm9pZCBrbWFsbG9jIGlmIHdlIGNhbiAqLwotCXN0cnVjdCByZWlzZXJmc19kZV9oZWFkICpkZWg7Ci0JaW50IGRfcmVjbGVuOwotCWNoYXIgKmRfbmFtZTsKLQlvZmZfdCBkX29mZjsKLQlpbm9fdCBkX2lubzsKLQlzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5IGRlOwotCi0JLyogZm9ybSBrZXkgZm9yIHNlYXJjaCB0aGUgbmV4dCBkaXJlY3RvcnkgZW50cnkgdXNpbmcgZl9wb3MgZmllbGQgb2YKLQkgICBmaWxlIHN0cnVjdHVyZSAqLwotCW5leHRfcG9zID0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSk7Ci0KLQl3aGlsZSAoMSkgewotCSAgICAgIHJlc2VhcmNoOgotCQlpZiAobmV4dF9wb3MgPD0gRE9UX0RPVF9PRkZTRVQpCi0JCQlicmVhazsKLQkJbWFrZV9jcHVfa2V5KCZwb3Nfa2V5LCBpbm9kZSwgbmV4dF9wb3MsIFRZUEVfRElSRU5UUlksIDMpOwotCi0JCXNlYXJjaF9yZXMgPQotCQkgICAgc2VhcmNoX2J5X2VudHJ5X2tleShpbm9kZS0+aV9zYiwgJnBvc19rZXksICZwYXRoX3RvX2VudHJ5LAotCQkJCQkmZGUpOwotCQlpZiAoc2VhcmNoX3JlcyA9PSBJT19FUlJPUikgewotCQkJLy8gRklYTUU6IHdlIGNvdWxkIGp1c3Qgc2tpcCBwYXJ0IG9mIGRpcmVjdG9yeSB3aGljaCBjb3VsZAotCQkJLy8gbm90IGJlIHJlYWQKLQkJCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCWlmIChzZWFyY2hfcmVzID09IE5BTUVfTk9UX0ZPVU5EKQotCQkJZGUuZGVfZW50cnlfbnVtLS07Ci0KLQkJc2V0X2RlX25hbWVfYW5kX25hbWVsZW4oJmRlKTsKLQkJZW50cnlfbnVtID0gZGUuZGVfZW50cnlfbnVtOwotCQlkZWggPSAmKGRlLmRlX2RlaFtlbnRyeV9udW1dKTsKLQotCQliaCA9IGRlLmRlX2JoOwotCQlpaCA9IGRlLmRlX2loOwotCi0JCWlmICghaXNfZGlyZW50cnlfbGVfaWgoaWgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAibm90IGRpcmVudHJ5ICVoIiwgaWgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY29weV9pdGVtX2hlYWQoJnRtcF9paCwgaWgpOwotCi0JCS8qIHdlIG11c3QgaGF2ZSBmb3VuZCBpdGVtLCB0aGF0IGlzIGl0ZW0gb2YgdGhpcyBkaXJlY3RvcnksICovCi0JCVJGQUxTRShDT01QX1NIT1JUX0tFWVMoJihpaC0+aWhfa2V5KSwgJnBvc19rZXkpLAotCQkgICAgICAgInZzLTkwMDA6IGZvdW5kIGl0ZW0gJWggZG9lcyBub3QgbWF0Y2ggdG8gZGlyIHdlIHJlYWRkaXIgJUsiLAotCQkgICAgICAgaWgsICZwb3Nfa2V5KTsKLQotCQlpZiAoZGVoX29mZnNldChkZWgpIDw9IERPVF9ET1RfT0ZGU0VUKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvb2sgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5ICovCi0JCW5leHRfcG9zID0gZGVoX29mZnNldChkZWgpIC0gMTsKLQotCQlpZiAoIWRlX3Zpc2libGUoZGVoKSkKLQkJCS8qIGl0IGlzIGhpZGRlbiBlbnRyeSAqLwotCQkJY29udGludWU7Ci0KLQkJZF9yZWNsZW4gPSBlbnRyeV9sZW5ndGgoYmgsIGloLCBlbnRyeV9udW0pOwotCQlkX25hbWUgPSBCX0lfREVIX0VOVFJZX0ZJTEVfTkFNRShiaCwgaWgsIGRlaCk7Ci0JCWRfb2ZmID0gZGVoX29mZnNldChkZWgpOwotCQlkX2lubyA9IGRlaF9vYmplY3RpZChkZWgpOwotCi0JCWlmICghZF9uYW1lW2RfcmVjbGVuIC0gMV0pCi0JCQlkX3JlY2xlbiA9IHN0cmxlbihkX25hbWUpOwotCi0JCWlmIChkX3JlY2xlbiA+IFJFSVNFUkZTX01BWF9OQU1FKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKLQkJCS8qIHRvbyBiaWcgdG8gc2VuZCBiYWNrIHRvIFZGUyAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBJZ25vcmUgdGhlIC5yZWlzZXJmc19wcml2IGVudHJ5ICovCi0JCWlmIChyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpICYmCi0JCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkgICAgZGVoX29iamVjdGlkKGRlaCkgPT0KLQkJICAgIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkKLQkJCQkoUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QtPmRfaW5vZGUpLT4KLQkJCQlrX29iamVjdGlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChkX3JlY2xlbiA8PSAzMikgewotCQkJbG9jYWxfYnVmID0gc21hbGxfYnVmOwotCQl9IGVsc2UgewotCQkJbG9jYWxfYnVmID0ga21hbGxvYyhkX3JlY2xlbiwgR0ZQX05PRlMpOwotCQkJaWYgKCFsb2NhbF9idWYpIHsKLQkJCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJaWYgKGl0ZW1fbW92ZWQoJnRtcF9paCwgJnBhdGhfdG9fZW50cnkpKSB7Ci0JCQkJa2ZyZWUobG9jYWxfYnVmKTsKLQotCQkJCS8qIHNpZ2gsIG11c3QgcmV0cnkuICBEbyB0aGlzIHNhbWUgb2Zmc2V0IGFnYWluICovCi0JCQkJbmV4dF9wb3MgPSBkX29mZjsKLQkJCQlnb3RvIHJlc2VhcmNoOwotCQkJfQotCQl9Ci0KLQkJLy8gTm90ZSwgdGhhdCB3ZSBjb3B5IG5hbWUgdG8gdXNlciBzcGFjZSB2aWEgdGVtcG9yYXJ5Ci0JCS8vIGJ1ZmZlciAobG9jYWxfYnVmKSBiZWNhdXNlIGZpbGxkaXIgd2lsbCBibG9jayBpZgotCQkvLyB1c2VyIHNwYWNlIGJ1ZmZlciBpcyBzd2FwcGVkIG91dC4gQXQgdGhhdCB0aW1lCi0JCS8vIGVudHJ5IGNhbiBtb3ZlIHRvIHNvbWV3aGVyZSBlbHNlCi0JCW1lbWNweShsb2NhbF9idWYsIGRfbmFtZSwgZF9yZWNsZW4pOwotCi0JCS8qIHRoZSBmaWxsZGlyIGZ1bmN0aW9uIG1pZ2h0IG5lZWQgdG8gc3RhcnQgdHJhbnNhY3Rpb25zLAotCQkgKiBvciBkbyB3aG8ga25vd3Mgd2hhdC4gIFJlbGVhc2UgdGhlIHBhdGggbm93IHRoYXQgd2UndmUKLQkJICogY29waWVkIGFsbCB0aGUgaW1wb3J0YW50IHN0dWZmIG91dCBvZiB0aGUgZGVoCi0JCSAqLwotCQlwYXRocmVsc2UoJnBhdGhfdG9fZW50cnkpOwotCi0JCWlmIChmaWxsZGlyKGRpcmVudCwgbG9jYWxfYnVmLCBkX3JlY2xlbiwgZF9vZmYsIGRfaW5vLAotCQkJICAgIERUX1VOS05PV04pIDwgMCkgewotCQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCQlrZnJlZShsb2NhbF9idWYpOwotCQkJfQotCQkJZ290byBlbmQ7Ci0JCX0KLQkJaWYgKGxvY2FsX2J1ZiAhPSBzbWFsbF9idWYpIHsKLQkJCWtmcmVlKGxvY2FsX2J1Zik7Ci0JCX0KLQl9CQkJLyogd2hpbGUgKi8KLQotICAgICAgZW5kOgotCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGlzIGNvdWxkIGJlIGRvbmUgd2l0aCBkZWRpY2F0ZWQgcmVhZGRpciBvcHMgZm9yIHRoZSB4YXR0ciBmaWxlcywKLSAqIGJ1dCBJIHdhbnQgdG8gZ2V0IHNvbWV0aGluZyB3b3JraW5nIGFzYXAKLSAqIHRoaXMgaXMgc3RvbGVuIGZyb20gdmZzX3JlYWRkaXIKLSAqCi0gKi8KLXN0YXRpYwotaW50IHhhdHRyX3JlYWRkaXIoc3RydWN0IGlub2RlICppbm9kZSwgZmlsbGRpcl90IGZpbGxlciwgdm9pZCAqYnVmKQotewotCWludCByZXMgPSAtRU5PRU5UOwotCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7Ci0JaWYgKCFJU19ERUFERElSKGlub2RlKSkgewotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXMgPSBfX3hhdHRyX3JlYWRkaXIoaW5vZGUsIGJ1ZiwgZmlsbGVyKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCX0KLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gcmVzOwotfQotCiAvKiBJbnRlcm5hbCBvcGVyYXRpb25zIG9uIGZpbGUgZGF0YSAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3B1dF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQogewpAQCAtMzc1LDE0ICszODUsMTQgQEAKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHVuc2lnbmVkIGxvbmcgbikKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcmVpc2VyZnNfZ2V0X3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHNpemVfdCBuKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJLyogV2UgY2FuIGRlYWRsb2NrIGlmIHdlIHRyeSB0byBmcmVlIGRlbnRyaWVzLAogCSAgIGFuZCBhbiB1bmxpbmsvcm1kaXIgaGFzIGp1c3Qgb2NjdXJlZCAtIEdGUF9OT0ZTIGF2b2lkcyB0aGlzICovCiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOwotCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuLCBOVUxMKTsKKwlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiA+PiBQQUdFX0NBQ0hFX1NISUZULCBOVUxMKTsKIAlpZiAoIUlTX0VSUihwYWdlKSkgewogCQlrbWFwKHBhZ2UpOwogCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtNDA1LDYgKzQxNSw0NSBAQAogaW50IHJlaXNlcmZzX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3RpbWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKKwlpZiAoaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpIHx8ICFpbm9kZS0+aV9ubGluayB8fAorCSAgICB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZub3cpKQorCQlyZXR1cm47CisKKwlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICp4YWRpcjsKKworCXhhZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIFhBVFRSX1JFUExBQ0UpOworCWlmIChJU19FUlIoeGFkaXIpKQorCQlyZXR1cm4gUFRSX0VSUih4YWRpcik7CisKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgc3RybGVuKG5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJZXJyID0gUFRSX0VSUihkZW50cnkpOworCQlnb3RvIG91dF9kcHV0OworCX0KKworCWlmIChkZW50cnktPmRfaW5vZGUpIHsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnhhZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZXJyID0geGF0dHJfdW5saW5rKHhhZGlyLT5kX2lub2RlLCBkZW50cnkpOworCQltdXRleF91bmxvY2soJnhhZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKKwl9CisKKwlkcHV0KGRlbnRyeSk7CitvdXRfZHB1dDoKKwlkcHV0KHhhZGlyKTsKKwlyZXR1cm4gZXJyOworfQorCiAKIC8qIEdlbmVyaWMgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBieSB4YSBwbHVnaW5zICovCiAKQEAgLTQxMiw1OCArNDYxLDMyIEBACiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQorcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUsIGludCBmbGFncykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJY2hhciAqZGF0YTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAlzaXplX3QgZmlsZV9wb3MgPSAwOwogCXNpemVfdCBidWZmZXJfcG9zID0gMDsKLQlzdHJ1Y3QgaW5vZGUgKnhpbm9kZTsKLQlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CisJc2l6ZV90IG5ld19zaXplOwogCV9fdTMyIHhhaGFzaCA9IDA7CiAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JLyogRW1wdHkgeGF0dHJzIGFyZSBvaywgdGhleSdyZSBqdXN0IGVtcHR5IGZpbGVzLCBubyBoYXNoICovCi0JaWYgKGJ1ZmZlciAmJiBidWZmZXJfc2l6ZSkKLQkJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIGxvb2t1cF9hbmRfZGVsZXRlX3hhdHRyKGlub2RlLCBuYW1lKTsKIAotICAgICAgb3Blbl9maWxlOgotCWRlbnRyeSA9IGdldF94YV9maWxlX2RlbnRyeShpbm9kZSwgbmFtZSwgZmxhZ3MpOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlkZW50cnkgPSB4YXR0cl9sb29rdXAoaW5vZGUsIG5hbWUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiAKLQkvKiB3ZSBuZWVkIHRvIGNvcHkgaXQgb2ZmLi4gKi8KLQlpZiAoeGlub2RlLT5pX25saW5rID4gMSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCWVyciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCS8qIFdlIGp1c3Qga2lsbGVkIHRoZSBvbGQgb25lLCB3ZSdyZSBub3QgcmVwbGFjaW5nIGFueW1vcmUgKi8KLQkJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkKLQkJCWZsYWdzICY9IH5YQVRUUl9SRVBMQUNFOwotCQlnb3RvIG9wZW5fZmlsZTsKLQl9Ci0KLQkvKiBSZXNpemUgaXQgc28gd2UncmUgb2sgdG8gd3JpdGUgdGhlcmUgKi8KLQluZXdhdHRycy5pYV9zaXplID0gYnVmZmVyX3NpemU7Ci0JbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FOwotCW11dGV4X2xvY2tfbmVzdGVkKCZ4aW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotCWVyciA9IG5vdGlmeV9jaGFuZ2UoZGVudHJ5LCAmbmV3YXR0cnMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZpbHA7Ci0KLQltYXBwaW5nID0geGlub2RlLT5pX21hcHBpbmc7CisJeGFoYXNoID0geGF0dHJfaGFzaChidWZmZXIsIGJ1ZmZlcl9zaXplKTsKIAl3aGlsZSAoYnVmZmVyX3BvcyA8IGJ1ZmZlcl9zaXplIHx8IGJ1ZmZlcl9wb3MgPT0gMCkgewogCQlzaXplX3QgY2h1bms7CiAJCXNpemVfdCBza2lwID0gMDsKQEAgLTQ3MywxMCArNDk2LDEwIEBACiAJCWVsc2UKIAkJCWNodW5rID0gYnVmZmVyX3NpemUgLSBidWZmZXJfcG9zOwogCi0JCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZSh4aW5vZGUsIGZpbGVfcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCQlwYWdlID0gcmVpc2VyZnNfZ2V0X3BhZ2UoZGVudHJ5LT5kX2lub2RlLCBmaWxlX3Bvcyk7CiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCWVyciA9IFBUUl9FUlIocGFnZSk7Ci0JCQlnb3RvIG91dF9maWxwOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJbG9ja19wYWdlKHBhZ2UpOwpAQCAtNTEwLDI4ICs1MzMsNjEgQEAKIAkJCWJyZWFrOwogCX0KIAotCS8qIFdlIGNhbid0IG1hcmsgdGhlIGlub2RlIGRpcnR5IGlmIGl0J3Mgbm90IGhhc2hlZC4gVGhpcyBpcyB0aGUgY2FzZQotCSAqIHdoZW4gd2UncmUgaW5oZXJpdGluZyB0aGUgZGVmYXVsdCBBQ0wuIElmIHdlIGRpcnR5IGl0LCB0aGUgaW5vZGUKLQkgKiBnZXRzIG1hcmtlZCBkaXJ0eSwgYnV0IHdvbid0IChldmVyKSBtYWtlIGl0IG9udG8gdGhlIGRpcnR5IGxpc3QgdW50aWwKLQkgKiBpdCdzIHN5bmNlZCBleHBsaWNpdGx5IHRvIGNsZWFyIElfRElSVFkuIFRoaXMgaXMgYmFkLiAqLwotCWlmICghaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbmV3X3NpemUgPSBidWZmZXJfc2l6ZSArIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKTsKKwlpZiAoIWVyciAmJiBuZXdfc2l6ZSA8IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSkpIHsKKwkJc3RydWN0IGlhdHRyIG5ld2F0dHJzID0geworCQkJLmlhX2N0aW1lID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKSwKKwkJCS5pYV9zaXplID0gYnVmZmVyX3NpemUsCisJCQkuaWFfdmFsaWQgPSBBVFRSX1NJWkUgfCBBVFRSX0NUSU1FLAorCQl9OworCQltdXRleF9sb2NrX25lc3RlZCgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCWVyciA9IHJlaXNlcmZzX3NldGF0dHIoZGVudHJ5LCAmbmV3YXR0cnMpOworCQl1cF93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CisJCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwl9IGVsc2UKKwkJdXBkYXRlX2N0aW1lKGlub2RlKTsKK291dF91bmxvY2s6CisJdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CisJZHB1dChkZW50cnkpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2FjdGlvbiB0byBtYWludGFpbiBsb2NrIG9yZGVyaW5nICovCitpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQoreworCisJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzaXplX3QgamJlZ2luX2NvdW50ID0gcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgYnVmZmVyX3NpemUpOworCisJaWYgKCEoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKSkKKwkJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2Nrcyhpbm9kZSk7CisKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwlpZiAoZXJyb3IpIHsKKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAotICAgICAgb3V0X2ZpbHA6Ci0JbXV0ZXhfdW5sb2NrKCZ4aW5vZGUtPmlfbXV0ZXgpOwotCWRwdXQoZGVudHJ5KTsKKwllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoJnRoLCBpbm9kZSwgbmFtZSwKKwkJCQkJICBidWZmZXIsIGJ1ZmZlcl9zaXplLCBmbGFncyk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOworCWVycm9yMiA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCk7CisJaWYgKGVycm9yID09IDApCisJCWVycm9yID0gZXJyb3IyOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCiAgKiBpbm9kZS0+aV9tdXRleDogZG93bgogICovCiBpbnQKLXJlaXNlcmZzX3hhdHRyX2dldChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCityZWlzZXJmc194YXR0cl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgICBzaXplX3QgYnVmZmVyX3NpemUpCiB7CiAJc3NpemVfdCBlcnIgPSAwOwpAQCAtNTQwLDcgKzU5Niw2IEBACiAJc2l6ZV90IGZpbGVfcG9zID0gMDsKIAlzaXplX3QgYnVmZmVyX3BvcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGlub2RlICp4aW5vZGU7CiAJX191MzIgaGFzaCA9IDA7CiAKIAlpZiAobmFtZSA9PSBOVUxMKQpAQCAtNTUxLDI1ICs2MDYsMjUgQEAKIAlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JZGVudHJ5ID0gZ2V0X3hhX2ZpbGVfZGVudHJ5KGlub2RlLCBuYW1lLCBGTF9SRUFET05MWSk7CisJZGVudHJ5ID0geGF0dHJfbG9va3VwKGlub2RlLCBuYW1lLCBYQVRUUl9SRVBMQUNFKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKIAkJZXJyID0gUFRSX0VSUihkZW50cnkpOwogCQlnb3RvIG91dDsKIAl9CiAKLQl4aW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JaXNpemUgPSB4aW5vZGUtPmlfc2l6ZTsKLQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CisJZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+aV94YXR0cl9zZW0pOworCisJaXNpemUgPSBpX3NpemVfcmVhZChkZW50cnktPmRfaW5vZGUpOwogCiAJLyogSnVzdCByZXR1cm4gdGhlIHNpemUgbmVlZGVkICovCiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAJCWVyciA9IGlzaXplIC0gc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpOwotCQlnb3RvIG91dF9kcHV0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKGJ1ZmZlcl9zaXplIDwgaXNpemUgLSBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlcikpIHsKIAkJZXJyID0gLUVSQU5HRTsKLQkJZ290byBvdXRfZHB1dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXdoaWxlIChmaWxlX3BvcyA8IGlzaXplKSB7CkBAIC01ODEsMTAgKzYzNiwxMCBAQAogCQllbHNlCiAJCQljaHVuayA9IGlzaXplIC0gZmlsZV9wb3M7CiAKLQkJcGFnZSA9IHJlaXNlcmZzX2dldF9wYWdlKHhpbm9kZSwgZmlsZV9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZShkZW50cnktPmRfaW5vZGUsIGZpbGVfcG9zKTsKIAkJaWYgKElTX0VSUihwYWdlKSkgewogCQkJZXJyID0gUFRSX0VSUihwYWdlKTsKLQkJCWdvdG8gb3V0X2RwdXQ7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsb2NrX3BhZ2UocGFnZSk7CkBAIC01OTgsMTIgKzY1MywxMiBAQAogCQkJaWYgKHJ4aC0+aF9tYWdpYyAhPSBjcHVfdG9fbGUzMihSRUlTRVJGU19YQVRUUl9NQUdJQykpIHsKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCQlyZWlzZXJmc19wdXRfcGFnZShwYWdlKTsKLQkJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDEiLAogCQkJCQkJICJJbnZhbGlkIG1hZ2ljIGZvciB4YXR0ciAoJXMpICIKIAkJCQkJCSAiYXNzb2NpYXRlZCB3aXRoICVrIiwgbmFtZSwKIAkJCQkJCSBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCQkJZXJyID0gLUVJTzsKLQkJCQlnb3RvIG91dF9kcHV0OworCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJCX0KIAkJCWhhc2ggPSBsZTMyX3RvX2NwdShyeGgtPmhfaGFzaCk7CiAJCX0KQEAgLTYxOCwyNTYgKzY3Myw4MyBAQAogCiAJaWYgKHhhdHRyX2hhc2goYnVmZmVyLCBpc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKSkgIT0KIAkgICAgaGFzaCkgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiamRtLTIwMDAyIiwKIAkJCQkgIkludmFsaWQgaGFzaCBmb3IgeGF0dHIgKCVzKSBhc3NvY2lhdGVkICIKIAkJCQkgIndpdGggJWsiLCBuYW1lLCBJTk9ERV9QS0VZKGlub2RlKSk7CiAJCWVyciA9IC1FSU87CiAJfQogCi0gICAgICBvdXRfZHB1dDoKK291dF91bmxvY2s6CisJdXBfcmVhZCgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIAlkcHV0KGRlbnRyeSk7CiAKLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50Ci1fX3JlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgZGVudHJ5ICp4YWRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqZGlyID0geGFkaXItPmRfaW5vZGU7Ci0JaW50IGVyciA9IDA7Ci0KLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCB4YWRpciwgbmFtZWxlbik7Ci0JaWYgKElTX0VSUihkZW50cnkpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWVyciA9IC1FTk9EQVRBOwotCQlnb3RvIG91dF9maWxlOwotCX0KLQotCS8qIFNraXAgZGlyZWN0b3JpZXMuLiAqLwotCWlmIChTX0lTRElSKGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJZ290byBvdXRfZmlsZTsKLQotCWlmICghaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGVudHJ5LT5kX2lub2RlKSkgewotCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgIk9JRCAlMDh4IFslLipzLyUuKnNdIGRvZXNuJ3QgaGF2ZSAiCi0JCQkJICJwcml2IGZsYWcgc2V0IFtwYXJlbnQgaXMgJXNzZXRdLiIsCi0JCQkJIGxlMzJfdG9fY3B1KElOT0RFX1BLRVkoZGVudHJ5LT5kX2lub2RlKS0+Ci0JCQkJCSAgICAga19vYmplY3RpZCksIHhhZGlyLT5kX25hbWUubGVuLAotCQkJCSB4YWRpci0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIG5hbWUsCi0JCQkJIGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KHhhZGlyLT4KLQkJCQkJCQkgZF9pbm9kZSkgPyAiIiA6Ci0JCQkJICJub3QgIik7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZXJyID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOwotCWlmICghZXJyKQotCQlkX2RlbGV0ZShkZW50cnkpOwotCi0gICAgICBvdXRfZmlsZToKLQlkcHV0KGRlbnRyeSk7Ci0KLSAgICAgIG91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgcmVpc2VyZnNfeGF0dHJfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyOwotCWludCBlcnI7Ci0KLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCWlmIChJU19FUlIoZGlyKSkgewotCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fcmVpc2VyZnNfeGF0dHJfZGVsKGRpciwgbmFtZSwgc3RybGVuKG5hbWUpKTsKLQlkcHV0KGRpcik7Ci0KLQlpZiAoIWVycikgewotCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCX0KLQotICAgICAgb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHNpZGUgZWZmZWN0cyBvZiBvdGhlciBvcGVyYXRpb25zIHRoYXQgYXJlbid0IGV4cGxpY2l0bHkKLSAqIG1vZGlmeWluZyBleHRlbmRlZCBhdHRyaWJ1dGVzLiBUaGlzIGluY2x1ZGVzIG9wZXJhdGlvbnMgc3VjaCBhcyBwZXJtaXNzaW9ucwotICogb3Igb3duZXJzaGlwIGNoYW5nZXMsIG9iamVjdCBkZWxldGlvbnMsIGV0Yy4gKi8KLQotc3RhdGljIGludAotcmVpc2VyZnNfZGVsZXRlX3hhdHRyc19maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqeGFkaXIgPSAoc3RydWN0IGRlbnRyeSAqKWJ1ZjsKLQotCXJldHVybiBfX3JlaXNlcmZzX3hhdHRyX2RlbCh4YWRpciwgbmFtZSwgbmFtZWxlbik7Ci0KLX0KLQotLyogVGhpcyBpcyBjYWxsZWQgdy8gaW5vZGUtPmlfbXV0ZXggZG93bmVkICovCi1pbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBkZW50cnkgKmRpciwgKnJvb3Q7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTa2lwIG91dCwgYW4geGF0dHIgaGFzIG5vIHhhdHRycyBhc3NvY2lhdGVkIHdpdGggaXQgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEgfHwKLQkgICAgIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBGTF9SRUFET05MWSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlpZiAoSVNfRVJSKGRpcikpIHsKLQkJZXJyID0gUFRSX0VSUihkaXIpOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCFkaXItPmRfaW5vZGUpIHsKLQkJZHB1dChkaXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVyciA9IHhhdHRyX3JlYWRkaXIoZGlyLT5kX2lub2RlLCByZWlzZXJmc19kZWxldGVfeGF0dHJzX2ZpbGxlciwgZGlyKTsKLQlpZiAoZXJyKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJZ290byBvdXRfZGlyOwotCX0KLQotCS8qIExlZnRvdmVycyBiZXNpZGVzIC4gYW5kIC4uIC0tIHRoYXQncyBub3QgZ29vZC4gKi8KLQlpZiAoZGlyLT5kX2lub2RlLT5pX25saW5rIDw9IDIpIHsKLQkJcm9vdCA9IGdldF94YV9yb290KGlub2RlLT5pX3NiLCBYQVRUUl9SRVBMQUNFKTsKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQllcnIgPSB2ZnNfcm1kaXIocm9vdC0+ZF9pbm9kZSwgZGlyKTsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWRwdXQocm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgIkNvdWxkbid0IHJlbW92ZSBhbGwgZW50cmllcyBpbiBkaXJlY3RvcnkiKTsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0gICAgICBvdXRfZGlyOgotCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCWlmICghZXJyKQotCQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyA9Ci0JCSAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIH5pX2hhc194YXR0cl9kaXI7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICp4YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzOwotfTsKLQotLyogWFhYOiBJZiB0aGVyZSBpcyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgSSdkIGxvdmUgdG8gaGVhciBhYm91dCBpdCAqLwotc3RhdGljIGludAotcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJICAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQotewotCXN0cnVjdCByZWlzZXJmc19jaG93bl9idWYgKmNob3duX2J1ZiA9IChzdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmICopYnVmOwotCXN0cnVjdCBkZW50cnkgKnhhZmlsZSwgKnhhZGlyID0gY2hvd25fYnVmLT54YWRpcjsKLQlzdHJ1Y3QgaWF0dHIgKmF0dHJzID0gY2hvd25fYnVmLT5hdHRyczsKLQlpbnQgZXJyID0gMDsKLQotCXhhZmlsZSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBuYW1lbGVuKTsKLQlpZiAoSVNfRVJSKHhhZmlsZSkpCi0JCXJldHVybiBQVFJfRVJSKHhhZmlsZSk7Ci0JZWxzZSBpZiAoIXhhZmlsZS0+ZF9pbm9kZSkgewotCQlkcHV0KHhhZmlsZSk7Ci0JCXJldHVybiAtRU5PREFUQTsKLQl9Ci0KLQlpZiAoIVNfSVNESVIoeGFmaWxlLT5kX2lub2RlLT5pX21vZGUpKQotCQllcnIgPSBub3RpZnlfY2hhbmdlKHhhZmlsZSwgYXR0cnMpOwotCWRwdXQoeGFmaWxlKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycykKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiBidWY7Ci0JdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0cnMtPmlhX3ZhbGlkOwotCi0JLyogU2tpcCBvdXQsIGFuIHhhdHRyIGhhcyBubyB4YXR0cnMgYXNzb2NpYXRlZCB3aXRoIGl0ICovCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxIHx8Ci0JICAgICFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKSB7Ci0JCXJldHVybiAwOwotCX0KLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JaWYgKElTX0VSUihkaXIpKSB7Ci0JCWlmIChQVFJfRVJSKGRpcikgIT0gLUVOT0RBVEEpCi0JCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KGRpcik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0KLQlhdHRycy0+aWFfdmFsaWQgJj0gKEFUVFJfVUlEIHwgQVRUUl9HSUQgfCBBVFRSX0NUSU1FKTsKLQlidWYueGFkaXIgPSBkaXI7Ci0JYnVmLmF0dHJzID0gYXR0cnM7Ci0JYnVmLmlub2RlID0gaW5vZGU7Ci0KLQllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfY2hvd25feGF0dHJzX2ZpbGxlciwgJmJ1Zik7Ci0JaWYgKGVycikgewotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCWdvdG8gb3V0X2RpcjsKLQl9Ci0KLQllcnIgPSBub3RpZnlfY2hhbmdlKGRpciwgYXR0cnMpOwotCXVubG9ja19rZXJuZWwoKTsKLQotICAgICAgb3V0X2RpcjoKLQlkcHV0KGRpcik7Ci0KLSAgICAgIG91dDoKLQlhdHRycy0+aWFfdmFsaWQgPSBpYV92YWxpZDsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBBY3R1YWwgb3BlcmF0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCB0byBWRlMtbGFuZCAqLworc3RydWN0IHhhdHRyX2hhbmRsZXIgKnJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJnJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlciwKKwkmcmVpc2VyZnNfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWQorCSZyZWlzZXJmc194YXR0cl9zZWN1cml0eV9oYW5kbGVyLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAorCSZyZWlzZXJmc19wb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIsCisJJnJlaXNlcmZzX3Bvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIsCisjZW5kaWYKKwlOVUxMCit9OworCisvKgorICogSW4gb3JkZXIgdG8gaW1wbGVtZW50IGRpZmZlcmVudCBzZXRzIG9mIHhhdHRyIG9wZXJhdGlvbnMgZm9yIGVhY2ggeGF0dHIKKyAqIHByZWZpeCB3aXRoIHRoZSBnZW5lcmljIHhhdHRyIEFQSSwgYSBmaWxlc3lzdGVtIHNob3VsZCBjcmVhdGUgYQorICogbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cnVjdCB4YXR0cl9oYW5kbGVyIChvbmUgZm9yIGVhY2ggcHJlZml4KSBhbmQKKyAqIGhhbmcgYSBwb2ludGVyIHRvIGl0IG9mZiBvZiB0aGUgc194YXR0ciBmaWVsZCBvZiB0aGUgc3VwZXJibG9jay4KKyAqCisgKiBUaGUgZ2VuZXJpY19mb294YXR0cigpIGZ1bmN0aW9ucyB3aWxsIHVzZSB0aGlzIGxpc3QgdG8gZGlzcGF0Y2ggeGF0dHIKKyAqIG9wZXJhdGlvbnMgdG8gdGhlIGNvcnJlY3QgeGF0dHJfaGFuZGxlci4KKyAqLworI2RlZmluZSBmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCBoYW5kbGVyKQkJXAorCQlmb3IgKChoYW5kbGVyKSA9ICooaGFuZGxlcnMpKys7CQkJXAorCQkJKGhhbmRsZXIpICE9IE5VTEw7CQkJXAorCQkJKGhhbmRsZXIpID0gKihoYW5kbGVycykrKykKKworLyogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB4YXR0ciBwbHVnaW4gaW5mcmFzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhhdHRyX2hhbmRsZXIgKgorZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqKmhhbmRsZXJzLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqeGFoOworCisJaWYgKCFoYW5kbGVycykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfZWFjaF94YXR0cl9oYW5kbGVyKGhhbmRsZXJzLCB4YWgpIHsKKwkJaWYgKHN0cm5jbXAoeGFoLT5wcmVmaXgsIG5hbWUsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4geGFoOworfQorCiAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gZ2V0eGF0dHIoKQotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKICAqLwogc3NpemVfdAogcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAogCQkgIHNpemVfdCBzaXplKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5nZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBoYW5kbGVyLT5nZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CiB9CiAKIC8qCkBAIC04NzksMjcgKzc2MSwxNSBAQAogcmVpc2VyZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOwotCWludCBlcnI7Ci0JaW50IGxvY2s7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwloYW5kbGVyID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChpbm9kZS0+aV9zYi0+c194YXR0ciwgbmFtZSk7CisKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JbG9jayA9ICFoYXNfeGF0dHJfZGlyKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGxvY2spCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZXJyID0geGFoLT5zZXQoZGVudHJ5LT5kX2lub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwotCWlmIChsb2NrKQotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZWxzZQotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGhhbmRsZXItPnNldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIAogLyoKQEAgLTkwOSw4NiArNzc5LDY2IEBACiAgKi8KIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0gZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChuYW1lKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOworCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKIAotCWlmICgheGFoIHx8ICFyZWlzZXJmc194YXR0cnMoZGVudHJ5LT5kX3NiKSB8fAotCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKKwlpZiAoIWhhbmRsZXIgfHwgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCi0JLyogRGVsZXRpb24gcHJlLW9wZXJhdGlvbiAqLwotCWlmICh4YWgtPmRlbCkgewotCQllcnIgPSB4YWgtPmRlbChkZW50cnktPmRfaW5vZGUsIG5hbWUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gcmVpc2VyZnNfeGF0dHJfZGVsKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSk7Ci0KLQlkZW50cnktPmRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCW1hcmtfaW5vZGVfZGlydHkoZGVudHJ5LT5kX2lub2RlKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCBOVUxMLCAwLCBYQVRUUl9SRVBMQUNFKTsKIH0KIAotLyogVGhpcyBpcyB3aGF0IGZpbGxkaXIgd2lsbCB1c2U6Ci0gKiByX3BvcyB3aWxsIGFsd2F5cyBjb250YWluIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWlyZWQgZm9yIHRoZSBlbnRpcmUKLSAqIGxpc3QuIElmIHJfcG9zIGJlY29tZXMgbGFyZ2VyIHRoYW4gcl9zaXplLCB3ZSBuZWVkIG1vcmUgc3BhY2UgYW5kIHdlCi0gKiByZXR1cm4gYW4gZXJyb3IgaW5kaWNhdGluZyB0aGlzLiBJZiByX3BvcyBpcyBsZXNzIHRoYW4gcl9zaXplLCB0aGVuIHdlJ3ZlCi0gKiBmaWxsZWQgdGhlIGJ1ZmZlciBzdWNjZXNzZnVsbHkgYW5kIHdlIHJldHVybiBzdWNjZXNzICovCi1zdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiB7Ci0JaW50IHJfcG9zOwotCWludCByX3NpemU7Ci0JY2hhciAqcl9idWY7Ci0Jc3RydWN0IGlub2RlICpyX2lub2RlOworc3RydWN0IGxpc3R4YXR0cl9idWYgeworCXNpemVfdCBzaXplOworCXNpemVfdCBwb3M7CisJY2hhciAqYnVmOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiB9OwogCi1zdGF0aWMgaW50Ci1yZWlzZXJmc19saXN0eGF0dHJfZmlsbGVyKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCitzdGF0aWMgaW50IGxpc3R4YXR0cl9maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICBsb2ZmX3Qgb2Zmc2V0LCB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQogewotCXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICpiID0gKHN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmICopYnVmOwotCWludCBsZW4gPSAwOwotCWlmIChuYW1lWzBdICE9ICcuJwotCSAgICB8fCAobmFtZWxlbiAhPSAxICYmIChuYW1lWzFdICE9ICcuJyB8fCBuYW1lbGVuICE9IDIpKSkgewotCQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0KLQkJICAgIGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgobmFtZSk7Ci0JCWlmICgheGFoKQotCQkJcmV0dXJuIDA7CS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUsIHNraXAgaXQgKi8KLQotCQkvKiBXZSBjYWxsIC0+bGlzdCgpIHR3aWNlIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBpc24ndCByZXF1aXJlZCB0byBqdXN0Ci0JCSAqIHJldHVybiB0aGUgbmFtZSBiYWNrIC0gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KLQkJbGVuICs9IHhhaC0+bGlzdChiLT5yX2lub2RlLCBuYW1lLCBuYW1lbGVuLCBOVUxMKTsKLQotCQlpZiAobGVuKSB7Ci0JCQlpZiAoYi0+cl9wb3MgKyBsZW4gKyAxIDw9IGItPnJfc2l6ZSkgewotCQkJCWNoYXIgKnAgPSBiLT5yX2J1ZiArIGItPnJfcG9zOwotCQkJCXAgKz0geGFoLT5saXN0KGItPnJfaW5vZGUsIG5hbWUsIG5hbWVsZW4sIHApOwotCQkJCSpwKysgPSAnXDAnOwotCQkJfQotCQkJYi0+cl9wb3MgKz0gbGVuICsgMTsKKwlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqYiA9IChzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiAqKWJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpZiAobmFtZVswXSAhPSAnLicgfHwKKwkgICAgKG5hbWVsZW4gIT0gMSAmJiAobmFtZVsxXSAhPSAnLicgfHwgbmFtZWxlbiAhPSAyKSkpIHsKKwkJc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXI7CisJCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGItPmlub2RlLT5pX3NiLT5zX3hhdHRyLAorCQkJCQkJICAgIG5hbWUpOworCQlpZiAoIWhhbmRsZXIpCS8qIFVuc3VwcG9ydGVkIHhhdHRyIG5hbWUgKi8KKwkJCXJldHVybiAwOworCQlpZiAoYi0+YnVmKSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgYi0+YnVmICsgYi0+cG9zLAorCQkJCQkgYi0+c2l6ZSwgbmFtZSwgbmFtZWxlbik7CisJCQlpZiAoc2l6ZSA+IGItPnNpemUpCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJCX0gZWxzZSB7CisJCQlzaXplID0gaGFuZGxlci0+bGlzdChiLT5pbm9kZSwgTlVMTCwgMCwgbmFtZSwgbmFtZWxlbik7CiAJCX0KLQl9CiAKKwkJYi0+cG9zICs9IHNpemU7CisJfQogCXJldHVybiAwOwogfQogCiAvKgogICogSW5vZGUgb3BlcmF0aW9uIGxpc3R4YXR0cigpCiAgKgotICogUHJlbGltaW5hcnkgbG9ja2luZzogd2UgZG93biBkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgKKyAqIFdlIHRvdGFsbHkgaWdub3JlIHRoZSBnZW5lcmljIGxpc3R4YXR0ciBoZXJlIGJlY2F1c2UgaXQgd291bGQgYmUgc3R1cGlkCisgKiBub3QgdG8uIFNpbmNlIHRoZSB4YXR0cnMgYXJlIG9yZ2FuaXplZCBpbiBhIGRpcmVjdG9yeSwgd2UgY2FuIGp1c3QKKyAqIHJlYWRkaXIgdG8gZmluZCB0aGVtLgogICovCiBzc2l6ZV90IHJlaXNlcmZzX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBkZW50cnkgKmRpcjsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcmVpc2VyZnNfbGlzdHhhdHRyX2J1ZiBidWY7CisJbG9mZl90IHBvcyA9IDA7CisJc3RydWN0IGxpc3R4YXR0cl9idWYgYnVmID0geworCQkuaW5vZGUgPSBkZW50cnktPmRfaW5vZGUsCisJCS5idWYgPSBidWZmZXIsCisJCS5zaXplID0gYnVmZmVyID8gc2l6ZSA6IDAsCisJfTsKIAogCWlmICghZGVudHJ5LT5kX2lub2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5NywxMjkgKzg0NywxMDMgQEAKIAkgICAgZ2V0X2lub2RlX3NkX3ZlcnNpb24oZGVudHJ5LT5kX2lub2RlKSA9PSBTVEFUX0RBVEFfVjEpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgRkxfUkVBRE9OTFkpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOworCWRpciA9IG9wZW5feGFfZGlyKGRlbnRyeS0+ZF9pbm9kZSwgWEFUVFJfUkVQTEFDRSk7CiAJaWYgKElTX0VSUihkaXIpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGlyKTsKIAkJaWYgKGVyciA9PSAtRU5PREFUQSkKLQkJCWVyciA9IDA7CS8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLworCQkJZXJyID0gMDsgIC8qIE5vdCBhbiBlcnJvciBpZiB0aGVyZSBhcmVuJ3QgYW55IHhhdHRycyAqLwogCQlnb3RvIG91dDsKIAl9CiAKLQlidWYucl9idWYgPSBidWZmZXI7Ci0JYnVmLnJfc2l6ZSA9IGJ1ZmZlciA/IHNpemUgOiAwOwotCWJ1Zi5yX3BvcyA9IDA7Ci0JYnVmLnJfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGlyLCAmYnVmLCBsaXN0eGF0dHJfZmlsbGVyLCAmcG9zKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKLQlSRUlTRVJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCWlmICghZXJyKQorCQllcnIgPSBidWYucG9zOwogCi0JZXJyID0geGF0dHJfcmVhZGRpcihkaXItPmRfaW5vZGUsIHJlaXNlcmZzX2xpc3R4YXR0cl9maWxsZXIsICZidWYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2RpcjsKLQotCWlmIChidWYucl9wb3MgPiBidWYucl9zaXplICYmIGJ1ZmZlciAhPSBOVUxMKQotCQllcnIgPSAtRVJBTkdFOwotCWVsc2UKLQkJZXJyID0gYnVmLnJfcG9zOwotCi0gICAgICBvdXRfZGlyOgogCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHhhdHRyIHBsdWdpbiBpbmZyYXN0cnVjdHVyZSAqLwotc3RhdGljIExJU1RfSEVBRCh4YXR0cl9oYW5kbGVycyk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhoYW5kbGVyX2xvY2spOwotCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKmZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoY29uc3QgY2hhcgotCQkJCQkJCQkqcHJlZml4KQorc3RhdGljIGludCByZWlzZXJmc19jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KIAotCXJlYWRfbG9jaygmaGFuZGxlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHAsICZ4YXR0cl9oYW5kbGVycykgewotCQl4YWggPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyLCBoYW5kbGVycyk7Ci0JCWlmIChzdHJuY21wKHhhaC0+cHJlZml4LCBwcmVmaXgsIHN0cmxlbih4YWgtPnByZWZpeCkpID09IDApCi0JCQlicmVhazsKLQkJeGFoID0gTlVMTDsKKwlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCisJaWYgKGFjbCkgeworCQlpZiAoIUlTX0VSUihhY2wpKSB7CisJCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOworCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCisJCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKIAl9CiAKLQlyZWFkX3VubG9jaygmaGFuZGxlcl9sb2NrKTsKLQlyZXR1cm4geGFoOworCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgX191bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpCitpbnQgcmVpc2VyZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoOwotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgdG1wLCAmeGF0dHJfaGFuZGxlcnMpIHsKLQkJeGFoID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciwgaGFuZGxlcnMpOwotCQlpZiAoeGFoLT5leGl0KQotCQkJeGFoLT5leGl0KCk7Ci0KLQkJbGlzdF9kZWxfaW5pdChwKTsKLQl9Ci0JSU5JVF9MSVNUX0hFQUQoJnhhdHRyX2hhbmRsZXJzKTsKLX0KLQotaW50IF9faW5pdCByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCWludCBlcnIgPSAwOwotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0KLQkvKiBJZiB3ZSdyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBub3RoaW5nIHRvIGRvICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ4YXR0cl9oYW5kbGVycykpIHsKLQkJd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOworCS8qCisJICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCisJICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KKwkgKi8KKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAwOworCS8qCisJICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgorCSAqLworCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKKwllbHNlCisJCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3ByaXZyb290KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJZXJyID0geGF0dHJfbWtkaXIoaW5vZGUsIGRlbnRyeSwgMDcwMCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJaWYgKGVycikgeworCQlkcHV0KGRlbnRyeSk7CisJCWRlbnRyeSA9IE5VTEw7CiAJfQogCi0JLyogQWRkIHRoZSBoYW5kbGVycyAqLwotCWxpc3RfYWRkX3RhaWwoJnVzZXJfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLQlsaXN0X2FkZF90YWlsKCZ0cnVzdGVkX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCi0JbGlzdF9hZGRfdGFpbCgmc2VjdXJpdHlfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLQlsaXN0X2FkZF90YWlsKCZwb3NpeF9hY2xfYWNjZXNzX2hhbmRsZXIuaGFuZGxlcnMsICZ4YXR0cl9oYW5kbGVycyk7Ci0JbGlzdF9hZGRfdGFpbCgmcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNlbmRpZgorCWlmIChkZW50cnkgJiYgZGVudHJ5LT5kX2lub2RlKQorCQlyZWlzZXJmc19pbmZvKGRlbnRyeS0+ZF9zYiwgIkNyZWF0ZWQgJXMgLSByZXNlcnZlZCBmb3IgeGF0dHIgIgorCQkJICAgICAgInN0b3JhZ2UuXG4iLCBQUklWUk9PVF9OQU1FKTsKIAotCS8qIFJ1biBpbml0aWFsaXplcnMsIGlmIGF2YWlsYWJsZSAqLwotCWxpc3RfZm9yX2VhY2gocCwgJnhhdHRyX2hhbmRsZXJzKSB7Ci0JCXhhaCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIsIGhhbmRsZXJzKTsKLQkJaWYgKHhhaC0+aW5pdCkgewotCQkJZXJyID0geGFoLT5pbml0KCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdChwKTsKLQkJCQlicmVhazsKLQkJCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHhhdHRyX21vdW50X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3sKKwkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAorCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLworCWlmIChvbGRfZm9ybWF0X29ubHkocykpIHsKKwkJaWYgKHJlaXNlcmZzX3hhdHRyc19vcHRpb25hbChzKSkgeworCQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgb3B0aW9uYWwgeGF0dHJzIGhhdmUKKwkJCSAqIGJlZW4gZW5hYmxlZC4gRXJyb3Igb3V0LiAqLworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiamRtLTIwMDUiLAorCQkJCQkgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHByZS12My42IGZvcm1hdCBmaWxlc3lzdGVtcy4gIgorCQkJCQkgIkZhaWxpbmcgbW91bnQuIik7CisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAl9CiAKLQkvKiBDbGVhbiB1cCBvdGhlciBoYW5kbGVycywgaWYgYW55IGZhaWxlZCAqLwotCWlmIChlcnIpCi0JCV9fdW5yZWdpc3Rlcl9oYW5kbGVycygpOwotCi0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQotewotCXdyaXRlX2xvY2soJmhhbmRsZXJfbG9jayk7Ci0JX191bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0Jd3JpdGVfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotfQorI2Vsc2UKK2ludCBfX2luaXQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgeyByZXR1cm4gMDsgfQordm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIHt9CisjZW5kaWYKIAogLyogVGhpcyB3aWxsIGNhdGNoIGxvb2t1cHMgZnJvbSB0aGUgZnMgcm9vdCB0byAucmVpc2VyZnNfcHJpdiAqLwogc3RhdGljIGludApAQCAtMTE0Nyw0OCArOTcxLDIzIEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQkvKiBXZSBuZWVkIGdlbmVyYXRpb24gbnVtYmVycyB0byBlbnN1cmUgdGhhdCB0aGUgb2lkIG1hcHBpbmcgaXMgY29ycmVjdAotCSAqIHYzLjUgZmlsZXN5c3RlbXMgZG9uJ3QgaGF2ZSB0aGVtLiAqLwotCWlmICghb2xkX2Zvcm1hdF9vbmx5KHMpKSB7Ci0JCXNldF9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0gZWxzZSBpZiAocmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpKSB7Ci0JCS8qIE9sZCBmb3JtYXQgZmlsZXN5c3RlbSwgYnV0IG9wdGlvbmFsIHhhdHRycyBoYXZlIGJlZW4gZW5hYmxlZAotCQkgKiBhdCBtb3VudCB0aW1lLiBFcnJvciBvdXQuICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgInhhdHRycy9BQ0xzIG5vdCBzdXBwb3J0ZWQgb24gcHJlIHYzLjYgIgotCQkJCSAiZm9ybWF0IGZpbGVzeXN0ZW0uIEZhaWxpbmcgbW91bnQuIik7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorCWVyciA9IHhhdHRyX21vdW50X2NoZWNrKHMpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7Ci0JfSBlbHNlIHsKLQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgbm8gb3B0aW9uYWwgeGF0dHJzIGhhdmUgYmVlbiBlbmFibGVkLiBUaGlzCi0JCSAqIG1lYW5zIHdlIHNpbGVudGx5IGRpc2FibGUgeGF0dHJzIG9uIHRoZSBmaWxlc3lzdGVtLiAqLwotCQljbGVhcl9iaXQoUkVJU0VSRlNfWEFUVFJTLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwotCX0KKyNlbmRpZgogCiAJLyogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcHJpdnJvb3QgbG9jYXRlZCB5ZXQgLSBnbyBmaW5kIGl0ICovCi0JaWYgKHJlaXNlcmZzX3hhdHRycyhzKSAmJiAhUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgeworCWlmICghUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKFBSSVZST09UX05BTUUsIHMtPnNfcm9vdCwKIAkJCQkJc3RybGVuKFBSSVZST09UX05BTUUpKTsKIAkJaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQkJaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpICYmICFkZW50cnktPmRfaW5vZGUpIHsKLQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQkJCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsCi0JCQkJCQkgIElfTVVURVhfWEFUVFIpOwotCQkJCWVyciA9IGlub2RlLT5pX29wLT5ta2Rpcihpbm9kZSwgZGVudHJ5LCAwNzAwKTsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQlpZiAoZXJyKSB7Ci0JCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQkJZGVudHJ5ID0gTlVMTDsKLQkJCQl9Ci0KLQkJCQlpZiAoZGVudHJ5ICYmIGRlbnRyeS0+ZF9pbm9kZSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAiQ3JlYXRlZCAlcyBvbiAlcyAtIHJlc2VydmVkIGZvciAiCi0JCQkJCQkJICJ4YXR0ciBzdG9yYWdlLiIsCi0JCQkJCQkJIFBSSVZST09UX05BTUUsCi0JCQkJCQkJIHJlaXNlcmZzX2JkZXZuYW1lCi0JCQkJCQkJIChpbm9kZS0+aV9zYikpOwotCQkJfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCQlpZiAoIShtb3VudF9mbGFncyAmIE1TX1JET05MWSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkKKwkJCQllcnIgPSBjcmVhdGVfcHJpdnJvb3QoZGVudHJ5KTsKKyNlbmRpZgorCQkJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKIAkJCQlkcHV0KGRlbnRyeSk7CiAJCQkJZGVudHJ5ID0gTlVMTDsKIAkJCX0KQEAgLTExOTcsNzMgKzk5Niw0MSBAQAogCiAJCWlmICghZXJyICYmIGRlbnRyeSkgewogCQkJcy0+c19yb290LT5kX29wID0gJnhhdHRyX2xvb2t1cF9wb2lzb25fb3BzOwotCQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSk7CisJCQlkZW50cnktPmRfaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogCQkJUkVJU0VSRlNfU0IocyktPnByaXZfcm9vdCA9IGRlbnRyeTsKLQkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgewkvKiB4YXR0cnMgYXJlIHVuYXZhaWxhYmxlICovCi0JCQkvKiBJZiB3ZSdyZSByZWFkLW9ubHkgaXQganVzdCBtZWFucyB0aGF0IHRoZSBkaXIgaGFzbid0IGJlZW4KLQkJCSAqIGNyZWF0ZWQuIE5vdCBhbiBlcnJvciAtLSBqdXN0IG5vIHhhdHRycyBvbiB0aGUgZnMuIFdlJ2xsCi0JCQkgKiBjaGVjayBhZ2FpbiBpZiB3ZSBnbyByZWFkLXdyaXRlICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJ4YXR0cnMvQUNMcyBlbmFibGVkIGFuZCBjb3VsZG4ndCAiCi0JCQkJCSAiZmluZC9jcmVhdGUgLnJlaXNlcmZzX3ByaXYuIEZhaWxpbmcgbW91bnQuIik7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJCS8qIHhhdHRycyBhcmUgdW5hdmFpbGFibGUgKi8KKwkJfSBlbHNlIGlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJLyogSWYgd2UncmUgcmVhZC1vbmx5IGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgZGlyCisJCQkgKiBoYXNuJ3QgYmVlbiBjcmVhdGVkLiBOb3QgYW4gZXJyb3IgLS0ganVzdCBubworCQkJICogeGF0dHJzIG9uIHRoZSBmcy4gV2UnbGwgY2hlY2sgYWdhaW4gaWYgd2UKKwkJCSAqIGdvIHJlYWQtd3JpdGUgKi8KKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpkbS0yMDAwNiIsCisJCQkJCSAieGF0dHJzL0FDTHMgZW5hYmxlZCBhbmQgY291bGRuJ3QgIgorCQkJCQkgImZpbmQvY3JlYXRlIC5yZWlzZXJmc19wcml2LiAiCisJCQkJCSAiRmFpbGluZyBtb3VudC4iKTsKIAkJCWVyciA9IC1FT1BOT1RTVVBQOworI2VuZGlmCiAJCX0KIAl9CiAKLSAgICAgIGVycm9yOgotCS8qIFRoaXMgaXMgb25seSBub256ZXJvIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbml0aWFsaXppbmcgdGhlIHhhdHRyCi0JICogZGlyZWN0b3J5IG9yIGlmIHRoZXJlIGlzIGEgY29uZGl0aW9uIHdoZXJlIHdlIGRvbid0IHN1cHBvcnQgdGhlbS4gKi8KKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKKwlpZiAoIWVycikKKwkJcy0+c194YXR0ciA9IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXJzOworCitlcnJvcjoKIAlpZiAoZXJyKSB7Ci0JCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlMsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7CiAJCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlNfVVNFUiwgJihSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQpKTsKIAkJY2xlYXJfYml0KFJFSVNFUkZTX1BPU0lYQUNMLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwogCX0KKyNlbmRpZgogCiAJLyogVGhlIHN1cGVyX2Jsb2NrIE1TX1BPU0lYQUNMIG11c3QgbWlycm9yIHRoZSAobm8pYWNsIG1vdW50IG9wdGlvbi4gKi8KIAlzLT5zX2ZsYWdzID0gcy0+c19mbGFncyAmIH5NU19QT1NJWEFDTDsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiAJaWYgKHJlaXNlcmZzX3Bvc2l4YWNsKHMpKQogCQlzLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworI2VuZGlmCiAKIAlyZXR1cm4gZXJyOwogfQotCi1zdGF0aWMgaW50IHJlaXNlcmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKLXsKLQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JaW50IGVycm9yID0gLUVBR0FJTjsgLyogZG8gcmVndWxhciB1bml4IHBlcm1pc3Npb24gY2hlY2tzIGJ5IGRlZmF1bHQgKi8KLQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGlub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQotCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7Ci0KLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRyX2koaW5vZGUpOwotCi0JaWYgKGFjbCkgewotCQlpZiAoIUlTX0VSUihhY2wpKSB7Ci0JCQllcnJvciA9IHBvc2l4X2FjbF9wZXJtaXNzaW9uKGlub2RlLCBhY2wsIG1hc2spOwotCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKLQkJfSBlbHNlIGlmIChQVFJfRVJSKGFjbCkgIT0gLUVOT0RBVEEpCi0JCQllcnJvciA9IFBUUl9FUlIoYWNsKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCS8qCi0JICogV2UgZG9uJ3QgZG8gcGVybWlzc2lvbiBjaGVja3Mgb24gdGhlIGludGVybmFsIG9iamVjdHMuCi0JICogUGVybWlzc2lvbnMgYXJlIGRldGVybWluZWQgYnkgdGhlICJvd25pbmciIG9iamVjdC4KLQkgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogU3RhdCBkYXRhIHYxIGRvZXNuJ3Qgc3VwcG9ydCBBQ0xzLgotCSAqLwotCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQotCQlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKLQllbHNlCi0JCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHJlaXNlcmZzX2NoZWNrX2FjbCk7Ci19CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCmluZGV4IGI3ZTRmYTQuLmMzMDNjNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jCkBAIC0xMCwxNSArMTAsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19hY2wuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCitzdGF0aWMgaW50IHJlaXNlcmZzX3NldF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsCiAJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKTsKIAogc3RhdGljIGludAogeGF0dHJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKLQlpbnQgZXJyb3I7Ci0KKwlpbnQgZXJyb3IsIGVycm9yMjsKKwlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXNpemVfdCBqY3JlYXRlX2Jsb2NrczsKIAlpZiAoIXJlaXNlcmZzX3Bvc2l4YWNsKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKQEAgLTM2LDcgKzM4LDIxIEBACiAJfSBlbHNlCiAJCWFjbCA9IE5VTEw7CiAKLQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woaW5vZGUsIHR5cGUsIGFjbCk7CisJLyogUGVzc2ltaXNtOiBXZSBjYW4ndCBhc3N1bWUgdGhhdCBhbnl0aGluZyBmcm9tIHRoZSB4YXR0ciByb290IHVwCisJICogaGFzIGJlZW4gY3JlYXRlZC4gKi8KKworCWpjcmVhdGVfYmxvY2tzID0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKSArCisJCQkgcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2l6ZSkgKiAyOworCisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJZXJyb3IgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGpjcmVhdGVfYmxvY2tzKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woJnRoLCBpbm9kZSwgdHlwZSwgYWNsKTsKKwkJZXJyb3IyID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamNyZWF0ZV9ibG9ja3MpOworCQlpZiAoZXJyb3IyKQorCQkJZXJyb3IgPSBlcnJvcjI7CisJfQorCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAKICAgICAgIHJlbGVhc2VfYW5kX291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwpAQCAtMTcyLDYgKzE4OCwyOSBAQAogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXNldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsLAorCQkJICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKK3sKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9hY2wgIT0gRVJSX1BUUigtRU5PREFUQSkpCisJCXBvc2l4X2FjbF9yZWxlYXNlKCppX2FjbCk7CisJKmlfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOworCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9zaXhfYWNsICppZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEVSUl9QVFIoLUVOT0RBVEEpKQorCQlhY2wgPSBwb3NpeF9hY2xfZHVwKCppX2FjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJcmV0dXJuIGFjbDsKK30KKwogLyoKICAqIElub2RlIG9wZXJhdGlvbiBnZXRfcG9zaXhfYWNsKCkuCiAgKgpAQCAtMTk5LDExICsyMzgsMTEgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JaWYgKElTX0VSUigqcF9hY2wpKSB7Ci0JCWlmIChQVFJfRVJSKCpwX2FjbCkgPT0gLUVOT0RBVEEpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCpwX2FjbCAhPSBOVUxMKQotCQlyZXR1cm4gcG9zaXhfYWNsX2R1cCgqcF9hY2wpOworCWFjbCA9IGlnZXRfYWNsKGlub2RlLCBwX2FjbCk7CisJaWYgKGFjbCAmJiAhSVNfRVJSKGFjbCkpCisJCXJldHVybiBhY2w7CisJZWxzZSBpZiAoUFRSX0VSUihhY2wpID09IC1FTk9EQVRBKQorCQlyZXR1cm4gTlVMTDsKIAogCXNpemUgPSByZWlzZXJmc194YXR0cl9nZXQoaW5vZGUsIG5hbWUsIE5VTEwsIDApOwogCWlmIChzaXplIDwgMCkgewpAQCAtMjI5LDcgKzI2OCw3IEBACiAJfSBlbHNlIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21fZGlzayh2YWx1ZSwgcmV0dmFsKTsKIAkJaWYgKCFJU19FUlIoYWNsKSkKLQkJCSpwX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKKwkJCWlzZXRfYWNsKGlub2RlLCBwX2FjbCwgYWNsKTsKIAl9CiAKIAlrZnJlZSh2YWx1ZSk7CkBAIC0yNDMsMTIgKzI4MiwxMyBAQAogICogQktMIGhlbGQgW2JlZm9yZSAyLjUueF0KICAqLwogc3RhdGljIGludAotcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQorcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCiB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICp2YWx1ZSA9IE5VTEw7CiAJc3RydWN0IHBvc2l4X2FjbCAqKnBfYWNsOwotCXNpemVfdCBzaXplOworCXNpemVfdCBzaXplID0gMDsKIAlpbnQgZXJyb3I7CiAJc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKIApAQCAtMjg1LDMxICszMjUsMjggQEAKIAkJdmFsdWUgPSBwb3NpeF9hY2xfdG9fZGlzayhhY2wsICZzaXplKTsKIAkJaWYgKElTX0VSUih2YWx1ZSkpCiAJCQlyZXR1cm4gKGludClQVFJfRVJSKHZhbHVlKTsKLQkJZXJyb3IgPSByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKLQl9IGVsc2UgewotCQllcnJvciA9IHJlaXNlcmZzX3hhdHRyX2RlbChpbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnJvciA9PSAtRU5PREFUQSkgewotCQkJLyogVGhpcyBtYXkgc2VlbSBvZGQgaGVyZSwgYnV0IGl0IG1lYW5zIHRoYXQgdGhlIEFDTCB3YXMgc2V0Ci0JCQkgKiB3aXRoIGEgdmFsdWUgcmVwcmVzZW50YWJsZSB3aXRoIG1vZGUgYml0cy4gSWYgdGhlcmUgd2FzCi0JCQkgKiBhbiBBQ0wgYmVmb3JlLCByZWlzZXJmc194YXR0cl9kZWwgYWxyZWFkeSBkaXJ0aWVkIHRoZSBpbm9kZS4KLQkJCSAqLworCX0KKworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSh0aCwgaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCAwKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGlub2RlIGdldHMgZGlydGllZCBpZiB3ZSdyZSBvbmx5IHVzaW5nCisJICogdGhlIG1vZGUgYml0cyBhbmQgYW4gb2xkIEFDTCBkaWRuJ3QgZXhpc3QuIFdlIGRvbid0IG5lZWQKKwkgKiB0byBjaGVjayBpZiB0aGUgaW5vZGUgaXMgaGFzaGVkIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2V0CisJICogY2FsbGVkIGJ5IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woKS4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLUVOT0RBVEEpIHsKKwkJZXJyb3IgPSAwOworCQlpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MpIHsKKwkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQkJZXJyb3IgPSAwOwogCQl9CiAJfQogCiAJa2ZyZWUodmFsdWUpOwogCi0JaWYgKCFlcnJvcikgewotCQkvKiBSZWxlYXNlIHRoZSBvbGQgb25lICovCi0JCWlmICghSVNfRVJSKCpwX2FjbCkgJiYgKnBfYWNsKQotCQkJcG9zaXhfYWNsX3JlbGVhc2UoKnBfYWNsKTsKLQotCQlpZiAoYWNsID09IE5VTEwpCi0JCQkqcF9hY2wgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQkJZWxzZQotCQkJKnBfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOwotCX0KKwlpZiAoIWVycm9yKQorCQlpc2V0X2FjbChpbm9kZSwgcF9hY2wsIGFjbCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0zMTcsNyArMzU0LDggQEAKIC8qIGRpci0+aV9tdXRleDogbG9ja2VkLAogICogaW5vZGUgaXMgbmV3IGFuZCBub3QgcmVsZWFzZWQgaW50byB0aGUgd2lsZCB5ZXQgKi8KIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CkBAIC0zMzUsOCArMzczLDggQEAKIAkvKiBEb24ndCBhcHBseSBBQ0xzIHRvIG9iamVjdHMgaW4gdGhlIC5yZWlzZXJmc19wcml2IHRyZWUuLiBUaGlzCiAJICogd291bGQgYmUgdXNlbGVzcyBzaW5jZSBwZXJtaXNzaW9ucyBhcmUgaWdub3JlZCwgYW5kIGEgcGFpbiBiZWNhdXNlCiAJICogaXQgaW50cm9kdWNlcyBsb2NraW5nIGN5Y2xlcyAqLwotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChkaXIpKSB7Ci0JCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJaWYgKElTX1BSSVZBVEUoZGlyKSkgeworCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJCWdvdG8gYXBwbHlfdW1hc2s7CiAJfQogCkBAIC0zNTQsNyArMzkyLDggQEAKIAogCQkvKiBDb3B5IHRoZSBkZWZhdWx0IEFDTCB0byB0aGUgZGVmYXVsdCBBQ0wgb2YgYSBuZXcgZGlyZWN0b3J5ICovCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOworCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsCisJCQkJCSAgICAgICBhY2wpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIGNsZWFudXA7CiAJCX0KQEAgLTM3NSw5ICs0MTQsOSBAQAogCiAJCQkvKiBJZiB3ZSBuZWVkIGFuIEFDTC4uICovCiAJCQlpZiAobmVlZF9hY2wgPiAwKSB7Ci0JCQkJZXJyID0KLQkJCQkgICAgcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkJICAgICBhY2xfY29weSk7CisJCQkJZXJyID0gcmVpc2VyZnNfc2V0X2FjbCh0aCwgaW5vZGUsCisJCQkJCQkgICAgICAgQUNMX1RZUEVfQUNDRVNTLAorCQkJCQkJICAgICAgIGFjbF9jb3B5KTsKIAkJCQlpZiAoZXJyKQogCQkJCQlnb3RvIGNsZWFudXBfY29weTsKIAkJCX0KQEAgLTM4OSwzMSArNDI4LDUxIEBACiAJfSBlbHNlIHsKIAkgICAgICBhcHBseV91bWFzazoKIAkJLyogbm8gQUNMLCBhcHBseSB1bWFzayAqLwotCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBMb29rcyB1cCBhbmQgY2FjaGVzIHRoZSByZXN1bHQgb2YgdGhlIGRlZmF1bHQgQUNMLgotICogV2UgZG8gdGhpcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FycnkgdGhlIHhhdHRyX3NlbSBpbnRvCi0gKiByZWlzZXJmc19uZXdfaW5vZGUgaWYgd2UgZG9uJ3QgbmVlZCB0byAqLworLyogVGhpcyBpcyB1c2VkIHRvIGNhY2hlIHRoZSBkZWZhdWx0IGFjbCBiZWZvcmUgYSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQuCisgKiBUaGUgYmlnZ2VzdCByZWFzb24gZm9yIHRoaXMgaXMgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IG1hbnkgYmxvY2tzIHdpbGwKKyAqIGFjdHVhbGx5IGJlIHJlcXVpcmVkIGZvciB0aGUgY3JlYXRlIG9wZXJhdGlvbiBpZiB3ZSBtdXN0IGluaGVyaXQgYW4gQUNMLgorICogQW4gQUNMIHdyaXRlIGNhbiBhZGQgdXAgdG8gMyBvYmplY3QgY3JlYXRpb25zIGFuZCBhbiBhZGRpdGlvbmFsIGZpbGUgd3JpdGUKKyAqIHNvIHdlJ2QgcHJlZmVyIG5vdCB0byByZXNlcnZlIHRoYXQgbWFueSBibG9ja3MgaW4gdGhlIGpvdXJuYWwgaWYgd2UgY2FuLgorICogSXQgYWxzbyBoYXMgdGhlIGFkdmFudGFnZSBvZiBub3QgbG9hZGluZyB0aGUgQUNMIHdpdGggYSB0cmFuc2FjdGlvbiBvcGVuLAorICogdGhpcyBtYXkgc2VlbSBzaWxseSwgYnV0IGlmIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGlzIGRvaW5nIHRoZQorICogY3JlYXRpb24sIHRoZSBBQ0wgbWF5IG5vdCBiZSBsb2FkZWQgc2luY2UgdGhlIHBlcm1pc3Npb25zIHdvdWxkbid0IHJlcXVpcmUKKyAqIGl0LgorICogV2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNhY3Rpb24uCisgKi8KIGludCByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWludCByZXQgPSAwOwotCWlmIChyZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikgJiYgIWlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkgewotCQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGlub2RlKTsKLQkJcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQpOwotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cl9pKGlub2RlKTsKLQkJcmV0ID0gKGFjbCAmJiAhSVNfRVJSKGFjbCkpOwotCQlpZiAocmV0KQotCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IG5ibG9ja3MgPSAwOworCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQpOworCisJaWYgKGFjbCAmJiAhSVNfRVJSKGFjbCkpIHsKKwkJaW50IHNpemUgPSByZWlzZXJmc19hY2xfc2l6ZShhY2wtPmFfY291bnQpOworCisJCS8qIE90aGVyIHhhdHRycyBjYW4gYmUgY3JlYXRlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIFdlIGRvbid0CisJCSAqIHdhbnQgdG8gY2xhaW0gdG9vIG1hbnkgYmxvY2tzLCBzbyB3ZSBjaGVjayB0byBzZWUgaWYgd2UKKwkJICogd2UgbmVlZCB0byBjcmVhdGUgdGhlIHRyZWUgdG8gdGhlIHhhdHRycywgYW5kIHRoZW4gd2UKKwkJICoganVzdCB3YW50IHR3byBmaWxlcy4gKi8KKwkJbmJsb2NrcyA9IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2Nrcyhpbm9kZSk7CisJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisKKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCisJCS8qIFdlIG5lZWQgdG8gYWNjb3VudCBmb3Igd3JpdGVzICsgYml0bWFwcyBmb3IgdHdvIGZpbGVzICovCisJCW5ibG9ja3MgKz0gcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2l6ZSkgKiA0OworCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIG5ibG9ja3M7CiB9CiAKIGludCByZWlzZXJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTQyOSw5ICs0ODgsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKIAlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7CiAJaWYgKCFhY2wpCiAJCXJldHVybiAwOwogCWlmIChJU19FUlIoYWNsKSkKQEAgLTQ0MiwxOCArNDk5LDIwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVycm9yID0gcG9zaXhfYWNsX2NobW9kX21hc3EoY2xvbmUsIGlub2RlLT5pX21vZGUpOwogCWlmICghZXJyb3IpIHsKLQkJaW50IGxvY2sgPSAhaGFzX3hhdHRyX2Rpcihpbm9kZSk7Ci0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCWlmIChsb2NrKQotCQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQllbHNlCi0JCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZXJyb3IgPSByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKLQkJaWYgKGxvY2spCi0JCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZWxzZQotCQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRyX2koaW5vZGUpOworCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCQlzaXplX3Qgc2l6ZSA9IHJlaXNlcmZzX3hhdHRyX25ibG9ja3MoaW5vZGUsCisJCQkJCSAgICAgcmVpc2VyZnNfYWNsX3NpemUoY2xvbmUtPmFfY291bnQpKTsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBzaXplICogMik7CisJCWlmICghZXJyb3IpIHsKKwkJCWludCBlcnJvcjI7CisJCQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woJnRoLCBpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLAorCQkJCQkJIGNsb25lKTsKKwkJCWVycm9yMiA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIHNpemUgKiAyKTsKKwkJCWlmIChlcnJvcjIpCisJCQkJZXJyb3IgPSBlcnJvcjI7CisJCX0KKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAl9CiAJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOwogCXJldHVybiBlcnJvcjsKQEAgLTQ3NywzOCArNTM2LDIyIEBACiAJcmV0dXJuIHhhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgdmFsdWUsIHNpemUpOwogfQogCi1zdGF0aWMgaW50IHBvc2l4X2FjbF9hY2Nlc3NfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHBvc2l4X2FjbF9hY2Nlc3NfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorCQkJCSAgICBzaXplX3QgbGlzdF9zaXplLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzaXplX3QgbmFtZV9sZW4pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsID0gJnJlaXNlcmZzX2ktPmlfYWNsX2FjY2VzczsKLQlpZiAoc3RybGVuKG5hbWUpICE9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKSAtIDEpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghSVNfRVJSKCphY2wpICYmICphY2wpIHsKLQkJcG9zaXhfYWNsX3JlbGVhc2UoKmFjbCk7Ci0JCSphY2wgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcG9zaXhfYWNsX2FjY2Vzc19saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgICBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CiAJaWYgKCFyZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikpCiAJCXJldHVybiAwOwotCWlmIChvdXQpCi0JCW1lbWNweShvdXQsIG5hbWUsIGxlbik7Ci0KLQlyZXR1cm4gbGVuOworCWlmIChsaXN0ICYmIHNpemUgPD0gbGlzdF9zaXplKQorCQltZW1jcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKIAkuZ2V0ID0gcG9zaXhfYWNsX2FjY2Vzc19nZXQsCiAJLnNldCA9IHBvc2l4X2FjbF9hY2Nlc3Nfc2V0LAotCS5kZWwgPSBwb3NpeF9hY2xfYWNjZXNzX2RlbCwKIAkubGlzdCA9IHBvc2l4X2FjbF9hY2Nlc3NfbGlzdCwKIH07CiAKQEAgLTUzMCwzNyArNTczLDIxIEBACiAJcmV0dXJuIHhhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwb3NpeF9hY2xfZGVmYXVsdF9kZWwoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzaXplX3QgcG9zaXhfYWNsX2RlZmF1bHRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorCQkJCSAgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHNpemVfdCBuYW1lX2xlbikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyAqcmVpc2VyZnNfaSA9IFJFSVNFUkZTX0koaW5vZGUpOwotCXN0cnVjdCBwb3NpeF9hY2wgKiphY2wgPSAmcmVpc2VyZnNfaS0+aV9hY2xfZGVmYXVsdDsKLQlpZiAoc3RybGVuKG5hbWUpICE9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCkgLSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIUlTX0VSUigqYWNsKSAmJiAqYWNsKSB7Ci0JCXBvc2l4X2FjbF9yZWxlYXNlKCphY2wpOwotCQkqYWNsID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvc2l4X2FjbF9kZWZhdWx0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCSAgICAgICBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwogCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQogCQlyZXR1cm4gMDsKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCi0JcmV0dXJuIGxlbjsKKwlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3Rfc2l6ZSkKKwkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKIH0KIAotc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAogCS5nZXQgPSBwb3NpeF9hY2xfZGVmYXVsdF9nZXQsCiAJLnNldCA9IHBvc2l4X2FjbF9kZWZhdWx0X3NldCwKLQkuZGVsID0gcG9zaXhfYWNsX2RlZmF1bHRfZGVsLAogCS5saXN0ID0gcG9zaXhfYWNsX2RlZmF1bHRfbGlzdCwKIH07CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwppbmRleCAwNTYwMDhkLi40ZDNjMjBlIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfeGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0YXRpYyBpbnQKQEAgLTEyLDcgKzEzLDcgQEAKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfZ2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOwpAQCAtMjUsNDEgKzI2LDg0IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VjdXJpdHlfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHNlY3VyaXR5X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVsZW4gKyAxOwogCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQorCWlmIChJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOworCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X2xlbikgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZWxlbik7CisJCWxpc3RbbmFtZWxlbl0gPSAnXDAnOworCX0KIAogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHNlY3VyaXR5X2hhbmRsZXIgPSB7CisvKiBJbml0aWFsaXplcyB0aGUgc2VjdXJpdHkgY29udGV4dCBmb3IgYSBuZXcgaW5vZGUgYW5kIHJldHVybnMgdGhlIG51bWJlcgorICogb2YgYmxvY2tzIG5lZWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLiBJZiBzdWNjZXNzZnVsLCByZWlzZXJmc19zZWN1cml0eQorICogbXVzdCBiZSByZWxlYXNlZCB1c2luZyByZWlzZXJmc19zZWN1cml0eV9mcmVlIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lLiAqLworaW50IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJaW50IGJsb2NrcyA9IDA7CisJaW50IGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAmc2VjLT5uYW1lLAorCQkJCQkJICZzZWMtPnZhbHVlLCAmc2VjLT5sZW5ndGgpOworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCisJCQllcnJvciA9IDA7CisKKwkJc2VjLT5uYW1lID0gTlVMTDsKKwkJc2VjLT52YWx1ZSA9IE5VTEw7CisJCXNlYy0+bGVuZ3RoID0gMDsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmIChzZWMtPmxlbmd0aCkgeworCQlibG9ja3MgPSByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3MoaW5vZGUpICsKKwkJCSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLCBzZWMtPmxlbmd0aCk7CisJCS8qIFdlIGRvbid0IHdhbnQgdG8gY291bnQgdGhlIGRpcmVjdG9yaWVzIHR3aWNlIGlmIHdlIGhhdmUKKwkJICogYSBkZWZhdWx0IEFDTC4gKi8KKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCX0KKwlyZXR1cm4gYmxvY2tzOworfQorCitpbnQgcmVpc2VyZnNfc2VjdXJpdHlfd3JpdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJaW50IGVycm9yOworCWlmIChzdHJsZW4oc2VjLT5uYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSh0aCwgaW5vZGUsIHNlYy0+bmFtZSwgc2VjLT52YWx1ZSwKKwkJCQkJICBzZWMtPmxlbmd0aCwgWEFUVFJfQ1JFQVRFKTsKKwlpZiAoZXJyb3IgPT0gLUVOT0RBVEEgfHwgZXJyb3IgPT0gLUVPUE5PVFNVUFApCisJCWVycm9yID0gMDsKKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCByZWlzZXJmc19zZWN1cml0eV9mcmVlKHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlrZnJlZShzZWMtPm5hbWUpOworCWtmcmVlKHNlYy0+dmFsdWUpOworCXNlYy0+bmFtZSA9IE5VTEw7CisJc2VjLT52YWx1ZSA9IE5VTEw7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwKIAkuZ2V0ID0gc2VjdXJpdHlfZ2V0LAogCS5zZXQgPSBzZWN1cml0eV9zZXQsCi0JLmRlbCA9IHNlY3VyaXR5X2RlbCwKIAkubGlzdCA9IHNlY3VyaXR5X2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCmluZGV4IDYwYWJlMmIuLmE4NjUwNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl90cnVzdGVkLmMKQEAgLTEzLDEwICsxMyw3IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9UUlVTVEVEX1BSRUZJWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKQEAgLTI5LDUwICsyNiwzMCBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHRydXN0ZWRfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHRydXN0ZWRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljb25zdCBzaXplX3QgbGVuID0gbmFtZV9sZW4gKyAxOwogCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdHJ1c3RlZF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0KLQlpZiAoIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAotCWlmICghKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCisJaWYgKGxpc3QgJiYgbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZV9sZW4pOworCQlsaXN0W25hbWVfbGVuXSA9ICdcMCc7CisJfQogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHRydXN0ZWRfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3RydXN0ZWRfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gWEFUVFJfVFJVU1RFRF9QUkVGSVgsCiAJLmdldCA9IHRydXN0ZWRfZ2V0LAogCS5zZXQgPSB0cnVzdGVkX3NldCwKLQkuZGVsID0gdHJ1c3RlZF9kZWwsCiAJLmxpc3QgPSB0cnVzdGVkX2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCmluZGV4IDEzODRlZmMuLmUzMjM4ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKQEAgLTYsMTAgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLSMgaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfYWNsLmg+Ci0jZW5kaWYKLQogc3RhdGljIGludAogdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTI1LDcgKzIxLDYgQEAKIHVzZXJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKIAkgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKLQogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzQsMzMgKzI5LDIzIEBACiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdXNlcl9kZWwoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzaXplX3QgdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQljb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7Ci0JaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9VU0VSX1BSRUZJWCkpCi0JCXJldHVybiAtRUlOVkFMOworCWNvbnN0IHNpemVfdCBsZW4gPSBuYW1lX2xlbiArIDE7CiAKIAlpZiAoIXJlaXNlcmZzX3hhdHRyc191c2VyKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci11c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGNoYXIgKm91dCkKLXsKLQlpbnQgbGVuID0gbmFtZWxlbjsKLQlpZiAoIXJlaXNlcmZzX3hhdHRyc191c2VyKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIDA7Ci0KLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCisJaWYgKGxpc3QgJiYgbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZV9sZW4pOworCQlsaXN0W25hbWVfbGVuXSA9ICdcMCc7CisJfQogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHVzZXJfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gWEFUVFJfVVNFUl9QUkVGSVgsCiAJLmdldCA9IHVzZXJfZ2V0LAogCS5zZXQgPSB1c2VyX3NldCwKLQkuZGVsID0gdXNlcl9kZWwsCiAJLmxpc3QgPSB1c2VyX2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggYTFhNGNmZS4uN2Y0MGYzMCAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC01MTMsNyArNTEzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2VxX2JpdG1hcCk7CiAKLWludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLAoraW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdHMsCiAJCXVuc2lnbmVkIGludCBucl9iaXRzKQogewogCWlmIChtLT5jb3VudCA8IG0tPnNpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggNGVkMGJhNC4uZGQ3MjdkNCAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKKysrIGIvZnMvc3BsaWNlLmMKQEAgLTU5LDcgKzU5LDggQEAKIAkJICovCiAJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAKLQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIEdGUF9LRVJORUwpKQorCQlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSAmJgorCQkgICAgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3N1cGVyLmMgYi9mcy9zcXVhc2hmcy9zdXBlci5jCmluZGV4IDY4MWVjMGQuLmZmYTZlZGMgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3N1cGVyLmMKKysrIGIvZnMvc3F1YXNoZnMvc3VwZXIuYwpAQCAtMzAxLDYgKzMwMSw3IEBACiBzdGF0aWMgaW50IHNxdWFzaGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrID0gZGVudHJ5LT5kX3NiLT5zX2ZzX2luZm87CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KGRlbnRyeS0+ZF9zYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJVFJBQ0UoIkVudGVyZWQgc3F1YXNoZnNfc3RhdGZzXG4iKTsKIApAQCAtMzExLDYgKzMxMiw4IEBACiAJYnVmLT5mX2ZpbGVzID0gbXNibGstPmlub2RlczsKIAlidWYtPmZfZmZyZWUgPSAwOwogCWJ1Zi0+Zl9uYW1lbGVuID0gU1FVQVNIRlNfTkFNRV9MRU47CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDJiYTQ4MTUuLjc3Y2I0ZWMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMjg3LDYgKzI4Nyw3IEBACiAJX19mc3luY19zdXBlcihzYik7CiAJcmV0dXJuIHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc3luY19zdXBlcik7CiAKIC8qKgogICoJZ2VuZXJpY19zaHV0ZG93bl9zdXBlcgktCWNvbW1vbiBoZWxwZXIgZm9yIC0+a2lsbF9zYigpCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDA3NzAzZDMuLjkzZTBjMDIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGJpbl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCBiaW5fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKIAlzdHJ1Y3QgYmluX2J1ZmZlciAqYmIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0yNDIsMTUgKzI0MiwxNSBAQAogCWludCByZXQ7CiAKIAlpZiAoIWJiLT52bV9vcHMpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCiAJaWYgKCFiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCiAJCXJldHVybiAwOwogCiAJaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKLQlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCBwYWdlKTsKKwlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCB2bWYpOwogCiAJc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvaW5vZGUuYyBiL2ZzL3N5c3YvaW5vZGUuYwppbmRleCAzZDgxYmY1Li5kYTIwYjQ4IDEwMDY0NAotLS0gYS9mcy9zeXN2L2lub2RlLmMKKysrIGIvZnMvc3lzdi9pbm9kZS5jCkBAIC05MCw2ICs5MCw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAlzdHJ1Y3Qgc3lzdl9zYl9pbmZvICpzYmkgPSBTWVNWX1NCKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlID0gc2ItPnNfbWFnaWM7CiAJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOwpAQCAtOTgsNiArOTksOCBAQAogCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19uaW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IHN5c3ZfY291bnRfZnJlZV9pbm9kZXMoc2IpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gU1lTVl9OQU1FTEVOOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggOTNiNmRlNS4uMGZmODlmZSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMTQzNCw4ICsxNDM0LDkgQEAKICAqIG1tYXAoKWQgZmlsZSBoYXMgdGFrZW4gd3JpdGUgcHJvdGVjdGlvbiBmYXVsdCBhbmQgaXMgYmVpbmcgbWFkZQogICogd3JpdGFibGUuIFVCSUZTIG11c3QgZW5zdXJlIHBhZ2UgaXMgYnVkZ2V0ZWQgZm9yLgogICovCi1zdGF0aWMgaW50IHViaWZzX3ZtX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW50IHViaWZzX3ZtX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWYtPnBhZ2U7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHZtYS0+dm1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CiAJc3RydWN0IHRpbWVzcGVjIG5vdyA9IHViaWZzX2N1cnJlbnRfdGltZShpbm9kZSk7CkBAIC0xNDQ3LDcgKzE0NDgsNyBAQAogCXViaWZzX2Fzc2VydCghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSk7CiAKIAlpZiAodW5saWtlbHkoYy0+cm9fbWVkaWEpKQotCQlyZXR1cm4gLUVST0ZTOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOyAvKiAtRVJPRlMgKi8KIAogCS8qCiAJICogV2UgaGF2ZSBub3QgbG9ja2VkIEBwYWdlIHNvIGZhciBzbyB3ZSBtYXkgYnVkZ2V0IGZvciBjaGFuZ2luZyB0aGUKQEAgLTE0ODAsNyArMTQ4MSw3IEBACiAJCWlmIChlcnIgPT0gLUVOT1NQQykKIAkJCXViaWZzX3dhcm4oIm91dCBvZiBzcGFjZSBmb3IgbW1hcHBlZCBmaWxlICIKIAkJCQkgICAiKGlub2RlIG51bWJlciAlbHUpIiwgaW5vZGUtPmlfaW5vKTsKLQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAl9CiAKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC0xNTIwLDYgKzE1MjEsOCBAQAogb3V0X3VubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAl1Ymlmc19yZWxlYXNlX2J1ZGdldChjLCAmcmVxKTsKKwlpZiAoZXJyKQorCQllcnIgPSBWTV9GQVVMVF9TSUdCVVM7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2JhbGxvYy5jIGIvZnMvdWRmL2JhbGxvYy5jCmluZGV4IDJiYjc4OGEuLmU0OGU5YTMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9iYWxsb2MuYworKysgYi9mcy91ZGYvYmFsbG9jLmMKQEAgLTg3LDEyICs4NywxMiBAQAogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCByZXR2YWwgPSAwOwotCWtlcm5lbF9sYl9hZGRyIGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jOwogCiAJbG9jLmxvZ2ljYWxCbG9ja051bSA9IGJpdG1hcC0+c19leHRQb3NpdGlvbjsKIAlsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gVURGX1NCKHNiKS0+c19wYXJ0aXRpb247CiAKLQliaCA9IHVkZl90cmVhZChzYiwgdWRmX2dldF9sYl9wYmxvY2soc2IsIGxvYywgYmxvY2spKTsKKwliaCA9IHVkZl90cmVhZChzYiwgdWRmX2dldF9sYl9wYmxvY2soc2IsICZsb2MsIGJsb2NrKSk7CiAJaWYgKCFiaCkKIAkJcmV0dmFsID0gLUVJTzsKIApAQCAtMTQwLDI3ICsxNDAsMjkgQEAKIAlyZXR1cm4gc2xvdDsKIH0KIAotc3RhdGljIGJvb2wgdWRmX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpLAotCQkJCXUxNiBwYXJ0aXRpb24sIHUzMiBjbnQpCitzdGF0aWMgdm9pZCB1ZGZfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTE2IHBhcnRpdGlvbiwgdTMyIGNudCkKIHsKKwlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICpsdmlkOwogCi0JaWYgKHNiaS0+c19sdmlkX2JoID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKKwlpZiAoIXNiaS0+c19sdmlkX2JoKQorCQlyZXR1cm47CiAKIAlsdmlkID0gKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKXNiaS0+c19sdmlkX2JoLT5iX2RhdGE7CiAJbGUzMl9hZGRfY3B1KCZsdmlkLT5mcmVlU3BhY2VUYWJsZVtwYXJ0aXRpb25dLCBjbnQpOwotCXJldHVybiB0cnVlOworCXVkZl91cGRhdGVkX2x2aWQoc2IpOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfYml0bWFwX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICBzdHJ1Y3QgdWRmX2JpdG1hcCAqYml0bWFwLAotCQkJCSAgIGtlcm5lbF9sYl9hZGRyIGJsb2MsIHVpbnQzMl90IG9mZnNldCwKKwkJCQkgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmJsb2MsCisJCQkJICAgdWludDMyX3Qgb2Zmc2V0LAogCQkJCSAgIHVpbnQzMl90IGNvdW50KQogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlzdHJ1Y3QgdWRmX3BhcnRfbWFwICpwYXJ0bWFwOwogCXVuc2lnbmVkIGxvbmcgYmxvY2s7CiAJdW5zaWduZWQgbG9uZyBibG9ja19ncm91cDsKIAl1bnNpZ25lZCBsb25nIGJpdDsKQEAgLTE2OSwxNyArMTcxLDE3IEBACiAJdW5zaWduZWQgbG9uZyBvdmVyZmxvdzsKIAogCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7Ci0JaWYgKGJsb2MubG9naWNhbEJsb2NrTnVtIDwgMCB8fAotCSAgICAoYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgotCQlzYmktPnNfcGFydG1hcHNbYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLnNfcGFydGl0aW9uX2xlbikgeworCXBhcnRtYXAgPSAmc2JpLT5zX3BhcnRtYXBzW2Jsb2MtPnBhcnRpdGlvblJlZmVyZW5jZU51bV07CisJaWYgKGJsb2MtPmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKKwkgICAgKGJsb2MtPmxvZ2ljYWxCbG9ja051bSArIGNvdW50KSA+CisJCXBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbikgewogCQl1ZGZfZGVidWcoIiVkIDwgJWQgfHwgJWQgKyAlZCA+ICVkXG4iLAotCQkJICBibG9jLmxvZ2ljYWxCbG9ja051bSwgMCwgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIGNvdW50LAotCQkJICBzYmktPnNfcGFydG1hcHNbYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLgotCQkJCQkJCXNfcGFydGl0aW9uX2xlbik7CisJCQkgIGJsb2MtPmxvZ2ljYWxCbG9ja051bSwgMCwgYmxvYy0+bG9naWNhbEJsb2NrTnVtLAorCQkJICBjb3VudCwgcGFydG1hcC0+c19wYXJ0aXRpb25fbGVuKTsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCi0JYmxvY2sgPSBibG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCArCisJYmxvY2sgPSBibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKwogCQkoc2l6ZW9mKHN0cnVjdCBzcGFjZUJpdG1hcERlc2MpIDw8IDMpOwogCiAJZG8gewpAQCAtMjA3LDcgKzIwOSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWlmIChpbm9kZSkKIAkJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwotCQkJCXVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHNiaS0+c19wYXJ0aXRpb24sIDEpOworCQkJCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgc2JpLT5zX3BhcnRpdGlvbiwgMSk7CiAJCQl9CiAJCX0KIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwpAQCAtMjE4LDkgKzIyMCw2IEBACiAJfSB3aGlsZSAob3ZlcmZsb3cpOwogCiBlcnJvcl9yZXR1cm46Ci0Jc2ItPnNfZGlydCA9IDE7Ci0JaWYgKHNiaS0+c19sdmlkX2JoKQotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogfQogCkBAIC0yNzcsOSArMjc2LDcgQEAKIAl9IHdoaWxlIChibG9ja19jb3VudCA+IDApOwogCiBvdXQ6Ci0JaWYgKHVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHBhcnRpdGlvbiwgLWFsbG9jX2NvdW50KSkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOwotCXNiLT5zX2RpcnQgPSAxOworCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgcGFydGl0aW9uLCAtYWxsb2NfY291bnQpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm4gYWxsb2NfY291bnQ7CiB9CkBAIC00MDksOSArNDA2LDcgQEAKIAogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBwYXJ0aXRpb24sIC0xKSkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOwotCXNiLT5zX2RpcnQgPSAxOworCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgcGFydGl0aW9uLCAtMSk7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCSplcnIgPSAwOwogCXJldHVybiBuZXdibG9jazsKQEAgLTQyNSwyNiArNDIwLDI4IEBACiBzdGF0aWMgdm9pZCB1ZGZfdGFibGVfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKnRhYmxlLAotCQkJCSAga2VybmVsX2xiX2FkZHIgYmxvYywgdWludDMyX3Qgb2Zmc2V0LAorCQkJCSAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpibG9jLAorCQkJCSAgdWludDMyX3Qgb2Zmc2V0LAogCQkJCSAgdWludDMyX3QgY291bnQpCiB7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCXN0cnVjdCB1ZGZfcGFydF9tYXAgKnBhcnRtYXA7CiAJdWludDMyX3Qgc3RhcnQsIGVuZDsKIAl1aW50MzJfdCBlbGVuOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBvZXBvcywgZXBvczsKIAlpbnQ4X3QgZXR5cGU7CiAJaW50IGk7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKIAogCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7Ci0JaWYgKGJsb2MubG9naWNhbEJsb2NrTnVtIDwgMCB8fAotCSAgICAoYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgotCQlzYmktPnNfcGFydG1hcHNbYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLnNfcGFydGl0aW9uX2xlbikgeworCXBhcnRtYXAgPSAmc2JpLT5zX3BhcnRtYXBzW2Jsb2MtPnBhcnRpdGlvblJlZmVyZW5jZU51bV07CisJaWYgKGJsb2MtPmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKKwkgICAgKGJsb2MtPmxvZ2ljYWxCbG9ja051bSArIGNvdW50KSA+CisJCXBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbikgewogCQl1ZGZfZGVidWcoIiVkIDwgJWQgfHwgJWQgKyAlZCA+ICVkXG4iLAogCQkJICBibG9jLmxvZ2ljYWxCbG9ja051bSwgMCwgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIGNvdW50LAotCQkJICBzYmktPnNfcGFydG1hcHNbYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLgotCQkJCQkJCXNfcGFydGl0aW9uX2xlbik7CisJCQkgIHBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIApAQCAtNDUzLDExICs0NTAsMTAgQEAKIAkgICBjb3VsZCBvY2N1cmUsIGJ1dC4uIG9oIHdlbGwgKi8KIAlpZiAoaW5vZGUpCiAJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBjb3VudCk7Ci0JaWYgKHVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHNiaS0+c19wYXJ0aXRpb24sIGNvdW50KSkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOworCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgc2JpLT5zX3BhcnRpdGlvbiwgY291bnQpOwogCi0Jc3RhcnQgPSBibG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldDsKLQllbmQgPSBibG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCArIGNvdW50IC0gMTsKKwlzdGFydCA9IGJsb2MtPmxvZ2ljYWxCbG9ja051bSArIG9mZnNldDsKKwllbmQgPSBibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKyBjb3VudCAtIDE7CiAKIAllcG9zLm9mZnNldCA9IG9lcG9zLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOwogCWVsZW4gPSAwOwpAQCAtNDgzLDcgKzQ3OSw3IEBACiAJCQkJc3RhcnQgKz0gY291bnQ7CiAJCQkJY291bnQgPSAwOwogCQkJfQotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCX0gZWxzZSBpZiAoZWxvYy5sb2dpY2FsQmxvY2tOdW0gPT0gKGVuZCArIDEpKSB7CiAJCQlpZiAoKDB4M0ZGRkZGRkYgLSBlbGVuKSA8CiAJCQkJCShjb3VudCA8PCBzYi0+c19ibG9ja3NpemVfYml0cykpIHsKQEAgLTUwMiw3ICs0OTgsNyBAQAogCQkJCWVuZCAtPSBjb3VudDsKIAkJCQljb3VudCA9IDA7CiAJCQl9Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmb2Vwb3MsICZlbG9jLCBlbGVuLCAxKTsKIAkJfQogCiAJCWlmIChlcG9zLmJoICE9IG9lcG9zLmJoKSB7CkBAIC01MzIsOCArNTI4LDggQEAKIAkJICovCiAKIAkJaW50IGFkc2l6ZTsKLQkJc2hvcnRfYWQgKnNhZCA9IE5VTEw7Ci0JCWxvbmdfYWQgKmxhZCA9IE5VTEw7CisJCXN0cnVjdCBzaG9ydF9hZCAqc2FkID0gTlVMTDsKKwkJc3RydWN0IGxvbmdfYWQgKmxhZCA9IE5VTEw7CiAJCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZDsKIAogCQllbG9jLmxvZ2ljYWxCbG9ja051bSA9IHN0YXJ0OwpAQCAtNTQxLDkgKzUzNyw5IEBACiAJCQkoY291bnQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwogCiAJCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQllbHNlIHsKIAkJCWJyZWxzZShvZXBvcy5iaCk7CiAJCQlicmVsc2UoZXBvcy5iaCk7CkBAIC01NjMsNyArNTU5LDcgQEAKIAkJCWVsZW4gLT0gc2ItPnNfYmxvY2tzaXplOwogCiAJCQllcG9zLmJoID0gdWRmX3RyZWFkKHNiLAotCQkJCQl1ZGZfZ2V0X2xiX3BibG9jayhzYiwgZXBvcy5ibG9jaywgMCkpOworCQkJCQl1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmVwb3MuYmxvY2ssIDApKTsKIAkJCWlmICghZXBvcy5iaCkgewogCQkJCWJyZWxzZShvZXBvcy5iaCk7CiAJCQkJZ290byBlcnJvcl9yZXR1cm47CkBAIC02MDEsMTUgKzU5NywxNSBAQAogCQkJaWYgKHNiaS0+c191ZGZyZXYgPj0gMHgwMjAwKQogCQkJCXVkZl9uZXdfdGFnKGVwb3MuYmgtPmJfZGF0YSwgVEFHX0lERU5UX0FFRCwKIAkJCQkJICAgIDMsIDEsIGVwb3MuYmxvY2subG9naWNhbEJsb2NrTnVtLAotCQkJCQkgICAgc2l6ZW9mKHRhZykpOworCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAkJCWVsc2UKIAkJCQl1ZGZfbmV3X3RhZyhlcG9zLmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsCiAJCQkJCSAgICAyLCAxLCBlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSwKLQkJCQkJICAgIHNpemVvZih0YWcpKTsKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAKIAkJCXN3aXRjaCAoaWluZm8tPmlfYWxsb2NfdHlwZSkgewogCQkJY2FzZSBJQ0JUQUdfRkxBR19BRF9TSE9SVDoKLQkJCQlzYWQgPSAoc2hvcnRfYWQgKilzcHRyOworCQkJCXNhZCA9IChzdHJ1Y3Qgc2hvcnRfYWQgKilzcHRyOwogCQkJCXNhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoCiAJCQkJCUVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQlzYi0+c19ibG9ja3NpemUpOwpAQCAtNjE3LDcgKzYxMyw3IEBACiAJCQkJCWNwdV90b19sZTMyKGVwb3MuYmxvY2subG9naWNhbEJsb2NrTnVtKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgSUNCVEFHX0ZMQUdfQURfTE9ORzoKLQkJCQlsYWQgPSAobG9uZ19hZCAqKXNwdHI7CisJCQkJbGFkID0gKHN0cnVjdCBsb25nX2FkICopc3B0cjsKIAkJCQlsYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKAogCQkJCQlFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJc2ItPnNfYmxvY2tzaXplKTsKQEAgLTYzNSw3ICs2MzEsNyBAQAogCiAJCS8qIEl0J3MgcG9zc2libGUgdGhhdCBzdGVhbGluZyB0aGUgYmxvY2sgZW1wdGllZCB0aGUgZXh0ZW50ICovCiAJCWlmIChlbGVuKSB7Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsIGVsb2MsIGVsZW4sIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZlcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAKIAkJCWlmICghZXBvcy5iaCkgewogCQkJCWlpbmZvLT5pX2xlbkFsbG9jICs9IGFkc2l6ZTsKQEAgLTY1Myw3ICs2NDksNiBAQAogCWJyZWxzZShvZXBvcy5iaCk7CiAKIGVycm9yX3JldHVybjoKLQlzYi0+c19kaXJ0ID0gMTsKIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJcmV0dXJuOwogfQpAQCAtNjY2LDcgKzY2MSw3IEBACiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCWludCBhbGxvY19jb3VudCA9IDA7CiAJdWludDMyX3QgZWxlbiwgYWRzaXplOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwogCWludDhfdCBldHlwZSA9IC0xOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CkBAIC02NzcsOSArNjcyLDkgQEAKIAogCWlpbmZvID0gVURGX0kodGFibGUpOwogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCXJldHVybiAwOwogCkBAIC03MDcsNyArNzAyLDcgQEAKIAkJCWFsbG9jX2NvdW50ID0gYmxvY2tfY291bnQ7CiAJCQllbG9jLmxvZ2ljYWxCbG9ja051bSArPSBhbGxvY19jb3VudDsKIAkJCWVsZW4gLT0gKGFsbG9jX2NvdW50IDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZXBvcywgZWxvYywKKwkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZXBvcywgJmVsb2MsCiAJCQkJCShldHlwZSA8PCAzMCkgfCBlbGVuLCAxKTsKIAkJfSBlbHNlCiAJCQl1ZGZfZGVsZXRlX2FleHQodGFibGUsIGVwb3MsIGVsb2MsCkBAIC03MTgsMTAgKzcxMyw4IEBACiAKIAlicmVsc2UoZXBvcy5iaCk7CiAKLQlpZiAoYWxsb2NfY291bnQgJiYgdWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgcGFydGl0aW9uLCAtYWxsb2NfY291bnQpKSB7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JfQorCWlmIChhbGxvY19jb3VudCkKKwkJdWRmX2FkZF9mcmVlX3NwYWNlKHNiLCBwYXJ0aXRpb24sIC1hbGxvY19jb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCXJldHVybiBhbGxvY19jb3VudDsKIH0KQEAgLTczNSw3ICs3MjgsNyBAQAogCXVpbnQzMl90IHNwcmVhZCA9IDB4RkZGRkZGRkYsIG5zcHJlYWQgPSAweEZGRkZGRkZGOwogCXVpbnQzMl90IG5ld2Jsb2NrID0gMCwgYWRzaXplOwogCXVpbnQzMl90IGVsZW4sIGdvYWxfZWxlbiA9IDA7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgdW5pbml0aWFsaXplZF92YXIoZ29hbF9lbG9jKTsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgdW5pbml0aWFsaXplZF92YXIoZ29hbF9lbG9jKTsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MsIGdvYWxfZXBvczsKIAlpbnQ4X3QgZXR5cGU7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKHRhYmxlKTsKQEAgLTc0Myw5ICs3MzYsOSBAQAogCSplcnIgPSAtRU5PU1BDOwogCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJcmV0dXJuIG5ld2Jsb2NrOwogCkBAIC04MTQsNDYgKzgwNywzNyBAQAogCX0KIAogCWlmIChnb2FsX2VsZW4pCi0JCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZ29hbF9lcG9zLCBnb2FsX2Vsb2MsIGdvYWxfZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZ29hbF9lcG9zLCAmZ29hbF9lbG9jLCBnb2FsX2VsZW4sIDEpOwogCWVsc2UKIAkJdWRmX2RlbGV0ZV9hZXh0KHRhYmxlLCBnb2FsX2Vwb3MsIGdvYWxfZWxvYywgZ29hbF9lbGVuKTsKIAlicmVsc2UoZ29hbF9lcG9zLmJoKTsKIAotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBwYXJ0aXRpb24sIC0xKSkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOworCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgcGFydGl0aW9uLCAtMSk7CiAKLQlzYi0+c19kaXJ0ID0gMTsKIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJKmVyciA9IDA7CiAJcmV0dXJuIG5ld2Jsb2NrOwogfQogCi1pbmxpbmUgdm9pZCB1ZGZfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIGtlcm5lbF9sYl9hZGRyIGJsb2MsIHVpbnQzMl90IG9mZnNldCwKLQkJCSAgICB1aW50MzJfdCBjb3VudCkKK3ZvaWQgdWRmX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpibG9jLCB1aW50MzJfdCBvZmZzZXQsCisJCSAgICAgdWludDMyX3QgY291bnQpCiB7Ci0JdWludDE2X3QgcGFydGl0aW9uID0gYmxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CisJdWludDE2X3QgcGFydGl0aW9uID0gYmxvYy0+cGFydGl0aW9uUmVmZXJlbmNlTnVtOwogCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcCA9ICZVREZfU0Ioc2IpLT5zX3BhcnRtYXBzW3BhcnRpdGlvbl07CiAKIAlpZiAobWFwLT5zX3BhcnRpdGlvbl9mbGFncyAmIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19CSVRNQVApIHsKLQkJcmV0dXJuIHVkZl9iaXRtYXBfZnJlZV9ibG9ja3Moc2IsIGlub2RlLAotCQkJCQkgICAgICBtYXAtPnNfdXNwYWNlLnNfYml0bWFwLAotCQkJCQkgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKKwkJdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIG1hcC0+c191c3BhY2Uuc19iaXRtYXAsCisJCQkJICAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwogCX0gZWxzZSBpZiAobWFwLT5zX3BhcnRpdGlvbl9mbGFncyAmIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19UQUJMRSkgewotCQlyZXR1cm4gdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwKLQkJCQkJICAgICBtYXAtPnNfdXNwYWNlLnNfdGFibGUsCi0JCQkJCSAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CisJCXVkZl90YWJsZV9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIG1hcC0+c191c3BhY2Uuc190YWJsZSwKKwkJCQkgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKIAl9IGVsc2UgaWYgKG1hcC0+c19wYXJ0aXRpb25fZmxhZ3MgJiBVREZfUEFSVF9GTEFHX0ZSRUVEX0JJVE1BUCkgewotCQlyZXR1cm4gdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsCi0JCQkJCSAgICAgIG1hcC0+c19mc3BhY2Uuc19iaXRtYXAsCi0JCQkJCSAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOworCQl1ZGZfYml0bWFwX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgbWFwLT5zX2ZzcGFjZS5zX2JpdG1hcCwKKwkJCQkgICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CiAJfSBlbHNlIGlmIChtYXAtPnNfcGFydGl0aW9uX2ZsYWdzICYgVURGX1BBUlRfRkxBR19GUkVFRF9UQUJMRSkgewotCQlyZXR1cm4gdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwKLQkJCQkJICAgICBtYXAtPnNfZnNwYWNlLnNfdGFibGUsCi0JCQkJCSAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuOworCQl1ZGZfdGFibGVfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBtYXAtPnNfZnNwYWNlLnNfdGFibGUsCisJCQkJICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyLmMgYi9mcy91ZGYvZGlyLmMKaW5kZXggNjJkYzI3MC4uMmVmZDRkNSAxMDA2NDQKLS0tIGEvZnMvdWRmL2Rpci5jCisrKyBiL2ZzL3VkZi9kaXIuYwpAQCAtNTEsNyArNTEsNyBAQAogCXVpbnQ4X3QgbGZpOwogCWxvZmZfdCBzaXplID0gdWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCwgKmJoYVsxNl07Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXNlY3Rvcl90IG9mZnNldDsKIAlpbnQgaSwgbnVtLCByZXQgPSAwOwpAQCAtODAsMTMgKzgwLDEzIEBACiAJCQlyZXQgPSAtRU5PRU5UOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKIAkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0KIAkJCQkJSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJfSBlbHNlIHsKIAkJCW9mZnNldCA9IDA7CiAJCX0KQEAgLTEwMSw3ICsxMDEsNyBAQAogCQkJaWYgKGkgKyBvZmZzZXQgPiAoZWxlbiA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpKQogCQkJCWkgPSAoZWxlbiA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIC0gb2Zmc2V0OwogCQkJZm9yIChudW0gPSAwOyBpID4gMDsgaS0tKSB7Ci0JCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCArIGkpOworCQkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0ICsgaSk7CiAJCQkJdG1wID0gdWRmX3RnZXRibGsoZGlyLT5pX3NiLCBibG9jayk7CiAJCQkJaWYgKHRtcCAmJiAhYnVmZmVyX3VwdG9kYXRlKHRtcCkgJiYgIWJ1ZmZlcl9sb2NrZWQodG1wKSkKIAkJCQkJYmhhW251bSsrXSA9IHRtcDsKQEAgLTE2MSw5ICsxNjEsOSBAQAogCQkJbWVtY3B5KGZuYW1lLCAiLi4iLCBmbGVuKTsKIAkJCWR0X3R5cGUgPSBEVF9ESVI7CiAJCX0gZWxzZSB7Ci0JCQlrZXJuZWxfbGJfYWRkciB0bG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7CisJCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOwogCi0JCQlpYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIHRsb2MsIDApOworCQkJaWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmdGxvYywgMCk7CiAJCQlmbGVuID0gdWRmX2dldF9maWxlbmFtZShkaXItPmlfc2IsIG5hbWVwdHIsIGZuYW1lLCBsZmkpOwogCQkJZHRfdHlwZSA9IERUX1VOS05PV047CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9kaXJlY3RvcnkuYyBiL2ZzL3VkZi9kaXJlY3RvcnkuYwppbmRleCAyODIwZjhmLi4xZDJjNTcwIDEwMDY0NAotLS0gYS9mcy91ZGYvZGlyZWN0b3J5LmMKKysrIGIvZnMvdWRmL2RpcmVjdG9yeS5jCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpZiAwCiBzdGF0aWMgdWludDhfdCAqdWRmX2ZpbGVhZF9yZWFkKHN0cnVjdCBpbm9kZSAqZGlyLCB1aW50OF90ICp0bXBhZCwKLQkJCQl1aW50OF90IGFkX3NpemUsIGtlcm5lbF9sYl9hZGRyIGZlX2xvYywKKwkJCQl1aW50OF90IGFkX3NpemUsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciBmZV9sb2MsCiAJCQkJaW50ICpwb3MsIGludCAqb2Zmc2V0LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKIAkJCQlpbnQgKmVycm9yKQogewpAQCAtNzUsNyArNzUsNyBAQAogCQkJCQkgc3RydWN0IHVkZl9maWxlaWRlbnRfYmggKmZpYmgsCiAJCQkJCSBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpLAogCQkJCQkgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKLQkJCQkJIGtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwKKwkJCQkJIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sCiAJCQkJCSBzZWN0b3JfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBmaWxlSWRlbnREZXNjICpmaTsKQEAgLTExMSw3ICsxMTEsNyBAQAogCQkgICAgKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICplbG9jLCAqb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsICpvZmZzZXQpOwogCiAJCSgqb2Zmc2V0KSsrOwogCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJCWlmIChpICsgKm9mZnNldCA+ICgqZWxlbiA+PiBibG9ja3NpemVfYml0cykpCiAJCQkJaSA9ICgqZWxlbiA+PiBibG9ja3NpemVfYml0cyktKm9mZnNldDsKIAkJCWZvciAobnVtID0gMDsgaSA+IDA7IGktLSkgewotCQkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAqZWxvYywKKwkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywKIAkJCQkJCQkgICpvZmZzZXQgKyBpKTsKIAkJCQl0bXAgPSB1ZGZfdGdldGJsayhkaXItPmlfc2IsIGJsb2NrKTsKIAkJCQlpZiAodG1wICYmICFidWZmZXJfdXB0b2RhdGUodG1wKSAmJgpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCSAgICAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJCQlyZXR1cm4gTlVMTDsKIAotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgKmVsb2MsICpvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywgKm9mZnNldCk7CiAKIAkJKCpvZmZzZXQpKys7CiAKQEAgLTI0OSw5ICsyNDksOSBAQAogfQogCiAjaWYgMAotc3RhdGljIGV4dGVudF9hZCAqdWRmX2dldF9maWxlZXh0ZW50KHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZnNpemUsIGludCAqb2Zmc2V0KQorc3RhdGljIHN0cnVjdCBleHRlbnRfYWQgKnVkZl9nZXRfZmlsZWV4dGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLCBpbnQgKm9mZnNldCkKIHsKLQlleHRlbnRfYWQgKmV4dDsKKwlzdHJ1Y3QgZXh0ZW50X2FkICpleHQ7CiAJc3RydWN0IGZpbGVFbnRyeSAqZmU7CiAJdWludDhfdCAqcHRyOwogCkBAIC0yNzQsNTQgKzI3NCw1NCBAQAogCWlmICgoKm9mZnNldCA+IDApICYmICgqb2Zmc2V0IDwgbGUzMl90b19jcHUoZmUtPmxlbmd0aEFsbG9jRGVzY3MpKSkKIAkJcHRyICs9ICpvZmZzZXQ7CiAKLQlleHQgPSAoZXh0ZW50X2FkICopcHRyOworCWV4dCA9IChzdHJ1Y3QgZXh0ZW50X2FkICopcHRyOwogCi0JKm9mZnNldCA9ICpvZmZzZXQgKyBzaXplb2YoZXh0ZW50X2FkKTsKKwkqb2Zmc2V0ID0gKm9mZnNldCArIHNpemVvZihzdHJ1Y3QgZXh0ZW50X2FkKTsKIAlyZXR1cm4gZXh0OwogfQogI2VuZGlmCiAKLXNob3J0X2FkICp1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHVpbnQ4X3QgKnB0ciwgaW50IG1heG9mZnNldCwgdWludDMyX3QgKm9mZnNldCwKK3N0cnVjdCBzaG9ydF9hZCAqdWRmX2dldF9maWxlc2hvcnRhZCh1aW50OF90ICpwdHIsIGludCBtYXhvZmZzZXQsIHVpbnQzMl90ICpvZmZzZXQsCiAJCQkgICAgICBpbnQgaW5jKQogewotCXNob3J0X2FkICpzYTsKKwlzdHJ1Y3Qgc2hvcnRfYWQgKnNhOwogCiAJaWYgKCghcHRyKSB8fCAoIW9mZnNldCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9nZXRfZmlsZXNob3J0YWQoKSBpbnZhbGlkcGFybXNcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKCpvZmZzZXQgKyBzaXplb2Yoc2hvcnRfYWQpKSA+IG1heG9mZnNldCkKKwlpZiAoKCpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNob3J0X2FkKSkgPiBtYXhvZmZzZXQpCiAJCXJldHVybiBOVUxMOwogCWVsc2UgewotCQlzYSA9IChzaG9ydF9hZCAqKXB0cjsKKwkJc2EgPSAoc3RydWN0IHNob3J0X2FkICopcHRyOwogCQlpZiAoc2EtPmV4dExlbmd0aCA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaWYgKGluYykKLQkJKm9mZnNldCArPSBzaXplb2Yoc2hvcnRfYWQpOworCQkqb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCXJldHVybiBzYTsKIH0KIAotbG9uZ19hZCAqdWRmX2dldF9maWxlbG9uZ2FkKHVpbnQ4X3QgKnB0ciwgaW50IG1heG9mZnNldCwgdWludDMyX3QgKm9mZnNldCwgaW50IGluYykKK3N0cnVjdCBsb25nX2FkICp1ZGZfZ2V0X2ZpbGVsb25nYWQodWludDhfdCAqcHRyLCBpbnQgbWF4b2Zmc2V0LCB1aW50MzJfdCAqb2Zmc2V0LCBpbnQgaW5jKQogewotCWxvbmdfYWQgKmxhOworCXN0cnVjdCBsb25nX2FkICpsYTsKIAogCWlmICgoIXB0cikgfHwgKCFvZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfZ2V0X2ZpbGVsb25nYWQoKSBpbnZhbGlkcGFybXNcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKCpvZmZzZXQgKyBzaXplb2YobG9uZ19hZCkpID4gbWF4b2Zmc2V0KQorCWlmICgoKm9mZnNldCArIHNpemVvZihzdHJ1Y3QgbG9uZ19hZCkpID4gbWF4b2Zmc2V0KQogCQlyZXR1cm4gTlVMTDsKIAllbHNlIHsKLQkJbGEgPSAobG9uZ19hZCAqKXB0cjsKKwkJbGEgPSAoc3RydWN0IGxvbmdfYWQgKilwdHI7CiAJCWlmIChsYS0+ZXh0TGVuZ3RoID09IDApCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlpZiAoaW5jKQotCQkqb2Zmc2V0ICs9IHNpemVvZihsb25nX2FkKTsKKwkJKm9mZnNldCArPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCXJldHVybiBsYTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9lY21hXzE2Ny5oIGIvZnMvdWRmL2VjbWFfMTY3LmgKaW5kZXggYTA5NzRkZi4uNDc5MmI3NyAxMDA2NDQKLS0tIGEvZnMvdWRmL2VjbWFfMTY3LmgKKysrIGIvZnMvdWRmL2VjbWFfMTY3LmgKQEAgLTM4LDEwICszOCwxMCBAQAogI2RlZmluZSBfRUNNQV8xNjdfSCAxCiAKIC8qIENoYXJhY3RlciBzZXQgc3BlY2lmaWNhdGlvbiAoRUNNQSAxNjdyMyAxLzcuMi4xKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGNoYXJzcGVjIHsKIAl1aW50OF90CQljaGFyU2V0VHlwZTsKIAl1aW50OF90CQljaGFyU2V0SW5mb1s2M107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBjaGFyc3BlYzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBDaGFyYWN0ZXIgU2V0IFR5cGUgKEVDTUEgMTY3cjMgMS83LjIuMS4xKSAqLwogI2RlZmluZSBDSEFSU1BFQ19UWVBFX0NTMAkJMHgwMAkvKiAoMS83LjIuMikgKi8KQEAgLTU3LDcgKzU3LDcgQEAKIHR5cGVkZWYgdWludDhfdAkJZHN0cmluZzsKIAogLyogVGltZXN0YW1wIChFQ01BIDE2N3IzIDEvNy4zKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHRpbWVzdGFtcCB7CiAJX19sZTE2CQl0eXBlQW5kVGltZXpvbmU7CiAJX19sZTE2CQl5ZWFyOwogCXVpbnQ4X3QJCW1vbnRoOwpAQCAtNjgsNyArNjgsNyBAQAogCXVpbnQ4X3QJCWNlbnRpc2Vjb25kczsKIAl1aW50OF90CQlodW5kcmVkc09mTWljcm9zZWNvbmRzOwogCXVpbnQ4X3QJCW1pY3Jvc2Vjb25kczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHRpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUeXBlIGFuZCBUaW1lIFpvbmUgKEVDTUEgMTY3cjMgMS83LjMuMSkgKi8KICNkZWZpbmUgVElNRVNUQU1QX1RZUEVfTUFTSwkJMHhGMDAwCkBAIC03OCwxMSArNzgsMTEgQEAKICNkZWZpbmUgVElNRVNUQU1QX1RJTUVaT05FX01BU0sJCTB4MEZGRgogCiAvKiBFbnRpdHkgaWRlbnRpZmllciAoRUNNQSAxNjdyMyAxLzcuNCkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCByZWdpZCB7CiAJdWludDhfdAkJZmxhZ3M7CiAJdWludDhfdAkJaWRlbnRbMjNdOwogCXVpbnQ4X3QJCWlkZW50U3VmZml4WzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVnaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRmxhZ3MgKEVDTUEgMTY3cjMgMS83LjQuMSkgKi8KICNkZWZpbmUgRU5USVRZSURfRkxBR1NfRElSVFkJCTB4MDAKQEAgLTEyNiwzOCArMTI2LDM4IEBACiAKIC8qIEJvb3QgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAyLzkuNCkgKi8KIHN0cnVjdCBib290RGVzYyB7Ci0JdWludDhfdAkJc3RydWN0VHlwZTsKLQl1aW50OF90CQlzdGRJZGVudFtWU0RfU1REX0lEX0xFTl07Ci0JdWludDhfdAkJc3RydWN0VmVyc2lvbjsKLQl1aW50OF90CQlyZXNlcnZlZDE7Ci0JcmVnaWQJCWFyY2hUeXBlOwotCXJlZ2lkCQlib290SWRlbnQ7Ci0JX19sZTMyCQlib290RXh0TG9jYXRpb247Ci0JX19sZTMyCQlib290RXh0TGVuZ3RoOwotCV9fbGU2NAkJbG9hZEFkZHJlc3M7Ci0JX19sZTY0CQlzdGFydEFkZHJlc3M7Ci0JdGltZXN0YW1wCWRlc2NDcmVhdGlvbkRhdGVBbmRUaW1lOwotCV9fbGUxNgkJZmxhZ3M7Ci0JdWludDhfdAkJcmVzZXJ2ZWQyWzMyXTsKLQl1aW50OF90CQlib290VXNlWzE5MDZdOworCXVpbnQ4X3QJCQlzdHJ1Y3RUeXBlOworCXVpbnQ4X3QJCQlzdGRJZGVudFtWU0RfU1REX0lEX0xFTl07CisJdWludDhfdAkJCXN0cnVjdFZlcnNpb247CisJdWludDhfdAkJCXJlc2VydmVkMTsKKwlzdHJ1Y3QgcmVnaWQJCWFyY2hUeXBlOworCXN0cnVjdCByZWdpZAkJYm9vdElkZW50OworCV9fbGUzMgkJCWJvb3RFeHRMb2NhdGlvbjsKKwlfX2xlMzIJCQlib290RXh0TGVuZ3RoOworCV9fbGU2NAkJCWxvYWRBZGRyZXNzOworCV9fbGU2NAkJCXN0YXJ0QWRkcmVzczsKKwlzdHJ1Y3QgdGltZXN0YW1wCWRlc2NDcmVhdGlvbkRhdGVBbmRUaW1lOworCV9fbGUxNgkJCWZsYWdzOworCXVpbnQ4X3QJCQlyZXNlcnZlZDJbMzJdOworCXVpbnQ4X3QJCQlib290VXNlWzE5MDZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEZsYWdzIChFQ01BIDE2N3IzIDIvOS40LjEyKSAqLwogI2RlZmluZSBCT09UX0ZMQUdTX0VSQVNFCQkweDAxCiAKIC8qIEV4dGVudCBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvNy4xKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGV4dGVudF9hZCB7CiAJX19sZTMyCQlleHRMZW5ndGg7CiAJX19sZTMyCQlleHRMb2NhdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGV4dGVudF9hZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qga2VybmVsX2V4dGVudF9hZCB7CiAJdWludDMyX3QJZXh0TGVuZ3RoOwogCXVpbnQzMl90CWV4dExvY2F0aW9uOwotfSBrZXJuZWxfZXh0ZW50X2FkOworfTsKIAogLyogRGVzY3JpcHRvciBUYWcgKEVDTUEgMTY3cjMgMy83LjIpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgdGFnIHsKIAlfX2xlMTYJCXRhZ0lkZW50OwogCV9fbGUxNgkJZGVzY1ZlcnNpb247CiAJdWludDhfdAkJdGFnQ2hlY2tzdW07CkBAIC0xNjYsNyArMTY2LDcgQEAKIAlfX2xlMTYJCWRlc2NDUkM7CiAJX19sZTE2CQlkZXNjQ1JDTGVuZ3RoOwogCV9fbGUzMgkJdGFnTG9jYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB0YWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVGFnIElkZW50aWZpZXIgKEVDTUEgMTY3cjMgMy83LjIuMSkgKi8KICNkZWZpbmUgVEFHX0lERU5UX1BWRAkJCTB4MDAwMQpAQCAtMTkwLDI4ICsxOTAsMjggQEAKIAogLyogUHJpbWFyeSBWb2x1bWUgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjEpICovCiBzdHJ1Y3QgcHJpbWFyeVZvbERlc2MgewotCXRhZwkJZGVzY1RhZzsKLQlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JX19sZTMyCQlwcmltYXJ5Vm9sRGVzY051bTsKLQlkc3RyaW5nCQl2b2xJZGVudFszMl07Ci0JX19sZTE2CQl2b2xTZXFOdW07Ci0JX19sZTE2CQltYXhWb2xTZXFOdW07Ci0JX19sZTE2CQlpbnRlcmNoYW5nZUx2bDsKLQlfX2xlMTYJCW1heEludGVyY2hhbmdlTHZsOwotCV9fbGUzMgkJY2hhclNldExpc3Q7Ci0JX19sZTMyCQltYXhDaGFyU2V0TGlzdDsKLQlkc3RyaW5nCQl2b2xTZXRJZGVudFsxMjhdOwotCWNoYXJzcGVjCWRlc2NDaGFyU2V0OwotCWNoYXJzcGVjCWV4cGxhbmF0b3J5Q2hhclNldDsKLQlleHRlbnRfYWQJdm9sQWJzdHJhY3Q7Ci0JZXh0ZW50X2FkCXZvbENvcHlyaWdodDsKLQlyZWdpZAkJYXBwSWRlbnQ7Ci0JdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOwotCXJlZ2lkCQlpbXBJZGVudDsKLQl1aW50OF90CQlpbXBVc2VbNjRdOwotCV9fbGUzMgkJcHJlZGVjZXNzb3JWb2xEZXNjU2VxTG9jYXRpb247Ci0JX19sZTE2CQlmbGFnczsKLQl1aW50OF90CQlyZXNlcnZlZFsyMl07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlfX2xlMzIJCQl2b2xEZXNjU2VxTnVtOworCV9fbGUzMgkJCXByaW1hcnlWb2xEZXNjTnVtOworCWRzdHJpbmcJCQl2b2xJZGVudFszMl07CisJX19sZTE2CQkJdm9sU2VxTnVtOworCV9fbGUxNgkJCW1heFZvbFNlcU51bTsKKwlfX2xlMTYJCQlpbnRlcmNoYW5nZUx2bDsKKwlfX2xlMTYJCQltYXhJbnRlcmNoYW5nZUx2bDsKKwlfX2xlMzIJCQljaGFyU2V0TGlzdDsKKwlfX2xlMzIJCQltYXhDaGFyU2V0TGlzdDsKKwlkc3RyaW5nCQkJdm9sU2V0SWRlbnRbMTI4XTsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWRlc2NDaGFyU2V0OworCXN0cnVjdCBjaGFyc3BlYwkJZXhwbGFuYXRvcnlDaGFyU2V0OworCXN0cnVjdCBleHRlbnRfYWQJdm9sQWJzdHJhY3Q7CisJc3RydWN0IGV4dGVudF9hZAl2b2xDb3B5cmlnaHQ7CisJc3RydWN0IHJlZ2lkCQlhcHBJZGVudDsKKwlzdHJ1Y3QgdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOworCXN0cnVjdCByZWdpZAkJaW1wSWRlbnQ7CisJdWludDhfdAkJCWltcFVzZVs2NF07CisJX19sZTMyCQkJcHJlZGVjZXNzb3JWb2xEZXNjU2VxTG9jYXRpb247CisJX19sZTE2CQkJZmxhZ3M7CisJdWludDhfdAkJCXJlc2VydmVkWzIyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGbGFncyAoRUNNQSAxNjdyMyAzLzEwLjEuMjEpICovCkBAIC0yMTksNDAgKzIxOSw0MCBAQAogCiAvKiBBbmNob3IgVm9sdW1lIERlc2NyaXB0b3IgUG9pbnRlciAoRUNNQSAxNjdyMyAzLzEwLjIpICovCiBzdHJ1Y3QgYW5jaG9yVm9sRGVzY1B0ciB7Ci0JdGFnCQlkZXNjVGFnOwotCWV4dGVudF9hZAltYWluVm9sRGVzY1NlcUV4dDsKLQlleHRlbnRfYWQJcmVzZXJ2ZVZvbERlc2NTZXFFeHQ7Ci0JdWludDhfdAkgCXJlc2VydmVkWzQ4MF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgZXh0ZW50X2FkCW1haW5Wb2xEZXNjU2VxRXh0OworCXN0cnVjdCBleHRlbnRfYWQJcmVzZXJ2ZVZvbERlc2NTZXFFeHQ7CisJdWludDhfdAkgCQlyZXNlcnZlZFs0ODBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFZvbHVtZSBEZXNjcmlwdG9yIFBvaW50ZXIgKEVDTUEgMTY3cjMgMy8xMC4zKSAqLwogc3RydWN0IHZvbERlc2NQdHIgewotCXRhZwkJZGVzY1RhZzsKLQlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JZXh0ZW50X2FkCW5leHRWb2xEZXNjU2VxRXh0OwotCXVpbnQ4X3QJCXJlc2VydmVkWzQ4NF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlfX2xlMzIJCQl2b2xEZXNjU2VxTnVtOworCXN0cnVjdCBleHRlbnRfYWQJbmV4dFZvbERlc2NTZXFFeHQ7CisJdWludDhfdAkJCXJlc2VydmVkWzQ4NF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSW1wbGVtZW50YXRpb24gVXNlIFZvbHVtZSBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvMTAuNCkgKi8KIHN0cnVjdCBpbXBVc2VWb2xEZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCV9fbGUzMgkJdm9sRGVzY1NlcU51bTsKLQlyZWdpZAkJaW1wSWRlbnQ7CisJc3RydWN0IHJlZ2lkCWltcElkZW50OwogCXVpbnQ4X3QJCWltcFVzZVs0NjBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFBhcnRpdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvMTAuNSkgKi8KIHN0cnVjdCBwYXJ0aXRpb25EZXNjIHsKLQl0YWcgZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnIGRlc2NUYWc7CiAJX19sZTMyIHZvbERlc2NTZXFOdW07CiAJX19sZTE2IHBhcnRpdGlvbkZsYWdzOwogCV9fbGUxNiBwYXJ0aXRpb25OdW1iZXI7Ci0JcmVnaWQgcGFydGl0aW9uQ29udGVudHM7CisJc3RydWN0IHJlZ2lkIHBhcnRpdGlvbkNvbnRlbnRzOwogCXVpbnQ4X3QgcGFydGl0aW9uQ29udGVudHNVc2VbMTI4XTsKIAlfX2xlMzIgYWNjZXNzVHlwZTsKIAlfX2xlMzIgcGFydGl0aW9uU3RhcnRpbmdMb2NhdGlvbjsKIAlfX2xlMzIgcGFydGl0aW9uTGVuZ3RoOwotCXJlZ2lkIGltcElkZW50OworCXN0cnVjdCByZWdpZCBpbXBJZGVudDsKIAl1aW50OF90IGltcFVzZVsxMjhdOwogCXVpbnQ4X3QgcmVzZXJ2ZWRbMTU2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMjc4LDE5ICsyNzgsMTkgQEAKIAogLyogTG9naWNhbCBWb2x1bWUgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjYpICovCiBzdHJ1Y3QgbG9naWNhbFZvbERlc2MgewotCXRhZwkJZGVzY1RhZzsKLQlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JY2hhcnNwZWMJZGVzY0NoYXJTZXQ7Ci0JZHN0cmluZwkJbG9naWNhbFZvbElkZW50WzEyOF07Ci0JX19sZTMyCQlsb2dpY2FsQmxvY2tTaXplOwotCXJlZ2lkCQlkb21haW5JZGVudDsKLQl1aW50OF90CQlsb2dpY2FsVm9sQ29udGVudHNVc2VbMTZdOwotCV9fbGUzMgkJbWFwVGFibGVMZW5ndGg7Ci0JX19sZTMyCQludW1QYXJ0aXRpb25NYXBzOwotCXJlZ2lkCQlpbXBJZGVudDsKLQl1aW50OF90CQlpbXBVc2VbMTI4XTsKLQlleHRlbnRfYWQJaW50ZWdyaXR5U2VxRXh0OwotCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcHNbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlfX2xlMzIJCQl2b2xEZXNjU2VxTnVtOworCXN0cnVjdCBjaGFyc3BlYwkJZGVzY0NoYXJTZXQ7CisJZHN0cmluZwkJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOworCV9fbGUzMgkJCWxvZ2ljYWxCbG9ja1NpemU7CisJc3RydWN0IHJlZ2lkCQlkb21haW5JZGVudDsKKwl1aW50OF90CQkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzE2XTsKKwlfX2xlMzIJCQltYXBUYWJsZUxlbmd0aDsKKwlfX2xlMzIJCQludW1QYXJ0aXRpb25NYXBzOworCXN0cnVjdCByZWdpZAkJaW1wSWRlbnQ7CisJdWludDhfdAkJCWltcFVzZVsxMjhdOworCXN0cnVjdCBleHRlbnRfYWQJaW50ZWdyaXR5U2VxRXh0OworCXVpbnQ4X3QJCQlwYXJ0aXRpb25NYXBzWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEdlbmVyaWMgUGFydGl0aW9uIE1hcCAoRUNNQSAxNjdyMyAzLzEwLjcuMSkgKi8KQEAgLTMyMiwzMCArMzIyLDMwIEBACiAKIC8qIFVuYWxsb2NhdGVkIFNwYWNlIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC44KSAqLwogc3RydWN0IHVuYWxsb2NTcGFjZURlc2MgewotCXRhZwkJZGVzY1RhZzsKLQlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JX19sZTMyCQludW1BbGxvY0Rlc2NzOwotCWV4dGVudF9hZAlhbGxvY0Rlc2NzWzBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlfX2xlMzIJCQludW1BbGxvY0Rlc2NzOworCXN0cnVjdCBleHRlbnRfYWQJYWxsb2NEZXNjc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUZXJtaW5hdGluZyBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvMTAuOSkgKi8KIHN0cnVjdCB0ZXJtaW5hdGluZ0Rlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJdWludDhfdAkJcmVzZXJ2ZWRbNDk2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBMb2dpY2FsIFZvbHVtZSBJbnRlZ3JpdHkgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjEwKSAqLwogc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOwotCV9fbGUzMgkJaW50ZWdyaXR5VHlwZTsKLQlleHRlbnRfYWQJbmV4dEludGVncml0eUV4dDsKLQl1aW50OF90CQlsb2dpY2FsVm9sQ29udGVudHNVc2VbMzJdOwotCV9fbGUzMgkJbnVtT2ZQYXJ0aXRpb25zOwotCV9fbGUzMgkJbGVuZ3RoT2ZJbXBVc2U7Ci0JX19sZTMyCQlmcmVlU3BhY2VUYWJsZVswXTsKLQlfX2xlMzIJCXNpemVUYWJsZVswXTsKLQl1aW50OF90CQlpbXBVc2VbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOworCV9fbGUzMgkJCWludGVncml0eVR5cGU7CisJc3RydWN0IGV4dGVudF9hZAluZXh0SW50ZWdyaXR5RXh0OworCXVpbnQ4X3QJCQlsb2dpY2FsVm9sQ29udGVudHNVc2VbMzJdOworCV9fbGUzMgkJCW51bU9mUGFydGl0aW9uczsKKwlfX2xlMzIJCQlsZW5ndGhPZkltcFVzZTsKKwlfX2xlMzIJCQlmcmVlU3BhY2VUYWJsZVswXTsKKwlfX2xlMzIJCQlzaXplVGFibGVbMF07CisJdWludDhfdAkJCWltcFVzZVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBJbnRlZ3JpdHkgVHlwZSAoRUNNQSAxNjdyMyAzLzEwLjEwLjMpICovCkBAIC0zNTMsNTAgKzM1Myw1MCBAQAogI2RlZmluZSBMVklEX0lOVEVHUklUWV9UWVBFX0NMT1NFCTB4MDAwMDAwMDEKIAogLyogUmVjb3JkZWQgQWRkcmVzcyAoRUNNQSAxNjdyMyA0LzcuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBsYl9hZGRyIHsKIAlfX2xlMzIJCWxvZ2ljYWxCbG9ja051bTsKIAlfX2xlMTYJIAlwYXJ0aXRpb25SZWZlcmVuY2VOdW07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsYl9hZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIC4uLiBhbmQgaXRzIGluLWNvcmUgYW5hbG9nICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgewogCXVpbnQzMl90CQlsb2dpY2FsQmxvY2tOdW07CiAJdWludDE2X3QJIAlwYXJ0aXRpb25SZWZlcmVuY2VOdW07Ci19IGtlcm5lbF9sYl9hZGRyOworfTsKIAogLyogU2hvcnQgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBzaG9ydF9hZCB7CiAgICAgICAgIF9fbGUzMgkJZXh0TGVuZ3RoOwogICAgICAgICBfX2xlMzIJCWV4dFBvc2l0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2hvcnRfYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogTG9uZyBBbGxvY2F0aW9uIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xNC4yKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGxvbmdfYWQgewogCV9fbGUzMgkJZXh0TGVuZ3RoOwotCWxiX2FkZHIJCWV4dExvY2F0aW9uOworCXN0cnVjdCBsYl9hZGRyCWV4dExvY2F0aW9uOwogCXVpbnQ4X3QJCWltcFVzZVs2XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGxvbmdfYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90CWV4dExlbmd0aDsKLQlrZXJuZWxfbGJfYWRkcglleHRMb2NhdGlvbjsKLQl1aW50OF90CQlpbXBVc2VbNl07Ci19IGtlcm5lbF9sb25nX2FkOworc3RydWN0IGtlcm5lbF9sb25nX2FkIHsKKwl1aW50MzJfdAkJZXh0TGVuZ3RoOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkcglleHRMb2NhdGlvbjsKKwl1aW50OF90CQkJaW1wVXNlWzZdOworfTsKIAogLyogRXh0ZW5kZWQgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMykgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBleHRfYWQgewogCV9fbGUzMgkJZXh0TGVuZ3RoOwogCV9fbGUzMgkJcmVjb3JkZWRMZW5ndGg7CiAJX19sZTMyCQlpbmZvcm1hdGlvbkxlbmd0aDsKLQlsYl9hZGRyCQlleHRMb2NhdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGV4dF9hZDsKKwlzdHJ1Y3QgbGJfYWRkcglleHRMb2NhdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QJZXh0TGVuZ3RoOwotCXVpbnQzMl90CXJlY29yZGVkTGVuZ3RoOwotCXVpbnQzMl90CWluZm9ybWF0aW9uTGVuZ3RoOwotCWtlcm5lbF9sYl9hZGRyCWV4dExvY2F0aW9uOwotfSBrZXJuZWxfZXh0X2FkOworc3RydWN0IGtlcm5lbF9leHRfYWQgeworCXVpbnQzMl90CQlleHRMZW5ndGg7CisJdWludDMyX3QJCXJlY29yZGVkTGVuZ3RoOworCXVpbnQzMl90CQlpbmZvcm1hdGlvbkxlbmd0aDsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIJZXh0TG9jYXRpb247Cit9OwogCiAvKiBEZXNjcmlwdG9yIFRhZyAoRUNNQSAxNjdyMyA0LzcuMiAtIFNlZSAzLzcuMikgKi8KIApAQCAtNDE1LDQ0ICs0MTUsNDQgQEAKIAogLyogRmlsZSBTZXQgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjEpICovCiBzdHJ1Y3QgZmlsZVNldERlc2MgewotCXRhZwkJZGVzY1RhZzsKLQl0aW1lc3RhbXAJcmVjb3JkaW5nRGF0ZUFuZFRpbWU7Ci0JX19sZTE2CQlpbnRlcmNoYW5nZUx2bDsKLQlfX2xlMTYJCW1heEludGVyY2hhbmdlTHZsOwotCV9fbGUzMgkJY2hhclNldExpc3Q7Ci0JX19sZTMyCQltYXhDaGFyU2V0TGlzdDsKLQlfX2xlMzIJCWZpbGVTZXROdW07Ci0JX19sZTMyCQlmaWxlU2V0RGVzY051bTsKLQljaGFyc3BlYwlsb2dpY2FsVm9sSWRlbnRDaGFyU2V0OwotCWRzdHJpbmcJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOwotCWNoYXJzcGVjCWZpbGVTZXRDaGFyU2V0OwotCWRzdHJpbmcJCWZpbGVTZXRJZGVudFszMl07Ci0JZHN0cmluZwkJY29weXJpZ2h0RmlsZUlkZW50WzMyXTsKLQlkc3RyaW5nCQlhYnN0cmFjdEZpbGVJZGVudFszMl07Ci0JbG9uZ19hZAkJcm9vdERpcmVjdG9yeUlDQjsKLQlyZWdpZAkJZG9tYWluSWRlbnQ7Ci0JbG9uZ19hZAkJbmV4dEV4dDsKLQlsb25nX2FkCQlzdHJlYW1EaXJlY3RvcnlJQ0I7Ci0JdWludDhfdAkJcmVzZXJ2ZWRbMzJdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwlfX2xlMTYJCQlpbnRlcmNoYW5nZUx2bDsKKwlfX2xlMTYJCQltYXhJbnRlcmNoYW5nZUx2bDsKKwlfX2xlMzIJCQljaGFyU2V0TGlzdDsKKwlfX2xlMzIJCQltYXhDaGFyU2V0TGlzdDsKKwlfX2xlMzIJCQlmaWxlU2V0TnVtOworCV9fbGUzMgkJCWZpbGVTZXREZXNjTnVtOworCXN0cnVjdCBjaGFyc3BlYwkJbG9naWNhbFZvbElkZW50Q2hhclNldDsKKwlkc3RyaW5nCQkJbG9naWNhbFZvbElkZW50WzEyOF07CisJc3RydWN0IGNoYXJzcGVjCQlmaWxlU2V0Q2hhclNldDsKKwlkc3RyaW5nCQkJZmlsZVNldElkZW50WzMyXTsKKwlkc3RyaW5nCQkJY29weXJpZ2h0RmlsZUlkZW50WzMyXTsKKwlkc3RyaW5nCQkJYWJzdHJhY3RGaWxlSWRlbnRbMzJdOworCXN0cnVjdCBsb25nX2FkCQlyb290RGlyZWN0b3J5SUNCOworCXN0cnVjdCByZWdpZAkJZG9tYWluSWRlbnQ7CisJc3RydWN0IGxvbmdfYWQJCW5leHRFeHQ7CisJc3RydWN0IGxvbmdfYWQJCXN0cmVhbURpcmVjdG9yeUlDQjsKKwl1aW50OF90CQkJcmVzZXJ2ZWRbMzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFBhcnRpdGlvbiBIZWFkZXIgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjMpICovCiBzdHJ1Y3QgcGFydGl0aW9uSGVhZGVyRGVzYyB7Ci0Jc2hvcnRfYWQJdW5hbGxvY1NwYWNlVGFibGU7Ci0Jc2hvcnRfYWQJdW5hbGxvY1NwYWNlQml0bWFwOwotCXNob3J0X2FkCXBhcnRpdGlvbkludGVncml0eVRhYmxlOwotCXNob3J0X2FkCWZyZWVkU3BhY2VUYWJsZTsKLQlzaG9ydF9hZAlmcmVlZFNwYWNlQml0bWFwOworCXN0cnVjdCBzaG9ydF9hZAl1bmFsbG9jU3BhY2VUYWJsZTsKKwlzdHJ1Y3Qgc2hvcnRfYWQJdW5hbGxvY1NwYWNlQml0bWFwOworCXN0cnVjdCBzaG9ydF9hZAlwYXJ0aXRpb25JbnRlZ3JpdHlUYWJsZTsKKwlzdHJ1Y3Qgc2hvcnRfYWQJZnJlZWRTcGFjZVRhYmxlOworCXN0cnVjdCBzaG9ydF9hZAlmcmVlZFNwYWNlQml0bWFwOwogCXVpbnQ4X3QJCXJlc2VydmVkWzg4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGaWxlIElkZW50aWZpZXIgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjQpICovCiBzdHJ1Y3QgZmlsZUlkZW50RGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMTYJCWZpbGVWZXJzaW9uTnVtOwogCXVpbnQ4X3QJCWZpbGVDaGFyYWN0ZXJpc3RpY3M7CiAJdWludDhfdAkJbGVuZ3RoRmlsZUlkZW50OwotCWxvbmdfYWQJCWljYjsKKwlzdHJ1Y3QgbG9uZ19hZAlpY2I7CiAJX19sZTE2CQlsZW5ndGhPZkltcFVzZTsKIAl1aW50OF90CQlpbXBVc2VbMF07CiAJdWludDhfdAkJZmlsZUlkZW50WzBdOwpAQCAtNDY4LDIyICs0NjgsMjIgQEAKIAogLyogQWxsb2NhdGlvbiBFeHQgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjUpICovCiBzdHJ1Y3QgYWxsb2NFeHREZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCV9fbGUzMgkJcHJldmlvdXNBbGxvY0V4dExvY2F0aW9uOwogCV9fbGUzMgkJbGVuZ3RoQWxsb2NEZXNjczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBJQ0IgVGFnIChFQ01BIDE2N3IzIDQvMTQuNikgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBpY2J0YWcgewogCV9fbGUzMgkJcHJpb3JSZWNvcmRlZE51bURpcmVjdEVudHJpZXM7CiAJX19sZTE2CQlzdHJhdGVneVR5cGU7CiAJX19sZTE2CQlzdHJhdGVneVBhcmFtZXRlcjsKIAlfX2xlMTYJCW51bUVudHJpZXM7CiAJdWludDhfdAkJcmVzZXJ2ZWQ7CiAJdWludDhfdAkJZmlsZVR5cGU7Ci0JbGJfYWRkcgkJcGFyZW50SUNCTG9jYXRpb247CisJc3RydWN0IGxiX2FkZHIJcGFyZW50SUNCTG9jYXRpb247CiAJX19sZTE2CQlmbGFnczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGljYnRhZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBTdHJhdGVneSBUeXBlIChFQ01BIDE2N3IzIDQvMTQuNi4yKSAqLwogI2RlZmluZSBJQ0JUQUdfU1RSQVRFR1lfVFlQRV9VTkRFRgkweDAwMDAKQEAgLTUyOCw0MSArNTI4LDQxIEBACiAKIC8qIEluZGlyZWN0IEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuNykgKi8KIHN0cnVjdCBpbmRpcmVjdEVudHJ5IHsKLQl0YWcJCWRlc2NUYWc7Ci0JaWNidGFnCQlpY2JUYWc7Ci0JbG9uZ19hZAkJaW5kaXJlY3RJQ0I7CisJc3RydWN0IHRhZwlkZXNjVGFnOworCXN0cnVjdCBpY2J0YWcJaWNiVGFnOworCXN0cnVjdCBsb25nX2FkCWluZGlyZWN0SUNCOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFRlcm1pbmFsIEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuOCkgKi8KIHN0cnVjdCB0ZXJtaW5hbEVudHJ5IHsKLQl0YWcJCWRlc2NUYWc7Ci0JaWNidGFnCQlpY2JUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOworCXN0cnVjdCBpY2J0YWcJaWNiVGFnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEZpbGUgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC45KSAqLwogc3RydWN0IGZpbGVFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCV9fbGUzMgkJdWlkOwotCV9fbGUzMgkJZ2lkOwotCV9fbGUzMgkJcGVybWlzc2lvbnM7Ci0JX19sZTE2CQlmaWxlTGlua0NvdW50OwotCXVpbnQ4X3QJCXJlY29yZEZvcm1hdDsKLQl1aW50OF90CQlyZWNvcmREaXNwbGF5QXR0cjsKLQlfX2xlMzIJCXJlY29yZExlbmd0aDsKLQlfX2xlNjQJCWluZm9ybWF0aW9uTGVuZ3RoOwotCV9fbGU2NAkJbG9naWNhbEJsb2Nrc1JlY29yZGVkOwotCXRpbWVzdGFtcAlhY2Nlc3NUaW1lOwotCXRpbWVzdGFtcAltb2RpZmljYXRpb25UaW1lOwotCXRpbWVzdGFtcAlhdHRyVGltZTsKLQlfX2xlMzIJCWNoZWNrcG9pbnQ7Ci0JbG9uZ19hZAkJZXh0ZW5kZWRBdHRySUNCOwotCXJlZ2lkCQlpbXBJZGVudDsKLQlfX2xlNjQJCXVuaXF1ZUlEOwotCV9fbGUzMgkJbGVuZ3RoRXh0ZW5kZWRBdHRyOwotCV9fbGUzMgkJbGVuZ3RoQWxsb2NEZXNjczsKLQl1aW50OF90CQlleHRlbmRlZEF0dHJbMF07Ci0JdWludDhfdAkJYWxsb2NEZXNjc1swXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCXN0cnVjdCBpY2J0YWcJCWljYlRhZzsKKwlfX2xlMzIJCQl1aWQ7CisJX19sZTMyCQkJZ2lkOworCV9fbGUzMgkJCXBlcm1pc3Npb25zOworCV9fbGUxNgkJCWZpbGVMaW5rQ291bnQ7CisJdWludDhfdAkJCXJlY29yZEZvcm1hdDsKKwl1aW50OF90CQkJcmVjb3JkRGlzcGxheUF0dHI7CisJX19sZTMyCQkJcmVjb3JkTGVuZ3RoOworCV9fbGU2NAkJCWluZm9ybWF0aW9uTGVuZ3RoOworCV9fbGU2NAkJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKKwlzdHJ1Y3QgdGltZXN0YW1wCWFjY2Vzc1RpbWU7CisJc3RydWN0IHRpbWVzdGFtcAltb2RpZmljYXRpb25UaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJYXR0clRpbWU7CisJX19sZTMyCQkJY2hlY2twb2ludDsKKwlzdHJ1Y3QgbG9uZ19hZAkJZXh0ZW5kZWRBdHRySUNCOworCXN0cnVjdCByZWdpZAkJaW1wSWRlbnQ7CisJX19sZTY0CQkJdW5pcXVlSUQ7CisJX19sZTMyCQkJbGVuZ3RoRXh0ZW5kZWRBdHRyOworCV9fbGUzMgkJCWxlbmd0aEFsbG9jRGVzY3M7CisJdWludDhfdAkJCWV4dGVuZGVkQXR0clswXTsKKwl1aW50OF90CQkJYWxsb2NEZXNjc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBQZXJtaXNzaW9ucyAoRUNNQSAxNjdyMyA0LzE0LjkuNSkgKi8KQEAgLTYwNCw3ICs2MDQsNyBAQAogCiAvKiBFeHRlbmRlZCBBdHRyaWJ1dGUgSGVhZGVyIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xMC4xKSAqLwogc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTMyCQlpbXBBdHRyTG9jYXRpb247CiAJX19sZTMyCQlhcHBBdHRyTG9jYXRpb247CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCXVpbnQ4X3QJCXJlc2VydmVkWzNdOwogCV9fbGUzMgkJYXR0ckxlbmd0aDsKIAlfX2xlMzIJCWltcFVzZUxlbmd0aDsKLQlyZWdpZAkJaW1wSWRlbnQ7CisJc3RydWN0IHJlZ2lkCWltcElkZW50OwogCXVpbnQ4X3QJCWltcFVzZVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC02OTgsNyArNjk4LDcgQEAKIAl1aW50OF90CQlyZXNlcnZlZFszXTsKIAlfX2xlMzIJCWF0dHJMZW5ndGg7CiAJX19sZTMyCQlhcHBVc2VMZW5ndGg7Ci0JcmVnaWQJCWFwcElkZW50OworCXN0cnVjdCByZWdpZAlhcHBJZGVudDsKIAl1aW50OF90CQlhcHBVc2VbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNzEyLDE1ICs3MTIsMTUgQEAKIAogLyogVW5hbGxvY2F0ZWQgU3BhY2UgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC4xMSkgKi8KIHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCWljYlRhZzsKIAlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7CiAJdWludDhfdAkJYWxsb2NEZXNjc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBTcGFjZSBCaXRtYXAgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjEyKSAqLwogc3RydWN0IHNwYWNlQml0bWFwRGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCW51bU9mQml0czsKIAlfX2xlMzIJCW51bU9mQnl0ZXM7CiAJdWludDhfdAkJYml0bWFwWzBdOwpAQCAtNzI4LDEzICs3MjgsMTMgQEAKIAogLyogUGFydGl0aW9uIEludGVncml0eSBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjEzKSAqLwogc3RydWN0IHBhcnRpdGlvbkludGVncml0eUVudHJ5IHsKLQl0YWcJCWRlc2NUYWc7Ci0JaWNidGFnCQlpY2JUYWc7Ci0JdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOwotCXVpbnQ4X3QJCWludGVncml0eVR5cGU7Ci0JdWludDhfdAkJcmVzZXJ2ZWRbMTc1XTsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JdWludDhfdAkJaW1wVXNlWzI1Nl07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCQlpY2JUYWc7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwl1aW50OF90CQkJaW50ZWdyaXR5VHlwZTsKKwl1aW50OF90CQkJcmVzZXJ2ZWRbMTc1XTsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCXVpbnQ4X3QJCQlpbXBVc2VbMjU2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBTaG9ydCBBbGxvY2F0aW9uIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xNC4xKSAqLwpAQCAtNzY1LDMyICs3NjUsMzIgQEAKIAogLyogRmlsZSBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjE3KSAqLwogc3RydWN0IGV4dGVuZGVkRmlsZUVudHJ5IHsKLQl0YWcJCWRlc2NUYWc7Ci0JaWNidGFnCQlpY2JUYWc7Ci0JX19sZTMyCQl1aWQ7Ci0JX19sZTMyCQlnaWQ7Ci0JX19sZTMyCQlwZXJtaXNzaW9uczsKLQlfX2xlMTYJCWZpbGVMaW5rQ291bnQ7Ci0JdWludDhfdAkJcmVjb3JkRm9ybWF0OwotCXVpbnQ4X3QJCXJlY29yZERpc3BsYXlBdHRyOwotCV9fbGUzMgkJcmVjb3JkTGVuZ3RoOwotCV9fbGU2NAkJaW5mb3JtYXRpb25MZW5ndGg7Ci0JX19sZTY0CQlvYmplY3RTaXplOwotCV9fbGU2NAkJbG9naWNhbEJsb2Nrc1JlY29yZGVkOwotCXRpbWVzdGFtcAlhY2Nlc3NUaW1lOwotCXRpbWVzdGFtcAltb2RpZmljYXRpb25UaW1lOwotCXRpbWVzdGFtcAljcmVhdGVUaW1lOwotCXRpbWVzdGFtcAlhdHRyVGltZTsKLQlfX2xlMzIJCWNoZWNrcG9pbnQ7Ci0JX19sZTMyCQlyZXNlcnZlZDsKLQlsb25nX2FkCQlleHRlbmRlZEF0dHJJQ0I7Ci0JbG9uZ19hZAkJc3RyZWFtRGlyZWN0b3J5SUNCOwotCXJlZ2lkCQlpbXBJZGVudDsKLQlfX2xlNjQJCXVuaXF1ZUlEOwotCV9fbGUzMgkJbGVuZ3RoRXh0ZW5kZWRBdHRyOwotCV9fbGUzMgkJbGVuZ3RoQWxsb2NEZXNjczsKLQl1aW50OF90CQlleHRlbmRlZEF0dHJbMF07Ci0JdWludDhfdAkJYWxsb2NEZXNjc1swXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCXN0cnVjdCBpY2J0YWcJCWljYlRhZzsKKwlfX2xlMzIJCQl1aWQ7CisJX19sZTMyCQkJZ2lkOworCV9fbGUzMgkJCXBlcm1pc3Npb25zOworCV9fbGUxNgkJCWZpbGVMaW5rQ291bnQ7CisJdWludDhfdAkJCXJlY29yZEZvcm1hdDsKKwl1aW50OF90CQkJcmVjb3JkRGlzcGxheUF0dHI7CisJX19sZTMyCQkJcmVjb3JkTGVuZ3RoOworCV9fbGU2NAkJCWluZm9ybWF0aW9uTGVuZ3RoOworCV9fbGU2NAkJCW9iamVjdFNpemU7CisJX19sZTY0CQkJbG9naWNhbEJsb2Nrc1JlY29yZGVkOworCXN0cnVjdCB0aW1lc3RhbXAJYWNjZXNzVGltZTsKKwlzdHJ1Y3QgdGltZXN0YW1wCW1vZGlmaWNhdGlvblRpbWU7CisJc3RydWN0IHRpbWVzdGFtcAljcmVhdGVUaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJYXR0clRpbWU7CisJX19sZTMyCQkJY2hlY2twb2ludDsKKwlfX2xlMzIJCQlyZXNlcnZlZDsKKwlzdHJ1Y3QgbG9uZ19hZAkJZXh0ZW5kZWRBdHRySUNCOworCXN0cnVjdCBsb25nX2FkCQlzdHJlYW1EaXJlY3RvcnlJQ0I7CisJc3RydWN0IHJlZ2lkCQlpbXBJZGVudDsKKwlfX2xlNjQJCQl1bmlxdWVJRDsKKwlfX2xlMzIJCQlsZW5ndGhFeHRlbmRlZEF0dHI7CisJX19sZTMyCQkJbGVuZ3RoQWxsb2NEZXNjczsKKwl1aW50OF90CQkJZXh0ZW5kZWRBdHRyWzBdOworCXVpbnQ4X3QJCQlhbGxvY0Rlc2NzWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBfRUNNQV8xNjdfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lhbGxvYy5jIGIvZnMvdWRmL2lhbGxvYy5jCmluZGV4IDQ3ZGJlNTYuLmMxMGZhMzkgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pYWxsb2MuYworKysgYi9mcy91ZGYvaWFsbG9jLmMKQEAgLTQ5LDEyICs0OSwxMSBAQAogCQkJbGUzMl9hZGRfY3B1KCZsdmlkaXUtPm51bURpcnMsIC0xKTsKIAkJZWxzZQogCQkJbGUzMl9hZGRfY3B1KCZsdmlkaXUtPm51bUZpbGVzLCAtMSk7Ci0KLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOworCQl1ZGZfdXBkYXRlZF9sdmlkKHNiKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCi0JdWRmX2ZyZWVfYmxvY2tzKHNiLCBOVUxMLCBVREZfSShpbm9kZSktPmlfbG9jYXRpb24sIDAsIDEpOworCXVkZl9mcmVlX2Jsb2NrcyhzYiwgTlVMTCwgJlVERl9JKGlub2RlKS0+aV9sb2NhdGlvbiwgMCwgMSk7CiB9CiAKIHN0cnVjdCBpbm9kZSAqdWRmX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUsIGludCAqZXJyKQpAQCAtMTIyLDcgKzEyMSw3IEBACiAJCWlmICghKCsrdW5pcXVlSUQgJiAweDAwMDAwMDAwRkZGRkZGRkZVTCkpCiAJCQl1bmlxdWVJRCArPSAxNjsKIAkJbHZoZC0+dW5pcXVlSUQgPSBjcHVfdG9fbGU2NCh1bmlxdWVJRCk7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwkJdWRmX3VwZGF0ZWRfbHZpZChzYik7CiAJfQogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlpbm9kZS0+aV9tb2RlID0gbW9kZTsKQEAgLTEzOCw3ICsxMzcsNyBAQAogCWlpbmZvLT5pX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSA9IGJsb2NrOwogCWlpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9CiAJCQkJZGluZm8tPmlfbG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtOwotCWlub2RlLT5pX2lubyA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpaW5mby0+aV9sb2NhdGlvbiwgMCk7CisJaW5vZGUtPmlfaW5vID0gdWRmX2dldF9sYl9wYmxvY2soc2IsICZpaW5mby0+aV9sb2NhdGlvbiwgMCk7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpaW5mby0+aV9sZW5FQXR0ciA9IDA7CiAJaWluZm8tPmlfbGVuQWxsb2MgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCAzMGViZGU0Li5lNzUzM2Y3IDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtNTUsMTUgKzU1LDE1IEBACiBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9nZXRibGsoc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBpbnQgKiwKIAkJCQkJc2VjdG9yX3QgKiwgaW50ICopOwogc3RhdGljIGludDhfdCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24sCi0JCQkgICAgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOworCQkJICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCk7CiBzdGF0aWMgdm9pZCB1ZGZfc3BsaXRfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiwgaW50ICosIGludCwgaW50LAotCQkJICAgICAga2VybmVsX2xvbmdfYWRbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgKik7CisJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWRbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgKik7CiBzdGF0aWMgdm9pZCB1ZGZfcHJlYWxsb2NfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQsCi0JCQkJIGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOworCQkJCSBzdHJ1Y3Qga2VybmVsX2xvbmdfYWRbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgKik7CiBzdGF0aWMgdm9pZCB1ZGZfbWVyZ2VfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOworCQkJICAgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX3VwZGF0ZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqLAotCQkJICAgICAgIGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50LCBpbnQsCisJCQkgICAgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50LCBpbnQsCiAJCQkgICAgICAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqKTsKIHN0YXRpYyBpbnQgdWRmX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogCkBAIC0yMDAsNyArMjAwLDcgQEAKIHsKIAlpbnQgbmV3YmxvY2s7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkYmggPSBOVUxMOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAl1aW50OF90IGFsbG9jdHlwZTsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3M7CkBAIC0yODEsNyArMjgxLDcgQEAKIAllcG9zLmJoID0gTlVMTDsKIAllcG9zLmJsb2NrID0gaWluZm8tPmlfbG9jYXRpb247CiAJZXBvcy5vZmZzZXQgPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwotCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIGVsb2MsIGVsZW4sIDApOworCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCBlbGVuLCAwKTsKIAkvKiBVbmlxdWVJRCBzdHVmZiAqLwogCiAJYnJlbHNlKGVwb3MuYmgpOwpAQCAtMzU5LDEyICszNTksMTIgQEAKIAogLyogRXh0ZW5kIHRoZSBmaWxlIGJ5ICdibG9ja3MnIGJsb2NrcywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZXh0ZW50cyBhZGRlZCAqLwogaW50IHVkZl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpsYXN0X3BvcywKLQkJICAgIGtlcm5lbF9sb25nX2FkICpsYXN0X2V4dCwgc2VjdG9yX3QgYmxvY2tzKQorCQkgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkICpsYXN0X2V4dCwgc2VjdG9yX3QgYmxvY2tzKQogewogCXNlY3Rvcl90IGFkZDsKIAlpbnQgY291bnQgPSAwLCBmYWtlID0gIShsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9MRU5HVEhfTUFTSyk7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCWtlcm5lbF9sYl9hZGRyIHByZWFsbG9jX2xvYyA9IHt9OworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBwcmVhbGxvY19sb2MgPSB7fTsKIAlpbnQgcHJlYWxsb2NfbGVuID0gMDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCkBAIC00MTEsMTEgKzQxMSwxMSBAQAogCX0KIAogCWlmIChmYWtlKSB7Ci0JCXVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJdWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgJmxhc3RfZXh0LT5leHRMb2NhdGlvbiwKIAkJCSAgICAgbGFzdF9leHQtPmV4dExlbmd0aCwgMSk7CiAJCWNvdW50Kys7CiAJfSBlbHNlCi0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCiAJCQkJbGFzdF9leHQtPmV4dExlbmd0aCwgMSk7CiAKIAkvKiBNYW5hZ2VkIHRvIGRvIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5PyAqLwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJLyogQ3JlYXRlIGVub3VnaCBleHRlbnRzIHRvIGNvdmVyIHRoZSB3aG9sZSBob2xlICovCiAJd2hpbGUgKGJsb2NrcyA+IGFkZCkgewogCQlibG9ja3MgLT0gYWRkOwotCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgJmxhc3RfZXh0LT5leHRMb2NhdGlvbiwKIAkJCQkgbGFzdF9leHQtPmV4dExlbmd0aCwgMSkgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAJCWNvdW50Kys7CkBAIC00NDAsNyArNDQwLDcgQEAKIAlpZiAoYmxvY2tzKSB7CiAJCWxhc3RfZXh0LT5leHRMZW5ndGggPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfAogCQkJKGJsb2NrcyA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCisJCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCAmbGFzdF9leHQtPmV4dExvY2F0aW9uLAogCQkJCSBsYXN0X2V4dC0+ZXh0TGVuZ3RoLCAxKSA9PSAtMSkKIAkJCXJldHVybiAtMTsKIAkJY291bnQrKzsKQEAgLTQ0OSw3ICs0NDksNyBAQAogb3V0OgogCS8qIERvIHdlIGhhdmUgc29tZSBwcmVhbGxvY2F0ZWQgYmxvY2tzIHNhdmVkPyAqLwogCWlmIChwcmVhbGxvY19sZW4pIHsKLQkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsIHByZWFsbG9jX2xvYywKKwkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZwcmVhbGxvY19sb2MsCiAJCQkJIHByZWFsbG9jX2xlbiwgMSkgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAJCWxhc3RfZXh0LT5leHRMb2NhdGlvbiA9IHByZWFsbG9jX2xvYzsKQEAgLTQ1OSw5ICs0NTksOSBAQAogCiAJLyogbGFzdF9wb3Mgc2hvdWxkIHBvaW50IHRvIHRoZSBsYXN0IHdyaXR0ZW4gZXh0ZW50Li4uICovCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJbGFzdF9wb3MtPm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQlsYXN0X3Bvcy0+b2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlyZXR1cm4gLTE7CiAKQEAgLTQ3MywxMSArNDczLDExIEBACiB7CiAJc3RhdGljIHNlY3Rvcl90IGxhc3RfYmxvY2s7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZXN1bHQgPSBOVUxMOwotCWtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXTsKKwlzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gcHJldl9lcG9zLCBjdXJfZXBvcywgbmV4dF9lcG9zOwogCWludCBjb3VudCA9IDAsIHN0YXJ0bnVtID0gMCwgZW5kbnVtID0gMDsKIAl1aW50MzJfdCBlbGVuID0gMCwgdG1wZWxlbjsKLQlrZXJuZWxfbGJfYWRkciBlbG9jLCB0bXBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jLCB0bXBlbG9jOwogCWludCBjID0gMTsKIAlsb2ZmX3QgbGJjb3VudCA9IDAsIGJfb2ZmID0gMDsKIAl1aW50MzJfdCBuZXdibG9ja251bSwgbmV3YmxvY2s7CkBAIC01NTAsMTIgKzU1MCwxMiBAQAogCQkJZWxlbiA9IEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgfAogCQkJCSgoZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpICYKIAkJCQkgfihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSk7Ci0JCQlldHlwZSA9IHVkZl93cml0ZV9hZXh0KGlub2RlLCAmY3VyX2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQkJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmN1cl9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCX0KIAkJYnJlbHNlKHByZXZfZXBvcy5iaCk7CiAJCWJyZWxzZShjdXJfZXBvcy5iaCk7CiAJCWJyZWxzZShuZXh0X2Vwb3MuYmgpOwotCQluZXdibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQluZXdibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKIAkJKnBoeXMgPSBuZXdibG9jazsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNTcyLDcgKzU3Miw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBDcmVhdGUgYSBmYWtlIGV4dGVudCB3aGVuIHRoZXJlJ3Mgbm90IG9uZSAqLwogCQkJbWVtc2V0KCZsYWFyclswXS5leHRMb2NhdGlvbiwgMHgwMCwKLQkJCQlzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGtlcm5lbF9sYl9hZGRyKSk7CiAJCQlsYWFyclswXS5leHRMZW5ndGggPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQ7CiAJCQkvKiBXaWxsIHVkZl9leHRlbmRfZmlsZSgpIGNyZWF0ZSByZWFsIGV4dGVudCBmcm9tCiAJCQkgICBhIGZha2Ugb25lPyAqLwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCQlsYWFycltjXS5leHRMZW5ndGggPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfAogCQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAkJCW1lbXNldCgmbGFhcnJbY10uZXh0TG9jYXRpb24sIDB4MDAsCi0JCQkJc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCQkJY291bnQrKzsKIAkJCWVuZG51bSsrOwogCQl9CkBAIC02OTksNyArNjk5LDcgQEAKIAogc3RhdGljIHZvaWQgdWRmX3NwbGl0X2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpjLCBpbnQgb2Zmc2V0LAogCQkJICAgICAgaW50IG5ld2Jsb2NrbnVtLAotCQkJICAgICAga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAorCQkJICAgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKIAkJCSAgICAgIGludCAqZW5kbnVtKQogewogCXVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJCWlmIChvZmZzZXQpIHsKIAkJCWlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSB7CiAJCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwKLQkJCQkJCWxhYXJyW2N1cnJdLmV4dExvY2F0aW9uLAorCQkJCQkJJmxhYXJyW2N1cnJdLmV4dExvY2F0aW9uLAogCQkJCQkJMCwgb2Zmc2V0KTsKIAkJCQlsYWFycltjdXJyXS5leHRMZW5ndGggPQogCQkJCQlFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfApAQCAtNzYzLDcgKzc2Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9wcmVhbGxvY19leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjLCBpbnQgbGFzdGJsb2NrLAotCQkJCSBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCisJCQkJIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCiAJCQkJIGludCAqZW5kbnVtKQogewogCWludCBzdGFydCwgbGVuZ3RoID0gMCwgY3Vycmxlbmd0aCA9IDAsIGk7CkBAIC04MTcsNyArODE3LDcgQEAKIAkJCQkJIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAkJCWVsc2UgewogCQkJCW1lbW1vdmUoJmxhYXJyW2MgKyAyXSwgJmxhYXJyW2MgKyAxXSwKLQkJCQkJc2l6ZW9mKGxvbmdfYWQpICogKCplbmRudW0gLSAoYyArIDEpKSk7CisJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKiAoKmVuZG51bSAtIChjICsgMSkpKTsKIAkJCQkoKmVuZG51bSkrKzsKIAkJCQlsYWFycltjICsgMV0uZXh0TG9jYXRpb24ubG9naWNhbEJsb2NrTnVtID0gbmV4dDsKIAkJCQlsYWFycltjICsgMV0uZXh0TG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtID0KQEAgLTg0Niw3ICs4NDYsNyBAQAogCQkJCQlpZiAoKmVuZG51bSA+IChpICsgMSkpCiAJCQkJCQltZW1tb3ZlKCZsYWFycltpXSwKIAkJCQkJCQkmbGFhcnJbaSArIDFdLAotCQkJCQkJCXNpemVvZihsb25nX2FkKSAqCisJCQkJCQkJc2l6ZW9mKHN0cnVjdCBsb25nX2FkKSAqCiAJCQkJCQkJKCplbmRudW0gLSAoaSArIDEpKSk7CiAJCQkJCWktLTsKIAkJCQkJKCplbmRudW0pLS07CkBAIC04NTksNyArODU5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgdWRmX21lcmdlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCiAJCQkgICAgICBpbnQgKmVuZG51bSkKIHsKIAlpbnQgaTsKQEAgLTg2Nyw4ICs4NjcsOCBAQAogCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplX2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAogCWZvciAoaSA9IDA7IGkgPCAoKmVuZG51bSAtIDEpOyBpKyspIHsKLQkJa2VybmVsX2xvbmdfYWQgKmxpIC8qbFtpXSovID0gJmxhYXJyW2ldOwotCQlrZXJuZWxfbG9uZ19hZCAqbGlwMSAvKmxbaSBwbHVzIDFdKi8gPSAmbGFhcnJbaSArIDFdOworCQlzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgKmxpIC8qbFtpXSovID0gJmxhYXJyW2ldOworCQlzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgKmxpcDEgLypsW2kgcGx1cyAxXSovID0gJmxhYXJyW2kgKyAxXTsKIAogCQlpZiAoKChsaS0+ZXh0TGVuZ3RoID4+IDMwKSA9PSAobGlwMS0+ZXh0TGVuZ3RoID4+IDMwKSkgJiYKIAkJCSgoKGxpLT5leHRMZW5ndGggPj4gMzApID09CkBAIC05MDIsNyArOTAyLDcgQEAKIAkJCQkJIGJsb2Nrc2l6ZSAtIDEpICYgfihibG9ja3NpemUgLSAxKSk7CiAJCQkJaWYgKCplbmRudW0gPiAoaSArIDIpKQogCQkJCQltZW1tb3ZlKCZsYWFycltpICsgMV0sICZsYWFycltpICsgMl0sCi0JCQkJCQlzaXplb2YobG9uZ19hZCkgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCBsb25nX2FkKSAqCiAJCQkJCQkoKmVuZG51bSAtIChpICsgMikpKTsKIAkJCQlpLS07CiAJCQkJKCplbmRudW0pLS07CkBAIC05MTEsNyArOTExLDcgQEAKIAkJCQkoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSAmJgogCQkJICAgKChsaXAxLT5leHRMZW5ndGggPj4gMzApID09CiAJCQkJKEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCA+PiAzMCkpKSB7Ci0JCQl1ZGZfZnJlZV9ibG9ja3MoaW5vZGUtPmlfc2IsIGlub2RlLCBsaS0+ZXh0TG9jYXRpb24sIDAsCisJCQl1ZGZfZnJlZV9ibG9ja3MoaW5vZGUtPmlfc2IsIGlub2RlLCAmbGktPmV4dExvY2F0aW9uLCAwLAogCQkJCQkoKGxpLT5leHRMZW5ndGggJgogCQkJCQkgIFVERl9FWFRFTlRfTEVOR1RIX01BU0spICsKIAkJCQkJIGJsb2Nrc2l6ZSAtIDEpID4+IGJsb2Nrc2l6ZV9iaXRzKTsKQEAgLTkzNyw3ICs5MzcsNyBAQAogCQkJCQkgIGJsb2Nrc2l6ZSAtIDEpICYgfihibG9ja3NpemUgLSAxKSk7CiAJCQkJaWYgKCplbmRudW0gPiAoaSArIDIpKQogCQkJCQltZW1tb3ZlKCZsYWFycltpICsgMV0sICZsYWFycltpICsgMl0sCi0JCQkJCQlzaXplb2YobG9uZ19hZCkgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCBsb25nX2FkKSAqCiAJCQkJCQkoKmVuZG51bSAtIChpICsgMikpKTsKIAkJCQlpLS07CiAJCQkJKCplbmRudW0pLS07CkBAIC05NDUsNyArOTQ1LDcgQEAKIAkJfSBlbHNlIGlmICgobGktPmV4dExlbmd0aCA+PiAzMCkgPT0KIAkJCQkJKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewogCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwKLQkJCQkJbGktPmV4dExvY2F0aW9uLCAwLAorCQkJCQkmbGktPmV4dExvY2F0aW9uLCAwLAogCQkJCQkoKGxpLT5leHRMZW5ndGggJgogCQkJCQkJVURGX0VYVEVOVF9MRU5HVEhfTUFTSykgKwogCQkJCQkgYmxvY2tzaXplIC0gMSkgPj4gYmxvY2tzaXplX2JpdHMpOwpAQCAtOTU5LDEyICs5NTksMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgdWRmX3VwZGF0ZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAorCQkJICAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCiAJCQkgICAgICAgaW50IHN0YXJ0bnVtLCBpbnQgZW5kbnVtLAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MpCiB7CiAJaW50IHN0YXJ0ID0gMCwgaTsKLQlrZXJuZWxfbGJfYWRkciB0bXBsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRtcGxvYzsKIAl1aW50MzJfdCB0bXBsZW47CiAKIAlpZiAoc3RhcnRudW0gPiBlbmRudW0pIHsKQEAgLTk4Myw3ICs5ODMsNyBAQAogCiAJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmRudW07IGkrKykgewogCQl1ZGZfbmV4dF9hZXh0KGlub2RlLCBlcG9zLCAmdG1wbG9jLCAmdG1wbGVuLCAwKTsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGVwb3MsIGxhYXJyW2ldLmV4dExvY2F0aW9uLAorCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgZXBvcywgJmxhYXJyW2ldLmV4dExvY2F0aW9uLAogCQkJICAgICAgIGxhYXJyW2ldLmV4dExlbmd0aCwgMSk7CiAJfQogfQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAKIAkgKiAgICAgIGlfbmxpbmsgPSAxCiAJICogICAgICBpX29wID0gTlVMTDsKIAkgKi8KLQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsIGlpbmZvLT5pX2xvY2F0aW9uLCAwLCAmaWRlbnQpOworCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgJmlpbmZvLT5pX2xvY2F0aW9uLCAwLCAmaWRlbnQpOwogCWlmICghYmgpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9yZWFkX2lub2RlKGlubyAlbGQpIGZhaWxlZCAhYmhcbiIsCiAJCSAgICAgICBpbm9kZS0+aV9pbm8pOwpAQCAtMTA5OCwyNCArMTA5OCwyNCBAQAogCWlmIChmZS0+aWNiVGFnLnN0cmF0ZWd5VHlwZSA9PSBjcHVfdG9fbGUxNig0MDk2KSkgewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmliaDsKIAotCQlpYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKGlub2RlLT5pX3NiLCBpaW5mby0+aV9sb2NhdGlvbiwgMSwKKwkJaWJoID0gdWRmX3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgJmlpbmZvLT5pX2xvY2F0aW9uLCAxLAogCQkJCQkmaWRlbnQpOwogCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX0lFICYmIGliaCkgewogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpuYmggPSBOVUxMOwotCQkJa2VybmVsX2xiX2FkZHIgbG9jOworCQkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKIAkJCXN0cnVjdCBpbmRpcmVjdEVudHJ5ICppZTsKIAogCQkJaWUgPSAoc3RydWN0IGluZGlyZWN0RW50cnkgKilpYmgtPmJfZGF0YTsKIAkJCWxvYyA9IGxlbGJfdG9fY3B1KGllLT5pbmRpcmVjdElDQi5leHRMb2NhdGlvbik7CiAKIAkJCWlmIChpZS0+aW5kaXJlY3RJQ0IuZXh0TGVuZ3RoICYmCi0JCQkJKG5iaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsIGxvYywgMCwKKwkJCQkobmJoID0gdWRmX3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgJmxvYywgMCwKIAkJCQkJCQkmaWRlbnQpKSkgewogCQkJCWlmIChpZGVudCA9PSBUQUdfSURFTlRfRkUgfHwKIAkJCQkJaWRlbnQgPT0gVEFHX0lERU5UX0VGRSkgewogCQkJCQltZW1jcHkoJmlpbmZvLT5pX2xvY2F0aW9uLAogCQkJCQkJJmxvYywKLQkJCQkJCXNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCQkJCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCQkJCQlicmVsc2UoYmgpOwogCQkJCQlicmVsc2UoaWJoKTsKIAkJCQkJYnJlbHNlKG5iaCk7CkBAIC0xMjIyLDggKzEyMjIsMTUgQEAKIAlpbm9kZS0+aV9zaXplID0gbGU2NF90b19jcHUoZmUtPmluZm9ybWF0aW9uTGVuZ3RoKTsKIAlpaW5mby0+aV9sZW5FeHRlbnRzID0gaW5vZGUtPmlfc2l6ZTsKIAotCWlub2RlLT5pX21vZGUgPSB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhmZSk7Ci0JaW5vZGUtPmlfbW9kZSAmPSB+VURGX1NCKGlub2RlLT5pX3NiKS0+c191bWFzazsKKwlpZiAoZmUtPmljYlRhZy5maWxlVHlwZSAhPSBJQ0JUQUdfRklMRV9UWVBFX0RJUkVDVE9SWSAmJgorCQkJc2JpLT5zX2Ztb2RlICE9IFVERl9JTlZBTElEX01PREUpCisJCWlub2RlLT5pX21vZGUgPSBzYmktPnNfZm1vZGU7CisJZWxzZSBpZiAoZmUtPmljYlRhZy5maWxlVHlwZSA9PSBJQ0JUQUdfRklMRV9UWVBFX0RJUkVDVE9SWSAmJgorCQkJc2JpLT5zX2Rtb2RlICE9IFVERl9JTlZBTElEX01PREUpCisJCWlub2RlLT5pX21vZGUgPSBzYmktPnNfZG1vZGU7CisJZWxzZQorCQlpbm9kZS0+aV9tb2RlID0gdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoZmUpOworCWlub2RlLT5pX21vZGUgJj0gfnNiaS0+c191bWFzazsKIAogCWlmIChpaW5mby0+aV9lZmUgPT0gMCkgewogCQlpbm9kZS0+aV9ibG9ja3MgPSBsZTY0X3RvX2NwdShmZS0+bG9naWNhbEJsb2Nrc1JlY29yZGVkKSA8PApAQCAtMTM5Niw3ICsxNDAzLDcgQEAKIAogCWJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLAogCQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsCi0JCQkJCSAgaWluZm8tPmlfbG9jYXRpb24sIDApKTsKKwkJCQkJICAmaWluZm8tPmlfbG9jYXRpb24sIDApKTsKIAlpZiAoIWJoKSB7CiAJCXVkZl9kZWJ1ZygiYnJlYWQgZmFpbHVyZVxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMTQxNiwxMyArMTQyMywxMyBAQAogCQkgICAgICAgaWluZm8tPmlfZXh0LmlfZGF0YSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KIAkJCQkJc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSkpOwogCQljcmNsZW4gPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KSArCi0JCQkJaWluZm8tPmlfbGVuQWxsb2MgLSBzaXplb2YodGFnKTsKKwkJCQlpaW5mby0+aV9sZW5BbGxvYyAtIHNpemVvZihzdHJ1Y3QgdGFnKTsKIAkJdXNlLT5kZXNjVGFnLnRhZ0xvY2F0aW9uID0gY3B1X3RvX2xlMzIoCiAJCQkJCQlpaW5mby0+aV9sb2NhdGlvbi4KIAkJCQkJCQlsb2dpY2FsQmxvY2tOdW0pOwogCQl1c2UtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7CiAJCXVzZS0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIChjaGFyICopdXNlICsKLQkJCQkJCQkgICBzaXplb2YodGFnKSwKKwkJCQkJCQkgICBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJCQkJICAgY3JjbGVuKSk7CiAJCXVzZS0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJnVzZS0+ZGVzY1RhZyk7CiAKQEAgLTE0NTksMjMgKzE0NjYsMjMgQEAKIAlmZS0+aW5mb3JtYXRpb25MZW5ndGggPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9zaXplKTsKIAogCWlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKLQkJcmVnaWQgKmVpZDsKKwkJc3RydWN0IHJlZ2lkICplaWQ7CiAJCXN0cnVjdCBkZXZpY2VTcGVjICpkc2VhID0KIAkJCShzdHJ1Y3QgZGV2aWNlU3BlYyAqKXVkZl9nZXRfZXh0ZW5kZWRhdHRyKGlub2RlLCAxMiwgMSk7CiAJCWlmICghZHNlYSkgewogCQkJZHNlYSA9IChzdHJ1Y3QgZGV2aWNlU3BlYyAqKQogCQkJCXVkZl9hZGRfZXh0ZW5kZWRhdHRyKGlub2RlLAogCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGRldmljZVNwZWMpICsKLQkJCQkJCSAgICAgc2l6ZW9mKHJlZ2lkKSwgMTIsIDB4Myk7CisJCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcmVnaWQpLCAxMiwgMHgzKTsKIAkJCWRzZWEtPmF0dHJUeXBlID0gY3B1X3RvX2xlMzIoMTIpOwogCQkJZHNlYS0+YXR0clN1YnR5cGUgPSAxOwogCQkJZHNlYS0+YXR0ckxlbmd0aCA9IGNwdV90b19sZTMyKAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArCi0JCQkJCQlzaXplb2YocmVnaWQpKTsKLQkJCWRzZWEtPmltcFVzZUxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihyZWdpZCkpOworCQkJCQkJc2l6ZW9mKHN0cnVjdCByZWdpZCkpOworCQkJZHNlYS0+aW1wVXNlTGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCByZWdpZCkpOwogCQl9Ci0JCWVpZCA9IChyZWdpZCAqKWRzZWEtPmltcFVzZTsKLQkJbWVtc2V0KGVpZCwgMCwgc2l6ZW9mKHJlZ2lkKSk7CisJCWVpZCA9IChzdHJ1Y3QgcmVnaWQgKilkc2VhLT5pbXBVc2U7CisJCW1lbXNldChlaWQsIDAsIHNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKIAkJc3RyY3B5KGVpZC0+aWRlbnQsIFVERl9JRF9ERVZFTE9QRVIpOwogCQllaWQtPmlkZW50U3VmZml4WzBdID0gVURGX09TX0NMQVNTX1VOSVg7CiAJCWVpZC0+aWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7CkBAIC0xNDk0LDcgKzE1MDEsNyBAQAogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZmZS0+YWNjZXNzVGltZSwgaW5vZGUtPmlfYXRpbWUpOwogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZmZS0+bW9kaWZpY2F0aW9uVGltZSwgaW5vZGUtPmlfbXRpbWUpOwogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZmZS0+YXR0clRpbWUsIGlub2RlLT5pX2N0aW1lKTsKLQkJbWVtc2V0KCYoZmUtPmltcElkZW50KSwgMCwgc2l6ZW9mKHJlZ2lkKSk7CisJCW1lbXNldCgmKGZlLT5pbXBJZGVudCksIDAsIHNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKIAkJc3RyY3B5KGZlLT5pbXBJZGVudC5pZGVudCwgVURGX0lEX0RFVkVMT1BFUik7CiAJCWZlLT5pbXBJZGVudC5pZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYOwogCQlmZS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7CkBAIC0xNTMzLDcgKzE1NDAsNyBAQAogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZlZmUtPmNyZWF0ZVRpbWUsIGlpbmZvLT5pX2NydGltZSk7CiAJCXVkZl90aW1lX3RvX2Rpc2tfc3RhbXAoJmVmZS0+YXR0clRpbWUsIGlub2RlLT5pX2N0aW1lKTsKIAotCQltZW1zZXQoJihlZmUtPmltcElkZW50KSwgMCwgc2l6ZW9mKHJlZ2lkKSk7CisJCW1lbXNldCgmKGVmZS0+aW1wSWRlbnQpLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lkKSk7CiAJCXN0cmNweShlZmUtPmltcElkZW50LmlkZW50LCBVREZfSURfREVWRUxPUEVSKTsKIAkJZWZlLT5pbXBJZGVudC5pZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYOwogCQllZmUtPmltcElkZW50LmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTU4NCw5ICsxNTkxLDkgQEAKIAlmZS0+ZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKAogCQkJCQlpaW5mby0+aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pOwogCWNyY2xlbiArPSBpaW5mby0+aV9sZW5FQXR0ciArIGlpbmZvLT5pX2xlbkFsbG9jIC0KLQkJCQkJCQkJc2l6ZW9mKHRhZyk7CisJCQkJCQkJCXNpemVvZihzdHJ1Y3QgdGFnKTsKIAlmZS0+ZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTsKLQlmZS0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIChjaGFyICopZmUgKyBzaXplb2YodGFnKSwKKwlmZS0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIChjaGFyICopZmUgKyBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJCQkgIGNyY2xlbikpOwogCWZlLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmZmUtPmRlc2NUYWcpOwogCkBAIC0xNjA2LDcgKzE2MTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwga2VybmVsX2xiX2FkZHIgaW5vKQorc3RydWN0IGlub2RlICp1ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlubykKIHsKIAl1bnNpZ25lZCBsb25nIGJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soc2IsIGlubywgMCk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBibG9jayk7CkBAIC0xNjE1LDcgKzE2MjIsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7Ci0JCW1lbWNweSgmVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uLCAmaW5vLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJbWVtY3B5KCZVREZfSShpbm9kZSktPmlfbG9jYXRpb24sIGlubywgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCQlfX3VkZl9yZWFkX2lub2RlKGlub2RlKTsKIAkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJfQpAQCAtMTYyMywxMCArMTYzMCwxMCBAQAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG91dF9pcHV0OwogCi0JaWYgKGluby5sb2dpY2FsQmxvY2tOdW0gPj0gVURGX1NCKHNiKS0+Ci0JCQlzX3BhcnRtYXBzW2luby5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLnNfcGFydGl0aW9uX2xlbikgeworCWlmIChpbm8tPmxvZ2ljYWxCbG9ja051bSA+PSBVREZfU0Ioc2IpLT4KKwkJCXNfcGFydG1hcHNbaW5vLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dLnNfcGFydGl0aW9uX2xlbikgewogCQl1ZGZfZGVidWcoImJsb2NrPSVkLCBwYXJ0aXRpb249JWQgb3V0IG9mIHJhbmdlXG4iLAotCQkJICBpbm8ubG9naWNhbEJsb2NrTnVtLCBpbm8ucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKKwkJCSAgaW5vLT5sb2dpY2FsQmxvY2tOdW0sIGluby0+cGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKIAkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQlnb3RvIG91dF9pcHV0OwogCX0KQEAgLTE2MzksMTEgKzE2NDYsMTEgQEAKIH0KIAogaW50OF90IHVkZl9hZGRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkgICAga2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbiwgaW50IGluYykKKwkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgZWxlbiwgaW50IGluYykKIHsKIAlpbnQgYWRzaXplOwotCXNob3J0X2FkICpzYWQgPSBOVUxMOwotCWxvbmdfYWQgKmxhZCA9IE5VTEw7CisJc3RydWN0IHNob3J0X2FkICpzYWQgPSBOVUxMOworCXN0cnVjdCBsb25nX2FkICpsYWQgPSBOVUxMOwogCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZDsKIAlpbnQ4X3QgZXR5cGU7CiAJdWludDhfdCAqcHRyOwpAQCAtMTY1Nyw5ICsxNjY0LDkgQEAKIAkJcHRyID0gZXBvcy0+YmgtPmJfZGF0YSArIGVwb3MtPm9mZnNldDsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCXJldHVybiAtMTsKIApAQCAtMTY2Nyw3ICsxNjc0LDcgQEAKIAkJY2hhciAqc3B0ciwgKmRwdHI7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmJoOwogCQlpbnQgZXJyLCBsb2Zmc2V0OwotCQlrZXJuZWxfbGJfYWRkciBvYmxvYyA9IGVwb3MtPmJsb2NrOworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgb2Jsb2MgPSBlcG9zLT5ibG9jazsKIAogCQllcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0gPSB1ZGZfbmV3X2Jsb2NrKGlub2RlLT5pX3NiLCBOVUxMLAogCQkJCQkJb2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtLApAQCAtMTY3NSw3ICsxNjgyLDcgQEAKIAkJaWYgKCFlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0pCiAJCQlyZXR1cm4gLTE7CiAJCW5iaCA9IHVkZl90Z2V0YmxrKGlub2RlLT5pX3NiLCB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwKLQkJCQkJCQkJIGVwb3MtPmJsb2NrLAorCQkJCQkJCQkgJmVwb3MtPmJsb2NrLAogCQkJCQkJCQkgMCkpOwogCQlpZiAoIW5iaCkKIAkJCXJldHVybiAtMTsKQEAgLTE3MTIsMjAgKzE3MTksMjAgQEAKIAkJfQogCQlpZiAoVURGX1NCKGlub2RlLT5pX3NiKS0+c191ZGZyZXYgPj0gMHgwMjAwKQogCQkJdWRmX25ld190YWcobmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsIDMsIDEsCi0JCQkJICAgIGVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHRhZykpOworCQkJCSAgICBlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAJCWVsc2UKIAkJCXVkZl9uZXdfdGFnKG5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELCAyLCAxLAotCQkJCSAgICBlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKKwkJCQkgICAgZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2Yoc3RydWN0IHRhZykpOwogCQlzd2l0Y2ggKGlpbmZvLT5pX2FsbG9jX3R5cGUpIHsKIAkJY2FzZSBJQ0JUQUdfRkxBR19BRF9TSE9SVDoKLQkJCXNhZCA9IChzaG9ydF9hZCAqKXNwdHI7CisJCQlzYWQgPSAoc3RydWN0IHNob3J0X2FkICopc3B0cjsKIAkJCXNhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyB8CiAJCQkJCQkgICAgIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAJCQlzYWQtPmV4dFBvc2l0aW9uID0KIAkJCQljcHVfdG9fbGUzMihlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0pOwogCQkJYnJlYWs7CiAJCWNhc2UgSUNCVEFHX0ZMQUdfQURfTE9ORzoKLQkJCWxhZCA9IChsb25nX2FkICopc3B0cjsKKwkJCWxhZCA9IChzdHJ1Y3QgbG9uZ19hZCAqKXNwdHI7CiAJCQlsYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQkJICAgICBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCQkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKGVwb3MtPmJsb2NrKTsKQEAgLTE3NjksMTIgKzE3NzYsMTIgQEAKIH0KIAogaW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCSAgICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCisJCSAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgZWxlbiwgaW50IGluYykKIHsKIAlpbnQgYWRzaXplOwogCXVpbnQ4X3QgKnB0cjsKLQlzaG9ydF9hZCAqc2FkOwotCWxvbmdfYWQgKmxhZDsKKwlzdHJ1Y3Qgc2hvcnRfYWQgKnNhZDsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGFkOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7CiAKIAlpZiAoIWVwb3MtPmJoKQpAQCAtMTc4NiwxNyArMTc5MywxNyBAQAogCiAJc3dpdGNoIChpaW5mby0+aV9hbGxvY190eXBlKSB7CiAJY2FzZSBJQ0JUQUdfRkxBR19BRF9TSE9SVDoKLQkJc2FkID0gKHNob3J0X2FkICopcHRyOworCQlzYWQgPSAoc3RydWN0IHNob3J0X2FkICopcHRyOwogCQlzYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKGVsZW4pOwotCQlzYWQtPmV4dFBvc2l0aW9uID0gY3B1X3RvX2xlMzIoZWxvYy5sb2dpY2FsQmxvY2tOdW0pOwotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlzYWQtPmV4dFBvc2l0aW9uID0gY3B1X3RvX2xlMzIoZWxvYy0+bG9naWNhbEJsb2NrTnVtKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCWJyZWFrOwogCWNhc2UgSUNCVEFHX0ZMQUdfQURfTE9ORzoKLQkJbGFkID0gKGxvbmdfYWQgKilwdHI7CisJCWxhZCA9IChzdHJ1Y3QgbG9uZ19hZCAqKXB0cjsKIAkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihlbGVuKTsKLQkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKGVsb2MpOworCQlsYWQtPmV4dExvY2F0aW9uID0gY3B1X3RvX2xlbGIoKmVsb2MpOwogCQltZW1zZXQobGFkLT5pbXBVc2UsIDB4MDAsIHNpemVvZihsYWQtPmltcFVzZSkpOwotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKQEAgLTE4MjMsNyArMTgzMCw3IEBACiB9CiAKIGludDhfdCB1ZGZfbmV4dF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCSAgICAga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQorCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCiB7CiAJaW50OF90IGV0eXBlOwogCkBAIC0xODMzLDcgKzE4NDAsNyBAQAogCQllcG9zLT5ibG9jayA9ICplbG9jOwogCQllcG9zLT5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAJCWJyZWxzZShlcG9zLT5iaCk7Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsIGVwb3MtPmJsb2NrLCAwKTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgJmVwb3MtPmJsb2NrLCAwKTsKIAkJZXBvcy0+YmggPSB1ZGZfdHJlYWQoaW5vZGUtPmlfc2IsIGJsb2NrKTsKIAkJaWYgKCFlcG9zLT5iaCkgewogCQkJdWRmX2RlYnVnKCJyZWFkaW5nIGJsb2NrICVkIGZhaWxlZCFcbiIsIGJsb2NrKTsKQEAgLTE4NDUsMTMgKzE4NTIsMTMgQEAKIH0KIAogaW50OF90IHVkZl9jdXJyZW50X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKLQkJCWtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwgaW50IGluYykKKwkJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFsZW47CiAJaW50OF90IGV0eXBlOwogCXVpbnQ4X3QgKnB0cjsKLQlzaG9ydF9hZCAqc2FkOwotCWxvbmdfYWQgKmxhZDsKKwlzdHJ1Y3Qgc2hvcnRfYWQgKnNhZDsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGFkOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7CiAKIAlpZiAoIWVwb3MtPmJoKSB7CkBAIC0xOTAwLDkgKzE5MDcsOSBAQAogfQogCiBzdGF0aWMgaW50OF90IHVkZl9pbnNlcnRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MsCi0JCQkgICAgICBrZXJuZWxfbGJfYWRkciBuZWxvYywgdWludDMyX3QgbmVsZW4pCisJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbmVsb2MsIHVpbnQzMl90IG5lbGVuKQogewotCWtlcm5lbF9sYl9hZGRyIG9lbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBvZWxvYzsKIAl1aW50MzJfdCBvZWxlbjsKIAlpbnQ4X3QgZXR5cGU7CiAKQEAgLTE5MTAsMTggKzE5MTcsMTggQEAKIAkJZ2V0X2JoKGVwb3MuYmgpOwogCiAJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmb2Vsb2MsICZvZWxlbiwgMCkpICE9IC0xKSB7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgbmVsb2MsIG5lbGVuLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZlcG9zLCAmbmVsb2MsIG5lbGVuLCAxKTsKIAkJbmVsb2MgPSBvZWxvYzsKIAkJbmVsZW4gPSAoZXR5cGUgPDwgMzApIHwgb2VsZW47CiAJfQotCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMSk7CisJdWRmX2FkZF9hZXh0KGlub2RlLCAmZXBvcywgJm5lbG9jLCBuZWxlbiwgMSk7CiAJYnJlbHNlKGVwb3MuYmgpOwogCiAJcmV0dXJuIChuZWxlbiA+PiAzMCk7CiB9CiAKIGludDhfdCB1ZGZfZGVsZXRlX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLAotCQkgICAgICAga2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbikKKwkJICAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuKQogewogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gb2Vwb3M7CiAJaW50IGFkc2l6ZTsKQEAgLTE5MzYsOSArMTk0Myw5IEBACiAKIAlpaW5mbyA9IFVERl9JKGlub2RlKTsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlhZHNpemUgPSAwOwogCkBAIC0xOTQ3LDcgKzE5NTQsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAl3aGlsZSAoKGV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkpICE9IC0xKSB7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgJmVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCAxKTsKIAkJaWYgKG9lcG9zLmJoICE9IGVwb3MuYmgpIHsKIAkJCW9lcG9zLmJsb2NrID0gZXBvcy5ibG9jazsKIAkJCWJyZWxzZShvZXBvcy5iaCk7CkBAIC0xOTU2LDEzICsxOTYzLDEzIEBACiAJCQlvZXBvcy5vZmZzZXQgPSBlcG9zLm9mZnNldCAtIGFkc2l6ZTsKIAkJfQogCX0KLQltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCW1lbXNldCgmZWxvYywgMHgwMCwgc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCWVsZW4gPSAwOwogCiAJaWYgKGVwb3MuYmggIT0gb2Vwb3MuYmgpIHsKLQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgZXBvcy5ibG9jaywgMCwgMSk7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOwotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgJmVwb3MuYmxvY2ssIDAsIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsICZlbG9jLCBlbGVuLCAxKTsKIAkJaWYgKCFvZXBvcy5iaCkgewogCQkJaWluZm8tPmlfbGVuQWxsb2MgLT0gKGFkc2l6ZSAqIDIpOwogCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CkBAIC0xOTc5LDcgKzE5ODYsNyBAQAogCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUob2Vwb3MuYmgsIGlub2RlKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCWlmICghb2Vwb3MuYmgpIHsKIAkJCWlpbmZvLT5pX2xlbkFsbG9jIC09IGFkc2l6ZTsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMjAwNCw3ICsyMDExLDcgQEAKIH0KIAogaW50OF90IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCi0JCSAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBrZXJuZWxfbGJfYWRkciAqZWxvYywKKwkJICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywKIAkJICB1aW50MzJfdCAqZWxlbiwgc2VjdG9yX3QgKm9mZnNldCkKIHsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CkBAIC0yMDM2LDcgKzIwNDMsNyBAQAogCiBsb25nIHVkZl9ibG9ja19tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2spCiB7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXNlY3Rvcl90IG9mZnNldDsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKQEAgLTIwNDYsNyArMjA1Myw3IEBACiAKIAlpZiAoaW5vZGVfYm1hcChpbm9kZSwgYmxvY2ssICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpID09CiAJCQkJCQkoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCi0JCXJldCA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlyZXQgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJZWxzZQogCQlyZXQgPSAwOwogCmRpZmYgLS1naXQgYS9mcy91ZGYvbWlzYy5jIGIvZnMvdWRmL21pc2MuYwppbmRleCA4NGJmMGZkLi45MjE1NzAwIDEwMDY0NAotLS0gYS9mcy91ZGYvbWlzYy5jCisrKyBiL2ZzL3VkZi9taXNjLmMKQEAgLTEzNCwxMCArMTM0LDEwIEBACiAJCQl9CiAJCX0KIAkJLyogcmV3cml0ZSBDUkMgKyBjaGVja3N1bSBvZiBlYWhkICovCi0JCWNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYykgLSBzaXplb2YodGFnKTsKKwkJY3JjbGVuID0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjKSAtIHNpemVvZihzdHJ1Y3QgdGFnKTsKIAkJZWFoZC0+ZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoID0gY3B1X3RvX2xlMTYoY3JjbGVuKTsKIAkJZWFoZC0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIChjaGFyICopZWFoZCArCi0JCQkJCQlzaXplb2YodGFnKSwgY3JjbGVuKSk7CisJCQkJCQlzaXplb2Yoc3RydWN0IHRhZyksIGNyY2xlbikpOwogCQllYWhkLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmZWFoZC0+ZGVzY1RhZyk7CiAJCWlpbmZvLT5pX2xlbkVBdHRyICs9IHNpemU7CiAJCXJldHVybiAoc3RydWN0IGdlbmVyaWNGb3JtYXQgKikmZWFbb2Zmc2V0XTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF90YWdnZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDMyX3QgYmxvY2ssCiAJCQkJICAgIHVpbnQzMl90IGxvY2F0aW9uLCB1aW50MTZfdCAqaWRlbnQpCiB7Ci0JdGFnICp0YWdfcDsKKwlzdHJ1Y3QgdGFnICp0YWdfcDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAogCS8qIFJlYWQgdGhlIGJsb2NrICovCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JdGFnX3AgPSAodGFnICopKGJoLT5iX2RhdGEpOworCXRhZ19wID0gKHN0cnVjdCB0YWcgKikoYmgtPmJfZGF0YSk7CiAKIAkqaWRlbnQgPSBsZTE2X3RvX2NwdSh0YWdfcC0+dGFnSWRlbnQpOwogCkBAIC0yNDEsOSArMjQxLDkgQEAKIAl9CiAKIAkvKiBWZXJpZnkgdGhlIGRlc2NyaXB0b3IgQ1JDICovCi0JaWYgKGxlMTZfdG9fY3B1KHRhZ19wLT5kZXNjQ1JDTGVuZ3RoKSArIHNpemVvZih0YWcpID4gc2ItPnNfYmxvY2tzaXplIHx8CisJaWYgKGxlMTZfdG9fY3B1KHRhZ19wLT5kZXNjQ1JDTGVuZ3RoKSArIHNpemVvZihzdHJ1Y3QgdGFnKSA+IHNiLT5zX2Jsb2Nrc2l6ZSB8fAogCSAgICBsZTE2X3RvX2NwdSh0YWdfcC0+ZGVzY0NSQykgPT0gY3JjX2l0dV90KDAsCi0JCQkJCWJoLT5iX2RhdGEgKyBzaXplb2YodGFnKSwKKwkJCQkJYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgdGFnKSwKIAkJCQkJbGUxNl90b19jcHUodGFnX3AtPmRlc2NDUkNMZW5ndGgpKSkKIAkJcmV0dXJuIGJoOwogCkBAIC0yNTUsMjcgKzI1NSwyOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9yZWFkX3B0YWdnZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwga2VybmVsX2xiX2FkZHIgbG9jLAorc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF9wdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmxvYywKIAkJCQkgICAgIHVpbnQzMl90IG9mZnNldCwgdWludDE2X3QgKmlkZW50KQogewogCXJldHVybiB1ZGZfcmVhZF90YWdnZWQoc2IsIHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBsb2MsIG9mZnNldCksCi0JCQkgICAgICAgbG9jLmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCwgaWRlbnQpOworCQkJICAgICAgIGxvYy0+bG9naWNhbEJsb2NrTnVtICsgb2Zmc2V0LCBpZGVudCk7CiB9CiAKIHZvaWQgdWRmX3VwZGF0ZV90YWcoY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKIHsKLQl0YWcgKnRwdHIgPSAodGFnICopZGF0YTsKLQlsZW5ndGggLT0gc2l6ZW9mKHRhZyk7CisJc3RydWN0IHRhZyAqdHB0ciA9IChzdHJ1Y3QgdGFnICopZGF0YTsKKwlsZW5ndGggLT0gc2l6ZW9mKHN0cnVjdCB0YWcpOwogCiAJdHB0ci0+ZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGxlbmd0aCk7Ci0JdHB0ci0+ZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCBkYXRhICsgc2l6ZW9mKHRhZyksIGxlbmd0aCkpOworCXRwdHItPmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgZGF0YSArIHNpemVvZihzdHJ1Y3QgdGFnKSwgbGVuZ3RoKSk7CiAJdHB0ci0+dGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKHRwdHIpOwogfQogCiB2b2lkIHVkZl9uZXdfdGFnKGNoYXIgKmRhdGEsIHVpbnQxNl90IGlkZW50LCB1aW50MTZfdCB2ZXJzaW9uLCB1aW50MTZfdCBzbnVtLAogCQkgdWludDMyX3QgbG9jLCBpbnQgbGVuZ3RoKQogewotCXRhZyAqdHB0ciA9ICh0YWcgKilkYXRhOworCXN0cnVjdCB0YWcgKnRwdHIgPSAoc3RydWN0IHRhZyAqKWRhdGE7CiAJdHB0ci0+dGFnSWRlbnQgPSBjcHVfdG9fbGUxNihpZGVudCk7CiAJdHB0ci0+ZGVzY1ZlcnNpb24gPSBjcHVfdG9fbGUxNih2ZXJzaW9uKTsKIAl0cHRyLT50YWdTZXJpYWxOdW0gPSBjcHVfdG9fbGUxNihzbnVtKTsKQEAgLTI4MywxMiArMjg0LDEyIEBACiAJdWRmX3VwZGF0ZV90YWcoZGF0YSwgbGVuZ3RoKTsKIH0KIAotdTggdWRmX3RhZ19jaGVja3N1bShjb25zdCB0YWcgKnQpCit1OCB1ZGZfdGFnX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB0YWcgKnQpCiB7CiAJdTggKmRhdGEgPSAodTggKil0OwogCXU4IGNoZWNrc3VtID0gMDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRhZyk7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0YWcpOyArK2kpCiAJCWlmIChpICE9IDQpIC8qIHBvc2l0aW9uIG9mIGNoZWNrc3VtICovCiAJCQljaGVja3N1bSArPSBkYXRhW2ldOwogCXJldHVybiBjaGVja3N1bTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9uYW1laS5jIGIvZnMvdWRmL25hbWVpLmMKaW5kZXggZjg0YmZhYS4uNmEyOWZhMyAxMDA2NDQKLS0tIGEvZnMvdWRmL25hbWVpLmMKKysrIGIvZnMvdWRmL25hbWVpLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkJIHN0cnVjdCBmaWxlSWRlbnREZXNjICpzZmksIHN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICpmaWJoLAogCQkgdWludDhfdCAqaW1wdXNlLCB1aW50OF90ICpmaWxlaWRlbnQpCiB7Ci0JdWludDE2X3QgY3JjbGVuID0gZmliaC0+ZW9mZnNldCAtIGZpYmgtPnNvZmZzZXQgLSBzaXplb2YodGFnKTsKKwl1aW50MTZfdCBjcmNsZW4gPSBmaWJoLT5lb2Zmc2V0IC0gZmliaC0+c29mZnNldCAtIHNpemVvZihzdHJ1Y3QgdGFnKTsKIAl1aW50MTZfdCBjcmM7CiAJaW50IG9mZnNldDsKIAl1aW50MTZfdCBsaXUgPSBsZTE2X3RvX2NwdShjZmktPmxlbmd0aE9mSW1wVXNlKTsKQEAgLTk5LDE4ICs5OSwxOCBAQAogCQltZW1zZXQoZmliaC0+ZWJoLT5iX2RhdGEsIDB4MDAsIHBhZGxlbiArIG9mZnNldCk7CiAJfQogCi0JY3JjID0gY3JjX2l0dV90KDAsICh1aW50OF90ICopY2ZpICsgc2l6ZW9mKHRhZyksCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykgLSBzaXplb2YodGFnKSk7CisJY3JjID0gY3JjX2l0dV90KDAsICh1aW50OF90ICopY2ZpICsgc2l6ZW9mKHN0cnVjdCB0YWcpLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpIC0gc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAogCWlmIChmaWJoLT5zYmggPT0gZmliaC0+ZWJoKSB7CiAJCWNyYyA9IGNyY19pdHVfdChjcmMsICh1aW50OF90ICopc2ZpLT5pbXBVc2UsCi0JCQkgICAgICBjcmNsZW4gKyBzaXplb2YodGFnKSAtCisJCQkgICAgICBjcmNsZW4gKyBzaXplb2Yoc3RydWN0IHRhZykgLQogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSk7CiAJfSBlbHNlIGlmIChzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpID49IC1maWJoLT5zb2Zmc2V0KSB7CiAJCWNyYyA9IGNyY19pdHVfdChjcmMsIGZpYmgtPmViaC0+Yl9kYXRhICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSArCiAJCQkJCWZpYmgtPnNvZmZzZXQsCi0JCQkgICAgICBjcmNsZW4gKyBzaXplb2YodGFnKSAtCisJCQkgICAgICBjcmNsZW4gKyBzaXplb2Yoc3RydWN0IHRhZykgLQogCQkJCQlzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpKTsKIAl9IGVsc2UgewogCQljcmMgPSBjcmNfaXR1X3QoY3JjLCAodWludDhfdCAqKXNmaS0+aW1wVXNlLApAQCAtMTU0LDcgKzE1NCw3IEBACiAJdWludDhfdCBsZmk7CiAJdWludDE2X3QgbGl1OwogCWxvZmZfdCBzaXplOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogCQlpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywgJmVwb3MsCiAJCSAgICAmZWxvYywgJmVsZW4sICZvZmZzZXQpICE9IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKIAkJCWdvdG8gb3V0X2VycjsKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKIAkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJfSBlbHNlCiAJCQlvZmZzZXQgPSAwOwogCkBAIC0yNjgsNyArMjY4LDcgQEAKICNpZmRlZiBVREZfUkVDT1ZFUlkKIAkvKiB0ZW1wb3Jhcnkgc2hvcnRoYW5kIGZvciBzcGVjaWZ5aW5nIGZpbGVzIGJ5IGlub2RlIG51bWJlciAqLwogCWlmICghc3RybmNtcChkZW50cnktPmRfbmFtZS5uYW1lLCAiLkI9IiwgMykpIHsKLQkJa2VybmVsX2xiX2FkZHIgbGIgPSB7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsYiA9IHsKIAkJCS5sb2dpY2FsQmxvY2tOdW0gPSAwLAogCQkJLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9CiAJCQkJc2ltcGxlX3N0cnRvdWwoZGVudHJ5LT5kX25hbWUubmFtZSArIDMsCkBAIC0yODMsMTEgKzI4MywxNCBAQAogI2VuZGlmIC8qIFVERl9SRUNPVkVSWSAqLwogCiAJaWYgKHVkZl9maW5kX2VudHJ5KGRpciwgJmRlbnRyeS0+ZF9uYW1lLCAmZmliaCwgJmNmaSkpIHsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKKwogCQlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgpCiAJCQlicmVsc2UoZmliaC5lYmgpOwogCQlicmVsc2UoZmliaC5zYmgpOwogCi0JCWlub2RlID0gdWRmX2lnZXQoZGlyLT5pX3NiLCBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKSk7CisJCWxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOworCQlpbm9kZSA9IHVkZl9pZ2V0KGRpci0+aV9zYiwgJmxvYyk7CiAJCWlmICghaW5vZGUpIHsKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwpAQCAtMzEzLDcgKzMxNiw3IEBACiAJdWludDhfdCBsZmk7CiAJdWludDE2X3QgbGl1OwogCWludCBibG9jazsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW4gPSAwOwogCXNlY3Rvcl90IG9mZnNldDsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKQEAgLTM1MSwxNiArMzU0LDE2IEBACiAJCWlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCAmZXBvcywKIAkJICAgICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgIT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSB7CiAJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwKLQkJCQkJZGluZm8tPmlfbG9jYXRpb24sIDApOworCQkJCQkmZGluZm8tPmlfbG9jYXRpb24sIDApOwogCQkJZmliaC0+c29mZnNldCA9IGZpYmgtPmVvZmZzZXQgPSBzYi0+c19ibG9ja3NpemU7CiAJCQlnb3RvIGFkZDsKIAkJfQotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKSB7CiAJCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQl9IGVsc2UKIAkJCW9mZnNldCA9IDA7CiAKQEAgLTQwOSwxMCArNDEyLDEwIEBACiAJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmIGVsZW4pIHsKIAkJZWxlbiA9IChlbGVuICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgJiB+KHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOwogCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJZWxzZSBpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOwotCQl1ZGZfd3JpdGVfYWV4dChkaXIsICZlcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CisJCXVkZl93cml0ZV9hZXh0KGRpciwgJmVwb3MsICZlbG9jLCBlbGVuLCAxKTsKIAl9CiAJZl9wb3MgKz0gbmZpZGxlbjsKIApAQCAtNDk0LDEwICs0OTcsMTAgQEAKIAltZW1zZXQoY2ZpLCAwLCBzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpKTsKIAlpZiAoVURGX1NCKHNiKS0+c191ZGZyZXYgPj0gMHgwMjAwKQogCQl1ZGZfbmV3X3RhZygoY2hhciAqKWNmaSwgVEFHX0lERU5UX0ZJRCwgMywgMSwgYmxvY2ssCi0JCQkgICAgc2l6ZW9mKHRhZykpOworCQkJICAgIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAJZWxzZQogCQl1ZGZfbmV3X3RhZygoY2hhciAqKWNmaSwgVEFHX0lERU5UX0ZJRCwgMiwgMSwgYmxvY2ssCi0JCQkgICAgc2l6ZW9mKHRhZykpOworCQkJICAgIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAJY2ZpLT5maWxlVmVyc2lvbk51bSA9IGNwdV90b19sZTE2KDEpOwogCWNmaS0+bGVuZ3RoRmlsZUlkZW50ID0gbmFtZWxlbjsKIAljZmktPmxlbmd0aE9mSW1wVXNlID0gY3B1X3RvX2xlMTYoMCk7CkBAIC01MzAsNyArNTMzLDcgQEAKIAljZmktPmZpbGVDaGFyYWN0ZXJpc3RpY3MgfD0gRklEX0ZJTEVfQ0hBUl9ERUxFVEVEOwogCiAJaWYgKFVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19TVFJJQ1QpKQotCQltZW1zZXQoJihjZmktPmljYiksIDB4MDAsIHNpemVvZihsb25nX2FkKSk7CisJCW1lbXNldCgmKGNmaS0+aWNiKSwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBsb25nX2FkKSk7CiAKIAlyZXR1cm4gdWRmX3dyaXRlX2ZpKGlub2RlLCBjZmksIGZpLCBmaWJoLCBOVUxMLCBOVUxMKTsKIH0KQEAgLTcxMCw3ICs3MTMsNyBAQAogCWxvZmZfdCBmX3BvczsKIAlsb2ZmX3Qgc2l6ZSA9IHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemU7CiAJaW50IGJsb2NrOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CkBAIC03MjQsMTIgKzcyNywxMiBAQAogCWVsc2UgaWYgKGlub2RlX2JtYXAoZGlyLCBmX3BvcyA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMsCiAJCQkgICAgICAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PQogCQkJCQkoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmZWxvYywgb2Zmc2V0KTsKIAkJaWYgKCgrK29mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgZWxlbikgewogCQkJaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKGRpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJfSBlbHNlCiAJCQlvZmZzZXQgPSAwOwogCkBAIC03NzgsNyArNzgxLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoIGZpYmg7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgKmZpLCBjZmk7Ci0Ja2VybmVsX2xiX2FkZHIgdGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAogCXJldHZhbCA9IC1FTk9FTlQ7CiAJbG9ja19rZXJuZWwoKTsKQEAgLTc4OCw3ICs3OTEsNyBAQAogCiAJcmV0dmFsID0gLUVJTzsKIAl0bG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7Ci0JaWYgKHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgdGxvYywgMCkgIT0gaW5vZGUtPmlfaW5vKQorCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZ0bG9jLCAwKSAhPSBpbm9kZS0+aV9pbm8pCiAJCWdvdG8gZW5kX3JtZGlyOwogCXJldHZhbCA9IC1FTk9URU1QVFk7CiAJaWYgKCFlbXB0eV9kaXIoaW5vZGUpKQpAQCAtODI0LDcgKzgyNyw3IEBACiAJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggZmliaDsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmk7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwotCWtlcm5lbF9sYl9hZGRyIHRsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWxvY2tfa2VybmVsKCk7CkBAIC04MzQsNyArODM3LDcgQEAKIAogCXJldHZhbCA9IC1FSU87CiAJdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOwotCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIHRsb2MsIDApICE9IGlub2RlLT5pX2lubykKKwlpZiAodWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAmdGxvYywgMCkgIT0gaW5vZGUtPmlfaW5vKQogCQlnb3RvIGVuZF91bmxpbms7CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKSB7CkBAIC04OTcsNyArOTAwLDcgQEAKIAlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlICE9IElDQlRBR19GTEFHX0FEX0lOX0lDQikgewotCQlrZXJuZWxfbGJfYWRkciBlbG9jOworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAkJdWludDMyX3QgYnNpemU7CiAKIAkJYmxvY2sgPSB1ZGZfbmV3X2Jsb2NrKGlub2RlLT5pX3NiLCBpbm9kZSwKQEAgLTkxMyw3ICs5MTYsNyBAQAogCQkJCWlpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKIAkJYnNpemUgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCWlpbmZvLT5pX2xlbkV4dGVudHMgPSBic2l6ZTsKLQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmZXBvcywgZWxvYywgYnNpemUsIDApOworCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgYnNpemUsIDApOwogCQlicmVsc2UoZXBvcy5iaCk7CiAKIAkJYmxvY2sgPSB1ZGZfZ2V0X3BibG9jayhpbm9kZS0+aV9zYiwgYmxvY2ssCkBAIC0xMTA4LDcgKzExMTEsNyBAQAogCXN0cnVjdCBmaWxlSWRlbnREZXNjIG9jZmksIG5jZmk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwogCWludCByZXR2YWwgPSAtRU5PRU5UOwotCWtlcm5lbF9sYl9hZGRyIHRsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICpvbGRfaWluZm8gPSBVREZfSShvbGRfaW5vZGUpOwogCiAJbG9ja19rZXJuZWwoKTsKQEAgLTExMTksNyArMTEyMiw3IEBACiAJCWJyZWxzZShvZmliaC5zYmgpOwogCX0KIAl0bG9jID0gbGVsYl90b19jcHUob2NmaS5pY2IuZXh0TG9jYXRpb24pOwotCWlmICghb2ZpIHx8IHVkZl9nZXRfbGJfcGJsb2NrKG9sZF9kaXItPmlfc2IsIHRsb2MsIDApCisJaWYgKCFvZmkgfHwgdWRmX2dldF9sYl9wYmxvY2sob2xkX2Rpci0+aV9zYiwgJnRsb2MsIDApCiAJICAgICE9IG9sZF9pbm9kZS0+aV9pbm8pCiAJCWdvdG8gZW5kX3JlbmFtZTsKIApAQCAtMTE1OCw3ICsxMTYxLDcgQEAKIAkJaWYgKCFkaXJfZmkpCiAJCQlnb3RvIGVuZF9yZW5hbWU7CiAJCXRsb2MgPSBsZWxiX3RvX2NwdShkaXJfZmktPmljYi5leHRMb2NhdGlvbik7Ci0JCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhvbGRfaW5vZGUtPmlfc2IsIHRsb2MsIDApICE9CisJCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhvbGRfaW5vZGUtPmlfc2IsICZ0bG9jLCAwKSAhPQogCQkJCW9sZF9kaXItPmlfaW5vKQogCQkJZ290byBlbmRfcmVuYW1lOwogCkBAIC0xMTg3LDcgKzExOTAsNyBAQAogCSAqLwogCW5jZmkuZmlsZVZlcnNpb25OdW0gPSBvY2ZpLmZpbGVWZXJzaW9uTnVtOwogCW5jZmkuZmlsZUNoYXJhY3RlcmlzdGljcyA9IG9jZmkuZmlsZUNoYXJhY3RlcmlzdGljczsKLQltZW1jcHkoJihuY2ZpLmljYiksICYob2NmaS5pY2IpLCBzaXplb2YobG9uZ19hZCkpOworCW1lbWNweSgmKG5jZmkuaWNiKSwgJihvY2ZpLmljYiksIHNpemVvZihzdHJ1Y3QgbG9uZ19hZCkpOwogCXVkZl93cml0ZV9maShuZXdfZGlyLCAmbmNmaSwgbmZpLCAmbmZpYmgsIE5VTEwsIE5VTEwpOwogCiAJLyogVGhlIG9sZCBmaWQgbWF5IGhhdmUgbW92ZWQgLSBmaW5kIGl0IGFnYWluICovCkBAIC0xMjQyLDYgKzEyNDUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWRmX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCiB7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IHFzdHIgZG90ZG90ID0gey5uYW1lID0gIi4uIiwgLmxlbiA9IDJ9OwogCXN0cnVjdCBmaWxlSWRlbnREZXNjIGNmaTsKQEAgLTEyNTUsOCArMTI1OSw4IEBACiAJCWJyZWxzZShmaWJoLmViaCk7CiAJYnJlbHNlKGZpYmguc2JoKTsKIAotCWlub2RlID0gdWRmX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsCi0JCQkgbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbikpOworCXRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKKwlpbm9kZSA9IHVkZl9pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCAmdGxvYyk7CiAJaWYgKCFpbm9kZSkKIAkJZ290byBvdXRfdW5sb2NrOwogCXVubG9ja19rZXJuZWwoKTsKQEAgLTEyNzIsMTQgKzEyNzYsMTQgQEAKIAkJCQkJdTE2IHBhcnRyZWYsIF9fdTMyIGdlbmVyYXRpb24pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlrZXJuZWxfbGJfYWRkciBsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKIAogCWlmIChibG9jayA9PSAwKQogCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKIAogCWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsKIAlsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gcGFydHJlZjsKLQlpbm9kZSA9IHVkZl9pZ2V0KHNiLCBsb2MpOworCWlub2RlID0gdWRmX2lnZXQoc2IsICZsb2MpOwogCiAJaWYgKGlub2RlID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwpAQCAtMTMxOCw3ICsxMzIyLDcgQEAKIHsKIAlpbnQgbGVuID0gKmxlbnA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9ICBkZS0+ZF9pbm9kZTsKLQlrZXJuZWxfbGJfYWRkciBsb2NhdGlvbiA9IFVERl9JKGlub2RlKS0+aV9sb2NhdGlvbjsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jYXRpb24gPSBVREZfSShpbm9kZSktPmlfbG9jYXRpb247CiAJc3RydWN0IGZpZCAqZmlkID0gKHN0cnVjdCBmaWQgKilmaDsKIAlpbnQgdHlwZSA9IEZJTEVJRF9VREZfV0lUSE9VVF9QQVJFTlQ7CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9vc3RhX3VkZi5oIGIvZnMvdWRmL29zdGFfdWRmLmgKaW5kZXggNjVmZjQ3OS4uZmJmZjc0NiAxMDA2NDQKLS0tIGEvZnMvdWRmL29zdGFfdWRmLmgKKysrIGIvZnMvdWRmL29zdGFfdWRmLmgKQEAgLTg1LDcgKzg1LDcgQEAKIC8qIExvZ2ljYWwgVm9sdW1lIEludGVncml0eSBEZXNjcmlwdG9yIChVREYgMi41MCAyLjIuNikgKi8KIC8qIEltcGxlbWVudGF0aW9uIFVzZSAoVURGIDIuNTAgMi4yLjYuNCkgKi8KIHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzY0ltcFVzZSB7Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAlfX2xlMzIJCW51bUZpbGVzOwogCV9fbGUzMgkJbnVtRGlyczsKIAlfX2xlMTYJCW1pblVERlJlYWRSZXY7CkBAIC05NywxMiArOTcsMTIgQEAKIC8qIEltcGxlbWVudGF0aW9uIFVzZSBWb2x1bWUgRGVzY3JpcHRvciAoVURGIDIuNTAgMi4yLjcpICovCiAvKiBJbXBsZW1lbnRhdGlvbiBVc2UgKFVERiAyLjUwIDIuMi43LjIpICovCiBzdHJ1Y3QgaW1wVXNlVm9sRGVzY0ltcFVzZSB7Ci0JY2hhcnNwZWMJTFZJQ2hhcnNldDsKKwlzdHJ1Y3QgY2hhcnNwZWMJTFZJQ2hhcnNldDsKIAlkc3RyaW5nCQlsb2dpY2FsVm9sSWRlbnRbMTI4XTsKIAlkc3RyaW5nCQlMVkluZm8xWzM2XTsKIAlkc3RyaW5nCQlMVkluZm8yWzM2XTsKIAlkc3RyaW5nCQlMVkluZm8zWzM2XTsKLQlyZWdpZAkJaW1wSWRlbnQ7CisJc3RydWN0IHJlZ2lkCWltcElkZW50OwogCXVpbnQ4X3QJCWltcFVzZVsxMjhdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcFR5cGU7CiAJdWludDhfdAkJcGFydGl0aW9uTWFwTGVuZ3RoOwogCXVpbnQ4X3QJCXJlc2VydmVkMVsyXTsKLQlyZWdpZAkJcGFydElkZW50OworCXN0cnVjdCByZWdpZAlwYXJ0SWRlbnQ7CiAJX19sZTE2CQl2b2xTZXFOdW07CiAJX19sZTE2CQlwYXJ0aXRpb25OdW07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcFR5cGU7CiAJdWludDhfdAkJcGFydGl0aW9uTWFwTGVuZ3RoOwogCXVpbnQ4X3QJCXJlc2VydmVkMVsyXTsKLQlyZWdpZAkJcGFydElkZW50OworCXN0cnVjdCByZWdpZAlwYXJ0SWRlbnQ7CiAJX19sZTE2CQl2b2xTZXFOdW07CiAJX19sZTE2CQlwYXJ0aXRpb25OdW07CiAJdWludDhfdAkJcmVzZXJ2ZWQyWzI0XTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXVpbnQ4X3QgcGFydGl0aW9uTWFwVHlwZTsKIAl1aW50OF90IHBhcnRpdGlvbk1hcExlbmd0aDsKIAl1aW50OF90IHJlc2VydmVkMVsyXTsKLQlyZWdpZCBwYXJ0SWRlbnQ7CisJc3RydWN0IHJlZ2lkIHBhcnRJZGVudDsKIAlfX2xlMTYgdm9sU2VxTnVtOwogCV9fbGUxNiBwYXJ0aXRpb25OdW07CiAJX19sZTE2IHBhY2tldExlbmd0aDsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXVpbnQ4X3QJCXBhcnRpdGlvbk1hcFR5cGU7CiAJdWludDhfdAkJcGFydGl0aW9uTWFwTGVuZ3RoOwogCXVpbnQ4X3QJCXJlc2VydmVkMVsyXTsKLQlyZWdpZAkJcGFydElkZW50OworCXN0cnVjdCByZWdpZAlwYXJ0SWRlbnQ7CiAJX19sZTE2CQl2b2xTZXFOdW07CiAJX19sZTE2CQlwYXJ0aXRpb25OdW07CiAJX19sZTMyCQltZXRhZGF0YUZpbGVMb2M7CkBAIC0xNjEsNyArMTYxLDcgQEAKIC8qIFZpcnR1YWwgQWxsb2NhdGlvbiBUYWJsZSAoVURGIDEuNSAyLjIuMTApICovCiBzdHJ1Y3QgdmlydHVhbEFsbG9jYXRpb25UYWJsZTE1IHsKIAlfX2xlMzIJCVZpcnR1YWxTZWN0b3JbMF07Ci0JcmVnaWQJCXZhdElkZW50OworCXN0cnVjdCByZWdpZAl2YXRJZGVudDsKIAlfX2xlMzIJCXByZXZpb3VzVkFUSUNCTG9jOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTE5Miw4ICsxOTIsOCBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBzcGFyaW5nVGFibGUgewotCXRhZyAJCWRlc2NUYWc7Ci0JcmVnaWQJCXNwYXJpbmdJZGVudDsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CisJc3RydWN0IHJlZ2lkCXNwYXJpbmdJZGVudDsKIAlfX2xlMTYJCXJlYWxsb2NhdGlvblRhYmxlTGVuOwogCV9fbGUxNgkJcmVzZXJ2ZWQ7CiAJX19sZTMyCQlzZXF1ZW5jZU51bTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogI2RlZmluZSBJQ0JUQUdfRklMRV9UWVBFX01JUlJPUgkJMHhGQgogI2RlZmluZSBJQ0JUQUdfRklMRV9UWVBFX0JJVE1BUAkJMHhGQwogCi0vKiBzdHJ1Y3QgbG9uZ19hZCBJQ0IgLSBBREltcFVzZSAoVURGIDIuNTAgMi4yLjQuMykgKi8KKy8qIHN0cnVjdCBzdHJ1Y3QgbG9uZ19hZCBJQ0IgLSBBREltcFVzZSAoVURGIDIuNTAgMi4yLjQuMykgKi8KIHN0cnVjdCBhbGxvY0Rlc2NJbXBVc2UgewogCV9fbGUxNgkJZmxhZ3M7CiAJdWludDhfdAkJaW1wVXNlWzRdOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3BhcnRpdGlvbi5jIGIvZnMvdWRmL3BhcnRpdGlvbi5jCmluZGV4IDk2ZGZkMjAuLjRiNTQwZWUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9wYXJ0aXRpb24uYworKysgYi9mcy91ZGYvcGFydGl0aW9uLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgdWRmX3BhcnRfbWFwICptYXA7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXNlY3Rvcl90IGV4dF9vZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jCmluZGV4IGUyNWU3MDEuLjcyMzQ4Y2MgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCisrKyBiL2ZzL3VkZi9zdXBlci5jCkBAIC04MSwxNiArODEsMTMgQEAKIC8qIFRoZXNlIGFyZSB0aGUgIm1lYXQiIC0gZXZlcnl0aGluZyBlbHNlIGlzIHN0dWZmaW5nICovCiBzdGF0aWMgaW50IHVkZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICosIGludCk7CiBzdGF0aWMgdm9pZCB1ZGZfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKLXN0YXRpYyB2b2lkIHVkZl93cml0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitzdGF0aWMgaW50IHVkZl9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogc3RhdGljIGludCB1ZGZfcmVtb3VudF9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50ICosIGNoYXIgKik7Ci1zdGF0aWMgaW50IHVkZl9jaGVja192YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQpOwotc3RhdGljIGludCB1ZGZfdnJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzaWxlbnQpOwotc3RhdGljIHZvaWQgdWRmX2xvYWRfbG9naWNhbHZvbGludChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwga2VybmVsX2V4dGVudF9hZCk7Ci1zdGF0aWMgdm9pZCB1ZGZfZmluZF9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOwotc3RhdGljIGludCB1ZGZfZmluZF9maWxlc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBrZXJuZWxfbGJfYWRkciAqLAotCQkJICAgIGtlcm5lbF9sYl9hZGRyICopOworc3RhdGljIHZvaWQgdWRmX2xvYWRfbG9naWNhbHZvbGludChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9leHRlbnRfYWQpOworc3RhdGljIGludCB1ZGZfZmluZF9maWxlc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwKKwkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKik7CiBzdGF0aWMgdm9pZCB1ZGZfbG9hZF9maWxlc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKLQkJCSAgICAga2VybmVsX2xiX2FkZHIgKik7CisJCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqKTsKIHN0YXRpYyB2b2lkIHVkZl9vcGVuX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIHZvaWQgdWRmX2Nsb3NlX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIHVuc2lnbmVkIGludCB1ZGZfY291bnRfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CkBAIC0xODEsNyArMTc4LDcgQEAKIAkuZGVsZXRlX2lub2RlCT0gdWRmX2RlbGV0ZV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJPSB1ZGZfY2xlYXJfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IHVkZl9wdXRfc3VwZXIsCi0JLndyaXRlX3N1cGVyCT0gdWRmX3dyaXRlX3N1cGVyLAorCS5zeW5jX2ZzCT0gdWRmX3N5bmNfZnMsCiAJLnN0YXRmcwkJPSB1ZGZfc3RhdGZzLAogCS5yZW1vdW50X2ZzCT0gdWRmX3JlbW91bnRfZnMsCiAJLnNob3dfb3B0aW9ucwk9IHVkZl9zaG93X29wdGlvbnMsCkBAIC0yMDEsNiArMTk4LDggQEAKIAltb2RlX3QgdW1hc2s7CiAJZ2lkX3QgZ2lkOwogCXVpZF90IHVpZDsKKwltb2RlX3QgZm1vZGU7CisJbW9kZV90IGRtb2RlOwogCXN0cnVjdCBubHNfdGFibGUgKm5sc19tYXA7CiB9OwogCkBAIC0yNTgsNyArMjU3LDcgQEAKIAogCWlmICghVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1NUUklDVCkpCiAJCXNlcV9wdXRzKHNlcSwgIixub3N0cmljdCIpOwotCWlmIChzYi0+c19ibG9ja3NpemUgIT0gVURGX0RFRkFVTFRfQkxPQ0tTSVpFKQorCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfQkxPQ0tTSVpFX1NFVCkpCiAJCXNlcV9wcmludGYoc2VxLCAiLGJzPSVsdSIsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19VTkhJREUpKQogCQlzZXFfcHV0cyhzZXEsICIsdW5oaWRlIik7CkBAIC0yODIsMTggKzI4MSwxNiBAQAogCQlzZXFfcHJpbnRmKHNlcSwgIixnaWQ9JXUiLCBzYmktPnNfZ2lkKTsKIAlpZiAoc2JpLT5zX3VtYXNrICE9IDApCiAJCXNlcV9wcmludGYoc2VxLCAiLHVtYXNrPSVvIiwgc2JpLT5zX3VtYXNrKTsKKwlpZiAoc2JpLT5zX2Ztb2RlICE9IFVERl9JTlZBTElEX01PREUpCisJCXNlcV9wcmludGYoc2VxLCAiLG1vZGU9JW8iLCBzYmktPnNfZm1vZGUpOworCWlmIChzYmktPnNfZG1vZGUgIT0gVURGX0lOVkFMSURfTU9ERSkKKwkJc2VxX3ByaW50ZihzZXEsICIsZG1vZGU9JW8iLCBzYmktPnNfZG1vZGUpOwogCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfU0VTU0lPTl9TRVQpKQogCQlzZXFfcHJpbnRmKHNlcSwgIixzZXNzaW9uPSV1Iiwgc2JpLT5zX3Nlc3Npb24pOwogCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfTEFTVEJMT0NLX1NFVCkpCiAJCXNlcV9wcmludGYoc2VxLCAiLGxhc3RibG9jaz0ldSIsIHNiaS0+c19sYXN0X2Jsb2NrKTsKLQkvKgotCSAqIHNfYW5jaG9yWzJdIGNvdWxkIGJlIHplcm9lZCBvdXQgaW4gY2FzZSB0aGVyZSBpcyBubyBhbmNob3IKLQkgKiBpbiB0aGUgc3BlY2lmaWVkIGJsb2NrLCBidXQgdGhlbiB0aGUgImFuY2hvcj1OIiBvcHRpb24KLQkgKiBvcmlnaW5hbGx5IGdpdmVuIGJ5IHRoZSB1c2VyIHdhc24ndCBlZmZlY3RpdmUsIHNvIGl0J3MgT0sKLQkgKiBpZiB3ZSBkb24ndCBzaG93IGl0LgotCSAqLwotCWlmIChzYmktPnNfYW5jaG9yWzJdICE9IDApCi0JCXNlcV9wcmludGYoc2VxLCAiLGFuY2hvcj0ldSIsIHNiaS0+c19hbmNob3JbMl0pOworCWlmIChzYmktPnNfYW5jaG9yICE9IDApCisJCXNlcV9wcmludGYoc2VxLCAiLGFuY2hvcj0ldSIsIHNiaS0+c19hbmNob3IpOwogCS8qCiAJICogdm9sdW1lLCBwYXJ0aXRpb24sIGZpbGVzZXQgYW5kIHJvb3RkaXIgc2VlbSB0byBiZSBpZ25vcmVkCiAJICogY3VycmVudGx5CkBAIC0zMTcsNiArMzE0LDggQEAKICAqCiAgKglnaWQ9CQlTZXQgdGhlIGRlZmF1bHQgZ3JvdXAuCiAgKgl1bWFzaz0JCVNldCB0aGUgZGVmYXVsdCB1bWFzay4KKyAqCW1vZGU9CQlTZXQgdGhlIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucy4KKyAqCWRtb2RlPQkJU2V0IHRoZSBkZWZhdWx0IGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4KICAqCXVpZD0JCVNldCB0aGUgZGVmYXVsdCB1c2VyLgogICoJYnM9CQlTZXQgdGhlIGJsb2NrIHNpemUuCiAgKgl1bmhpZGUJCVNob3cgb3RoZXJ3aXNlIGhpZGRlbiBmaWxlcy4KQEAgLTM2Niw3ICszNjUsOCBAQAogCU9wdF9naWQsIE9wdF91aWQsIE9wdF91bWFzaywgT3B0X3Nlc3Npb24sIE9wdF9sYXN0YmxvY2ssCiAJT3B0X2FuY2hvciwgT3B0X3ZvbHVtZSwgT3B0X3BhcnRpdGlvbiwgT3B0X2ZpbGVzZXQsCiAJT3B0X3Jvb3RkaXIsIE9wdF91dGY4LCBPcHRfaW9jaGFyc2V0LAotCU9wdF9lcnIsIE9wdF91Zm9yZ2V0LCBPcHRfdWlnbm9yZSwgT3B0X2dmb3JnZXQsIE9wdF9naWdub3JlCisJT3B0X2VyciwgT3B0X3Vmb3JnZXQsIE9wdF91aWdub3JlLCBPcHRfZ2ZvcmdldCwgT3B0X2dpZ25vcmUsCisJT3B0X2Ztb2RlLCBPcHRfZG1vZGUKIH07CiAKIHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTM5NSw2ICszOTUsOCBAQAogCXtPcHRfcm9vdGRpciwJInJvb3RkaXI9JXUifSwKIAl7T3B0X3V0ZjgsCSJ1dGY4In0sCiAJe09wdF9pb2NoYXJzZXQsCSJpb2NoYXJzZXQ9JXMifSwKKwl7T3B0X2Ztb2RlLCAgICAgIm1vZGU9JW8ifSwKKwl7T3B0X2Rtb2RlLCAgICAgImRtb2RlPSVvIn0sCiAJe09wdF9lcnIsCU5VTEx9CiB9OwogCkBAIC00MDUsNyArNDA3LDYgQEAKIAlpbnQgb3B0aW9uOwogCiAJdW9wdC0+bm92cnMgPSAwOwotCXVvcHQtPmJsb2Nrc2l6ZSA9IFVERl9ERUZBVUxUX0JMT0NLU0laRTsKIAl1b3B0LT5wYXJ0aXRpb24gPSAweEZGRkY7CiAJdW9wdC0+c2Vzc2lvbiA9IDB4RkZGRkZGRkY7CiAJdW9wdC0+bGFzdGJsb2NrID0gMDsKQEAgLTQyOCwxMCArNDI5LDEyIEBACiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfbm92cnM6CiAJCQl1b3B0LT5ub3ZycyA9IDE7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfYnM6CiAJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXVvcHQtPmJsb2Nrc2l6ZSA9IG9wdGlvbjsKKwkJCXVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX0JMT0NLU0laRV9TRVQpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3VuaGlkZToKIAkJCXVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX1VOSElERSk7CkBAIC01MzEsNiArNTM0LDE2IEBACiAJCWNhc2UgT3B0X2dmb3JnZXQ6CiAJCQl1b3B0LT5mbGFncyB8PSAoMSA8PCBVREZfRkxBR19HSURfRk9SR0VUKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9mbW9kZToKKwkJCWlmIChtYXRjaF9vY3RhbChhcmdzLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXVvcHQtPmZtb2RlID0gb3B0aW9uICYgMDc3NzsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9kbW9kZToKKwkJCWlmIChtYXRjaF9vY3RhbChhcmdzLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXVvcHQtPmRtb2RlID0gb3B0aW9uICYgMDc3NzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IGJhZCBtb3VudCBvcHRpb24gXCIlc1wiICIKIAkJCSAgICAgICAib3IgbWlzc2luZyB2YWx1ZVxuIiwgcCk7CkBAIC01NDAsMTcgKzU1Myw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIHVkZl93cml0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWxvY2tfa2VybmVsKCk7Ci0KLQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCXVkZl9vcGVuX2x2aWQoc2IpOwotCXNiLT5zX2RpcnQgPSAwOwotCi0JdW5sb2NrX2tlcm5lbCgpOwotfQotCiBzdGF0aWMgaW50IHVkZl9yZW1vdW50X2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IHVkZl9vcHRpb25zIHVvcHQ7CkBAIC01NjAsNiArNTYyLDggQEAKIAl1b3B0LnVpZCAgID0gc2JpLT5zX3VpZDsKIAl1b3B0LmdpZCAgID0gc2JpLT5zX2dpZDsKIAl1b3B0LnVtYXNrID0gc2JpLT5zX3VtYXNrOworCXVvcHQuZm1vZGUgPSBzYmktPnNfZm1vZGU7CisJdW9wdC5kbW9kZSA9IHNiaS0+c19kbW9kZTsKIAogCWlmICghdWRmX3BhcnNlX29wdGlvbnMob3B0aW9ucywgJnVvcHQsIHRydWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU2OCw2ICs1NzIsOCBAQAogCXNiaS0+c191aWQgICA9IHVvcHQudWlkOwogCXNiaS0+c19naWQgICA9IHVvcHQuZ2lkOwogCXNiaS0+c191bWFzayA9IHVvcHQudW1hc2s7CisJc2JpLT5zX2Ztb2RlID0gdW9wdC5mbW9kZTsKKwlzYmktPnNfZG1vZGUgPSB1b3B0LmRtb2RlOwogCiAJaWYgKHNiaS0+c19sdmlkX2JoKSB7CiAJCWludCB3cml0ZV9yZXYgPSBsZTE2X3RvX2NwdSh1ZGZfc2JfbHZpZGl1KHNiaSktPm1pblVERldyaXRlUmV2KTsKQEAgLTU4NSwyMiArNTkxLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWRmX3ZycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgc2lsZW50KQorLyogQ2hlY2sgVm9sdW1lIFN0cnVjdHVyZSBEZXNjcmlwdG9ycyAoRUNNQSAxNjcgMi85LjEpICovCisvKiBXZSBhbHNvIGNoZWNrIGFueSAiQ0QtUk9NIFZvbHVtZSBEZXNjcmlwdG9yIFNldCIgKEVDTUEgMTY3IDIvOC4zLjEpICovCitzdGF0aWMgbG9mZl90IHVkZl9jaGVja192c2Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3Qgdm9sU3RydWN0RGVzYyAqdnNkID0gTlVMTDsKIAlsb2ZmX3Qgc2VjdG9yID0gMzI3Njg7CiAJaW50IHNlY3RvcnNpemU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7Ci0JaW50IGlzbzk2NjAgPSAwOwogCWludCBuc3IwMiA9IDA7CiAJaW50IG5zcjAzID0gMDsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaTsKIAotCS8qIEJsb2NrIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDUxMiAqLwotCWlmIChzYi0+c19ibG9ja3NpemUgJiA1MTEpCi0JCXJldHVybiAwOwogCXNiaSA9IFVERl9TQihzYik7Ci0KIAlpZiAoc2ItPnNfYmxvY2tzaXplIDwgc2l6ZW9mKHN0cnVjdCB2b2xTdHJ1Y3REZXNjKSkKIAkJc2VjdG9yc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdm9sU3RydWN0RGVzYyk7CiAJZWxzZQpAQCAtNjI3LDcgKzYzMCw2IEBACiAJCQlicmVhazsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh2c2QtPnN0ZElkZW50LCBWU0RfU1REX0lEX0NEMDAxLAogCQkJCSAgICBWU0RfU1REX0lEX0xFTikpIHsKLQkJCWlzbzk2NjAgPSBzZWN0b3I7CiAJCQlzd2l0Y2ggKHZzZC0+c3RydWN0VHlwZSkgewogCQkJY2FzZSAwOgogCQkJCXVkZl9kZWJ1ZygiSVNPOTY2MCBCb290IFJlY29yZCBmb3VuZFxuIik7CkBAIC02NzksMTM5ICs2ODEsOSBAQAogCQlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW4gYW5jaG9yIGJsb2NrIGluIHRoZSBnaXZlbiBibG9jawotICovCi1zdGF0aWMgaW50IHVkZl9jaGVja19hbmNob3JfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQl1aW50MTZfdCBpZGVudDsKLQotCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVikgJiYKLQkgICAgdWRmX2ZpeGVkX3RvX3ZhcmlhYmxlKGJsb2NrKSA+PQotCSAgICBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQotCQlyZXR1cm4gMDsKLQotCWJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLCBibG9jaywgYmxvY2ssICZpZGVudCk7Ci0JaWYgKCFiaCkKLQkJcmV0dXJuIDA7Ci0JYnJlbHNlKGJoKTsKLQotCXJldHVybiBpZGVudCA9PSBUQUdfSURFTlRfQVZEUDsKLX0KLQotLyogU2VhcmNoIGZvciBhbiBhbmNob3Igdm9sdW1lIGRlc2NyaXB0b3IgcG9pbnRlciAqLwotc3RhdGljIHNlY3Rvcl90IHVkZl9zY2FuX2FuY2hvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgbGFzdGJsb2NrKQotewotCXNlY3Rvcl90IGxhc3RbNl07Ci0JaW50IGk7Ci0Jc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwotCi0JbGFzdFswXSA9IGxhc3RibG9jazsKLQlsYXN0WzFdID0gbGFzdFswXSAtIDE7Ci0JbGFzdFsyXSA9IGxhc3RbMF0gKyAxOwotCWxhc3RbM10gPSBsYXN0WzBdIC0gMjsKLQlsYXN0WzRdID0gbGFzdFswXSAtIDE1MDsKLQlsYXN0WzVdID0gbGFzdFswXSAtIDE1MjsKLQotCS8qICBhY2NvcmRpbmcgdG8gc3BlYywgYW5jaG9yIGlzIGluIGVpdGhlcjoKLQkgKiAgICAgYmxvY2sgMjU2Ci0JICogICAgIGxhc3RibG9jay0yNTYKLQkgKiAgICAgbGFzdGJsb2NrCi0JICogIGhvd2V2ZXIsIGlmIHRoZSBkaXNjIGlzbid0IGNsb3NlZCwgaXQgY291bGQgYmUgNTEyICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYXN0KTsgaSsrKSB7Ci0JCWlmIChsYXN0W2ldIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobGFzdFtpXSA+PSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+Ci0JCQkJc2ItPnNfYmxvY2tzaXplX2JpdHMpCi0JCQljb250aW51ZTsKLQotCQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgbGFzdFtpXSkpIHsKLQkJCXNiaS0+c19hbmNob3JbMF0gPSBsYXN0W2ldOwotCQkJc2JpLT5zX2FuY2hvclsxXSA9IGxhc3RbaV0gLSAyNTY7Ci0JCQlyZXR1cm4gbGFzdFtpXTsKLQkJfQotCi0JCWlmIChsYXN0W2ldIDwgMjU2KQotCQkJY29udGludWU7Ci0KLQkJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIGxhc3RbaV0gLSAyNTYpKSB7Ci0JCQlzYmktPnNfYW5jaG9yWzFdID0gbGFzdFtpXSAtIDI1NjsKLQkJCXJldHVybiBsYXN0W2ldOwotCQl9Ci0JfQotCi0JaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIHNiaS0+c19zZXNzaW9uICsgMjU2KSkgewotCQlzYmktPnNfYW5jaG9yWzBdID0gc2JpLT5zX3Nlc3Npb24gKyAyNTY7Ci0JCXJldHVybiBsYXN0WzBdOwotCX0KLQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgc2JpLT5zX3Nlc3Npb24gKyA1MTIpKSB7Ci0JCXNiaS0+c19hbmNob3JbMF0gPSBzYmktPnNfc2Vzc2lvbiArIDUxMjsKLQkJcmV0dXJuIGxhc3RbMF07Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogRmluZCBhbiBhbmNob3Igdm9sdW1lIGRlc2NyaXB0b3IuIFRoZSBmdW5jdGlvbiBleHBlY3RzIHNiaS0+c19sYXN0YmxvY2sgdG8KLSAqIGJlIHRoZSBsYXN0IGJsb2NrIG9uIHRoZSBtZWRpYS4KLSAqCi0gKiBSZXR1cm4gMSBpZiBub3QgZm91bmQsIDAgaWYgb2sKLSAqCi0gKi8KLXN0YXRpYyB2b2lkIHVkZl9maW5kX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXNlY3Rvcl90IGxhc3RibG9jazsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKLQl1aW50MTZfdCBpZGVudDsKLQlpbnQgaTsKLQlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7Ci0KLQlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLCBzYmktPnNfbGFzdF9ibG9jayk7Ci0JaWYgKGxhc3RibG9jaykKLQkJZ290byBjaGVja19hbmNob3I7Ci0KLQkvKiBObyBhbmNob3IgZm91bmQ/IFRyeSBWQVJDT05WIGNvbnZlcnNpb24gb2YgYmxvY2sgbnVtYmVycyAqLwotCVVERl9TRVRfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVik7Ci0JLyogRmlyc3RseSwgd2UgdHJ5IHRvIG5vdCBjb252ZXJ0IG51bWJlciBvZiB0aGUgbGFzdCBibG9jayAqLwotCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsCi0JCQkJdWRmX3ZhcmlhYmxlX3RvX2ZpeGVkKHNiaS0+c19sYXN0X2Jsb2NrKSk7Ci0JaWYgKGxhc3RibG9jaykKLQkJZ290byBjaGVja19hbmNob3I7Ci0KLQkvKiBTZWNvbmRseSwgd2UgdHJ5IHdpdGggY29udmVydGVkIG51bWJlciBvZiB0aGUgbGFzdCBibG9jayAqLwotCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsIHNiaS0+c19sYXN0X2Jsb2NrKTsKLQlpZiAoIWxhc3RibG9jaykgewotCQkvKiBWQVJDT05WIGRpZG4ndCBoZWxwLiBDbGVhciBpdC4gKi8KLQkJVURGX0NMRUFSX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpOwotCX0KLQotY2hlY2tfYW5jaG9yOgotCS8qCi0JICogQ2hlY2sgbG9jYXRlZCBhbmNob3JzIGFuZCB0aGUgYW5jaG9yIGJsb2NrIHN1cHBsaWVkIHZpYQotCSAqIG1vdW50IG9wdGlvbnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYmktPnNfYW5jaG9yKTsgaSsrKSB7Ci0JCWlmICghc2JpLT5zX2FuY2hvcltpXSkKLQkJCWNvbnRpbnVlOwotCQliaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwgc2JpLT5zX2FuY2hvcltpXSwKLQkJCQkJc2JpLT5zX2FuY2hvcltpXSwgJmlkZW50KTsKLQkJaWYgKCFiaCkKLQkJCXNiaS0+c19hbmNob3JbaV0gPSAwOwotCQllbHNlIHsKLQkJCWJyZWxzZShiaCk7Ci0JCQlpZiAoaWRlbnQgIT0gVEFHX0lERU5UX0FWRFApCi0JCQkJc2JpLT5zX2FuY2hvcltpXSA9IDA7Ci0JCX0KLQl9Ci0KLQlzYmktPnNfbGFzdF9ibG9jayA9IGxhc3RibG9jazsKLX0KLQogc3RhdGljIGludCB1ZGZfZmluZF9maWxlc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQsCi0JCQkgICAga2VybmVsX2xiX2FkZHIgKnJvb3QpCisJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0LAorCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqcm9vdCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlsb25nIGxhc3RibG9jazsKQEAgLTgyMCw3ICs2OTIsNyBAQAogCiAJaWYgKGZpbGVzZXQtPmxvZ2ljYWxCbG9ja051bSAhPSAweEZGRkZGRkZGIHx8CiAJICAgIGZpbGVzZXQtPnBhcnRpdGlvblJlZmVyZW5jZU51bSAhPSAweEZGRkYpIHsKLQkJYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCAqZmlsZXNldCwgMCwgJmlkZW50KTsKKwkJYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCBmaWxlc2V0LCAwLCAmaWRlbnQpOwogCiAJCWlmICghYmgpIHsKIAkJCXJldHVybiAxOwpAQCAtODM0LDcgKzcwNiw3IEBACiAJc2JpID0gVURGX1NCKHNiKTsKIAlpZiAoIWJoKSB7CiAJCS8qIFNlYXJjaCBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgcGFydGl0aW9ucyAqLwotCQlrZXJuZWxfbGJfYWRkciBuZXdmaWxlc2V0OworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbmV3ZmlsZXNldDsKIAogLyogLS0+IGN2ZzogRklYTUUgLSBpcyBpdCByZWFzb25hYmxlPyAqLwogCQlyZXR1cm4gMTsKQEAgLTg1MCw3ICs3MjIsNyBAQAogCQkJbmV3ZmlsZXNldC5sb2dpY2FsQmxvY2tOdW0gPSAwOwogCiAJCQlkbyB7Ci0JCQkJYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCBuZXdmaWxlc2V0LCAwLAorCQkJCWJoID0gdWRmX3JlYWRfcHRhZ2dlZChzYiwgJm5ld2ZpbGVzZXQsIDAsCiAJCQkJCQkgICAgICAmaWRlbnQpOwogCQkJCWlmICghYmgpIHsKIAkJCQkJbmV3ZmlsZXNldC5sb2dpY2FsQmxvY2tOdW0rKzsKQEAgLTkwMiwxNCArNzc0LDIzIEBACiBzdGF0aWMgaW50IHVkZl9sb2FkX3B2b2xkZXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrKQogewogCXN0cnVjdCBwcmltYXJ5Vm9sRGVzYyAqcHZvbGRlc2M7Ci0Jc3RydWN0IHVzdHIgaW5zdHI7Ci0Jc3RydWN0IHVzdHIgb3V0c3RyOworCXN0cnVjdCB1c3RyICppbnN0ciwgKm91dHN0cjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXVpbnQxNl90IGlkZW50OworCWludCByZXQgPSAxOworCisJaW5zdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXN0ciksIEdGUF9OT0ZTKTsKKwlpZiAoIWluc3RyKQorCQlyZXR1cm4gMTsKKworCW91dHN0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c3RyKSwgR0ZQX05PRlMpOworCWlmICghb3V0c3RyKQorCQlnb3RvIG91dDE7CiAKIAliaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwgYmxvY2ssIGJsb2NrLCAmaWRlbnQpOwogCWlmICghYmgpCi0JCXJldHVybiAxOworCQlnb3RvIG91dDI7CisKIAlCVUdfT04oaWRlbnQgIT0gVEFHX0lERU5UX1BWRCk7CiAKIAlwdm9sZGVzYyA9IChzdHJ1Y3QgcHJpbWFyeVZvbERlc2MgKiliaC0+Yl9kYXRhOwpAQCAtOTE3LDcgKzc5OCw3IEBACiAJaWYgKHVkZl9kaXNrX3N0YW1wX3RvX3RpbWUoJlVERl9TQihzYiktPnNfcmVjb3JkX3RpbWUsCiAJCQkgICAgICBwdm9sZGVzYy0+cmVjb3JkaW5nRGF0ZUFuZFRpbWUpKSB7CiAjaWZkZWYgVURGRlNfREVCVUcKLQkJdGltZXN0YW1wICp0cyA9ICZwdm9sZGVzYy0+cmVjb3JkaW5nRGF0ZUFuZFRpbWU7CisJCXN0cnVjdCB0aW1lc3RhbXAgKnRzID0gJnB2b2xkZXNjLT5yZWNvcmRpbmdEYXRlQW5kVGltZTsKIAkJdWRmX2RlYnVnKCJyZWNvcmRpbmcgdGltZSAlMDR1LyUwMnUvJTAydSIKIAkJCSAgIiAlMDJ1OiUwMnUgKCV4KVxuIiwKIAkJCSAgbGUxNl90b19jcHUodHMtPnllYXIpLCB0cy0+bW9udGgsIHRzLT5kYXksIHRzLT5ob3VyLApAQCAtOTI1LDIwICs4MDYsMjUgQEAKICNlbmRpZgogCX0KIAotCWlmICghdWRmX2J1aWxkX3VzdHIoJmluc3RyLCBwdm9sZGVzYy0+dm9sSWRlbnQsIDMyKSkKLQkJaWYgKHVkZl9DUzB0b1VURjgoJm91dHN0ciwgJmluc3RyKSkgewotCQkJc3RybmNweShVREZfU0Ioc2IpLT5zX3ZvbHVtZV9pZGVudCwgb3V0c3RyLnVfbmFtZSwKLQkJCQlvdXRzdHIudV9sZW4gPiAzMSA/IDMxIDogb3V0c3RyLnVfbGVuKTsKKwlpZiAoIXVkZl9idWlsZF91c3RyKGluc3RyLCBwdm9sZGVzYy0+dm9sSWRlbnQsIDMyKSkKKwkJaWYgKHVkZl9DUzB0b1VURjgob3V0c3RyLCBpbnN0cikpIHsKKwkJCXN0cm5jcHkoVURGX1NCKHNiKS0+c192b2x1bWVfaWRlbnQsIG91dHN0ci0+dV9uYW1lLAorCQkJCW91dHN0ci0+dV9sZW4gPiAzMSA/IDMxIDogb3V0c3RyLT51X2xlbik7CiAJCQl1ZGZfZGVidWcoInZvbElkZW50W10gPSAnJXMnXG4iLAogCQkJCQlVREZfU0Ioc2IpLT5zX3ZvbHVtZV9pZGVudCk7CiAJCX0KIAotCWlmICghdWRmX2J1aWxkX3VzdHIoJmluc3RyLCBwdm9sZGVzYy0+dm9sU2V0SWRlbnQsIDEyOCkpCi0JCWlmICh1ZGZfQ1MwdG9VVEY4KCZvdXRzdHIsICZpbnN0cikpCi0JCQl1ZGZfZGVidWcoInZvbFNldElkZW50W10gPSAnJXMnXG4iLCBvdXRzdHIudV9uYW1lKTsKKwlpZiAoIXVkZl9idWlsZF91c3RyKGluc3RyLCBwdm9sZGVzYy0+dm9sU2V0SWRlbnQsIDEyOCkpCisJCWlmICh1ZGZfQ1MwdG9VVEY4KG91dHN0ciwgaW5zdHIpKQorCQkJdWRmX2RlYnVnKCJ2b2xTZXRJZGVudFtdID0gJyVzJ1xuIiwgb3V0c3RyLT51X25hbWUpOwogCiAJYnJlbHNlKGJoKTsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0MjoKKwlrZnJlZShvdXRzdHIpOworb3V0MToKKwlrZnJlZShpbnN0cik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB1ZGZfbG9hZF9tZXRhZGF0YV9maWxlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcGFydGl0aW9uKQpAQCAtOTQ2LDcgKzgzMiw3IEBACiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcDsKIAlzdHJ1Y3QgdWRmX21ldGFfZGF0YSAqbWRhdGE7Ci0Ja2VybmVsX2xiX2FkZHIgYWRkcjsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgYWRkcjsKIAlpbnQgZmVfZXJyb3IgPSAwOwogCiAJbWFwID0gJnNiaS0+c19wYXJ0bWFwc1twYXJ0aXRpb25dOwpAQCAtOTU5LDcgKzg0NSw3IEBACiAJdWRmX2RlYnVnKCJNZXRhZGF0YSBmaWxlIGxvY2F0aW9uOiBibG9jayA9ICVkIHBhcnQgPSAlZFxuIiwKIAkJCSAgYWRkci5sb2dpY2FsQmxvY2tOdW0sIGFkZHIucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKIAotCW1kYXRhLT5zX21ldGFkYXRhX2ZlID0gdWRmX2lnZXQoc2IsIGFkZHIpOworCW1kYXRhLT5zX21ldGFkYXRhX2ZlID0gdWRmX2lnZXQoc2IsICZhZGRyKTsKIAogCWlmIChtZGF0YS0+c19tZXRhZGF0YV9mZSA9PSBOVUxMKSB7CiAJCXVkZl93YXJuaW5nKHNiLCBfX2Z1bmNfXywgIm1ldGFkYXRhIGlub2RlIGVmZSBub3QgZm91bmQsICIKQEAgLTk4MSw3ICs4NjcsNyBAQAogCXVkZl9kZWJ1ZygiTWlycm9yIG1ldGFkYXRhIGZpbGUgbG9jYXRpb246IGJsb2NrID0gJWQgcGFydCA9ICVkXG4iLAogCQkJICBhZGRyLmxvZ2ljYWxCbG9ja051bSwgYWRkci5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwogCi0JbWRhdGEtPnNfbWlycm9yX2ZlID0gdWRmX2lnZXQoc2IsIGFkZHIpOworCW1kYXRhLT5zX21pcnJvcl9mZSA9IHVkZl9pZ2V0KHNiLCAmYWRkcik7CiAKIAlpZiAobWRhdGEtPnNfbWlycm9yX2ZlID09IE5VTEwpIHsKIAkJaWYgKGZlX2Vycm9yKSB7CkBAIC0xMDEzLDcgKzg5OSw3IEBACiAJCXVkZl9kZWJ1ZygiQml0bWFwIGZpbGUgbG9jYXRpb246IGJsb2NrID0gJWQgcGFydCA9ICVkXG4iLAogCQkJYWRkci5sb2dpY2FsQmxvY2tOdW0sIGFkZHIucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKIAotCQltZGF0YS0+c19iaXRtYXBfZmUgPSB1ZGZfaWdldChzYiwgYWRkcik7CisJCW1kYXRhLT5zX2JpdG1hcF9mZSA9IHVkZl9pZ2V0KHNiLCAmYWRkcik7CiAKIAkJaWYgKG1kYXRhLT5zX2JpdG1hcF9mZSA9PSBOVUxMKSB7CiAJCQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCkBAIC0xMDM3LDcgKzkyMyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9sb2FkX2ZpbGVzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSAgICAga2VybmVsX2xiX2FkZHIgKnJvb3QpCisJCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqcm9vdCkKIHsKIAlzdHJ1Y3QgZmlsZVNldERlc2MgKmZzZXQ7CiAKQEAgLTExMTksMTMgKzEwMDUsMTMgQEAKIAogCXBoZCA9IChzdHJ1Y3QgcGFydGl0aW9uSGVhZGVyRGVzYyAqKXAtPnBhcnRpdGlvbkNvbnRlbnRzVXNlOwogCWlmIChwaGQtPnVuYWxsb2NTcGFjZVRhYmxlLmV4dExlbmd0aCkgewotCQlrZXJuZWxfbGJfYWRkciBsb2MgPSB7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2MgPSB7CiAJCQkubG9naWNhbEJsb2NrTnVtID0gbGUzMl90b19jcHUoCiAJCQkJcGhkLT51bmFsbG9jU3BhY2VUYWJsZS5leHRQb3NpdGlvbiksCiAJCQkucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gcF9pbmRleCwKIAkJfTsKIAotCQltYXAtPnNfdXNwYWNlLnNfdGFibGUgPSB1ZGZfaWdldChzYiwgbG9jKTsKKwkJbWFwLT5zX3VzcGFjZS5zX3RhYmxlID0gdWRmX2lnZXQoc2IsICZsb2MpOwogCQlpZiAoIW1hcC0+c191c3BhY2Uuc190YWJsZSkgewogCQkJdWRmX2RlYnVnKCJjYW5ub3QgbG9hZCB1bmFsbG9jU3BhY2VUYWJsZSAocGFydCAlZClcbiIsCiAJCQkJCXBfaW5kZXgpOwpAQCAtMTE1NCwxMyArMTA0MCwxMyBAQAogCQl1ZGZfZGVidWcoInBhcnRpdGlvbkludGVncml0eVRhYmxlIChwYXJ0ICVkKVxuIiwgcF9pbmRleCk7CiAKIAlpZiAocGhkLT5mcmVlZFNwYWNlVGFibGUuZXh0TGVuZ3RoKSB7Ci0JCWtlcm5lbF9sYl9hZGRyIGxvYyA9IHsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYyA9IHsKIAkJCS5sb2dpY2FsQmxvY2tOdW0gPSBsZTMyX3RvX2NwdSgKIAkJCQlwaGQtPmZyZWVkU3BhY2VUYWJsZS5leHRQb3NpdGlvbiksCiAJCQkucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gcF9pbmRleCwKIAkJfTsKIAotCQltYXAtPnNfZnNwYWNlLnNfdGFibGUgPSB1ZGZfaWdldChzYiwgbG9jKTsKKwkJbWFwLT5zX2ZzcGFjZS5zX3RhYmxlID0gdWRmX2lnZXQoc2IsICZsb2MpOwogCQlpZiAoIW1hcC0+c19mc3BhY2Uuc190YWJsZSkgewogCQkJdWRmX2RlYnVnKCJjYW5ub3QgbG9hZCBmcmVlZFNwYWNlVGFibGUgKHBhcnQgJWQpXG4iLAogCQkJCXBfaW5kZXgpOwpAQCAtMTE5Miw3ICsxMDc4LDcgQEAKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IHVkZl9wYXJ0X21hcCAqbWFwID0gJnNiaS0+c19wYXJ0bWFwc1twX2luZGV4XTsKLQlrZXJuZWxfbGJfYWRkciBpbm87CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGlubzsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKnZhdGk7CiAJdWludDMyX3QgcG9zOwpAQCAtMTIwMSw3ICsxMDg3LDcgQEAKIAkvKiBWQVQgZmlsZSBlbnRyeSBpcyBpbiB0aGUgbGFzdCByZWNvcmRlZCBibG9jayAqLwogCWluby5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSB0eXBlMV9pbmRleDsKIAlpbm8ubG9naWNhbEJsb2NrTnVtID0gc2JpLT5zX2xhc3RfYmxvY2sgLSBtYXAtPnNfcGFydGl0aW9uX3Jvb3Q7Ci0Jc2JpLT5zX3ZhdF9pbm9kZSA9IHVkZl9pZ2V0KHNiLCBpbm8pOworCXNiaS0+c192YXRfaW5vZGUgPSB1ZGZfaWdldChzYiwgJmlubyk7CiAJaWYgKCFzYmktPnNfdmF0X2lub2RlKQogCQlyZXR1cm4gMTsKIApAQCAtMTMyMiw3ICsxMjA4LDcgQEAKIH0KIAogc3RhdGljIGludCB1ZGZfbG9hZF9sb2dpY2Fsdm9sKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGJsb2NrLAotCQkJICAgICAgIGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQorCQkJICAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKIHsKIAlzdHJ1Y3QgbG9naWNhbFZvbERlc2MgKmx2ZDsKIAlpbnQgaSwgaiwgb2Zmc2V0OwpAQCAtMTQ3MSw3ICsxMzU3LDcgQEAKIAl9CiAKIAlpZiAoZmlsZXNldCkgewotCQlsb25nX2FkICpsYSA9IChsb25nX2FkICopJihsdmQtPmxvZ2ljYWxWb2xDb250ZW50c1VzZVswXSk7CisJCXN0cnVjdCBsb25nX2FkICpsYSA9IChzdHJ1Y3QgbG9uZ19hZCAqKSYobHZkLT5sb2dpY2FsVm9sQ29udGVudHNVc2VbMF0pOwogCiAJCSpmaWxlc2V0ID0gbGVsYl90b19jcHUobGEtPmV4dExvY2F0aW9uKTsKIAkJdWRmX2RlYnVnKCJGaWxlU2V0IGZvdW5kIGluIExvZ2ljYWxWb2xEZXNjIGF0IGJsb2NrPSVkLCAiCkBAIC0xNDkwLDcgKzEzNzYsNyBAQAogICogdWRmX2xvYWRfbG9naWNhbHZvbGludAogICoKICAqLwotc3RhdGljIHZvaWQgdWRmX2xvYWRfbG9naWNhbHZvbGludChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBrZXJuZWxfZXh0ZW50X2FkIGxvYykKK3N0YXRpYyB2b2lkIHVkZl9sb2FkX2xvZ2ljYWx2b2xpbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9leHRlbnRfYWQgbG9jKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXVpbnQxNl90IGlkZW50OwpAQCAtMTUzMyw3ICsxNDE5LDcgQEAKICAqCVdyaXR0ZW4sIHRlc3RlZCwgYW5kIHJlbGVhc2VkLgogICovCiBzdGF0aWMgbm9pbmxpbmUgaW50IHVkZl9wcm9jZXNzX3NlcXVlbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ssCi0JCQkJbG9uZyBsYXN0YmxvY2ssIGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQorCQkJCWxvbmcgbGFzdGJsb2NrLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IHVkZl92ZHNfcmVjb3JkIHZkc1tWRFNfUE9TX0xFTkdUSF07CkBAIC0xNjU1LDk2ICsxNTQxLDIxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogdWRmX2NoZWNrX3ZhbGlkKCkKLSAqLwotc3RhdGljIGludCB1ZGZfY2hlY2tfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG5vdnJzLCBpbnQgc2lsZW50KQotewotCWxvbmcgYmxvY2s7Ci0Jc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwotCi0JaWYgKG5vdnJzKSB7Ci0JCXVkZl9kZWJ1ZygiVmFsaWRpdHkgY2hlY2sgc2tpcHBlZCBiZWNhdXNlIG9mIG5vdnJzIG9wdGlvblxuIik7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBDaGVjayB0aGF0IGl0IGlzIE5TUjAyIGNvbXBsaWFudCAqLwotCS8qIFByb2Nlc3MgYW55ICJDRC1ST00gVm9sdW1lIERlc2NyaXB0b3IgU2V0IiAoRUNNQSAxNjcgMi84LjMuMSkgKi8KLQlibG9jayA9IHVkZl92cnMoc2IsIHNpbGVudCk7Ci0JaWYgKGJsb2NrID09IC0xKQotCQl1ZGZfZGVidWcoIkZhaWxlZCB0byByZWFkIGJ5dGUgMzI3NjguIEFzc3VtaW5nIG9wZW4gIgotCQkJICAiZGlzYy4gU2tpcHBpbmcgdmFsaWRpdHkgY2hlY2tcbiIpOwotCWlmIChibG9jayAmJiAhc2JpLT5zX2xhc3RfYmxvY2spCi0JCXNiaS0+c19sYXN0X2Jsb2NrID0gdWRmX2dldF9sYXN0X2Jsb2NrKHNiKTsKLQlyZXR1cm4gIWJsb2NrOwotfQotCi1zdGF0aWMgaW50IHVkZl9sb2FkX3NlcXVlbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQorc3RhdGljIGludCB1ZGZfbG9hZF9zZXF1ZW5jZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCiB7CiAJc3RydWN0IGFuY2hvclZvbERlc2NQdHIgKmFuY2hvcjsKLQl1aW50MTZfdCBpZGVudDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWxvbmcgbWFpbl9zLCBtYWluX2UsIHJlc2VydmVfcywgcmVzZXJ2ZV9lOwotCWludCBpOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpOwogCi0JaWYgKCFzYikKLQkJcmV0dXJuIDE7CiAJc2JpID0gVURGX1NCKHNiKTsKKwlhbmNob3IgPSAoc3RydWN0IGFuY2hvclZvbERlc2NQdHIgKiliaC0+Yl9kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2JpLT5zX2FuY2hvcik7IGkrKykgewotCQlpZiAoIXNiaS0+c19hbmNob3JbaV0pCi0JCQljb250aW51ZTsKKwkvKiBMb2NhdGUgdGhlIG1haW4gc2VxdWVuY2UgKi8KKwltYWluX3MgPSBsZTMyX3RvX2NwdShhbmNob3ItPm1haW5Wb2xEZXNjU2VxRXh0LmV4dExvY2F0aW9uKTsKKwltYWluX2UgPSBsZTMyX3RvX2NwdShhbmNob3ItPm1haW5Wb2xEZXNjU2VxRXh0LmV4dExlbmd0aCk7CisJbWFpbl9lID0gbWFpbl9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCW1haW5fZSArPSBtYWluX3M7CiAKLQkJYmggPSB1ZGZfcmVhZF90YWdnZWQoc2IsIHNiaS0+c19hbmNob3JbaV0sIHNiaS0+c19hbmNob3JbaV0sCi0JCQkJICAgICAmaWRlbnQpOwotCQlpZiAoIWJoKQotCQkJY29udGludWU7CisJLyogTG9jYXRlIHRoZSByZXNlcnZlIHNlcXVlbmNlICovCisJcmVzZXJ2ZV9zID0gbGUzMl90b19jcHUoYW5jaG9yLT5yZXNlcnZlVm9sRGVzY1NlcUV4dC5leHRMb2NhdGlvbik7CisJcmVzZXJ2ZV9lID0gbGUzMl90b19jcHUoYW5jaG9yLT5yZXNlcnZlVm9sRGVzY1NlcUV4dC5leHRMZW5ndGgpOworCXJlc2VydmVfZSA9IHJlc2VydmVfZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwlyZXNlcnZlX2UgKz0gcmVzZXJ2ZV9zOwogCi0JCWFuY2hvciA9IChzdHJ1Y3QgYW5jaG9yVm9sRGVzY1B0ciAqKWJoLT5iX2RhdGE7Ci0KLQkJLyogTG9jYXRlIHRoZSBtYWluIHNlcXVlbmNlICovCi0JCW1haW5fcyA9IGxlMzJfdG9fY3B1KGFuY2hvci0+bWFpblZvbERlc2NTZXFFeHQuZXh0TG9jYXRpb24pOwotCQltYWluX2UgPSBsZTMyX3RvX2NwdShhbmNob3ItPm1haW5Wb2xEZXNjU2VxRXh0LmV4dExlbmd0aCk7Ci0JCW1haW5fZSA9IG1haW5fZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKLQkJbWFpbl9lICs9IG1haW5fczsKLQotCQkvKiBMb2NhdGUgdGhlIHJlc2VydmUgc2VxdWVuY2UgKi8KLQkJcmVzZXJ2ZV9zID0gbGUzMl90b19jcHUoCi0JCQkJYW5jaG9yLT5yZXNlcnZlVm9sRGVzY1NlcUV4dC5leHRMb2NhdGlvbik7Ci0JCXJlc2VydmVfZSA9IGxlMzJfdG9fY3B1KAotCQkJCWFuY2hvci0+cmVzZXJ2ZVZvbERlc2NTZXFFeHQuZXh0TGVuZ3RoKTsKLQkJcmVzZXJ2ZV9lID0gcmVzZXJ2ZV9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCQlyZXNlcnZlX2UgKz0gcmVzZXJ2ZV9zOwotCi0JCWJyZWxzZShiaCk7Ci0KLQkJLyogUHJvY2VzcyB0aGUgbWFpbiAmIHJlc2VydmUgc2VxdWVuY2VzICovCi0JCS8qIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZSBQYXJ0aXRpb25EZXNjKHMpICovCi0JCWlmICghKHVkZl9wcm9jZXNzX3NlcXVlbmNlKHNiLCBtYWluX3MsIG1haW5fZSwKLQkJCQkJICAgZmlsZXNldCkgJiYKLQkJICAgICAgdWRmX3Byb2Nlc3Nfc2VxdWVuY2Uoc2IsIHJlc2VydmVfcywgcmVzZXJ2ZV9lLAotCQkJCQkgICBmaWxlc2V0KSkpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNiaS0+c19hbmNob3IpKSB7Ci0JCXVkZl9kZWJ1ZygiTm8gQW5jaG9yIGJsb2NrIGZvdW5kXG4iKTsKKwkvKiBQcm9jZXNzIHRoZSBtYWluICYgcmVzZXJ2ZSBzZXF1ZW5jZXMgKi8KKwkvKiByZXNwb25zaWJsZSBmb3IgZmluZGluZyB0aGUgUGFydGl0aW9uRGVzYyhzKSAqLworCWlmICghdWRmX3Byb2Nlc3Nfc2VxdWVuY2Uoc2IsIG1haW5fcywgbWFpbl9lLCBmaWxlc2V0KSkKIAkJcmV0dXJuIDE7Ci0JfQotCXVkZl9kZWJ1ZygiVXNpbmcgYW5jaG9yIGluIGJsb2NrICVkXG4iLCBzYmktPnNfYW5jaG9yW2ldKTsKKwlyZXR1cm4gIXVkZl9wcm9jZXNzX3NlcXVlbmNlKHNiLCByZXNlcnZlX3MsIHJlc2VydmVfZSwgZmlsZXNldCk7Cit9CiAKKy8qCisgKiBDaGVjayB3aGV0aGVyIHRoZXJlIGlzIGFuIGFuY2hvciBibG9jayBpbiB0aGUgZ2l2ZW4gYmxvY2sgYW5kCisgKiBsb2FkIFZvbHVtZSBEZXNjcmlwdG9yIFNlcXVlbmNlIGlmIHNvLgorICovCitzdGF0aWMgaW50IHVkZl9jaGVja19hbmNob3JfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2ssCisJCQkJICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwl1aW50MTZfdCBpZGVudDsKKwlpbnQgcmV0OworCisJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKSAmJgorCSAgICB1ZGZfZml4ZWRfdG9fdmFyaWFibGUoYmxvY2spID49CisJICAgIHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpCisJCXJldHVybiAwOworCisJYmggPSB1ZGZfcmVhZF90YWdnZWQoc2IsIGJsb2NrLCBibG9jaywgJmlkZW50KTsKKwlpZiAoIWJoKQorCQlyZXR1cm4gMDsKKwlpZiAoaWRlbnQgIT0gVEFHX0lERU5UX0FWRFApIHsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldCA9IHVkZl9sb2FkX3NlcXVlbmNlKHNiLCBiaCwgZmlsZXNldCk7CisJYnJlbHNlKGJoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZWFyY2ggZm9yIGFuIGFuY2hvciB2b2x1bWUgZGVzY3JpcHRvciBwb2ludGVyICovCitzdGF0aWMgc2VjdG9yX3QgdWRmX3NjYW5fYW5jaG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBsYXN0YmxvY2ssCisJCQkJIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKK3sKKwlzZWN0b3JfdCBsYXN0WzZdOworCWludCBpOworCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKwlpbnQgbGFzdF9jb3VudCA9IDA7CisKKwkvKiBGaXJzdCB0cnkgdXNlciBwcm92aWRlZCBhbmNob3IgKi8KKwlpZiAoc2JpLT5zX2FuY2hvcikgeworCQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgc2JpLT5zX2FuY2hvciwgZmlsZXNldCkpCisJCQlyZXR1cm4gbGFzdGJsb2NrOworCX0KKwkvKgorCSAqIGFjY29yZGluZyB0byBzcGVjLCBhbmNob3IgaXMgaW4gZWl0aGVyOgorCSAqICAgICBibG9jayAyNTYKKwkgKiAgICAgbGFzdGJsb2NrLTI1NgorCSAqICAgICBsYXN0YmxvY2sKKwkgKiAgaG93ZXZlciwgaWYgdGhlIGRpc2MgaXNuJ3QgY2xvc2VkLCBpdCBjb3VsZCBiZSA1MTIuCisJICovCisJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIHNiaS0+c19zZXNzaW9uICsgMjU2LCBmaWxlc2V0KSkKKwkJcmV0dXJuIGxhc3RibG9jazsKKwkvKgorCSAqIFRoZSB0cm91YmxlIGlzIHdoaWNoIGJsb2NrIGlzIHRoZSBsYXN0IG9uZS4gRHJpdmVzIG9mdGVuIG1pc3JlcG9ydAorCSAqIHRoaXMgc28gd2UgdHJ5IHZhcmlvdXMgcG9zc2liaWxpdGllcy4KKwkgKi8KKwlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2s7CisJaWYgKGxhc3RibG9jayA+PSAxKQorCQlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2sgLSAxOworCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jayArIDE7CisJaWYgKGxhc3RibG9jayA+PSAyKQorCQlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2sgLSAyOworCWlmIChsYXN0YmxvY2sgPj0gMTUwKQorCQlsYXN0W2xhc3RfY291bnQrK10gPSBsYXN0YmxvY2sgLSAxNTA7CisJaWYgKGxhc3RibG9jayA+PSAxNTIpCisJCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jayAtIDE1MjsKKworCWZvciAoaSA9IDA7IGkgPCBsYXN0X2NvdW50OyBpKyspIHsKKwkJaWYgKGxhc3RbaV0gPj0gc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PgorCQkJCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKQorCQkJY29udGludWU7CisJCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBsYXN0W2ldLCBmaWxlc2V0KSkKKwkJCXJldHVybiBsYXN0W2ldOworCQlpZiAobGFzdFtpXSA8IDI1NikKKwkJCWNvbnRpbnVlOworCQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgbGFzdFtpXSAtIDI1NiwgZmlsZXNldCkpCisJCQlyZXR1cm4gbGFzdFtpXTsKKwl9CisKKwkvKiBGaW5hbGx5IHRyeSBibG9jayA1MTIgaW4gY2FzZSBtZWRpYSBpcyBvcGVuICovCisJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIHNiaS0+c19zZXNzaW9uICsgNTEyLCBmaWxlc2V0KSkKKwkJcmV0dXJuIGxhc3RbMF07CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBGaW5kIGFuIGFuY2hvciB2b2x1bWUgZGVzY3JpcHRvciBhbmQgbG9hZCBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5jZSBmcm9tCisgKiBhcmVhIHNwZWNpZmllZCBieSBpdC4gVGhlIGZ1bmN0aW9uIGV4cGVjdHMgc2JpLT5zX2xhc3RibG9jayB0byBiZSB0aGUgbGFzdAorICogYmxvY2sgb24gdGhlIG1lZGlhLgorICoKKyAqIFJldHVybiAxIGlmIG9rLCAwIGlmIG5vdCBmb3VuZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQgdWRmX2ZpbmRfYW5jaG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCit7CisJc2VjdG9yX3QgbGFzdGJsb2NrOworCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKworCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsIHNiaS0+c19sYXN0X2Jsb2NrLCBmaWxlc2V0KTsKKwlpZiAobGFzdGJsb2NrKQorCQlnb3RvIG91dDsKKworCS8qIE5vIGFuY2hvciBmb3VuZD8gVHJ5IFZBUkNPTlYgY29udmVyc2lvbiBvZiBibG9jayBudW1iZXJzICovCisJVURGX1NFVF9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKTsKKwkvKiBGaXJzdGx5LCB3ZSB0cnkgdG8gbm90IGNvbnZlcnQgbnVtYmVyIG9mIHRoZSBsYXN0IGJsb2NrICovCisJbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwKKwkJCQl1ZGZfdmFyaWFibGVfdG9fZml4ZWQoc2JpLT5zX2xhc3RfYmxvY2spLAorCQkJCWZpbGVzZXQpOworCWlmIChsYXN0YmxvY2spCisJCWdvdG8gb3V0OworCisJLyogU2Vjb25kbHksIHdlIHRyeSB3aXRoIGNvbnZlcnRlZCBudW1iZXIgb2YgdGhlIGxhc3QgYmxvY2sgKi8KKwlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLCBzYmktPnNfbGFzdF9ibG9jaywgZmlsZXNldCk7CisJaWYgKCFsYXN0YmxvY2spIHsKKwkJLyogVkFSQ09OViBkaWRuJ3QgaGVscC4gQ2xlYXIgaXQuICovCisJCVVERl9DTEVBUl9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKTsKKwkJcmV0dXJuIDA7CisJfQorb3V0OgorCXNiaS0+c19sYXN0X2Jsb2NrID0gbGFzdGJsb2NrOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgVm9sdW1lIFN0cnVjdHVyZSBEZXNjcmlwdG9yLCBmaW5kIEFuY2hvciBibG9jayBhbmQgbG9hZCBWb2x1bWUKKyAqIERlc2NyaXB0b3IgU2VxdWVuY2UKKyAqLworc3RhdGljIGludCB1ZGZfbG9hZF92cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHVkZl9vcHRpb25zICp1b3B0LAorCQkJaW50IHNpbGVudCwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQoreworCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKwlsb2ZmX3QgbnNyX29mZjsKKworCWlmICghc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgdW9wdC0+YmxvY2tzaXplKSkgeworCQlpZiAoIXNpbGVudCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVERi1mczogQmFkIGJsb2NrIHNpemVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJc2JpLT5zX2xhc3RfYmxvY2sgPSB1b3B0LT5sYXN0YmxvY2s7CisJaWYgKCF1b3B0LT5ub3ZycykgeworCQkvKiBDaGVjayB0aGF0IGl0IGlzIE5TUjAyIGNvbXBsaWFudCAqLworCQluc3Jfb2ZmID0gdWRmX2NoZWNrX3ZzZChzYik7CisJCWlmICghbnNyX29mZikgeworCQkJaWYgKCFzaWxlbnQpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVURGLWZzOiBObyBWUlMgZm91bmRcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG5zcl9vZmYgPT0gLTEpCisJCQl1ZGZfZGVidWcoIkZhaWxlZCB0byByZWFkIGJ5dGUgMzI3NjguIEFzc3VtaW5nIG9wZW4gIgorCQkJCSAgImRpc2MuIFNraXBwaW5nIHZhbGlkaXR5IGNoZWNrXG4iKTsKKwkJaWYgKCFzYmktPnNfbGFzdF9ibG9jaykKKwkJCXNiaS0+c19sYXN0X2Jsb2NrID0gdWRmX2dldF9sYXN0X2Jsb2NrKHNiKTsKKwl9IGVsc2UgeworCQl1ZGZfZGVidWcoIlZhbGlkaXR5IGNoZWNrIHNraXBwZWQgYmVjYXVzZSBvZiBub3ZycyBvcHRpb25cbiIpOworCX0KKworCS8qIExvb2sgZm9yIGFuY2hvciBibG9jayBhbmQgbG9hZCBWb2x1bWUgRGVzY3JpcHRvciBTZXF1ZW5jZSAqLworCXNiaS0+c19hbmNob3IgPSB1b3B0LT5hbmNob3I7CisJaWYgKCF1ZGZfZmluZF9hbmNob3Ioc2IsIGZpbGVzZXQpKSB7CisJCWlmICghc2lsZW50KQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVURGLWZzOiBObyBhbmNob3IgZm91bmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyB2b2lkIHVkZl9vcGVuX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IHNiaS0+c19sdmlkX2JoOwogCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqbHZpZDsKIAlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2NJbXBVc2UgKmx2aWRpdTsKKwogCWlmICghYmgpCiAJCXJldHVybjsKLQogCWx2aWQgPSAoc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICopYmgtPmJfZGF0YTsKIAlsdmlkaXUgPSB1ZGZfc2JfbHZpZGl1KHNiaSk7CiAKQEAgLTE3NTIsMTQgKzE3NTIsMTUgQEAKIAlsdmlkaXUtPmltcElkZW50LmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwogCXVkZl90aW1lX3RvX2Rpc2tfc3RhbXAoJmx2aWQtPnJlY29yZGluZ0RhdGVBbmRUaW1lLAogCQkJCUNVUlJFTlRfVElNRSk7Ci0JbHZpZC0+aW50ZWdyaXR5VHlwZSA9IExWSURfSU5URUdSSVRZX1RZUEVfT1BFTjsKKwlsdmlkLT5pbnRlZ3JpdHlUeXBlID0gY3B1X3RvX2xlMzIoTFZJRF9JTlRFR1JJVFlfVFlQRV9PUEVOKTsKIAogCWx2aWQtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KAotCQljcmNfaXR1X3QoMCwgKGNoYXIgKilsdmlkICsgc2l6ZW9mKHRhZyksCisJCWNyY19pdHVfdCgwLCAoY2hhciAqKWx2aWQgKyBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQlsZTE2X3RvX2NwdShsdmlkLT5kZXNjVGFnLmRlc2NDUkNMZW5ndGgpKSk7CiAKIAlsdmlkLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmbHZpZC0+ZGVzY1RhZyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOworCXNiaS0+c19sdmlkX2RpcnR5ID0gMDsKIH0KIAogc3RhdGljIHZvaWQgdWRmX2Nsb3NlX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTE3NzMsMTAgKzE3NzQsNiBAQAogCQlyZXR1cm47CiAKIAlsdmlkID0gKHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqKWJoLT5iX2RhdGE7Ci0KLQlpZiAobHZpZC0+aW50ZWdyaXR5VHlwZSAhPSBMVklEX0lOVEVHUklUWV9UWVBFX09QRU4pCi0JCXJldHVybjsKLQogCWx2aWRpdSA9IHVkZl9zYl9sdmlkaXUoc2JpKTsKIAlsdmlkaXUtPmltcElkZW50LmlkZW50U3VmZml4WzBdID0gVURGX09TX0NMQVNTX1VOSVg7CiAJbHZpZGl1LT5pbXBJZGVudC5pZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDsKQEAgLTE3OTAsMTEgKzE3ODcsMTIgQEAKIAlsdmlkLT5pbnRlZ3JpdHlUeXBlID0gY3B1X3RvX2xlMzIoTFZJRF9JTlRFR1JJVFlfVFlQRV9DTE9TRSk7CiAKIAlsdmlkLT5kZXNjVGFnLmRlc2NDUkMgPSBjcHVfdG9fbGUxNigKLQkJCWNyY19pdHVfdCgwLCAoY2hhciAqKWx2aWQgKyBzaXplb2YodGFnKSwKKwkJCWNyY19pdHVfdCgwLCAoY2hhciAqKWx2aWQgKyBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJbGUxNl90b19jcHUobHZpZC0+ZGVzY1RhZy5kZXNjQ1JDTGVuZ3RoKSkpOwogCiAJbHZpZC0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmx2aWQtPmRlc2NUYWcpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwlzYmktPnNfbHZpZF9kaXJ0eSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9zYl9mcmVlX2JpdG1hcChzdHJ1Y3QgdWRmX2JpdG1hcCAqYml0bWFwKQpAQCAtMTg0NiwxNSArMTg0NCwxOCBAQAogc3RhdGljIGludCB1ZGZfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpvcHRpb25zLCBpbnQgc2lsZW50KQogewogCWludCBpOworCWludCByZXQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IHVkZl9vcHRpb25zIHVvcHQ7Ci0Ja2VybmVsX2xiX2FkZHIgcm9vdGRpciwgZmlsZXNldDsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgcm9vdGRpciwgZmlsZXNldDsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaTsKIAogCXVvcHQuZmxhZ3MgPSAoMSA8PCBVREZfRkxBR19VU0VfQURfSU5fSUNCKSB8ICgxIDw8IFVERl9GTEFHX1NUUklDVCk7CiAJdW9wdC51aWQgPSAtMTsKIAl1b3B0LmdpZCA9IC0xOwogCXVvcHQudW1hc2sgPSAwOworCXVvcHQuZm1vZGUgPSBVREZfSU5WQUxJRF9NT0RFOworCXVvcHQuZG1vZGUgPSBVREZfSU5WQUxJRF9NT0RFOwogCiAJc2JpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVkZl9zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCkBAIC0xODkyLDE1ICsxODkzLDEwIEBACiAJc2JpLT5zX3VpZCA9IHVvcHQudWlkOwogCXNiaS0+c19naWQgPSB1b3B0LmdpZDsKIAlzYmktPnNfdW1hc2sgPSB1b3B0LnVtYXNrOworCXNiaS0+c19mbW9kZSA9IHVvcHQuZm1vZGU7CisJc2JpLT5zX2Rtb2RlID0gdW9wdC5kbW9kZTsKIAlzYmktPnNfbmxzX21hcCA9IHVvcHQubmxzX21hcDsKIAotCS8qIFNldCB0aGUgYmxvY2sgc2l6ZSBmb3IgYWxsIHRyYW5zZmVycyAqLwotCWlmICghc2JfbWluX2Jsb2Nrc2l6ZShzYiwgdW9wdC5ibG9ja3NpemUpKSB7Ci0JCXVkZl9kZWJ1ZygiQmFkIGJsb2NrIHNpemUgKCVkKVxuIiwgdW9wdC5ibG9ja3NpemUpOwotCQlwcmludGsoS0VSTl9FUlIgInVkZjogYmFkIGJsb2NrIHNpemUgKCVkKVxuIiwgdW9wdC5ibG9ja3NpemUpOwotCQlnb3RvIGVycm9yX291dDsKLQl9Ci0KIAlpZiAodW9wdC5zZXNzaW9uID09IDB4RkZGRkZGRkYpCiAJCXNiaS0+c19zZXNzaW9uID0gdWRmX2dldF9sYXN0X3Nlc3Npb24oc2IpOwogCWVsc2UKQEAgLTE5MDgsMTggKzE5MDQsNiBAQAogCiAJdWRmX2RlYnVnKCJNdWx0aS1zZXNzaW9uPSVkXG4iLCBzYmktPnNfc2Vzc2lvbik7CiAKLQlzYmktPnNfbGFzdF9ibG9jayA9IHVvcHQubGFzdGJsb2NrOwotCXNiaS0+c19hbmNob3JbMF0gPSBzYmktPnNfYW5jaG9yWzFdID0gMDsKLQlzYmktPnNfYW5jaG9yWzJdID0gdW9wdC5hbmNob3I7Ci0KLQlpZiAodWRmX2NoZWNrX3ZhbGlkKHNiLCB1b3B0Lm5vdnJzLCBzaWxlbnQpKSB7Ci0JCS8qIHJlYWQgdm9sdW1lIHJlY29nbml0aW9uIHNlcXVlbmNlcyAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnM6IE5vIFZSUyBmb3VuZFxuIik7Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQotCXVkZl9maW5kX2FuY2hvcihzYik7Ci0KIAkvKiBGaWxsIGluIHRoZSByZXN0IG9mIHRoZSBzdXBlcmJsb2NrICovCiAJc2ItPnNfb3AgPSAmdWRmX3NiX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmdWRmX2V4cG9ydF9vcHM7CkBAIC0xOTI4LDcgKzE5MTIsMjEgQEAKIAlzYi0+c19tYWdpYyA9IFVERl9TVVBFUl9NQUdJQzsKIAlzYi0+c190aW1lX2dyYW4gPSAxMDAwOwogCi0JaWYgKHVkZl9sb2FkX3NlcXVlbmNlKHNiLCAmZmlsZXNldCkpIHsKKwlpZiAodW9wdC5mbGFncyAmICgxIDw8IFVERl9GTEFHX0JMT0NLU0laRV9TRVQpKSB7CisJCXJldCA9IHVkZl9sb2FkX3ZycyhzYiwgJnVvcHQsIHNpbGVudCwgJmZpbGVzZXQpOworCX0gZWxzZSB7CisJCXVvcHQuYmxvY2tzaXplID0gYmRldl9oYXJkc2VjdF9zaXplKHNiLT5zX2JkZXYpOworCQlyZXQgPSB1ZGZfbG9hZF92cnMoc2IsICZ1b3B0LCBzaWxlbnQsICZmaWxlc2V0KTsKKwkJaWYgKCFyZXQgJiYgdW9wdC5ibG9ja3NpemUgIT0gVURGX0RFRkFVTFRfQkxPQ0tTSVpFKSB7CisJCQlpZiAoIXNpbGVudCkKKwkJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCQkgICAgICAgIlVERi1mczogUmVzY2FubmluZyB3aXRoIGJsb2Nrc2l6ZSAiCisJCQkJICAgICAgICIlZFxuIiwgVURGX0RFRkFVTFRfQkxPQ0tTSVpFKTsKKwkJCXVvcHQuYmxvY2tzaXplID0gVURGX0RFRkFVTFRfQkxPQ0tTSVpFOworCQkJcmV0ID0gdWRmX2xvYWRfdnJzKHNiLCAmdW9wdCwgc2lsZW50LCAmZmlsZXNldCk7CisJCX0KKwl9CisJaWYgKCFyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVURGLWZzOiBObyBwYXJ0aXRpb24gZm91bmQgKDEpXG4iKTsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQpAQCAtMTk3OCw3ICsxOTc2LDcgQEAKIAl9CiAKIAlpZiAoIXNpbGVudCkgewotCQl0aW1lc3RhbXAgdHM7CisJCXN0cnVjdCB0aW1lc3RhbXAgdHM7CiAJCXVkZl90aW1lX3RvX2Rpc2tfc3RhbXAoJnRzLCBzYmktPnNfcmVjb3JkX3RpbWUpOwogCQl1ZGZfaW5mbygiVURGOiBNb3VudGluZyB2b2x1bWUgJyVzJywgIgogCQkJICJ0aW1lc3RhbXAgJTA0dS8lMDJ1LyUwMnUgJTAydTolMDJ1ICgleClcbiIsCkBAIC0xOTkxLDcgKzE5ODksNyBAQAogCS8qIEFzc2lnbiB0aGUgcm9vdCBpbm9kZSAqLwogCS8qIGFzc2lnbiBpbm9kZXMgYnkgcGh5c2ljYWwgYmxvY2sgbnVtYmVyICovCiAJLyogcGVyaGFwcyBpdCdzIG5vdCBleHRlbnNpYmxlIGVub3VnaCwgYnV0IGZvciBub3cgLi4uICovCi0JaW5vZGUgPSB1ZGZfaWdldChzYiwgcm9vdGRpcik7CisJaW5vZGUgPSB1ZGZfaWdldChzYiwgJnJvb3RkaXIpOwogCWlmICghaW5vZGUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVREYtZnM6IEVycm9yIGluIHVkZl9pZ2V0LCBibG9jaz0lZCwgIgogCQkJCSJwYXJ0aXRpb249JWRcbiIsCkBAIC0yMDgxLDExICsyMDc5LDMxIEBACiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgdWRmX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCit7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCisJbXV0ZXhfbG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKKwlpZiAoc2JpLT5zX2x2aWRfZGlydHkpIHsKKwkJLyoKKwkJICogQmxvY2tkZXZpY2Ugd2lsbCBiZSBzeW5jZWQgbGF0ZXIgc28gd2UgZG9uJ3QgaGF2ZSB0byBzdWJtaXQKKwkJICogdGhlIGJ1ZmZlciBmb3IgSU8KKwkJICovCisJCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwkJc2ItPnNfZGlydCA9IDA7CisJCXNiaS0+c19sdmlkX2RpcnR5ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdWRmX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjSW1wVXNlICpsdmlkaXU7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlpZiAoc2JpLT5zX2x2aWRfYmggIT0gTlVMTCkKIAkJbHZpZGl1ID0gdWRmX3NiX2x2aWRpdShzYmkpOwpAQCAtMjEwMSw4ICsyMTE5LDkgQEAKIAkJCQkJICBsZTMyX3RvX2NwdShsdmlkaXUtPm51bURpcnMpKSA6IDApCiAJCQkrIGJ1Zi0+Zl9iZnJlZTsKIAlidWYtPmZfZmZyZWUgPSBidWYtPmZfYmZyZWU7Ci0JLyogX19rZXJuZWxfZnNpZF90IGZfZnNpZCAqLwogCWJ1Zi0+Zl9uYW1lbGVuID0gVURGX05BTUVfTEVOIC0gMjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjExNCw3ICsyMTMzLDcgQEAKIAl1bnNpZ25lZCBpbnQgYWNjdW0gPSAwOwogCWludCBpbmRleDsKIAlpbnQgYmxvY2sgPSAwLCBuZXdibG9jazsKLQlrZXJuZWxfbGJfYWRkciBsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKIAl1aW50MzJfdCBieXRlczsKIAl1aW50OF90ICpwdHI7CiAJdWludDE2X3QgaWRlbnQ7CkBAIC0yMTI0LDcgKzIxNDMsNyBAQAogCiAJbG9jLmxvZ2ljYWxCbG9ja051bSA9IGJpdG1hcC0+c19leHRQb3NpdGlvbjsKIAlsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gVURGX1NCKHNiKS0+c19wYXJ0aXRpb247Ci0JYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCBsb2MsIDAsICZpZGVudCk7CisJYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCAmbG9jLCAwLCAmaWRlbnQpOwogCiAJaWYgKCFiaCkgewogCQlwcmludGsoS0VSTl9FUlIgInVkZjogdWRmX2NvdW50X2ZyZWUgZmFpbGVkXG4iKTsKQEAgLTIxNDcsNyArMjE2Niw3IEBACiAJCWJ5dGVzIC09IGN1cl9ieXRlczsKIAkJaWYgKGJ5dGVzKSB7CiAJCQlicmVsc2UoYmgpOwotCQkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgbG9jLCArK2Jsb2NrKTsKKwkJCW5ld2Jsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soc2IsICZsb2MsICsrYmxvY2spOwogCQkJYmggPSB1ZGZfdHJlYWQoc2IsIG5ld2Jsb2NrKTsKIAkJCWlmICghYmgpIHsKIAkJCQl1ZGZfZGVidWcoInJlYWQgZmFpbGVkXG4iKTsKQEAgLTIxNzAsNyArMjE4OSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGFjY3VtID0gMDsKIAl1aW50MzJfdCBlbGVuOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIApkaWZmIC0tZ2l0IGEvZnMvdWRmL3RydW5jYXRlLmMgYi9mcy91ZGYvdHJ1bmNhdGUuYwppbmRleCA2NWUxOWI0Li4yMjU1MjdjIDEwMDY0NAotLS0gYS9mcy91ZGYvdHJ1bmNhdGUuYworKysgYi9mcy91ZGYvdHJ1bmNhdGUuYwpAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSAidWRmX3NiLmgiCiAKIHN0YXRpYyB2b2lkIGV4dGVudF90cnVuYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkJIGtlcm5lbF9sYl9hZGRyIGVsb2MsIGludDhfdCBldHlwZSwgdWludDMyX3QgZWxlbiwKKwkJCSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIGludDhfdCBldHlwZSwgdWludDMyX3QgZWxlbiwKIAkJCSB1aW50MzJfdCBuZWxlbikKIHsKLQlrZXJuZWxfbGJfYWRkciBuZWxvYyA9IHt9OworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBuZWxvYyA9IHt9OwogCWludCBsYXN0X2Jsb2NrID0gKGVsZW4gKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSA+PgogCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAlpbnQgZmlyc3RfYmxvY2sgPSAobmVsZW4gKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSA+PgpAQCAtNDMsMTIgKzQzLDEyIEBACiAJCQkJCWxhc3RfYmxvY2spOwogCQkJZXR5cGUgPSAoRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEID4+IDMwKTsKIAkJfSBlbHNlCi0JCQluZWxvYyA9IGVsb2M7CisJCQluZWxvYyA9ICplbG9jOwogCQluZWxlbiA9IChldHlwZSA8PCAzMCkgfCBuZWxlbjsKIAl9CiAKIAlpZiAoZWxlbiAhPSBuZWxlbikgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgZXBvcywgbmVsb2MsIG5lbGVuLCAwKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGVwb3MsICZuZWxvYywgbmVsZW4sIDApOwogCQlpZiAobGFzdF9ibG9jayAtIGZpcnN0X2Jsb2NrID4gMCkgewogCQkJaWYgKGV0eXBlID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKIAkJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTY4LDcgKzY4LDcgQEAKIHZvaWQgdWRmX3RydW5jYXRlX3RhaWxfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuLCBuZWxlbjsKIAl1aW50NjRfdCBsYmNvdW50ID0gMDsKIAlpbnQ4X3QgZXR5cGUgPSAtMSwgbmV0eXBlOwpAQCAtODMsOSArODMsOSBAQAogCQlyZXR1cm47CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlCVUcoKTsKIApAQCAtMTA2LDcgKzEwNiw3IEBACiAJCQkJICAgICAgICh1bnNpZ25lZCllbGVuKTsKIAkJCW5lbGVuID0gZWxlbiAtIChsYmNvdW50IC0gaW5vZGUtPmlfc2l6ZSk7CiAJCQllcG9zLm9mZnNldCAtPSBhZHNpemU7Ci0JCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgbmVsZW4pOworCQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgJmVsb2MsIGV0eXBlLCBlbGVuLCBuZWxlbik7CiAJCQllcG9zLm9mZnNldCArPSBhZHNpemU7CiAJCQlpZiAodWRmX25leHRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkgIT0gLTEpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGZfdHJ1bmNhdGVfdGFpbF9leHRlbnQoKTogIgpAQCAtMTI0LDcgKzEyNCw3IEBACiB2b2lkIHVkZl9kaXNjYXJkX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7MCwgMH0gfTsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJdWludDY0X3QgbGJjb3VudCA9IDA7CiAJaW50OF90IGV0eXBlID0gLTEsIG5ldHlwZTsKQEAgLTEzNiw5ICsxMzYsOSBAQAogCQlyZXR1cm47CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlhZHNpemUgPSAwOwogCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewogCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CiAJCWxiY291bnQgLT0gZWxlbjsKLQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgZWxvYywgZXR5cGUsIGVsZW4sIDApOworCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCAmZWxvYywgZXR5cGUsIGVsZW4sIDApOwogCQlpZiAoIWVwb3MuYmgpIHsKIAkJCWlpbmZvLT5pX2xlbkFsbG9jID0KIAkJCQllcG9zLm9mZnNldCAtCkBAIC0yMDAsNyArMjAwLDcgQEAKIHZvaWQgdWRmX3RydW5jYXRlX2V4dGVudHMoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3M7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgbmVsb2MgPSB7fTsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgbmVsb2MgPSB7fTsKIAl1aW50MzJfdCBlbGVuLCBuZWxlbiA9IDAsIGluZGlyZWN0X2V4dF9sZW4gPSAwLCBsZW5hbGxvYzsKIAlpbnQ4X3QgZXR5cGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwpAQCAtMjEwLDkgKzIxMCw5IEBACiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCUJVRygpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJKGlub2RlLT5pX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpOwogCWlmIChldHlwZSAhPSAtMSkgewogCQllcG9zLm9mZnNldCAtPSBhZHNpemU7Ci0JCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCBieXRlX29mZnNldCk7CisJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsICZlbG9jLCBldHlwZSwgZWxlbiwgYnl0ZV9vZmZzZXQpOwogCQllcG9zLm9mZnNldCArPSBhZHNpemU7CiAJCWlmIChieXRlX29mZnNldCkKIAkJCWxlbmFsbG9jID0gZXBvcy5vZmZzZXQ7CkBAIC0yMzYsMTIgKzIzNiwxMiBAQAogCQl3aGlsZSAoKGV0eXBlID0gdWRmX2N1cnJlbnRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLAogCQkJCQkJICZlbGVuLCAwKSkgIT0gLTEpIHsKIAkJCWlmIChldHlwZSA9PSAoRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyA+PiAzMCkpIHsKLQkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMCk7CisJCQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZlcG9zLCAmbmVsb2MsIG5lbGVuLCAwKTsKIAkJCQlpZiAoaW5kaXJlY3RfZXh0X2xlbikgewogCQkJCQkvKiBXZSBtYW5hZ2VkIHRvIGZyZWUgYWxsIGV4dGVudHMgaW4gdGhlCiAJCQkJCSAqIGluZGlyZWN0IGV4dGVudCAtIGZyZWUgaXQgdG9vICovCiAJCQkJCUJVR19PTighZXBvcy5iaCk7Ci0JCQkJCXVkZl9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIGVwb3MuYmxvY2ssCisJCQkJCXVkZl9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsICZlcG9zLmJsb2NrLAogCQkJCQkJCTAsIGluZGlyZWN0X2V4dF9sZW4pOwogCQkJCX0gZWxzZSBpZiAoIWVwb3MuYmgpIHsKIAkJCQkJaWluZm8tPmlfbGVuQWxsb2MgPSBsZW5hbGxvYzsKQEAgLTI1Myw3ICsyNTMsNyBAQAogCQkJCWVwb3Mub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwogCQkJCWVwb3MuYmxvY2sgPSBlbG9jOwogCQkJCWVwb3MuYmggPSB1ZGZfdHJlYWQoc2IsCi0JCQkJCQl1ZGZfZ2V0X2xiX3BibG9jayhzYiwgZWxvYywgMCkpOworCQkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsICZlbG9jLCAwKSk7CiAJCQkJaWYgKGVsZW4pCiAJCQkJCWluZGlyZWN0X2V4dF9sZW4gPQogCQkJCQkJKGVsZW4gKyBzYi0+c19ibG9ja3NpemUgLSAxKSA+PgpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCQkJZWxzZQogCQkJCQlpbmRpcmVjdF9leHRfbGVuID0gMTsKIAkJCX0gZWxzZSB7Ci0JCQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgZWxvYywgZXR5cGUsCisJCQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgJmVsb2MsIGV0eXBlLAogCQkJCQkgICAgIGVsZW4sIDApOwogCQkJCWVwb3Mub2Zmc2V0ICs9IGFkc2l6ZTsKIAkJCX0KQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJCWlmIChpbmRpcmVjdF9leHRfbGVuKSB7CiAJCQlCVUdfT04oIWVwb3MuYmgpOwotCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgZXBvcy5ibG9jaywgMCwKKwkJCXVkZl9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsICZlcG9zLmJsb2NrLCAwLAogCQkJCQlpbmRpcmVjdF9leHRfbGVuKTsKIAkJfSBlbHNlIGlmICghZXBvcy5iaCkgewogCQkJaWluZm8tPmlfbGVuQWxsb2MgPSBsZW5hbGxvYzsKQEAgLTI3OCw3ICsyNzgsNyBAQAogCQkJdWRmX3VwZGF0ZV9hbGxvY19leHRfZGVzYyhpbm9kZSwgJmVwb3MsIGxlbmFsbG9jKTsKIAl9IGVsc2UgaWYgKGlub2RlLT5pX3NpemUpIHsKIAkJaWYgKGJ5dGVfb2Zmc2V0KSB7Ci0JCQlrZXJuZWxfbG9uZ19hZCBleHRlbnQ7CisJCQlzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgZXh0ZW50OwogCiAJCQkvKgogCQkJICogIE9LLCB0aGVyZSBpcyBub3QgZXh0ZW50IGNvdmVyaW5nIGlub2RlLT5pX3NpemUgYW5kCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmX2kuaCBiL2ZzL3VkZi91ZGZfaS5oCmluZGV4IDRmODZiMWQuLmU1OGQxZGUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZfaS5oCisrKyBiL2ZzL3VkZi91ZGZfaS5oCkBAIC00LDcgKzQsNyBAQAogc3RydWN0IHVkZl9pbm9kZV9pbmZvIHsKIAlzdHJ1Y3QgdGltZXNwZWMJCWlfY3J0aW1lOwogCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgaW5vZGUgKi8KLQlrZXJuZWxfbGJfYWRkcgkJaV9sb2NhdGlvbjsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIJCWlfbG9jYXRpb247CiAJX191NjQJCQlpX3VuaXF1ZTsKIAlfX3UzMgkJCWlfbGVuRUF0dHI7CiAJX191MzIJCQlpX2xlbkFsbG9jOwpAQCAtMTcsOCArMTcsOCBAQAogCXVuc2lnbmVkCQlpX3N0cmF0NDA5NiA6IDE7CiAJdW5zaWduZWQJCXJlc2VydmVkIDogMjY7CiAJdW5pb24gewotCQlzaG9ydF9hZAkqaV9zYWQ7Ci0JCWxvbmdfYWQJCSppX2xhZDsKKwkJc3RydWN0IHNob3J0X2FkCSppX3NhZDsKKwkJc3RydWN0IGxvbmdfYWQJCSppX2xhZDsKIAkJX191OAkJKmlfZGF0YTsKIAl9IGlfZXh0OwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmX3NiLmggYi9mcy91ZGYvdWRmX3NiLmgKaW5kZXggMWMxYzUxNC4uZDExM2I3MiAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZl9zYi5oCisrKyBiL2ZzL3VkZi91ZGZfc2IuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBVREZfRkxBR19HSURfU0VUCTE2CiAjZGVmaW5lIFVERl9GTEFHX1NFU1NJT05fU0VUCTE3CiAjZGVmaW5lIFVERl9GTEFHX0xBU1RCTE9DS19TRVQJMTgKKyNkZWZpbmUgVURGX0ZMQUdfQkxPQ0tTSVpFX1NFVAkxOQogCiAjZGVmaW5lIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19CSVRNQVAJMHgwMDAxCiAjZGVmaW5lIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19UQUJMRQkweDAwMDIKQEAgLTQ4LDYgKzQ5LDggQEAKICNkZWZpbmUgVURGX1NQQVJBQkxFX01BUDE1CQkweDE1MjJVCiAjZGVmaW5lIFVERl9NRVRBREFUQV9NQVAyNQkJMHgyNTExVQogCisjZGVmaW5lIFVERl9JTlZBTElEX01PREUJCSgobW9kZV90KS0xKQorCiAjcHJhZ21hIHBhY2soMSkgLyogWFhYKGhjaCk6IFdoeT8gIFRoaXMgZmlsZSBqdXN0IGRlZmluZXMgaW4tY29yZSBzdHJ1Y3R1cmVzICovCiAKIHN0cnVjdCB1ZGZfbWV0YV9kYXRhIHsKQEAgLTExNCw3ICsxMTcsNyBAQAogCiAJLyogU2VjdG9yIGhlYWRlcnMgKi8KIAlfX3MzMgkJCXNfc2Vzc2lvbjsKLQlfX3UzMgkJCXNfYW5jaG9yWzNdOworCV9fdTMyCQkJc19hbmNob3I7CiAJX191MzIJCQlzX2xhc3RfYmxvY2s7CiAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQJKnNfbHZpZF9iaDsKQEAgLTEyMyw2ICsxMjYsOCBAQAogCW1vZGVfdAkJCXNfdW1hc2s7CiAJZ2lkX3QJCQlzX2dpZDsKIAl1aWRfdAkJCXNfdWlkOworCW1vZGVfdAkJCXNfZm1vZGU7CisJbW9kZV90CQkJc19kbW9kZTsKIAogCS8qIFJvb3QgSW5mbyAqLwogCXN0cnVjdCB0aW1lc3BlYwkJc19yZWNvcmRfdGltZTsKQEAgLTE0Myw2ICsxNDgsOCBAQAogCXN0cnVjdCBpbm9kZQkJKnNfdmF0X2lub2RlOwogCiAJc3RydWN0IG11dGV4CQlzX2FsbG9jX211dGV4OworCS8qIFByb3RlY3RlZCBieSBzX2FsbG9jX211dGV4ICovCisJdW5zaWduZWQgaW50CQlzX2x2aWRfZGlydHk7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZGZfc2JfaW5mbyAqVURGX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmZGVjbC5oIGIvZnMvdWRmL3VkZmRlY2wuaAppbmRleCA4ZWM4NjVkLi5jYWM1MWI3IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCisrKyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTYyLDEwICs2Miw4IEBACiAJCXJldHVybiAwOwogfQogCi0jZGVmaW5lIHVkZl9nZXRfbGJfcGJsb2NrKHNiLGxvYyxvZmZzZXQpIHVkZl9nZXRfcGJsb2NrKChzYiksIChsb2MpLmxvZ2ljYWxCbG9ja051bSwgKGxvYykucGFydGl0aW9uUmVmZXJlbmNlTnVtLCAob2Zmc2V0KSkKLQogLyogY29tcHV0ZXMgdGFnIGNoZWNrc3VtICovCi11OCB1ZGZfdGFnX2NoZWNrc3VtKGNvbnN0IHRhZyAqdCk7Cit1OCB1ZGZfdGFnX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCB0YWcgKnQpOwogCiBzdHJ1Y3QgZGVudHJ5Owogc3RydWN0IGlub2RlOwpAQCAtOTUsNyArOTMsNyBAQAogfTsKIAogc3RydWN0IGdlbmVyaWNfZGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCXZvbERlc2NTZXFOdW07CiB9OwogCkBAIC0xMDgsMTEgKzEwNiwyMiBAQAogc3RydWN0IGV4dGVudF9wb3NpdGlvbiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAl1aW50MzJfdCBvZmZzZXQ7Ci0Ja2VybmVsX2xiX2FkZHIgYmxvY2s7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGJsb2NrOwogfTsKIAogLyogc3VwZXIuYyAqLwogZXh0ZXJuIHZvaWQgdWRmX3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworc3RhdGljIGlubGluZSB2b2lkIHVkZl91cGRhdGVkX2x2aWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gVURGX1NCKHNiKS0+c19sdmlkX2JoOworCisJQlVHX09OKCFiaCk7CisJV0FSTl9PTl9PTkNFKCgoc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICopCisJCSAgICAgYmgtPmJfZGF0YSktPmludGVncml0eVR5cGUgIT0KKwkJICAgICBjcHVfdG9fbGUzMihMVklEX0lOVEVHUklUWV9UWVBFX09QRU4pKTsKKwlzYi0+c19kaXJ0ID0gMTsKKwlVREZfU0Ioc2IpLT5zX2x2aWRfZGlydHkgPSAxOworfQogCiAvKiBuYW1laS5jICovCiBleHRlcm4gaW50IHVkZl93cml0ZV9maShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqLApAQCAtMTI0LDcgKzEzMyw3IEBACiAJCSAgICAgdW5zaWduZWQgbG9uZyk7CiAKIC8qIGlub2RlLmMgKi8KLWV4dGVybiBzdHJ1Y3QgaW5vZGUgKnVkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBrZXJuZWxfbGJfYWRkcik7CitleHRlcm4gc3RydWN0IGlub2RlICp1ZGZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICopOwogZXh0ZXJuIGludCB1ZGZfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCB1ZGZfZXhwYW5kX2ZpbGVfYWRpbmljYihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQgKik7CiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfZXhwYW5kX2Rpcl9hZGluaWNiKHN0cnVjdCBpbm9kZSAqLCBpbnQgKiwgaW50ICopOwpAQCAtMTM2LDE5ICsxNDUsMTkgQEAKIGV4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogZXh0ZXJuIGxvbmcgdWRmX2Jsb2NrX21hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QpOwogZXh0ZXJuIGludCB1ZGZfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSAgIGtlcm5lbF9sb25nX2FkICosIHNlY3Rvcl90KTsKKwkJCSAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCAqLCBzZWN0b3JfdCk7CiBleHRlcm4gaW50OF90IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgc2VjdG9yX3QgKik7CisJCQkgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHNlY3Rvcl90ICopOwogZXh0ZXJuIGludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSAgIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgaW50KTsKKwkJCSAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCwgaW50KTsKIGV4dGVybiBpbnQ4X3QgdWRmX3dyaXRlX2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSAgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBpbnQpOworCQkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QsIGludCk7CiBleHRlcm4gaW50OF90IHVkZl9kZWxldGVfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiwKLQkJCSAgICAgIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCk7CisJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKIGV4dGVybiBpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJICAgIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGludCk7CisJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGludCk7CiBleHRlcm4gaW50OF90IHVkZl9jdXJyZW50X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSAgICAgICBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBpbnQpOworCQkJICAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBpbnQpOwogCiAvKiBtaXNjLmMgKi8KIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl90Z2V0YmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwpAQCAtMTYwLDcgKzE2OSw3IEBACiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF90YWdnZWQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVpbnQzMl90LAogCQkJCQkgICB1aW50MzJfdCwgdWludDE2X3QgKik7CiBleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF9wdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqLAotCQkJCQkgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LAorCQkJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90LAogCQkJCQkgICAgdWludDE2X3QgKik7CiBleHRlcm4gdm9pZCB1ZGZfdXBkYXRlX3RhZyhjaGFyICosIGludCk7CiBleHRlcm4gdm9pZCB1ZGZfbmV3X3RhZyhjaGFyICosIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQzMl90LCBpbnQpOwpAQCAtMTgyLDYgKzE5MSwxNCBAQAogCQkJCQkgIHVpbnQzMl90KTsKIGV4dGVybiBpbnQgdWRmX3JlbG9jYXRlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgbG9uZywgbG9uZyAqKTsKIAorc3RhdGljIGlubGluZSB1aW50MzJfdAordWRmX2dldF9sYl9wYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpsb2MsCisJCSAgdWludDMyX3Qgb2Zmc2V0KQoreworCXJldHVybiB1ZGZfZ2V0X3BibG9jayhzYiwgbG9jLT5sb2dpY2FsQmxvY2tOdW0sCisJCQlsb2MtPnBhcnRpdGlvblJlZmVyZW5jZU51bSwgb2Zmc2V0KTsKK30KKwogLyogdW5pY29kZS5jICovCiBleHRlcm4gaW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVpbnQ4X3QgKiwgdWludDhfdCAqLCBpbnQpOwogZXh0ZXJuIGludCB1ZGZfcHV0X2ZpbGVuYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCB1aW50OF90ICosIHVpbnQ4X3QgKiwKQEAgLTIwMCw3ICsyMTcsNyBAQAogCiAvKiBiYWxsb2MuYyAqLwogZXh0ZXJuIHZvaWQgdWRmX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIHVpbnQzMl90KTsKKwkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKIGV4dGVybiBpbnQgdWRmX3ByZWFsbG9jX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICosIHVpbnQxNl90LAogCQkJICAgICAgIHVpbnQzMl90LCB1aW50MzJfdCk7CiBleHRlcm4gaW50IHVkZl9uZXdfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBpbm9kZSAqLCB1aW50MTZfdCwKQEAgLTIxNCwxNiArMjMxLDE2IEBACiAJCQkJCQlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqLAogCQkJCQkJc3RydWN0IGZpbGVJZGVudERlc2MgKiwKIAkJCQkJCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCQkJCWtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosCisJCQkJCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwKIAkJCQkJCXNlY3Rvcl90ICopOwogZXh0ZXJuIHN0cnVjdCBmaWxlSWRlbnREZXNjICp1ZGZfZ2V0X2ZpbGVpZGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLAogCQkJCQkgICAgICAgaW50ICpvZmZzZXQpOwotZXh0ZXJuIGxvbmdfYWQgKnVkZl9nZXRfZmlsZWxvbmdhZCh1aW50OF90ICosIGludCwgdWludDMyX3QgKiwgaW50KTsKLWV4dGVybiBzaG9ydF9hZCAqdWRmX2dldF9maWxlc2hvcnRhZCh1aW50OF90ICosIGludCwgdWludDMyX3QgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgbG9uZ19hZCAqdWRmX2dldF9maWxlbG9uZ2FkKHVpbnQ4X3QgKiwgaW50LCB1aW50MzJfdCAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCBzaG9ydF9hZCAqdWRmX2dldF9maWxlc2hvcnRhZCh1aW50OF90ICosIGludCwgdWludDMyX3QgKiwgaW50KTsKIAogLyogdWRmdGltZS5jICovCiBleHRlcm4gc3RydWN0IHRpbWVzcGVjICp1ZGZfZGlza19zdGFtcF90b190aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVzdCwKLQkJCQkJCXRpbWVzdGFtcCBzcmMpOwotZXh0ZXJuIHRpbWVzdGFtcCAqdWRmX3RpbWVfdG9fZGlza19zdGFtcCh0aW1lc3RhbXAgKmRlc3QsIHN0cnVjdCB0aW1lc3BlYyBzcmMpOworCQkJCQkJc3RydWN0IHRpbWVzdGFtcCBzcmMpOworZXh0ZXJuIHN0cnVjdCB0aW1lc3RhbXAgKnVkZl90aW1lX3RvX2Rpc2tfc3RhbXAoc3RydWN0IHRpbWVzdGFtcCAqZGVzdCwgc3RydWN0IHRpbWVzcGVjIHNyYyk7CiAKICNlbmRpZgkJCQkvKiBfX1VERl9ERUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZlbmQuaCBiL2ZzL3VkZi91ZGZlbmQuaAppbmRleCA0ODlmNTJmLi42YTlmM2E5IDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZW5kLmgKKysrIGIvZnMvdWRmL3VkZmVuZC5oCkBAIC00LDkgKzQsOSBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotc3RhdGljIGlubGluZSBrZXJuZWxfbGJfYWRkciBsZWxiX3RvX2NwdShsYl9hZGRyIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbGVsYl90b19jcHUoc3RydWN0IGxiX2FkZHIgaW4pCiB7Ci0Ja2VybmVsX2xiX2FkZHIgb3V0OworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBvdXQ7CiAKIAlvdXQubG9naWNhbEJsb2NrTnVtID0gbGUzMl90b19jcHUoaW4ubG9naWNhbEJsb2NrTnVtKTsKIAlvdXQucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gbGUxNl90b19jcHUoaW4ucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKQEAgLTE0LDkgKzE0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGxiX2FkZHIgY3B1X3RvX2xlbGIoa2VybmVsX2xiX2FkZHIgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsYl9hZGRyIGNwdV90b19sZWxiKHN0cnVjdCBrZXJuZWxfbGJfYWRkciBpbikKIHsKLQlsYl9hZGRyIG91dDsKKwlzdHJ1Y3QgbGJfYWRkciBvdXQ7CiAKIAlvdXQubG9naWNhbEJsb2NrTnVtID0gY3B1X3RvX2xlMzIoaW4ubG9naWNhbEJsb2NrTnVtKTsKIAlvdXQucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gY3B1X3RvX2xlMTYoaW4ucGFydGl0aW9uUmVmZXJlbmNlTnVtKTsKQEAgLTI0LDkgKzI0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIHNob3J0X2FkIGxlc2FfdG9fY3B1KHNob3J0X2FkIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hvcnRfYWQgbGVzYV90b19jcHUoc3RydWN0IHNob3J0X2FkIGluKQogewotCXNob3J0X2FkIG91dDsKKwlzdHJ1Y3Qgc2hvcnRfYWQgb3V0OwogCiAJb3V0LmV4dExlbmd0aCA9IGxlMzJfdG9fY3B1KGluLmV4dExlbmd0aCk7CiAJb3V0LmV4dFBvc2l0aW9uID0gbGUzMl90b19jcHUoaW4uZXh0UG9zaXRpb24pOwpAQCAtMzQsOSArMzQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2hvcnRfYWQgY3B1X3RvX2xlc2Eoc2hvcnRfYWQgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaG9ydF9hZCBjcHVfdG9fbGVzYShzdHJ1Y3Qgc2hvcnRfYWQgaW4pCiB7Ci0Jc2hvcnRfYWQgb3V0OworCXN0cnVjdCBzaG9ydF9hZCBvdXQ7CiAKIAlvdXQuZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoaW4uZXh0TGVuZ3RoKTsKIAlvdXQuZXh0UG9zaXRpb24gPSBjcHVfdG9fbGUzMihpbi5leHRQb3NpdGlvbik7CkBAIC00NCw5ICs0NCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBrZXJuZWxfbG9uZ19hZCBsZWxhX3RvX2NwdShsb25nX2FkIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGVsYV90b19jcHUoc3RydWN0IGxvbmdfYWQgaW4pCiB7Ci0Ja2VybmVsX2xvbmdfYWQgb3V0OworCXN0cnVjdCBrZXJuZWxfbG9uZ19hZCBvdXQ7CiAKIAlvdXQuZXh0TGVuZ3RoID0gbGUzMl90b19jcHUoaW4uZXh0TGVuZ3RoKTsKIAlvdXQuZXh0TG9jYXRpb24gPSBsZWxiX3RvX2NwdShpbi5leHRMb2NhdGlvbik7CkBAIC01NCw5ICs1NCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBsb25nX2FkIGNwdV90b19sZWxhKGtlcm5lbF9sb25nX2FkIGluKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9uZ19hZCBjcHVfdG9fbGVsYShzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgaW4pCiB7Ci0JbG9uZ19hZCBvdXQ7CisJc3RydWN0IGxvbmdfYWQgb3V0OwogCiAJb3V0LmV4dExlbmd0aCA9IGNwdV90b19sZTMyKGluLmV4dExlbmd0aCk7CiAJb3V0LmV4dExvY2F0aW9uID0gY3B1X3RvX2xlbGIoaW4uZXh0TG9jYXRpb24pOwpAQCAtNjQsOSArNjQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUga2VybmVsX2V4dGVudF9hZCBsZWVhX3RvX2NwdShleHRlbnRfYWQgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXJuZWxfZXh0ZW50X2FkIGxlZWFfdG9fY3B1KHN0cnVjdCBleHRlbnRfYWQgaW4pCiB7Ci0Ja2VybmVsX2V4dGVudF9hZCBvdXQ7CisJc3RydWN0IGtlcm5lbF9leHRlbnRfYWQgb3V0OwogCiAJb3V0LmV4dExlbmd0aCA9IGxlMzJfdG9fY3B1KGluLmV4dExlbmd0aCk7CiAJb3V0LmV4dExvY2F0aW9uID0gbGUzMl90b19jcHUoaW4uZXh0TG9jYXRpb24pOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZnRpbWUuYyBiL2ZzL3VkZi91ZGZ0aW1lLmMKaW5kZXggNWY4MTE2NTUuLmI4YzgyOGMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZ0aW1lLmMKKysrIGIvZnMvdWRmL3VkZnRpbWUuYwpAQCAtODUsNyArODUsOCBAQAogI2RlZmluZSBTRUNTX1BFUl9IT1VSCSg2MCAqIDYwKQogI2RlZmluZSBTRUNTX1BFUl9EQVkJKFNFQ1NfUEVSX0hPVVIgKiAyNCkKIAotc3RydWN0IHRpbWVzcGVjICp1ZGZfZGlza19zdGFtcF90b190aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVzdCwgdGltZXN0YW1wIHNyYykKK3N0cnVjdCB0aW1lc3BlYyAqCit1ZGZfZGlza19zdGFtcF90b190aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVzdCwgc3RydWN0IHRpbWVzdGFtcCBzcmMpCiB7CiAJaW50IHlkYXk7CiAJdTE2IHR5cGVBbmRUaW1lem9uZSA9IGxlMTZfdG9fY3B1KHNyYy50eXBlQW5kVGltZXpvbmUpOwpAQCAtMTE2LDcgKzExNyw4IEBACiAJcmV0dXJuIGRlc3Q7CiB9CiAKLXRpbWVzdGFtcCAqdWRmX3RpbWVfdG9fZGlza19zdGFtcCh0aW1lc3RhbXAgKmRlc3QsIHN0cnVjdCB0aW1lc3BlYyB0cykKK3N0cnVjdCB0aW1lc3RhbXAgKgordWRmX3RpbWVfdG9fZGlza19zdGFtcChzdHJ1Y3QgdGltZXN0YW1wICpkZXN0LCBzdHJ1Y3QgdGltZXNwZWMgdHMpCiB7CiAJbG9uZyBpbnQgZGF5cywgcmVtLCB5OwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqaXA7CmRpZmYgLS1naXQgYS9mcy91ZGYvdW5pY29kZS5jIGIvZnMvdWRmL3VuaWNvZGUuYwppbmRleCA5ZmRmOGM5Li5jZWZhOGM4IDEwMDY0NAotLS0gYS9mcy91ZGYvdW5pY29kZS5jCisrKyBiL2ZzL3VkZi91bmljb2RlLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogewogCWNvbnN0IHVpbnQ4X3QgKm9jdTsKIAl1aW50OF90IGNtcF9pZCwgb2N1X2xlbjsKLQlpbnQgaTsKKwlpbnQgaSwgbGVuOwogCiAKIAlvY3VfbGVuID0gb2N1X2ktPnVfbGVuOwpAQCAtMjc5LDggKzI3OSwxMyBAQAogCQlpZiAoY21wX2lkID09IDE2KQogCQkJYyA9IChjIDw8IDgpIHwgb2N1W2krK107CiAKLQkJdXRmX28tPnVfbGVuICs9IG5scy0+dW5pMmNoYXIoYywgJnV0Zl9vLT51X25hbWVbdXRmX28tPnVfbGVuXSwKLQkJCQkJICAgICAgVURGX05BTUVfTEVOIC0gdXRmX28tPnVfbGVuKTsKKwkJbGVuID0gbmxzLT51bmkyY2hhcihjLCAmdXRmX28tPnVfbmFtZVt1dGZfby0+dV9sZW5dLAorCQkJCSAgICBVREZfTkFNRV9MRU4gLSB1dGZfby0+dV9sZW4pOworCQkvKiBWYWxpZCBjaGFyYWN0ZXI/ICovCisJCWlmIChsZW4gPj0gMCkKKwkJCXV0Zl9vLT51X2xlbiArPSBsZW47CisJCWVsc2UKKwkJCXV0Zl9vLT51X25hbWVbdXRmX28tPnVfbGVuKytdID0gJz8nOwogCX0KIAl1dGZfby0+dV9jbXBJRCA9IDg7CiAKQEAgLTI5MCw3ICsyOTUsOCBAQAogc3RhdGljIGludCB1ZGZfTkxTdG9DUzAoc3RydWN0IG5sc190YWJsZSAqbmxzLCBkc3RyaW5nICpvY3UsIHN0cnVjdCB1c3RyICp1bmksCiAJCQlpbnQgbGVuZ3RoKQogewotCXVuc2lnbmVkIGxlbiwgaSwgbWF4X3ZhbDsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGksIG1heF92YWw7CiAJdWludDE2X3QgdW5pX2NoYXI7CiAJaW50IHVfbGVuOwogCkBAIC0zMDIsOCArMzA4LDEzIEBACiAJdV9sZW4gPSAwVTsKIAlmb3IgKGkgPSAwVTsgaSA8IHVuaS0+dV9sZW47IGkrKykgewogCQlsZW4gPSBubHMtPmNoYXIydW5pKCZ1bmktPnVfbmFtZVtpXSwgdW5pLT51X2xlbiAtIGksICZ1bmlfY2hhcik7Ci0JCWlmIChsZW4gPD0gMCkKKwkJaWYgKCFsZW4pCiAJCQljb250aW51ZTsKKwkJLyogSW52YWxpZCBjaGFyYWN0ZXIsIGRlYWwgd2l0aCBpdCAqLworCQlpZiAobGVuIDwgMCkgeworCQkJbGVuID0gMTsKKwkJCXVuaV9jaGFyID0gJz8nOworCQl9CiAKIAkJaWYgKHVuaV9jaGFyID4gbWF4X3ZhbCkgewogCQkJbWF4X3ZhbCA9IDB4ZmZmZlU7CkBAIC0zMjQsMzQgKzMzNSw0MyBAQAogaW50IHVkZl9nZXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdWludDhfdCAqc25hbWUsIHVpbnQ4X3QgKmRuYW1lLAogCQkgICAgIGludCBmbGVuKQogewotCXN0cnVjdCB1c3RyIGZpbGVuYW1lLCB1bmlmaWxlbmFtZTsKLQlpbnQgbGVuOworCXN0cnVjdCB1c3RyICpmaWxlbmFtZSwgKnVuaWZpbGVuYW1lOworCWludCBsZW4gPSAwOwogCi0JaWYgKHVkZl9idWlsZF91c3RyX2V4YWN0KCZ1bmlmaWxlbmFtZSwgc25hbWUsIGZsZW4pKQorCWZpbGVuYW1lID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzdHIpLCBHRlBfTk9GUyk7CisJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuIDA7CiAKKwl1bmlmaWxlbmFtZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c3RyKSwgR0ZQX05PRlMpOworCWlmICghdW5pZmlsZW5hbWUpCisJCWdvdG8gb3V0MTsKKworCWlmICh1ZGZfYnVpbGRfdXN0cl9leGFjdCh1bmlmaWxlbmFtZSwgc25hbWUsIGZsZW4pKQorCQlnb3RvIG91dDI7CisKIAlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VURjgpKSB7Ci0JCWlmICghdWRmX0NTMHRvVVRGOCgmZmlsZW5hbWUsICZ1bmlmaWxlbmFtZSkpIHsKKwkJaWYgKCF1ZGZfQ1MwdG9VVEY4KGZpbGVuYW1lLCB1bmlmaWxlbmFtZSkpIHsKIAkJCXVkZl9kZWJ1ZygiRmFpbGVkIGluIHVkZl9nZXRfZmlsZW5hbWU6IHNuYW1lID0gJXNcbiIsCiAJCQkJICBzbmFtZSk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0MjsKIAkJfQogCX0gZWxzZSBpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX05MU19NQVApKSB7Ci0JCWlmICghdWRmX0NTMHRvTkxTKFVERl9TQihzYiktPnNfbmxzX21hcCwgJmZpbGVuYW1lLAotCQkJCSAgJnVuaWZpbGVuYW1lKSkgeworCQlpZiAoIXVkZl9DUzB0b05MUyhVREZfU0Ioc2IpLT5zX25sc19tYXAsIGZpbGVuYW1lLAorCQkJCSAgdW5pZmlsZW5hbWUpKSB7CiAJCQl1ZGZfZGVidWcoIkZhaWxlZCBpbiB1ZGZfZ2V0X2ZpbGVuYW1lOiBzbmFtZSA9ICVzXG4iLAogCQkJCSAgc25hbWUpOwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIG91dDI7CiAJCX0KIAl9IGVsc2UKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0MjsKIAotCWxlbiA9IHVkZl90cmFuc2xhdGVfdG9fbGludXgoZG5hbWUsIGZpbGVuYW1lLnVfbmFtZSwgZmlsZW5hbWUudV9sZW4sCi0JCQkJICAgICB1bmlmaWxlbmFtZS51X25hbWUsIHVuaWZpbGVuYW1lLnVfbGVuKTsKLQlpZiAobGVuKQotCQlyZXR1cm4gbGVuOwotCi0JcmV0dXJuIDA7CisJbGVuID0gdWRmX3RyYW5zbGF0ZV90b19saW51eChkbmFtZSwgZmlsZW5hbWUtPnVfbmFtZSwgZmlsZW5hbWUtPnVfbGVuLAorCQkJCSAgICAgdW5pZmlsZW5hbWUtPnVfbmFtZSwgdW5pZmlsZW5hbWUtPnVfbGVuKTsKK291dDI6CisJa2ZyZWUodW5pZmlsZW5hbWUpOworb3V0MToKKwlrZnJlZShmaWxlbmFtZSk7CisJcmV0dXJuIGxlbjsKIH0KIAogaW50IHVkZl9wdXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgdWludDhfdCAqc25hbWUsCmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IGUxYzFmYzUuLjYwMzU5MjkgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC0xMjY4LDYgKzEyNjgsNyBAQAogCXN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfZmlyc3QgKnVzYjE7CiAJc3RydWN0IHVmc19zdXBlcl9ibG9ja19zZWNvbmQgKnVzYjI7CiAJc3RydWN0IHVmc19zdXBlcl9ibG9ja190aGlyZCAqdXNiMzsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWxvY2tfa2VybmVsKCk7CiAKQEAgLTEyOTAsNiArMTI5MSw4IEBACiAJCT8gKGJ1Zi0+Zl9iZnJlZSAtICgoKGxvbmcpYnVmLT5mX2Jsb2NrcyAvIDEwMCkgKiB1c3BpLT5zX21pbmZyZWUpKSA6IDA7CiAJYnVmLT5mX2ZpbGVzID0gdXNwaS0+c19uY2cgKiB1c3BpLT5zX2lwZzsKIAlidWYtPmZfbmFtZWxlbiA9IFVGU19NQVhOQU1MRU47CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAKIAl1bmxvY2tfa2VybmVsKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCBjM2RjNDkxLi42MGYxMDdlIDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0zMyw2ICszMyw3IEBACiAJCQkJICAgeGZzX3FtX3N5c2NhbGxzLm8gXAogCQkJCSAgIHhmc19xbV9iaHYubyBcCiAJCQkJICAgeGZzX3FtLm8pCit4ZnMtJChDT05GSUdfWEZTX1FVT1RBKQkJKz0gbGludXgtMi42L3hmc19xdW90YW9wcy5vCiAKIGlmZXEgKCQoQ09ORklHX1hGU19RVU9UQSkseSkKIHhmcy0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcXVvdGEveGZzX3FtX3N0YXRzLm8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYvbXV0ZXguaCBiL2ZzL3hmcy9saW51eC0yLjYvbXV0ZXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE4OGQ1Ni4uMDAwMDAwMAotLS0gYS9mcy94ZnMvbGludXgtMi42L211dGV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMsMjAwNSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaWZuZGVmIF9fWEZTX1NVUFBPUlRfTVVURVhfSF9fCi0jZGVmaW5lIF9fWEZTX1NVUFBPUlRfTVVURVhfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi10eXBlZGVmIHN0cnVjdCBtdXRleCBtdXRleF90OwotCi0jZW5kaWYgLyogX19YRlNfU1VQUE9SVF9NVVRFWF9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCBkZTNhMTk4Li5jMTNmNjczIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0xNjIzLDQgKzE2MjMsNSBAQAogCS5ibWFwCQkJPSB4ZnNfdm1fYm1hcCwKIAkuZGlyZWN0X0lPCQk9IHhmc192bV9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlCQk9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSAgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IGUxNGM0ZTMuLmY0ZTI1NTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTIzNCw5ICsyMzQsOSBAQAogU1RBVElDIGludAogeGZzX3ZtX3BhZ2VfbWt3cml0ZSgKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKnZtYSwKLQlzdHJ1Y3QgcGFnZQkJKnBhZ2UpCisJc3RydWN0IHZtX2ZhdWx0CQkqdm1mKQogewotCXJldHVybiBibG9ja19wYWdlX21rd3JpdGUodm1hLCBwYWdlLCB4ZnNfZ2V0X2Jsb2Nrcyk7CisJcmV0dXJuIGJsb2NrX3BhZ2VfbWt3cml0ZSh2bWEsIHZtZiwgeGZzX2dldF9ibG9ja3MpOwogfQogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmc19maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwppbmRleCA0YmQxMTIzLi5kMGI0OTk0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKKyNpbmNsdWRlICJ4ZnNfaW9jdGwuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCiAjaW5jbHVkZSAieGZzX3J0YWxsb2MuaCIKQEAgLTc4LDkyICs3OSw3NCBAQAogCWludAkJCWhzaXplOwogCXhmc19oYW5kbGVfdAkJaGFuZGxlOwogCXN0cnVjdCBpbm9kZQkJKmlub2RlOworCXN0cnVjdCBmaWxlCQkqZmlsZSA9IE5VTEw7CisJc3RydWN0IHBhdGgJCXBhdGg7CisJaW50CQkJZXJyb3I7CisJc3RydWN0IHhmc19pbm9kZQkqaXA7CiAKLQltZW1zZXQoKGNoYXIgKikmaGFuZGxlLCAwLCBzaXplb2YoaGFuZGxlKSk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgWEZTX0lPQ19QQVRIX1RPX0ZTSEFORExFOgotCWNhc2UgWEZTX0lPQ19QQVRIX1RPX0hBTkRMRTogewotCQlzdHJ1Y3QgcGF0aCBwYXRoOwotCQlpbnQgZXJyb3IgPSB1c2VyX2xwYXRoKChjb25zdCBjaGFyIF9fdXNlciAqKWhyZXEtPnBhdGgsICZwYXRoKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCi0JCUFTU0VSVChwYXRoLmRlbnRyeSk7Ci0JCUFTU0VSVChwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCWlub2RlID0gaWdyYWIocGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQlwYXRoX3B1dCgmcGF0aCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgWEZTX0lPQ19GRF9UT19IQU5ETEU6IHsKLQkJc3RydWN0IGZpbGUJKmZpbGU7Ci0KKwlpZiAoY21kID09IFhGU19JT0NfRkRfVE9fSEFORExFKSB7CiAJCWZpbGUgPSBmZ2V0KGhyZXEtPmZkKTsKIAkJaWYgKCFmaWxlKQotCQkgICAgcmV0dXJuIC1FQkFERjsKLQotCQlBU1NFUlQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7Ci0JCUFTU0VSVChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQkJaW5vZGUgPSBpZ3JhYihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQkJZnB1dChmaWxlKTsKLQkJYnJlYWs7CisJCQlyZXR1cm4gLUVCQURGOworCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSB1c2VyX2xwYXRoKChjb25zdCBjaGFyIF9fdXNlciAqKWhyZXEtPnBhdGgsICZwYXRoKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQlpbm9kZSA9IHBhdGguZGVudHJ5LT5kX2lub2RlOwogCX0KKwlpcCA9IFhGU19JKGlub2RlKTsKIAotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQkJcmV0dXJuIC1YRlNfRVJST1IoRUlOVkFMKTsKLQl9CisJLyoKKwkgKiBXZSBjYW4gb25seSBnZW5lcmF0ZSBoYW5kbGVzIGZvciBpbm9kZXMgcmVzaWRpbmcgb24gYSBYRlMgZmlsZXN5c3RlbSwKKwkgKiBhbmQgb25seSBmb3IgcmVndWxhciBmaWxlcywgZGlyZWN0b3JpZXMgb3Igc3ltYm9saWMgbGlua3MuCisJICovCisJZXJyb3IgPSAtRUlOVkFMOworCWlmIChpbm9kZS0+aV9zYi0+c19tYWdpYyAhPSBYRlNfU0JfTUFHSUMpCisJCWdvdG8gb3V0X3B1dDsKIAotCWlmIChpbm9kZS0+aV9zYi0+c19tYWdpYyAhPSBYRlNfU0JfTUFHSUMpIHsKLQkJLyogd2UncmUgbm90IGluIFhGUyBhbnltb3JlLCBUb3RvICovCi0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOwotCX0KKwllcnJvciA9IC1FQkFERjsKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gb3V0X3B1dDsKIAotCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRlJFRzoKLQljYXNlIFNfSUZESVI6Ci0JY2FzZSBTX0lGTE5LOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIC1YRlNfRVJST1IoRUJBREYpOwotCX0KIAotCS8qIG5vdyB3ZSBjYW4gZ3JhYiB0aGUgZnNpZCAqLwotCW1lbWNweSgmaGFuZGxlLmhhX2ZzaWQsIFhGU19JKGlub2RlKS0+aV9tb3VudC0+bV9maXhlZGZzaWQsCi0JCQlzaXplb2YoeGZzX2ZzaWRfdCkpOwotCWhzaXplID0gc2l6ZW9mKHhmc19mc2lkX3QpOworCW1lbWNweSgmaGFuZGxlLmhhX2ZzaWQsIGlwLT5pX21vdW50LT5tX2ZpeGVkZnNpZCwgc2l6ZW9mKHhmc19mc2lkX3QpKTsKIAotCWlmIChjbWQgIT0gWEZTX0lPQ19QQVRIX1RPX0ZTSEFORExFKSB7Ci0JCXhmc19pbm9kZV90CSppcCA9IFhGU19JKGlub2RlKTsKKwlpZiAoY21kID09IFhGU19JT0NfUEFUSF9UT19GU0hBTkRMRSkgeworCQkvKgorCQkgKiBUaGlzIGhhbmRsZSBvbmx5IGNvbnRhaW5zIGFuIGZzaWQsIHplcm8gdGhlIHJlc3QuCisJCSAqLworCQltZW1zZXQoJmhhbmRsZS5oYV9maWQsIDAsIHNpemVvZihoYW5kbGUuaGFfZmlkKSk7CisJCWhzaXplID0gc2l6ZW9mKHhmc19mc2lkX3QpOworCX0gZWxzZSB7CiAJCWludAkJbG9ja19tb2RlOwogCi0JCS8qIG5lZWQgdG8gZ2V0IGFjY2VzcyB0byB0aGUgeGZzX2lub2RlIHRvIHJlYWQgdGhlIGdlbmVyYXRpb24gKi8KIAkJbG9ja19tb2RlID0geGZzX2lsb2NrX21hcF9zaGFyZWQoaXApOwotCi0JCS8qIGZpbGwgaW4gZmlkIHNlY3Rpb24gb2YgaGFuZGxlIGZyb20gaW5vZGUgKi8KIAkJaGFuZGxlLmhhX2ZpZC5maWRfbGVuID0gc2l6ZW9mKHhmc19maWRfdCkgLQogCQkJCQlzaXplb2YoaGFuZGxlLmhhX2ZpZC5maWRfbGVuKTsKIAkJaGFuZGxlLmhhX2ZpZC5maWRfcGFkID0gMDsKIAkJaGFuZGxlLmhhX2ZpZC5maWRfZ2VuID0gaXAtPmlfZC5kaV9nZW47CiAJCWhhbmRsZS5oYV9maWQuZmlkX2lubyA9IGlwLT5pX2lubzsKLQogCQl4ZnNfaXVubG9ja19tYXBfc2hhcmVkKGlwLCBsb2NrX21vZGUpOwogCiAJCWhzaXplID0gWEZTX0hTSVpFKGhhbmRsZSk7CiAJfQogCi0JLyogbm93IGNvcHkgb3VyIGhhbmRsZSBpbnRvIHRoZSB1c2VyIGJ1ZmZlciAmIHdyaXRlIG91dCB0aGUgc2l6ZSAqLworCWVycm9yID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKGhyZXEtPm9oYW5kbGUsICZoYW5kbGUsIGhzaXplKSB8fAotCSAgICBjb3B5X3RvX3VzZXIoaHJlcS0+b2hhbmRsZW4sICZoc2l6ZSwgc2l6ZW9mKF9fczMyKSkpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7Ci0JfQorCSAgICBjb3B5X3RvX3VzZXIoaHJlcS0+b2hhbmRsZW4sICZoc2l6ZSwgc2l6ZW9mKF9fczMyKSkpCisJCWdvdG8gb3V0X3B1dDsKIAotCWlwdXQoaW5vZGUpOwotCXJldHVybiAwOworCWVycm9yID0gMDsKKworIG91dF9wdXQ6CisJaWYgKGNtZCA9PSBYRlNfSU9DX0ZEX1RPX0hBTkRMRSkKKwkJZnB1dChmaWxlKTsKKwllbHNlCisJCXBhdGhfcHV0KCZwYXRoKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggN2FhNTNmZS4uNjA3NTM4MiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtMjExLDggKzIxMSwxMyBAQAogCSAqIElyaXggdXNlcyBNaXNzZWQnZW0nViBzcGxpdCwgYnV0IGRvZXNuJ3Qgd2FudCB0byBzZWUKIAkgKiB0aGUgdXBwZXIgNSBiaXRzIG9mICgxNGJpdCkgbWFqb3IuCiAJICovCi0JaWYgKHVubGlrZWx5KCFzeXN2X3ZhbGlkX2RldihyZGV2KSB8fCBNQUpPUihyZGV2KSAmIH4weDFmZikpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChTX0lTQ0hSKG1vZGUpIHx8IFNfSVNCTEsobW9kZSkpIHsKKwkJaWYgKHVubGlrZWx5KCFzeXN2X3ZhbGlkX2RldihyZGV2KSB8fCBNQUpPUihyZGV2KSAmIH4weDFmZikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmRldiA9IHN5c3ZfZW5jb2RlX2RldihyZGV2KTsKKwl9IGVsc2UgeworCQlyZGV2ID0gMDsKKwl9CiAKIAlpZiAodGVzdF9kZWZhdWx0X2FjbCAmJiB0ZXN0X2RlZmF1bHRfYWNsKGRpcikpIHsKIAkJaWYgKCFfQUNMX0FMTE9DKGRlZmF1bHRfYWNsKSkgewpAQCAtMjI0LDI4ICsyMjksMTEgQEAKIAkJfQogCX0KIAotCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKLQogCWlmIChJU19QT1NJWEFDTChkaXIpICYmICFkZWZhdWx0X2FjbCkKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKLQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKLQljYXNlIFNfSUZDSFI6Ci0JY2FzZSBTX0lGQkxLOgotCWNhc2UgU19JRklGTzoKLQljYXNlIFNfSUZTT0NLOgotCQlyZGV2ID0gc3lzdl9lbmNvZGVfZGV2KHJkZXYpOwotCWNhc2UgU19JRlJFRzoKLQkJZXJyb3IgPSB4ZnNfY3JlYXRlKFhGU19JKGRpciksICZuYW1lLCBtb2RlLCByZGV2LCAmaXAsIE5VTEwpOwotCQlicmVhazsKLQljYXNlIFNfSUZESVI6Ci0JCWVycm9yID0geGZzX21rZGlyKFhGU19JKGRpciksICZuYW1lLCBtb2RlLCAmaXAsIE5VTEwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnJvciA9IEVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCisJeGZzX2RlbnRyeV90b19uYW1lKCZuYW1lLCBkZW50cnkpOworCWVycm9yID0geGZzX2NyZWF0ZShYRlNfSShkaXIpLCAmbmFtZSwgbW9kZSwgcmRldiwgJmlwLCBOVUxMKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQogCQlnb3RvIG91dF9mcmVlX2FjbDsKIApAQCAtNDE2LDcgKzQwNCw3IEBACiAJbW9kZV90CQltb2RlOwogCiAJbW9kZSA9IFNfSUZMTksgfAotCQkoaXJpeF9zeW1saW5rX21vZGUgPyAwNzc3ICYgfmN1cnJlbnQtPmZzLT51bWFzayA6IFNfSVJXWFVHTyk7CisJCShpcml4X3N5bWxpbmtfbW9kZSA/IDA3NzcgJiB+Y3VycmVudF91bWFzaygpIDogU19JUldYVUdPKTsKIAl4ZnNfZGVudHJ5X3RvX25hbWUoJm5hbWUsIGRlbnRyeSk7CiAKIAllcnJvciA9IHhmc19zeW1saW5rKFhGU19JKGRpciksICZuYW1lLCBzeW1uYW1lLCBtb2RlLCAmY2lwLCBOVUxMKTsKQEAgLTU1Myw5ICs1NDEsNiBAQAogCXN0YXQtPnVpZCA9IGlwLT5pX2QuZGlfdWlkOwogCXN0YXQtPmdpZCA9IGlwLT5pX2QuZGlfZ2lkOwogCXN0YXQtPmlubyA9IGlwLT5pX2lubzsKLSNpZiBYRlNfQklHX0lOVU1TCi0Jc3RhdC0+aW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgogCXN0YXQtPmF0aW1lID0gaW5vZGUtPmlfYXRpbWU7CiAJc3RhdC0+bXRpbWUudHZfc2VjID0gaXAtPmlfZC5kaV9tdGltZS50X3NlYzsKIAlzdGF0LT5tdGltZS50dl9uc2VjID0gaXAtPmlfZC5kaV9tdGltZS50X25zZWM7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCA1MDc0OTJkLi5mNjVhNTNmIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxrbWVtLmg+CiAjaW5jbHVkZSA8bXJsb2NrLmg+CiAjaW5jbHVkZSA8c3YuaD4KLSNpbmNsdWRlIDxtdXRleC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIAogI2luY2x1ZGUgPHN1cHBvcnQva3RyYWNlLmg+CkBAIC01MSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMTQ3LDE3ICsxNDcsNiBAQAogI2RlZmluZSBTWU5DSFJPTklaRSgpCWJhcnJpZXIoKQogI2RlZmluZSBfX3JldHVybl9hZGRyZXNzIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQogCi0vKgotICogSVJJWCAoQlNEKSBxdW90YWN0bCBtYWtlcyB1c2Ugb2Ygc2VwYXJhdGUgY29tbWFuZHMgZm9yIHVzZXIvZ3JvdXAsCi0gKiB3aGVyZWFzIG9uIExpbnV4IHRoZSBzeXNjYWxsIGVuY29kZXMgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBjbWQKLSAqIGZpZWxkIChzZWUgdGhlIFFDTUQgbWFjcm8gaW4gcXVvdGEuaCkuICBUaGVzZSBtYWNyb3MgaGVscCBrZWVwIHRoZQotICogY29kZSBwb3J0YWJsZSAtIHRoZXkgYXJlIG5vdCB2aXNpYmxlIGZyb20gdGhlIHN5c2NhbGwgaW50ZXJmYWNlLgotICovCi0jZGVmaW5lIFFfWFNFVEdRTElNCVhRTV9DTUQoOCkJLyogc2V0IGdyb3VwcyBkaXNrIGxpbWl0cyAqLwotI2RlZmluZSBRX1hHRVRHUVVPVEEJWFFNX0NNRCg5KQkvKiBnZXQgZ3JvdXBzIGRpc2sgbGltaXRzICovCi0jZGVmaW5lIFFfWFNFVFBRTElNCVhRTV9DTUQoMTApCS8qIHNldCBwcm9qZWN0cyBkaXNrIGxpbWl0cyAqLwotI2RlZmluZSBRX1hHRVRQUVVPVEEJWFFNX0NNRCgxMSkJLyogZ2V0IHByb2plY3RzIGRpc2sgbGltaXRzICovCi0KICNkZWZpbmUgZGZsdHByaWQJMAogI2RlZmluZSBNQVhQQVRITEVOCTEwMjQKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkOWE2MwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIENocmlzdG9waCBIZWxsd2lnCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSAieGZzLmgiCisjaW5jbHVkZSAieGZzX2RtYXBpLmgiCisjaW5jbHVkZSAieGZzX3NiLmgiCisjaW5jbHVkZSAieGZzX2ludW0uaCIKKyNpbmNsdWRlICJ4ZnNfYWcuaCIKKyNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKKyNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKKyNpbmNsdWRlICJ4ZnNfbG9nLmgiCisjaW5jbHVkZSAieGZzX3RyYW5zLmgiCisjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKKyNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKKyNpbmNsdWRlICJxdW90YS94ZnNfcW0uaCIKKyNpbmNsdWRlIDxsaW51eC9xdW90YS5oPgorCisKK1NUQVRJQyBpbnQKK3hmc19xdW90YV90eXBlKGludCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVVNSUVVPVEE6CisJCXJldHVybiBYRlNfRFFfVVNFUjsKKwljYXNlIEdSUFFVT1RBOgorCQlyZXR1cm4gWEZTX0RRX0dST1VQOworCWRlZmF1bHQ6CisJCXJldHVybiBYRlNfRFFfUFJPSjsKKwl9Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19xdW90YV9zeW5jKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJaW50CQkJdHlwZSkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gLXhmc19zeW5jX2lub2RlcyhtcCwgU1lOQ19ERUxXUkkpOworfQorCitTVEFUSUMgaW50Cit4ZnNfZnNfZ2V0X3hzdGF0ZSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAorCXN0cnVjdCBmc19xdW90YV9zdGF0CSpmcXMpCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7CisKKwlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIC14ZnNfcW1fc2NhbGxfZ2V0cXN0YXQobXAsIGZxcyk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19zZXRfeHN0YXRlKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJdW5zaWduZWQgaW50CQl1ZmxhZ3MsCisJaW50CQkJb3ApCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7CisJdW5zaWduZWQgaW50CQlmbGFncyA9IDA7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAtRVJPRlM7CisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfVURRX0FDQ1QpCisJCWZsYWdzIHw9IFhGU19VUVVPVEFfQUNDVDsKKwlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1BEUV9BQ0NUKQorCQlmbGFncyB8PSBYRlNfUFFVT1RBX0FDQ1Q7CisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9HRFFfQUNDVCkKKwkJZmxhZ3MgfD0gWEZTX0dRVU9UQV9BQ0NUOworCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfVURRX0VORkQpCisJCWZsYWdzIHw9IFhGU19VUVVPVEFfRU5GRDsKKwlpZiAodWZsYWdzICYgKFhGU19RVU9UQV9QRFFfRU5GRHxYRlNfUVVPVEFfR0RRX0VORkQpKQorCQlmbGFncyB8PSBYRlNfT1FVT1RBX0VORkQ7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBRX1hRVU9UQU9OOgorCQlyZXR1cm4gLXhmc19xbV9zY2FsbF9xdW90YW9uKG1wLCBmbGFncyk7CisJY2FzZSBRX1hRVU9UQU9GRjoKKwkJaWYgKCFYRlNfSVNfUVVPVEFfT04obXApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAteGZzX3FtX3NjYWxsX3F1b3Rhb2ZmKG1wLCBmbGFncyk7CisJY2FzZSBRX1hRVU9UQVJNOgorCQlpZiAoWEZTX0lTX1FVT1RBX09OKG1wKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLXhmc19xbV9zY2FsbF90cnVuY19xZmlsZXMobXAsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworU1RBVElDIGludAoreGZzX2ZzX2dldF94cXVvdGEoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwlpbnQJCQl0eXBlLAorCXFpZF90CQkJaWQsCisJc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmZkcSkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCisJCXJldHVybiAtRVNSQ0g7CisKKwlyZXR1cm4gLXhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgaWQsIHhmc19xdW90YV90eXBlKHR5cGUpLCBmZHEpOworfQorCitTVEFUSUMgaW50Cit4ZnNfZnNfc2V0X3hxdW90YSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAorCWludAkJCXR5cGUsCisJcWlkX3QJCQlpZCwKKwlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm4gLUVST0ZTOworCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCisJCXJldHVybiAtRVNSQ0g7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0dXJuIC14ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgaWQsIHhmc19xdW90YV90eXBlKHR5cGUpLCBmZHEpOworfQorCitzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zID0geworCS5xdW90YV9zeW5jCQk9IHhmc19mc19xdW90YV9zeW5jLAorCS5nZXRfeHN0YXRlCQk9IHhmc19mc19nZXRfeHN0YXRlLAorCS5zZXRfeHN0YXRlCQk9IHhmc19mc19zZXRfeHN0YXRlLAorCS5nZXRfeHF1b3RhCQk9IHhmc19mc19nZXRfeHF1b3RhLAorCS5zZXRfeHF1b3RhCQk9IHhmc19mc19zZXRfeHF1b3RhLAorfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDMyYWU1MDIuLmJiNjg1MjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtNjgsNyArNjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnM7CiBzdGF0aWMga21lbV96b25lX3QgKnhmc19pb2VuZF96b25lOwogbWVtcG9vbF90ICp4ZnNfaW9lbmRfcG9vbDsKQEAgLTc5LDcgKzc4LDYgQEAKICNkZWZpbmUgTU5UT1BUX1JUREVWCSJydGRldiIJCS8qIHJlYWx0aW1lIEkvTyBkZXZpY2UgKi8KICNkZWZpbmUgTU5UT1BUX0JJT1NJWkUJImJpb3NpemUiCS8qIGxvZzIgb2YgcHJlZmVycmVkIGJ1ZmZlcmVkIGlvIHNpemUgKi8KICNkZWZpbmUgTU5UT1BUX1dTWU5DCSJ3c3luYyIJCS8qIHNhZmUtbW9kZSBuZnMgY29tcGF0aWJsZSBtb3VudCAqLwotI2RlZmluZSBNTlRPUFRfSU5PNjQJImlubzY0IgkJLyogZm9yY2UgaW5vZGVzIGludG8gNjQtYml0IHJhbmdlICovCiAjZGVmaW5lIE1OVE9QVF9OT0FMSUdOCSJub2FsaWduIgkvKiB0dXJuIG9mZiBzdHJpcGUgYWxpZ25tZW50ICovCiAjZGVmaW5lIE1OVE9QVF9TV0FMTE9DCSJzd2FsbG9jIgkvKiB0dXJuIG9uIHN0cmlwZSB3aWR0aCBhbGxvY2F0aW9uICovCiAjZGVmaW5lIE1OVE9QVF9TVU5JVAkic3VuaXQiCQkvKiBkYXRhIHZvbHVtZSBzdHJpcGUgdW5pdCAqLwpAQCAtMTgwLDcgKzE3OCw3IEBACiAJaW50CQkJZHN3aWR0aCA9IDA7CiAJaW50CQkJaW9zaXplID0gMDsKIAlpbnQJCQlkbWFwaV9pbXBsaWVzX2lrZWVwID0gMTsKLQl1Y2hhcl90CQkJaW9zaXplbG9nID0gMDsKKwlfX3VpbnQ4X3QJCWlvc2l6ZWxvZyA9IDA7CiAKIAkvKgogCSAqIENvcHkgYmluYXJ5IFZGUyBtb3VudCBmbGFncyB3ZSBhcmUgaW50ZXJlc3RlZCBpbi4KQEAgLTI5MSwxNiArMjg5LDYgQEAKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9PU1lOQ0lTT1NZTkM7CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT1JFQ09WRVJZKSkgewogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PUkVDT1ZFUlk7Ci0JCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9JTk82NCkpIHsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfSU5PNjQ7Ci0JCQltcC0+bV9pbm9hZGQgPSBYRlNfSU5PNjRfT0ZGU0VUOwotI2Vsc2UKLQkJCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCQkiWEZTOiAlcyBvcHRpb24gbm90IGFsbG93ZWQgb24gdGhpcyBzeXN0ZW0iLAotCQkJCXRoaXNfY2hhcik7Ci0JCQlyZXR1cm4gRUlOVkFMOwotI2VuZGlmCiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9OT0FMSUdOKSkgewogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX05PQUxJR047CiAJCX0gZWxzZSBpZiAoIXN0cmNtcCh0aGlzX2NoYXIsIE1OVE9QVF9TV0FMTE9DKSkgewpAQCAtNTI5LDcgKzUxNyw2IEBACiAJCS8qIHRoZSBmZXcgc2ltcGxlIG9uZXMgd2UgY2FuIGdldCBmcm9tIHRoZSBtb3VudCBzdHJ1Y3QgKi8KIAkJeyBYRlNfTU9VTlRfSUtFRVAsCQkiLCIgTU5UT1BUX0lLRUVQIH0sCiAJCXsgWEZTX01PVU5UX1dTWU5DLAkJIiwiIE1OVE9QVF9XU1lOQyB9LAotCQl7IFhGU19NT1VOVF9JTk82NCwJCSIsIiBNTlRPUFRfSU5PNjQgfSwKIAkJeyBYRlNfTU9VTlRfTk9BTElHTiwJCSIsIiBNTlRPUFRfTk9BTElHTiB9LAogCQl7IFhGU19NT1VOVF9TV0FMTE9DLAkJIiwiIE1OVE9QVF9TV0FMTE9DIH0sCiAJCXsgWEZTX01PVU5UX05PVVVJRCwJCSIsIiBNTlRPUFRfTk9VVUlEIH0sCkBAIC02MzQsNyArNjIxLDcgQEAKIAlyZXR1cm4gKCgoX191aW50NjRfdClwYWdlZmFjdG9yKSA8PCBiaXRzaGlmdCkgLSAxOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc19ibGtkZXZfZ2V0KAogCXhmc19tb3VudF90CQkqbXAsCiAJY29uc3QgY2hhcgkJKm5hbWUsCkBAIC02NTEsNyArNjM4LDcgQEAKIAlyZXR1cm4gLWVycm9yOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2Jsa2Rldl9wdXQoCiAJc3RydWN0IGJsb2NrX2RldmljZQkqYmRldikKIHsKQEAgLTg3Miw3ICs4NTksNyBAQAogCXdha2VfdXBfcHJvY2VzcyhhaWxwLT54YV90YXNrKTsKIH0KIAotaW50CitTVEFUSUMgaW50CiB4ZnNhaWxkKAogCXZvaWQJKmRhdGEpCiB7CkBAIC05OTAsMjYgKzk3Nyw1NyBAQAogCWludAkJCXN5bmMpCiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAlpbnQJCQllcnJvciA9IDA7Ci0JaW50CQkJZmxhZ3MgPSAwOwogCiAJeGZzX2l0cmFjZV9lbnRyeShpcCk7CisKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCisJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKKwogCWlmIChzeW5jKSB7CiAJCWVycm9yID0geGZzX3dhaXRfb25fcGFnZXMoaXAsIDAsIC0xKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBvdXRfZXJyb3I7Ci0JCWZsYWdzIHw9IEZMVVNIX1NZTkM7CisJCQlnb3RvIG91dDsKIAl9Ci0JZXJyb3IgPSB4ZnNfaW5vZGVfZmx1c2goaXAsIGZsYWdzKTsKIAotb3V0X2Vycm9yOgorCS8qCisJICogQnlwYXNzIGlub2RlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBjbGVhbmVkIGJ5CisJICogdGhlIGlub2RlIGZsdXNoIGNsdXN0ZXJpbmcgY29kZSBpbnNpZGUgeGZzX2lmbHVzaAorCSAqLworCWlmICh4ZnNfaW5vZGVfY2xlYW4oaXApKQorCQlnb3RvIG91dDsKKworCS8qCisJICogV2UgbWFrZSB0aGlzIG5vbi1ibG9ja2luZyBpZiB0aGUgaW5vZGUgaXMgY29udGVuZGVkLCByZXR1cm4KKwkgKiBFQUdBSU4gdG8gaW5kaWNhdGUgdG8gdGhlIGNhbGxlciB0aGF0IHRoZXkgZGlkIG5vdCBzdWNjZWVkLgorCSAqIFRoaXMgcHJldmVudHMgdGhlIGZsdXNoIHBhdGggZnJvbSBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlCisJICogYW5vdGhlciBvcGVyYXRpb24gcmlnaHQgbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCisJICovCisJaWYgKHN5bmMpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwkJeGZzX2lmbG9jayhpcCk7CisKKwkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX1NZTkMpOworCX0gZWxzZSB7CisJCWVycm9yID0gRUFHQUlOOworCQlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKQorCQkJZ290byBvdXQ7CisJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWVycm9yID0geGZzX2lmbHVzaChpcCwgWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKKwl9CisKKyBvdXRfdW5sb2NrOgorCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKyBvdXQ6CiAJLyoKIAkgKiBpZiB3ZSBmYWlsZWQgdG8gd3JpdGUgb3V0IHRoZSBpbm9kZSB0aGVuIG1hcmsKIAkgKiBpdCBkaXJ0eSBhZ2FpbiBzbyB3ZSdsbCB0cnkgYWdhaW4gbGF0ZXIuCiAJICovCiAJaWYgKGVycm9yKQogCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKLQogCXJldHVybiAtZXJyb3I7CiB9CiAKQEAgLTExNjksMTggKzExODcsMTIgQEAKIAlzdGF0cC0+Zl9iZnJlZSA9IHN0YXRwLT5mX2JhdmFpbCA9CiAJCQkJc2JwLT5zYl9mZGJsb2NrcyAtIFhGU19BTExPQ19TRVRfQVNJREUobXApOwogCWZha2Vpbm9zID0gc3RhdHAtPmZfYmZyZWUgPDwgc2JwLT5zYl9pbm9wYmxvZzsKLSNpZiBYRlNfQklHX0lOVU1TCi0JZmFrZWlub3MgKz0gbXAtPm1faW5vYWRkOwotI2VuZGlmCiAJc3RhdHAtPmZfZmlsZXMgPQogCSAgICBNSU4oc2JwLT5zYl9pY291bnQgKyBmYWtlaW5vcywgKF9fdWludDY0X3QpWEZTX01BWElOVU1CRVIpOwogCWlmIChtcC0+bV9tYXhpY291bnQpCi0jaWYgWEZTX0JJR19JTlVNUwotCQlpZiAoIW1wLT5tX2lub2FkZCkKLSNlbmRpZgotCQkJc3RhdHAtPmZfZmlsZXMgPSBtaW5fdCh0eXBlb2Yoc3RhdHAtPmZfZmlsZXMpLAotCQkJCQkJc3RhdHAtPmZfZmlsZXMsCi0JCQkJCQltcC0+bV9tYXhpY291bnQpOworCQlzdGF0cC0+Zl9maWxlcyA9IG1pbl90KHR5cGVvZihzdGF0cC0+Zl9maWxlcyksCisJCQkJCXN0YXRwLT5mX2ZpbGVzLAorCQkJCQltcC0+bV9tYXhpY291bnQpOwogCXN0YXRwLT5mX2ZmcmVlID0gc3RhdHAtPmZfZmlsZXMgLSAoc2JwLT5zYl9pY291bnQgLSBzYnAtPnNiX2lmcmVlKTsKIAlzcGluX3VubG9jaygmbXAtPm1fc2JfbG9jayk7CiAKQEAgLTEzMDIsNTcgKzEzMTQsNiBAQAogCXJldHVybiAteGZzX3Nob3dhcmdzKFhGU19NKG1udC0+bW50X3NiKSwgbSk7CiB9CiAKLVNUQVRJQyBpbnQKLXhmc19mc19xdW90YXN5bmMoCi0Jc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKLQlpbnQJCQl0eXBlKQotewotCXJldHVybiAtWEZTX1FNX1FVT1RBQ1RMKFhGU19NKHNiKSwgUV9YUVVPVEFTWU5DLCAwLCBOVUxMKTsKLX0KLQotU1RBVElDIGludAoteGZzX2ZzX2dldHhzdGF0ZSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCXN0cnVjdCBmc19xdW90YV9zdGF0CSpmcXMpCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLCBRX1hHRVRRU1RBVCwgMCwgKGNhZGRyX3QpZnFzKTsKLX0KLQotU1RBVElDIGludAoteGZzX2ZzX3NldHhzdGF0ZSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCXVuc2lnbmVkIGludAkJZmxhZ3MsCi0JaW50CQkJb3ApCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLCBvcCwgMCwgKGNhZGRyX3QpJmZsYWdzKTsKLX0KLQotU1RBVElDIGludAoteGZzX2ZzX2dldHhxdW90YSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCWludAkJCXR5cGUsCi0JcWlkX3QJCQlpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQotewotCXJldHVybiAtWEZTX1FNX1FVT1RBQ1RMKFhGU19NKHNiKSwKLQkJCQkgKHR5cGUgPT0gVVNSUVVPVEEpID8gUV9YR0VUUVVPVEEgOgotCQkJCSAgKCh0eXBlID09IEdSUFFVT1RBKSA/IFFfWEdFVEdRVU9UQSA6Ci0JCQkJICAgUV9YR0VUUFFVT1RBKSwgaWQsIChjYWRkcl90KWZkcSk7Ci19Ci0KLVNUQVRJQyBpbnQKLXhmc19mc19zZXR4cXVvdGEoCi0Jc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKLQlpbnQJCQl0eXBlLAotCXFpZF90CQkJaWQsCi0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmZkcSkKLXsKLQlyZXR1cm4gLVhGU19RTV9RVU9UQUNUTChYRlNfTShzYiksCi0JCQkJICh0eXBlID09IFVTUlFVT1RBKSA/IFFfWFNFVFFMSU0gOgotCQkJCSAgKCh0eXBlID09IEdSUFFVT1RBKSA/IFFfWFNFVEdRTElNIDoKLQkJCQkgICBRX1hTRVRQUUxJTSksIGlkLCAoY2FkZHJfdClmZHEpOwotfQotCiAvKgogICogVGhpcyBmdW5jdGlvbiBmaWxscyBpbiB4ZnNfbW91bnRfdCBmaWVsZHMgYmFzZWQgb24gbW91bnQgYXJncy4KICAqIE5vdGU6IHRoZSBzdXBlcmJsb2NrIF9oYXNfIG5vdyBiZWVuIHJlYWQgaW4uCkBAIC0xNDM1LDcgKzEzOTYsOSBAQAogCXNiX21pbl9ibG9ja3NpemUoc2IsIEJCU0laRSk7CiAJc2ItPnNfeGF0dHIgPSB4ZnNfeGF0dHJfaGFuZGxlcnM7CiAJc2ItPnNfZXhwb3J0X29wID0gJnhmc19leHBvcnRfb3BlcmF0aW9uczsKKyNpZmRlZiBDT05GSUdfWEZTX1FVT1RBCiAJc2ItPnNfcWNvcCA9ICZ4ZnNfcXVvdGFjdGxfb3BlcmF0aW9uczsKKyNlbmRpZgogCXNiLT5zX29wID0gJnhmc19zdXBlcl9vcGVyYXRpb25zOwogCiAJZXJyb3IgPSB4ZnNfZG1vcHNfZ2V0KG1wKTsKQEAgLTE1NzgsMTQgKzE1NDEsNiBAQAogCS5zaG93X29wdGlvbnMJCT0geGZzX2ZzX3Nob3dfb3B0aW9ucywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zID0gewotCS5xdW90YV9zeW5jCQk9IHhmc19mc19xdW90YXN5bmMsCi0JLmdldF94c3RhdGUJCT0geGZzX2ZzX2dldHhzdGF0ZSwKLQkuc2V0X3hzdGF0ZQkJPSB4ZnNfZnNfc2V0eHN0YXRlLAotCS5nZXRfeHF1b3RhCQk9IHhmc19mc19nZXR4cXVvdGEsCi0JLnNldF94cXVvdGEJCT0geGZzX2ZzX3NldHhxdW90YSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB4ZnNfZnNfdHlwZSA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQkJPSAieGZzIiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCmluZGV4IGQ1ZDc3NmQuLjVhMmVhM2EgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaApAQCAtOTMsNiArOTMsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIHhmc19leHBvcnRfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqeGZzX3hhdHRyX2hhbmRsZXJzW107CitleHRlcm4gc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9uczsKIAogI2RlZmluZSBYRlNfTShzYikJCSgoc3RydWN0IHhmc19tb3VudCAqKSgoc2IpLT5zX2ZzX2luZm8pKQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKaW5kZXggNWY2ZGUxZS4uMDRmMDU4YyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaApAQCAtMTksNiArMTksNyBAQAogI2RlZmluZSBYRlNfU1lOQ19IIDEKIAogc3RydWN0IHhmc19tb3VudDsKK3N0cnVjdCB4ZnNfcGVyYWc7CiAKIHR5cGVkZWYgc3RydWN0IGJodl92ZnNfc3luY193b3JrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdfbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCmluZGV4IGY2NTk4M2EuLmFkN2ZiZWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaApAQCAtNDEsMTEgKzQxLDYgQEAKICNkZWZpbmUgSU9fSU5WSVMJMHgwMDAyMAkJLyogZG9uJ3QgdXBkYXRlIGlub2RlIHRpbWVzdGFtcHMgKi8KIAogLyoKLSAqIEZsYWdzIGZvciB4ZnNfaW5vZGVfZmx1c2gKLSAqLwotI2RlZmluZSBGTFVTSF9TWU5DCQkxCS8qIHdhaXQgZm9yIGZsdXNoIHRvIGNvbXBsZXRlCSovCi0KLS8qCiAgKiBGbHVzaC9JbnZhbGlkYXRlIG9wdGlvbnMgZm9yIHZvcF90b3NzL2ZsdXNoL2ZsdXNoaW52YWxfcGFnZXMuCiAgKi8KICNkZWZpbmUgRklfTk9ORQkJCTAJLyogbm9uZSAqLwpAQCAtNTUsMzMgKzUwLDYgQEAKIAkJCQkJICAgdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuICovCiAKIC8qCi0gKiBEZWFsaW5nIHdpdGggYmFkIGlub2RlcwotICovCi1zdGF0aWMgaW5saW5lIGludCBWTl9CQUQoc3RydWN0IGlub2RlICp2cCkKLXsKLQlyZXR1cm4gaXNfYmFkX2lub2RlKHZwKTsKLX0KLQotLyoKLSAqIEV4dHJhY3RpbmcgYXRpbWUgdmFsdWVzIGluIHZhcmlvdXMgZm9ybWF0cwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdm5fYXRpbWVfdG9fYnN0aW1lKHN0cnVjdCBpbm9kZSAqdnAsIHhmc19ic3RpbWVfdCAqYnNfYXRpbWUpCi17Ci0JYnNfYXRpbWUtPnR2X3NlYyA9IHZwLT5pX2F0aW1lLnR2X3NlYzsKLQlic19hdGltZS0+dHZfbnNlYyA9IHZwLT5pX2F0aW1lLnR2X25zZWM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bl9hdGltZV90b190aW1lc3BlYyhzdHJ1Y3QgaW5vZGUgKnZwLCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQotewotCSp0cyA9IHZwLT5pX2F0aW1lOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdm5fYXRpbWVfdG9fdGltZV90KHN0cnVjdCBpbm9kZSAqdnAsIHRpbWVfdCAqdHQpCi17Ci0JKnR0ID0gdnAtPmlfYXRpbWUudHZfc2VjOwotfQotCi0vKgogICogU29tZSB1c2VmdWwgcHJlZGljYXRlcy4KICAqLwogI2RlZmluZSBWTl9NQVBQRUQodnApCW1hcHBpbmdfbWFwcGVkKHZwLT5pX21hcHBpbmcpCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKaW5kZXggNjU0M2MwYi4uZTRiYWJjYyAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwpAQCAtODA0LDcgKzgwNCw3IEBACiAJdWludAkJCWZsaXN0X2xvY2tlZDsKIAl4ZnNfZHF1b3RfdAkJKmQ7CiAKLQlBU1NFUlQoWEZTX0RRX0lTX0hBU0hfTE9DS0VEKHFoKSk7CisJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmcWgtPnFoX2xvY2spKTsKIAogCWZsaXN0X2xvY2tlZCA9IEJfRkFMU0U7CiAKQEAgLTg3Nyw3ICs4NzcsNyBAQAogCQkJLyoKIAkJCSAqIG1vdmUgdGhlIGRxdW90IHRvIHRoZSBmcm9udCBvZiB0aGUgaGFzaGNoYWluCiAJCQkgKi8KLQkJCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwkJCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnFoLT5xaF9sb2NrKSk7CiAJCQlpZiAoZHFwLT5ITF9QUkVWUCAhPSAmcWgtPnFoX25leHQpIHsKIAkJCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsCiAJCQkJCQkgICJEUUxPT0tVUDogSEFTSCBNT1ZFVE9GUk9OVCIpOwpAQCAtODkyLDEzICs4OTIsMTMgQEAKIAkJCX0KIAkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkxPT0tVUCBFTkQiKTsKIAkJCSpPX2RxcHAgPSBkcXA7Ci0JCQlBU1NFUlQoWEZTX0RRX0lTX0hBU0hfTE9DS0VEKHFoKSk7CisJCQlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZxaC0+cWhfbG9jaykpOwogCQkJcmV0dXJuICgwKTsKIAkJfQogCX0KIAogCSpPX2RxcHAgPSBOVUxMOwotCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZxaC0+cWhfbG9jaykpOwogCXJldHVybiAoMSk7CiB9CiAKQEAgLTk1Niw3ICs5NTYsNyBAQAogCQkJQVNTRVJUKGlwLT5pX2dkcXVvdCA9PSBOVUxMKTsKIAl9CiAjZW5kaWYKLQlYRlNfRFFfSEFTSF9MT0NLKGgpOworCW11dGV4X2xvY2soJmgtPnFoX2xvY2spOwogCiAJLyoKIAkgKiBMb29rIGluIHRoZSBjYWNoZSAoaGFzaHRhYmxlKS4KQEAgLTk3MSw3ICs5NzEsNyBAQAogCQkgKi8KIAkJQVNTRVJUKCpPX2RxcHApOwogCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRCgqT19kcXBwKSk7Ci0JCVhGU19EUV9IQVNIX1VOTE9DSyhoKTsKKwkJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKIAkJeGZzX2RxdHJhY2VfZW50cnkoKk9fZHFwcCwgIkRRR0VUIERPTkUgKEZST00gQ0FDSEUpIik7CiAJCXJldHVybiAoMCk7CS8qIHN1Y2Nlc3MgKi8KIAl9CkBAIC05OTEsNyArOTkxLDcgQEAKIAkgKiB3ZSBkb24ndCBrZWVwIHRoZSBsb2NrIGFjcm9zcyBhIGRpc2sgcmVhZAogCSAqLwogCXZlcnNpb24gPSBoLT5xaF92ZXJzaW9uOwotCVhGU19EUV9IQVNIX1VOTE9DSyhoKTsKKwltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgZHF1b3Qgb24gdGhlIGtlcm5lbCBoZWFwLCBhbmQgcmVhZCB0aGUgb25kaXNrCkBAIC0xMDU2LDcgKzEwNTYsNyBAQAogCS8qCiAJICogSGFzaGxvY2sgY29tZXMgYWZ0ZXIgaWxvY2sgaW4gbG9jayBvcmRlcgogCSAqLwotCVhGU19EUV9IQVNIX0xPQ0soaCk7CisJbXV0ZXhfbG9jaygmaC0+cWhfbG9jayk7CiAJaWYgKHZlcnNpb24gIT0gaC0+cWhfdmVyc2lvbikgewogCQl4ZnNfZHF1b3RfdCAqdG1wZHFwOwogCQkvKgpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIAkJCSAqIGFuZCBzdGFydCBvdmVyLgogCQkJICovCiAJCQl4ZnNfcW1fZHFwdXQodG1wZHFwKTsKLQkJCVhGU19EUV9IQVNIX1VOTE9DSyhoKTsKKwkJCW11dGV4X3VubG9jaygmaC0+cWhfbG9jayk7CiAJCQl4ZnNfcW1fZHFkZXN0cm95KGRxcCk7CiAJCQlYUU1fU1RBVFNfSU5DKHhxbXN0YXRzLnhzX3FtX2RxdW90X2R1cHMpOwogCQkJZ290byBhZ2FpbjsKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJICogUHV0IHRoZSBkcXVvdCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoYXNoLWNoYWluIGFuZCBtcCdzIGxpc3QKIAkgKiBMT0NLIE9SREVSOiBoYXNobG9jaywgZnJlZWxpc3Rsb2NrLCBtcGxpc3Rsb2NrLCB1ZHFsb2NrLCBnZHFsb2NrIC4uCiAJICovCi0JQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChoKSk7CisJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmaC0+cWhfbG9jaykpOwogCWRxcC0+cV9oYXNoID0gaDsKIAlYUU1fSEFTSExJU1RfSU5TRVJUKGgsIGRxcCk7CiAKQEAgLTExMDIsNyArMTEwMiw3IEBACiAJWFFNX01QTElTVF9JTlNFUlQoJihYRlNfUUlfTVBMX0xJU1QobXApKSwgZHFwKTsKIAogCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQlYRlNfRFFfSEFTSF9VTkxPQ0soaCk7CisJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKICBkcXJldDoKIAlBU1NFUlQoKGlwID09IE5VTEwpIHx8IHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFHRVQgRE9ORSIpOwpAQCAtMTQ0MCw3ICsxNDQwLDcgQEAKIAl4ZnNfbW91bnRfdAkqbXAgPSBkcXAtPnFfbW91bnQ7CiAKIAlBU1NFUlQoWEZTX1FNX0lTX01QTElTVF9MT0NLRUQobXApKTsKLQlBU1NFUlQoWEZTX0RRX0lTX0hBU0hfTE9DS0VEKGRxcC0+cV9oYXNoKSk7CisJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmZHFwLT5xX2hhc2gtPnFoX2xvY2spKTsKIAogCXhmc19kcWxvY2soZHFwKTsKIAkvKgpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIAkgKi8KIAlpZiAoZHFwLT5xX25yZWZzICE9IDApIHsKIAkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCVhGU19EUV9IQVNIX1VOTE9DSyhkcXAtPnFfaGFzaCk7CisJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogCQlyZXR1cm4gKDEpOwogCX0KIApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAltZW1zZXQoJmRxcC0+cV9jb3JlLCAwLCBzaXplb2YoZHFwLT5xX2NvcmUpKTsKIAl4ZnNfZHFmdW5sb2NrKGRxcCk7CiAJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JWEZTX0RRX0hBU0hfVU5MT0NLKHRoaXNoYXNoKTsKKwltdXRleF91bmxvY2soJnRoaXNoYXNoLT5xaF9sb2NrKTsKIAlyZXR1cm4gKDApOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmggYi9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmgKaW5kZXggZDQ0M2U5My4uZGUwZjQwMiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaApAQCAtMzQsNyArMzQsNyBAQAogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZHFoYXNoIHsKIAlzdHJ1Y3QgeGZzX2RxdW90ICpxaF9uZXh0OwotCW11dGV4X3QJCSAgcWhfbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJICBxaF9sb2NrOwogCXVpbnQJCSAgcWhfdmVyc2lvbjsJLyogZXZlciBpbmNyZWFzaW5nIHZlcnNpb24gKi8KIAl1aW50CQkgIHFoX25lbGVtczsJLyogbnVtYmVyIG9mIGRxdW90cyBvbiB0aGUgbGlzdCAqLwogfSB4ZnNfZHFoYXNoX3Q7CkBAIC04MSw3ICs4MSw3IEBACiAJeGZzX3FjbnRfdAkgcV9yZXNfYmNvdW50OwkvKiB0b3RhbCByZWd1bGFyIG5ibGtzIHVzZWQrcmVzZXJ2ZWQgKi8KIAl4ZnNfcWNudF90CSBxX3Jlc19pY291bnQ7CS8qIHRvdGFsIGlub3MgYWxsb2NkK3Jlc2VydmVkICovCiAJeGZzX3FjbnRfdAkgcV9yZXNfcnRiY291bnQ7LyogdG90YWwgcmVhbHRpbWUgYmxrcyB1c2VkK3Jlc2VydmVkICovCi0JbXV0ZXhfdAkJIHFfcWxvY2s7CS8qIHF1b3RhIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJIHFfcWxvY2s7CS8qIHF1b3RhIGxvY2sgKi8KIAlzdHJ1Y3QgY29tcGxldGlvbiBxX2ZsdXNoOwkvKiBmbHVzaCBjb21wbGV0aW9uIHF1ZXVlICovCiAJYXRvbWljX3QgICAgICAgICAgcV9waW5jb3VudDsJLyogZHF1b3QgcGluIGNvdW50ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcV9waW53YWl0OwkvKiBkcXVvdCBwaW5uaW5nIHdhaXQgcXVldWUgKi8KQEAgLTEwOSwxOSArMTA5LDYgQEAKIAogI2RlZmluZSBYRlNfRFFIT0xEKGRxcCkJCSgoZHFwKS0+cV9ucmVmcysrKQogCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50Ci1YRlNfRFFfSVNfTE9DS0VEKHhmc19kcXVvdF90ICpkcXApCi17Ci0JaWYgKG11dGV4X3RyeWxvY2soJmRxcC0+cV9xbG9jaykpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfcWxvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotCiAvKgogICogTWFuYWdlIHRoZSBxX2ZsdXNoIGNvbXBsZXRpb24gcXVldWUgZW1iZWRkZWQgaW4gdGhlIGRxdW90LiAgVGhpcyBjb21wbGV0aW9uCiAgKiBxdWV1ZSBzeW5jaHJvbml6ZXMgcHJvY2Vzc2VzIGF0dGVtcHRpbmcgdG8gZmx1c2ggdGhlIGluLWNvcmUgZHF1b3QgYmFjayB0bwpAQCAtMTQyLDYgKzEyOSw3IEBACiAJY29tcGxldGUoJmRxcC0+cV9mbHVzaCk7CiB9CiAKKyNkZWZpbmUgWEZTX0RRX0lTX0xPQ0tFRChkcXApCShtdXRleF9pc19sb2NrZWQoJigoZHFwKS0+cV9xbG9jaykpKQogI2RlZmluZSBYRlNfRFFfSVNfT05fRlJFRUxJU1QoZHFwKSAgKChkcXApLT5kcV9mbG5leHQgIT0gKGRxcCkpCiAjZGVmaW5lIFhGU19EUV9JU19ESVJUWShkcXApCSgoZHFwKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfRElSVFkpCiAjZGVmaW5lIFhGU19RTV9JU1VEUShkcXApCSgoZHFwKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfVVNFUikKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCA3YTJiZWI2Li41YjY2OTUwIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC01NSw3ICs1NSw3IEBACiAgKiBxdW90YSBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgbWFpbnRhaW5pbmcgdGhlIGZyZWVsaXN0IGFuZCBoYXNoCiAgKiB0YWJsZXMgb2YgZHF1b3RzLgogICovCi1tdXRleF90CQl4ZnNfR3FtX2xvY2s7CitzdHJ1Y3QgbXV0ZXgJeGZzX0dxbV9sb2NrOwogc3RydWN0IHhmc19xbQkqeGZzX0dxbTsKIHVpbnQJCW5kcXVvdDsKIApAQCAtNjksOCArNjksNiBAQAogCiBTVEFUSUMgdm9pZAl4ZnNfcW1fZnJlZWxpc3RfaW5pdCh4ZnNfZnJsaXN0X3QgKik7CiBTVEFUSUMgdm9pZAl4ZnNfcW1fZnJlZWxpc3RfZGVzdHJveSh4ZnNfZnJsaXN0X3QgKik7Ci1TVEFUSUMgaW50CXhmc19xbV9tcGxpc3Rfbm93YWl0KHhmc19tb3VudF90ICopOwotU1RBVElDIGludAl4ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoeGZzX2RxdW90X3QgKik7CiAKIFNUQVRJQyBpbnQJeGZzX3FtX2luaXRfcXVvdGFpbm9zKHhmc19tb3VudF90ICopOwogU1RBVElDIGludAl4ZnNfcW1faW5pdF9xdW90YWluZm8oeGZzX21vdW50X3QgKik7CkBAIC04Miw3ICs4MCw3IEBACiB9OwogCiAjaWZkZWYgREVCVUcKLWV4dGVybiBtdXRleF90CXFjaGVja19sb2NrOworZXh0ZXJuIHN0cnVjdCBtdXRleAlxY2hlY2tfbG9jazsKICNlbmRpZgogCiAjaWZkZWYgUVVPVEFERUJVRwpAQCAtMjE5LDcgKzIxNyw3IEBACiAJICogdGhlIHN0cnVjdHVyZSBjb3VsZCBkaXNhcHBlYXIgYmV0d2VlbiB0aGUgZW50cnkgdG8gdGhpcyByb3V0aW5lIGFuZAogCSAqIGEgSE9MRCBvcGVyYXRpb24gaWYgbm90IGxvY2tlZC4KIAkgKi8KLQlYRlNfUU1fTE9DSyh4ZnNfR3FtKTsKKwltdXRleF9sb2NrKCZ4ZnNfR3FtX2xvY2spOwogCiAJaWYgKHhmc19HcW0gPT0gTlVMTCkKIAkJeGZzX0dxbSA9IHhmc19HcW1faW5pdCgpOwpAQCAtMjI4LDggKzIyNiw4IEBACiAJICogZGVidWdnaW5nIGFuZCBzdGF0aXN0aWNhbCBwdXJwb3NlcywgYnV0IC4uLgogCSAqIEp1c3QgdGFrZSBhIHJlZmVyZW5jZSBhbmQgZ2V0IG91dC4KIAkgKi8KLQlYRlNfUU1fSE9MRCh4ZnNfR3FtKTsKLQlYRlNfUU1fVU5MT0NLKHhmc19HcW0pOworCXhmc19HcW0tPnFtX25yZWZzKys7CisJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzcsMTMgKzI3NSwxMiBAQAogCSAqIERlc3Ryb3kgdGhlIGVudGlyZSBYUU0uIElmIHNvbWVib2R5IG1vdW50cyB3aXRoIHF1b3Rhb24sIHRoaXMnbGwKIAkgKiBiZSByZXN0YXJ0ZWQuCiAJICovCi0JWEZTX1FNX0xPQ0soeGZzX0dxbSk7Ci0JWEZTX1FNX1JFTEUoeGZzX0dxbSk7Ci0JaWYgKHhmc19HcW0tPnFtX25yZWZzID09IDApIHsKKwltdXRleF9sb2NrKCZ4ZnNfR3FtX2xvY2spOworCWlmICgtLXhmc19HcW0tPnFtX25yZWZzID09IDApIHsKIAkJeGZzX3FtX2Rlc3Ryb3koeGZzX0dxbSk7CiAJCXhmc19HcW0gPSBOVUxMOwogCX0KLQlYRlNfUU1fVU5MT0NLKHhmc19HcW0pOworCW11dGV4X3VubG9jaygmeGZzX0dxbV9sb2NrKTsKIH0KIAogLyoKQEAgLTU3NywxMCArNTc0LDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghIHhmc19xbV9kcWhhc2hsb2NrX25vd2FpdChkcXApKSB7CisJCWlmICghbXV0ZXhfdHJ5bG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spKSB7CiAJCQlucmVjbCA9IFhGU19RSV9NUExSRUNMQUlNUyhtcCk7CiAJCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhtcCk7Ci0JCQlYRlNfRFFfSEFTSF9MT0NLKGRxcC0+cV9oYXNoKTsKKwkJCW11dGV4X2xvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKTsKIAkJCXhmc19xbV9tcGxpc3RfbG9jayhtcCk7CiAKIAkJCS8qCkBAIC01OTAsNyArNTg3LDcgQEAKIAkJCSAqIHRoaXMgcG9pbnQsIGJ1dCBzb21lYm9keSBtaWdodCBiZSB0YWtpbmcgdGhpbmdzIG9mZi4KIAkJCSAqLwogCQkJaWYgKG5yZWNsICE9IFhGU19RSV9NUExSRUNMQUlNUyhtcCkpIHsKLQkJCQlYRlNfRFFfSEFTSF9VTkxPQ0soZHFwLT5xX2hhc2gpOworCQkJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAJCX0KQEAgLTYzMiw3ICs2MjksNiBAQAogCXhmc19kcWlkX3QJaWQsCiAJdWludAkJdHlwZSwKIAl1aW50CQlkb2FsbG9jLAotCXVpbnQJCWRvbG9jaywKIAl4ZnNfZHF1b3RfdAkqdWRxaGludCwgLyogaGludCAqLwogCXhmc19kcXVvdF90CSoqSU9faWRxcHApCiB7CkBAIC02NDEsMTYgKzYzNywxNiBAQAogCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAJZXJyb3IgPSAwOworCiAJLyoKIAkgKiBTZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGl0IGluIHRoZSBpbm9kZSBpdHNlbGYuIElPX2lkcXBwIGlzCiAJICogJmlfdWRxdW90IG9yICZpX2dkcXVvdC4gVGhpcyBtYWRlIHRoZSBjb2RlIGxvb2sgd2VpcmQsIGJ1dAogCSAqIG1hZGUgdGhlIGxvZ2ljIGEgbG90IHNpbXBsZXIuCiAJICovCi0JaWYgKChkcXAgPSAqSU9faWRxcHApKSB7Ci0JCWlmIChkb2xvY2spCi0JCQl4ZnNfZHFsb2NrKGRxcCk7CisJZHFwID0gKklPX2lkcXBwOworCWlmIChkcXApIHsKIAkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiRFFBVFRBQ0g6IGZvdW5kIGluIGlwIik7Ci0JCWdvdG8gZG9uZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyoKQEAgLTY1OSwzOCArNjU1LDM4IEBACiAJICogbG9va3VwIGJ5IGRxaWQgKHhmc19xbV9kcWdldCkgYnkgY2FjaGluZyBhIGdyb3VwIGRxdW90IGluc2lkZQogCSAqIHRoZSB1c2VyIGRxdW90LgogCSAqLwotCUFTU0VSVCghdWRxaGludCB8fCB0eXBlID09IFhGU19EUV9HUk9VUCB8fCB0eXBlID09IFhGU19EUV9QUk9KKTsKLQlpZiAodWRxaGludCAmJiAhZG9sb2NrKQorCWlmICh1ZHFoaW50KSB7CisJCUFTU0VSVCh0eXBlID09IFhGU19EUV9HUk9VUCB8fCB0eXBlID09IFhGU19EUV9QUk9KKTsKIAkJeGZzX2RxbG9jayh1ZHFoaW50KTsKIAotCS8qCi0JICogTm8gbmVlZCB0byB0YWtlIGRxbG9jayB0byBsb29rIGF0IHRoZSBpZC4KLQkgKiBUaGUgSUQgY2FuJ3QgY2hhbmdlIHVudGlsIGl0IGdldHMgcmVjbGFpbWVkLCBhbmQgaXQgd29uJ3QKLQkgKiBiZSByZWNsYWltZWQgYXMgbG9uZyBhcyB3ZSBoYXZlIGEgcmVmIGZyb20gaW5vZGUgYW5kIHdlIGhvbGQKLQkgKiB0aGUgaWxvY2suCi0JICovCi0JaWYgKHVkcWhpbnQgJiYKLQkgICAgKGRxcCA9IHVkcWhpbnQtPnFfZ2RxdW90KSAmJgotCSAgICAoYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCkgPT0gaWQpKSB7Ci0JCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKHVkcWhpbnQpKTsKLQkJeGZzX2RxbG9jayhkcXApOwotCQlYRlNfRFFIT0xEKGRxcCk7Ci0JCUFTU0VSVCgqSU9faWRxcHAgPT0gTlVMTCk7Ci0JCSpJT19pZHFwcCA9IGRxcDsKLQkJaWYgKCFkb2xvY2spIHsKKwkJLyoKKwkJICogTm8gbmVlZCB0byB0YWtlIGRxbG9jayB0byBsb29rIGF0IHRoZSBpZC4KKwkJICoKKwkJICogVGhlIElEIGNhbid0IGNoYW5nZSB1bnRpbCBpdCBnZXRzIHJlY2xhaW1lZCwgYW5kIGl0IHdvbid0CisJCSAqIGJlIHJlY2xhaW1lZCBhcyBsb25nIGFzIHdlIGhhdmUgYSByZWYgZnJvbSBpbm9kZSBhbmQgd2UKKwkJICogaG9sZCB0aGUgaWxvY2suCisJCSAqLworCQlkcXAgPSB1ZHFoaW50LT5xX2dkcXVvdDsKKwkJaWYgKGRxcCAmJiBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2lkKSA9PSBpZCkgeworCQkJeGZzX2RxbG9jayhkcXApOworCQkJWEZTX0RRSE9MRChkcXApOworCQkJQVNTRVJUKCpJT19pZHFwcCA9PSBOVUxMKTsKKwkJCSpJT19pZHFwcCA9IGRxcDsKKwogCQkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCQl4ZnNfZHF1bmxvY2sodWRxaGludCk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlnb3RvIGRvbmU7Ci0JfQotCS8qCi0JICogV2UgY2FuJ3QgaG9sZCBhIGRxdW90IGxvY2sgd2hlbiB3ZSBjYWxsIHRoZSBkcWdldCBjb2RlLgotCSAqIFdlJ2xsIGRlYWRsb2NrIGluIG5vIHRpbWUsIGJlY2F1c2Ugb2YgKG5vdCBjb25mb3JtaW5nIHRvKQotCSAqIGxvY2sgb3JkZXJpbmcgLSB0aGUgaW5vZGVsb2NrIGNvbWVzIGJlZm9yZSBhbnkgZHF1b3QgbG9jaywKLQkgKiBhbmQgd2UgbWF5IGRyb3AgYW5kIHJlYWNxdWlyZSB0aGUgaWxvY2sgaW4geGZzX3FtX2RxZ2V0KCkuCi0JICovCi0JaWYgKHVkcWhpbnQpCisKKwkJLyoKKwkJICogV2UgY2FuJ3QgaG9sZCBhIGRxdW90IGxvY2sgd2hlbiB3ZSBjYWxsIHRoZSBkcWdldCBjb2RlLgorCQkgKiBXZSdsbCBkZWFkbG9jayBpbiBubyB0aW1lLCBiZWNhdXNlIG9mIChub3QgY29uZm9ybWluZyB0bykKKwkJICogbG9jayBvcmRlcmluZyAtIHRoZSBpbm9kZWxvY2sgY29tZXMgYmVmb3JlIGFueSBkcXVvdCBsb2NrLAorCQkgKiBhbmQgd2UgbWF5IGRyb3AgYW5kIHJlYWNxdWlyZSB0aGUgaWxvY2sgaW4geGZzX3FtX2RxZ2V0KCkuCisJCSAqLwogCQl4ZnNfZHF1bmxvY2sodWRxaGludCk7CisJfQorCiAJLyoKIAkgKiBGaW5kIHRoZSBkcXVvdCBmcm9tIHNvbWV3aGVyZS4gVGhpcyBidW1wcyB0aGUKIAkgKiByZWZlcmVuY2UgY291bnQgb2YgZHF1b3QgYW5kIHJldHVybnMgaXQgbG9ja2VkLgpAQCAtNjk4LDQ4ICs2OTQsMTkgQEAKIAkgKiBkaXNrIGFuZCB3ZSBkaWRuJ3QgYXNrIGl0IHRvIGFsbG9jYXRlOwogCSAqIEVTUkNIIGlmIHF1b3RhcyBnb3QgdHVybmVkIG9mZiBzdWRkZW5seS4KIAkgKi8KLQlpZiAoKGVycm9yID0geGZzX3FtX2RxZ2V0KGlwLT5pX21vdW50LCBpcCwgaWQsIHR5cGUsCi0JCQkJIGRvYWxsb2N8WEZTX1FNT1BUX0RPV0FSTiwgJmRxcCkpKSB7Ci0JCWlmICh1ZHFoaW50ICYmIGRvbG9jaykKLQkJCXhmc19kcWxvY2sodWRxaGludCk7Ci0JCWdvdG8gZG9uZTsKLQl9CisJZXJyb3IgPSB4ZnNfcW1fZHFnZXQoaXAtPmlfbW91bnQsIGlwLCBpZCwgdHlwZSwgWEZTX1FNT1BUX0RPV0FSTiwgJmRxcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKIAl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUFUVEFDSDogZm91bmQgYnkgZHFnZXQiKTsKKwogCS8qCiAJICogZHFnZXQgbWF5IGhhdmUgZHJvcHBlZCBhbmQgcmUtYWNxdWlyZWQgdGhlIGlsb2NrLCBidXQgaXQgZ3VhcmFudGVlcwogCSAqIHRoYXQgdGhlIGRxdW90IHJldHVybmVkIGlzIHRoZSBvbmUgdGhhdCBzaG91bGQgZ28gaW4gdGhlIGlub2RlLgogCSAqLwogCSpJT19pZHFwcCA9IGRxcDsKLQlBU1NFUlQoZHFwKTsKLQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKLQlpZiAoISBkb2xvY2spIHsKLQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JaWYgKCEgdWRxaGludCkKLQkJZ290byBkb25lOwotCi0JQVNTRVJUKHVkcWhpbnQpOwotCUFTU0VSVChkb2xvY2spOwotCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwotCWlmICghIHhmc19xbV9kcWxvY2tfbm93YWl0KHVkcWhpbnQpKSB7Ci0JCXhmc19kcXVubG9jayhkcXApOwotCQl4ZnNfZHFsb2NrKHVkcWhpbnQpOwotCQl4ZnNfZHFsb2NrKGRxcCk7Ci0JfQotICAgICAgZG9uZToKLSNpZmRlZiBRVU9UQURFQlVHCi0JaWYgKHVkcWhpbnQpIHsKLQkJaWYgKGRvbG9jaykKLQkJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKHVkcWhpbnQpKTsKLQl9Ci0JaWYgKCEgZXJyb3IpIHsKLQkJaWYgKGRvbG9jaykKLQkJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwotCX0KLSNlbmRpZgotCXJldHVybiBlcnJvcjsKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC03NTQsMjQgKzcyMSwxNSBAQAogU1RBVElDIHZvaWQKIHhmc19xbV9kcWF0dGFjaF9ncm91cGhpbnQoCiAJeGZzX2RxdW90X3QJKnVkcSwKLQl4ZnNfZHF1b3RfdAkqZ2RxLAotCXVpbnQJCWxvY2tlZCkKKwl4ZnNfZHF1b3RfdAkqZ2RxKQogewogCXhmc19kcXVvdF90CSp0bXA7CiAKLSNpZmRlZiBRVU9UQURFQlVHCi0JaWYgKGxvY2tlZCkgewotCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRCh1ZHEpKTsKLQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZ2RxKSk7Ci0JfQotI2VuZGlmCi0JaWYgKCEgbG9ja2VkKQotCQl4ZnNfZHFsb2NrKHVkcSk7CisJeGZzX2RxbG9jayh1ZHEpOwogCiAJaWYgKCh0bXAgPSB1ZHEtPnFfZ2RxdW90KSkgewogCQlpZiAodG1wID09IGdkcSkgewotCQkJaWYgKCEgbG9ja2VkKQotCQkJCXhmc19kcXVubG9jayh1ZHEpOworCQkJeGZzX2RxdW5sb2NrKHVkcSk7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtNzgxLDggKzczOSw2IEBACiAJCSAqIGJlY2F1c2UgdGhlIGZyZWVsaXN0IGxvY2sgY29tZXMgYmVmb3JlIGRxbG9ja3MuCiAJCSAqLwogCQl4ZnNfZHF1bmxvY2sodWRxKTsKLQkJaWYgKGxvY2tlZCkKLQkJCXhmc19kcXVubG9jayhnZHEpOwogCQkvKgogCQkgKiB3ZSB0b29rIGEgaGFyZCByZWZlcmVuY2Ugb25jZSB1cG9uIGEgdGltZSBpbiBkcWdldCwKIAkJICogc28gZ2l2ZSBpdCBiYWNrIHdoZW4gdGhlIHVkcXVvdCBubyBsb25nZXIgcG9pbnRzIGF0IGl0CkBAIC03OTUsOSArNzUxLDcgQEAKIAogCX0gZWxzZSB7CiAJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKHVkcSkpOwotCQlpZiAoISBsb2NrZWQpIHsKLQkJCXhmc19kcWxvY2soZ2RxKTsKLQkJfQorCQl4ZnNfZHFsb2NrKGdkcSk7CiAJfQogCiAJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxKSk7CkBAIC04MTAsMTAgKzc2NCw5IEBACiAJCVhGU19EUUhPTEQoZ2RxKTsKIAkJdWRxLT5xX2dkcXVvdCA9IGdkcTsKIAl9Ci0JaWYgKCEgbG9ja2VkKSB7Ci0JCXhmc19kcXVubG9jayhnZHEpOwotCQl4ZnNfZHF1bmxvY2sodWRxKTsKLQl9CisKKwl4ZnNfZHF1bmxvY2soZ2RxKTsKKwl4ZnNfZHF1bmxvY2sodWRxKTsKIH0KIAogCkBAIC04MjEsOCArNzc0LDYgQEAKICAqIEdpdmVuIGEgbG9ja2VkIGlub2RlLCBhdHRhY2ggZHF1b3QocykgdG8gaXQsIHRha2luZyBVL0cvUC1RVU9UQU9OCiAgKiBpbnRvIGFjY291bnQuCiAgKiBJZiBYRlNfUU1PUFRfRFFBTExPQywgdGhlIGRxdW90KHMpIHdpbGwgYmUgYWxsb2NhdGVkIGlmIG5lZWRlZC4KLSAqIElmIFhGU19RTU9QVF9EUUxPQ0ssIHRoZSBkcXVvdChzKSB3aWxsIGJlIHJldHVybmVkIGxvY2tlZC4gVGhpcyBvcHRpb24gcHJldHR5Ci0gKiBtdWNoIG1hZGUgdGhpcyBjb2RlIGEgY29tcGxldGUgbWVzcywgYnV0IGl0IGhhcyBiZWVuIHByZXR0eSB1c2VmdWwuCiAgKiBJZiBYRlNfUU1PUFRfSUxPQ0tFRCwgdGhlbiBpbm9kZSBzZW50IGlzIGFscmVhZHkgbG9ja2VkIEVYQ0wuCiAgKiBJbm9kZSBtYXkgZ2V0IHVubG9ja2VkIGFuZCByZWxvY2tlZCBpbiBoZXJlLCBhbmQgdGhlIGNhbGxlciBtdXN0IGRlYWwgd2l0aAogICogdGhlIGNvbnNlcXVlbmNlcy4KQEAgLTg1MSw3ICs4MDIsNiBAQAogCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSkgewogCQllcnJvciA9IHhmc19xbV9kcWF0dGFjaF9vbmUoaXAsIGlwLT5pX2QuZGlfdWlkLCBYRlNfRFFfVVNFUiwKIAkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRQUxMT0MsCi0JCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0ssCiAJCQkJCQlOVUxMLCAmaXAtPmlfdWRxdW90KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBkb25lOwpAQCAtODYzLDExICs4MTMsOSBAQAogCQllcnJvciA9IFhGU19JU19HUVVPVEFfT04obXApID8KIAkJCXhmc19xbV9kcWF0dGFjaF9vbmUoaXAsIGlwLT5pX2QuZGlfZ2lkLCBYRlNfRFFfR1JPVVAsCiAJCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUFMTE9DLAotCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLLAogCQkJCQkJaXAtPmlfdWRxdW90LCAmaXAtPmlfZ2RxdW90KSA6CiAJCQl4ZnNfcW1fZHFhdHRhY2hfb25lKGlwLCBpcC0+aV9kLmRpX3Byb2ppZCwgWEZTX0RRX1BST0osCiAJCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUFMTE9DLAotCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLLAogCQkJCQkJaXAtPmlfdWRxdW90LCAmaXAtPmlfZ2RxdW90KTsKIAkJLyoKIAkJICogRG9uJ3Qgd29ycnkgYWJvdXQgdGhlIHVkcXVvdCB0aGF0IHdlIG1heSBoYXZlCkBAIC04OTgsMjIgKzg0NiwxMyBAQAogCQkvKgogCQkgKiBBdHRhY2ggaV9nZHF1b3QgdG8gdGhlIGdkcXVvdCBoaW50IGluc2lkZSB0aGUgaV91ZHF1b3QuCiAJCSAqLwotCQl4ZnNfcW1fZHFhdHRhY2hfZ3JvdXBoaW50KGlwLT5pX3VkcXVvdCwgaXAtPmlfZ2RxdW90LAotCQkJCQkgZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLKTsKKwkJeGZzX3FtX2RxYXR0YWNoX2dyb3VwaGludChpcC0+aV91ZHF1b3QsIGlwLT5pX2dkcXVvdCk7CiAJfQogCiAgICAgICBkb25lOgogCiAjaWZkZWYgUVVPVEFERUJVRwogCWlmICghIGVycm9yKSB7Ci0JCWlmIChpcC0+aV91ZHF1b3QpIHsKLQkJCWlmIChmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0spCi0JCQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoaXAtPmlfdWRxdW90KSk7Ci0JCX0KLQkJaWYgKGlwLT5pX2dkcXVvdCkgewotCQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykKLQkJCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChpcC0+aV9nZHF1b3QpKTsKLQkJfQogCQlpZiAoWEZTX0lTX1VRVU9UQV9PTihtcCkpCiAJCQlBU1NFUlQoaXAtPmlfdWRxdW90KTsKIAkJaWYgKFhGU19JU19PUVVPVEFfT04obXApKQpAQCAtMjA4Niw3ICsyMDI1LDcgQEAKIAkJICogYSBkcWxvb2t1cCBwcm9jZXNzIHRoYXQgaG9sZHMgdGhlIGhhc2hsb2NrIHRoYXQgaXMKIAkJICogd2FpdGluZyBmb3IgdGhlIGZyZWVsaXN0IGxvY2suCiAJCSAqLwotCQlpZiAoISB4ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoZHFwKSkgeworCQlpZiAoIW11dGV4X3RyeWxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKSkgewogCQkJeGZzX2RxZnVubG9jayhkcXApOwogCQkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCQlkcXAgPSBkcXAtPmRxX2ZsbmV4dDsKQEAgLTIxMDMsNyArMjA0Miw3IEBACiAJCQkvKiBYWFggcHV0IGEgc2VudGluZWwgc28gdGhhdCB3ZSBjYW4gY29tZSBiYWNrIGhlcmUgKi8KIAkJCXhmc19kcWZ1bmxvY2soZHFwKTsKIAkJCXhmc19kcXVubG9jayhkcXApOwotCQkJWEZTX0RRX0hBU0hfVU5MT0NLKGhhc2gpOworCQkJbXV0ZXhfdW5sb2NrKCZoYXNoLT5xaF9sb2NrKTsKIAkJCXhmc19xbV9mcmVlbGlzdF91bmxvY2soeGZzX0dxbSk7CiAJCQlpZiAoKytyZXN0YXJ0cyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCiAJCQkJcmV0dXJuIG5yZWNsYWltZWQ7CkBAIC0yMTIwLDcgKzIwNTksNyBAQAogCQlYUU1fSEFTSExJU1RfUkVNT1ZFKGhhc2gsIGRxcCk7CiAJCXhmc19kcWZ1bmxvY2soZHFwKTsKIAkJeGZzX3FtX21wbGlzdF91bmxvY2soZHFwLT5xX21vdW50KTsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGhhc2gpOworCQltdXRleF91bmxvY2soJmhhc2gtPnFoX2xvY2spOwogCiAgb2ZmX2ZyZWVsaXN0OgogCQlYUU1fRlJFRUxJU1RfUkVNT1ZFKGRxcCk7CkBAIC0yMjYyLDcgKzIyMDEsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoISB4ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoZHFwKSkKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jaykpCiAJCQlnb3RvIG1wbGlzdHVubG9jazsKIAogCQlBU1NFUlQoZHFwLT5xX25yZWZzID09IDApOwpAQCAtMjI3MSw3ICsyMjEwLDcgQEAKIAkJWFFNX0hBU0hMSVNUX1JFTU9WRShkcXAtPnFfaGFzaCwgZHFwKTsKIAkJWFFNX0ZSRUVMSVNUX1JFTU9WRShkcXApOwogCQlkcXBvdXQgPSBkcXA7Ci0JCVhGU19EUV9IQVNIX1VOTE9DSyhkcXAtPnFfaGFzaCk7CisJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogIG1wbGlzdHVubG9jazoKIAkJeGZzX3FtX21wbGlzdF91bmxvY2soZHFwLT5xX21vdW50KTsKIAkJeGZzX2RxZnVubG9jayhkcXApOwpAQCAtMjc3NCwzNCArMjcxMywzIEBACiB7CiAJeGZzX3FtX2ZyZWVsaXN0X2luc2VydCgoeGZzX2ZybGlzdF90ICopcWwtPnFoX3ByZXYsIGRxKTsKIH0KLQotU1RBVElDIGludAoteGZzX3FtX2RxaGFzaGxvY2tfbm93YWl0KAotCXhmc19kcXVvdF90ICpkcXApCi17Ci0JaW50IGxvY2tlZDsKLQotCWxvY2tlZCA9IG11dGV4X3RyeWxvY2soJigoZHFwKS0+cV9oYXNoLT5xaF9sb2NrKSk7Ci0JcmV0dXJuIGxvY2tlZDsKLX0KLQotaW50Ci14ZnNfcW1fZnJlZWxpc3RfbG9ja19ub3dhaXQoCi0JeGZzX3FtX3QgKnhxbSkKLXsKLQlpbnQgbG9ja2VkOwotCi0JbG9ja2VkID0gbXV0ZXhfdHJ5bG9jaygmKHhxbS0+cW1fZHFmcmVlbGlzdC5xaF9sb2NrKSk7Ci0JcmV0dXJuIGxvY2tlZDsKLX0KLQotU1RBVElDIGludAoteGZzX3FtX21wbGlzdF9ub3dhaXQoCi0JeGZzX21vdW50X3QJKm1wKQotewotCWludCBsb2NrZWQ7Ci0KLQlBU1NFUlQobXAtPm1fcXVvdGFpbmZvKTsKLQlsb2NrZWQgPSBtdXRleF90cnlsb2NrKCYoWEZTX1FJX01QTExPQ0sobXApKSk7Ci0JcmV0dXJuIGxvY2tlZDsKLX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaCBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAppbmRleCBkZGYwOTE2Li5hMzcxOTU0IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCkBAIC0yNyw3ICsyNyw3IEBACiBzdHJ1Y3QgeGZzX2lub2RlOwogCiBleHRlcm4gdWludAkJbmRxdW90OwotZXh0ZXJuIG11dGV4X3QJCXhmc19HcW1fbG9jazsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXgJeGZzX0dxbV9sb2NrOwogZXh0ZXJuIHN0cnVjdCB4ZnNfcW0JKnhmc19HcW07CiBleHRlcm4ga21lbV96b25lX3QJKnFtX2Rxem9uZTsKIGV4dGVybiBrbWVtX3pvbmVfdAkqcW1fZHF0cnh6b25lOwpAQCAtNzksNyArNzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2ZybGlzdCB7CiAgICAgICAgc3RydWN0IHhmc19kcXVvdCAqcWhfbmV4dDsKICAgICAgICBzdHJ1Y3QgeGZzX2RxdW90ICpxaF9wcmV2OwotICAgICAgIG11dGV4X3QJCSBxaF9sb2NrOworICAgICAgIHN0cnVjdCBtdXRleAkgcWhfbG9jazsKICAgICAgICB1aW50CQkgcWhfdmVyc2lvbjsKICAgICAgICB1aW50CQkgcWhfbmVsZW1zOwogfSB4ZnNfZnJsaXN0X3Q7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAl4ZnNfcXdhcm5jbnRfdAkgcWlfYndhcm5saW1pdDsJIC8qIGxpbWl0IGZvciBibGtzIHdhcm5pbmdzICovCiAJeGZzX3F3YXJuY250X3QJIHFpX2l3YXJubGltaXQ7CSAvKiBsaW1pdCBmb3IgaW5vZGVzIHdhcm5pbmdzICovCiAJeGZzX3F3YXJuY250X3QJIHFpX3J0Yndhcm5saW1pdDsvKiBsaW1pdCBmb3IgcnQgYmxrcyB3YXJuaW5ncyAqLwotCW11dGV4X3QJCSBxaV9xdW90YW9mZmxvY2s7LyogdG8gc2VyaWFsaXplIHF1b3Rhb2ZmICovCisJc3RydWN0IG11dGV4CSBxaV9xdW90YW9mZmxvY2s7LyogdG8gc2VyaWFsaXplIHF1b3Rhb2ZmICovCiAJeGZzX2ZpbGJsa3NfdAkgcWlfZHFjaHVua2xlbjsJIC8qICMgQkJzIGluIGEgY2h1bmsgb2YgZHFzICovCiAJdWludAkJIHFpX2RxcGVyY2h1bms7CSAvKiAjIG9uZGlzayBkcXMgaW4gYWJvdmUgY2h1bmsgKi8KIAl4ZnNfcWNudF90CSBxaV9iaGFyZGxpbWl0OwkgLyogZGVmYXVsdCBkYXRhIGJsayBoYXJkIGxpbWl0ICovCkBAIC0xNTgsMTEgKzE1OCw2IEBACiAjZGVmaW5lIFhGU19RTV9JV0FSTkxJTUlUCTUKICNkZWZpbmUgWEZTX1FNX1JUQldBUk5MSU1JVAk1CiAKLSNkZWZpbmUgWEZTX1FNX0xPQ0soeHFtKQkobXV0ZXhfbG9jaygmeHFtIyNfbG9jaykpCi0jZGVmaW5lIFhGU19RTV9VTkxPQ0soeHFtKQkobXV0ZXhfdW5sb2NrKCZ4cW0jI19sb2NrKSkKLSNkZWZpbmUgWEZTX1FNX0hPTEQoeHFtKQkoKHhxbSktPnFtX25yZWZzKyspCi0jZGVmaW5lIFhGU19RTV9SRUxFKHhxbSkJKCh4cW0pLT5xbV9ucmVmcy0tKQotCiBleHRlcm4gdm9pZAkJeGZzX3FtX2Rlc3Ryb3lfcXVvdGFpbmZvKHhmc19tb3VudF90ICopOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9tb3VudF9xdW90YXMoeGZzX21vdW50X3QgKik7CiBleHRlcm4gaW50CQl4ZnNfcW1fcXVvdGFjaGVjayh4ZnNfbW91bnRfdCAqKTsKQEAgLTE3OCw2ICsxNzMsMTYgQEAKIGV4dGVybiBpbnQJCXhmc19xbV9kcXB1cmdlX2FsbCh4ZnNfbW91bnRfdCAqLCB1aW50KTsKIGV4dGVybiB2b2lkCQl4ZnNfcW1fZHFyZWxlX2FsbF9pbm9kZXMoeGZzX21vdW50X3QgKiwgdWludCk7CiAKKy8qIHF1b3RhIG9wcyAqLworZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyh4ZnNfbW91bnRfdCAqLCB1aW50KTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9nZXRxdW90YSh4ZnNfbW91bnRfdCAqLCB4ZnNfZHFpZF90LCB1aW50LAorCQkJCQlmc19kaXNrX3F1b3RhX3QgKik7CitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfc2V0cWxpbSh4ZnNfbW91bnRfdCAqLCB4ZnNfZHFpZF90LCB1aW50LAorCQkJCQlmc19kaXNrX3F1b3RhX3QgKik7CitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXN0YXQoeGZzX21vdW50X3QgKiwgZnNfcXVvdGFfc3RhdF90ICopOworZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX3F1b3Rhb24oeGZzX21vdW50X3QgKiwgdWludCk7CitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfcXVvdGFvZmYoeGZzX21vdW50X3QgKiwgdWludCk7CisKIC8qIHZvcCBzdHVmZiAqLwogZXh0ZXJuIGludAkJeGZzX3FtX3ZvcF9kcWFsbG9jKHhmc19tb3VudF90ICosIHhmc19pbm9kZV90ICosCiAJCQkJCXVpZF90LCBnaWRfdCwgcHJpZF90LCB1aW50LApAQCAtMTk0LDExICsxOTksNiBAQAogLyogbGlzdCBzdHVmZiAqLwogZXh0ZXJuIHZvaWQJCXhmc19xbV9mcmVlbGlzdF9hcHBlbmQoeGZzX2ZybGlzdF90ICosIHhmc19kcXVvdF90ICopOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9mcmVlbGlzdF91bmxpbmsoeGZzX2RxdW90X3QgKik7Ci1leHRlcm4gaW50CQl4ZnNfcW1fZnJlZWxpc3RfbG9ja19ub3dhaXQoeGZzX3FtX3QgKik7Ci0KLS8qIHN5c3RlbSBjYWxsIGludGVyZmFjZSAqLwotZXh0ZXJuIGludAkJeGZzX3FtX3F1b3RhY3RsKHN0cnVjdCB4ZnNfbW91bnQgKiwgaW50LCBpbnQsCi0JCQkJeGZzX2NhZGRyX3QpOwogCiAjaWZkZWYgREVCVUcKIGV4dGVybiBpbnQJCXhmc19xbV9pbnRlcm5hbHFjaGVjayh4ZnNfbW91bnRfdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCmluZGV4IGJjNmM1Y2MuLjYzMDM3YzYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwpAQCAtMjM1LDcgKzIzNSw2IEBACiAJLnhmc19kcXZvcGNob3ducmVzdgk9IHhmc19xbV92b3BfY2hvd25fcmVzZXJ2ZSwKIAkueGZzX2Rxc3RhdHZmcwkJPSB4ZnNfcW1fc3RhdHZmcywKIAkueGZzX2Rxc3luYwkJPSB4ZnNfcW1fc3luYywKLQkueGZzX3F1b3RhY3RsCQk9IHhmc19xbV9xdW90YWN0bCwKIAkueGZzX2RxdHJ4b3BzCQk9ICZ4ZnNfdHJhbnNfZHF1b3Rfb3BzLAogfTsKIEVYUE9SVF9TWU1CT0woeGZzX3FtY29yZV94ZnMpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCmluZGV4IDY4MTM5YjMuLmM3YjY2ZjYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTU3LDEzNSArNTcsMTYgQEAKICMgZGVmaW5lIHFkcHJpbnRrKHMsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi1TVEFUSUMgaW50CXhmc19xbV9zY2FsbF90cnVuY19xZmlsZXMoeGZzX21vdW50X3QgKiwgdWludCk7Ci1TVEFUSUMgaW50CXhmc19xbV9zY2FsbF9nZXRxdW90YSh4ZnNfbW91bnRfdCAqLCB4ZnNfZHFpZF90LCB1aW50LAotCQkJCQlmc19kaXNrX3F1b3RhX3QgKik7Ci1TVEFUSUMgaW50CXhmc19xbV9zY2FsbF9nZXRxc3RhdCh4ZnNfbW91bnRfdCAqLCBmc19xdW90YV9zdGF0X3QgKik7Ci1TVEFUSUMgaW50CXhmc19xbV9zY2FsbF9zZXRxbGltKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCi0JCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3F1b3Rhb24oeGZzX21vdW50X3QgKiwgdWludCk7Ci1TVEFUSUMgaW50CXhmc19xbV9zY2FsbF9xdW90YW9mZih4ZnNfbW91bnRfdCAqLCB1aW50LCBib29sZWFuX3QpOwogU1RBVElDIGludAl4ZnNfcW1fbG9nX3F1b3Rhb2ZmKHhmc19tb3VudF90ICosIHhmc19xb2ZmX2xvZ2l0ZW1fdCAqKiwgdWludCk7CiBTVEFUSUMgaW50CXhmc19xbV9sb2dfcXVvdGFvZmZfZW5kKHhmc19tb3VudF90ICosIHhmc19xb2ZmX2xvZ2l0ZW1fdCAqLAogCQkJCQl1aW50KTsKLVNUQVRJQyB1aW50CXhmc19xbV9pbXBvcnRfZmxhZ3ModWludCk7CiBTVEFUSUMgdWludAl4ZnNfcW1fZXhwb3J0X2ZsYWdzKHVpbnQpOwotU1RBVElDIHVpbnQJeGZzX3FtX2ltcG9ydF9xdHlwZV9mbGFncyh1aW50KTsKIFNUQVRJQyB1aW50CXhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3ModWludCk7CiBTVEFUSUMgdm9pZAl4ZnNfcW1fZXhwb3J0X2RxdW90KHhmc19tb3VudF90ICosIHhmc19kaXNrX2RxdW90X3QgKiwKIAkJCQkJZnNfZGlza19xdW90YV90ICopOwogCiAKIC8qCi0gKiBUaGUgbWFpbiBkaXN0cmlidXRpb24gc3dpdGNoIG9mIGFsbCBYRlMgcXVvdGFjdGwgc3lzdGVtIGNhbGxzLgotICovCi1pbnQKLXhmc19xbV9xdW90YWN0bCgKLQl4ZnNfbW91bnRfdAkqbXAsCi0JaW50CQljbWQsCi0JaW50CQlpZCwKLQl4ZnNfY2FkZHJfdAlhZGRyKQotewotCWludAkJZXJyb3I7Ci0KLQlBU1NFUlQoYWRkciAhPSBOVUxMIHx8IGNtZCA9PSBRX1hRVU9UQVNZTkMpOwotCi0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSB2YWxpZCBldmVuIHdoZW4gcXVvdGFvZmYuCi0JICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFFfWFFVT1RBUk06Ci0JCS8qCi0JCSAqIFRydW5jYXRlIHF1b3RhIGZpbGVzLiBxdW90YSBtdXN0IGJlIG9mZi4KLQkJICovCi0JCWlmIChYRlNfSVNfUVVPVEFfT04obXApKQotCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCXJldHVybiAoeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyhtcCwKLQkJCSAgICAgICB4ZnNfcW1faW1wb3J0X3F0eXBlX2ZsYWdzKCoodWludCAqKWFkZHIpKSk7Ci0KLQljYXNlIFFfWEdFVFFTVEFUOgotCQkvKgotCQkgKiBHZXQgcXVvdGEgc3RhdHVzIGluZm9ybWF0aW9uLgotCQkgKi8KLQkJcmV0dXJuICh4ZnNfcW1fc2NhbGxfZ2V0cXN0YXQobXAsIChmc19xdW90YV9zdGF0X3QgKilhZGRyKSk7Ci0KLQljYXNlIFFfWFFVT1RBT046Ci0JCS8qCi0JCSAqIFFVT1RBT04gLSBlbmFibGluZyBxdW90YSBlbmZvcmNlbWVudC4KLQkJICogUXVvdGEgYWNjb3VudGluZyBtdXN0IGJlIHR1cm5lZCBvbiBhdCBtb3VudCB0aW1lLgotCQkgKi8KLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQlyZXR1cm4gKHhmc19xbV9zY2FsbF9xdW90YW9uKG1wLAotCQkJCQkgIHhmc19xbV9pbXBvcnRfZmxhZ3MoKih1aW50ICopYWRkcikpKTsKLQotCWNhc2UgUV9YUVVPVEFPRkY6Ci0JCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFFfWFFVT1RBU1lOQzoKLQkJcmV0dXJuIHhmc19zeW5jX2lub2RlcyhtcCwgU1lOQ19ERUxXUkkpOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKCEgWEZTX0lTX1FVT1RBX09OKG1wKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFU1JDSCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUV9YUVVPVEFPRkY6Ci0JCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfcXVvdGFvZmYobXAsCi0JCQkJCSAgICB4ZnNfcW1faW1wb3J0X2ZsYWdzKCoodWludCAqKWFkZHIpLAotCQkJCQkgICAgQl9GQUxTRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBRX1hHRVRRVU9UQToKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfVVNFUiwKLQkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWEdFVEdRVU9UQToKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfR1JPVVAsCi0JCQkJCShmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBRX1hHRVRQUVVPVEE6Ci0JCWVycm9yID0geGZzX3FtX3NjYWxsX2dldHF1b3RhKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1BST0osCi0JCQkJCShmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFFfWFNFVFFMSU06Ci0JCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfc2V0cWxpbShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9VU0VSLAotCQkJCQkgICAgIChmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBRX1hTRVRHUUxJTToKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX0dST1VQLAotCQkJCQkgICAgIChmc19kaXNrX3F1b3RhX3QgKilhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBRX1hTRVRQUUxJTToKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1BST0osCi0JCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAoZXJyb3IpOwotfQotCi0vKgogICogVHVybiBvZmYgcXVvdGEgYWNjb3VudGluZyBhbmQvb3IgZW5mb3JjZW1lbnQgZm9yIGFsbCB1ZHF1b3RzIGFuZC9vcgogICogZ2RxdW90cy4gQ2FsbGVkIG9ubHkgYXQgdW5tb3VudCB0aW1lLgogICoKQEAgLTE5MywxMSArNzQsMTAgQEAKICAqIGluY29yZSwgYW5kIG1vZGlmaWVzIHRoZSBvbmRpc2sgZHF1b3QgZGlyZWN0bHkuIFRoZXJlZm9yZSwgZm9yIGV4YW1wbGUsCiAgKiBpdCBpcyBhbiBlcnJvciB0byBjYWxsIHRoaXMgdHdpY2UsIHdpdGhvdXQgcHVyZ2luZyB0aGUgY2FjaGUuCiAgKi8KLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX3F1b3Rhb2ZmKAogCXhmc19tb3VudF90CQkqbXAsCi0JdWludAkJCWZsYWdzLAotCWJvb2xlYW5fdAkJZm9yY2UpCisJdWludAkJCWZsYWdzKQogewogCXVpbnQJCQlkcXR5cGU7CiAJaW50CQkJZXJyb3I7CkBAIC0yMDUsOCArODUsNiBAQAogCXhmc19xb2ZmX2xvZ2l0ZW1fdAkqcW9mZnN0YXJ0OwogCWludAkJCW5jdWxwcml0czsKIAotCWlmICghZm9yY2UgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiBYRlNfRVJST1IoRVBFUk0pOwogCS8qCiAJICogTm8gZmlsZSBzeXN0ZW0gY2FuIGhhdmUgcXVvdGFzIGVuYWJsZWQgb24gZGlzayBidXQgbm90IGluIGNvcmUuCiAJICogTm90ZSB0aGF0IHF1b3RhIHV0aWxpdGllcyAobGlrZSBxdW90YW9mZikgX2V4cGVjdF8KQEAgLTM3NSw3ICsyNTMsNyBAQAogCXJldHVybiAoZXJyb3IpOwogfQogCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF90cnVuY19xZmlsZXMoCiAJeGZzX21vdW50X3QJKm1wLAogCXVpbnQJCWZsYWdzKQpAQCAtMzgzLDggKzI2MSw2IEBACiAJaW50CQllcnJvciA9IDAsIGVycm9yMiA9IDA7CiAJeGZzX2lub2RlX3QJKnFpcDsKIAotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFUEVSTSk7CiAJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpIHx8IGZsYWdzID09IDApIHsKIAkJcWRwcmludGsoInF0cnVuYyBmbGFncz0leCBtX3FmbGFncz0leFxuIiwgZmxhZ3MsIG1wLT5tX3FmbGFncyk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKQEAgLTQxNiw3ICsyOTIsNyBAQAogICogZWZmZWN0IGltbWVkaWF0ZWx5LgogICogKFN3aXRjaGluZyBvbiBxdW90YSBhY2NvdW50aW5nIG11c3QgYmUgZG9uZSBhdCBtb3VudCB0aW1lLikKICAqLwotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfcXVvdGFvbigKIAl4ZnNfbW91bnRfdAkqbXAsCiAJdWludAkJZmxhZ3MpCkBAIC00MjYsOSArMzAyLDYgQEAKIAl1aW50CQlhY2NmbGFnczsKIAlfX2ludDY0X3QJc2JmbGFnczsKIAotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFUEVSTSk7Ci0KIAlmbGFncyAmPSAoWEZTX0FMTF9RVU9UQV9BQ0NUIHwgWEZTX0FMTF9RVU9UQV9FTkZEKTsKIAkvKgogCSAqIFN3aXRjaGluZyBvbiBxdW90YSBhY2NvdW50aW5nIG11c3QgYmUgZG9uZSBhdCBtb3VudCB0aW1lLgpAQCAtNTE3LDcgKzM5MCw3IEBACiAvKgogICogUmV0dXJuIHF1b3RhIHN0YXR1cyBpbmZvcm1hdGlvbiwgc3VjaCBhcyB1cXVvdGEtb2ZmLCBlbmZvcmNlbWVudHMsIGV0Yy4KICAqLwotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfZ2V0cXN0YXQoCiAJeGZzX21vdW50X3QJKm1wLAogCWZzX3F1b3RhX3N0YXRfdCAqb3V0KQpAQCAtNTgyLDcgKzQ1NSw3IEBACiAvKgogICogQWRqdXN0IHF1b3RhIGxpbWl0cywgYW5kIHN0YXJ0L3N0b3AgdGltZXJzIGFjY29yZGluZ2x5LgogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF9zZXRxbGltKAogCXhmc19tb3VudF90CQkqbXAsCiAJeGZzX2RxaWRfdAkJaWQsCkBAIC01OTUsOSArNDY4LDYgQEAKIAlpbnQJCQllcnJvcjsKIAl4ZnNfcWNudF90CQloYXJkLCBzb2Z0OwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKLQogCWlmICgobmV3bGltLT5kX2ZpZWxkbWFzayAmCiAJICAgIChGU19EUV9MSU1JVF9NQVNLfEZTX0RRX1RJTUVSX01BU0t8RlNfRFFfV0FSTlNfTUFTSykpID09IDApCiAJCXJldHVybiAoMCk7CkBAIC03NDIsNyArNjEyLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX2dldHF1b3RhKAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfZHFpZF90CWlkLApAQCAtOTM1LDMwICs4MDUsNiBAQAogfQogCiBTVEFUSUMgdWludAoteGZzX3FtX2ltcG9ydF9xdHlwZV9mbGFncygKLQl1aW50CQl1ZmxhZ3MpCi17Ci0JdWludAkJb2ZsYWdzID0gMDsKLQotCS8qCi0JICogQ2FuJ3QgYmUgbW9yZSB0aGFuIG9uZSwgb3Igbm9uZS4KLQkgKi8KLQlpZiAoKCh1ZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKSA9PQotCQkJKFhGU19HUk9VUF9RVU9UQSB8IFhGU19VU0VSX1FVT1RBKSkgfHwKLQkgICAgKCh1ZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1BST0pfUVVPVEEpKSA9PQotCQkJKFhGU19HUk9VUF9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgfHwKLQkgICAgKCh1ZmxhZ3MgJiAoWEZTX1VTRVJfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpID09Ci0JCQkoWEZTX1VTRVJfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpIHx8Ci0JICAgICgodWZsYWdzICYgKFhGU19HUk9VUF9RVU9UQXxYRlNfVVNFUl9RVU9UQXxYRlNfUFJPSl9RVU9UQSkpID09IDApKQotCQlyZXR1cm4gKDApOwotCi0Jb2ZsYWdzIHw9ICh1ZmxhZ3MgJiBYRlNfVVNFUl9RVU9UQSkgPyBYRlNfRFFfVVNFUiA6IDA7Ci0Jb2ZsYWdzIHw9ICh1ZmxhZ3MgJiBYRlNfUFJPSl9RVU9UQSkgPyBYRlNfRFFfUFJPSiA6IDA7Ci0Jb2ZsYWdzIHw9ICh1ZmxhZ3MgJiBYRlNfR1JPVVBfUVVPVEEpID8gWEZTX0RRX0dST1VQOiAwOwotCXJldHVybiBvZmxhZ3M7Ci19Ci0KLVNUQVRJQyB1aW50CiB4ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKAogCXVpbnQgZmxhZ3MpCiB7CkBAIC05NzksMjYgKzgyNSw2IEBACiB9CiAKIFNUQVRJQyB1aW50Ci14ZnNfcW1faW1wb3J0X2ZsYWdzKAotCXVpbnQgdWZsYWdzKQotewotCXVpbnQgZmxhZ3MgPSAwOwotCi0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfQUNDVCkKLQkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9BQ0NUOwotCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfUERRX0FDQ1QpCi0JCWZsYWdzIHw9IFhGU19QUVVPVEFfQUNDVDsKLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX0dEUV9BQ0NUKQotCQlmbGFncyB8PSBYRlNfR1FVT1RBX0FDQ1Q7Ci0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfRU5GRCkKLQkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9FTkZEOwotCWlmICh1ZmxhZ3MgJiAoWEZTX1FVT1RBX1BEUV9FTkZEfFhGU19RVU9UQV9HRFFfRU5GRCkpCi0JCWZsYWdzIHw9IFhGU19PUVVPVEFfRU5GRDsKLQlyZXR1cm4gKGZsYWdzKTsKLX0KLQotCi1TVEFUSUMgdWludAogeGZzX3FtX2V4cG9ydF9mbGFncygKIAl1aW50IGZsYWdzKQogewpAQCAtMTEzNCw3ICs5NjAsNyBAQAogeGZzX2RxaGFzaF90ICpxbXRlc3RfZ2RxdGFiOwogaW50CSAgICAgIHFtdGVzdF9oYXNobWFzazsKIGludAkgICAgICBxbXRlc3RfbmZhaWxzOwotbXV0ZXhfdAkgICAgICBxY2hlY2tfbG9jazsKK3N0cnVjdCBtdXRleCAgcWNoZWNrX2xvY2s7CiAKICNkZWZpbmUgRFFURVNUX0hBU0hWQUwobXAsIGlkKSAoKChfX3BzdW5zaWduZWRfdCkobXApICsgXAogCQkJCSAoX19wc3Vuc2lnbmVkX3QpKGlkKSkgJiBcCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3F1b3RhX3ByaXYuaCBiL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCmluZGV4IGM0ZmNlYTYuLjgyODZiMjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oCkBAIC00MiwzNCArNDIsMjQgQEAKICNkZWZpbmUgWEZTX1FJX1FPRkZMT0NLKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX3F1b3Rhb2ZmbG9jaykKIAogI2RlZmluZSBYRlNfUUlfTVBMX0xJU1QobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0KQotI2RlZmluZSBYRlNfUUlfTVBMTE9DSyhtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QucWhfbG9jaykKICNkZWZpbmUgWEZTX1FJX01QTE5FWFQobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0LnFoX25leHQpCiAjZGVmaW5lIFhGU19RSV9NUExORFFVT1RTKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2RxbGlzdC5xaF9uZWxlbXMpCiAKLSNkZWZpbmUgWFFNTENLKGgpCQkJKG11dGV4X2xvY2soJigoaCktPnFoX2xvY2spKSkKLSNkZWZpbmUgWFFNVU5MQ0soaCkJCQkobXV0ZXhfdW5sb2NrKCYoKGgpLT5xaF9sb2NrKSkpCi0jaWZkZWYgREVCVUcKLXN0cnVjdCB4ZnNfZHFoYXNoOwotc3RhdGljIGlubGluZSBpbnQgWFFNSVNMQ0tEKHN0cnVjdCB4ZnNfZHFoYXNoICpoKQotewotCWlmIChtdXRleF90cnlsb2NrKCZoLT5xaF9sb2NrKSkgewotCQltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgeGZzX3FtX21wbGlzdF9sb2NrKG1wKSBcCisJbXV0ZXhfbG9jaygmKFhGU19RSV9NUExfTElTVChtcCkucWhfbG9jaykpCisjZGVmaW5lIHhmc19xbV9tcGxpc3Rfbm93YWl0KG1wKSBcCisJbXV0ZXhfdHJ5bG9jaygmKFhGU19RSV9NUExfTElTVChtcCkucWhfbG9jaykpCisjZGVmaW5lIHhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKSBcCisJbXV0ZXhfdW5sb2NrKCYoWEZTX1FJX01QTF9MSVNUKG1wKS5xaF9sb2NrKSkKKyNkZWZpbmUgWEZTX1FNX0lTX01QTElTVF9MT0NLRUQobXApIFwKKwltdXRleF9pc19sb2NrZWQoJihYRlNfUUlfTVBMX0xJU1QobXApLnFoX2xvY2spKQogCi0jZGVmaW5lIFhGU19EUV9IQVNIX0xPQ0soaCkJCVhRTUxDSyhoKQotI2RlZmluZSBYRlNfRFFfSEFTSF9VTkxPQ0soaCkJCVhRTVVOTENLKGgpCi0jZGVmaW5lIFhGU19EUV9JU19IQVNIX0xPQ0tFRChoKQlYUU1JU0xDS0QoaCkKLQotI2RlZmluZSB4ZnNfcW1fbXBsaXN0X2xvY2sobXApCQlYUU1MQ0soJihYRlNfUUlfTVBMX0xJU1QobXApKSkKLSNkZWZpbmUgeGZzX3FtX21wbGlzdF91bmxvY2sobXApCVhRTVVOTENLKCYoWEZTX1FJX01QTF9MSVNUKG1wKSkpCi0jZGVmaW5lIFhGU19RTV9JU19NUExJU1RfTE9DS0VEKG1wKQlYUU1JU0xDS0QoJihYRlNfUUlfTVBMX0xJU1QobXApKSkKLQotI2RlZmluZSB4ZnNfcW1fZnJlZWxpc3RfbG9jayhxbSkJWFFNTENLKCYoKHFtKS0+cW1fZHFmcmVlbGlzdCkpCi0jZGVmaW5lIHhmc19xbV9mcmVlbGlzdF91bmxvY2socW0pCVhRTVVOTENLKCYoKHFtKS0+cW1fZHFmcmVlbGlzdCkpCisjZGVmaW5lIHhmc19xbV9mcmVlbGlzdF9sb2NrKHFtKSBcCisJbXV0ZXhfbG9jaygmKChxbSktPnFtX2RxZnJlZWxpc3QucWhfbG9jaykpCisjZGVmaW5lIHhmc19xbV9mcmVlbGlzdF9sb2NrX25vd2FpdChxbSkgXAorCW11dGV4X3RyeWxvY2soJigocW0pLT5xbV9kcWZyZWVsaXN0LnFoX2xvY2spKQorI2RlZmluZSB4ZnNfcW1fZnJlZWxpc3RfdW5sb2NrKHFtKSBcCisJbXV0ZXhfdW5sb2NrKCYoKHFtKS0+cW1fZHFmcmVlbGlzdC5xaF9sb2NrKSkKIAogLyoKICAqIEhhc2ggaW50byBhIGJ1Y2tldCBpbiB0aGUgZHF1b3QgaGFzaCB0YWJsZSwgYmFzZWQgb24gPG1wLCBpZD4uCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMgYi9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKaW5kZXggOTk2MTEzOC4uNDQ3MTczYiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwpAQCAtNjI0LDEwICs2MjQsOSBAQAogCXhmc19xY250X3QJKnJlc2Jjb3VudHA7CiAJeGZzX3F1b3RhaW5mb190CSpxID0gbXAtPm1fcXVvdGFpbmZvOwogCi0JaWYgKCEgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykpIHsKLQkJeGZzX2RxbG9jayhkcXApOwotCX0KLQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChkcXApKTsKKworCXhmc19kcWxvY2soZHFwKTsKKwogCWlmIChmbGFncyAmIFhGU19UUkFOU19EUV9SRVNfQkxLUykgewogCQloYXJkbGltaXQgPSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19oYXJkbGltaXQpOwogCQlpZiAoIWhhcmRsaW1pdCkKQEAgLTc0MCwxMCArNzM5LDggQEAKIAlBU1NFUlQoZHFwLT5xX3Jlc19pY291bnQgPj0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pY291bnQpKTsKIAogZXJyb3JfcmV0dXJuOgotCWlmICghIChmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0spKSB7Ci0JCXhmc19kcXVubG9jayhkcXApOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKKwl4ZnNfZHF1bmxvY2soZHFwKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIApAQCAtNzUzLDggKzc1MCw3IEBACiAgKiBncnAvcHJqIHF1b3RhcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhpcyBmb2xsb3dzIGEgYm90aC1vci1ub3RoaW5nCiAgKiBhcHByb2FjaC4KICAqCi0gKiBmbGFncyA9IFhGU19RTU9QVF9EUUxPQ0sgaW5kaWNhdGUgaWYgZHF1b3QocykgbmVlZCB0byBiZSBsb2NrZWQuCi0gKgkgICBYRlNfUU1PUFRfRk9SQ0VfUkVTIGV2YWRlcyBsaW1pdCBlbmZvcmNlbWVudC4gVXNlZCBieSBjaG93bi4KKyAqIGZsYWdzID0gWEZTX1FNT1BUX0ZPUkNFX1JFUyBldmFkZXMgbGltaXQgZW5mb3JjZW1lbnQuIFVzZWQgYnkgY2hvd24uCiAgKgkgICBYRlNfUU1PUFRfRU5PU1BDIHJldHVybnMgRU5PU1BDIG5vdCBFRFFVT1QuICBVc2VkIGJ5IHBxdW90YS4KICAqCSAgIFhGU19UUkFOU19EUV9SRVNfQkxLUyByZXNlcnZlcyByZWd1bGFyIGRpc2sgYmxvY2tzCiAgKgkgICBYRlNfVFJBTlNfRFFfUkVTX1JUQkxLUyByZXNlcnZlcyByZWFsdGltZSBkaXNrIGJsb2NrcwpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKaW5kZXggYWU1NDgyOS4uM2YzNjEwYSAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvZGVidWcuYworKysgYi9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAieGZzX2FnLmgiCiAjaW5jbHVkZSAieGZzX2RtYXBpLmgiCiAjaW5jbHVkZSAieGZzX21vdW50LmgiCisjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAKIHN0YXRpYyBjaGFyCQltZXNzYWdlWzEwMjRdOwkvKiBrZWVwIGl0IG9mZiB0aGUgc3RhY2sgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZzX2Vycl9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYyBiL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYwppbmRleCA1ODMwYzA0Li5iODNmNzZiIDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC91dWlkLmMKKysrIGIvZnMveGZzL3N1cHBvcnQvdXVpZC5jCkBAIC0xNywxMCArMTcsNiBAQAogICovCiAjaW5jbHVkZSA8eGZzLmg+CiAKLXN0YXRpYyBERUZJTkVfTVVURVgodXVpZF9tb25pdG9yKTsKLXN0YXRpYyBpbnQJdXVpZF90YWJsZV9zaXplOwotc3RhdGljIHV1aWRfdAkqdXVpZF90YWJsZTsKLQogLyogSVJJWCBpbnRlcnByZXRhdGlvbiBvZiBhbiB1dWlkX3QgKi8KIHR5cGVkZWYgc3RydWN0IHsKIAlfX2JlMzIJdXVfdGltZWxvdzsKQEAgLTQ2LDEyICs0Miw2IEBACiAJZnNpZFsxXSA9IGJlMzJfdG9fY3B1KHV1cC0+dXVfdGltZWxvdyk7CiB9CiAKLXZvaWQKLXV1aWRfY3JlYXRlX25pbCh1dWlkX3QgKnV1aWQpCi17Ci0JbWVtc2V0KHV1aWQsIDAsIHNpemVvZigqdXVpZCkpOwotfQotCiBpbnQKIHV1aWRfaXNfbmlsKHV1aWRfdCAqdXVpZCkKIHsKQEAgLTcxLDY0ICs2MSwzIEBACiB7CiAJcmV0dXJuIG1lbWNtcCh1dWlkMSwgdXVpZDIsIHNpemVvZih1dWlkX3QpKSA/IDAgOiAxOwogfQotCi0vKgotICogR2l2ZW4gYSAxMjgtYml0IHV1aWQsIHJldHVybiBhIDY0LWJpdCB2YWx1ZSBieSBhZGRpbmcgdGhlIHRvcCBhbmQgYm90dG9tCi0gKiA2NC1iaXQgd29yZHMuICBOT1RFOiBUaGlzIGZ1bmN0aW9uIGNhbiBub3QgYmUgY2hhbmdlZCBFVkVSLiAgQWx0aG91Z2gKLSAqIGJyYWluLWRlYWQsIHNvbWUgYXBwbGljYXRpb25zIGRlcGVuZCBvbiB0aGlzIDY0LWJpdCB2YWx1ZSByZW1haW5pbmcKLSAqIHBlcnNpc3RlbnQuICBTcGVjaWZpY2FsbHksIERNSSB2ZW5kb3JzIHN0b3JlIHRoZSB2YWx1ZSBhcyBhIHBlcnNpc3RlbnQKLSAqIGZpbGVoYW5kbGUuCi0gKi8KLV9fdWludDY0X3QKLXV1aWRfaGFzaDY0KHV1aWRfdCAqdXVpZCkKLXsKLQlfX3VpbnQ2NF90CSpzcCA9IChfX3VpbnQ2NF90ICopdXVpZDsKLQotCXJldHVybiBzcFswXSArIHNwWzFdOwotfQotCi1pbnQKLXV1aWRfdGFibGVfaW5zZXJ0KHV1aWRfdCAqdXVpZCkKLXsKLQlpbnQJaSwgaG9sZTsKLQotCW11dGV4X2xvY2soJnV1aWRfbW9uaXRvcik7Ci0JZm9yIChpID0gMCwgaG9sZSA9IC0xOyBpIDwgdXVpZF90YWJsZV9zaXplOyBpKyspIHsKLQkJaWYgKHV1aWRfaXNfbmlsKCZ1dWlkX3RhYmxlW2ldKSkgewotCQkJaG9sZSA9IGk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAodXVpZF9lcXVhbCh1dWlkLCAmdXVpZF90YWJsZVtpXSkpIHsKLQkJCW11dGV4X3VubG9jaygmdXVpZF9tb25pdG9yKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCWlmIChob2xlIDwgMCkgewotCQl1dWlkX3RhYmxlID0ga21lbV9yZWFsbG9jKHV1aWRfdGFibGUsCi0JCQkodXVpZF90YWJsZV9zaXplICsgMSkgKiBzaXplb2YoKnV1aWRfdGFibGUpLAotCQkJdXVpZF90YWJsZV9zaXplICAqIHNpemVvZigqdXVpZF90YWJsZSksCi0JCQlLTV9TTEVFUCk7Ci0JCWhvbGUgPSB1dWlkX3RhYmxlX3NpemUrKzsKLQl9Ci0JdXVpZF90YWJsZVtob2xlXSA9ICp1dWlkOwotCW11dGV4X3VubG9jaygmdXVpZF9tb25pdG9yKTsKLQlyZXR1cm4gMTsKLX0KLQotdm9pZAotdXVpZF90YWJsZV9yZW1vdmUodXVpZF90ICp1dWlkKQotewotCWludAlpOwotCi0JbXV0ZXhfbG9jaygmdXVpZF9tb25pdG9yKTsKLQlmb3IgKGkgPSAwOyBpIDwgdXVpZF90YWJsZV9zaXplOyBpKyspIHsKLQkJaWYgKHV1aWRfaXNfbmlsKCZ1dWlkX3RhYmxlW2ldKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXV1aWRfZXF1YWwodXVpZCwgJnV1aWRfdGFibGVbaV0pKQotCQkJY29udGludWU7Ci0JCXV1aWRfY3JlYXRlX25pbCgmdXVpZF90YWJsZVtpXSk7Ci0JCWJyZWFrOwotCX0KLQlBU1NFUlQoaSA8IHV1aWRfdGFibGVfc2l6ZSk7Ci0JbXV0ZXhfdW5sb2NrKCZ1dWlkX21vbml0b3IpOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvdXVpZC5oIGIvZnMveGZzL3N1cHBvcnQvdXVpZC5oCmluZGV4IGNmZjViNjAuLjQ3MzJkNzEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuaAorKysgYi9mcy94ZnMvc3VwcG9ydC91dWlkLmgKQEAgLTIyLDEyICsyMiw4IEBACiAJdW5zaWduZWQgY2hhcglfX3VfYml0c1sxNl07CiB9IHV1aWRfdDsKIAotZXh0ZXJuIHZvaWQgdXVpZF9jcmVhdGVfbmlsKHV1aWRfdCAqdXVpZCk7CiBleHRlcm4gaW50IHV1aWRfaXNfbmlsKHV1aWRfdCAqdXVpZCk7CiBleHRlcm4gaW50IHV1aWRfZXF1YWwodXVpZF90ICp1dWlkMSwgdXVpZF90ICp1dWlkMik7CiBleHRlcm4gdm9pZCB1dWlkX2dldG5vZGV1bmlxKHV1aWRfdCAqdXVpZCwgaW50IGZzaWQgWzJdKTsKLWV4dGVybiBfX3VpbnQ2NF90IHV1aWRfaGFzaDY0KHV1aWRfdCAqdXVpZCk7Ci1leHRlcm4gaW50IHV1aWRfdGFibGVfaW5zZXJ0KHV1aWRfdCAqdXVpZCk7Ci1leHRlcm4gdm9pZCB1dWlkX3RhYmxlX3JlbW92ZSh1dWlkX3QgKnV1aWQpOwogCiAjZW5kaWYJLyogX19YRlNfU1VQUE9SVF9VVUlEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hZy5oIGIvZnMveGZzL3hmc19hZy5oCmluZGV4IDE0M2Q2M2UuLmM4NjQxZjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTIyMyw4ICsyMjMsOCBAQAogCQliZTMyX3RvX2NwdSgoYSktPmFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldKSwgbXApKQogI2RlZmluZQlYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsbXApCVwKIAkoWEZTX01JTl9GUkVFTElTVF9SQVcoCQlcCi0JCSh1aW50X3QpKHBhZyktPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9CTk9pXSwgXAotCQkodWludF90KShwYWcpLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0sIG1wKSkKKwkJKHVuc2lnbmVkIGludCkocGFnKS0+cGFnZl9sZXZlbHNbWEZTX0JUTlVNX0JOT2ldLCBcCisJCSh1bnNpZ25lZCBpbnQpKHBhZyktPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSwgbXApKQogCiAjZGVmaW5lIFhGU19BR0JfVE9fRlNCKG1wLGFnbm8sYWdibm8pCVwKIAkoKCh4ZnNfZnNibG9ja190KShhZ25vKSA8PCAobXApLT5tX3NiLnNiX2FnYmxrbG9nKSB8IChhZ2JubykpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmMgYi9mcy94ZnMveGZzX2FsbG9jLmMKaW5kZXggMDI4ZTQ0ZS4uMmNmOTQ0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwpAQCAtMTg3Miw2ICsxODcyLDI1IEBACiB9CiAKIC8qCisgKiBGaW5kIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgZXh0ZW50IGluIGFuIEFHLgorICovCit4ZnNfZXh0bGVuX3QKK3hmc19hbGxvY19sb25nZXN0X2ZyZWVfZXh0ZW50KAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZykKK3sKKwl4ZnNfZXh0bGVuX3QJCW5lZWQsIGRlbHRhID0gMDsKKworCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsIG1wKTsKKwlpZiAobmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50KQorCQlkZWx0YSA9IG5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudDsKKworCWlmIChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKQorCQlyZXR1cm4gcGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YTsKKwlyZXR1cm4gcGFnLT5wYWdmX2ZsY291bnQgPiAwIHx8IHBhZy0+cGFnZl9sb25nZXN0ID4gMDsKK30KKworLyoKICAqIERlY2lkZSB3aGV0aGVyIHRvIHVzZSB0aGlzIGFsbG9jYXRpb24gZ3JvdXAgZm9yIHRoaXMgYWxsb2NhdGlvbi4KICAqIElmIHNvLCBmaXggdXAgdGhlIGJ0cmVlIGZyZWVsaXN0J3Mgc2l6ZS4KICAqLwpAQCAtMTkyMywxNSArMTk0MiwxMiBAQAogCX0KIAogCWlmICghKGZsYWdzICYgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykpIHsKLQkJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOwotCQlkZWx0YSA9IG5lZWQgPiBwYWctPnBhZ2ZfZmxjb3VudCA/IG5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudCA6IDA7CiAJCS8qCiAJCSAqIElmIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXNuJ3QgYSBsb25nIGVub3VnaCBleHRlbnQsIG9yIGVub3VnaAogCQkgKiB0b3RhbCBibG9ja3MsIHJlamVjdCBpdC4KIAkJICovCi0JCWxvbmdlc3QgPSAocGFnLT5wYWdmX2xvbmdlc3QgPiBkZWx0YSkgPwotCQkJKHBhZy0+cGFnZl9sb25nZXN0IC0gZGVsdGEpIDoKLQkJCShwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwgcGFnLT5wYWdmX2xvbmdlc3QgPiAwKTsKKwkJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOworCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CiAJCWlmICgoYXJncy0+bWlubGVuICsgYXJncy0+YWxpZ25tZW50ICsgYXJncy0+bWluYWxpZ25zbG9wIC0gMSkgPgogCQkJCWxvbmdlc3QgfHwKIAkJICAgICgoaW50KShwYWctPnBhZ2ZfZnJlZWJsa3MgKyBwYWctPnBhZ2ZfZmxjb3VudCAtCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmggYi9mcy94ZnMveGZzX2FsbG9jLmgKaW5kZXggNTg4MTcyNy4uZTcwNGNhZWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuaAorKysgYi9mcy94ZnMveGZzX2FsbG9jLmgKQEAgLTEwMCw2ICsxMDAsMTIgQEAKICNkZWZpbmUgWEZTX0FMTE9DX1VTRVJEQVRBCQkxCS8qIGFsbG9jYXRpb24gaXMgZm9yIHVzZXIgZGF0YSovCiAjZGVmaW5lIFhGU19BTExPQ19JTklUSUFMX1VTRVJfREFUQQkyCS8qIHNwZWNpYWwgY2FzZSBzdGFydCBvZiBmaWxlICovCiAKKy8qCisgKiBGaW5kIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgZXh0ZW50IGluIGFuIEFHLgorICovCit4ZnNfZXh0bGVuX3QKK3hmc19hbGxvY19sb25nZXN0X2ZyZWVfZXh0ZW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wLAorCQlzdHJ1Y3QgeGZzX3BlcmFnICpwYWcpOwogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwppbmRleCA2YzMyM2Y4Li5hZmRjODkxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKQEAgLTE1NSw3ICsxNTUsOCBAQAogCQkgKiBtaW5pbXVtIG9mZnNldCBvbmx5IG5lZWRzIHRvIGJlIHRoZSBzcGFjZSByZXF1aXJlZCBmb3IgCiAJCSAqIHRoZSBidHJlZSByb290LgogCQkgKi8gCi0JCWlmICghZHAtPmlfZC5kaV9mb3Jrb2ZmICYmIGRwLT5pX2RmLmlmX2J5dGVzID4gbXAtPm1fYXR0cm9mZnNldCkKKwkJaWYgKCFkcC0+aV9kLmRpX2ZvcmtvZmYgJiYgZHAtPmlfZGYuaWZfYnl0ZXMgPgorCQkgICAgeGZzX2RlZmF1bHRfYXR0cm9mZnNldChkcCkpCiAJCQlkc2l6ZSA9IFhGU19CTURSX1NQQUNFX0NBTEMoTUlOREJUUFRSUyk7CiAJCWJyZWFrOwogCQkKQEAgLTI5OCw2ICsyOTksMjYgQEAKIH0KIAogLyoKKyAqIEFmdGVyIHRoZSBsYXN0IGF0dHJpYnV0ZSBpcyByZW1vdmVkIHJldmVydCB0byBvcmlnaW5hbCBpbm9kZSBmb3JtYXQsCisgKiBtYWtpbmcgYWxsIGxpdGVyYWwgYXJlYSBhdmFpbGFibGUgdG8gdGhlIGRhdGEgZm9yayBvbmNlIG1vcmUuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfYXR0cl9mb3JrX3Jlc2V0KAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAorCXN0cnVjdCB4ZnNfdHJhbnMJKnRwKQoreworCXhmc19pZGVzdHJveV9mb3JrKGlwLCBYRlNfQVRUUl9GT1JLKTsKKwlpcC0+aV9kLmRpX2ZvcmtvZmYgPSAwOworCWlwLT5pX2QuZGlfYWZvcm1hdCA9IFhGU19ESU5PREVfRk1UX0VYVEVOVFM7CisKKwlBU1NFUlQoaXAtPmlfZC5kaV9hbmV4dGVudHMgPT0gMCk7CisJQVNTRVJUKGlwLT5pX2FmcCA9PSBOVUxMKTsKKworCWlwLT5pX2RmLmlmX2V4dF9tYXggPSBYRlNfSUZPUktfRFNJWkUoaXApIC8gc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Cit9CisKKy8qCiAgKiBSZW1vdmUgYW4gYXR0cmlidXRlIGZyb20gdGhlIHNob3J0Zm9ybSBhdHRyaWJ1dGUgbGlzdCBzdHJ1Y3R1cmUuCiAgKi8KIGludApAQCAtMzQ0LDIyICszNjUsMTAgQEAKIAkgKi8KIAl0b3RzaXplIC09IHNpemU7CiAJaWYgKHRvdHNpemUgPT0gc2l6ZW9mKHhmc19hdHRyX3NmX2hkcl90KSAmJgotCQkJCSEoYXJncy0+b3BfZmxhZ3MgJiBYRlNfREFfT1BfQURETkFNRSkgJiYKLQkJCQkobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpICYmCi0JCQkJKGRwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSkgewotCQkvKgotCQkgKiBMYXN0IGF0dHJpYnV0ZSBub3cgcmVtb3ZlZCwgcmV2ZXJ0IHRvIG9yaWdpbmFsCi0JCSAqIGlub2RlIGZvcm1hdCBtYWtpbmcgYWxsIGxpdGVyYWwgYXJlYSBhdmFpbGFibGUKLQkJICogdG8gdGhlIGRhdGEgZm9yayBvbmNlIG1vcmUuCi0JCSAqLwotCQl4ZnNfaWRlc3Ryb3lfZm9yayhkcCwgWEZTX0FUVFJfRk9SSyk7Ci0JCWRwLT5pX2QuZGlfZm9ya29mZiA9IDA7Ci0JCWRwLT5pX2QuZGlfYWZvcm1hdCA9IFhGU19ESU5PREVfRk1UX0VYVEVOVFM7Ci0JCUFTU0VSVChkcC0+aV9kLmRpX2FuZXh0ZW50cyA9PSAwKTsKLQkJQVNTRVJUKGRwLT5pX2FmcCA9PSBOVUxMKTsKLQkJZHAtPmlfZGYuaWZfZXh0X21heCA9Ci0JCQlYRlNfSUZPUktfRFNJWkUoZHApIC8gKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKLQkJeGZzX3RyYW5zX2xvZ19pbm9kZShhcmdzLT50cmFucywgZHAsIFhGU19JTE9HX0NPUkUpOworCSAgICAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpICYmCisJICAgIChkcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkgJiYKKwkgICAgIShhcmdzLT5vcF9mbGFncyAmIFhGU19EQV9PUF9BREROQU1FKSkgeworCQl4ZnNfYXR0cl9mb3JrX3Jlc2V0KGRwLCBhcmdzLT50cmFucyk7CiAJfSBlbHNlIHsKIAkJeGZzX2lkYXRhX3JlYWxsb2MoZHAsIC1zaXplLCBYRlNfQVRUUl9GT1JLKTsKIAkJZHAtPmlfZC5kaV9mb3Jrb2ZmID0geGZzX2F0dHJfc2hvcnRmb3JtX2J5dGVzZml0KGRwLCB0b3RzaXplKTsKQEAgLTc4NiwyMCArNzk1LDcgQEAKIAlpZiAoZm9ya29mZiA9PSAtMSkgewogCQlBU1NFUlQoZHAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpOwogCQlBU1NFUlQoZHAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpOwotCi0JCS8qCi0JCSAqIExhc3QgYXR0cmlidXRlIHdhcyByZW1vdmVkLCByZXZlcnQgdG8gb3JpZ2luYWwKLQkJICogaW5vZGUgZm9ybWF0IG1ha2luZyBhbGwgbGl0ZXJhbCBhcmVhIGF2YWlsYWJsZQotCQkgKiB0byB0aGUgZGF0YSBmb3JrIG9uY2UgbW9yZS4KLQkJICovCi0JCXhmc19pZGVzdHJveV9mb3JrKGRwLCBYRlNfQVRUUl9GT1JLKTsKLQkJZHAtPmlfZC5kaV9mb3Jrb2ZmID0gMDsKLQkJZHAtPmlfZC5kaV9hZm9ybWF0ID0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUzsKLQkJQVNTRVJUKGRwLT5pX2QuZGlfYW5leHRlbnRzID09IDApOwotCQlBU1NFUlQoZHAtPmlfYWZwID09IE5VTEwpOwotCQlkcC0+aV9kZi5pZl9leHRfbWF4ID0KLQkJCVhGU19JRk9SS19EU0laRShkcCkgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCQl4ZnNfdHJhbnNfbG9nX2lub2RlKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0dfQ09SRSk7CisJCXhmc19hdHRyX2ZvcmtfcmVzZXQoZHAsIGFyZ3MtPnRyYW5zKTsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IGM4NTJjZDYuLjNhNmVkNDIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0yNDc5LDcgKzI0NzksNyBAQAogCWZiX2Fnbm8gPSBudWxsZmIgPyBOVUxMQUdOVU1CRVIgOiBYRlNfRlNCX1RPX0FHTk8obXAsIGFwLT5maXJzdGJsb2NrKTsKIAkvKgogCSAqIElmIGFsbG9jYXRpbmcgYXQgZW9mLCBhbmQgdGhlcmUncyBhIHByZXZpb3VzIHJlYWwgYmxvY2ssCi0JICogdHJ5IHRvIHVzZSBpdCdzIGxhc3QgYmxvY2sgYXMgb3VyIHN0YXJ0aW5nIHBvaW50LgorCSAqIHRyeSB0byB1c2UgaXRzIGxhc3QgYmxvY2sgYXMgb3VyIHN0YXJ0aW5nIHBvaW50LgogCSAqLwogCWlmIChhcC0+ZW9mICYmIGFwLT5wcmV2cC0+YnJfc3RhcnRvZmYgIT0gTlVMTEZJTEVPRkYgJiYKIAkgICAgIWlzbnVsbHN0YXJ0YmxvY2soYXAtPnByZXZwLT5icl9zdGFydGJsb2NrKSAmJgpAQCAtMjcxMiw5ICsyNzEyLDYgQEAKIAl4ZnNfYWdudW1iZXJfdAlzdGFydGFnOwogCXhmc19hbGxvY19hcmdfdAlhcmdzOwogCXhmc19leHRsZW5fdAlibGVuOwotCXhmc19leHRsZW5fdAlkZWx0YTsKLQl4ZnNfZXh0bGVuX3QJbG9uZ2VzdDsKLQl4ZnNfZXh0bGVuX3QJbmVlZDsKIAl4ZnNfZXh0bGVuX3QJbmV4dG1pbmxlbiA9IDA7CiAJeGZzX3BlcmFnX3QJKnBhZzsKIAlpbnQJCW51bGxmYjsJCS8qIHRydWUgaWYgYXAtPmZpcnN0YmxvY2sgaXNuJ3Qgc2V0ICovCkBAIC0yNzk2LDEzICsyNzkzLDggQEAKIAkJCSAqIFNlZSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0Li4uCiAJCQkgKi8KIAkJCWlmIChwYWctPnBhZ2ZfaW5pdCkgewotCQkJCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsIG1wKTsKLQkJCQlkZWx0YSA9IG5lZWQgPiBwYWctPnBhZ2ZfZmxjb3VudCA/Ci0JCQkJCW5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudCA6IDA7Ci0JCQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCQkJCShwYWctPnBhZ2ZfbG9uZ2VzdCAtIGRlbHRhKSA6Ci0JCQkJCShwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwKLQkJCQkJIHBhZy0+cGFnZl9sb25nZXN0ID4gMCk7CisJCQkJeGZzX2V4dGxlbl90CWxvbmdlc3Q7CisJCQkJbG9uZ2VzdCA9IHhmc19hbGxvY19sb25nZXN0X2ZyZWVfZXh0ZW50KG1wLCBwYWcpOwogCQkJCWlmIChibGVuIDwgbG9uZ2VzdCkKIAkJCQkJYmxlbiA9IGxvbmdlc3Q7CiAJCQl9IGVsc2UKQEAgLTM1NzcsNiArMzU2OSwyNyBAQAogfQogCiAvKgorICogQ2FsY3VsYXRlIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZSBmb3JrIG9mZnNldCBmb3IgbmV3bHkgY3JlYXRlZCBpbm9kZXMuCisgKi8KK3VpbnQKK3hmc19kZWZhdWx0X2F0dHJvZmZzZXQoCisJc3RydWN0IHhmc19pbm9kZQkqaXApCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwl1aW50CQkJb2Zmc2V0OworCisJaWYgKG1wLT5tX3NiLnNiX2lub2Rlc2l6ZSA9PSAyNTYpIHsKKwkJb2Zmc2V0ID0gWEZTX0xJVElOTyhtcCkgLQorCQkJCVhGU19CTURSX1NQQUNFX0NBTEMoTUlOQUJUUFRSUyk7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gWEZTX0JNRFJfU1BBQ0VfQ0FMQyg2ICogTUlOQUJUUFRSUyk7CisJfQorCisJQVNTRVJUKG9mZnNldCA8IFhGU19MSVRJTk8obXApKTsKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgogICogSGVscGVyIHJvdXRpbmUgdG8gcmVzZXQgaW5vZGUgZGlfZm9ya29mZiBmaWVsZCB3aGVuIHN3aXRjaGluZwogICogYXR0cmlidXRlIGZvcmsgZnJvbSBsb2NhbCB0byBleHRlbnQgZm9ybWF0IC0gd2UgcmVzZXQgaXQgd2hlcmUKICAqIHBvc3NpYmxlIHRvIG1ha2Ugc3BhY2UgYXZhaWxhYmxlIGZvciBpbmxpbmUgZGF0YSBmb3JrIGV4dGVudHMuCkBAIC0zNTg4LDE1ICszNjAxLDE4IEBACiAJaW50CQl3aGljaGZvcmspCiB7CiAJaWYgKHdoaWNoZm9yayA9PSBYRlNfQVRUUl9GT1JLICYmCi0JICAgIChpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9ERVYpICYmCi0JICAgIChpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9VVUlEKSAmJgotCSAgICAoaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpICYmCi0JICAgICgobXAtPm1fYXR0cm9mZnNldCA+PiAzKSA+IGlwLT5pX2QuZGlfZm9ya29mZikpIHsKLQkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0gbXAtPm1fYXR0cm9mZnNldCA+PiAzOwotCQlpcC0+aV9kZi5pZl9leHRfbWF4ID0gWEZTX0lGT1JLX0RTSVpFKGlwKSAvCi0JCQkJCSh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JCWlwLT5pX2FmcC0+aWZfZXh0X21heCA9IFhGU19JRk9SS19BU0laRShpcCkgLwotCQkJCQkodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCSAgICBpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9ERVYgJiYKKwkgICAgaXAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfVVVJRCAmJgorCSAgICBpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkgeworCQl1aW50CWRmbF9mb3Jrb2ZmID0geGZzX2RlZmF1bHRfYXR0cm9mZnNldChpcCkgPj4gMzsKKworCQlpZiAoZGZsX2ZvcmtvZmYgPiBpcC0+aV9kLmRpX2ZvcmtvZmYpIHsKKwkJCWlwLT5pX2QuZGlfZm9ya29mZiA9IGRmbF9mb3Jrb2ZmOworCQkJaXAtPmlfZGYuaWZfZXh0X21heCA9CisJCQkJWEZTX0lGT1JLX0RTSVpFKGlwKSAvIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJCQlpcC0+aV9hZnAtPmlmX2V4dF9tYXggPQorCQkJCVhGU19JRk9SS19BU0laRShpcCkgLyBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCQl9CiAJfQogfQogCkBAIC00MDY1LDcgKzQwODEsNyBAQAogCWNhc2UgWEZTX0RJTk9ERV9GTVRfQlRSRUU6CiAJCWlwLT5pX2QuZGlfZm9ya29mZiA9IHhmc19hdHRyX3Nob3J0Zm9ybV9ieXRlc2ZpdChpcCwgc2l6ZSk7CiAJCWlmICghaXAtPmlfZC5kaV9mb3Jrb2ZmKQotCQkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0gbXAtPm1fYXR0cm9mZnNldCA+PiAzOworCQkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0geGZzX2RlZmF1bHRfYXR0cm9mZnNldChpcCkgPj4gMzsKIAkJZWxzZSBpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQVRUUjIpCiAJCQl2ZXJzaW9uID0gMjsKIAkJYnJlYWs7CkBAIC00MjEyLDEyICs0MjI4LDEyIEBACiAJICogKGEgc2lnbmVkIDE2LWJpdCBudW1iZXIsIHhmc19hZXh0bnVtX3QpLgogCSAqCiAJICogTm90ZSB0aGF0IHdlIGNhbiBubyBsb25nZXIgYXNzdW1lIHRoYXQgaWYgd2UgYXJlIGluIEFUVFIxIHRoYXQKLQkgKiB0aGUgZm9yayBvZmZzZXQgb2YgYWxsIHRoZSBpbm9kZXMgd2lsbCBiZSAobV9hdHRyb2Zmc2V0ID4+IDMpCi0JICogYmVjYXVzZSB3ZSBjb3VsZCBoYXZlIG1vdW50ZWQgd2l0aCBBVFRSMiBhbmQgdGhlbiBtb3VudGVkIGJhY2sKLQkgKiB3aXRoIEFUVFIxLCBrZWVwaW5nIHRoZSBkaV9mb3Jrb2ZmJ3MgZml4ZWQgYnV0IHByb2JhYmx5IGF0Ci0JICogdmFyaW91cyBwb3NpdGlvbnMuIFRoZXJlZm9yZSwgZm9yIGJvdGggQVRUUjEgYW5kIEFUVFIyCi0JICogd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gb2YgYSBtaW5pbXVtIHNpemUKLQkgKiBhdmFpbGFibGUuCisJICogdGhlIGZvcmsgb2Zmc2V0IG9mIGFsbCB0aGUgaW5vZGVzIHdpbGwgYmUKKwkgKiAoeGZzX2RlZmF1bHRfYXR0cm9mZnNldChpcCkgPj4gMykgYmVjYXVzZSB3ZSBjb3VsZCBoYXZlIG1vdW50ZWQKKwkgKiB3aXRoIEFUVFIyIGFuZCB0aGVuIG1vdW50ZWQgYmFjayB3aXRoIEFUVFIxLCBrZWVwaW5nIHRoZQorCSAqIGRpX2ZvcmtvZmYncyBmaXhlZCBidXQgcHJvYmFibHkgYXQgdmFyaW91cyBwb3NpdGlvbnMuIFRoZXJlZm9yZSwKKwkgKiBmb3IgYm90aCBBVFRSMSBhbmQgQVRUUjIgd2UgaGF2ZSB0byBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8KKwkgKiBvZiBhIG1pbmltdW0gc2l6ZSBhdmFpbGFibGUuCiAJICovCiAJaWYgKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKSB7CiAJCW1heGxlYWZlbnRzID0gTUFYRVhUTlVNOwpAQCAtNDgwNCw3ICs0ODIwLDcgQEAKIAl4ZnNfZXh0bGVuX3QJbWlubGVuOwkJLyogbWluIGFsbG9jYXRpb24gc2l6ZSAqLwogCXhmc19tb3VudF90CSptcDsJCS8qIHhmcyBtb3VudCBzdHJ1Y3R1cmUgKi8KIAlpbnQJCW47CQkvKiBjdXJyZW50IGV4dGVudCBpbmRleCAqLwotCWludAkJbmFsbG9jczsJLyogbnVtYmVyIG9mIGV4dGVudHMgYWxsb2NcJ2QgKi8KKwlpbnQJCW5hbGxvY3M7CS8qIG51bWJlciBvZiBleHRlbnRzIGFsbG9jJ2QgKi8KIAl4ZnNfZXh0bnVtX3QJbmV4dGVudHM7CS8qIG51bWJlciBvZiBleHRlbnRzIGluIGZpbGUgKi8KIAl4ZnNfZmlsZW9mZl90CW9ibm87CQkvKiBvbGQgYmxvY2sgbnVtYmVyIChvZmZzZXQpICovCiAJeGZzX2JtYnRfaXJlY190CXByZXY7CQkvKiBwcmV2aW91cyBmaWxlIGV4dGVudCByZWNvcmQgKi8KQEAgLTYyMDQsNyArNjIyMCw3IEBACiAJcmV0dXJuKGJwKTsKIH0KIAotdm9pZAorU1RBVElDIHZvaWQKIHhmc19jaGVja19ibG9jaygKIAlzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrCSpibG9jaywKIAl4ZnNfbW91bnRfdAkJKm1wLApAQCAtNjQ5NCw3ICs2NTEwLDcgQEAKIAlibG9jayA9IFhGU19CVUZfVE9fQkxPQ0soYnApOwogCiAJaWYgKC0tbGV2ZWwpIHsKLQkJLyogTm90IGF0IG5vZGUgYWJvdmUgbGVhZnMsIGNvdW50IHRoaXMgbGV2ZWwgb2Ygbm9kZXMgKi8KKwkJLyogTm90IGF0IG5vZGUgYWJvdmUgbGVhdmVzLCBjb3VudCB0aGlzIGxldmVsIG9mIG5vZGVzICovCiAJCW5leHRibm8gPSBiZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX3JpZ2h0c2liKTsKIAkJd2hpbGUgKG5leHRibm8gIT0gTlVMTEZTQkxPQ0spIHsKIAkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfcmVhZF9idWZsKG1wLCB0cCwgbmV4dGJubywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5oIGIvZnMveGZzL3hmc19ibWFwLmgKaW5kZXggYmUyOTc5ZC4uMWI4ZmY5MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmgKKysrIGIvZnMveGZzL3hmc19ibWFwLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogCXN0cnVjdCB4ZnNfYm1idF9pcmVjCSpnb3RwOwkvKiBleHRlbnQgYWZ0ZXIsIG9yIGRlbGF5ZWQgKi8KIAl4ZnNfZXh0bGVuX3QJCWFsZW47CS8qIGkvbyBsZW5ndGggYXNrZWQvYWxsb2NhdGVkICovCiAJeGZzX2V4dGxlbl90CQl0b3RhbDsJLyogdG90YWwgYmxvY2tzIG5lZWRlZCBmb3IgeGFjdGlvbiAqLwotCXhmc19leHRsZW5fdAkJbWlubGVuOwkvKiBtaW5pbnVtIGFsbG9jYXRpb24gc2l6ZSAoYmxvY2tzKSAqLworCXhmc19leHRsZW5fdAkJbWlubGVuOwkvKiBtaW5pbXVtIGFsbG9jYXRpb24gc2l6ZSAoYmxvY2tzKSAqLwogCXhmc19leHRsZW5fdAkJbWlubGVmdDsgLyogYW1vdW50IG11c3QgYmUgbGVmdCBhZnRlciBhbGxvYyAqLwogCWNoYXIJCQllb2Y7CS8qIHNldCBpZiBhbGxvY2F0aW5nIHBhc3QgbGFzdCBleHRlbnQgKi8KIAljaGFyCQkJd2FzZGVsOwkvKiByZXBsYWNpbmcgYSBkZWxheWVkIGFsbG9jYXRpb24gKi8KQEAgLTMzOCw2ICszMzgsMTAgQEAKIAl4ZnNfZXh0bnVtX3QJCWlkeCwKIAl4ZnNfZXh0bnVtX3QJCW51bSk7CiAKK3VpbnQKK3hmc19kZWZhdWx0X2F0dHJvZmZzZXQoCisJc3RydWN0IHhmc19pbm9kZQkqaXApOworCiAjaWZkZWYgX19LRVJORUxfXwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5jIGIvZnMveGZzL3hmc19idHJlZS5jCmluZGV4IGU3M2MzMzIuLmU5ZGY5OTUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2J0cmVlLmMKQEAgLTE4ODMsNyArMTg4Myw3IEBACiAKIAkvKgogCSAqIFdlIGFkZCBvbmUgZW50cnkgdG8gdGhlIGxlZnQgc2lkZSBhbmQgcmVtb3ZlIG9uZSBmb3IgdGhlIHJpZ2h0IHNpZGUuCi0JICogQWNjb3V0IGZvciBpdCBoZXJlLCB0aGUgY2hhbmdlcyB3aWxsIGJlIHVwZGF0ZWQgb24gZGlzayBhbmQgbG9nZ2VkCisJICogQWNjb3VudCBmb3IgaXQgaGVyZSwgdGhlIGNoYW5nZXMgd2lsbCBiZSB1cGRhdGVkIG9uIGRpc2sgYW5kIGxvZ2dlZAogCSAqIGxhdGVyLgogCSAqLwogCWxyZWNzKys7CkBAIC0zNTM1LDcgKzM1MzUsNyBAQAogCVhGU19CVFJFRV9TVEFUU19JTkMoY3VyLCBqb2luKTsKIAogCS8qCi0JICogRml4IHVwIHRoZSB0aGUgbnVtYmVyIG9mIHJlY29yZHMgYW5kIHJpZ2h0IGJsb2NrIHBvaW50ZXIgaW4gdGhlCisJICogRml4IHVwIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBhbmQgcmlnaHQgYmxvY2sgcG9pbnRlciBpbiB0aGUKIAkgKiBzdXJ2aXZpbmcgYmxvY2ssIGFuZCBsb2cgaXQuCiAJICovCiAJeGZzX2J0cmVlX3NldF9udW1yZWNzKGxlZnQsIGxyZWNzICsgcnJlY3MpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5oIGIvZnMveGZzL3hmc19idHJlZS5oCmluZGV4IDc4OWZmZmQuLjRmODUyYjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2J0cmVlLmgKQEAgLTQxLDcgKzQxLDcgQEAKIC8qCiAgKiBHZW5lcmljIGJ0cmVlIGhlYWRlci4KICAqCi0gKiBUaGlzIGlzIGEgY29taW5hdGlvbiBvZiB0aGUgYWN0dWFsIGZvcm1hdCB1c2VkIG9uIGRpc2sgZm9yIHNob3J0IGFuZCBsb25nCisgKiBUaGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGFjdHVhbCBmb3JtYXQgdXNlZCBvbiBkaXNrIGZvciBzaG9ydCBhbmQgbG9uZwogICogZm9ybWF0IGJ0cmVlcy4gIFRoZSBmaXJzdCB0aHJlZSBmaWVsZHMgYXJlIHNoYXJlZCBieSBib3RoIGZvcm1hdCwgYnV0CiAgKiB0aGUgcG9pbnRlcnMgYXJlIGRpZmZlcmVudCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLgogICoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCBjNDVmNzRmLi45ZmY2ZTU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCkBAIC0xNTAzLDcgKzE1MDMsNyBAQAogICogVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIHNvbWUgc291cmNlLWxldmVsIGxvb3AgdW5yb2xsaW5nLgogICovCiB4ZnNfZGFoYXNoX3QKLXhmc19kYV9oYXNobmFtZShjb25zdCB1Y2hhcl90ICpuYW1lLCBpbnQgbmFtZWxlbikKK3hmc19kYV9oYXNobmFtZShjb25zdCBfX3VpbnQ4X3QgKm5hbWUsIGludCBuYW1lbGVuKQogewogCXhmc19kYWhhc2hfdCBoYXNoOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RhX2J0cmVlLmggYi9mcy94ZnMveGZzX2RhX2J0cmVlLmgKaW5kZXggNzBiNzEwYy4uOGM1MzYxNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaApAQCAtOTEsOSArOTEsOSBAQAogICogU3RydWN0dXJlIHRvIGVhc2UgcGFzc2luZyBhcm91bmQgY29tcG9uZW50IG5hbWVzLgogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZGFfYXJncyB7Ci0JY29uc3QgdWNoYXJfdAkqbmFtZTsJCS8qIHN0cmluZyAobWF5YmUgbm90IE5VTEwgdGVybWluYXRlZCkgKi8KKwljb25zdCBfX3VpbnQ4X3QJKm5hbWU7CQkvKiBzdHJpbmcgKG1heWJlIG5vdCBOVUxMIHRlcm1pbmF0ZWQpICovCiAJaW50CQluYW1lbGVuOwkvKiBsZW5ndGggb2Ygc3RyaW5nIChtYXliZSBubyBOVUxMKSAqLwotCXVjaGFyX3QJCSp2YWx1ZTsJCS8qIHNldCBvZiBieXRlcyAobWF5YmUgY29udGFpbiBOVUxMcykgKi8KKwlfX3VpbnQ4X3QJKnZhbHVlOwkJLyogc2V0IG9mIGJ5dGVzIChtYXliZSBjb250YWluIE5VTExzKSAqLwogCWludAkJdmFsdWVsZW47CS8qIGxlbmd0aCBvZiB2YWx1ZSAqLwogCWludAkJZmxhZ3M7CQkvKiBhcmd1bWVudCBmbGFncyAoZWc6IEFUVFJfTk9DUkVBVEUpICovCiAJeGZzX2RhaGFzaF90CWhhc2h2YWw7CS8qIGhhc2ggdmFsdWUgb2YgbmFtZSAqLwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJdW5zaWduZWQgY2hhcgkJaW5sZWFmOwkJLyogaW5zZXJ0IGludG8gMS0+bGYsIDAtPnNwbGYgKi8KIAl1bnNpZ25lZCBjaGFyCQlleHRyYXZhbGlkOwkvKiBUL0Y6IGV4dHJhYmxrIGlzIGluIHVzZSAqLwogCXVuc2lnbmVkIGNoYXIJCWV4dHJhYWZ0ZXI7CS8qIFQvRjogZXh0cmFibGsgaXMgYWZ0ZXIgbmV3ICovCi0JeGZzX2RhX3N0YXRlX2Jsa190CWV4dHJhYmxrOwkvKiBmb3IgZG91YmxlLXNwbGl0cyBvbiBsZWFmcyAqLworCXhmc19kYV9zdGF0ZV9ibGtfdAlleHRyYWJsazsJLyogZm9yIGRvdWJsZS1zcGxpdHMgb24gbGVhdmVzICovCiAJCQkJCQkvKiBmb3IgZGlydjIgZXh0cmFibGsgaXMgZGF0YSAqLwogfSB4ZnNfZGFfc3RhdGVfdDsKIApAQCAtMjUxLDcgKzI1MSw3IEBACiBpbnQJeGZzX2RhX3Nocmlua19pbm9kZSh4ZnNfZGFfYXJnc190ICphcmdzLCB4ZnNfZGFibGtfdCBkZWFkX2Jsa25vLAogCQkJCQkgIHhmc19kYWJ1Zl90ICpkZWFkX2J1Zik7CiAKLXVpbnQgeGZzX2RhX2hhc2huYW1lKGNvbnN0IHVjaGFyX3QgKm5hbWVfc3RyaW5nLCBpbnQgbmFtZV9sZW5ndGgpOwordWludCB4ZnNfZGFfaGFzaG5hbWUoY29uc3QgX191aW50OF90ICpuYW1lX3N0cmluZywgaW50IG5hbWVfbGVuZ3RoKTsKIGVudW0geGZzX2RhY21wIHhmc19kYV9jb21wbmFtZShzdHJ1Y3QgeGZzX2RhX2FyZ3MgKmFyZ3MsCiAJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CiAKQEAgLTI2OCw1ICsyNjgsNiBAQAogCiBleHRlcm4gc3RydWN0IGttZW1fem9uZSAqeGZzX2RhX3N0YXRlX3pvbmU7CiBleHRlcm4gc3RydWN0IGttZW1fem9uZSAqeGZzX2RhYnVmX3pvbmU7CitleHRlcm4gY29uc3Qgc3RydWN0IHhmc19uYW1lb3BzIHhmc19kZWZhdWx0X25hbWVvcHM7CiAKICNlbmRpZgkvKiBfX1hGU19EQV9CVFJFRV9IX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGZyYWcuYyBiL2ZzL3hmcy94ZnNfZGZyYWcuYwppbmRleCBmODI3OGNmLi5lNmQ4MzliIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RmcmFnLmMKKysrIGIvZnMveGZzL3hmc19kZnJhZy5jCkBAIC03OSw2ICs3OSwxMiBAQAogCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CiAJfQogCisJaWYgKElTX1NXQVBGSUxFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpIHx8CisJICAgIElTX1NXQVBGSUxFKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSkgeworCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOworCQlnb3RvIG91dF9wdXRfdGFyZ2V0X2ZpbGU7CisJfQorCiAJaXAgPSBYRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAl0aXAgPSBYRlNfSSh0YXJnZXRfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CiAKQEAgLTExOCwxOSArMTI0LDE3IEBACiAJeGZzX2JzdGF0X3QJKnNicCA9ICZzeHAtPnN4X3N0YXQ7CiAJeGZzX2lmb3JrX3QJKnRlbXBpZnAsICppZnAsICp0aWZwOwogCWludAkJaWxmX2ZpZWxkcywgdGlsZl9maWVsZHM7Ci0Jc3RhdGljIHVpbnQJbG9ja19mbGFncyA9IFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMOwogCWludAkJZXJyb3IgPSAwOwogCWludAkJYWZvcmtibGtzID0gMDsKIAlpbnQJCXRhZm9ya2Jsa3MgPSAwOwogCV9fdWludDY0X3QJdG1wOwotCWNoYXIJCWxvY2tlZCA9IDA7CiAKIAltcCA9IGlwLT5pX21vdW50OwogCiAJdGVtcGlmcCA9IGttZW1fYWxsb2Moc2l6ZW9mKHhmc19pZm9ya190KSwgS01fTUFZRkFJTCk7CiAJaWYgKCF0ZW1waWZwKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVOT01FTSk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dDsKIAl9CiAKIAlzYnAgPSAmc3hwLT5zeF9zdGF0OwpAQCAtMTQzLDI1ICsxNDcsMjQgQEAKIAkgKi8KIAl4ZnNfbG9ja190d29faW5vZGVzKGlwLCB0aXAsIFhGU19JT0xPQ0tfRVhDTCk7CiAJeGZzX2xvY2tfdHdvX2lub2RlcyhpcCwgdGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JbG9ja2VkID0gMTsKIAogCS8qIFZlcmlmeSB0aGF0IGJvdGggZmlsZXMgaGF2ZSB0aGUgc2FtZSBmb3JtYXQgKi8KIAlpZiAoKGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkgIT0gKHRpcC0+aV9kLmRpX21vZGUgJiBTX0lGTVQpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyogVmVyaWZ5IGJvdGggZmlsZXMgYXJlIGVpdGhlciByZWFsLXRpbWUgb3Igbm9uLXJlYWx0aW1lICovCiAJaWYgKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgIT0gWEZTX0lTX1JFQUxUSU1FX0lOT0RFKHRpcCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBTaG91bGQgbmV2ZXIgZ2V0IGEgbG9jYWwgZm9ybWF0ICovCiAJaWYgKGlwLT5pX2QuZGlfZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0xPQ0FMIHx8CiAJICAgIHRpcC0+aV9kLmRpX2Zvcm1hdCA9PSBYRlNfRElOT0RFX0ZNVF9MT0NBTCkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmIChWTl9DQUNIRUQoVkZTX0kodGlwKSkgIT0gMCkgewpAQCAtMTY5LDEzICsxNzIsMTMgQEAKIAkJZXJyb3IgPSB4ZnNfZmx1c2hpbnZhbF9wYWdlcyh0aXAsIDAsIC0xLAogCQkJCUZJX1JFTUFQRl9MT0NLRUQpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGVycm9yMDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBWZXJpZnkgT19ESVJFQ1QgZm9yIGZ0bXAgKi8KIAlpZiAoVk5fQ0FDSEVEKFZGU19JKHRpcCkpICE9IDApIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBWZXJpZnkgYWxsIGRhdGEgYXJlIGJlaW5nIHN3YXBwZWQgKi8KQEAgLTE4Myw3ICsxODYsNyBAQAogCSAgICBzeHAtPnN4X2xlbmd0aCAhPSBpcC0+aV9kLmRpX3NpemUgfHwKIAkgICAgc3hwLT5zeF9sZW5ndGggIT0gdGlwLT5pX2QuZGlfc2l6ZSkgewogCQllcnJvciA9IFhGU19FUlJPUihFRkFVTFQpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qCkBAIC0xOTMsNyArMTk2LDcgQEAKIAkgKi8KIAlpZiAoIFhGU19JRk9SS19RKGlwKSAhPSBYRlNfSUZPUktfUSh0aXApICkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qCkBAIC0yMDgsNyArMjExLDcgQEAKIAkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9zZWMpIHx8CiAJICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9tdGltZS50X25zZWMpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBXZSBuZWVkIHRvIGZhaWwgaWYgdGhlIGZpbGUgaXMgbWVtb3J5IG1hcHBlZC4gIE9uY2Ugd2UgaGF2ZSB0b3NzZWQKQEAgLTIxOSw3ICsyMjIsNyBAQAogCSAqLwogCWlmIChWTl9NQVBQRUQoVkZTX0koaXApKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFQlVTWSk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKQEAgLTI0Miw4ICsyNDUsNyBAQAogCQl4ZnNfaXVubG9jayhpcCwgIFhGU19JT0xPQ0tfRVhDTCk7CiAJCXhmc19pdW5sb2NrKHRpcCwgWEZTX0lPTE9DS19FWENMKTsKIAkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCWxvY2tlZCA9IDA7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dDsKIAl9CiAJeGZzX2xvY2tfdHdvX2lub2RlcyhpcCwgdGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAKQEAgLTI1MywxOSArMjU1LDE1IEBACiAJaWYgKCAoKFhGU19JRk9SS19RKGlwKSAhPSAwKSAmJiAoaXAtPmlfZC5kaV9hbmV4dGVudHMgPiAwKSkgJiYKIAkgICAgIChpcC0+aV9kLmRpX2Fmb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpKSB7CiAJCWVycm9yID0geGZzX2JtYXBfY291bnRfYmxvY2tzKHRwLCBpcCwgWEZTX0FUVFJfRk9SSywgJmFmb3JrYmxrcyk7Ci0JCWlmIChlcnJvcikgewotCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCQlnb3RvIGVycm9yMDsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAJfQogCWlmICggKChYRlNfSUZPUktfUSh0aXApICE9IDApICYmICh0aXAtPmlfZC5kaV9hbmV4dGVudHMgPiAwKSkgJiYKIAkgICAgICh0aXAtPmlfZC5kaV9hZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0xPQ0FMKSkgewogCQllcnJvciA9IHhmc19ibWFwX2NvdW50X2Jsb2Nrcyh0cCwgdGlwLCBYRlNfQVRUUl9GT1JLLAogCQkJJnRhZm9ya2Jsa3MpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQkJZ290byBlcnJvcjA7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdHJhbnNfY2FuY2VsOwogCX0KIAogCS8qCkBAIC0zMzIsMTAgKzMzMCwxMCBAQAogCiAKIAlJSE9MRChpcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgbG9ja19mbGFncyk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwogCiAJSUhPTEQodGlwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIHRpcCwgbG9ja19mbGFncyk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCB0aXAsIFhGU19JTE9DS19FWENMIHwgWEZTX0lPTE9DS19FWENMKTsKIAogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCAgaWxmX2ZpZWxkcyk7CiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgdGlwLCB0aWxmX2ZpZWxkcyk7CkBAIC0zNDQsMTkgKzM0MiwxOSBAQAogCSAqIElmIHRoaXMgaXMgYSBzeW5jaHJvbm91cyBtb3VudCwgbWFrZSBzdXJlIHRoYXQgdGhlCiAJICogdHJhbnNhY3Rpb24gZ29lcyB0byBkaXNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIHVzZXIuCiAJICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKSB7CisJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKQogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCX0KIAogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1NXQVBFWFQpOwotCWxvY2tlZCA9IDA7CiAKLSBlcnJvcjA6Ci0JaWYgKGxvY2tlZCkgewotCQl4ZnNfaXVubG9jayhpcCwgIGxvY2tfZmxhZ3MpOwotCQl4ZnNfaXVubG9jayh0aXAsIGxvY2tfZmxhZ3MpOwotCX0KLQlpZiAodGVtcGlmcCAhPSBOVUxMKQotCQlrbWVtX2ZyZWUodGVtcGlmcCk7CitvdXRfdW5sb2NrOgorCXhmc19pdW5sb2NrKGlwLCAgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOworCXhmc19pdW5sb2NrKHRpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOworb3V0OgorCWttZW1fZnJlZSh0ZW1waWZwKTsKIAlyZXR1cm4gZXJyb3I7CisKK291dF90cmFuc19jYW5jZWw6CisJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7CisJZ290byBvdXRfdW5sb2NrOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaW5vZGUuaCBiL2ZzL3hmcy94ZnNfZGlub2RlLmgKaW5kZXggMTYyZTg3Mi4uZTViMTUzYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaW5vZGUuaAorKysgYi9mcy94ZnMveGZzX2Rpbm9kZS5oCkBAIC0xMDMsNyArMTAzLDkgQEAKIC8qCiAgKiBJbm9kZSBzaXplIGZvciBnaXZlbiBmcy4KICAqLwotI2RlZmluZQlYRlNfTElUSU5PKG1wKQkoKG1wKS0+bV9saXRpbm8pCisjZGVmaW5lIFhGU19MSVRJTk8obXApIFwKKwkoKGludCkoKChtcCktPm1fc2Iuc2JfaW5vZGVzaXplKSAtIHNpemVvZihzdHJ1Y3QgeGZzX2Rpbm9kZSkpKQorCiAjZGVmaW5lCVhGU19CUk9PVF9TSVpFX0FESglcCiAJKFhGU19CVFJFRV9MQkxPQ0tfTEVOIC0gc2l6ZW9mKHhmc19ibWRyX2Jsb2NrX3QpKQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjIuYyBiL2ZzL3hmcy94ZnNfZGlyMi5jCmluZGV4IDFhZmIxMjIuLmM2NTdiZWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMi5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMi5jCkBAIC00Niw4ICs0Niw2IEBACiAKIHN0cnVjdCB4ZnNfbmFtZSB4ZnNfbmFtZV9kb3Rkb3QgPSB7Ii4uIiwgMn07CiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgeGZzX25hbWVvcHMgeGZzX2RlZmF1bHRfbmFtZW9wczsKLQogLyoKICAqIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgKGllLiBBLVopIHN1cHBvcnQgZm9yIGRpcmVjdG9yaWVzIHRoYXQgd2FzCiAgKiB1c2VkIGluIElSSVguCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfYmxvY2suYyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCmluZGV4IGUxZjBhMDYuLmFiNTJlOWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jCkBAIC00NDgsNyArNDQ4LDYgQEAKIAl4ZnNfbW91bnRfdAkJKm1wOwkJLyogZmlsZXN5c3RlbSBtb3VudCBwb2ludCAqLwogCWNoYXIJCQkqcHRyOwkJLyogY3VycmVudCBkYXRhIGVudHJ5ICovCiAJaW50CQkJd2FudG9mZjsJLyogc3RhcnRpbmcgYmxvY2sgb2Zmc2V0ICovCi0JeGZzX2lub190CQlpbm87CiAJeGZzX29mZl90CQljb29rOwogCiAJbXAgPSBkcC0+aV9tb3VudDsKQEAgLTUwOSwxNiArNTA4LDEyIEBACiAKIAkJY29vayA9IHhmc19kaXIyX2RiX29mZl90b19kYXRhcHRyKG1wLCBtcC0+bV9kaXJkYXRhYmxrLAogCQkJCQkgICAgKGNoYXIgKilkZXAgLSAoY2hhciAqKWJsb2NrKTsKLQkJaW5vID0gYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKIAogCQkvKgogCQkgKiBJZiBpdCBkaWRuJ3QgZml0LCBzZXQgdGhlIGZpbmFsIG9mZnNldCB0byBoZXJlICYgcmV0dXJuLgogCQkgKi8KIAkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwgY29vayAmIDB4N2ZmZmZmZmYsCi0JCQkgICAgaW5vLCBEVF9VTktOT1dOKSkgeworCQkJICAgIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gY29vayAmIDB4N2ZmZmZmZmY7CiAJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaCBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKaW5kZXggYjgxNmUwMi4uZWZiYzI5MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2RhdGEuaAorKysgYi9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCkBAIC0zOCw3ICszOCw3IEBACiAKIC8qCiAgKiBEaXJlY3RvcnkgYWRkcmVzcyBzcGFjZSBkaXZpZGVkIGludG8gc2VjdGlvbnMsCi0gKiBzcGFjZXMgc2VwYXJhdGVkIGJ5IDMyZ2IuCisgKiBzcGFjZXMgc2VwYXJhdGVkIGJ5IDMyR0IuCiAgKi8KICNkZWZpbmUJWEZTX0RJUjJfU1BBQ0VfU0laRQkoMVVMTCA8PCAoMzIgKyBYRlNfRElSMl9EQVRBX0FMSUdOX0xPRykpCiAjZGVmaW5lCVhGU19ESVIyX0RBVEFfU1BBQ0UJMApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggZWY4MDVhMy4uZmE5MTNlNDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAgKiBDaGVjayB0aGUgaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgYSBsZWFmMSBibG9jay4KICAqIFBvcCBhbiBhc3NlcnQgaWYgc29tZXRoaW5nIGlzIHdyb25nLgogICovCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2RpcjJfbGVhZl9jaGVjaygKIAl4ZnNfaW5vZGVfdAkJKmRwLAkJLyogaW5jb3JlIGRpcmVjdG9yeSBpbm9kZSAqLwogCXhmc19kYWJ1Zl90CQkqYnApCQkvKiBsZWFmJ3MgYnVmZmVyICovCkBAIC03ODAsNyArNzgwLDYgQEAKIAlpbnQJCQlyYV9pbmRleDsJLyogKm1hcCBpbmRleCBmb3IgcmVhZC1haGVhZCAqLwogCWludAkJCXJhX29mZnNldDsJLyogbWFwIGVudHJ5IG9mZnNldCBmb3IgcmEgKi8KIAlpbnQJCQlyYV93YW50OwkvKiByZWFkYWhlYWQgY291bnQgd2FudGVkICovCi0JeGZzX2lub190CQlpbm87CiAKIAkvKgogCSAqIElmIHRoZSBvZmZzZXQgaXMgYXQgb3IgcGFzdCB0aGUgbGFyZ2VzdCBhbGxvd2VkIHZhbHVlLApAQCAtMTA3NiwyNCArMTA3NSwxMiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKgotCQkgKiBDb3B5IHRoZSBlbnRyeSBpbnRvIHRoZSBwdXRhcmdzLCBhbmQgdHJ5IGZvcm1hdHRpbmcgaXQuCi0JCSAqLwogCQlkZXAgPSAoeGZzX2RpcjJfZGF0YV9lbnRyeV90ICopcHRyOwotCiAJCWxlbmd0aCA9IHhmc19kaXIyX2RhdGFfZW50c2l6ZShkZXAtPm5hbWVsZW4pOwogCi0JCWlubyA9IGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlcik7Ci0jaWYgWEZTX0JJR19JTlVNUwotCQlpbm8gKz0gbXAtPm1faW5vYWRkOwotI2VuZGlmCi0KLQkJLyoKLQkJICogV29uJ3QgZml0LiAgUmV0dXJuIHRvIGNhbGxlci4KLQkJICovCiAJCWlmIChmaWxsZGlyKGRpcmVudCwgZGVwLT5uYW1lLCBkZXAtPm5hbWVsZW4sCiAJCQkgICAgeGZzX2RpcjJfYnl0ZV90b19kYXRhcHRyKG1wLCBjdXJvZmYpICYgMHg3ZmZmZmZmZiwKLQkJCSAgICBpbm8sIERUX1VOS05PV04pKQorCQkJICAgIGJlNjRfdG9fY3B1KGRlcC0+aW51bWJlciksIERUX1VOS05PV04pKQogCQkJYnJlYWs7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCmluZGV4IGZhNmMzYTUuLjVhODFjY2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX25vZGUuYwpAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIAl9CiAJeGZzX2RpcjJfbGVhZm5fY2hlY2soZHAsIGJwKTsKIAkvKgotCSAqIFJldHVybiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgdGhpcyBsZWFmIGJsb2NrIGlzIGVtdHB5IGVub3VnaAorCSAqIFJldHVybiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgdGhpcyBsZWFmIGJsb2NrIGlzIGVtcHR5IGVub3VnaAogCSAqIHRvIGp1c3RpZnkgdHJ5aW5nIHRvIGpvaW4gaXQgd2l0aCBhIG5laWdoYm9yLgogCSAqLwogCSpydmFsID0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9zZi5jIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKaW5kZXggYThhOGE2ZS4uZTg5NzM0ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX3NmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX3NmLmMKQEAgLTc0OCwxMSArNzQ4LDcgQEAKIAkgKiBQdXQgLiBlbnRyeSB1bmxlc3Mgd2UncmUgc3RhcnRpbmcgcGFzdCBpdC4KIAkgKi8KIAlpZiAoKm9mZnNldCA8PSBkb3Rfb2Zmc2V0KSB7Ci0JCWlubyA9IGRwLT5pX2lubzsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLiIsIDEsIGRvdF9vZmZzZXQgJiAweDdmZmZmZmZmLCBpbm8sIERUX0RJUikpIHsKKwkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLiIsIDEsIGRvdF9vZmZzZXQgJiAweDdmZmZmZmZmLCBkcC0+aV9pbm8sIERUX0RJUikpIHsKIAkJCSpvZmZzZXQgPSBkb3Rfb2Zmc2V0ICYgMHg3ZmZmZmZmZjsKIAkJCXJldHVybiAwOwogCQl9CkBAIC03NjMsOSArNzU5LDYgQEAKIAkgKi8KIAlpZiAoKm9mZnNldCA8PSBkb3Rkb3Rfb2Zmc2V0KSB7CiAJCWlubyA9IHhmc19kaXIyX3NmX2dldF9pbnVtYmVyKHNmcCwgJnNmcC0+aGRyLnBhcmVudCk7Ci0jaWYgWEZTX0JJR19JTlVNUwotCQlpbm8gKz0gbXAtPm1faW5vYWRkOwotI2VuZGlmCiAJCWlmIChmaWxsZGlyKGRpcmVudCwgIi4uIiwgMiwgZG90ZG90X29mZnNldCAmIDB4N2ZmZmZmZmYsIGlubywgRFRfRElSKSkgewogCQkJKm9mZnNldCA9IGRvdGRvdF9vZmZzZXQgJiAweDdmZmZmZmZmOwogCQkJcmV0dXJuIDA7CkBAIC03ODYsMTAgKzc3OSw2IEBACiAJCX0KIAogCQlpbm8gPSB4ZnNfZGlyMl9zZl9nZXRfaW51bWJlcihzZnAsIHhmc19kaXIyX3NmX2ludW1iZXJwKHNmZXApKTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKLQogCQlpZiAoZmlsbGRpcihkaXJlbnQsIHNmZXAtPm5hbWUsIHNmZXAtPm5hbWVsZW4sCiAJCQkgICAgb2ZmICYgMHg3ZmZmZmZmZiwgaW5vLCBEVF9VTktOT1dOKSkgewogCQkJKm9mZnNldCA9IG9mZiAmIDB4N2ZmZmZmZmY7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaAppbmRleCAyZjA0OWY2Li4wZDIyYzU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKQEAgLTMzLDEyICszMywxMCBAQAogICogY29udmVyc2lvbiByb3V0aW5lLgogICovCiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2V4dGVudF8zMiB7CiAJX191aW50NjRfdAlleHRfc3RhcnQ7CiAJX191aW50MzJfdAlleHRfbGVuOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfZXh0ZW50XzMyX3Q7Ci0jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2V4dGVudF82NCB7CiAJX191aW50NjRfdAlleHRfc3RhcnQ7CkBAIC01OSw3ICs1Nyw2IEBACiAJeGZzX2V4dGVudF90CQllZmlfZXh0ZW50c1sxXTsJLyogYXJyYXkgb2YgZXh0ZW50cyB0byBmcmVlICovCiB9IHhmc19lZmlfbG9nX2Zvcm1hdF90OwogCi0jaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19lZmlfbG9nX2Zvcm1hdF8zMiB7CiAJX191aW50MTZfdAkJZWZpX3R5cGU7CS8qIGVmaSBsb2cgaXRlbSB0eXBlICovCiAJX191aW50MTZfdAkJZWZpX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCkBAIC02Nyw3ICs2NCw2IEBACiAJX191aW50NjRfdAkJZWZpX2lkOwkJLyogZWZpIGlkZW50aWZpZXIgKi8KIAl4ZnNfZXh0ZW50XzMyX3QJCWVmaV9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIHRvIGZyZWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeGZzX2VmaV9sb2dfZm9ybWF0XzMyX3Q7Ci0jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmaV9sb2dfZm9ybWF0XzY0IHsKIAlfX3VpbnQxNl90CQllZmlfdHlwZTsJLyogZWZpIGxvZyBpdGVtIHR5cGUgKi8KQEAgLTkwLDcgKzg2LDYgQEAKIAl4ZnNfZXh0ZW50X3QJCWVmZF9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIGZyZWVkICovCiB9IHhmc19lZmRfbG9nX2Zvcm1hdF90OwogCi0jaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19lZmRfbG9nX2Zvcm1hdF8zMiB7CiAJX191aW50MTZfdAkJZWZkX3R5cGU7CS8qIGVmZCBsb2cgaXRlbSB0eXBlICovCiAJX191aW50MTZfdAkJZWZkX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCkBAIC05OCw3ICs5Myw2IEBACiAJX191aW50NjRfdAkJZWZkX2VmaV9pZDsJLyogaWQgb2YgY29ycmVzcG9uZGluZyBlZmkgKi8KIAl4ZnNfZXh0ZW50XzMyX3QJCWVmZF9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIGZyZWVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhmc19lZmRfbG9nX2Zvcm1hdF8zMl90OwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHhmc19lZmRfbG9nX2Zvcm1hdF82NCB7CiAJX191aW50MTZfdAkJZWZkX3R5cGU7CS8qIGVmZCBsb2cgaXRlbSB0eXBlICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGVzdHJlYW0uYyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCmluZGV4IGYzYmI3NWQuLjZjODdjOGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCisrKyBiL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAl4ZnNfZXh0bGVuX3QJbWlubGVuKQogewogCWludAkJZXJyLCB0cnlsb2NrLCBuc2NhbjsKLQl4ZnNfZXh0bGVuX3QJZGVsdGEsIGxvbmdlc3QsIG5lZWQsIGZyZWUsIG1pbmZyZWUsIG1heGZyZWUgPSAwOworCXhmc19leHRsZW5fdAlsb25nZXN0LCBmcmVlLCBtaW5mcmVlLCBtYXhmcmVlID0gMDsKIAl4ZnNfYWdudW1iZXJfdAlhZywgbWF4X2FnID0gTlVMTEFHTlVNQkVSOwogCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZzsKIApAQCAtMTg2LDEyICsxODYsNyBAQAogCQkJZ290byBuZXh0X2FnOwogCQl9CiAKLQkJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOwotCQlkZWx0YSA9IG5lZWQgPiBwYWctPnBhZ2ZfZmxjb3VudCA/IG5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudCA6IDA7Ci0JCWxvbmdlc3QgPSAocGFnLT5wYWdmX2xvbmdlc3QgPiBkZWx0YSkgPwotCQkgICAgICAgICAgKHBhZy0+cGFnZl9sb25nZXN0IC0gZGVsdGEpIDoKLQkJICAgICAgICAgIChwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwgcGFnLT5wYWdmX2xvbmdlc3QgPiAwKTsKLQorCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CiAJCWlmICgoKG1pbmxlbiAmJiBsb25nZXN0ID49IG1pbmxlbikgfHwKIAkJICAgICAoIW1pbmxlbiAmJiBwYWctPnBhZ2ZfZnJlZWJsa3MgPj0gbWluZnJlZSkpICYmCiAJCSAgICAoIXBhZy0+cGFnZl9tZXRhZGF0YSB8fCAhKGZsYWdzICYgWEZTX1BJQ0tfVVNFUkRBVEEpIHx8CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Zzb3BzLmMgYi9mcy94ZnMveGZzX2Zzb3BzLmMKaW5kZXggNjgwZDBlMC4uODM3OWUzYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwpAQCAtNTc2LDcgKzU3Niw3IEBACiAJaWYgKGZkYmxrc19kZWx0YSkgewogCQkvKgogCQkgKiBJZiB3ZSBhcmUgcHV0dGluZyBibG9ja3MgYmFjayBoZXJlLCBtX3Jlc2Jsa3NfYXZhaWwgaXMKLQkJICogYWxyZWFkeSBhdCBpdCdzIG1heCBzbyB0aGlzIHdpbGwgcHV0IGl0IGluIHRoZSBmcmVlIHBvb2wuCisJCSAqIGFscmVhZHkgYXQgaXRzIG1heCBzbyB0aGlzIHdpbGwgcHV0IGl0IGluIHRoZSBmcmVlIHBvb2wuCiAJCSAqCiAJCSAqIElmIHdlIG5lZWQgc3BhY2UsIHdlJ2xsIGVpdGhlciBzdWNjZWVkIGluIGdldHRpbmcgaXQKIAkJICogZnJvbSB0aGUgZnJlZSBibG9jayBjb3VudCBvciB3ZSdsbCBnZXQgYW4gZW5vc3BjLiBJZgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggYWIwMTZlNS4uMzEyMGEzYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJYXJncy5taW5hbGlnbnNsb3AgPSB4ZnNfaWFsbG9jX2NsdXN0ZXJfYWxpZ25tZW50KCZhcmdzKSAtIDE7CiAKIAkJLyogQWxsb3cgc3BhY2UgZm9yIHRoZSBpbm9kZSBidHJlZSB0byBzcGxpdC4gKi8KLQkJYXJncy5taW5sZWZ0ID0gWEZTX0lOX01BWExFVkVMUyhhcmdzLm1wKSAtIDE7CisJCWFyZ3MubWlubGVmdCA9IGFyZ3MubXAtPm1faW5fbWF4bGV2ZWxzIC0gMTsKIAkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfSBlbHNlCkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJLyoKIAkJICogQWxsb3cgc3BhY2UgZm9yIHRoZSBpbm9kZSBidHJlZSB0byBzcGxpdC4KIAkJICovCi0JCWFyZ3MubWlubGVmdCA9IFhGU19JTl9NQVhMRVZFTFMoYXJncy5tcCkgLSAxOworCQlhcmdzLm1pbmxlZnQgPSBhcmdzLm1wLT5tX2luX21heGxldmVscyAtIDE7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYWxsb2NfdmV4dGVudCgmYXJncykpKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTM0OSw3ICszNDksNyBAQAogCQkgKiBJbml0aWFsaXplIGFsbCBpbm9kZXMgaW4gdGhpcyBidWZmZXIgYW5kIHRoZW4gbG9nIHRoZW0uCiAJCSAqCiAJCSAqIFhYWDogSXQgd291bGQgYmUgbXVjaCBiZXR0ZXIgaWYgd2UgaGFkIGp1c3Qgb25lIHRyYW5zYWN0aW9uIHRvCi0JCSAqICAgICAgbG9nIGEgd2hvbGUgY2x1c3RlciBvZiBpbm9kZXMgaW5zdGVhZCBvZiBhbGwgdGhlIGluZGl2ZHVhbAorCQkgKiAgICAgIGxvZyBhIHdob2xlIGNsdXN0ZXIgb2YgaW5vZGVzIGluc3RlYWQgb2YgYWxsIHRoZSBpbmRpdmlkdWFsCiAJCSAqICAgICAgdHJhbnNhY3Rpb25zIGNhdXNpbmcgYSBsb3Qgb2YgbG9nIHRyYWZmaWMuCiAJCSAqLwogCQl4ZnNfYmlvemVybyhmYnVmLCAwLCBuaW5vZGVzIDw8IGFyZ3MubXAtPm1fc2Iuc2JfaW5vZGVsb2cpOwpAQCAtOTQzLDcgKzk0Myw3IEBACiAJQVNTRVJUKChYRlNfQUdJTk9fVE9fT0ZGU0VUKG1wLCByZWMuaXJfc3RhcnRpbm8pICUKIAkJCQkgICBYRlNfSU5PREVTX1BFUl9DSFVOSykgPT0gMCk7CiAJaW5vID0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgcmVjLmlyX3N0YXJ0aW5vICsgb2Zmc2V0KTsKLQlYRlNfSU5PQlRfQ0xSX0ZSRUUoJnJlYywgb2Zmc2V0KTsKKwlyZWMuaXJfZnJlZSAmPSB+WEZTX0lOT0JUX01BU0sob2Zmc2V0KTsKIAlyZWMuaXJfZnJlZWNvdW50LS07CiAJaWYgKChlcnJvciA9IHhmc19pbm9idF91cGRhdGUoY3VyLCByZWMuaXJfc3RhcnRpbm8sIHJlYy5pcl9mcmVlY291bnQsCiAJCQlyZWMuaXJfZnJlZSkpKQpAQCAtMTEwNSwxMSArMTEwNSwxMSBAQAogCSAqLwogCW9mZiA9IGFnaW5vIC0gcmVjLmlyX3N0YXJ0aW5vOwogCUFTU0VSVChvZmYgPj0gMCAmJiBvZmYgPCBYRlNfSU5PREVTX1BFUl9DSFVOSyk7Ci0JQVNTRVJUKCFYRlNfSU5PQlRfSVNfRlJFRSgmcmVjLCBvZmYpKTsKKwlBU1NFUlQoIShyZWMuaXJfZnJlZSAmIFhGU19JTk9CVF9NQVNLKG9mZikpKTsKIAkvKgogCSAqIE1hcmsgdGhlIGlub2RlIGZyZWUgJiBpbmNyZW1lbnQgdGhlIGNvdW50LgogCSAqLwotCVhGU19JTk9CVF9TRVRfRlJFRSgmcmVjLCBvZmYpOworCXJlYy5pcl9mcmVlIHw9IFhGU19JTk9CVF9NQVNLKG9mZik7CiAJcmVjLmlyX2ZyZWVjb3VudCsrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCmluZGV4IDk5ZjI0MDguLmMyODJhOWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiB9CiAKIC8qCi0gKiBpbnRpYWwgdmFsdWUgb2YgcHRyIGZvciBsb29rdXAKKyAqIGluaXRpYWwgdmFsdWUgb2YgcHRyIGZvciBsb29rdXAKICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9idF9pbml0X3B0cl9mcm9tX2N1cigKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmggYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCmluZGV4IDU1ODBlMjUuLmY3ODJhZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaApAQCAtMzIsMTQgKzMyLDE0IEBACiAjZGVmaW5lCVhGU19JQlRfTUFHSUMJMHg0OTQxNDI1NAkvKiAnSUFCVCcgKi8KIAogdHlwZWRlZglfX3VpbnQ2NF90CXhmc19pbm9mcmVlX3Q7Ci0jZGVmaW5lCVhGU19JTk9ERVNfUEVSX0NIVU5LCShOQkJZICogc2l6ZW9mKHhmc19pbm9mcmVlX3QpKQorI2RlZmluZQlYRlNfSU5PREVTX1BFUl9DSFVOSwkJKE5CQlkgKiBzaXplb2YoeGZzX2lub2ZyZWVfdCkpCiAjZGVmaW5lCVhGU19JTk9ERVNfUEVSX0NIVU5LX0xPRwkoWEZTX05CQllMT0cgKyAzKQotI2RlZmluZQlYRlNfSU5PQlRfQUxMX0ZSRUUJKCh4ZnNfaW5vZnJlZV90KS0xKQorI2RlZmluZQlYRlNfSU5PQlRfQUxMX0ZSRUUJCSgoeGZzX2lub2ZyZWVfdCktMSkKKyNkZWZpbmUJWEZTX0lOT0JUX01BU0soaSkJCSgoeGZzX2lub2ZyZWVfdCkxIDw8IChpKSkKIAogc3RhdGljIGlubGluZSB4ZnNfaW5vZnJlZV90IHhmc19pbm9idF9tYXNrbihpbnQgaSwgaW50IG4pCiB7Ci0JcmV0dXJuICgoKG4pID49IFhGU19JTk9ERVNfUEVSX0NIVU5LID8gXAotCQkoeGZzX2lub2ZyZWVfdCkwIDogKCh4ZnNfaW5vZnJlZV90KTEgPDwgKG4pKSkgLSAxKSA8PCAoaSk7CisJcmV0dXJuICgobiA+PSBYRlNfSU5PREVTX1BFUl9DSFVOSyA/IDAgOiBYRlNfSU5PQlRfTUFTSyhuKSkgLSAxKSA8PCBpOwogfQogCiAvKgpAQCAtNjksMjAgKzY5LDYgQEAKIHR5cGVkZWYgX19iZTMyIHhmc19pbm9idF9wdHJfdDsKIAogLyoKLSAqIEJpdCBtYW5pcHVsYXRpb25zIGZvciBpcl9mcmVlLgotICovCi0jZGVmaW5lCVhGU19JTk9CVF9NQVNLKGkpCQkoKHhmc19pbm9mcmVlX3QpMSA8PCAoaSkpCi0jZGVmaW5lCVhGU19JTk9CVF9JU19GUkVFKHJwLGkpCQlcCi0JCSgoKHJwKS0+aXJfZnJlZSAmIFhGU19JTk9CVF9NQVNLKGkpKSAhPSAwKQotI2RlZmluZQlYRlNfSU5PQlRfU0VUX0ZSRUUocnAsaSkJKChycCktPmlyX2ZyZWUgfD0gWEZTX0lOT0JUX01BU0soaSkpCi0jZGVmaW5lCVhGU19JTk9CVF9DTFJfRlJFRShycCxpKQkoKHJwKS0+aXJfZnJlZSAmPSB+WEZTX0lOT0JUX01BU0soaSkpCi0KLS8qCi0gKiBNYXhpbXVtIG51bWJlciBvZiBpbm9kZSBidHJlZSBsZXZlbHMuCi0gKi8KLSNkZWZpbmUJWEZTX0lOX01BWExFVkVMUyhtcCkJCSgobXApLT5tX2luX21heGxldmVscykKLQotLyoKICAqIGJsb2NrIG51bWJlcnMgaW4gdGhlIEFHLgogICovCiAjZGVmaW5lCVhGU19JQlRfQkxPQ0sobXApCQkoKHhmc19hZ2Jsb2NrX3QpKFhGU19DTlRfQkxPQ0sobXApICsgMSkpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMWYxNzVmYS4uZjg3OWMxYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIC8qCiAgKiBOT1RFOiAgVGhpcyBzdHJ1Y3R1cmUgbXVzdCBiZSBrZXB0IGlkZW50aWNhbCB0byBzdHJ1Y3QgeGZzX2Rpbm9kZQotICogCSAgaW4geGZzX2Rpbm9kZS5oIGV4Y2VwdCBmb3IgdGhlIGVuZGlhbmVzcyBhbm5vdGF0aW9ucy4KKyAqIAkgIGluIHhmc19kaW5vZGUuaCBleGNlcHQgZm9yIHRoZSBlbmRpYW5uZXNzIGFubm90YXRpb25zLgogICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaWNkaW5vZGUgewogCV9fdWludDE2X3QJZGlfbWFnaWM7CS8qIGlub2RlIG1hZ2ljICMgPSBYRlNfRElOT0RFX01BR0lDICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaCBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCmluZGV4IDk5NTdkMDYuLmE1MmFjMTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oCkBAIC00MCw3ICs0MCw2IEBACiAJX19pbnQzMl90CQlpbGZfYm9mZnNldDsJLyogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLwogfSB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90OwogCi0jaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZV9sb2dfZm9ybWF0XzMyIHsKIAlfX3VpbnQxNl90CQlpbGZfdHlwZTsJLyogaW5vZGUgbG9nIGl0ZW0gdHlwZSAqLwogCV9fdWludDE2X3QJCWlsZl9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLwpAQCAtNTYsNyArNTUsNiBAQAogCV9faW50MzJfdAkJaWxmX2xlbjsJLyogbGVuIG9mIGlub2RlIGJ1ZmZlciAqLwogCV9faW50MzJfdAkJaWxmX2JvZmZzZXQ7CS8qIG9mZiBvZiBpbm9kZSBpbiBidWZmZXIgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeGZzX2lub2RlX2xvZ19mb3JtYXRfMzJfdDsKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF82NCB7CiAJX191aW50MTZfdAkJaWxmX3R5cGU7CS8qIGlub2RlIGxvZyBpdGVtIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9tYXAuaCBiL2ZzL3hmcy94ZnNfaW9tYXAuaAppbmRleCBlZTFhMGMxLi5hMWNjMTMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvbWFwLmgKKysrIGIvZnMveGZzL3hmc19pb21hcC5oCkBAIC02Myw3ICs2Myw3IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2lvbWFwIHsKLQl4ZnNfZGFkZHJfdAkJaW9tYXBfYm47CS8qIGZpcnN0IDUxMmIgYmxrIG9mIG1hcHBpbmcgKi8KKwl4ZnNfZGFkZHJfdAkJaW9tYXBfYm47CS8qIGZpcnN0IDUxMkIgYmxrIG9mIG1hcHBpbmcgKi8KIAl4ZnNfYnVmdGFyZ190CQkqaW9tYXBfdGFyZ2V0OwogCXhmc19vZmZfdAkJaW9tYXBfb2Zmc2V0OwkvKiBvZmZzZXQgb2YgbWFwcGluZywgYnl0ZXMgKi8KIAl4ZnNfb2ZmX3QJCWlvbWFwX2JzaXplOwkvKiBzaXplIG9mIG1hcHBpbmcsIGJ5dGVzICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5jIGIvZnMveGZzL3hmc19pdGFibGUuYwppbmRleCBjZjk4YTgwLi5hZWIyZDIyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5jCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKQEAgLTgzLDcgKzgzLDEyIEBACiAJYnVmLT5ic191aWQgPSBkaWMtPmRpX3VpZDsKIAlidWYtPmJzX2dpZCA9IGRpYy0+ZGlfZ2lkOwogCWJ1Zi0+YnNfc2l6ZSA9IGRpYy0+ZGlfc2l6ZTsKLQl2bl9hdGltZV90b19ic3RpbWUoVkZTX0koaXApLCAmYnVmLT5ic19hdGltZSk7CisJLyoKKwkgKiBXZSBhcmUgcmVhZGluZyB0aGUgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZSB0aGUKKwkgKiBkaW5vZGUgbWlnaHQgbm90IGJlIHVwdG9kYXRlLgorCSAqLworCWJ1Zi0+YnNfYXRpbWUudHZfc2VjID0gVkZTX0koaXApLT5pX2F0aW1lLnR2X3NlYzsKKwlidWYtPmJzX2F0aW1lLnR2X25zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfbnNlYzsKIAlidWYtPmJzX210aW1lLnR2X3NlYyA9IGRpYy0+ZGlfbXRpbWUudF9zZWM7CiAJYnVmLT5ic19tdGltZS50dl9uc2VjID0gZGljLT5kaV9tdGltZS50X25zZWM7CiAJYnVmLT5ic19jdGltZS50dl9zZWMgPSBkaWMtPmRpX2N0aW1lLnRfc2VjOwpAQCAtNTc5LDcgKzU4NCw3IEBACiAJCQkJICogZmlyc3QgaW5vZGUgb2YgdGhlIGNsdXN0ZXIuCiAJCQkJICoKIAkJCQkgKiBDYXJlZnVsIHdpdGggY2x1c3RpZHguICAgVGhlcmUgY2FuIGJlCi0JCQkJICogbXVsdHBsZSBjbHVzdGVycyBwZXIgY2h1bmssIGEgc2luZ2xlCisJCQkJICogbXVsdGlwbGUgY2x1c3RlcnMgcGVyIGNodW5rLCBhIHNpbmdsZQogCQkJCSAqIGNsdXN0ZXIgcGVyIGNodW5rIG9yIGEgY2x1c3RlciB0aGF0IGhhcwogCQkJCSAqIGlub2RlcyByZXByZXNlbnRlZCBmcm9tIHNldmVyYWwgZGlmZmVyZW50CiAJCQkJICogY2h1bmtzIChpZiBibG9ja3NpemUgaXMgbGFyZ2UpLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggZjQ3MjZmNy4uZjc2YzZkNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAllcnJvciA9IHhmc190cmFuc19haWxfaW5pdChtcCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogQUlMIGluaXRpYWxpc2F0aW9uIGZhaWxlZDogZXJyb3IgJWQiLCBlcnJvcik7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gb3V0X2ZyZWVfbG9nOwogCX0KIAltcC0+bV9sb2ctPmxfYWlscCA9IG1wLT5tX2FpbDsKIApAQCAtNTk0LDIwICs1OTQsMjIgQEAKIAkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9SRE9OTFk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQvcmVjb3ZlcnkgZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKLQkJCWdvdG8gZXJyb3I7CisJCQlnb3RvIG91dF9kZXN0cm95X2FpbDsKIAkJfQogCX0KIAogCS8qIE5vcm1hbCB0cmFuc2FjdGlvbnMgY2FuIG5vdyBvY2N1ciAqLwogCW1wLT5tX2xvZy0+bF9mbGFncyAmPSB+WExPR19BQ1RJVkVfUkVDT1ZFUlk7CiAKLQkvKiBFbmQgbW91bnRpbmcgbWVzc2FnZSBpbiB4ZnNfbG9nX21vdW50X2ZpbmlzaCAqLwogCXJldHVybiAwOwotZXJyb3I6Ci0JeGZzX2xvZ191bm1vdW50X2RlYWxsb2MobXApOworCitvdXRfZGVzdHJveV9haWw6CisJeGZzX3RyYW5zX2FpbF9kZXN0cm95KG1wKTsKK291dF9mcmVlX2xvZzoKKwl4bG9nX2RlYWxsb2NfbG9nKG1wLT5tX2xvZyk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwotfQkvKiB4ZnNfbG9nX21vdW50ICovCit9CiAKIC8qCiAgKiBGaW5pc2ggdGhlIHJlY292ZXJ5IG9mIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgaXMgc2VwYXJhdGUgZnJvbQpAQCAtNjMzLDE5ICs2MzUsNiBAQAogfQogCiAvKgotICogVW5tb3VudCBwcm9jZXNzaW5nIGZvciB0aGUgbG9nLgotICovCi1pbnQKLXhmc19sb2dfdW5tb3VudCh4ZnNfbW91bnRfdCAqbXApCi17Ci0JaW50CQllcnJvcjsKLQotCWVycm9yID0geGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKLQl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgogICogRmluYWwgbG9nIHdyaXRlcyBhcyBwYXJ0IG9mIHVubW91bnQuCiAgKgogICogTWFyayB0aGUgZmlsZXN5c3RlbSBjbGVhbiBhcyB1bm1vdW50IGhhcHBlbnMuICBOb3RlIHRoYXQgZHVyaW5nIHJlbG9jYXRpb24KQEAgLTc5NSw3ICs3ODQsNyBAQAogICogYW5kIGRlYWxsb2NhdGUgdGhlIGxvZyBhcyB0aGUgYWlsZCByZWZlcmVuY2VzIHRoZSBsb2cuCiAgKi8KIHZvaWQKLXhmc19sb2dfdW5tb3VudF9kZWFsbG9jKHhmc19tb3VudF90ICptcCkKK3hmc19sb2dfdW5tb3VudCh4ZnNfbW91bnRfdCAqbXApCiB7CiAJeGZzX3RyYW5zX2FpbF9kZXN0cm95KG1wKTsKIAl4bG9nX2RlYWxsb2NfbG9nKG1wLT5tX2xvZyk7CkBAIC0xMTA5LDcgKzEwOTgsNyBAQAogLyoKICAqIFJldHVybiBzaXplIG9mIGVhY2ggaW4tY29yZSBsb2cgcmVjb3JkIGJ1ZmZlci4KICAqCi0gKiBBbGwgbWFjaGluZXMgZ2V0IDggeCAzMktCIGJ1ZmZlcnMgYnkgZGVmYXVsdCwgdW5sZXNzIHR1bmVkIG90aGVyd2lzZS4KKyAqIEFsbCBtYWNoaW5lcyBnZXQgOCB4IDMya0IgYnVmZmVycyBieSBkZWZhdWx0LCB1bmxlc3MgdHVuZWQgb3RoZXJ3aXNlLgogICoKICAqIElmIHRoZSBmaWxlc3lzdGVtIGJsb2Nrc2l6ZSBpcyB0b28gbGFyZ2UsIHdlIG1heSBuZWVkIHRvIGNob29zZSBhCiAgKiBsYXJnZXIgc2l6ZSBzaW5jZSB0aGUgZGlyZWN0b3J5IGNvZGUgY3VycmVudGx5IGxvZ3MgZW50aXJlIGJsb2Nrcy4KQEAgLTExMzksOCArMTEyOCw4IEBACiAJCX0KIAogCQlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbG9ndjIoJm1wLT5tX3NiKSkgewotCQkJLyogIyBoZWFkZXJzID0gc2l6ZSAvIDMySwotCQkJICogb25lIGhlYWRlciBob2xkcyBjeWNsZXMgZnJvbSAzMksgb2YgZGF0YQorCQkJLyogIyBoZWFkZXJzID0gc2l6ZSAvIDMyaworCQkJICogb25lIGhlYWRlciBob2xkcyBjeWNsZXMgZnJvbSAzMmsgb2YgZGF0YQogCQkJICovCiAKIAkJCXhoZHJzID0gbXAtPm1fbG9nYnNpemUgLyBYTE9HX0hFQURFUl9DWUNMRV9TSVpFOwpAQCAtMTE1Niw3ICsxMTQ1LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAotCS8qIEFsbCBtYWNoaW5lcyB1c2UgMzJLQiBidWZmZXJzIGJ5IGRlZmF1bHQuICovCisJLyogQWxsIG1hY2hpbmVzIHVzZSAzMmtCIGJ1ZmZlcnMgYnkgZGVmYXVsdC4gKi8KIAlsb2ctPmxfaWNsb2dfc2l6ZSA9IFhMT0dfQklHX1JFQ09SRF9CU0laRTsKIAlsb2ctPmxfaWNsb2dfc2l6ZV9sb2cgPSBYTE9HX0JJR19SRUNPUkRfQlNISUZUOwogCkBAIC0xMTY0LDMyICsxMTUzLDggQEAKIAlsb2ctPmxfaWNsb2dfaHNpemUgPSBCQlNJWkU7CiAJbG9nLT5sX2ljbG9nX2hlYWRzID0gMTsKIAotCS8qCi0JICogRm9yIDE2S0IsIHdlIHVzZSAzIDMyS0IgYnVmZmVycy4gIEZvciAzMktCIGJsb2NrIHNpemVzLCB3ZSB1c2UKLQkgKiA0IDMyS0IgYnVmZmVycy4gIEZvciA2NEtCIGJsb2NrIHNpemVzLCB3ZSB1c2UgOCAzMktCIGJ1ZmZlcnMuCi0JICovCi0JaWYgKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSA+PSAxNioxMDI0KSB7Ci0JCWxvZy0+bF9pY2xvZ19zaXplID0gWExPR19CSUdfUkVDT1JEX0JTSVpFOwotCQlsb2ctPmxfaWNsb2dfc2l6ZV9sb2cgPSBYTE9HX0JJR19SRUNPUkRfQlNISUZUOwotCQlpZiAobXAtPm1fbG9nYnVmcyA8PSAwKSB7Ci0JCQlzd2l0Y2ggKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSkgewotCQkJICAgIGNhc2UgMTYqMTAyNDoJCQkvKiAxNiBLQiAqLwotCQkJCWxvZy0+bF9pY2xvZ19idWZzID0gMzsKLQkJCQlicmVhazsKLQkJCSAgICBjYXNlIDMyKjEwMjQ6CQkJLyogMzIgS0IgKi8KLQkJCQlsb2ctPmxfaWNsb2dfYnVmcyA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgY2FzZSA2NCoxMDI0OgkJCS8qIDY0IEtCICovCi0JCQkJbG9nLT5sX2ljbG9nX2J1ZnMgPSA4OwotCQkJCWJyZWFrOwotCQkJICAgIGRlZmF1bHQ6Ci0JCQkJeGxvZ19wYW5pYygiWEZTOiBJbnZhbGlkIGJsb2Nrc2l6ZSIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi1kb25lOgkvKiBhcmUgd2UgYmVpbmcgYXNrZWQgdG8gbWFrZSB0aGUgc2l6ZXMgc2VsZWN0ZWQgYWJvdmUgdmlzaWJsZT8gKi8KK2RvbmU6CisJLyogYXJlIHdlIGJlaW5nIGFza2VkIHRvIG1ha2UgdGhlIHNpemVzIHNlbGVjdGVkIGFib3ZlIHZpc2libGU/ICovCiAJaWYgKG1wLT5tX2xvZ2J1ZnMgPT0gMCkKIAkJbXAtPm1fbG9nYnVmcyA9IGxvZy0+bF9pY2xvZ19idWZzOwogCWlmIChtcC0+bV9sb2dic2l6ZSA9PSAwKQpAQCAtMzIxNCw3ICszMTc5LDcgQEAKICAqLwogCiAvKgotICogRnJlZSBhIHVzZWQgdGlja2V0IHdoZW4gaXQncyByZWZjb3VudCBmYWxscyB0byB6ZXJvLgorICogRnJlZSBhIHVzZWQgdGlja2V0IHdoZW4gaXRzIHJlZmNvdW50IGZhbGxzIHRvIHplcm8uCiAgKi8KIHZvaWQKIHhmc19sb2dfdGlja2V0X3B1dCgKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmggYi9mcy94ZnMveGZzX2xvZy5oCmluZGV4IDhhM2U4NGUuLmQwYzliYWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmgKKysrIGIvZnMveGZzL3hmc19sb2cuaApAQCAtMTcwLDkgKzE3MCw4IEBACiAJCQlpbnQJCSBuZW50cmllcywKIAkJCXhmc19sb2dfdGlja2V0X3QgdGlja2V0LAogCQkJeGZzX2xzbl90CSAqc3RhcnRfbHNuKTsKLWludAkgIHhmc19sb2dfdW5tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiBpbnQJICB4ZnNfbG9nX3VubW91bnRfd3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXApOwotdm9pZCAgICAgIHhmc19sb2dfdW5tb3VudF9kZWFsbG9jKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKK3ZvaWQgICAgICB4ZnNfbG9nX3VubW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwogaW50CSAgeGZzX2xvZ19mb3JjZV91bW91bnQoc3RydWN0IHhmc19tb3VudCAqbXAsIGludCBsb2dlcnJvcik7CiBpbnQJICB4ZnNfbG9nX25lZWRfY292ZXJlZChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaCBiL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAppbmRleCA2NTQxNjdiLi5iY2FkNWY0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19wcml2LmgKKysrIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCkBAIC0zNTksNyArMzU5LDcgQEAKIAlpbnQJCQlpY19zaXplOwogCWludAkJCWljX29mZnNldDsKIAlpbnQJCQlpY19id3JpdGVjbnQ7Ci0JdXNob3J0X3QJCWljX3N0YXRlOworCXVuc2lnbmVkIHNob3J0CQlpY19zdGF0ZTsKIAljaGFyCQkJKmljX2RhdGFwOwkvKiBwb2ludGVyIHRvIGljbG9nIGRhdGEgKi8KICNpZmRlZiBYRlNfTE9HX1RSQUNFCiAJc3RydWN0IGt0cmFjZQkJKmljX3RyYWNlOwpAQCAtNDU1LDcgKzQ1NSw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgeGZzX2J1ZiAqeGxvZ19nZXRfYnAoeGxvZ190ICosIGludCk7CiBleHRlcm4gdm9pZAkgeGxvZ19wdXRfYnAoc3RydWN0IHhmc19idWYgKik7Ci1leHRlcm4gaW50CSB4bG9nX2JyZWFkKHhsb2dfdCAqLCB4ZnNfZGFkZHJfdCwgaW50LCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKIAogZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggNjFhZjYxMC4uN2JhNDUwMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtOTQsMTIgKzk0LDMwIEBACiAJeGZzX2J1Zl9mcmVlKGJwKTsKIH0KIAorU1RBVElDIHhmc19jYWRkcl90Cit4bG9nX2FsaWduKAorCXhsb2dfdAkJKmxvZywKKwl4ZnNfZGFkZHJfdAlibGtfbm8sCisJaW50CQluYmJsa3MsCisJeGZzX2J1Zl90CSpicCkKK3sKKwl4ZnNfY2FkZHJfdAlwdHI7CisKKwlpZiAoIWxvZy0+bF9zZWN0YmJfbG9nKQorCQlyZXR1cm4gWEZTX0JVRl9QVFIoYnApOworCisJcHRyID0gWEZTX0JVRl9QVFIoYnApICsgQkJUT0IoKGludClibGtfbm8gJiBsb2ctPmxfc2VjdGJiX21hc2spOworCUFTU0VSVChYRlNfQlVGX1NJWkUoYnApID49CisJCUJCVE9CKG5iYmxrcyArIChibGtfbm8gJiBsb2ctPmxfc2VjdGJiX21hc2spKSk7CisJcmV0dXJuIHB0cjsKK30KKwogCiAvKgogICogbmJibGtzIHNob3VsZCBiZSB1aW50LCBidXQgb2ggd2VsbC4gIEp1c3Qgd2FudCB0byBjYXRjaCB0aGF0IDMyLWJpdCBsZW5ndGguCiAgKi8KLWludAoteGxvZ19icmVhZCgKK1NUQVRJQyBpbnQKK3hsb2dfYnJlYWRfbm9hbGlnbigKIAl4bG9nX3QJCSpsb2csCiAJeGZzX2RhZGRyX3QJYmxrX25vLAogCWludAkJbmJibGtzLApAQCAtMTM3LDYgKzE1NSwyNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorU1RBVElDIGludAoreGxvZ19icmVhZCgKKwl4bG9nX3QJCSpsb2csCisJeGZzX2RhZGRyX3QJYmxrX25vLAorCWludAkJbmJibGtzLAorCXhmc19idWZfdAkqYnAsCisJeGZzX2NhZGRyX3QJKm9mZnNldCkKK3sKKwlpbnQJCWVycm9yOworCisJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCBibGtfbm8sIG5iYmxrcywgYnApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJKm9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sIG5iYmxrcywgYnApOworCXJldHVybiAwOworfQorCiAvKgogICogV3JpdGUgb3V0IHRoZSBidWZmZXIgYXQgdGhlIGdpdmVuIGJsb2NrIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGJsb2Nrcy4KICAqIFRoZSBidWZmZXIgaXMga2VwdCBsb2NrZWQgYWNyb3NzIHRoZSB3cml0ZSBhbmQgaXMgcmV0dXJuZWQgbG9ja2VkLgpAQCAtMTgwLDI0ICsyMTYsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotU1RBVElDIHhmc19jYWRkcl90Ci14bG9nX2FsaWduKAotCXhsb2dfdAkJKmxvZywKLQl4ZnNfZGFkZHJfdAlibGtfbm8sCi0JaW50CQluYmJsa3MsCi0JeGZzX2J1Zl90CSpicCkKLXsKLQl4ZnNfY2FkZHJfdAlwdHI7Ci0KLQlpZiAoIWxvZy0+bF9zZWN0YmJfbG9nKQotCQlyZXR1cm4gWEZTX0JVRl9QVFIoYnApOwotCi0JcHRyID0gWEZTX0JVRl9QVFIoYnApICsgQkJUT0IoKGludClibGtfbm8gJiBsb2ctPmxfc2VjdGJiX21hc2spOwotCUFTU0VSVChYRlNfQlVGX1NJWkUoYnApID49Ci0JCUJCVE9CKG5iYmxrcyArIChibGtfbm8gJiBsb2ctPmxfc2VjdGJiX21hc2spKSk7Ci0JcmV0dXJuIHB0cjsKLX0KLQogI2lmZGVmIERFQlVHCiAvKgogICogZHVtcCBkZWJ1ZyBzdXBlcmJsb2NrIGFuZCBsb2cgcmVjb3JkIGluZm9ybWF0aW9uCkBAIC0yMTEsMTEgKzIyOSwxMSBAQAogCiAJY21uX2VycihDRV9ERUJVRywgIiVzOiAgU0IgOiB1dWlkID0gIiwgX19mdW5jX18pOwogCWZvciAoYiA9IDA7IGIgPCAxNjsgYisrKQotCQljbW5fZXJyKENFX0RFQlVHLCAiJTAyeCIsICgodWNoYXJfdCAqKSZtcC0+bV9zYi5zYl91dWlkKVtiXSk7CisJCWNtbl9lcnIoQ0VfREVCVUcsICIlMDJ4IiwgKChfX3VpbnQ4X3QgKikmbXAtPm1fc2Iuc2JfdXVpZClbYl0pOwogCWNtbl9lcnIoQ0VfREVCVUcsICIsIGZtdCA9ICVkXG4iLCBYTE9HX0ZNVCk7CiAJY21uX2VycihDRV9ERUJVRywgIiAgICBsb2cgOiB1dWlkID0gIik7CiAJZm9yIChiID0gMDsgYiA8IDE2OyBiKyspCi0JCWNtbl9lcnIoQ0VfREVCVUcsICIlMDJ4IiwoKHVjaGFyX3QgKikmaGVhZC0+aF9mc191dWlkKVtiXSk7CisJCWNtbl9lcnIoQ0VfREVCVUcsICIlMDJ4IiwgKChfX3VpbnQ4X3QgKikmaGVhZC0+aF9mc191dWlkKVtiXSk7CiAJY21uX2VycihDRV9ERUJVRywgIiwgZm10ID0gJWRcbiIsIGJlMzJfdG9fY3B1KGhlYWQtPmhfZm10KSk7CiB9CiAjZWxzZQpAQCAtMzIxLDkgKzMzOSw5IEBACiAKIAltaWRfYmxrID0gQkxLX0FWRyhmaXJzdF9ibGssICpsYXN0X2Jsayk7CiAJd2hpbGUgKG1pZF9ibGsgIT0gZmlyc3RfYmxrICYmIG1pZF9ibGsgIT0gKmxhc3RfYmxrKSB7Ci0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgbWlkX2JsaywgMSwgYnApKSkKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgbWlkX2JsaywgMSwgYnAsICZvZmZzZXQpOworCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBtaWRfYmxrLCAxLCBicCk7CiAJCW1pZF9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJCWlmIChtaWRfY3ljbGUgPT0gY3ljbGUpIHsKIAkJCSpsYXN0X2JsayA9IG1pZF9ibGs7CkBAIC0zNzksMTAgKzM5NywxMCBAQAogCiAJCWJjb3VudCA9IG1pbihidWZibGtzLCAoc3RhcnRfYmxrICsgbmJibGtzIC0gaSkpOwogCi0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgYmNvdW50LCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCBiY291bnQsIGJwLCAmYnVmKTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CiAKLQkJYnVmID0geGxvZ19hbGlnbihsb2csIGksIGJjb3VudCwgYnApOwogCQlmb3IgKGogPSAwOyBqIDwgYmNvdW50OyBqKyspIHsKIAkJCWN5Y2xlID0geGxvZ19nZXRfY3ljbGUoYnVmKTsKIAkJCWlmIChjeWNsZSA9PSBzdG9wX29uX2N5Y2xlX25vKSB7CkBAIC00MzYsOSArNDU0LDkgQEAKIAkJCXJldHVybiBFTk9NRU07CiAJCXNtYWxsbWVtID0gMTsKIAl9IGVsc2UgewotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHN0YXJ0X2JsaywgbnVtX2Jsa3MsIGJwKSkpCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIHN0YXJ0X2JsaywgbnVtX2Jsa3MsIGJwLCAmb2Zmc2V0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBzdGFydF9ibGssIG51bV9ibGtzLCBicCk7CiAJCW9mZnNldCArPSAoKG51bV9ibGtzIC0gMSkgPDwgQkJTSElGVCk7CiAJfQogCkBAIC00NTMsOSArNDcxLDkgQEAKIAkJfQogCiAJCWlmIChzbWFsbG1lbSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnAsICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gb3V0OwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGksIDEsIGJwKTsKIAkJfQogCiAJCWhlYWQgPSAoeGxvZ19yZWNfaGVhZGVyX3QgKilvZmZzZXQ7CkBAIC01NTksMTUgKzU3NywxOCBAQAogCWJwID0geGxvZ19nZXRfYnAobG9nLCAxKTsKIAlpZiAoIWJwKQogCQlyZXR1cm4gRU5PTUVNOwotCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwgMSwgYnApKSkKKworCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwLCAmb2Zmc2V0KTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gYnBfZXJyOwotCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLCAxLCBicCk7CisKIAlmaXJzdF9oYWxmX2N5Y2xlID0geGxvZ19nZXRfY3ljbGUob2Zmc2V0KTsKIAogCWxhc3RfYmxrID0gaGVhZF9ibGsgPSBsb2dfYmJudW0gLSAxOwkvKiBnZXQgY3ljbGUgIyBvZiBsYXN0IGJsb2NrICovCi0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsYXN0X2JsaywgMSwgYnApKSkKKwllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsYXN0X2JsaywgMSwgYnAsICZvZmZzZXQpOworCWlmIChlcnJvcikKIAkJZ290byBicF9lcnI7Ci0Jb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGxhc3RfYmxrLCAxLCBicCk7CisKIAlsYXN0X2hhbGZfY3ljbGUgPSB4bG9nX2dldF9jeWNsZShvZmZzZXQpOwogCUFTU0VSVChsYXN0X2hhbGZfY3ljbGUgIT0gMCk7CiAKQEAgLTgxNyw5ICs4MzgsMTAgQEAKIAlpZiAoIWJwKQogCQlyZXR1cm4gRU5PTUVNOwogCWlmICgqaGVhZF9ibGsgPT0gMCkgewkJCQkvKiBzcGVjaWFsIGNhc2UgKi8KLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyOwotCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgMCwgMSwgYnApOworCiAJCWlmICh4bG9nX2dldF9jeWNsZShvZmZzZXQpID09IDApIHsKIAkJCSp0YWlsX2JsayA9IDA7CiAJCQkvKiBsZWF2ZSBhbGwgb3RoZXIgbG9nIGluaXRlZCB2YWx1ZXMgYWxvbmUgKi8KQEAgLTgzMiw5ICs4NTQsMTAgQEAKIAkgKi8KIAlBU1NFUlQoKmhlYWRfYmxrIDwgSU5UX01BWCk7CiAJZm9yIChpID0gKGludCkoKmhlYWRfYmxrKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnApKSkKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnAsICZvZmZzZXQpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGJyZWFkX2VycjsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGksIDEsIGJwKTsKKwogCQlpZiAoWExPR19IRUFERVJfTUFHSUNfTlVNID09IGJlMzJfdG9fY3B1KCooX19iZTMyICopb2Zmc2V0KSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CkBAIC04NDgsOSArODcxLDEwIEBACiAJICovCiAJaWYgKCFmb3VuZCkgewogCQlmb3IgKGkgPSBsb2ctPmxfbG9nQkJzaXplIC0gMTsgaSA+PSAoaW50KSgqaGVhZF9ibGspOyBpLS0pIHsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnApKSkKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGksIDEsIGJwLCAmb2Zmc2V0KTsKKwkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjsKLQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBpLCAxLCBicCk7CisKIAkJCWlmIChYTE9HX0hFQURFUl9NQUdJQ19OVU0gPT0KIAkJCSAgICBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKW9mZnNldCkpIHsKIAkJCQlmb3VuZCA9IDI7CkBAIC05MjIsMTAgKzk0NiwxMCBAQAogCWlmICgqaGVhZF9ibGsgPT0gYWZ0ZXJfdW1vdW50X2JsayAmJgogCSAgICBiZTMyX3RvX2NwdShyaGVhZC0+aF9udW1fbG9nb3BzKSA9PSAxKSB7CiAJCXVtb3VudF9kYXRhX2JsayA9IChpICsgaGJsa3MpICUgbG9nLT5sX2xvZ0JCc2l6ZTsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCB1bW91bnRfZGF0YV9ibGssIDEsIGJwKSkpIHsKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgdW1vdW50X2RhdGFfYmxrLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyOwotCQl9Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCB1bW91bnRfZGF0YV9ibGssIDEsIGJwKTsKKwogCQlvcF9oZWFkID0gKHhsb2dfb3BfaGVhZGVyX3QgKilvZmZzZXQ7CiAJCWlmIChvcF9oZWFkLT5vaF9mbGFncyAmIFhMT0dfVU5NT1VOVF9UUkFOUykgewogCQkJLyoKQEAgLTEwMTcsOSArMTA0MSwxMCBAQAogCWJwID0geGxvZ19nZXRfYnAobG9nLCAxKTsKIAlpZiAoIWJwKQogCQlyZXR1cm4gRU5PTUVNOwotCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwgMSwgYnApKSkKKwllcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCwgJm9mZnNldCk7CisJaWYgKGVycm9yKQogCQlnb3RvIGJwX2VycjsKLQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgMCwgMSwgYnApOworCiAJZmlyc3RfY3ljbGUgPSB4bG9nX2dldF9jeWNsZShvZmZzZXQpOwogCWlmIChmaXJzdF9jeWNsZSA9PSAwKSB7CQkvKiBjb21wbGV0ZWx5IHplcm9lZCBsb2cgKi8KIAkJKmJsa19ubyA9IDA7CkBAIC0xMDI4LDkgKzEwNTMsMTAgQEAKIAl9CiAKIAkvKiBjaGVjayBwYXJ0aWFsbHkgemVyb2VkIGxvZyAqLwotCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgbG9nX2JibnVtLTEsIDEsIGJwKSkpCisJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgbG9nX2JibnVtLTEsIDEsIGJwLCAmb2Zmc2V0KTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gYnBfZXJyOwotCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBsb2dfYmJudW0tMSwgMSwgYnApOworCiAJbGFzdF9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJaWYgKGxhc3RfY3ljbGUgIT0gMCkgewkJLyogbG9nIGNvbXBsZXRlbHkgd3JpdHRlbiB0byAqLwogCQl4bG9nX3B1dF9icChicCk7CkBAIC0xMTUyLDEwICsxMTc4LDEwIEBACiAJICovCiAJYmFsaWduID0gWExPR19TRUNUT1JfUk9VTkRET1dOX0JMS05PKGxvZywgc3RhcnRfYmxvY2spOwogCWlmIChiYWxpZ24gIT0gc3RhcnRfYmxvY2spIHsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBzdGFydF9ibG9jaywgMSwgYnApKSkgewotCQkJeGxvZ19wdXRfYnAoYnApOwotCQkJcmV0dXJuIGVycm9yOwotCQl9CisJCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgc3RhcnRfYmxvY2ssIDEsIGJwKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfcHV0X2JwOworCiAJCWogPSBzdGFydF9ibG9jayAtIGJhbGlnbjsKIAl9CiAKQEAgLTExNzUsMTAgKzEyMDEsMTQgQEAKIAkJCWJhbGlnbiA9IEJCVE9CKGVhbGlnbiAtIHN0YXJ0X2Jsb2NrKTsKIAkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGJwLCBvZmZzZXQgKyBiYWxpZ24sCiAJCQkJCQlCQlRPQihzZWN0YmIpKTsKLQkJCWlmICghZXJyb3IpCi0JCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgZWFsaWduLCBzZWN0YmIsIGJwKTsKLQkJCWlmICghZXJyb3IpCi0JCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoYnAsIG9mZnNldCwgYnVmYmxrcyk7CisJCQlpZiAoZXJyb3IpCisJCQkJYnJlYWs7CisKKwkJCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgZWFsaWduLCBzZWN0YmIsIGJwKTsKKwkJCWlmIChlcnJvcikKKwkJCQlicmVhazsKKworCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoYnAsIG9mZnNldCwgYnVmYmxrcyk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTExOTUsNiArMTIyNSw4IEBACiAJCXN0YXJ0X2Jsb2NrICs9IGVuZGNvdW50OwogCQlqID0gMDsKIAl9CisKKyBvdXRfcHV0X2JwOgogCXhsb2dfcHV0X2JwKGJwKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yNTExLDE2ICsyNTQzLDEwIEBACiAJfQogCiB3cml0ZV9pbm9kZV9idWZmZXI6Ci0JaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfSU5PREUpIHsKLQkJQVNTRVJUKGJwLT5iX21vdW50ID09IE5VTEwgfHwgYnAtPmJfbW91bnQgPT0gbXApOwotCQlicC0+Yl9tb3VudCA9IG1wOwotCQlYRlNfQlVGX1NFVF9JT0RPTkVfRlVOQyhicCwgeGxvZ19yZWNvdmVyX2lvZG9uZSk7Ci0JCXhmc19iZHdyaXRlKG1wLCBicCk7Ci0JfSBlbHNlIHsKLQkJWEZTX0JVRl9TVEFMRShicCk7Ci0JCWVycm9yID0geGZzX2J3cml0ZShtcCwgYnApOwotCX0KLQorCUFTU0VSVChicC0+Yl9tb3VudCA9PSBOVUxMIHx8IGJwLT5iX21vdW50ID09IG1wKTsKKwlicC0+Yl9tb3VudCA9IG1wOworCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX3JlY292ZXJfaW9kb25lKTsKKwl4ZnNfYmR3cml0ZShtcCwgYnApOwogZXJyb3I6CiAJaWYgKG5lZWRfZnJlZSkKIAkJa21lbV9mcmVlKGluX2YpOwpAQCAtMjc2OSw1MSArMjc5NSw0OCBAQAogCWludAkJCWVycm9yID0gMDsKIAl4bG9nX3JlY292ZXJfaXRlbV90CSppdGVtLCAqZmlyc3RfaXRlbTsKIAotCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucykpKQorCWVycm9yID0geGxvZ19yZWNvdmVyX3Jlb3JkZXJfdHJhbnModHJhbnMpOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCiAJZmlyc3RfaXRlbSA9IGl0ZW0gPSB0cmFucy0+cl9pdGVtcTsKIAlkbyB7Ci0JCS8qCi0JCSAqIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGJsb2NrIG51bWJlciBiZWluZwotCQkgKiB0cnVuY2F0ZWQgaW4gPiAxIFRCIGJ1ZmZlcnMgYmVjYXVzZSBpbiB1c2VyLWxhbmQsCi0JCSAqIHdlJ3JlIG5vdyBuMzIgb3IgNjQtYml0IHNvIHhmc19kYWRkcl90IGlzIDY0LWJpdHMgc28KLQkJICogdGhlIGJsa25vcyB3aWxsIGdldCB0aHJvdWdoIHRoZSB1c2VyLW1vZGUgYnVmZmVyCi0JCSAqIGNhY2hlIHByb3Blcmx5LiAgVGhlIG9ubHkgYmFkIGNhc2UgaXMgbzMyIGtlcm5lbHMKLQkJICogd2hlcmUgeGZzX2RhZGRyX3QgaXMgMzItYml0cyBidXQgbW91bnQgd2lsbCB3YXJuIHVzCi0JCSAqIG9mZiBhID4gMSBUQiBmaWxlc3lzdGVtIGJlZm9yZSB3ZSBnZXQgaGVyZS4KLQkJICovCi0JCWlmICgoSVRFTV9UWVBFKGl0ZW0pID09IFhGU19MSV9CVUYpKSB7Ci0JCQlpZiAgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19idWZmZXJfdHJhbnMobG9nLCBpdGVtLAotCQkJCQkJCQkgcGFzcykpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX0lOT0RFKSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19pbm9kZV90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCXBhc3MpKSkKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX0VGSSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19lZmlfdHJhbnMobG9nLCBpdGVtLCB0cmFucy0+cl9sc24sCi0JCQkJCQkgIHBhc3MpKSkKLQkJCQlicmVhazsKLQkJfSBlbHNlIGlmIChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX0VGRCkgeworCQlzd2l0Y2ggKElURU1fVFlQRShpdGVtKSkgeworCQljYXNlIFhGU19MSV9CVUY6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19idWZmZXJfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9JTk9ERToKKwkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfTElfRUZJOgorCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fZWZpX3RyYW5zKGxvZywgaXRlbSwKKwkJCQkJCQkgIHRyYW5zLT5yX2xzbiwgcGFzcyk7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfTElfRUZEOgogCQkJeGxvZ19yZWNvdmVyX2RvX2VmZF90cmFucyhsb2csIGl0ZW0sIHBhc3MpOwotCQl9IGVsc2UgaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfRFFVT1QpIHsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fZHF1b3RfdHJhbnMobG9nLCBpdGVtLAotCQkJCQkJCQkgICBwYXNzKSkpCi0JCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX1FVT1RBT0ZGKSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19xdW90YW9mZl90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCSAgIHBhc3MpKSkKLQkJCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQl4bG9nX3dhcm4oIlhGUzogeGxvZ19yZWNvdmVyX2RvX3RyYW5zIik7CisJCQllcnJvciA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfTElfRFFVT1Q6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19kcXVvdF90cmFucyhsb2csIGl0ZW0sIHBhc3MpOworCQkJYnJlYWs7CisJCWNhc2UgWEZTX0xJX1FVT1RBT0ZGOgorCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9fcXVvdGFvZmZfdHJhbnMobG9nLCBpdGVtLAorCQkJCQkJCSAgICAgICBwYXNzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJeGxvZ193YXJuKAorCSJYRlM6IGludmFsaWQgaXRlbSB0eXBlICglZCkgeGxvZ19yZWNvdmVyX2RvX3RyYW5zIiwgSVRFTV9UWVBFKGl0ZW0pKTsKIAkJCUFTU0VSVCgwKTsKIAkJCWVycm9yID0gWEZTX0VSUk9SKEVJTyk7CiAJCQlicmVhazsKIAkJfQorCisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAkJaXRlbSA9IGl0ZW0tPnJpX25leHQ7CiAJfSB3aGlsZSAoZmlyc3RfaXRlbSAhPSBpdGVtKTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM0OTAsOSArMzUxMywxMSBAQAogCQloYnAgPSB4bG9nX2dldF9icChsb2csIDEpOwogCQlpZiAoIWhicCkKIAkJCXJldHVybiBFTk9NRU07Ci0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgdGFpbF9ibGssIDEsIGhicCkpKQorCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIHRhaWxfYmxrLCAxLCBoYnAsICZvZmZzZXQpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGJyZWFkX2VycjE7Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCB0YWlsX2JsaywgMSwgaGJwKTsKKwogCQlyaGVhZCA9ICh4bG9nX3JlY19oZWFkZXJfdCAqKW9mZnNldDsKIAkJZXJyb3IgPSB4bG9nX3ZhbGlkX3JlY19oZWFkZXIobG9nLCByaGVhZCwgdGFpbF9ibGspOwogCQlpZiAoZXJyb3IpCkBAIC0zNTI2LDkgKzM1NTEsMTAgQEAKIAltZW1zZXQocmhhc2gsIDAsIHNpemVvZihyaGFzaCkpOwogCWlmICh0YWlsX2JsayA8PSBoZWFkX2JsaykgewogCQlmb3IgKGJsa19ubyA9IHRhaWxfYmxrOyBibGtfbm8gPCBoZWFkX2JsazsgKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgaGJsa3MsIGhicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwLCAmb2Zmc2V0KTsKKwkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKKwogCQkJcmhlYWQgPSAoeGxvZ19yZWNfaGVhZGVyX3QgKilvZmZzZXQ7CiAJCQllcnJvciA9IHhsb2dfdmFsaWRfcmVjX2hlYWRlcihsb2csIHJoZWFkLCBibGtfbm8pOwogCQkJaWYgKGVycm9yKQpAQCAtMzUzNiwxMCArMzU2MiwxMSBAQAogCiAJCQkvKiBibG9ja3MgaW4gZGF0YSBzZWN0aW9uICovCiAJCQliYmxrcyA9IChpbnQpQlRPQkIoYmUzMl90b19jcHUocmhlYWQtPmhfbGVuKSk7Ci0JCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8gKyBoYmxrcywgYmJsa3MsIGRicCk7CisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8gKyBoYmxrcywgYmJsa3MsIGRicCwKKwkJCQkJICAgJm9mZnNldCk7CiAJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBicmVhZF9lcnIyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubyArIGhibGtzLCBiYmxrcywgZGJwKTsKKwogCQkJeGxvZ191bnBhY2tfZGF0YShyaGVhZCwgb2Zmc2V0LCBsb2cpOwogCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9wcm9jZXNzX2RhdGEobG9nLAogCQkJCQkJcmhhc2gsIHJoZWFkLCBvZmZzZXQsIHBhc3MpKSkKQEAgLTM1NjIsMTAgKzM1ODksMTAgQEAKIAkJCXdyYXBwZWRfaGJsa3MgPSAwOwogCQkJaWYgKGJsa19ubyArIGhibGtzIDw9IGxvZy0+bF9sb2dCQnNpemUpIHsKIAkJCQkvKiBSZWFkIGhlYWRlciBpbiBvbmUgcmVhZCAqLwotCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgaGJsa3MsIGhicCk7CisJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwLAorCQkJCQkJICAgJm9mZnNldCk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgaGJsa3MsIGhicCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFRoaXMgTFIgaXMgc3BsaXQgYWNyb3NzIHBoeXNpY2FsIGxvZyBlbmQgKi8KIAkJCQlpZiAoYmxrX25vICE9IGxvZy0+bF9sb2dCQnNpemUpIHsKQEAgLTM1NzMsMTIgKzM2MDAsMTMgQEAKIAkJCQkJQVNTRVJUKGJsa19ubyA8PSBJTlRfTUFYKTsKIAkJCQkJc3BsaXRfaGJsa3MgPSBsb2ctPmxfbG9nQkJzaXplIC0gKGludClibGtfbm87CiAJCQkJCUFTU0VSVChzcGxpdF9oYmxrcyA+IDApOwotCQkJCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKLQkJCQkJCQlzcGxpdF9oYmxrcywgaGJwKSkpCisJCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKKwkJCQkJCQkgICBzcGxpdF9oYmxrcywgaGJwLAorCQkJCQkJCSAgICZvZmZzZXQpOworCQkJCQlpZiAoZXJyb3IpCiAJCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sCi0JCQkJCQkJc3BsaXRfaGJsa3MsIGhicCk7CiAJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBOb3RlOiB0aGlzIGJsYWNrIG1hZ2ljIHN0aWxsIHdvcmtzIHdpdGgKIAkJCQkgKiBsYXJnZSBzZWN0b3Igc2l6ZXMgKG5vbi01MTIpIG9ubHkgYmVjYXVzZToKQEAgLTM1OTYsMTQgKzM2MjQsMTkgQEAKIAkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihoYnAsCiAJCQkJCQlidWZhZGRyICsgQkJUT0Ioc3BsaXRfaGJsa3MpLAogCQkJCQkJQkJUT0IoaGJsa3MgLSBzcGxpdF9oYmxrcykpOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsCi0JCQkJCQkJd3JhcHBlZF9oYmxrcywgaGJwKTsKLQkJCQlpZiAoIWVycm9yKQotCQkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihoYnAsIGJ1ZmFkZHIsCisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKKwkJCQllcnJvciA9IHhsb2dfYnJlYWRfbm9hbGlnbihsb2csIDAsCisJCQkJCQkJICAgd3JhcHBlZF9oYmxrcywgaGJwKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCWdvdG8gYnJlYWRfZXJyMjsKKworCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwgYnVmYWRkciwKIAkJCQkJCQlCQlRPQihoYmxrcykpOwogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBicmVhZF9lcnIyOworCiAJCQkJaWYgKCFvZmZzZXQpCiAJCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLAogCQkJCQkJCXdyYXBwZWRfaGJsa3MsIGhicCk7CkBAIC0zNjE5LDEwICszNjUyLDEwIEBACiAKIAkJCS8qIFJlYWQgaW4gZGF0YSBmb3IgbG9nIHJlY29yZCAqLwogCQkJaWYgKGJsa19ubyArIGJibGtzIDw9IGxvZy0+bF9sb2dCQnNpemUpIHsKLQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGJibGtzLCBkYnApOworCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgYmJsa3MsIGRicCwKKwkJCQkJCSAgICZvZmZzZXQpOwogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBicmVhZF9lcnIyOwotCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sIGJibGtzLCBkYnApOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBUaGlzIGxvZyByZWNvcmQgaXMgc3BsaXQgYWNyb3NzIHRoZQogCQkJCSAqIHBoeXNpY2FsIGVuZCBvZiBsb2cgKi8KQEAgLTM2MzYsMTIgKzM2NjksMTMgQEAKIAkJCQkJc3BsaXRfYmJsa3MgPQogCQkJCQkJbG9nLT5sX2xvZ0JCc2l6ZSAtIChpbnQpYmxrX25vOwogCQkJCQlBU1NFUlQoc3BsaXRfYmJsa3MgPiAwKTsKLQkJCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sCi0JCQkJCQkJc3BsaXRfYmJsa3MsIGRicCkpKQorCQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sCisJCQkJCQkJc3BsaXRfYmJsa3MsIGRicCwKKwkJCQkJCQkmb2Zmc2V0KTsKKwkJCQkJaWYgKGVycm9yKQogCQkJCQkJZ290byBicmVhZF9lcnIyOwotCQkJCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLAotCQkJCQkJCXNwbGl0X2JibGtzLCBkYnApOwogCQkJCX0KKwogCQkJCS8qCiAJCQkJICogTm90ZTogdGhpcyBibGFjayBtYWdpYyBzdGlsbCB3b3JrcyB3aXRoCiAJCQkJICogbGFyZ2Ugc2VjdG9yIHNpemVzIChub24tNTEyKSBvbmx5IGJlY2F1c2U6CkBAIC0zNjU4LDE1ICszNjkyLDE5IEBACiAJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoZGJwLAogCQkJCQkJYnVmYWRkciArIEJCVE9CKHNwbGl0X2JibGtzKSwKIAkJCQkJCUJCVE9CKGJibGtzIC0gc3BsaXRfYmJsa3MpKTsKLQkJCQlpZiAoIWVycm9yKQotCQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCB3cmFwcGVkX2hibGtzLAotCQkJCQkJCWJibGtzIC0gc3BsaXRfYmJsa3MsCi0JCQkJCQkJZGJwKTsKLQkJCQlpZiAoIWVycm9yKQotCQkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsIGJ1ZmFkZHIsCi0JCQkJCQkJaF9zaXplKTsKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gYnJlYWRfZXJyMjsKKworCQkJCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgd3JhcHBlZF9oYmxrcywKKwkJCQkJCWJibGtzIC0gc3BsaXRfYmJsa3MsCisJCQkJCQlkYnApOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBicmVhZF9lcnIyOworCisJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoZGJwLCBidWZhZGRyLCBoX3NpemUpOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBicmVhZF9lcnIyOworCiAJCQkJaWYgKCFvZmZzZXQpCiAJCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCB3cmFwcGVkX2hibGtzLAogCQkJCQkJYmJsa3MgLSBzcGxpdF9iYmxrcywgZGJwKTsKQEAgLTM2ODMsMTcgKzM3MjEsMjEgQEAKIAogCQkvKiByZWFkIGZpcnN0IHBhcnQgb2YgcGh5c2ljYWwgbG9nICovCiAJCXdoaWxlIChibGtfbm8gPCBoZWFkX2JsaykgewotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGhibGtzLCBoYnApKSkKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgaGJsa3MsIGhicCwgJm9mZnNldCk7CisJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBicmVhZF9lcnIyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgaGJsa3MsIGhicCk7CisKIAkJCXJoZWFkID0gKHhsb2dfcmVjX2hlYWRlcl90ICopb2Zmc2V0OwogCQkJZXJyb3IgPSB4bG9nX3ZhbGlkX3JlY19oZWFkZXIobG9nLCByaGVhZCwgYmxrX25vKTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7CisKIAkJCWJibGtzID0gKGludClCVE9CQihiZTMyX3RvX2NwdShyaGVhZC0+aF9sZW4pKTsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vK2hibGtzLCBiYmxrcywgZGJwKSkpCisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8raGJsa3MsIGJibGtzLCBkYnAsCisJCQkJCSAgICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8raGJsa3MsIGJibGtzLCBkYnApOworCiAJCQl4bG9nX3VucGFja19kYXRhKHJoZWFkLCBvZmZzZXQsIGxvZyk7CiAJCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YShsb2csIHJoYXNoLAogCQkJCQkJCXJoZWFkLCBvZmZzZXQsIHBhc3MpKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCAzNTMwMDI1Li5iMTAxOTkwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAieGZzX2Zzb3BzLmgiCiAjaW5jbHVkZSAieGZzX3V0aWxzLmgiCiAKLVNUQVRJQyBpbnQJeGZzX3V1aWRfbW91bnQoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgdm9pZAl4ZnNfdW5tb3VudGZzX3dhaXQoeGZzX21vdW50X3QgKik7CiAKIApAQCAtMTIxLDYgKzEyMCw4NCBAQAogICAgIHsgc2l6ZW9mKHhmc19zYl90KSwJCQkgMCB9CiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKHhmc191dWlkX3RhYmxlX211dGV4KTsKK3N0YXRpYyBpbnQgeGZzX3V1aWRfdGFibGVfc2l6ZTsKK3N0YXRpYyB1dWlkX3QgKnhmc191dWlkX3RhYmxlOworCisvKgorICogU2VlIGlmIHRoZSBVVUlEIGlzIHVuaXF1ZSBhbW9uZyBtb3VudGVkIFhGUyBmaWxlc3lzdGVtcy4KKyAqIE1vdW50IGZhaWxzIGlmIFVVSUQgaXMgbmlsIG9yIGEgRlMgd2l0aCB0aGUgc2FtZSBVVUlEIGlzIGFscmVhZHkgbW91bnRlZC4KKyAqLworU1RBVElDIGludAoreGZzX3V1aWRfbW91bnQoCisJc3RydWN0IHhmc19tb3VudAkqbXApCit7CisJdXVpZF90CQkJKnV1aWQgPSAmbXAtPm1fc2Iuc2JfdXVpZDsKKwlpbnQJCQlob2xlLCBpOworCisJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX05PVVVJRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodXVpZF9pc19uaWwodXVpZCkpIHsKKwkJY21uX2VycihDRV9XQVJOLAorCQkJIlhGUzogRmlsZXN5c3RlbSAlcyBoYXMgbmlsIFVVSUQgLSBjYW4ndCBtb3VudCIsCisJCQltcC0+bV9mc25hbWUpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CisJfQorCisJbXV0ZXhfbG9jaygmeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworCWZvciAoaSA9IDAsIGhvbGUgPSAtMTsgaSA8IHhmc191dWlkX3RhYmxlX3NpemU7IGkrKykgeworCQlpZiAodXVpZF9pc19uaWwoJnhmc191dWlkX3RhYmxlW2ldKSkgeworCQkJaG9sZSA9IGk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodXVpZF9lcXVhbCh1dWlkLCAmeGZzX3V1aWRfdGFibGVbaV0pKQorCQkJZ290byBvdXRfZHVwbGljYXRlOworCX0KKworCWlmIChob2xlIDwgMCkgeworCQl4ZnNfdXVpZF90YWJsZSA9IGttZW1fcmVhbGxvYyh4ZnNfdXVpZF90YWJsZSwKKwkJCSh4ZnNfdXVpZF90YWJsZV9zaXplICsgMSkgKiBzaXplb2YoKnhmc191dWlkX3RhYmxlKSwKKwkJCXhmc191dWlkX3RhYmxlX3NpemUgICogc2l6ZW9mKCp4ZnNfdXVpZF90YWJsZSksCisJCQlLTV9TTEVFUCk7CisJCWhvbGUgPSB4ZnNfdXVpZF90YWJsZV9zaXplKys7CisJfQorCXhmc191dWlkX3RhYmxlW2hvbGVdID0gKnV1aWQ7CisJbXV0ZXhfdW5sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworIG91dF9kdXBsaWNhdGU6CisJbXV0ZXhfdW5sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisJY21uX2VycihDRV9XQVJOLCAiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBkdXBsaWNhdGUgVVVJRCAtIGNhbid0IG1vdW50IiwKKwkJCSBtcC0+bV9mc25hbWUpOworCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKK30KKworU1RBVElDIHZvaWQKK3hmc191dWlkX3VubW91bnQoCisJc3RydWN0IHhmc19tb3VudAkqbXApCit7CisJdXVpZF90CQkJKnV1aWQgPSAmbXAtPm1fc2Iuc2JfdXVpZDsKKwlpbnQJCQlpOworCisJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX05PVVVJRCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCB4ZnNfdXVpZF90YWJsZV9zaXplOyBpKyspIHsKKwkJaWYgKHV1aWRfaXNfbmlsKCZ4ZnNfdXVpZF90YWJsZVtpXSkpCisJCQljb250aW51ZTsKKwkJaWYgKCF1dWlkX2VxdWFsKHV1aWQsICZ4ZnNfdXVpZF90YWJsZVtpXSkpCisJCQljb250aW51ZTsKKwkJbWVtc2V0KCZ4ZnNfdXVpZF90YWJsZVtpXSwgMCwgc2l6ZW9mKHV1aWRfdCkpOworCQlicmVhazsKKwl9CisJQVNTRVJUKGkgPCB4ZnNfdXVpZF90YWJsZV9zaXplKTsKKwltdXRleF91bmxvY2soJnhmc191dWlkX3RhYmxlX211dGV4KTsKK30KKworCiAvKgogICogRnJlZSB1cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIG1vdW50IHN0cnVjdHVyZS4gIEFzc3VtZSB0aGF0CiAgKiB0aGUgc3RydWN0dXJlIHdhcyBpbml0aWFsbHkgemVyb2VkLCBzbyB3ZSBjYW4gdGVsbCB3aGljaCBmaWVsZHMgZ290CkBAIC0yNTYsNiArMzMzLDIyIEBACiAJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKIAl9CiAKKwkvKgorCSAqIEN1cnJlbnRseSBvbmx5IHZlcnkgZmV3IGlub2RlIHNpemVzIGFyZSBzdXBwb3J0ZWQuCisJICovCisJc3dpdGNoIChzYnAtPnNiX2lub2Rlc2l6ZSkgeworCWNhc2UgMjU2OgorCWNhc2UgNTEyOgorCWNhc2UgMTAyNDoKKwljYXNlIDIwNDg6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXhmc19mc19tb3VudF9jbW5fZXJyKGZsYWdzLAorCQkJImlub2RlIHNpemUgb2YgJWQgYnl0ZXMgbm90IHN1cHBvcnRlZCIsCisJCQlzYnAtPnNiX2lub2Rlc2l6ZSk7CisJCXJldHVybiBYRlNfRVJST1IoRU5PU1lTKTsKKwl9CisKIAlpZiAoeGZzX3NiX3ZhbGlkYXRlX2ZzYl9jb3VudChzYnAsIHNicC0+c2JfZGJsb2NrcykgfHwKIAkgICAgeGZzX3NiX3ZhbGlkYXRlX2ZzYl9jb3VudChzYnAsIHNicC0+c2JfcmJsb2NrcykpIHsKIAkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCkBAIC01NzQsMzIgKzY2NywxMCBAQAogCW1wLT5tX3NlY3RiYl9sb2cgPSBzYnAtPnNiX3NlY3Rsb2cgLSBCQlNISUZUOwogCW1wLT5tX2Fnbm9fbG9nID0geGZzX2hpZ2hiaXQzMihzYnAtPnNiX2FnY291bnQgLSAxKSArIDE7CiAJbXAtPm1fYWdpbm9fbG9nID0gc2JwLT5zYl9pbm9wYmxvZyArIHNicC0+c2JfYWdibGtsb2c7Ci0JbXAtPm1fbGl0aW5vID0gc2JwLT5zYl9pbm9kZXNpemUgLSBzaXplb2Yoc3RydWN0IHhmc19kaW5vZGUpOwogCW1wLT5tX2Jsb2NrbWFzayA9IHNicC0+c2JfYmxvY2tzaXplIC0gMTsKIAltcC0+bV9ibG9ja3dzaXplID0gc2JwLT5zYl9ibG9ja3NpemUgPj4gWEZTX1dPUkRMT0c7CiAJbXAtPm1fYmxvY2t3bWFzayA9IG1wLT5tX2Jsb2Nrd3NpemUgLSAxOwogCi0JLyoKLQkgKiBTZXR1cCBmb3IgYXR0cmlidXRlcywgaW4gY2FzZSB0aGV5IGdldCBjcmVhdGVkLgotCSAqIFRoaXMgdmFsdWUgaXMgZm9yIGlub2RlcyBnZXR0aW5nIGF0dHJpYnV0ZXMgZm9yIHRoZSBmaXJzdCB0aW1lLAotCSAqIHRoZSBwZXItaW5vZGUgdmFsdWUgaXMgZm9yIG9sZCBhdHRyaWJ1dGUgdmFsdWVzLgotCSAqLwotCUFTU0VSVChzYnAtPnNiX2lub2Rlc2l6ZSA+PSAyNTYgJiYgc2JwLT5zYl9pbm9kZXNpemUgPD0gMjA0OCk7Ci0Jc3dpdGNoIChzYnAtPnNiX2lub2Rlc2l6ZSkgewotCWNhc2UgMjU2OgotCQltcC0+bV9hdHRyb2Zmc2V0ID0gWEZTX0xJVElOTyhtcCkgLQotCQkJCSAgIFhGU19CTURSX1NQQUNFX0NBTEMoTUlOQUJUUFRSUyk7Ci0JCWJyZWFrOwotCWNhc2UgNTEyOgotCWNhc2UgMTAyNDoKLQljYXNlIDIwNDg6Ci0JCW1wLT5tX2F0dHJvZmZzZXQgPSBYRlNfQk1EUl9TUEFDRV9DQUxDKDYgKiBNSU5BQlRQVFJTKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCX0KLQlBU1NFUlQobXAtPm1fYXR0cm9mZnNldCA8IFhGU19MSVRJTk8obXApKTsKLQogCW1wLT5tX2FsbG9jX214clswXSA9IHhmc19hbGxvY2J0X21heHJlY3MobXAsIHNicC0+c2JfYmxvY2tzaXplLCAxKTsKIAltcC0+bV9hbGxvY19teHJbMV0gPSB4ZnNfYWxsb2NidF9tYXhyZWNzKG1wLCBzYnAtPnNiX2Jsb2Nrc2l6ZSwgMCk7CiAJbXAtPm1fYWxsb2NfbW5yWzBdID0gbXAtPm1fYWxsb2NfbXhyWzBdIC8gMjsKQEAgLTY0NSw3ICs3MTYsNyBAQAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFnY291bnQ7IGluZGV4KyspIHsKIAkJLyoKIAkJICogcmVhZCB0aGUgYWdmLCB0aGVuIHRoZSBhZ2kuIFRoaXMgZ2V0cyB1cwotCQkgKiBhbGwgdGhlIGluZm9yYW10aW9uIHdlIG5lZWQgYW5kIHBvcHVsYXRlcyB0aGUKKwkJICogYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGFuZCBwb3B1bGF0ZXMgdGhlCiAJCSAqIHBlci1hZyBzdHJ1Y3R1cmVzIGZvciB1cy4KIAkJICovCiAJCWVycm9yID0geGZzX2FsbG9jX3BhZ2ZfaW5pdChtcCwgTlVMTCwgaW5kZXgsIDApOwpAQCAtODg2LDggKzk1Nyw2IEBACiB9CiAKIC8qCi0gKiB4ZnNfbW91bnRmcwotICoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZm9sbG93aW5nIG9uIGFuIGluaXRpYWwgbW91bnQgb2YgYSBmaWxlIHN5c3RlbToKICAqCS0gcmVhZHMgdGhlIHN1cGVyYmxvY2sgZnJvbSBkaXNrIGFuZCBpbml0IHRoZSBtb3VudCBzdHJ1Y3QKICAqCS0gaWYgd2UncmUgYSAzMi1iaXQga2VybmVsLCBkbyBhIHNpemUgY2hlY2sgb24gdGhlIHN1cGVyYmxvY2sKQEAgLTkwNSw3ICs5NzQsNiBAQAogCXhmc19pbm9kZV90CSpyaXA7CiAJX191aW50NjRfdAlyZXNibGtzOwogCXVpbnQJCXF1b3RhbW91bnQsIHF1b3RhZmxhZ3M7Ci0JaW50CQl1dWlkX21vdW50ZWQgPSAwOwogCWludAkJZXJyb3IgPSAwOwogCiAJeGZzX21vdW50X2NvbW1vbihtcCwgc2JwKTsKQEAgLTk2MCw3ICsxMDI4LDcgQEAKIAkgKi8KIAllcnJvciA9IHhmc191cGRhdGVfYWxpZ25tZW50KG1wKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dDsKIAogCXhmc19hbGxvY19jb21wdXRlX21heGxldmVscyhtcCk7CiAJeGZzX2JtYXBfY29tcHV0ZV9tYXhsZXZlbHMobXAsIFhGU19EQVRBX0ZPUkspOwpAQCAtOTcxLDE5ICsxMDM5LDkgQEAKIAogCW1wLT5tX21heGlvZmZzZXQgPSB4ZnNfbWF4X2ZpbGVfb2Zmc2V0KHNicC0+c2JfYmxvY2tsb2cpOwogCi0JLyoKLQkgKiBYRlMgdXNlcyB0aGUgdXVpZCBmcm9tIHRoZSBzdXBlcmJsb2NrIGFzIHRoZSB1bmlxdWUKLQkgKiBpZGVudGlmaWVyIGZvciBmc2lkLiAgV2UgY2FuIG5vdCB1c2UgdGhlIHV1aWQgZnJvbSB0aGUgdm9sdW1lCi0JICogc2luY2UgYSBzaW5nbGUgcGFydGl0aW9uIGZpbGVzeXN0ZW0gaXMgaWRlbnRpY2FsIHRvIGEgc2luZ2xlCi0JICogcGFydGl0aW9uIHZvbHVtZS9maWxlc3lzdGVtLgotCSAqLwotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKSA9PSAwKSB7Ci0JCWlmICh4ZnNfdXVpZF9tb3VudChtcCkpIHsKLQkJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCQlnb3RvIGVycm9yMTsKLQkJfQotCQl1dWlkX21vdW50ZWQ9MTsKLQl9CisJZXJyb3IgPSB4ZnNfdXVpZF9tb3VudChtcCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKIAogCS8qCiAJICogU2V0IHRoZSBtaW5pbXVtIHJlYWQgYW5kIHdyaXRlIHNpemVzCkBAIC0xMDA3LDcgKzEwNjUsNyBAQAogCSAqLwogCWVycm9yID0geGZzX2NoZWNrX3NpemVzKG1wKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSByZWFsdGltZSBmaWVsZHMgaW4gdGhlIG1vdW50IHN0cnVjdHVyZQpAQCAtMTAxNSw3ICsxMDczLDcgQEAKIAllcnJvciA9IHhmc19ydG1vdW50X2luaXQobXApOwogCWlmIChlcnJvcikgewogCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IFJUIG1vdW50IGZhaWxlZCIpOwotCQlnb3RvIGVycm9yMTsKKwkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7CiAJfQogCiAJLyoKQEAgLTEwNDUsMjYgKzExMDMsMjYgQEAKIAltcC0+bV9wZXJhZyA9IGttZW1femFsbG9jKHNicC0+c2JfYWdjb3VudCAqIHNpemVvZih4ZnNfcGVyYWdfdCksCiAJCQkJICBLTV9NQVlGQUlMKTsKIAlpZiAoIW1wLT5tX3BlcmFnKQotCQlnb3RvIGVycm9yMTsKKwkJZ290byBvdXRfcmVtb3ZlX3V1aWQ7CiAKIAltcC0+bV9tYXhhZ2kgPSB4ZnNfaW5pdGlhbGl6ZV9wZXJhZyhtcCwgc2JwLT5zYl9hZ2NvdW50KTsKIAorCWlmICghc2JwLT5zYl9sb2dibG9ja3MpIHsKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBubyBsb2cgZGVmaW5lZCIpOworCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfbW91bnRmcyIsIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKKwkJZ290byBvdXRfZnJlZV9wZXJhZzsKKwl9CisKIAkvKgogCSAqIGxvZydzIG1vdW50LXRpbWUgaW5pdGlhbGl6YXRpb24uIFBlcmZvcm0gMXN0IHBhcnQgcmVjb3ZlcnkgaWYgbmVlZGVkCiAJICovCi0JaWYgKGxpa2VseShzYnAtPnNiX2xvZ2Jsb2NrcyA+IDApKSB7CS8qIGNoZWNrIGZvciB2b2x1bWUgY2FzZSAqLwotCQllcnJvciA9IHhmc19sb2dfbW91bnQobXAsIG1wLT5tX2xvZ2Rldl90YXJncCwKLQkJCQkgICAgICBYRlNfRlNCX1RPX0RBRERSKG1wLCBzYnAtPnNiX2xvZ3N0YXJ0KSwKLQkJCQkgICAgICBYRlNfRlNCX1RPX0JCKG1wLCBzYnAtPnNiX2xvZ2Jsb2NrcykpOwotCQlpZiAoZXJyb3IpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbG9nIG1vdW50IGZhaWxlZCIpOwotCQkJZ290byBlcnJvcjI7Ci0JCX0KLQl9IGVsc2UgewkvKiBObyBsb2cgaGFzIGJlZW4gZGVmaW5lZCAqLwotCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IG5vIGxvZyBkZWZpbmVkIik7Ci0JCVhGU19FUlJPUl9SRVBPUlQoInhmc19tb3VudGZzX2ludCgxKSIsIFhGU19FUlJMRVZFTF9MT1csIG1wKTsKLQkJZXJyb3IgPSBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKLQkJZ290byBlcnJvcjI7CisJZXJyb3IgPSB4ZnNfbG9nX21vdW50KG1wLCBtcC0+bV9sb2dkZXZfdGFyZ3AsCisJCQkgICAgICBYRlNfRlNCX1RPX0RBRERSKG1wLCBzYnAtPnNiX2xvZ3N0YXJ0KSwKKwkJCSAgICAgIFhGU19GU0JfVE9fQkIobXAsIHNicC0+c2JfbG9nYmxvY2tzKSk7CisJaWYgKGVycm9yKSB7CisJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbG9nIG1vdW50IGZhaWxlZCIpOworCQlnb3RvIG91dF9mcmVlX3BlcmFnOwogCX0KIAogCS8qCkBAIC0xMDg2LDE1ICsxMTQ0LDE0IEBACiAJICogSWYgd2UgYXJlIGN1cnJlbnRseSBtYWtpbmcgdGhlIGZpbGVzeXN0ZW0sIHRoZSBpbml0aWFsaXNhdGlvbiB3aWxsCiAJICogZmFpbCBhcyB0aGUgcGVyYWcgZGF0YSBpcyBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiAJICovCi0KIAlpZiAoeGZzX3NiX3ZlcnNpb25faGFzbGF6eXNiY291bnQoJm1wLT5tX3NiKSAmJgogCSAgICAhWEZTX0xBU1RfVU5NT1VOVF9XQVNfQ0xFQU4obXApICYmCiAJICAgICAhbXAtPm1fc2Iuc2JfaW5wcm9ncmVzcykgewogCQllcnJvciA9IHhmc19pbml0aWFsaXplX3BlcmFnX2RhdGEobXAsIHNicC0+c2JfYWdjb3VudCk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBlcnJvcjI7Ci0JCX0KKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfZnJlZV9wZXJhZzsKIAl9CisKIAkvKgogCSAqIEdldCBhbmQgc2FuaXR5LWNoZWNrIHRoZSByb290IGlub2RlLgogCSAqIFNhdmUgdGhlIHBvaW50ZXIgdG8gaXQgaW4gdGhlIG1vdW50IHN0cnVjdHVyZS4KQEAgLTExMDIsNyArMTE1OSw3IEBACiAJZXJyb3IgPSB4ZnNfaWdldChtcCwgTlVMTCwgc2JwLT5zYl9yb290aW5vLCAwLCBYRlNfSUxPQ0tfRVhDTCwgJnJpcCwgMCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHJlYWQgcm9vdCBpbm9kZSIpOwotCQlnb3RvIGVycm9yMzsKKwkJZ290byBvdXRfbG9nX2RlYWxsb2M7CiAJfQogCiAJQVNTRVJUKHJpcCAhPSBOVUxMKTsKQEAgLTExMTYsNyArMTE3Myw3IEBACiAJCVhGU19FUlJPUl9SRVBPUlQoInhmc19tb3VudGZzX2ludCgyKSIsIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJIG1wKTsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUZTQ09SUlVQVEVEKTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3JlbGVfcmlwOwogCX0KIAltcC0+bV9yb290aXAgPSByaXA7CS8qIHNhdmUgaXQgKi8KIApAQCAtMTEzMSw3ICsxMTg4LDcgQEAKIAkJICogRnJlZSB1cCB0aGUgcm9vdCBpbm9kZS4KIAkJICovCiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHJlYWQgUlQgaW5vZGVzIik7Ci0JCWdvdG8gZXJyb3I0OworCQlnb3RvIG91dF9yZWxlX3JpcDsKIAl9CiAKIAkvKgpAQCAtMTE0Myw3ICsxMjAwLDcgQEAKIAkJZXJyb3IgPSB4ZnNfbW91bnRfbG9nX3NiKG1wLCBtcC0+bV91cGRhdGVfZmxhZ3MpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogZmFpbGVkIHRvIHdyaXRlIHNiIGNoYW5nZXMiKTsKLQkJCWdvdG8gZXJyb3I0OworCQkJZ290byBvdXRfcnR1bm1vdW50OwogCQl9CiAJfQogCkBAIC0xMTUyLDcgKzEyMDksNyBAQAogCSAqLwogCWVycm9yID0gWEZTX1FNX0lOSVQobXAsICZxdW90YW1vdW50LCAmcXVvdGFmbGFncyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycm9yNDsKKwkJZ290byBvdXRfcnR1bm1vdW50OwogCiAJLyoKIAkgKiBGaW5pc2ggcmVjb3ZlcmluZyB0aGUgZmlsZSBzeXN0ZW0uICBUaGlzIHBhcnQgbmVlZGVkIHRvIGJlCkBAIC0xMTYyLDcgKzEyMTksNyBAQAogCWVycm9yID0geGZzX2xvZ19tb3VudF9maW5pc2gobXApOwogCWlmIChlcnJvcikgewogCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxvZyBtb3VudCBmaW5pc2ggZmFpbGVkIik7Ci0JCWdvdG8gZXJyb3I0OworCQlnb3RvIG91dF9ydHVubW91bnQ7CiAJfQogCiAJLyoKQEAgLTExNzAsNyArMTIyNyw3IEBACiAJICovCiAJZXJyb3IgPSBYRlNfUU1fTU9VTlQobXAsIHF1b3RhbW91bnQsIHF1b3RhZmxhZ3MpOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3J0dW5tb3VudDsKIAogCS8qCiAJICogTm93IHdlIGFyZSBtb3VudGVkLCByZXNlcnZlIGEgc21hbGwgYW1vdW50IG9mIHVudXNlZCBzcGFjZSBmb3IKQEAgLTExOTQsMTggKzEyNTEsMTcgQEAKIAogCXJldHVybiAwOwogCi0gZXJyb3I0OgotCS8qCi0JICogRnJlZSB1cCB0aGUgcm9vdCBpbm9kZS4KLQkgKi8KKyBvdXRfcnR1bm1vdW50OgorCXhmc19ydHVubW91bnRfaW5vZGVzKG1wKTsKKyBvdXRfcmVsZV9yaXA6CiAJSVJFTEUocmlwKTsKLSBlcnJvcjM6Ci0JeGZzX2xvZ191bm1vdW50X2RlYWxsb2MobXApOwotIGVycm9yMjoKKyBvdXRfbG9nX2RlYWxsb2M6CisJeGZzX2xvZ191bm1vdW50KG1wKTsKKyBvdXRfZnJlZV9wZXJhZzoKIAl4ZnNfZnJlZV9wZXJhZyhtcCk7Ci0gZXJyb3IxOgotCWlmICh1dWlkX21vdW50ZWQpCi0JCXV1aWRfdGFibGVfcmVtb3ZlKCZtcC0+bV9zYi5zYl91dWlkKTsKKyBvdXRfcmVtb3ZlX3V1aWQ6CisJeGZzX3V1aWRfdW5tb3VudChtcCk7Cisgb3V0OgogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTIyNiwxNSArMTI4MiwxMiBAQAogCSAqLwogCVhGU19RTV9VTk1PVU5UKG1wKTsKIAotCWlmIChtcC0+bV9yYm1pcCkKLQkJSVJFTEUobXAtPm1fcmJtaXApOwotCWlmIChtcC0+bV9yc3VtaXApCi0JCUlSRUxFKG1wLT5tX3JzdW1pcCk7CisJeGZzX3J0dW5tb3VudF9pbm9kZXMobXApOwogCUlSRUxFKG1wLT5tX3Jvb3RpcCk7CiAKIAkvKgogCSAqIFdlIGNhbiBwb3RlbnRpYWxseSBkZWFkbG9jayBoZXJlIGlmIHdlIGhhdmUgYW4gaW5vZGUgY2x1c3RlcgotCSAqIHRoYXQgaGFzIGJlZW4gZnJlZWQgaGFzIGl0J3MgYnVmZmVyIHN0aWxsIHBpbm5lZCBpbiBtZW1vcnkgYmVjYXVzZQorCSAqIHRoYXQgaGFzIGJlZW4gZnJlZWQgaGFzIGl0cyBidWZmZXIgc3RpbGwgcGlubmVkIGluIG1lbW9yeSBiZWNhdXNlCiAJICogdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIHNpdHRpbmcgaW4gYSBpY2xvZy4gVGhlIHN0YWxlIGlub2RlcwogCSAqIG9uIHRoYXQgYnVmZmVyIHdpbGwgaGF2ZSB0aGVpciBmbHVzaCBsb2NrcyBoZWxkIHVudGlsIHRoZQogCSAqIHRyYW5zYWN0aW9uIGhpdHMgdGhlIGRpc2sgYW5kIHRoZSBjYWxsYmFja3MgcnVuLiB0aGUgaW5vZGUKQEAgLTEyNjYsNyArMTMxOSw3IEBACiAJICogVW5yZXNlcnZlIGFueSBibG9ja3Mgd2UgaGF2ZSBzbyB0aGF0IHdoZW4gd2UgdW5tb3VudCB3ZSBkb24ndCBhY2NvdW50CiAJICogdGhlIHJlc2VydmVkIGZyZWUgc3BhY2UgYXMgdXNlZC4gVGhpcyBpcyByZWFsbHkgb25seSBuZWNlc3NhcnkgZm9yCiAJICogbGF6eSBzdXBlcmJsb2NrIGNvdW50aW5nIGJlY2F1c2UgaXQgdHJ1c3RzIHRoZSBpbmNvcmUgc3VwZXJibG9jawotCSAqIGNvdW50ZXJzIHRvIGJlIGFib3NsdXRlbHkgY29ycmVjdCBvbiBjbGVhbiB1bm1vdW50LgorCSAqIGNvdW50ZXJzIHRvIGJlIGFic29sdXRlbHkgY29ycmVjdCBvbiBjbGVhbiB1bm1vdW50LgogCSAqCiAJICogV2UgZG9uJ3QgYm90aGVyIGNvcnJlY3RpbmcgdGhpcyBlbHNld2hlcmUgZm9yIGxhenkgc3VwZXJibG9jawogCSAqIGNvdW50aW5nIGJlY2F1c2Ugb24gbW91bnQgb2YgYW4gdW5jbGVhbiBmaWxlc3lzdGVtIHdlIHJlY29uc3RydWN0IHRoZQpAQCAtMTI4OCwxMCArMTM0MSw5IEBACiAJCQkJIkZyZWVzcGFjZSBtYXkgbm90IGJlIGNvcnJlY3Qgb24gbmV4dCBtb3VudC4iKTsKIAl4ZnNfdW5tb3VudGZzX3dyaXRlc2IobXApOwogCXhmc191bm1vdW50ZnNfd2FpdChtcCk7IAkJLyogd2FpdCBmb3IgYXN5bmMgYnVmcyAqLwotCXhmc19sb2dfdW5tb3VudChtcCk7CQkJLyogRG9uZSEgTm8gbW9yZSBmcyBvcHMuICovCi0KLQlpZiAoKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX05PVVVJRCkgPT0gMCkKLQkJdXVpZF90YWJsZV9yZW1vdmUoJm1wLT5tX3NiLnNiX3V1aWQpOworCXhmc19sb2dfdW5tb3VudF93cml0ZShtcCk7CisJeGZzX2xvZ191bm1vdW50KG1wKTsKKwl4ZnNfdXVpZF91bm1vdW50KG1wKTsKIAogI2lmIGRlZmluZWQoREVCVUcpCiAJeGZzX2Vycm9ydGFnX2NsZWFyYWxsKG1wLCAwKTsKQEAgLTE3OTMsMjkgKzE4NDUsNiBAQAogfQogCiAvKgotICogU2VlIGlmIHRoZSBVVUlEIGlzIHVuaXF1ZSBhbW9uZyBtb3VudGVkIFhGUyBmaWxlc3lzdGVtcy4KLSAqIE1vdW50IGZhaWxzIGlmIFVVSUQgaXMgbmlsIG9yIGEgRlMgd2l0aCB0aGUgc2FtZSBVVUlEIGlzIGFscmVhZHkgbW91bnRlZC4KLSAqLwotU1RBVElDIGludAoteGZzX3V1aWRfbW91bnQoCi0JeGZzX21vdW50X3QJKm1wKQotewotCWlmICh1dWlkX2lzX25pbCgmbXAtPm1fc2Iuc2JfdXVpZCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogRmlsZXN5c3RlbSAlcyBoYXMgbmlsIFVVSUQgLSBjYW4ndCBtb3VudCIsCi0JCQltcC0+bV9mc25hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmICghdXVpZF90YWJsZV9pbnNlcnQoJm1wLT5tX3NiLnNiX3V1aWQpKSB7Ci0JCWNtbl9lcnIoQ0VfV0FSTiwKLQkJCSJYRlM6IEZpbGVzeXN0ZW0gJXMgaGFzIGR1cGxpY2F0ZSBVVUlEIC0gY2FuJ3QgbW91bnQiLAotCQkJbXAtPm1fZnNuYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFVzZWQgdG8gbG9nIGNoYW5nZXMgdG8gdGhlIHN1cGVyYmxvY2sgdW5pdCBhbmQgd2lkdGggZmllbGRzIHdoaWNoIGNvdWxkCiAgKiBiZSBhbHRlcmVkIGJ5IHRoZSBtb3VudCBvcHRpb25zLCBhcyB3ZWxsIGFzIGFueSBwb3RlbnRpYWwgc2JfZmVhdHVyZXMyCiAgKiBmaXh1cC4gT25seSB0aGUgZmlyc3Qgc3VwZXJibG9jayBpcyB1cGRhdGVkLgpAQCAtMTg2OCw3ICsxODk3LDcgQEAKICAqIHdlIGRpc2FibGUgdGhlIHBlci1jcHUgY291bnRlciBhbmQgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoLgogICoKICAqIFRoZSBzbG93IHBhdGggaXMgdGhlIGN1cnJlbnQgeGZzX21vZF9pbmNvcmVfc2IoKSBmdW5jdGlvbi4gIFRoaXMgbWVhbnMgdGhhdAotICogd2hlbiB3ZSBkaXNhYmxlIGEgcGVyLWNwdSBjb3VudGVyLCB3ZSBuZWVkIHRvIGRyYWluIGl0J3MgcmVzb3VyY2VzIGJhY2sgdG8KKyAqIHdoZW4gd2UgZGlzYWJsZSBhIHBlci1jcHUgY291bnRlciwgd2UgbmVlZCB0byBkcmFpbiBpdHMgcmVzb3VyY2VzIGJhY2sgdG8KICAqIHRoZSBnbG9iYWwgc3VwZXJibG9jay4gV2UgZG8gdGhpcyBhZnRlciBkaXNhYmxpbmcgdGhlIGNvdW50ZXIgdG8gcHJldmVudAogICogbW9yZSB0aHJlYWRzIGZyb20gcXVldWVpbmcgdXAgb24gdGhlIGNvdW50ZXIuCiAgKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IGY1ZTk5MzcuLjdhZjQ0YWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTEzNiw3ICsxMzYsNiBAQAogCQkJc3RydWN0IHhmc19kcXVvdCAqLCBzdHJ1Y3QgeGZzX2RxdW90ICosIHVpbnQpOwogdHlwZWRlZiB2b2lkCSgqeGZzX2Rxc3RhdHZmc190KShzdHJ1Y3QgeGZzX2lub2RlICosIHN0cnVjdCBrc3RhdGZzICopOwogdHlwZWRlZiBpbnQJKCp4ZnNfZHFzeW5jX3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgaW50IGZsYWdzKTsKLXR5cGVkZWYgaW50CSgqeGZzX3F1b3RhY3RsX3QpKHN0cnVjdCB4ZnNfbW91bnQgKiwgaW50LCBpbnQsIHhmc19jYWRkcl90KTsKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX3Ftb3BzIHsKIAl4ZnNfcW1pbml0X3QJCXhmc19xbWluaXQ7CkBAIC0xNTQsNyArMTUzLDYgQEAKIAl4ZnNfZHF2b3BjaG93bnJlc3ZfdAl4ZnNfZHF2b3BjaG93bnJlc3Y7CiAJeGZzX2Rxc3RhdHZmc190CQl4ZnNfZHFzdGF0dmZzOwogCXhmc19kcXN5bmNfdAkJeGZzX2Rxc3luYzsKLQl4ZnNfcXVvdGFjdGxfdAkJeGZzX3F1b3RhY3RsOwogCXN0cnVjdCB4ZnNfZHF0cnhvcHMJKnhmc19kcXRyeG9wczsKIH0geGZzX3Ftb3BzX3Q7CiAKQEAgLTE4OCw4ICsxODYsNiBAQAogCSgqKGlwKS0+aV9tb3VudC0+bV9xbV9vcHMtPnhmc19kcXN0YXR2ZnMpKGlwLCBzdGF0cCkKICNkZWZpbmUgWEZTX1FNX0RRU1lOQyhtcCwgZmxhZ3MpIFwKIAkoKihtcCktPm1fcW1fb3BzLT54ZnNfZHFzeW5jKShtcCwgZmxhZ3MpCi0jZGVmaW5lIFhGU19RTV9RVU9UQUNUTChtcCwgY21kLCBpZCwgYWRkcikgXAotCSgqKG1wKS0+bV9xbV9vcHMtPnhmc19xdW90YWN0bCkobXAsIGNtZCwgaWQsIGFkZHIpCiAKICNpZmRlZiBIQVZFX1BFUkNQVV9TQgogCkBAIC0yNzMsMTkgKzI2OSwxNyBAQAogCXVpbnQJCQltX2lub2J0X21uclsyXTsJLyogbWluIGlub2J0IGJ0cmVlIHJlY29yZHMgKi8KIAl1aW50CQkJbV9hZ19tYXhsZXZlbHM7CS8qIFhGU19BR19NQVhMRVZFTFMgKi8KIAl1aW50CQkJbV9ibV9tYXhsZXZlbHNbMl07IC8qIFhGU19CTV9NQVhMRVZFTFMgKi8KLQl1aW50CQkJbV9pbl9tYXhsZXZlbHM7CS8qIFhGU19JTl9NQVhMRVZFTFMgKi8KKwl1aW50CQkJbV9pbl9tYXhsZXZlbHM7CS8qIG1heCBpbm9idCBidHJlZSBsZXZlbHMuICovCiAJc3RydWN0IHhmc19wZXJhZwkqbV9wZXJhZzsJLyogcGVyLWFnIGFjY291bnRpbmcgaW5mbyAqLwogCXN0cnVjdCByd19zZW1hcGhvcmUJbV9wZXJhZ2xvY2s7CS8qIGxvY2sgZm9yIG1fcGVyYWcgKHBvaW50ZXIpICovCiAJc3RydWN0IG11dGV4CQltX2dyb3dsb2NrOwkvKiBncm93ZnMgbXV0ZXggKi8KIAlpbnQJCQltX2ZpeGVkZnNpZFsyXTsJLyogdW5jaGFuZ2VkIGZvciBsaWZlIG9mIEZTICovCiAJdWludAkJCW1fZG1ldm1hc2s7CS8qIERNSSBldmVudHMgZm9yIHRoaXMgRlMgKi8KIAlfX3VpbnQ2NF90CQltX2ZsYWdzOwkvKiBnbG9iYWwgbW91bnQgZmxhZ3MgKi8KLQl1aW50CQkJbV9hdHRyb2Zmc2V0OwkvKiBpbm9kZSBhdHRyaWJ1dGUgb2Zmc2V0ICovCiAJdWludAkJCW1fZGlyX25vZGVfZW50czsgLyogI2VudHJpZXMgaW4gYSBkaXIgZGFub2RlICovCiAJdWludAkJCW1fYXR0cl9ub2RlX2VudHM7IC8qICNlbnRyaWVzIGluIGF0dHIgZGFub2RlICovCiAJaW50CQkJbV9pYWxsb2NfaW5vczsJLyogaW5vZGVzIGluIGlub2RlIGFsbG9jYXRpb24gKi8KIAlpbnQJCQltX2lhbGxvY19ibGtzOwkvKiBibG9ja3MgaW4gaW5vZGUgYWxsb2NhdGlvbiAqLwotCWludAkJCW1fbGl0aW5vOwkvKiBzaXplIG9mIGlub2RlIHVuaW9uIGFyZWEgKi8KIAlpbnQJCQltX2lub2FsaWduX21hc2s7LyogbWFzayBzYl9pbm9hbGlnbm10IGlmIHVzZWQgKi8KIAl1aW50CQkJbV9xZmxhZ3M7CS8qIHF1b3RhIHN0YXR1cyBmbGFncyAqLwogCXhmc190cmFuc19yZXNlcnZhdGlvbnNfdCBtX3Jlc2VydmF0aW9uczsvKiBwcmVjb21wdXRlZCByZXMgdmFsdWVzICovCkBAIC0yOTMsOSArMjg3LDYgQEAKIAlfX3VpbnQ2NF90CQltX21heGlvZmZzZXQ7CS8qIG1heGltdW0gaW5vZGUgb2Zmc2V0ICovCiAJX191aW50NjRfdAkJbV9yZXNibGtzOwkvKiB0b3RhbCByZXNlcnZlZCBibG9ja3MgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3NfYXZhaWw7LyogYXZhaWxhYmxlIHJlc2VydmVkIGJsb2NrcyAqLwotI2lmIFhGU19CSUdfSU5VTVMKLQl4ZnNfaW5vX3QJCW1faW5vYWRkOwkvKiBhZGQgdmFsdWUgZm9yIGlubzY0X29mZnNldCAqLwotI2VuZGlmCiAJaW50CQkJbV9kYWxpZ247CS8qIHN0cmlwZSB1bml0ICovCiAJaW50CQkJbV9zd2lkdGg7CS8qIHN0cmlwZSB3aWR0aCAqLwogCWludAkJCW1fc2lub2FsaWduOwkvKiBzdHJpcGUgdW5pdCBpbm9kZSBhbGlnbm1lbnQgKi8KQEAgLTMzNyw3ICszMjgsNiBAQAogI2RlZmluZSBYRlNfTU9VTlRfV1NZTkMJCSgxVUxMIDw8IDApCS8qIGZvciBuZnMgLSBhbGwgbWV0YWRhdGEgb3BzCiAJCQkJCQkgICBtdXN0IGJlIHN5bmNocm9ub3VzIGV4Y2VwdAogCQkJCQkJICAgZm9yIHNwYWNlIGFsbG9jYXRpb25zICovCi0jZGVmaW5lIFhGU19NT1VOVF9JTk82NAkJKDFVTEwgPDwgMSkKICNkZWZpbmUgWEZTX01PVU5UX0RNQVBJCQkoMVVMTCA8PCAyKQkvKiBkbWFwaSBpcyBlbmFibGVkICovCiAjZGVmaW5lIFhGU19NT1VOVF9XQVNfQ0xFQU4JKDFVTEwgPDwgMykKICNkZWZpbmUgWEZTX01PVU5UX0ZTX1NIVVRET1dOCSgxVUxMIDw8IDQpCS8qIGF0b21pYyBzdG9wIG9mIGFsbCBmaWxlc3lzdGVtCkBAIC0zODksOCArMzc5LDggQEAKICAqIFN5bmNocm9ub3VzIHJlYWQgYW5kIHdyaXRlIHNpemVzLiAgVGhpcyBzaG91bGQgYmUKICAqIGJldHRlciBmb3IgTkZTdjIgd3N5bmMgZmlsZXN5c3RlbXMuCiAgKi8KLSNkZWZpbmUJWEZTX1dTWU5DX1JFQURJT19MT0cJMTUJLyogMzJLICovCi0jZGVmaW5lCVhGU19XU1lOQ19XUklURUlPX0xPRwkxNAkvKiAxNksgKi8KKyNkZWZpbmUJWEZTX1dTWU5DX1JFQURJT19MT0cJMTUJLyogMzJrICovCisjZGVmaW5lCVhGU19XU1lOQ19XUklURUlPX0xPRwkxNAkvKiAxNmsgKi8KIAogLyoKICAqIEFsbG93IGxhcmdlIGJsb2NrIHNpemVzIHRvIGJlIHJlcG9ydGVkIHRvIHVzZXJzcGFjZSBwcm9ncmFtcyBpZiB0aGUKQEAgLTUwMCw5ICs0OTAsNiBAQAogCWludDY0X3QJCW1zYl9kZWx0YTsJLyogQ2hhbmdlIHRvIG1ha2UgdG8gc3BlY2lmaWVkIGZpZWxkICovCiB9IHhmc19tb2Rfc2JfdDsKIAotI2RlZmluZQlYRlNfTU9VTlRfSUxPQ0sobXApCW11dGV4X2xvY2soJigobXApLT5tX2lsb2NrKSkKLSNkZWZpbmUJWEZTX01PVU5UX0lVTkxPQ0sobXApCW11dGV4X3VubG9jaygmKChtcCktPm1faWxvY2spKQotCiBleHRlcm4gaW50CXhmc19sb2dfc2Jjb3VudCh4ZnNfbW91bnRfdCAqLCB1aW50KTsKIGV4dGVybiBpbnQJeGZzX21vdW50ZnMoeGZzX21vdW50X3QgKm1wKTsKIGV4dGVybiB2b2lkCXhmc19tb3VudGZzX2NoZWNrX2JhcnJpZXJzKHhmc19tb3VudF90ICptcCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Ftb3BzLmMgYi9mcy94ZnMveGZzX3Ftb3BzLmMKaW5kZXggMjdmODA1OC4uZTEwMTc5MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xbW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfcW1vcHMuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAJLnhmc19kcXZvcGNob3ducmVzdgk9ICh4ZnNfZHF2b3BjaG93bnJlc3ZfdCkgZnNfbm9lcnIsCiAJLnhmc19kcXN0YXR2ZnMJCT0gKHhmc19kcXN0YXR2ZnNfdCkgZnNfbm92YWwsCiAJLnhmc19kcXN5bmMJCT0gKHhmc19kcXN5bmNfdCkgZnNfbm9lcnIsCi0JLnhmc19xdW90YWN0bAkJPSAoeGZzX3F1b3RhY3RsX3QpIGZzX25vc3lzLAogfTsKIAogaW50CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggNDg5NjVlYy4uZjVkMTIwMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtMTgsNiArMTgsOCBAQAogI2lmbmRlZiBfX1hGU19RVU9UQV9IX18KICNkZWZpbmUgX19YRlNfUVVPVEFfSF9fCiAKK3N0cnVjdCB4ZnNfdHJhbnM7CisKIC8qCiAgKiBUaGUgb25kaXNrIGZvcm0gb2YgYSBkcXVvdCBzdHJ1Y3R1cmUuCiAgKi8KQEAgLTE4NSw3ICsxODcsNiBAQAogICogdG8gYSBzaW5nbGUgZnVuY3Rpb24uIE5vbmUgb2YgdGhlc2UgWEZTX1FNT1BUXyogZmxhZ3MgYXJlIG1lYW50IHRvIGhhdmUKICAqIHBlcnNpc3RlbnQgdmFsdWVzIChpZS4gdGhlaXIgdmFsdWVzIGNhbiBhbmQgd2lsbCBjaGFuZ2UgYmV0d2VlbiB2ZXJzaW9ucykKICAqLwotI2RlZmluZSBYRlNfUU1PUFRfRFFMT0NLCTB4MDAwMDAwMSAvKiBkcWxvY2sgKi8KICNkZWZpbmUgWEZTX1FNT1BUX0RRQUxMT0MJMHgwMDAwMDAyIC8qIGFsbG9jIGRxdW90IG9uZGlzayBpZiBuZWVkZWQgKi8KICNkZWZpbmUgWEZTX1FNT1BUX1VRVU9UQQkweDAwMDAwMDQgLyogdXNlciBkcXVvdCByZXF1ZXN0ZWQgKi8KICNkZWZpbmUgWEZTX1FNT1BUX1BRVU9UQQkweDAwMDAwMDggLyogcHJvamVjdCBkcXVvdCByZXF1ZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5jIGIvZnMveGZzL3hmc19ydGFsbG9jLmMKaW5kZXggYzViYjg2Zi4uMzg1ZjZkYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydGFsbG9jLmMKKysrIGIvZnMveGZzL3hmc19ydGFsbG9jLmMKQEAgLTIyODgsNiArMjI4OCwxNiBAQAogCXJldHVybiAwOwogfQogCit2b2lkCit4ZnNfcnR1bm1vdW50X2lub2RlcygKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwlpZiAobXAtPm1fcmJtaXApCisJCUlSRUxFKG1wLT5tX3JibWlwKTsKKwlpZiAobXAtPm1fcnN1bWlwKQorCQlJUkVMRShtcC0+bV9yc3VtaXApOworfQorCiAvKgogICogUGljayBhbiBleHRlbnQgZm9yIGFsbG9jYXRpb24gYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IHJlYWx0aW1lIGZpbGUuCiAgKiBVc2UgdGhlIHNlcXVlbmNlIG51bWJlciBzdG9yZWQgaW4gdGhlIGF0aW1lIGZpZWxkIG9mIHRoZSBiaXRtYXAgaW5vZGUuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuaCBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCmluZGV4IDhkOGRjZDIuLmIyZDY3YWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5oCkBAIC0yMyw4ICsyMyw4IEBACiAKIC8qIE1pbiBhbmQgbWF4IHJ0IGV4dGVudCBzaXplcywgc3BlY2lmaWVkIGluIGJ5dGVzICovCiAjZGVmaW5lCVhGU19NQVhfUlRFWFRTSVpFCSgxMDI0ICogMTAyNCAqIDEwMjQpCS8qIDFHQiAqLwotI2RlZmluZQlYRlNfREZMX1JURVhUU0laRQkoNjQgKiAxMDI0KQkgICAgICAgIC8qIDY0S0IgKi8KLSNkZWZpbmUJWEZTX01JTl9SVEVYVFNJWkUJKDQgKiAxMDI0KQkJLyogNEtCICovCisjZGVmaW5lCVhGU19ERkxfUlRFWFRTSVpFCSg2NCAqIDEwMjQpCSAgICAgICAgLyogNjRrQiAqLworI2RlZmluZQlYRlNfTUlOX1JURVhUU0laRQkoNCAqIDEwMjQpCQkvKiA0a0IgKi8KIAogLyoKICAqIENvbnN0YW50cyBmb3IgYml0IG1hbmlwdWxhdGlvbnMuCkBAIC0xMDgsNiArMTA4LDkgQEAKIGludAkJCQkJLyogZXJyb3IgKi8KIHhmc19ydG1vdW50X2luaXQoCiAJc3RydWN0IHhmc19tb3VudAkqbXApOwkvKiBmaWxlIHN5c3RlbSBtb3VudCBzdHJ1Y3R1cmUgKi8KK3ZvaWQKK3hmc19ydHVubW91bnRfaW5vZGVzKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wKTsKIAogLyoKICAqIEdldCB0aGUgYml0bWFwIGFuZCBzdW1tYXJ5IGlub2RlcyBpbnRvIHRoZSBtb3VudCBzdHJ1Y3R1cmUKQEAgLTE0Niw2ICsxNDksNyBAQAogIyBkZWZpbmUgeGZzX2dyb3dmc19ydChtcCxpbikgICAgICAgICAgICAgICAgICAgICAgICAgICAoRU5PU1lTKQogIyBkZWZpbmUgeGZzX3J0bW91bnRfaW5pdChtKSAgICAoKChtcCktPm1fc2Iuc2JfcmJsb2NrcyA9PSAwKT8gMCA6IChFTk9TWVMpKQogIyBkZWZpbmUgeGZzX3J0bW91bnRfaW5vZGVzKG0pICAoKChtcCktPm1fc2Iuc2JfcmJsb2NrcyA9PSAwKT8gMCA6IChFTk9TWVMpKQorIyBkZWZpbmUgeGZzX3J0dW5tb3VudF9pbm9kZXMobSkKICNlbmRpZgkvKiBDT05GSUdfWEZTX1JUICovCiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKaW5kZXggZDZmZTRhOC4uNzc1MjQ5YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuaApAQCAtMjkyLDcgKzI5Miw3IEBACiAgKiBJbiBhIHdyaXRlIHRyYW5zYWN0aW9uIHdlIGNhbiBhbGxvY2F0ZSBhIG1heGltdW0gb2YgMgogICogZXh0ZW50cy4gIFRoaXMgZ2l2ZXM6CiAgKiAgICB0aGUgaW5vZGUgZ2V0dGluZyB0aGUgbmV3IGV4dGVudHM6IGlub2RlIHNpemUKLSAqICAgIHRoZSBpbm9kZVwncyBibWFwIGJ0cmVlOiBtYXggZGVwdGggKiBibG9jayBzaXplCisgKiAgICB0aGUgaW5vZGUncyBibWFwIGJ0cmVlOiBtYXggZGVwdGggKiBibG9jayBzaXplCiAgKiAgICB0aGUgYWdmcyBvZiB0aGUgYWdzIGZyb20gd2hpY2ggdGhlIGV4dGVudHMgYXJlIGFsbG9jYXRlZDogMiAqIHNlY3RvcgogICogICAgdGhlIHN1cGVyYmxvY2sgZnJlZSBibG9jayBjb3VudGVyOiBzZWN0b3Igc2l6ZQogICogICAgdGhlIGFsbG9jYXRpb24gYnRyZWVzOiAyIGV4dHMgKiAyIHRyZWVzICogKDIgKiBtYXggZGVwdGggLSAxKSAqIGJsb2NrIHNpemUKQEAgLTMyMSw3ICszMjEsNyBAQAogLyoKICAqIEluIHRydW5jYXRpbmcgYSBmaWxlIHdlIGZyZWUgdXAgdG8gdHdvIGV4dGVudHMgYXQgb25jZS4gIFdlIGNhbiBtb2RpZnk6CiAgKiAgICB0aGUgaW5vZGUgYmVpbmcgdHJ1bmNhdGVkOiBpbm9kZSBzaXplCi0gKiAgICB0aGUgaW5vZGVcJ3MgYm1hcCBidHJlZTogKG1heCBkZXB0aCArIDEpICogYmxvY2sgc2l6ZQorICogICAgdGhlIGlub2RlJ3MgYm1hcCBidHJlZTogKG1heCBkZXB0aCArIDEpICogYmxvY2sgc2l6ZQogICogQW5kIHRoZSBibWFwX2ZpbmlzaCB0cmFuc2FjdGlvbiBjYW4gZnJlZSB0aGUgYmxvY2tzIGFuZCBibWFwIGJsb2NrczoKICAqICAgIHRoZSBhZ2YgZm9yIGVhY2ggb2YgdGhlIGFnczogNCAqIHNlY3RvciBzaXplCiAgKiAgICB0aGUgYWdmbCBmb3IgZWFjaCBvZiB0aGUgYWdzOiA0ICogc2VjdG9yIHNpemUKQEAgLTM0Myw3ICszNDMsNyBAQAogCSAgKDEyOCAqICg5ICsgWEZTX0FMTE9DRlJFRV9MT0dfQ09VTlQobXAsIDQpKSkgKyBcCiAJICAoMTI4ICogNSkgKyBcCiAJICBYRlNfQUxMT0NGUkVFX0xPR19SRVMobXAsIDEpICsgXAotCSAgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIFhGU19JTl9NQVhMRVZFTFMobXApICsgXAorCSAgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIChtcCktPm1faW5fbWF4bGV2ZWxzICsgXAogCSAgICBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgMSkpKSkpKQogCiAjZGVmaW5lCVhGU19JVFJVTkNBVEVfTE9HX1JFUyhtcCkgICAoKG1wKS0+bV9yZXNlcnZhdGlvbnMudHJfaXRydW5jYXRlKQpAQCAtNDMxLDggKzQzMSw4IEBACiAgKiAgICB0aGUgbmV3IGlub2RlOiBpbm9kZSBzaXplCiAgKiAgICB0aGUgaW5vZGUgYnRyZWUgZW50cnk6IDEgYmxvY2sKICAqICAgIHRoZSBkaXJlY3RvcnkgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBkaXIgYmxvY2sgc2l6ZQotICogICAgdGhlIGRpcmVjdG9yeSBpbm9kZVwncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgdjIpICogYmxvY2sgc2l6ZQotICogICAgdGhlIGJsb2NrcyBmb3IgdGhlIHN5bWxpbms6IDEgS0IKKyAqICAgIHRoZSBkaXJlY3RvcnkgaW5vZGUncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgdjIpICogYmxvY2sgc2l6ZQorICogICAgdGhlIGJsb2NrcyBmb3IgdGhlIHN5bWxpbms6IDEga0IKICAqIE9yIGluIHRoZSBmaXJzdCB4YWN0IHdlIGFsbG9jYXRlIHNvbWUgaW5vZGVzIGdpdmluZzoKICAqICAgIHRoZSBhZ2kgYW5kIGFnZiBvZiB0aGUgYWcgZ2V0dGluZyB0aGUgbmV3IGlub2RlczogMiAqIHNlY3RvcnNpemUKICAqICAgIHRoZSBpbm9kZSBibG9ja3MgYWxsb2NhdGVkOiBYRlNfSUFMTE9DX0JMT0NLUyAqIGJsb2Nrc2l6ZQpAQCAtNDQ5LDkgKzQ0OSw5IEBACiAJICAoMTI4ICogKDQgKyBYRlNfRElST1BfTE9HX0NPVU5UKG1wKSkpKSwgXAogCSAoMiAqIChtcCktPm1fc2Iuc2Jfc2VjdHNpemUgKyBcCiAJICBYRlNfRlNCX1RPX0IoKG1wKSwgWEZTX0lBTExPQ19CTE9DS1MoKG1wKSkpICsgXAotCSAgWEZTX0ZTQl9UT19CKChtcCksIFhGU19JTl9NQVhMRVZFTFMobXApKSArIFwKKwkgIFhGU19GU0JfVE9fQigobXApLCAobXApLT5tX2luX21heGxldmVscykgKyBcCiAJICBYRlNfQUxMT0NGUkVFX0xPR19SRVMobXAsIDEpICsgXAotCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCkgKyBcCisJICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyAobXApLT5tX2luX21heGxldmVscyArIFwKIAkgICBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgMSkpKSkpKQogCiAjZGVmaW5lCVhGU19TWU1MSU5LX0xPR19SRVMobXApCSgobXApLT5tX3Jlc2VydmF0aW9ucy50cl9zeW1saW5rKQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAgKiAgICB0aGUgaW5vZGUgYnRyZWUgZW50cnk6IGJsb2NrIHNpemUKICAqICAgIHRoZSBzdXBlcmJsb2NrIGZvciB0aGUgbmxpbmsgZmxhZzogc2VjdG9yIHNpemUKICAqICAgIHRoZSBkaXJlY3RvcnkgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBkaXIgYmxvY2sgc2l6ZQotICogICAgdGhlIGRpcmVjdG9yeSBpbm9kZVwncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgdjIpICogYmxvY2sgc2l6ZQorICogICAgdGhlIGRpcmVjdG9yeSBpbm9kZSdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCiAgKiBPciBpbiB0aGUgZmlyc3QgeGFjdCB3ZSBhbGxvY2F0ZSBzb21lIGlub2RlcyBnaXZpbmc6CiAgKiAgICB0aGUgYWdpIGFuZCBhZ2Ygb2YgdGhlIGFnIGdldHRpbmcgdGhlIG5ldyBpbm9kZXM6IDIgKiBzZWN0b3JzaXplCiAgKiAgICB0aGUgc3VwZXJibG9jayBmb3IgdGhlIG5saW5rIGZsYWc6IHNlY3RvciBzaXplCkBAIC00ODEsOSArNDgxLDkgQEAKIAkgICgxMjggKiAoMyArIFhGU19ESVJPUF9MT0dfQ09VTlQobXApKSkpLCBcCiAJICgzICogKG1wKS0+bV9zYi5zYl9zZWN0c2l6ZSArIFwKIAkgIFhGU19GU0JfVE9fQigobXApLCBYRlNfSUFMTE9DX0JMT0NLUygobXApKSkgKyBcCi0JICBYRlNfRlNCX1RPX0IoKG1wKSwgWEZTX0lOX01BWExFVkVMUyhtcCkpICsgXAorCSAgWEZTX0ZTQl9UT19CKChtcCksIChtcCktPm1faW5fbWF4bGV2ZWxzKSArIFwKIAkgIFhGU19BTExPQ0ZSRUVfTE9HX1JFUyhtcCwgMSkgKyBcCi0JICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyBYRlNfSU5fTUFYTEVWRUxTKG1wKSArIFwKKwkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIChtcCktPm1faW5fbWF4bGV2ZWxzICsgXAogCSAgIFhGU19BTExPQ0ZSRUVfTE9HX0NPVU5UKG1wLCAxKSkpKSkpCiAKICNkZWZpbmUJWEZTX0NSRUFURV9MT0dfUkVTKG1wKQkoKG1wKS0+bV9yZXNlcnZhdGlvbnMudHJfY3JlYXRlKQpAQCAtNTEzLDcgKzUxMyw3IEBACiAJIE1BWCgoX191aW50MTZfdClYRlNfRlNCX1RPX0IoKG1wKSwgMSksIFhGU19JTk9ERV9DTFVTVEVSX1NJWkUobXApKSArIFwKIAkgKDEyOCAqIDUpICsgXAogCSAgWEZTX0FMTE9DRlJFRV9MT0dfUkVTKG1wLCAxKSArIFwKLQkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIFhGU19JTl9NQVhMRVZFTFMobXApICsgXAorCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgKyBcCiAJICAgWEZTX0FMTE9DRlJFRV9MT0dfQ09VTlQobXAsIDEpKSkpCiAKIApAQCAtNjM3LDcgKzYzNyw3IEBACiAvKgogICogUmVtb3ZpbmcgdGhlIGF0dHJpYnV0ZSBmb3JrIG9mIGEgZmlsZQogICogICAgdGhlIGlub2RlIGJlaW5nIHRydW5jYXRlZDogaW5vZGUgc2l6ZQotICogICAgdGhlIGlub2RlXCdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKKyAqICAgIHRoZSBpbm9kZSdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKICAqIEFuZCB0aGUgYm1hcF9maW5pc2ggdHJhbnNhY3Rpb24gY2FuIGZyZWUgdGhlIGJsb2NrcyBhbmQgYm1hcCBibG9ja3M6CiAgKiAgICB0aGUgYWdmIGZvciBlYWNoIG9mIHRoZSBhZ3M6IDQgKiBzZWN0b3Igc2l6ZQogICogICAgdGhlIGFnZmwgZm9yIGVhY2ggb2YgdGhlIGFnczogNCAqIHNlY3RvciBzaXplCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCAyZDQ3ZjEwLi5mMzEyNzFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTc5LDcgKzc5LDcgQEAKICAqIHRoZSBwdXNoIGlzIHJ1biBhc3luY2hyb25vdXNseSBpbiBhIHNlcGFyYXRlIHRocmVhZCwgc28gd2UgcmV0dXJuIHRoZSB0YWlsCiAgKiBvZiB0aGUgbG9nIHJpZ2h0IG5vdyBpbnN0ZWFkIG9mIHRoZSB0YWlsIGFmdGVyIHRoZSBwdXNoLiBUaGlzIG1lYW5zIHdlIHdpbGwKICAqIGVpdGhlciBjb250aW51ZSByaWdodCBhd2F5LCBvciB3ZSB3aWxsIHNsZWVwIHdhaXRpbmcgb24gdGhlIGFzeW5jIHRocmVhZCB0bwotICogZG8gaXQncyB3b3JrLgorICogZG8gaXRzIHdvcmsuCiAgKgogICogV2UgZG8gdGhpcyB1bmxvY2tlZCAtIHdlIG9ubHkgbmVlZCB0byBrbm93IHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgaW4gdGhlCiAgKiBBSUwgYXQgdGhlIHRpbWUgd2UgYXJlIGNhbGxlZC4gV2UgZG9uJ3QgbmVlZCB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mCkBAIC0xNjAsNyArMTYwLDcgQEAKIC8qCiAgKiBOb3cgdGhhdCB0aGUgdHJhdmVyc2FsIGlzIGNvbXBsZXRlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY3Vyc29yCiAgKiBmcm9tIHRoZSBsaXN0IG9mIHRyYXZlcnNpbmcgY3Vyc29ycy4gQXZvaWQgcmVtb3ZpbmcgdGhlIGVtYmVkZGVkCi0gKiBwdXNoIGN1cnNvciwgYnV0IHVzZSB0aGUgZmFjdCBpdCBpcyBhbHdheSBwcmVzZW50IHRvIG1ha2UgdGhlCisgKiBwdXNoIGN1cnNvciwgYnV0IHVzZSB0aGUgZmFjdCBpdCBpcyBhbHdheXMgcHJlc2VudCB0byBtYWtlIHRoZQogICogbGlzdCBkZWxldGlvbiBzaW1wbGUuCiAgKi8KIHZvaWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfaXRlbS5jIGIvZnMveGZzL3hmc190cmFuc19pdGVtLmMKaW5kZXggZTExMGJmNS4uZWIzZmM1NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19pdGVtLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19pdGVtLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgogI2luY2x1ZGUgInhmc190cmFucy5oIgogI2luY2x1ZGUgInhmc190cmFuc19wcml2LmgiCi0vKiBYWFg6IGZyb20gaGVyZSBkb3duIG5lZWRlZCB1bnRpbCBzdHJ1Y3QgeGZzX3RyYW5zIGhhcyBpdCdzIG93biBhaWxwICovCisvKiBYWFg6IGZyb20gaGVyZSBkb3duIG5lZWRlZCB1bnRpbCBzdHJ1Y3QgeGZzX3RyYW5zIGhhcyBpdHMgb3duIGFpbHAgKi8KICNpbmNsdWRlICJ4ZnNfYml0LmgiCiAjaW5jbHVkZSAieGZzX2J1Zl9pdGVtLmgiCiAjaW5jbHVkZSAieGZzX3NiLmgiCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX3NwYWNlLmggYi9mcy94ZnMveGZzX3RyYW5zX3NwYWNlLmgKaW5kZXggNGVhMmU1MC4uN2QyYzkyMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19zcGFjZS5oCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfc3BhY2UuaApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZQlYRlNfRElSUkVNT1ZFX1NQQUNFX1JFUyhtcCkJXAogCVhGU19EQVJFTU9WRV9TUEFDRV9SRVMobXAsIFhGU19EQVRBX0ZPUkspCiAjZGVmaW5lCVhGU19JQUxMT0NfU1BBQ0VfUkVTKG1wKQlcCi0JKFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIFhGU19JTl9NQVhMRVZFTFMobXApLTEpCisJKFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIChtcCktPm1faW5fbWF4bGV2ZWxzIC0gMSkKIAogLyoKICAqIFNwYWNlIHJlc2VydmF0aW9uIHZhbHVlcyBmb3IgdmFyaW91cyB0cmFuc2FjdGlvbnMuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3R5cGVzLmggYi9mcy94ZnMveGZzX3R5cGVzLmgKaW5kZXggYjJmNzI0NS4uZDcyNTQyOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190eXBlcy5oCisrKyBiL2ZzL3hmcy94ZnNfdHlwZXMuaApAQCAtMjEsMTQgKzIxLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCi0gKiBQT1NJWCBFeHRlbnNpb25zCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWNoYXJfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVzaG9ydF90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVpbnRfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZwkJdWxvbmdfdDsKLQotLyoKICAqIEFkZGl0aW9uYWwgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIFhGUwogICovCiB0eXBlZGVmIHNpZ25lZCBjaGFyCQlfX2ludDhfdDsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdXRpbHMuYyBiL2ZzL3hmcy94ZnNfdXRpbHMuYwppbmRleCBmY2MyMjg1Li43OWI5ZTVlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3V0aWxzLmMKKysrIGIvZnMveGZzL3hmc191dGlscy5jCkBAIC0zNzQsNyArMzc0LDcgQEAKIAogCS8qCiAJICogRm9sbG93IHRoZSBub3JtYWwgdHJ1bmNhdGUgbG9ja2luZyBwcm90b2NvbC4gIFNpbmNlIHdlCi0JICogaG9sZCB0aGUgaW5vZGUgaW4gdGhlIHRyYW5zYWN0aW9uLCB3ZSBrbm93IHRoYXQgaXQncyBudW1iZXIKKwkgKiBob2xkIHRoZSBpbm9kZSBpbiB0aGUgdHJhbnNhY3Rpb24sIHdlIGtub3cgdGhhdCBpdHMgbnVtYmVyCiAJICogb2YgcmVmZXJlbmNlcyB3aWxsIHN0YXkgY29uc3RhbnQuCiAJICovCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggMGU1NWM1ZC4uNzM5NGM3YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtMTEzNiw3ICsxMTM2LDcgQEAKIAkgKiBJZiB0aGUgaW5vZGUgaXMgYWxyZWFkeSBmcmVlLCB0aGVuIHRoZXJlIGNhbiBiZSBub3RoaW5nCiAJICogdG8gY2xlYW4gdXAgaGVyZS4KIAkgKi8KLQlpZiAoaXAtPmlfZC5kaV9tb2RlID09IDAgfHwgVk5fQkFEKFZGU19JKGlwKSkpIHsKKwlpZiAoaXAtPmlfZC5kaV9tb2RlID09IDAgfHwgaXNfYmFkX2lub2RlKFZGU19JKGlwKSkpIHsKIAkJQVNTRVJUKGlwLT5pX2RmLmlmX3JlYWxfYnl0ZXMgPT0gMCk7CiAJCUFTU0VSVChpcC0+aV9kZi5pZl9icm9vdF9ieXRlcyA9PSAwKTsKIAkJcmV0dXJuIFZOX0lOQUNUSVZFX0NBQ0hFOwpAQCAtMTM4NywyMyArMTM4NywyOCBAQAogCXhmc19pbm9kZV90CQkqKmlwcCwKIAljcmVkX3QJCQkqY3JlZHApCiB7Ci0JeGZzX21vdW50X3QJCSptcCA9IGRwLT5pX21vdW50OwotCXhmc19pbm9kZV90CQkqaXA7Ci0JeGZzX3RyYW5zX3QJCSp0cDsKKwlpbnQJCQlpc19kaXIgPSBTX0lTRElSKG1vZGUpOworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gZHAtPmlfbW91bnQ7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBOVUxMOworCXN0cnVjdCB4ZnNfdHJhbnMJKnRwID0gTlVMTDsKIAlpbnQJCQllcnJvcjsKIAl4ZnNfYm1hcF9mcmVlX3QJCWZyZWVfbGlzdDsKIAl4ZnNfZnNibG9ja190CQlmaXJzdF9ibG9jazsKIAlib29sZWFuX3QJCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7Ci0JaW50CQkJZG1fZXZlbnRfc2VudCA9IDA7CiAJdWludAkJCWNhbmNlbF9mbGFnczsKIAlpbnQJCQljb21taXR0ZWQ7CiAJeGZzX3ByaWRfdAkJcHJpZDsKLQlzdHJ1Y3QgeGZzX2RxdW90CSp1ZHFwLCAqZ2RxcDsKKwlzdHJ1Y3QgeGZzX2RxdW90CSp1ZHFwID0gTlVMTDsKKwlzdHJ1Y3QgeGZzX2RxdW90CSpnZHFwID0gTlVMTDsKIAl1aW50CQkJcmVzYmxrczsKKwl1aW50CQkJbG9nX3JlczsKKwl1aW50CQkJbG9nX2NvdW50OwogCi0JQVNTRVJUKCEqaXBwKTsKIAl4ZnNfaXRyYWNlX2VudHJ5KGRwKTsKIAorCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX0NSRUFURSkpIHsKIAkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX0NSRUFURSwKIAkJCQlkcCwgRE1fUklHSFRfTlVMTCwgTlVMTCwKQEAgLTE0MTIsODQgKzE0MTcsOTcgQEAKIAogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCWRtX2V2ZW50X3NlbnQgPSAxOwogCX0KIAotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCi0JLyogUmV0dXJuIHRocm91Z2ggc3RkX3JldHVybiBhZnRlciB0aGlzIHBvaW50LiAqLwotCi0JdWRxcCA9IGdkcXAgPSBOVUxMOwogCWlmIChkcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19QUk9KSU5IRVJJVCkKIAkJcHJpZCA9IGRwLT5pX2QuZGlfcHJvamlkOwogCWVsc2UKLQkJcHJpZCA9ICh4ZnNfcHJpZF90KWRmbHRwcmlkOworCQlwcmlkID0gZGZsdHByaWQ7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGRxdW90KHMpIG9uIGRpc2suCiAJICovCiAJZXJyb3IgPSBYRlNfUU1fRFFWT1BBTExPQyhtcCwgZHAsCiAJCQljdXJyZW50X2ZzdWlkKCksIGN1cnJlbnRfZnNnaWQoKSwgcHJpZCwKLQkJCVhGU19RTU9QVF9RVU9UQUxMfFhGU19RTU9QVF9JTkhFUklULCAmdWRxcCwgJmdkcXApOworCQkJWEZTX1FNT1BUX1FVT1RBTEwgfCBYRlNfUU1PUFRfSU5IRVJJVCwgJnVkcXAsICZnZHFwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gc3RkX3JldHVybjsKIAotCWlwID0gTlVMTDsKKwlpZiAoaXNfZGlyKSB7CisJCXJkZXYgPSAwOworCQlyZXNibGtzID0gWEZTX01LRElSX1NQQUNFX1JFUyhtcCwgbmFtZS0+bGVuKTsKKwkJbG9nX3JlcyA9IFhGU19NS0RJUl9MT0dfUkVTKG1wKTsKKwkJbG9nX2NvdW50ID0gWEZTX01LRElSX0xPR19DT1VOVDsKKwkJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19NS0RJUik7CisJfSBlbHNlIHsKKwkJcmVzYmxrcyA9IFhGU19DUkVBVEVfU1BBQ0VfUkVTKG1wLCBuYW1lLT5sZW4pOworCQlsb2dfcmVzID0gWEZTX0NSRUFURV9MT0dfUkVTKG1wKTsKKwkJbG9nX2NvdW50ID0gWEZTX0NSRUFURV9MT0dfQ09VTlQ7CisJCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfQ1JFQVRFKTsKKwl9CiAKLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0NSRUFURSk7CiAJY2FuY2VsX2ZsYWdzID0gWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUzsKLQlyZXNibGtzID0gWEZTX0NSRUFURV9TUEFDRV9SRVMobXAsIG5hbWUtPmxlbik7CisKIAkvKgogCSAqIEluaXRpYWxseSBhc3N1bWUgdGhhdCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhbmQKIAkgKiByZXNlcnZlIHRoZSByZXNvdXJjZXMgZm9yIHRoYXQgY2FzZS4gIElmIHRoYXQgaXMgbm90CiAJICogdGhlIGNhc2Ugd2UnbGwgZHJvcCB0aGUgb25lIHdlIGhhdmUgYW5kIGdldCBhIG1vcmUKIAkgKiBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbiBsYXRlci4KIAkgKi8KLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCByZXNibGtzLCBYRlNfQ1JFQVRFX0xPR19SRVMobXApLCAwLAotCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgWEZTX0NSRUFURV9MT0dfQ09VTlQpOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIGxvZ19yZXMsIDAsCisJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBsb2dfY291bnQpOwogCWlmIChlcnJvciA9PSBFTk9TUEMpIHsKIAkJcmVzYmxrcyA9IDA7Ci0JCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19DUkVBVEVfTE9HX1JFUyhtcCksIDAsCi0JCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgWEZTX0NSRUFURV9MT0dfQ09VTlQpOworCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBsb2dfcmVzLCAwLAorCQkJCVhGU19UUkFOU19QRVJNX0xPR19SRVMsIGxvZ19jb3VudCk7CiAJfQogCWlmIChlcnJvcikgewogCQljYW5jZWxfZmxhZ3MgPSAwOwotCQlnb3RvIGVycm9yX3JldHVybjsKKwkJZ290byBvdXRfdHJhbnNfY2FuY2VsOwogCX0KIAogCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfUEFSRU5UKTsKIAl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX1RSVUU7CiAKLQl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7CisJLyoKKwkgKiBDaGVjayBmb3IgZGlyZWN0b3J5IGxpbmsgY291bnQgb3ZlcmZsb3cuCisJICovCisJaWYgKGlzX2RpciAmJiBkcC0+aV9kLmRpX25saW5rID49IFhGU19NQVhMSU5LKSB7CisJCWVycm9yID0gWEZTX0VSUk9SKEVNTElOSyk7CisJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKKwl9CiAKLQlBU1NFUlQoaXAgPT0gTlVMTCk7CisJeGZzX2JtYXBfaW5pdCgmZnJlZV9saXN0LCAmZmlyc3RfYmxvY2spOwogCiAJLyoKIAkgKiBSZXNlcnZlIGRpc2sgcXVvdGEgYW5kIHRoZSBpbm9kZS4KIAkgKi8KIAllcnJvciA9IFhGU19UUkFOU19SRVNFUlZFX1FVT1RBKG1wLCB0cCwgdWRxcCwgZ2RxcCwgcmVzYmxrcywgMSwgMCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycm9yX3JldHVybjsKKwkJZ290byBvdXRfdHJhbnNfY2FuY2VsOwogCiAJZXJyb3IgPSB4ZnNfZGlyX2NhbmVudGVyKHRwLCBkcCwgbmFtZSwgcmVzYmxrcyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycm9yX3JldHVybjsKLQllcnJvciA9IHhmc19kaXJfaWFsbG9jKCZ0cCwgZHAsIG1vZGUsIDEsCi0JCQlyZGV2LCBjcmVkcCwgcHJpZCwgcmVzYmxrcyA+IDAsCi0JCQkmaXAsICZjb21taXR0ZWQpOworCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CisKKwkvKgorCSAqIEEgbmV3bHkgY3JlYXRlZCByZWd1bGFyIG9yIHNwZWNpYWwgZmlsZSBqdXN0IGhhcyBvbmUgZGlyZWN0b3J5CisJICogZW50cnkgcG9pbnRpbmcgdG8gdGhlbSwgYnV0IGEgZGlyZWN0b3J5IGFsc28gdGhlICIuIiBlbnRyeQorCSAqIHBvaW50aW5nIHRvIGl0c2VsZi4KKwkgKi8KKwllcnJvciA9IHhmc19kaXJfaWFsbG9jKCZ0cCwgZHAsIG1vZGUsIGlzX2RpciA/IDIgOiAxLCByZGV2LCBjcmVkcCwKKwkJCSAgICAgICBwcmlkLCByZXNibGtzID4gMCwgJmlwLCAmY29tbWl0dGVkKTsKIAlpZiAoZXJyb3IpIHsKIAkJaWYgKGVycm9yID09IEVOT1NQQykKLQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQlnb3RvIGFib3J0X3JldHVybjsKKwkJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKKwkJZ290byBvdXRfdHJhbnNfYWJvcnQ7CiAJfQotCXhmc19pdHJhY2VfcmVmKGlwKTsKIAogCS8qCiAJICogQXQgdGhpcyBwb2ludCwgd2UndmUgZ290dGVuIGEgbmV3bHkgYWxsb2NhdGVkIGlub2RlLgogCSAqIEl0IGlzIGxvY2tlZCAoYW5kIGpvaW5lZCB0byB0aGUgdHJhbnNhY3Rpb24pLgogCSAqLwotCisJeGZzX2l0cmFjZV9yZWYoaXApOwogCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTCkpOwogCiAJLyoKQEAgLTE1MDgsMTkgKzE1MjYsMjggQEAKIAkJCQkJcmVzYmxrcyAtIFhGU19JQUxMT0NfU1BBQ0VfUkVTKG1wKSA6IDApOwogCWlmIChlcnJvcikgewogCQlBU1NFUlQoZXJyb3IgIT0gRU5PU1BDKTsKLQkJZ290byBhYm9ydF9yZXR1cm47CisJCWdvdG8gb3V0X3RyYW5zX2Fib3J0OwogCX0KIAl4ZnNfaWNoZ3RpbWUoZHAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBkcCwgWEZTX0lMT0dfQ09SRSk7CiAKKwlpZiAoaXNfZGlyKSB7CisJCWVycm9yID0geGZzX2Rpcl9pbml0KHRwLCBpcCwgZHApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ibWFwX2NhbmNlbDsKKworCQllcnJvciA9IHhmc19idW1wbGluayh0cCwgZHApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9ibWFwX2NhbmNlbDsKKwl9CisKIAkvKgogCSAqIElmIHRoaXMgaXMgYSBzeW5jaHJvbm91cyBtb3VudCwgbWFrZSBzdXJlIHRoYXQgdGhlCiAJICogY3JlYXRlIHRyYW5zYWN0aW9uIGdvZXMgdG8gZGlzayBiZWZvcmUgcmV0dXJuaW5nIHRvCiAJICogdGhlIHVzZXIuCiAJICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgKFhGU19NT1VOVF9XU1lOQ3xYRlNfTU9VTlRfRElSU1lOQykpIHsKKwlpZiAobXAtPm1fZmxhZ3MgJiAoWEZTX01PVU5UX1dTWU5DfFhGU19NT1VOVF9ESVJTWU5DKSkKIAkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQl9CiAKIAkvKgogCSAqIEF0dGFjaCB0aGUgZHF1b3QocykgdG8gdGhlIGlub2RlcyBhbmQgbW9kaWZ5IHRoZW0gaW5jb3JlLgpAQCAtMTUzNywxNiArMTU2NCwxMyBAQAogCUlIT0xEKGlwKTsKIAogCWVycm9yID0geGZzX2JtYXBfZmluaXNoKCZ0cCwgJmZyZWVfbGlzdCwgJmNvbW1pdHRlZCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKLQkJZ290byBhYm9ydF9yZWxlOwotCX0KKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2Fib3J0X3JlbGU7CiAKIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwogCWlmIChlcnJvcikgewogCQlJUkVMRShpcCk7Ci0JCXRwID0gTlVMTDsKLQkJZ290byBlcnJvcl9yZXR1cm47CisJCWdvdG8gb3V0X2RxcmVsZTsKIAl9CiAKIAlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKQEAgLTE1NTUsMjYgKzE1NzksMjIgQEAKIAkqaXBwID0gaXA7CiAKIAkvKiBGYWxsdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwICAqLwotCi1zdGRfcmV0dXJuOgotCWlmICgoKmlwcCB8fCAoZXJyb3IgIT0gMCAmJiBkbV9ldmVudF9zZW50ICE9IDApKSAmJgotCSAgICBETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUQ1JFQVRFKSkgewotCQkodm9pZCkgWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9QT1NUQ1JFQVRFLAotCQkJZHAsIERNX1JJR0hUX05VTEwsCi0JCQkqaXBwID8gaXAgOiBOVUxMLAotCQkJRE1fUklHSFRfTlVMTCwgbmFtZS0+bmFtZSwgTlVMTCwKLQkJCW1vZGUsIGVycm9yLCAwKTsKKyBzdGRfcmV0dXJuOgorCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUQ1JFQVRFKSkgeworCQlYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RDUkVBVEUsIGRwLCBETV9SSUdIVF9OVUxMLAorCQkJCWlwLCBETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLCBtb2RlLAorCQkJCWVycm9yLCAwKTsKIAl9CisKIAlyZXR1cm4gZXJyb3I7CiAKLSBhYm9ydF9yZXR1cm46Cisgb3V0X2JtYXBfY2FuY2VsOgorCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKKyBvdXRfdHJhbnNfYWJvcnQ6CiAJY2FuY2VsX2ZsYWdzIHw9IFhGU19UUkFOU19BQk9SVDsKLQkvKiBGQUxMVEhST1VHSCAqLwotCi0gZXJyb3JfcmV0dXJuOgotCWlmICh0cCAhPSBOVUxMKQotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwotCisgb3V0X3RyYW5zX2NhbmNlbDoKKwl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOworIG91dF9kcXJlbGU6CiAJWEZTX1FNX0RRUkVMRShtcCwgdWRxcCk7CiAJWEZTX1FNX0RRUkVMRShtcCwgZ2RxcCk7CiAKQEAgLTE1ODMsMjAgKzE2MDMsMTggQEAKIAogCWdvdG8gc3RkX3JldHVybjsKIAotIGFib3J0X3JlbGU6Cisgb3V0X2Fib3J0X3JlbGU6CiAJLyoKIAkgKiBXYWl0IHVudGlsIGFmdGVyIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgdG8KIAkgKiByZWxlYXNlIHRoZSBpbm9kZS4gIFRoaXMgcHJldmVudHMgcmVjdXJzaXZlIHRyYW5zYWN0aW9ucwogCSAqIGFuZCBkZWFkbG9ja3MgZnJvbSB4ZnNfaW5hY3RpdmUuCiAJICovCisJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwogCWNhbmNlbF9mbGFncyB8PSBYRlNfVFJBTlNfQUJPUlQ7CiAJeGZzX3RyYW5zX2NhbmNlbCh0cCwgY2FuY2VsX2ZsYWdzKTsKIAlJUkVMRShpcCk7Ci0KLQlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKLQlYRlNfUU1fRFFSRUxFKG1wLCBnZHFwKTsKLQotCWdvdG8gc3RkX3JldHVybjsKKwl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX0ZBTFNFOworCWdvdG8gb3V0X2RxcmVsZTsKIH0KIAogI2lmZGVmIERFQlVHCkBAIC0yMDA0LDggKzIwMjIsMTAgQEAKIAkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKIAllcnJvciA9IFhGU19RTV9EUUFUVEFDSChtcCwgc2lwLCAwKTsKLQlpZiAoIWVycm9yICYmIHNpcCAhPSB0ZHApCi0JCWVycm9yID0gWEZTX1FNX0RRQVRUQUNIKG1wLCB0ZHAsIDApOworCWlmIChlcnJvcikKKwkJZ290byBzdGRfcmV0dXJuOworCisJZXJyb3IgPSBYRlNfUU1fRFFBVFRBQ0gobXAsIHRkcCwgMCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIHN0ZF9yZXR1cm47CiAKQEAgLTIxMTAsMjA5ICsyMTMwLDYgQEAKIAlnb3RvIHN0ZF9yZXR1cm47CiB9CiAKLQotaW50Ci14ZnNfbWtkaXIoCi0JeGZzX2lub2RlX3QgICAgICAgICAgICAgKmRwLAotCXN0cnVjdCB4ZnNfbmFtZQkJKmRpcl9uYW1lLAotCW1vZGVfdAkJCW1vZGUsCi0JeGZzX2lub2RlX3QJCSoqaXBwLAotCWNyZWRfdAkJCSpjcmVkcCkKLXsKLQl4ZnNfbW91bnRfdAkJKm1wID0gZHAtPmlfbW91bnQ7Ci0JeGZzX2lub2RlX3QJCSpjZHA7CS8qIGlub2RlIG9mIGNyZWF0ZWQgZGlyICovCi0JeGZzX3RyYW5zX3QJCSp0cDsKLQlpbnQJCQljYW5jZWxfZmxhZ3M7Ci0JaW50CQkJZXJyb3I7Ci0JaW50CQkJY29tbWl0dGVkOwotCXhmc19ibWFwX2ZyZWVfdCAgICAgICAgIGZyZWVfbGlzdDsKLQl4ZnNfZnNibG9ja190ICAgICAgICAgICBmaXJzdF9ibG9jazsKLQlib29sZWFuX3QJCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7Ci0JYm9vbGVhbl90CQljcmVhdGVkID0gQl9GQUxTRTsKLQlpbnQJCQlkbV9ldmVudF9zZW50ID0gMDsKLQl4ZnNfcHJpZF90CQlwcmlkOwotCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAsICpnZHFwOwotCXVpbnQJCQlyZXNibGtzOwotCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQl0cCA9IE5VTEw7Ci0KLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfQ1JFQVRFKSkgewotCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfQ1JFQVRFLAotCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwgTlVMTCwKLQkJCQkJRE1fUklHSFRfTlVMTCwgZGlyX25hbWUtPm5hbWUsIE5VTEwsCi0JCQkJCW1vZGUsIDAsIDApOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JCWRtX2V2ZW50X3NlbnQgPSAxOwotCX0KLQotCS8qIFJldHVybiB0aHJvdWdoIHN0ZF9yZXR1cm4gYWZ0ZXIgdGhpcyBwb2ludC4gKi8KLQotCXhmc19pdHJhY2VfZW50cnkoZHApOwotCi0JbXAgPSBkcC0+aV9tb3VudDsKLQl1ZHFwID0gZ2RxcCA9IE5VTEw7Ci0JaWYgKGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKQotCQlwcmlkID0gZHAtPmlfZC5kaV9wcm9qaWQ7Ci0JZWxzZQotCQlwcmlkID0gKHhmc19wcmlkX3QpZGZsdHByaWQ7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYWxsb2NhdGVkIGRxdW90KHMpIG9uIGRpc2suCi0JICovCi0JZXJyb3IgPSBYRlNfUU1fRFFWT1BBTExPQyhtcCwgZHAsCi0JCQljdXJyZW50X2ZzdWlkKCksIGN1cnJlbnRfZnNnaWQoKSwgcHJpZCwKLQkJCVhGU19RTU9QVF9RVU9UQUxMIHwgWEZTX1FNT1BUX0lOSEVSSVQsICZ1ZHFwLCAmZ2RxcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIHN0ZF9yZXR1cm47Ci0KLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX01LRElSKTsKLQljYW5jZWxfZmxhZ3MgPSBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTOwotCXJlc2Jsa3MgPSBYRlNfTUtESVJfU1BBQ0VfUkVTKG1wLCBkaXJfbmFtZS0+bGVuKTsKLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCByZXNibGtzLCBYRlNfTUtESVJfTE9HX1JFUyhtcCksIDAsCi0JCQkJICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfTUtESVJfTE9HX0NPVU5UKTsKLQlpZiAoZXJyb3IgPT0gRU5PU1BDKSB7Ci0JCXJlc2Jsa3MgPSAwOwotCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfTUtESVJfTE9HX1JFUyhtcCksIDAsCi0JCQkJCSAgWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywKLQkJCQkJICBYRlNfTUtESVJfTE9HX0NPVU5UKTsKLQl9Ci0JaWYgKGVycm9yKSB7Ci0JCWNhbmNlbF9mbGFncyA9IDA7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCX0KLQotCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfUEFSRU5UKTsKLQl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX1RSVUU7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBkaXJlY3RvcnkgbGluayBjb3VudCBvdmVyZmxvdy4KLQkgKi8KLQlpZiAoZHAtPmlfZC5kaV9ubGluayA+PSBYRlNfTUFYTElOSykgewotCQllcnJvciA9IFhGU19FUlJPUihFTUxJTkspOwotCQlnb3RvIGVycm9yX3JldHVybjsKLQl9Ci0KLQkvKgotCSAqIFJlc2VydmUgZGlzayBxdW90YSBhbmQgdGhlIGlub2RlLgotCSAqLwotCWVycm9yID0gWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEEobXAsIHRwLCB1ZHFwLCBnZHFwLCByZXNibGtzLCAxLCAwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCi0JZXJyb3IgPSB4ZnNfZGlyX2NhbmVudGVyKHRwLCBkcCwgZGlyX25hbWUsIHJlc2Jsa3MpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0JLyoKLQkgKiBjcmVhdGUgdGhlIGRpcmVjdG9yeSBpbm9kZS4KLQkgKi8KLQllcnJvciA9IHhmc19kaXJfaWFsbG9jKCZ0cCwgZHAsIG1vZGUsIDIsCi0JCQkwLCBjcmVkcCwgcHJpZCwgcmVzYmxrcyA+IDAsCi0JCSZjZHAsIE5VTEwpOwotCWlmIChlcnJvcikgewotCQlpZiAoZXJyb3IgPT0gRU5PU1BDKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCWdvdG8gYWJvcnRfcmV0dXJuOwotCX0KLQl4ZnNfaXRyYWNlX3JlZihjZHApOwotCi0JLyoKLQkgKiBOb3cgd2UgYWRkIHRoZSBkaXJlY3RvcnkgaW5vZGUgdG8gdGhlIHRyYW5zYWN0aW9uLgotCSAqIFdlIHdhaXRlZCB1bnRpbCBub3cgc2luY2UgeGZzX2Rpcl9pYWxsb2MgbWlnaHQgc3RhcnQKLQkgKiBhIG5ldyB0cmFuc2FjdGlvbi4gIEhhZCB3ZSBqb2luZWQgdGhlIHRyYW5zYWN0aW9uCi0JICogZWFybGllciwgdGhlIGxvY2tzIG1pZ2h0IGhhdmUgZ290dGVuIHJlbGVhc2VkLiBBbiBlcnJvcgotCSAqIGZyb20gaGVyZSBvbiB3aWxsIHJlc3VsdCBpbiB0aGUgdHJhbnNhY3Rpb24gY2FuY2VsCi0JICogdW5sb2NraW5nIGRwIHNvIGRvbid0IGRvIGl0IGV4cGxpY2l0bHkgaW4gdGhlIGVycm9yIHBhdGguCi0JICovCi0JSUhPTEQoZHApOwotCXhmc190cmFuc19pam9pbih0cCwgZHAsIFhGU19JTE9DS19FWENMKTsKLQl1bmxvY2tfZHBfb25fZXJyb3IgPSBCX0ZBTFNFOwotCi0JeGZzX2JtYXBfaW5pdCgmZnJlZV9saXN0LCAmZmlyc3RfYmxvY2spOwotCi0JZXJyb3IgPSB4ZnNfZGlyX2NyZWF0ZW5hbWUodHAsIGRwLCBkaXJfbmFtZSwgY2RwLT5pX2lubywKLQkJCQkJJmZpcnN0X2Jsb2NrLCAmZnJlZV9saXN0LCByZXNibGtzID8KLQkJCQkJcmVzYmxrcyAtIFhGU19JQUxMT0NfU1BBQ0VfUkVTKG1wKSA6IDApOwotCWlmIChlcnJvcikgewotCQlBU1NFUlQoZXJyb3IgIT0gRU5PU1BDKTsKLQkJZ290byBlcnJvcjE7Ci0JfQotCXhmc19pY2hndGltZShkcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwotCi0JZXJyb3IgPSB4ZnNfZGlyX2luaXQodHAsIGNkcCwgZHApOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjI7Ci0KLQllcnJvciA9IHhmc19idW1wbGluayh0cCwgZHApOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjI7Ci0KLQljcmVhdGVkID0gQl9UUlVFOwotCi0JKmlwcCA9IGNkcDsKLQlJSE9MRChjZHApOwotCi0JLyoKLQkgKiBBdHRhY2ggdGhlIGRxdW90cyB0byB0aGUgbmV3IGlub2RlIGFuZCBtb2RpZnkgdGhlIGljb3VudCBpbmNvcmUuCi0JICovCi0JWEZTX1FNX0RRVk9QQ1JFQVRFKG1wLCB0cCwgY2RwLCB1ZHFwLCBnZHFwKTsKLQotCS8qCi0JICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKLQkgKiBta2RpciB0cmFuc2FjdGlvbiBnb2VzIHRvIGRpc2sgYmVmb3JlIHJldHVybmluZyB0bwotCSAqIHRoZSB1c2VyLgotCSAqLwotCWlmIChtcC0+bV9mbGFncyAmIChYRlNfTU9VTlRfV1NZTkN8WEZTX01PVU5UX0RJUlNZTkMpKSB7Ci0JCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JfQotCi0JZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZnJlZV9saXN0LCAmY29tbWl0dGVkKTsKLQlpZiAoZXJyb3IpIHsKLQkJSVJFTEUoY2RwKTsKLQkJZ290byBlcnJvcjI7Ci0JfQotCi0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTKTsKLQlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKLQlYRlNfUU1fRFFSRUxFKG1wLCBnZHFwKTsKLQlpZiAoZXJyb3IpIHsKLQkJSVJFTEUoY2RwKTsKLQl9Ci0KLQkvKiBGYWxsIHRocm91Z2ggdG8gc3RkX3JldHVybiB3aXRoIGVycm9yID0gMCBvciBlcnJubyBmcm9tCi0JICogeGZzX3RyYW5zX2NvbW1pdC4gKi8KLQotc3RkX3JldHVybjoKLQlpZiAoKGNyZWF0ZWQgfHwgKGVycm9yICE9IDAgJiYgZG1fZXZlbnRfc2VudCAhPSAwKSkgJiYKLQkgICAgRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfUE9TVENSRUFURSkpIHsKLQkJKHZvaWQpIFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVENSRUFURSwKLQkJCQkJZHAsIERNX1JJR0hUX05VTEwsCi0JCQkJCWNyZWF0ZWQgPyBjZHAgOiBOVUxMLAotCQkJCQlETV9SSUdIVF9OVUxMLAotCQkJCQlkaXJfbmFtZS0+bmFtZSwgTlVMTCwKLQkJCQkJbW9kZSwgZXJyb3IsIDApOwotCX0KLQlyZXR1cm4gZXJyb3I7Ci0KLSBlcnJvcjI6Ci0gZXJyb3IxOgotCXhmc19ibWFwX2NhbmNlbCgmZnJlZV9saXN0KTsKLSBhYm9ydF9yZXR1cm46Ci0JY2FuY2VsX2ZsYWdzIHw9IFhGU19UUkFOU19BQk9SVDsKLSBlcnJvcl9yZXR1cm46Ci0JeGZzX3RyYW5zX2NhbmNlbCh0cCwgY2FuY2VsX2ZsYWdzKTsKLQlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKLQlYRlNfUU1fRFFSRUxFKG1wLCBnZHFwKTsKLQotCWlmICh1bmxvY2tfZHBfb25fZXJyb3IpCi0JCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlnb3RvIHN0ZF9yZXR1cm47Ci19Ci0KIGludAogeGZzX3N5bWxpbmsoCiAJeGZzX2lub2RlX3QJCSpkcCwKQEAgLTI1ODcsNTEgKzI0MDQsNiBAQAogfQogCiBpbnQKLXhmc19pbm9kZV9mbHVzaCgKLQl4ZnNfaW5vZGVfdAkqaXAsCi0JaW50CQlmbGFncykKLXsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQlpbnQJCWVycm9yID0gMDsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCi0JLyoKLQkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKLQkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCi0JICovCi0JaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsCi0JICogcmV0dXJuIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleQotCSAqIGRpZCBub3Qgc3VjY2VlZC4gVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tCi0JICogYmxvY2tpbmcgb24gaW5vZGVzIGluc2lkZSBhbm90aGVyIG9wZXJhdGlvbiByaWdodAotCSAqIG5vdywgdGhleSBnZXQgY2F1Z2h0IGxhdGVyIGJ5IHhmc19zeW5jLgotCSAqLwotCWlmIChmbGFncyAmIEZMVVNIX1NZTkMpIHsKLQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJeGZzX2lmbG9jayhpcCk7Ci0JfSBlbHNlIGlmICh4ZnNfaWxvY2tfbm93YWl0KGlwLCBYRlNfSUxPQ0tfU0hBUkVEKSkgewotCQlpZiAoeGZzX2lwaW5jb3VudChpcCkgfHwgIXhmc19pZmxvY2tfbm93YWl0KGlwKSkgewotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQkJcmV0dXJuIEVBR0FJTjsKLQkJfQotCX0gZWxzZSB7Ci0JCXJldHVybiBFQUdBSU47Ci0JfQotCi0JZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCAoZmxhZ3MgJiBGTFVTSF9TWU5DKSA/IFhGU19JRkxVU0hfU1lOQwotCQkJCQkJICAgIDogWEZTX0lGTFVTSF9BU1lOQ19OT0JMT0NLKTsKLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLQotaW50CiB4ZnNfc2V0X2RtYXR0cnMoCiAJeGZzX2lub2RlX3QgICAgICppcCwKIAl1X2ludAkJZXZtYXNrLApAQCAtMjY3Niw3ICsyNDQ4LDcgQEAKIAlBU1NFUlQoIVZOX01BUFBFRChWRlNfSShpcCkpKTsKIAogCS8qIGJhZCBpbm9kZSwgZ2V0IG91dCBoZXJlIEFTQVAgKi8KLQlpZiAoVk5fQkFEKFZGU19JKGlwKSkpIHsKKwlpZiAoaXNfYmFkX2lub2RlKFZGU19JKGlwKSkpIHsKIAkJeGZzX2lyZWNsYWltKGlwKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzA5MCw3ICsyODYyLDcgQEAKIAogCS8qCiAJICogTmVlZCB0byB6ZXJvIHRoZSBzdHVmZiB3ZSdyZSBub3QgZnJlZWluZywgb24gZGlzay4KLQkgKiBJZiBpdHMgYSByZWFsdGltZSBmaWxlICYgY2FuJ3QgdXNlIHVud3JpdHRlbiBleHRlbnRzIHRoZW4gd2UKKwkgKiBJZiBpdCdzIGEgcmVhbHRpbWUgZmlsZSAmIGNhbid0IHVzZSB1bndyaXR0ZW4gZXh0ZW50cyB0aGVuIHdlCiAJICogYWN0dWFsbHkgbmVlZCB0byB6ZXJvIHRoZSBleHRlbnQgZWRnZXMuICBPdGhlcndpc2UgeGZzX2J1bm1hcGkKIAkgKiB3aWxsIHRha2UgY2FyZSBvZiBpdCBmb3IgdXMuCiAJICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmggYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKaW5kZXggNzZkZjMyOC4uMDQzNzNjNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5oCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaApAQCAtMzEsMTQgKzMxLDExIEBACiAJCXN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGludCB4ZnNfbGluayhzdHJ1Y3QgeGZzX2lub2RlICp0ZHAsIHN0cnVjdCB4ZnNfaW5vZGUgKnNpcCwKIAkJc3RydWN0IHhmc19uYW1lICp0YXJnZXRfbmFtZSk7Ci1pbnQgeGZzX21rZGlyKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBzdHJ1Y3QgeGZzX25hbWUgKmRpcl9uYW1lLAotCQltb2RlX3QgbW9kZSwgc3RydWN0IHhmc19pbm9kZSAqKmlwcCwgY3JlZF90ICpjcmVkcCk7CiBpbnQgeGZzX3JlYWRkaXIoc3RydWN0IHhmc19pbm9kZQkqZHAsIHZvaWQgKmRpcmVudCwgc2l6ZV90IGJ1ZnNpemUsCiAJCSAgICAgICB4ZnNfb2ZmX3QgKm9mZnNldCwgZmlsbGRpcl90IGZpbGxkaXIpOwogaW50IHhmc19zeW1saW5rKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBzdHJ1Y3QgeGZzX25hbWUgKmxpbmtfbmFtZSwKIAkJY29uc3QgY2hhciAqdGFyZ2V0X3BhdGgsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgeGZzX2lub2RlICoqaXBwLAogCQljcmVkX3QgKmNyZWRwKTsKLWludCB4ZnNfaW5vZGVfZmx1c2goc3RydWN0IHhmc19pbm9kZSAqaXAsIGludCBmbGFncyk7CiBpbnQgeGZzX3NldF9kbWF0dHJzKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB1X2ludCBldm1hc2ssIHVfaW50MTZfdCBzdGF0ZSk7CiBpbnQgeGZzX3JlY2xhaW0oc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19jaGFuZ2VfZmlsZV9zcGFjZShzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IGNtZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oCmluZGV4IDI2Y2VmY2QuLjY4ZTQ2NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaApAQCAtMTgsNiArMTgsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8YXNtL21lbS1sYXlvdXQuaD4KICNpbmNsdWRlIDxhc20vc3ByLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWItcmVncy5oPgpAQCAtMTE2LDYgKzExNyw3IEBACiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CiAJcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSk7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg5NDg2Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDggKzAsMCBAQAotLyogQ29weXJpZ2h0IChDKSAyMDAyIGJ5IEphbWVzLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20gCi0gKgotICogSW1wbGVtZW50cyB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hIEFQSSB2aWEgdGhlIGV4aXN0aW5nIHBjaV8gb25lCi0gKiBmb3IgdW5jb252ZXJ0ZWQgYXJjaGl0ZWN0dXJlcwotICovCi0KLSNpZm5kZWYgX0FTTV9HRU5FUklDX0RNQV9NQVBQSU5HX0gKLSNkZWZpbmUgX0FTTV9HRU5FUklDX0RNQV9NQVBQSU5HX0gKLQotCi0jaWZkZWYgQ09ORklHX1BDSQotCi0vKiB3ZSBpbXBsZW1lbnQgdGhlIEFQSSBiZWxvdyBpbiB0ZXJtcyBvZiB0aGUgZXhpc3RpbmcgUENJIG9uZSwKLSAqIHNvIGluY2x1ZGUgaXQgKi8KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLS8qIG5lZWQgc3RydWN0IHBhZ2UgZGVmaW5pdGlvbnMgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXJldHVybiBwY2lfZG1hX3N1cHBvcnRlZCh0b19wY2lfZGV2KGRldiksIG1hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHRvX3BjaV9kZXYoZGV2KSwgZG1hX21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKgotZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCi0JCSAgIGdmcF90IGZsYWcpCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9hbGxvY19jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgZG1hX2hhbmRsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCi0JCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudCh0b19wY2lfZGV2KGRldiksIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXJldHVybiBwY2lfbWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGNwdV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAotCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV91bm1hcF9zaW5nbGUodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkciwgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXJldHVybiBwY2lfbWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBwYWdlLCBvZmZzZXQsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcGNpX3VubWFwX3BhZ2UodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkcmVzcywgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmVudHMsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfdW5tYXBfc2codG9fcGNpX2RldihkZXYpLCBzZywgbmh3ZW50cmllcywgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUodG9fcGNpX2RldihkZXYpLCBkbWFfaGFuZGxlLAotCQkJCSAgICBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCi0JCQkJICAgICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZSh0b19wY2lfZGV2KGRldiksIHNnLCBuZWxlbXMsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHRvX3BjaV9kZXYoZGV2KSwgZG1hX2FkZHIpOwotfQotCi0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCi17Ci0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJICAgZ2ZwX3QgZmxhZykKLXsKLQlCVUcoKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKLQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSBkbWFfYWRkcl90Ci1kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKLQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi0vKiBOb3cgZm9yIHRoZSBBUEkgZXh0ZW5zaW9ucyBvdmVyIHRoZSBwY2lfIG9uZSAqLwotCi0jZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKLSNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCBwcm9jZXNzb3JzLCBzbyByZXR1cm4KLQkgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZSAqLwotCXJldHVybiAoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nLCB0aGF0J3MgYWxsIHRoZSBwY2kgQVBJIGNhbiBkbyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0K3NpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIGp1c3Qgc3luYyBldmVyeXRoaW5nLCB0aGF0J3MgYWxsIHRoZSBwY2kgQVBJIGNhbiBkbyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0K3NpemUsIGRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQkvKiBjb3VsZCBkZWZpbmUgdGhpcyBpbiB0ZXJtcyBvZiB0aGUgZG1hX2NhY2hlIC4uLiBvcGVyYXRpb25zLAotCSAqIGJ1dCBpZiB5b3UgZ2V0IHRoaXMgb24gYSBwbGF0Zm9ybSwgeW91IHNob3VsZCBjb252ZXJ0IHRoZSBwbGF0Zm9ybQotCSAqIHRvIHVzaW5nIHRoZSBnZW5lcmljIGRldmljZSBETUEgQVBJICovCi0JQlVHKCk7Ci19Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDgxNzk3ZWMuLmQ2YzM3OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC01NSw2ICs1NSwxMCBAQAogICoJaGFuZGxlZCBpcyAoYmFzZSArIG5ncGlvIC0gMSkuCiAgKiBAY2FuX3NsZWVwOiBmbGFnIG11c3QgYmUgc2V0IGlmZiBnZXQoKS9zZXQoKSBtZXRob2RzIHNsZWVwLCBhcyB0aGV5CiAgKgltdXN0IHdoaWxlIGFjY2Vzc2luZyBHUElPIGV4cGFuZGVyIGNoaXBzIG92ZXIgSTJDIG9yIFNQSQorICogQG5hbWVzOiBpZiBzZXQsIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byB1c2UgYXMgYWx0ZXJuYXRpdmUKKyAqICAgICAgbmFtZXMgZm9yIHRoZSBHUElPcyBpbiB0aGlzIGNoaXAuIEFueSBlbnRyeSBpbiB0aGUgYXJyYXkKKyAqICAgICAgbWF5IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gYWxpYXMgZm9yIHRoZSBHUElPLCBob3dldmVyIHRoZQorICogICAgICBhcnJheSBtdXN0IGJlIEBuZ3BpbyBlbnRyaWVzIGxvbmcuCiAgKgogICogQSBncGlvX2NoaXAgY2FuIGhlbHAgcGxhdGZvcm1zIGFic3RyYWN0IHZhcmlvdXMgc291cmNlcyBvZiBHUElPcyBzbwogICogdGhleSBjYW4gYWxsIGJlIGFjY2Vzc2VkIHRocm91Z2ggYSBjb21tb24gcHJvZ3JhbWluZyBpbnRlcmZhY2UuCkBAIC05Miw2ICs5Niw3IEBACiAJCQkJCQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKIAlpbnQJCQliYXNlOwogCXUxNgkJCW5ncGlvOworCWNoYXIJCQkqKm5hbWVzOwogCXVuc2lnbmVkCQljYW5fc2xlZXA6MTsKIAl1bnNpZ25lZAkJZXhwb3J0ZWQ6MTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKaW5kZXggMGU5ZTJiYy4uODhiYWRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApAQCAtNDMsMjAgKzQzLDEwIEBACiAjaWZuZGVmIGNwdW1hc2tfb2Zfbm9kZQogI2RlZmluZSBjcHVtYXNrX29mX25vZGUobm9kZSkJKCh2b2lkKW5vZGUsIGNwdV9vbmxpbmVfbWFzaykKICNlbmRpZgotI2lmbmRlZiBub2RlX3RvX2ZpcnN0X2NwdQotI2RlZmluZSBub2RlX3RvX2ZpcnN0X2NwdShub2RlKQkoKHZvaWQpKG5vZGUpLDApCi0jZW5kaWYKICNpZm5kZWYgcGNpYnVzX3RvX25vZGUKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKQkoKHZvaWQpKGJ1cyksIC0xKQogI2VuZGlmCiAKLSNpZm5kZWYgcGNpYnVzX3RvX2NwdW1hc2sKLSNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkJCQkJQ1BVX01BU0tfQUxMIDogXAotCQkJCQlub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkgXAotCQkJCSkKLSNlbmRpZgotCiAjaWZuZGVmIGNwdW1hc2tfb2ZfcGNpYnVzCiAjZGVmaW5lIGNwdW1hc2tfb2ZfcGNpYnVzKGJ1cykJKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPwkJXAogCQkJCSBjcHVfYWxsX21hc2sgOgkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKaW5kZXggZjVjZmJhOC4uZGRlZDkyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaApAQCAtMzE2LDYgKzMxNiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2hpZ2htZW0uaAppbmRleCA1MjU2ODU0Li45MGYyYWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2hpZ2htZW0uaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKQEAgLTc3LDYgKzc4LDcgQEAKIAlpZiAocGFnZSA8IGhpZ2htZW1fc3RhcnRfcGFnZSkKIAkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAorCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAjaWYgSElHSE1FTV9ERUJVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGMxOWE5M2MuLmM4YzQyMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTI4MSwxNiArMjgxLDE2IEBACiAKIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB7CiAJdW5zaWduZWQgaW50IGNtZDsKLQlkcm1faW9jdGxfdCAqZnVuYzsKIAlpbnQgZmxhZ3M7CisJZHJtX2lvY3RsX3QgKmZ1bmM7CiB9OwogCiAvKioKICAqIENyZWF0ZXMgYSBkcml2ZXIgb3IgZ2VuZXJhbCBkcm1faW9jdGxfZGVzYyBhcnJheSBlbnRyeSBmb3IgdGhlIGdpdmVuCiAgKiBpb2N0bCwgZm9yIHVzZSBieSBkcm1faW9jdGwoKS4KICAqLwotI2RlZmluZSBEUk1fSU9DVExfREVGKGlvY3RsLCBmdW5jLCBmbGFncykgXAotCVtEUk1fSU9DVExfTlIoaW9jdGwpXSA9IHtpb2N0bCwgZnVuYywgZmxhZ3N9CisjZGVmaW5lIERSTV9JT0NUTF9ERUYoaW9jdGwsIF9mdW5jLCBfZmxhZ3MpIFwKKwlbRFJNX0lPQ1RMX05SKGlvY3RsKV0gPSB7LmNtZCA9IGlvY3RsLCAuZnVuYyA9IF9mdW5jLCAuZmxhZ3MgPSBfZmxhZ3N9CiAKIHN0cnVjdCBkcm1fbWFnaWNfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKQEAgLTUyMywxOSArNTIzLDMyIEBACiAKIAogLyoqCisgKiBLZXJuZWwgc2lkZSBvZiBhIG1hcHBpbmcKKyAqLworc3RydWN0IGRybV9sb2NhbF9tYXAgeworCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CSAvKio8IFJlcXVlc3RlZCBwaHlzaWNhbCBhZGRyZXNzICgwIGZvciBTQVJFQSkqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWVudW0gZHJtX21hcF90eXBlIHR5cGU7CSAvKio8IFR5cGUgb2YgbWVtb3J5IHRvIG1hcCAqLworCWVudW0gZHJtX21hcF9mbGFncyBmbGFnczsJIC8qKjwgRmxhZ3MgKi8KKwl2b2lkICpoYW5kbGU7CQkgLyoqPCBVc2VyLXNwYWNlOiAiSGFuZGxlIiB0byBwYXNzIHRvIG1tYXAoKSAqLworCQkJCSAvKio8IEtlcm5lbC1zcGFjZToga2VybmVsLXZpcnR1YWwgYWRkcmVzcyAqLworCWludCBtdHJyOwkJIC8qKjwgTVRSUiBzbG90IHVzZWQgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGRybV9sb2NhbF9tYXAgZHJtX2xvY2FsX21hcF90OworCisvKioKICAqIE1hcHBpbmdzIGxpc3QKICAqLwogc3RydWN0IGRybV9tYXBfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwkJLyoqPCBsaXN0IGhlYWQgKi8KIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSBoYXNoOwotCXN0cnVjdCBkcm1fbWFwICptYXA7CQkJLyoqPCBtYXBwaW5nICovCisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcDsJLyoqPCBtYXBwaW5nICovCiAJdWludDY0X3QgdXNlcl90b2tlbjsKIAlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZmlsZV9vZmZzZXRfbm9kZTsJLyoqPCBmYWtlIG9mZnNldCAqLwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcCBkcm1fbG9jYWxfbWFwX3Q7Ci0KIC8qKgogICogQ29udGV4dCBoYW5kbGUgbGlzdAogICovCkBAIC01NjAsNyArNTczLDcgQEAKIAlkbWFfYWRkcl90IGJ1c19hZGRyOwogCWRtYV9hZGRyX3QgdGFibGVfbWFzazsKIAlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnRhYmxlX2hhbmRsZTsKLQlkcm1fbG9jYWxfbWFwX3QgbWFwcGluZzsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCBtYXBwaW5nOwogCWludCB0YWJsZV9zaXplOwogfTsKIApAQCAtNjc1LDcgKzY4OCw2IEBACiAJaW50ICgqa2VybmVsX2NvbnRleHRfc3dpdGNoKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG9sZCwKIAkJCQkgICAgICBpbnQgbmV3KTsKIAl2b2lkICgqa2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jaykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotCWludCAoKmRyaV9saWJyYXJ5X25hbWUpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpidWYpOwogCiAJLyoqCiAJICogZ2V0X3ZibGFua19jb3VudGVyIC0gZ2V0IHJhdyBoYXJkd2FyZSB2YmxhbmsgY291bnRlcgpAQCAtNzQ3LDggKzc1OSw4IEBACiAJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzX2lkbGVsb2NrZWQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfbWFwX29mcykgKHN0cnVjdCBkcm1fbWFwICogbWFwKTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X3JlZ19vZnMpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwlyZXNvdXJjZV9zaXplX3QgKCpnZXRfbWFwX29mcykgKHN0cnVjdCBkcm1fbG9jYWxfbWFwICogbWFwKTsKKwlyZXNvdXJjZV9zaXplX3QgKCpnZXRfcmVnX29mcykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCXZvaWQgKCpzZXRfdmVyc2lvbikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24gKnN2KTsKIApAQCAtOTgxLDcgKzk5Myw3IEBACiAJc2lnc2V0X3Qgc2lnbWFzazsKIAogCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXI7Ci0JZHJtX2xvY2FsX21hcF90ICphZ3BfYnVmZmVyX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqYWdwX2J1ZmZlcl9tYXA7CiAJdW5zaWduZWQgaW50IGFncF9idWZmZXJfdG9rZW47CiAJc3RydWN0IGRybV9taW5vciAqY29udHJvbDsJCS8qKjwgQ29udHJvbCBub2RlIGZvciBjYXJkICovCiAJc3RydWN0IGRybV9taW5vciAqcHJpbWFyeTsJCS8qKjwgcmVuZGVyIHR5cGUgcHJpbWFyeSBzY3JlZW4gaGVhZCAqLwpAQCAtMTA5OCw4ICsxMTEwLDggQEAKIGV4dGVybiBpbnQgZHJtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBpbnQgZHJtX21tYXBfbG9ja2VkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBleHRlcm4gdm9pZCBkcm1fdm1fb3Blbl9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoc3RydWN0IGRybV9tYXAgKiBtYXApOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9jb3JlX2dldF9tYXBfb2ZzKHN0cnVjdCBkcm1fbG9jYWxfbWFwICogbWFwKTsKK2V4dGVybiByZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdW5zaWduZWQgaW50IGRybV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogCiAJCQkJLyogTWVtb3J5IG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX21lbW9yeS5oKSAqLwpAQCAtMTIwMiwxMyArMTIxNCwxMyBAQAogCQkJCS8qIEJ1ZmZlciBtYW5hZ2VtZW50IHN1cHBvcnQgKGRybV9idWZzLmgpICovCiBleHRlcm4gaW50IGRybV9hZGRidWZzX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1Zl9kZXNjICogcmVxdWVzdCk7CiBleHRlcm4gaW50IGRybV9hZGRidWZzX3BjaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1Zl9kZXNjICogcmVxdWVzdCk7Ci1leHRlcm4gaW50IGRybV9hZGRtYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2V4dGVybiBpbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBkcm1fbWFwX3R5cGUgdHlwZSwKLQkJICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiogbWFwX3B0cik7CisJCSAgICAgIGVudW0gZHJtX21hcF9mbGFncyBmbGFncywgc3RydWN0IGRybV9sb2NhbF9tYXAgKiptYXBfcHRyKTsKIGV4dGVybiBpbnQgZHJtX2FkZG1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgZHJtX3JtbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKTsKLWV4dGVybiBpbnQgZHJtX3JtbWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCk7CitleHRlcm4gaW50IGRybV9ybW1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKTsKK2V4dGVybiBpbnQgZHJtX3JtbWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKTsKIGV4dGVybiBpbnQgZHJtX3JtbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9hZGRidWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0xMjIyLDEwICsxMjM0LDEwIEBACiBleHRlcm4gaW50IGRybV9tYXBidWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9zdGFydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorZXh0ZXJuIHJlc291cmNlX3NpemVfdCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7CitleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9nZXRfcmVzb3VyY2VfbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpOwogCiAJCQkJLyogRE1BIHN1cHBvcnQgKGRybV9kbWEuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2RtYV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTEzMDEsNyArMTMxMyw3IEBACiBleHRlcm4gdm9pZCBkcm1fbWFzdGVyX3B1dChzdHJ1Y3QgZHJtX21hc3RlciAqKm1hc3Rlcik7CiBleHRlcm4gaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAogCQkgICAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50IGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX3B1dF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJtX2RlYnVnOwogCkBAIC0xMzExLDcgKzEzMjMsNyBAQAogCiBleHRlcm4gc3RydWN0IGlkciBkcm1fbWlub3JzX2lkcjsKIAotZXh0ZXJuIGRybV9sb2NhbF9tYXBfdCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBkcm1fbG9jYWxfbWFwICpkcm1fZ2V0c2FyZWEoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIAkJCQkvKiBQcm9jIHN1cHBvcnQgKGRybV9wcm9jLmgpICovCiBleHRlcm4gaW50IGRybV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKQEAgLTE0NTMsMTIgKzE0NjUsMTIgQEAKIHZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIHZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIAotZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkcm1fbWFwICpkcm1fY29yZV9maW5kbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdG9rZW4pCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqZHJtX2NvcmVfZmluZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJCSB1bnNpZ25lZCBpbnQgdG9rZW4pCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqX2VudHJ5OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoX2VudHJ5LCAmZGV2LT5tYXBsaXN0LCBoZWFkKQpAQCAtMTQ4NSw3ICsxNDk3LDcgQEAKIAlyZXR1cm4gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBkcm1fY29yZV9kcm9wbWFwKHN0cnVjdCBkcm1fbWFwICptYXApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2Ryb3BtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggNWRlZDFhYy4uM2MxOTI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC01NTAsNyArNTUwLDcgQEAKIAlpbnQgbWluX3dpZHRoLCBtaW5faGVpZ2h0OwogCWludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyAqZnVuY3M7Ci0JdW5zaWduZWQgbG9uZyBmYl9iYXNlOworCXJlc291cmNlX3NpemVfdCBmYl9iYXNlOwogCiAJLyogcG9pbnRlcnMgdG8gc3RhbmRhcmQgcHJvcGVydGllcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcHJvcGVydHlfYmxvYl9saXN0OwpAQCAtNjEzLDcgKzYxMyw4IEBACiBleHRlcm4gaW50IGRybV9tb2RlX2dyb3VwX2luaXRfbGVnYWN5X2dyb3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbW9kZV9ncm91cCAqZ3JvdXApOwogZXh0ZXJuIHN0cnVjdCBlZGlkICpkcm1fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICpkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBpbnQgZHJtX2RvX3Byb2JlX2RkY19lZGlkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKIGV4dGVybiBpbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX3Byb2JlZF9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfcmVtb3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKQEAgLTczMSw0ICs3MzIsNSBAQAogCQkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCk7CiAjZW5kaWYgLyogX19EUk1fQ1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKaW5kZXggYzdkNGIyZS4uZWMwNzNkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGNfaGVscGVyLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpZm5kZWYgX19EUk1fQ1JUQ19IRUxQRVJfSF9fCiAjZGVmaW5lIF9fRFJNX0NSVENfSEVMUEVSX0hfXwogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgpAQCAtOTIsNyArOTEsNyBAQAogZXh0ZXJuIGludCBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgdWludDMyX3QgbWF4WCwgdWludDMyX3QgbWF4WSk7CiBleHRlcm4gdm9pZCBkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX2hlbHBlcl9ob3RwbHVnX3N0YWdlX3R3byhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiBib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBjYW5fZ3Jvdyk7CitleHRlcm4gYm9vbCBkcm1faGVscGVyX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyhzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpOwogZXh0ZXJuIGJvb2wgZHJtX2NydGNfaGVscGVyX3NldF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmggYi9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaAppbmRleCA4ZGJkMjU3Li4yNjY0MWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaAorKysgYi9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaApAQCAtNiw2ICs2LDE5IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CS8qIEZvciB0YXNrIHF1ZXVlIHN1cHBvcnQgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisjaWZuZGVmIHJlYWRxCitzdGF0aWMgaW5saW5lIHU2NCByZWFkcSh2b2lkIF9faW9tZW0gKnJlZykKK3sKKwlyZXR1cm4gKCh1NjQpIHJlYWRsKHJlZykpIHwgKCgodTY0KSByZWFkbChyZWcgKyA0VUwpKSA8PCAzMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJd3JpdGVsKHZhbCAmIDB4ZmZmZmZmZmYsIHJlZyk7CisJd3JpdGVsKHZhbCA+PiAzMiwgcmVnICsgMHg0VUwpOworfQorI2VuZGlmCisKIC8qKiBDdXJyZW50IHByb2Nlc3MgSUQgKi8KICNkZWZpbmUgRFJNX0NVUlJFTlRQSUQJCQl0YXNrX3BpZF9ucihjdXJyZW50KQogI2RlZmluZSBEUk1fU1VTRVIocCkJCQljYXBhYmxlKENBUF9TWVNfQURNSU4pCkBAIC0yMyw2ICszNiwxMiBAQAogLyoqIFdyaXRlIGEgZHdvcmQgaW50byBhIE1NSU8gcmVnaW9uICovCiAjZGVmaW5lIERSTV9XUklURTMyKG1hcCwgb2Zmc2V0LCB2YWwpCXdyaXRlbCh2YWwsICgodm9pZCBfX2lvbWVtICopKG1hcCktPmhhbmRsZSkgKyAob2Zmc2V0KSkKIC8qKiBSZWFkIG1lbW9yeSBiYXJyaWVyICovCisKKy8qKiBSZWFkIGEgcXdvcmQgZnJvbSBhIE1NSU8gcmVnaW9uIC0gYmUgY2FyZWZ1bCB1c2luZyB0aGVzZSB1bmxlc3MgeW91IHJlYWxseSB1bmRlcnN0YW5kIHRoZW0gKi8KKyNkZWZpbmUgRFJNX1JFQUQ2NChtYXAsIG9mZnNldCkJCXJlYWRxKCgodm9pZCBfX2lvbWVtICopKG1hcCktPmhhbmRsZSkgKyAob2Zmc2V0KSkKKy8qKiBXcml0ZSBhIHF3b3JkIGludG8gYSBNTUlPIHJlZ2lvbiAqLworI2RlZmluZSBEUk1fV1JJVEU2NChtYXAsIG9mZnNldCwgdmFsKQl3cml0ZXEodmFsLCAoKHZvaWQgX19pb21lbSAqKShtYXApLT5oYW5kbGUpICsgKG9mZnNldCkpCisKICNkZWZpbmUgRFJNX1JFQURNRU1PUllCQVJSSUVSKCkJCXJtYigpCiAvKiogV3JpdGUgbWVtb3J5IGJhcnJpZXIgKi8KICNkZWZpbmUgRFJNX1dSSVRFTUVNT1JZQkFSUklFUigpCXdtYigpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggNzZjNGM4Mi4uMmRmNzRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMjM5LDEwICsyMzksMTIzIEBACiAJezB4MTAwMiwgMHg3ODM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzkxZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4NzkxZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzY5MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4NzkzZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzYwMHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Nzk0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzYwMHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Nzk0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzYwMHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Nzk2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4Nzk2ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4Nzk2ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAogCXsweDEwMDIsIDB4Nzk2ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc0MHxSQURFT05fSVNfSUdQfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1BHQVJUfSwgXAorCXsweDEwMDIsIDB4OTQwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwQiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQwRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNjAwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDRBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDVBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ2QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDZCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0N0EsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ3QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0ODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0ODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDkxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDlDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OUYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0Q0IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDQywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0Q0QsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTBGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTE3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTRGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTg2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTkzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUMyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDQywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1Q0QsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUNFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk2MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MCwgMCwgMH0KIAogI2RlZmluZSByMTI4X1BDSV9JRFMgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDcyZWNmNjcuLmZlM2UzYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTMwNiw2ICszMDYsOCBAQAogCiAjZGVmaW5lIFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQJMzIKIAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHX09GRlNFVCAgICAgICAgIDI1NgorCiAjZGVmaW5lIFJBREVPTl9OUl9TQVJFQV9DTElQUkVDVFMJMTIKIAogLyogVGhlcmUgYXJlIDIgaGVhcHMgKGxvY2FsL0dBUlQpLiAgRWFjaCByZWdpb24gd2l0aGluIGEgaGVhcCBpcyBhCkBAIC01MjgsNyArNTMwLDggQEAKIAkJUkFERU9OX0lOSVRfQ1AgPSAweDAxLAogCQlSQURFT05fQ0xFQU5VUF9DUCA9IDB4MDIsCiAJCVJBREVPTl9JTklUX1IyMDBfQ1AgPSAweDAzLAotCQlSQURFT05fSU5JVF9SMzAwX0NQID0gMHgwNAorCQlSQURFT05fSU5JVF9SMzAwX0NQID0gMHgwNCwKKwkJUkFERU9OX0lOSVRfUjYwMF9DUCA9IDB4MDUKIAl9IGZ1bmM7CiAJdW5zaWduZWQgbG9uZyBzYXJlYV9wcml2X29mZnNldDsKIAlpbnQgaXNfcGNpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBlOTU4MWZkLi5jYTliOWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtNjcsNiArNjcsNyBAQAogaGVhZGVyLXkgKz0gZmQuaAogaGVhZGVyLXkgKz0gZmRyZWcuaAogaGVhZGVyLXkgKz0gZmliX3J1bGVzLmgKK2hlYWRlci15ICs9IGZpZW1hcC5oCiBoZWFkZXIteSArPSBmaXJld2lyZS1jZGV2LmgKIGhlYWRlci15ICs9IGZpcmV3aXJlLWNvbnN0YW50cy5oCiBoZWFkZXIteSArPSBmdXNlLmgKQEAgLTE1OCw4ICsxNTksNiBAQAogaGVhZGVyLXkgKz0gdW4uaAogaGVhZGVyLXkgKz0gdXRpbWUuaAogaGVhZGVyLXkgKz0gdmV0aC5oCi1oZWFkZXIteSArPSB2aWRlb19kZWNvZGVyLmgKLWhlYWRlci15ICs9IHZpZGVvX2VuY29kZXIuaAogaGVhZGVyLXkgKz0gdmlkZW90ZXh0LmgKIGhlYWRlci15ICs9IHgyNS5oCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggNzgxOTkxNS4uZDA0N2Y4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTI1Nyw2ICsyNTcsNDAgQEAKIHZvaWQgX19pbml0IGFjcGlfb2xkX3N1c3BlbmRfb3JkZXJpbmcodm9pZCk7CiB2b2lkIF9faW5pdCBhY3BpX3M0X25vX252cyh2b2lkKTsKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKworI2RlZmluZSBPU0NfUVVFUllfVFlQRQkJCTAKKyNkZWZpbmUgT1NDX1NVUFBPUlRfVFlQRSAJCTEKKyNkZWZpbmUgT1NDX0NPTlRST0xfVFlQRQkJMgorI2RlZmluZSBPU0NfU1VQUE9SVF9NQVNLUwkJMHgxZgorCisvKiBfT1NDIERXMCBEZWZpbml0aW9uICovCisjZGVmaW5lIE9TQ19RVUVSWV9FTkFCTEUJCTEKKyNkZWZpbmUgT1NDX1JFUVVFU1RfRVJST1IJCTIKKyNkZWZpbmUgT1NDX0lOVkFMSURfVVVJRF9FUlJPUgkJNAorI2RlZmluZSBPU0NfSU5WQUxJRF9SRVZJU0lPTl9FUlJPUgk4CisjZGVmaW5lIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUgkxNgorCisvKiBfT1NDIERXMSBEZWZpbml0aW9uIChPUyBTdXBwb3J0IEZpZWxkcykgKi8KKyNkZWZpbmUgT1NDX0VYVF9QQ0lfQ09ORklHX1NVUFBPUlQJCTEKKyNkZWZpbmUgT1NDX0FDVElWRV9TVEFURV9QV1JfU1VQUE9SVCAJCTIKKyNkZWZpbmUgT1NDX0NMT0NLX1BXUl9DQVBBQklMSVRZX1NVUFBPUlQJNAorI2RlZmluZSBPU0NfUENJX1NFR01FTlRfR1JPVVBTX1NVUFBPUlQJCTgKKyNkZWZpbmUgT1NDX01TSV9TVVBQT1JUCQkJCTE2CisKKy8qIF9PU0MgRFcxIERlZmluaXRpb24gKE9TIENvbnRyb2wgRmllbGRzKSAqLworI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfTkFUSVZFX0hQX0NPTlRST0wJMQorI2RlZmluZSBPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCAJCTIKKyNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX1BNRV9DT05UUk9MCQk0CisjZGVmaW5lIE9TQ19QQ0lfRVhQUkVTU19BRVJfQ09OVFJPTAkJOAorI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MCTE2CisKKyNkZWZpbmUgT1NDX0NPTlRST0xfTUFTS1MgCShPU0NfUENJX0VYUFJFU1NfTkFUSVZFX0hQX0NPTlRST0wgfCAJXAorCQkJCU9TQ19TSFBDX05BVElWRV9IUF9DT05UUk9MIHwgCQlcCisJCQkJT1NDX1BDSV9FWFBSRVNTX1BNRV9DT05UUk9MIHwJCVwKKwkJCQlPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wgfAkJXAorCQkJCU9TQ19QQ0lfRVhQUkVTU19DQVBfU1RSVUNUVVJFX0NPTlRST0wpCisKK2V4dGVybiBhY3BpX3N0YXR1cyBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwogI2Vsc2UJLyogQ09ORklHX0FDUEkgKi8KIAogc3RhdGljIGlubGluZSBpbnQgZWFybHlfYWNwaV9ib290X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXN5bmNfdHguaCBiL2luY2x1ZGUvbGludXgvYXN5bmNfdHguaAppbmRleCA0NWY2Mjk3Li41ZmMyZWY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmgKKysrIGIvaW5jbHVkZS9saW51eC9hc3luY190eC5oCkBAIC0yMSw2ICsyMSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKKy8qIG9uIGFyY2hpdGVjdHVyZXMgd2l0aG91dCBkbWEtbWFwcGluZyBjYXBhYmlsaXRpZXMgd2UgbmVlZCB0byBlbnN1cmUKKyAqIHRoYXQgdGhlIGFzeW5jaHJvbm91cyBwYXRoIGNvbXBpbGVzIGF3YXkKKyAqLworI2lmZGVmIENPTkZJR19IQVNfRE1BCisjZGVmaW5lIF9fYXN5bmNfaW5saW5lCisjZWxzZQorI2RlZmluZSBfX2FzeW5jX2lubGluZSBfX2Fsd2F5c19pbmxpbmUKKyNlbmRpZgorCiAvKioKICAqIGRtYV9jaGFuX3JlZiAtIG9iamVjdCB1c2VkIHRvIG1hbmFnZSBkbWEgY2hhbm5lbHMgcmVjZWl2ZWQgZnJvbSB0aGUKICAqICAgZG1hZW5naW5lIGNvcmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1dG9fZGV2LWlvY3RsLmggYi9pbmNsdWRlL2xpbnV4L2F1dG9fZGV2LWlvY3RsLmgKaW5kZXggOTFhNzczOS4uODUwZjM5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaApAQCAtMTAsOCArMTAsMTMgQEAKICNpZm5kZWYgX0xJTlVYX0FVVE9fREVWX0lPQ1RMX0gKICNkZWZpbmUgX0xJTlVYX0FVVE9fREVWX0lPQ1RMX0gKIAorI2luY2x1ZGUgPGxpbnV4L2F1dG9fZnMuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNkZWZpbmUgQVVUT0ZTX0RFVklDRV9OQU1FCQkiYXV0b2ZzIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaCBiL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCmluZGV4IGMyMWU1OTcuLjYzMjY1ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYXV0b19mcy5oCkBAIC0xNywxMCArMTcsMTIgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogVGhpcyBmaWxlIGRlc2NyaWJlcyBhdXRvZnMgdjMgKi8KICNkZWZpbmUgQVVUT0ZTX1BST1RPX1ZFUlNJT04JMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCA3N2I0YTllLi42NjM4YjgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtMzUsOCArMzUsNyBAQAogI2VuZGlmCiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJdW5zaWduZWQgbG9uZyBwOyAvKiBjdXJyZW50IHRvcCBvZiBtZW0gKi8KLQl1bnNpZ25lZCBpbnQgc2hfYmFuZzoxLAotCQltaXNjX2Jhbmc6MSwKKwl1bnNpZ25lZCBpbnQKIAkJY3JlZF9wcmVwYXJlZDoxLC8qIHRydWUgaWYgY3JlZHMgYWxyZWFkeSBwcmVwYXJlZCAobXVsdGlwbGUKIAkJCQkgKiBwcmVwcyBoYXBwZW4gZm9yIGludGVycHJldGVycykgKi8KIAkJY2FwX2VmZmVjdGl2ZToxOy8qIHRydWUgaWYgaGFzIGVsZXZhdGVkIGVmZmVjdGl2ZSBjYXBhYmlsaXRpZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaCBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCmluZGV4IDQ1NWQ4MzIuLmJjM2FiNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oCkBAIC0xNDYsMTAgKzE0NiwxMCBAQAogCiAjZGVmaW5lIEhBU0hfRUFSTFkJMHgwMDAwMDAwMQkvKiBBbGxvY2F0aW5nIGR1cmluZyBlYXJseSBib290PyAqLwogCi0vKiBPbmx5IE5VTUEgbmVlZHMgaGFzaCBkaXN0cmlidXRpb24uCi0gKiBJQTY0IGFuZCB4ODZfNjQgaGF2ZSBzdWZmaWNpZW50IHZtYWxsb2Mgc3BhY2UuCisvKiBPbmx5IE5VTUEgbmVlZHMgaGFzaCBkaXN0cmlidXRpb24uIDY0Yml0IE5VTUEgYXJjaGl0ZWN0dXJlcyBoYXZlCisgKiBzdWZmaWNpZW50IHZtYWxsb2Mgc3BhY2UuCiAgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiAoZGVmaW5lZChDT05GSUdfSUE2NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2XzY0KSkKKyNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR182NEJJVCkKICNkZWZpbmUgSEFTSERJU1RfREVGQVVMVCAxCiAjZWxzZQogI2RlZmluZSBIQVNIRElTVF9ERUZBVUxUIDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCBmMTlmZDkwLi43YjczYmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJCWdldF9ibG9ja190ICosIGxvZmZfdCAqKTsKIGludCBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiBpbnQgYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7Ci1pbnQgYmxvY2tfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKK2ludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAogCQkJCWdldF9ibG9ja190IGdldF9ibG9jayk7CiB2b2lkIGJsb2NrX3N5bmNfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIHNlY3Rvcl90IGdlbmVyaWNfYmxvY2tfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzZWN0b3JfdCwgZ2V0X2Jsb2NrX3QgKik7CkBAIC0zMzIsMjIgKzMzMiwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luaXQodm9pZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDE7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgaW5vZGVfaGFzX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQogc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX2lub2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSBpbnQgc3luY19tYXBwaW5nX2J1ZmZlcnMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikge30KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKnNiKQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlyZXR1cm4gMDsKLX0KIAogI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogI2VuZGlmIC8qIF9MSU5VWF9CVUZGRVJfSEVBRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCBiODM3NjMxLi42NjVmYTcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jZ3JvdXBzdGF0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9faGVhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQUwogCkBAIC0yMiw2ICsyMyw3IEBACiBzdHJ1Y3QgY2dyb3VwX3N1YnN5czsKIHN0cnVjdCBpbm9kZTsKIHN0cnVjdCBjZ3JvdXA7CitzdHJ1Y3QgY3NzX2lkOwogCiBleHRlcm4gaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpOwogZXh0ZXJuIGludCBjZ3JvdXBfaW5pdCh2b2lkKTsKQEAgLTQ3LDE4ICs0OSwyNCBAQAogCiAvKiBQZXItc3Vic3lzdGVtL3Blci1jZ3JvdXAgc3RhdGUgbWFpbnRhaW5lZCBieSB0aGUgc3lzdGVtLiAqLwogc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgewotCS8qIFRoZSBjZ3JvdXAgdGhhdCB0aGlzIHN1YnN5c3RlbSBpcyBhdHRhY2hlZCB0by4gVXNlZnVsCisJLyoKKwkgKiBUaGUgY2dyb3VwIHRoYXQgdGhpcyBzdWJzeXN0ZW0gaXMgYXR0YWNoZWQgdG8uIFVzZWZ1bAogCSAqIGZvciBzdWJzeXN0ZW1zIHRoYXQgd2FudCB0byBrbm93IGFib3V0IHRoZSBjZ3JvdXAKLQkgKiBoaWVyYXJjaHkgc3RydWN0dXJlICovCisJICogaGllcmFyY2h5IHN0cnVjdHVyZQorCSAqLwogCXN0cnVjdCBjZ3JvdXAgKmNncm91cDsKIAotCS8qIFN0YXRlIG1haW50YWluZWQgYnkgdGhlIGNncm91cCBzeXN0ZW0gdG8gYWxsb3cgc3Vic3lzdGVtcworCS8qCisJICogU3RhdGUgbWFpbnRhaW5lZCBieSB0aGUgY2dyb3VwIHN5c3RlbSB0byBhbGxvdyBzdWJzeXN0ZW1zCiAJICogdG8gYmUgImJ1c3kiLiBTaG91bGQgYmUgYWNjZXNzZWQgdmlhIGNzc19nZXQoKSwKLQkgKiBjc3NfdHJ5Z2V0KCkgYW5kIGFuZCBjc3NfcHV0KCkuICovCisJICogY3NzX3RyeWdldCgpIGFuZCBhbmQgY3NzX3B1dCgpLgorCSAqLwogCiAJYXRvbWljX3QgcmVmY250OwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBJRCBmb3IgdGhpcyBjc3MsIGlmIHBvc3NpYmxlICovCisJc3RydWN0IGNzc19pZCAqaWQ7CiB9OwogCiAvKiBiaXRzIGluIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGZsYWdzIGZpZWxkICovCkBAIC0xMjAsMTkgKzEyOCwyNiBAQAogZW51bSB7CiAJLyogQ29udHJvbCBHcm91cCBpcyBkZWFkICovCiAJQ0dSUF9SRU1PVkVELAotCS8qIENvbnRyb2wgR3JvdXAgaGFzIHByZXZpb3VzbHkgaGFkIGEgY2hpbGQgY2dyb3VwIG9yIGEgdGFzaywKLQkgKiBidXQgbm8gbG9uZ2VyIChvbmx5IGlmIENHUlBfTk9USUZZX09OX1JFTEVBU0UgaXMgc2V0KSAqLworCS8qCisJICogQ29udHJvbCBHcm91cCBoYXMgcHJldmlvdXNseSBoYWQgYSBjaGlsZCBjZ3JvdXAgb3IgYSB0YXNrLAorCSAqIGJ1dCBubyBsb25nZXIgKG9ubHkgaWYgQ0dSUF9OT1RJRllfT05fUkVMRUFTRSBpcyBzZXQpCisJICovCiAJQ0dSUF9SRUxFQVNBQkxFLAogCS8qIENvbnRyb2wgR3JvdXAgcmVxdWlyZXMgcmVsZWFzZSBub3RpZmljYXRpb25zIHRvIHVzZXJzcGFjZSAqLwogCUNHUlBfTk9USUZZX09OX1JFTEVBU0UsCisJLyoKKwkgKiBBIHRocmVhZCBpbiBybWRpcigpIGlzIHdhdGluZyBmb3IgdGhpcyBjZ3JvdXAuCisJICovCisJQ0dSUF9XQUlUX09OX1JNRElSLAogfTsKIAogc3RydWN0IGNncm91cCB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qICJ1bnNpZ25lZCBsb25nIiBzbyBiaXRvcHMgd29yayAqLwogCi0JLyogY291bnQgdXNlcnMgb2YgdGhpcyBjZ3JvdXAuID4wIG1lYW5zIGJ1c3ksIGJ1dCBkb2Vzbid0Ci0JICogbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhlIG51bWJlciBvZiB0YXNrcyBpbiB0aGUKLQkgKiBjZ3JvdXAgKi8KKwkvKgorCSAqIGNvdW50IHVzZXJzIG9mIHRoaXMgY2dyb3VwLiA+MCBtZWFucyBidXN5LCBidXQgZG9lc24ndAorCSAqIG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoZSBudW1iZXIgb2YgdGFza3MgaW4gdGhlIGNncm91cAorCSAqLwogCWF0b21pY190IGNvdW50OwogCiAJLyoKQEAgLTE0Miw3ICsxNTcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsJLyogbXkgcGFyZW50J3MgY2hpbGRyZW4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwkvKiBteSBjaGlsZHJlbiAqLwogCi0Jc3RydWN0IGNncm91cCAqcGFyZW50OwkvKiBteSBwYXJlbnQgKi8KKwlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQ7CQkvKiBteSBwYXJlbnQgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CSAgCS8qIGNncm91cCBmcyBlbnRyeSwgUkNVIHByb3RlY3RlZCAqLwogCiAJLyogUHJpdmF0ZSBwb2ludGVycyBmb3IgZWFjaCByZWdpc3RlcmVkIHN1YnN5c3RlbSAqLwpAQCAtMTc3LDExICsxOTIsMTIgQEAKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiB9OwogCi0vKiBBIGNzc19zZXQgaXMgYSBzdHJ1Y3R1cmUgaG9sZGluZyBwb2ludGVycyB0byBhIHNldCBvZgorLyoKKyAqIEEgY3NzX3NldCBpcyBhIHN0cnVjdHVyZSBob2xkaW5nIHBvaW50ZXJzIHRvIGEgc2V0IG9mCiAgKiBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9iamVjdHMuIFRoaXMgc2F2ZXMgc3BhY2UgaW4gdGhlIHRhc2sgc3RydWN0CiAgKiBvYmplY3QgYW5kIHNwZWVkcyB1cCBmb3JrKCkvZXhpdCgpLCBzaW5jZSBhIHNpbmdsZSBpbmMvZGVjIGFuZCBhCi0gKiBsaXN0X2FkZCgpL2RlbCgpIGNhbiBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGVudGlyZQotICogY2dyb3VwIHNldCBmb3IgYSB0YXNrLgorICogbGlzdF9hZGQoKS9kZWwoKSBjYW4gYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBlbnRpcmUgY2dyb3VwCisgKiBzZXQgZm9yIGEgdGFzay4KICAqLwogCiBzdHJ1Y3QgY3NzX3NldCB7CkBAIC0yMjYsMTMgKzI0Miw4IEBACiAJdm9pZCAqc3RhdGU7CiB9OwogCi0vKiBzdHJ1Y3QgY2Z0eXBlOgotICoKLSAqIFRoZSBmaWxlcyBpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0gbW9zdGx5IGhhdmUgYSB2ZXJ5IHNpbXBsZSByZWFkL3dyaXRlCi0gKiBoYW5kbGluZywgc29tZSBjb21tb24gZnVuY3Rpb24gd2lsbCB0YWtlIGNhcmUgb2YgaXQuIE5ldmVydGhlbGVzcyBzb21lIGNhc2VzCi0gKiAocmVhZCB0YXNrcykgYXJlIHNwZWNpYWwgYW5kIHRoZXJlZm9yZSBJIGRlZmluZSB0aGlzIHN0cnVjdHVyZSBmb3IgZXZlcnkKLSAqIGtpbmQgb2YgZmlsZS4KLSAqCisvKgorICogc3RydWN0IGNmdHlwZTogaGFuZGxlciBkZWZpbml0aW9ucyBmb3IgY2dyb3VwIGNvbnRyb2wgZmlsZXMKICAqCiAgKiBXaGVuIHJlYWRpbmcvd3JpdGluZyB0byBhIGZpbGU6CiAgKgktIHRoZSBjZ3JvdXAgdG8gdXNlIGlzIGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGEKQEAgLTI0MSwxMCArMjUyLDE3IEBACiAKICNkZWZpbmUgTUFYX0NGVFlQRV9OQU1FIDY0CiBzdHJ1Y3QgY2Z0eXBlIHsKLQkvKiBCeSBjb252ZW50aW9uLCB0aGUgbmFtZSBzaG91bGQgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiB0aGUKLQkgKiBzdWJzeXN0ZW0sIGZvbGxvd2VkIGJ5IGEgcGVyaW9kICovCisJLyoKKwkgKiBCeSBjb252ZW50aW9uLCB0aGUgbmFtZSBzaG91bGQgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiB0aGUKKwkgKiBzdWJzeXN0ZW0sIGZvbGxvd2VkIGJ5IGEgcGVyaW9kCisJICovCiAJY2hhciBuYW1lW01BWF9DRlRZUEVfTkFNRV07CiAJaW50IHByaXZhdGU7CisJLyoKKwkgKiBJZiBub3QgMCwgZmlsZSBtb2RlIGlzIHNldCB0byB0aGlzIHZhbHVlLCBvdGhlcndpc2UgaXQgd2lsbAorCSAqIGJlIGZpZ3VyZWQgb3V0IGF1dG9tYXRpY2FsbHkKKwkgKi8KKwltb2RlX3QgbW9kZTsKIAogCS8qCiAJICogSWYgbm9uLXplcm8sIGRlZmluZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHN0cmluZyB0aGF0IGNhbgpAQCAtMzE5LDE1ICszMzcsMjAgQEAKIAl2b2lkICgqcHJvY2Vzc190YXNrKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQlzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pOwogCXN0cnVjdCBwdHJfaGVhcCAqaGVhcDsKKwl2b2lkICpkYXRhOwogfTsKIAotLyogQWRkIGEgbmV3IGZpbGUgdG8gdGhlIGdpdmVuIGNncm91cCBkaXJlY3RvcnkuIFNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgYnkgc3Vic3lzdGVtcyBmcm9tIHdpdGhpbiBhIHBvcHVsYXRlKCkgbWV0aG9kICovCisvKgorICogQWRkIGEgbmV3IGZpbGUgdG8gdGhlIGdpdmVuIGNncm91cCBkaXJlY3RvcnkuIFNob3VsZCBvbmx5IGJlCisgKiBjYWxsZWQgYnkgc3Vic3lzdGVtcyBmcm9tIHdpdGhpbiBhIHBvcHVsYXRlKCkgbWV0aG9kCisgKi8KIGludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCk7CiAKLS8qIEFkZCBhIHNldCBvZiBuZXcgZmlsZXMgdG8gdGhlIGdpdmVuIGNncm91cCBkaXJlY3RvcnkuIFNob3VsZAotICogb25seSBiZSBjYWxsZWQgYnkgc3Vic3lzdGVtcyBmcm9tIHdpdGhpbiBhIHBvcHVsYXRlKCkgbWV0aG9kICovCisvKgorICogQWRkIGEgc2V0IG9mIG5ldyBmaWxlcyB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkCisgKiBvbmx5IGJlIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QKKyAqLwogaW50IGNncm91cF9hZGRfZmlsZXMoc3RydWN0IGNncm91cCAqY2dycCwKIAkJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCiAJCQljb25zdCBzdHJ1Y3QgY2Z0eXBlIGNmdFtdLApAQCAtMzM5LDggKzM2Miw4IEBACiAKIGludCBjZ3JvdXBfdGFza19jb3VudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAotLyogUmV0dXJuIHRydWUgaWYgdGhlIGNncm91cCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgY2dyb3VwICovCi1pbnQgY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCk7CisvKiBSZXR1cm4gdHJ1ZSBpZiBjZ3JwIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgdGFzaydzIGNncm91cCAqLworaW50IGNncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIC8qCiAgKiBDb250cm9sIEdyb3VwIHN1YnN5c3RlbSB0eXBlLgpAQCAtMzUwLDcgKzM3Myw3IEBACiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKigqY3JlYXRlKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKmNncnApOwotCXZvaWQgKCpwcmVfZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKKwlpbnQgKCpwcmVfZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAlpbnQgKCpjYW5fYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkgIHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKQEAgLTM2Nyw2ICszOTAsMTEgQEAKIAlpbnQgYWN0aXZlOwogCWludCBkaXNhYmxlZDsKIAlpbnQgZWFybHlfaW5pdDsKKwkvKgorCSAqIFRydWUgaWYgdGhpcyBzdWJzeXMgdXNlcyBJRC4gSUQgaXMgbm90IGF2YWlsYWJsZSBiZWZvcmUgY2dyb3VwX2luaXQoKQorCSAqIChub3QgYXZhaWxhYmxlIGluIGVhcmx5X2luaXQgdGltZS4pCisJICovCisJYm9vbCB1c2VfaWQ7CiAjZGVmaW5lIE1BWF9DR1JPVVBfVFlQRV9OQU1FTEVOIDMyCiAJY29uc3QgY2hhciAqbmFtZTsKIApAQCAtMzg5LDYgKzQxNyw5IEBACiAJICovCiAJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOworCS8qIHVzZWQgd2hlbiB1c2VfaWQgPT0gdHJ1ZSAqLworCXN0cnVjdCBpZHIgaWRyOworCXNwaW5sb2NrX3QgaWRfbG9jazsKIH07CiAKICNkZWZpbmUgU1VCU1lTKF94KSBleHRlcm4gc3RydWN0IGNncm91cF9zdWJzeXMgX3ggIyMgX3N1YnN5czsKQEAgLTQyMiw3ICs0NTMsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKnRhc2s7CiB9OwogCi0vKiBUbyBpdGVyYXRlIGFjcm9zcyB0aGUgdGFza3MgaW4gYSBjZ3JvdXA6CisvKgorICogVG8gaXRlcmF0ZSBhY3Jvc3MgdGhlIHRhc2tzIGluIGEgY2dyb3VwOgogICoKICAqIDEpIGNhbGwgY2dyb3VwX2l0ZXJfc3RhcnQgdG8gaW50aWFsaXplIGFuIGl0ZXJhdG9yCiAgKgpAQCAtNDMxLDkgKzQ2MywxMCBAQAogICoKICAqIDMpIGNhbGwgY2dyb3VwX2l0ZXJfZW5kKCkgdG8gZGVzdHJveSB0aGUgaXRlcmF0b3IuCiAgKgotICogT3IsIGNhbGwgY2dyb3VwX3NjYW5fdGFza3MoKSB0byBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdGFzayBpbiBhIGNwdXNldC4KLSAqICAgIC0gY2dyb3VwX3NjYW5fdGFza3MoKSBob2xkcyB0aGUgY3NzX3NldF9sb2NrIHdoZW4gY2FsbGluZyB0aGUgdGVzdF90YXNrKCkKLSAqICAgICAgY2FsbGJhY2ssIGJ1dCBub3Qgd2hpbGUgY2FsbGluZyB0aGUgcHJvY2Vzc190YXNrKCkgY2FsbGJhY2suCisgKiBPciwgY2FsbCBjZ3JvdXBfc2Nhbl90YXNrcygpIHRvIGl0ZXJhdGUgdGhyb3VnaCBldmVyeSB0YXNrIGluIGEKKyAqIGNncm91cCAtIGNncm91cF9zY2FuX3Rhc2tzKCkgaG9sZHMgdGhlIGNzc19zZXRfbG9jayB3aGVuIGNhbGxpbmcKKyAqIHRoZSB0ZXN0X3Rhc2soKSBjYWxsYmFjaywgYnV0IG5vdCB3aGlsZSBjYWxsaW5nIHRoZSBwcm9jZXNzX3Rhc2soKQorICogY2FsbGJhY2suCiAgKi8KIHZvaWQgY2dyb3VwX2l0ZXJfc3RhcnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNncm91cF9pdGVyICppdCk7CiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNncm91cF9pdGVyX25leHQoc3RydWN0IGNncm91cCAqY2dycCwKQEAgLTQ0Miw2ICs0NzUsNDQgQEAKIGludCBjZ3JvdXBfc2Nhbl90YXNrcyhzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pOwogaW50IGNncm91cF9hdHRhY2hfdGFzayhzdHJ1Y3QgY2dyb3VwICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIAorLyoKKyAqIENTUyBJRCBpcyBJRCBmb3IgY2dyb3VwX3N1YnN5c19zdGF0ZSBzdHJ1Y3RzIHVuZGVyIHN1YnN5cy4gVGhpcyBvbmx5IHdvcmtzCisgKiBpZiBjZ3JvdXBfc3Vic3lzLnVzZV9pZCA9PSB0cnVlLiBJdCBjYW4gYmUgdXNlZCBmb3IgbG9va2luZyB1cCBhbmQgc2Nhbm5pbmcuCisgKiBDU1MgSUQgaXMgYXNzaWduZWQgYXQgY2dyb3VwIGFsbG9jYXRpb24gKGNyZWF0ZSkgYXV0b21hdGljYWxseQorICogYW5kIHJlbW92ZWQgd2hlbiBzdWJzeXMgY2FsbHMgZnJlZV9jc3NfaWQoKSBmdW5jdGlvbi4gVGhpcyBpcyBiZWNhdXNlCisgKiB0aGUgbGlmZXRpbWUgb2YgY2dyb3VwX3N1YnN5c19zdGF0ZSBpcyBzdWJzeXMncyBtYXR0ZXIuCisgKgorICogTG9va2luZyB1cCBhbmQgc2Nhbm5pbmcgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkuCisgKiBUYWtpbmcgY2dyb3VwX211dGV4KCkvaGllcmFyY2h5X211dGV4KCkgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZm9sbG93aW5nIGNhbGxzLgorICogQnV0IHRoZSBjc3MgcmV0dXJuZWQgYnkgdGhpcyByb3V0aW5lIGNhbiBiZSAibm90IHBvcHVsYXRlZCB5ZXQiIG9yICJiZWluZworICogZGVzdHJveWVkIi4gVGhlIGNhbGxlciBzaG91bGQgY2hlY2sgY3NzIGFuZCBjZ3JvdXAncyBzdGF0dXMuCisgKi8KKworLyoKKyAqIFR5cGljYWxseSBDYWxsZWQgYXQgLT5kZXN0cm95KCksIG9yIHNvbWV3aGVyZSB0aGUgc3Vic3lzIGZyZWVzCisgKiBjZ3JvdXBfc3Vic3lzX3N0YXRlLgorICovCit2b2lkIGZyZWVfY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7CisKKy8qIEZpbmQgYSBjZ3JvdXBfc3Vic3lzX3N0YXRlIHdoaWNoIGhhcyBnaXZlbiBJRCAqLworCitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzX2xvb2t1cChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBpZCk7CisKKy8qCisgKiBHZXQgYSBjZ3JvdXAgd2hvc2UgaWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGlkIHVuZGVyIHRyZWUgb2Ygcm9vdC4KKyAqIFJldHVybmluZyBhIGNncm91cF9zdWJzeXNfc3RhdGUgb3IgTlVMTC4KKyAqLworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzc19nZXRfbmV4dChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBpZCwKKwkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3QsIGludCAqZm91bmRpZCk7CisKKy8qIFJldHVybnMgdHJ1ZSBpZiByb290IGlzIGFuY2VzdG9yIG9mIGNnICovCitib29sIGNzc19pc19hbmNlc3RvcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY2csCisJCSAgICAgY29uc3Qgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3QpOworCisvKiBHZXQgaWQgYW5kIGRlcHRoIG9mIGNzcyAqLwordW5zaWduZWQgc2hvcnQgY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOwordW5zaWduZWQgc2hvcnQgY3NzX2RlcHRoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOworCiAjZWxzZSAvKiAhQ09ORklHX0NHUk9VUFMgKi8KIAogc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggYjg4MDg2NC4uOTcyM2VkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC0xOTEsNiArMTkxLDEyIEBACiAJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7CiBhc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c193cml0ZXYodW5zaWduZWQgbG9uZyBmZCwKIAkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywgdW5zaWduZWQgbG9uZyB2bGVuKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBjb21wYXRfc3lzX3ByZWFkdih1bnNpZ25lZCBsb25nIGZkLAorCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQl1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfaGlnaCwgdTMyIHBvc19sb3cpOworYXNtbGlua2FnZSBzc2l6ZV90IGNvbXBhdF9zeXNfcHdyaXRldih1bnNpZ25lZCBsb25nIGZkLAorCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQl1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfaGlnaCwgdTMyIHBvc19sb3cpOwogCiBpbnQgY29tcGF0X2RvX2V4ZWN2ZShjaGFyICogZmlsZW5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAogCSAgICAgICAgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICogcmVncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBjMjc0N2FjLi4yNjQzZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IGNwdSB7CiAJaW50IG5vZGVfaWQ7CQkvKiBUaGUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgQ1BVICovCkBAIC0xMDMsMTYgKzEwMiw2IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAvKiBTdG9wIENQVXMgZ29pbmcgdXAgYW5kIGRvd24uICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfbG9jayhjcHVfaHBfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aG90cGx1Z19tdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfdW5sb2NrKGNwdV9ocF9tdXRleCk7Ci19Ci0KIGV4dGVybiB2b2lkIGdldF9vbmxpbmVfY3B1cyh2b2lkKTsKIGV4dGVybiB2b2lkIHB1dF9vbmxpbmVfY3B1cyh2b2lkKTsKICNkZWZpbmUgaG90Y3B1X25vdGlmaWVyKGZuLCBwcmkpIHsJCQkJXApAQCAtMTI2LDExICsxMTUsNiBAQAogCiAjZWxzZQkJLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmNwdV9ocF9tdXRleCkKLXsgfQotCiAjZGVmaW5lIGdldF9vbmxpbmVfY3B1cygpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHV0X29ubGluZV9jcHVzKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaCBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKaW5kZXggOTBjNjA3NC4uMDVlYTFkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIENPTkZJR19DUFVTRVRTCiAKQEAgLTI5LDE5ICszMCwyOSBAQAogdm9pZCBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKHZvaWQpOwogaW50IGNwdXNldF9ub2RlbWFza192YWxpZF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCAqbm9kZW1hc2spOwogCi1leHRlcm4gaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spOwotZXh0ZXJuIGludCBfX2NwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQgX19jcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IF9fY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spOwogCi1zdGF0aWMgaW50IGlubGluZSBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiBudW1iZXJfb2ZfY3B1c2V0cyA8PSAxIHx8Ci0JCV9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCh6LCBnZnBfbWFzayk7CisJCV9fY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbChub2RlLCBnZnBfbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIG51bWJlcl9vZl9jcHVzZXRzIDw9IDEgfHwKLQkJX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHosIGdmcF9tYXNrKTsKKwkJX19jcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKG5vZGUsIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKIH0KIAogZXh0ZXJuIGludCBjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sxLApAQCAtOTAsMTIgKzEwMSwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSAgICAgICBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKLQkqbWFzayA9IGNwdV9wb3NzaWJsZV9tYXA7CisJY3B1bWFza19jb3B5KG1hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJCSAgICAgIHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCSptYXNrID0gY3B1X3Bvc3NpYmxlX21hcDsKKwljcHVtYXNrX2NvcHkobWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOwogfQogCiBzdGF0aWMgaW5saW5lIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0xMTIsNiArMTIzLDE2IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IDgyMDllMDguLjY2ZWMwNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0xMzksNiArMTM5LDkgQEAKIAlkbV9pb2N0bF9mbiBpb2N0bDsKIAlkbV9tZXJnZV9mbiBtZXJnZTsKIAlkbV9idXN5X2ZuIGJ1c3k7CisKKwkvKiBGb3IgaW50ZXJuYWwgZGV2aWNlLW1hcHBlciB1c2UuICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGlvX3Jlc3RyaWN0aW9ucyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtLWRpcnR5LWxvZy5oIGIvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaAppbmRleCA2MDBjNWZiLi41ZThiMTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWRpcnR5LWxvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG0tZGlydHktbG9nLmgKQEAgLTI4LDYgKzI4LDkgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAorCS8qIEZvciBpbnRlcm5hbCBkZXZpY2UtbWFwcGVyIHVzZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwogCWludCAoKmN0cikoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwKIAkJICAgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpOwogCXZvaWQgKCpkdHIpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyk7CkBAIC0xMTMsNiArMTE2LDE2IEBACiAJICovCiAJaW50ICgqc3RhdHVzKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2csIHN0YXR1c190eXBlX3Qgc3RhdHVzX3R5cGUsCiAJCSAgICAgIGNoYXIgKnJlc3VsdCwgdW5zaWduZWQgbWF4bGVuKTsKKworCS8qCisJICogaXNfcmVtb3RlX3JlY292ZXJpbmcgaXMgbmVjZXNzYXJ5IGZvciBjbHVzdGVyIG1pcnJvcmluZy4gSXQgcHJvdmlkZXMKKwkgKiBhIHdheSB0byBkZXRlY3QgcmVjb3Zlcnkgb24gYW5vdGhlciBub2RlLCBzbyB3ZSBhcmVuJ3Qgd3JpdGluZworCSAqIGNvbmN1cnJlbnRseS4gIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRvIGJsb2NrICh3aGVuIGEgY2x1c3RlciBsb2cKKwkgKiBpcyB1c2VkKS4KKwkgKgorCSAqIFJldHVybnM6IDAsIDEKKwkgKi8KKwlpbnQgKCppc19yZW1vdGVfcmVjb3ZlcmluZykoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCByZWdpb25fdCByZWdpb24pOwogfTsKIAogaW50IGRtX2RpcnR5X2xvZ190eXBlX3JlZ2lzdGVyKHN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ1M2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtZGVidWcuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19ETUFfREVCVUdfSAorI2RlZmluZSBfX0RNQV9ERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHNjYXR0ZXJsaXN0Oworc3RydWN0IGJ1c190eXBlOworCisjaWZkZWYgQ09ORklHX0RNQV9BUElfREVCVUcKKworZXh0ZXJuIHZvaWQgZG1hX2RlYnVnX2FkZF9idXMoc3RydWN0IGJ1c190eXBlICpidXMpOworCitleHRlcm4gdm9pZCBkbWFfZGVidWdfaW5pdCh1MzIgbnVtX2VudHJpZXMpOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZGlyZWN0aW9uLCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgIGJvb2wgbWFwX3NpbmdsZSk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgYm9vbCBtYXBfc2luZ2xlKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBuZW50cywgaW50IG1hcHBlZF9lbnRzLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmlydCk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgYWRkcik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQkgIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQlzaXplX3Qgc2l6ZSwKKwkJCQkJCWludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCQkgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9kdW1wX21hcHBpbmdzKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyNlbHNlIC8qIENPTkZJR19ETUFfQVBJX0RFQlVHICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGVidWdfYWRkX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9kZWJ1Z19pbml0KHUzMiBudW1fZW50cmllcykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGludCBkaXJlY3Rpb24sIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJICAgICAgYm9vbCBtYXBfc2luZ2xlKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLAorCQkJCQlib29sIG1hcF9zaW5nbGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgaW50IG5lbnRzLCBpbnQgbWFwcGVkX2VudHMsIGludCBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCSAgICAgIGludCBuZWxlbXMsIGludCBkaXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZpcnQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCQkgICB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGFkZHIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICAgICAgc2l6ZV90IHNpemUsCisJCQkJCQkgICAgICAgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCQkJICBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkJICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCQkJaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9kdW1wX21hcHBpbmdzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19ETUFfQVBJX0RFQlVHICovCisKKyNlbmRpZiAvKiBfX0RNQV9ERUJVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKaW5kZXggYmE5MTE0ZS4uZDdkMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaApAQCAtMyw2ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1hdHRycy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIC8qIFRoZXNlIGRlZmluaXRpb25zIG1pcnJvciB0aG9zZSBpbiBwY2kuaCwgc28gdGhleSBjYW4gYmUgdXNlZAogICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggdGhlaXIgUENJXyBjb3VudGVycGFydHMgKi8KQEAgLTEzLDYgKzE1LDUyIEBACiAJRE1BX05PTkUgPSAzLAogfTsKIAorc3RydWN0IGRtYV9tYXBfb3BzIHsKKwl2b2lkKiAoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7CisJdm9pZCAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKwlkbWFfYWRkcl90ICgqbWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJdm9pZCAoKnVubWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwlpbnQgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwl2b2lkICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwl2b2lkICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJdm9pZCAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJaW50ICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKwlpbnQgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKwlpbnQgaXNfcGh5czsKK307CisKICNkZWZpbmUgRE1BX0JJVF9NQVNLKG4pCSgoKG4pID09IDY0KSA/IH4wVUxMIDogKCgxVUxMPDwobikpLTEpKQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAppbmRleCBhZjFkYWI0Li4xYTQ1NWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjZGVmaW5lIERNQV9QVEVfUkVBRCAoMSkKICNkZWZpbmUgRE1BX1BURV9XUklURSAoMikKKyNkZWZpbmUgRE1BX1BURV9TTlAgKDEgPDwgMTEpCiAKIHN0cnVjdCBpbnRlbF9pb21tdTsKIHN0cnVjdCBkbWFyX2RvbWFpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IDE5NTZjOGQuLjJlMmFhM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtMjMsOSArMjMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIC8qKgpAQCAtMjA1LDYgKzIwMiw3IEBACiAvKioKICAqIHN0cnVjdCBkbWFfZGV2aWNlIC0gaW5mbyBvbiB0aGUgZW50aXR5IHN1cHBseWluZyBETUEgc2VydmljZXMKICAqIEBjaGFuY250OiBob3cgbWFueSBETUEgY2hhbm5lbHMgYXJlIHN1cHBvcnRlZAorICogQHByaXZhdGVjbnQ6IGhvdyBtYW55IERNQSBjaGFubmVscyBhcmUgcmVxdWVzdGVkIGJ5IGRtYV9yZXF1ZXN0X2NoYW5uZWwKICAqIEBjaGFubmVsczogdGhlIGxpc3Qgb2Ygc3RydWN0IGRtYV9jaGFuCiAgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAogICogQGNhcF9tYXNrOiBvbmUgb3IgbW9yZSBkbWFfY2FwYWJpbGl0eSBmbGFncwpAQCAtMjI3LDYgKzIyNSw3IEBACiBzdHJ1Y3QgZG1hX2RldmljZSB7CiAKIAl1bnNpZ25lZCBpbnQgY2hhbmNudDsKKwl1bnNpZ25lZCBpbnQgcHJpdmF0ZWNudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5uZWxzOwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX25vZGU7CiAJZG1hX2NhcF9tYXNrX3QgIGNhcF9tYXNrOwpAQCAtMjkxLDYgKzI5MCwyNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVNZTkNfVFhfRE1BCisjZGVmaW5lIGFzeW5jX2RtYWVuZ2luZV9nZXQoKQlkbWFlbmdpbmVfZ2V0KCkKKyNkZWZpbmUgYXN5bmNfZG1hZW5naW5lX3B1dCgpCWRtYWVuZ2luZV9wdXQoKQorI2RlZmluZSBhc3luY19kbWFfZmluZF9jaGFubmVsKHR5cGUpIGRtYV9maW5kX2NoYW5uZWwodHlwZSkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfZG1hZW5naW5lX2dldCh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX2RtYWVuZ2luZV9wdXQodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9jaGFuICoKK2FzeW5jX2RtYV9maW5kX2NoYW5uZWwoZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCXZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CiBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLApAQCAtMzM3LDYgKzM1NCwxMyBAQAogCXNldF9iaXQodHhfdHlwZSwgZHN0cC0+Yml0cyk7CiB9CiAKKyNkZWZpbmUgZG1hX2NhcF9jbGVhcih0eCwgbWFzaykgX19kbWFfY2FwX2NsZWFyKCh0eCksICYobWFzaykpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fZG1hX2NhcF9jbGVhcihlbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR4X3R5cGUsIGRtYV9jYXBfbWFza190ICpkc3RwKQoreworCWNsZWFyX2JpdCh0eF90eXBlLCBkc3RwLT5iaXRzKTsKK30KKwogI2RlZmluZSBkbWFfY2FwX3plcm8obWFzaykgX19kbWFfY2FwX3plcm8oJihtYXNrKSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9jYXBfemVybyhkbWFfY2FwX21hc2tfdCAqZHN0cCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hci5oIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKaW5kZXggZjI4NDQwNy4uMmYzNDI3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWFyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFyLmgKQEAgLTI0LDEwICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfRE1BUikgfHwgZGVmaW5lZChDT05GSUdfSU5UUl9SRU1BUCkKIHN0cnVjdCBpbnRlbF9pb21tdTsKLQorI2lmIGRlZmluZWQoQ09ORklHX0RNQVIpIHx8IGRlZmluZWQoQ09ORklHX0lOVFJfUkVNQVApCiBzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgZHJoZCB1bml0cwkqLwogCXN0cnVjdCAgYWNwaV9kbWFyX2hlYWRlciAqaGRyOwkvKiBBQ1BJIGhlYWRlcgkJKi8KQEAgLTQ5LDcgKzQ5LDcgQEAKIAogLyogSW50ZWwgSU9NTVUgZGV0ZWN0aW9uICovCiBleHRlcm4gdm9pZCBkZXRlY3RfaW50ZWxfaW9tbXUodm9pZCk7Ci0KK2V4dGVybiBpbnQgZW5hYmxlX2RyaGRfZmF1bHRfaGFuZGxpbmcodm9pZCk7CiAKIGV4dGVybiBpbnQgcGFyc2VfaW9hcGljc191bmRlcl9pcih2b2lkKTsKIGV4dGVybiBpbnQgYWxsb2NfaW9tbXUoc3RydWN0IGRtYXJfZHJoZF91bml0ICopOwpAQCAtNjMsMTIgKzYzLDEyIEBACiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CitzdGF0aWMgaW5saW5lIGludCBlbmFibGVfZHJoZF9mYXVsdF9oYW5kbGluZyh2b2lkKQoreworCXJldHVybiAtMTsKK30KICNlbmRpZiAvKiAhQ09ORklHX0RNQVIgJiYgIUNPTkZJR19JTlRSX1JFTUFQICovCiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotZXh0ZXJuIGludCBpbnRyX3JlbWFwcGluZ19lbmFibGVkOwotZXh0ZXJuIGludCBlbmFibGVfaW50cl9yZW1hcHBpbmcoaW50KTsKLQogc3RydWN0IGlydGUgewogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTk3LDYgKzk3LDEwIEBACiAJCV9fdTY0IGhpZ2g7CiAJfTsKIH07CisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKK2V4dGVybiBpbnQgaW50cl9yZW1hcHBpbmdfZW5hYmxlZDsKK2V4dGVybiBpbnQgZW5hYmxlX2ludHJfcmVtYXBwaW5nKGludCk7CisKIGV4dGVybiBpbnQgZ2V0X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmVudHJ5KTsKIGV4dGVybiBpbnQgbW9kaWZ5X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmlydGVfbW9kaWZpZWQpOwogZXh0ZXJuIGludCBhbGxvY19pcnRlKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIGludCBpcnEsIHUxNiBjb3VudCk7CkBAIC0xMTEsMTQgKzExNSw0MCBAQAogZXh0ZXJuIHN0cnVjdCBpbnRlbF9pb21tdSAqbWFwX2Rldl90b19pcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9pb2FwaWNfdG9faXIoaW50IGFwaWMpOwogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2lydGUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGlycSwgdTE2IGNvdW50KQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1vZGlmeV9pcnRlKGludCBpcnEsIHN0cnVjdCBpcnRlICppcnRlX21vZGlmaWVkKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGZyZWVfaXJ0ZShpbnQgaXJxKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1hcF9pcnFfdG9faXJ0ZV9oYW5kbGUoaW50IGlycSwgdTE2ICpzdWJfaGFuZGxlKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNldF9pcnRlX2lycShpbnQgaXJxLCBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCB1MTYgaW5kZXgsCisJCQkgICAgICAgdTE2IHN1Yl9oYW5kbGUpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9kZXZfdG9faXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2lvbW11ICptYXBfaW9hcGljX3RvX2lyKGludCBhcGljKQoreworCXJldHVybiBOVUxMOworfQogI2RlZmluZSBpcnFfcmVtYXBwZWQoaXJxKQkJKDApCiAjZGVmaW5lIGVuYWJsZV9pbnRyX3JlbWFwcGluZyhtb2RlKQkoLTEpCiAjZGVmaW5lIGludHJfcmVtYXBwaW5nX2VuYWJsZWQJCSgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRE1BUgotZXh0ZXJuIGNvbnN0IGNoYXIgKmRtYXJfZ2V0X2ZhdWx0X3JlYXNvbih1OCBmYXVsdF9yZWFzb24pOwotCiAvKiBDYW4ndCB1c2UgdGhlIGNvbW1vbiBNU0kgaW50ZXJydXB0IGZ1bmN0aW9ucwogICogc2luY2UgRE1BUiBpcyBub3QgYSBwY2kgZGV2aWNlCiAgKi8KQEAgLTEyNyw4ICsxNTcsMTAgQEAKIGV4dGVybiB2b2lkIGRtYXJfbXNpX3JlYWQoaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiBleHRlcm4gdm9pZCBkbWFyX21zaV93cml0ZShpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIGV4dGVybiBpbnQgZG1hcl9zZXRfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOworZXh0ZXJuIGlycXJldHVybl90IGRtYXJfZmF1bHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiBpbnQgYXJjaF9zZXR1cF9kbWFyX21zaSh1bnNpZ25lZCBpbnQgaXJxKTsKIAorI2lmZGVmIENPTkZJR19ETUFSCiBleHRlcm4gaW50IGlvbW11X2RldGVjdGVkLCBub19pb21tdTsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGRtYXJfcm1ycl91bml0czsKIHN0cnVjdCBkbWFyX3JtcnJfdW5pdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCBkNzQxYjljLi5iYjU0ODljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTQ3LDcgKzQ3LDggQEAKIGV4dGVybiBpbnQgZG1pX25hbWVfaW5fdmVuZG9ycyhjb25zdCBjaGFyICpzdHIpOwogZXh0ZXJuIGludCBkbWlfbmFtZV9pbl9zZXJpYWwoY29uc3QgY2hhciAqc3RyKTsKIGV4dGVybiBpbnQgZG1pX2F2YWlsYWJsZTsKLWV4dGVybiBpbnQgZG1pX3dhbGsodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpOworZXh0ZXJuIGludCBkbWlfd2Fsayh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLCB2b2lkICopLAorCXZvaWQgKnByaXZhdGVfZGF0YSk7CiBleHRlcm4gYm9vbCBkbWlfbWF0Y2goZW51bSBkbWlfZmllbGQgZiwgY29uc3QgY2hhciAqc3RyKTsKIAogI2Vsc2UKQEAgLTYxLDggKzYyLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGRtaV9uYW1lX2luX3ZlbmRvcnMoY29uc3QgY2hhciAqcykgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgZG1pX25hbWVfaW5fc2VyaWFsKGNvbnN0IGNoYXIgKnMpIHsgcmV0dXJuIDA7IH0KICNkZWZpbmUgZG1pX2F2YWlsYWJsZSAwCi1zdGF0aWMgaW5saW5lIGludCBkbWlfd2Fsayh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqKSkKLQl7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgZG1pX3dhbGsodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKiwgdm9pZCAqKSwKKwl2b2lkICpwcml2YXRlX2RhdGEpIHsgcmV0dXJuIC0xOyB9CiBzdGF0aWMgaW5saW5lIGJvb2wgZG1pX21hdGNoKGVudW0gZG1pX2ZpZWxkIGYsIGNvbnN0IGNoYXIgKnN0cikKIAl7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R3X2RtYWMuaCBiL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oCmluZGV4IGQ3OTdkZGUuLmM4YWFkNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oCisrKyBiL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oCkBAIC03NCw0ICs3NCwyMyBAQAogI2RlZmluZSBEV0NfQ0ZHTF9IU19EU1RfUE9MCSgxIDw8IDE4KQkvKiBkc3QgaGFuZHNoYWtlIGFjdGl2ZSBsb3cgKi8KICNkZWZpbmUgRFdDX0NGR0xfSFNfU1JDX1BPTAkoMSA8PCAxOSkJLyogc3JjIGhhbmRzaGFrZSBhY3RpdmUgbG93ICovCiAKKy8qIERNQSBBUEkgZXh0ZW5zaW9ucyAqLworc3RydWN0IGR3X2N5Y2xpY19kZXNjIHsKKwlzdHJ1Y3QgZHdfZGVzYwkqKmRlc2M7CisJdW5zaWduZWQgbG9uZwlwZXJpb2RzOworCXZvaWQJCSgqcGVyaW9kX2NhbGxiYWNrKSh2b2lkICpwYXJhbSk7CisJdm9pZAkJKnBlcmlvZF9jYWxsYmFja19wYXJhbTsKK307CisKK3N0cnVjdCBkd19jeWNsaWNfZGVzYyAqZHdfZG1hX2N5Y2xpY19wcmVwKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2FkZHJfdCBidWZfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCBwZXJpb2RfbGVuLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwordm9pZCBkd19kbWFfY3ljbGljX2ZyZWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK2ludCBkd19kbWFfY3ljbGljX3N0YXJ0KHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7Cit2b2lkIGR3X2RtYV9jeWNsaWNfc3RvcChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCitkbWFfYWRkcl90IGR3X2RtYV9nZXRfc3JjX2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKworZG1hX2FkZHJfdCBkd19kbWFfZ2V0X2RzdF9hZGRyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKICNlbmRpZiAvKiBEV19ETUFDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oIGIvaW5jbHVkZS9saW51eC9ldmVudGZkLmgKaW5kZXggYTY2NzYzNy4uZjQ1YThhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldmVudGZkLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldmVudGZkLmgKQEAgLTEzLDEwICsxMywyMCBAQAogLyogRm9yIE9fQ0xPRVhFQyBhbmQgT19OT05CTE9DSyAqLwogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAKLS8qIEZsYWdzIGZvciBldmVudGZkMi4gICovCisvKgorICogQ0FSRUZVTDogQ2hlY2sgaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIHdoZW4gZGVmaW5pbmcKKyAqIG5ldyBmbGFncywgc2luY2UgdGhleSBtaWdodCBjb2xsaWRlIHdpdGggT18qIG9uZXMuIFdlIHdhbnQKKyAqIHRvIHJlLXVzZSBPXyogZmxhZ3MgdGhhdCBjb3VsZG4ndCBwb3NzaWJseSBoYXZlIGEgbWVhbmluZworICogZnJvbSBldmVudGZkLCBpbiBvcmRlciB0byBsZWF2ZSBhIGZyZWUgZGVmaW5lLXNwYWNlIGZvcgorICogc2hhcmVkIE9fKiBmbGFncy4KKyAqLworI2RlZmluZSBFRkRfU0VNQVBIT1JFICgxIDw8IDApCiAjZGVmaW5lIEVGRF9DTE9FWEVDIE9fQ0xPRVhFQwogI2RlZmluZSBFRkRfTk9OQkxPQ0sgT19OT05CTE9DSwogCisjZGVmaW5lIEVGRF9TSEFSRURfRkNOVExfRkxBR1MgKE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spCisjZGVmaW5lIEVGRF9GTEFHU19TRVQgKEVGRF9TSEFSRURfRkNOVExfRkxBR1MgfCBFRkRfU0VNQVBIT1JFKQorCiBzdHJ1Y3QgZmlsZSAqZXZlbnRmZF9mZ2V0KGludCBmZCk7CiBpbnQgZXZlbnRmZF9zaWduYWwoc3RydWN0IGZpbGUgKmZpbGUsIGludCBuKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAppbmRleCBkZDQ5NWI4Li42MzRhNWU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaApAQCAtMjA4LDYgKzIwOCw3IEBACiAjZGVmaW5lIEVYVDNfU1RBVEVfSkRBVEEJCTB4MDAwMDAwMDEgLyogam91cm5hbGVkIGRhdGEgZXhpc3RzICovCiAjZGVmaW5lIEVYVDNfU1RBVEVfTkVXCQkJMHgwMDAwMDAwMiAvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCiAjZGVmaW5lIEVYVDNfU1RBVEVfWEFUVFIJCTB4MDAwMDAwMDQgLyogaGFzIGluLWlub2RlIHhhdHRycyAqLworI2RlZmluZSBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFCTB4MDAwMDAwMDgKIAogLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwogc3RydWN0IGV4dDNfbmV3X2dyb3VwX2lucHV0IHsKQEAgLTg5Myw5ICs4OTQsOCBAQAogCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgbGVuKTsKIAogLyogaW9jdGwuYyAqLwotZXh0ZXJuIGludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAotCQkgICAgICAgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gbG9uZyBleHQzX2NvbXBhdF9pb2N0bCAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGV4dDNfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGV4dDNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIG5hbWVpLmMgKi8KIGV4dGVybiBpbnQgZXh0M19vcnBoYW5fYWRkKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCAzMTUyN2UxLi5mNTYzYzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF8zRElNQUdFIDUxCS8qIFRyaWRlbnQgM0RJbWFnZQkJKi8KICNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF9CTEFERTNEIDUyCS8qIFRyaWRlbnQgQmxhZGUzRAkJKi8KICNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF9CTEFERVhQIDUzCS8qIFRyaWRlbnQgQmxhZGVYUAkJKi8KKyNkZWZpbmUgRkJfQUNDRUxfQ0lSUlVTX0FMUElORSAgIDUzCS8qIENpcnJ1cyBMb2dpYyA1NDN4LzU0NHgvNTQ4MAkqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIwNzAgOTAJLyogTmVvTWFnaWMgTk0yMDcwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIwOTAgOTEJLyogTmVvTWFnaWMgTk0yMDkwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIwOTMgOTIJLyogTmVvTWFnaWMgTk0yMDkzICAgICAgICAgICAgICAqLwpAQCAtOTYwLDE1ICs5NjEsNyBAQAogZXh0ZXJuIGludCBudW1fcmVnaXN0ZXJlZF9mYjsKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgKmZiX2NsYXNzOwogCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7Ci0JaWYgKCFpbmZvLT5mYm9wcykgewotCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19CitleHRlcm4gaW50IGxvY2tfZmJfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfZmJfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA0MjQzNmFlLi5hMDllMTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC04NDksNyArODQ5LDcgQEAKICNkZWZpbmUgZl9kZW50cnkJZl9wYXRoLmRlbnRyeQogI2RlZmluZSBmX3Zmc21udAlmX3BhdGgubW50CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKLQlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzICovCisJc3BpbmxvY2tfdAkJZl9sb2NrOyAgLyogZl9lcF9saW5rcywgZl9mbGFncywgbm8gSVJRICovCiAJYXRvbWljX2xvbmdfdAkJZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwogCWZtb2RlX3QJCQlmX21vZGU7CkBAIC0xNzQxLDYgKzE3NDEsOCBAQAogCiBleHRlcm4gaW50IHZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKIAorZXh0ZXJuIGludCBjdXJyZW50X3VtYXNrKHZvaWQpOworCiAvKiAvc3lzL2ZzICovCiBleHRlcm4gc3RydWN0IGtvYmplY3QgKmZzX2tvYmo7CiAKQEAgLTE4NzgsMTIgKzE4ODAsMjUgQEAKIGV4dGVybiB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiB2b2lkIGVtZXJnZW5jeV90aGF3X2FsbCh2b2lkKTsKIGV4dGVybiBpbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgZnN5bmNfbm9fc3VwZXIoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYmRfZm9yZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIGludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikge30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKnNiKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Nocl9mb3BzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKaW5kZXggMThiNDY3ZC4uNzhhMDViZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCkBAIC00LDEyICs0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGF0aC5oPgogCiBzdHJ1Y3QgZnNfc3RydWN0IHsKLQlhdG9taWNfdCBjb3VudDsJLyogVGhpcyB1c2FnZSBjb3VudCBpcyB1c2VkIGJ5IGNoZWNrX3Vuc2FmZV9leGVjKCkgZm9yCi0JCQkgKiBzZWN1cml0eSBjaGVja2luZyBwdXJwb3NlcyAtIHRoZXJlZm9yZSBpdCBtYXkgbm90IGJlCi0JCQkgKiBpbmNyZW1lbnRlZCwgZXhjZXB0IGJ5IGNsb25lKENMT05FX0ZTKS4KLQkJCSAqLworCWludCB1c2VyczsKIAlyd2xvY2tfdCBsb2NrOwogCWludCB1bWFzazsKKwlpbnQgaW5fZXhlYzsKIAlzdHJ1Y3QgcGF0aCByb290LCBwd2Q7CiB9OwogCkBAIC0xOSw2ICsxNyw4IEBACiBleHRlcm4gdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICosIHN0cnVjdCBwYXRoICopOwogZXh0ZXJuIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICosIHN0cnVjdCBwYXRoICopOwogZXh0ZXJuIHN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCBwdXRfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCBmcmVlX2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZGFlbW9uaXplX2ZzX3N0cnVjdCh2b2lkKTsKK2V4dGVybiBpbnQgdW5zaGFyZV9mc19zdHJ1Y3Qodm9pZCk7CiAKICNlbmRpZiAvKiBfTElOVVhfRlNfU1RSVUNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMzUzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oCkBAIC0wLDAgKzEsNTA1IEBACisvKiBHZW5lcmFsIGZpbGVzeXN0ZW0gY2FjaGluZyBiYWNraW5nIGNhY2hlIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIE5PVEUhISEgU2VlOgorICoKKyAqCURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQKKyAqCisgKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgY2FjaGUgYmFja2VuZCBpbnRlcmZhY2UgZGVjbGFyZWQgaGVyZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9GU0NBQ0hFX0NBQ0hFX0gKKyNkZWZpbmUgX0xJTlVYX0ZTQ0FDSEVfQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CisKKyNkZWZpbmUgTlJfTUFYQ0FDSEVTIEJJVFNfUEVSX0xPTkcKKworc3RydWN0IGZzY2FjaGVfY2FjaGU7CitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHM7CitzdHJ1Y3QgZnNjYWNoZV9vYmplY3Q7CitzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb247CisKKy8qCisgKiBjYWNoZSB0YWcgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgeworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZQkqY2FjaGU7CQkvKiBjYWNoZSByZWZlcnJlZCB0byBieSB0aGlzIHRhZyAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBGU0NBQ0hFX1RBR19SRVNFUlZFRAkwCQkvKiBUIGlmIHRhZyBpcyByZXNlcnZlZCBmb3IgYSBjYWNoZSAqLworCWF0b21pY190CQl1c2FnZTsKKwljaGFyCQkJbmFtZVswXTsJLyogdGFnIG5hbWUgKi8KK307CisKKy8qCisgKiBjYWNoZSBkZWZpbml0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX2NhY2hlIHsKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHMgKm9wczsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZzsJCS8qIHRhZyByZXByZXNlbnRpbmcgdGhpcyBjYWNoZSAqLworCXN0cnVjdCBrb2JqZWN0CQkqa29iajsJCS8qIHN5c3RlbSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGNhY2hlICovCisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOwkJLyogbGluayBpbiBsaXN0IG9mIGNhY2hlcyAqLworCXNpemVfdAkJCW1heF9pbmRleF9zaXplOwkvKiBtYXhpbXVtIHNpemUgb2YgaW5kZXggZGF0YSAqLworCWNoYXIJCQlpZGVudGlmaWVyWzM2XTsJLyogY2FjaGUgbGFiZWwgKi8KKworCS8qIG5vZGUgbWFuYWdlbWVudCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdAlvcF9nYzsJCS8qIG9wZXJhdGlvbiBnYXJiYWdlIGNvbGxlY3RvciAqLworCXN0cnVjdCBsaXN0X2hlYWQJb2JqZWN0X2xpc3Q7CS8qIGxpc3Qgb2YgZGF0YS9pbmRleCBvYmplY3RzICovCisJc3RydWN0IGxpc3RfaGVhZAlvcF9nY19saXN0OwkvKiBsaXN0IG9mIG9wcyB0byBiZSBkZWxldGVkICovCisJc3BpbmxvY2tfdAkJb2JqZWN0X2xpc3RfbG9jazsKKwlzcGlubG9ja190CQlvcF9nY19saXN0X2xvY2s7CisJYXRvbWljX3QJCW9iamVjdF9jb3VudDsJLyogbm8uIG9mIGxpdmUgb2JqZWN0cyBpbiB0aGlzIGNhY2hlICovCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CSpmc2RlZjsJCS8qIG9iamVjdCBmb3IgdGhlIGZzZGVmIGluZGV4ICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisjZGVmaW5lIEZTQ0FDSEVfSU9FUlJPUgkJMAkvKiBjYWNoZSBzdG9wcGVkIG9uIEkvTyBlcnJvciAqLworI2RlZmluZSBGU0NBQ0hFX0NBQ0hFX1dJVEhEUkFXTgkxCS8qIGNhY2hlIGhhcyBiZWVuIHdpdGhkcmF3biAqLworfTsKKworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGZzY2FjaGVfY2FjaGVfY2xlYXJlZF93cTsKKworLyoKKyAqIG9wZXJhdGlvbiB0byBiZSBhcHBsaWVkIHRvIGEgY2FjaGUgb2JqZWN0CisgKiAtIHJldHJpZXZhbCBpbml0aWF0aW9uIG9wZXJhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MKKyAqICAgdGhhdCBpc3N1ZWQgdGhlbSwgYW5kIG5vdCBpbiBhbiBhc3luYyB0aHJlYWQgcG9vbAorICovCit0eXBlZGVmIHZvaWQgKCpmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QpKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOwordHlwZWRlZiB2b2lkICgqZnNjYWNoZV9vcGVyYXRpb25fcHJvY2Vzc29yX3QpKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCitzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24geworCXVuaW9uIHsKKwkJc3RydWN0IHdvcmtfc3RydWN0IGZhc3Rfd29yazsJLyogcmVjb3JkIGZvciBmYXN0IG9wcyAqLworCQlzdHJ1Y3Qgc2xvd193b3JrIHNsb3dfd29yazsJLyogcmVjb3JkIGZvciAodmVyeSkgc2xvdyBvcHMgKi8KKwl9OworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZF9saW5rOwkvKiBsaW5rIGluIG9iamVjdC0+cGVuZGluZ19vcHMgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QJKm9iamVjdDsJLyogb2JqZWN0IHRvIGJlIG9wZXJhdGVkIHVwb24gKi8KKworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBGU0NBQ0hFX09QX1RZUEUJCTB4MDAwZgkvKiBvcGVyYXRpb24gdHlwZSAqLworI2RlZmluZSBGU0NBQ0hFX09QX0ZBU1QJCTB4MDAwMQkvKiAtIGZhc3Qgb3AsIHByb2Nlc3NvciBtYXkgbm90IHNsZWVwIGZvciBkaXNrICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfU0xPVwkJMHgwMDAyCS8qIC0gKHZlcnkpIHNsb3cgb3AsIHByb2Nlc3NvciBtYXkgc2xlZXAgZm9yIGRpc2sgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9NWVRIUkVBRAkweDAwMDMJLyogLSBwcm9jZXNzaW5nIGlzIGRvbmUgYmUgaXNzdWluZyB0aHJlYWQsIG5vdCBwb29sICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfV0FJVElORwk0CS8qIGNsZWFyZWQgd2hlbiBvcCBpcyB3b2tlbiAqLworI2RlZmluZSBGU0NBQ0hFX09QX0VYQ0xVU0lWRQk1CS8qIGV4Y2x1c2l2ZSBvcCwgb3RoZXIgb3BzIG11c3Qgd2FpdCAqLworI2RlZmluZSBGU0NBQ0hFX09QX0RFQUQJCTYJLyogb3AgaXMgbm93IGRlYWQgKi8KKworCWF0b21pY190CQl1c2FnZTsKKwl1bnNpZ25lZAkJZGVidWdfaWQ7CS8qIGRlYnVnZ2luZyBJRCAqLworCisJLyogb3BlcmF0aW9uIHByb2Nlc3NvciBjYWxsYmFjaworCSAqIC0gY2FuIGJlIE5VTEwgaWYgRlNDQUNIRV9PUF9XQUlUSU5HIGlzIGdvaW5nIHRvIGJlIHVzZWQgdG8gcGVyZm9ybQorCSAqICAgdGhlIG9wIGluIGEgbm9uLXBvb2wgdGhyZWFkICovCisJZnNjYWNoZV9vcGVyYXRpb25fcHJvY2Vzc29yX3QgcHJvY2Vzc29yOworCisJLyogb3BlcmF0aW9uIHJlbGVhc2VyICovCisJZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90IHJlbGVhc2U7Cit9OworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9vcF9kZWJ1Z19pZDsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29wX3Nsb3dfd29ya19vcHM7CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICopOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9wdXRfb3BlcmF0aW9uKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKKworLyoqCisgKiBmc2NhY2hlX29wZXJhdGlvbl9pbml0IC0gRG8gYmFzaWMgaW5pdGlhbGlzYXRpb24gb2YgYW4gb3BlcmF0aW9uCisgKiBAb3A6IFRoZSBvcGVyYXRpb24gdG8gaW5pdGlhbGlzZQorICogQHJlbGVhc2U6IFRoZSByZWxlYXNlIGZ1bmN0aW9uIHRvIGFzc2lnbgorICoKKyAqIERvIGJhc2ljIGluaXRpYWxpc2F0aW9uIG9mIGFuIG9wZXJhdGlvbi4gIFRoZSBjYWxsZXIgbXVzdCBzdGlsbCBzZXQgZmxhZ3MsCisgKiBvYmplY3QsIGVpdGhlciBmYXN0X3dvcmsgb3Igc2xvd193b3JrIGlmIG5lY2Vzc2FyeSwgYW5kIHByb2Nlc3NvciBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX29wZXJhdGlvbl9pbml0KHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AsCisJCQkJCSAgZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90IHJlbGVhc2UpCit7CisJYXRvbWljX3NldCgmb3AtPnVzYWdlLCAxKTsKKwlvcC0+ZGVidWdfaWQgPSBhdG9taWNfaW5jX3JldHVybigmZnNjYWNoZV9vcF9kZWJ1Z19pZCk7CisJb3AtPnJlbGVhc2UgPSByZWxlYXNlOworCUlOSVRfTElTVF9IRUFEKCZvcC0+cGVuZF9saW5rKTsKK30KKworLyoqCisgKiBmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3cgLSBEbyBhZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIG9mIGEgc2xvdyBvcAorICogQG9wOiBUaGUgb3BlcmF0aW9uIHRvIGluaXRpYWxpc2UKKyAqIEBwcm9jZXNzb3I6IFRoZSBwcm9jZXNzb3IgZnVuY3Rpb24gdG8gYXNzaWduCisgKgorICogRG8gYWRkaXRpb25hbCBpbml0aWFsaXNhdGlvbiBvZiBhbiBvcGVyYXRpb24gYXMgcmVxdWlyZWQgZm9yIHNsb3cgd29yay4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3coc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCwKKwkJCQkgZnNjYWNoZV9vcGVyYXRpb25fcHJvY2Vzc29yX3QgcHJvY2Vzc29yKQoreworCW9wLT5wcm9jZXNzb3IgPSBwcm9jZXNzb3I7CisJc2xvd193b3JrX2luaXQoJm9wLT5zbG93X3dvcmssICZmc2NhY2hlX29wX3Nsb3dfd29ya19vcHMpOworfQorCisvKgorICogZGF0YSByZWFkIG9wZXJhdGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgeworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiBvcDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZzsJLyogbmV0ZnMgcGFnZXMgKi8KKwlmc2NhY2hlX3J3X2NvbXBsZXRlX3QJZW5kX2lvX2Z1bmM7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgb24gSS9PIGNvbXBsZXRpb24gKi8KKwl2b2lkCQkJKmNvbnRleHQ7CS8qIG5ldGZzIHJlYWQgY29udGV4dCAocGlubmVkKSAqLworCXN0cnVjdCBsaXN0X2hlYWQJdG9fZG87CQkvKiBsaXN0IG9mIHRoaW5ncyB0byBiZSBkb25lIGJ5IHRoZSBiYWNrZW5kICovCisJdW5zaWduZWQgbG9uZwkJc3RhcnRfdGltZTsJLyogdGltZSBhdCB3aGljaCByZXRyaWV2YWwgc3RhcnRlZCAqLworfTsKKwordHlwZWRlZiBpbnQgKCpmc2NhY2hlX3BhZ2VfcmV0cmlldmFsX2Z1bmNfdCkoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICBnZnBfdCBnZnApOworCit0eXBlZGVmIGludCAoKmZzY2FjaGVfcGFnZXNfcmV0cmlldmFsX2Z1bmNfdCkoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJCSAgICAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkJICAgICAgZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBmc2NhY2hlX2dldF9yZXRyaWV2YWwgLSBHZXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmV0cmlldmFsIG9wZXJhdGlvbgorICogQG9wOiBUaGUgcmV0cmlldmFsIG9wZXJhdGlvbiB0byBnZXQgYSByZWZlcmVuY2Ugb24KKyAqCisgKiBHZXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmV0cmlldmFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZQorc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpmc2NhY2hlX2dldF9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCkKK3sKKwlhdG9taWNfaW5jKCZvcC0+b3AudXNhZ2UpOworCXJldHVybiBvcDsKK30KKworLyoqCisgKiBmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsIC0gRW5xdWV1ZSBhIHJldHJpZXZhbCBvcGVyYXRpb24gZm9yIHByb2Nlc3NpbmcKKyAqIEBvcDogVGhlIHJldHJpZXZhbCBvcGVyYXRpb24gYWZmZWN0ZWQKKyAqCisgKiBFbnF1ZXVlIGEgcmV0cmlldmFsIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZyBieSB0aGUgRlMtQ2FjaGUgdGhyZWFkIHBvb2wuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApCit7CisJZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbigmb3AtPm9wKTsKK30KKworLyoqCisgKiBmc2NhY2hlX3B1dF9yZXRyaWV2YWwgLSBEcm9wIGEgcmVmZXJlbmNlIHRvIGEgcmV0cmlldmFsIG9wZXJhdGlvbgorICogQG9wOiBUaGUgcmV0cmlldmFsIG9wZXJhdGlvbiBhZmZlY3RlZAorICoKKyAqIERyb3AgYSByZWZlcmVuY2UgdG8gYSByZXRyaWV2YWwgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9wdXRfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApCit7CisJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKCZvcC0+b3ApOworfQorCisvKgorICogY2FjaGVkIHBhZ2Ugc3RvcmFnZSB3b3JrIGl0ZW0KKyAqIC0gdXNlZCB0byBkbyB0aHJlZSB0aGluZ3M6CisgKiAgIC0gYmF0Y2ggd3JpdGVzIHRvIHRoZSBjYWNoZQorICogICAtIGRvIGNhY2hlIHdyaXRlcyBhc3luY2hyb25vdXNseQorICogICAtIGRlZmVyIHdyaXRlcyB1bnRpbCBjYWNoZSBvYmplY3QgbG9va3VwIGNvbXBsZXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfc3RvcmFnZSB7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIG9wOworCXBnb2ZmX3QJCQlzdG9yZV9saW1pdDsJLyogZG9uJ3Qgd3JpdGUgbW9yZSB0aGFuIHRoaXMgKi8KK307CisKKy8qCisgKiBjYWNoZSBvcGVyYXRpb25zCisgKi8KK3N0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyB7CisJLyogbmFtZSBvZiBjYWNoZSBwcm92aWRlciAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkvKiBhbGxvY2F0ZSBhbiBvYmplY3QgcmVjb3JkIGZvciBhIGNvb2tpZSAqLworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqKCphbGxvY19vYmplY3QpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKKworCS8qIGxvb2sgdXAgdGhlIG9iamVjdCBmb3IgYSBjb29raWUgKi8KKwl2b2lkICgqbG9va3VwX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogZmluaXNoZWQgbG9va2luZyB1cCAqLworCXZvaWQgKCpsb29rdXBfY29tcGxldGUpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIGluY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb24gdGhpcyBvYmplY3QgKG1heSBmYWlsIGlmIHVubW91bnRpbmcpICovCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICooKmdyYWJfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBwaW4gYW4gb2JqZWN0IGluIHRoZSBjYWNoZSAqLworCWludCAoKnBpbl9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIHVucGluIGFuIG9iamVjdCBpbiB0aGUgY2FjaGUgKi8KKwl2b2lkICgqdW5waW5fb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBzdG9yZSB0aGUgdXBkYXRlZCBhdXhpbGxpYXJ5IGRhdGEgb24gYW4gb2JqZWN0ICovCisJdm9pZCAoKnVwZGF0ZV9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIGRpc2NhcmQgdGhlIHJlc291cmNlcyBwaW5uZWQgYnkgYW4gb2JqZWN0IGFuZCBlZmZlY3QgcmV0aXJlbWVudCBpZgorCSAqIG5lY2Vzc2FyeSAqLworCXZvaWQgKCpkcm9wX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogZGlzcG9zZSBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgKi8KKwl2b2lkICgqcHV0X29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogc3luYyBhIGNhY2hlICovCisJdm9pZCAoKnN5bmNfY2FjaGUpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7CisKKwkvKiBub3RpZmljYXRpb24gdGhhdCB0aGUgYXR0cmlidXRlcyBvZiBhIG5vbi1pbmRleCBvYmplY3QgKHN1Y2ggYXMKKwkgKiBpX3NpemUpIGhhdmUgY2hhbmdlZCAqLworCWludCAoKmF0dHJfY2hhbmdlZCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgYW4gb2JqZWN0J3MgZGF0YSBhbmQgYXNzb2NpYXRlZCBtZXRhZGF0YSAqLworCWludCAoKnJlc2VydmVfc3BhY2UpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LCBsb2ZmX3QgaV9zaXplKTsKKworCS8qIHJlcXVlc3QgYSBiYWNraW5nIGJsb2NrIGZvciBhIHBhZ2UgYmUgcmVhZCBvciBhbGxvY2F0ZWQgaW4gdGhlCisJICogY2FjaGUgKi8KKwlmc2NhY2hlX3BhZ2VfcmV0cmlldmFsX2Z1bmNfdCByZWFkX29yX2FsbG9jX3BhZ2U7CisKKwkvKiByZXF1ZXN0IGJhY2tpbmcgYmxvY2tzIGZvciBhIGxpc3Qgb2YgcGFnZXMgYmUgcmVhZCBvciBhbGxvY2F0ZWQgaW4KKwkgKiB0aGUgY2FjaGUgKi8KKwlmc2NhY2hlX3BhZ2VzX3JldHJpZXZhbF9mdW5jX3QgcmVhZF9vcl9hbGxvY19wYWdlczsKKworCS8qIHJlcXVlc3QgYSBiYWNraW5nIGJsb2NrIGZvciBhIHBhZ2UgYmUgYWxsb2NhdGVkIGluIHRoZSBjYWNoZSBzbyB0aGF0CisJICogaXQgY2FuIGJlIHdyaXR0ZW4gZGlyZWN0bHkgKi8KKwlmc2NhY2hlX3BhZ2VfcmV0cmlldmFsX2Z1bmNfdCBhbGxvY2F0ZV9wYWdlOworCisJLyogcmVxdWVzdCBiYWNraW5nIGJsb2NrcyBmb3IgcGFnZXMgYmUgYWxsb2NhdGVkIGluIHRoZSBjYWNoZSBzbyB0aGF0CisJICogdGhleSBjYW4gYmUgd3JpdHRlbiBkaXJlY3RseSAqLworCWZzY2FjaGVfcGFnZXNfcmV0cmlldmFsX2Z1bmNfdCBhbGxvY2F0ZV9wYWdlczsKKworCS8qIHdyaXRlIGEgcGFnZSB0byBpdHMgYmFja2luZyBibG9jayBpbiB0aGUgY2FjaGUgKi8KKwlpbnQgKCp3cml0ZV9wYWdlKShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCwgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisJLyogZGV0YWNoIGJhY2tpbmcgYmxvY2sgZnJvbSBhIHBhZ2UgKG9wdGlvbmFsKQorCSAqIC0gbXVzdCByZWxlYXNlIHRoZSBjb29raWUgbG9jayBiZWZvcmUgcmV0dXJuaW5nCisJICogLSBtYXkgc2xlZXAKKwkgKi8KKwl2b2lkICgqdW5jYWNoZV9wYWdlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpOworCisJLyogZGlzc29jaWF0ZSBhIGNhY2hlIGZyb20gYWxsIHRoZSBwYWdlcyBpdCB3YXMgYmFja2luZyAqLworCXZvaWQgKCpkaXNzb2NpYXRlX3BhZ2VzKShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworfTsKKworLyoKKyAqIGRhdGEgZmlsZSBvciBpbmRleCBvYmplY3QgY29va2llCisgKiAtIGEgZmlsZSB3aWxsIG9ubHkgYXBwZWFyIGluIG9uZSBjYWNoZQorICogLSBhIHJlcXVlc3QgdG8gY2FjaGUgYSBmaWxlIG1heSBvciBtYXkgbm90IGJlIGhvbm91cmVkLCBzdWJqZWN0IHRvCisgKiAgIGNvbnN0cmFpbnRzIHN1Y2ggYXMgZGlzayBzcGFjZQorICogLSBpbmRpY2VzIGFyZSBjcmVhdGVkIG9uIGRpc2sganVzdC1pbi10aW1lCisgKi8KK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZSB7CisJYXRvbWljX3QJCQl1c2FnZTsJCS8qIG51bWJlciBvZiB1c2VycyBvZiB0aGlzIGNvb2tpZSAqLworCWF0b21pY190CQkJbl9jaGlsZHJlbjsJLyogbnVtYmVyIG9mIGNoaWxkcmVuIG9mIHRoaXMgY29va2llICovCisJc3BpbmxvY2tfdAkJCWxvY2s7CisJc3RydWN0IGhsaXN0X2hlYWQJCWJhY2tpbmdfb2JqZWN0czsgLyogb2JqZWN0KHMpIGJhY2tpbmcgdGhpcyBmaWxlL2luZGV4ICovCisJY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZgkqZGVmOwkJLyogZGVmaW5pdGlvbiAqLworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkJKnBhcmVudDsJLyogcGFyZW50IG9mIHRoaXMgZW50cnkgKi8KKwl2b2lkCQkJCSpuZXRmc19kYXRhOwkvKiBiYWNrIHBvaW50ZXIgdG8gbmV0ZnMgKi8KKwlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CQlzdG9yZXM7CQkvKiBwYWdlcyB0byBiZSBzdG9yZWQgb24gdGhpcyBjb29raWUgKi8KKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcJMAkJLyogcGFnZXMgdGFnOiBwZW5kaW5nIHdyaXRlIHRvIGNhY2hlICovCisKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAJMAkvKiBUIGlmIG5vbi1pbmRleCBjb29raWUgYmVpbmcgbG9va2VkIHVwIHN0aWxsICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HCQkxCS8qIFQgaWYgbm9uLWluZGV4IG9iamVjdCBiZWluZyBjcmVhdGVkIHN0aWxsICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVUCTIJLyogVCBpZiBuZXcgb2JqZWN0IHdpdGggbm8gY2FjaGVkIGRhdGEgeWV0ICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfRklMTAkzCS8qIFQgaWYgcGVuZGluZyBpbml0aWFsIGZpbGwgb24gb2JqZWN0ICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX0ZJTExJTkcJCTQJLyogVCBpZiBmaWxsaW5nIG9iamVjdCBpbmNyZW1lbnRhbGx5ICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX1VOQVZBSUxBQkxFCTUJLyogVCBpZiBjb29raWUgaXMgdW5hdmFpbGFibGUgKGVycm9yLCBldGMpICovCit9OworCitleHRlcm4gc3RydWN0IGZzY2FjaGVfY29va2llIGZzY2FjaGVfZnNkZWZfaW5kZXg7CisKKy8qCisgKiBvbi1kaXNrIGNhY2hlIGZpbGUgb3IgaW5kZXggaGFuZGxlCisgKi8KK3N0cnVjdCBmc2NhY2hlX29iamVjdCB7CisJZW51bSBmc2NhY2hlX29iamVjdF9zdGF0ZSB7CisJCUZTQ0FDSEVfT0JKRUNUX0lOSVQsCQkvKiBvYmplY3QgaW4gaW5pdGlhbCB1bmJvdW5kIHN0YXRlICovCisJCUZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVAsCS8qIGxvb2tpbmcgdXAgb2JqZWN0ICovCisJCUZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HLAkvKiBjcmVhdGluZyBvYmplY3QgKi8KKworCQkvKiBhY3RpdmUgc3RhdGVzICovCisJCUZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSwJLyogY2xlYW5pbmcgdXAgb2JqZWN0IGFmdGVyIGNyZWF0aW9uICovCisJCUZTQ0FDSEVfT0JKRUNUX0FDVElWRSwJCS8qIG9iamVjdCBpcyB1c2FibGUgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkcsCS8qIG9iamVjdCBpcyB1cGRhdGluZyAqLworCisJCS8qIHRlcm1pbmFsIHN0YXRlcyAqLworCQlGU0NBQ0hFX09CSkVDVF9EWUlORywJCS8qIG9iamVjdCB3YWl0aW5nIGZvciBhY2Nlc3NvcnMgdG8gZmluaXNoICovCisJCUZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HLAkvKiBvYmplY3QgY2xlYW5pbmcgdXAgYWZ0ZXIgbG9va3VwL2NyZWF0ZSAqLworCQlGU0NBQ0hFX09CSkVDVF9BQk9SVF9JTklULAkvKiBhYm9ydCB0aGUgaW5pdCBzdGF0ZSAqLworCQlGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkcsCS8qIHJlbGVhc2luZyBvYmplY3QgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLAkvKiByZXRpcmluZyBvYmplY3QgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkcsCS8qIHdpdGhkcmF3aW5nIG9iamVjdCAqLworCQlGU0NBQ0hFX09CSkVDVF9ERUFELAkJLyogb2JqZWN0IGlzIG5vdyBkZWFkICovCisJfSBzdGF0ZTsKKworCWludAkJCWRlYnVnX2lkOwkvKiBkZWJ1Z2dpbmcgSUQgKi8KKwlpbnQJCQluX2NoaWxkcmVuOwkvKiBudW1iZXIgb2YgY2hpbGQgb2JqZWN0cyAqLworCWludAkJCW5fb3BzOwkJLyogbnVtYmVyIG9mIG9wcyBvdXRzdGFuZGluZyBvbiBvYmplY3QgKi8KKwlpbnQJCQluX29ial9vcHM7CS8qIG51bWJlciBvZiBvYmplY3Qgb3BzIG91dHN0YW5kaW5nIG9uIG9iamVjdCAqLworCWludAkJCW5faW5fcHJvZ3Jlc3M7CS8qIG51bWJlciBvZiBvcHMgaW4gcHJvZ3Jlc3MgKi8KKwlpbnQJCQluX2V4Y2x1c2l2ZTsJLyogbnVtYmVyIG9mIGV4Y2x1c2l2ZSBvcHMgcXVldWVkICovCisJc3BpbmxvY2tfdAkJbG9jazsJCS8qIHN0YXRlIGFuZCBvcGVyYXRpb25zIGxvY2sgKi8KKworCXVuc2lnbmVkIGxvbmcJCWxvb2t1cF9qaWY7CS8qIHRpbWUgYXQgd2hpY2ggbG9va3VwIHN0YXJ0ZWQgKi8KKwl1bnNpZ25lZCBsb25nCQlldmVudF9tYXNrOwkvKiBldmVudHMgdGhpcyBvYmplY3QgaXMgaW50ZXJlc3RlZCBpbiAqLworCXVuc2lnbmVkIGxvbmcJCWV2ZW50czsJCS8qIGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYnkgdGhpcyBvYmplY3QKKwkJCQkJCSAqIChvcmRlciBpcyBpbXBvcnRhbnQgLSB1c2luZyBmbHMpICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUJMAkvKiBUIGlmIG9iamVjdCBzaG91bGQgYmUgcmVxdWV1ZWQgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfVVBEQVRFCTEJLyogVCBpZiBvYmplY3Qgc2hvdWxkIGJlIHVwZGF0ZWQgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRAkyCS8qIFQgaWYgYWNjZXNzb3JzIGFsbCBnb25lICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SCQkzCS8qIFQgaWYgZmF0YWwgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRQk0CS8qIFQgaWYgbmV0ZnMgcmVxdWVzdGVkIG9iamVjdCByZWxlYXNlICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX1JFVElSRQk1CS8qIFQgaWYgbmV0ZnMgcmVxdWVzdGVkIG9iamVjdCByZXRpcmVtZW50ICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXCTYJLyogVCBpZiBjYWNoZSByZXF1ZXN0ZWQgb2JqZWN0IHdpdGhkcmF3YWwgKi8KKworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9MT0NLCQkwCS8qIFQgaWYgb2JqZWN0IGlzIGJ1c3kgYmVpbmcgcHJvY2Vzc2VkICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX1BFTkRJTkdfV1JJVEUJMQkvKiBUIGlmIG9iamVjdCBoYXMgcGVuZGluZyB3cml0ZSAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9XQUlUSU5HCQkyCS8qIFQgaWYgb2JqZWN0IGlzIHdhaXRpbmcgb24gaXRzIHBhcmVudCAqLworCisJc3RydWN0IGxpc3RfaGVhZAljYWNoZV9saW5rOwkvKiBsaW5rIGluIGNhY2hlLT5vYmplY3RfbGlzdCAqLworCXN0cnVjdCBobGlzdF9ub2RlCWNvb2tpZV9saW5rOwkvKiBsaW5rIGluIGNvb2tpZS0+YmFja2luZ19vYmplY3RzICovCisJc3RydWN0IGZzY2FjaGVfY2FjaGUJKmNhY2hlOwkJLyogY2FjaGUgdGhhdCBzdXBwbGllZCB0aGlzIG9iamVjdCAqLworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkqY29va2llOwkvKiBuZXRmcydzIGZpbGUvaW5kZXggb2JqZWN0ICovCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CSpwYXJlbnQ7CS8qIHBhcmVudCBvYmplY3QgKi8KKwlzdHJ1Y3Qgc2xvd193b3JrCXdvcms7CQkvKiBhdHRlbnRpb24gc2NoZWR1bGluZyByZWNvcmQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRlcGVuZGVudHM7CS8qIEZJRk8gb2YgZGVwZW5kZW50IG9iamVjdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRlcF9saW5rOwkvKiBsaW5rIGluIHBhcmVudCdzIGRlcGVuZGVudHMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZ19vcHM7CS8qIHVuc3RhcnRlZCBvcGVyYXRpb25zIG9uIHRoaXMgb2JqZWN0ICovCisJcGdvZmZfdAkJCXN0b3JlX2xpbWl0OwkvKiBjdXJyZW50IHN0b3JhZ2UgbGltaXQgKi8KK307CisKK2V4dGVybiBjb25zdCBjaGFyICpmc2NhY2hlX29iamVjdF9zdGF0ZXNbXTsKKworI2RlZmluZSBmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqKQkJCSAgICAgIFwKKwkoIXRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJihvYmopLT5jYWNoZS0+ZmxhZ3MpICYmICBcCisJIChvYmopLT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEUgJiYJICAgICAgXAorCSAob2JqKS0+c3RhdGUgPCBGU0NBQ0hFX09CSkVDVF9EWUlORykKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHM7CisKKy8qKgorICogZnNjYWNoZV9vYmplY3RfaW5pdCAtIEluaXRpYWxpc2UgYSBjYWNoZSBvYmplY3QgZGVzY3JpcHRpb24KKyAqIEBvYmplY3Q6IE9iamVjdCBkZXNjcmlwdGlvbgorICoKKyAqIEluaXRpYWxpc2UgYSBjYWNoZSBvYmplY3QgZGVzY3JpcHRpb24gdG8gaXRzIGJhc2ljIHZhbHVlcy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV9vYmplY3RfaW5pdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCSBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSBzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJYXRvbWljX2luYygmY2FjaGUtPm9iamVjdF9jb3VudCk7CisKKwlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfSU5JVDsKKwlzcGluX2xvY2tfaW5pdCgmb2JqZWN0LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5jYWNoZV9saW5rKTsKKwlJTklUX0hMSVNUX05PREUoJm9iamVjdC0+Y29va2llX2xpbmspOworCXZzbG93X3dvcmtfaW5pdCgmb2JqZWN0LT53b3JrLCAmZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyk7CisJSU5JVF9MSVNUX0hFQUQoJm9iamVjdC0+ZGVwZW5kZW50cyk7CisJSU5JVF9MSVNUX0hFQUQoJm9iamVjdC0+ZGVwX2xpbmspOworCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwlvYmplY3QtPm5fY2hpbGRyZW4gPSAwOworCW9iamVjdC0+bl9vcHMgPSBvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPSBvYmplY3QtPm5fZXhjbHVzaXZlID0gMDsKKwlvYmplY3QtPmV2ZW50cyA9IG9iamVjdC0+ZXZlbnRfbWFzayA9IDA7CisJb2JqZWN0LT5mbGFncyA9IDA7CisJb2JqZWN0LT5zdG9yZV9saW1pdCA9IDA7CisJb2JqZWN0LT5jYWNoZSA9IGNhY2hlOworCW9iamVjdC0+Y29va2llID0gY29va2llOworCW9iamVjdC0+cGFyZW50ID0gTlVMTDsKK30KKworZXh0ZXJuIHZvaWQgZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworLyoqCisgKiBmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQgLSBOb3RlIGRlc3RydWN0aW9uIG9mIGFuIG9iamVjdCBpbiBhIGNhY2hlCisgKiBAY2FjaGU6IFRoZSBjYWNoZSBmcm9tIHdoaWNoIHRoZSBvYmplY3QgY2FtZQorICoKKyAqIE5vdGUgdGhlIGRlc3RydWN0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgYW4gb2JqZWN0IHJlY29yZCBpbiBhIGNhY2hlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2FjaGUtPm9iamVjdF9jb3VudCkpCisJCXdha2VfdXBfYWxsKCZmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EpOworfQorCisvKioKKyAqIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9lcnJvciAtIE5vdGUgYW4gb2JqZWN0IGVuY291bnRlcmVkIGFuIGVycm9yCisgKiBAb2JqZWN0OiBUaGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBlcnJvciB3YXMgZW5jb3VudGVyZWQKKyAqCisgKiBOb3RlIHRoYXQgYW4gb2JqZWN0IGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IgKHVzdWFsbHkgYW4gSS9PIGVycm9yKSBhbmQKKyAqIHRoYXQgaXQgc2hvdWxkIGJlIHdpdGhkcmF3biBhcyBzb29uIGFzIHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9vYmplY3RfbG9va3VwX2Vycm9yKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IsICZvYmplY3QtPmV2ZW50cyk7Cit9CisKKy8qKgorICogZnNjYWNoZV9zZXRfc3RvcmVfbGltaXQgLSBTZXQgdGhlIG1heGltdW0gc2l6ZSB0byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0CisgKiBAb2JqZWN0OiBUaGUgb2JqZWN0IHRvIHNldCB0aGUgbWF4aW11bSBvbgorICogQGlfc2l6ZTogVGhlIGxpbWl0IHRvIHNldCBpbiBieXRlcworICoKKyAqIFNldCB0aGUgbWF4aW11bSBzaXplIGFuIG9iamVjdCBpcyBwZXJtaXR0ZWQgdG8gcmVhY2gsIGltcGx5aW5nIHRoZSBoaWdoZXN0CisgKiBieXRlIHRoYXQgbWF5IGJlIHdyaXR0ZW4uICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgdGhlIGF0dHJfY2hhbmdlZCgpIG9wLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3NldF9zdG9yZV9saW1pdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwgbG9mZl90IGlfc2l6ZSkKK3sKKwlvYmplY3QtPnN0b3JlX2xpbWl0ID0gaV9zaXplID4+IFBBR0VfU0hJRlQ7CisJaWYgKGlfc2l6ZSAmIH5QQUdFX01BU0spCisJCW9iamVjdC0+c3RvcmVfbGltaXQrKzsKK30KKworLyoqCisgKiBmc2NhY2hlX2VuZF9pbyAtIEVuZCBhIHJldHJpZXZhbCBvcGVyYXRpb24gb24gYSBwYWdlCisgKiBAb3A6IFRoZSBGUy1DYWNoZSBvcGVyYXRpb24gY292ZXJpbmcgdGhlIHJldHJpZXZhbAorICogQHBhZ2U6IFRoZSBwYWdlIHRoYXQgd2FzIHRvIGJlIGZldGNoZWQKKyAqIEBlcnJvcjogVGhlIGVycm9yIGNvZGUgKDAgaWYgc3VjY2Vzc2Z1bCkKKyAqCisgKiBOb3RlIHRoZSBlbmQgb2YgYW4gb3BlcmF0aW9uIHRvIHJldHJpZXZlIGEgcGFnZSwgYXMgY292ZXJlZCBieSBhIHBhcnRpY3VsYXIKKyAqIG9wZXJhdGlvbiByZWNvcmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmc2NhY2hlX2VuZF9pbyhzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBlcnJvcikKK3sKKwlvcC0+ZW5kX2lvX2Z1bmMocGFnZSwgb3AtPmNvbnRleHQsIGVycm9yKTsKK30KKworLyoKKyAqIG91dC1vZi1saW5lIGNhY2hlIGJhY2tlbmQgZnVuY3Rpb25zCisgKi8KK2V4dGVybiB2b2lkIGZzY2FjaGVfaW5pdF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzICpvcHMsCisJCQkgICAgICAgY29uc3QgY2hhciAqaWRmbXQsCisJCQkgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CisKK2V4dGVybiBpbnQgZnNjYWNoZV9hZGRfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmZzZGVmLAorCQkJICAgICBjb25zdCBjaGFyICp0YWduYW1lKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfd2l0aGRyYXdfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKKworZXh0ZXJuIHZvaWQgZnNjYWNoZV9pb19lcnJvcihzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworCitleHRlcm4gdm9pZCBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJICAgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpOworCitleHRlcm4gZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfY2hlY2tfYXV4KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJICAgICAgIHVpbnQxNl90IGRhdGFsZW4pOworCisjZW5kaWYgLyogX0xJTlVYX0ZTQ0FDSEVfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhlZTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLmgKQEAgLTAsMCArMSw2MTggQEAKKy8qIEdlbmVyYWwgZmlsZXN5c3RlbSBjYWNoaW5nIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIE5PVEUhISEgU2VlOgorICoKKyAqCURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0CisgKgorICogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBpbnRlcmZhY2UgZGVjbGFyZWQgaGVyZS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9GU0NBQ0hFX0gKKyNkZWZpbmUgX0xJTlVYX0ZTQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0ZTQ0FDSEUpIHx8IGRlZmluZWQoQ09ORklHX0ZTQ0FDSEVfTU9EVUxFKQorI2RlZmluZSBmc2NhY2hlX2F2YWlsYWJsZSgpICgxKQorI2RlZmluZSBmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpIChjb29raWUpCisjZWxzZQorI2RlZmluZSBmc2NhY2hlX2F2YWlsYWJsZSgpICgwKQorI2RlZmluZSBmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpICgwKQorI2VuZGlmCisKKworLyoKKyAqIG92ZXJsb2FkIFBHX3ByaXZhdGVfMiB0byBnaXZlIHVzIFBHX2ZzY2FjaGUgLSB0aGlzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdAorICogYSBwYWdlIGlzIGN1cnJlbnRseSBiYWNrZWQgYnkgYSBsb2NhbCBkaXNrIGNhY2hlCisgKi8KKyNkZWZpbmUgUGFnZUZzQ2FjaGUocGFnZSkJCVBhZ2VQcml2YXRlMigocGFnZSkpCisjZGVmaW5lIFNldFBhZ2VGc0NhY2hlKHBhZ2UpCQlTZXRQYWdlUHJpdmF0ZTIoKHBhZ2UpKQorI2RlZmluZSBDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpCQlDbGVhclBhZ2VQcml2YXRlMigocGFnZSkpCisjZGVmaW5lIFRlc3RTZXRQYWdlRnNDYWNoZShwYWdlKQlUZXN0U2V0UGFnZVByaXZhdGUyKChwYWdlKSkKKyNkZWZpbmUgVGVzdENsZWFyUGFnZUZzQ2FjaGUocGFnZSkJVGVzdENsZWFyUGFnZVByaXZhdGUyKChwYWdlKSkKKworLyogcGF0dGVybiB1c2VkIHRvIGZpbGwgZGVhZCBzcGFjZSBpbiBhbiBpbmRleCBlbnRyeSAqLworI2RlZmluZSBGU0NBQ0hFX0lOREVYX0RFQURGSUxMX1BBVFRFUk4gMHg3OQorCitzdHJ1Y3QgcGFnZXZlYzsKK3N0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZzsKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZTsKK3N0cnVjdCBmc2NhY2hlX25ldGZzOworCit0eXBlZGVmIHZvaWQgKCpmc2NhY2hlX3J3X2NvbXBsZXRlX3QpKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHZvaWQgKmNvbnRleHQsCisJCQkJICAgICAgaW50IGVycm9yKTsKKworLyogcmVzdWx0IG9mIGluZGV4IGVudHJ5IGNvbnN1bHRhdGlvbiAqLworZW51bSBmc2NhY2hlX2NoZWNrYXV4IHsKKwlGU0NBQ0hFX0NIRUNLQVVYX09LQVksCQkvKiBlbnRyeSBva2F5IGFzIGlzICovCisJRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEUsCS8qIGVudHJ5IHJlcXVpcmVzIHVwZGF0ZSAqLworCUZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEUsCS8qIGVudHJ5IHJlcXVpcmVzIGRlbGV0aW9uICovCit9OworCisvKgorICogZnNjYWNoZSBjb29raWUgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIHsKKwkvKiBuYW1lIG9mIGNvb2tpZSB0eXBlICovCisJY2hhciBuYW1lWzE2XTsKKworCS8qIGNvb2tpZSB0eXBlICovCisJdWludDhfdCB0eXBlOworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYCTAKKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRQkxCisKKwkvKiBzZWxlY3QgdGhlIGNhY2hlIGludG8gd2hpY2ggdG8gaW5zZXJ0IGFuIGVudHJ5IGluIHRoaXMgaW5kZXgKKwkgKiAtIG9wdGlvbmFsCisJICogLSBzaG91bGQgcmV0dXJuIGEgY2FjaGUgaWRlbnRpZmllciBvciBOVUxMIHRvIGNhdXNlIHRoZSBjYWNoZSB0byBiZQorCSAqICAgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBpZiBwb3NzaWJsZSBvciB0aGUgZmlyc3QgY2FjaGUgcGlja2VkCisJICogICBmb3IgYSBub24taW5kZXggZmlsZSBpZiBub3QKKwkgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKigqc2VsZWN0X2NhY2hlKSgKKwkJY29uc3Qgdm9pZCAqcGFyZW50X25ldGZzX2RhdGEsCisJCWNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKTsKKworCS8qIGdldCBhbiBpbmRleCBrZXkKKwkgKiAtIHNob3VsZCBzdG9yZSB0aGUga2V5IGRhdGEgaW4gdGhlIGJ1ZmZlcgorCSAqIC0gc2hvdWxkIHJldHVybiB0aGUgYW1vdW50IG9mIGFtb3VudCBzdG9yZWQKKwkgKiAtIG5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCisJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzCisJICogICBwcmVzZW50ZWQKKwkgKi8KKwl1aW50MTZfdCAoKmdldF9rZXkpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJICAgIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICB1aW50MTZfdCBidWZtYXgpOworCisJLyogZ2V0IGNlcnRhaW4gZmlsZSBhdHRyaWJ1dGVzIGZyb20gdGhlIG5ldGZzIGRhdGEKKwkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBmb3IgYW4gaW5kZXgKKwkgKiAtIG5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCisJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzCisJICogICBwcmVzZW50ZWQKKwkgKi8KKwl2b2lkICgqZ2V0X2F0dHIpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB1aW50NjRfdCAqc2l6ZSk7CisKKwkvKiBnZXQgdGhlIGF1eGlsbGlhcnkgZGF0YSBmcm9tIG5ldGZzIGRhdGEKKwkgKiAtIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgaW5kZXggY2FycmllcyBubyBzdGF0ZSBkYXRhCisJICogLSBzaG91bGQgc3RvcmUgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbiB0aGUgYnVmZmVyCisJICogLSBzaG91bGQgcmV0dXJuIHRoZSBhbW91bnQgb2YgYW1vdW50IHN0b3JlZAorCSAqIC0gbm90IHBlcm1pdHRlZCB0byByZXR1cm4gYW4gZXJyb3IKKwkgKiAtIHRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSBzb3VyY2UgaXMKKwkgKiAgIHByZXNlbnRlZAorCSAqLworCXVpbnQxNl90ICgqZ2V0X2F1eCkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkgICAgdm9pZCAqYnVmZmVyLAorCQkJICAgIHVpbnQxNl90IGJ1Zm1heCk7CisKKwkvKiBjb25zdWx0IHRoZSBuZXRmcyBhYm91dCB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0CisJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGluZGV4IGNhcnJpZXMgbm8gc3RhdGUgZGF0YQorCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHRhcmdldCBpcworCSAqICAgcHJlc2VudGVkLCBhcyBpcyB0aGUgYXV4aWxsaWFyeSBkYXRhCisJICovCisJZW51bSBmc2NhY2hlX2NoZWNrYXV4ICgqY2hlY2tfYXV4KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJICAgdWludDE2X3QgZGF0YWxlbik7CisKKwkvKiBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmVhZCBjb250ZXh0CisJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZG9lc24ndAorCSAqICAgcmVxdWlyZSBhIGNvbnRleHQKKwkgKi8KKwl2b2lkICgqZ2V0X2NvbnRleHQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KTsKKworCS8qIHJlbGVhc2UgYW4gZXh0cmEgcmVmZXJlbmNlIG9uIGEgcmVhZCBjb250ZXh0CisJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gZG9lc24ndAorCSAqICAgcmVxdWlyZSBhIGNvbnRleHQKKwkgKi8KKwl2b2lkICgqcHV0X2NvbnRleHQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCB2b2lkICpjb250ZXh0KTsKKworCS8qIGluZGljYXRlIHBhZ2VzIHRoYXQgbm93IGhhdmUgY2FjaGUgbWV0YWRhdGEgcmV0YWluZWQKKwkgKiAtIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcmsgdGhlIHNwZWNpZmllZCBwYWdlcyBhcyBub3cgYmVpbmcgY2FjaGVkCisJICogLSB0aGUgcGFnZXMgd2lsbCBoYXZlIGJlZW4gbWFya2VkIHdpdGggUEdfZnNjYWNoZSBiZWZvcmUgdGhpcyBpcworCSAqICAgY2FsbGVkLCBzbyB0aGlzIGlzIG9wdGlvbmFsCisJICovCisJdm9pZCAoKm1hcmtfcGFnZXNfY2FjaGVkKSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCSAgc3RydWN0IHBhZ2V2ZWMgKmNhY2hlZF9wdmVjKTsKKworCS8qIGluZGljYXRlIHRoZSBjb29raWUgaXMgbm8gbG9uZ2VyIGNhY2hlZAorCSAqIC0gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgYmFja2luZyBzdG9yZSBjdXJyZW50bHkgY2FjaGluZworCSAqICAgYSBjb29raWUgaXMgcmVtb3ZlZAorCSAqIC0gdGhlIG5ldGZzIHNob3VsZCB1c2UgdGhpcyB0byBjbGVhbiB1cCBhbnkgbWFya2VycyBpbmRpY2F0aW5nCisJICogICBjYWNoZWQgcGFnZXMKKwkgKiAtIHRoaXMgaXMgbWFuZGF0b3J5IGZvciBhbnkgb2JqZWN0IHRoYXQgbWF5IGhhdmUgZGF0YQorCSAqLworCXZvaWQgKCpub3dfdW5jYWNoZWQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKTsKK307CisKKy8qCisgKiBmc2NhY2hlIGNhY2hlZCBuZXR3b3JrIGZpbGVzeXN0ZW0gdHlwZQorICogLSBuYW1lLCB2ZXJzaW9uIGFuZCBvcHMgbXVzdCBiZSBmaWxsZWQgaW4gYmVmb3JlIHJlZ2lzdHJhdGlvbgorICogLSBhbGwgb3RoZXIgZmllbGRzIHdpbGwgYmUgc2V0IGR1cmluZyByZWdpc3RyYXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfbmV0ZnMgeworCXVpbnQzMl90CQkJdmVyc2lvbjsJLyogaW5kZXhpbmcgdmVyc2lvbiAqLworCWNvbnN0IGNoYXIJCQkqbmFtZTsJCS8qIGZpbGVzeXN0ZW0gbmFtZSAqLworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkJKnByaW1hcnlfaW5kZXg7CisJc3RydWN0IGxpc3RfaGVhZAkJbGluazsJCS8qIGludGVybmFsIGxpbmsgKi8KK307CisKKy8qCisgKiBzbG93LXBhdGggZnVuY3Rpb25zIGZvciB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IGNhY2hpbmcgYXZhaWxhYmxlLCBhbmQgdGhlCisgKiBuZXRmcyBkb2VzIGFjdHVhbGx5IGhhdmUgYSB2YWxpZCB0b2tlbgorICogLSB0aGVzZSBhcmUgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseQorICogLSB0aGVzZSBhcmUgdW5kZWZpbmVkIHN5bWJvbHMgd2hlbiBGUy1DYWNoZSBpcyBub3QgY29uZmlndXJlZCBhbmQgdGhlCisgKiAgIG9wdGltaXNlciB0YWtlcyBjYXJlIG9mIG5vdCB1c2luZyB0aGVtCisgKi8KK2V4dGVybiBpbnQgX19mc2NhY2hlX3JlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICopOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKik7CitleHRlcm4gc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICpfX2ZzY2FjaGVfbG9va3VwX2NhY2hlX3RhZyhjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqKTsKKworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqX19mc2NhY2hlX2FjcXVpcmVfY29va2llKAorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLAorCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKiwKKwl2b2lkICopOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBpbnQpOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3VwZGF0ZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICopOworZXh0ZXJuIGludCBfX2ZzY2FjaGVfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqKTsKK2V4dGVybiBpbnQgX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwKKwkJCQkJc3RydWN0IHBhZ2UgKiwKKwkJCQkJZnNjYWNoZV9yd19jb21wbGV0ZV90LAorCQkJCQl2b2lkICosCisJCQkJCWdmcF90KTsKK2V4dGVybiBpbnQgX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoc3RydWN0IGZzY2FjaGVfY29va2llICosCisJCQkJCSBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAorCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJCQkgdW5zaWduZWQgKiwKKwkJCQkJIGZzY2FjaGVfcndfY29tcGxldGVfdCwKKwkJCQkJIHZvaWQgKiwKKwkJCQkJIGdmcF90KTsKK2V4dGVybiBpbnQgX19mc2NhY2hlX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICosIGdmcF90KTsKK2V4dGVybiBpbnQgX19mc2NhY2hlX3dyaXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICosIGdmcF90KTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV91bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGJvb2wgX19mc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgX19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgc3RydWN0IHBhZ2UgKik7CisKKy8qKgorICogZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyAtIFJlZ2lzdGVyIGEgZmlsZXN5c3RlbSBhcyBkZXNpcmluZyBjYWNoaW5nIHNlcnZpY2VzCisgKiBAbmV0ZnM6IFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlsZXN5c3RlbQorICoKKyAqIFJlZ2lzdGVyIGEgZmlsZXN5c3RlbSBhcyBkZXNpcmluZyBjYWNoaW5nIHNlcnZpY2VzIGlmIHRoZXkncmUgYXZhaWxhYmxlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3JlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcykKK3sKKwlpZiAoZnNjYWNoZV9hdmFpbGFibGUoKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyhuZXRmcyk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMgLSBJbmRpY2F0ZSB0aGF0IGEgZmlsZXN5c3RlbSBubyBsb25nZXIgZGVzaXJlcworICogY2FjaGluZyBzZXJ2aWNlcworICogQG5ldGZzOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzeXN0ZW0KKyAqCisgKiBJbmRpY2F0ZSB0aGF0IGEgZmlsZXN5c3RlbSBubyBsb25nZXIgZGVzaXJlcyBjYWNoaW5nIHNlcnZpY2VzIGZvciB0aGUKKyAqIG1vbWVudC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMpCit7CisJaWYgKGZzY2FjaGVfYXZhaWxhYmxlKCkpCisJCV9fZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKG5ldGZzKTsKK30KKworLyoqCisgKiBmc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcgLSBMb29rIHVwIGEgY2FjaGUgdGFnCisgKiBAbmFtZTogVGhlIG5hbWUgb2YgdGhlIHRhZyB0byBzZWFyY2ggZm9yCisgKgorICogQWNxdWlyZSBhIHNwZWNpZmljIGNhY2hlIHJlZmVycmFsIHRhZyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljCisgKiBjYWNoZSBpbiB3aGljaCB0byBjYWNoZSBhbiBpbmRleC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKmZzY2FjaGVfbG9va3VwX2NhY2hlX3RhZyhjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChmc2NhY2hlX2F2YWlsYWJsZSgpKQorCQlyZXR1cm4gX19mc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcobmFtZSk7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBmc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnIC0gUmVsZWFzZSBhIGNhY2hlIHRhZworICogQHRhZzogVGhlIHRhZyB0byByZWxlYXNlCisgKgorICogUmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIGNhY2hlIHJlZmVycmFsIHRhZyBwcmV2aW91c2x5IGxvb2tlZCB1cC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcoc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWcpCit7CisJaWYgKGZzY2FjaGVfYXZhaWxhYmxlKCkpCisJCV9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyh0YWcpOworfQorCisvKioKKyAqIGZzY2FjaGVfYWNxdWlyZV9jb29raWUgLSBBY3F1aXJlIGEgY29va2llIHRvIHJlcHJlc2VudCBhIGNhY2hlIG9iamVjdAorICogQHBhcmVudDogVGhlIGNvb2tpZSB0aGF0J3MgdG8gYmUgdGhlIHBhcmVudCBvZiB0aGlzIG9uZQorICogQGRlZjogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY2FjaGUgb2JqZWN0LCBpbmNsdWRpbmcgY2FsbGJhY2sgb3BlcmF0aW9ucworICogQG5ldGZzX2RhdGE6IEFuIGFyYml0cmFyeSBwaWVjZSBvZiBkYXRhIHRvIGJlIGtlcHQgaW4gdGhlIGNvb2tpZSB0bworICogcmVwcmVzZW50IHRoZSBjYWNoZSBvYmplY3QgdG8gdGhlIG5ldGZzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluZm9ybSBGUy1DYWNoZSBhYm91dCBwYXJ0IG9mIGFuIGluZGV4IGhpZXJhcmNoeQorICogdGhhdCBjYW4gYmUgdXNlZCB0byBsb2NhdGUgZmlsZXMuICBUaGlzIGlzIGRvbmUgYnkgcmVxdWVzdGluZyBhIGNvb2tpZSBmb3IKKyAqIGVhY2ggaW5kZXggaW4gdGhlIHBhdGggdG8gdGhlIGZpbGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQorc3RydWN0IGZzY2FjaGVfY29va2llICpmc2NhY2hlX2FjcXVpcmVfY29va2llKAorCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqcGFyZW50LAorCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKmRlZiwKKwl2b2lkICpuZXRmc19kYXRhKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChwYXJlbnQpKQorCQlyZXR1cm4gX19mc2NhY2hlX2FjcXVpcmVfY29va2llKHBhcmVudCwgZGVmLCBuZXRmc19kYXRhKTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUgLSBSZXR1cm4gdGhlIGNvb2tpZSB0byB0aGUgY2FjaGUsIG1heWJlIGRpc2NhcmRpbmcKKyAqIGl0CisgKiBAY29va2llOiBUaGUgY29va2llIGJlaW5nIHJldHVybmVkCisgKiBAcmV0aXJlOiBUcnVlIGlmIHRoZSBjYWNoZSBvYmplY3QgdGhlIGNvb2tpZSByZXByZXNlbnRzIGlzIHRvIGJlIGRpc2NhcmRlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvb2tpZSB0byB0aGUgY2FjaGUsIGZvcmNpYmx5IGRpc2NhcmRpbmcgdGhlCisgKiBhc3NvY2lhdGVkIGNhY2hlIG9iamVjdCBpZiByZXRpcmUgaXMgc2V0IHRvIHRydWUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBpbnQgcmV0aXJlKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlfX2ZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoY29va2llLCByZXRpcmUpOworfQorCisvKioKKyAqIGZzY2FjaGVfdXBkYXRlX2Nvb2tpZSAtIFJlcXVlc3QgdGhhdCBhIGNhY2hlIG9iamVjdCBiZSB1cGRhdGVkCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKgorICogUmVxdWVzdCBhbiB1cGRhdGUgb2YgdGhlIGluZGV4IGRhdGEgZm9yIHRoZSBjYWNoZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogY29va2llLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV91cGRhdGVfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlfX2ZzY2FjaGVfdXBkYXRlX2Nvb2tpZShjb29raWUpOworfQorCisvKioKKyAqIGZzY2FjaGVfcGluX2Nvb2tpZSAtIFBpbiBhIGRhdGEtc3RvcmFnZSBjYWNoZSBvYmplY3QgaW4gaXRzIGNhY2hlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKgorICogUGVybWl0IGRhdGEtc3RvcmFnZSBjYWNoZSBvYmplY3RzIHRvIGJlIHBpbm5lZCBpbiB0aGUgY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfcGluX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV9waW5fY29va2llIC0gVW5waW4gYSBkYXRhLXN0b3JhZ2UgY2FjaGUgb2JqZWN0IGluIGl0cyBjYWNoZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICoKKyAqIFBlcm1pdCBkYXRhLXN0b3JhZ2UgY2FjaGUgb2JqZWN0cyB0byBiZSB1bnBpbm5lZCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfdW5waW5fY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworfQorCisvKioKKyAqIGZzY2FjaGVfYXR0cl9jaGFuZ2VkIC0gTm90aWZ5IGNhY2hlIHRoYXQgYW4gb2JqZWN0J3MgYXR0cmlidXRlcyBjaGFuZ2VkCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKgorICogU2VuZCBhIG5vdGlmaWNhdGlvbiB0byB0aGUgY2FjaGUgaW5kaWNhdGluZyB0aGF0IGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMgaGF2ZQorICogY2hhbmdlZC4gIFRoaXMgaW5jbHVkZXMgdGhlIGRhdGEgc2l6ZS4gIFRoZXNlIGF0dHJpYnV0ZXMgd2lsbCBiZSBvYnRhaW5lZAorICogdGhyb3VnaCB0aGUgZ2V0X2F0dHIoKSBjb29raWUgZGVmaW5pdGlvbiBvcC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9hdHRyX2NoYW5nZWQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfYXR0cl9jaGFuZ2VkKGNvb2tpZSk7CisJZWxzZQorCQlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV9yZXNlcnZlX3NwYWNlIC0gUmVzZXJ2ZSBkYXRhIHNwYWNlIGZvciBhIGNhY2hlZCBvYmplY3QKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBpX3NpemU6IFRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gYmUgcmVzZXJ2ZWQKKyAqCisgKiBSZXNlcnZlIGFuIGFtb3VudCBvZiBzcGFjZSBpbiB0aGUgY2FjaGUgZm9yIHRoZSBjYWNoZSBvYmplY3QgYXR0YWNoZWQgdG8gYQorICogY29va2llIHNvIHRoYXQgYSB3cml0ZSB0byB0aGF0IG9iamVjdCB3aXRoaW4gdGhlIHNwYWNlIGNhbiBhbHdheXMgYmUKKyAqIGhvbm91cmVkLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIGxvZmZfdCBzaXplKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZSAtIFJlYWQgYSBwYWdlIGZyb20gdGhlIGNhY2hlIG9yIGFsbG9jYXRlIGEgYmxvY2sKKyAqIGluIHdoaWNoIHRvIHN0b3JlIGl0CisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdG8gZmlsbCBpZiBwb3NzaWJsZQorICogQGVuZF9pb19mdW5jOiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYW5kIGlmIHRoZSBwYWdlIGlzIGZpbGxlZAorICogQGNvbnRleHQ6IEFuIGFyYml0cmFyeSBwaWVjZSBvZiBkYXRhIHRvIHBhc3Mgb24gdG8gZW5kX2lvX2Z1bmMoKQorICogQGdmcDogVGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGJlIG1hZGUKKyAqCisgKiBSZWFkIGEgcGFnZSBmcm9tIHRoZSBjYWNoZSwgb3IgaWYgdGhhdCdzIG5vdCBwb3NzaWJsZSBtYWtlIGEgcG90ZW50aWFsCisgKiBvbmUtYmxvY2sgcmVzZXJ2YXRpb24gaW4gdGhlIGNhY2hlIGludG8gd2hpY2ggdGhlIHBhZ2UgbWF5IGJlIHN0b3JlZCBvbmNlCisgKiBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci4KKyAqCisgKiBJZiB0aGUgcGFnZSBpcyBub3QgYmFja2VkIGJ5IHRoZSBjYWNoZSBvYmplY3QsIG9yIGlmIGl0IHRoZXJlJ3Mgc29tZSByZWFzb24KKyAqIGl0IGNhbid0IGJlLCAtRU5PQlVGUyB3aWxsIGJlIHJldHVybmVkIGFuZCBub3RoaW5nIG1vcmUgd2lsbCBiZSBkb25lIGZvcgorICogdGhhdCBwYWdlLgorICoKKyAqIEVsc2UsIGlmIHRoYXQgcGFnZSBpcyBiYWNrZWQgYnkgdGhlIGNhY2hlLCBhIHJlYWQgd2lsbCBiZSBpbml0aWF0ZWQgZGlyZWN0bHkKKyAqIHRvIHRoZSBuZXRmcydzIHBhZ2UgYW5kIDAgd2lsbCBiZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLiAgVGhlCisgKiBlbmRfaW9fZnVuYygpIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBvcGVyYXRpb24gdGVybWluYXRlcyBvbiBhCisgKiBjb21wbGV0aW9uIG9yIGZhaWx1cmUuICBOb3RlIHRoYXQgdGhlIGNhbGxiYWNrIG1heSBiZSBpbnZva2VkIGJlZm9yZSB0aGUKKyAqIHJldHVybi4KKyAqCisgKiBFbHNlLCBpZiB0aGUgcGFnZSBpcyB1bmJhY2tlZCwgLUVOT0RBVEEgaXMgcmV0dXJuZWQgYW5kIGEgYmxvY2sgbWF5IGhhdmUKKyAqIGJlZW4gYWxsb2NhdGVkIGluIHRoZSBjYWNoZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgZnNjYWNoZV9yd19jb21wbGV0ZV90IGVuZF9pb19mdW5jLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShjb29raWUsIHBhZ2UsIGVuZF9pb19mdW5jLAorCQkJCQkJICAgIGNvbnRleHQsIGdmcCk7CisJZWxzZQorCQlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzIC0gUmVhZCBwYWdlcyBmcm9tIHRoZSBjYWNoZSBhbmQvb3IgYWxsb2NhdGUKKyAqIGJsb2NrcyBpbiB3aGljaCB0byBzdG9yZSB0aGVtCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAbWFwcGluZzogVGhlIG5ldGZzIGlub2RlIG1hcHBpbmcgdG8gd2hpY2ggdGhlIHBhZ2VzIHdpbGwgYmUgYXR0YWNoZWQKKyAqIEBwYWdlczogQSBsaXN0IG9mIHBvdGVudGlhbCBuZXRmcyBwYWdlcyB0byBiZSBmaWxsZWQKKyAqIEBlbmRfaW9fZnVuYzogVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFuZCBpZiBlYWNoIHBhZ2UgaXMgZmlsbGVkCisgKiBAY29udGV4dDogQW4gYXJiaXRyYXJ5IHBpZWNlIG9mIGRhdGEgdG8gcGFzcyBvbiB0byBlbmRfaW9fZnVuYygpCisgKiBAZ2ZwOiBUaGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZQorICoKKyAqIFJlYWQgYSBzZXQgb2YgcGFnZXMgZnJvbSB0aGUgY2FjaGUsIG9yIGlmIHRoYXQncyBub3QgcG9zc2libGUsIGF0dGVtcHQgdG8KKyAqIG1ha2UgYSBwb3RlbnRpYWwgb25lLWJsb2NrIHJlc2VydmF0aW9uIGZvciBlYWNoIHBhZ2UgaW4gdGhlIGNhY2hlIGludG8gd2hpY2gKKyAqIHRoYXQgcGFnZSBtYXkgYmUgc3RvcmVkIG9uY2UgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuCisgKgorICogSWYgc29tZSBwYWdlcyBhcmUgbm90IGJhY2tlZCBieSB0aGUgY2FjaGUgb2JqZWN0LCBvciBpZiBpdCB0aGVyZSdzIHNvbWUKKyAqIHJlYXNvbiB0aGV5IGNhbid0IGJlLCAtRU5PQlVGUyB3aWxsIGJlIHJldHVybmVkIGFuZCBub3RoaW5nIG1vcmUgd2lsbCBiZQorICogZG9uZSBmb3IgdGhhdCBwYWdlcy4KKyAqCisgKiBFbHNlLCBpZiBzb21lIG9mIHRoZSBwYWdlcyBhcmUgYmFja2VkIGJ5IHRoZSBjYWNoZSwgYSByZWFkIHdpbGwgYmUgaW5pdGlhdGVkCisgKiBkaXJlY3RseSB0byB0aGUgbmV0ZnMncyBwYWdlIGFuZCAwIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4gIFRoZQorICogZW5kX2lvX2Z1bmMoKSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHRlcm1pbmF0ZXMgb24gYQorICogY29tcGxldGlvbiBvciBmYWlsdXJlLiAgTm90ZSB0aGF0IHRoZSBjYWxsYmFjayBtYXkgYmUgaW52b2tlZCBiZWZvcmUgdGhlCisgKiByZXR1cm4uCisgKgorICogRWxzZSwgaWYgYSBwYWdlIGlzIHVuYmFja2VkLCAtRU5PREFUQSBpcyByZXR1cm5lZCBhbmQgYSBibG9jayBtYXkgaGF2ZQorICogYmVlbiBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlLgorICoKKyAqIEJlY2F1c2UgdGhlIGZ1bmN0aW9uIG1heSB3YW50IHRvIHJldHVybiBhbGwgb2YgLUVOT0JVRlMsIC1FTk9EQVRBIGFuZCAwIGluCisgKiByZWdhcmQgdG8gZGlmZmVyZW50IHBhZ2VzLCB0aGUgcmV0dXJuIHZhbHVlcyBhcmUgcHJpb3JpdGlzZWQgaW4gdGhhdCBvcmRlci4KKyAqIEFueSBwYWdlcyBzdWJtaXR0ZWQgZm9yIHJlYWRpbmcgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcGFnZXMgbGlzdC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCXVuc2lnbmVkICpucl9wYWdlcywKKwkJCQlmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkJdm9pZCAqY29udGV4dCwKKwkJCQlnZnBfdCBnZnApCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhjb29raWUsIG1hcHBpbmcsIHBhZ2VzLAorCQkJCQkJICAgICBucl9wYWdlcywgZW5kX2lvX2Z1bmMsCisJCQkJCQkgICAgIGNvbnRleHQsIGdmcCk7CisJZWxzZQorCQlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV9hbGxvY19wYWdlIC0gQWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZSBhIHBhZ2UKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0byBhbGxvY2F0ZSBhIHBhZ2UgZm9yCisgKiBAZ2ZwOiBUaGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtZW1vcnkgYWxsb2NhdGlvbiBzaG91bGQgYmUgbWFkZQorICoKKyAqIFJlcXVlc3QgQWxsb2NhdGlvbiBhIGJsb2NrIGluIHRoZSBjYWNoZSBpbiB3aGljaCB0byBzdG9yZSBhIG5ldGZzIHBhZ2UKKyAqIHdpdGhvdXQgcmV0cmlldmluZyBhbnkgY29udGVudHMgZnJvbSB0aGUgY2FjaGUuCisgKgorICogSWYgdGhlIHBhZ2UgaXMgbm90IGJhY2tlZCBieSBhIGZpbGUgdGhlbiAtRU5PQlVGUyB3aWxsIGJlIHJldHVybmVkIGFuZAorICogbm90aGluZyBtb3JlIHdpbGwgYmUgZG9uZSwgYW5kIG5vIHJlc2VydmF0aW9uIHdpbGwgYmUgbWFkZS4KKyAqCisgKiBFbHNlLCBhIGJsb2NrIHdpbGwgYmUgYWxsb2NhdGVkIGlmIG9uZSB3YXNuJ3QgYWxyZWFkeSwgYW5kIDAgd2lsbCBiZQorICogcmV0dXJuZWQKKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCSAgICAgICBnZnBfdCBnZnApCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfYWxsb2NfcGFnZShjb29raWUsIHBhZ2UsIGdmcCk7CisJZWxzZQorCQlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV93cml0ZV9wYWdlIC0gUmVxdWVzdCBzdG9yYWdlIG9mIGEgcGFnZSBpbiB0aGUgY2FjaGUKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0byBzdG9yZQorICogQGdmcDogVGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGJlIG1hZGUKKyAqCisgKiBSZXF1ZXN0IHRoZSBjb250ZW50cyBvZiB0aGUgbmV0ZnMgcGFnZSBiZSB3cml0dGVuIGludG8gdGhlIGNhY2hlLiAgVGhpcworICogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCBpZiBubyBjYWNoZSBibG9jayBpcyBjdXJyZW50bHkgYWxsb2NhdGVkLCBpbiB3aGljaAorICogY2FzZSBpdCB3aWxsIHJldHVybiAtRU5PQlVGUy4KKyAqCisgKiBJZiBhIGNhY2hlIGJsb2NrIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCwgYSB3cml0ZSB3aWxsIGJlIGluaXRpYXRlZCBhbmQgMCB3aWxsCisgKiBiZSByZXR1cm5lZC4gIFRoZSBQR19mc2NhY2hlX3dyaXRlIHBhZ2UgYml0IGlzIHNldCBpbW1lZGlhdGVseSBhbmQgd2lsbCB0aGVuCisgKiBiZSBjbGVhcmVkIGF0IHRoZSBjb21wbGV0aW9uIG9mIHRoZSB3cml0ZSB0byBpbmRpY2F0ZSB0aGUgc3VjY2VzcyBvciBmYWlsdXJlCisgKiBvZiB0aGUgb3BlcmF0aW9uLiAgTm90ZSB0aGF0IHRoZSBjb21wbGV0aW9uIG1heSBoYXBwZW4gYmVmb3JlIHRoZSByZXR1cm4uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgICAgZ2ZwX3QgZ2ZwKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX3dyaXRlX3BhZ2UoY29va2llLCBwYWdlLCBnZnApOworCWVsc2UKKwkJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfdW5jYWNoZV9wYWdlIC0gSW5kaWNhdGUgdGhhdCBjYWNoaW5nIGlzIG5vIGxvbmdlciByZXF1aXJlZCBvbiBhIHBhZ2UKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqIEBwYWdlOiBUaGUgbmV0ZnMgcGFnZSB0aGF0IHdhcyBiZWluZyBjYWNoZWQuCisgKgorICogVGVsbCB0aGUgY2FjaGUgdGhhdCB3ZSBubyBsb25nZXIgd2FudCBhIHBhZ2UgdG8gYmUgY2FjaGVkIGFuZCB0aGF0IGl0IHNob3VsZAorICogcmVtb3ZlIGFueSBrbm93bGVkZ2Ugb2YgdGhlIG5ldGZzIHBhZ2UgaXQgbWF5IGhhdmUuCisgKgorICogTm90ZSB0aGF0IHRoaXMgY2Fubm90IGNhbmNlbCBhbnkgb3V0c3RhbmRpbmcgSS9PIG9wZXJhdGlvbnMgYmV0d2VlbiB0aGlzCisgKiBwYWdlIGFuZCB0aGUgY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCV9fZnNjYWNoZV91bmNhY2hlX3BhZ2UoY29va2llLCBwYWdlKTsKK30KKworLyoqCisgKiBmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUgLSBBc2sgaWYgYSBwYWdlIGlzIGJlaW5nIHdyaXRpbmcgdG8gdGhlIGNhY2hlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdGhhdCBpcyBiZWluZyBjYWNoZWQuCisgKgorICogQXNrIHRoZSBjYWNoZSBpZiBhIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQorYm9vbCBmc2NhY2hlX2NoZWNrX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlIC0gV2FpdCBmb3IgYSBwYWdlIHRvIGNvbXBsZXRlIHdyaXRpbmcgdG8gdGhlIGNhY2hlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdGhhdCBpcyBiZWluZyBjYWNoZWQuCisgKgorICogQXNrIHRoZSBjYWNoZSB0byB3YWtlIHVzIHVwIHdoZW4gYSBwYWdlIGlzIG5vIGxvbmdlciBiZWluZyB3cml0dGVuIHRvIHRoZQorICogY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJX19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShjb29raWUsIHBhZ2UpOworfQorCisjZW5kaWYgLyogX0xJTlVYX0ZTQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCmluZGV4IGQ5MDUxZDcuLjdlZjFjYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKQEAgLTk1LDE0ICs5NSwxNSBAQAogI2RlZmluZSBGU0xfVVNCMl9QT1JUMF9FTkFCTEVECTB4MDAwMDAwMDEKICNkZWZpbmUgRlNMX1VTQjJfUE9SVDFfRU5BQkxFRAkweDAwMDAwMDAyCiAKK3N0cnVjdCBzcGlfZGV2aWNlOworCiBzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhIHsKIAl1MzIgCWluaXRpYWxfc3Btb2RlOwkvKiBpbml0aWFsIFNQTU9ERSB2YWx1ZSAqLwotCXUxNglidXNfbnVtOworCXMxNglidXNfbnVtOwogCWJvb2wJcWVfbW9kZTsKIAkvKiBib2FyZCBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLwogCXUxNgltYXhfY2hpcHNlbGVjdDsKLQl2b2lkCSgqYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSk7Ci0Jdm9pZAkoKmRlYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSk7CisJdm9pZAkoKmNzX2NvbnRyb2wpKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgb24pOwogCXUzMglzeXNjbGs7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCA2Nzc0MzJiLi5hN2Y4MTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTM4MCw2ICszODAsMzAgQEAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAKIC8qCisgKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMKKyAqIG9mIGEgdGhyZWFkLgorICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm8KKyAqLworc3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGxvbmcgZnVuYzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7Cit9OworCisvKgorICogUHJpbWFyeSBoYW5kbGVyIG9mIGEgZnVuY3Rpb24gcmV0dXJuLgorICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci4KKyAqIERlZmluZWQgaW4gZW50cnlfMzIvNjQuUworICovCitleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKworZXh0ZXJuIGludAorZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKKwkJCSB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOworZXh0ZXJuIHZvaWQKK2Z0cmFjZV9wb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KTsKKworLyoKICAqIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRvIHRyYWNlIGEgZnVuY3Rpb24gd2l0aCB0aGUgZnVuY3Rpb24KICAqIGdyYXBoIHRyYWNlciBidXQgd2Ugd2FudCB0aGVtIHRvIGtlZXAgdHJhY2VkIGJ5IHRoZSB1c3VhbCBmdW5jdGlvbgogICogdHJhY2VyIGlmIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgbm90IGNvbmZpZ3VyZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkcmVnLmggYi9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKaW5kZXggZWQyMWJkMy4uMjllZTI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZHJlZy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRyZWcuaApAQCAtMSw2OCArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9IRFJFR19ICiAjZGVmaW5lIF9MSU5VWF9IRFJFR19ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvYXRhLmg+Ci0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBkZWZpbmVzIGZvciB0aGUgQVQtaGQtY29udHJvbGxlci4KLSAqIFZhcmlvdXMgc291cmNlcy4KLSAqLwotCi0vKiBpZGUuYyBoYXMgaXRzIG93biBwb3J0IGRlZmluaXRpb25zIGluICJpZGUuaCIgKi8KLQotI2RlZmluZSBIRF9JUlEJCTE0Ci0KLS8qIEhkIGNvbnRyb2xsZXIgcmVncy4gUmVmOiBJQk0gQVQgQmlvcy1saXN0aW5nICovCi0jZGVmaW5lIEhEX0RBVEEJCTB4MWYwCQkvKiBfQ1RMIHdoZW4gd3JpdGluZyAqLwotI2RlZmluZSBIRF9FUlJPUgkweDFmMQkJLyogc2VlIGVyci1iaXRzICovCi0jZGVmaW5lIEhEX05TRUNUT1IJMHgxZjIJCS8qIG5yIG9mIHNlY3RvcnMgdG8gcmVhZC93cml0ZSAqLwotI2RlZmluZSBIRF9TRUNUT1IJMHgxZjMJCS8qIHN0YXJ0aW5nIHNlY3RvciAqLwotI2RlZmluZSBIRF9MQ1lMCQkweDFmNAkJLyogc3RhcnRpbmcgY3lsaW5kZXIgKi8KLSNkZWZpbmUgSERfSENZTAkJMHgxZjUJCS8qIGhpZ2ggYnl0ZSBvZiBzdGFydGluZyBjeWwgKi8KLSNkZWZpbmUgSERfQ1VSUkVOVAkweDFmNgkJLyogMTAxZGhoaGggLCBkPWRyaXZlLCBoaGhoPWhlYWQgKi8KLSNkZWZpbmUgSERfU1RBVFVTCTB4MWY3CQkvKiBzZWUgc3RhdHVzLWJpdHMgKi8KLSNkZWZpbmUgSERfRkVBVFVSRQlIRF9FUlJPUgkvKiBzYW1lIGlvIGFkZHJlc3MsIHJlYWQ9ZXJyb3IsIHdyaXRlPWZlYXR1cmUgKi8KLSNkZWZpbmUgSERfUFJFQ09NUAlIRF9GRUFUVVJFCS8qIG9ic29sZXRlIHVzZSBvZiB0aGlzIHBvcnQgLSBwcmVkYXRlcyBJREUgKi8KLSNkZWZpbmUgSERfQ09NTUFORAlIRF9TVEFUVVMJLyogc2FtZSBpbyBhZGRyZXNzLCByZWFkPXN0YXR1cywgd3JpdGU9Y21kICovCi0KLSNkZWZpbmUgSERfQ01ECQkweDNmNgkJLyogdXNlZCBmb3IgcmVzZXRzICovCi0jZGVmaW5lIEhEX0FMVFNUQVRVUwkweDNmNgkJLyogc2FtZSBhcyBIRF9TVEFUVVMgYnV0IGRvZXNuJ3QgY2xlYXIgaXJxICovCi0KLS8qIHJlbWFpbmRlciBpcyBzaGFyZWQgYmV0d2VlbiBoZC5jLCBpZGUuYywgaWRlLWNkLmMsIGFuZCB0aGUgaGRwYXJtIHV0aWxpdHkgKi8KLQotLyogQml0cyBvZiBIRF9TVEFUVVMgKi8KLSNkZWZpbmUgRVJSX1NUQVQJCTB4MDEKLSNkZWZpbmUgSU5ERVhfU1RBVAkJMHgwMgotI2RlZmluZSBFQ0NfU1RBVAkJMHgwNAkvKiBDb3JyZWN0ZWQgZXJyb3IgKi8KLSNkZWZpbmUgRFJRX1NUQVQJCTB4MDgKLSNkZWZpbmUgU0VFS19TVEFUCQkweDEwCi0jZGVmaW5lIFNSVl9TVEFUCQkweDEwCi0jZGVmaW5lIFdSRVJSX1NUQVQJCTB4MjAKLSNkZWZpbmUgUkVBRFlfU1RBVAkJMHg0MAotI2RlZmluZSBCVVNZX1NUQVQJCTB4ODAKLQotLyogQml0cyBmb3IgSERfRVJST1IgKi8KLSNkZWZpbmUgTUFSS19FUlIJCTB4MDEJLyogQmFkIGFkZHJlc3MgbWFyayAqLwotI2RlZmluZSBJTElfRVJSCQkJMHgwMQkvKiBJbGxlZ2FsIExlbmd0aCBJbmRpY2F0aW9uIChBVEFQSSkgKi8KLSNkZWZpbmUgVFJLMF9FUlIJCTB4MDIJLyogY291bGRuJ3QgZmluZCB0cmFjayAwICovCi0jZGVmaW5lIEVPTV9FUlIJCQkweDAyCS8qIEVuZCBPZiBNZWRpYSAoQVRBUEkpICovCi0jZGVmaW5lIEFCUlRfRVJSCQkweDA0CS8qIENvbW1hbmQgYWJvcnRlZCAqLwotI2RlZmluZSBNQ1JfRVJSCQkJMHgwOAkvKiBtZWRpYSBjaGFuZ2UgcmVxdWVzdCAqLwotI2RlZmluZSBJRF9FUlIJCQkweDEwCS8qIElEIGZpZWxkIG5vdCBmb3VuZCAqLwotI2RlZmluZSBNQ19FUlIJCQkweDIwCS8qIG1lZGlhIGNoYW5nZWQgKi8KLSNkZWZpbmUgRUNDX0VSUgkJCTB4NDAJLyogVW5jb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKi8KLSNkZWZpbmUgQkJEX0VSUgkJCTB4ODAJLyogcHJlLUVJREUgbWVhbmluZzogIGJsb2NrIG1hcmtlZCBiYWQgKi8KLSNkZWZpbmUgSUNSQ19FUlIJCTB4ODAJLyogbmV3IG1lYW5pbmc6ICBDUkMgZXJyb3IgZHVyaW5nIHRyYW5zZmVyICovCi0jZGVmaW5lIExGU19FUlIJCQkweGYwCS8qIExhc3QgRmFpbGVkIFNlbnNlIChBVEFQSSkgKi8KLQotLyogQml0cyBvZiBIRF9OU0VDVE9SICovCi0jZGVmaW5lIENECQkJMHgwMQotI2RlZmluZSBJTwkJCTB4MDIKLSNkZWZpbmUgUkVMCQkJMHgwNAotI2RlZmluZSBUQUdfTUFTSwkJMHhmOAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCkBAIC0xOTEsNiArMTI5LDcgQEAKICNkZWZpbmUgVEFTS0ZJTEVfSU5WQUxJRAkJMHg3ZmZmCiAjZW5kaWYKIAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBBVEEvQVRBUEkgQ29tbWFuZHMgcHJlIFQxMyBTcGVjICovCiAjZGVmaW5lIFdJTl9OT1AJCQkJMHgwMAogLyoKQEAgLTM3OSw2ICszMTgsNyBAQAogI2RlZmluZSBTRUNVUklUWV9FUkFTRV9VTklUCQkweEJECiAjZGVmaW5lIFNFQ1VSSVRZX0ZSRUVaRV9MT0NLCQkweEJFCiAjZGVmaW5lIFNFQ1VSSVRZX0RJU0FCTEVfUEFTU1dPUkQJMHhCRgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogc3RydWN0IGhkX2dlb21ldHJ5IHsKICAgICAgIHVuc2lnbmVkIGNoYXIgaGVhZHM7CkBAIC00NDgsNiArMzg4LDcgQEAKIAogI2RlZmluZSBfX05FV19IRF9EUklWRV9JRAogCisjaWZuZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBTdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgSERJT19HRVRfSURFTlRJVFksIGFzIHBlciBBTlNJIE5DSVRTIEFUQTYgcmV2LjFiIHNwZWMuCiAgKgpAQCAtNjk5LDYgKzY0MCw3IEBACiAJCQkJCSAqICA3OjAgU2lnbmF0dXJlCiAJCQkJCSAqLwogfTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qCiAgKiBJREUgIm5pY2UiIGZsYWdzLiBUaGVzZSBhcmUgdXNlZCBvbiBhIHBlciBkcml2ZSBiYXNpcyB0byBkZXRlcm1pbmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKaW5kZXggMTM4NzVjZS4uMWZjYjcxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWdobWVtLmgKQEAgLTE5LDggKzE5LDIxIEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ISUdITUVNCisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0hJR0hNRU0pICYmIGRlZmluZWQoQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQpCisKK3ZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfa21hcF9hdG9taWMoZW51bSBrbV90eXBlIHR5cGUpCit7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KICNpbmNsdWRlIDxhc20vaGlnaG1lbS5oPgogCiAvKiBkZWNsYXJhdGlvbnMgZm9yIGxpbnV4L21tL2hpZ2htZW0uYyAqLwpAQCAtNDQsOCArNTcsNiBAQAogCiAjZGVmaW5lIGt1bm1hcChwYWdlKSBkbyB7ICh2b2lkKSAocGFnZSk7IH0gd2hpbGUgKDApCiAKLSNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgotCiBzdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgaWR4KQogewogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAxZmZjMjNiLi5mMjc2MDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1ZQMjdTTVBYCTkzCS8qIFBhbmFzb25pYyBWUDI3cyB0dW5lciBpbnRlcm5hbCBNUFggKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX001Mjc5MCAJOTUgICAgICAvKiBNaXRzdWJpc2hpIE01Mjc5MFNQL0ZQIEFWIHN3aXRjaCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1MzQ1CTk2CS8qIGNzNTM0NSBhdWRpbyBwcm9jZXNzb3IJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0FVODUyMgk5NwkvKiBBdXZpdGVrIGF1ODUyMiAgICAgICAqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9PVjc2NzAgMTA0OAkvKiBPbW5pdmlzaW9uIDc2NzAgY2FtZXJhICovCiAKQEAgLTg3LDYgKzg4LDcgQEAKICNkZWZpbmUgSTJDX0hXX0JfQ1gyMzQxWAkweDAxMDAyMCAvKiBDb25leGFudCBDWDIzNDFYIE1QRUcgZW5jb2RlciBjYXJkcyAqLwogI2RlZmluZSBJMkNfSFdfQl9DWDIzODg1CTB4MDEwMDIyIC8qIGNvbmV4YW50IDIzODg1IGJhc2VkIHR2IGNhcmRzIChidXMxKSAqLwogI2RlZmluZSBJMkNfSFdfQl9BVTA4MjgJCTB4MDEwMDIzIC8qIGF1dml0ZWsgYXUwODI4IHVzYiBicmlkZ2UgKi8KKyNkZWZpbmUgSTJDX0hXX0JfSERQVlIJCTB4MDEwMDI1IC8qIEhhdXBwYXVnZSBIRCBQVlIgKi8KIAogLyogLS0tIFNHSSBhZGFwdGVycwkJCQkJCQkqLwogI2RlZmluZSBJMkNfSFdfU0dJX1ZJTk8JCTB4MTYwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9hdDI0LmggYi9pbmNsdWRlL2xpbnV4L2kyYy9hdDI0LmgKaW5kZXggZjZlZGQ1Mi4uOGFjZTkzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL2F0MjQuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX0FUMjRfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KIAogLyoKICAqIEFzIHNlZW4gdGhyb3VnaCBMaW51eCBJMkMsIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIG1vc3QgY29tbW9uIHR5cGVzIG9mIEkyQwpAQCAtMjMsNiArMjQsOSBAQAogI2RlZmluZSBBVDI0X0ZMQUdfUkVBRE9OTFkJMHg0MAkvKiBzeXNmcy1lbnRyeSB3aWxsIGJlIHJlYWQtb25seSAqLwogI2RlZmluZSBBVDI0X0ZMQUdfSVJVR08JCTB4MjAJLyogc3lzZnMtZW50cnkgd2lsbCBiZSB3b3JsZC1yZWFkYWJsZSAqLwogI2RlZmluZSBBVDI0X0ZMQUdfVEFLRThBRERSCTB4MTAJLyogdGFrZSBhbHdheXMgOCBhZGRyZXNzZXMgKDI0YzAwKSAqLworCisJdm9pZAkJKCpzZXR1cCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqLCB2b2lkICpjb250ZXh0KTsKKwl2b2lkCQkqY29udGV4dDsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfQVQyNF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKaW5kZXggODEzN2Y2Ni4uMGRjODBlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApAQCAtMjE4LDYgKzIxOCw1MyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBQb3dlciBidXMgbWVzc2FnZSBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIERFVl9HUlBfTlVMTAkJMHgwCisjZGVmaW5lIERFVl9HUlBfUDEJCTB4MQorI2RlZmluZSBERVZfR1JQX1AyCQkweDIKKyNkZWZpbmUgREVWX0dSUF9QMwkJMHg0CisKKyNkZWZpbmUgUkVTX0dSUF9SRVMJCTB4MAorI2RlZmluZSBSRVNfR1JQX1BQCQkweDEKKyNkZWZpbmUgUkVTX0dSUF9SQwkJMHgyCisjZGVmaW5lIFJFU19HUlBfUFBfUkMJCTB4MworI2RlZmluZSBSRVNfR1JQX1BSCQkweDQKKyNkZWZpbmUgUkVTX0dSUF9QUF9QUgkJMHg1CisjZGVmaW5lIFJFU19HUlBfUkNfUFIJCTB4NgorI2RlZmluZSBSRVNfR1JQX0FMTAkJMHg3CisKKyNkZWZpbmUgUkVTX1RZUEUyX1IwCQkweDAKKworI2RlZmluZSBSRVNfVFlQRV9BTEwJCTB4NworCisjZGVmaW5lIFJFU19TVEFURV9XUlNUCQkweEYKKyNkZWZpbmUgUkVTX1NUQVRFX0FDVElWRQkweEUKKyNkZWZpbmUgUkVTX1NUQVRFX1NMRUVQCQkweDgKKyNkZWZpbmUgUkVTX1NUQVRFX09GRgkJMHgwCisKKy8qCisgKiBQb3dlciBCdXMgTWVzc2FnZSBGb3JtYXQgLi4uIHRoZXNlIGNhbiBiZSBzZW50IGluZGl2aWR1YWxseSBieSBMaW51eCwKKyAqIGJ1dCBhcmUgdXN1YWxseSBwYXJ0IG9mIGRvd25sb2FkZWQgc2NyaXB0cyB0aGF0IGFyZSBydW4gd2hlbiB2YXJpb3VzCisgKiBwb3dlciBldmVudHMgYXJlIHRyaWdnZXJlZC4KKyAqCisgKiAgQnJvYWRjYXN0IE1lc3NhZ2UgKDE2IEJpdHMpOgorICogICAgREVWX0dSUFsxNToxM10gTVRbMTJdICBSRVNfR1JQWzExOjldICBSRVNfVFlQRTJbODo3XSBSRVNfVFlQRVs2OjRdCisgKiAgICBSRVNfU1RBVEVbMzowXQorICoKKyAqICBTaW5ndWxhciBNZXNzYWdlICgxNiBCaXRzKToKKyAqICAgIERFVl9HUlBbMTU6MTNdIE1UWzEyXSAgUkVTX0lEWzExOjRdICBSRVNfU1RBVEVbMzowXQorICovCisKKyNkZWZpbmUgTVNHX0JST0FEQ0FTVChkZXZncnAsIGdycCwgdHlwZSwgdHlwZTIsIHN0YXRlKSBcCisJKCAoZGV2Z3JwKSA8PCAxMyB8IDEgPDwgMTIgfCAoZ3JwKSA8PCA5IHwgKHR5cGUyKSA8PCA3IFwKKwl8ICh0eXBlKSA8PCA0IHwgKHN0YXRlKSkKKworI2RlZmluZSBNU0dfU0lOR1VMQVIoZGV2Z3JwLCBpZCwgc3RhdGUpIFwKKwkoKGRldmdycCkgPDwgMTMgfCAwIDw8IDEyIHwgKGlkKSA8PCA0IHwgKHN0YXRlKSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogc3RydWN0IHR3bDQwMzBfYmNpX3BsYXRmb3JtX2RhdGEgewogCWludCAqYmF0dGVyeV90bXBfdGJsOwogCXVuc2lnbmVkIGludCB0YmxzaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggODU0ZWJhOC4uYTVkMjZmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC00MCw2ICs0MCwxMyBAQAogI2RlZmluZSBFUlJPUl9SRVNFVAkzCS8qIFJlc2V0IGNvbnRyb2xsZXIgZXZlcnkgNHRoIHJldHJ5ICovCiAjZGVmaW5lIEVSUk9SX1JFQ0FMCTEJLyogUmVjYWxpYnJhdGUgZXZlcnkgMm5kIHJldHJ5ICovCiAKKy8qIEVycm9yIGNvZGVzIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCitlbnVtIHsKKwlJREVfRFJWX0VSUk9SX0dFTkVSQUwJPSAxMDEsCisJSURFX0RSVl9FUlJPUl9GSUxFTUFSSwk9IDEwMiwKKwlJREVfRFJWX0VSUk9SX0VPRAk9IDEwMywKK307CisKIC8qCiAgKiBEZWZpbml0aW9ucyBmb3IgYWNjZXNzaW5nIElERSBjb250cm9sbGVyIHJlZ2lzdGVycwogICovCkBAIC0xOTMsMjYgKzIwMCw4IEBACiAJaHctPmlvX3BvcnRzLmN0bF9hZGRyID0gY3RsX2FkZHI7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX002OEspIHx8IGRlZmluZWQoQ09ORklHX01JUFMpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCi0jaW5jbHVkZSA8YXNtL2lkZS5oPgotI2Vsc2UKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pZGVfaW9wcy5oPgotI2VuZGlmCi0KICNkZWZpbmUgTUFYX0hXSUZTCTEwCiAKLS8qIEN1cnJlbnRseSBvbmx5IG02OGssIGFwdXMgYW5kIG04eHggbmVlZCBpdCAqLwotI2lmbmRlZiBJREVfQVJDSF9BQ0tfSU5UUgotIyBkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpICgxKQotI2VuZGlmCi0KLS8qIEN1cnJlbnRseSBvbmx5IEF0YXJpIG5lZWRzIGl0ICovCi0jaWZuZGVmIElERV9BUkNIX0xPQ0sKLSMgZGVmaW5lIGlkZV9yZWxlYXNlX2xvY2soKQkJCWRvIHt9IHdoaWxlICgwKQotIyBkZWZpbmUgaWRlX2dldF9sb2NrKGhkbHIsIGRhdGEpCQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBJREVfQVJDSF9MT0NLICovCi0KIC8qCiAgKiBOb3cgZm9yIHRoZSBkYXRhIHdlIG5lZWQgdG8gbWFpbnRhaW4gcGVyLWRyaXZlOiAgaWRlX2RyaXZlX3QKICAqLwpAQCAtMjUyLDU2ICsyNDEsNTIgQEAKIAogZW51bSB7CiAJSURFX1RGTEFHX0xCQTQ4CQkJPSAoMSA8PCAwKSwKLQlJREVfVEZMQUdfRkxBR0dFRAkJPSAoMSA8PCAyKSwKLQlJREVfVEZMQUdfT1VUX0RBVEEJCT0gKDEgPDwgMyksCi0JSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRQk9ICgxIDw8IDQpLAotCUlERV9URkxBR19PVVRfSE9CX05TRUNUCQk9ICgxIDw8IDUpLAotCUlERV9URkxBR19PVVRfSE9CX0xCQUwJCT0gKDEgPDwgNiksCi0JSURFX1RGTEFHX09VVF9IT0JfTEJBTQkJPSAoMSA8PCA3KSwKLQlJREVfVEZMQUdfT1VUX0hPQl9MQkFICQk9ICgxIDw8IDgpLAorCUlERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUJPSAoMSA8PCAxKSwKKwlJREVfVEZMQUdfT1VUX0hPQl9OU0VDVAkJPSAoMSA8PCAyKSwKKwlJREVfVEZMQUdfT1VUX0hPQl9MQkFMCQk9ICgxIDw8IDMpLAorCUlERV9URkxBR19PVVRfSE9CX0xCQU0JCT0gKDEgPDwgNCksCisJSURFX1RGTEFHX09VVF9IT0JfTEJBSAkJPSAoMSA8PCA1KSwKIAlJREVfVEZMQUdfT1VUX0hPQgkJPSBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9IT0JfTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9IT0JfTEJBTSB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9IT0JfTEJBSCwKLQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUJCT0gKDEgPDwgOSksCi0JSURFX1RGTEFHX09VVF9OU0VDVAkJPSAoMSA8PCAxMCksCi0JSURFX1RGTEFHX09VVF9MQkFMCQk9ICgxIDw8IDExKSwKLQlJREVfVEZMQUdfT1VUX0xCQU0JCT0gKDEgPDwgMTIpLAotCUlERV9URkxBR19PVVRfTEJBSAkJPSAoMSA8PCAxMyksCisJSURFX1RGTEFHX09VVF9GRUFUVVJFCQk9ICgxIDw8IDYpLAorCUlERV9URkxBR19PVVRfTlNFQ1QJCT0gKDEgPDwgNyksCisJSURFX1RGTEFHX09VVF9MQkFMCQk9ICgxIDw8IDgpLAorCUlERV9URkxBR19PVVRfTEJBTQkJPSAoMSA8PCA5KSwKKwlJREVfVEZMQUdfT1VUX0xCQUgJCT0gKDEgPDwgMTApLAogCUlERV9URkxBR19PVVRfVEYJCT0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19PVVRfTEJBTSB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9MQkFILAotCUlERV9URkxBR19PVVRfREVWSUNFCQk9ICgxIDw8IDE0KSwKLQlJREVfVEZMQUdfV1JJVEUJCQk9ICgxIDw8IDE1KSwKLQlJREVfVEZMQUdfRkxBR0dFRF9TRVRfSU5fRkxBR1MJPSAoMSA8PCAxNiksCi0JSURFX1RGTEFHX0lOX0RBVEEJCT0gKDEgPDwgMTcpLAotCUlERV9URkxBR19DVVNUT01fSEFORExFUgk9ICgxIDw8IDE4KSwKLQlJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSwk9ICgxIDw8IDE5KSwKLQlJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUJPSAoMSA8PCAyMCksCi0JSURFX1RGTEFHX0lOX0hPQl9OU0VDVAkJPSAoMSA8PCAyMSksCi0JSURFX1RGTEFHX0lOX0hPQl9MQkFMCQk9ICgxIDw8IDIyKSwKLQlJREVfVEZMQUdfSU5fSE9CX0xCQU0JCT0gKDEgPDwgMjMpLAotCUlERV9URkxBR19JTl9IT0JfTEJBSAkJPSAoMSA8PCAyNCksCisJSURFX1RGTEFHX09VVF9ERVZJQ0UJCT0gKDEgPDwgMTEpLAorCUlERV9URkxBR19XUklURQkJCT0gKDEgPDwgMTIpLAorCUlERV9URkxBR19DVVNUT01fSEFORExFUgk9ICgxIDw8IDEzKSwKKwlJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSwk9ICgxIDw8IDE0KSwKKwlJREVfVEZMQUdfSU5fSE9CX0VSUk9SCQk9ICgxIDw8IDE1KSwKKwlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDE2KSwKKwlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMTcpLAorCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAxOCksCisJSURFX1RGTEFHX0lOX0hPQl9MQkFICQk9ICgxIDw8IDE5KSwKIAlJREVfVEZMQUdfSU5fSE9CX0xCQQkJPSBJREVfVEZMQUdfSU5fSE9CX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTEJBTSB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkFILAotCUlERV9URkxBR19JTl9IT0IJCT0gSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFIHwKKwlJREVfVEZMQUdfSU5fSE9CCQk9IElERV9URkxBR19JTl9IT0JfRVJST1IgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTlNFQ1QgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTEJBLAotCUlERV9URkxBR19JTl9GRUFUVVJFCQk9ICgxIDw8IDEpLAotCUlERV9URkxBR19JTl9OU0VDVAkJPSAoMSA8PCAyNSksCi0JSURFX1RGTEFHX0lOX0xCQUwJCT0gKDEgPDwgMjYpLAotCUlERV9URkxBR19JTl9MQkFNCQk9ICgxIDw8IDI3KSwKLQlJREVfVEZMQUdfSU5fTEJBSAkJPSAoMSA8PCAyOCksCisJSURFX1RGTEFHX0lOX0VSUk9SCQk9ICgxIDw8IDIwKSwKKwlJREVfVEZMQUdfSU5fTlNFQ1QJCT0gKDEgPDwgMjEpLAorCUlERV9URkxBR19JTl9MQkFMCQk9ICgxIDw8IDIyKSwKKwlJREVfVEZMQUdfSU5fTEJBTQkJPSAoMSA8PCAyMyksCisJSURFX1RGTEFHX0lOX0xCQUgJCT0gKDEgPDwgMjQpLAogCUlERV9URkxBR19JTl9MQkEJCT0gSURFX1RGTEFHX0lOX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fTEJBSCwKIAlJREVfVEZMQUdfSU5fVEYJCQk9IElERV9URkxBR19JTl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0xCQSwKLQlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI5KSwKKwlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI1KSwKIAlJREVfVEZMQUdfSE9CCQkJPSBJREVfVEZMQUdfT1VUX0hPQiB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQiwKIAlJREVfVEZMQUdfVEYJCQk9IElERV9URkxBR19PVVRfVEYgfApAQCAtMzA5LDE1ICsyOTQsMjggQEAKIAlJREVfVEZMQUdfREVWSUNFCQk9IElERV9URkxBR19PVVRfREVWSUNFIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fREVWSUNFLAogCS8qIGZvcmNlIDE2LWJpdCBJL08gb3BlcmF0aW9ucyAqLwotCUlERV9URkxBR19JT18xNkJJVAkJPSAoMSA8PCAzMCksCi0JLyogaWRlX3Rhc2tfdCB3YXMgYWxsb2NhdGVkIHVzaW5nIGttYWxsb2MoKSAqLwotCUlERV9URkxBR19EWU4JCQk9ICgxIDw8IDMxKSwKKwlJREVfVEZMQUdfSU9fMTZCSVQJCT0gKDEgPDwgMjYpLAorCS8qIHN0cnVjdCBpZGVfY21kIHdhcyBhbGxvY2F0ZWQgdXNpbmcga21hbGxvYygpICovCisJSURFX1RGTEFHX0RZTgkJCT0gKDEgPDwgMjcpLAorCUlERV9URkxBR19GUwkJCT0gKDEgPDwgMjgpLAorCUlERV9URkxBR19NVUxUSV9QSU8JCT0gKDEgPDwgMjkpLAorfTsKKworZW51bSB7CisJSURFX0ZURkxBR19GTEFHR0VECQk9ICgxIDw8IDApLAorCUlERV9GVEZMQUdfU0VUX0lOX0ZMQUdTCQk9ICgxIDw8IDEpLAorCUlERV9GVEZMQUdfT1VUX0RBVEEJCT0gKDEgPDwgMiksCisJSURFX0ZURkxBR19JTl9EQVRBCQk9ICgxIDw8IDMpLAogfTsKIAogc3RydWN0IGlkZV90YXNrZmlsZSB7CiAJdTgJaG9iX2RhdGE7CS8qICAwOiBoaWdoIGRhdGEgYnl0ZSAoZm9yIFRBU0tGSUxFIElPQ1RMKSAqLworCQkJCS8qICAxLTU6IGFkZGl0aW9uYWwgZGF0YSB0byBzdXBwb3J0IExCQTQ4ICovCisJdW5pb24geworCQl1OCBob2JfZXJyb3I7CS8qICAgcmVhZDogZXJyb3IgKi8KKwkJdTggaG9iX2ZlYXR1cmU7CS8qICB3cml0ZTogZmVhdHVyZSAqLworCX07CiAKLQl1OAlob2JfZmVhdHVyZTsJLyogIDEtNTogYWRkaXRpb25hbCBkYXRhIHRvIHN1cHBvcnQgTEJBNDggKi8KIAl1OAlob2JfbnNlY3Q7CiAJdTgJaG9iX2xiYWw7CiAJdTgJaG9iX2xiYW07CkBAIC0zNDMsMTYgKzM0MSwyOSBAQAogCX07CiB9OwogCi10eXBlZGVmIHN0cnVjdCBpZGVfdGFza19zIHsKK3N0cnVjdCBpZGVfY21kIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZGVfdGFza2ZpbGUJdGY7CiAJCXU4CQkJdGZfYXJyYXlbMTRdOwogCX07CisJdTgJCQlmdGZfZmxhZ3M7CS8qIGZvciBUQVNLRklMRSBpb2N0bCAqLwogCXUzMgkJCXRmX2ZsYWdzOwotCWludAkJCWRhdGFfcGhhc2U7CisJaW50CQkJcHJvdG9jb2w7CisKKwlpbnQJCQlzZ19uZW50czsJICAvKiBudW1iZXIgb2Ygc2cgZW50cmllcyAqLworCWludAkJCW9yaWdfc2dfbmVudHM7CisJaW50CQkJc2dfZG1hX2RpcmVjdGlvbjsgLyogRE1BIHRyYW5zZmVyIGRpcmVjdGlvbiAqLworCisJdW5zaWduZWQgaW50CQluYnl0ZXM7CisJdW5zaWduZWQgaW50CQlubGVmdDsKKwl1bnNpZ25lZCBpbnQJCWxhc3RfeGZlcl9sZW47CisKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmN1cnNnOworCXVuc2lnbmVkIGludAkJY3Vyc2dfb2ZzOworCiAJc3RydWN0IHJlcXVlc3QJCSpycTsJCS8qIGNvcHkgb2YgcmVxdWVzdCAqLwogCXZvaWQJCQkqc3BlY2lhbDsJLyogdmFsaWRfdCBnZW5lcmFsbHkgKi8KLX0gaWRlX3Rhc2tfdDsKK307CiAKIC8qIEFUQVBJIHBhY2tldCBjb21tYW5kIGZsYWdzICovCiBlbnVtIHsKQEAgLTM2NCwxNSArMzc1LDEzIEBACiAJUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJCT0gKDEgPDwgNCksCiAJUENfRkxBR19ETUFfRVJST1IJCT0gKDEgPDwgNSksCiAJUENfRkxBR19XUklUSU5HCQkJPSAoMSA8PCA2KSwKLQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLwotCVBDX0ZMQUdfVElNRURPVVQJCT0gKDEgPDwgNyksCiB9OwogCiAvKgogICogV2l0aCBlYWNoIHBhY2tldCBjb21tYW5kLCB3ZSBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiBJREVfUENfQlVGRkVSX1NJWkUgYnl0ZXMuCiAgKiBUaGlzIGlzIHVzZWQgZm9yIHNldmVyYWwgcGFja2V0IGNvbW1hbmRzIChub3QgZm9yIFJFQUQvV1JJVEUgY29tbWFuZHMpLgogICovCi0jZGVmaW5lIElERV9QQ19CVUZGRVJfU0laRQkyNTYKKyNkZWZpbmUgSURFX1BDX0JVRkZFUl9TSVpFCTY0CiAjZGVmaW5lIEFUQVBJX1dBSVRfUEMJCSg2MCAqIEhaKQogCiBzdHJ1Y3QgaWRlX2F0YXBpX3BjIHsKQEAgLTQxMCw5ICs0MTksNiBAQAogCXN0cnVjdCBpZGV0YXBlX2JoICpiaDsKIAljaGFyICpiX2RhdGE7CiAKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGludCBzZ19jbnQ7Ci0KIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiB9OwogCkBAIC00MzYsNyArNDQyLDYgQEAKIAkJCQkJaW50KTsKIAlpZGVfc3RhcnRzdG9wX3QJKCpkb19yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCQkgICAgICBzZWN0b3JfdCk7Ci0JaW50CQkoKmVuZF9yZXF1ZXN0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50LCBpbnQpOwogCWludAkJKCppb2N0bCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBibG9ja19kZXZpY2UgKiwKIAkJCQkgZm1vZGVfdCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIH07CkBAIC00NTQsMTEgKzQ1OSw2IEBACiAJSURFX0FGTEFHX1RPQ0FERFJfQVNfQkNECT0gKDEgPDwgMyksCiAJLyogVE9DIHRyYWNrIG51bWJlcnMgYXJlIGluIEJDRC4gKi8KIAlJREVfQUZMQUdfVE9DVFJBQ0tTX0FTX0JDRAk9ICgxIDw8IDQpLAotCS8qCi0JICogRHJpdmUgZG9lcyBub3QgcHJvdmlkZSBkYXRhIGluIG11bHRpcGxlcyBvZiBTRUNUT1JfU0laRQotCSAqIHdoZW4gbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgaXMgbmVlZGVkLgotCSAqLwotCUlERV9BRkxBR19MSU1JVF9ORlJBTUVTCQk9ICgxIDw8IDUpLAogCS8qIFNhdmVkIFRPQyBpbmZvcm1hdGlvbiBpcyBjdXJyZW50LiAqLwogCUlERV9BRkxBR19UT0NfVkFMSUQJCT0gKDEgPDwgNiksCiAJLyogV2UgdGhpbmsgdGhhdCB0aGUgZHJpdmUgZG9vciBpcyBsb2NrZWQuICovCkBAIC01MTIsOCArNTEyLDYgQEAKIAlJREVfREZMQUdfTklDRTEJCQk9ICgxIDw8IDUpLAogCS8qIGRldmljZSBpcyBwaHlzaWNhbGx5IHByZXNlbnQgKi8KIAlJREVfREZMQUdfUFJFU0VOVAkJPSAoMSA8PCA2KSwKLQkvKiBkZXZpY2UgZWplY3RlZCBoaW50ICovCi0JSURFX0RGTEFHX0RFQUQJCQk9ICgxIDw8IDcpLAogCS8qIGlkIHJlYWQgZnJvbSBkZXZpY2UgKHN5bnRoZXRpYyBpZiBub3Qgc2V0KSAqLwogCUlERV9ERkxBR19JRF9SRUFECQk9ICgxIDw8IDgpLAogCUlERV9ERkxBR19OT1BST0JFCQk9ICgxIDw8IDkpLApAQCAtNjA1LDcgKzYwMyw3IEBACiAKIAl1bnNpZ25lZCBpbnQJYmlvc19jeWw7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgY3lscyAqLwogCXVuc2lnbmVkIGludAljeWw7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGN5bHMgKi8KLQl1bnNpZ25lZCBpbnQJZHJpdmVfZGF0YTsJLyogdXNlZCBieSBzZXRfcGlvX21vZGUvc2VsZWN0cHJvYyAqLworCXVuc2lnbmVkIGludAlkcml2ZV9kYXRhOwkvKiB1c2VkIGJ5IHNldF9waW9fbW9kZS9kZXZfc2VsZWN0KCkgKi8KIAl1bnNpZ25lZCBpbnQJZmFpbHVyZXM7CS8qIGN1cnJlbnQgZmFpbHVyZSBjb3VudCAqLwogCXVuc2lnbmVkIGludAltYXhfZmFpbHVyZXM7CS8qIG1heGltdW0gYWxsb3dlZCBmYWlsdXJlIGNvdW50ICovCiAJdTY0CQlwcm9iZWRfY2FwYWNpdHk7LyogaW5pdGlhbCByZXBvcnRlZCBtZWRpYSBjYXBhY2l0eSAoaWRlLWNkIG9ubHkgY3VycmVudGx5KSAqLwpAQCAtNjI3LDggKzYyNSwxMSBAQAogCS8qIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAorCS8qIGxhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCisJc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOworCiAJLyogY2FsbGJhY2sgZm9yIHBhY2tldCBjb21tYW5kcyAqLwotCXZvaWQgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CisJaW50ICAoKnBjX2NhbGxiYWNrKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgaW50KTsKIAogCXZvaWQgKCpwY191cGRhdGVfYnVmZmVycykoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKik7CiAJaW50ICAoKnBjX2lvX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosCkBAIC02NTgsMTYgKzY1OSwxNiBAQAogCXZvaWQJKCpleGVjX2NvbW1hbmQpKHN0cnVjdCBod2lmX3MgKiwgdTgpOwogCXU4CSgqcmVhZF9zdGF0dXMpKHN0cnVjdCBod2lmX3MgKik7CiAJdTgJKCpyZWFkX2FsdHN0YXR1cykoc3RydWN0IGh3aWZfcyAqKTsKKwl2b2lkCSgqd3JpdGVfZGV2Y3RsKShzdHJ1Y3QgaHdpZl9zICosIHU4KTsKIAotCXZvaWQJKCpzZXRfaXJxKShzdHJ1Y3QgaHdpZl9zICosIGludCk7CisJdm9pZAkoKmRldl9zZWxlY3QpKGlkZV9kcml2ZV90ICopOworCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKKwl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLQl2b2lkCSgqdGZfbG9hZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7Ci0Jdm9pZAkoKnRmX3JlYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOwotCi0Jdm9pZAkoKmlucHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCk7Ci0Jdm9pZAkoKm91dHB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkICosCi0JCQkgICAgICAgdW5zaWduZWQgaW50KTsKKwl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwKKwkJCSAgICAgIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKKwl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosCisJCQkgICAgICAgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzOwpAQCAtNjc4LDcgKzY3OSw2IEBACiAgKiBAaW5pdF9kZXY6CQlob3N0IHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9mIGEgZGV2aWNlCiAgKiBAc2V0X3Bpb19tb2RlOglyb3V0aW5lIHRvIHByb2dyYW0gaG9zdCBmb3IgUElPIG1vZGUKICAqIEBzZXRfZG1hX21vZGU6CXJvdXRpbmUgdG8gcHJvZ3JhbSBob3N0IGZvciBETUEgbW9kZQotICogQHNlbGVjdHByb2M6CQl0d2Vha3MgaGFyZHdhcmUgdG8gc2VsZWN0IGRyaXZlCiAgKiBAcmVzZXRfcG9sbDoJCWNoaXBzZXQgcG9sbGluZyBiYXNlZCBvbiBoYmEgc3BlY2lmaWNzCiAgKiBAcHJlX3Jlc2V0OgkJY2hpcHNldCBzcGVjaWZpYyBjaGFuZ2VzIHRvIGRlZmF1bHQgZm9yIGRldmljZS1oYmEgcmVzZXRzCiAgKiBAcmVzZXRwcm9jOgkJcm91dGluZSB0byByZXNldCBjb250cm9sbGVyIGFmdGVyIGEgZGlzayByZXNldApAQCAtNjk1LDcgKzY5NSw2IEBACiAJdm9pZAkoKmluaXRfZGV2KShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqc2V0X3Bpb19tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7CiAJdm9pZAkoKnNldF9kbWFfbW9kZSkoaWRlX2RyaXZlX3QgKiwgY29uc3QgdTgpOwotCXZvaWQJKCpzZWxlY3Rwcm9jKShpZGVfZHJpdmVfdCAqKTsKIAlpbnQJKCpyZXNldF9wb2xsKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqcHJlX3Jlc2V0KShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqcmVzZXRwcm9jKShpZGVfZHJpdmVfdCAqKTsKQEAgLTcxMSwxMyArNzEwLDE1IEBACiAKIHN0cnVjdCBpZGVfZG1hX29wcyB7CiAJdm9pZAkoKmRtYV9ob3N0X3NldCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7Ci0JaW50CSgqZG1hX3NldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0Jdm9pZAkoKmRtYV9leGVjX2NtZCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHU4KTsKKwlpbnQJKCpkbWFfc2V0dXApKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAl2b2lkCSgqZG1hX3N0YXJ0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CiAJaW50CSgqZG1hX2VuZCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCWludAkoKmRtYV90ZXN0X2lycSkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCXZvaWQJKCpkbWFfbG9zdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKLQl2b2lkCSgqZG1hX3RpbWVvdXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwkvKiBiZWxvdyBvbmVzIGFyZSBvcHRpb25hbCAqLworCWludAkoKmRtYV9jaGVjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCBpZGVfY21kICopOworCWludAkoKmRtYV90aW1lcl9leHBpcnkpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKKwl2b2lkCSgqZG1hX2NsZWFyKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIG1ldGhvZCBpcyBvcHRpb25hbCBhbmQgb25seSByZXF1aXJlZCB0byBiZQogCSAqIGltcGxlbWVudGVkIGZvciB0aGUgU0ZGLTgwMzhpIGNvbXBhdGlibGUgY29udHJvbGxlcnMuCkBAIC03ODAsMTkgKzc4MSw4IEBACiAJLyogU2NhdHRlci1nYXRoZXIgbGlzdCB1c2VkIHRvIGJ1aWxkIHRoZSBhYm92ZSAqLwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfdGFibGU7CiAJaW50IHNnX21heF9uZW50czsJCS8qIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gaXQgKi8KLQlpbnQgc2dfbmVudHM7CQkJLyogQ3VycmVudCBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLwotCWludCBvcmlnX3NnX25lbnRzOwotCWludCBzZ19kbWFfZGlyZWN0aW9uOwkJLyogZG1hIHRyYW5zZmVyIGRpcmVjdGlvbiAqLwogCi0JLyogZGF0YSBwaGFzZSBvZiB0aGUgYWN0aXZlIGNvbW1hbmQgKGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciBQSU8vRE1BKSAqLwotCWludAkJZGF0YV9waGFzZTsKLQotCXN0cnVjdCBpZGVfdGFza19zIHRhc2s7CQkvKiBjdXJyZW50IGNvbW1hbmQgKi8KLQotCXVuc2lnbmVkIGludCBuc2VjdDsKLQl1bnNpZ25lZCBpbnQgbmxlZnQ7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZzsKLQl1bnNpZ25lZCBpbnQgY3Vyc2dfb2ZzOworCXN0cnVjdCBpZGVfY21kIGNtZDsJCS8qIGN1cnJlbnQgY29tbWFuZCAqLwogCiAJaW50CQlycXNpemU7CQkvKiBtYXggc2VjdG9ycyBwZXIgcmVxdWVzdCAqLwogCWludAkJaXJxOwkJLyogb3VyIGlycSBudW1iZXIgKi8KQEAgLTg1MCw5ICs4NDAsMTggQEAKIAlpZGVfaHdpZl90CSpwb3J0c1tNQVhfSE9TVF9QT1JUUyArIDFdOwogCXVuc2lnbmVkIGludAluX3BvcnRzOwogCXN0cnVjdCBkZXZpY2UJKmRldlsyXTsKKwogCWludAkJKCppbml0X2NoaXBzZXQpKHN0cnVjdCBwY2lfZGV2ICopOworCisJdm9pZAkJKCpnZXRfbG9jaykoaXJxX2hhbmRsZXJfdCwgdm9pZCAqKTsKKwl2b2lkCQkoKnJlbGVhc2VfbG9jaykodm9pZCk7CisKIAlpcnFfaGFuZGxlcl90CWlycV9oYW5kbGVyOworCiAJdW5zaWduZWQgbG9uZwlob3N0X2ZsYWdzOworCisJaW50CQlpcnFfZmxhZ3M7CisKIAl2b2lkCQkqaG9zdF9wcml2OwogCWlkZV9od2lmX3QJKmN1cl9wb3J0OwkvKiBmb3IgaG9zdHMgcmVxdWlyaW5nIHNlcmlhbGl6YXRpb24gKi8KIApAQCAtODY5LDcgKzg2OCw3IEBACiB0eXBlZGVmIGludCAoaWRlX2V4cGlyeV90KShpZGVfZHJpdmVfdCAqKTsKIAogLyogdXNlZCBieSBpZGUtY2QsIGlkZS1mbG9wcHksIGV0Yy4gKi8KLXR5cGVkZWYgdm9pZCAoeGZlcl9mdW5jX3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqLCB1bnNpZ25lZCk7Cit0eXBlZGVmIHZvaWQgKHhmZXJfZnVuY190KShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkKTsKIAogZXh0ZXJuIHN0cnVjdCBtdXRleCBpZGVfc2V0dGluZ19tdHg7CiAKQEAgLTEwNDUsMTAgKzEwNDQsMTEgQEAKIH07CiAKIC8qIERSVl9OQU1FIGhhcyB0byBiZSBkZWZpbmVkIGluIHRoZSBkcml2ZXIgYmVmb3JlIHVzaW5nIHRoZSBtYWNybyBiZWxvdyAqLwotI2RlZmluZSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pCQkJXAotewkJCQkJCQkJXAotCWlmICh1bmxpa2VseShkcml2ZS0+ZGVidWdfbWFzayAmIGx2bCkpCQkJXAotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgZm10LCAjIyBhcmdzKTsJXAorI2RlZmluZSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKK3sJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGRyaXZlLT5kZWJ1Z19tYXNrICYgbHZsKSkJCQkJXAorCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiAiIGZtdCAiXG4iLAkJXAorCQkJCQkgIF9fZnVuY19fLCAjIyBhcmdzKTsJCVwKIH0KIAogLyoKQEAgLTEwODcsNyArMTA4Nyw3IEBACiAKIHZvaWQgaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBpZGVfc3RhcnRzdG9wX3QgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci12b2lkIGlkZV9jb21wbGV0ZV9wbV9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordm9pZCBpZGVfY29tcGxldGVfcG1fcnEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB2b2lkIGlkZV9jaGVja19wbV9zdGF0ZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAogLyoKQEAgLTEwOTksNyArMTA5OSw2IEBACiBzdHJ1Y3QgaWRlX2RyaXZlciB7CiAJY29uc3QgY2hhcgkJCSp2ZXJzaW9uOwogCWlkZV9zdGFydHN0b3BfdAkoKmRvX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHNlY3Rvcl90KTsKLQlpbnQJCSgqZW5kX3JlcXVlc3QpKGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlcglnZW5fZHJpdmVyOwogCWludAkJKCpwcm9iZSkoaWRlX2RyaXZlX3QgKik7CiAJdm9pZAkJKCpyZW1vdmUpKGlkZV9kcml2ZV90ICopOwpAQCAtMTEzMCwxOSArMTEyOSwxNSBAQAogZXh0ZXJuIGludCBpZGVfdmxiX2NsazsKIGV4dGVybiBpbnQgaWRlX3BjaV9jbGs7CiAKLWludCBpZGVfZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwotaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7Cit1bnNpZ25lZCBpbnQgaWRlX3JxX2J5dGVzKHN0cnVjdCByZXF1ZXN0ICopOworaW50IGlkZV9lbmRfcnEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAotdm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCwKLQkJICAgICAgIGlkZV9leHBpcnlfdCAqKTsKLXZvaWQgaWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAotCQkgICAgIGlkZV9leHBpcnlfdCAqKTsKK3ZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQpOwogCi12b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgdTgsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAotCQkJIGlkZV9leHBpcnlfdCAqKTsKLQotdm9pZCBpZGVfZXhlY3V0ZV9wa3RfY21kKGlkZV9kcml2ZV90ICopOwordm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIGlkZV9oYW5kbGVyX3QgKiwKKwkJCSB1bnNpZ25lZCBpbnQpOwogCiB2b2lkIGlkZV9wYWRfdHJhbnNmZXIoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwogCkBAIC0xMTY0LDI1ICsxMTU5LDIzIEBACiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Cit2b2lkIGlkZV9jb21wbGV0ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdTgsIHU4KTsKK2ludCBpZGVfY29tcGxldGVfcnEoaWRlX2RyaXZlX3QgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogCiB2b2lkIGlkZV90Zl9kdW1wKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlkZV90YXNrZmlsZSAqKTsKIAogdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKiwgdTgpOwogdTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKik7CiB1OCBpZGVfcmVhZF9hbHRzdGF0dXMoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICosIHU4KTsKIAotdm9pZCBpZGVfc2V0X2lycShpZGVfaHdpZl90ICosIGludCk7Cit2b2lkIGlkZV9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICopOwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKLXZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKK3ZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogCi12b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwgdW5zaWduZWQgaW50KTsKLQotaW50IGlkZV9pb19idWZmZXJzKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfYXRhcGlfcGMgKiwgdW5zaWduZWQgaW50LCBpbnQpOwotCi1leHRlcm4gdm9pZCBTRUxFQ1RfRFJJVkUoaWRlX2RyaXZlX3QgKik7CiB2b2lkIFNFTEVDVF9NQVNLKGlkZV9kcml2ZV90ICosIGludCk7CiAKIHU4IGlkZV9yZWFkX2Vycm9yKGlkZV9kcml2ZV90ICopOwpAQCAtMTIyNCwxNiArMTIxNywxOCBAQAogCiBpbnQgaWRlX2NkX2dldF94ZmVybGVuKHN0cnVjdCByZXF1ZXN0ICopOwogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgZG9fcndfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgdGFza19lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCk7Cit2b2lkIGlkZV9waW9fYnl0ZXMoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCi1pbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICosIHU4ICosIHUxNik7Ci1pbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqKTsKK3ZvaWQgaWRlX2ZpbmlzaF9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdTgpOwogCi1pbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB1OCAqLCB1MTYpOworaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOworCitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGxvbmcpOwogCiBpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CiAKQEAgLTEzMzUsNiArMTMzMCwxMCBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAorCS8qIGhvc3QgaXMgRFRDMjI3OCAqLworCUlERV9IRkxBR19EVEMyMjc4CQk9ICgxIDw8IDIxKSwKKwkvKiA0IGRldmljZXMgb24gYSBzaW5nbGUgc2V0IG9mIEkvTyBwb3J0cyAqLworCUlERV9IRkxBR180RFJJVkVTCQk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM2Miw3ICsxMzYxLDEyIEBACiAKIHN0cnVjdCBpZGVfcG9ydF9pbmZvIHsKIAljaGFyCQkJKm5hbWU7CisKIAlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisKKwl2b2lkCQkJKCpnZXRfbG9jaykoaXJxX2hhbmRsZXJfdCwgdm9pZCAqKTsKKwl2b2lkCQkJKCpyZWxlYXNlX2xvY2spKHZvaWQpOworCiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTEzNzksNiArMTM4Myw5IEBACiAJdTE2CQkJbWF4X3NlY3RvcnM7CS8qIGlmIDwgdGhhbiB0aGUgZGVmYXVsdCBvbmUgKi8KIAogCXUzMgkJCWhvc3RfZmxhZ3M7CisKKwlpbnQJCQlpcnFfZmxhZ3M7CisKIAl1OAkJCXBpb19tYXNrOwogCXU4CQkJc3dkbWFfbWFzazsKIAl1OAkJCW13ZG1hX21hc2s7CkBAIC0xMzk4LDggKzE0MDUsOCBAQAogI2RlZmluZSBpZGVfcGNpX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotdm9pZCBpZGVfbWFwX3NnKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotdm9pZCBpZGVfaW5pdF9zZ19jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7Cit2b2lkIGlkZV9pbml0X3NnX2NtZChzdHJ1Y3QgaWRlX2NtZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZGVmaW5lIEJBRF9ETUFfRFJJVkUJCTAKICNkZWZpbmUgR09PRF9ETUFfRFJJVkUJCTEKQEAgLTE0MzMsMTggKzE0NDAsMTggQEAKIGludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7CiAKLWludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotdm9pZCBpZGVfZGVzdHJveV9kbWF0YWJsZShpZGVfZHJpdmVfdCAqKTsKK2ludCBpZGVfZG1hX3ByZXBhcmUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7Cit2b2lkIGlkZV9kbWFfdW5tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGCiBpbnQgY29uZmlnX2RyaXZlX2Zvcl9kbWEoaWRlX2RyaXZlX3QgKik7Ci1leHRlcm4gaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2ludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiB2b2lkIGlkZV9kbWFfaG9zdF9zZXQoaWRlX2RyaXZlX3QgKiwgaW50KTsKLWV4dGVybiBpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqKTsKLXZvaWQgaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqLCB1OCk7CitpbnQgaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIGV4dGVybiB2b2lkIGlkZV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2RtYV9lbmQoaWRlX2RyaXZlX3QgKik7CiBpbnQgaWRlX2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqKTsKK2ludCBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnkoaWRlX2RyaXZlX3QgKik7CiB1OCBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBzZmZfZG1hX29wczsKICNlbHNlCkBAIC0xNDUyLDcgKzE0NTksNiBAQAogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYgKi8KIAogdm9pZCBpZGVfZG1hX2xvc3RfaXJxKGlkZV9kcml2ZV90ICopOwotdm9pZCBpZGVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKik7CiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV90aW1lb3V0X3JldHJ5KGlkZV9kcml2ZV90ICosIGludCk7CiAKICNlbHNlCkBAIC0xNDY1LDggKzE0NzEsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfZG1hX3ZlcmJvc2UoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQogc3RhdGljIGlubGluZSBpbnQgaWRlX3NldF9kbWEoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2NoZWNrX2RtYV9jcmMoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IDsgfQorc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfZG1hX3ByZXBhcmUoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCSAgc3RydWN0IGlkZV9jbWQgKmNtZCkgeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9kbWFfdW5tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCSAgICBzdHJ1Y3QgaWRlX2NtZCAqY21kKSB7IDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmgKaW5kZXggZGQ4NDZkZi4uZTk2OGRiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkci5oCkBAIC0xMDYsNiArMTA2LDcgQEAKIGludCBpZHJfZ2V0X25ld19hYm92ZShzdHJ1Y3QgaWRyICppZHAsIHZvaWQgKnB0ciwgaW50IHN0YXJ0aW5nX2lkLCBpbnQgKmlkKTsKIGludCBpZHJfZm9yX2VhY2goc3RydWN0IGlkciAqaWRwLAogCQkgaW50ICgqZm4pKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwordm9pZCAqaWRyX2dldF9uZXh0KHN0cnVjdCBpZHIgKmlkcCwgaW50ICpuZXh0aWQpOwogdm9pZCAqaWRyX3JlcGxhY2Uoc3RydWN0IGlkciAqaWRwLCB2b2lkICpwdHIsIGludCBpZCk7CiB2b2lkIGlkcl9yZW1vdmUoc3RydWN0IGlkciAqaWRwLCBpbnQgaWQpOwogdm9pZCBpZHJfcmVtb3ZlX2FsbChzdHJ1Y3QgaWRyICppZHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IGQyZTNjYmYuLjc3MjE0ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2RlZmluZSBlY2FwX2VpbV9zdXBwb3J0KGUpCSgoZSA+PiA0KSAmIDB4MSkKICNkZWZpbmUgZWNhcF9pcl9zdXBwb3J0KGUpCSgoZSA+PiAzKSAmIDB4MSkKICNkZWZpbmUgZWNhcF9tYXhfaGFuZGxlX21hc2soZSkgKChlID4+IDIwKSAmIDB4ZikKLQorI2RlZmluZSBlY2FwX3NjX3N1cHBvcnQoZSkJKChlID4+IDcpICYgMHgxKSAvKiBTbm9vcGluZyBDb250cm9sICovCiAKIC8qIElPVExCX1JFRyAqLwogI2RlZmluZSBETUFfVExCX0ZMVVNIX0dSQU5VX09GRlNFVCAgNjAKQEAgLTI5Miw2ICsyOTIsOCBAQAogCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLwogCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KIAlpbnQJCWFnYXc7IC8qIGFnYXcgb2YgdGhpcyBpb21tdSAqLworCXVuc2lnbmVkIGludCAJaXJxOworCXVuc2lnbmVkIGNoYXIgCW5hbWVbMTNdOyAgICAvKiBEZXZpY2UgTmFtZSAqLwogCiAjaWZkZWYgQ09ORklHX0RNQVIKIAl1bnNpZ25lZCBsb25nIAkqZG9tYWluX2lkczsgLyogYml0bWFwIG9mIGRvbWFpbnMgKi8KQEAgLTI5OSw4ICszMDEsNiBAQAogCXNwaW5sb2NrX3QJbG9jazsgLyogcHJvdGVjdCBjb250ZXh0LCBkb21haW4gaWRzICovCiAJc3RydWN0IHJvb3RfZW50cnkgKnJvb3RfZW50cnk7IC8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCi0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBjaGFyIG5hbWVbN107ICAgIC8qIERldmljZSBOYW1lICovCiAJc3RydWN0IGlvbW11X2ZsdXNoIGZsdXNoOwogI2VuZGlmCiAJc3RydWN0IHFfaW52YWwgICpxaTsgICAgICAgICAgICAvKiBRdWV1ZWQgaW52YWxpZGF0aW9uIGluZm8gKi8KQEAgLTMyMSw2ICszMjEsNyBAQAogZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpOwogZXh0ZXJuIHZvaWQgZnJlZV9pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIGV4dGVybiBpbnQgZG1hcl9lbmFibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gdm9pZCBkbWFyX2Rpc2FibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiBleHRlcm4gdm9pZCBxaV9nbG9iYWxfaWVjKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwogCiBleHRlcm4gaW50IHFpX2ZsdXNoX2NvbnRleHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGRpZCwgdTE2IHNpZCwKQEAgLTMzMSwxMSArMzMyLDQgQEAKIAogZXh0ZXJuIGludCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiAKLWV4dGVybiB2b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqLCBnZnBfdCk7Ci1leHRlcm4gdm9pZCBpbnRlbF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotZXh0ZXJuIGRtYV9hZGRyX3QgaW50ZWxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIHBoeXNfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci1leHRlcm4gdm9pZCBpbnRlbF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMGM5Y2I2My4uYzY4YmZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0xMTcsNiArMTE3LDE1IEBACiBleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKKy8qIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFyZSBmb3IgdGhlIGNvcmUga2VybmVsIHVzZSBvbmx5LiAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF9kZXZpY2VfaXJxcyh2b2lkKTsKK2V4dGVybiB2b2lkIHJlc3VtZV9kZXZpY2VfaXJxcyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK2V4dGVybiBpbnQgY2hlY2tfd2FrZXVwX2lycXModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfd2FrZXVwX2lycXModm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpCiAKIGV4dGVybiBjcHVtYXNrX3Zhcl90IGlycV9kZWZhdWx0X2FmZmluaXR5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pb21tdS5oCmluZGV4IDhhN2JmYjEuLjNhZjRmZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogI2RlZmluZSBJT01NVV9SRUFECSgxKQogI2RlZmluZSBJT01NVV9XUklURQkoMikKKyNkZWZpbmUgSU9NTVVfQ0FDSEUJKDQpIC8qIERNQSBjYWNoZSBjb2hlcmVuY3kgKi8KIAogc3RydWN0IGRldmljZTsKIApAQCAtMjgsNiArMjksOCBAQAogCXZvaWQgKnByaXY7CiB9OwogCisjZGVmaW5lIElPTU1VX0NBUF9DQUNIRV9DT0hFUkVOQ1kJMHgxCisKIHN0cnVjdCBpb21tdV9vcHMgewogCWludCAoKmRvbWFpbl9pbml0KShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pOwogCXZvaWQgKCpkb21haW5fZGVzdHJveSkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTsKQEAgLTM5LDYgKzQyLDggQEAKIAkJICAgICAgc2l6ZV90IHNpemUpOwogCXBoeXNfYWRkcl90ICgqaW92YV90b19waHlzKShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgaW92YSk7CisJaW50ICgqZG9tYWluX2hhc19jYXApKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2FwKTsKIH07CiAKICNpZmRlZiBDT05GSUdfSU9NTVVfQVBJCkBAIC01Nyw2ICs2Miw4IEBACiAJCQkgICAgICBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gcGh5c19hZGRyX3QgaW9tbXVfaW92YV90b19waHlzKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGlvdmEpOworZXh0ZXJuIGludCBpb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJdW5zaWduZWQgbG9uZyBjYXApOwogCiAjZWxzZSAvKiBDT05GSUdfSU9NTVVfQVBJICovCiAKQEAgLTEwNyw2ICsxMTQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZG9tYWluX2hhc19jYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJCSB1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19JT01NVV9BUEkgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfSU9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCmluZGV4IDYyYjczNjYuLmY3YzljNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKQEAgLTIzMCw2ICsyMzAsNiBAQAogICAgYXV0b21hdGljYWxseSBiZSBkc3Ryb3llZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGVzdHJveWVkLiAqLwogaW50IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KGlwbWlfc21pX3Qgc21pLCBjaGFyICpuYW1lLAogCQkJICAgIHJlYWRfcHJvY190ICpyZWFkX3Byb2MsCi0JCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCQkJICAgIHZvaWQgKmRhdGEpOwogCiAjZW5kaWYgLyogX19MSU5VWF9JUE1JX1NNSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA5YzYyZmJlLi45NzQ4OTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTY3LDYgKzY3LDcgQEAKICNkZWZpbmUgSVJRX1NQVVJJT1VTX0RJU0FCTEVECTB4MDA4MDAwMDAJLyogSVJRIHdhcyBkaXNhYmxlZCBieSB0aGUgc3B1cmlvdXMgdHJhcCAqLwogI2RlZmluZSBJUlFfTU9WRV9QQ05UWFQJCTB4MDEwMDAwMDAJLyogSVJRIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogI2RlZmluZSBJUlFfQUZGSU5JVFlfU0VUCTB4MDIwMDAwMDAJLyogSVJRIGFmZmluaXR5IHdhcyBzZXQgZnJvbSB1c2Vyc3BhY2UqLworI2RlZmluZSBJUlFfU1VTUEVOREVECQkweDA0MDAwMDAwCS8qIElSUSBoYXMgZ29uZSB0aHJvdWdoIHN1c3BlbmQgc2VxdWVuY2UgKi8KIAogI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXZ0di5oIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKaW5kZXggZjI3MjAyOC4uMDYyZDIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKQEAgLTYwLDEwICs2MCwxMCBAQAogCiAjZGVmaW5lIElWVFZfSU9DX0RNQV9GUkFNRSAgX0lPVyAoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2X2RtYV9mcmFtZSkKIAotLyogVGhlc2UgYXJlIHRoZSBWQkkgdHlwZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGVtYmVkZGVkIFZCSSBwcml2YXRlIHBhY2tldHMuICovCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfQ0FQVElPTl81MjUgICAgKDQpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfV1NTXzYyNSAgICAgICAgKDUpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgKDcpCisvKiBEZXByZWNhdGVkIGRlZmluZXM6IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBkZWZpbmVzIGZyb20gdmlkZW9kZXYyLmggKi8KKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9URUxFVEVYVF9CICAgICBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQgorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX0NBUFRJT05fNTI1ICAgIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNQorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1CisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUwogCiAjZW5kaWYgLyogX0xJTlVYX0lWVFZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggZThjYTY4MS4uNTNhZTQzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC01NTIsNiArNTUyLDExIEBACiAJICovCiAJaW50IHRfaGFuZGxlX2NvdW50OwogCisJLyoKKwkgKiBUaGlzIHRyYW5zYWN0aW9uIGlzIGJlaW5nIGZvcmNlZCBhbmQgc29tZSBwcm9jZXNzIGlzCisJICogd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoLgorCSAqLworCWludCB0X3N5bmNocm9ub3VzX2NvbW1pdDoxOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDRkMjQ4YjMuLjg4MTVhMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC02NDksNiArNjQ5LDEyIEBACiAJaW50IHRfaGFuZGxlX2NvdW50OwogCiAJLyoKKwkgKiBUaGlzIHRyYW5zYWN0aW9uIGlzIGJlaW5nIGZvcmNlZCBhbmQgc29tZSBwcm9jZXNzIGlzCisJICogd2FpdGluZyBmb3IgaXQgdG8gZmluaXNoLgorCSAqLworCWludCB0X3N5bmNocm9ub3VzX2NvbW1pdDoxOworCisJLyoKIAkgKiBGb3IgdXNlIGJ5IHRoZSBmaWxlc3lzdGVtIHRvIHN0b3JlIGZzLXNwZWNpZmljIGRhdGEKIAkgKiBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhbnNhY3Rpb24KIAkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDkxNDkxOGEuLjU1NmQ3ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMjQyLDYgKzI0Miw3IEBACiBleHRlcm4gaW50IHByaW50a19yYXRlbGltaXQodm9pZCk7CiBleHRlcm4gYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJCSAgIHVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKTsKK3ZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgYXJncykKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSk7CkBAIC0yNTMsNiArMjU0LDkgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLCBcCiAJCQkJCSAgdW5zaWduZWQgaW50IGludGVydmFsX21zZWMpCVwKIAkJeyByZXR1cm4gZmFsc2U7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpCit7Cit9CiAjZW5kaWYKIAogZXh0ZXJuIGludCBwcmludGtfbmVlZHNfY3B1KGludCBjcHUpOwpAQCAtMzUzLDYgKzM1Nyw4IEBACiAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfaW5mbyhmbXQsIC4uLikgXAogICAgICAgICBwcmludGsoS0VSTl9JTkZPIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9jb250KGZtdCwgLi4uKSBcCisJcHJpbnRrKEtFUk5fQ09OVCBmbXQsICMjX19WQV9BUkdTX18pCiAKIC8qIElmIHlvdSBhcmUgd3JpdGluZyBhIGRyaXZlciwgcGxlYXNlIHVzZSBkZXZfZGJnIGluc3RlYWQgKi8KICNpZiBkZWZpbmVkKERFQlVHKQpAQCAtMzc5LDE4ICszODUsNiBAQAogCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVszXQogI2RlZmluZSBOSVBRVUFEX0ZNVCAiJXUuJXUuJXUuJXUiCiAKLSNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLSNkZWZpbmUgSElQUVVBRChhZGRyKSBcCi0JKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzNdLCBcCi0JKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzJdLCBcCi0JKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzFdLCBcCi0JKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzBdCi0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLSNkZWZpbmUgSElQUVVBRAlOSVBRVUFECi0jZWxzZQotI2Vycm9yICJQbGVhc2UgZml4IGFzbS9ieXRlb3JkZXIuaCIKLSNlbmRpZiAvKiBfX0xJVFRMRV9FTkRJQU4gKi8KLQogLyoKICAqIG1pbigpL21heCgpL2NsYW1wKCkgbWFjcm9zIHRoYXQgYWxzbyBkbwogICogc3RyaWN0IHR5cGUtY2hlY2tpbmcuLiBTZWUgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDIzYmYwMmYuLmRhNWE1YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC0yMCw0MyArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CiAKIC8qCi0gKiBMb2NrLWNsYXNzIHVzYWdlLXN0YXRlIGJpdHM6CisgKiBXZSdkIHJhdGhlciBub3QgZXhwb3NlIGtlcm5lbC9sb2NrZGVwX3N0YXRlcy5oIHRoaXMgd2lkZSwgYnV0IHdlIGRvIG5lZWQKKyAqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc3RhdGVzLi4uIDotKAogICovCi1lbnVtIGxvY2tfdXNhZ2VfYml0Ci17Ci0JTE9DS19VU0VEID0gMCwKLQlMT0NLX1VTRURfSU5fSEFSRElSUSwKLQlMT0NLX1VTRURfSU5fU09GVElSUSwKLQlMT0NLX0VOQUJMRURfU09GVElSUVMsCi0JTE9DS19FTkFCTEVEX0hBUkRJUlFTLAotCUxPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsCi0JTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCwKLQlMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCwKLQlMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCwKLQlMT0NLX1VTQUdFX1NUQVRFUwotfTsKLQotLyoKLSAqIFVzYWdlLXN0YXRlIGJpdG1hc2tzOgotICovCi0jZGVmaW5lIExPQ0tGX1VTRUQJCQkoMSA8PCBMT0NLX1VTRUQpCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fSEFSRElSUQkJKDEgPDwgTE9DS19VU0VEX0lOX0hBUkRJUlEpCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fU09GVElSUQkJKDEgPDwgTE9DS19VU0VEX0lOX1NPRlRJUlEpCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSEFSRElSUVMJCSgxIDw8IExPQ0tfRU5BQkxFRF9IQVJESVJRUykKLSNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRUwkJKDEgPDwgTE9DS19FTkFCTEVEX1NPRlRJUlFTKQotCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSVJRUyAoTE9DS0ZfRU5BQkxFRF9IQVJESVJRUyB8IExPQ0tGX0VOQUJMRURfU09GVElSUVMpCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fSVJRIChMT0NLRl9VU0VEX0lOX0hBUkRJUlEgfCBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCi0KLSNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQJKDEgPDwgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQJKDEgPDwgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFECSgxIDw8IExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKQotI2RlZmluZSBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQJKDEgPDwgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCi0KLSNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9JUlFTX1JFQUQgXAotCQkoTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFEIHwgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX0lSUV9SRUFEIFwKLQkJKExPQ0tGX1VTRURfSU5fSEFSRElSUV9SRUFEIHwgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpCisjZGVmaW5lIFhYWF9MT0NLX1VTQUdFX1NUQVRFUwkJKDErMyo0KQogCiAjZGVmaW5lIE1BWF9MT0NLREVQX1NVQkNMQVNTRVMJCThVTAogCkBAIC05Nyw3ICs2NCw3IEBACiAJICogSVJRL3NvZnRpcnEgdXNhZ2UgdHJhY2tpbmcgYml0czoKIAkgKi8KIAl1bnNpZ25lZCBsb25nCQkJdXNhZ2VfbWFzazsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UJCXVzYWdlX3RyYWNlc1tMT0NLX1VTQUdFX1NUQVRFU107CisJc3RydWN0IHN0YWNrX3RyYWNlCQl1c2FnZV90cmFjZXNbWFhYX0xPQ0tfVVNBR0VfU1RBVEVTXTsKIAogCS8qCiAJICogVGhlc2UgZmllbGRzIHJlcHJlc2VudCBhIGRpcmVjdGVkIGdyYXBoIG9mIGxvY2sgZGVwZW5kZW5jaWVzLApAQCAtMzI0LDcgKzI5MSwxMSBAQAogCWxvY2tfc2V0X2NsYXNzKGxvY2ssIGxvY2stPm5hbWUsIGxvY2stPmtleSwgc3ViY2xhc3MsIGlwKTsKIH0KIAotIyBkZWZpbmUgSU5JVF9MT0NLREVQCQkJCS5sb2NrZGVwX3JlY3Vyc2lvbiA9IDAsCitleHRlcm4gdm9pZCBsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgbG9ja2RlcF9jbGVhcl9jdXJyZW50X3JlY2xhaW1fc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCBsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IG1hc2spOworCisjIGRlZmluZSBJTklUX0xPQ0tERVAJCQkJLmxvY2tkZXBfcmVjdXJzaW9uID0gMCwgLmxvY2tkZXBfcmVjbGFpbV9nZnAgPSAwLAogCiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKQkoZGVidWdfbG9ja3MgPyAodHNrKS0+bG9ja2RlcF9kZXB0aCA6IDApCiAKQEAgLTM0Miw2ICszMTMsOSBAQAogIyBkZWZpbmUgbG9ja19yZWxlYXNlKGwsIG4sIGkpCQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgbG9ja19zZXRfY2xhc3MobCwgbiwgaywgcywgaSkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tfc2V0X3N1YmNsYXNzKGwsIHMsIGkpCQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoZykJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9jbGVhcl9jdXJyZW50X3JlY2xhaW1fc3RhdGUoKQlkbyB7IH0gd2hpbGUgKDApCisjIGRlZmluZSBsb2NrZGVwX3RyYWNlX2FsbG9jKGcpCQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgbG9ja2RlcF9pbml0KCkJCQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgbG9ja2RlcF9pbmZvKCkJCQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgbG9ja2RlcF9pbml0X21hcChsb2NrLCBuYW1lLCBrZXksIHN1YikgXApAQCAtMzkwLDYgKzM2NCwyMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0xPQ0tfU1RBVCAqLwogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKworLyoKKyAqIE9uIGxvY2tkZXAgd2UgZG9udCB3YW50IHRoZSBoYW5kLWNvZGVkIGlycS1lbmFibGUgb2YKKyAqIF9yYXdfKl9sb2NrX2ZsYWdzKCkgY29kZSwgYmVjYXVzZSBsb2NrZGVwIGFzc3VtZXMKKyAqIHRoYXQgaW50ZXJydXB0cyBhcmUgbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZToKKyAqLworI2RlZmluZSBMT0NLX0NPTlRFTkRFRF9GTEFHUyhfbG9jaywgdHJ5LCBsb2NrLCBsb2NrZmwsIGZsYWdzKSBcCisJTE9DS19DT05URU5ERUQoKF9sb2NrKSwgKHRyeSksIChsb2NrKSkKKworI2Vsc2UgLyogQ09ORklHX0xPQ0tERVAgKi8KKworI2RlZmluZSBMT0NLX0NPTlRFTkRFRF9GTEFHUyhfbG9jaywgdHJ5LCBsb2NrLCBsb2NrZmwsIGZsYWdzKSBcCisJbG9ja2ZsKChfbG9jayksIChmbGFncykpCisKKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqLworCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKIGV4dGVybiB2b2lkIGVhcmx5X2luaXRfaXJxX2xvY2tfY2xhc3Modm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb29wLmggYi9pbmNsdWRlL2xpbnV4L2xvb3AuaAppbmRleCA2ZmZkNmRiLi40MDcyNTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvb3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvb3AuaApAQCAtMTYwLDUgKzE2MCw2IEBACiAjZGVmaW5lIExPT1BfU0VUX1NUQVRVUzY0CTB4NEMwNAogI2RlZmluZSBMT09QX0dFVF9TVEFUVVM2NAkweDRDMDUKICNkZWZpbmUgTE9PUF9DSEFOR0VfRkQJCTB4NEMwNgorI2RlZmluZSBMT09QX1NFVF9DQVBBQ0lUWQkweDRDMDcKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDMyNmY0NWMuLjE4MTQ2YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC04OCw5ICs4OCw2IEBACiAvKgogICogRm9yIG1lbW9yeSByZWNsYWltLgogICovCi1leHRlcm4gaW50IG1lbV9jZ3JvdXBfY2FsY19tYXBwZWRfcmF0aW8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Ci1leHRlcm4gbG9uZyBtZW1fY2dyb3VwX3JlY2xhaW1faW1iYWxhbmNlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwotCiBleHRlcm4gaW50IG1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7CiBleHRlcm4gdm9pZCBtZW1fY2dyb3VwX25vdGVfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJCWludCBwcmlvcml0eSk7CkBAIC0xMDQsNiArMTAxLDggQEAKIAkJCQkJCSAgICAgIHN0cnVjdCB6b25lICp6b25lKTsKIHN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCoKIG1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fc3RhdF9mcm9tX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgbWVtX2Nncm91cF9wcmludF9vb21faW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCisJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQCiBleHRlcm4gaW50IGRvX3N3YXBfYWNjb3VudDsKQEAgLTIwOSwxNiArMjA4LDYgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3JlY2xhaW1faW1iYWxhbmNlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlyZXR1cm4gMDsKQEAgLTI3MCw2ICsyNTksMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCittZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9NRU1fQ09OVCAqLwogCiAjZW5kaWYgLyogX0xJTlVYX01FTUNPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKaW5kZXggM2ZkYzEwOC4uNDI3NjdkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCkBAIC05OSw0ICs5OSwxNSBAQAogI2RlZmluZSBob3RwbHVnX21lbW9yeV9ub3RpZmllcihmbiwgcHJpKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorLyoKKyAqICdzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yJyBpcyBhIGdlbmVyaWMgaW50ZXJmYWNlIHRvIHByb3ZpZGUKKyAqIGluLWtlcm5lbCBhY2Nlc3MgdG8gcGVyc2lzdGVudCBtZW1vcnkgc3VjaCBhcyBpMmMgb3IgU1BJIEVFUFJPTXMKKyAqLworc3RydWN0IG1lbW9yeV9hY2Nlc3NvciB7CisJc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKiwgY2hhciAqYnVmLCBvZmZfdCBvZmZzZXQsCisJCQlzaXplX3QgY291bnQpOworCXNzaXplX3QgKCp3cml0ZSkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqLCBjb25zdCBjaGFyICpidWYsCisJCQkgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpOworfTsKKwogI2VuZGlmIC8qIF9MSU5VWF9NRU1PUllfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAwNjVjZGY4Li5iZmYxZjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDQsNiArMTA0LDcgQEAKICNkZWZpbmUgVk1fQ0FOX05PTkxJTkVBUiAweDA4MDAwMDAwCS8qIEhhcyAtPmZhdWx0ICYgZG9lcyBub25saW5lYXIgcGFnZXMgKi8KICNkZWZpbmUgVk1fTUlYRURNQVAJMHgxMDAwMDAwMAkvKiBDYW4gY29udGFpbiAic3RydWN0IHBhZ2UiIGFuZCBwdXJlIFBGTiBwYWdlcyAqLwogI2RlZmluZSBWTV9TQU8JCTB4MjAwMDAwMDAJLyogU3Ryb25nIEFjY2VzcyBPcmRlcmluZyAocG93ZXJwYykgKi8KKyNkZWZpbmUgVk1fUEZOX0FUX01NQVAJMHg0MDAwMDAwMAkvKiBQRk5NQVAgdm1hIHRoYXQgaXMgZnVsbHkgbWFwcGVkIGF0IG1tYXAgdGltZSAqLwogCiAjaWZuZGVmIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJCS8qIGFyY2ggY2FuIG92ZXJyaWRlIHRoaXMgKi8KICNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUyBWTV9EQVRBX0RFRkFVTFRfRkxBR1MKQEAgLTEzNCw2ICsxMzUsNyBAQAogCiAjZGVmaW5lIEZBVUxUX0ZMQUdfV1JJVEUJMHgwMQkvKiBGYXVsdCB3YXMgYSB3cml0ZSBhY2Nlc3MgKi8KICNkZWZpbmUgRkFVTFRfRkxBR19OT05MSU5FQVIJMHgwMgkvKiBGYXVsdCB3YXMgdmlhIGEgbm9ubGluZWFyIG1hcHBpbmcgKi8KKyNkZWZpbmUgRkFVTFRfRkxBR19NS1dSSVRFCTB4MDQJLyogRmF1bHQgd2FzIG1rd3JpdGUgb2YgZXhpc3RpbmcgcHRlICovCiAKIC8qCiAgKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IHg4NiBQQVQgY29kZSB0byBpZGVudGlmeSBhIHBmbiBtYXBwaW5nIHRoYXQgaXMKQEAgLTE0NSw3ICsxNDcsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBpc19saW5lYXJfcGZuX21hcHBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JcmV0dXJuICgodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkgJiYgdm1hLT52bV9wZ29mZik7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOX0FUX01NQVApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19wZm5fbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTE4Niw3ICsxODgsNyBAQAogCiAJLyogbm90aWZpY2F0aW9uIHRoYXQgYSBwcmV2aW91c2x5IHJlYWQtb25seSBwYWdlIGlzIGFib3V0IHRvIGJlY29tZQogCSAqIHdyaXRhYmxlLCBpZiBhbiBlcnJvciBpcyByZXR1cm5lZCBpdCB3aWxsIGNhdXNlIGEgU0lHQlVTICovCi0JaW50ICgqcGFnZV9ta3dyaXRlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworCWludCAoKnBhZ2VfbWt3cml0ZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKIAogCS8qIGNhbGxlZCBieSBhY2Nlc3NfcHJvY2Vzc192bSB3aGVuIGdldF91c2VyX3BhZ2VzKCkgZmFpbHMsIHR5cGljYWxseQogCSAqIGZvciB1c2UgYnkgc3BlY2lhbCBWTUFzIHRoYXQgY2FuIHN3aXRjaCBiZXR3ZWVuIG1lbW9yeSBhbmQgaGFyZHdhcmUKQEAgLTgzMyw2ICs4MzUsNyBAQAogaW50IF9fc2V0X3BhZ2VfZGlydHlfbm9fd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIGFjY291bnRfcGFnZV9kaXJ0aWVkKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CiBpbnQgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IHNldF9wYWdlX2RpcnR5X2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpOwogaW50IGNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHN0cnVjdCBwYWdlICpwYWdlKTsKQEAgLTEwNzYsNyArMTA3OSw3IEBACiAjZW5kaWYKIAogLyogbm9tbXUuYyAqLwotZXh0ZXJuIGF0b21pY190IG1tYXBfcGFnZXNfYWxsb2NhdGVkOworZXh0ZXJuIGF0b21pY19sb25nX3QgbW1hcF9wYWdlc19hbGxvY2F0ZWQ7CiAKIC8qIHByaW9fdHJlZS5jICovCiB2b2lkIHZtYV9wcmlvX3RyZWVfYWRkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm9sZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggZDg0ZmViNy4uMGU4MGUyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWRlYnVnLWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKQEAgLTk0LDYgKzk1LDkgQEAKIAl2b2lkICp2aXJ0dWFsOwkJCS8qIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgKE5VTEwgaWYKIAkJCQkJICAgbm90IGttYXBwZWQsIGllLiBoaWdobWVtKSAqLwogI2VuZGlmIC8qIFdBTlRfUEFHRV9WSVJUVUFMICovCisjaWZkZWYgQ09ORklHX1dBTlRfUEFHRV9ERUJVR19GTEFHUworCXVuc2lnbmVkIGxvbmcgZGVidWdfZmxhZ3M7CS8qIFVzZSBhdG9taWMgYml0b3BzIG9uIHRoaXMgKi8KKyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCA0ZTQ1NzI1Li4zZTc2MTVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC0xOTIsNSArMTkyLDEwIEBACiAJd2FrZV91cF9wcm9jZXNzKGhvc3QtPnNkaW9faXJxX3RocmVhZCk7CiB9CiAKK3N0cnVjdCByZWd1bGF0b3I7CisKK2ludCBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSk7CitpbnQgbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKHN0cnVjdCByZWd1bGF0b3IgKnN1cHBseSwgdW5zaWduZWQgc2hvcnQgdmRkX2JpdCk7CisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAxYWNhNmNlLi4yNmVmMjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTgwNiw2ICs4MDYsMTQgQEAKIAkgICAgIHpvbmU7CQkJCQlcCiAJICAgICB6b25lID0gbmV4dF96b25lKHpvbmUpKQogCisjZGVmaW5lIGZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpCQkgICAgICAgIFwKKwlmb3IgKHpvbmUgPSAoZmlyc3Rfb25saW5lX3BnZGF0KCkpLT5ub2RlX3pvbmVzOyBcCisJICAgICB6b25lOwkJCQkJXAorCSAgICAgem9uZSA9IG5leHRfem9uZSh6b25lKSkJCQlcCisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCQlcCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8JCVwKKwkJZWxzZQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB6b25lICp6b25lbGlzdF96b25lKHN0cnVjdCB6b25lcmVmICp6b25lcmVmKQogewogCXJldHVybiB6b25lcmVmLT56b25lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaAppbmRleCA4MzBiYmNkLi4zYTA1OTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaApAQCAtMjIsNiArMjIsOCBAQAogCWludCBldmVudDsKIH07CiAKK3N0cnVjdCBmc19zdHJ1Y3Q7CisKIGV4dGVybiBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModW5zaWduZWQgbG9uZywgc3RydWN0IG1udF9uYW1lc3BhY2UgKiwKIAkJc3RydWN0IGZzX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9fcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcGFnZS5oIGIvaW5jbHVkZS9saW51eC9tcGFnZS5oCmluZGV4IDVjNDI4MjEuLjA2OGEwYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXBhZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21wYWdlLmgKQEAgLTExLDIxICsxMSwxMSBAQAogICovCiAjaWZkZWYgQ09ORklHX0JMT0NLCiAKLXN0cnVjdCBtcGFnZV9kYXRhIHsKLQlzdHJ1Y3QgYmlvICpiaW87Ci0Jc2VjdG9yX3QgbGFzdF9ibG9ja19pbl9iaW87Ci0JZ2V0X2Jsb2NrX3QgKmdldF9ibG9jazsKLQl1bnNpZ25lZCB1c2Vfd3JpdGVwYWdlOwotfTsKLQogc3RydWN0IHdyaXRlYmFja19jb250cm9sOwogCi1zdHJ1Y3QgYmlvICptcGFnZV9iaW9fc3VibWl0KGludCBydywgc3RydWN0IGJpbyAqYmlvKTsKIGludCBtcGFnZV9yZWFkcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAogCQkJCXVuc2lnbmVkIG5yX3BhZ2VzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwogaW50IG1wYWdlX3JlYWRwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwotaW50IF9fbXBhZ2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJICAgICAgdm9pZCAqZGF0YSk7CiBpbnQgbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGdldF9ibG9ja190IGdldF9ibG9jayk7CiBpbnQgbXBhZ2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2kuaCBiL2luY2x1ZGUvbGludXgvbXNpLmgKaW5kZXggZDJiOGExZS4uNjk5MWFiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zaS5oCkBAIC0yMCwyMCArMjAsMjMgQEAKIAogc3RydWN0IG1zaV9kZXNjIHsKIAlzdHJ1Y3QgewotCQlfX3U4CXR5cGUJOiA1OyAJLyogezA6IHVudXNlZCwgNWg6TVNJLCAxMWg6TVNJLVh9ICovCisJCV9fdTgJaXNfbXNpeAk6IDE7CisJCV9fdTgJbXVsdGlwbGU6IDM7CS8qIGxvZzIgbnVtYmVyIG9mIG1lc3NhZ2VzICovCiAJCV9fdTgJbWFza2JpdAk6IDE7IAkvKiBtYXNrLXBlbmRpbmcgYml0IHN1cHBvcnRlZCA/ICAgKi8KLQkJX191OAltYXNrZWQJOiAxOwogCQlfX3U4CWlzXzY0CTogMTsJLyogQWRkcmVzcyBzaXplOiAwPTMyYml0IDE9NjRiaXQgICovCiAJCV9fdTgJcG9zOwkgCS8qIExvY2F0aW9uIG9mIHRoZSBtc2kgY2FwYWJpbGl0eSAqLwotCQlfX3UzMgltYXNrYml0c19tYXNrOyAgLyogbWFzayBiaXRzIG1hc2sgKi8KIAkJX191MTYJZW50cnlfbnI7ICAgIAkvKiBzcGVjaWZpYyBlbmFibGVkIGVudHJ5IAkgICovCiAJCXVuc2lnbmVkIGRlZmF1bHRfaXJxOwkvKiBkZWZhdWx0IHByZS1hc3NpZ25lZCBpcnEJICAqLwotCX1tc2lfYXR0cmliOworCX0gbXNpX2F0dHJpYjsKIAorCXUzMiBtYXNrZWQ7CQkJLyogbWFzayBiaXRzICovCiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQl2b2lkIF9faW9tZW0gKm1hc2tfYmFzZTsKKwl1bmlvbiB7CisJCXZvaWQgX19pb21lbSAqbWFza19iYXNlOworCQl1OCBtYXNrX3BvczsKKwl9OwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKIAkvKiBMYXN0IHNldCBNU0kgbWVzc2FnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdXRleC5oIGIvaW5jbHVkZS9saW51eC9tdXRleC5oCmluZGV4IDdhMGU1YzQuLjMwNjllYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKQEAgLTUwLDggKzUwLDEwIEBACiAJYXRvbWljX3QJCWNvdW50OwogCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXdhaXRfbGlzdDsKLSNpZmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX01VVEVYRVMpIHx8IGRlZmluZWQoQ09ORklHX1NNUCkKIAlzdHJ1Y3QgdGhyZWFkX2luZm8JKm93bmVyOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKIAljb25zdCBjaGFyIAkJKm5hbWU7CiAJdm9pZAkJCSptYWdpYzsKICNlbmRpZgpAQCAtNjgsNyArNzAsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CiAjaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKLQlzdHJ1Y3QgbXV0ZXgJCSpsb2NrOwogCXZvaWQJCQkqbWFnaWM7CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IGRlOTkwMjUuLjI1MjQyNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xOCw3ICsxOCw3IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAl2b2lkICgqcnhfaG9vaykoc3RydWN0IG5ldHBvbGwgKiwgaW50LCBjaGFyICosIGludCk7CiAKLQl1MzIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKKwlfX2JlMzIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7CiAJdTggcmVtb3RlX21hY1tFVEhfQUxFTl07CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggOGNjODgwNy4uZmRmZmI0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC0xNjYsOCArMTY2LDcgQEAKIAkgKi8KIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CW5mc19wYWdlX3RyZWU7CiAKLQl1bnNpZ25lZCBsb25nCQluY29tbWl0LAotCQkJCW5wYWdlczsKKwl1bnNpZ25lZCBsb25nCQlucGFnZXM7CiAKIAkvKiBPcGVuIGNvbnRleHRzIGZvciBzaGFyZWQgbW1hcCB3cml0ZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fZmlsZXM7CkBAIC0xODYsNiArMTg1LDkgQEAKIAlmbW9kZV90CQkJIGRlbGVnYXRpb25fc3RhdGU7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQlyd3NlbTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0Ki8KKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmZzY2FjaGU7CisjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUJCXZmc19pbm9kZTsKIH07CiAKQEAgLTIwNyw2ICsyMDksOSBAQAogI2RlZmluZSBORlNfSU5PX1NUQUxFCQkoMSkJCS8qIHBvc3NpYmxlIHN0YWxlIGlub2RlICovCiAjZGVmaW5lIE5GU19JTk9fQUNMX0xSVV9TRVQJKDIpCQkvKiBJbm9kZSBpcyBvbiB0aGUgTFJVIGxpc3QgKi8KICNkZWZpbmUgTkZTX0lOT19NT1VOVFBPSU5UCSgzKQkJLyogaW5vZGUgaXMgcmVtb3RlIG1vdW50cG9pbnQgKi8KKyNkZWZpbmUgTkZTX0lOT19GTFVTSElORwkoNCkJCS8qIGlub2RlIGlzIGZsdXNoaW5nIG91dCBkYXRhICovCisjZGVmaW5lIE5GU19JTk9fRlNDQUNIRQkJKDUpCQkvKiBpbm9kZSBjYW4gYmUgY2FjaGVkIGJ5IEZTLUNhY2hlICovCisjZGVmaW5lIE5GU19JTk9fRlNDQUNIRV9MT0NLCSg2KQkJLyogRlMtQ2FjaGUgY29va2llIG1hbmFnZW1lbnQgbG9jayAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW5vZGUgKk5GU19JKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0yNjAsNiArMjY1LDExIEBACiAJcmV0dXJuIHRlc3RfYml0KE5GU19JTk9fU1RBTEUsICZORlNfSShpbm9kZSktPmZsYWdzKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgTkZTX0ZTQ0FDSEUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoTkZTX0lOT19GU0NBQ0hFLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgX191NjQgTkZTX0ZJTEVJRChjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiBORlNfSShpbm9kZSktPmZpbGVpZDsKQEAgLTUwNiw2ICs1MTYsOCBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICosIHVuc2lnbmVkKTsKIGV4dGVybiBpbnQgIG5mc19yZWFkcGFnZV9yZXN1bHQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOwogZXh0ZXJuIHZvaWQgbmZzX3JlYWRkYXRhX3JlbGVhc2Uodm9pZCAqZGF0YSk7CitleHRlcm4gaW50ICBuZnNfcmVhZHBhZ2VfYXN5bmMoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKiwgc3RydWN0IGlub2RlICosCisJCQkgICAgICAgc3RydWN0IHBhZ2UgKik7CiAKIC8qCiAgKiBBbGxvY2F0ZSBuZnNfcmVhZF9kYXRhIHN0cnVjdHVyZXMKQEAgLTU4Myw2ICs1OTUsNyBAQAogI2RlZmluZSBORlNEQkdfQ0FMTEJBQ0sJCTB4MDEwMAogI2RlZmluZSBORlNEQkdfQ0xJRU5UCQkweDAyMDAKICNkZWZpbmUgTkZTREJHX01PVU5UCQkweDA0MDAKKyNkZWZpbmUgTkZTREJHX0ZTQ0FDSEUJCTB4MDgwMAogI2RlZmluZSBORlNEQkdfQUxMCQkweEZGRkYKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDliYjgxYWUuLjZhZDc1OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtNjQsNiArNjQsMTAgQEAKIAljaGFyCQkJY2xfaXBhZGRyWzQ4XTsKIAl1bnNpZ25lZCBjaGFyCQljbF9pZF91bmlxdWlmaWVyOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmZzY2FjaGU7CS8qIGNsaWVudCBpbmRleCBjYWNoZSBjb29raWUgKi8KKyNlbmRpZgogfTsKIAogLyoKQEAgLTk2LDE2ICsxMDAsMjggQEAKIAl1bnNpZ25lZCBpbnQJCWFjZGlybWluOwogCXVuc2lnbmVkIGludAkJYWNkaXJtYXg7CiAJdW5zaWduZWQgaW50CQluYW1lbGVuOworCXVuc2lnbmVkIGludAkJb3B0aW9uczsJLyogZXh0cmEgb3B0aW9ucyBlbmFibGVkIGJ5IG1vdW50ICovCisjZGVmaW5lIE5GU19PUFRJT05fRlNDQUNIRQkweDAwMDAwMDAxCS8qIC0gbG9jYWwgY2FjaGluZyBlbmFibGVkICovCiAKIAlzdHJ1Y3QgbmZzX2ZzaWQJCWZzaWQ7CiAJX191NjQJCQltYXhmaWxlc2l6ZTsJLyogbWF4aW11bSBmaWxlIHNpemUgKi8KIAl1bnNpZ25lZCBsb25nCQltb3VudF90aW1lOwkvKiB3aGVuIHRoaXMgZnMgd2FzIG1vdW50ZWQgKi8KIAlkZXZfdAkJCXNfZGV2OwkJLyogc3VwZXJibG9jayBkZXYgbnVtYmVycyAqLwogCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJc3RydWN0IG5mc19mc2NhY2hlX2tleQkqZnNjYWNoZV9rZXk7CS8qIHVuaXF1ZSBrZXkgZm9yIHN1cGVyYmxvY2sgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmZzY2FjaGU7CS8qIHN1cGVyYmxvY2sgY29va2llICovCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19ORlNfVjQKIAl1MzIJCQlhdHRyX2JpdG1hc2tbMl07LyogVjQgYml0bWFzayByZXByZXNlbnRpbmcgdGhlIHNldAogCQkJCQkJICAgb2YgYXR0cmlidXRlcyBzdXBwb3J0ZWQgb24gdGhpcwogCQkJCQkJICAgZmlsZXN5c3RlbSAqLworCXUzMgkJCWNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2tbMl07CisJCQkJCQkvKiBWNCBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgc3Vic2V0CisJCQkJCQkgICBvZiBjaGFuZ2UgYXR0cmlidXRlLCBzaXplLCBjdGltZQorCQkJCQkJICAgYW5kIG10aW1lIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGJ5CisJCQkJCQkgICB0aGUgc2VydmVyICovCiAJdTMyCQkJYWNsX2JpdG1hc2s7CS8qIFY0IGJpdG1hc2sgcmVwcmVzZW50aW5nIHRoZSBBQ0VzCiAJCQkJCQkgICB0aGF0IGFyZSBzdXBwb3J0ZWQgb24gdGhpcwogCQkJCQkJICAgZmlsZXN5c3RlbSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L25mc19pb3N0YXQuaAppbmRleCAxY2I5YTNmLi42OGIxMGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19pb3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19pb3N0YXQuaApAQCAtMTE2LDQgKzExNiwxNiBAQAogCV9fTkZTSU9TX0NPVU5UU01BWCwKIH07CiAKKy8qCisgKiBORlMgbG9jYWwgY2FjaGluZyBzZXJ2aWNpbmcgY291bnRlcnMKKyAqLworZW51bSBuZnNfc3RhdF9mc2NhY2hlY291bnRlcnMgeworCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfT0ssCisJTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fT0ssCisJTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9GQUlMLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVELAorCV9fTkZTSU9TX0ZTQ0FDSEVNQVgsCit9OworCiAjZW5kaWYJLyogX0xJTlVYX05GU19JT1NUQVQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggNDNhNzEzZi4uYjg5YzM0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTI3LDEyICsyNyw4IEBACiB9CiAKIHN0cnVjdCBuZnNfZmF0dHIgewotCXVuc2lnbmVkIHNob3J0CQl2YWxpZDsJCS8qIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKi8KLQlfX3U2NAkJCXByZV9zaXplOwkvKiBwcmVfb3BfYXR0ci5zaXplCSAgKi8KLQlzdHJ1Y3QgdGltZXNwZWMJCXByZV9tdGltZTsJLyogcHJlX29wX2F0dHIubXRpbWUJICAqLwotCXN0cnVjdCB0aW1lc3BlYwkJcHJlX2N0aW1lOwkvKiBwcmVfb3BfYXR0ci5jdGltZQkgICovCi0JZW51bSBuZnNfZnR5cGUJCXR5cGU7CQkvKiBhbHdheXMgdXNlIE5GU3YyIHR5cGVzICovCi0JX191MzIJCQltb2RlOworCXVuc2lnbmVkIGludAkJdmFsaWQ7CQkvKiB3aGljaCBmaWVsZHMgYXJlIHZhbGlkICovCisJdW1vZGVfdAkJCW1vZGU7CiAJX191MzIJCQlubGluazsKIAlfX3UzMgkJCXVpZDsKIAlfX3UzMgkJCWdpZDsKQEAgLTUyLDE5ICs0OCw1NSBAQAogCXN0cnVjdCB0aW1lc3BlYwkJYXRpbWU7CiAJc3RydWN0IHRpbWVzcGVjCQltdGltZTsKIAlzdHJ1Y3QgdGltZXNwZWMJCWN0aW1lOwotCV9fdTMyCQkJYml0bWFwWzJdOwkvKiBORlN2NCByZXR1cm5lZCBhdHRyaWJ1dGUgYml0bWFwICovCiAJX191NjQJCQljaGFuZ2VfYXR0cjsJLyogTkZTdjQgY2hhbmdlIGF0dHJpYnV0ZSAqLwogCV9fdTY0CQkJcHJlX2NoYW5nZV9hdHRyOy8qIHByZS1vcCBORlN2NCBjaGFuZ2UgYXR0cmlidXRlICovCisJX191NjQJCQlwcmVfc2l6ZTsJLyogcHJlX29wX2F0dHIuc2l6ZQkgICovCisJc3RydWN0IHRpbWVzcGVjCQlwcmVfbXRpbWU7CS8qIHByZV9vcF9hdHRyLm10aW1lCSAgKi8KKwlzdHJ1Y3QgdGltZXNwZWMJCXByZV9jdGltZTsJLyogcHJlX29wX2F0dHIuY3RpbWUJICAqLwogCXVuc2lnbmVkIGxvbmcJCXRpbWVfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZwkJZ2VuY291bnQ7CiB9OwogCi0jZGVmaW5lIE5GU19BVFRSX1dDQwkJMHgwMDAxCQkvKiBwcmUtb3AgV0NDIGRhdGEgICAgKi8KLSNkZWZpbmUgTkZTX0FUVFJfRkFUVFIJCTB4MDAwMgkJLyogcG9zdC1vcCBhdHRyaWJ1dGVzICovCi0jZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1YzCTB4MDAwNAkJLyogTkZTdjMgYXR0cmlidXRlcyAqLwotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNAkweDAwMDgJCS8qIE5GU3Y0IGNoYW5nZSBhdHRyaWJ1dGUgKi8KLSNkZWZpbmUgTkZTX0FUVFJfV0NDX1Y0CQkweDAwMTAJCS8qIHByZS1vcCBjaGFuZ2UgYXR0cmlidXRlICovCi0jZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMCTB4MDAyMAkJLyogTkZTdjQgcmVmZXJyYWwgKi8KKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVFlQRQkJKDFVIDw8IDApCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX01PREUJCSgxVSA8PCAxKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9OTElOSwkJKDFVIDw8IDIpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX09XTkVSCQkoMVUgPDwgMykKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfR1JPVVAJCSgxVSA8PCA0KQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9SREVWCQkoMVUgPDwgNSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfU0laRQkJKDFVIDw8IDYpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUJCSgxVSA8PCA3KQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9CTE9DS1NfVVNFRAkoMVUgPDwgOCkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfU1BBQ0VfVVNFRAkoMVUgPDwgOSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfRlNJRAkJKDFVIDw8IDEwKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9GSUxFSUQJCSgxVSA8PCAxMSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfQVRJTUUJCSgxVSA8PCAxMikKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTVRJTUUJCSgxVSA8PCAxMykKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfQ1RJTUUJCSgxVSA8PCAxNCkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUUJCSgxVSA8PCAxNSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUUJCSgxVSA8PCAxNikKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFCQkoMVUgPDwgMTcpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRQkoMVUgPDwgMTgpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMCSgxVSA8PCAxOSkJLyogTkZTdjQgcmVmZXJyYWwgKi8KKworI2RlZmluZSBORlNfQVRUUl9GQVRUUiAoTkZTX0FUVFJfRkFUVFJfVFlQRSBcCisJCXwgTkZTX0FUVFJfRkFUVFJfTU9ERSBcCisJCXwgTkZTX0FUVFJfRkFUVFJfTkxJTksgXAorCQl8IE5GU19BVFRSX0ZBVFRSX09XTkVSIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9HUk9VUCBcCisJCXwgTkZTX0FUVFJfRkFUVFJfUkRFViBcCisJCXwgTkZTX0FUVFJfRkFUVFJfU0laRSBcCisJCXwgTkZTX0FUVFJfRkFUVFJfRlNJRCBcCisJCXwgTkZTX0FUVFJfRkFUVFJfRklMRUlEIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9BVElNRSBcCisJCXwgTkZTX0FUVFJfRkFUVFJfTVRJTUUgXAorCQl8IE5GU19BVFRSX0ZBVFRSX0NUSU1FKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMiAoTkZTX0FUVFJfRkFUVFIgXAorCQl8IE5GU19BVFRSX0ZBVFRSX0JMT0NLU19VU0VEKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMyAoTkZTX0FUVFJfRkFUVFIgXAorCQl8IE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0IChORlNfQVRUUl9GQVRUUiBcCisJCXwgTkZTX0FUVFJfRkFUVFJfU1BBQ0VfVVNFRCBcCisJCXwgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKQogCiAvKgogICogSW5mbyBvbiB0aGUgZmlsZSBzeXN0ZW0KQEAgLTgzNiw2ICs4NjgsNyBAQAogCWludAkoKmxvY2spKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKIAlpbnQJKCpsb2NrX2NoZWNrX2JvdW5kcykoY29uc3Qgc3RydWN0IGZpbGVfbG9jayAqKTsKIAl2b2lkCSgqY2xlYXJfYWNsX2NhY2hlKShzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZAkoKmNsb3NlX2NvbnRleHQpKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCk7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uc3Byb3h5LmggYi9pbmNsdWRlL2xpbnV4L25zcHJveHkuaAppbmRleCBhZmFkN2RlLi43YjM3MGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25zcHJveHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25zcHJveHkuaApAQCAtOCw2ICs4LDcgQEAKIHN0cnVjdCB1dHNfbmFtZXNwYWNlOwogc3RydWN0IGlwY19uYW1lc3BhY2U7CiBzdHJ1Y3QgcGlkX25hbWVzcGFjZTsKK3N0cnVjdCBmc19zdHJ1Y3Q7CiAKIC8qCiAgKiBBIHN0cnVjdHVyZSB0byBjb250YWluIHBvaW50ZXJzIHRvIGFsbCBwZXItcHJvY2VzcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWRlYnVnLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZGVidWctZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDYzOGZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWRlYnVnLWZsYWdzLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBMSU5VWF9QQUdFX0RFQlVHX0ZMQUdTX0gKKyNkZWZpbmUgIExJTlVYX1BBR0VfREVCVUdfRkxBR1NfSAorCisvKgorICogcGFnZS0+ZGVidWdfZmxhZ3MgYml0czoKKyAqCisgKiBQQUdFX0RFQlVHX0ZMQUdfUE9JU09OIGlzIHNldCBmb3IgcG9pc29uZWQgcGFnZXMuIFRoaXMgaXMgdXNlZCB0bworICogaW1wbGVtZW50IGdlbmVyaWMgZGVidWcgcGFnZWFsbG9jIGZlYXR1cmUuIFRoZSBwYWdlcyBhcmUgZmlsbGVkIHdpdGgKKyAqIHBvaXNvbiBwYXR0ZXJucyBhbmQgc2V0IHRoaXMgZmxhZyBhZnRlciBmcmVlX3BhZ2VzKCkuIFRoZSBwb2lzb25lZAorICogcGFnZXMgYXJlIHZlcmlmaWVkIHdoZXRoZXIgdGhlIHBhdHRlcm5zIGFyZSBub3QgY29ycnVwdGVkIGFuZCBjbGVhcgorICogdGhlIGZsYWcgYmVmb3JlIGFsbG9jX3BhZ2VzKCkuCisgKi8KKworZW51bSBwYWdlX2RlYnVnX2ZsYWdzIHsKKwlQQUdFX0RFQlVHX0ZMQUdfUE9JU09OLAkJLyogUGFnZSBpcyBwb2lzb25lZCAqLworfTsKKworLyoKKyAqIEVuc3VyZSB0aGF0IENPTkZJR19XQU5UX1BBR0VfREVCVUdfRkxBR1MgcmVsaWFibHkKKyAqIGdldHMgdHVybmVkIG9mZiB3aGVuIG5vIGRlYnVnIGZlYXR1cmVzIGFyZSBlbmFibGluZyBpdCEKKyAqLworCisjaWZkZWYgQ09ORklHX1dBTlRfUEFHRV9ERUJVR19GTEFHUworI2lmICFkZWZpbmVkKENPTkZJR19QQUdFX1BPSVNPTklORykgXAorLyogJiYgIWRlZmluZWQoQ09ORklHX1BBR0VfREVCVUdfU09NRVRISU5HX0VMU0UpICYmIC4uLiAqLworI2Vycm9yIFdBTlRfUEFHRV9ERUJVR19GTEFHUyBpcyB0dXJuZWQgb24gd2l0aCBubyBkZWJ1ZyBmZWF0dXJlcyEKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19XQU5UX1BBR0VfREVCVUdfRkxBR1MgKi8KKworI2VuZGlmIC8qIExJTlVYX1BBR0VfREVCVUdfRkxBR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCAyMTlhNTIzLi42MjIxNGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtODIsNiArODIsNyBAQAogCVBHX2FyY2hfMSwKIAlQR19yZXNlcnZlZCwKIAlQR19wcml2YXRlLAkJLyogSWYgcGFnZWNhY2hlLCBoYXMgZnMtcHJpdmF0ZSBkYXRhICovCisJUEdfcHJpdmF0ZV8yLAkJLyogSWYgcGFnZWNhY2hlLCBoYXMgZnMgYXV4IGRhdGEgKi8KIAlQR193cml0ZWJhY2ssCQkvKiBQYWdlIGlzIHVuZGVyIHdyaXRlYmFjayAqLwogI2lmZGVmIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQKIAlQR19oZWFkLAkJLyogQSBoZWFkIHBhZ2UgKi8KQEAgLTk2LDYgKzk3LDggQEAKIAlQR19zd2FwYmFja2VkLAkJLyogUGFnZSBpcyBiYWNrZWQgYnkgUkFNL3N3YXAgKi8KICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCiAJUEdfdW5ldmljdGFibGUsCQkvKiBQYWdlIGlzICJ1bmV2aWN0YWJsZSIgICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUCiAJUEdfbWxvY2tlZCwJCS8qIFBhZ2UgaXMgdm1hIG1sb2NrZWQgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR19JQTY0X1VOQ0FDSEVEX0FMTE9DQVRPUgpAQCAtMTA2LDYgKzEwOSwxMiBAQAogCS8qIEZpbGVzeXN0ZW1zICovCiAJUEdfY2hlY2tlZCA9IFBHX293bmVyX3ByaXZfMSwKIAorCS8qIFR3byBwYWdlIGJpdHMgYXJlIGNvbnNjcmlwdGVkIGJ5IEZTLUNhY2hlIHRvIG1haW50YWluIGxvY2FsIGNhY2hpbmcKKwkgKiBzdGF0ZS4gIFRoZXNlIGJpdHMgYXJlIHNldCBvbiBwYWdlcyBiZWxvbmdpbmcgdG8gdGhlIG5ldGZzJ3MgaW5vZGVzCisJICogd2hlbiB0aG9zZSBpbm9kZXMgYXJlIGJlaW5nIGxvY2FsbHkgY2FjaGVkLgorCSAqLworCVBHX2ZzY2FjaGUgPSBQR19wcml2YXRlXzIsCS8qIHBhZ2UgYmFja2VkIGJ5IGNhY2hlICovCisKIAkvKiBYRU4gKi8KIAlQR19waW5uZWQgPSBQR19vd25lcl9wcml2XzEsCiAJUEdfc2F2ZXBpbm5lZCA9IFBHX2RpcnR5LApAQCAtMTgwLDcgKzE4OSw3IEBACiAKIHN0cnVjdCBwYWdlOwkvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiAKLVRFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkKK1RFU1RQQUdFRkxBRyhMb2NrZWQsIGxvY2tlZCkgVEVTVFNFVEZMQUcoTG9ja2VkLCBsb2NrZWQpCiBQQUdFRkxBRyhFcnJvciwgZXJyb3IpCiBQQUdFRkxBRyhSZWZlcmVuY2VkLCByZWZlcmVuY2VkKSBURVNUQ0xFQVJGTEFHKFJlZmVyZW5jZWQsIHJlZmVyZW5jZWQpCiBQQUdFRkxBRyhEaXJ0eSwgZGlydHkpIFRFU1RTQ0ZMQUcoRGlydHksIGRpcnR5KSBfX0NMRUFSUEFHRUZMQUcoRGlydHksIGRpcnR5KQpAQCAtMTkyLDggKzIwMSw2IEBACiBQQUdFRkxBRyhQaW5uZWQsIHBpbm5lZCkgVEVTVFNDRkxBRyhQaW5uZWQsIHBpbm5lZCkJLyogWGVuICovCiBQQUdFRkxBRyhTYXZlUGlubmVkLCBzYXZlcGlubmVkKTsJCQkvKiBYZW4gKi8KIFBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkgX19DTEVBUlBBR0VGTEFHKFJlc2VydmVkLCByZXNlcnZlZCkKLVBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpIF9fQ0xFQVJQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKQotCV9fU0VUUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKIFBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpIF9fQ0xFQVJQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKQogCiBfX1BBR0VGTEFHKFNsb2JQYWdlLCBzbG9iX3BhZ2UpCkBAIC0yMDMsNiArMjEwLDE2IEBACiBfX1BBR0VGTEFHKFNsdWJEZWJ1Zywgc2x1Yl9kZWJ1ZykKIAogLyoKKyAqIFByaXZhdGUgcGFnZSBtYXJraW5ncyB0aGF0IG1heSBiZSB1c2VkIGJ5IHRoZSBmaWxlc3lzdGVtIHRoYXQgb3ducyB0aGUgcGFnZQorICogZm9yIGl0cyBvd24gcHVycG9zZXMuCisgKiAtIFBHX3ByaXZhdGUgYW5kIFBHX3ByaXZhdGVfMiBjYXVzZSByZWxlYXNlcGFnZSgpIGFuZCBjbyB0byBiZSBpbnZva2VkCisgKi8KK1BBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpIF9fU0VUUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKKwlfX0NMRUFSUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKK1BBR0VGTEFHKFByaXZhdGUyLCBwcml2YXRlXzIpIFRFU1RTQ0ZMQUcoUHJpdmF0ZTIsIHByaXZhdGVfMikKK1BBR0VGTEFHKE93bmVyUHJpdjEsIG93bmVyX3ByaXZfMSkgVEVTVENMRUFSRkxBRyhPd25lclByaXYxLCBvd25lcl9wcml2XzEpCisKKy8qCiAgKiBPbmx5IHRlc3QtYW5kLXNldCBleGlzdCBmb3IgUEdfd3JpdGViYWNrLiAgVGhlIHVuY29uZGl0aW9uYWwgb3BlcmF0b3JzIGFyZQogICogcmlza3k6IHRoZXkgYnlwYXNzIHBhZ2UgYWNjb3VudGluZy4KICAqLwpAQCAtMjM0LDIyICsyNTEsMjIgQEAKICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCiBQQUdFRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpIF9fQ0xFQVJQQUdFRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpCiAJVEVTVENMRUFSRkxBRyhVbmV2aWN0YWJsZSwgdW5ldmljdGFibGUpCi0KLSNkZWZpbmUgTUxPQ0tfUEFHRVMgMQotUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19DTEVBUlBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCi0JVEVTVFNDRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQotCiAjZWxzZQotCi0jZGVmaW5lIE1MT0NLX1BBR0VTIDAKLVBBR0VGTEFHX0ZBTFNFKE1sb2NrZWQpCi0JU0VUUEFHRUZMQUdfTk9PUChNbG9ja2VkKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKE1sb2NrZWQpCi0KIFBBR0VGTEFHX0ZBTFNFKFVuZXZpY3RhYmxlKSBURVNUQ0xFQVJGTEFHX0ZBTFNFKFVuZXZpY3RhYmxlKQogCVNFVFBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpIENMRUFSUEFHRUZMQUdfTk9PUChVbmV2aWN0YWJsZSkKIAlfX0NMRUFSUEFHRUZMQUdfTk9PUChVbmV2aWN0YWJsZSkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAorI2RlZmluZSBNTE9DS19QQUdFUyAxCitQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKSBfX0NMRUFSUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKKwlURVNUU0NGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCisjZWxzZQorI2RlZmluZSBNTE9DS19QQUdFUyAwCitQQUdFRkxBR19GQUxTRShNbG9ja2VkKQorCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKIFBBR0VGTEFHKFVuY2FjaGVkLCB1bmNhY2hlZCkKICNlbHNlCkBAIC0zNjcsOSArMzg0LDEzIEBACiAKICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCiAjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJKDEgPDwgUEdfdW5ldmljdGFibGUpCi0jZGVmaW5lIF9fUEdfTUxPQ0tFRAkJKDEgPDwgUEdfbWxvY2tlZCkKICNlbHNlCiAjZGVmaW5lIF9fUEdfVU5FVklDVEFCTEUJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUCisjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJKDEgPDwgUEdfbWxvY2tlZCkKKyNlbHNlCiAjZGVmaW5lIF9fUEdfTUxPQ0tFRAkJMAogI2VuZGlmCiAKQEAgLTM3OCw5ICszOTksMTAgQEAKICAqIHRoZXNlIGZsYWdzIHNldC4gIEl0IHRoZXkgYXJlLCB0aGVyZSBpcyBhIHByb2JsZW0uCiAgKi8KICNkZWZpbmUgUEFHRV9GTEFHU19DSEVDS19BVF9GUkVFIFwKLQkoMSA8PCBQR19scnUgICB8IDEgPDwgUEdfcHJpdmF0ZSAgIHwgMSA8PCBQR19sb2NrZWQgfCBcCi0JIDEgPDwgUEdfYnVkZHkgfCAxIDw8IFBHX3dyaXRlYmFjayB8IDEgPDwgUEdfcmVzZXJ2ZWQgfCBcCi0JIDEgPDwgUEdfc2xhYiAgfCAxIDw8IFBHX3N3YXBjYWNoZSB8IDEgPDwgUEdfYWN0aXZlIHwgXAorCSgxIDw8IFBHX2xydQkgfCAxIDw8IFBHX2xvY2tlZCAgICB8IFwKKwkgMSA8PCBQR19wcml2YXRlIHwgMSA8PCBQR19wcml2YXRlXzIgfCBcCisJIDEgPDwgUEdfYnVkZHkJIHwgMSA8PCBQR193cml0ZWJhY2sgfCAxIDw8IFBHX3Jlc2VydmVkIHwgXAorCSAxIDw8IFBHX3NsYWIJIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSB8IFwKIAkgX19QR19VTkVWSUNUQUJMRSB8IF9fUEdfTUxPQ0tFRCkKIAogLyoKQEAgLTM5MSw0ICs0MTMsMTYgQEAKICNkZWZpbmUgUEFHRV9GTEFHU19DSEVDS19BVF9QUkVQCSgoMSA8PCBOUl9QQUdFRkxBR1MpIC0gMSkKIAogI2VuZGlmIC8qICFfX0dFTkVSQVRJTkdfQk9VTkRTX0ggKi8KKworLyoqCisgKiBwYWdlX2hhc19wcml2YXRlIC0gRGV0ZXJtaW5lIGlmIHBhZ2UgaGFzIHByaXZhdGUgc3R1ZmYKKyAqIEBwYWdlOiBUaGUgcGFnZSB0byBiZSBjaGVja2VkCisgKgorICogRGV0ZXJtaW5lIGlmIGEgcGFnZSBoYXMgcHJpdmF0ZSBzdHVmZiwgaW5kaWNhdGluZyB0aGF0IHJlbGVhc2Ugcm91dGluZXMKKyAqIHNob3VsZCBiZSBpbnZva2VkIHVwb24gaXQuCisgKi8KKyNkZWZpbmUgcGFnZV9oYXNfcHJpdmF0ZShwYWdlKQkJCVwKKwkoKHBhZ2UpLT5mbGFncyAmICgoMSA8PCBQR19wcml2YXRlKSB8CVwKKwkJCSAgKDEgPDwgUEdfcHJpdmF0ZV8yKSkpCisKICNlbmRpZgkvKiBQQUdFX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAppbmRleCA2MDJjYzFmLi43MzM5YzdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC05MSwyNCArOTEsMjMgQEAKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci1leHRlcm4gc3RydWN0IG1lbV9jZ3JvdXAgKgotc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Ci1leHRlcm4gc3RydWN0IG1lbV9jZ3JvdXAgKmxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KTsKIGV4dGVybiBpbnQgc3dhcF9jZ3JvdXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyk7CiBleHRlcm4gdm9pZCBzd2FwX2Nncm91cF9zd2Fwb2ZmKGludCB0eXBlKTsKICNlbHNlCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgaW5saW5lCi1zdHJ1Y3QgbWVtX2Nncm91cCAqc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3Vuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKQogewotCXJldHVybiBOVUxMOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lCi1zdHJ1Y3QgbWVtX2Nncm91cCAqbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCkKK3Vuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCmluZGV4IDAxY2EwODUuLjM0ZGE1MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oCkBAIC0xOCw5ICsxOCwxNCBAQAogICogQml0cyBpbiBtYXBwaW5nLT5mbGFncy4gIFRoZSBsb3dlciBfX0dGUF9CSVRTX1NISUZUIGJpdHMgYXJlIHRoZSBwYWdlCiAgKiBhbGxvY2F0aW9uIG1vZGUgZmxhZ3MuCiAgKi8KLSNkZWZpbmUJQVNfRUlPCQkoX19HRlBfQklUU19TSElGVCArIDApCS8qIElPIGVycm9yIG9uIGFzeW5jIHdyaXRlICovCi0jZGVmaW5lIEFTX0VOT1NQQwkoX19HRlBfQklUU19TSElGVCArIDEpCS8qIEVOT1NQQyBvbiBhc3luYyB3cml0ZSAqLwotI2RlZmluZSBBU19NTV9BTExfTE9DS1MJKF9fR0ZQX0JJVFNfU0hJRlQgKyAyKQkvKiB1bmRlciBtbV90YWtlX2FsbF9sb2NrcygpICovCitlbnVtIG1hcHBpbmdfZmxhZ3MgeworCUFTX0VJTwkJPSBfX0dGUF9CSVRTX1NISUZUICsgMCwJLyogSU8gZXJyb3Igb24gYXN5bmMgd3JpdGUgKi8KKwlBU19FTk9TUEMJPSBfX0dGUF9CSVRTX1NISUZUICsgMSwJLyogRU5PU1BDIG9uIGFzeW5jIHdyaXRlICovCisJQVNfTU1fQUxMX0xPQ0tTCT0gX19HRlBfQklUU19TSElGVCArIDIsCS8qIHVuZGVyIG1tX3Rha2VfYWxsX2xvY2tzKCkgKi8KKyNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisJQVNfVU5FVklDVEFCTEUJPSBfX0dGUF9CSVRTX1NISUZUICsgMywJLyogZS5nLiwgcmFtZGlzaywgU0hNX0xPQ0sgKi8KKyNlbmRpZgorfTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X2Vycm9yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBpbnQgZXJyb3IpCiB7CkBAIC0zMyw3ICszOCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCi0jZGVmaW5lIEFTX1VORVZJQ1RBQkxFCShfX0dGUF9CSVRTX1NISUZUICsgMikJLyogZS5nLiwgcmFtZGlzaywgU0hNX0xPQ0sgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG1hcHBpbmdfc2V0X3VuZXZpY3RhYmxlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewpAQCAtMzgwLDYgKzM4NCwxMSBAQAogZXh0ZXJuIHZvaWQgZW5kX3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlKTsKIAogLyoKKyAqIEFkZCBhbiBhcmJpdHJhcnkgd2FpdGVyIHRvIGEgcGFnZSdzIHdhaXQgcXVldWUKKyAqLworZXh0ZXJuIHZvaWQgYWRkX3BhZ2Vfd2FpdF9xdWV1ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgd2FpdF9xdWV1ZV90ICp3YWl0ZXIpOworCisvKgogICogRmF1bHQgYSB1c2Vyc3BhY2UgcGFnZSBpbnRvIHBhZ2V0YWJsZXMuICBSZXR1cm4gbm9uLXplcm8gb24gYSBmYXVsdC4KICAqCiAgKiBUaGlzIGFzc3VtZXMgdGhhdCB0d28gdXNlcnNwYWNlIHBhZ2VzIGFyZSBhbHdheXMgc3VmZmljaWVudC4gIFRoYXQncwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaAppbmRleCA3YjI4ODZmLi5iYWI4MmY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2V2ZWMuaApAQCAtMjQsNyArMjQsNiBAQAogdm9pZCBfX3BhZ2V2ZWNfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7CiB2b2lkIF9fX19wYWdldmVjX2xydV9hZGQoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KTsKIHZvaWQgcGFnZXZlY19zdHJpcChzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7Ci12b2lkIHBhZ2V2ZWNfc3dhcF9mcmVlKHN0cnVjdCBwYWdldmVjICpwdmVjKTsKIHVuc2lnbmVkIHBhZ2V2ZWNfbG9va3VwKHN0cnVjdCBwYWdldmVjICpwdmVjLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJcGdvZmZfdCBzdGFydCwgdW5zaWduZWQgbnJfcGFnZXMpOwogdW5zaWduZWQgcGFnZXZlY19sb29rdXBfdGFnKHN0cnVjdCBwYWdldmVjICpwdmVjLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDA0MmMxNjYuLjA5MmU4MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKQEAgLTEwLDcyICsxMCwyNSBAQAogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCi0jZGVmaW5lIE9TQ19RVUVSWV9UWVBFCQkJMAotI2RlZmluZSBPU0NfU1VQUE9SVF9UWVBFIAkJMQotI2RlZmluZSBPU0NfQ09OVFJPTF9UWVBFCQkyCi0jZGVmaW5lIE9TQ19TVVBQT1JUX01BU0tTCQkweDFmCi0KLS8qCi0gKiBfT1NDIERXMCBEZWZpbml0aW9uIAotICovCi0jZGVmaW5lIE9TQ19RVUVSWV9FTkFCTEUJCTEKLSNkZWZpbmUgT1NDX1JFUVVFU1RfRVJST1IJCTIKLSNkZWZpbmUgT1NDX0lOVkFMSURfVVVJRF9FUlJPUgkJNAotI2RlZmluZSBPU0NfSU5WQUxJRF9SRVZJU0lPTl9FUlJPUgk4Ci0jZGVmaW5lIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUgkxNgotCi0vKgotICogX09TQyBEVzEgRGVmaW5pdGlvbiAoT1MgU3VwcG9ydCBGaWVsZHMpCi0gKi8KLSNkZWZpbmUgT1NDX0VYVF9QQ0lfQ09ORklHX1NVUFBPUlQJCTEKLSNkZWZpbmUgT1NDX0FDVElWRV9TVEFURV9QV1JfU1VQUE9SVCAJCTIKLSNkZWZpbmUgT1NDX0NMT0NLX1BXUl9DQVBBQklMSVRZX1NVUFBPUlQJNAotI2RlZmluZSBPU0NfUENJX1NFR01FTlRfR1JPVVBTX1NVUFBPUlQJCTgKLSNkZWZpbmUgT1NDX01TSV9TVVBQT1JUCQkJCTE2Ci0KLS8qCi0gKiBfT1NDIERXMSBEZWZpbml0aW9uIChPUyBDb250cm9sIEZpZWxkcykKLSAqLwotI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfTkFUSVZFX0hQX0NPTlRST0wJMQotI2RlZmluZSBPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCAJCTIKLSNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX1BNRV9DT05UUk9MCQk0Ci0jZGVmaW5lIE9TQ19QQ0lfRVhQUkVTU19BRVJfQ09OVFJPTAkJOAotI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MCTE2Ci0KLSNkZWZpbmUgT1NDX0NPTlRST0xfTUFTS1MgCShPU0NfUENJX0VYUFJFU1NfTkFUSVZFX0hQX0NPTlRST0wgfCAJXAotCQkJCU9TQ19TSFBDX05BVElWRV9IUF9DT05UUk9MIHwgCQlcCi0JCQkJT1NDX1BDSV9FWFBSRVNTX1BNRV9DT05UUk9MIHwJCVwKLQkJCQlPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wgfAkJXAotCQkJCU9TQ19QQ0lfRVhQUkVTU19DQVBfU1RSVUNUVVJFX0NPTlRST0wpCi0KICNpZmRlZiBDT05GSUdfQUNQSQotZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpOwotaW50IHBjaV9hY3BpX29zY19zdXBwb3J0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKIHN0YXRpYyBpbmxpbmUgYWNwaV9oYW5kbGUgYWNwaV9maW5kX3Jvb3RfYnJpZGdlX2hhbmRsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQkvKiBGaW5kIHJvb3QgaG9zdCBicmlkZ2UgKi8KLQl3aGlsZSAocGRldi0+YnVzLT5zZWxmKQotCQlwZGV2ID0gcGRldi0+YnVzLT5zZWxmOwotCi0JcmV0dXJuIGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZShwY2lfZG9tYWluX25yKHBkZXYtPmJ1cyksCi0JCQlwZGV2LT5idXMtPm51bWJlcik7CisJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5idXM7CisJLyogRmluZCBhIFBDSSByb290IGJ1cyAqLworCXdoaWxlIChwYnVzLT5wYXJlbnQpCisJCXBidXMgPSBwYnVzLT5wYXJlbnQ7CisJcmV0dXJuIGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZShwY2lfZG9tYWluX25yKHBidXMpLAorCQkJCQkgICAgICBwYnVzLT5udW1iZXIpOwogfQogCiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfcGNpX2dldF9icmlkZ2VfaGFuZGxlKHN0cnVjdCBwY2lfYnVzICpwYnVzKQogewotCWludCBzZWcgPSBwY2lfZG9tYWluX25yKHBidXMpLCBidXNuciA9IHBidXMtPm51bWJlcjsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gcGJ1cy0+c2VsZjsKLQlpZiAoYnJpZGdlKQotCQlyZXR1cm4gREVWSUNFX0FDUElfSEFORExFKCYoYnJpZGdlLT5kZXYpKTsKLQlyZXR1cm4gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKHNlZywgYnVzbnIpOworCWlmIChwYnVzLT5wYXJlbnQpCisJCXJldHVybiBERVZJQ0VfQUNQSV9IQU5ETEUoJihwYnVzLT5zZWxmLT5kZXYpKTsKKwlyZXR1cm4gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKHBjaV9kb21haW5fbnIocGJ1cyksCisJCQkJCSAgICAgIHBidXMtPm51bWJlcik7CiB9CiAjZWxzZQotI2lmICFkZWZpbmVkKEFFX0VSUk9SKQotdHlwZWRlZiB1MzIgCQlhY3BpX3N0YXR1czsKLSNkZWZpbmUgQUVfRVJST1IgICAgICAJKGFjcGlfc3RhdHVzKSAoMHgwMDAxKQotI2VuZGlmICAgIAotc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQote3JldHVybiBBRV9FUlJPUjt9CiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7IHJldHVybiBOVUxMOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDdiZDYyNGIuLmE3ZmU0YmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgogCiAvKiBJbmNsdWRlIHRoZSBJRCBsaXN0ICovCiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgpAQCAtOTMsNiArOTQsMTIgQEAKIAkvKiAjNjogZXhwYW5zaW9uIFJPTSByZXNvdXJjZSAqLwogCVBDSV9ST01fUkVTT1VSQ0UsCiAKKwkvKiBkZXZpY2Ugc3BlY2lmaWMgcmVzb3VyY2VzICovCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwlQQ0lfSU9WX1JFU09VUkNFUywKKwlQQ0lfSU9WX1JFU09VUkNFX0VORCA9IFBDSV9JT1ZfUkVTT1VSQ0VTICsgUENJX1NSSU9WX05VTV9CQVJTIC0gMSwKKyNlbmRpZgorCiAJLyogcmVzb3VyY2VzIGFzc2lnbmVkIHRvIGJ1c2VzIGJlaGluZCB0aGUgYnJpZGdlICovCiAjZGVmaW5lIFBDSV9CUklER0VfUkVTT1VSQ0VfTlVNIDQKIApAQCAtMTgwLDYgKzE4Nyw3IEBACiAKIHN0cnVjdCBwY2llX2xpbmtfc3RhdGU7CiBzdHJ1Y3QgcGNpX3ZwZDsKK3N0cnVjdCBwY2lfc3Jpb3Y7CiAKIC8qCiAgKiBUaGUgcGNpX2RldiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBkZXNjcmliZSBQQ0kgZGV2aWNlcy4KQEAgLTI1Nyw2ICsyNjUsOCBAQAogCXVuc2lnbmVkIGludAlpc19tYW5hZ2VkOjE7CiAJdW5zaWduZWQgaW50CWlzX3BjaWU6MTsKIAl1bnNpZ25lZCBpbnQJc3RhdGVfc2F2ZWQ6MTsKKwl1bnNpZ25lZCBpbnQJaXNfcGh5c2ZuOjE7CisJdW5zaWduZWQgaW50CWlzX3ZpcnRmbjoxOwogCXBjaV9kZXZfZmxhZ3NfdCBkZXZfZmxhZ3M7CiAJYXRvbWljX3QJZW5hYmxlX2NudDsJLyogcGNpX2VuYWJsZV9kZXZpY2UgaGFzIGJlZW4gY2FsbGVkICovCiAKQEAgLTI3MCw2ICsyODAsMTIgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1zaV9saXN0OwogI2VuZGlmCiAJc3RydWN0IHBjaV92cGQgKnZwZDsKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorCXVuaW9uIHsKKwkJc3RydWN0IHBjaV9zcmlvdiAqc3Jpb3Y7CS8qIFNSLUlPViBjYXBhYmlsaXR5IHJlbGF0ZWQgKi8KKwkJc3RydWN0IHBjaV9kZXYgKnBoeXNmbjsJLyogdGhlIFBGIHRoaXMgVkYgaXMgYXNzb2NpYXRlZCB3aXRoICovCisJfTsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICphbGxvY19wY2lfZGV2KHZvaWQpOwpAQCAtMzQxLDYgKzM1NywxNSBAQAogI2RlZmluZSBwY2lfYnVzX2IobikJbGlzdF9lbnRyeShuLCBzdHJ1Y3QgcGNpX2J1cywgbm9kZSkKICNkZWZpbmUgdG9fcGNpX2J1cyhuKQljb250YWluZXJfb2Yobiwgc3RydWN0IHBjaV9idXMsIGRldikKIAorLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGNpIGJ1cyBpcyByb290IChiZWhpbmQgaG9zdC1wY2kgYnJpZGdlKSwKKyAqIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcGNpX2lzX3Jvb3RfYnVzKHN0cnVjdCBwY2lfYnVzICpwYnVzKQoreworCXJldHVybiAhKHBidXMtPnBhcmVudCk7Cit9CisKICNpZmRlZiBDT05GSUdfUENJX01TSQogc3RhdGljIGlubGluZSBib29sIHBjaV9kZXZfbXNpX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CkBAIC01MjgsNyArNTUzLDcgQEAKIC8qIEdlbmVyaWMgUENJIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkgKi8KIAogZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICpwY2lfZmluZF9idXMoaW50IGRvbWFpbiwgaW50IGJ1c25yKTsKLXZvaWQgcGNpX2J1c19hZGRfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK3ZvaWQgcGNpX2J1c19hZGRfZGV2aWNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfc2Nhbl9idXNfcGFyZW50ZWQoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgYnVzLAogCQkJCSAgICAgIHN0cnVjdCBwY2lfb3BzICpvcHMsIHZvaWQgKnN5c2RhdGEpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpX2J1cyAqIF9fZGV2aW5pdCBwY2lfc2Nhbl9idXMoaW50IGJ1cywgc3RydWN0IHBjaV9vcHMgKm9wcywKQEAgLTY4OSw2ICs3MTQsNyBAQAogLyogUG93ZXIgbWFuYWdlbWVudCByZWxhdGVkIHJvdXRpbmVzICovCiBpbnQgcGNpX3NhdmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBpbnQgcGNpX3Jlc3RvcmVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBpbnQgcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CiBwY2lfcG93ZXJfdCBwY2lfY2hvb3NlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBib29sIHBjaV9wbWVfY2FwYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSk7CkBAIC03MDEsNiArNzI3LDkgQEAKIAogLyogRnVuY3Rpb25zIGZvciBQQ0kgSG90cGx1ZyBkcml2ZXJzIHRvIHVzZSAqLwogaW50IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IGNhcCk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUcKK3Vuc2lnbmVkIGludCBwY2lfcmVzY2FuX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKyNlbmRpZgogCiAvKiBWaXRhbCBwcm9kdWN0IGRhdGEgcm91dGluZXMgKi8KIHNzaXplX3QgcGNpX3JlYWRfdnBkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCwgdm9pZCAqYnVmKTsKQEAgLTcwOCw3ICs3MzcsNyBAQAogaW50IHBjaV92cGRfdHJ1bmNhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUpOwogCiAvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBsb3ctbGV2ZWwgY29kZSAoZHJpdmVycy9wY2kvc2V0dXAtW2J1cyxyZXNdLmMpICovCi12b2lkIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK3ZvaWQgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpOwogdm9pZCBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGludCBwY2lfY2xhaW1fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIHZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKTsKQEAgLTc4OSw3ICs4MTgsNyBAQAogCiAKICNpZm5kZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9lbmFibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX21zaV9ibG9jayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgbnZlYykKIHsKIAlyZXR1cm4gLTE7CiB9CkBAIC03OTksNiArODI4LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7IH0KIAorc3RhdGljIGlubGluZSBpbnQgcGNpX21zaXhfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJICBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCiB7CkBAIC04MjAsOSArODUzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotZXh0ZXJuIGludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2VuYWJsZV9tc2lfYmxvY2soc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG52ZWMpOwogZXh0ZXJuIHZvaWQgcGNpX21zaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX21zaXhfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXMsIGludCBudmVjKTsKIGV4dGVybiB2b2lkIHBjaV9tc2l4X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtODQxLDYgKzg3NSw4IEBACiBleHRlcm4gaW50IHBjaWVfYXNwbV9lbmFibGVkKHZvaWQpOwogI2VuZGlmCiAKKyNkZWZpbmUgcGNpX2VuYWJsZV9tc2kocGRldikJcGNpX2VuYWJsZV9tc2lfYmxvY2socGRldiwgMSkKKwogI2lmZGVmIENPTkZJR19IVF9JUlEKIC8qIFRoZSBmdW5jdGlvbnMgYSBkcml2ZXIgc2hvdWxkIGNhbGwgKi8KIGludCAgaHRfY3JlYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KTsKQEAgLTExOTQsNSArMTIzMCwyMyBAQAogCiB2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2JhcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcik7CiAKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorZXh0ZXJuIGludCBwY2lfZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBucl92aXJ0Zm4pOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaXJxcmV0dXJuX3QgcGNpX3NyaW92X21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBucl92aXJ0Zm4pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgcGNpX3NyaW92X21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBJUlFfTk9ORTsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIExJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDJjOWU4MDguLjE3MGY4YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC01MjYsNiArNTI2LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDUJMHg3NDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0xQQwkweDc0NjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9JREUJMHg3NDY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMyCTB4NzQ2YQpAQCAtMjIzMiw2ICsyMjMzLDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GUkVFU0NBTEUJCTB4MTk1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMTVFCQkweDAwYjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE1CQkweDAwYjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE0RQkJMHgwMGI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODMxNAkJMHgwMGI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODM3OEUJCTB4MDBjNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzgJCTB4MDBjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzdFCQkweDAwYzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4Mzc3CQkweDAwYzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NTQ4RQkJMHgwMDEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0OAkJMHgwMDEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0M0UJCTB4MDAxNApAQCAtMjM4OCw2ICsyMzk3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyCTB4MjQ4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMAkweDI0YzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEJMHgyNGMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8yCTB4MjRjMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMwkweDI0YzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzUJMHgyNGM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl82CTB4MjRjNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCmluZGV4IDAyNzgxNWIuLmU0ZDA4YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTIzNSw3ICsyMzUsNyBAQAogI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfU0hJRlQJMTEJLyogU3RhcnQgb2YgdGhlIFBNRSBNYXNrIGluIFBNQyAqLwogI2RlZmluZSBQQ0lfUE1fQ1RSTAkJNAkvKiBQTSBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX1NUQVRFX01BU0sJMHgwMDAzCS8qIEN1cnJlbnQgcG93ZXIgc3RhdGUgKEQwIHRvIEQzKSAqLwotI2RlZmluZSAgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVAkweDAwMDQJLyogTm8gcmVzZXQgZm9yIEQzaG90LT5EMCAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVAkweDAwMDgJLyogTm8gcmVzZXQgZm9yIEQzaG90LT5EMCAqLwogI2RlZmluZSAgUENJX1BNX0NUUkxfUE1FX0VOQUJMRQkweDAxMDAJLyogUE1FIHBpbiBlbmFibGUgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX0RBVEFfU0VMX01BU0sJMHgxZTAwCS8qIERhdGEgc2VsZWN0ICg/PykgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX0RBVEFfU0NBTEVfTUFTSwkweDYwMDAJLyogRGF0YSBzY2FsZSAoPz8pICovCkBAIC0zNzUsNiArMzc1LDcgQEAKICNkZWZpbmUgIFBDSV9FWFBfVFlQRV9VUFNUUkVBTQkweDUJLyogVXBzdHJlYW0gUG9ydCAqLwogI2RlZmluZSAgUENJX0VYUF9UWVBFX0RPV05TVFJFQU0gMHg2CS8qIERvd25zdHJlYW0gUG9ydCAqLwogI2RlZmluZSAgUENJX0VYUF9UWVBFX1BDSV9CUklER0UgMHg3CS8qIFBDSS9QQ0ktWCBCcmlkZ2UgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9SQ19FTkQJMHg5CS8qIFJvb3QgQ29tcGxleCBJbnRlZ3JhdGVkIEVuZHBvaW50ICovCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfU0xPVAkweDAxMDAJLyogU2xvdCBpbXBsZW1lbnRlZCAqLwogI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX0lSUQkweDNlMDAJLyogSW50ZXJydXB0IG1lc3NhZ2UgbnVtYmVyICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ0FQCQk0CS8qIERldmljZSBjYXBhYmlsaXRpZXMgKi8KQEAgLTQ4Nyw2ICs0ODgsOCBAQAogI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0FSSQkweDIwCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZDVEwyCQk0MAkvKiBEZXZpY2UgQ29udHJvbCAyICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTDJfQVJJCTB4MjAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTDIJCTQ4CS8qIExpbmsgQ29udHJvbCAyICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMMgkJNTYJLyogU2xvdCBDb250cm9sIDIgKi8KIAogLyogRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzIChQQ0ktWCAyLjAgYW5kIEV4cHJlc3MpICovCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEKGhlYWRlcikJCShoZWFkZXIgJiAweDAwMDBmZmZmKQpAQCAtNDk4LDYgKzUwMSw3IEBACiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0RTTgkzCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1BXUgk0CiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0FSSQkxNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9TUklPVgkxNgogCiAvKiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKi8KICNkZWZpbmUgUENJX0VSUl9VTkNPUl9TVEFUVVMJNAkvKiBVbmNvcnJlY3RhYmxlIEVycm9yIFN0YXR1cyAqLwpAQCAtNjE1LDQgKzYxOSwzNSBAQAogI2RlZmluZSAgUENJX0FSSV9DVFJMX0FDUwkweDAwMDIJLyogQUNTIEZ1bmN0aW9uIEdyb3VwcyBFbmFibGUgKi8KICNkZWZpbmUgIFBDSV9BUklfQ1RSTF9GRyh4KQkoKCh4KSA+PiA0KSAmIDcpIC8qIEZ1bmN0aW9uIEdyb3VwICovCiAKKy8qIFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbiAqLworI2RlZmluZSBQQ0lfU1JJT1ZfQ0FQCQkweDA0CS8qIFNSLUlPViBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DQVBfVkZNCTB4MDEJLyogVkYgTWlncmF0aW9uIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DQVBfSU5UUih4KQkoKHgpID4+IDIxKSAvKiBJbnRlcnJ1cHQgTWVzc2FnZSBOdW1iZXIgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0NUUkwJCTB4MDgJLyogU1ItSU9WIENvbnRyb2wgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DVFJMX1ZGRQkweDAxCS8qIFZGIEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfVkZNCTB4MDIJLyogVkYgTWlncmF0aW9uIEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfSU5UUgkweDA0CS8qIFZGIE1pZ3JhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ1RSTF9NU0UJMHgwOAkvKiBWRiBNZW1vcnkgU3BhY2UgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ1RSTF9BUkkJMHgxMAkvKiBBUkkgQ2FwYWJsZSBIaWVyYXJjaHkgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1NUQVRVUwkweDBhCS8qIFNSLUlPViBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9TVEFUVVNfVkZNCTB4MDEJLyogVkYgTWlncmF0aW9uIFN0YXR1cyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfSU5JVElBTF9WRgkweDBjCS8qIEluaXRpYWwgVkZzICovCisjZGVmaW5lIFBDSV9TUklPVl9UT1RBTF9WRgkweDBlCS8qIFRvdGFsIFZGcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfTlVNX1ZGCTB4MTAJLyogTnVtYmVyIG9mIFZGcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfRlVOQ19MSU5LCTB4MTIJLyogRnVuY3Rpb24gRGVwZW5kZW5jeSBMaW5rICovCisjZGVmaW5lIFBDSV9TUklPVl9WRl9PRkZTRVQJMHgxNAkvKiBGaXJzdCBWRiBPZmZzZXQgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1ZGX1NUUklERQkweDE2CS8qIEZvbGxvd2luZyBWRiBTdHJpZGUgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1ZGX0RJRAkweDFhCS8qIFZGIERldmljZSBJRCAqLworI2RlZmluZSBQQ0lfU1JJT1ZfU1VQX1BHU0laRQkweDFjCS8qIFN1cHBvcnRlZCBQYWdlIFNpemVzICovCisjZGVmaW5lIFBDSV9TUklPVl9TWVNfUEdTSVpFCTB4MjAJLyogU3lzdGVtIFBhZ2UgU2l6ZSAqLworI2RlZmluZSBQQ0lfU1JJT1ZfQkFSCQkweDI0CS8qIFZGIEJBUjAgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9OVU1fQkFSUwk2CS8qIE51bWJlciBvZiBWRiBCQVJzICovCisjZGVmaW5lIFBDSV9TUklPVl9WRk0JCTB4M2MJLyogVkYgTWlncmF0aW9uIFN0YXRlIEFycmF5IE9mZnNldCovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX0JJUih4KQkoKHgpICYgNykJLyogU3RhdGUgQklSICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX09GRlNFVCh4KSAoKHgpICYgfjcpCS8qIFN0YXRlIE9mZnNldCAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9VQQkweDAJLyogSW5hY3RpdmUuVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9WRk1fTUkJMHgxCS8qIERvcm1hbnQuTWlncmF0ZUluICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX01PCTB4MgkvKiBBY3RpdmUuTWlncmF0ZU91dCAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9BVgkweDMJLyogQWN0aXZlLkF2YWlsYWJsZSAqLworCiAjZW5kaWYgLyogTElOVVhfUENJX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oIGIvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oCmluZGV4IDZjZDkxZTMuLmI0Yzc5NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpZXBvcnRfaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmgKQEAgLTE2LDI5ICsxNiwzMCBAQAogI2RlZmluZSBQQ0lFX0FOWV9QT1JUCQkJNwogCiAvKiBTZXJ2aWNlIFR5cGUgKi8KLSNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfUE1FCQkxCS8qIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgKi8KLSNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfQUVSCQkyCS8qIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyAqLwotI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9IUAkJNAkvKiBOYXRpdmUgSG90cGx1ZyAqLwotI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9WQwkJOAkvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfUE1FX1NISUZUCTAJLyogUG93ZXIgTWFuYWdlbWVudCBFdmVudCAqLworI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9QTUUJCSgxIDw8IFBDSUVfUE9SVF9TRVJWSUNFX1BNRV9TSElGVCkKKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfQUVSX1NISUZUCTEJLyogQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX0FFUgkJKDEgPDwgUENJRV9QT1JUX1NFUlZJQ0VfQUVSX1NISUZUKQorI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9IUF9TSElGVAkyCS8qIE5hdGl2ZSBIb3RwbHVnICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX0hQCQkoMSA8PCBQQ0lFX1BPUlRfU0VSVklDRV9IUF9TSElGVCkKKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfVkNfU0hJRlQJMwkvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfVkMJCSgxIDw8IFBDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUKQogCiAvKiBSb290L1Vwc3RyZWFtL0Rvd25zdHJlYW0gUG9ydCdzIEludGVycnVwdCBNb2RlICovCisjZGVmaW5lIFBDSUVfUE9SVF9OT19JUlEJCSgtMSkKICNkZWZpbmUgUENJRV9QT1JUX0lOVHhfTU9ERQkJMAogI2RlZmluZSBQQ0lFX1BPUlRfTVNJX01PREUJCTEKICNkZWZpbmUgUENJRV9QT1JUX01TSVhfTU9ERQkJMgogCi1zdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgewotCV9fdTMyIHZlbmRvciwgZGV2aWNlOwkJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb3IgUENJX0FOWV9JRCovCi0JX191MzIgc3VidmVuZG9yLCBzdWJkZXZpY2U7CS8qIFN1YnN5c3RlbSBJRCdzIG9yIFBDSV9BTllfSUQgKi8KLQlfX3UzMiBjbGFzcywgY2xhc3NfbWFzazsJLyogKGNsYXNzLHN1YmNsYXNzLHByb2ctaWYpIHRyaXBsZXQgKi8KLQlfX3UzMiBwb3J0X3R5cGUsIHNlcnZpY2VfdHlwZTsJLyogUG9ydCBFbnRpdHkgKi8KLQlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YTsKK3N0cnVjdCBwY2llX3BvcnRfZGF0YSB7CisJaW50IHBvcnRfdHlwZTsJCS8qIFR5cGUgb2YgdGhlIHBvcnQgKi8KKwlpbnQgcG9ydF9pcnFfbW9kZTsJLyogWzA6SU5UeCB8IDE6TVNJIHwgMjpNU0ktWF0gKi8KIH07CiAKIHN0cnVjdCBwY2llX2RldmljZSB7CiAJaW50IAkJaXJxOwkgICAgLyogU2VydmljZSBJUlEvTVNJL01TSS1YIFZlY3RvciAqLwotCWludCAJCWludGVycnVwdF9tb2RlOwkvKiBbMDpJTlR4IHwgMTpNU0kgfCAyOk1TSS1YXSAqLwkKLQlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgaWQ7CS8qIFNlcnZpY2UgSUQgKi8KLQlzdHJ1Y3QgcGNpX2RldgkqcG9ydDsJICAgIC8qIFJvb3QvVXBzdHJlYW0vRG93bnN0cmVhbSBQb3J0ICovCisJc3RydWN0IHBjaV9kZXYgKnBvcnQ7CSAgICAvKiBSb290L1Vwc3RyZWFtL0Rvd25zdHJlYW0gUG9ydCAqLworCXUzMgkJc2VydmljZTsgICAgLyogUG9ydCBzZXJ2aWNlIHRoaXMgZGV2aWNlIHJlcHJlc2VudHMgKi8KIAl2b2lkCQkqcHJpdl9kYXRhOyAvKiBTZXJ2aWNlIFByaXZhdGUgRGF0YSAqLwogCXN0cnVjdCBkZXZpY2UJZGV2aWNlOyAgICAgLyogR2VuZXJpYyBEZXZpY2UgSW50ZXJmYWNlICovCiB9OwpAQCAtNTYsMTAgKzU3LDkgQEAKIAogc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgKCpwcm9iZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCAKLQkJY29uc3Qgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkICppZCk7CisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKLQlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKIAlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAKIAkvKiBTZXJ2aWNlIEVycm9yIFJlY292ZXJ5IEhhbmRsZXIgKi8KQEAgLTY4LDcgKzY4LDkgQEAKIAkvKiBMaW5rIFJlc2V0IENhcGFiaWxpdHkgLSBBRVIgc2VydmljZSBkcml2ZXIgc3BlY2lmaWMgKi8KIAlwY2lfZXJzX3Jlc3VsdF90ICgqcmVzZXRfbGluaykgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCi0JY29uc3Qgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkICppZF90YWJsZTsKKwlpbnQgcG9ydF90eXBlOyAgLyogVHlwZSBvZiB0aGUgcG9ydCB0aGlzIGRyaXZlciBjYW4gaGFuZGxlICovCisJdTMyIHNlcnZpY2U7ICAgIC8qIFBvcnQgc2VydmljZSB0aGlzIGRldmljZSByZXByZXNlbnRzICovCisKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CiB9OwogI2RlZmluZSB0b19zZXJ2aWNlX2RyaXZlcihkKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaAppbmRleCA5ZjMxNjgzLi42NzI5ZjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9pc29uLmgKQEAgLTE3LDYgKzE3LDkgQEAKICAqLwogI2RlZmluZSBUSU1FUl9FTlRSWV9TVEFUSUMJKCh2b2lkICopIDB4NzQ3Mzc0NjEpCiAKKy8qKioqKioqKioqIG1tL2RlYnVnLXBhZ2VhbGxvYy5jICoqKioqKioqKiovCisjZGVmaW5lIFBBR0VfUE9JU09OIDB4YWEKKwogLyoqKioqKioqKiogbW0vc2xhYi5jICoqKioqKioqKiovCiAvKgogICogTWFnaWMgbnVtcyBmb3Igb2JqIHJlZCB6b25pbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IGI4YmRiOTYuLmZiZmEzZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC00MSw5ICs0MSw2IEBACiAgKiB3aGlsZSBwYXJlbnQvc3ViZGlyIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSAoZXZlcnkKICAqIC9wcm9jIGZpbGUgaGFzIGEgcGFyZW50LCBidXQgInN1YmRpciIgaXMgTlVMTCBmb3IgYWxsCiAgKiBub24tZGlyZWN0b3J5IGVudHJpZXMpLgotICoKLSAqICJvd25lciIgaXMgdXNlZCB0byBwcm90ZWN0IG1vZHVsZQotICogZnJvbSB1bmxvYWRpbmcgd2hpbGUgcHJvY19kaXJfZW50cnkgaXMgaW4gdXNlCiAgKi8KIAogdHlwZWRlZglpbnQgKHJlYWRfcHJvY190KShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKQEAgLTcwLDcgKzY3LDYgQEAKIAkgKiBzb21ld2hlcmUuCiAJICovCiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqcHJvY19mb3BzOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqbmV4dCwgKnBhcmVudCwgKnN1YmRpcjsKIAl2b2lkICpkYXRhOwogCXJlYWRfcHJvY190ICpyZWFkX3Byb2M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCA5OGI5M2NhLi42N2MxNTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTk0LDYgKzk0LDcgQEAKIGV4dGVybiB2b2lkIF9fcHRyYWNlX2xpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwKIAkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXdfcGFyZW50KTsKIGV4dGVybiB2b2lkIF9fcHRyYWNlX3VubGluayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKK2V4dGVybiB2b2lkIGV4aXRfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHJhY2VyKTsKIGV4dGVybiB2b2lkIHB0cmFjZV9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncyk7CiAjZGVmaW5lIFBUUkFDRV9NT0RFX1JFQUQgICAxCiAjZGVmaW5lIFBUUkFDRV9NT0RFX0FUVEFDSCAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJlYTE0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAgIG1kLmggOiBNdWx0aXBsZSBEZXZpY2VzIGRyaXZlciBmb3IgTGludXgKLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTQtOTYgTWFyYyBaWU5HSUVSCi0JICA8enluZ2llckB1ZnItaW5mby1wNy5pYnAuZnI+IG9yCi0JICA8bWF6QGdsb3Vwcy5mZG4uZnI+Ci0JICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCi0qLwotCi0jaWZuZGVmIF9NRF9ICi0jZGVmaW5lIF9NRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCi0vKgotICogJ21kX3AuaCcgaG9sZHMgdGhlICdwaHlzaWNhbCcgbGF5b3V0IG9mIFJBSUQgZGV2aWNlcwotICogJ21kX3UuaCcgaG9sZHMgdGhlIHVzZXIgPD0+IGtlcm5lbCBBUEkKLSAqCi0gKiAnbWRfay5oJyBob2xkcyBrZXJuZWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9rLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUQKLQotLyoKLSAqIERpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBhcmUgbm90IGNvbXBhdGlibGUuCi0gKiBEaWZmZXJlbnQgbWlub3IgdmVyc2lvbnMgYXJlIG9ubHkgZG93bndhcmQgY29tcGF0aWJsZS4KLSAqIERpZmZlcmVudCBwYXRjaGxldmVsIHZlcnNpb25zIGFyZSBkb3dud2FyZCBhbmQgdXB3YXJkIGNvbXBhdGlibGUuCi0gKi8KLSNkZWZpbmUgTURfTUFKT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1EX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgOTAKLS8qCi0gKiBNRF9QQVRDSExFVkVMX1ZFUlNJT04gaW5kaWNhdGVzIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgotICogPj0xIG1lYW5zIGRpZmZlcmVudCBzdXBlcmJsb2NrIGZvcm1hdHMgYXJlIHNlbGVjdGFibGUgdXNpbmcgU0VUX0FSUkFZX0lORk8KLSAqICAgICBhbmQgbWFqb3JfdmVyc2lvbi9taW5vcl92ZXJzaW9uIGFjY29yZGluZ2x5Ci0gKiA+PTIgbWVhbnMgdGhhdCBJbnRlcm5hbCBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQgYnkgc2V0dGluZyBNRF9TQl9CSVRNQVBfUFJFU0VOVAotICogICAgIGluIHRoZSBzdXBlciBzdGF0dXMgYnl0ZQotICogPj0zIG1lYW5zIHRoYXQgYml0bWFwIHN1cGVyYmxvY2sgdmVyc2lvbiA0IGlzIHN1cHBvcnRlZCwgd2hpY2ggdXNlcwotICogICAgIGxpdHRsZS1lbmRpbmcgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW4gaG9zdC1lbmRpYW4KLSAqLwotI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDMKLQotZXh0ZXJuIGludCBtZHBfbWFqb3I7Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCi0JCQkJbWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOwotZXh0ZXJuIHZvaWQgbWRfd2FrZXVwX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7Ci1leHRlcm4gdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldik7Ci1leHRlcm4gdm9pZCBtZF93cml0ZV9zdGFydChtZGRldl90ICptZGRldiwgc3RydWN0IGJpbyAqYmkpOwotZXh0ZXJuIHZvaWQgbWRfd3JpdGVfZW5kKG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKLWV4dGVybiB2b2lkIG1kX2Vycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLQotZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCi0JCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCi0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKLWV4dGVybiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfbmV3X2V2ZW50KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKLQotI2VuZGlmIC8qIENPTkZJR19NRCAqLwotI2VuZGlmIAotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaAppbmRleCA3MTkyMDM1Li5mYjFhYmIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKQEAgLTE1LDYgKzE1LDI0IEBACiAjaWZuZGVmIF9NRF9VX0gKICNkZWZpbmUgX01EX1VfSAogCisvKgorICogRGlmZmVyZW50IG1ham9yIHZlcnNpb25zIGFyZSBub3QgY29tcGF0aWJsZS4KKyAqIERpZmZlcmVudCBtaW5vciB2ZXJzaW9ucyBhcmUgb25seSBkb3dud2FyZCBjb21wYXRpYmxlLgorICogRGlmZmVyZW50IHBhdGNobGV2ZWwgdmVyc2lvbnMgYXJlIGRvd253YXJkIGFuZCB1cHdhcmQgY29tcGF0aWJsZS4KKyAqLworI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICA5MAorLyoKKyAqIE1EX1BBVENITEVWRUxfVkVSU0lPTiBpbmRpY2F0ZXMga2VybmVsIGZ1bmN0aW9uYWxpdHkuCisgKiA+PTEgbWVhbnMgZGlmZmVyZW50IHN1cGVyYmxvY2sgZm9ybWF0cyBhcmUgc2VsZWN0YWJsZSB1c2luZyBTRVRfQVJSQVlfSU5GTworICogICAgIGFuZCBtYWpvcl92ZXJzaW9uL21pbm9yX3ZlcnNpb24gYWNjb3JkaW5nbHkKKyAqID49MiBtZWFucyB0aGF0IEludGVybmFsIGJpdG1hcHMgYXJlIHN1cHBvcnRlZCBieSBzZXR0aW5nIE1EX1NCX0JJVE1BUF9QUkVTRU5UCisgKiAgICAgaW4gdGhlIHN1cGVyIHN0YXR1cyBieXRlCisgKiA+PTMgbWVhbnMgdGhhdCBiaXRtYXAgc3VwZXJibG9jayB2ZXJzaW9uIDQgaXMgc3VwcG9ydGVkLCB3aGljaCB1c2VzCisgKiAgICAgbGl0dGxlLWVuZGluZyByZXByZXNlbnRhdGlvbiByYXRoZXIgdGhhbiBob3N0LWVuZGlhbgorICovCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAgICAgICAgICAgMworCiAvKiBpb2N0bHMgKi8KIAogLyogc3RhdHVzICovCkBAIC00Niw2ICs2NCwxMiBAQAogI2RlZmluZSBTVE9QX0FSUkFZX1JPCQlfSU8gKE1EX01BSk9SLCAweDMzKQogI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXCV9JTyAoTURfTUFKT1IsIDB4MzQpCiAKKy8qIDYzIHBhcnRpdGlvbnMgd2l0aCB0aGUgYWx0ZXJuYXRlIG1ham9yIG51bWJlciAobWRwKSAqLworI2RlZmluZSBNZHBNaW5vclNoaWZ0IDYKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gaW50IG1kcF9tYWpvcjsKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBtZHVfdmVyc2lvbl9zIHsKIAlpbnQgbWFqb3I7CiAJaW50IG1pbm9yOwpAQCAtODUsNiArMTA5LDE3IEBACiAKIH0gbWR1X2FycmF5X2luZm9fdDsKIAorLyogbm9uLW9idmlvdXMgdmFsdWVzIGZvciAnbGV2ZWwnICovCisjZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQorI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKKyNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCisKKy8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKKyAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCisgKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqLworI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCisKIHR5cGVkZWYgc3RydWN0IG1kdV9kaXNrX2luZm9fcyB7CiAJLyoKIAkgKiBjb25maWd1cmF0aW9uL3N0YXR1cyBvZiBvbmUgcGFydGljdWxhciBkaXNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2LmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaApzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2LmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvcmFpZC9wcS5oCmluZGV4IDk4ZGNkZTguLmQ5MjQ4MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaApAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNywxNCArMTcsNyBAQAogCiAvKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCiAjZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDUuaD4KLQotdHlwZWRlZiByYWlkNV9jb25mX3QgcmFpZDZfY29uZl90OyAvKiBTYW1lIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogQWRkaXRpb25hbCBjb21wdXRlX3Bhcml0eSBtb2RlIC0tIHVwZGF0ZXMgdGhlIHBhcml0eSB3L28gTE9DS0lORyAqLwotI2RlZmluZSBVUERBVEVfUEFSSVRZCTQKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogLyogV2UgbmVlZCBhIHByZS16ZXJvZWQgcGFnZS4uLiBpZiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUga2VybmVsLXByb3ZpZGVkCiAgICBvbmUgZGVmaW5lIGl0IGhlcmUgKi8KQEAgLTY4LDYgKzYxLDEwIEBACiAjZGVmaW5lIGVuYWJsZV9rZXJuZWxfYWx0aXZlYygpCiAjZGVmaW5lIGRpc2FibGVfa2VybmVsX2FsdGl2ZWMoKQogCisjZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQorI2RlZmluZSBNT0RVTEVfTElDRU5TRShsaWNlbmNlKQorI2RlZmluZSBzdWJzeXNfaW5pdGNhbGwoeCkKKyNkZWZpbmUgbW9kdWxlX2V4aXQoeCkKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIFJvdXRpbmUgY2hvaWNlcyAqLwpAQCAtOTgsOSArOTUsMTEgQEAKIGV4dGVybiBjb25zdCB1OCByYWlkNl9nZmV4aVsyNTZdICAgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CiAKIC8qIFJlY292ZXJ5IHJvdXRpbmVzICovCi12b2lkIHJhaWQ2XzJkYXRhX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgdm9pZCAqKnB0cnMpOwordm9pZCByYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCSAgICAgICB2b2lkICoqcHRycyk7CiB2b2lkIHJhaWQ2X2RhdGFwX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIHZvaWQgKipwdHJzKTsKLXZvaWQgcmFpZDZfZHVhbF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHZvaWQgKipwdHJzKTsKK3ZvaWQgcmFpZDZfZHVhbF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCSAgICAgIHZvaWQgKipwdHJzKTsKIAogLyogU29tZSBkZWZpbml0aW9ucyB0byBhbGxvdyBjb2RlIHRvIGJlIGNvbXBpbGVkIGZvciB0ZXN0aW5nIGluIHVzZXJzcGFjZSAqLwogI2lmbmRlZiBfX0tFUk5FTF9fCkBAIC0xMDgsOCArMTA3LDExIEBACiAjIGRlZmluZSBqaWZmaWVzCXJhaWQ2X2ppZmZpZXMoKQogIyBkZWZpbmUgcHJpbnRrIAlwcmludGYKICMgZGVmaW5lIEdGUF9LRVJORUwJMAotIyBkZWZpbmUgX19nZXRfZnJlZV9wYWdlcyh4LHkpCSgodW5zaWduZWQgbG9uZyltbWFwKE5VTEwsIFBBR0VfU0laRSA8PCAoeSksIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAwLCAwKSkKLSMgZGVmaW5lIGZyZWVfcGFnZXMoeCx5KQltdW5tYXAoKHZvaWQgKikoeCksICh5KSpQQUdFX1NJWkUpCisjIGRlZmluZSBfX2dldF9mcmVlX3BhZ2VzKHgsIHkpCSgodW5zaWduZWQgbG9uZyltbWFwKE5VTEwsIFBBR0VfU0laRSA8PCAoeSksIFwKKwkJCQkJCSAgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsICAgXAorCQkJCQkJICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLFwKKwkJCQkJCSAgICAgMCwgMCkpCisjIGRlZmluZSBmcmVlX3BhZ2VzKHgsIHkpCW11bm1hcCgodm9pZCAqKSh4KSwgKHkpKlBBR0VfU0laRSkKIAogc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oCmluZGV4IDNlMTIwNTguLjVhMjEwOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC94b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQveG9yLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9YT1JfSAogI2RlZmluZSBfWE9SX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQogI2RlZmluZSBNQVhfWE9SX0JMT0NLUyA0CiAKIGV4dGVybiB2b2lkIHhvcl9ibG9ja3ModW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmgKaW5kZXggZTg0YjBhOS4uYTZkMDE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvYnEyNDAyMi5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2JxMjQwMjIuaApAQCAtMTAsNiArMTAsOCBAQAogICoKICAqLwogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogLyoqCiAgKiBicTI0MDIyX21hY2hfaW5mbyAtIHBsYXRmb3JtIGRhdGEgZm9yIGJxMjQwMjIKICAqIEBncGlvX25jZTogR1BJTyBsaW5lIGNvbm5lY3RlZCB0byB0aGUgbkNFIHBpbiwgdXNlZCB0byBlbmFibGUgLyBkaXNhYmxlIGNoYXJnaW5nCkBAIC0xOCw0ICsyMCw1IEBACiBzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gewogCWludCBncGlvX25jZTsKIAlpbnQgZ3Bpb19pc2V0MjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDgwMWJmNzcuLjI3N2Y0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTg4LDYgKzg4LDcgQEAKICAqIEZBSUwgICAgICAgICAgIFJlZ3VsYXRvciBvdXRwdXQgaGFzIGZhaWxlZC4KICAqIE9WRVJfVEVNUCAgICAgIFJlZ3VsYXRvciBvdmVyIHRlbXAuCiAgKiBGT1JDRV9ESVNBQkxFICBSZWd1bGF0b3Igc2h1dCBkb3duIGJ5IHNvZnR3YXJlLgorICogVk9MVEFHRV9DSEFOR0UgUmVndWxhdG9yIHZvbHRhZ2UgY2hhbmdlZC4KICAqCiAgKiBOT1RFOiBUaGVzZSBldmVudHMgY2FuIGJlIE9SJ2VkIHRvZ2V0aGVyIHdoZW4gcGFzc2VkIGludG8gaGFuZGxlci4KICAqLwpAQCAtOTgsNiArOTksNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRkFJTAkJCTB4MDgKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX09WRVJfVEVNUAkJMHgxMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRQkJMHgyMAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfVk9MVEFHRV9DSEFOR0UJCTB4NDAKIAogc3RydWN0IHJlZ3VsYXRvcjsKIApAQCAtMTQwLDYgKzE0Miw4IEBACiB2b2lkIHJlZ3VsYXRvcl9idWxrX2ZyZWUoaW50IG51bV9jb25zdW1lcnMsCiAJCQkgc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKmNvbnN1bWVycyk7CiAKK2ludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKTsKK2ludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsIGludCBtaW5fdVYsIGludCBtYXhfdVYpOwogaW50IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDJkYWUwNTcuLjQ4NDhkOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICoKLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjEsMjUgKzIxLDM4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2RldjsKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCitlbnVtIHJlZ3VsYXRvcl9zdGF0dXMgeworCVJFR1VMQVRPUl9TVEFUVVNfT0ZGLAorCVJFR1VMQVRPUl9TVEFUVVNfT04sCisJUkVHVUxBVE9SX1NUQVRVU19FUlJPUiwKKwkvKiBmYXN0L25vcm1hbC9pZGxlL3N0YW5kYnkgYXJlIGZsYXZvcnMgb2YgIm9uIiAqLworCVJFR1VMQVRPUl9TVEFUVVNfRkFTVCwKKwlSRUdVTEFUT1JfU1RBVFVTX05PUk1BTCwKKwlSRUdVTEFUT1JfU1RBVFVTX0lETEUsCisJUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZLAorfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX29wcyAtIHJlZ3VsYXRvciBvcGVyYXRpb25zLgogICoKLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyByZWd1bGF0b3Igb3BlcmF0aW9ucyB3aGljaCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKLSAqIHJlZ3VsYXRvciBjaGlwIGRyaXZlcnMuCi0gKgotICogQGVuYWJsZTogRW5hYmxlIHRoZSByZWd1bGF0b3IuCi0gKiBAZGlzYWJsZTogRGlzYWJsZSB0aGUgcmVndWxhdG9yLgorICogQGVuYWJsZTogQ29uZmlndXJlIHRoZSByZWd1bGF0b3IgYXMgZW5hYmxlZC4KKyAqIEBkaXNhYmxlOiBDb25maWd1cmUgdGhlIHJlZ3VsYXRvciBhcyBkaXNhYmxlZC4KICAqIEBpc19lbmFibGVkOiBSZXR1cm4gMSBpZiB0aGUgcmVndWxhdG9yIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlLgogICoKICAqIEBzZXRfdm9sdGFnZTogU2V0IHRoZSB2b2x0YWdlIGZvciB0aGUgcmVndWxhdG9yIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkLgogICogICAgICAgICAgICAgICBUaGUgZHJpdmVyIHNob3VsZCBzZWxlY3QgdGhlIHZvbHRhZ2UgY2xvc2VzdCB0byBtaW5fdVYuCiAgKiBAZ2V0X3ZvbHRhZ2U6IFJldHVybiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdm9sdGFnZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBsaXN0X3ZvbHRhZ2U6IFJldHVybiBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2b2x0YWdlcywgaW4gbWljcm92b2x0czsgemVybworICoJaWYgdGhlIHNlbGVjdG9yIGluZGljYXRlcyBhIHZvbHRhZ2UgdGhhdCBpcyB1bnVzYWJsZSBvbiB0aGlzIHN5c3RlbTsKKyAqCW9yIG5lZ2F0aXZlIGVycm5vLiAgU2VsZWN0b3JzIHJhbmdlIGZyb20gemVybyB0byBvbmUgbGVzcyB0aGFuCisgKglyZWd1bGF0b3JfZGVzYy5uX3ZvbHRhZ2VzLiAgVm9sdGFnZXMgbWF5IGJlIHJlcG9ydGVkIGluIGFueSBvcmRlci4KICAqCiAgKiBAc2V0X2N1cnJlbnRfbGltaXQ6IENvbmZpZ3VyZSBhIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCi0gKiBAZ2V0X2N1cnJlbnRfbGltaXQ6IEdldCB0aGUgbGltaXQgZm9yIGEgY3VycmVudC1saW1pdGVkIHJlZ3VsYXRvci4KKyAqIEBnZXRfY3VycmVudF9saW1pdDogR2V0IHRoZSBjb25maWd1cmVkIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCiAgKgotICogQHNldF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yLgotICogQGdldF9tb2RlOiBHZXQgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSByZWd1bGF0b3IuCisgKiBAZ2V0X21vZGU6IEdldCB0aGUgY29uZmlndXJlZCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBnZXRfc3RhdHVzOiBSZXR1cm4gYWN0dWFsIChub3QgYXMtY29uZmlndXJlZCkgc3RhdHVzIG9mIHJlZ3VsYXRvciwgYXMgYQorICoJUkVHVUxBVE9SX1NUQVRVUyB2YWx1ZSAob3IgbmVnYXRpdmUgZXJybm8pCiAgKiBAZ2V0X29wdGltdW1fbW9kZTogR2V0IHRoZSBtb3N0IGVmZmljaWVudCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvcgogICogICAgICAgICAgICAgICAgICAgIHdoZW4gcnVubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KICAqCkBAIC01MSw5ICs2NCwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZC4KICAqIEBzZXRfc3VzcGVuZF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yIHdoZW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyAqCisgKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgcmVndWxhdG9yIG9wZXJhdGlvbnMgd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIGJ5CisgKiByZWd1bGF0b3IgY2hpcCBkcml2ZXJzLgogICovCiBzdHJ1Y3QgcmVndWxhdG9yX29wcyB7CiAKKwkvKiBlbnVtZXJhdGUgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisJaW50ICgqbGlzdF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgdW5zaWduZWQgc2VsZWN0b3IpOworCiAJLyogZ2V0L3NldCByZWd1bGF0b3Igdm9sdGFnZSAqLwogCWludCAoKnNldF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiAJaW50ICgqZ2V0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKQEAgLTcyLDYgKzkxLDEzIEBACiAJaW50ICgqc2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiAJdW5zaWduZWQgaW50ICgqZ2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKIAorCS8qIHJlcG9ydCByZWd1bGF0b3Igc3RhdHVzIC4uLiBtb3N0IG90aGVyIGFjY2Vzc29ycyByZXBvcnQKKwkgKiBjb250cm9sIGlucHV0cywgdGhpcyByZXBvcnRzIHJlc3VsdHMgb2YgY29tYmluaW5nIGlucHV0cworCSAqIGZyb20gTGludXggKGFuZCBvdGhlciBzb3VyY2VzKSB3aXRoIHRoZSBhY3R1YWwgbG9hZC4KKwkgKiByZXR1cm5zIFJFR1VMQVRPUl9TVEFUVVNfKiBvciBuZWdhdGl2ZSBlcnJuby4KKwkgKi8KKwlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKKwogCS8qIGdldCBtb3N0IGVmZmljaWVudCByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUgZm9yIGxvYWQgKi8KIAl1bnNpZ25lZCBpbnQgKCpnZXRfb3B0aW11bV9tb2RlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IGlucHV0X3VWLAogCQkJCQkgIGludCBvdXRwdXRfdVYsIGludCBsb2FkX3VBKTsKQEAgLTEwNiw2ICsxMzIsNyBAQAogICoKICAqIEBuYW1lOiBJZGVudGlmeWluZyBuYW1lIGZvciB0aGUgcmVndWxhdG9yLgogICogQGlkOiBOdW1lcmljYWwgaWRlbnRpZmllciBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBuX3ZvbHRhZ2VzOiBOdW1iZXIgb2Ygc2VsZWN0b3JzIGF2YWlsYWJsZSBmb3Igb3BzLmxpc3Rfdm9sdGFnZSgpLgogICogQG9wczogUmVndWxhdG9yIG9wZXJhdGlvbnMgdGFibGUuCiAgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgcmVndWxhdG9yLgogICogQHR5cGU6IEluZGljYXRlcyBpZiB0aGUgcmVndWxhdG9yIGlzIGEgdm9sdGFnZSBvciBjdXJyZW50IHJlZ3VsYXRvci4KQEAgLTExNCwxNCArMTQxLDQ4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGlkOworCXVuc2lnbmVkIG5fdm9sdGFnZXM7CiAJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wczsKIAlpbnQgaXJxOwogCWVudW0gcmVndWxhdG9yX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CiAKKy8qCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2RldgorICoKKyAqIFZvbHRhZ2UgLyBDdXJyZW50IHJlZ3VsYXRvciBjbGFzcyBkZXZpY2UuIE9uZSBmb3IgZWFjaAorICogcmVndWxhdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgZGlyZWN0bHkgYnkgYW55dGhpbmcgZXhjZXB0IHRoZSByZWd1bGF0b3IKKyAqIGNvcmUgYW5kIG5vdGlmaWNhdGlvbiBpbmplY3Rpb24gKHdoaWNoIHNob3VsZCB0YWtlIHRoZSBtdXRleCBhbmQgZG8KKyAqIG5vIG90aGVyIGRpcmVjdCBhY2Nlc3MpLgorICovCitzdHJ1Y3QgcmVndWxhdG9yX2RldiB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOworCWludCB1c2VfY291bnQ7CisKKwkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHN1cHBsaWVkIHJlZ3VsYXRvcnMgKi8KKworCS8qIGxpc3RzIHdlIG93biAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc3VtZXJfbGlzdDsgLyogY29uc3VtZXJzIHdlIHN1cHBseSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3VwcGx5X2xpc3Q7IC8qIHJlZ3VsYXRvcnMgd2Ugc3VwcGx5ICovCisKKwlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcjsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIGNvbnN1bWVyIGxvY2sgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHM7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseTsJLyogZm9yIHRyZWUgKi8KKworCXZvaWQgKnJlZ19kYXRhOwkJLyogcmVndWxhdG9yX2RldiBkYXRhICovCit9OworCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0Jc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcml2ZXJfZGF0YSk7CisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXZvaWQgKmRyaXZlcl9kYXRhKTsKIHZvaWQgcmVndWxhdG9yX3VucmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwogCiBpbnQgcmVndWxhdG9yX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaAppbmRleCAxMzg3YTVkLi45MWI0ZGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKQEAgLTE0LDkgKzE0LDEyIEBACiAjaWZuZGVmIF9fUkVHVUxBVE9SX0ZJWEVEX0gKICNkZWZpbmUgX19SRUdVTEFUT1JfRklYRURfSAogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHsKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggMzc5NDc3My4uYmFjNjRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTczLDcgKzczLDkgQEAKICAqCiAgKiBAYWx3YXlzX29uOiBTZXQgaWYgdGhlIHJlZ3VsYXRvciBzaG91bGQgbmV2ZXIgYmUgZGlzYWJsZWQuCiAgKiBAYm9vdF9vbjogU2V0IGlmIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW5pdGlhbGx5Ci0gKiAgICAgICAgICAgc3RhcnRlZC4KKyAqICAgICAgICAgICBzdGFydGVkLiAgSWYgdGhlIHJlZ3VsYXRvciBpcyBub3QgZW5hYmxlZCBieSB0aGUgaGFyZHdhcmUgb3IKKyAqICAgICAgICAgICBib290bG9hZGVyIHRoZW4gaXQgd2lsbCBiZSBlbmFibGVkIHdoZW4gdGhlIGNvbnN0cmFpbnRzIGFyZQorICogICAgICAgICAgIGFwcGxpZWQuCiAgKiBAYXBwbHlfdVY6IEFwcGx5IHRoZSB2b2x0YWdlIGNvbnN0cmFpbnQgd2hlbiBpbml0aWFsaXNpbmcuCiAgKgogICogQGlucHV0X3VWOiBJbnB1dCB2b2x0YWdlIGZvciByZWd1bGF0b3Igd2hlbiBzdXBwbGllZCBieSBhbm90aGVyIHJlZ3VsYXRvci4KQEAgLTgzLDYgKzg1LDcgQEAKICAqIEBzdGF0ZV9zdGFuZGJ5OiBTdGF0ZSBmb3IgcmVndWxhdG9yIHdoZW4gc3lzdGVtIGlzIHN1c3BlbmRlZCBpbiBzdGFuZGJ5CiAgKiAgICAgICAgICAgICAgICAgbW9kZS4KICAqIEBpbml0aWFsX3N0YXRlOiBTdXNwZW5kIHN0YXRlIHRvIHNldCBieSBkZWZhdWx0LgorICogQGluaXRpYWxfbW9kZTogTW9kZSB0byBzZXQgYXQgc3RhcnR1cC4KICAqLwogc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgewogCkBAIC0xMTEsNiArMTE0LDkgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIHN0YXRlX3N0YW5kYnk7CiAJc3VzcGVuZF9zdGF0ZV90IGluaXRpYWxfc3RhdGU7IC8qIHN1c3BlbmQgc3RhdGUgdG8gc2V0IGF0IGluaXQgKi8KIAorCS8qIG1vZGUgdG8gc2V0IG9uIHN0YXJ0dXAgKi8KKwl1bnNpZ25lZCBpbnQgaW5pdGlhbF9tb2RlOworCiAJLyogY29uc3RyaWFudCBmbGFncyAqLwogCXVuc2lnbmVkIGFsd2F5c19vbjoxOwkvKiByZWd1bGF0b3IgbmV2ZXIgb2ZmIHdoZW4gc3lzdGVtIGlzIG9uICovCiAJdW5zaWduZWQgYm9vdF9vbjoxOwkvKiBib290bG9hZGVyL2Zpcm13YXJlIGVuYWJsZWQgcmVndWxhdG9yICovCkBAIC0xNjAsNCArMTY2LDYgQEAKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAordm9pZCByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHModm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKaW5kZXggZmUwMGY3OC4uOGNjNjU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCkBAIC00OSwxMyArNDksMTIgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiBzdHJ1Y3QgcG9zaXhfYWNsICpyZWlzZXJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKIGludCByZWlzZXJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAoraW50IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyKTsKLWV4dGVybiBpbnQgcmVpc2VyZnNfeGF0dHJfcG9zaXhfYWNsX2luaXQodm9pZCkgX19pbml0OwotZXh0ZXJuIGludCByZWlzZXJmc194YXR0cl9wb3NpeF9hY2xfZXhpdCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKIAogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtNzUsMjMgKzc0LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBlMzU2Yzk5Li4yMjQ1Yzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC01OCw4ICs1OCw2IEBACiAjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQogI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCiAKLS8qIHhhdHRyIHN0dWZmICovCi0jZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQogc3RydWN0IGZpZDsKIAogLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQpAQCAtMTA0LDE1ICsxMDIsMjEgQEAKICovCiAjZGVmaW5lIFJFSVNFUkZTX0RFQlVHX0NPREUgNQkvKiBleHRyYSBtZXNzYWdlcyB0byBoZWxwIGZpbmQvZGVidWcgZXJyb3JzICovCiAKLXZvaWQgcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgX19yZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqaWQsCisJCQkgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pOworI2RlZmluZSByZWlzZXJmc193YXJuaW5nKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwkgX19yZWlzZXJmc193YXJuaW5nKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiAvKiBhc3NlcnRpb25zIGhhbmRsaW5nICovCiAKIC8qKiBhbHdheXMgY2hlY2sgYSBjb25kaXRpb24gYW5kIHBhbmljIGlmIGl0J3MgZmFsc2UuICovCi0jZGVmaW5lIF9fUkFTU0VSVCggY29uZCwgc2NvbmQsIGZvcm1hdCwgYXJncy4uLiApCQkJCQlcCi1pZiggISggY29uZCApICkgCQkJCQkJCQlcCi0gIHJlaXNlcmZzX3BhbmljKCBOVUxMLCAicmVpc2VyZnNbJWldOiBhc3NlcnRpb24gIiBzY29uZCAiIGZhaWxlZCBhdCAiCVwKLQkJICBfX0ZJTEVfXyAiOiVpOiVzOiAiIGZvcm1hdCAiXG4iLAkJXAotCQkgIGluX2ludGVycnVwdCgpID8gLTEgOiB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19MSU5FX18gLCBfX2Z1bmNfXyAsICMjYXJncyApCisjZGVmaW5lIF9fUkFTU0VSVChjb25kLCBzY29uZCwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoY29uZCkpCQkJCQkJCVwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgImFzc2VydGlvbiBmYWlsdXJlIiwgIigiICNjb25kICIpIGF0ICIgXAorCQkJICAgICAgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCisJCQkgICAgICAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBcCisJCQkgICAgICAgX19MSU5FX18sIF9fZnVuY19fICwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUkFTU0VSVChjb25kLCBmb3JtYXQsIGFyZ3MuLi4pIF9fUkFTU0VSVChjb25kLCAjY29uZCwgZm9ybWF0LCAjI2FyZ3MpCiAKQEAgLTE5Niw3ICsyMDAsMTEgQEAKIAlfX2xlMzIgc19mbGFnczsJCS8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLwogCXVuc2lnbmVkIGNoYXIgc191dWlkWzE2XTsJLyogZmlsZXN5c3RlbSB1bmlxdWUgaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07CS8qIGZpbGVzeXN0ZW0gdm9sdW1lIGxhYmVsICovCi0JY2hhciBzX3VudXNlZFs4OF07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCisJX19sZTE2IHNfbW50X2NvdW50OwkJLyogQ291bnQgb2YgbW91bnRzIHNpbmNlIGxhc3QgZnNjayAqLworCV9fbGUxNiBzX21heF9tbnRfY291bnQ7CQkvKiBNYXhpbXVtIG1vdW50cyBiZWZvcmUgY2hlY2sgKi8KKwlfX2xlMzIgc19sYXN0Y2hlY2s7CQkvKiBUaW1lc3RhbXAgb2YgbGFzdCBmc2NrICovCisJX19sZTMyIHNfY2hlY2tfaW50ZXJ2YWw7CS8qIEludGVydmFsIGJldHdlZW4gY2hlY2tzICovCisJY2hhciBzX3VudXNlZFs3Nl07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCiAJCQkJICogcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoKQogCQkJCSAqIHNvIGFueSBhZGRpdGlvbnMgbXVzdCBiZSB1cGRhdGVkCiAJCQkJICogdGhlcmUgYXMgd2VsbC4gKi8KQEAgLTU3OCwxMCArNTg2LDggQEAKIAkJcmV0dXJuIFRZUEVfRElSRUNUOwogCWNhc2UgVjFfRElSRU5UUllfVU5JUVVFTkVTUzoKIAkJcmV0dXJuIFRZUEVfRElSRU5UUlk7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAwOiB1bmtub3duIHVuaXF1ZW5lc3MgJWQiLAotCQkJCSB1bmlxdWVuZXNzKTsKIAljYXNlIFYxX0FOWV9VTklRVUVORVNTOgorCWRlZmF1bHQ6CiAJCXJldHVybiBUWVBFX0FOWTsKIAl9CiB9CkBAIC01OTgsOSArNjA0LDggQEAKIAkJcmV0dXJuIFYxX0RJUkVDVF9VTklRVUVORVNTOwogCWNhc2UgVFlQRV9ESVJFTlRSWToKIAkJcmV0dXJuIFYxX0RJUkVOVFJZX1VOSVFVRU5FU1M7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAxOiB1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKIAljYXNlIFRZUEVfQU5ZOgorCWRlZmF1bHQ6CiAJCXJldHVybiBWMV9BTllfVU5JUVVFTkVTUzsKIAl9CiB9CkBAIC03MTIsOSArNzE3LDkgQEAKICNkZWZpbmUgaXNfaW5kaXJlY3RfY3B1X2loKGloKSAoaXNfaW5kaXJlY3RfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKICNkZWZpbmUgaXNfc3RhdGRhdGFfY3B1X2loKGloKSAoaXNfc3RhdGRhdGFfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKIAotI2RlZmluZSBJX0tfS0VZX0lOX0lURU0ocF9zX2loLCBwX3Nfa2V5LCBuX2Jsb2Nrc2l6ZSkgXAotICAgICggISBDT01QX1NIT1JUX0tFWVMocF9zX2loLCBwX3Nfa2V5KSAmJiBcCi0gICAgICAgICAgSV9PRkZfQllURV9JTl9JVEVNKHBfc19paCwga19vZmZzZXQgKHBfc19rZXkpLCBuX2Jsb2Nrc2l6ZSkgKQorI2RlZmluZSBJX0tfS0VZX0lOX0lURU0oaWgsIGtleSwgbl9ibG9ja3NpemUpIFwKKyAgICAoIUNPTVBfU0hPUlRfS0VZUyhpaCwga2V5KSAmJiBcCisJICBJX09GRl9CWVRFX0lOX0lURU0oaWgsIGtfb2Zmc2V0KGtleSksIG5fYmxvY2tzaXplKSkKIAogLyogbWF4aW1hbCBsZW5ndGggb2YgaXRlbSAqLwogI2RlZmluZSBNQVhfSVRFTV9MRU4oYmxvY2tfc2l6ZSkgKGJsb2NrX3NpemUgLSBCTEtIX1NJWkUgLSBJSF9TSVpFKQpAQCAtNzcwLDI1ICs3NzUsMjUgQEAKICNkZWZpbmUgRElTS19MRUFGX05PREVfTEVWRUwgIDEJLyogTGVhZiBub2RlIGxldmVsLiAqLwogCiAvKiBHaXZlbiB0aGUgYnVmZmVyIGhlYWQgb2YgYSBmb3JtYXR0ZWQgbm9kZSwgcmVzb2x2ZSB0byB0aGUgYmxvY2sgaGVhZCBvZiB0aGF0IG5vZGUuICovCi0jZGVmaW5lIEJfQkxLX0hFQUQocF9zX2JoKSAgICAgICAgICAgICgoc3RydWN0IGJsb2NrX2hlYWQgKikoKHBfc19iaCktPmJfZGF0YSkpCisjZGVmaW5lIEJfQkxLX0hFQUQoYmgpCQkJKChzdHJ1Y3QgYmxvY2tfaGVhZCAqKSgoYmgpLT5iX2RhdGEpKQogLyogTnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIGluIGJ1ZmZlci4gKi8KLSNkZWZpbmUgQl9OUl9JVEVNUyhwX3NfYmgpICAgICAgICAgICAgKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0xFVkVMKHBfc19iaCkgICAgICAgICAgICAgICAoYmxraF9sZXZlbChCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAgICAgICAgICAoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQocF9zX2JoKSkpCisjZGVmaW5lIEJfTlJfSVRFTVMoYmgpCQkJKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSkpCisjZGVmaW5lIEJfTEVWRUwoYmgpCQkJKGJsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCkpKQorI2RlZmluZSBCX0ZSRUVfU1BBQ0UoYmgpCQkoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpKSkKIAotI2RlZmluZSBQVVRfQl9OUl9JVEVNUyhwX3NfYmgsdmFsKSAgICBkbyB7IHNldF9ibGtoX25yX2l0ZW0oQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0xFVkVMKHBfc19iaCx2YWwpICAgICAgIGRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UocF9zX2JoLHZhbCkgIGRvIHsgc2V0X2Jsa2hfZnJlZV9zcGFjZShCX0JMS19IRUFEKHBfc19iaCksdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTlJfSVRFTVMoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSwgdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTEVWRUwoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCksIHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UoYmgsIHZhbCkJZG8geyBzZXRfYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpLCB2YWwpOyB9IHdoaWxlICgwKQogCiAvKiBHZXQgcmlnaHQgZGVsaW1pdGluZyBrZXkuIC0tIGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUgQl9QUklHSFRfREVMSU1fS0VZKHBfc19iaCkgICAoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQocF9zX2JoKSkpKQorI2RlZmluZSBCX1BSSUdIVF9ERUxJTV9LRVkoYmgpCQkoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQoYmgpKSkpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBsZWFmLiAqLwotI2RlZmluZSBCX0lTX0lURU1TX0xFVkVMKHBfc19iaCkgICAgIChCX0xFVkVMKHBfc19iaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCisjZGVmaW5lIEJfSVNfSVRFTVNfTEVWRUwoYmgpCQkoQl9MRVZFTChiaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBpbnRlcm5hbCBub2RlICovCi0jZGVmaW5lIEJfSVNfS0VZU19MRVZFTChwX3NfYmgpICAgICAgKEJfTEVWRUwocF9zX2JoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQl9MRVZFTChwX3NfYmgpIDw9IE1BWF9IRUlHSFQpCisjZGVmaW5lIEJfSVNfS0VZU19MRVZFTChiaCkgICAgICAoQl9MRVZFTChiaCkgPiBESVNLX0xFQUZfTk9ERV9MRVZFTCBcCisJCQkJCSAgICAmJiBCX0xFVkVMKGJoKSA8PSBNQVhfSEVJR0hUKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQgREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMzgsMTIgKzExNDMsMTMgQEAKICNkZWZpbmUgcHV0X2RjX3NpemUoZGNfcCwgdmFsKSAgIGRvIHsgKGRjX3ApLT5kY19zaXplID0gY3B1X3RvX2xlMTYodmFsKTsgfSB3aGlsZSgwKQogCiAvKiBHZXQgZGlzayBjaGlsZCBieSBidWZmZXIgaGVhZGVyIGFuZCBwb3NpdGlvbiBpbiB0aGUgdHJlZSBub2RlLiAqLwotI2RlZmluZSBCX05fQ0hJTEQocF9zX2JoLG5fcG9zKSAgKChzdHJ1Y3QgZGlza19jaGlsZCAqKVwKLSgocF9zX2JoKS0+Yl9kYXRhK0JMS0hfU0laRStCX05SX0lURU1TKHBfc19iaCkqS0VZX1NJWkUrRENfU0laRSoobl9wb3MpKSkKKyNkZWZpbmUgQl9OX0NISUxEKGJoLCBuX3BvcykgICgoc3RydWN0IGRpc2tfY2hpbGQgKilcCisoKGJoKS0+Yl9kYXRhICsgQkxLSF9TSVpFICsgQl9OUl9JVEVNUyhiaCkgKiBLRVlfU0laRSArIERDX1NJWkUgKiAobl9wb3MpKSkKIAogLyogR2V0IGRpc2sgY2hpbGQgbnVtYmVyIGJ5IGJ1ZmZlciBoZWFkZXIgYW5kIHBvc2l0aW9uIGluIHRoZSB0cmVlIG5vZGUuICovCi0jZGVmaW5lIEJfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zKSAoZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpKSkKLSNkZWZpbmUgUFVUX0JfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zLCB2YWwpIChwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpLCB2YWwgKSkKKyNkZWZpbmUgQl9OX0NISUxEX05VTShiaCwgbl9wb3MpIChkY19ibG9ja19udW1iZXIoQl9OX0NISUxEKGJoLCBuX3BvcykpKQorI2RlZmluZSBQVVRfQl9OX0NISUxEX05VTShiaCwgbl9wb3MsIHZhbCkgXAorCQkJCShwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChiaCwgbl9wb3MpLCB2YWwpKQogCiAgLyogbWF4aW1hbCB2YWx1ZSBvZiBmaWVsZCBjaGlsZF9zaXplIGluIHN0cnVjdHVyZSBkaXNrX2NoaWxkICovCiAgLyogY2hpbGQgc2l6ZSBpcyB0aGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgaXRlbXMgYW5kIHRoZWlyIGhlYWRlcnMgKi8KQEAgLTEyMTQsMzMgKzEyMjAsMzMgQEAKIHN0cnVjdCB0cmVlcGF0aCB2YXIgPSB7LnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULCAucmVhZGEgPSAwLH0KIAogLyogR2V0IHBhdGggZWxlbWVudCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCkgICgocF9zX3BhdGgpLT5wYXRoX2VsZW1lbnRzICsobl9vZmZzZXQpKQorI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwYXRoLCBuX29mZnNldCkgICgocGF0aCktPnBhdGhfZWxlbWVudHMgKyAobl9vZmZzZXQpKQogCiAvKiBHZXQgYnVmZmVyIGhlYWRlciBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLG5fb2Zmc2V0KSAgIChQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCktPnBlX2J1ZmZlcikKKyNkZWZpbmUgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBuX29mZnNldCkgICAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9idWZmZXIpCiAKIC8qIEdldCBwb3NpdGlvbiBpbiB0aGUgZWxlbWVudCBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCxuX29mZnNldCkgKFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KS0+cGVfcG9zaXRpb24pCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIG5fb2Zmc2V0KSAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9wb3NpdGlvbikKIAotI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCkgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSAoUEFUSF9PRkZTRVRfUEJVRkZFUigocGF0aCksIChwYXRoKS0+cGF0aF9sZW5ndGgpKQogCQkJCS8qIHlvdSBrbm93LCB0byB0aGUgcGVyc29uIHdobyBkaWRuJ3QKIAkJCQkgICB3cml0ZSB0aGlzIHRoZSBtYWNybyBuYW1lIGRvZXMgbm90CiAJCQkJICAgYXQgZmlyc3Qgc3VnZ2VzdCB3aGF0IGl0IGRvZXMuCiAJCQkJICAgTWF5YmUgUE9TSVRJT05fRlJPTV9QQVRIX0VORD8gT3IKIAkJCQkgICBtYXliZSB3ZSBzaG91bGQganVzdCBmb2N1cyBvbgogCQkJCSAgIGR1bXBpbmcgcGF0aHMuLi4gLUhhbnMgKi8KLSNkZWZpbmUgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAoUEFUSF9PRkZTRVRfUE9TSVRJT04oKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgKFBBVEhfT0ZGU0VUX1BPU0lUSU9OKChwYXRoKSwgKHBhdGgpLT5wYXRoX2xlbmd0aCkpCiAKLSNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSkKKyNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBhdGgpICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkpCiAKIC8qIGluIGRvX2JhbGFuY2UgbGVhZiBoYXMgaCA9PSAwIGluIGNvbnRyYXN0IHdpdGggcGF0aCBzdHJ1Y3R1cmUsCiAgICB3aGVyZSByb290IGhhcyBsZXZlbCA9PSAwLiBUaGF0IGlzIHdoeSB3ZSBuZWVkIHRoZXNlIGRlZmluZXMgKi8KLSNkZWZpbmUgUEFUSF9IX1BCVUZGRVIocF9zX3BhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBfc19wYXRoLCBwX3NfcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCS8qIHRiLT5TW2hdICovCisjZGVmaW5lIFBBVEhfSF9QQlVGRkVSKHBhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBhdGgsIHBhdGgtPnBhdGhfbGVuZ3RoIC0gKGgpKQkvKiB0Yi0+U1toXSAqLwogI2RlZmluZSBQQVRIX0hfUFBBUkVOVChwYXRoLCBoKSBQQVRIX0hfUEJVRkZFUiAocGF0aCwgKGgpICsgMSkJLyogdGItPkZbaF0gb3IgdGItPlNbMF0tPmJfcGFyZW50ICovCiAjZGVmaW5lIFBBVEhfSF9QT1NJVElPTihwYXRoLCBoKSBQQVRIX09GRlNFVF9QT1NJVElPTiAocGF0aCwgcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCiAjZGVmaW5lIFBBVEhfSF9CX0lURU1fT1JERVIocGF0aCwgaCkgUEFUSF9IX1BPU0lUSU9OKHBhdGgsIGggKyAxKQkvKiB0Yi0+U1toXS0+Yl9pdGVtX29yZGVyICovCiAKLSNkZWZpbmUgUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc19wYXRoLCBuX2gpICgocF9zX3BhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQorI2RlZmluZSBQQVRIX0hfUEFUSF9PRkZTRVQocGF0aCwgbl9oKSAoKHBhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQogCiAjZGVmaW5lIGdldF9sYXN0X2JoKHBhdGgpIFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpCiAjZGVmaW5lIGdldF9paChwYXRoKSBQQVRIX1BJVEVNX0hFQUQocGF0aCkKQEAgLTE0NzAsNiArMTQ3NiwxNiBAQAogCWludCBiaV9wb3NpdGlvbjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX3RiKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQoreworCXJldHVybiB0YiA/IHRiLT50Yl9zYiA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX2JpKHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJcmV0dXJuIGJpID8gc2JfZnJvbV90YihiaS0+dGIpIDogTlVMTDsKK30KKwogLyogdGhlcmUgYXJlIDQgdHlwZXMgb2YgaXRlbXM6IHN0YXQgZGF0YSwgZGlyZWN0b3J5IGl0ZW0sIGluZGlyZWN0LCBkaXJlY3QuCiArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogfAkgICAgICAgICAgICB8ICBrX29mZnNldCAgfCBrX3VuaXF1ZW5lc3MgfCBtZXJnZWFibGU/IHwKQEAgLTE1MjAsNyArMTUzNiw3IEBACiAjZGVmaW5lIENPTVBfU0hPUlRfS0VZUyBjb21wX3Nob3J0X2tleXMKIAogLyogbnVtYmVyIG9mIGJsb2NrcyBwb2ludGVkIHRvIGJ5IHRoZSBpbmRpcmVjdCBpdGVtICovCi0jZGVmaW5lIElfVU5GTV9OVU0ocF9zX2loKQkoIGloX2l0ZW1fbGVuKHBfc19paCkgLyBVTkZNX1BfU0laRSApCisjZGVmaW5lIElfVU5GTV9OVU0oaWgpCShpaF9pdGVtX2xlbihpaCkgLyBVTkZNX1BfU0laRSkKIAogLyogdGhlIHVzZWQgc3BhY2Ugd2l0aGluIHRoZSB1bmZvcm1hdHRlZCBub2RlIGNvcnJlc3BvbmRpbmcgdG8gcG9zIHdpdGhpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IGloICovCiAjZGVmaW5lIElfUE9TX1VORk1fU0laRShpaCxwb3Msc2l6ZSkgKCgocG9zKSA9PSBJX1VORk1fTlVNKGloKSAtIDEgKSA/IChzaXplKSAtIGloX2ZyZWVfc3BhY2UoaWgpIDogKHNpemUpKQpAQCAtMTYyMyw2ICsxNjM5LDEwIEBACiAjZGVmaW5lIEpPVVJOQUxfTUFYX0NPTU1JVF9BR0UgMzAKICNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlNfQUdFIDMwCiAjZGVmaW5lIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICgzICogKE1BWF9IRUlHSFQtMikgKyA5KQorI2RlZmluZSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKHNiKSAgKEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMyArIFwKKwkJCQkJIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1Moc2IpICsgXAorCQkJCQkgICAgICBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKSkKKwogI2lmZGVmIENPTkZJR19RVU9UQQogLyogV2UgbmVlZCB0byB1cGRhdGUgZGF0YSBhbmQgaW5vZGUgKGF0aW1lKSAqLwogI2RlZmluZSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxPDxSRUlTRVJGU19RVU9UQSkgPyAyIDogMCkKQEAgLTE2OTcsNyArMTcxNyw3IEBACiAJaW50IHRfcmVmY291bnQ7CiAJaW50IHRfYmxvY2tzX2xvZ2dlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBoYXMgbG9nZ2VkICovCiAJaW50IHRfYmxvY2tzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCisJdW5zaWduZWQgaW50IHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCiAJdm9pZCAqdF9oYW5kbGVfc2F2ZTsJLyogc2F2ZSBleGlzdGluZyBjdXJyZW50LT5qb3VybmFsX2luZm8gKi8KIAl1bnNpZ25lZCBkaXNwbGFjZV9uZXdfYmxvY2tzOjE7CS8qIGlmIG5ldyBibG9jayBhbGxvY2F0aW9uIG9jY3VycmVzLCB0aGF0IGJsb2NrCiAJCQkJCSAgIHNob3VsZCBiZSBkaXNwbGFjZWQgZnJvbSBvdGhlcnMgKi8KQEAgLTE3NzMsMTMgKzE3OTMsMTMgQEAKIGludCBqb3VybmFsX21hcmtfZnJlZWQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAogCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICosIGJfYmxvY2tucl90IGJsb2NrbnIpOwogaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIGludCk7Ci1pbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgaW50IGJtYXBfbnIsCi0JCQlpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CitpbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgYm1hcF9uciwKKwkJCSBpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CiBpbnQgam91cm5hbF9iZWdpbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcpOworCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIHJlaXNlcmZzX2pvdXJuYWxfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKTsKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwordm9pZCByZWlzZXJmc19hYm9ydF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubyk7CiB2b2lkIHJlaXNlcmZzX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubywgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICosIHVuc2lnbmVkIGludCk7CkBAIC0xNzk2LDggKzE4MTYsOCBAQAogCiAvKiBzdHJlZS5jICovCiBpbnQgQl9JU19JTl9UUkVFKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnBfdl90bywKLQkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnBfdl9mcm9tKTsKK2V4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnRvLAorCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqZnJvbSk7CiAKIC8vIGZpcnN0IGtleSBpcyBpbiBjcHUgZm9ybSwgc2Vjb25kIC0gbGUKIGV4dGVybiBpbnQgY29tcF9zaG9ydF9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmxlX2tleSwKQEAgLTE4MzIsMjAgKzE4NTIsMjAgQEAKIAltZW1jcHkodG8sIGZyb20sIEtFWV9TSVpFKTsKIH0KIAotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoKTsKLWNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYik7CitpbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcGF0aCk7Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqLAogCQkgIHN0cnVjdCB0cmVlcGF0aCAqLCBpbnQpOwogI2RlZmluZSBzZWFyY2hfaXRlbShzLGtleSxwYXRoKSBzZWFyY2hfYnlfa2V5IChzLCBrZXksIHBhdGgsIERJU0tfTEVBRl9OT0RFX0xFVkVMKQotaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfY3B1X2tleSwKLQkJCSAgICAgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Ci1leHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKTsKLXZvaWQgZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOworaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmNwdV9rZXksCisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCk7CitleHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKK3ZvaWQgcGF0aHJlbHNlKHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpOwogaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwKTsKLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKIAogaW50IHJlaXNlcmZzX2luc2VydF9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKQEAgLTE4NjgsMTQgKzE4ODgsMTQgQEAKIGludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKLQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc191bl9iaCk7CisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICp1bl9iaCk7CiAKIHZvaWQgcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5KTsKIGludCByZWlzZXJmc19kZWxldGVfb2JqZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IGlub2RlICpwX3NfaW5vZGUpOworCQkJICAgc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsIHN0cnVjdCBwYWdlICosCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKiwKIAkJCSBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpOwogCiAjZGVmaW5lIGlfYmxvY2tfc2l6ZShpbm9kZSkgKChpbm9kZSktPmlfc2ItPnNfYmxvY2tzaXplKQpAQCAtMTkxOSwxMCArMTkzOSwxMiBAQAogCQkgICAgICAgbG9mZl90IG9mZnNldCwgaW50IHR5cGUsIGludCBsZW5ndGgsIGludCBlbnRyeV9jb3VudCk7CiBzdHJ1Y3QgaW5vZGUgKnJlaXNlcmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5KTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZTsKIGludCByZWlzZXJmc19uZXdfaW5vZGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUsCiAJCSAgICAgICBjb25zdCBjaGFyICpzeW1uYW1lLCBsb2ZmX3QgaV9zaXplLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlY3VyaXR5KTsKIAogdm9pZCByZWlzZXJmc191cGRhdGVfc2Rfc2l6ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpOwpAQCAtMTk4MCw3ICsyMDAyLDcgQEAKICNkZWZpbmUgUFJPQ19JTkZPX01BWCggc2IsIGZpZWxkLCB2YWx1ZSApIFZPSURfVgogI2RlZmluZSBQUk9DX0lORk9fSU5DKCBzYiwgZmllbGQgKSBWT0lEX1YKICNkZWZpbmUgUFJPQ19JTkZPX0FERCggc2IsIGZpZWxkLCB2YWwgKSBWT0lEX1YKLSNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoIHBfc19zYiwgcF9zX2JoLCBuX25vZGVfbGV2ZWwgKSBWT0lEX1YKKyNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoc2IsIGJoLCBuX25vZGVfbGV2ZWwpIFZPSURfVgogI2VuZGlmCiAKIC8qIGRpci5jICovCkBAIC0xOTg4LDYgKzIwMTAsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJlaXNlcmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByZWlzZXJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWlzZXJmc19kaXJfb3BlcmF0aW9uczsKK2ludCByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHZvaWQgKiwgZmlsbGRpcl90LCBsb2ZmX3QgKik7CiAKIC8qIHRhaWxfY29udmVyc2lvbi5jICovCiBpbnQgZGlyZWN0MmluZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCkBAIC0yMDA0LDEzICsyMDI3LDIwIEBACiAKIC8qIGZpeF9ub2Rlcy5jICovCiAKLWludCBmaXhfbm9kZXMoaW50IG5fb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKnBfc19pbnNfaWgsIGNvbnN0IHZvaWQgKik7CitpbnQgZml4X25vZGVzKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKmluc19paCwgY29uc3Qgdm9pZCAqKTsKIHZvaWQgdW5maXhfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqKTsKIAogLyogcHJpbnRzLmMgKi8KLXZvaWQgcmVpc2VyZnNfcGFuaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisjZGVmaW5lIHJlaXNlcmZzX3BhbmljKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwlfX3JlaXNlcmZzX3BhbmljKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCit2b2lkIF9fcmVpc2VyZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNkZWZpbmUgcmVpc2VyZnNfZXJyb3IocywgaWQsIGZtdCwgYXJncy4uLikgXAorCSBfX3JlaXNlcmZzX2Vycm9yKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiB2b2lkIHJlaXNlcmZzX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHJlaXNlcmZzX2RlYnVnKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHByaW50X2luZGlyZWN0X2l0ZW0oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGl0ZW1fbnVtKTsKQEAgLTIwNDcsNyArMjA3Nyw3IEBACiAJCQkgIGludCB6ZXJvc19udW1iZXIpOwogdm9pZCBsZWFmX2N1dF9mcm9tX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgY3V0X2l0ZW1fbnVtLAogCQkJICBpbnQgcG9zX2luX2l0ZW0sIGludCBjdXRfc2l6ZSk7Ci12b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCit2b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCiAJCQlpbnQgbmV3X2VudHJ5X2NvdW50LCBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqbmV3X2RlaHMsCiAJCQljb25zdCBjaGFyICpyZWNvcmRzLCBpbnQgcGFzdGVfc2l6ZSk7CiAvKiBpYmFsYW5jZS5jICovCkBAIC0yMjAzLDYgKzIyMzMsNiBAQAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgcmVpc2VyZnNfdW5wYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX1JFSVNFUl9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCmluZGV4IGNlMzY2M2YuLjc2MzYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCkBAIC01MSw3ICs1MSw3IEBACiAJLyogd2UgdXNlIHRoZXNlIGZvciBmc3luYyBvciBPX1NZTkMgdG8gZGVjaWRlIHdoaWNoIHRyYW5zYWN0aW9uCiAJICoqIG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiBvcmRlciBmb3IgdGhpcyBpbm9kZSB0byBiZSBwcm9wZXJseQogCSAqKiBmbHVzaGVkICovCi0JdW5zaWduZWQgbG9uZyBpX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBpX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmlfamw7CiAJc3RydWN0IG11dGV4IGlfbW1hcDsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCkBAIC01OSw3ICs1OSw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOworCXN0cnVjdCByd19zZW1hcGhvcmUgaV94YXR0cl9zZW07CiAjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAppbmRleCBiZGE2YjU2Li41NjIxZDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCkBAIC0xNCw3ICsxNCw3IEBACiB9IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX2ZsYWdzOwogCiAvKiBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgYWNjZXNzb3JzL211dGF0b3JzCi0gKiBzaW5jZSB0aGlzIGlzIGEgZGlzayBzdHJ1Y3R1cmUsIGl0IHdpbGwgYWx3YXlzIGJlIGluIAorICogc2luY2UgdGhpcyBpcyBhIGRpc2sgc3RydWN0dXJlLCBpdCB3aWxsIGFsd2F5cyBiZSBpbgogICogbGl0dGxlIGVuZGlhbiBmb3JtYXQuICovCiAjZGVmaW5lIHNiX2Jsb2NrX2NvdW50KHNicCkgICAgICAgICAobGUzMl90b19jcHUoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCkpCiAjZGVmaW5lIHNldF9zYl9ibG9ja19jb3VudChzYnAsdikgICAoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCA9IGNwdV90b19sZTMyKHYpKQpAQCAtNzMsNiArNzMsOSBAQAogI2RlZmluZSBzYl92ZXJzaW9uKHNicCkgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc192ZXJzaW9uKSkKICNkZWZpbmUgc2V0X3NiX3ZlcnNpb24oc2JwLHYpICAgICAgKChzYnApLT5zX3YxLnNfdmVyc2lvbiA9IGNwdV90b19sZTE2KHYpKQogCisjZGVmaW5lIHNiX21udF9jb3VudChzYnApCSAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c19tbnRfY291bnQpKQorI2RlZmluZSBzZXRfc2JfbW50X2NvdW50KHNicCwgdikgICAoKHNicCktPnNfbW50X2NvdW50ID0gY3B1X3RvX2xlMTYodikpCisKICNkZWZpbmUgc2JfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwoc2JwKSBcCiAgICAgICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX3Jlc2VydmVkX2Zvcl9qb3VybmFsKSkKICNkZWZpbmUgc2V0X3NiX3Jlc2VydmVkX2Zvcl9qb3VybmFsKHNicCx2KSBcCkBAIC04MCwxNiArODMsMTYgQEAKIAogLyogTE9HR0lORyAtLSAqLwogCi0vKiBUaGVzZSBhbGwgaW50ZXJlbGF0ZSBmb3IgcGVyZm9ybWFuY2UuICAKKy8qIFRoZXNlIGFsbCBpbnRlcmVsYXRlIGZvciBwZXJmb3JtYW5jZS4KICoqCi0qKiBJZiB0aGUgam91cm5hbCBibG9jayBjb3VudCBpcyBzbWFsbGVyIHRoYW4gbiB0cmFuc2FjdGlvbnMsIHlvdSBsb3NlIHNwZWVkLiAKKyoqIElmIHRoZSBqb3VybmFsIGJsb2NrIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBuIHRyYW5zYWN0aW9ucywgeW91IGxvc2Ugc3BlZWQuCiAqKiBJIGRvbid0IGtub3cgd2hhdCBuIGlzIHlldCwgSSdtIGd1ZXNzaW5nIDgtMTYuCiAqKgogKiogdHlwaWNhbCB0cmFuc2FjdGlvbiBzaXplIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLCBob3cgb2Z0ZW4gZnN5bmMgaXMKLSoqIGNhbGxlZCwgYW5kIGhvdyBtYW55IG1ldGFkYXRhIGJsb2NrcyB5b3UgZGlydHkgaW4gYSAzMCBzZWNvbmQgcGVyaW9kLiAgCisqKiBjYWxsZWQsIGFuZCBob3cgbWFueSBtZXRhZGF0YSBibG9ja3MgeW91IGRpcnR5IGluIGEgMzAgc2Vjb25kIHBlcmlvZC4KICoqIFRoZSBtb3JlIHNtYWxsIGZpbGVzICg8MTZrKSB5b3UgdXNlLCB0aGUgbGFyZ2VyIHlvdXIgdHJhbnNhY3Rpb25zIHdpbGwKICoqIGJlLgotKiogCisqKgogKiogSWYgeW91ciBqb3VybmFsIGZpbGxzIGZhc3RlciB0aGFuIGRpcnR5IGJ1ZmZlcnMgZ2V0IGZsdXNoZWQgdG8gZGlzaywgaXQgbXVzdCBmbHVzaCB0aGVtIGJlZm9yZSBhbGxvd2luZyB0aGUgam91cm5hbAogKiogdG8gd3JhcCwgd2hpY2ggc2xvd3MgdGhpbmdzIGRvd24uICBJZiB5b3UgbmVlZCBoaWdoIHNwZWVkIG1ldGEgZGF0YSB1cGRhdGVzLCB0aGUgam91cm5hbCBzaG91bGQgYmUgYmlnIGVub3VnaAogKiogdG8gcHJldmVudCB3cmFwcGluZyBiZWZvcmUgZGlydHkgbWV0YSBibG9ja3MgZ2V0IHRvIGRpc2suCkBAIC0xNTMsNyArMTU2LDcgQEAKIAlhdG9taWNfdCBqX2NvbW1pdF9sZWZ0OwogCWF0b21pY190IGpfb2xkZXJfY29tbWl0c19kb25lOwkvKiBhbGwgY29tbWl0cyBvbGRlciB0aGFuIHRoaXMgb24gZGlzayAqLwogCXN0cnVjdCBtdXRleCBqX2NvbW1pdF9tdXRleDsKLQl1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGpfdHJhbnNfaWQ7CiAJdGltZV90IGpfdGltZXN0YW1wOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2JpdG1hcDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmpfY29tbWl0X2JoOwkvKiBjb21taXQgYnVmZmVyIGhlYWQgKi8KQEAgLTE4Miw3ICsxODUsNyBAQAogCWludCBqXzFzdF9yZXNlcnZlZF9ibG9jazsJLyogZmlyc3QgYmxvY2sgb24gc19kZXYgb2YgcmVzZXJ2ZWQgYXJlYSBqb3VybmFsICovCiAKIAl1bnNpZ25lZCBsb25nIGpfc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBqX3RyYW5zX2lkOwogCXVuc2lnbmVkIGxvbmcgal9tb3VudF9pZDsKIAl1bnNpZ25lZCBsb25nIGpfc3RhcnQ7CS8qIHN0YXJ0IG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKGluZGV4IGludG8gal9hcF9ibG9ja3MpICovCiAJdW5zaWduZWQgbG9uZyBqX2xlbjsJLyogbGVuZ3RoIG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKi8KQEAgLTIyMywxMCArMjI2LDEwIEBACiAJaW50IGpfbnVtX3dvcmtfbGlzdHM7CS8qIG51bWJlciB0aGF0IG5lZWQgYXR0ZW50aW9uIGZyb20ga3JlaXNlcmZzZCAqLwogCiAJLyogZGVidWdnaW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGZsdXNoZWQgaW4gb3JkZXIgKi8KLQlpbnQgal9sYXN0X2ZsdXNoX2lkOworCXVuc2lnbmVkIGludCBqX2xhc3RfZmx1c2hfaWQ7CiAKIAkvKiBkZWJ1Z2dpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgY29tbWl0dGVkIGluIG9yZGVyICovCi0JaW50IGpfbGFzdF9jb21taXRfaWQ7CisJdW5zaWduZWQgaW50IGpfbGFzdF9jb21taXRfaWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFwX25vZGVzOwogCXN0cnVjdCBsaXN0X2hlYWQgal9kaXJ0eV9idWZmZXJzOwpAQCAtMjM5LDcgKzI0Miw3IEBACiAKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgal9saXN0X2JpdG1hcFtKT1VSTkFMX05VTV9CSVRNQVBTXTsJLyogYXJyYXkgb2YgYml0bWFwcyB0byByZWNvcmQgdGhlIGRlbGV0ZWQgYmxvY2tzICovCiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfaGFzaF90YWJsZVtKT1VSTkFMX0hBU0hfU0laRV07CS8qIGhhc2ggdGFibGUgZm9yIHJlYWwgYnVmZmVyIGhlYWRzIGluIGN1cnJlbnQgdHJhbnMgKi8KLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbCAKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbAogCQkJCQkJCQkJCSAgIHRoZSB0cmFuc2FjdGlvbnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsJLyogbGlzdCBvZiBpbm9kZXMgd2hpY2ggaGF2ZSBwcmVhbGxvY2F0ZWQgYmxvY2tzICovCiAJaW50IGpfcGVyc2lzdGVudF90cmFuczsKQEAgLTM5OSwxMCArNDAyLDcgQEAKIAlpbnQgcmVzZXJ2ZWRfYmxvY2tzOwkvKiBhbW91bnQgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBmdXJ0aGVyIGFsbG9jYXRpb25zICovCiAJc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsJLyogdGhpcyBsb2NrIG9uIG5vdyBvbmx5IHVzZWQgdG8gcHJvdGVjdCByZXNlcnZlZF9ibG9ja3MgdmFyaWFibGUgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpwcml2X3Jvb3Q7CS8qIHJvb3Qgb2YgLy5yZWlzZXJmc19wcml2ICovCi0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJc3RydWN0IGRlbnRyeSAqeGF0dHJfcm9vdDsJLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYvLnhhICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9kaXJfc2VtOwotI2VuZGlmCiAJaW50IGpfZXJybm87CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQkJICAgcGFydGl0aW9uIHdpbGwgYmUgZGVhbHQgd2l0aCBpbiBhCiAJCQkJICAgbWFubmVyIG9mIDMuNS54ICovCiAKLS8qIC1vIGhhc2g9e3RlYSwgcnVwYXNvdiwgcjUsIGRldGVjdH0gaXMgbWVhbnQgZm9yIHByb3Blcmx5IG1vdW50aW5nIAorLyogLW8gaGFzaD17dGVhLCBydXBhc292LCByNSwgZGV0ZWN0fSBpcyBtZWFudCBmb3IgcHJvcGVybHkgbW91bnRpbmcKICoqIHJlaXNlcmZzIGRpc2tzIGZyb20gMy41LjE5IG9yIGVhcmxpZXIuICA5OSUgb2YgdGhlIHRpbWUsIHRoaXMgb3B0aW9uCiAqKiBpcyBub3QgcmVxdWlyZWQuICBJZiB0aGUgbm9ybWFsIGF1dG9kZWN0aW9uIGNvZGUgY2FuJ3QgZGV0ZXJtaW5lIHdoaWNoCiAqKiBoYXNoIHRvIHVzZSAoYmVjYXVzZSBib3RoIGhhc2hlcyBoYWQgdGhlIHNhbWUgdmFsdWUgZm9yIGEgZmlsZSkKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCVJFSVNFUkZTX05PX1VOSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfQVRUUlMsCi0JUkVJU0VSRlNfWEFUVFJTLAogCVJFSVNFUkZTX1hBVFRSU19VU0VSLAogCVJFSVNFUkZTX1BPU0lYQUNMLAogCVJFSVNFUkZTX0JBUlJJRVJfTk9ORSwKQEAgLTQ4OSw3ICs0ODgsNyBAQAogI2RlZmluZSByZWlzZXJmc19kYXRhX2xvZyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfREFUQV9MT0cpKQogI2RlZmluZSByZWlzZXJmc19kYXRhX29yZGVyZWQocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCkpCiAjZGVmaW5lIHJlaXNlcmZzX2RhdGFfd3JpdGViYWNrKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19EQVRBX1dSSVRFQkFDSykpCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRycyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfWEFUVFJTKSkKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzKHMpICgocyktPnNfeGF0dHIgIT0gTlVMTCkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX3VzZXIocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1hBVFRSU19VU0VSKSkKICNkZWZpbmUgcmVpc2VyZnNfcG9zaXhhY2wocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1BPU0lYQUNMKSkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpIChyZWlzZXJmc194YXR0cnNfdXNlcihzKSB8fCByZWlzZXJmc19wb3NpeGFjbChzKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAppbmRleCBhZjEzNWFlLi5kY2FlMDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0xNSw2ICsxNSwxMiBAQAogCV9fbGUzMiBoX2hhc2g7CQkvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLwogfTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSB7CisJY2hhciAqbmFtZTsKKwl2b2lkICp2YWx1ZTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI5LDIyICszNSwxMyBAQAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IG5hbWVpZGF0YTsKIAotc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgewotCWNoYXIgKnByZWZpeDsKLQlpbnQgKCppbml0KSAodm9pZCk7Ci0Jdm9pZCAoKmV4aXQpICh2b2lkKTsKLQlpbnQgKCpnZXQpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICAgc2l6ZV90IHNpemUpOwotCWludCAoKnNldCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQlpbnQgKCpkZWwpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0JaW50ICgqbGlzdCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBjaGFyICpvdXQpOwotCXN0cnVjdCBsaXN0X2hlYWQgaGFuZGxlcnM7Ci19OworaW50IHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIF9faW5pdDsKK3ZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKTsKK2ludCByZWlzZXJmc194YXR0cl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb3VudF9mbGFncyk7CitpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycyk7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIElTX1BSSVZBVEUoaW5vZGUpCiAjZGVmaW5lIGhhc194YXR0cl9kaXIoaW5vZGUpIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfaGFzX3hhdHRyX2RpcikKIHNzaXplX3QgcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKQEAgLTUyLDEwNSArNDksOTggQEAKIAkJICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogc3NpemVfdCByZWlzZXJmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IHJlaXNlcmZzX2RlbGV0ZV94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cnMpOwotaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKTsKIGludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIAotaW50IHJlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqKTsKLWludCByZWlzZXJmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOworaW50IHJlaXNlcmZzX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CiBpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworaW50IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAorCQkJICAgICAgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLAorCQkJICAgICAgc2l6ZV90LCBpbnQpOwogCi1leHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgdXNlcl9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHRydXN0ZWRfaGFuZGxlcjsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBzZWN1cml0eV9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkKK2ludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKK2ludCByZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYyk7Cit2b2lkIHJlaXNlcmZzX3NlY3VyaXR5X2ZyZWUoc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKKyNlbmRpZgogCi1pbnQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgX19pbml0Owotdm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKKyNkZWZpbmUgeGF0dHJfc2l6ZShzaXplKSAoKHNpemUpICsgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpKQorc3RhdGljIGlubGluZSBsb2ZmX3QgcmVpc2VyZnNfeGF0dHJfbmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSkKIHsKLQlkb3duX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXVwX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWRvd25fcmVhZCgmUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzYikpOworCWxvZmZfdCByZXQgPSAwOworCWlmIChyZWlzZXJmc19maWxlX2RhdGFfbG9nKGlub2RlKSkgeworCQlyZXQgPSBfUk9VTkRfVVAoeGF0dHJfc2l6ZShzaXplKSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJcmV0ID4+PSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyogV2UgbWF5IGhhdmUgdG8gY3JlYXRlIHVwIHRvIDMgb2JqZWN0czogeGF0dHIgcm9vdCwgeGF0dHIgZGlyLCB4YXR0ciBmaWxlLgorICogTGV0J3MgdHJ5IHRvIGJlIHNtYXJ0IGFib3V0IGl0LgorICogeGF0dHIgcm9vdDogV2UgY2FjaGUgaXQuIElmIGl0J3Mgbm90IGNhY2hlZCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIGl0LgorICogeGF0dHIgZGlyOiBJZiBhbnl0aGluZyBoYXMgYmVlbiBsb2FkZWQgZm9yIHRoaXMgaW5vZGUsIHdlIGNhbiBzZXQgYSBmbGFnCisgKiAgICAgICAgICAgIHNheWluZyBzby4KKyAqIHhhdHRyIGZpbGU6IFNpbmNlIHdlIGRvbid0IGNhY2hlIHhhdHRycywgd2UgY2FuJ3QgdGVsbC4gV2UgYWx3YXlzIGluY2x1ZGUKKyAqICAgICAgICAgICAgIGJsb2NrcyBmb3IgaXQuCisgKgorICogSG93ZXZlciwgc2luY2Ugcm9vdCBhbmQgZGlyIGNhbiBiZSBjcmVhdGVkIGJldHdlZW4gY2FsbHMgLSBZT1UgTVVTVCBTQVZFCisgKiBUSElTIFZBTFVFLgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdCByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl1cF9yZWFkKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19CisJc2l6ZV90IG5ibG9ja3MgPSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKGlub2RlLT5pX3NiKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKLX0KKwlpZiAoKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9oYXNfeGF0dHJfZGlyKSA9PSAwKSB7CisJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJCWlmIChSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnhhdHRyX3Jvb3QgPT0gTlVMTCkKKwkJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVwX3JlYWQoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOworCXJldHVybiBuYmxvY2tzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiB9CiAKICNlbHNlCiAKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIDAKLSNkZWZpbmUgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKSBkbyB7O30gd2hpbGUoMCkKICNkZWZpbmUgcmVpc2VyZnNfZ2V0eGF0dHIgTlVMTAogI2RlZmluZSByZWlzZXJmc19zZXR4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX2xpc3R4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX3JlbW92ZXhhdHRyIE5VTEwKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc2IpIGRvIHs7fSB3aGlsZSgwKQotI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHNiKSBkbyB7O30gd2hpbGUoMCkKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzYikKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHNiKQogCiAjZGVmaW5lIHJlaXNlcmZzX3Blcm1pc3Npb24gTlVMTAogCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKCkgMAotI2RlZmluZSByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCkKLQotc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3QgaWF0dHIgKmF0dHJzKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKQotewotCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKTsJLyogdG8gYmUgc3VyZSAqLwotCXJldHVybiAwOwotfTsKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X3hhdHRyX3J3c2VtKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiB9CiAjZW5kaWYgIC8qICBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgICovCiAKKyNpZm5kZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50CityZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7fQorI2VuZGlmCisKICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKICNlbmRpZiAgLyogIF9MSU5VWF9SRUlTRVJGU19YQVRUUl9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMtdjMwMjAuaCBiL2luY2x1ZGUvbGludXgvcnRjLXYzMDIwLmgKaW5kZXggYmY3NGU2My4uOGJhNjQ2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMtdjMwMjAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy12MzAyMC5oCkBAIC0xNCw2ICsxNCwxMiBAQAogICogaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSBib2FyZC4gKi8KIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgbGVmdHNoaWZ0OyAvKiAoMTw8KGxlZnRzaGlmdCkpICYgcmVhZGwoKSAqLworCisJaW50IHVzZV9ncGlvOjE7CisJdW5zaWduZWQgaW50IGdwaW9fY3M7CisJdW5zaWduZWQgaW50IGdwaW9fd3I7CisJdW5zaWduZWQgaW50IGdwaW9fcmQ7CisJdW5zaWduZWQgaW50IGdwaW9faW87CiB9OwogCiAjZGVmaW5lIFYzMDIwX1NUQVRVU18wCTB4MDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCmluZGV4IDQwNDZiNzUuLjYwZjg4YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMuaApAQCAtOTksNiArOTksNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogZXh0ZXJuIGludCBydGNfbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKTsKQEAgLTIzMiw2ICsyMzMsMTEgQEAKIGludCBydGNfdW5yZWdpc3RlcihydGNfdGFza190ICp0YXNrKTsKIGludCBydGNfY29udHJvbChydGNfdGFza190ICp0LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19sZWFwX3llYXIodW5zaWduZWQgaW50IHllYXIpCit7CisJcmV0dXJuICghKHllYXIgJSA0KSAmJiAoeWVhciAlIDEwMCkpIHx8ICEoeWVhciAlIDQwMCk7Cit9CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfUlRDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMWQxOWMwMi4uOWRhNWFhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtNjgsNyArNjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhdGguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9waWQuaD4KQEAgLTk3LDYgKzk3LDcgQEAKIHN0cnVjdCByb2J1c3RfbGlzdF9oZWFkOwogc3RydWN0IGJpbzsKIHN0cnVjdCBidHNfdHJhY2VyOworc3RydWN0IGZzX3N0cnVjdDsKIAogLyoKICAqIExpc3Qgb2YgZmxhZ3Mgd2Ugd2FudCB0byBzaGFyZSBmb3Iga2VybmVsIHRocmVhZHMsCkBAIC0zMzEsNyArMzMyLDkgQEAKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoc2lnbmVkIGxvbmcgdGltZW91dCk7CiBleHRlcm4gc2lnbmVkIGxvbmcgc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KTsKK2FzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkdWxlKHZvaWQpOwogYXNtbGlua2FnZSB2b2lkIHNjaGVkdWxlKHZvaWQpOworZXh0ZXJuIGludCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpvd25lcik7CiAKIHN0cnVjdCBuc3Byb3h5Owogc3RydWN0IHVzZXJfbmFtZXNwYWNlOwpAQCAtMzg5LDggKzM5MiwxNSBAQAogCQkobW0pLT5oaXdhdGVyX3ZtID0gKG1tKS0+dG90YWxfdm07CVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgZ2V0X21tX2hpd2F0ZXJfcnNzKG1tKQltYXgoKG1tKS0+aGl3YXRlcl9yc3MsIGdldF9tbV9yc3MobW0pKQotI2RlZmluZSBnZXRfbW1faGl3YXRlcl92bShtbSkJbWF4KChtbSktPmhpd2F0ZXJfdm0sIChtbSktPnRvdGFsX3ZtKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tbV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3JzcywgZ2V0X21tX3JzcyhtbSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIG1heChtbS0+aGl3YXRlcl92bSwgbW0tPnRvdGFsX3ZtKTsKK30KIAogZXh0ZXJuIHZvaWQgc2V0X2R1bXBhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdmFsdWUpOwogZXh0ZXJuIGludCBnZXRfZHVtcGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwpAQCAtNTM4LDI1ICs1NDgsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwogCi0JLyogam9iIGNvbnRyb2wgSURzICovCi0KLQkvKgotCSAqIHBncnAgYW5kIHNlc3Npb24gZmllbGRzIGFyZSBkZXByZWNhdGVkLgotCSAqIHVzZSB0aGUgdGFza19zZXNzaW9uX1huciBhbmQgdGFza19wZ3JwX1huciByb3V0aW5lcyBiZWxvdwotCSAqLwotCi0JdW5pb24gewotCQlwaWRfdCBwZ3JwIF9fZGVwcmVjYXRlZDsKLQkJcGlkX3QgX19wZ3JwOwotCX07Ci0KIAlzdHJ1Y3QgcGlkICp0dHlfb2xkX3BncnA7CiAKLQl1bmlvbiB7Ci0JCXBpZF90IHNlc3Npb24gX19kZXByZWNhdGVkOwotCQlwaWRfdCBfX3Nlc3Npb247Ci0JfTsKLQogCS8qIGJvb2xlYW4gdmFsdWUgZm9yIHNlc3Npb24gZ3JvdXAgbGVhZGVyICovCiAJaW50IGxlYWRlcjsKIApAQCAtMTMzNCw2ICsxMzI3LDcgQEAKIAlpbnQgbG9ja2RlcF9kZXB0aDsKIAl1bnNpZ25lZCBpbnQgbG9ja2RlcF9yZWN1cnNpb247CiAJc3RydWN0IGhlbGRfbG9jayBoZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTsKKwlnZnBfdCBsb2NrZGVwX3JlY2xhaW1fZ2ZwOwogI2VuZGlmCiAKIC8qIGpvdXJuYWxsaW5nIGZpbGVzeXN0ZW0gaW5mbyAqLwpAQCAtMTQ1OSwxNiArMTQ1Myw2IEBACiAJcmV0dXJuIHJ0X3ByaW8ocC0+cHJpbyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19zZXNzaW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBwaWRfdCBzZXNzaW9uKQotewotCXRzay0+c2lnbmFsLT5fX3Nlc3Npb24gPSBzZXNzaW9uOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfcGdycChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgcGlkX3QgcGdycCkKLXsKLQl0c2stPnNpZ25hbC0+X19wZ3JwID0gcGdycDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICp0YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcmV0dXJuIHRhc2stPnBpZHNbUElEVFlQRV9QSURdLnBpZDsKQEAgLTE0NzksNiArMTQ2MywxMSBAQAogCXJldHVybiB0YXNrLT5ncm91cF9sZWFkZXItPnBpZHNbUElEVFlQRV9QSURdLnBpZDsKIH0KIAorLyoKKyAqIFdpdGhvdXQgdGFza2xpc3Qgb3IgcmN1IGxvY2sgaXQgaXMgbm90IHNhZmUgdG8gZGVyZWZlcmVuY2UKKyAqIHRoZSByZXN1bHQgb2YgdGFza19wZ3JwL3Rhc2tfc2Vzc2lvbiBldmVuIGlmIHRhc2sgPT0gY3VycmVudCwKKyAqIHdlIGNhbiByYWNlIHdpdGggYW5vdGhlciB0aHJlYWQgZG9pbmcgc3lzX3NldHNpZC9zeXNfc2V0cGdpZC4KKyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICp0YXNrX3BncnAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiB0YXNrLT5ncm91cF9sZWFkZXItPnBpZHNbUElEVFlQRV9QR0lEXS5waWQ7CkBAIC0xNTA0LDE3ICsxNDkzLDIzIEBACiAgKgogICogc2VlIGFsc28gcGlkX25yKCkgZXRjIGluIGluY2x1ZGUvbGludXgvcGlkLmgKICAqLworcGlkX3QgX190YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSwKKwkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJcmV0dXJuIHRzay0+cGlkOwogfQogCi1waWRfdCB0YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlyZXR1cm4gX190YXNrX3BpZF9ucl9ucyh0c2ssIFBJRFRZUEVfUElELCBucyk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfdm5yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXJldHVybiBwaWRfdm5yKHRhc2tfcGlkKHRzaykpOworCXJldHVybiBfX3Rhc2tfcGlkX25yX25zKHRzaywgUElEVFlQRV9QSUQsIE5VTEwpOwogfQogCiAKQEAgLTE1MzEsMzEgKzE1MjYsMzQgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wZ3JwX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHRzay0+c2lnbmFsLT5fX3BncnA7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1BHSUQsIG5zKTsKIH0KIAotcGlkX3QgdGFza19wZ3JwX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwotCiBzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF92bnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcmV0dXJuIHBpZF92bnIodGFza19wZ3JwKHRzaykpOworCXJldHVybiBfX3Rhc2tfcGlkX25yX25zKHRzaywgUElEVFlQRV9QR0lELCBOVUxMKTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfc2Vzc2lvbl9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19zZXNzaW9uX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHRzay0+c2lnbmFsLT5fX3Nlc3Npb247CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1NJRCwgbnMpOwogfQogCi1waWRfdCB0YXNrX3Nlc3Npb25fbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7Ci0KIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19zZXNzaW9uX3ZucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlyZXR1cm4gcGlkX3Zucih0YXNrX3Nlc3Npb24odHNrKSk7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1NJRCwgTlVMTCk7CiB9CiAKKy8qIG9ic29sZXRlLCBkbyBub3QgdXNlICovCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gdGFza19wZ3JwX25yX25zKHRzaywgJmluaXRfcGlkX25zKTsKK30KIAogLyoqCiAgKiBwaWRfYWxpdmUgLSBjaGVjayB0aGF0IGEgdGFzayBzdHJ1Y3R1cmUgaXMgbm90IHN0YWxlCkBAIC0xOTY1LDcgKzE5NjMsOCBAQAogLyogQWxsb2NhdGUgYSBuZXcgbW0gc3RydWN0dXJlIGFuZCBjb3B5IGNvbnRlbnRzIGZyb20gdHNrLT5tbSAqLwogZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmR1cF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKLWV4dGVybiBpbnQgIGNvcHlfdGhyZWFkKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CiAKQEAgLTIwNTAsNiArMjA0OSwxMSBAQAogI2RlZmluZSBkZWxheV9ncm91cF9sZWFkZXIocCkgXAogCQkodGhyZWFkX2dyb3VwX2xlYWRlcihwKSAmJiAhdGhyZWFkX2dyb3VwX2VtcHR5KHApKQogCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2RldGFjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gcC0+ZXhpdF9zaWduYWwgPT0gLTE7Cit9CisKIC8qCiAgKiBQcm90ZWN0cyAtPmZzLCAtPmZpbGVzLCAtPm1tLCAtPmdyb3VwX2luZm8sIC0+Y29tbSwga2V5cmluZwogICogc3Vic2NyaXB0aW9ucyBhbmQgc3luY2hyb25pc2VzIHdpdGggd2FpdDQoKS4gIEFsc28gdXNlZCBpbiBwcm9jZnMuICBBbHNvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggZjYxNmYzMS4uMDA0ZjNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtNTUsNyArNTUsNyBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBucl9iaXRzKTsKIHN0YXRpYyBpbmxpbmUgaW50IHNlcV9jcHVtYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCiB7Ci0JcmV0dXJuIHNlcV9iaXRtYXAobSwgbWFzay0+Yml0cywgbnJfY3B1X2lkcyk7CisJcmV0dXJuIHNlcV9iaXRtYXAobSwgY3B1bWFza19iaXRzKG1hc2spLCBucl9jcHVfaWRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VxX25vZGVtYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgbm9kZW1hc2tfdCAqbWFzaykKQEAgLTYzLDEyICs2MywxMyBAQAogCXJldHVybiBzZXFfYml0bWFwKG0sIG1hc2stPmJpdHMsIE1BWF9OVU1OT0RFUyk7CiB9CiAKLWludCBzZXFfYml0bWFwX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLCB1bnNpZ25lZCBsb25nICpiaXRzLAoraW50IHNlcV9iaXRtYXBfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdHMsCiAJCXVuc2lnbmVkIGludCBucl9iaXRzKTsKIAotc3RhdGljIGlubGluZSBpbnQgc2VxX2NwdW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNwdW1hc2tfdCAqbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlcV9jcHVtYXNrX2xpc3Qoc3RydWN0IHNlcV9maWxlICptLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewotCXJldHVybiBzZXFfYml0bWFwX2xpc3QobSwgbWFzay0+Yml0cywgTlJfQ1BVUyk7CisJcmV0dXJuIHNlcV9iaXRtYXBfbGlzdChtLCBjcHVtYXNrX2JpdHMobWFzayksIG5yX2NwdV9pZHMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZXFfbm9kZW1hc2tfbGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIG5vZGVtYXNrX3QgKm1hc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA1NWQ2NzMwLi41ZmQzODkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTE2OCw2ICsxNjgsNyBAQAogICogQHNvZnR3YXJlOgkJZ2VuZXJhdGUgc29mdHdhcmUgdGltZSBzdGFtcAogICogQGluX3Byb2dyZXNzOglkZXZpY2UgZHJpdmVyIGlzIGdvaW5nIHRvIHByb3ZpZGUKICAqCQkJaGFyZHdhcmUgdGltZSBzdGFtcAorICogQGZsYWdzOgkJYWxsIHNoYXJlZF90eCBmbGFncwogICoKICAqIFRoZXNlIGZsYWdzIGFyZSBhdHRhY2hlZCB0byBwYWNrZXRzIGFzIHBhcnQgb2YgdGhlCiAgKiAmc2tiX3NoYXJlZF9pbmZvLiBVc2Ugc2tiX3R4KCkgdG8gZ2V0IGEgcG9pbnRlci4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvdy13b3JrLmggYi9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTU4MjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qIFdvcmtlciB0aHJlYWQgcG9vbCBmb3Igc2xvdyBpdGVtcywgc3VjaCBhcyBmaWxlc3lzdGVtIGxvb2t1cHMgb3IgbWtkaXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQKKyAqLworCisjaWZuZGVmIF9MSU5VWF9TTE9XX1dPUktfSAorI2RlZmluZSBfTElOVVhfU0xPV19XT1JLX0gKKworI2lmZGVmIENPTkZJR19TTE9XX1dPUksKKworI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorCitzdHJ1Y3Qgc2xvd193b3JrOworCisvKgorICogVGhlIG9wZXJhdGlvbnMgdXNlZCB0byBzdXBwb3J0IHNsb3cgd29yayBpdGVtcworICovCitzdHJ1Y3Qgc2xvd193b3JrX29wcyB7CisJLyogZ2V0IGEgcmVmIG9uIGEgd29yayBpdGVtCisJICogLSByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtdmUgaWYgbm90CisJICovCisJaW50ICgqZ2V0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7CisKKwkvKiBkaXNjYXJkIGEgcmVmIHRvIGEgd29yayBpdGVtICovCisJdm9pZCAoKnB1dF9yZWYpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisJLyogZXhlY3V0ZSBhIHdvcmsgaXRlbSAqLworCXZvaWQgKCpleGVjdXRlKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKK307CisKKy8qCisgKiBBIHNsb3cgd29yayBpdGVtCisgKiAtIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIHBhcmVudCBvYmplY3QgYnkgdGhlIHRocmVhZCBwb29sIHdoZW4gaXQgaXMKKyAqICAgcXVldWVkCisgKi8KK3N0cnVjdCBzbG93X3dvcmsgeworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBTTE9XX1dPUktfUEVORElORwkwCS8qIGl0ZW0gcGVuZGluZyAoZnVydGhlcikgZXhlY3V0aW9uICovCisjZGVmaW5lIFNMT1dfV09SS19FWEVDVVRJTkcJMQkvKiBpdGVtIGN1cnJlbnRseSBleGVjdXRpbmcgKi8KKyNkZWZpbmUgU0xPV19XT1JLX0VOUV9ERUZFUlJFRAkyCS8qIGl0ZW0gZW5xdWV1ZSBkZWZlcnJlZCAqLworI2RlZmluZSBTTE9XX1dPUktfVkVSWV9TTE9XCTMJLyogaXRlbSBpcyB2ZXJ5IHNsb3cgKi8KKwljb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyAqb3BzOyAvKiBvcGVyYXRpb25zIHRhYmxlIGZvciB0aGlzIGl0ZW0gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CS8qIGxpbmsgaW4gcXVldWUgKi8KK307CisKKy8qKgorICogc2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgc2xvdyB3b3JrIGl0ZW0KKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIGluaXRpYWxpc2UKKyAqIEBvcHM6IFRoZSBvcGVyYXRpb25zIHRvIHVzZSB0byBoYW5kbGUgdGhlIHNsb3cgd29yayBpdGVtCisgKgorICogSW5pdGlhbGlzZSBhIHNsb3cgd29yayBpdGVtLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2xvd193b3JrX2luaXQoc3RydWN0IHNsb3dfd29yayAqd29yaywKKwkJCQkgIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzICpvcHMpCit7CisJd29yay0+ZmxhZ3MgPSAwOworCXdvcmstPm9wcyA9IG9wczsKKwlJTklUX0xJU1RfSEVBRCgmd29yay0+bGluayk7Cit9CisKKy8qKgorICogc2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbQorICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gaW5pdGlhbGlzZQorICogQG9wczogVGhlIG9wZXJhdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSB0aGUgc2xvdyB3b3JrIGl0ZW0KKyAqCisgKiBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbS4gIFRoaXMgaXRlbSB3aWxsIGJlIHJlc3RyaWN0ZWQgc3VjaCB0aGF0CisgKiBvbmx5IGEgY2VydGFpbiBudW1iZXIgb2YgdGhlIHBvb2wgdGhyZWFkcyB3aWxsIGJlIGFibGUgdG8gZXhlY3V0ZSBpdGVtcyBvZgorICogdGhpcyB0eXBlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnNsb3dfd29ya19pbml0KHN0cnVjdCBzbG93X3dvcmsgKndvcmssCisJCQkJICAgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wcykKK3sKKwl3b3JrLT5mbGFncyA9IDEgPDwgU0xPV19XT1JLX1ZFUllfU0xPVzsKKwl3b3JrLT5vcHMgPSBvcHM7CisJSU5JVF9MSVNUX0hFQUQoJndvcmstPmxpbmspOworfQorCitleHRlcm4gaW50IHNsb3dfd29ya19lbnF1ZXVlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworZXh0ZXJuIGludCBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcih2b2lkKTsKK2V4dGVybiB2b2lkIHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitleHRlcm4gY3RsX3RhYmxlIHNsb3dfd29ya19zeXNjdGxzW107CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19TTE9XX1dPUksgKi8KKyNlbmRpZiAvKiBfTElOVVhfU0xPV19XT1JLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2VlcHJvbS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKaW5kZXggMTA4NTIxMi4uMzA2ZTdiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAjZGVmaW5lIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAKKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKwogLyoKICAqIFB1dCBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBpbiBwbGF0Zm9ybV9kYXRhIGZvciBTUEkgRUVQUk9NUyBoYW5kbGVkCiAgKiBieSB0aGUgImF0MjUiIGRyaXZlci4gIE9uIFNQSSwgbW9zdCBFRVBST01TIHVuZGVyc3RhbmQgdGhlIHNhbWUgY29yZQpAQCAtMTcsNiArMTksMTAgQEAKICNkZWZpbmUJRUVfQUREUjIJMHgwMDAyCQkJLyogMTYgYml0IGFkZHJzICovCiAjZGVmaW5lCUVFX0FERFIzCTB4MDAwNAkJCS8qIDI0IGJpdCBhZGRycyAqLwogI2RlZmluZQlFRV9SRUFET05MWQkweDAwMDgJCQkvKiBkaXNhbGxvdyB3cml0ZXMgKi8KKworCS8qIGZvciBleHBvcnRpbmcgdGhpcyBjaGlwJ3MgZGF0YSB0byBvdGhlciBrZXJuZWwgY29kZSAqLworCXZvaWQgKCpzZXR1cCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWVtLCB2b2lkICpjb250ZXh0KTsKKwl2b2lkICpjb250ZXh0OwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpX2dwaW8uaAppbmRleCAwZjAxYTBmLi5jYTY3ODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaV9ncGlvLmgKQEAgLTI1LDEwICsyNSwxNiBAQAogICoJLi4uCiAgKgl9OwogICoKKyAqIElmIGNoaXBzZWxlY3QgaXMgbm90IHVzZWQgKHRoZXJlJ3Mgb25seSBvbmUgZGV2aWNlIG9uIHRoZSBidXMpLCBhc3NpZ24KKyAqIFNQSV9HUElPX05PX0NISVBTRUxFQ1QgdG8gdGhlIGNvbnRyb2xsZXJfZGF0YToKKyAqCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVDsKKyAqCiAgKiBJZiB0aGUgYml0YmFuZ2VkIGJ1cyBpcyBsYXRlciBzd2l0Y2hlZCB0byBhICJuYXRpdmUiIGNvbnRyb2xsZXIsCiAgKiB0aGF0IHBsYXRmb3JtX2RldmljZSBhbmQgY29udHJvbGxlcl9kYXRhIHNob3VsZCBiZSByZW1vdmVkLgogICovCiAKKyNkZWZpbmUgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVAkJKCh1bnNpZ25lZCBsb25nKS0xbCkKKwogLyoqCiAgKiBzdHJ1Y3Qgc3BpX2dwaW9fcGxhdGZvcm1fZGF0YSAtIHBhcmFtZXRlciBmb3IgYml0YmFuZ2VkIFNQSSBtYXN0ZXIKICAqIEBzY2s6IG51bWJlciBvZiB0aGUgR1BJTyB1c2VkIGZvciBjbG9jayBvdXRwdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCBhMGM2NmEyLi4yNTJiMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC0xNTMsOSArMTUzLDExIEBACiAgZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKTsKICBleHRlcm4gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwogIGV4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCiAgZXh0ZXJuIGludCBfcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3dyaXRlX2xvY2sobG9jaykKICBleHRlcm4gaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spOwogI2Vsc2UKQEAgLTE2NSw5ICsxNjcsMTMgQEAKICMgZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spCV9fcmF3X3NwaW5fdHJ5bG9jaygmKGxvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykJCV9fcmF3X3NwaW5fdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd19yZWFkX2xvY2socndsb2NrKQkJX19yYXdfcmVhZF9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjIGRlZmluZSBfcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAorCQlfX3Jhd19yZWFkX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrKQlfX3Jhd19yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socndsb2NrKQlfX3Jhd19yZWFkX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBcCisJCV9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socndsb2NrKQlfX3Jhd193cml0ZV91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggZDE4ZmMxOS4uODg1MjczOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIGZvciBOVUxMICovCiAKIGV4dGVybiBjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7CitleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KTsKIAogLyoKICAqIEluY2x1ZGUgbWFjaGluZSBzcGVjaWZpYyBpbmxpbmUgcm91dGluZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKaW5kZXggMzQzNWQyNC4uZDNhNGMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTY5LDcgKzY5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXN2X3RlbXBzb2NrczsJLyogYWxsIHRlbXBvcmFyeSBzb2NrZXRzICovCiAJaW50CQkJc3ZfdG1wY250OwkvKiBjb3VudCBvZiB0ZW1wb3Jhcnkgc29ja2V0cyAqLwogCXN0cnVjdCB0aW1lcl9saXN0CXN2X3RlbXB0aW1lcjsJLyogdGltZXIgZm9yIGFnaW5nIHRlbXBvcmFyeSBzb2NrZXRzICovCi0Jc2FfZmFtaWx5X3QJCXN2X2ZhbWlseTsJLyogbGlzdGVuZXIncyBhZGRyZXNzIGZhbWlseSAqLwogCiAJY2hhciAqCQkJc3ZfbmFtZTsJLyogc2VydmljZSBuYW1lICovCiAKQEAgLTM4NSwxOSArMzg0LDE5IEBACiAvKgogICogRnVuY3Rpb24gcHJvdG90eXBlcy4KICAqLwotc3RydWN0IHN2Y19zZXJ2ICpzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqLCB1bnNpZ25lZCBpbnQsIHNhX2ZhbWlseV90LAorc3RydWN0IHN2Y19zZXJ2ICpzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKikpOwogc3RydWN0IHN2Y19ycXN0ICpzdmNfcHJlcGFyZV90aHJlYWQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAogCQkJCQlzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpOwogdm9pZAkJICAgc3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqKTsKIHN0cnVjdCBzdmNfc2VydiAqICBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAotCQkJc2FfZmFtaWx5X3QsIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICopLAorCQkJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKiksCiAJCQlzdmNfdGhyZWFkX2ZuLCBzdHJ1Y3QgbW9kdWxlICopOwogaW50CQkgICBzdmNfc2V0X251bV90aHJlYWRzKHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3Qgc3ZjX3Bvb2wgKiwgaW50KTsKIHZvaWQJCSAgIHN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqKTsKIGludAkJICAgc3ZjX3Byb2Nlc3Moc3RydWN0IHN2Y19ycXN0ICopOwotaW50CQkgICBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICosIGNvbnN0IHVuc2lnbmVkIHNob3J0LAotCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0KTsKK2ludAkJICAgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqLCBjb25zdCBpbnQsCisJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQsIGNvbnN0IHVuc2lnbmVkIHNob3J0KTsKIAogdm9pZAkJICAgc3ZjX3dha2VfdXAoc3RydWN0IHN2Y19zZXJ2ICopOwogdm9pZAkJICAgc3ZjX3Jlc2VydmUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgaW50IHNwYWNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCmluZGV4IDAxMjdkYWMuLjBkOWNiNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaApAQCAtNzEsNyArNzEsOCBAQAogdm9pZAlzdmNfdW5yZWdfeHBydF9jbGFzcyhzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKik7CiB2b2lkCXN2Y194cHJ0X2luaXQoc3RydWN0IHN2Y194cHJ0X2NsYXNzICosIHN0cnVjdCBzdmNfeHBydCAqLAogCQkgICAgICBzdHJ1Y3Qgc3ZjX3NlcnYgKik7Ci1pbnQJc3ZjX2NyZWF0ZV94cHJ0KHN0cnVjdCBzdmNfc2VydiAqLCBjaGFyICosIHVuc2lnbmVkIHNob3J0LCBpbnQpOworaW50CXN2Y19jcmVhdGVfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgY29uc3QgY2hhciAqLCBjb25zdCBpbnQsCisJCQljb25zdCB1bnNpZ25lZCBzaG9ydCwgaW50KTsKIHZvaWQJc3ZjX3hwcnRfZW5xdWV1ZShzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpOwogdm9pZAlzdmNfeHBydF9yZWNlaXZlZChzdHJ1Y3Qgc3ZjX3hwcnQgKik7CiB2b2lkCXN2Y194cHJ0X3B1dChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpOwpAQCAtODAsNyArODEsOCBAQAogdm9pZAlzdmNfZGVsZXRlX3hwcnQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTsKIGludAlzdmNfcG9ydF9pc19wcml2aWxlZ2VkKHN0cnVjdCBzb2NrYWRkciAqc2luKTsKIGludAlzdmNfcHJpbnRfeHBydHMoY2hhciAqYnVmLCBpbnQgbWF4bGVuKTsKLXN0cnVjdAlzdmNfeHBydCAqc3ZjX2ZpbmRfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgY2hhciAqLCBpbnQsIGludCk7CitzdHJ1Y3QJc3ZjX3hwcnQgKnN2Y19maW5kX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBjaGFyICp4Y2xfbmFtZSwKKwkJCWNvbnN0IHNhX2ZhbWlseV90IGFmLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKIGludAlzdmNfeHBydF9uYW1lcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9nZXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQpAQCAtODgsMjkgKzkwLDMyIEBACiAJa3JlZl9nZXQoJnhwcnQtPnhwdF9yZWYpOwogfQogc3RhdGljIGlubGluZSB2b2lkIHN2Y194cHJ0X3NldF9sb2NhbChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQsCi0JCQkJICAgICAgc3RydWN0IHNvY2thZGRyICpzYSwgaW50IHNhbGVuKQorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsCisJCQkJICAgICAgY29uc3Qgc2l6ZV90IHNhbGVuKQogewogCW1lbWNweSgmeHBydC0+eHB0X2xvY2FsLCBzYSwgc2FsZW4pOwogCXhwcnQtPnhwdF9sb2NhbGxlbiA9IHNhbGVuOwogfQogc3RhdGljIGlubGluZSB2b2lkIHN2Y194cHJ0X3NldF9yZW1vdGUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0LAotCQkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBpbnQgc2FsZW4pCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsCisJCQkJICAgICAgIGNvbnN0IHNpemVfdCBzYWxlbikKIHsKIAltZW1jcHkoJnhwcnQtPnhwdF9yZW1vdGUsIHNhLCBzYWxlbik7CiAJeHBydC0+eHB0X3JlbW90ZWxlbiA9IHNhbGVuOwogfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzdmNfYWRkcl9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2EpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHN2Y19hZGRyX3BvcnQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSkKIHsKLQl1bnNpZ25lZCBzaG9ydCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOworCiAJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgotCQlyZXQgPSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX3BvcnQpOwotCQlicmVhazsKKwkJcmV0dXJuIG50b2hzKHNpbi0+c2luX3BvcnQpOwogCWNhc2UgQUZfSU5FVDY6Ci0JCXJldCA9IG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9wb3J0KTsKLQkJYnJlYWs7CisJCXJldHVybiBudG9ocyhzaW42LT5zaW42X3BvcnQpOwogCX0KLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHN2Y19hZGRyX2xlbihzdHJ1Y3Qgc29ja2FkZHIgKnNhKQpAQCAtMTI0LDM2ICsxMjksMzkgQEAKIAlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzdmNfeHBydF9sb2NhbF9wb3J0KHN0cnVjdCBzdmNfeHBydCAqeHBydCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3ZjX3hwcnRfbG9jYWxfcG9ydChjb25zdCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCiB7Ci0JcmV0dXJuIHN2Y19hZGRyX3BvcnQoKHN0cnVjdCBzb2NrYWRkciAqKSZ4cHJ0LT54cHRfbG9jYWwpOworCXJldHVybiBzdmNfYWRkcl9wb3J0KChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmeHBydC0+eHB0X2xvY2FsKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzdmNfeHBydF9yZW1vdGVfcG9ydChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHN2Y194cHJ0X3JlbW90ZV9wb3J0KGNvbnN0IHN0cnVjdCBzdmNfeHBydCAqeHBydCkKIHsKLQlyZXR1cm4gc3ZjX2FkZHJfcG9ydCgoc3RydWN0IHNvY2thZGRyICopJnhwcnQtPnhwdF9yZW1vdGUpOworCXJldHVybiBzdmNfYWRkcl9wb3J0KChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmeHBydC0+eHB0X3JlbW90ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciAqX19zdmNfcHJpbnRfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkJICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgaW5saW5lIGNoYXIgKl9fc3ZjX3ByaW50X2FkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJCSAgICAgY2hhciAqYnVmLCBjb25zdCBzaXplX3QgbGVuKQogeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwogCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgotCQlzbnByaW50ZihidWYsIGxlbiwgIiVwSTQsIHBvcnQ9JXUiLAotCQkJJigoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9hZGRyLAotCQkJbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYWRkciktPnNpbl9wb3J0KSk7CisJCXNucHJpbnRmKGJ1ZiwgbGVuLCAiJXBJNCwgcG9ydD0ldSIsICZzaW4tPnNpbl9hZGRyLAorCQkJbnRvaHMoc2luLT5zaW5fcG9ydCkpOwogCQlicmVhazsKIAogCWNhc2UgQUZfSU5FVDY6CiAJCXNucHJpbnRmKGJ1ZiwgbGVuLCAiJXBJNiwgcG9ydD0ldSIsCi0JCQkgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHIpLT5zaW42X2FkZHIsCi0JCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfcG9ydCkpOworCQkJICZzaW42LT5zaW42X2FkZHIsCisJCQludG9ocyhzaW42LT5zaW42X3BvcnQpKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlzbnByaW50ZihidWYsIGxlbiwgInVua25vd24gYWRkcmVzcyB0eXBlOiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybiBidWY7CiB9CiAjZW5kaWYgLyogU1VOUlBDX1NWQ19YUFJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCAxMWZjNzFkLi4xNzU4ZDlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC0yMzUsNiArMjM1LDcgQEAKICAqLwogaW50CQkJeHBydF9yZWdpc3Rlcl90cmFuc3BvcnQoc3RydWN0IHhwcnRfY2xhc3MgKnR5cGUpOwogaW50CQkJeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydChzdHJ1Y3QgeHBydF9jbGFzcyAqdHlwZSk7CitpbnQJCQl4cHJ0X2xvYWRfdHJhbnNwb3J0KGNvbnN0IGNoYXIgKik7CiB2b2lkCQkJeHBydF9zZXRfcmV0cmFuc190aW1lb3V0X2RlZihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogdm9pZAkJCXhwcnRfc2V0X3JldHJhbnNfdGltZW91dF9ydHQoc3RydWN0IHJwY190YXNrICp0YXNrKTsKIHZvaWQJCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIGludCBzdGF0dXMpOwpAQCAtMjU5LDYgKzI2MCw3IEBACiAjZGVmaW5lIFhQUlRfQk9VTkQJCSg0KQogI2RlZmluZSBYUFJUX0JJTkRJTkcJCSg1KQogI2RlZmluZSBYUFJUX0NMT1NJTkcJCSg2KQorI2RlZmluZSBYUFJUX0NPTk5FQ1RJT05fQUJPUlQJKDcpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4cHJ0X3NldF9jb25uZWN0ZWQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCBjN2Q5YmIxOC4uM2UzYTQzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTEsOSArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TVVNQRU5EX0gKICNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfSAogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKLSNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBkMzAyMTU1Li42MmQ4MTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjEyLDcgKzIxMiw3IEBACiAKIC8qIGxpbnV4L21tL3Ztc2Nhbi5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrKTsKKwkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCQkJICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCiAJCQkJCQkgIHVuc2lnbmVkIGludCBzd2FwcGluZXNzKTsKQEAgLTM4Miw2ICszODIsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnAsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpsb29rdXBfc3dhcF9jYWNoZShzd3BfZW50cnlfdCBzd3ApCiB7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaCBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCmluZGV4IGRlZGQzYzAuLmFjOWZmNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCkBAIC0zMSw3ICszMSw3IEBACiAJCQkJICAgICAgcGh5c19hZGRyX3QgYWRkcmVzcyk7CiBleHRlcm4gcGh5c19hZGRyX3Qgc3dpb3RsYl9idXNfdG9fcGh5cyhkbWFfYWRkcl90IGFkZHJlc3MpOwogCi1leHRlcm4gaW50IHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpOwogCiBleHRlcm4gdm9pZAogKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLApAQCAtNDEsMjAgKzQxLDEzIEBACiBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAogCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIAotZXh0ZXJuIGRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiB2b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiBkbWFfYWRkcl90Ci1zd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotCi1leHRlcm4gdm9pZAotc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIGRtYV9hZGRyX3Qgc3dpb3RsYl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtNjYsMzYgKzU5LDM4IEBACiAKIGV4dGVybiBpbnQKIHN3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCWludCBuZWxlbXMsIGludCBkaXIpOworCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpOworCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgaW50IGRpcik7CisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaCBiL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAppbmRleCA5OWI4YmRiLi4wZmYyNzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCkBAIC0xMjUsNiArMTI1LDcgQEAKICNkZWZpbmUgTUdTTF9NT0RFX01PTk9TWU5DCTMKICNkZWZpbmUgTUdTTF9NT0RFX0JJU1lOQwk0CiAjZGVmaW5lIE1HU0xfTU9ERV9SQVcJCTYKKyNkZWZpbmUgTUdTTF9NT0RFX0JBU0VfQ0xPQ0sgICAgNwogCiAjZGVmaW5lIE1HU0xfQlVTX1RZUEVfSVNBCTEKICNkZWZpbmUgTUdTTF9CVVNfVFlQRV9FSVNBCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCBmOWY5MDBjLi5iMjk5YTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC00NjEsNiArNDYxLDEwIEBACiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcHdyaXRlNjQodW5zaWduZWQgaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpOworYXNtbGlua2FnZSBsb25nIHN5c19wcmVhZHYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdmVjLAorCQkJICAgdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2hpZ2gsIHUzMiBwb3NfbG93KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcHdyaXRldih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp2ZWMsCisJCQkgICAgdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2hpZ2gsIHUzMiBwb3NfbG93KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0Y3dkKGNoYXIgX191c2VyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiBhc21saW5rYWdlIGxvbmcgc3lzX21rZGlyKGNvbnN0IGNoYXIgX191c2VyICpwYXRobmFtZSwgaW50IG1vZGUpOwogYXNtbGlua2FnZSBsb25nIHN5c19jaGRpcihjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IGUyZDY2MmUuLjZjZGI2ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogc3RydWN0IHR2ZWNfYmFzZTsKIApAQCAtMjEsNTIgKzIyLDEyNiBAQAogCWNoYXIgc3RhcnRfY29tbVsxNl07CiAJaW50IHN0YXJ0X3BpZDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19MT0NLREVQCisJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwOworI2VuZGlmCiB9OwogCiBleHRlcm4gc3RydWN0IHR2ZWNfYmFzZSBib290X3R2ZWNfYmFzZXM7CiAKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorLyoKKyAqIE5COiBiZWNhdXNlIHdlIGhhdmUgdG8gY29weSB0aGUgbG9ja2RlcF9tYXAsIHNldHRpbmcgdGhlIGxvY2tkZXBfbWFwIGtleQorICogKHNlY29uZCBhcmd1bWVudCkgaGVyZSBpcyByZXF1aXJlZCwgb3RoZXJ3aXNlIGl0IGNvdWxkIGJlIGluaXRpYWxpc2VkIHRvCisgKiB0aGUgY29weSBvZiB0aGUgbG9ja2RlcF9tYXAgbGF0ZXIhIFdlIHVzZSB0aGUgcG9pbnRlciB0byBhbmQgdGhlIHN0cmluZworICogIjxmaWxlPjo8bGluZT4iIGFzIHRoZSBrZXkgcmVzcC4gdGhlIG5hbWUgb2YgdGhlIGxvY2tkZXBfbWFwLgorICovCisjZGVmaW5lIF9fVElNRVJfTE9DS0RFUF9NQVBfSU5JVElBTElaRVIoX2tuKQkJCQlcCisJLmxvY2tkZXBfbWFwID0gU1RBVElDX0xPQ0tERVBfTUFQX0lOSVQoX2tuLCAmX2tuKSwKKyNlbHNlCisjZGVmaW5lIF9fVElNRVJfTE9DS0RFUF9NQVBfSU5JVElBTElaRVIoX2tuKQorI2VuZGlmCisKICNkZWZpbmUgVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpIHsJCVwKIAkJLmVudHJ5ID0geyAucHJldiA9IFRJTUVSX0VOVFJZX1NUQVRJQyB9LAlcCiAJCS5mdW5jdGlvbiA9IChfZnVuY3Rpb24pLAkJCVwKIAkJLmV4cGlyZXMgPSAoX2V4cGlyZXMpLAkJCQlcCiAJCS5kYXRhID0gKF9kYXRhKSwJCQkJXAogCQkuYmFzZSA9ICZib290X3R2ZWNfYmFzZXMsCQkJXAorCQlfX1RJTUVSX0xPQ0tERVBfTUFQX0lOSVRJQUxJWkVSKAkJXAorCQkJX19GSUxFX18gIjoiIF9fc3RyaW5naWZ5KF9fTElORV9fKSkJXAogCX0KIAogI2RlZmluZSBERUZJTkVfVElNRVIoX25hbWUsIF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKQkJXAogCXN0cnVjdCB0aW1lcl9saXN0IF9uYW1lID0JCQkJXAogCQlUSU1FUl9JTklUSUFMSVpFUihfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkKIAotdm9pZCBpbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7Ci12b2lkIGluaXRfdGltZXJfZGVmZXJyYWJsZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwordm9pZCBpbml0X3RpbWVyX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwordm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2lmZGVmIENPTkZJR19MT0NLREVQCisjZGVmaW5lIGluaXRfdGltZXIodGltZXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCisJCWluaXRfdGltZXJfa2V5KCh0aW1lciksICN0aW1lciwgJl9fa2V5KTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGluaXRfdGltZXJfZGVmZXJyYWJsZSh0aW1lcikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQlpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KCh0aW1lciksICN0aW1lciwgJl9fa2V5KTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgaW5pdF90aW1lcl9vbl9zdGFjayh0aW1lcikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQlpbml0X3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldHVwX3RpbWVyKHRpbWVyLCBmbiwgZGF0YSkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQlzZXR1cF90aW1lcl9rZXkoKHRpbWVyKSwgI3RpbWVyLCAmX19rZXksIChmbiksIChkYXRhKSk7XAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgc2V0dXBfdGltZXJfb25fc3RhY2sodGltZXIsIGZuLCBkYXRhKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksICN0aW1lciwgJl9fa2V5LAlcCisJCQkJCSAoZm4pLCAoZGF0YSkpOwkJCVwKKwl9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgaW5pdF90aW1lcih0aW1lcilcCisJaW5pdF90aW1lcl9rZXkoKHRpbWVyKSwgTlVMTCwgTlVMTCkKKyNkZWZpbmUgaW5pdF90aW1lcl9kZWZlcnJhYmxlKHRpbWVyKVwKKwlpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwpCisjZGVmaW5lIGluaXRfdGltZXJfb25fc3RhY2sodGltZXIpXAorCWluaXRfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwpCisjZGVmaW5lIHNldHVwX3RpbWVyKHRpbWVyLCBmbiwgZGF0YSlcCisJc2V0dXBfdGltZXJfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwsIChmbiksIChkYXRhKSkKKyNkZWZpbmUgc2V0dXBfdGltZXJfb25fc3RhY2sodGltZXIsIGZuLCBkYXRhKVwKKwlzZXR1cF90aW1lcl9vbl9zdGFja19rZXkoKHRpbWVyKSwgTlVMTCwgTlVMTCwgKGZuKSwgKGRhdGEpKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVCVUdfT0JKRUNUU19USU1FUlMKLWV4dGVybiB2b2lkIGluaXRfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKK2V4dGVybiB2b2lkIGluaXRfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwogZXh0ZXJuIHZvaWQgZGVzdHJveV90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF90aW1lcl9vbl9zdGFja19rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKLQlpbml0X3RpbWVyKHRpbWVyKTsKKwlpbml0X3RpbWVyX2tleSh0aW1lciwgbmFtZSwga2V5KTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lciwKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF90aW1lcl9rZXkoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lciwKKwkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCXN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LAogCQkJCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksCiAJCQkJdW5zaWduZWQgbG9uZyBkYXRhKQogewogCXRpbWVyLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCXRpbWVyLT5kYXRhID0gZGF0YTsKLQlpbml0X3RpbWVyKHRpbWVyKTsKKwlpbml0X3RpbWVyX2tleSh0aW1lciwgbmFtZSwga2V5KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF90aW1lcl9vbl9zdGFja19rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKIAkJCQkJdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwKIAkJCQkJdW5zaWduZWQgbG9uZyBkYXRhKQogewogCXRpbWVyLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCXRpbWVyLT5kYXRhID0gZGF0YTsKLQlpbml0X3RpbWVyX29uX3N0YWNrKHRpbWVyKTsKKwlpbml0X3RpbWVyX29uX3N0YWNrX2tleSh0aW1lciwgbmFtZSwga2V5KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKaW5kZXggZGQyNTMxNy4uM2UwOGExYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaApAQCAtMTQsNyArMTQsNyBAQAogCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CiAJdW5zaWduZWQgaW50CQlwcmVzZW50OjE7CiAKLQl1MzIgX19pb21lbQkJKmFkZHJlc3M7CisJdm9pZCBfX2lvbWVtCQkqYWRkcmVzczsKIAogCS8qIG1lYXN1cmVzIGluIHVzZWNzICovCiAJdW5zaWduZWQgaW50CQlwZXJpb2Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaAppbmRleCA2MTg2YTc4Li5jN2FhMTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKQEAgLTM4OCwxNyArMzg4LDE0IEBACiAgKiB0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwgLSBzdXBwcmVzcyBzaG9ydC1jaXJjdWl0IG9mIGlnbm9yZWQgc2lnbmFsCiAgKiBAdGFzazoJCXRhc2sgcmVjZWl2aW5nIHRoZSBzaWduYWwKICAqIEBzaWc6CQlzaWduYWwgbnVtYmVyIGJlaW5nIHNlbnQKLSAqIEBoYW5kbGVyOgkJJVNJR19JR04gb3IgJVNJR19ERkwKICAqCiAgKiBSZXR1cm4gemVybyBpZmYgdHJhY2luZyBkb2Vzbid0IGNhcmUgdG8gZXhhbWluZSB0aGlzIGlnbm9yZWQgc2lnbmFsLAogICogc28gaXQgY2FuIHNob3J0LWNpcmN1aXQgbm9ybWFsIGRlbGl2ZXJ5IGFuZCBuZXZlciBldmVuIGdldCBxdWV1ZWQuCi0gKiBFaXRoZXIgQGhhbmRsZXIgaXMgJVNJR19ERkwgYW5kIEBzaWcncyBkZWZhdWx0IGlzIGlnbm9yZSwgb3IgaXQncyAlU0lHX0lHTi4KICAqCiAgKiBDYWxsZWQgd2l0aCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW5saW5lIGludCB0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQkJICAgIGludCBzaWcsCi0JCQkJCQkgICAgdm9pZCBfX3VzZXIgKmhhbmRsZXIpCisJCQkJCQkgICAgaW50IHNpZykKIHsKIAlyZXR1cm4gKHRhc2tfcHRyYWNlKHRhc2spICYgUFRfUFRSQUNFRCkgIT0gMDsKIH0KQEAgLTQwNywxOSArNDA0LDE3IEBACiAgKiB0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsIC0gc3VwcHJlc3Mgc3BlY2lhbCBoYW5kbGluZyBvZiBmYXRhbCBzaWduYWwKICAqIEB0YXNrOgkJdGFzayByZWNlaXZpbmcgdGhlIHNpZ25hbAogICogQHNpZzoJCXNpZ25hbCBudW1iZXIgYmVpbmcgc2VudAotICogQGhhbmRsZXI6CQklU0lHX0RGTCBvciAlU0lHX0lHTgogICoKICAqIFJldHVybiBub256ZXJvIHRvIHByZXZlbnQgc3BlY2lhbCBoYW5kbGluZyBvZiB0aGlzIHRlcm1pbmF0aW9uIHNpZ25hbC4KLSAqIE5vcm1hbGx5IEBoYW5kbGVyIGlzICVTSUdfREZMLiAgSXQgY2FuIGJlICVTSUdfSUdOIGlmIEBzaWcgaXMgaWdub3JlZCwKLSAqIGluIHdoaWNoIGNhc2UgZm9yY2Vfc2lnKCkgaXMgYWJvdXQgdG8gcmVzZXQgaXQgdG8gJVNJR19ERkwuCisgKiBOb3JtYWxseSBoYW5kbGVyIGZvciBzaWduYWwgaXMgJVNJR19ERkwuICBJdCBjYW4gYmUgJVNJR19JR04gaWYgQHNpZyBpcworICogaWdub3JlZCwgaW4gd2hpY2ggY2FzZSBmb3JjZV9zaWcoKSBpcyBhYm91dCB0byByZXNldCBpdCB0byAlU0lHX0RGTC4KICAqIFdoZW4gdGhpcyByZXR1cm5zIHplcm8sIHRoaXMgc2lnbmFsIG1pZ2h0IGNhdXNlIGEgcXVpY2sgdGVybWluYXRpb24KICAqIHRoYXQgZG9lcyBub3QgZ2l2ZSB0aGUgZGVidWdnZXIgYSBjaGFuY2UgdG8gaW50ZXJjZXB0IHRoZSBzaWduYWwuCiAgKgogICogQ2FsbGVkIHdpdGggb3Igd2l0aG91dCBAdGFzay0+c2lnaGFuZC0+c2lnbG9jayBoZWxkLgogICovCiBzdGF0aWMgaW5saW5lIGludCB0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJCQkJCSAgaW50IHNpZywKLQkJCQkJCSAgdm9pZCBfX3VzZXIgKmhhbmRsZXIpCisJCQkJCQkgIGludCBzaWcpCiB7CiAJcmV0dXJuICh0YXNrX3B0cmFjZSh0YXNrKSAmIFBUX1BUUkFDRUQpICE9IDA7CiB9CkBAIC01MDcsNyArNTAyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHRyYWNlaG9va19ub3RpZnlfZGVhdGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCQkJCQkgdm9pZCAqKmRlYXRoX2Nvb2tpZSwgaW50IGdyb3VwX2RlYWQpCiB7Ci0JaWYgKHRhc2stPmV4aXRfc2lnbmFsID09IC0xKQorCWlmICh0YXNrX2RldGFjaGVkKHRhc2spKQogCQlyZXR1cm4gdGFzay0+cHRyYWNlID8gU0lHQ0hMRCA6IERFQVRIX1JFQVA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAppbmRleCAwOGUwODgzLi44NjE1ZDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaApAQCAtMjUyLDggKzI1Miw2IEBACiAJdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJdm9pZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwogCXZvaWQgKCpzZW5kX3hjaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKLQlpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKIAlpbnQgKCp0aW9jbWdldCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCWludCAoKnRpb2Ntc2V0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CkBAIC0yNjQsNiArMjYyLDcgQEAKIAlpbnQgKCpwb2xsX2dldF9jaGFyKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSk7CiAJdm9pZCAoKnBvbGxfcHV0X2NoYXIpKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBsaW5lLCBjaGFyIGNoKTsKICNlbmRpZgorCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnByb2NfZm9wczsKIH07CiAKIHN0cnVjdCB0dHlfZHJpdmVyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGIvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNmMwYzguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9WSURFT19ERUNPREVSX0gKLSNkZWZpbmUgX0xJTlVYX1ZJREVPX0RFQ09ERVJfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2RlZmluZSBIQVZFX1ZJREVPX0RFQ09ERVIgMQotCi1zdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5IHsgLyogdGhpcyBuYW1lIGlzIHRvbyBsb25nICovCi0JX191MzIJZmxhZ3M7Ci0jZGVmaW5lCVZJREVPX0RFQ09ERVJfUEFMCTEJLyogY2FuIGRlY29kZSBQQUwgc2lnbmFsICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfTlRTQwkyCS8qIGNhbiBkZWNvZGUgTlRTQyAqLwotI2RlZmluZQlWSURFT19ERUNPREVSX1NFQ0FNCTQJLyogY2FuIGRlY29kZSBTRUNBTSAqLwotI2RlZmluZQlWSURFT19ERUNPREVSX0FVVE8JOAkvKiBjYW4gYXV0b3NlbnNlIG5vcm0gKi8KLSNkZWZpbmUJVklERU9fREVDT0RFUl9DQ0lSCTE2CS8qIENDSVItNjAxIHBpeGVsIHJhdGUgKDcyMCBwaXhlbHMgcGVyIGxpbmUpIGluc3RlYWQgb2Ygc3F1YXJlIHBpeGVsIHJhdGUgKi8KLQlpbnQJaW5wdXRzOwkJCS8qIG51bWJlciBvZiBpbnB1dHMgKi8KLQlpbnQJb3V0cHV0czsJCS8qIG51bWJlciBvZiBvdXRwdXRzICovCi19OwotCi0vKgotREVDT0RFUl9HRVRfU1RBVFVTIHJldHVybnMgdGhlIGZvbGxvd2luZyBmbGFncy4gIFRoZSBvbmx5IG9uZSB5b3UgbmVlZCBpcwotREVDT0RFUl9TVEFUVVNfR09PRCwgdGhlIG90aGVycyBhcmUganVzdCBuaWNlIHRoaW5ncyB0byBrbm93LgotKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfR09PRAkxCS8qIHJlY2VpdmluZyBhY2NlcHRhYmxlIGlucHV0ICovCi0jZGVmaW5lCURFQ09ERVJfU1RBVFVTX0NPTE9SCTIJLyogcmVjZWl2aW5nIGNvbG9yIGluZm9ybWF0aW9uICovCi0jZGVmaW5lCURFQ09ERVJfU1RBVFVTX1BBTAk0CS8qIGF1dG8gZGV0ZWN0ZWQgKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfTlRTQwk4CS8qIGF1dG8gZGV0ZWN0ZWQgKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfU0VDQU0JMTYJLyogYXV0byBkZXRlY3RlZCAqLwotCi1zdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0IHsKLQl1bnNpZ25lZCBjaGFyIGxlbjsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOwotfTsKLQotI2RlZmluZQlERUNPREVSX0dFVF9DQVBBQklMSVRJRVMgX0lPUignZCcsIDEsIHN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkpCi0jZGVmaW5lCURFQ09ERVJfR0VUX1NUQVRVUyAgICAJX0lPUignZCcsIDIsIGludCkKLSNkZWZpbmUJREVDT0RFUl9TRVRfTk9STQlfSU9XKCdkJywgMywgaW50KQotI2RlZmluZQlERUNPREVSX1NFVF9JTlBVVAlfSU9XKCdkJywgNCwgaW50KQkvKiAwIDw9IGlucHV0IDwgI2lucHV0cyAqLwotI2RlZmluZQlERUNPREVSX1NFVF9PVVRQVVQJX0lPVygnZCcsIDUsIGludCkJLyogMCA8PSBvdXRwdXQgPCAjb3V0cHV0cyAqLwotI2RlZmluZQlERUNPREVSX0VOQUJMRV9PVVRQVVQJX0lPVygnZCcsIDYsIGludCkJLyogYm9vbGVhbiBvdXRwdXQgZW5hYmxlIGNvbnRyb2wgKi8KLSNkZWZpbmUJREVDT0RFUl9TRVRfUElDVFVSRSAgIAlfSU9XKCdkJywgNywgc3RydWN0IHZpZGVvX3BpY3R1cmUpCi0jZGVmaW5lCURFQ09ERVJfU0VUX0dQSU8JX0lPVygnZCcsIDgsIGludCkJLyogc3dpdGNoIGdlbmVyYWwgcHVycG9zZSBwaW4gKi8KLSNkZWZpbmUJREVDT0RFUl9JTklUCQlfSU9XKCdkJywgOSwgc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCkJLyogaW5pdCBpbnRlcm5hbCByZWdpc3RlcnMgYXQgb25jZSAqLwotI2RlZmluZQlERUNPREVSX1NFVF9WQklfQllQQVNTCV9JT1coJ2QnLCAxMCwgaW50KQkvKiBzd2l0Y2ggdmJpIGJ5cGFzcyAqLwotCi0jZGVmaW5lCURFQ09ERVJfRFVNUAkJX0lPKCdkJywgMTkyKQkJLyogZGVidWcgaG9vayAqLwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb19lbmNvZGVyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2VuY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdiNjQyMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2VuY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1ZJREVPX0VOQ09ERVJfSAotI2RlZmluZSBfTElOVVhfVklERU9fRU5DT0RFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5IHsgLyogdGhpcyBuYW1lIGlzIHRvbyBsb25nICovCi0JX191MzIJZmxhZ3M7Ci0jZGVmaW5lCVZJREVPX0VOQ09ERVJfUEFMCTEJLyogY2FuIGVuY29kZSBQQUwgc2lnbmFsICovCi0jZGVmaW5lCVZJREVPX0VOQ09ERVJfTlRTQwkyCS8qIGNhbiBlbmNvZGUgTlRTQyAqLwotI2RlZmluZQlWSURFT19FTkNPREVSX1NFQ0FNCTQJLyogY2FuIGVuY29kZSBTRUNBTSAqLwotI2RlZmluZQlWSURFT19FTkNPREVSX0NDSVIJMTYJLyogQ0NJUi02MDEgcGl4ZWwgcmF0ZSAoNzIwIHBpeGVscyBwZXIgbGluZSkgaW5zdGVhZCBvZiBzcXVhcmUgcGl4ZWwgcmF0ZSAqLwotCWludAlpbnB1dHM7CQkJLyogbnVtYmVyIG9mIGlucHV0cyAqLwotCWludAlvdXRwdXRzOwkJLyogbnVtYmVyIG9mIG91dHB1dHMgKi8KLX07Ci0KLSNkZWZpbmUJRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTIF9JT1IoJ2UnLCAxLCBzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5KQotI2RlZmluZQlFTkNPREVSX1NFVF9OT1JNCV9JT1coJ2UnLCAyLCBpbnQpCi0jZGVmaW5lCUVOQ09ERVJfU0VUX0lOUFVUCV9JT1coJ2UnLCAzLCBpbnQpCS8qIDAgPD0gaW5wdXQgPCAjaW5wdXRzICovCi0jZGVmaW5lCUVOQ09ERVJfU0VUX09VVFBVVAlfSU9XKCdlJywgNCwgaW50KQkvKiAwIDw9IG91dHB1dCA8ICNvdXRwdXRzICovCi0jZGVmaW5lCUVOQ09ERVJfRU5BQkxFX09VVFBVVAlfSU9XKCdlJywgNSwgaW50KQkvKiBib29sZWFuIG91dHB1dCBlbmFibGUgY29udHJvbCAqLwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCmluZGV4IDgzN2YzOTIuLmIxOWVhYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKQEAgLTE2LDYgKzE2LDIzIEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAorI2lmIGRlZmluZWQoX19NSU5fVjRMMSkgJiYgZGVmaW5lZCAoX19LRVJORUxfXykKKworLyoKKyAqIFVzZWQgYnkgdGhvc2UgVjRMMiBjb3JlIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYSBtaW5pbXVtIFY0TDEgc3VwcG9ydCwKKyAqIGluIG9yZGVyIHRvIGFsbG93IFY0TDEgQ29tcGF0aWJpbHR5IGNvZGUgY29tcGlsYXRpb24uCisgKi8KKworc3RydWN0IHZpZGVvX21idWYKK3sKKwlpbnQJc2l6ZTsJCS8qIFRvdGFsIG1lbW9yeSB0byBtYXAgKi8KKwlpbnQJZnJhbWVzOwkJLyogRnJhbWVzICovCisJaW50CW9mZnNldHNbVklERU9fTUFYX0ZSQU1FXTsKK307CisKKyNkZWZpbmUgVklESU9DR01CVUYJCV9JT1IoJ3YnLDIwLCBzdHJ1Y3QgdmlkZW9fbWJ1ZikJCS8qIE1lbW9yeSBtYXAgYnVmZmVyIGluZm8gKi8KKworI2Vsc2UKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkgfHwgIWRlZmluZWQgKF9fS0VSTkVMX18pCiAKICNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRQkxCS8qIENhbiBjYXB0dXJlICovCkBAIC0zMTIsNiArMzI5LDcgQEAKICNkZWZpbmUgVklEX1BMQVlfRU5EX01BUksJCTE0CiAKICNlbmRpZiAvKiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQgKi8KKyNlbmRpZiAvKiBfX01JTl9WNEwxICovCiAKICNlbmRpZiAvKiBfX0xJTlVYX1ZJREVPREVWX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKaW5kZXggNTU3MWRiZS4uMTM5ZDIzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCkBAIC0zNDQsNiArMzQ0LDggQEAKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDggIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc4JykgLyogWVVWWSBwZXIgbGluZSAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTU2MSAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAvKiBjb21wcmVzc2VkIEdCUkcgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BBQzIwNyAgIHY0bDJfZm91cmNjKCdQJywgJzInLCAnMCcsICc3JykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSB2NGwyX2ZvdXJjYygnTScsICczJywgJzEnLCAnMCcpIC8qIGNvbXByZXNzZWQgQkdHUiBiYXllciAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1E5MDVDICAgdjRsMl9mb3VyY2MoJzknLCAnMCcsICc1JywgJ0MnKSAvKiBjb21wcmVzc2VkIFJHR0IgYmF5ZXIgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1BKUEcgICAgIHY0bDJfZm91cmNjKCdQJywgJ0onLCAnUCcsICdHJykgLyogUGl4YXJ0IDczeHggSlBFRyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZZVSAgICB2NGwyX2ZvdXJjYygnWScsICdWJywgJ1knLCAnVScpIC8qIDE2ICBZVlUgNDoyOjIgICAgICovCiAKQEAgLTgyOSw2ICs4MzEsNyBAQAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19VUERBVEUgCQkweDAwMDgKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgCTB4MDAxMAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19TTElERVIgCQkweDAwMjAKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSAJMHgwMDQwCiAKIC8qICBRdWVyeSBmbGFnLCB0byBiZSBPUmVkIHdpdGggdGhlIGNvbnRyb2wgSUQgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMCTB4ODAwMDAwMDAKQEAgLTg3OSw4ICs4ODIsMTUgQEAKICNkZWZpbmUgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiAJKFY0TDJfQ0lEX0JBU0UrMjgpCiAjZGVmaW5lIFY0TDJfQ0lEX0NIUk9NQV9BR0MgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSsyOSkKICNkZWZpbmUgVjRMMl9DSURfQ09MT1JfS0lMTEVSICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMwKQorI2RlZmluZSBWNEwyX0NJRF9DT0xPUkZYCQkJKFY0TDJfQ0lEX0JBU0UrMzEpCitlbnVtIHY0bDJfY29sb3JmeCB7CisJVjRMMl9DT0xPUkZYX05PTkUJPSAwLAorCVY0TDJfQ09MT1JGWF9CVwkJPSAxLAorCVY0TDJfQ09MT1JGWF9TRVBJQQk9IDIsCit9OworCiAvKiBsYXN0IENJRCArIDEgKi8KLSNkZWZpbmUgVjRMMl9DSURfTEFTVFAxICAgICAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzMxKQorI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzIpCiAKIC8qICBNUEVHLWNsYXNzIGNvbnRyb2wgSURzIGRlZmluZWQgYnkgVjRMMiAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgCQkJKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCkBAIC0xMzM5LDYgKzEzNDksNTMgQEAKIH07CiAKIC8qCisgKiBTbGljZWQgVkJJIGRhdGEgaW5zZXJ0ZWQgaW50byBNUEVHIFN0cmVhbXMKKyAqLworCisvKgorICogVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFY6CisgKgorICogU3RydWN0dXJlIG9mIHBheWxvYWQgY29udGFpbmVkIGluIGFuIE1QRUcgMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBQYWNrZXQgaW4gYW4KKyAqIE1QRUctMiBQcm9ncmFtIFBhY2sgdGhhdCBjb250YWlucyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBTbGljZWQgVkJJCisgKiBkYXRhCisgKgorICogTm90ZSwgdGhlIE1QRUctMiBQcm9ncmFtIFBhY2sgYW5kIFByaXZhdGUgU3RyZWFtIDEgUEVTIHBhY2tldCBoZWFkZXIKKyAqIGRlZmluaXRpb25zIGFyZSBub3QgaW5jbHVkZWQgaGVyZS4gIFNlZSB0aGUgTVBFRy0yIHNwZWNpZmljYXRpb25zIGZvciBkZXRhaWxzCisgKiBvbiB0aGVzZSBoZWFkZXJzLgorICovCisKKy8qIExpbmUgdHlwZSBJRHMgKi8KKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1RFTEVURVhUX0IgICAgICgxKQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfQ0FQVElPTl81MjUgICAgKDQpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1ICAgICAgICAoNSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUyAgICAgICAgICAgICg3KQorCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgeworCV9fdTggaWQ7CS8qIE9uZSBvZiBWNEwyX01QRUdfVkJJX0lWVFZfKiBhYm92ZSAqLworCV9fdTggZGF0YVs0Ml07CS8qIFNsaWNlZCBWQkkgZGF0YSBmb3IgdGhlIGxpbmUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwIHsKKwlfX2xlMzIgbGluZW1hc2tbMl07IC8qIEJpdG1hc2tzIG9mIFZCSSBzZXJ2aWNlIGxpbmVzIHByZXNlbnQgKi8KKwlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfbXBlZ192YmlfSVRWMCB7CisJc3RydWN0IHY0bDJfbXBlZ192YmlfaXR2MF9saW5lIGxpbmVbMzZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMAkiaXR2MCIKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMQkiSVRWMCIKKworc3RydWN0IHY0bDJfbXBlZ192YmlfZm10X2l2dHYgeworCV9fdTggbWFnaWNbNF07CisJdW5pb24geworCQlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwIGl0djA7CisJCXN0cnVjdCB2NGwyX21wZWdfdmJpX0lUVjAgSVRWMDsKKwl9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCiAgKglBIEcgRyBSIEUgRyBBIFQgRSAgIFMgVCBSIFUgQyBUIFUgUiBFIFMKICAqLwogCkBAIC0xNDAzLDE0ICsxNDYwLDYgQEAKIAlfX3UzMiByZXZpc2lvbjsgICAgLyogY2hpcCByZXZpc2lvbiwgY2hpcCBzcGVjaWZpYyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qIFZJRElPQ19HX0NISVBfSURFTlRfT0xEOiBEZXByZWNhdGVkLCBkbyBub3QgdXNlICovCi1zdHJ1Y3QgdjRsMl9jaGlwX2lkZW50X29sZCB7Ci0JX191MzIgbWF0Y2hfdHlwZTsgIC8qIE1hdGNoIHR5cGUgKi8KLQlfX3UzMiBtYXRjaF9jaGlwOyAgLyogTWF0Y2ggdGhpcyBjaGlwLCBtZWFuaW5nIGRldGVybWluZWQgYnkgbWF0Y2hfdHlwZSAqLwotCV9fdTMyIGlkZW50OyAgICAgICAvKiBjaGlwIGlkZW50aWZpZXIgYXMgc3BlY2lmaWVkIGluIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4gKi8KLQlfX3UzMiByZXZpc2lvbjsgICAgLyogY2hpcCByZXZpc2lvbiwgY2hpcCBzcGVjaWZpYyAqLwotfTsKLQogLyoKICAqCUkgTyBDIFQgTCAgIEMgTyBEIEUgUyAgIEYgTyBSICAgViBJIEQgRSBPICAgRCBFIFYgSSBDIEUgUwogICoKQEAgLTE0ODgsOCArMTUzNyw2IEBACiAvKiBFeHBlcmltZW50YWwsIG1lYW50IGZvciBkZWJ1Z2dpbmcsIHRlc3RpbmcgYW5kIGludGVybmFsIHVzZS4KICAgIE5ldmVyIHVzZSB0aGlzIGlvY3RsIGluIGFwcGxpY2F0aW9ucyEgKi8KICNkZWZpbmUgVklESU9DX0RCR19HX0NISVBfSURFTlQgX0lPV1IoJ1YnLCA4MSwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQpCi0vKiBUaGlzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgZ28gYXdheSBpbiAyLjYuMzAgKi8KLSNkZWZpbmUgVklESU9DX0dfQ0hJUF9JREVOVF9PTEQgX0lPV1IoJ1YnLCA4MSwgc3RydWN0IHY0bDJfY2hpcF9pZGVudF9vbGQpCiAjZW5kaWYKIAogI2RlZmluZSBWSURJT0NfU19IV19GUkVRX1NFRUsJIF9JT1coJ1YnLCA4Miwgc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCBhMjEwZWRlLi41ZDYzMWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMTM1LDggKzEzNSwxMSBAQAogdm9pZCBfX3dha2VfdXBfY29tbW9uKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJCWludCBucl9leGNsdXNpdmUsIGludCBzeW5jLCB2b2lkICprZXkpOwogdm9pZCBfX3dha2VfdXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgbnIsIHZvaWQgKmtleSk7Ci1leHRlcm4gdm9pZCBfX3dha2VfdXBfbG9ja2VkKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSk7Ci1leHRlcm4gdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucik7Cit2b2lkIF9fd2FrZV91cF9sb2NrZWRfa2V5KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgdm9pZCAqa2V5KTsKK3ZvaWQgX193YWtlX3VwX3N5bmNfa2V5KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yLAorCQkJdm9pZCAqa2V5KTsKK3ZvaWQgX193YWtlX3VwX2xvY2tlZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUpOwordm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucik7CiB2b2lkIF9fd2FrZV91cF9iaXQod2FpdF9xdWV1ZV9oZWFkX3QgKiwgdm9pZCAqLCBpbnQpOwogaW50IF9fd2FpdF9vbl9iaXQod2FpdF9xdWV1ZV9oZWFkX3QgKiwgc3RydWN0IHdhaXRfYml0X3F1ZXVlICosIGludCAoKikodm9pZCAqKSwgdW5zaWduZWQpOwogaW50IF9fd2FpdF9vbl9iaXRfbG9jayh3YWl0X3F1ZXVlX2hlYWRfdCAqLCBzdHJ1Y3Qgd2FpdF9iaXRfcXVldWUgKiwgaW50ICgqKSh2b2lkICopLCB1bnNpZ25lZCk7CkBAIC0xNTUsMjEgKzE1OCwxNyBAQAogI2RlZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKHgpCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIE5VTEwpCiAjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHgpCV9fd2FrZV91cF9zeW5jKCh4KSwgVEFTS19JTlRFUlJVUFRJQkxFLCAxKQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIC8qCi0gKiBtYWNybyB0byBhdm9pZCBpbmNsdWRlIGhlbGwKKyAqIFdha2V1cCBtYWNyb3MgdG8gYmUgdXNlZCB0byByZXBvcnQgZXZlbnRzIHRvIHRoZSB0YXJnZXRzLgogICovCi0jZGVmaW5lIHdha2VfdXBfbmVzdGVkKHgsIHMpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQoJih4KS0+bG9jaywgZmxhZ3MsIChzKSk7CQlcCi0Jd2FrZV91cF9sb2NrZWQoeCk7IAkJCQkJCVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoeCktPmxvY2ssIGZsYWdzKTsJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgd2FrZV91cF9uZXN0ZWQoeCwgcykJCXdha2VfdXAoeCkKLSNlbmRpZgorI2RlZmluZSB3YWtlX3VwX3BvbGwoeCwgbSkJCQkJXAorCV9fd2FrZV91cCh4LCBUQVNLX05PUk1BTCwgMSwgKHZvaWQgKikgKG0pKQorI2RlZmluZSB3YWtlX3VwX2xvY2tlZF9wb2xsKHgsIG0pCQkJCVwKKwlfX3dha2VfdXBfbG9ja2VkX2tleSgoeCksIFRBU0tfTk9STUFMLCAodm9pZCAqKSAobSkpCisjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKHgsIG0pCQkJXAorCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIDEsICh2b2lkICopIChtKSkKKyNkZWZpbmUgd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCh4LCBtKQkJCQlcCisJX193YWtlX3VwX3N5bmNfa2V5KCh4KSwgVEFTS19JTlRFUlJVUFRJQkxFLCAxLCAodm9pZCAqKSAobSkpCiAKICNkZWZpbmUgX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24pIAkJCQkJXAogZG8gewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDNjZDUxZTUuLjEzZTFhZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtNDEsNiArNDEsMTEgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbGF5ZWRfd29yayAqdG9fZGVsYXllZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworfQorCiBzdHJ1Y3QgZXhlY3V0ZV93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCA3MzAwZWNkLi45MzQ0NTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTEwOSw4ICsxMDksOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGlydHlfYmFja2dyb3VuZF9ieXRlczsKIGV4dGVybiBpbnQgdm1fZGlydHlfcmF0aW87CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2bV9kaXJ0eV9ieXRlczsKLWV4dGVybiBpbnQgZGlydHlfd3JpdGViYWNrX2ludGVydmFsOwotZXh0ZXJuIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWw7CitleHRlcm4gdW5zaWduZWQgaW50IGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGlydHlfZXhwaXJlX2ludGVydmFsOwogZXh0ZXJuIGludCB2bV9oaWdobWVtX2lzX2RpcnR5YWJsZTsKIGV4dGVybiBpbnQgYmxvY2tfZHVtcDsKIGV4dGVybiBpbnQgbGFwdG9wX21vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2J0ODE5LmggYi9pbmNsdWRlL21lZGlhL2J0ODE5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNjY2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICAgIGJ0ODE5LmggLSBidDgxOSBub3RpZmljYXRpb25zCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX0JUODE5X0hfCisjZGVmaW5lIF9CVDgxOV9IXworCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogdjRsMl9kZXZpY2Ugbm90aWZpY2F0aW9ucy4gKi8KKworLyogTmVlZGVkIHRvIHJlc2V0IHRoZSBGSUZPIGJ1ZmZlciB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dAorICAgb3IgdGhlIHZpZGVvIHN0YW5kYXJkLiAqLworI2RlZmluZSBCVDgxOV9GSUZPX1JFU0VUX0xPVyAJX0lPKCdiJywgMCkKKyNkZWZpbmUgQlQ4MTlfRklGT19SRVNFVF9ISUdIIAlfSU8oJ2InLCAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyMzQxeC5oIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKaW5kZXggOWVjNGQ1OC4uOWViZTg1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIGN4MjM0MTUvNiBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KKyAgICBjeDIzNDE1LzYvOCBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDYgKzI4LDcgQEAKIGVudW0gY3gyMzQxeF9jYXAgewogCUNYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJID0gMSA8PCAwLAogCUNYMjM0MVhfQ0FQX0hBU19UUyAJICAgPSAxIDw8IDEsCisJQ1gyMzQxWF9DQVBfSEFTX0FDMyAJICAgPSAxIDw8IDIsCiB9OwogCiBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyB7CkBAIC00NywxMSArNDgsMTIgQEAKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIGF1ZGlvX3NhbXBsaW5nX2ZyZXE7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgYXVkaW9fZW5jb2Rpbmc7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSBhdWRpb19sMl9iaXRyYXRlOworCWVudW0gdjRsMl9tcGVnX2F1ZGlvX2FjM19iaXRyYXRlIGF1ZGlvX2FjM19iaXRyYXRlOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgYXVkaW9fbW9kZTsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiBhdWRpb19tb2RlX2V4dGVuc2lvbjsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyBhdWRpb19lbXBoYXNpczsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgYXVkaW9fY3JjOwotCXUxNiBhdWRpb19wcm9wZXJ0aWVzOworCXUzMiBhdWRpb19wcm9wZXJ0aWVzOwogCXUxNiBhdWRpb19tdXRlOwogCiAJLyogdmlkZW8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyNTg0MC5oIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKaW5kZXggZGI0MzFkNS4uMmMzZmJhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKQEAgLTIxLDYgKzIxLDE4IEBACiAjaWZuZGVmIF9DWDI1ODQwX0hfCiAjZGVmaW5lIF9DWDI1ODQwX0hfCiAKKy8qIE5vdGUgdGhhdCB0aGUgY3gyNTg0MCBkcml2ZXIgcmVxdWlyZXMgdGhhdCB0aGUgYnJpZGdlIGRyaXZlciBjYWxscyB0aGUKKyAgIHY0bDJfc3ViZGV2J3MgaW5pdCBvcGVyYXRpb24gaW4gb3JkZXIgdG8gbG9hZCB0aGUgZHJpdmVyJ3MgZmlybXdhcmUuCisgICBXaXRob3V0IHRoaXMgdGhlIGF1ZGlvIHN0YW5kYXJkIGRldGVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSB3aWxsCisgICBvbmx5IGdldCBtb25vLgorCisgICBTaW5jZSBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpcyBvZnRlbiBwcm9ibGVtYXRpYyB3aGVuIHRoZSBkcml2ZXIgaXMKKyAgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBJIHJlY29tbWVuZCBwb3N0cG9uaW5nIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICAgdW50aWwgdGhlIGZpcnN0IG9wZW4gb2YgdGhlIHZpZGVvIGRldmljZS4gQW5vdGhlciByZWFzb24gZm9yCisgICBwb3N0cG9uaW5nIGl0IGlzIHRoYXQgbG9hZGluZyB0aGlzIGZpcm13YXJlIHRha2VzIGEgbG9uZyB0aW1lIChzZWNvbmRzKQorICAgZHVlIHRvIHRoZSBzbG93IGkyYyBidXMgc3BlZWQuIFNvIGl0IHdpbGwgc3BlZWQgdXAgdGhlIGJvb3QgcHJvY2VzcyBpZgorICAgeW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoZSBmdyBhcyBsb25nIGFzIHRoZSB2aWRlbyBkZXZpY2UgaXNuJ3QgdXNlZC4gKi8KKwogZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHsKIAkvKiBDb21wb3NpdGUgdmlkZW8gaW5wdXRzIEluMS1JbjggKi8KIAlDWDI1ODQwX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggNWJmMmVhMC4uN2I1YjkxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0xMTEsNiArMTExLDcgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waXhlbHZpZXdbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld19uZXdbSVJfS0VZVEFCX1NJWkVdOwpAQCAtMTU5LDYgKzE2MCw4IEBACiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ1tJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa2Fpb215W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbTExMDVfbmVjW0lSX0tFWVRBQl9TSVpFXTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCAwMGZhNTdlLi4wNzk2M2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMTQsOCArMTQsNyBAQAogCS8qIFVzZWQgdG8gYXZvaWQgZmFzdCByZXBlYXRpbmcgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgIG9sZDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsgICAgd29yazsKIAljaGFyICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOwogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaCBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKaW5kZXggZTM5MWQ1NS4uNTdkYjQ4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAorKysgYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCkBAIC0xMyw4ICsxMywxMyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCisvKiBmb3IgZmxhZ3MgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfVkZMSVAgICAgIDB4MDAwMDAwMDEgLyogVmVydGljYWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19IRkxJUCAgICAgMHgwMDAwMDAwMiAvKiBIb3Jpem9udGFsIGZsaXAgaW1hZ2UgKi8KKwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgbGluazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggYzVhNmUyMi4uZmZmNDIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4JLyogZm9yIHZtYWxsb2MoKSAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igdm1hbGxvY190b19wYWdlKCkgKi8KQEAgLTExMCw2ICsxMTEsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAkJaXRlbTsKIAorCXN0cnVjdCB2NGwyX2RldmljZSAJCXY0bDJfZGV2OworCiAJLyogZGlmZmVyZW50IGRldmljZSBsb2NrcyAqLwogCXNwaW5sb2NrX3QJCQlzbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwpAQCAtMTQ1LDYgKzE0OCwxMSBAQAogCXN0cnVjdCBzYWE3MTQ2X2RtYQkJZF9ycHMxOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnRvX3NhYTcxNDZfZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxNDZfZGV2LCB2NGwyX2Rldik7Cit9CisKIC8qIGZyb20gc2FhNzE0Nl9pMmMuYyAqLwogaW50IHNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcHRlciwgdTMyIGJpdHJhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCmluZGV4IGM4ZDBiMjMuLmVlZDVmY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCkBAIC0xNTAsMTYgKzE1MCw2IEBACiAJdW5zaWduZWQgaW50IHJlc291cmNlczsJLyogcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgZGV2aWNlICovCiB9OwogCi0jZGVmaW5lIFNBQTcxNDZfRVhDTFVTSVZFCTB4MQotI2RlZmluZSBTQUE3MTQ2X0JFRk9SRQkJMHgyCi0jZGVmaW5lIFNBQTcxNDZfQUZURVIJCTB4NAotCi1zdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzCi17Ci0JdW5zaWduZWQgaW50CWNtZDsKLQlpbnQJCWZsYWdzOwotfTsKLQogLyogZmxhZ3MgKi8KICNkZWZpbmUgU0FBNzE0Nl9VU0VfUE9SVF9CX0ZPUl9WQkkJMHgyICAgICAvKiB1c2UgaW5wdXQgcG9ydCBiIGZvciB2YmkgaGFyZHdhcmUgYnVnIHdvcmthcm91bmQgKi8KIApAQCAtMTc2LDggKzE2NiwxMCBAQAogCWludCBudW1fc3RkczsKIAlpbnQgKCpzdGRfY2FsbGJhY2spKHN0cnVjdCBzYWE3MTQ2X2RldiosIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICopOwogCi0Jc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyAqaW9jdGxzOwotCWxvbmcgKCppb2N0bCkoc3RydWN0IHNhYTcxNDZfZmggKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKwkvKiB0aGUgZXh0ZW5zaW9uIGNhbiBvdmVycmlkZSB0aGlzICovCisJc3RydWN0IHY0bDJfaW9jdGxfb3BzIG9wczsKKwkvKiBwb2ludGVyIHRvIHRoZSBzYWE3MTQ2IGNvcmUgb3BzICovCisJY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpjb3JlX29wczsKIAogCXN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2YmlfZm9wczsKIH07CkBAIC0yMTMsNiArMjA1LDcgQEAKIHZvaWQgc2FhNzE0Nl9zZXRfZ3BpbyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSwgdTggcGluLCB1OCBkYXRhKTsKIAogLyogZnJvbSBzYWE3MTQ2X3ZpZGVvLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2FhNzE0Nl92aWRlb19pb2N0bF9vcHM7CiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZpZGVvX3VvcHM7CiBpbnQgc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CiBpbnQgc2FhNzE0Nl9zdG9wX3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKaW5kZXggYjVkYmVmZS4uMGYzNTI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KICNkZWZpbmUgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KIAotI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTCSgxIDw8IDApIC8qIHVzZSAgOGJpdCBidXMgd2lkdGggKi8KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzE2QklUX0JVUwkoMSA8PCAxKSAvKiB1c2UgMTZiaXQgYnVzIHdpZHRoICovCiAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIFNPQ0FNXy4uLiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfTU9CSUxFX0NFVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggNzQ0MGQ5Mi4uMzcwMTM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CiAJaW50IG51bV91c2VyX2Zvcm1hdHM7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwkJLyogUHJlc2VydmUgZmllbGQgb3ZlciBjbG9zZSgpICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdm9pZCAqaG9zdF9wcml2OwkJLyogUGVyLWRldmljZSBob3N0IHByaXZhdGUgZGF0YSAqLwogCS8qIHNvY19jYW1lcmEuYyBwcml2YXRlIGNvdW50LiBPbmx5IGFjY2Vzc2VkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtNzQsNyArNzUsOCBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKmdldF9mb3JtYXRzKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgaW50LAogCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICopOwotCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKIAkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKQEAgLTkzLDEzICs5NSwxOCBAQAogc3RydWN0IHNvY19jYW1lcmFfbGluayB7CiAJLyogQ2FtZXJhIGJ1cyBpZCwgdXNlZCB0byBtYXRjaCBhIGNhbWVyYSBhbmQgYSBidXMgKi8KIAlpbnQgYnVzX2lkOwotCS8qIEdQSU8gbnVtYmVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBtb2RlcyAqLwotCXVuc2lnbmVkIGludCBncGlvOwogCS8qIFBlciBjYW1lcmEgU09DQU1fU0VOU09SXyogYnVzIGZsYWdzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvKiBPcHRpb25hbCBjYWxsYmFja3MgdG8gcG93ZXIgb24gb3Igb2ZmIGFuZCByZXNldCB0aGUgc2Vuc29yICovCiAJaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKIAlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqKTsKKwkvKgorCSAqIHNvbWUgcGxhdGZvcm1zIG1heSBzdXBwb3J0IGRpZmZlcmVudCBkYXRhIHdpZHRocyB0aGFuIHRoZSBzZW5zb3JzCisJICogbmF0aXZlIG9uZXMgZHVlIHRvIGRpZmZlcmVudCBkYXRhIGxpbmUgcm91dGluZy4gTGV0IHRoZSBib2FyZCBjb2RlCisJICogb3ZlcndyaXRlIHRoZSB3aWR0aCBmbGFncy4KKwkgKi8KKwlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCXVuc2lnbmVkIGxvbmcgKCpxdWVyeV9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqdG9fc29jX2NhbWVyYV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTU5LDcgKzE2Niw4IEBACiAJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN0YXJ0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzdG9wX2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOworCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwpAQCAtMjM5LDE1ICsyNDcsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKAogCQkJdW5zaWduZWQgbG9uZyBjYW1lcmFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgY29tbW9uX2ZsYWdzLCBoc3luYywgdnN5bmMsIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjb21tb25fZmxhZ3MsIGhzeW5jLCB2c3luYywgcGNsaywgZGF0YSwgYnVzd2lkdGgsIG1vZGU7CiAKIAljb21tb25fZmxhZ3MgPSBjYW1lcmFfZmxhZ3MgJiBidXNfZmxhZ3M7CiAKIAloc3luYyA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpOwogCXZzeW5jID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyk7CiAJcGNsayA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKTsKKwlkYXRhID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9MT1cpOworCW1vZGUgPSBjb21tb25fZmxhZ3MgJiAoU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUpOworCWJ1c3dpZHRoID0gY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0s7CiAKLQlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGspID8gMCA6IGNvbW1vbl9mbGFnczsKKwlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGsgfHwgIWRhdGEgfHwgIW1vZGUgfHwgIWJ1c3dpZHRoKSA/IDAgOgorCQljb21tb25fZmxhZ3M7CiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDlhYWY2NTIuLjFiZTQ2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtMzcsMTAgKzM3LDggQEAKIAkvKiBtb2R1bGUgc2FhNzExMDoganVzdCBpZGVudCAxMDAgKi8KIAlWNEwyX0lERU5UX1NBQTcxMTAgPSAxMDAsCiAKLQkvKiBtb2R1bGUgc2FhNzExMToganVzdCBpZGVudCAxMDEgKi8KKwkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAxLTE0OSAqLwogCVY0TDJfSURFTlRfU0FBNzExMSA9IDEwMSwKLQotCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDItMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC02Myw0NSArNjEsOTcgQEAKIAlWNEwyX0lERU5UX09WNzcyMCA9IDI1MSwKIAlWNEwyX0lERU5UX09WNzcyNSA9IDI1MiwKIAotCS8qIENvbmV4YW50IE1QRUcgZW5jb2Rlci9kZWNvZGVyczogcmVzZXJ2ZWQgcmFuZ2UgNDEwLTQyMCAqLworCS8qIG1vZHVsZSBzYWE3MTQ2OiByZXNlcnZlZCByYW5nZSAzMDAtMzA5ICovCisJVjRMMl9JREVOVF9TQUE3MTQ2ID0gMzAwLAorCisJLyogQ29uZXhhbnQgTVBFRyBlbmNvZGVyL2RlY29kZXJzOiByZXNlcnZlZCByYW5nZSA0MDAtNDIwICovCisJVjRMMl9JREVOVF9DWDIzNDE4Xzg0MyA9IDQwMywgLyogSW50ZWdyYXRlZCBBL1YgRGVjb2RlciBvbiB0aGUgJzQxOCAqLwogCVY0TDJfSURFTlRfQ1gyMzQxNSA9IDQxNSwKIAlWNEwyX0lERU5UX0NYMjM0MTYgPSA0MTYsCiAJVjRMMl9JREVOVF9DWDIzNDE4ID0gNDE4LAogCisJLyogbW9kdWxlIGF1MDgyOCAqLworCVY0TDJfSURFTlRfQVUwODI4ID0gODI4LAorCisJLyogbW9kdWxlIGluZHljYW06IGp1c3QgaWRlbnQgMjAwMCAqLworCVY0TDJfSURFTlRfSU5EWUNBTSA9IDIwMDAsCisKKwkvKiBtb2R1bGUgYnQ4MTk6IHJlc2VydmVkIHJhbmdlIDgxMC04MTkgKi8KKwlWNEwyX0lERU5UX0JUODE1QSA9IDgxNSwKKwlWNEwyX0lERU5UX0JUODE3QSA9IDgxNywKKwlWNEwyX0lERU5UX0JUODE5QSA9IDgxOSwKKworCS8qIG1vZHVsZSBidDg1NjoganVzdCBpZGVudCA4NTYgKi8KKwlWNEwyX0lERU5UX0JUODU2ID0gODU2LAorCisJLyogbW9kdWxlIGJ0ODY2OiBqdXN0IGlkZW50IDg2NiAqLworCVY0TDJfSURFTlRfQlQ4NjYgPSA4NjYsCisKKwkvKiBtb2R1bGUga3MwMTI3OiByZXNlcnZlZCByYW5nZSAxMTIwLTExMjkgKi8KKwlWNEwyX0lERU5UX0tTMDEyMlMgPSAxMTIyLAorCVY0TDJfSURFTlRfS1MwMTI3ICA9IDExMjcsCisJVjRMMl9JREVOVF9LUzAxMjdCID0gMTEyOCwKKwogCS8qIG1vZHVsZSB2cDI3c21weDoganVzdCBpZGVudCAyNzAwICovCiAJVjRMMl9JREVOVF9WUDI3U01QWCA9IDI3MDAsCiAKKwkvKiBtb2R1bGUgdnB4MzIyMDogcmVzZXJ2ZWQgcmFuZ2U6IDMyMTAtMzIyOSAqLworCVY0TDJfSURFTlRfVlBYMzIxNEMgPSAzMjE0LAorCVY0TDJfSURFTlRfVlBYMzIxNkIgPSAzMjE2LAorCVY0TDJfSURFTlRfVlBYMzIyMEEgPSAzMjIwLAorCiAJLyogbW9kdWxlIHR2cDUxNTAgKi8KIAlWNEwyX0lERU5UX1RWUDUxNTAgPSA1MTUwLAogCisJLyogbW9kdWxlIHNhYTUyNDZhOiBqdXN0IGlkZW50IDUyNDYgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDZBID0gNTI0NiwKKworCS8qIG1vZHVsZSBzYWE1MjQ5OiBqdXN0IGlkZW50IDUyNDkgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDkgPSA1MjQ5LAorCiAJLyogbW9kdWxlIGNzNTM0NToganVzdCBpZGVudCA1MzQ1ICovCiAJVjRMMl9JREVOVF9DUzUzNDUgPSA1MzQ1LAogCisJLyogbW9kdWxlIHRlYTY0MTVjOiBqdXN0IGlkZW50IDY0MTUgKi8KKwlWNEwyX0lERU5UX1RFQTY0MTVDID0gNjQxNSwKKworCS8qIG1vZHVsZSB0ZWE2NDIwOiBqdXN0IGlkZW50IDY0MjAgKi8KKwlWNEwyX0lERU5UX1RFQTY0MjAgPSA2NDIwLAorCisJLyogbW9kdWxlIHNhYTY1ODg6IGp1c3QgaWRlbnQgNjU4OCAqLworCVY0TDJfSURFTlRfU0FBNjU4OCA9IDY1ODgsCisKIAkvKiBtb2R1bGUgc2FhNjc1MmhzOiByZXNlcnZlZCByYW5nZSA2NzUwLTY3NTkgKi8KIAlWNEwyX0lERU5UX1NBQTY3NTJIUyA9IDY3NTIsCiAJVjRMMl9JREVOVF9TQUE2NzUySFNfQUMzID0gNjc1MywKIAorCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KKwlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAorCisJLyogbW9kdWxlIGFkdjcxNzU6IGp1c3QgaWRlbnQgNzE3NSAqLworCVY0TDJfSURFTlRfQURWNzE3NSA9IDcxNzUsCisKKwkvKiBtb2R1bGUgc2FhNzE4NToganVzdCBpZGVudCA3MTg1ICovCisJVjRMMl9JREVOVF9TQUE3MTg1ID0gNzE4NSwKKworCS8qIG1vZHVsZSBzYWE3MTkxOiBqdXN0IGlkZW50IDcxOTEgKi8KKwlWNEwyX0lERU5UX1NBQTcxOTEgPSA3MTkxLAorCiAJLyogbW9kdWxlIHdtODczOToganVzdCBpZGVudCA4NzM5ICovCiAJVjRMMl9JREVOVF9XTTg3MzkgPSA4NzM5LAogCiAJLyogbW9kdWxlIHdtODc3NToganVzdCBpZGVudCA4Nzc1ICovCiAJVjRMMl9JREVOVF9XTTg3NzUgPSA4Nzc1LAogCisJLyogbW9kdWxlIHRkYTk4NDA6IGp1c3QgaWRlbnQgOTg0MCAqLworCVY0TDJfSURFTlRfVERBOTg0MCA9IDk4NDAsCisKKwkvKiBtb2R1bGUgY2FmZV9jY2ljLCBqdXN0IGlkZW50IDg4MDEgKi8KKwlWNEwyX0lERU5UX0NBRkUgPSA4ODAxLAorCiAJLyogbW9kdWxlIHR3OTkxMDoganVzdCBpZGVudCA5OTEwICovCiAJVjRMMl9JREVOVF9UVzk5MTAgPSA5OTEwLAogCi0JLyogbW9kdWxlIGNzNTMxMzJhOiBqdXN0IGlkZW50IDUzMTMyICovCi0JVjRMMl9JREVOVF9DUzUzbDMyQSA9IDUzMTMyLAotCi0JLyogbW9kdWxlIHVwZDY0MDMxYToganVzdCBpZGVudCA2NDAzMSAqLwotCVY0TDJfSURFTlRfVVBENjQwMzFBID0gNjQwMzEsCi0KLQkvKiBtb2R1bGUgdXBkNjQwODM6IGp1c3QgaWRlbnQgNjQwODMgKi8KLQlWNEwyX0lERU5UX1VQRDY0MDgzID0gNjQwODMsCi0KLQkvKiBtb2R1bGUgbTUyNzkwOiBqdXN0IGlkZW50IDUyNzkwICovCi0JVjRMMl9JREVOVF9NNTI3OTAgPSA1Mjc5MCwKLQogCS8qIG1vZHVsZSBtc3AzNDAwOiByZXNlcnZlZCByYW5nZSAzNDAwMC0zNDk5OSBhbmQgNDQwMDAtNDQ5OTkgKi8KIAlWNEwyX0lERU5UX01TUFg0WFggID0gMzQwMDAsIC8qIGdlbmVyaWMgTVNQWDRYWCBpZGVudGlmaWVyLCBvbmx5CiAJCQkJCXVzZSBpbnRlcm5hbGx5ICh0dmVlcHJvbS5jKS4gKi8KQEAgLTE3OCw2ICsyMjgsMTggQEAKIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMJPSA0NTAxMCwgLyogTm8gd2F5IHRvIGRldGVjdCAibm9ybWFsIiBJNzdBVHggKi8KIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0JPSA0NTAxNSwgLyogYW5kICJsZWFkIGZyZWUiIElBN0FUeCBjaGlwcyAqLwogCVY0TDJfSURFTlRfTVQ5VDAzMQkJPSA0NTAyMCwKKworCS8qIG1vZHVsZSBjczUzMTMyYToganVzdCBpZGVudCA1MzEzMiAqLworCVY0TDJfSURFTlRfQ1M1M2wzMkEgPSA1MzEzMiwKKworCS8qIG1vZHVsZSB1cGQ2NDAzMWE6IGp1c3QgaWRlbnQgNjQwMzEgKi8KKwlWNEwyX0lERU5UX1VQRDY0MDMxQSA9IDY0MDMxLAorCisJLyogbW9kdWxlIHVwZDY0MDgzOiBqdXN0IGlkZW50IDY0MDgzICovCisJVjRMMl9JREVOVF9VUEQ2NDA4MyA9IDY0MDgzLAorCisJLyogbW9kdWxlIG01Mjc5MDoganVzdCBpZGVudCA1Mjc5MCAqLworCVY0TDJfSURFTlRfTTUyNzkwID0gNTI3OTAsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCA5NWU3NGYxLi4zYTY5MDU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0xMDIsMTEgKzEwMiwxNSBAQAogY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCk7CiBjb25zdCBjaGFyICoqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCk7CiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwgczMyIG1pbiwgczMyIG1heCwgczMyIHN0ZXAsIHMzMiBkZWYpOwotaW50IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudShzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBjb25zdCBjaGFyICoqbWVudV9pdGVtcyk7CiAjZGVmaW5lIFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQgKDB4ZmZmZmZmZmYpCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwgY29uc3QgdTMyICppZHMpOworCisvKiBOb3RlOiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycy4gRWFjaCB1MzIgYXJyYXkgaXMgYQorICAgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLiBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoCisgICBhbmQgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuIFRoZSBhcnJheSBvZiB1MzIgcG9pbnRlcnMgbXVzdCBhbHNvCisgICBiZSBzb3J0ZWQsIGZyb20gbG93IGNsYXNzIElEcyB0byBoaWdoIGNsYXNzIElEcy4gKi8KIHUzMiB2NGwyX2N0cmxfbmV4dChjb25zdCB1MzIgKiBjb25zdCAqY3RybF9jbGFzc2VzLCB1MzIgaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDksNiArMTUzLDIxIEBACiAvKiBJbml0aWFsaXplIGFuIHY0bDJfc3ViZGV2IHdpdGggZGF0YSBmcm9tIGFuIGkyY19jbGllbnQgc3RydWN0ICovCiB2b2lkIHY0bDJfaTJjX3N1YmRldl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wcyk7CisvKiBSZXR1cm4gaTJjIGNsaWVudCBhZGRyZXNzIG9mIHY0bDJfc3ViZGV2LiAqLwordW5zaWduZWQgc2hvcnQgdjRsMl9pMmNfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CisKK2VudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB7CisJQUREUlNfUkFESU8sCS8qIFJhZGlvIHR1bmVyIGFkZHJlc3NlcyAqLworCUFERFJTX0RFTU9ELAkvKiBEZW1vZCB0dW5lciBhZGRyZXNzZXMgKi8KKwlBRERSU19UViwJLyogVFYgdHVuZXIgYWRkcmVzc2VzICovCisJLyogVFYgdHVuZXIgYWRkcmVzc2VzIGlmIGRlbW9kIGlzIHByZXNlbnQsIHRoaXMgZXhjbHVkZXMKKwkgICBhZGRyZXNzZXMgdXNlZCBieSB0aGUgZGVtb2R1bGF0b3IgZnJvbSB0aGUgbGlzdCBvZgorCSAgIGNhbmRpZGF0ZXMuICovCisJQUREUlNfVFZfV0lUSF9ERU1PRCwKK307CisvKiBSZXR1cm4gYSBsaXN0IG9mIEkyQyB0dW5lciBhZGRyZXNzZXMgdG8gcHJvYmUuIFVzZSBvbmx5IGlmIHRoZSB0dW5lcgorICAgYWRkcmVzc2VzIGFyZSB1bmtub3duLiAqLworY29uc3QgdW5zaWduZWQgc2hvcnQgKnY0bDJfaTJjX3R1bmVyX2FkZHJzKGVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yODQsNCArMzAzLDcgQEAKICAgIGEgdjRsMl9ncGlvIHN0cnVjdCBpZiBhIGRpcmVjdGlvbiBpcyBhbHNvIG5lZWRlZC4gKi8KICNkZWZpbmUgVklESU9DX0lOVF9TX0dQSU8JCV9JT1coJ2QnLCAxMTcsIHUzMikKIAorLyogR2V0IGlucHV0IHN0YXR1cy4gU2FtZSBhcyB0aGUgc3RhdHVzIGZpZWxkIGluIHRoZSB2NGwyX2lucHV0IHN0cnVjdC4gKi8KKyNkZWZpbmUgVklESU9DX0lOVF9HX0lOUFVUX1NUQVRVUwlfSU9SKCdkJywgMTE4LCB1MzIpCisKICNlbmRpZiAvKiBWNEwyX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IGUzNmZhYWIuLjIwNThkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTQwLDYgKzQwLDggQEAKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogCWxvbmcgKCppb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAJbG9uZyAoKnVubG9ja2VkX2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAJaW50ICgqb3BlbikgKHN0cnVjdCBmaWxlICopOwogCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAppbmRleCA1NWU0MWFmLi4wZGQzZThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0zMyw3ICszMyw5IEBACiAjZGVmaW5lIFY0TDJfREVWSUNFX05BTUVfU0laRSAoQlVTX0lEX1NJWkUgKyAxNikKIAogc3RydWN0IHY0bDJfZGV2aWNlIHsKLQkvKiBkZXYtPmRyaXZlcl9kYXRhIHBvaW50cyB0byB0aGlzIHN0cnVjdCAqLworCS8qIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnRzIHRvIHRoaXMgc3RydWN0LgorCSAgIE5vdGU6IGRldiBtaWdodCBiZSBOVUxMIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBkZXZpY2UKKwkgICBhcyBpcyB0aGUgY2FzZSB3aXRoIGUuZy4gSVNBIGRldmljZXMuICovCiAJc3RydWN0IGRldmljZSAqZGV2OwogCS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVnaXN0ZXJlZCBzdWJkZXZzICovCiAJc3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzOwpAQCAtNDIsMzMgKzQ0LDQzIEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qIHVuaXF1ZSBkZXZpY2UgbmFtZSwgYnkgZGVmYXVsdCB0aGUgZHJpdmVyIG5hbWUgKyBidXMgSUQgKi8KIAljaGFyIG5hbWVbVjRMMl9ERVZJQ0VfTkFNRV9TSVpFXTsKKwkvKiBub3RpZnkgY2FsbGJhY2sgY2FsbGVkIGJ5IHNvbWUgc3ViLWRldmljZXMuICovCisJdm9pZCAoKm5vdGlmeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXVuc2lnbmVkIGludCBub3RpZmljYXRpb24sIHZvaWQgKmFyZyk7CiB9OwogCi0vKiBJbml0aWFsaXplIHY0bDJfZGV2IGFuZCBtYWtlIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnQgdG8gdjRsMl9kZXYgKi8KKy8qIEluaXRpYWxpemUgdjRsMl9kZXYgYW5kIG1ha2UgZGV2LT5kcml2ZXJfZGF0YSBwb2ludCB0byB2NGwyX2Rldi4KKyAgIGRldiBtYXkgYmUgTlVMTCBpbiByYXJlIGNhc2VzIChJU0EgZGV2aWNlcykuIEluIHRoYXQgY2FzZSB5b3UKKyAgIG11c3QgZmlsbCBpbiB0aGUgdjRsMl9kZXYtPm5hbWUgZmllbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gKi8KIGludCBfX211c3RfY2hlY2sgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKLS8qIFNldCB2NGwyX2Rldi0+ZGV2LT5kcml2ZXJfZGF0YSB0byBOVUxMIGFuZCB1bnJlZ2lzdGVyIGFsbCBzdWItZGV2aWNlcyAqLworLyogU2V0IHY0bDJfZGV2LT5kZXYgdG8gTlVMTC4gQ2FsbCB3aGVuIHRoZSBVU0IgcGFyZW50IGRpc2Nvbm5lY3RzLgorICAgU2luY2UgdGhlIHBhcmVudCBkaXNhcHBlYXJzIHRoaXMgZW5zdXJlcyB0aGF0IHY0bDJfZGV2IGRvZXNuJ3QgaGF2ZSBhbgorICAgaW52YWxpZCBwYXJlbnQgcG9pbnRlci4gKi8KK3ZvaWQgdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKy8qIFVucmVnaXN0ZXIgYWxsIHN1Yi1kZXZpY2VzIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdjRsMl9kZXYuICovCiB2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CiAKIC8qIFJlZ2lzdGVyIGEgc3ViZGV2IHdpdGggYSB2NGwyIGRldmljZS4gV2hpbGUgcmVnaXN0ZXJlZCB0aGUgc3ViZGV2IG1vZHVsZQogICAgaXMgbWFya2VkIGFzIGluLXVzZS4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBpcyBubyBsb25nZXIKICAgIGxvYWRlZCB3aGVuIHlvdSBhdHRlbXB0IHRvIHJlZ2lzdGVyIGl0LiAqLwotaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogLyogVW5yZWdpc3RlciBhIHN1YmRldiB3aXRoIGEgdjRsMiBkZXZpY2UuIENhbiBhbHNvIGJlIGNhbGxlZCBpZiB0aGUgc3ViZGV2CiAgICB3YXNuJ3QgcmVnaXN0ZXJlZC4gSW4gdGhhdCBjYXNlIGl0IHdpbGwgZG8gbm90aGluZy4gKi8KIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIC8qIEl0ZXJhdGUgb3ZlciBhbGwgc3ViZGV2cy4gKi8KLSNkZWZpbmUgdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCBkZXYpCQkJCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpCisjZGVmaW5lIHY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgdjRsMl9kZXYpCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYodjRsMl9kZXYpLT5zdWJkZXZzLCBsaXN0KQogCiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uCiAgICBJZ25vcmUgYW55IGVycm9ycy4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldgogICAgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLwotI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyhkZXYsIGNvbmQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgY29uZCwgbywgZiwgYXJncy4uLikgCVwKIAlkbyB7IAkJCQkJCQkJXAogCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOyAJCQkJXAogCQkJCQkJCQkJXAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpICAgCVwKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJih2NGwyX2RldiktPnN1YmRldnMsIGxpc3QpICAgCVwKIAkJCWlmICgoY29uZCkgJiYgc2QtPm9wcy0+byAmJiBzZC0+b3BzLT5vLT5mKSAJXAogCQkJCXNkLT5vcHMtPm8tPmYoc2QgLCAjI2FyZ3MpOyAJCVwKIAl9IHdoaWxlICgwKQpAQCAtNzcsMTIgKzg5LDEyIEBACiAgICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IgLUVOT0lPQ1RMQ01ELCB0aGVuCiAgICByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGFkZCBvciBkZWxldGUgYQogICAgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KLSNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKGRldiwgY29uZCwgbywgZiwgYXJncy4uLikgIFwKKyNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSBcCiAoeyAJCQkJCQkJCQlcCiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsgCQkJCQlcCiAJbG9uZyBlcnIgPSAwOyAJCQkJCQkJXAogCQkJCQkJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKHY0bDJfZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKIAkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAkJXAogCQkJZXJyID0gc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAogCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpCQkJCVwKQEAgLTk0LDE2ICsxMDYsMTYgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgZ3JwX2lkIChpZiAwLCB0aGVuCiAgICBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBhZGQgb3IgZGVsZXRlCiAgICBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfYWxsKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKGRldiwgCQkJCVwKKyNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF9hbGwodjRsMl9kZXYsIGdycGlkLCBvLCBmLCBhcmdzLi4uKSAJCVwKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgCQkJCVwKIAkJCSEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyBtYXRjaGluZyBncnBfaWQgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3Igb3RoZXIgdGhhbiAwIG9yCiAgICAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiBOb3RlIHRoYXQgeW91IGNhbm5vdAogICAgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycihkZXYsCQkJXAorI2RlZmluZSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2Vycih2NGwyX2RldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAlcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LAkJCVwKIAkJICAgICAgICEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IGIwMWMwNDQuLjdhNDUyOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC0yNjcsNiArMjY4LDcgQEAKIAogLyogIFZpZGVvIHN0YW5kYXJkIGZ1bmN0aW9ucyAgKi8KIGV4dGVybiBjb25zdCBjaGFyICp2NGwyX25vcm1fdG9fbmFtZSh2NGwyX3N0ZF9pZCBpZCk7CitleHRlcm4gdm9pZCB2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaW50IGlkLCBzdHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVwZXJpb2QpOwogZXh0ZXJuIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJCSAgICBpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDM3YjA5ZTUuLjFkMTgxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTc4LDYgKzc4LDkgQEAKIAlpbnQgKCpxdWVyeWN0cmwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpOwogCWludCAoKmdfY3RybCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CiAJaW50ICgqc19jdHJsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpnX2V4dF9jdHJscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscyk7CisJaW50ICgqc19leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOworCWludCAoKnRyeV9leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOwogCWludCAoKnF1ZXJ5bWVudSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CiAJbG9uZyAoKmlvY3RsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKQEAgLTExMiw5ICsxMTUsMTcgQEAKIAlpbnQgKCpnX3ZiaV9kYXRhKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKnZiaV9kYXRhKTsKIAlpbnQgKCpnX3NsaWNlZF92YmlfY2FwKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwKTsKIAlpbnQgKCpzX3N0ZF9vdXRwdXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCk7CisJaW50ICgqcXVlcnlzdGQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpOworCWludCAoKmdfaW5wdXRfc3RhdHVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cyk7CiAJaW50ICgqc19zdHJlYW0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpOwotCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZW51bV9mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2MpOwogCWludCAoKmdfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZ19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqc19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqZW51bV9mcmFtZXNpemVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpOworCWludCAoKmVudW1fZnJhbWVpbnRlcnZhbHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCk7CiB9OwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHsKQEAgLTEzMiw3ICsxNDMsNyBAQAogc3RydWN0IHY0bDJfc3ViZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CiAJLyogbmFtZSBtdXN0IGJlIHVuaXF1ZSAqLwogCWNoYXIgbmFtZVtWNEwyX1NVQkRFVl9OQU1FX1NJWkVdOwpAQCAtMTcxLDcgKzE4Miw3IEBACiAJLyogb3BzLT5jb3JlIE1VU1QgYmUgc2V0ICovCiAJQlVHX09OKCFvcHMgfHwgIW9wcy0+Y29yZSk7CiAJc2QtPm9wcyA9IG9wczsKLQlzZC0+ZGV2ID0gTlVMTDsKKwlzZC0+djRsMl9kZXYgPSBOVUxMOwogCXNkLT5uYW1lWzBdID0gJ1wwJzsKIAlzZC0+Z3JwX2lkID0gMDsKIAlzZC0+cHJpdiA9IE5VTEw7CkBAIC0xODYsNCArMTk3LDkgQEAKIAkoIShzZCkgPyAtRU5PREVWIDogKCgoc2QpICYmIChzZCktPm9wcy0+byAmJiAoc2QpLT5vcHMtPm8tPmYpID8JXAogCQkoc2QpLT5vcHMtPm8tPmYoKHNkKSAsICMjYXJncykgOiAtRU5PSU9DVExDTUQpKQogCisvKiBTZW5kIGEgbm90aWZpY2F0aW9uIHRvIHY0bDJfZGV2aWNlLiAqLworI2RlZmluZSB2NGwyX3N1YmRldl9ub3RpZnkoc2QsIG5vdGlmaWNhdGlvbiwgYXJnKQkJCSAgIFwKKwkoKCEoc2QpIHx8ICEoc2QpLT52NGwyX2RldiB8fCAhKHNkKS0+djRsMl9kZXYtPm5vdGlmeSkgPyAtRU5PREVWIDogXAorCSAoc2QpLT52NGwyX2Rldi0+bm90aWZ5KChzZCksIChub3RpZmljYXRpb24pLCAoYXJnKSkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAppbmRleCA4NzRmMTM0Li4xYzU5NDZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBlNTRjNzZkLi4xYjk0YjliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNjE2LDIxICs2MTYsNiBAQAogCXJldHVybiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2RlY19wY291bnRfYXBwcm94X2ludChfX3UzMiAqY291bnQsIGNvbnN0IGludCBkZWNyKQotewotCWlmICgqY291bnQpIHsKLQkJKmNvdW50IC09IGRlY3I7Ci0JCWlmICgoaW50KSpjb3VudCA8IDApCi0JCQkqY291bnQgPSAwOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRjcF9kZWNfcGNvdW50X2FwcHJveChfX3UzMiAqY291bnQsCi0JCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXRjcF9kZWNfcGNvdW50X2FwcHJveF9pbnQoY291bnQsIHRjcF9za2JfcGNvdW50KHNrYikpOwotfQotCiAvKiBFdmVudHMgcGFzc2VkIHRvIGNvbmdlc3Rpb24gY29udHJvbCBpbnRlcmZhY2UgKi8KIGVudW0gdGNwX2NhX2V2ZW50IHsKIAlDQV9FVkVOVF9UWF9TVEFSVCwJLyogZmlyc3QgdHJhbnNtaXQgd2hlbiBubyBwYWNrZXRzIGluIGZsaWdodCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmggYi9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaAppbmRleCA0MjY4OTllLi41NzE4YTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaAorKysgYi9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaApAQCAtMjIsOCArMjIsOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogc3RydWN0IHNuZF90ZWE1NzV4OwogCkBAIC0zNSwxMSArMzYsMTAgQEAKIAogc3RydWN0IHNuZF90ZWE1NzV4IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSB2ZDsJCS8qIHZpZGVvIGRldmljZSAqLwotCXN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBmb3BzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkOwkvKiB2aWRlbyBkZXZpY2UgKi8KIAlpbnQgZGV2X25yOwkJCS8qIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyICsgMSAqLwotCWludCB2ZF9yZWdpc3RlcmVkOwkJLyogdmlkZW8gZGV2aWNlIGlzIHJlZ2lzdGVyZWQgKi8KIAlpbnQgdGVhNTc1OTsJCQkvKiA1NzU5IGNoaXAgaXMgcHJlc2VudCAqLworCWludCBtdXRlOwkJCS8qIERldmljZSBpcyBtdXRlZD8gKi8KIAl1bnNpZ25lZCBpbnQgZnJlcV9maXh1cDsJLyogY3J5c3RhbCBvbmJvYXJkICovCiAJdW5zaWduZWQgaW50IHZhbDsJCS8qIGh3IHZhbHVlICovCiAJdW5zaWduZWQgbG9uZyBmcmVxOwkJLyogZnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2F0eTEyOC5oIGIvaW5jbHVkZS92aWRlby9hdHkxMjguaAppbmRleCA1MWFjNjlmLi5mMDg1MWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2F0eTEyOC5oCisrKyBiL2luY2x1ZGUvdmlkZW8vYXR5MTI4LmgKQEAgLTQxNSw3ICs0MTUsNyBAQAogI2RlZmluZSBQV1JfTUdUX1NMT1dET1dOX01DTEsJCQkweDAwMDAyMDAwCiAKICNkZWZpbmUgUE1JX1BNU0NSX1JFRwkJCQkweDYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAvKiB1c2VkIGJ5IEFUSSBidWcgZml4IGZvciBoYXJkd2FyZSBST00gKi8KICNkZWZpbmUgUkFHRTEyOF9NUFBfVEJfQ09ORklHICAgICAgICAgICAgICAgICAgIDB4MDFjMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2NpcnJ1cy5oIGIvaW5jbHVkZS92aWRlby9jaXJydXMuaAppbmRleCBiMjc3NmI2Li45YTVlOWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL2NpcnJ1cy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vY2lycnVzLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNkZWZpbmUgQ0xfVlNTTTIJMHgzYzMJLyogTW90aGVyYm9hcmQgU2xlZXAgKi8KIAogLyoqKiBWR0EgU2VxdWVuY2VyIFJlZ2lzdGVycyAqKiovCi0jZGVmaW5lIENMX1NFUVIwCTB4MAkvKiBSZXNldCAqLwogLyogdGhlIGZvbGxvd2luZyBhcmUgZnJvbSB0aGUgImV4dGVuc2lvbiByZWdpc3RlcnMiIGdyb3VwICovCiAjZGVmaW5lIENMX1NFUVI2CTB4NgkvKiBVbmxvY2sgQUxMIEV4dGVuc2lvbnMgKi8KICNkZWZpbmUgQ0xfU0VRUjcJMHg3CS8qIEV4dGVuZGVkIFNlcXVlbmNlciBNb2RlICovCkBAIC03MSw2ICs3MCw3IEBACiAjZGVmaW5lIENMX0NSVDFCCTB4MWIJLyogRXh0ZW5kZWQgRGlzcGxheSBDb250cm9scyAqLwogI2RlZmluZSBDTF9DUlQxQwkweDFjCS8qIFN5bmMgYWRqdXN0IGFuZCBnZW5sb2NrIHJlZ2lzdGVyICovCiAjZGVmaW5lIENMX0NSVDFECTB4MWQJLyogT3ZlcmxheSBFeHRlbmRlZCBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIENMX0NSVDFFCTB4MWUJLyogQW5vdGhlciBvdmVyZmxvdyByZWdpc3RlciAqLwogI2RlZmluZSBDTF9DUlQyNQkweDI1CS8qIFBhcnQgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lIENMX0NSVDI3CTB4MjcJLyogSUQgUmVnaXN0ZXIgKi8KICNkZWZpbmUgQ0xfQ1JUNTEJMHg1MQkvKiBQNCBkaXNhYmxlICJmbGlja2VyIGZpeGVyIiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9uZXdwb3J0LmggYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAppbmRleCAxZjVlYmVhLi4wMDFiOTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaAorKysgYi9pbmNsdWRlL3ZpZGVvL25ld3BvcnQuaApAQCAtNDUzLDcgKzQ1Myw3IEBACiB7CiAJaW50IHQgPSBCVVNZX1RJTUVPVVQ7CiAKLQl3aGlsZSAodC0tKQorCXdoaWxlICgtLXQpCiAJCWlmICghKHJlZ3MtPmNzZXQuc3RhdHVzICYgTlBPUlRfU1RBVF9HQlVTWSkpCiAJCQlicmVhazsKIAlyZXR1cm4gIXQ7CkBAIC00NjMsNyArNDYzLDcgQEAKIHsKIAlpbnQgdCA9IEJVU1lfVElNRU9VVDsKIAotCXdoaWxlICh0LS0pCisJd2hpbGUgKC0tdCkKIAkJaWYoIShyZWdzLT5jc2V0LnN0YXR1cyAmIE5QT1JUX1NUQVRfQkJVU1kpKQogCQkJYnJlYWs7CiAJcmV0dXJuICF0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9yYWRlb24uaCBiL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmgKaW5kZXggZTA3MmIxNi4uNTZiMTg4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9yYWRlb24uaAorKysgYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCkBAIC01LDEyICs1LDEyIEBACiAjZGVmaW5lIFJBREVPTl9SRUdTSVpFCQkJMHg0MDAwCiAKIAotI2RlZmluZSBNTV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAgIAotI2RlZmluZSBNTV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIAotI2RlZmluZSBCVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAgIAotI2RlZmluZSBISV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNEMgIAorI2RlZmluZSBNTV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTU1fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEJVU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzMAorI2RlZmluZSBISV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNEMKICNkZWZpbmUgQlVTX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM0Ci0jZGVmaW5lIEkyQ19DTlRMXzEJCQkgICAgICAgMHgwMDk0ICAKKyNkZWZpbmUgSTJDX0NOVExfMQkJCSAgICAgICAweDAwOTQKICNkZWZpbmUgQ05GR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEUwCiAjZGVmaW5lIENORkdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGOAogI2RlZmluZSBDTkZHX0FQRVJfMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKQEAgLTE4LDggKzE4LDggQEAKICNkZWZpbmUgQ05GR19BUEVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA4CiAjZGVmaW5lIENORkdfUkVHXzFfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwQwogI2RlZmluZSBDTkZHX1JFR19BUEVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAweDAxMTAKLSNkZWZpbmUgUEFEX0FHUElOUFVUX0RFTEFZICAgICAgICAgICAgICAgICAgICAgMHgwMTY0ICAKLSNkZWZpbmUgUEFEX0NUTFJfU1RSRU5HVEggICAgICAgICAgICAgICAgICAgICAgMHgwMTY4ICAKKyNkZWZpbmUgUEFEX0FHUElOUFVUX0RFTEFZICAgICAgICAgICAgICAgICAgICAgMHgwMTY0CisjZGVmaW5lIFBBRF9DVExSX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAgIDB4MDE2OAogI2RlZmluZSBQQURfQ1RMUl9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAxNkMKICNkZWZpbmUgUEFEX0NUTFJfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYWEwCiAjZGVmaW5lIEFHUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3NApAQCAtMjcsMTcxICsyNywxNzEgQEAKICNkZWZpbmUgQ0FQMF9UUklHX0NOVEwJCQkgICAgICAgMHgwOTUwCiAjZGVmaW5lIENBUDFfVFJJR19DTlRMCQkgICAgICAgICAgICAgICAweDA5YzAKICNkZWZpbmUgVklQSF9DT05UUk9MCQkJICAgICAgIDB4MEM0MAotI2RlZmluZSBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAgIAotI2RlZmluZSBERVZJQ0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDIgIAotI2RlZmluZSBDT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDQgIAotI2RlZmluZSBTVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDYgIAotI2RlZmluZSBSRVZJU0lPTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDggIAotI2RlZmluZSBSRUdQUk9HX0lORiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDkgIAotI2RlZmluZSBTVUJfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEEgIAotI2RlZmluZSBCQVNFX0NPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEIgIAotI2RlZmluZSBDQUNIRV9MSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEMgIAotI2RlZmluZSBMQVRFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEQgIAotI2RlZmluZSBIRUFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEUgIAotI2RlZmluZSBCSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEYgIAotI2RlZmluZSBSRUdfTUVNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMTAgIAotI2RlZmluZSBSRUdfSU9fQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMTQgIAorI2RlZmluZSBWRU5ET1JfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDAKKyNkZWZpbmUgREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAyCisjZGVmaW5lIENPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwNAorI2RlZmluZSBTVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDYKKyNkZWZpbmUgUkVWSVNJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA4CisjZGVmaW5lIFJFR1BST0dfSU5GICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwOQorI2RlZmluZSBTVUJfQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEEKKyNkZWZpbmUgQkFTRV9DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBCCisjZGVmaW5lIENBQ0hFX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwQworI2RlZmluZSBMQVRFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEQKKyNkZWZpbmUgSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBFCisjZGVmaW5lIEJJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwRgorI2RlZmluZSBSRUdfTUVNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMTAKKyNkZWZpbmUgUkVHX0lPX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjE0CiAjZGVmaW5lIFJFR19SRUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYxOAogI2RlZmluZSBBREFQVEVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMkMKICNkZWZpbmUgQklPU19ST00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjMwCi0jZGVmaW5lIENBUEFCSUxJVElFU19QVFIgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzNCAgCi0jZGVmaW5lIElOVEVSUlVQVF9MSU5FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzQyAgCi0jZGVmaW5lIElOVEVSUlVQVF9QSU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzRCAgCi0jZGVmaW5lIE1JTl9HUkFOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzRSAgCi0jZGVmaW5lIE1BWF9MQVRFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzRiAgCi0jZGVmaW5lIEFEQVBURVJfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY0QyAgCi0jZGVmaW5lIFBNSV9DQVBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1MCAgCi0jZGVmaW5lIFBNSV9OWFRfQ0FQX1BUUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1MSAgCi0jZGVmaW5lIFBNSV9QTUNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1MiAgCi0jZGVmaW5lIFBNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1NCAgCi0jZGVmaW5lIFBNSV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1NyAgCi0jZGVmaW5lIEFHUF9DQVBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1OCAgCi0jZGVmaW5lIEFHUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1QyAgCi0jZGVmaW5lIEFHUF9DT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY2MCAgCisjZGVmaW5lIENBUEFCSUxJVElFU19QVFIgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzNAorI2RlZmluZSBJTlRFUlJVUFRfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0MKKyNkZWZpbmUgSU5URVJSVVBUX1BJTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNECisjZGVmaW5lIE1JTl9HUkFOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzRQorI2RlZmluZSBNQVhfTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0YKKyNkZWZpbmUgQURBUFRFUl9JRF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjRDCisjZGVmaW5lIFBNSV9DQVBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1MAorI2RlZmluZSBQTUlfTlhUX0NBUF9QVFIgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTEKKyNkZWZpbmUgUE1JX1BNQ19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjUyCisjZGVmaW5lIFBNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1NAorI2RlZmluZSBQTUlfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTcKKyNkZWZpbmUgQUdQX0NBUF9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjU4CisjZGVmaW5lIEFHUF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1QworI2RlZmluZSBBR1BfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNjAKICNkZWZpbmUgQUlDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUQwCiAjZGVmaW5lIEFJQ19TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFENAogI2RlZmluZSBBSUNfUFRfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRDgKLSNkZWZpbmUgQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMURDICAKLSNkZWZpbmUgQUlDX0hJX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUUwICAKLSNkZWZpbmUgQUlDX1RMQl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU0ICAKLSNkZWZpbmUgQUlDX1RMQl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU4ICAKLSNkZWZpbmUgREFDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDU4ICAKKyNkZWZpbmUgQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMURDCisjZGVmaW5lIEFJQ19ISV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFMAorI2RlZmluZSBBSUNfVExCX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRTQKKyNkZWZpbmUgQUlDX1RMQl9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU4CisjZGVmaW5lIERBQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1OAogI2RlZmluZSBEQUNfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwN2MKLSNkZWZpbmUgQ1JUQ19HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDUwICAKLSNkZWZpbmUgTUVNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQwICAKKyNkZWZpbmUgQ1JUQ19HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDUwCisjZGVmaW5lIE1FTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0MAogI2RlZmluZSBNQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDAKLSNkZWZpbmUgRVhUX01FTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQ0ICAKKyNkZWZpbmUgRVhUX01FTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQ0CiAjZGVmaW5lIE1DX1RJTUlOR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0NAotI2RlZmluZSBNQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAweDAxNEMgIAotI2RlZmluZSBNRU1fSU9fQ05UTF9BMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzggIAorI2RlZmluZSBNQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAweDAxNEMKKyNkZWZpbmUgTUVNX0lPX0NOVExfQTAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTc4CiAjZGVmaW5lIE1FTV9SRUZSRVNIX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3OAotI2RlZmluZSBNRU1fSU5JVF9MQVRFTkNZX1RJTUVSICAgICAgICAgICAgICAgICAweDAxNTQgIAorI2RlZmluZSBNRU1fSU5JVF9MQVRFTkNZX1RJTUVSICAgICAgICAgICAgICAgICAweDAxNTQKICNkZWZpbmUgTUNfSU5JVF9HRlhfTEFUX1RJTUVSICAgICAgICAgICAgICAgICAgMHgwMTU0Ci0jZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgIDB4MDE1OCAgCi0jZGVmaW5lIEFHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3MCAgCi0jZGVmaW5lIE1FTV9JT19DTlRMX0ExICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3QyAgCisjZGVmaW5lIE1FTV9TRFJBTV9NT0RFX1JFRyAgICAgICAgICAgICAgICAgICAgIDB4MDE1OAorI2RlZmluZSBBR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzAKKyNkZWZpbmUgTUVNX0lPX0NOVExfQTEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTdDCiAjZGVmaW5lIE1DX1JFQURfQ05UTF9BQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3QwogI2RlZmluZSBNRU1fSU9fQ05UTF9CMCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxODAKICNkZWZpbmUgTUNfSU5JVF9NSVNDX0xBVF9USU1FUiAgICAgICAgICAgICAgICAgMHgwMTgwCiAjZGVmaW5lIE1FTV9JT19DTlRMX0IxICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4NAogI2RlZmluZSBNQ19JT1BBRF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxODQKICNkZWZpbmUgTUNfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTg4Ci0jZGVmaW5lIE1DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE1MCAgCi0jZGVmaW5lIE1FTV9JT19PRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4QyAgCisjZGVmaW5lIE1DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE1MAorI2RlZmluZSBNRU1fSU9fT0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOEMKICNkZWZpbmUgTUNfQ0hJUF9JT19PRV9DTlRMX0FCICAgICAgICAgICAgICAgICAgMHgwMThDCi0jZGVmaW5lIE1DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0OCAgCi0jZGVmaW5lIEhPU1RfUEFUSF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEzMCAgCi0jZGVmaW5lIE1FTV9WR0FfV1BfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzOCAgCi0jZGVmaW5lIE1FTV9WR0FfUlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzQyAgCi0jZGVmaW5lIEhEUF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEzOCAgCisjZGVmaW5lIE1DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0OAorI2RlZmluZSBIT1NUX1BBVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMzAKKyNkZWZpbmUgTUVNX1ZHQV9XUF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDM4CisjZGVmaW5lIE1FTV9WR0FfUlBfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzQworI2RlZmluZSBIRFBfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMzgKICNkZWZpbmUgU1dfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTNDCi0jZGVmaW5lIENSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmOCAgCisjZGVmaW5lIENSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNmOAogI2RlZmluZSBDUlRDMl9ESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAweDAzM2MKLSNkZWZpbmUgU1VSRkFDRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjAwICAKLSNkZWZpbmUgU1VSRkFDRTBfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjA0ICAKLSNkZWZpbmUgU1VSRkFDRTFfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjE0ICAKLSNkZWZpbmUgU1VSRkFDRTJfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjI0ICAKLSNkZWZpbmUgU1VSRkFDRTNfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjM0ICAKLSNkZWZpbmUgU1VSRkFDRTRfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjQ0ICAKKyNkZWZpbmUgU1VSRkFDRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjAwCisjZGVmaW5lIFNVUkZBQ0UwX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIwNAorI2RlZmluZSBTVVJGQUNFMV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMTQKKyNkZWZpbmUgU1VSRkFDRTJfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjI0CisjZGVmaW5lIFNVUkZBQ0UzX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIzNAorI2RlZmluZSBTVVJGQUNFNF9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNDQKICNkZWZpbmUgU1VSRkFDRTVfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjU0CiAjZGVmaW5lIFNVUkZBQ0U2X0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI2NAogI2RlZmluZSBTVVJGQUNFN19MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNzQKLSNkZWZpbmUgU1VSRkFDRTBfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjA4ICAKLSNkZWZpbmUgU1VSRkFDRTFfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjE4ICAKLSNkZWZpbmUgU1VSRkFDRTJfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjI4ICAKLSNkZWZpbmUgU1VSRkFDRTNfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjM4ICAKLSNkZWZpbmUgU1VSRkFDRTRfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjQ4ICAKLSNkZWZpbmUgU1VSRkFDRTVfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjU4ICAKLSNkZWZpbmUgU1VSRkFDRTZfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjY4ICAKLSNkZWZpbmUgU1VSRkFDRTdfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjc4ICAKLSNkZWZpbmUgU1VSRkFDRTBfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjBDICAKLSNkZWZpbmUgU1VSRkFDRTFfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjFDICAKLSNkZWZpbmUgU1VSRkFDRTJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjJDICAKLSNkZWZpbmUgU1VSRkFDRTNfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjNDICAKLSNkZWZpbmUgU1VSRkFDRTRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjRDICAKLSNkZWZpbmUgU1VSRkFDRTVfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjVDICAKKyNkZWZpbmUgU1VSRkFDRTBfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjA4CisjZGVmaW5lIFNVUkZBQ0UxX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIxOAorI2RlZmluZSBTVVJGQUNFMl9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMjgKKyNkZWZpbmUgU1VSRkFDRTNfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjM4CisjZGVmaW5lIFNVUkZBQ0U0X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI0OAorI2RlZmluZSBTVVJGQUNFNV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNTgKKyNkZWZpbmUgU1VSRkFDRTZfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjY4CisjZGVmaW5lIFNVUkZBQ0U3X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI3OAorI2RlZmluZSBTVVJGQUNFMF9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMEMKKyNkZWZpbmUgU1VSRkFDRTFfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjFDCisjZGVmaW5lIFNVUkZBQ0UyX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIyQworI2RlZmluZSBTVVJGQUNFM19JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCM0MKKyNkZWZpbmUgU1VSRkFDRTRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjRDCisjZGVmaW5lIFNVUkZBQ0U1X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI1QwogI2RlZmluZSBTVVJGQUNFNl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNkMKICNkZWZpbmUgU1VSRkFDRTdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjdDCiAjZGVmaW5lIFNVUkZBQ0VfQUNDRVNTX0ZMQUdTICAgICAgICAgICAgICAgICAgIDB4MEJGOAotI2RlZmluZSBTVVJGQUNFX0FDQ0VTU19DTFIgICAgICAgICAgICAgICAgICAgICAweDBCRkMgIAotI2RlZmluZSBHRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIAotI2RlZmluZSBHRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDQgIAorI2RlZmluZSBTVVJGQUNFX0FDQ0VTU19DTFIgICAgICAgICAgICAgICAgICAgICAweDBCRkMKKyNkZWZpbmUgR0VOX0lOVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIEdFTl9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0NAogI2RlZmluZSBDUlRDX0VYVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNTQKLSNkZWZpbmUgUkIzRF9DTlRMCQkJICAgICAgIDB4MUMzQyAgCi0jZGVmaW5lIFdBSVRfVU5USUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyMCAgCi0jZGVmaW5lIElTWU5DX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyNCAgCi0jZGVmaW5lIFJCQk1fR1VJQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyQyAgCi0jZGVmaW5lIFJCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0MCAgCi0jZGVmaW5lIFJCQk1fU1RBVFVTX2FsdF8xICAgICAgICAgICAgICAgICAgICAgIDB4MTc0MCAgCi0jZGVmaW5lIFJCQk1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBFQyAgCi0jZGVmaW5lIFJCQk1fQ05UTF9hbHRfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0NCAgCi0jZGVmaW5lIFJCQk1fU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMCAgCi0jZGVmaW5lIFJCQk1fU09GVF9SRVNFVF9hbHRfMSAgICAgICAgICAgICAgICAgIDB4MEU0OCAgCi0jZGVmaW5lIE5RV0FJVF9VTlRJTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU1MCAgCisjZGVmaW5lIFJCM0RfQ05UTAkJCSAgICAgICAweDFDM0MKKyNkZWZpbmUgV0FJVF9VTlRJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzIwCisjZGVmaW5lIElTWU5DX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyNAorI2RlZmluZSBSQkJNX0dVSUNOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MkMKKyNkZWZpbmUgUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRTQwCisjZGVmaW5lIFJCQk1fU1RBVFVTX2FsdF8xICAgICAgICAgICAgICAgICAgICAgIDB4MTc0MAorI2RlZmluZSBSQkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRUMKKyNkZWZpbmUgUkJCTV9DTlRMX2FsdF8xICAgICAgICAgICAgICAgICAgICAgICAgMHgwRTQ0CisjZGVmaW5lIFJCQk1fU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGMAorI2RlZmluZSBSQkJNX1NPRlRfUkVTRVRfYWx0XzEgICAgICAgICAgICAgICAgICAweDBFNDgKKyNkZWZpbmUgTlFXQUlUX1VOVElMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRTUwCiAjZGVmaW5lIFJCQk1fREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU2QwogI2RlZmluZSBSQkJNX0NNREZJRk9fQUREUiAgICAgICAgICAgICAgICAgICAgICAweDBFNzAKICNkZWZpbmUgUkJCTV9DTURGSUZPX0RBVEFMICAgICAgICAgICAgICAgICAgICAgMHgwRTc0Ci0jZGVmaW5lIFJCQk1fQ01ERklGT19EQVRBSCAgICAgICAgICAgICAgICAgICAgIDB4MEU3OCAgCi0jZGVmaW5lIFJCQk1fQ01ERklGT19TVEFUICAgICAgICAgICAgICAgICAgICAgIDB4MEU3QyAgCi0jZGVmaW5lIENSVENfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1QyAgCi0jZGVmaW5lIEdQSU9fVkdBX0REQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgCi0jZGVmaW5lIEdQSU9fRFZJX0REQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2NCAgCi0jZGVmaW5lIEdQSU9fTU9OSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2OCAgCisjZGVmaW5lIFJCQk1fQ01ERklGT19EQVRBSCAgICAgICAgICAgICAgICAgICAgIDB4MEU3OAorI2RlZmluZSBSQkJNX0NNREZJRk9fU1RBVCAgICAgICAgICAgICAgICAgICAgICAweDBFN0MKKyNkZWZpbmUgQ1JUQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDVDCisjZGVmaW5lIEdQSU9fVkdBX0REQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2MAorI2RlZmluZSBHUElPX0RWSV9EREMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjQKKyNkZWZpbmUgR1BJT19NT05JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4CiAjZGVmaW5lIEdQSU9fQ1JUMl9EREMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2YwotI2RlZmluZSBQQUxFVFRFX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjAgIAotI2RlZmluZSBQQUxFVFRFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjQgIAotI2RlZmluZSBQQUxFVFRFXzMwX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjggIAotI2RlZmluZSBDUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIAotI2RlZmluZSBDUlRDX0hfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAweDAyMDQgIAotI2RlZmluZSBDUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDggIAotI2RlZmluZSBDUlRDX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAweDAyMEMgIAotI2RlZmluZSBDUlRDX1ZMSU5FX0NSTlRfVkxJTkUgICAgICAgICAgICAgICAgICAweDAyMTAgIAorI2RlZmluZSBQQUxFVFRFX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjAKKyNkZWZpbmUgUEFMRVRURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEI0CisjZGVmaW5lIFBBTEVUVEVfMzBfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBCOAorI2RlZmluZSBDUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgQ1JUQ19IX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgMHgwMjA0CisjZGVmaW5lIENSVENfVl9UT1RBTF9ESVNQICAgICAgICAgICAgICAgICAgICAgIDB4MDIwOAorI2RlZmluZSBDUlRDX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAweDAyMEMKKyNkZWZpbmUgQ1JUQ19WTElORV9DUk5UX1ZMSU5FICAgICAgICAgICAgICAgICAgMHgwMjEwCiAjZGVmaW5lIENSVENfQ1JOVF9GUkFNRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIxNAogI2RlZmluZSBDUlRDX0dVSV9UUklHX1ZMSU5FICAgICAgICAgICAgICAgICAgICAweDAyMTgKICNkZWZpbmUgQ1JUQ19ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjFDCi0jZGVmaW5lIENSVENfT0ZGU0VUX1JJR0hUICAgICAgICAgICAgICAgICAgICAgIDB4MDIyMCAgCi0jZGVmaW5lIENSVENfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIyNCAgCi0jZGVmaW5lIENSVENfT0ZGU0VUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDIyOCAgCi0jZGVmaW5lIENSVENfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIyQyAgCi0jZGVmaW5lIE9WUl9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIzMCAgCi0jZGVmaW5lIE9WUl9XSURfTEVGVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgIDB4MDIzNCAgCi0jZGVmaW5lIE9WUl9XSURfVE9QX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgIDB4MDIzOCAgCi0jZGVmaW5lIERJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgIDB4MDIzQyAgCi0jZGVmaW5lIFNOQVBTSE9UX1ZIX0NPVU5UUyAgICAgICAgICAgICAgICAgICAgIDB4MDI0MCAgCi0jZGVmaW5lIFNOQVBTSE9UX0ZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDI0NCAgCi0jZGVmaW5lIE5fVklGX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI0OCAgCi0jZGVmaW5lIFNOQVBTSE9UX1ZJRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgIDB4MDI0QyAgCi0jZGVmaW5lIEZQX0NSVENfSF9UT1RBTF9ESVNQICAgICAgICAgICAgICAgICAgIDB4MDI1MCAgCi0jZGVmaW5lIEZQX0NSVENfVl9UT1RBTF9ESVNQICAgICAgICAgICAgICAgICAgIDB4MDI1NCAgCisjZGVmaW5lIENSVENfT0ZGU0VUX1JJR0hUICAgICAgICAgICAgICAgICAgICAgIDB4MDIyMAorI2RlZmluZSBDUlRDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMjQKKyNkZWZpbmUgQ1JUQ19PRkZTRVRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjI4CisjZGVmaW5lIENSVENfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIyQworI2RlZmluZSBPVlJfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMzAKKyNkZWZpbmUgT1ZSX1dJRF9MRUZUX1JJR0hUICAgICAgICAgICAgICAgICAgICAgMHgwMjM0CisjZGVmaW5lIE9WUl9XSURfVE9QX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgIDB4MDIzOAorI2RlZmluZSBESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAweDAyM0MKKyNkZWZpbmUgU05BUFNIT1RfVkhfQ09VTlRTICAgICAgICAgICAgICAgICAgICAgMHgwMjQwCisjZGVmaW5lIFNOQVBTSE9UX0ZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDI0NAorI2RlZmluZSBOX1ZJRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNDgKKyNkZWZpbmUgU05BUFNIT1RfVklGX0NPVU5UICAgICAgICAgICAgICAgICAgICAgMHgwMjRDCisjZGVmaW5lIEZQX0NSVENfSF9UT1RBTF9ESVNQICAgICAgICAgICAgICAgICAgIDB4MDI1MAorI2RlZmluZSBGUF9DUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTQKICNkZWZpbmUgQ1JUX0NSVENfSF9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgMHgwMjU4CiAjZGVmaW5lIENSVF9DUlRDX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgIDB4MDI1QwogI2RlZmluZSBDVVJfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNjAKLSNkZWZpbmUgQ1VSX0hPUlpfVkVSVF9QT1NOICAgICAgICAgICAgICAgICAgICAgMHgwMjY0ICAKLSNkZWZpbmUgQ1VSX0hPUlpfVkVSVF9PRkYgICAgICAgICAgICAgICAgICAgICAgMHgwMjY4ICAKLSNkZWZpbmUgQ1VSX0NMUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjZDICAKLSNkZWZpbmUgQ1VSX0NMUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjcwICAKLSNkZWZpbmUgRlBfSE9SWl9WRVJUX0FDVElWRSAgICAgICAgICAgICAgICAgICAgMHgwMjc4ICAKLSNkZWZpbmUgQ1JUQ19NT1JFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjdDICAKKyNkZWZpbmUgQ1VSX0hPUlpfVkVSVF9QT1NOICAgICAgICAgICAgICAgICAgICAgMHgwMjY0CisjZGVmaW5lIENVUl9IT1JaX1ZFUlRfT0ZGICAgICAgICAgICAgICAgICAgICAgIDB4MDI2OAorI2RlZmluZSBDVVJfQ0xSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNkMKKyNkZWZpbmUgQ1VSX0NMUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjcwCisjZGVmaW5lIEZQX0hPUlpfVkVSVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgIDB4MDI3OAorI2RlZmluZSBDUlRDX01PUkVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAyN0MKICNkZWZpbmUgQ1JUQ19IX0NVVE9GRl9BQ1RJVkVfRU4gICAgICAgICAgICAgICAgKDE8PDQpCiAjZGVmaW5lIENSVENfVl9DVVRPRkZfQUNUSVZFX0VOICAgICAgICAgICAgICAgICgxPDw1KQotI2RlZmluZSBEQUNfRVhUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODAgIAotI2RlZmluZSBGUF9HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODQgIAotI2RlZmluZSBGUF9IT1JaX1NUUkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAweDAyOEMgIAotI2RlZmluZSBGUF9WRVJUX1NUUkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAweDAyOTAgIAotI2RlZmluZSBGUF9IX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgICAweDAyQzQgIAotI2RlZmluZSBGUF9WX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgICAweDAyQzggIAotI2RlZmluZSBBVVhfV0lORE9XX0hPUlpfQ05UTCAgICAgICAgICAgICAgICAgICAweDAyRDggIAotI2RlZmluZSBBVVhfV0lORE9XX1ZFUlRfQ05UTCAgICAgICAgICAgICAgICAgICAweDAyREMgIAorI2RlZmluZSBEQUNfRVhUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyODAKKyNkZWZpbmUgRlBfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjg0CisjZGVmaW5lIEZQX0hPUlpfU1RSRVRDSCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4QworI2RlZmluZSBGUF9WRVJUX1NUUkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAweDAyOTAKKyNkZWZpbmUgRlBfSF9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgICAgICAgMHgwMkM0CisjZGVmaW5lIEZQX1ZfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAgIDB4MDJDOAorI2RlZmluZSBBVVhfV0lORE9XX0hPUlpfQ05UTCAgICAgICAgICAgICAgICAgICAweDAyRDgKKyNkZWZpbmUgQVVYX1dJTkRPV19WRVJUX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwMkRDCiAvLyNkZWZpbmUgRERBX0NPTkZJRwkJCSAgICAgICAweDAyZTAKIC8vI2RlZmluZSBEREFfT05fT0ZGCQkJICAgICAgIDB4MDJlNAogI2RlZmluZSBEVklfSTJDX0NOVExfMQkJCSAgICAgICAweDAyZTQKQEAgLTE5OSwxOTIgKzE5OSwxOTIgQEAKICNkZWZpbmUgR1JQSDJfQlVGRkVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwM0YwCiAjZGVmaW5lIFZHQV9CVUZGRVJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDJGNAogI2RlZmluZSBPVjBfWV9YX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgT1YwX1lfWF9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA0ICAKLSNkZWZpbmUgT1YwX1BJUEVMSU5FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwNDA4ICAKLSNkZWZpbmUgT1YwX1JFR19MT0FEX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwNDEwICAKLSNkZWZpbmUgT1YwX1NDQUxFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDIwICAKLSNkZWZpbmUgT1YwX1ZfSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDI0ICAKLSNkZWZpbmUgT1YwX1AxX1ZfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNDI4ICAKLSNkZWZpbmUgT1YwX1AyM19WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgMHgwNDJDICAKLSNkZWZpbmUgT1YwX1AxX0JMQU5LX0xJTkVTX0FUX1RPUCAgICAgICAgICAgICAgMHgwNDMwICAKLSNkZWZpbmUgT1YwX1AyM19CTEFOS19MSU5FU19BVF9UT1AgICAgICAgICAgICAgMHgwNDM0ICAKLSNkZWZpbmUgT1YwX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDNDICAKLSNkZWZpbmUgT1YwX1ZJRF9CVUYwX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDQwICAKLSNkZWZpbmUgT1YwX1ZJRF9CVUYxX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDQ0ICAKLSNkZWZpbmUgT1YwX1ZJRF9CVUYyX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDQ4ICAKLSNkZWZpbmUgT1YwX1ZJRF9CVUYzX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDRDICAKKyNkZWZpbmUgT1YwX1lfWF9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIE9WMF9QSVBFTElORV9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOAorI2RlZmluZSBPVjBfUkVHX0xPQURfQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDA0MTAKKyNkZWZpbmUgT1YwX1NDQUxFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDIwCisjZGVmaW5lIE9WMF9WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyNAorI2RlZmluZSBPVjBfUDFfVl9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgICAweDA0MjgKKyNkZWZpbmUgT1YwX1AyM19WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgMHgwNDJDCisjZGVmaW5lIE9WMF9QMV9CTEFOS19MSU5FU19BVF9UT1AgICAgICAgICAgICAgIDB4MDQzMAorI2RlZmluZSBPVjBfUDIzX0JMQU5LX0xJTkVTX0FUX1RPUCAgICAgICAgICAgICAweDA0MzQKKyNkZWZpbmUgT1YwX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDNDCisjZGVmaW5lIE9WMF9WSURfQlVGMF9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0MAorI2RlZmluZSBPVjBfVklEX0JVRjFfQkFTRV9BRFJTICAgICAgICAgICAgICAgICAweDA0NDQKKyNkZWZpbmUgT1YwX1ZJRF9CVUYyX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDQ4CisjZGVmaW5lIE9WMF9WSURfQlVGM19CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0QwogI2RlZmluZSBPVjBfVklEX0JVRjRfQkFTRV9BRFJTICAgICAgICAgICAgICAgICAweDA0NTAKICNkZWZpbmUgT1YwX1ZJRF9CVUY1X0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDU0CiAjZGVmaW5lIE9WMF9WSURfQlVGX1BJVENIMF9WQUxVRSAgICAgICAgICAgICAgIDB4MDQ2MAotI2RlZmluZSBPVjBfVklEX0JVRl9QSVRDSDFfVkFMVUUgICAgICAgICAgICAgICAweDA0NjQgIAotI2RlZmluZSBPVjBfQVVUT19GTElQX0NOVFJMICAgICAgICAgICAgICAgICAgICAweDA0NzAgIAotI2RlZmluZSBPVjBfREVJTlRFUkxBQ0VfUEFUVEVSTiAgICAgICAgICAgICAgICAweDA0NzQgIAotI2RlZmluZSBPVjBfU1VCTUlUX0hJU1RPUlkgICAgICAgICAgICAgICAgICAgICAweDA0NzggIAotI2RlZmluZSBPVjBfSF9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ODAgIAotI2RlZmluZSBPVjBfU1RFUF9CWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ODQgIAotI2RlZmluZSBPVjBfUDFfSF9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgICAweDA0ODggIAotI2RlZmluZSBPVjBfUDIzX0hfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAweDA0OEMgIAotI2RlZmluZSBPVjBfUDFfWF9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDA0OTQgIAotI2RlZmluZSBPVjBfUDJfWF9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDA0OTggIAotI2RlZmluZSBPVjBfUDNfWF9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDA0OUMgIAotI2RlZmluZSBPVjBfRklMVEVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDA0QTAgIAotI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8wICAgICAgICAgICAgICAgICAgICAweDA0QjAgIAotI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8xICAgICAgICAgICAgICAgICAgICAweDA0QjQgIAorI2RlZmluZSBPVjBfVklEX0JVRl9QSVRDSDFfVkFMVUUgICAgICAgICAgICAgICAweDA0NjQKKyNkZWZpbmUgT1YwX0FVVE9fRkxJUF9DTlRSTCAgICAgICAgICAgICAgICAgICAgMHgwNDcwCisjZGVmaW5lIE9WMF9ERUlOVEVSTEFDRV9QQVRURVJOICAgICAgICAgICAgICAgIDB4MDQ3NAorI2RlZmluZSBPVjBfU1VCTUlUX0hJU1RPUlkgICAgICAgICAgICAgICAgICAgICAweDA0NzgKKyNkZWZpbmUgT1YwX0hfSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDgwCisjZGVmaW5lIE9WMF9TVEVQX0JZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4NAorI2RlZmluZSBPVjBfUDFfSF9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgICAweDA0ODgKKyNkZWZpbmUgT1YwX1AyM19IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgMHgwNDhDCisjZGVmaW5lIE9WMF9QMV9YX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDQ5NAorI2RlZmluZSBPVjBfUDJfWF9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDA0OTgKKyNkZWZpbmUgT1YwX1AzX1hfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDlDCisjZGVmaW5lIE9WMF9GSUxURVJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRBMAorI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8wICAgICAgICAgICAgICAgICAgICAweDA0QjAKKyNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfMSAgICAgICAgICAgICAgICAgICAgMHgwNEI0CiAjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzIgICAgICAgICAgICAgICAgICAgIDB4MDRCOAogI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8zICAgICAgICAgICAgICAgICAgICAweDA0QkMKICNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfNCAgICAgICAgICAgICAgICAgICAgMHgwNEMwCi0jZGVmaW5lIE9WMF9GTEFHX0NOVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDREQyAgCi0jZGVmaW5lIE9WMF9TTElDRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRFMCAgCi0jZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9MT1cgICAgICAgICAgICAgICAgICAgIDB4MDRFNCAgCi0jZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9ISUdIICAgICAgICAgICAgICAgICAgIDB4MDRFOCAgCi0jZGVmaW5lIE9WMF9HUlBIX0tFWV9DTFJfTE9XICAgICAgICAgICAgICAgICAgIDB4MDRFQyAgCi0jZGVmaW5lIE9WMF9HUlBIX0tFWV9DTFJfSElHSCAgICAgICAgICAgICAgICAgIDB4MDRGMCAgCi0jZGVmaW5lIE9WMF9LRVlfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRGNCAgCi0jZGVmaW5lIE9WMF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRGOCAgCi0jZGVmaW5lIFNVQlBJQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0MCAgCi0jZGVmaW5lIFNVQlBJQ19ERUZDT0xDT04gICAgICAgICAgICAgICAgICAgICAgIDB4MDU0NCAgCi0jZGVmaW5lIFNVQlBJQ19ZX1hfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0QyAgCi0jZGVmaW5lIFNVQlBJQ19ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1MCAgCi0jZGVmaW5lIFNVQlBJQ19WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1NCAgCi0jZGVmaW5lIFNVQlBJQ19IX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1OCAgCisjZGVmaW5lIE9WMF9GTEFHX0NOVFJMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDREQworI2RlZmluZSBPVjBfU0xJQ0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RTAKKyNkZWZpbmUgT1YwX1ZJRF9LRVlfQ0xSX0xPVyAgICAgICAgICAgICAgICAgICAgMHgwNEU0CisjZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9ISUdIICAgICAgICAgICAgICAgICAgIDB4MDRFOAorI2RlZmluZSBPVjBfR1JQSF9LRVlfQ0xSX0xPVyAgICAgICAgICAgICAgICAgICAweDA0RUMKKyNkZWZpbmUgT1YwX0dSUEhfS0VZX0NMUl9ISUdIICAgICAgICAgICAgICAgICAgMHgwNEYwCisjZGVmaW5lIE9WMF9LRVlfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDRGNAorI2RlZmluZSBPVjBfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RjgKKyNkZWZpbmUgU1VCUElDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTQwCisjZGVmaW5lIFNVQlBJQ19ERUZDT0xDT04gICAgICAgICAgICAgICAgICAgICAgIDB4MDU0NAorI2RlZmluZSBTVUJQSUNfWV9YX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAweDA1NEMKKyNkZWZpbmUgU1VCUElDX1lfWF9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTUwCisjZGVmaW5lIFNVQlBJQ19WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1NAorI2RlZmluZSBTVUJQSUNfSF9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NTgKICNkZWZpbmUgU1VCUElDX0JVRjBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgwNTVDCiAjZGVmaW5lIFNVQlBJQ19CVUYxX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDU2MAogI2RlZmluZSBTVUJQSUNfTEMwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDA1NjQKLSNkZWZpbmUgU1VCUElDX0xDMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwNTY4ICAKLSNkZWZpbmUgU1VCUElDX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTZDICAKLSNkZWZpbmUgU1VCUElDX0JUTl9ITElfQ09MQ09OICAgICAgICAgICAgICAgICAgMHgwNTcwICAKLSNkZWZpbmUgU1VCUElDX0JUTl9ITElfWV9YX1NUQVJUICAgICAgICAgICAgICAgMHgwNTc0ICAKLSNkZWZpbmUgU1VCUElDX0JUTl9ITElfWV9YX0VORCAgICAgICAgICAgICAgICAgMHgwNTc4ICAKLSNkZWZpbmUgU1VCUElDX1BBTEVUVEVfSU5ERVggICAgICAgICAgICAgICAgICAgMHgwNTdDICAKLSNkZWZpbmUgU1VCUElDX1BBTEVUVEVfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwNTgwICAKLSNkZWZpbmUgU1VCUElDX0hfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNTg0ICAKLSNkZWZpbmUgU1VCUElDX1ZfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNTg4ICAKLSNkZWZpbmUgRElTUF9NSVNDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAwICAKLSNkZWZpbmUgREFDX01BQ1JPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDA0ICAKLSNkZWZpbmUgRElTUF9QV1JfTUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDA4ICAKLSNkZWZpbmUgRElTUF9URVNUX0RFQlVHX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwRDEwICAKLSNkZWZpbmUgRElTUF9IV19ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDE0ICAKKyNkZWZpbmUgU1VCUElDX0xDMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwNTY4CisjZGVmaW5lIFNVQlBJQ19QSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU2QworI2RlZmluZSBTVUJQSUNfQlROX0hMSV9DT0xDT04gICAgICAgICAgICAgICAgICAweDA1NzAKKyNkZWZpbmUgU1VCUElDX0JUTl9ITElfWV9YX1NUQVJUICAgICAgICAgICAgICAgMHgwNTc0CisjZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9FTkQgICAgICAgICAgICAgICAgIDB4MDU3OAorI2RlZmluZSBTVUJQSUNfUEFMRVRURV9JTkRFWCAgICAgICAgICAgICAgICAgICAweDA1N0MKKyNkZWZpbmUgU1VCUElDX1BBTEVUVEVfREFUQSAgICAgICAgICAgICAgICAgICAgMHgwNTgwCisjZGVmaW5lIFNVQlBJQ19IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDU4NAorI2RlZmluZSBTVUJQSUNfVl9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgICAweDA1ODgKKyNkZWZpbmUgRElTUF9NSVNDX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAwCisjZGVmaW5lIERBQ19NQUNST19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNAorI2RlZmluZSBESVNQX1BXUl9NQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDgKKyNkZWZpbmUgRElTUF9URVNUX0RFQlVHX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwRDEwCisjZGVmaW5lIERJU1BfSFdfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQxNAogI2RlZmluZSBEQUNfQ1JDX1NJRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMTgKICNkZWZpbmUgREFDX0NSQ19TSUcyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDFDCiAjZGVmaW5lIE9WMF9MSU5fVFJBTlNfQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyMAotI2RlZmluZSBPVjBfTElOX1RSQU5TX0IgICAgICAgICAgICAgICAgICAgICAgICAweDBEMjQgIAotI2RlZmluZSBPVjBfTElOX1RSQU5TX0MgICAgICAgICAgICAgICAgICAgICAgICAweDBEMjggIAotI2RlZmluZSBPVjBfTElOX1RSQU5TX0QgICAgICAgICAgICAgICAgICAgICAgICAweDBEMkMgIAotI2RlZmluZSBPVjBfTElOX1RSQU5TX0UgICAgICAgICAgICAgICAgICAgICAgICAweDBEMzAgIAotI2RlZmluZSBPVjBfTElOX1RSQU5TX0YgICAgICAgICAgICAgICAgICAgICAgICAweDBEMzQgIAotI2RlZmluZSBPVjBfR0FNTUFfMF9GICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENDAgIAotI2RlZmluZSBPVjBfR0FNTUFfMTBfMUYgICAgICAgICAgICAgICAgICAgICAgICAweDBENDQgIAotI2RlZmluZSBPVjBfR0FNTUFfMjBfM0YgICAgICAgICAgICAgICAgICAgICAgICAweDBENDggIAotI2RlZmluZSBPVjBfR0FNTUFfNDBfN0YgICAgICAgICAgICAgICAgICAgICAgICAweDBENEMgIAotI2RlZmluZSBPVjBfR0FNTUFfMzgwXzNCRiAgICAgICAgICAgICAgICAgICAgICAweDBENTAgIAotI2RlZmluZSBPVjBfR0FNTUFfM0MwXzNGRiAgICAgICAgICAgICAgICAgICAgICAweDBENTQgIAotI2RlZmluZSBESVNQX01FUkdFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDBENjAgIAotI2RlZmluZSBESVNQX09VVFBVVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDBENjQgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0EgICAgICAgICAgICAgICAgICAweDBEODAgIAorI2RlZmluZSBPVjBfTElOX1RSQU5TX0IgICAgICAgICAgICAgICAgICAgICAgICAweDBEMjQKKyNkZWZpbmUgT1YwX0xJTl9UUkFOU19DICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDI4CisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyQworI2RlZmluZSBPVjBfTElOX1RSQU5TX0UgICAgICAgICAgICAgICAgICAgICAgICAweDBEMzAKKyNkZWZpbmUgT1YwX0xJTl9UUkFOU19GICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDM0CisjZGVmaW5lIE9WMF9HQU1NQV8wX0YgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0MAorI2RlZmluZSBPVjBfR0FNTUFfMTBfMUYgICAgICAgICAgICAgICAgICAgICAgICAweDBENDQKKyNkZWZpbmUgT1YwX0dBTU1BXzIwXzNGICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDQ4CisjZGVmaW5lIE9WMF9HQU1NQV80MF83RiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0QworI2RlZmluZSBPVjBfR0FNTUFfMzgwXzNCRiAgICAgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgT1YwX0dBTU1BXzNDMF8zRkYgICAgICAgICAgICAgICAgICAgICAgMHgwRDU0CisjZGVmaW5lIERJU1BfTUVSR0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ2MAorI2RlZmluZSBESVNQX09VVFBVVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDBENjQKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9BICAgICAgICAgICAgICAgICAgMHgwRDgwCiAjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfQiAgICAgICAgICAgICAgICAgIDB4MEQ4NAogI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0MgICAgICAgICAgICAgICAgICAweDBEODgKICNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9EICAgICAgICAgICAgICAgICAgMHgwRDhDCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRSAgICAgICAgICAgICAgICAgIDB4MEQ5MCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRiAgICAgICAgICAgICAgICAgIDB4MEQ5NCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9BICAgICAgICAgICAgICAgICAgIDB4MEQ5OCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9CICAgICAgICAgICAgICAgICAgIDB4MEQ5QyAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9DICAgICAgICAgICAgICAgICAgIDB4MERBMCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9EICAgICAgICAgICAgICAgICAgIDB4MERBNCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9FICAgICAgICAgICAgICAgICAgIDB4MERBOCAgCi0jZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9GICAgICAgICAgICAgICAgICAgIDB4MERBQyAgCi0jZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8wVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCMCAgCi0jZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8xVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCNCAgCi0jZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8yVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCOCAgCi0jZGVmaW5lIFJNWF9IT1JaX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERCQyAgCi0jZGVmaW5lIERBQ19FTUJFRERFRF9TWU5DX0NOVEwgICAgICAgICAgICAgICAgIDB4MERDMCAgCi0jZGVmaW5lIERBQ19CUk9BRF9QVUxTRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MERDNCAgCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRSAgICAgICAgICAgICAgICAgIDB4MEQ5MAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0YgICAgICAgICAgICAgICAgICAweDBEOTQKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfVklEX0EgICAgICAgICAgICAgICAgICAgMHgwRDk4CisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9CICAgICAgICAgICAgICAgICAgIDB4MEQ5QworI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfQyAgICAgICAgICAgICAgICAgICAweDBEQTAKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfVklEX0QgICAgICAgICAgICAgICAgICAgMHgwREE0CisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9FICAgICAgICAgICAgICAgICAgIDB4MERBOAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfRiAgICAgICAgICAgICAgICAgICAweDBEQUMKKyNkZWZpbmUgUk1YX0hPUlpfRklMVEVSXzBUQVBfQ09FRiAgICAgICAgICAgICAgMHgwREIwCisjZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8xVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCNAorI2RlZmluZSBSTVhfSE9SWl9GSUxURVJfMlRBUF9DT0VGICAgICAgICAgICAgICAweDBEQjgKKyNkZWZpbmUgUk1YX0hPUlpfUEhBU0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwREJDCisjZGVmaW5lIERBQ19FTUJFRERFRF9TWU5DX0NOVEwgICAgICAgICAgICAgICAgIDB4MERDMAorI2RlZmluZSBEQUNfQlJPQURfUFVMU0UgICAgICAgICAgICAgICAgICAgICAgICAweDBEQzQKICNkZWZpbmUgREFDX1NLRVdfQ0xLUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwREM4CiAjZGVmaW5lIERBQ19JTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERDQwogI2RlZmluZSBEQUNfTkVHX1NZTkNfTEVWRUwgICAgICAgICAgICAgICAgICAgICAweDBERDAKLSNkZWZpbmUgREFDX1BPU19TWU5DX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwREQ0ICAKLSNkZWZpbmUgREFDX0JMQU5LX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgMHgwREQ4ICAKLSNkZWZpbmUgQ0xPQ0tfQ05UTF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAKLSNkZWZpbmUgQ0xPQ0tfQ05UTF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDICAKLSNkZWZpbmUgQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzA0ICAKLSNkZWZpbmUgQ1BfUkJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwICAKLSNkZWZpbmUgQ1BfUkJfUlBUUl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzBDICAKLSNkZWZpbmUgQ1BfUkJfUlBUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzEwICAKLSNkZWZpbmUgQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzE0ICAKLSNkZWZpbmUgQ1BfUkJfV1BUUl9ERUxBWSAgICAgICAgICAgICAgICAgICAgICAgMHgwNzE4ICAKLSNkZWZpbmUgQ1BfSUJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzM4ICAKLSNkZWZpbmUgQ1BfSUJfQlVGU1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzNDICAKLSNkZWZpbmUgU0NSQVRDSF9SRUcwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUUwICAKLSNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgMHgxNUUwICAKLSNkZWZpbmUgU0NSQVRDSF9SRUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUU0ICAKLSNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgMHgxNUU0ICAKKyNkZWZpbmUgREFDX1BPU19TWU5DX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwREQ0CisjZGVmaW5lIERBQ19CTEFOS19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEREOAorI2RlZmluZSBDTE9DS19DTlRMX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQ0xPQ0tfQ05UTF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIENQX1JCX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwNAorI2RlZmluZSBDUF9SQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDAKKyNkZWZpbmUgQ1BfUkJfUlBUUl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzBDCisjZGVmaW5lIENQX1JCX1JQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxMAorI2RlZmluZSBDUF9SQl9XUFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MTQKKyNkZWZpbmUgQ1BfUkJfV1BUUl9ERUxBWSAgICAgICAgICAgICAgICAgICAgICAgMHgwNzE4CisjZGVmaW5lIENQX0lCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDczOAorI2RlZmluZSBDUF9JQl9CVUZTWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3M0MKKyNkZWZpbmUgU0NSQVRDSF9SRUcwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUUwCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMAorI2RlZmluZSBTQ1JBVENIX1JFRzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RTQKKyNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgMHgxNUU0CiAjZGVmaW5lIFNDUkFUQ0hfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFOAogI2RlZmluZSBHVUlfU0NSQVRDSF9SRUcyICAgICAgICAgICAgICAgICAgICAgICAweDE1RTgKICNkZWZpbmUgU0NSQVRDSF9SRUczICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUVDCi0jZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzMgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFQyAgCi0jZGVmaW5lIFNDUkFUQ0hfUkVHNCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGMCAgCi0jZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzQgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGMCAgCi0jZGVmaW5lIFNDUkFUQ0hfUkVHNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGNCAgCi0jZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzUgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGNCAgCi0jZGVmaW5lIFNDUkFUQ0hfVU1TSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3MCAgCi0jZGVmaW5lIFNDUkFUQ0hfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3NCAgCi0jZGVmaW5lIERQX0JSVVNIX0ZSR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgIDB4MTQ3QyAgCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzMgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFQworI2RlZmluZSBTQ1JBVENIX1JFRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RjAKKyNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHNCAgICAgICAgICAgICAgICAgICAgICAgMHgxNUYwCisjZGVmaW5lIFNDUkFUQ0hfUkVHNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGNAorI2RlZmluZSBHVUlfU0NSQVRDSF9SRUc1ICAgICAgICAgICAgICAgICAgICAgICAweDE1RjQKKyNkZWZpbmUgU0NSQVRDSF9VTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzcwCisjZGVmaW5lIFNDUkFUQ0hfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3NAorI2RlZmluZSBEUF9CUlVTSF9GUkdEX0NMUiAgICAgICAgICAgICAgICAgICAgICAweDE0N0MKICNkZWZpbmUgRFBfQlJVU0hfQktHRF9DTFIgICAgICAgICAgICAgICAgICAgICAgMHgxNDc4CiAjZGVmaW5lIERTVF9MSU5FX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTYwMAotI2RlZmluZSBEU1RfTElORV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2MDQgIAotI2RlZmluZSBTUkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1QUMgIAorI2RlZmluZSBEU1RfTElORV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2MDQKKyNkZWZpbmUgU1JDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUFDCiAjZGVmaW5lIFNSQ19QSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVCMAogI2RlZmluZSBTUkNfVElMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MDQKICNkZWZpbmUgU1JDX1BJVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgxNDI4Ci0jZGVmaW5lIFNSQ19YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxNCAgCi0jZGVmaW5lIFNSQ19ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxOCAgCi0jZGVmaW5lIFNSQ19YX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTU5MCAgCi0jZGVmaW5lIFNSQ19ZX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzNCAgCisjZGVmaW5lIFNSQ19YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxNAorI2RlZmluZSBTUkNfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MTgKKyNkZWZpbmUgU1JDX1hfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTkwCisjZGVmaW5lIFNSQ19ZX1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzNAogI2RlZmluZSBEU1RfWV9YCQkJCSAgICAgICAweDE0MzgKICNkZWZpbmUgRFNUX1dJRFRIX0hFSUdIVAkJICAgICAgIDB4MTU5OAogI2RlZmluZSBEU1RfSEVJR0hUX1dJRFRICQkgICAgICAgMHgxNDNjCiAjZGVmaW5lIERTVF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNAotI2RlZmluZSBTUkNfQ0xVVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDE3ODAgIAotI2RlZmluZSBTUkNfQ0xVVF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3ODQgIAotI2RlZmluZSBTUkNfQ0xVVF9EQVRBX1JEICAgICAgICAgICAgICAgICAgICAgICAweDE3ODggIAotI2RlZmluZSBIT1NUX0RBVEEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3QzAgIAotI2RlZmluZSBIT1NUX0RBVEExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3QzQgIAotI2RlZmluZSBIT1NUX0RBVEEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3QzggIAotI2RlZmluZSBIT1NUX0RBVEEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3Q0MgIAotI2RlZmluZSBIT1NUX0RBVEE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RDAgIAotI2RlZmluZSBIT1NUX0RBVEE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RDQgIAotI2RlZmluZSBIT1NUX0RBVEE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RDggIAorI2RlZmluZSBTUkNfQ0xVVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDE3ODAKKyNkZWZpbmUgU1JDX0NMVVRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzg0CisjZGVmaW5lIFNSQ19DTFVUX0RBVEFfUkQgICAgICAgICAgICAgICAgICAgICAgIDB4MTc4OAorI2RlZmluZSBIT1NUX0RBVEEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3QzAKKyNkZWZpbmUgSE9TVF9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0M0CisjZGVmaW5lIEhPU1RfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdDOAorI2RlZmluZSBIT1NUX0RBVEEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3Q0MKKyNkZWZpbmUgSE9TVF9EQVRBNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0QwCisjZGVmaW5lIEhPU1RfREFUQTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdENAorI2RlZmluZSBIT1NUX0RBVEE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RDgKICNkZWZpbmUgSE9TVF9EQVRBNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0RDCiAjZGVmaW5lIEhPU1RfREFUQV9MQVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdFMAogI2RlZmluZSBEUF9TUkNfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RDQKLSNkZWZpbmUgRFBfU1JDX0ZSR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUQ4ICAKLSNkZWZpbmUgRFBfU1JDX0JLR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNURDICAKLSNkZWZpbmUgU0NfTEVGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQwICAKLSNkZWZpbmUgU0NfUklHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQ0ICAKLSNkZWZpbmUgU0NfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQ4ICAKLSNkZWZpbmUgU0NfQk9UVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjRDICAKLSNkZWZpbmUgU1JDX1NDX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjU0ICAKLSNkZWZpbmUgU1JDX1NDX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjVDICAKLSNkZWZpbmUgRFBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkMwICAKLSNkZWZpbmUgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SICAgICAgICAgICAgICAgMHgxNkQwICAKLSNkZWZpbmUgRFBfREFUQVRZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkM0ICAKLSNkZWZpbmUgRFBfTUlYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkM4ICAKLSNkZWZpbmUgRFBfV1JJVEVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkNDICAKLSNkZWZpbmUgRFBfWE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Y4ICAKKyNkZWZpbmUgRFBfU1JDX0ZSR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUQ4CisjZGVmaW5lIERQX1NSQ19CS0dEX0NMUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVEQworI2RlZmluZSBTQ19MRUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2NDAKKyNkZWZpbmUgU0NfUklHSFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQ0CisjZGVmaW5lIFNDX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0OAorI2RlZmluZSBTQ19CT1RUT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2NEMKKyNkZWZpbmUgU1JDX1NDX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjU0CisjZGVmaW5lIFNSQ19TQ19CT1RUT00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY1QworI2RlZmluZSBEUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2QzAKKyNkZWZpbmUgRFBfQ05UTF9YRElSX1lESVJfWU1BSk9SICAgICAgICAgICAgICAgMHgxNkQwCisjZGVmaW5lIERQX0RBVEFUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDNAorI2RlZmluZSBEUF9NSVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2QzgKKyNkZWZpbmUgRFBfV1JJVEVfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkNDCisjZGVmaW5lIERQX1hPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdGOAogI2RlZmluZSBDTFJfQ01QX0NMUl9TUkMgICAgICAgICAgICAgICAgICAgICAgICAweDE1QzQKICNkZWZpbmUgQ0xSX0NNUF9DTFJfRFNUICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUM4CiAjZGVmaW5lIENMUl9DTVBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVDMAotI2RlZmluZSBDTFJfQ01QX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1Q0MgIAotI2RlZmluZSBEU1RDQUNIRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MTAgIAotI2RlZmluZSBEU1RDQUNIRV9DVExTVEFUICAgICAgICAgICAgICAgICAgICAgICAweDE3MTQgIAotI2RlZmluZSBERUZBVUxUX1BJVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDE2RTAgIAotI2RlZmluZSBERUZBVUxUX1NDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAweDE2RTggIAorI2RlZmluZSBDTFJfQ01QX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1Q0MKKyNkZWZpbmUgRFNUQ0FDSEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzEwCisjZGVmaW5lIERTVENBQ0hFX0NUTFNUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTcxNAorI2RlZmluZSBERUZBVUxUX1BJVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAweDE2RTAKKyNkZWZpbmUgREVGQVVMVF9TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgMHgxNkU4CiAjZGVmaW5lIERFRkFVTFRfU0NfVE9QX0xFRlQgICAgICAgICAgICAgICAgICAgIDB4MTZFQwogI2RlZmluZSBTUkNfUElUQ0hfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAweDE0MjgKICNkZWZpbmUgRFNUX1BJVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgxNDJDCi0jZGVmaW5lIERQX0dVSV9NQVNURVJfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MTQ2QyAgCi0jZGVmaW5lIFNDX1RPUF9MRUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZFQyAgCi0jZGVmaW5lIFNDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZGMCAgCi0jZGVmaW5lIFNSQ19TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgICAgIDB4MTZGNCAgCisjZGVmaW5lIERQX0dVSV9NQVNURVJfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MTQ2QworI2RlZmluZSBTQ19UT1BfTEVGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2RUMKKyNkZWZpbmUgU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkYwCisjZGVmaW5lIFNSQ19TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgICAgIDB4MTZGNAogI2RlZmluZSBSQjJEX0RTVENBQ0hFX01PREUJCSAgICAgICAweDM0MjgKICNkZWZpbmUgUkIyRF9EU1RDQUNIRV9DVExTVEFUX2Jyb2tlbgkgICAgICAgMHgzNDJDIC8qIGRvIG5vdCB1c2UgKi8KICNkZWZpbmUgTFZEU19HRU5fQ05UTAkJCSAgICAgICAweDAyZDAKQEAgLTY4Niw3ICs2ODYsNyBAQAogI2RlZmluZSBWRVJUX0ZQX0xPT1BfU1RSRVRDSAkJCSAgICgweDcgPDwgMjgpCiAjZGVmaW5lIFZFUlRfU1RSRVRDSF9SRVNFUlZFRAkJCSAgIDB4ZjEwMDAwMDAKIAotLyogREFDX0NOVEwgYml0IGNvbnN0YW50cyAqLyAgIAorLyogREFDX0NOVEwgYml0IGNvbnN0YW50cyAqLwogI2RlZmluZSBEQUNfOEJJVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAogI2RlZmluZSBEQUNfNEJQUF9QSVhfT1JERVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBEQUNfQ1JDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMApAQCAtNzAwLDcgKzcwMCw3IEBACiAjZGVmaW5lIERBQ19DTVBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAgMykKICNkZWZpbmUgREFDX0NNUF9PVVRQVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8ICA3KQogCi0vKiBEQUNfQ05UTDIgYml0IGNvbnN0YW50cyAqLyAgIAorLyogREFDX0NOVEwyIGJpdCBjb25zdGFudHMgKi8KICNkZWZpbmUgREFDMl9FWFBBTkRfTU9ERQkJCSAgICgxIDw8IDE0KQogI2RlZmluZSBEQUMyX0NNUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgREFDMl9QQUxFVFRFX0FDQ0VTU19DTlRMICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaCBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCmluZGV4IGZlNDFiODQuLmMzYjJhMmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCisrKyBiL2luY2x1ZGUvdmlkZW8vczFkMTN4eHhmYi5oCkBAIC0xNCwxMyArMTQsMTYgQEAKICNkZWZpbmUJUzFEMTNYWFhGQl9ICiAKICNkZWZpbmUgUzFEX1BBTEVUVEVfU0laRQkJMjU2Ci0jZGVmaW5lIFMxRDEzNTA2X0NISVBfUkVWCQk0CS8qIGV4cGVjdGVkIGNoaXAgcmV2aXNpb24gbnVtYmVyIGZvciBzMWQxMzUwNiAqLwotI2RlZmluZSBTMUQxMzgwNl9DSElQX1JFVgkJNwkvKiBleHBlY3RlZCBjaGlwIHJldmlzaW9uIG51bWJlciBmb3IgczFkMTM4MDYgKi8KLSNkZWZpbmUgUzFEX0ZCSUQJCQkiUzFEMTM4MDYiCi0jZGVmaW5lIFMxRF9ERVZJQ0VOQU1FCQkJInMxZDEzODA2ZmIiCisjZGVmaW5lIFMxRF9GQklECQkJIlMxRDEzeHh4IgorI2RlZmluZSBTMURfREVWSUNFTkFNRQkJCSJzMWQxM3h4eGZiIgorCisvKiBTMURSRUdfUkVWX0NPREUgcmVnaXN0ZXIgPSBwcm9kX2lkICg2IGJpdHMpICsgcmV2aXNpb24gKDIgYml0cykgKi8KKyNkZWZpbmUgUzFEMTM1MDVfUFJPRF9JRAkJMHgzCS8qIDAwMDAxMSAqLworI2RlZmluZSBTMUQxMzUwNl9QUk9EX0lECQkweDQJLyogMDAwMTAwICovCisjZGVmaW5lIFMxRDEzODA2X1BST0RfSUQJCTB4NwkvKiAwMDAxMTEgKi8KIAogLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKHRlc3RlZCBvbiBzMWQxMzg5NikgKi8KLSNkZWZpbmUgUzFEUkVHX1JFVl9DT0RFCQkJMHgwMDAwCS8qIFJldmlzaW9uIENvZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUzFEUkVHX1JFVl9DT0RFCQkJMHgwMDAwCS8qIFByb2QgKyBSZXYgQ29kZSBSZWdpc3RlciAqLwogI2RlZmluZSBTMURSRUdfTUlTQwkJCTB4MDAwMQkvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCiAjZGVmaW5lIFMxRFJFR19HUElPX0NORjAJCTB4MDAwNAkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAjZGVmaW5lIFMxRFJFR19HUElPX0NORjEJCTB4MDAwNQkvKiBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCkBAIC0xNDEsMTAgKzE0NCwxMSBAQAogCXU4CXZhbHVlOwogfTsKIAotCiBzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgewogCXZvaWQgX19pb21lbQkqcmVnczsKIAl1bnNpZ25lZCBjaGFyCWRpc3BsYXk7CisJdW5zaWduZWQgY2hhcglwcm9kX2lkOworCXVuc2lnbmVkIGNoYXIJcmV2aXNpb247CiAKIAl1bnNpZ25lZCBpbnQJcHNldWRvX3BhbGV0dGVbMTZdOwogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDk5ZWI0MTkuLjkwZTg4NGIgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTUzMSw3ICs1MzEsNyBAQAogCiBjb25maWcgQ1BVU0VUUwogCWJvb2wgIkNwdXNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU01QICYmIENHUk9VUFMKKwlkZXBlbmRzIG9uIENHUk9VUFMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiB3aWxsIGxldCB5b3UgY3JlYXRlIGFuZCBtYW5hZ2UgQ1BVU0VUcyB3aGljaAogCSAgYWxsb3cgZHluYW1pY2FsbHkgcGFydGl0aW9uaW5nIGEgc3lzdGVtIGludG8gc2V0cyBvZiBDUFVzIGFuZApAQCAtNTk3LDYgKzU5Nyw4IEBACiAJICBpcyBkaXNhYmxlZCBieSBib290IG9wdGlvbiwgdGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYW5kCiAJICB0aGVyZSB3aWxsIGJlIG5vIG92ZXJoZWFkIGZyb20gdGhpcy4gRXZlbiB3aGVuIHlvdSBzZXQgdGhpcyBjb25maWc9eSwKIAkgIGlmIGJvb3Qgb3B0aW9uICJub3N3YXBhY2NvdW50IiBpcyBzZXQsIHN3YXAgd2lsbCBub3QgYmUgYWNjb3VudGVkLgorCSAgTm93LCBtZW1vcnkgdXNhZ2Ugb2Ygc3dhcF9jZ3JvdXAgaXMgMiBieXRlcyBwZXIgZW50cnkuIElmIHN3YXAgcGFnZQorCSAgc2l6ZSBpcyA0MDk2Ynl0ZXMsIDUxMmsgcGVyIDFHYnl0ZXMgb2Ygc3dhcC4KIAogZW5kaWYgIyBDR1JPVVBTCiAKQEAgLTEwMTIsNiArMTAxNCwxOCBAQAogCiBzb3VyY2UgImFyY2gvS2NvbmZpZyIKIAorY29uZmlnIFNMT1dfV09SSworCWRlZmF1bHQgbgorCWJvb2wgIkVuYWJsZSBzbG93IHdvcmsgdGhyZWFkIHBvb2wiCisJaGVscAorCSAgVGhlIHNsb3cgd29yayB0aHJlYWQgcG9vbCBwcm92aWRlcyBhIG51bWJlciBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKwkgIHRocmVhZHMgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUga2VybmVsIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0CisJICB0YWtlIGEgcmVsYXRpdmVseSBsb25nIHRpbWUuCisKKwkgIEFuIGV4YW1wbGUgb2YgdGhpcyB3b3VsZCBiZSBDYWNoZUZpbGVzIGRvaW5nIGEgcGF0aCBsb29rdXAgZm9sbG93ZWQKKwkgIGJ5IGEgc2VyaWVzIG9mIG1rZGlycyBhbmQgYSBjcmVhdGUgY2FsbCwgYWxsIG9mIHdoaWNoIGhhdmUgdG8gdG91Y2gKKwkgIGRpc2suCisKIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggOGQ0ZmY1YS4uZGQ3ZWU1ZiAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzX3NiLmg+CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5oIGIvaW5pdC9kb19tb3VudHMuaAppbmRleCA5YWE5NjhkLi5mNWI5NzhhIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5oCisrKyBiL2luaXQvZG9fbW91bnRzLmgKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50c19tZC5jIGIvaW5pdC9kb19tb3VudHNfbWQuYwppbmRleCA5YmRkZGJjLi42OWFlYmJmIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50c19tZC5jCisrKyBiL2luaXQvZG9fbW91bnRzX21kLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+CiAKICNpbmNsdWRlICJkb19tb3VudHMuaCIKIApAQCAtMTEyLDggKzExMyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgTWRwTWlub3JTaGlmdCA2Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBtZF9zZXR1cF9kcml2ZSh2b2lkKQogewogCWludCBtaW5vciwgaSwgZW50LCBwYXJ0aXRpb25lZDsKZGlmZiAtLWdpdCBhL2luaXQvaW5pdHJhbWZzLmMgYi9pbml0L2luaXRyYW1mcy5jCmluZGV4IDYxOWMxYmEuLjgwY2Q3MTMgMTAwNjQ0Ci0tLSBhL2luaXQvaW5pdHJhbWZzLmMKKysrIGIvaW5pdC9pbml0cmFtZnMuYwpAQCAtNTcxLDExICs1NzEsMTEgQEAKIAlpZiAoaW5pdHJkX3N0YXJ0KSB7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfUkFNCiAJCWludCBmZDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgaWYgaW1hZ2UgaXMgaW5pdHJhbWZzLi4uIik7CisJCXByaW50ayhLRVJOX0lORk8gImNoZWNraW5nIGlmIGltYWdlIGlzIGluaXRyYW1mcy4uLlxuIik7CiAJCWVyciA9IHVucGFja190b19yb290ZnMoKGNoYXIgKilpbml0cmRfc3RhcnQsCiAJCQlpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0KTsKIAkJaWYgKCFlcnIpIHsKLQkJCXByaW50aygiIGl0IGlzXG4iKTsKKwkJCXByaW50ayhLRVJOX0lORk8gInJvb3RmcyBpbWFnZSBpcyBpbml0cmFtZnM7IHVucGFja2luZy4uLlxuIik7CiAJCQlmcmVlX2luaXRyZCgpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CkBAIC01ODMsNyArNTgzLDggQEAKIAkJCXVucGFja190b19yb290ZnMoX19pbml0cmFtZnNfc3RhcnQsCiAJCQkJIF9faW5pdHJhbWZzX2VuZCAtIF9faW5pdHJhbWZzX3N0YXJ0KTsKIAkJfQotCQlwcmludGsoIml0IGlzbid0ICglcyk7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOworCQlwcmludGsoS0VSTl9JTkZPICJyb290ZnMgaW1hZ2UgaXMgbm90IGluaXRyYW1mcyAoJXMpIgorCQkJCSI7IGxvb2tzIGxpa2UgYW4gaW5pdHJkXG4iLCBlcnIpOwogCQlmZCA9IHN5c19vcGVuKCIvaW5pdHJkLmltYWdlIiwgT19XUk9OTFl8T19DUkVBVCwgMDcwMCk7CiAJCWlmIChmZCA+PSAwKSB7CiAJCQlzeXNfd3JpdGUoZmQsIChjaGFyICopaW5pdHJkX3N0YXJ0LApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA2YmY4M2FmLi4wN2M4NjU4IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtNDA3LDggKzQwNyw3IEBACiAJICogU2V0IHVwIHRoZSBjdXJyZW50IENQVSBhcyBwb3NzaWJsZSB0byBtaWdyYXRlIHRvLgogCSAqIFRoZSBvdGhlciBvbmVzIHdpbGwgYmUgZG9uZSBieSBjcHVfdXAvY3B1X2Rvd24oKQogCSAqLwotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQljcHVfc2V0KGNwdSwgY3B1X2FjdGl2ZV9tYXApOworCXNldF9jcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSwgdHJ1ZSk7CiAKIAkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB1c2Vyc3BhY2UgLS1SUiAqLwogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewpAQCAtNzk0LDYgKzc5Myw3IEBACiAgKiBtYWtlcyBpdCBpbmxpbmUgdG8gaW5pdCgpIGFuZCBpdCBiZWNvbWVzIHBhcnQgb2YgaW5pdC50ZXh0IHNlY3Rpb24KICAqLwogc3RhdGljIG5vaW5saW5lIGludCBpbml0X3Bvc3Qodm9pZCkKKwlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQogewogCS8qIG5lZWQgdG8gZmluaXNoIGFsbCBhc3luYyBfX2luaXQgY29kZSBiZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5ICovCiAJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwpAQCAtODQyLDcgKzg0Miw3IEBACiAJLyoKIAkgKiBpbml0IGNhbiBydW4gb24gYW55IGNwdS4KIAkgKi8KLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBDUFVfTUFTS19BTExfUFRSKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVfYWxsX21hc2spOwogCS8qCiAJICogVGVsbCB0aGUgd29ybGQgdGhhdCB3ZSdyZSBnb2luZyB0byBiZSB0aGUgZ3JpbQogCSAqIHJlYXBlciBvZiBpbm5vY2VudCBvcnBoYW5lZCBjaGlsZHJlbi4KZGlmZiAtLWdpdCBhL2lwYy9pcGNfc3lzY3RsLmMgYi9pcGMvaXBjX3N5c2N0bC5jCmluZGV4IDRhN2ExMmMuLjQwZWFiNzMgMTAwNjQ0Ci0tLSBhL2lwYy9pcGNfc3lzY3RsLmMKKysrIGIvaXBjL2lwY19zeXNjdGwuYwpAQCAtMjYsNyArMjYsNyBAQAogCXJldHVybiB3aGljaDsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiBzdGF0aWMgaW50IHByb2NfaXBjX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggYThkZGFkYi4uOTE2Nzg1MyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJCWRlbnRyeS0+ZF9mc2RhdGEgPSBhdHRyOwogCX0KIAotCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJcmV0ID0gbW50X3dhbnRfd3JpdGUobXF1ZXVlX21udCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggZjIzOWQ4Ny4uZmFhNDZkYSAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtNTU1LDEyICs1NTUsMTQgQEAKIAlpbl91c2UgPSBzaG1faWRzKG5zKS5pbl91c2U7CiAKIAlmb3IgKHRvdGFsID0gMCwgbmV4dF9pZCA9IDA7IHRvdGFsIDwgaW5fdXNlOyBuZXh0X2lkKyspIHsKKwkJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwYzsKIAkJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOwogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JCXNocCA9IGlkcl9maW5kKCZzaG1faWRzKG5zKS5pcGNzX2lkciwgbmV4dF9pZCk7Ci0JCWlmIChzaHAgPT0gTlVMTCkKKwkJaXBjID0gaWRyX2ZpbmQoJnNobV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKKwkJaWYgKGlwYyA9PSBOVUxMKQogCQkJY29udGludWU7CisJCXNocCA9IGNvbnRhaW5lcl9vZihpcGMsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKIAogCQlpbm9kZSA9IHNocC0+c2htX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCBlNDc5MWIzLi5iYWIxZGZmIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiBvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19TTVApICs9IHNjaGVkX2NwdXByaS5vCitvYmotJChDT05GSUdfU0xPV19XT1JLKSArPSBzbG93LXdvcmsubwogCiBpZm5lcSAoJChDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSKSx5KQogIyBBY2NvcmRpbmcgdG8gQWxhbiBNb2RyYSA8YWxhbkBsaW51eGNhcmUuY29tLmF1PiwgdGhlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIGlzCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA4Y2JkZGZmLi4yYmZjNjQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTY2LDYgKzY2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgogCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKaW5kZXggYzUwMGNhNy4uMzgyMTA5YiAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cC5jCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtOTQsNyArOTQsNiBAQAogCWNoYXIgcmVsZWFzZV9hZ2VudF9wYXRoW1BBVEhfTUFYXTsKIH07CiAKLQogLyoKICAqIFRoZSAicm9vdG5vZGUiIGhpZXJhcmNoeSBpcyB0aGUgImR1bW15IGhpZXJhcmNoeSIsIHJlc2VydmVkIGZvciB0aGUKICAqIHN1YnN5c3RlbXMgdGhhdCBhcmUgb3RoZXJ3aXNlIHVuYXR0YWNoZWQgLSBpdCBuZXZlciBoYXMgbW9yZSB0aGFuIGEKQEAgLTEwMiw2ICsxMDEsMzkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZ3JvdXBmc19yb290IHJvb3Rub2RlOwogCisvKgorICogQ1NTIElEIC0tIElEIHBlciBzdWJzeXMncyBDZ3JvdXAgU3Vic3lzIFN0YXRlKENTUykuIHVzZWQgb25seSB3aGVuCisgKiBjZ3JvdXBfc3Vic3lzLT51c2VfaWQgIT0gMC4KKyAqLworI2RlZmluZSBDU1NfSURfTUFYCSg2NTUzNSkKK3N0cnVjdCBjc3NfaWQgeworCS8qCisJICogVGhlIGNzcyB0byB3aGljaCB0aGlzIElEIHBvaW50cy4gVGhpcyBwb2ludGVyIGlzIHNldCB0byB2YWxpZCB2YWx1ZQorCSAqIGFmdGVyIGNncm91cCBpcyBwb3B1bGF0ZWQuIElmIGNncm91cCBpcyByZW1vdmVkLCB0aGlzIHdpbGwgYmUgTlVMTC4KKwkgKiBUaGlzIHBvaW50ZXIgaXMgZXhwZWN0ZWQgdG8gYmUgUkNVLXNhZmUgYmVjYXVzZSBkZXN0cm95KCkKKwkgKiBpcyBjYWxsZWQgYWZ0ZXIgc3luY2hyb25pemVfcmN1KCkuIEJ1dCBmb3Igc2FmZSB1c2UsIGNzc19pc19yZW1vdmVkKCkKKwkgKiBjc3NfdHJ5Z2V0KCkgc2hvdWxkIGJlIHVzZWQgZm9yIGF2b2lkaW5nIHJhY2UuCisJICovCisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKKwkvKgorCSAqIElEIG9mIHRoaXMgY3NzLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGlkOworCS8qCisJICogRGVwdGggaW4gaGllcmFyY2h5IHdoaWNoIHRoaXMgSUQgYmVsb25ncyB0by4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZXB0aDsKKwkvKgorCSAqIElEIGlzIGZyZWVkIGJ5IFJDVS4gKGFuZCBsb29rdXAgcm91dGluZSBpcyBSQ1Ugc2FmZS4pCisJICovCisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOworCS8qCisJICogSGllcmFyY2h5IG9mIENTUyBJRCBiZWxvbmdzIHRvLgorCSAqLworCXVuc2lnbmVkIHNob3J0IHN0YWNrWzBdOyAvKiBBcnJheSBvZiBMZW5ndGggKGRlcHRoKzEpICovCit9OworCisKIC8qIFRoZSBsaXN0IG9mIGhpZXJhcmNoeSByb290cyAqLwogCiBzdGF0aWMgTElTVF9IRUFEKHJvb3RzKTsKQEAgLTE4NSw2ICsyMTcsOCBAQAogc3RhdGljIHN0cnVjdCBjc3Nfc2V0IGluaXRfY3NzX3NldDsKIHN0YXRpYyBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgaW5pdF9jc3Nfc2V0X2xpbms7CiAKK3N0YXRpYyBpbnQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpOworCiAvKiBjc3Nfc2V0X2xvY2sgcHJvdGVjdHMgdGhlIGxpc3Qgb2YgY3NzX3NldCBvYmplY3RzLCBhbmQgdGhlCiAgKiBjaGFpbiBvZiB0YXNrcyBvZmYgZWFjaCBjc3Nfc2V0LiAgTmVzdHMgb3V0c2lkZSB0YXNrLT5hbGxvY19sb2NrCiAgKiBkdWUgdG8gY2dyb3VwX2l0ZXJfc3RhcnQoKSAqLwpAQCAtNTY3LDYgKzYwMSw5IEBACiAJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAogfTsKIAorc3RhdGljIGludCBhbGxvY19jc3NfaWQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJc3RydWN0IGNncm91cCAqcGFyZW50LCBzdHJ1Y3QgY2dyb3VwICpjaGlsZCk7CisKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmNncm91cF9uZXdfaW5vZGUobW9kZV90IG1vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CkBAIC01ODUsMTMgKzYyMiwxOCBAQAogICogQ2FsbCBzdWJzeXMncyBwcmVfZGVzdHJveSBoYW5kbGVyLgogICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNzcyByZWZjbnQgY2hlY2suCiAgKi8KLXN0YXRpYyB2b2lkIGNncm91cF9jYWxsX3ByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNncnApCitzdGF0aWMgaW50IGNncm91cF9jYWxsX3ByZV9kZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNncnApCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCWludCByZXQgPSAwOworCiAJZm9yX2VhY2hfc3Vic3lzKGNncnAtPnJvb3QsIHNzKQotCQlpZiAoc3MtPnByZV9kZXN0cm95KQotCQkJc3MtPnByZV9kZXN0cm95KHNzLCBjZ3JwKTsKLQlyZXR1cm47CisJCWlmIChzcy0+cHJlX2Rlc3Ryb3kpIHsKKwkJCXJldCA9IHNzLT5wcmVfZGVzdHJveShzcywgY2dycCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9jZ3JvdXBfcmN1KHN0cnVjdCByY3VfaGVhZCAqb2JqKQpAQCAtNjg1LDYgKzcyNywyMiBAQAogCXJlbW92ZV9kaXIoZGVudHJ5KTsKIH0KIAorLyoKKyAqIEEgcXVldWUgZm9yIHdhaXRlcnMgdG8gZG8gcm1kaXIoKSBjZ3JvdXAuIEEgdGFza3Mgd2lsbCBzbGVlcCB3aGVuCisgKiBjZ3JvdXAtPmNvdW50ID09IDAgJiYgbGlzdF9lbXB0eSgmY2dyb3VwLT5jaGlsZHJlbikgJiYgc3Vic3lzIGhhcyBzb21lCisgKiByZWZlcmVuY2UgdG8gY3NzLT5yZWZjbnQuIEluIGdlbmVyYWwsIHRoaXMgcmVmY250IGlzIGV4cGVjdGVkIHRvIGdvZXMgZG93bgorICogdG8gemVybywgc29vbi4KKyAqCisgKiBDR1JQX1dBSVRfT05fUk1ESVIgZmxhZyBpcyBtb2RpZmllZCB1bmRlciBjZ3JvdXAncyBpbm9kZS0+aV9tdXRleDsKKyAqLworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY2dyb3VwX3JtZGlyX3dhaXRxKTsKKworc3RhdGljIHZvaWQgY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXJzKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KENHUlBfV0FJVF9PTl9STURJUiwgJmNncnAtPmZsYWdzKSkpCisJCXdha2VfdXBfYWxsKCZjZ3JvdXBfcm1kaXJfd2FpdHEpOworfQorCiBzdGF0aWMgaW50IHJlYmluZF9zdWJzeXN0ZW1zKHN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBmaW5hbF9iaXRzKQogewpAQCAtODU3LDE2ICs5MTUsMTYgQEAKIAl9CiAKIAlyZXQgPSByZWJpbmRfc3Vic3lzdGVtcyhyb290LCBvcHRzLnN1YnN5c19iaXRzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiAocmUpcG9wdWxhdGUgc3Vic3lzdGVtIGZpbGVzICovCi0JaWYgKCFyZXQpCi0JCWNncm91cF9wb3B1bGF0ZV9kaXIoY2dycCk7CisJY2dyb3VwX3BvcHVsYXRlX2RpcihjZ3JwKTsKIAogCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCiAJCXN0cmNweShyb290LT5yZWxlYXNlX2FnZW50X3BhdGgsIG9wdHMucmVsZWFzZV9hZ2VudCk7CiAgb3V0X3VubG9jazoKLQlpZiAob3B0cy5yZWxlYXNlX2FnZW50KQotCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCW11dGV4X3VubG9jaygmY2dycC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlyZXR1cm4gcmV0OwpAQCAtOTY5LDE1ICsxMDI3LDEzIEBACiAJLyogRmlyc3QgZmluZCB0aGUgZGVzaXJlZCBzZXQgb2Ygc3Vic3lzdGVtcyAqLwogCXJldCA9IHBhcnNlX2Nncm91cGZzX29wdGlvbnMoZGF0YSwgJm9wdHMpOwogCWlmIChyZXQpIHsKLQkJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkKLQkJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CisJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcm9vdCA9IGt6YWxsb2Moc2l6ZW9mKCpyb290KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyb290KSB7Ci0JCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCi0JCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTEyODAsNiArMTMzNiwxMiBAQAogCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmb2xkY2dycC0+ZmxhZ3MpOwogCXN5bmNocm9uaXplX3JjdSgpOwogCXB1dF9jc3Nfc2V0KGNnKTsKKworCS8qCisJICogd2FrZSB1cCBybWRpcigpIHdhaXRlci4gdGhlIHJtZGlyIHNob3VsZCBmYWlsIHNpbmNlIHRoZSBjZ3JvdXAKKwkgKiBpcyBubyBsb25nZXIgZW1wdHkuCisJICovCisJY2dyb3VwX3dha2V1cF9ybWRpcl93YWl0ZXJzKGNncnApOwogCXJldHVybiAwOwogfQogCkBAIC0xNjI1LDcgKzE2ODcsNyBAQAogCS5yZW5hbWUgPSBjZ3JvdXBfcmVuYW1lLAogfTsKIAotc3RhdGljIGludCBjZ3JvdXBfY3JlYXRlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKK3N0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgbW9kZV90IG1vZGUsCiAJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kb3BzID0gewpAQCAtMTY3MSw3ICsxNzMzLDcgQEAKICAqIEBtb2RlOiBtb2RlIHRvIHNldCBvbiBuZXcgZGlyZWN0b3J5LgogICovCiBzdGF0aWMgaW50IGNncm91cF9jcmVhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQlpbnQgbW9kZSkKKwkJCQltb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiAJaW50IGVycm9yID0gMDsKQEAgLTE2ODksNiArMTc1MSwzMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoqCisgKiBjZ3JvdXBfZmlsZV9tb2RlIC0gZGVkdWNlIGZpbGUgbW9kZSBvZiBhIGNvbnRyb2wgZmlsZQorICogQGNmdDogdGhlIGNvbnRyb2wgZmlsZSBpbiBxdWVzdGlvbgorICoKKyAqIHJldHVybnMgY2Z0LT5tb2RlIGlmIC0+bW9kZSBpcyBub3QgMAorICogcmV0dXJucyBTX0lSVUdPfFNfSVdVU1IgaWYgaXQgaGFzIGJvdGggYSByZWFkIGFuZCBhIHdyaXRlIGhhbmRsZXIKKyAqIHJldHVybnMgU19JUlVHTyBpZiBpdCBoYXMgb25seSBhIHJlYWQgaGFuZGxlcgorICogcmV0dXJucyBTX0lXVVNSIGlmIGl0IGhhcyBvbmx5IGEgd3JpdGUgaGFuZGVyCisgKi8KK3N0YXRpYyBtb2RlX3QgY2dyb3VwX2ZpbGVfbW9kZShjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJbW9kZV90IG1vZGUgPSAwOworCisJaWYgKGNmdC0+bW9kZSkKKwkJcmV0dXJuIGNmdC0+bW9kZTsKKworCWlmIChjZnQtPnJlYWQgfHwgY2Z0LT5yZWFkX3U2NCB8fCBjZnQtPnJlYWRfczY0IHx8CisJICAgIGNmdC0+cmVhZF9tYXAgfHwgY2Z0LT5yZWFkX3NlcV9zdHJpbmcpCisJCW1vZGUgfD0gU19JUlVHTzsKKworCWlmIChjZnQtPndyaXRlIHx8IGNmdC0+d3JpdGVfdTY0IHx8IGNmdC0+d3JpdGVfczY0IHx8CisJICAgIGNmdC0+d3JpdGVfc3RyaW5nIHx8IGNmdC0+dHJpZ2dlcikKKwkJbW9kZSB8PSBTX0lXVVNSOworCisJcmV0dXJuIG1vZGU7Cit9CisKIGludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cCAqY2dycCwKIAkJICAgICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCkBAIC0xNjk2LDYgKzE3ODUsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRpciA9IGNncnAtPmRlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yOworCW1vZGVfdCBtb2RlOwogCiAJY2hhciBuYW1lW01BWF9DR1JPVVBfVFlQRV9OQU1FTEVOICsgTUFYX0NGVFlQRV9OQU1FICsgMl0gPSB7IDAgfTsKIAlpZiAoc3Vic3lzICYmICF0ZXN0X2JpdChST09UX05PUFJFRklYLCAmY2dycC0+cm9vdC0+ZmxhZ3MpKSB7CkBAIC0xNzA2LDcgKzE3OTYsOCBAQAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpKTsKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBkaXIsIHN0cmxlbihuYW1lKSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQllcnJvciA9IGNncm91cF9jcmVhdGVfZmlsZShkZW50cnksIDA2NDQgfCBTX0lGUkVHLAorCQltb2RlID0gY2dyb3VwX2ZpbGVfbW9kZShjZnQpOworCQllcnJvciA9IGNncm91cF9jcmVhdGVfZmlsZShkZW50cnksIG1vZGUgfCBTX0lGUkVHLAogCQkJCQkJY2dycC0+cm9vdC0+c2IpOwogCQlpZiAoIWVycm9yKQogCQkJZGVudHJ5LT5kX2ZzZGF0YSA9ICh2b2lkICopY2Z0OwpAQCAtMjI4OCw2ICsyMzc5LDcgQEAKIAkJLndyaXRlX3U2NCA9IGNncm91cF90YXNrc193cml0ZSwKIAkJLnJlbGVhc2UgPSBjZ3JvdXBfdGFza3NfcmVsZWFzZSwKIAkJLnByaXZhdGUgPSBGSUxFX1RBU0tMSVNULAorCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAogCX0sCiAKIAl7CkBAIC0yMzI3LDYgKzI0MTksMTcgQEAKIAkJaWYgKHNzLT5wb3B1bGF0ZSAmJiAoZXJyID0gc3MtPnBvcHVsYXRlKHNzLCBjZ3JwKSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAl9CisJLyogVGhpcyBjZ3JvdXAgaXMgcmVhZHkgbm93ICovCisJZm9yX2VhY2hfc3Vic3lzKGNncnAtPnJvb3QsIHNzKSB7CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MgPSBjZ3JwLT5zdWJzeXNbc3MtPnN1YnN5c19pZF07CisJCS8qCisJCSAqIFVwZGF0ZSBpZC0+Y3NzIHBvaW50ZXIgYW5kIG1ha2UgdGhpcyBjc3MgdmlzaWJsZSBmcm9tCisJCSAqIENTUyBJRCBmdW5jdGlvbnMuIFRoaXMgcG9pbnRlciB3aWxsIGJlIGRlcmVmZXJlbmVkCisJCSAqIGZyb20gUkNVLXJlYWQtc2lkZSB3aXRob3V0IGxvY2tzLgorCQkgKi8KKwkJaWYgKGNzcy0+aWQpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIoY3NzLT5pZC0+Y3NzLCBjc3MpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjMzOCw2ICsyNDQxLDcgQEAKIAljc3MtPmNncm91cCA9IGNncnA7CiAJYXRvbWljX3NldCgmY3NzLT5yZWZjbnQsIDEpOwogCWNzcy0+ZmxhZ3MgPSAwOworCWNzcy0+aWQgPSBOVUxMOwogCWlmIChjZ3JwID09IGR1bW15dG9wKQogCQlzZXRfYml0KENTU19ST09ULCAmY3NzLT5mbGFncyk7CiAJQlVHX09OKGNncnAtPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSk7CkBAIC0yMzc2LDcgKzI0ODAsNyBAQAogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXggb24gdGhlIHBhcmVudCBpbm9kZSBoZWxkCiAgKi8KIHN0YXRpYyBsb25nIGNncm91cF9jcmVhdGUoc3RydWN0IGNncm91cCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkgICAgIGludCBtb2RlKQorCQkJICAgICBtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwOwogCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290ID0gcGFyZW50LT5yb290OwpAQCAtMjQxMyw2ICsyNTE3LDEwIEBACiAJCQlnb3RvIGVycl9kZXN0cm95OwogCQl9CiAJCWluaXRfY2dyb3VwX2Nzcyhjc3MsIHNzLCBjZ3JwKTsKKwkJaWYgKHNzLT51c2VfaWQpCisJCQlpZiAoYWxsb2NfY3NzX2lkKHNzLCBwYXJlbnQsIGNncnApKQorCQkJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJCS8qIEF0IGVycm9yLCAtPmRlc3Ryb3koKSBjYWxsYmFjayBoYXMgdG8gZnJlZSBhc3NpZ25lZCBJRC4gKi8KIAl9CiAKIAljZ3JvdXBfbG9ja19oaWVyYXJjaHkocm9vdCk7CkBAIC0yNTU1LDkgKzI2NjMsMTEgQEAKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3QgZGVudHJ5ICpkOwogCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgcmV0OwogCiAJLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX211dGV4IGFscmVhZHkgKi8KLQorYWdhaW46CiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KSAhPSAwKSB7CiAJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKQEAgLTI1NzMsMTcgKzI2ODMsMzkgQEAKIAkgKiBDYWxsIHByZV9kZXN0cm95IGhhbmRsZXJzIG9mIHN1YnN5cy4gTm90aWZ5IHN1YnN5c3RlbXMKIAkgKiB0aGF0IHJtZGlyKCkgcmVxdWVzdCBjb21lcy4KIAkgKi8KLQljZ3JvdXBfY2FsbF9wcmVfZGVzdHJveShjZ3JwKTsKKwlyZXQgPSBjZ3JvdXBfY2FsbF9wcmVfZGVzdHJveShjZ3JwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlwYXJlbnQgPSBjZ3JwLT5wYXJlbnQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KQotCSAgICB8fCAhbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pCi0JICAgIHx8ICFjZ3JvdXBfY2xlYXJfY3NzX3JlZnMoY2dycCkpIHsKKwlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KSB8fCAhbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pKSB7CiAJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CisJLyoKKwkgKiBjc3NfcHV0L2dldCBpcyBwcm92aWRlZCBmb3Igc3Vic3lzIHRvIGdyYWIgcmVmY250IHRvIGNzcy4gSW4gdHlwaWNhbAorCSAqIGNhc2UsIHN1YnN5c3RlbSBoYXMgbm8gcmVmZXJlbmNlIGFmdGVyIHByZV9kZXN0cm95KCkuIEJ1dCwgdW5kZXIKKwkgKiBoaWVyYXJjaHkgbWFuYWdlbWVudCwgc29tZSAqdGVtcG9yYWwqIHJlZmNudCBjYW4gYmUgaG9sZC4KKwkgKiBUbyBhdm9pZCByZXR1cm5pbmcgLUVCVVNZIHRvIGEgdXNlciwgd2FpdHF1ZXVlIGlzIHVzZWQuIElmIHN1YnN5cworCSAqIGlzIHJlYWxseSBidXN5LCBpdCBzaG91bGQgcmV0dXJuIC1FQlVTWSBhdCBwcmVfZGVzdHJveSgpLiB3YWtlX3VwCisJICogaXMgY2FsbGVkIHdoZW4gY3NzX3B1dCgpIGlzIGNhbGxlZCBhbmQgcmVmY250IGdvZXMgZG93biB0byAwLgorCSAqLworCXNldF9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpOworCXByZXBhcmVfdG9fd2FpdCgmY2dyb3VwX3JtZGlyX3dhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCWlmICghY2dyb3VwX2NsZWFyX2Nzc19yZWZzKGNncnApKSB7CisJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJc2NoZWR1bGUoKTsKKwkJZmluaXNoX3dhaXQoJmNncm91cF9ybWRpcl93YWl0cSwgJndhaXQpOworCQljbGVhcl9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpOworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQlyZXR1cm4gLUVJTlRSOworCQlnb3RvIGFnYWluOworCX0KKwkvKiBOTyBjc3NfdHJ5Z2V0KCkgY2FuIHN1Y2Nlc3MgYWZ0ZXIgaGVyZS4gKi8KKwlmaW5pc2hfd2FpdCgmY2dyb3VwX3JtZGlyX3dhaXRxLCAmd2FpdCk7CisJY2xlYXJfYml0KENHUlBfV0FJVF9PTl9STURJUiwgJmNncnAtPmZsYWdzKTsKIAogCXNwaW5fbG9jaygmcmVsZWFzZV9saXN0X2xvY2spOwogCXNldF9iaXQoQ0dSUF9SRU1PVkVELCAmY2dycC0+ZmxhZ3MpOwpAQCAtMjcwOCw2ICsyODQwLDggQEAKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwogCQlpZiAoIXNzLT5lYXJseV9pbml0KQogCQkJY2dyb3VwX2luaXRfc3Vic3lzKHNzKTsKKwkJaWYgKHNzLT51c2VfaWQpCisJCQljZ3JvdXBfc3Vic3lzX2luaXRfaWRyKHNzKTsKIAl9CiAKIAkvKiBBZGQgaW5pdF9jc3Nfc2V0IHRvIHRoZSBoYXNoIHRhYmxlICovCkBAIC0zMDg0LDE4ICszMjE4LDE5IEBACiB9CiAKIC8qKgotICogY2dyb3VwX2lzX2Rlc2NlbmRhbnQgLSBzZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIGN1cnJlbnQgdGFzaydzIGNncnAKKyAqIGNncm91cF9pc19kZXNjZW5kYW50IC0gc2VlIGlmIEBjZ3JwIGlzIGEgZGVzY2VuZGFudCBvZiBAdGFzaydzIGNncnAKICAqIEBjZ3JwOiB0aGUgY2dyb3VwIGluIHF1ZXN0aW9uCisgKiBAdGFzazogdGhlIHRhc2sgaW4gcXVlc3Rpb24KICAqCi0gKiBTZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IHRhc2sncyBjZ3JvdXAgaW4KLSAqIHRoZSBhcHByb3ByaWF0ZSBoaWVyYXJjaHkuCisgKiBTZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIEB0YXNrJ3MgY2dyb3VwIGluIHRoZSBhcHByb3ByaWF0ZQorICogaGllcmFyY2h5LgogICoKICAqIElmIHdlIGFyZSBzZW5kaW5nIGluIGR1bW15dG9wLCB0aGVuIHByZXN1bWFibHkgd2UgYXJlIGNyZWF0aW5nCiAgKiB0aGUgdG9wIGNncm91cCBpbiB0aGUgc3Vic3lzdGVtLgogICoKICAqIENhbGxlZCBvbmx5IGJ5IHRoZSBucyAobnNwcm94eSkgY2dyb3VwLgogICovCi1pbnQgY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKK2ludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgY2dyb3VwICp0YXJnZXQ7CkBAIC0zMTA1LDcgKzMyNDAsNyBAQAogCQlyZXR1cm4gMTsKIAogCWdldF9maXJzdF9zdWJzeXMoY2dycCwgTlVMTCwgJnN1YnN5c19pZCk7Ci0JdGFyZ2V0ID0gdGFza19jZ3JvdXAoY3VycmVudCwgc3Vic3lzX2lkKTsKKwl0YXJnZXQgPSB0YXNrX2Nncm91cCh0YXNrLCBzdWJzeXNfaWQpOwogCXdoaWxlIChjZ3JwICE9IHRhcmdldCAmJiBjZ3JwIT0gY2dycC0+dG9wX2Nncm91cCkKIAkJY2dycCA9IGNncnAtPnBhcmVudDsKIAlyZXQgPSAoY2dycCA9PSB0YXJnZXQpOwpAQCAtMzEzOCwxMCArMzI3MywxMiBAQAogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKChhdG9taWNfZGVjX3JldHVybigmY3NzLT5yZWZjbnQpID09IDEpICYmCi0JICAgIG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7Ci0JCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOwotCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNzcy0+cmVmY250KSA9PSAxKSB7CisJCWlmIChub3RpZnlfb25fcmVsZWFzZShjZ3JwKSkgeworCQkJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZjZ3JwLT5mbGFncyk7CisJCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKKwkJfQorCQljZ3JvdXBfd2FrZXVwX3JtZGlyX3dhaXRlcnMoY2dycCk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMzI0MSwzICszMzc4LDIzMiBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiY2dyb3VwX2Rpc2FibGU9IiwgY2dyb3VwX2Rpc2FibGUpOworCisvKgorICogRnVuY3RvbnMgZm9yIENTUyBJRC4KKyAqLworCisvKgorICpUbyBnZXQgSUQgb3RoZXIgdGhhbiAwLCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiAhY2dyb3VwX2lzX3JlbW92ZWQoKS4KKyAqLwordW5zaWduZWQgc2hvcnQgY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNzc19pZCAqY3NzaWQgPSByY3VfZGVyZWZlcmVuY2UoY3NzLT5pZCk7CisKKwlpZiAoY3NzaWQpCisJCXJldHVybiBjc3NpZC0+aWQ7CisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIHNob3J0IGNzc19kZXB0aChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQoreworCXN0cnVjdCBjc3NfaWQgKmNzc2lkID0gcmN1X2RlcmVmZXJlbmNlKGNzcy0+aWQpOworCisJaWYgKGNzc2lkKQorCQlyZXR1cm4gY3NzaWQtPmRlcHRoOworCXJldHVybiAwOworfQorCitib29sIGNzc19pc19hbmNlc3RvcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY2hpbGQsCisJCSAgICBjb25zdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdCkKK3sKKwlzdHJ1Y3QgY3NzX2lkICpjaGlsZF9pZCA9IHJjdV9kZXJlZmVyZW5jZShjaGlsZC0+aWQpOworCXN0cnVjdCBjc3NfaWQgKnJvb3RfaWQgPSByY3VfZGVyZWZlcmVuY2Uocm9vdC0+aWQpOworCisJaWYgKCFjaGlsZF9pZCB8fCAhcm9vdF9pZCB8fCAoY2hpbGRfaWQtPmRlcHRoIDwgcm9vdF9pZC0+ZGVwdGgpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGNoaWxkX2lkLT5zdGFja1tyb290X2lkLT5kZXB0aF0gPT0gcm9vdF9pZC0+aWQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV9jc3NfaWRfY2Ioc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBjc3NfaWQgKmlkOworCisJaWQgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGNzc19pZCwgcmN1X2hlYWQpOworCWtmcmVlKGlkKTsKK30KKwordm9pZCBmcmVlX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNzc19pZCAqaWQgPSBjc3MtPmlkOworCS8qIFdoZW4gdGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNzc19pZCBpbml0aWFsaXphdGlvbiwgaWQgY2FuIGJlIE5VTEwgKi8KKwlpZiAoIWlkKQorCQlyZXR1cm47CisKKwlCVUdfT04oIXNzLT51c2VfaWQpOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKGlkLT5jc3MsIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihjc3MtPmlkLCBOVUxMKTsKKwlzcGluX2xvY2soJnNzLT5pZF9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZzcy0+aWRyLCBpZC0+aWQpOworCXNwaW5fdW5sb2NrKCZzcy0+aWRfbG9jayk7CisJY2FsbF9yY3UoJmlkLT5yY3VfaGVhZCwgX19mcmVlX2Nzc19pZF9jYik7Cit9CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBieSBpbml0IG9yIGNyZWF0ZSgpLiBUaGVuLCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGFyZQorICogYWx3YXlzIHNlcmlhbGl6ZWQgKEJ5IGNncm91cF9tdXRleCgpIGF0IGNyZWF0ZSgpKS4KKyAqLworCitzdGF0aWMgc3RydWN0IGNzc19pZCAqZ2V0X25ld19jc3NpZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBkZXB0aCkKK3sKKwlzdHJ1Y3QgY3NzX2lkICpuZXdpZDsKKwlpbnQgbXlpZCwgZXJyb3IsIHNpemU7CisKKwlCVUdfT04oIXNzLT51c2VfaWQpOworCisJc2l6ZSA9IHNpemVvZigqbmV3aWQpICsgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIChkZXB0aCArIDEpOworCW5ld2lkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld2lkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkvKiBnZXQgaWQgKi8KKwlpZiAodW5saWtlbHkoIWlkcl9wcmVfZ2V0KCZzcy0+aWRyLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXNwaW5fbG9jaygmc3MtPmlkX2xvY2spOworCS8qIERvbid0IHVzZSAwLiBhbGxvY2F0ZXMgYW4gSUQgb2YgMS02NTUzNSAqLworCWVycm9yID0gaWRyX2dldF9uZXdfYWJvdmUoJnNzLT5pZHIsIG5ld2lkLCAxLCAmbXlpZCk7CisJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKKworCS8qIFJldHVybnMgZXJyb3Igd2hlbiB0aGVyZSBhcmUgbm8gZnJlZSBzcGFjZXMgZm9yIG5ldyBJRC4qLworCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9TUEM7CisJCWdvdG8gZXJyX291dDsKKwl9CisJaWYgKG15aWQgPiBDU1NfSURfTUFYKQorCQlnb3RvIHJlbW92ZV9pZHI7CisKKwluZXdpZC0+aWQgPSBteWlkOworCW5ld2lkLT5kZXB0aCA9IGRlcHRoOworCXJldHVybiBuZXdpZDsKK3JlbW92ZV9pZHI6CisJZXJyb3IgPSAtRU5PU1BDOworCXNwaW5fbG9jaygmc3MtPmlkX2xvY2spOworCWlkcl9yZW1vdmUoJnNzLT5pZHIsIG15aWQpOworCXNwaW5fdW5sb2NrKCZzcy0+aWRfbG9jayk7CitlcnJfb3V0OgorCWtmcmVlKG5ld2lkKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisKK30KKworc3RhdGljIGludCBfX2luaXQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpCit7CisJc3RydWN0IGNzc19pZCAqbmV3aWQ7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3Rjc3M7CisKKwlzcGluX2xvY2tfaW5pdCgmc3MtPmlkX2xvY2spOworCWlkcl9pbml0KCZzcy0+aWRyKTsKKworCXJvb3Rjc3MgPSBpbml0X2Nzc19zZXQuc3Vic3lzW3NzLT5zdWJzeXNfaWRdOworCW5ld2lkID0gZ2V0X25ld19jc3NpZChzcywgMCk7CisJaWYgKElTX0VSUihuZXdpZCkpCisJCXJldHVybiBQVFJfRVJSKG5ld2lkKTsKKworCW5ld2lkLT5zdGFja1swXSA9IG5ld2lkLT5pZDsKKwluZXdpZC0+Y3NzID0gcm9vdGNzczsKKwlyb290Y3NzLT5pZCA9IG5ld2lkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKnBhcmVudCwKKwkJCXN0cnVjdCBjZ3JvdXAgKmNoaWxkKQoreworCWludCBzdWJzeXNfaWQsIGksIGRlcHRoID0gMDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcywgKmNoaWxkX2NzczsKKwlzdHJ1Y3QgY3NzX2lkICpjaGlsZF9pZCwgKnBhcmVudF9pZCA9IE5VTEw7CisKKwlzdWJzeXNfaWQgPSBzcy0+c3Vic3lzX2lkOworCXBhcmVudF9jc3MgPSBwYXJlbnQtPnN1YnN5c1tzdWJzeXNfaWRdOworCWNoaWxkX2NzcyA9IGNoaWxkLT5zdWJzeXNbc3Vic3lzX2lkXTsKKwlkZXB0aCA9IGNzc19kZXB0aChwYXJlbnRfY3NzKSArIDE7CisJcGFyZW50X2lkID0gcGFyZW50X2Nzcy0+aWQ7CisKKwljaGlsZF9pZCA9IGdldF9uZXdfY3NzaWQoc3MsIGRlcHRoKTsKKwlpZiAoSVNfRVJSKGNoaWxkX2lkKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hpbGRfaWQpOworCisJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCisJCWNoaWxkX2lkLT5zdGFja1tpXSA9IHBhcmVudF9pZC0+c3RhY2tbaV07CisJY2hpbGRfaWQtPnN0YWNrW2RlcHRoXSA9IGNoaWxkX2lkLT5pZDsKKwkvKgorCSAqIGNoaWxkX2lkLT5jc3MgcG9pbnRlciB3aWxsIGJlIHNldCBhZnRlciB0aGlzIGNncm91cCBpcyBhdmFpbGFibGUKKwkgKiBzZWUgY2dyb3VwX3BvcHVsYXRlX2RpcigpCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKGNoaWxkX2Nzcy0+aWQsIGNoaWxkX2lkKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNzc19sb29rdXAgLSBsb29rdXAgY3NzIGJ5IGlkCisgKiBAc3M6IGNncm91cCBzdWJzeXMgdG8gYmUgbG9va2VkIGludG8uCisgKiBAaWQ6IHRoZSBpZAorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byBjZ3JvdXBfc3Vic3lzX3N0YXRlIGlmIHRoZXJlIGlzIHZhbGlkIG9uZSB3aXRoIGlkLgorICogTlVMTCBpZiBub3QuIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3NfbG9va3VwKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgaW50IGlkKQoreworCXN0cnVjdCBjc3NfaWQgKmNzc2lkID0gTlVMTDsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisJY3NzaWQgPSBpZHJfZmluZCgmc3MtPmlkciwgaWQpOworCisJaWYgKHVubGlrZWx5KCFjc3NpZCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShjc3NpZC0+Y3NzKTsKK30KKworLyoqCisgKiBjc3NfZ2V0X25leHQgLSBsb29rdXAgbmV4dCBjZ3JvdXAgdW5kZXIgc3BlY2lmaWVkIGhpZXJhcmNoeS4KKyAqIEBzczogcG9pbnRlciB0byBzdWJzeXN0ZW0KKyAqIEBpZDogY3VycmVudCBwb3NpdGlvbiBvZiBpdGVyYXRpb24uCisgKiBAcm9vdDogcG9pbnRlciB0byBjc3MuIHNlYXJjaCB0cmVlIHVuZGVyIHRoaXMuCisgKiBAZm91bmRpZDogcG9zaXRpb24gb2YgZm91bmQgb2JqZWN0LgorICoKKyAqIFNlYXJjaCBuZXh0IGNzcyB1bmRlciB0aGUgc3BlY2lmaWVkIGhpZXJhcmNoeSBvZiByb290aWQuIENhbGxpbmcgdW5kZXIKKyAqIHJjdV9yZWFkX2xvY2soKSBpcyBuZWNlc3NhcnkuIFJldHVybnMgTlVMTCBpZiBpdCByZWFjaGVzIHRoZSBlbmQuCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoKK2Nzc19nZXRfbmV4dChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIGludCBpZCwKKwkgICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290LCBpbnQgKmZvdW5kaWQpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJldCA9IE5VTEw7CisJc3RydWN0IGNzc19pZCAqdG1wOworCWludCB0bXBpZDsKKwlpbnQgcm9vdGlkID0gY3NzX2lkKHJvb3QpOworCWludCBkZXB0aCA9IGNzc19kZXB0aChyb290KTsKKworCWlmICghcm9vdGlkKQorCQlyZXR1cm4gTlVMTDsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisJLyogZmlsbCBzdGFydCBwb2ludCBmb3Igc2NhbiAqLworCXRtcGlkID0gaWQ7CisJd2hpbGUgKDEpIHsKKwkJLyoKKwkJICogc2NhbiBuZXh0IGVudHJ5IGZyb20gYml0bWFwKHRyZWUpLCB0bXBpZCBpcyB1cGRhdGVkIGFmdGVyCisJCSAqIGlkcl9nZXRfbmV4dCgpLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZzcy0+aWRfbG9jayk7CisJCXRtcCA9IGlkcl9nZXRfbmV4dCgmc3MtPmlkciwgJnRtcGlkKTsKKwkJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKKworCQlpZiAoIXRtcCkKKwkJCWJyZWFrOworCQlpZiAodG1wLT5kZXB0aCA+PSBkZXB0aCAmJiB0bXAtPnN0YWNrW2RlcHRoXSA9PSByb290aWQpIHsKKwkJCXJldCA9IHJjdV9kZXJlZmVyZW5jZSh0bXAtPmNzcyk7CisJCQlpZiAocmV0KSB7CisJCQkJKmZvdW5kaWQgPSB0bXBpZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBjb250aW51ZSB0byBzY2FuIGZyb20gbmV4dCBpZCAqLworCQl0bXBpZCA9IHRtcGlkICsgMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCmluZGV4IGRhY2E2MjAuLjBjOTJkNzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXBfZGVidWcuYworKysgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKQEAgLTQwLDkgKzQwLDcgQEAKIHsKIAl1NjQgY291bnQ7CiAKLQljZ3JvdXBfbG9jaygpOwogCWNvdW50ID0gY2dyb3VwX3Rhc2tfY291bnQoY29udCk7Ci0JY2dyb3VwX3VubG9jaygpOwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDc5ZTQwZjAuLjM5NWI2OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTI4MSw3ICsyODEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljcHVfY2xlYXIoY3B1LCBjcHVfYWN0aXZlX21hcCk7CisJc2V0X2NwdV9hY3RpdmUoY3B1LCBmYWxzZSk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgYWxsIGNwdXMgZGlkIHRoZSByZXNjaGVkdWxlIGFuZCBhcmUgbm90CkBAIC0yOTYsNyArMjk2LDcgQEAKIAllcnIgPSBfY3B1X2Rvd24oY3B1LCAwKTsKIAogCWlmIChjcHVfb25saW5lKGNwdSkpCi0JCWNwdV9zZXQoY3B1LCBjcHVfYWN0aXZlX21hcCk7CisJCXNldF9jcHVfYWN0aXZlKGNwdSwgdHJ1ZSk7CiAKIG91dDoKIAljcHVfbWFwc191cGRhdGVfZG9uZSgpOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCWdvdG8gb3V0X25vdGlmeTsKIAlCVUdfT04oIWNwdV9vbmxpbmUoY3B1KSk7CiAKLQljcHVfc2V0KGNwdSwgY3B1X2FjdGl2ZV9tYXApOworCXNldF9jcHVfYWN0aXZlKGNwdSwgdHJ1ZSk7CiAKIAkvKiBOb3cgY2FsbCBub3RpZmllciBpbiBwcmVwYXJhdGlvbi4gKi8KIAlyYXdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3B1X2NoYWluLCBDUFVfT05MSU5FIHwgbW9kLCBoY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCBmNzZkYjlkLi4wMjZmYWNjIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC0xMjgsMTAgKzEyOCw2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0YXNrLCBjcHVzZXRfc3Vic3lzX2lkKSwKIAkJCSAgICBzdHJ1Y3QgY3B1c2V0LCBjc3MpOwogfQotc3RydWN0IGNwdXNldF9ob3RwbHVnX3NjYW5uZXIgewotCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciBzY2FuOwotCXN0cnVjdCBjZ3JvdXAgKnRvOwotfTsKIAogLyogYml0cyBpbiBzdHJ1Y3QgY3B1c2V0IGZsYWdzIGZpZWxkICovCiB0eXBlZGVmIGVudW0gewpAQCAtNTIxLDYgKzUxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCiAvKgogICogSGVscGVyIHJvdXRpbmUgZm9yIGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoKS4KICAqIERvIGNwdXNldHMgYSwgYiBoYXZlIG92ZXJsYXBwaW5nIGNwdXNfYWxsb3dlZCBtYXNrcz8KQEAgLTgxNSw2ICs4MTIsMTggQEAKIAogCXB1dF9vbmxpbmVfY3B1cygpOwogfQorI2Vsc2UgLyogIUNPTkZJR19TTVAgKi8KK3N0YXRpYyB2b2lkIGRvX3JlYnVpbGRfc2NoZWRfZG9tYWlucyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKK3sKK30KKworc3RhdGljIGludCBnZW5lcmF0ZV9zY2hlZF9kb21haW5zKHN0cnVjdCBjcHVtYXNrICoqZG9tYWlucywKKwkJCXN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqKmF0dHJpYnV0ZXMpCit7CisJKmRvbWFpbnMgPSBOVUxMOworCXJldHVybiAxOworfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogc3RhdGljIERFQ0xBUkVfV09SSyhyZWJ1aWxkX3NjaGVkX2RvbWFpbnNfd29yaywgZG9fcmVidWlsZF9zY2hlZF9kb21haW5zKTsKIApAQCAtMTAyNiwxMDEgKzEwMzUsNzAgQEAKIAltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIH0KIAorLyoKKyAqIFJlYmluZCB0YXNrJ3Mgdm1hcyB0byBjcHVzZXQncyBuZXcgbWVtc19hbGxvd2VkLCBhbmQgbWlncmF0ZSBwYWdlcyB0byBuZXcKKyAqIG5vZGVzIGlmIG1lbW9yeV9taWdyYXRlIGZsYWcgaXMgc2V0LiBDYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHZvaWQgY3B1c2V0X2NoYW5nZV9ub2RlbWFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJICAgc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBjcHVzZXQgKmNzOworCWludCBtaWdyYXRlOworCWNvbnN0IG5vZGVtYXNrX3QgKm9sZG1lbSA9IHNjYW4tPmRhdGE7CisKKwltbSA9IGdldF90YXNrX21tKHApOworCWlmICghbW0pCisJCXJldHVybjsKKworCWNzID0gY2dyb3VwX2NzKHNjYW4tPmNnKTsKKwltaWdyYXRlID0gaXNfbWVtb3J5X21pZ3JhdGUoY3MpOworCisJbXBvbF9yZWJpbmRfbW0obW0sICZjcy0+bWVtc19hbGxvd2VkKTsKKwlpZiAobWlncmF0ZSkKKwkJY3B1c2V0X21pZ3JhdGVfbW0obW0sIG9sZG1lbSwgJmNzLT5tZW1zX2FsbG93ZWQpOworCW1tcHV0KG1tKTsKK30KKwogc3RhdGljIHZvaWQgKmNwdXNldF9iZWluZ19yZWJvdW5kOwogCiAvKioKICAqIHVwZGF0ZV90YXNrc19ub2RlbWFzayAtIFVwZGF0ZSB0aGUgbm9kZW1hc2tzIG9mIHRhc2tzIGluIHRoZSBjcHVzZXQuCiAgKiBAY3M6IHRoZSBjcHVzZXQgaW4gd2hpY2ggZWFjaCB0YXNrJ3MgbWVtc19hbGxvd2VkIG1hc2sgbmVlZHMgdG8gYmUgY2hhbmdlZAogICogQG9sZG1lbTogb2xkIG1lbXNfYWxsb3dlZCBvZiBjcHVzZXQgY3MKKyAqIEBoZWFwOiBpZiBOVUxMLCBkZWZlciBhbGxvY2F0aW5nIGhlYXAgbWVtb3J5IHRvIGNncm91cF9zY2FuX3Rhc2tzKCkKICAqCiAgKiBDYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZAotICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLWVycm5vIGlmIG5vdC4KKyAqIE5vIHJldHVybiB2YWx1ZS4gSXQncyBndWFyYW50ZWVkIHRoYXQgY2dyb3VwX3NjYW5fdGFza3MoKSBhbHdheXMgcmV0dXJucyAwCisgKiBpZiBAaGVhcCAhPSBOVUxMLgogICovCi1zdGF0aWMgaW50IHVwZGF0ZV90YXNrc19ub2RlbWFzayhzdHJ1Y3QgY3B1c2V0ICpjcywgY29uc3Qgbm9kZW1hc2tfdCAqb2xkbWVtKQorc3RhdGljIHZvaWQgdXBkYXRlX3Rhc2tzX25vZGVtYXNrKHN0cnVjdCBjcHVzZXQgKmNzLCBjb25zdCBub2RlbWFza190ICpvbGRtZW0sCisJCQkJIHN0cnVjdCBwdHJfaGVhcCAqaGVhcCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqKm1tYXJyYXk7Ci0JaW50IGksIG4sIG50YXNrczsKLQlpbnQgbWlncmF0ZTsKLQlpbnQgZnVkZ2U7Ci0Jc3RydWN0IGNncm91cF9pdGVyIGl0OwotCWludCByZXR2YWw7CisJc3RydWN0IGNncm91cF9zY2FubmVyIHNjYW47CiAKIAljcHVzZXRfYmVpbmdfcmVib3VuZCA9IGNzOwkJLyogY2F1c2VzIG1wb2xfZHVwKCkgcmViaW5kICovCiAKLQlmdWRnZSA9IDEwOwkJCQkvKiBzcGFyZSBtbWFycmF5W10gc2xvdHMgKi8KLQlmdWRnZSArPSBjcHVtYXNrX3dlaWdodChjcy0+Y3B1c19hbGxvd2VkKTsvKiBpbWFnaW5lIDEgZm9yay1ib21iL2NwdSAqLwotCXJldHZhbCA9IC1FTk9NRU07CisJc2Nhbi5jZyA9IGNzLT5jc3MuY2dyb3VwOworCXNjYW4udGVzdF90YXNrID0gTlVMTDsKKwlzY2FuLnByb2Nlc3NfdGFzayA9IGNwdXNldF9jaGFuZ2Vfbm9kZW1hc2s7CisJc2Nhbi5oZWFwID0gaGVhcDsKKwlzY2FuLmRhdGEgPSAobm9kZW1hc2tfdCAqKW9sZG1lbTsKIAogCS8qCi0JICogQWxsb2NhdGUgbW1hcnJheVtdIHRvIGhvbGQgbW0gcmVmZXJlbmNlIGZvciBlYWNoIHRhc2sKLQkgKiBpbiBjcHVzZXQgY3MuICBDYW4ndCBrbWFsbG9jIEdGUF9LRVJORUwgd2hpbGUgaG9sZGluZwotCSAqIHRhc2tsaXN0X2xvY2suICBXZSBjb3VsZCB1c2UgR0ZQX0FUT01JQywgYnV0IHdpdGggYQotCSAqIGZldyBtb3JlIGxpbmVzIG9mIGNvZGUsIHdlIGNhbiByZXRyeSB1bnRpbCB3ZSBnZXQgYSBiaWcKLQkgKiBlbm91Z2ggbW1hcnJheVtdIHcvbyB1c2luZyBHRlBfQVRPTUlDLgotCSAqLwotCXdoaWxlICgxKSB7Ci0JCW50YXNrcyA9IGNncm91cF90YXNrX2NvdW50KGNzLT5jc3MuY2dyb3VwKTsgIC8qIGd1ZXNzICovCi0JCW50YXNrcyArPSBmdWRnZTsKLQkJbW1hcnJheSA9IGttYWxsb2MobnRhc2tzICogc2l6ZW9mKCptbWFycmF5KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbW1hcnJheSkKLQkJCWdvdG8gZG9uZTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsJCS8qIGJsb2NrIGZvcmsgKi8KLQkJaWYgKGNncm91cF90YXNrX2NvdW50KGNzLT5jc3MuY2dyb3VwKSA8PSBudGFza3MpCi0JCQlicmVhazsJCQkJLyogZ290IGVub3VnaCAqLwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CQkvKiB0cnkgYWdhaW4gKi8KLQkJa2ZyZWUobW1hcnJheSk7Ci0JfQotCi0JbiA9IDA7Ci0KLQkvKiBMb2FkIHVwIG1tYXJyYXlbXSB3aXRoIG1tIHJlZmVyZW5jZSBmb3IgZWFjaCB0YXNrIGluIGNwdXNldC4gKi8KLQljZ3JvdXBfaXRlcl9zdGFydChjcy0+Y3NzLmNncm91cCwgJml0KTsKLQl3aGlsZSAoKHAgPSBjZ3JvdXBfaXRlcl9uZXh0KGNzLT5jc3MuY2dyb3VwLCAmaXQpKSkgewotCQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQotCQlpZiAobiA+PSBudGFza3MpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkiQ3B1c2V0IG1lbXBvbGljeSByZWJpbmQgaW5jb21wbGV0ZS5cbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbW0gPSBnZXRfdGFza19tbShwKTsKLQkJaWYgKCFtbSkKLQkJCWNvbnRpbnVlOwotCQltbWFycmF5W24rK10gPSBtbTsKLQl9Ci0JY2dyb3VwX2l0ZXJfZW5kKGNzLT5jc3MuY2dyb3VwLCAmaXQpOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQotCS8qCi0JICogTm93IHRoYXQgd2UndmUgZHJvcHBlZCB0aGUgdGFza2xpc3Qgc3BpbmxvY2ssIHdlIGNhbgotCSAqIHJlYmluZCB0aGUgdm1hIG1lbXBvbGljaWVzIG9mIGVhY2ggbW0gaW4gbW1hcnJheVtdIHRvIHRoZWlyCi0JICogbmV3IGNwdXNldCwgYW5kIHJlbGVhc2UgdGhhdCBtbS4gIFRoZSBtcG9sX3JlYmluZF9tbSgpCi0JICogY2FsbCB0YWtlcyBtbWFwX3NlbSwgd2hpY2ggd2UgY291bGRuJ3QgdGFrZSB3aGlsZSBob2xkaW5nCi0JICogdGFza2xpc3RfbG9jay4gIEZvcmtzIGNhbiBoYXBwZW4gYWdhaW4gbm93IC0gdGhlIG1wb2xfZHVwKCkKLQkgKiBjcHVzZXRfYmVpbmdfcmVib3VuZCBjaGVjayB3aWxsIGNhdGNoIHN1Y2ggZm9ya3MsIGFuZCByZWJpbmQKLQkgKiB0aGVpciB2bWEgbWVtcG9saWNpZXMgdG9vLiAgQmVjYXVzZSB3ZSBzdGlsbCBob2xkIHRoZSBnbG9iYWwKLQkgKiBjZ3JvdXBfbXV0ZXgsIHdlIGtub3cgdGhhdCBubyBvdGhlciByZWJpbmQgZWZmb3J0IHdpbGwKLQkgKiBiZSBjb250ZW5kaW5nIGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlIGNwdXNldF9iZWluZ19yZWJvdW5kLgorCSAqIFRoZSBtcG9sX3JlYmluZF9tbSgpIGNhbGwgdGFrZXMgbW1hcF9zZW0sIHdoaWNoIHdlIGNvdWxkbid0CisJICogdGFrZSB3aGlsZSBob2xkaW5nIHRhc2tsaXN0X2xvY2suICBGb3JrcyBjYW4gaGFwcGVuIC0gdGhlCisJICogbXBvbF9kdXAoKSBjcHVzZXRfYmVpbmdfcmVib3VuZCBjaGVjayB3aWxsIGNhdGNoIHN1Y2ggZm9ya3MsCisJICogYW5kIHJlYmluZCB0aGVpciB2bWEgbWVtcG9saWNpZXMgdG9vLiAgQmVjYXVzZSB3ZSBzdGlsbCBob2xkCisJICogdGhlIGdsb2JhbCBjZ3JvdXBfbXV0ZXgsIHdlIGtub3cgdGhhdCBubyBvdGhlciByZWJpbmQgZWZmb3J0CisJICogd2lsbCBiZSBjb250ZW5kaW5nIGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlIGNwdXNldF9iZWluZ19yZWJvdW5kLgogCSAqIEl0J3Mgb2sgaWYgd2UgcmViaW5kIHRoZSBzYW1lIG1tIHR3aWNlOyBtcG9sX3JlYmluZF9tbSgpCiAJICogaXMgaWRlbXBvdGVudC4gIEFsc28gbWlncmF0ZSBwYWdlcyBpbiBlYWNoIG1tIHRvIG5ldyBub2Rlcy4KIAkgKi8KLQltaWdyYXRlID0gaXNfbWVtb3J5X21pZ3JhdGUoY3MpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtbWFycmF5W2ldOwotCi0JCW1wb2xfcmViaW5kX21tKG1tLCAmY3MtPm1lbXNfYWxsb3dlZCk7Ci0JCWlmIChtaWdyYXRlKQotCQkJY3B1c2V0X21pZ3JhdGVfbW0obW0sIG9sZG1lbSwgJmNzLT5tZW1zX2FsbG93ZWQpOwotCQltbXB1dChtbSk7Ci0JfQorCWNncm91cF9zY2FuX3Rhc2tzKCZzY2FuKTsKIAogCS8qIFdlJ3JlIGRvbmUgcmViaW5kaW5nIHZtYXMgdG8gdGhpcyBjcHVzZXQncyBuZXcgbWVtc19hbGxvd2VkLiAqLwotCWtmcmVlKG1tYXJyYXkpOwogCWNwdXNldF9iZWluZ19yZWJvdW5kID0gTlVMTDsKLQlyZXR2YWwgPSAwOwotZG9uZToKLQlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgpAQCAtMTE0MSw2ICsxMTE5LDcgQEAKIHsKIAlub2RlbWFza190IG9sZG1lbTsKIAlpbnQgcmV0dmFsOworCXN0cnVjdCBwdHJfaGVhcCBoZWFwOwogCiAJLyoKIAkgKiB0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCB0cmFja3Mgbm9kZV9zdGF0c1tOX0hJR0hfTUVNT1JZXTsKQEAgLTExNzUsMTIgKzExNTQsMTggQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBkb25lOwogCisJcmV0dmFsID0gaGVhcF9pbml0KCZoZWFwLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwsIE5VTEwpOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGRvbmU7CisKIAltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJY3MtPm1lbXNfYWxsb3dlZCA9IHRyaWFsY3MtPm1lbXNfYWxsb3dlZDsKIAljcy0+bWVtc19nZW5lcmF0aW9uID0gY3B1c2V0X21lbXNfZ2VuZXJhdGlvbisrOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCi0JcmV0dmFsID0gdXBkYXRlX3Rhc2tzX25vZGVtYXNrKGNzLCAmb2xkbWVtKTsKKwl1cGRhdGVfdGFza3Nfbm9kZW1hc2soY3MsICZvbGRtZW0sICZoZWFwKTsKKworCWhlYXBfZnJlZSgmaGVhcCk7CiBkb25lOgogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMTkyLDggKzExNzcsMTAgQEAKIAogc3RhdGljIGludCB1cGRhdGVfcmVsYXhfZG9tYWluX2xldmVsKHN0cnVjdCBjcHVzZXQgKmNzLCBzNjQgdmFsKQogeworI2lmZGVmIENPTkZJR19TTVAKIAlpZiAodmFsIDwgLTEgfHwgdmFsID49IFNEX0xWX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKIAogCWlmICh2YWwgIT0gY3MtPnJlbGF4X2RvbWFpbl9sZXZlbCkgewogCQljcy0+cmVsYXhfZG9tYWluX2xldmVsID0gdmFsOwpAQCAtMTM1NSwxOSArMTM0MiwyMiBAQAogCQkJICAgICBzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3QgY3B1c2V0ICpjcyA9IGNncm91cF9jcyhjb250KTsKLQlpbnQgcmV0ID0gMDsKIAogCWlmIChjcHVtYXNrX2VtcHR5KGNzLT5jcHVzX2FsbG93ZWQpIHx8IG5vZGVzX2VtcHR5KGNzLT5tZW1zX2FsbG93ZWQpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAotCWlmICh0c2stPmZsYWdzICYgUEZfVEhSRUFEX0JPVU5EKSB7Ci0JCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKLQkJaWYgKCFjcHVtYXNrX2VxdWFsKCZ0c2stPmNwdXNfYWxsb3dlZCwgY3MtPmNwdXNfYWxsb3dlZCkpCi0JCQlyZXQgPSAtRUlOVkFMOwotCQltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKLQl9CisJLyoKKwkgKiBLdGhyZWFkcyBib3VuZCB0byBzcGVjaWZpYyBjcHVzIGNhbm5vdCBiZSBtb3ZlZCB0byBhIG5ldyBjcHVzZXQ7IHdlCisJICogY2Fubm90IGNoYW5nZSB0aGVpciBjcHUgYWZmaW5pdHkgYW5kIGlzb2xhdGluZyBzdWNoIHRocmVhZHMgYnkgdGhlaXIKKwkgKiBzZXQgb2YgYWxsb3dlZCBub2RlcyBpcyB1bm5lY2Vzc2FyeS4gIFRodXMsIGNwdXNldHMgYXJlIG5vdAorCSAqIGFwcGxpY2FibGUgZm9yIHN1Y2ggdGhyZWFkcy4gIFRoaXMgcHJldmVudHMgY2hlY2tpbmcgZm9yIHN1Y2Nlc3Mgb2YKKwkgKiBzZXRfY3B1c19hbGxvd2VkX3B0cigpIG9uIGFsbCBhdHRhY2hlZCB0YXNrcyBiZWZvcmUgY3B1c19hbGxvd2VkIG1heQorCSAqIGJlIGNoYW5nZWQuCisJICovCisJaWYgKHRzay0+ZmxhZ3MgJiBQRl9USFJFQURfQk9VTkQpCisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHJldCA8IDAgPyByZXQgOiBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcih0c2ssIDAsIE5VTEwpOworCXJldHVybiBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcih0c2ssIDAsIE5VTEwpOwogfQogCiBzdGF0aWMgdm9pZCBjcHVzZXRfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKQEAgLTE3MDYsNiArMTY5Niw3IEBACiAJCS5yZWFkX3U2NCA9IGNwdXNldF9yZWFkX3U2NCwKIAkJLndyaXRlX3U2NCA9IGNwdXNldF93cml0ZV91NjQsCiAJCS5wcml2YXRlID0gRklMRV9NRU1PUllfUFJFU1NVUkUsCisJCS5tb2RlID0gU19JUlVHTywKIAl9LAogCiAJewpAQCAtMTkxMywxMCArMTkwNCw5IEBACiBzdGF0aWMgdm9pZCBjcHVzZXRfZG9fbW92ZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciAqc2NhbikKIHsKLQlzdHJ1Y3QgY3B1c2V0X2hvdHBsdWdfc2Nhbm5lciAqY2hzcDsKKwlzdHJ1Y3QgY2dyb3VwICpuZXdfY2dyb3VwID0gc2Nhbi0+ZGF0YTsKIAotCWNoc3AgPSBjb250YWluZXJfb2Yoc2Nhbiwgc3RydWN0IGNwdXNldF9ob3RwbHVnX3NjYW5uZXIsIHNjYW4pOwotCWNncm91cF9hdHRhY2hfdGFzayhjaHNwLT50bywgdHNrKTsKKwljZ3JvdXBfYXR0YWNoX3Rhc2sobmV3X2Nncm91cCwgdHNrKTsKIH0KIAogLyoqCkBAIC0xOTMyLDE1ICsxOTIyLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1vdmVfbWVtYmVyX3Rhc2tzX3RvX2NwdXNldChzdHJ1Y3QgY3B1c2V0ICpmcm9tLCBzdHJ1Y3QgY3B1c2V0ICp0bykKIHsKLQlzdHJ1Y3QgY3B1c2V0X2hvdHBsdWdfc2Nhbm5lciBzY2FuOworCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciBzY2FuOwogCi0Jc2Nhbi5zY2FuLmNnID0gZnJvbS0+Y3NzLmNncm91cDsKLQlzY2FuLnNjYW4udGVzdF90YXNrID0gTlVMTDsgLyogc2VsZWN0IGFsbCB0YXNrcyBpbiBjZ3JvdXAgKi8KLQlzY2FuLnNjYW4ucHJvY2Vzc190YXNrID0gY3B1c2V0X2RvX21vdmVfdGFzazsKLQlzY2FuLnNjYW4uaGVhcCA9IE5VTEw7Ci0Jc2Nhbi50byA9IHRvLT5jc3MuY2dyb3VwOworCXNjYW4uY2cgPSBmcm9tLT5jc3MuY2dyb3VwOworCXNjYW4udGVzdF90YXNrID0gTlVMTDsgLyogc2VsZWN0IGFsbCB0YXNrcyBpbiBjZ3JvdXAgKi8KKwlzY2FuLnByb2Nlc3NfdGFzayA9IGNwdXNldF9kb19tb3ZlX3Rhc2s7CisJc2Nhbi5oZWFwID0gTlVMTDsKKwlzY2FuLmRhdGEgPSB0by0+Y3NzLmNncm91cDsKIAotCWlmIChjZ3JvdXBfc2Nhbl90YXNrcygmc2Nhbi5zY2FuKSkKKwlpZiAoY2dyb3VwX3NjYW5fdGFza3MoJnNjYW4pKQogCQlwcmludGsoS0VSTl9FUlIgIm1vdmVfbWVtYmVyX3Rhc2tzX3RvX2NwdXNldDogIgogCQkJCSJjZ3JvdXBfc2Nhbl90YXNrcyBmYWlsZWRcbiIpOwogfQpAQCAtMjAzMyw3ICsyMDIzLDcgQEAKIAkJCXJlbW92ZV90YXNrc19pbl9lbXB0eV9jcHVzZXQoY3ApOwogCQllbHNlIHsKIAkJCXVwZGF0ZV90YXNrc19jcHVtYXNrKGNwLCBOVUxMKTsKLQkJCXVwZGF0ZV90YXNrc19ub2RlbWFzayhjcCwgJm9sZG1lbXMpOworCQkJdXBkYXRlX3Rhc2tzX25vZGVtYXNrKGNwLCAmb2xkbWVtcywgTlVMTCk7CiAJCX0KIAl9CiB9CkBAIC0yMDY5LDcgKzIwNTksOSBAQAogCX0KIAogCWNncm91cF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNwdW1hc2tfY29weSh0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCwgY3B1X29ubGluZV9tYXNrKTsKKwltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAlzY2FuX2Zvcl9lbXB0eV9jcHVzZXRzKCZ0b3BfY3B1c2V0KTsKIAluZG9tcyA9IGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoJmRvbXMsICZhdHRyKTsKIAljZ3JvdXBfdW5sb2NrKCk7CkBAIC0yMDkyLDExICsyMDg0LDEyIEBACiAJY2dyb3VwX2xvY2soKTsKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgTUVNX09OTElORToKLQkJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXTsKLQkJYnJlYWs7CiAJY2FzZSBNRU1fT0ZGTElORToKKwkJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCQl0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCA9IG5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldOwotCQlzY2FuX2Zvcl9lbXB0eV9jcHVzZXRzKCZ0b3BfY3B1c2V0KTsKKwkJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CisJCWlmIChhY3Rpb24gPT0gTUVNX09GRkxJTkUpCisJCQlzY2FuX2Zvcl9lbXB0eV9jcHVzZXRzKCZ0b3BfY3B1c2V0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMjA2LDI2ICsyMTk5LDI0IEBACiB9CiAKIC8qKgotICogY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCAtIENhbiB3ZSBhbGxvY2F0ZSBvbiB6b25lIHoncyBtZW1vcnkgbm9kZT8KLSAqIEB6OiBpcyB0aGlzIHpvbmUgb24gYW4gYWxsb3dlZCBub2RlPworICogY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbCAtIENhbiB3ZSBhbGxvY2F0ZSBvbiBhIG1lbW9yeSBub2RlPworICogQG5vZGU6IGlzIHRoaXMgYW4gYWxsb3dlZCBub2RlPwogICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICoKLSAqIElmIHdlJ3JlIGluIGludGVycnVwdCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYKLSAqIF9fR0ZQX1RISVNOT0RFIGlzIHNldCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgem9uZQotICogeidzIG5vZGUgaXMgaW4gb3VyIHRhc2tzIG1lbXNfYWxsb3dlZCwgeWVzLiAgSWYgaXQncyBub3QgYQotICogX19HRlBfSEFSRFdBTEwgcmVxdWVzdCBhbmQgdGhpcyB6b25lJ3Mgbm9kZXMgaXMgaW4gdGhlIG5lYXJlc3QKLSAqIGhhcmR3YWxsZWQgY3B1c2V0IGFuY2VzdG9yIHRvIHRoaXMgdGFza3MgY3B1c2V0LCB5ZXMuCi0gKiBJZiB0aGUgdGFzayBoYXMgYmVlbiBPT00ga2lsbGVkIGFuZCBoYXMgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcwotICogYXMgc3BlY2lmaWVkIGJ5IHRoZSBUSUZfTUVNRElFIGZsYWcsIHllcy4KKyAqIElmIHdlJ3JlIGluIGludGVycnVwdCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgX19HRlBfVEhJU05PREUgaXMKKyAqIHNldCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgbm9kZSBpcyBpbiBvdXIgdGFzaydzIG1lbXNfYWxsb3dlZCwKKyAqIHllcy4gIElmIGl0J3Mgbm90IGEgX19HRlBfSEFSRFdBTEwgcmVxdWVzdCBhbmQgdGhpcyBub2RlIGlzIGluIHRoZSBuZWFyZXN0CisgKiBoYXJkd2FsbGVkIGNwdXNldCBhbmNlc3RvciB0byB0aGlzIHRhc2sncyBjcHVzZXQsIHllcy4gIElmIHRoZSB0YXNrIGhhcyBiZWVuCisgKiBPT00ga2lsbGVkIGFuZCBoYXMgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBhcyBzcGVjaWZpZWQgYnkgdGhlIFRJRl9NRU1ESUUKKyAqIGZsYWcsIHllcy4KICAqIE90aGVyd2lzZSwgbm8uCiAgKgotICogSWYgX19HRlBfSEFSRFdBTEwgaXMgc2V0LCBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKCkKLSAqIHJlZHVjZXMgdG8gY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCgpLiAgT3RoZXJ3aXNlLAotICogY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgpIG1pZ2h0IHNsZWVwLCBhbmQgbWlnaHQgYWxsb3cgYSB6b25lCi0gKiBmcm9tIGFuIGVuY2xvc2luZyBjcHVzZXQuCisgKiBJZiBfX0dGUF9IQVJEV0FMTCBpcyBzZXQsIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoKSByZWR1Y2VzIHRvCisgKiBjcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKCkuICBPdGhlcndpc2UsIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoKQorICogbWlnaHQgc2xlZXAsIGFuZCBtaWdodCBhbGxvdyBhIG5vZGUgZnJvbSBhbiBlbmNsb3NpbmcgY3B1c2V0LgogICoKLSAqIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoKSBvbmx5IGhhbmRsZXMgdGhlIHNpbXBsZXIgY2FzZSBvZgotICogaGFyZHdhbGwgY3B1c2V0cywgYW5kIG5ldmVyIHNsZWVwcy4KKyAqIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoKSBvbmx5IGhhbmRsZXMgdGhlIHNpbXBsZXIgY2FzZSBvZiBoYXJkd2FsbAorICogY3B1c2V0cywgYW5kIG5ldmVyIHNsZWVwcy4KICAqCiAgKiBUaGUgX19HRlBfVEhJU05PREUgcGxhY2VtZW50IGxvZ2ljIGlzIHJlYWxseSBoYW5kbGVkIGVsc2V3aGVyZSwKICAqIGJ5IGZvcmNpYmx5IHVzaW5nIGEgem9uZWxpc3Qgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgbm9kZSwgYW5kIGJ5CkBAIC0yMjY0LDIwICsyMjU1LDE3IEBACiAgKglHRlBfVVNFUiAgICAgLSBvbmx5IG5vZGVzIGluIGN1cnJlbnQgdGFza3MgbWVtcyBhbGxvd2VkIG9rLgogICoKICAqIFJ1bGU6Ci0gKiAgICBEb24ndCBjYWxsIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwgaWYgeW91IGNhbid0IHNsZWVwLCB1bmxlc3MgeW91CisgKiAgICBEb24ndCBjYWxsIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwgaWYgeW91IGNhbid0IHNsZWVwLCB1bmxlc3MgeW91CiAgKiAgICBwYXNzIGluIHRoZSBfX0dGUF9IQVJEV0FMTCBmbGFnIHNldCBpbiBnZnBfZmxhZywgd2hpY2ggZGlzYWJsZXMKICAqICAgIHRoZSBjb2RlIHRoYXQgbWlnaHQgc2NhbiB1cCBhbmNlc3RvciBjcHVzZXRzIGFuZCBzbGVlcC4KICAqLwotCi1pbnQgX19jcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKK2ludCBfX2NwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewotCWludCBub2RlOwkJCS8qIG5vZGUgdGhhdCB6b25lIHogaXMgb24gKi8KIAljb25zdCBzdHJ1Y3QgY3B1c2V0ICpjczsJLyogY3VycmVudCBjcHVzZXQgYW5jZXN0b3JzICovCiAJaW50IGFsbG93ZWQ7CQkJLyogaXMgYWxsb2NhdGlvbiBpbiB6b25lIHogYWxsb3dlZD8gKi8KIAogCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAoZ2ZwX21hc2sgJiBfX0dGUF9USElTTk9ERSkpCiAJCXJldHVybiAxOwotCW5vZGUgPSB6b25lX3RvX25pZCh6KTsKIAltaWdodF9zbGVlcF9pZighKGdmcF9tYXNrICYgX19HRlBfSEFSRFdBTEwpKTsKIAlpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpKQogCQlyZXR1cm4gMTsKQEAgLTIzMDYsMTUgKzIyOTQsMTUgQEAKIH0KIAogLyoKLSAqIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwgLSBDYW4gd2UgYWxsb2NhdGUgb24gem9uZSB6J3MgbWVtb3J5IG5vZGU/Ci0gKiBAejogaXMgdGhpcyB6b25lIG9uIGFuIGFsbG93ZWQgbm9kZT8KKyAqIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwgLSBDYW4gd2UgYWxsb2NhdGUgb24gYSBtZW1vcnkgbm9kZT8KKyAqIEBub2RlOiBpcyB0aGlzIGFuIGFsbG93ZWQgbm9kZT8KICAqIEBnZnBfbWFzazogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCi0gKiBJZiB3ZSdyZSBpbiBpbnRlcnJ1cHQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4KLSAqIElmIF9fR0ZQX1RISVNOT0RFIGlzIHNldCwgeWVzLCB3ZSBjYW4gYWx3YXlzIGFsbG9jYXRlLiAgSWYgem9uZQotICogeidzIG5vZGUgaXMgaW4gb3VyIHRhc2tzIG1lbXNfYWxsb3dlZCwgeWVzLiAgIElmIHRoZSB0YXNrIGhhcyBiZWVuCi0gKiBPT00ga2lsbGVkIGFuZCBoYXMgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBhcyBzcGVjaWZpZWQgYnkgdGhlCi0gKiBUSUZfTUVNRElFIGZsYWcsIHllcy4gIE90aGVyd2lzZSwgbm8uCisgKiBJZiB3ZSdyZSBpbiBpbnRlcnJ1cHQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIF9fR0ZQX1RISVNOT0RFIGlzCisgKiBzZXQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIG5vZGUgaXMgaW4gb3VyIHRhc2sncyBtZW1zX2FsbG93ZWQsCisgKiB5ZXMuICBJZiB0aGUgdGFzayBoYXMgYmVlbiBPT00ga2lsbGVkIGFuZCBoYXMgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBhcworICogc3BlY2lmaWVkIGJ5IHRoZSBUSUZfTUVNRElFIGZsYWcsIHllcy4KKyAqIE90aGVyd2lzZSwgbm8uCiAgKgogICogVGhlIF9fR0ZQX1RISVNOT0RFIHBsYWNlbWVudCBsb2dpYyBpcyByZWFsbHkgaGFuZGxlZCBlbHNld2hlcmUsCiAgKiBieSBmb3JjaWJseSB1c2luZyBhIHpvbmVsaXN0IHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWVkIG5vZGUsIGFuZCBieQpAQCAtMjMyMiwyMCArMjMxMCwxNiBAQAogICogYW55IG5vZGUgb24gdGhlIHpvbmVsaXN0IGV4Y2VwdCB0aGUgZmlyc3QuICBCeSB0aGUgdGltZSBhbnkgc3VjaAogICogY2FsbHMgZ2V0IHRvIHRoaXMgcm91dGluZSwgd2Ugc2hvdWxkIGp1c3Qgc2h1dCB1cCBhbmQgc2F5ICd5ZXMnLgogICoKLSAqIFVubGlrZSB0aGUgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgpIHZhcmlhbnQsIGFib3ZlLAotICogdGhpcyB2YXJpYW50IHJlcXVpcmVzIHRoYXQgdGhlIHpvbmUgYmUgaW4gdGhlIGN1cnJlbnQgdGFza3MKKyAqIFVubGlrZSB0aGUgY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbCgpIHZhcmlhbnQsIGFib3ZlLAorICogdGhpcyB2YXJpYW50IHJlcXVpcmVzIHRoYXQgdGhlIG5vZGUgYmUgaW4gdGhlIGN1cnJlbnQgdGFzaydzCiAgKiBtZW1zX2FsbG93ZWQgb3IgdGhhdCB3ZSdyZSBpbiBpbnRlcnJ1cHQuICBJdCBkb2VzIG5vdCBzY2FuIHVwIHRoZQogICogY3B1c2V0IGhpZXJhcmNoeSBmb3IgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG1lbV9leGNsdXNpdmUgY3B1c2V0LgogICogSXQgbmV2ZXIgc2xlZXBzLgogICovCi0KLWludCBfX2NwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQoraW50IF9fY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7Ci0JaW50IG5vZGU7CQkJLyogbm9kZSB0aGF0IHpvbmUgeiBpcyBvbiAqLwotCiAJaWYgKGluX2ludGVycnVwdCgpIHx8IChnZnBfbWFzayAmIF9fR0ZQX1RISVNOT0RFKSkKIAkJcmV0dXJuIDE7Ci0Jbm9kZSA9IHpvbmVfdG9fbmlkKHopOwogCWlmIChub2RlX2lzc2V0KG5vZGUsIGN1cnJlbnQtPm1lbXNfYWxsb3dlZCkpCiAJCXJldHVybiAxOwogCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhlY19kb21haW4uYyBiL2tlcm5lbC9leGVjX2RvbWFpbi5jCmluZGV4IDY2N2M4NDEuLmMzNTQ1MmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGVjX2RvbWFpbi5jCisrKyBiL2tlcm5lbC9leGVjX2RvbWFpbi5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCiAKIHN0YXRpYyB2b2lkIGRlZmF1bHRfaGFuZGxlcihpbnQsIHN0cnVjdCBwdF9yZWdzICopOwpAQCAtMTQ1LDI4ICsxNDYsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmN1cnJlbnQtPmZzLT5jb3VudCkgIT0gMSkgewotCQlzdHJ1Y3QgZnNfc3RydWN0ICpmc3AsICpvZnNwOwotCi0JCWZzcCA9IGNvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKLQkJaWYgKGZzcCA9PSBOVUxMKSB7Ci0JCQltb2R1bGVfcHV0KGVwLT5tb2R1bGUpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQotCQl0YXNrX2xvY2soY3VycmVudCk7Ci0JCW9mc3AgPSBjdXJyZW50LT5mczsKLQkJY3VycmVudC0+ZnMgPSBmc3A7Ci0JCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCi0JCXB1dF9mc19zdHJ1Y3Qob2ZzcCk7Ci0JfQotCi0JLyoKLQkgKiBBdCB0aGF0IHBvaW50IHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHRoZSBzb2xlIG93bmVyIG9mCi0JICogY3VycmVudC0+ZnMuCi0JICovCi0KIAljdXJyZW50LT5wZXJzb25hbGl0eSA9IHBlcnNvbmFsaXR5OwogCW9lcCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW47CiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbiA9IGVwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggMTY3ZTFlMy4uNjY4NmVkMSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRfdGFzay5oPgogI2luY2x1ZGUgPHRyYWNlL3NjaGVkLmg+CiAKQEAgLTYxLDExICs2Miw2IEBACiAKIHN0YXRpYyB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKTsKIAotc3RhdGljIGlubGluZSBpbnQgdGFza19kZXRhY2hlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHAtPmV4aXRfc2lnbmFsID09IC0xOwotfQotCiBzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlucl90aHJlYWRzLS07CkBAIC0zNjIsMTYgKzM1OCwxMiBAQAogdm9pZCBfX3NldF9zcGVjaWFsX3BpZHMoc3RydWN0IHBpZCAqcGlkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKLQlwaWRfdCBuciA9IHBpZF9ucihwaWQpOwogCi0JaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpIHsKKwlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1NJRCwgcGlkKTsKLQkJc2V0X3Rhc2tfc2Vzc2lvbihjdXJyLCBucik7Ci0JfQotCWlmICh0YXNrX3BncnAoY3VycikgIT0gcGlkKSB7CisKKwlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkKIAkJY2hhbmdlX3BpZChjdXJyLCBQSURUWVBFX1BHSUQsIHBpZCk7Ci0JCXNldF90YXNrX3BncnAoY3VyciwgbnIpOwotCX0KIH0KIAogc3RhdGljIHZvaWQgc2V0X3NwZWNpYWxfcGlkcyhzdHJ1Y3QgcGlkICpwaWQpCkBAIC00MjksNyArNDIxLDYgQEAKIHZvaWQgZGFlbW9uaXplKGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnM7CiAJc2lnc2V0X3QgYmxvY2tlZDsKIAogCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOwpAQCAtNDYyLDExICs0NTMsNyBAQAogCiAJLyogQmVjb21lIGFzIG9uZSB3aXRoIHRoZSBpbml0IHRhc2sgKi8KIAotCWV4aXRfZnMoY3VycmVudCk7CS8qIGN1cnJlbnQtPmZzLT5jb3VudC0tOyAqLwotCWZzID0gaW5pdF90YXNrLmZzOwotCWN1cnJlbnQtPmZzID0gZnM7Ci0JYXRvbWljX2luYygmZnMtPmNvdW50KTsKLQorCWRhZW1vbml6ZV9mc19zdHJ1Y3QoKTsKIAlleGl0X2ZpbGVzKGN1cnJlbnQpOwogCWN1cnJlbnQtPmZpbGVzID0gaW5pdF90YXNrLmZpbGVzOwogCWF0b21pY19pbmMoJmN1cnJlbnQtPmZpbGVzLT5jb3VudCk7CkBAIC01NjUsMzAgKzU1Miw2IEBACiAJfQogfQogCi12b2lkIHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpCi17Ci0JLyogTm8gbmVlZCB0byBob2xkIGZzLT5sb2NrIGlmIHdlIGFyZSBraWxsaW5nIGl0ICovCi0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZzLT5jb3VudCkpIHsKLQkJcGF0aF9wdXQoJmZzLT5yb290KTsKLQkJcGF0aF9wdXQoJmZzLT5wd2QpOwotCQlrbWVtX2NhY2hlX2ZyZWUoZnNfY2FjaGVwLCBmcyk7Ci0JfQotfQotCi12b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IGZzX3N0cnVjdCAqIGZzID0gdHNrLT5mczsKLQotCWlmIChmcykgewotCQl0YXNrX2xvY2sodHNrKTsKLQkJdHNrLT5mcyA9IE5VTEw7Ci0JCXRhc2tfdW5sb2NrKHRzayk7Ci0JCXB1dF9mc19zdHJ1Y3QoZnMpOwotCX0KLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZXhpdF9mcyk7Ci0KICNpZmRlZiBDT05GSUdfTU1fT1dORVIKIC8qCiAgKiBUYXNrIHAgaXMgZXhpdGluZyBhbmQgaXQgb3duZWQgbW0sIGxldHMgZmluZCBhIG5ldyBvd25lciBmb3IgaXQKQEAgLTczMiwxMTkgKzY5NSw2IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gbm9uemVybyBpZiBAcGFyZW50J3MgY2hpbGRyZW4gc2hvdWxkIHJlYXAgdGhlbXNlbHZlcy4KLSAqCi0gKiBDYWxsZWQgd2l0aCB3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jaykgaGVsZC4KLSAqLwotc3RhdGljIGludCBpZ25vcmluZ19jaGlsZHJlbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqcHNpZyA9IHBhcmVudC0+c2lnaGFuZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwc2lnLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0ID0gKHBzaWctPmFjdGlvbltTSUdDSExELTFdLnNhLnNhX2hhbmRsZXIgPT0gU0lHX0lHTiB8fAotCSAgICAgICAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwc2lnLT5zaWdsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIERldGFjaCBhbGwgdGFza3Mgd2Ugd2VyZSB1c2luZyBwdHJhY2Ugb24uCi0gKiBBbnkgdGhhdCBuZWVkIHRvIGJlIHJlbGVhc2VfdGFzaydkIGFyZSBwdXQgb24gdGhlIEBkZWFkIGxpc3QuCi0gKgotICogQ2FsbGVkIHdpdGggd3JpdGVfbG9jaygmdGFza2xpc3RfbG9jaykgaGVsZC4KLSAqLwotc3RhdGljIHZvaWQgcHRyYWNlX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsIHN0cnVjdCBsaXN0X2hlYWQgKmRlYWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKLQlpbnQgaWduID0gLTE7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnBhcmVudC0+cHRyYWNlZCwgcHRyYWNlX2VudHJ5KSB7Ci0JCV9fcHRyYWNlX3VubGluayhwKTsKLQotCQlpZiAocC0+ZXhpdF9zdGF0ZSAhPSBFWElUX1pPTUJJRSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIElmIGl0J3MgYSB6b21iaWUsIG91ciBhdHRhY2hlZG5lc3MgcHJldmVudGVkIG5vcm1hbAotCQkgKiBwYXJlbnQgbm90aWZpY2F0aW9uIG9yIHNlbGYtcmVhcGluZy4gIERvIG5vdGlmaWNhdGlvbgotCQkgKiBub3cgaWYgaXQgd291bGQgaGF2ZSBoYXBwZW5lZCBlYXJsaWVyLiAgSWYgaXQgc2hvdWxkCi0JCSAqIHJlYXAgaXRzZWxmLCBhZGQgaXQgdG8gdGhlIEBkZWFkIGxpc3QuICBXZSBjYW4ndCBjYWxsCi0JCSAqIHJlbGVhc2VfdGFzaygpIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGhvbGQgdGFza2xpc3RfbG9jay4KLQkJICoKLQkJICogSWYgaXQncyBvdXIgb3duIGNoaWxkLCB0aGVyZSBpcyBubyBub3RpZmljYXRpb24gdG8gZG8uCi0JCSAqIEJ1dCBpZiBvdXIgbm9ybWFsIGNoaWxkcmVuIHNlbGYtcmVhcCwgdGhlbiB0aGlzIGNoaWxkCi0JCSAqIHdhcyBwcmV2ZW50ZWQgYnkgcHRyYWNlIGFuZCB3ZSBtdXN0IHJlYXAgaXQgbm93LgotCQkgKi8KLQkJaWYgKCF0YXNrX2RldGFjaGVkKHApICYmIHRocmVhZF9ncm91cF9lbXB0eShwKSkgewotCQkJaWYgKCFzYW1lX3RocmVhZF9ncm91cChwLT5yZWFsX3BhcmVudCwgcGFyZW50KSkKLQkJCQlkb19ub3RpZnlfcGFyZW50KHAsIHAtPmV4aXRfc2lnbmFsKTsKLQkJCWVsc2UgewotCQkJCWlmIChpZ24gPCAwKQotCQkJCQlpZ24gPSBpZ25vcmluZ19jaGlsZHJlbihwYXJlbnQpOwotCQkJCWlmIChpZ24pCi0JCQkJCXAtPmV4aXRfc2lnbmFsID0gLTE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAodGFza19kZXRhY2hlZChwKSkgewotCQkJLyoKLQkJCSAqIE1hcmsgaXQgYXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVhcGVkLgotCQkJICovCi0JCQlwLT5leGl0X3N0YXRlID0gRVhJVF9ERUFEOwotCQkJbGlzdF9hZGQoJnAtPnB0cmFjZV9lbnRyeSwgZGVhZCk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBGaW5pc2ggdXAgZXhpdC10aW1lIHB0cmFjZSBjbGVhbnVwLgotICoKLSAqIENhbGxlZCB3aXRob3V0IGxvY2tzLgotICovCi1zdGF0aWMgdm9pZCBwdHJhY2VfZXhpdF9maW5pc2goc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQsCi0JCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOwotCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZwYXJlbnQtPnB0cmFjZWQpKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBkZWFkLCBwdHJhY2VfZW50cnkpIHsKLQkJbGlzdF9kZWxfaW5pdCgmcC0+cHRyYWNlX2VudHJ5KTsKLQkJcmVsZWFzZV90YXNrKHApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIpCi17Ci0JaWYgKHAtPnBkZWF0aF9zaWduYWwpCi0JCS8qIFdlIGFscmVhZHkgaG9sZCB0aGUgdGFza2xpc3RfbG9jayBoZXJlLiAgKi8KLQkJZ3JvdXBfc2VuZF9zaWdfaW5mbyhwLT5wZGVhdGhfc2lnbmFsLCBTRU5EX1NJR19OT0lORk8sIHApOwotCi0JbGlzdF9tb3ZlX3RhaWwoJnAtPnNpYmxpbmcsICZwLT5yZWFsX3BhcmVudC0+Y2hpbGRyZW4pOwotCi0JLyogSWYgdGhpcyBpcyBhIHRocmVhZGVkIHJlcGFyZW50IHRoZXJlIGlzIG5vIG5lZWQgdG8KLQkgKiBub3RpZnkgYW55b25lIGFueXRoaW5nIGhhcyBoYXBwZW5lZC4KLQkgKi8KLQlpZiAoc2FtZV90aHJlYWRfZ3JvdXAocC0+cmVhbF9wYXJlbnQsIGZhdGhlcikpCi0JCXJldHVybjsKLQotCS8qIFdlIGRvbid0IHdhbnQgcGVvcGxlIHNsYXlpbmcgaW5pdC4gICovCi0JaWYgKCF0YXNrX2RldGFjaGVkKHApKQotCQlwLT5leGl0X3NpZ25hbCA9IFNJR0NITEQ7Ci0KLQkvKiBJZiB3ZSdkIG5vdGlmaWVkIHRoZSBvbGQgcGFyZW50IGFib3V0IHRoaXMgY2hpbGQncyBkZWF0aCwKLQkgKiBhbHNvIG5vdGlmeSB0aGUgbmV3IHBhcmVudC4KLQkgKi8KLQlpZiAoIXB0cmFjZV9yZXBhcmVudGVkKHApICYmCi0JICAgIHAtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUgJiYKLQkgICAgIXRhc2tfZGV0YWNoZWQocCkgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKQotCQlkb19ub3RpZnlfcGFyZW50KHAsIHAtPmV4aXRfc2lnbmFsKTsKLQotCWtpbGxfb3JwaGFuZWRfcGdycChwLCBmYXRoZXIpOwotfQotCi0vKgogICogV2hlbiB3ZSBkaWUsIHdlIHJlLXBhcmVudCBhbGwgb3VyIGNoaWxkcmVuLgogICogVHJ5IHRvIGdpdmUgdGhlbSB0byBhbm90aGVyIHRocmVhZCBpbiBvdXIgdGhyZWFkCiAgKiBncm91cCwgYW5kIGlmIG5vIHN1Y2ggbWVtYmVyIGV4aXN0cywgZ2l2ZSBpdCB0bwpAQCAtODgzLDE3ICs3MzMsNTEgQEAKIAlyZXR1cm4gcGlkX25zLT5jaGlsZF9yZWFwZXI7CiB9CiAKKy8qCisqIEFueSB0aGF0IG5lZWQgdG8gYmUgcmVsZWFzZV90YXNrJ2QgYXJlIHB1dCBvbiB0aGUgQGRlYWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQgcmVwYXJlbnRfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqZGVhZCkKK3sKKwlpZiAocC0+cGRlYXRoX3NpZ25hbCkKKwkJZ3JvdXBfc2VuZF9zaWdfaW5mbyhwLT5wZGVhdGhfc2lnbmFsLCBTRU5EX1NJR19OT0lORk8sIHApOworCisJbGlzdF9tb3ZlX3RhaWwoJnAtPnNpYmxpbmcsICZwLT5yZWFsX3BhcmVudC0+Y2hpbGRyZW4pOworCisJaWYgKHRhc2tfZGV0YWNoZWQocCkpCisJCXJldHVybjsKKwkvKgorCSAqIElmIHRoaXMgaXMgYSB0aHJlYWRlZCByZXBhcmVudCB0aGVyZSBpcyBubyBuZWVkIHRvCisJICogbm90aWZ5IGFueW9uZSBhbnl0aGluZyBoYXMgaGFwcGVuZWQuCisJICovCisJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAtPnJlYWxfcGFyZW50LCBmYXRoZXIpKQorCQlyZXR1cm47CisKKwkvKiBXZSBkb24ndCB3YW50IHBlb3BsZSBzbGF5aW5nIGluaXQuICAqLworCXAtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKKworCS8qIElmIGl0IGhhcyBleGl0ZWQgbm90aWZ5IHRoZSBuZXcgcGFyZW50IGFib3V0IHRoaXMgY2hpbGQncyBkZWF0aC4gKi8KKwlpZiAoIXAtPnB0cmFjZSAmJgorCSAgICBwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFICYmIHRocmVhZF9ncm91cF9lbXB0eShwKSkgeworCQlkb19ub3RpZnlfcGFyZW50KHAsIHAtPmV4aXRfc2lnbmFsKTsKKwkJaWYgKHRhc2tfZGV0YWNoZWQocCkpIHsKKwkJCXAtPmV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7CisJCQlsaXN0X21vdmVfdGFpbCgmcC0+c2libGluZywgZGVhZCk7CisJCX0KKwl9CisKKwlraWxsX29ycGhhbmVkX3BncnAocCwgZmF0aGVyKTsKK30KKwogc3RhdGljIHZvaWQgZm9yZ2V0X29yaWdpbmFsX3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlcikKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuLCAqcmVhcGVyOwotCUxJU1RfSEVBRChwdHJhY2VfZGVhZCk7CisJTElTVF9IRUFEKGRlYWRfY2hpbGRyZW4pOworCisJZXhpdF9wdHJhY2UoZmF0aGVyKTsKIAogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAlyZWFwZXIgPSBmaW5kX25ld19yZWFwZXIoZmF0aGVyKTsKLQkvKgotCSAqIEZpcnN0IGNsZWFuIHVwIHB0cmFjZSBpZiB3ZSB3ZXJlIHVzaW5nIGl0LgotCSAqLwotCXB0cmFjZV9leGl0KGZhdGhlciwgJnB0cmFjZV9kZWFkKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZmF0aGVyLT5jaGlsZHJlbiwgc2libGluZykgewogCQlwLT5yZWFsX3BhcmVudCA9IHJlYXBlcjsKQEAgLTkwMSwxMyArNzg1LDE2IEBACiAJCQlCVUdfT04ocC0+cHRyYWNlKTsKIAkJCXAtPnBhcmVudCA9IHAtPnJlYWxfcGFyZW50OwogCQl9Ci0JCXJlcGFyZW50X3RocmVhZChwLCBmYXRoZXIpOworCQlyZXBhcmVudF90aHJlYWQoZmF0aGVyLCBwLCAmZGVhZF9jaGlsZHJlbik7CiAJfQotCiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmZhdGhlci0+Y2hpbGRyZW4pKTsKIAotCXB0cmFjZV9leGl0X2ZpbmlzaChmYXRoZXIsICZwdHJhY2VfZGVhZCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZkZWFkX2NoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWxpc3RfZGVsX2luaXQoJnAtPnNpYmxpbmcpOworCQlyZWxlYXNlX3Rhc2socCk7CisJfQogfQogCiAvKgpAQCAtMTQxNyw2ICsxMzA0LDE4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCAqdGFza19zdG9wcGVkX2NvZGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIHB0cmFjZSkKK3sKKwlpZiAocHRyYWNlKSB7CisJCWlmICh0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHApKQorCQkJcmV0dXJuICZwLT5leGl0X2NvZGU7CisJfSBlbHNlIHsKKwkJaWYgKHAtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEKQorCQkJcmV0dXJuICZwLT5zaWduYWwtPmdyb3VwX2V4aXRfY29kZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBIYW5kbGUgc3lzX3dhaXQ0IHdvcmsgZm9yIG9uZSB0YXNrIGluIHN0YXRlIFRBU0tfU1RPUFBFRC4gIFdlIGhvbGQKICAqIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jaykgb24gZW50cnkuICBJZiB3ZSByZXR1cm4gemVybywgd2Ugc3RpbGwgaG9sZApAQCAtMTQyNyw3ICsxMzI2LDcgQEAKIAkJCSAgICAgaW50IG9wdGlvbnMsIHN0cnVjdCBzaWdpbmZvIF9fdXNlciAqaW5mb3AsCiAJCQkgICAgIGludCBfX3VzZXIgKnN0YXRfYWRkciwgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KQogewotCWludCByZXR2YWwsIGV4aXRfY29kZSwgd2h5OworCWludCByZXR2YWwsIGV4aXRfY29kZSwgKnBfY29kZSwgd2h5OwogCXVpZF90IHVpZCA9IDA7IC8qIHVubmVlZGVkLCByZXF1aXJlZCBieSBjb21waWxlciAqLwogCXBpZF90IHBpZDsKIApAQCAtMTQzNywyMiArMTMzNiwxNiBAQAogCWV4aXRfY29kZSA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlpZiAodW5saWtlbHkoIXRhc2tfaXNfc3RvcHBlZF9vcl90cmFjZWQocCkpKQorCXBfY29kZSA9IHRhc2tfc3RvcHBlZF9jb2RlKHAsIHB0cmFjZSk7CisJaWYgKHVubGlrZWx5KCFwX2NvZGUpKQogCQlnb3RvIHVubG9ja19zaWc7CiAKLQlpZiAoIXB0cmFjZSAmJiBwLT5zaWduYWwtPmdyb3VwX3N0b3BfY291bnQgPiAwKQotCQkvKgotCQkgKiBBIGdyb3VwIHN0b3AgaXMgaW4gcHJvZ3Jlc3MgYW5kIHRoaXMgaXMgdGhlIGdyb3VwIGxlYWRlci4KLQkJICogV2Ugd29uJ3QgcmVwb3J0IHVudGlsIGFsbCB0aHJlYWRzIGhhdmUgc3RvcHBlZC4KLQkJICovCi0JCWdvdG8gdW5sb2NrX3NpZzsKLQotCWV4aXRfY29kZSA9IHAtPmV4aXRfY29kZTsKKwlleGl0X2NvZGUgPSAqcF9jb2RlOwogCWlmICghZXhpdF9jb2RlKQogCQlnb3RvIHVubG9ja19zaWc7CiAKIAlpZiAoIXVubGlrZWx5KG9wdGlvbnMgJiBXTk9XQUlUKSkKLQkJcC0+ZXhpdF9jb2RlID0gMDsKKwkJKnBfY29kZSA9IDA7CiAKIAkvKiBkb24ndCBuZWVkIHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSBhcyB3ZSdyZSBob2xkaW5nIGEgc3BpbmxvY2sgKi8KIAl1aWQgPSBfX3Rhc2tfY3JlZChwKS0+dWlkOwpAQCAtMTYwOCw3ICsxNTAxLDcgQEAKIAkgKi8KIAkqbm90YXNrX2Vycm9yID0gMDsKIAotCWlmICh0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHApKQorCWlmICh0YXNrX3N0b3BwZWRfY29kZShwLCBwdHJhY2UpKQogCQlyZXR1cm4gd2FpdF90YXNrX3N0b3BwZWQocHRyYWNlLCBwLCBvcHRpb25zLAogCQkJCQkgaW5mb3AsIHN0YXRfYWRkciwgcnUpOwogCkBAIC0xODEyLDcgKzE3MDUsNyBAQAogCQlwaWQgPSBmaW5kX2dldF9waWQoLXVwaWQpOwogCX0gZWxzZSBpZiAodXBpZCA9PSAwKSB7CiAJCXR5cGUgPSBQSURUWVBFX1BHSUQ7Ci0JCXBpZCA9IGdldF9waWQodGFza19wZ3JwKGN1cnJlbnQpKTsKKwkJcGlkID0gZ2V0X3Rhc2tfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUEdJRCk7CiAJfSBlbHNlIC8qIHVwaWQgPiAwICovIHsKIAkJdHlwZSA9IFBJRFRZUEVfUElEOwogCQlwaWQgPSBmaW5kX2dldF9waWQodXBpZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA2NzE1ZWJjLi42NjBjMmI4IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCkBAIC0yODQsNyArMjg1LDcgQEAKIAltbS0+ZnJlZV9hcmVhX2NhY2hlID0gb2xkbW0tPm1tYXBfYmFzZTsKIAltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CiAJbW0tPm1hcF9jb3VudCA9IDA7Ci0JY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOworCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOwogCW1tLT5tbV9yYiA9IFJCX1JPT1Q7CiAJcmJfbGluayA9ICZtbS0+bW1fcmIucmJfbm9kZTsKIAlyYl9wYXJlbnQgPSBOVUxMOwpAQCAtNjgxLDM4ICs2ODIsMjEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGZzX3N0cnVjdCAqX19jb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpCi17Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBrbWVtX2NhY2hlX2FsbG9jKGZzX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JLyogV2UgZG9uJ3QgbmVlZCB0byBsb2NrIGZzIC0gdGhpbmsgd2h5IDstKSAqLwotCWlmIChmcykgewotCQlhdG9taWNfc2V0KCZmcy0+Y291bnQsIDEpOwotCQlyd2xvY2tfaW5pdCgmZnMtPmxvY2spOwotCQlmcy0+dW1hc2sgPSBvbGQtPnVtYXNrOwotCQlyZWFkX2xvY2soJm9sZC0+bG9jayk7Ci0JCWZzLT5yb290ID0gb2xkLT5yb290OwotCQlwYXRoX2dldCgmb2xkLT5yb290KTsKLQkJZnMtPnB3ZCA9IG9sZC0+cHdkOwotCQlwYXRoX2dldCgmb2xkLT5wd2QpOwotCQlyZWFkX3VubG9jaygmb2xkLT5sb2NrKTsKLQl9Ci0JcmV0dXJuIGZzOwotfQotCi1zdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpvbGQpCi17Ci0JcmV0dXJuIF9fY29weV9mc19zdHJ1Y3Qob2xkKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mc19zdHJ1Y3QpOwotCiBzdGF0aWMgaW50IGNvcHlfZnModW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9GUykgewotCQlhdG9taWNfaW5jKCZjdXJyZW50LT5mcy0+Y291bnQpOworCQkvKiB0c2stPmZzIGlzIGFscmVhZHkgd2hhdCB3ZSB3YW50ICovCisJCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwkJaWYgKGZzLT5pbl9leGVjKSB7CisJCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWZzLT51c2VycysrOworCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQotCXRzay0+ZnMgPSBfX2NvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKKwl0c2stPmZzID0gY29weV9mc19zdHJ1Y3QoZnMpOwogCWlmICghdHNrLT5mcykKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CkBAIC04NDEsNiArODI1LDggQEAKIAlhdG9taWNfc2V0KCZzaWctPmxpdmUsIDEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNpZy0+d2FpdF9jaGxkZXhpdCk7CiAJc2lnLT5mbGFncyA9IDA7CisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfTkVXUElEKQorCQlzaWctPmZsYWdzIHw9IFNJR05BTF9VTktJTExBQkxFOwogCXNpZy0+Z3JvdXBfZXhpdF9jb2RlID0gMDsKIAlzaWctPmdyb3VwX2V4aXRfdGFzayA9IE5VTEw7CiAJc2lnLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKQEAgLTExMjUsNyArMTExMSw3IEBACiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9tbTsKIAlpZiAoKHJldHZhbCA9IGNvcHlfaW8oY2xvbmVfZmxhZ3MsIHApKSkKIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX25hbWVzcGFjZXM7Ci0JcmV0dmFsID0gY29weV90aHJlYWQoMCwgY2xvbmVfZmxhZ3MsIHN0YWNrX3N0YXJ0LCBzdGFja19zaXplLCBwLCByZWdzKTsKKwlyZXR2YWwgPSBjb3B5X3RocmVhZChjbG9uZV9mbGFncywgc3RhY2tfc3RhcnQsIHN0YWNrX3NpemUsIHAsIHJlZ3MpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9pbzsKIApAQCAtMTI2Myw4ICsxMjQ5LDYgQEAKIAkJCXAtPnNpZ25hbC0+bGVhZGVyX3BpZCA9IHBpZDsKIAkJCXR0eV9rcmVmX3B1dChwLT5zaWduYWwtPnR0eSk7CiAJCQlwLT5zaWduYWwtPnR0eSA9IHR0eV9rcmVmX2dldChjdXJyZW50LT5zaWduYWwtPnR0eSk7Ci0JCQlzZXRfdGFza19wZ3JwKHAsIHRhc2tfcGdycF9ucihjdXJyZW50KSk7Ci0JCQlzZXRfdGFza19zZXNzaW9uKHAsIHRhc2tfc2Vzc2lvbl9ucihjdXJyZW50KSk7CiAJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgdGFza19wZ3JwKGN1cnJlbnQpKTsKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHRhc2tfc2Vzc2lvbihjdXJyZW50KSk7CiAJCQlsaXN0X2FkZF90YWlsX3JjdSgmcC0+dGFza3MsICZpbml0X3Rhc2sudGFza3MpOwpAQCAtMTQ4OCw2ICsxNDcyLDcgQEAKIAltbV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibW1fc3RydWN0IiwKIAkJCXNpemVvZihzdHJ1Y3QgbW1fc3RydWN0KSwgQVJDSF9NSU5fTU1TVFJVQ1RfQUxJR04sCiAJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCk7CisJdm1fYXJlYV9jYWNoZXAgPSBLTUVNX0NBQ0hFKHZtX2FyZWFfc3RydWN0LCBTTEFCX1BBTklDKTsKIAltbWFwX2luaXQoKTsKIH0KIApAQCAtMTU0MywxMiArMTUyOCwxNiBAQAogewogCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CiAKLQlpZiAoKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9GUykgJiYKLQkgICAgKGZzICYmIGF0b21pY19yZWFkKCZmcy0+Y291bnQpID4gMSkpIHsKLQkJKm5ld19mc3AgPSBfX2NvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKLQkJaWYgKCEqbmV3X2ZzcCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KKwlpZiAoISh1bnNoYXJlX2ZsYWdzICYgQ0xPTkVfRlMpIHx8ICFmcykKKwkJcmV0dXJuIDA7CisKKwkvKiBkb24ndCBuZWVkIGxvY2sgaGVyZTsgaW4gdGhlIHdvcnN0IGNhc2Ugd2UnbGwgZG8gdXNlbGVzcyBjb3B5ICovCisJaWYgKGZzLT51c2VycyA9PSAxKQorCQlyZXR1cm4gMDsKKworCSpuZXdfZnNwID0gY29weV9mc19zdHJ1Y3QoZnMpOworCWlmICghKm5ld19mc3ApCisJCXJldHVybiAtRU5PTUVNOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjY0LDggKzE2NTMsMTMgQEAKIAogCQlpZiAobmV3X2ZzKSB7CiAJCQlmcyA9IGN1cnJlbnQtPmZzOworCQkJd3JpdGVfbG9jaygmZnMtPmxvY2spOwogCQkJY3VycmVudC0+ZnMgPSBuZXdfZnM7Ci0JCQluZXdfZnMgPSBmczsKKwkJCWlmICgtLWZzLT51c2VycykKKwkJCQluZXdfZnMgPSBOVUxMOworCQkJZWxzZQorCQkJCW5ld19mcyA9IGZzOworCQkJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CiAJCX0KIAogCQlpZiAobmV3X21tKSB7CkBAIC0xNzA0LDcgKzE2OTgsNyBAQAogCiBiYWRfdW5zaGFyZV9jbGVhbnVwX2ZzOgogCWlmIChuZXdfZnMpCi0JCXB1dF9mc19zdHJ1Y3QobmV3X2ZzKTsKKwkJZnJlZV9mc19zdHJ1Y3QobmV3X2ZzKTsKIAogYmFkX3Vuc2hhcmVfY2xlYW51cF90aHJlYWQ6CiBiYWRfdW5zaGFyZV9vdXQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCA0ZGQ1YjFlLi4zMzk0ZjhmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KIG9iai0kKENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MpICs9IG51bWFfbWlncmF0ZS5vCitvYmotJChDT05GSUdfUE1fU0xFRVApICs9IHBtLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGVlMWFhOWYuLjAxY2UyMGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTIsNiArMTIsOCBAQAogCiBleHRlcm4gaW50IF9faXJxX3NldF90cmlnZ2VyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgYm9vbCBzdXNwKTsKK2V4dGVybiB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKTsKIAogZXh0ZXJuIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfZGVzY19sb2NrX2NsYXNzOwogZXh0ZXJuIHZvaWQgaW5pdF9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSwgaW50IG5yKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDY0NThlOTkuLjE1MTZhYjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTYyLDYgKzE2MiwyMCBAQAogfQogI2VuZGlmCiAKK3ZvaWQgX19kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgc3VzcGVuZCkKK3sKKwlpZiAoc3VzcGVuZCkgeworCQlpZiAoIWRlc2MtPmFjdGlvbiB8fCAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfVElNRVIpKQorCQkJcmV0dXJuOworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1NVU1BFTkRFRDsKKwl9CisKKwlpZiAoIWRlc2MtPmRlcHRoKyspIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KK30KKwogLyoqCiAgKglkaXNhYmxlX2lycV9ub3N5bmMgLSBkaXNhYmxlIGFuIGlycSB3aXRob3V0IHdhaXRpbmcKICAqCUBpcnE6IEludGVycnVwdCB0byBkaXNhYmxlCkBAIC0xODIsMTAgKzE5Niw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFkZXNjLT5kZXB0aCsrKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKLQl9CisJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CkBAIC0yMTUsMTUgKzIyNiwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiAKLXN0YXRpYyB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpCit2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKQogeworCWlmIChyZXN1bWUpCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NVU1BFTkRFRDsKKwogCXN3aXRjaCAoZGVzYy0+ZGVwdGgpIHsKIAljYXNlIDA6CisgZXJyX291dDoKIAkJV0FSTigxLCBLRVJOX1dBUk5JTkcgIlVuYmFsYW5jZWQgZW5hYmxlIGZvciBJUlEgJWRcbiIsIGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMTogewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfklSUV9ESVNBQkxFRDsKIAorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCWdvdG8gZXJyX291dDsKIAkJLyogUHJldmVudCBwcm9iaW5nIG9uIHRoaXMgaXJxOiAqLwogCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgfCBJUlFfTk9QUk9CRTsKIAkJY2hlY2tfaXJxX3Jlc2VuZChkZXNjLCBpcnEpOwpAQCAtMjUzLDcgKzI3MCw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JX19lbmFibGVfaXJxKGRlc2MsIGlycSk7CisJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CkBAIC01MTEsNyArNTI4LDcgQEAKIAkgKi8KIAlpZiAoc2hhcmVkICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfU1BVUklPVVNfRElTQUJMRUQpKSB7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NQVVJJT1VTX0RJU0FCTEVEOwotCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxKTsKKwkJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcG0uYyBiL2tlcm5lbC9pcnEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhkOGJlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9wbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBsaW51eC9rZXJuZWwvaXJxL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgImludGVybmFscy5oIgorCisvKioKKyAqIHN1c3BlbmRfZGV2aWNlX2lycXMgLSBkaXNhYmxlIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHQgbGluZXMKKyAqCisgKiBEdXJpbmcgc3lzdGVtLXdpZGUgc3VzcGVuZCBvciBoaWJlcm5hdGlvbiBkZXZpY2UgaW50ZXJydXB0cyBuZWVkIHRvIGJlCisgKiBkaXNhYmxlZCBhdCB0aGUgY2hpcCBsZXZlbCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorICogSXQgZGlzYWJsZXMgYWxsIGludGVycnVwdCBsaW5lcyB0aGF0IGFyZSBlbmFibGVkIGF0IHRoZSBtb21lbnQgYW5kIHNldHMgdGhlCisgKiBJUlFfU1VTUEVOREVEIGZsYWcgZm9yIHRoZW0uCisgKi8KK3ZvaWQgc3VzcGVuZF9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIHRydWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJfQorCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCXN5bmNocm9uaXplX2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3VzcGVuZF9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogcmVzdW1lX2RldmljZV9pcnFzIC0gZW5hYmxlIGludGVycnVwdCBsaW5lcyBkaXNhYmxlZCBieSBzdXNwZW5kX2RldmljZV9pcnFzKCkKKyAqCisgKiBFbmFibGUgYWxsIGludGVycnVwdCBsaW5lcyBwcmV2aW91c2x5IGRpc2FibGVkIGJ5IHN1c3BlbmRfZGV2aWNlX2lycXMoKSB0aGF0CisgKiBoYXZlIHRoZSBJUlFfU1VTUEVOREVEIGZsYWcgc2V0LgorICovCit2b2lkIHJlc3VtZV9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxLCB0cnVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlc3VtZV9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogY2hlY2tfd2FrZXVwX2lycXMgLSBjaGVjayBpZiBhbnkgd2FrZS11cCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nCisgKi8KK2ludCBjaGVja193YWtldXBfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9XQUtFVVApICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpCisJCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IGM3ZmQ2NjkuLjVhNzU4YzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC00Miw3ICs0Miw3IEBACiBub3RlX2J1Zl90KiBjcmFzaF9ub3RlczsKIAogLyogdm1jb3JlaW5mbyBzdHVmZiAqLwotdW5zaWduZWQgY2hhciB2bWNvcmVpbmZvX2RhdGFbVk1DT1JFSU5GT19CWVRFU107CitzdGF0aWMgdW5zaWduZWQgY2hhciB2bWNvcmVpbmZvX2RhdGFbVk1DT1JFSU5GT19CWVRFU107CiB1MzIgdm1jb3JlaW5mb19ub3RlW1ZNQ09SRUlORk9fTk9URV9TSVpFLzRdOwogc2l6ZV90IHZtY29yZWluZm9fc2l6ZTsKIHNpemVfdCB2bWNvcmVpbmZvX21heF9zaXplID0gc2l6ZW9mKHZtY29yZWluZm9fZGF0YSk7CkBAIC0xNDA5LDYgKzE0MDksNyBAQAogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgcHJldik7CiAJVk1DT1JFSU5GT19PRkZTRVQodm1fc3RydWN0LCBhZGRyKTsKIAlWTUNPUkVJTkZPX0xFTkdUSCh6b25lLmZyZWVfYXJlYSwgTUFYX09SREVSKTsKKwlsb2dfYnVmX2tleGVjX3NldHVwKCk7CiAJVk1DT1JFSU5GT19MRU5HVEgoZnJlZV9hcmVhLmZyZWVfbGlzdCwgTUlHUkFURV9UWVBFUyk7CiAJVk1DT1JFSU5GT19OVU1CRVIoTlJfRlJFRV9QQUdFUyk7CiAJVk1DT1JFSU5GT19OVU1CRVIoUEdfbHJ1KTsKQEAgLTE0NTAsMTEgKzE0NTEsNyBAQAogCQllcnJvciA9IGRldmljZV9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBSZXN1bWVfY29uc29sZTsKLQkJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIFJlc3VtZV9kZXZpY2VzOwogCQlkZXZpY2VfcG1fbG9jaygpOwotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkvKiBBdCB0aGlzIHBvaW50LCBkZXZpY2Vfc3VzcGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwKIAkJICogYnV0ICpub3QqIGRldmljZV9wb3dlcl9kb3duKCkuIFdlICptdXN0KgogCQkgKiBkZXZpY2VfcG93ZXJfZG93bigpIG5vdy4gIE90aGVyd2lzZSwgZHJpdmVycyBmb3IKQEAgLTE0NjQsMTIgKzE0NjEsMTUgQEAKIAkJICovCiAJCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19GUkVFWkUpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIEVuYWJsZV9pcnFzOwotCisJCQlnb3RvIFJlc3VtZV9kZXZpY2VzOworCQllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gRW5hYmxlX2NwdXM7CisJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCS8qIFN1c3BlbmQgc3lzdGVtIGRldmljZXMgKi8KIAkJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwkJCWdvdG8gRW5hYmxlX2lycXM7CiAJfSBlbHNlCiAjZW5kaWYKIAl7CkBAIC0xNDgzLDEzICsxNDgzLDEzIEBACiAjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKIAlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpIHsKIAkJc3lzZGV2X3Jlc3VtZSgpOwotIFBvd2VyX3VwX2RldmljZXM6Ci0JCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1RPUkUpOwogIEVuYWJsZV9pcnFzOgogCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCWRldmljZV9wbV91bmxvY2soKTsKKyBFbmFibGVfY3B1czoKIAkJZW5hYmxlX25vbmJvb3RfY3B1cygpOworCQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNUT1JFKTsKICBSZXN1bWVfZGV2aWNlczoKKwkJZGV2aWNlX3BtX3VubG9jaygpOwogCQlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVE9SRSk7CiAgUmVzdW1lX2NvbnNvbGU6CiAJCXJlc3VtZV9jb25zb2xlKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva21vZC5jIGIva2VybmVsL2ttb2QuYwppbmRleCBhMjdhNWY2Li5mMGM4ZjU0IDEwMDY0NAotLS0gYS9rZXJuZWwva21vZC5jCisrKyBiL2tlcm5lbC9rbW9kLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCX0KIAogCS8qIFdlIGNhbiBydW4gYW55d2hlcmUsIHVubGlrZSBvdXIgcGFyZW50IGtldmVudGQoKS4gKi8KLQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBDUFVfTUFTS19BTExfUFRSKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVfYWxsX21hc2spOwogCiAJLyoKIAkgKiBPdXIgcGFyZW50IGlzIGtldmVudGQsIHdoaWNoIHJ1bnMgd2l0aCBlbGV2YXRlZCBzY2hlZHVsaW5nIHByaW9yaXR5LgpkaWZmIC0tZ2l0IGEva2VybmVsL2t0aHJlYWQuYyBiL2tlcm5lbC9rdGhyZWFkLmMKaW5kZXggNGZiYzQ1Ni4uODRiYmFkZCAxMDA2NDQKLS0tIGEva2VybmVsL2t0aHJlYWQuYworKysgYi9rZXJuZWwva3RocmVhZC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkJICovCiAJCXNjaGVkX3NldHNjaGVkdWxlcihjcmVhdGUtPnJlc3VsdCwgU0NIRURfTk9STUFMLCAmcGFyYW0pOwogCQlzZXRfdXNlcl9uaWNlKGNyZWF0ZS0+cmVzdWx0LCBLVEhSRUFEX05JQ0VfTEVWRUwpOwotCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjcmVhdGUtPnJlc3VsdCwgQ1BVX01BU0tfQUxMX1BUUik7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGNyZWF0ZS0+cmVzdWx0LCBjcHVfYWxsX21hc2spOwogCX0KIAljb21wbGV0ZSgmY3JlYXRlLT5kb25lKTsKIH0KQEAgLTI0MCw3ICsyNDAsNyBAQAogCXNldF90YXNrX2NvbW0odHNrLCAia3RocmVhZGQiKTsKIAlpZ25vcmVfc2lnbmFscyh0c2spOwogCXNldF91c2VyX25pY2UodHNrLCBLVEhSRUFEX05JQ0VfTEVWRUwpOwotCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRzaywgQ1BVX01BU0tfQUxMX1BUUik7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCBjcHVfYWxsX21hc2spOwogCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkUgfCBQRl9GUkVFWkVSX05PU0lHOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCAwNmIwYzM1Li4zNjczYTNmIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKQEAgLTMxMCwxMiArMzExLDE0IEBACiAjaWYgVkVSQk9TRQogIyBkZWZpbmUgSEFSRElSUV9WRVJCT1NFCTEKICMgZGVmaW5lIFNPRlRJUlFfVkVSQk9TRQkxCisjIGRlZmluZSBSRUNMQUlNX1ZFUkJPU0UJMQogI2Vsc2UKICMgZGVmaW5lIEhBUkRJUlFfVkVSQk9TRQkwCiAjIGRlZmluZSBTT0ZUSVJRX1ZFUkJPU0UJMAorIyBkZWZpbmUgUkVDTEFJTV9WRVJCT1NFCTAKICNlbmRpZgogCi0jaWYgVkVSQk9TRSB8fCBIQVJESVJRX1ZFUkJPU0UgfHwgU09GVElSUV9WRVJCT1NFCisjaWYgVkVSQk9TRSB8fCBIQVJESVJRX1ZFUkJPU0UgfHwgU09GVElSUV9WRVJCT1NFIHx8IFJFQ0xBSU1fVkVSQk9TRQogLyoKICAqIFF1aWNrIGZpbHRlcmluZyBmb3IgaW50ZXJlc3RpbmcgZXZlbnRzOgogICovCkBAIC00NDMsMTcgKzQ0NiwxOCBAQAogICogTG9ja2luZyBwcmludG91dHM6CiAgKi8KIAorI2RlZmluZSBfX1VTQUdFKF9fU1RBVEUpCQkJCQkJXAorCVtMT0NLX1VTRURfSU5fIyNfX1NUQVRFXSA9ICJJTi0iX19zdHJpbmdpZnkoX19TVEFURSkiLVciLAlcCisJW0xPQ0tfRU5BQkxFRF8jI19fU1RBVEVdID0gX19zdHJpbmdpZnkoX19TVEFURSkiLU9OLVciLAkJXAorCVtMT0NLX1VTRURfSU5fIyNfX1NUQVRFIyNfUkVBRF0gPSAiSU4tIl9fc3RyaW5naWZ5KF9fU1RBVEUpIi1SIixcCisJW0xPQ0tfRU5BQkxFRF8jI19fU1RBVEUjI19SRUFEXSA9IF9fc3RyaW5naWZ5KF9fU1RBVEUpIi1PTi1SIiwKKwogc3RhdGljIGNvbnN0IGNoYXIgKnVzYWdlX3N0cltdID0KIHsKLQlbTE9DS19VU0VEXSA9CQkJImluaXRpYWwtdXNlICIsCi0JW0xPQ0tfVVNFRF9JTl9IQVJESVJRXSA9CSJpbi1oYXJkaXJxLVciLAotCVtMT0NLX1VTRURfSU5fU09GVElSUV0gPQkiaW4tc29mdGlycS1XIiwKLQlbTE9DS19FTkFCTEVEX1NPRlRJUlFTXSA9CSJzb2Z0aXJxLW9uLVciLAotCVtMT0NLX0VOQUJMRURfSEFSRElSUVNdID0JImhhcmRpcnEtb24tVyIsCi0JW0xPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQURdID0JImluLWhhcmRpcnEtUiIsCi0JW0xPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQURdID0JImluLXNvZnRpcnEtUiIsCi0JW0xPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEXSA9CSJzb2Z0aXJxLW9uLVIiLAotCVtMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRF0gPQkiaGFyZGlycS1vbi1SIiwKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBfX1VTQUdFKF9fU1RBVEUpCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCisJW0xPQ0tfVVNFRF0gPSAiSU5JVElBTCBVU0UiLAogfTsKIAogY29uc3QgY2hhciAqIF9fZ2V0X2tleV9uYW1lKHN0cnVjdCBsb2NrZGVwX3N1YmNsYXNzX2tleSAqa2V5LCBjaGFyICpzdHIpCkBAIC00NjEsNDYgKzQ2NSw0NSBAQAogCXJldHVybiBrYWxsc3ltc19sb29rdXAoKHVuc2lnbmVkIGxvbmcpa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOwogfQogCi12b2lkCi1nZXRfdXNhZ2VfY2hhcnMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBjaGFyICpjMSwgY2hhciAqYzIsIGNoYXIgKmMzLCBjaGFyICpjNCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWcoZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQpCiB7Ci0JKmMxID0gJy4nLCAqYzIgPSAnLicsICpjMyA9ICcuJywgKmM0ID0gJy4nOworCXJldHVybiAxVUwgPDwgYml0OworfQogCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRKQotCQkqYzEgPSAnKyc7Ci0JZWxzZQotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTKQotCQkJKmMxID0gJy0nOworc3RhdGljIGNoYXIgZ2V0X3VzYWdlX2NoYXIoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCkKK3sKKwljaGFyIGMgPSAnLic7CiAKLQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCi0JCSpjMiA9ICcrJzsKLQllbHNlCi0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUVMpCi0JCQkqYzIgPSAnLSc7Ci0KLQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCi0JCSpjMyA9ICctJzsKLQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCkgewotCQkqYzMgPSAnKyc7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKLQkJCSpjMyA9ICc/JzsKKwlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBsb2NrX2ZsYWcoYml0ICsgMikpCisJCWMgPSAnKyc7CisJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgbG9ja19mbGFnKGJpdCkpIHsKKwkJYyA9ICctJzsKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgbG9ja19mbGFnKGJpdCArIDIpKQorCQkJYyA9ICc/JzsKIAl9CiAKLQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCi0JCSpjNCA9ICctJzsKLQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlFfUkVBRCkgewotCQkqYzQgPSAnKyc7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUVNfUkVBRCkKLQkJCSpjNCA9ICc/JzsKLQl9CisJcmV0dXJuIGM7Cit9CisKK3ZvaWQgZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgY2hhciB1c2FnZVtMT0NLX1VTQUdFX0NIQVJTXSkKK3sKKwlpbnQgaSA9IDA7CisKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSAJCQkJCQlcCisJdXNhZ2VbaSsrXSA9IGdldF91c2FnZV9jaGFyKGNsYXNzLCBMT0NLX1VTRURfSU5fIyNfX1NUQVRFKTsJXAorCXVzYWdlW2krK10gPSBnZXRfdXNhZ2VfY2hhcihjbGFzcywgTE9DS19VU0VEX0lOXyMjX19TVEFURSMjX1JFQUQpOworI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorCisJdXNhZ2VbaV0gPSAnXDAnOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9sb2NrX25hbWUoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewotCWNoYXIgc3RyW0tTWU1fTkFNRV9MRU5dLCBjMSwgYzIsIGMzLCBjNDsKKwljaGFyIHN0cltLU1lNX05BTUVfTEVOXSwgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU107CiAJY29uc3QgY2hhciAqbmFtZTsKIAotCWdldF91c2FnZV9jaGFycyhjbGFzcywgJmMxLCAmYzIsICZjMywgJmM0KTsKKwlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsIHVzYWdlKTsKIAogCW5hbWUgPSBjbGFzcy0+bmFtZTsKIAlpZiAoIW5hbWUpIHsKQEAgLTUxMyw3ICs1MTYsNyBAQAogCQlpZiAoY2xhc3MtPnN1YmNsYXNzKQogCQkJcHJpbnRrKCIvJWQiLCBjbGFzcy0+c3ViY2xhc3MpOwogCX0KLQlwcmludGsoIil7JWMlYyVjJWN9IiwgYzEsIGMyLCBjMywgYzQpOworCXByaW50aygiKXslc30iLCB1c2FnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2xvY2tkZXBfY2FjaGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQpAQCAtMTI2Myw5ICsxMjY2LDQ5IEBACiAJCQliaXRfYmFja3dhcmRzLCBiaXRfZm9yd2FyZHMsIGlycWNsYXNzKTsKIH0KIAotc3RhdGljIGludAotY2hlY2tfcHJldl9hZGRfaXJxKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKLQkJc3RydWN0IGhlbGRfbG9jayAqbmV4dCkKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV9uYW1lc1tdID0geworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpIFwKKwlfX3N0cmluZ2lmeShfX1NUQVRFKSwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV9ybmFtZXNbXSA9IHsKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBcCisJX19zdHJpbmdpZnkoX19TVEFURSkiLVJFQUQiLAorI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorfTsKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpzdGF0ZV9uYW1lKGVudW0gbG9ja191c2FnZV9iaXQgYml0KQoreworCXJldHVybiAoYml0ICYgMSkgPyBzdGF0ZV9ybmFtZXNbYml0ID4+IDJdIDogc3RhdGVfbmFtZXNbYml0ID4+IDJdOworfQorCitzdGF0aWMgaW50IGV4Y2x1c2l2ZV9iaXQoaW50IG5ld19iaXQpCit7CisJLyoKKwkgKiBVU0VEX0lOCisJICogVVNFRF9JTl9SRUFECisJICogRU5BQkxFRAorCSAqIEVOQUJMRURfUkVBRAorCSAqCisJICogYml0IDAgLSB3cml0ZS9yZWFkCisJICogYml0IDEgLSB1c2VkX2luL2VuYWJsZWQKKwkgKiBiaXQgMisgIHN0YXRlCisJICovCisKKwlpbnQgc3RhdGUgPSBuZXdfYml0ICYgfjM7CisJaW50IGRpciA9IG5ld19iaXQgJiAyOworCisJLyoKKwkgKiBrZWVwIHN0YXRlLCBiaXQgZmxpcCB0aGUgZGlyZWN0aW9uIGFuZCBzdHJpcCByZWFkLgorCSAqLworCXJldHVybiBzdGF0ZSB8IChkaXIgXiAyKTsKK30KKworc3RhdGljIGludCBjaGVja19pcnFfdXNhZ2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpwcmV2LAorCQkJICAgc3RydWN0IGhlbGRfbG9jayAqbmV4dCwgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQpCiB7CiAJLyoKIAkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgaGFyZGlycS1zYWZlCkBAIC0xMjczLDM4ICsxMzE2LDM0IEBACiAJICogdGhlIGJhY2t3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8cHJldj4sIGFuZCB0aGUKIAkgKiBmb3J3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8bmV4dD46CiAJICovCi0JaWYgKCFjaGVja191c2FnZShjdXJyLCBwcmV2LCBuZXh0LCBMT0NLX1VTRURfSU5fSEFSRElSUSwKLQkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZCIpKQorCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgYml0LAorCQkJICAgZXhjbHVzaXZlX2JpdChiaXQpLCBzdGF0ZV9uYW1lKGJpdCkpKQogCQlyZXR1cm4gMDsKIAorCWJpdCsrOyAvKiBfUkVBRCAqLworCiAJLyoKIAkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgaGFyZGlycS1zYWZlLXJlYWQKIAkgKiBsb2NrIHdpdGggYSBoYXJkaXJxLXVuc2FmZSBsb2NrIC0gdG8gYWNoaWV2ZSB0aGlzIHdlIHNlYXJjaAogCSAqIHRoZSBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+LCBhbmQgdGhlCiAJICogZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+OgogCSAqLwotCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCwKLQkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZC1yZWFkIikpCisJaWYgKCFjaGVja191c2FnZShjdXJyLCBwcmV2LCBuZXh0LCBiaXQsCisJCQkgICBleGNsdXNpdmVfYml0KGJpdCksIHN0YXRlX25hbWUoYml0KSkpCiAJCXJldHVybiAwOwogCi0JLyoKLQkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgc29mdGlycS1zYWZlCi0JICogbG9jayB3aXRoIGEgc29mdGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKLQkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQotCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKLQkgKi8KLQlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLAotCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUVMsICJzb2Z0IikpCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrX3ByZXZfYWRkX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCisJCXN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCit7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkJCQkJCQlcCisJaWYgKCFjaGVja19pcnFfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOXyMjX19TVEFURSkpCVwKIAkJcmV0dXJuIDA7Ci0JLyoKLQkgKiBQcm92ZSB0aGF0IHRoZSBuZXcgZGVwZW5kZW5jeSBkb2VzIG5vdCBjb25uZWN0IGEgc29mdGlycS1zYWZlLXJlYWQKLQkgKiBsb2NrIHdpdGggYSBzb2Z0aXJxLXVuc2FmZSBsb2NrIC0gdG8gYWNoaWV2ZSB0aGlzIHdlIHNlYXJjaAotCSAqIHRoZSBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+LCBhbmQgdGhlCi0JICogZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+OgotCSAqLwotCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCwKLQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTLCAic29mdCIpKQotCQlyZXR1cm4gMDsKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKIAogCXJldHVybiAxOwogfQpAQCAtMTkzMyw3ICsxOTcyLDcgQEAKIAlwcmludF9pcF9zeW0oY3Vyci0+c29mdGlycV9kaXNhYmxlX2lwKTsKIH0KIAotc3RhdGljIGludCBoYXJkaXJxX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQorc3RhdGljIGludCBIQVJESVJRX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewogI2lmIEhBUkRJUlFfVkVSQk9TRQogCXJldHVybiBjbGFzc19maWx0ZXIoY2xhc3MpOwpAQCAtMTk0MSw3ICsxOTgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb2Z0aXJxX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQorc3RhdGljIGludCBTT0ZUSVJRX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQogewogI2lmIFNPRlRJUlFfVkVSQk9TRQogCXJldHVybiBjbGFzc19maWx0ZXIoY2xhc3MpOwpAQCAtMTk0OSwxODUgKzE5ODgsOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBSRUNMQUlNX0ZTX3ZlcmJvc2Uoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQoreworI2lmIFJFQ0xBSU1fVkVSQk9TRQorCXJldHVybiBjbGFzc19maWx0ZXIoY2xhc3MpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgU1RSSUNUX1JFQURfQ0hFQ0tTCTEKIAotc3RhdGljIGludCBtYXJrX2xvY2tfaXJxKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywKLQkJZW51bSBsb2NrX3VzYWdlX2JpdCBuZXdfYml0KQotewotCWludCByZXQgPSAxOworc3RhdGljIGludCAoKnN0YXRlX3ZlcmJvc2VfZltdKShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpID0geworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpIFwKKwlfX1NUQVRFIyNfdmVyYm9zZSwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKK307CiAKLQlzd2l0Y2gobmV3X2JpdCkgewotCWNhc2UgTE9DS19VU0VEX0lOX0hBUkRJUlE6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19FTkFCTEVEX0hBUkRJUlFTKSkKK3N0YXRpYyBpbmxpbmUgaW50IHN0YXRlX3ZlcmJvc2UoZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQsCisJCQkJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQoreworCXJldHVybiBzdGF0ZV92ZXJib3NlX2ZbYml0ID4+IDJdKGNsYXNzKTsKK30KKwordHlwZWRlZiBpbnQgKCpjaGVja191c2FnZV9mKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IGhlbGRfbG9jayAqLAorCQkJICAgICBlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCwgY29uc3QgY2hhciAqbmFtZSk7CisKK3N0YXRpYyBpbnQKK21hcmtfbG9ja19pcnEoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLCBpbnQgbmV3X2JpdCkKK3sKKwlpbnQgZXhjbF9iaXQgPSBleGNsdXNpdmVfYml0KG5ld19iaXQpOworCWludCByZWFkID0gbmV3X2JpdCAmIDE7CisJaW50IGRpciA9IG5ld19iaXQgJiAyOworCisJLyoKKwkgKiBtYXJrIFVTRURfSU4gaGFzIHRvIGxvb2sgZm9yd2FyZHMgLS0gdG8gZW5zdXJlIG5vIGRlcGVuZGVuY3kKKwkgKiBoYXMgRU5BQkxFRCBzdGF0ZSwgd2hpY2ggd291bGQgYWxsb3cgcmVjdXJzaW9uIGRlYWRsb2Nrcy4KKwkgKgorCSAqIG1hcmsgRU5BQkxFRCBoYXMgdG8gbG9vayBiYWNrd2FyZHMgLS0gdG8gZW5zdXJlIG5vIGRlcGVuZGVlCisJICogaGFzIFVTRURfSU4gc3RhdGUsIHdoaWNoLCBhZ2Fpbiwgd291bGQgYWxsb3cgIHJlY3Vyc2lvbiBkZWFkbG9ja3MuCisJICovCisJY2hlY2tfdXNhZ2VfZiB1c2FnZSA9IGRpciA/CisJCWNoZWNrX3VzYWdlX2JhY2t3YXJkcyA6IGNoZWNrX3VzYWdlX2ZvcndhcmRzOworCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGF0IHRoaXMgcGFydGljdWxhciBsb2NrIGRvZXMgbm90IGhhdmUgY29uZmxpY3RpbmcKKwkgKiB1c2FnZSBzdGF0ZXMuCisJICovCisJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBleGNsX2JpdCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGF0IHRoZSBsb2NrIGRlcGVuZGVuY2llcyBkb24ndCBoYXZlIGNvbmZsaWN0aW5nIHVzYWdlCisJICogc3RhdGVzLgorCSAqLworCWlmICgoIXJlYWQgfHwgIWRpciB8fCBTVFJJQ1RfUkVBRF9DSEVDS1MpICYmCisJCQkhdXNhZ2UoY3VyciwgdGhpcywgZXhjbF9iaXQsIHN0YXRlX25hbWUobmV3X2JpdCkpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ2hlY2sgZm9yIHJlYWQgaW4gd3JpdGUgY29uZmxpY3RzCisJICovCisJaWYgKCFyZWFkKSB7CisJCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgZXhjbF9iaXQgKyAxKSkKIAkJCXJldHVybiAwOwotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsCi0JCQkJIExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKSkKKworCQlpZiAoU1RSSUNUX1JFQURfQ0hFQ0tTICYmCisJCQkhdXNhZ2UoY3VyciwgdGhpcywgZXhjbF9iaXQgKyAxLAorCQkJCXN0YXRlX25hbWUobmV3X2JpdCArIDEpKSkKIAkJCXJldHVybiAwOwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gaGFyZGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICBMT0NLX0VOQUJMRURfSEFSRElSUVMsICJoYXJkIikpCi0JCQlyZXR1cm4gMDsKLSNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIGhhcmRpcnEtdW5zYWZlLXJlYWQgbG9jayBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKLQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCwgImhhcmQtcmVhZCIpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJaWYgKGhhcmRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJROgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUykpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRCkpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIHNvZnRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgTE9DS19FTkFCTEVEX1NPRlRJUlFTLCAic29mdCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBzb2Z0aXJxLXVuc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQsICJzb2Z0LXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChzb2Z0aXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEOgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9IQVJESVJRUykpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS1yZWFkLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gaGFyZGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICBMT0NLX0VOQUJMRURfSEFSRElSUVMsICJoYXJkIikpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGhhcmRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQ6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19FTkFCTEVEX1NPRlRJUlFTKSkKLQkJCXJldHVybiAwOwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXJlYWQtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBzb2Z0aXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKLQkJCXJldHVybiAwOwotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgTE9DS19FTkFCTEVEX0hBUkRJUlFTOgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfVVNFRF9JTl9IQVJESVJRKSkKLQkJCXJldHVybiAwOwotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsCi0JCQkJIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQpKQotCQkJcmV0dXJuIDA7Ci0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtdW5zYWZlLCBjaGVjayB0aGF0IG5vIGhhcmRpcnEtc2FmZQotCQkgKiBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rIGl0IGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICAgTE9DS19VU0VEX0lOX0hBUkRJUlEsICJoYXJkIikpCi0JCQlyZXR1cm4gMDsKLSNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS11bnNhZmUsIGNoZWNrIHRoYXQgbm8KLQkJICogaGFyZGlycS1zYWZlLXJlYWQgbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vawotCQkgKiBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJICAgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRCwgImhhcmQtcmVhZCIpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJaWYgKGhhcmRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fU09GVElSUSkpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEKSkKLQkJCXJldHVybiAwOwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubyBzb2Z0aXJxLXNhZmUKLQkJICogbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLCAic29mdCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtdW5zYWZlLCBjaGVjayB0aGF0IG5vCi0JCSAqIHNvZnRpcnEtc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sKLQkJICogaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCSAgIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsICJzb2Z0LXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChzb2Z0aXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRDoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fSEFSRElSUSkpCi0JCQlyZXR1cm4gMDsKLSNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS1yZWFkLXVuc2FmZSwgY2hlY2sgdGhhdCBubwotCQkgKiBoYXJkaXJxLXNhZmUgbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9IQVJESVJRLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJaWYgKGhhcmRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRKSkKLQkJCXJldHVybiAwOwotI2lmIFNUUklDVF9SRUFEX0NIRUNLUwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXJlYWQtdW5zYWZlLCBjaGVjayB0aGF0IG5vCi0JCSAqIHNvZnRpcnEtc2FmZSBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rIGl0IGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICAgTE9DS19VU0VEX0lOX1NPRlRJUlEsICJzb2Z0IikpCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7Ci0JCWJyZWFrOwogCX0KIAotCXJldHVybiByZXQ7CisJaWYgKHN0YXRlX3ZlcmJvc2UobmV3X2JpdCwgaGxvY2tfY2xhc3ModGhpcykpKQorCQlyZXR1cm4gMjsKKworCXJldHVybiAxOwogfQogCitlbnVtIG1hcmtfdHlwZSB7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkJX19TVEFURSwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKK307CisKIC8qCiAgKiBNYXJrIGFsbCBoZWxkIGxvY2tzIHdpdGggYSB1c2FnZSBiaXQ6CiAgKi8KIHN0YXRpYyBpbnQKLW1hcmtfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGludCBoYXJkaXJxKQorbWFya19oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgZW51bSBtYXJrX3R5cGUgbWFyaykKIHsKIAllbnVtIGxvY2tfdXNhZ2VfYml0IHVzYWdlX2JpdDsKIAlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jazsKQEAgLTIxMzYsMTcgKzIwODQsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY3Vyci0+bG9ja2RlcF9kZXB0aDsgaSsrKSB7CiAJCWhsb2NrID0gY3Vyci0+aGVsZF9sb2NrcyArIGk7CiAKLQkJaWYgKGhhcmRpcnEpIHsKLQkJCWlmIChobG9jay0+cmVhZCkKLQkJCQl1c2FnZV9iaXQgPSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRDsKLQkJCWVsc2UKLQkJCQl1c2FnZV9iaXQgPSBMT0NLX0VOQUJMRURfSEFSRElSUVM7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaGxvY2stPnJlYWQpCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQ7Ci0JCQllbHNlCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX1NPRlRJUlFTOwotCQl9CisJCXVzYWdlX2JpdCA9IDIgKyAobWFyayA8PCAyKTsgLyogRU5BQkxFRCAqLworCQlpZiAoaGxvY2stPnJlYWQpCisJCQl1c2FnZV9iaXQgKz0gMTsgLyogUkVBRCAqLworCisJCUJVR19PTih1c2FnZV9iaXQgPj0gTE9DS19VU0FHRV9TVEFURVMpOworCiAJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCB1c2FnZV9iaXQpKQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtMjIwMCw3ICsyMTQzLDcgQEAKIAkgKiBXZSBhcmUgZ29pbmcgdG8gdHVybiBoYXJkaXJxcyBvbiwgc28gc2V0IHRoZQogCSAqIHVzYWdlIGJpdCBmb3IgYWxsIGhlbGQgbG9ja3M6CiAJICovCi0JaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgMSkpCisJaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgSEFSRElSUSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElmIHdlIGhhdmUgc29mdGlycXMgZW5hYmxlZCwgdGhlbiBzZXQgdGhlIHVzYWdlCkBAIC0yMjA4LDcgKzIxNTEsNyBAQAogCSAqIHRoaXMgYml0IGZyb20gYmVpbmcgc2V0IGJlZm9yZSkKIAkgKi8KIAlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKLQkJaWYgKCFtYXJrX2hlbGRfbG9ja3MoY3VyciwgMCkpCisJCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIFNPRlRJUlEpKQogCQkJcmV0dXJuOwogCiAJY3Vyci0+aGFyZGlycV9lbmFibGVfaXAgPSBpcDsKQEAgLTIyODgsNyArMjIzMSw3IEBACiAJICogZW5hYmxlZCB0b286CiAJICovCiAJaWYgKGN1cnItPmhhcmRpcnFzX2VuYWJsZWQpCi0JCW1hcmtfaGVsZF9sb2NrcyhjdXJyLCAwKTsKKwkJbWFya19oZWxkX2xvY2tzKGN1cnIsIFNPRlRJUlEpOwogfQogCiAvKgpAQCAtMjMxNyw2ICsyMjYwLDQ4IEBACiAJCWRlYnVnX2F0b21pY19pbmMoJnJlZHVuZGFudF9zb2Z0aXJxc19vZmYpOwogfQogCitzdGF0aWMgdm9pZCBfX2xvY2tkZXBfdHJhY2VfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKKworCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQorCQlyZXR1cm47CisKKwkvKiBubyByZWNsYWltIHdpdGhvdXQgd2FpdGluZyBvbiBpdCAqLworCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCisJCXJldHVybjsKKworCS8qIHRoaXMgZ3V5IHdvbid0IGVudGVyIHJlY2xhaW0gKi8KKwlpZiAoKGN1cnItPmZsYWdzICYgUEZfTUVNQUxMT0MpICYmICEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkKKwkJcmV0dXJuOworCisJLyogV2UncmUgb25seSBpbnRlcmVzdGVkIF9fR0ZQX0ZTIGFsbG9jYXRpb25zIGZvciBub3cgKi8KKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX0ZTKSkKKwkJcmV0dXJuOworCisJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykpKQorCQlyZXR1cm47CisKKwltYXJrX2hlbGRfbG9ja3MoY3VyciwgUkVDTEFJTV9GUyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCit2b2lkIGxvY2tkZXBfdHJhY2VfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1bmxpa2VseShjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbikpCisJCXJldHVybjsKKworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY2hlY2tfZmxhZ3MoZmxhZ3MpOworCWN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uID0gMTsKKwlfX2xvY2tkZXBfdHJhY2VfYWxsb2MoZ2ZwX21hc2ssIGZsYWdzKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDA7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKwogc3RhdGljIGludCBtYXJrX2lycWZsYWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqaGxvY2spCiB7CiAJLyoKQEAgLTIzNDUsMTkgKzIzMzAsMzUgQEAKIAlpZiAoIWhsb2NrLT5oYXJkaXJxc19vZmYpIHsKIAkJaWYgKGhsb2NrLT5yZWFkKSB7CiAJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQpKQorCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUV9SRUFEKSkKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChjdXJyLT5zb2Z0aXJxc19lbmFibGVkKQogCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpKQorCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFfUkVBRCkpCiAJCQkJCXJldHVybiAwOwogCQl9IGVsc2UgewogCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRUykpCisJCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRKSkKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChjdXJyLT5zb2Z0aXJxc19lbmFibGVkKQogCQkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTKSkKKwkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRKSkKKwkJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIHJldXNlIHRoZSBpcnEgY29udGV4dCBpbmZyYXN0cnVjdHVyZSBtb3JlIGJyb2FkbHkgYXMgYSBnZW5lcmFsCisJICogY29udGV4dCBjaGVja2luZyBjb2RlLiBUaGlzIHRlc3RzIEdGUF9GUyByZWN1cnNpb24gKGEgbG9jayB0YWtlbgorCSAqIGR1cmluZyByZWNsYWltIGZvciBhIEdGUF9GUyBhbGxvY2F0aW9uIGlzIGhlbGQgb3ZlciBhIEdGUF9GUworCSAqIGFsbG9jYXRpb24pLgorCSAqLworCWlmICghaGxvY2stPnRyeWxvY2sgJiYgKGN1cnItPmxvY2tkZXBfcmVjbGFpbV9nZnAgJiBfX0dGUF9GUykpIHsKKwkJaWYgKGhsb2NrLT5yZWFkKSB7CisJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgTE9DS19VU0VEX0lOX1JFQ0xBSU1fRlNfUkVBRCkpCisJCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9SRUNMQUlNX0ZTKSkKIAkJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yNDEyLDYgKzI0MTMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IGdmcF9tYXNrKQoreworfQorCiAjZW5kaWYKIAogLyoKQEAgLTI0NDUsMTQgKzI0NTAsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKG5ld19iaXQpIHsKLQljYXNlIExPQ0tfVVNFRF9JTl9IQVJESVJROgotCWNhc2UgTE9DS19VU0VEX0lOX1NPRlRJUlE6Ci0JY2FzZSBMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEOgotCWNhc2UgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRDoKLQljYXNlIExPQ0tfRU5BQkxFRF9IQVJESVJRUzoKLQljYXNlIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzoKLQljYXNlIExPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEOgotCWNhc2UgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQ6CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkJCQlcCisJY2FzZSBMT0NLX1VTRURfSU5fIyNfX1NUQVRFOgkJXAorCWNhc2UgTE9DS19VU0VEX0lOXyMjX19TVEFURSMjX1JFQUQ6CVwKKwljYXNlIExPQ0tfRU5BQkxFRF8jI19fU1RBVEU6CQlcCisJY2FzZSBMT0NLX0VOQUJMRURfIyNfX1NUQVRFIyNfUkVBRDoKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKIAkJcmV0ID0gbWFya19sb2NrX2lycShjdXJyLCB0aGlzLCBuZXdfYml0KTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gMDsKQEAgLTI5NjYsNiArMjk3MCwxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja19yZWxlYXNlKTsKIAordm9pZCBsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoZ2ZwX3QgZ2ZwX21hc2spCit7CisJY3VycmVudC0+bG9ja2RlcF9yZWNsYWltX2dmcCA9IGdmcF9tYXNrOworfQorCit2b2lkIGxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKHZvaWQpCit7CisJY3VycmVudC0+bG9ja2RlcF9yZWNsYWltX2dmcCA9IDA7Cit9CisKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiBzdGF0aWMgaW50CiBwcmludF9sb2NrX2NvbnRlbnRpb25fYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmggYi9rZXJuZWwvbG9ja2RlcF9pbnRlcm5hbHMuaAppbmRleCA1NmIxOTY5Li5hMmNjN2U5IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcF9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvbG9ja2RlcF9pbnRlcm5hbHMuaApAQCAtNyw2ICs3LDQ1IEBACiAgKi8KIAogLyoKKyAqIExvY2stY2xhc3MgdXNhZ2Utc3RhdGUgYml0czoKKyAqLworZW51bSBsb2NrX3VzYWdlX2JpdCB7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkJCVwKKwlMT0NLX1VTRURfSU5fIyNfX1NUQVRFLAkJXAorCUxPQ0tfVVNFRF9JTl8jI19fU1RBVEUjI19SRUFELAlcCisJTE9DS19FTkFCTEVEXyMjX19TVEFURSwJCVwKKwlMT0NLX0VOQUJMRURfIyNfX1NUQVRFIyNfUkVBRCwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKKwlMT0NLX1VTRUQsCisJTE9DS19VU0FHRV9TVEFURVMKK307CisKKy8qCisgKiBVc2FnZS1zdGF0ZSBiaXRtYXNrczoKKyAqLworI2RlZmluZSBfX0xPQ0tGKF9fU1RBVEUpCUxPQ0tGXyMjX19TVEFURSA9ICgxIDw8IExPQ0tfIyNfX1NUQVRFKSwKKworZW51bSB7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkJCQkJCQlcCisJX19MT0NLRihVU0VEX0lOXyMjX19TVEFURSkJCQkJCVwKKwlfX0xPQ0tGKFVTRURfSU5fIyNfX1NUQVRFIyNfUkVBRCkJCQkJXAorCV9fTE9DS0YoRU5BQkxFRF8jI19fU1RBVEUpCQkJCQlcCisJX19MT0NLRihFTkFCTEVEXyMjX19TVEFURSMjX1JFQUQpCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCisJX19MT0NLRihVU0VEKQorfTsKKworI2RlZmluZSBMT0NLRl9FTkFCTEVEX0lSUSAoTE9DS0ZfRU5BQkxFRF9IQVJESVJRIHwgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRKQorI2RlZmluZSBMT0NLRl9VU0VEX0lOX0lSUSAoTE9DS0ZfVVNFRF9JTl9IQVJESVJRIHwgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQorCisjZGVmaW5lIExPQ0tGX0VOQUJMRURfSVJRX1JFQUQgXAorCQkoTE9DS0ZfRU5BQkxFRF9IQVJESVJRX1JFQUQgfCBMT0NLRl9FTkFCTEVEX1NPRlRJUlFfUkVBRCkKKyNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9JUlFfUkVBRCBcCisJCShMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCB8IExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQorCisvKgogICogTUFYX0xPQ0tERVBfRU5UUklFUyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbG9jayBkZXBlbmRlbmNpZXMKICAqIHdlIHRyYWNrLgogICoKQEAgLTMxLDggKzcwLDEwIEBACiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhbGxfbG9ja19jbGFzc2VzOwogZXh0ZXJuIHN0cnVjdCBsb2NrX2NoYWluIGxvY2tfY2hhaW5zW107CiAKLWV4dGVybiB2b2lkCi1nZXRfdXNhZ2VfY2hhcnMoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzLCBjaGFyICpjMSwgY2hhciAqYzIsIGNoYXIgKmMzLCBjaGFyICpjNCk7CisjZGVmaW5lIExPQ0tfVVNBR0VfQ0hBUlMgKDErTE9DS19VU0FHRV9TVEFURVMvMikKKworZXh0ZXJuIHZvaWQgZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywKKwkJCSAgICBjaGFyIHVzYWdlW0xPQ0tfVVNBR0VfQ0hBUlNdKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKiBfX2dldF9rZXlfbmFtZShzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkgKmtleSwgY2hhciAqc3RyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfcHJvYy5jIGIva2VybmVsL2xvY2tkZXBfcHJvYy5jCmluZGV4IDEzNzE2YjguLmQ3MTM1YWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwX3Byb2MuYworKysgYi9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKQEAgLTg0LDcgKzg0LDcgQEAKIHsKIAlzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSB2OwogCXN0cnVjdCBsb2NrX2xpc3QgKmVudHJ5OwotCWNoYXIgYzEsIGMyLCBjMywgYzQ7CisJY2hhciB1c2FnZVtMT0NLX1VTQUdFX0NIQVJTXTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHJpbnRmKG0sICJhbGwgbG9jayBjbGFzc2VzOlxuIik7CkBAIC0xMDAsOCArMTAwLDggQEAKIAlzZXFfcHJpbnRmKG0sICIgQkQ6JTVsZCIsIGxvY2tkZXBfY291bnRfYmFja3dhcmRfZGVwcyhjbGFzcykpOwogI2VuZGlmCiAKLQlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsICZjMSwgJmMyLCAmYzMsICZjNCk7Ci0Jc2VxX3ByaW50ZihtLCAiICVjJWMlYyVjIiwgYzEsIGMyLCBjMywgYzQpOworCWdldF91c2FnZV9jaGFycyhjbGFzcywgdXNhZ2UpOworCXNlcV9wcmludGYobSwgIiAlcyIsIHVzYWdlKTsKIAogCXNlcV9wcmludGYobSwgIjogIik7CiAJcHJpbnRfbmFtZShtLCBjbGFzcyk7CkBAIC0zMDAsMjcgKzMwMCwyNyBAQAogCQkJbnJfdW5jYXRlZ29yaXplZCsrOwogCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0lSUSkKIAkJCW5yX2lycV9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRUykKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9JUlEpCiAJCQlucl9pcnFfdW5zYWZlKys7CiAJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fU09GVElSUSkKIAkJCW5yX3NvZnRpcnFfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTKQorCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlEpCiAJCQlucl9zb2Z0aXJxX3Vuc2FmZSsrOwogCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlEpCiAJCQlucl9oYXJkaXJxX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRUykKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRKQogCQkJbnJfaGFyZGlycV91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9JUlFfUkVBRCkKIAkJCW5yX2lycV9yZWFkX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9JUlFTX1JFQUQpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRX1JFQUQpCiAJCQlucl9pcnFfcmVhZF91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpCiAJCQlucl9zb2Z0aXJxX3JlYWRfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfU09GVElSUV9SRUFEKQogCQkJbnJfc29mdGlycV9yZWFkX3Vuc2FmZSsrOwogCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCkKIAkJCW5yX2hhcmRpcnFfcmVhZF9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRX1JFQUQpCiAJCQlucl9oYXJkaXJxX3JlYWRfdW5zYWZlKys7CiAKICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwpAQCAtNjAxLDYgKzYwMSwxMCBAQAogc3RhdGljIHZvaWQgc2VxX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc2VxX3ByaW50ZihtLCAibG9ja19zdGF0IHZlcnNpb24gMC4zXG4iKTsKKworCWlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKQorCQlzZXFfcHJpbnRmKG0sICIqV0FSTklORyogbG9jayBkZWJ1Z2dpbmcgZGlzYWJsZWQhISAtIHBvc3NpYmx5IGR1ZSB0byBhIGxvY2tkZXAgd2FybmluZ1xuIik7CisKIAlzZXFfbGluZShtLCAnLScsIDAsIDQwICsgMSArIDEwICogKDE0ICsgMSkpOwogCXNlcV9wcmludGYobSwgIiU0MHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICIKIAkJCSIlMTRzICUxNHNcbiIsCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaCBiL2tlcm5lbC9sb2NrZGVwX3N0YXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWIwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBMb2NrZGVwIHN0YXRlcywKKyAqCisgKiBwbGVhc2UgdXBkYXRlIFhYWF9MT0NLX1VTQUdFX1NUQVRFUyBpbiBpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCB3aGVuZXZlcgorICogeW91IGFkZCBvbmUsIG9yIGNvbWUgdXAgd2l0aCBhIG5pY2UgZHluYW1pYyBzb2x1dGlvbi4KKyAqLworTE9DS0RFUF9TVEFURShIQVJESVJRKQorTE9DS0RFUF9TVEFURShTT0ZUSVJRKQorTE9DS0RFUF9TVEFURShSRUNMQUlNX0ZTKQpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmMgYi9rZXJuZWwvbXV0ZXgtZGVidWcuYwppbmRleCAxZDk0MTYwLi41MGQwMjJlIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuYworKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuYwpAQCAtMjYsMTEgKzI2LDYgQEAKIC8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2stPndhaXRfbG9jayBoZWxkLgogICovCi12b2lkIGRlYnVnX211dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X293bmVyKQotewotCWxvY2stPm93bmVyID0gbmV3X293bmVyOwotfQotCiB2b2lkIGRlYnVnX211dGV4X2xvY2tfY29tbW9uKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKQogewogCW1lbXNldCh3YWl0ZXIsIE1VVEVYX0RFQlVHX0lOSVQsIHNpemVvZigqd2FpdGVyKSk7CkBAIC01OSw3ICs1NCw2IEBACiAKIAkvKiBNYXJrIHRoZSBjdXJyZW50IHRocmVhZCBhcyBibG9ja2VkIG9uIHRoZSBsb2NrOiAqLwogCXRpLT50YXNrLT5ibG9ja2VkX29uID0gd2FpdGVyOwotCXdhaXRlci0+bG9jayA9IGxvY2s7CiB9CiAKIHZvaWQgbXV0ZXhfcmVtb3ZlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlciwKQEAgLTgyLDcgKzc2LDcgQEAKIAlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm1hZ2ljICE9IGxvY2spOwogCURFQlVHX0xPQ0tTX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudF90aHJlYWRfaW5mbygpKTsKIAlERUJVR19MT0NLU19XQVJOX09OKCFsb2NrLT53YWl0X2xpc3QucHJldiAmJiAhbG9jay0+d2FpdF9saXN0Lm5leHQpOwotCURFQlVHX0xPQ0tTX1dBUk5fT04obG9jay0+b3duZXIgIT0gY3VycmVudF90aHJlYWRfaW5mbygpKTsKKwltdXRleF9jbGVhcl9vd25lcihsb2NrKTsKIH0KIAogdm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKQEAgLTk1LDcgKzg5LDYgQEAKIAlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZCgodm9pZCAqKWxvY2ssIHNpemVvZigqbG9jaykpOwogCWxvY2tkZXBfaW5pdF9tYXAoJmxvY2stPmRlcF9tYXAsIG5hbWUsIGtleSwgMCk7CiAjZW5kaWYKLQlsb2NrLT5vd25lciA9IE5VTEw7CiAJbG9jay0+bWFnaWMgPSBsb2NrOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXgtZGVidWcuaCBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5oCmluZGV4IGJhYmZiZGYuLjZiMmQ3MzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5oCisrKyBiL2tlcm5lbC9tdXRleC1kZWJ1Zy5oCkBAIC0xMywxNCArMTMsNiBAQAogLyoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrLT53YWl0X2xvY2sgaGVsZC4KICAqLwotZXh0ZXJuIHZvaWQKLWRlYnVnX211dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0aHJlYWRfaW5mbyAqbmV3X293bmVyKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX211dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKLXsKLQlsb2NrLT5vd25lciA9IE5VTEw7Ci19Ci0KIGV4dGVybiB2b2lkIGRlYnVnX211dGV4X2xvY2tfY29tbW9uKHN0cnVjdCBtdXRleCAqbG9jaywKIAkJCQkgICAgc3RydWN0IG11dGV4X3dhaXRlciAqd2FpdGVyKTsKIGV4dGVybiB2b2lkIGRlYnVnX211dGV4X3dha2Vfd2FpdGVyKHN0cnVjdCBtdXRleCAqbG9jaywKQEAgLTM1LDYgKzI3LDE2IEBACiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9pbml0KHN0cnVjdCBtdXRleCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpOwogCitzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG11dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IE5VTEw7Cit9CisKICNkZWZpbmUgc3Bpbl9sb2NrX211dGV4KGxvY2ssIGZsYWdzKQkJCVwKIAlkbyB7CQkJCQkJXAogCQlzdHJ1Y3QgbXV0ZXggKmwgPSBjb250YWluZXJfb2YobG9jaywgc3RydWN0IG11dGV4LCB3YWl0X2xvY2spOyBcCmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXguYyBiL2tlcm5lbC9tdXRleC5jCmluZGV4IDRmNDVkNGIuLjVkNzk3ODEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC5jCisrKyBiL2tlcm5lbC9tdXRleC5jCkBAIC0xMCw2ICsxMCwxMSBAQAogICogTWFueSB0aGFua3MgdG8gQXJqYW4gdmFuIGRlIFZlbiwgVGhvbWFzIEdsZWl4bmVyLCBTdGV2ZW4gUm9zdGVkdCBhbmQKICAqIERhdmlkIEhvd2VsbHMgZm9yIHN1Z2dlc3Rpb25zIGFuZCBpbXByb3ZlbWVudHMuCiAgKgorICogIC0gQWRhcHRpdmUgc3Bpbm5pbmcgZm9yIG11dGV4ZXMgYnkgUGV0ZXIgWmlqbHN0cmEuIChQb3J0ZWQgdG8gbWFpbmxpbmUKKyAqICAgIGZyb20gdGhlIC1ydCB0cmVlLCB3aGVyZSBpdCB3YXMgb3JpZ2luYWxseSBpbXBsZW1lbnRlZCBmb3IgcnRtdXRleGVzCisgKiAgICBieSBTdGV2ZW4gUm9zdGVkdCwgYmFzZWQgb24gd29yayBieSBHcmVnb3J5IEhhc2tpbnMsIFBldGVyIE1vcnJlYWxlCisgKiAgICBhbmQgU3ZlbiBEaWV0cmljaC4KKyAqCiAgKiBBbHNvIHNlZSBEb2N1bWVudGF0aW9uL211dGV4LWRlc2lnbi50eHQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtNDYsNiArNTEsNyBAQAogCWF0b21pY19zZXQoJmxvY2stPmNvdW50LCAxKTsKIAlzcGluX2xvY2tfaW5pdCgmbG9jay0+d2FpdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbG9jay0+d2FpdF9saXN0KTsKKwltdXRleF9jbGVhcl9vd25lcihsb2NrKTsKIAogCWRlYnVnX211dGV4X2luaXQobG9jaywgbmFtZSwga2V5KTsKIH0KQEAgLTkxLDYgKzk3LDcgQEAKIAkgKiAndW5sb2NrZWQnIGludG8gJ2xvY2tlZCcgc3RhdGUuCiAJICovCiAJX19tdXRleF9mYXN0cGF0aF9sb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX3Nsb3dwYXRoKTsKKwltdXRleF9zZXRfb3duZXIobG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0wobXV0ZXhfbG9jayk7CkBAIC0xMTUsNiArMTIyLDE0IEBACiAJICogVGhlIHVubG9ja2luZyBmYXN0cGF0aCBpcyB0aGUgMC0+MSB0cmFuc2l0aW9uIGZyb20gJ2xvY2tlZCcKIAkgKiBpbnRvICd1bmxvY2tlZCcgc3RhdGU6CiAJICovCisjaWZuZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCisJLyoKKwkgKiBXaGVuIGRlYnVnZ2luZyBpcyBlbmFibGVkIHdlIG11c3Qgbm90IGNsZWFyIHRoZSBvd25lciBiZWZvcmUgdGltZSwKKwkgKiB0aGUgc2xvdyBwYXRoIHdpbGwgYWx3YXlzIGJlIHRha2VuLCBhbmQgdGhhdCBjbGVhcnMgdGhlIG93bmVyIGZpZWxkCisJICogYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQgaXQgd2FzIGluZGVlZCBjdXJyZW50LgorCSAqLworCW11dGV4X2NsZWFyX293bmVyKGxvY2spOworI2VuZGlmCiAJX19tdXRleF9mYXN0cGF0aF91bmxvY2soJmxvY2stPmNvdW50LCBfX211dGV4X3VubG9ja19zbG93cGF0aCk7CiB9CiAKQEAgLTEyOSwyMSArMTQ0LDc1IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbXV0ZXhfd2FpdGVyIHdhaXRlcjsKLQl1bnNpZ25lZCBpbnQgb2xkX3ZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIGlwKTsKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKQorCS8qCisJICogT3B0aW1pc3RpYyBzcGlubmluZy4KKwkgKgorCSAqIFdlIHRyeSB0byBzcGluIGZvciBhY3F1aXNpdGlvbiB3aGVuIHdlIGZpbmQgdGhhdCB0aGVyZSBhcmUgbm8KKwkgKiBwZW5kaW5nIHdhaXRlcnMgYW5kIHRoZSBsb2NrIG93bmVyIGlzIGN1cnJlbnRseSBydW5uaW5nIG9uIGEKKwkgKiAoZGlmZmVyZW50KSBDUFUuCisJICoKKwkgKiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgaWYgdGhlIGxvY2sgb3duZXIgaXMgcnVubmluZywgaXQgaXMgbGlrZWx5IHRvCisJICogcmVsZWFzZSB0aGUgbG9jayBzb29uLgorCSAqCisJICogU2luY2UgdGhpcyBuZWVkcyB0aGUgbG9jayBvd25lciwgYW5kIHRoaXMgbXV0ZXggaW1wbGVtZW50YXRpb24KKwkgKiBkb2Vzbid0IHRyYWNrIHRoZSBvd25lciBhdG9taWNhbGx5IGluIHRoZSBsb2NrIGZpZWxkLCB3ZSBuZWVkIHRvCisJICogdHJhY2sgaXQgbm9uLWF0b21pY2FsbHkuCisJICoKKwkgKiBXZSBjYW4ndCBkbyB0aGlzIGZvciBERUJVR19NVVRFWEVTIGJlY2F1c2UgdGhhdCByZWxpZXMgb24gd2FpdF9sb2NrCisJICogdG8gc2VyaWFsaXplIGV2ZXJ5dGhpbmcuCisJICovCisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCB0aHJlYWRfaW5mbyAqb3duZXI7CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBhbiBvd25lciwgd2FpdCBmb3IgaXQgdG8gZWl0aGVyCisJCSAqIHJlbGVhc2UgdGhlIGxvY2sgb3IgZ28gdG8gc2xlZXAuCisJCSAqLworCQlvd25lciA9IEFDQ0VTU19PTkNFKGxvY2stPm93bmVyKTsKKwkJaWYgKG93bmVyICYmICFtdXRleF9zcGluX29uX293bmVyKGxvY2ssIG93bmVyKSkKKwkJCWJyZWFrOworCisJCWlmIChhdG9taWNfY21weGNoZygmbG9jay0+Y291bnQsIDEsIDApID09IDEpIHsKKwkJCWxvY2tfYWNxdWlyZWQoJmxvY2stPmRlcF9tYXAsIGlwKTsKKwkJCW11dGV4X3NldF9vd25lcihsb2NrKTsKKwkJCXByZWVtcHRfZW5hYmxlKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIFdoZW4gdGhlcmUncyBubyBvd25lciwgd2UgbWlnaHQgaGF2ZSBwcmVlbXB0ZWQgYmV0d2VlbiB0aGUKKwkJICogb3duZXIgYWNxdWlyaW5nIHRoZSBsb2NrIGFuZCBzZXR0aW5nIHRoZSBvd25lciBmaWVsZC4gSWYKKwkJICogd2UncmUgYW4gUlQgdGFzayB0aGF0IHdpbGwgbGl2ZS1sb2NrIGJlY2F1c2Ugd2Ugd29uJ3QgbGV0CisJCSAqIHRoZSBvd25lciBjb21wbGV0ZS4KKwkJICovCisJCWlmICghb3duZXIgJiYgKG5lZWRfcmVzY2hlZCgpIHx8IHJ0X3Rhc2sodGFzaykpKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogVGhlIGNwdV9yZWxheCgpIGNhbGwgaXMgYSBjb21waWxlciBiYXJyaWVyIHdoaWNoIGZvcmNlcworCQkgKiBldmVyeXRoaW5nIGluIHRoaXMgbG9vcCB0byBiZSByZS1sb2FkZWQuIFdlIGRvbid0IG5lZWQKKwkJICogbWVtb3J5IGJhcnJpZXJzIGFzIHdlJ2xsIGV2ZW50dWFsbHkgb2JzZXJ2ZSB0aGUgcmlnaHQKKwkJICogdmFsdWVzIGF0IHRoZSBjb3N0IG9mIGEgZmV3IGV4dHJhIHNwaW5zLgorCQkgKi8KKwkJY3B1X3JlbGF4KCk7CisJfQorI2VuZGlmCiAJc3Bpbl9sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCWRlYnVnX211dGV4X2xvY2tfY29tbW9uKGxvY2ssICZ3YWl0ZXIpOwotCW11dGV4X2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBpcCk7CiAJZGVidWdfbXV0ZXhfYWRkX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKIAogCS8qIGFkZCB3YWl0aW5nIHRhc2tzIHRvIHRoZSBlbmQgb2YgdGhlIHdhaXRxdWV1ZSAoRklGTyk6ICovCiAJbGlzdF9hZGRfdGFpbCgmd2FpdGVyLmxpc3QsICZsb2NrLT53YWl0X2xpc3QpOwogCXdhaXRlci50YXNrID0gdGFzazsKIAotCW9sZF92YWwgPSBhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKTsKLQlpZiAob2xkX3ZhbCA9PSAxKQorCWlmIChhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKSA9PSAxKQogCQlnb3RvIGRvbmU7CiAKIAlsb2NrX2NvbnRlbmRlZCgmbG9jay0+ZGVwX21hcCwgaXApOwpAQCAtMTU4LDggKzIyNyw3IEBACiAJCSAqIHRoYXQgd2hlbiB3ZSByZWxlYXNlIHRoZSBsb2NrLCB3ZSBwcm9wZXJseSB3YWtlIHVwIHRoZQogCQkgKiBvdGhlciB3YWl0ZXJzOgogCQkgKi8KLQkJb2xkX3ZhbCA9IGF0b21pY194Y2hnKCZsb2NrLT5jb3VudCwgLTEpOwotCQlpZiAob2xkX3ZhbCA9PSAxKQorCQlpZiAoYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSkgPT0gMSkKIAkJCWJyZWFrOwogCiAJCS8qCkBAIC0xNzMsMjEgKzI0MSwyMiBAQAogCQkJc3Bpbl91bmxvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOwogCiAJCQlkZWJ1Z19tdXRleF9mcmVlX3dhaXRlcigmd2FpdGVyKTsKKwkJCXByZWVtcHRfZW5hYmxlKCk7CiAJCQlyZXR1cm4gLUVJTlRSOwogCQl9CiAJCV9fc2V0X3Rhc2tfc3RhdGUodGFzaywgc3RhdGUpOwogCiAJCS8qIGRpZG50IGdldCB0aGUgbG9jaywgZ28gdG8gc2xlZXA6ICovCiAJCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKLQkJc2NoZWR1bGUoKTsKKwkJX19zY2hlZHVsZSgpOwogCQlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOwogCX0KIAogZG9uZToKIAlsb2NrX2FjcXVpcmVkKCZsb2NrLT5kZXBfbWFwLCBpcCk7CiAJLyogZ290IHRoZSBsb2NrIC0gcmVqb2ljZSEgKi8KLQltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIHRhc2tfdGhyZWFkX2luZm8odGFzaykpOwotCWRlYnVnX211dGV4X3NldF9vd25lcihsb2NrLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKKwltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJbXV0ZXhfc2V0X293bmVyKGxvY2spOwogCiAJLyogc2V0IGl0IHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnMgbGVmdDogKi8KIAlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJmxvY2stPndhaXRfbGlzdCkpKQpAQCAtMTk2LDYgKzI2NSw3IEBACiAJc3Bpbl91bmxvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOwogCiAJZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoJndhaXRlcik7CisJcHJlZW1wdF9lbmFibGUoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjIyLDcgKzI5Miw4IEBACiBtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKHN0cnVjdCBtdXRleCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKQogewogCW1pZ2h0X3NsZWVwKCk7Ci0JcmV0dXJuIF9fbXV0ZXhfbG9ja19jb21tb24obG9jaywgVEFTS19JTlRFUlJVUFRJQkxFLCBzdWJjbGFzcywgX1JFVF9JUF8pOworCXJldHVybiBfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfSU5URVJSVVBUSUJMRSwKKwkJCQkgICBzdWJjbGFzcywgX1JFVF9JUF8pOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChtdXRleF9sb2NrX2ludGVycnVwdGlibGVfbmVzdGVkKTsKQEAgLTI2MCw4ICszMzEsNiBAQAogCQl3YWtlX3VwX3Byb2Nlc3Mod2FpdGVyLT50YXNrKTsKIAl9CiAKLQlkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihsb2NrKTsKLQogCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjk4LDE4ICszNjcsMzAgQEAKICAqLwogaW50IF9fc2NoZWQgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKKwlpbnQgcmV0OworCiAJbWlnaHRfc2xlZXAoKTsKLQlyZXR1cm4gX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbAorCXJldCA9ICBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsCiAJCQkoJmxvY2stPmNvdW50LCBfX211dGV4X2xvY2tfaW50ZXJydXB0aWJsZV9zbG93cGF0aCk7CisJaWYgKCFyZXQpCisJCW11dGV4X3NldF9vd25lcihsb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0wobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKTsKIAogaW50IF9fc2NoZWQgbXV0ZXhfbG9ja19raWxsYWJsZShzdHJ1Y3QgbXV0ZXggKmxvY2spCiB7CisJaW50IHJldDsKKwogCW1pZ2h0X3NsZWVwKCk7Ci0JcmV0dXJuIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwKKwlyZXQgPSBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsCiAJCQkoJmxvY2stPmNvdW50LCBfX211dGV4X2xvY2tfa2lsbGFibGVfc2xvd3BhdGgpOworCWlmICghcmV0KQorCQltdXRleF9zZXRfb3duZXIobG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChtdXRleF9sb2NrX2tpbGxhYmxlKTsKIApAQCAtMzUyLDkgKzQzMywxMCBAQAogCiAJcHJldiA9IGF0b21pY194Y2hnKCZsb2NrLT5jb3VudCwgLTEpOwogCWlmIChsaWtlbHkocHJldiA9PSAxKSkgewotCQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgY3VycmVudF90aHJlYWRfaW5mbygpKTsKKwkJbXV0ZXhfc2V0X293bmVyKGxvY2spOwogCQltdXRleF9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCAwLCAxLCBfUkVUX0lQXyk7CiAJfQorCiAJLyogU2V0IGl0IGJhY2sgdG8gMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGVyczogKi8KIAlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJmxvY2stPndhaXRfbGlzdCkpKQogCQlhdG9taWNfc2V0KCZsb2NrLT5jb3VudCwgMCk7CkBAIC0zODAsOCArNDYyLDEzIEBACiAgKi8KIGludCBfX3NjaGVkIG11dGV4X3RyeWxvY2soc3RydWN0IG11dGV4ICpsb2NrKQogewotCXJldHVybiBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soJmxvY2stPmNvdW50LAotCQkJCQlfX211dGV4X3RyeWxvY2tfc2xvd3BhdGgpOworCWludCByZXQ7CisKKwlyZXQgPSBfX211dGV4X2Zhc3RwYXRoX3RyeWxvY2soJmxvY2stPmNvdW50LCBfX211dGV4X3RyeWxvY2tfc2xvd3BhdGgpOworCWlmIChyZXQpCisJCW11dGV4X3NldF9vd25lcihsb2NrKTsKKworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0wobXV0ZXhfdHJ5bG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXguaCBiL2tlcm5lbC9tdXRleC5oCmluZGV4IGEwNzVkYWYuLjY3NTc4Y2EgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC5oCisrKyBiL2tlcm5lbC9tdXRleC5oCkBAIC0xNiw4ICsxNiwyNiBAQAogI2RlZmluZSBtdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssIHdhaXRlciwgdGkpIFwKIAkJX19saXN0X2RlbCgod2FpdGVyKS0+bGlzdC5wcmV2LCAod2FpdGVyKS0+bGlzdC5uZXh0KQogCi0jZGVmaW5lIGRlYnVnX211dGV4X3NldF9vd25lcihsb2NrLCBuZXdfb3duZXIpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGRlYnVnX211dGV4X2NsZWFyX293bmVyKGxvY2spCQkJZG8geyB9IHdoaWxlICgwKQorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrKQoreworCWxvY2stPm93bmVyID0gY3VycmVudF90aHJlYWRfaW5mbygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfY2xlYXJfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrKQoreworCWxvY2stPm93bmVyID0gTlVMTDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIG11dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKK30KKyNlbmRpZgorCiAjZGVmaW5lIGRlYnVnX211dGV4X3dha2Vfd2FpdGVyKGxvY2ssIHdhaXRlcikJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIod2FpdGVyKQkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZGVidWdfbXV0ZXhfYWRkX3dhaXRlcihsb2NrLCB3YWl0ZXIsIHRpKQlkbyB7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9rZXJuZWwvbnNfY2dyb3VwLmMgYi9rZXJuZWwvbnNfY2dyb3VwLmMKaW5kZXggNzhiYzNmZC4uNWFhODU0ZiAxMDA2NDQKLS0tIGEva2VybmVsL25zX2Nncm91cC5jCisrKyBiL2tlcm5lbC9uc19jZ3JvdXAuYwpAQCAtMzQsNyArMzQsNyBAQAogCiAvKgogICogUnVsZXM6Ci0gKiAgIDEuIHlvdSBjYW4gb25seSBlbnRlciBhIGNncm91cCB3aGljaCBpcyBhIGNoaWxkIG9mIHlvdXIgY3VycmVudAorICogICAxLiB5b3UgY2FuIG9ubHkgZW50ZXIgYSBjZ3JvdXAgd2hpY2ggaXMgYSBkZXNjZW5kYW50IG9mIHlvdXIgY3VycmVudAogICogICAgIGNncm91cAogICogICAyLiB5b3UgY2FuIG9ubHkgcGxhY2UgYW5vdGhlciBwcm9jZXNzIGludG8gYSBjZ3JvdXAgaWYKICAqICAgICBhLiB5b3UgaGF2ZSBDQVBfU1lTX0FETUlOCkBAIC00NSwyMSArNDUsMTUgQEAKIHN0YXRpYyBpbnQgbnNfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCXN0cnVjdCBjZ3JvdXAgKm5ld19jZ3JvdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlzdHJ1Y3QgY2dyb3VwICpvcmlnOwotCiAJaWYgKGN1cnJlbnQgIT0gdGFzaykgewogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQobmV3X2Nncm91cCkpCisJCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQobmV3X2Nncm91cCwgY3VycmVudCkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCWlmIChhdG9taWNfcmVhZCgmbmV3X2Nncm91cC0+Y291bnQpICE9IDApCi0JCXJldHVybiAtRVBFUk07Ci0KLQlvcmlnID0gdGFza19jZ3JvdXAodGFzaywgbnNfc3Vic3lzX2lkKTsKLQlpZiAob3JpZyAmJiBvcmlnICE9IG5ld19jZ3JvdXAtPnBhcmVudCkKKwlpZiAoIWNncm91cF9pc19kZXNjZW5kYW50KG5ld19jZ3JvdXAsIHRhc2spKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIDA7CkBAIC03Nyw3ICs3MSw3IEBACiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7Ci0JaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChjZ3JvdXApKQorCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY2dyb3VwLCBjdXJyZW50KSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKIAogCW5zX2Nncm91cCA9IGt6YWxsb2Moc2l6ZW9mKCpuc19jZ3JvdXApLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCAxYjM1ODZmLi5iMmU1Zjc4IDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC00MDMsNiArNDAzLDggQEAKIHsKIAlzdHJ1Y3QgcGlkICpwaWQ7CiAJcmN1X3JlYWRfbG9jaygpOworCWlmICh0eXBlICE9IFBJRFRZUEVfUElEKQorCQl0YXNrID0gdGFzay0+Z3JvdXBfbGVhZGVyOwogCXBpZCA9IGdldF9waWQodGFzay0+cGlkc1t0eXBlXS5waWQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiBwaWQ7CkBAIC00NTAsMTEgKzQ1MiwyNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGlkX3Zucik7CiAKLXBpZF90IHRhc2tfcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCitwaWRfdCBfX3Rhc2tfcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgZW51bSBwaWRfdHlwZSB0eXBlLAorCQkJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQogewotCXJldHVybiBwaWRfbnJfbnModGFza19waWQodHNrKSwgbnMpOworCXBpZF90IG5yID0gMDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoIW5zKQorCQlucyA9IGN1cnJlbnQtPm5zcHJveHktPnBpZF9uczsKKwlpZiAobGlrZWx5KHBpZF9hbGl2ZSh0YXNrKSkpIHsKKwkJaWYgKHR5cGUgIT0gUElEVFlQRV9QSUQpCisJCQl0YXNrID0gdGFzay0+Z3JvdXBfbGVhZGVyOworCQluciA9IHBpZF9ucl9ucyh0YXNrLT5waWRzW3R5cGVdLnBpZCwgbnMpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBucjsKIH0KLUVYUE9SVF9TWU1CT0wodGFza19waWRfbnJfbnMpOworRVhQT1JUX1NZTUJPTChfX3Rhc2tfcGlkX25yX25zKTsKIAogcGlkX3QgdGFza190Z2lkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7CkBAIC00NjIsMTggKzQ3Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHRhc2tfdGdpZF9ucl9ucyk7CiAKLXBpZF90IHRhc2tfcGdycF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQotewotCXJldHVybiBwaWRfbnJfbnModGFza19wZ3JwKHRzayksIG5zKTsKLX0KLUVYUE9SVF9TWU1CT0wodGFza19wZ3JwX25yX25zKTsKLQotcGlkX3QgdGFza19zZXNzaW9uX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCi17Ci0JcmV0dXJuIHBpZF9ucl9ucyh0YXNrX3Nlc3Npb24odHNrKSwgbnMpOwotfQotRVhQT1JUX1NZTUJPTCh0YXNrX3Nlc3Npb25fbnJfbnMpOwotCiBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqdGFza19hY3RpdmVfcGlkX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXJldHVybiBuc19vZl9waWQodGFza19waWQodHNrKSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkX25hbWVzcGFjZS5jIGIva2VybmVsL3BpZF9uYW1lc3BhY2UuYwppbmRleCBmYWI4ZWE4Li4yZDEwMDFiIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCisrKyBiL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKQEAgLTE1Miw2ICsxNTIsNyBAQAogewogCWludCBucjsKIAlpbnQgcmM7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCiAJLyoKIAkgKiBUaGUgbGFzdCB0aHJlYWQgaW4gdGhlIGNncm91cC1pbml0IHRocmVhZCBncm91cCBpcyB0ZXJtaW5hdGluZy4KQEAgLTE2OSw3ICsxNzAsMTkgQEAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCW5yID0gbmV4dF9waWRtYXAocGlkX25zLCAxKTsKIAl3aGlsZSAobnIgPiAwKSB7Ci0JCWtpbGxfcHJvY19pbmZvKFNJR0tJTEwsIFNFTkRfU0lHX1BSSVYsIG5yKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCisJCS8qCisJCSAqIFVzZSBmb3JjZV9zaWcoKSBzaW5jZSBpdCBjbGVhcnMgU0lHTkFMX1VOS0lMTEFCTEUgZW5zdXJpbmcKKwkJICogYW55IG5lc3RlZC1jb250YWluZXIncyBpbml0IHByb2Nlc3NlcyBkb24ndCBpZ25vcmUgdGhlCisJCSAqIHNpZ25hbAorCQkgKi8KKwkJdGFzayA9IHBpZF90YXNrKGZpbmRfdnBpZChuciksIFBJRFRZUEVfUElEKTsKKwkJaWYgKHRhc2spCisJCQlmb3JjZV9zaWcoU0lHS0lMTCwgdGFzayk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAkJbnIgPSBuZXh0X3BpZG1hcChwaWRfbnMsIG5yKTsKIAl9CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggOWQxYzFhMC4uNWYyMWFiMiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtMjE0LDcgKzIxNSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWRldmljZV9wbV9sb2NrKCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCS8qIEF0IHRoaXMgcG9pbnQsIGRldmljZV9zdXNwZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBidXQgKm5vdCoKIAkgKiBkZXZpY2VfcG93ZXJfZG93bigpLiBXZSAqbXVzdCogY2FsbCBkZXZpY2VfcG93ZXJfZG93bigpIG5vdy4KIAkgKiBPdGhlcndpc2UsIGRyaXZlcnMgZm9yIHNvbWUgZGV2aWNlcyAoZS5nLiBpbnRlcnJ1cHQgY29udHJvbGxlcnMpCkBAIC0yMjUsMTMgKzIyNiwyNSBAQAogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd24sICIKIAkJCSJhYm9ydGluZyBoaWJlcm5hdGlvblxuIik7Ci0JCWdvdG8gRW5hYmxlX2lycXM7CisJCWdvdG8gVW5sb2NrOwogCX0KKworCWVycm9yID0gcGxhdGZvcm1fcHJlX3NuYXBzaG90KHBsYXRmb3JtX21vZGUpOworCWlmIChlcnJvciB8fCBoaWJlcm5hdGlvbl90ZXN0KFRFU1RfUExBVEZPUk0pKQorCQlnb3RvIFBsYXRmb3JtX2ZpbmlzaDsKKworCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKKwlpZiAoZXJyb3IgfHwgaGliZXJuYXRpb25fdGVzdChURVNUX0NQVVMpCisJICAgIHx8IGhpYmVybmF0aW9uX3Rlc3Rtb2RlKEhJQkVSTkFUSU9OX1RFU1QpKQorCQlnb3RvIEVuYWJsZV9jcHVzOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCAiCiAJCQkiYWJvcnRpbmcgaGliZXJuYXRpb25cbiIpOwotCQlnb3RvIFBvd2VyX3VwX2RldmljZXM7CisJCWdvdG8gRW5hYmxlX2lycXM7CiAJfQogCiAJaWYgKGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9DT1JFKSkKQEAgLTI0NywxNyArMjYwLDI4IEBACiAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAlpZiAoIWluX3N1c3BlbmQpCiAJCXBsYXRmb3JtX2xlYXZlKHBsYXRmb3JtX21vZGUpOworCiAgUG93ZXJfdXA6CiAJc3lzZGV2X3Jlc3VtZSgpOwogCS8qIE5PVEU6ICBkZXZpY2VfcG93ZXJfdXAoKSBpcyBqdXN0IGEgcmVzdW1lKCkgZm9yIGRldmljZXMKIAkgKiB0aGF0IHN1c3BlbmRlZCB3aXRoIGlycXMgb2ZmIC4uLiBubyBvdmVyYWxsIHBvd2VydXAuCiAJICovCi0gUG93ZXJfdXBfZGV2aWNlczoKLQlkZXZpY2VfcG93ZXJfdXAoaW5fc3VzcGVuZCA/Ci0JCShlcnJvciA/IFBNU0dfUkVDT1ZFUiA6IFBNU0dfVEhBVykgOiBQTVNHX1JFU1RPUkUpOworCiAgRW5hYmxlX2lycXM6CiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCisgRW5hYmxlX2NwdXM6CisJZW5hYmxlX25vbmJvb3RfY3B1cygpOworCisgUGxhdGZvcm1fZmluaXNoOgorCXBsYXRmb3JtX2ZpbmlzaChwbGF0Zm9ybV9tb2RlKTsKKworCWRldmljZV9wb3dlcl91cChpbl9zdXNwZW5kID8KKwkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CisKKyBVbmxvY2s6CiAJZGV2aWNlX3BtX3VubG9jaygpOworCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yOTEsMjUgKzMxNSw5IEBACiAJaWYgKGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9ERVZJQ0VTKSkKIAkJZ290byBSZWNvdmVyX3BsYXRmb3JtOwogCi0JZXJyb3IgPSBwbGF0Zm9ybV9wcmVfc25hcHNob3QocGxhdGZvcm1fbW9kZSk7Ci0JaWYgKGVycm9yIHx8IGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9QTEFURk9STSkpCi0JCWdvdG8gRmluaXNoOworCWVycm9yID0gY3JlYXRlX2ltYWdlKHBsYXRmb3JtX21vZGUpOworCS8qIENvbnRyb2wgcmV0dXJucyBoZXJlIGFmdGVyIHN1Y2Nlc3NmdWwgcmVzdG9yZSAqLwogCi0JZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCWlmICghZXJyb3IpIHsKLQkJaWYgKGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9DUFVTKSkKLQkJCWdvdG8gRW5hYmxlX2NwdXM7Ci0KLQkJaWYgKGhpYmVybmF0aW9uX3Rlc3Rtb2RlKEhJQkVSTkFUSU9OX1RFU1QpKQotCQkJZ290byBFbmFibGVfY3B1czsKLQotCQllcnJvciA9IGNyZWF0ZV9pbWFnZShwbGF0Zm9ybV9tb2RlKTsKLQkJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCi0JfQotIEVuYWJsZV9jcHVzOgotCWVuYWJsZV9ub25ib290X2NwdXMoKTsKLSBGaW5pc2g6Ci0JcGxhdGZvcm1fZmluaXNoKHBsYXRmb3JtX21vZGUpOwogIFJlc3VtZV9kZXZpY2VzOgogCWRldmljZV9yZXN1bWUoaW5fc3VzcGVuZCA/CiAJCShlcnJvciA/IFBNU0dfUkVDT1ZFUiA6IFBNU0dfVEhBVykgOiBQTVNHX1JFU1RPUkUpOwpAQCAtMzMxLDE5ICszMzksMzMgQEAKICAqCWtlcm5lbC4KICAqLwogCi1zdGF0aWMgaW50IHJlc3VtZV90YXJnZXRfa2VybmVsKHZvaWQpCitzdGF0aWMgaW50IHJlc3VtZV90YXJnZXRfa2VybmVsKGJvb2wgcGxhdGZvcm1fbW9kZSkKIHsKIAlpbnQgZXJyb3I7CiAKIAlkZXZpY2VfcG1fbG9jaygpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKIAllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfUVVJRVNDRSk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUE06IFNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgIgogCQkJImFib3J0aW5nIHJlc3VtZVxuIik7Ci0JCWdvdG8gRW5hYmxlX2lycXM7CisJCWdvdG8gVW5sb2NrOwogCX0KLQlzeXNkZXZfc3VzcGVuZChQTVNHX1FVSUVTQ0UpOworCisJZXJyb3IgPSBwbGF0Zm9ybV9wcmVfcmVzdG9yZShwbGF0Zm9ybV9tb2RlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gQ2xlYW51cDsKKworCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRW5hYmxlX2NwdXM7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1FVSUVTQ0UpOworCWlmIChlcnJvcikKKwkJZ290byBFbmFibGVfaXJxczsKKwogCS8qIFdlJ2xsIGlnbm9yZSBzYXZlZCBzdGF0ZSwgYnV0IHRoaXMgZ2V0cyBwcmVlbXB0IGNvdW50IChldGMpIHJpZ2h0ICovCiAJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAllcnJvciA9IHJlc3RvcmVfaGlnaG1lbSgpOwpAQCAtMzY2LDExICszODgsMjMgQEAKIAlzd3N1c3BfZnJlZSgpOwogCXJlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCk7CiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOworCiAJc3lzZGV2X3Jlc3VtZSgpOwotCWRldmljZV9wb3dlcl91cChQTVNHX1JFQ09WRVIpOworCiAgRW5hYmxlX2lycXM6CiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCisgRW5hYmxlX2NwdXM6CisJZW5hYmxlX25vbmJvb3RfY3B1cygpOworCisgQ2xlYW51cDoKKwlwbGF0Zm9ybV9yZXN0b3JlX2NsZWFudXAocGxhdGZvcm1fbW9kZSk7CisKKwlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRUNPVkVSKTsKKworIFVubG9jazoKIAlkZXZpY2VfcG1fdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTM5MCwxOSArNDI0LDEwIEBACiAJcG1fcHJlcGFyZV9jb25zb2xlKCk7CiAJc3VzcGVuZF9jb25zb2xlKCk7CiAJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX1FVSUVTQ0UpOwotCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7Ci0KLQllcnJvciA9IHBsYXRmb3JtX3ByZV9yZXN0b3JlKHBsYXRmb3JtX21vZGUpOwogCWlmICghZXJyb3IpIHsKLQkJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSByZXN1bWVfdGFyZ2V0X2tlcm5lbCgpOwotCQllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisJCWVycm9yID0gcmVzdW1lX3RhcmdldF9rZXJuZWwocGxhdGZvcm1fbW9kZSk7CisJCWRldmljZV9yZXN1bWUoUE1TR19SRUNPVkVSKTsKIAl9Ci0JcGxhdGZvcm1fcmVzdG9yZV9jbGVhbnVwKHBsYXRmb3JtX21vZGUpOwotCWRldmljZV9yZXN1bWUoUE1TR19SRUNPVkVSKTsKLSBGaW5pc2g6CiAJcmVzdW1lX2NvbnNvbGUoKTsKIAlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00MzgsMzggKzQ2Myw0NiBAQAogCQlnb3RvIFJlc3VtZV9kZXZpY2VzOwogCX0KIAorCWRldmljZV9wbV9sb2NrKCk7CisKKwllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfSElCRVJOQVRFKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gVW5sb2NrOworCiAJZXJyb3IgPSBoaWJlcm5hdGlvbl9vcHMtPnByZXBhcmUoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gUmVzdW1lX2RldmljZXM7CisJCWdvdG8gUGxhdG9mcm1fZmluaXNoOwogCiAJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gUGxhdG9mcm1fZmluaXNoOwogCi0JZGV2aWNlX3BtX2xvY2soKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19ISUJFUk5BVEUpOwotCWlmICghZXJyb3IpIHsKLQkJc3lzZGV2X3N1c3BlbmQoUE1TR19ISUJFUk5BVEUpOwotCQloaWJlcm5hdGlvbl9vcHMtPmVudGVyKCk7Ci0JCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLwotCQl3aGlsZSAoMSk7Ci0JfQotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlkZXZpY2VfcG1fdW5sb2NrKCk7CisJc3lzZGV2X3N1c3BlbmQoUE1TR19ISUJFUk5BVEUpOworCWhpYmVybmF0aW9uX29wcy0+ZW50ZXIoKTsKKwkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwl3aGlsZSAoMSk7CiAKIAkvKgogCSAqIFdlIGRvbid0IG5lZWQgdG8gcmVlbmFibGUgdGhlIG5vbmJvb3QgQ1BVcyBvciByZXN1bWUgY29uc29sZXMsIHNpbmNlCiAJICogdGhlIHN5c3RlbSBpcyBnb2luZyB0byBiZSBoYWx0ZWQgYW55d2F5LgogCSAqLwotIEZpbmlzaDoKKyBQbGF0b2ZybV9maW5pc2g6CiAJaGliZXJuYXRpb25fb3BzLT5maW5pc2goKTsKKworCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1RPUkUpOworCisgVW5sb2NrOgorCWRldmljZV9wbV91bmxvY2soKTsKKwogIFJlc3VtZV9kZXZpY2VzOgogCWVudGVyaW5nX3BsYXRmb3JtX2hpYmVybmF0aW9uID0gZmFsc2U7CiAJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1RPUkUpOwogCXJlc3VtZV9jb25zb2xlKCk7CisKICBDbG9zZToKIAloaWJlcm5hdGlvbl9vcHMtPmVuZCgpOworCiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvbWFpbi5jIGIva2VybmVsL3Bvd2VyL21haW4uYwppbmRleCBjOTYzMmY4Li5mMTcyZjQxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvbWFpbi5jCisrKyBiL2tlcm5lbC9wb3dlci9tYWluLmMKQEAgLTI4NywxNyArMjg3LDMyIEBACiAgKi8KIHN0YXRpYyBpbnQgc3VzcGVuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7Ci0JaW50IGVycm9yID0gMDsKKwlpbnQgZXJyb3I7CiAKIAlkZXZpY2VfcG1fbG9jaygpOwotCWFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXMoKTsKLQlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQlpZiAoKGVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKSkpIHsKKwllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUE06IFNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93blxuIik7CiAJCWdvdG8gRG9uZTsKIAl9CiAKKwlpZiAoc3VzcGVuZF9vcHMtPnByZXBhcmUpIHsKKwkJZXJyb3IgPSBzdXNwZW5kX29wcy0+cHJlcGFyZSgpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIFBvd2VyX3VwX2RldmljZXM7CisJfQorCisJaWYgKHN1c3BlbmRfdGVzdChURVNUX1BMQVRGT1JNKSkKKwkJZ290byBQbGF0ZnJvbV9maW5pc2g7CisKKwllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7CisJaWYgKGVycm9yIHx8IHN1c3BlbmRfdGVzdChURVNUX0NQVVMpKQorCQlnb3RvIEVuYWJsZV9jcHVzOworCisJYXJjaF9zdXNwZW5kX2Rpc2FibGVfaXJxcygpOworCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKKwogCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKIAlpZiAoIWVycm9yKSB7CiAJCWlmICghc3VzcGVuZF90ZXN0KFRFU1RfQ09SRSkpCkBAIC0zMDUsMTEgKzMyMCwyMiBAQAogCQlzeXNkZXZfcmVzdW1lKCk7CiAJfQogCi0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKLSBEb25lOgogCWFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcygpOwogCUJVR19PTihpcnFzX2Rpc2FibGVkKCkpOworCisgRW5hYmxlX2NwdXM6CisJZW5hYmxlX25vbmJvb3RfY3B1cygpOworCisgUGxhdGZyb21fZmluaXNoOgorCWlmIChzdXNwZW5kX29wcy0+ZmluaXNoKQorCQlzdXNwZW5kX29wcy0+ZmluaXNoKCk7CisKKyBQb3dlcl91cF9kZXZpY2VzOgorCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CisKKyBEb25lOgogCWRldmljZV9wbV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMzQxLDIzICszNjcsOCBAQAogCWlmIChzdXNwZW5kX3Rlc3QoVEVTVF9ERVZJQ0VTKSkKIAkJZ290byBSZWNvdmVyX3BsYXRmb3JtOwogCi0JaWYgKHN1c3BlbmRfb3BzLT5wcmVwYXJlKSB7Ci0JCWVycm9yID0gc3VzcGVuZF9vcHMtPnByZXBhcmUoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBSZXN1bWVfZGV2aWNlczsKLQl9CisJc3VzcGVuZF9lbnRlcihzdGF0ZSk7CiAKLQlpZiAoc3VzcGVuZF90ZXN0KFRFU1RfUExBVEZPUk0pKQotCQlnb3RvIEZpbmlzaDsKLQotCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKLQlpZiAoIWVycm9yICYmICFzdXNwZW5kX3Rlc3QoVEVTVF9DUFVTKSkKLQkJc3VzcGVuZF9lbnRlcihzdGF0ZSk7Ci0KLQllbmFibGVfbm9uYm9vdF9jcHVzKCk7Ci0gRmluaXNoOgotCWlmIChzdXNwZW5kX29wcy0+ZmluaXNoKQotCQlzdXNwZW5kX29wcy0+ZmluaXNoKCk7CiAgUmVzdW1lX2RldmljZXM6CiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1VNRSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IGY1ZmMyZDcuLjMzZTJlNGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0zMjEsMTMgKzMyMSwxMCBAQAogCiAJSU5JVF9MSVNUX0hFQUQobGlzdCk7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXVuc2lnbmVkIGxvbmcgem9uZV9zdGFydCwgem9uZV9lbmQ7CiAJCXN0cnVjdCBtZW1fZXh0ZW50ICpleHQsICpjdXIsICphdXg7CiAKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCiAJCXpvbmVfc3RhcnQgPSB6b25lLT56b25lX3N0YXJ0X3BmbjsKIAkJem9uZV9lbmQgPSB6b25lLT56b25lX3N0YXJ0X3BmbiArIHpvbmUtPnNwYW5uZWRfcGFnZXM7CiAKQEAgLTgwNCw4ICs4MDEsOCBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGludCBjbnQgPSAwOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKQotCQlpZiAocG9wdWxhdGVkX3pvbmUoem9uZSkgJiYgaXNfaGlnaG1lbSh6b25lKSkKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKQorCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkKIAkJCWNudCArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CiAKIAlyZXR1cm4gY250OwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCmluZGV4IGE5MmM5MTQuLjc4YzM1MDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYworKysgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlICJwb3dlci5oIgogCkBAIC0yMjksMTcgKzIzMCwxNiBAQAogCQlzaXplID0gY291bnRfZGF0YV9wYWdlcygpICsgUEFHRVNfRk9SX0lPICsgU1BBUkVfUEFHRVM7CiAJCXRtcCA9IHNpemU7CiAJCXNpemUgKz0gaGlnaG1lbV9zaXplOwotCQlmb3JfZWFjaF96b25lICh6b25lKQotCQkJaWYgKHBvcHVsYXRlZF96b25lKHpvbmUpKSB7Ci0JCQkJdG1wICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7Ci0JCQkJaWYgKGlzX2hpZ2htZW0oem9uZSkpIHsKLQkJCQkJaGlnaG1lbV9zaXplIC09CisJCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKKwkJCXRtcCArPSBzbmFwc2hvdF9hZGRpdGlvbmFsX3BhZ2VzKHpvbmUpOworCQkJaWYgKGlzX2hpZ2htZW0oem9uZSkpIHsKKwkJCQloaWdobWVtX3NpemUgLT0KIAkJCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRtcCAtPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQkJCXRtcCArPSB6b25lLT5sb3dtZW1fcmVzZXJ2ZVtaT05FX05PUk1BTF07Ci0JCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl0bXAgLT0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpOworCQkJCXRtcCArPSB6b25lLT5sb3dtZW1fcmVzZXJ2ZVtaT05FX05PUk1BTF07CiAJCQl9CisJCX0KIAogCQlpZiAoaGlnaG1lbV9zaXplIDwgMCkKIAkJCWhpZ2htZW1fc2l6ZSA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggZTM2MDJkMC4uYTVmNjFhOSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTEzNSw2ICsxMzYsMjQgQEAKIHN0YXRpYyBpbnQgbG9nX2J1Zl9sZW4gPSBfX0xPR19CVUZfTEVOOwogc3RhdGljIHVuc2lnbmVkIGxvZ2dlZF9jaGFyczsgLyogTnVtYmVyIG9mIGNoYXJzIHByb2R1Y2VkIHNpbmNlIGxhc3QgcmVhZCtjbGVhciBvcGVyYXRpb24gKi8KIAorI2lmZGVmIENPTkZJR19LRVhFQworLyoKKyAqIFRoaXMgYXBwZW5kcyB0aGUgbGlzdGVkIHN5bWJvbHMgdG8gL3Byb2Mvdm1jb3JlaW5mbworICoKKyAqIC9wcm9jL3ZtY29yZWluZm8gaXMgdXNlZCBieSB2YXJpb3VzIHV0aWlsdGllcywgbGlrZSBjcmFzaCBhbmQgbWFrZWR1bXBmaWxlIHRvCisgKiBvYnRhaW4gYWNjZXNzIHRvIHN5bWJvbHMgdGhhdCBhcmUgb3RoZXJ3aXNlIHZlcnkgZGlmZmljdWx0IHRvIGxvY2F0ZS4gIFRoZXNlCisgKiBzeW1ib2xzIGFyZSBzcGVjaWZpY2FsbHkgdXNlZCBzbyB0aGF0IHV0aWxpdGllcyBjYW4gYWNjZXNzIGFuZCBleHRyYWN0IHRoZQorICogZG1lc2cgbG9nIGZyb20gYSB2bWNvcmUgZmlsZSBhZnRlciBhIGNyYXNoLgorICovCit2b2lkIGxvZ19idWZfa2V4ZWNfc2V0dXAodm9pZCkKK3sKKwlWTUNPUkVJTkZPX1NZTUJPTChsb2dfYnVmKTsKKwlWTUNPUkVJTkZPX1NZTUJPTChsb2dfZW5kKTsKKwlWTUNPUkVJTkZPX1NZTUJPTChsb2dfYnVmX2xlbik7CisJVk1DT1JFSU5GT19TWU1CT0wobG9nZ2VkX2NoYXJzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBsb2dfYnVmX2xlbl9zZXR1cChjaGFyICpzdHIpCiB7CiAJdW5zaWduZWQgc2l6ZSA9IG1lbXBhcnNlKHN0ciwgJnN0cik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYzljZjQ4Yi4uNTEwNWY1YSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtNjAsMTEgKzYwLDE1IEBACiB7CiAJc3Bpbl9sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHRhc2tfaXNfdHJhY2VkKGNoaWxkKSkgewotCQlpZiAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEKSB7CisJCS8qCisJCSAqIElmIHRoZSBncm91cCBzdG9wIGlzIGNvbXBsZXRlZCBvciBpbiBwcm9ncmVzcywKKwkJICogdGhpcyB0aHJlYWQgd2FzIGFscmVhZHkgY291bnRlZCBhcyBzdG9wcGVkLgorCQkgKi8KKwkJaWYgKGNoaWxkLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX1NUT1BfU1RPUFBFRCB8fAorCQkgICAgY2hpbGQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudCkKIAkJCV9fc2V0X3Rhc2tfc3RhdGUoY2hpbGQsIFRBU0tfU1RPUFBFRCk7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXNpZ25hbF93YWtlX3VwKGNoaWxkLCAxKTsKLQkJfQogCX0KIAlzcGluX3VubG9jaygmY2hpbGQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQpAQCAtMjM1LDE4ICsyMzksNTggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBkYXRhKQorLyoKKyAqIENhbGxlZCB3aXRoIGlycXMgZGlzYWJsZWQsIHJldHVybnMgdHJ1ZSBpZiBjaGlsZHMgc2hvdWxkIHJlYXAgdGhlbXNlbHZlcy4KKyAqLworc3RhdGljIGludCBpZ25vcmluZ19jaGlsZHJlbihzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnNpZ2gpCiB7Ci0JY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JLyogLi4gcmUtcGFyZW50IC4uICovCi0JX19wdHJhY2VfdW5saW5rKGNoaWxkKTsKLQkvKiAuLiBhbmQgd2FrZSBpdCB1cC4gKi8KLQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpCi0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7CisJaW50IHJldDsKKwlzcGluX2xvY2soJnNpZ2gtPnNpZ2xvY2spOworCXJldCA9IChzaWdoLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19JR04pIHx8CisJICAgICAgKHNpZ2gtPmFjdGlvbltTSUdDSExELTFdLnNhLnNhX2ZsYWdzICYgU0FfTk9DTERXQUlUKTsKKwlzcGluX3VubG9jaygmc2lnaC0+c2lnbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGxlZCB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBmb3Igd3JpdGluZy4KKyAqIFVubGluayBhIHRyYWNlZCB0YXNrLCBhbmQgY2xlYW4gaXQgdXAgaWYgaXQgd2FzIGEgdHJhY2VkIHpvbWJpZS4KKyAqIFJldHVybiB0cnVlIGlmIGl0IG5lZWRzIHRvIGJlIHJlYXBlZCB3aXRoIHJlbGVhc2VfdGFzaygpLgorICogKFdlIGNhbid0IGNhbGwgcmVsZWFzZV90YXNrKCkgaGVyZSBiZWNhdXNlIHdlIGFscmVhZHkgaG9sZCB0YXNrbGlzdF9sb2NrLikKKyAqCisgKiBJZiBpdCdzIGEgem9tYmllLCBvdXIgYXR0YWNoZWRuZXNzIHByZXZlbnRlZCBub3JtYWwgcGFyZW50IG5vdGlmaWNhdGlvbgorICogb3Igc2VsZi1yZWFwaW5nLiAgRG8gbm90aWZpY2F0aW9uIG5vdyBpZiBpdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGVhcmxpZXIuCisgKiBJZiBpdCBzaG91bGQgcmVhcCBpdHNlbGYsIHJldHVybiB0cnVlLgorICoKKyAqIElmIGl0J3Mgb3VyIG93biBjaGlsZCwgdGhlcmUgaXMgbm8gbm90aWZpY2F0aW9uIHRvIGRvLgorICogQnV0IGlmIG91ciBub3JtYWwgY2hpbGRyZW4gc2VsZi1yZWFwLCB0aGVuIHRoaXMgY2hpbGQKKyAqIHdhcyBwcmV2ZW50ZWQgYnkgcHRyYWNlIGFuZCB3ZSBtdXN0IHJlYXAgaXQgbm93LgorICovCitzdGF0aWMgYm9vbCBfX3B0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlfX3B0cmFjZV91bmxpbmsocCk7CisKKwlpZiAocC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkgeworCQlpZiAoIXRhc2tfZGV0YWNoZWQocCkgJiYgdGhyZWFkX2dyb3VwX2VtcHR5KHApKSB7CisJCQlpZiAoIXNhbWVfdGhyZWFkX2dyb3VwKHAtPnJlYWxfcGFyZW50LCB0cmFjZXIpKQorCQkJCWRvX25vdGlmeV9wYXJlbnQocCwgcC0+ZXhpdF9zaWduYWwpOworCQkJZWxzZSBpZiAoaWdub3JpbmdfY2hpbGRyZW4odHJhY2VyLT5zaWdoYW5kKSkKKwkJCQlwLT5leGl0X3NpZ25hbCA9IC0xOworCQl9CisJCWlmICh0YXNrX2RldGFjaGVkKHApKSB7CisJCQkvKiBNYXJrIGl0IGFzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHJlYXBlZC4gKi8KKwkJCXAtPmV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAogaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCiB7CisJYm9vbCBkZWFkID0gZmFsc2U7CisKIAlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTI1NSwxNCArMjk5LDQ1IEBACiAJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7CiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7Ci0JLyogcHJvdGVjdCBhZ2FpbnN0IGRlX3RocmVhZCgpLT5yZWxlYXNlX3Rhc2soKSAqLwotCWlmIChjaGlsZC0+cHRyYWNlKQotCQlfX3B0cmFjZV9kZXRhY2goY2hpbGQsIGRhdGEpOworCS8qCisJICogVGhpcyBjaGlsZCBjYW4gYmUgYWxyZWFkeSBraWxsZWQuIE1ha2Ugc3VyZSBkZV90aHJlYWQoKSBvcgorCSAqIG91ciBzdWItdGhyZWFkIGRvaW5nIGRvX3dhaXQoKSBkaWRuJ3QgZG8gcmVsZWFzZV90YXNrKCkgeWV0LgorCSAqLworCWlmIChjaGlsZC0+cHRyYWNlKSB7CisJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOworCQlkZWFkID0gX19wdHJhY2VfZGV0YWNoKGN1cnJlbnQsIGNoaWxkKTsKKwl9CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKKwlpZiAodW5saWtlbHkoZGVhZCkpCisJCXJlbGVhc2VfdGFzayhjaGlsZCk7CisKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIERldGFjaCBhbGwgdGFza3Mgd2Ugd2VyZSB1c2luZyBwdHJhY2Ugb24uCisgKi8KK3ZvaWQgZXhpdF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXIpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKKwlMSVNUX0hFQUQocHRyYWNlX2RlYWQpOworCisJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmdHJhY2VyLT5wdHJhY2VkLCBwdHJhY2VfZW50cnkpIHsKKwkJaWYgKF9fcHRyYWNlX2RldGFjaCh0cmFjZXIsIHApKQorCQkJbGlzdF9hZGQoJnAtPnB0cmFjZV9lbnRyeSwgJnB0cmFjZV9kZWFkKTsKKwl9CisJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYWNlci0+cHRyYWNlZCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwdHJhY2VfZGVhZCwgcHRyYWNlX2VudHJ5KSB7CisJCWxpc3RfZGVsX2luaXQoJnAtPnB0cmFjZV9lbnRyeSk7CisJCXJlbGVhc2VfdGFzayhwKTsKKwl9Cit9CisKIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuKQogewogCWludCBjb3BpZWQgPSAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggN2M0MTQyYS4uOWI0YTk3NSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC0xMjYsNiArMTI2LDcgQEAKIHN0YXRpYyBhdG9taWNfdCBuX3JjdV90b3J0dXJlX2Vycm9yOwogc3RhdGljIGxvbmcgbl9yY3VfdG9ydHVyZV90aW1lcnMgPSAwOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgcmN1X3RvcnR1cmVfcmVtb3ZlZDsKK3N0YXRpYyBjcHVtYXNrX3Zhcl90IHNodWZmbGVfdG1wX21hc2s7CiAKIHN0YXRpYyBpbnQgc3R1dHRlcl9wYXVzZV90ZXN0ID0gMDsKIApAQCAtODg5LDEwICs4OTAsOSBAQAogICovCiBzdGF0aWMgdm9pZCByY3VfdG9ydHVyZV9zaHVmZmxlX3Rhc2tzKHZvaWQpCiB7Ci0JY3B1bWFza190IHRtcF9tYXNrOwogCWludCBpOwogCi0JY3B1c19zZXRhbGwodG1wX21hc2spOworCWNwdW1hc2tfc2V0YWxsKHNodWZmbGVfdG1wX21hc2spOwogCWdldF9vbmxpbmVfY3B1cygpOwogCiAJLyogTm8gcG9pbnQgaW4gc2h1ZmZsaW5nIGlmIHRoZXJlIGlzIG9ubHkgb25lIG9ubGluZSBDUFUgKGV4OiBVUCkgKi8KQEAgLTkwMiwyOSArOTAyLDI5IEBACiAJfQogCiAJaWYgKHJjdV9pZGxlX2NwdSAhPSAtMSkKLQkJY3B1X2NsZWFyKHJjdV9pZGxlX2NwdSwgdG1wX21hc2spOworCQljcHVtYXNrX2NsZWFyX2NwdShyY3VfaWRsZV9jcHUsIHNodWZmbGVfdG1wX21hc2spOwogCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJnRtcF9tYXNrKTsKKwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBzaHVmZmxlX3RtcF9tYXNrKTsKIAogCWlmIChyZWFkZXJfdGFza3MpIHsKIAkJZm9yIChpID0gMDsgaSA8IG5yZWFscmVhZGVyczsgaSsrKQogCQkJaWYgKHJlYWRlcl90YXNrc1tpXSkKIAkJCQlzZXRfY3B1c19hbGxvd2VkX3B0cihyZWFkZXJfdGFza3NbaV0sCi0JCQkJCQkgICAgICZ0bXBfbWFzayk7CisJCQkJCQkgICAgIHNodWZmbGVfdG1wX21hc2spOwogCX0KIAogCWlmIChmYWtld3JpdGVyX3Rhc2tzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBuZmFrZXdyaXRlcnM7IGkrKykKIAkJCWlmIChmYWtld3JpdGVyX3Rhc2tzW2ldKQogCQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGZha2V3cml0ZXJfdGFza3NbaV0sCi0JCQkJCQkgICAgICZ0bXBfbWFzayk7CisJCQkJCQkgICAgIHNodWZmbGVfdG1wX21hc2spOwogCX0KIAogCWlmICh3cml0ZXJfdGFzaykKLQkJc2V0X2NwdXNfYWxsb3dlZF9wdHIod3JpdGVyX3Rhc2ssICZ0bXBfbWFzayk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHdyaXRlcl90YXNrLCBzaHVmZmxlX3RtcF9tYXNrKTsKIAogCWlmIChzdGF0c190YXNrKQotCQlzZXRfY3B1c19hbGxvd2VkX3B0cihzdGF0c190YXNrLCAmdG1wX21hc2spOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihzdGF0c190YXNrLCBzaHVmZmxlX3RtcF9tYXNrKTsKIAogCWlmIChyY3VfaWRsZV9jcHUgPT0gLTEpCiAJCXJjdV9pZGxlX2NwdSA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKQEAgLTEwMTIsNiArMTAxMiw3IEBACiAJaWYgKHNodWZmbGVyX3Rhc2spIHsKIAkJVkVSQk9TRV9QUklOVEtfU1RSSU5HKCJTdG9wcGluZyByY3VfdG9ydHVyZV9zaHVmZmxlIHRhc2siKTsKIAkJa3RocmVhZF9zdG9wKHNodWZmbGVyX3Rhc2spOworCQlmcmVlX2NwdW1hc2tfdmFyKHNodWZmbGVfdG1wX21hc2spOwogCX0KIAlzaHVmZmxlcl90YXNrID0gTlVMTDsKIApAQCAtMTE5MCwxMCArMTE5MSwxOCBAQAogCX0KIAlpZiAodGVzdF9ub19pZGxlX2h6KSB7CiAJCXJjdV9pZGxlX2NwdSA9IG51bV9vbmxpbmVfY3B1cygpIC0gMTsKKworCQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZzaHVmZmxlX3RtcF9tYXNrLCBHRlBfS0VSTkVMKSkgeworCQkJZmlyc3RlcnIgPSAtRU5PTUVNOworCQkJVkVSQk9TRV9QUklOVEtfRVJSU1RSSU5HKCJGYWlsZWQgdG8gYWxsb2MgbWFzayIpOworCQkJZ290byB1bndpbmQ7CisJCX0KKwogCQkvKiBDcmVhdGUgdGhlIHNodWZmbGVyIHRocmVhZCAqLwogCQlzaHVmZmxlcl90YXNrID0ga3RocmVhZF9ydW4ocmN1X3RvcnR1cmVfc2h1ZmZsZSwgTlVMTCwKIAkJCQkJICAicmN1X3RvcnR1cmVfc2h1ZmZsZSIpOwogCQlpZiAoSVNfRVJSKHNodWZmbGVyX3Rhc2spKSB7CisJCQlmcmVlX2NwdW1hc2tfdmFyKHNodWZmbGVfdG1wX21hc2spOwogCQkJZmlyc3RlcnIgPSBQVFJfRVJSKHNodWZmbGVyX3Rhc2spOwogCQkJVkVSQk9TRV9QUklOVEtfRVJSU1RSSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHNodWZmbGVyIik7CiAJCQlzaHVmZmxlcl90YXNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggOGYyMTc5Yy4uZTkyZGI4YyAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTc5NywxMyArNzk3LDE1IEBACiAJaWYgKCFjaGFuKQogCQlyZXR1cm47CiAKLQlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNoYW4tPmJ1ZltjcHVdKQorCWlmIChjcHUgPj0gTlJfQ1BVUyB8fCAhY2hhbi0+YnVmW2NwdV0gfHwKKwkJCQkJc3ViYnVmc19jb25zdW1lZCA+IGNoYW4tPm5fc3ViYnVmcykKIAkJcmV0dXJuOwogCiAJYnVmID0gY2hhbi0+YnVmW2NwdV07Ci0JYnVmLT5zdWJidWZzX2NvbnN1bWVkICs9IHN1YmJ1ZnNfY29uc3VtZWQ7Ci0JaWYgKGJ1Zi0+c3ViYnVmc19jb25zdW1lZCA+IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCkKKwlpZiAoc3ViYnVmc19jb25zdW1lZCA+IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZCAtIGJ1Zi0+c3ViYnVmc19jb25zdW1lZCkKIAkJYnVmLT5zdWJidWZzX2NvbnN1bWVkID0gYnVmLT5zdWJidWZzX3Byb2R1Y2VkOworCWVsc2UKKwkJYnVmLT5zdWJidWZzX2NvbnN1bWVkICs9IHN1YmJ1ZnNfY29uc3VtZWQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyZWxheV9zdWJidWZzX2NvbnN1bWVkKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA1NzU3ZTAzLi43MzUxM2Y0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNDk0MiwxNSArNDk0MiwxMyBAQAogLyoKICAqIHNjaGVkdWxlKCkgaXMgdGhlIG1haW4gc2NoZWR1bGVyIGZ1bmN0aW9uLgogICovCi1hc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQorYXNtbGlua2FnZSB2b2lkIF9fc2NoZWQgX19zY2hlZHVsZSh2b2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgKm5leHQ7CiAJdW5zaWduZWQgbG9uZyAqc3dpdGNoX2NvdW50OwogCXN0cnVjdCBycSAqcnE7CiAJaW50IGNwdTsKIAotbmVlZF9yZXNjaGVkOgotCXByZWVtcHRfZGlzYWJsZSgpOwogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlycSA9IGNwdV9ycShjcHUpOwogCXJjdV9xc2N0cl9pbmMoY3B1KTsKQEAgLTUwMDcsMTMgKzUwMDUsODAgQEAKIAogCWlmICh1bmxpa2VseShyZWFjcXVpcmVfa2VybmVsX2xvY2soY3VycmVudCkgPCAwKSkKIAkJZ290byBuZWVkX3Jlc2NoZWRfbm9ucHJlZW1wdGlibGU7Cit9CiAKK2FzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkIHNjaGVkdWxlKHZvaWQpCit7CituZWVkX3Jlc2NoZWQ6CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJX19zY2hlZHVsZSgpOwogCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAlpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZSk7CiAKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogTG9vayBvdXQhICJvd25lciIgaXMgYW4gZW50aXJlbHkgc3BlY3VsYXRpdmUgcG9pbnRlcgorICogYWNjZXNzIGFuZCBub3QgcmVsaWFibGUuCisgKi8KK2ludCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpvd25lcikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBycSAqcnE7CisKKwlpZiAoIXNjaGVkX2ZlYXQoT1dORVJfU1BJTikpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qCisJICogTmVlZCB0byBhY2Nlc3MgdGhlIGNwdSBmaWVsZCBrbm93aW5nIHRoYXQKKwkgKiBERUJVR19QQUdFQUxMT0MgY291bGQgaGF2ZSB1bm1hcHBlZCBpdCBpZgorCSAqIHRoZSBtdXRleCBvd25lciBqdXN0IHJlbGVhc2VkIGl0IGFuZCBleGl0ZWQuCisJICovCisJaWYgKHByb2JlX2tlcm5lbF9hZGRyZXNzKCZvd25lci0+Y3B1LCBjcHUpKQorCQlnb3RvIG91dDsKKyNlbHNlCisJY3B1ID0gb3duZXItPmNwdTsKKyNlbmRpZgorCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBhY2Nlc3Mgc3VjY2VlZGVkIChsaWtlbHkgY2FzZSksCisJICogdGhlIGNwdSBmaWVsZCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorCSAqLworCWlmIChjcHUgPj0gbnJfY3B1bWFza19iaXRzKQorCQlnb3RvIG91dDsKKworCS8qCisJICogV2UgbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHdlIGNhbiBkbyBhCisJICogZ2V0X2NwdSgpIGFuZCB0aGF0IHdlIGhhdmUgdGhlIHBlcmNwdSBhcmVhLgorCSAqLworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlnb3RvIG91dDsKKworCXJxID0gY3B1X3JxKGNwdSk7CisKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIE93bmVyIGNoYW5nZWQsIGJyZWFrIHRvIHJlLWFzc2VzcyBzdGF0ZS4KKwkJICovCisJCWlmIChsb2NrLT5vd25lciAhPSBvd25lcikKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElzIHRoYXQgb3duZXIgcmVhbGx5IHJ1bm5pbmcgb24gdGhhdCBjcHU/CisJCSAqLworCQlpZiAodGFza190aHJlYWRfaW5mbyhycS0+Y3VycikgIT0gb3duZXIgfHwgbmVlZF9yZXNjaGVkKCkpCisJCQlyZXR1cm4gMDsKKworCQljcHVfcmVsYXgoKTsKKwl9CitvdXQ6CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAvKgogICogdGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gc2NoZWR1bGUoKSBmcm9tIGluLWtlcm5lbCBwcmVlbXB0aW9uCkBAIC01MTMxLDExICs1MTk2LDE3IEBACiAJX193YWtlX3VwX2NvbW1vbihxLCBtb2RlLCAxLCAwLCBOVUxMKTsKIH0KIAordm9pZCBfX3dha2VfdXBfbG9ja2VkX2tleSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIHZvaWQgKmtleSkKK3sKKwlfX3dha2VfdXBfY29tbW9uKHEsIG1vZGUsIDEsIDAsIGtleSk7Cit9CisKIC8qKgotICogX193YWtlX3VwX3N5bmMgLSB3YWtlIHVwIHRocmVhZHMgYmxvY2tlZCBvbiBhIHdhaXRxdWV1ZS4KKyAqIF9fd2FrZV91cF9zeW5jX2tleSAtIHdha2UgdXAgdGhyZWFkcyBibG9ja2VkIG9uIGEgd2FpdHF1ZXVlLgogICogQHE6IHRoZSB3YWl0cXVldWUKICAqIEBtb2RlOiB3aGljaCB0aHJlYWRzCiAgKiBAbnJfZXhjbHVzaXZlOiBob3cgbWFueSB3YWtlLW9uZSBvciB3YWtlLW1hbnkgdGhyZWFkcyB0byB3YWtlIHVwCisgKiBAa2V5OiBvcGFxdWUgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIHdha2V1cCB0YXJnZXRzCiAgKgogICogVGhlIHN5bmMgd2FrZXVwIGRpZmZlcnMgdGhhdCB0aGUgd2FrZXIga25vd3MgdGhhdCBpdCB3aWxsIHNjaGVkdWxlCiAgKiBhd2F5IHNvb24sIHNvIHdoaWxlIHRoZSB0YXJnZXQgdGhyZWFkIHdpbGwgYmUgd29rZW4gdXAsIGl0IHdpbGwgbm90CkBAIC01MTQ0LDggKzUyMTUsOCBAQAogICoKICAqIE9uIFVQIGl0IGNhbiBwcmV2ZW50IGV4dHJhIHByZWVtcHRpb24uCiAgKi8KLXZvaWQKLV9fd2FrZV91cF9zeW5jKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yX2V4Y2x1c2l2ZSkKK3ZvaWQgX193YWtlX3VwX3N5bmNfa2V5KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCWludCBucl9leGNsdXNpdmUsIHZvaWQgKmtleSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzeW5jID0gMTsKQEAgLTUxNTcsOSArNTIyOCwxOCBAQAogCQlzeW5jID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0JX193YWtlX3VwX2NvbW1vbihxLCBtb2RlLCBucl9leGNsdXNpdmUsIHN5bmMsIE5VTEwpOworCV9fd2FrZV91cF9jb21tb24ocSwgbW9kZSwgbnJfZXhjbHVzaXZlLCBzeW5jLCBrZXkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fd2FrZV91cF9zeW5jX2tleSk7CisKKy8qCisgKiBfX3dha2VfdXBfc3luYyAtIHNlZSBfX3dha2VfdXBfc3luY19rZXkoKQorICovCit2b2lkIF9fd2FrZV91cF9zeW5jKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yX2V4Y2x1c2l2ZSkKK3sKKwlfX3dha2VfdXBfc3luY19rZXkocSwgbW9kZSwgbnJfZXhjbHVzaXZlLCBOVUxMKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKF9fd2FrZV91cF9zeW5jKTsJLyogRm9yIGludGVybmFsIHVzZSBvbmx5ICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2NwdXByaS5oIGIva2VybmVsL3NjaGVkX2NwdXByaS5oCmluZGV4IDY0MmE5NGUuLjlhN2U4NTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuaAorKysgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIGludCAgY3B1cHJpX2ZpbmQoc3RydWN0IGNwdXByaSAqY3AsCi0JCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdW1hc2tfdCAqbG93ZXN0X21hc2spOworCQkgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY3B1bWFzayAqbG93ZXN0X21hc2spOwogdm9pZCBjcHVwcmlfc2V0KHN0cnVjdCBjcHVwcmkgKmNwLCBpbnQgY3B1LCBpbnQgcHJpKTsKIGludCBjcHVwcmlfaW5pdChzdHJ1Y3QgY3B1cHJpICpjcCwgYm9vbCBib290bWVtKTsKIHZvaWQgY3B1cHJpX2NsZWFudXAoc3RydWN0IGNwdXByaSAqY3ApOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAppbmRleCA3NmY2MTc1Li40NTY5YmZhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAorKysgYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApAQCAtMTQsMyArMTQsNCBAQAogU0NIRURfRkVBVChBU1lNX0VGRl9MT0FELCAxKQogU0NIRURfRkVBVChXQUtFVVBfT1ZFUkxBUCwgMCkKIFNDSEVEX0ZFQVQoTEFTVF9CVUREWSwgMSkKK1NDSEVEX0ZFQVQoT1dORVJfU1BJTiwgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAxYzg4MTQ0Li5kODAzNDczIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC01NSwxMCArNTUsMjIgQEAKIAkJKGhhbmRsZXIgPT0gU0lHX0RGTCAmJiBzaWdfa2VybmVsX2lnbm9yZShzaWcpKTsKIH0KIAotc3RhdGljIGludCBzaWdfaWdub3JlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBzaWcpCitzdGF0aWMgaW50IHNpZ190YXNrX2lnbm9yZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgc2lnLAorCQlpbnQgZnJvbV9hbmNlc3Rvcl9ucykKIHsKIAl2b2lkIF9fdXNlciAqaGFuZGxlcjsKIAorCWhhbmRsZXIgPSBzaWdfaGFuZGxlcih0LCBzaWcpOworCisJaWYgKHVubGlrZWx5KHQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfVU5LSUxMQUJMRSkgJiYKKwkJCWhhbmRsZXIgPT0gU0lHX0RGTCAmJiAhZnJvbV9hbmNlc3Rvcl9ucykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gc2lnX2hhbmRsZXJfaWdub3JlZChoYW5kbGVyLCBzaWcpOworfQorCitzdGF0aWMgaW50IHNpZ19pZ25vcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IHNpZywgaW50IGZyb21fYW5jZXN0b3JfbnMpCit7CiAJLyoKIAkgKiBCbG9ja2VkIHNpZ25hbHMgYXJlIG5ldmVyIGlnbm9yZWQsIHNpbmNlIHRoZQogCSAqIHNpZ25hbCBoYW5kbGVyIG1heSBjaGFuZ2UgYnkgdGhlIHRpbWUgaXQgaXMKQEAgLTY3LDE0ICs3OSwxMyBAQAogCWlmIChzaWdpc21lbWJlcigmdC0+YmxvY2tlZCwgc2lnKSB8fCBzaWdpc21lbWJlcigmdC0+cmVhbF9ibG9ja2VkLCBzaWcpKQogCQlyZXR1cm4gMDsKIAotCWhhbmRsZXIgPSBzaWdfaGFuZGxlcih0LCBzaWcpOwotCWlmICghc2lnX2hhbmRsZXJfaWdub3JlZChoYW5kbGVyLCBzaWcpKQorCWlmICghc2lnX3Rhc2tfaWdub3JlZCh0LCBzaWcsIGZyb21fYW5jZXN0b3JfbnMpKQogCQlyZXR1cm4gMDsKIAogCS8qCiAJICogVHJhY2VycyBtYXkgd2FudCB0byBrbm93IGFib3V0IGV2ZW4gaWdub3JlZCBzaWduYWxzLgogCSAqLwotCXJldHVybiAhdHJhY2Vob29rX2NvbnNpZGVyX2lnbm9yZWRfc2lnbmFsKHQsIHNpZywgaGFuZGxlcik7CisJcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwodCwgc2lnKTsKIH0KIAogLyoKQEAgLTMxOCw3ICszMjksNyBAQAogCQlyZXR1cm4gMTsKIAlpZiAoaGFuZGxlciAhPSBTSUdfSUdOICYmIGhhbmRsZXIgIT0gU0lHX0RGTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHRzaywgc2lnLCBoYW5kbGVyKTsKKwlyZXR1cm4gIXRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwodHNrLCBzaWcpOwogfQogCiAKQEAgLTYyNCw3ICs2MzUsNyBAQAogICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaWduYWwgc2hvdWxkIGJlIGFjdHVhbGx5IGRlbGl2ZXJlZCwgb3RoZXJ3aXNlCiAgKiBpdCBzaG91bGQgYmUgZHJvcHBlZC4KICAqLwotc3RhdGljIGludCBwcmVwYXJlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgaW50IHByZXBhcmVfc2lnbmFsKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZyb21fYW5jZXN0b3JfbnMpCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZ25hbCA9IHAtPnNpZ25hbDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CkBAIC03MDgsNyArNzE5LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAhc2lnX2lnbm9yZWQocCwgc2lnKTsKKwlyZXR1cm4gIXNpZ19pZ25vcmVkKHAsIHNpZywgZnJvbV9hbmNlc3Rvcl9ucyk7CiB9CiAKIC8qCkBAIC03NzcsNyArNzg4LDcgQEAKIAkgICAgIShzaWduYWwtPmZsYWdzICYgKFNJR05BTF9VTktJTExBQkxFIHwgU0lHTkFMX0dST1VQX0VYSVQpKSAmJgogCSAgICAhc2lnaXNtZW1iZXIoJnQtPnJlYWxfYmxvY2tlZCwgc2lnKSAmJgogCSAgICAoc2lnID09IFNJR0tJTEwgfHwKLQkgICAgICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHQsIHNpZywgU0lHX0RGTCkpKSB7CisJICAgICAhdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbCh0LCBzaWcpKSkgewogCQkvKgogCQkgKiBUaGlzIHNpZ25hbCB3aWxsIGJlIGZhdGFsIHRvIHRoZSB3aG9sZSBncm91cC4KIAkJICovCkBAIC04MTMsOCArODI0LDggQEAKIAlyZXR1cm4gKHNpZyA8IFNJR1JUTUlOKSAmJiBzaWdpc21lbWJlcigmc2lnbmFscy0+c2lnbmFsLCBzaWcpOwogfQogCi1zdGF0aWMgaW50IHNlbmRfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsCi0JCQlpbnQgZ3JvdXApCitzdGF0aWMgaW50IF9fc2VuZF9zaWduYWwoaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCWludCBncm91cCwgaW50IGZyb21fYW5jZXN0b3JfbnMpCiB7CiAJc3RydWN0IHNpZ3BlbmRpbmcgKnBlbmRpbmc7CiAJc3RydWN0IHNpZ3F1ZXVlICpxOwpAQCAtODIyLDcgKzgzMyw4IEBACiAJdHJhY2Vfc2NoZWRfc2lnbmFsX3NlbmQoc2lnLCB0KTsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmdC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQpKQorCisJaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQsIGZyb21fYW5jZXN0b3JfbnMpKQogCQlyZXR1cm4gMDsKIAogCXBlbmRpbmcgPSBncm91cCA/ICZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nIDogJnQtPnBlbmRpbmc7CkBAIC04NzEsNiArODgzLDggQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJY29weV9zaWdpbmZvKCZxLT5pbmZvLCBpbmZvKTsKKwkJCWlmIChmcm9tX2FuY2VzdG9yX25zKQorCQkJCXEtPmluZm8uc2lfcGlkID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIGlmICghaXNfc2lfc3BlY2lhbChpbmZvKSkgewpAQCAtODg5LDYgKzkwMywyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNlbmRfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsCisJCQlpbnQgZ3JvdXApCit7CisJaW50IGZyb21fYW5jZXN0b3JfbnMgPSAwOworCisjaWZkZWYgQ09ORklHX1BJRF9OUworCWlmICghaXNfc2lfc3BlY2lhbChpbmZvKSAmJiBTSV9GUk9NVVNFUihpbmZvKSAmJgorCQkJdGFza19waWRfbnJfbnMoY3VycmVudCwgdGFza19hY3RpdmVfcGlkX25zKHQpKSA8PSAwKQorCQlmcm9tX2FuY2VzdG9yX25zID0gMTsKKyNlbmRpZgorCisJcmV0dXJuIF9fc2VuZF9zaWduYWwoc2lnLCBpbmZvLCB0LCBncm91cCwgZnJvbV9hbmNlc3Rvcl9ucyk7Cit9CisKIGludCBwcmludF9mYXRhbF9zaWduYWxzOwogCiBzdGF0aWMgdm9pZCBwcmludF9mYXRhbF9zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKQEAgLTExMzMsNyArMTE2MSw3IEBACiAJaWYgKHNpZyAmJiBwLT5zaWdoYW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCXJldCA9IF9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIGluZm8sIHApOworCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIAl9CiBvdXRfdW5sb2NrOgpAQCAtMTMyMCw3ICsxMzQ4LDcgQEAKIAkJZ290byByZXQ7CiAKIAlyZXQgPSAxOyAvKiB0aGUgc2lnbmFsIGlzIGlnbm9yZWQgKi8KLQlpZiAoIXByZXBhcmVfc2lnbmFsKHNpZywgdCkpCisJaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQsIDApKQogCQlnb3RvIG91dDsKIAogCXJldCA9IDA7CkBAIC0xODQ0LDkgKzE4NzIsMTYgQEAKIAogCQkvKgogCQkgKiBHbG9iYWwgaW5pdCBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50LgorCQkgKiBDb250YWluZXItaW5pdCBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50IGZyb20gc2FtZQorCQkgKiBjb250YWluZXIuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBpZiBnbG9iYWwvY29udGFpbmVyLWluaXQgc2VlcyBhIHNpZ19rZXJuZWxfb25seSgpCisJCSAqIHNpZ25hbCBoZXJlLCB0aGUgc2lnbmFsIG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBpbnRlcm5hbGx5CisJCSAqIG9yIG11c3QgaGF2ZSBjb21lIGZyb20gYW4gYW5jZXN0b3IgbmFtZXNwYWNlLiBJbiBlaXRoZXIKKwkJICogY2FzZSwgdGhlIHNpZ25hbCBjYW5ub3QgYmUgZHJvcHBlZC4KIAkJICovCiAJCWlmICh1bmxpa2VseShzaWduYWwtPmZsYWdzICYgU0lHTkFMX1VOS0lMTEFCTEUpICYmCi0JCSAgICAhc2lnbmFsX2dyb3VwX2V4aXQoc2lnbmFsKSkKKwkJCQkhc2lnX2tlcm5lbF9vbmx5KHNpZ25yKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzaWdfa2VybmVsX3N0b3Aoc2lnbnIpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2xvdy13b3JrLmMgYi9rZXJuZWwvc2xvdy13b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYmMwMQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zbG93LXdvcmsuYwpAQCAtMCwwICsxLDY0MCBAQAorLyogV29ya2VyIHRocmVhZCBwb29sIGZvciBzbG93IGl0ZW1zLCBzdWNoIGFzIGZpbGVzeXN0ZW0gbG9va3VwcyBvciBta2RpcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2RlZmluZSBTTE9XX1dPUktfQ1VMTF9USU1FT1VUICg1ICogSFopCS8qIGN1bGwgdGhyZWFkcyA1cyBhZnRlciBydW5uaW5nIG91dCBvZgorCQkJCQkgKiB0aGluZ3MgdG8gZG8gKi8KKyNkZWZpbmUgU0xPV19XT1JLX09PTV9USU1FT1VUICg1ICogSFopCS8qIGNhbid0IHN0YXJ0IG5ldyB0aHJlYWRzIGZvciA1cyBhZnRlcgorCQkJCQkgKiBPT00gKi8KKworc3RhdGljIHZvaWQgc2xvd193b3JrX2N1bGxfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIHNsb3dfd29ya19vb21fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBpbnQgc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworc3RhdGljIGludCBzbG93X3dvcmtfbWF4X3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50ICwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKyNlbmRpZgorCisvKgorICogVGhlIHBvb2wgb2YgdGhyZWFkcyBoYXMgYXQgbGVhc3QgbWluIHRocmVhZHMgaW4gaXQgYXMgbG9uZyBhcyBzb21lb25lIGlzCisgKiB1c2luZyB0aGUgZmFjaWxpdHksIGFuZCBtYXkgaGF2ZSBhcyBtYW55IGFzIG1heC4KKyAqCisgKiBBIHBvcnRpb24gb2YgdGhlIHBvb2wgbWF5IGJlIHByb2Nlc3NpbmcgdmVyeSBzbG93IG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBzbG93X3dvcmtfbWluX3RocmVhZHMgPSAyOworc3RhdGljIHVuc2lnbmVkIHNsb3dfd29ya19tYXhfdGhyZWFkcyA9IDQ7CitzdGF0aWMgdW5zaWduZWQgdnNsb3dfd29ya19wcm9wb3J0aW9uID0gNTA7IC8qICUgb2YgdGhyZWFkcyB0aGF0IG1heSBwcm9jZXNzCisJCQkJCSAgICAgKiB2ZXJ5IHNsb3cgd29yayAqLworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWluX21pbl90aHJlYWRzID0gMjsKK3N0YXRpYyBpbnQgc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IDI1NTsKK3N0YXRpYyBjb25zdCBpbnQgc2xvd193b3JrX21pbl92c2xvdyA9IDE7CitzdGF0aWMgY29uc3QgaW50IHNsb3dfd29ya19tYXhfdnNsb3cgPSA5OTsKKworY3RsX3RhYmxlIHNsb3dfd29ya19zeXNjdGxzW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1pbi10aHJlYWRzIiwKKwkJLmRhdGEJCT0gJnNsb3dfd29ya19taW5fdGhyZWFkcywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bCwKKwkJLmV4dHJhMQkJPSAodm9pZCAqKSAmc2xvd193b3JrX21pbl9taW5fdGhyZWFkcywKKwkJLmV4dHJhMgkJPSAmc2xvd193b3JrX21heF90aHJlYWRzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heC10aHJlYWRzIiwKKwkJLmRhdGEJCT0gJnNsb3dfd29ya19tYXhfdGhyZWFkcywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gc2xvd193b3JrX21heF90aHJlYWRzX3N5c2N0bCwKKwkJLmV4dHJhMQkJPSAmc2xvd193b3JrX21pbl90aHJlYWRzLAorCQkuZXh0cmEyCQk9ICh2b2lkICopICZzbG93X3dvcmtfbWF4X21heF90aHJlYWRzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInZzbG93LXBlcmNlbnRhZ2UiLAorCQkuZGF0YQkJPSAmdnNsb3dfd29ya19wcm9wb3J0aW9uLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gKHZvaWQgKikgJnNsb3dfd29ya19taW5fdnNsb3csCisJCS5leHRyYTIJCT0gKHZvaWQgKikgJnNsb3dfd29ya19tYXhfdnNsb3csCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKyNlbmRpZgorCisvKgorICogVGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIHBvb2wKKyAqLworc3RhdGljIGF0b21pY190IHNsb3dfd29ya190aHJlYWRfY291bnQ7CitzdGF0aWMgYXRvbWljX3QgdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQ7CisKK3N0YXRpYyBib29sIHNsb3dfd29ya19tYXlfbm90X3N0YXJ0X25ld190aHJlYWQ7CitzdGF0aWMgYm9vbCBzbG93X3dvcmtfY3VsbDsgLyogY3VsbCBhIHRocmVhZCBkdWUgdG8gbGFjayBvZiBhY3Rpdml0eSAqLworc3RhdGljIERFRklORV9USU1FUihzbG93X3dvcmtfY3VsbF90aW1lciwgc2xvd193b3JrX2N1bGxfdGltZW91dCwgMCwgMCk7CitzdGF0aWMgREVGSU5FX1RJTUVSKHNsb3dfd29ya19vb21fdGltZXIsIHNsb3dfd29ya19vb21fdGltZW91dCwgMCwgMCk7CitzdGF0aWMgc3RydWN0IHNsb3dfd29yayBzbG93X3dvcmtfbmV3X3RocmVhZDsgLyogbmV3IHRocmVhZCBzdGFydGVyICovCisKKy8qCisgKiBUaGUgcXVldWVzIG9mIHdvcmsgaXRlbXMgYW5kIHRoZSBsb2NrIGdvdmVybmluZyBhY2Nlc3MgdG8gdGhlbS4gIFRoZXNlIGFyZQorICogc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBDUFVzLiAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgcGVyLUNQVSBxdWV1ZXMKKyAqIGFzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgbnVtYmVyIG9mIENQVXMuCisgKgorICogVGhlcmUgYXJlIHR3byBxdWV1ZXMgb2Ygd29yayBpdGVtczogb25lIGZvciBzbG93IHdvcmsgaXRlbXMsIGFuZCBvbmUgZm9yCisgKiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KKyAqLworc3RhdGljIExJU1RfSEVBRChzbG93X3dvcmtfcXVldWUpOworc3RhdGljIExJU1RfSEVBRCh2c2xvd193b3JrX3F1ZXVlKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xvd193b3JrX3F1ZXVlX2xvY2spOworCisvKgorICogVGhlIHRocmVhZCBjb250cm9scy4gIEEgdmFyaWFibGUgdXNlZCB0byBzaWduYWwgdG8gdGhlIHRocmVhZHMgdGhhdCB0aGV5CisgKiBzaG91bGQgZXhpdCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eSwgYSB3YWl0cXVldWUgdXNlZCBieSB0aGUgdGhyZWFkcyB0byB3YWl0CisgKiBmb3Igc2lnbmFscywgYW5kIGEgY29tcGxldGlvbiBzZXQgYnkgdGhlIGxhc3QgdGhyZWFkIHRvIGV4aXQuCisgKi8KK3N0YXRpYyBib29sIHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0Oworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHNsb3dfd29ya190aHJlYWRfd3EpOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgdXNlcnMgb2YgdGhlIHRocmVhZCBwb29sIGFuZCBpdHMgbG9jay4gIFdoaWxzdCB0aGlzIGlzIHplcm8gd2UKKyAqIGhhdmUgbm8gdGhyZWFkcyBoYW5naW5nIGFyb3VuZCwgYW5kIHdoZW4gdGhpcyByZWFjaGVzIHplcm8sIHdlIHdhaXQgZm9yIGFsbAorICogYWN0aXZlIG9yIHF1ZXVlZCB3b3JrIGl0ZW1zIHRvIGNvbXBsZXRlIGFuZCBraWxsIGFsbCB0aGUgdGhyZWFkcyB3ZSBkbyBoYXZlLgorICovCitzdGF0aWMgaW50IHNsb3dfd29ya191c2VyX2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChzbG93X3dvcmtfdXNlcl9sb2NrKTsKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIHRocmVhZHMgaW4gdGhlIHBvb2wgdGhhdCBhcmUKKyAqIHBlcm1pdHRlZCB0byBwcm9jZXNzIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorICoKKyAqIFRoZSBhbnN3ZXIgaXMgcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxLCBidXQgbWF5IG5vdCBlcXVhbCBvciBleGNlZWQgdGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiB0aGUgdGhyZWFkcyBpbiB0aGUgcG9vbC4gIFRoaXMgbWVhbnMgd2UgYWx3YXlzIGhhdmUgYXQKKyAqIGxlYXN0IG9uZSB0aHJlYWQgdGhhdCBjYW4gcHJvY2VzcyBzbG93IHdvcmsgaXRlbXMsIGFuZCB3ZSBhbHdheXMgaGF2ZSBhdAorICogbGVhc3Qgb25lIHRocmVhZCB0aGF0IHdvbid0IGdldCB0aWVkIHVwIGRvaW5nIHNvLgorICovCitzdGF0aWMgdW5zaWduZWQgc2xvd193b3JrX2NhbGNfdnNtYXgodm9pZCkKK3sKKwl1bnNpZ25lZCB2c21heDsKKworCXZzbWF4ID0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpICogdnNsb3dfd29ya19wcm9wb3J0aW9uOworCXZzbWF4IC89IDEwMDsKKwl2c21heCA9IG1heCh2c21heCwgMVUpOworCXJldHVybiBtaW4odnNtYXgsIHNsb3dfd29ya19tYXhfdGhyZWFkcyAtIDEpOworfQorCisvKgorICogQXR0ZW1wdCB0byBleGVjdXRlIHN0dWZmIHF1ZXVlZCBvbiBhIHNsb3cgdGhyZWFkLiAgUmV0dXJuIHRydWUgaWYgd2UgbWFuYWdlZAorICogaXQsIGZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvLgorICovCitzdGF0aWMgYm9vbCBzbG93X3dvcmtfZXhlY3V0ZSh2b2lkKQoreworCXN0cnVjdCBzbG93X3dvcmsgKndvcmsgPSBOVUxMOworCXVuc2lnbmVkIHZzbWF4OworCWJvb2wgdmVyeV9zbG93OworCisJdnNtYXggPSBzbG93X3dvcmtfY2FsY192c21heCgpOworCisJLyogc2VlIGlmIHdlIGNhbiBzY2hlZHVsZSBhIG5ldyB0aHJlYWQgdG8gYmUgc3RhcnRlZCBpZiB3ZSdyZSBub3QKKwkgKiBrZWVwaW5nIHVwIHdpdGggdGhlIHdvcmsgKi8KKwlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnNsb3dfd29ya190aHJlYWRfd3EpICYmCisJICAgICghbGlzdF9lbXB0eSgmc2xvd193b3JrX3F1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkpICYmCisJICAgIGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSA8IHNsb3dfd29ya19tYXhfdGhyZWFkcyAmJgorCSAgICAhc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCkKKwkJc2xvd193b3JrX2VucXVldWUoJnNsb3dfd29ya19uZXdfdGhyZWFkKTsKKworCS8qIGZpbmQgc29tZXRoaW5nIHRvIGV4ZWN1dGUgKi8KKwlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCSAgICBhdG9taWNfcmVhZCgmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpIDwgdnNtYXgpIHsKKwkJd29yayA9IGxpc3RfZW50cnkodnNsb3dfd29ya19xdWV1ZS5uZXh0LAorCQkJCSAgc3RydWN0IHNsb3dfd29yaywgbGluayk7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKSkKKwkJCUJVRygpOworCQlsaXN0X2RlbF9pbml0KCZ3b3JrLT5saW5rKTsKKwkJYXRvbWljX2luYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOworCQl2ZXJ5X3Nsb3cgPSB0cnVlOworCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkpIHsKKwkJd29yayA9IGxpc3RfZW50cnkoc2xvd193b3JrX3F1ZXVlLm5leHQsCisJCQkJICBzdHJ1Y3Qgc2xvd193b3JrLCBsaW5rKTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKQorCQkJQlVHKCk7CisJCWxpc3RfZGVsX2luaXQoJndvcmstPmxpbmspOworCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsKKwl9IGVsc2UgeworCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsgLyogYXZvaWQgdGhlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisKKwlpZiAoIXdvcmspCisJCXJldHVybiBmYWxzZTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKQorCQlCVUcoKTsKKworCXdvcmstPm9wcy0+ZXhlY3V0ZSh3b3JrKTsKKworCWlmICh2ZXJ5X3Nsb3cpCisJCWF0b21pY19kZWMoJnZzbG93X3dvcmtfZXhlY3V0aW5nX2NvdW50KTsKKwljbGVhcl9iaXRfdW5sb2NrKFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncyk7CisKKwkvKiBpZiBzb21lb25lIHRyaWVkIHRvIGVucXVldWUgdGhlIGl0ZW0gd2hpbHN0IHdlIHdlcmUgZXhlY3V0aW5nIGl0LAorCSAqIHRoZW4gaXQnbGwgYmUgbGVmdCB1bmVucXVldWVkIHRvIGF2b2lkIG11bHRpcGxlIHRocmVhZHMgdHJ5aW5nIHRvCisJICogZXhlY3V0ZSBpdCBzaW11bHRhbmVvdXNseQorCSAqCisJICogdGhlcmUgaXMsIGhvd2V2ZXIsIGEgcmFjZSBiZXR3ZWVuIHVzIHRlc3RpbmcgdGhlIHBlbmRpbmcgZmxhZyBhbmQKKwkgKiBnZXR0aW5nIHRoZSBzcGlubG9jaywgYW5kIGJldHdlZW4gdGhlIGVucXVldWVyIHNldHRpbmcgdGhlIHBlbmRpbmcKKwkgKiBmbGFnIGFuZCBnZXR0aW5nIHRoZSBzcGlubG9jaywgc28gd2UgdXNlIGEgZGVmZXJyYWwgYml0IHRvIHRlbGwgdXMKKwkgKiBpZiB0aGUgZW5xdWV1ZXIgZ290IHRoZXJlIGZpcnN0CisJICovCisJaWYgKHRlc3RfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKSB7CisJCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKworCQlpZiAoIXRlc3RfYml0KFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykgJiYKKwkJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChTTE9XX1dPUktfRU5RX0RFRkVSUkVELCAmd29yay0+ZmxhZ3MpKQorCQkJZ290byBhdXRvX3JlcXVldWU7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJfQorCisJd29yay0+b3BzLT5wdXRfcmVmKHdvcmspOworCXJldHVybiB0cnVlOworCithdXRvX3JlcXVldWU6CisJLyogd2UgbXVzdCBjb21wbGV0ZSB0aGUgZW5xdWV1ZSBvcGVyYXRpb24KKwkgKiAtIHdlIHRyYW5zZmVyIG91ciByZWYgb24gdGhlIGl0ZW0gYmFjayB0byB0aGUgYXBwcm9wcmlhdGUgcXVldWUKKwkgKiAtIGRvbid0IHdha2UgYW5vdGhlciB0aHJlYWQgdXAgYXMgd2UncmUgYXdha2UgYWxyZWFkeQorCSAqLworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKQorCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmdnNsb3dfd29ya19xdWV1ZSk7CisJZWxzZQorCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmc2xvd193b3JrX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBzbG93X3dvcmtfZW5xdWV1ZSAtIFNjaGVkdWxlIGEgc2xvdyB3b3JrIGl0ZW0gZm9yIHByb2Nlc3NpbmcKKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIHF1ZXVlCisgKgorICogU2NoZWR1bGUgYSBzbG93IHdvcmsgaXRlbSBmb3IgcHJvY2Vzc2luZy4gIElmIHRoZSBpdGVtIGlzIGFscmVhZHkgdW5kZXJnb2luZworICogZXhlY3V0aW9uLCB0aGlzIGd1YXJhbnRlZXMgbm90IHRvIHJlLWVudGVyIHRoZSBleGVjdXRpb24gcm91dGluZSB1bnRpbCB0aGUKKyAqIGZpcnN0IGV4ZWN1dGlvbiBmaW5pc2hlcy4KKyAqCisgKiBUaGUgaXRlbSBpcyBwaW5uZWQgYnkgdGhpcyBmdW5jdGlvbiBhcyBpdCByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIGl0LCBtYW5hZ2VkCisgKiB0aHJvdWdoIHRoZSBpdGVtIG9wZXJhdGlvbnMuICBUaGUgaXRlbSBpcyB1bnBpbm5lZCBvbmNlIGl0IGhhcyBiZWVuCisgKiBleGVjdXRlZC4KKyAqCisgKiBBbiBpdGVtIG1heSBob2cgdGhlIHRocmVhZCB0aGF0IGlzIHJ1bm5pbmcgaXQgZm9yIGEgcmVsYXRpdmVseSBsYXJnZSBhbW91bnQKKyAqIG9mIHRpbWUsIHN1ZmZpY2llbnQsIGZvciBleGFtcGxlLCB0byBwZXJmb3JtIHNldmVyYWwgbG9va3VwLCBta2RpciwgY3JlYXRlCisgKiBhbmQgc2V0eGF0dHIgb3BlcmF0aW9ucy4gIEl0IG1heSBzbGVlcCBvbiBJL08gYW5kIG1heSBzbGVlcCB0byBvYnRhaW4gbG9ja3MuCisgKgorICogQ29udmVyc2VseSwgaWYgYSBudW1iZXIgb2YgaXRlbXMgYXJlIGF3YWl0aW5nIHByb2Nlc3NpbmcsIGl0IG1heSB0YWtlIHNvbWUKKyAqIHRpbWUgYmVmb3JlIGFueSBnaXZlbiBpdGVtIGlzIGdpdmVuIGF0dGVudGlvbi4gIFRoZSBudW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUKKyAqIHBvb2wgbWF5IGJlIGluY3JlYXNlZCB0byBkZWFsIHdpdGggZGVtYW5kLCBidXQgb25seSB1cCB0byBhIGxpbWl0LgorICoKKyAqIElmIFNMT1dfV09SS19WRVJZX1NMT1cgaXMgc2V0IG9uIHRoZSB3b3JrIGl0ZW0sIHRoZW4gaXQgd2lsbCBiZSBwbGFjZWQgaW4KKyAqIHRoZSB2ZXJ5IHNsb3cgcXVldWUsIGZyb20gd2hpY2ggb25seSBhIHBvcnRpb24gb2YgdGhlIHRocmVhZHMgd2lsbCBiZQorICogYWxsb3dlZCB0byBwaWNrIGl0ZW1zIHRvIGV4ZWN1dGUuICBUaGlzIGVuc3VyZXMgdGhhdCB2ZXJ5IHNsb3cgaXRlbXMgd29uJ3QKKyAqIG92ZXJseSBibG9jayBvbmVzIHRoYXQgYXJlIGp1c3Qgb3JkaW5hcmlseSBzbG93LgorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtRUFHQUlOIGlmIG5vdC4KKyAqLworaW50IHNsb3dfd29ya19lbnF1ZXVlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihzbG93X3dvcmtfdXNlcl9jb3VudCA8PSAwKTsKKwlCVUdfT04oIXdvcmspOworCUJVR19PTighd29yay0+b3BzKTsKKwlCVUdfT04oIXdvcmstPm9wcy0+Z2V0X3JlZik7CisKKwkvKiB3aGVuIGhvbm91cmluZyBhbiBlbnF1ZXVlIHJlcXVlc3QsIHdlIG9ubHkgcHJvbWlzZSB0aGF0IHdlIHdpbGwgcnVuCisJICogdGhlIHdvcmsgZnVuY3Rpb24gaW4gdGhlIGZ1dHVyZTsgd2UgZG8gbm90IHByb21pc2UgdG8gcnVuIGl0IG9uY2UKKwkgKiBwZXIgZW5xdWV1ZSByZXF1ZXN0CisJICoKKwkgKiB3ZSB1c2UgdGhlIFBFTkRJTkcgYml0IHRvIG1lcmdlIHRvZ2V0aGVyIHJlcGVhdCByZXF1ZXN0cyB3aXRob3V0CisJICogaGF2aW5nIHRvIGRpc2FibGUgSVJRcyBhbmQgdGFrZSB0aGUgc3BpbmxvY2ssIHdoaWxzdCBzdGlsbAorCSAqIG1haW50YWluaW5nIG91ciBwcm9taXNlCisJICovCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkJLyogd2UgcHJvbWlzZSB0aGF0IHdlIHdpbGwgbm90IGF0dGVtcHQgdG8gZXhlY3V0ZSB0aGUgd29yaworCQkgKiBmdW5jdGlvbiBpbiBtb3JlIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseQorCQkgKgorCQkgKiB0aGlzLCBob3dldmVyLCBsZWF2ZXMgdXMgd2l0aCBhIHByb2JsZW0gaWYgd2UncmUgYXNrZWQgdG8KKwkJICogZW5xdWV1ZSB0aGUgd29yayB3aGlsc3Qgc29tZW9uZSBpcyBleGVjdXRpbmcgdGhlIHdvcmsKKwkJICogZnVuY3Rpb24gYXMgc2ltcGx5IHF1ZXVlaW5nIHRoZSB3b3JrIGltbWVkaWF0ZWx5IG1lYW5zIHRoYXQKKwkJICogYW5vdGhlciB0aHJlYWQgbWF5IHRyeSBleGVjdXRpbmcgaXQgd2hpbHN0IGl0IGlzIGFscmVhZHkKKwkJICogdW5kZXIgZXhlY3V0aW9uCisJCSAqCisJCSAqIHRvIGRlYWwgd2l0aCB0aGlzLCB3ZSBzZXQgdGhlIEVOUV9ERUZFUlJFRCBiaXQgaW5zdGVhZCBvZgorCQkgKiBlbnF1ZXVlaW5nLCBhbmQgdGhlIHRocmVhZCBjdXJyZW50bHkgZXhlY3V0aW5nIHRoZSB3b3JrCisJCSAqIGZ1bmN0aW9uIHdpbGwgZW5xdWV1ZSB0aGUgd29yayBpdGVtIHdoZW4gdGhlIHdvcmsgZnVuY3Rpb24KKwkJICogcmV0dXJucyBhbmQgaXQgaGFzIGNsZWFyZWQgdGhlIEVYRUNVVElORyBiaXQKKwkJICovCisJCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFNMT1dfV09SS19FTlFfREVGRVJSRUQsICZ3b3JrLT5mbGFncyk7CisJCX0gZWxzZSB7CisJCQlpZiAod29yay0+b3BzLT5nZXRfcmVmKHdvcmspIDwgMCkKKwkJCQlnb3RvIGNhbnRfZ2V0X3JlZjsKKwkJCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKQorCQkJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZ2c2xvd193b3JrX3F1ZXVlKTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmc2xvd193b3JrX3F1ZXVlKTsKKwkJCXdha2VfdXAoJnNsb3dfd29ya190aHJlYWRfd3EpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7CisKK2NhbnRfZ2V0X3JlZjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOworCXJldHVybiAtRUFHQUlOOworfQorRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfZW5xdWV1ZSk7CisKKy8qCisgKiBXb3JrZXIgdGhyZWFkIGN1bGxpbmcgYWxnb3JpdGhtCisgKi8KK3N0YXRpYyBib29sIHNsb3dfd29ya19jdWxsX3RocmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBkb19jdWxsID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzbG93X3dvcmtfY3VsbCkgeworCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOworCisJCWlmIChsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpICYmCisJCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCQkgICAgYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID4KKwkJICAgIHNsb3dfd29ya19taW5fdGhyZWFkcykgeworCQkJbW9kX3RpbWVyKCZzbG93X3dvcmtfY3VsbF90aW1lciwKKwkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJCWRvX2N1bGwgPSB0cnVlOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZG9fY3VsbDsKK30KKworLyoKKyAqIERldGVybWluZSBpZiB0aGVyZSBpcyBzbG93IHdvcmsgYXZhaWxhYmxlIGZvciBkaXNwYXRjaAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc2xvd193b3JrX2F2YWlsYWJsZShpbnQgdnNtYXgpCit7CisJcmV0dXJuICFsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpIHx8CisJCSghbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJIGF0b21pY19yZWFkKCZ2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudCkgPCB2c21heCk7Cit9CisKKy8qCisgKiBXb3JrZXIgdGhyZWFkIGRpc3BhdGNoZXIKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfdGhyZWFkKHZvaWQgKl9kYXRhKQoreworCWludCB2c21heDsKKworCURFRklORV9XQUlUKHdhaXQpOworCisJc2V0X2ZyZWV6YWJsZSgpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgLTUpOworCisJZm9yICg7OykgeworCQl2c21heCA9IHZzbG93X3dvcmtfcHJvcG9ydGlvbjsKKwkJdnNtYXggKj0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOworCQl2c21heCAvPSAxMDA7CisKKwkJcHJlcGFyZV90b193YWl0KCZzbG93X3dvcmtfdGhyZWFkX3dxLCAmd2FpdCwKKwkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoIWZyZWV6aW5nKGN1cnJlbnQpICYmCisJCSAgICAhc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgJiYKKwkJICAgICFzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJgorCQkgICAgIXNsb3dfd29ya19jdWxsKQorCQkJc2NoZWR1bGUoKTsKKwkJZmluaXNoX3dhaXQoJnNsb3dfd29ya190aHJlYWRfd3EsICZ3YWl0KTsKKworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJdnNtYXggPSB2c2xvd193b3JrX3Byb3BvcnRpb247CisJCXZzbWF4ICo9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKKwkJdnNtYXggLz0gMTAwOworCisJCWlmIChzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJiBzbG93X3dvcmtfZXhlY3V0ZSgpKSB7CisJCQljb25kX3Jlc2NoZWQoKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpICYmCisJCQkgICAgbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJCSAgICBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgPgorCQkJICAgIHNsb3dfd29ya19taW5fdGhyZWFkcykKKwkJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0KQorCQkJYnJlYWs7CisKKwkJaWYgKHNsb3dfd29ya19jdWxsICYmIHNsb3dfd29ya19jdWxsX3RocmVhZCgpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNsb3dfd29ya190aHJlYWRfY291bnQpKQorCQljb21wbGV0ZV9hbmRfZXhpdCgmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhyZWFkIGN1bGwgdGltZXIgZXhwaXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfY3VsbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzbG93X3dvcmtfY3VsbCA9IHRydWU7CisJd2FrZV91cCgmc2xvd193b3JrX3RocmVhZF93cSk7Cit9CisKKy8qCisgKiBHZXQgYSByZWZlcmVuY2Ugb24gc2xvdyB3b3JrIHRocmVhZCBzdGFydGVyCisgKi8KK3N0YXRpYyBpbnQgc2xvd193b3JrX25ld190aHJlYWRfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXJldHVybiAwOworfQorCisvKgorICogRHJvcCBhIHJlZmVyZW5jZSBvbiBzbG93IHdvcmsgdGhyZWFkIHN0YXJ0ZXIKKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX25ld190aHJlYWRfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworfQorCisvKgorICogU3RhcnQgYSBuZXcgc2xvdyB3b3JrIHRocmVhZAorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0KQorCQlyZXR1cm47CisKKwlpZiAoYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID49IHNsb3dfd29ya19tYXhfdGhyZWFkcykKKwkJcmV0dXJuOworCisJaWYgKCFtdXRleF90cnlsb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKSkKKwkJcmV0dXJuOworCisJc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IHRydWU7CisJYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisJcCA9IGt0aHJlYWRfcnVuKHNsb3dfd29ya190aHJlYWQsIE5VTEwsICJrc2xvd2QiKTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IE9PTVxuIik7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSkKKwkJCUJVRygpOyAvKiB3ZSdyZSBydW5uaW5nIG9uIGEgc2xvdyB3b3JrIHRocmVhZC4uLiAqLworCQltb2RfdGltZXIoJnNsb3dfd29ya19vb21fdGltZXIsCisJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfT09NX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCS8qIHJhdGVsaW1pdCB0aGUgc3RhcnRpbmcgb2YgbmV3IHRocmVhZHMgKi8KKwkJbW9kX3RpbWVyKCZzbG93X3dvcmtfb29tX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIHNsb3dfd29ya19uZXdfdGhyZWFkX29wcyA9IHsKKwkuZ2V0X3JlZgk9IHNsb3dfd29ya19uZXdfdGhyZWFkX2dldF9yZWYsCisJLnB1dF9yZWYJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9wdXRfcmVmLAorCS5leGVjdXRlCT0gc2xvd193b3JrX25ld190aHJlYWRfZXhlY3V0ZSwKK307CisKKy8qCisgKiBwb3N0LU9PTSBuZXcgdGhyZWFkIHN0YXJ0IHN1cHByZXNzaW9uIGV4cGlyYXRpb24KKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX29vbV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkID0gZmFsc2U7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisvKgorICogSGFuZGxlIGFkanVzdG1lbnQgb2YgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRocmVhZHMKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfbWluX3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWludCBuOworCisJaWYgKHJldCA9PSAwKSB7CisJCW11dGV4X2xvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCQlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPiAwKSB7CisJCQkvKiBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBvciBzdG9wIHRocmVhZHMgKi8KKwkJCW4gPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgLQorCQkJCXNsb3dfd29ya19taW5fdGhyZWFkczsKKworCQkJaWYgKG4gPCAwICYmICFzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkKQorCQkJCXNsb3dfd29ya19lbnF1ZXVlKCZzbG93X3dvcmtfbmV3X3RocmVhZCk7CisJCQllbHNlIGlmIChuID4gMCkKKwkJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJfQorCQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgYWRqdXN0bWVudCBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcworICovCitzdGF0aWMgaW50IHNsb3dfd29ya19tYXhfdGhyZWFkc19zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJCXNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaW50IG47CisKKwlpZiAocmV0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA+IDApIHsKKwkJCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIHN0b3AgdGhyZWFkcyAqLworCQkJbiA9IHNsb3dfd29ya19tYXhfdGhyZWFkcyAtCisJCQkJYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOworCisJCQlpZiAobiA8IDApCisJCQkJbW9kX3RpbWVyKCZzbG93X3dvcmtfY3VsbF90aW1lciwKKwkJCQkJICBqaWZmaWVzICsgU0xPV19XT1JLX0NVTExfVElNRU9VVCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworLyoqCisgKiBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlciAtIFJlZ2lzdGVyIGEgdXNlciBvZiB0aGUgZmFjaWxpdHkKKyAqCisgKiBSZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5LCBzdGFydGluZyB1cCB0aGUgaW5pdGlhbCB0aHJlYWRzIGlmIHRoZXJlCisgKiBhcmVuJ3QgYW55IG90aGVyIHVzZXJzIGF0IHRoaXMgcG9pbnQuICBUaGlzIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqIGFuIGVycm9yIGlmIG5vdC4KKyAqLworaW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWludCBsb29wOworCisJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisKKwlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNsb3cgd29yayB0aHJlYWQgcG9vbDogU3RhcnRpbmcgdXBcbiIpOworCQlpbml0X2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCisJCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gZmFsc2U7CisJCXNsb3dfd29ya19pbml0KCZzbG93X3dvcmtfbmV3X3RocmVhZCwKKwkJCSAgICAgICAmc2xvd193b3JrX25ld190aHJlYWRfb3BzKTsKKwkJc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IGZhbHNlOworCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOworCisJCS8qIHN0YXJ0IHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aHJlYWRzICovCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBzbG93X3dvcmtfbWluX3RocmVhZHM7IGxvb3ArKykgeworCQkJYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisJCQlwID0ga3RocmVhZF9ydW4oc2xvd193b3JrX3RocmVhZCwgTlVMTCwgImtzbG93ZCIpOworCQkJaWYgKElTX0VSUihwKSkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBSZWFkeVxuIik7CisJfQorCisJc2xvd193b3JrX3VzZXJfY291bnQrKzsKKwltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkpCisJCWNvbXBsZXRlKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKwlpZiAobG9vcCA+IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IgorCQkgICAgICAgIiBBYm9ydGluZyBzdGFydHVwIG9uIEVOT01FTVxuIik7CisJCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gdHJ1ZTsKKwkJd2FrZV91cF9hbGwoJnNsb3dfd29ya190aHJlYWRfd3EpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IEFib3J0ZWRcbiIpOworCX0KKwltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCXJldHVybiBQVFJfRVJSKHApOworfQorRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcik7CisKKy8qKgorICogc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlciAtIFVucmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eQorICoKKyAqIFVucmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eSwga2lsbGluZyBhbGwgdGhlIHRocmVhZHMgaWYgdGhpcyB3YXMgdGhlCisgKiBsYXN0IG9uZS4KKyAqLwordm9pZCBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisKKwlCVUdfT04oc2xvd193b3JrX3VzZXJfY291bnQgPD0gMCk7CisKKwlzbG93X3dvcmtfdXNlcl9jb3VudC0tOworCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBTaHV0dGluZyBkb3duXG4iKTsKKwkJc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgPSB0cnVlOworCQl3YWtlX3VwX2FsbCgmc2xvd193b3JrX3RocmVhZF93cSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNsb3cgd29yayB0aHJlYWQgcG9vbDoiCisJCSAgICAgICAiIFNodXQgZG93biBjb21wbGV0ZVxuIik7CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJnNsb3dfd29ya19jdWxsX3RpbWVyKTsKKworCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIpOworCisvKgorICogSW5pdGlhbGlzZSB0aGUgc2xvdyB3b3JrIGZhY2lsaXR5CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc2xvd193b3JrKHZvaWQpCit7CisJdW5zaWduZWQgbnJfY3B1cyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CisKKwlpZiAoc2xvd193b3JrX21heF90aHJlYWRzIDwgbnJfY3B1cykKKwkJc2xvd193b3JrX21heF90aHJlYWRzID0gbnJfY3B1czsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJaWYgKHNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPCBucl9jcHVzICogMikKKwkJc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IG5yX2NwdXMgKiAyOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpbml0X3Nsb3dfd29yayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3BpbmxvY2suYyBiL2tlcm5lbC9zcGlubG9jay5jCmluZGV4IDI5YWIyMDcuLjc5MzI2NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zcGlubG9jay5jCisrKyBiL2tlcm5lbC9zcGlubG9jay5jCkBAIC0xMjEsNyArMTIxLDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfcmVhZF90cnlsb2NrLCBfcmF3X3JlYWRfbG9jayk7CisJTE9DS19DT05URU5ERURfRkxBR1MobG9jaywgX3Jhd19yZWFkX3RyeWxvY2ssIF9yYXdfcmVhZF9sb2NrLAorCQkJICAgICBfcmF3X3JlYWRfbG9ja19mbGFncywgJmZsYWdzKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfaXJxc2F2ZSk7CkBAIC0xNTEsNyArMTUyLDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jayk7CisJTE9DS19DT05URU5ERURfRkxBR1MobG9jaywgX3Jhd193cml0ZV90cnlsb2NrLCBfcmF3X3dyaXRlX2xvY2ssCisJCQkgICAgIF9yYXdfd3JpdGVfbG9ja19mbGFncywgJmZsYWdzKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrX2lycXNhdmUpOwpAQCAtMjk5LDE2ICszMDEsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7Ci0JLyoKLQkgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0aGUgaGFuZC1jb2RlZCBpcnEtZW5hYmxlIG9mCi0JICogX3Jhd19zcGluX2xvY2tfZmxhZ3MoKSBjb2RlLCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcwotCSAqIHRoYXQgaW50ZXJydXB0cyBhcmUgbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZToKLQkgKi8KLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7Ci0jZWxzZQotCV9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7Ci0jZW5kaWYKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2ssCisJCQkJX3Jhd19zcGluX2xvY2tfZmxhZ3MsICZmbGFncyk7CiAJcmV0dXJuIGZsYWdzOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwppbmRleCA3NDU0MWNhLi45MTI4MjNlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKKysrIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCkBAIC00NCw3ICs0NCw3IEBACiBzdGF0aWMgaW50IHJlZmNvdW50Owogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdG9wX21hY2hpbmVfd3E7CiBzdGF0aWMgc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhIGFjdGl2ZSwgaWRsZTsKLXN0YXRpYyBjb25zdCBjcHVtYXNrX3QgKmFjdGl2ZV9jcHVzOworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphY3RpdmVfY3B1czsKIHN0YXRpYyB2b2lkICpzdG9wX21hY2hpbmVfd29yazsKIAogc3RhdGljIHZvaWQgc2V0X3N0YXRlKGVudW0gc3RvcG1hY2hpbmVfc3RhdGUgbmV3c3RhdGUpCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggMzdmNDU4ZS4uNTFkYmI1NSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CkBAIC0xMDEzLDEwICsxMDE0LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWlmICh0YXNrX3BncnAocCkgIT0gcGdycCkgeworCWlmICh0YXNrX3BncnAocCkgIT0gcGdycCkKIAkJY2hhbmdlX3BpZChwLCBQSURUWVBFX1BHSUQsIHBncnApOwotCQlzZXRfdGFza19wZ3JwKHAsIHBpZF9ucihwZ3JwKSk7Ci0JfQogCiAJZXJyID0gMDsKIG91dDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBjNWVmNDRmLi44MjM1MGY4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC05NSwxMiArOTYsOSBAQAogc3RhdGljIGludCBuZWdfb25lID0gLTE7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01NVSkgJiYgZGVmaW5lZChDT05GSUdfRklMRV9MT0NLSU5HKQotc3RhdGljIGludCB0d28gPSAyOwotI2VuZGlmCi0KIHN0YXRpYyBpbnQgemVybzsKIHN0YXRpYyBpbnQgb25lID0gMTsKK3N0YXRpYyBpbnQgdHdvID0gMjsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9uZV91bCA9IDE7CiBzdGF0aWMgaW50IG9uZV9odW5kcmVkID0gMTAwOwogCkBAIC05MDAsNiArODk4LDE0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmc2Nhbl91bmV2aWN0YWJsZV9oYW5kbGVyLAogCX0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInNsb3ctd29yayIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBzbG93X3dvcmtfc3lzY3RscywKKwl9LAorI2VuZGlmCiAvKgogICogTk9URTogZG8gbm90IGFkZCBuZXcgZW50cmllcyB0byB0aGlzIHRhYmxlIHVubGVzcyB5b3UgaGF2ZSByZWFkCiAgKiBEb2N1bWVudGF0aW9uL3N5c2N0bC9jdGxfdW5udW1iZXJlZC50eHQKQEAgLTEwMTAsNyArMTAxNiw3IEBACiAJCS5kYXRhCQk9ICZkaXJ0eV9leHBpcmVfaW50ZXJ2YWwsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGRpcnR5X2V4cGlyZV9pbnRlcnZhbCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAJewogCQkuY3RsX25hbWUJPSBWTV9OUl9QREZMVVNIX1RIUkVBRFMsCkBAIC0xMzczLDEwICsxMzc5LDcgQEAKIAkJLmRhdGEJCT0gJmxlYXNlX2JyZWFrX3RpbWUsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAotCQkuZXh0cmExCQk9ICZ6ZXJvLAotCQkuZXh0cmEyCQk9ICZ0d28sCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FJTwpAQCAtMTQxNyw3ICsxNDIwLDEwIEBACiAJCS5kYXRhCQk9ICZzdWlkX2R1bXBhYmxlLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZ0d28sCiAJfSwKICNpZiBkZWZpbmVkKENPTkZJR19CSU5GTVRfTUlTQykgfHwgZGVmaW5lZChDT05GSUdfQklORk1UX01JU0NfTU9EVUxFKQogCXsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggOWI3N2ZjOS4uYjQ1NTU1NiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTQ5MSwxNCArNDkxLDE4IEBACiAJZGVidWdfb2JqZWN0X2ZyZWUodGltZXIsICZ0aW1lcl9kZWJ1Z19kZXNjcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOworc3RhdGljIHZvaWQgX19pbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3ZvaWQgaW5pdF90aW1lcl9vbl9zdGFja19rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayh0aW1lciwgJnRpbWVyX2RlYnVnX2Rlc2NyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfdGltZXJfb25fc3RhY2spOworRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF90aW1lcl9vbl9zdGFja19rZXkpOwogCiB2b2lkIGRlc3Ryb3lfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewpAQCAtNTEyLDcgKzUxNiw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdGltZXJfZGVhY3RpdmF0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpIHsgfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCitzdGF0aWMgdm9pZCBfX2luaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CiAJdGltZXItPmVudHJ5Lm5leHQgPSBOVUxMOwogCXRpbWVyLT5iYXNlID0gX19yYXdfZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CkBAIC01MjEsNiArNTI3LDcgQEAKIAl0aW1lci0+c3RhcnRfcGlkID0gLTE7CiAJbWVtc2V0KHRpbWVyLT5zdGFydF9jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKICNlbmRpZgorCWxvY2tkZXBfaW5pdF9tYXAoJnRpbWVyLT5sb2NrZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKIH0KIAogLyoqCkBAIC01MzAsMTkgKzUzNywyMyBAQAogICogaW5pdF90aW1lcigpIG11c3QgYmUgZG9uZSB0byBhIHRpbWVyIHByaW9yIGNhbGxpbmcgKmFueSogb2YgdGhlCiAgKiBvdGhlciB0aW1lciBmdW5jdGlvbnMuCiAgKi8KLXZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCit2b2lkIGluaXRfdGltZXJfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z190aW1lcl9pbml0KHRpbWVyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcik7CitFWFBPUlRfU1lNQk9MKGluaXRfdGltZXJfa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQordm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewotCWluaXRfdGltZXIodGltZXIpOworCWluaXRfdGltZXJfa2V5KHRpbWVyLCBuYW1lLCBrZXkpOwogCXRpbWVyX3NldF9kZWZlcnJhYmxlKHRpbWVyKTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlKTsKK0VYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXRhY2hfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJCWludCBjbGVhcl9wZW5kaW5nKQpAQCAtODI2LDYgKzgzNywxNSBAQAogICovCiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogeworI2lmZGVmIENPTkZJR19MT0NLREVQCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOworCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCisKIAlmb3IgKDs7KSB7CiAJCWludCByZXQgPSB0cnlfdG9fZGVsX3RpbWVyX3N5bmModGltZXIpOwogCQlpZiAocmV0ID49IDApCkBAIC04OTcsMTAgKzkxNywzNiBAQAogCiAJCQlzZXRfcnVubmluZ190aW1lcihiYXNlLCB0aW1lcik7CiAJCQlkZXRhY2hfdGltZXIodGltZXIsIDEpOworCiAJCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwogCQkJewogCQkJCWludCBwcmVlbXB0X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHBlcm1pc3NpYmxlIHRvIGZyZWUgdGhlIHRpbWVyIGZyb20KKwkJCQkgKiBpbnNpZGUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZyb20KKwkJCQkgKiBpdCwgdGhpcyB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvcgorCQkJCSAqIGxvY2tkZXAgdG9vLiBUbyBhdm9pZCBib2d1cyAiaGVsZCBsb2NrCisJCQkJICogZnJlZWQiIHdhcm5pbmdzIGFzIHdlbGwgYXMgcHJvYmxlbXMgd2hlbgorCQkJCSAqIGxvb2tpbmcgaW50byB0aW1lci0+bG9ja2RlcF9tYXAsIG1ha2UgYQorCQkJCSAqIGNvcHkgYW5kIHVzZSB0aGF0IGhlcmUuCisJCQkJICovCisJCQkJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwID0KKwkJCQkJdGltZXItPmxvY2tkZXBfbWFwOworI2VuZGlmCisJCQkJLyoKKwkJCQkgKiBDb3VwbGUgdGhlIGxvY2sgY2hhaW4gd2l0aCB0aGUgbG9jayBjaGFpbiBhdAorCQkJCSAqIGRlbF90aW1lcl9zeW5jKCkgYnkgYWNxdWlyaW5nIHRoZSBsb2NrX21hcAorCQkJCSAqIGFyb3VuZCB0aGUgZm4oKSBjYWxsIGhlcmUgYW5kIGluCisJCQkJICogZGVsX3RpbWVyX3N5bmMoKS4KKwkJCQkgKi8KKwkJCQlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CisKIAkJCQlmbihkYXRhKTsKKworCQkJCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKKwogCQkJCWlmIChwcmVlbXB0X2NvdW50ICE9IHByZWVtcHRfY291bnQoKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCAlcCAiCiAJCQkJCSAgICAgICAid2l0aCBwcmVlbXB0X2NvdW50ICUwOHgsIGV4aXRlZCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCA5MzBjMDhlLi5kY2U3MWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC00Miw2ICs0Miw4MSBAQAogLyogcGlkIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwogc3RhdGljIHBpZF90IGxhc3RfcGlkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xIH07CiAKKy8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLworCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKKwkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCSpkZXB0aCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCit2b2lkCitmdHJhY2VfcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJaWYgKHVubGlrZWx5KGluZGV4IDwgMCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2hlcmUgdG8gZ28gKi8KKwkJKnJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCQlyZXR1cm47CisJfQorCisJKnJldCA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCXRyYWNlLT5mdW5jID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jOworCXRyYWNlLT5jYWxsdGltZSA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWU7CisJdHJhY2UtPm92ZXJydW4gPSBhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJdHJhY2UtPmRlcHRoID0gaW5kZXg7CisJYmFycmllcigpOworCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisKK30KKworLyoKKyAqIFNlbmQgdGhlIHRyYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIHJldHVybiBhZGRyZXNzLgorICovCit1bnNpZ25lZCBsb25nIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcih2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKKwl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCisJCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCBjcHUsIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC91dHNuYW1lX3N5c2N0bC5jIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKaW5kZXggM2IzNGIzNS4uOTIzNTljYyAxMDA2NDQKLS0tIGEva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKKysrIGIva2VybmVsL3V0c25hbWVfc3lzY3RsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJdXBfd3JpdGUoJnV0c19zZW0pOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIC8qCiAgKglTcGVjaWFsIGNhc2Ugb2YgZG9zdHJpbmcgZm9yIHRoZSBVVFMgc3RydWN0dXJlLiBUaGlzIGhhcyBsb2NrcwogICoJdG8gb2JzZXJ2ZS4gU2hvdWxkIHRoaXMgYmUgaW4ga2VybmVsL3N5cy5jID8/Pz8KZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCAxZjBjNTA5Li4zMmY4ZTBkIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC00OCw4ICs0OCw2IEBACiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7Ci0KLQlpbnQgcnVuX2RlcHRoOwkJLyogRGV0ZWN0IHJ1bl93b3JrcXVldWUoKSByZWN1cnNpb24gZGVwdGggKi8KIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiAvKgpAQCAtMjYyLDEzICsyNjAsNiBAQAogc3RhdGljIHZvaWQgcnVuX3dvcmtxdWV1ZShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKIHsKIAlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwotCWN3cS0+cnVuX2RlcHRoKys7Ci0JaWYgKGN3cS0+cnVuX2RlcHRoID4gMykgewotCQkvKiBtb3J0b24gZ2V0cyB0byBlYXQgaGlzIGhhdCAqLwotCQlwcmludGsoIiVzOiByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQ6ICVkXG4iLAotCQkJX19mdW5jX18sIGN3cS0+cnVuX2RlcHRoKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmN3cS0+d29ya2xpc3QpKSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IGxpc3RfZW50cnkoY3dxLT53b3JrbGlzdC5uZXh0LAogCQkJCQkJc3RydWN0IHdvcmtfc3RydWN0LCBlbnRyeSk7CkBAIC0zMTEsNyArMzAyLDYgQEAKIAkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKIAkJY3dxLT5jdXJyZW50X3dvcmsgPSBOVUxMOwogCX0KLQljd3EtPnJ1bl9kZXB0aC0tOwogCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKIH0KIApAQCAtMzY4LDI5ICszNTgsMjAgQEAKIAogc3RhdGljIGludCBmbHVzaF9jcHVfd29ya3F1ZXVlKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQogewotCWludCBhY3RpdmU7CisJaW50IGFjdGl2ZSA9IDA7CisJc3RydWN0IHdxX2JhcnJpZXIgYmFycjsKIAotCWlmIChjd3EtPnRocmVhZCA9PSBjdXJyZW50KSB7Ci0JCS8qCi0JCSAqIFByb2JhYmx5IGtldmVudGQgdHJ5aW5nIHRvIGZsdXNoIGl0cyBvd24gcXVldWUuIFNvIHNpbXBseSBydW4KLQkJICogaXQgYnkgaGFuZCByYXRoZXIgdGhhbiBkZWFkbG9ja2luZy4KLQkJICovCi0JCXJ1bl93b3JrcXVldWUoY3dxKTsKKwlXQVJOX09OKGN3cS0+dGhyZWFkID09IGN1cnJlbnQpOworCisJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmN3cS0+d29ya2xpc3QpIHx8IGN3cS0+Y3VycmVudF93b3JrICE9IE5VTEwpIHsKKwkJaW5zZXJ0X3dxX2JhcnJpZXIoY3dxLCAmYmFyciwgJmN3cS0+d29ya2xpc3QpOwogCQlhY3RpdmUgPSAxOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB3cV9iYXJyaWVyIGJhcnI7Ci0KLQkJYWN0aXZlID0gMDsKLQkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZjd3EtPndvcmtsaXN0KSB8fCBjd3EtPmN1cnJlbnRfd29yayAhPSBOVUxMKSB7Ci0JCQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCAmY3dxLT53b3JrbGlzdCk7Ci0JCQlhY3RpdmUgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQotCQlpZiAoYWN0aXZlKQotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOworCisJaWYgKGFjdGl2ZSkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKIAogCXJldHVybiBhY3RpdmU7CiB9CkBAIC00MTYsNyArMzk3LDcgQEAKIAltaWdodF9zbGVlcCgpOwogCWxvY2tfbWFwX2FjcXVpcmUoJndxLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmd3EtPmxvY2tkZXBfbWFwKTsKLQlmb3JfZWFjaF9jcHVfbWFza19ucihjcHUsICpjcHVfbWFwKQorCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9tYXApCiAJCWZsdXNoX2NwdV93b3JrcXVldWUocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF93b3JrcXVldWUpOwpAQCAtNTQ3LDcgKzUyOCw3IEBACiAJd3EgPSBjd3EtPndxOwogCWNwdV9tYXAgPSB3cV9jcHVfbWFwKHdxKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKmNwdV9tYXApCisJZm9yX2VhY2hfY3B1KGNwdSwgY3B1X21hcCkKIAkJd2FpdF9vbl9jcHVfd29yayhwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpLCB3b3JrKTsKIH0KIApAQCAtOTExLDcgKzg5Miw3IEBACiAJbGlzdF9kZWwoJndxLT5saXN0KTsKIAlzcGluX3VubG9jaygmd29ya3F1ZXVlX2xvY2spOwogCi0JZm9yX2VhY2hfY3B1X21hc2tfbnIoY3B1LCAqY3B1X21hcCkKKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfbWFwKQogCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQocGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KSk7CiAgCWNwdV9tYXBzX3VwZGF0ZV9kb25lKCk7CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMDYyNmZhNC4uOTYzOGQ5OSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTc5Niw2ICs3OTYsNyBAQAogCSAgdG8gcHJvcGVybHkgbWFpbnRhaW4gYW5kIHVzZS4gVGhpcyBlbmFibGVzIGNoZWNrcyB0aGF0IGhlbHAKIAkgIHlvdSB0byBrZWVwIHRoaW5ncyBjb3JyZWN0LgogCitzb3VyY2UgbW0vS2NvbmZpZy5kZWJ1Zwogc291cmNlIGtlcm5lbC90cmFjZS9LY29uZmlnCiAKIGNvbmZpZyBQUk9WSURFX09IQ0kxMzk0X0RNQV9JTklUCkBAIC05MTIsNiArOTEzLDE3IEBACiAKIAkgIFNlZSBEb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogCitjb25maWcgRE1BX0FQSV9ERUJVRworCWJvb2wgIkVuYWJsZSBkZWJ1Z2dpbmcgb2YgRE1BLUFQSSB1c2FnZSIKKwlkZXBlbmRzIG9uIEhBVkVfRE1BX0FQSV9ERUJVRworCWhlbHAKKwkgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBkZWJ1ZyB0aGUgdXNlIG9mIHRoZSBETUEgQVBJIGJ5IGRldmljZSBkcml2ZXJzLgorCSAgV2l0aCB0aGlzIG9wdGlvbiB5b3Ugd2lsbCBiZSBhYmxlIHRvIGRldGVjdCBjb21tb24gYnVncyBpbiBkZXZpY2UKKwkgIGRyaXZlcnMgbGlrZSBkb3VibGUtZnJlZWluZyBvZiBETUEgbWFwcGluZ3Mgb3IgZnJlZWluZyBtYXBwaW5ncyB0aGF0CisJICB3ZXJlIG5ldmVyIGFsbG9jYXRlZC4KKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBhIHBlcmZvcm1hbmNlIGRlZ3JlZGF0aW9uLiAgVXNlIG9ubHkgaWYgeW91IHdhbnQKKwkgIHRvIGRlYnVnIGRldmljZSBkcml2ZXJzLiBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgInNhbXBsZXMvS2NvbmZpZyIKIAogc291cmNlICJsaWIvS2NvbmZpZy5rZ2RiIgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDA1MWEzM2EuLmQ2ZWRkNjcgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTkwLDYgKzkwLDggQEAKIAogb2JqLSQoQ09ORklHX05MQVRUUikgKz0gbmxhdHRyLm8KIAorb2JqLSQoQ09ORklHX0RNQV9BUElfREVCVUcpICs9IGRtYS1kZWJ1Zy5vCisKIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCiBjbGVhbi1maWxlcwk6PSBjcmMzMnRhYmxlLmgKIApkaWZmIC0tZ2l0IGEvbGliL2NwdW1hc2suYyBiL2xpYi9jcHVtYXNrLmMKaW5kZXggMzM4OWUyNC4uMWY3MWI5NyAxMDA2NDQKLS0tIGEvbGliL2NwdW1hc2suYworKysgYi9saWIvY3B1bWFzay5jCkBAIC0xMDksMTAgKzEwOSwxMCBAQAogI2VuZGlmCiAJLyogRklYTUU6IEJhbmRhaWQgdG8gc2F2ZSB1cyBmcm9tIG9sZCBwcmltaXRpdmVzIHdoaWNoIGdvIHRvIE5SX0NQVVMuICovCiAJaWYgKCptYXNrKSB7CisJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopY3B1bWFza19iaXRzKCptYXNrKTsKIAkJdW5zaWduZWQgaW50IHRhaWw7CiAJCXRhaWwgPSBCSVRTX1RPX0xPTkdTKE5SX0NQVVMgLSBucl9jcHVtYXNrX2JpdHMpICogc2l6ZW9mKGxvbmcpOwotCQltZW1zZXQoY3B1bWFza19iaXRzKCptYXNrKSArIGNwdW1hc2tfc2l6ZSgpIC0gdGFpbCwKLQkJICAgICAgIDAsIHRhaWwpOworCQltZW1zZXQocHRyICsgY3B1bWFza19zaXplKCkgLSB0YWlsLCAwLCB0YWlsKTsKIAl9CiAKIAlyZXR1cm4gKm1hc2sgIT0gTlVMTDsKZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RhN2VkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC0wLDAgKzEsOTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBBdXRob3I6IEpvZXJnIFJvZWRlbCA8am9lcmcucm9lZGVsQGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKworI2RlZmluZSBIQVNIX1NJWkUgICAgICAgMTAyNFVMTAorI2RlZmluZSBIQVNIX0ZOX1NISUZUICAgMTMKKyNkZWZpbmUgSEFTSF9GTl9NQVNLICAgIChIQVNIX1NJWkUgLSAxKQorCitlbnVtIHsKKwlkbWFfZGVidWdfc2luZ2xlLAorCWRtYV9kZWJ1Z19wYWdlLAorCWRtYV9kZWJ1Z19zZywKKwlkbWFfZGVidWdfY29oZXJlbnQsCit9OworCisjZGVmaW5lIERNQV9ERUJVR19TVEFDS1RSQUNFX0VOVFJJRVMgNQorCitzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRldmljZSAgICAqZGV2OworCWludCAgICAgICAgICAgICAgdHlwZTsKKwlwaHlzX2FkZHJfdCAgICAgIHBhZGRyOworCXU2NCAgICAgICAgICAgICAgZGV2X2FkZHI7CisJdTY0ICAgICAgICAgICAgICBzaXplOworCWludCAgICAgICAgICAgICAgZGlyZWN0aW9uOworCWludAkJIHNnX2NhbGxfZW50czsKKwlpbnQJCSBzZ19tYXBwZWRfZW50czsKKyNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQorCXN0cnVjdAkJIHN0YWNrX3RyYWNlIHN0YWNrdHJhY2U7CisJdW5zaWduZWQgbG9uZwkgc3RfZW50cmllc1tETUFfREVCVUdfU1RBQ0tUUkFDRV9FTlRSSUVTXTsKKyNlbmRpZgorfTsKKworc3RydWN0IGhhc2hfYnVja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisvKiBIYXNoIGxpc3QgdG8gc2F2ZSB0aGUgYWxsb2NhdGVkIGRtYSBhZGRyZXNzZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaF9idWNrZXQgZG1hX2VudHJ5X2hhc2hbSEFTSF9TSVpFXTsKKy8qIExpc3Qgb2YgcHJlLWFsbG9jYXRlZCBkbWFfZGVidWdfZW50cnkncyAqLworc3RhdGljIExJU1RfSEVBRChmcmVlX2VudHJpZXMpOworLyogTG9jayBmb3IgdGhlIGxpc3QgYWJvdmUgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZnJlZV9lbnRyaWVzX2xvY2spOworCisvKiBHbG9iYWwgZGlzYWJsZSBmbGFnIC0gd2lsbCBiZSBzZXQgaW4gY2FzZSBvZiBhbiBlcnJvciAqLworc3RhdGljIGJvb2wgZ2xvYmFsX2Rpc2FibGUgX19yZWFkX21vc3RseTsKKworLyogR2xvYmFsIGVycm9yIGNvdW50ICovCitzdGF0aWMgdTMyIGVycm9yX2NvdW50OworCisvKiBHbG9iYWwgZXJyb3Igc2hvdyBlbmFibGUqLworc3RhdGljIHUzMiBzaG93X2FsbF9lcnJvcnMgX19yZWFkX21vc3RseTsKKy8qIE51bWJlciBvZiBlcnJvcnMgdG8gc2hvdyAqLworc3RhdGljIHUzMiBzaG93X251bV9lcnJvcnMgPSAxOworCitzdGF0aWMgdTMyIG51bV9mcmVlX2VudHJpZXM7CitzdGF0aWMgdTMyIG1pbl9mcmVlX2VudHJpZXM7CisKKy8qIG51bWJlciBvZiBwcmVhbGxvY2F0ZWQgZW50cmllcyByZXF1ZXN0ZWQgYnkga2VybmVsIGNtZGxpbmUgKi8KK3N0YXRpYyB1MzIgcmVxX2VudHJpZXM7CisKKy8qIGRlYnVnZnMgZGVudHJ5J3MgZm9yIHRoZSBzdHVmZiBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRtYV9kZWJ1Z19kZW50ICAgICAgICBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKmdsb2JhbF9kaXNhYmxlX2RlbnQgICBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKmVycm9yX2NvdW50X2RlbnQgICAgICBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnNob3dfYWxsX2Vycm9yc19kZW50ICBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKnNob3dfbnVtX2Vycm9yc19kZW50ICBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKm51bV9mcmVlX2VudHJpZXNfZGVudCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIHN0cnVjdCBkZW50cnkgKm1pbl9mcmVlX2VudHJpZXNfZGVudCBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgY29uc3QgY2hhciAqdHlwZTJuYW1lWzRdID0geyAic2luZ2xlIiwgInBhZ2UiLAorCQkJCSAgICAic2NhdGhlci1nYXRoZXIiLCAiY29oZXJlbnQiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICpkaXIybmFtZVs0XSA9IHsgIkRNQV9CSURJUkVDVElPTkFMIiwgIkRNQV9UT19ERVZJQ0UiLAorCQkJCSAgICJETUFfRlJPTV9ERVZJQ0UiLCAiRE1BX05PTkUiIH07CisKKy8qCisgKiBUaGUgYWNjZXNzIHRvIHNvbWUgdmFyaWFibGVzIGluIHRoaXMgbWFjcm8gaXMgcmFjeS4gV2UgY2FuJ3QgdXNlIGF0b21pY190CisgKiBoZXJlIGJlY2F1c2UgYWxsIHRoZXNlIHZhcmlhYmxlcyBhcmUgZXhwb3J0ZWQgdG8gZGVidWdmcy4gU29tZSBvZiB0aGVtIGV2ZW4KKyAqIHdyaXRlYWJsZS4gVGhpcyBpcyBhbHNvIHRoZSByZWFzb24gd2h5IGEgbG9jayB3b24ndCBoZWxwIG11Y2guIEJ1dCBhbnl3YXksCisgKiB0aGUgcmFjZXMgYXJlIG5vIGJpZyBkZWFsLiBIZXJlIGlzIHdoeToKKyAqCisgKiAgIGVycm9yX2NvdW50OiB0aGUgYWRkaXRpb24gaXMgcmFjeSwgYnV0IHRoZSB3b3JzdCB0aGluZyB0aGF0IGNhbiBoYXBwZW4gaXMKKyAqICAgICAgICAgICAgICAgIHRoYXQgd2UgZG9uJ3QgY291bnQgc29tZSBlcnJvcnMKKyAqICAgc2hvd19udW1fZXJyb3JzOiB0aGUgc3VidHJhY3Rpb24gaXMgcmFjeS4gQWxzbyBubyBiaWcgZGVhbCBiZWNhdXNlIGluCisgKiAgICAgICAgICAgICAgICAgICAgd29yc3QgY2FzZSB0aGlzIHdpbGwgcmVzdWx0IGluIG9uZSB3YXJuaW5nIG1vcmUgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGxvZyB0aGFuIHRoZSB1c2VyIGNvbmZpZ3VyZWQuIFRoaXMgdmFyaWFibGUgaXMKKyAqICAgICAgICAgICAgICAgICAgICB3cml0ZWFibGUgdmlhIGRlYnVnZnMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2VudHJ5X3RyYWNlKHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCisJaWYgKGVudHJ5KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1hcHBlZCBhdDpcbiIpOworCQlwcmludF9zdGFja190cmFjZSgmZW50cnktPnN0YWNrdHJhY2UsIDApOworCX0KKyNlbmRpZgorfQorCisjZGVmaW5lIGVycl9wcmludGsoZGV2LCBlbnRyeSwgZm9ybWF0LCBhcmcuLi4pIGRvIHsJCVwKKwkJZXJyb3JfY291bnQgKz0gMTsJCQkJXAorCQlpZiAoc2hvd19hbGxfZXJyb3JzIHx8IHNob3dfbnVtX2Vycm9ycyA+IDApIHsJXAorCQkJV0FSTigxLCAiJXMgJXM6ICIgZm9ybWF0LAkJXAorCQkJICAgICBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLAkJXAorCQkJICAgICBkZXZfbmFtZShkZXYpICwgIyMgYXJnKTsJCVwKKwkJCWR1bXBfZW50cnlfdHJhY2UoZW50cnkpOwkJXAorCQl9CQkJCQkJXAorCQlpZiAoIXNob3dfYWxsX2Vycm9ycyAmJiBzaG93X251bV9lcnJvcnMgPiAwKQlcCisJCQlzaG93X251bV9lcnJvcnMgLT0gMTsJCQlcCisJfSB3aGlsZSAoMCk7CisKKy8qCisgKiBIYXNoIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICogRXZlcnkgRE1BLUFQSSByZXF1ZXN0IGlzIHNhdmVkIGludG8gYSBzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5LiBUbworICogaGF2ZSBxdWljayBhY2Nlc3MgdG8gdGhlc2Ugc3RydWN0cyB0aGV5IGFyZSBzdG9yZWQgaW50byBhIGhhc2guCisgKi8KK3N0YXRpYyBpbnQgaGFzaF9mbihzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSkKK3sKKwkvKgorCSAqIEhhc2ggZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIGRtYSBhZGRyZXNzLgorCSAqIFdlIHVzZSBiaXRzIDIwLTI3IGhlcmUgYXMgdGhlIGluZGV4IGludG8gdGhlIGhhc2gKKwkgKi8KKwlyZXR1cm4gKGVudHJ5LT5kZXZfYWRkciA+PiBIQVNIX0ZOX1NISUZUKSAmIEhBU0hfRk5fTUFTSzsKK30KKworLyoKKyAqIFJlcXVlc3QgZXhjbHVzaXZlIGFjY2VzcyB0byBhIGhhc2ggYnVja2V0IGZvciBhIGdpdmVuIGRtYV9kZWJ1Z19lbnRyeS4KKyAqLworc3RhdGljIHN0cnVjdCBoYXNoX2J1Y2tldCAqZ2V0X2hhc2hfYnVja2V0KHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5LAorCQkJCQkgICB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwlpbnQgaWR4ID0gaGFzaF9mbihlbnRyeSk7CisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9lbnRyeV9oYXNoW2lkeF0ubG9jaywgX19mbGFncyk7CisJKmZsYWdzID0gX19mbGFnczsKKwlyZXR1cm4gJmRtYV9lbnRyeV9oYXNoW2lkeF07Cit9CisKKy8qCisgKiBHaXZlIHVwIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGhhc2ggYnVja2V0CisgKi8KK3N0YXRpYyB2b2lkIHB1dF9oYXNoX2J1Y2tldChzdHJ1Y3QgaGFzaF9idWNrZXQgKmJ1Y2tldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIF9fZmxhZ3MgPSAqZmxhZ3M7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWNrZXQtPmxvY2ssIF9fZmxhZ3MpOworfQorCisvKgorICogU2VhcmNoIGEgZ2l2ZW4gZW50cnkgaW4gdGhlIGhhc2ggYnVja2V0IGxpc3QKKyAqLworc3RhdGljIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmhhc2hfYnVja2V0X2ZpbmQoc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQsCisJCQkJCQlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICpyZWYpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYnVja2V0LT5saXN0LCBsaXN0KSB7CisJCWlmICgoZW50cnktPmRldl9hZGRyID09IHJlZi0+ZGV2X2FkZHIpICYmCisJCSAgICAoZW50cnktPmRldiA9PSByZWYtPmRldikpCisJCQlyZXR1cm4gZW50cnk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBBZGQgYW4gZW50cnkgdG8gYSBoYXNoIGJ1Y2tldAorICovCitzdGF0aWMgdm9pZCBoYXNoX2J1Y2tldF9hZGQoc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQsCisJCQkgICAgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZidWNrZXQtPmxpc3QpOworfQorCisvKgorICogUmVtb3ZlIGVudHJ5IGZyb20gYSBoYXNoIGJ1Y2tldCBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGhhc2hfYnVja2V0X2RlbChzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSkKK3sKKwlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworfQorCisvKgorICogRHVtcCBtYXBwaW5nIGVudHJpZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworICovCit2b2lkIGRlYnVnX2RtYV9kdW1wX21hcHBpbmdzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBIQVNIX1NJWkU7IGlkeCsrKSB7CisJCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0ID0gJmRtYV9lbnRyeV9oYXNoW2lkeF07CisJCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZidWNrZXQtPmxvY2ssIGZsYWdzKTsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYnVja2V0LT5saXN0LCBsaXN0KSB7CisJCQlpZiAoIWRldiB8fCBkZXYgPT0gZW50cnktPmRldikgeworCQkJCWRldl9pbmZvKGVudHJ5LT5kZXYsCisJCQkJCSAiJXMgaWR4ICVkIFA9JUx4IEQ9JUx4IEw9JUx4ICVzXG4iLAorCQkJCQkgdHlwZTJuYW1lW2VudHJ5LT50eXBlXSwgaWR4LAorCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyllbnRyeS0+cGFkZHIsCisJCQkJCSBlbnRyeS0+ZGV2X2FkZHIsIGVudHJ5LT5zaXplLAorCQkJCQkgZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0pOworCQkJfQorCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVja2V0LT5sb2NrLCBmbGFncyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfZHVtcF9tYXBwaW5ncyk7CisKKy8qCisgKiBXcmFwcGVyIGZ1bmN0aW9uIGZvciBhZGRpbmcgYW4gZW50cnkgdG8gdGhlIGhhc2guCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgbG9ja2luZyBpdHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9kbWFfZW50cnkoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJ1Y2tldCA9IGdldF9oYXNoX2J1Y2tldChlbnRyeSwgJmZsYWdzKTsKKwloYXNoX2J1Y2tldF9hZGQoYnVja2V0LCBlbnRyeSk7CisJcHV0X2hhc2hfYnVja2V0KGJ1Y2tldCwgJmZsYWdzKTsKK30KKworLyogc3RydWN0IGRtYV9lbnRyeSBhbGxvY2F0b3IKKyAqCisgKiBUaGUgbmV4dCB0d28gZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgYWxsb2NhdG9yIGZvcgorICogc3RydWN0IGRtYV9kZWJ1Z19lbnRyaWVzLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZG1hX2VudHJ5X2FsbG9jKHZvaWQpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZV9lbnRyaWVzX2xvY2ssIGZsYWdzKTsKKworCWlmIChsaXN0X2VtcHR5KCZmcmVlX2VudHJpZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogZGVidWdnaW5nIG91dCBvZiBtZW1vcnkgIgorCQkJCSItIGRpc2FibGluZ1xuIik7CisJCWdsb2JhbF9kaXNhYmxlID0gdHJ1ZTsKKwkJZ290byBvdXQ7CisJfQorCisJZW50cnkgPSBsaXN0X2VudHJ5KGZyZWVfZW50cmllcy5uZXh0LCBzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5LCBsaXN0KTsKKwlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworCisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKKwllbnRyeS0+c3RhY2t0cmFjZS5tYXhfZW50cmllcyA9IERNQV9ERUJVR19TVEFDS1RSQUNFX0VOVFJJRVM7CisJZW50cnktPnN0YWNrdHJhY2UuZW50cmllcyA9IGVudHJ5LT5zdF9lbnRyaWVzOworCWVudHJ5LT5zdGFja3RyYWNlLnNraXAgPSAyOworCXNhdmVfc3RhY2tfdHJhY2UoJmVudHJ5LT5zdGFja3RyYWNlKTsKKyNlbmRpZgorCW51bV9mcmVlX2VudHJpZXMgLT0gMTsKKwlpZiAobnVtX2ZyZWVfZW50cmllcyA8IG1pbl9mcmVlX2VudHJpZXMpCisJCW1pbl9mcmVlX2VudHJpZXMgPSBudW1fZnJlZV9lbnRyaWVzOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnJlZV9lbnRyaWVzX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQgZG1hX2VudHJ5X2ZyZWUoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogYWRkIHRvIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAtIHRoaXMgd2F5IHRoZSBlbnRyaWVzIGFyZQorCSAqIG1vcmUgbGlrZWx5IGNhY2hlIGhvdCB3aGVuIHRoZXkgYXJlIHJlYWxsb2NhdGVkLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZmcmVlX2VudHJpZXNfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZlbnRyeS0+bGlzdCwgJmZyZWVfZW50cmllcyk7CisJbnVtX2ZyZWVfZW50cmllcyArPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWVfZW50cmllc19sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBETUEtQVBJIGRlYnVnZ2luZyBpbml0IGNvZGUKKyAqCisgKiBUaGUgaW5pdCBjb2RlIGRvZXMgdHdvIHRoaW5nczoKKyAqICAgMS4gSW5pdGlhbGl6ZSBjb3JlIGRhdGEgc3RydWN0dXJlcworICogICAyLiBQcmVhbGxvY2F0ZSBhIGdpdmVuIG51bWJlciBvZiBkbWFfZGVidWdfZW50cnkgc3RydWN0cworICovCisKK3N0YXRpYyBpbnQgcHJlYWxsb2NfbWVtb3J5KHUzMiBudW1fZW50cmllcykKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSwgKm5leHRfZW50cnk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7ICsraSkgeworCQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCQlpZiAoIWVudHJ5KQorCQkJZ290byBvdXRfZXJyOworCisJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmZnJlZV9lbnRyaWVzKTsKKwl9CisKKwludW1fZnJlZV9lbnRyaWVzID0gbnVtX2VudHJpZXM7CisJbWluX2ZyZWVfZW50cmllcyA9IG51bV9lbnRyaWVzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRE1BLUFQSTogcHJlYWxsb2NhdGVkICVkIGRlYnVnIGVudHJpZXNcbiIsCisJCQludW1fZW50cmllcyk7CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dF9lbnRyeSwgJmZyZWVfZW50cmllcywgbGlzdCkgeworCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQlrZnJlZShlbnRyeSk7CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgZG1hX2RlYnVnX2ZzX2luaXQodm9pZCkKK3sKKwlkbWFfZGVidWdfZGVudCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZG1hLWFwaSIsIE5VTEwpOworCWlmICghZG1hX2RlYnVnX2RlbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEtQVBJOiBjYW4gbm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWdsb2JhbF9kaXNhYmxlX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCJkaXNhYmxlZCIsIDA0NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSh1MzIgKikmZ2xvYmFsX2Rpc2FibGUpOworCWlmICghZ2xvYmFsX2Rpc2FibGVfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJZXJyb3JfY291bnRfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigiZXJyb3JfY291bnQiLCAwNDQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsICZlcnJvcl9jb3VudCk7CisJaWYgKCFlcnJvcl9jb3VudF9kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwlzaG93X2FsbF9lcnJvcnNfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigiYWxsX2Vycm9ycyIsIDA2NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSZzaG93X2FsbF9lcnJvcnMpOworCWlmICghc2hvd19hbGxfZXJyb3JzX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCXNob3dfbnVtX2Vycm9yc19kZW50ID0gZGVidWdmc19jcmVhdGVfdTMyKCJudW1fZXJyb3JzIiwgMDY0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LAorCQkJJnNob3dfbnVtX2Vycm9ycyk7CisJaWYgKCFzaG93X251bV9lcnJvcnNfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJbnVtX2ZyZWVfZW50cmllc19kZW50ID0gZGVidWdmc19jcmVhdGVfdTMyKCJudW1fZnJlZV9lbnRyaWVzIiwgMDQ0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LAorCQkJJm51bV9mcmVlX2VudHJpZXMpOworCWlmICghbnVtX2ZyZWVfZW50cmllc19kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwltaW5fZnJlZV9lbnRyaWVzX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoIm1pbl9mcmVlX2VudHJpZXMiLCAwNDQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsCisJCQkmbWluX2ZyZWVfZW50cmllcyk7CisJaWYgKCFtaW5fZnJlZV9lbnRyaWVzX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCXJldHVybiAwOworCitvdXRfZXJyOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkbWFfZGVidWdfZGVudCk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBkZXZpY2VfZG1hX2FsbG9jYXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudCA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgSEFTSF9TSVpFOyArK2kpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9lbnRyeV9oYXNoW2ldLmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRtYV9lbnRyeV9oYXNoW2ldLmxpc3QsIGxpc3QpIHsKKwkJCWlmIChlbnRyeS0+ZGV2ID09IGRldikKKwkJCQljb3VudCArPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9lbnRyeV9oYXNoW2ldLmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgZG1hX2RlYnVnX2RldmljZV9jaGFuZ2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKwlpbnQgY291bnQ7CisKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBCVVNfTk9USUZZX1VOQklORF9EUklWRVI6CisJCWNvdW50ID0gZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhkZXYpOworCQlpZiAoY291bnQgPT0gMCkKKwkJCWJyZWFrOworCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgaGFzIHBlbmRpbmcgIgorCQkJCSJETUEgYWxsb2NhdGlvbnMgd2hpbGUgcmVsZWFzZWQgZnJvbSBkZXZpY2UgIgorCQkJCSJbY291bnQ9JWRdXG4iLCBjb3VudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRtYV9kZWJ1Z19hZGRfYnVzKHN0cnVjdCBidXNfdHlwZSAqYnVzKQoreworCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbmI7CisKKwluYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub3RpZmllcl9ibG9jayksIEdGUF9LRVJORUwpOworCWlmIChuYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hX2RlYnVnX2FkZF9idXM6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJbmItPm5vdGlmaWVyX2NhbGwgPSBkbWFfZGVidWdfZGV2aWNlX2NoYW5nZTsKKworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcihidXMsIG5iKTsKK30KKworLyoKKyAqIExldCB0aGUgYXJjaGl0ZWN0dXJlcyBkZWNpZGUgaG93IG1hbnkgZW50cmllcyBzaG91bGQgYmUgcHJlYWxsb2NhdGVkLgorICovCit2b2lkIGRtYV9kZWJ1Z19pbml0KHUzMiBudW1fZW50cmllcykKK3sKKwlpbnQgaTsKKworCWlmIChnbG9iYWxfZGlzYWJsZSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgKytpKSB7CisJCUlOSVRfTElTVF9IRUFEKCZkbWFfZW50cnlfaGFzaFtpXS5saXN0KTsKKwkJZG1hX2VudHJ5X2hhc2hbaV0ubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKwl9CisKKwlpZiAoZG1hX2RlYnVnX2ZzX2luaXQoKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogZXJyb3IgY3JlYXRpbmcgZGVidWdmcyBlbnRyaWVzICIKKwkJCQkiLSBkaXNhYmxpbmdcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisKKwkJcmV0dXJuOworCX0KKworCWlmIChyZXFfZW50cmllcykKKwkJbnVtX2VudHJpZXMgPSByZXFfZW50cmllczsKKworCWlmIChwcmVhbGxvY19tZW1vcnkobnVtX2VudHJpZXMpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEtQVBJOiBkZWJ1Z2dpbmcgb3V0IG9mIG1lbW9yeSBlcnJvciAiCisJCQkJIi0gZGlzYWJsZWRcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisKKwkJcmV0dXJuOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIkRNQS1BUEk6IGRlYnVnZ2luZyBlbmFibGVkIGJ5IGtlcm5lbCBjb25maWdcbiIpOworfQorCitzdGF0aWMgX19pbml0IGludCBkbWFfZGVidWdfY21kbGluZShjaGFyICpzdHIpCit7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cm5jbXAoc3RyLCAib2ZmIiwgMykgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJETUEtQVBJOiBkZWJ1Z2dpbmcgZGlzYWJsZWQgb24ga2VybmVsICIKKwkJCQkgImNvbW1hbmQgbGluZVxuIik7CisJCWdsb2JhbF9kaXNhYmxlID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCBpbnQgZG1hX2RlYnVnX2VudHJpZXNfY21kbGluZShjaGFyICpzdHIpCit7CisJaW50IHJlczsKKworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcyA9IGdldF9vcHRpb24oJnN0ciwgJnJlcV9lbnRyaWVzKTsKKworCWlmICghcmVzKQorCQlyZXFfZW50cmllcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworX19zZXR1cCgiZG1hX2RlYnVnPSIsIGRtYV9kZWJ1Z19jbWRsaW5lKTsKK19fc2V0dXAoImRtYV9kZWJ1Z19lbnRyaWVzPSIsIGRtYV9kZWJ1Z19lbnRyaWVzX2NtZGxpbmUpOworCitzdGF0aWMgdm9pZCBjaGVja191bm1hcChzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICpyZWYpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisJc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChkbWFfbWFwcGluZ19lcnJvcihyZWYtPmRldiwgcmVmLT5kZXZfYWRkcikpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgdHJpZXMgIgorCQkJICAgInRvIGZyZWUgYW4gaW52YWxpZCBETUEgbWVtb3J5IGFkZHJlc3NcbiIpOworCQlyZXR1cm47CisJfQorCisJYnVja2V0ID0gZ2V0X2hhc2hfYnVja2V0KHJlZiwgJmZsYWdzKTsKKwllbnRyeSA9IGhhc2hfYnVja2V0X2ZpbmQoYnVja2V0LCByZWYpOworCisJaWYgKCFlbnRyeSkgeworCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBOVUxMLCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciB0cmllcyAiCisJCQkgICAidG8gZnJlZSBETUEgbWVtb3J5IGl0IGhhcyBub3QgYWxsb2NhdGVkICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXVxuIiwKKwkJCSAgIHJlZi0+ZGV2X2FkZHIsIHJlZi0+c2l6ZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZWYtPnNpemUgIT0gZW50cnktPnNpemUpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IHNpemUgIgorCQkJICAgIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFttYXAgc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkgICAiW3VubWFwIHNpemU9JWxsdSBieXRlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwgcmVmLT5zaXplKTsKKwl9CisKKwlpZiAocmVmLT50eXBlICE9IGVudHJ5LT50eXBlKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCisJCQkgICAiRE1BIG1lbW9yeSB3aXRoIHdyb25nIGZ1bmN0aW9uICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkgICAiW21hcHBlZCBhcyAlc10gW3VubWFwcGVkIGFzICVzXVxuIiwKKwkJCSAgIHJlZi0+ZGV2X2FkZHIsIHJlZi0+c2l6ZSwKKwkJCSAgIHR5cGUybmFtZVtlbnRyeS0+dHlwZV0sIHR5cGUybmFtZVtyZWYtPnR5cGVdKTsKKwl9IGVsc2UgaWYgKChlbnRyeS0+dHlwZSA9PSBkbWFfZGVidWdfY29oZXJlbnQpICYmCisJCSAgIChyZWYtPnBhZGRyICE9IGVudHJ5LT5wYWRkcikpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IENQVSBhZGRyZXNzICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkgICAiW2NwdSBhbGxvYyBhZGRyZXNzPSVwXSBbY3B1IGZyZWUgYWRkcmVzcz0lcF0iLAorCQkJICAgcmVmLT5kZXZfYWRkciwgcmVmLT5zaXplLAorCQkJICAgKHZvaWQgKillbnRyeS0+cGFkZHIsICh2b2lkICopcmVmLT5wYWRkcik7CisJfQorCisJaWYgKHJlZi0+c2dfY2FsbF9lbnRzICYmIHJlZi0+dHlwZSA9PSBkbWFfZGVidWdfc2cgJiYKKwkgICAgcmVmLT5zZ19jYWxsX2VudHMgIT0gZW50cnktPnNnX2NhbGxfZW50cykgeworCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgorCQkJICAgIkRNQSBzZyBsaXN0IHdpdGggZGlmZmVyZW50IGVudHJ5IGNvdW50ICIKKwkJCSAgICJbbWFwIGNvdW50PSVkXSBbdW5tYXAgY291bnQ9JWRdXG4iLAorCQkJICAgZW50cnktPnNnX2NhbGxfZW50cywgcmVmLT5zZ19jYWxsX2VudHMpOworCX0KKworCS8qCisJICogVGhpcyBtYXkgYmUgbm8gYnVnIGluIHJlYWxpdHkgLSBidXQgbW9zdCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlCisJICogRE1BIEFQSSBkb24ndCBoYW5kbGUgdGhpcyBwcm9wZXJseSwgc28gY2hlY2sgZm9yIGl0IGhlcmUKKwkgKi8KKwlpZiAocmVmLT5kaXJlY3Rpb24gIT0gZW50cnktPmRpcmVjdGlvbikgeworCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgorCQkJICAgIkRNQSBtZW1vcnkgd2l0aCBkaWZmZXJlbnQgZGlyZWN0aW9uICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkgICAiW21hcHBlZCB3aXRoICVzXSBbdW5tYXBwZWQgd2l0aCAlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCisJCQkgICBkaXIybmFtZVtlbnRyeS0+ZGlyZWN0aW9uXSwKKwkJCSAgIGRpcjJuYW1lW3JlZi0+ZGlyZWN0aW9uXSk7CisJfQorCisJaGFzaF9idWNrZXRfZGVsKGVudHJ5KTsKKwlkbWFfZW50cnlfZnJlZShlbnRyeSk7CisKK291dDoKKwlwdXRfaGFzaF9idWNrZXQoYnVja2V0LCAmZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3Jfc3RhY2soc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyKQoreworCWlmIChvYmplY3RfaXNfb25fc3RhY2soYWRkcikpCisJCWVycl9wcmludGsoZGV2LCBOVUxMLCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBtYXBzIG1lbW9yeSBmcm9tIgorCQkJCSJzdGFjayBbYWRkcj0lcF1cbiIsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgb3ZlcmxhcCh2b2lkICphZGRyLCB1NjQgc2l6ZSwgdm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKK3sKKwl2b2lkICphZGRyMiA9IChjaGFyICopYWRkciArIHNpemU7CisKKwlyZXR1cm4gKChhZGRyID49IHN0YXJ0ICYmIGFkZHIgPCBlbmQpIHx8CisJCShhZGRyMiA+PSBzdGFydCAmJiBhZGRyMiA8IGVuZCkgfHwKKwkJKChhZGRyIDwgc3RhcnQpICYmIChhZGRyMiA+PSBlbmQpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl9pbGxlZ2FsX2FyZWEoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLCB1NjQgc2l6ZSkKK3sKKwlpZiAob3ZlcmxhcChhZGRyLCBzaXplLCBfdGV4dCwgX2V0ZXh0KSB8fAorCSAgICBvdmVybGFwKGFkZHIsIHNpemUsIF9fc3RhcnRfcm9kYXRhLCBfX2VuZF9yb2RhdGEpKQorCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgbWFwcyAiCisJCQkJIm1lbW9yeSBmcm9tIGtlcm5lbCB0ZXh0IG9yIHJvZGF0YSAiCisJCQkJIlthZGRyPSVwXSBbc2l6ZT0lbGx1XVxuIiwgYWRkciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCSAgICAgICB1NjQgc2l6ZSwgdTY0IG9mZnNldCwgaW50IGRpcmVjdGlvbiwgYm9vbCB0b19jcHUpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWYgPSB7CisJCS5kZXYgICAgICAgICAgICA9IGRldiwKKwkJLmRldl9hZGRyICAgICAgID0gYWRkciwKKwkJLnNpemUgICAgICAgICAgID0gc2l6ZSwKKwkJLmRpcmVjdGlvbiAgICAgID0gZGlyZWN0aW9uLAorCX07CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisJc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJ1Y2tldCA9IGdldF9oYXNoX2J1Y2tldCgmcmVmLCAmZmxhZ3MpOworCisJZW50cnkgPSBoYXNoX2J1Y2tldF9maW5kKGJ1Y2tldCwgJnJlZik7CisKKwlpZiAoIWVudHJ5KSB7CisJCWVycl9wcmludGsoZGV2LCBOVUxMLCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciB0cmllcyAiCisJCQkJInRvIHN5bmMgRE1BIG1lbW9yeSBpdCBoYXMgbm90IGFsbG9jYXRlZCAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgc2l6ZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBlbnRyeS0+c2l6ZSkgeworCQllcnJfcHJpbnRrKGRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHN5bmNzIgorCQkJCSIgRE1BIG1lbW9yeSBvdXRzaWRlIGFsbG9jYXRlZCByYW5nZSAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdICIKKwkJCQkiW2FsbG9jYXRpb24gc2l6ZT0lbGx1IGJ5dGVzXSBbc3luYyBvZmZzZXQ9JWxsdV0gIgorCQkJCSJbc3luYyBzaXplPSVsbHVdXG4iLCBlbnRyeS0+ZGV2X2FkZHIsIGVudHJ5LT5zaXplLAorCQkJCW9mZnNldCwgc2l6ZSk7CisJfQorCisJaWYgKGRpcmVjdGlvbiAhPSBlbnRyeS0+ZGlyZWN0aW9uKSB7CisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgorCQkJCSJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IGRpcmVjdGlvbiAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKKwkJCQkiW21hcHBlZCB3aXRoICVzXSBbc3luY2VkIHdpdGggJXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgZW50cnktPnNpemUsCisJCQkJZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkJZGlyMm5hbWVbZGlyZWN0aW9uXSk7CisJfQorCisJaWYgKGVudHJ5LT5kaXJlY3Rpb24gPT0gRE1BX0JJRElSRUNUSU9OQUwpCisJCWdvdG8gb3V0OworCisJaWYgKHRvX2NwdSAmJiAhKGVudHJ5LT5kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSAmJgorCQkgICAgICAhKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSkKKwkJZXJyX3ByaW50ayhkZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBzeW5jcyAiCisJCQkJImRldmljZSByZWFkLW9ubHkgRE1BIG1lbW9yeSBmb3IgY3B1ICIKKwkJCQkiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJCSJbbWFwcGVkIHdpdGggJXNdIFtzeW5jZWQgd2l0aCAlc11cbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQlkaXIybmFtZVtlbnRyeS0+ZGlyZWN0aW9uXSwKKwkJCQlkaXIybmFtZVtkaXJlY3Rpb25dKTsKKworCWlmICghdG9fY3B1ICYmICEoZW50cnktPmRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSAmJgorCQkgICAgICAgIShkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSkKKwkJZXJyX3ByaW50ayhkZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBzeW5jcyAiCisJCQkJImRldmljZSB3cml0ZS1vbmx5IERNQSBtZW1vcnkgdG8gZGV2aWNlICIKKwkJCQkiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJCSJbbWFwcGVkIHdpdGggJXNdIFtzeW5jZWQgd2l0aCAlc11cbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQlkaXIybmFtZVtlbnRyeS0+ZGlyZWN0aW9uXSwKKwkJCQlkaXIybmFtZVtkaXJlY3Rpb25dKTsKKworb3V0OgorCXB1dF9oYXNoX2J1Y2tldChidWNrZXQsICZmbGFncyk7CisKK30KKwordm9pZCBkZWJ1Z19kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc2l6ZV90IG9mZnNldCwKKwkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJYm9vbCBtYXBfc2luZ2xlKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSkKKwkJcmV0dXJuOworCisJZW50cnkgPSBkbWFfZW50cnlfYWxsb2MoKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwllbnRyeS0+ZGV2ICAgICAgID0gZGV2OworCWVudHJ5LT50eXBlICAgICAgPSBkbWFfZGVidWdfcGFnZTsKKwllbnRyeS0+cGFkZHIgICAgID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworCWVudHJ5LT5kZXZfYWRkciAgPSBkbWFfYWRkcjsKKwllbnRyeS0+c2l6ZSAgICAgID0gc2l6ZTsKKwllbnRyeS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCisJaWYgKG1hcF9zaW5nbGUpCisJCWVudHJ5LT50eXBlID0gZG1hX2RlYnVnX3NpbmdsZTsKKworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJdm9pZCAqYWRkciA9ICgoY2hhciAqKXBhZ2VfYWRkcmVzcyhwYWdlKSkgKyBvZmZzZXQ7CisJCWNoZWNrX2Zvcl9zdGFjayhkZXYsIGFkZHIpOworCQljaGVja19mb3JfaWxsZWdhbF9hcmVhKGRldiwgYWRkciwgc2l6ZSk7CisJfQorCisJYWRkX2RtYV9lbnRyeShlbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9tYXBfcGFnZSk7CisKK3ZvaWQgZGVidWdfZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLCBib29sIG1hcF9zaW5nbGUpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWYgPSB7CisJCS50eXBlICAgICAgICAgICA9IGRtYV9kZWJ1Z19wYWdlLAorCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCisJCS5kZXZfYWRkciAgICAgICA9IGFkZHIsCisJCS5zaXplICAgICAgICAgICA9IHNpemUsCisJCS5kaXJlY3Rpb24gICAgICA9IGRpcmVjdGlvbiwKKwl9OworCisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJaWYgKG1hcF9zaW5nbGUpCisJCXJlZi50eXBlID0gZG1hX2RlYnVnX3NpbmdsZTsKKworCWNoZWNrX3VubWFwKCZyZWYpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfdW5tYXBfcGFnZSk7CisKK3ZvaWQgZGVidWdfZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgIGludCBuZW50cywgaW50IG1hcHBlZF9lbnRzLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBtYXBwZWRfZW50cywgaSkgeworCQllbnRyeSA9IGRtYV9lbnRyeV9hbGxvYygpOworCQlpZiAoIWVudHJ5KQorCQkJcmV0dXJuOworCisJCWVudHJ5LT50eXBlICAgICAgICAgICA9IGRtYV9kZWJ1Z19zZzsKKwkJZW50cnktPmRldiAgICAgICAgICAgID0gZGV2OworCQllbnRyeS0+cGFkZHIgICAgICAgICAgPSBzZ19waHlzKHMpOworCQllbnRyeS0+c2l6ZSAgICAgICAgICAgPSBzLT5sZW5ndGg7CisJCWVudHJ5LT5kZXZfYWRkciAgICAgICA9IHMtPmRtYV9hZGRyZXNzOworCQllbnRyeS0+ZGlyZWN0aW9uICAgICAgPSBkaXJlY3Rpb247CisJCWVudHJ5LT5zZ19jYWxsX2VudHMgICA9IG5lbnRzOworCQllbnRyeS0+c2dfbWFwcGVkX2VudHMgPSBtYXBwZWRfZW50czsKKworCQlpZiAoIVBhZ2VIaWdoTWVtKHNnX3BhZ2UocykpKSB7CisJCQljaGVja19mb3Jfc3RhY2soZGV2LCBzZ192aXJ0KHMpKTsKKwkJCWNoZWNrX2Zvcl9pbGxlZ2FsX2FyZWEoZGV2LCBzZ192aXJ0KHMpLCBzLT5sZW5ndGgpOworCQl9CisKKwkJYWRkX2RtYV9lbnRyeShlbnRyeSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfbWFwX3NnKTsKKwordm9pZCBkZWJ1Z19kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCWludCBuZWxlbXMsIGludCBkaXIpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCWludCBtYXBwZWRfZW50cyA9IDAsIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnbGlzdCwgcywgbmVsZW1zLCBpKSB7CisKKwkJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWYgPSB7CisJCQkudHlwZSAgICAgICAgICAgPSBkbWFfZGVidWdfc2csCisJCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCisJCQkucGFkZHIgICAgICAgICAgPSBzZ19waHlzKHMpLAorCQkJLmRldl9hZGRyICAgICAgID0gcy0+ZG1hX2FkZHJlc3MsCisJCQkuc2l6ZSAgICAgICAgICAgPSBzLT5sZW5ndGgsCisJCQkuZGlyZWN0aW9uICAgICAgPSBkaXIsCisJCQkuc2dfY2FsbF9lbnRzICAgPSAwLAorCQl9OworCisJCWlmIChtYXBwZWRfZW50cyAmJiBpID49IG1hcHBlZF9lbnRzKQorCQkJYnJlYWs7CisKKwkJaWYgKG1hcHBlZF9lbnRzID09IDApIHsKKwkJCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCQkJcmVmLnNnX2NhbGxfZW50cyA9IG5lbGVtczsKKwkJCWJ1Y2tldCA9IGdldF9oYXNoX2J1Y2tldCgmcmVmLCAmZmxhZ3MpOworCQkJZW50cnkgPSBoYXNoX2J1Y2tldF9maW5kKGJ1Y2tldCwgJnJlZik7CisJCQlpZiAoZW50cnkpCisJCQkJbWFwcGVkX2VudHMgPSBlbnRyeS0+c2dfbWFwcGVkX2VudHM7CisJCQlwdXRfaGFzaF9idWNrZXQoYnVja2V0LCAmZmxhZ3MpOworCQl9CisKKwkJY2hlY2tfdW5tYXAoJnJlZik7CisJfQorfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfdW5tYXBfc2cpOworCit2b2lkIGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmlydCkKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSh2aXJ0ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwllbnRyeSA9IGRtYV9lbnRyeV9hbGxvYygpOworCWlmICghZW50cnkpCisJCXJldHVybjsKKworCWVudHJ5LT50eXBlICAgICAgPSBkbWFfZGVidWdfY29oZXJlbnQ7CisJZW50cnktPmRldiAgICAgICA9IGRldjsKKwllbnRyeS0+cGFkZHIgICAgID0gdmlydF90b19waHlzKHZpcnQpOworCWVudHJ5LT5zaXplICAgICAgPSBzaXplOworCWVudHJ5LT5kZXZfYWRkciAgPSBkbWFfYWRkcjsKKwllbnRyeS0+ZGlyZWN0aW9uID0gRE1BX0JJRElSRUNUSU9OQUw7CisKKwlhZGRfZG1hX2VudHJ5KGVudHJ5KTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX2FsbG9jX2NvaGVyZW50KTsKKwordm9pZCBkZWJ1Z19kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgYWRkcikKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5IHJlZiA9IHsKKwkJLnR5cGUgICAgICAgICAgID0gZG1hX2RlYnVnX2NvaGVyZW50LAorCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCisJCS5wYWRkciAgICAgICAgICA9IHZpcnRfdG9fcGh5cyh2aXJ0KSwKKwkJLmRldl9hZGRyICAgICAgID0gYWRkciwKKwkJLnNpemUgICAgICAgICAgID0gc2l6ZSwKKwkJLmRpcmVjdGlvbiAgICAgID0gRE1BX0JJRElSRUNUSU9OQUwsCisJfTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3VubWFwKCZyZWYpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfZnJlZV9jb2hlcmVudCk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJY2hlY2tfc3luYyhkZXYsIGRtYV9oYW5kbGUsIHNpemUsIDAsIGRpcmVjdGlvbiwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCAwLCBkaXJlY3Rpb24sIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpOworCit2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkJIGludCBkaXJlY3Rpb24pCit7CisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJY2hlY2tfc3luYyhkZXYsIGRtYV9oYW5kbGUsIHNpemUsIG9mZnNldCwgZGlyZWN0aW9uLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpOworCit2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCit7CisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJY2hlY2tfc3luYyhkZXYsIGRtYV9oYW5kbGUsIHNpemUsIG9mZnNldCwgZGlyZWN0aW9uLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZWxlbXMsIGkpIHsKKwkJY2hlY2tfc3luYyhkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCAwLAorCQkJCWRpcmVjdGlvbiwgdHJ1ZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCWludCBpOworCisJaWYgKHVubGlrZWx5KGdsb2JhbF9kaXNhYmxlKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc2coc2csIHMsIG5lbGVtcywgaSkgeworCQljaGVja19zeW5jKGRldiwgcy0+ZG1hX2FkZHJlc3MsIHMtPmRtYV9sZW5ndGgsIDAsCisJCQkJZGlyZWN0aW9uLCBmYWxzZSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zZ19mb3JfZGV2aWNlKTsKKwpkaWZmIC0tZ2l0IGEvbGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IGRhYjRiY2EuLjgwY2E5YWMgMTAwNjQ0Ci0tLSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTU3OSw2ICs1NzksNTIgQEAKIEVYUE9SVF9TWU1CT0woaWRyX2Zvcl9lYWNoKTsKIAogLyoqCisgKiBpZHJfZ2V0X25leHQgLSBsb29rdXAgbmV4dCBvYmplY3Qgb2YgaWQgdG8gZ2l2ZW4gaWQuCisgKiBAaWRwOiBpZHIgaGFuZGxlCisgKiBAaWQ6ICBwb2ludGVyIHRvIGxvb2t1cCBrZXkKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcmVnaXN0ZXJlZCBvYmplY3Qgd2l0aCBpZCwgd2hpY2ggaXMgbmV4dCBudW1iZXIgdG8KKyAqIGdpdmVuIGlkLgorICovCisKK3ZvaWQgKmlkcl9nZXRfbmV4dChzdHJ1Y3QgaWRyICppZHAsIGludCAqbmV4dGlkcCkKK3sKKwlzdHJ1Y3QgaWRyX2xheWVyICpwLCAqcGFbTUFYX0xFVkVMXTsKKwlzdHJ1Y3QgaWRyX2xheWVyICoqcGFhID0gJnBhWzBdOworCWludCBpZCA9ICpuZXh0aWRwOworCWludCBuLCBtYXg7CisKKwkvKiBmaW5kIGZpcnN0IGVudCAqLworCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOworCW1heCA9IDEgPDwgbjsKKwlwID0gcmN1X2RlcmVmZXJlbmNlKGlkcC0+dG9wKTsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKGlkIDwgbWF4KSB7CisJCXdoaWxlIChuID4gMCAmJiBwKSB7CisJCQluIC09IElEUl9CSVRTOworCQkJKnBhYSsrID0gcDsKKwkJCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CisJCX0KKworCQlpZiAocCkgeworCQkJKm5leHRpZHAgPSBpZDsKKwkJCXJldHVybiBwOworCQl9CisKKwkJaWQgKz0gMSA8PCBuOworCQl3aGlsZSAobiA8IGZscyhpZCkpIHsKKwkJCW4gKz0gSURSX0JJVFM7CisJCQlwID0gKi0tcGFhOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisKKworLyoqCiAgKiBpZHJfcmVwbGFjZSAtIHJlcGxhY2UgcG9pbnRlciBmb3IgZ2l2ZW4gaWQKICAqIEBpZHA6IGlkciBoYW5kbGUKICAqIEBwdHI6IHBvaW50ZXIgeW91IHdhbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZApkaWZmIC0tZ2l0IGEvbGliL2xtYi5jIGIvbGliL2xtYi5jCmluZGV4IDk3ZTU0NzAzLi5lNGE2NDgyIDEwMDY0NAotLS0gYS9saWIvbG1iLmMKKysrIGIvbGliL2xtYi5jCkBAIC0yOSwzMyArMjksMzMgQEAKIH0KIGVhcmx5X3BhcmFtKCJsbWIiLCBlYXJseV9sbWIpOwogCitzdGF0aWMgdm9pZCBsbWJfZHVtcChzdHJ1Y3QgbG1iX3JlZ2lvbiAqcmVnaW9uLCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBiYXNlLCBzaXplOworCWludCBpOworCisJcHJfaW5mbygiICVzLmNudCAgPSAweCVseFxuIiwgbmFtZSwgcmVnaW9uLT5jbnQpOworCisJZm9yIChpID0gMDsgaSA8IHJlZ2lvbi0+Y250OyBpKyspIHsKKwkJYmFzZSA9IHJlZ2lvbi0+cmVnaW9uW2ldLmJhc2U7CisJCXNpemUgPSByZWdpb24tPnJlZ2lvbltpXS5zaXplOworCisJCXByX2luZm8oIiAlc1sweCV4XVx0MHglMDE2bGx4IC0gMHglMDE2bGx4LCAweCVsbHggYnl0ZXNcbiIsCisJCSAgICBuYW1lLCBpLCBiYXNlLCBiYXNlICsgc2l6ZSAtIDEsIHNpemUpOworCX0KK30KKwogdm9pZCBsbWJfZHVtcF9hbGwodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KIAlpZiAoIWxtYl9kZWJ1ZykKIAkJcmV0dXJuOwogCi0JcHJfaW5mbygibG1iX2R1bXBfYWxsOlxuIik7Ci0JcHJfaW5mbygiICAgIG1lbW9yeS5jbnQJCSAgPSAweCVseFxuIiwgbG1iLm1lbW9yeS5jbnQpOwotCXByX2luZm8oIiAgICBtZW1vcnkuc2l6ZQkJICA9IDB4JWxseFxuIiwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnNpemUpOwotCWZvciAoaT0wOyBpIDwgbG1iLm1lbW9yeS5jbnQgO2krKykgewotCQlwcl9pbmZvKCIgICAgbWVtb3J5LnJlZ2lvblsweCVseF0uYmFzZSAgICAgICA9IDB4JWxseFxuIiwKLQkJICAgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSk7Ci0JCXByX2luZm8oIgkJICAgICAgLnNpemUgICAgID0gMHglbGx4XG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnJlZ2lvbltpXS5zaXplKTsKLQl9CisJcHJfaW5mbygiTE1CIGNvbmZpZ3VyYXRpb246XG4iKTsKKwlwcl9pbmZvKCIgcm1vX3NpemUgICAgPSAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLnJtb19zaXplKTsKKwlwcl9pbmZvKCIgbWVtb3J5LnNpemUgPSAweCVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5zaXplKTsKIAotCXByX2luZm8oIiAgICByZXNlcnZlZC5jbnQJICA9IDB4JWx4XG4iLCBsbWIucmVzZXJ2ZWQuY250KTsKLQlwcl9pbmZvKCIgICAgcmVzZXJ2ZWQuc2l6ZQkgID0gMHglbGx4XG4iLAotCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkuc2l6ZSk7Ci0JZm9yIChpPTA7IGkgPCBsbWIucmVzZXJ2ZWQuY250IDtpKyspIHsKLQkJcHJfaW5mbygiICAgIHJlc2VydmVkLnJlZ2lvblsweCVseF0uYmFzZSAgICAgICA9IDB4JWxseFxuIiwKLQkJICAgIGksICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlKTsKLQkJcHJfaW5mbygiCQkgICAgICAuc2l6ZSAgICAgPSAweCVsbHhcbiIsCi0JCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5yZXNlcnZlZC5yZWdpb25baV0uc2l6ZSk7Ci0JfQorCWxtYl9kdW1wKCZsbWIubWVtb3J5LCAibWVtb3J5Iik7CisJbG1iX2R1bXAoJmxtYi5yZXNlcnZlZCwgInJlc2VydmVkIik7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxtYl9hZGRyc19vdmVybGFwKHU2NCBiYXNlMSwgdTY0IHNpemUxLCB1NjQgYmFzZTIsCmRpZmYgLS1naXQgYS9saWIvcmJ0cmVlLmMgYi9saWIvcmJ0cmVlLmMKaW5kZXggOTk1NmI5OS4uZjY1MzY1OSAxMDA2NDQKLS0tIGEvbGliL3JidHJlZS5jCisrKyBiL2xpYi9yYnRyZWUuYwpAQCAtMTYzLDE3ICsxNjMsMTQgQEAKIAkJCXsKIAkJCQlpZiAoIW90aGVyLT5yYl9yaWdodCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKQogCQkJCXsKLQkJCQkJc3RydWN0IHJiX25vZGUgKm9fbGVmdDsKLQkJCQkJaWYgKChvX2xlZnQgPSBvdGhlci0+cmJfbGVmdCkpCi0JCQkJCQlyYl9zZXRfYmxhY2sob19sZWZ0KTsKKwkJCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9sZWZ0KTsKIAkJCQkJcmJfc2V0X3JlZChvdGhlcik7CiAJCQkJCV9fcmJfcm90YXRlX3JpZ2h0KG90aGVyLCByb290KTsKIAkJCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwogCQkJCX0KIAkJCQlyYl9zZXRfY29sb3Iob3RoZXIsIHJiX2NvbG9yKHBhcmVudCkpOwogCQkJCXJiX3NldF9ibGFjayhwYXJlbnQpOwotCQkJCWlmIChvdGhlci0+cmJfcmlnaHQpCi0JCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOworCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOwogCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKIAkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKIAkJCQlicmVhazsKQEAgLTIwMCwxNyArMTk3LDE0IEBACiAJCQl7CiAJCQkJaWYgKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpCiAJCQkJewotCQkJCQlyZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAqb19yaWdodDsKLQkJCQkJaWYgKChvX3JpZ2h0ID0gb3RoZXItPnJiX3JpZ2h0KSkKLQkJCQkJCXJiX3NldF9ibGFjayhvX3JpZ2h0KTsKKwkJCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9yaWdodCk7CiAJCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCQlfX3JiX3JvdGF0ZV9sZWZ0KG90aGVyLCByb290KTsKIAkJCQkJb3RoZXIgPSBwYXJlbnQtPnJiX2xlZnQ7CiAJCQkJfQogCQkJCXJiX3NldF9jb2xvcihvdGhlciwgcmJfY29sb3IocGFyZW50KSk7CiAJCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7Ci0JCQkJaWYgKG90aGVyLT5yYl9sZWZ0KQotCQkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOworCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfbGVmdCk7CiAJCQkJX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKIAkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IDFmOTkxYWMuLjMyZTJiZDMgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIHBoeXNfdG9fdmlydChzd2lvdGxiX2J1c190b19waHlzKGFkZHJlc3MpKTsKIH0KIAotaW50IF9fd2VhayBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoraW50IF9fd2VhayBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTUsOSArMzE1LDkgQEAKIAlyZXR1cm4gIWlzX2J1ZmZlcl9kbWFfY2FwYWJsZShkbWFfZ2V0X21hc2soaHdkZXYpLCBhZGRyLCBzaXplKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmFuZ2VfbmVlZHNfbWFwcGluZyh2b2lkICpwdHIsIHNpemVfdCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpCiB7Ci0JcmV0dXJuIHN3aW90bGJfZm9yY2UgfHwgc3dpb3RsYl9hcmNoX3JhbmdlX25lZWRzX21hcHBpbmcocHRyLCBzaXplKTsKKwlyZXR1cm4gc3dpb3RsYl9mb3JjZSB8fCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwYWRkciwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfc3dpb3RsYl9idWZmZXIoY2hhciAqYWRkcikKQEAgLTYzNiwxMSArNjM2LDE0IEBACiAgKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkgdW50aWwKICAqIGVpdGhlciBzd2lvdGxiX3VubWFwX3NpbmdsZSBvciBzd2lvdGxiX2RtYV9zeW5jX3NpbmdsZSBpcyBwZXJmb3JtZWQuCiAgKi8KLWRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKLQkJCSBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK2RtYV9hZGRyX3Qgc3dpb3RsYl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JZG1hX2FkZHJfdCBkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIHB0cik7CisJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwl2b2lkICpwdHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisJZG1hX2FkZHJfdCBkZXZfYWRkciA9IHN3aW90bGJfcGh5c190b19idXMoZGV2LCBwaHlzKTsKIAl2b2lkICptYXA7CiAKIAlCVUdfT04oZGlyID09IERNQV9OT05FKTsKQEAgLTY0OSwzNyArNjUyLDMwIEBACiAJICogd2UgY2FuIHNhZmVseSByZXR1cm4gdGhlIGRldmljZSBhZGRyIGFuZCBub3Qgd29ycnkgYWJvdXQgYm91bmNlCiAJICogYnVmZmVyaW5nIGl0LgogCSAqLwotCWlmICghYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSkgJiYKLQkgICAgIXJhbmdlX25lZWRzX21hcHBpbmcocHRyLCBzaXplKSkKKwlpZiAoIWFkZHJlc3NfbmVlZHNfbWFwcGluZyhkZXYsIGRldl9hZGRyLCBzaXplKSAmJgorCSAgICAhcmFuZ2VfbmVlZHNfbWFwcGluZyh2aXJ0X3RvX3BoeXMocHRyKSwgc2l6ZSkpCiAJCXJldHVybiBkZXZfYWRkcjsKIAogCS8qCiAJICogT2ggd2VsbCwgaGF2ZSB0byBhbGxvY2F0ZSBhbmQgbWFwIGEgYm91bmNlIGJ1ZmZlci4KIAkgKi8KLQltYXAgPSBtYXBfc2luZ2xlKGh3ZGV2LCB2aXJ0X3RvX3BoeXMocHRyKSwgc2l6ZSwgZGlyKTsKKwltYXAgPSBtYXBfc2luZ2xlKGRldiwgcGh5cywgc2l6ZSwgZGlyKTsKIAlpZiAoIW1hcCkgewotCQlzd2lvdGxiX2Z1bGwoaHdkZXYsIHNpemUsIGRpciwgMSk7CisJCXN3aW90bGJfZnVsbChkZXYsIHNpemUsIGRpciwgMSk7CiAJCW1hcCA9IGlvX3RsYl9vdmVyZmxvd19idWZmZXI7CiAJfQogCi0JZGV2X2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCBtYXApOworCWRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhkZXYsIG1hcCk7CiAKIAkvKgogCSAqIEVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIHJldHVybmVkIGlzIERNQSdibGUKIAkgKi8KLQlpZiAoYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSkpCisJaWYgKGFkZHJlc3NfbmVlZHNfbWFwcGluZyhkZXYsIGRldl9hZGRyLCBzaXplKSkKIAkJcGFuaWMoIm1hcF9zaW5nbGU6IGJvdW5jZSBidWZmZXIgaXMgbm90IERNQSdibGUiKTsKIAogCXJldHVybiBkZXZfYWRkcjsKIH0KLUVYUE9SVF9TWU1CT0woc3dpb3RsYl9tYXBfc2luZ2xlX2F0dHJzKTsKLQotZG1hX2FkZHJfdAotc3dpb3RsYl9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgZGlyKQotewotCXJldHVybiBzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoaHdkZXYsIHB0ciwgc2l6ZSwgZGlyLCBOVUxMKTsKLX0KLUVYUE9SVF9TWU1CT0woc3dpb3RsYl9tYXBfc2luZ2xlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHN3aW90bGJfbWFwX3BhZ2UpOwogCiAvKgogICogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplIG11c3QKQEAgLTY4OSw5ICs2ODUsOSBAQAogICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlCiAgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgogICovCi12b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3ZvaWQgc3dpb3RsYl91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCXN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWNoYXIgKmRtYV9hZGRyID0gc3dpb3RsYl9idXNfdG9fdmlydChkZXZfYWRkcik7CiAKQEAgLTcwMSwxNSArNjk3LDcgQEAKIAllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQogCQlkbWFfbWFya19jbGVhbihkbWFfYWRkciwgc2l6ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKTsKLQotdm9pZAotc3dpb3RsYl91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsIHNpemVfdCBzaXplLAotCQkgICAgIGludCBkaXIpCi17Ci0JcmV0dXJuIHN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKLX0KLUVYUE9SVF9TWU1CT0woc3dpb3RsYl91bm1hcF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3dpb3RsYl91bm1hcF9wYWdlKTsKIAogLyoKICAqIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbgpAQCAtNzM2LDcgKzcyNCw3IEBACiAKIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKwkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCXN3aW90bGJfc3luY19zaW5nbGUoaHdkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIFNZTkNfRk9SX0NQVSk7CiB9CkBAIC03NDQsNyArNzMyLDcgQEAKIAogdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZShod2RldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgU1lOQ19GT1JfREVWSUNFKTsKIH0KQEAgLTc2OSw3ICs3NTcsOCBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXIpCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZShod2RldiwgZGV2X2FkZHIsIG9mZnNldCwgc2l6ZSwgZGlyLAogCQkJCSAgU1lOQ19GT1JfQ1BVKTsKQEAgLTc3OCw3ICs3NjcsOCBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBkaXIpCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZShod2RldiwgZGV2X2FkZHIsIG9mZnNldCwgc2l6ZSwgZGlyLAogCQkJCSAgU1lOQ19GT1JfREVWSUNFKTsKQEAgLTgwMyw3ICs3OTMsNyBAQAogICovCiBpbnQKIHN3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKKwkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CkBAIC04MTEsMTAgKzgwMSwxMCBAQAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCXZvaWQgKmFkZHIgPSBzZ192aXJ0KHNnKTsKLQkJZG1hX2FkZHJfdCBkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIGFkZHIpOworCQlwaHlzX2FkZHJfdCBwYWRkciA9IHNnX3BoeXMoc2cpOworCQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl9waHlzX3RvX2J1cyhod2RldiwgcGFkZHIpOwogCi0JCWlmIChyYW5nZV9uZWVkc19tYXBwaW5nKGFkZHIsIHNnLT5sZW5ndGgpIHx8CisJCWlmIChyYW5nZV9uZWVkc19tYXBwaW5nKHBhZGRyLCBzZy0+bGVuZ3RoKSB8fAogCQkgICAgYWRkcmVzc19uZWVkc19tYXBwaW5nKGh3ZGV2LCBkZXZfYWRkciwgc2ctPmxlbmd0aCkpIHsKIAkJCXZvaWQgKm1hcCA9IG1hcF9zaW5nbGUoaHdkZXYsIHNnX3BoeXMoc2cpLAogCQkJCQkgICAgICAgc2ctPmxlbmd0aCwgZGlyKTsKQEAgLTg1MCw3ICs4NDAsNyBAQAogICovCiB2b2lkCiBzd2lvdGxiX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorCQkgICAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBpOwpAQCAtODU4LDExICs4NDgsMTEgQEAKIAlCVUdfT04oZGlyID09IERNQV9OT05FKTsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbGVtcywgaSkgewotCQlpZiAoc2ctPmRtYV9hZGRyZXNzICE9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIHNnX3ZpcnQoc2cpKSkKKwkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBzd2lvdGxiX3BoeXNfdG9fYnVzKGh3ZGV2LCBzZ19waHlzKHNnKSkpCiAJCQl1bm1hcF9zaW5nbGUoaHdkZXYsIHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKIAkJCQkgICAgIHNnLT5kbWFfbGVuZ3RoLCBkaXIpOwogCQllbHNlIGlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKQotCQkJZG1hX21hcmtfY2xlYW4oc2dfdmlydChzZyksIHNnLT5kbWFfbGVuZ3RoKTsKKwkJCWRtYV9tYXJrX2NsZWFuKHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwgc2ctPmRtYV9sZW5ndGgpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woc3dpb3RsYl91bm1hcF9zZ19hdHRycyk7CkBAIC04OTIsMTcgKzg4MiwxNyBAQAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2Rldiwgc2dfdmlydChzZykpKQorCQlpZiAoc2ctPmRtYV9hZGRyZXNzICE9IHN3aW90bGJfcGh5c190b19idXMoaHdkZXYsIHNnX3BoeXMoc2cpKSkKIAkJCXN5bmNfc2luZ2xlKGh3ZGV2LCBzd2lvdGxiX2J1c190b192aXJ0KHNnLT5kbWFfYWRkcmVzcyksCiAJCQkJICAgIHNnLT5kbWFfbGVuZ3RoLCBkaXIsIHRhcmdldCk7CiAJCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCi0JCQlkbWFfbWFya19jbGVhbihzZ192aXJ0KHNnKSwgc2ctPmRtYV9sZW5ndGgpOworCQkJZG1hX21hcmtfY2xlYW4oc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLCBzZy0+ZG1hX2xlbmd0aCk7CiAJfQogfQogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCWludCBuZWxlbXMsIGludCBkaXIpCisJCQlpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NnKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIsIFNZTkNfRk9SX0NQVSk7CiB9CkBAIC05MTAsNyArOTAwLDcgQEAKIAogdm9pZAogc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkgICBpbnQgbmVsZW1zLCBpbnQgZGlyKQorCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCXN3aW90bGJfc3luY19zZyhod2Rldiwgc2csIG5lbGVtcywgZGlyLCBTWU5DX0ZPUl9ERVZJQ0UpOwogfQpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggYTViNzc4MS4uYjUzNDI3YSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0yMDYsNyArMjA2LDYgQEAKIGNvbmZpZyBVTkVWSUNUQUJMRV9MUlUKIAlib29sICJBZGQgTFJVIGxpc3QgdG8gdHJhY2sgbm9uLWV2aWN0YWJsZSBwYWdlcyIKIAlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIE1NVQogCWhlbHAKIAkgIEtlZXBzIHVuZXZpY3RhYmxlIHBhZ2VzIG9mZiBvZiB0aGUgYWN0aXZlIGFuZCBpbmFjdGl2ZSBwYWdlb3V0CiAJICBsaXN0cywgc28ga3N3YXBkIHdpbGwgbm90IHdhc3RlIENQVSB0aW1lIG9yIGhhdmUgaXRzIGJhbGFuY2luZwpAQCAtMjE0LDUgKzIxMywxMyBAQAogCSAgd2lsbCB1c2Ugb25lIHBhZ2UgZmxhZyBhbmQgaW5jcmVhc2UgdGhlIGNvZGUgc2l6ZSBhIGxpdHRsZSwKIAkgIHNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKK2NvbmZpZyBIQVZFX01MT0NLCisJYm9vbAorCWRlZmF1bHQgeSBpZiBNTVU9eQorCitjb25maWcgSEFWRV9NTE9DS0VEX1BBR0VfQklUCisJYm9vbAorCWRlZmF1bHQgeSBpZiBIQVZFX01MT0NLPXkgJiYgVU5FVklDVEFCTEVfTFJVPXkKKwogY29uZmlnIE1NVV9OT1RJRklFUgogCWJvb2wKZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMDFlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC0wLDAgKzEsMjYgQEAKK2NvbmZpZyBERUJVR19QQUdFQUxMT0MKKwlib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQworCWRlcGVuZHMgb24gIUhJQkVSTkFUSU9OIHx8ICFQUEMgJiYgIVNQQVJDCisJLS0taGVscC0tLQorCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KKwkgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCisJICBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCisKK2NvbmZpZyBXQU5UX1BBR0VfREVCVUdfRkxBR1MKKwlib29sCisKK2NvbmZpZyBQQUdFX1BPSVNPTklORworCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQworCWRlcGVuZHMgb24gIUhJQkVSTkFUSU9OCisJc2VsZWN0IERFQlVHX1BBR0VBTExPQworCXNlbGVjdCBXQU5UX1BBR0VfREVCVUdfRkxBR1MKKwloZWxwCisJICAgRmlsbCB0aGUgcGFnZXMgd2l0aCBwb2lzb24gcGF0dGVybnMgYWZ0ZXIgZnJlZV9wYWdlcygpIGFuZCB2ZXJpZnkKKwkgICB0aGUgcGF0dGVybnMgYmVmb3JlIGFsbG9jX3BhZ2VzKCkuIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLAorCSAgIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgorCisJICAgVGhpcyBvcHRpb24gY2Fubm90IGVuYWxiZSB3aXRoIGhpYmVybmF0aW9uLiBPdGhlcndpc2UsIGl0IHdpbGwgZ2V0CisJICAgd3JvbmcgbWVzc2FnZXMgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJlY2F1c2UgdGhlIGZyZWUgcGFnZXMgYXJlIG5vdAorCSAgIHNhdmVkIHRvIHRoZSBzdXNwZW5kIGltYWdlLgpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCA4MTg1NjliLi5lYzczYzY4IDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQAogb2JqLSQoQ09ORklHX1RNUEZTX1BPU0lYX0FDTCkgKz0gc2htZW1fYWNsLm8KIG9iai0kKENPTkZJR19TTE9CKSArPSBzbG9iLm8KIG9iai0kKENPTkZJR19NTVVfTk9USUZJRVIpICs9IG1tdV9ub3RpZmllci5vCitvYmotJChDT05GSUdfUEFHRV9QT0lTT05JTkcpICs9IGRlYnVnLXBhZ2VhbGxvYy5vCiBvYmotJChDT05GSUdfU0xBQikgKz0gc2xhYi5vCiBvYmotJChDT05GSUdfU0xVQikgKz0gc2x1Yi5vCiBvYmotJChDT05GSUdfRkFJTFNMQUIpICs9IGZhaWxzbGFiLm8KZGlmZiAtLWdpdCBhL21tL2FsbG9jcGVyY3B1LmMgYi9tbS9hbGxvY3BlcmNwdS5jCmluZGV4IDE4ODI5MjMuLjEzOWQ1YjcgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jcGVyY3B1LmMKKysrIGIvbW0vYWxsb2NwZXJjcHUuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiB7CiAJaWYgKHVubGlrZWx5KCFfX3BkYXRhKSkKIAkJcmV0dXJuOwotCV9fcGVyY3B1X2RlcG9wdWxhdGVfbWFzayhfX3BkYXRhLCAmY3B1X3Bvc3NpYmxlX21hcCk7CisJX19wZXJjcHVfZGVwb3B1bGF0ZV9tYXNrKF9fcGRhdGEsIGNwdV9wb3NzaWJsZV9tYXNrKTsKIAlrZnJlZShfX3BlcmNwdV9kaXNndWlzZShfX3BkYXRhKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmcmVlX3BlcmNwdSk7CmRpZmYgLS1naXQgYS9tbS9kZWJ1Zy1wYWdlYWxsb2MuYyBiL21tL2RlYnVnLXBhZ2VhbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZTMzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9kZWJ1Zy1wYWdlYWxsb2MuYwpAQCAtMCwwICsxLDEyOSBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1kZWJ1Zy1mbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvaXNvbi5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fc2V0X2JpdChQQUdFX0RFQlVHX0ZMQUdfUE9JU09OLCAmcGFnZS0+ZGVidWdfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9wb2lzb24oc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJX19jbGVhcl9iaXQoUEFHRV9ERUJVR19GTEFHX1BPSVNPTiwgJnBhZ2UtPmRlYnVnX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHBhZ2VfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiB0ZXN0X2JpdChQQUdFX0RFQlVHX0ZMQUdfUE9JU09OLCAmcGFnZS0+ZGVidWdfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwb2lzb25faGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJLyoKKwkgKiBQYWdlIHBvaXNvbmluZyBmb3IgaGlnaG1lbSBwYWdlcyBpcyBub3QgaW1wbGVtZW50ZWQuCisJICoKKwkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dHMuCisJICogU28gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcga21hcF9hdG9taWMgc2xvdCBmb3IgdGhpcworCSAqIGFwcGxpY2F0aW9uIGFuZCBpdCB3aWxsIG5lZWQgaW50ZXJydXB0IHByb3RlY3Rpb24uCisJICovCit9CisKK3N0YXRpYyB2b2lkIHBvaXNvbl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXZvaWQgKmFkZHI7CisKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJcG9pc29uX2hpZ2hwYWdlKHBhZ2UpOworCQlyZXR1cm47CisJfQorCXNldF9wYWdlX3BvaXNvbihwYWdlKTsKKwlhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCW1lbXNldChhZGRyLCBQQUdFX1BPSVNPTiwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgcG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXBvaXNvbl9wYWdlKHBhZ2UgKyBpKTsKK30KKworc3RhdGljIGJvb2wgc2luZ2xlX2JpdF9mbGlwKHVuc2lnbmVkIGNoYXIgYSwgdW5zaWduZWQgY2hhciBiKQoreworCXVuc2lnbmVkIGNoYXIgZXJyb3IgPSBhIF4gYjsKKworCXJldHVybiBlcnJvciAmJiAhKGVycm9yICYgKGVycm9yIC0gMSkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19wb2lzb25fbWVtKHVuc2lnbmVkIGNoYXIgKm1lbSwgc2l6ZV90IGJ5dGVzKQoreworCXVuc2lnbmVkIGNoYXIgKnN0YXJ0OworCXVuc2lnbmVkIGNoYXIgKmVuZDsKKworCWZvciAoc3RhcnQgPSBtZW07IHN0YXJ0IDwgbWVtICsgYnl0ZXM7IHN0YXJ0KyspIHsKKwkJaWYgKCpzdGFydCAhPSBQQUdFX1BPSVNPTikKKwkJCWJyZWFrOworCX0KKwlpZiAoc3RhcnQgPT0gbWVtICsgYnl0ZXMpCisJCXJldHVybjsKKworCWZvciAoZW5kID0gbWVtICsgYnl0ZXMgLSAxOyBlbmQgPiBzdGFydDsgZW5kLS0pIHsKKwkJaWYgKCplbmQgIT0gUEFHRV9QT0lTT04pCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJcmV0dXJuOworCWVsc2UgaWYgKHN0YXJ0ID09IGVuZCAmJiBzaW5nbGVfYml0X2ZsaXAoKnN0YXJ0LCBQQUdFX1BPSVNPTikpCisJCXByaW50ayhLRVJOX0VSUiAicGFnZWFsbG9jOiBzaW5nbGUgYml0IGVycm9yXG4iKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAicGFnZWFsbG9jOiBtZW1vcnkgY29ycnVwdGlvblxuIik7CisKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LCAxLCBzdGFydCwKKwkJCWVuZCAtIHN0YXJ0ICsgMSwgMSk7CisJZHVtcF9zdGFjaygpOworfQorCitzdGF0aWMgdm9pZCB1bnBvaXNvbl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwkvKgorCSAqIFNlZSBjb21tZW50IGluIHBvaXNvbl9oaWdocGFnZSgpLgorCSAqIEhpZ2htZW0gcGFnZXMgc2hvdWxkIG5vdCBiZSBwb2lzb25lZCBmb3Igbm93CisJICovCisJQlVHX09OKHBhZ2VfcG9pc29uKHBhZ2UpKTsKK30KKworc3RhdGljIHZvaWQgdW5wb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJdW5wb2lzb25faGlnaHBhZ2UocGFnZSk7CisJCXJldHVybjsKKwl9CisJaWYgKHBhZ2VfcG9pc29uKHBhZ2UpKSB7CisJCXZvaWQgKmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwkJY2hlY2tfcG9pc29uX21lbShhZGRyLCBQQUdFX1NJWkUpOworCQljbGVhcl9wYWdlX3BvaXNvbihwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVucG9pc29uX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXVucG9pc29uX3BhZ2UocGFnZSArIGkpOworfQorCit2b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSkKK3sKKwlpZiAoIWRlYnVnX3BhZ2VhbGxvY19lbmFibGVkKQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlKQorCQl1bnBvaXNvbl9wYWdlcyhwYWdlLCBudW1wYWdlcyk7CisJZWxzZQorCQlwb2lzb25fcGFnZXMocGFnZSwgbnVtcGFnZXMpOworfQpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDEyNmQzOTcuLmZjMTE5NzQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTU2NSw2ICs1NjUsMjQgQEAKIEVYUE9SVF9TWU1CT0wod2FpdF9vbl9wYWdlX2JpdCk7CiAKIC8qKgorICogYWRkX3BhZ2Vfd2FpdF9xdWV1ZSAtIEFkZCBhbiBhcmJpdHJhcnkgd2FpdGVyIHRvIGEgcGFnZSdzIHdhaXQgcXVldWUKKyAqIEBwYWdlIC0gUGFnZSBkZWZpbmluZyB0aGUgd2FpdCBxdWV1ZSBvZiBpbnRlcmVzdAorICogQHdhaXRlciAtIFdhaXRlciB0byBhZGQgdG8gdGhlIHF1ZXVlCisgKgorICogQWRkIGFuIGFyYml0cmFyeSBAd2FpdGVyIHRvIHRoZSB3YWl0IHF1ZXVlIGZvciB0aGUgbm9taW5hdGVkIEBwYWdlLgorICovCit2b2lkIGFkZF9wYWdlX3dhaXRfcXVldWUoc3RydWN0IHBhZ2UgKnBhZ2UsIHdhaXRfcXVldWVfdCAqd2FpdGVyKQoreworCXdhaXRfcXVldWVfaGVhZF90ICpxID0gcGFnZV93YWl0cXVldWUocGFnZSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CisJX19hZGRfd2FpdF9xdWV1ZShxLCB3YWl0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF9wYWdlX3dhaXRfcXVldWUpOworCisvKioKICAqIHVubG9ja19wYWdlIC0gdW5sb2NrIGEgbG9ja2VkIHBhZ2UKICAqIEBwYWdlOiB0aGUgcGFnZQogICoKQEAgLTI0NjMsNiArMjQ4MSw5IEBACiAgKiAocHJlc3VtYWJseSBhdCBwYWdlLT5wcml2YXRlKS4gIElmIHRoZSByZWxlYXNlIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gYDEnLgogICogT3RoZXJ3aXNlIHJldHVybiB6ZXJvLgogICoKKyAqIFRoaXMgbWF5IGFsc28gYmUgY2FsbGVkIGlmIFBHX2ZzY2FjaGUgaXMgc2V0IG9uIGEgcGFnZSwgaW5kaWNhdGluZyB0aGF0IHRoZQorICogcGFnZSBpcyBrbm93biB0byB0aGUgbG9jYWwgY2FjaGluZyByb3V0aW5lcy4KKyAqCiAgKiBUaGUgQGdmcF9tYXNrIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIEkvTyBtYXkgYmUgcGVyZm9ybWVkIHRvIHJlbGVhc2UKICAqIHRoaXMgcGFnZSAoX19HRlBfSU8pLCBhbmQgd2hldGhlciB0aGUgY2FsbCBtYXkgYmxvY2sgKF9fR0ZQX1dBSVQgJiBfX0dGUF9GUykuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcF94aXAuYyBiL21tL2ZpbGVtYXBfeGlwLmMKaW5kZXggMGMwNDYxNS4uNDI3ZGZlMyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcF94aXAuYworKysgYi9tbS9maWxlbWFwX3hpcC5jCkBAIC04OSw4ICs4OSw4IEBACiAJCQl9CiAJCX0KIAkJbnIgPSBuciAtIG9mZnNldDsKLQkJaWYgKG5yID4gbGVuKQotCQkJbnIgPSBsZW47CisJCWlmIChuciA+IGxlbiAtIGNvcGllZCkKKwkJCW5yID0gbGVuIC0gY29waWVkOwogCiAJCWVycm9yID0gbWFwcGluZy0+YV9vcHMtPmdldF94aXBfbWVtKG1hcHBpbmcsIGluZGV4LCAwLAogCQkJCQkJCSZ4aXBfbWVtLCAmeGlwX3Bmbik7CmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggOTEwMTk4MC4uNjhlYjFkOSAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDIyLDMgKzQyMiw0OCBAQAogfQogCiAjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSElHSE1FTSkgJiYgIWRlZmluZWQoV0FOVF9QQUdFX1ZJUlRVQUwpICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUKQorCit2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKQoreworCXN0YXRpYyB1bnNpZ25lZCB3YXJuX2NvdW50ID0gMTA7CisKKwlpZiAodW5saWtlbHkod2Fybl9jb3VudCA9PSAwKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkgeworCQlpZiAoaW5faXJxKCkpIHsKKwkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCisJCQkgICAgdHlwZSAhPSBLTV9CSU9fU1JDX0lSUSAmJiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmCisJCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJd2Fybl9jb3VudC0tOworCQkJfQorCQl9IGVsc2UgaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsJLyogc29mdGlycSAqLworCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NPRlRJUlEwICYmIHR5cGUgIT0gS01fU09GVElSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NLQl9TVU5SUENfREFUQSAmJgorCQkJICAgIHR5cGUgIT0gS01fU0tCX0RBVEFfU09GVElSUSAmJgorCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCXdhcm5fY291bnQtLTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh0eXBlID09IEtNX0lSUTAgfHwgdHlwZSA9PSBLTV9JUlExIHx8IHR5cGUgPT0gS01fQk9VTkNFX1JFQUQgfHwKKwkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSkgeworCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXdhcm5fY291bnQtLTsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBLTV9TT0ZUSVJRMCB8fCB0eXBlID09IEtNX1NPRlRJUlExKSB7CisJCWlmIChpcnFfY291bnQoKSA9PSAwICYmICFpcnFzX2Rpc2FibGVkKCkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQl3YXJuX2NvdW50LS07CisJCX0KKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDEwN2RhM2QuLjI4YzY1NWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTkxOCw3ICs5MTgsNyBAQAogICogYW4gaW5zdGFudGlhdGVkIHRoZSBjaGFuZ2Ugc2hvdWxkIGJlIGNvbW1pdHRlZCB2aWEgdm1hX2NvbW1pdF9yZXNlcnZhdGlvbi4KICAqIE5vIGFjdGlvbiBpcyByZXF1aXJlZCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHZtYV9uZWVkc19yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLAorc3RhdGljIGxvbmcgdm1hX25lZWRzX3Jlc2VydmF0aW9uKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CkBAIC05MzMsNyArOTMzLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAl9IGVsc2UgIHsKLQkJaW50IGVycjsKKwkJbG9uZyBlcnI7CiAJCXBnb2ZmX3QgaWR4ID0gdm1hX2h1Z2VjYWNoZV9vZmZzZXQoaCwgdm1hLCBhZGRyKTsKIAkJc3RydWN0IHJlc3ZfbWFwICpyZXNlcnZhdGlvbnMgPSB2bWFfcmVzdl9tYXAodm1hKTsKIApAQCAtOTY5LDcgKzk2OSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQl1bnNpZ25lZCBpbnQgY2hnOworCWxvbmcgY2hnOwogCiAJLyoKIAkgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm8gcmVzZXJ2ZXMgYW5kCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA0NzgyMjNiLi45ODdiYjAzIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCisrKyBiL21tL2ludGVybmFsLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQogCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0sKIGV4dGVybiBsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtNzEsNiArNzIsNyBAQAogewogCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOwogfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCiAvKgpAQCAtOTAsNyArOTIsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAogLyoKICAqIENhbGxlZCBvbmx5IGluIGZhdWx0IHBhdGggdmlhIHBhZ2VfZXZpY3RhYmxlKCkgZm9yIGEgbmV3IHBhZ2UKICAqIHRvIGRldGVybWluZSBpZiBpdCdzIGJlaW5nIG1hcHBlZCBpbnRvIGEgTE9DS0VEIHZtYS4KQEAgLTE2NSw3ICsxNjcsNyBAQAogCX0KIH0KIAotI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVCAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfbWxvY2tlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2LCBzdHJ1Y3QgcGFnZSAqcCkKIHsKIAlyZXR1cm4gMDsKQEAgLTE3NSw3ICsxNzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworI2VuZGlmIC8qIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQgKi8KIAogLyoKICAqIFJldHVybiB0aGUgbWVtX21hcCBlbnRyeSByZXByZXNlbnRpbmcgdGhlICdvZmZzZXQnIHN1YnBhZ2Ugd2l0aGluCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOGU0YmU5Yy4uMmZjNmQ2YyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CkBAIC05NSw2ICs5NiwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzNjQgbWVtX2Nncm91cF9sb2NhbF91c2FnZShzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0KQoreworCXM2NCByZXQ7CisKKwlyZXQgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOworCXJldCArPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogcGVyLXpvbmUgaW5mb3JtYXRpb24gaW4gbWVtb3J5IGNvbnRyb2xsZXIuCiAgKi8KQEAgLTE1NCw5ICsxNjQsOSBAQAogCiAJLyoKIAkgKiBXaGlsZSByZWNsYWltaW5nIGluIGEgaGllYXJjaHksIHdlIGNhY2hlIHRoZSBsYXN0IGNoaWxkIHdlCi0JICogcmVjbGFpbWVkIGZyb20uIFByb3RlY3RlZCBieSBoaWVyYXJjaHlfbXV0ZXgKKwkgKiByZWNsYWltZWQgZnJvbS4KIAkgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbGFzdF9zY2FubmVkX2NoaWxkOworCWludCBsYXN0X3NjYW5uZWRfY2hpbGQ7CiAJLyoKIAkgKiBTaG91bGQgdGhlIGFjY291bnRpbmcgYW5kIGNvbnRyb2wgYmUgaGllcmFyY2hpY2FsLCBwZXIgc3VidHJlZT8KIAkgKi8KQEAgLTI0Nyw3ICsyNTcsNyBAQAogCXJldHVybiBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCWVudW0gbHJ1X2xpc3QgaWR4KQogewogCWludCBuaWQsIHppZDsKQEAgLTI4Niw2ICsyOTYsOSBAQAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKKworCWlmICghbW0pCisJCXJldHVybiBOVUxMOwogCS8qCiAJICogQmVjYXVzZSB3ZSBoYXZlIG5vIGxvY2tzLCBtbS0+b3duZXIncyBtYXkgYmUgYmVpbmcgbW92ZWQgdG8gb3RoZXIKIAkgKiBjZ3JvdXAuIFdlIHVzZSBjc3NfdHJ5Z2V0KCkgaGVyZSBldmVuIGlmIHRoaXMgbG9va3MKQEAgLTMwOCw2ICszMjEsNDIgQEAKIAlyZXR1cm4gY3NzX2lzX3JlbW92ZWQoJm1lbS0+Y3NzKTsKIH0KIAorCisvKgorICogQ2FsbCBjYWxsYmFjayBmdW5jdGlvbiBhZ2FpbnN0IGFsbCBjZ3JvdXAgdW5kZXIgaGllcmFyY2h5IHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF93YWxrX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsIHZvaWQgKmRhdGEsCisJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBtZW1fY2dyb3VwICosIHZvaWQgKikpCit7CisJaW50IGZvdW5kLCByZXQsIG5leHRpZDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisKKwlpZiAoIXJvb3QtPnVzZV9oaWVyYXJjaHkpCisJCXJldHVybiAoKmZ1bmMpKHJvb3QsIGRhdGEpOworCisJbmV4dGlkID0gMTsKKwlkbyB7CisJCXJldCA9IDA7CisJCW1lbSA9IE5VTEw7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljc3MgPSBjc3NfZ2V0X25leHQoJm1lbV9jZ3JvdXBfc3Vic3lzLCBuZXh0aWQsICZyb290LT5jc3MsCisJCQkJICAgJmZvdW5kKTsKKwkJaWYgKGNzcyAmJiBjc3NfdHJ5Z2V0KGNzcykpCisJCQltZW0gPSBjb250YWluZXJfb2YoY3NzLCBzdHJ1Y3QgbWVtX2Nncm91cCwgY3NzKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJaWYgKG1lbSkgeworCQkJcmV0ID0gKCpmdW5jKShtZW0sIGRhdGEpOworCQkJY3NzX3B1dCgmbWVtLT5jc3MpOworCQl9CisJCW5leHRpZCA9IGZvdW5kICsgMTsKKwl9IHdoaWxlICghcmV0ICYmIGNzcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogRm9sbG93aW5nIExSVSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCB3aXRob3V0IFBDR19MT0NLLgogICogT3BlcmF0aW9ucyBhcmUgY2FsbGVkIGJ5IHJvdXRpbmUgb2YgZ2xvYmFsIExSVSBpbmRlcGVuZGVudGx5IGZyb20gbWVtY2cuCkBAIC00NDEsMzEgKzQ5MCwyNCBAQAogaW50IHRhc2tfaW5fbWVtX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyciA9IE5VTEw7CiAKIAl0YXNrX2xvY2sodGFzayk7Ci0JcmV0ID0gdGFzay0+bW0gJiYgbW1fbWF0Y2hfY2dyb3VwKHRhc2stPm1tLCBtZW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwljdXJyID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0odGFzay0+bW0pOworCXJjdV9yZWFkX3VubG9jaygpOwogCXRhc2tfdW5sb2NrKHRhc2spOworCWlmICghY3VycikKKwkJcmV0dXJuIDA7CisJaWYgKGN1cnItPnVzZV9oaWVyYXJjaHkpCisJCXJldCA9IGNzc19pc19hbmNlc3RvcigmY3Vyci0+Y3NzLCAmbWVtLT5jc3MpOworCWVsc2UKKwkJcmV0ID0gKGN1cnIgPT0gbWVtKTsKKwljc3NfcHV0KCZjdXJyLT5jc3MpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgbWFwcGVkX3JhdGlvIHVuZGVyIG1lbW9yeSBjb250cm9sbGVyLiBUaGlzIHdpbGwgYmUgdXNlZCBpbgotICogdm1zY2FuLmMgZm9yIGRldGVyZW1pbmluZyB3ZSBoYXZlIHRvIHJlY2xhaW0gbWFwcGVkIHBhZ2VzLgotICovCi1pbnQgbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQotewotCWxvbmcgdG90YWwsIHJzczsKLQotCS8qCi0JICogdXNhZ2UgaXMgcmVjb3JkZWQgaW4gYnl0ZXMuIEJ1dCwgaGVyZSwgd2UgYXNzdW1lIHRoZSBudW1iZXIgb2YKLQkgKiBwaHlzaWNhbCBwYWdlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgImxvbmciIG9uIGFueSBhcmNoLgotCSAqLwotCXRvdGFsID0gKGxvbmcpIChtZW0tPnJlcy51c2FnZSA+PiBQQUdFX1NISUZUKSArIDFMOwotCXJzcyA9IChsb25nKW1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MpOwotCXJldHVybiAoaW50KSgocnNzICogMTAwTCkgLyB0b3RhbCk7Ci19Ci0KLS8qCiAgKiBwcmV2X3ByaW9yaXR5IGNvbnRyb2wuLi50aGlzIHdpbGwgYmUgdXNlZCBpbiBtZW1vcnkgcmVjbGFpbSBwYXRoLgogICovCiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQpAQCAtNTAxLDggKzU0Myw4IEBACiAJdW5zaWduZWQgbG9uZyBnYjsKIAl1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvOwogCi0JaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtY2csIExSVV9JTkFDVElWRV9BTk9OKTsKLQlhY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtY2csIExSVV9BQ1RJVkVfQU5PTik7CisJaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW1jZywgTFJVX0lOQUNUSVZFX0FOT04pOworCWFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbWNnLCBMUlVfQUNUSVZFX0FOT04pOwogCiAJZ2IgPSAoaW5hY3RpdmUgKyBhY3RpdmUpID4+ICgzMCAtIFBBR0VfU0hJRlQpOwogCWlmIChnYikKQEAgLTYyOSwxMDMgKzY3MSw2IEBACiAjZGVmaW5lIG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihjb3VudGVyLCBtZW1iZXIpCVwKIAljb250YWluZXJfb2YoY291bnRlciwgc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWJlcikKIAotLyoKLSAqIFRoaXMgcm91dGluZSBmaW5kcyB0aGUgREZTIHdhbGsgc3VjY2Vzc29yLiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlCi0gKiBjYWxsZWQgd2l0aCBoaWVyYXJjaHlfbXV0ZXggaGVsZAotICovCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgotX19tZW1fY2dyb3VwX2dldF9uZXh0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKmN1cnIsIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKLXsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsICpjdXJyX2Nncm91cCwgKnJvb3RfY2dyb3VwOwotCi0JY3Vycl9jZ3JvdXAgPSBjdXJyLT5jc3MuY2dyb3VwOwotCXJvb3RfY2dyb3VwID0gcm9vdF9tZW0tPmNzcy5jZ3JvdXA7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmN1cnJfY2dyb3VwLT5jaGlsZHJlbikpIHsKLQkJLyoKLQkJICogV2FsayBkb3duIHRvIGNoaWxkcmVuCi0JCSAqLwotCQljZ3JvdXAgPSBsaXN0X2VudHJ5KGN1cnJfY2dyb3VwLT5jaGlsZHJlbi5uZXh0LAotCQkJCQkJc3RydWN0IGNncm91cCwgc2libGluZyk7Ci0JCWN1cnIgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOwotCQlnb3RvIGRvbmU7Ci0JfQotCi12aXNpdF9wYXJlbnQ6Ci0JaWYgKGN1cnJfY2dyb3VwID09IHJvb3RfY2dyb3VwKSB7Ci0JCS8qIGNhbGxlciBoYW5kbGVzIE5VTEwgY2FzZSAqLwotCQljdXJyID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCS8qCi0JICogR290byBuZXh0IHNpYmxpbmcKLQkgKi8KLQlpZiAoY3Vycl9jZ3JvdXAtPnNpYmxpbmcubmV4dCAhPSAmY3Vycl9jZ3JvdXAtPnBhcmVudC0+Y2hpbGRyZW4pIHsKLQkJY2dyb3VwID0gbGlzdF9lbnRyeShjdXJyX2Nncm91cC0+c2libGluZy5uZXh0LCBzdHJ1Y3QgY2dyb3VwLAotCQkJCQkJc2libGluZyk7Ci0JCWN1cnIgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyoKLQkgKiBHbyB1cCB0byBuZXh0IHBhcmVudCBhbmQgbmV4dCBwYXJlbnQncyBzaWJsaW5nIGlmIG5lZWQgYmUKLQkgKi8KLQljdXJyX2Nncm91cCA9IGN1cnJfY2dyb3VwLT5wYXJlbnQ7Ci0JZ290byB2aXNpdF9wYXJlbnQ7Ci0KLWRvbmU6Ci0JcmV0dXJuIGN1cnI7Ci19Ci0KLS8qCi0gKiBWaXNpdCB0aGUgZmlyc3QgY2hpbGQgKG5lZWQgbm90IGJlIHRoZSBmaXJzdCBjaGlsZCBhcyBwZXIgdGhlIG9yZGVyaW5nCi0gKiBvZiB0aGUgY2dyb3VwIGxpc3QsIHNpbmNlIHdlIHRyYWNrIGxhc3Rfc2Nhbm5lZF9jaGlsZCkgb2YgQG1lbSBhbmQgdXNlCi0gKiB0aGF0IHRvIHJlY2xhaW0gZnJlZSBwYWdlcyBmcm9tLgotICovCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgotbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKLXsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm9yaWcsICpuZXh0OwotCWJvb2wgb2Jzb2xldGU7Ci0KLQkvKgotCSAqIFNjYW4gYWxsIGNoaWxkcmVuIHVuZGVyIHRoZSBtZW1fY2dyb3VwIG1lbQotCSAqLwotCW11dGV4X2xvY2soJm1lbV9jZ3JvdXBfc3Vic3lzLmhpZXJhcmNoeV9tdXRleCk7Ci0KLQlvcmlnID0gcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZDsKLQlvYnNvbGV0ZSA9IG1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUob3JpZyk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmcm9vdF9tZW0tPmNzcy5jZ3JvdXAtPmNoaWxkcmVuKSkgewotCQkvKgotCQkgKiByb290X21lbSBtaWdodCBoYXZlIGNoaWxkcmVuIGJlZm9yZSBhbmQgbGFzdF9zY2FubmVkX2NoaWxkCi0JCSAqIG1heSBwb2ludCB0byBvbmUgb2YgdGhlbS4gV2UgcHV0IGl0IGxhdGVyLgotCQkgKi8KLQkJaWYgKG9yaWcpCi0JCQlWTV9CVUdfT04oIW9ic29sZXRlKTsKLQkJbmV4dCA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoIW9yaWcgfHwgb2Jzb2xldGUpIHsKLQkJY2dyb3VwID0gbGlzdF9maXJzdF9lbnRyeSgmcm9vdF9tZW0tPmNzcy5jZ3JvdXAtPmNoaWxkcmVuLAotCQkJCXN0cnVjdCBjZ3JvdXAsIHNpYmxpbmcpOwotCQluZXh0ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY2dyb3VwKTsKLQl9IGVsc2UKLQkJbmV4dCA9IF9fbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKG9yaWcsIHJvb3RfbWVtKTsKLQotZG9uZToKLQlpZiAobmV4dCkKLQkJbWVtX2Nncm91cF9nZXQobmV4dCk7Ci0Jcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IG5leHQ7Ci0JaWYgKG9yaWcpCi0JCW1lbV9jZ3JvdXBfcHV0KG9yaWcpOwotCW11dGV4X3VubG9jaygmbWVtX2Nncm91cF9zdWJzeXMuaGllcmFyY2h5X211dGV4KTsKLQlyZXR1cm4gKG5leHQpID8gbmV4dCA6IHJvb3RfbWVtOwotfQotCiBzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX2NoZWNrX3VuZGVyX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCkgewpAQCAtNzU0LDQ3ICs2OTksMTc0IEBACiAJcmV0dXJuIHN3YXBwaW5lc3M7CiB9CiAKLS8qCi0gKiBEYW5jZSBkb3duIHRoZSBoaWVyYXJjaHkgaWYgbmVlZGVkIHRvIHJlY2xhaW0gbWVtb3J5LiBXZSByZW1lbWJlciB0aGUKLSAqIGxhc3QgY2hpbGQgd2UgcmVjbGFpbWVkIGZyb20sIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIHBlbmFsaXppbmcKLSAqIG9uZSBjaGlsZCBleHRlbnNpdmVseSBiYXNlZCBvbiBpdHMgcG9zaXRpb24gaW4gdGhlIGNoaWxkcmVuIGxpc3QuCi0gKgotICogcm9vdF9tZW0gaXMgdGhlIG9yaWdpbmFsIGFuY2VzdG9yIHRoYXQgd2UndmUgYmVlbiByZWNsYWltIGZyb20uCi0gKi8KLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW0sCi0JCQkJCQlnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXApCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW5fY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV4dF9tZW07Ci0JaW50IHJldCA9IDA7CisJaW50ICp2YWwgPSBkYXRhOworCSgqdmFsKSsrOworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lbV9jZ3JvdXBfcHJpbnRfbWVtX2luZm86IENhbGxlZCBmcm9tIE9PTSB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCisgKiBAbWVtY2c6IFRoZSBtZW1vcnkgY2dyb3VwIHRoYXQgd2VudCBvdmVyIGxpbWl0CisgKiBAcDogVGFzayB0aGF0IGlzIGdvaW5nIHRvIGJlIGtpbGxlZAorICoKKyAqIE5PVEU6IEBtZW1jZyBhbmQgQHAncyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXMKKyAqIGVuYWJsZWQKKyAqLwordm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBjZ3JvdXAgKnRhc2tfY2dycDsKKwlzdHJ1Y3QgY2dyb3VwICptZW1fY2dycDsKKwkvKgorCSAqIE5lZWQgYSBidWZmZXIgaW4gQlNTLCBjYW4ndCByZWx5IG9uIGFsbG9jYXRpb25zLiBUaGUgY29kZSByZWxpZXMKKwkgKiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IE9PTSBpcyBzZXJpYWxpemVkIGZvciBtZW1vcnkgY29udHJvbGxlci4KKwkgKiBJZiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLCByZXZpc2l0IHRoaXMgY29kZS4KKwkgKi8KKwlzdGF0aWMgY2hhciBtZW1jZ19uYW1lW1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCisJaWYgKCFtZW1jZykKKwkJcmV0dXJuOworCisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwltZW1fY2dycCA9IG1lbWNnLT5jc3MuY2dyb3VwOworCXRhc2tfY2dycCA9IHRhc2tfY2dyb3VwKHAsIG1lbV9jZ3JvdXBfc3Vic3lzX2lkKTsKKworCXJldCA9IGNncm91cF9wYXRoKHRhc2tfY2dycCwgbWVtY2dfbmFtZSwgUEFUSF9NQVgpOworCWlmIChyZXQgPCAwKSB7CisJCS8qCisJCSAqIFVuZm9ydHVuYXRlbHksIHdlIGFyZSB1bmFibGUgdG8gY29udmVydCB0byBhIHVzZWZ1bCBuYW1lCisJCSAqIEJ1dCB3ZSdsbCBzdGlsbCBwcmludCBvdXQgdGhlIHVzYWdlIGluZm9ybWF0aW9uCisJCSAqLworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBkb25lOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRhc2sgaW4gJXMga2lsbGVkIiwgbWVtY2dfbmFtZSk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0ID0gY2dyb3VwX3BhdGgobWVtX2NncnAsIG1lbWNnX25hbWUsIFBBVEhfTUFYKTsKKwlpZiAocmV0IDwgMCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBkb25lOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCi0JICogUmVjbGFpbSB1bmNvbmRpdGlvbmFsbHkgYW5kIGRvbid0IGNoZWNrIGZvciByZXR1cm4gdmFsdWUuCi0JICogV2UgbmVlZCB0byByZWNsYWltIGluIHRoZSBjdXJyZW50IGdyb3VwIGFuZCBkb3duIHRoZSB0cmVlLgotCSAqIE9uZSBtaWdodCB0aGluayBhYm91dCBjaGVja2luZyBmb3IgY2hpbGRyZW4gYmVmb3JlIHJlY2xhaW1pbmcsCi0JICogYnV0IHRoZXJlIG1pZ2h0IGJlIGxlZnQgb3ZlciBhY2NvdW50aW5nLCBldmVuIGFmdGVyIGNoaWxkcmVuCi0JICogaGF2ZSBsZWZ0LgorCSAqIENvbnRpbnVlcyBmcm9tIGFib3ZlLCBzbyB3ZSBkb24ndCBuZWVkIGFuIEtFUk5fIGxldmVsCiAJICovCi0JcmV0ICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMocm9vdF9tZW0sIGdmcF9tYXNrLCBub3N3YXAsCi0JCQkJCSAgIGdldF9zd2FwcGluZXNzKHJvb3RfbWVtKSk7Ci0JaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQocm9vdF9tZW0pKQotCQlyZXR1cm4gMTsJLyogaW5kaWNhdGUgcmVjbGFpbSBoYXMgc3VjY2VlZGVkICovCi0JaWYgKCFyb290X21lbS0+dXNlX2hpZXJhcmNoeSkKLQkJcmV0dXJuIHJldDsKKwlwcmludGsoS0VSTl9DT05UICIgYXMgYSByZXN1bHQgb2YgbGltaXQgb2YgJXNcbiIsIG1lbWNnX25hbWUpOworZG9uZToKIAotCW5leHRfbWVtID0gbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHJvb3RfbWVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZW1vcnk6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsbHVcbiIsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpID4+IDEwLAorCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX0xJTUlUKSA+PiAxMCwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19GQUlMQ05UKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWVtb3J5K3N3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCAiCisJCSJmYWlsY250ICVsbHVcbiIsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19VU0FHRSkgPj4gMTAsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19MSU1JVCkgPj4gMTAsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19GQUlMQ05UKSk7Cit9CiAKLQl3aGlsZSAobmV4dF9tZW0gIT0gcm9vdF9tZW0pIHsKLQkJaWYgKG1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUobmV4dF9tZW0pKSB7Ci0JCQluZXh0X21lbSA9IG1lbV9jZ3JvdXBfZ2V0X25leHRfbm9kZShyb290X21lbSk7CisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVtY2cgdW5kZXIgaGllcmFyY2h5IHRyZWUuIFJldHVybnMKKyAqIDEoc2VsZiBjb3VudCkgaWYgbm8gY2hpbGRyZW4uCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCWludCBudW0gPSAwOworIAltZW1fY2dyb3VwX3dhbGtfdHJlZShtZW0sICZudW0sIG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW5fY2IpOworCXJldHVybiBudW07Cit9CisKKy8qCisgKiBWaXNpdCB0aGUgZmlyc3QgY2hpbGQgKG5lZWQgbm90IGJlIHRoZSBmaXJzdCBjaGlsZCBhcyBwZXIgdGhlIG9yZGVyaW5nCisgKiBvZiB0aGUgY2dyb3VwIGxpc3QsIHNpbmNlIHdlIHRyYWNrIGxhc3Rfc2Nhbm5lZF9jaGlsZCkgb2YgQG1lbSBhbmQgdXNlCisgKiB0aGF0IHRvIHJlY2xhaW0gZnJlZSBwYWdlcyBmcm9tLgorICovCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgorbWVtX2Nncm91cF9zZWxlY3RfdmljdGltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCWludCBuZXh0aWQsIGZvdW5kOworCisJaWYgKCFyb290X21lbS0+dXNlX2hpZXJhcmNoeSkgeworCQljc3NfZ2V0KCZyb290X21lbS0+Y3NzKTsKKwkJcmV0ID0gcm9vdF9tZW07CisJfQorCisJd2hpbGUgKCFyZXQpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQluZXh0aWQgPSByb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkICsgMTsKKwkJY3NzID0gY3NzX2dldF9uZXh0KCZtZW1fY2dyb3VwX3N1YnN5cywgbmV4dGlkLCAmcm9vdF9tZW0tPmNzcywKKwkJCQkgICAmZm91bmQpOworCQlpZiAoY3NzICYmIGNzc190cnlnZXQoY3NzKSkKKwkJCXJldCA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCQkvKiBVcGRhdGVzIHNjYW5uaW5nIHBhcmFtZXRlciAqLworCQlzcGluX2xvY2soJnJvb3RfbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOworCQlpZiAoIWNzcykgeworCQkJLyogdGhpcyBtZWFucyBzdGFydCBzY2FuIGZyb20gSUQ6MSAqLworCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IDA7CisJCX0gZWxzZQorCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IGZvdW5kOworCQlzcGluX3VubG9jaygmcm9vdF9tZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNjYW4gdGhlIGhpZXJhcmNoeSBpZiBuZWVkZWQgdG8gcmVjbGFpbSBtZW1vcnkuIFdlIHJlbWVtYmVyIHRoZSBsYXN0IGNoaWxkCisgKiB3ZSByZWNsYWltZWQgZnJvbSwgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgcGVuYWxpemluZyBvbmUgY2hpbGQgZXh0ZW5zaXZlbHkKKyAqIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBpbiB0aGUgY2hpbGRyZW4gbGlzdC4KKyAqCisgKiByb290X21lbSBpcyB0aGUgb3JpZ2luYWwgYW5jZXN0b3IgdGhhdCB3ZSd2ZSBiZWVuIHJlY2xhaW0gZnJvbS4KKyAqCisgKiBXZSBnaXZlIHVwIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGVuIHdlIHZpc2l0IHJvb3RfbWVtIHR3aWNlLgorICogKG90aGVyIGdyb3VwcyBjYW4gYmUgcmVtb3ZlZCB3aGlsZSB3ZSdyZSB3YWxraW5nLi4uLikKKyAqCisgKiBJZiBzaHJpbms9PXRydWUsIGZvciBhdm9pZGluZyB0byBmcmVlIHRvbyBtdWNoLCB0aGlzIHJldHVybnMgaW1tZWRpZWF0ZWx5LgorICovCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtLAorCQkJCSAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwgYm9vbCBzaHJpbmspCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbTsKKwlpbnQgcmV0LCB0b3RhbCA9IDA7CisJaW50IGxvb3AgPSAwOworCisJd2hpbGUgKGxvb3AgPCAyKSB7CisJCXZpY3RpbSA9IG1lbV9jZ3JvdXBfc2VsZWN0X3ZpY3RpbShyb290X21lbSk7CisJCWlmICh2aWN0aW0gPT0gcm9vdF9tZW0pCisJCQlsb29wKys7CisJCWlmICghbWVtX2Nncm91cF9sb2NhbF91c2FnZSgmdmljdGltLT5zdGF0KSkgeworCQkJLyogdGhpcyBjZ3JvdXAncyBsb2NhbCB1c2FnZSA9PSAwICovCisJCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyZXQgKz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhuZXh0X21lbSwgZ2ZwX21hc2ssIG5vc3dhcCwKLQkJCQkJCSAgIGdldF9zd2FwcGluZXNzKG5leHRfbWVtKSk7CisJCS8qIHdlIHVzZSBzd2FwcGluZXNzIG9mIGxvY2FsIGNncm91cCAqLworCQlyZXQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHZpY3RpbSwgZ2ZwX21hc2ssIG5vc3dhcCwKKwkJCQkJCSAgIGdldF9zd2FwcGluZXNzKHZpY3RpbSkpOworCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CisJCS8qCisJCSAqIEF0IHNocmlua2luZyB1c2FnZSwgd2UgY2FuJ3QgY2hlY2sgd2Ugc2hvdWxkIHN0b3AgaGVyZSBvcgorCQkgKiByZWNsYWltIG1vcmUuIEl0J3MgZGVwZW5kcyBvbiBjYWxsZXJzLiBsYXN0X3NjYW5uZWRfY2hpbGQKKwkJICogd2lsbCB3b3JrIGVub3VnaCBmb3Iga2VlcGluZyBmYWlybmVzcyB1bmRlciB0cmVlLgorCQkgKi8KKwkJaWYgKHNocmluaykKKwkJCXJldHVybiByZXQ7CisJCXRvdGFsICs9IHJldDsKIAkJaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQocm9vdF9tZW0pKQotCQkJcmV0dXJuIDE7CS8qIGluZGljYXRlIHJlY2xhaW0gaGFzIHN1Y2NlZWRlZCAqLwotCQluZXh0X21lbSA9IG1lbV9jZ3JvdXBfZ2V0X25leHRfbm9kZShyb290X21lbSk7CisJCQlyZXR1cm4gMSArIHRvdGFsOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiB0b3RhbDsKIH0KIAogYm9vbCBtZW1fY2dyb3VwX29vbV9jYWxsZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpAQCAtODEzLDYgKzg4NSwxOSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CisKK3N0YXRpYyBpbnQgcmVjb3JkX2xhc3Rfb29tX2NiKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHZvaWQgKmRhdGEpCit7CisJbWVtLT5sYXN0X29vbV9qaWZmaWVzID0gamlmZmllczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2xhc3Rfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJbWVtX2Nncm91cF93YWxrX3RyZWUobWVtLCBOVUxMLCByZWNvcmRfbGFzdF9vb21fY2IpOworfQorCisKIC8qCiAgKiBVbmxpa2UgZXhwb3J0ZWQgaW50ZXJmYWNlLCAib29tIiBwYXJhbWV0ZXIgaXMgYWRkZWQuIGlmIG9vbT09dHJ1ZSwKICAqIG9vbS1raWxsZXIgY2FuIGJlIGludm9rZWQuCkBAIC04NzUsNyArOTYwLDcgQEAKIAkJCWdvdG8gbm9tZW07CiAKIAkJcmV0ID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCi0JCQkJCQkJbm9zd2FwKTsKKwkJCQkJCQlub3N3YXAsIGZhbHNlKTsKIAkJaWYgKHJldCkKIAkJCWNvbnRpbnVlOwogCkBAIC04OTUsNyArOTgwLDcgQEAKIAkJCQltdXRleF9sb2NrKCZtZW1jZ190YXNrbGlzdCk7CiAJCQkJbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZW1jZ190YXNrbGlzdCk7Ci0JCQkJbWVtX292ZXJfbGltaXQtPmxhc3Rfb29tX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJCXJlY29yZF9sYXN0X29vbShtZW1fb3Zlcl9saW1pdCk7CiAJCQl9CiAJCQlnb3RvIG5vbWVtOwogCQl9CkBAIC05MDYsMjAgKzk5MSw1NSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCisKKy8qCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgbWVtX2Nncm91cCBmcm9tIElELiBtdXN0IGJlIGNhbGxlZCB1bmRlcgorICogcmN1X3JlYWRfbG9jaygpLiBUaGUgY2FsbGVyIG11c3QgY2hlY2sgY3NzX2lzX3JlbW92ZWQoKSBvciBzb21lIGlmCisgKiBpdCdzIGNvbmNlcm4uIChkcm9wcGluZyByZWZjbnQgZnJvbSBzd2FwIGNhbiBiZSBjYWxsZWQgYWdhaW5zdCByZW1vdmVkCisgKiBtZW1jZy4pCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9sb29rdXAodW5zaWduZWQgc2hvcnQgaWQpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKKworCS8qIElEIDAgaXMgdW51c2VkIElEICovCisJaWYgKCFpZCkKKwkJcmV0dXJuIE5VTEw7CisJY3NzID0gY3NzX2xvb2t1cCgmbWVtX2Nncm91cF9zdWJzeXMsIGlkKTsKKwlpZiAoIWNzcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOworfQorCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3N3YXBjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJdW5zaWduZWQgc2hvcnQgaWQ7CiAJc3dwX2VudHJ5X3QgZW50OwogCisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwogCWlmICghUGFnZVN3YXBDYWNoZShwYWdlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQllbnQudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpOwotCW1lbSA9IGxvb2t1cF9zd2FwX2Nncm91cChlbnQpOwotCWlmICghbWVtKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKLQkJcmV0dXJuIE5VTEw7CisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJLyoKKwkgKiBVc2VkIGJpdCBvZiBzd2FwY2FjaGUgaXMgc29saWQgdW5kZXIgcGFnZSBsb2NrLgorCSAqLworCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKKwkJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CisJCWlmIChtZW0gJiYgIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKKwkJCW1lbSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZW50LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKKwkJaWQgPSBsb29rdXBfc3dhcF9jZ3JvdXAoZW50KTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQltZW0gPSBtZW1fY2dyb3VwX2xvb2t1cChpZCk7CisJCWlmIChtZW0gJiYgIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKKwkJCW1lbSA9IE5VTEw7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KIAlyZXR1cm4gbWVtOwogfQogCkBAIC0xMTE4LDYgKzEyMzgsMTAgQEAKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkCitfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIsCisJCQkJCWVudW0gY2hhcmdlX3R5cGUgY3R5cGUpOworCiBpbnQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCWdmcF90IGdmcF9tYXNrKQogewpAQCAtMTE1NCwxNiArMTI3OCw2IEBACiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJfQogCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCW1lbSA9IHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3N3YXBjYWNoZShwYWdlKTsKLQkJaWYgKG1lbSkKLQkJCW1tID0gTlVMTDsKLQkJICBlbHNlCi0JCQltZW0gPSBOVUxMOwotCQkvKiBTd2FwQ2FjaGUgbWF5IGJlIHN0aWxsIGxpbmtlZCB0byBMUlUgbm93LiAqLwotCQltZW1fY2dyb3VwX2xydV9kZWxfYmVmb3JlX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7Ci0JfQotCiAJaWYgKHVubGlrZWx5KCFtbSAmJiAhbWVtKSkKIAkJbW0gPSAmaW5pdF9tbTsKIApAQCAtMTE3MSwyMiArMTI4NSwxNiBAQAogCQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFLCBOVUxMKTsKIAotCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCi0JCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTSwgbWVtKTsKLQlpZiAobWVtKQotCQljc3NfcHV0KCZtZW0tPmNzcyk7Ci0JaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCi0JCW1lbV9jZ3JvdXBfbHJ1X2FkZF9hZnRlcl9jb21taXRfc3dhcGNhY2hlKHBhZ2UpOworCS8qIHNobWVtICovCisJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJcmV0ID0gbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBpbihtbSwgcGFnZSwgZ2ZwX21hc2ssICZtZW0pOworCQlpZiAoIXJldCkKKwkJCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihwYWdlLCBtZW0sCisJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0pOworCX0gZWxzZQorCQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAorCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLCBtZW0pOwogCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhcmV0ICYmIFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJc3dwX2VudHJ5X3QgZW50ID0gey52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSl9OwotCQkvKiBhdm9pZCBkb3VibGUgY291bnRpbmcgKi8KLQkJbWVtID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgTlVMTCk7Ci0JCWlmIChtZW0pIHsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOwotCQkJbWVtX2Nncm91cF9wdXQobWVtKTsKLQkJfQotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjI5LDcgKzEzMzcsOSBAQAogCXJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgbWFzaywgcHRyLCB0cnVlKTsKIH0KIAotdm9pZCBtZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyKQorc3RhdGljIHZvaWQKK19fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKnB0ciwKKwkJCQkJZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCkBAIC0xMjM5LDcgKzEzNDksNyBAQAogCQlyZXR1cm47CiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CiAJbWVtX2Nncm91cF9scnVfZGVsX2JlZm9yZV9jb21taXRfc3dhcGNhY2hlKHBhZ2UpOwotCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHB0ciwgcGMsIE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKTsKKwlfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZShwdHIsIHBjLCBjdHlwZSk7CiAJbWVtX2Nncm91cF9scnVfYWRkX2FmdGVyX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7CiAJLyoKIAkgKiBOb3cgc3dhcCBpcyBvbi1tZW1vcnkuIFRoaXMgbWVhbnMgdGhpcyBwYWdlIG1heSBiZQpAQCAtMTI1MCwxOCArMTM2MCwzMiBAQAogCSAqLwogCWlmIChkb19zd2FwX2FjY291bnQgJiYgUGFnZVN3YXBDYWNoZShwYWdlKSkgewogCQlzd3BfZW50cnlfdCBlbnQgPSB7LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKX07CisJCXVuc2lnbmVkIHNob3J0IGlkOwogCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Ci0JCW1lbWNnID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgTlVMTCk7CisKKwkJaWQgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCAwKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKIAkJaWYgKG1lbWNnKSB7CisJCQkvKgorCQkJICogVGhpcyByZWNvcmRlZCBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBTbywgYXZvaWQKKwkJCSAqIGNhbGxpbmcgY3NzX3RyeWdldAorCQkJICovCiAJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQl9Ci0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCS8qIGFkZCB0aGlzIHBhZ2UocGFnZV9jZ3JvdXApIHRvIHRoZSBMUlUgd2Ugd2FudC4gKi8KIAogfQogCit2b2lkIG1lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIpCit7CisJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHBhZ2UsIHB0ciwKKwkJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpOworfQorCiB2b2lkIG1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZV9zd2FwaW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQpAQCAtMTMyNCw4ICsxNDQ4LDggQEAKIAlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKSkKIAkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7Ci0KIAltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgcGMsIGZhbHNlKTsKKwogCUNsZWFyUGFnZUNncm91cFVzZWQocGMpOwogCS8qCiAJICogcGMtPm1lbV9jZ3JvdXAgaXMgbm90IGNsZWFyZWQgaGVyZS4gSXQgd2lsbCBiZSBhY2Nlc3NlZCB3aGVuIGl0J3MKQEAgLTEzNzcsNyArMTUwMSw3IEBACiAJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCk7CiAJLyogcmVjb3JkIG1lbWNnIGluZm9ybWF0aW9uICovCiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBtZW1jZykgewotCQlzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBtZW1jZyk7CisJCXN3YXBfY2dyb3VwX3JlY29yZChlbnQsIGNzc19pZCgmbWVtY2ctPmNzcykpOwogCQltZW1fY2dyb3VwX2dldChtZW1jZyk7CiAJfQogCWlmIChtZW1jZykKQEAgLTEzOTIsMTUgKzE1MTYsMjMgQEAKIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHN3cF9lbnRyeV90IGVudCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisJdW5zaWduZWQgc2hvcnQgaWQ7CiAKIAlpZiAoIWRvX3N3YXBfYWNjb3VudCkKIAkJcmV0dXJuOwogCi0JbWVtY2cgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBOVUxMKTsKKwlpZCA9IHN3YXBfY2dyb3VwX3JlY29yZChlbnQsIDApOworCXJjdV9yZWFkX2xvY2soKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKIAlpZiAobWVtY2cpIHsKKwkJLyoKKwkJICogV2UgdW5jaGFyZ2UgdGhpcyBiZWNhdXNlIHN3YXAgaXMgZnJlZWQuCisJCSAqIFRoaXMgbWVtY2cgY2FuIGJlIG9ic29sZXRlIG9uZS4gV2UgYXZvaWQgY2FsbGluZyBjc3NfdHJ5Z2V0CisJCSAqLwogCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogfQogI2VuZGlmCiAKQEAgLTE1MDgsNyArMTY0MCw4IEBACiAJCXJldHVybiAwOwogCiAJZG8gewotCQlwcm9ncmVzcyA9IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0obWVtLCBnZnBfbWFzaywgdHJ1ZSk7CisJCXByb2dyZXNzID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW0sCisJCQkJCWdmcF9tYXNrLCB0cnVlLCBmYWxzZSk7CiAJCXByb2dyZXNzICs9IG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtKTsKIAl9IHdoaWxlICghcHJvZ3Jlc3MgJiYgLS1yZXRyeSk7CiAKQEAgLTE1MjMsMTEgKzE2NTYsMjEgQEAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCiB7Ci0KLQlpbnQgcmV0cnlfY291bnQgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKKwlpbnQgcmV0cnlfY291bnQ7CiAJaW50IHByb2dyZXNzOwogCXU2NCBtZW1zd2xpbWl0OwogCWludCByZXQgPSAwOworCWludCBjaGlsZHJlbiA9IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW4obWVtY2cpOworCXU2NCBjdXJ1c2FnZSwgb2xkdXNhZ2U7CisKKwkvKgorCSAqIEZvciBrZWVwaW5nIGhpZXJhcmNoaWNhbF9yZWNsYWltIHNpbXBsZSwgaG93IGxvbmcgd2Ugc2hvdWxkIHJldHJ5CisJICogaXMgZGVwZW5kcyBvbiBjYWxsZXJzLiBXZSBzZXQgb3VyIHJldHJ5LWNvdW50IHRvIGJlIGZ1bmN0aW9uCisJICogb2YgIyBvZiBjaGlsZHJlbiB3aGljaCB3ZSBzaG91bGQgdmlzaXQgaW4gdGhpcyBsb29wLgorCSAqLworCXJldHJ5X2NvdW50ID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVMgKiBjaGlsZHJlbjsKKworCW9sZHVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19VU0FHRSk7CiAKIAl3aGlsZSAocmV0cnlfY291bnQpIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0xNTUzLDggKzE2OTYsMTMgQEAKIAkJCWJyZWFrOwogCiAJCXByb2dyZXNzID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1jZywgR0ZQX0tFUk5FTCwKLQkJCQkJCQkgICBmYWxzZSk7Ci0gIAkJaWYgKCFwcm9ncmVzcykJCQlyZXRyeV9jb3VudC0tOworCQkJCQkJICAgZmFsc2UsIHRydWUpOworCQljdXJ1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpOworCQkvKiBVc2FnZSBpcyByZWR1Y2VkID8gKi8KKyAgCQlpZiAoY3VydXNhZ2UgPj0gb2xkdXNhZ2UpCisJCQlyZXRyeV9jb3VudC0tOworCQllbHNlCisJCQlvbGR1c2FnZSA9IGN1cnVzYWdlOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNTYzLDEzICsxNzExLDE2IEBACiBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWVtc3dfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCiB7Ci0JaW50IHJldHJ5X2NvdW50ID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CisJaW50IHJldHJ5X2NvdW50OwogCXU2NCBtZW1saW1pdCwgb2xkdXNhZ2UsIGN1cnVzYWdlOwotCWludCByZXQ7CisJaW50IGNoaWxkcmVuID0gbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihtZW1jZyk7CisJaW50IHJldCA9IC1FQlVTWTsKIAogCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKLQorCS8qIHNlZSBtZW1fY2dyb3VwX3Jlc2l6ZV9yZXNfbGltaXQgKi8KKyAJcmV0cnlfY291bnQgPSBjaGlsZHJlbiAqIE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOworCW9sZHVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKTsKIAl3aGlsZSAocmV0cnlfY291bnQpIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlyZXQgPSAtRUlOVFI7CkBAIC0xNTkzLDExICsxNzQ0LDEzIEBACiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAKLQkJb2xkdXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfVVNBR0UpOwotCQltZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbWNnLCBHRlBfS0VSTkVMLCB0cnVlKTsKKwkJbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1jZywgR0ZQX0tFUk5FTCwgdHJ1ZSwgdHJ1ZSk7CiAJCWN1cnVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKTsKKwkJLyogVXNhZ2UgaXMgcmVkdWNlZCA/ICovCiAJCWlmIChjdXJ1c2FnZSA+PSBvbGR1c2FnZSkKIAkJCXJldHJ5X2NvdW50LS07CisJCWVsc2UKKwkJCW9sZHVzYWdlID0gY3VydXNhZ2U7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xODkzLDU0ICsyMDQ2LDkwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2Rlc2MgewotCWNvbnN0IGNoYXIgKm1zZzsKLQl1NjQgdW5pdDsKLX0gbWVtX2Nncm91cF9zdGF0X2Rlc2NbXSA9IHsKLQlbTUVNX0NHUk9VUF9TVEFUX0NBQ0hFXSA9IHsgImNhY2hlIiwgUEFHRV9TSVpFLCB9LAotCVtNRU1fQ0dST1VQX1NUQVRfUlNTXSA9IHsgInJzcyIsIFBBR0VfU0laRSwgfSwKLQlbTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVF0gPSB7InBncGdpbiIsIDEsIH0sCi0JW01FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5UXSA9IHsicGdwZ291dCIsIDEsIH0sCisKKy8qIEZvciByZWFkIHN0YXRpc3RpY3MgKi8KK2VudW0geworCU1DU19DQUNIRSwKKwlNQ1NfUlNTLAorCU1DU19QR1BHSU4sCisJTUNTX1BHUEdPVVQsCisJTUNTX0lOQUNUSVZFX0FOT04sCisJTUNTX0FDVElWRV9BTk9OLAorCU1DU19JTkFDVElWRV9GSUxFLAorCU1DU19BQ1RJVkVfRklMRSwKKwlNQ1NfVU5FVklDVEFCTEUsCisJTlJfTUNTX1NUQVQsCiB9OwogCitzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgeworCXM2NCBzdGF0W05SX01DU19TVEFUXTsKK307CisKK3N0cnVjdCB7CisJY2hhciAqbG9jYWxfbmFtZTsKKwljaGFyICp0b3RhbF9uYW1lOworfSBtZW1jZ19zdGF0X3N0cmluZ3NbTlJfTUNTX1NUQVRdID0geworCXsiY2FjaGUiLCAidG90YWxfY2FjaGUifSwKKwl7InJzcyIsICJ0b3RhbF9yc3MifSwKKwl7InBncGdpbiIsICJ0b3RhbF9wZ3BnaW4ifSwKKwl7InBncGdvdXQiLCAidG90YWxfcGdwZ291dCJ9LAorCXsiaW5hY3RpdmVfYW5vbiIsICJ0b3RhbF9pbmFjdGl2ZV9hbm9uIn0sCisJeyJhY3RpdmVfYW5vbiIsICJ0b3RhbF9hY3RpdmVfYW5vbiJ9LAorCXsiaW5hY3RpdmVfZmlsZSIsICJ0b3RhbF9pbmFjdGl2ZV9maWxlIn0sCisJeyJhY3RpdmVfZmlsZSIsICJ0b3RhbF9hY3RpdmVfZmlsZSJ9LAorCXsidW5ldmljdGFibGUiLCAidG90YWxfdW5ldmljdGFibGUifQorfTsKKworCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3N0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgKnMgPSBkYXRhOworCXM2NCB2YWw7CisKKwkvKiBwZXIgY3B1IHN0YXQgKi8KKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOworCXMtPnN0YXRbTUNTX0NBQ0hFXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CisJcy0+c3RhdFtNQ1NfUlNTXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVCk7CisJcy0+c3RhdFtNQ1NfUEdQR0lOXSArPSB2YWw7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQpOworCXMtPnN0YXRbTUNTX1BHUEdPVVRdICs9IHZhbDsKKworCS8qIHBlciB6b25lIHN0YXQgKi8KKwl2YWwgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW0sIExSVV9JTkFDVElWRV9BTk9OKTsKKwlzLT5zdGF0W01DU19JTkFDVElWRV9BTk9OXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfQUNUSVZFX0FOT04pOworCXMtPnN0YXRbTUNTX0FDVElWRV9BTk9OXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfSU5BQ1RJVkVfRklMRSk7CisJcy0+c3RhdFtNQ1NfSU5BQ1RJVkVfRklMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbSwgTFJVX0FDVElWRV9GSUxFKTsKKwlzLT5zdGF0W01DU19BQ1RJVkVfRklMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbSwgTFJVX1VORVZJQ1RBQkxFKTsKKwlzLT5zdGF0W01DU19VTkVWSUNUQUJMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbWVtX2Nncm91cF9nZXRfdG90YWxfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgKnMpCit7CisJbWVtX2Nncm91cF93YWxrX3RyZWUobWVtLCBzLCBtZW1fY2dyb3VwX2dldF9sb2NhbF9zdGF0KTsKK30KKwogc3RhdGljIGludCBtZW1fY29udHJvbF9zdGF0X3Nob3coc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0LAogCQkJCSBzdHJ1Y3QgY2dyb3VwX21hcF9jYiAqY2IpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY29udCk7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdCA9ICZtZW1fY29udC0+c3RhdDsKKwlzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgbXlzdGF0OwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdC0+Y3B1c3RhdFswXS5jb3VudCk7IGkrKykgewotCQlzNjQgdmFsOworCW1lbXNldCgmbXlzdGF0LCAwLCBzaXplb2YobXlzdGF0KSk7CisJbWVtX2Nncm91cF9nZXRfbG9jYWxfc3RhdChtZW1fY29udCwgJm15c3RhdCk7CiAKLQkJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoc3RhdCwgaSk7Ci0JCXZhbCAqPSBtZW1fY2dyb3VwX3N0YXRfZGVzY1tpXS51bml0OwotCQljYi0+ZmlsbChjYiwgbWVtX2Nncm91cF9zdGF0X2Rlc2NbaV0ubXNnLCB2YWwpOwotCX0KLQkvKiBzaG93aW5nICMgb2YgYWN0aXZlIHBhZ2VzICovCi0JewotCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9hbm9uLCBpbmFjdGl2ZV9hbm9uOwotCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9maWxlLCBpbmFjdGl2ZV9maWxlOwotCQl1bnNpZ25lZCBsb25nIHVuZXZpY3RhYmxlOworCWZvciAoaSA9IDA7IGkgPCBOUl9NQ1NfU1RBVDsgaSsrKQorCQljYi0+ZmlsbChjYiwgbWVtY2dfc3RhdF9zdHJpbmdzW2ldLmxvY2FsX25hbWUsIG15c3RhdC5zdGF0W2ldKTsKIAotCQlpbmFjdGl2ZV9hbm9uID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTFJVX0lOQUNUSVZFX0FOT04pOwotCQlhY3RpdmVfYW5vbiA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCUxSVV9BQ1RJVkVfQU5PTik7Ci0JCWluYWN0aXZlX2ZpbGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlMUlVfSU5BQ1RJVkVfRklMRSk7Ci0JCWFjdGl2ZV9maWxlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTFJVX0FDVElWRV9GSUxFKTsKLQkJdW5ldmljdGFibGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQkJTFJVX1VORVZJQ1RBQkxFKTsKLQotCQljYi0+ZmlsbChjYiwgImFjdGl2ZV9hbm9uIiwgKGFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7Ci0JCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfYW5vbiIsIChpbmFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7Ci0JCWNiLT5maWxsKGNiLCAiYWN0aXZlX2ZpbGUiLCAoYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9maWxlIiwgKGluYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJ1bmV2aWN0YWJsZSIsIHVuZXZpY3RhYmxlICogUEFHRV9TSVpFKTsKLQotCX0KKwkvKiBIaWVyYXJjaGljYWwgaW5mb3JtYXRpb24gKi8KIAl7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCwgbWVtc3dfbGltaXQ7CiAJCW1lbWNnX2dldF9oaWVyYXJjaGljYWxfbGltaXQobWVtX2NvbnQsICZsaW1pdCwgJm1lbXN3X2xpbWl0KTsKQEAgLTE5NDksNiArMjEzOCwxMiBAQAogCQkJY2ItPmZpbGwoY2IsICJoaWVyYXJjaGljYWxfbWVtc3dfbGltaXQiLCBtZW1zd19saW1pdCk7CiAJfQogCisJbWVtc2V0KCZteXN0YXQsIDAsIHNpemVvZihteXN0YXQpKTsKKwltZW1fY2dyb3VwX2dldF90b3RhbF9zdGF0KG1lbV9jb250LCAmbXlzdGF0KTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfTUNTX1NUQVQ7IGkrKykKKwkJY2ItPmZpbGwoY2IsIG1lbWNnX3N0YXRfc3RyaW5nc1tpXS50b3RhbF9uYW1lLCBteXN0YXQuc3RhdFtpXSk7CisKKwogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfcmF0aW8iLCBjYWxjX2luYWN0aXZlX3JhdGlvKG1lbV9jb250LCBOVUxMKSk7CiAKQEAgLTIxNzgsNiArMjM3Myw4IEBACiB7CiAJaW50IG5vZGU7CiAKKwlmcmVlX2Nzc19pZCgmbWVtX2Nncm91cF9zdWJzeXMsICZtZW0tPmNzcyk7CisKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5vZGUsIE5fUE9TU0lCTEUpCiAJCWZyZWVfbWVtX2Nncm91cF9wZXJfem9uZV9pbmZvKG1lbSwgbm9kZSk7CiAKQEAgLTIyMjgsMTEgKzI0MjUsMTIgQEAKIG1lbV9jZ3JvdXBfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqcGFyZW50OworCWxvbmcgZXJyb3IgPSAtRU5PTUVNOwogCWludCBub2RlOwogCiAJbWVtID0gbWVtX2Nncm91cF9hbGxvYygpOwogCWlmICghbWVtKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX1BPU1NJQkxFKQogCQlpZiAoYWxsb2NfbWVtX2Nncm91cF9wZXJfem9uZV9pbmZvKG1lbSwgbm9kZSkpCkBAIC0yMjYwLDcgKzI0NTgsNyBAQAogCQlyZXNfY291bnRlcl9pbml0KCZtZW0tPnJlcywgTlVMTCk7CiAJCXJlc19jb3VudGVyX2luaXQoJm1lbS0+bWVtc3csIE5VTEwpOwogCX0KLQltZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IE5VTEw7CisJbWVtLT5sYXN0X3NjYW5uZWRfY2hpbGQgPSAwOwogCXNwaW5fbG9ja19pbml0KCZtZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CiAKIAlpZiAocGFyZW50KQpAQCAtMjI2OSwyNiArMjQ2NywyMiBAQAogCXJldHVybiAmbWVtLT5jc3M7CiBmcmVlX291dDoKIAlfX21lbV9jZ3JvdXBfZnJlZShtZW0pOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQlzdHJ1Y3QgY2dyb3VwICpjb250KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjb250KTsKLQltZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbSwgZmFsc2UpOworCisJcmV0dXJuIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkobWVtLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY29udCk7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IG1lbS0+bGFzdF9zY2FubmVkX2NoaWxkOwogCi0JaWYgKGxhc3Rfc2Nhbm5lZF9jaGlsZCkgewotCQlWTV9CVUdfT04oIW1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUobGFzdF9zY2FubmVkX2NoaWxkKSk7Ci0JCW1lbV9jZ3JvdXBfcHV0KGxhc3Rfc2Nhbm5lZF9jaGlsZCk7Ci0JfQogCW1lbV9jZ3JvdXBfcHV0KG1lbSk7CiB9CiAKQEAgLTIzMjcsNiArMjUyMSw3IEBACiAJLnBvcHVsYXRlID0gbWVtX2Nncm91cF9wb3B1bGF0ZSwKIAkuYXR0YWNoID0gbWVtX2Nncm91cF9tb3ZlX3Rhc2ssCiAJLmVhcmx5X2luaXQgPSAwLAorCS51c2VfaWQgPSAxLAogfTsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggYmFhOTk5ZS4uY2Y2ODczZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTExNTEsNiArMTE1MSwxMSBAQAogCQlpZiAoKGZsYWdzICYgRk9MTF9XUklURSkgJiYKIAkJICAgICFwdGVfZGlydHkocHRlKSAmJiAhUGFnZURpcnR5KHBhZ2UpKQogCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCS8qCisJCSAqIHB0ZV9ta3lvdW5nKCkgd291bGQgYmUgbW9yZSBjb3JyZWN0IGhlcmUsIGJ1dCBhdG9taWMgY2FyZQorCQkgKiBpcyBuZWVkZWQgdG8gYXZvaWQgbG9zaW5nIHRoZSBkaXJ0eSBiaXQ6IGl0IGlzIGVhc2llciB0byB1c2UKKwkJICogbWFya19wYWdlX2FjY2Vzc2VkKCkuCisJCSAqLwogCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAJfQogdW5sb2NrOgpAQCAtMTY2NSw5ICsxNjcwLDEwIEBACiAJICogYmVoYXZpb3VyIHRoYXQgc29tZSBwcm9ncmFtcyBkZXBlbmQgb24uIFdlIG1hcmsgdGhlICJvcmlnaW5hbCIKIAkgKiB1bi1DT1cnZWQgcGFnZXMgYnkgbWF0Y2hpbmcgdGhlbSB1cCB3aXRoICJ2bWEtPnZtX3Bnb2ZmIi4KIAkgKi8KLQlpZiAoYWRkciA9PSB2bWEtPnZtX3N0YXJ0ICYmIGVuZCA9PSB2bWEtPnZtX2VuZCkKKwlpZiAoYWRkciA9PSB2bWEtPnZtX3N0YXJ0ICYmIGVuZCA9PSB2bWEtPnZtX2VuZCkgewogCQl2bWEtPnZtX3Bnb2ZmID0gcGZuOwotCWVsc2UgaWYgKGlzX2Nvd19tYXBwaW5nKHZtYS0+dm1fZmxhZ3MpKQorCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1BGTl9BVF9NTUFQOworCX0gZWxzZSBpZiAoaXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQOwpAQCAtMTY3OSw2ICsxNjg1LDcgQEAKIAkJICogbmVlZGVkIGZyb20gaGlnaGVyIGxldmVsIHJvdXRpbmUgY2FsbGluZyB1bm1hcF92bWFzCiAJCSAqLwogCQl2bWEtPnZtX2ZsYWdzICY9IH4oVk1fSU8gfCBWTV9SRVNFUlZFRCB8IFZNX1BGTk1BUCk7CisJCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTl9BVF9NTUFQOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5MzgsNiArMTk0NSwxNSBAQAogCQkgKiBnZXRfdXNlcl9wYWdlcygud3JpdGU9MSwgLmZvcmNlPTEpLgogCQkgKi8KIAkJaWYgKHZtYS0+dm1fb3BzICYmIHZtYS0+dm1fb3BzLT5wYWdlX21rd3JpdGUpIHsKKwkJCXN0cnVjdCB2bV9mYXVsdCB2bWY7CisJCQlpbnQgdG1wOworCisJCQl2bWYudmlydHVhbF9hZGRyZXNzID0gKHZvaWQgX191c2VyICopKGFkZHJlc3MgJgorCQkJCQkJCQlQQUdFX01BU0spOworCQkJdm1mLnBnb2ZmID0gb2xkX3BhZ2UtPmluZGV4OworCQkJdm1mLmZsYWdzID0gRkFVTFRfRkxBR19XUklURXxGQVVMVF9GTEFHX01LV1JJVEU7CisJCQl2bWYucGFnZSA9IG9sZF9wYWdlOworCiAJCQkvKgogCQkJICogTm90aWZ5IHRoZSBhZGRyZXNzIHNwYWNlIHRoYXQgdGhlIHBhZ2UgaXMgYWJvdXQgdG8KIAkJCSAqIGJlY29tZSB3cml0YWJsZSBzbyB0aGF0IGl0IGNhbiBwcm9oaWJpdCB0aGlzIG9yIHdhaXQKQEAgLTE5NDksOCArMTk2NSwxMiBAQAogCQkJcGFnZV9jYWNoZV9nZXQob2xkX3BhZ2UpOwogCQkJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogCi0JCQlpZiAodm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSh2bWEsIG9sZF9wYWdlKSA8IDApCisJCQl0bXAgPSB2bWEtPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgJnZtZik7CisJCQlpZiAodW5saWtlbHkodG1wICYKKwkJCQkJKFZNX0ZBVUxUX0VSUk9SIHwgVk1fRkFVTFRfTk9QQUdFKSkpIHsKKwkJCQlyZXQgPSB0bXA7CiAJCQkJZ290byB1bndyaXRhYmxlX3BhZ2U7CisJCQl9CiAKIAkJCS8qCiAJCQkgKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBsb2NrIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZQpAQCAtMjA5OSw3ICsyMTE5LDcgQEAKIAogdW53cml0YWJsZV9wYWdlOgogCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7Ci0JcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMjQzMyw4ICsyNDUzLDYgQEAKIAkJY291bnRfdm1fZXZlbnQoUEdNQUpGQVVMVCk7CiAJfQogCi0JbWFya19wYWdlX2FjY2Vzc2VkKHBhZ2UpOwotCiAJbG9ja19wYWdlKHBhZ2UpOwogCWRlbGF5YWNjdF9jbGVhcl9mbGFnKERFTEFZQUNDVF9QRl9TV0FQSU4pOwogCkBAIC0yNjQzLDkgKzI2NjEsMTQgQEAKIAkJCSAqIHRvIGJlY29tZSB3cml0YWJsZQogCQkJICovCiAJCQlpZiAodm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkgeworCQkJCWludCB0bXA7CisKIAkJCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJCQlpZiAodm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSh2bWEsIHBhZ2UpIDwgMCkgewotCQkJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCQkJdm1mLmZsYWdzIHw9IEZBVUxUX0ZMQUdfTUtXUklURTsKKwkJCQl0bXAgPSB2bWEtPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgJnZtZik7CisJCQkJaWYgKHVubGlrZWx5KHRtcCAmCisJCQkJCSAgKFZNX0ZBVUxUX0VSUk9SIHwgVk1fRkFVTFRfTk9QQUdFKSkpIHsKKwkJCQkJcmV0ID0gdG1wOwogCQkJCQlhbm9uID0gMTsgLyogbm8gYW5vbiBidXQgcmVsZWFzZSB2bWYucGFnZSAqLwogCQkJCQlnb3RvIG91dF91bmxvY2tlZDsKIAkJCQl9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggYTllZmYzZi4uMDY4NjU1ZCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6CiAgKiAxIGZvciBhbm9ueW1vdXMgcGFnZXMgd2l0aG91dCBhIG1hcHBpbmcKICAqIDIgZm9yIHBhZ2VzIHdpdGggYSBtYXBwaW5nCi0gKiAzIGZvciBwYWdlcyB3aXRoIGEgbWFwcGluZyBhbmQgUGFnZVByaXZhdGUgc2V0LgorICogMyBmb3IgcGFnZXMgd2l0aCBhIG1hcHBpbmcgYW5kIFBhZ2VQcml2YXRlL1BhZ2VQcml2YXRlMiBzZXQuCiAgKi8KIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMjcwLDcgKzI3MCw3IEBACiAJcHNsb3QgPSByYWRpeF90cmVlX2xvb2t1cF9zbG90KCZtYXBwaW5nLT5wYWdlX3RyZWUsCiAgCQkJCQlwYWdlX2luZGV4KHBhZ2UpKTsKIAotCWV4cGVjdGVkX2NvdW50ID0gMiArICEhUGFnZVByaXZhdGUocGFnZSk7CisJZXhwZWN0ZWRfY291bnQgPSAyICsgISFwYWdlX2hhc19wcml2YXRlKHBhZ2UpOwogCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IGV4cGVjdGVkX2NvdW50IHx8CiAJCQkoc3RydWN0IHBhZ2UgKilyYWRpeF90cmVlX2RlcmVmX3Nsb3QocHNsb3QpICE9IHBhZ2UpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAKIC8qCiAgKiBDb21tb24gbG9naWMgdG8gZGlyZWN0bHkgbWlncmF0ZSBhIHNpbmdsZSBwYWdlIHN1aXRhYmxlIGZvcgotICogcGFnZXMgdGhhdCBkbyBub3QgdXNlIFBhZ2VQcml2YXRlLgorICogcGFnZXMgdGhhdCBkbyBub3QgdXNlIFBhZ2VQcml2YXRlL1BhZ2VQcml2YXRlMi4KICAqCiAgKiBQYWdlcyBhcmUgbG9ja2VkIHVwb24gZW50cnkgYW5kIGV4aXQuCiAgKi8KQEAgLTUyMiw3ICs1MjIsNyBAQAogCSAqIEJ1ZmZlcnMgbWF5IGJlIG1hbmFnZWQgaW4gYSBmaWxlc3lzdGVtIHNwZWNpZmljIHdheS4KIAkgKiBXZSBtdXN0IGhhdmUgbm8gYnVmZmVycyBvciBkcm9wIHRoZW0uCiAJICovCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkgJiYKIAkgICAgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC02NTUsNyArNjU1LDcgQEAKIAkgKiBmcmVlIHRoZSBtZXRhZGF0YSwgc28gdGhlIHBhZ2UgY2FuIGJlIGZyZWVkLgogCSAqLwogCWlmICghcGFnZS0+bWFwcGluZykgewotCQlpZiAoIVBhZ2VBbm9uKHBhZ2UpICYmIFBhZ2VQcml2YXRlKHBhZ2UpKSB7CisJCWlmICghUGFnZUFub24ocGFnZSkgJiYgcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSkgewogCQkJLyoKIAkJCSAqIEdvIGRpcmVjdCB0byB0cnlfdG9fZnJlZV9idWZmZXJzKCkgaGVyZSBiZWNhdXNlCiAJCQkgKiBhKSB0aGF0J3Mgd2hhdCB0cnlfdG9fcmVsZWFzZV9wYWdlKCkgd291bGQgZG8gYW55d2F5CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMWFiYjkxOC4uNGEzODQxMSAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjQ4MSw3ICsyNDgxLDQgQEAKICAqLwogdm9pZCBfX2luaXQgbW1hcF9pbml0KHZvaWQpCiB7Ci0Jdm1fYXJlYV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidm1fYXJlYV9zdHJ1Y3QiLAotCQkJc2l6ZW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCksIDAsCi0JCQlTTEFCX1BBTklDLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDJmY2Y0N2QuLjcyZWRhNGEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNjksNyArNjksNyBAQAogaW50IHN5c2N0bF9ucl90cmltX3BhZ2VzID0gMTsgLyogcGFnZSB0cmltbWluZyBiZWhhdmlvdXIgKi8KIGludCBoZWFwX3N0YWNrX2dhcCA9IDA7CiAKLWF0b21pY190IG1tYXBfcGFnZXNfYWxsb2NhdGVkOworYXRvbWljX2xvbmdfdCBtbWFwX3BhZ2VzX2FsbG9jYXRlZDsKIAogRVhQT1JUX1NZTUJPTChtZW1fbWFwKTsKIEVYUE9SVF9TWU1CT0wobnVtX3BoeXNwYWdlcyk7CkBAIC00NjMsMTIgKzQ2Myw3IEBACiAgKi8KIHZvaWQgX19pbml0IG1tYXBfaW5pdCh2b2lkKQogewotCXZtX3JlZ2lvbl9qYXIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidm1fcmVnaW9uX2phciIsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCB2bV9yZWdpb24pLCAwLAotCQkJCQkgIFNMQUJfUEFOSUMsIE5VTEwpOwotCXZtX2FyZWFfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInZtX2FyZWFfc3RydWN0IiwKLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCksIDAsCi0JCQkJCSAgIFNMQUJfUEFOSUMsIE5VTEwpOworCXZtX3JlZ2lvbl9qYXIgPSBLTUVNX0NBQ0hFKHZtX3JlZ2lvbiwgU0xBQl9QQU5JQyk7CiB9CiAKIC8qCkBAIC00ODYsMjcgKzQ4MSwyNCBAQAogCQlyZXR1cm47CiAKIAlsYXN0ID0gcmJfZW50cnkobGFzdHAsIHN0cnVjdCB2bV9yZWdpb24sIHZtX3JiKTsKLQlpZiAodW5saWtlbHkobGFzdC0+dm1fZW5kIDw9IGxhc3QtPnZtX3N0YXJ0KSkKLQkJQlVHKCk7Ci0JaWYgKHVubGlrZWx5KGxhc3QtPnZtX3RvcCA8IGxhc3QtPnZtX2VuZCkpCi0JCUJVRygpOworCUJVR19PTih1bmxpa2VseShsYXN0LT52bV9lbmQgPD0gbGFzdC0+dm1fc3RhcnQpKTsKKwlCVUdfT04odW5saWtlbHkobGFzdC0+dm1fdG9wIDwgbGFzdC0+dm1fZW5kKSk7CiAKIAl3aGlsZSAoKHAgPSByYl9uZXh0KGxhc3RwKSkpIHsKIAkJcmVnaW9uID0gcmJfZW50cnkocCwgc3RydWN0IHZtX3JlZ2lvbiwgdm1fcmIpOwogCQlsYXN0ID0gcmJfZW50cnkobGFzdHAsIHN0cnVjdCB2bV9yZWdpb24sIHZtX3JiKTsKIAotCQlpZiAodW5saWtlbHkocmVnaW9uLT52bV9lbmQgPD0gcmVnaW9uLT52bV9zdGFydCkpCi0JCQlCVUcoKTsKLQkJaWYgKHVubGlrZWx5KHJlZ2lvbi0+dm1fdG9wIDwgcmVnaW9uLT52bV9lbmQpKQotCQkJQlVHKCk7Ci0JCWlmICh1bmxpa2VseShyZWdpb24tPnZtX3N0YXJ0IDwgbGFzdC0+dm1fdG9wKSkKLQkJCUJVRygpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV9lbmQgPD0gcmVnaW9uLT52bV9zdGFydCkpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV90b3AgPCByZWdpb24tPnZtX2VuZCkpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV9zdGFydCA8IGxhc3QtPnZtX3RvcCkpOwogCiAJCWxhc3RwID0gcDsKIAl9CiB9CiAjZWxzZQotI2RlZmluZSB2YWxpZGF0ZV9ub21tdV9yZWdpb25zKCkgZG8ge30gd2hpbGUoMCkKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX25vbW11X3JlZ2lvbnModm9pZCkKK3sKK30KICNlbmRpZgogCiAvKgpAQCAtNTYzLDE2ICs1NTUsMTcgQEAKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZnJvbSk7CiAKIAkJa2RlYnVnKCItIGZyZWUgJWx4IiwgZnJvbSk7Ci0JCWF0b21pY19kZWMoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKKwkJYXRvbWljX2xvbmdfZGVjKCZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CiAJCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDEpCi0JCQlrZGVidWcoImZyZWUgcGFnZSAlcCBbJWRdIiwgcGFnZSwgcGFnZV9jb3VudChwYWdlKSk7CisJCQlrZGVidWcoImZyZWUgcGFnZSAlcDogcmVmY291bnQgbm90IG9uZTogJWQiLAorCQkJICAgICAgIHBhZ2UsIHBhZ2VfY291bnQocGFnZSkpOwogCQlwdXRfcGFnZShwYWdlKTsKIAl9CiB9CiAKIC8qCiAgKiByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgcmVnaW9uCi0gKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWdpb24gc2VtYXBob3JlLCB3aGljaCB0aGlzIHJlbGVhc2VzCisgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWdpb24gc2VtYXBob3JlIGZvciB3cml0aW5nLCB3aGljaCB0aGlzIHJlbGVhc2VzCiAgKiAtIHRoZSByZWdpb24gbWF5IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHRyZWUgeWV0LCBpbiB3aGljaCBjYXNlIHZtX3RvcAogICogICB3aWxsIGVxdWFsIHZtX3N0YXJ0CiAgKi8KQEAgLTEwOTYsNyArMTA4OSw3IEBACiAJCWdvdG8gZW5vbWVtOwogCiAJdG90YWwgPSAxIDw8IG9yZGVyOwotCWF0b21pY19hZGQodG90YWwsICZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CisJYXRvbWljX2xvbmdfYWRkKHRvdGFsLCAmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOwogCiAJcG9pbnQgPSBybGVuID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTExMDcsNyArMTEwMCw3IEBACiAJCQlvcmRlciA9IGlsb2cyKHRvdGFsIC0gcG9pbnQpOwogCQkJbiA9IDEgPDwgb3JkZXI7CiAJCQlrZGVidWcoInNoYXZlICVsdS8lbHUgQCVsdSIsIG4sIHRvdGFsIC0gcG9pbnQsIHRvdGFsKTsKLQkJCWF0b21pY19zdWIobiwgJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKKwkJCWF0b21pY19sb25nX3N1YihuLCAmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOwogCQkJdG90YWwgLT0gbjsKIAkJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZXMgKyB0b3RhbCk7CiAJCQlfX2ZyZWVfcGFnZXMocGFnZXMgKyB0b3RhbCwgb3JkZXIpOwpAQCAtMTUzNiwxMCArMTUyOSwxNSBAQAogCS8qIGZpbmQgdGhlIGZpcnN0IHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIFZNQSAqLwogCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CiAJaWYgKCF2bWEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIm11bm1hcCBvZiBtZW1vcnkgbm90IG1tYXBwZWQgYnkgcHJvY2VzcyAlZCAoJXMpOiIKLQkJICAgICAgICIgMHglbHgtMHglbHhcbiIsCi0JCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEpOworCQlzdGF0aWMgaW50IGxpbWl0ID0gMDsKKwkJaWYgKGxpbWl0IDwgNSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJtdW5tYXAgb2YgbWVtb3J5IG5vdCBtbWFwcGVkIGJ5IHByb2Nlc3MgJWQiCisJCQkgICAgICAgIiAoJXMpOiAweCVseC0weCVseFxuIiwKKwkJCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sCisJCQkgICAgICAgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSk7CisJCQlsaW1pdCsrOworCQl9CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNDBiYTA1MC4uMmYzMTY2ZSAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHVuc2lnbmVkIGxvbmcgYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXB0aW1lKQogewotCXVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjcHVfdGltZSwgcnVuX3RpbWUsIHM7CisJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNwdV90aW1lLCBydW5fdGltZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOwogCkBAIC0xMTAsMTIgKzExMCwxMCBAQAogCWVsc2UKIAkJcnVuX3RpbWUgPSAwOwogCi0JcyA9IGludF9zcXJ0KGNwdV90aW1lKTsKLQlpZiAocykKLQkJcG9pbnRzIC89IHM7Ci0JcyA9IGludF9zcXJ0KGludF9zcXJ0KHJ1bl90aW1lKSk7Ci0JaWYgKHMpCi0JCXBvaW50cyAvPSBzOworCWlmIChjcHVfdGltZSkKKwkJcG9pbnRzIC89IGludF9zcXJ0KGNwdV90aW1lKTsKKwlpZiAocnVuX3RpbWUpCisJCXBvaW50cyAvPSBpbnRfc3FydChpbnRfc3FydChydW5fdGltZSkpOwogCiAJLyoKIAkgKiBOaWNlZCBwcm9jZXNzZXMgYXJlIG1vc3QgbGlrZWx5IGxlc3MgaW1wb3J0YW50LCBzbyBkb3VibGUKQEAgLTM5Niw2ICszOTQsNyBAQAogCQljcHVzZXRfcHJpbnRfdGFza19tZW1zX2FsbG93ZWQoY3VycmVudCk7CiAJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCQlkdW1wX3N0YWNrKCk7CisJCW1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8obWVtLCBjdXJyZW50KTsKIAkJc2hvd19tZW0oKTsKIAkJaWYgKHN5c2N0bF9vb21fZHVtcF90YXNrcykKIAkJCWR1bXBfdGFza3MobWVtKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDQwY2E3Y2QuLjMwMzUxZjAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtOTIsMTQgKzkyLDE0IEBACiB1bnNpZ25lZCBsb25nIHZtX2RpcnR5X2J5dGVzOwogCiAvKgotICogVGhlIGludGVydmFsIGJldHdlZW4gYGt1cGRhdGUnLXN0eWxlIHdyaXRlYmFja3MsIGluIGppZmZpZXMKKyAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzCiAgKi8KLWludCBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgPSA1ICogSFo7Cit1bnNpZ25lZCBpbnQgZGlydHlfd3JpdGViYWNrX2ludGVydmFsID0gNSAqIDEwMDsgLyogc2VudGlzZWNvbmRzICovCiAKIC8qCi0gKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgamlmZmllcyBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQorICogVGhlIGxvbmdlc3QgdGltZSBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQogICovCi1pbnQgZGlydHlfZXhwaXJlX2ludGVydmFsID0gMzAgKiBIWjsKK3Vuc2lnbmVkIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWwgPSAzMCAqIDEwMDsgLyogc2VudGlzZWNvbmRzICovCiAKIC8qCiAgKiBGbGFnIHRoYXQgbWFrZXMgdGhlIG1hY2hpbmUgZHVtcCB3cml0ZXMvcmVhZHMgYW5kIGJsb2NrIGRpcnR5aW5ncy4KQEAgLTc3MCw5ICs3NzAsOSBAQAogCiAJc3luY19zdXBlcnMoKTsKIAotCW9sZGVzdF9qaWYgPSBqaWZmaWVzIC0gZGlydHlfZXhwaXJlX2ludGVydmFsOworCW9sZGVzdF9qaWYgPSBqaWZmaWVzIC0gbXNlY3NfdG9famlmZmllcyhkaXJ0eV9leHBpcmVfaW50ZXJ2YWwpOwogCXN0YXJ0X2ppZiA9IGppZmZpZXM7Ci0JbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWw7CisJbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKIAlucl90b193cml0ZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKIAkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CkBAIC04MDEsOSArODAxLDEwIEBACiBpbnQgZGlydHlfd3JpdGViYWNrX2NlbnRpc2Vjc19oYW5kbGVyKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKIHsKLQlwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CiAJaWYgKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKLQkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArIGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCk7CisJCW1vZF90aW1lcigmd2JfdGltZXIsIGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcyhkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgKiAxMCkpOwogCWVsc2UKIAkJZGVsX3RpbWVyKCZ3Yl90aW1lcik7CiAJcmV0dXJuIDA7CkBAIC05MDUsNyArOTA2LDggQEAKIHsKIAlpbnQgc2hpZnQ7CiAKLQltb2RfdGltZXIoJndiX3RpbWVyLCBqaWZmaWVzICsgZGlydHlfd3JpdGViYWNrX2ludGVydmFsKTsKKwltb2RfdGltZXIoJndiX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKSk7CiAJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnJhdGVsaW1pdF9uYik7CiAKQEAgLTExOTgsNiArMTIwMCwyMCBAQAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBzZXRfcGFnZV9kaXJ0eSBmYW1pbHkuCisgKiBOT1RFOiBUaGlzIHJlbGllcyBvbiBiZWluZyBhdG9taWMgd3J0IGludGVycnVwdHMuCisgKi8KK3ZvaWQgYWNjb3VudF9wYWdlX2RpcnRpZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7CisJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKKwkJX19pbmNfYmRpX3N0YXQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywgQkRJX1JFQ0xBSU1BQkxFKTsKKwkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7CisJCXRhc2tfaW9fYWNjb3VudF93cml0ZShQQUdFX0NBQ0hFX1NJWkUpOworCX0KK30KKworLyoKICAqIEZvciBhZGRyZXNzX3NwYWNlcyB3aGljaCBkbyBub3QgdXNlIGJ1ZmZlcnMuICBKdXN0IHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbgogICogaXRzIHJhZGl4IHRyZWUuCiAgKgpAQCAtMTIyNiwxMyArMTI0Miw3IEBACiAJCWlmIChtYXBwaW5nMikgeyAvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCQlCVUdfT04obWFwcGluZzIgIT0gbWFwcGluZyk7CiAJCQlXQVJOX09OX09OQ0UoIVBhZ2VQcml2YXRlKHBhZ2UpICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwotCQkJaWYgKG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykpIHsKLQkJCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7Ci0JCQkJX19pbmNfYmRpX3N0YXQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywKLQkJCQkJCUJESV9SRUNMQUlNQUJMRSk7Ci0JCQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7Ci0JCQkJdGFza19pb19hY2NvdW50X3dyaXRlKFBBR0VfQ0FDSEVfU0laRSk7Ci0JCQl9CisJCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKIAkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAogCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOwogCQl9CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggZGFhMzZmMS4uM2YzMDE4OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtOTIyLDEzICs5MjIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB6b25lICp6b25lOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwc2V0OwogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKLQogCQlwc2V0ID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKIAogCQlwY3AgPSAmcHNldC0+cGNwOwpAQCAtMTQ3OSw2ICsxNDc2LDggQEAKIAl1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfcmVjbGFpbWVkID0gMDsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZ2ZwX21hc2spOworCiAJbWlnaHRfc2xlZXBfaWYod2FpdCk7CiAKIAlpZiAoc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZShnZnBfbWFzaywgb3JkZXIpKQpAQCAtMTU3OCwxMiArMTU3NywxNiBAQAogCSAqLwogCWNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKTsKIAlwLT5mbGFncyB8PSBQRl9NRU1BTExPQzsKKworCWxvY2tkZXBfc2V0X2N1cnJlbnRfcmVjbGFpbV9zdGF0ZShnZnBfbWFzayk7CiAJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJcC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JZGlkX3NvbWVfcHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgb3JkZXIsIGdmcF9tYXNrKTsKKwlkaWRfc29tZV9wcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBvcmRlciwKKwkJCQkJCWdmcF9tYXNrLCBub2RlbWFzayk7CiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKKwlsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSgpOwogCXAtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsKIAogCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTg3NCwxMCArMTg3Nyw3IEBACiAJaW50IGNwdTsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgewotCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQotCQkJY29udGludWU7Ci0KKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlcyBwZXItY3B1OlxuIiwgem9uZS0+bmFtZSk7CiAKQEAgLTE5MTcsMTIgKzE5MTcsOSBAQAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9QQUdFVEFCTEUpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9CT1VOQ0UpKTsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJaW50IGk7CiAKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlcyIKIAkJCSIgZnJlZTolbHVrQiIKQEAgLTE5NjIsMTIgKzE5NTksOSBAQAogCQlwcmludGsoIlxuIik7CiAJfQogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogIAkJdW5zaWduZWQgbG9uZyBucltNQVhfT1JERVJdLCBmbGFncywgb3JkZXIsIHRvdGFsID0gMDsKIAotCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQotCQkJY29udGludWU7Ci0KIAkJc2hvd19ub2RlKHpvbmUpOwogCQlwcmludGsoIiVzOiAiLCB6b25lLT5uYW1lKTsKIApAQCAtMjc3OSwxMSArMjc3Myw3IEBACiAKIAlub2RlX3NldF9zdGF0ZShub2RlLCBOX0NQVSk7CS8qIHRoaXMgbm9kZSBoYXMgYSBjcHUgKi8KIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgewotCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKLQorCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJem9uZV9wY3Aoem9uZSwgY3B1KSA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHBlcl9jcHVfcGFnZXNldCksCiAJCQkJCSBHRlBfS0VSTkVMLCBub2RlKTsKIAkJaWYgKCF6b25lX3BjcCh6b25lLCBjcHUpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggY2VlY2ZiYi4uNzkxOTA1YyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0yODUsMTIgKzI4NSw4IEBACiAKIHN0cnVjdCBzd2FwX2Nncm91cF9jdHJsIHN3YXBfY2dyb3VwX2N0cmxbTUFYX1NXQVBGSUxFU107CiAKLS8qCi0gKiBUaGlzIDhieXRlcyBzZWVtcyBiaWcuLm1heWJlIHdlIGNhbiByZWR1Y2UgdGhpcyB3aGVuIHdlIGNhbiB1c2UgImlkIiBmb3IKLSAqIGNncm91cCByYXRoZXIgdGhhbiBwb2ludGVyLgotICovCiBzdHJ1Y3Qgc3dhcF9jZ3JvdXAgewotCXN0cnVjdCBtZW1fY2dyb3VwCSp2YWw7CisJdW5zaWduZWQgc2hvcnQJCWlkOwogfTsKICNkZWZpbmUgU0NfUEVSX1BBR0UJKFBBR0VfU0laRS9zaXplb2Yoc3RydWN0IHN3YXBfY2dyb3VwKSkKICNkZWZpbmUgU0NfUE9TX01BU0sJKFNDX1BFUl9QQUdFIC0gMSkKQEAgLTM0MiwxMCArMzM4LDEwIEBACiAgKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIHJlY29yZGVkIGludG8KICAqIEBtZW06IG1lbV9jZ3JvdXAgdG8gYmUgcmVjb3JkZWQKICAqCi0gKiBSZXR1cm5zIG9sZCB2YWx1ZSBhdCBzdWNjZXNzLCBOVUxMIGF0IGZhaWx1cmUuCi0gKiAoT2YgY291cnNlLCBvbGQgdmFsdWUgY2FuIGJlIE5VTEwuKQorICogUmV0dXJucyBvbGQgdmFsdWUgYXQgc3VjY2VzcywgMCBhdCBmYWlsdXJlLgorICogKE9mIGNvdXJzZSwgb2xkIHZhbHVlIGNhbiBiZSAwLikKICAqLwotc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCkKIHsKIAlpbnQgdHlwZSA9IHN3cF90eXBlKGVudCk7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudCk7CkBAIC0zNTQsMTggKzM1MCwxOCBAQAogCXN0cnVjdCBzd2FwX2Nncm91cF9jdHJsICpjdHJsOwogCXN0cnVjdCBwYWdlICptYXBwYWdlOwogCXN0cnVjdCBzd2FwX2Nncm91cCAqc2M7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm9sZDsKKwl1bnNpZ25lZCBzaG9ydCBvbGQ7CiAKIAlpZiAoIWRvX3N3YXBfYWNjb3VudCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAwOwogCiAJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOwogCiAJbWFwcGFnZSA9IGN0cmwtPm1hcFtpZHhdOwogCXNjID0gcGFnZV9hZGRyZXNzKG1hcHBhZ2UpOwogCXNjICs9IHBvczsKLQlvbGQgPSBzYy0+dmFsOwotCXNjLT52YWwgPSBtZW07CisJb2xkID0gc2MtPmlkOworCXNjLT5pZCA9IGlkOwogCiAJcmV0dXJuIG9sZDsKIH0KQEAgLTM3NCw5ICszNzAsOSBAQAogICogbG9va3VwX3N3YXBfY2dyb3VwIC0gbG9va3VwIG1lbV9jZ3JvdXAgdGllZCB0byBzd2FwIGVudHJ5CiAgKiBAZW50OiBzd2FwIGVudHJ5IHRvIGJlIGxvb2tlZCB1cC4KICAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gbWVtX2Nncm91cCBhdCBzdWNjZXNzLiBOVUxMIGF0IGZhaWx1cmUuCisgKiBSZXR1cm5zIENTUyBJRCBvZiBtZW1fY2dyb3VwIGF0IHN1Y2Nlc3MuIDAgYXQgZmFpbHVyZS4gKDAgaXMgaW52YWxpZCBJRCkKICAqLwotc3RydWN0IG1lbV9jZ3JvdXAgKmxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpCit1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KQogewogCWludCB0eXBlID0gc3dwX3R5cGUoZW50KTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50KTsKQEAgLTM4NSwxNiArMzgxLDE2IEBACiAJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7CiAJc3RydWN0IHBhZ2UgKm1hcHBhZ2U7CiAJc3RydWN0IHN3YXBfY2dyb3VwICpzYzsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqcmV0OworCXVuc2lnbmVkIHNob3J0IHJldDsKIAogCWlmICghZG9fc3dhcF9hY2NvdW50KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIDA7CiAKIAljdHJsID0gJnN3YXBfY2dyb3VwX2N0cmxbdHlwZV07CiAJbWFwcGFnZSA9IGN0cmwtPm1hcFtpZHhdOwogCXNjID0gcGFnZV9hZGRyZXNzKG1hcHBhZ2UpOwogCXNjICs9IHBvczsKLQlyZXQgPSBzYy0+dmFsOworCXJldCA9IHNjLT5pZDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MzAsMTMgKzQyNiw2IEBACiAJfQogCW11dGV4X3VubG9jaygmc3dhcF9jZ3JvdXBfbXV0ZXgpOwogCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkic3dhcF9jZ3JvdXA6IHVzZXMgJWxkIGJ5dGVzIG9mIHZtYWxsb2MgZm9yIHBvaW50ZXIgYXJyYXkgc3BhY2UiCi0JCSIgYW5kICVsZCBieXRlcyB0byBob2xkIG1lbV9jZ3JvdXAgcG9pbnRlcnMgb24gc3dhcFxuIiwKLQkJYXJyYXlfc2l6ZSwgbGVuZ3RoICogUEFHRV9TSVpFKTsKLQlwcmludGsoS0VSTl9JTkZPCi0JInN3YXBfY2dyb3VwIGNhbiBiZSBkaXNhYmxlZCBieSBub3N3YXBhY2NvdW50IGJvb3Qgb3B0aW9uLlxuIik7Ci0KIAlyZXR1cm4gMDsKIG5vbWVtOgogCXByaW50ayhLRVJOX0lORk8gImNvdWxkbid0IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHN3YXBfY2dyb3VwLlxuIik7CmRpZmYgLS1naXQgYS9tbS9wZGZsdXNoLmMgYi9tbS9wZGZsdXNoLmMKaW5kZXggMTVkZTUwOS4uMTE4OTA1ZSAxMDA2NDQKLS0tIGEvbW0vcGRmbHVzaC5jCisrKyBiL21tL3BkZmx1c2guYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAKIAkvKgogCSAqIFNvbWUgY29uZmlncyBwdXQgb3VyIHBhcmVudCBrdGhyZWFkIGluIGEgbGltaXRlZCBjcHVzZXQsCi0JICogd2hpY2gga3RocmVhZCgpIG92ZXJyaWRlcywgZm9yY2luZyBjcHVzX2FsbG93ZWQgPT0gQ1BVX01BU0tfQUxMLgorCSAqIHdoaWNoIGt0aHJlYWQoKSBvdmVycmlkZXMsIGZvcmNpbmcgY3B1c19hbGxvd2VkID09IGNwdV9hbGxfbWFzay4KIAkgKiBPdXIgbmVlZHMgYXJlIG1vcmUgbW9kZXN0IC0gY3V0IGJhY2sgdG8gb3VyIGNwdXNldHMgY3B1c19hbGxvd2VkLgogCSAqIFRoaXMgaXMgbmVlZGVkIGFzIHBkZmx1c2gncyBhcmUgZHluYW1pY2FsbHkgY3JlYXRlZCBhbmQgZGVzdHJveWVkLgogCSAqIFRoZSBib290dGltZSBwZGZsdXNoJ3MgYXJlIGVhc2lseSBwbGFjZWQgdy9vIHRoZXNlIDIgbGluZXMuCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDljZTMwM2QuLjEzM2I2ZDUgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0zMSw2ICszMSw0MiBAQAogCiAjZGVmaW5lIGxpc3RfdG9fcGFnZShoZWFkKSAobGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQogCisvKgorICogc2VlIGlmIGEgcGFnZSBuZWVkcyByZWxlYXNpbmcgdXBvbiByZWFkX2NhY2hlX3BhZ2VzKCkgZmFpbHVyZQorICogLSB0aGUgY2FsbGVyIG9mIHJlYWRfY2FjaGVfcGFnZXMoKSBtYXkgaGF2ZSBzZXQgUEdfcHJpdmF0ZSBvciBQR19mc2NhY2hlCisgKiAgIGJlZm9yZSBjYWxsaW5nLCBzdWNoIGFzIHRoZSBORlMgZnMgbWFya2luZyBwYWdlcyB0aGF0IGFyZSBjYWNoZWQgbG9jYWxseQorICogICBvbiBkaXNrLCB0aHVzIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgZnMgYSBjaGFuY2UgdG8gY2xlYW4gdXAgaW4gdGhlIGV2ZW50IG9mCisgKiAgIGFuIGVycm9yCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKSB7CisJCWlmICghdHJ5bG9ja19wYWdlKHBhZ2UpKQorCQkJQlVHKCk7CisJCXBhZ2UtPm1hcHBpbmcgPSBtYXBwaW5nOworCQlkb19pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKKwkJcGFnZS0+bWFwcGluZyA9IE5VTEw7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgbGlzdCBvZiBwYWdlcywgaW52YWxpZGF0aW5nIHRoZW0gZmlyc3QgaWYgbmVlZCBiZQorICovCitzdGF0aWMgdm9pZCByZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzKQoreworCXN0cnVjdCBwYWdlICp2aWN0aW07CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZXMpKSB7CisJCXZpY3RpbSA9IGxpc3RfdG9fcGFnZShwYWdlcyk7CisJCWxpc3RfZGVsKCZ2aWN0aW0tPmxydSk7CisJCXJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlKG1hcHBpbmcsIHZpY3RpbSk7CisJfQorfQorCiAvKioKICAqIHJlYWRfY2FjaGVfcGFnZXMgLSBwb3B1bGF0ZSBhbiBhZGRyZXNzIHNwYWNlIHdpdGggc29tZSBwYWdlcyAmIHN0YXJ0IHJlYWRzIGFnYWluc3QgdGhlbQogICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlCkBAIC01MiwxNCArODgsMTQgQEAKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJCWlmIChhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKIAkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQlyZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAogCQlyZXQgPSBmaWxsZXIoZGF0YSwgcGFnZSk7CiAJCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCQlwdXRfcGFnZXNfbGlzdChwYWdlcyk7CisJCQlyZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZXMobWFwcGluZywgcGFnZXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJdGFza19pb19hY2NvdW50X3JlYWQoUEFHRV9DQUNIRV9TSVpFKTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDdlYzc4ZTIuLmQ5NGQyZTkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTA2OCw4ICsxMDY4LDcgQEAKIAkJc3dhcF9kdXBsaWNhdGUoc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7CiAJCWlmIChpbm9kZSkgewogCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDRkMDA4NTUuLjIwODMyM2YgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTMzMTgsNiArMzMxOCw4IEBACiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKnB0cjsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZmxhZ3MpOworCiAJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzM5NCw2ICszMzk2LDggQEAKIAl1bnNpZ25lZCBsb25nIHNhdmVfZmxhZ3M7CiAJdm9pZCAqb2JqcDsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZmxhZ3MpOworCiAJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzk4OCw4ICszOTkyLDcgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2VhcmNocDsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0KLQkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmsgPSB0b19kZWxheWVkX3dvcmsodyk7CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmNhY2hlX2NoYWluX211dGV4KSkKIAkJLyogR2l2ZSB1cC4gU2V0dXAgdGhlIG5leHQgaXRlcmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDBiZmE2ODAuLjdhMzQxMTUgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTQ3NSw2ICs0NzUsOCBAQAogCXVuc2lnbmVkIGludCAqbTsKIAlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCisJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnApOworCiAJaWYgKHNpemUgPCBQQUdFX1NJWkUgLSBhbGlnbikgewogCQlpZiAoIXNpemUpCiAJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBjNjVhNGVkLi5jNGVhOTE1IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xNTkwLDYgKzE1OTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG9ianNpemU7CiAKKwlsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcGZsYWdzKTsKIAltaWdodF9zbGVlcF9pZihnZnBmbGFncyAmIF9fR0ZQX1dBSVQpOwogCiAJaWYgKHNob3VsZF9mYWlsc2xhYihzLT5vYmpzaXplLCBnZnBmbGFncykpCmRpZmYgLS1naXQgYS9tbS9zcGFyc2UuYyBiL21tL3NwYXJzZS5jCmluZGV4IDA4M2Y1YjYuLmRhNDMyZDkgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS5jCisrKyBiL21tL3NwYXJzZS5jCkBAIC0xNjQsOSArMTY0LDcgQEAKIAkJV0FSTl9PTl9PTkNFKDEpOwogCQkqc3RhcnRfcGZuID0gbWF4X3NwYXJzZW1lbV9wZm47CiAJCSplbmRfcGZuID0gbWF4X3NwYXJzZW1lbV9wZm47Ci0JfQotCi0JaWYgKCplbmRfcGZuID4gbWF4X3NwYXJzZW1lbV9wZm4pIHsKKwl9IGVsc2UgaWYgKCplbmRfcGZuID4gbWF4X3NwYXJzZW1lbV9wZm4pIHsKIAkJbW1pbml0X2RwcmludGsoTU1JTklUX1dBUk5JTkcsICJwZm52YWxpZGF0aW9uIiwKIAkJCSJFbmQgb2YgcmFuZ2UgJWx1IC0+ICVsdSBleGNlZWRzIFNQQVJTRU1FTSBtYXggJWx1XG4iLAogCQkJKnN0YXJ0X3BmbiwgKmVuZF9wZm4sIG1heF9zcGFyc2VtZW1fcGZuKTsKZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL3N3YXAuYwppbmRleCA4YWRiOWZlLi5iZWRlMjNjIDEwMDY0NAotLS0gYS9tbS9zd2FwLmMKKysrIGIvbW0vc3dhcC5jCkBAIC00NDgsOCArNDQ4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07CiAKLQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmIHRyeWxvY2tfcGFnZShwYWdlKSkgewotCQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSAmJiB0cnlsb2NrX3BhZ2UocGFnZSkpIHsKKwkJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKQogCQkJCXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgMCk7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQpAQCAtNDU3LDI5ICs0NTcsNiBAQAogfQogCiAvKioKLSAqIHBhZ2V2ZWNfc3dhcF9mcmVlIC0gdHJ5IHRvIGZyZWUgc3dhcCBzcGFjZSBmcm9tIHRoZSBwYWdlcyBpbiBhIHBhZ2V2ZWMKLSAqIEBwdmVjOiBwYWdldmVjIHdpdGggc3dhcGNhY2hlIHBhZ2VzIHRvIGZyZWUgdGhlIHN3YXAgc3BhY2Ugb2YKLSAqCi0gKiBUaGUgY2FsbGVyIG5lZWRzIHRvIGhvbGQgYW4gZXh0cmEgcmVmZXJlbmNlIHRvIGVhY2ggcGFnZSBhbmQKLSAqIG5vdCBob2xkIHRoZSBwYWdlIGxvY2sgb24gdGhlIHBhZ2VzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIGEKLSAqIHRyeWxvY2sgb24gdGhlIHBhZ2UgbG9jayBzbyBpdCBtYXkgbm90IGFsd2F5cyBmcmVlIHRoZSBzd2FwCi0gKiBzcGFjZSBhc3NvY2lhdGVkIHdpdGggYSBwYWdlLgotICovCi12b2lkIHBhZ2V2ZWNfc3dhcF9mcmVlKHN0cnVjdCBwYWdldmVjICpwdmVjKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQocHZlYyk7IGkrKykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMtPnBhZ2VzW2ldOwotCi0JCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpICYmIHRyeWxvY2tfcGFnZShwYWdlKSkgewotCQkJdHJ5X3RvX2ZyZWVfc3dhcChwYWdlKTsKLQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQl9Ci0JfQotfQotCi0vKioKICAqIHBhZ2V2ZWNfbG9va3VwIC0gZ2FuZyBwYWdlY2FjaGUgbG9va3VwCiAgKiBAcHZlYzoJV2hlcmUgdGhlIHJlc3VsdGluZyBwYWdlcyBhcmUgcGxhY2VkCiAgKiBAbWFwcGluZzoJVGhlIGFkZHJlc3Nfc3BhY2UgdG8gc2VhcmNoCmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCAxMjI5MjExLi41NTIwNmZhIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTUwLDcgKzUwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0cnVuY2F0ZV9wYXJ0aWFsX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIHBhcnRpYWwpCiB7CiAJemVyb191c2VyX3NlZ21lbnQocGFnZSwgcGFydGlhbCwgUEFHRV9DQUNIRV9TSVpFKTsKLQlpZiAoUGFnZVByaXZhdGUocGFnZSkpCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpCiAJCWRvX2ludmFsaWRhdGVwYWdlKHBhZ2UsIHBhcnRpYWwpOwogfQogCkBAIC05OSw3ICs5OSw3IEBACiAJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykKIAkJcmV0dXJuOwogCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKQogCQlkb19pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKIAogCWNhbmNlbF9kaXJ0eV9wYWdlKHBhZ2UsIFBBR0VfQ0FDSEVfU0laRSk7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlpZiAocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKQogCQlyZXR1cm4gMDsKIAotCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKSkKKwlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKSkKIAkJcmV0dXJuIDA7CiAKIAljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJaWYgKHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAwOwogCiAJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKQEAgLTM1Niw3ICszNTYsNyBAQAogCQlnb3RvIGZhaWxlZDsKIAogCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7Ci0JQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlCVUdfT04ocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSk7CiAJX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CS8qIHBhZ2VjYWNoZSByZWYgKi8KZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCAzN2VhY2NkLi43YzEyMmU0IDEwMDY0NAotLS0gYS9tbS91dGlsLmMKKysrIGIvbW0vdXRpbC5jCkBAIC03MCw2ICs3MCwzNiBAQAogRVhQT1JUX1NZTUJPTChrbWVtZHVwKTsKIAogLyoqCisgKiBtZW1kdXBfdXNlciAtIGR1cGxpY2F0ZSBtZW1vcnkgcmVnaW9uIGZyb20gdXNlciBzcGFjZQorICoKKyAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzIGluIHVzZXIgc3BhY2UKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0byBjb3B5CisgKgorICogUmV0dXJucyBhbiBFUlJfUFRSKCkgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgc2l6ZV90IGxlbikKK3sKKwl2b2lkICpwOworCisJLyoKKwkgKiBBbHdheXMgdXNlIEdGUF9LRVJORUwsIHNpbmNlIGNvcHlfZnJvbV91c2VyKCkgY2FuIHNsZWVwIGFuZAorCSAqIGNhdXNlIHBhZ2VmYXVsdCwgd2hpY2ggbWFrZXMgaXQgcG9pbnRsZXNzIHRvIHVzZSBHRlBfTk9GUworCSAqIG9yIEdGUF9BVE9NSUMuCisJICovCisJcCA9IGttYWxsb2NfdHJhY2tfY2FsbGVyKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihwLCBzcmMsIGxlbikpIHsKKwkJa2ZyZWUocCk7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKworCXJldHVybiBwOworfQorRVhQT1JUX1NZTUJPTChtZW1kdXBfdXNlcik7CisKKy8qKgogICogX19rcmVhbGxvYyAtIGxpa2Uga3JlYWxsb2MoKSBidXQgZG9uJ3QgZnJlZSBAcC4KICAqIEBwOiBvYmplY3QgdG8gcmVhbGxvY2F0ZSBtZW1vcnkgZm9yLgogICogQG5ld19zaXplOiBob3cgbWFueSBieXRlcyBvZiBtZW1vcnkgYXJlIHJlcXVpcmVkLgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGFmNTgzMjQuLmZhYjE5ODcgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTY3MSwxMCArNjcxLDcgQEAKIAlERUNMQVJFX0JJVE1BUChhbGxvY19tYXAsIFZNQVBfQkJNQVBfQklUUyk7CiAJREVDTEFSRV9CSVRNQVAoZGlydHlfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOwogCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwotCQkJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9saXN0OwotCQl9OworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKIAkJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOwogCX07CiB9OwpAQCAtNzQxLDcgKzczOCw2IEBACiAJYml0bWFwX3plcm8odmItPmFsbG9jX21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKIAliaXRtYXBfemVybyh2Yi0+ZGlydHlfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOwogCUlOSVRfTElTVF9IRUFEKCZ2Yi0+ZnJlZV9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmdmItPmRpcnR5X2xpc3QpOwogCiAJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgodmEtPnZhX3N0YXJ0KTsKIAlzcGluX2xvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKQEAgLTc3MiwxMiArNzY4LDcgQEAKIAlzdHJ1Y3Qgdm1hcF9ibG9jayAqdG1wOwogCXVuc2lnbmVkIGxvbmcgdmJfaWR4OwogCi0Jc3Bpbl9sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKQotCQlsaXN0X2RlbCgmdmItPmZyZWVfbGlzdCk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ2Yi0+ZGlydHlfbGlzdCkpCi0JCWxpc3RfZGVsKCZ2Yi0+ZGlydHlfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJnZiLT52YnEtPmxvY2spOworCUJVR19PTighbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpOwogCiAJdmJfaWR4ID0gYWRkcl90b192Yl9pZHgodmItPnZhLT52YV9zdGFydCk7CiAJc3Bpbl9sb2NrKCZ2bWFwX2Jsb2NrX3RyZWVfbG9jayk7CkBAIC04NjIsMTEgKzg1Myw3IEBACiAKIAlzcGluX2xvY2soJnZiLT5sb2NrKTsKIAliaXRtYXBfYWxsb2NhdGVfcmVnaW9uKHZiLT5kaXJ0eV9tYXAsIG9mZnNldCA+PiBQQUdFX1NISUZULCBvcmRlcik7Ci0JaWYgKCF2Yi0+ZGlydHkpIHsKLQkJc3Bpbl9sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKLQkJbGlzdF9hZGQoJnZiLT5kaXJ0eV9saXN0LCAmdmItPnZicS0+ZGlydHkpOwotCQlzcGluX3VubG9jaygmdmItPnZicS0+bG9jayk7Ci0JfQorCiAJdmItPmRpcnR5ICs9IDFVTCA8PCBvcmRlcjsKIAlpZiAodmItPmRpcnR5ID09IFZNQVBfQkJNQVBfQklUUykgewogCQlCVUdfT04odmItPmZyZWUgfHwgIWxpc3RfZW1wdHkoJnZiLT5mcmVlX2xpc3QpKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNTZkZGY0MS4uNDI1MjQ0OSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTYwLDggKzYwLDggQEAKIAogCWludCBtYXlfd3JpdGVwYWdlOwogCi0JLyogQ2FuIHBhZ2VzIGJlIHN3YXBwZWQgYXMgcGFydCBvZiByZWNsYWltPyAqLwotCWludCBtYXlfc3dhcDsKKwkvKiBDYW4gbWFwcGVkIHBhZ2VzIGJlIHJlY2xhaW1lZD8gKi8KKwlpbnQgbWF5X3VubWFwOwogCiAJLyogVGhpcyBjb250ZXh0J3MgU1dBUF9DTFVTVEVSX01BWC4gSWYgZnJlZWluZyBtZW1vcnkgZm9yCiAJICogc3VzcGVuZCwgd2UgZWZmZWN0aXZlbHkgaWdub3JlIFNXQVBfQ0xVU1RFUl9NQVguCkBAIC03OCw2ICs3OCwxMiBAQAogCS8qIFdoaWNoIGNncm91cCBkbyB3ZSByZWNsYWltIGZyb20gKi8KIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cDsKIAorCS8qCisJICogTm9kZW1hc2sgb2Ygbm9kZXMgYWxsb3dlZCBieSB0aGUgY2FsbGVyLiBJZiBOVUxMLCBhbGwgbm9kZXMKKwkgKiBhcmUgc2Nhbm5lZC4KKwkgKi8KKwlub2RlbWFza190CSpub2RlbWFzazsKKwogCS8qIFBsdWdnYWJsZSBpc29sYXRlIHBhZ2VzIGNhbGxiYWNrICovCiAJdW5zaWduZWQgbG9uZyAoKmlzb2xhdGVfcGFnZXMpKHVuc2lnbmVkIGxvbmcgbnIsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKIAkJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUsCkBAIC0yMTQsOCArMjIwLDkgQEAKIAkJZG9fZGl2KGRlbHRhLCBscnVfcGFnZXMgKyAxKTsKIAkJc2hyaW5rZXItPm5yICs9IGRlbHRhOwogCQlpZiAoc2hyaW5rZXItPm5yIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbnI9JWxkXG4iLAotCQkJCQlfX2Z1bmNfXywgc2hyaW5rZXItPm5yKTsKKwkJCXByaW50ayhLRVJOX0VSUiAic2hyaW5rX3NsYWI6ICVwRiBuZWdhdGl2ZSBvYmplY3RzIHRvICIKKwkJCSAgICAgICAiZGVsZXRlIG5yPSVsZFxuIiwKKwkJCSAgICAgICBzaHJpbmtlci0+c2hyaW5rLCBzaHJpbmtlci0+bnIpOwogCQkJc2hyaW5rZXItPm5yID0gbWF4X3Bhc3M7CiAJCX0KIApAQCAtMjc2LDcgKzI4Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3BhZ2VfY2FjaGVfZnJlZWFibGUoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIHBhZ2VfY291bnQocGFnZSkgLSAhIVBhZ2VQcml2YXRlKHBhZ2UpID09IDI7CisJcmV0dXJuIHBhZ2VfY291bnQocGFnZSkgLSAhIXBhZ2VfaGFzX3ByaXZhdGUocGFnZSkgPT0gMjsKIH0KIAogc3RhdGljIGludCBtYXlfd3JpdGVfdG9fcXVldWUoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKQEAgLTM2MCw3ICszNjcsNyBAQAogCQkgKiBTb21lIGRhdGEgam91cm5hbGluZyBvcnBoYW5lZCBwYWdlcyBjYW4gaGF2ZQogCQkgKiBwYWdlLT5tYXBwaW5nID09IE5VTEwgd2hpbGUgYmVpbmcgZGlydHkgd2l0aCBjbGVhbiBidWZmZXJzLgogCQkgKi8KLQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7CisJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKSB7CiAJCQlpZiAodHJ5X3RvX2ZyZWVfYnVmZmVycyhwYWdlKSkgewogCQkJCUNsZWFyUGFnZURpcnR5KHBhZ2UpOwogCQkJCXByaW50aygiJXM6IG9ycGhhbmVkIHBhZ2VcbiIsIF9fZnVuY19fKTsKQEAgLTYwNiw3ICs2MTMsNyBAQAogCQlpZiAodW5saWtlbHkoIXBhZ2VfZXZpY3RhYmxlKHBhZ2UsIE5VTEwpKSkKIAkJCWdvdG8gY3VsbF9tbG9ja2VkOwogCi0JCWlmICghc2MtPm1heV9zd2FwICYmIHBhZ2VfbWFwcGVkKHBhZ2UpKQorCQlpZiAoIXNjLT5tYXlfdW5tYXAgJiYgcGFnZV9tYXBwZWQocGFnZSkpCiAJCQlnb3RvIGtlZXBfbG9ja2VkOwogCiAJCS8qIERvdWJsZSB0aGUgc2xhYiBwcmVzc3VyZSBmb3IgbWFwcGVkIGFuZCBzd2FwY2FjaGUgcGFnZXMgKi8KQEAgLTcyMCw3ICs3MjcsNyBAQAogCQkgKiBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgKHBhZ2VfY291bnQgPT0gMSkgaXQgY2FuIGJlIGZyZWVkLgogCQkgKiBPdGhlcndpc2UsIGxlYXZlIHRoZSBwYWdlIG9uIHRoZSBMUlUgc28gaXQgaXMgc3dhcHBhYmxlLgogCQkgKi8KLQkJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7CisJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKSB7CiAJCQlpZiAoIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgc2MtPmdmcF9tYXNrKSkKIAkJCQlnb3RvIGFjdGl2YXRlX2xvY2tlZDsKIAkJCWlmICghbWFwcGluZyAmJiBwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKQEAgLTEyOTgsMTcgKzEzMDUsMTEgQEAKIAl9CiAJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0xSVV9CQVNFICsgbHJ1LCBwZ21vdmVkKTsKIAlwZ2RlYWN0aXZhdGUgKz0gcGdtb3ZlZDsKLQlpZiAoYnVmZmVyX2hlYWRzX292ZXJfbGltaXQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCXBhZ2V2ZWNfc3RyaXAoJnB2ZWMpOwotCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JfQogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdSRUZJTEwsIHpvbmUsIHBnc2Nhbm5lZCk7CiAJX19jb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBwZ2RlYWN0aXZhdGUpOwogCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCWlmICh2bV9zd2FwX2Z1bGwoKSkKLQkJcGFnZXZlY19zd2FwX2ZyZWUoJnB2ZWMpOwotCisJaWYgKGJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0KQorCQlwYWdldmVjX3N0cmlwKCZwdmVjKTsKIAlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogfQogCkBAIC0xNTQzLDcgKzE1NDQsOCBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCiAJc2MtPmFsbF91bnJlY2xhaW1hYmxlID0gMTsKLQlmb3JfZWFjaF96b25lX3pvbmVsaXN0KHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgpIHsKKwlmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCisJCQkJCXNjLT5ub2RlbWFzaykgewogCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJY29udGludWU7CiAJCS8qCkBAIC0xNjg4LDE3ICsxNjkwLDE4IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLAotCQkJCQkJCQlnZnBfdCBnZnBfbWFzaykKKwkJCQlnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spCiB7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLmdmcF9tYXNrID0gZ2ZwX21hc2ssCiAJCS5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlLAogCQkuc3dhcF9jbHVzdGVyX21heCA9IFNXQVBfQ0xVU1RFUl9NQVgsCi0JCS5tYXlfc3dhcCA9IDEsCisJCS5tYXlfdW5tYXAgPSAxLAogCQkuc3dhcHBpbmVzcyA9IHZtX3N3YXBwaW5lc3MsCiAJCS5vcmRlciA9IG9yZGVyLAogCQkubWVtX2Nncm91cCA9IE5VTEwsCiAJCS5pc29sYXRlX3BhZ2VzID0gaXNvbGF0ZV9wYWdlc19nbG9iYWwsCisJCS5ub2RlbWFzayA9IG5vZGVtYXNrLAogCX07CiAKIAlyZXR1cm4gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsICZzYyk7CkBAIC0xNzEzLDE3ICsxNzE2LDE4IEBACiB7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGUsCi0JCS5tYXlfc3dhcCA9IDEsCisJCS5tYXlfdW5tYXAgPSAxLAogCQkuc3dhcF9jbHVzdGVyX21heCA9IFNXQVBfQ0xVU1RFUl9NQVgsCiAJCS5zd2FwcGluZXNzID0gc3dhcHBpbmVzcywKIAkJLm9yZGVyID0gMCwKIAkJLm1lbV9jZ3JvdXAgPSBtZW1fY29udCwKIAkJLmlzb2xhdGVfcGFnZXMgPSBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXMsCisJCS5ub2RlbWFzayA9IE5VTEwsIC8qIHdlIGRvbid0IGNhcmUgdGhlIHBsYWNlbWVudCAqLwogCX07CiAJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDsKIAogCWlmIChub3N3YXApCi0JCXNjLm1heV9zd2FwID0gMDsKKwkJc2MubWF5X3VubWFwID0gMDsKIAogCXNjLmdmcF9tYXNrID0gKGdmcF9tYXNrICYgR0ZQX1JFQ0xBSU1fTUFTSykgfAogCQkJKEdGUF9ISUdIVVNFUl9NT1ZBQkxFICYgfkdGUF9SRUNMQUlNX01BU0spOwpAQCAtMTc2Miw3ICsxNzY2LDcgQEAKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSAqcmVjbGFpbV9zdGF0ZSA9IGN1cnJlbnQtPnJlY2xhaW1fc3RhdGU7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLmdmcF9tYXNrID0gR0ZQX0tFUk5FTCwKLQkJLm1heV9zd2FwID0gMSwKKwkJLm1heV91bm1hcCA9IDEsCiAJCS5zd2FwX2NsdXN0ZXJfbWF4ID0gU1dBUF9DTFVTVEVSX01BWCwKIAkJLnN3YXBwaW5lc3MgPSB2bV9zd2FwcGluZXNzLAogCQkub3JkZXIgPSBvcmRlciwKQEAgLTE5NjUsNiArMTk2OSw4IEBACiAJfTsKIAlub2RlX3RvX2NwdW1hc2tfcHRyKGNwdW1hc2ssIHBnZGF0LT5ub2RlX2lkKTsKIAorCWxvY2tkZXBfc2V0X2N1cnJlbnRfcmVjbGFpbV9zdGF0ZShHRlBfS0VSTkVMKTsKKwogCWlmICghY3B1bWFza19lbXB0eShjcHVtYXNrKSkKIAkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCBjcHVtYXNrKTsKIAljdXJyZW50LT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CkBAIC0yMDQ4LDIyICsyMDU0LDE5IEBACiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaHJpbmtfYWxsX21lbW9yeSgpLiAgVHJpZXMgdG8gcmVjbGFpbSAnbnJfcGFnZXMnIHBhZ2VzCi0gKiBmcm9tIExSVSBsaXN0cyBzeXN0ZW0td2lkZSwgZm9yIGdpdmVuIHBhc3MgYW5kIHByaW9yaXR5LCBhbmQgcmV0dXJucyB0aGUKLSAqIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKKyAqIGZyb20gTFJVIGxpc3RzIHN5c3RlbS13aWRlLCBmb3IgZ2l2ZW4gcGFzcyBhbmQgcHJpb3JpdHkuCiAgKgogICogRm9yIHBhc3MgPiAzIHdlIGFsc28gdHJ5IHRvIHNocmluayB0aGUgTFJVIGxpc3RzIHRoYXQgY29udGFpbiBhIGZldyBwYWdlcwogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX3pvbmVzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBwcmlvLAorc3RhdGljIHZvaWQgc2hyaW5rX2FsbF96b25lcyh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgcHJpbywKIAkJCQkgICAgICBpbnQgcGFzcywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJZW51bSBscnVfbGlzdCBsOwogCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKIAkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYgcHJpbyAhPSBERUZfUFJJT1JJVFkpCiAJCQljb250aW51ZTsKIApAQCAtMjA4MiwxNCArMjA4NSwxNiBAQAogCiAJCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOwogCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsIGxydV9wYWdlcyk7Ci0JCQkJcmV0ICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCisJCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCiAJCQkJCQkJCXNjLCBwcmlvKTsKLQkJCQlpZiAocmV0ID49IG5yX3BhZ2VzKQotCQkJCQlyZXR1cm4gcmV0OworCQkJCWlmIChucl9yZWNsYWltZWQgPj0gbnJfcGFnZXMpIHsKKwkJCQkJc2MtPm5yX3JlY2xhaW1lZCA9IG5yX3JlY2xhaW1lZDsKKwkJCQkJcmV0dXJuOworCQkJCX0KIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gcmV0OworCXNjLT5ucl9yZWNsYWltZWQgPSBucl9yZWNsYWltZWQ7CiB9CiAKIC8qCkBAIC0yMTAzLDEzICsyMTA4LDExIEBACiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMsIG5yX3NsYWI7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCWludCBwYXNzOwogCXN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLmdmcF9tYXNrID0gR0ZQX0tFUk5FTCwKLQkJLm1heV9zd2FwID0gMCwKLQkJLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlcywKKwkJLm1heV91bm1hcCA9IDAsCiAJCS5tYXlfd3JpdGVwYWdlID0gMSwKIAkJLmlzb2xhdGVfcGFnZXMgPSBpc29sYXRlX3BhZ2VzX2dsb2JhbCwKIAl9OwpAQCAtMjEyNSw4ICsyMTI4LDggQEAKIAkJaWYgKCFyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiKQogCQkJYnJlYWs7CiAKLQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCWlmIChyZXQgPj0gbnJfcGFnZXMpCisJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQlpZiAoc2MubnJfcmVjbGFpbWVkID49IG5yX3BhZ2VzKQogCQkJZ290byBvdXQ7CiAKIAkJbnJfc2xhYiAtPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwpAQCAtMjE0NSwyMSArMjE0OCwyMiBAQAogCiAJCS8qIEZvcmNlIHJlY2xhaW1pbmcgbWFwcGVkIHBhZ2VzIGluIHRoZSBwYXNzZXMgIzMgYW5kICM0ICovCiAJCWlmIChwYXNzID4gMikKLQkJCXNjLm1heV9zd2FwID0gMTsKKwkJCXNjLm1heV91bm1hcCA9IDE7CiAKIAkJZm9yIChwcmlvID0gREVGX1BSSU9SSVRZOyBwcmlvID49IDA7IHByaW8tLSkgewotCQkJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gbnJfcGFnZXMgLSByZXQ7CisJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4gPSBucl9wYWdlcyAtIHNjLm5yX3JlY2xhaW1lZDsKIAogCQkJc2MubnJfc2Nhbm5lZCA9IDA7Ci0JCQlyZXQgKz0gc2hyaW5rX2FsbF96b25lcyhucl90b19zY2FuLCBwcmlvLCBwYXNzLCAmc2MpOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBucl90b19zY2FuOworCQkJc2hyaW5rX2FsbF96b25lcyhucl90b19zY2FuLCBwcmlvLCBwYXNzLCAmc2MpOworCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKIAogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBzYy5nZnBfbWFzaywKIAkJCQkJZ2xvYmFsX2xydV9wYWdlcygpKTsKLQkJCXJldCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKIAogCQkJaWYgKHNjLm5yX3NjYW5uZWQgJiYgcHJpbyA8IERFRl9QUklPUklUWSAtIDIpCkBAIC0yMTY4LDIxICsyMTcyLDIzIEBACiAJfQogCiAJLyoKLQkgKiBJZiByZXQgPSAwLCB3ZSBjb3VsZCBub3Qgc2hyaW5rIExSVXMsIGJ1dCB0aGVyZSBtYXkgYmUgc29tZXRoaW5nCi0JICogaW4gc2xhYiBjYWNoZXMKKwkgKiBJZiBzYy5ucl9yZWNsYWltZWQgPSAwLCB3ZSBjb3VsZCBub3Qgc2hyaW5rIExSVXMsIGJ1dCB0aGVyZSBtYXkgYmUKKwkgKiBzb21ldGhpbmcgaW4gc2xhYiBjYWNoZXMKIAkgKi8KLQlpZiAoIXJldCkgeworCWlmICghc2MubnJfcmVjbGFpbWVkKSB7CiAJCWRvIHsKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBnbG9iYWxfbHJ1X3BhZ2VzKCkpOwotCQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCX0gd2hpbGUgKHJldCA8IG5yX3BhZ2VzICYmIHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKKwkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQl9IHdoaWxlIChzYy5ucl9yZWNsYWltZWQgPCBucl9wYWdlcyAmJgorCQkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKIAl9CiAKKwogb3V0OgogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSBOVUxMOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2MubnJfcmVjbGFpbWVkOwogfQogI2VuZGlmCiAKQEAgLTIyODgsMTEgKzIyOTQsMTIgQEAKIAlpbnQgcHJpb3JpdHk7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLm1heV93cml0ZXBhZ2UgPSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fV1JJVEUpLAotCQkubWF5X3N3YXAgPSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fU1dBUCksCisJCS5tYXlfdW5tYXAgPSAhISh6b25lX3JlY2xhaW1fbW9kZSAmIFJFQ0xBSU1fU1dBUCksCiAJCS5zd2FwX2NsdXN0ZXJfbWF4ID0gbWF4X3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsCiAJCQkJCVNXQVBfQ0xVU1RFUl9NQVgpLAogCQkuZ2ZwX21hc2sgPSBnZnBfbWFzaywKIAkJLnN3YXBwaW5lc3MgPSB2bV9zd2FwcGluZXNzLAorCQkub3JkZXIgPSBvcmRlciwKIAkJLmlzb2xhdGVfcGFnZXMgPSBpc29sYXRlX3BhZ2VzX2dsb2JhbCwKIAl9OwogCXVuc2lnbmVkIGxvbmcgc2xhYl9yZWNsYWltYWJsZTsKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggOTExNDk3NC4uNjZmNjEzMCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogCW1lbXNldChyZXQsIDAsIE5SX1ZNX0VWRU5UX0lURU1TICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgKmNwdW1hc2spIHsKKwlmb3JfZWFjaF9jcHUoY3B1LCBjcHVtYXNrKSB7CiAJCXN0cnVjdCB2bV9ldmVudF9zdGF0ZSAqdGhpcyA9ICZwZXJfY3B1KHZtX2V2ZW50X3N0YXRlcywgY3B1KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlJfVk1fRVZFTlRfSVRFTVM7IGkrKykKQEAgLTEzNSwxMSArMTM1LDcgQEAKIAlpbnQgY3B1OwogCWludCB0aHJlc2hvbGQ7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQotCQlpZiAoIXpvbmUtPnByZXNlbnRfcGFnZXMpCi0JCQljb250aW51ZTsKLQorCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJdGhyZXNob2xkID0gY2FsY3VsYXRlX3RocmVzaG9sZCh6b25lKTsKIAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKQEAgLTMwMSwxMiArMjk3LDkgQEAKIAlpbnQgaTsKIAlpbnQgZ2xvYmFsX2RpZmZbTlJfVk1fWk9ORV9TVEFUX0lURU1TXSA9IHsgMCwgfTsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcDsKIAotCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQotCQkJY29udGludWU7Ci0KIAkJcCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IE5SX1ZNX1pPTkVfU1RBVF9JVEVNUzsgaSsrKQpAQCAtODk4LDcgKzg5MSw3IEBACiB7CiAJcmVmcmVzaF9jcHVfdm1fc3RhdHMoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJl9fZ2V0X2NwdV92YXIodm1zdGF0X3dvcmspLAotCQlzeXNjdGxfc3RhdF9pbnRlcnZhbCk7CisJCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoc3lzY3RsX3N0YXRfaW50ZXJ2YWwpKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHN0YXJ0X2NwdV90aW1lcihpbnQgY3B1KQpAQCAtOTA2LDcgKzg5OSw4IEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayAqdm1zdGF0X3dvcmsgPSAmcGVyX2NwdSh2bXN0YXRfd29yaywgY3B1KTsKIAogCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUodm1zdGF0X3dvcmssIHZtc3RhdF91cGRhdGUpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHZtc3RhdF93b3JrLCBIWiArIGNwdSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgdm1zdGF0X3dvcmssCisJCQkJIF9fcm91bmRfamlmZmllc19yZWxhdGl2ZShIWiwgY3B1KSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYyBiL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCmluZGV4IDE2MjE5OWEuLmZkOGUwODQgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCisrKyBiL25ldC9hcHBsZXRhbGsvYXRhbGtfcHJvYy5jCkBAIC0yODEsNyArMjgxLDYgQEAKIAlhdGFsa19wcm9jX2RpciA9IHByb2NfbWtkaXIoImF0YWxrIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmICghYXRhbGtfcHJvY19kaXIpCiAJCWdvdG8gb3V0OwotCWF0YWxrX3Byb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcCA9IHByb2NfY3JlYXRlKCJpbnRlcmZhY2UiLCBTX0lSVUdPLCBhdGFsa19wcm9jX2RpciwKIAkJCSZhdGFsa19zZXFfaW50ZXJmYWNlX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcG9hX3Byb2MuYyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKaW5kZXggNDk5MDU0MS4uMWEwZjVjYyAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX3Byb2MuYworKysgYi9uZXQvYXRtL21wb2FfcHJvYy5jCkBAIC0yODEsNyArMjgxLDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAvcHJvYy9hdG0vJXNcbiIsIFNUQVRfRklMRV9OQU1FKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXAtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHJvYy5jIGIvbmV0L2F0bS9wcm9jLmMKaW5kZXggNDk0ODdiMy4uZTdiM2IyNzMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHJvYy5jCisrKyBiL25ldC9hdG0vcHJvYy5jCkBAIC00NzYsNyArNDc2LDYgQEAKIAkJCQkgICAgIGF0bV9wcm9jX3Jvb3QsIGUtPnByb2NfZm9wcyk7CiAJCWlmICghZGlyZW50KQogCQkJZ290byBlcnJfb3V0X3JlbW92ZTsKLQkJZGlyZW50LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQllLT5kaXJlbnQgPSBkaXJlbnQ7CiAJfQogCXJldCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGFiZGM3MDMuLmNhYjcxZWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0xMDkzLDExICsxMDkzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmZjb21tX3R0eV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwgaW50ICplb2YsIHZvaWQgKnVudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCByZmNvbW1fdHR5X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCByZmNvbW1fZGV2ICpkZXYgPSAoc3RydWN0IHJmY29tbV9kZXYgKikgdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTExNTYsNyArMTE1MSw2IEBACiAJLnNlbmRfeGNoYXIJCT0gcmZjb21tX3R0eV9zZW5kX3hjaGFyLAogCS5oYW5ndXAJCQk9IHJmY29tbV90dHlfaGFuZ3VwLAogCS53YWl0X3VudGlsX3NlbnQJPSByZmNvbW1fdHR5X3dhaXRfdW50aWxfc2VudCwKLQkucmVhZF9wcm9jCQk9IHJmY29tbV90dHlfcmVhZF9wcm9jLAogCS50aW9jbWdldAkJPSByZmNvbW1fdHR5X3Rpb2NtZ2V0LAogCS50aW9jbXNldAkJPSByZmNvbW1fdHR5X3Rpb2Ntc2V0LAogfTsKZGlmZiAtLWdpdCBhL25ldC9jYW4vYmNtLmMgYi9uZXQvY2FuL2JjbS5jCmluZGV4IGI3YzdkNDYuLjk1ZDdmMzIgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYmNtLmMKKysrIGIvbmV0L2Nhbi9iY20uYwpAQCAtMTYwNCwxMCArMTYwNCw2IEBACiAKIAkvKiBjcmVhdGUgL3Byb2MvbmV0L2Nhbi1iY20gZGlyZWN0b3J5ICovCiAJcHJvY19kaXIgPSBwcm9jX21rZGlyKCJjYW4tYmNtIiwgaW5pdF9uZXQucHJvY19uZXQpOwotCi0JaWYgKHByb2NfZGlyKQotCQlwcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY2FuL3Byb2MuYyBiL25ldC9jYW4vcHJvYy5jCmluZGV4IDUyMGZlZjUuLjE0NjM2NTMgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcHJvYy5jCisrKyBiL25ldC9jYW4vcHJvYy5jCkBAIC00NzMsOCArNDczLDYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNhbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiBvd24gcHJvY2ZzIGVudHJpZXMgZnJvbSB0aGUgQUZfQ0FOIGNvcmUgKi8KIAlwZGVfdmVyc2lvbiAgICAgPSBjYW5fY3JlYXRlX3Byb2NfcmVhZGVudHJ5KENBTl9QUk9DX1ZFUlNJT04sIDA2NDQsCiAJCQkJCWNhbl9wcm9jX3JlYWRfdmVyc2lvbiwgTlVMTCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDUyZmVhNWIuLjkxZDc5MmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0yNDcyLDggKzI0NzIsOSBAQAogCQlyZXR1cm4gR1JPX05PUk1BTDsKIAogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gIWNvbXBhcmVfZXRoZXJfaGVhZGVyKAotCQkJc2tiX21hY19oZWFkZXIocCksIHNrYl9ncm9fbWFjX2hlYWRlcihza2IpKTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IChwLT5kZXYgPT0gc2tiLT5kZXYpCisJCQkmJiAhY29tcGFyZV9ldGhlcl9oZWFkZXIoc2tiX21hY19oZWFkZXIocCksCisJCQkJCQkgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggPSAwOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDI0NGNhNTYuLmQ5ZDUxNjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTI2MSw4ICsyNjEsNyBAQAogCXJldCA9IDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHJ1bGVfYnVmKQotCQlrZnJlZShydWxlX2J1Zik7CisJa2ZyZWUocnVsZV9idWYpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCA3NTU0MTRjLi5iNTg3M2JkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0zNDUsOCArMzQ1LDggQEAKIAl1ZHBoLT5kZXN0ID0gaHRvbnMobnAtPnJlbW90ZV9wb3J0KTsKIAl1ZHBoLT5sZW4gPSBodG9ucyh1ZHBfbGVuKTsKIAl1ZHBoLT5jaGVjayA9IDA7Ci0JdWRwaC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhodG9ubChucC0+bG9jYWxfaXApLAotCQkJCQlodG9ubChucC0+cmVtb3RlX2lwKSwKKwl1ZHBoLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKG5wLT5sb2NhbF9pcCwKKwkJCQkJbnAtPnJlbW90ZV9pcCwKIAkJCQkJdWRwX2xlbiwgSVBQUk9UT19VRFAsCiAJCQkJCWNzdW1fcGFydGlhbCh1ZHBoLCB1ZHBfbGVuLCAwKSk7CiAJaWYgKHVkcGgtPmNoZWNrID09IDApCkBAIC0zNjUsOCArMzY1LDggQEAKIAlpcGgtPnR0bCAgICAgID0gNjQ7CiAJaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fVURQOwogCWlwaC0+Y2hlY2sgICAgPSAwOwotCXB1dF91bmFsaWduZWQoaHRvbmwobnAtPmxvY2FsX2lwKSwgJihpcGgtPnNhZGRyKSk7Ci0JcHV0X3VuYWxpZ25lZChodG9ubChucC0+cmVtb3RlX2lwKSwgJihpcGgtPmRhZGRyKSk7CisJcHV0X3VuYWxpZ25lZChucC0+bG9jYWxfaXAsICYoaXBoLT5zYWRkcikpOworCXB1dF91bmFsaWduZWQobnAtPnJlbW90ZV9pcCwgJihpcGgtPmRhZGRyKSk7CiAJaXBoLT5jaGVjayAgICA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLT5paGwpOwogCiAJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CkBAIC00MjQsNyArNDI0LDcgQEAKIAltZW1jcHkoJnRpcCwgYXJwX3B0ciwgNCk7CiAKIAkvKiBTaG91bGQgd2UgaWdub3JlIGFycD8gKi8KLQlpZiAodGlwICE9IGh0b25sKG5wLT5sb2NhbF9pcCkgfHwKKwlpZiAodGlwICE9IG5wLT5sb2NhbF9pcCB8fAogCSAgICBpcHY0X2lzX2xvb3BiYWNrKHRpcCkgfHwgaXB2NF9pc19tdWx0aWNhc3QodGlwKSkKIAkJcmV0dXJuOwogCkBAIC01MzMsOSArNTMzLDkgQEAKIAkJZ290byBvdXQ7CiAJaWYgKGNoZWNrc3VtX3VkcChza2IsIHVoLCB1bGVuLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyKSkKIAkJZ290byBvdXQ7Ci0JaWYgKG5wLT5sb2NhbF9pcCAmJiBucC0+bG9jYWxfaXAgIT0gbnRvaGwoaXBoLT5kYWRkcikpCisJaWYgKG5wLT5sb2NhbF9pcCAmJiBucC0+bG9jYWxfaXAgIT0gaXBoLT5kYWRkcikKIAkJZ290byBvdXQ7Ci0JaWYgKG5wLT5yZW1vdGVfaXAgJiYgbnAtPnJlbW90ZV9pcCAhPSBudG9obChpcGgtPnNhZGRyKSkKKwlpZiAobnAtPnJlbW90ZV9pcCAmJiBucC0+cmVtb3RlX2lwICE9IGlwaC0+c2FkZHIpCiAJCWdvdG8gb3V0OwogCWlmIChucC0+bG9jYWxfcG9ydCAmJiBucC0+bG9jYWxfcG9ydCAhPSBudG9ocyh1aC0+ZGVzdCkpCiAJCWdvdG8gb3V0OwpAQCAtNTYwLDE0ICs1NjAsMTQgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogbG9jYWwgcG9ydCAlZFxuIiwKIAkJCSBucC0+bmFtZSwgbnAtPmxvY2FsX3BvcnQpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2NhbCBJUCAlZC4lZC4lZC4lZFxuIiwKLQkJCSBucC0+bmFtZSwgSElQUVVBRChucC0+bG9jYWxfaXApKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogbG9jYWwgSVAgJXBJNFxuIiwKKwkJCSBucC0+bmFtZSwgJm5wLT5sb2NhbF9pcCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludGVyZmFjZSAlc1xuIiwKIAkJCSBucC0+bmFtZSwgbnAtPmRldl9uYW1lKTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogcmVtb3RlIHBvcnQgJWRcbiIsCiAJCQkgbnAtPm5hbWUsIG5wLT5yZW1vdGVfcG9ydCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBJUCAlZC4lZC4lZC4lZFxuIiwKLQkJCSBucC0+bmFtZSwgSElQUVVBRChucC0+cmVtb3RlX2lwKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBJUCAlcEk0XG4iLAorCQkJIG5wLT5uYW1lLCAmbnAtPnJlbW90ZV9pcCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuIiwKIAkgICAgICAgICAgICAgICAgIG5wLT5uYW1lLCBucC0+cmVtb3RlX21hYyk7CiB9CkBAIC01ODksNyArNTg5LDcgQEAKIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICcvJykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJKmRlbGltID0gMDsKLQkJbnAtPmxvY2FsX2lwID0gbnRvaGwoaW5fYXRvbihjdXIpKTsKKwkJbnAtPmxvY2FsX2lwID0gaW5fYXRvbihjdXIpOwogCQljdXIgPSBkZWxpbTsKIAl9CiAJY3VyKys7CkBAIC02MTgsNyArNjE4LDcgQEAKIAlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJy8nKSkgPT0gTlVMTCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7CiAJKmRlbGltID0gMDsKLQlucC0+cmVtb3RlX2lwID0gbnRvaGwoaW5fYXRvbihjdXIpKTsKKwlucC0+cmVtb3RlX2lwID0gaW5fYXRvbihjdXIpOwogCWN1ciA9IGRlbGltICsgMTsKIAogCWlmICgqY3VyICE9IDApIHsKQEAgLTc1OSwxMCArNzU5LDkgQEAKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQogCi0JCW5wLT5sb2NhbF9pcCA9IG50b2hsKGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbCk7CisJCW5wLT5sb2NhbF9pcCA9IGluX2Rldi0+aWZhX2xpc3QtPmlmYV9sb2NhbDsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBsb2NhbCBJUCAlZC4lZC4lZC4lZFxuIiwKLQkJICAgICAgIG5wLT5uYW1lLCBISVBRVUFEKG5wLT5sb2NhbF9pcCkpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogbG9jYWwgSVAgJXBJNFxuIiwgbnAtPm5hbWUsICZucC0+bG9jYWxfaXApOwogCX0KIAogCWlmIChucC0+cnhfaG9vaykgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcGt0Z2VuLmMgYi9uZXQvY29yZS9wa3RnZW4uYwppbmRleCAzMmQ0MTlmLi4zNzc5YzE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9wa3RnZW4uYworKysgYi9uZXQvY29yZS9wa3RnZW4uYwpAQCAtMzgwNiw3ICszODA2LDYgQEAKIAlwZ19wcm9jX2RpciA9IHByb2NfbWtkaXIoUEdfUFJPQ19ESVIsIGluaXRfbmV0LnByb2NfbmV0KTsKIAlpZiAoIXBnX3Byb2NfZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlwZ19wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXBlID0gcHJvY19jcmVhdGUoUEdDVFJMLCAwNjAwLCBwZ19wcm9jX2RpciwgJnBrdGdlbl9mb3BzKTsKIAlpZiAocGUgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCA2YWNiZjllLi5jZTYzNTZjIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjU3OSw3ICsyNTc5LDcgQEAKIAkJCQkJICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpOwogCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgbnNrYi0+ZGF0YSwgZG9mZnNldCk7CiAKLQkJaWYgKHBvcyA+PSBvZmZzZXQgKyBsZW4pCisJCWlmIChmc2tiICE9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KQogCQkJY29udGludWU7CiAKIAkJaWYgKCFzZykgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDA2MjAwNDYuLjdkYmYzZmYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTE2NzcsNyArMTY3Nyw3IEBACiB7CiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChzay0+c2tfc2xlZXAsIFBPTExFUlIpOwogCXNrX3dha2VfYXN5bmMoc2ssIFNPQ0tfV0FLRV9JTywgUE9MTF9FUlIpOwogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xNjg2LDcgKzE2ODYsOCBAQAogewogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKHNrLT5za19zbGVlcCwgUE9MTElOIHwKKwkJCQkJCVBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKIAlza193YWtlX2FzeW5jKHNrLCBTT0NLX1dBS0VfV0FJVEQsIFBPTExfSU4pOwogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xNzAwLDcgKzE3MDEsOCBAQAogCSAqLwogCWlmICgoYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA8PCAxKSA8PSBzay0+c2tfc25kYnVmKSB7CiAJCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoc2stPnNrX3NsZWVwLCBQT0xMT1VUIHwKKwkJCQkJCVBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKIAogCQkvKiBTaG91bGQgYWdyZWUgd2l0aCBwb2xsLCBvdGhlcndpc2Ugc29tZSBwcm9ncmFtcyBicmVhayAqLwogCQlpZiAoc29ja193cml0ZWFibGUoc2spKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggMzVjNWY2YS4uNWJhNTMzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlpbmRldiA9IGluID8gaW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKIAlvdXRkZXYgPSBvdXQgPyBvdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CiAJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAJaWYgKGhvdGRyb3ApCiAJCXJldHVybiBORl9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IDgyZWU3YzkuLjgxMGMwYjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CiAJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggMjQ1MWFlYi4uZmFmYmVjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTEwODEsOCArMTA4MSw3IEBACiAgKgl0aGlzLCBubyBibG9ja2luZyBhbmQgdmVyeSBzdHJhbmdlIGVycm9ycyA4KQogICovCiAKLXN0YXRpYyBpbnQgdGNwX3JlY3ZfdXJnKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbywKLQkJCXN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbiwgaW50IGZsYWdzKQorc3RhdGljIGludCB0Y3BfcmVjdl91cmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTY5Nyw3ICsxNjk2LDcgQEAKIAlyZXR1cm4gZXJyOwogCiByZWN2X3VyZzoKLQllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MpOworCWVyciA9IHRjcF9yZWN2X3VyZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGMxZjI1OWQuLjUzMzAwZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTc1NCw2ICs3NTQsMzYgQEAKIAkJdHAtPmZhY2tldHNfb3V0IC09IGRlY3I7CiB9CiAKKy8qIFBjb3VudCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3cml0ZSBxdWV1ZSBnb3QgY2hhbmdlZCwgd2UgbmVlZCB0byBkbyB2YXJpb3VzCisgKiB0d2Vha3MgdG8gZml4IGNvdW50ZXJzCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9hZGp1c3RfcGNvdW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlY3IpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwl0cC0+cGFja2V0c19vdXQgLT0gZGVjcjsKKworCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKKwkJdHAtPnNhY2tlZF9vdXQgLT0gZGVjcjsKKwlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykKKwkJdHAtPnJldHJhbnNfb3V0IC09IGRlY3I7CisJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfTE9TVCkKKwkJdHAtPmxvc3Rfb3V0IC09IGRlY3I7CisKKwkvKiBSZW5vIGNhc2UgaXMgc3BlY2lhbC4gU2lnaC4uLiAqLworCWlmICh0Y3BfaXNfcmVubyh0cCkgJiYgZGVjciA+IDApCisJCXRwLT5zYWNrZWRfb3V0IC09IG1pbl90KHUzMiwgdHAtPnNhY2tlZF9vdXQsIGRlY3IpOworCisJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkZWNyKTsKKworCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCSAgICBiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCisJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQl0cC0+bG9zdF9jbnRfaGludCAtPSBkZWNyOworCisJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Cit9CisKIC8qIEZ1bmN0aW9uIHRvIGNyZWF0ZSB0d28gbmV3IFRDUCBzZWdtZW50cy4gIFNocmlua3MgdGhlIGdpdmVuIHNlZ21lbnQKICAqIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgYXBwZW5kcyBhIG5ldyBzZWdtZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlCiAgKiBwYWNrZXQgdG8gdGhlIGxpc3QuICBUaGlzIHdvbid0IGJlIGNhbGxlZCBmcmVxdWVudGx5LCBJIGhvcGUuCkBAIC04MzYsMjggKzg2Niw4IEBACiAJCWludCBkaWZmID0gb2xkX2ZhY3RvciAtIHRjcF9za2JfcGNvdW50KHNrYikgLQogCQkJdGNwX3NrYl9wY291bnQoYnVmZik7CiAKLQkJdHAtPnBhY2tldHNfb3V0IC09IGRpZmY7Ci0KLQkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX0FDS0VEKQotCQkJdHAtPnNhY2tlZF9vdXQgLT0gZGlmZjsKLQkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpCi0JCQl0cC0+cmV0cmFuc19vdXQgLT0gZGlmZjsKLQotCQlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9MT1NUKQotCQkJdHAtPmxvc3Rfb3V0IC09IGRpZmY7Ci0KLQkJLyogQWRqdXN0IFJlbm8gU0FDSyBlc3RpbWF0ZS4gKi8KLQkJaWYgKHRjcF9pc19yZW5vKHRwKSAmJiBkaWZmID4gMCkgewotCQkJdGNwX2RlY19wY291bnRfYXBwcm94X2ludCgmdHAtPnNhY2tlZF9vdXQsIGRpZmYpOwotCQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JCX0KLQkJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkaWZmKTsKLQotCQlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKLQkJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKLQkJCSAgIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCi0JCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKLQkJCXRwLT5sb3N0X2NudF9oaW50IC09IGRpZmY7CisJCWlmIChkaWZmKQorCQkJdGNwX2FkanVzdF9wY291bnQoc2ssIHNrYiwgZGlmZik7CiAJfQogCiAJLyogTGluayBCVUZGIGludG8gdGhlIHNlbmQgcXVldWUuICovCkBAIC0xNzY4LDIyICsxNzc4LDE0IEBACiAJICogcGFja2V0IGNvdW50aW5nIGRvZXMgbm90IGJyZWFrLgogCSAqLwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkIHw9IFRDUF9TS0JfQ0IobmV4dF9za2IpLT5zYWNrZWQgJiBUQ1BDQl9FVkVSX1JFVFJBTlM7Ci0JaWYgKFRDUF9TS0JfQ0IobmV4dF9za2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykKLQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KG5leHRfc2tiKTsKLQlpZiAoVENQX1NLQl9DQihuZXh0X3NrYiktPnNhY2tlZCAmIFRDUENCX0xPU1QpCi0JCXRwLT5sb3N0X291dCAtPSB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYik7Ci0JLyogUmVubyBjYXNlIGlzIHNwZWNpYWwuIFNpZ2guLi4gKi8KLQlpZiAodGNwX2lzX3Jlbm8odHApICYmIHRwLT5zYWNrZWRfb3V0KQotCQl0Y3BfZGVjX3Bjb3VudF9hcHByb3goJnRwLT5zYWNrZWRfb3V0LCBuZXh0X3NrYik7Ci0KLQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBuZXh0X3NrYiwgdGNwX3NrYl9wY291bnQobmV4dF9za2IpKTsKLQl0cC0+cGFja2V0c19vdXQgLT0gdGNwX3NrYl9wY291bnQobmV4dF9za2IpOwogCiAJLyogY2hhbmdlZCB0cmFuc21pdCBxdWV1ZSB1bmRlciB1cyBzbyBjbGVhciBoaW50cyAqLwogCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCWlmIChuZXh0X3NrYiA9PSB0cC0+cmV0cmFuc21pdF9za2JfaGludCkKIAkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBza2I7CiAKKwl0Y3BfYWRqdXN0X3Bjb3VudChzaywgbmV4dF9za2IsIHRjcF9za2JfcGNvdW50KG5leHRfc2tiKSk7CisKIAlza193bWVtX2ZyZWVfc2tiKHNrLCBuZXh0X3NrYik7CiB9CiAKQEAgLTE4OTEsNyArMTg5MywxMiBAQAogCQlpZiAodGNwX2ZyYWdtZW50KHNrLCBza2IsIGN1cl9tc3MsIGN1cl9tc3MpKQogCQkJcmV0dXJuIC1FTk9NRU07IC8qIFdlJ2xsIHRyeSBhZ2FpbiBsYXRlci4gKi8KIAl9IGVsc2UgewotCQl0Y3BfaW5pdF90c29fc2Vncyhzaywgc2tiLCBjdXJfbXNzKTsKKwkJaW50IG9sZHBjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJaWYgKHVubGlrZWx5KG9sZHBjb3VudCA+IDEpKSB7CisJCQl0Y3BfaW5pdF90c29fc2Vncyhzaywgc2tiLCBjdXJfbXNzKTsKKwkJCXRjcF9hZGp1c3RfcGNvdW50KHNrLCBza2IsIG9sZHBjb3VudCAtIHRjcF9za2JfcGNvdW50KHNrYikpOworCQl9CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggZTg5Y2ZhMy4uZGZlZDE3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOwogCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSBORVRGSUxURVJfTElOS19QT0lTT047CiAjZW5kaWYKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwppbmRleCAwODZkNWVmLi44MTE5ODRkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC03Miw4ICs3Myw3IEBACiBzdGF0aWMgdm9pZCBpcmNvbW1fdHR5X2Zsb3dfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgICAgICBMT0NBTF9GTE9XIGNtZCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwKLQkJCQlpbnQgKmVvZiwgdm9pZCAqdW51c2VkKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlyY29tbV90dHlfcHJvY19mb3BzOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcjsKIApAQCAtOTgsNyArOTgsNyBAQAogCS5oYW5ndXAgICAgICAgICAgPSBpcmNvbW1fdHR5X2hhbmd1cCwKIAkud2FpdF91bnRpbF9zZW50ID0gaXJjb21tX3R0eV93YWl0X3VudGlsX3NlbnQsCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQkucmVhZF9wcm9jICAgICAgID0gaXJjb21tX3R0eV9yZWFkX3Byb2MsCisJLnByb2NfZm9wcyAgICAgICA9ICZpcmNvbW1fdHR5X3Byb2NfZm9wcywKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogfTsKIApAQCAtMTI0NSwxNTAgKzEyNDUsMTcwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBpcmNvbW1fdHR5X2xpbmVfaW5mbyhzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgaXJjb21tX3R0eV9saW5lX2luZm8oc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlpbnQgIHJldD0wOworCWNoYXIgc2VwOwogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlN0YXRlOiAlc1xuIiwgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0pOworCXNlcV9wcmludGYobSwgIlN0YXRlOiAlc1xuIiwgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0pOwogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlNlcnZpY2UgdHlwZTogIik7CisJc2VxX3B1dHMobSwgIlNlcnZpY2UgdHlwZTogIik7CiAJaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV85X1dJUkUpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICI5X1dJUkUiKTsKKwkJc2VxX3B1dHMobSwgIjlfV0lSRSIpOwogCWVsc2UgaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkUpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIzX1dJUkUiKTsKKwkJc2VxX3B1dHMobSwgIjNfV0lSRSIpOwogCWVsc2UgaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkVfUkFXKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiM19XSVJFX1JBVyIpOworCQlzZXFfcHV0cyhtLCAiM19XSVJFX1JBVyIpOwogCWVsc2UKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUhXG4iKTsKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwkJc2VxX3B1dHMobSwgIk5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUhXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJQb3J0IG5hbWU6ICVzXG4iLCBzZWxmLT5zZXR0aW5ncy5wb3J0X25hbWUpOworCXNlcV9wcmludGYobSwgIlBvcnQgbmFtZTogJXNcbiIsIHNlbGYtPnNldHRpbmdzLnBvcnRfbmFtZSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFRFIHN0YXR1czogIik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9SVFMpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJSVFN8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9EVFIpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEVFJ8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSkKLQkJcmV0LS07IC8qIHJlbW92ZSB0aGUgbGFzdCB8ICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJc2VxX3ByaW50ZihtLCAiRFRFIHN0YXR1czoiKTsKKwlzZXAgPSAnICc7CisJaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9SVFMpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNSVFMiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fRFRSKSB7CisJCXNlcV9wcmludGYobSwgIiVjRFRSIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEQ0Ugc3RhdHVzOiAiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NUUykKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkNUU3wiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0RTUikKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkRTUnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NEKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQ0R8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9SSSkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlJJfCIpOwotCWlmIChzZWxmLT5zZXR0aW5ncy5kY2UpCi0JCXJldC0tOyAvKiByZW1vdmUgdGhlIGxhc3QgfCAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcbiIpOworCXNlcV9wdXRzKG0sICJEQ0Ugc3RhdHVzOiIpOworCXNlcCA9ICcgJzsKKwlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NUUykgeworCQlzZXFfcHJpbnRmKG0sICIlY0NUUyIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9EU1IpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNEU1IiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5kY2UgJiBJUkNPTU1fQ0QpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNDRCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9SSSkgeworCQlzZXFfcHJpbnRmKG0sICIlY1JJIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJDb25maWd1cmF0aW9uOiAiKTsKKwlzZXFfcHV0cyhtLCAiQ29uZmlndXJhdGlvbjogIik7CiAJaWYgKCFzZWxmLT5zZXR0aW5ncy5udWxsX21vZGVtKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFRFIDwtPiBEQ0VcbiIpOworCQlzZXFfcHV0cyhtLCAiRFRFIDwtPiBEQ0VcbiIpOwogCWVsc2UKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwKLQkJCSAgICAgICAiRFRFIDwtPiBEVEUgKG51bGwgbW9kZW0gZW11bGF0aW9uKVxuIik7CisJCXNlcV9wdXRzKG0sICJEVEUgPC0+IERURSAobnVsbCBtb2RlbSBlbXVsYXRpb24pXG4iKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEYXRhIHJhdGU6ICVkXG4iLCBzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUpOworCXNlcV9wcmludGYobSwgIkRhdGEgcmF0ZTogJWRcbiIsIHNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRmxvdyBjb250cm9sOiAiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1hPTl9YT0ZGX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiWE9OX1hPRkZfSU58Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9YT05fWE9GRl9PVVQpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJYT05fWE9GRl9PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUlRTX0NUU19JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1JUU19DVFNfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUlRTX0NUU19PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9EU1JfRFRSX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFNSX0RUUl9JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFNSX0RUUl9PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9FTlFfQUNLX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRU5RX0FDS19JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0VOUV9BQ0tfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRU5RX0FDS19PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCkKLQkJcmV0LS07IC8qIHJlbW92ZSB0aGUgbGFzdCB8ICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJc2VxX3B1dHMobSwgIkZsb3cgY29udHJvbDoiKTsKKwlzZXAgPSAnICc7CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9YT05fWE9GRl9JTikgeworCQlzZXFfcHJpbnRmKG0sICIlY1hPTl9YT0ZGX0lOIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1hPTl9YT0ZGX09VVCkgeworCQlzZXFfcHJpbnRmKG0sICIlY1hPTl9YT0ZGX09VVCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX0lOKSB7CisJCXNlcV9wcmludGYobSwgIiVjUlRTX0NUU19JTiIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX09VVCkgeworCQlzZXFfcHJpbnRmKG0sICIlY1JUU19DVFNfT1VUIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfSU4pIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNEU1JfRFRSX0lOIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfT1VUKSB7CisJCXNlcV9wcmludGYobSwgIiVjRFNSX0RUUl9PVVQiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgJiBJUkNPTU1fRU5RX0FDS19JTikgeworCQlzZXFfcHJpbnRmKG0sICIlY0VOUV9BQ0tfSU4iLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgJiBJUkNPTU1fRU5RX0FDS19PVVQpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNFTlFfQUNLX09VVCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRmxhZ3M6ICIpOwotCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQVNZTkNfQ1RTX0ZMT1d8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJBU1lOQ19DSEVDS19DRHwiKTsKLQlpZiAoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX0lOSVRJQUxJWkVEfCIpOwotCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQVNZTkNfTE9XX0xBVEVOQ1l8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX0NMT1NJTkd8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfTk9STUFMX0FDVElWRSkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX05PUk1BTF9BQ1RJVkV8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzKQotCQlyZXQtLTsgLyogcmVtb3ZlIHRoZSBsYXN0IHwgKi8KLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwlzZXFfcHV0cyhtLCAiRmxhZ3M6Iik7CisJc2VwID0gJyAnOworCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfQ1RTX0ZMT1ciLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfQ0hFQ0tfQ0QiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfSU5JVElBTElaRUQiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfTE9XX0xBVEVOQ1kiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNBU1lOQ19DTE9TSU5HIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfTk9STUFMX0FDVElWRSIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUm9sZTogJXNcbiIsIHNlbGYtPmNsaWVudCA/Ci0JCSAgICAgICAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiT3BlbiBjb3VudDogJWRcbiIsIHNlbGYtPm9wZW5fY291bnQpOwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJNYXggZGF0YSBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7Ci0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk1heCBoZWFkZXIgc2l6ZTogJWRcbiIsIHNlbGYtPm1heF9oZWFkZXJfc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiUm9sZTogJXNcbiIsIHNlbGYtPmNsaWVudCA/ICJjbGllbnQiIDogInNlcnZlciIpOworCXNlcV9wcmludGYobSwgIk9wZW4gY291bnQ6ICVkXG4iLCBzZWxmLT5vcGVuX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJNYXggZGF0YSBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiTWF4IGhlYWRlciBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2hlYWRlcl9zaXplKTsKIAogCWlmIChzZWxmLT50dHkpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJIYXJkd2FyZTogJXNcbiIsCisJCXNlcV9wcmludGYobSwgIkhhcmR3YXJlOiAlc1xuIiwKIAkJCSAgICAgICBzZWxmLT50dHktPmh3X3N0b3BwZWQgPyAiU3RvcHBlZCIgOiAiUnVubmluZyIpOwotCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7Ci0JcmV0dXJuIHJldDsKIH0KIAotCi0vKgotICogRnVuY3Rpb24gaXJjb21tX3R0eV9yZWFkX3Byb2MgKGJ1Ziwgc3RhcnQsIG9mZnNldCwgbGVuLCBlb2YsIHVudXNlZCkKLSAqCi0gKgotICoKLSAqLwotc3RhdGljIGludCBpcmNvbW1fdHR5X3JlYWRfcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuLAotCQkJCWludCAqZW9mLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IGlyY29tbV90dHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZjsKLQlpbnQgY291bnQgPSAwLCBsOwotCW9mZl90IGJlZ2luID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlyY29tbV90dHktPmhiX3NwaW5sb2NrLCBmbGFncyk7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KGlyY29tbV90dHkpOwotCXdoaWxlICgoc2VsZiAhPSBOVUxMKSAmJiAoY291bnQgPCA0MDAwKSkgeworCXdoaWxlIChzZWxmICE9IE5VTEwpIHsKIAkJaWYgKHNlbGYtPm1hZ2ljICE9IElSQ09NTV9UVFlfTUFHSUMpCiAJCQlicmVhazsKIAotCQlsID0gaXJjb21tX3R0eV9saW5lX2luZm8oc2VsZiwgYnVmICsgY291bnQpOwotCQljb3VudCArPSBsOwotCQlpZiAoY291bnQrYmVnaW4gPiBvZmZzZXQrbGVuKQotCQkJZ290byBkb25lOwotCQlpZiAoY291bnQrYmVnaW4gPCBvZmZzZXQpIHsKLQkJCWJlZ2luICs9IGNvdW50OwotCQkJY291bnQgPSAwOwotCQl9Ci0KKwkJaXJjb21tX3R0eV9saW5lX2luZm8oc2VsZiwgbSk7CiAJCXNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaGFzaGJpbl9nZXRfbmV4dChpcmNvbW1fdHR5KTsKIAl9Ci0JKmVvZiA9IDE7Ci1kb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyY29tbV90dHktPmhiX3NwaW5sb2NrLCBmbGFncyk7Ci0KLQlpZiAob2Zmc2V0ID49IGNvdW50K2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBidWYgKyAob2Zmc2V0LWJlZ2luKTsKLQlyZXR1cm4gKChsZW4gPCBiZWdpbitjb3VudC1vZmZzZXQpID8gbGVuIDogYmVnaW4rY291bnQtb2Zmc2V0KTsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpcmNvbW1fdHR5X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaXJjb21tX3R0eV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmNvbW1fdHR5X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaXJjb21tX3R0eV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogTU9EVUxFX0FVVEhPUigiRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJwcm9jLmMgYi9uZXQvaXJkYS9pcnByb2MuYwppbmRleCA4OGU4MGEzLi44ZmYxODYxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnByb2MuYworKysgYi9uZXQvaXJkYS9pcnByb2MuYwpAQCAtNzAsNyArNzAsNiBAQAogCXByb2NfaXJkYSA9IHByb2NfbWtkaXIoImlyZGEiLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKHByb2NfaXJkYSA9PSBOVUxMKQogCQlyZXR1cm47Ci0JcHJvY19pcmRhLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXJkYV9kaXJzKTsgaSsrKQogCQlkID0gcHJvY19jcmVhdGUoaXJkYV9kaXJzW2ldLm5hbWUsIDAsIHByb2NfaXJkYSwKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX3Byb2MuYyBiL25ldC9sbGMvbGxjX3Byb2MuYwppbmRleCBiNThiZDdjLi5kMjA4YjMzIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19wcm9jLmMKKysrIGIvbmV0L2xsYy9sbGNfcHJvYy5jCkBAIC0yMzYsNyArMjM2LDYgQEAKIAlsbGNfcHJvY19kaXIgPSBwcm9jX21rZGlyKCJsbGMiLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKCFsbGNfcHJvY19kaXIpCiAJCWdvdG8gb3V0OwotCWxsY19wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXAgPSBwcm9jX2NyZWF0ZSgic29ja2V0IiwgU19JUlVHTywgbGxjX3Byb2NfZGlyLCAmbGxjX3NlcV9zb2NrZXRfZm9wcyk7CiAJaWYgKCFwKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaXJjLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwppbmRleCA0MDljOGJlLi44YmQ5OGM4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtNjYsNyArNjYsNyBAQAogICoJYWRfYmVnX3AJcmV0dXJucyBwb2ludGVyIHRvIGZpcnN0IGJ5dGUgb2YgYWRkciBkYXRhCiAgKglhZF9lbmRfcAlyZXR1cm5zIHBvaW50ZXIgdG8gbGFzdCBieXRlIG9mIGFkZHIgZGF0YQogICovCi1zdGF0aWMgaW50IHBhcnNlX2RjYyhjaGFyICpkYXRhLCBjb25zdCBjaGFyICpkYXRhX2VuZCwgdV9pbnQzMl90ICppcCwKK3N0YXRpYyBpbnQgcGFyc2VfZGNjKGNoYXIgKmRhdGEsIGNvbnN0IGNoYXIgKmRhdGFfZW5kLCBfX2JlMzIgKmlwLAogCQkgICAgIHVfaW50MTZfdCAqcG9ydCwgY2hhciAqKmFkX2JlZ19wLCBjaGFyICoqYWRfZW5kX3ApCiB7CiAJY2hhciAqdG1wOwpAQCAtODUsNyArODUsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAkqYWRfYmVnX3AgPSBkYXRhOwotCSppcCA9IHNpbXBsZV9zdHJ0b3VsKGRhdGEsICZkYXRhLCAxMCk7CisJKmlwID0gY3B1X3RvX2JlMzIoc2ltcGxlX3N0cnRvdWwoZGF0YSwgJmRhdGEsIDEwKSk7CiAKIAkvKiBza2lwIGJsYW5rcyBiZXR3ZWVuIGlwIGFuZCBwb3J0ICovCiAJd2hpbGUgKCpkYXRhID09ICcgJykgewpAQCAtMTEyLDcgKzExMiw3IEBACiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlOwotCXVfaW50MzJfdCBkY2NfaXA7CisJX19iZTMyIGRjY19pcDsKIAl1X2ludDE2X3QgZGNjX3BvcnQ7CiAJX19iZTE2IHBvcnQ7CiAJaW50IGksIHJldCA9IE5GX0FDQ0VQVDsKQEAgLTE3NywxMyArMTc3LDE0IEBACiAJCQkJcHJfZGVidWcoInVuYWJsZSB0byBwYXJzZSBkY2MgY29tbWFuZFxuIik7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlwcl9kZWJ1ZygiRENDIGJvdW5kIGlwL3BvcnQ6ICV1LiV1LiV1LiV1OiV1XG4iLAotCQkJCSBISVBRVUFEKGRjY19pcCksIGRjY19wb3J0KTsKKworCQkJcHJfZGVidWcoIkRDQyBib3VuZCBpcC9wb3J0OiAlcEk0OiV1XG4iLAorCQkJCSAmZGNjX2lwLCBkY2NfcG9ydCk7CiAKIAkJCS8qIGRjY19pcCBjYW4gYmUgdGhlIGludGVybmFsIE9SIGV4dGVybmFsIChOQVQnZWQpIElQICovCiAJCQl0dXBsZSA9ICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGU7Ci0JCQlpZiAodHVwbGUtPnNyYy51My5pcCAhPSBodG9ubChkY2NfaXApICYmCi0JCQkgICAgdHVwbGUtPmRzdC51My5pcCAhPSBodG9ubChkY2NfaXApKSB7CisJCQlpZiAodHVwbGUtPnNyYy51My5pcCAhPSBkY2NfaXAgJiYKKwkJCSAgICB0dXBsZS0+ZHN0LnUzLmlwICE9IGRjY19pcCkgewogCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJCSJGb3JnZWQgRENDIGNvbW1hbmQgZnJvbSAlcEk0OiAlcEk0OiV1XG4iLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwppbmRleCBhZDViZDg5Li42YzQ4NDc2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpAQCAtNTgsNiArNTgsMTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBib29sCit4dF9jbHVzdGVyX2lwdjZfaXNfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlfX2JlMzIgc3QgPSBhZGRyLT5zNl9hZGRyMzJbMF07CisJcmV0dXJuICgoc3QgJiBodG9ubCgweEZGMDAwMDAwKSkgPT0gaHRvbmwoMHhGRjAwMDAwMCkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKIHh0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQ4X3QgZmFtaWx5KQogewogCWJvb2wgaXNfbXVsdGljYXN0ID0gZmFsc2U7CkBAIC02Nyw4ICs3NCw4IEBACiAJCWlzX211bHRpY2FzdCA9IGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLT5kYWRkcik7CiAJCWJyZWFrOwogCWNhc2UgTkZQUk9UT19JUFY2OgotCQlpc19tdWx0aWNhc3QgPSBpcHY2X2FkZHJfdHlwZSgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpICYKLQkJCQkJCUlQVjZfQUREUl9NVUxUSUNBU1Q7CisJCWlzX211bHRpY2FzdCA9CisJCQl4dF9jbHVzdGVyX2lwdjZfaXNfbXVsdGljYXN0KCZpcHY2X2hkcihza2IpLT5kYWRkcik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmMKaW5kZXggMDZhN2I3OS4uNDkzM2IzOCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYi5jCisrKyBiL25ldC9yZHMvaWIuYwpAQCAtNTEsNiArNTEsNyBAQAogCiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOwogCisvKiBOT1RFOiBpZiBhbHNvIGdyYWJiaW5nIGliZGV2IGxvY2ssIGdyYWIgdGhpcyBmaXJzdCAqLwogREVGSU5FX1NQSU5MT0NLKGliX25vZGV2X2Nvbm5zX2xvY2spOwogTElTVF9IRUFEKGliX25vZGV2X2Nvbm5zKTsKIApAQCAtMTM3LDcgKzEzOCw3IEBACiAJCWtmcmVlKGlfaXBhZGRyKTsKIAl9CiAKLQlyZHNfaWJfcmVtb3ZlX2Nvbm5zKHJkc19pYmRldik7CisJcmRzX2liX2Rlc3Ryb3lfY29ubnMocmRzX2liZGV2KTsKIAogCWlmIChyZHNfaWJkZXYtPm1yX3Bvb2wpCiAJCXJkc19pYl9kZXN0cm95X21yX3Bvb2wocmRzX2liZGV2LT5tcl9wb29sKTsKQEAgLTI0OSw3ICsyNTAsNyBAQAogdm9pZCByZHNfaWJfZXhpdCh2b2lkKQogewogCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JQl9DT05ORUNUSU9OUywgcmRzX2liX2ljX2luZm8pOwotCXJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlyZHNfaWJfZGVzdHJveV9ub2Rldl9jb25ucygpOwogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaWJfY2xpZW50KTsKIAlyZHNfaWJfc3lzY3RsX2V4aXQoKTsKIAlyZHNfaWJfcmVjdl9leGl0KCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmggYi9uZXQvcmRzL2liLmgKaW5kZXggOGJlNTYzYS4uMDY5MjA2YyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYi5oCisrKyBiL25ldC9yZHMvaWIuaApAQCAtMTA4LDcgKzEwOCwxMiBAQAogCiAJLyogc2VuZGluZyBhY2tzICovCiAJdW5zaWduZWQgbG9uZwkJaV9hY2tfZmxhZ3M7CisjaWZkZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCWF0b21pYzY0X3QJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKyNlbHNlCisJc3BpbmxvY2tfdAkJaV9hY2tfbG9jazsJLyogcHJvdGVjdCBpX2Fja19uZXh0ICovCiAJdTY0CQkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworI2VuZGlmCiAJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOwogCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOwogCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKQEAgLTI2Nyw5ICsyNzIsMTcgQEAKIAogLyogaWJfcmRtYS5jICovCiBpbnQgcmRzX2liX3VwZGF0ZV9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcik7Ci1pbnQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Ci12b2lkIHJkc19pYl9yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Ci12b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldik7Cit2b2lkIHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgX19yZHNfaWJfZGVzdHJveV9jb25ucyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzcGlubG9ja190ICpsaXN0X2xvY2spOworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKHZvaWQpCit7CisJX19yZHNfaWJfZGVzdHJveV9jb25ucygmaWJfbm9kZXZfY29ubnMsICZpYl9ub2Rldl9jb25uc19sb2NrKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfZGVzdHJveV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCV9fcmRzX2liX2Rlc3Ryb3lfY29ubnMoJnJkc19pYmRldi0+Y29ubl9saXN0LCAmcmRzX2liZGV2LT5zcGlubG9jayk7Cit9CiBzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnJkc19pYl9jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX2RldmljZSAqKTsKIHZvaWQgcmRzX2liX2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKIHZvaWQgcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKik7CkBAIC0zNTUsMTMgKzM2OCw0IEBACiAJcmV0dXJuICZzZ2VbMV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZHNfaWJfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQotewotI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKLQkqcHRyID0gdmFsOwotI2Vsc2UKLQlzZXRfNjRiaXQocHRyLCB2YWwpOwotI2VuZGlmCi19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCmluZGV4IDA1MzIyMzcuLmY4ZTQwZTEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfY20uYworKysgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTEyNiw5ICsxMjYsNyBAQAogCWVyciA9IHJkc19pYl91cGRhdGVfaXBhZGRyKHJkc19pYmRldiwgY29ubi0+Y19sYWRkcik7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfdXBkYXRlX2lwYWRkciBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKLQllcnIgPSByZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl9hZGRfY29ubiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwlyZHNfaWJfYWRkX2Nvbm4ocmRzX2liZGV2LCBjb25uKTsKIAogCS8qIElmIHRoZSBwZWVyIGdhdmUgdXMgdGhlIGxhc3QgcGFja2V0IGl0IHNhdywgcHJvY2VzcyB0aGlzIGFzIGlmCiAJICogd2UgaGFkIHJlY2VpdmVkIGEgcmVndWxhciBBQ0suICovCkBAIC02MTYsMTggKzYxNCw4IEBACiAJCS8qCiAJCSAqIE1vdmUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBub2RldiBsaXN0LgogCQkgKi8KLQkJaWYgKGljLT5yZHNfaWJkZXYpIHsKLQotCQkJc3Bpbl9sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOwotCQkJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7Ci0JCQlsaXN0X2RlbCgmaWMtPmliX25vZGUpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOwotCQkJaWMtPnJkc19pYmRldiA9IE5VTEw7Ci0JCX0KKwkJaWYgKGljLT5yZHNfaWJkZXYpCisJCQlyZHNfaWJfcmVtb3ZlX2Nvbm4oaWMtPnJkc19pYmRldiwgY29ubik7CiAKIAkJaWMtPmlfY21faWQgPSBOVUxMOwogCQlpYy0+aV9wZCA9IE5VTEw7CkBAIC02NDgsNyArNjM2LDExIEBACiAKIAkvKiBDbGVhciB0aGUgQUNLIHN0YXRlICovCiAJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOwotCXJkc19pYl9zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKyNpZmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJYXRvbWljNjRfc2V0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisjZWxzZQorCWljLT5pX2Fja19uZXh0ID0gMDsKKyNlbmRpZgogCWljLT5pX2Fja19yZWN2ID0gMDsKIAogCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLwpAQCAtNjgxLDYgKzY3Myw5IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmaWMtPmliX25vZGUpOwogCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworI2lmbmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJc3Bpbl9sb2NrX2luaXQoJmljLT5pX2Fja19sb2NrKTsKKyNlbmRpZgogCiAJLyoKIAkgKiByZHNfaWJfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKQEAgLTcwMSwxMSArNjk2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBGcmVlIGEgY29ubmVjdGlvbi4gQ29ubmVjdGlvbiBtdXN0IGJlIHNodXQgZG93biBhbmQgbm90IHNldCBmb3IgcmVjb25uZWN0LgorICovCiB2b2lkIHJkc19pYl9jb25uX2ZyZWUodm9pZCAqYXJnKQogewogCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJc3BpbmxvY2tfdAkqbG9ja19wdHI7CisKIAlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKworCS8qCisJICogQ29ubiBpcyBlaXRoZXIgb24gYSBkZXYncyBsaXN0IG9yIG9uIHRoZSBub2RldiBsaXN0LgorCSAqIEEgcmFjZSB3aXRoIHNodXRkb3duKCkgb3IgY29ubmVjdCgpIHdvdWxkIGNhdXNlIHByb2JsZW1zCisJICogKHNpbmNlIHJkc19pYmRldiB3b3VsZCBjaGFuZ2UpIGJ1dCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uCisJICovCisJbG9ja19wdHIgPSBpYy0+cmRzX2liZGV2ID8gJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrIDogJmliX25vZGV2X2Nvbm5zX2xvY2s7CisKKwlzcGluX2xvY2tfaXJxKGxvY2tfcHRyKTsKIAlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCXNwaW5fdW5sb2NrX2lycShsb2NrX3B0cik7CisKIAlrZnJlZShpYyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmRtYS5jIGIvbmV0L3Jkcy9pYl9yZG1hLmMKaW5kZXggNjlhNjI4OS4uODEwMzNhZiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9yZG1hLmMKKysrIGIvbmV0L3Jkcy9pYl9yZG1hLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCXJldHVybiByZHNfaWJfYWRkX2lwYWRkcihyZHNfaWJkZXYsIGlwYWRkcik7CiB9CiAKLWludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQordm9pZCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogewogCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOwogCkBAIC0xNDgsNDUgKzE0OCw0NCBAQAogCUJVR19PTihsaXN0X2VtcHR5KCZpYl9ub2Rldl9jb25ucykpOwogCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOwogCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKIAogCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmcmRzX2liZGV2LT5jb25uX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7Ci0KLQlpYy0+cmRzX2liZGV2ID0gcmRzX2liZGV2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQotewotCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7Ci0JTElTVF9IRUFEKHRtcF9saXN0KTsKLQotCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KLQlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKLQlsaXN0X3NwbGljZSgmaWJfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmliX25vZGV2X2Nvbm5zKTsKIAlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgewotCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKLQkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7Ci0JCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOwotCX0KKwlpYy0+cmRzX2liZGV2ID0gcmRzX2liZGV2OwogfQogCi12b2lkIHJkc19pYl9yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldikKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIHBsYWNlIGNvbm4gb24gbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9jaygmaWJfbm9kZXZfY29ubnNfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKKwlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKKworCXNwaW5fdW5sb2NrKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCWljLT5yZHNfaWJkZXYgPSBOVUxMOworfQorCit2b2lkIF9fcmRzX2liX2Rlc3Ryb3lfY29ubnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3BpbmxvY2tfdCAqbGlzdF9sb2NrKQogewogCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7CiAJTElTVF9IRUFEKHRtcF9saXN0KTsKIAogCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KLQlzcGluX2xvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKLQlsaXN0X3NwbGljZSgmcmRzX2liZGV2LT5jb25uX2xpc3QsICZ0bXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJkc19pYmRldi0+Y29ubl9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCXNwaW5fbG9ja19pcnEobGlzdF9sb2NrKTsKKwlsaXN0X3NwbGljZShsaXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCXNwaW5fdW5sb2NrX2lycShsaXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgewogCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmMKaW5kZXggNTA2MWI1NS4uMzZkOTMxNSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9yZWN2LmMKKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmMKQEAgLTM5NSwxMCArMzk1LDM3IEBACiAgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCiAgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCiAgKi8KKyNpZm5kZWYgS0VSTkVMX0hBU19BVE9NSUM2NAogc3RhdGljIHZvaWQgcmRzX2liX3NldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdTY0IHNlcSwKIAkJCQlpbnQgYWNrX3JlcXVpcmVkKQogewotCXJkc19pYl9zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKwlpYy0+aV9hY2tfbmV4dCA9IHNlcTsKKwlpZiAoYWNrX3JlcXVpcmVkKQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1NjQgcmRzX2liX2dldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBzZXE7CisKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKwlzZXEgPSBpYy0+aV9hY2tfbmV4dDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNlcTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAorCQkJCWludCBhY2tfcmVxdWlyZWQpCit7CisJYXRvbWljNjRfc2V0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKIAlpZiAoYWNrX3JlcXVpcmVkKSB7CiAJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOwpAQCAtNDEwLDggKzQzNywxMCBAQAogCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCi0JcmV0dXJuIGljLT5pX2Fja19uZXh0OworCXJldHVybiBhdG9taWM2NF9yZWFkKCZpYy0+aV9hY2tfbmV4dCk7CiB9CisjZW5kaWYKKwogCiBzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQogewpAQCAtNDY0LDYgKzQ5MywxMCBAQAogICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCiAgKgogICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIG5vdCBoYXZlIHRvIHVzZSBhIHNwaW5sb2NrIHRvIHN5bmNocm9uaXplIHRoaW5ncywKKyAqIGJ1dCB0aGUgb25lIHByb2JsZW0gdGhhdCBydWxlcyB0aGlzIG91dCBpcyB0aGF0IDY0Yml0IHVwZGF0ZXMgYXJlCisgKiBub3QgYXRvbWljIG9uIGFsbCBwbGF0Zm9ybXMuIFRoaW5ncyB3b3VsZCBiZSBhIGxvdCBzaW1wbGVyIGlmCisgKiB3ZSBoYWQgYXRvbWljNjQgb3IgbWF5YmUgY21weGNoZzY0IGV2ZXJ5d2hlcmUuCiAgKgogICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCiAgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmMgYi9uZXQvcmRzL2l3LmMKaW5kZXggMWI1NjkwNS4uYjczMmVmYiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5jCisrKyBiL25ldC9yZHMvaXcuYwpAQCAtNTEsNiArNTEsNyBAQAogCiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pd19kZXZpY2VzOwogCisvKiBOT1RFOiBpZiBhbHNvIGdyYWJiaW5nIGl3ZGV2IGxvY2ssIGdyYWIgdGhpcyBmaXJzdCAqLwogREVGSU5FX1NQSU5MT0NLKGl3X25vZGV2X2Nvbm5zX2xvY2spOwogTElTVF9IRUFEKGl3X25vZGV2X2Nvbm5zKTsKIApAQCAtMTQ1LDcgKzE0Niw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CiAKLQlyZHNfaXdfcmVtb3ZlX2Nvbm5zKHJkc19pd2Rldik7CisJcmRzX2l3X2Rlc3Ryb3lfY29ubnMocmRzX2l3ZGV2KTsKIAogCWlmIChyZHNfaXdkZXYtPm1yX3Bvb2wpCiAJCXJkc19pd19kZXN0cm95X21yX3Bvb2wocmRzX2l3ZGV2LT5tcl9wb29sKTsKQEAgLTI1OCw3ICsyNTksNyBAQAogdm9pZCByZHNfaXdfZXhpdCh2b2lkKQogewogCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOwotCXJkc19pd19yZW1vdmVfbm9kZXZfY29ubnMoKTsKKwlyZHNfaXdfZGVzdHJveV9ub2Rldl9jb25ucygpOwogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZyZHNfaXdfY2xpZW50KTsKIAlyZHNfaXdfc3lzY3RsX2V4aXQoKTsKIAlyZHNfaXdfcmVjdl9leGl0KCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKaW5kZXggMGRkZGEzNC4uYjRmYjI3MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5oCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMTMxLDcgKzEzMSwxMiBAQAogCiAJLyogc2VuZGluZyBhY2tzICovCiAJdW5zaWduZWQgbG9uZwkJaV9hY2tfZmxhZ3M7CisjaWZkZWYgS0VSTkVMX0hBU19BVE9NSUM2NAorCWF0b21pYzY0X3QJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKyNlbHNlCisJc3BpbmxvY2tfdAkJaV9hY2tfbG9jazsJLyogcHJvdGVjdCBpX2Fja19uZXh0ICovCiAJdTY0CQkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworI2VuZGlmCiAJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOwogCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOwogCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKQEAgLTI5NCw5ICsyOTksMTcgQEAKIAogLyogaWJfcmRtYS5jICovCiBpbnQgcmRzX2l3X3VwZGF0ZV9jbV9pZChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOwotaW50IHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwotdm9pZCByZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpOwotdm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpOwordm9pZCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIF9fcmRzX2l3X2Rlc3Ryb3lfY29ubnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3BpbmxvY2tfdCAqbGlzdF9sb2NrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfZGVzdHJveV9ub2Rldl9jb25ucyh2b2lkKQoreworCV9fcmRzX2l3X2Rlc3Ryb3lfY29ubnMoJml3X25vZGV2X2Nvbm5zLCAmaXdfbm9kZXZfY29ubnNfbG9jayk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3sKKwlfX3Jkc19pd19kZXN0cm95X2Nvbm5zKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCwgJnJkc19pd2Rldi0+c3BpbmxvY2spOworfQogc3RydWN0IHJkc19pd19tcl9wb29sICpyZHNfaXdfY3JlYXRlX21yX3Bvb2woc3RydWN0IHJkc19pd19kZXZpY2UgKik7CiB2b2lkIHJkc19pd19nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbyk7CiB2b2lkIHJkc19pd19kZXN0cm95X21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICopOwpAQCAtMzgzLDEzICszOTYsNCBAQAogCXJldHVybiAmc2dlWzFdOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKLXsKLSNpZiBCSVRTX1BFUl9MT05HID09IDY0Ci0JKnB0ciA9IHZhbDsKLSNlbHNlCi0Jc2V0XzY0Yml0KHB0ciwgdmFsKTsKLSNlbmRpZgotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfY20uYyBiL25ldC9yZHMvaXdfY20uYwppbmRleCA1N2VjYjNkLi5hNDE2YjBkIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X2NtLmMKKysrIGIvbmV0L3Jkcy9pd19jbS5jCkBAIC04Niw5ICs4Niw3IEBACiAJZXJyID0gcmRzX2l3X3VwZGF0ZV9jbV9pZChyZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgInJkc19pd191cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCWVyciA9IHJkc19pd19hZGRfY29ubihyZHNfaXdkZXYsIGNvbm4pOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCXJkc19pd19hZGRfY29ubihyZHNfaXdkZXYsIGNvbm4pOwogCiAJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKIAkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KQEAgLTYzNywxOSArNjM1LDggQEAKIAkJICogCU1vdmUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBub2RldiBsaXN0LgogCQkgKiAJUmVtb3ZlIGNtX2lkIGZyb20gdGhlIGRldmljZSBjbV9pZCBsaXN0LgogCQkgKi8KLQkJaWYgKGljLT5yZHNfaXdkZXYpIHsKLQotCQkJc3Bpbl9sb2NrX2lycSgmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2spOwotCQkJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7Ci0JCQlsaXN0X2RlbCgmaWMtPml3X25vZGUpOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayk7Ci0KLQkJCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZpd19ub2Rldl9jb25ucyk7Ci0JCQlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOwotCQkJcmRzX2l3X3JlbW92ZV9jbV9pZChpYy0+cmRzX2l3ZGV2LCBpYy0+aV9jbV9pZCk7Ci0JCQlpYy0+cmRzX2l3ZGV2ID0gTlVMTDsKLQkJfQorCQlpZiAoaWMtPnJkc19pd2RldikKKwkJCXJkc19pd19yZW1vdmVfY29ubihpYy0+cmRzX2l3ZGV2LCBjb25uKTsKIAogCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOwogCkBAIC02NzIsNyArNjU5LDExIEBACiAKIAkvKiBDbGVhciB0aGUgQUNLIHN0YXRlICovCiAJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOwotCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKyNpZmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJYXRvbWljNjRfc2V0KCZpYy0+aV9hY2tfbmV4dCwgMCk7CisjZWxzZQorCWljLT5pX2Fja19uZXh0ID0gMDsKKyNlbmRpZgogCWljLT5pX2Fja19yZWN2ID0gMDsKIAogCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLwpAQCAtNzA2LDYgKzY5Nyw5IEBACiAKIAlJTklUX0xJU1RfSEVBRCgmaWMtPml3X25vZGUpOwogCW11dGV4X2luaXQoJmljLT5pX3JlY3ZfbXV0ZXgpOworI2lmbmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJc3Bpbl9sb2NrX2luaXQoJmljLT5pX2Fja19sb2NrKTsKKyNlbmRpZgogCiAJLyoKIAkgKiByZHNfaXdfY29ubl9zaHV0ZG93bigpIHdhaXRzIGZvciB0aGVzZSB0byBiZSBlbXB0aWVkIHNvIHRoZXkKQEAgLTcyNiwxMSArNzIwLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBGcmVlIGEgY29ubmVjdGlvbi4gQ29ubmVjdGlvbiBtdXN0IGJlIHNodXQgZG93biBhbmQgbm90IHNldCBmb3IgcmVjb25uZWN0LgorICovCiB2b2lkIHJkc19pd19jb25uX2ZyZWUodm9pZCAqYXJnKQogewogCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJc3BpbmxvY2tfdAkqbG9ja19wdHI7CisKIAlyZHNkZWJ1ZygiaWMgJXBcbiIsIGljKTsKKworCS8qCisJICogQ29ubiBpcyBlaXRoZXIgb24gYSBkZXYncyBsaXN0IG9yIG9uIHRoZSBub2RldiBsaXN0LgorCSAqIEEgcmFjZSB3aXRoIHNodXRkb3duKCkgb3IgY29ubmVjdCgpIHdvdWxkIGNhdXNlIHByb2JsZW1zCisJICogKHNpbmNlIHJkc19pd2RldiB3b3VsZCBjaGFuZ2UpIGJ1dCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4uCisJICovCisJbG9ja19wdHIgPSBpYy0+cmRzX2l3ZGV2ID8gJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrIDogJml3X25vZGV2X2Nvbm5zX2xvY2s7CisKKwlzcGluX2xvY2tfaXJxKGxvY2tfcHRyKTsKIAlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCXNwaW5fdW5sb2NrX2lycShsb2NrX3B0cik7CisKIAlrZnJlZShpYyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmRtYS5jIGIvbmV0L3Jkcy9pd19yZG1hLmMKaW5kZXggMWMwMmE4Zi4uZGNkYjM3ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19yZG1hLmMKKysrIGIvbmV0L3Jkcy9pd19yZG1hLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCXJldHVybiByZHNfaXdfYWRkX2NtX2lkKHJkc19pd2RldiwgY21faWQpOwogfQogCi1pbnQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3ZvaWQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKIAlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKIApAQCAtMjA1LDQ1ICsyMDUsNDUgQEAKIAlCVUdfT04obGlzdF9lbXB0eSgmaXdfbm9kZXZfY29ubnMpKTsKIAlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKIAlsaXN0X2RlbCgmaWMtPml3X25vZGUpOwotCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CiAKIAlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKIAlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOwotCi0JaWMtPnJkc19pd2RldiA9IHJkc19pd2RldjsKLQotCXJldHVybiAwOwotfQotCi12b2lkIHJkc19pd19yZW1vdmVfbm9kZXZfY29ubnModm9pZCkKLXsKLQlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7Ci0KLQkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCi0Jc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7Ci0JbGlzdF9zcGxpY2UoJml3X25vZGV2X2Nvbm5zLCAmdG1wX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZpd19ub2Rldl9jb25ucyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKLQkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCi0JCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uLT5jX3Bhc3NpdmUpOwotCQlyZHNfY29ubl9kZXN0cm95KGljLT5jb25uKTsKLQl9CisJaWMtPnJkc19pd2RldiA9IHJkc19pd2RldjsKIH0KIAotdm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit2b2lkIHJkc19pd19yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkvKiBwbGFjZSBjb25uIG9uIG5vZGV2X2Nvbm5zX2xpc3QgKi8KKwlzcGluX2xvY2soJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pd19ub2RlKSk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJbGlzdF9hZGRfdGFpbCgmaWMtPml3X25vZGUsICZpd19ub2Rldl9jb25ucyk7CisKKwlzcGluX3VubG9jaygmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlyZHNfaXdfcmVtb3ZlX2NtX2lkKGljLT5yZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKKwlpYy0+cmRzX2l3ZGV2ID0gTlVMTDsKK30KKwordm9pZCBfX3Jkc19pd19kZXN0cm95X2Nvbm5zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHNwaW5sb2NrX3QgKmxpc3RfbG9jaykKIHsKIAlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCAqX2ljOwogCUxJU1RfSEVBRCh0bXBfbGlzdCk7CiAKIAkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCi0Jc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7Ci0JbGlzdF9zcGxpY2UoJnJkc19pd2Rldi0+Y29ubl9saXN0LCAmdG1wX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKGxpc3RfbG9jayk7CisJbGlzdF9zcGxpY2UobGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRChsaXN0KTsKKwlzcGluX3VubG9ja19pcnEobGlzdF9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYywgX2ljLCAmdG1wX2xpc3QsIGl3X25vZGUpIHsKIAkJaWYgKGljLT5jb25uLT5jX3Bhc3NpdmUpCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JlY3YuYyBiL25ldC9yZHMvaXdfcmVjdi5jCmluZGV4IGExOTMxZjAuLmZkZTQ3MGYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfcmVjdi5jCisrKyBiL25ldC9yZHMvaXdfcmVjdi5jCkBAIC0zOTUsMTAgKzM5NSwzNyBAQAogICogcm9vbSBmb3IgaXQgYmV5b25kIHRoZSByaW5nIHNpemUuICBTZW5kIGNvbXBsZXRpb24gbm90aWNlcyBpdHMgc3BlY2lhbAogICogd3JfaWQgYW5kIGF2b2lkcyB3b3JraW5nIHdpdGggdGhlIHJpbmcgaW4gdGhhdCBjYXNlLgogICovCisjaWZuZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKIHN0YXRpYyB2b2lkIHJkc19pd19zZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCiAJCQkJaW50IGFja19yZXF1aXJlZCkKIHsKLQlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisJaWMtPmlfYWNrX25leHQgPSBzZXE7CisJaWYgKGFja19yZXF1aXJlZCkKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdTY0IHJkc19pd19nZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgc2VxOworCisJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisJc2VxID0gaWMtPmlfYWNrX25leHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBzZXE7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgcmRzX2l3X3NldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTY0IHNlcSwKKwkJCQlpbnQgYWNrX3JlcXVpcmVkKQoreworCWF0b21pYzY0X3NldCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CiAJaWYgKGFja19yZXF1aXJlZCkgewogCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKIAkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKQEAgLTQxMCw4ICs0MzcsMTAgQEAKIAljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CiAJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAotCXJldHVybiBpYy0+aV9hY2tfbmV4dDsKKwlyZXR1cm4gYXRvbWljNjRfcmVhZCgmaWMtPmlfYWNrX25leHQpOwogfQorI2VuZGlmCisKIAogc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHVuc2lnbmVkIGludCBhZHZfY3JlZGl0cykKIHsKQEAgLTQ2NCw2ICs0OTMsMTAgQEAKICAqICAtCWlfYWNrX25leHQsIHdoaWNoIGlzIHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciB3ZSByZWNlaXZlZAogICoKICAqIFBvdGVudGlhbGx5LCBzZW5kIHF1ZXVlIGFuZCByZWNlaXZlIHF1ZXVlIGhhbmRsZXJzIGNhbiBydW4gY29uY3VycmVudGx5LgorICogSXQgd291bGQgYmUgbmljZSB0byBub3QgaGF2ZSB0byB1c2UgYSBzcGlubG9jayB0byBzeW5jaHJvbml6ZSB0aGluZ3MsCisgKiBidXQgdGhlIG9uZSBwcm9ibGVtIHRoYXQgcnVsZXMgdGhpcyBvdXQgaXMgdGhhdCA2NGJpdCB1cGRhdGVzIGFyZQorICogbm90IGF0b21pYyBvbiBhbGwgcGxhdGZvcm1zLiBUaGluZ3Mgd291bGQgYmUgYSBsb3Qgc2ltcGxlciBpZgorICogd2UgaGFkIGF0b21pYzY0IG9yIG1heWJlIGNtcHhjaGc2NCBldmVyeXdoZXJlLgogICoKICAqIFJlY29ubmVjdGluZyBjb21wbGljYXRlcyB0aGlzIHBpY3R1cmUganVzdCBzbGlnaHRseS4gV2hlbiB3ZQogICogcmVjb25uZWN0LCB3ZSBtYXkgYmUgc2VlaW5nIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgcGVlcgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZHMuaCBiL25ldC9yZHMvcmRzLmgKaW5kZXggMDYwNDAwNy4uNjE5ZjBhMyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9yZHMuaAorKysgYi9uZXQvcmRzL3Jkcy5oCkBAIC0yOCw2ICsyOCwxMCBAQAogICovCiAjZGVmaW5lIFJEU19QT1JUCTE4NjM0CiAKKyNpZmRlZiBBVE9NSUM2NF9JTklUCisjZGVmaW5lIEtFUk5FTF9IQVNfQVRPTUlDNjQKKyNlbmRpZgorCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgcmRzZGVidWcoZm10LCBhcmdzLi4uKSBwcl9kZWJ1ZygiJXMoKTogIiBmbXQsIF9fZnVuY19fICwgIyNhcmdzKQogI2Vsc2UKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMWIzNzM2NC4uMTA0ZmUwMyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTYxNSw3ICs2MTUsNyBAQAogewogCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CiAJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncywgZmxhZ3MyOwogCUxJU1RfSEVBRChsaXN0KTsKIAlpbnQgd2FrZSA9IDA7CiAKQEAgLTY1MSw5ICs2NTEsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkocm0sICZsaXN0LCBtX3NvY2tfaXRlbSkgewogCQkvKiBXZSBkbyB0aGlzIGhlcmUgcmF0aGVyIHRoYW4gaW4gdGhlIGxvb3AgYWJvdmUsIHNvIHRoYXQKIAkJICogd2UgZG9uJ3QgaGF2ZSB0byBuZXN0IG1fcnNfbG9jayB1bmRlciBycy0+cnNfbG9jayAqLwotCQlzcGluX2xvY2soJnJtLT5tX3JzX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm0tPm1fcnNfbG9jaywgZmxhZ3MyKTsKIAkJcm0tPm1fcnMgPSBOVUxMOwotCQlzcGluX3VubG9jaygmcm0tPm1fcnNfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJtLT5tX3JzX2xvY2ssIGZsYWdzMik7CiAKIAkJLyoKIAkJICogSWYgd2Ugc2VlIHRoaXMgZmxhZyBjbGVhcmVkIHRoZW4gd2UncmUgKnN1cmUqIHRoYXQgc29tZW9uZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggY2IxOThhZi4uOGViM2U2MSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC0xMDYsMTIgKzEwNiw4IEBACiAJCWdvdG8gb3V0X25vbWVtOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKCFwcm9jX25ldF9zY3RwKSB7Ci0JCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwotCQllbnQgPSBwcm9jX21rZGlyKCJzY3RwIiwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZiAoZW50KSB7Ci0JCQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCQlwcm9jX25ldF9zY3RwID0gZW50OwotCQl9IGVsc2UKKwkJcHJvY19uZXRfc2N0cCA9IHByb2NfbWtkaXIoInNjdHAiLCBpbml0X25ldC5wcm9jX25ldCk7CisJCWlmICghcHJvY19uZXRfc2N0cCkKIAkJCWdvdG8gb3V0X2ZyZWVfcGVyY3B1OwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9LY29uZmlnIGIvbmV0L3N1bnJwYy9LY29uZmlnCmluZGV4IDNmN2ZhYTkuLjQ0M2MxNjEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvS2NvbmZpZworKysgYi9uZXQvc3VucnBjL0tjb25maWcKQEAgLTE3LDI4ICsxNyw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBTVU5SUENfUkVHSVNURVJfVjQKLQlib29sICJSZWdpc3RlciBsb2NhbCBSUEMgc2VydmljZXMgdmlhIHJwY2JpbmQgdjQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTVU5SUEMgJiYgRVhQRVJJTUVOVEFMCi0JZGVmYXVsdCBuCi0JaGVscAotCSAgU3VuIGFkZGVkIHN1cHBvcnQgZm9yIHJlZ2lzdGVyaW5nIFJQQyBzZXJ2aWNlcyBhdCBhbiBJUHY2Ci0JICBhZGRyZXNzIGJ5IGNyZWF0aW5nIHR3byBuZXcgdmVyc2lvbnMgb2YgdGhlIHJwY2JpbmQgcHJvdG9jb2wKLQkgIChSRkMgMTgzMykuCi0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBpbiB0aGUga2VybmVsIFJQQyBzZXJ2ZXIgZm9yCi0JICByZWdpc3RlcmluZyBrZXJuZWwgUlBDIHNlcnZpY2VzIHZpYSB2ZXJzaW9uIDQgb2YgdGhlIHJwY2JpbmQKLQkgIHByb3RvY29sLiAgSWYgeW91IGVuYWJsZSB0aGlzIG9wdGlvbiwgeW91IG11c3QgcnVuIGEgcG9ydG1hcHBlcgotCSAgZGFlbW9uIHRoYXQgc3VwcG9ydHMgcnBjYmluZCBwcm90b2NvbCB2ZXJzaW9uIDQuCi0KLQkgIFNlcnZpbmcgTkZTIG92ZXIgSVB2NiBmcm9tIGtuZnNkICh0aGUga2VybmVsJ3MgTkZTIHNlcnZlcikKLQkgIHJlcXVpcmVzIHRoYXQgeW91IGVuYWJsZSB0aGlzIG9wdGlvbiBhbmQgdXNlIGEgcG9ydG1hcHBlciB0aGF0Ci0JICBzdXBwb3J0cyBycGNiaW5kIHZlcnNpb24gNC4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTiB0byBnZXQgdHJhZGl0aW9uYWwgYmVoYXZpb3IgKHJlZ2lzdGVyIGtlcm5lbAotCSAgUlBDIHNlcnZpY2VzIHVzaW5nIG9ubHkgcnBjYmluZCB2ZXJzaW9uIDIpLiAgRGlzdHJpYnV0aW9ucwotCSAgdXNpbmcgdGhlIGxlZ2FjeSBMaW51eCBwb3J0bWFwcGVyIGRhZW1vbiBtdXN0IHNheSBOIGhlcmUuCi0KIGNvbmZpZyBSUENTRUNfR1NTX0tSQjUKIAl0cmlzdGF0ZSAiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc20gKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBTVU5SUEMgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NhY2hlLmMgYi9uZXQvc3VucnBjL2NhY2hlLmMKaW5kZXggNDczNWNhYS4uMjAwMjlhNyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jYWNoZS5jCisrKyBiL25ldC9zdW5ycGMvY2FjaGUuYwpAQCAtMzEzLDcgKzMxMyw2IEBACiAJY2QtPnByb2NfZW50ID0gcHJvY19ta2RpcihjZC0+bmFtZSwgcHJvY19uZXRfcnBjKTsKIAlpZiAoY2QtPnByb2NfZW50ID09IE5VTEwpCiAJCWdvdG8gb3V0X25vbWVtOwotCWNkLT5wcm9jX2VudC0+b3duZXIgPSBjZC0+b3duZXI7CiAJY2QtPmNoYW5uZWxfZW50ID0gY2QtPmNvbnRlbnRfZW50ID0gTlVMTDsKIAogCXAgPSBwcm9jX2NyZWF0ZV9kYXRhKCJmbHVzaCIsIFNfSUZSRUd8U19JUlVTUnxTX0lXVVNSLApAQCAtMzIxLDcgKzMyMCw2IEBACiAJY2QtPmZsdXNoX2VudCA9IHA7CiAJaWYgKHAgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9tZW07Ci0JcC0+b3duZXIgPSBjZC0+b3duZXI7CiAKIAlpZiAoY2QtPmNhY2hlX3JlcXVlc3QgfHwgY2QtPmNhY2hlX3BhcnNlKSB7CiAJCXAgPSBwcm9jX2NyZWF0ZV9kYXRhKCJjaGFubmVsIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCkBAIC0zMjksNyArMzI3LDYgQEAKIAkJY2QtPmNoYW5uZWxfZW50ID0gcDsKIAkJaWYgKHAgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X25vbWVtOwotCQlwLT5vd25lciA9IGNkLT5vd25lcjsKIAl9CiAJaWYgKGNkLT5jYWNoZV9zaG93KSB7CiAJCXAgPSBwcm9jX2NyZWF0ZV9kYXRhKCJjb250ZW50IiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCkBAIC0zMzcsNyArMzM0LDYgQEAKIAkJY2QtPmNvbnRlbnRfZW50ID0gcDsKIAkJaWYgKHAgPT0gTlVMTCkKIAkJCWdvdG8gb3V0X25vbWVtOwotCQlwLT5vd25lciA9IGNkLT5vd25lcjsKIAl9CiAJcmV0dXJuIDA7CiBvdXRfbm9tZW06CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2NsbnQuYyBiL25ldC9zdW5ycGMvY2xudC5jCmluZGV4IDgzNmYxNWMuLjVhYmFiMDkgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2xudC5jCisrKyBiL25ldC9zdW5ycGMvY2xudC5jCkBAIC0xMDMyLDI3ICsxMDMyLDIwIEBACiAJZHByaW50X3N0YXR1cyh0YXNrKTsKIAogCXRhc2stPnRrX3N0YXR1cyA9IDA7Ci0JaWYgKHN0YXR1cyA+PSAwKSB7CisJaWYgKHN0YXR1cyA+PSAwIHx8IHN0YXR1cyA9PSAtRUFHQUlOKSB7CiAJCWNsbnQtPmNsX3N0YXRzLT5uZXRyZWNvbm4rKzsKIAkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF90cmFuc21pdDsKIAkJcmV0dXJuOwogCX0KIAotCS8qIFNvbWV0aGluZyBmYWlsZWQ6IHJlbW90ZSBzZXJ2aWNlIHBvcnQgbWF5IGhhdmUgY2hhbmdlZCAqLwotCXJwY19mb3JjZV9yZWJpbmQoY2xudCk7Ci0KIAlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVOT1RDT05OOgotCWNhc2UgLUVBR0FJTjoKLQkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9iaW5kOwotCQlpZiAoIVJQQ19JU19TT0ZUKHRhc2spKQotCQkJcmV0dXJuOwogCQkvKiBpZiBzb2Z0IG1vdW50ZWQsIHRlc3QgaWYgd2UndmUgdGltZWQgb3V0ICovCiAJY2FzZSAtRVRJTUVET1VUOgogCQl0YXNrLT50a19hY3Rpb24gPSBjYWxsX3RpbWVvdXQ7Ci0JCXJldHVybjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnBjX2V4aXQodGFzaywgLUVJTyk7CiAJfQotCXJwY19leGl0KHRhc2ssIC1FSU8pOwogfQogCiAvKgpAQCAtMTEwNSwxNCArMTA5OCwyNiBAQAogY2FsbF90cmFuc21pdF9zdGF0dXMoc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfc3RhdHVzOwotCS8qCi0JICogU3BlY2lhbCBjYXNlOiBpZiB3ZSd2ZSBiZWVuIHdhaXRpbmcgb24gdGhlIHNvY2tldCdzIHdyaXRlX3NwYWNlKCkKLQkgKiBjYWxsYmFjaywgdGhlbiBkb24ndCBjYWxsIHhwcnRfZW5kX3RyYW5zbWl0KCkuCi0JICovCi0JaWYgKHRhc2stPnRrX3N0YXR1cyA9PSAtRUFHQUlOKQotCQlyZXR1cm47Ci0JeHBydF9lbmRfdHJhbnNtaXQodGFzayk7Ci0JcnBjX3Rhc2tfZm9yY2VfcmVlbmNvZGUodGFzayk7CisJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKKwljYXNlIC1FQUdBSU46CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXhwcnRfZW5kX3RyYW5zbWl0KHRhc2spOworCQkvKgorCQkgKiBTcGVjaWFsIGNhc2VzOiBpZiB3ZSd2ZSBiZWVuIHdhaXRpbmcgb24gdGhlCisJCSAqIHNvY2tldCdzIHdyaXRlX3NwYWNlKCkgY2FsbGJhY2ssIG9yIGlmIHRoZQorCQkgKiBzb2NrZXQganVzdCByZXR1cm5lZCBhIGNvbm5lY3Rpb24gZXJyb3IsCisJCSAqIHRoZW4gaG9sZCBvbnRvIHRoZSB0cmFuc3BvcnQgbG9jay4KKwkJICovCisJY2FzZSAtRUNPTk5SRUZVU0VEOgorCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PVENPTk46CisJY2FzZSAtRUhPU1RET1dOOgorCWNhc2UgLUVIT1NUVU5SRUFDSDoKKwljYXNlIC1FTkVUVU5SRUFDSDoKKwljYXNlIC1FUElQRToKKwkJcnBjX3Rhc2tfZm9yY2VfcmVlbmNvZGUodGFzayk7CisJfQogfQogCiAvKgpAQCAtMTE1Miw5ICsxMTU3LDEyIEBACiAJCQl4cHJ0X2NvbmRpdGlvbmFsX2Rpc2Nvbm5lY3QodGFzay0+dGtfeHBydCwKIAkJCQkJcmVxLT5ycV9jb25uZWN0X2Nvb2tpZSk7CiAJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRUNPTk5SRUZVU0VEOgotCWNhc2UgLUVOT1RDT05OOgogCQlycGNfZm9yY2VfcmViaW5kKGNsbnQpOworCQlycGNfZGVsYXkodGFzaywgMypIWik7CisJY2FzZSAtRVBJUEU6CisJY2FzZSAtRU5PVENPTk46CiAJCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKIAkJYnJlYWs7CiAJY2FzZSAtRUFHQUlOOgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMDNhZTAwNy4uYmVlZTZkYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC02Myw5ICs2MywxNiBAQAogICogcl9vd25lcgogICoKICAqIFRoZSAib3duZXIiIGlzIGFsbG93ZWQgdG8gdW5zZXQgYSBzZXJ2aWNlIGluIHRoZSBycGNiaW5kIGRhdGFiYXNlLgotICogV2UgYWx3YXlzIHVzZSB0aGUgZm9sbG93aW5nIChhcmJpdHJhcnkpIGZpeGVkIHN0cmluZy4KKyAqCisgKiBGb3IgQUZfTE9DQUwgU0VUL1VOU0VUIHJlcXVlc3RzLCBycGNiaW5kIHRyZWF0cyB0aGlzIHN0cmluZyBhcyBhCisgKiBVSUQgd2hpY2ggaXQgbWFwcyB0byBhIGxvY2FsIHVzZXIgbmFtZSB2aWEgYSBwYXNzd29yZCBsb29rdXAuCisgKiBJbiBhbGwgb3RoZXIgY2FzZXMgaXQgaXMgaWdub3JlZC4KKyAqCisgKiBGb3IgU0VUL1VOU0VUIHJlcXVlc3RzLCB1c2VyIHNwYWNlIHByb3ZpZGVzIGEgdmFsdWUsIGV2ZW4gZm9yCisgKiBuZXR3b3JrIHJlcXVlc3RzLCBhbmQgR0VUQUREUiB1c2VzIGFuIGVtcHR5IHN0cmluZy4gIFdlIGZvbGxvdworICogdGhvc2UgcHJlY2VkZW50cyBoZXJlLgogICovCi0jZGVmaW5lIFJQQ0JfT1dORVJfU1RSSU5HCSJycGNiIgorI2RlZmluZSBSUENCX09XTkVSX1NUUklORwkiMCIKICNkZWZpbmUgUlBDQl9NQVhPV05FUkxFTglzaXplb2YoUlBDQl9PV05FUl9TVFJJTkcpCiAKIHN0YXRpYyB2b2lkCQkJcnBjYl9nZXRwb3J0X2RvbmUoc3RydWN0IHJwY190YXNrICosIHZvaWQgKik7CkBAIC0xMjQsMTIgKzEzMSw2IEBACiAJLnNpbl9wb3J0CQk9IGh0b25zKFJQQ0JJTkRfUE9SVCksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiBycGNiX2luNmFkZHJfbG9vcGJhY2sgPSB7Ci0JLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAotCS5zaW42X2FkZHIJCT0gSU42QUREUl9MT09QQkFDS19JTklULAotCS5zaW42X3BvcnQJCT0gaHRvbnMoUlBDQklORF9QT1JUKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBzb2NrYWRkciAqYWRkciwKIAkJCQkJICBzaXplX3QgYWRkcmxlbiwgdTMyIHZlcnNpb24pCiB7CkBAIC0xNzYsOSArMTc3LDEwIEBACiAJcmV0dXJuIHJwY19jcmVhdGUoJmFyZ3MpOwogfQogCi1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNpemVfdCBhZGRybGVuLAotCQkJICAgICAgdTMyIHZlcnNpb24sIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQorc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoY29uc3QgdTMyIHZlcnNpb24sIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQogeworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcnBjYl9pbmFkZHJfbG9vcGJhY2s7CisJc2l6ZV90IGFkZHJsZW4gPSBzaXplb2YocnBjYl9pbmFkZHJfbG9vcGJhY2spOwogCXN0cnVjdCBycGNfY2xudCAqcnBjYl9jbG50OwogCWludCByZXN1bHQsIGVycm9yID0gMDsKIApAQCAtMTkyLDcgKzE5NCw3IEBACiAJCWVycm9yID0gUFRSX0VSUihycGNiX2NsbnQpOwogCiAJaWYgKGVycm9yIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSUEM6IGZhaWxlZCB0byBjb250YWN0IGxvY2FsIHJwY2JpbmQgIgorCQlkcHJpbnRrKCJSUEM6ICAgICAgIGZhaWxlZCB0byBjb250YWN0IGxvY2FsIHJwY2JpbmQgIgogCQkJCSJzZXJ2ZXIgKGVycm5vICVkKS5cbiIsIC1lcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yNTQsMjUgKzI1NiwyMyBAQAogCWlmIChwb3J0KQogCQltc2cucnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzMltSUENCUFJPQ19TRVRdOwogCi0JcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbCgoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW5hZGRyX2xvb3BiYWNrLAotCQkJCQlzaXplb2YocnBjYl9pbmFkZHJfbG9vcGJhY2spLAotCQkJCQlSUENCVkVSU18yLCAmbXNnKTsKKwlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzIsICZtc2cpOwogfQogCiAvKgogICogRmlsbCBpbiBBRl9JTkVUIGZhbWlseS1zcGVjaWZpYyBhcmd1bWVudHMgdG8gcmVnaXN0ZXIKICAqLwotc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX25ldGlkNChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHJlc3NfdG9fcmVnaXN0ZXIsCi0JCQkJc3RydWN0IHJwY19tZXNzYWdlICptc2cpCitzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkgICAgICAgc3RydWN0IHJwY19tZXNzYWdlICptc2cpCiB7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2FwOwogCXN0cnVjdCBycGNiaW5kX2FyZ3MgKm1hcCA9IG1zZy0+cnBjX2FyZ3A7Ci0JdW5zaWduZWQgc2hvcnQgcG9ydCA9IG50b2hzKGFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbl9wb3J0KTsKKwl1bnNpZ25lZCBzaG9ydCBwb3J0ID0gbnRvaHMoc2luLT5zaW5fcG9ydCk7CiAJY2hhciBidWZbMzJdOwogCiAJLyogQ29uc3RydWN0IEFGX0lORVQgdW5pdmVyc2FsIGFkZHJlc3MgKi8KIAlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNC4ldS4ldSIsCi0JCSAmYWRkcmVzc190b19yZWdpc3Rlci0+c2luX2FkZHIuc19hZGRyLAotCQkgcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CisJCSAmc2luLT5zaW5fYWRkci5zX2FkZHIsIHBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpOwogCW1hcC0+cl9hZGRyID0gYnVmOwogCiAJZHByaW50aygiUlBDOiAgICAgICAlc3JlZ2lzdGVyaW5nIFsldSwgJXUsICVzLCAnJXMnXSB3aXRoICIKQEAgLTI4NCwyOSArMjg0LDI3IEBACiAJaWYgKHBvcnQpCiAJCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19TRVRdOwogCi0JcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbCgoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW5hZGRyX2xvb3BiYWNrLAotCQkJCQlzaXplb2YocnBjYl9pbmFkZHJfbG9vcGJhY2spLAotCQkJCQlSUENCVkVSU180LCBtc2cpOworCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoUlBDQlZFUlNfNCwgbXNnKTsKIH0KIAogLyoKICAqIEZpbGwgaW4gQUZfSU5FVDYgZmFtaWx5LXNwZWNpZmljIGFyZ3VtZW50cyB0byByZWdpc3RlcgogICovCi1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfbmV0aWQ2KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHJlc3NfdG9fcmVnaXN0ZXIsCi0JCQkJc3RydWN0IHJwY19tZXNzYWdlICptc2cpCitzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCisJCQkgICAgICAgc3RydWN0IHJwY19tZXNzYWdlICptc2cpCiB7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FwOwogCXN0cnVjdCBycGNiaW5kX2FyZ3MgKm1hcCA9IG1zZy0+cnBjX2FyZ3A7Ci0JdW5zaWduZWQgc2hvcnQgcG9ydCA9IG50b2hzKGFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbjZfcG9ydCk7CisJdW5zaWduZWQgc2hvcnQgcG9ydCA9IG50b2hzKHNpbjYtPnNpbjZfcG9ydCk7CiAJY2hhciBidWZbNjRdOwogCiAJLyogQ29uc3RydWN0IEFGX0lORVQ2IHVuaXZlcnNhbCBhZGRyZXNzICovCi0JaWYgKGlwdjZfYWRkcl9hbnkoJmFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbjZfYWRkcikpCisJaWYgKGlwdjZfYWRkcl9hbnkoJnNpbjYtPnNpbjZfYWRkcikpCiAJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI6Oi4ldS4ldSIsCiAJCQkJcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CiAJZWxzZQogCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXBJNi4ldS4ldSIsCi0JCQkgJmFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbjZfYWRkciwKLQkJCSBwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKKwkJCSAmc2luNi0+c2luNl9hZGRyLCBwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKIAltYXAtPnJfYWRkciA9IGJ1ZjsKIAogCWRwcmludGsoIlJQQzogICAgICAgJXNyZWdpc3RlcmluZyBbJXUsICV1LCAlcywgJyVzJ10gd2l0aCAiCkBAIC0zMTgsOSArMzE2LDIxIEBACiAJaWYgKHBvcnQpCiAJCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19TRVRdOwogCi0JcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbCgoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW42YWRkcl9sb29wYmFjaywKLQkJCQkJc2l6ZW9mKHJwY2JfaW42YWRkcl9sb29wYmFjayksCi0JCQkJCVJQQ0JWRVJTXzQsIG1zZyk7CisJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChSUENCVkVSU180LCBtc2cpOworfQorCitzdGF0aWMgaW50IHJwY2JfdW5yZWdpc3Rlcl9hbGxfcHJvdG9mYW1pbGllcyhzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKK3sKKwlzdHJ1Y3QgcnBjYmluZF9hcmdzICptYXAgPSBtc2ctPnJwY19hcmdwOworCisJZHByaW50aygiUlBDOiAgICAgICB1bnJlZ2lzdGVyaW5nIFsldSwgJXUsICclcyddIHdpdGggIgorCQkibG9jYWwgcnBjYmluZFxuIiwKKwkJCW1hcC0+cl9wcm9nLCBtYXAtPnJfdmVycywgbWFwLT5yX25ldGlkKTsKKworCW1hcC0+cl9hZGRyID0gIiI7CisJbXNnLT5ycGNfcHJvYyA9ICZycGNiX3Byb2NlZHVyZXM0W1JQQ0JQUk9DX1VOU0VUXTsKKworCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoUlBDQlZFUlNfNCwgbXNnKTsKIH0KIAogLyoqCkBAIC0zNDAsMTAgKzM1MCwxMSBAQAogICogaW52b2tlIHRoaXMgZnVuY3Rpb24gb25jZSBmb3IgZWFjaCBbcHJvZ3JhbSwgdmVyc2lvbiwgYWRkcmVzcywKICAqIG5ldGlkXSB0dXBsZSB0aGV5IHdpc2ggdG8gYWR2ZXJ0aXNlLgogICoKLSAqIENhbGxlcnMgbWF5IGFsc28gdW5yZWdpc3RlciBSUEMgc2VydmljZXMgdGhhdCBhcmUgbm8gbG9uZ2VyCi0gKiBhdmFpbGFibGUgYnkgc2V0dGluZyB0aGUgcG9ydCBudW1iZXIgaW4gdGhlIHBhc3NlZC1pbiBhZGRyZXNzCi0gKiB0byB6ZXJvLiAgQ2FsbGVycyBwYXNzIGEgbmV0aWQgb2YgIiIgdG8gdW5yZWdpc3RlciBhbGwKLSAqIHRyYW5zcG9ydCBuZXRpZHMgYXNzb2NpYXRlZCB3aXRoIFtwcm9ncmFtLCB2ZXJzaW9uLCBhZGRyZXNzXS4KKyAqIENhbGxlcnMgbWF5IGFsc28gdW5yZWdpc3RlciBSUEMgc2VydmljZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZCBhdCBhCisgKiBzcGVjaWZpYyBhZGRyZXNzIGJ5IHNldHRpbmcgdGhlIHBvcnQgbnVtYmVyIGluIEBhZGRyZXNzIHRvIHplcm8uCisgKiBUaGV5IG1heSB1bnJlZ2lzdGVyIGFsbCByZWdpc3RlcmVkIHByb3RvY29sIGZhbWlsaWVzIGF0IG9uY2UgZm9yCisgKiBhIHNlcnZpY2UgYnkgcGFzc2luZyBhIE5VTEwgQGFkZHJlc3MgYXJndW1lbnQuICBJZiBAbmV0aWQgaXMgIiIKKyAqIHRoZW4gYWxsIG5ldGlkcyBmb3IgW3Byb2dyYW0sIHZlcnNpb24sIGFkZHJlc3NdIGFyZSB1bnJlZ2lzdGVyZWQuCiAgKgogICogVGhpcyBmdW5jdGlvbiB1c2VzIHJwY2JpbmQgcHJvdG9jb2wgdmVyc2lvbiA0IHRvIGNvbnRhY3QgdGhlCiAgKiBsb2NhbCBycGNiaW5kIGRhZW1vbi4gIFRoZSBsb2NhbCBycGNiaW5kIGRhZW1vbiBtdXN0IHN1cHBvcnQKQEAgLTM3OCwxMyArMzg5LDE0IEBACiAJCS5ycGNfYXJncAk9ICZtYXAsCiAJfTsKIAorCWlmIChhZGRyZXNzID09IE5VTEwpCisJCXJldHVybiBycGNiX3VucmVnaXN0ZXJfYWxsX3Byb3RvZmFtaWxpZXMoJm1zZyk7CisKIAlzd2l0Y2ggKGFkZHJlc3MtPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfbmV0aWQ0KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyZXNzLAotCQkJCQkgICAgJm1zZyk7CisJCXJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ0KGFkZHJlc3MsICZtc2cpOwogCWNhc2UgQUZfSU5FVDY6Ci0JCXJldHVybiBycGNiX3JlZ2lzdGVyX25ldGlkNigoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHJlc3MsCi0JCQkJCSAgICAmbXNnKTsKKwkJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfaW5ldDYoYWRkcmVzcywgJm1zZyk7CiAJfQogCiAJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CkBAIC01NzksNyArNTkxLDcgQEAKIAltYXAtPnJfeHBydCA9IHhwcnRfZ2V0KHhwcnQpOwogCW1hcC0+cl9uZXRpZCA9IHJwY19wZWVyYWRkcjJzdHIoY2xudCwgUlBDX0RJU1BMQVlfTkVUSUQpOwogCW1hcC0+cl9hZGRyID0gcnBjX3BlZXJhZGRyMnN0cihycGNiX2NsbnQsIFJQQ19ESVNQTEFZX1VOSVZFUlNBTF9BRERSKTsKLQltYXAtPnJfb3duZXIgPSBSUENCX09XTkVSX1NUUklORzsJLyogaWdub3JlZCBmb3IgR0VUQUREUiAqLworCW1hcC0+cl9vd25lciA9ICIiOwogCW1hcC0+cl9zdGF0dXMgPSAtRUlPOwogCiAJY2hpbGQgPSBycGNiX2NhbGxfYXN5bmMocnBjYl9jbG50LCBtYXAsIHByb2MpOwpAQCAtNzAzLDExICs3MTUsMTYgQEAKIAkqcG9ydHAgPSAwOwogCWFkZHJfbGVuID0gbnRvaGwoKnArKyk7CiAKKwlpZiAoYWRkcl9sZW4gPT0gMCkgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgIHJwY2JfZGVjb2RlX2dldGFkZHI6ICIKKwkJCQkJInNlcnZpY2UgaXMgbm90IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgotCSAqIFNpbXBsZSBzYW5pdHkgY2hlY2suICBUaGUgc21hbGxlc3QgcG9zc2libGUgdW5pdmVyc2FsCi0JICogYWRkcmVzcyBpcyBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nIGNvbnRhaW5pbmcgMTEgYnl0ZXMuCisJICogU2ltcGxlIHNhbml0eSBjaGVjay4KIAkgKi8KLQlpZiAoYWRkcl9sZW4gPCAxMSB8fCBhZGRyX2xlbiA+IFJQQ0JJTkRfTUFYVUFERFJMRU4pCisJaWYgKGFkZHJfbGVuID4gUlBDQklORF9NQVhVQUREUkxFTikKIAkJZ290byBvdXRfZXJyOwogCiAJLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMuYyBiL25ldC9zdW5ycGMvc3RhdHMuYwppbmRleCAwODUzNzJlLi4xZWY2ZTQ2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N0YXRzLmMKKysrIGIvbmV0L3N1bnJwYy9zdGF0cy5jCkBAIC0yNjIsMTQgKzI2Miw4IEBACiBycGNfcHJvY19pbml0KHZvaWQpCiB7CiAJZHByaW50aygiUlBDOiAgICAgICByZWdpc3RlcmluZyAvcHJvYy9uZXQvcnBjXG4iKTsKLQlpZiAoIXByb2NfbmV0X3JwYykgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQkJZW50ID0gcHJvY19ta2RpcigicnBjIiwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZiAoZW50KSB7Ci0JCQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCQlwcm9jX25ldF9ycGMgPSBlbnQ7Ci0JCX0KLQl9CisJaWYgKCFwcm9jX25ldF9ycGMpCisJCXByb2NfbmV0X3JwYyA9IHByb2NfbWtkaXIoInJwYyIsIGluaXRfbmV0LnByb2NfbmV0KTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggYzUxZmVkNC4uOWYyZjI0MSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlzd2l0Y2ggKG0tPm1vZGUpIHsKIAljYXNlIFNWQ19QT09MX1BFUkNQVToKIAl7Ci0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssICZjcHVtYXNrX29mX2NwdShub2RlKSk7CisJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssIGNwdW1hc2tfb2Yobm9kZSkpOwogCQlicmVhazsKIAl9CiAJY2FzZSBTVkNfUE9PTF9QRVJOT0RFOgpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc3ZjX3NlcnYgKgogX19zdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsIGludCBucG9vbHMsCi0JICAgc2FfZmFtaWx5X3QgZmFtaWx5LCB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydikpCisJICAgICB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydikpCiB7CiAJc3RydWN0IHN2Y19zZXJ2CSpzZXJ2OwogCXVuc2lnbmVkIGludCB2ZXJzOwpAQCAtMzY4LDcgKzM2OCw2IEBACiAKIAlpZiAoIShzZXJ2ID0ga3phbGxvYyhzaXplb2YoKnNlcnYpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiBOVUxMOwotCXNlcnYtPnN2X2ZhbWlseSAgICA9IGZhbWlseTsKIAlzZXJ2LT5zdl9uYW1lICAgICAgPSBwcm9nLT5wZ19uYW1lOwogCXNlcnYtPnN2X3Byb2dyYW0gICA9IHByb2c7CiAJc2Vydi0+c3ZfbnJ0aHJlYWRzID0gMTsKQEAgLTQyNywyMSArNDI2LDIxIEBACiAKIHN0cnVjdCBzdmNfc2VydiAqCiBzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsCi0JCXNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQorCSAgIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSkKIHsKLQlyZXR1cm4gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIC8qbnBvb2xzKi8xLCBmYW1pbHksIHNodXRkb3duKTsKKwlyZXR1cm4gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIC8qbnBvb2xzKi8xLCBzaHV0ZG93bik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfY3JlYXRlKTsKIAogc3RydWN0IHN2Y19zZXJ2ICoKIHN2Y19jcmVhdGVfcG9vbGVkKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsCi0JCSAgc2FfZmFtaWx5X3QgZmFtaWx5LCB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydiksCisJCSAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpLAogCQkgIHN2Y190aHJlYWRfZm4gZnVuYywgc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBzdmNfc2VydiAqc2VydjsKIAl1bnNpZ25lZCBpbnQgbnBvb2xzID0gc3ZjX3Bvb2xfbWFwX2dldCgpOwogCi0Jc2VydiA9IF9fc3ZjX2NyZWF0ZShwcm9nLCBidWZzaXplLCBucG9vbHMsIGZhbWlseSwgc2h1dGRvd24pOworCXNlcnYgPSBfX3N2Y19jcmVhdGUocHJvZywgYnVmc2l6ZSwgbnBvb2xzLCBzaHV0ZG93bik7CiAKIAlpZiAoc2VydiAhPSBOVUxMKSB7CiAJCXNlcnYtPnN2X2Z1bmN0aW9uID0gZnVuYzsKQEAgLTcxOSw4ICs3MTgsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2V4aXRfdGhyZWFkKTsKIAotI2lmZGVmIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQKLQogLyoKICAqIFJlZ2lzdGVyIGFuICJpbmV0IiBwcm90b2NvbCBmYW1pbHkgbmV0aWQgd2l0aCB0aGUgbG9jYWwKICAqIHJwY2JpbmQgZGFlbW9uIHZpYSBhbiBycGNiaW5kIHY0IFNFVCByZXF1ZXN0LgpAQCAtNzM1LDEyICs3MzIsMTMgQEAKIAkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKIAkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKIAkJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKIAkJLnNpbl9hZGRyLnNfYWRkcgk9IGh0b25sKElOQUREUl9BTlkpLAogCQkuc2luX3BvcnQJCT0gaHRvbnMocG9ydCksCiAJfTsKLQljaGFyICpuZXRpZDsKKwljb25zdCBjaGFyICpuZXRpZDsKKwlpbnQgZXJyb3I7CiAKIAlzd2l0Y2ggKHByb3RvY29sKSB7CiAJY2FzZSBJUFBST1RPX1VEUDoKQEAgLTc1MCwxMyArNzQ4LDIzIEBACiAJCW5ldGlkID0gUlBDQklORF9ORVRJRF9UQ1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOworCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIAotCXJldHVybiBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sCi0JCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIG5ldGlkKTsKKwllcnJvciA9IHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwKKwkJCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIG5ldGlkKTsKKworCS8qCisJICogVXNlciBzcGFjZSBkaWRuJ3Qgc3VwcG9ydCBycGNiaW5kIHY0LCBzbyByZXRyeSB0aGlzCisJICogcmVnaXN0cmF0aW9uIHJlcXVlc3Qgd2l0aCB0aGUgbGVnYWN5IHJwY2JpbmQgdjIgcHJvdG9jb2wuCisJICovCisJaWYgKGVycm9yID09IC1FUFJPVE9OT1NVUFBPUlQpCisJCWVycm9yID0gcnBjYl9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCk7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIC8qCiAgKiBSZWdpc3RlciBhbiAiaW5ldDYiIHByb3RvY29sIGZhbWlseSBuZXRpZCB3aXRoIHRoZSBsb2NhbAogICogcnBjYmluZCBkYWVtb24gdmlhIGFuIHJwY2JpbmQgdjQgU0VUIHJlcXVlc3QuCkBAIC03NzEsMTIgKzc3OSwxMyBAQAogCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvY29sLAogCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzaW42ID0geworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKIAkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAogCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCiAJCS5zaW42X3BvcnQJCT0gaHRvbnMocG9ydCksCiAJfTsKLQljaGFyICpuZXRpZDsKKwljb25zdCBjaGFyICpuZXRpZDsKKwlpbnQgZXJyb3I7CiAKIAlzd2l0Y2ggKHByb3RvY29sKSB7CiAJY2FzZSBJUFBST1RPX1VEUDoKQEAgLTc4NiwxMiArNzk1LDIyIEBACiAJCW5ldGlkID0gUlBDQklORF9ORVRJRF9UQ1A2OwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiAKLQlyZXR1cm4gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAotCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgbmV0aWQpOworCWVycm9yID0gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAorCQkJCQkoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJnNpbjYsIG5ldGlkKTsKKworCS8qCisJICogVXNlciBzcGFjZSBkaWRuJ3Qgc3VwcG9ydCBycGNiaW5kIHZlcnNpb24gNCwgc28gd2Ugd29uJ3QKKwkgKiB1c2UgYSBQRl9JTkVUNiBsaXN0ZW5lci4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLUVQUk9UT05PU1VQUE9SVCkKKwkJZXJyb3IgPSAtRUFGTk9TVVBQT1JUOworCisJcmV0dXJuIGVycm9yOwogfQorI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSAqLwogCiAvKgogICogUmVnaXN0ZXIgYSBrZXJuZWwgUlBDIHNlcnZpY2UgdmlhIHJwY2JpbmQgdmVyc2lvbiA0LgpAQCAtNzk5LDY5ICs4MTgsNDMgQEAKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkCiAgKiBpZiBhbnkgZXJyb3Igb2NjdXJzLgogICovCi1zdGF0aWMgaW50IF9fc3ZjX3JlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKLQkJCSAgY29uc3Qgc2FfZmFtaWx5X3QgZmFtaWx5LAorc3RhdGljIGludCBfX3N2Y19yZWdpc3Rlcihjb25zdCBjaGFyICpwcm9nbmFtZSwKKwkJCSAgY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAorCQkJICBjb25zdCBpbnQgZmFtaWx5LAogCQkJICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKIAkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVBRk5PU1VQUE9SVDsKIAogCXN3aXRjaCAoZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gX19zdmNfcnBjYl9yZWdpc3RlcjQocHJvZ3JhbSwgdmVyc2lvbiwKKwljYXNlIFBGX0lORVQ6CisJCWVycm9yID0gX19zdmNfcnBjYl9yZWdpc3RlcjQocHJvZ3JhbSwgdmVyc2lvbiwKIAkJCQkJCXByb3RvY29sLCBwb3J0KTsKLQljYXNlIEFGX0lORVQ2OgorCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIFBGX0lORVQ2OgogCQllcnJvciA9IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHByb2dyYW0sIHZlcnNpb24sCiAJCQkJCQlwcm90b2NvbCwgcG9ydCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQkJLyoKLQkJICogV29yayBhcm91bmQgYnVnIGluIHNvbWUgdmVyc2lvbnMgb2YgTGludXggcnBjYmluZAotCQkgKiB3aGljaCBkb24ndCBhbGxvdyByZWdpc3RyYXRpb24gb2YgYm90aCBpbmV0IGFuZAotCQkgKiBpbmV0NiBuZXRpZHMuCi0JCSAqCi0JCSAqIEVycm9yIHJldHVybiBpZ25vcmVkIGZvciBub3cuCi0JCSAqLwotCQlfX3N2Y19ycGNiX3JlZ2lzdGVyNChwcm9ncmFtLCB2ZXJzaW9uLAotCQkJCQkJcHJvdG9jb2wsIHBvcnQpOwotCQlyZXR1cm4gMDsKKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAl9CiAKLQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKwlpZiAoZXJyb3IgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdmM6IGZhaWxlZCB0byByZWdpc3RlciAlc3YldSBSUEMgIgorCQkJInNlcnZpY2UgKGVycm5vICVkKS5cbiIsIHByb2duYW1lLCB2ZXJzaW9uLCAtZXJyb3IpOworCXJldHVybiBlcnJvcjsKIH0KIAotI2Vsc2UJLyogQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLwotCi0vKgotICogUmVnaXN0ZXIgYSBrZXJuZWwgUlBDIHNlcnZpY2UgdmlhIHJwY2JpbmQgdmVyc2lvbiAyLgotICoKLSAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIGlzIHJldHVybmVkCi0gKiBpZiBhbnkgZXJyb3Igb2NjdXJzLgotICovCi1zdGF0aWMgaW50IF9fc3ZjX3JlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKLQkJCSAgc2FfZmFtaWx5X3QgZmFtaWx5LAotCQkJICBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKLQkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKLXsKLQlpZiAoZmFtaWx5ICE9IEFGX0lORVQpCi0JCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCi0JcmV0dXJuIHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLwotCiAvKioKICAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXIKICAqIEBzZXJ2OiBzdmNfc2VydiBzdHJ1Y3QgZm9yIHRoZSBzZXJ2aWNlIHRvIHJlZ2lzdGVyCisgKiBAZmFtaWx5OiBwcm90b2NvbCBmYW1pbHkgb2Ygc2VydmljZSdzIGxpc3RlbmVyIHNvY2tldAogICogQHByb3RvOiB0cmFuc3BvcnQgcHJvdG9jb2wgbnVtYmVyIHRvIGFkdmVydGlzZQogICogQHBvcnQ6IHBvcnQgdG8gYWR2ZXJ0aXNlCiAgKgotICogU2VydmljZSBpcyByZWdpc3RlcmVkIGZvciBhbnkgYWRkcmVzcyBpbiBzZXJ2J3MgYWRkcmVzcyBmYW1pbHkKKyAqIFNlcnZpY2UgaXMgcmVnaXN0ZXJlZCBmb3IgYW55IGFkZHJlc3MgaW4gdGhlIHBhc3NlZC1pbiBwcm90b2NvbCBmYW1pbHkKICAqLwotaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKK2ludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBpbnQgZmFtaWx5LAorCQkgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG8sIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7CiAJc3RydWN0IHN2Y19wcm9ncmFtCSpwcm9ncDsKIAl1bnNpZ25lZCBpbnQJCWk7CkBAIC04NzksMTUgKzg3MiwxNSBAQAogCQkJCQlpLAogCQkJCQlwcm90byA9PSBJUFBST1RPX1VEUD8gICJ1ZHAiIDogInRjcCIsCiAJCQkJCXBvcnQsCi0JCQkJCXNlcnYtPnN2X2ZhbWlseSwKKwkJCQkJZmFtaWx5LAogCQkJCQlwcm9ncC0+cGdfdmVyc1tpXS0+dnNfaGlkZGVuPwogCQkJCQkJIiAoYnV0IG5vdCB0ZWxsaW5nIHBvcnRtYXApIiA6ICIiKTsKIAogCQkJaWYgKHByb2dwLT5wZ192ZXJzW2ldLT52c19oaWRkZW4pCiAJCQkJY29udGludWU7CiAKLQkJCWVycm9yID0gX19zdmNfcmVnaXN0ZXIocHJvZ3AtPnBnX3Byb2csIGksCi0JCQkJCQlzZXJ2LT5zdl9mYW1pbHksIHByb3RvLCBwb3J0KTsKKwkJCWVycm9yID0gX19zdmNfcmVnaXN0ZXIocHJvZ3AtPnBnX25hbWUsIHByb2dwLT5wZ19wcm9nLAorCQkJCQkJaSwgZmFtaWx5LCBwcm90bywgcG9ydCk7CiAJCQlpZiAoZXJyb3IgPCAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC04OTYsMzggKzg4OSwzMSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotI2lmZGVmIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQKLQotc3RhdGljIHZvaWQgX19zdmNfdW5yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCi0JCQkgICAgIGNvbnN0IGNoYXIgKnByb2duYW1lKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKLQkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAotCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCi0JCS5zaW42X3BvcnQJCT0gMCwKLQl9OwotCWludCBlcnJvcjsKLQotCWVycm9yID0gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAotCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgIiIpOwotCWRwcmludGsoInN2YzogJXMoJXN2JXUpLCBlcnJvciAlZFxuIiwKLQkJCV9fZnVuY19fLCBwcm9nbmFtZSwgdmVyc2lvbiwgZXJyb3IpOwotfQotCi0jZWxzZQkvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCi0KKy8qCisgKiBJZiB1c2VyIHNwYWNlIGlzIHJ1bm5pbmcgcnBjYmluZCwgaXQgc2hvdWxkIHRha2UgdGhlIHY0IFVOU0VUCisgKiBhbmQgY2xlYXIgZXZlcnl0aGluZyBmb3IgdGhpcyBbcHJvZ3JhbSwgdmVyc2lvbl0uICBJZiB1c2VyIHNwYWNlCisgKiBpcyBydW5uaW5nIHBvcnRtYXAsIGl0IHdpbGwgcmVqZWN0IHRoZSB2NCBVTlNFVCwgYnV0IHdvbid0IGhhdmUKKyAqIGFueSAiaW5ldDYiIGVudHJpZXMgYW55d2F5LiAgU28gYSBQTUFQX1VOU0VUIHNob3VsZCBiZSBzdWZmaWNpZW50CisgKiBpbiB0aGlzIGNhc2UgdG8gY2xlYXIgYWxsIGV4aXN0aW5nIGVudHJpZXMgZm9yIFtwcm9ncmFtLCB2ZXJzaW9uXS4KKyAqLwogc3RhdGljIHZvaWQgX19zdmNfdW5yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCiAJCQkgICAgIGNvbnN0IGNoYXIgKnByb2duYW1lKQogewogCWludCBlcnJvcjsKIAotCWVycm9yID0gcnBjYl9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLCAwLCAwKTsKKwllcnJvciA9IHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgTlVMTCwgIiIpOworCisJLyoKKwkgKiBVc2VyIHNwYWNlIGRpZG4ndCBzdXBwb3J0IHJwY2JpbmQgdjQsIHNvIHJldHJ5IHRoaXMKKwkgKiByZXF1ZXN0IHdpdGggdGhlIGxlZ2FjeSBycGNiaW5kIHYyIHByb3RvY29sLgorCSAqLworCWlmIChlcnJvciA9PSAtRVBST1RPTk9TVVBQT1JUKQorCQllcnJvciA9IHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgMCwgMCk7CisKIAlkcHJpbnRrKCJzdmM6ICVzKCVzdiV1KSwgZXJyb3IgJWRcbiIsCiAJCQlfX2Z1bmNfXywgcHJvZ25hbWUsIHZlcnNpb24sIGVycm9yKTsKIH0KIAotI2VuZGlmCS8qIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KLQogLyoKICAqIEFsbCBuZXRpZHMsIGJpbmQgYWRkcmVzc2VzIGFuZCBwb3J0cyByZWdpc3RlcmVkIGZvciBbcHJvZ3JhbSwgdmVyc2lvbl0KICAqIGFyZSByZW1vdmVkIGZyb20gdGhlIGxvY2FsIHJwY2JpbmQgZGF0YWJhc2UgKGlmIHRoZSBzZXJ2aWNlIGlzIG5vdApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCmluZGV4IGU1ODhkZjUuLjI4MTllZTAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYworKysgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKQEAgLTE2MSw3ICsxNjEsOSBAQAogCiBzdGF0aWMgc3RydWN0IHN2Y194cHJ0ICpfX3N2Y194cG9fY3JlYXRlKHN0cnVjdCBzdmNfeHBydF9jbGFzcyAqeGNsLAogCQkJCQkgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LAotCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCwgaW50IGZsYWdzKQorCQkJCQkgY29uc3QgaW50IGZhbWlseSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQsCisJCQkJCSBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luIHNpbiA9IHsKIAkJLnNpbl9mYW1pbHkJCT0gQUZfSU5FVCwKQEAgLTE3NiwxMiArMTc4LDEyIEBACiAJc3RydWN0IHNvY2thZGRyICpzYXA7CiAJc2l6ZV90IGxlbjsKIAotCXN3aXRjaCAoc2Vydi0+c3ZfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgorCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBQRl9JTkVUOgogCQlzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKIAkJbGVuID0gc2l6ZW9mKHNpbik7CiAJCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6CisJY2FzZSBQRl9JTkVUNjoKIAkJc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OwogCQlsZW4gPSBzaXplb2Yoc2luNik7CiAJCWJyZWFrOwpAQCAtMTkyLDcgKzE5NCw4IEBACiAJcmV0dXJuIHhjbC0+eGNsX29wcy0+eHBvX2NyZWF0ZShzZXJ2LCBzYXAsIGxlbiwgZmxhZ3MpOwogfQogCi1pbnQgc3ZjX2NyZWF0ZV94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY2hhciAqeHBydF9uYW1lLCB1bnNpZ25lZCBzaG9ydCBwb3J0LAoraW50IHN2Y19jcmVhdGVfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNvbnN0IGNoYXIgKnhwcnRfbmFtZSwKKwkJICAgIGNvbnN0IGludCBmYW1pbHksIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQsCiAJCSAgICBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHN2Y194cHJ0X2NsYXNzICp4Y2w7CkBAIC0yMDksNyArMjEyLDcgQEAKIAkJCWdvdG8gZXJyOwogCiAJCXNwaW5fdW5sb2NrKCZzdmNfeHBydF9jbGFzc19sb2NrKTsKLQkJbmV3eHBydCA9IF9fc3ZjX3hwb19jcmVhdGUoeGNsLCBzZXJ2LCBwb3J0LCBmbGFncyk7CisJCW5ld3hwcnQgPSBfX3N2Y194cG9fY3JlYXRlKHhjbCwgc2VydiwgZmFtaWx5LCBwb3J0LCBmbGFncyk7CiAJCWlmIChJU19FUlIobmV3eHBydCkpIHsKIAkJCW1vZHVsZV9wdXQoeGNsLT54Y2xfb3duZXIpOwogCQkJcmV0dXJuIFBUUl9FUlIobmV3eHBydCk7CkBAIC0xMDMzLDcgKzEwMzYsMTMgQEAKIAlyZXR1cm4gZHI7CiB9CiAKLS8qCisvKioKKyAqIHN2Y19maW5kX3hwcnQgLSBmaW5kIGFuIFJQQyB0cmFuc3BvcnQgaW5zdGFuY2UKKyAqIEBzZXJ2OiBwb2ludGVyIHRvIHN2Y19zZXJ2IHRvIHNlYXJjaAorICogQHhjbF9uYW1lOiBDIHN0cmluZyBjb250YWluaW5nIHRyYW5zcG9ydCdzIGNsYXNzIG5hbWUKKyAqIEBhZjogQWRkcmVzcyBmYW1pbHkgb2YgdHJhbnNwb3J0J3MgbG9jYWwgYWRkcmVzcworICogQHBvcnQ6IHRyYW5zcG9ydCdzIElQIHBvcnQgbnVtYmVyCisgKgogICogUmV0dXJuIHRoZSB0cmFuc3BvcnQgaW5zdGFuY2UgcG9pbnRlciBmb3IgdGhlIGVuZHBvaW50IGFjY2VwdGluZwogICogY29ubmVjdGlvbnMvcGVlciB0cmFmZmljIGZyb20gdGhlIHNwZWNpZmllZCB0cmFuc3BvcnQgY2xhc3MsCiAgKiBhZGRyZXNzIGZhbWlseSBhbmQgcG9ydC4KQEAgLTEwNDIsMTQgKzEwNTEsMTQgQEAKICAqIHdpbGQtY2FyZCwgYW5kIHdpbGwgcmVzdWx0IGluIG1hdGNoaW5nIHRoZSBmaXJzdCB0cmFuc3BvcnQgaW4gdGhlCiAgKiBzZXJ2aWNlJ3MgbGlzdCB0aGF0IGhhcyBhIG1hdGNoaW5nIGNsYXNzIG5hbWUuCiAgKi8KLXN0cnVjdCBzdmNfeHBydCAqc3ZjX2ZpbmRfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNoYXIgKnhjbF9uYW1lLAotCQkJICAgICAgIGludCBhZiwgaW50IHBvcnQpCitzdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y19maW5kX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBjaGFyICp4Y2xfbmFtZSwKKwkJCSAgICAgICBjb25zdCBzYV9mYW1pbHlfdCBhZiwgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKIAlzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQ7CiAJc3RydWN0IHN2Y194cHJ0ICpmb3VuZCA9IE5VTEw7CiAKIAkvKiBTYW5pdHkgY2hlY2sgdGhlIGFyZ3MgKi8KLQlpZiAoIXNlcnYgfHwgIXhjbF9uYW1lKQorCWlmIChzZXJ2ID09IE5VTEwgfHwgeGNsX25hbWUgPT0gTlVMTCkKIAkJcmV0dXJuIGZvdW5kOwogCiAJc3Bpbl9sb2NrX2JoKCZzZXJ2LT5zdl9sb2NrKTsKQEAgLTEwNTgsNyArMTA2Nyw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGFmICE9IEFGX1VOU1BFQyAmJiBhZiAhPSB4cHJ0LT54cHRfbG9jYWwuc3NfZmFtaWx5KQogCQkJY29udGludWU7Ci0JCWlmIChwb3J0ICYmIHBvcnQgIT0gc3ZjX3hwcnRfbG9jYWxfcG9ydCh4cHJ0KSkKKwkJaWYgKHBvcnQgIT0gMCAmJiBwb3J0ICE9IHN2Y194cHJ0X2xvY2FsX3BvcnQoeHBydCkpCiAJCQljb250aW51ZTsKIAkJZm91bmQgPSB4cHJ0OwogCQlzdmNfeHBydF9nZXQoeHBydCk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDU3NjNlNjQuLjlkNTA0MjMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xMTEwLDcgKzExMTAsNiBAQAogCXN0cnVjdCBzdmNfc29jawkqc3ZzazsKIAlzdHJ1Y3Qgc29jawkqaW5ldDsKIAlpbnQJCXBtYXBfcmVnaXN0ZXIgPSAhKGZsYWdzICYgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKLQlpbnQJCXZhbDsKIAogCWRwcmludGsoInN2Yzogc3ZjX3NldHVwX3NvY2tldCAlcFxuIiwgc29jayk7CiAJaWYgKCEoc3ZzayA9IGt6YWxsb2Moc2l6ZW9mKCpzdnNrKSwgR0ZQX0tFUk5FTCkpKSB7CkBAIC0xMTIyLDcgKzExMjEsNyBAQAogCiAJLyogUmVnaXN0ZXIgc29ja2V0IHdpdGggcG9ydG1hcHBlciAqLwogCWlmICgqZXJycCA+PSAwICYmIHBtYXBfcmVnaXN0ZXIpCi0JCSplcnJwID0gc3ZjX3JlZ2lzdGVyKHNlcnYsIGluZXQtPnNrX3Byb3RvY29sLAorCQkqZXJycCA9IHN2Y19yZWdpc3RlcihzZXJ2LCBpbmV0LT5za19mYW1pbHksIGluZXQtPnNrX3Byb3RvY29sLAogCQkJCSAgICAgbnRvaHMoaW5ldF9zayhpbmV0KS0+c3BvcnQpKTsKIAogCWlmICgqZXJycCA8IDApIHsKQEAgLTExNDMsMTggKzExNDIsNiBAQAogCWVsc2UKIAkJc3ZjX3RjcF9pbml0KHN2c2ssIHNlcnYpOwogCi0JLyoKLQkgKiBXZSBzdGFydCBvbmUgbGlzdGVuZXIgcGVyIHN2X3NlcnYuICBXZSB3YW50IEFGX0lORVQKLQkgKiByZXF1ZXN0cyB0byBiZSBhdXRvbWF0aWNhbGx5IHNodW50ZWQgdG8gb3VyIEFGX0lORVQ2Ci0JICogbGlzdGVuZXIgdXNpbmcgYSBtYXBwZWQgSVB2NCBhZGRyZXNzLiAgTWFrZSBzdXJlCi0JICogbm8tb25lIHN0YXJ0cyBhbiBlcXVpdmFsZW50IElQdjQgbGlzdGVuZXIsIHdoaWNoCi0JICogd291bGQgc3RlYWwgb3VyIGluY29taW5nIGNvbm5lY3Rpb25zLgotCSAqLwotCXZhbCA9IDA7Ci0JaWYgKHNlcnYtPnN2X2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJa2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX0lQVjYsIElQVjZfVjZPTkxZLAotCQkJCQkoY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKLQogCWRwcmludGsoInN2Yzogc3ZjX3NldHVwX3NvY2tldCBjcmVhdGVkICVwIChpbmV0ICVwKVxuIiwKIAkJCQlzdnNrLCBzdnNrLT5za19zayk7CiAKQEAgLTEyMjIsNiArMTIwOSw4IEBACiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKm5ld3NpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjsKIAlpbnQJCW5ld2xlbjsKKwlpbnQJCWZhbWlseTsKKwlpbnQJCXZhbDsKIAlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKIAogCWRwcmludGsoInN2Yzogc3ZjX2NyZWF0ZV9zb2NrZXQoJXMsICVkLCAlcylcbiIsCkBAIC0xMjMzLDE0ICsxMjIyLDM1IEBACiAJCQkJInNvY2tldHMgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQotCXR5cGUgPSAocHJvdG9jb2wgPT0gSVBQUk9UT19VRFApPyBTT0NLX0RHUkFNIDogU09DS19TVFJFQU07CiAKLQllcnJvciA9IHNvY2tfY3JlYXRlX2tlcm4oc2luLT5zYV9mYW1pbHksIHR5cGUsIHByb3RvY29sLCAmc29jayk7CisJdHlwZSA9IChwcm90b2NvbCA9PSBJUFBST1RPX1VEUCk/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTTsKKwlzd2l0Y2ggKHNpbi0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUNjoKKwkJZmFtaWx5ID0gUEZfSU5FVDY7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDoKKwkJZmFtaWx5ID0gUEZfSU5FVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJZXJyb3IgPSBzb2NrX2NyZWF0ZV9rZXJuKGZhbWlseSwgdHlwZSwgcHJvdG9jb2wsICZzb2NrKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKIAlzdmNfcmVjbGFzc2lmeV9zb2NrZXQoc29jayk7CiAKKwkvKgorCSAqIElmIHRoaXMgaXMgYW4gUEZfSU5FVDYgbGlzdGVuZXIsIHdlIHdhbnQgdG8gYXZvaWQKKwkgKiBnZXR0aW5nIHJlcXVlc3RzIGZyb20gSVB2NCByZW1vdGVzLiAgVGhvc2Ugc2hvdWxkCisJICogYmUgc2h1bnRlZCB0byBhIFBGX0lORVQgbGlzdGVuZXIgdmlhIHJwY2JpbmQuCisJICovCisJdmFsID0gMTsKKwlpZiAoZmFtaWx5ID09IFBGX0lORVQ2KQorCQlrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfSVBWNiwgSVBWNl9WNk9OTFksCisJCQkJCShjaGFyICopJnZhbCwgc2l6ZW9mKHZhbCkpOworCiAJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCiAJCXNvY2stPnNrLT5za19yZXVzZSA9IDE7CQkvKiBhbGxvdyBhZGRyZXNzIHJldXNlICovCiAJZXJyb3IgPSBrZXJuZWxfYmluZChzb2NrLCBzaW4sIGxlbik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDYyMDk4ZDEuLmEwYmZlNTMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC0xNTIsNiArMTUyLDM3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh4cHJ0X3VucmVnaXN0ZXJfdHJhbnNwb3J0KTsKIAogLyoqCisgKiB4cHJ0X2xvYWRfdHJhbnNwb3J0IC0gbG9hZCBhIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbgorICogQHRyYW5zcG9ydF9uYW1lOiB0cmFuc3BvcnQgdG8gbG9hZAorICoKKyAqIFJldHVybnM6CisgKiAwOgkJdHJhbnNwb3J0IHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAqIC1FTk9FTlQ6CXRyYW5zcG9ydCBtb2R1bGUgbm90IGF2YWlsYWJsZQorICovCitpbnQgeHBydF9sb2FkX3RyYW5zcG9ydChjb25zdCBjaGFyICp0cmFuc3BvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgeHBydF9jbGFzcyAqdDsKKwljaGFyIG1vZHVsZV9uYW1lW3NpemVvZiB0LT5uYW1lICsgNV07CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IDA7CisJc3Bpbl9sb2NrKCZ4cHJ0X2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmeHBydF9saXN0LCBsaXN0KSB7CisJCWlmIChzdHJjbXAodC0+bmFtZSwgdHJhbnNwb3J0X25hbWUpID09IDApIHsKKwkJCXNwaW5fdW5sb2NrKCZ4cHJ0X2xpc3RfbG9jayk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmeHBydF9saXN0X2xvY2spOworCXN0cmNweShtb2R1bGVfbmFtZSwgInhwcnQiKTsKKwlzdHJuY2F0KG1vZHVsZV9uYW1lLCB0cmFuc3BvcnRfbmFtZSwgc2l6ZW9mIHQtPm5hbWUpOworCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKK291dDoKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoeHBydF9sb2FkX3RyYW5zcG9ydCk7CisKKy8qKgogICogeHBydF9yZXNlcnZlX3hwcnQgLSBzZXJpYWxpemUgd3JpdGUgYWNjZXNzIHRvIHRyYW5zcG9ydHMKICAqIEB0YXNrOiB0YXNrIHRoYXQgaXMgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIHRyYW5zcG9ydAogICoKQEAgLTU4MCw3ICs2MTEsNyBAQAogCWRwcmludGsoIlJQQzogICAgICAgZGlzY29ubmVjdGVkIHRyYW5zcG9ydCAlcFxuIiwgeHBydCk7CiAJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAJeHBydF9jbGVhcl9jb25uZWN0ZWQoeHBydCk7Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVOT1RDT05OKTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRUFHQUlOKTsKIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHBydF9kaXNjb25uZWN0X2RvbmUpOwpAQCAtNTk4LDcgKzYyOSw3IEBACiAJLyogVHJ5IHRvIHNjaGVkdWxlIGFuIGF1dG9jbG9zZSBSUEMgY2FsbCAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFhQUlRfTE9DS0VELCAmeHBydC0+c3RhdGUpID09IDApCiAJCXF1ZXVlX3dvcmsocnBjaW9kX3dvcmtxdWV1ZSwgJnhwcnQtPnRhc2tfY2xlYW51cCk7Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVOT1RDT05OKTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRUFHQUlOKTsKIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQogCkBAIC02MjUsNyArNjU2LDcgQEAKIAkvKiBUcnkgdG8gc2NoZWR1bGUgYW4gYXV0b2Nsb3NlIFJQQyBjYWxsICovCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoWFBSVF9MT0NLRUQsICZ4cHJ0LT5zdGF0ZSkgPT0gMCkKIAkJcXVldWVfd29yayhycGNpb2Rfd29ya3F1ZXVlLCAmeHBydC0+dGFza19jbGVhbnVwKTsKLQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRU5PVENPTk4pOworCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIC1FQUdBSU4pOwogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiB9CkBAIC02OTUsOSArNzI2LDggQEAKIAl9CiAKIAlzd2l0Y2ggKHRhc2stPnRrX3N0YXR1cykgewotCWNhc2UgLUVOT1RDT05OOgotCQlkcHJpbnRrKCJSUEM6ICU1dSB4cHJ0X2Nvbm5lY3Rfc3RhdHVzOiBjb25uZWN0aW9uIGJyb2tlblxuIiwKLQkJCQl0YXNrLT50a19waWQpOworCWNhc2UgLUVBR0FJTjoKKwkJZHByaW50aygiUlBDOiAlNXUgeHBydF9jb25uZWN0X3N0YXR1czogcmV0cnlpbmdcbiIsIHRhc2stPnRrX3BpZCk7CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FRE9VVDoKIAkJZHByaW50aygiUlBDOiAlNXUgeHBydF9jb25uZWN0X3N0YXR1czogY29ubmVjdCBhdHRlbXB0IHRpbWVkICIKQEAgLTgxOCwxNSArODQ4LDggQEAKIAkJZXJyID0gcmVxLT5ycV9yZWNlaXZlZDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAoIXhwcnQtPm9wcy0+cmVzZXJ2ZV94cHJ0KHRhc2spKSB7CisJaWYgKCF4cHJ0LT5vcHMtPnJlc2VydmVfeHBydCh0YXNrKSkKIAkJZXJyID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWlmICgheHBydF9jb25uZWN0ZWQoeHBydCkpIHsKLQkJZXJyID0gLUVOT1RDT05OOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogCXJldHVybiBlcnI7CkBAIC04NzAsMzIgKzg5MywyNiBAQAogCXJlcS0+cnFfY29ubmVjdF9jb29raWUgPSB4cHJ0LT5jb25uZWN0X2Nvb2tpZTsKIAlyZXEtPnJxX3h0aW1lID0gamlmZmllczsKIAlzdGF0dXMgPSB4cHJ0LT5vcHMtPnNlbmRfcmVxdWVzdCh0YXNrKTsKLQlpZiAoc3RhdHVzID09IDApIHsKLQkJZHByaW50aygiUlBDOiAlNXUgeG1pdCBjb21wbGV0ZVxuIiwgdGFzay0+dGtfcGlkKTsKLQkJc3Bpbl9sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7Ci0KLQkJeHBydC0+b3BzLT5zZXRfcmV0cmFuc190aW1lb3V0KHRhc2spOwotCi0JCXhwcnQtPnN0YXQuc2VuZHMrKzsKLQkJeHBydC0+c3RhdC5yZXFfdSArPSB4cHJ0LT5zdGF0LnNlbmRzIC0geHBydC0+c3RhdC5yZWN2czsKLQkJeHBydC0+c3RhdC5ia2xvZ191ICs9IHhwcnQtPmJhY2tsb2cucWxlbjsKLQotCQkvKiBEb24ndCByYWNlIHdpdGggZGlzY29ubmVjdCAqLwotCQlpZiAoIXhwcnRfY29ubmVjdGVkKHhwcnQpKQotCQkJdGFzay0+dGtfc3RhdHVzID0gLUVOT1RDT05OOwotCQllbHNlIGlmICghcmVxLT5ycV9yZWNlaXZlZCkKLQkJCXJwY19zbGVlcF9vbigmeHBydC0+cGVuZGluZywgdGFzaywgeHBydF90aW1lcik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKIAkJcmV0dXJuOwogCX0KIAotCS8qIE5vdGU6IGF0IHRoaXMgcG9pbnQsIHRhc2stPnRrX3NsZWVwaW5nIGhhcyBub3QgeWV0IGJlZW4gc2V0LAotCSAqCSBoZW5jZSB0aGVyZSBpcyBubyBkYW5nZXIgb2YgdGhlIHdha2luZyB1cCB0YXNrIGJlaW5nIHB1dCBvbgotCSAqCSBzY2hlZHEsIGFuZCBiZWluZyBwaWNrZWQgdXAgYnkgYSBwYXJhbGxlbCBydW4gb2YgcnBjaW9kKCkuCi0JICovCi0JdGFzay0+dGtfc3RhdHVzID0gc3RhdHVzOwotCWlmIChzdGF0dXMgPT0gLUVDT05OUkVGVVNFRCkKLQkJcnBjX3NsZWVwX29uKCZ4cHJ0LT5zZW5kaW5nLCB0YXNrLCBOVUxMKTsKKwlkcHJpbnRrKCJSUEM6ICU1dSB4bWl0IGNvbXBsZXRlXG4iLCB0YXNrLT50a19waWQpOworCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOworCisJeHBydC0+b3BzLT5zZXRfcmV0cmFuc190aW1lb3V0KHRhc2spOworCisJeHBydC0+c3RhdC5zZW5kcysrOworCXhwcnQtPnN0YXQucmVxX3UgKz0geHBydC0+c3RhdC5zZW5kcyAtIHhwcnQtPnN0YXQucmVjdnM7CisJeHBydC0+c3RhdC5ia2xvZ191ICs9IHhwcnQtPmJhY2tsb2cucWxlbjsKKworCS8qIERvbid0IHJhY2Ugd2l0aCBkaXNjb25uZWN0ICovCisJaWYgKCF4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSkKKwkJdGFzay0+dGtfc3RhdHVzID0gLUVOT1RDT05OOworCWVsc2UgaWYgKCFyZXEtPnJxX3JlY2VpdmVkKQorCQlycGNfc2xlZXBfb24oJnhwcnQtPnBlbmRpbmcsIHRhc2ssIHhwcnRfdGltZXIpOworCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb194cHJ0X3Jlc2VydmUoc3RydWN0IHJwY190YXNrICp0YXNrKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCmluZGV4IDE0MTA2ZDIuLmU1ZTI4ZDEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKQEAgLTMxMCw2ICszMTAsMTkgQEAKIAkJX19mdW5jX18sIHBhZCwgZGVzdHAsIHJxc3QtPnJxX3NsZW4sIGN1cmxlbik7CiAKIAljb3B5X2xlbiA9IHJxc3QtPnJxX3NuZF9idWYucGFnZV9sZW47CisKKwlpZiAocnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9sZW4pIHsKKwkJY3VybGVuID0gcnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9sZW47CisJCWlmIChkZXN0cCArIGNvcHlfbGVuICE9IHJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfYmFzZSkgeworCQkJbWVtbW92ZShkZXN0cCArIGNvcHlfbGVuLAorCQkJCXJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfYmFzZSwgY3VybGVuKTsKKwkJCXJfeHBydC0+cnhfc3RhdHMucHVsbHVwX2NvcHlfY291bnQgKz0gY3VybGVuOworCQl9CisJCWRwcmludGsoIlJQQzogICAgICAgJXM6IHRhaWwgZGVzdHAgMHglcCBsZW4gJWRcbiIsCisJCQlfX2Z1bmNfXywgZGVzdHAgKyBjb3B5X2xlbiwgY3VybGVuKTsKKwkJcnFzdC0+cnFfc3ZlY1swXS5pb3ZfbGVuICs9IGN1cmxlbjsKKwl9CisKIAlyX3hwcnQtPnJ4X3N0YXRzLnB1bGx1cF9jb3B5X2NvdW50ICs9IGNvcHlfbGVuOwogCW5wYWdlcyA9IFBBR0VfQUxJR04ocnFzdC0+cnFfc25kX2J1Zi5wYWdlX2Jhc2UrY29weV9sZW4pID4+IFBBR0VfU0hJRlQ7CiAJZm9yIChpID0gMDsgY29weV9sZW4gJiYgaSA8IG5wYWdlczsgaSsrKSB7CkBAIC0zMzIsMTcgKzM0NSw2IEBACiAJCWRlc3RwICs9IGN1cmxlbjsKIAkJY29weV9sZW4gLT0gY3VybGVuOwogCX0KLQlpZiAocnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9sZW4pIHsKLQkJY3VybGVuID0gcnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9sZW47Ci0JCWlmIChkZXN0cCAhPSBycXN0LT5ycV9zbmRfYnVmLnRhaWxbMF0uaW92X2Jhc2UpIHsKLQkJCW1lbWNweShkZXN0cCwKLQkJCQlycXN0LT5ycV9zbmRfYnVmLnRhaWxbMF0uaW92X2Jhc2UsIGN1cmxlbik7Ci0JCQlyX3hwcnQtPnJ4X3N0YXRzLnB1bGx1cF9jb3B5X2NvdW50ICs9IGN1cmxlbjsKLQkJfQotCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiB0YWlsIGRlc3RwIDB4JXAgbGVuICVkIGN1cmxlbiAlZFxuIiwKLQkJCV9fZnVuY19fLCBkZXN0cCwgY29weV9sZW4sIGN1cmxlbik7Ci0JCXJxc3QtPnJxX3N2ZWNbMF0uaW92X2xlbiArPSBjdXJsZW47Ci0JfQogCS8qIGhlYWRlciBub3cgY29udGFpbnMgZW50aXJlIHNlbmQgbWVzc2FnZSAqLwogCXJldHVybiBwYWQ7CiB9CkBAIC02NTYsNyArNjU4LDcgQEAKIAkJaWYgKGN1cmxlbiA+IHJxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfbGVuKQogCQkJY3VybGVuID0gcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW47CiAJCWlmIChycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2Jhc2UgIT0gc3JjcCkKLQkJCW1lbWNweShycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2Jhc2UsIHNyY3AsIGN1cmxlbik7CisJCQltZW1tb3ZlKHJxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfYmFzZSwgc3JjcCwgY3VybGVuKTsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogdGFpbCBzcmNwIDB4JXAgbGVuICVkIGN1cmxlbiAlZFxuIiwKIAkJCV9fZnVuY19fLCBzcmNwLCBjb3B5X2xlbiwgY3VybGVuKTsKIAkJcnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9sZW4gPSBjdXJsZW47CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYwppbmRleCBhMzMzNGUzLi42YzI2YTY3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCisrKyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKQEAgLTE5MSw3ICsxOTEsNiBAQAogCQkgICBzdHJ1Y3QgeGRyX2J1ZiAqeGRyLAogCQkgICBzdHJ1Y3Qgc3ZjX3JkbWFfcmVxX21hcCAqdmVjKQogewotCWludCBzZ2VfbWF4ID0gKHhkci0+bGVuK1BBR0VfU0laRS0xKSAvIFBBR0VfU0laRSArIDM7CiAJaW50IHNnZV9ubzsKIAl1MzIgc2dlX2J5dGVzOwogCXUzMiBwYWdlX2J5dGVzOwpAQCAtMjM1LDcgKzIzNCwxMSBAQAogCQlzZ2Vfbm8rKzsKIAl9CiAKLQlCVUdfT04oc2dlX25vID4gc2dlX21heCk7CisJZHByaW50aygic3ZjcmRtYTogbWFwX3hkcjogc2dlX25vICVkIHBhZ2Vfbm8gJWQgIgorCQkicGFnZV9iYXNlICV1IHBhZ2VfbGVuICV1IGhlYWRfbGVuICV6dSB0YWlsX2xlbiAlenVcbiIsCisJCXNnZV9ubywgcGFnZV9ubywgeGRyLT5wYWdlX2Jhc2UsIHhkci0+cGFnZV9sZW4sCisJCXhkci0+aGVhZFswXS5pb3ZfbGVuLCB4ZHItPnRhaWxbMF0uaW92X2xlbik7CisKIAl2ZWMtPmNvdW50ID0gc2dlX25vOwogCXJldHVybiAwOwogfQpAQCAtNTc5LDcgKzU4Miw2IEBACiAJCQljdHh0LT5zZ2VbcGFnZV9ubysxXS5sZW5ndGggPSAwOwogCX0KIAlCVUdfT04oc2dlX25vID4gcmRtYS0+c2NfbWF4X3NnZSk7Ci0JQlVHX09OKHNnZV9ubyA+IGN0eHQtPmNvdW50KTsKIAltZW1zZXQoJnNlbmRfd3IsIDAsIHNpemVvZiBzZW5kX3dyKTsKIAljdHh0LT53cl9vcCA9IElCX1dSX1NFTkQ7CiAJc2VuZF93ci53cl9pZCA9ICh1bnNpZ25lZCBsb25nKWN0eHQ7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggNTY4MzMwZS4uZDQwZmY1MCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtNDksNiArNDksOSBAQAogdW5zaWduZWQgaW50IHhwcnRfbWluX3Jlc3Zwb3J0ID0gUlBDX0RFRl9NSU5fUkVTVlBPUlQ7CiB1bnNpZ25lZCBpbnQgeHBydF9tYXhfcmVzdnBvcnQgPSBSUENfREVGX01BWF9SRVNWUE9SVDsKIAorI2RlZmluZSBYU19UQ1BfTElOR0VSX1RPCSgxNVUgKiBIWikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHNfdGNwX2Zpbl90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSBYU19UQ1BfTElOR0VSX1RPOworCiAvKgogICogV2UgY2FuIHJlZ2lzdGVyIG91ciBvd24gZmlsZXMgdW5kZXIgL3Byb2Mvc3lzL3N1bnJwYyBieQogICogY2FsbGluZyByZWdpc3Rlcl9zeXNjdGxfdGFibGUoKSBhZ2Fpbi4gIFRoZSBmaWxlcyBpbiB0aGF0CkBAIC0xMTcsNiArMTIwLDE0IEBACiAJCS5leHRyYTIJCT0gJnhwcnRfbWF4X3Jlc3Zwb3J0X2xpbWl0CiAJfSwKIAl7CisJCS5wcm9jbmFtZQk9ICJ0Y3BfZmluX3RpbWVvdXQiLAorCQkuZGF0YQkJPSAmeHNfdGNwX2Zpbl90aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZih4c190Y3BfZmluX3RpbWVvdXQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwkJLnN0cmF0ZWd5CT0gc3lzY3RsX2ppZmZpZXMKKwl9LAorCXsKIAkJLmN0bF9uYW1lID0gMCwKIAl9LAogfTsKQEAgLTUyMSwxMSArNTMyLDEyIEBACiAgKiBAdGFzazogdGFzayB0byBwdXQgdG8gc2xlZXAKICAqCiAgKi8KLXN0YXRpYyB2b2lkIHhzX25vc3BhY2Uoc3RydWN0IHJwY190YXNrICp0YXNrKQorc3RhdGljIGludCB4c19ub3NwYWNlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jxc3RwOwogCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IHJlcS0+cnFfeHBydDsKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CisJaW50IHJldCA9IDA7CiAKIAlkcHJpbnRrKCJSUEM6ICU1dSB4bWl0IGluY29tcGxldGUgKCV1IGxlZnQgb2YgJXUpXG4iLAogCQkJdGFzay0+dGtfcGlkLCByZXEtPnJxX3NsZW4gLSByZXEtPnJxX2J5dGVzX3NlbnQsCkBAIC01MzcsNiArNTQ5LDcgQEAKIAkvKiBEb24ndCByYWNlIHdpdGggZGlzY29ubmVjdCAqLwogCWlmICh4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSkgewogCQlpZiAodGVzdF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncykpIHsKKwkJCXJldCA9IC1FQUdBSU47CiAJCQkvKgogCQkJICogTm90aWZ5IFRDUCB0aGF0IHdlJ3JlIGxpbWl0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uCiAJCQkgKiB3aW5kb3cgc2l6ZQpAQCAtNTQ4LDEwICs1NjEsMTEgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKLQkJdGFzay0+dGtfc3RhdHVzID0gLUVOT1RDT05OOworCQlyZXQgPSAtRU5PVENPTk47CiAJfQogCiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTU5NCw2ICs2MDgsOCBAQAogCQkvKiBTdGlsbCBzb21lIGJ5dGVzIGxlZnQ7IHNldCB1cCBmb3IgYSByZXRyeSBsYXRlci4gKi8KIAkJc3RhdHVzID0gLUVBR0FJTjsKIAl9CisJaWYgKCF0cmFuc3BvcnQtPnNvY2spCisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIC1FTk9UU09DSzoKQEAgLTYwMSwyMSArNjE3LDE5IEBACiAJCS8qIFNob3VsZCB3ZSBjYWxsIHhzX2Nsb3NlKCkgaGVyZT8gKi8KIAkJYnJlYWs7CiAJY2FzZSAtRUFHQUlOOgotCQl4c19ub3NwYWNlKHRhc2spOworCQlzdGF0dXMgPSB4c19ub3NwYWNlKHRhc2spOwogCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCJSUEM6ICAgICAgIHNlbmRtc2cgcmV0dXJuZWQgdW5yZWNvZ25pemVkIGVycm9yICVkXG4iLAorCQkJLXN0YXR1cyk7CiAJY2FzZSAtRU5FVFVOUkVBQ0g6CiAJY2FzZSAtRVBJUEU6CiAJY2FzZSAtRUNPTk5SRUZVU0VEOgogCQkvKiBXaGVuIHRoZSBzZXJ2ZXIgaGFzIGRpZWQsIGFuIElDTVAgcG9ydCB1bnJlYWNoYWJsZSBtZXNzYWdlCiAJCSAqIHByb21wdHMgRUNPTk5SRUZVU0VELiAqLwogCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKLQkJZHByaW50aygiUlBDOiAgICAgICBzZW5kbXNnIHJldHVybmVkIHVucmVjb2duaXplZCBlcnJvciAlZFxuIiwKLQkJCS1zdGF0dXMpOwogCX0KLQorb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTY5Nyw2ICs3MTEsOCBAQAogCQlzdGF0dXMgPSAtRUFHQUlOOwogCQlicmVhazsKIAl9CisJaWYgKCF0cmFuc3BvcnQtPnNvY2spCisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIC1FTk9UU09DSzoKQEAgLTcwNCwyMyArNzIwLDE5IEBACiAJCS8qIFNob3VsZCB3ZSBjYWxsIHhzX2Nsb3NlKCkgaGVyZT8gKi8KIAkJYnJlYWs7CiAJY2FzZSAtRUFHQUlOOgotCQl4c19ub3NwYWNlKHRhc2spOwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCQl4c190Y3Bfc2h1dGRvd24oeHBydCk7Ci0JY2FzZSAtRUNPTk5SRUZVU0VEOgotCWNhc2UgLUVOT1RDT05OOgotCWNhc2UgLUVQSVBFOgotCQlzdGF0dXMgPSAtRU5PVENPTk47Ci0JCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKKwkJc3RhdHVzID0geHNfbm9zcGFjZSh0YXNrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHByaW50aygiUlBDOiAgICAgICBzZW5kbXNnIHJldHVybmVkIHVucmVjb2duaXplZCBlcnJvciAlZFxuIiwKIAkJCS1zdGF0dXMpOwotCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FUElQRToKIAkJeHNfdGNwX3NodXRkb3duKHhwcnQpOworCWNhc2UgLUVDT05OUkVGVVNFRDoKKwljYXNlIC1FTk9UQ09OTjoKKwkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOwogCX0KLQorb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTc2NywyMyArNzc5LDEzIEBACiAJc2stPnNrX2Vycm9yX3JlcG9ydCA9IHRyYW5zcG9ydC0+b2xkX2Vycm9yX3JlcG9ydDsKIH0KIAotLyoqCi0gKiB4c19jbG9zZSAtIGNsb3NlIGEgc29ja2V0Ci0gKiBAeHBydDogdHJhbnNwb3J0Ci0gKgotICogVGhpcyBpcyB1c2VkIHdoZW4gYWxsIHJlcXVlc3RzIGFyZSBjb21wbGV0ZTsgaWUsIG5vIERSQyBzdGF0ZSByZW1haW5zCi0gKiBvbiB0aGUgc2VydmVyIHdlIHdhbnQgdG8gc2F2ZS4KLSAqLwotc3RhdGljIHZvaWQgeHNfY2xvc2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQorc3RhdGljIHZvaWQgeHNfcmVzZXRfdHJhbnNwb3J0KHN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCkKIHsKLQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKIAlzdHJ1Y3Qgc29jayAqc2sgPSB0cmFuc3BvcnQtPmluZXQ7CiAKLQlpZiAoIXNrKQotCQlnb3RvIGNsZWFyX2Nsb3NlX3dhaXQ7Ci0KLQlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX2Nsb3NlIHhwcnQgJXBcbiIsIHhwcnQpOworCWlmIChzayA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAl3cml0ZV9sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJdHJhbnNwb3J0LT5pbmV0ID0gTlVMTDsKQEAgLTc5Nyw4ICs3OTksMjUgQEAKIAlzay0+c2tfbm9fY2hlY2sgPSAwOwogCiAJc29ja19yZWxlYXNlKHNvY2spOwotY2xlYXJfY2xvc2Vfd2FpdDoKK30KKworLyoqCisgKiB4c19jbG9zZSAtIGNsb3NlIGEgc29ja2V0CisgKiBAeHBydDogdHJhbnNwb3J0CisgKgorICogVGhpcyBpcyB1c2VkIHdoZW4gYWxsIHJlcXVlc3RzIGFyZSBjb21wbGV0ZTsgaWUsIG5vIERSQyBzdGF0ZSByZW1haW5zCisgKiBvbiB0aGUgc2VydmVyIHdlIHdhbnQgdG8gc2F2ZS4KKyAqLworc3RhdGljIHZvaWQgeHNfY2xvc2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0LCB4cHJ0KTsKKworCWRwcmludGsoIlJQQzogICAgICAgeHNfY2xvc2UgeHBydCAlcFxuIiwgeHBydCk7CisKKwl4c19yZXNldF90cmFuc3BvcnQodHJhbnNwb3J0KTsKKwogCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7CiAJY2xlYXJfYml0KFhQUlRfQ0xPU0VfV0FJVCwgJnhwcnQtPnN0YXRlKTsKIAljbGVhcl9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpOwogCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CkBAIC0xMTI2LDYgKzExNDUsNDcgQEAKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCisvKgorICogRG8gdGhlIGVxdWl2YWxlbnQgb2YgbGluZ2VyL2xpbmdlcjIgaGFuZGxpbmcgZm9yIGRlYWxpbmcgd2l0aAorICogYnJva2VuIHNlcnZlcnMgdGhhdCBkb24ndCBjbG9zZSB0aGUgc29ja2V0IGluIGEgdGltZWx5CisgKiBmYXNoaW9uCisgKi8KK3N0YXRpYyB2b2lkIHhzX3RjcF9zY2hlZHVsZV9saW5nZXJfdGltZW91dChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQ7CisKKwlpZiAoeHBydF90ZXN0X2FuZF9zZXRfY29ubmVjdGluZyh4cHJ0KSkKKwkJcmV0dXJuOworCXNldF9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULCAmeHBydC0+c3RhdGUpOworCXRyYW5zcG9ydCA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0LCB4cHJ0KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocnBjaW9kX3dvcmtxdWV1ZSwgJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIsCisJCQkgICB0aW1lb3V0KTsKK30KKworc3RhdGljIHZvaWQgeHNfdGNwX2NhbmNlbF9saW5nZXJfdGltZW91dChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCit7CisJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0OworCisJdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCisJaWYgKCF0ZXN0X2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSkgfHwKKwkgICAgIWNhbmNlbF9kZWxheWVkX3dvcmsoJnRyYW5zcG9ydC0+Y29ubmVjdF93b3JrZXIpKQorCQlyZXR1cm47CisJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKKwl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7Cit9CisKK3N0YXRpYyB2b2lkIHhzX3NvY2tfbWFya19jbG9zZWQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7CisJY2xlYXJfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCS8qIE1hcmsgdHJhbnNwb3J0IGFzIGNsb3NlZCBhbmQgd2FrZSB1cCBhbGwgcGVuZGluZyB0YXNrcyAqLworCXhwcnRfZGlzY29ubmVjdF9kb25lKHhwcnQpOworfQorCiAvKioKICAqIHhzX3RjcF9zdGF0ZV9jaGFuZ2UgLSBjYWxsYmFjayB0byBoYW5kbGUgVENQIHNvY2tldCBzdGF0ZSBjaGFuZ2VzCiAgKiBAc2s6IHNvY2tldCB3aG9zZSBzdGF0ZSBoYXMgY2hhbmdlZApAQCAtMTE1OCw3ICsxMjE4LDcgQEAKIAkJCXRyYW5zcG9ydC0+dGNwX2ZsYWdzID0KIAkJCQlUQ1BfUkNWX0NPUFlfRlJBR0hEUiB8IFRDUF9SQ1ZfQ09QWV9YSUQ7CiAKLQkJCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIDApOworCQkJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVBR0FJTik7CiAJCX0KIAkJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIAkJYnJlYWs7CkBAIC0xMTcxLDEwICsxMjMxLDEwIEBACiAJCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RFRCwgJnhwcnQtPnN0YXRlKTsKIAkJY2xlYXJfYml0KFhQUlRfQ0xPU0VfV0FJVCwgJnhwcnQtPnN0YXRlKTsKIAkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJeHNfdGNwX3NjaGVkdWxlX2xpbmdlcl90aW1lb3V0KHhwcnQsIHhzX3RjcF9maW5fdGltZW91dCk7CiAJCWJyZWFrOwogCWNhc2UgVENQX0NMT1NFX1dBSVQ6CiAJCS8qIFRoZSBzZXJ2ZXIgaW5pdGlhdGVkIGEgc2h1dGRvd24gb2YgdGhlIHNvY2tldCAqLwotCQlzZXRfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKIAkJeHBydF9mb3JjZV9kaXNjb25uZWN0KHhwcnQpOwogCWNhc2UgVENQX1NZTl9TRU5UOgogCQl4cHJ0LT5jb25uZWN0X2Nvb2tpZSsrOwpAQCAtMTE4Nyw0MCArMTI0NywzNSBAQAogCQkJeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCA9IFhTX1RDUF9JTklUX1JFRVNUX1RPOwogCQlicmVhazsKIAljYXNlIFRDUF9MQVNUX0FDSzoKKwkJc2V0X2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7CisJCXhzX3RjcF9zY2hlZHVsZV9saW5nZXJfdGltZW91dCh4cHJ0LCB4c190Y3BfZmluX3RpbWVvdXQpOwogCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKIAkJY2xlYXJfYml0KFhQUlRfQ09OTkVDVEVELCAmeHBydC0+c3RhdGUpOwogCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCQlicmVhazsKIAljYXNlIFRDUF9DTE9TRToKLQkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7Ci0JCWNsZWFyX2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7Ci0JCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0JCS8qIE1hcmsgdHJhbnNwb3J0IGFzIGNsb3NlZCBhbmQgd2FrZSB1cCBhbGwgcGVuZGluZyB0YXNrcyAqLwotCQl4cHJ0X2Rpc2Nvbm5lY3RfZG9uZSh4cHJ0KTsKKwkJeHNfdGNwX2NhbmNlbF9saW5nZXJfdGltZW91dCh4cHJ0KTsKKwkJeHNfc29ja19tYXJrX2Nsb3NlZCh4cHJ0KTsKIAl9CiAgb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKIC8qKgotICogeHNfdGNwX2Vycm9yX3JlcG9ydCAtIGNhbGxiYWNrIG1haW5seSBmb3IgY2F0Y2hpbmcgUlNUIGV2ZW50cworICogeHNfZXJyb3JfcmVwb3J0IC0gY2FsbGJhY2sgbWFpbmx5IGZvciBjYXRjaGluZyBzb2NrZXQgZXJyb3JzCiAgKiBAc2s6IHNvY2tldAogICovCi1zdGF0aWMgdm9pZCB4c190Y3BfZXJyb3JfcmVwb3J0KHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHhzX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHJwY194cHJ0ICp4cHJ0OwogCiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Ci0JaWYgKHNrLT5za19lcnIgIT0gRUNPTk5SRVNFVCB8fCBzay0+c2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKQotCQlnb3RvIG91dDsKIAlpZiAoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkKIAkJZ290byBvdXQ7CiAJZHByaW50aygiUlBDOiAgICAgICAlcyBjbGllbnQgJXAuLi5cbiIKIAkJCSJSUEM6ICAgICAgIGVycm9yICVkXG4iLAogCQkJX19mdW5jX18sIHhwcnQsIHNrLT5za19lcnIpOwotCi0JeHBydF9mb3JjZV9kaXNjb25uZWN0KHhwcnQpOworCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIC1FQUdBSU4pOwogb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xNDk0LDYgKzE1NDksNyBAQAogCQlzay0+c2tfdXNlcl9kYXRhID0geHBydDsKIAkJc2stPnNrX2RhdGFfcmVhZHkgPSB4c191ZHBfZGF0YV9yZWFkeTsKIAkJc2stPnNrX3dyaXRlX3NwYWNlID0geHNfdWRwX3dyaXRlX3NwYWNlOworCQlzay0+c2tfZXJyb3JfcmVwb3J0ID0geHNfZXJyb3JfcmVwb3J0OwogCQlzay0+c2tfbm9fY2hlY2sgPSBVRFBfQ1NVTV9OT1JDVjsKIAkJc2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwogCkBAIC0xNTI2LDkgKzE1ODIsMTAgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBTdGFydCBieSByZXNldHRpbmcgYW55IGV4aXN0aW5nIHN0YXRlICovCi0JeHNfY2xvc2UoeHBydCk7CisJeHNfcmVzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCk7CiAKLQlpZiAoKGVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKSkgPCAwKSB7CisJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOworCWlmIChlcnIgPCAwKSB7CiAJCWRwcmludGsoIlJQQzogICAgICAgY2FuJ3QgY3JlYXRlIFVEUCB0cmFuc3BvcnQgc29ja2V0ICglZCkuXG4iLCAtZXJyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTU0NSw4ICsxNjAyLDggQEAKIAl4c191ZHBfZmluaXNoX2Nvbm5lY3RpbmcoeHBydCwgc29jayk7CiAJc3RhdHVzID0gMDsKIG91dDoKLQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwogCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwogfQogCiAvKioKQEAgLTE1NjcsOSArMTYyNCwxMCBAQAogCQlnb3RvIG91dDsKIAogCS8qIFN0YXJ0IGJ5IHJlc2V0dGluZyBhbnkgZXhpc3Rpbmcgc3RhdGUgKi8KLQl4c19jbG9zZSh4cHJ0KTsKKwl4c19yZXNldF90cmFuc3BvcnQodHJhbnNwb3J0KTsKIAotCWlmICgoZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKSkgPCAwKSB7CisJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKTsKKwlpZiAoZXJyIDwgMCkgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgIGNhbid0IGNyZWF0ZSBVRFAgdHJhbnNwb3J0IHNvY2tldCAoJWQpLlxuIiwgLWVycik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE1ODYsMTggKzE2NDQsMTcgQEAKIAl4c191ZHBfZmluaXNoX2Nvbm5lY3RpbmcoeHBydCwgc29jayk7CiAJc3RhdHVzID0gMDsKIG91dDoKLQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwogCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwogfQogCiAvKgogICogV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgcG9ydCBudW1iZXIgc28gdGhlIHJlcGx5IGNhY2hlIG9uIHRoZSBzZXJ2ZXIgY2FuCiAgKiBmaW5kIG91ciBjYWNoZWQgUlBDIHJlcGxpZXMgd2hlbiB3ZSBnZXQgYXJvdW5kIHRvIHJlY29ubmVjdGluZy4KICAqLwotc3RhdGljIHZvaWQgeHNfdGNwX3JldXNlX2Nvbm5lY3Rpb24oc3RydWN0IHJwY194cHJ0ICp4cHJ0KQorc3RhdGljIHZvaWQgeHNfYWJvcnRfY29ubmVjdGlvbihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCkKIHsKIAlpbnQgcmVzdWx0OwotCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0LCB4cHJ0KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgYW55OwogCiAJZHByaW50aygiUlBDOiAgICAgICBkaXNjb25uZWN0aW5nIHhwcnQgJXAgdG8gcmV1c2UgcG9ydFxuIiwgeHBydCk7CkBAIC0xNjA5LDExICsxNjY2LDI0IEBACiAJbWVtc2V0KCZhbnksIDAsIHNpemVvZihhbnkpKTsKIAlhbnkuc2FfZmFtaWx5ID0gQUZfVU5TUEVDOwogCXJlc3VsdCA9IGtlcm5lbF9jb25uZWN0KHRyYW5zcG9ydC0+c29jaywgJmFueSwgc2l6ZW9mKGFueSksIDApOwotCWlmIChyZXN1bHQpCisJaWYgKCFyZXN1bHQpCisJCXhzX3NvY2tfbWFya19jbG9zZWQoeHBydCk7CisJZWxzZQogCQlkcHJpbnRrKCJSUEM6ICAgICAgIEFGX1VOU1BFQyBjb25uZWN0IHJldHVybiBjb2RlICVkXG4iLAogCQkJCXJlc3VsdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhzX3RjcF9yZXVzZV9jb25uZWN0aW9uKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0KQoreworCXVuc2lnbmVkIGludCBzdGF0ZSA9IHRyYW5zcG9ydC0+aW5ldC0+c2tfc3RhdGU7CisKKwlpZiAoc3RhdGUgPT0gVENQX0NMT1NFICYmIHRyYW5zcG9ydC0+c29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpCisJCXJldHVybjsKKwlpZiAoKDEgPDwgc3RhdGUpICYgKFRDUEZfRVNUQUJMSVNIRUR8VENQRl9TWU5fU0VOVCkpCisJCXJldHVybjsKKwl4c19hYm9ydF9jb25uZWN0aW9uKHhwcnQsIHRyYW5zcG9ydCk7Cit9CisKIHN0YXRpYyBpbnQgeHNfdGNwX2ZpbmlzaF9jb25uZWN0aW5nKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CkBAIC0xNjI5LDcgKzE2OTksNyBAQAogCQlzay0+c2tfZGF0YV9yZWFkeSA9IHhzX3RjcF9kYXRhX3JlYWR5OwogCQlzay0+c2tfc3RhdGVfY2hhbmdlID0geHNfdGNwX3N0YXRlX2NoYW5nZTsKIAkJc2stPnNrX3dyaXRlX3NwYWNlID0geHNfdGNwX3dyaXRlX3NwYWNlOwotCQlzay0+c2tfZXJyb3JfcmVwb3J0ID0geHNfdGNwX2Vycm9yX3JlcG9ydDsKKwkJc2stPnNrX2Vycm9yX3JlcG9ydCA9IHhzX2Vycm9yX3JlcG9ydDsKIAkJc2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwogCiAJCS8qIHNvY2tldCBvcHRpb25zICovCkBAIC0xNjU3LDYgKzE3MjcsOTcgQEAKIH0KIAogLyoqCisgKiB4c190Y3Bfc2V0dXBfc29ja2V0IC0gY3JlYXRlIGEgVENQIHNvY2tldCBhbmQgY29ubmVjdCB0byBhIHJlbW90ZSBlbmRwb2ludAorICogQHhwcnQ6IFJQQyB0cmFuc3BvcnQgdG8gY29ubmVjdAorICogQHRyYW5zcG9ydDogc29ja2V0IHRyYW5zcG9ydCB0byBjb25uZWN0CisgKiBAY3JlYXRlX3NvY2s6IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHNvY2tldCBvZiB0aGUgY29ycmVjdCB0eXBlCisgKgorICogSW52b2tlZCBieSBhIHdvcmsgcXVldWUgdGFza2xldC4KKyAqLworc3RhdGljIHZvaWQgeHNfdGNwX3NldHVwX3NvY2tldChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCisJCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCwKKwkJc3RydWN0IHNvY2tldCAqKCpjcmVhdGVfc29jaykoc3RydWN0IHJwY194cHJ0ICosCisJCQlzdHJ1Y3Qgc29ja194cHJ0ICopKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CisJaW50IHN0YXR1cyA9IC1FSU87CisKKwlpZiAoeHBydC0+c2h1dGRvd24pCisJCWdvdG8gb3V0OworCisJaWYgKCFzb2NrKSB7CisJCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7CisJCXNvY2sgPSBjcmVhdGVfc29jayh4cHJ0LCB0cmFuc3BvcnQpOworCQlpZiAoSVNfRVJSKHNvY2spKSB7CisJCQlzdGF0dXMgPSBQVFJfRVJSKHNvY2spOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQlpbnQgYWJvcnRfYW5kX2V4aXQ7CisKKwkJYWJvcnRfYW5kX2V4aXQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULAorCQkJCSZ4cHJ0LT5zdGF0ZSk7CisJCS8qICJjbG9zZSIgdGhlIHNvY2tldCwgcHJlc2VydmluZyB0aGUgbG9jYWwgcG9ydCAqLworCQl4c190Y3BfcmV1c2VfY29ubmVjdGlvbih4cHJ0LCB0cmFuc3BvcnQpOworCisJCWlmIChhYm9ydF9hbmRfZXhpdCkKKwkJCWdvdG8gb3V0X2VhZ2FpbjsKKwl9CisKKwlkcHJpbnRrKCJSUEM6ICAgICAgIHdvcmtlciBjb25uZWN0aW5nIHhwcnQgJXAgdG8gYWRkcmVzczogJXNcbiIsCisJCQl4cHJ0LCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUxMXSk7CisKKwlzdGF0dXMgPSB4c190Y3BfZmluaXNoX2Nvbm5lY3RpbmcoeHBydCwgc29jayk7CisJZHByaW50aygiUlBDOiAgICAgICAlcCBjb25uZWN0IHN0YXR1cyAlZCBjb25uZWN0ZWQgJWQgc29jayBzdGF0ZSAlZFxuIiwKKwkJCXhwcnQsIC1zdGF0dXMsIHhwcnRfY29ubmVjdGVkKHhwcnQpLAorCQkJc29jay0+c2stPnNrX3N0YXRlKTsKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgLUVDT05OUkVGVVNFRDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVORVRVTlJFQUNIOgorCQkvKiByZXRyeSB3aXRoIGV4aXN0aW5nIHNvY2tldCwgYWZ0ZXIgYSBkZWxheSAqLworCWNhc2UgMDoKKwljYXNlIC1FSU5QUk9HUkVTUzoKKwljYXNlIC1FQUxSRUFEWToKKwkJeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOworCQlyZXR1cm47CisJfQorCS8qIGdldCByaWQgb2YgZXhpc3Rpbmcgc29ja2V0LCBhbmQgcmV0cnkgKi8KKwl4c190Y3Bfc2h1dGRvd24oeHBydCk7CisJcHJpbnRrKCIlczogY29ubmVjdCByZXR1cm5lZCB1bmhhbmRsZWQgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsKK291dF9lYWdhaW46CisJc3RhdHVzID0gLUVBR0FJTjsKK291dDoKKwl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CisJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrZXQgKnhzX2NyZWF0ZV90Y3Bfc29jazQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAorCQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlpbnQgZXJyOworCisJLyogc3RhcnQgZnJvbSBzY3JhdGNoICovCisJZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZzb2NrKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgIGNhbid0IGNyZWF0ZSBUQ1AgdHJhbnNwb3J0IHNvY2tldCAoJWQpLlxuIiwKKwkJCQktZXJyKTsKKwkJZ290byBvdXRfZXJyOworCX0KKwl4c19yZWNsYXNzaWZ5X3NvY2tldDQoc29jayk7CisKKwlpZiAoeHNfYmluZDQodHJhbnNwb3J0LCBzb2NrKSA8IDApIHsKKwkJc29ja19yZWxlYXNlKHNvY2spOworCQlnb3RvIG91dF9lcnI7CisJfQorCXJldHVybiBzb2NrOworb3V0X2VycjoKKwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKK30KKworLyoqCiAgKiB4c190Y3BfY29ubmVjdF93b3JrZXI0IC0gY29ubmVjdCBhIFRDUCBzb2NrZXQgdG8gYSByZW1vdGUgZW5kcG9pbnQKICAqIEB3b3JrOiBSUEMgdHJhbnNwb3J0IHRvIGNvbm5lY3QKICAqCkBAIC0xNjY3LDUzICsxODI4LDMyIEBACiAJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzb2NrX3hwcnQsIGNvbm5lY3Rfd29ya2VyLndvcmspOwogCXN0cnVjdCBycGNfeHBydCAqeHBydCA9ICZ0cmFuc3BvcnQtPnhwcnQ7Ci0Jc3RydWN0IHNvY2tldCAqc29jayA9IHRyYW5zcG9ydC0+c29jazsKLQlpbnQgZXJyLCBzdGF0dXMgPSAtRUlPOwogCi0JaWYgKHhwcnQtPnNodXRkb3duKQotCQlnb3RvIG91dDsKKwl4c190Y3Bfc2V0dXBfc29ja2V0KHhwcnQsIHRyYW5zcG9ydCwgeHNfY3JlYXRlX3RjcF9zb2NrNCk7Cit9CiAKLQlpZiAoIXNvY2spIHsKLQkJLyogc3RhcnQgZnJvbSBzY3JhdGNoICovCi0JCWlmICgoZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZzb2NrKSkgPCAwKSB7Ci0JCQlkcHJpbnRrKCJSUEM6ICAgICAgIGNhbid0IGNyZWF0ZSBUQ1AgdHJhbnNwb3J0IHNvY2tldCAoJWQpLlxuIiwgLWVycik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQl4c19yZWNsYXNzaWZ5X3NvY2tldDQoc29jayk7CitzdGF0aWMgc3RydWN0IHNvY2tldCAqeHNfY3JlYXRlX3RjcF9zb2NrNihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCisJCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCWludCBlcnI7CiAKLQkJaWYgKHhzX2JpbmQ0KHRyYW5zcG9ydCwgc29jaykgPCAwKSB7Ci0JCQlzb2NrX3JlbGVhc2Uoc29jayk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZQotCQkvKiAiY2xvc2UiIHRoZSBzb2NrZXQsIHByZXNlcnZpbmcgdGhlIGxvY2FsIHBvcnQgKi8KLQkJeHNfdGNwX3JldXNlX2Nvbm5lY3Rpb24oeHBydCk7Ci0KLQlkcHJpbnRrKCJSUEM6ICAgICAgIHdvcmtlciBjb25uZWN0aW5nIHhwcnQgJXAgdG8gYWRkcmVzczogJXNcbiIsCi0JCQl4cHJ0LCB4cHJ0LT5hZGRyZXNzX3N0cmluZ3NbUlBDX0RJU1BMQVlfQUxMXSk7Ci0KLQlzdGF0dXMgPSB4c190Y3BfZmluaXNoX2Nvbm5lY3RpbmcoeHBydCwgc29jayk7Ci0JZHByaW50aygiUlBDOiAgICAgICAlcCBjb25uZWN0IHN0YXR1cyAlZCBjb25uZWN0ZWQgJWQgc29jayBzdGF0ZSAlZFxuIiwKLQkJCXhwcnQsIC1zdGF0dXMsIHhwcnRfY29ubmVjdGVkKHhwcnQpLAotCQkJc29jay0+c2stPnNrX3N0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQkJY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCQljYXNlIC1FQUxSRUFEWToKLQkJCQlnb3RvIG91dF9jbGVhcjsKLQkJCWNhc2UgLUVDT05OUkVGVVNFRDoKLQkJCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCQkJLyogcmV0cnkgd2l0aCBleGlzdGluZyBzb2NrZXQsIGFmdGVyIGEgZGVsYXkgKi8KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogZ2V0IHJpZCBvZiBleGlzdGluZyBzb2NrZXQsIGFuZCByZXRyeSAqLwotCQkJCXhzX3RjcF9zaHV0ZG93bih4cHJ0KTsKLQkJfQorCS8qIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgJnNvY2spOworCWlmIChlcnIgPCAwKSB7CisJCWRwcmludGsoIlJQQzogICAgICAgY2FuJ3QgY3JlYXRlIFRDUCB0cmFuc3BvcnQgc29ja2V0ICglZCkuXG4iLAorCQkJCS1lcnIpOworCQlnb3RvIG91dF9lcnI7CiAJfQotb3V0OgotCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIHN0YXR1cyk7Ci1vdXRfY2xlYXI6Ci0JeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOworCXhzX3JlY2xhc3NpZnlfc29ja2V0Nihzb2NrKTsKKworCWlmICh4c19iaW5kNih0cmFuc3BvcnQsIHNvY2spIDwgMCkgeworCQlzb2NrX3JlbGVhc2Uoc29jayk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJcmV0dXJuIHNvY2s7CitvdXRfZXJyOgorCXJldHVybiBFUlJfUFRSKC1FSU8pOwogfQogCiAvKioKQEAgLTE3MjcsNTIgKzE4NjcsOCBAQAogCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc29ja194cHJ0LCBjb25uZWN0X3dvcmtlci53b3JrKTsKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSAmdHJhbnNwb3J0LT54cHJ0OwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7Ci0JaW50IGVyciwgc3RhdHVzID0gLUVJTzsKIAotCWlmICh4cHJ0LT5zaHV0ZG93bikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXNvY2spIHsKLQkJLyogc3RhcnQgZnJvbSBzY3JhdGNoICovCi0JCWlmICgoZXJyID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVUNiwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmc29jaykpIDwgMCkgewotCQkJZHByaW50aygiUlBDOiAgICAgICBjYW4ndCBjcmVhdGUgVENQIHRyYW5zcG9ydCBzb2NrZXQgKCVkKS5cbiIsIC1lcnIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJeHNfcmVjbGFzc2lmeV9zb2NrZXQ2KHNvY2spOwotCi0JCWlmICh4c19iaW5kNih0cmFuc3BvcnQsIHNvY2spIDwgMCkgewotCQkJc29ja19yZWxlYXNlKHNvY2spOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UKLQkJLyogImNsb3NlIiB0aGUgc29ja2V0LCBwcmVzZXJ2aW5nIHRoZSBsb2NhbCBwb3J0ICovCi0JCXhzX3RjcF9yZXVzZV9jb25uZWN0aW9uKHhwcnQpOwotCi0JZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHRvIGFkZHJlc3M6ICVzXG4iLAotCQkJeHBydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FMTF0pOwotCi0Jc3RhdHVzID0geHNfdGNwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOwotCWRwcmludGsoIlJQQzogICAgICAgJXAgY29ubmVjdCBzdGF0dXMgJWQgY29ubmVjdGVkICVkIHNvY2sgc3RhdGUgJWRcbiIsCi0JCQl4cHJ0LCAtc3RhdHVzLCB4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSwgc29jay0+c2stPnNrX3N0YXRlKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQkJY2FzZSAtRUlOUFJPR1JFU1M6Ci0JCQljYXNlIC1FQUxSRUFEWToKLQkJCQlnb3RvIG91dF9jbGVhcjsKLQkJCWNhc2UgLUVDT05OUkVGVVNFRDoKLQkJCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCQkJLyogcmV0cnkgd2l0aCBleGlzdGluZyBzb2NrZXQsIGFmdGVyIGEgZGVsYXkgKi8KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyogZ2V0IHJpZCBvZiBleGlzdGluZyBzb2NrZXQsIGFuZCByZXRyeSAqLwotCQkJCXhzX3RjcF9zaHV0ZG93bih4cHJ0KTsKLQkJfQotCX0KLW91dDoKLQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwotb3V0X2NsZWFyOgotCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKKwl4c190Y3Bfc2V0dXBfc29ja2V0KHhwcnQsIHRyYW5zcG9ydCwgeHNfY3JlYXRlX3RjcF9zb2NrNik7CiB9CiAKIC8qKgpAQCAtMTgxNyw5ICsxOTEzLDYgQEAKIHsKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSB0YXNrLT50a194cHJ0OwogCi0JLyogSW5pdGlhdGUgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIHNvY2tldCBpZiBub3QgYWxyZWFkeSBkb25lICovCi0JaWYgKHRlc3RfYml0KFhQUlRfQ09OTkVDVEVELCAmeHBydC0+c3RhdGUpKQotCQl4c190Y3Bfc2h1dGRvd24oeHBydCk7CiAJLyogRXhpdCBpZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIHNvY2tldCBzaHV0ZG93biB0byBjb21wbGV0ZSAqLwogCWlmICh0ZXN0X2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBiYWFjOTEwLi45ZGNjNmU3IDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC04MzIsNyArODMyLDcgQEAKIAkJICogQWxsIHJpZ2h0LCBsZXQncyBjcmVhdGUgaXQuCiAJCSAqLwogCQltb2RlID0gU19JRlNPQ0sgfAotCQkgICAgICAgKFNPQ0tfSU5PREUoc29jayktPmlfbW9kZSAmIH5jdXJyZW50LT5mcy0+dW1hc2spOworCQkgICAgICAgKFNPQ0tfSU5PREUoc29jayktPmlfbW9kZSAmIH5jdXJyZW50X3VtYXNrKCkpOwogCQllcnIgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9ta25vZF9kcHV0OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCmluZGV4IDI4NTc0YWUuLmIxZmQ0OGQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKQEAgLTc1LDYgKzc1LDEwIEBACiAJYWxwaGEpCiAJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCiAJCTs7CisJcGFyaXNjKikKKwkJWyAtZiAiJHtLQlVJTERfSU1BR0V9IiBdICYmIGNwIC12IC0tICIke0tCVUlMRF9JTUFHRX0iICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0iCisJCVsgLWYgIiR7b2JqdHJlZX0vbGlmaW1hZ2UiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vbGlmaW1hZ2UiICIke3RtcGRpcn0vYm9vdC9saWZpbWFnZS0ke0tFUk5FTFJFTEVBU0V9IgorCQk7OwogCXZheCkKIAkJWyAtZiAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgXSAmJiBjcCAtdiAtLSAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHtLRVJORUxSRUxFQVNFfS5TWVMiCiAJCVsgLWYgIiR7b2JqdHJlZX0vdm1saW51eC5kc2siIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vdm1saW51eC5kc2siICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0uZHNrIgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCmluZGV4IDNhYWNkMGYuLjVmZGE3ZGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYworKysgYi9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgQUNDX01LTk9EIDEKICNkZWZpbmUgQUNDX1JFQUQgIDIKQEAgLTIxLDkgKzIyLDExIEBACiAjZGVmaW5lIERFVl9DSEFSICAyCiAjZGVmaW5lIERFVl9BTEwgICA0ICAvKiB0aGlzIHJlcHJlc2VudHMgYWxsIGRldmljZXMgKi8KIAorc3RhdGljIERFRklORV9NVVRFWChkZXZjZ3JvdXBfbXV0ZXgpOworCiAvKgogICogd2hpdGVsaXN0IGxvY2tpbmcgcnVsZXM6Ci0gKiBob2xkIGNncm91cF9sb2NrKCkgZm9yIHVwZGF0ZS9yZWFkLgorICogaG9sZCBkZXZjZ3JvdXBfbXV0ZXggZm9yIHVwZGF0ZS9yZWFkLgogICogaG9sZCByY3VfcmVhZF9sb2NrKCkgZm9yIHJlYWQuCiAgKi8KIApAQCAtNjcsNyArNzAsNyBAQAogfQogCiAvKgotICogY2FsbGVkIHVuZGVyIGNncm91cF9sb2NrKCkKKyAqIGNhbGxlZCB1bmRlciBkZXZjZ3JvdXBfbXV0ZXgKICAqLwogc3RhdGljIGludCBkZXZfd2hpdGVsaXN0X2NvcHkoc3RydWN0IGxpc3RfaGVhZCAqZGVzdCwgc3RydWN0IGxpc3RfaGVhZCAqb3JpZykKIHsKQEAgLTkyLDcgKzk1LDcgQEAKIAogLyogU3R1cGlkIHByb3RvdHlwZSAtIGRvbid0IGJvdGhlciBjb21iaW5pbmcgZXhpc3RpbmcgZW50cmllcyAqLwogLyoKLSAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCisgKiBjYWxsZWQgdW5kZXIgZGV2Y2dyb3VwX211dGV4CiAgKi8KIHN0YXRpYyBpbnQgZGV2X3doaXRlbGlzdF9hZGQoc3RydWN0IGRldl9jZ3JvdXAgKmRldl9jZ3JvdXAsCiAJCQlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCkKQEAgLTEzMCw3ICsxMzMsNyBAQAogfQogCiAvKgotICogY2FsbGVkIHVuZGVyIGNncm91cF9sb2NrKCkKKyAqIGNhbGxlZCB1bmRlciBkZXZjZ3JvdXBfbXV0ZXgKICAqLwogc3RhdGljIHZvaWQgZGV2X3doaXRlbGlzdF9ybShzdHJ1Y3QgZGV2X2Nncm91cCAqZGV2X2Nncm91cCwKIAkJCXN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKndoKQpAQCAtMTg1LDggKzE4OCwxMCBAQAogCQlsaXN0X2FkZCgmd2gtPmxpc3QsICZkZXZfY2dyb3VwLT53aGl0ZWxpc3QpOwogCX0gZWxzZSB7CiAJCXBhcmVudF9kZXZfY2dyb3VwID0gY2dyb3VwX3RvX2RldmNncm91cChwYXJlbnRfY2dyb3VwKTsKKwkJbXV0ZXhfbG9jaygmZGV2Y2dyb3VwX211dGV4KTsKIAkJcmV0ID0gZGV2X3doaXRlbGlzdF9jb3B5KCZkZXZfY2dyb3VwLT53aGl0ZWxpc3QsCiAJCQkJJnBhcmVudF9kZXZfY2dyb3VwLT53aGl0ZWxpc3QpOworCQltdXRleF91bmxvY2soJmRldmNncm91cF9tdXRleCk7CiAJCWlmIChyZXQpIHsKIAkJCWtmcmVlKGRldl9jZ3JvdXApOwogCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKQEAgLTI3Myw3ICsyNzgsNyBAQAogICogZG9lcyB0aGUgYWNjZXNzIGdyYW50ZWQgdG8gZGV2X2Nncm91cCBjIGNvbnRhaW4gdGhlIGFjY2VzcwogICogcmVxdWVzdGVkIGluIHdoaXRlbGlzdCBpdGVtIHJlZndoLgogICogcmV0dXJuIDEgaWYgeWVzLCAwIGlmIG5vLgotICogY2FsbCB3aXRoIGMtPmxvY2sgaGVsZAorICogY2FsbCB3aXRoIGRldmNncm91cF9tdXRleCBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgbWF5X2FjY2Vzc193aGl0ZWxpc3Qoc3RydWN0IGRldl9jZ3JvdXAgKmMsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZfd2hpdGVsaXN0X2l0ZW0gKnJlZndoKQpAQCAtNDI2LDExICs0MzEsMTEgQEAKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlcikKIHsKIAlpbnQgcmV0dmFsOwotCWlmICghY2dyb3VwX2xvY2tfbGl2ZV9ncm91cChjZ3JwKSkKLQkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZkZXZjZ3JvdXBfbXV0ZXgpOwogCXJldHZhbCA9IGRldmNncm91cF91cGRhdGVfYWNjZXNzKGNncm91cF90b19kZXZjZ3JvdXAoY2dycCksCiAJCQkJCSBjZnQtPnByaXZhdGUsIGJ1ZmZlcik7Ci0JY2dyb3VwX3VubG9jaygpOworCW11dGV4X3VubG9jaygmZGV2Y2dyb3VwX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAyMDZlNTM4Li41Mjg0MjU1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTQ0NSw2ICs0NDUsNyBAQAogCQlyZXR1cm4gMDsKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfY3JlYXRlKTsKIAogaW50IHNlY3VyaXR5X2lub2RlX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKQEAgLTQ3NSw2ICs0NzYsNyBAQAogCQlyZXR1cm4gMDsKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzZWN1cml0eV9pbm9kZV9ta2Rpcik7CiAKIGludCBzZWN1cml0eV9pbm9kZV9ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwppbmRleCBkNDdmMTZiLi4zYmJlMDFhIDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYworKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVhbHBhdGguaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbmZvLmMgYi9zb3VuZC9jb3JlL2luZm8uYwppbmRleCA3MGZhODcxLi4zNWRmNjE0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luZm8uYworKysgYi9zb3VuZC9jb3JlL2luZm8uYwpAQCAtMTU0LDExICsxNTQsNiBAQAogc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpzbmRfb3NzX3Jvb3Q7CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHNuZF9pbmZvX2VudHJ5X3ByZXBhcmUoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKLXsKLQlkZS0+b3duZXIgPSBUSElTX01PRFVMRTsKLX0KLQogc3RhdGljIHZvaWQgc25kX3JlbW92ZV9wcm9jX2VudHJ5KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LAogCQkJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKQEAgLTUyMiwzMiArNTE3LDExIEBACiAJLnJlbGVhc2UgPQkJc25kX2luZm9fZW50cnlfcmVsZWFzZSwKIH07CiAKLS8qKgotICogc25kX2NyZWF0ZV9wcm9jX2VudHJ5IC0gY3JlYXRlIGEgcHJvY2ZzIGVudHJ5Ci0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHByb2MgZmlsZQotICogQG1vZGU6IHRoZSBmaWxlIHBlcm1pc3Npb24gYml0cywgU19JeHh4Ci0gKiBAcGFyZW50OiB0aGUgcGFyZW50IHByb2MtZGlyZWN0b3J5IGVudHJ5Ci0gKgotICogQ3JlYXRlcyBhIG5ldyBwcm9jIGZpbGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcGVybWlzc2lvbgotICogb24gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBwb2ludGVyIG9mIG5ldyBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNuZF9jcmVhdGVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKLQkJCQkJCSAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7Ci0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIG1vZGUsIHBhcmVudCk7Ci0JaWYgKHApCi0JCXNuZF9pbmZvX2VudHJ5X3ByZXBhcmUocCk7Ci0JcmV0dXJuIHA7Ci19Ci0KIGludCBfX2luaXQgc25kX2luZm9faW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAotCXAgPSBzbmRfY3JlYXRlX3Byb2NfZW50cnkoImFzb3VuZCIsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywgTlVMTCk7CisJcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJhc291bmQiLCBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08sIE5VTEwpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNuZF9wcm9jX3Jvb3QgPSBwOwpAQCAtOTc0LDEyICs5NDgsMTEgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlyb290ID0gZW50cnktPnBhcmVudCA9PSBOVUxMID8gc25kX3Byb2Nfcm9vdCA6IGVudHJ5LT5wYXJlbnQtPnA7CiAJbXV0ZXhfbG9jaygmaW5mb19tdXRleCk7Ci0JcCA9IHNuZF9jcmVhdGVfcHJvY19lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPm1vZGUsIHJvb3QpOworCXAgPSBjcmVhdGVfcHJvY19lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPm1vZGUsIHJvb3QpOwogCWlmICghcCkgewogCQltdXRleF91bmxvY2soJmluZm9fbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcC0+b3duZXIgPSBlbnRyeS0+bW9kdWxlOwogCWlmICghU19JU0RJUihlbnRyeS0+bW9kZSkpCiAJCXAtPnByb2NfZm9wcyA9ICZzbmRfaW5mb19lbnRyeV9vcGVyYXRpb25zOwogCXAtPnNpemUgPSBlbnRyeS0+c2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMgYi9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCmluZGV4IDlkOThhNjYuLmQzMWMzNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKKysrIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvdGVhNTc1eC10dW5lci5oPgogCkBAIC0zMSw2ICszMiwxMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBURUE1NzU3LzU3NTkgUGhpbGlwcyBBTS9GTSByYWRpbyB0dW5lciBjaGlwcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorI2RlZmluZSBGUkVRX0xPCQkgKDg3ICogMTYwMDApCisjZGVmaW5lIEZSRVFfSEkJCSgxMDggKiAxNjAwMCkKKwogLyoKICAqIGRlZmluaXRpb25zCiAgKi8KQEAgLTUzLDYgKzYxLDE3IEBACiAjZGVmaW5lIFRFQTU3NVhfQklUX0RVTU1ZCSgxPDwxNSkJCS8qIGJ1ZmZlciAqLwogI2RlZmluZSBURUE1NzVYX0JJVF9GUkVRX01BU0sJMHg3ZmZmCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9Cit9OworCiAvKgogICogbG93bGV2ZWwgcGFydAogICovCkBAIC04NCw5NCArMTAzLDE0NiBAQAogICogTGludXggVmlkZW8gaW50ZXJmYWNlCiAgKi8KIAotc3RhdGljIGxvbmcgc25kX3RlYTU3NXhfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKIAlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAKLQlzd2l0Y2goY21kKSB7Ci0JCWNhc2UgVklESU9DR0NBUDoKLQkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdjsKLQkJCXYudHlwZSA9IFZJRF9UWVBFX1RVTkVSOwotCQkJdi5jaGFubmVscyA9IDE7Ci0JCQl2LmF1ZGlvcyA9IDE7Ci0JCQkvKiBObyB3ZSBkb24ndCBkbyBwaWN0dXJlcyAqLwotCQkJdi5tYXh3aWR0aCA9IDA7Ci0JCQl2Lm1heGhlaWdodCA9IDA7Ci0JCQl2Lm1pbndpZHRoID0gMDsKLQkJCXYubWluaGVpZ2h0ID0gMDsKLQkJCXN0cmNweSh2Lm5hbWUsIHRlYS0+dGVhNTc1OSA/ICJURUE1NzU5IiA6ICJURUE1NzU3Iik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywmdixzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSE9MCkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmICh2LnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXYucmFuZ2Vsb3cgPSAoODcqMTYwMDApOwotCQkJdi5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQkJCXYuZmxhZ3MgPSBWSURFT19UVU5FUl9MT1c7Ci0JCQl2Lm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0JCQlzdHJjcHkodi5uYW1lLCAiRk0iKTsKLQkJCXYuc2lnbmFsID0gMHhGRkZGOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2LCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmKHYudHVuZXIhPTApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBPbmx5IDEgdHVuZXIgc28gbm8gc2V0dGluZyBuZWVkZWQgISAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKLQkJCWlmKGNvcHlfdG9fdXNlcihhcmcsICZ0ZWEtPmZyZXEsIHNpemVvZih0ZWEtPmZyZXEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQljYXNlIFZJRElPQ1NGUkVROgotCQkJaWYoY29weV9mcm9tX3VzZXIoJnRlYS0+ZnJlcSwgYXJnLCBzaXplb2YodGVhLT5mcmVxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCW1lbXNldCgmdiwgMCwgc2l6ZW9mKHYpKTsKLQkJCXN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOwotCQkJaWYoY29weV90b191c2VyKGFyZywmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCWlmKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodGVhLT5vcHMtPm11dGUpCi0JCQkJdGVhLT5vcHMtPm11dGUodGVhLAotCQkJCQkgICAgICAgKHYuZmxhZ3MgJgotCQkJCQkJVklERU9fQVVESU9fTVVURSkgPyAxIDogMCk7Ci0JCQlpZih2LmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCXN0cmNweSh2LT5jYXJkLCB0ZWEtPnRlYTU3NTkgPyAiVEVBNTc1OSIgOiAiVEVBNTc1NyIpOworCXN0cmxjcHkodi0+ZHJpdmVyLCAidGVhNTc1eC10dW5lciIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJNYWVzdHJvIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiUENJIik7CisJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF90ZWE1NzV4X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXYtPnNpZ25hbCA9IDB4ZmZmZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gdGVhLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCisJCXJldHVybiAtRUlOVkFMOworCisJdGVhLT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCisJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCWN0cmwtPnZhbHVlID0gdGVhLT5tdXRlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCXRlYS0+b3BzLT5tdXRlKHRlYSwgY3RybC0+dmFsdWUpOworCQkJdGVhLT5tdXRlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE4OSw1MCArMjYwLDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGVhNTc1eF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0ZWE1NzV4X2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlYTU3NXhfcmFkaW8gPSB7CisJLm5hbWUgICAgICAgICAgID0gInRlYTU3NXgtdHVuZXIiLAorCS5mb3BzICAgICAgICAgICA9ICZ0ZWE1NzV4X2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdGVhNTc1eF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKIC8qCiAgKiBpbml0aWFsaXplIGFsbCB0aGUgdGVhNTc1eCBjaGlwcwogICovCiB2b2lkIHNuZF90ZWE1NzV4X2luaXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7CisJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBpbnQgdmFsOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnRlYTU3NXhfcmFkaW9faW5zdDsKIAogCXZhbCA9IHRlYS0+b3BzLT5yZWFkKHRlYSk7CiAJaWYgKHZhbCA9PSAweDFmZmZmZmYgfHwgdmFsID09IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgVEVBNTc1eCBjaGlwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInRlYTU3NXgtdHVuZXI6IENhbm5vdCBmaW5kIFRFQTU3NXggY2hpcFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQltZW1zZXQoJnRlYS0+dmQsIDAsIHNpemVvZih0ZWEtPnZkKSk7Ci0Jc3RyY3B5KHRlYS0+dmQubmFtZSwgdGVhLT50ZWE1NzU5ID8gIlRFQTU3NTkgcmFkaW8iIDogIlRFQTU3NTcgcmFkaW8iKTsKLQl0ZWEtPnZkLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9yZWxlYXNlOwotCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZWEtPnZkLCB0ZWEpOwotCXRlYS0+dmQuZm9wcyA9ICZ0ZWEtPmZvcHM7CiAJdGVhLT5pbl91c2UgPSAwOwotCXRlYS0+Zm9wcy5vd25lciA9IHRlYS0+Y2FyZC0+bW9kdWxlOwotCXRlYS0+Zm9wcy5vcGVuID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW47Ci0JdGVhLT5mb3BzLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZTsKLQl0ZWEtPmZvcHMuaW9jdGwgPSBzbmRfdGVhNTc1eF9pb2N0bDsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkLCBWRkxfVFlQRV9SQURJTywgdGVhLT5kZXZfbnIgLSAxKSA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIHRlYTU3NXggdHVuZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCXRlYS0+dmRfcmVnaXN0ZXJlZCA9IDE7Ci0KIAl0ZWEtPnZhbCA9IFRFQTU3NVhfQklUX0JBTkRfRk0gfCBURUE1NzVYX0JJVF9TRUFSQ0hfMTBfNDA7CiAJdGVhLT5mcmVxID0gOTA1MDAgKiAxNjsJCS8qIDkwLjVNaHogZGVmYXVsdCAqLwogCisJdGVhNTc1eF9yYWRpb19pbnN0ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHRlYTU3NXhfcmFkaW9faW5zdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGVhNTc1eC10dW5lcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHRlYTU3NXhfcmFkaW9faW5zdCwgJnRlYTU3NXhfcmFkaW8sIHNpemVvZih0ZWE1NzV4X3JhZGlvKSk7CisKKwlzdHJjcHkodGVhNTc1eF9yYWRpby5uYW1lLCB0ZWEtPnRlYTU3NTkgPworCQkJCSAgICJURUE1NzU5IHJhZGlvIiA6ICJURUE1NzU3IHJhZGlvIik7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh0ZWE1NzV4X3JhZGlvX2luc3QsIHRlYSk7CisKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodGVhNTc1eF9yYWRpb19pbnN0LAorCQkJCSAgICAgICBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJa2ZyZWUodGVhNTc1eF9yYWRpb19pbnN0KTsKKwkJcmV0dXJuOworCX0KKwogCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7CiAKIAkvKiBtdXRlIG9uIGluaXQgKi8KLQlpZiAodGVhLT5vcHMtPm11dGUpCisJaWYgKHRlYS0+b3BzLT5tdXRlKSB7CiAJCXRlYS0+b3BzLT5tdXRlKHRlYSwgMSk7CisJCXRlYS0+bXV0ZSA9IDE7CisJfQorCXRlYS0+dmQgPSB0ZWE1NzV4X3JhZGlvX2luc3Q7CiB9CiAKIHZvaWQgc25kX3RlYTU3NXhfZXhpdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKIHsKLQlpZiAodGVhLT52ZF9yZWdpc3RlcmVkKSB7Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkKTsKLQkJdGVhLT52ZF9yZWdpc3RlcmVkID0gMDsKKwlpZiAodGVhLT52ZCkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh0ZWEtPnZkKTsKKwkJdGVhLT52ZCA9IE5VTEw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGNhMjVlNjEuLjkzNDIyZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC01MDcsNyArNTA3LDcgQEAKIGNvbmZpZyBTTkRfRk04MDFfVEVBNTc1WF9CT09MCiAJYm9vbCAiRm9ydGVNZWRpYSBGTTgwMSArIFRFQTU3NTcgdHVuZXIiCiAJZGVwZW5kcyBvbiBTTkRfRk04MDEKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDE9eSB8fCBWSURFT19WNEwxPVNORF9GTTgwMQorCWRlcGVuZHMgb24gVklERU9fVjRMMj15IHx8IFZJREVPX1Y0TDI9U05EX0ZNODAxCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlIEZvcnRlTWVkaWEKIAkgIEZNODAxIGNoaXAgd2l0aCBhIFRFQTU3NTcgdHVuZXIgY29ubmVjdGVkIHRvIEdQSU8xLTMgcGlucyAoTWVkaWEK